Skip to content

Commit 7d7ee34

Browse files
committed
Fix clang-tidy issues
Signed-off-by: Dom Del Nano <[email protected]>
1 parent f8042e8 commit 7d7ee34

File tree

12 files changed

+69
-103
lines changed

12 files changed

+69
-103
lines changed

src/stirling/bpf_tools/BUILD.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pl_cc_bpf_test(
127127
],
128128
deps = [
129129
":cc_library",
130-
"//src/stirling/source_connectors/socket_tracer/testing/container_images:go_1_19_grpc_client_container",
131-
"//src/stirling/source_connectors/socket_tracer/testing/container_images:go_1_19_grpc_server_container",
130+
"//src/stirling/source_connectors/socket_tracer/testing/container_images:go_1_24_grpc_client_container",
131+
"//src/stirling/source_connectors/socket_tracer/testing/container_images:go_1_24_grpc_server_container",
132132
],
133133
)

src/stirling/bpf_tools/uprobe_extra_trigger_bpf_test.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
#include "src/common/testing/testing.h"
2222
#include "src/stirling/bpf_tools/bcc_wrapper.h"
2323
#include "src/stirling/bpf_tools/macros.h"
24-
#include "src/stirling/source_connectors/socket_tracer/testing/container_images/go_1_19_grpc_client_container.h"
25-
#include "src/stirling/source_connectors/socket_tracer/testing/container_images/go_1_19_grpc_server_container.h"
24+
#include "src/stirling/source_connectors/socket_tracer/testing/container_images/go_1_24_grpc_client_container.h"
25+
#include "src/stirling/source_connectors/socket_tracer/testing/container_images/go_1_24_grpc_server_container.h"
2626

