tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
lol
0
fork
atom
overview
issues
pulls
pipelines
mdevctl: remove patch, install more files
figsoda
3 years ago
6e5cb911
c2e1d345
+24
-458
2 changed files
expand all
collapse all
unified
split
pkgs
os-specific
linux
mdevctl
default.nix
lock.patch
+24
-12
pkgs/os-specific/linux/mdevctl/default.nix
···
1
-
{ lib, fetchFromGitHub
2
-
, rustPackages, pkg-config, docutils
0
0
0
3
}:
4
5
-
rustPackages.rustPlatform.buildRustPackage rec {
6
-
7
pname = "mdevctl";
8
version = "1.2.0";
9
10
-
src = fetchFromGitHub {
11
-
owner = pname;
12
-
repo = pname;
13
-
rev = "v" + version;
14
-
hash = "sha256-Hgl+HsWAYIdabHJdPbCaBNnhY49vpuIjR3l6z2CAmx0=";
15
};
16
17
-
cargoPatches = [ ./lock.patch ];
18
19
-
cargoHash = "sha256-PXVc7KUMPze06gCnD2gqzlySwPumOw/z31CTd0UHp9w=";
0
0
0
20
21
-
nativeBuildInputs = [ pkg-config docutils ];
0
0
0
0
0
0
0
0
0
22
23
meta = with lib; {
24
homepage = "https://github.com/mdevctl/mdevctl";
···
1
+
{ lib
2
+
, rustPlatform
3
+
, fetchCrate
4
+
, docutils
5
+
, installShellFiles
6
}:
7
8
+
rustPlatform.buildRustPackage rec {
0
9
pname = "mdevctl";
10
version = "1.2.0";
11
12
+
src = fetchCrate {
13
+
inherit pname version;
14
+
hash = "sha256-0X/3DWNDPOgSNNTqcj44sd7DNGFt+uGBjkc876dSgU8=";
0
0
15
};
16
17
+
cargoHash = "sha256-TmumQBWuH5fJOe2qzcDtEGbmCs2G9Gfl8mH7xifzRGc=";
18
19
+
nativeBuildInputs = [
20
+
docutils
21
+
installShellFiles
22
+
];
23
24
+
postInstall = ''
25
+
ln -s mdevctl $out/bin/lsmdev
26
+
27
+
install -Dm444 60-mdevctl.rules -t $out/lib/udev/rules.d
28
+
29
+
installManPage $releaseDir/build/mdevctl-*/out/mdevctl.8
30
+
ln -s mdevctl.8 $out/share/man/man8/lsmdev.8
31
+
32
+
installShellCompletion $releaseDir/build/mdevctl-*/out/{lsmdev,mdevctl}.bash
33
+
'';
34
35
meta = with lib; {
36
homepage = "https://github.com/mdevctl/mdevctl";
-446
pkgs/os-specific/linux/mdevctl/lock.patch
···
1
-
---
2
-
Cargo.lock | 432 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3
-
1 file changed, 432 insertions(+)
4
-
create mode 100644 Cargo.lock
5
-
6
-
diff --git a/Cargo.lock b/Cargo.lock
7
-
new file mode 100644
8
-
index 0000000..b91a26d
9
-
--- /dev/null
10
-
+++ b/Cargo.lock
11
-
@@ -0,0 +1,432 @@
12
-
+# This file is automatically @generated by Cargo.
13
-
+# It is not intended for manual editing.
14
-
+version = 3
15
-
+
16
-
+[[package]]
17
-
+name = "aho-corasick"
18
-
+version = "0.7.19"
19
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
20
-
+checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
21
-
+dependencies = [
22
-
+ "memchr",
23
-
+]
24
-
+
25
-
+[[package]]
26
-
+name = "anyhow"
27
-
+version = "1.0.66"
28
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
29
-
+checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
30
-
+
31
-
+[[package]]
32
-
+name = "atty"
33
-
+version = "0.2.14"
34
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
35
-
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
36
-
+dependencies = [
37
-
+ "hermit-abi",
38
-
+ "libc",
39
-
+ "winapi",
40
-
+]
41
-
+
42
-
+[[package]]
43
-
+name = "autocfg"
44
-
+version = "1.1.0"
45
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
46
-
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
47
-
+
48
-
+[[package]]
49
-
+name = "bitflags"
50
-
+version = "1.3.2"
51
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
52
-
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
53
-
+
54
-
+[[package]]
55
-
+name = "cfg-if"
56
-
+version = "1.0.0"
57
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
58
-
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
59
-
+
60
-
+[[package]]
61
-
+name = "clap"
62
-
+version = "3.2.23"
63
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
64
-
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
65
-
+dependencies = [
66
-
+ "atty",
67
-
+ "bitflags",
68
-
+ "clap_derive",
69
-
+ "clap_lex",
70
-
+ "indexmap",
71
-
+ "once_cell",
72
-
+ "strsim",
73
-
+ "termcolor",
74
-
+ "textwrap",
75
-
+]
76
-
+
77
-
+[[package]]
78
-
+name = "clap_complete"
79
-
+version = "3.2.5"
80
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
81
-
+checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8"
82
-
+dependencies = [
83
-
+ "clap",
84
-
+]
85
-
+
86
-
+[[package]]
87
-
+name = "clap_derive"
88
-
+version = "3.2.18"
89
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
90
-
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
91
-
+dependencies = [
92
-
+ "heck",
93
-
+ "proc-macro-error",
94
-
+ "proc-macro2",
95
-
+ "quote",
96
-
+ "syn",
97
-
+]
98
-
+
99
-
+[[package]]
100
-
+name = "clap_lex"
101
-
+version = "0.2.4"
102
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
103
-
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
104
-
+dependencies = [
105
-
+ "os_str_bytes",
106
-
+]
107
-
+
108
-
+[[package]]
109
-
+name = "env_logger"
110
-
+version = "0.8.4"
111
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
112
-
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
113
-
+dependencies = [
114
-
+ "atty",
115
-
+ "humantime",
116
-
+ "log",
117
-
+ "regex",
118
-
+ "termcolor",
119
-
+]
120
-
+
121
-
+[[package]]
122
-
+name = "fastrand"
123
-
+version = "1.8.0"
124
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
125
-
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
126
-
+dependencies = [
127
-
+ "instant",
128
-
+]
129
-
+
130
-
+[[package]]
131
-
+name = "getrandom"
132
-
+version = "0.2.8"
133
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
134
-
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
135
-
+dependencies = [
136
-
+ "cfg-if",
137
-
+ "libc",
138
-
+ "wasi",
139
-
+]
140
-
+
141
-
+[[package]]
142
-
+name = "hashbrown"
143
-
+version = "0.12.3"
144
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
145
-
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
146
-
+
147
-
+[[package]]
148
-
+name = "heck"
149
-
+version = "0.4.0"
150
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
151
-
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
152
-
+
153
-
+[[package]]
154
-
+name = "hermit-abi"
155
-
+version = "0.1.19"
156
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
157
-
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
158
-
+dependencies = [
159
-
+ "libc",
160
-
+]
161
-
+
162
-
+[[package]]
163
-
+name = "humantime"
164
-
+version = "2.1.0"
165
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
166
-
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
167
-
+
168
-
+[[package]]
169
-
+name = "indexmap"
170
-
+version = "1.9.1"
171
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
172
-
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
173
-
+dependencies = [
174
-
+ "autocfg",
175
-
+ "hashbrown",
176
-
+]
177
-
+
178
-
+[[package]]
179
-
+name = "instant"
180
-
+version = "0.1.12"
181
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
182
-
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
183
-
+dependencies = [
184
-
+ "cfg-if",
185
-
+]
186
-
+
187
-
+[[package]]
188
-
+name = "itoa"
189
-
+version = "1.0.4"
190
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
191
-
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
192
-
+
193
-
+[[package]]
194
-
+name = "libc"
195
-
+version = "0.2.136"
196
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
197
-
+checksum = "55edcf6c0bb319052dea84732cf99db461780fd5e8d3eb46ab6ff312ab31f197"
198
-
+
199
-
+[[package]]
200
-
+name = "log"
201
-
+version = "0.4.17"
202
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
203
-
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
204
-
+dependencies = [
205
-
+ "cfg-if",
206
-
+]
207
-
+
208
-
+[[package]]
209
-
+name = "mdevctl"
210
-
+version = "1.2.0"
211
-
+dependencies = [
212
-
+ "anyhow",
213
-
+ "clap",
214
-
+ "clap_complete",
215
-
+ "env_logger",
216
-
+ "log",
217
-
+ "serde_json",
218
-
+ "tempfile",
219
-
+ "uuid",
220
-
+]
221
-
+
222
-
+[[package]]
223
-
+name = "memchr"
224
-
+version = "2.5.0"
225
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
226
-
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
227
-
+
228
-
+[[package]]
229
-
+name = "once_cell"
230
-
+version = "1.15.0"
231
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
232
-
+checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
233
-
+
234
-
+[[package]]
235
-
+name = "os_str_bytes"
236
-
+version = "6.3.0"
237
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
238
-
+checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
239
-
+
240
-
+[[package]]
241
-
+name = "proc-macro-error"
242
-
+version = "1.0.4"
243
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
244
-
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
245
-
+dependencies = [
246
-
+ "proc-macro-error-attr",
247
-
+ "proc-macro2",
248
-
+ "quote",
249
-
+ "syn",
250
-
+ "version_check",
251
-
+]
252
-
+
253
-
+[[package]]
254
-
+name = "proc-macro-error-attr"
255
-
+version = "1.0.4"
256
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
257
-
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
258
-
+dependencies = [
259
-
+ "proc-macro2",
260
-
+ "quote",
261
-
+ "version_check",
262
-
+]
263
-
+
264
-
+[[package]]
265
-
+name = "proc-macro2"
266
-
+version = "1.0.47"
267
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
268
-
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
269
-
+dependencies = [
270
-
+ "unicode-ident",
271
-
+]
272
-
+
273
-
+[[package]]
274
-
+name = "quote"
275
-
+version = "1.0.21"
276
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
277
-
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
278
-
+dependencies = [
279
-
+ "proc-macro2",
280
-
+]
281
-
+
282
-
+[[package]]
283
-
+name = "redox_syscall"
284
-
+version = "0.2.16"
285
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
286
-
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
287
-
+dependencies = [
288
-
+ "bitflags",
289
-
+]
290
-
+
291
-
+[[package]]
292
-
+name = "regex"
293
-
+version = "1.6.0"
294
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
295
-
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
296
-
+dependencies = [
297
-
+ "aho-corasick",
298
-
+ "memchr",
299
-
+ "regex-syntax",
300
-
+]
301
-
+
302
-
+[[package]]
303
-
+name = "regex-syntax"
304
-
+version = "0.6.27"
305
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
306
-
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
307
-
+
308
-
+[[package]]
309
-
+name = "remove_dir_all"
310
-
+version = "0.5.3"
311
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
312
-
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
313
-
+dependencies = [
314
-
+ "winapi",
315
-
+]
316
-
+
317
-
+[[package]]
318
-
+name = "ryu"
319
-
+version = "1.0.11"
320
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
321
-
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
322
-
+
323
-
+[[package]]
324
-
+name = "serde"
325
-
+version = "1.0.147"
326
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
327
-
+checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
328
-
+
329
-
+[[package]]
330
-
+name = "serde_json"
331
-
+version = "1.0.87"
332
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
333
-
+checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
334
-
+dependencies = [
335
-
+ "indexmap",
336
-
+ "itoa",
337
-
+ "ryu",
338
-
+ "serde",
339
-
+]
340
-
+
341
-
+[[package]]
342
-
+name = "strsim"
343
-
+version = "0.10.0"
344
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
345
-
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
346
-
+
347
-
+[[package]]
348
-
+name = "syn"
349
-
+version = "1.0.103"
350
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
351
-
+checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
352
-
+dependencies = [
353
-
+ "proc-macro2",
354
-
+ "quote",
355
-
+ "unicode-ident",
356
-
+]
357
-
+
358
-
+[[package]]
359
-
+name = "tempfile"
360
-
+version = "3.3.0"
361
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
362
-
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
363
-
+dependencies = [
364
-
+ "cfg-if",
365
-
+ "fastrand",
366
-
+ "libc",
367
-
+ "redox_syscall",
368
-
+ "remove_dir_all",
369
-
+ "winapi",
370
-
+]
371
-
+
372
-
+[[package]]
373
-
+name = "termcolor"
374
-
+version = "1.1.3"
375
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
376
-
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
377
-
+dependencies = [
378
-
+ "winapi-util",
379
-
+]
380
-
+
381
-
+[[package]]
382
-
+name = "textwrap"
383
-
+version = "0.16.0"
384
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
385
-
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
386
-
+
387
-
+[[package]]
388
-
+name = "unicode-ident"
389
-
+version = "1.0.5"
390
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
391
-
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
392
-
+
393
-
+[[package]]
394
-
+name = "uuid"
395
-
+version = "0.8.2"
396
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
397
-
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
398
-
+dependencies = [
399
-
+ "getrandom",
400
-
+]
401
-
+
402
-
+[[package]]
403
-
+name = "version_check"
404
-
+version = "0.9.4"
405
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
406
-
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
407
-
+
408
-
+[[package]]
409
-
+name = "wasi"
410
-
+version = "0.11.0+wasi-snapshot-preview1"
411
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
412
-
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
413
-
+
414
-
+[[package]]
415
-
+name = "winapi"
416
-
+version = "0.3.9"
417
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
418
-
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
419
-
+dependencies = [
420
-
+ "winapi-i686-pc-windows-gnu",
421
-
+ "winapi-x86_64-pc-windows-gnu",
422
-
+]
423
-
+
424
-
+[[package]]
425
-
+name = "winapi-i686-pc-windows-gnu"
426
-
+version = "0.4.0"
427
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
428
-
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
429
-
+
430
-
+[[package]]
431
-
+name = "winapi-util"
432
-
+version = "0.1.5"
433
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
434
-
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
435
-
+dependencies = [
436
-
+ "winapi",
437
-
+]
438
-
+
439
-
+[[package]]
440
-
+name = "winapi-x86_64-pc-windows-gnu"
441
-
+version = "0.4.0"
442
-
+source = "registry+https://github.com/rust-lang/crates.io-index"
443
-
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
444
-
--
445
-
2.37.2
446
-
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0