forked from I2P_Developers/i2p.i2p
Compare commits
3318 Commits
i2p-0.9.26
...
i2p-0.9.48
Author | SHA1 | Date | |
---|---|---|---|
36fdfd529f | |||
94bdc9c5b3 | |||
c60e51514c | |||
7dcbbf17c3 | |||
5551deb246 | |||
6e8fd42efd | |||
5020100ef8 | |||
6c2c6abfb9 | |||
![]() |
4940c34779 | ||
![]() |
6d5aebeaa0 | ||
d8924119b5 | |||
4b445e7d35 | |||
17e47a0c93 | |||
2ffb570850 | |||
aef2fb8ce0 | |||
875fcdfb94 | |||
![]() |
151f856b0a | ||
337787be0e | |||
798521466d | |||
678c035fa3 | |||
ccb4210f8b | |||
7e5dc6ad64 | |||
31622d0458 | |||
f9b18545f9 | |||
![]() |
e67eccd1eb | ||
![]() |
cefe212a17 | ||
![]() |
8a76d71bd5 | ||
![]() |
806df95114 | ||
![]() |
c6c0b9ce8a | ||
00a0970c95 | |||
cb1bd95f2b | |||
d12b52f82a | |||
891ffaac09 | |||
36fbf0e332 | |||
e811238d60 | |||
c9e6bef825 | |||
0f002b9b69 | |||
f179a057bc | |||
6f5042be8f | |||
2044474549 | |||
0b0b93f26f | |||
595f8762ab | |||
8644eb431e | |||
223afdfc7e | |||
de41cab08e | |||
3606a42ea8 | |||
6887c7edae | |||
![]() |
4a00691385 | ||
![]() |
1d0a2c4fac | ||
![]() |
d0016380e5 | ||
29dc311c6a | |||
7aa78a1aed | |||
989f64192f | |||
c908c6bd05 | |||
![]() |
9f51b72cab | ||
a2fd817915 | |||
5bafdd05a9 | |||
![]() |
e18708bdbe | ||
![]() |
f6687c1f88 | ||
![]() |
b9eabca403 | ||
![]() |
9ec2c62f2f | ||
d4152ea546 | |||
8cc62b5b42 | |||
e242015145 | |||
35da97936d | |||
bfe21176ea | |||
d1dd9ab517 | |||
c18dbe974a | |||
f69563da75 | |||
057eca56d5 | |||
a21a64e0c6 | |||
751af5bcd8 | |||
c8605009ba | |||
5625caebda | |||
fc0a78dd7b | |||
90aab37002 | |||
5c1a529df0 | |||
6fa015c410 | |||
2d1e68b53b | |||
35012a3bad | |||
190b76d7fd | |||
![]() |
8d0b1214d2 | ||
70eb2a49f9 | |||
f231ea0951 | |||
f9ffdd5137 | |||
![]() |
38f9955391 | ||
517ff9af28 | |||
62a91acb40 | |||
69a5266675 | |||
e671741329 | |||
ab55f27ea4 | |||
cf88b3057a | |||
af97eedcbb | |||
7823001594 | |||
a49f87179a | |||
b52f85ac38 | |||
470bc77551 | |||
a0822a6b71 | |||
15da2f85ad | |||
9b3ff9e615 | |||
df1db163f0 | |||
4a4d814a17 | |||
![]() |
c84360ba4b | ||
6a6064d614 | |||
49565a99f9 | |||
ee27bc3bbf | |||
25899d41d5 | |||
35f6a2e2bf | |||
9ae5cbbc87 | |||
0ace93cec7 | |||
d387448794 | |||
4d82917b94 | |||
![]() |
7a77f48963 | ||
dee5dfc682 | |||
5ed6f834c1 | |||
3b8e5f0763 | |||
7c1798513d | |||
e54950e02e | |||
b2f060795c | |||
940ad61ccc | |||
c1f531ea92 | |||
0ebca7e8e3 | |||
d301669726 | |||
010bb0a2fe | |||
f028002c11 | |||
11e1747ffc | |||
5dc9333bb6 | |||
f77acb6db6 | |||
22abf09bd7 | |||
9a1d7a2ae3 | |||
98e5908557 | |||
9e36fe090c | |||
b4b6968ede | |||
999c4c51a2 | |||
8737a6a4fd | |||
a9a5d13e06 | |||
![]() |
ca1e2ba91e | ||
2e34969bbc | |||
cead0b2fb8 | |||
![]() |
9d566aea68 | ||
2d9933a4a9 | |||
cd699c587b | |||
4108007b26 | |||
b31b42a557 | |||
c3f187abcb | |||
2989d955d9 | |||
ea4409897d | |||
7dd7f021b0 | |||
2cb53ec45c | |||
![]() |
8fa3e45e47 | ||
c4a5d111e7 | |||
dca45a9b18 | |||
6ffebbd5c1 | |||
aa07775a32 | |||
30244f9d9b | |||
19d4a5ce26 | |||
e4cb730c1b | |||
3b18e54545 | |||
2fbbd8e7d1 | |||
e466331407 | |||
5d1f46e6c4 | |||
36318def69 | |||
72e4b16c1a | |||
8a10c3a097 | |||
d402300dba | |||
ada6753255 | |||
ceb0749e0d | |||
4863ab3711 | |||
c745cc8aa1 | |||
273902f616 | |||
bb761aea96 | |||
d13a7d2872 | |||
49b2ca061c | |||
![]() |
3e23ec8d27 | ||
22eeb90b81 | |||
6a69cef2a8 | |||
c1fef302f3 | |||
bd370cf407 | |||
feba993019 | |||
623a11dd8f | |||
ba7fb00450 | |||
20b4186331 | |||
2479645d22 | |||
![]() |
8585e2e955 | ||
![]() |
14518dc396 | ||
ccd64b6f07 | |||
21efdb9bd0 | |||
94778c74dc | |||
![]() |
929c09fecc | ||
c067f38123 | |||
046d1e01b0 | |||
cc6247fe7e | |||
![]() |
797a31924d | ||
87f9b619e5 | |||
![]() |
4ac89e7024 | ||
fceda68cd8 | |||
07fc66ccff | |||
d7b512ca9a | |||
![]() |
926f88585a | ||
717e1c58fa | |||
4b3dbd8915 | |||
![]() |
9d31a41ffe | ||
![]() |
217571118b | ||
![]() |
b03e919cbe | ||
![]() |
482b305065 | ||
![]() |
27776cddb2 | ||
![]() |
029e082cfc | ||
![]() |
6087a46a0b | ||
b78f6a645c | |||
f8b04e398e | |||
097f178e2a | |||
d221846c31 | |||
fa08d2f946 | |||
336563e7c0 | |||
f4ac8e02f6 | |||
29d2051a34 | |||
e52359c4c0 | |||
d73b327fd0 | |||
![]() |
d1bdeae596 | ||
![]() |
fa8bd4310c | ||
4f8f8b659b | |||
5a9eb68160 | |||
![]() |
b97ec8da90 | ||
a3fe0092ac | |||
896dbfbacf | |||
4d3561c92a | |||
![]() |
3c7b658a59 | ||
![]() |
6482437795 | ||
12e2dabaa8 | |||
e05545ab7c | |||
f0bcab2e2c | |||
075ac7ab43 | |||
31d7d7d9bb | |||
![]() |
ed14aa130c | ||
81007c1a03 | |||
2e3ff679f3 | |||
a84996399e | |||
![]() |
7b872474fd | ||
![]() |
531b7c2ae9 | ||
![]() |
95f16c99bd | ||
![]() |
462180f9a4 | ||
![]() |
505c49ad01 | ||
![]() |
16d6cf0177 | ||
112beb552b | |||
![]() |
b53cdafc84 | ||
365b9053ec | |||
![]() |
aadc9a13aa | ||
![]() |
39f3e3a92c | ||
![]() |
9a6374c79b | ||
3a392e84a9 | |||
c119de6188 | |||
066833819b | |||
c840f223cd | |||
4c2bf3e42f | |||
6ec95a7f13 | |||
670e57b9e5 | |||
![]() |
d441ead884 | ||
![]() |
38f654edd9 | ||
25b4d136b8 | |||
2b9783028d | |||
6c0e18d3e2 | |||
e23f671ca3 | |||
2af7066074 | |||
220f641ba6 | |||
76493b398f | |||
f1a277c4d7 | |||
ac76d544b9 | |||
cd77461fba | |||
326178ad47 | |||
0fce24479f | |||
3f895d32dd | |||
2af26f7d5b | |||
765d4ea725 | |||
ec231ecd78 | |||
957767c985 | |||
3cc7374984 | |||
6461c8e880 | |||
edfbc4081b | |||
317bf1e9db | |||
f985004be0 | |||
4fd834d13e | |||
370f96acfb | |||
d8b308dd9d | |||
3ad8f9b9a5 | |||
4fe9a27e2e | |||
686fe88e61 | |||
9b5e4373d4 | |||
03b1a4dfc0 | |||
27e422f81d | |||
f3e821a65d | |||
3fac44874e | |||
f8df7eba7f | |||
4574ebd8a9 | |||
a00b9bb0c7 | |||
e091eeae90 | |||
0a98147315 | |||
e9cc4a4357 | |||
0ab4730002 | |||
31d7b6fb7d | |||
26e5f4c482 | |||
766649bd54 | |||
bb6641ed96 | |||
6aa81f7ec6 | |||
![]() |
a3fc8af1dd | ||
![]() |
05082e3ffa | ||
![]() |
4b655070d4 | ||
f25037447d | |||
df3a03afc5 | |||
ded4bde905 | |||
![]() |
e1d8e360a5 | ||
![]() |
b373e253c9 | ||
a9d84da3b3 | |||
4b7c62aa9c | |||
e16c0a3271 | |||
ef66457181 | |||
093c46c937 | |||
d48d16d237 | |||
65cd84dd2e | |||
c457ef68c7 | |||
f00b86475d | |||
90bc00436c | |||
1af32bfe79 | |||
25338019ca | |||
878c11b36f | |||
c6c9ba76d9 | |||
a0261e8fd7 | |||
d493028c1e | |||
3992ea235d | |||
31b527a4c4 | |||
09b647f283 | |||
40b312d7c1 | |||
fad9d0e3da | |||
31a57b1a60 | |||
50e44ece54 | |||
f233416bf6 | |||
1b3885720a | |||
82dd9435a3 | |||
bc89d247ec | |||
fe36482063 | |||
a47f6d1b2e | |||
8aa23c7dc7 | |||
0eef0dd21b | |||
a12a26f65c | |||
1ebed8b6aa | |||
deb0fe338c | |||
005f79c95f | |||
eeee8d7600 | |||
13cfdf0d5a | |||
e77c3f23d3 | |||
d157daea10 | |||
9aa36562b9 | |||
6a36b79a95 | |||
2cd2f25c56 | |||
8631db8769 | |||
7da2ac9ef3 | |||
4da58258f5 | |||
4f78040569 | |||
0738d1d1fb | |||
e99e15209a | |||
![]() |
96a8aa9d0c | ||
![]() |
0bbd747f82 | ||
e31b837a7f | |||
ab7e428624 | |||
565e7f4d67 | |||
910de68495 | |||
e904c9981e | |||
ddc372f58c | |||
4ff234c110 | |||
69ef47e68c | |||
59901ec7c3 | |||
13e38f3d3e | |||
4b85f06951 | |||
08df2ba907 | |||
7a192b4961 | |||
d18f622458 | |||
8a482659e0 | |||
eeecede382 | |||
d49741c2db | |||
2ac2850cd4 | |||
3d56545210 | |||
5de76252ea | |||
778d6a2809 | |||
![]() |
f90cbaba5a | ||
6510e07b8b | |||
4996c05361 | |||
78effe14ad | |||
122b12fa31 | |||
438703a29b | |||
467a48cfe1 | |||
2b1c6a9d8f | |||
f1307614c6 | |||
ea8e340895 | |||
26af857dc7 | |||
f04526d83a | |||
a255a60944 | |||
b4de0cfaf9 | |||
2188d6b222 | |||
0528e4109d | |||
47f09479ad | |||
80d24fa70d | |||
![]() |
bef9ea11bf | ||
![]() |
278090a772 | ||
eab688b0bc | |||
788c72c331 | |||
90d9843acc | |||
d7095b69b9 | |||
dd96e29213 | |||
fd3e181b7c | |||
d7b5783674 | |||
634802c008 | |||
9e233b42a5 | |||
4cf8bfbe0d | |||
e1beeb3653 | |||
82a918b37d | |||
b6ecad3c0f | |||
e9d56d85af | |||
b874bb2ba0 | |||
7f179551b7 | |||
10be87bb59 | |||
5173d24c72 | |||
f4a37ce75f | |||
![]() |
ff4cfd3eb0 | ||
![]() |
8b6d8507ec | ||
![]() |
65356f09a6 | ||
![]() |
b0c6c845bf | ||
![]() |
6859baba9f | ||
![]() |
c14541f4a3 | ||
![]() |
1083d2939b | ||
2a8f23602a | |||
da5c92a599 | |||
baa26aec26 | |||
9da290831b | |||
882f853b1d | |||
a7de9a7f24 | |||
f2f6dfbf18 | |||
5e2db982dd | |||
bc11e66429 | |||
da8f49a712 | |||
a97085ac67 | |||
eb7211660f | |||
b182562c80 | |||
25a80c78b5 | |||
c69af8308f | |||
0cc1861649 | |||
57cd4c5843 | |||
cd035e1247 | |||
73886d06e8 | |||
![]() |
ae199581be | ||
bf425d8ac9 | |||
![]() |
823dc72eaa | ||
3716ccc3ef | |||
108b3a2363 | |||
35bb5896a1 | |||
da9bfd48c0 | |||
![]() |
0bd3df6d98 | ||
![]() |
0656abd101 | ||
![]() |
5299eb365f | ||
53eb0fe7f8 | |||
4cdaa11024 | |||
e642d8e538 | |||
cc5f13fc5e | |||
80f66113c4 | |||
b3d5accca2 | |||
12ac06d5ba | |||
7b47d3f314 | |||
0d2dbcc8fc | |||
e2cc62a21f | |||
689b26102b | |||
c989addadc | |||
5e00bc6510 | |||
828311a24f | |||
5976d4952f | |||
80ae2ccea6 | |||
370b7f1124 | |||
26b90b9d17 | |||
c8647fc3a5 | |||
3fa15824ee | |||
1752291ffd | |||
![]() |
4edb9bbf7f | ||
![]() |
e88a585703 | ||
928c0e9b91 | |||
83a4f5f2f0 | |||
f54db66f77 | |||
f16981d844 | |||
f6b5a2d493 | |||
14b33a1e4c | |||
c99adeeb61 | |||
b979a97905 | |||
916b296ee0 | |||
f9f64a441b | |||
2482df7121 | |||
f9d7cfa7e1 | |||
5229c0e811 | |||
1ca9674f3f | |||
c77e41c59e | |||
8c4410277d | |||
2ec9a4ab64 | |||
6b05acff8d | |||
471b53698a | |||
7404bdc4fd | |||
9307cc8a0c | |||
6dd0b23c61 | |||
97f002bfb5 | |||
22ca4d0e44 | |||
86fc6478f5 | |||
dee92b5290 | |||
b19b529afe | |||
0c4cf5d3cd | |||
eeb7ea4cae | |||
23634afbc9 | |||
acf3abb19b | |||
c5435410ba | |||
786d68ce9a | |||
0170ff2337 | |||
a5c0448053 | |||
7a1e2865fc | |||
0c19216c4c | |||
f2787a8df6 | |||
7654a0af42 | |||
5c1700c2ab | |||
6487fb0516 | |||
42fb3bb2e9 | |||
![]() |
f57876dc3b | ||
![]() |
0a7027dd9b | ||
0e68df6ba4 | |||
7707c4bb94 | |||
![]() |
56639fa7d2 | ||
f0a15d084a | |||
de6cee8f6a | |||
8b075f26bf | |||
5455820a74 | |||
d38c660c36 | |||
3f629ce1af | |||
29f9986f40 | |||
d505a2fe76 | |||
3eb573295b | |||
0b9babab42 | |||
c190ddd6b0 | |||
53118fa9c6 | |||
8cf241f6da | |||
6774af6910 | |||
eb73f0aae2 | |||
0bec84a3b1 | |||
![]() |
75c2d24c45 | ||
![]() |
53e77df77d | ||
326a85ea4f | |||
e567f7b460 | |||
ab28ee960e | |||
88a4261b03 | |||
e7a66659e9 | |||
44a935d086 | |||
1e5414f74f | |||
357d400bc6 | |||
594f1c7f8b | |||
4a845f0b73 | |||
bc791f91ab | |||
f938090d6a | |||
d9ea6b1f9c | |||
5bed4a0d7f | |||
4826bbd333 | |||
0540c76c51 | |||
f081e88420 | |||
4030d0b427 | |||
c5f6c9a498 | |||
403440bab8 | |||
8ed7a029d7 | |||
ec6807cd2c | |||
226494028a | |||
4bcd896829 | |||
2524a7a69d | |||
2805388a4c | |||
631a082ebd | |||
24b98b86c2 | |||
5ee903765e | |||
c0db50ed0f | |||
3403ea3b51 | |||
daf595ab7e | |||
fd958df118 | |||
dd794ceee4 | |||
c19a63c6a2 | |||
84bea6438f | |||
d3bd2ce190 | |||
e82f420ee6 | |||
a035901f0a | |||
e73ddb548a | |||
fd87c609f2 | |||
17060c0100 | |||
fe16ccb434 | |||
a46100bde5 | |||
0478ac75e9 | |||
d42235486e | |||
dd3dbbf7f9 | |||
![]() |
efe85cc30a | ||
![]() |
0b3e6acb97 | ||
![]() |
aa6c218122 | ||
![]() |
033c37f4a0 | ||
e7ddee5509 | |||
f8283c04ca | |||
0f7bcbf4bb | |||
![]() |
c4fce448c3 | ||
c4c75c0ce5 | |||
2988e58cb2 | |||
![]() |
21ae518102 | ||
8bebb884c3 | |||
4401265200 | |||
![]() |
094613b8de | ||
![]() |
6e38cce149 | ||
![]() |
9c626a07c5 | ||
![]() |
80db2faeb7 | ||
![]() |
b31eb3f53b | ||
![]() |
b572a330ed | ||
98f7f30864 | |||
23d24a48b5 | |||
064e4046a6 | |||
![]() |
50c86147b0 | ||
3c9e78bd76 | |||
f65cfbf92c | |||
![]() |
4ad4e579d8 | ||
![]() |
1f6b3c1107 | ||
a2a646e1f5 | |||
ea05af42fa | |||
![]() |
520faf477d | ||
![]() |
cf2a4ba053 | ||
1a0b25a6ef | |||
23598ab011 | |||
7ac189696b | |||
ecdccac37e | |||
e865f451ca | |||
3d80f0122f | |||
0a34f3d5dd | |||
![]() |
b588297458 | ||
![]() |
b524e91888 | ||
![]() |
29f8fec912 | ||
09d31cb107 | |||
fa9f60bcd9 | |||
63b48e30be | |||
e714e7082e | |||
9966c40d28 | |||
9dbec9fbb5 | |||
aa472feea9 | |||
c7a6584481 | |||
ae994e3230 | |||
fcd8a3ae69 | |||
ccaf4ce4b9 | |||
5772b7d9ae | |||
61ec10ff47 | |||
c3138793fe | |||
c5904b080b | |||
7d10ef7a19 | |||
938410d68b | |||
dd0d84fece | |||
b2aa649c2a | |||
74020ae5a3 | |||
6f3cfd83cd | |||
10b8c92fdb | |||
520da91735 | |||
d73fc85c34 | |||
4eca698584 | |||
3fa3b69cbc | |||
bf94460420 | |||
d054652952 | |||
ad3c978c7c | |||
3277ea4854 | |||
7b6e25db8b | |||
1974cc5559 | |||
9c534fda7b | |||
a5efce883a | |||
6197454225 | |||
64e9e2aebe | |||
faf130cf38 | |||
831c1945a5 | |||
26ecf364a6 | |||
74b61a7ba6 | |||
d65208b917 | |||
bf70a1520b | |||
3a3416d2a5 | |||
00667151da | |||
a9abf3babf | |||
cad3c46ea6 | |||
9289a6daa9 | |||
![]() |
f2f29d6a6c | ||
![]() |
3e888f8936 | ||
![]() |
cbccba8dc2 | ||
7cfc16ca36 | |||
f7a2d23f1e | |||
31e8ff8f45 | |||
3a7ee4f211 | |||
cc3c2d4d1a | |||
11d89e248e | |||
2bb94bea80 | |||
2bfd421b19 | |||
4c9c83231b | |||
32044f1682 | |||
51f7348d8a | |||
![]() |
ae345cfb85 | ||
![]() |
52edc35275 | ||
![]() |
d5bc948bb4 | ||
![]() |
86ff3420b5 | ||
6b0e3750c9 | |||
600c681143 | |||
e1189b9c9f | |||
9feeb76d6c | |||
9f02b27c4a | |||
345cdd3eb0 | |||
def1e2ec68 | |||
62c9ae67d0 | |||
10b756b726 | |||
bf9d136a2b | |||
![]() |
9ffd71e0b8 | ||
6fa13313f0 | |||
27fa991783 | |||
![]() |
09f6429b5f | ||
![]() |
252a7972a1 | ||
![]() |
131ebc4d5a | ||
4e81e48d64 | |||
7b391fa17a | |||
5e67f4232a | |||
398b4ceade | |||
03f4624f91 | |||
79334afcbc | |||
c711d48835 | |||
394db0b307 | |||
8bb1347e6e | |||
e22810fd93 | |||
8218d55874 | |||
652b75a749 | |||
620917cd70 | |||
b8ed77da9a | |||
65b3cdbb12 | |||
cecf255706 | |||
a854ccee69 | |||
6e2ad50e16 | |||
fdb3c68d3f | |||
d2e2109799 | |||
9f0c3ee345 | |||
725509fe5c | |||
13318a12da | |||
e8bf2ee30d | |||
![]() |
eda91af7c7 | ||
9ddb655a88 | |||
9d46a5d838 | |||
![]() |
f7471713da | ||
![]() |
b5d7f3e460 | ||
![]() |
7b53b0d3ad | ||
![]() |
ff293d50a9 | ||
552100da17 | |||
a2b23f96e8 | |||
14499c2993 | |||
dfc533b6e8 | |||
2738b3d29c | |||
07b7ab4262 | |||
b7f6cfbf46 | |||
ebc8dbe947 | |||
01d6cea017 | |||
160bcd7da8 | |||
bc40978297 | |||
656dd42276 | |||
4d1d11d1d4 | |||
3ae5b90c98 | |||
2846c33b40 | |||
b5f6c58a0b | |||
3ba48fda86 | |||
7c4569816f | |||
0cd8073f39 | |||
71411be6d9 | |||
a51ee8e745 | |||
3719081469 | |||
2216a58143 | |||
dc29525e5c | |||
![]() |
e5163c6ee5 | ||
![]() |
c5db5f0de3 | ||
3d75b3dc31 | |||
591b994b75 | |||
135e9ad31f | |||
eee9e47cac | |||
df6465f802 | |||
0c256d30c7 | |||
43c93bceed | |||
f021abcae0 | |||
7b28640e91 | |||
6a47319b66 | |||
ee46678955 | |||
8c498069d8 | |||
7389216560 | |||
129e474ecb | |||
3ed8620e5a | |||
436a8b8720 | |||
5d8871c17c | |||
d84fc4f0c8 | |||
2c2f90089b | |||
236354e5a8 | |||
aa3d2f39b1 | |||
fb67ebb38d | |||
a9d4798bfe | |||
8484a22fc4 | |||
0f7ebf2f71 | |||
db37745a1c | |||
b12e7214c8 | |||
079d464629 | |||
6dd2e9bb6b | |||
413eb7d0eb | |||
68a03b835a | |||
eef6c5cb33 | |||
652f9bb6a0 | |||
ab7b85cc1a | |||
2335f547f7 | |||
701f777035 | |||
77259293a8 | |||
4e231b26c3 | |||
9889d1adcb | |||
![]() |
2377b1adde | ||
47aa6101d4 | |||
7161785c5b | |||
2ca9fe2050 | |||
1095a140de | |||
![]() |
0485e690c6 | ||
![]() |
20103957a9 | ||
9670858095 | |||
![]() |
2bc8d58476 | ||
70fd0c6f6a | |||
2b1a7015e4 | |||
e8404a75fb | |||
05c30b4f1d | |||
29eabc4706 | |||
049b34f7cf | |||
31f2c51e7e | |||
71cc55fa7d | |||
![]() |
68a65d5cac | ||
![]() |
e4c5c4862f | ||
![]() |
cb2544157f | ||
612bdda281 | |||
db5dd6a626 | |||
![]() |
16db73b092 | ||
![]() |
c259abc82c | ||
![]() |
99b33fabe6 | ||
![]() |
81133a1a95 | ||
![]() |
9b3380cef3 | ||
![]() |
87ba8577e9 | ||
aca5617935 | |||
![]() |
e44a7c5054 | ||
142508c872 | |||
788e041939 | |||
3563fdf9e4 | |||
ea8ac884fa | |||
bf33e8432d | |||
18ed1a6bb3 | |||
830e08065b | |||
c1722a9f82 | |||
e5475bc229 | |||
![]() |
d81bf6a417 | ||
3710ff9aa1 | |||
![]() |
679aa1afac | ||
320569ef7f | |||
4f0d764540 | |||
a768afe05b | |||
d15e068123 | |||
c1431565ed | |||
2b6cb2099a | |||
f9a2193e2f | |||
0d325d5a28 | |||
520da24e0c | |||
69638caa7b | |||
62914d7678 | |||
94c96b09e9 | |||
0c2a8e9244 | |||
67cd6409a0 | |||
65d0ea3f0b | |||
f1b725a320 | |||
9e39cbe502 | |||
8d104f7fea | |||
e66d64d89b | |||
9d28b17a04 | |||
43f055ec28 | |||
b4a5cc07c2 | |||
479461ab3b | |||
c99a42f0b1 | |||
65698aa0da | |||
7f75d0254c | |||
331ecf0625 | |||
32d420e76f | |||
ee5a22be24 | |||
b51962aeac | |||
e73640bb8d | |||
92515179e9 | |||
c5f126c196 | |||
bb88555a63 | |||
e03a94647c | |||
8eda9abab7 | |||
aed6d433c8 | |||
71376d53c5 | |||
9a84f77fab | |||
2590fd8253 | |||
ea3bddbcd6 | |||
d04f0dae37 | |||
3504bddea4 | |||
b3a5f1f8c1 | |||
0f2f7e2454 | |||
b119d0be43 | |||
566221b732 | |||
81ab35abe6 | |||
b2e37243ab | |||
a6e3621c06 | |||
96d8385f49 | |||
912d25b775 | |||
55cdd81017 | |||
a1c18fd0aa | |||
5f3da69acc | |||
e6dcfaee15 | |||
f724b2208b | |||
89b70895d7 | |||
![]() |
cff2ae3ac9 | ||
ec0f8566b6 | |||
2ebe59436a | |||
dcf6983607 | |||
1779202ff9 | |||
6483abe7cf | |||
6618561237 | |||
d8c9b0942f | |||
9938e50528 | |||
232b7f30d5 | |||
adba7e4c25 | |||
764f89f5c5 | |||
87180e0e2d | |||
![]() |
6789a735e3 | ||
![]() |
65eb9b17db | ||
64ba43c007 | |||
b2dec2f4b2 | |||
789f482373 | |||
a667c36d2d | |||
65e2132a25 | |||
5e76118ffd | |||
131a70057e | |||
![]() |
21ace66a46 | ||
![]() |
459eb7fdcd | ||
![]() |
8586c28b5f | ||
![]() |
f32c863ba8 | ||
![]() |
ee84e7e3e1 | ||
![]() |
cf4298f759 | ||
![]() |
13190931b9 | ||
08be6a4f4a | |||
7f015c4794 | |||
7b46d43492 | |||
a4bcff093f | |||
fb7b3c2793 | |||
397bf43147 | |||
49af26d958 | |||
0ce4811dec | |||
d3e3ec4d35 | |||
8ed0dd2a5c | |||
8158753dac | |||
e3481f6730 | |||
165beb3fbd | |||
5d367940d5 | |||
617294b7fa | |||
240d59393f | |||
6b94dc2dbd | |||
3a0873c991 | |||
72ef065ab7 | |||
66ecdb2f7a | |||
e2980603b7 | |||
885e0468b2 | |||
3bfbb6aef6 | |||
365820172a | |||
d73058fd65 | |||
7374484ccb | |||
![]() |
7d4229acab | ||
![]() |
41128f1457 | ||
![]() |
61f45b3a3a | ||
![]() |
aaacb2e558 | ||
![]() |
9c2dc47a8a | ||
![]() |
2db0a65425 | ||
fd781f4894 | |||
![]() |
4a099854f7 | ||
![]() |
ff379c36cb | ||
![]() |
d5970f17de | ||
![]() |
595e43b8a4 | ||
6adc665fd3 | |||
1be569db7a | |||
63e75ed307 | |||
6b990689cc | |||
3e48bf80f1 | |||
5341166e95 | |||
685088ccca | |||
7a64505139 | |||
df223af23d | |||
8d74a196cf | |||
26d74620a9 | |||
e458361193 | |||
fea35512a7 | |||
d5dda73742 | |||
86fd8ce391 | |||
e24333206e | |||
0231d5eec2 | |||
258aea136e | |||
![]() |
44e1b6058f | ||
051e18f9c7 | |||
a66fb815a6 | |||
3e8386382b | |||
87109c8fef | |||
7ecee9dfdb | |||
9dc24d5f27 | |||
e6b5fc8fd4 | |||
b52e8d6b5c | |||
ce6551dacd | |||
f7d785b6d2 | |||
27e060eee5 | |||
cf1c1bb3f7 | |||
85a2c9026a | |||
d084f93506 | |||
8433f658f8 | |||
2cdb86fa1e | |||
d8e06a0d14 | |||
c1418a1c2e | |||
b99f239f3d | |||
1a030c3f92 | |||
41e9bfc6b7 | |||
f40655fc2f | |||
845e5ed37c | |||
019c3171c4 | |||
93a3f09971 | |||
51457bd873 | |||
ebe95fc575 | |||
6d8431a77e | |||
a8f2745169 | |||
61cdc7c7d2 | |||
3aeadaa719 | |||
a542b182ea | |||
1ddc651b11 | |||
b0bca2f16c | |||
d9775a5f10 | |||
ea2ef7b127 | |||
6d9aa92ed0 | |||
0c54b6d9da | |||
5ede0a139c | |||
![]() |
2918d6006f | ||
2c97dc2bcd | |||
7e6a92ab7b | |||
46ad48d5d1 | |||
2c24a68135 | |||
![]() |
357feca7b1 | ||
![]() |
920a83ddab | ||
![]() |
42e3406529 | ||
![]() |
7336f64c26 | ||
![]() |
c1731f68fa | ||
5ed953e11e | |||
![]() |
e4892c6d5c | ||
1a200a16cc | |||
e50bf00fa8 | |||
e75881d6cc | |||
75ace4266e | |||
e82a547bce | |||
6d72aeed8c | |||
c01bf47c8a | |||
4bd0f06cd6 | |||
aab6529f62 | |||
11c8e8e794 | |||
0d1dbc7992 | |||
7cd60bb0e7 | |||
697b617c7a | |||
fe6c7cd41f | |||
eea0990b54 | |||
aa0bafb8a8 | |||
c4ebc7357d | |||
471c5d49d1 | |||
eff2bdbf87 | |||
b5de81582f | |||
500246ebed | |||
![]() |
38f135ceb9 | ||
![]() |
0a1a2ed82a | ||
0a774c6c58 | |||
f44a8e49c5 | |||
1109331dfc | |||
8a4c4694ec | |||
b4f331e621 | |||
67224858b7 | |||
447e29e381 | |||
aae81a7b5f | |||
f049319500 | |||
6b3896c1f8 | |||
652c3d5dc2 | |||
4d29bfefde | |||
16ac93c36b | |||
040e092153 | |||
![]() |
098bde2a32 | ||
![]() |
f94d2d5578 | ||
30a34acd41 | |||
dca04f7f60 | |||
307a8239fb | |||
e189236e3e | |||
a3fe7467c3 | |||
973aab8f53 | |||
0c7c19451c | |||
73b00eb206 | |||
90e6458428 | |||
![]() |
4fdcd25671 | ||
c2e2cc2e57 | |||
2abd59e6d4 | |||
![]() |
65481ad61e | ||
47c64c2eef | |||
7bdfd071ae | |||
7858dbe757 | |||
![]() |
8466cdc675 | ||
ea5ddfcf36 | |||
332898351c | |||
2ec34f4827 | |||
7489a64e6c | |||
06fa817bde | |||
cb762356da | |||
62649a6343 | |||
a6434fb71e | |||
a8f11d1834 | |||
67e7e45779 | |||
cafdca9a7b | |||
7efb290f13 | |||
b3cb09481c | |||
f543a45a72 | |||
099cacd3e3 | |||
b89720e710 | |||
1ffc006b2e | |||
f2f5df0db4 | |||
10354df425 | |||
03bd3e2db3 | |||
11b391bc35 | |||
a6e6d29d33 | |||
6600f373da | |||
efa72dbb56 | |||
4e267f690d | |||
05318013e2 | |||
8840532ed0 | |||
48a92ca1e7 | |||
ff71540428 | |||
f04b41c99a | |||
847ebda3e2 | |||
e174a46801 | |||
04a985cd8c | |||
adb1c6f58e | |||
9eec35713c | |||
![]() |
f6efdceaca | ||
c1adcfcc19 | |||
0a7330393d | |||
63b2f29633 | |||
d8980d10a4 | |||
c7d052646e | |||
de8a079cb4 | |||
fc8b55df27 | |||
be6b200945 | |||
cbeaca66a2 | |||
585778cddc | |||
cb0235bb5d | |||
558592a87f | |||
41e8b6dfbb | |||
![]() |
5aae625788 | ||
16d2bdc1db | |||
edb352b9d0 | |||
ffbf3d2023 | |||
0147f003c4 | |||
50d93b1993 | |||
a39549a3d9 | |||
![]() |
9adabadeb9 | ||
![]() |
61303bfd0b | ||
![]() |
e45963dbcb | ||
![]() |
5f689ccbd4 | ||
![]() |
17bb36deee | ||
![]() |
0b50c36c8a | ||
![]() |
feaa82181f | ||
![]() |
803447b4c3 | ||
![]() |
e93fb5c084 | ||
![]() |
6a418ebcab | ||
![]() |
67ca6e6552 | ||
![]() |
540e7c37e0 | ||
![]() |
7cb0c9bbb4 | ||
![]() |
66deb5dc7e | ||
![]() |
3e10745717 | ||
![]() |
84419bbf0b | ||
![]() |
d81f993f81 | ||
![]() |
8453c5cce0 | ||
![]() |
b2b047b4aa | ||
![]() |
7aa68c0a2b | ||
![]() |
811d1ccf9d | ||
![]() |
2af1f68d84 | ||
![]() |
56eb11bc17 | ||
![]() |
214efb8ef9 | ||
![]() |
d1631643a5 | ||
![]() |
315d7728d8 | ||
![]() |
647f9e728f | ||
![]() |
fa2897d2f8 | ||
![]() |
539f880f9b | ||
![]() |
9caa7a61b0 | ||
52b14142bb | |||
7f60ee9f8b | |||
b9726a0af8 | |||
bb86c56e77 | |||
8cdeff74c7 | |||
acf5c314de | |||
20413f00c0 | |||
aa551acec4 | |||
f088ea1263 | |||
46e31746b4 | |||
981737f8ed | |||
![]() |
5f01796bae | ||
b2575643a8 | |||
baeaa65829 | |||
5afa32a393 | |||
ca0f12782b | |||
148ed1e3a0 | |||
6f86522c2b | |||
5db67f13e1 | |||
21504f1539 | |||
![]() |
fd311c7e1a | ||
![]() |
7c71ff106b | ||
![]() |
d13bf0b72a | ||
![]() |
9e0934f958 | ||
![]() |
1cc330ba66 | ||
![]() |
967dde4395 | ||
![]() |
278870606b | ||
![]() |
e70a2c765b | ||
31856e8895 | |||
22aefa2042 | |||
![]() |
aeded8c495 | ||
3248a15d59 | |||
5c81c00a18 | |||
ea7ddaf6d5 | |||
a8ad30b335 | |||
67570db664 | |||
87d8d69a20 | |||
![]() |
e967b26f5a | ||
![]() |
e5540d051f | ||
![]() |
7ce81db9a8 | ||
e42e04c0f0 | |||
d32d5b5f29 | |||
8d00774b5e | |||
![]() |
89b38f4fff | ||
0dbc809111 | |||
64c7625524 | |||
071e702e56 | |||
363317fc26 | |||
f4d7a6d0d4 | |||
b5a4f1626f | |||
73790e2353 | |||
dd5f8b45ef | |||
2960156b33 | |||
9a72c4b2d1 | |||
7d4acb62d0 | |||
cddace2a1d | |||
859584c2b3 | |||
6237fc89ad | |||
cde53537af | |||
5490de1d61 | |||
![]() |
488e89a0b4 | ||
![]() |
4774cf6c37 | ||
7c7b0cb7fd | |||
![]() |
6aeb89ccd0 | ||
6cc39a2672 | |||
![]() |
cca68f9b79 | ||
![]() |
904bf2a90b | ||
![]() |
8a001adf59 | ||
![]() |
2c602fa46b | ||
![]() |
1c90985f93 | ||
![]() |
3498ab05f4 | ||
![]() |
d809b592c9 | ||
c3aa459872 | |||
d389b3b57c | |||
![]() |
76ee5774c4 | ||
![]() |
b7d980df06 | ||
![]() |
491cd0aa46 | ||
![]() |
e380b26798 | ||
![]() |
4790a14542 | ||
![]() |
194df9d88c | ||
567bccb51c | |||
0e8e3688f7 | |||
d3170de74a | |||
908bf26151 | |||
![]() |
e55702b219 | ||
![]() |
c0c95827ef | ||
![]() |
fc9ad32878 | ||
7d40dfe1e5 | |||
![]() |
2304e9b558 | ||
944fe4794e | |||
7501e3feea | |||
eb0920e2c7 | |||
![]() |
956a714d6e | ||
![]() |
3f990b0bc8 | ||
![]() |
3dbe8f2003 | ||
![]() |
d90fc421fd | ||
![]() |
85db853d74 | ||
![]() |
440d5571fa | ||
![]() |
910a0d859d | ||
![]() |
c5f9aea557 | ||
![]() |
84ea533b11 | ||
![]() |
fd2819c754 | ||
![]() |
fd6cb07e5d | ||
![]() |
6d2270a1ed | ||
![]() |
94bde1d821 | ||
ba801be24f | |||
![]() |
e919271247 | ||
![]() |
d2bdbcd27d | ||
![]() |
97eb5a56ab | ||
![]() |
473ced4d4a | ||
![]() |
c7771095d3 | ||
ea127d3fd4 | |||
![]() |
b35762b4bb | ||
![]() |
3f6fc7c0fb | ||
82eea0a8f9 | |||
![]() |
670016e79c | ||
14492d7269 | |||
de9d968b76 | |||
7bb7677604 | |||
![]() |
841b16ef72 | ||
![]() |
0d0dd1e241 | ||
![]() |
62f7b2cece | ||
![]() |
a5e568ffa1 | ||
64039ee3c2 | |||
ce043943d9 | |||
fea5bd4ada | |||
00d4525325 | |||
f17776ec54 | |||
05845481d1 | |||
bb5a89219a | |||
c3ebc00a86 | |||
a57c277af0 | |||
2b00bfa58b | |||
8962ea058f | |||
7511de68a4 | |||
0b5a36d5eb | |||
1f861c14a9 | |||
d7d1dcb539 | |||
91c59dfb6b | |||
![]() |
9d17066175 | ||
![]() |
7db602d959 | ||
7e6fd01eef | |||
365f5a8c7b | |||
30dbe24777 | |||
![]() |
e36a3b318a | ||
5d389c8855 | |||
d6a53cc3a6 | |||
409207e02d | |||
95366c06ce | |||
5b1b4acd2c | |||
10bae6a07b | |||
bfafdd34be | |||
0b2896516e | |||
268a3ee5f5 | |||
ad1600eb51 | |||
f1ed870a4a | |||
5d3b7c1c53 | |||
cd97718682 | |||
54d9a29855 | |||
7cbb43ab75 | |||
![]() |
335736b2b7 | ||
f0b9986e67 | |||
82d187438f | |||
d1617dd0b6 | |||
21c7a341fb | |||
302adc2d16 | |||
c8b7e829db | |||
cf1c0cb3ed | |||
566df1c275 | |||
16421fa0b6 | |||
3c911ee298 | |||
a12058db3a | |||
7ce539a815 | |||
b76b2ef206 | |||
32797dd415 | |||
e1385a71e2 | |||
9cd90b0530 | |||
5440a3402f | |||
9fafc253b7 | |||
b37160fa8d | |||
7fbe1ced5a | |||
17270b1502 | |||
e34b646231 | |||
14ac8fe545 | |||
b3c5974693 | |||
![]() |
af46e48563 | ||
2aa093754d | |||
ab7f61d220 | |||
2d67d11537 | |||
![]() |
d244d17363 | ||
![]() |
e662f09838 | ||
![]() |
ad5301ae10 | ||
![]() |
def939284c | ||
![]() |
f9c13968a8 | ||
![]() |
4f6b58e5af | ||
![]() |
2556c7755b | ||
![]() |
9731c203bd | ||
![]() |
a1b67e3720 | ||
![]() |
56c1739d54 | ||
![]() |
1ae987927b | ||
51b27bbf0c | |||
5b78b53fe8 | |||
3ba0fcf6da | |||
7544d0a590 | |||
636016d107 | |||
b310c60188 | |||
19cb85a74d | |||
490b81c1a1 | |||
3a30f07483 | |||
61c62424c2 | |||
16ccc1bea5 | |||
b82702393f | |||
8a77db15d5 | |||
beb0879f24 | |||
6f75680a7e | |||
a756c12432 | |||
ead49256c7 | |||
0e029f84b0 | |||
bd6cf53d53 | |||
e20a6a9685 | |||
0e710f8785 | |||
7d11fb269e | |||
d7808cd16d | |||
f288682436 | |||
19defbe05d | |||
175ea0f0c2 | |||
30015c1933 | |||
4f8455040e | |||
428fb269f0 | |||
ec5e2dba94 | |||
316011e047 | |||
68567cb531 | |||
4eb9368830 | |||
c555bb6c93 | |||
1bb57c4103 | |||
a51a6d57f9 | |||
8465fe7717 | |||
0801d20fd1 | |||
9055982cf0 | |||
8c9ce56837 | |||
0a8ab44139 | |||
24fd48815a | |||
3fca0f6f99 | |||
3cd12ecefc | |||
0889a751db | |||
efb1b7c24a | |||
3527f251c8 | |||
6cdc515cfd | |||
57de4b1805 | |||
![]() |
609d5944bb | ||
88d9f1d509 | |||
5c0aab4190 | |||
33e96d7841 | |||
d00e3c77ab | |||
318ebb3fc5 | |||
f224a770f0 | |||
ebcf187df6 | |||
b3cfc89fa2 | |||
![]() |
e57606a9f6 | ||
![]() |
a36777882e | ||
![]() |
605f9872cd | ||
![]() |
52125917b4 | ||
![]() |
ba853a8c97 | ||
![]() |
6ad64d5b44 | ||
272588d820 | |||
344c812666 | |||
b4e2619c3b | |||
6ca383071b | |||
d851631494 | |||
16f4f04092 | |||
ca86bbe4f7 | |||
![]() |
cf27938983 | ||
4283d71b92 | |||
10f2d838c9 | |||
f5ca17c844 | |||
b62732b5b3 | |||
47beb8250e | |||
17228def91 | |||
5ca98022ab | |||
0c15936b5d | |||
e02a0dfc5b | |||
0d330caf9a | |||
8cd7e7de65 | |||
671e9dd711 | |||
4ff9092bd9 | |||
fb8665b9bd | |||
2c7033001e | |||
30ea6f3ffa | |||
5634055d4b | |||
3b7284c9cd | |||
74ed974145 | |||
4786081026 | |||
150cee9a08 | |||
941a994482 | |||
d10d722763 | |||
9951e3467e | |||
62fd0497f8 | |||
a0d2288ded | |||
149359fdc3 | |||
4ae57f4f01 | |||
d95d81aea7 | |||
92ad4d1ce3 | |||
3c0ba5ce9c | |||
f221e724b9 | |||
![]() |
0fdede8657 | ||
47629bf2cf | |||
0474876b58 | |||
edae8e3e0b | |||
1411d0cff3 | |||
aad80eb2a3 | |||
af49a90303 | |||
fa6a4ca1d1 | |||
e122393914 | |||
2d026d5ae7 | |||
367e5ac679 | |||
f3a4b115f3 | |||
9f64cc7c60 | |||
03651292fb | |||
94fd60db10 | |||
18b7d97584 | |||
021375b5d5 | |||
![]() |
8a0602732d | ||
20876ff307 | |||
bf3a7d6ef7 | |||
35a771c764 | |||
eb8178ea3b | |||
3867beb198 | |||
cae5dcd69c | |||
2a805dddf5 | |||
fa0d63f40f | |||
9437e2cb79 | |||
3054a240bb | |||
5d06de8608 | |||
468871f21e | |||
6c3c227c1b | |||
9738db7254 | |||
51bf23a34c | |||
5eda30644f | |||
2746ed5ce2 | |||
fd23b23e56 | |||
a63d2dccb2 | |||
0f6f8f90c9 | |||
87c97b2a0a | |||
6f4d76e871 | |||
c1850cc4f3 | |||
399899e7e7 | |||
bdc4d82eb2 | |||
2200cf6627 | |||
![]() |
d382f1214e | ||
![]() |
36a5790b87 | ||
5d100417c4 | |||
![]() |
b946bb0679 | ||
![]() |
c3b8317edb | ||
![]() |
f90e2ee659 | ||
![]() |
3bad8f33c4 | ||
![]() |
dfcc616cb3 | ||
![]() |
a0d356bc56 | ||
![]() |
f4496a0c4c | ||
![]() |
8841fed1f1 | ||
![]() |
eca5805195 | ||
![]() |
b8681ddf9d | ||
![]() |
68ad4eec14 | ||
![]() |
a192679638 | ||
![]() |
7058bd85fa | ||
![]() |
92c42db787 | ||
926bce78a7 | |||
d054c6bc04 | |||
2876da2565 | |||
177f595f33 | |||
7c5162e155 | |||
5e7a277e98 | |||
af2eea5916 | |||
633a75e286 | |||
6e053689b9 | |||
ee722b7688 | |||
e6912453e0 | |||
7c928f99ea | |||
9efa0eaa40 | |||
700d4d3b48 | |||
026ddb3278 | |||
79440f84eb | |||
922515dfe4 | |||
f1689187a4 | |||
2487bca47c | |||
cc4da1b4da | |||
a8bacd8727 | |||
b93be8bb4a | |||
9badfd07bf | |||
dc8a822b0e | |||
43e0d4f910 | |||
d4caafb592 | |||
d6e350184c | |||
535f2daab0 | |||
5c0c69c654 | |||
ef44c36f0c | |||
f1297e7c62 | |||
21ca75da14 | |||
3923db0677 | |||
98de1ae404 | |||
76921b1e3e | |||
97e7a98aed | |||
d263e42e1e | |||
54184f2889 | |||
af9ce6d173 | |||
a1baf856f9 | |||
13d80e604d | |||
09ea40ce8e | |||
bbccb476c0 | |||
0526d6fd15 | |||
c5bd0bd079 | |||
6963d1f746 | |||
a5c38ba6e3 | |||
bfb6eba90c | |||
c07f68e622 | |||
9b9810ea1e | |||
9a254aec55 | |||
aa11211e5e | |||
f1e9bf8222 | |||
812baf8bd9 | |||
5fe2019897 | |||
aebf7735fe | |||
bdbadcd8af | |||
54a1609760 | |||
0369d321d3 | |||
62c712c462 | |||
dc343b05a2 | |||
6462e2a292 | |||
a35ad5fc57 | |||
d95c284d3e | |||
84c0aa4072 | |||
cec94e934a | |||
b695242daf | |||
ddfc7c05ef | |||
9377b57c9e | |||
2bfbcf1ae9 | |||
f8f6375738 | |||
c074467163 | |||
92787f8fcc | |||
71d8f0e4d4 | |||
e20401373c | |||
6f7881c7ea | |||
![]() |
e326011a93 | ||
e9ec043bf4 | |||
e391992251 | |||
02f5733eee | |||
a9f957504e | |||
f0b3815767 | |||
ee57bd7363 | |||
4c970fa0aa | |||
0a99784221 | |||
![]() |
eed8011725 | ||
![]() |
f8fb4a66dd | ||
![]() |
4f8af55378 | ||
![]() |
530470972f | ||
![]() |
a9bf9e0657 | ||
![]() |
e2d22645e1 | ||
![]() |
5f077891ae | ||
![]() |
1a00f73191 | ||
![]() |
d8cfe21e92 | ||
![]() |
ee9976c288 | ||
![]() |
10707c6d71 | ||
![]() |
8e988c39e9 | ||
![]() |
e3ab9f8e91 | ||
![]() |
96d31995e1 | ||
![]() |
3988a8645d | ||
![]() |
b25dec12d1 | ||
![]() |
f57f8c6083 | ||
![]() |
2862be564e | ||
![]() |
45b4f426a8 | ||
![]() |
51cbd8ef87 | ||
![]() |
8b2c3de795 | ||
![]() |
969bc2dee3 | ||
77e539a73c | |||
2de36ee343 | |||
![]() |
7dbf568212 | ||
![]() |
7e9d1939b1 | ||
![]() |
48877079ca | ||
e68182a157 | |||
06914f9fd4 | |||
8332385f05 | |||
19b1b3cec4 | |||
bdd7c35ab3 | |||
184b6179e5 | |||
6fccfc990a | |||
524c375944 | |||
5041bb8531 | |||
7dfee5f0ab | |||
e3d456c733 | |||
e2a41b7748 | |||
477fa9ef3a | |||
0cd67acd19 | |||
aafccc0132 | |||
ff1e53a0e3 | |||
b8d33f7426 | |||
8dc3163c73 | |||
960636c6bf | |||
e528775768 | |||
52739165a1 | |||
eb1d848372 | |||
2a9c39ca6e | |||
b84b298ec8 | |||
![]() |
e59dd3bcec | ||
![]() |
d6fc0adb56 | ||
![]() |
5041883d5a | ||
![]() |
5ed701dff3 | ||
![]() |
410f9df4e4 | ||
![]() |
b5497ef72e | ||
![]() |
2233f7f47b | ||
![]() |
36b758f2c0 | ||
![]() |
ae0d420f5f | ||
![]() |
b40b987c0f | ||
![]() |
e8d371ed9b | ||
![]() |
5a0017a8fe | ||
![]() |
751f15c1b1 | ||
d1b2a4e51c | |||
6ef6b3b705 | |||
![]() |
c069f76324 | ||
![]() |
9a11165bfc | ||
3a5f020dac | |||
d67d501b28 | |||
a69aa15acd | |||
c391dacf7d | |||
69f380f4a1 | |||
![]() |
22a0f396e6 | ||
d27000ec07 | |||
b82ace8a84 | |||
b7ff82eb82 | |||
f7ae675201 | |||
39aa2c597e | |||
34f0d7d7b3 | |||
e59d7a821b | |||
![]() |
7a72049e28 | ||
![]() |
3b38f5a161 | ||
829eb665e9 | |||
4369b7d122 | |||
![]() |
70fa2dae0a | ||
![]() |
85ebb2f847 | ||
![]() |
e8decff5cd | ||
![]() |
3c0a8cf4ab | ||
![]() |
eb81cadac0 | ||
![]() |
0f8a61803f | ||
![]() |
e046418f8f | ||
![]() |
802115e813 | ||
![]() |
9b958e4427 | ||
![]() |
46ac008775 | ||
![]() |
281c5f579f | ||
![]() |
01a05f7600 | ||
![]() |
f76874ac19 | ||
![]() |
7615b9236b | ||
![]() |
1bddf5527a | ||
![]() |
beede9505e | ||
b74abbe4de | |||
6b53a4fac4 | |||
![]() |
be4c1afe13 | ||
![]() |
4ead982831 | ||
![]() |
4011680fad | ||
48c787ba8d | |||
![]() |
c9002b327b | ||
![]() |
873087441a | ||
![]() |
f6c45355a4 | ||
![]() |
92cc66ecb2 | ||
![]() |
773676075c | ||
e64ad7ce57 | |||
1f92232253 | |||
db54edc36d | |||
3adbea9c76 | |||
483f043d3c | |||
819985f3b4 | |||
21fbcb8749 | |||
4a03b6fcb0 | |||
57ddc8ea4f | |||
c3881a811b | |||
ff551b19fb | |||
a45f5374e4 | |||
1453527382 | |||
cc2056d4cf | |||
6cf84ac5a3 | |||
e243e0ddba | |||
fddaa47ded | |||
658faf9dcf | |||
68feb080e7 | |||
f4cab090cd | |||
d69f078d8d | |||
f2e00ca130 | |||
ea3ce805e4 | |||
96f7c15e6e | |||
a846271cd4 | |||
![]() |
da476be75e | ||
![]() |
a5830f0203 | ||
a01bfff974 | |||
![]() |
8b9e5de9a7 | ||
![]() |
aef68eb93e | ||
![]() |
4a5708ab78 | ||
![]() |
7cf79a3a20 | ||
![]() |
8bebda2e35 | ||
![]() |
42fd4c645c | ||
![]() |
211533f554 | ||
![]() |
11945c823e | ||
![]() |
26189704f3 | ||
![]() |
5b114f4bf3 | ||
c455f15b2a | |||
30fefa44ec | |||
![]() |
e310a6ab31 | ||
![]() |
a40ff5f528 | ||
![]() |
a7e31f1f2b | ||
1c73be515a | |||
8dbc11566b | |||
![]() |
8408e9fe22 | ||
62151ef525 | |||
f855421901 | |||
![]() |
61d2e3c208 | ||
9e237b5086 | |||
![]() |
f97ec8820c | ||
![]() |
f9d5d48a4d | ||
![]() |
733d3496a9 | ||
![]() |
5a6ee17f3c | ||
![]() |
177ef573ee | ||
![]() |
57fee62557 | ||
![]() |
7084c86e76 | ||
![]() |
68482cab43 | ||
![]() |
fc22d0fcbc | ||
![]() |
da5c922c40 | ||
aaebbdedcc | |||
![]() |
d2b32bc754 | ||
![]() |
4aff615687 | ||
![]() |
0b3abb3b63 | ||
775188a36c | |||
21fe962abd | |||
9b3eb8d2c3 | |||
a5a5f7dbde | |||
30f25de49b | |||
2cc362ca7b | |||
f1df49606d | |||
c0be83fe08 | |||
0b2ef3da13 | |||
526aadb559 | |||
8d629de23d | |||
8fb7bd264f | |||
2e85c2387c | |||
1b6c002883 | |||
![]() |
7121e3e52e | ||
726d2f4752 | |||
75d86727ec | |||
5c3e408772 | |||
a51d260a78 | |||
b5ed39f10d | |||
f12dbba3d6 | |||
9b9f96daf8 | |||
b8437cd247 | |||
63f0355680 | |||
2586db91c0 | |||
fc817b0ec0 | |||
2f2ff4f181 | |||
68e8e597e8 | |||
e7202e0ee6 | |||
a700747595 | |||
0bcf9caf7a | |||
41e20ae707 | |||
a6c506a176 | |||
7338282bbe | |||
![]() |
f9fbc76dd0 | ||
![]() |
2ee1a212c8 | ||
![]() |
fe41dec699 | ||
![]() |
2893cbb2e6 | ||
18e24edce5 | |||
f554ca3493 | |||
![]() |
03e10835fb | ||
1470ea2d72 | |||
292b7e6dc1 | |||
2800791f00 | |||
c35d1583d4 | |||
412fcfb578 | |||
80973ca21a | |||
1b0102bd1c | |||
2a68a01a35 | |||
63f4e04624 | |||
6c3cf9bf77 | |||
4ff62c291e | |||
d4992936b1 | |||
2a0b927022 | |||
![]() |
17c2a2a580 | ||
![]() |
a92993e05b | ||
![]() |
3fcef90cc2 | ||
![]() |
8c78d4f83e | ||
![]() |
2daeb6d1a1 | ||
![]() |
c8490a3140 | ||
![]() |
818e70d3a7 | ||
![]() |
6d0f80fa1e | ||
5fd1b69532 | |||
e24ebf4bda | |||
d34087f4d0 | |||
b78870de54 | |||
9d2f684ac7 | |||
6ad1de8d85 | |||
f6da5f43aa | |||
02669fafde | |||
30fc9544fe | |||
307a68aa5a | |||
![]() |
2664c417e3 | ||
![]() |
21b3864dfd | ||
![]() |
7a0f384dbf | ||
![]() |
27a0d4e51e | ||
![]() |
dfa1470c17 | ||
d992dbf92a | |||
1c28495fc3 | |||
950ca71a34 | |||
fcf82ea580 | |||
![]() |
381f390938 | ||
![]() |
ab4a8ef16c | ||
![]() |
998931ffde | ||
![]() |
67b7febf72 | ||
a916c1a22a | |||
1460bec8cf | |||
7aca1e4006 | |||
25e567a125 | |||
43c2018177 | |||
7d9207dc81 | |||
![]() |
f9c3f82bb1 | ||
![]() |
40b30979cd | ||
![]() |
11e00ba9cb | ||
9ac31573b4 | |||
a895bcc91e | |||
eff0cac30b | |||
c65ce1d3f9 | |||
201ef3b062 | |||
3b34581065 | |||
![]() |
d4dd0ea982 | ||
![]() |
0b01cc5070 | ||
![]() |
3de1fa2295 | ||
d8cc2a3560 | |||
![]() |
d42a467c00 | ||
![]() |
bc4ee0fc38 | ||
9b17b52b39 | |||
c02f685307 | |||
ef7b3e0c8b | |||
baa11d8146 | |||
2d24f21327 | |||
96c565d486 | |||
3c53dfe628 | |||
761affc94d | |||
f0f62527d7 | |||
c826efd3a1 | |||
ae8779e004 | |||
49221add97 | |||
da810467b3 | |||
70f018eb87 | |||
55a8878a64 | |||
0f048a7aa6 | |||
435bf81945 | |||
1a56d5ab37 | |||
3d21ad0df9 | |||
f6a4b0b709 | |||
199788495e | |||
fecd0a9f5c | |||
1e24523df2 | |||
93c6df7e89 | |||
e33bb2ac1e | |||
07f7f2be50 | |||
7ddeb0c945 | |||
00c1fc6ed4 | |||
4a211f1bf4 | |||
776c7aeb83 | |||
c143a0e807 | |||
6ea0b05300 | |||
39dfdad0d2 | |||
4cd9fe725d | |||
03d430ba7c | |||
5592992b73 | |||
d500f61738 | |||
8eb6dc0aef | |||
dd5c4af6fb | |||
0756306e54 | |||
5e24daafc6 | |||
37bb09ffc7 | |||
89c9a6d0bb | |||
04bf5157bb | |||
790db3735f | |||
78b2d24001 | |||
14e4cba7cd | |||
b1541dbf11 | |||
da5de2fd4a | |||
aa98e540e0 | |||
253c157ba8 | |||
9c35a55969 | |||
a1bf2b8653 | |||
3361d14f3c | |||
![]() |
e687e1d4d5 | ||
56bf844540 | |||
![]() |
ee5012311e | ||
3f92d92ce4 | |||
20145333f4 | |||
7b3791627c | |||
![]() |
98019bb998 | ||
5c3f264295 | |||
02855a0d97 | |||
b5117eafc5 | |||
05ffa63dc0 | |||
06106c75dc | |||
363aaadb1a | |||
7713284e64 | |||
cee45e3031 | |||
24a1cf713e | |||
481e28750b | |||
8b029dbae5 | |||
484d4e226c | |||
a7db82a1fa | |||
3f2fe39515 | |||
04a9f5612b | |||
884a42b814 | |||
278a8142b8 | |||
277a1619e4 | |||
d128bab2fa | |||
550ef2ae9c | |||
5feeffa550 | |||
36c279f23d | |||
f3207464bb | |||
00acac4b61 | |||
e67c750fab | |||
2d7f0d35ce | |||
3701f71fc6 | |||
3f64825436 | |||
5ca319e4bd | |||
f11104e7bc | |||
39c0f558c1 | |||
c1b9aa9665 | |||
9eb3cc5916 | |||
2fab97fb20 | |||
195a2d0473 | |||
288a6b0670 | |||
df7c1c6104 | |||
![]() |
598a177e5e | ||
![]() |
0a1191aa3f | ||
![]() |
5f81a8de59 | ||
f6273a1662 | |||
e14a4f0111 | |||
543e5bd218 | |||
d3c28a6b44 | |||
d851686272 | |||
87329bc32c | |||
c734b84b28 | |||
6c88eb5211 | |||
7b2355a888 | |||
b31ebfe368 | |||
9a7b58259f | |||
9c52d454f8 | |||
a548c307bc | |||
2efd544713 | |||
c9a6fab638 | |||
1c677cd99b | |||
![]() |
70e994fcf3 | ||
![]() |
c326bb7c6d | ||
![]() |
f6c8e44329 | ||
![]() |
345e7414e6 | ||
![]() |
3488db38bc | ||
![]() |
8957c85486 | ||
![]() |
6b0a102c1b | ||
![]() |
975d8a069a | ||
![]() |
2d15f8e16e | ||
![]() |
a3a8ee1329 | ||
4e5a2d00aa | |||
ab039b8023 | |||
8ed1b96f3a | |||
![]() |
c73b5b9edb | ||
![]() |
e308804cb7 | ||
cdd58f168a | |||
4d09e507fb | |||
d600a2df12 | |||
e310588273 | |||
a0fabe5f92 | |||
780fdfe4f6 | |||
145730f5b8 | |||
624a672213 | |||
16c5252c43 | |||
50710f8066 | |||
10c6c428a3 | |||
c34fd76a78 | |||
ab9dac8827 | |||
![]() |
49ba58cb8d | ||
![]() |
4f47fab139 | ||
![]() |
832e55ddf9 | ||
![]() |
8adf55a568 | ||
![]() |
9307b27655 | ||
![]() |
345d078370 | ||
![]() |
a4ef4e594a | ||
![]() |
18b11d2a32 | ||
75d681a93c | |||
0500bbb186 | |||
![]() |
a047b91deb | ||
![]() |
e941e79830 | ||
![]() |
b98254b2be | ||
![]() |
e8ac24bedd | ||
![]() |
38e109db2b | ||
![]() |
8c10ec9db3 | ||
![]() |
b9a2459315 | ||
![]() |
86f8d63a69 | ||
1a27fe185c | |||
0573123460 | |||
1e33dac2d7 | |||
98663feaa3 | |||
ceeacf6a07 | |||
f040421848 | |||
9fcddbb6bf | |||
75c20c9b1a | |||
ea9a3320a3 | |||
d621e19349 | |||
1ba7fb9621 | |||
d02b71a39e | |||
f0e0c01518 | |||
76999ccb6f | |||
d189c3912c | |||
b9bc254fd3 | |||
8c0e82d4f3 | |||
844977cca3 | |||
ffad52e48c | |||
d12b531c54 | |||
941db3aeeb | |||
98aafee53a | |||
abec6ad64c | |||
2f53f25580 | |||
b374b1136e | |||
57e21e906f | |||
![]() |
a474bd46d6 | ||
![]() |
7ae8381465 | ||
f00ac6ad14 | |||
![]() |
5bef86f456 | ||
![]() |
4d23e1d38f | ||
c0308526a9 | |||
3c7898160e | |||
![]() |
4ac505959f | ||
![]() |
683e0f42bc | ||
![]() |
d67cee5e45 | ||
db72f87b34 | |||
eb175f5542 | |||
43e6bb7569 | |||
4fbfc5d83d | |||
8ea3aa8592 | |||
94c7d840c2 | |||
d11c01cc82 | |||
1a7e71c5ca | |||
4ca12d141c | |||
9c2994cf3e | |||
2550b2c557 | |||
![]() |
5435a6584e | ||
![]() |
9f11188e8f | ||
241ee71745 | |||
a1ccd5a209 | |||
2a30bfedca | |||
129188f3cc | |||
bdff474d94 | |||
6908616a74 | |||
841bb75554 | |||
ca312f5bbc | |||
ef692efc83 | |||
e7e5ee1abe | |||
f124404dc3 | |||
9332d1347d | |||
afe34c6b75 | |||
24cb0934c7 | |||
e139710352 | |||
144147d854 | |||
cfd84bdcdd | |||
1de82a6801 | |||
1050fc7786 | |||
00dc1ed213 | |||
2aceca5f93 | |||
b9d5cdf2be | |||
948bbae661 | |||
6eb09bd0c8 | |||
66ee7b563a | |||
9b3082be06 | |||
74ea45901a | |||
030beacf11 | |||
b4f3d961e6 | |||
a077245b3a | |||
5a13070a58 | |||
4f5e3226de | |||
df075ca4f5 | |||
ffc0bcc3a0 | |||
81808d4a60 | |||
63a8b4668c | |||
50268de894 | |||
96d7c73644 | |||
2deed13484 | |||
eb321445d9 | |||
39039b89a4 | |||
e7c2162874 | |||
fe808a8800 | |||
fa85c0c50b | |||
4bcb1d27e4 | |||
a2dbb21853 | |||
44c38dffad | |||
a845d4f225 | |||
9dcf48ea81 | |||
33b2d834c7 | |||
fac4f6c28f | |||
69aadaa46a | |||
1412dbd16b | |||
c626bb64bd | |||
c5b6a4ee17 | |||
7433eeb5c0 | |||
ceac733b66 | |||
665f58d62a | |||
0eb04facec | |||
28923825d9 | |||
195d7dc653 | |||
471fc8ee12 | |||
419d411b1b | |||
c6e401a64f | |||
3bc9053a86 | |||
5a639260cd | |||
67e07d21ef | |||
f0b9894e48 | |||
74dc427320 | |||
d167b5eafb | |||
5cd1419897 | |||
f129426eed | |||
f3ec5f7956 | |||
2c17fef161 | |||
ab182d08f3 | |||
f869b8a133 | |||
7035db2bcd | |||
27042f9930 | |||
4c02c1f58b | |||
79baf70f9a | |||
622c6801ae | |||
005f73729e | |||
5b0680b29e | |||
9d989c6a67 | |||
fa740e8271 | |||
0ba0f1bded | |||
4321f13453 | |||
e71d1d38ad | |||
6fe25cda9e | |||
01962754b0 | |||
237447180c | |||
4b1a357ee7 | |||
56c17300d5 | |||
61ae0a597a | |||
3159c519b1 | |||
f00bf7d2cb | |||
33ea4cf571 | |||
86b3b13d6f | |||
b77524cfc7 | |||
12c7871640 | |||
88c7abedde | |||
ad4eef9757 | |||
935ba77da7 | |||
673d765ed6 | |||
c719410dfa | |||
ff81b4246a | |||
646fe20726 | |||
a5ca9364ef | |||
826d8ca07f | |||
![]() |
acebd2ea68 | ||
![]() |
fb6eea2484 | ||
cd3515923e | |||
509e39b592 | |||
dd575316bb | |||
cf7d492e8d | |||
48027fe6ff | |||
cabf1aa3c5 | |||
a1ed4cf3b0 | |||
624c382652 | |||
a62c6a8b96 | |||
167839b267 | |||
c48796c0f4 | |||
507c1d55da | |||
6193e487c8 | |||
1826fcee0c | |||
2999638255 | |||
012fb4cacf | |||
f13f4fcb6e | |||
31719d30cf | |||
afad22a8cb | |||
daf7e86b2f | |||
768921b361 | |||
ddf7fba039 | |||
3d25a9fd66 | |||
8161f099d2 | |||
7da3de20aa | |||
c5ca226ece | |||
96185d015a | |||
65484510c6 | |||
b013173c86 | |||
172f0c9d95 | |||
a3d3eec709 | |||
8250a8e7f7 | |||
e01234c6a4 | |||
ce484f2eb8 | |||
38da5cd4e8 | |||
42fa23017f | |||
a021e0d31f | |||
81713a0cab | |||
cccf76cc78 | |||
e2afb72c16 | |||
40e12b4fb1 | |||
4a47bea5f1 | |||
23aaefa986 | |||
99b028a4e7 | |||
fbcaad51d7 | |||
64fe2f1b05 | |||
582bab7c0d | |||
5f903cc7ca | |||
276d1c907e | |||
c098e5602d | |||
42f8b98b03 | |||
d364bba4c7 | |||
2df32aa8e5 | |||
709657e2c6 | |||
6176aaeb44 | |||
d8c3f617aa | |||
08dec0e00d | |||
1b25eaca8f | |||
2f4ea9c588 | |||
ae505995ac | |||
109ac5b61c | |||
79d8a0ed11 | |||
7e4ff0ba85 | |||
c4c45f708c | |||
953381ff5e | |||
cae1fe14f9 | |||
efe3696aa2 | |||
889b5ae280 | |||
c2bfb80233 | |||
8ef042af6a | |||
fcb835da34 | |||
7493134f25 | |||
c6c61c9e57 | |||
8d6d1bc751 | |||
541dae36d4 | |||
50eb93deec | |||
ecb8480b5c | |||
cfbcd54ba9 | |||
1c3fc2bbdb | |||
d55a0c9c39 | |||
57e2bb7bc9 | |||
eeb2835ca1 | |||
823526ae9b | |||
ce49c00454 | |||
9f7ec398c1 | |||
25d16b13f5 | |||
f32d3aaef5 | |||
b8f17c7ac4 | |||
d82499f07c | |||
62210c8165 | |||
a827b2f964 | |||
1e30efdb0d | |||
bf193b3218 | |||
003d865cc3 | |||
4b95824644 | |||
70b2dbec56 | |||
4ee6ae96a2 | |||
7379645869 | |||
8b8d32e496 | |||
be004cd350 | |||
71640590bc | |||
0430323d2a | |||
c2a1d7956c | |||
aca2f5780b | |||
0ec39e5ea1 | |||
52f736a06e | |||
0722fd8b19 | |||
b33551d4b8 | |||
e6251e7cb5 | |||
5f413efc08 | |||
bd341d4be3 | |||
34d879a066 | |||
789f15f1e4 | |||
b04924d2b1 | |||
ed4dc33105 | |||
8e51ca7f39 | |||
2e00cec408 | |||
2a57f62e6b | |||
cd51c9b3c4 | |||
![]() |
46a342180d | ||
![]() |
578656021e | ||
![]() |
7dae4eb303 | ||
![]() |
4512a940fb | ||
![]() |
a67ea4b2f2 | ||
fe5e4a2c7a | |||
5aef5e24e3 | |||
4c18e2f057 | |||
a3e42c435c | |||
2c4ecb7b7c | |||
![]() |
28f31ae4ec | ||
f34b4678ba | |||
1f569b7359 | |||
![]() |
7f673bb254 | ||
![]() |
a02cccaa50 | ||
![]() |
bcb07ff3c6 | ||
479120118d | |||
0c4f945408 | |||
3291b761e8 | |||
![]() |
b8d78ac779 | ||
![]() |
e6d97308bc | ||
![]() |
71dbc0abe6 | ||
![]() |
ff911e37c4 | ||
![]() |
f9eaf412b7 | ||
![]() |
19016edcfc | ||
75e6539f81 | |||
956c9607ff | |||
a28ddedce7 | |||
![]() |
e13ce467d8 | ||
![]() |
34b204c44c | ||
f5dffb0726 | |||
![]() |
d4bafaeee8 | ||
![]() |
2f8249bed5 | ||
![]() |
5a458822ce | ||
692790c4ed | |||
7f5f764aba | |||
c299976165 | |||
14941d0dda | |||
![]() |
676e9c9320 | ||
![]() |
bb38e07e2a | ||
16282ec5c5 | |||
5912f7c259 | |||
89d7a594dd | |||
100d307037 | |||
3d0e15aaed | |||
e9de0a14b9 | |||
![]() |
5a3f0163b9 | ||
![]() |
dd89c4a469 | ||
![]() |
a65a498c86 | ||
![]() |
10d5a17422 | ||
![]() |
b6298dc091 | ||
![]() |
11da21dd67 | ||
![]() |
a574fcb68d | ||
![]() |
0f757489ff | ||
![]() |
b8eeb72044 | ||
![]() |
60efd0b426 | ||
![]() |
c36905a309 | ||
![]() |
1ff9e6eff1 | ||
2e888501d6 | |||
e6f17ec1ab | |||
![]() |
2becaaa593 | ||
f8e871cea9 | |||
80e3c96f2d | |||
dc13ed6c19 | |||
17b72dd549 | |||
9b2a85df38 | |||
6c56d679ab | |||
![]() |
5c5f5bc682 | ||
![]() |
881ff77171 | ||
![]() |
9be53ecb43 | ||
![]() |
646dbffe69 | ||
![]() |
95f5244fd9 | ||
![]() |
694aab503d | ||
![]() |
36a313cc30 | ||
![]() |
e011d60987 | ||
![]() |
d76d68ea8d | ||
![]() |
404fe4f127 | ||
![]() |
27d8b0ee3d | ||
![]() |
89f2a76409 | ||
![]() |
3acb7a5c28 | ||
03588e7648 | |||
6a48910935 | |||
fb4fb47ee3 | |||
7a36b07cf7 | |||
4a59c19ac9 | |||
51a6f298e2 | |||
752c17ca6c | |||
a3a17a4f32 | |||
![]() |
7f6ba8cd15 | ||
6cd5f1d83b | |||
2a2795827a | |||
700c843b11 | |||
d28220cd04 | |||
ad056bcef5 | |||
b2dcf2069f | |||
8c7898de1e | |||
07a83bf310 | |||
173823695f | |||
5000a266cb | |||
14e9315262 | |||
3abc777062 | |||
3ba46f16d1 | |||
85bb495754 | |||
0ba207cb01 | |||
33aac1b125 | |||
d5cc1d83f3 | |||
92a26f6f7b | |||
d04050e6b0 | |||
80cb62b777 | |||
570dea85f1 | |||
86a2e16ffb | |||
ed39ea408f | |||
e9ff0c2882 | |||
e78081f33b | |||
![]() |
eb04971d5a | ||
43d496a93e | |||
8212d68c41 | |||
f060287df8 | |||
1fbf188d61 | |||
c1591983f9 | |||
b726424a34 | |||
e4814a7d06 | |||
2b8f14f709 | |||
e281620063 | |||
7a6db4eda2 | |||
97ad909378 | |||
718fff945e | |||
622272758e | |||
19b84aff9f | |||
![]() |
3f4daede8f | ||
![]() |
5d71fb0b44 | ||
![]() |
73ab3e834c | ||
![]() |
8901e3c34c | ||
![]() |
3b1a1fa027 | ||
![]() |
91977aabae | ||
![]() |
49d970c5bc | ||
![]() |
e34ab0b7a8 | ||
![]() |
6cd560ff1b | ||
![]() |
d3cdf3c7d7 | ||
![]() |
ab69fab3e4 | ||
![]() |
bf639478c7 | ||
![]() |
69bd0571d4 | ||
![]() |
a3df4a399c | ||
![]() |
a715d2b6d7 | ||
![]() |
31a52d2acc | ||
![]() |
76629741f1 | ||
![]() |
3eef793bda | ||
![]() |
db17aa048d | ||
![]() |
dc6ab70a69 | ||
![]() |
bf4cb419a1 | ||
![]() |
a0b316e56d | ||
![]() |
62d34f51cb | ||
![]() |
113f2c4d14 | ||
![]() |
2ca658174a | ||
![]() |
c78af828ac | ||
![]() |
041f5478a4 | ||
![]() |
72081a8647 | ||
![]() |
7b221fa239 | ||
![]() |
d95e730d94 | ||
670e56ded2 | |||
![]() |
20a58a24bb | ||
![]() |
bf42cc1594 | ||
![]() |
e44fb48ff0 | ||
![]() |
1c6ca5011d | ||
![]() |
cdd89df98d | ||
![]() |
ac833ec474 | ||
![]() |
da9c06e663 | ||
![]() |
df95e29f4e | ||
![]() |
47d354711e | ||
![]() |
b54a5c592e | ||
![]() |
5ecae1a951 | ||
![]() |
0e5b46e7d8 | ||
![]() |
97267a4d5c | ||
9ae9abd888 | |||
3f4df2317a | |||
c7a3e271db | |||
37e0b2ceb1 | |||
e3751b36ec | |||
cd21cda42a | |||
5fb6b2c79a | |||
c4a932b187 | |||
30b9f063d3 | |||
de487411b6 | |||
![]() |
bcd7b7e6ca | ||
![]() |
8f4f7b7b53 | ||
![]() |
10cfa6eeab | ||
![]() |
9e2bd4aacd | ||
![]() |
1a493094bb | ||
![]() |
3d24cc9e92 | ||
![]() |
7346ce1c89 | ||
![]() |
d5e97d2392 | ||
2cd9b34427 | |||
94738c1396 | |||
8d89d1eedb | |||
8fd354eea6 | |||
![]() |
f611f4c965 | ||
![]() |
40642c805c | ||
![]() |
2bb0ca97d6 | ||
![]() |
d828ed4342 | ||
![]() |
a06c3fe043 | ||
d77cd04061 | |||
1efc1677a3 | |||
2071cf8596 | |||
51d4827657 | |||
![]() |
6615586a4e | ||
3d385228f0 | |||
24414845d0 | |||
2c76b87fba | |||
bbe3a71d2c | |||
9d1097b467 | |||
8beb75be50 | |||
![]() |
80c55c150f | ||
![]() |
82806099a7 | ||
903f46f3a8 | |||
d99a699839 | |||
![]() |
9f15ae6e56 | ||
![]() |
26bc83c51b | ||
![]() |
5dd5a99de5 | ||
![]() |
ac75327a78 | ||
![]() |
2f48af517e | ||
![]() |
e284675e5a | ||
![]() |
674f523cba | ||
![]() |
2bfe27d217 | ||
![]() |
fe2387e4f0 | ||
![]() |
30eb089623 | ||
![]() |
ee1112cca7 | ||
![]() |
a39fb3d7c2 | ||
![]() |
0feb16d57b | ||
![]() |
b8f5c956e6 | ||
![]() |
f9b8a5ec11 | ||
![]() |
32968af39c | ||
![]() |
49ed17032c | ||
70393fd2d9 | |||
d4a139f215 | |||
0b85bffeff | |||
5ddb4edd14 | |||
![]() |
d2da262374 | ||
![]() |
3c19bb4ec5 | ||
![]() |
123c0de700 | ||
![]() |
19fcb9e5b9 | ||
![]() |
281534b0b0 | ||
![]() |
4fff74793b | ||
7d62c43209 | |||
00388675f1 | |||
4ddca951f2 | |||
2abaa4a39b | |||
402a2af898 | |||
![]() |
4e8ed909e3 | ||
![]() |
5c670fc57f | ||
![]() |
e83d31f749 | ||
![]() |
d8831151fe | ||
![]() |
87d6c302e6 | ||
![]() |
afec920bee | ||
![]() |
873b0b0f19 | ||
![]() |
96c73e7fcb | ||
![]() |
56f6a68ef3 | ||
![]() |
7cd7f01db9 | ||
![]() |
1650cbe8de | ||
![]() |
dc46f00a35 | ||
![]() |
d2edce845a | ||
![]() |
bd84ba2d5c | ||
![]() |
bd74b22b02 | ||
c768b8f8d7 | |||
![]() |
56c0fbeebe | ||
![]() |
5bc9d0af52 | ||
![]() |
12cbbfbac7 | ||
![]() |
4aa4ff738a | ||
![]() |
3d535a2282 | ||
![]() |
36030ae180 | ||
![]() |
e21479a164 | ||
32efa2e509 | |||
![]() |
8216b68ee1 | ||
![]() |
3e4318cca6 | ||
![]() |
cf7a6041b3 | ||
25c709afe2 | |||
58b38b283f | |||
931d7a95bd | |||
![]() |
d771cc6e37 | ||
![]() |
e21a57a1fc | ||
![]() |
1ede0c8b2f | ||
![]() |
57f3b89eed | ||
![]() |
9eedb5c732 | ||
![]() |
4964b1165f | ||
![]() |
bd1ccba960 | ||
![]() |
3334d9f737 | ||
![]() |
135920a9bb | ||
![]() |
c0742b5cf3 | ||
![]() |
163023ecc2 | ||
![]() |
791bc9a84f | ||
![]() |
c91f942194 | ||
![]() |
66385c06ae | ||
![]() |
6fe55529d6 | ||
4c6af7cdca | |||
![]() |
5e8730a616 | ||
![]() |
6acca28969 | ||
![]() |
017f66a342 | ||
![]() |
ff400c9448 | ||
![]() |
b28cc94a4a | ||
![]() |
4da95af45a | ||
![]() |
a9bf1e2969 | ||
![]() |
d50c12dc7d | ||
5361571c15 | |||
13d9322d81 | |||
d35f260f15 | |||
7338b79ef1 | |||
![]() |
edda87d53e | ||
de0a5c7094 | |||
![]() |
008f421377 | ||
![]() |
6821e13820 | ||
![]() |
fa73b481e6 | ||
![]() |
63581d32de | ||
![]() |
0db637ed5a | ||
![]() |
62b3e19217 | ||
![]() |
2b82312b77 | ||
81b8b18581 | |||
769cb40b79 | |||
81026c2871 | |||
dc33ad101a | |||
![]() |
b7baeddc7c | ||
![]() |
e6b968e48c | ||
![]() |
96bdfb3a63 | ||
![]() |
7002c683ab | ||
![]() |
ae7c2f6e5f | ||
b8c97a1d7a | |||
a5551c1be3 | |||
7d129215cf | |||
777d2fc0f0 | |||
7f45e97335 | |||
![]() |
feee22e389 | ||
![]() |
208372ed9e | ||
![]() |
6fd66c9396 | ||
![]() |
e8c28ad42c | ||
![]() |
5caefb5ea9 | ||
ac788d973f | |||
e973185be1 | |||
040af114e1 | |||
![]() |
6f60d642af | ||
![]() |
8a5967f592 | ||
![]() |
a929b5c683 | ||
![]() |
e32d4b15e8 | ||
![]() |
67b3c46758 | ||
![]() |
7de815bd90 | ||
![]() |
0aae97162e | ||
![]() |
ac31a1319b | ||
![]() |
e453ea48e1 | ||
![]() |
8f04aa70cb | ||
![]() |
d7d13d1a4f | ||
![]() |
6b056ce6e0 | ||
b340f4a17c | |||
93cb2a0513 | |||
610af51e95 | |||
efd7d651cc | |||
d139892ae0 | |||
45f3695f9d | |||
3e354f2f1a | |||
b0514cc564 | |||
3718c73341 | |||
cd76457128 | |||
f3d931d090 | |||
ffb3e27c0f | |||
8d6ca6431d | |||
920b14212f | |||
1e9c68859e | |||
![]() |
e390e67aee | ||
d27d060322 | |||
baa314d71f | |||
d98c3d8f71 | |||
5e497f790d | |||
3dbbc2943f | |||
925caccb57 | |||
a21e027403 | |||
4dec3657b0 | |||
06f78d7cfe | |||
6901914640 | |||
75db7fa196 | |||
f8ea882f99 | |||
dd0153e29a | |||
9dd146680d | |||
5fa6583a4e | |||
![]() |
48661361fa | ||
![]() |
4747172059 | ||
![]() |
f541dbe042 | ||
![]() |
a3e146a814 | ||
![]() |
fa6fc84bf8 | ||
![]() |
a0911a43dd | ||
![]() |
b6c6a5d696 | ||
![]() |
5353fd986e | ||
![]() |
3f40af54d1 | ||
![]() |
9e8d4fbe21 | ||
![]() |
cb3326fa42 | ||
![]() |
123473439c | ||
![]() |
c12312f523 | ||
dd8f7638c5 | |||
4edc4077f8 | |||
0d3b1fa490 | |||
828b0954a3 | |||
ec82912085 | |||
021067dab9 | |||
bfc04178a6 | |||
f390831835 | |||
5eefb8b222 | |||
c06e320f99 | |||
b810b79a44 | |||
3cc0122af4 | |||
48fb12ebeb | |||
82554b943e | |||
04e0cfe020 | |||
ed590cd6f5 | |||
c1991241e4 | |||
b503f03bd6 | |||
cff8eafc43 | |||
a0b2f5738a | |||
b335ded1d2 | |||
0a2097a238 | |||
1ab67de677 | |||
47277063e4 | |||
ca6ce37a0b | |||
a00f11d5b7 | |||
13ad5d72ae | |||
b9a7a76174 | |||
a8ae2ce955 | |||
de5661ef1b | |||
e4da3b0f3b | |||
95b6bd36e5 | |||
05aef9bd59 | |||
fda673038f | |||
24801553d6 | |||
43c3a14745 | |||
4b722c9b7f | |||
1150b4cd73 | |||
e7cfb2d6fe | |||
ad810de747 | |||
b57d7c699f | |||
ba825e61d5 | |||
aea20a552e | |||
0703a29562 | |||
db0381d6b1 | |||
a9be26d2bc | |||
db5ab0b9b8 | |||
072d990279 | |||
6b4f665f34 | |||
48a055d462 | |||
9146f3c7e1 | |||
1fe9acefe2 | |||
359b4570e4 | |||
1c720a0fda | |||
d1fdf14911 | |||
6fbeef5f8c | |||
6ef6106336 | |||
23ee40d990 | |||
4e236fc5ab | |||
d573910b7a | |||
da00b95599 | |||
e20310d257 | |||
![]() |
74151b06ef | ||
![]() |
de7a4ba55c | ||
![]() |
5ddeeec9ea | ||
![]() |
1f7042a68e | ||
![]() |
a65722f3e8 | ||
![]() |
964dacd907 | ||
![]() |
25b03979d5 | ||
![]() |
6151480ee6 | ||
![]() |
97fa5d9921 | ||
![]() |
83c9dc7437 | ||
![]() |
4bf0147198 | ||
![]() |
d7e5aaf919 | ||
![]() |
10a021f5fc | ||
![]() |
20df511401 | ||
![]() |
73708041e8 | ||
b71aafbb28 | |||
319ce9b065 | |||
87cff00b99 | |||
f38ee48ca3 | |||
ec6c24429a | |||
15915afeb8 | |||
b72085bcf3 | |||
5f96067c22 | |||
61e4e2a052 | |||
f7cdf221eb | |||
69ad95710a | |||
920572d3bc | |||
d3abbe86e9 | |||
3631efa567 | |||
a6e62afc1f | |||
8bfb3649dd | |||
45abf6575c | |||
7fb82da7ff | |||
e995a4cf92 | |||
2de25ca453 | |||
8d928eadba | |||
e03c25e397 | |||
b695293070 | |||
c09bfa0a26 | |||
f420a99b6f | |||
33b1851317 | |||
3c735eaf96 | |||
3f452c5acb | |||
380f55a0e8 | |||
8a89b3da29 | |||
f2ae1bfe09 | |||
17b781c1b4 | |||
68fb3f42a8 | |||
fc8c193f37 | |||
c949d776be | |||
e29e3e2fd3 | |||
e01c443fa2 | |||
![]() |
50450ecba6 | ||
![]() |
44c0d9357b | ||
![]() |
42ba5fa509 | ||
![]() |
24b2bb8e3f | ||
![]() |
026a9cf026 | ||
![]() |
87c8031e5a | ||
![]() |
bff3f0436c | ||
![]() |
bfe8c65628 | ||
![]() |
a22bf6b4a4 | ||
![]() |
c4e7b1a799 | ||
![]() |
232d0b5e77 | ||
![]() |
82095d9786 | ||
![]() |
f68967c5f2 | ||
![]() |
9898a4a930 | ||
![]() |
092881acc4 | ||
![]() |
b1ed295e26 | ||
2d8f0c2956 | |||
f0241d4a1c | |||
a11bd7cbe7 | |||
36ec4de9c7 | |||
843b66d61e | |||
afb87cd75c | |||
aa098ac800 | |||
bbbbfe2417 | |||
9ab55ec368 | |||
a85546534e | |||
83c786a5fd | |||
50d735b126 | |||
da893452ea | |||
6306799a4b | |||
82d812c25c | |||
890ad257e1 | |||
7cb5dab67f | |||
1cf6030646 | |||
36fd93da0d | |||
5483306d21 | |||
1f228a3f85 | |||
12cc7b3a3b | |||
61fd242938 | |||
78da3b9785 | |||
e0e06d73eb | |||
112fa503e6 | |||
9dab3b0dfe | |||
82064760d5 | |||
bd1354f95b | |||
fb74f41692 | |||
5db89d8743 | |||
b970912cc1 | |||
d196047382 | |||
eefb36cb99 | |||
dc5bfb224d | |||
e461e8fb4f | |||
8bb114e9c4 | |||
f77fc52ca7 | |||
1a28a2af23 | |||
d9c6360e0a | |||
8137661751 | |||
c66559ff84 | |||
e47c628891 | |||
7b0a5bcd5a | |||
6e7dedba81 | |||
83e356140d | |||
b66c7802e7 | |||
7311cf33b7 | |||
60c93f1e1c | |||
a36083ab18 | |||
![]() |
6308038a08 | ||
![]() |
e141abb5de | ||
![]() |
94c6496f9d | ||
![]() |
d360ba4817 | ||
![]() |
cca3f57373 | ||
![]() |
57e51ab8c5 | ||
![]() |
93511c0e61 | ||
7cae467b59 | |||
2df64cd098 | |||
![]() |
0a0757a69f | ||
![]() |
14bacc272e | ||
![]() |
2bc5630832 | ||
![]() |
ecb9726ba4 | ||
![]() |
894186e975 | ||
![]() |
053ebd7079 | ||
![]() |
fabc57b57a | ||
![]() |
04b9b202e5 | ||
![]() |
acec99ff43 | ||
![]() |
e81a01d3e8 | ||
![]() |
7101fb0997 | ||
![]() |
6b7ac9fba6 | ||
![]() |
0badcf63aa | ||
![]() |
bd69499f8f | ||
![]() |
23f835781c | ||
![]() |
5dd6f2d06b | ||
![]() |
7f9a211242 | ||
ca440a50fe | |||
994b51b5b1 | |||
fc0ddb0193 | |||
f0e6baad27 | |||
6ad4cb0928 | |||
91163948b5 | |||
e16cf2ce51 | |||
307a03f0ed | |||
b63d44b226 | |||
57be0df858 | |||
6843950bdc | |||
134cbd46e4 | |||
![]() |
91007735a1 | ||
![]() |
14ca463499 | ||
a7492269fb | |||
074c630ac6 | |||
f902a63144 | |||
ffcd2d4517 | |||
dd400bb14b | |||
63a2a6da08 | |||
3846e08e68 | |||
e625e67b5d | |||
0819857b86 | |||
fbbfd8acf0 | |||
95fb2df609 | |||
c1baee64d3 | |||
ce47d4ea68 | |||
14a839ebba | |||
636badcec2 | |||
6093f26fb6 | |||
4615fce28e | |||
328f544de1 | |||
0c76201bd9 | |||
0a1cd20585 | |||
26a9e8bd89 | |||
f5e8220c8b | |||
b7c7e02518 | |||
7eadc3df6f | |||
2f3f01c5c7 | |||
5d7546598e | |||
434e3badd6 | |||
541e9e6dc0 | |||
8a3a725730 | |||
74cd5cee20 | |||
b78b3cb942 | |||
62b5b49b02 | |||
7734d3dd65 | |||
27724a809f | |||
1d6fc40d59 | |||
176ecaa9f1 | |||
42efed578a | |||
f461d4881d | |||
5be077e25d | |||
5b31540fe8 | |||
ec94a6eca3 | |||
04321e6af3 | |||
25fd488db0 | |||
850f1504f7 | |||
2318a2b319 | |||
8d494ad162 | |||
5a87c232ea | |||
f6778c573a | |||
ffb3a75813 | |||
e3435dce10 | |||
497d08845c | |||
cc6cd9e402 | |||
64f5fed05a | |||
1d280156a2 | |||
08f7e5d6a8 | |||
b72b768945 | |||
89733251d4 | |||
8146f6fdb6 | |||
625e992c91 | |||
62064da081 | |||
86c0fe327b | |||
bbb921806e | |||
fdff5ecd43 | |||
97af7d0622 | |||
![]() |
11579b9818 | ||
![]() |
01cfb7b241 | ||
b0bba18f33 | |||
70902bd279 | |||
cd4d5a39bf | |||
7a1a1d5b93 | |||
66c2664b91 | |||
68e5fd6d08 | |||
37d3204e43 | |||
784566a7cb | |||
126850626c | |||
42cbc1e9ac | |||
1a46d9373d | |||
cd5d5ee23d | |||
16a551f7ce | |||
75d599e061 | |||
efd953f3d4 | |||
3ac8e5f54f | |||
0108c1c290 | |||
a8976d25e3 | |||
6a72c2957b | |||
f69c0998ea | |||
35548ff9be | |||
6ed329db78 | |||
2c65173bec | |||
6acc23af00 | |||
d7a84c88cd | |||
aeeee0e5c4 | |||
c3181d8561 | |||
24ecc858f1 | |||
e5bcfe4207 | |||
e614b0996d | |||
b559b412aa | |||
cd775fa38d | |||
ab064fd31e | |||
08062aaf64 | |||
![]() |
e74479317d | ||
c9c29520b4 | |||
81bbf554e8 | |||
26a24a98ed | |||
e8de1daf65 | |||
11e86110e7 | |||
f42d76b4b4 | |||
e379ca6c54 | |||
5d0b35d53a | |||
8c71b883bb | |||
843351956e | |||
7197d22f2a | |||
b77c4c67a1 | |||
62bc616ada | |||
9e8251fb9f | |||
6ff9483e07 | |||
484a3903ca | |||
916fc96654 | |||
75345f4da1 | |||
e603437500 | |||
d49a778b68 | |||
95ae86d962 | |||
51e35eb572 | |||
4f0cae59c2 | |||
886dbf1172 | |||
04392069a6 | |||
78acf707dc | |||
08d1ea89bf | |||
2b6fd49a53 | |||
3063e37cbd | |||
d2569fa446 | |||
8a8452290c | |||
d2f7b65282 | |||
80966d60c1 | |||
85223303f2 | |||
0860bd3736 | |||
b53bf7844b | |||
75514ddd87 | |||
35642e2661 | |||
c24ddf5deb | |||
f436fd08ed | |||
dc523b78d4 | |||
06a599b4e7 | |||
27cd1a6a6e | |||
b6521ed884 | |||
71f7c712cd | |||
f5f411b62f | |||
d367149048 | |||
1bd5ebd8ec | |||
534609e83a | |||
082a5d3c0f | |||
cee3ebbb23 | |||
9b27251473 | |||
022479aff9 | |||
adcee462e3 | |||
7d070e6caf | |||
dcdf3e197c | |||
6b5b3617d4 | |||
be9f7dbf6e | |||
38c9cb98a9 | |||
d8d0414ec4 | |||
a7870bbd5a | |||
19370a36a2 | |||
5998587c52 | |||
778ce71ea4 | |||
72105e218d | |||
1af23a4106 | |||
6b7d22c211 | |||
40b41b0dc5 | |||
db8a3d5b90 | |||
011d08b172 | |||
124c2b5ce3 | |||
1e375c6de9 | |||
cc4f63be12 | |||
597231bed9 | |||
98e3ca47e6 | |||
a46a0b1b32 | |||
d4f786c902 | |||
b123720fa3 | |||
1376237e08 | |||
78b7385281 | |||
4ab727acbd | |||
32e1c9617e | |||
fb323cef69 | |||
cc179b488d | |||
2fd0ed1e74 | |||
afa5a193a7 | |||
b0789d45f3 | |||
be5fdea5e1 | |||
268953e19f | |||
8cc03c265f | |||
47a0df769e | |||
ff2d5badc9 | |||
bcaf837da8 | |||
0d46c06843 | |||
cdab6f8b76 | |||
b21b953ef2 | |||
0d5cf46625 | |||
![]() |
f7db737c1f | ||
![]() |
6512a9eb11 | ||
9c0ae14609 | |||
5fcafb6434 | |||
5763d73dda | |||
cd4218e523 | |||
f592f2234b | |||
c73a4a7983 | |||
![]() |
3e96a24fb8 | ||
![]() |
01902de200 | ||
![]() |
e8e42a0b9d | ||
![]() |
5368da2632 | ||
a1fd8f49d7 | |||
a213799dac | |||
b925f517d2 | |||
767476ea51 | |||
37ebf04bb5 | |||
7f2bd164db | |||
77014843fb | |||
![]() |
ddf332e779 | ||
![]() |
e01fe689d0 | ||
![]() |
c586970128 | ||
![]() |
f1d56a488a | ||
![]() |
5f62bf3e62 | ||
![]() |
12ced03aa5 | ||
![]() |
3471950f6f | ||
![]() |
0333fb6e22 | ||
![]() |
6d55f5bacf | ||
![]() |
6468e9e317 | ||
![]() |
2270c4744c | ||
![]() |
e34eaa351e | ||
![]() |
03de374b07 | ||
![]() |
6d4f8fd471 | ||
![]() |
b38f3b56f8 | ||
3baa08a3bb | |||
896af2c5d2 | |||
2c3311b471 | |||
2506f6b143 | |||
c9b4ab5a13 | |||
08fad38782 | |||
ba8b2df473 | |||
b819c0334a | |||
009f6cce6e | |||
4ee66c8218 | |||
e6f111c5fc | |||
e146480401 | |||
e7f82c88f1 | |||
9ba8f53ec7 | |||
![]() |
47f0bbb93a | ||
![]() |
9a9144321d | ||
2113946ed0 | |||
cad7953ef6 | |||
1fea327eff | |||
16a5295140 | |||
d84b0e4455 | |||
bb8e050434 | |||
e27af374b0 | |||
471ff5b939 | |||
bfbd159706 | |||
aa8fd85d65 | |||
bc6583fe57 | |||
63272d3cfc | |||
![]() |
78d0a54e96 | ||
280ca2cf2f | |||
![]() |
f564d4dc22 | ||
126a4d8443 | |||
38b930cd03 | |||
2eb89e938a | |||
![]() |
e86092b3e0 | ||
![]() |
ed3120956c | ||
![]() |
e16760d4d0 | ||
![]() |
147a7e4468 | ||
![]() |
6b7db094a9 | ||
![]() |
9d3dec8577 | ||
![]() |
797ee21024 | ||
![]() |
e485752546 | ||
![]() |
c9728fe2ef | ||
![]() |
206718f1e8 | ||
![]() |
31b480a68e | ||
![]() |
1a335321b2 | ||
![]() |
96fc02de5c | ||
![]() |
804011d18d | ||
![]() |
f95100a1ff | ||
![]() |
bbc2454f36 | ||
![]() |
62437acf66 | ||
![]() |
9cbcf5baa7 | ||
![]() |
63260aac59 | ||
![]() |
b316315c61 | ||
![]() |
61be475044 | ||
![]() |
29befb44cc | ||
![]() |
6bfd39d5c0 | ||
![]() |
8e391444b4 | ||
![]() |
a945cabf11 | ||
![]() |
4634debe21 | ||
![]() |
d0456098e2 | ||
![]() |
a3c9887fe5 | ||
![]() |
327f36d022 | ||
![]() |
8eeb902467 | ||
![]() |
61e54cf52e | ||
![]() |
50291233a1 | ||
![]() |
edb3ffcf45 | ||
![]() |
e34f0443bc | ||
![]() |
cb0147a798 | ||
![]() |
a7f789f069 | ||
![]() |
66544f41f2 | ||
![]() |
82c55e6008 | ||
![]() |
1ad69e7127 | ||
![]() |
6470f2d983 | ||
![]() |
709ccf6c22 | ||
![]() |
03887826e8 | ||
![]() |
44a27008dd | ||
![]() |
33229a31ee | ||
![]() |
653047146a | ||
![]() |
423167fdd3 | ||
![]() |
4547d5887d | ||
![]() |
3790129b30 | ||
![]() |
aa95750e1f | ||
![]() |
ac6cd7e4c6 | ||
1da9c21f13 | |||
7eed4fa97b | |||
557f16b8d5 | |||
ed72847374 | |||
645bd3d383 | |||
2e7a7f26f8 | |||
3474b827b0 | |||
![]() |
0bfe45bebe | ||
![]() |
3c383ca874 | ||
![]() |
fccd0dad78 | ||
b0c3c11bd9 | |||
![]() |
bb00e91672 | ||
![]() |
2ef203246b | ||
![]() |
367ab28706 | ||
![]() |
8de0c0bd88 | ||
![]() |
aa3ac75470 | ||
![]() |
f6108b51a2 | ||
![]() |
3c8862763b | ||
![]() |
bab02a62e9 | ||
![]() |
d97c9876e8 | ||
![]() |
61285435e8 | ||
![]() |
8ea4d893f6 | ||
![]() |
593904cc44 | ||
![]() |
957eb1f7ab | ||
![]() |
7ca735bfb2 | ||
![]() |
0919fa06f6 | ||
![]() |
da777c1d7d | ||
![]() |
0305274a13 |
67
.editorconfig
Normal file
67
.editorconfig
Normal file
@@ -0,0 +1,67 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[{*.bat,**/*.bat,installer/resources/proxy/*.ht}]
|
||||
end_of_line = crlf
|
||||
|
||||
[**/*.css]
|
||||
indent_size = 5
|
||||
|
||||
[{history.txt,LICENSE.txt}]
|
||||
indent_size = 3
|
||||
|
||||
[**/.project]
|
||||
indent_style = tab
|
||||
|
||||
[README.txt]
|
||||
indent_style = tab
|
||||
|
||||
[apps/BOB/**/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[apps/routerconsole/java/src/com/vuze/plugins/mlab/tools/ndt/swingemu/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[apps/routerconsole/java/src/edu/internet2/ndt/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[apps/routerconsole/jsp/{createreseed.jsp,exportfamily.jsp,flags.jsp,index.jsp,viewhistory.jsp,viewrouterlog.jsp,viewstat.jsp,viewtheme.jsp,viewwrapperlog.jsp}]
|
||||
insert_final_newline = false
|
||||
|
||||
[apps/susimail/**/{*.java,*.js}]
|
||||
indent_style = tab
|
||||
|
||||
[apps/susimail/**/{Attachments.java,MailPart.java,WebMail.java}]
|
||||
end_of_line = crlf
|
||||
|
||||
[core/java/src/com/nettgryppa/**/*.java]
|
||||
indent_size = 2
|
||||
|
||||
[core/java/src/gnu/**/*.java]
|
||||
indent_size = 2
|
||||
|
||||
[core/java/src/gnu/getopt/*.properties]
|
||||
charset = iso-8859-1
|
||||
|
||||
[core/java/src/org/json/simple/**/*.java]
|
||||
end_of_line = crlf
|
||||
indent_style = tab
|
||||
|
||||
[core/java/src/com/southernstorm/**/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[router/java/src/org/cybergarage/**/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[router/java/src/org/freenetproject/*.java]
|
||||
indent_style = tab
|
||||
|
||||
[router/java/src/com/southernstorm/**/*.java]
|
||||
indent_style = tab
|
9
.gitignore
vendored
9
.gitignore
vendored
@@ -46,3 +46,12 @@ sloccount.sc
|
||||
|
||||
# but allow debian/patches
|
||||
!/debian/patches/*.(patch|diff)
|
||||
|
||||
# IDE project files
|
||||
# Eclipse
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
# IDEA
|
||||
*.iml
|
||||
|
||||
|
6
.idea/ant.xml
generated
Normal file
6
.idea/ant.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AntConfiguration">
|
||||
<buildFile url="file://$PROJECT_DIR$/build.xml" />
|
||||
</component>
|
||||
</project>
|
41
.idea/compiler.xml
generated
Normal file
41
.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel>
|
||||
<module name="addressbook_main" target="1.7" />
|
||||
<module name="addressbook_test" target="1.7" />
|
||||
<module name="BOB_main" target="1.7" />
|
||||
<module name="BOB_test" target="1.7" />
|
||||
<module name="core_main" target="1.7" />
|
||||
<module name="core_test" target="1.7" />
|
||||
<module name="desktopgui_main" target="1.7" />
|
||||
<module name="desktopgui_test" target="1.7" />
|
||||
<module name="i2psnark_main" target="1.7" />
|
||||
<module name="i2psnark_test" target="1.7" />
|
||||
<module name="i2ptunnel_main" target="1.7" />
|
||||
<module name="i2ptunnel_test" target="1.7" />
|
||||
<module name="installer_main" target="1.7" />
|
||||
<module name="installer_test" target="1.7" />
|
||||
<module name="jetty_main" target="1.7" />
|
||||
<module name="jetty_test" target="1.7" />
|
||||
<module name="jrobin_main" target="1.7" />
|
||||
<module name="jrobin_test" target="1.7" />
|
||||
<module name="ministreaming_main" target="1.7" />
|
||||
<module name="ministreaming_test" target="1.7" />
|
||||
<module name="router_main" target="1.7" />
|
||||
<module name="router_test" target="1.7" />
|
||||
<module name="routerconsole_main" target="1.7" />
|
||||
<module name="routerconsole_test" target="1.7" />
|
||||
<module name="sam_main" target="1.7" />
|
||||
<module name="sam_test" target="1.7" />
|
||||
<module name="streaming_main" target="1.7" />
|
||||
<module name="streaming_test" target="1.7" />
|
||||
<module name="susidns_main" target="1.7" />
|
||||
<module name="susidns_test" target="1.7" />
|
||||
<module name="susimail_main" target="1.7" />
|
||||
<module name="susimail_test" target="1.7" />
|
||||
<module name="systray_main" target="1.7" />
|
||||
<module name="systray_test" target="1.7" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
</project>
|
3
.idea/copyright/profiles_settings.xml
generated
Normal file
3
.idea/copyright/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="CopyrightManager">
|
||||
<settings default="" />
|
||||
</component>
|
9
.idea/libraries/javax_servlet_jsp_2_2_0_v201112011158.xml
generated
Normal file
9
.idea/libraries/javax_servlet_jsp_2_2_0_v201112011158.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="javax.servlet.jsp-2.2.0.v201112011158">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
22
.idea/libraries/jettylib.xml
generated
Normal file
22
.idea/libraries/jettylib.xml
generated
Normal file
@@ -0,0 +1,22 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jettylib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-security-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlets-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-deploy-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-util-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlet-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-http-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-xml-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-server-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/servlet-api-3.0.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-jmx-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-webapp-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-io-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-continuation-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-rewrite-8.1.17.v20150415.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
Normal file
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jrobin-1.5.9.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jrobin/jrobin-1.5.9.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
10
.idea/libraries/lib.xml
generated
Normal file
10
.idea/libraries/lib.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<component name="libraryTable">
|
||||
<library name="lib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/jstl.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/standard.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/start.xml
generated
Normal file
9
.idea/libraries/start.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="start">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/start.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/systray4j.xml
generated
Normal file
9
.idea/libraries/systray4j.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="systray4j">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/systray/java/lib/systray4j.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/tomcat_coyote_util.xml
generated
Normal file
9
.idea/libraries/tomcat_coyote_util.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="tomcat-coyote-util">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat/lib/tomcat-coyote-util.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
12
.idea/libraries/tomcat_lib.xml
generated
Normal file
12
.idea/libraries/tomcat_lib.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
||||
<component name="libraryTable">
|
||||
<library name="tomcat-lib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/tomcat-juli.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/el-api.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper-el.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/wrapper.xml
generated
Normal file
9
.idea/libraries/wrapper.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="wrapper">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/all/wrapper.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/wrapper_win.xml
generated
Normal file
9
.idea/libraries/wrapper_win.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="wrapper-win">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/win-all/wrapper.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
57
.idea/misc.xml
generated
Normal file
57
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ClientPropertiesManager">
|
||||
<properties class="javax.swing.AbstractButton">
|
||||
<property name="hideActionText" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JComponent">
|
||||
<property name="html.disable" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JEditorPane">
|
||||
<property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
|
||||
<property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
|
||||
<property name="charset" class="java.lang.String" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JList">
|
||||
<property name="List.isFileList" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JPasswordField">
|
||||
<property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JSlider">
|
||||
<property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
|
||||
<property name="JSlider.isFilled" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JTable">
|
||||
<property name="Table.isFileList" class="java.lang.Boolean" />
|
||||
<property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
|
||||
<property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JToolBar">
|
||||
<property name="JToolBar.isRollover" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JTree">
|
||||
<property name="JTree.lineStyle" class="java.lang.String" />
|
||||
</properties>
|
||||
<properties class="javax.swing.text.JTextComponent">
|
||||
<property name="caretAspectRatio" class="java.lang.Double" />
|
||||
<property name="caretWidth" class="java.lang.Integer" />
|
||||
</properties>
|
||||
</component>
|
||||
<component name="EntryPointsManager">
|
||||
<entry_points version="2.0" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||
<OptionsSetting value="true" id="Add" />
|
||||
<OptionsSetting value="true" id="Remove" />
|
||||
<OptionsSetting value="true" id="Checkout" />
|
||||
<OptionsSetting value="true" id="Update" />
|
||||
<OptionsSetting value="true" id="Status" />
|
||||
<OptionsSetting value="true" id="Edit" />
|
||||
<ConfirmationsSetting value="0" id="Add" />
|
||||
<ConfirmationsSetting value="0" id="Remove" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build" />
|
||||
</component>
|
||||
</project>
|
80
.idea/modules.xml
generated
Normal file
80
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/BOB/BOB.iml" group="apps/BOB" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/apps/BOB/BOB.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_main.iml" group="apps/BOB" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_test.iml" group="apps/BOB" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook.iml" group="apps/addressbook" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/apps/addressbook/addressbook.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_main.iml" group="apps/addressbook" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_test.iml" group="apps/addressbook" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/admin/admin.iml" filepath="$PROJECT_DIR$/apps/admin/admin.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/apps.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/apps.iml" group="apps" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/core/core.iml" filepath="$PROJECT_DIR$/.idea/modules/core/core.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/core/core.iml" filepath="$PROJECT_DIR$/core/core.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/core/core_main.iml" filepath="$PROJECT_DIR$/.idea/modules/core/core_main.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/core/core_test.iml" filepath="$PROJECT_DIR$/.idea/modules/core/core_test.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui.iml" group="apps/desktopgui" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_main.iml" group="apps/desktopgui" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_test.iml" group="apps/desktopgui" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/i2p.i2p.sl.iml" filepath="$PROJECT_DIR$/.idea/modules/i2p.i2p.sl.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark.iml" group="apps/i2psnark" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_main.iml" group="apps/i2psnark" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_test.iml" group="apps/i2psnark" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel.iml" group="apps/i2ptunnel" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_main.iml" group="apps/i2ptunnel" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_test.iml" group="apps/i2ptunnel" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" filepath="$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" filepath="$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/installer/installer.iml" filepath="$PROJECT_DIR$/.idea/modules/installer/installer.iml" group="installer" />
|
||||
<module fileurl="file://$PROJECT_DIR$/installer/installer.iml" filepath="$PROJECT_DIR$/installer/installer.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/installer/installer_main.iml" filepath="$PROJECT_DIR$/.idea/modules/installer/installer_main.iml" group="installer" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/installer/installer_test.iml" filepath="$PROJECT_DIR$/.idea/modules/installer/installer_test.iml" group="installer" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jetty/jetty.iml" group="apps/jetty" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/apps/jetty/jetty.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_main.iml" group="apps/jetty" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_test.iml" group="apps/jetty" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin.iml" group="apps/jrobin" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_main.iml" group="apps/jrobin" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_test.iml" group="apps/jrobin" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming.iml" group="apps/ministreaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_main.iml" group="apps/ministreaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_test.iml" group="apps/ministreaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/router/router.iml" filepath="$PROJECT_DIR$/.idea/modules/router/router.iml" group="router" />
|
||||
<module fileurl="file://$PROJECT_DIR$/router/router.iml" filepath="$PROJECT_DIR$/router/router.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/router/router_main.iml" filepath="$PROJECT_DIR$/.idea/modules/router/router_main.iml" group="router" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/router/router_test.iml" filepath="$PROJECT_DIR$/.idea/modules/router/router_test.iml" group="router" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole.iml" group="apps/routerconsole" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_main.iml" group="apps/routerconsole" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_test.iml" group="apps/routerconsole" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/sam/sam.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/sam/sam.iml" group="apps/sam" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/sam/sam.iml" filepath="$PROJECT_DIR$/apps/sam/sam.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/sam/sam_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/sam/sam_main.iml" group="apps/sam" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/sam/sam_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/sam/sam_test.iml" group="apps/sam" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/streaming/streaming.iml" group="apps/streaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/apps/streaming/streaming.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_main.iml" group="apps/streaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_test.iml" group="apps/streaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susidns/susidns.iml" group="apps/susidns" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/apps/susidns/susidns.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_main.iml" group="apps/susidns" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_test.iml" group="apps/susidns" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susimail/susimail.iml" group="apps/susimail" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/apps/susimail/susimail.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_main.iml" group="apps/susimail" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_test.iml" group="apps/susimail" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/systray/systray.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/systray/systray.iml" group="apps/systray" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/systray/systray.iml" filepath="$PROJECT_DIR$/apps/systray/systray.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/systray/systray_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/systray/systray_main.iml" group="apps/systray" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/systray/systray_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/systray/systray_test.iml" group="apps/systray" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" filepath="$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/runConfigurations/updater.xml
generated
Normal file
6
.idea/runConfigurations/updater.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="updater" type="AntRunConfiguration" factoryName="Ant Target">
|
||||
<antsettings antfile="file://$PROJECT_DIR$/build.xml" target="updater" />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
35
.mtn-ignore
35
.mtn-ignore
@@ -50,6 +50,41 @@ core/c/jcpuid/msvc/*.user
|
||||
# Build property overrides
|
||||
override.properties
|
||||
|
||||
# Launcher build paths
|
||||
launchers/macosx/target
|
||||
launchers/browserbundle/target
|
||||
launchers/macosx/project/target
|
||||
launchers/browserbundle/project/target
|
||||
launchers/target
|
||||
launchers/project/target
|
||||
launchers/common/target
|
||||
launchers/output
|
||||
launchers/project/project
|
||||
|
||||
# Reporting
|
||||
sloccount.sc
|
||||
^reports/
|
||||
|
||||
# IDE project files
|
||||
# Eclipse
|
||||
/.classpath$
|
||||
/.project$
|
||||
/.settings
|
||||
# IDEA
|
||||
\.iml$
|
||||
|
||||
|
||||
# Meeh stuff
|
||||
target/scala-2.12
|
||||
target/streams
|
||||
project/target
|
||||
launchers/macosx/version.h
|
||||
launchers/macosx/project/project/target
|
||||
launchers/macosx/I2PLauncher.xcodeproj/project.xcworkspace/xcuserdata
|
||||
launchers/macosx/I2PLauncher.xcodeproj/xcuserdata
|
||||
launchers/macosx/I2PLauncher.xcworkspace/xcuserdata
|
||||
launchers/macosx/Sparkle.framework
|
||||
launchers/macosx/I2PLauncher.app
|
||||
launchers/macosx/releases.done
|
||||
launchers/macosx/target
|
||||
|
||||
|
43
.travis.yml
Normal file
43
.travis.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
language: java
|
||||
dist: xenial
|
||||
|
||||
jdk:
|
||||
- oraclejdk11
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- jdk: oraclejdk8
|
||||
addons:
|
||||
sonarcloud:
|
||||
organization: "i2p"
|
||||
before_install:
|
||||
- sed -i "1iplugins {\n id 'org.sonarqube' version '2.6.1'\n}\n" build.gradle
|
||||
- jdk: openjdk8
|
||||
|
||||
before_cache:
|
||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/
|
||||
- $HOME/.sonar/cache/
|
||||
- .gradle
|
||||
|
||||
script:
|
||||
- |
|
||||
if [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ]; then
|
||||
./gradlew sonarqube codeCoverageReport
|
||||
else
|
||||
./gradlew check codeCoverageReport
|
||||
fi
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "chat.freenode.net#i2p-dev"
|
||||
on_success: change
|
||||
on_failure: always
|
305
.tx/config
305
.tx/config
@@ -1,3 +1,6 @@
|
||||
;; warning - conversions for all Java bundles:
|
||||
;; id->in, he->iw, iy, yi->ji
|
||||
|
||||
[I2P.i2ptunnel]
|
||||
source_file = apps/i2ptunnel/locale/messages_en.po
|
||||
source_lang = en
|
||||
@@ -6,11 +9,15 @@ trans.cs = apps/i2ptunnel/locale/messages_cs.po
|
||||
trans.da = apps/i2ptunnel/locale/messages_da.po
|
||||
trans.de = apps/i2ptunnel/locale/messages_de.po
|
||||
trans.es = apps/i2ptunnel/locale/messages_es.po
|
||||
trans.fa = apps/i2ptunnel/locale/messages_fa.po
|
||||
trans.fi = apps/i2ptunnel/locale/messages_fi.po
|
||||
trans.fr = apps/i2ptunnel/locale/messages_fr.po
|
||||
trans.hu = apps/i2ptunnel/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/i2ptunnel/locale/messages_in.po
|
||||
trans.it = apps/i2ptunnel/locale/messages_it.po
|
||||
trans.ja = apps/i2ptunnel/locale/messages_ja.po
|
||||
trans.ko = apps/i2ptunnel/locale/messages_ko.po
|
||||
trans.nb = apps/i2ptunnel/locale/messages_nb.po
|
||||
trans.nl = apps/i2ptunnel/locale/messages_nl.po
|
||||
trans.nn = apps/i2ptunnel/locale/messages_nn.po
|
||||
@@ -20,7 +27,9 @@ trans.pt_BR = apps/i2ptunnel/locale/messages_pt_BR.po
|
||||
trans.ro = apps/i2ptunnel/locale/messages_ro.po
|
||||
trans.ru_RU = apps/i2ptunnel/locale/messages_ru.po
|
||||
trans.sk = apps/i2ptunnel/locale/messages_sk.po
|
||||
trans.sq = apps/i2ptunnel/locale/messages_sq.po
|
||||
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
|
||||
trans.tr_TR = apps/i2ptunnel/locale/messages_tr.po
|
||||
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
|
||||
trans.vi = apps/i2ptunnel/locale/messages_vi.po
|
||||
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
|
||||
@@ -32,15 +41,19 @@ source_lang = en
|
||||
trans.ar = apps/i2ptunnel/locale-proxy/messages_ar.po
|
||||
trans.cs = apps/i2ptunnel/locale-proxy/messages_cs.po
|
||||
trans.de = apps/i2ptunnel/locale-proxy/messages_de.po
|
||||
trans.el = apps/i2ptunnel/locale-proxy/messages_el.po
|
||||
trans.es = apps/i2ptunnel/locale-proxy/messages_es.po
|
||||
trans.fa = apps/i2ptunnel/locale-proxy/messages_fa.po
|
||||
trans.fi = apps/i2ptunnel/locale-proxy/messages_fi.po
|
||||
trans.fr = apps/i2ptunnel/locale-proxy/messages_fr.po
|
||||
trans.hu = apps/i2ptunnel/locale-proxy/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/i2ptunnel/locale-proxy/messages_in.po
|
||||
trans.it = apps/i2ptunnel/locale-proxy/messages_it.po
|
||||
trans.ko = apps/i2ptunnel/locale-proxy/messages_ko.po
|
||||
trans.nb = apps/i2ptunnel/locale-proxy/messages_nb.po
|
||||
trans.nl = apps/i2ptunnel/locale-proxy/messages_nl.po
|
||||
trans.nn = apps/i2ptunnel/locale-proxy/messages_nn.po
|
||||
trans.pl = apps/i2ptunnel/locale-proxy/messages_pl.po
|
||||
trans.pt = apps/i2ptunnel/locale-proxy/messages_pt.po
|
||||
trans.pt_BR = apps/i2ptunnel/locale-proxy/messages_pt_BR.po
|
||||
@@ -53,21 +66,100 @@ trans.uk_UA = apps/i2ptunnel/locale-proxy/messages_uk.po
|
||||
trans.vi = apps/i2ptunnel/locale-proxy/messages_vi.po
|
||||
trans.zh_CN = apps/i2ptunnel/locale-proxy/messages_zh.po
|
||||
|
||||
[I2P.core]
|
||||
type = PO
|
||||
source_file = core/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = core/locale/messages_ar.po
|
||||
trans.az = core/locale/messages_az.po
|
||||
trans.cs = core/locale/messages_cs.po
|
||||
trans.da = core/locale/messages_da.po
|
||||
trans.de = core/locale/messages_de.po
|
||||
trans.el = core/locale/messages_el.po
|
||||
trans.es = core/locale/messages_es.po
|
||||
trans.et_EE = core/locale/messages_et.po
|
||||
trans.fa = core/locale/messages_fa.po
|
||||
trans.fi = core/locale/messages_fi.po
|
||||
trans.fr = core/locale/messages_fr.po
|
||||
trans.hu = core/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = core/locale/messages_in.po
|
||||
trans.it = core/locale/messages_it.po
|
||||
trans.ja = core/locale/messages_ja.po
|
||||
trans.ko = core/locale/messages_ko.po
|
||||
trans.ku = core/locale/messages_ku.po
|
||||
trans.nb = core/locale/messages_nb.po
|
||||
trans.nl = core/locale/messages_nl.po
|
||||
trans.pl = core/locale/messages_pl.po
|
||||
trans.pt = core/locale/messages_pt.po
|
||||
trans.pt_BR = core/locale/messages_pt_BR.po
|
||||
trans.ro = core/locale/messages_ro.po
|
||||
trans.ru_RU = core/locale/messages_ru.po
|
||||
trans.sv_SE = core/locale/messages_sv.po
|
||||
trans.tk = core/locale/messages_tk.po
|
||||
trans.tr_TR = core/locale/messages_tr.po
|
||||
trans.uk_UA = core/locale/messages_uk.po
|
||||
trans.vi = core/locale/messages_vi.po
|
||||
trans.zh_CN = core/locale/messages_zh.po
|
||||
trans.zh_TW = core/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.router]
|
||||
type = PO
|
||||
source_file = router/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = router/locale/messages_ar.po
|
||||
trans.az = router/locale/messages_az.po
|
||||
trans.cs = router/locale/messages_cs.po
|
||||
trans.da = router/locale/messages_da.po
|
||||
trans.de = router/locale/messages_de.po
|
||||
trans.el = router/locale/messages_el.po
|
||||
trans.es = router/locale/messages_es.po
|
||||
trans.et_EE = router/locale/messages_et.po
|
||||
trans.fa = router/locale/messages_fa.po
|
||||
trans.fi = router/locale/messages_fi.po
|
||||
trans.fr = router/locale/messages_fr.po
|
||||
trans.hu = router/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = router/locale/messages_in.po
|
||||
trans.it = router/locale/messages_it.po
|
||||
trans.ja = router/locale/messages_ja.po
|
||||
trans.ko = router/locale/messages_ko.po
|
||||
trans.ku = router/locale/messages_ku.po
|
||||
trans.nb = router/locale/messages_nb.po
|
||||
trans.nl = router/locale/messages_nl.po
|
||||
trans.pl = router/locale/messages_pl.po
|
||||
trans.pt = router/locale/messages_pt.po
|
||||
trans.pt_BR = router/locale/messages_pt_BR.po
|
||||
trans.ro = router/locale/messages_ro.po
|
||||
trans.ru_RU = router/locale/messages_ru.po
|
||||
trans.sv_SE = router/locale/messages_sv.po
|
||||
trans.tk = router/locale/messages_tk.po
|
||||
trans.tr_TR = router/locale/messages_tr.po
|
||||
trans.uk_UA = router/locale/messages_uk.po
|
||||
trans.vi = router/locale/messages_vi.po
|
||||
trans.zh_CN = router/locale/messages_zh.po
|
||||
trans.zh_TW = router/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.routerconsole]
|
||||
source_file = apps/routerconsole/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/locale/messages_ar.po
|
||||
trans.az = apps/routerconsole/locale/messages_az.po
|
||||
trans.cs = apps/routerconsole/locale/messages_cs.po
|
||||
trans.da = apps/routerconsole/locale/messages_da.po
|
||||
trans.de = apps/routerconsole/locale/messages_de.po
|
||||
trans.el = apps/routerconsole/locale/messages_el.po
|
||||
trans.es = apps/routerconsole/locale/messages_es.po
|
||||
trans.et_EE = apps/routerconsole/locale/messages_et.po
|
||||
trans.fa = apps/routerconsole/locale/messages_fa.po
|
||||
trans.fi = apps/routerconsole/locale/messages_fi.po
|
||||
trans.fr = apps/routerconsole/locale/messages_fr.po
|
||||
trans.hu = apps/routerconsole/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/locale/messages_in.po
|
||||
trans.it = apps/routerconsole/locale/messages_it.po
|
||||
trans.ja = apps/routerconsole/locale/messages_ja.po
|
||||
trans.ko = apps/routerconsole/locale/messages_ko.po
|
||||
trans.nb = apps/routerconsole/locale/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale/messages_nl.po
|
||||
trans.pl = apps/routerconsole/locale/messages_pl.po
|
||||
@@ -86,16 +178,23 @@ trans.zh_TW = apps/routerconsole/locale/messages_zh_TW.po
|
||||
source_file = apps/routerconsole/locale-news/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/locale-news/messages_ar.po
|
||||
trans.az = apps/routerconsole/locale-news/messages_az.po
|
||||
trans.cs = apps/routerconsole/locale-news/messages_cs.po
|
||||
trans.de = apps/routerconsole/locale-news/messages_de.po
|
||||
trans.el = apps/routerconsole/locale-news/messages_el.po
|
||||
trans.es = apps/routerconsole/locale-news/messages_es.po
|
||||
trans.fa = apps/routerconsole/locale-news/messages_fa.po
|
||||
trans.fi = apps/routerconsole/locale-news/messages_fi.po
|
||||
trans.fr = apps/routerconsole/locale-news/messages_fr.po
|
||||
trans.he = apps/routerconsole/locale-news/messages_he.po
|
||||
trans.gl = apps/routerconsole/locale-news/messages_gl.po
|
||||
;; Java converts he to iw
|
||||
trans.he = apps/routerconsole/locale-news/messages_iw.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/locale-news/messages_in.po
|
||||
trans.it = apps/routerconsole/locale-news/messages_it.po
|
||||
trans.ja = apps/routerconsole/locale-news/messages_ja.po
|
||||
trans.ko = apps/routerconsole/locale-news/messages_ko.po
|
||||
trans.ku = apps/routerconsole/locale-news/messages_ku.po
|
||||
trans.mg = apps/routerconsole/locale-news/messages_mg.po
|
||||
trans.nb = apps/routerconsole/locale-news/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale-news/messages_nl.po
|
||||
@@ -106,7 +205,9 @@ trans.ro = apps/routerconsole/locale-news/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale-news/messages_ru.po
|
||||
trans.sk = apps/routerconsole/locale-news/messages_sk.po
|
||||
trans.sq = apps/routerconsole/locale-news/messages_sq.po
|
||||
trans.sr = apps/routerconsole/locale-news/messages_sr.po
|
||||
trans.sv_SE = apps/routerconsole/locale-news/messages_sv.po
|
||||
trans.tk = apps/routerconsole/locale-news/messages_tk.po
|
||||
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
|
||||
trans.uk_UA = apps/routerconsole/locale-news/messages_uk.po
|
||||
trans.zh_CN = apps/routerconsole/locale-news/messages_zh.po
|
||||
@@ -116,7 +217,11 @@ trans.zh_TW = apps/routerconsole/locale-news/messages_zh_TW.po
|
||||
type = PO
|
||||
source_file = apps/routerconsole/locale-countries/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/locale-countries/messages_ar.po
|
||||
trans.az = apps/routerconsole/locale-countries/messages_az.po
|
||||
trans.bg = apps/routerconsole/locale-countries/messages_bg.po
|
||||
trans.ca = apps/routerconsole/locale-countries/messages_ca.po
|
||||
trans.cs = apps/routerconsole/locale-countries/messages_cs.po
|
||||
trans.da = apps/routerconsole/locale-countries/messages_da.po
|
||||
trans.de = apps/routerconsole/locale-countries/messages_de.po
|
||||
trans.el = apps/routerconsole/locale-countries/messages_el.po
|
||||
@@ -125,9 +230,18 @@ trans.et_EE = apps/routerconsole/locale-countries/messages_et.po
|
||||
trans.fa = apps/routerconsole/locale-countries/messages_fa.po
|
||||
trans.fi = apps/routerconsole/locale-countries/messages_fi.po
|
||||
trans.fr = apps/routerconsole/locale-countries/messages_fr.po
|
||||
trans.gl = apps/routerconsole/locale-countries/messages_gl.po
|
||||
trans.hi = apps/routerconsole/locale-countries/messages_hi.po
|
||||
trans.hr = apps/routerconsole/locale-countries/messages_hr.po
|
||||
trans.hu = apps/routerconsole/locale-countries/messages_hu.po
|
||||
;; Java converts he to iw
|
||||
trans.he = apps/routerconsole/locale-countries/messages_iw.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/locale-countries/messages_in.po
|
||||
trans.it = apps/routerconsole/locale-countries/messages_it.po
|
||||
trans.ja = apps/routerconsole/locale-countries/messages_ja.po
|
||||
trans.ko = apps/routerconsole/locale-countries/messages_ko.po
|
||||
trans.ku = apps/routerconsole/locale-countries/messages_ku.po
|
||||
trans.mg = apps/routerconsole/locale-countries/messages_mg.po
|
||||
trans.nb = apps/routerconsole/locale-countries/messages_nb.po
|
||||
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
|
||||
@@ -138,9 +252,11 @@ trans.ro = apps/routerconsole/locale-countries/messages_ro.po
|
||||
trans.ru_RU = apps/routerconsole/locale-countries/messages_ru.po
|
||||
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
|
||||
trans.sq = apps/routerconsole/locale-countries/messages_sq.po
|
||||
trans.sr = apps/routerconsole/locale-countries/messages_sr.po
|
||||
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
|
||||
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
|
||||
trans.tk = apps/routerconsole/locale-countries/messages_tk.po
|
||||
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
|
||||
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
|
||||
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
|
||||
trans.zh_CN = apps/routerconsole/locale-countries/messages_zh.po
|
||||
trans.zh_TW = apps/routerconsole/locale-countries/messages_zh_TW.po
|
||||
@@ -151,11 +267,17 @@ source_lang = en
|
||||
trans.ar = apps/i2psnark/locale/messages_ar.po
|
||||
trans.cs = apps/i2psnark/locale/messages_cs.po
|
||||
trans.de = apps/i2psnark/locale/messages_de.po
|
||||
trans.el = apps/i2psnark/locale/messages_el.po
|
||||
trans.es = apps/i2psnark/locale/messages_es.po
|
||||
trans.fa = apps/i2psnark/locale/messages_fa.po
|
||||
trans.fi = apps/i2psnark/locale/messages_fi.po
|
||||
trans.fr = apps/i2psnark/locale/messages_fr.po
|
||||
trans.hu = apps/i2psnark/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/i2psnark/locale/messages_in.po
|
||||
trans.it = apps/i2psnark/locale/messages_it.po
|
||||
trans.ja = apps/i2psnark/locale/messages_ja.po
|
||||
trans.ko = apps/i2psnark/locale/messages_ko.po
|
||||
trans.nb = apps/i2psnark/locale/messages_nb.po
|
||||
trans.nl = apps/i2psnark/locale/messages_nl.po
|
||||
trans.pl = apps/i2psnark/locale/messages_pl.po
|
||||
@@ -165,9 +287,12 @@ trans.ro = apps/i2psnark/locale/messages_ro.po
|
||||
trans.ru_RU = apps/i2psnark/locale/messages_ru.po
|
||||
trans.sk = apps/i2psnark/locale/messages_sk.po
|
||||
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
|
||||
trans.sq = apps/i2psnark/locale/messages_sq.po
|
||||
trans.tr_TR = apps/i2psnark/locale/messages_tr.po
|
||||
trans.uk_UA = apps/i2psnark/locale/messages_uk.po
|
||||
trans.vi = apps/i2psnark/locale/messages_vi.po
|
||||
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
|
||||
trans.zh_TW = apps/i2psnark/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.susidns]
|
||||
source_file = apps/susidns/locale/messages_en.po
|
||||
@@ -178,11 +303,16 @@ trans.da = apps/susidns/locale/messages_da.po
|
||||
trans.de = apps/susidns/locale/messages_de.po
|
||||
trans.el = apps/susidns/locale/messages_el.po
|
||||
trans.es = apps/susidns/locale/messages_es.po
|
||||
trans.fa = apps/susidns/locale/messages_fa.po
|
||||
trans.fi = apps/susidns/locale/messages_fi.po
|
||||
trans.fr = apps/susidns/locale/messages_fr.po
|
||||
trans.gl = apps/susidns/locale/messages_gl.po
|
||||
trans.hu = apps/susidns/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/susidns/locale/messages_in.po
|
||||
trans.it = apps/susidns/locale/messages_it.po
|
||||
trans.ja = apps/susidns/locale/messages_ja.po
|
||||
trans.ko = apps/susidns/locale/messages_ko.po
|
||||
trans.nl = apps/susidns/locale/messages_nl.po
|
||||
trans.pl = apps/susidns/locale/messages_pl.po
|
||||
trans.pt = apps/susidns/locale/messages_pt.po
|
||||
@@ -194,11 +324,13 @@ trans.tr_TR = apps/susidns/locale/messages_tr.po
|
||||
trans.uk_UA = apps/susidns/locale/messages_uk.po
|
||||
trans.vi = apps/susidns/locale/messages_vi.po
|
||||
trans.zh_CN = apps/susidns/locale/messages_zh.po
|
||||
trans.zh_TW = apps/susidns/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.desktopgui]
|
||||
source_file = apps/desktopgui/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/desktopgui/locale/messages_ar.po
|
||||
trans.az = apps/desktopgui/locale/messages_az.po
|
||||
trans.bg = apps/desktopgui/locale/messages_bg.po
|
||||
trans.ca = apps/desktopgui/locale/messages_ca.po
|
||||
trans.cs = apps/desktopgui/locale/messages_cs.po
|
||||
@@ -206,15 +338,18 @@ trans.da = apps/desktopgui/locale/messages_da.po
|
||||
trans.de = apps/desktopgui/locale/messages_de.po
|
||||
trans.el = apps/desktopgui/locale/messages_el.po
|
||||
trans.es = apps/desktopgui/locale/messages_es.po
|
||||
trans.es_AR = apps/desktopgui/locale/messages_es_AR.po
|
||||
trans.fa = apps/desktopgui/locale/messages_fa.po
|
||||
trans.fi = apps/desktopgui/locale/messages_fi.po
|
||||
trans.fr = apps/desktopgui/locale/messages_fr.po
|
||||
trans.gl = apps/desktopgui/locale/messages_gl.po
|
||||
trans.hu = apps/desktopgui/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/desktopgui/locale/messages_in.po
|
||||
trans.it = apps/desktopgui/locale/messages_it.po
|
||||
trans.ja = apps/desktopgui/locale/messages_ja.po
|
||||
trans.ko = apps/desktopgui/locale/messages_ko.po
|
||||
trans.ku = apps/desktopgui/locale/messages_ku.po
|
||||
trans.mg = apps/desktopgui/locale/messages_mg.po
|
||||
trans.nb = apps/desktopgui/locale/messages_nb.po
|
||||
trans.nl = apps/desktopgui/locale/messages_nl.po
|
||||
@@ -224,55 +359,77 @@ trans.pt_BR = apps/desktopgui/locale/messages_pt_BR.po
|
||||
trans.ro = apps/desktopgui/locale/messages_ro.po
|
||||
trans.ru_RU = apps/desktopgui/locale/messages_ru.po
|
||||
trans.sk = apps/desktopgui/locale/messages_sk.po
|
||||
trans.sr = apps/desktopgui/locale/messages_sr.po
|
||||
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
|
||||
trans.sq = apps/desktopgui/locale/messages_sq.po
|
||||
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
|
||||
trans.tk = apps/desktopgui/locale/messages_tk.po
|
||||
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
|
||||
trans.vi = apps/desktopgui/locale/messages_vi.po
|
||||
trans.zh_CN = apps/desktopgui/locale/messages_zh.po
|
||||
trans.zh_TW = apps/desktopgui/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.susimail]
|
||||
source_file = apps/susimail/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/susimail/locale/messages_ar.po
|
||||
trans.az = apps/susimail/locale/messages_az.po
|
||||
trans.bg = apps/susimail/locale/messages_bg.po
|
||||
trans.ca = apps/susimail/locale/messages_ca.po
|
||||
trans.cs = apps/susimail/locale/messages_cs.po
|
||||
trans.da = apps/susimail/locale/messages_da.po
|
||||
trans.de = apps/susimail/locale/messages_de.po
|
||||
trans.el = apps/susimail/locale/messages_el.po
|
||||
trans.es = apps/susimail/locale/messages_es.po
|
||||
trans.fa = apps/susimail/locale/messages_fa.po
|
||||
trans.fi = apps/susimail/locale/messages_fi.po
|
||||
trans.fr = apps/susimail/locale/messages_fr.po
|
||||
trans.gl = apps/susimail/locale/messages_gl.po
|
||||
trans.hr = apps/susimail/locale/messages_hr.po
|
||||
trans.hu = apps/susimail/locale/messages_hu.po
|
||||
;; Java converts he to iw
|
||||
trans.he = apps/susimail/locale/messages_iw.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/susimail/locale/messages_in.po
|
||||
trans.it = apps/susimail/locale/messages_it.po
|
||||
trans.ja = apps/susimail/locale/messages_ja.po
|
||||
trans.ko = apps/susimail/locale/messages_ko.po
|
||||
trans.mg = apps/susimail/locale/messages_mg.po
|
||||
trans.nb = apps/susimail/locale/messages_nb.po
|
||||
trans.nl = apps/susimail/locale/messages_nl.po
|
||||
trans.pl = apps/susimail/locale/messages_pl.po
|
||||
trans.pt = apps/susimail/locale/messages_pt.po
|
||||
trans.pt_BR = apps/susimail/locale/messages_pt_BR.po
|
||||
trans.ro = apps/susimail/locale/messages_ro.po
|
||||
trans.ru_RU = apps/susimail/locale/messages_ru.po
|
||||
trans.sk = apps/susimail/locale/messages_sk.po
|
||||
trans.sq = apps/susimail/locale/messages_sq.po
|
||||
trans.sr = apps/susimail/locale/messages_sr.po
|
||||
trans.sv_SE = apps/susimail/locale/messages_sv.po
|
||||
trans.tr_TR = apps/susimail/locale/messages_tr.po
|
||||
trans.uk_UA = apps/susimail/locale/messages_uk.po
|
||||
trans.vi = apps/susimail/locale/messages_vi.po
|
||||
trans.zh_CN = apps/susimail/locale/messages_zh.po
|
||||
trans.zh_TW = apps/susimail/locale/messages_zh_TW.po
|
||||
|
||||
[I2P.debconf]
|
||||
source_file = debian/po/templates.pot
|
||||
source_lang = en
|
||||
trans.ar = debian/po/ar.po
|
||||
trans.az = debian/po/az.po
|
||||
trans.cs = debian/po/cs.po
|
||||
trans.de = debian/po/de.po
|
||||
trans.el = debian/po/el.po
|
||||
trans.es = debian/po/es.po
|
||||
trans.fi = debian/po/fi.po
|
||||
trans.fr = debian/po/fr.po
|
||||
trans.gl = debian/po/gl.po
|
||||
trans.id = debian/po/id.po
|
||||
trans.it = debian/po/it.po
|
||||
trans.hu = debian/po/hu.po
|
||||
trans.ja = debian/po/ja.po
|
||||
trans.ko = debian/po/ko.po
|
||||
trans.nb = debian/po/nb.po
|
||||
trans.nl = debian/po/nl.po
|
||||
trans.pl = debian/po/pl.po
|
||||
trans.pt = debian/po/pt.po
|
||||
@@ -282,26 +439,27 @@ trans.ru_RU = debian/po/ru.po
|
||||
trans.sk = debian/po/sk.po
|
||||
trans.sq = debian/po/sq.po
|
||||
trans.sv_SE = debian/po/sv.po
|
||||
trans.tk = debian/po/tk.po
|
||||
trans.tr_TR = debian/po/tr.po
|
||||
trans.uk_UA = debian/po/uk.po
|
||||
trans.zh_CN = debian/po/zh.po
|
||||
trans.zh_TW = debian/po/zh_TW.po
|
||||
|
||||
[I2P.i2prouter-script]
|
||||
source_file = installer/resources/locale/po/messages_en.po
|
||||
source_lang = en
|
||||
;; currently fails check
|
||||
;;trans.ca = installer/resources/locale/po/messages_ca.po
|
||||
trans.ar = installer/resources/locale/po/messages_ar.po
|
||||
trans.az = installer/resources/locale/po/messages_az.po
|
||||
trans.ca = installer/resources/locale/po/messages_ca.po
|
||||
trans.de = installer/resources/locale/po/messages_de.po
|
||||
trans.es = installer/resources/locale/po/messages_es.po
|
||||
;; currently fails check
|
||||
;;trans.fi = installer/resources/locale/po/messages_fi.po
|
||||
trans.fi = installer/resources/locale/po/messages_fi.po
|
||||
trans.fr = installer/resources/locale/po/messages_fr.po
|
||||
trans.id = installer/resources/locale/po/messages_id.po
|
||||
trans.it = installer/resources/locale/po/messages_it.po
|
||||
trans.pl = installer/resources/locale/po/messages_pl.po
|
||||
trans.ja = installer/resources/locale/po/messages_ja.po
|
||||
;; currently fails check
|
||||
;;trans.ko = installer/resources/locale/po/messages_ko.po
|
||||
trans.ko = installer/resources/locale/po/messages_ko.po
|
||||
trans.nb = installer/resources/locale/po/messages_nb.po
|
||||
trans.nl = installer/resources/locale/po/messages_nl.po
|
||||
trans.pl = installer/resources/locale/po/messages_pl.po
|
||||
trans.pt = installer/resources/locale/po/messages_pt.po
|
||||
@@ -311,65 +469,172 @@ trans.ru_RU = installer/resources/locale/po/messages_ru.po
|
||||
trans.sk = installer/resources/locale/po/messages_sk.po
|
||||
trans.sv_SE = installer/resources/locale/po/messages_sv.po
|
||||
trans.tr_TR = installer/resources/locale/po/messages_tr.po
|
||||
;; currently fails check
|
||||
;;trans.uk_UA = installer/resources/locale/po/messages_uk.po
|
||||
trans.uk_UA = installer/resources/locale/po/messages_uk.po
|
||||
trans.zh_CN = installer/resources/locale/po/messages_zh.po
|
||||
|
||||
[I2P.getopt]
|
||||
;;
|
||||
;; Java properties files (when not read with our DataHelper methods) must be ISO-8859-1 encoded.
|
||||
;; See https://docs.oracle.com/javase/6/docs/api/java/util/Properties.html
|
||||
;; Several getopt translations from Transifex are ISO-8859-1 encoded.
|
||||
;; So that all our source files are consistently UTF-8 encoded,
|
||||
;; you may optionally convert them to ASCII with Unicode escapes after downloading.
|
||||
;; Convert files with:
|
||||
;; native2ascii -encoding iso-8859-1 foo.properties foo.properties.new
|
||||
;; Then review that it looks right:
|
||||
;; native2ascii -reverse -encoding UTF-8 foo.properties.new
|
||||
;; Then copy it over:
|
||||
;; mv foo.properties.new foo.properties
|
||||
;; The following files from Transifex are known to be ISO-8859-1 encoded,
|
||||
;; and should be escaped using native2ascii after downloading:
|
||||
;; gl, pt, pt_BR, sq, sv, tr
|
||||
;;
|
||||
source_file = core/java/src/gnu/getopt/MessagesBundle.properties
|
||||
source_lang = en
|
||||
type = PROPERTIES
|
||||
trans.ar = core/java/src/gnu/getopt/MessagesBundle_ar.properties
|
||||
trans.az = core/java/src/gnu/getopt/MessagesBundle_az.properties
|
||||
trans.cs = core/java/src/gnu/getopt/MessagesBundle_cs.properties
|
||||
trans.de = core/java/src/gnu/getopt/MessagesBundle_de.properties
|
||||
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
|
||||
trans.fi = core/java/src/gnu/getopt/MessagesBundle_fi.properties
|
||||
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
|
||||
trans.gl = core/java/src/gnu/getopt/MessagesBundle_gl.properties
|
||||
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
|
||||
;; Java converts id to in
|
||||
trans.id = core/java/src/gnu/getopt/MessagesBundle_in.properties
|
||||
trans.it = core/java/src/gnu/getopt/MessagesBundle_it.properties
|
||||
trans.ja = core/java/src/gnu/getopt/MessagesBundle_ja.properties
|
||||
trans.ko = core/java/src/gnu/getopt/MessagesBundle_ko.properties
|
||||
trans.nl = core/java/src/gnu/getopt/MessagesBundle_nl.properties
|
||||
trans.ku = core/java/src/gnu/getopt/MessagesBundle_ku.properties
|
||||
trans.nb = core/java/src/gnu/getopt/MessagesBundle_nb.properties
|
||||
trans.nl = core/java/src/gnu/getopt/MessagesBundle_nl.properties
|
||||
trans.pl = core/java/src/gnu/getopt/MessagesBundle_pl.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.pt = core/java/src/gnu/getopt/MessagesBundle_pt.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.pt_BR = core/java/src/gnu/getopt/MessagesBundle_pt_BR.properties
|
||||
trans.pt = core/java/src/gnu/getopt/MessagesBundle_pt.properties
|
||||
trans.pt_BR = core/java/src/gnu/getopt/MessagesBundle_pt_BR.properties
|
||||
trans.ro = core/java/src/gnu/getopt/MessagesBundle_ro.properties
|
||||
trans.ru_RU = core/java/src/gnu/getopt/MessagesBundle_ru.properties
|
||||
trans.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
|
||||
;; currently corrupt, non-UTF-8
|
||||
;;trans.tr_TR = core/java/src/gnu/getopt/MessagesBundle_tr.properties
|
||||
trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
|
||||
trans.sr = core/java/src/gnu/getopt/MessagesBundle_sr.properties
|
||||
trans.sv_SE = core/java/src/gnu/getopt/MessagesBundle_sv.properties
|
||||
trans.tr_TR = core/java/src/gnu/getopt/MessagesBundle_tr.properties
|
||||
trans.uk_UA = core/java/src/gnu/getopt/MessagesBundle_uk.properties
|
||||
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
|
||||
trans.zh_TW = core/java/src/gnu/getopt/MessagesBundle_zh_TW.properties
|
||||
|
||||
[I2P.streaming]
|
||||
source_file = apps/ministreaming/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.ar = apps/ministreaming/locale/messages_ar.po
|
||||
trans.az = apps/ministreaming/locale/messages_az.po
|
||||
trans.ca = apps/ministreaming/locale/messages_ca.po
|
||||
trans.cs = apps/ministreaming/locale/messages_cs.po
|
||||
trans.de = apps/ministreaming/locale/messages_de.po
|
||||
trans.es = apps/ministreaming/locale/messages_es.po
|
||||
trans.fa = apps/ministreaming/locale/messages_fa.po
|
||||
trans.fi = apps/ministreaming/locale/messages_fi.po
|
||||
trans.fr = apps/ministreaming/locale/messages_fr.po
|
||||
trans.gl = apps/ministreaming/locale/messages_gl.po
|
||||
trans.hu = apps/ministreaming/locale/messages_hu.po
|
||||
;; Java converts id to in
|
||||
trans.id = apps/ministreaming/locale/messages_in.po
|
||||
trans.it = apps/ministreaming/locale/messages_it.po
|
||||
trans.ko = apps/ministreaming/locale/messages_ko.po
|
||||
trans.nb = apps/ministreaming/locale/messages_nb.po
|
||||
trans.nl = apps/ministreaming/locale/messages_nl.po
|
||||
trans.pl = apps/ministreaming/locale/messages_pl.po
|
||||
trans.pt = apps/ministreaming/locale/messages_pt.po
|
||||
trans.pt_BR = apps/ministreaming/locale/messages_pt_BR.po
|
||||
trans.ro = apps/ministreaming/locale/messages_ro.po
|
||||
trans.ru_RU = apps/ministreaming/locale/messages_ru.po
|
||||
trans.sv_SE = apps/ministreaming/locale/messages_sv.po
|
||||
trans.tk = apps/ministreaming/locale/messages_tk.po
|
||||
trans.tr_TR = apps/ministreaming/locale/messages_tr.po
|
||||
trans.uk_UA = apps/ministreaming/locale/messages_uk.po
|
||||
trans.zh_CN = apps/ministreaming/locale/messages_zh.po
|
||||
|
||||
[I2P.manpages]
|
||||
;;
|
||||
;; after adding languages here, add to debian/*.manpages also
|
||||
;; You must run installer/resources/poupdate-man.sh first.
|
||||
;;
|
||||
type = PO
|
||||
source_file = installer/resources/locale-man/man.pot
|
||||
source_lang = en
|
||||
trans.ar = installer/resources/locale-man/man_ar.po
|
||||
trans.az = installer/resources/locale-man/man_az.po
|
||||
trans.de = installer/resources/locale-man/man_de.po
|
||||
trans.es = installer/resources/locale-man/man_es.po
|
||||
trans.fi = installer/resources/locale-man/man_fi.po
|
||||
trans.fr = installer/resources/locale-man/man_fr.po
|
||||
trans.id = installer/resources/locale-man/man_id.po
|
||||
trans.it = installer/resources/locale-man/man_it.po
|
||||
trans.ko = installer/resources/locale-man/man_ko.po
|
||||
trans.nl = installer/resources/locale-man/man_nl.po
|
||||
trans.pl = installer/resources/locale-man/man_pl.po
|
||||
trans.pt = installer/resources/locale-man/man_pt.po
|
||||
trans.pt_BR = installer/resources/locale-man/man_pt_BR.po
|
||||
trans.ro = installer/resources/locale-man/man_ro.po
|
||||
trans.ru_RU = installer/resources/locale-man/man_ru.po
|
||||
trans.sv_SE = installer/resources/locale-man/man_sv.po
|
||||
trans.tr_TR = installer/resources/locale-man/man_tr.po
|
||||
trans.zh_CN = installer/resources/locale-man/man_zh.po
|
||||
|
||||
[I2P.eepsite]
|
||||
;;
|
||||
;; For any new translations, add links in installer/resources/eepsite/docroot/help/index.html
|
||||
;; and copy new flags in build.xml copyflags-unlesspkg target,
|
||||
;; and add to debian/i2p-router.links and debian-alt/*/i2p-router.links
|
||||
;;
|
||||
type = HTML
|
||||
source_file = installer/resources/eepsite/docroot/help/index.html
|
||||
source_lang = en
|
||||
;; File contains local changes to fix RTL issues.
|
||||
;; Merge locally or make changes on TX side before re-enabling
|
||||
;;trans.ar = installer/resources/eepsite/docroot/help/index_ar.html
|
||||
trans.az = installer/resources/eepsite/docroot/help/index_az.html
|
||||
trans.de = installer/resources/eepsite/docroot/help/index_de.html
|
||||
;; not yet translated on TX, use old page
|
||||
;;trans.es = installer/resources/eepsite/docroot/help/index_es.html
|
||||
trans.fr = installer/resources/eepsite/docroot/help/index_fr.html
|
||||
trans.hu = installer/resources/eepsite/docroot/help/index_hu.html
|
||||
;; Java converts id to in
|
||||
trans.id = installer/resources/eepsite/docroot/help/index_in.html
|
||||
trans.it = installer/resources/eepsite/docroot/help/index_it.html
|
||||
;; not yet translated on TX, use old page
|
||||
;;trans.nl = installer/resources/eepsite/docroot/help/index_nl.html
|
||||
trans.pl = installer/resources/eepsite/docroot/help/index_pl.html
|
||||
trans.pt = installer/resources/eepsite/docroot/help/index_pt.html
|
||||
trans.ro = installer/resources/eepsite/docroot/help/index_ro.html
|
||||
trans.ru_RU = installer/resources/eepsite/docroot/help/index_ru.html
|
||||
;; not yet translated on TX, use old page
|
||||
;;trans.sv_SE = installer/resources/eepsite/docroot/help/index_sv.html
|
||||
trans.tr_TR = installer/resources/eepsite/docroot/help/index_tr.html
|
||||
;; not yet translated on TX, use old page
|
||||
;;trans.zh_CN = installer/resources/eepsite/docroot/help/index_zh.html
|
||||
|
||||
[I2P.readme]
|
||||
;;
|
||||
;; Text on /console
|
||||
;;
|
||||
type = HTML
|
||||
source_file = installer/resources/readme/readme.html
|
||||
source_lang = en
|
||||
trans.ar = installer/resources/readme/readme_ar.html
|
||||
trans.de = installer/resources/readme/readme_de.html
|
||||
trans.fr = installer/resources/readme/readme_fr.html
|
||||
;; Java converts id to in
|
||||
trans.id = installer/resources/readme/readme_in.html
|
||||
trans.it = installer/resources/readme/readme_it.html
|
||||
trans.ja = installer/resources/readme/readme_ja.html
|
||||
trans.pl = installer/resources/readme/readme_pl.html
|
||||
trans.pt = installer/resources/readme/readme_pt.html
|
||||
trans.ro = installer/resources/readme/readme_ro.html
|
||||
trans.ru_RU = installer/resources/readme/readme_ru.html
|
||||
trans.tr_TR = installer/resources/readme/readme_tr.html
|
||||
trans.zh_CN = installer/resources/readme/readme_zh.html
|
||||
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
|
14
Docker.entrypoint.sh
Normal file
14
Docker.entrypoint.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
export JAVA_HOME=/opt/jdk/jre
|
||||
|
||||
# Ensure user rights
|
||||
chown -R i2p:nobody /opt/i2p
|
||||
chmod -R u+rwx /opt/i2p
|
||||
|
||||
gosu i2p /opt/i2p/i2psvc /opt/i2p/wrapper.config wrapper.pidfile=/var/tmp/i2p.pid \
|
||||
wrapper.name=i2p \
|
||||
wrapper.displayname="I2P Service" \
|
||||
wrapper.statusfile=/var/tmp/i2p.status \
|
||||
wrapper.java.statusfile=/var/tmp/i2p.java.status \
|
||||
wrapper.logfile=/var/tmp/wrapper.log
|
7
Docker.expt
Normal file
7
Docker.expt
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/expect
|
||||
set timeout 15;
|
||||
spawn java -jar /tmp/i2pinstall.jar -console
|
||||
expect {
|
||||
-re ".*press 1 to continue, 2 to quit, 3 to redisplay" {send "1\r"; exp_continue;}
|
||||
-re "Select target path *" {send "/opt/i2p\r"; exp_continue;}
|
||||
}
|
62
Dockerfile
Normal file
62
Dockerfile
Normal file
@@ -0,0 +1,62 @@
|
||||
FROM meeh/java8server:latest
|
||||
# Docker image based on Alpine with Java.
|
||||
|
||||
# We use Oracle Java to run I2P, but uses the openjdk to build it.
|
||||
|
||||
|
||||
MAINTAINER Mikal Villa <mikal@sigterm.no>
|
||||
|
||||
ENV GIT_BRANCH="master"
|
||||
ENV I2P_PREFIX="/opt/i2p"
|
||||
ENV PATH=${I2P_PREFIX}/bin:$PATH
|
||||
ENV JAVA_HOME=/usr/lib/jvm/default-jvm
|
||||
|
||||
ENV GOSU_VERSION=1.7
|
||||
ENV GOSU_SHASUM="34049cfc713e8b74b90d6de49690fa601dc040021980812b2f1f691534be8a50 /usr/local/bin/gosu"
|
||||
|
||||
RUN mkdir /user && adduser -S -h /user i2p && chown -R i2p:nobody /user
|
||||
|
||||
# Adding files first, since Docker.expt is required for installation
|
||||
ADD Docker.expt /tmp/Docker.expt
|
||||
ADD Docker.entrypoint.sh /entrypoint.sh
|
||||
|
||||
# Required for wget https
|
||||
RUN apk add --no-cache openssl
|
||||
# Gosu is a replacement for su/sudo in docker and not a backdoor :) See https://github.com/tianon/gosu
|
||||
RUN wget -O /usr/local/bin/gosu https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64 \
|
||||
&& echo "${GOSU_SHASUM}" | sha256sum -c && chmod +x /usr/local/bin/gosu
|
||||
|
||||
#
|
||||
# Each RUN is a layer, adding the dependencies and building i2pd in one layer takes around 8-900Mb, so to keep the
|
||||
# image under 200mb we need to remove all the build dependencies in the same "RUN" / layer.
|
||||
#
|
||||
|
||||
# The main layer
|
||||
RUN apk --no-cache add build-base git gettext tar bzip2 apache-ant openjdk8 expect \
|
||||
&& mkdir -p /usr/src/build \
|
||||
&& cd /usr/src/build \
|
||||
&& git clone -b ${GIT_BRANCH} https://github.com/i2p/i2p.i2p.git \
|
||||
&& cd /usr/src/build/i2p.i2p \
|
||||
&& echo "noExe=true" >> build.properties \
|
||||
&& ant installer-linux \
|
||||
&& cp i2pinstall*.jar /tmp/i2pinstall.jar \
|
||||
&& mkdir -p /opt \
|
||||
&& chown i2p:root /opt \
|
||||
&& chmod u+rw /opt \
|
||||
&& gosu i2p expect -f /tmp/Docker.expt \
|
||||
&& cd ${I2P_PREFIX} \
|
||||
&& rm -fr man docs *.bat *.command *.app /tmp/i2pinstall.jar /tmp/Docker.expt \
|
||||
&& rm -fr /usr/src/build \
|
||||
&& apk --purge del build-base apache-ant expect tcl expat git openjdk8 openjdk8-jre openjdk8-jre-base openjdk8-jre-lib bzip2 tar \
|
||||
binutils-libs binutils pkgconfig libcurl libc-dev musl-dev g++ make fortify-headers pkgconf giflib libssh2 libxdmcp libxcb \
|
||||
libx11 pcre alsa-lib libxi libxrender libxml2 readline bash openssl \
|
||||
&& rm -fr /usr/lib/jvm/default-jre \
|
||||
&& ln -sf /opt/jdk/jre /usr/lib/jvm/default-jre \
|
||||
&& chmod a+x /entrypoint.sh
|
||||
|
||||
|
||||
|
||||
EXPOSE 7654 7656 7657 7658 4444 6668 8998 7659 7660 4445 15000-20000
|
||||
|
||||
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||
|
@@ -11,11 +11,11 @@ you may use:
|
||||
lynx http://localhost:7657/
|
||||
to configure the router.
|
||||
|
||||
If you're having trouble, swing by http://forum.i2p/, check the
|
||||
If you're having trouble, check the
|
||||
website at https://geti2p.net/, or get on irc://irc.freenode.net/#i2p
|
||||
|
||||
I2P will create and store files and configuration data in the user directory
|
||||
~/.i2p/ on Linux and %APPDATA%\I2P\ on Windows. This directory is created
|
||||
~/.i2p/ on Linux and %LOCALAPPDATA%\I2P\ on Windows. This directory is created
|
||||
when I2P is run for the first time. It also creates files in the system
|
||||
temporary directory specified by the Java Virtual Machine.
|
||||
To change the location of these directories, or to configure I2P to
|
||||
@@ -40,7 +40,7 @@ To uninstall I2P:
|
||||
rm -rf $I2PInstallDir ~/.i2p
|
||||
|
||||
Supported JVMs:
|
||||
All platforms: Java 1.7 or higher required
|
||||
All platforms: Java 1.8 or higher required
|
||||
Windows: OpenJDK or Oracle from http://java.com/download
|
||||
Linux: OpenJDK or Oracle from http://java.com/download
|
||||
FreeBSD: OpenJDK or Oracle from http://java.com/download
|
||||
|
@@ -1,10 +1,10 @@
|
||||
I2P source installation instructions
|
||||
|
||||
Prerequisites to build from source:
|
||||
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||
Java SDK (preferably Oracle or OpenJDK) 8 or higher
|
||||
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||
Apache Ant 1.7.0 or higher
|
||||
Apache Ant 1.9.8 or higher
|
||||
The xgettext, msgfmt, and msgmerge tools installed
|
||||
from the GNU gettext package http://www.gnu.org/software/gettext/
|
||||
Build environment must use a UTF-8 locale.
|
||||
|
192
LICENSE.txt
192
LICENSE.txt
@@ -29,17 +29,13 @@ POSSIBILITY OF SUCH DAMAGES.
|
||||
LICENSES
|
||||
--------
|
||||
|
||||
Core (i2p.jar):
|
||||
Core API (i2p.jar):
|
||||
Public domain except as listed below:
|
||||
|
||||
ElGamal and DSA code:
|
||||
Copyright (c) 2003, TheCrypto
|
||||
See licenses/LICENSE-ElGamalDSA.txt
|
||||
|
||||
SHA256 and HMAC:
|
||||
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
|
||||
ElGamal:
|
||||
Copyright (c) 2000 - 2013 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
@@ -58,13 +54,14 @@ Public domain except as listed below:
|
||||
|
||||
PRNG:
|
||||
Copyright (C) 2001, 2002, Free Software Foundation, Inc.
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
See licenses/LICENSE-LGPLv2.1.txt or /usr/share/common-licenses/LGPL-2.1
|
||||
|
||||
HashCash code:
|
||||
Copyright 2006 Gregory Rubin grrubin@gmail.com
|
||||
See licenses/LICENSE-HashCash.txt
|
||||
|
||||
GettextResource from gettext v0.18:
|
||||
GettextResource from gettext v0.19.8:
|
||||
(not included in most distribution packages)
|
||||
Copyright (C) 2001, 2007 Free Software Foundation, Inc.
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
@@ -72,22 +69,31 @@ Public domain except as listed below:
|
||||
Contains some code Copyright 2006 Sun Microsystems, Inc.
|
||||
See licenses/LICENSE-InstallCert.txt
|
||||
|
||||
BlockFile:
|
||||
Copyright (c) 2006, Matthew Estes
|
||||
See licenses/LICENSE-BlockFile.txt
|
||||
|
||||
SipHashInline:
|
||||
Copyright 2012 Hiroshi Nakamura <nahi@ruby-lang.org>
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Getopt:
|
||||
(not included in most distribution packages)
|
||||
Copyright (c) 1998 by Aaron M. Renn (arenn@urbanophile.com)
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
EdDSA-Java:
|
||||
See licenses/LICENSE-CC0-1.0-Universal.txt
|
||||
|
||||
HostnameVerifier:
|
||||
From Apache HttpClient 4.4.1 and HttpCore 4.4.1
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
json-simple 2.3.0
|
||||
(not included in most distribution packages)
|
||||
Copyright 2016 Clifton Labs
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Noise library:
|
||||
Copyright (C) 2016 Southern Storm Software, Pty Ltd.
|
||||
See licenses/LICENSE-Noise.txt
|
||||
|
||||
|
||||
Router (router.jar):
|
||||
Public domain except as listed below:
|
||||
@@ -99,15 +105,30 @@ Public domain except as listed below:
|
||||
Copyright (C) 2003-2010 Satoshi Konno
|
||||
See licenses/LICENSE-UPnP.txt
|
||||
|
||||
GeoIP: GeoLite databases are licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
|
||||
|
||||
GeoIP API 1.3.1:
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
GeoIP2-java 2.12.0:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Maxmind-DB-Reader-java 1.2.2:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Noise library:
|
||||
Copyright (C) 2016 Southern Storm Software, Pty Ltd.
|
||||
See licenses/LICENSE-Noise.txt
|
||||
|
||||
SparseArray:
|
||||
Copyright (C) 2006 The Android Open Source Project
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
SSU HMAC:
|
||||
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
||||
See licenses/LICENSE-SHA256.txt
|
||||
|
||||
|
||||
Installer:
|
||||
(not included in distribution packages)
|
||||
Launch4j 3.0.1:
|
||||
(Launch4j is only included in the upstream source package and Windows binaries.
|
||||
Not applicable for non-Windows binaries or Debian/Launchpad packages.)
|
||||
@@ -123,7 +144,7 @@ Installer:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/NOTICE-Commons-Logging.txt
|
||||
|
||||
XStream (http://xstream.codehaus.org/)
|
||||
XStream (http://xstream.github.io/)
|
||||
Copyright (c) 2003-2004, Joe Walnes
|
||||
See licenses/LICENSE-XStream.txt
|
||||
|
||||
@@ -149,57 +170,84 @@ Installer:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
|
||||
GeoIP Data:
|
||||
(not included in most distribution packages)
|
||||
IP Geolocation by DB-IP https://db-ip.com/
|
||||
See https://creativecommons.org/licenses/by/4.0/
|
||||
|
||||
Java Service Wrapper Community Edition 32-bit 3.5.25:
|
||||
Copyright (C) 1999-2011 Tanuki Software, Ltd. All Rights Reserved.
|
||||
Launchers:
|
||||
(not included in distribution packages)
|
||||
Copyright (c) 2002-2018 EPFL, Lausanne / Lightbend, Inc. , unless otherwise specified.
|
||||
See licenses/LICENSE-Scala.md
|
||||
|
||||
Java Service Wrapper Community Edition 3.5.44:
|
||||
(Windows: 3.5.25)
|
||||
(not included in most distribution packages)
|
||||
Copyright (C) 1999-2020 Tanuki Software, Ltd. All Rights Reserved.
|
||||
See licenses/LICENSE-Wrapper.txt
|
||||
|
||||
|
||||
Jbigi Libraries (jbigi.jar):
|
||||
JNI code public domain.
|
||||
JNI code: public domain.
|
||||
|
||||
GMP 4.3.2 / 5.0.2:
|
||||
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
|
||||
See licenses/LICENSE-LGPLv3.txt
|
||||
GMP 6.0.0 / 6.1.2 / 6.2.0:
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
|
||||
Applications:
|
||||
|
||||
Addressbook:
|
||||
Addressbook (addressbook.jar):
|
||||
Copyright (c) 2004 Ragnarok
|
||||
See licenses/LICENSE-Addressbook.txt
|
||||
BlockFile:
|
||||
Copyright (c) 2006, Matthew Estes
|
||||
See licenses/LICENSE-BlockFile.txt
|
||||
|
||||
BOB:
|
||||
BOB (BOB.jar):
|
||||
Copyright (C) sponge
|
||||
See licenses/COPYING-BOB.txt
|
||||
|
||||
Desktopgui
|
||||
Desktopgui (desktopgui.jar):
|
||||
Copyright (c) Mathias De Maré
|
||||
See licenses/LICENSE-DesktopGUI.txt
|
||||
|
||||
I2PSnark:
|
||||
Glassfish Standard Tag Library (JSTL) 1.2 (commons-el.jar):
|
||||
(not included in most distribution packages)
|
||||
Common Development and Distribution License (CDDL) version 1.0 + GNU General Public License (GPL) version 2
|
||||
See https://glassfish.dev.java.net/public/CDDL+GPL.html
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
I2PControl
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
Includes jBCrypt:
|
||||
Copyright (c) 2006 Damien Miller <djm@mindrot.org>
|
||||
See licenses/LICENSE-jBCrypt.txt
|
||||
Includes jsonrpc2 1.38.1 (base) 1.11 (server)
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
I2PSnark (i2psnark.jar, i2psnark.war):
|
||||
Copyright (C) 2003 Mark J. Wielaard
|
||||
GPLv2 (or any later version)
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
Silk icons: See licenses/LICENSE-SilkIcons.txt
|
||||
|
||||
I2PTunnel:
|
||||
I2PTunnel (i2ptunnel.jar, i2ptunnel.war):
|
||||
(c) 2003 - 2004 mihi
|
||||
GPLv2 (or any later version) with exception.
|
||||
See licenses/LICENSE-I2PTunnel.txt
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
I2PTunnel SOCKS Proxy:
|
||||
Copyright (c) 2004 by human
|
||||
GPLv2 (or any later version) with exception.
|
||||
See licenses/LICENSE-I2PTunnel.txt
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
I2PTunnel UDP and Streamr (i2ptunnel.jar):
|
||||
By welterde.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
I2PTunnel SOCKS Proxy:
|
||||
Copyright (c) 2004 by human
|
||||
GPLv2 (or any later version) with exception.
|
||||
See licenses/LICENSE-I2PTunnel.txt
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
I2PTunnel UDP and Streamr:
|
||||
By welterde.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
Imagegen:
|
||||
Imagegen (imagegen.war):
|
||||
Identicon:
|
||||
Copyright (c) 2007-2014 Don Park <donpark@docuverse.com>
|
||||
See licenses/LICENSE-Identicon.txt
|
||||
@@ -207,77 +255,87 @@ Applications:
|
||||
Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||
Copyright (c) 2008 Alexander von Gernler. All rights reserved.
|
||||
See licenses/LICENSE-BSD.txt
|
||||
Zxing:
|
||||
Zxing 3.4.1:
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
Jetty 8.1.17.v20150415:
|
||||
Jetty 9.3.29.v20201019 (jetty-*.jar, org.mortbay.*.jar):
|
||||
(not included in most distribution packages, except for jetty-i2p.jar)
|
||||
See licenses/ABOUT-Jetty.html
|
||||
See licenses/NOTICE-Jetty.html
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/LICENSE-ECLIPSE-1.0.html
|
||||
See licenses/NOTICE-Commons-Logging.txt
|
||||
|
||||
JRobin 1.5.9.1:
|
||||
RRD4J 3.6 (jrobin.jar):
|
||||
Copyright (c) 2001-2005 Sasa Markovic and Ciaran Treanor.
|
||||
Copyright (c) 2011 The OpenNMS Group, Inc.
|
||||
Copyright 2011 The RRD4J Authors.
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
Ministreaming Lib:
|
||||
Ministreaming Lib (mstreaming.jar):
|
||||
By mihi.
|
||||
See licenses/LICENSE-BSD.txt
|
||||
|
||||
Proxyscript:
|
||||
Proxyscript (i2pProxy.pac):
|
||||
(not included in distribution packages)
|
||||
By Cervantes.
|
||||
Public domain.
|
||||
|
||||
Router console:
|
||||
Router console (routerconsole.jar, routerconsole.war):
|
||||
Public domain.
|
||||
|
||||
Router Console themes:
|
||||
Flag icons:
|
||||
- Jersey and EU flag icons: public domain, courtesy Xrmap flag
|
||||
collection http://www.arvernes.com/wiki/index.php/Xrmap
|
||||
- Guernsey and Isle of Man flags from the Open Clip Art Library, released into the public domain
|
||||
- Curaçao, courtesy of David Benbennick, released into the public domain
|
||||
- All other flag icons: public domain, courtesy mjames@gmail.com http://www.famfamfam.com/
|
||||
Silk icons: See licenses/LICENSE-SilkIcons.txt
|
||||
FatCow icons: See licenses/LICENSE-FatCowIcons.txt
|
||||
Fugue Icons: See licenses/LICENSE-FugueIcons.txt
|
||||
Feather icons: Copyright (c) 2013-2017 Cole Bemis; see licenses/LICENSE-Feather.txt
|
||||
Fontawesome icons: Copyright (c) 2018 @fontawesome(company) see licenses/LICENSE-fontawesome.txt
|
||||
|
||||
GeoIP Data:
|
||||
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
|
||||
See licenses/LICENSE-GeoIP.txt
|
||||
Router Console unthemed, light, and dark theme logos:
|
||||
Copyright (c) 2019 The Invisible Internet Project. All rights reserved.
|
||||
Creative Commons Attribution-ShareAlike 4.0 International License
|
||||
See https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
Router Console and I2PSnark themes:
|
||||
"Man with hat over face" & related images licensed under a Creative Commons 2.0 license.
|
||||
Original photos by Florian Kuhlmann. http://www.flickr.com/photos/floriankuhlmann/3117758155
|
||||
Some images licensed under a Creative Commons 2.0 license.
|
||||
Silk icons: See licenses/LICENSE-SilkIcons.txt
|
||||
|
||||
I2PSnark light theme:
|
||||
"Creative Commons Cat" licensed under a Creative Commons Attribution 3.0 Unported License.
|
||||
Original photo by Boaz Arad. http://www.luxphile.com/2011/01/creative-commons-cat.html
|
||||
Router Console M-Lab subsystem:
|
||||
Copyright 2010 Vuze, Inc. All rights reserved.
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
SAM:
|
||||
Router Console NDT subsystem:
|
||||
Copyright (c) 2003 University of Chicago. All rights reserved.
|
||||
See licenses/LICENSE-NDT.txt
|
||||
Notice: I2P has changed specified portions of the Software, including the package edu.internet2.ndt.
|
||||
|
||||
SAM (sam.jar):
|
||||
Public domain.
|
||||
|
||||
Streaming Lib:
|
||||
Streaming Lib (streaming.jar):
|
||||
Public domain.
|
||||
|
||||
SusiDNS:
|
||||
SusiDNS (susidns.war):
|
||||
Copyright (C) 2005 <susi23@mail.i2p>
|
||||
GPLv2 (or any later version)
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
Uses Glassfish Standard Tag Library (JSTL) 1.2:
|
||||
Common Development and Distribution License (CDDL) version 1.0 + GNU General Public License (GPL) version 2
|
||||
See https://glassfish.dev.java.net/public/CDDL+GPL.html
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
SusiMail:
|
||||
SusiMail (susimail.war):
|
||||
Copyright (C) 2004-2005 <susi23@mail.i2p>
|
||||
GPLv2 (or any later version)
|
||||
See licenses/LICENSE-GPLv2.txt
|
||||
|
||||
Systray:
|
||||
Systray (systray.jar):
|
||||
Public domain.
|
||||
Bundles systray4j-2.4.1:
|
||||
See licenses/LICENSE-LGPLv2.1.txt
|
||||
|
||||
Tomcat 6.0.44:
|
||||
Copyright 1999-2015 The Apache Software Foundation
|
||||
Tomcat 9.0.40 (jasper-runtime.jar):
|
||||
(not included in most distribution packages)
|
||||
Copyright 1999-2020 The Apache Software Foundation
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
See licenses/NOTICE-Tomcat.txt
|
||||
|
||||
@@ -295,6 +353,10 @@ distributions. See the source package for the additional license information.
|
||||
Copyright (C) sponge
|
||||
DWTFYWTPL
|
||||
|
||||
Gradle wrapper:
|
||||
Copyright (c) 2017 the original author or authors.
|
||||
See licenses/LICENSE-Apache2.0.txt
|
||||
|
||||
SAM C Library:
|
||||
Copyright (c) 2004, Matthew P. Cashdollar <mpc@innographx.com>
|
||||
See apps/sam/c/doc/license.txt
|
||||
|
80
README.md
Normal file
80
README.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# I2P
|
||||
|
||||
This is the source code for the reference Java implementation of I2P.
|
||||
|
||||
Latest release: [https://geti2p.net/download](https://geti2p.net/download)
|
||||
|
||||
## Installing
|
||||
|
||||
See [INSTALL.txt](INSTALL.txt) or [https://geti2p.net/download](https://geti2p.net/download) for installation instructions.
|
||||
|
||||
## Documentation
|
||||
|
||||
[https://geti2p.net/how](https://geti2p.net/how)
|
||||
|
||||
FAQ: [https://geti2p.net/faq](https://geti2p.net/faq)
|
||||
|
||||
API: [http://docs.i2p-projekt.de/javadoc/](http://docs.i2p-projekt.de/javadoc/)
|
||||
or run 'ant javadoc' then start at build/javadoc/index.html
|
||||
|
||||
## How to contribute / Hack on I2P
|
||||
|
||||
Please check out [HACKING.md](docs/HACKING.md) and other documents in the docs directory.
|
||||
|
||||
## Building packages from source
|
||||
|
||||
To get development branch from source control: [https://geti2p.net/newdevelopers](https://geti2p.net/newdevelopers)
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Java SDK (preferably Oracle or OpenJDK) 8 or higher
|
||||
- Non-linux operating systems and JVMs: See [https://trac.i2p2.de/wiki/java](https://trac.i2p2.de/wiki/java)
|
||||
- Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel)
|
||||
require only Java 6
|
||||
- Apache Ant 1.9.8 or higher
|
||||
- The xgettext, msgfmt, and msgmerge tools installed from the GNU gettext package
|
||||
[http://www.gnu.org/software/gettext/](http://www.gnu.org/software/gettext/)
|
||||
- Build environment must use a UTF-8 locale.
|
||||
|
||||
### Ant build process
|
||||
|
||||
On x86 systems do:
|
||||
|
||||
ant pkg
|
||||
|
||||
On non-x86, use one of the following instead:
|
||||
|
||||
ant installer-linux
|
||||
ant installer-freebsd
|
||||
ant installer-osx
|
||||
|
||||
Run 'ant' with no arguments to see other build options.
|
||||
|
||||
### Gradle build process
|
||||
|
||||
Full builds of installers or updates are not yet possible, but the code can be
|
||||
compiled with:
|
||||
|
||||
./gradlew assemble
|
||||
|
||||
This will download dependencies over the clearnet by default, including Gradle
|
||||
itself. To download through a SOCKS proxy (e.g. Tor), add the following lines to
|
||||
your `~/.gradle/gradle.properties`:
|
||||
|
||||
systemProp.socksProxyHost=localhost
|
||||
systemProp.socksProxyPort=9150
|
||||
|
||||
## Contact info
|
||||
|
||||
Need help? See the IRC channel #i2p on irc.freenode.net
|
||||
|
||||
Bug reports: [https://trac.i2p2.de/report/1](https://trac.i2p2.de/report/1)
|
||||
|
||||
Contact information, security issues, press inquiries: [https://geti2p.net/en/contact](https://geti2p.net/en/contact)
|
||||
|
||||
Twitter: [@i2p](https://twitter.com/i2p), [@geti2p](https://twitter.com/GetI2P)
|
||||
|
||||
## Licenses
|
||||
|
||||
See [LICENSE.txt](LICENSE.txt)
|
||||
|
17
README.txt
17
README.txt
@@ -1,8 +1,8 @@
|
||||
Prerequisites to build from source:
|
||||
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||
Java SDK (preferably Oracle or OpenJDK) 8 or higher
|
||||
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||
Apache Ant 1.7.0 or higher
|
||||
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 6
|
||||
Apache Ant 1.9.8 or higher
|
||||
The xgettext, msgfmt, and msgmerge tools installed
|
||||
from the GNU gettext package http://www.gnu.org/software/gettext/
|
||||
Build environment must use a UTF-8 locale.
|
||||
@@ -19,6 +19,16 @@ To build:
|
||||
Run 'ant' with no arguments to see other build options.
|
||||
See INSTALL.txt or https://geti2p.net/download for installation instructions.
|
||||
|
||||
Gradle build system:
|
||||
Full builds are not yet possible, but the command is:
|
||||
./gradlew assemble
|
||||
|
||||
gradlew will download dependencies over the clearnet by default, including
|
||||
Gradle itself. To download over Tor, create a gradle.properties file
|
||||
containing:
|
||||
systemProp.socksProxyHost=localhost
|
||||
systemProp.socksProxyPort=9150
|
||||
|
||||
Documentation:
|
||||
https://geti2p.net/how
|
||||
API: http://docs.i2p-projekt.de/javadoc/
|
||||
@@ -35,7 +45,6 @@ FAQ:
|
||||
|
||||
Need help?
|
||||
IRC irc.freenode.net #i2p
|
||||
http://forum.i2p/
|
||||
|
||||
Bug reports:
|
||||
https://trac.i2p2.de/report/1
|
||||
|
@@ -49,7 +49,7 @@ config /etc/rc.d/rc.i2p.new
|
||||
config $INST_DIR/wrapper.config.new
|
||||
|
||||
if [ -e /var/log/packages/i2p-base* ]; then
|
||||
echo "Warning: This package supercedes the 'i2p-base' package." >&2
|
||||
echo "Warning: This package supersedes the 'i2p-base' package." >&2
|
||||
echo
|
||||
echo "You may want to 'removepkg i2p-base'" >&2
|
||||
echo "and check the contents of /etc/rc.d/rc.local*" >&2
|
||||
|
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/ministreaming"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>BOB</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
12
apps/BOB/build.gradle
Normal file
12
apps/BOB/build.gradle
Normal file
@@ -0,0 +1,12 @@
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
compile project(':apps:ministreaming')
|
||||
}
|
@@ -39,8 +39,9 @@ is divided into following sections:
|
||||
<property file="${user.properties.file}"/>
|
||||
<!-- The two properties below are usually overridden -->
|
||||
<!-- by the active platform. Just a fallback. -->
|
||||
<property name="default.javac.source" value="1.4"/>
|
||||
<property name="default.javac.target" value="1.4"/>
|
||||
<property name="default.javac.source" value="1.8"/>
|
||||
<property name="default.javac.target" value="1.8"/>
|
||||
<property name="javac.release" value="8"/>
|
||||
</target>
|
||||
<target depends="-pre-init,-init-private,-init-user" name="-init-project">
|
||||
<property file="nbproject/configs/${config}.properties"/>
|
||||
@@ -155,7 +156,7 @@ is divided into following sections:
|
||||
<attribute default="/does/not/exist" name="sourcepath"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}">
|
||||
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" release="${javac.release}">
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
|
@@ -29,27 +29,19 @@ endorsed.classpath=
|
||||
excludes=**/*.html,**/*.txt
|
||||
file.reference.build-javadoc=../../i2p.i2p/build/javadoc
|
||||
file.reference.i2p.jar=../../core/java/build/i2p.jar
|
||||
file.reference.i2ptunnel.jar=../i2ptunnel/java/build/i2ptunnel.jar
|
||||
file.reference.jbigi.jar=../../build/jbigi.jar
|
||||
file.reference.mstreaming.jar=../ministreaming/java/build/mstreaming.jar
|
||||
file.reference.router.jar=../../router/java/build/router.jar
|
||||
file.reference.streaming.jar=../streaming/java/build/streaming.jar
|
||||
file.reference.wrapper.jar=../../installer/lib/wrapper/all/wrapper.jar
|
||||
includes=**
|
||||
jar.compress=true
|
||||
javac.classpath=\
|
||||
${file.reference.router.jar}:\
|
||||
${file.reference.i2ptunnel.jar}:\
|
||||
${file.reference.mstreaming.jar}:\
|
||||
${file.reference.streaming.jar}:\
|
||||
${file.reference.wrapper.jar}:\
|
||||
${file.reference.i2p.jar}:\
|
||||
${file.reference.router.jar}
|
||||
${file.reference.i2p.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.source=1.5
|
||||
javac.target=1.5
|
||||
javac.version=1.8
|
||||
javac.source=${javac.version}
|
||||
javac.target=${javac.version}
|
||||
javac.release=8
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}:\
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>BOB</name>
|
||||
<minimum-ant-version>1.6.5</minimum-ant-version>
|
||||
<minimum-ant-version>1.9.8</minimum-ant-version>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
</source-roots>
|
||||
|
@@ -38,6 +38,8 @@ import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.*;
|
||||
import net.i2p.client.I2PClient;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.PortMapper;
|
||||
import net.i2p.util.SimpleTimer2;
|
||||
|
||||
/**
|
||||
@@ -110,7 +112,9 @@ import net.i2p.util.SimpleTimer2;
|
||||
* BOB, main command socket listener, launches the command parser engine.
|
||||
*
|
||||
* @author sponge
|
||||
* @deprecated Please port applications to SAMv3
|
||||
*/
|
||||
@Deprecated
|
||||
public class BOB implements Runnable, ClientApp {
|
||||
|
||||
public final static String PROP_CONFIG_LOCATION = "BOB.config";
|
||||
@@ -131,6 +135,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
// no longer used.
|
||||
// private static int maxConnections = 0;
|
||||
|
||||
private final I2PAppContext _context;
|
||||
private final Logger _log;
|
||||
private final ClientAppManager _mgr;
|
||||
private final String[] _args;
|
||||
@@ -138,6 +143,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
|
||||
private volatile ServerSocket listener;
|
||||
private volatile Thread _runner;
|
||||
private volatile boolean _warned;
|
||||
|
||||
/**
|
||||
* Stop BOB gracefully
|
||||
@@ -155,17 +161,17 @@ public class BOB implements Runnable, ClientApp {
|
||||
*
|
||||
* @param mgr may be null
|
||||
* @param args non-null
|
||||
* @throws Exception on bad args
|
||||
* @since 0.9.10
|
||||
*/
|
||||
public BOB(I2PAppContext context, ClientAppManager mgr, String[] args) {
|
||||
_context = context;
|
||||
// If we were run from command line, log to stdout
|
||||
boolean logToStdout = false;
|
||||
URL classResource = BOB.class.getResource("BOB.class");
|
||||
if (classResource != null) {
|
||||
String classPath = classResource.toString();
|
||||
if (classPath.startsWith("jar")) {
|
||||
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
|
||||
String manifestPath = classPath.substring(0, classPath.lastIndexOf('!') + 1) +
|
||||
"/META-INF/MANIFEST.MF";
|
||||
try {
|
||||
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
|
||||
@@ -219,7 +225,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
{
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
cfg = new File(_context.getConfigDir(), configLocation);
|
||||
}
|
||||
FileInputStream fi = null;
|
||||
try {
|
||||
@@ -240,7 +246,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, Integer.toString(I2PClient.DEFAULT_LISTEN_PORT));
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_PORT)) {
|
||||
@@ -276,7 +282,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
if (save) {
|
||||
File cfg = new File(configLocation);
|
||||
if (!cfg.isAbsolute()) {
|
||||
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
|
||||
cfg = new File(_context.getConfigDir(), configLocation);
|
||||
}
|
||||
FileOutputStream fo = null;
|
||||
try {
|
||||
@@ -317,6 +323,8 @@ public class BOB implements Runnable, ClientApp {
|
||||
_log.info("BOB is now running.");
|
||||
if (_mgr != null)
|
||||
_mgr.register(this);
|
||||
_context.portMapper().register(PortMapper.SVC_BOB, props.getProperty(PROP_BOB_HOST),
|
||||
Integer.parseInt(props.getProperty(PROP_BOB_PORT)));
|
||||
|
||||
int i = 0;
|
||||
boolean g = false;
|
||||
@@ -338,6 +346,12 @@ public class BOB implements Runnable, ClientApp {
|
||||
}
|
||||
|
||||
if (g) {
|
||||
if (!_warned) {
|
||||
_warned = true;
|
||||
String s = "BOB is deprecated. Please port applications to SAMv3.";
|
||||
_context.logManager().getLog(BOB.class).logAlways(Log.WARN, s);
|
||||
_log.warn(s);
|
||||
}
|
||||
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
|
||||
Thread t = new I2PAppThread(conn_c);
|
||||
t.setName("BOB.DoCMDS " + i);
|
||||
@@ -354,6 +368,7 @@ public class BOB implements Runnable, ClientApp {
|
||||
changeState(STOPPING, e);
|
||||
} finally {
|
||||
_log.info("BOB is now shutting down...");
|
||||
_context.portMapper().unregister(PortMapper.SVC_BOB);
|
||||
// Clean up everything.
|
||||
try {
|
||||
listener.close();
|
||||
@@ -364,25 +379,30 @@ public class BOB implements Runnable, ClientApp {
|
||||
// We could order them to stop, but that could cause nasty issues in the locks.
|
||||
visitAllThreads();
|
||||
database.getReadLock();
|
||||
int all = database.getcount();
|
||||
database.releaseReadLock();
|
||||
NamedDB nickinfo;
|
||||
for (i = 0; i < all; i++) {
|
||||
database.getReadLock();
|
||||
nickinfo = (NamedDB) database.getnext(i);
|
||||
nickinfo.getReadLock();
|
||||
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
|
||||
nickinfo.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
database.getWriteLock();
|
||||
nickinfo.getWriteLock();
|
||||
nickinfo.add(P_STOPPING, Boolean.valueOf(true));
|
||||
nickinfo.releaseWriteLock();
|
||||
database.releaseWriteLock();
|
||||
} else {
|
||||
nickinfo.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
try {
|
||||
for (Object ndb : database.values()) {
|
||||
nickinfo = (NamedDB) ndb;
|
||||
nickinfo.getReadLock();
|
||||
boolean released = false;
|
||||
try {
|
||||
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
|
||||
nickinfo.releaseReadLock();
|
||||
released = true;
|
||||
nickinfo.getWriteLock();
|
||||
try {
|
||||
nickinfo.add(P_STOPPING, Boolean.TRUE);
|
||||
} finally {
|
||||
nickinfo.releaseWriteLock();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (!released)
|
||||
nickinfo.releaseReadLock();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
database.releaseReadLock();
|
||||
}
|
||||
changeState(STOPPED);
|
||||
_log.info("BOB is now stopped.");
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -25,16 +25,16 @@ import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
|
||||
/**
|
||||
* Process I2P->TCP
|
||||
* Process I2P->TCP
|
||||
*
|
||||
* @author sponge
|
||||
*/
|
||||
public class I2PtoTCP implements Runnable {
|
||||
|
||||
private I2PSocket I2P;
|
||||
private NamedDB info, database;
|
||||
private final NamedDB info, database;
|
||||
private Socket sock;
|
||||
private AtomicBoolean lives;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
@@ -56,8 +56,8 @@ public class I2PtoTCP implements Runnable {
|
||||
}
|
||||
|
||||
private void runlock() {
|
||||
database.releaseReadLock();
|
||||
info.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,23 +78,15 @@ public class I2PtoTCP implements Runnable {
|
||||
die:
|
||||
{
|
||||
try {
|
||||
try {
|
||||
rlock();
|
||||
} catch (Exception e) {
|
||||
break die;
|
||||
}
|
||||
rlock();
|
||||
try {
|
||||
host = info.get("OUTHOST").toString();
|
||||
port = Integer.parseInt(info.get("OUTPORT").toString());
|
||||
tell = info.get("QUIET").equals(Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
runlock();
|
||||
break die;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
runlock();
|
||||
} catch (Exception e) {
|
||||
break die;
|
||||
}
|
||||
sock = new Socket(host, port);
|
||||
sock.setKeepAlive(true);
|
||||
|
@@ -38,18 +38,18 @@ import net.i2p.util.Log;
|
||||
*/
|
||||
public class MUXlisten implements Runnable {
|
||||
|
||||
private NamedDB database, info;
|
||||
private Logger _log;
|
||||
private I2PSocketManager socketManager;
|
||||
private ByteArrayInputStream prikey;
|
||||
private final NamedDB database, info;
|
||||
private final Logger _log;
|
||||
private final I2PSocketManager socketManager;
|
||||
private final ByteArrayInputStream prikey;
|
||||
private ThreadGroup tg;
|
||||
private String N;
|
||||
private ServerSocket listener = null;
|
||||
private int backlog = 50; // should this be more? less?
|
||||
boolean go_out;
|
||||
boolean come_in;
|
||||
private AtomicBoolean lock;
|
||||
private AtomicBoolean lives;
|
||||
private final String N;
|
||||
private ServerSocket listener;
|
||||
private static final int backlog = 50; // should this be more? less?
|
||||
private final boolean go_out;
|
||||
private final boolean come_in;
|
||||
private final AtomicBoolean lock;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor Will fail if INPORT is occupied.
|
||||
@@ -61,51 +61,49 @@ public class MUXlisten implements Runnable {
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
|
||||
int port = 0;
|
||||
InetAddress host = null;
|
||||
this.lock = lock;
|
||||
this.tg = null;
|
||||
this.database = database;
|
||||
this.info = info;
|
||||
this._log = _log;
|
||||
lives = new AtomicBoolean(false);
|
||||
try {
|
||||
int port = 0;
|
||||
InetAddress host = null;
|
||||
this.lock = lock;
|
||||
this.tg = null;
|
||||
this.database = database;
|
||||
this.info = info;
|
||||
this._log = _log;
|
||||
lives = new AtomicBoolean(false);
|
||||
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(true));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
this.database.getReadLock();
|
||||
this.info.getReadLock();
|
||||
|
||||
N = this.info.get("NICKNAME").toString();
|
||||
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
|
||||
// Make a new copy so that anything else won't muck with our database.
|
||||
Properties R = (Properties) info.get("PROPERTIES");
|
||||
Properties Q = new Properties();
|
||||
Lifted.copyProperties(R, Q);
|
||||
this.database.releaseReadLock();
|
||||
this.info.releaseReadLock();
|
||||
|
||||
this.database.getReadLock();
|
||||
this.info.getReadLock();
|
||||
this.go_out = info.exists("OUTPORT");
|
||||
this.come_in = info.exists("INPORT");
|
||||
if (this.come_in) {
|
||||
port = Integer.parseInt(info.get("INPORT").toString());
|
||||
host = InetAddress.getByName(info.get("INHOST").toString());
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.TRUE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
Properties Q = new Properties();
|
||||
rlock();
|
||||
try {
|
||||
N = this.info.get("NICKNAME").toString();
|
||||
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
|
||||
// Make a new copy so that anything else won't muck with our database.
|
||||
Properties R = (Properties) info.get("PROPERTIES");
|
||||
Lifted.copyProperties(R, Q);
|
||||
|
||||
this.go_out = info.exists("OUTPORT");
|
||||
this.come_in = info.exists("INPORT");
|
||||
if (this.come_in) {
|
||||
port = Integer.parseInt(info.get("INPORT").toString());
|
||||
host = InetAddress.getByName(info.get("INHOST").toString());
|
||||
}
|
||||
} finally {
|
||||
runlock();
|
||||
}
|
||||
this.database.releaseReadLock();
|
||||
this.info.releaseReadLock();
|
||||
|
||||
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
|
||||
int i2cpPort = 7654;
|
||||
String i2cpPortStr = Q.getProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
try {
|
||||
i2cpPort = Integer.parseInt(i2cpPortStr);
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new IllegalArgumentException("Invalid I2CP port specified [" + i2cpPortStr + "]");
|
||||
int i2cpPort = I2PClient.DEFAULT_LISTEN_PORT;
|
||||
String i2cpPortStr = Q.getProperty(I2PClient.PROP_TCP_PORT);
|
||||
if (i2cpPortStr != null) {
|
||||
try {
|
||||
i2cpPort = Integer.parseInt(i2cpPortStr);
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new IllegalArgumentException("Invalid I2CP port specified [" + i2cpPortStr + "]");
|
||||
}
|
||||
}
|
||||
|
||||
if (this.come_in) {
|
||||
@@ -115,48 +113,51 @@ public class MUXlisten implements Runnable {
|
||||
prikey, i2cpHost, i2cpPort, Q);
|
||||
} catch (IOException e) {
|
||||
// Something went bad.
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
throw new IOException(e.toString());
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.FALSE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
throw e;
|
||||
} catch (RuntimeException e) {
|
||||
// Something went bad.
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
throw new RuntimeException(e);
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.FALSE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
// Something else went bad.
|
||||
this.database.getWriteLock();
|
||||
this.info.getWriteLock();
|
||||
this.info.add("STARTING", Boolean.valueOf(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
wlock();
|
||||
try {
|
||||
this.info.add("STARTING", Boolean.FALSE);
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void rlock() throws Exception {
|
||||
private void rlock() {
|
||||
database.getReadLock();
|
||||
info.getReadLock();
|
||||
}
|
||||
|
||||
private void runlock() throws Exception {
|
||||
database.releaseReadLock();
|
||||
private void runlock() {
|
||||
info.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
}
|
||||
|
||||
private void wlock() throws Exception {
|
||||
private void wlock() {
|
||||
database.getWriteLock();
|
||||
info.getWriteLock();
|
||||
}
|
||||
|
||||
private void wunlock() throws Exception {
|
||||
private void wunlock() {
|
||||
info.releaseWriteLock();
|
||||
database.releaseWriteLock();
|
||||
}
|
||||
@@ -170,24 +171,19 @@ public class MUXlisten implements Runnable {
|
||||
Thread t = null;
|
||||
Thread q = null;
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("RUNNING", Boolean.valueOf(true));
|
||||
info.add("RUNNING", Boolean.TRUE);
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
wunlock();
|
||||
return;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
wunlock();
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
return;
|
||||
}
|
||||
lives.set(true);
|
||||
lock.set(false);
|
||||
@@ -214,21 +210,17 @@ public class MUXlisten implements Runnable {
|
||||
q.start();
|
||||
}
|
||||
|
||||
wlock();
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("STARTING", Boolean.valueOf(false));
|
||||
info.add("STARTING", Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
wunlock();
|
||||
break quit;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
wunlock();
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
boolean spin = true;
|
||||
while (spin && lives.get()) {
|
||||
@@ -237,21 +229,17 @@ public class MUXlisten implements Runnable {
|
||||
} catch (InterruptedException e) {
|
||||
break quit;
|
||||
}
|
||||
rlock();
|
||||
try {
|
||||
rlock();
|
||||
try {
|
||||
spin = info.get("STOPPING").equals(Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
runlock();
|
||||
break quit;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
try {
|
||||
} finally {
|
||||
runlock();
|
||||
} catch (Exception e) {
|
||||
break quit;
|
||||
}
|
||||
}
|
||||
} // die
|
||||
@@ -271,16 +259,16 @@ public class MUXlisten implements Runnable {
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("STARTING", Boolean.valueOf(false));
|
||||
info.add("STOPPING", Boolean.valueOf(true));
|
||||
info.add("RUNNING", Boolean.valueOf(false));
|
||||
info.add("STARTING", Boolean.FALSE);
|
||||
info.add("STOPPING", Boolean.TRUE);
|
||||
info.add("RUNNING", Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
wunlock();
|
||||
return;
|
||||
}
|
||||
wunlock();
|
||||
} catch (Exception e) {
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
// Start cleanup.
|
||||
while (!lock.compareAndSet(false, true)) {
|
||||
@@ -322,15 +310,15 @@ public class MUXlisten implements Runnable {
|
||||
try {
|
||||
wlock();
|
||||
try {
|
||||
info.add("STARTING", Boolean.valueOf(false));
|
||||
info.add("STOPPING", Boolean.valueOf(false));
|
||||
info.add("RUNNING", Boolean.valueOf(false));
|
||||
info.add("STARTING", Boolean.FALSE);
|
||||
info.add("STOPPING", Boolean.FALSE);
|
||||
info.add("RUNNING", Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
lock.set(false);
|
||||
wunlock();
|
||||
return;
|
||||
}
|
||||
wunlock();
|
||||
} finally {
|
||||
wunlock();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
|
@@ -15,6 +15,12 @@
|
||||
*/
|
||||
package net.i2p.BOB;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
|
||||
|
||||
/**
|
||||
* Internal database to relate nicknames to options to values
|
||||
*
|
||||
@@ -22,129 +28,62 @@ package net.i2p.BOB;
|
||||
*/
|
||||
public class NamedDB {
|
||||
|
||||
private volatile Object[][] data;
|
||||
private int index, writersWaiting, readers;
|
||||
private final Map<String, Object> data;
|
||||
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(false);
|
||||
|
||||
/**
|
||||
* make initial NULL object
|
||||
*
|
||||
*/
|
||||
public NamedDB() {
|
||||
this.data = new Object[1][2];
|
||||
this.data = new HashMap<String, Object>();
|
||||
}
|
||||
|
||||
synchronized public void getReadLock() {
|
||||
while ((writersWaiting != 0)) {
|
||||
try {
|
||||
wait();
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
}
|
||||
readers++;
|
||||
public void getReadLock() {
|
||||
lock.readLock().lock();
|
||||
}
|
||||
|
||||
synchronized public void releaseReadLock() {
|
||||
readers--;
|
||||
notifyAll();
|
||||
public void releaseReadLock() {
|
||||
lock.readLock().unlock();
|
||||
}
|
||||
|
||||
synchronized public void getWriteLock() {
|
||||
writersWaiting++;
|
||||
while (readers != 0 && writersWaiting != 1) {
|
||||
try {
|
||||
wait();
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
}
|
||||
public void getWriteLock() {
|
||||
lock.writeLock().lock();
|
||||
}
|
||||
|
||||
synchronized public void releaseWriteLock() {
|
||||
writersWaiting--;
|
||||
notifyAll();
|
||||
public void releaseWriteLock() {
|
||||
lock.writeLock().unlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find objects in the array, returns its index or throws exception
|
||||
* @param key
|
||||
* @return an objects index
|
||||
* @throws ArrayIndexOutOfBoundsException when key does not exist
|
||||
*/
|
||||
public int idx(Object key) throws ArrayIndexOutOfBoundsException {
|
||||
for (int i = 0; i < index; i++) {
|
||||
if (key.equals(data[i][0])) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
throw new ArrayIndexOutOfBoundsException("Can't locate key for index");
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an object from array if it exists
|
||||
* Delete an object if it exists
|
||||
*
|
||||
* @param key
|
||||
*/
|
||||
public void kill(Object key) {
|
||||
|
||||
int i, j, k, l;
|
||||
Object[][] olddata;
|
||||
int didsomething = 0;
|
||||
|
||||
try {
|
||||
k = idx(key);
|
||||
} catch (ArrayIndexOutOfBoundsException b) {
|
||||
return;
|
||||
}
|
||||
olddata = new Object[index + 2][2];
|
||||
// copy to olddata, skipping 'k'
|
||||
for (i = 0, l = 0; l < index; i++, l++) {
|
||||
if (i == k) {
|
||||
l++;
|
||||
didsomething++;
|
||||
}
|
||||
for (j = 0; j < 2; j++) {
|
||||
olddata[i][j] = data[l][j];
|
||||
}
|
||||
}
|
||||
index -= didsomething;
|
||||
data = olddata;
|
||||
public void kill(String key) {
|
||||
data.remove(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add object to the array, deletes the old one if it exists
|
||||
* Add object, deletes the old one if it exists
|
||||
*
|
||||
* @param key
|
||||
* @param val
|
||||
*/
|
||||
public void add(Object key, Object val) {
|
||||
Object[][] olddata;
|
||||
int i, j;
|
||||
i = 0;
|
||||
kill(key);
|
||||
|
||||
olddata = new Object[index + 2][2];
|
||||
// copy to olddata
|
||||
for (i = 0; i < index; i++) {
|
||||
for (j = 0; j < 2; j++) {
|
||||
olddata[i][j] = data[i][j];
|
||||
}
|
||||
}
|
||||
data = olddata;
|
||||
data[index++] = new Object[]{key, val};
|
||||
public void add(String key, Object val) {
|
||||
data.put(key, val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the object, and return it, throws RuntimeException
|
||||
* Get the object, and return it, throws RuntimeException if not found
|
||||
*
|
||||
* @param key
|
||||
* @return Object
|
||||
* @throws java.lang.RuntimeException
|
||||
* @param key non-null
|
||||
* @return Object non-null
|
||||
* @throws java.lang.RuntimeException if not found
|
||||
*/
|
||||
public Object get(Object key) throws RuntimeException {
|
||||
for (int i = 0; i < index; i++) {
|
||||
if (key.equals(data[i][0])) {
|
||||
return data[i][1];
|
||||
}
|
||||
}
|
||||
public Object get(String key) throws RuntimeException {
|
||||
Object rv = data.get(key);
|
||||
if (rv != null)
|
||||
return rv;
|
||||
throw new RuntimeException("Key not found");
|
||||
}
|
||||
|
||||
@@ -154,33 +93,14 @@ public class NamedDB {
|
||||
* @param key
|
||||
* @return true if an object exists, else returns false
|
||||
*/
|
||||
public boolean exists(Object key) {
|
||||
for (int i = 0; i < index; i++) {
|
||||
if (key.equals(data[i][0])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
public boolean exists(String key) {
|
||||
return data.containsKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param i index
|
||||
* @return an indexed Object
|
||||
* @throws java.lang.RuntimeException
|
||||
* @since 0.9.29 replaces getcount() and getnext(int)
|
||||
*/
|
||||
public Object getnext(int i) throws RuntimeException {
|
||||
if (i < index && i > -1) {
|
||||
return data[i][1];
|
||||
}
|
||||
throw new RuntimeException("No more data");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the count of how many objects
|
||||
*/
|
||||
public int getcount() {
|
||||
return index;
|
||||
public Collection<Object> values() {
|
||||
return data.values();
|
||||
}
|
||||
}
|
||||
|
@@ -27,9 +27,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*/
|
||||
public class TCPio implements Runnable {
|
||||
|
||||
private InputStream Ain;
|
||||
private OutputStream Aout;
|
||||
private AtomicBoolean lives;
|
||||
private final InputStream Ain;
|
||||
private final OutputStream Aout;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@@ -35,29 +35,26 @@ import net.i2p.util.I2PAppThread;
|
||||
|
||||
/**
|
||||
*
|
||||
* Process TCP->I2P
|
||||
* Process TCP->I2P
|
||||
*
|
||||
* @author sponge
|
||||
*/
|
||||
public class TCPtoI2P implements Runnable {
|
||||
|
||||
private I2PSocket I2P;
|
||||
private NamedDB info, database;
|
||||
private Socket sock;
|
||||
private I2PSocketManager socketManager;
|
||||
private AtomicBoolean lives;
|
||||
private final Socket sock;
|
||||
private final I2PSocketManager socketManager;
|
||||
private final AtomicBoolean lives;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param i2p
|
||||
* @param socket
|
||||
* param info
|
||||
* param database
|
||||
* @param info unused
|
||||
* @param database unused
|
||||
*/
|
||||
TCPtoI2P(I2PSocketManager i2p, Socket socket, NamedDB info, NamedDB database, AtomicBoolean lives) {
|
||||
this.sock = socket;
|
||||
this.info = info;
|
||||
this.database = database;
|
||||
this.socketManager = i2p;
|
||||
this.lives = lives;
|
||||
}
|
||||
@@ -106,16 +103,6 @@ public class TCPtoI2P implements Runnable {
|
||||
out.flush();
|
||||
}
|
||||
|
||||
private void rlock() {
|
||||
database.getReadLock();
|
||||
info.getReadLock();
|
||||
}
|
||||
|
||||
private void runlock() {
|
||||
info.releaseReadLock();
|
||||
database.releaseReadLock();
|
||||
}
|
||||
|
||||
/**
|
||||
* TCP stream to I2P stream thread starter
|
||||
*
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<html>
|
||||
<body>
|
||||
<p>BOB, the Basic Open Bridge, allows TCP applications to talk over I2P.</p>
|
||||
<p>BOB, the Basic Open Bridge, allows TCP applications to talk over I2P - DEPRECATED - Please port applications to SAMv3.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="java/src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="/jetty/jettylib/javax.servlet.jar"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>addressbook</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@@ -1,43 +0,0 @@
|
||||
addressbook v2.0.2 - A simple name resolution mechanism for I2P
|
||||
|
||||
addressbook is a simple implementation of subscribable address books for I2P.
|
||||
Addresses are stored in userhosts.txt and a second copy of the address book is
|
||||
placed on your eepsite as hosts.txt.
|
||||
|
||||
subscriptions.txt contains a list of urls to check for new addresses.
|
||||
Since the urls are checked in order, and conflicting addresses are not added,
|
||||
addressbook.subscriptions can be considered to be ranked in order of trust.
|
||||
|
||||
The system created by addressbook is similar to the early days of DNS,
|
||||
when everyone ran a local name server. The major difference is the lack of
|
||||
authority. Name cannot be guaranteed to be globally unique, but in practise
|
||||
they probably will be, for a variety of social reasons.
|
||||
|
||||
Requirements
|
||||
************
|
||||
|
||||
i2p with a running http proxy
|
||||
|
||||
Installation and Usage
|
||||
**********************
|
||||
|
||||
1. Unzip addressbook-%ver.zip into your i2p directory.
|
||||
2. Restart your router.
|
||||
|
||||
The addressbook daemon will automatically run while the router is up.
|
||||
|
||||
Aside from the daemon itself, the other elements of the addressbook interface
|
||||
are the config.txt, myhosts.txt, and subscriptions.txt files found in the addressbook
|
||||
directory.
|
||||
|
||||
config.txt is the configuration file for addressbook.
|
||||
|
||||
myhosts.txt is the addressbook master address book. Addresses placed in this file
|
||||
take precidence over those in the router address book and in remote address books.
|
||||
If changes are made to this file, they will be reflected in the router address book
|
||||
and published address book after the next update. Do not make changes directly to the
|
||||
router address book, as they could be lost during an update.
|
||||
|
||||
subscriptions.txt is the subscription list for addressbook. Each entry is an absolute
|
||||
url to a file in hosts.txt format. Since the list is checked in order, url's should be
|
||||
listed in order of trust.
|
12
apps/addressbook/build.gradle
Normal file
12
apps/addressbook/build.gradle
Normal file
@@ -0,0 +1,12 @@
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java/src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
compile project(':apps:jetty')
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<project name="addressbook" default="war" basedir=".">
|
||||
<project name="addressbook" default="all" basedir=".">
|
||||
|
||||
<property name="src" value="java/src"/>
|
||||
<property name="build" value="build"/>
|
||||
@@ -7,7 +7,10 @@
|
||||
<property name="jar" value="addressbook.jar"/>
|
||||
<property name="war" value="addressbook.war"/>
|
||||
<property name="javac.compilerargs" value="" />
|
||||
<property name="javac.version" value="1.6" />
|
||||
<property name="javac.version" value="1.8" />
|
||||
<property name="javac.release" value="8" />
|
||||
|
||||
<target name="all" depends="jar, emptyWar"/>
|
||||
|
||||
<target name="init">
|
||||
<mkdir dir="${build}"/>
|
||||
@@ -36,24 +39,12 @@
|
||||
</depend>
|
||||
</target>
|
||||
|
||||
<target name="dependServlet" if="depend.available">
|
||||
<depend
|
||||
cache="../../build"
|
||||
srcdir="${src}"
|
||||
destdir="${build}" >
|
||||
<!-- Depend on classes instead of jars where available -->
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/obj" />
|
||||
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
|
||||
</classpath>
|
||||
</depend>
|
||||
</target>
|
||||
|
||||
<target name="compile" depends="init, depend">
|
||||
<target name="compile" depends="init, depend, warUpToDate">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
release="${javac.release}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}"
|
||||
excludes="net/i2p/addressbook/Servlet.java">
|
||||
encoding="UTF-8"
|
||||
srcdir="${src}" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
@@ -61,20 +52,6 @@
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<target name="compileServlet" depends="init, dependServlet, compile">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
includeAntRuntime="false"
|
||||
srcdir="${src}" destdir="${build}"
|
||||
includes="net/i2p/addressbook/Servlet.java">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- unused for now (except for Android), as we oddly ship addressbook as a .war -->
|
||||
<target name="jar" depends="compile, changes">
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.tr" value="" />
|
||||
@@ -86,30 +63,19 @@
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="war" depends="compileServlet, changes, warUpToDate" unless="war.uptodate">
|
||||
<mkdir dir="${dist}/tmp"/>
|
||||
<mkdir dir="${dist}/tmp/WEB-INF"/>
|
||||
<mkdir dir="${dist}/tmp/WEB-INF/classes"/>
|
||||
<copy todir="${dist}/tmp/WEB-INF/classes">
|
||||
<fileset dir="${build}"/>
|
||||
</copy>
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.tr" value="" />
|
||||
<war basedir="${dist}/tmp" webxml="web.xml" destfile="${dist}/${war}">
|
||||
<manifest>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
<attribute name="Built-By" value="${build.built-by}" />
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||
</manifest>
|
||||
</war>
|
||||
<delete dir="${dist}/tmp"/>
|
||||
</target>
|
||||
|
||||
<target name="emptyWar" depends="init">
|
||||
<jar destfile="${dist}/${war}" >
|
||||
<manifest>
|
||||
<attribute name="Note" value="Intentionally empty" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="warUpToDate">
|
||||
<uptodate property="war.uptodate" targetfile="${dist}/${war}">
|
||||
|
@@ -1,48 +0,0 @@
|
||||
# This is the configuration file for addressbook.
|
||||
#
|
||||
# Options
|
||||
# *******
|
||||
# All paths are realitive to i2p/addressbook. Default value for
|
||||
# each option is given in parentheses.
|
||||
#
|
||||
# proxy_host The hostname of your I2P http proxy.
|
||||
# (localhost)
|
||||
#
|
||||
# proxy_port The port of your I2P http proxy. (4444)
|
||||
#
|
||||
# master_addressbook The path to your master address book, used for local
|
||||
# changes only. (myhosts.txt)
|
||||
#
|
||||
# router_addressbook The path to the address book used by the router.
|
||||
# Contains the addresses from your master address book
|
||||
# and your subscribed address books. (../userhosts.txt)
|
||||
#
|
||||
# private_addressbook The path to the private address book used by the router.
|
||||
# This is used only by the router and SusiDNS.
|
||||
# It is not published by addressbook. (../privatehosts.txt)
|
||||
#
|
||||
# published_addressbook The path to the copy of your address book made
|
||||
# available on i2p. (../eepsite/docroot/hosts.txt)
|
||||
#
|
||||
# log The path to your addressbook log. (log.txt)
|
||||
#
|
||||
# subscriptions The path to your subscription file. (subscriptions.txt)
|
||||
#
|
||||
# etags The path to the etags header storage file. (etags)
|
||||
#
|
||||
# last_modified The path to the last-modified header storage file.
|
||||
# (last_modified)
|
||||
#
|
||||
# update_delay The time (in hours) between each update. (1)
|
||||
|
||||
proxy_host=localhost
|
||||
proxy_port=4444
|
||||
master_addressbook=myhosts.txt
|
||||
router_addressbook=../userhosts.txt
|
||||
private_addressbook=../privatehosts.txt
|
||||
published_addressbook=../eepsite/docroot/hosts.txt
|
||||
log=log.txt
|
||||
subscriptions=subscriptions.txt
|
||||
etags=etags
|
||||
last_modified=last_modified
|
||||
update_delay=1
|
@@ -133,8 +133,9 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
public AddressBook(Subscription subscription, String proxyHost, int proxyPort) {
|
||||
Map<String, HostTxtEntry> a = null;
|
||||
File subf = null;
|
||||
File tmp = null;
|
||||
try {
|
||||
File tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
|
||||
tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
|
||||
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true,
|
||||
proxyHost, proxyPort, 0, -1l, MAX_SUB_SIZE, tmp.getAbsolutePath(), null,
|
||||
subscription.getLocation(), true, subscription.getEtag(), subscription.getLastModified(), null);
|
||||
@@ -148,6 +149,8 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
tmp.delete();
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
if (tmp != null)
|
||||
tmp.delete();
|
||||
a = Collections.emptyMap();
|
||||
}
|
||||
this.addresses = a;
|
||||
@@ -306,7 +309,17 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
public void merge(AddressBook other, boolean overwrite, Log log) {
|
||||
if (this.addresses == null)
|
||||
throw new IllegalStateException();
|
||||
for (Iterator<Map.Entry<String, HostTxtEntry>> iter = other.iterator(); iter.hasNext(); ) {
|
||||
Iterator<Map.Entry<String, HostTxtEntry>> iter = other.iterator();
|
||||
try {
|
||||
merge2(other, iter, overwrite, log);
|
||||
} finally {
|
||||
if (iter instanceof HostTxtIterator)
|
||||
((HostTxtIterator) iter).close();
|
||||
}
|
||||
}
|
||||
|
||||
private void merge2(AddressBook other, Iterator<Map.Entry<String, HostTxtEntry>> iter, boolean overwrite, Log log) {
|
||||
while(iter.hasNext()) {
|
||||
Map.Entry<String, HostTxtEntry> entry = iter.next();
|
||||
String otherKey = entry.getKey();
|
||||
HostTxtEntry otherValue = entry.getValue();
|
||||
@@ -367,11 +380,6 @@ class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||
this.write(new File(this.location));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
delete();
|
||||
}
|
||||
|
||||
/****
|
||||
public static void main(String[] args) {
|
||||
String[] tests = { "foo.i2p",
|
||||
|
@@ -166,6 +166,10 @@ class ConfigParser {
|
||||
Map<String, String> result;
|
||||
try {
|
||||
result = parse(file);
|
||||
// migrate
|
||||
String local = result.remove("master_addressbook");
|
||||
if (local != null)
|
||||
result.put("local_addressbook", local);
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
if (!result.containsKey(entry.getKey()))
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
|
@@ -43,15 +43,16 @@ import net.i2p.util.SystemVersion;
|
||||
|
||||
/**
|
||||
* Main class of addressbook. Performs updates, and runs the main loop.
|
||||
* As of 0.9.30, package private, run with DaemonThread.
|
||||
*
|
||||
* @author Ragnarok
|
||||
*
|
||||
*/
|
||||
public class Daemon {
|
||||
class Daemon {
|
||||
public static final String VERSION = "2.0.4";
|
||||
private static final Daemon _instance = new Daemon();
|
||||
private volatile boolean _running;
|
||||
private static final boolean DEBUG = false;
|
||||
// If you change this, change in SusiDNS SubscriptionBean also
|
||||
private static final String DEFAULT_SUB = "http://i2p-projekt.i2p/hosts.txt";
|
||||
/** @since 0.9.12 */
|
||||
static final String OLD_DEFAULT_SUB = "http://www.i2p2.i2p/hosts.txt";
|
||||
@@ -66,8 +67,8 @@ public class Daemon {
|
||||
* Update the router and published address books using remote data from the
|
||||
* subscribed address books listed in subscriptions.
|
||||
*
|
||||
* @param master
|
||||
* The master AddressBook. This address book is never
|
||||
* @param local
|
||||
* The local AddressBook. This address book is never
|
||||
* overwritten, so it is safe for the user to write to.
|
||||
* It is only merged to the published addressbook.
|
||||
* May be null.
|
||||
@@ -86,7 +87,7 @@ public class Daemon {
|
||||
* The log to write changes and conflicts to.
|
||||
* May be null.
|
||||
*/
|
||||
public static void update(AddressBook master, AddressBook router,
|
||||
public static void update(AddressBook local, AddressBook router,
|
||||
File published, SubscriptionList subscriptions, Log log) {
|
||||
for (AddressBook book : subscriptions) {
|
||||
// yes, the EepGet fetch() is done in next()
|
||||
@@ -94,8 +95,8 @@ public class Daemon {
|
||||
}
|
||||
router.write();
|
||||
if (published != null) {
|
||||
if (master != null)
|
||||
router.merge(master, true, null);
|
||||
if (local != null)
|
||||
router.merge(local, true, null);
|
||||
router.write(published);
|
||||
}
|
||||
subscriptions.write();
|
||||
@@ -104,7 +105,7 @@ public class Daemon {
|
||||
/**
|
||||
* Update the router and published address books using remote data from the
|
||||
* subscribed address books listed in subscriptions.
|
||||
* Merging of the "master" addressbook is NOT supported.
|
||||
* Merging of the "local" addressbook is NOT supported.
|
||||
*
|
||||
* @param router
|
||||
* The NamingService to update, generally the root NamingService from the context.
|
||||
@@ -129,9 +130,22 @@ public class Daemon {
|
||||
// This also has the advantage of not flushing the NamingService's LRU cache.
|
||||
String nsClass = router.getClass().getSimpleName();
|
||||
boolean isTextFile = nsClass.equals("HostsTxtNamingService") || nsClass.equals("SingleFileNamingService");
|
||||
Set<String> knownNames = null;
|
||||
Set<String> knownNames;
|
||||
if (isTextFile) {
|
||||
// load the hostname set
|
||||
Properties opts = new Properties();
|
||||
opts.setProperty("file", "hosts.txt");
|
||||
knownNames = router.getNames(opts);
|
||||
} else {
|
||||
knownNames = null;
|
||||
}
|
||||
NamingService publishedNS;
|
||||
if (published != null) {
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
} else {
|
||||
publishedNS = null;
|
||||
}
|
||||
|
||||
NamingService publishedNS = null;
|
||||
Iterator<AddressBook> iter = subscriptions.iterator();
|
||||
while (iter.hasNext()) {
|
||||
// yes, the EepGet fetch() is done in next()
|
||||
@@ -141,26 +155,41 @@ public class Daemon {
|
||||
if (DEBUG && log != null && addressbook.getLocation() != null) {
|
||||
long end = System.currentTimeMillis();
|
||||
log.append("Fetch of " + addressbook.getLocation() + " took " + (end - start));
|
||||
start = end;
|
||||
}
|
||||
Iterator<Map.Entry<String, HostTxtEntry>> iter2 = addressbook.iterator();
|
||||
try {
|
||||
update(router, knownNames, publishedNS, addressbook, iter2, log);
|
||||
} finally {
|
||||
if (iter2 instanceof HostTxtIterator)
|
||||
((HostTxtIterator) iter2).close();
|
||||
addressbook.delete();
|
||||
}
|
||||
} // subscriptions
|
||||
subscriptions.write();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param knownNames only non-null if router book is a text file
|
||||
* @param publishedNS only non-null if we have a published address book
|
||||
* @since 0.9.33 split out from above
|
||||
*/
|
||||
private static void update(NamingService router, Set<String> knownNames,
|
||||
NamingService publishedNS, AddressBook addressbook,
|
||||
Iterator<Map.Entry<String, HostTxtEntry>> iter, Log log) {
|
||||
long start = DEBUG ? System.currentTimeMillis() : 0;
|
||||
int old = 0, nnew = 0, invalid = 0, conflict = 0, total = 0;
|
||||
int deleted = 0;
|
||||
for (Map.Entry<String, HostTxtEntry> entry : addressbook) {
|
||||
while(iter.hasNext()) {
|
||||
Map.Entry<String, HostTxtEntry> entry = iter.next();
|
||||
total++;
|
||||
// may be null for 'remove' entries
|
||||
String key = entry.getKey();
|
||||
boolean isKnown;
|
||||
// NOT set for text file NamingService
|
||||
Destination oldDest;
|
||||
if (isTextFile) {
|
||||
if (knownNames == null) {
|
||||
// load the hostname set
|
||||
Properties opts = new Properties();
|
||||
opts.setProperty("file", "hosts.txt");
|
||||
knownNames = router.getNames(opts);
|
||||
}
|
||||
if (knownNames != null) {
|
||||
oldDest = null;
|
||||
isKnown = key != null ? knownNames.contains(key) : null;
|
||||
isKnown = key != null ? knownNames.contains(key) : false;
|
||||
} else {
|
||||
oldDest = key != null ? router.lookup(key) : null;
|
||||
isKnown = oldDest != null;
|
||||
@@ -242,13 +271,11 @@ public class Daemon {
|
||||
}
|
||||
// now update the published addressbook
|
||||
// ditto
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
// FIXME this fails, no support in SFNS
|
||||
success = publishedNS.addDestination(key, dest, props);
|
||||
if (log != null && !success)
|
||||
log.append("Add to published address book " + published.getAbsolutePath() + " failed for " + key);
|
||||
log.append("Add to published address book " + publishedNS.getName() + " failed for " + key);
|
||||
}
|
||||
nnew++;
|
||||
continue;
|
||||
@@ -415,12 +442,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(poldname, dest);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + poldname);
|
||||
}
|
||||
} else {
|
||||
// mismatch, disallow
|
||||
@@ -462,20 +487,19 @@ public class Daemon {
|
||||
log.append("Save to naming service " + router + " failed for new key " + key);
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
if (allowExistingKeyInPublished)
|
||||
success = publishedNS.put(key, dest, props);
|
||||
else
|
||||
success = publishedNS.putIfAbsent(key, dest, props);
|
||||
if (log != null && !success) {
|
||||
log.append("Save to published address book " + published.getAbsolutePath() + " failed for new key " + key);
|
||||
log.append("Save to published address book " + publishedNS.getName() + " failed for new key " + key);
|
||||
}
|
||||
}
|
||||
if (isTextFile)
|
||||
if (knownNames != null) {
|
||||
// keep track for later dup check
|
||||
knownNames.add(key);
|
||||
}
|
||||
nnew++;
|
||||
} else if (key == null) {
|
||||
// 'remove' actions
|
||||
@@ -506,12 +530,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(poldname, pod);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + poldname);
|
||||
}
|
||||
} else if (pod2 != null) {
|
||||
// mismatch, disallow
|
||||
@@ -550,12 +572,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(poldname, pod);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + poldname);
|
||||
}
|
||||
} else if (pod2 != null) {
|
||||
// mismatch, disallow
|
||||
@@ -585,12 +605,10 @@ public class Daemon {
|
||||
". From: " + addressbook.getLocation());
|
||||
}
|
||||
// now update the published addressbook
|
||||
if (published != null) {
|
||||
if (publishedNS == null)
|
||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||
if (publishedNS != null) {
|
||||
success = publishedNS.remove(rev, pod);
|
||||
if (log != null && !success)
|
||||
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + rev);
|
||||
log.append("Remove from published address book " + publishedNS.getName() + " failed for " + rev);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -640,7 +658,7 @@ public class Daemon {
|
||||
log.append("Invalid b64 for " + key + " From: " + addressbook.getLocation());
|
||||
invalid++;
|
||||
}
|
||||
}
|
||||
} // entries
|
||||
if (DEBUG && log != null && total > 0) {
|
||||
log.append("Merge of " + addressbook.getLocation() + " into " + router +
|
||||
" took " + (System.currentTimeMillis() - start) + " ms with " +
|
||||
@@ -650,10 +668,7 @@ public class Daemon {
|
||||
deleted + " deleted, " +
|
||||
invalid + " invalid, " +
|
||||
conflict + " conflicts");
|
||||
} // entries
|
||||
addressbook.delete();
|
||||
} // subscriptions
|
||||
subscriptions.write();
|
||||
}
|
||||
}
|
||||
|
||||
/** @since 0.9.26 */
|
||||
@@ -736,17 +751,17 @@ public class Daemon {
|
||||
if (Boolean.parseBoolean(settings.get("update_direct"))) {
|
||||
// Direct hosts.txt access
|
||||
File routerFile = new File(home, settings.get("router_addressbook"));
|
||||
AddressBook master;
|
||||
AddressBook local;
|
||||
if (should_publish) {
|
||||
File masterFile = new File(home, settings.get("master_addressbook"));
|
||||
master = new AddressBook(masterFile);
|
||||
File localFile = new File(home, settings.get("local_addressbook"));
|
||||
local = new AddressBook(localFile);
|
||||
} else {
|
||||
master = null;
|
||||
local = null;
|
||||
}
|
||||
AddressBook router = new AddressBook(routerFile);
|
||||
update(master, router, published, subscriptions, log);
|
||||
update(local, router, published, subscriptions, log);
|
||||
} else {
|
||||
// Naming service - no merging of master to router and published is supported.
|
||||
// Naming service - no merging of local to router and published is supported.
|
||||
update(getNamingService(settings.get("naming_service")), published, subscriptions, log);
|
||||
}
|
||||
}
|
||||
@@ -787,14 +802,15 @@ public class Daemon {
|
||||
* others are ignored.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args != null && args.length > 0 && args[0].equals("test"))
|
||||
_instance.test(args);
|
||||
Daemon daemon = new Daemon();
|
||||
if (args.length > 0 && args[0].equals("test"))
|
||||
daemon.test(args);
|
||||
else
|
||||
_instance.run(args);
|
||||
daemon.run(args);
|
||||
}
|
||||
|
||||
/** @since 0.9.26 */
|
||||
private static void test(String[] args) {
|
||||
public static void test(String[] args) {
|
||||
Properties ctxProps = new Properties();
|
||||
String PROP_FORCE = "i2p.naming.blockfile.writeInAppContext";
|
||||
ctxProps.setProperty(PROP_FORCE, "true");
|
||||
@@ -807,11 +823,14 @@ public class Daemon {
|
||||
ctx.logManager().flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param args may be null
|
||||
*/
|
||||
public void run(String[] args) {
|
||||
_running = true;
|
||||
String settingsLocation = "config.txt";
|
||||
File homeFile;
|
||||
if (args.length > 0) {
|
||||
if (args != null && args.length > 0) {
|
||||
homeFile = new SecureDirectory(args[0]);
|
||||
if (!homeFile.isAbsolute())
|
||||
homeFile = new SecureDirectory(I2PAppContext.getGlobalContext().getRouterDir(), args[0]);
|
||||
@@ -822,7 +841,7 @@ public class Daemon {
|
||||
Map<String, String> defaultSettings = new HashMap<String, String>();
|
||||
defaultSettings.put("proxy_host", "127.0.0.1");
|
||||
defaultSettings.put("proxy_port", "4444");
|
||||
defaultSettings.put("master_addressbook", "../userhosts.txt");
|
||||
defaultSettings.put("local_addressbook", "../userhosts.txt");
|
||||
defaultSettings.put("router_addressbook", "../hosts.txt");
|
||||
defaultSettings.put("published_addressbook", "../eepsite/docroot/hosts.txt");
|
||||
defaultSettings.put("should_publish", "false");
|
||||
@@ -837,10 +856,10 @@ public class Daemon {
|
||||
|
||||
if (!homeFile.exists()) {
|
||||
boolean created = homeFile.mkdirs();
|
||||
if (created)
|
||||
System.out.println("INFO: Addressbook directory " + homeFile.getName() + " created");
|
||||
else
|
||||
System.out.println("ERROR: Addressbook directory " + homeFile.getName() + " could not be created");
|
||||
if (!created)
|
||||
System.out.println("ERROR: Addressbook directory " + homeFile.getAbsolutePath() + " could not be created");
|
||||
//else
|
||||
// System.out.println("INFO: Addressbook directory " + homeFile.getAbsolutePath() + " created");
|
||||
}
|
||||
|
||||
File settingsFile = new File(homeFile, settingsLocation);
|
||||
@@ -849,7 +868,7 @@ public class Daemon {
|
||||
// wait
|
||||
try {
|
||||
Thread.sleep(5*60*1000 + I2PAppContext.getGlobalContext().random().nextLong(5*60*1000));
|
||||
// Static method, and redundent Thread.currentThread().sleep(5*60*1000);
|
||||
// Static method, and redundant Thread.currentThread().sleep(5*60*1000);
|
||||
} catch (InterruptedException ie) {}
|
||||
|
||||
while (_running) {
|
||||
@@ -875,14 +894,14 @@ public class Daemon {
|
||||
* Call this to get the addressbook to reread its config and
|
||||
* refetch its subscriptions.
|
||||
*/
|
||||
public static void wakeup() {
|
||||
synchronized (_instance) {
|
||||
_instance.notifyAll();
|
||||
public void wakeup() {
|
||||
synchronized (this) {
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
public static void stop() {
|
||||
_instance._running = false;
|
||||
public void stop() {
|
||||
_running = false;
|
||||
wakeup();
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ import net.i2p.util.I2PAppThread;
|
||||
public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||
|
||||
private final String[] args;
|
||||
private final Daemon daemon;
|
||||
|
||||
/**
|
||||
* Construct a DaemonThread with the command line arguments args.
|
||||
@@ -44,6 +45,7 @@ public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||
*/
|
||||
public DaemonThread(String[] args) {
|
||||
this.args = args;
|
||||
daemon = new Daemon();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -56,18 +58,28 @@ public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||
//} catch (InterruptedException exp) {
|
||||
//}
|
||||
I2PAppContext.getGlobalContext().namingService().registerUpdater(this);
|
||||
Daemon.main(this.args);
|
||||
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
|
||||
try {
|
||||
if (args != null && args.length > 0 && args[0].equals("test"))
|
||||
daemon.test(args);
|
||||
else
|
||||
daemon.run(args);
|
||||
} finally {
|
||||
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void halt() {
|
||||
Daemon.stop();
|
||||
daemon.stop();
|
||||
interrupt();
|
||||
}
|
||||
|
||||
/**
|
||||
* The NamingServiceUpdater interface
|
||||
* @param options ignored
|
||||
* The NamingServiceUpdater interface.
|
||||
* While this may be called directly, the recommended way
|
||||
* is to call I2PAppContext.namingService().requestUpdate(Properties)
|
||||
* which will call this.
|
||||
*
|
||||
* @param options ignored, may be null
|
||||
* @since 0.8.7
|
||||
*/
|
||||
public void update(Properties options) {
|
||||
|
@@ -110,11 +110,6 @@ class HostTxtIterator implements Iterator<Map.Entry<String, HostTxtEntry>>, Clos
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
close();
|
||||
}
|
||||
|
||||
/**
|
||||
* The object returned by the iterator.
|
||||
*/
|
||||
|
@@ -13,6 +13,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import net.i2p.client.naming.HostTxtEntry;
|
||||
import net.i2p.data.DataHelper;
|
||||
@@ -75,7 +76,7 @@ class HostTxtParser {
|
||||
public static HostTxtEntry parse(String inputLine, boolean allowCommandOnly) {
|
||||
if (inputLine.startsWith(";"))
|
||||
return null;
|
||||
int comment = inputLine.indexOf("#");
|
||||
int comment = inputLine.indexOf('#');
|
||||
String kv;
|
||||
String sprops;
|
||||
if (comment >= 0) {
|
||||
@@ -234,7 +235,50 @@ class HostTxtParser {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Usage: HostTxtParser [-q] validate example.i2p=b64dest[#!key1=val1#key2=val2]
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
boolean quiet = false;
|
||||
if (args.length > 0 && args[0].equals("-q")) {
|
||||
quiet = true;
|
||||
args = java.util.Arrays.copyOfRange(args, 1, args.length);
|
||||
}
|
||||
if (args.length != 2 || !args[0].equals("validate")) {
|
||||
System.err.println("Usage: HostTxtParser validate example.i2p=b64dest[#!key1=val1#key2=val2]");
|
||||
System.exit(1);
|
||||
}
|
||||
HostTxtEntry e = parse(args[1].trim(), false);
|
||||
if (e == null) {
|
||||
if (!quiet)
|
||||
System.err.println("Bad format");
|
||||
System.exit(2);
|
||||
}
|
||||
if (!e.hasValidSig()) {
|
||||
if (!quiet)
|
||||
System.err.println("Bad signature");
|
||||
System.exit(3);
|
||||
}
|
||||
Properties p = e.getProps();
|
||||
if (p != null) {
|
||||
if (p.containsKey(HostTxtEntry.PROP_ACTION) ||
|
||||
p.containsKey(HostTxtEntry.PROP_OLDDEST) ||
|
||||
p.containsKey(HostTxtEntry.PROP_OLDNAME) ||
|
||||
p.containsKey(HostTxtEntry.PROP_OLDSIG)) {
|
||||
if (!e.hasValidSig()) {
|
||||
if (!quiet)
|
||||
System.err.println("Bad inner signature");
|
||||
System.exit(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!quiet)
|
||||
System.err.println("Good signature for " + e.getName());
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
/****
|
||||
public static void test(String[] args) throws Exception {
|
||||
File f = new File("tmp-hosts.txt");
|
||||
Map<String, HostTxtEntry> map = parse(f);
|
||||
for (HostTxtEntry e : map.values()) {
|
||||
@@ -246,5 +290,5 @@ class HostTxtParser {
|
||||
'\n');
|
||||
}
|
||||
}
|
||||
|
||||
****/
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* It probably won't make your computer catch on fire, or eat
|
||||
* your children, but it might. Use at your own risk.
|
||||
*/
|
||||
package net.i2p.client.naming;
|
||||
package net.i2p.router.naming;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
@@ -15,6 +15,7 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
@@ -29,6 +30,11 @@ import java.util.StringTokenizer;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.client.naming.DummyNamingService;
|
||||
import net.i2p.client.naming.HostsTxtNamingService;
|
||||
import net.i2p.client.naming.NamingService;
|
||||
import net.i2p.client.naming.NamingServiceListener;
|
||||
import net.i2p.client.naming.SingleFileNamingService;
|
||||
import net.i2p.crypto.SigType;
|
||||
import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.DataHelper;
|
||||
@@ -94,7 +100,7 @@ import net.metanotion.util.skiplist.SkipList;
|
||||
*
|
||||
* All host names are converted to lower case.
|
||||
*
|
||||
* @since 0.8.7
|
||||
* @since 0.8.7, moved from core to addressbook in 0.9.31
|
||||
*/
|
||||
public class BlockfileNamingService extends DummyNamingService {
|
||||
|
||||
@@ -132,9 +138,11 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
private static final String VERSION = "4";
|
||||
|
||||
private static final String PROP_ADDED = "a";
|
||||
private static final String PROP_MODDED = "m";
|
||||
// See susidns
|
||||
//private static final String PROP_MODDED = "m";
|
||||
private static final String PROP_SOURCE = "s";
|
||||
private static final String PROP_VALIDATED = "v";
|
||||
// See susidns
|
||||
//private static final String PROP_VALIDATED = "v";
|
||||
|
||||
private static final String DUMMY = "";
|
||||
private static final int NEGATIVE_CACHE_SIZE = 32;
|
||||
@@ -243,6 +251,7 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
|
||||
int total = 0;
|
||||
for (String hostsfile : getFilenames(list)) {
|
||||
_lists.add(hostsfile);
|
||||
File file = new File(_context.getRouterDir(), hostsfile);
|
||||
if ((!file.exists()) || !(file.canRead()))
|
||||
continue;
|
||||
@@ -282,7 +291,6 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
total += count;
|
||||
_log.logAlways(Log.INFO, "Migrating " + count + " hosts from " + file + " to new hosts database");
|
||||
_lists.add(hostsfile);
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("DB init took " + DataHelper.formatDuration(_context.clock().now() - start));
|
||||
@@ -418,10 +426,10 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
// version 3 -> version 4
|
||||
// support multiple destinations per hostname
|
||||
if (VersionComparator.comp(_version, "4") < 0) {
|
||||
// Upgrade of 4K entry DB on RPi 2 is over 2 1/2 minutes, disable for now
|
||||
if (SystemVersion.isAndroid() || SystemVersion.isARM()) {
|
||||
// Upgrade of 4K entry DB on RPi 2 is over 2 1/2 minutes, probably worse on Android, disable for now
|
||||
if (SystemVersion.isAndroid()) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Deferring upgrade to version 4 on Android/ARM");
|
||||
_log.warn("Deferring upgrade to version 4 on Android");
|
||||
return true;
|
||||
}
|
||||
SkipList<String, Properties> hdr = _bf.getIndex(INFO_SKIPLIST, _stringSerializer, _infoSerializer);
|
||||
@@ -1291,6 +1299,137 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export in a hosts.txt format.
|
||||
* Output is sorted.
|
||||
* Caller must close writer.
|
||||
*
|
||||
* @param options If non-null and contains the key "list", get
|
||||
* from that list (default "hosts.txt", NOT all lists)
|
||||
* Key "search": return only those matching substring
|
||||
* Key "startsWith": return only those starting with
|
||||
* ("[0-9]" allowed)
|
||||
* Key "beginWith": start here in the iteration
|
||||
* @since 0.9.30 override NamingService to add stored authentication strings
|
||||
*/
|
||||
@Override
|
||||
public void export(Writer out, Properties options) throws IOException {
|
||||
String listname = FALLBACK_LIST;
|
||||
String search = null;
|
||||
String startsWith = null;
|
||||
String beginWith = null;
|
||||
if (options != null) {
|
||||
String ln = options.getProperty("list");
|
||||
if (ln != null)
|
||||
listname = ln;
|
||||
search = options.getProperty("search");
|
||||
startsWith = options.getProperty("startsWith");
|
||||
beginWith = options.getProperty("beginWith");
|
||||
if (beginWith == null && startsWith != null) {
|
||||
if (startsWith.equals("[0-9]"))
|
||||
beginWith = "0";
|
||||
else
|
||||
beginWith = startsWith;
|
||||
}
|
||||
}
|
||||
out.write("# Address book: ");
|
||||
out.write(getName());
|
||||
out.write(" (" + listname + ')');
|
||||
final String nl = System.getProperty("line.separator", "\n");
|
||||
out.write(nl);
|
||||
out.write("# Exported: ");
|
||||
out.write((new Date()).toString());
|
||||
out.write(nl);
|
||||
synchronized(_bf) {
|
||||
if (_isClosed)
|
||||
return;
|
||||
try {
|
||||
SkipList<String, DestEntry> sl = _bf.getIndex(listname, _stringSerializer, _destSerializer);
|
||||
if (sl == null) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("No skiplist found for lookup in " + listname);
|
||||
return;
|
||||
}
|
||||
if (beginWith == null && search == null) {
|
||||
int sz = sl.size();
|
||||
if (sz <= 0) {
|
||||
out.write("# No entries");
|
||||
out.write(nl);
|
||||
return;
|
||||
}
|
||||
if (sz > 1) {
|
||||
// actually not right due to multidest
|
||||
out.write("# " + sz + " entries");
|
||||
out.write(nl);
|
||||
}
|
||||
}
|
||||
SkipIterator<String, DestEntry> iter;
|
||||
if (beginWith != null)
|
||||
iter = sl.find(beginWith);
|
||||
else
|
||||
iter = sl.iterator();
|
||||
int cnt = 0;
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.nextKey();
|
||||
if (startsWith != null) {
|
||||
if (startsWith.equals("[0-9]")) {
|
||||
if (key.charAt(0) > '9')
|
||||
break;
|
||||
} else if (!key.startsWith(startsWith)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
DestEntry de = iter.next();
|
||||
if (!validate(key, de, listname))
|
||||
continue;
|
||||
if (search != null && key.indexOf(search) < 0)
|
||||
continue;
|
||||
int dsz = de.destList != null ? de.destList.size() : 1;
|
||||
// new non-DSA dest is put first, so put in reverse
|
||||
// order so importers will see the older dest first
|
||||
for (int i = dsz - 1; i >= 0; i--) {
|
||||
Properties p;
|
||||
Destination d;
|
||||
if (i == 0) {
|
||||
p = de.props;
|
||||
d = de.dest;
|
||||
} else {
|
||||
p = de.propsList.get(i);
|
||||
d = de.destList.get(i);
|
||||
}
|
||||
out.write("# ");
|
||||
out.write(key);
|
||||
out.write(": ");
|
||||
out.write(d.toBase32());
|
||||
out.write(nl);
|
||||
out.write(key);
|
||||
out.write('=');
|
||||
out.write(d.toBase64());
|
||||
if (p != null)
|
||||
SingleFileNamingService.writeOptions(p, out);
|
||||
out.write(nl);
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
if (beginWith != null || search != null) {
|
||||
if (cnt <= 0) {
|
||||
out.write("# No entries");
|
||||
out.write(nl);
|
||||
return;
|
||||
}
|
||||
if (cnt > 1) {
|
||||
out.write("# " + cnt + " entries");
|
||||
out.write(nl);
|
||||
}
|
||||
}
|
||||
} catch (RuntimeException re) {
|
||||
throw new IOException("DB lookup error", re);
|
||||
} finally {
|
||||
deleteInvalid();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param options If non-null and contains the key "list", get
|
||||
* from that list (default "hosts.txt", NOT all lists)
|
||||
@@ -1492,7 +1631,7 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
rv = lookupAll2(hostname, lookupOptions, storedOptions);
|
||||
}
|
||||
}
|
||||
// we sort the destinations in addDestionation(),
|
||||
// we sort the destinations in addDestination(),
|
||||
// which is a lot easier than sorting them here
|
||||
return rv;
|
||||
}
|
||||
@@ -1578,6 +1717,11 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
storedOptions.remove(i);
|
||||
removeReverseEntry(hostname, d);
|
||||
if (options != null) {
|
||||
String list = options.getProperty("list");
|
||||
if (list != null)
|
||||
storedOptions.get(0).setProperty("list", list);
|
||||
}
|
||||
return put(hostname, newDests, storedOptions, false);
|
||||
}
|
||||
}
|
||||
@@ -1925,9 +2069,8 @@ public class BlockfileNamingService extends DummyNamingService {
|
||||
}
|
||||
if (baos.size() > 65535)
|
||||
throw new DataFormatException("Properties too big (65535 max): " + baos.size());
|
||||
byte propBytes[] = baos.toByteArray();
|
||||
DataHelper.writeLong(rawStream, 2, propBytes.length);
|
||||
rawStream.write(propBytes);
|
||||
DataHelper.writeLong(rawStream, 2, baos.size());
|
||||
baos.writeTo(rawStream);
|
||||
} else {
|
||||
DataHelper.writeLong(rawStream, 2, 0);
|
||||
}
|
@@ -144,14 +144,17 @@ public class BlockFile implements Closeable {
|
||||
return;
|
||||
}
|
||||
boolean init = !(new File(args[0])).exists();
|
||||
RAIFile raif = null;
|
||||
BlockFile bf = null;
|
||||
try {
|
||||
RAIFile raif = new RAIFile(new File(args[0]), true, true);
|
||||
BlockFile bf = new BlockFile(raif, init);
|
||||
raif = new RAIFile(new File(args[0]), true, true);
|
||||
bf = new BlockFile(raif, init);
|
||||
bf.bfck(true);
|
||||
bf.close();
|
||||
raif.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (bf != null) try { bf.close(); } catch (IOException ioe) {}
|
||||
if (raif != null) try { raif.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,7 +340,7 @@ public class BlockFile implements Closeable {
|
||||
/**
|
||||
* Go to any page but the superblock.
|
||||
* Page 1 is the superblock, must use file.seek(0) to get there.
|
||||
* @param page >= 2
|
||||
* @param page >= 2
|
||||
*/
|
||||
public static void pageSeek(RandomAccessInterface file, int page) throws IOException {
|
||||
if (page < METAINDEX_PAGE)
|
||||
@@ -587,12 +590,7 @@ public class BlockFile implements Closeable {
|
||||
_isClosed = true;
|
||||
metaIndex.close();
|
||||
|
||||
Set<String> oi = openIndices.keySet();
|
||||
Iterator<String> i = oi.iterator();
|
||||
Object k;
|
||||
while(i.hasNext()) {
|
||||
k = i.next();
|
||||
BSkipList bsl = openIndices.get(k);
|
||||
for (BSkipList bsl : openIndices.values()) {
|
||||
bsl.close();
|
||||
}
|
||||
|
@@ -173,7 +173,7 @@ public class BSkipLevels<K extends Comparable<? super K>, V> extends SkipLevels<
|
||||
// TODO also check that the level[] array is not out-of-order
|
||||
} else {
|
||||
if (bf.log.shouldLog(Log.WARN))
|
||||
bf.log.warn("WTF " + this + " i = " + i + " of " +
|
||||
bf.log.warn(this + " i = " + i + " of " +
|
||||
lps.length + " / " + levels.length +
|
||||
" valid levels but page is zero");
|
||||
levels[i] = null;
|
@@ -221,6 +221,7 @@ public class BSkipList<K extends Comparable<? super K>, V> extends SkipList<K, V
|
||||
}
|
||||
****/
|
||||
|
||||
/** find */
|
||||
@Override
|
||||
public SkipIterator<K, V> find(K key) {
|
||||
if (!this.fileOnly)
|
@@ -19,7 +19,7 @@ the API may be subject to change.
|
||||
Contact I2P developers if you are considering use in another application.
|
||||
Following is the original documentation copied from metanotion website.
|
||||
</p>
|
||||
<h1>Metanotion BlockFile Database</h1>
|
||||
<h2>Metanotion BlockFile Database</h2>
|
||||
<p>A 100% Java 1.3, BSD Licensed, embeddable single file database engine in 32KB. This database was designed for PDA based and J2ME applications.</p>
|
||||
|
||||
<h2>Table of Contents</h2>
|
||||
@@ -32,18 +32,18 @@ Following is the original documentation copied from metanotion website.
|
||||
<li><a href="#download">Download</a></li>
|
||||
</ul>
|
||||
|
||||
<a name="features"><h2>Features</h2></a>
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>100% Java 1.3. No JNI.</li>
|
||||
<li>Will work with any "file" as long as you can approximate something like <a href="http://java.sun.com/j2se/1.3/docs/api/java/io/RandomAccessFile.html">java.io.RandomAccessFile</a>, you can use this.</li>
|
||||
<li>BSD Licensed. Yes, this means you can use it for free in a commercial project. However, if you base some really cool mobile technology startup on this code we'll gladly accept stock options...</p>
|
||||
<li>BSD Licensed. Yes, this means you can use it for free in a commercial project. However, if you base some really cool mobile technology startup on this code we'll gladly accept stock options...</li>
|
||||
<li>No dependence on file API's(useful for mobile apps)</li>
|
||||
<li>Small. 32KB in a JAR file. <2000 lines of code.</li>
|
||||
<li>Reasonably fast. This is used in an app running on a sub 200MHz StrongARM PocketPC, and quite handily deals with 70,000 records. The load time is a little slow, but its been tested with a <a href="http://java.sun.com/javame/reference/apis.jsp">CDC 1.0/Personal Profile</a> device.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a name="unfeatures"><h2>Unfeatures</h2></a>
|
||||
<h2 id="unfeatures">Unfeatures</h2>
|
||||
<p>A good, ACID database is a nice thing to work with. Unfortunately, in the goal to make this small, fast, and work with minimal dependencies, something had to give. So I list things which this database will likely never have. Of course, since it is BSD Licensed, patches welcome...</p>
|
||||
|
||||
<ul>
|
||||
@@ -53,11 +53,11 @@ Following is the original documentation copied from metanotion website.
|
||||
<li>No use of reflection or automagical serialization tricks.</li>
|
||||
</ul>
|
||||
|
||||
<a name="future"><h2>Future Plans</h2></a>
|
||||
<h2 id="future">Future Plans</h2>
|
||||
<p>There are still bugs(none known...). The app that this was written for is still in testing, but we should most of the issues sorted by the time we deploy it in a few weeks(early November, 2006). Some loading speed issues on large record sets, and memory usage could still be improved. All this and feedback from other uses will direct this products evolution.</p>
|
||||
<p>What is currently up here is not "1.0" code, but we will release a labeled "1.0" version once we feel happy with the state of the codebase.</p>
|
||||
|
||||
<a name="design"><h2>What KIND of database is this?</h2></a>
|
||||
<h2 id="design">What KIND of database is this?</h2>
|
||||
<p>You probably store at least part of your application data in memory in a class from the <a href="http://java.sun.com/j2se/1.4.2/docs/guide/collections/">Java Collections Framework</a>. The BlockFile database stores data in a <a href="http://en.wikipedia.org/wiki/Skip_list">Skip</a> <a href="http://eternallyconfuzzled.com/tuts/skip.html">List</a> that almost implements <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/SortedMap.html">java.util.SortedMap</a>. You can create and store as many named(with a string) SkipList in the database as you want.</p>
|
||||
<p>To serialize your data, you have to either extend our SerialStreams class or implement our Serializer interface. We could have done something cool and fancy with reflection(and other cool stuff with Java 1.5), but that would probably not do the Right Thing™ most of the time. As you can see, there's not a lot to it anyway:</p>
|
||||
<h3>net.metanotion.io.SerialStreams</h3>
|
||||
@@ -91,9 +91,8 @@ public class SkipList {
|
||||
public ListIterator find(Comparable key) ...
|
||||
}
|
||||
</pre>
|
||||
</p>
|
||||
|
||||
<a name="examples"><h2>Examples</h2></a>
|
||||
<h2 id="examples">Examples</h2>
|
||||
<p>Better documentation is forthcoming, but there really isn't much to know. The entire public interface to the library is on this page. Where possible, it sticks to idiomatic Java and standard interfaces.</p>
|
||||
<ul>
|
||||
<li>Open a database:
|
||||
@@ -146,8 +145,8 @@ public class BlockFile implements Closeable {
|
||||
|
||||
<p>So, in other words, if you can provide an implementation of this interface, you can use the BlockFile database. This frees it from dependence on the RandomAccessFile class. If you don't see why this is useful and you're going to be using "files" on PDA's and phone's, well, you'll understand soon enough...</p>
|
||||
|
||||
<a name="download"><h2>Download</h2></a>
|
||||
<h3>Bugfix and cleanup Release 10/6/2006</h2>
|
||||
<h2 id="download">Download</h2>
|
||||
<h3>Bugfix and cleanup Release 10/6/2006</h3>
|
||||
<p>An unnecessary class was removed, some junk methods removed, and a couple of JDK compatability issues were fixed. The StringBytes class was switched to ASCII(from UTF-8) for better compatibility.</p>
|
||||
<ul>
|
||||
<li><a href="http://www.metanotion.net/software/sandbox/BlockFile.2006.10.06.jar">BlockFile binary JAR, version 0.1.1</a></li>
|
||||
@@ -160,7 +159,7 @@ public class BlockFile implements Closeable {
|
||||
<li><a href="http://www.metanotion.net/software/sandbox/BlockFile.src.2006.09.28.zip">BlockFile source code</a></li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
<center>© 2006 <a href="http://www.metanotion.net/">Metanotion Software</a></center>
|
||||
<hr>
|
||||
<p>© 2006 <a href="http://www.metanotion.net/">Metanotion Software</a></p>
|
||||
</body>
|
||||
</html>
|
@@ -202,11 +202,11 @@ public class SkipLevels<K extends Comparable<? super K>, V> implements Flushable
|
||||
if((bottom.nKeys == 0) && (sl.first != bottom)) {
|
||||
// from debugging other problems
|
||||
if (res == null) {
|
||||
_log.warn("WTF killing with no return value " + print());
|
||||
_log.warn("killing with no return value " + print());
|
||||
} else if (res[1] == null) {
|
||||
_log.warn("WTF killing with no return value 1 " + print());
|
||||
_log.warn("killing with no return value 1 " + print());
|
||||
} else if (res[1] != this) {
|
||||
_log.warn("WTF killing with return value not us " + res[1] + ' ' + print());
|
||||
_log.warn("killing with return value not us " + res[1] + ' ' + print());
|
||||
}
|
||||
this.killInstance();
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
package net.i2p.client.naming;
|
||||
package net.i2p.router.naming;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
@@ -1,10 +0,0 @@
|
||||
# addressbook master address book. Addresses placed in this file take precidence
|
||||
# over those in the router address book and in remote address books. If changes
|
||||
# are made to this file, they will be reflected in the router address book and
|
||||
# published address book after the next update.
|
||||
#
|
||||
# Do not make changes directly to the router address book, as they could be lost
|
||||
# during an update.
|
||||
#
|
||||
# This file takes addresses in the hosts.txt format, i.e.
|
||||
# example.i2p=somereallylongbase64thingAAAA
|
@@ -1,7 +0,0 @@
|
||||
# Subscription list for addressbook
|
||||
#
|
||||
# Each entry is an absolute url to a file in hosts.txt format.
|
||||
# Since the list is checked in order, url's should be listed in order of trust.
|
||||
#
|
||||
http://dev.i2p/i2p/hosts.txt
|
||||
http://duck.i2p/hosts.txt
|
@@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE web-app
|
||||
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
|
||||
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
|
||||
|
||||
<web-app>
|
||||
<filter>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>XSSFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>addressbook</servlet-name>
|
||||
<servlet-class>net.i2p.addressbook.Servlet</servlet-class>
|
||||
<init-param>
|
||||
<param-name>home</param-name>
|
||||
<param-value>./addressbook</param-value>
|
||||
</init-param>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>addressbook</servlet-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- this webapp doesn't actually use sessions or cookies -->
|
||||
<session-config>
|
||||
<session-timeout>30</session-timeout>
|
||||
<cookie-config>
|
||||
<http-only>true</http-only>
|
||||
</cookie-config>
|
||||
</session-config>
|
||||
</web-app>
|
14
apps/admin/admin.iml
Normal file
14
apps/admin/admin.iml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="core" />
|
||||
<orderEntry type="module" module-name="router" />
|
||||
<orderEntry type="module" module-name="routerconsole" />
|
||||
</component>
|
||||
</module>
|
@@ -11,9 +11,10 @@ import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.DataHelper
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.router.Router;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.web.StatsGenerator;
|
||||
import net.i2p.util.I2PThread;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
@@ -49,7 +50,7 @@ class AdminRunner implements Runnable {
|
||||
} else if ( (command.indexOf("routerStats.html") >= 0) || (command.indexOf("oldstats.jsp") >= 0) ) {
|
||||
try {
|
||||
out.write(DataHelper.getASCII("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n"));
|
||||
_generator.generateStatsPage(new OutputStreamWriter(out));
|
||||
_generator.generateStatsPage(new OutputStreamWriter(out), true);
|
||||
out.close();
|
||||
} catch (IOException ioe) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
@@ -63,7 +64,8 @@ class AdminRunner implements Runnable {
|
||||
} else if (true || command.indexOf("routerConsole.html") > 0) {
|
||||
try {
|
||||
out.write(DataHelper.getASCII("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n"));
|
||||
_context.router().renderStatusHTML(new OutputStreamWriter(out));
|
||||
// TODO Not technically the same as router().renderStatusHTML() was
|
||||
_context.routerAppManager().renderStatusHTML(new OutputStreamWriter(out));
|
||||
out.close();
|
||||
} catch (IOException ioe) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
|
@@ -1,99 +0,0 @@
|
||||
#Last Modified: Sun Dec 06 12:30:32 2015
|
||||
# vim:syntax=apparmor et ts=8 sw=4
|
||||
|
||||
#include <tunables/global>
|
||||
|
||||
$INSTALL_PATH/{i2prouter,runplain.sh} flags=(complain) {
|
||||
#include <abstractions/base>
|
||||
#include <abstractions/fonts>
|
||||
#include <abstractions/nameservice>
|
||||
#include <abstractions/ssl_certs>
|
||||
|
||||
capability sys_ptrace,
|
||||
network inet stream,
|
||||
network inet6 stream,
|
||||
|
||||
$INSTALL_PATH/ r,
|
||||
$INSTALL_PATH/{i2psvc,wrapper} rmix,
|
||||
owner $INSTALL_PATH/** rwkm,
|
||||
|
||||
# Needed for Java
|
||||
owner @{PROC} r,
|
||||
owner @{PROC}/[0-9]*/ r,
|
||||
owner @{PROC}/[0-9]*/status r,
|
||||
owner @{PROC}/[0-9]*/stat r,
|
||||
owner @{PROC}/[0-9]*/cmdline r,
|
||||
@{PROC}/uptime r,
|
||||
@{PROC}/sys/kernel/pid_max r,
|
||||
/sys/devices/system/cpu/ r,
|
||||
/sys/devices/system/cpu/** r,
|
||||
|
||||
/dev/random r,
|
||||
/dev/urandom r,
|
||||
|
||||
@{PROC}/1/comm r,
|
||||
|
||||
/etc/ssl/certs/java/** r,
|
||||
/etc/timezone r,
|
||||
/usr/share/javazi/** r,
|
||||
|
||||
# Debian
|
||||
/etc/java-{6,7,8}-openjdk/** r,
|
||||
/usr/lib/jvm/default-java/jre/bin/java rix,
|
||||
|
||||
# Debian, Ubuntu, openSUSE
|
||||
/usr/lib{,32,64}/jvm/java-*-openjdk-*/jre/bin/java rix,
|
||||
/usr/lib{,32,64}/jvm/java-*-openjdk-*/jre/bin/keytool rix,
|
||||
|
||||
# Raspbian
|
||||
/usr/lib/jvm/jdk-*-oracle-*/jre/bin/java rix,
|
||||
/usr/lib/jvm/jdk-*-oracle-*/jre/bin/keytool rix,
|
||||
|
||||
|
||||
# Fonts are needed for I2P's graphs
|
||||
/usr/share/java/java-atk-wrapper.jar r,
|
||||
|
||||
# Used by some plugins
|
||||
/usr/share/java/eclipse-ecj-*.jar r,
|
||||
|
||||
/{,var/}tmp/ rwm,
|
||||
owner /{,var/}tmp/** rwkm,
|
||||
|
||||
/{,usr/}bin/{,b,d}ash rix,
|
||||
/{,usr/}bin/cat rix,
|
||||
/{,usr/}bin/cut rix,
|
||||
/{,usr/}bin/dirname rix,
|
||||
/{,usr/}bin/expr rix,
|
||||
/{,usr/}bin/{,g,m}awk rix,
|
||||
/{,usr/}bin/grep rix,
|
||||
/{,usr/}bin/id rix,
|
||||
/{,usr/}bin/ldd rix,
|
||||
/{,usr/}bin/ls rix,
|
||||
/{,usr/}bin/mkdir rix,
|
||||
/{,usr/}bin/nohup rix,
|
||||
/{,usr/}bin/ps rix,
|
||||
/{,usr/}bin/rm rix,
|
||||
/{,usr/}bin/sed rix,
|
||||
/{,usr/}bin/sleep rix,
|
||||
/{,usr/}bin/tail rix,
|
||||
/{,usr/}bin/tr rix,
|
||||
/{,usr/}bin/uname rix,
|
||||
/{,usr/}bin/which rix,
|
||||
|
||||
@{HOME}/.java/fonts/** r,
|
||||
owner @{HOME}/.i2p/ rw,
|
||||
owner @{HOME}/.i2p/** rwk,
|
||||
|
||||
# Prevent spamming the logs
|
||||
deny owner @{HOME}/.java/ wk,
|
||||
deny @{HOME}/.fontconfig/ wk,
|
||||
deny @{HOME}/.java/fonts/** w,
|
||||
deny /dev/tty rw,
|
||||
deny /dev/pts/[0-9]* rw,
|
||||
deny @{PROC}/[0-9]*/fd/ r,
|
||||
deny /usr/local/share/fonts/ r,
|
||||
deny /var/cache/fontconfig/ wk,
|
||||
# Used by some versions of the Tanuki wrapper but never used by I2P
|
||||
deny /usr/share/java/hamcrest*.jar r,
|
||||
deny /usr/share/java/junit*.jar r,
|
||||
}
|
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_router"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/installer"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>desktopgui</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
14
apps/desktopgui/build.gradle
Normal file
14
apps/desktopgui/build.gradle
Normal file
@@ -0,0 +1,14 @@
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
compile project(':router')
|
||||
compile project(':installer')
|
||||
compile project(':apps:systray')
|
||||
}
|
@@ -7,7 +7,8 @@
|
||||
<property name="jar" value="desktopgui.jar"/>
|
||||
<property name="javadoc" value="javadoc"/>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="javac.version" value="1.6" />
|
||||
<property name="javac.version" value="1.8" />
|
||||
<property name="javac.release" value="8" />
|
||||
<property name="require.gettext" value="true" />
|
||||
|
||||
<condition property="no.bundle">
|
||||
@@ -27,13 +28,16 @@
|
||||
|
||||
<target name="compile" depends="init">
|
||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||
release="${javac.release}"
|
||||
includeAntRuntime="false"
|
||||
encoding="UTF-8"
|
||||
srcdir="${src}" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../core/java/build/i2p.jar" />
|
||||
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
|
||||
<pathelement location="../../router/java/build/router.jar" />
|
||||
<pathelement location="../systray/java/build/systray.jar" />
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
@@ -50,7 +54,9 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<javac source="${javac.version}" target="${javac.version}"
|
||||
release="${javac.release}"
|
||||
includeAntRuntime="false"
|
||||
encoding="UTF-8"
|
||||
srcdir="${build}/messages-src" destdir="${build}">
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
</javac>
|
||||
@@ -83,6 +89,8 @@
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
@@ -118,15 +126,20 @@
|
||||
</target>
|
||||
|
||||
<target name="poupdate">
|
||||
<!-- set if unset -->
|
||||
<property name="lg2" value="" />
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="true" >
|
||||
<env key="LG2" value="${lg2}" />
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="true" >
|
||||
<env key="LG2" value="${lg2}" />
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" failonerror="true" >
|
||||
<env key="LG2" value="${lg2}" />
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
|
@@ -105,12 +105,12 @@ do
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
msgfmt -V | grep -q '0\.19'
|
||||
msgfmt -V | grep -q -E ' 0\.((19)|[2-9])'
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
# slow way
|
||||
# convert to class files in build
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
|
||||
msgfmt --java2 --statistics -r $CLASS -l $LG -d build $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "ERROR - msgfmt failed on ${i}, not updating translations"
|
||||
@@ -128,7 +128,7 @@ do
|
||||
TDY=$TD2/net/i2p/desktopgui
|
||||
rm -rf $TD
|
||||
mkdir -p $TD $TDY
|
||||
msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
|
||||
msgfmt --java2 --statistics --source -r $CLASS -l $LG -d $TD $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "ERROR - msgfmt failed on ${i}, not updating translations"
|
||||
|
@@ -4,6 +4,7 @@
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# Ali <aboshanab_@hotmail.com>, 2018
|
||||
# ducki2p <ducki2p@gmail.com>, 2011
|
||||
# foo <foo@bar>, 2009
|
||||
msgid ""
|
||||
@@ -11,8 +12,8 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"PO-Revision-Date: 2018-05-14 15:25+0000\n"
|
||||
"Last-Translator: Ali <aboshanab_@hotmail.com>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/otf/I2P/language/ar/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -43,12 +44,12 @@ msgstr " تشغيل متصفح I2P"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr ""
|
||||
msgstr "تكوين أيقونة I2P المصغرة "
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "ألغي"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -63,33 +64,33 @@ msgstr "توقيف I2P"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "إعادة تشغيل I2P على الفور"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
msgid "Stop I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "إيقاف تشغيل I2P على الفور"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||
msgid "Cancel I2P Shutdown"
|
||||
msgstr ""
|
||||
msgstr "إلغاء إيقاف تشغيل I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "توقف في مدة {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr ""
|
||||
msgstr "إغلاق وشيك"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "الشبكة"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
msgid "I2P: Right-click for menu"
|
||||
msgstr ""
|
||||
msgstr "I2P: أنقر بالزر الأيمن للقائمة"
|
||||
|
94
apps/desktopgui/locale/messages_az.po
Normal file
94
apps/desktopgui/locale/messages_az.po
Normal file
@@ -0,0 +1,94 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# Nikafn <appone6@gmail.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2018-02-25 16:35+0000\n"
|
||||
"Last-Translator: Nikafn <appone6@gmail.com>\n"
|
||||
"Language-Team: Azerbaijani (http://www.transifex.com/otf/I2P/language/az/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: az\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||
msgid "Start I2P"
|
||||
msgstr "I2P Başla"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||
msgid "I2P is starting!"
|
||||
msgstr "I2P başlayır!"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||
msgid "Starting"
|
||||
msgstr "Başlanğıc"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||
msgid "Launch I2P Browser"
|
||||
msgstr "I2P Brauzerini başla"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr "I2P Sistem Zolağını quraşdır"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr "Söndür"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
msgid "Restart I2P"
|
||||
msgstr "I2P yenidən başlat"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||
msgid "Stop I2P"
|
||||
msgstr "I2P-ni durdur"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr " I2P-ni dərhal yenidən başlat"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
msgid "Stop I2P Immediately"
|
||||
msgstr "I2P-ni dərhal durdur"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||
msgid "Cancel I2P Shutdown"
|
||||
msgstr "I2P-ni söndürməyi ləğv et"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr "{0}-da sönmə"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr "Sönmə yaxınlaşır"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr "Şəbəkə"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
msgid "I2P: Right-click for menu"
|
||||
msgstr "I2P: Menyu üçün sağ düyməni klikləyin"
|
@@ -5,13 +5,14 @@
|
||||
#
|
||||
# Translators:
|
||||
# Gabriel Radev <gabosss@gmail.com>, 2015
|
||||
# Vitaly Zdorovenko <stenliterziev@gmail.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"PO-Revision-Date: 2017-09-20 20:31+0000\n"
|
||||
"Last-Translator: Vitaly Zdorovenko <stenliterziev@gmail.com>\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/otf/I2P/language/bg/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -47,7 +48,7 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "Деактивиране"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -62,7 +63,7 @@ msgstr "Спиране на I2P"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "Рестартирайте Незабавно"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
@@ -77,7 +78,7 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "Изключване в {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"Language-Team: Catalan (http://www.transifex.com/otf/I2P/language/ca/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -85,7 +85,7 @@ msgstr ""
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Xarxa"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/otf/I2P/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -85,7 +85,7 @@ msgstr ""
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Síť"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
|
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"Language-Team: Danish (http://www.transifex.com/otf/I2P/language/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -48,7 +48,7 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "Deaktivere"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -78,16 +78,16 @@ msgstr ""
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "Lukker ned om {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr ""
|
||||
msgstr "Lukker ned om et øjeblik"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Netværk"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
|
@@ -7,13 +7,14 @@
|
||||
# blabla <blabla@trash-mail.com>, 2011
|
||||
# Ettore Atalan <atalanttore@googlemail.com>, 2016
|
||||
# foo <foo@bar>, 2009
|
||||
# Lars Schimmer <echelon@i2pmail.org>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-27 08:26+0000\n"
|
||||
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: Lars Schimmer <echelon@i2pmail.org>\n"
|
||||
"Language-Team: German (http://www.transifex.com/otf/I2P/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -44,7 +45,7 @@ msgstr "I2P-Browser öffnen"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr ""
|
||||
msgstr "I2P System Tray konfigurieren"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
|
@@ -4,14 +4,15 @@
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# Elektra M. <safiragon@yahoo.gr>, 2017
|
||||
# lixtetrax <lixtetrax@grhack.net>, 2012
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||
"Last-Translator: zzzi2p\n"
|
||||
"PO-Revision-Date: 2017-09-20 19:55+0000\n"
|
||||
"Last-Translator: Elektra M. <safiragon@yahoo.gr>\n"
|
||||
"Language-Team: Greek (http://www.transifex.com/otf/I2P/language/el/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -42,12 +43,12 @@ msgstr "Έναρξη φυλλομετρητή Ι2Ρ"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr ""
|
||||
msgstr "Ρύθμιση της γραμμής εργασιών του I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
msgstr "Απενεργοποίηση"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
@@ -62,33 +63,33 @@ msgstr "Τερματισμός Ι2Ρ"
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "Άμεση επανεκκίνηση του Ι2Ρ"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
msgid "Stop I2P Immediately"
|
||||
msgstr ""
|
||||
msgstr "Άμεση διακοπή του I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||
msgid "Cancel I2P Shutdown"
|
||||
msgstr ""
|
||||
msgstr "Ακύρωση τερματισμού λειτουργίας του I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr ""
|
||||
msgstr "Σβήσιμο σε {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr ""
|
||||
msgstr "Επίκειται σβήσιμο"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Δίκτυο "
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
msgid "I2P: Right-click for menu"
|
||||
msgstr ""
|
||||
msgstr "I2P: Κάντε δεξί κλικ για το μενού"
|
||||
|
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2016-05-27 21:54+0000\n"
|
||||
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
|
||||
"Last-Translator: strel\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/otf/I2P/language/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
94
apps/desktopgui/locale/messages_es_AR.po
Normal file
94
apps/desktopgui/locale/messages_es_AR.po
Normal file
@@ -0,0 +1,94 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the desktopgui package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
#
|
||||
# Translators:
|
||||
# kaze kaze <kaze@rlab.be>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||
"PO-Revision-Date: 2017-11-16 15:29+0000\n"
|
||||
"Last-Translator: kaze kaze <kaze@rlab.be>\n"
|
||||
"Language-Team: Spanish (Argentina) (http://www.transifex.com/otf/I2P/language/es_AR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es_AR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||
msgid "Start I2P"
|
||||
msgstr "Iniciando I2P..."
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||
msgid "I2P is starting!"
|
||||
msgstr "I2P esta iniciando!"
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||
msgid "Starting"
|
||||
msgstr "Iniciando"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||
msgid "Launch I2P Browser"
|
||||
msgstr "Lanzar el Navegador I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||
msgid "Configure I2P System Tray"
|
||||
msgstr "Configurar la Bandeja de Sistema de I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||
msgid "Disable"
|
||||
msgstr "Deshabilitar"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||
msgid "Restart I2P"
|
||||
msgstr "Riniciar I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||
msgid "Stop I2P"
|
||||
msgstr "Detener I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||
msgid "Restart I2P Immediately"
|
||||
msgstr " Reiniciar I2P inmediatamente "
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||
msgid "Stop I2P Immediately"
|
||||
msgstr " Detener I2P inmediatamente "
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||
msgid "Cancel I2P Shutdown"
|
||||
msgstr "Cancelar el Apagado de I2P"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||
#, java-format
|
||||
msgid "Shutdown in {0}"
|
||||
msgstr "Apagar en {0}"
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||
msgid "Shutdown imminent"
|
||||
msgstr "Apagado inminente"
|
||||
|
||||
#. status translations are in the console bundle
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||
msgid "Network"
|
||||
msgstr "Red"
|
||||
|
||||
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||
msgid "I2P: Right-click for menu"
|
||||
msgstr "I2P Clic derecho para el menú"
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user