2727
namespace px {
2828
namespace stirling {
@@ -55,10 +55,10 @@ TEST(BCCWrapper, DISABLED_UnexpectedExtraTrigger) {
5555
BCCWrapperImpl bcc_wrapper;
5656
ASSERT_OK(bcc_wrapper.InitBPFProgram(kBCCProgram));
5757

58-
::px::stirling::testing::Go1_19_GRPCServerContainer server1;
59-
::px::stirling::testing::Go1_19_GRPCServerContainer server2;
60-
::px::stirling::testing::Go1_19_GRPCClientContainer client1;
61-
::px::stirling::testing::Go1_19_GRPCClientContainer client2;
58+
::px::stirling::testing::Go1_24_GRPCServerContainer server1;
59+
::px::stirling::testing::Go1_24_GRPCServerContainer server2;
60+
::px::stirling::testing::Go1_24_GRPCClientContainer client1;
61+
::px::stirling::testing::Go1_24_GRPCClientContainer client2;
6262

6363
// A Uprobe template for the GRPCServerContainer.
6464
// Binary path is set later.
@@ -70,7 +70,7 @@ TEST(BCCWrapper, DISABLED_UnexpectedExtraTrigger) {
7070
};
7171

7272
// A templated path to the server. We will replace $0 with the pid of the server instance.
73-
const std::string kServerPath = "/proc/$0/root/golang_1_19_grpc_tls_server_binary";
73+
const std::string kServerPath = "/proc/$0/root/golang_1_24_grpc_tls_server_binary";
7474

7575
// Run server 1 and attach uprobes to it.
7676
ASSERT_OK(server1.Run(std::chrono::seconds{60}));

src/stirling/e2e_tests/BUILD.bazel

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,14 @@ pl_sh_bpf_test(
8888
srcs = ["stirling_wrapper_bpf_test.sh"],
8989
args = [
9090
"$(location //src/stirling/binaries:stirling_wrapper)",
91-
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_19_grpc_server_with_certs)",
92-
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_19_grpc_client)",
91+
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs)",
92+
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_24_grpc_client)",
9393
"-stirling_profiler_java_agent_libs %s" % agent_libs_arg,
9494
],
9595
data = [
9696
"//src/stirling/binaries:stirling_wrapper",
97-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_19_grpc_client",
98-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_19_grpc_server_with_certs",
97+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_24_grpc_client",
98+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs",
9999
] + agent_libs,
100100
# TODO(PL-1462): Uprobe attaching sometimes fails.
101101
flaky = True,
@@ -132,13 +132,13 @@ pl_sh_bpf_test(
132132
srcs = ["stirling_wrapper_container_bpf_test.sh"],
133133
args = [
134134
"$(location //src/stirling/binaries:stirling_wrapper_image.tar)",
135-
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_19_grpc_server_with_certs)",
136-
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_19_grpc_client)",
135+
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs)",
136+
"$(location //src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_24_grpc_client)",
137137
],
138138
data = [
139139
"//src/stirling/binaries:stirling_wrapper_image.tar",
140-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_19_grpc_client",
141-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_19_grpc_server_with_certs",
140+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_24_grpc_client",
141+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs",
142142
],
143143
flaky = True,
144144
tags = [

src/stirling/source_connectors/dynamic_bpftrace/BUILD.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ pl_cc_bpf_test(
3838
name = "dynamic_bpftrace_connector_bpf_test",
3939
srcs = ["dynamic_bpftrace_connector_bpf_test.cc"],
4040
data = [
41-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_18_grpc_server_with_certs",
42-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_19_grpc_server_with_certs",
41+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_23_grpc_server_with_certs",
42+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs",
4343
],
4444
tags = [
4545
"cpu:16",

src/stirling/source_connectors/dynamic_bpftrace/dynamic_bpftrace_connector_bpf_test.cc

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -462,23 +462,23 @@ TEST(DynamicBPFTraceConnectorTest, BPFTraceCheckPrintfsError) {
462462
HasSubstr("All printf statements must have exactly the same format string")));
463463
}
464464

465-
constexpr std::string_view kServerPath_1_18 =
465+
constexpr std::string_view kServerPath_1_23 =
466466
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server/"
467-
"golang_1_18_grpc_server";
468-
constexpr std::string_view kServerPath_1_19 =
467+
"golang_1_23_grpc_server";
468+
constexpr std::string_view kServerPath_1_24 =
469469
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server/"
470-
"golang_1_19_grpc_server";
470+
"golang_1_24_grpc_server";
471471

472472
TEST(DynamicBPFTraceConnectorTest, InsertUProbeTargetObjPaths) {
473-
std::string go1_18_binary_path = px::testing::BazelRunfilePath(kServerPath_1_18).string();
474-
std::string go1_19_binary_path = px::testing::BazelRunfilePath(kServerPath_1_19).string();
473+
std::string go1_23_binary_path = px::testing::BazelRunfilePath(kServerPath_1_23).string();
474+
std::string go1_24_binary_path = px::testing::BazelRunfilePath(kServerPath_1_24).string();
475475

476-
ASSERT_TRUE(fs::Exists(go1_18_binary_path));
477-
ASSERT_TRUE(fs::Exists(go1_19_binary_path));
476+
ASSERT_TRUE(fs::Exists(go1_23_binary_path));
477+
ASSERT_TRUE(fs::Exists(go1_24_binary_path));
478478

479479
DeploymentSpec spec;
480-
spec.mutable_path_list()->add_paths(go1_18_binary_path);
481-
spec.mutable_path_list()->add_paths(go1_19_binary_path);
480+
spec.mutable_path_list()->add_paths(go1_23_binary_path);
481+
spec.mutable_path_list()->add_paths(go1_24_binary_path);
482482

483483
std::string uprobe_script =
484484
"// Deploys uprobes to trace http2 traffic.\n"
@@ -489,16 +489,16 @@ TEST(DynamicBPFTraceConnectorTest, InsertUProbeTargetObjPaths) {
489489
InsertUprobeTargetObjPaths(spec, &uprobe_script);
490490
EXPECT_EQ(
491491
uprobe_script,
492-
absl::StrCat("// Deploys uprobes to trace http2 traffic.\n", "uprobe:", go1_18_binary_path,
492+
absl::StrCat("// Deploys uprobes to trace http2 traffic.\n", "uprobe:", go1_23_binary_path,
493493
":\"golang.org/x/net/http2.(*Framer).WriteDataPadded\",\n"
494494
"uprobe:",
495-
go1_19_binary_path,
495+
go1_24_binary_path,
496496
":\"golang.org/x/net/http2.(*Framer).WriteDataPadded\""
497497
"{ printf(\"stream_id: %d, end_stream: %d\", arg0, arg1); }\n",
498-
"uretprobe:", go1_18_binary_path,
498+
"uretprobe:", go1_23_binary_path,
499499
":\"golang.org/x/net/http2.(*Framer).WriteDataPadded\",\n"
500500
"uretprobe:",
501-
go1_19_binary_path,
501+
go1_24_binary_path,
502502
":\"golang.org/x/net/http2.(*Framer).WriteDataPadded\""
503503
"{ printf(\"retval: %d\", retval); }"));
504504
}

src/stirling/source_connectors/dynamic_tracer/BUILD.bazel

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,10 @@ pl_cc_bpf_test(
4848
timeout = "moderate",
4949
srcs = ["dynamic_trace_bpf_test.cc"],
5050
data = [
51-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_21_grpc_client",
52-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_22_grpc_client",
5351
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_23_grpc_client",
54-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_21_grpc_server_with_certs",
55-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_22_grpc_server_with_certs",
52+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_24_grpc_client",
5653
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_23_grpc_server_with_certs",
54+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs",
5755
],
5856
tags = [
5957
"cpu:16",
@@ -73,9 +71,8 @@ pl_cc_bpf_test(
7371
srcs = ["stirling_dt_bpf_test.cc"],
7472
data = [
7573
"//src/stirling/obj_tools/testdata/cc:test_exe",
76-
"//src/stirling/obj_tools/testdata/go:test_go_1_21_binary",
77-
"//src/stirling/obj_tools/testdata/go:test_go_1_22_binary",
7874
"//src/stirling/obj_tools/testdata/go:test_go_1_23_binary",
75+
"//src/stirling/obj_tools/testdata/go:test_go_1_24_binary",
7976
"//src/stirling/testing/dns:dns_hammer",
8077
"//src/stirling/testing/dns:dns_hammer_image.tar",
8178
],

src/stirling/source_connectors/dynamic_tracer/dynamic_trace_bpf_test.cc

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,20 @@
3030

3131
#include "src/stirling/proto/stirling.pb.h"
3232

33-
constexpr std::string_view kGo1_21_ClientPath =
34-
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client/"
35-
"golang_1_21_grpc_client";
36-
constexpr std::string_view kGo1_21_ServerPath =
37-
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server/"
38-
"golang_1_21_grpc_server";
39-
40-
constexpr std::string_view kGo1_22_ClientPath =
41-
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client/"
42-
"golang_1_22_grpc_client";
43-
constexpr std::string_view kGo1_22_ServerPath =
44-
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server/"
45-
"golang_1_22_grpc_server";
46-
4733
constexpr std::string_view kGo1_23_ClientPath =
4834
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client/"
4935
"golang_1_23_grpc_client";
5036
constexpr std::string_view kGo1_23_ServerPath =
5137
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server/"
5238
"golang_1_23_grpc_server";
5339

40+
constexpr std::string_view kGo1_24_ClientPath =
41+
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client/"
42+
"golang_1_24_grpc_client";
43+
constexpr std::string_view kGo1_24_ServerPath =
44+
"src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server/"
45+
"golang_1_24_grpc_server";
46+
5447
DECLARE_bool(debug_dt_pipeline);
5548
namespace px {
5649
namespace stirling {
@@ -129,9 +122,8 @@ class GoHTTPDynamicTraceTest
129122
};
130123

131124
INSTANTIATE_TEST_SUITE_P(GoHTTPDynamicTraceTestInstances, GoHTTPDynamicTraceTest,
132-
::testing::Values(std::make_pair(kGo1_21_ClientPath, kGo1_21_ServerPath),
133-
std::make_pair(kGo1_22_ClientPath, kGo1_22_ServerPath),
134-
std::make_pair(kGo1_23_ClientPath, kGo1_23_ServerPath)));
125+
::testing::Values(std::make_pair(kGo1_23_ClientPath, kGo1_23_ServerPath),
126+
std::make_pair(kGo1_24_ClientPath, kGo1_24_ServerPath)));
135127

136128
constexpr char kGRPCTraceProgram[] = R"(
137129
tracepoints {

src/stirling/source_connectors/dynamic_tracer/dynamic_tracing/BUILD.bazel

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pl_cc_test(
4545
name = "code_gen_test",
4646
srcs = ["code_gen_test.cc"],
4747
data = [
48-
"//src/stirling/obj_tools/testdata/go:test_go_1_21_binary",
48+
"//src/stirling/obj_tools/testdata/go:test_go_1_24_binary",
4949
],
5050
deps = [
5151
":cc_library",
@@ -57,7 +57,7 @@ pl_cc_test(
5757
srcs = ["dwarvifier_test.cc"],
5858
data = [
5959
"//src/stirling/obj_tools/testdata/cc:test_exe",
60-
"//src/stirling/obj_tools/testdata/go:test_go_1_21_binary",
60+
"//src/stirling/obj_tools/testdata/go:test_go_1_24_binary",
6161
],
6262
deps = [
6363
":cc_library",
@@ -68,7 +68,7 @@ pl_cc_test(
6868
name = "probe_transformer_test",
6969
srcs = ["probe_transformer_test.cc"],
7070
data = [
71-
"//src/stirling/obj_tools/testdata/go:test_go_1_21_binary",
71+
"//src/stirling/obj_tools/testdata/go:test_go_1_24_binary",
7272
],
7373
deps = [
7474
":cc_library",
@@ -80,7 +80,7 @@ pl_cc_test(
8080
name = "autogen_test",
8181
srcs = ["autogen_test.cc"],
8282
data = [
83-
"//src/stirling/obj_tools/testdata/go:test_go_1_21_binary",
83+
"//src/stirling/obj_tools/testdata/go:test_go_1_24_binary",
8484
],
8585
deps = [
8686
":cc_library",
@@ -92,9 +92,9 @@ pl_cc_test(
9292
name = "dynamic_tracer_test",
9393
srcs = ["dynamic_tracer_test.cc"],
9494
data = [
95-
"//src/stirling/obj_tools/testdata/go:test_go_1_21_binary",
96-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_21_grpc_client",
97-
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_21_grpc_server_with_certs",
95+
"//src/stirling/obj_tools/testdata/go:test_go_1_24_binary",
96+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_client:golang_1_24_grpc_client",
97+
"//src/stirling/source_connectors/socket_tracer/protocols/http2/testing/go_grpc_server:golang_1_24_grpc_server_with_certs",
9898
],
9999
tags = [
100100
"exclusive",

src/stirling/source_connectors/dynamic_tracer/stirling_dt_bpf_test.cc

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,8 @@ TEST_F(DynamicTraceAPITest, InvalidReference) {
274274
// Dynamic Trace Golang tests
275275
//-----------------------------------------------------------------------------
276276

277-
constexpr std::string_view kGo1_21BinaryPath =
278-
"src/stirling/obj_tools/testdata/go/test_go_1_21_binary";
279-
const std::string_view kGo1_22BinaryPath = "src/stirling/obj_tools/testdata/go/test_go_1_22_binary";
280277
const std::string_view kGo1_23BinaryPath = "src/stirling/obj_tools/testdata/go/test_go_1_23_binary";
278+
const std::string_view kGo1_24BinaryPath = "src/stirling/obj_tools/testdata/go/test_go_1_24_binary";
281279

282280
struct DynamicTraceGolangTestCase {
283281
const std::filesystem::path binary_path;
@@ -294,9 +292,8 @@ class DynamicTraceGolangTest : public StirlingDynamicTraceBPFTest,
294292
};
295293

296294
INSTANTIATE_TEST_SUITE_P(DynamicTraceGolangTestInstances, DynamicTraceGolangTest,
297-
::testing::Values(DynamicTraceGolangTestCase{kGo1_21BinaryPath},
298-
DynamicTraceGolangTestCase{kGo1_22BinaryPath},
299-
DynamicTraceGolangTestCase{kGo1_23BinaryPath}));
295+
::testing::Values(DynamicTraceGolangTestCase{kGo1_23BinaryPath},
296+
DynamicTraceGolangTestCase{kGo1_24BinaryPath}));
300297

301298
TEST_P(DynamicTraceGolangTest, TraceLatencyOnly) {
302299
BinaryRunner trace_target;
@@ -581,22 +578,16 @@ tracepoints {
581578
INSTANTIATE_TEST_SUITE_P(
582579
NilAndNonNilError, ReturnedErrorInterfaceTest,
583580
::testing::Values(
584-
ReturnedErrorInterfaceTestCase{kGo1_21BinaryPath,
585-
absl::Substitute(kProgramTxtPBTmpl, "main.ReturnError"),
586-
"{\"X\":3,\"Y\":4}"},
587-
ReturnedErrorInterfaceTestCase{kGo1_21BinaryPath,
588-
absl::Substitute(kProgramTxtPBTmpl, "main.ReturnNilError"),
589-
"{\"tab\":0,\"data\":0}"},
590-
ReturnedErrorInterfaceTestCase{kGo1_22BinaryPath,
581+
ReturnedErrorInterfaceTestCase{kGo1_23BinaryPath,
591582
absl::Substitute(kProgramTxtPBTmpl, "main.ReturnError"),
592583
"{\"X\":3,\"Y\":4}"},
593-
ReturnedErrorInterfaceTestCase{kGo1_22BinaryPath,
584+
ReturnedErrorInterfaceTestCase{kGo1_23BinaryPath,
594585
absl::Substitute(kProgramTxtPBTmpl, "main.ReturnNilError"),
595586
"{\"tab\":0,\"data\":0}"},
596-
ReturnedErrorInterfaceTestCase{kGo1_23BinaryPath,
587+
ReturnedErrorInterfaceTestCase{kGo1_24BinaryPath,
597588
absl::Substitute(kProgramTxtPBTmpl, "main.ReturnError"),
598589
"{\"X\":3,\"Y\":4}"},
599-
ReturnedErrorInterfaceTestCase{kGo1_23BinaryPath,
590+
ReturnedErrorInterfaceTestCase{kGo1_24BinaryPath,
600591
absl::Substitute(kProgramTxtPBTmpl, "main.ReturnNilError"),
601592
"{\"tab\":0,\"data\":0}"}));
602593

@@ -681,12 +672,10 @@ TEST_P(DynamicTraceGolangTestWithParam, TraceByteArray) {
681672

682673
INSTANTIATE_TEST_SUITE_P(
683674
GolangByteArrayTests, DynamicTraceGolangTestWithParam,
684-
::testing::Values(TestParam{kGo1_21BinaryPath, "main.BytesToHex", "Bytes"},
685-
TestParam{kGo1_21BinaryPath, "main.Uint8ArrayToHex", "Uint8"},
686-
TestParam{kGo1_22BinaryPath, "main.BytesToHex", "Bytes"},
687-
TestParam{kGo1_22BinaryPath, "main.Uint8ArrayToHex", "Uint8"},
688-
TestParam{kGo1_23BinaryPath, "main.BytesToHex", "Bytes"},
689-
TestParam{kGo1_23BinaryPath, "main.Uint8ArrayToHex", "Uint8"}));
675+
::testing::Values(TestParam{kGo1_23BinaryPath, "main.BytesToHex", "Bytes"},
676+
TestParam{kGo1_23BinaryPath, "main.Uint8ArrayToHex", "Uint8"},
677+
TestParam{kGo1_24BinaryPath, "main.BytesToHex", "Bytes"},
678+
TestParam{kGo1_24BinaryPath, "main.Uint8ArrayToHex", "Uint8"}));
690679

691680
//-----------------------------------------------------------------------------
692681
// Dynamic Trace C++ tests

0 commit comments

Comments
 (0)