Compare commits
8929 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
566787f041 | ||
|
|
79b2366387 | ||
|
|
5acea014b0 | ||
|
|
b72801abf3 | ||
|
|
23d5a2b862 | ||
|
|
7715311117 | ||
|
|
4c1cfca95b | ||
|
|
e113ce9621 | ||
|
|
e8213220e2 | ||
|
|
83f9d2a963 | ||
|
|
bf97ebf89f | ||
|
|
5b22d27cbb | ||
|
|
e907ff43ae | ||
|
|
b18fc3a8d0 | ||
|
|
a8e23c4140 | ||
|
|
fc3861b421 | ||
|
|
e81bb5d8f1 | ||
|
|
32f4f15831 | ||
|
|
e29c06b718 | ||
|
|
d9d511f33e | ||
|
|
c61a3b8d13 | ||
|
|
e10b867fe6 | ||
|
|
43e230f543 | ||
|
|
b2ae5298a7 | ||
|
|
17dd21ac7f | ||
|
|
1a5e0ef7c9 | ||
|
|
979a7a1dcc | ||
|
|
962cf32ba7 | ||
|
|
ae23682372 | ||
|
|
540919f256 | ||
|
|
398281cd76 | ||
|
|
88446ccde9 | ||
|
|
6238cc0734 | ||
|
|
fd4823c507 | ||
|
|
68bcfd8bf0 | ||
|
|
1d332746af | ||
|
|
f3e133c617 | ||
|
|
1678a6eb59 | ||
|
|
b4dc2c07d5 | ||
|
|
d7838950d8 | ||
|
|
2e93a83dd5 | ||
|
|
db8b419b8c | ||
|
|
990f631cbc | ||
|
|
db46d84458 | ||
|
|
9e6c4f8d80 | ||
|
|
41b47f95c5 | ||
|
|
15939fd87c | ||
|
|
f63c343f68 | ||
|
|
1a516e7744 | ||
|
|
5c9d97775f | ||
|
|
64aadcd13f | ||
|
|
1f6a7d6462 | ||
|
|
e44b953d9a | ||
|
|
6c85020630 | ||
|
|
9d910320f3 | ||
|
|
c53074efc9 | ||
|
|
3b51c53eca | ||
|
|
0aa0ffb67b | ||
|
|
33f70931dd | ||
|
|
8830ea319f | ||
|
|
cbcdc73f9a | ||
|
|
4f6c54ecb3 | ||
|
|
2bdf1b2284 | ||
|
|
c876d6a51c | ||
|
|
3c745b4bc6 | ||
|
|
3a08a6ad72 | ||
|
|
448b397cb8 | ||
|
|
64a1386eb6 | ||
|
|
77c2efe171 | ||
|
|
587c0f6232 | ||
|
|
64e8abf203 | ||
|
|
6c40d2a656 | ||
|
|
cf674e9273 | ||
|
|
9bda0379af | ||
|
|
c67372f8af | ||
|
|
00789de7d4 | ||
|
|
5ece9685c2 | ||
|
|
e7c5a42821 | ||
|
|
36e6079c57 | ||
|
|
e5f23678ca | ||
|
|
749ad7cd83 | ||
|
|
0b59f4eaee | ||
|
|
402663de74 | ||
|
|
eaa66c7ee3 | ||
|
|
996714d6ff | ||
|
|
fe48e5596f | ||
|
|
d7744d2b8e | ||
|
|
33ee35ab92 | ||
|
|
5b291ff768 | ||
|
|
39d6816a6d | ||
|
|
6517b2d2ac | ||
|
|
bfdf13dca3 | ||
|
|
daefc61aa4 | ||
|
|
6fed6e50e4 | ||
|
|
bc9e074822 | ||
|
|
8047102542 | ||
|
|
fe5b81e180 | ||
|
|
f032925c2d | ||
|
|
8125a5dddb | ||
|
|
154170e475 | ||
|
|
fb83936feb | ||
|
|
db8bf52f7d | ||
|
|
756f0b8027 | ||
|
|
b1fba8d3d7 | ||
|
|
e606044271 | ||
|
|
bcbb3371ff | ||
|
|
de632882d1 | ||
|
|
745e492d15 | ||
|
|
c5dc615efe | ||
|
|
beeb02025e | ||
|
|
cdf7062597 | ||
|
|
346084da1e | ||
|
|
bbceb5eb91 | ||
|
|
90d85319c2 | ||
|
|
3d03683e7d | ||
|
|
d8a74802d1 | ||
|
|
191919d1b1 | ||
|
|
df38e7565b | ||
|
|
cb49a03fd7 | ||
|
|
faee5bbb78 | ||
|
|
7befab7e83 | ||
|
|
4244e61214 | ||
|
|
46eab05045 | ||
|
|
5ca137c73c | ||
|
|
760238fe16 | ||
|
|
a99b4abae8 | ||
|
|
472881cb95 | ||
|
|
c4efc37ad8 | ||
|
|
691b6a236e | ||
|
|
5c7243d3ad | ||
|
|
44cfdff39a | ||
|
|
5eedda691a | ||
|
|
a30d5e1b6a | ||
|
|
8ef09a0a71 | ||
|
|
e8044663b3 | ||
|
|
8444c33514 | ||
|
|
2b7328b434 | ||
|
|
ca705e1e37 | ||
|
|
d9f9b3df10 | ||
|
|
a43ee97746 | ||
|
|
43c32372e7 | ||
|
|
5716cde1fb | ||
|
|
b7a99b4a4b | ||
|
|
24741c5d06 | ||
|
|
6b3a282db4 | ||
|
|
7583cfe9b7 | ||
|
|
aafc9ce75b | ||
|
|
fea326530b | ||
|
|
8925cc17d8 | ||
|
|
14412c867f | ||
|
|
c5cc256bf2 | ||
|
|
563c7318f9 | ||
|
|
e92129f449 | ||
|
|
374cc51f77 | ||
|
|
1008d5f67c | ||
|
|
8e07ea7ad8 | ||
|
|
d751df0a73 | ||
|
|
2c084781b0 | ||
|
|
ae7d550a01 | ||
|
|
30d97fe8a0 | ||
|
|
5cb0080052 | ||
|
|
8e4ca23727 | ||
|
|
bdc861f058 | ||
|
|
8925040262 | ||
|
|
c065950ced | ||
|
|
257a77fa35 | ||
|
|
4e5d6e560b | ||
|
|
d276d8eda2 | ||
|
|
ebcb5e9368 | ||
|
|
69f09648a4 | ||
|
|
9adda30c38 | ||
|
|
d2d4a0251e | ||
|
|
f7b6431b6f | ||
|
|
03b9bd3a9e | ||
|
|
61aed60f6d | ||
|
|
2cc323c9fe | ||
|
|
f24ab120ee | ||
|
|
68349bc55c | ||
|
|
209364adf2 | ||
|
|
24afdee35c | ||
|
|
7aea285361 | ||
|
|
47a7707df1 | ||
|
|
6fdae1139f | ||
|
|
6c240f667c | ||
|
|
3040ddb5ec | ||
|
|
fdb28eb0c4 | ||
|
|
7ded244a61 | ||
|
|
8ed533acf3 | ||
|
|
a27580d0cc | ||
|
|
905db05cf9 | ||
|
|
4242aee21e | ||
|
|
e71bd2a08b | ||
|
|
e53a4d0a9e | ||
|
|
159389164a | ||
|
|
0a92fbc18e | ||
|
|
138c29320b | ||
|
|
8f00dbea45 | ||
|
|
f3fd2eb618 | ||
|
|
fc92db83cf | ||
|
|
3b0f8d5516 | ||
|
|
a5273d6992 | ||
|
|
b18074f899 | ||
|
|
3d8067a041 | ||
|
|
f6fe001fa9 | ||
|
|
32a5bf043b | ||
|
|
8d2079482f | ||
|
|
c331c75fde | ||
|
|
6080c3b4ba | ||
|
|
5ccfcffcc1 | ||
|
|
afe2aaa5f6 | ||
|
|
9b11caa0e6 | ||
|
|
a689b881d3 | ||
|
|
e94c436264 | ||
|
|
bad829509e | ||
|
|
9c66b0414a | ||
|
|
4d453a8313 | ||
|
|
61d7b436a2 | ||
|
|
cdddaf21b0 | ||
|
|
b267ba5f0a | ||
|
|
8270043053 | ||
|
|
c00ce42bca | ||
|
|
3852ddbbce | ||
|
|
672bc3ab67 | ||
|
|
62229f14da | ||
|
|
a4c925c8d7 | ||
|
|
60610e90b1 | ||
|
|
90184e0ce7 | ||
|
|
9c3e1d450a | ||
|
|
60f2116202 | ||
|
|
4ff2532330 | ||
|
|
9c15760c4d | ||
|
|
e1c43ec65f | ||
|
|
4dd10894ba | ||
|
|
608d7ec1e7 | ||
|
|
8474599ed6 | ||
|
|
ab39f64fc0 | ||
|
|
185fbca282 | ||
|
|
6e3b2fd844 | ||
|
|
dab39dc778 | ||
|
|
8cd5e79fbd | ||
|
|
1de3ac6c78 | ||
|
|
abe06a5fa6 | ||
|
|
85c27840a3 | ||
|
|
81c16273c5 | ||
|
|
801ae86b5d | ||
|
|
5619fd0bba | ||
|
|
200258c7c3 | ||
|
|
5418bb49fb | ||
|
|
3449c14ff5 | ||
|
|
36a89e8fe7 | ||
|
|
8e6a21a9c2 | ||
|
|
c560ec8ea6 | ||
|
|
56c234b410 | ||
|
|
82743dfd02 | ||
|
|
33694642bd | ||
|
|
c71242d743 | ||
|
|
c45f113856 | ||
|
|
e0a8fd398c | ||
|
|
3e97058151 | ||
|
|
51b1dd8672 | ||
|
|
98a7d8da6c | ||
|
|
acb29f792f | ||
|
|
cd364023ae | ||
|
|
8d34a1cfc6 | ||
|
|
73a1f078a6 | ||
|
|
b7ce452308 | ||
|
|
5faf76051d | ||
|
|
5fe70a3417 | ||
|
|
7a68b1e71f | ||
|
|
d5468dfe89 | ||
|
|
976372ff63 | ||
|
|
9abb686eeb | ||
|
|
f24bcc7f42 | ||
|
|
89800324cb | ||
|
|
050e30418c | ||
|
|
5397d18ed9 | ||
|
|
42eb69f46f | ||
|
|
f1ad21d2bf | ||
|
|
535a099a27 | ||
|
|
50003f6ad2 | ||
|
|
0914644d2b | ||
|
|
5ad6e7fec5 | ||
|
|
0bb943ba3e | ||
|
|
80a0cf694f | ||
|
|
0c9e25b3c4 | ||
|
|
943a67c805 | ||
|
|
881d91f86b | ||
|
|
54d57fdcc2 | ||
|
|
f6f30d6d64 | ||
|
|
4013fa15b9 | ||
|
|
ac1b844c15 | ||
|
|
b8614048d4 | ||
|
|
aed0d13591 | ||
|
|
9d02103ebe | ||
|
|
61784c2144 | ||
|
|
7059215795 | ||
|
|
2190cc7927 | ||
|
|
75dc9506c2 | ||
|
|
4f11fa0d41 | ||
|
|
ce7ec2b3f5 | ||
|
|
fada4aa529 | ||
|
|
aa0e121ade | ||
|
|
b4700039fd | ||
|
|
ab41c16eb5 | ||
|
|
04101f37b8 | ||
|
|
8c31370534 | ||
|
|
2306b0d78c | ||
|
|
cb1a9045e6 | ||
|
|
e92af06664 | ||
|
|
af20a1c994 | ||
|
|
756560eac3 | ||
|
|
dca0519336 | ||
|
|
b9a7f30443 | ||
|
|
32a17a997a | ||
|
|
bf41d1ad2b | ||
|
|
d27e534a85 | ||
|
|
6d54928d7c | ||
|
|
0dffe05bf7 | ||
|
|
9ef1f10319 | ||
|
|
23fcfdbd2a | ||
|
|
3401d26d4c | ||
|
|
256753ea46 | ||
|
|
76cd5f8595 | ||
|
|
5684025847 | ||
|
|
744bd1eadc | ||
|
|
2bc127bb43 | ||
|
|
7770298a65 | ||
|
|
fa50cdb39e | ||
|
|
816ef12088 | ||
|
|
5ff786e59c | ||
|
|
80fe88e8f6 | ||
|
|
a1afe9afc6 | ||
|
|
fe598e7d30 | ||
|
|
4475b8ca04 | ||
|
|
a714bdb0ce | ||
|
|
087874620f | ||
|
|
f1116c9258 | ||
|
|
d01fb6730a | ||
|
|
7bfe6a3304 | ||
|
|
9a577f8060 | ||
|
|
d75a0d714e | ||
|
|
9be3a1554e | ||
|
|
7764719513 | ||
|
|
dcbb9fe07c | ||
|
|
e3b347820a | ||
|
|
a84bf5a92e | ||
|
|
732bdc800d | ||
|
|
a8661b5931 | ||
|
|
5680a3a4b7 | ||
|
|
15ce8eb487 | ||
|
|
b7744be208 | ||
|
|
63c5d66016 | ||
|
|
d09bd9178f | ||
|
|
7d8b1860c3 | ||
|
|
b06825829b | ||
|
|
ba4cd47fd8 | ||
|
|
bbe403f141 | ||
|
|
5df2707d98 | ||
|
|
4859ea468f | ||
|
|
2a8830db70 | ||
|
|
fed9b6fd74 | ||
|
|
b02890eb8a | ||
|
|
da882a6eb6 | ||
|
|
aeb89aa9d6 | ||
|
|
f885807ecc | ||
|
|
b826fd71f0 | ||
|
|
ae35df1126 | ||
|
|
80e55f6bfc | ||
|
|
e7411c0c4b | ||
|
|
e9af692973 | ||
|
|
0cf90ee8b6 | ||
|
|
dc3c0c8866 | ||
|
|
1c46bb1ba6 | ||
|
|
2e8f42c6ad | ||
|
|
2b301ffd2c | ||
|
|
ef0765ca10 | ||
|
|
9766ac6db3 | ||
|
|
32799ff682 | ||
|
|
ce093be12c | ||
|
|
2c276770f0 | ||
|
|
75a592f629 | ||
|
|
13ce07d181 | ||
|
|
d659c7df19 | ||
|
|
f8403a1d29 | ||
|
|
ebb952c4ad | ||
|
|
bea3b954a5 | ||
|
|
129d8e89b9 | ||
|
|
65778a3774 | ||
|
|
d9841668ff | ||
|
|
85d27cbcb9 | ||
|
|
9b95e65bd9 | ||
|
|
12a86c4975 | ||
|
|
0b9435858b | ||
|
|
f0386459ee | ||
|
|
e98d4670b8 | ||
|
|
56cc42b752 | ||
|
|
ead208987d | ||
|
|
364acc8949 | ||
|
|
a8f4d2b6fc | ||
|
|
0eb113e7c6 | ||
|
|
96a9670c69 | ||
|
|
dcc5ce6792 | ||
|
|
23d08820a2 | ||
|
|
b9b906ab20 | ||
|
|
964804a4c2 | ||
|
|
92495d2b0b | ||
|
|
9270829b5b | ||
|
|
b6243a9945 | ||
|
|
496f88653d | ||
|
|
5ef645df97 | ||
|
|
bf49c9e4e2 | ||
|
|
0da9c91af2 | ||
|
|
193e637dd9 | ||
|
|
928bee933d | ||
|
|
4d1720c886 | ||
|
|
8f8ed87327 | ||
|
|
28a441c977 | ||
|
|
8cf50b08f2 | ||
|
|
818b7e0641 | ||
|
|
e70f40fac1 | ||
|
|
bc89ca92b4 | ||
|
|
b968e1b6de | ||
|
|
6c9f9c136b | ||
|
|
9bff5f9e36 | ||
|
|
2bf26a2ff8 | ||
|
|
e33b50d9c5 | ||
|
|
21fa44c0d5 | ||
|
|
44444e1b89 | ||
|
|
ca450663d0 | ||
|
|
f3d16f6d1b | ||
|
|
4464cdcc67 | ||
|
|
2d61e526de | ||
|
|
7723c481db | ||
|
|
0ed10542cc | ||
|
|
ab830f9afd | ||
|
|
d4d2bc072e | ||
|
|
bcccc8f66c | ||
|
|
848c63e2d5 | ||
|
|
f6d0310f9c | ||
|
|
3ef043392c | ||
|
|
864d6f312d | ||
|
|
f44c67de09 | ||
|
|
ae19bda1f2 | ||
|
|
f2d8fd769d | ||
|
|
9661062ae2 | ||
|
|
2a07354cad | ||
|
|
fc18fd571c | ||
|
|
51abed9732 | ||
|
|
d00afc912c | ||
|
|
9d0fe725eb | ||
|
|
8a432c9b7f | ||
|
|
187204f03c | ||
|
|
5e5fadb5f2 | ||
|
|
952c793235 | ||
|
|
3e3d8c7f9d | ||
|
|
9b99a9897a | ||
|
|
4f56fdc397 | ||
|
|
c87d6825ec | ||
|
|
00830a20e3 | ||
|
|
d39d2874b4 | ||
|
|
a0a74951b8 | ||
|
|
779a6855ff | ||
|
|
f7ed7446ae | ||
|
|
9d44a6d2ae | ||
|
|
10da9ee7ba | ||
|
|
f9eff31205 | ||
|
|
1d74a029a2 | ||
|
|
6b8ca514bb | ||
|
|
f51e555154 | ||
|
|
61a3c69a06 | ||
|
|
089615a01e | ||
|
|
52bee8f81f | ||
|
|
adc25e648f | ||
|
|
31da8eac9b | ||
|
|
e00464435b | ||
|
|
b81138bda1 | ||
|
|
6de088140b | ||
|
|
86d0534638 | ||
|
|
1033dbca2b | ||
|
|
b955334882 | ||
|
|
90ea3bf985 | ||
|
|
83b0871248 | ||
|
|
d8aec4b2dc | ||
|
|
39b302dcad | ||
|
|
f6125f0c35 | ||
|
|
f780ac418a | ||
|
|
61a72a5d13 | ||
|
|
0c0a354753 | ||
|
|
3c5f860fb8 | ||
|
|
3da1fa88d0 | ||
|
|
fac15aaffb | ||
|
|
c926021599 | ||
|
|
543776d9c9 | ||
|
|
8bf3f9b874 | ||
|
|
f07f8f7d88 | ||
|
|
39b40ac1fd | ||
|
|
ea639269d8 | ||
|
|
0abaa3ecc5 | ||
|
|
c4d3efe71d | ||
|
|
85e82e3d4d | ||
|
|
f44011519c | ||
|
|
2c3eeb7194 | ||
|
|
79839db3a3 | ||
|
|
d478bdda8e | ||
|
|
1eae9339f2 | ||
|
|
923c1b6220 | ||
|
|
09884e608b | ||
|
|
e239009295 | ||
|
|
3fae2150f5 | ||
|
|
f9ca2f52c1 | ||
|
|
4b81cf0c2c | ||
|
|
e7acbf112c | ||
|
|
304d45b551 | ||
|
|
0f488dcecf | ||
|
|
17039aec70 | ||
|
|
fb6cb07912 | ||
|
|
e9e0e02db3 | ||
|
|
03507037e8 | ||
|
|
66a8fac25e | ||
|
|
1b902e00b4 | ||
|
|
923e66738c | ||
|
|
ff3e2c0514 | ||
|
|
6922a2f55e | ||
|
|
ca5a400dbe | ||
|
|
63fe4d1d17 | ||
|
|
ca06d9d3bf | ||
|
|
ed2db04f43 | ||
|
|
de0afa0e08 | ||
|
|
f0d3227d7b | ||
|
|
fb07a7cecc | ||
|
|
c6b08a4d48 | ||
|
|
040e87ad8d | ||
|
|
d5521ead56 | ||
|
|
f8468451c9 | ||
|
|
65df6ca14e | ||
|
|
36dec47bf7 | ||
|
|
478cedcadf | ||
|
|
cabcbb059d | ||
|
|
5e21b2db3c | ||
|
|
3a0d6d96c1 | ||
|
|
f39d2d33c0 | ||
|
|
ead3dc6a92 | ||
|
|
7d814cc899 | ||
|
|
f5b4606c09 | ||
|
|
d6dbf64efb | ||
|
|
8d18b4c24b | ||
|
|
fe8621906d | ||
|
|
b4fcbdb235 | ||
|
|
f4b5a28596 | ||
|
|
6cbd77fc57 | ||
|
|
1bc78e9f2c | ||
|
|
cb6282e0a7 | ||
|
|
f6941f9a44 | ||
|
|
d2eb4df8fc | ||
|
|
df33a898d7 | ||
|
|
325c7b8e8b | ||
|
|
380656d8c9 | ||
|
|
9111bc2c21 | ||
|
|
37b54179d8 | ||
|
|
511826763a | ||
|
|
ef10354d06 | ||
|
|
158458db5f | ||
|
|
e183ab5cf8 | ||
|
|
fef839e2a9 | ||
|
|
9776e43bbe | ||
|
|
5201147ab1 | ||
|
|
fb7daa0d05 | ||
|
|
2e9f3d8b9f | ||
|
|
976731ab6c | ||
|
|
0d8942e64a | ||
|
|
37a0f04712 | ||
|
|
cde9348009 | ||
|
|
095e6e6ad4 | ||
|
|
9d0bf5e95c | ||
|
|
8b327f1d9b | ||
|
|
aef0507abb | ||
|
|
6bab3bcfea | ||
|
|
a854595886 | ||
|
|
8fc3c5c612 | ||
|
|
4f408bd952 | ||
|
|
7de8fd04a4 | ||
|
|
8158bd218c | ||
|
|
aa1d867b72 | ||
|
|
34c8242133 | ||
|
|
e22bdee808 | ||
|
|
7f87de783f | ||
|
|
c66389a453 | ||
|
|
b63c1a2144 | ||
|
|
808dd7cc54 | ||
|
|
62a129c18f | ||
|
|
c18cd941aa | ||
|
|
6d12c22653 | ||
|
|
b76d78e6ae | ||
|
|
0a6e484b1a | ||
|
|
0bb71f1f20 | ||
|
|
1aa7cdd602 | ||
|
|
a4b8a0d801 | ||
|
|
3bf521d5ca | ||
|
|
0acb55cde5 | ||
|
|
6b89fd6100 | ||
|
|
52ce39dc3e | ||
|
|
7a3e15d8e5 | ||
|
|
cf66a60c60 | ||
|
|
9b26d451e4 | ||
|
|
137ffba1b4 | ||
|
|
5c5dc1b7c0 | ||
|
|
9e9418294a | ||
|
|
b850eb74b7 | ||
|
|
67d73a2aee | ||
|
|
fde9a470dd | ||
|
|
8d1f30e55b | ||
|
|
ddd2b60489 | ||
|
|
8777737861 | ||
|
|
cb71f6dd04 | ||
|
|
1881b0e975 | ||
|
|
98b29f6d1c | ||
|
|
59fdfd25cb | ||
|
|
0d98677212 | ||
|
|
38f0c16904 | ||
|
|
4fbf6b6c95 | ||
|
|
1f8ff48168 | ||
|
|
20b6e0d684 | ||
|
|
713c1f2ba9 | ||
|
|
a149bc4c5d | ||
|
|
b3a458338a | ||
|
|
44422b2b2f | ||
|
|
f10afd38b5 | ||
|
|
4c50a5e0b3 | ||
|
|
f255a485b7 | ||
|
|
1930d5774d | ||
|
|
7220a76be0 | ||
|
|
83f7610dd1 | ||
|
|
30e0644722 | ||
|
|
3ada464020 | ||
|
|
d5983dd362 | ||
|
|
98258acc37 | ||
|
|
8002bc752f | ||
|
|
834ad7a58f | ||
|
|
e8f2f98048 | ||
|
|
c672b60d07 | ||
|
|
ea269c9c92 | ||
|
|
1fe3a77640 | ||
|
|
bbaeea1ab7 | ||
|
|
0a3aee9d82 | ||
|
|
2434020971 | ||
|
|
41e0eb7378 | ||
|
|
6adf964c81 | ||
|
|
b59f37bc0a | ||
|
|
cf2d171ccc | ||
|
|
cc28a7b67f | ||
|
|
8b5c33cecd | ||
|
|
6c28adbcd2 | ||
|
|
2125e3ed57 | ||
|
|
3da7ecfadf | ||
|
|
5bb02bbd39 | ||
|
|
f11aa09f7c | ||
|
|
02eb4752d3 | ||
|
|
d9c3215584 | ||
|
|
110e6d026b | ||
|
|
c0f57b8a8b | ||
|
|
57633fbcb3 | ||
|
|
864c87e6c0 | ||
|
|
1a516cf3c0 | ||
|
|
5c25499c5e | ||
|
|
da4bb4c298 | ||
|
|
5b8ff61799 | ||
|
|
56bded07b1 | ||
|
|
db144a43ad | ||
|
|
5965f62b56 | ||
|
|
05aa9f72a9 | ||
|
|
281461f0f0 | ||
|
|
f70eb63879 | ||
|
|
99c23cf139 | ||
|
|
9aa75e738c | ||
|
|
e9c45a9140 | ||
|
|
a065c6e6b9 | ||
|
|
feb5ff9bd2 | ||
|
|
92ec3f0881 | ||
|
|
98c47d9d36 | ||
|
|
6c67408944 | ||
|
|
261a816b21 | ||
|
|
7a23c123c8 | ||
|
|
e85b24bee0 | ||
|
|
9e73ea77b4 | ||
|
|
b0739eca87 | ||
|
|
848f6aa5ab | ||
|
|
c9ba4f3f9c | ||
|
|
c0e9246a66 | ||
|
|
096c23f27d | ||
|
|
40bde1eac9 | ||
|
|
4b55ed17a9 | ||
|
|
4f757a5add | ||
|
|
674c137e5f | ||
|
|
ff1ff1e54a | ||
|
|
42b22187c8 | ||
|
|
cfe22502ab | ||
|
|
d77b0c7dcd | ||
|
|
5cf889b676 | ||
|
|
ffc36d5255 | ||
|
|
0126276e2f | ||
|
|
58d6ddab9e | ||
|
|
05db6934eb | ||
|
|
02c68c5cdb | ||
|
|
b02fee7309 | ||
|
|
424f75c9e1 | ||
|
|
f6e1176f97 | ||
|
|
e4700c0a27 | ||
|
|
cf23fd8774 | ||
|
|
dee8872395 | ||
|
|
4ba9357a9c | ||
|
|
48ec09ab1e | ||
|
|
754f4048a8 | ||
|
|
037bb07d08 | ||
|
|
87635c5268 | ||
|
|
528b4338f4 | ||
|
|
c780b8bba9 | ||
|
|
ca34f3250b | ||
|
|
6a68e1c3f3 | ||
|
|
85f77ec81d | ||
|
|
37debed0b8 | ||
|
|
008383f24a | ||
|
|
4f7d52dbf2 | ||
|
|
c7848da8f2 | ||
|
|
10a6c5c57d | ||
|
|
2cc2bab309 | ||
|
|
701fd1d939 | ||
|
|
d1bdea8edb | ||
|
|
0cea67ee70 | ||
|
|
3a0480a482 | ||
|
|
1fa99da3c2 | ||
|
|
22d669da18 | ||
|
|
772681f23d | ||
|
|
1862a98a44 | ||
|
|
4634b94c83 | ||
|
|
6e04a327b4 | ||
|
|
7ec887eea2 | ||
|
|
1477b64d4f | ||
|
|
a2c108f5ef | ||
|
|
f546e76490 | ||
|
|
2568bc3957 | ||
|
|
7104ac963b | ||
|
|
2cb36590b2 | ||
|
|
af7b928d7c | ||
|
|
c0d8a9b07a | ||
|
|
5b0d23d553 | ||
|
|
ab30695bd1 | ||
|
|
53a4de35c4 | ||
|
|
22e6d95c4b | ||
|
|
1c7bd7d5c4 | ||
|
|
3c4ed9cbe3 | ||
|
|
2677b90244 | ||
|
|
1b20fa441d | ||
|
|
18c042d4cf | ||
|
|
98f92d828a | ||
|
|
76268773b5 | ||
|
|
87542e3080 | ||
|
|
66f5b0fed7 | ||
|
|
5cb603983e | ||
|
|
9c5790ab1d | ||
|
|
4b7078297d | ||
|
|
841694ccf2 | ||
|
|
12f4a8255a | ||
|
|
bda77ffc5b | ||
|
|
ed9ece5ea3 | ||
|
|
ce49d99c2f | ||
|
|
2e450bbf95 | ||
|
|
303b3071e4 | ||
|
|
eb6d5f34fc | ||
|
|
f80126959d | ||
|
|
4fb4f6d1b7 | ||
|
|
43df4a7500 | ||
|
|
4cdcaa8630 | ||
|
|
04f632296f | ||
|
|
7c8dbcfaac | ||
|
|
436ba3c96c | ||
|
|
5d12f52873 | ||
|
|
a8bf8ede01 | ||
|
|
8682183bc3 | ||
|
|
94c31d0da9 | ||
|
|
464a4cbeec | ||
|
|
9f0cbf418a | ||
|
|
b477f86c92 | ||
|
|
020371f145 | ||
|
|
ccafe3f3cf | ||
|
|
3830748de5 | ||
|
|
1a43f5145d | ||
|
|
7f143a83c1 | ||
|
|
6ccc254179 | ||
|
|
7db2450447 | ||
|
|
6c2a6a65e0 | ||
|
|
4247a757b3 | ||
|
|
57e34823d8 | ||
|
|
3c93decdf0 | ||
|
|
89e7a5018d | ||
|
|
7235b46e5e | ||
|
|
0852226a48 | ||
|
|
e20d215abf | ||
|
|
e4b9b67e24 | ||
|
|
685b78828d | ||
|
|
060908d5c4 | ||
|
|
0b0f4c61f1 | ||
|
|
228bf7eb09 | ||
|
|
5eaf2b8fc3 | ||
|
|
e097fef79e | ||
|
|
9a813cd3b1 | ||
|
|
1c60c8e014 | ||
|
|
eddda95900 | ||
|
|
72184dccfc | ||
|
|
fee75dc766 | ||
|
|
ba5c856f15 | ||
|
|
12308a0f55 | ||
|
|
a958abde2f | ||
|
|
583208db7e | ||
|
|
7b5ba15170 | ||
|
|
d5e0d49f86 | ||
|
|
73b22d82aa | ||
|
|
db51cc4e02 | ||
|
|
be8a52a914 | ||
|
|
ad597a8ff0 | ||
|
|
b1fe105904 | ||
|
|
451b142e3a | ||
|
|
2833625266 | ||
|
|
0464028872 | ||
|
|
98985c03b0 | ||
|
|
793fd8c479 | ||
|
|
6c602811df | ||
|
|
6d48a5684a | ||
|
|
bd115a4008 | ||
|
|
08272cdee2 | ||
|
|
b14a5141a6 | ||
|
|
aa0e4500c6 | ||
|
|
4e6b8edf72 | ||
|
|
ac0852b4e3 | ||
|
|
6fe43ed969 | ||
|
|
b34bc06624 | ||
|
|
08e41e60e5 | ||
|
|
10ec478a9c | ||
|
|
86f1074905 | ||
|
|
8e66b855a3 | ||
|
|
e3bc85d7bf | ||
|
|
6f242836e6 | ||
|
|
f2c926f3b6 | ||
|
|
aba18924ee | ||
|
|
aa6bef54dd | ||
|
|
528f5b9cb9 | ||
|
|
96ae0ec93a | ||
|
|
5a5229b499 | ||
|
|
bba22c9c8c | ||
|
|
694c437a2c | ||
|
|
587172efa3 | ||
|
|
2a926063b2 | ||
|
|
d6f239e54f | ||
|
|
b8989fafeb | ||
|
|
795789e79d | ||
|
|
cd8bc57c0d | ||
|
|
55b355618d | ||
|
|
ba25a5388e | ||
|
|
657ef48518 | ||
|
|
b1d68fe995 | ||
|
|
8a492c8f39 | ||
|
|
901a48c9a4 | ||
|
|
b0994bad31 | ||
|
|
f5c9071494 | ||
|
|
d1f85240a2 | ||
|
|
2148d4bb31 | ||
|
|
e79d06d595 | ||
|
|
c60cf944f5 | ||
|
|
4b8ee58638 | ||
|
|
9305730993 | ||
|
|
16bc97e9e5 | ||
|
|
482c18982e | ||
|
|
06ca08ce55 | ||
|
|
9fc00a817b | ||
|
|
f47696f5f8 | ||
|
|
190006e9dc | ||
|
|
30eaae10c1 | ||
|
|
b878111404 | ||
|
|
db21d7de0b | ||
|
|
8454083efa | ||
|
|
a0e5729117 | ||
|
|
534853cd32 | ||
|
|
fb0ead1788 | ||
|
|
32013ad4a6 | ||
|
|
7352d6a38d | ||
|
|
f649ec1fd8 | ||
|
|
56112a237c | ||
|
|
64da9399ca | ||
|
|
dd8e14e121 | ||
|
|
09e2202cd6 | ||
|
|
fe7e1ae8aa | ||
|
|
aa07e8a8fe | ||
|
|
83d598bdfd | ||
|
|
0ec31b4aa4 | ||
|
|
a943f4063c | ||
|
|
ce9f09c69a | ||
|
|
3ddc7a5353 | ||
|
|
e575392b94 | ||
|
|
c6f61a699c | ||
|
|
0307b49f43 | ||
|
|
413ab80295 | ||
|
|
daffefdb10 | ||
|
|
5fb21fbdb1 | ||
|
|
f5857c4689 | ||
|
|
2c388434dd | ||
|
|
c97469283c | ||
|
|
1f8d707082 | ||
|
|
9b1f44e758 | ||
|
|
804ccddf7e | ||
|
|
bb5918932b | ||
|
|
aa77bc323f | ||
|
|
901229699e | ||
|
|
637c96697f | ||
|
|
c92f0a1336 | ||
|
|
8463441afe | ||
|
|
9b6a2589e5 | ||
|
|
cc5fab28af | ||
|
|
a3f7127e72 | ||
|
|
b0a6a569df | ||
|
|
92523f8cf2 | ||
|
|
e33c08357a | ||
|
|
2dc5648e57 | ||
|
|
d0349880da | ||
|
|
f178163217 | ||
|
|
7aa1dceef6 | ||
|
|
a75d2fdd5a | ||
|
|
f76544be4c | ||
|
|
1e6c445320 | ||
|
|
e02c1adf79 | ||
|
|
889e4869f9 | ||
|
|
f77135f307 | ||
|
|
eeae9a04d3 | ||
|
|
8bb35e7bb6 | ||
|
|
3e78c9ab48 | ||
|
|
9ec86acb9c | ||
|
|
426bde3f75 | ||
|
|
30e22b753b | ||
|
|
f7141c9201 | ||
|
|
c2a2573aa5 | ||
|
|
9274bc15bc | ||
|
|
751fff07fb | ||
|
|
f7d1408a1a | ||
|
|
e4e14ef6b0 | ||
|
|
005e691339 | ||
|
|
61eff1cddf | ||
|
|
c26703b7e6 | ||
|
|
66ab2de578 | ||
|
|
db27bb76e2 | ||
|
|
7cfe929c36 | ||
|
|
6c06244e83 | ||
|
|
53448e4633 | ||
|
|
21adc78713 | ||
|
|
0340b01392 | ||
|
|
94aed92e9a | ||
|
|
6b9966e969 | ||
|
|
4bc5333995 | ||
|
|
ff58b8d255 | ||
|
|
e28d1e0f65 | ||
|
|
a491d8ae24 | ||
|
|
3cd5dd15f8 | ||
|
|
562ae44d38 | ||
|
|
92541dedc0 | ||
|
|
3f3f0af543 | ||
|
|
850d208b7b | ||
|
|
da563940b4 | ||
|
|
650a67dc38 | ||
|
|
c63f24e58e | ||
|
|
3be8b02cc2 | ||
|
|
bdfaea0c25 | ||
|
|
ed5c0d6546 | ||
|
|
86dc621086 | ||
|
|
fbea965c70 | ||
|
|
a2cd66ed6f | ||
|
|
68894e822a | ||
|
|
937f49f1e9 | ||
|
|
ee59e20c28 | ||
|
|
01b6e1cbf2 | ||
|
|
eefc0f5d80 | ||
|
|
1f94cea889 | ||
|
|
69749eb591 | ||
|
|
94592c1406 | ||
|
|
13ce142df1 | ||
|
|
89bf4c5fad | ||
|
|
f80ebf68b0 | ||
|
|
1155a29096 | ||
|
|
030e603940 | ||
|
|
9c1bf9ac5f | ||
|
|
5f8dac6822 | ||
|
|
2f07b8f482 | ||
|
|
6c40a27809 | ||
|
|
8736a3533b | ||
|
|
608d232373 | ||
|
|
1702e98fdf | ||
|
|
2ec94c0497 | ||
|
|
bf372e3e1f | ||
|
|
0d971963fd | ||
|
|
287cff40b9 | ||
|
|
0e0bc7976f | ||
|
|
8c638c50a3 | ||
|
|
5b2374b949 | ||
|
|
c1600bcf3d | ||
|
|
a82d864c91 | ||
|
|
dcac32a6c4 | ||
|
|
5286477f73 | ||
|
|
2f3845ef51 | ||
|
|
1191025bbf | ||
|
|
bfd261929e | ||
|
|
84de88841b | ||
|
|
224400074c | ||
|
|
863722545f | ||
|
|
d3d1d37782 | ||
|
|
1a2012a97e | ||
|
|
90f4e97751 | ||
|
|
d1bcd98f79 | ||
|
|
39542de69d | ||
|
|
1d00d55d53 | ||
|
|
a190db0873 | ||
|
|
e3142312bb | ||
|
|
e5d1ac0bd0 | ||
|
|
c0411fa412 | ||
|
|
781e690012 | ||
|
|
9a2d71341e | ||
|
|
6db6d3c50c | ||
|
|
0e2c597884 | ||
|
|
debdf9bb96 | ||
|
|
218d9383d7 | ||
|
|
af64bd5088 | ||
|
|
050f81c4fe | ||
|
|
6ebe772e2f | ||
|
|
c9ee6dd4ca | ||
|
|
38b183fac2 | ||
|
|
ab678787f4 | ||
|
|
23556585ca | ||
|
|
728e4e9a38 | ||
|
|
2d6f9f9a9c | ||
|
|
c2e2e5543e | ||
|
|
349d8eb248 | ||
|
|
94b96bde9b | ||
|
|
45ffc864c5 | ||
|
|
19d9ce260a | ||
|
|
0701333ec1 | ||
|
|
a8e70f0901 | ||
|
|
c7c32a3ce9 | ||
|
|
53170ca2f2 | ||
|
|
94694e0f33 | ||
|
|
a73176a1e9 | ||
|
|
e6a974a93e | ||
|
|
9894967fcb | ||
|
|
92da483ecd | ||
|
|
9cc960ac5e | ||
|
|
18dd082f1e | ||
|
|
81b734be10 | ||
|
|
c59be7ced3 | ||
|
|
c5c4d4a57e | ||
|
|
2d0b429b6a | ||
|
|
60620d9af5 | ||
|
|
15b2a4862e | ||
|
|
2915d2dd0f | ||
|
|
590687fdea | ||
|
|
993f8d6a5e | ||
|
|
68f824a186 | ||
|
|
b9cca49e14 | ||
|
|
931b571e3d | ||
|
|
b7b93bb67e | ||
|
|
35eca08d48 | ||
|
|
7137ca375a | ||
|
|
282859a62a | ||
|
|
fbeb5eefdc | ||
|
|
85bada0505 | ||
|
|
fe2f7a3e5a | ||
|
|
98eed1f5ab | ||
|
|
5d0a463f09 | ||
|
|
dd461400fb | ||
|
|
b1390ec27f | ||
|
|
dda5516eec | ||
|
|
adc5c5db88 | ||
|
|
0642ce4795 | ||
|
|
d11e1d5880 | ||
|
|
b143477774 | ||
|
|
d092a88a93 | ||
|
|
ab7597b089 | ||
|
|
84df470008 | ||
|
|
5ca0b7a28f | ||
|
|
21d621e7ad | ||
|
|
d036e20826 | ||
|
|
9151b84c25 | ||
|
|
5d7dd12f7a | ||
|
|
21783ff5f7 | ||
|
|
fd923d5d96 | ||
|
|
ebf607eef8 | ||
|
|
e092eadd8d | ||
|
|
185148f57c | ||
|
|
ede7434901 | ||
|
|
ba3b422ce5 | ||
|
|
1f3ce380ed | ||
|
|
dfc1f6342a | ||
|
|
94092f1f90 | ||
|
|
a84b83f20f | ||
|
|
614e410fe7 | ||
|
|
4a1e885c0a | ||
|
|
eee91aa4ea | ||
|
|
855750c784 | ||
|
|
4f2163e76c | ||
|
|
eef66dee04 | ||
|
|
7ad440ca1c | ||
|
|
13b3e9e7b3 | ||
|
|
8106929d60 | ||
|
|
795baed3f5 | ||
|
|
5487d40be9 | ||
|
|
5e512763d3 | ||
|
|
a65d02d3ae | ||
|
|
2156fc64f4 | ||
|
|
441440101d | ||
|
|
ec54754e22 | ||
|
|
0ebba73cb8 | ||
|
|
50c7337965 | ||
|
|
b5c569cd30 | ||
|
|
11396d4fba | ||
|
|
4c6ae4e9e8 | ||
|
|
9cb9154b08 | ||
|
|
234a6193bb | ||
|
|
2bf5f32224 | ||
|
|
82d0f68acf | ||
|
|
616c8383c0 | ||
|
|
5de46268af | ||
|
|
489e11072e | ||
|
|
5e2af15e94 | ||
|
|
3fbb54e0a4 | ||
|
|
fe6de14faf | ||
|
|
e85b9960f0 | ||
|
|
75c836fbd9 | ||
|
|
94b1025780 | ||
|
|
36ca9d01fb | ||
|
|
3bceed1b53 | ||
|
|
90de2c4bd6 | ||
|
|
9d63c8220b | ||
|
|
edd9d16c84 | ||
|
|
ec373eba5d | ||
|
|
0dfb27b7e5 | ||
|
|
735f62be0c | ||
|
|
a04e01d5f5 | ||
|
|
b03f05f28a | ||
|
|
0b7d7fe069 | ||
|
|
cf96135125 | ||
|
|
1ff97783ea | ||
|
|
2bc42c6445 | ||
|
|
49372a222f | ||
|
|
9127afbf3f | ||
|
|
f2caac595a | ||
|
|
616abdda26 | ||
|
|
14d3a7ae83 | ||
|
|
f37ab5482b | ||
|
|
ef38dbe5bf | ||
|
|
54a5491b86 | ||
|
|
aff070bcbb | ||
|
|
5af2632d4f | ||
|
|
cc64c715a2 | ||
|
|
9999914c74 | ||
|
|
bd32a11016 | ||
|
|
140aeea300 | ||
|
|
afd0fe666a | ||
|
|
4accc1f159 | ||
|
|
80839b5372 | ||
|
|
dafa3f985a | ||
|
|
f865e1393c | ||
|
|
c99416fbe0 | ||
|
|
3caef29b93 | ||
|
|
5f95c07305 | ||
|
|
1a9659ef45 | ||
|
|
aaa438e745 | ||
|
|
4531e4cc55 | ||
|
|
44a31357f4 | ||
|
|
29f78b18b1 | ||
|
|
147872fe97 | ||
|
|
38edb58054 | ||
|
|
1ba35e1fd4 | ||
|
|
98afae2520 | ||
|
|
ddc85c620f | ||
|
|
12bc625fe1 | ||
|
|
6b407356b9 | ||
|
|
a4e0b52468 | ||
|
|
98efb4f6d5 | ||
|
|
36edb4886c | ||
|
|
76290f786d | ||
|
|
c6299c26b5 | ||
|
|
fb5f9baf9c | ||
|
|
dee591d970 | ||
|
|
a5cc13b0c5 | ||
|
|
aaf588aeaa | ||
|
|
533a3def9f | ||
|
|
4ba3812baf | ||
|
|
4797357fa9 | ||
|
|
f6b3a88723 | ||
|
|
fcf487f4e0 | ||
|
|
82e8913c05 | ||
|
|
c46483a4ab | ||
|
|
0f19108ce3 | ||
|
|
4208fe29b5 | ||
|
|
1b593462d3 | ||
|
|
0cf9c941af | ||
|
|
c1b33533da | ||
|
|
66fcd25b7e | ||
|
|
01d3777574 | ||
|
|
87570cdd9b | ||
|
|
0ea6a2dd99 | ||
|
|
cacc1ffdad | ||
|
|
cfe34647e1 | ||
|
|
737267cedc | ||
|
|
84054203af | ||
|
|
0c1a899fbe | ||
|
|
52521d02ea | ||
|
|
2127a482da | ||
|
|
7df0d3b7fc | ||
|
|
fdd101c4c5 | ||
|
|
4218f56f6c | ||
|
|
dd18fe34a7 | ||
|
|
5b09504a71 | ||
|
|
0c1a001622 | ||
|
|
148c38fbb9 | ||
|
|
fbfefcc0a3 | ||
|
|
b4c517c501 | ||
|
|
b39bc85e60 | ||
|
|
603ce87ac2 | ||
|
|
4b16a8bf84 | ||
|
|
ca4c81dd84 | ||
|
|
e9881bbfc8 | ||
|
|
69f4178bff | ||
|
|
027e562f65 | ||
|
|
2d2120338b | ||
|
|
e5e623ffaa | ||
|
|
e47e3205b3 | ||
|
|
592d2ebd26 | ||
|
|
299c809272 | ||
|
|
d929d0c26f | ||
|
|
90201e9970 | ||
|
|
a31da51fd9 | ||
|
|
cf471e830f | ||
|
|
906972973e | ||
|
|
116edf5fce | ||
|
|
8581013911 | ||
|
|
22192adbc8 | ||
|
|
b8f3de693f | ||
|
|
68c023cdd8 | ||
|
|
b18b0bf328 | ||
|
|
2a2c5d50ff | ||
|
|
dfda0faac7 | ||
|
|
95acc4be07 | ||
|
|
330a4cf573 | ||
|
|
6ffbb151a0 | ||
|
|
271e49db5d | ||
|
|
8d2101ccb4 | ||
|
|
7aa8497546 | ||
|
|
7a8d5070f5 | ||
|
|
8707ae6fd4 | ||
|
|
8786b61636 | ||
|
|
1b5faf5cbf | ||
|
|
2da5b7cb65 | ||
|
|
b1e073bacd | ||
|
|
501e48daba | ||
|
|
643ecd1edd | ||
|
|
1e88e71b9a | ||
|
|
e16fd4a09b | ||
|
|
097e2b6c62 | ||
|
|
7db7568dcf | ||
|
|
409d3c7136 | ||
|
|
7f81375861 | ||
|
|
0de39a431b | ||
|
|
54c20f6aa1 | ||
|
|
1726278ccc | ||
|
|
8661a51aba | ||
|
|
42ec67168a | ||
|
|
91af2ebc2a | ||
|
|
f7fb8a33d7 | ||
|
|
0505cb8f7e | ||
|
|
2cfccc1c34 | ||
|
|
438366effc | ||
|
|
29d5ad667c | ||
|
|
235ddc0990 | ||
|
|
517f5b1999 | ||
|
|
a8ac8b2563 | ||
|
|
78a65cf281 | ||
|
|
96017f58a5 | ||
|
|
c8e6f50d55 | ||
|
|
9263d6d07d | ||
|
|
5271e81ebe | ||
|
|
a174159496 | ||
|
|
efb2051b30 | ||
|
|
a2b24cb5a2 | ||
|
|
a54f9ede2e | ||
|
|
05fb624031 | ||
|
|
2de98b652b | ||
|
|
361ad92da9 | ||
|
|
84ff71002e | ||
|
|
7f1b134137 | ||
|
|
504776a10f | ||
|
|
184b90bb88 | ||
|
|
cf85fcec79 | ||
|
|
b34fd905c8 | ||
|
|
821f77325c | ||
|
|
bd8cf7c53d | ||
|
|
88c19c21ee | ||
|
|
40ec819330 | ||
|
|
34dbd03be1 | ||
|
|
42d41647b5 | ||
|
|
c91db14cef | ||
|
|
10b925e7ac | ||
|
|
c9942846c9 | ||
|
|
6235cf066a | ||
|
|
86979c8f04 | ||
|
|
8a689e68bc | ||
|
|
b98263e86f | ||
|
|
f30265a9ee | ||
|
|
fcbcec6856 | ||
|
|
b778fb38a9 | ||
|
|
32290d5eb8 | ||
|
|
f87265a4d5 | ||
|
|
6448b31b11 | ||
|
|
998227cffc | ||
|
|
09f743dc1a | ||
|
|
035f986a91 | ||
|
|
b168a9d469 | ||
|
|
2b1d6ad396 | ||
|
|
641447bf9b | ||
|
|
06c2aef3c7 | ||
|
|
1caa0ef58d | ||
|
|
51951c9442 | ||
|
|
104b8b4c4c | ||
|
|
3b95523e07 | ||
|
|
3ca312bd4a | ||
|
|
d06ef76e58 | ||
|
|
57729683b6 | ||
|
|
9ff2606bb8 | ||
|
|
fd80683ade | ||
|
|
49efb6071c | ||
|
|
8df98932b1 | ||
|
|
95481dda86 | ||
|
|
1b4181d983 | ||
|
|
113141bf2a | ||
|
|
bcc1e51097 | ||
|
|
e8a7c6cee3 | ||
|
|
0c8ffa1ac3 | ||
|
|
4f678aa244 | ||
|
|
3a4a430f6c | ||
|
|
36db40b224 | ||
|
|
426b9672cf | ||
|
|
4d80419982 | ||
|
|
3983caa2c8 | ||
|
|
0b4e0b7bcb | ||
|
|
a9b8d5ecb6 | ||
|
|
60b2338091 | ||
|
|
d2594c6380 | ||
|
|
667daab056 | ||
|
|
2fc0a738ce | ||
|
|
86c531b37d | ||
|
|
a5b14a2ea7 | ||
|
|
bf582bd969 | ||
|
|
ad866f7a7d | ||
|
|
338a6f2a96 | ||
|
|
c3aa53cc97 | ||
|
|
24a86dce21 | ||
|
|
0209bc4ba7 | ||
|
|
dd57b81989 | ||
|
|
ffe6819966 | ||
|
|
8af75c78f8 | ||
|
|
696add259b | ||
|
|
f18695eb45 | ||
|
|
d6b0ecac1b | ||
|
|
61a119b607 | ||
|
|
ea5096ac90 | ||
|
|
428c2ec0e3 | ||
|
|
1a82981d07 | ||
|
|
0ff0aca2e2 | ||
|
|
7b02c0224c | ||
|
|
57d77cc8a0 | ||
|
|
9fe0585056 | ||
|
|
8c366f0774 | ||
|
|
d6529d8c60 | ||
|
|
edb44a536a | ||
|
|
eeaaea802a | ||
|
|
15c36baefd | ||
|
|
33deb84aa1 | ||
|
|
b211d31a64 | ||
|
|
5b192beaa5 | ||
|
|
ef38330d74 | ||
|
|
987b60ae73 | ||
|
|
7db0f7c4da | ||
|
|
a4eeaff63f | ||
|
|
7807ddae57 | ||
|
|
566af6827e | ||
|
|
bf046d895e | ||
|
|
af33a9f4b8 | ||
|
|
e9a4570891 | ||
|
|
99d5b61698 | ||
|
|
79e89eb23b | ||
|
|
d13a64455c | ||
|
|
816603fd9a | ||
|
|
bf5f12a51f | ||
|
|
866821765a | ||
|
|
c457d8e442 | ||
|
|
c58dffa685 | ||
|
|
ba41690063 | ||
|
|
86a37d0ed6 | ||
|
|
2fb5dbe62b | ||
|
|
d2835e2989 | ||
|
|
543e8a98a7 | ||
|
|
86b7890f67 | ||
|
|
7393e1cba1 | ||
|
|
ceee47fda8 | ||
|
|
9c6b52ccee | ||
|
|
79937c9495 | ||
|
|
a47ecf9cb1 | ||
|
|
8aa2c57413 | ||
|
|
524a7f4560 | ||
|
|
56bfff5a57 | ||
|
|
1d30df9b15 | ||
|
|
ef84e5c8fa | ||
|
|
6d2a30b860 | ||
|
|
9e0fa8e9ec | ||
|
|
5e8e038811 | ||
|
|
e61a804b80 | ||
|
|
a9d6ad4759 | ||
|
|
987124610a | ||
|
|
40a1ebee29 | ||
|
|
d4ce9c0df2 | ||
|
|
680fdb0338 | ||
|
|
727078f65d | ||
|
|
d7f770ce73 | ||
|
|
e1ddb63054 | ||
|
|
24b14c5aa5 | ||
|
|
2e116c9e28 | ||
|
|
37897d1550 | ||
|
|
b153591790 | ||
|
|
ee5653338d | ||
|
|
032f47c0b0 | ||
|
|
1f4e4dd9b3 | ||
|
|
d43218ed16 | ||
|
|
3d43e4e954 | ||
|
|
b0d587ded7 | ||
|
|
1245b4a49f | ||
|
|
d4ce6049c9 | ||
|
|
c236a85c13 | ||
|
|
9cf43eef67 | ||
|
|
ed6d0aa548 | ||
|
|
3d27fffc50 | ||
|
|
de0ee26432 | ||
|
|
45cccbce59 | ||
|
|
479de9c7cb | ||
|
|
60821232b9 | ||
|
|
9b4156a282 | ||
|
|
89b1e27d2e | ||
|
|
1dcaf8f76a | ||
|
|
18508d1919 | ||
|
|
9f77d568e2 | ||
|
|
0d0569b9af | ||
|
|
0f18e7baf9 | ||
|
|
d8b03d4927 | ||
|
|
72b6c09a73 | ||
|
|
c05bca6f2c | ||
|
|
73c95d1fb2 | ||
|
|
2c30e16371 | ||
|
|
72437ca9e2 | ||
|
|
9be14bbe82 | ||
|
|
d47f37f23a | ||
|
|
a22aed7acf | ||
|
|
38b58715ae | ||
|
|
d88e00c0a4 | ||
|
|
a72d1200fb | ||
|
|
9a29d02e7e | ||
|
|
6f3c0d0a60 | ||
|
|
466625f7ad | ||
|
|
b8259e604a | ||
|
|
86e2075c63 | ||
|
|
30900b2fe2 | ||
|
|
fd7ae7ea4c | ||
|
|
60d5bf0240 | ||
|
|
41cdc4e14b | ||
|
|
87dfca0477 | ||
|
|
e1ee8e7812 | ||
|
|
63406efcd8 | ||
|
|
d5c132fca0 | ||
|
|
5f082a2739 | ||
|
|
45139f94bb | ||
|
|
80cb680fca | ||
|
|
b9ff6383a4 | ||
|
|
ebc006ab52 | ||
|
|
86a02871fc | ||
|
|
e152e843d8 | ||
|
|
9ff1ff75cb | ||
|
|
abea4a24ba | ||
|
|
3d3a1232b1 | ||
|
|
09d4176210 | ||
|
|
30d41e45e2 | ||
|
|
bd9a5021da | ||
|
|
1624a5eb8d | ||
|
|
1bca29f9e2 | ||
|
|
efb8a9bd2c | ||
|
|
82954d1d6f | ||
|
|
5a02324c09 | ||
|
|
eb93bebbc1 | ||
|
|
2be905b2e2 | ||
|
|
076be809c2 | ||
|
|
88f1233d7b | ||
|
|
54d295c247 | ||
|
|
e81b089612 | ||
|
|
9f14e7a98d | ||
|
|
cb412b221c | ||
|
|
7d6a762845 | ||
|
|
1ca1269a59 | ||
|
|
6681b14b71 | ||
|
|
12f2418445 | ||
|
|
ae8a2ab652 | ||
|
|
d0fbf6db59 | ||
|
|
01d8eb6290 | ||
|
|
197968d65e | ||
|
|
2cb83a1f84 | ||
|
|
d7c94e30c5 | ||
|
|
510d2514a0 | ||
|
|
5217a74b7f | ||
|
|
cccf35d140 | ||
|
|
249316c8fc | ||
|
|
cd24449495 | ||
|
|
687834328c | ||
|
|
4d015aff30 | ||
|
|
ba8040d068 | ||
|
|
5fa94d2a85 | ||
|
|
7eee79c145 | ||
|
|
9626523420 | ||
|
|
0150131984 | ||
|
|
2ddd45e5e1 | ||
|
|
03c89c9cec | ||
|
|
640de5518b | ||
|
|
a92c694f1b | ||
|
|
a159299a4b | ||
|
|
d048545f1a | ||
|
|
aea6d354b7 | ||
|
|
d3793dfe5b | ||
|
|
234f8d287a | ||
|
|
8d49c2d028 | ||
|
|
e560f6bc63 | ||
|
|
fbfbc5682a | ||
|
|
d4141bf7f1 | ||
|
|
6c81fa1ec5 | ||
|
|
24874b8286 | ||
|
|
b63664988f | ||
|
|
eeb00ac45b | ||
|
|
37e25f93d6 | ||
|
|
d58d65ebf0 | ||
|
|
adf2d3aff2 | ||
|
|
32064a23c1 | ||
|
|
c60b50b1ae | ||
|
|
f3ffdaf21f | ||
|
|
3aade67046 | ||
|
|
dc111bbec2 | ||
|
|
acd61a0e8e | ||
|
|
58590b71d1 | ||
|
|
8dcb1f805d | ||
|
|
a8b9e5b9b9 | ||
|
|
04f928e2b0 | ||
|
|
c7a803c922 | ||
|
|
66a1e8b737 | ||
|
|
ab197b6d43 | ||
|
|
16b0e53a36 | ||
|
|
bc14a6038e | ||
|
|
626329a1cc | ||
|
|
8bf250c228 | ||
|
|
62127bbb12 | ||
|
|
786ac87b76 | ||
|
|
c76f4ac89b | ||
|
|
d495ec71a8 | ||
|
|
b763852f57 | ||
|
|
a8568d7246 | ||
|
|
6522d2f722 | ||
|
|
ac61fd1d78 | ||
|
|
c44d1566fa | ||
|
|
80dc7c2f74 | ||
|
|
43a43c1e2b | ||
|
|
7b94f0e36b | ||
|
|
504e8d564a | ||
|
|
ac395429c3 | ||
|
|
388768b3a6 | ||
|
|
5c4169e64e | ||
|
|
d40e9de2d2 | ||
|
|
e08598e7e2 | ||
|
|
d301a79dcf | ||
|
|
98d76627a5 | ||
|
|
8a809013f3 | ||
|
|
485ed0b156 | ||
|
|
7d546f80f9 | ||
|
|
5dfdc15f93 | ||
|
|
a6e5873443 | ||
|
|
e2cf777538 | ||
|
|
1e54297be8 | ||
|
|
44b200240f | ||
|
|
9c61760713 | ||
|
|
5f86c6d404 | ||
|
|
6edc834143 | ||
|
|
b7dc3fae7c | ||
|
|
a2340c313f | ||
|
|
37b07a5e7c | ||
|
|
73013a3c04 | ||
|
|
e8099f01b5 | ||
|
|
672bdd3a56 | ||
|
|
c2c2c29658 | ||
|
|
c745e14f47 | ||
|
|
d84cd500bb | ||
|
|
5b456cadc4 | ||
|
|
4be80982a4 | ||
|
|
4d7f1f0c35 | ||
|
|
d3f097c7f1 | ||
|
|
a3d1b107f4 | ||
|
|
e8f08cda53 | ||
|
|
0ab6c176af | ||
|
|
5b0e8c6de0 | ||
|
|
8266ab5588 | ||
|
|
ea552208fc | ||
|
|
e86015a72a | ||
|
|
cf7ec2c9d3 | ||
|
|
dadd3ca671 | ||
|
|
67274c018d | ||
|
|
79535212c8 | ||
|
|
ef5f96a193 | ||
|
|
e89c421313 | ||
|
|
47d1d3c855 | ||
|
|
1628d801f9 | ||
|
|
1fb358249b | ||
|
|
418f71ec0f | ||
|
|
b30a510b45 | ||
|
|
0ebeaa9ac2 | ||
|
|
25cd47b8dc | ||
|
|
cd48d981b5 | ||
|
|
774d26b982 | ||
|
|
f3e683bd6f | ||
|
|
50ce0c0d9d | ||
|
|
5b80711d75 | ||
|
|
666e456551 | ||
|
|
31794ac376 | ||
|
|
2141fdf06e | ||
|
|
3f3e0739c4 | ||
|
|
ebed7e2147 | ||
|
|
53f5d4c710 | ||
|
|
139a4054c5 | ||
|
|
a4de96508d | ||
|
|
a7582aaf15 | ||
|
|
c5c1c64a81 | ||
|
|
992c52ce7f | ||
|
|
9f6af4f2cc | ||
|
|
60efdce5ff | ||
|
|
026aef7465 | ||
|
|
b53a23b51b | ||
|
|
2aad015392 | ||
|
|
986ec877b0 | ||
|
|
a68f2cb9fa | ||
|
|
5f5be823f3 | ||
|
|
03700ad37c | ||
|
|
6d01ee9284 | ||
|
|
cc3c1f31d0 | ||
|
|
5909502a13 | ||
|
|
88bbd847e0 | ||
|
|
34d14df297 | ||
|
|
bfc886cd54 | ||
|
|
c43ea74b30 | ||
|
|
79981f3cda | ||
|
|
8624d8c144 | ||
|
|
420582ec5e | ||
|
|
36207d9726 | ||
|
|
855d1bc5a1 | ||
|
|
081d15a830 | ||
|
|
d29d186d62 | ||
|
|
61f2ce67dd | ||
|
|
60dbf1bea0 | ||
|
|
58bb866e2d | ||
|
|
b2ec5d0f01 | ||
|
|
0c300bd4b4 | ||
|
|
53acb7bfcb | ||
|
|
65bbb0e0aa | ||
|
|
c2940a8385 | ||
|
|
bede564618 | ||
|
|
e0ca4b865a | ||
|
|
31c206bf80 | ||
|
|
9187a08106 | ||
|
|
3859a50466 | ||
|
|
927071e085 | ||
|
|
6ba918b203 | ||
|
|
e8b70dbca4 | ||
|
|
0f8d223c7f | ||
|
|
19a2885fd5 | ||
|
|
b8a094470b | ||
|
|
2988bb77e8 | ||
|
|
738317bf34 | ||
|
|
e46fbd0780 | ||
|
|
56b74ad990 | ||
|
|
6de92bb42b | ||
|
|
c801936e53 | ||
|
|
817656504d | ||
|
|
6f00f97b66 | ||
|
|
5acb978f8f | ||
|
|
5147654f6c | ||
|
|
250b6a3d52 | ||
|
|
975a4ae871 | ||
|
|
56aaf3c73e | ||
|
|
12fd1cad0c | ||
|
|
73ddbcc876 | ||
|
|
e573cbf032 | ||
|
|
dead461542 | ||
|
|
3d5da1ac73 | ||
|
|
ec408ca6a6 | ||
|
|
ce2b6dc84d | ||
|
|
7d16d8c887 | ||
|
|
1df5c5a76e | ||
|
|
52da387a1d | ||
|
|
c1221c5c87 | ||
|
|
befd669075 | ||
|
|
b6013a92e0 | ||
|
|
19af364400 | ||
|
|
3fd9a86f3c | ||
|
|
ce68701c0c | ||
|
|
6ea2cb3644 | ||
|
|
199c8aaa25 | ||
|
|
9ce6828d72 | ||
|
|
7ff5cf8372 | ||
|
|
eb771eaf0d | ||
|
|
6908555ed3 | ||
|
|
3890bc5a96 | ||
|
|
2c65f986d6 | ||
|
|
ea402b765c | ||
|
|
497e0669ff | ||
|
|
13ac74e0a2 | ||
|
|
c2f23d92dc | ||
|
|
7027da3cd3 | ||
|
|
005bb59797 | ||
|
|
88bc3a9271 | ||
|
|
2e32cf7b87 | ||
|
|
3ecf5fd442 | ||
|
|
3e9c3c8ae8 | ||
|
|
ec31e8df1d | ||
|
|
b56bfbae26 | ||
|
|
f55b1415d4 | ||
|
|
67693c6ad0 | ||
|
|
fce061b544 | ||
|
|
93765fcb30 | ||
|
|
b221bd7472 | ||
|
|
fd0a5a1116 | ||
|
|
47fa8c4cf6 | ||
|
|
7640609b41 | ||
|
|
e8e6357b73 | ||
|
|
4398101706 | ||
|
|
2e1481f49d | ||
|
|
c7c087a0d2 | ||
|
|
3461580b34 | ||
|
|
fcfdeac1c7 | ||
|
|
97f670658f | ||
|
|
4324fb2fbe | ||
|
|
e4cb74cf7b | ||
|
|
be137a191e | ||
|
|
fe1f3df36e | ||
|
|
4a330a4c33 | ||
|
|
75e60669a7 | ||
|
|
db379c6172 | ||
|
|
1da64fb79c | ||
|
|
8b42fd0a28 | ||
|
|
ea66cdd6a5 | ||
|
|
f762e8034f | ||
|
|
2c401f1102 | ||
|
|
bb1e369f30 | ||
|
|
d084950b1a | ||
|
|
2ce10f2fed | ||
|
|
036094799b | ||
|
|
2da6ab2a45 | ||
|
|
91a512606b | ||
|
|
b6d858f4d6 | ||
|
|
dedede3caa | ||
|
|
b14fc907f9 | ||
|
|
542bbb0889 | ||
|
|
714e69e708 | ||
|
|
cb87ed29d8 | ||
|
|
570c6765b0 | ||
|
|
12a2285ba5 | ||
|
|
1c023eac70 | ||
|
|
1e3f0650df | ||
|
|
1e9da09f62 | ||
|
|
5caf351c44 | ||
|
|
7d789a984a | ||
|
|
d921114832 | ||
|
|
39a1f03d5c | ||
|
|
c6a4a4edf1 | ||
|
|
45748a2bb0 | ||
|
|
9b13d862c1 | ||
|
|
590edc648a | ||
|
|
3326c87a88 | ||
|
|
0ec1863fcb | ||
|
|
2b67a14155 | ||
|
|
eac8caa4de | ||
|
|
61eb2aa328 | ||
|
|
a9847ebf54 | ||
|
|
4ca1089f60 | ||
|
|
926d4150c5 | ||
|
|
6f267adc14 | ||
|
|
0095e2d7d8 | ||
|
|
147f64e1fc | ||
|
|
b8e5932506 | ||
|
|
1ea04cd8cc | ||
|
|
b334643b68 | ||
|
|
6e6a0275b5 | ||
|
|
f5590806e0 | ||
|
|
f686e838fe | ||
|
|
ea8642dec9 | ||
|
|
eef5b58211 | ||
|
|
1de68b72b9 | ||
|
|
720df085e5 | ||
|
|
f90f17227b | ||
|
|
36f7eaadef | ||
|
|
1eb9300658 | ||
|
|
27e4656515 | ||
|
|
e0a09dbd69 | ||
|
|
30832ab33a | ||
|
|
d20b545a94 | ||
|
|
20d01be1ad | ||
|
|
d6b62d7512 | ||
|
|
ab9d9541a8 | ||
|
|
c3b8568560 | ||
|
|
8bd95a4eb1 | ||
|
|
2dac3ef58e | ||
|
|
86c7ab29f4 | ||
|
|
db89e5ec28 | ||
|
|
d096f75fb8 | ||
|
|
854424a758 | ||
|
|
fe5d0ce827 | ||
|
|
8376578921 | ||
|
|
ed2354cd9d | ||
|
|
386688b87a | ||
|
|
38d56dddf1 | ||
|
|
e8975942ec | ||
|
|
3ca80a7336 | ||
|
|
d029dae7ad | ||
|
|
9e058732ee | ||
|
|
cad5d11261 | ||
|
|
2fed3b5e5b | ||
|
|
1ecad094bd | ||
|
|
187cc573a7 | ||
|
|
fcaedec2ab | ||
|
|
ead9d59e88 | ||
|
|
34b8a17ccd | ||
|
|
a53d081c39 | ||
|
|
823134e4ba | ||
|
|
272167b4fc | ||
|
|
92f09bba94 | ||
|
|
0ead72a404 | ||
|
|
bbc5212436 | ||
|
|
c4f7740b80 | ||
|
|
6c239f7a00 | ||
|
|
7d5b859756 | ||
|
|
3e2e0d062b | ||
|
|
c45fe3517c | ||
|
|
d588da69e5 | ||
|
|
ec54a5c72c | ||
|
|
735a371249 | ||
|
|
5ab086e337 | ||
|
|
68f660dbcc | ||
|
|
0066f7a818 | ||
|
|
65059f2add | ||
|
|
23dff4f209 | ||
|
|
4a304bf34e | ||
|
|
36a6405e8b | ||
|
|
42c1fe963b | ||
|
|
465b154fc0 | ||
|
|
a0c4102b5a | ||
|
|
9420066895 | ||
|
|
74eac1d449 | ||
|
|
96676f8f3b | ||
|
|
93b51d56aa | ||
|
|
86c50574d2 | ||
|
|
efb528f979 | ||
|
|
edcd0b9913 | ||
|
|
55d1473918 | ||
|
|
0211c7f7f3 | ||
|
|
5913994169 | ||
|
|
26b1573cbe | ||
|
|
7fe07324d7 | ||
|
|
8e29430f21 | ||
|
|
326488aeeb | ||
|
|
cb86023bd7 | ||
|
|
bd2cb40424 | ||
|
|
e9a3ff0e70 | ||
|
|
5148e229e0 | ||
|
|
1ad21c27c9 | ||
|
|
f392e13077 | ||
|
|
3fe5b42b2b | ||
|
|
70c4b621cf | ||
|
|
a8df5e109b | ||
|
|
ba4f1da466 | ||
|
|
0bfbe6771e | ||
|
|
d1df0fec19 | ||
|
|
031ccce8b7 | ||
|
|
1f50bdb230 | ||
|
|
2eef4e6716 | ||
|
|
d989dbfec4 | ||
|
|
ca9fcec364 | ||
|
|
34eef0ed84 | ||
|
|
354104f9a9 | ||
|
|
8649ea3d6f | ||
|
|
752ff12c37 | ||
|
|
4bb89b1755 | ||
|
|
be068f360d | ||
|
|
0ef553d30e | ||
|
|
5b18b66282 | ||
|
|
7b2283c28b | ||
|
|
c74e018359 | ||
|
|
43a62aef07 | ||
|
|
ed4d0aa909 | ||
|
|
023ce4e720 | ||
|
|
368d9359dd | ||
|
|
d98c19d561 | ||
|
|
cab77e35e0 | ||
|
|
e3e90b4b93 | ||
|
|
f8c69893e1 | ||
|
|
49678a0893 | ||
|
|
d667b5b48c | ||
|
|
4a120f8090 | ||
|
|
9cba55b39c | ||
|
|
c2cbb7b8ce | ||
|
|
79b0f97a3f | ||
|
|
8217d75ca1 | ||
|
|
1ca70d9759 | ||
|
|
4303aaa9b8 | ||
|
|
7b56bae289 | ||
|
|
4183416b3e | ||
|
|
a60dee57ce | ||
|
|
5724656acb | ||
|
|
329f9cd9fe | ||
|
|
fbdb8b406e | ||
|
|
85d0bbd957 | ||
|
|
414f00d6ae | ||
|
|
e3ef3e8d71 | ||
|
|
7574dfd339 | ||
|
|
a5b93008f5 | ||
|
|
0227af5bb7 | ||
|
|
192f4240e3 | ||
|
|
ef71df60f6 | ||
|
|
f52b3b4e04 | ||
|
|
7e4e32cfe0 | ||
|
|
9f8649884b | ||
|
|
f1ee4caddd | ||
|
|
051b8fbb31 | ||
|
|
b0ea32f660 | ||
|
|
8322ae5a4c | ||
|
|
98a7c62d7a | ||
|
|
859e59262e | ||
|
|
ec113420f1 | ||
|
|
1954e94de2 | ||
|
|
f6ec43b9ec | ||
|
|
6d0d8cf9cf | ||
|
|
14f669f4fb | ||
|
|
5ede02aed8 | ||
|
|
bbabb7a14c | ||
|
|
b13ebe3ddb | ||
|
|
17b0add058 | ||
|
|
c68ed40661 | ||
|
|
b0199245d5 | ||
|
|
b93e3b2cf6 | ||
|
|
ae7fcf4c6b | ||
|
|
1607754771 | ||
|
|
028f659c40 | ||
|
|
8dfdacf128 | ||
|
|
f4a56f839f | ||
|
|
67a8eedca0 | ||
|
|
be65c7d5d0 | ||
|
|
7c5306a841 | ||
|
|
201210cfe1 | ||
|
|
cd6de3b24e | ||
|
|
dcd483bd99 | ||
|
|
3c5e4e2788 | ||
|
|
3f4f7b0a53 | ||
|
|
0a4b866d8a | ||
|
|
8c7d7dfa5b | ||
|
|
cdf615f783 | ||
|
|
7d96883d64 | ||
|
|
28c5e7e6a7 | ||
|
|
ff624075a8 | ||
|
|
08db28469d | ||
|
|
a20b326807 | ||
|
|
4db1b1b250 | ||
|
|
ff6b263b48 | ||
|
|
dbfc4abfd6 | ||
|
|
5544375002 | ||
|
|
1fd8d46064 | ||
|
|
46406d6cca | ||
|
|
196df1ccd5 | ||
|
|
d2358b42b6 | ||
|
|
e387d94ff1 | ||
|
|
3bb9c704de | ||
|
|
10537c5095 | ||
|
|
551ac56a33 | ||
|
|
5227582e90 | ||
|
|
c0bf052fa9 | ||
|
|
5419cff925 | ||
|
|
42959982a9 | ||
|
|
78c73fb9e7 | ||
|
|
a06bf388d9 | ||
|
|
de0c3e717e | ||
|
|
1194998ce9 | ||
|
|
7171e23700 | ||
|
|
dee378b775 | ||
|
|
f76262ef79 | ||
|
|
6a755b0663 | ||
|
|
c40354bbcb | ||
|
|
c04aafb4e3 | ||
|
|
e31abe6d6b | ||
|
|
e1349ccadc | ||
|
|
8838bdc1e3 | ||
|
|
d6386bc80f | ||
|
|
a2c2288cd6 | ||
|
|
edef62df86 | ||
|
|
e2621d5e44 | ||
|
|
0e3ff12dd3 | ||
|
|
b335ac4156 | ||
|
|
03cf6591c0 | ||
|
|
2e0949d8e6 | ||
|
|
5a728a069e | ||
|
|
7384ec199e | ||
|
|
7bce6329e3 | ||
|
|
49619fbd77 | ||
|
|
fb9a2c5431 | ||
|
|
cd38aa3b2a | ||
|
|
eee10ad2ed | ||
|
|
daeb7ae949 | ||
|
|
82a79565de | ||
|
|
078839c711 | ||
|
|
98472a8104 | ||
|
|
90cc32f6f8 | ||
|
|
9aec2f019a | ||
|
|
5da455080b | ||
|
|
17558102f2 | ||
|
|
e1c39f3fdc | ||
|
|
20555c8e37 | ||
|
|
300a619991 | ||
|
|
d094c168aa | ||
|
|
4b18460bc6 | ||
|
|
4319dedb23 | ||
|
|
f8bb66b4e0 | ||
|
|
5d6a8b3840 | ||
|
|
6a8c2848f6 | ||
|
|
6439727afc | ||
|
|
27b0a581a6 | ||
|
|
15a54230f1 | ||
|
|
f0d184884a | ||
|
|
8fca04f140 | ||
|
|
3b2b5edd26 | ||
|
|
5bd1fbb0d6 | ||
|
|
0772e571b7 | ||
|
|
910496cea9 | ||
|
|
739e1da279 | ||
|
|
08b4a7aaf2 | ||
|
|
1f0770ca55 | ||
|
|
505d0bfa51 | ||
|
|
860d13c7d8 | ||
|
|
76d77af0f0 | ||
|
|
ea8ab4ddf2 | ||
|
|
4bcc38c749 | ||
|
|
5becffbba5 | ||
|
|
d0194a6fb3 | ||
|
|
e45d13d469 | ||
|
|
412c0a965c | ||
|
|
2becf79223 | ||
|
|
a431274b32 | ||
|
|
994c9a01e3 | ||
|
|
ad1d5e8248 | ||
|
|
43ec96d4a0 | ||
|
|
3d1d779da7 | ||
|
|
c88056ba83 | ||
|
|
e769751221 | ||
|
|
b2670eaba5 | ||
|
|
54aff33118 | ||
|
|
499e053d58 | ||
|
|
9f33c6fe03 | ||
|
|
73e69edac3 | ||
|
|
4c4fa68268 | ||
|
|
43d2fd73ab | ||
|
|
71f1ec0bc8 | ||
|
|
99f4bce112 | ||
|
|
6b77ee9a5e | ||
|
|
25fa3ccade | ||
|
|
c6a95395b5 | ||
|
|
cb3042ffb2 | ||
|
|
d293aaf945 | ||
|
|
1d559bf00c | ||
|
|
4286f55c52 | ||
|
|
0a7cad9074 | ||
|
|
069a7fe71e | ||
|
|
9c8a45854a | ||
|
|
7d035edf9d | ||
|
|
36899dba0b | ||
|
|
6a31446671 | ||
|
|
451fbbcea1 | ||
|
|
a17a481e30 | ||
|
|
5f9d4a02a5 | ||
|
|
7094d88958 | ||
|
|
8ac73a9eba | ||
|
|
86a06a7acc | ||
|
|
d05c3f4e4d | ||
|
|
de178e90f4 | ||
|
|
3d960b5e55 | ||
|
|
39dc83bd82 | ||
|
|
503063cddc | ||
|
|
914df18bf9 | ||
|
|
a539094c06 | ||
|
|
cd3ed720e0 | ||
|
|
37c27fa606 | ||
|
|
093ca5d492 | ||
|
|
1d24dd3067 | ||
|
|
b9659ba0c0 | ||
|
|
49b9a90c3f | ||
|
|
64d141f71e | ||
|
|
c488d3123f | ||
|
|
b6af7abb1a | ||
|
|
edee8a3446 | ||
|
|
5582367d68 | ||
|
|
7a55ab6acc | ||
|
|
967af60327 | ||
|
|
6246d36fe6 | ||
|
|
f1ef9f9d31 | ||
|
|
dfaf08743c | ||
|
|
d9552d8a6d | ||
|
|
7586a8ab2c | ||
|
|
e1a942250b | ||
|
|
72be0185de | ||
|
|
7e4cbce06b | ||
|
|
177d62f431 | ||
|
|
5a11e03725 | ||
|
|
75d068b7cd | ||
|
|
fbc4bb29dc | ||
|
|
1208503888 | ||
|
|
de90d401d2 | ||
|
|
396defaea9 | ||
|
|
18f350cd04 | ||
|
|
7ba7ce3af7 | ||
|
|
478180ebe4 | ||
|
|
4a3059f509 | ||
|
|
78728138a0 | ||
|
|
087fcc4e6e | ||
|
|
63fc98591d | ||
|
|
53def9a682 | ||
|
|
520c520512 | ||
|
|
a6910313b4 | ||
|
|
2f32df1f09 | ||
|
|
23adf50194 | ||
|
|
0691ecc052 | ||
|
|
d917f44b5b | ||
|
|
602bb7170a | ||
|
|
75582d47b9 | ||
|
|
28fdf1e9ed | ||
|
|
9a8a3beae4 | ||
|
|
2a774a1fea | ||
|
|
b13b023c6b | ||
|
|
b652ad9568 | ||
|
|
624e679e35 | ||
|
|
618704f504 | ||
|
|
3b3ec402d6 | ||
|
|
2b3c1d640e | ||
|
|
323231d1dd | ||
|
|
714011c81e | ||
|
|
952ff4207b | ||
|
|
150b16ec2c | ||
|
|
f70b4e02c4 | ||
|
|
c98bc4a243 | ||
|
|
7d579e7400 | ||
|
|
e0f777d4eb | ||
|
|
febd1ad09c | ||
|
|
1040b85785 | ||
|
|
e2c81aa9ea | ||
|
|
014f8cd693 | ||
|
|
aea37e46e3 | ||
|
|
31ab78ae8e | ||
|
|
f82e1453e4 | ||
|
|
e4a147218b | ||
|
|
a2b77c8813 | ||
|
|
18add29472 | ||
|
|
4b2b89eb5e | ||
|
|
4b2bb88375 | ||
|
|
fb01e41e8a | ||
|
|
ff9759c09d | ||
|
|
a92e0e8540 | ||
|
|
9d47b220a4 | ||
|
|
c582a9faae | ||
|
|
cf483107c9 | ||
|
|
b57e2f5521 | ||
|
|
bf3ced6a34 | ||
|
|
390e830994 | ||
|
|
44c60567dd | ||
|
|
967d81b782 | ||
|
|
20199e770c | ||
|
|
4c824e5309 | ||
|
|
981bc85879 | ||
|
|
015527d870 | ||
|
|
6464b4b372 | ||
|
|
fef9747fbf | ||
|
|
13816c1c7d | ||
|
|
c54a920d13 | ||
|
|
83f8eeec44 | ||
|
|
b83fbad6a1 | ||
|
|
ec20784046 | ||
|
|
42ad753e39 | ||
|
|
1ccd2a7b11 | ||
|
|
4c1d29c86c | ||
|
|
0db7a0c9e2 | ||
|
|
13f6b1b344 | ||
|
|
593d82c6a9 | ||
|
|
43dccbd45d | ||
|
|
0ff4350352 | ||
|
|
5fd2b7cc79 | ||
|
|
7e16ac305d | ||
|
|
59a8836924 | ||
|
|
9d4020501c | ||
|
|
81350d65bc | ||
|
|
02642a64fd | ||
|
|
3c41e9f022 | ||
|
|
2670e13cbd | ||
|
|
49784513b1 | ||
|
|
523051132d | ||
|
|
b111a8fe8d | ||
|
|
3b23cf0258 | ||
|
|
55e6629fb4 | ||
|
|
b6251c6968 | ||
|
|
c51fe089ba | ||
|
|
fee9f1482c | ||
|
|
ae67f44c6e | ||
|
|
54dd1ad09b | ||
|
|
e2a74051dc | ||
|
|
b7e035b6f3 | ||
|
|
890f1f5928 | ||
|
|
b30c37eb79 | ||
|
|
b08cb148ae | ||
|
|
034bb13e1c | ||
|
|
6657801fb1 | ||
|
|
a199366157 | ||
|
|
2a6d5583d1 | ||
|
|
ddabe1a6df | ||
|
|
e7b47ce335 | ||
|
|
28e864e096 | ||
|
|
1de19b921a | ||
|
|
ff162b5a03 | ||
|
|
d8e4705dd4 | ||
|
|
ab05b70423 | ||
|
|
b177bffa6a | ||
|
|
338e1f5926 | ||
|
|
b4b468eb27 | ||
|
|
a7fdfa08e1 | ||
|
|
9703a401c5 | ||
|
|
753a2aa462 | ||
|
|
10990a0684 | ||
|
|
91254e9211 | ||
|
|
0f79287b04 | ||
|
|
f2fac77d8c | ||
|
|
81b7373637 | ||
|
|
fa67c2548a | ||
|
|
ea80587ddb | ||
|
|
bd50a0d2ef | ||
|
|
9256e748c8 | ||
|
|
af033c0d1d | ||
|
|
e96513c8db | ||
|
|
da9657aac4 | ||
|
|
2886766fb5 | ||
|
|
6e7f866288 | ||
|
|
6fa403edd9 | ||
|
|
431eb7bc8c | ||
|
|
9df4853e23 | ||
|
|
18c4ef09d5 | ||
|
|
bc93c7a1fc | ||
|
|
c8a2a557db | ||
|
|
9f827c99cb | ||
|
|
7b2b965415 | ||
|
|
c3cfa18ebe | ||
|
|
b46835e15e | ||
|
|
3e5ce3c92c | ||
|
|
e5c9b4cd75 | ||
|
|
8753e558f2 | ||
|
|
f6691579de | ||
|
|
828f5f8384 | ||
|
|
1295a1272a | ||
|
|
66646d9276 | ||
|
|
d0497dba92 | ||
|
|
42914e8227 | ||
|
|
59b49b7881 | ||
|
|
5620f16330 | ||
|
|
be024d4ad7 | ||
|
|
cfc152d979 | ||
|
|
513212c5e8 | ||
|
|
99a447dff5 | ||
|
|
56a9bf459d | ||
|
|
11dbba3503 | ||
|
|
8662427d48 | ||
|
|
821480d329 | ||
|
|
5ce93d6fa8 | ||
|
|
20a5ef2798 | ||
|
|
735eabb066 | ||
|
|
412ff762bb | ||
|
|
44bbf42a9f | ||
|
|
75c740fe2b | ||
|
|
6c8d86bb90 | ||
|
|
b253a6b71e | ||
|
|
030f87c90c | ||
|
|
ae941a7665 | ||
|
|
4d563e08e1 | ||
|
|
8a81b986c0 | ||
|
|
a6e62479be | ||
|
|
6c825064ea | ||
|
|
13d02968bd | ||
|
|
e576556149 | ||
|
|
66e74900df | ||
|
|
aadc735d71 | ||
|
|
a13897cf6f | ||
|
|
b188ae0e5c | ||
|
|
c196710fae | ||
|
|
e4f62483ff | ||
|
|
8d9347edc5 | ||
|
|
eff821c1ca | ||
|
|
3bcd6ecbad | ||
|
|
e76f4c2ae9 | ||
|
|
f46ac45d69 | ||
|
|
1d1259a86d | ||
|
|
101f08ca75 | ||
|
|
3b7f9827ab | ||
|
|
f98bf39005 | ||
|
|
9e7df54ccd | ||
|
|
db23c2f27b | ||
|
|
9744f437d8 | ||
|
|
01f84b0e53 | ||
|
|
5dbdd36263 | ||
|
|
96b557c1f0 | ||
|
|
ebdb7c8de2 | ||
|
|
1fda842ee6 | ||
|
|
f71e20d0ce | ||
|
|
988680de33 | ||
|
|
cdf92c6300 | ||
|
|
be5b726c0a | ||
|
|
3491218915 | ||
|
|
d0f6131ba4 | ||
|
|
ca7b4df812 | ||
|
|
9cc37bdea2 | ||
|
|
3f754fd350 | ||
|
|
bc8dd57236 | ||
|
|
f4f461b8bb | ||
|
|
cbb9b6957f | ||
|
|
f6b56c9317 | ||
|
|
3717fb6c8d | ||
|
|
f6abbc01bd | ||
|
|
91438b6540 | ||
|
|
987c505906 | ||
|
|
598bb93cc2 | ||
|
|
dc531b64ae | ||
|
|
91d4b5cfed | ||
|
|
c24b8460e0 | ||
|
|
2e471daef1 | ||
|
|
7ae57a3531 | ||
|
|
11f36c0bd6 | ||
|
|
fd520eeed2 | ||
|
|
30a5dd267b | ||
|
|
2f0d683378 | ||
|
|
a1309a90ac | ||
|
|
010855a294 | ||
|
|
71ed3ff992 | ||
|
|
d4266d0063 | ||
|
|
8225064aab | ||
|
|
e5ee357903 | ||
|
|
8aef518c05 | ||
|
|
309ed77ef4 | ||
|
|
9a6d2b791f | ||
|
|
2a5010a426 | ||
|
|
be29da46f8 | ||
|
|
d0734e27ba | ||
|
|
732f6aaa30 | ||
|
|
dd422c7b8b | ||
|
|
c8f7a859ea | ||
|
|
28a2d41b85 | ||
|
|
7e76656a18 | ||
|
|
0b93f52ba4 | ||
|
|
57a71c157d | ||
|
|
cc76aeb7bb | ||
|
|
811cabf8a9 | ||
|
|
bf8d2f93d2 | ||
|
|
07d8259ad6 | ||
|
|
a00d412008 | ||
|
|
aa9c6062b0 | ||
|
|
5fb39658f1 | ||
|
|
95637fd153 | ||
|
|
5ac72211cd | ||
|
|
94525d3952 | ||
|
|
7f9a2f8adb | ||
|
|
cd0e92878f | ||
|
|
9033f07724 | ||
|
|
b7d0890bc0 | ||
|
|
b2b079a26b | ||
|
|
b886dfae4d | ||
|
|
902fbb3347 | ||
|
|
9f16c798d0 | ||
|
|
318f80d113 | ||
|
|
9df8b32f10 | ||
|
|
6f37f5752b | ||
|
|
9d0a71f245 | ||
|
|
ff1b435232 | ||
|
|
b57a272f67 | ||
|
|
ef79647e85 | ||
|
|
d3fd89552f | ||
|
|
6d43e70a93 | ||
|
|
e8333316ee | ||
|
|
85edcb858d | ||
|
|
bab5f1a93f | ||
|
|
6de8303df8 | ||
|
|
33b4114534 | ||
|
|
7a4457402f | ||
|
|
9056dcaf7d | ||
|
|
2119e4fd3e | ||
|
|
bcd5190f1d | ||
|
|
d705a92e43 | ||
|
|
614b3634d4 | ||
|
|
b234f4307f | ||
|
|
e38c213ee0 | ||
|
|
699f41e114 | ||
|
|
424e1363ed | ||
|
|
7484bc31b4 | ||
|
|
5a495cc165 | ||
|
|
9ff4717738 | ||
|
|
0c1740982d | ||
|
|
3c7c0515d8 | ||
|
|
56cb92fdaf | ||
|
|
c00b6ff999 | ||
|
|
df5cc3f0f6 | ||
|
|
eb0ff32efb | ||
|
|
cf0120e8e0 | ||
|
|
1f47dc990d | ||
|
|
9a5bcc6db0 | ||
|
|
492b20a89d | ||
|
|
fcfc8bacc0 | ||
|
|
0800d9427c | ||
|
|
4e113a7086 | ||
|
|
39f422ded8 | ||
|
|
d2cdaa041c | ||
|
|
d84dae488e | ||
|
|
79e75bfbb9 | ||
|
|
73b15c1bee | ||
|
|
b180604422 | ||
|
|
fab12ef241 | ||
|
|
917881aa48 | ||
|
|
9259e989a4 | ||
|
|
da90f484aa | ||
|
|
817e912025 | ||
|
|
7f83d38bca | ||
|
|
54de8b8e77 | ||
|
|
796956970e | ||
|
|
c0020142da | ||
|
|
ee6eea95af | ||
|
|
a257504ba4 | ||
|
|
fb0dbce15b | ||
|
|
8333551331 | ||
|
|
292d794806 | ||
|
|
91ce76af9d | ||
|
|
33bd9e80bb | ||
|
|
d310f3e9b7 | ||
|
|
8c832f4c50 | ||
|
|
31bad5f7af | ||
|
|
1cf7f3d87c | ||
|
|
9c9a9ccd5c | ||
|
|
7381236de6 | ||
|
|
fe9ffcb9d2 | ||
|
|
bea5681fd8 | ||
|
|
e11229494e | ||
|
|
ccc0fcb5b7 | ||
|
|
6e24381962 | ||
|
|
3ab905644d | ||
|
|
f46d545307 | ||
|
|
8134b0073b | ||
|
|
6ab19c7ef2 | ||
|
|
d22361f7c7 | ||
|
|
06c7e55188 | ||
|
|
b3eb8489f3 | ||
|
|
5431fca99b | ||
|
|
47c9d6ac64 | ||
|
|
d0157af13e | ||
|
|
fc04620519 | ||
|
|
d4ee165253 | ||
|
|
4f7f577a57 | ||
|
|
612def5c11 | ||
|
|
704825be96 | ||
|
|
b8be7ec90e | ||
|
|
a3d71f4b91 | ||
|
|
9250819b75 | ||
|
|
04738636ca | ||
|
|
33f67d418f | ||
|
|
07d1b3780d | ||
|
|
27d68d8fdd | ||
|
|
546b773b21 | ||
|
|
15dcaeda0f | ||
|
|
8f42ba13ef | ||
|
|
5990017d51 | ||
|
|
3197c0fd7d | ||
|
|
4580c685f1 | ||
|
|
67232453d4 | ||
|
|
b4cce80727 | ||
|
|
89a2e5ded3 | ||
|
|
9d6b4f46d4 | ||
|
|
a4019cb6aa | ||
|
|
b0703b92c3 | ||
|
|
d29bdf3e81 | ||
|
|
dd9fd3d8a7 | ||
|
|
cf0c59864f | ||
|
|
4c0404c70d | ||
|
|
573a413ee1 | ||
|
|
f633e6ca49 | ||
|
|
07b06d76be | ||
|
|
501a4af914 | ||
|
|
dad7d7e798 | ||
|
|
4b94ae8040 | ||
|
|
b04679b429 | ||
|
|
19358d1c42 | ||
|
|
8679074be7 | ||
|
|
ba09e22c30 | ||
|
|
6515b9727d | ||
|
|
4af8e5bdb5 | ||
|
|
2db8cf477b | ||
|
|
3cfefa53f7 | ||
|
|
bce89feb13 | ||
|
|
88f5220acf | ||
|
|
3e87ac75a1 | ||
|
|
9237f2a80c | ||
|
|
61aca389c4 | ||
|
|
80438c4876 | ||
|
|
70ac4fa96b | ||
|
|
6e2b348758 | ||
|
|
5ed5d7fe60 | ||
|
|
856fe2da15 | ||
|
|
f82aae65cd | ||
|
|
3fbd11a104 | ||
|
|
58a99f1907 | ||
|
|
613dd67784 | ||
|
|
58683f02ec | ||
|
|
7cb82fe8f3 | ||
|
|
0494779ecb | ||
|
|
0500990d23 | ||
|
|
22a82f1eaa | ||
|
|
13b04dc908 | ||
|
|
011106b517 | ||
|
|
7467b85019 | ||
|
|
7dea615f74 | ||
|
|
3010d182fc | ||
|
|
a72a02f0f2 | ||
|
|
614df96382 | ||
|
|
669d7a6feb | ||
|
|
d600b937f1 | ||
|
|
ae713cb099 | ||
|
|
979f1b6c39 | ||
|
|
cf86dfd317 | ||
|
|
a057b4f6d8 | ||
|
|
62b03cfddf | ||
|
|
18b827b979 | ||
|
|
0a379fc514 | ||
|
|
445c11b8d9 | ||
|
|
1fa1790da5 | ||
|
|
dd29e6e475 | ||
|
|
ae4b30a697 | ||
|
|
353299168a | ||
|
|
a50b2c3b85 | ||
|
|
ebecee3d85 | ||
|
|
194f733ca7 | ||
|
|
3907ddbcc4 | ||
|
|
e616be0a42 | ||
|
|
5eef146871 | ||
|
|
2e65686fc0 | ||
|
|
e5847f1ddf | ||
|
|
86d05e98e5 | ||
|
|
8d290ad509 | ||
|
|
b90c48b50f | ||
|
|
d19e7db09e | ||
|
|
9939904b02 | ||
|
|
ca23b15f5c | ||
|
|
ffa676f577 | ||
|
|
6d023c4df3 | ||
|
|
b31bd37a30 | ||
|
|
78faee8c7c | ||
|
|
40e2a703d0 | ||
|
|
b01edcb9bc | ||
|
|
cdd2d4cc1d | ||
|
|
3bcabad28c | ||
|
|
c629ac7168 | ||
|
|
0195d5590f | ||
|
|
e7bebb0089 | ||
|
|
7b05df8d33 | ||
|
|
a8db9ae304 | ||
|
|
e6e9b2041e | ||
|
|
77c747a8fd | ||
|
|
907fb257cd | ||
|
|
60bd60db03 | ||
|
|
0fcc28a108 | ||
|
|
ab8005f03e | ||
|
|
5e8f578e78 | ||
|
|
a4b1633e11 | ||
|
|
fea211a109 | ||
|
|
59e4f1ee0f | ||
|
|
86a0a42a8d | ||
|
|
662842126d | ||
|
|
66e3801b1e | ||
|
|
a30cf60422 | ||
|
|
c2b8b818c7 | ||
|
|
4284b0e2b8 | ||
|
|
9def9b35b9 | ||
|
|
377a2860cc | ||
|
|
0a3a5a7c65 | ||
|
|
f7fffc9be8 | ||
|
|
50e8634097 | ||
|
|
e3994e517e | ||
|
|
2bb7785189 | ||
|
|
90c8408111 | ||
|
|
64786ec12a | ||
|
|
b3c82f8886 | ||
|
|
063259dc52 | ||
|
|
c5996c0593 | ||
|
|
cde5a07981 | ||
|
|
4faef28cc5 | ||
|
|
b4c9d9c2a7 | ||
|
|
fa2b59df4b | ||
|
|
f41a169460 | ||
|
|
f567083006 | ||
|
|
a2a677e539 | ||
|
|
9123c0b733 | ||
|
|
788e3b31e1 | ||
|
|
71f0ed8b74 | ||
|
|
89b900432e | ||
|
|
8bb9d0960b | ||
|
|
59181ac5fb | ||
|
|
2a831fa547 | ||
|
|
4abadc890e | ||
|
|
b0ce551523 | ||
|
|
8b0269c264 | ||
|
|
ac2e4e593d | ||
|
|
edaa7d7748 | ||
|
|
3cdf965fba | ||
|
|
6b60d1e71f | ||
|
|
d68772d45a | ||
|
|
52cb425e33 | ||
|
|
ed3220f37f | ||
|
|
043cbec68f | ||
|
|
7d7217ef89 | ||
|
|
67c709170d | ||
|
|
f6e428ac22 | ||
|
|
45fbafae94 | ||
|
|
803b73a34b | ||
|
|
7b7fb5acd5 | ||
|
|
b1512201ab | ||
|
|
424e9cbc43 | ||
|
|
95b62a843a | ||
|
|
ccb4f44caf | ||
|
|
c788c76dc9 | ||
|
|
2e4e1c7f48 | ||
|
|
0a7d612f41 | ||
|
|
38da76bbe0 | ||
|
|
a13e045742 | ||
|
|
811620c0a0 | ||
|
|
504f5f7bdd | ||
|
|
f85d4d28d1 | ||
|
|
b4e4bdcda9 | ||
|
|
dae8b78569 | ||
|
|
32bcad51b8 | ||
|
|
e26d49efb7 | ||
|
|
a40510c241 | ||
|
|
ac8dce6599 | ||
|
|
190d525099 | ||
|
|
1b6666fa39 | ||
|
|
1dd01c99e8 | ||
|
|
d50b30a498 | ||
|
|
42a3a87f13 | ||
|
|
9dfedbe619 | ||
|
|
88957b4c9d | ||
|
|
b2f2c9322b | ||
|
|
3be2051808 | ||
|
|
ff32b0dc9b | ||
|
|
c1869a11af | ||
|
|
e22a4fdba4 | ||
|
|
29a7b2c5b5 | ||
|
|
3b6c285c2a | ||
|
|
e9e853b19a | ||
|
|
e48ea5f23a | ||
|
|
a99bab935a | ||
|
|
3eee35e1f7 | ||
|
|
c7396b0675 | ||
|
|
e3ee60e7af | ||
|
|
05b8ddac4c | ||
|
|
668724de4e | ||
|
|
71ce1a25dd | ||
|
|
cd522f524d | ||
|
|
ca559b1db6 | ||
|
|
a8e76fb345 | ||
|
|
1d445d1039 | ||
|
|
29d03ab937 | ||
|
|
575d1786af | ||
|
|
bc1c927952 | ||
|
|
f95bc85f91 | ||
|
|
4015195314 | ||
|
|
c3d883c6cb | ||
|
|
097e30321b | ||
|
|
b6ddeaacf2 | ||
|
|
b0c60ec124 | ||
|
|
46aa4d2f91 | ||
|
|
d0b4bd08e1 | ||
|
|
512e81c629 | ||
|
|
452666f742 | ||
|
|
72008d951b | ||
|
|
72146e7800 | ||
|
|
f7af1bb8e2 | ||
|
|
f88f1fca3f | ||
|
|
26e4a40cc7 | ||
|
|
8b1931072a | ||
|
|
45e15b6cc6 | ||
|
|
be7e52c882 | ||
|
|
4162ce0bc5 | ||
|
|
7e46277016 | ||
|
|
f3b788703e | ||
|
|
4bb83781e8 | ||
|
|
a73195b7cc | ||
|
|
1bd00b8a9a | ||
|
|
d84eaeafc5 | ||
|
|
3b84b99804 | ||
|
|
1786f9b1bb | ||
|
|
1e972174a6 | ||
|
|
77178e0590 | ||
|
|
9a909d9f27 | ||
|
|
90d25a40a0 | ||
|
|
c335f18be7 | ||
|
|
7dc3e73782 | ||
|
|
47dffe66aa | ||
|
|
6636c69a11 | ||
|
|
0ccaf4a1ff | ||
|
|
5cdbad7937 | ||
|
|
fc0508c047 | ||
|
|
78ca5491e6 | ||
|
|
4146475c73 | ||
|
|
329c3ab21b | ||
|
|
3b7f6641d2 | ||
|
|
781487c4dd | ||
|
|
5ba5bc8ba1 | ||
|
|
82c66ce078 | ||
|
|
9324fbf921 | ||
|
|
5e081de14a | ||
|
|
d1456ae039 | ||
|
|
115af4f565 | ||
|
|
822724d1aa | ||
|
|
87c9856b20 | ||
|
|
835136dcd3 | ||
|
|
4a80e9cb25 | ||
|
|
de80c270bd | ||
|
|
b92bff2658 | ||
|
|
42f1e26540 | ||
|
|
cfd056231b | ||
|
|
20ae84bff9 | ||
|
|
b1c7649edb | ||
|
|
853740f1e2 | ||
|
|
14986b153a | ||
|
|
9e503b21c1 | ||
|
|
67a958a326 | ||
|
|
7372c931b3 | ||
|
|
29e1b6e465 | ||
|
|
eda06993f8 | ||
|
|
4b30ef1cf2 | ||
|
|
e92e5e8eb8 | ||
|
|
4e5271fcdf | ||
|
|
3c55487a16 | ||
|
|
76a1cae5d8 | ||
|
|
3850716522 | ||
|
|
1e0a60e73d | ||
|
|
e9c99e0518 | ||
|
|
332baa4f67 | ||
|
|
08879d2a20 | ||
|
|
1292af4768 | ||
|
|
4d88a099f9 | ||
|
|
777e15bd78 | ||
|
|
f689e28958 | ||
|
|
d184231169 | ||
|
|
7225e919fc | ||
|
|
7a185f1ead | ||
|
|
c1fa5279f4 | ||
|
|
4f0fe66f69 | ||
|
|
76380b2b45 | ||
|
|
67b7d46432 | ||
|
|
29453ba196 | ||
|
|
599d77643b | ||
|
|
09d87d5ef1 | ||
|
|
2f3f075e4f | ||
|
|
17097d96b7 | ||
|
|
a3e28c2d1a | ||
|
|
03a97d87ea | ||
|
|
8cbf099054 | ||
|
|
c287452255 | ||
|
|
07ce915c66 | ||
|
|
81a97315e3 | ||
|
|
53c14d97a6 | ||
|
|
69a82eec17 | ||
|
|
45cadef22f | ||
|
|
73f58c57e8 | ||
|
|
43348a3e13 | ||
|
|
e716b1f4d7 | ||
|
|
82e74a4ebd | ||
|
|
16b260e371 | ||
|
|
3102e05da4 | ||
|
|
df4af2b550 | ||
|
|
0a033fb10a | ||
|
|
591afa0647 | ||
|
|
05eac20ffe | ||
|
|
38d263ac19 | ||
|
|
f71c204eef | ||
|
|
51147203be | ||
|
|
a931686317 | ||
|
|
5bd322bdcf | ||
|
|
bb097109f0 | ||
|
|
97132e3d38 | ||
|
|
5ad1fe77b1 | ||
|
|
8d4ed1e988 | ||
|
|
add953fb6e | ||
|
|
3854211694 | ||
|
|
58ac72f79d | ||
|
|
6d5904801e | ||
|
|
d4993c405e | ||
|
|
7af8e3937f | ||
|
|
f8eeded528 | ||
|
|
c3fa7e13cf | ||
|
|
5c18b0a94d | ||
|
|
ecbad638f1 | ||
|
|
611ce6e756 | ||
|
|
4140e9b857 | ||
|
|
8fd9d91974 | ||
|
|
d3f35dab1e | ||
|
|
487e2618cd | ||
|
|
30d5186db4 | ||
|
|
cbe59714d4 | ||
|
|
704a28ca17 | ||
|
|
8d70d10aba | ||
|
|
ddd8b16f2b | ||
|
|
b79ce77ec5 | ||
|
|
fead4bbfd9 | ||
|
|
872ecc1aed | ||
|
|
2ab6c40ff1 | ||
|
|
68bb738af2 | ||
|
|
6b968beede | ||
|
|
f68dd1bffb | ||
|
|
f92b71ca99 | ||
|
|
2b79fe2d6a | ||
|
|
44dd9af276 | ||
|
|
d3013d4f8c | ||
|
|
678524ad21 | ||
|
|
32a64481f2 | ||
|
|
1776015c6c | ||
|
|
f1c71a26e3 | ||
|
|
e78ab767d3 | ||
|
|
f01eb2f95d | ||
|
|
1450e45d97 | ||
|
|
ec8cba369c | ||
|
|
f4c248f406 | ||
|
|
f3b2a58646 | ||
|
|
c6f89c42b2 | ||
|
|
5e93cfdd9e | ||
|
|
d91d5a3ab5 | ||
|
|
907c045f33 | ||
|
|
90f189eb54 | ||
|
|
4abd5b2112 | ||
|
|
df9a665994 | ||
|
|
7a098ca0ed | ||
|
|
33716732a1 | ||
|
|
97ae594375 | ||
|
|
3f321ae9a0 | ||
|
|
161d32a7e7 | ||
|
|
d7137586a9 | ||
|
|
cd0c06ba6e | ||
|
|
899ab63d91 | ||
|
|
1097820a5a | ||
|
|
39114f91a7 | ||
|
|
4f01387edf | ||
|
|
de3e0585f1 | ||
|
|
f85f25ba82 | ||
|
|
10a2c179f9 | ||
|
|
6eea56861b | ||
|
|
21fd2064ae | ||
|
|
dcbab8e37a | ||
|
|
5677278251 | ||
|
|
a83bee993d | ||
|
|
96a31f554a | ||
|
|
d14ec6aea5 | ||
|
|
917cedf893 | ||
|
|
193dd71600 | ||
|
|
6c293a3d7f | ||
|
|
e847ddf011 | ||
|
|
7e8b448985 | ||
|
|
d1f3a87c08 | ||
|
|
9f8145e590 | ||
|
|
791efc171a | ||
|
|
144312a525 | ||
|
|
92684112ed | ||
|
|
ef114ee6cb | ||
|
|
667f209742 | ||
|
|
4ad0747c78 | ||
|
|
c5cf66402c | ||
|
|
05417049eb | ||
|
|
c7b0c46d9f | ||
|
|
df578c91ad | ||
|
|
70008c47c9 | ||
|
|
938affef32 | ||
|
|
a3c33000ee | ||
|
|
1e54b7b294 | ||
|
|
cc0dbcf3f4 | ||
|
|
c5a2cadccc | ||
|
|
9aa43416b6 | ||
|
|
8364029db8 | ||
|
|
d842d21be0 | ||
|
|
3514fd2433 | ||
|
|
6778ff27ea | ||
|
|
f32315d699 | ||
|
|
8b754b24b6 | ||
|
|
b1bee9ff38 | ||
|
|
569be2d402 | ||
|
|
78a73eac53 | ||
|
|
533cb99c33 | ||
|
|
79726940dc | ||
|
|
27c7891169 | ||
|
|
7a3a793a12 | ||
|
|
8088469eca | ||
|
|
3dcb082015 | ||
|
|
bece023028 | ||
|
|
9c4df66925 | ||
|
|
2b43ceb6c6 | ||
|
|
c143adba91 | ||
|
|
142fdc8d86 | ||
|
|
67778dcd3d | ||
|
|
ed80863eac | ||
|
|
c3fc84de12 | ||
|
|
904f83cd85 | ||
|
|
28bf100a50 | ||
|
|
accbd4e82a | ||
|
|
d7f478c154 | ||
|
|
8f7f13fea4 | ||
|
|
c82b03a74c | ||
|
|
58fb36bdb9 | ||
|
|
4297a7b0a4 | ||
|
|
1bab6d0dd7 | ||
|
|
13b85edbe2 | ||
|
|
dc53098e43 | ||
|
|
3c66feff5a | ||
|
|
218c3bc0d5 | ||
|
|
9f5eddcd13 | ||
|
|
3cba76552b | ||
|
|
e98a8b624b | ||
|
|
6c6947b01f | ||
|
|
78c91e9e5b | ||
|
|
44493ca0c4 | ||
|
|
42acf78b09 | ||
|
|
3aa9f8af18 | ||
|
|
8a32ee30a5 | ||
|
|
981dc0626b | ||
|
|
8986d14e98 | ||
|
|
5163b1a624 | ||
|
|
860aa9d6d0 | ||
|
|
64dc5212f9 | ||
|
|
6cff3214f3 | ||
|
|
fd910bd5e9 | ||
|
|
c6086bed41 | ||
|
|
1a9dfdfab8 | ||
|
|
5284cd11a9 | ||
|
|
d1a47cffad | ||
|
|
f469595eee | ||
|
|
9cfc52f114 | ||
|
|
30bfb756c2 | ||
|
|
711f85445e | ||
|
|
8aae9766e5 | ||
|
|
288b98ccbf | ||
|
|
bde50b1be8 | ||
|
|
a34dfd55be | ||
|
|
609c1d4d4c | ||
|
|
c12fe09969 | ||
|
|
bd14afe347 | ||
|
|
f445a13051 | ||
|
|
8ddf607d9f | ||
|
|
5900253b85 | ||
|
|
ccec94925f | ||
|
|
4504a9d0b5 | ||
|
|
057f98ad45 | ||
|
|
3b1c9aa026 | ||
|
|
658397dc38 | ||
|
|
0cd1c8e23e | ||
|
|
0345c1e6f8 | ||
|
|
f6c4cda0d4 | ||
|
|
39fd713b91 | ||
|
|
31d77ec580 | ||
|
|
06116382ee | ||
|
|
d2046de193 | ||
|
|
4397fe3a13 | ||
|
|
534e1fa6eb | ||
|
|
3e8cc2c670 | ||
|
|
3c565baf9d | ||
|
|
2e182e84c3 | ||
|
|
a42021655c | ||
|
|
2498a2b0bd | ||
|
|
4484411a77 | ||
|
|
61a151c803 | ||
|
|
5149c950aa | ||
|
|
18f4d846c9 | ||
|
|
db95aa250d | ||
|
|
982d1bf662 | ||
|
|
a0393e9ddf | ||
|
|
a8d6328bd4 | ||
|
|
13dab13319 | ||
|
|
c623aa0f06 | ||
|
|
79403afbe6 | ||
|
|
4c650e87fa | ||
|
|
3dde62befe | ||
|
|
8bfabbe265 | ||
|
|
e334b16aaa | ||
|
|
5626ace245 | ||
|
|
52652cb609 | ||
|
|
256f40d4f5 | ||
|
|
ef9acc54ec | ||
|
|
a9f2d25957 | ||
|
|
6fc47fbb69 | ||
|
|
9c11184238 | ||
|
|
a421c1dbfb | ||
|
|
7ec707927d | ||
|
|
837134daef | ||
|
|
4011899846 | ||
|
|
28e743ba70 | ||
|
|
a161d404ad | ||
|
|
cd607cb280 | ||
|
|
4e60ab7f53 | ||
|
|
71e7d32b08 | ||
|
|
d5e422970c | ||
|
|
871ba5a488 | ||
|
|
249e8d59cb | ||
|
|
8f4769d2ac | ||
|
|
a3ca9963a5 | ||
|
|
2d3c23876c | ||
|
|
bd8d8eef3e | ||
|
|
e786207cc2 | ||
|
|
b042095ac2 | ||
|
|
3413d1bf23 | ||
|
|
018c5ef731 | ||
|
|
fdb136f1fa | ||
|
|
9e33074735 | ||
|
|
d6d465cdf4 | ||
|
|
e76573cc1a | ||
|
|
3fa6dc71e2 | ||
|
|
6fec269844 | ||
|
|
b6004b6837 | ||
|
|
86d3b25aec | ||
|
|
8a407bfbb0 | ||
|
|
d30a590d9e | ||
|
|
f95e404be1 | ||
|
|
ffb8b4fc68 | ||
|
|
f86d6b0162 | ||
|
|
71c72ed072 | ||
|
|
a8d343e07b | ||
|
|
d020172181 | ||
|
|
e5c9f6c1fe | ||
|
|
176dc11748 | ||
|
|
c2abd02b9b | ||
|
|
12ecfdd423 | ||
|
|
67cfbfc2f3 | ||
|
|
fc83d38e67 | ||
|
|
7063c423eb | ||
|
|
36b93993cf | ||
|
|
ceffc5aa72 | ||
|
|
ccb45b6f6e | ||
|
|
d2e47e014a | ||
|
|
a5b8d7917f | ||
|
|
d0e735ee4b | ||
|
|
ece5971027 | ||
|
|
7c6b0d5c31 | ||
|
|
03151310cf | ||
|
|
baa2bc0c38 | ||
|
|
7e1b53480e | ||
|
|
6425b4f9f5 | ||
|
|
fb907f5f76 | ||
|
|
b107a1583f | ||
|
|
ced3f320eb | ||
|
|
a9d7293818 | ||
|
|
add42e9edf | ||
|
|
265ad4b96a | ||
|
|
92eeb4969f | ||
|
|
6fcddaf8fa | ||
|
|
41fd583fbc | ||
|
|
ceba6816de | ||
|
|
093cb475bb | ||
|
|
d44790b35f | ||
|
|
f8164a3dd1 | ||
|
|
c20126598f | ||
|
|
6c818bb37a | ||
|
|
8cb160b1f8 | ||
|
|
df91f3738a | ||
|
|
b5b268f606 | ||
|
|
ce6b8c94a2 | ||
|
|
6e643fe58b | ||
|
|
2bf91a0487 | ||
|
|
2775d747ac | ||
|
|
99659e4cf9 | ||
|
|
3bbcda917c | ||
|
|
7e43fb79af | ||
|
|
eb2b567da6 | ||
|
|
ab332d7b2e | ||
|
|
53e22b81ef | ||
|
|
3fc9d50adb | ||
|
|
c2da6dd45b | ||
|
|
7146f825b2 | ||
|
|
f61a5f5200 | ||
|
|
dc05dd7ca1 | ||
|
|
57dd344f3b | ||
|
|
f7f59df8aa | ||
|
|
0525a6f90f | ||
|
|
7b4305d81b | ||
|
|
94e9e93fa4 | ||
|
|
d2a1294e9a | ||
|
|
3d897f18cd | ||
|
|
68c14d1e53 | ||
|
|
48089394a5 | ||
|
|
30bd190b41 | ||
|
|
cf93cd9307 | ||
|
|
f40816e063 | ||
|
|
3759f29852 | ||
|
|
bc5555933f | ||
|
|
ead7ae8504 | ||
|
|
ad5abba8c6 | ||
|
|
61296cedd2 | ||
|
|
d9c29a2c4f | ||
|
|
f5172e6b84 | ||
|
|
544bcbe903 | ||
|
|
f35dab1b56 | ||
|
|
caee420087 | ||
|
|
e8c374113e | ||
|
|
98a241a730 | ||
|
|
be8297d6f6 | ||
|
|
09da80e9f4 | ||
|
|
df4ecf63a8 | ||
|
|
b4d1937857 | ||
|
|
0be5fbdc35 | ||
|
|
ae7e25ea65 | ||
|
|
fef45d469c | ||
|
|
e7353ec7e7 | ||
|
|
e3237f057d | ||
|
|
54d5d9d1cc | ||
|
|
31d9aebf0b | ||
|
|
5013de6770 | ||
|
|
301abac0c1 | ||
|
|
9614c48e4c | ||
|
|
c6e1ca1c22 | ||
|
|
30dc473697 | ||
|
|
65974ceabc | ||
|
|
6caf53d1c2 | ||
|
|
dee6e498d9 | ||
|
|
b3723274f7 | ||
|
|
9fb7cc796b | ||
|
|
3472208c05 | ||
|
|
fc30e1d559 | ||
|
|
cd4bb444ff | ||
|
|
e443513996 | ||
|
|
3d16f22135 | ||
|
|
6cc1ff5eeb | ||
|
|
3000b9dcde | ||
|
|
3b867462a3 | ||
|
|
b8aa9348b9 | ||
|
|
513e3a3d21 | ||
|
|
bfb0897b54 | ||
|
|
86e8b8c10d | ||
|
|
ee57c3490a | ||
|
|
77c1f54876 | ||
|
|
dc5984d0e0 | ||
|
|
7afbd4800f | ||
|
|
0720702c91 | ||
|
|
5f396e824f | ||
|
|
4f229c254c | ||
|
|
25e58df5e0 | ||
|
|
1261327fa6 | ||
|
|
09c3cc58e4 | ||
|
|
7ef31f84a7 | ||
|
|
85c2b396ce | ||
|
|
0759d72108 | ||
|
|
9b9144f25d | ||
|
|
b677e891b4 | ||
|
|
509f62f68d | ||
|
|
868bf752f3 | ||
|
|
051cdc9670 | ||
|
|
4de5c216ff | ||
|
|
ad2c7304ea | ||
|
|
4dd1309c3f | ||
|
|
541da2740d | ||
|
|
95e2bec215 | ||
|
|
72c96052b4 | ||
|
|
2ab168735f | ||
|
|
85cdf05890 | ||
|
|
bf78b7f815 | ||
|
|
ffb9874d84 | ||
|
|
228cdbe6af | ||
|
|
a303639c9e | ||
|
|
c5133f6088 | ||
|
|
27d368d48d | ||
|
|
085b599f84 | ||
|
|
3b84eb3b70 | ||
|
|
aa877a29d7 | ||
|
|
0abee77e62 | ||
|
|
114fcee2ae | ||
|
|
b488204093 | ||
|
|
322bfbaf57 | ||
|
|
2718f4c333 | ||
|
|
8c342a764b | ||
|
|
697c3f8cb9 | ||
|
|
bb292f501d | ||
|
|
723e54f74e | ||
|
|
1a8c96a3f0 | ||
|
|
a88040e4d5 | ||
|
|
47a0f46ce8 | ||
|
|
66fb352cca | ||
|
|
fd77acc217 | ||
|
|
595d1942cb | ||
|
|
b905933999 | ||
|
|
219a756abc | ||
|
|
2f76f9da89 | ||
|
|
b0b8f573bc | ||
|
|
746aa6cc0f | ||
|
|
fac610d47b | ||
|
|
93209da176 | ||
|
|
35a2a48c47 | ||
|
|
7019f6bea4 | ||
|
|
8bde47280a | ||
|
|
521c6da830 | ||
|
|
5c3e55b5b1 | ||
|
|
22dcca9832 | ||
|
|
db6c0d54cf | ||
|
|
a17abc5557 | ||
|
|
741c6f1179 | ||
|
|
43b285ef7a | ||
|
|
f4bb18b05e | ||
|
|
14885f25b4 | ||
|
|
4e16ea0f0a | ||
|
|
42a696873b | ||
|
|
cfd51db229 | ||
|
|
12f11c97ae | ||
|
|
6a78d11127 | ||
|
|
256ee7a8c7 | ||
|
|
07a51957ee | ||
|
|
37c4470f10 | ||
|
|
4dc7d1c0cd | ||
|
|
f6a85f0b0b | ||
|
|
5b8b660bd0 | ||
|
|
d9cb85df83 | ||
|
|
445e82be75 | ||
|
|
98a12c49dd | ||
|
|
b78cc7e48a | ||
|
|
ac9ce0b3ad | ||
|
|
cf2b814629 | ||
|
|
bbe7a37359 | ||
|
|
d0aa154ea6 | ||
|
|
df4616ae4a | ||
|
|
10f62db9fd | ||
|
|
5c075210d6 | ||
|
|
0cf85b0771 | ||
|
|
fa90047e52 | ||
|
|
b9f64fe19b | ||
|
|
dd072912e8 | ||
|
|
9dbdc75689 | ||
|
|
dce211dbba | ||
|
|
b4e5fa5c1b | ||
|
|
f12fa7e20a | ||
|
|
96f8f1da0c | ||
|
|
db7eec042e | ||
|
|
52aed3f8a1 | ||
|
|
cadd186f1b | ||
|
|
dd9ab16d67 | ||
|
|
d8b6aff23a | ||
|
|
b8aac3f8fc | ||
|
|
4aab97ccb1 | ||
|
|
4cd21f1e07 | ||
|
|
403f0f8c64 | ||
|
|
8c4246f2ad | ||
|
|
1859ba5ec8 | ||
|
|
54d5184255 | ||
|
|
0c5b986fc4 | ||
|
|
7b2cdd618e | ||
|
|
30bb3f1fcb | ||
|
|
b45ea66175 | ||
|
|
543c5034af | ||
|
|
c8aa7afdc6 | ||
|
|
b35bb1b50c | ||
|
|
6341be9cdf | ||
|
|
93a14a93f9 | ||
|
|
d6559e2ac9 | ||
|
|
65e6755b8b | ||
|
|
6ead9750f4 | ||
|
|
6532c7e089 | ||
|
|
8b3d934230 | ||
|
|
e2b7c30811 | ||
|
|
c8bb3c0b71 | ||
|
|
9990e8473c | ||
|
|
d765182bbb | ||
|
|
5a63d1d5a4 | ||
|
|
6d409d27ca | ||
|
|
e9c2885f34 | ||
|
|
ecb8f7362b | ||
|
|
17ccfec358 | ||
|
|
a55bb28069 | ||
|
|
a2e3dc0592 | ||
|
|
df142d4f61 | ||
|
|
fac8edd47a | ||
|
|
9a9da7b077 | ||
|
|
131441846b | ||
|
|
3ff728ab02 | ||
|
|
78bf4ef5fa | ||
|
|
318d0b3976 | ||
|
|
90a14e14f4 | ||
|
|
dea46e8d5a | ||
|
|
7e5ce623fe | ||
|
|
e17805f208 | ||
|
|
d8bcdca55a | ||
|
|
f6f2a3b366 | ||
|
|
d52c7e7a1b | ||
|
|
c4acccac14 | ||
|
|
13001c018c | ||
|
|
1b39efb694 | ||
|
|
0c343cb1c3 | ||
|
|
aead221184 | ||
|
|
16d1c9f5d6 | ||
|
|
0c464b24ad | ||
|
|
a249a630c0 | ||
|
|
f39823eac0 | ||
|
|
69de99636f | ||
|
|
afcff1fa77 | ||
|
|
9b5bae049c | ||
|
|
7a3415166e | ||
|
|
5b2b4bf13c | ||
|
|
4bd67bc298 | ||
|
|
1560749579 | ||
|
|
ed68fd4ab3 | ||
|
|
e9a9dabb49 | ||
|
|
31faafea9d | ||
|
|
6961bd61ca | ||
|
|
726fc53e62 | ||
|
|
c598686bd9 | ||
|
|
cab87e9398 | ||
|
|
680037927d | ||
|
|
ee026386e5 | ||
|
|
60f72f0ff9 | ||
|
|
debc855806 | ||
|
|
49c04ccfc7 | ||
|
|
11ba44870b | ||
|
|
f9a64d24bf | ||
|
|
e1a8dcfcc8 | ||
|
|
1ee0e29974 | ||
|
|
10e32454ef | ||
|
|
8d41e9658f | ||
|
|
086652dd50 | ||
|
|
77a9940461 | ||
|
|
9c1c180ae0 | ||
|
|
06682bd2a9 | ||
|
|
6135f0763b | ||
|
|
307964d874 | ||
|
|
f3dd50de87 | ||
|
|
c776bcc5f6 | ||
|
|
4bbc43d91a | ||
|
|
db8b5dc698 | ||
|
|
2f56c61b47 | ||
|
|
1d340e7664 | ||
|
|
ea62bc0bb2 | ||
|
|
8380c3be02 | ||
|
|
6470bcda19 | ||
|
|
2d51349d1d | ||
|
|
2f2b394d72 | ||
|
|
ba181ae9df | ||
|
|
f62546ec79 | ||
|
|
7c251fe190 | ||
|
|
1c155a0d03 | ||
|
|
8f196db778 | ||
|
|
a85455fb3f | ||
|
|
d0302d1bbe | ||
|
|
d73267df5e | ||
|
|
8bbfb5cda1 | ||
|
|
1e17d5b1cc | ||
|
|
f881917d2f | ||
|
|
99244f51b0 | ||
|
|
606d029ed9 | ||
|
|
e4b9d679fb | ||
|
|
2bf2bd8932 | ||
|
|
4a8a33ea85 | ||
|
|
ac4b83046a | ||
|
|
2a2ac35b98 | ||
|
|
8c744efd56 | ||
|
|
597e59f10d | ||
|
|
3cd07d0b54 | ||
|
|
13259225c2 | ||
|
|
7acd91331c | ||
|
|
0fdaca17a2 | ||
|
|
539c0ed171 | ||
|
|
553365b942 | ||
|
|
100308db02 | ||
|
|
ab967462e6 | ||
|
|
1bc553ea62 | ||
|
|
687ea53616 | ||
|
|
220d9528a3 | ||
|
|
fc7d3f64c0 | ||
|
|
63ab7767a3 | ||
|
|
20894d1c5e | ||
|
|
2f03d2234a | ||
|
|
dadf3d846b | ||
|
|
941a9284b9 | ||
|
|
4ee3820bd6 | ||
|
|
c155df5d79 | ||
|
|
33b70567c8 | ||
|
|
720bf51ba6 | ||
|
|
26bdb72428 | ||
|
|
90c8a1b1cf | ||
|
|
3143dbf3dc | ||
|
|
38d587aaeb | ||
|
|
fe9bafa741 | ||
|
|
8092e18158 | ||
|
|
6ed77f2a27 | ||
|
|
a73688a2be | ||
|
|
e7d327226a | ||
|
|
ae1eb9ccde | ||
|
|
860064c812 | ||
|
|
845901ab01 | ||
|
|
25f7360264 | ||
|
|
78ec7d0fe1 | ||
|
|
a1e9678b69 | ||
|
|
be5d629c13 | ||
|
|
957b399e90 | ||
|
|
5e6c164b9f | ||
|
|
5d9a889190 | ||
|
|
a9acc9c971 | ||
|
|
308010794a | ||
|
|
0ce72cbf9d | ||
|
|
6e52ab285a | ||
|
|
3da4648112 | ||
|
|
1897409476 | ||
|
|
c60d65dd8f | ||
|
|
f29949e14d | ||
|
|
75aa98ddaa | ||
|
|
06909f4f00 | ||
|
|
aca081557a | ||
|
|
a71efacd1e | ||
|
|
871063dab7 | ||
|
|
135662d6b0 | ||
|
|
a69c3c1848 | ||
|
|
50e5244e25 | ||
|
|
1c07f197de | ||
|
|
13c32111a0 | ||
|
|
28c6975732 | ||
|
|
12091fcfb1 | ||
|
|
5598826eaf | ||
|
|
3fea624cca | ||
|
|
9007dd9ab7 | ||
|
|
08166cf330 | ||
|
|
e51b6a6233 | ||
|
|
3887465d80 | ||
|
|
d84f96a571 | ||
|
|
f600e226da | ||
|
|
d775f13a03 | ||
|
|
b630afdeda | ||
|
|
c39c259078 | ||
|
|
a571c4ba33 | ||
|
|
889be6e29d | ||
|
|
d15f64ae5d | ||
|
|
a07117ea55 | ||
|
|
d0dae177cf | ||
|
|
d4db873716 | ||
|
|
de0752fd56 | ||
|
|
4204d4928b | ||
|
|
e2f6cc9c9f | ||
|
|
05de0ecec3 | ||
|
|
b05beb000f | ||
|
|
093abaad29 | ||
|
|
e84e4169f9 | ||
|
|
cd6c5cfd4c | ||
|
|
b855f2fcc2 | ||
|
|
ba69ade024 | ||
|
|
8748b2dc3f | ||
|
|
5f66af3712 | ||
|
|
31ae50b137 | ||
|
|
87e0459fcc | ||
|
|
07e58ae64f | ||
|
|
a88d18148c | ||
|
|
1cf43a9dc9 | ||
|
|
196ce8426b | ||
|
|
6a95c34a81 | ||
|
|
ea0e6d9824 | ||
|
|
14d3da0e18 | ||
|
|
b6b8fb7d73 | ||
|
|
2bca3cd247 | ||
|
|
22a353b8e3 | ||
|
|
743fa73a01 | ||
|
|
a546bfe7d9 | ||
|
|
25deae6cc7 | ||
|
|
62000670e3 | ||
|
|
ac49043fbb | ||
|
|
37a7ca7f14 | ||
|
|
4d6192adcd | ||
|
|
9f1ada898e | ||
|
|
5617521380 | ||
|
|
9835a2545d | ||
|
|
c28cefeeb0 | ||
|
|
afd5b750dc | ||
|
|
2b97b124bd | ||
|
|
d042ab87da | ||
|
|
588303b78d | ||
|
|
36704c5e18 | ||
|
|
21d747cd36 | ||
|
|
ef3494f160 | ||
|
|
2dc6c4a496 | ||
|
|
5834843b8a | ||
|
|
2777a23672 | ||
|
|
32afd92d30 | ||
|
|
762f3afb9d | ||
|
|
7fb2f15a1a | ||
|
|
7456dccd3a | ||
|
|
245f41bb7e | ||
|
|
9bfb844cfa | ||
|
|
d790d3ba3c | ||
|
|
c3dbc92766 | ||
|
|
0bd25f1e17 | ||
|
|
a4cd7411e8 | ||
|
|
bf276f6235 | ||
|
|
d916890a8f | ||
|
|
071cacc9a4 | ||
|
|
33f33323af | ||
|
|
388fae2c47 | ||
|
|
9f878b77e9 | ||
|
|
a547d2aaba | ||
|
|
c013026821 | ||
|
|
96b48a2404 | ||
|
|
9612975c2c | ||
|
|
41bfd45a2e | ||
|
|
bbdcbd1f08 | ||
|
|
6b3c525a9d | ||
|
|
83aed7051c | ||
|
|
77c6e45e65 | ||
|
|
8825393660 | ||
|
|
2b9246c6ad | ||
|
|
a9edb4de28 | ||
|
|
a076ddf38c | ||
|
|
0c809fbb40 | ||
|
|
cafc266e0b | ||
|
|
a3d020eff9 | ||
|
|
8412d94d05 | ||
|
|
d1c5bb956a | ||
|
|
70986bc120 | ||
|
|
f31fe8b865 | ||
|
|
142a9fe530 | ||
|
|
4dd2ad9b27 | ||
|
|
62f7375804 | ||
|
|
543296b5ba | ||
|
|
5fee130d00 | ||
|
|
073facea70 | ||
|
|
dbe3b6eee4 | ||
|
|
df97049647 | ||
|
|
42c5f68362 | ||
|
|
cc19e760cf | ||
|
|
0ff22a16fa | ||
|
|
47360ec906 | ||
|
|
087a9938d2 | ||
|
|
26d8e41a6b | ||
|
|
750ae1d3f3 | ||
|
|
f8a9a7a108 | ||
|
|
eb192137d6 | ||
|
|
c25b464f37 | ||
|
|
710b48d410 | ||
|
|
5e77a8199d | ||
|
|
6637db086b | ||
|
|
a271a55da7 | ||
|
|
6eeec6cbfa | ||
|
|
5e3f3b0400 | ||
|
|
923c402f69 | ||
|
|
4fed0b991c | ||
|
|
ad80acb22a | ||
|
|
bd8414f8ea | ||
|
|
2eb467c788 | ||
|
|
c436e29b89 | ||
|
|
44219d5e91 | ||
|
|
b9de3270f6 | ||
|
|
590d6faeb0 | ||
|
|
62e96e9a58 | ||
|
|
1c818ef0a0 | ||
|
|
d6ce2e3671 | ||
|
|
85b6a52662 | ||
|
|
0246082b9b | ||
|
|
3b031c6ba5 | ||
|
|
74740ca50b | ||
|
|
631baa7120 | ||
|
|
657d6edff7 | ||
|
|
737c5a9549 | ||
|
|
c5fb56f90f | ||
|
|
4cd9abe632 | ||
|
|
b67e7df38e | ||
|
|
f28c746b6b | ||
|
|
ab95027fc6 | ||
|
|
ed3bc4ab63 | ||
|
|
68064f1aa6 | ||
|
|
475ac76a5f | ||
|
|
79d4f8674c | ||
|
|
e42eed4d4c | ||
|
|
4a7042e847 | ||
|
|
7f36923eb4 | ||
|
|
2ca8d69126 | ||
|
|
70367d70c8 | ||
|
|
e068d62ac6 | ||
|
|
e6389ff5a1 | ||
|
|
b46cf57d98 | ||
|
|
6f59d71e07 | ||
|
|
f9130f42a2 | ||
|
|
faf2eeaa99 | ||
|
|
1c7de0b4ac | ||
|
|
58487e484f | ||
|
|
104075f3e0 | ||
|
|
b8097eaf2e | ||
|
|
5eb0cbc887 | ||
|
|
1a4a6f3807 | ||
|
|
a012b25335 | ||
|
|
46e8b137e9 | ||
|
|
4b25c5e8d6 | ||
|
|
2fdbae3e1f | ||
|
|
87e06793c2 | ||
|
|
8cc451a2e2 | ||
|
|
723c2c7fa9 | ||
|
|
4dd2c5cdd5 | ||
|
|
bdc257b40e | ||
|
|
4728f7c697 | ||
|
|
1c4c0fe8a1 | ||
|
|
360274a6e9 | ||
|
|
07228ff56a | ||
|
|
a61f153df7 | ||
|
|
34e91850d9 | ||
|
|
ba8e579e9b | ||
|
|
072e39c9cf | ||
|
|
8dc3f3b21a | ||
|
|
3a21241248 | ||
|
|
5c75096bcd | ||
|
|
a43b0f5253 | ||
|
|
d93271e86d | ||
|
|
4a6df9f961 | ||
|
|
a43ae2369b | ||
|
|
9a049de859 | ||
|
|
58b8398aa0 | ||
|
|
645751f680 | ||
|
|
2d3b6879f5 | ||
|
|
26c0924461 | ||
|
|
d4f801a8e9 | ||
|
|
cb1082c58c | ||
|
|
8406864963 | ||
|
|
85ef034fd0 | ||
|
|
59141f62bb | ||
|
|
d68cadba7b | ||
|
|
1207fd1f16 | ||
|
|
8aa61e230c | ||
|
|
2c7bda8a3b | ||
|
|
d58c5dd398 | ||
|
|
171da7a347 | ||
|
|
3fd70a769a | ||
|
|
4280f84535 | ||
|
|
c3d9c32615 | ||
|
|
a938b609b9 | ||
|
|
d3c7fac606 | ||
|
|
fea3f6cc72 | ||
|
|
aee5966e1c | ||
|
|
95e53ac0a0 | ||
|
|
5d11759f7d | ||
|
|
829616534e | ||
|
|
863f4d8366 | ||
|
|
bdd0c3686d | ||
|
|
91769d536d | ||
|
|
9500343d85 | ||
|
|
ef053035d0 | ||
|
|
35faafb32c | ||
|
|
f9fd868b99 | ||
|
|
8b903626c2 | ||
|
|
faf0c950fe | ||
|
|
4ecd325371 | ||
|
|
021519f295 | ||
|
|
e83685d667 | ||
|
|
81a198a76a | ||
|
|
5771d67202 | ||
|
|
b2b7974ba0 | ||
|
|
f59ca94416 | ||
|
|
22ff0d80ce | ||
|
|
5a22a0c27d | ||
|
|
287ef181ba | ||
|
|
bc63810ebd | ||
|
|
92cdea123e | ||
|
|
e4c7e343c8 | ||
|
|
6b75be183d | ||
|
|
718f6d9cef | ||
|
|
2ee43c403c | ||
|
|
24fa3f5e7b | ||
|
|
bbbda7f812 | ||
|
|
e958900380 | ||
|
|
74926c1dd3 | ||
|
|
2654888782 | ||
|
|
49597b0e9c | ||
|
|
b5ecfb4c9a | ||
|
|
07fa3764ef | ||
|
|
5acc77a163 | ||
|
|
0709878b4c | ||
|
|
662e477028 | ||
|
|
b7b7c381ee | ||
|
|
995cd95474 | ||
|
|
fe8a13f76f | ||
|
|
9252432bc0 | ||
|
|
f057f6768f | ||
|
|
806bf0be8d | ||
|
|
958506a108 | ||
|
|
e8fd771b91 | ||
|
|
fa4178fefa | ||
|
|
1af59d31b9 | ||
|
|
20758cef30 | ||
|
|
272938529d | ||
|
|
a67b7266ed | ||
|
|
75c8aecffa | ||
|
|
f26159a0e3 | ||
|
|
675e8667c2 | ||
|
|
a1a26b70bc | ||
|
|
34a7f86a07 | ||
|
|
e7311ac2f3 | ||
|
|
8d9ecc0c62 | ||
|
|
f01b991108 | ||
|
|
f80736c3d7 | ||
|
|
2c7f69cf85 | ||
|
|
348ecc1118 | ||
|
|
a9678f0ae0 | ||
|
|
461f298d2c | ||
|
|
068de7cf40 | ||
|
|
d04eb87c4f | ||
|
|
8af68db965 | ||
|
|
1cf632e98b | ||
|
|
58c11c3128 | ||
|
|
efcda95dda | ||
|
|
80d2028bac | ||
|
|
215213fc2c | ||
|
|
99d32dc0b4 | ||
|
|
0998097253 | ||
|
|
c17be5af6b | ||
|
|
b376536a3b | ||
|
|
e7edc02647 | ||
|
|
69bf835059 | ||
|
|
b97ffddfe8 | ||
|
|
6407b7c591 | ||
|
|
e14cd92d59 | ||
|
|
73cadd1798 | ||
|
|
fb9840f1f8 | ||
|
|
492aaa3375 | ||
|
|
33c5da700d | ||
|
|
48d3af7d9a | ||
|
|
9b3470eabd | ||
|
|
86a505b4f3 | ||
|
|
ed6c6296eb | ||
|
|
b27a41812f | ||
|
|
6c933d2b77 | ||
|
|
fb5610f9bd | ||
|
|
7adbd00811 | ||
|
|
1c91d19163 | ||
|
|
f491135318 | ||
|
|
a7ced00520 | ||
|
|
be3359fc67 | ||
|
|
69ed35ed71 | ||
|
|
280d35a053 | ||
|
|
eca6b9f0af | ||
|
|
aa5d05eaa4 | ||
|
|
15735552f4 | ||
|
|
d6d9dc9d95 | ||
|
|
dc57966dc3 | ||
|
|
cc9345e703 | ||
|
|
3fb8f3ec95 | ||
|
|
04ed50fb0f | ||
|
|
c9553411bb | ||
|
|
62221adf55 | ||
|
|
a6bf4746c6 | ||
|
|
72637d00e8 | ||
|
|
27d4b15925 | ||
|
|
7a77767e66 | ||
|
|
1b26621860 | ||
|
|
3db5f4d0aa | ||
|
|
b2a6e327bf | ||
|
|
9aec5fe907 | ||
|
|
fc3e0dfcd1 | ||
|
|
6513ff92a7 | ||
|
|
a0eb6d0976 | ||
|
|
7530770842 | ||
|
|
11ea72e240 | ||
|
|
c98330909a | ||
|
|
bec6fa4ad7 | ||
|
|
ac7ce73526 | ||
|
|
4c6619e6c5 | ||
|
|
e8121fdc11 | ||
|
|
21f17270a1 | ||
|
|
423cd5900e | ||
|
|
b9f535cd49 | ||
|
|
c731a82b71 | ||
|
|
e6fad97edc | ||
|
|
e228144159 | ||
|
|
9431a7b022 | ||
|
|
cd041f8574 | ||
|
|
8ba3378096 | ||
|
|
225984822d | ||
|
|
01b68db30e | ||
|
|
33fdaa5b6d | ||
|
|
70495aada1 | ||
|
|
f243f615ef | ||
|
|
6a1f5667f9 | ||
|
|
fab5f58ee0 | ||
|
|
55be8e6f52 | ||
|
|
c75b9b0d12 | ||
|
|
9b85446808 | ||
|
|
fd5d42836f | ||
|
|
4eaa82fd22 | ||
|
|
a497cc46f9 | ||
|
|
178f737971 | ||
|
|
74963bce9d | ||
|
|
33a4dbe1e5 | ||
|
|
60f32d0bce | ||
|
|
dce36d3e55 | ||
|
|
807c72b2f1 | ||
|
|
4f393553f4 | ||
|
|
91afc7b23c | ||
|
|
36d158e13e | ||
|
|
02a97b5985 | ||
|
|
b980545012 | ||
|
|
8aad152b23 | ||
|
|
74dbaade6f | ||
|
|
2deb5b7fec | ||
|
|
53677172f2 | ||
|
|
bef0ccf42a | ||
|
|
2fd5182608 | ||
|
|
7ad7caa2ae | ||
|
|
6d1710c74f | ||
|
|
233b8d0129 | ||
|
|
f55bdf07d3 | ||
|
|
6c2b532ae3 | ||
|
|
2539f294e4 | ||
|
|
b6a3ce9305 | ||
|
|
b07495aae9 | ||
|
|
686a53215d | ||
|
|
6190da1300 | ||
|
|
6fd7d8191e | ||
|
|
2ccd1cc9f0 | ||
|
|
8167bdd978 | ||
|
|
dfb3e34f7b | ||
|
|
45ee75055e | ||
|
|
5da4e321c0 | ||
|
|
e8519fecb4 | ||
|
|
ff35aa07dc | ||
|
|
06c172838c | ||
|
|
1543dd85b5 | ||
|
|
f37a1026f9 | ||
|
|
91fb7fa3d8 | ||
|
|
7b70153068 | ||
|
|
7e096ee2c5 | ||
|
|
86a90daf1b | ||
|
|
42f7df9681 | ||
|
|
2edad38c7c | ||
|
|
296ee4961e | ||
|
|
b1becddf11 | ||
|
|
667edcd9d0 | ||
|
|
b4e75bedf0 | ||
|
|
5482ef5451 | ||
|
|
a3afd5178c | ||
|
|
f1285a6dfd | ||
|
|
cf7c1afb93 | ||
|
|
f254831aa6 | ||
|
|
bd40c8649c | ||
|
|
7c53df2ed1 | ||
|
|
5ca6026787 | ||
|
|
483daa5882 | ||
|
|
e2bc92d128 | ||
|
|
5ffe3773d4 | ||
|
|
a7c68018a2 | ||
|
|
5ffb82993e | ||
|
|
07add0bd91 | ||
|
|
9a9b6fa326 | ||
|
|
ba43ec5759 | ||
|
|
008a9560fe | ||
|
|
6ff01cc72c | ||
|
|
e140a28073 | ||
|
|
de61c3b962 | ||
|
|
c46fc4531b | ||
|
|
065a9ed10f | ||
|
|
e44c0254f7 | ||
|
|
13f9f0315f | ||
|
|
1532ffe215 | ||
|
|
b24cbc68ba | ||
|
|
976fdd76c1 | ||
|
|
bbda335e02 | ||
|
|
031410c72b | ||
|
|
710def8e38 | ||
|
|
c0bda1b103 | ||
|
|
0e87ce4680 | ||
|
|
b4d594eeff | ||
|
|
ce09379bae | ||
|
|
b27fb64317 | ||
|
|
099455db25 | ||
|
|
3146bf51e6 | ||
|
|
b24a5e0662 | ||
|
|
e52ac0b187 | ||
|
|
eaa1590866 | ||
|
|
071af004bd | ||
|
|
23ab4e5e5f | ||
|
|
8e563cbccd | ||
|
|
1aee89f5ea | ||
|
|
d2dd6f7c70 | ||
|
|
e9a544fa98 | ||
|
|
fb547260d1 | ||
|
|
2065e32904 | ||
|
|
ac15581c56 | ||
|
|
9e2e882157 | ||
|
|
99ded56047 | ||
|
|
65386f52f0 | ||
|
|
5b8dce7456 | ||
|
|
de938eb621 | ||
|
|
83cc6c0835 | ||
|
|
304d78a4c8 | ||
|
|
347590751c | ||
|
|
fe4b1f96f1 | ||
|
|
9de984f7f8 | ||
|
|
b6cb9b853a | ||
|
|
50b930f283 | ||
|
|
cbeb809798 | ||
|
|
ea626368a0 | ||
|
|
c81747dd15 | ||
|
|
f8810d7caf | ||
|
|
92f54f0b59 | ||
|
|
ddce544b53 | ||
|
|
21fb7eea82 | ||
|
|
fd7eb43366 | ||
|
|
7d0ca894a4 | ||
|
|
a1add27c4c | ||
|
|
fc8194ee1e | ||
|
|
8ffcdb73e8 | ||
|
|
111528e51c | ||
|
|
5628dcf47e | ||
|
|
fb4f02cd38 | ||
|
|
d1be643c0d | ||
|
|
c9761bf6af | ||
|
|
4a47265224 | ||
|
|
f0f3017a76 | ||
|
|
d3f0b62348 | ||
|
|
6a53fb33da | ||
|
|
dcaf299864 | ||
|
|
ab2e00bc38 | ||
|
|
48d02bef15 | ||
|
|
1d67aa7bf2 | ||
|
|
e56066f721 | ||
|
|
5e3844ac13 | ||
|
|
cb4f5d454b | ||
|
|
e5c6fe1bb2 | ||
|
|
bf65a9732c | ||
|
|
1388b3219a | ||
|
|
d9e8ce22cb | ||
|
|
c85ba73371 | ||
|
|
224944528f | ||
|
|
cdcd3e77b3 | ||
|
|
ed5058a363 | ||
|
|
a670ff6d3e | ||
|
|
32f6d34904 | ||
|
|
d3ae05506d | ||
|
|
96f4394dce | ||
|
|
35567e6507 | ||
|
|
ae37e25452 | ||
|
|
c4537fe6f6 | ||
|
|
677334f5a9 | ||
|
|
3d9652ae35 | ||
|
|
a9130cb99c | ||
|
|
b1d60b5c85 | ||
|
|
99a05c56ad | ||
|
|
cfc65397b3 | ||
|
|
cd8fd1ef42 | ||
|
|
6350089e51 | ||
|
|
79f2f8cddc | ||
|
|
39fa949345 | ||
|
|
e1d7a5cbf5 | ||
|
|
f3cefaf043 | ||
|
|
b3460f3f54 | ||
|
|
8e5a67ed9f | ||
|
|
cccbcf510a | ||
|
|
a1e680fec7 | ||
|
|
1b58bd64ff | ||
|
|
196de8c758 | ||
|
|
222b777552 | ||
|
|
b5c206d3ae | ||
|
|
17ace95268 | ||
|
|
779d73f94b | ||
|
|
73307bf2e7 | ||
|
|
7623c1c5cb | ||
|
|
de568c84c2 | ||
|
|
1f5b9c6185 | ||
|
|
a5f8fd774d | ||
|
|
cc5443c38e | ||
|
|
8a86460b8f | ||
|
|
7ae9e49f51 | ||
|
|
c682d087d9 | ||
|
|
57da5c0841 | ||
|
|
a224722ae2 | ||
|
|
283ef5b163 | ||
|
|
09a188bfd9 | ||
|
|
10f086854b | ||
|
|
d67c6c37e3 | ||
|
|
136725dfb1 | ||
|
|
438895842c | ||
|
|
82b8f4f1ce | ||
|
|
0705f42cf8 | ||
|
|
cadc67ea40 | ||
|
|
054e9ecaae | ||
|
|
84fe3bfa87 | ||
|
|
2ef8403bfa | ||
|
|
1d3b2baee7 | ||
|
|
86de876b24 | ||
|
|
8a9f04f7fe | ||
|
|
98bd4dfe04 | ||
|
|
8e0e4d7c04 | ||
|
|
a5e8269c72 | ||
|
|
0acc88cde5 | ||
|
|
1e0ad1f6bf | ||
|
|
4abcb08cc9 | ||
|
|
81e7833711 | ||
|
|
3392cbbd91 | ||
|
|
e7b211f2c0 | ||
|
|
6c5bc9b4a3 | ||
|
|
cd2f65aafc | ||
|
|
3ee5093b03 | ||
|
|
6e2ad6860f | ||
|
|
8610eb84c6 | ||
|
|
a2e008347c | ||
|
|
a1ef0159e3 | ||
|
|
1c5f76635a | ||
|
|
e2a0fd7a28 | ||
|
|
5869a4ba2d | ||
|
|
ac9a93261b | ||
|
|
4b79f0047d | ||
|
|
6a789b660a | ||
|
|
0d8e44a079 | ||
|
|
f097952b42 | ||
|
|
224d511616 | ||
|
|
050c6cc4b0 | ||
|
|
bc2d23ff0d | ||
|
|
2939fadd6a | ||
|
|
ef260377c3 | ||
|
|
b9213df64b | ||
|
|
aa7694047b | ||
|
|
e2bc63217a | ||
|
|
6c5b8bcf9d | ||
|
|
e425fe3f97 | ||
|
|
6507993972 | ||
|
|
f081696f62 | ||
|
|
09157c3130 | ||
|
|
00626b1633 | ||
|
|
7e0cdbe502 | ||
|
|
ca08902d71 | ||
|
|
fad0e834d5 | ||
|
|
dc76eb6139 | ||
|
|
55e113c7a7 | ||
|
|
b62f5e079e | ||
|
|
ac1eaff6ec | ||
|
|
45f6129ae7 | ||
|
|
f3503e0026 | ||
|
|
826a654c95 | ||
|
|
08754e6ce7 | ||
|
|
3843972b05 | ||
|
|
37862f0f20 | ||
|
|
1f184f4aec | ||
|
|
db5a691693 | ||
|
|
48693250a4 | ||
|
|
570dcb6309 | ||
|
|
19e43087a8 | ||
|
|
fe0b6a1117 | ||
|
|
72851647ca | ||
|
|
1c90400081 | ||
|
|
672e18cac9 | ||
|
|
e939d667d9 | ||
|
|
8bb5a565cd | ||
|
|
7562c5751c | ||
|
|
e6e7d6dbd6 | ||
|
|
fe60c52c70 | ||
|
|
93f4590453 | ||
|
|
1098d271b8 | ||
|
|
51168169e7 | ||
|
|
d256a0e98f | ||
|
|
6717325c3f | ||
|
|
c4a0571e7a | ||
|
|
e4a06da14e | ||
|
|
36d6ead65c | ||
|
|
7eae3bc8c5 | ||
|
|
24b2198668 | ||
|
|
d29be0f460 | ||
|
|
8f93c36466 | ||
|
|
3092e5a8a5 | ||
|
|
55f95b3ac9 | ||
|
|
16218c8680 | ||
|
|
c11345c4d9 | ||
|
|
e31f0b8b0c | ||
|
|
7dd3b72a8c | ||
|
|
aeccccb33d | ||
|
|
b46a27c554 | ||
|
|
13bc15c05d | ||
|
|
cb1e644230 | ||
|
|
9bc0fada5c | ||
|
|
82e261ad33 | ||
|
|
cae2811762 | ||
|
|
09112c6869 | ||
|
|
77aaf1baee | ||
|
|
6626c2d00d | ||
|
|
019aea3d63 | ||
|
|
21439108ed | ||
|
|
754b30a7a6 | ||
|
|
89d5d480d7 | ||
|
|
fbcacb590b | ||
|
|
f97ad2b2ee | ||
|
|
e70f7141be | ||
|
|
7a08ce7ece | ||
|
|
86486336ec | ||
|
|
ec2a2522aa | ||
|
|
556f9ee39c | ||
|
|
7dad662d69 | ||
|
|
2daa3eb61f | ||
|
|
3079aa1f9d | ||
|
|
28f9a0a900 | ||
|
|
a6bb3cf60a | ||
|
|
004da5d385 | ||
|
|
0368282486 | ||
|
|
4404f20cf4 | ||
|
|
faca8bc02a | ||
|
|
5e93c05095 | ||
|
|
0f4f04eaa4 | ||
|
|
2e55d561d3 | ||
|
|
76a9049739 | ||
|
|
27bfcda20d | ||
|
|
c6d1d360a3 | ||
|
|
afc1236b06 | ||
|
|
bedd5f00f8 | ||
|
|
36239895bd | ||
|
|
738583e3d4 | ||
|
|
c513478c31 | ||
|
|
a944927b56 | ||
|
|
315f9d98f6 | ||
|
|
f087518e7a | ||
|
|
b9a8b0d146 | ||
|
|
4d15db0134 | ||
|
|
0d1a54262c | ||
|
|
e7ef7f5159 | ||
|
|
3dc989bccb | ||
|
|
75d46efd23 | ||
|
|
b83392cb04 | ||
|
|
7640d333f4 | ||
|
|
c880099deb | ||
|
|
42f5ecd4a1 | ||
|
|
733989a284 | ||
|
|
493f74d94d | ||
|
|
3b71e2abef | ||
|
|
30cad0c5f1 | ||
|
|
3a387643b3 | ||
|
|
e6b37703da | ||
|
|
990f473bb3 | ||
|
|
cf1de78205 | ||
|
|
ccea6dd74b | ||
|
|
166b490eed | ||
|
|
efd871ad2f | ||
|
|
b78896d64e | ||
|
|
e753c924ef | ||
|
|
9dc7b5a6d9 | ||
|
|
f5d21c9cdb | ||
|
|
6ce13646da | ||
|
|
151653dd98 | ||
|
|
619cfe6a1c | ||
|
|
8acf996d90 | ||
|
|
15e432204e | ||
|
|
4b1630e1ec | ||
|
|
41e63031b0 | ||
|
|
bb86f27fdf | ||
|
|
5cf4f62610 | ||
|
|
8e10a14866 | ||
|
|
94f850a588 | ||
|
|
db9997a106 | ||
|
|
0cbfb610f2 | ||
|
|
f901cd042b | ||
|
|
5719207dfa | ||
|
|
a84fbbe327 | ||
|
|
3882c11450 | ||
|
|
08f77c2b60 | ||
|
|
6269abbcc8 | ||
|
|
93c97972b9 | ||
|
|
ac61d43720 | ||
|
|
22ebe0e58f | ||
|
|
1958f78cc1 | ||
|
|
f072cbbba7 | ||
|
|
1a5b66b78d | ||
|
|
bea5973e0c | ||
|
|
0366dcf604 | ||
|
|
8211d4a1c2 | ||
|
|
fc2154ee92 | ||
|
|
76f85e6f7b | ||
|
|
81ce684b35 | ||
|
|
42bd888946 | ||
|
|
6bea346c41 | ||
|
|
8d23706354 | ||
|
|
62bfb1a273 | ||
|
|
38e86af75c | ||
|
|
607c2c5ba2 | ||
|
|
85f58eb082 | ||
|
|
a7ee64a25b | ||
|
|
2a58f22649 | ||
|
|
f066bb7716 | ||
|
|
4e3d182189 | ||
|
|
205fba74cf | ||
|
|
a9bcf8d50d | ||
|
|
54383b017e | ||
|
|
438b7b7bd0 | ||
|
|
27a40a9843 | ||
|
|
c7b0e9b05b | ||
|
|
356c829b76 | ||
|
|
ffbb5c48ed | ||
|
|
6b6c7b0920 | ||
|
|
de332a16d1 | ||
|
|
84ab3ee3af | ||
|
|
ce0d896492 | ||
|
|
eae9cb4afe | ||
|
|
459a812a54 | ||
|
|
7743647460 | ||
|
|
352ec364f0 | ||
|
|
54f684b7b3 | ||
|
|
1943b158fe | ||
|
|
a36eeb5261 | ||
|
|
a8b00faba1 | ||
|
|
bf73d0f905 | ||
|
|
193ffa06d9 | ||
|
|
9d176e35d4 | ||
|
|
cd2e8c6ef1 | ||
|
|
8461d71b52 | ||
|
|
e31cdf0df9 | ||
|
|
6f41791ea6 | ||
|
|
0bacbcd04e | ||
|
|
ffe689363f | ||
|
|
48d7fedbc0 | ||
|
|
75dff64450 | ||
|
|
f0b58c6f24 | ||
|
|
f3661b19c0 | ||
|
|
2f5106c97f | ||
|
|
0c19418e84 | ||
|
|
60c077c790 | ||
|
|
7aaa4dda22 | ||
|
|
109b3700b5 | ||
|
|
71fecf4d1f | ||
|
|
0f75c79665 | ||
|
|
9bcb01a75e | ||
|
|
4f29034f11 | ||
|
|
567bf445bf | ||
|
|
28a0c46ca7 | ||
|
|
7cc33d0f27 | ||
|
|
5fba8d773c | ||
|
|
36cd73df51 | ||
|
|
6f20889f00 | ||
|
|
8e408725e9 | ||
|
|
d053797340 | ||
|
|
c8d0f947d2 | ||
|
|
86e036c393 | ||
|
|
7652a2986b | ||
|
|
b1480167be | ||
|
|
e118e958f7 | ||
|
|
ee61dfe087 | ||
|
|
9231f420c1 | ||
|
|
0f92d021a1 | ||
|
|
cbdc3194cc | ||
|
|
993df0fd28 | ||
|
|
4294fdb0b2 | ||
|
|
082523bcea | ||
|
|
5d13c13821 | ||
|
|
21ef656e24 | ||
|
|
3c4fe8cc04 | ||
|
|
95ebd57b25 | ||
|
|
84e09aa8dd | ||
|
|
6cce3d2996 | ||
|
|
77b34fa961 | ||
|
|
024d978ae5 | ||
|
|
e0f55b9295 | ||
|
|
ccd83748f7 | ||
|
|
291ee9f86a | ||
|
|
59e4d7f0f5 | ||
|
|
4647448399 | ||
|
|
7dfe841876 | ||
|
|
34db35c36d | ||
|
|
3e9738dc66 | ||
|
|
2ecf57cdd9 | ||
|
|
c8b602038e | ||
|
|
e384fa226e | ||
|
|
cbb595ba83 | ||
|
|
fdeec0307e | ||
|
|
f084bbbf35 | ||
|
|
20d69b957f | ||
|
|
7de0a621e3 | ||
|
|
3441ea9844 | ||
|
|
83752e9349 | ||
|
|
8fdfe85b5f | ||
|
|
d4d9a85ad8 | ||
|
|
6f22452b54 | ||
|
|
a4a37d7a19 | ||
|
|
d1b1a8e490 | ||
|
|
104fe124df | ||
|
|
5bdbd74d59 | ||
|
|
e621c24270 | ||
|
|
554888318a | ||
|
|
49aaf98a7f | ||
|
|
ccdb94b06c | ||
|
|
6f7bfa71a9 | ||
|
|
fb3564fbe7 | ||
|
|
e1e365e16e | ||
|
|
5b5a18db2a | ||
|
|
3fa4dad418 | ||
|
|
0756607e32 | ||
|
|
a03be5a8a6 | ||
|
|
39c5bb95d2 | ||
|
|
4d33b089da | ||
|
|
58996b841a | ||
|
|
df03a7b3f8 | ||
|
|
ac03871174 | ||
|
|
2a086d20c6 | ||
|
|
d5cfa6d4dc | ||
|
|
f415167e59 | ||
|
|
9477db2363 | ||
|
|
8d11577ff2 | ||
|
|
037d1d9ad1 | ||
|
|
619ef2b341 | ||
|
|
f06fe76d35 | ||
|
|
eb86fdfbea | ||
|
|
c7712e2ef0 | ||
|
|
61fa770644 | ||
|
|
334bd73792 | ||
|
|
090ce262c4 | ||
|
|
d551d40886 | ||
|
|
aecfcaa8a2 | ||
|
|
61a3028788 | ||
|
|
11d048b8e3 | ||
|
|
d814a01f2a | ||
|
|
4c0916df79 | ||
|
|
e4844b9936 | ||
|
|
60aa8c527b | ||
|
|
9f7c3b8ea6 | ||
|
|
9f4f1bab39 | ||
|
|
73bd6af0f9 | ||
|
|
2aa54c5365 | ||
|
|
bc8542503d | ||
|
|
a6aea4ba58 | ||
|
|
0b41faec89 | ||
|
|
e12bd00b47 | ||
|
|
50eac9b49e | ||
|
|
e0405f1781 | ||
|
|
680d03e4d6 | ||
|
|
b4fc2e38ab | ||
|
|
16639f9d71 | ||
|
|
22f2605e25 | ||
|
|
69476b4f21 | ||
|
|
fdf92c5f3b | ||
|
|
5e22c83baa | ||
|
|
eed1a3c239 | ||
|
|
94c037821b | ||
|
|
e38e8eb636 | ||
|
|
bef8c83388 | ||
|
|
2e98324486 | ||
|
|
6e2d7445c5 | ||
|
|
90e7ace980 | ||
|
|
b0ff3bc7a3 | ||
|
|
06301e279c | ||
|
|
6d6f274648 | ||
|
|
9acefcb256 | ||
|
|
e4d0293a31 | ||
|
|
ae77542a11 | ||
|
|
980187f856 | ||
|
|
2b0a127fa5 | ||
|
|
327a8e6c59 | ||
|
|
d11e2724c4 | ||
|
|
f768ca3a2d | ||
|
|
947e902288 | ||
|
|
07c5d3277f | ||
|
|
d1d44a4fde | ||
|
|
6837a67234 | ||
|
|
3436a646b5 | ||
|
|
aed0af1e00 | ||
|
|
d6eb74262a | ||
|
|
403aa8c5a1 | ||
|
|
0d7ee2b014 | ||
|
|
2f5fd91bd8 | ||
|
|
cd1148c6aa | ||
|
|
cfd26f53f0 | ||
|
|
69ad5671ed | ||
|
|
f9e0f0d257 | ||
|
|
98f3135ad3 | ||
|
|
8c9c3a91e6 | ||
|
|
7f3518333d | ||
|
|
f1f871f103 | ||
|
|
6387b52896 | ||
|
|
077e95da85 | ||
|
|
7f6e1fbc8d | ||
|
|
06827cfcf1 | ||
|
|
6dc3097998 | ||
|
|
cd35271698 | ||
|
|
7b575f61d0 | ||
|
|
400e3ea649 | ||
|
|
622d871587 | ||
|
|
63d04645c7 | ||
|
|
3f4908c363 | ||
|
|
dd0f1d9d2d | ||
|
|
b31d171ae8 | ||
|
|
085f06594c | ||
|
|
ce3d41052c | ||
|
|
44f3df697f | ||
|
|
28c75b2283 | ||
|
|
b6e56119c4 | ||
|
|
a0e29b5435 | ||
|
|
65ff72cdf8 | ||
|
|
1da0956331 | ||
|
|
983078992d | ||
|
|
81059f80d8 | ||
|
|
a261442279 | ||
|
|
2f41eba100 | ||
|
|
91a6fb81c1 | ||
|
|
c95f0820bc | ||
|
|
830a1bd130 | ||
|
|
5c5ea8a254 | ||
|
|
5222c684d3 | ||
|
|
5798faa13b | ||
|
|
a062693875 | ||
|
|
6887d5d347 | ||
|
|
39c9669445 | ||
|
|
44565e22a0 | ||
|
|
ddec10d494 | ||
|
|
758e969cb6 | ||
|
|
a9a6a5041b | ||
|
|
59dd8ffbc6 | ||
|
|
8f9fe1b11a | ||
|
|
9ed0152cf2 | ||
|
|
250332a8d5 | ||
|
|
39825c6622 | ||
|
|
cee3070ca4 | ||
|
|
cd08e5c7da | ||
|
|
dd4beea44c | ||
|
|
5b48d59769 | ||
|
|
4dec12fcfc | ||
|
|
57ad3aca8e | ||
|
|
f677f42be7 | ||
|
|
a5760670ef | ||
|
|
f04a3ec201 | ||
|
|
f402c5fe3c | ||
|
|
9352e25392 | ||
|
|
1c90b0c19d | ||
|
|
cd776ff1a8 | ||
|
|
40a587bbaf | ||
|
|
818d729d8b | ||
|
|
dd5daa0767 | ||
|
|
ef5090c397 | ||
|
|
cf073de36c | ||
|
|
f16054639b | ||
|
|
b0983e8708 | ||
|
|
0febb218ed | ||
|
|
dfcfeeb550 | ||
|
|
820debf45a | ||
|
|
c19292c036 | ||
|
|
4ee81e6a3d | ||
|
|
87a8a3e22f | ||
|
|
e9125ef8e4 | ||
|
|
6ff394bcc9 | ||
|
|
7ce96585f5 | ||
|
|
41cc31c124 | ||
|
|
605af61a0f | ||
|
|
77e163e5b8 | ||
|
|
0e00b9009d | ||
|
|
a6dd998d31 | ||
|
|
cdd0ccc67a | ||
|
|
a918821868 | ||
|
|
c637b96f10 | ||
|
|
44b9197354 | ||
|
|
7a8f96b1dd | ||
|
|
f4f21f462d | ||
|
|
d09b8b5bd7 | ||
|
|
ee327db517 | ||
|
|
90a61b6bab | ||
|
|
00583bc4a8 | ||
|
|
2d06a8e880 | ||
|
|
e1a434edbc | ||
|
|
6b3b1cbd99 | ||
|
|
4dd861ee23 | ||
|
|
4f0f81a047 | ||
|
|
e3908c8de6 | ||
|
|
81c49fba03 | ||
|
|
eb174d5ba3 | ||
|
|
4c899e9c5a | ||
|
|
00b0f6ad51 | ||
|
|
fe1e467a49 | ||
|
|
73cb538d72 | ||
|
|
64b9e7fd48 | ||
|
|
12de22d3bb | ||
|
|
821bc6d777 | ||
|
|
6e66a5b77b | ||
|
|
cf5c10bbe6 | ||
|
|
4e30e74739 | ||
|
|
42890b9acf | ||
|
|
33a27379f9 | ||
|
|
0cf57cc7ca | ||
|
|
68fcbaf4c8 | ||
|
|
9c83d3c78c | ||
|
|
676dfabc91 | ||
|
|
60e6d1d61b | ||
|
|
975e275030 | ||
|
|
afcd5670e3 | ||
|
|
b17b53955c | ||
|
|
ff2b427cc1 | ||
|
|
5761800197 | ||
|
|
0eebacc521 | ||
|
|
4a5528697d | ||
|
|
d38034bb5c | ||
|
|
a62fe30546 | ||
|
|
b3fe3e8b3d | ||
|
|
25ebb427da | ||
|
|
c5bde10b4f | ||
|
|
e582e893cc | ||
|
|
833ec3d3cd | ||
|
|
3d446d3266 | ||
|
|
e660229c40 | ||
|
|
5489dec28d | ||
|
|
ee6e0e16cb | ||
|
|
eb1733609a | ||
|
|
8a6b4db19f | ||
|
|
df43b6a05c | ||
|
|
e2e66404d5 | ||
|
|
3ecb19d0f1 | ||
|
|
fd02c87fa2 | ||
|
|
63ac81c8f5 | ||
|
|
557bee61d5 | ||
|
|
3adca3c2fa | ||
|
|
39abd3ecb4 | ||
|
|
a4f4fc50b9 | ||
|
|
7bf638b0de | ||
|
|
56662a703c | ||
|
|
8b5f47d3a3 | ||
|
|
8bfb88840b | ||
|
|
593bb5a8a7 | ||
|
|
822ac7b100 | ||
|
|
cc70c5c67d | ||
|
|
ae7e1a22cb | ||
|
|
a289dcb9ee | ||
|
|
023b9c1e7e | ||
|
|
4c61662644 | ||
|
|
ad1b6ef0ac | ||
|
|
16944b5397 | ||
|
|
ed5c6be2f1 | ||
|
|
30cb082932 | ||
|
|
645554d12f | ||
|
|
72e44d596f | ||
|
|
8f2ca8f085 | ||
|
|
6725c2afa1 | ||
|
|
e9d4b73cc3 | ||
|
|
212b0faf0c | ||
|
|
929ec70512 | ||
|
|
6cd5d73607 | ||
|
|
80a7e1ea7d | ||
|
|
0d3b26b3aa | ||
|
|
52acea7b1f | ||
|
|
e9b49a43e2 | ||
|
|
4fa5538e2b | ||
|
|
84e74173de | ||
|
|
6cdb2a4896 | ||
|
|
d8bef3270d | ||
|
|
a33db8fe6f | ||
|
|
1c3f5517fa | ||
|
|
10972da060 | ||
|
|
a38f02541d | ||
|
|
fdba76ba47 | ||
|
|
f900ab0121 | ||
|
|
f80ab6a7a2 | ||
|
|
6ed209bbf3 | ||
|
|
fe85fa3bea | ||
|
|
76b7882f33 | ||
|
|
bf0ab2d44c | ||
|
|
276a0d9500 | ||
|
|
bcbfa560e9 | ||
|
|
8b366f0795 | ||
|
|
aa08f9692c | ||
|
|
288ba84939 | ||
|
|
4c74016b1a | ||
|
|
384b6c8288 | ||
|
|
a2af158fd3 | ||
|
|
1d8544ef3b | ||
|
|
91a12f76cd | ||
|
|
f4627acc48 | ||
|
|
2b1194d574 | ||
|
|
f33d2fb2e7 | ||
|
|
a9eec35aff | ||
|
|
8534f2d1e2 | ||
|
|
e8debd2e45 | ||
|
|
1caa41a623 | ||
|
|
bf59635280 | ||
|
|
5d6f75aaef | ||
|
|
eaf0662b75 | ||
|
|
6e8ea2a2cb | ||
|
|
b043b2a761 | ||
|
|
ac7e0dfb77 | ||
|
|
05d47bb09a | ||
|
|
575a5bd0b8 | ||
|
|
00740fb23b | ||
|
|
ae4c189e19 | ||
|
|
362a6e6d46 | ||
|
|
c76c7c68ff | ||
|
|
59ac9d39d5 | ||
|
|
ec41caade4 | ||
|
|
06ec06cdd7 | ||
|
|
b7acf86408 | ||
|
|
58c4db925b | ||
|
|
fe0c4ff3c2 | ||
|
|
7a2af0fbf4 | ||
|
|
d83127722f | ||
|
|
dc03ad05be | ||
|
|
a62df3cb8f | ||
|
|
18e32abda9 | ||
|
|
15d29da43b | ||
|
|
8b217d5313 | ||
|
|
ac62586bad | ||
|
|
c150fd9a1c | ||
|
|
674d14879f | ||
|
|
37e9010887 | ||
|
|
4bd2c75056 | ||
|
|
b9ed850b98 | ||
|
|
11cea17496 | ||
|
|
81df45a893 | ||
|
|
c1f0708a5d | ||
|
|
153f5854e2 | ||
|
|
f532964fde | ||
|
|
efea609dc3 | ||
|
|
f3a160038d | ||
|
|
f016eef48a | ||
|
|
f649514183 | ||
|
|
afd31677dd | ||
|
|
b28710b08c | ||
|
|
712ed555e6 | ||
|
|
11fb5bc3d0 | ||
|
|
2a5feb225b | ||
|
|
970e338847 | ||
|
|
0b9f650fe2 | ||
|
|
977834179a | ||
|
|
b42732743d | ||
|
|
99e6409a67 | ||
|
|
6a0a5f9693 | ||
|
|
fe9db8b369 | ||
|
|
ca035d0e8d | ||
|
|
84c9260dc4 | ||
|
|
987c02e946 | ||
|
|
5c0bc612fe | ||
|
|
0e28b53242 | ||
|
|
5fc0ce80fc | ||
|
|
af9092df39 | ||
|
|
58a5da33c2 | ||
|
|
7077eac589 | ||
|
|
b3435ae432 | ||
|
|
a31129333c | ||
|
|
2983c2a24f | ||
|
|
412bedb697 | ||
|
|
163597ef69 | ||
|
|
95f84afd33 | ||
|
|
9f7fd1fbfb | ||
|
|
940cab8620 | ||
|
|
d37811f177 | ||
|
|
5b84c99d79 | ||
|
|
b295024574 | ||
|
|
34180f1745 | ||
|
|
665031467a | ||
|
|
df33171107 | ||
|
|
53f4044890 | ||
|
|
a5049136ff | ||
|
|
705b3c6b63 | ||
|
|
6b4ac66962 | ||
|
|
0964b06240 | ||
|
|
92eeca3ba7 | ||
|
|
2a86554ac4 | ||
|
|
805caa30ce | ||
|
|
d4ca853fd3 | ||
|
|
5a8d2e8057 | ||
|
|
687fc358fd | ||
|
|
c4c2da06b7 | ||
|
|
8928cd53bf | ||
|
|
ca88fc4ed3 | ||
|
|
b83a1d79b7 | ||
|
|
cec2a837cf | ||
|
|
cff47262da | ||
|
|
da83eae754 | ||
|
|
c5409d52f5 | ||
|
|
54fc8f0e8c | ||
|
|
2ea633a2f7 | ||
|
|
9a52043fad | ||
|
|
39a5be2df9 | ||
|
|
96560e317a | ||
|
|
adb27903eb | ||
|
|
51150faa39 | ||
|
|
a56949e9fa | ||
|
|
ea96919b80 | ||
|
|
43da4c0eca | ||
|
|
5835afb849 | ||
|
|
b9c7771830 | ||
|
|
35db88affe | ||
|
|
e38faca455 | ||
|
|
0255e8710c | ||
|
|
7f3fecbdf5 | ||
|
|
a2c6d5e148 | ||
|
|
373706c92b | ||
|
|
7afe63aa06 | ||
|
|
8fab855099 | ||
|
|
062fef36f9 | ||
|
|
fefe2df3ee | ||
|
|
90b91ead72 | ||
|
|
1e98e41381 | ||
|
|
7030e8f050 | ||
|
|
74bb514a8c | ||
|
|
46914e486c | ||
|
|
f9abc561fb | ||
|
|
2e22ff2e36 | ||
|
|
8c3be4a5f0 | ||
|
|
3fe2f7337c | ||
|
|
ec24eb1d8e | ||
|
|
ffcaf85609 | ||
|
|
d0c481e44e | ||
|
|
67e2d9f9e1 | ||
|
|
dd5aa2b483 | ||
|
|
806494a254 | ||
|
|
5c3afd020a | ||
|
|
190cdfc326 | ||
|
|
13b954c765 | ||
|
|
49f6b50ed3 | ||
|
|
0f2a304d34 | ||
|
|
a142f93dca | ||
|
|
2dfe2fb22c | ||
|
|
e8564b4c90 | ||
|
|
2fd81b4932 | ||
|
|
0cf4c6ffea | ||
|
|
25f89afbfb | ||
|
|
43f3cdcd24 | ||
|
|
3454fed324 | ||
|
|
a64ffda688 | ||
|
|
8400da9934 | ||
|
|
6d89020f80 | ||
|
|
9c56c49e73 | ||
|
|
acb798e544 | ||
|
|
c5720a15c7 | ||
|
|
90709b332a | ||
|
|
81f17d10c8 | ||
|
|
773de38bd9 | ||
|
|
ae8bdd473c | ||
|
|
adfc5db3d2 | ||
|
|
a48704925d | ||
|
|
fa4beeee75 | ||
|
|
d8351772d3 | ||
|
|
68d1abdb85 | ||
|
|
7e8474a85a | ||
|
|
82da364b8b | ||
|
|
7fa91ec175 | ||
|
|
1d3a09d377 | ||
|
|
02563a35f0 | ||
|
|
d653f35bb7 | ||
|
|
a543627abd | ||
|
|
80f2ba7fca | ||
|
|
32bca64920 | ||
|
|
7fa1a84ec3 | ||
|
|
ab4bb26a0a | ||
|
|
4b8d258cff | ||
|
|
3c29aa6271 | ||
|
|
51464b4317 | ||
|
|
3f32a6b607 | ||
|
|
21aa1631a4 | ||
|
|
49968541fd | ||
|
|
cc143105b8 | ||
|
|
fed44e95b3 | ||
|
|
71ece56470 | ||
|
|
204a1de3fd | ||
|
|
80ddf4aecf | ||
|
|
12b4a666bc | ||
|
|
cfdbaf331e | ||
|
|
052d350b19 | ||
|
|
2ca18a7ee5 | ||
|
|
7dbe5f4640 | ||
|
|
432ecd1b6a | ||
|
|
7d9aa5b716 | ||
|
|
43267dc892 | ||
|
|
3ec6c26e6c | ||
|
|
7de684668b | ||
|
|
2fec463542 | ||
|
|
1affc641c4 | ||
|
|
4741d7bfe2 | ||
|
|
aea99a1222 | ||
|
|
7c8038e2da | ||
|
|
673336297d | ||
|
|
ee4b7042ce | ||
|
|
310ab7d41b | ||
|
|
fc1796f3e8 | ||
|
|
d8926ea5eb | ||
|
|
0c1e428c7d | ||
|
|
bcd97f5887 | ||
|
|
0faf86c2b9 | ||
|
|
b30957c89c | ||
|
|
dbbcbc3616 | ||
|
|
1889150013 | ||
|
|
14f9cdde6b | ||
|
|
3ab0691eec | ||
|
|
1e073a196f | ||
|
|
7b60e3916c | ||
|
|
c486c5bf5b | ||
|
|
fc0b6d143a | ||
|
|
5f4252bcd2 | ||
|
|
a588aef921 | ||
|
|
b70df57f7b | ||
|
|
e813c93e08 | ||
|
|
900c4977cc | ||
|
|
bb39fffab9 | ||
|
|
f52aefb341 | ||
|
|
aecb5630cb | ||
|
|
0f0245625a | ||
|
|
8583689fa4 | ||
|
|
7a1e026bb5 | ||
|
|
64f04ee6db | ||
|
|
5c6f538b85 | ||
|
|
00aa83a498 | ||
|
|
e44848f8c4 | ||
|
|
5ea8950a13 | ||
|
|
184557bfed | ||
|
|
b4253210d2 | ||
|
|
8e1585aa8a | ||
|
|
dee49d7488 | ||
|
|
1ecde309e4 | ||
|
|
d62a738460 | ||
|
|
0cfd4fff62 | ||
|
|
8904127c10 | ||
|
|
0f1b1bb44d | ||
|
|
16f870aa41 | ||
|
|
16f729eb22 | ||
|
|
36f0bd432c | ||
|
|
457ab8b2ce | ||
|
|
1ebf5f3bcb | ||
|
|
a928a9640f | ||
|
|
cb302476b4 | ||
|
|
31726737df | ||
|
|
082be33cbd | ||
|
|
9aada2ef19 | ||
|
|
4066b2767b | ||
|
|
de43bddc1a | ||
|
|
c46f48abec | ||
|
|
4acbf7b90d | ||
|
|
cbc1a58e93 | ||
|
|
1b5f33a435 | ||
|
|
41b4a63f2b | ||
|
|
d8fc2db910 | ||
|
|
dc11dea7cc | ||
|
|
6edfc56c9d | ||
|
|
5837a63942 | ||
|
|
3a28f456b1 | ||
|
|
4f6fc2675c | ||
|
|
c7da1821c3 | ||
|
|
1a8c3271da | ||
|
|
bd49e8e76f | ||
|
|
533699abe7 | ||
|
|
267ccc98d3 | ||
|
|
cd3c2fdb49 | ||
|
|
5cbc319e96 | ||
|
|
d435dcdca4 | ||
|
|
e5ab456df3 | ||
|
|
08bf4f74a9 | ||
|
|
a838a03412 | ||
|
|
ad4e597f74 | ||
|
|
ee3610a2d2 | ||
|
|
88b75b57d0 | ||
|
|
aa4c7055f8 | ||
|
|
4b70f9d213 | ||
|
|
79d2d1c201 | ||
|
|
406bda9b95 | ||
|
|
405f1dd027 | ||
|
|
51f349d504 | ||
|
|
4f201d1e85 | ||
|
|
03cfef100f | ||
|
|
ff89b491dd | ||
|
|
7552dff0e5 | ||
|
|
110589c0f3 | ||
|
|
3400398230 | ||
|
|
5c244e9a8c | ||
|
|
4e2f4e2091 | ||
|
|
e69bef3ce3 | ||
|
|
c1c0fc79bc | ||
|
|
02a77f6797 | ||
|
|
77b316cdfb | ||
|
|
2abfc7b87b | ||
|
|
050f0c3d8f | ||
|
|
90e6c727da | ||
|
|
d3d9a04e62 | ||
|
|
a66051216f | ||
|
|
0debba0f6e | ||
|
|
f2bd2c318c | ||
|
|
21c42819c7 | ||
|
|
5899a272ef | ||
|
|
27b4c62bc1 | ||
|
|
b227fddec7 | ||
|
|
2c1f1de33c | ||
|
|
c26622cf8f | ||
|
|
9e91873428 | ||
|
|
7363d50a1e | ||
|
|
15213a041d | ||
|
|
fb70a34c80 | ||
|
|
fbf76c6d21 | ||
|
|
811af02f56 | ||
|
|
bc00c38f9d | ||
|
|
4658bd8208 | ||
|
|
6eb1caa417 | ||
|
|
41efc1376e | ||
|
|
0f35016773 | ||
|
|
c641ca90a9 | ||
|
|
87c88fcb27 | ||
|
|
4f80a129f1 | ||
|
|
6987f2ba82 | ||
|
|
563db580ae | ||
|
|
125daea16a | ||
|
|
fd2c6b8a4b | ||
|
|
5b1db917bc | ||
|
|
8780e23ed3 | ||
|
|
be492ed108 | ||
|
|
24da14f4f7 | ||
|
|
03d2fb450f | ||
|
|
849b0563ce | ||
|
|
16a99ad515 | ||
|
|
d93172bee8 | ||
|
|
25429af122 | ||
|
|
4bfd104a23 | ||
|
|
7745067d99 | ||
|
|
b19d3629b9 | ||
|
|
84c519df09 | ||
|
|
737a56a030 | ||
|
|
67cba251c8 | ||
|
|
0bc511715b | ||
|
|
27ce80544f | ||
|
|
04f627c2af | ||
|
|
12b6959ea2 | ||
|
|
7519768cb1 | ||
|
|
9af470c92d | ||
|
|
ac8c1d0a01 | ||
|
|
921d01b59d | ||
|
|
8aa4a66ba0 | ||
|
|
2e7153d8d6 | ||
|
|
70b5a81a29 | ||
|
|
83fd822e8b | ||
|
|
e72eef421b | ||
|
|
016063c810 | ||
|
|
38f19981b2 | ||
|
|
40dd968f13 | ||
|
|
3cef348f30 | ||
|
|
b293b16007 | ||
|
|
f5f43db2da | ||
|
|
029555d192 | ||
|
|
fa4d202e71 | ||
|
|
a8ebfd7a92 | ||
|
|
b19e5720cc | ||
|
|
a254f5a3a8 | ||
|
|
143c735f96 | ||
|
|
dd3752956a | ||
|
|
bf15cac980 | ||
|
|
951bad46e0 | ||
|
|
716225cd2f | ||
|
|
bbc618b8f9 | ||
|
|
11ead56d6d | ||
|
|
e972ae4afa | ||
|
|
0709065f50 | ||
|
|
1a61b01315 | ||
|
|
c643b6ff16 | ||
|
|
b3f5b4932c | ||
|
|
b3f5f2f75f | ||
|
|
62288907dd | ||
|
|
cdbdcec715 | ||
|
|
ccf78448aa | ||
|
|
ed001e0cfb | ||
|
|
26382713c2 | ||
|
|
d6bc5c35a7 | ||
|
|
dc03f003ac | ||
|
|
7aa2104596 | ||
|
|
460cfba6ff | ||
|
|
c8b93d6573 | ||
|
|
3f5f96ac91 | ||
|
|
f37481f843 | ||
|
|
7c6b991de7 | ||
|
|
82460aa49f | ||
|
|
7e7b403043 | ||
|
|
c3f6502be2 | ||
|
|
e5217e6ce9 | ||
|
|
c98cb1d6f9 | ||
|
|
ba6f2b0467 | ||
|
|
23465ad985 | ||
|
|
7886a14b74 | ||
|
|
466b6a23cd | ||
|
|
4a04f73434 | ||
|
|
134cb6a017 | ||
|
|
8d036c4b7c | ||
|
|
c64ad78c7b | ||
|
|
4a043a915f | ||
|
|
8ff0d99092 | ||
|
|
2e47cb12c4 | ||
|
|
ff6f1655f0 | ||
|
|
0120f396ac | ||
|
|
231fffe594 | ||
|
|
b5ba94f1de | ||
|
|
cbf79769d3 | ||
|
|
e67afc35b8 | ||
|
|
5e73007b1d | ||
|
|
2d9876a261 | ||
|
|
125eb01e03 | ||
|
|
ccb13205f4 | ||
|
|
6f23e91e33 | ||
|
|
1bd8a322f5 | ||
|
|
362e73bea8 | ||
|
|
9f8c2b3b56 | ||
|
|
303d67aed2 | ||
|
|
6a7f6cdacd | ||
|
|
5715342fe0 | ||
|
|
38a0d15190 | ||
|
|
56f763a4a8 | ||
|
|
a2eb14f3b3 | ||
|
|
05c63af7c4 | ||
|
|
1f59701c46 | ||
|
|
ec3191f502 | ||
|
|
32b5654a6e | ||
|
|
674091424e | ||
|
|
6ad336743d | ||
|
|
c882568ccd | ||
|
|
f6b2899dd2 | ||
|
|
bccd4ef2f7 | ||
|
|
94c240a026 | ||
|
|
c50a0cf7bf | ||
|
|
c37f7abb79 | ||
|
|
432ce9b1de | ||
|
|
054323c2bc | ||
|
|
a8770aa606 | ||
|
|
7d5442e103 | ||
|
|
eab32f2e5d | ||
|
|
d42c0f1dc5 | ||
|
|
6ad1e4d99a | ||
|
|
7350144ab3 | ||
|
|
54c591bd9d | ||
|
|
217d88f21f | ||
|
|
394e3be482 | ||
|
|
575fbad254 | ||
|
|
fa0aa91bf9 | ||
|
|
d7f024c510 | ||
|
|
bc5a53574c | ||
|
|
3e641e2147 | ||
|
|
de7e4f0db7 | ||
|
|
a1cb1d78bd | ||
|
|
1178f2c1ab | ||
|
|
76f277eeb4 | ||
|
|
4000390dcd | ||
|
|
30df709736 | ||
|
|
8cd17ce045 | ||
|
|
1bfbced258 | ||
|
|
6ac5980a17 | ||
|
|
2e24adae89 | ||
|
|
188b94cb3e | ||
|
|
c48733e34f | ||
|
|
f36db9bb04 | ||
|
|
30dd29e251 | ||
|
|
6cf1acfb48 | ||
|
|
a7b09d3d1c | ||
|
|
8fc3768166 | ||
|
|
b07bddf742 | ||
|
|
220f957cd8 | ||
|
|
8ce48d83eb | ||
|
|
200cdb6b0a | ||
|
|
d9fb40203a | ||
|
|
2d9e972195 | ||
|
|
97a1a04116 | ||
|
|
493cd866f1 | ||
|
|
063d369672 | ||
|
|
a0fae8dacc | ||
|
|
bc840b69d5 | ||
|
|
85301853d6 | ||
|
|
7cd53fb452 | ||
|
|
538ddf7af2 | ||
|
|
d5afa181f7 | ||
|
|
8ed4124184 | ||
|
|
160242a74f | ||
|
|
81b83bc904 | ||
|
|
2a716b7a7a | ||
|
|
63272541eb | ||
|
|
464767c5fd | ||
|
|
a9c3ca8606 | ||
|
|
86dd677e0c | ||
|
|
666f700a93 | ||
|
|
b70bf938c2 | ||
|
|
d5cf41e043 | ||
|
|
b7a1954c33 | ||
|
|
6520589a37 | ||
|
|
f445b0178a | ||
|
|
f618065f7c | ||
|
|
f0be48ff90 | ||
|
|
bb922d577d | ||
|
|
990809cc21 | ||
|
|
bfcc466647 | ||
|
|
3d2558bde6 | ||
|
|
1aac0b10c9 | ||
|
|
e5ff85b63c | ||
|
|
f0bb5b84f9 | ||
|
|
07b50f6c69 | ||
|
|
61b3aaaa07 | ||
|
|
b5119d7958 | ||
|
|
d3e72e4344 | ||
|
|
60512ffa09 | ||
|
|
b1a252a64d | ||
|
|
fb90b64bac | ||
|
|
6e7a398263 | ||
|
|
44d2d9b1e8 | ||
|
|
8302ed44aa | ||
|
|
7e12aea1d8 | ||
|
|
20346b0da4 | ||
|
|
e0e65cbdf9 | ||
|
|
9d2d58c4b6 | ||
|
|
0c461c3859 | ||
|
|
0d38bd9b3b | ||
|
|
2f02e49b9f | ||
|
|
064e8a7c68 | ||
|
|
e4dd269609 | ||
|
|
19dd59f38c | ||
|
|
37501d9bc7 | ||
|
|
89f9561d10 | ||
|
|
8af3f91e78 | ||
|
|
0661fd6f7c | ||
|
|
edd003b62a | ||
|
|
10cc87e422 | ||
|
|
0470f648c6 | ||
|
|
777360149d | ||
|
|
aa7774b82b | ||
|
|
d44da875e7 | ||
|
|
f9ad73598b | ||
|
|
952fe98796 | ||
|
|
579912e52f | ||
|
|
1b5ec3e3ca | ||
|
|
fb4e6ac923 | ||
|
|
3560dc4be6 | ||
|
|
b002ea9a20 | ||
|
|
540317ea2b | ||
|
|
142d1951d2 | ||
|
|
cf06ba6d13 | ||
|
|
a8d800572e | ||
|
|
5525ea45a4 | ||
|
|
3120958a17 | ||
|
|
052726ed50 | ||
|
|
8397196fbb | ||
|
|
8547611479 | ||
|
|
fe45f28204 | ||
|
|
861067412f | ||
|
|
7eca886608 | ||
|
|
79b6f9e89e | ||
|
|
3d17c06777 | ||
|
|
d6c08fb79f | ||
|
|
ef02b20811 | ||
|
|
8bf46a665e | ||
|
|
c4fca2aa61 | ||
|
|
45310d0cf6 | ||
|
|
87268c2297 | ||
|
|
032e435490 | ||
|
|
78c43edcac | ||
|
|
f32d34b965 | ||
|
|
8a7ff6a6fd | ||
|
|
6c48aa5fae | ||
|
|
d82547acd3 | ||
|
|
441f9cc2ee | ||
|
|
9f4fc8ad33 | ||
|
|
d1e31261fe | ||
|
|
05dd9acba8 | ||
|
|
9270485723 | ||
|
|
e93975cb46 | ||
|
|
cbdaf4827f | ||
|
|
f2c28d287a | ||
|
|
90c228abca | ||
|
|
505e6bec9e | ||
|
|
ee027f237b | ||
|
|
3ae0d6f421 | ||
|
|
13b66a77c7 | ||
|
|
ed70836057 | ||
|
|
a68e52c2e3 | ||
|
|
ea37b89753 | ||
|
|
5d89aa06f7 | ||
|
|
ead034e638 | ||
|
|
a294838bcd | ||
|
|
1c03d1e87d | ||
|
|
f8804c8a56 | ||
|
|
7c444dea6e | ||
|
|
6d91d270d6 | ||
|
|
dd1cec4196 | ||
|
|
d1a8a4481e | ||
|
|
5921ffaa36 | ||
|
|
cf47b68c1e | ||
|
|
eeb8d0dbcd | ||
|
|
b6fa22bd84 | ||
|
|
a0ef27a0cd | ||
|
|
22eb831a71 | ||
|
|
01ab9acd14 | ||
|
|
74fcbb382f | ||
|
|
9836b1dddd | ||
|
|
e304d0f8ee | ||
|
|
ab7b38d4b9 | ||
|
|
a464dc681a | ||
|
|
eaf675dc92 | ||
|
|
57068e526c | ||
|
|
c14a00eec9 | ||
|
|
219c42522f | ||
|
|
e3a0f15837 | ||
|
|
a6bb27483b | ||
|
|
7ada7def9e | ||
|
|
af384d9aa6 | ||
|
|
223c129b6b | ||
|
|
421c4ae907 | ||
|
|
4907f610d6 | ||
|
|
f9d1bbbffb | ||
|
|
60589fc1cb | ||
|
|
5121316036 | ||
|
|
68bdfa9d0e | ||
|
|
97b816200d | ||
|
|
059a643188 | ||
|
|
7facad41b7 | ||
|
|
3ee59e454c | ||
|
|
43da1686da | ||
|
|
6d643f92b7 | ||
|
|
559a01f585 | ||
|
|
ba8e3f11e2 | ||
|
|
fd8a53ca3d | ||
|
|
8707aafaf7 | ||
|
|
e5a28bfd8d | ||
|
|
6e04d66a35 | ||
|
|
86e8b3b4bd | ||
|
|
a26ead035a | ||
|
|
704be54c3a | ||
|
|
2406152576 | ||
|
|
af260b5a64 | ||
|
|
4efa96df21 | ||
|
|
26bef5d209 | ||
|
|
cd6e0ff88a | ||
|
|
2ca979425f | ||
|
|
8d822ebdb4 | ||
|
|
bc5b5afcbf | ||
|
|
b373c53ce4 | ||
|
|
bc4b89c21a | ||
|
|
e10c287c93 | ||
|
|
ce42d53a09 | ||
|
|
a4f9d6d98b | ||
|
|
eebd03701a | ||
|
|
d5287682d1 | ||
|
|
7c567e3cbd | ||
|
|
58352ea69d | ||
|
|
de64b35359 | ||
|
|
7df8e1eab2 | ||
|
|
8b62127770 | ||
|
|
3158955198 | ||
|
|
d9d97bd17b | ||
|
|
94f6380d69 | ||
|
|
2ee821656f | ||
|
|
7556abb92d | ||
|
|
9d3a85d434 | ||
|
|
147d301f10 | ||
|
|
75a89c5983 | ||
|
|
2289968634 | ||
|
|
ca252804c6 | ||
|
|
7c25d83f1c | ||
|
|
8ce30c6a69 | ||
|
|
9fcaff749f | ||
|
|
3ac1475262 | ||
|
|
ad64bab5b2 | ||
|
|
f02998b106 | ||
|
|
127fe6ecf0 | ||
|
|
888ab0c89c | ||
|
|
2efd8ef52d | ||
|
|
6ad933982f | ||
|
|
854258f376 | ||
|
|
26f2d7fbae | ||
|
|
3952920492 | ||
|
|
c2001a7259 | ||
|
|
78f911ac19 | ||
|
|
0f2a7226fb | ||
|
|
f8d0ebe92f | ||
|
|
ba6ba7d4be | ||
|
|
58e6f660f3 | ||
|
|
cd482ca655 | ||
|
|
e43b56eb38 | ||
|
|
0c2d767f6f | ||
|
|
02e697032f | ||
|
|
07dc262690 | ||
|
|
6bf8d5b936 | ||
|
|
93858bf262 | ||
|
|
f64da46a98 | ||
|
|
2052a029ee | ||
|
|
c6aafff701 | ||
|
|
26f0f92210 | ||
|
|
bdc4ae2b86 | ||
|
|
9ca9341384 | ||
|
|
7f4f8b7c7d | ||
|
|
8870526457 | ||
|
|
f057e1e17a | ||
|
|
8561c9c5a6 | ||
|
|
23199719d9 | ||
|
|
a606ef0700 | ||
|
|
a234de1ee3 | ||
|
|
d266898617 | ||
|
|
69b5929c5a | ||
|
|
316c72a4ae | ||
|
|
9da88eec3e | ||
|
|
f10d9996d2 | ||
|
|
58ec9d3a73 | ||
|
|
4a503ba1ad | ||
|
|
2d096a569a | ||
|
|
e44ea5038e | ||
|
|
b111aa0111 | ||
|
|
773d24ebf7 | ||
|
|
bd371af0b3 | ||
|
|
9d79c72c17 | ||
|
|
a86aaef4d0 | ||
|
|
e463244db3 | ||
|
|
9e10b75f55 | ||
|
|
294091ce60 | ||
|
|
da6dd2dc92 | ||
|
|
40b9de66c7 | ||
|
|
aac985951a | ||
|
|
662cc5fe20 | ||
|
|
e1e62d97a8 | ||
|
|
a29cc48fec | ||
|
|
42af040fbd | ||
|
|
d383d617c2 | ||
|
|
9d04c21cc2 | ||
|
|
ed8039e223 | ||
|
|
f05743bf57 | ||
|
|
c6be661bb5 | ||
|
|
c84508ae9f | ||
|
|
f06fe1ea98 | ||
|
|
77f2cd6513 | ||
|
|
d16fb79708 | ||
|
|
baad86bcd7 | ||
|
|
8808aad529 | ||
|
|
6d7eaba845 | ||
|
|
4259b17b91 | ||
|
|
828ea700e8 | ||
|
|
7f22685fa3 | ||
|
|
40db9dff3b | ||
|
|
fa82264604 | ||
|
|
ae467aa42e | ||
|
|
c38f29ce56 | ||
|
|
67cc09416f | ||
|
|
f2a75fbfc7 | ||
|
|
b1fb09e183 | ||
|
|
cd0082c630 | ||
|
|
f78527d1e3 | ||
|
|
1f642238a7 | ||
|
|
6fe06cad98 | ||
|
|
2335fdbb5a | ||
|
|
1b6f7c3eb7 | ||
|
|
67f0d26d17 | ||
|
|
8574bcd494 | ||
|
|
02cc77cd82 | ||
|
|
d8782ce5fd | ||
|
|
dedc2986c6 | ||
|
|
74cdc0005a | ||
|
|
a756cd9565 | ||
|
|
ae27c3f4c5 | ||
|
|
6d41f36266 | ||
|
|
57cbcdf2ec | ||
|
|
455fd180b1 | ||
|
|
78abcd7df7 | ||
|
|
23dce21647 | ||
|
|
e6177c3349 | ||
|
|
e2adb82e29 | ||
|
|
bb472206de | ||
|
|
d87cf5146e | ||
|
|
87eb5cbced | ||
|
|
181edf4b53 | ||
|
|
dfa53cb88e | ||
|
|
d079cda174 | ||
|
|
4265e71d6f | ||
|
|
f66a72c66b | ||
|
|
9be90bd1c9 | ||
|
|
106e535577 | ||
|
|
194be51f05 | ||
|
|
a862e363ea | ||
|
|
2e64afca27 | ||
|
|
51cda0be2a | ||
|
|
4da3291157 | ||
|
|
52edabf2cb | ||
|
|
43a1a0f3ab | ||
|
|
e88524f274 | ||
|
|
7a929fcd27 | ||
|
|
7087fdf6c0 | ||
|
|
67093a5143 | ||
|
|
3f34016888 | ||
|
|
1307633a84 | ||
|
|
1a53f07d80 | ||
|
|
672f678ed6 | ||
|
|
b924568f79 | ||
|
|
e6e9c21275 | ||
|
|
636f5d4a1d | ||
|
|
41a4b280ee | ||
|
|
27139bf41f | ||
|
|
12ba1957d0 | ||
|
|
9b9d189a33 | ||
|
|
7c3af4f56f | ||
|
|
880ce080b7 | ||
|
|
6e84a03a35 | ||
|
|
a9f6556454 | ||
|
|
2722211ba3 | ||
|
|
e2e5cddcaa | ||
|
|
40280fa6cf | ||
|
|
8b7718fbdc | ||
|
|
fe9299ceff | ||
|
|
b44957ad91 | ||
|
|
a049f972ec | ||
|
|
069895d26b | ||
|
|
0e756e4377 | ||
|
|
ee7282ce0d | ||
|
|
d026367334 | ||
|
|
7244dc4511 | ||
|
|
56f61a6d59 | ||
|
|
4d5f610029 | ||
|
|
c94b4466d5 | ||
|
|
61f9e79ec9 | ||
|
|
cf797657ed | ||
|
|
c597538b40 | ||
|
|
43f964e28d | ||
|
|
8283f23651 | ||
|
|
7cc25f91ff | ||
|
|
5d2506e697 | ||
|
|
14908b7f28 | ||
|
|
2e122e1509 | ||
|
|
486b5b6bfc | ||
|
|
88a2f128ec | ||
|
|
45c139cfb3 | ||
|
|
3a111e5d74 | ||
|
|
fc0c5e7359 | ||
|
|
2ccfb71d12 | ||
|
|
e8a5a9b1e8 | ||
|
|
ec3568bd97 | ||
|
|
a67a881715 | ||
|
|
7a048f004d | ||
|
|
330b6a0482 | ||
|
|
aa2e4d92e0 | ||
|
|
0ea66a1275 | ||
|
|
aafff8fd5c | ||
|
|
5ac2a69940 | ||
|
|
8278a12af9 | ||
|
|
e88dd9b08b | ||
|
|
bbea6564fc | ||
|
|
1ca8d7ad45 | ||
|
|
67958f7fa7 | ||
|
|
ab9c527274 | ||
|
|
36ff991960 | ||
|
|
59d38f876a | ||
|
|
5c5c6a965c | ||
|
|
74aafe6a10 | ||
|
|
f860a2fbd6 | ||
|
|
87bcf739ee | ||
|
|
db6db51742 | ||
|
|
981be7956b | ||
|
|
8c10aa575c | ||
|
|
17b316b94b | ||
|
|
8921b4f9d1 | ||
|
|
c3f111a56c | ||
|
|
cf16d81fa4 | ||
|
|
2beb763b4f | ||
|
|
69ae879c58 | ||
|
|
08fee9a284 | ||
|
|
f89da17827 | ||
|
|
ea26da0be7 | ||
|
|
1f3d3970f6 | ||
|
|
c9a71a7176 | ||
|
|
7ed8833fd5 | ||
|
|
250318329f | ||
|
|
14c538c9c7 | ||
|
|
abe4c57663 | ||
|
|
9fb351a139 | ||
|
|
0d0ccacdf3 | ||
|
|
c8858f85d8 | ||
|
|
d1bc46ffad | ||
|
|
32e5848f34 | ||
|
|
be36c0769a | ||
|
|
f9e63dfd65 | ||
|
|
fa05dac5ae | ||
|
|
430dd3ae05 | ||
|
|
664fc76ac7 | ||
|
|
37d6cc07a7 | ||
|
|
d79b6cd8dc | ||
|
|
d6510f9578 | ||
|
|
59e8302c9d | ||
|
|
3422bd9b94 | ||
|
|
a3f3c7ba24 | ||
|
|
82ecebb393 | ||
|
|
6ba0b029e6 | ||
|
|
604c9dacdb | ||
|
|
1a619522ee | ||
|
|
88615fbff1 | ||
|
|
d4f8f67173 | ||
|
|
174a0a2efc | ||
|
|
12b5494906 | ||
|
|
aa0f06d6b7 | ||
|
|
0c47685e02 | ||
|
|
e0ca4347be | ||
|
|
e65d9408ee | ||
|
|
d8558a3af3 | ||
|
|
72eedb1c98 | ||
|
|
3c5cf9500d | ||
|
|
7a1f3177c9 | ||
|
|
f8da8b0261 | ||
|
|
393cb7fd7d | ||
|
|
e74e1256d4 | ||
|
|
96abd70c13 | ||
|
|
1f9d9c3176 | ||
|
|
94efeb2845 | ||
|
|
a73834436f | ||
|
|
85f4aeca05 | ||
|
|
7db84a961a | ||
|
|
74e95e88d8 | ||
|
|
80d9baa9e8 | ||
|
|
751995ab95 | ||
|
|
5ca6e2910a | ||
|
|
071d05465a | ||
|
|
11a9536271 | ||
|
|
41a7203c28 | ||
|
|
543a58bb87 | ||
|
|
b2b95cad20 | ||
|
|
eabec967ec | ||
|
|
e42b152037 | ||
|
|
da599e3f1a | ||
|
|
4c7b0b935b | ||
|
|
c400876df1 | ||
|
|
a960e2ef48 | ||
|
|
4fe272a7fb | ||
|
|
a7d9f248ea | ||
|
|
06aa689383 | ||
|
|
835b0c44cd | ||
|
|
54b6f8a4ae | ||
|
|
18787ebe8f | ||
|
|
47e8fcf37e | ||
|
|
5958b78459 | ||
|
|
9d9697b366 | ||
|
|
6585e18571 | ||
|
|
6f1b4292f0 | ||
|
|
ef9ef03b1f | ||
|
|
c4bea3dfe4 | ||
|
|
eaa9a1e33b | ||
|
|
3e19298c9e | ||
|
|
2a96ce97ee | ||
|
|
8cfe901391 | ||
|
|
30f1ee7a1f | ||
|
|
46ff830daa | ||
|
|
828cd6fd0b | ||
|
|
ecb67a1ed1 | ||
|
|
0ef843f138 | ||
|
|
eb79d83051 | ||
|
|
ca1a11493d | ||
|
|
69bb086ba5 | ||
|
|
11a5ee821b | ||
|
|
a8a85143f6 | ||
|
|
e2cc328eef | ||
|
|
344d10a8e3 | ||
|
|
681643ea9e | ||
|
|
fa947e02ca | ||
|
|
cd289843f7 | ||
|
|
b123392592 | ||
|
|
ccbb5c3e01 | ||
|
|
49b63e084f | ||
|
|
107321e385 | ||
|
|
1d214b4aed | ||
|
|
2e1347aba4 | ||
|
|
9ddb5931fb | ||
|
|
913064d6cc | ||
|
|
fb45b8a5c9 | ||
|
|
f5c9056430 | ||
|
|
0e39b59700 | ||
|
|
552af5455e | ||
|
|
8759bc1b41 | ||
|
|
09384df32c | ||
|
|
20538516b9 | ||
|
|
0759421d11 | ||
|
|
bf7417981f | ||
|
|
dba41e2e4a | ||
|
|
bc6472bb9e | ||
|
|
d4bd947bf5 | ||
|
|
d8e8eabf60 | ||
|
|
a70443af31 | ||
|
|
3f221e2edb | ||
|
|
56504534d8 | ||
|
|
80a45c91f9 | ||
|
|
3f695fdfaf | ||
|
|
88433bca22 | ||
|
|
34689eb2d2 | ||
|
|
211aea1441 | ||
|
|
74a46788cd | ||
|
|
7213c26798 | ||
|
|
fa1fb47d75 | ||
|
|
848ed14788 | ||
|
|
4c8a5dfb05 | ||
|
|
4f61ba766d | ||
|
|
b9eeb6e6eb | ||
|
|
d5fa2af353 | ||
|
|
a877926f08 | ||
|
|
3e4e6f7ced | ||
|
|
936eb43c0e | ||
|
|
bb66cfa780 | ||
|
|
1d626cb6ac | ||
|
|
580346f4a7 | ||
|
|
0fbcf64108 | ||
|
|
267faa3851 | ||
|
|
fe50481f7b | ||
|
|
759616abd4 | ||
|
|
eb8fd07900 | ||
|
|
c99559dbe9 | ||
|
|
966c4244cb | ||
|
|
81283f8bcb | ||
|
|
8b84e5b3f9 | ||
|
|
e1d5ddb478 | ||
|
|
2da0322329 | ||
|
|
fefb35c782 | ||
|
|
b2433a664c | ||
|
|
adad4279f3 | ||
|
|
3ca0a39a35 | ||
|
|
52594e64d0 | ||
|
|
3364c1b893 | ||
|
|
0801b3f495 | ||
|
|
657f00fe36 | ||
|
|
044c81b644 | ||
|
|
507d8fdc6f | ||
|
|
31e29e62f4 | ||
|
|
dfcb572985 | ||
|
|
1d324176d1 | ||
|
|
37b3190752 | ||
|
|
d51265d48f | ||
|
|
dc14ac7a8f | ||
|
|
fb52a24da3 | ||
|
|
fbafb19657 | ||
|
|
6c4438d8a9 | ||
|
|
be00737ced | ||
|
|
07b93dcf80 | ||
|
|
374c6a27db | ||
|
|
36c9e95969 | ||
|
|
a3142ee4e6 | ||
|
|
437caeb90f | ||
|
|
af49cace8d | ||
|
|
13b78d0d89 | ||
|
|
65c135b451 | ||
|
|
ec162f265f | ||
|
|
ba99696771 | ||
|
|
4eeea640f4 | ||
|
|
cc6f1020d0 | ||
|
|
316ddc2382 | ||
|
|
3452625fac | ||
|
|
426e0105a6 | ||
|
|
18f39aa012 | ||
|
|
631b635652 | ||
|
|
49695d47d3 | ||
|
|
5cec477131 | ||
|
|
a5d0300787 | ||
|
|
09b84c51ee | ||
|
|
afe53997bf | ||
|
|
c42e412c0a | ||
|
|
542e7feba8 | ||
|
|
dc085e0bd2 | ||
|
|
7c9517343c | ||
|
|
0b4fa41aff | ||
|
|
e138e2c880 | ||
|
|
0d6345e98b | ||
|
|
a84bcf597d | ||
|
|
4bbd4ba855 | ||
|
|
9e5b56b475 | ||
|
|
dd383037fd | ||
|
|
3cd24c0a51 | ||
|
|
8bfdb4ed0c | ||
|
|
41507d8129 | ||
|
|
317a98a5a9 | ||
|
|
1395794923 | ||
|
|
073e9d06ec | ||
|
|
fd1b04932a | ||
|
|
d4b625b48e | ||
|
|
82337dec44 | ||
|
|
f1d0700252 | ||
|
|
e1383a2d8e | ||
|
|
6773adc771 | ||
|
|
ee2afb35dd | ||
|
|
0adcda387a | ||
|
|
fc1664d9fc | ||
|
|
70bd35abe2 | ||
|
|
12768babdf | ||
|
|
bc2a1160b8 | ||
|
|
75542e8f5d | ||
|
|
fcb55f841a | ||
|
|
0efb67b51e | ||
|
|
54ebf2a699 | ||
|
|
154e601f4e | ||
|
|
4cca75b2e1 | ||
|
|
6d616e55ae | ||
|
|
95b1a640b6 | ||
|
|
ecc12c9ba1 | ||
|
|
9e50993c13 | ||
|
|
b32ec857b1 | ||
|
|
0de42d56fc | ||
|
|
6378ad69bb | ||
|
|
9616e9bf3b | ||
|
|
7c8b73bffb | ||
|
|
ae178c77bd | ||
|
|
2220651253 | ||
|
|
7fdd801479 | ||
|
|
27002ad1ea | ||
|
|
986dd2fac1 | ||
|
|
3965b490a9 | ||
|
|
b999e16406 | ||
|
|
7fb9bebd46 | ||
|
|
3b8a9dd6ec | ||
|
|
cfbee59152 | ||
|
|
b4db28fed2 | ||
|
|
c9aec3e866 | ||
|
|
1d1f8be260 | ||
|
|
38e6c0ad3f | ||
|
|
7ecf4ad54d | ||
|
|
1c02b4b9f4 | ||
|
|
d0119548c1 | ||
|
|
95ac6071b9 | ||
|
|
3a4e667078 | ||
|
|
afdefefbe4 | ||
|
|
5360c0c588 | ||
|
|
74a05a7f53 | ||
|
|
a68acf5c66 | ||
|
|
ce18c36ed9 | ||
|
|
8e39cf62e7 | ||
|
|
707d379b97 | ||
|
|
88a0a48b03 | ||
|
|
d51b90a880 | ||
|
|
e9912bcf8a | ||
|
|
4a5cc9f610 | ||
|
|
e29fc62b68 | ||
|
|
b55e1dcb5e | ||
|
|
6f4775a8ee | ||
|
|
c7e2f558a0 | ||
|
|
328860c8ba | ||
|
|
89ac111853 | ||
|
|
3d4f588a7f | ||
|
|
8f74bf314d | ||
|
|
0dd5ebbdbe | ||
|
|
2ae60767a3 | ||
|
|
64f31f70f9 | ||
|
|
23eacbd132 | ||
|
|
e9f16fca96 | ||
|
|
3d30de91f3 | ||
|
|
f68d2f7c7f | ||
|
|
f660d30138 | ||
|
|
b10276ff98 | ||
|
|
7d353bbe2a | ||
|
|
5696f91a1e | ||
|
|
3932e62fc7 | ||
|
|
729304aef5 | ||
|
|
40cce050e7 | ||
|
|
bb6ee71f08 | ||
|
|
0d0642fd67 | ||
|
|
08e6cf3dd2 | ||
|
|
044134eba0 | ||
|
|
9fa6fa522e | ||
|
|
d0cd98a63a | ||
|
|
88eae9dabb | ||
|
|
f2f1801c25 | ||
|
|
a9e351e00d | ||
|
|
d65841a2db | ||
|
|
9da57e7458 | ||
|
|
3a3fb98f79 | ||
|
|
503ed9c331 | ||
|
|
2784d65618 | ||
|
|
47ea69233b | ||
|
|
a884e37de1 | ||
|
|
0102a8665a | ||
|
|
cb63189f6b | ||
|
|
d77c83f4ba | ||
|
|
8cf3ac200b | ||
|
|
477877406a | ||
|
|
2bf2f34b12 | ||
|
|
7453c26ec4 | ||
|
|
b059ba69d6 | ||
|
|
36ca57a54e | ||
|
|
efa6678bcc | ||
|
|
b8f1850bba | ||
|
|
5268f55344 | ||
|
|
e44c9a000d | ||
|
|
ffc926bda5 | ||
|
|
07c1ba1f5e | ||
|
|
14168eadb2 | ||
|
|
58771fc41c | ||
|
|
1e06c66c77 | ||
|
|
c73771e3ce | ||
|
|
350d2bcd6e | ||
|
|
b2c523e56d | ||
|
|
5bc5abf0e7 | ||
|
|
44352e9ee4 | ||
|
|
7ccc609da2 | ||
|
|
ebc0168072 | ||
|
|
4ba7427fa0 | ||
|
|
9dc5335e3e | ||
|
|
d333de1980 | ||
|
|
96afa8bd2b | ||
|
|
797bbeabeb | ||
|
|
20cdab5546 | ||
|
|
6765234b60 | ||
|
|
4c27898ce7 | ||
|
|
d34ae0850c | ||
|
|
e9a85aa4e4 | ||
|
|
2a16fc74fd | ||
|
|
f65254680a | ||
|
|
d64edb6896 | ||
|
|
3f9ad8e104 | ||
|
|
1c772ef699 | ||
|
|
809b89b5af | ||
|
|
681e012fb5 | ||
|
|
3be36643a1 | ||
|
|
21e19ef69f | ||
|
|
69a42fc901 | ||
|
|
525789cd36 | ||
|
|
367d660c08 | ||
|
|
4d73e4d605 | ||
|
|
d86cc5bf42 | ||
|
|
5f262da09d | ||
|
|
82985a9488 | ||
|
|
afcdb65f80 | ||
|
|
6b66e86f40 | ||
|
|
cb145d290e | ||
|
|
167803d2a1 | ||
|
|
58a981d2f6 | ||
|
|
8963cd1fab | ||
|
|
6526de024a | ||
|
|
55cd5a9a78 | ||
|
|
3f4c283203 | ||
|
|
1e63e7c08b | ||
|
|
33fc3af775 | ||
|
|
6d9739165e | ||
|
|
7c5396ffb9 | ||
|
|
8319398957 | ||
|
|
a1509876de | ||
|
|
0f2cf51f43 | ||
|
|
e99ff4fdbc | ||
|
|
25431f32a2 | ||
|
|
6ba1fe7568 | ||
|
|
bfae92e307 | ||
|
|
9c5bf542d1 | ||
|
|
61161269d8 | ||
|
|
8fe004e98e | ||
|
|
09e5f17b5d | ||
|
|
db20e29af6 | ||
|
|
5f5c95cc68 | ||
|
|
68f3015712 | ||
|
|
240a697f6c | ||
|
|
5a0dc808fd | ||
|
|
befbf6bf13 | ||
|
|
2d5c21c457 | ||
|
|
25977d56c8 | ||
|
|
4dcf0b8ae0 | ||
|
|
9574d11dc8 | ||
|
|
3d4689756c | ||
|
|
90114514a9 | ||
|
|
7757e59e78 | ||
|
|
adb89e0121 | ||
|
|
b7a7953757 | ||
|
|
d25ef7eea4 | ||
|
|
30a82076ba | ||
|
|
860339c132 | ||
|
|
008723c62f | ||
|
|
9e0ce23a03 | ||
|
|
04ba433ca6 | ||
|
|
d884272ba8 | ||
|
|
e609c88334 | ||
|
|
e92a41fa3a | ||
|
|
df5f9f4a15 | ||
|
|
d9466cad0e | ||
|
|
150443b014 | ||
|
|
9e36af7916 | ||
|
|
85b8675e7a | ||
|
|
ae594ad92c | ||
|
|
8d6fedf817 | ||
|
|
f4f8fa7c94 | ||
|
|
fb5fbb8088 | ||
|
|
e06a807d30 | ||
|
|
6b09842cb6 | ||
|
|
ca813389dc | ||
|
|
e624171ba1 | ||
|
|
0bbfb28992 | ||
|
|
ee7bd695fd | ||
|
|
1cc17bfe7a | ||
|
|
8ae492dfeb | ||
|
|
e8789d7cb9 | ||
|
|
0053cd0d0d | ||
|
|
c32477a223 | ||
|
|
5e1e92626c | ||
|
|
7fee85c80a | ||
|
|
a0c25941a8 | ||
|
|
5eb468bce0 | ||
|
|
7f8dd0e939 | ||
|
|
28701cb9dd | ||
|
|
9b7f492c65 | ||
|
|
6eda79d02d | ||
|
|
fb5cf8e3ac | ||
|
|
55e128cced | ||
|
|
13056af8b2 | ||
|
|
972c52891d | ||
|
|
e10a8d95f6 | ||
|
|
97f2be348c | ||
|
|
2b21312b36 | ||
|
|
3a818b6d45 | ||
|
|
1709ab6810 | ||
|
|
ce925ba56f | ||
|
|
4ad14f6a2c | ||
|
|
579e48edbb | ||
|
|
6a08f2281a | ||
|
|
91729437a0 | ||
|
|
3af7af0b8f | ||
|
|
1ddd00433e | ||
|
|
de160bb2d1 | ||
|
|
ff62b6742b | ||
|
|
6da0af94df | ||
|
|
5d87a274a5 | ||
|
|
df9667a497 | ||
|
|
e3e2ad4ae5 | ||
|
|
ace4ba3171 | ||
|
|
0935ae330a | ||
|
|
9e02b13ab3 | ||
|
|
5a486a940c | ||
|
|
d05ae4b444 | ||
|
|
73b0610d89 | ||
|
|
57e862712a | ||
|
|
73aec9ce63 | ||
|
|
a9fefcf600 | ||
|
|
59ce67e2e5 | ||
|
|
2182209a8a | ||
|
|
e29a8b3a9c | ||
|
|
ace3f37af4 | ||
|
|
37b6899660 | ||
|
|
570b12ec13 | ||
|
|
ac286ef734 | ||
|
|
b3663b5da2 | ||
|
|
d761d8b168 | ||
|
|
fe7c6fee34 | ||
|
|
9906daeca7 | ||
|
|
5fb54095d2 | ||
|
|
3fdc678aae | ||
|
|
a0088ccce1 | ||
|
|
be081929f4 | ||
|
|
b0b086d473 | ||
|
|
6798af52b6 | ||
|
|
4d5ebafa6d | ||
|
|
ec8873b178 | ||
|
|
c45f205593 | ||
|
|
027b2063ba | ||
|
|
b531c4c2fe | ||
|
|
4b010df99e | ||
|
|
5e4dd4be9c | ||
|
|
04d5896c1c | ||
|
|
f947274626 | ||
|
|
f6939f71a7 | ||
|
|
25aa17ad89 | ||
|
|
05ee057db5 | ||
|
|
297e2747f3 | ||
|
|
77de233117 | ||
|
|
02b67edaf5 | ||
|
|
8549ccfd8c | ||
|
|
ffd16b55a6 | ||
|
|
d744c997d8 | ||
|
|
6b421cc354 | ||
|
|
37ec29b225 | ||
|
|
ca7f6a26b5 | ||
|
|
9b69d22d7e | ||
|
|
4ab4cf8532 | ||
|
|
3341b282b7 | ||
|
|
bb3b836dbb | ||
|
|
1873c67540 | ||
|
|
8fd8f23a6b | ||
|
|
f225051348 | ||
|
|
b2e3fdef0f | ||
|
|
c13810ebaa | ||
|
|
19a982cf69 | ||
|
|
746a47982b | ||
|
|
ddb5390d88 | ||
|
|
fce20e514e | ||
|
|
327cbf48f5 | ||
|
|
0f1f509be7 | ||
|
|
c8f0c7e9ed | ||
|
|
a7989077ab | ||
|
|
7e34737b2b | ||
|
|
af66ed2505 | ||
|
|
ea4068757d | ||
|
|
0a0659d737 | ||
|
|
b6df4680df | ||
|
|
e04090b477 | ||
|
|
c9fb6f7bdb | ||
|
|
ad6b05ae17 | ||
|
|
29b18d9ab7 | ||
|
|
ad309cdeae | ||
|
|
e4322a716c | ||
|
|
90886c0760 | ||
|
|
957beeb0e9 | ||
|
|
522ad4cca6 | ||
|
|
dc76b24e5f | ||
|
|
e3e3053f32 | ||
|
|
c8c3f20840 | ||
|
|
f6682aae77 | ||
|
|
0ba1b73395 | ||
|
|
4c995eb498 | ||
|
|
144cfe70bf | ||
|
|
855f26c43d | ||
|
|
f86e159536 | ||
|
|
243c4e1e83 | ||
|
|
9ae7f186bc | ||
|
|
f8d114be42 | ||
|
|
2c70251df1 | ||
|
|
d380db25be | ||
|
|
e8938b1069 | ||
|
|
4a28333039 | ||
|
|
ad7f2b2aec | ||
|
|
ff665b37cb | ||
|
|
ce73843014 | ||
|
|
bae6f653d1 | ||
|
|
eec6d09959 | ||
|
|
c5fa8ed321 | ||
|
|
abc16b919d | ||
|
|
2de7cd32ea | ||
|
|
098aa18538 | ||
|
|
cf6281a5a7 | ||
|
|
f00710a57e | ||
|
|
c953904343 | ||
|
|
ddd36338da | ||
|
|
d76b6f878e | ||
|
|
f25ef8d682 | ||
|
|
33a2c01ea2 | ||
|
|
9c637df77e | ||
|
|
29072797ca | ||
|
|
db69ceade6 | ||
|
|
b9c248e7e7 | ||
|
|
d533b59ee3 | ||
|
|
5ad2980d69 | ||
|
|
ca36ac2ba1 | ||
|
|
ba675d6a55 | ||
|
|
e4c5a4f61b | ||
|
|
a8e52ad89f | ||
|
|
8cf4fb53aa | ||
|
|
1769ae54e4 | ||
|
|
e545679265 | ||
|
|
981080500b | ||
|
|
636d28b784 | ||
|
|
188783ac1a | ||
|
|
ff650d50a2 | ||
|
|
78689645dc | ||
|
|
26970579b8 | ||
|
|
04b4f53488 | ||
|
|
c310941f69 | ||
|
|
c02f146791 | ||
|
|
a631200cca | ||
|
|
6207a3f999 | ||
|
|
0bd01824f6 | ||
|
|
4465e2c46b | ||
|
|
34b309b99a | ||
|
|
c6725884bc | ||
|
|
a31738f6f1 | ||
|
|
39a2867ea8 | ||
|
|
468c3df82d | ||
|
|
d5b017407d | ||
|
|
4b044bd8e1 | ||
|
|
aeaf64b467 | ||
|
|
a137f817f5 | ||
|
|
ff87145537 | ||
|
|
667481c371 | ||
|
|
af71605769 | ||
|
|
4657a3bd0f | ||
|
|
cb7366f472 | ||
|
|
bf803e241f | ||
|
|
8a8d023f90 | ||
|
|
5b3aa45e58 | ||
|
|
c4403c523f | ||
|
|
07b89b2bad | ||
|
|
68b79f97f3 | ||
|
|
815d72065c | ||
|
|
e0dc721324 | ||
|
|
2f873edc9c | ||
|
|
d5f46a846a | ||
|
|
f5a923b9d1 | ||
|
|
36bab6ef06 | ||
|
|
5273900b0e | ||
|
|
1451344221 | ||
|
|
8ed9f779cd | ||
|
|
f548a966f5 | ||
|
|
67ad31b8b2 | ||
|
|
35f46eaa3f | ||
|
|
ccfb125f02 | ||
|
|
f29e3ce8d5 | ||
|
|
bcb4646d6b | ||
|
|
5b8af30da1 | ||
|
|
30fadaed7f | ||
|
|
2b10ecfa37 | ||
|
|
f7eb2b697e | ||
|
|
c01282a322 | ||
|
|
0e3f18ed70 | ||
|
|
e5b1d30f1b | ||
|
|
6746b751c4 | ||
|
|
544c69c61c | ||
|
|
0ab66db7b9 | ||
|
|
f7669c201f | ||
|
|
0b3fbdba87 | ||
|
|
3dad837ca6 | ||
|
|
d7e78059b0 | ||
|
|
01f7abfc63 | ||
|
|
e57e89b9d5 | ||
|
|
bcc1f93370 | ||
|
|
b161d72326 | ||
|
|
66c013682f | ||
|
|
9f3ba737d6 | ||
|
|
f86f5ad224 | ||
|
|
8b6b3ff28a | ||
|
|
4a3dc2cea2 | ||
|
|
bd0cfffe23 | ||
|
|
8c5ea7ec55 | ||
|
|
412d1b0a01 | ||
|
|
642be502c0 | ||
|
|
5c4a42caa0 | ||
|
|
e847788569 | ||
|
|
86ca5b3f16 | ||
|
|
9b1fbdbca6 | ||
|
|
97391fd4b9 | ||
|
|
68eda78704 | ||
|
|
7c52a1c04b | ||
|
|
9d34fc394c | ||
|
|
973c9872f9 | ||
|
|
eef7ba48dd | ||
|
|
299ff2b23f | ||
|
|
f8bfea8bae | ||
|
|
e199c33c6e | ||
|
|
08296cd66d | ||
|
|
197b503f3e | ||
|
|
129eb178eb | ||
|
|
6b70f5e490 | ||
|
|
4aa6d39fd8 | ||
|
|
51adaf2c47 | ||
|
|
ea5b901bcc | ||
|
|
f1f19841bd | ||
|
|
655ad34414 | ||
|
|
017eecb8e8 | ||
|
|
b8e382b011 | ||
|
|
c9af358e4b | ||
|
|
3afcfe3330 | ||
|
|
b521d8564a | ||
|
|
53a13e8bc6 | ||
|
|
f3f5e2e162 | ||
|
|
ec41d849bb | ||
|
|
1d547fe273 | ||
|
|
b52d8fbebe | ||
|
|
b61a2c722c | ||
|
|
c455d2c1de | ||
|
|
77070f5ab9 | ||
|
|
8d5f7160ac | ||
|
|
b167ce2913 | ||
|
|
3ac15ca8d1 | ||
|
|
f703d4fc3e | ||
|
|
77c461fed7 | ||
|
|
a89c21b06a | ||
|
|
b74aa6b14c | ||
|
|
0c4a791111 | ||
|
|
1feedd4d9c | ||
|
|
0ec1808956 | ||
|
|
546e7cafa4 | ||
|
|
d9926a1c21 | ||
|
|
e50969e31c | ||
|
|
a6d9998e1d | ||
|
|
a42f9e4ee3 | ||
|
|
f16db6cd80 | ||
|
|
4943606f4a | ||
|
|
87629dda81 | ||
|
|
71928b473e | ||
|
|
a0bee9fa0a | ||
|
|
0defd927f3 | ||
|
|
6c41e8f63f | ||
|
|
fa67a4e956 | ||
|
|
bf9352fb26 | ||
|
|
7573d4e1ba | ||
|
|
bfb483898f | ||
|
|
f363788d76 | ||
|
|
714056f157 | ||
|
|
1abc96fa27 | ||
|
|
0fa98479ad | ||
|
|
02f2171010 | ||
|
|
a5e7d0a90f | ||
|
|
9fb5134f64 | ||
|
|
9aeb23dfe9 | ||
|
|
e59d8c9378 | ||
|
|
0616667688 | ||
|
|
9747cc9e58 | ||
|
|
7b44dea4b1 | ||
|
|
18aea922e9 | ||
|
|
7d194aceb6 | ||
|
|
2722b8a3df | ||
|
|
fd754ff8f8 | ||
|
|
b7738e7af3 | ||
|
|
99bebabac9 | ||
|
|
0ed48b364a | ||
|
|
b38b8b9c18 | ||
|
|
5434856136 | ||
|
|
aa1eb2f40d | ||
|
|
7260d7883c | ||
|
|
154250f551 | ||
|
|
3e4fb92cfb | ||
|
|
0da713e278 | ||
|
|
94cb1545b3 | ||
|
|
411527a240 | ||
|
|
7777057d35 | ||
|
|
dc5ef9ad01 | ||
|
|
7471f65d95 | ||
|
|
5d4b450c52 | ||
|
|
483b1f51c9 | ||
|
|
ecac7a629e | ||
|
|
21209ff46b | ||
|
|
716bdc36fd | ||
|
|
4f120f3714 | ||
|
|
dd20a3ce7e | ||
|
|
c727c86245 | ||
|
|
82b4ec22be | ||
|
|
501f1e6de0 | ||
|
|
414d5b648c | ||
|
|
a237e7f860 | ||
|
|
07a3bef25c | ||
|
|
da67260c95 | ||
|
|
2f51285349 | ||
|
|
ab9c9068d4 | ||
|
|
6b4d7d7315 | ||
|
|
64465c1318 | ||
|
|
a506adea41 | ||
|
|
f5ae1ce00b | ||
|
|
738d6f1040 | ||
|
|
ba372197fb | ||
|
|
bde27ccec3 | ||
|
|
d2cf74027c | ||
|
|
bc966577ff | ||
|
|
fdf4dff561 | ||
|
|
fab6cbed75 | ||
|
|
051eede1ed | ||
|
|
0696cac50b | ||
|
|
0c2485e86c | ||
|
|
7d696a7063 | ||
|
|
53573e950f | ||
|
|
1e99983263 | ||
|
|
5409e43fb5 | ||
|
|
f33f891c54 | ||
|
|
6e55552292 | ||
|
|
e569f82dd3 | ||
|
|
1a4940bbda | ||
|
|
22dd3c8048 | ||
|
|
04b7648e00 | ||
|
|
be0759d465 | ||
|
|
339d939873 | ||
|
|
c1950e40e6 | ||
|
|
ad76bad8fd | ||
|
|
55737e4ff6 | ||
|
|
f3b4ddee6c | ||
|
|
758b504cf3 | ||
|
|
416f7c2600 | ||
|
|
b9f02f22c4 | ||
|
|
b635610409 | ||
|
|
d4d4d6217f | ||
|
|
be47320a05 | ||
|
|
9f3ce7551a | ||
|
|
5f3b79e21d | ||
|
|
56c12bd1ea | ||
|
|
3a6da7c594 | ||
|
|
9909a80d6a | ||
|
|
a52cae1dba | ||
|
|
61b01f82ef | ||
|
|
75b847132a | ||
|
|
32ec672311 | ||
|
|
e2812f722d | ||
|
|
aa64a5328e | ||
|
|
59510f509a | ||
|
|
a35c7bc81a | ||
|
|
02769929b3 | ||
|
|
1a09003a6e | ||
|
|
a827714823 | ||
|
|
8f9e76ca42 | ||
|
|
478ace984a | ||
|
|
028fd268b8 | ||
|
|
876a095166 | ||
|
|
14c3ff58a4 | ||
|
|
2819b302c3 | ||
|
|
9fb82f9687 | ||
|
|
df80deb070 | ||
|
|
5fb72d7c8f | ||
|
|
313d1d5d83 | ||
|
|
b7d6133593 | ||
|
|
5b6bb114ad | ||
|
|
56f082c9d4 | ||
|
|
a1b798e555 | ||
|
|
c91e08fbfd | ||
|
|
f882434547 | ||
|
|
f1ca17f6a1 | ||
|
|
fe7cda57e4 | ||
|
|
a3f9abcbd1 | ||
|
|
77041e2cd2 | ||
|
|
14235f171b | ||
|
|
1f90e3ce7f | ||
|
|
676d8bb624 | ||
|
|
4bcaf5d306 | ||
|
|
70d3ad3ca1 | ||
|
|
46debfb8b5 | ||
|
|
9a4b572d34 | ||
|
|
ddc75cc46b | ||
|
|
dafd0bc49a | ||
|
|
2cb912e4f4 | ||
|
|
91a513e87d | ||
|
|
efdb41f2a6 | ||
|
|
26b850c15c | ||
|
|
9941735ae7 | ||
|
|
29e5dc4413 | ||
|
|
3a660c5527 | ||
|
|
738991494a | ||
|
|
ee4c3ff1b8 | ||
|
|
60486bcc46 | ||
|
|
79eed5182e | ||
|
|
5de0f3f36a | ||
|
|
9f316e11bd | ||
|
|
c6d8f6da70 | ||
|
|
73fd98b82e | ||
|
|
6cb725391d | ||
|
|
c13facdaca | ||
|
|
e259474362 | ||
|
|
7740855a78 | ||
|
|
d605170f9f | ||
|
|
4734af747b | ||
|
|
5d17731b73 | ||
|
|
07a7fde825 | ||
|
|
049abef2d4 | ||
|
|
7c60b50a39 | ||
|
|
4f83c60296 | ||
|
|
cd5817b67e | ||
|
|
a4d580a6f8 | ||
|
|
ca43e634b5 | ||
|
|
85324f80fe | ||
|
|
56a7fcf189 | ||
|
|
8cd15a02cd | ||
|
|
05ad335ae9 | ||
|
|
ea771c17c5 | ||
|
|
7faeb2ff2b | ||
|
|
65ebfb16c9 | ||
|
|
44a65fc5de | ||
|
|
f031eb1ef2 | ||
|
|
b50d79542c | ||
|
|
8351543c0f | ||
|
|
8add78ed5e | ||
|
|
4b3a3d6faa | ||
|
|
71d012fa61 | ||
|
|
114df1f137 | ||
|
|
00adf7ff17 | ||
|
|
3f0415fa24 | ||
|
|
348d0c944e | ||
|
|
e9ba5fcaf3 | ||
|
|
48097745f6 | ||
|
|
1091ca969f | ||
|
|
09d62cc630 | ||
|
|
a2ead993e6 | ||
|
|
b330aa8dd5 | ||
|
|
1b8053a618 | ||
|
|
70e5ab3fde | ||
|
|
f4490f6918 | ||
|
|
dadd987bf4 | ||
|
|
a1ced29279 | ||
|
|
791d6c1336 | ||
|
|
10abb07960 | ||
|
|
040a5ddad5 | ||
|
|
e7eb04954d | ||
|
|
09b00fa4e3 | ||
|
|
74842fd6d4 | ||
|
|
f23b47ba17 | ||
|
|
15eedfbb12 | ||
|
|
cfc25e08dc | ||
|
|
1583eb36e4 | ||
|
|
406452f019 | ||
|
|
12b139beaf | ||
|
|
2ed1c22227 | ||
|
|
eb23ef1747 | ||
|
|
970b10d01b | ||
|
|
61b938d6fa | ||
|
|
0c34555b02 | ||
|
|
83a988e2e4 | ||
|
|
91efe1cb5a | ||
|
|
735241f049 | ||
|
|
dd82370a80 | ||
|
|
dab052e53d | ||
|
|
322b061632 | ||
|
|
43847f2244 | ||
|
|
8f9ba96c59 | ||
|
|
10406c73b3 | ||
|
|
67a6a12916 | ||
|
|
139122c57f | ||
|
|
fdd76b3461 | ||
|
|
959d7ca9d0 | ||
|
|
e490e5d0ab | ||
|
|
3b568b0943 | ||
|
|
b2e1b38864 | ||
|
|
5c6fe97b35 | ||
|
|
2071070f39 | ||
|
|
89a78a5f3c | ||
|
|
bc23a6bb05 | ||
|
|
ac1983eae3 | ||
|
|
33c5fc95b4 | ||
|
|
6a953394f4 | ||
|
|
c152a88ff6 | ||
|
|
cbf57e7421 | ||
|
|
3f3ae48ff4 | ||
|
|
27ca0db7a6 | ||
|
|
49f34fbf68 | ||
|
|
fe6094a822 | ||
|
|
8a30c7992d | ||
|
|
70eb9335bd | ||
|
|
da80f91e1c | ||
|
|
cc60d193ce | ||
|
|
3a05c421e0 | ||
|
|
0f99410ba1 | ||
|
|
442dadd6fe | ||
|
|
da9dd58f34 | ||
|
|
bd01d80ffc | ||
|
|
7eda72d440 | ||
|
|
c75339edcc | ||
|
|
b0b7244b3a | ||
|
|
a9e849ff4f | ||
|
|
4c95a4d7c6 | ||
|
|
eac9fabd48 | ||
|
|
e2a08fa824 | ||
|
|
d403749d09 | ||
|
|
582c2105a9 | ||
|
|
f39a34ccfa | ||
|
|
08f5b9f1f9 | ||
|
|
793962c5b8 | ||
|
|
0d20130d07 | ||
|
|
617090cfda | ||
|
|
a9e604d51d | ||
|
|
e599b86424 | ||
|
|
da9e584921 | ||
|
|
e9d764d7ad | ||
|
|
6268955778 | ||
|
|
4ddfc6e9a2 | ||
|
|
dcbc05a9cd | ||
|
|
4c705334fa | ||
|
|
c12da599b9 | ||
|
|
f685a48008 | ||
|
|
7c15e41da5 | ||
|
|
7b540f0226 | ||
|
|
e29c22e662 | ||
|
|
f0d3b47ad8 | ||
|
|
bfe7533546 | ||
|
|
880bf17dae | ||
|
|
c9da3363a0 | ||
|
|
9bd4ed3e60 | ||
|
|
68fcc19565 | ||
|
|
8e4efd071e | ||
|
|
f2ad9f6fad | ||
|
|
968c5eb767 | ||
|
|
19424e95db | ||
|
|
0f9ef2506f | ||
|
|
1f1195975f | ||
|
|
87fce8ef27 | ||
|
|
d2a4f64fd6 | ||
|
|
a357d84dce | ||
|
|
48c96bbaea | ||
|
|
c666794ce3 | ||
|
|
1ee3df6976 | ||
|
|
d4dea53ae9 | ||
|
|
d477a9222e | ||
|
|
69a9d29190 | ||
|
|
e2425592b6 | ||
|
|
964b2661d8 | ||
|
|
8b65b524d5 | ||
|
|
f1ac2cd336 | ||
|
|
e73d0df2b6 | ||
|
|
af3f483924 | ||
|
|
809b0eb1f5 | ||
|
|
b5f3bfce92 | ||
|
|
aeb2baa495 | ||
|
|
afc70c120e | ||
|
|
ea9aff1d3f | ||
|
|
cecae419fb | ||
|
|
df4db50904 | ||
|
|
decc4002a0 | ||
|
|
5bb563e3bc | ||
|
|
9be82891b0 | ||
|
|
c97685fe6c | ||
|
|
358b671033 | ||
|
|
92a4bf4441 | ||
|
|
d7f80eab68 | ||
|
|
e30b356eb0 | ||
|
|
09a0803116 | ||
|
|
20ffedc745 | ||
|
|
0b1ad27ba8 | ||
|
|
6a1b2f0387 | ||
|
|
5465647c2e | ||
|
|
a2baeed329 | ||
|
|
92aa464edb | ||
|
|
da29298d4d | ||
|
|
afcf0795c4 | ||
|
|
394e2815db | ||
|
|
f3bbe4bb1f | ||
|
|
2a3a18a283 | ||
|
|
431c80f4f0 | ||
|
|
9ac18c39a1 | ||
|
|
d1b7473418 | ||
|
|
1ad52f131c | ||
|
|
8064bbbc3f | ||
|
|
64e898f6db | ||
|
|
fb34519b96 | ||
|
|
91fed47648 | ||
|
|
c05691b546 | ||
|
|
1732166328 | ||
|
|
8edde7a4b3 | ||
|
|
d11a0c9f14 | ||
|
|
7be2abe6b5 | ||
|
|
4a62cd4ad8 | ||
|
|
6d21b9448a | ||
|
|
2d1a3073f6 | ||
|
|
d7b9886387 | ||
|
|
1543e529f1 | ||
|
|
4043f320fe | ||
|
|
32b834aa04 | ||
|
|
b43ec3d6f0 | ||
|
|
316a25dead | ||
|
|
bfe020e06c | ||
|
|
5aae560683 | ||
|
|
86e72ffefb | ||
|
|
6416198e9f | ||
|
|
3c4cd9d08b | ||
|
|
6b3b8c6f2e | ||
|
|
fdb02ee5ca | ||
|
|
35f85ddd86 | ||
|
|
e30fa7d15e | ||
|
|
c476305149 | ||
|
|
45ad7696fe | ||
|
|
d86cd4e4b4 | ||
|
|
0e84d71559 | ||
|
|
5f14704eee | ||
|
|
a191db84f2 | ||
|
|
52dca859c7 | ||
|
|
e4d69f38b0 | ||
|
|
97fc001180 | ||
|
|
f544316314 | ||
|
|
ecdebb315f | ||
|
|
1f523be72d | ||
|
|
f2a20a0a80 | ||
|
|
e5a2efaa65 | ||
|
|
c44cb3246d | ||
|
|
9cfd9d7ce0 | ||
|
|
42a09ff17a | ||
|
|
66d90dd412 | ||
|
|
d5dfe7d457 | ||
|
|
0db0b4e302 | ||
|
|
635d6a19ef | ||
|
|
777844ae0c | ||
|
|
a10a4ad900 | ||
|
|
c330d694c7 | ||
|
|
73555f9088 | ||
|
|
e1ec65bd53 | ||
|
|
65b8e52d80 | ||
|
|
4b7a418e28 | ||
|
|
73d917b76e | ||
|
|
527a6003e2 | ||
|
|
26c731a382 | ||
|
|
8297563978 | ||
|
|
1da0526072 | ||
|
|
635a67afac | ||
|
|
c7e7c819a2 | ||
|
|
fbf677d9b2 | ||
|
|
d37b788ea8 | ||
|
|
cb336ff666 | ||
|
|
e2e5433beb | ||
|
|
c7b1038a9d | ||
|
|
c170fed6f9 | ||
|
|
d43aa12987 | ||
|
|
8e38b4f83c | ||
|
|
db4ae19246 | ||
|
|
82a89c6bfe | ||
|
|
166c70cab3 | ||
|
|
de78fe38c8 | ||
|
|
96fa69ff6b | ||
|
|
39d94bd3ea | ||
|
|
695ca29274 | ||
|
|
02e8da6c98 | ||
|
|
ca69ad8beb | ||
|
|
e42637226f | ||
|
|
ae25582178 | ||
|
|
5d85792178 | ||
|
|
acba9c0f61 | ||
|
|
ad7302a032 | ||
|
|
9f3bead99f | ||
|
|
38afc89407 | ||
|
|
c161bb287c | ||
|
|
06d7169674 | ||
|
|
8bf1640932 | ||
|
|
da50c888fe | ||
|
|
62dc8e4131 | ||
|
|
dc554ca61f | ||
|
|
cbb9149a82 | ||
|
|
dab7348da8 | ||
|
|
378e8a6224 | ||
|
|
289fdcc52b | ||
|
|
83e6e3e31f | ||
|
|
c387031252 | ||
|
|
403bd77eff | ||
|
|
b397c46184 | ||
|
|
0a6c4c31b2 | ||
|
|
02fcf184b5 | ||
|
|
b978126bb0 | ||
|
|
9f51d19087 | ||
|
|
859184000f | ||
|
|
1ad2f18c9e | ||
|
|
06a49a5f9e | ||
|
|
b811927e0e | ||
|
|
83cdd0a0c8 | ||
|
|
53c69cd2ce | ||
|
|
c6cf8e992d | ||
|
|
0c53e8c2d0 | ||
|
|
e1901e97c2 | ||
|
|
d694150372 | ||
|
|
4ab586aaf1 | ||
|
|
8a5209ad93 | ||
|
|
308fdf6e9a | ||
|
|
9f4e96fdfa | ||
|
|
c36af35730 | ||
|
|
424f478c3f | ||
|
|
5e0c272061 | ||
|
|
d99bdca094 | ||
|
|
187069bec9 | ||
|
|
01de768f09 | ||
|
|
73a861abf1 | ||
|
|
b4f60ee95c | ||
|
|
85e587a882 | ||
|
|
d91f6dc1b5 | ||
|
|
78c0d8cc88 | ||
|
|
b23d2ad43b | ||
|
|
ef68946e74 | ||
|
|
a5574f9189 | ||
|
|
ba61a92897 | ||
|
|
68fc3704e9 | ||
|
|
69867015e9 | ||
|
|
923f18ef76 | ||
|
|
7e8d254b95 | ||
|
|
6325c3f14a | ||
|
|
074a23e6b4 | ||
|
|
2fb61534a1 | ||
|
|
12b6c6ccf7 | ||
|
|
55ed7bd34d | ||
|
|
eeeef3eab5 | ||
|
|
96413b1604 | ||
|
|
2278fe42e5 | ||
|
|
3a183f869f | ||
|
|
6c5828822c | ||
|
|
9dd824ba50 | ||
|
|
d744ea3fca | ||
|
|
07352e82f1 | ||
|
|
1003cc9bf9 | ||
|
|
0ea5f4ac3a | ||
|
|
2b717997e2 | ||
|
|
20ebacf489 | ||
|
|
c6ef0e8887 | ||
|
|
f761d583b5 | ||
|
|
cee1ac150e | ||
|
|
71b47ae3ef | ||
|
|
36e3fda554 | ||
|
|
2b44a2c9bd | ||
|
|
af3b454805 | ||
|
|
3a0f3eaa50 | ||
|
|
80eb8d9e26 | ||
|
|
30c4136c4d | ||
|
|
83e4475021 | ||
|
|
c071d6d9f6 | ||
|
|
1df426aa5c | ||
|
|
023482406f | ||
|
|
04ba40981f | ||
|
|
fc10bdf24d | ||
|
|
28ad79c97a | ||
|
|
7661ad6653 | ||
|
|
e1436063ff | ||
|
|
3e11a28cd9 | ||
|
|
3ed80f3139 | ||
|
|
a698cc8112 | ||
|
|
916aaacb68 | ||
|
|
aaeb8150b7 | ||
|
|
5ba90cd8ea | ||
|
|
e9127523db | ||
|
|
92004f2e7e | ||
|
|
0eefc7a43c | ||
|
|
3a666702af | ||
|
|
3c0c939689 | ||
|
|
413f7c64e5 | ||
|
|
6f47c1ca20 | ||
|
|
abeebfe070 | ||
|
|
1a002eb23d | ||
|
|
71bc15aca1 | ||
|
|
65b24ce557 | ||
|
|
cfdd5edc49 | ||
|
|
b9035d3e0a | ||
|
|
e504913b0f | ||
|
|
af4133e3c9 | ||
|
|
a788b7e747 | ||
|
|
bb288f0284 | ||
|
|
f90abe9530 | ||
|
|
47c50c079d | ||
|
|
46bab7e4b9 | ||
|
|
3b0fea5fae | ||
|
|
443516cdda | ||
|
|
22fb49fa90 | ||
|
|
957d187ae4 | ||
|
|
b88ea6735b | ||
|
|
51de8fd10a | ||
|
|
2ef6052536 | ||
|
|
394b1e6351 | ||
|
|
c95d068ef5 | ||
|
|
dbda35ffe1 | ||
|
|
6396e23a2a | ||
|
|
529b4bd185 | ||
|
|
85b51e4e77 | ||
|
|
e53a25cbae | ||
|
|
41e7145973 | ||
|
|
db238cc23f | ||
|
|
75e9c798e0 | ||
|
|
99527051b5 | ||
|
|
57e0cc5442 | ||
|
|
73f45d87d5 | ||
|
|
ae88ba986e | ||
|
|
d6247902ec | ||
|
|
a566c28a49 | ||
|
|
2eddb63a83 | ||
|
|
fc7d5b055d | ||
|
|
87c8953e8e | ||
|
|
45d27a52f1 | ||
|
|
bed98303a3 | ||
|
|
d22acc59c9 | ||
|
|
c064e8d62f | ||
|
|
099a2cb586 | ||
|
|
042fe2a9d0 | ||
|
|
ff1c1107f3 | ||
|
|
41a3fd0fd0 | ||
|
|
b9169a5670 | ||
|
|
2ecd5fa28d | ||
|
|
e719b6cc41 | ||
|
|
67b8124a1d | ||
|
|
51ec499c89 | ||
|
|
3a4df25db2 | ||
|
|
37cf78ef45 | ||
|
|
727c622659 | ||
|
|
74a778e65f | ||
|
|
1fc0c9fe8a | ||
|
|
740d8ec5ab | ||
|
|
0bcc477d46 | ||
|
|
d2679f59c5 | ||
|
|
4ee147ea34 | ||
|
|
f1ca61d7d7 | ||
|
|
a80b5cf19b | ||
|
|
44ac84767e | ||
|
|
a40d7ae4dd | ||
|
|
35297f8d4f | ||
|
|
6f4202408c | ||
|
|
0b6548a282 | ||
|
|
faf5821816 | ||
|
|
188673b746 | ||
|
|
287c70e361 | ||
|
|
f6b44af998 | ||
|
|
84c3d9674f | ||
|
|
47d3758820 | ||
|
|
573ff3a24f | ||
|
|
32fcc22cb3 | ||
|
|
daba1238b5 | ||
|
|
d125567f4a | ||
|
|
993eca9327 | ||
|
|
e314844a4d | ||
|
|
017bc564af | ||
|
|
e076ff9085 | ||
|
|
2789493a5f | ||
|
|
4ed0635447 | ||
|
|
1904e504be | ||
|
|
834715ea2f | ||
|
|
380a3bbff4 | ||
|
|
6219326e02 | ||
|
|
6c4de5106b | ||
|
|
e936705840 | ||
|
|
9b2603b6f6 | ||
|
|
88856b847c | ||
|
|
f679878f7b | ||
|
|
f33acf8758 | ||
|
|
a846a4c643 | ||
|
|
899c2bb9cc | ||
|
|
f8f95e2dbd | ||
|
|
77c63511d8 | ||
|
|
0be5a6ab2b | ||
|
|
9802e74859 | ||
|
|
8e7d6eb151 | ||
|
|
5c18e4f114 | ||
|
|
fd2eafa7c6 | ||
|
|
422b8472fe | ||
|
|
5b213b0504 | ||
|
|
ad27d06979 | ||
|
|
c4b1251d0a | ||
|
|
01891f8815 | ||
|
|
adb68450ce | ||
|
|
2520f6fe49 | ||
|
|
c9278bfcdf | ||
|
|
8b838ff9ea | ||
|
|
154bdf0bca | ||
|
|
ed436c6f0c | ||
|
|
ae5dd2da4f | ||
|
|
f4b61e8c8d | ||
|
|
e49a3d377f | ||
|
|
b631b552bb | ||
|
|
3f21581a81 | ||
|
|
bb62ecf157 | ||
|
|
a268ab35ea | ||
|
|
62baec1841 | ||
|
|
7bca61f5bb | ||
|
|
ecf12a60e8 | ||
|
|
6de85cb047 | ||
|
|
39257717d8 | ||
|
|
b54762a8f6 | ||
|
|
bcae86196c | ||
|
|
7adfea8ca2 | ||
|
|
eab1a77683 | ||
|
|
84f5e0c0de | ||
|
|
2ce3900071 | ||
|
|
bf2c1f3e9e | ||
|
|
8ccd8a008d | ||
|
|
9513c1a8d6 | ||
|
|
0a1be2bfc3 | ||
|
|
8c6727949c | ||
|
|
ff9b717bf6 | ||
|
|
8c834a4ff6 | ||
|
|
8c01004219 | ||
|
|
8555b65c50 | ||
|
|
304fa5ecac | ||
|
|
88e630170e | ||
|
|
da8bdd62c8 | ||
|
|
54abeab80b | ||
|
|
1dc8a9f0e7 | ||
|
|
a62d54425c | ||
|
|
c8b2591ac2 | ||
|
|
ee1d8e1091 | ||
|
|
672fc8d79b | ||
|
|
84ff1a680a | ||
|
|
90c899407a | ||
|
|
55868eecd0 | ||
|
|
50dc98367c | ||
|
|
c4d3030d24 | ||
|
|
c6f101884b | ||
|
|
c0c0526fc8 | ||
|
|
375c88b110 | ||
|
|
a65f63747b | ||
|
|
a21edddf27 | ||
|
|
a88c23b6e8 | ||
|
|
216e37bf33 | ||
|
|
7bb3987acc | ||
|
|
6a147a17af | ||
|
|
2b7529e905 | ||
|
|
1ed321f964 | ||
|
|
2aee1b86f3 | ||
|
|
b5fc21b9f4 | ||
|
|
44581dbef5 | ||
|
|
205448c1e8 | ||
|
|
2d11c6ab29 | ||
|
|
6859c22b69 | ||
|
|
2d5413fc3b | ||
|
|
a6aa0e4cbf | ||
|
|
163848ab3b | ||
|
|
03747ba93e | ||
|
|
095c390df7 | ||
|
|
20597b3632 | ||
|
|
4728735acf | ||
|
|
9dcbd005f0 | ||
|
|
0ad2eb34c7 | ||
|
|
0e8a15e813 | ||
|
|
5b0d6a59cf | ||
|
|
fd3dc7e5fb | ||
|
|
c37edfd3e9 | ||
|
|
4a99b1df4b | ||
|
|
12e9b7eafa | ||
|
|
de1261ba28 | ||
|
|
5ee5a89a7f | ||
|
|
1ad2475f9e | ||
|
|
5b5675cc12 | ||
|
|
e699f6781e | ||
|
|
5f13c1cd9c | ||
|
|
a577944ab5 | ||
|
|
17ec3b0c2d | ||
|
|
fb75137540 | ||
|
|
6f87164ad6 | ||
|
|
a4d82cfe1e | ||
|
|
9f21eee2ec | ||
|
|
a40246d312 | ||
|
|
4a5aad0948 | ||
|
|
85ae7e9c9a | ||
|
|
2098b94b47 | ||
|
|
59ad6265a1 | ||
|
|
067572c6dd | ||
|
|
7f03f68fcc | ||
|
|
de862f9f1b | ||
|
|
b5e31c89c0 | ||
|
|
e898400fbd | ||
|
|
3ac7de7a22 | ||
|
|
ade66e7ece | ||
|
|
6673f9e39d | ||
|
|
2db2c0f0b7 | ||
|
|
17dc638c18 | ||
|
|
d6e28c42e5 | ||
|
|
6d475c40de | ||
|
|
ed7891bf01 | ||
|
|
e17da71a70 | ||
|
|
610bef9ff5 | ||
|
|
961c7d0f78 | ||
|
|
c1ba47beee | ||
|
|
ac8e5be9f4 | ||
|
|
c76952534e | ||
|
|
f0060718de | ||
|
|
982ab9e496 | ||
|
|
b74bcf2274 | ||
|
|
645cb5833d | ||
|
|
dc328e0c4a | ||
|
|
92c85bd20d | ||
|
|
f629eb8cb2 | ||
|
|
e4f41ff61d | ||
|
|
dae6ecb680 | ||
|
|
a57a7b1a76 | ||
|
|
03073b366b | ||
|
|
1bd8a9e744 | ||
|
|
0a5c991ab5 | ||
|
|
93deb84499 | ||
|
|
c4d4011c63 | ||
|
|
3d12f8d246 | ||
|
|
c3e720279c | ||
|
|
f1027ed198 | ||
|
|
fe3c5e4e8e | ||
|
|
d110131ad6 | ||
|
|
10bc1a9acc | ||
|
|
3f899f83ff | ||
|
|
fc05768374 | ||
|
|
03b57df630 | ||
|
|
4de3b6dc80 | ||
|
|
c7bbfef19a | ||
|
|
7f1130b52b | ||
|
|
2d696f46c3 | ||
|
|
2f43e4bc66 | ||
|
|
f8c23488c9 | ||
|
|
1e2cda9239 | ||
|
|
20cba9e89f | ||
|
|
f6d67ac260 | ||
|
|
74904b9cf2 | ||
|
|
82059645f1 | ||
|
|
13e9f18403 | ||
|
|
875821f2ba | ||
|
|
cc3be3aeed | ||
|
|
72af3c0489 | ||
|
|
65e54f6ed1 | ||
|
|
10196496f3 | ||
|
|
86f08862e4 | ||
|
|
83c726a34f | ||
|
|
a0415f73d4 | ||
|
|
93068f10ec | ||
|
|
7142c81c05 | ||
|
|
c0421a57da | ||
|
|
8f1ec1dfdf | ||
|
|
222dc8a239 | ||
|
|
0e4d2e7277 | ||
|
|
2bbff77e48 | ||
|
|
3315c67f0f | ||
|
|
b879bcb1eb | ||
|
|
ae99135c8d | ||
|
|
1defb38a6f | ||
|
|
56bc9e12ee | ||
|
|
116ebe0494 | ||
|
|
5ec843dcc8 | ||
|
|
a78b2d84ed | ||
|
|
cf4d80fc65 | ||
|
|
8118bc93a8 | ||
|
|
c772bc45c6 | ||
|
|
c1e7be3b8e | ||
|
|
17ecc56e83 | ||
|
|
6a42e6f6d4 | ||
|
|
75ba961e97 | ||
|
|
c2d5ce0ca2 | ||
|
|
32645b80c4 | ||
|
|
ff626ac763 | ||
|
|
59f8144c50 | ||
|
|
5a7c931293 | ||
|
|
1373d40fea | ||
|
|
3274bb54ad | ||
|
|
7db124068f | ||
|
|
39e2ffe212 | ||
|
|
0a213ddf03 | ||
|
|
5dc4cbdf82 | ||
|
|
1434e5a22e | ||
|
|
9acc1e1e97 | ||
|
|
daa47546c7 | ||
|
|
c5194d0a8f | ||
|
|
7ece8ff85c | ||
|
|
a4effeb3f9 | ||
|
|
d3f28a1d7f | ||
|
|
03cddd0acf | ||
|
|
04a737e04c | ||
|
|
966c54bef5 | ||
|
|
efcd9dfc35 | ||
|
|
db44a6e948 | ||
|
|
d6553fc6a7 | ||
|
|
fc9014f7ec | ||
|
|
b39ab76118 | ||
|
|
90777f78c9 | ||
|
|
7cb803ad5c | ||
|
|
8e063829c4 | ||
|
|
139c6be370 | ||
|
|
b6ac249c3c | ||
|
|
5e103b5fb7 | ||
|
|
de5be62da5 | ||
|
|
b5f608d026 | ||
|
|
58fe352fda | ||
|
|
b105093dcd | ||
|
|
d1c401fe7a | ||
|
|
964aa42b04 | ||
|
|
bf8660b21c | ||
|
|
43863a70c8 | ||
|
|
bd5a70c712 | ||
|
|
909ff4b8a9 | ||
|
|
bcfc62a3f2 | ||
|
|
d1924867db | ||
|
|
abfbd55305 | ||
|
|
b3611524f4 | ||
|
|
a63613dba0 | ||
|
|
7fec2b02d4 | ||
|
|
608a98c873 | ||
|
|
f951e5356b | ||
|
|
080ee87e07 | ||
|
|
fa60b9ae94 | ||
|
|
0d33ae52c6 | ||
|
|
77e4b28092 | ||
|
|
4817437d31 | ||
|
|
354b5a9365 | ||
|
|
58502b38d3 | ||
|
|
d44880dfa9 | ||
|
|
0c63632cc2 | ||
|
|
b93523c0b1 | ||
|
|
7ef40de98b | ||
|
|
196ec25682 | ||
|
|
c85af12d45 | ||
|
|
e452d1f5b4 | ||
|
|
ffea268d2e | ||
|
|
8e676db633 | ||
|
|
f6d74012b7 | ||
|
|
32dfc11c23 | ||
|
|
aad0ea6e23 | ||
|
|
05de2e998c | ||
|
|
24780d99e6 | ||
|
|
7c1cf61728 | ||
|
|
eb10d08671 | ||
|
|
abb0549e4b | ||
|
|
5327ea13ac | ||
|
|
be8ceae6e6 | ||
|
|
67ae033de7 | ||
|
|
161f7ced96 | ||
|
|
72bc11b180 | ||
|
|
15c2538532 | ||
|
|
fd9dd9343b | ||
|
|
1b8a1d4140 | ||
|
|
e132d10aec | ||
|
|
3dbda2dda2 | ||
|
|
a0105b45ae | ||
|
|
551b7768fc | ||
|
|
d6967db761 | ||
|
|
b0967cae69 | ||
|
|
401a799a1b | ||
|
|
ba98518c69 | ||
|
|
5e26e2ab1d | ||
|
|
08eca827b6 | ||
|
|
6b2b5af344 | ||
|
|
f32fbd9ed1 | ||
|
|
e3511d0ee0 | ||
|
|
fa13a6616f | ||
|
|
d4c2f91182 | ||
|
|
084fd8df63 | ||
|
|
328131b7aa | ||
|
|
85003429af | ||
|
|
6db77dcf75 | ||
|
|
1cde86823d | ||
|
|
dbd88e6aef | ||
|
|
45418583e9 | ||
|
|
77a1133723 | ||
|
|
25c208d81d | ||
|
|
67f87db511 | ||
|
|
7de96275dd | ||
|
|
e13d0bf656 | ||
|
|
8ed9f7effa | ||
|
|
12ab556477 | ||
|
|
509f8dab89 | ||
|
|
77429b6dd3 | ||
|
|
84d20d9e43 | ||
|
|
0c13703da3 | ||
|
|
b97b7a7493 | ||
|
|
be2951b45f | ||
|
|
1dd1a705b5 | ||
|
|
e4e80ff0cb | ||
|
|
9508ea982b | ||
|
|
47d655ea7f | ||
|
|
62271bf6ce | ||
|
|
0b27ac2f5c | ||
|
|
6fd481df97 | ||
|
|
b915e43391 | ||
|
|
c96b295700 | ||
|
|
9067da2df8 | ||
|
|
8cf2f52f7a | ||
|
|
681352ac3b | ||
|
|
d9c662d51f | ||
|
|
ad631d563b | ||
|
|
7cbaf11dda | ||
|
|
3be63549c0 | ||
|
|
17c6db6c33 | ||
|
|
86316b1828 | ||
|
|
efc3a69dbf | ||
|
|
ec883e1901 | ||
|
|
060814daa8 | ||
|
|
c53492a76a | ||
|
|
43675717b8 | ||
|
|
b21ed2fa36 | ||
|
|
0214baad5a | ||
|
|
c2d3ed2acc | ||
|
|
0339c8d025 | ||
|
|
0e0be0243b | ||
|
|
a2ce2447a6 | ||
|
|
9a1076256d | ||
|
|
72ef38d4a7 | ||
|
|
d397ce68dc | ||
|
|
5e20b7976f | ||
|
|
36f712b949 | ||
|
|
a446775d80 | ||
|
|
ccd7f0825a | ||
|
|
d0896ea7c4 | ||
|
|
a73d1e4b1c | ||
|
|
d05bb2a0af | ||
|
|
6765901687 | ||
|
|
c5d05ac0cf | ||
|
|
939003c1f1 | ||
|
|
a10f3a8aec | ||
|
|
ef663810a2 | ||
|
|
ada67a6a4f | ||
|
|
b6a5d1ad5a | ||
|
|
d8c5a63bc2 | ||
|
|
bcb2db62c9 | ||
|
|
079ef93121 | ||
|
|
b2789c598e | ||
|
|
92a93c1217 | ||
|
|
96b70835f9 | ||
|
|
7fa3b7a267 | ||
|
|
f3fc76e3c8 | ||
|
|
3216f4b257 | ||
|
|
ce1d897575 | ||
|
|
17e108a10a | ||
|
|
5bc4ab899f | ||
|
|
44faf1080c | ||
|
|
e354c5c2a8 | ||
|
|
04bc9005ae | ||
|
|
3c92c69bc7 | ||
|
|
52ee132d92 | ||
|
|
7ca0aedcfc | ||
|
|
a2c4037a24 | ||
|
|
d7b0073ce1 | ||
|
|
585b68d2ae | ||
|
|
89d2d648cc | ||
|
|
7532f24d58 | ||
|
|
69a5df2f98 | ||
|
|
1c65908cdb | ||
|
|
3aaf013dd1 | ||
|
|
5f2705ab07 | ||
|
|
9af620982c | ||
|
|
1ee6a78cb7 | ||
|
|
bf4ee48efa | ||
|
|
08e6d222a2 | ||
|
|
cf98b0e261 | ||
|
|
a24589d46e | ||
|
|
84533b6cad | ||
|
|
8dca38e979 | ||
|
|
662bed6a00 | ||
|
|
ae5e0cb02b | ||
|
|
0b3e1c4706 | ||
|
|
ce08a7a932 | ||
|
|
5d5f21bfc5 | ||
|
|
fcccedc588 | ||
|
|
0d73a49327 | ||
|
|
6239dd96f2 | ||
|
|
57a4700fb9 | ||
|
|
2b676dc5fc | ||
|
|
3f267b1795 | ||
|
|
7a4c9f5f4c | ||
|
|
3330aa6f6a | ||
|
|
8929f88e6d | ||
|
|
5348808bf5 | ||
|
|
fccba1af2a | ||
|
|
26d92c80ed | ||
|
|
9605e24655 | ||
|
|
7d0269d2ce | ||
|
|
52ffdb0a55 | ||
|
|
681d6bbdc5 | ||
|
|
867b82b6de | ||
|
|
5101ef4b02 | ||
|
|
ee9e238179 | ||
|
|
29030b54c9 | ||
|
|
c9fcc7f148 | ||
|
|
d1f4a31b5e | ||
|
|
b691d3123b | ||
|
|
f68e36f8c2 | ||
|
|
4db119c01b | ||
|
|
bbd7115564 | ||
|
|
8d36367fe2 | ||
|
|
3deca8fccd | ||
|
|
7af24c4d3a | ||
|
|
7f0ce4e94e | ||
|
|
5c48d3fbba | ||
|
|
00420ef9ca | ||
|
|
b9d30595d6 | ||
|
|
c1f4f1fdb6 | ||
|
|
342333f72a | ||
|
|
94cdc47786 | ||
|
|
cc511e7b60 | ||
|
|
bb2af791e9 | ||
|
|
f3f4b332ae | ||
|
|
84ac79bb08 | ||
|
|
be0c8495cd | ||
|
|
cbd0709d1c | ||
|
|
371d635da8 | ||
|
|
85216966fa | ||
|
|
1c823e9d1f | ||
|
|
25e338a098 | ||
|
|
81175b0717 | ||
|
|
d23c907a94 | ||
|
|
018f4155eb | ||
|
|
9ab0a1f5f1 | ||
|
|
c043b337b1 | ||
|
|
090bc6fa79 | ||
|
|
b63db1c1aa | ||
|
|
0287ac794e | ||
|
|
0005221533 | ||
|
|
23d2c0f1c6 | ||
|
|
377b6f05ea | ||
|
|
3ac2e9d31f | ||
|
|
b76a29a69a | ||
|
|
abe090ec1f | ||
|
|
dff05c71e6 | ||
|
|
f6f4742410 | ||
|
|
977004c350 | ||
|
|
fdc7d13ad1 | ||
|
|
355dd5cb24 | ||
|
|
123dd5fe2d | ||
|
|
953e3190ca | ||
|
|
44a0e21795 | ||
|
|
fafaf567f9 | ||
|
|
870cc1d928 | ||
|
|
d86ee93801 | ||
|
|
87b7328463 | ||
|
|
3f846cf6b8 | ||
|
|
f2ce8c3b62 | ||
|
|
4223657ab8 | ||
|
|
930128a7ea | ||
|
|
db447440ff | ||
|
|
b70d38dc10 | ||
|
|
a27d105dcd | ||
|
|
67e44b0f2c | ||
|
|
bf840700e4 | ||
|
|
47e16dbee3 | ||
|
|
66f678023f | ||
|
|
132971f8eb | ||
|
|
3f04a4d635 | ||
|
|
17c8e839b6 | ||
|
|
348bdcd7b7 | ||
|
|
a32443c63b | ||
|
|
7e53934ce3 | ||
|
|
7c2b553364 | ||
|
|
409fc837ab | ||
|
|
6d0ada7f45 | ||
|
|
af63372d2b | ||
|
|
3e91f757a9 | ||
|
|
498491ec05 | ||
|
|
85b77b81ca | ||
|
|
5bf2ec5a74 | ||
|
|
9e715089a4 | ||
|
|
1a852bc365 | ||
|
|
9326ce53ec | ||
|
|
d8217c364a | ||
|
|
3a34fd181d | ||
|
|
fcb7233b25 | ||
|
|
fe53a376a3 | ||
|
|
65842cd99e | ||
|
|
bf6ed643e0 | ||
|
|
a0beb5fa26 | ||
|
|
f54bcc1f16 | ||
|
|
ca0d09c50f | ||
|
|
81c3224076 | ||
|
|
7a1d466fb2 | ||
|
|
83f4c48c8a | ||
|
|
acd742d225 | ||
|
|
d1e7b4e381 | ||
|
|
67f591a9ce | ||
|
|
7ff988275f | ||
|
|
363050f44c | ||
|
|
dbe04c4207 | ||
|
|
d59a332ef9 | ||
|
|
105b431e4c | ||
|
|
ba79f4c1f9 | ||
|
|
8b2dcf7018 | ||
|
|
44621f7326 | ||
|
|
8ead8f7ea6 | ||
|
|
7f9402bd22 | ||
|
|
cbd38327e7 | ||
|
|
06f898cc12 | ||
|
|
6a9ab8bc0e | ||
|
|
9a0061c511 | ||
|
|
7a3aac1843 | ||
|
|
da1f4b3ede | ||
|
|
dac740ee17 | ||
|
|
28030d7edb | ||
|
|
648196319f | ||
|
|
c75cb67c44 | ||
|
|
cd1bb2bafa | ||
|
|
a9d2dc6144 | ||
|
|
46b9388bb0 | ||
|
|
a1a97d663e | ||
|
|
cac3c159bc | ||
|
|
43166130b5 | ||
|
|
14f21378e3 | ||
|
|
bd42aeab46 | ||
|
|
cde6a3a00c | ||
|
|
96b763067e | ||
|
|
dd5ba062cc | ||
|
|
ba161ec572 | ||
|
|
43f613d9be | ||
|
|
2277d143fa | ||
|
|
6b6d9e64bd | ||
|
|
f016a99f24 | ||
|
|
2eed9d64ce | ||
|
|
1688b6dda9 | ||
|
|
33aedc887a | ||
|
|
258d0ea97e | ||
|
|
d3641766a5 | ||
|
|
b25d5c5d33 | ||
|
|
352d7f477e | ||
|
|
1fcf35ad3b | ||
|
|
c8054e569a | ||
|
|
ef48eca9ca | ||
|
|
906d2fbadf | ||
|
|
2b579aeb4f | ||
|
|
e9e55b0812 | ||
|
|
49a3845135 | ||
|
|
21dac6c05d | ||
|
|
1d9b84a5af | ||
|
|
a688745bdc | ||
|
|
459d824c50 | ||
|
|
96019f4a02 | ||
|
|
896015bf53 | ||
|
|
df3e7a9248 | ||
|
|
b2d3d15e97 | ||
|
|
08dfd263ba | ||
|
|
abaabe92d6 | ||
|
|
257b42b87f | ||
|
|
31bc94160a | ||
|
|
9e5d2c5bb7 | ||
|
|
2df2a989af | ||
|
|
4a800b311f | ||
|
|
a4a13a3825 | ||
|
|
a28df6123f | ||
|
|
c5c43c4541 | ||
|
|
0954f580fa | ||
|
|
3a2254c91f | ||
|
|
4aeec4bb60 | ||
|
|
750b2ad6a8 | ||
|
|
86c276f538 | ||
|
|
166569200a | ||
|
|
e903d00968 | ||
|
|
7d5d95ad53 | ||
|
|
cc6c452854 | ||
|
|
f492c78e2e | ||
|
|
6b83d08228 | ||
|
|
dc415b761e | ||
|
|
f1034eb657 | ||
|
|
ac9ebe1439 | ||
|
|
7b5f7c041b | ||
|
|
8ce9b53093 | ||
|
|
0b9e52bd5f | ||
|
|
5dd728d802 | ||
|
|
ce7c97b6ba | ||
|
|
9a4c049675 | ||
|
|
cb8449a66d | ||
|
|
621467717d | ||
|
|
506c716cf2 | ||
|
|
9f625b0a0d | ||
|
|
bc1b4131cb | ||
|
|
80ba3c5932 | ||
|
|
e63420a8c2 | ||
|
|
e02d8ad8d2 | ||
|
|
d300e6bf21 | ||
|
|
1729388634 | ||
|
|
c654c7630a | ||
|
|
3f3b26fb0e | ||
|
|
0921180b90 | ||
|
|
14df240f5b | ||
|
|
2090911363 | ||
|
|
3cc7be0fa6 | ||
|
|
6728b8c1a3 | ||
|
|
450c26c471 | ||
|
|
7ec1121cc8 | ||
|
|
f84e288ad7 | ||
|
|
8e31366431 | ||
|
|
1bfa04f80e | ||
|
|
98cbc0ea79 | ||
|
|
dca1115196 | ||
|
|
96882175f1 | ||
|
|
484841fc9e | ||
|
|
8052c76489 | ||
|
|
3477acee48 | ||
|
|
2c4b998170 | ||
|
|
0a9c7ff6cf | ||
|
|
cd71038655 | ||
|
|
1894aed261 | ||
|
|
f3832bcaa8 | ||
|
|
436335e9a3 | ||
|
|
a30eb194d5 | ||
|
|
8becbb8b08 | ||
|
|
e0c2c77c2a | ||
|
|
6f2e1c2415 | ||
|
|
fc0ad8674b | ||
|
|
19c67ab724 | ||
|
|
a046b6e105 | ||
|
|
8017301de5 | ||
|
|
46528783ef | ||
|
|
6f4bb6cd2c | ||
|
|
2cf31e905b | ||
|
|
28a60db5aa | ||
|
|
496f70fc0d | ||
|
|
9ede4c5f3c | ||
|
|
214a526945 | ||
|
|
d5b756413a | ||
|
|
af99176581 | ||
|
|
57e825dfe7 | ||
|
|
e06dd129dd | ||
|
|
00baddcd9e | ||
|
|
7e92820c50 | ||
|
|
5692e20fd5 | ||
|
|
3b3c9334c8 | ||
|
|
96dc0a318a | ||
|
|
a4223aac38 | ||
|
|
2bb751d9fa | ||
|
|
3b620112ca | ||
|
|
99526219b7 | ||
|
|
d818b618af | ||
|
|
c64700e7ae | ||
|
|
5bd1917705 | ||
|
|
178c6c20cd | ||
|
|
92d71cc7fa | ||
|
|
227eca7d28 | ||
|
|
9399b0ea52 | ||
|
|
17dca254a3 | ||
|
|
f6b50d2387 | ||
|
|
a9ce0218c1 | ||
|
|
7bb5a960fd | ||
|
|
e6b04d1b50 | ||
|
|
12613356fc | ||
|
|
3894450b10 | ||
|
|
ec07f6ec83 | ||
|
|
a7a10d03c9 | ||
|
|
ef99d6ce3d | ||
|
|
0ac06d77f1 | ||
|
|
469e233428 | ||
|
|
86a0f9cf9b | ||
|
|
e6a91d291d | ||
|
|
bf35972714 | ||
|
|
e0c645a270 | ||
|
|
e42734c3f3 | ||
|
|
eab78ab99c | ||
|
|
f2491c88c8 | ||
|
|
1b175025fe | ||
|
|
ccdf7184be | ||
|
|
7764136211 | ||
|
|
0307801d51 | ||
|
|
72cf8dd8a0 | ||
|
|
3c2b464dfa | ||
|
|
361404fd59 | ||
|
|
762c91b7f1 | ||
|
|
f2a8d4d289 | ||
|
|
9ee52d85d7 | ||
|
|
5ed9f02c4d | ||
|
|
378ebad1c8 | ||
|
|
e44e0fab9f | ||
|
|
c434077728 | ||
|
|
6e47e79790 | ||
|
|
d9ea3082fb | ||
|
|
2d63c26936 | ||
|
|
3cdd01aa1b | ||
|
|
d25195447a | ||
|
|
aa8ab2fc89 | ||
|
|
d664baff26 | ||
|
|
3275d4c6fa | ||
|
|
cd0d003197 | ||
|
|
cfeeb7af2e | ||
|
|
ac887d3afb | ||
|
|
e294ccae24 | ||
|
|
72070f292b | ||
|
|
823c618d24 | ||
|
|
51cb6a0a44 | ||
|
|
a1b1ec3d11 | ||
|
|
595b6a4f6c | ||
|
|
daa4647712 | ||
|
|
c67668d6dd | ||
|
|
9cfaa9c7b0 | ||
|
|
c5ea586882 | ||
|
|
f2a3a37dff | ||
|
|
01dd540d7e | ||
|
|
8142080633 | ||
|
|
9920a3e8fc | ||
|
|
f7d8e6c40c | ||
|
|
4ecf09f9e6 | ||
|
|
47a8369d79 | ||
|
|
6805fa2fa0 | ||
|
|
4d6b9611ae | ||
|
|
16afdfd874 | ||
|
|
701fff03d2 | ||
|
|
8e0575ca9b | ||
|
|
5e8f51a963 | ||
|
|
be3d2188d6 | ||
|
|
18e429a87e | ||
|
|
3576a8fd9f | ||
|
|
f260cd031c | ||
|
|
18c4b536f2 | ||
|
|
fa51db449f | ||
|
|
cb9a05ac77 | ||
|
|
f1f22019f5 | ||
|
|
6d79a1cdfc | ||
|
|
ad5eb2f8d6 | ||
|
|
39d56d6b65 | ||
|
|
a291415326 | ||
|
|
4ad7456428 | ||
|
|
73f36858bb | ||
|
|
fe3f0332f7 | ||
|
|
718fd97612 | ||
|
|
f8ff45b212 | ||
|
|
f5c0b0d316 | ||
|
|
ba51045d9e | ||
|
|
fa34dd7bd3 | ||
|
|
9f0fb8f6a8 | ||
|
|
a42f9fd4e2 | ||
|
|
e66005563e | ||
|
|
8cad20585d | ||
|
|
a8b75dc4df | ||
|
|
e4455962c6 | ||
|
|
20f85745e7 | ||
|
|
feb8d5b82f | ||
|
|
eb8922f346 | ||
|
|
84eb95466b | ||
|
|
3dd8beb380 | ||
|
|
ae77406b8e | ||
|
|
2d16069211 | ||
|
|
d18314fa05 | ||
|
|
26a9ce7b29 | ||
|
|
76417d4446 | ||
|
|
cffc78ad6a | ||
|
|
dcf55c7e32 | ||
|
|
e565cd4404 | ||
|
|
5934ccbb74 | ||
|
|
e39969a0d0 | ||
|
|
d68185aa28 | ||
|
|
4cab151ed2 | ||
|
|
8ac9b77e5c | ||
|
|
1b9da5d978 | ||
|
|
ab2b7358cb | ||
|
|
8ceea85813 | ||
|
|
d0a812d2df | ||
|
|
3dad2e1c0f | ||
|
|
70e4399334 | ||
|
|
00f8c2d46f | ||
|
|
0dd4b52b63 | ||
|
|
88c17926e4 | ||
|
|
541192c941 | ||
|
|
2e9f054ec0 | ||
|
|
2aa34882b7 | ||
|
|
27f8ef2f33 | ||
|
|
2cbe21c791 | ||
|
|
0988056471 | ||
|
|
95c3f57b30 | ||
|
|
068f191c0d | ||
|
|
6bf6c9215b | ||
|
|
a65afa8090 | ||
|
|
8155784990 | ||
|
|
44725e485d | ||
|
|
e98e2a0b07 | ||
|
|
943064bb51 | ||
|
|
7149a8ae4f | ||
|
|
3c7cf94643 | ||
|
|
3bd35d1883 | ||
|
|
6f3d70b5e2 | ||
|
|
257a0dee75 | ||
|
|
e995cd928c | ||
|
|
292d7c3fdf | ||
|
|
0273cd44b0 | ||
|
|
3203a7dd8c | ||
|
|
86b0adc82c | ||
|
|
ba49f20f68 | ||
|
|
a3ee26da64 | ||
|
|
a9b62a2ece | ||
|
|
49567f1f3e | ||
|
|
94fffb332b | ||
|
|
dc2e64c92b | ||
|
|
06fb7c671b | ||
|
|
ef93cdf4a8 | ||
|
|
4ad90e2d52 | ||
|
|
7c0e4dfb56 | ||
|
|
9ec069104f | ||
|
|
7d21d60dba | ||
|
|
ed8562c300 | ||
|
|
22ec1c3498 | ||
|
|
9cc90b1fbe | ||
|
|
0c9f22507f | ||
|
|
9c870e4276 | ||
|
|
5cffe693b0 | ||
|
|
e01615fd1e | ||
|
|
c1daa857a5 | ||
|
|
3928c4e9ae | ||
|
|
32799fef5c | ||
|
|
e1b03b4a71 | ||
|
|
e6ed592b8a | ||
|
|
6f4560184c | ||
|
|
e5039c478a | ||
|
|
8901514506 | ||
|
|
21fe376d1d | ||
|
|
e22ef6c481 | ||
|
|
2bb01093c0 | ||
|
|
36c814d26e | ||
|
|
d769b74d61 | ||
|
|
601495fa0f | ||
|
|
1998633739 | ||
|
|
0194217f9d | ||
|
|
b0bbb8b693 | ||
|
|
cab84af72e | ||
|
|
74500eacca | ||
|
|
1105e61f29 | ||
|
|
b7cf279d6d | ||
|
|
c614e550d9 | ||
|
|
452a30d7af | ||
|
|
49e79620fd | ||
|
|
ae5a721df9 | ||
|
|
0dd5f2915a | ||
|
|
a0ebd444ad | ||
|
|
0c6072c4e4 | ||
|
|
8917264110 | ||
|
|
e90d606f0a | ||
|
|
5bb2d64ddb | ||
|
|
bc66dc45e6 | ||
|
|
7087935656 | ||
|
|
5822daa63d | ||
|
|
4808c7ef39 | ||
|
|
7071126770 | ||
|
|
2101daef5a | ||
|
|
083065f433 | ||
|
|
4cfc4a5a94 | ||
|
|
1c7ee737e6 | ||
|
|
39439b80f5 | ||
|
|
396480cf94 | ||
|
|
3e03527930 | ||
|
|
4fa724461e | ||
|
|
1e2018ce83 | ||
|
|
3fcf17cb79 | ||
|
|
f9fc3a42cc | ||
|
|
76bc28ab1e | ||
|
|
f47f86ef02 | ||
|
|
31268ffa24 | ||
|
|
0634be9724 | ||
|
|
f56c6a18c1 | ||
|
|
aa4c506fcd | ||
|
|
d3a479b7fa | ||
|
|
92fb0e829a | ||
|
|
43a9928537 | ||
|
|
c8b408beae | ||
|
|
8e3982dd42 | ||
|
|
e83f805b8f | ||
|
|
be98afe34d | ||
|
|
f53dadcc6d | ||
|
|
90ab65f8c7 | ||
|
|
abb0fcb203 | ||
|
|
eef4f33a29 | ||
|
|
0226440a2d | ||
|
|
9d770d6084 | ||
|
|
7f0297dc44 | ||
|
|
49f3855407 | ||
|
|
905d493fd7 | ||
|
|
5def2a09bd | ||
|
|
a98aa66620 | ||
|
|
631a268996 | ||
|
|
85074f5ac6 | ||
|
|
12a8ed39d4 | ||
|
|
b9ac5e9e76 | ||
|
|
2758a734a2 | ||
|
|
01f3131c81 | ||
|
|
2ca9236864 | ||
|
|
3bb711837e | ||
|
|
ed8798e82f | ||
|
|
38474961fd | ||
|
|
3dd38e7b7f | ||
|
|
3711a97657 | ||
|
|
911411e630 | ||
|
|
c02cc199bc | ||
|
|
dd6c21e092 | ||
|
|
7801ca86b9 | ||
|
|
10fc288c91 | ||
|
|
b8cda53bd3 | ||
|
|
43806d524d | ||
|
|
e0a97a030f | ||
|
|
33ba288622 | ||
|
|
d5516dee00 | ||
|
|
06e0741a52 | ||
|
|
0b93445380 | ||
|
|
483ba5ea1c | ||
|
|
18076ac9b7 | ||
|
|
ad15ca7104 | ||
|
|
53117ac204 | ||
|
|
51a8c109ab | ||
|
|
ea25e0ee55 | ||
|
|
e6fdae431f | ||
|
|
34afc272fd | ||
|
|
a5673fcb28 | ||
|
|
5c3c506638 | ||
|
|
ecd5eb02c5 | ||
|
|
3be57dc4a3 | ||
|
|
a93caf3cfe | ||
|
|
26ebfc04b0 | ||
|
|
8782f6d232 | ||
|
|
5faf443038 | ||
|
|
8eacd13ce7 | ||
|
|
d3e1b72d38 | ||
|
|
b5e1bd5705 | ||
|
|
4bef0a1e62 | ||
|
|
3e5f09be0b | ||
|
|
e86e77ad67 | ||
|
|
3c4bb9ff4e | ||
|
|
a890dadfd2 | ||
|
|
6b4374583a | ||
|
|
78f4171a7a | ||
|
|
f8a99a391e | ||
|
|
2564f763d7 | ||
|
|
377a2b9e07 | ||
|
|
045993001c | ||
|
|
affc446690 | ||
|
|
255ee646c2 | ||
|
|
0308ec564e | ||
|
|
6cafec8ae6 | ||
|
|
8ef87be482 | ||
|
|
6c57047362 | ||
|
|
e29bc6912b | ||
|
|
ce57b8b6df | ||
|
|
d81a9029db | ||
|
|
620ae7790b | ||
|
|
23b2b7144b | ||
|
|
bf4311cd9b | ||
|
|
8f7adf79a3 | ||
|
|
97b164d03b | ||
|
|
61e7e531c2 | ||
|
|
ceb652915f | ||
|
|
cdaf504ab8 | ||
|
|
9fb5aad157 | ||
|
|
a6301d45f4 | ||
|
|
b83d069266 | ||
|
|
960b9a9664 | ||
|
|
acb45caa42 | ||
|
|
39060b528a | ||
|
|
4a36323f1b | ||
|
|
c6281b2680 | ||
|
|
5b8b7d1412 | ||
|
|
53e5139b99 | ||
|
|
2b8ce83c9b | ||
|
|
52638c68f5 | ||
|
|
400ff1c812 | ||
|
|
d360f17a59 | ||
|
|
a6ee6be960 | ||
|
|
47911f9544 | ||
|
|
48025c2279 | ||
|
|
a68302e50b | ||
|
|
333a08ebf9 | ||
|
|
989c9a7317 | ||
|
|
975370c084 | ||
|
|
c3c776bc6a | ||
|
|
9f4b906e6c | ||
|
|
804900df36 | ||
|
|
3781f6cf39 | ||
|
|
227da2377a | ||
|
|
ffb3a9f526 | ||
|
|
6936c0e2ab | ||
|
|
108242042e | ||
|
|
70652abf97 | ||
|
|
e202b407ec | ||
|
|
2cc89e60cc | ||
|
|
d536944beb | ||
|
|
1a8ef3cdab | ||
|
|
7be33eba48 | ||
|
|
46ed91b53d | ||
|
|
73f6fc428a | ||
|
|
44d260f911 | ||
|
|
07249fc395 | ||
|
|
bc1e8e01f3 | ||
|
|
fe8e77e556 | ||
|
|
b0833084a6 | ||
|
|
3cacaa5dad | ||
|
|
e89bd30db5 | ||
|
|
2a9d933a81 | ||
|
|
81f3d893d9 | ||
|
|
05c91082e3 | ||
|
|
7267558ba1 | ||
|
|
ac6803e7b7 | ||
|
|
ffabf8b013 | ||
|
|
e9b71a0d28 | ||
|
|
efbfe66f21 | ||
|
|
6886063703 | ||
|
|
c04e1ad401 | ||
|
|
223b90d0d4 | ||
|
|
692b2cfb79 | ||
|
|
447a86c922 | ||
|
|
e3a2bd3a1e | ||
|
|
f0be6a4b9e | ||
|
|
bdab5d5f6e | ||
|
|
15a4246ead | ||
|
|
9a71845700 | ||
|
|
22f0a1547c | ||
|
|
de0ab43bc1 | ||
|
|
e12cc01aa4 | ||
|
|
71c697288b | ||
|
|
a7d1daee93 | ||
|
|
77a99cc61d | ||
|
|
fb337418a5 | ||
|
|
9d312ab208 | ||
|
|
06be0a1997 | ||
|
|
9e4509b846 | ||
|
|
fc1f0eeda7 | ||
|
|
3d5c094804 | ||
|
|
6abc94ec07 | ||
|
|
6837e5a6a0 | ||
|
|
9761abf3b5 | ||
|
|
599a562170 | ||
|
|
d29a251547 | ||
|
|
31da4bc566 | ||
|
|
0f1a180e15 | ||
|
|
01a45a53aa | ||
|
|
59400d38a9 | ||
|
|
5155b0f608 | ||
|
|
d919f8d50a | ||
|
|
d67aa7c19d | ||
|
|
7a982169c9 | ||
|
|
f2510d60fa | ||
|
|
1e0ea57dc4 | ||
|
|
70b87f2eb6 | ||
|
|
94b2ee627c | ||
|
|
e30a2dd2d7 | ||
|
|
7e07daf8cb | ||
|
|
981906ecd1 | ||
|
|
90fe4c5124 | ||
|
|
2452447c81 | ||
|
|
93f0bb8307 | ||
|
|
47fc08bffe | ||
|
|
c0f2024a2e | ||
|
|
28f3e190c8 | ||
|
|
c4090b670d | ||
|
|
ddf112378b | ||
|
|
b25cce464a | ||
|
|
a2297558ff | ||
|
|
84cdf0cacc | ||
|
|
9e99e5bef9 | ||
|
|
9023ba4a81 | ||
|
|
83488848e1 | ||
|
|
f5a92d6cc3 | ||
|
|
3e8047e583 | ||
|
|
440ac51cf0 | ||
|
|
d3293b889d | ||
|
|
b4b0b34e5a | ||
|
|
fa3d1156a6 | ||
|
|
0eb05b827f | ||
|
|
0c245bc271 | ||
|
|
d65ad1bf15 | ||
|
|
43cbbe111b | ||
|
|
9ceb8a717a | ||
|
|
8331de424a | ||
|
|
98dbdf72b3 | ||
|
|
51a2d09eb7 | ||
|
|
22f0ef6d6b | ||
|
|
975deca85b | ||
|
|
3bbb502387 | ||
|
|
0023dffd0b | ||
|
|
b715e522cf | ||
|
|
4b0b8315a9 | ||
|
|
a654f146d1 | ||
|
|
67b46a151d | ||
|
|
83c7e1e129 | ||
|
|
a6371e2e66 | ||
|
|
7768baa4d1 | ||
|
|
a9a5907a0f | ||
|
|
dc32d1f3f3 | ||
|
|
cbdaa1369f | ||
|
|
8fb20fcdf8 | ||
|
|
72bf226608 | ||
|
|
d4b5699403 | ||
|
|
1dc27be015 | ||
|
|
230a3eb400 | ||
|
|
e39382dedd | ||
|
|
fd016f4507 | ||
|
|
9d728b365d | ||
|
|
ddc0283339 | ||
|
|
b8fdb452be | ||
|
|
6b416ce6be | ||
|
|
ef0392e854 | ||
|
|
efbf184fe8 | ||
|
|
dd577fb857 | ||
|
|
ebd90dbb1a | ||
|
|
c9e700f079 | ||
|
|
3c2d73d161 | ||
|
|
343de8b8ab | ||
|
|
c645b906f3 | ||
|
|
9c1d1ef268 | ||
|
|
ade0483641 | ||
|
|
03a401e477 | ||
|
|
9994521b8c | ||
|
|
e5fd1924db | ||
|
|
cbdd042adc | ||
|
|
a9419da09c | ||
|
|
ccd7104cdc | ||
|
|
1cf4b5ce47 | ||
|
|
1badb3b5d5 | ||
|
|
038d216f18 | ||
|
|
9e3f843291 | ||
|
|
e166ddf46f | ||
|
|
31e1be7570 | ||
|
|
d793b7c03f | ||
|
|
9a715267ad | ||
|
|
eafa432cc6 | ||
|
|
d95e538020 | ||
|
|
adbe8c409a | ||
|
|
58e600f408 | ||
|
|
d34e55c370 | ||
|
|
fbcbcdc001 | ||
|
|
4227a325a5 | ||
|
|
d115507502 | ||
|
|
43d8252050 | ||
|
|
674b4ab647 | ||
|
|
fe8fc1081a | ||
|
|
c7748fedab | ||
|
|
c392efb481 | ||
|
|
1ddd9dd52a | ||
|
|
aa171dcc18 | ||
|
|
b4d8cb7bc1 | ||
|
|
f672e4016f | ||
|
|
76e3dec723 | ||
|
|
d0c3fa0150 | ||
|
|
609f6ce66d | ||
|
|
7298b6c846 | ||
|
|
acec9c4fd7 | ||
|
|
9cdbde4f5e | ||
|
|
f9147a0706 | ||
|
|
33364edfb3 | ||
|
|
5e9ccdec63 | ||
|
|
071aca60be | ||
|
|
133e4d5c51 | ||
|
|
fd56461d5f | ||
|
|
d5f59f8c86 | ||
|
|
a5d8b27671 | ||
|
|
f3f25d5d40 | ||
|
|
f118812c34 | ||
|
|
98dbc95913 | ||
|
|
145c1d214c | ||
|
|
b62a8e3e3e | ||
|
|
e47240931a | ||
|
|
a84874426d | ||
|
|
f38dfd9231 | ||
|
|
510c4a3ef1 | ||
|
|
e7e52c24f5 | ||
|
|
e2a574e2a0 | ||
|
|
ba6ef53ef9 | ||
|
|
c93a28c641 | ||
|
|
7088a679a2 | ||
|
|
04c02a1eb8 | ||
|
|
1536b5a9d6 | ||
|
|
bab756a5d0 | ||
|
|
8c763fe458 | ||
|
|
886255e38a | ||
|
|
0240e75426 | ||
|
|
7102ed8026 | ||
|
|
ebf481e1a1 | ||
|
|
5a52e91350 | ||
|
|
18e458154a | ||
|
|
015e1ab183 | ||
|
|
2a4c799471 | ||
|
|
41487426f5 | ||
|
|
0d24250aa7 | ||
|
|
2050e2f886 | ||
|
|
013e8479af | ||
|
|
27535a7f78 | ||
|
|
333d226ed0 | ||
|
|
04a9dec952 | ||
|
|
6ee76b7154 | ||
|
|
36b1c08ad7 | ||
|
|
7b35d5e9d4 | ||
|
|
6d4ca071a5 | ||
|
|
684a3d30a6 | ||
|
|
25740d27bf | ||
|
|
fb0a52a34a | ||
|
|
c852970cf6 | ||
|
|
def21cc87e | ||
|
|
488c1eb87b | ||
|
|
acaa725478 | ||
|
|
f351550534 | ||
|
|
e8df7e8da5 | ||
|
|
af4252bc80 | ||
|
|
695ffedef9 | ||
|
|
66ecf39efe | ||
|
|
5ad21d7e98 | ||
|
|
1c3e03837c | ||
|
|
7968fa3779 | ||
|
|
31009bb1f6 | ||
|
|
3b8532f3fb | ||
|
|
f45616e5f6 | ||
|
|
ef5125f8f4 | ||
|
|
bf2e07074b | ||
|
|
20695ef369 | ||
|
|
e391f4b17b | ||
|
|
2bd344549b | ||
|
|
e96779de48 | ||
|
|
eb54337c40 | ||
|
|
916a020173 | ||
|
|
c2e4fe983d | ||
|
|
81e898375b | ||
|
|
3c0dea811d | ||
|
|
a6ac0f8965 | ||
|
|
4e1eb03287 | ||
|
|
fcf0f8291d | ||
|
|
0ed71fa027 | ||
|
|
affe21f7c1 | ||
|
|
9facf7897d | ||
|
|
8422402c39 | ||
|
|
9374e0f445 | ||
|
|
19ed233118 | ||
|
|
faa4fff4dd | ||
|
|
2276e7677b | ||
|
|
b5fde6dfa5 | ||
|
|
784d666a8e | ||
|
|
c035910df9 | ||
|
|
efccb6ac82 | ||
|
|
93f9c2ab6b | ||
|
|
4a993cd79e | ||
|
|
02325d2ede | ||
|
|
9c83464b95 | ||
|
|
b1bbd70f0f | ||
|
|
c31d11bfe0 | ||
|
|
c8ec85d649 | ||
|
|
e291f3d257 | ||
|
|
7d27d2ea5e | ||
|
|
dc22846d58 | ||
|
|
c9aaabb5d4 | ||
|
|
335d5d5d72 | ||
|
|
51d793bec1 | ||
|
|
249dcd967e | ||
|
|
302972e9fc | ||
|
|
31b380b266 | ||
|
|
a869dfea85 | ||
|
|
12838c6294 | ||
|
|
49c7102547 | ||
|
|
5cc3338267 | ||
|
|
1ae8972859 | ||
|
|
adcd2c8eac | ||
|
|
45ff355835 | ||
|
|
f8bf3afeae | ||
|
|
f703da1516 | ||
|
|
a582deee2c | ||
|
|
3047bdf653 | ||
|
|
12be9e818f | ||
|
|
a0478f98af | ||
|
|
5e2c62db2f | ||
|
|
d488d796f4 | ||
|
|
f794b1e1aa | ||
|
|
8c425c758c | ||
|
|
0b9e912297 | ||
|
|
d35d2b269f | ||
|
|
fa84ed412d | ||
|
|
16951099d1 | ||
|
|
050ba302cb | ||
|
|
c1f90a99f4 | ||
|
|
510097cc37 | ||
|
|
6a83721c55 | ||
|
|
ca9795c30a | ||
|
|
dc2fa246a9 | ||
|
|
b46bb611b3 | ||
|
|
aa55d759f5 | ||
|
|
2043579f71 | ||
|
|
346e31efa0 | ||
|
|
b504d63117 | ||
|
|
b4b1728b6f | ||
|
|
21792386d8 | ||
|
|
63a2ac21e1 | ||
|
|
c42b206292 | ||
|
|
733d6a6b16 | ||
|
|
8d2725234e | ||
|
|
0823711106 | ||
|
|
860e9eb8c9 | ||
|
|
3d2092ee23 | ||
|
|
8855efebc0 | ||
|
|
7725577a53 | ||
|
|
668e3f664f | ||
|
|
9e51733c71 | ||
|
|
6b39a5621d | ||
|
|
0d46e11826 | ||
|
|
ff58207034 | ||
|
|
b3d76b7e5c | ||
|
|
4d6c816abb | ||
|
|
f35ceaee0a | ||
|
|
a64a2a65a9 | ||
|
|
1a75abffa5 | ||
|
|
c6a0f5d3f9 | ||
|
|
bb75e3ea55 | ||
|
|
814eebf976 | ||
|
|
e08d4f28aa | ||
|
|
6f3c65dc64 | ||
|
|
0a3ada4fea | ||
|
|
8bdf7917c4 | ||
|
|
67d16a086e | ||
|
|
b8018f12ba | ||
|
|
607780b7f9 | ||
|
|
af1c497759 | ||
|
|
8e331cfc65 | ||
|
|
edf811fa02 | ||
|
|
b25b7693ba | ||
|
|
9dc9459f3a | ||
|
|
37b92967c5 | ||
|
|
768504e956 | ||
|
|
2571accfc3 | ||
|
|
0d2abdb5d9 | ||
|
|
79200a8611 | ||
|
|
123ae985d5 | ||
|
|
659d1c7cf7 | ||
|
|
281cd7c057 | ||
|
|
63e8766091 | ||
|
|
18da582c87 | ||
|
|
0562cf99ba | ||
|
|
60ac702038 | ||
|
|
1dedb96478 | ||
|
|
7537722a44 | ||
|
|
4ebd69193e | ||
|
|
d4d92ac1a7 | ||
|
|
5385d1fa80 | ||
|
|
dbee2f1996 | ||
|
|
6dd70926fa | ||
|
|
5dfc0918c3 | ||
|
|
2eb14658d3 | ||
|
|
c1f196dbec | ||
|
|
ce108acebb | ||
|
|
0555e2c781 | ||
|
|
6bfd1f1727 | ||
|
|
baa77c8ae3 | ||
|
|
7235dbadfd | ||
|
|
ecec41025f | ||
|
|
799843cc97 | ||
|
|
16e91baa79 | ||
|
|
f2536445f7 | ||
|
|
ede70ee3a4 | ||
|
|
66ed427a57 | ||
|
|
c9e63e9fdb | ||
|
|
ddf7f5c131 | ||
|
|
660e40d07e | ||
|
|
9f3db5a70b | ||
|
|
1a59730782 | ||
|
|
20029e7ce8 | ||
|
|
fcb7950811 | ||
|
|
4eb57e1e9a | ||
|
|
1d52e2cc77 | ||
|
|
209aceeb14 | ||
|
|
ae70875f45 | ||
|
|
eda7410f4c | ||
|
|
e60141b4dd | ||
|
|
5b21742095 | ||
|
|
5665de5ee7 | ||
|
|
d5b9be0393 | ||
|
|
d2d9b45a81 | ||
|
|
9ebbdb9b0b | ||
|
|
48da345e79 | ||
|
|
edbfa46cbc | ||
|
|
90709a6de4 | ||
|
|
992c2fa2d4 | ||
|
|
ed915fed92 | ||
|
|
8aa29d5a66 | ||
|
|
9604e0aad2 | ||
|
|
25d053cbf2 | ||
|
|
055257a210 | ||
|
|
50cfb997cc | ||
|
|
d662c4c0cc | ||
|
|
457d98c860 | ||
|
|
6bb166aaaa | ||
|
|
cca9bc5176 | ||
|
|
8b6b25220d | ||
|
|
3c3f1b7ff2 | ||
|
|
57d89131e9 | ||
|
|
7c6d1896a4 | ||
|
|
ad83c7f704 | ||
|
|
6b52d040b1 | ||
|
|
404fa89937 | ||
|
|
89377556cd | ||
|
|
ec93114347 | ||
|
|
df1c5ce314 | ||
|
|
a0e4b6e266 | ||
|
|
0de39b64cb | ||
|
|
36a7b4e275 | ||
|
|
d3cc8e0ac0 | ||
|
|
db1ce4eeeb | ||
|
|
c22cbbf828 | ||
|
|
5acee73fc8 | ||
|
|
466c337bcb | ||
|
|
98a468a101 | ||
|
|
47c58c01d1 | ||
|
|
a9edf85a69 | ||
|
|
e7a1862517 | ||
|
|
f930f37d35 | ||
|
|
4feb57e895 | ||
|
|
712e3eb120 | ||
|
|
d8e423df1a | ||
|
|
09aa0dc676 | ||
|
|
83174de420 | ||
|
|
8ff0197a43 | ||
|
|
a2b5db0003 | ||
|
|
2803ec2e96 | ||
|
|
ddd4f675a2 | ||
|
|
d271dd2cce | ||
|
|
ebfdd37451 | ||
|
|
f6d6110aaa | ||
|
|
a0730cf264 | ||
|
|
ec61b3a5fc | ||
|
|
521f2294cb | ||
|
|
2f0674807c | ||
|
|
de0f46b947 | ||
|
|
1a57fa095f | ||
|
|
167242fec0 | ||
|
|
81208d78ac | ||
|
|
da8b01771f | ||
|
|
725fbe946b | ||
|
|
b99ecb4dc9 | ||
|
|
208a96b211 | ||
|
|
43774455cc | ||
|
|
5b61e077e0 | ||
|
|
921cc3e5db | ||
|
|
51dce3d161 | ||
|
|
c10f013fc2 | ||
|
|
2874d68bdb | ||
|
|
11e83eb7e7 | ||
|
|
9ec9a8705e | ||
|
|
170635e3a6 | ||
|
|
a5d1444ef4 | ||
|
|
55708b39c3 | ||
|
|
8c5ebdff36 | ||
|
|
1c84f324a1 | ||
|
|
3dba09f339 | ||
|
|
7ebf8e66c9 | ||
|
|
62218fe59d | ||
|
|
95d9bb6dfc | ||
|
|
33986075ef | ||
|
|
766905ba9f | ||
|
|
a29c64b6c7 | ||
|
|
777e1cabc5 | ||
|
|
396e97fc94 | ||
|
|
9c6a4505c8 | ||
|
|
238c3adad1 | ||
|
|
c1d0a8b5ce | ||
|
|
08ce24ec3f | ||
|
|
79eb7623ef | ||
|
|
b9e64d0472 | ||
|
|
4f500149af | ||
|
|
281b8714ef | ||
|
|
d5be3cce9c | ||
|
|
8dcefaf2e3 | ||
|
|
48e3432a63 | ||
|
|
69d3c611aa | ||
|
|
36827e1134 | ||
|
|
351ac4a2c0 | ||
|
|
36fff59a38 | ||
|
|
1e60a4386a | ||
|
|
e9f1b53ae6 | ||
|
|
5016839b90 | ||
|
|
faf35e6082 | ||
|
|
d07a6edd2f | ||
|
|
553d4e9283 | ||
|
|
7cef52478d | ||
|
|
e7ce362d22 | ||
|
|
c551c8b31b | ||
|
|
9c36e71081 | ||
|
|
c9c57af5f7 | ||
|
|
2516496993 | ||
|
|
3b565b5f97 | ||
|
|
0742976138 | ||
|
|
1a63663c85 | ||
|
|
00a20fc8a5 | ||
|
|
6ab4fb368c | ||
|
|
fa39bb0a50 | ||
|
|
645663cdfe | ||
|
|
ee2bcbb41d | ||
|
|
12b4ebf8d4 | ||
|
|
8da4750ee2 | ||
|
|
d22df2915c | ||
|
|
e77d96cf89 | ||
|
|
ae28ba84d2 | ||
|
|
b3f3b01958 | ||
|
|
52e9cab1c1 | ||
|
|
1baaaa40cc | ||
|
|
b8ed420058 | ||
|
|
ed16ee3029 | ||
|
|
7338b16c18 | ||
|
|
f529441400 | ||
|
|
03664d0426 | ||
|
|
652cfb7caf | ||
|
|
5540fbaec2 | ||
|
|
0a0b473765 | ||
|
|
df2d041483 | ||
|
|
ffc6e19548 | ||
|
|
d874d7661f | ||
|
|
1d66e714e6 | ||
|
|
d98a863b82 | ||
|
|
3b6790c7dc | ||
|
|
5ee3a9a9ca | ||
|
|
dd26fa67f2 | ||
|
|
89f5e60422 | ||
|
|
c616165f81 | ||
|
|
103832742d | ||
|
|
3e7e0bcb18 | ||
|
|
7d3d8f20ab | ||
|
|
e1e3ce980a | ||
|
|
7855a32579 | ||
|
|
9c92afa5fe | ||
|
|
edac498d03 | ||
|
|
d7d9dbd2c2 | ||
|
|
f8eece22c8 | ||
|
|
df563db294 | ||
|
|
01b0d9eb97 | ||
|
|
a7f13d841f | ||
|
|
686d8bbe69 | ||
|
|
4b36af4a34 | ||
|
|
4a23a4bfee | ||
|
|
ac3ad452c0 | ||
|
|
027c01511c | ||
|
|
4fdcc0496f | ||
|
|
0c4a2bea69 | ||
|
|
2ba3401238 | ||
|
|
1735284a2a | ||
|
|
8a3192ffc1 | ||
|
|
ffea273a28 | ||
|
|
1783aac438 | ||
|
|
29bf3d2c04 | ||
|
|
ee16fc958c | ||
|
|
5d73215a8d | ||
|
|
b7356bc526 | ||
|
|
8ec8282f38 | ||
|
|
43b7b98949 | ||
|
|
f791065a98 | ||
|
|
d95db28695 | ||
|
|
851fb16e7c | ||
|
|
a4cbaafd10 | ||
|
|
c5f2cdb822 | ||
|
|
1892d29be0 | ||
|
|
9e5a49b8cb | ||
|
|
767ade02f4 | ||
|
|
6e05071a47 | ||
|
|
c8a990b9d3 | ||
|
|
6868ceae9b | ||
|
|
cace646346 | ||
|
|
abcc225763 | ||
|
|
b9673fc521 | ||
|
|
b0ea3f4261 | ||
|
|
0103219f00 | ||
|
|
e15b4f40d6 | ||
|
|
66235fddff | ||
|
|
f9c5d026f4 | ||
|
|
c46239af22 | ||
|
|
48eb3ff8d9 | ||
|
|
5646dcc791 | ||
|
|
5d9876e338 | ||
|
|
083340a937 | ||
|
|
378fa5ee6a | ||
|
|
4764daf3c2 | ||
|
|
6357496d17 | ||
|
|
001e2a604b | ||
|
|
f370911c15 | ||
|
|
ef5cf40fa6 | ||
|
|
837bd79b20 | ||
|
|
3edd4a24af | ||
|
|
535a61b5a9 | ||
|
|
e87b7daab5 | ||
|
|
f20689519d | ||
|
|
ee9c460f74 | ||
|
|
84ba14fa29 | ||
|
|
3c75963352 | ||
|
|
5f9dd8287c | ||
|
|
d99f074eb7 | ||
|
|
a989140a07 | ||
|
|
420a4c163d | ||
|
|
1bab735580 | ||
|
|
a0fcd0cf22 | ||
|
|
5d5c753c74 | ||
|
|
7e7e3eb8d5 | ||
|
|
2e5f8aeba1 | ||
|
|
c2fe961db1 | ||
|
|
2a6acc04a1 | ||
|
|
a467128093 | ||
|
|
abf41eb85c | ||
|
|
d83dea4463 | ||
|
|
ec43721c3c | ||
|
|
39d52762d1 | ||
|
|
8d45d0d104 | ||
|
|
26ec62714c | ||
|
|
7873b5e78b | ||
|
|
1b889c527f | ||
|
|
9937ff8ac0 | ||
|
|
abd1949825 | ||
|
|
4e6bc77a70 | ||
|
|
531948358b | ||
|
|
0d3ec9c324 | ||
|
|
21caca4aea | ||
|
|
fbf3edf07d | ||
|
|
76fcf25898 | ||
|
|
56257f072b | ||
|
|
44401158e8 | ||
|
|
95b2df8261 | ||
|
|
1ebadf8620 | ||
|
|
9179d9592d | ||
|
|
f208217412 | ||
|
|
43c5058682 | ||
|
|
97b4a6b51f | ||
|
|
f405d27c56 | ||
|
|
99949c8f6f | ||
|
|
3a9697adf2 | ||
|
|
78c4351e04 | ||
|
|
0a427890fe | ||
|
|
e735abe334 | ||
|
|
c0070b2f13 | ||
|
|
cfedc6e9b4 | ||
|
|
b66d7f7e0b | ||
|
|
e01df06cd7 | ||
|
|
6584897b69 | ||
|
|
aa4f45b9a5 | ||
|
|
96ad5b8444 | ||
|
|
097e5dfbdc | ||
|
|
2ef7ee6ca7 | ||
|
|
2685b53b30 | ||
|
|
533e4fcdad | ||
|
|
006b8fa3f0 | ||
|
|
6a01153ce4 | ||
|
|
34aab116ae | ||
|
|
33232face9 | ||
|
|
b88b2b3d79 | ||
|
|
744d729dab | ||
|
|
71b5e43153 | ||
|
|
8459f27312 | ||
|
|
7dfbdef505 | ||
|
|
94386374ff | ||
|
|
f5d3859238 | ||
|
|
ef39da5973 | ||
|
|
81e8c4bbff | ||
|
|
8ca3642429 | ||
|
|
1dc000c06a | ||
|
|
4f093d5b97 | ||
|
|
e1b032cbad | ||
|
|
6f365c30eb | ||
|
|
718e180423 | ||
|
|
cead5e5bd7 | ||
|
|
cf15629aea | ||
|
|
a727d0bb0b | ||
|
|
0a218ee56a | ||
|
|
74beefcaf6 | ||
|
|
399a3abefc | ||
|
|
cee5036aca | ||
|
|
790823abb4 | ||
|
|
f546849352 | ||
|
|
a85af593f1 | ||
|
|
07067f8b95 | ||
|
|
a1e824ada0 | ||
|
|
f5f1bfbef1 | ||
|
|
cd108ba3aa | ||
|
|
2bb5bfa74e | ||
|
|
624e7a447d | ||
|
|
37420c342b | ||
|
|
ef40e362c9 | ||
|
|
ef369c2e2b | ||
|
|
6452461c39 | ||
|
|
1e89ca0994 | ||
|
|
92bb10eed8 | ||
|
|
8465c5fe0e | ||
|
|
42e248a8da | ||
|
|
e71a652985 | ||
|
|
bfef0fbff3 | ||
|
|
545685bc32 | ||
|
|
13ad2b4dc2 | ||
|
|
d019343017 | ||
|
|
e977ec924c | ||
|
|
b7d5652bf6 | ||
|
|
725e48fce4 | ||
|
|
43816c268b | ||
|
|
72e80db823 | ||
|
|
7b33c343f8 | ||
|
|
6d0601b99f | ||
|
|
b6e713711d | ||
|
|
c53edeeb6c | ||
|
|
dfb98417b3 | ||
|
|
9716c3a30e | ||
|
|
c4c44c4445 | ||
|
|
0debe9bd6f | ||
|
|
f1da118a6c | ||
|
|
c30c46cd5f | ||
|
|
d394017926 | ||
|
|
04525c0259 | ||
|
|
08a0bb756d | ||
|
|
20c6159c04 | ||
|
|
a47e9d1a4b | ||
|
|
e93dd374a4 | ||
|
|
0847ca4ec2 | ||
|
|
572d8d0cc4 | ||
|
|
c9a57d354d | ||
|
|
52b77f6e31 | ||
|
|
4c9782ee28 | ||
|
|
26225307d3 | ||
|
|
0129d1e158 | ||
|
|
ece6037a1e | ||
|
|
bea678a7cd | ||
|
|
1fb3fbb4de | ||
|
|
2c38d19af2 | ||
|
|
311e627463 | ||
|
|
8e1e36a0d5 | ||
|
|
db0bb425e7 | ||
|
|
e001dd2d45 | ||
|
|
c38772c97f | ||
|
|
3a31589fdd | ||
|
|
460522bb67 | ||
|
|
176debaf37 | ||
|
|
072f83b240 | ||
|
|
cbd6770f2f | ||
|
|
0c3a7bcf12 | ||
|
|
389fbaaca2 | ||
|
|
9652efd107 | ||
|
|
f3ea834322 | ||
|
|
02a6a46e86 | ||
|
|
75ad90abc7 | ||
|
|
4104593180 | ||
|
|
78e1704122 | ||
|
|
b9e99575ce | ||
|
|
fa5e06f95d | ||
|
|
3041409334 | ||
|
|
71536eb412 | ||
|
|
fe77230d84 | ||
|
|
accd262561 | ||
|
|
3057d19cdf | ||
|
|
8dd83a2cf3 | ||
|
|
49b84f9229 | ||
|
|
b43bf4dd74 | ||
|
|
5ed0eb51d1 | ||
|
|
72a1ca3b99 | ||
|
|
14424281a0 | ||
|
|
2b3fd0d4d3 | ||
|
|
894b9cfdb9 | ||
|
|
72ff9bd3e6 | ||
|
|
7ecbb0454f | ||
|
|
fa7fa2a55f | ||
|
|
5c0576ca55 | ||
|
|
039b354490 | ||
|
|
b2f03e76ff | ||
|
|
63b33b6ec5 | ||
|
|
23670795db | ||
|
|
8ea6c113b5 | ||
|
|
37f026a0a6 | ||
|
|
f67136df19 | ||
|
|
e07073ff28 | ||
|
|
64b0ba6da7 | ||
|
|
99d4ae0c1a | ||
|
|
f185b35088 | ||
|
|
4e909f9411 | ||
|
|
99f49e266c | ||
|
|
0458211ebc | ||
|
|
8a7b9d9f45 | ||
|
|
3fcf463f9e | ||
|
|
f77cd63286 | ||
|
|
2378c2d754 | ||
|
|
bbdb4a67e1 | ||
|
|
21851c0673 | ||
|
|
83f6498aac | ||
|
|
7e219c362c | ||
|
|
525a791987 | ||
|
|
fb19210cfd | ||
|
|
203f48d1fd | ||
|
|
371c82b2bf | ||
|
|
8176880173 | ||
|
|
b0b2c5b3e0 | ||
|
|
29742d23d3 | ||
|
|
533a6b0240 | ||
|
|
0c0400b6fc | ||
|
|
2e83af7c21 | ||
|
|
a3f7947ad2 | ||
|
|
7d9d459ac2 | ||
|
|
3ea1073809 | ||
|
|
76a959a578 | ||
|
|
f43873dc5f | ||
|
|
921553d7bb | ||
|
|
c476819cb1 | ||
|
|
77a56c7c5a | ||
|
|
46deb7ca82 | ||
|
|
b03f9ece05 | ||
|
|
27946a981f | ||
|
|
74617389c8 | ||
|
|
1d8840412f | ||
|
|
df1152ee0f | ||
|
|
b4a8b8c0d4 | ||
|
|
ffa9f4b47f | ||
|
|
667e22bbc7 | ||
|
|
d4d838c8bb | ||
|
|
c61a889c86 | ||
|
|
567fe89a77 | ||
|
|
950772ab8a | ||
|
|
0bd0e2a3ec | ||
|
|
47774ce882 | ||
|
|
3c9bcdd347 | ||
|
|
3934d2d30c | ||
|
|
423ce9557a | ||
|
|
947848ebf6 | ||
|
|
5e22fe488e | ||
|
|
c666cf1c44 | ||
|
|
79435dbdec | ||
|
|
27206368da | ||
|
|
2be245b75e | ||
|
|
17927f5c26 | ||
|
|
754f26a97c | ||
|
|
29241c4f83 | ||
|
|
6f655eb9b9 | ||
|
|
65dfd90141 | ||
|
|
59abdbd2dd | ||
|
|
a6d6873856 | ||
|
|
e99df3a3be | ||
|
|
8b657255cc | ||
|
|
0e1dc79321 | ||
|
|
0ef15e5fac | ||
|
|
9ea8a840a9 | ||
|
|
7b88089593 | ||
|
|
b513943893 | ||
|
|
edffc56600 | ||
|
|
856b0e6886 | ||
|
|
bf1eb46b87 | ||
|
|
7e27d660e2 | ||
|
|
53174ea45f | ||
|
|
87b624f5d5 | ||
|
|
443e96381a | ||
|
|
1cbba4fc59 | ||
|
|
344b6dd179 | ||
|
|
d8c829fa0c | ||
|
|
e1efc71ad3 | ||
|
|
f804a739b1 | ||
|
|
2ed870c854 | ||
|
|
ce35ba9ac9 | ||
|
|
724a59aaf7 | ||
|
|
42d8c2981f | ||
|
|
9aa91e0f17 | ||
|
|
5aabee8996 | ||
|
|
48a84ca23e | ||
|
|
8751783a1b | ||
|
|
3a2ec50d5f | ||
|
|
ce9aeed4cb | ||
|
|
f2be6432a9 | ||
|
|
e96f8c0444 | ||
|
|
2bf3bc3e10 | ||
|
|
28143f86f9 | ||
|
|
76ec3d3248 | ||
|
|
d0c85a5a96 | ||
|
|
46ed717af4 | ||
|
|
ad37c88f80 | ||
|
|
8c6e8a6eb8 | ||
|
|
dd33317f45 | ||
|
|
c344d63fb3 | ||
|
|
62557f4d6b | ||
|
|
9c46cc4ea0 | ||
|
|
a236a439cc | ||
|
|
c779e2674a | ||
|
|
a94d4be466 | ||
|
|
b7d2d4cfe8 | ||
|
|
a6c797ee4b | ||
|
|
3e40b2249f | ||
|
|
2fe1b5034d | ||
|
|
b4430839a3 | ||
|
|
412cf974a4 | ||
|
|
3fc6beeff0 | ||
|
|
2ff35c8bfa | ||
|
|
169db88c20 | ||
|
|
ca419c84b8 | ||
|
|
aede71b1dc | ||
|
|
14d573cbf1 | ||
|
|
7819aa6b20 | ||
|
|
7cc6b63aac | ||
|
|
4af6362751 | ||
|
|
d54075197f | ||
|
|
5cce56199b | ||
|
|
3cc12817f6 | ||
|
|
68875ba600 | ||
|
|
c345c5ebae | ||
|
|
2119a16e24 | ||
|
|
9f5c938ff3 | ||
|
|
b42a8d2364 | ||
|
|
61fc01e79e | ||
|
|
cceaec1d74 | ||
|
|
8e5f9c8160 | ||
|
|
c620fd42f4 | ||
|
|
2a859f870a | ||
|
|
b680753db8 | ||
|
|
35af940166 | ||
|
|
bc0fec0afe | ||
|
|
e3eca82cc3 | ||
|
|
e7651d0d0f | ||
|
|
5cf4ce9318 | ||
|
|
6a6f28668f | ||
|
|
dadf1339b5 | ||
|
|
c2c4228722 | ||
|
|
5469941f2b | ||
|
|
e888c9e827 | ||
|
|
3d3bca5338 | ||
|
|
6a3008d7ff | ||
|
|
2556449b36 | ||
|
|
446f9973cc | ||
|
|
596f36bb78 | ||
|
|
e7abdab58d | ||
|
|
13cdc9a9f8 | ||
|
|
a1b8806422 | ||
|
|
e635d47912 | ||
|
|
53ac72a878 | ||
|
|
2be6184c8d | ||
|
|
8b0b4ff086 | ||
|
|
60f7ff3de5 | ||
|
|
e76c752987 | ||
|
|
042c1abc6e | ||
|
|
1401621913 | ||
|
|
3c034b0a0c | ||
|
|
395191bd75 | ||
|
|
ec7d8fb6bd | ||
|
|
062948b110 | ||
|
|
7f3dc5f040 | ||
|
|
dd0798a317 | ||
|
|
9209ccfa40 | ||
|
|
2525d32e17 | ||
|
|
f3ac8a7cd9 | ||
|
|
f3d95f70e2 | ||
|
|
57526067f5 | ||
|
|
0545bab35d | ||
|
|
293836494d | ||
|
|
ae8bda190e | ||
|
|
34d9d8abd4 | ||
|
|
bd67e986f4 | ||
|
|
e587518d85 | ||
|
|
210b6c38bd | ||
|
|
9592c0b466 | ||
|
|
a33537b2b9 | ||
|
|
81d5c9757c | ||
|
|
f34124a50b | ||
|
|
74a39c715b | ||
|
|
195496333b | ||
|
|
9ccaa90439 | ||
|
|
4733c5fef0 | ||
|
|
a97ddc8cb9 | ||
|
|
59a5b000e0 | ||
|
|
d49a2ccb08 | ||
|
|
4a75acb46c | ||
|
|
453368078b | ||
|
|
6e3b643bdf | ||
|
|
a769352a74 | ||
|
|
8a63c27925 | ||
|
|
310895f060 | ||
|
|
4428894aba | ||
|
|
3d12d7de62 | ||
|
|
87593f95d4 | ||
|
|
11626e48bf | ||
|
|
4f021cbced | ||
|
|
ba31d176c8 | ||
|
|
68edbc3e4a | ||
|
|
5068227a46 | ||
|
|
f8f3bc89e7 | ||
|
|
635f7026b0 | ||
|
|
0f1e4f0326 | ||
|
|
89355edb8a | ||
|
|
37c8f5c1da | ||
|
|
5bba2df526 | ||
|
|
1935694440 | ||
|
|
12dd6ea8bb | ||
|
|
a1f922b040 | ||
|
|
017cf088a1 | ||
|
|
df627cc417 | ||
|
|
1b20300b73 | ||
|
|
3b9ffea36f | ||
|
|
e242f3999c | ||
|
|
523f89cc8c | ||
|
|
0575a6d652 | ||
|
|
08b88714e0 | ||
|
|
bcaff4b844 | ||
|
|
82f336a78f | ||
|
|
350aa33022 | ||
|
|
d6290a2f1a | ||
|
|
71e9d08863 | ||
|
|
9729dc7594 | ||
|
|
92c1b8f31e | ||
|
|
9ffa2604f8 | ||
|
|
03b1fad4d4 | ||
|
|
72eb4c534f | ||
|
|
47d936e9cc | ||
|
|
8e08407090 | ||
|
|
c0a4558c62 | ||
|
|
5ecb6fecc4 | ||
|
|
b3df4dc2c9 | ||
|
|
3db9ab82ea | ||
|
|
2dc3acc5f0 | ||
|
|
25686e5bce | ||
|
|
8d70f808d9 | ||
|
|
7c887af1ea | ||
|
|
b7f435b50e | ||
|
|
d3b15f8fda | ||
|
|
eea726740b | ||
|
|
0ea4c970d7 | ||
|
|
57936a1374 | ||
|
|
9242fde6b8 | ||
|
|
d1f653be65 | ||
|
|
0035dceb0a | ||
|
|
838f7cd210 | ||
|
|
13539961b2 | ||
|
|
a26f2ef17d | ||
|
|
d97c46bcdc | ||
|
|
2b6542467c | ||
|
|
8fa51faa38 | ||
|
|
b2175629fd | ||
|
|
2e28ed8f81 | ||
|
|
4c4f8bf02a | ||
|
|
e464be5f39 | ||
|
|
d7d717f2ce | ||
|
|
d1eeed6a5b | ||
|
|
b159bc0c5f | ||
|
|
a222c4879c | ||
|
|
eb2f413cf0 | ||
|
|
736fd0e293 | ||
|
|
6592ca9f88 | ||
|
|
762712c756 | ||
|
|
73f9e17951 | ||
|
|
7d6a605a85 | ||
|
|
a6a8bdffc3 | ||
|
|
296085ff23 | ||
|
|
36aa8ce3c9 | ||
|
|
c49c69d6ea | ||
|
|
d5684f7444 | ||
|
|
affb4bd923 | ||
|
|
65772a74e0 | ||
|
|
cca2c2f4ca | ||
|
|
52e2fa91c4 | ||
|
|
dca405a746 | ||
|
|
e54748d355 | ||
|
|
3680a6bbbb | ||
|
|
6aa6a9c272 | ||
|
|
8d1c7ca206 | ||
|
|
52b8e0f9ec | ||
|
|
08e2e2e791 | ||
|
|
3c4f4793b5 | ||
|
|
531c0067ec | ||
|
|
e228caaca6 | ||
|
|
9ac8f89b1d | ||
|
|
c6a72a14ac | ||
|
|
c74edd0e33 | ||
|
|
98acf3f281 | ||
|
|
fe30db935b | ||
|
|
6303d54cbb | ||
|
|
9d91aa23e6 | ||
|
|
c2ada39fd3 | ||
|
|
77b6e27500 | ||
|
|
99640171e2 | ||
|
|
38b3ab791f | ||
|
|
a86fc52eea | ||
|
|
6d3ed3f16f | ||
|
|
be798998bf | ||
|
|
c3b425d570 | ||
|
|
a25743875f | ||
|
|
124d1a5942 | ||
|
|
eec77b3ae7 | ||
|
|
640bac1aa4 | ||
|
|
0b12fae84d | ||
|
|
d9353c4fd3 | ||
|
|
0c9fc2f809 | ||
|
|
1a954748a0 | ||
|
|
2abad0f479 | ||
|
|
2fb40fe728 | ||
|
|
b57330cf75 | ||
|
|
8cd91fabf9 | ||
|
|
e0580ee385 | ||
|
|
144d092637 | ||
|
|
2bde9afdb9 | ||
|
|
f8b09c194f | ||
|
|
0e69ad32c1 | ||
|
|
9b4e14df71 | ||
|
|
03f7803f26 | ||
|
|
c6cbcc2c25 | ||
|
|
27aa34d4ae | ||
|
|
79e0db4ca0 | ||
|
|
9ae3acf2e7 | ||
|
|
731ea9b489 | ||
|
|
18b30b5019 | ||
|
|
24d51b9d14 | ||
|
|
a1edc199df | ||
|
|
db4aa81528 | ||
|
|
319ba94a52 | ||
|
|
1025f0be91 | ||
|
|
77d3b5e8f1 | ||
|
|
a0ad96a787 | ||
|
|
39c5af5dbc | ||
|
|
acca6a799b | ||
|
|
b77e62260a | ||
|
|
b6995ca011 | ||
|
|
715844fd08 | ||
|
|
2b29ca796e | ||
|
|
5184008812 | ||
|
|
cf696ce443 | ||
|
|
1a2ea4c06c | ||
|
|
a800afcbf8 | ||
|
|
ff4534613a | ||
|
|
b8fe2c74bc | ||
|
|
be3b5199b0 | ||
|
|
d849a40af6 | ||
|
|
4f48c10312 | ||
|
|
5274fee8a7 | ||
|
|
5462f34ed0 | ||
|
|
0958ed5844 | ||
|
|
e3cba18532 | ||
|
|
9bf7fde49f | ||
|
|
4783ebc918 | ||
|
|
8bda52783b | ||
|
|
07feec7ea6 | ||
|
|
e7471f589a | ||
|
|
24208be5cf | ||
|
|
8db5f66498 | ||
|
|
be670bfd1f | ||
|
|
19acf090ed | ||
|
|
2de7f6b457 | ||
|
|
a2e265e9a2 | ||
|
|
28d7b29d72 | ||
|
|
9cb4aaf3c2 | ||
|
|
80dc602193 | ||
|
|
c7f5a87258 |
66
.gitignore
vendored
66
.gitignore
vendored
@@ -1,61 +1,11 @@
|
||||
*.Plo
|
||||
*.Po
|
||||
*.a
|
||||
*.bz2
|
||||
*.d
|
||||
*.gz
|
||||
*.la
|
||||
*.lo
|
||||
*.o
|
||||
.deps
|
||||
.dirstamp
|
||||
Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
compile
|
||||
config.guess
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.mk
|
||||
config.status
|
||||
config.sub
|
||||
config_detected.h
|
||||
config_detected.mk
|
||||
configure
|
||||
configure.lineno
|
||||
depcomp
|
||||
depmode
|
||||
install-sh
|
||||
libtool
|
||||
ltmain.sh
|
||||
missing
|
||||
mkinstalldirs
|
||||
mpd
|
||||
mpd.exe
|
||||
stamp-h1
|
||||
tags
|
||||
*~
|
||||
|
||||
.#*
|
||||
.stgit*
|
||||
doc/protocol.html
|
||||
doc/protocol
|
||||
doc/user
|
||||
doc/developer
|
||||
doc/sticker
|
||||
doc/api
|
||||
test/software_volume
|
||||
test/run_convert
|
||||
test/run_decoder
|
||||
test/read_tags
|
||||
test/run_filter
|
||||
test/run_encoder
|
||||
test/run_output
|
||||
test/read_conf
|
||||
test/run_input
|
||||
test/read_mixer
|
||||
test/dump_playlist
|
||||
test/run_normalize
|
||||
test/tmp
|
||||
test/run_inotify
|
||||
|
||||
/output/
|
||||
|
||||
__pycache__/
|
||||
|
||||
/.clangd/
|
||||
/compile_commands.json
|
||||
|
||||
179
.travis.yml
Normal file
179
.travis.yml
Normal file
@@ -0,0 +1,179 @@
|
||||
language: cpp
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# Ubuntu Bionic (18.04) with GCC 7
|
||||
- os: linux
|
||||
dist: bionic
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'ppa:deadsnakes/ppa' # for Python 3.7 (required by Meson)
|
||||
packages:
|
||||
- libgtest-dev
|
||||
- libboost-dev
|
||||
- python3.6
|
||||
- python3-urllib3
|
||||
- ninja-build
|
||||
before_install:
|
||||
- wget https://bootstrap.pypa.io/get-pip.py
|
||||
- /usr/bin/python3.6 get-pip.py --user --no-cache-dir
|
||||
install:
|
||||
- /usr/bin/python3.6 $HOME/.local/bin/pip install --user meson --no-cache-dir
|
||||
env:
|
||||
- MATRIX_EVAL="export PATH=\$HOME/.local/bin:\$PATH"
|
||||
|
||||
# Ubuntu Bionic (18.04) with GCC 7 on big-endian
|
||||
- os: linux
|
||||
arch: s390x
|
||||
dist: bionic
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'ppa:deadsnakes/ppa' # for Python 3.7 (required by Meson)
|
||||
packages:
|
||||
- libgtest-dev
|
||||
- libboost-dev
|
||||
- python3.6
|
||||
- python3-urllib3
|
||||
- ninja-build
|
||||
before_install:
|
||||
- wget https://bootstrap.pypa.io/get-pip.py
|
||||
- /usr/bin/python3.6 get-pip.py --user --no-cache-dir
|
||||
install:
|
||||
- /usr/bin/python3.6 $HOME/.local/bin/pip install --user meson --no-cache-dir
|
||||
env:
|
||||
- MATRIX_EVAL="export PATH=\$HOME/.local/bin:\$PATH"
|
||||
|
||||
# Ubuntu Bionic (18.04) with GCC 7 on ARM64
|
||||
- os: linux
|
||||
arch: arm64
|
||||
dist: bionic
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'ppa:deadsnakes/ppa' # for Python 3.7 (required by Meson)
|
||||
packages:
|
||||
- libgtest-dev
|
||||
- libboost-dev
|
||||
- python3.6
|
||||
- python3-urllib3
|
||||
- ninja-build
|
||||
before_install:
|
||||
- wget https://bootstrap.pypa.io/get-pip.py
|
||||
- /usr/bin/python3.6 get-pip.py --user --no-cache-dir
|
||||
install:
|
||||
- /usr/bin/python3.6 $HOME/.local/bin/pip install --user meson --no-cache-dir
|
||||
env:
|
||||
- MATRIX_EVAL="export PATH=\$HOME/.local/bin:\$PATH"
|
||||
|
||||
# Ubuntu Trusty (16.04) with GCC 6
|
||||
- os: linux
|
||||
dist: trusty
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- sourceline: 'ppa:mhier/libboost-latest'
|
||||
- sourceline: 'ppa:mstipicevic/ninja-build-1-7-2'
|
||||
- sourceline: 'ppa:deadsnakes/ppa' # for Python 3.7 (required by Meson)
|
||||
packages:
|
||||
- g++-6
|
||||
- libgtest-dev
|
||||
- boost1.67
|
||||
- python3.6
|
||||
- python3-urllib3
|
||||
- ninja-build
|
||||
before_install:
|
||||
- wget https://bootstrap.pypa.io/get-pip.py
|
||||
- /usr/bin/python3.6 get-pip.py --user --no-cache-dir
|
||||
install:
|
||||
- /usr/bin/python3.6 $HOME/.local/bin/pip install --user meson --no-cache-dir
|
||||
env:
|
||||
# use gold as workaround for https://sourceware.org/bugzilla/show_bug.cgi?id=17068
|
||||
- MATRIX_EVAL="export CC='ccache gcc-6' CXX='ccache g++-6' LDFLAGS=-fuse-ld=gold PATH=\$HOME/.local/bin:\$PATH"
|
||||
|
||||
# Ubuntu Trusty (16.04) with GCC 8
|
||||
- os: linux
|
||||
dist: trusty
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- sourceline: 'ppa:mhier/libboost-latest'
|
||||
- sourceline: 'ppa:mstipicevic/ninja-build-1-7-2'
|
||||
- sourceline: 'ppa:deadsnakes/ppa' # for Python 3.7 (required by Meson)
|
||||
packages:
|
||||
- g++-8
|
||||
- libgtest-dev
|
||||
- boost1.67
|
||||
- python3.6
|
||||
- python3-urllib3
|
||||
- ninja-build
|
||||
before_install:
|
||||
- wget https://bootstrap.pypa.io/get-pip.py
|
||||
- /usr/bin/python3.6 get-pip.py --user --no-cache-dir
|
||||
install:
|
||||
- /usr/bin/python3.6 $HOME/.local/bin/pip install --user meson --no-cache-dir
|
||||
env:
|
||||
# use gold as workaround for https://sourceware.org/bugzilla/show_bug.cgi?id=17068
|
||||
- MATRIX_EVAL="export CC='ccache gcc-8' CXX='ccache g++-8' LDFLAGS=-fuse-ld=gold PATH=\$HOME/.local/bin:\$PATH"
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9.4
|
||||
addons:
|
||||
homebrew:
|
||||
packages:
|
||||
- ccache
|
||||
- meson
|
||||
- icu4c
|
||||
- ffmpeg
|
||||
- libnfs
|
||||
- yajl
|
||||
- libupnp
|
||||
- libid3tag
|
||||
- chromaprint
|
||||
- libsamplerate
|
||||
- libsoxr
|
||||
# libzzip appears to be broken on Homebrew: "ld: library not found for -lzzip"
|
||||
#- libzzip
|
||||
- flac
|
||||
- opus
|
||||
- libvorbis
|
||||
- faad2
|
||||
- wavpack
|
||||
- libmpdclient
|
||||
update: true
|
||||
env:
|
||||
- MATRIX_EVAL="export PATH=/usr/local/opt/ccache/libexec:$PATH HOMEBREW_NO_ANALYTICS=1"
|
||||
|
||||
cache:
|
||||
apt: true
|
||||
ccache: true
|
||||
directories:
|
||||
- $HOME/Library/Caches/Homebrew
|
||||
|
||||
before_cache:
|
||||
- test "$TRAVIS_OS_NAME" != "osx" || brew cleanup
|
||||
|
||||
before_install:
|
||||
- eval "${MATRIX_EVAL}"
|
||||
|
||||
install:
|
||||
# C++14
|
||||
|
||||
# Work around "Target /usr/local/lib/libgtest.a is a symlink
|
||||
# belonging to nss. You can unlink it" during gtest install
|
||||
- test "$TRAVIS_OS_NAME" != "osx" || brew unlink nss
|
||||
|
||||
- test "$TRAVIS_OS_NAME" != "osx" || brew install https://gist.githubusercontent.com/Kronuz/96ac10fbd8472eb1e7566d740c4034f8/raw/gtest.rb
|
||||
|
||||
before_script:
|
||||
- ccache -s
|
||||
|
||||
script:
|
||||
- eval "${MATRIX_EVAL}"
|
||||
- OPTIONS="-Dtest=true"
|
||||
- meson . output --werror $OPTIONS
|
||||
- ninja -C output -v test
|
||||
- ccache -s
|
||||
112
AUTHORS
112
AUTHORS
@@ -1,67 +1,49 @@
|
||||
Current Developers
|
||||
------------------
|
||||
Music Player Daemon - http://www.musicpd.org
|
||||
Copyright 2003-2018 The Music Player Daemon Project
|
||||
|
||||
Avuton Olrich <avuton@gmail.com>
|
||||
release manager
|
||||
The following people have contributed code to MPD:
|
||||
|
||||
Max Kellermann <max@duempel.org>
|
||||
lead developer
|
||||
|
||||
Laszlo Ashin <kodest@gmail.com>
|
||||
WavPack support
|
||||
|
||||
Viliam Mateicka <viliam.mateicka@gmail.com>
|
||||
FFmpeg support, mixer and archive API
|
||||
|
||||
Eric Wollesen <encoded@xmtp.net>
|
||||
encoder API, shout output
|
||||
|
||||
Thomas Jansen <mithi@mithi.net>
|
||||
multithreading tweaks, miscellaneous
|
||||
|
||||
Romain Bignon <romain@peerfuse.org>
|
||||
playlist manipulation
|
||||
|
||||
David Guibert <david.guibert@gmail.com>
|
||||
PulseAudio mixer
|
||||
|
||||
Jochen Keil <jochen.keil@gmail.com>
|
||||
CUE sheet support
|
||||
|
||||
Jeffrey Middleton <jefromi@gmail.com>
|
||||
playlist manipulation
|
||||
|
||||
Sean McNamara <smcnam@gmail.com>
|
||||
WIN32 compatibility
|
||||
|
||||
|
||||
Former Developers
|
||||
-----------------
|
||||
|
||||
Warren Dukes <warren.dukes@gmail.com>
|
||||
former lead developer and project founder
|
||||
|
||||
Niklas Hofer
|
||||
'next' and 'previous' patch
|
||||
|
||||
Jim Ramsay <i.am@jimramsay.com>
|
||||
Zerconf/avahi support
|
||||
|
||||
Guus Sliepen <guus@sliepen.eu.org>
|
||||
libsamplerate code
|
||||
|
||||
J. Alexander Treuman <jat@spatialrift.net>
|
||||
general, MP3, ID3, PulseAudio, format conversion, stored playlists
|
||||
AudioCompress, much much more...
|
||||
|
||||
Eric Wong
|
||||
former lead developer
|
||||
|
||||
José Anarch <anarchsss@gmail.com>
|
||||
JACK plugin
|
||||
|
||||
Patrik Weiskircher <pat@icore.at>
|
||||
Stored playlist commands
|
||||
|
||||
Nick Welch <mack@incise.org>
|
||||
Sighandlers
|
||||
Warren Dukes <warren.dukes@gmail.com>
|
||||
Avuton Olrich <avuton@gmail.com>
|
||||
Max Kellermann <max.kellermann@gmail.com>
|
||||
Laszlo Ashin <kodest@gmail.com>
|
||||
Viliam Mateicka <viliam.mateicka@gmail.com>
|
||||
Eric Wollesen <encoded@xmtp.net>
|
||||
Thomas Jansen <mithi@mithi.net>
|
||||
Romain Bignon <romain@peerfuse.org>
|
||||
David Guibert <david.guibert@gmail.com>
|
||||
Jochen Keil <jochen.keil@gmail.com>
|
||||
Jeffrey Middleton <jefromi@gmail.com>
|
||||
Sean McNamara <smcnam@gmail.com>
|
||||
Niklas Hofer
|
||||
Jim Ramsay <i.am@jimramsay.com>
|
||||
Guus Sliepen <guus@sliepen.eu.org>
|
||||
J. Alexander Treuman <jat@spatialrift.net>
|
||||
Eric Wong
|
||||
José Anarch <anarchsss@gmail.com>
|
||||
Patrik Weiskircher <pat@icore.at>
|
||||
Nick Welch <mack@incise.org>
|
||||
Jonathan Neuschäfer <j.neuschaefer@gmx.net>
|
||||
Anton Khirnov <anton@khirnov.net>
|
||||
Simon Kagstrom <simon.kagstrom@gmail.com>
|
||||
Denis Krjuchkov <denis@crazydev.net>
|
||||
Jurgen Kramer <gtmkramer@xs4all.nl>
|
||||
Jean-Francois Dockes <jf@dockes.org>
|
||||
Yue Wang <yuleopen@gmail.com>
|
||||
Matthew Leon Grinshpun <ml@matthewleon.com>
|
||||
Dimitris Papastamos <sin@2f30.org>
|
||||
Florian Schlichting <fsfs@debian.org>
|
||||
François Revol <revol@free.fr>
|
||||
Jacob Vosmaer <contact@jacobvosmaer.nl>
|
||||
Thomas Guillem <thomas@gllm.fr>
|
||||
Andrew Basterfield <abasterfield@gmail.com>
|
||||
Bart Nagel <bart@tremby.net>
|
||||
Christian Kröner <ckroener@gmx.net>
|
||||
Christopher Zimmermann <madroach@gmerlin.de>
|
||||
John Regan <john@jrjrtech.com>
|
||||
Joshua Wise <joshua@joshuawise.com>
|
||||
Ryan Walklin
|
||||
Stefan Roellin <stefan@roellin-baumann.ch>
|
||||
Stefano Miccoli <stefano.miccoli@polimi.it>
|
||||
Steven O'Brien <steven_obrien1@yahoo.co.uk>
|
||||
Thomas Zander <thomas.e.zander@googlemail.com>
|
||||
|
||||
214
INSTALL
214
INSTALL
@@ -1,214 +0,0 @@
|
||||
Music Player Daemon (MPD) - INSTALL
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
This document is a very small amount of documentation about what is needed to
|
||||
install MPD. If more information is desired see the community wiki at
|
||||
http://mpd.wikia.com.
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
gcc - http://gcc.gnu.org/
|
||||
Any other C99 compliant compiler should also work.
|
||||
|
||||
GLib 2.12 - http://www.gtk.org/
|
||||
General-purpose utility library.
|
||||
|
||||
|
||||
Optional Output Dependencies
|
||||
----------------------------
|
||||
|
||||
You will need at least one of these to compile MPD.
|
||||
|
||||
Most of these are available as packages on major distributions. Be sure to
|
||||
install both the library package as well as the development package.
|
||||
|
||||
AO - http://www.xiph.org/ao/
|
||||
A portable library that abstracts many audio output types as one API. Should
|
||||
be used only if there is no native plugin available or if the native plugin
|
||||
doesn't work. You will need libao.
|
||||
|
||||
ALSA - http://www.alsa-project.org/
|
||||
The Advanced Linux Sound Architecture. Recommended audio output if you use
|
||||
Linux. You will need libasound.
|
||||
|
||||
FIFO
|
||||
This is a mostly undocumented, developer plugin to transmit raw data.
|
||||
|
||||
MVP - http://en.wikipedia.org/wiki/Hauppauge_MediaMVP
|
||||
A network media player.
|
||||
|
||||
OSS - http://www.opensound.com
|
||||
Open Sound System.
|
||||
|
||||
OSX - http://www.apple.com
|
||||
Necessary if you are on Mac OSX.
|
||||
|
||||
PulseAudio - http://www.pulseaudio.org/
|
||||
An advanced sound daemon. You will need libpulse.
|
||||
|
||||
JACK - http://www.jackaudio.org/
|
||||
A low-latency sound daemon.
|
||||
|
||||
libshout - http://www.icecast.org/
|
||||
For streaming to an Icecast or Shoutcast server.
|
||||
You also need an encoder: either libvorbisenc (ogg), or liblame (mp3).
|
||||
|
||||
OpenAL - http://kcat.strangesoft.net/openal.html
|
||||
Open Audio Library
|
||||
|
||||
libffado - http://www.ffado.org/
|
||||
For FireWire audio devices.
|
||||
|
||||
|
||||
Optional Input Dependencies
|
||||
---------------------------
|
||||
|
||||
You will need at least one of these to compile MPD.
|
||||
|
||||
Most of these are available as packages on major distributions. Be sure to
|
||||
install both the library package as well as the development package.
|
||||
|
||||
MAD - http://www.underbit.com/products/mad/
|
||||
For MP3 support. You will need libmad, and optionally libid3tag if you want
|
||||
ID3 tag support.
|
||||
|
||||
libmpg123 - http://www.mpg123.de/
|
||||
Alternative for MP3 support.
|
||||
|
||||
Ogg Vorbis - http://www.xiph.org/ogg/vorbis/
|
||||
For Ogg Vorbis support. You will need libogg and libvorbis.
|
||||
|
||||
FLAC - http://flac.sourceforge.net/
|
||||
For FLAC support. You will need version 1.1.0 or higher of libflac.
|
||||
|
||||
OggFLAC - http://www.xiph.org/ogg/vorbis/ and http://flac.sourceforge.net/
|
||||
For OggFLAC support. You will need liboggflac, which can be built from the
|
||||
FLAC sources if libogg is already installed. Versions of flac 1.1.3 and
|
||||
greater will automatically detect and use OggFLAC if it's available.
|
||||
|
||||
Audio File - http://www.68k.org/~michael/audiofile/
|
||||
For WAVE, AIFF, and AU support. You will need libaudiofile.
|
||||
|
||||
FAAD2 - http://www.audiocoding.com/
|
||||
For MP4/AAC support. You will need libmp4ff.
|
||||
|
||||
libmpcdec - http://www.musepack.net/
|
||||
For Musepack support.
|
||||
|
||||
MikMod - http://mikmod.raphnet.net/
|
||||
For MOD support. You will need libmikmod.
|
||||
|
||||
libavcodec, libavformat (ffmpeg) - http://ffmpeg.mplayerhq.hu/
|
||||
Multi-codec library.
|
||||
|
||||
libsidplay2 - http://sidplay2.sourceforge.net/
|
||||
For C64 SID support.
|
||||
|
||||
libfluidsynth - http://fluidsynth.resonance.org/
|
||||
For MIDI support (DO NOT USE - use libwildmidi instead)
|
||||
|
||||
libwildmidi - http://wildmidi.sourceforge.net/
|
||||
For MIDI support.
|
||||
|
||||
libsndfile - http://www.mega-nerd.com/libsndfile/
|
||||
WAVE, AIFF, and many others.
|
||||
|
||||
libwavpack - http://www.wavpack.com/
|
||||
For WavPack playback.
|
||||
|
||||
|
||||
Optional Miscellaneous Dependencies
|
||||
-----------------------------------
|
||||
|
||||
Avahi - http://www.avahi.org/
|
||||
For Zeroconf support.
|
||||
|
||||
libsamplerate - http://www.mega-nerd.com/SRC/
|
||||
For advanced samplerate conversions.
|
||||
|
||||
libcurl - http://curl.haxx.se/
|
||||
For playing HTTP streams.
|
||||
|
||||
libmms - https://launchpad.net/libmms
|
||||
For playing MMS streams.
|
||||
|
||||
SQLite - http://www.sqlite.org/
|
||||
For the sticker database.
|
||||
|
||||
libcue - http://libcue.sourceforge.net/
|
||||
For CUE sheet support.
|
||||
|
||||
|
||||
pkg-config
|
||||
----------
|
||||
|
||||
MPD uses pkg-config to locate most external libraries. If you do not
|
||||
have pkg-config, or if your version of the library does not ship the
|
||||
".pc" file, you have to provide the library's build options in
|
||||
environment variables. These variables are documented in "./configure
|
||||
--help". Example:
|
||||
|
||||
FLAC_CFLAGS=-I/usr/include/FLAC FLAC_LIBS=-lFLAC ./configure
|
||||
|
||||
|
||||
Download
|
||||
--------
|
||||
|
||||
Get the latest release from of MPD from <http://www.musicpd.org/>.
|
||||
|
||||
Compile
|
||||
-------
|
||||
|
||||
1) unzip and untar the archive
|
||||
|
||||
$ tar zxvf mpd-x.x.x.tar.gz
|
||||
|
||||
or
|
||||
|
||||
$ tar jxvf mpd-x.x.x.tar.bz2
|
||||
|
||||
2) change to directory created
|
||||
|
||||
$ cd mpd-x.x.x
|
||||
|
||||
3) Run configure script (this will determine what dependencies you have)
|
||||
|
||||
$ ./configure
|
||||
|
||||
4) Compile
|
||||
|
||||
$ make
|
||||
|
||||
Install (Optional)
|
||||
-------
|
||||
|
||||
(as root)
|
||||
$ make install
|
||||
|
||||
Run
|
||||
---
|
||||
|
||||
1) run mpd:
|
||||
|
||||
$ mpd <config file>
|
||||
|
||||
First default is ~/.mpdconf then ~/.mpd/mpd.conf then /etc/mpd.conf. If
|
||||
neither of these exist a mpd configuration file must be specified at
|
||||
runtime.
|
||||
|
||||
A sample config file is included with the source of MPD, mpdconf.example.
|
||||
|
||||
The first time MPD is run it will attempt to discover all music in your
|
||||
music root, recursively. This can be affected by the symbolic link
|
||||
options specified in the example mpd.conf.
|
||||
|
||||
Using MPD
|
||||
---------
|
||||
|
||||
You can download many different interfaces for MPD at
|
||||
<http://mpd.wikia.com/wiki/Clients>
|
||||
|
||||
MPD can be interfaced directly using telnet (see COMMANDS, if you are brave).
|
||||
1173
Makefile.am
1173
Makefile.am
File diff suppressed because it is too large
Load Diff
17
README
17
README
@@ -1,17 +0,0 @@
|
||||
|
||||
Music Player Daemon (MPD)
|
||||
http://www.musicpd.org
|
||||
|
||||
A daemon for playing music of various formats. Music is played through the
|
||||
server's audio device. The daemon stores info about all available music,
|
||||
and this info can be easily searched and retrieved. Player control, info
|
||||
retrieval, and playlist management can all be managed remotely.
|
||||
|
||||
For basic installation information see the INSTALL file.
|
||||
|
||||
MPD is released under the GNU General Public License version 2, which is
|
||||
distributed in the COPYING file.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
29
README.md
Normal file
29
README.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Music Player Daemon
|
||||
|
||||
http://www.musicpd.org
|
||||
|
||||
A daemon for playing music of various formats. Music is played through the
|
||||
server's audio device. The daemon stores info about all available music,
|
||||
and this info can be easily searched and retrieved. Player control, info
|
||||
retrieval, and playlist management can all be managed remotely.
|
||||
|
||||
For basic installation instructions
|
||||
[read the manual](https://www.musicpd.org/doc/user/install.html).
|
||||
|
||||
# Users
|
||||
|
||||
- [Manual](http://www.musicpd.org/doc/user/)
|
||||
- [Forum](http://forum.musicpd.org/)
|
||||
- [IRC](irc://chat.freenode.net/#mpd)
|
||||
- [Bug tracker](https://github.com/MusicPlayerDaemon/MPD/issues/)
|
||||
|
||||
# Developers
|
||||
|
||||
- [Protocol specification](http://www.musicpd.org/doc/protocol/)
|
||||
- [Developer manual](http://www.musicpd.org/doc/developer/)
|
||||
|
||||
# Legal
|
||||
|
||||
MPD is released under the
|
||||
[GNU General Public License version 2](https://www.gnu.org/licenses/gpl-2.0.txt),
|
||||
which is distributed in the COPYING file.
|
||||
92
UPGRADING
92
UPGRADING
@@ -1,92 +0,0 @@
|
||||
Music Player Daemon (MPD) - UPGRADING
|
||||
|
||||
Upgrading to 0.14
|
||||
-----------------
|
||||
|
||||
The filesystem character set is determined by GLib, if it is not
|
||||
configured. GLib has an affinity towards UTF-8, while older MPD
|
||||
versions used to choose ISO-Latin-1.
|
||||
|
||||
|
||||
Upgrading to 0.13.0
|
||||
-------------------
|
||||
|
||||
JACK, Avahi, and libsamplerate have been added as optional dependencies.
|
||||
FLAC/OggFLAC now supports the 1.1.3 API, and libmikmod 3.2.0 betas are
|
||||
supported as well.
|
||||
|
||||
New mpd.conf parameters include zeroconf_name, samplerate_converter, and
|
||||
gapless_mp3_playback. See the mpd.conf man page or updated mpconf.example for
|
||||
more information on these parameters.
|
||||
|
||||
Support for the ID3v2 "Original Artist/Performer" tag has been added. Your
|
||||
MP3s will need to be rescanned for these tags to be included in the database.
|
||||
This can be done by running mpd --create-db.
|
||||
|
||||
Upgrading to 0.12.0
|
||||
-------------------
|
||||
|
||||
The ao_driver and ao_driver_options config parameters have been removed and
|
||||
replaced with the audio_output config section. You will have to update your
|
||||
config file to use this instead. See the mpd.conf man page or the new
|
||||
mpdconf.example for details on specifying audio_output sections.
|
||||
|
||||
The db_file parameter is no longer optional. If you did not specify it in your
|
||||
old config file then you will have to add it in order to run 0.12.0.
|
||||
|
||||
Support for OggFLAC and Musepack audio files has been added. Additionally,
|
||||
scanning of MP3 files has been improved. To make use of these updates it is
|
||||
highly recommended that you run mpd --create-db to recreate your entire
|
||||
database.
|
||||
|
||||
Upgrading to 0.11.0
|
||||
-------------------
|
||||
|
||||
The database format has changed a little bit, but in a backward compatible way.
|
||||
This means that if you upgrade to 0.11.0 from 0.10.x, you do not need to make
|
||||
any changes. However, if you downgrade back to 0.10.x, then you will need
|
||||
to recreate your db.
|
||||
|
||||
The default port for MPD is now 6600, so update your mpd and client
|
||||
configurations appropriately.
|
||||
|
||||
Upgrading to 0.10.0
|
||||
-------------------
|
||||
|
||||
All information is now stored in the db in UTF-8 format, and the character
|
||||
set used for the filesystem is stored in the db. Thus, it is highly
|
||||
recommended that you recreate the db. To do so, run mpd with the
|
||||
"--create-db" command line option. Also, note that the filesystem
|
||||
character set will be determined from your current locale settings.
|
||||
If your locale settings are not the same as those used for the filesystem,
|
||||
then use the config file parameter "filesystem_charset" to specify the
|
||||
correct character set (this maybe necessary if you create the db with root).
|
||||
|
||||
Upgrading to 0.9.3
|
||||
------------------
|
||||
|
||||
Wave support was added, so to have your wave files added, update the db (mpc
|
||||
update).
|
||||
|
||||
Also, song lengths are now stored in the db. To get this stuff
|
||||
added to the db, you will need to recreate the db from scratch. To do this,
|
||||
run mpd with the "--create-db" commandline option.
|
||||
|
||||
Upgrading to 0.9.0
|
||||
------------------
|
||||
|
||||
The "stop_on_error" config parameter was removed, so be sure to remove this
|
||||
parameter from your config file.
|
||||
|
||||
Upgrading to 0.8.x
|
||||
------------------
|
||||
|
||||
If you have FLACs, then to have them added to your list of available music,
|
||||
just use "update".
|
||||
|
||||
Upgrading from 0.5.x to 0.6.x
|
||||
-----------------------------
|
||||
If you have not compiled MPD with "make ogg", then nothing is needed.
|
||||
|
||||
If you compiled with "make ogg", just use "update" (available via the phpMp
|
||||
interface) to add your OGGs to MPD's list of available music.
|
||||
48
android/AndroidManifest.xml
Normal file
48
android/AndroidManifest.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.musicpd"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="49"
|
||||
android:versionName="0.21.26">
|
||||
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/>
|
||||
|
||||
<uses-feature android:name="android.software.leanback"
|
||||
android:required="false" />
|
||||
<uses-feature android:name="android.hardware.touchscreen"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<application android:allowBackup="true"
|
||||
android:icon="@drawable/icon"
|
||||
android:banner="@drawable/icon"
|
||||
android:label="@string/app_name">
|
||||
<activity android:name=".Settings"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".Settings"
|
||||
android:label="@string/app_name" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<receiver android:name=".Receiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<service android:name=".Main" android:process=":main"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
21
android/apk/make-unsigned-apk.sh
Executable file
21
android/apk/make-unsigned-apk.sh
Executable file
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
S=`dirname "$0"`
|
||||
ANDROID_ABI=$1
|
||||
STRIP=$2
|
||||
ZIP=$3
|
||||
UNSIGNED_APK=$4
|
||||
LIBMPD_SO=$5
|
||||
CLASSES_DEX=$6
|
||||
RESOURCES_APK=$7
|
||||
D=`dirname "$UNSIGNED_APK"`
|
||||
|
||||
rm -rf "$D/apk"
|
||||
mkdir -p "$D/apk/lib/$ANDROID_ABI"
|
||||
|
||||
"$STRIP" "$LIBMPD_SO" -o "$D/apk/lib/$ANDROID_ABI/`basename $LIBMPD_SO`"
|
||||
cp "$CLASSES_DEX" "$D/apk/"
|
||||
cp "$RESOURCES_APK" "$UNSIGNED_APK"
|
||||
|
||||
cd "$D/apk"
|
||||
exec zip -q -r -X "../`basename $UNSIGNED_APK`" .
|
||||
59
android/apk/meson.build
Normal file
59
android/apk/meson.build
Normal file
@@ -0,0 +1,59 @@
|
||||
unsigned_apk = custom_target(
|
||||
'mpd-unsigned.apk',
|
||||
output: 'mpd-unsigned.apk',
|
||||
input: [mpd, classes_dex, resources_apk[0]],
|
||||
command: [
|
||||
join_paths(meson.current_source_dir(), 'make-unsigned-apk.sh'),
|
||||
android_abi,
|
||||
get_option('android_strip'),
|
||||
zip,
|
||||
'@OUTPUT0@',
|
||||
'@INPUT@',
|
||||
],
|
||||
)
|
||||
|
||||
if get_option('android_debug_keystore') != ''
|
||||
debug_apk = custom_target(
|
||||
'mpd-debug.apk',
|
||||
output: 'mpd-debug.apk',
|
||||
input: unsigned_apk,
|
||||
command: [
|
||||
jarsigner,
|
||||
'-keystore', get_option('android_debug_keystore'),
|
||||
'-storepass', 'android',
|
||||
'-signedjar', '@OUTPUT@',
|
||||
'@INPUT@',
|
||||
'androiddebugkey',
|
||||
],
|
||||
build_by_default: true
|
||||
)
|
||||
endif
|
||||
|
||||
if get_option('android_keystore') != '' and get_option('android_keyalias') != '' and get_option('android_keypass') != ''
|
||||
unaligned_apk = custom_target(
|
||||
'mpd-unaligned.apk',
|
||||
output: 'mpd-unaligned.apk',
|
||||
input: unsigned_apk,
|
||||
command: [
|
||||
jarsigner,
|
||||
'-digestalg', 'SHA1', '-sigalg', 'MD5withRSA',
|
||||
'-keystore', get_option('android_keystore'),
|
||||
'-storepass', get_option('android_keypass'),
|
||||
'-signedjar', '@OUTPUT@',
|
||||
'@INPUT@',
|
||||
get_option('android_keyalias'),
|
||||
],
|
||||
)
|
||||
|
||||
apk = custom_target(
|
||||
'mpd.apk',
|
||||
output: 'mpd.apk',
|
||||
input: unaligned_apk,
|
||||
command: [
|
||||
android_zipalign,
|
||||
'-f', '4',
|
||||
'@INPUT@', '@OUTPUT@',
|
||||
],
|
||||
build_by_default: true
|
||||
)
|
||||
endif
|
||||
201
android/build.py
Executable file
201
android/build.py
Executable file
@@ -0,0 +1,201 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os, os.path
|
||||
import sys, subprocess
|
||||
|
||||
if len(sys.argv) < 4:
|
||||
print("Usage: build.py SDK_PATH NDK_PATH ABI [configure_args...]", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
sdk_path = sys.argv[1]
|
||||
ndk_path = sys.argv[2]
|
||||
android_abi = sys.argv[3]
|
||||
configure_args = sys.argv[4:]
|
||||
|
||||
if not os.path.isfile(os.path.join(sdk_path, 'tools', 'android')):
|
||||
print("SDK not found in", ndk_path, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if not os.path.isdir(ndk_path):
|
||||
print("NDK not found in", ndk_path, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
android_abis = {
|
||||
'armeabi-v7a': {
|
||||
'arch': 'arm-linux-androideabi',
|
||||
'ndk_arch': 'arm',
|
||||
'toolchain_arch': 'arm-linux-androideabi',
|
||||
'llvm_triple': 'armv7-linux-androideabi',
|
||||
'cflags': '-fpic -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp',
|
||||
},
|
||||
|
||||
'arm64-v8a': {
|
||||
'arch': 'aarch64-linux-android',
|
||||
'ndk_arch': 'arm64',
|
||||
'toolchain_arch': 'aarch64-linux-android',
|
||||
'llvm_triple': 'aarch64-linux-android',
|
||||
'cflags': '-fpic',
|
||||
},
|
||||
|
||||
'x86': {
|
||||
'arch': 'i686-linux-android',
|
||||
'ndk_arch': 'x86',
|
||||
'toolchain_arch': 'x86',
|
||||
'llvm_triple': 'i686-linux-android',
|
||||
'cflags': '-fPIC -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32',
|
||||
},
|
||||
|
||||
'x86_64': {
|
||||
'arch': 'x86_64-linux-android',
|
||||
'ndk_arch': 'x86_64',
|
||||
'toolchain_arch': 'x86_64',
|
||||
'llvm_triple': 'x86_64-linux-android',
|
||||
'cflags': '-fPIC -m64',
|
||||
},
|
||||
}
|
||||
|
||||
# select the NDK target
|
||||
abi_info = android_abis[android_abi]
|
||||
arch = abi_info['arch']
|
||||
|
||||
# the path to the MPD sources
|
||||
mpd_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]) or '.', '..'))
|
||||
sys.path[0] = os.path.join(mpd_path, 'python')
|
||||
|
||||
# output directories
|
||||
from build.dirs import lib_path, tarball_path, src_path
|
||||
from build.meson import configure as run_meson
|
||||
|
||||
arch_path = os.path.join(lib_path, arch)
|
||||
build_path = os.path.join(arch_path, 'build')
|
||||
|
||||
# build host configuration
|
||||
build_arch = 'linux-x86_64'
|
||||
|
||||
# set up the NDK toolchain
|
||||
|
||||
class AndroidNdkToolchain:
|
||||
def __init__(self, tarball_path, src_path, build_path,
|
||||
use_cxx):
|
||||
self.tarball_path = tarball_path
|
||||
self.src_path = src_path
|
||||
self.build_path = build_path
|
||||
|
||||
ndk_arch = abi_info['ndk_arch']
|
||||
android_api_level = '21'
|
||||
|
||||
# select the NDK compiler
|
||||
gcc_version = '4.9'
|
||||
|
||||
install_prefix = os.path.join(arch_path, 'root')
|
||||
|
||||
self.arch = arch
|
||||
self.install_prefix = install_prefix
|
||||
|
||||
toolchain_path = os.path.join(ndk_path, 'toolchains', abi_info['toolchain_arch'] + '-' + gcc_version, 'prebuilt', build_arch)
|
||||
llvm_path = os.path.join(ndk_path, 'toolchains', 'llvm', 'prebuilt', build_arch)
|
||||
llvm_triple = abi_info['llvm_triple'] + android_api_level
|
||||
|
||||
common_flags = '-Os -g'
|
||||
common_flags += ' ' + abi_info['cflags']
|
||||
|
||||
toolchain_bin = os.path.join(toolchain_path, 'bin')
|
||||
llvm_bin = os.path.join(llvm_path, 'bin')
|
||||
self.cc = os.path.join(llvm_bin, 'clang')
|
||||
self.cxx = os.path.join(llvm_bin, 'clang++')
|
||||
common_flags += ' -target ' + llvm_triple + ' -integrated-as -gcc-toolchain ' + toolchain_path
|
||||
|
||||
common_flags += ' -fvisibility=hidden -fdata-sections -ffunction-sections'
|
||||
|
||||
# required flags from https://android.googlesource.com/platform/ndk/+/ndk-release-r20/docs/BuildSystemMaintainers.md#additional-required-arguments
|
||||
common_flags += ' -fno-addrsig'
|
||||
|
||||
self.ar = os.path.join(toolchain_bin, arch + '-ar')
|
||||
self.ranlib = os.path.join(toolchain_bin, arch + '-ranlib')
|
||||
self.nm = os.path.join(toolchain_bin, arch + '-nm')
|
||||
self.strip = os.path.join(toolchain_bin, arch + '-strip')
|
||||
|
||||
self.cflags = common_flags
|
||||
self.cxxflags = common_flags
|
||||
self.cppflags = ' -isystem ' + os.path.join(install_prefix, 'include')
|
||||
self.ldflags = ' -L' + os.path.join(install_prefix, 'lib') + \
|
||||
' -Wl,--exclude-libs=ALL' + \
|
||||
' ' + common_flags
|
||||
self.ldflags = common_flags
|
||||
self.libs = ''
|
||||
|
||||
self.is_arm = ndk_arch == 'arm'
|
||||
self.is_armv7 = self.is_arm and 'armv7' in self.cflags
|
||||
self.is_aarch64 = ndk_arch == 'arm64'
|
||||
self.is_windows = False
|
||||
|
||||
libstdcxx_flags = ''
|
||||
libstdcxx_cxxflags = ''
|
||||
libstdcxx_ldflags = ''
|
||||
libstdcxx_libs = '-static-libstdc++'
|
||||
|
||||
if self.is_armv7:
|
||||
# On 32 bit ARM, clang generates no ".eh_frame" section;
|
||||
# instead, the LLVM unwinder library is used for unwinding
|
||||
# the stack after a C++ exception was thrown
|
||||
libstdcxx_libs += ' -lunwind'
|
||||
|
||||
if use_cxx:
|
||||
self.cxxflags += ' ' + libstdcxx_cxxflags
|
||||
self.ldflags += ' ' + libstdcxx_ldflags
|
||||
self.libs += ' ' + libstdcxx_libs
|
||||
|
||||
self.env = dict(os.environ)
|
||||
|
||||
# redirect pkg-config to use our root directory instead of the
|
||||
# default one on the build host
|
||||
import shutil
|
||||
bin_dir = os.path.join(install_prefix, 'bin')
|
||||
try:
|
||||
os.makedirs(bin_dir)
|
||||
except:
|
||||
pass
|
||||
self.pkg_config = shutil.copy(os.path.join(mpd_path, 'build', 'pkg-config.sh'),
|
||||
os.path.join(bin_dir, 'pkg-config'))
|
||||
self.env['PKG_CONFIG'] = self.pkg_config
|
||||
|
||||
# a list of third-party libraries to be used by MPD on Android
|
||||
from build.libs import *
|
||||
thirdparty_libs = [
|
||||
libmpdclient,
|
||||
libogg,
|
||||
libvorbis,
|
||||
opus,
|
||||
flac,
|
||||
libid3tag,
|
||||
libmodplug,
|
||||
wildmidi,
|
||||
gme,
|
||||
ffmpeg,
|
||||
curl,
|
||||
libexpat,
|
||||
libnfs,
|
||||
boost,
|
||||
]
|
||||
|
||||
# build the third-party libraries
|
||||
for x in thirdparty_libs:
|
||||
toolchain = AndroidNdkToolchain(tarball_path, src_path, build_path,
|
||||
use_cxx=x.use_cxx)
|
||||
if not x.is_installed(toolchain):
|
||||
x.build(toolchain)
|
||||
|
||||
# configure and build MPD
|
||||
toolchain = AndroidNdkToolchain(tarball_path, src_path, build_path,
|
||||
use_cxx=True)
|
||||
|
||||
configure_args += [
|
||||
'-Dandroid_sdk=' + sdk_path,
|
||||
'-Dandroid_ndk=' + ndk_path,
|
||||
'-Dandroid_abi=' + android_abi,
|
||||
'-Dandroid_strip=' + toolchain.strip,
|
||||
]
|
||||
|
||||
from build.meson import configure as run_meson
|
||||
run_meson(toolchain, mpd_path, '.', configure_args)
|
||||
subprocess.check_call(['/usr/bin/ninja'], env=toolchain.env)
|
||||
11
android/custom_rules.xml
Normal file
11
android/custom_rules.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project name="mpd_rules">
|
||||
<!-- setting these two properties works around a bug in Android
|
||||
SDK's build.xml, which deletes all .class files every time -->
|
||||
<property name="build.last.is.packaging.debug" value="true" />
|
||||
<property name="build.is.packaging.debug" value="true" />
|
||||
|
||||
<target name="compile-jni-classes"
|
||||
depends="-set-debug-mode,-compile"/>
|
||||
</project>
|
||||
24
android/make-resources-apk.sh
Executable file
24
android/make-resources-apk.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
S=`dirname "$0"`
|
||||
AAPT=$1
|
||||
BASE_JAR=$2
|
||||
JAVA_PKG=$3
|
||||
JAVA_PKG_PATH=$4
|
||||
APK_FILE="$5"
|
||||
D=`dirname "$APK_FILE"`
|
||||
|
||||
rm -rf "$D/res"
|
||||
mkdir -p "$D/res/drawable" "$D/src"
|
||||
cp "$D/icon.png" "$D/notification_icon.png" "$D/res/drawable/"
|
||||
|
||||
"$AAPT" package -f -m --auto-add-overlay \
|
||||
--custom-package "$JAVA_PKG" \
|
||||
-M "$S/AndroidManifest.xml" \
|
||||
-S "$D/res" \
|
||||
-S "$S/res" \
|
||||
-J "$D/src" \
|
||||
-I "$BASE_JAR" \
|
||||
-F "$D/resources.apk"
|
||||
|
||||
cp "$D/src/$JAVA_PKG_PATH/R.java" "$D/"
|
||||
140
android/meson.build
Normal file
140
android/meson.build
Normal file
@@ -0,0 +1,140 @@
|
||||
android_package = 'org.musicpd'
|
||||
android_package_path = join_paths(android_package.split('.'))
|
||||
|
||||
android_ndk = get_option('android_ndk')
|
||||
android_sdk = get_option('android_sdk')
|
||||
android_abi = get_option('android_abi')
|
||||
|
||||
android_sdk_build_tools_version = '27.0.0'
|
||||
android_sdk_platform = 'android-23'
|
||||
|
||||
android_build_tools_dir = join_paths(android_sdk, 'build-tools', android_sdk_build_tools_version)
|
||||
android_sdk_platform_dir = join_paths(android_sdk, 'platforms', android_sdk_platform)
|
||||
|
||||
android_aidl = join_paths(android_build_tools_dir, 'aidl')
|
||||
android_aapt = join_paths(android_build_tools_dir, 'aapt')
|
||||
android_dx = join_paths(android_build_tools_dir, 'dx')
|
||||
android_zipalign = join_paths(android_build_tools_dir, 'zipalign')
|
||||
|
||||
javac = find_program('javac')
|
||||
jarsigner = find_program('jarsigner')
|
||||
rsvg_convert = find_program('rsvg-convert')
|
||||
convert = find_program('convert')
|
||||
zip = find_program('zip')
|
||||
|
||||
common_cppflags += '-I' + join_paths(meson.current_build_dir(), 'include')
|
||||
|
||||
#
|
||||
# AIDL
|
||||
#
|
||||
|
||||
IMainCallback_java = custom_target(
|
||||
'IMainCallback.java',
|
||||
output: 'IMainCallback.java',
|
||||
input: join_paths(meson.current_source_dir(), 'src', 'IMainCallback.aidl'),
|
||||
command: [
|
||||
join_paths(meson.current_source_dir(), 'run-aidl.sh'),
|
||||
android_aidl,
|
||||
'@INPUT@',
|
||||
'@OUTPUT@',
|
||||
join_paths(meson.current_build_dir(), 'src'),
|
||||
android_package_path,
|
||||
],
|
||||
)
|
||||
|
||||
IMain_java = custom_target(
|
||||
'IMain.java',
|
||||
output: 'IMain.java',
|
||||
input: join_paths(meson.current_source_dir(), 'src', 'IMain.aidl'),
|
||||
depends: IMainCallback_java,
|
||||
command: [
|
||||
join_paths(meson.current_source_dir(), 'run-aidl.sh'),
|
||||
android_aidl,
|
||||
'@INPUT@',
|
||||
'@OUTPUT@',
|
||||
join_paths(meson.current_build_dir(), 'src'),
|
||||
android_package_path,
|
||||
],
|
||||
)
|
||||
|
||||
#
|
||||
# Resources
|
||||
#
|
||||
|
||||
android_icon = custom_target(
|
||||
'Android icon',
|
||||
output: 'icon.png',
|
||||
input: '../mpd.svg',
|
||||
command: [
|
||||
rsvg_convert, '--width=48', '--height=48', '@INPUT@', '-o', '@OUTPUT@',
|
||||
],
|
||||
)
|
||||
|
||||
android_notification_icon = custom_target(
|
||||
'Android notification icon',
|
||||
output: 'notification_icon.png',
|
||||
input: android_icon,
|
||||
command: [
|
||||
convert, '@INPUT@', '-colorspace', 'Gray', '-gamma', '2.2', '@OUTPUT@',
|
||||
],
|
||||
)
|
||||
|
||||
resources_apk = custom_target(
|
||||
'resources.apk',
|
||||
output: ['resources.apk', 'R.java'],
|
||||
input: [
|
||||
'res/layout/custom_notification_gb.xml',
|
||||
'res/layout/log_item.xml',
|
||||
'res/layout/settings.xml',
|
||||
'res/values/strings.xml',
|
||||
android_icon,
|
||||
android_notification_icon,
|
||||
],
|
||||
command: [
|
||||
join_paths(meson.current_source_dir(), 'make-resources-apk.sh'),
|
||||
android_aapt,
|
||||
join_paths(android_sdk_platform_dir, 'android.jar'),
|
||||
android_package,
|
||||
android_package_path,
|
||||
'@OUTPUT0@',
|
||||
],
|
||||
)
|
||||
|
||||
#
|
||||
# Compile Java
|
||||
#
|
||||
|
||||
classes_jar = custom_target(
|
||||
'classes.jar',
|
||||
output: 'classes.jar',
|
||||
input: [
|
||||
'src/Bridge.java',
|
||||
'src/Loader.java',
|
||||
'src/Main.java',
|
||||
'src/Receiver.java',
|
||||
'src/Settings.java',
|
||||
IMain_java,
|
||||
IMainCallback_java,
|
||||
resources_apk[1],
|
||||
],
|
||||
command: [
|
||||
join_paths(meson.current_source_dir(), 'run-javac.sh'),
|
||||
javac,
|
||||
join_paths(android_sdk_platform_dir, 'android.jar'),
|
||||
android_package_path,
|
||||
zip,
|
||||
'@OUTPUT@',
|
||||
'@INPUT@',
|
||||
],
|
||||
)
|
||||
|
||||
classes_dex = custom_target(
|
||||
'classes.dex',
|
||||
output: 'classes.dex',
|
||||
input: classes_jar,
|
||||
command: [
|
||||
android_dx,
|
||||
'--dex', '--output', '@OUTPUT@',
|
||||
'@INPUT@',
|
||||
],
|
||||
)
|
||||
22
android/res/layout/custom_notification_gb.xml
Normal file
22
android/res/layout/custom_notification_gb.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/layout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:padding="10dp" >
|
||||
<ImageView android:id="@+id/image"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_marginRight="10dp" />
|
||||
<TextView android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/image"
|
||||
style="Custom Notification Title" />
|
||||
<TextView android:id="@+id/text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/image"
|
||||
android:layout_below="@id/title"
|
||||
style="Custom Notification Text" />
|
||||
</RelativeLayout>
|
||||
5
android/res/layout/log_item.xml
Normal file
5
android/res/layout/log_item.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:typeface="monospace" />
|
||||
37
android/res/layout/settings.xml
Normal file
37
android/res/layout/settings.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/run"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textOn="@string/toggle_button_run_on"
|
||||
android:textOff="@string/toggle_button_run_off" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/run_on_boot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/checkbox_run_on_boot" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/wakelock"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/checkbox_wakelock" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<ListView
|
||||
android:id="@+id/log_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dip" />
|
||||
|
||||
</LinearLayout>
|
||||
11
android/res/values/strings.xml
Normal file
11
android/res/values/strings.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<resources>
|
||||
<string name="app_name">MPD</string>
|
||||
<string name="notification_title_mpd_running">Music Player Daemon is running</string>
|
||||
<string name="notification_text_mpd_running">Touch for MPD options.</string>
|
||||
<string name="toggle_button_run_on">MPD is running</string>
|
||||
<string name="toggle_button_run_off">MPD is not running</string>
|
||||
<string name="checkbox_run_on_boot">Run MPD automatically on boot</string>
|
||||
<string name="checkbox_wakelock">Prevent suspend when MPD is running (Wakelock)</string>
|
||||
</resources>
|
||||
12
android/run-aidl.sh
Executable file
12
android/run-aidl.sh
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
AIDL=$1
|
||||
SRC=$2
|
||||
DST=$3
|
||||
GENSRC=$4
|
||||
JAVA_PKG_PATH=$5
|
||||
|
||||
mkdir -p "$GENSRC/$JAVA_PKG_PATH"
|
||||
cp "$SRC" "$GENSRC/$JAVA_PKG_PATH/"
|
||||
"$AIDL" -I"$GENSRC" -o"$GENSRC" "$GENSRC/$JAVA_PKG_PATH/`basename $SRC`"
|
||||
exec cp "$GENSRC/$JAVA_PKG_PATH/`basename $DST`" "$DST"
|
||||
22
android/run-javac.sh
Executable file
22
android/run-javac.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
JAVAC=$1
|
||||
CLASSPATH=$2
|
||||
JAVA_PKG_PATH=$3
|
||||
ZIP=$4
|
||||
JARFILE=`realpath "$5"`
|
||||
shift 5
|
||||
|
||||
D=`dirname "$JARFILE"`
|
||||
GENSRC="$D/src"
|
||||
GENCLASS="$D/classes"
|
||||
GENINCLUDE="$D/include"
|
||||
|
||||
mkdir -p "$GENSRC/$JAVA_PKG_PATH"
|
||||
"$JAVAC" -source 1.6 -target 1.6 -Xlint:-options \
|
||||
-cp "$CLASSPATH" \
|
||||
-h "$GENINCLUDE" \
|
||||
-d "$GENCLASS" \
|
||||
"$@"
|
||||
cd "$GENCLASS"
|
||||
zip -q -r "$JARFILE" .
|
||||
36
android/src/Bridge.java
Normal file
36
android/src/Bridge.java
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
package org.musicpd;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
/**
|
||||
* Bridge to native code.
|
||||
*/
|
||||
public class Bridge {
|
||||
|
||||
/* used by jni */
|
||||
public interface LogListener {
|
||||
public void onLog(int priority, String msg);
|
||||
}
|
||||
|
||||
public static native void run(Context context, LogListener logListener);
|
||||
public static native void shutdown();
|
||||
}
|
||||
12
android/src/IMain.aidl
Normal file
12
android/src/IMain.aidl
Normal file
@@ -0,0 +1,12 @@
|
||||
package org.musicpd;
|
||||
import org.musicpd.IMainCallback;
|
||||
|
||||
interface IMain
|
||||
{
|
||||
void start();
|
||||
void stop();
|
||||
void setWakelockEnabled(boolean enabled);
|
||||
boolean isRunning();
|
||||
void registerCallback(IMainCallback cb);
|
||||
void unregisterCallback(IMainCallback cb);
|
||||
}
|
||||
9
android/src/IMainCallback.aidl
Normal file
9
android/src/IMainCallback.aidl
Normal file
@@ -0,0 +1,9 @@
|
||||
package org.musicpd;
|
||||
|
||||
interface IMainCallback
|
||||
{
|
||||
void onStarted();
|
||||
void onStopped();
|
||||
void onError(String error);
|
||||
void onLog(int priority, String msg);
|
||||
}
|
||||
39
android/src/Loader.java
Normal file
39
android/src/Loader.java
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
package org.musicpd;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
public class Loader {
|
||||
private static final String TAG = "MPD";
|
||||
|
||||
public static boolean loaded = false;
|
||||
public static String error;
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("mpd");
|
||||
loaded = true;
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
error = e.getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
419
android/src/Main.java
Normal file
419
android/src/Main.java
Normal file
@@ -0,0 +1,419 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
package org.musicpd;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteCallbackList;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class Main extends Service implements Runnable {
|
||||
private static final String TAG = "Main";
|
||||
private static final String REMOTE_ERROR = "MPD process was killed";
|
||||
private static final int MAIN_STATUS_ERROR = -1;
|
||||
private static final int MAIN_STATUS_STOPPED = 0;
|
||||
private static final int MAIN_STATUS_STARTED = 1;
|
||||
|
||||
private static final int MSG_SEND_STATUS = 0;
|
||||
private static final int MSG_SEND_LOG = 1;
|
||||
|
||||
private Thread mThread = null;
|
||||
private int mStatus = MAIN_STATUS_STOPPED;
|
||||
private boolean mAbort = false;
|
||||
private String mError = null;
|
||||
private final RemoteCallbackList<IMainCallback> mCallbacks = new RemoteCallbackList<IMainCallback>();
|
||||
private final IBinder mBinder = new MainStub(this);
|
||||
private PowerManager.WakeLock mWakelock = null;
|
||||
|
||||
static class MainStub extends IMain.Stub {
|
||||
private Main mService;
|
||||
MainStub(Main service) {
|
||||
mService = service;
|
||||
}
|
||||
public void start() {
|
||||
mService.start();
|
||||
}
|
||||
public void stop() {
|
||||
mService.stop();
|
||||
}
|
||||
public void setWakelockEnabled(boolean enabled) {
|
||||
mService.setWakelockEnabled(enabled);
|
||||
}
|
||||
public boolean isRunning() {
|
||||
return mService.isRunning();
|
||||
}
|
||||
public void registerCallback(IMainCallback cb) {
|
||||
mService.registerCallback(cb);
|
||||
}
|
||||
public void unregisterCallback(IMainCallback cb) {
|
||||
mService.unregisterCallback(cb);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void sendMessage(int what, int arg1, int arg2, Object obj) {
|
||||
int i = mCallbacks.beginBroadcast();
|
||||
while (i > 0) {
|
||||
i--;
|
||||
final IMainCallback cb = mCallbacks.getBroadcastItem(i);
|
||||
try {
|
||||
switch (what) {
|
||||
case MSG_SEND_STATUS:
|
||||
switch (arg1) {
|
||||
case MAIN_STATUS_ERROR:
|
||||
cb.onError((String)obj);
|
||||
break;
|
||||
case MAIN_STATUS_STOPPED:
|
||||
cb.onStopped();
|
||||
break;
|
||||
case MAIN_STATUS_STARTED:
|
||||
cb.onStarted();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MSG_SEND_LOG:
|
||||
cb.onLog(arg1, (String) obj);
|
||||
break;
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
mCallbacks.finishBroadcast();
|
||||
}
|
||||
|
||||
private Bridge.LogListener mLogListener = new Bridge.LogListener() {
|
||||
@Override
|
||||
public void onLog(int priority, String msg) {
|
||||
sendMessage(MSG_SEND_LOG, priority, 0, msg);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return mBinder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
start();
|
||||
if (intent != null && intent.getBooleanExtra("wakelock", false))
|
||||
setWakelockEnabled(true);
|
||||
return START_STICKY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!Loader.loaded) {
|
||||
final String error = "Failed to load the native MPD libary.\n" +
|
||||
"Report this problem to us, and include the following information:\n" +
|
||||
"SUPPORTED_ABIS=" + String.join(", ", Build.SUPPORTED_ABIS) + "\n" +
|
||||
"PRODUCT=" + Build.PRODUCT + "\n" +
|
||||
"FINGERPRINT=" + Build.FINGERPRINT + "\n" +
|
||||
"error=" + Loader.error;
|
||||
setStatus(MAIN_STATUS_ERROR, error);
|
||||
stopSelf();
|
||||
return;
|
||||
}
|
||||
synchronized (this) {
|
||||
if (mAbort)
|
||||
return;
|
||||
setStatus(MAIN_STATUS_STARTED, null);
|
||||
}
|
||||
Bridge.run(this, mLogListener);
|
||||
setStatus(MAIN_STATUS_STOPPED, null);
|
||||
}
|
||||
|
||||
private synchronized void setStatus(int status, String error) {
|
||||
mStatus = status;
|
||||
mError = error;
|
||||
sendMessage(MSG_SEND_STATUS, mStatus, 0, mError);
|
||||
}
|
||||
|
||||
private Notification.Builder createNotificationBuilderWithChannel() {
|
||||
final NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
if (notificationManager == null)
|
||||
return null;
|
||||
|
||||
final String id = "org.musicpd";
|
||||
final String name = "MPD service";
|
||||
final int importance = 3; /* NotificationManager.IMPORTANCE_DEFAULT */
|
||||
|
||||
try {
|
||||
Class<?> ncClass = Class.forName("android.app.NotificationChannel");
|
||||
Constructor<?> ncCtor = ncClass.getConstructor(String.class, CharSequence.class, int.class);
|
||||
Object nc = ncCtor.newInstance(id, name, importance);
|
||||
|
||||
Method nmCreateNotificationChannelMethod =
|
||||
NotificationManager.class.getMethod("createNotificationChannel", ncClass);
|
||||
nmCreateNotificationChannelMethod.invoke(notificationManager, nc);
|
||||
|
||||
Constructor nbCtor = Notification.Builder.class.getConstructor(Context.class, String.class);
|
||||
return (Notification.Builder) nbCtor.newInstance(this, id);
|
||||
} catch (Exception e)
|
||||
{
|
||||
Log.e(TAG, "error creating the NotificationChannel", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void start() {
|
||||
if (mThread != null)
|
||||
return;
|
||||
|
||||
final Intent mainIntent = new Intent(this, Settings.class);
|
||||
mainIntent.setAction("android.intent.action.MAIN");
|
||||
mainIntent.addCategory("android.intent.category.LAUNCHER");
|
||||
final PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
|
||||
mainIntent, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
|
||||
Notification.Builder nBuilder;
|
||||
if (Build.VERSION.SDK_INT >= 26 /* Build.VERSION_CODES.O */)
|
||||
{
|
||||
nBuilder = createNotificationBuilderWithChannel();
|
||||
if (nBuilder == null)
|
||||
return;
|
||||
}
|
||||
else
|
||||
nBuilder = new Notification.Builder(this);
|
||||
|
||||
Notification notification = nBuilder.setContentTitle(getText(R.string.notification_title_mpd_running))
|
||||
.setContentText(getText(R.string.notification_text_mpd_running))
|
||||
.setSmallIcon(R.drawable.notification_icon)
|
||||
.setContentIntent(contentIntent)
|
||||
.build();
|
||||
|
||||
mThread = new Thread(this);
|
||||
mThread.start();
|
||||
|
||||
startForeground(R.string.notification_title_mpd_running, notification);
|
||||
startService(new Intent(this, Main.class));
|
||||
}
|
||||
|
||||
private void stop() {
|
||||
if (mThread != null) {
|
||||
if (mThread.isAlive()) {
|
||||
synchronized (this) {
|
||||
if (mStatus == MAIN_STATUS_STARTED)
|
||||
Bridge.shutdown();
|
||||
else
|
||||
mAbort = true;
|
||||
}
|
||||
}
|
||||
try {
|
||||
mThread.join();
|
||||
mThread = null;
|
||||
mAbort = false;
|
||||
} catch (InterruptedException ie) {}
|
||||
}
|
||||
setWakelockEnabled(false);
|
||||
stopForeground(true);
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
private void setWakelockEnabled(boolean enabled) {
|
||||
if (enabled && mWakelock == null) {
|
||||
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
|
||||
mWakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
|
||||
mWakelock.acquire();
|
||||
Log.d(TAG, "Wakelock acquired");
|
||||
} else if (!enabled && mWakelock != null) {
|
||||
mWakelock.release();
|
||||
mWakelock = null;
|
||||
Log.d(TAG, "Wakelock released");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isRunning() {
|
||||
return mThread != null && mThread.isAlive();
|
||||
}
|
||||
|
||||
private void registerCallback(IMainCallback cb) {
|
||||
if (cb != null) {
|
||||
mCallbacks.register(cb);
|
||||
sendMessage(MSG_SEND_STATUS, mStatus, 0, mError);
|
||||
}
|
||||
}
|
||||
|
||||
private void unregisterCallback(IMainCallback cb) {
|
||||
if (cb != null) {
|
||||
mCallbacks.unregister(cb);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Client that bind the Main Service in order to send commands and receive callback
|
||||
*/
|
||||
public static class Client {
|
||||
|
||||
public interface Callback {
|
||||
public void onStarted();
|
||||
public void onStopped();
|
||||
public void onError(String error);
|
||||
public void onLog(int priority, String msg);
|
||||
}
|
||||
|
||||
private boolean mBound = false;
|
||||
private final Context mContext;
|
||||
private Callback mCallback;
|
||||
private IMain mIMain = null;
|
||||
|
||||
private final IMainCallback.Stub mICallback = new IMainCallback.Stub() {
|
||||
|
||||
@Override
|
||||
public void onStopped() throws RemoteException {
|
||||
mCallback.onStopped();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStarted() throws RemoteException {
|
||||
mCallback.onStarted();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String error) throws RemoteException {
|
||||
mCallback.onError(error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLog(int priority, String msg) throws RemoteException {
|
||||
mCallback.onLog(priority, msg);
|
||||
}
|
||||
};
|
||||
|
||||
private final ServiceConnection mServiceConnection = new ServiceConnection() {
|
||||
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||
synchronized (this) {
|
||||
mIMain = IMain.Stub.asInterface(service);
|
||||
try {
|
||||
if (mCallback != null)
|
||||
mIMain.registerCallback(mICallback);
|
||||
} catch (RemoteException e) {
|
||||
if (mCallback != null)
|
||||
mCallback.onError(REMOTE_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected(ComponentName name) {
|
||||
if (mCallback != null)
|
||||
mCallback.onError(REMOTE_ERROR);
|
||||
}
|
||||
};
|
||||
|
||||
public Client(Context context, Callback cb) throws IllegalArgumentException {
|
||||
if (context == null)
|
||||
throw new IllegalArgumentException("Context can't be null");
|
||||
mContext = context;
|
||||
mCallback = cb;
|
||||
mBound = mContext.bindService(new Intent(mContext, Main.class), mServiceConnection, Context.BIND_AUTO_CREATE);
|
||||
}
|
||||
|
||||
public boolean start() {
|
||||
synchronized (this) {
|
||||
if (mIMain != null) {
|
||||
try {
|
||||
mIMain.start();
|
||||
return true;
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean stop() {
|
||||
synchronized (this) {
|
||||
if (mIMain != null) {
|
||||
try {
|
||||
mIMain.stop();
|
||||
return true;
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean setWakelockEnabled(boolean enabled) {
|
||||
synchronized (this) {
|
||||
if (mIMain != null) {
|
||||
try {
|
||||
mIMain.setWakelockEnabled(enabled);
|
||||
return true;
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
synchronized (this) {
|
||||
if (mIMain != null) {
|
||||
try {
|
||||
return mIMain.isRunning();
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void release() {
|
||||
if (mBound) {
|
||||
synchronized (this) {
|
||||
if (mIMain != null && mICallback != null) {
|
||||
try {
|
||||
if (mCallback != null)
|
||||
mIMain.unregisterCallback(mICallback);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
mBound = false;
|
||||
mContext.unbindService(mServiceConnection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* start Main service without any callback
|
||||
*/
|
||||
public static void start(Context context, boolean wakelock) {
|
||||
context.startService(new Intent(context, Main.class).putExtra("wakelock", wakelock));
|
||||
}
|
||||
}
|
||||
41
android/src/Receiver.java
Normal file
41
android/src/Receiver.java
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2003-2014 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
package org.musicpd;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
public class Receiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.d("Receiver", "onReceive: " + intent);
|
||||
if (intent.getAction() == "android.intent.action.BOOT_COMPLETED") {
|
||||
if (Settings.Preferences.getBoolean(context,
|
||||
Settings.Preferences.KEY_RUN_ON_BOOT, false)) {
|
||||
final boolean wakelock = Settings.Preferences.getBoolean(context,
|
||||
Settings.Preferences.KEY_WAKELOCK, false);
|
||||
Main.start(context, wakelock);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
290
android/src/Settings.java
Normal file
290
android/src/Settings.java
Normal file
@@ -0,0 +1,290 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
package org.musicpd;
|
||||
|
||||
import java.util.LinkedList;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.util.Log;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.ToggleButton;
|
||||
|
||||
public class Settings extends Activity {
|
||||
private static final String TAG = "Settings";
|
||||
private Main.Client mClient;
|
||||
private TextView mTextStatus;
|
||||
private ToggleButton mRunButton;
|
||||
private boolean mFirstRun;
|
||||
private LinkedList<String> mLogListArray = new LinkedList<String>();
|
||||
private ListView mLogListView;
|
||||
private ArrayAdapter<String> mLogListAdapter;
|
||||
|
||||
private static final int MAX_LOGS = 500;
|
||||
|
||||
private static final int MSG_ERROR = 0;
|
||||
private static final int MSG_STOPPED = 1;
|
||||
private static final int MSG_STARTED = 2;
|
||||
private static final int MSG_LOG = 3;
|
||||
|
||||
public static class Preferences {
|
||||
public static final String KEY_RUN_ON_BOOT ="run_on_boot";
|
||||
public static final String KEY_WAKELOCK ="wakelock";
|
||||
|
||||
public static SharedPreferences get(Context context) {
|
||||
return context.getSharedPreferences(TAG, MODE_PRIVATE);
|
||||
}
|
||||
|
||||
public static void putBoolean(Context context, String key, boolean value) {
|
||||
final SharedPreferences prefs = get(context);
|
||||
|
||||
if (prefs == null)
|
||||
return;
|
||||
final Editor editor = prefs.edit();
|
||||
editor.putBoolean(key, value);
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public static boolean getBoolean(Context context, String key, boolean defValue) {
|
||||
final SharedPreferences prefs = get(context);
|
||||
|
||||
return prefs != null ? prefs.getBoolean(key, defValue) : defValue;
|
||||
}
|
||||
}
|
||||
|
||||
private Handler mHandler = new Handler(new Handler.Callback() {
|
||||
@Override
|
||||
public boolean handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case MSG_ERROR:
|
||||
Log.d(TAG, "onError");
|
||||
|
||||
mClient.release();
|
||||
connectClient();
|
||||
|
||||
mRunButton.setEnabled(false);
|
||||
mRunButton.setChecked(false);
|
||||
|
||||
mTextStatus.setText((String)msg.obj);
|
||||
mFirstRun = true;
|
||||
break;
|
||||
case MSG_STOPPED:
|
||||
Log.d(TAG, "onStopped");
|
||||
mRunButton.setEnabled(true);
|
||||
if (!mFirstRun && Preferences.getBoolean(Settings.this, Preferences.KEY_RUN_ON_BOOT, false))
|
||||
mRunButton.setChecked(true);
|
||||
else
|
||||
mRunButton.setChecked(false);
|
||||
mFirstRun = true;
|
||||
mTextStatus.setText("");
|
||||
break;
|
||||
case MSG_STARTED:
|
||||
Log.d(TAG, "onStarted");
|
||||
mRunButton.setChecked(true);
|
||||
mFirstRun = true;
|
||||
mTextStatus.setText("MPD service started");
|
||||
break;
|
||||
case MSG_LOG:
|
||||
if (mLogListArray.size() > MAX_LOGS)
|
||||
mLogListArray.remove(0);
|
||||
String priority;
|
||||
switch (msg.arg1) {
|
||||
case Log.DEBUG:
|
||||
priority = "D";
|
||||
break;
|
||||
case Log.ERROR:
|
||||
priority = "E";
|
||||
break;
|
||||
case Log.INFO:
|
||||
priority = "I";
|
||||
break;
|
||||
case Log.VERBOSE:
|
||||
priority = "V";
|
||||
break;
|
||||
case Log.WARN:
|
||||
priority = "W";
|
||||
break;
|
||||
default:
|
||||
priority = "";
|
||||
}
|
||||
mLogListArray.add(priority + "/ " + (String)msg.obj);
|
||||
mLogListAdapter.notifyDataSetChanged();
|
||||
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
private final OnCheckedChangeListener mOnRunChangeListener = new OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
if (mClient != null) {
|
||||
if (isChecked) {
|
||||
mClient.start();
|
||||
if (Preferences.getBoolean(Settings.this,
|
||||
Preferences.KEY_WAKELOCK, false))
|
||||
mClient.setWakelockEnabled(true);
|
||||
} else {
|
||||
mClient.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final OnCheckedChangeListener mOnRunOnBootChangeListener = new OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
Preferences.putBoolean(Settings.this, Preferences.KEY_RUN_ON_BOOT, isChecked);
|
||||
if (isChecked && mClient != null && !mRunButton.isChecked())
|
||||
mRunButton.setChecked(true);
|
||||
}
|
||||
};
|
||||
|
||||
private final OnCheckedChangeListener mOnWakelockChangeListener = new OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
Preferences.putBoolean(Settings.this, Preferences.KEY_WAKELOCK, isChecked);
|
||||
if (mClient != null && mClient.isRunning())
|
||||
mClient.setWakelockEnabled(isChecked);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
/* TODO: this sure is the wrong place to request
|
||||
permissions - it will cause MPD to quit
|
||||
immediately; we should request permissions when we
|
||||
need them, but implementing that is complicated, so
|
||||
for now, we do it here to give users a quick
|
||||
solution for the problem */
|
||||
requestAllPermissions();
|
||||
|
||||
setContentView(R.layout.settings);
|
||||
mRunButton = (ToggleButton) findViewById(R.id.run);
|
||||
mRunButton.setOnCheckedChangeListener(mOnRunChangeListener);
|
||||
|
||||
mTextStatus = (TextView) findViewById(R.id.status);
|
||||
|
||||
mLogListAdapter = new ArrayAdapter<String>(this, R.layout.log_item, mLogListArray);
|
||||
|
||||
mLogListView = (ListView) findViewById(R.id.log_list);
|
||||
mLogListView.setAdapter(mLogListAdapter);
|
||||
mLogListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
|
||||
|
||||
CheckBox checkbox = (CheckBox) findViewById(R.id.run_on_boot);
|
||||
checkbox.setOnCheckedChangeListener(mOnRunOnBootChangeListener);
|
||||
if (Preferences.getBoolean(this, Preferences.KEY_RUN_ON_BOOT, false))
|
||||
checkbox.setChecked(true);
|
||||
|
||||
checkbox = (CheckBox) findViewById(R.id.wakelock);
|
||||
checkbox.setOnCheckedChangeListener(mOnWakelockChangeListener);
|
||||
if (Preferences.getBoolean(this, Preferences.KEY_WAKELOCK, false))
|
||||
checkbox.setChecked(true);
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
private void checkRequestPermission(String permission) {
|
||||
if (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED)
|
||||
return;
|
||||
|
||||
try {
|
||||
this.requestPermissions(new String[]{permission}, 0);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "requestPermissions(" + permission + ") failed",
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
||||
private void requestAllPermissions() {
|
||||
if (android.os.Build.VERSION.SDK_INT < 23)
|
||||
/* we don't need to request permissions on
|
||||
this old Android version */
|
||||
return;
|
||||
|
||||
/* starting with Android 6.0, we need to explicitly
|
||||
request all permissions before using them;
|
||||
mentioning them in the manifest is not enough */
|
||||
|
||||
checkRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
}
|
||||
|
||||
private void connectClient() {
|
||||
mClient = new Main.Client(this, new Main.Client.Callback() {
|
||||
|
||||
private void removeMessages() {
|
||||
/* don't remove log messages */
|
||||
mHandler.removeMessages(MSG_STOPPED);
|
||||
mHandler.removeMessages(MSG_STARTED);
|
||||
mHandler.removeMessages(MSG_ERROR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopped() {
|
||||
removeMessages();
|
||||
mHandler.sendEmptyMessage(MSG_STOPPED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStarted() {
|
||||
removeMessages();
|
||||
mHandler.sendEmptyMessage(MSG_STARTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String error) {
|
||||
removeMessages();
|
||||
mHandler.sendMessage(Message.obtain(mHandler, MSG_ERROR, error));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLog(int priority, String msg) {
|
||||
mHandler.sendMessage(Message.obtain(mHandler, MSG_LOG, priority, 0, msg));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
mFirstRun = false;
|
||||
connectClient();
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
mClient.release();
|
||||
mClient = null;
|
||||
super.onStop();
|
||||
}
|
||||
}
|
||||
137
autogen.sh
137
autogen.sh
@@ -1,137 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Run this to set up the build system: configure, makefiles, etc.
|
||||
# (at one point this was based on the version in enlightenment's cvs)
|
||||
|
||||
package="mpd"
|
||||
|
||||
olddir="`pwd`"
|
||||
srcdir="`dirname $0`"
|
||||
test -z "$srcdir" && srcdir=.
|
||||
cd "$srcdir"
|
||||
DIE=
|
||||
AM_VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9]\.[0-9][0-9]*\).*/\1/"
|
||||
AC_VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9]\.[0-9][0-9]\).*/\1/"
|
||||
VERSIONMKINT="sed -e s/[^0-9]//"
|
||||
if test -n "$AM_FORCE_VERSION"
|
||||
then
|
||||
AM_VERSIONS="$AM_FORCE_VERSION"
|
||||
else
|
||||
AM_VERSIONS='1.11 1.10'
|
||||
fi
|
||||
if test -n "$AC_FORCE_VERSION"
|
||||
then
|
||||
AC_VERSIONS="$AC_FORCE_VERSION"
|
||||
else
|
||||
AC_VERSIONS='2.60 2.61'
|
||||
fi
|
||||
|
||||
versioned_bins ()
|
||||
{
|
||||
bin="$1"
|
||||
needed_int=`echo $VERNEEDED | $VERSIONMKINT`
|
||||
for i in $VERSIONS
|
||||
do
|
||||
i_int=`echo $i | $VERSIONMKINT`
|
||||
if test $i_int -ge $needed_int
|
||||
then
|
||||
echo $bin-$i $bin$i $bin-$i_int $bin$i_int
|
||||
fi
|
||||
done
|
||||
echo $bin
|
||||
}
|
||||
|
||||
for c in autoconf autoheader automake aclocal
|
||||
do
|
||||
uc=`echo $c | tr '[:lower:]' '[:upper:]'`
|
||||
eval "val=`echo '$'$uc`"
|
||||
if test -n "$val"
|
||||
then
|
||||
echo "$uc=$val in environment, will not attempt to auto-detect"
|
||||
continue
|
||||
fi
|
||||
|
||||
case "$c" in
|
||||
autoconf|autoheader)
|
||||
VERNEEDED=`fgrep AC_PREREQ configure.ac | $AC_VERSIONGREP`
|
||||
VERSIONS="$AC_VERSIONS"
|
||||
pkg=autoconf
|
||||
;;
|
||||
automake|aclocal)
|
||||
VERNEEDED=`fgrep AUTOMAKE_OPTIONS Makefile.am | $AM_VERSIONGREP`
|
||||
VERSIONS="$AM_VERSIONS"
|
||||
pkg=automake
|
||||
;;
|
||||
esac
|
||||
printf "checking for $c ... "
|
||||
for x in `versioned_bins $c`; do
|
||||
($x --version < /dev/null > /dev/null 2>&1) > /dev/null 2>&1
|
||||
if test $? -eq 0
|
||||
then
|
||||
echo $x
|
||||
eval $uc=$x
|
||||
break
|
||||
fi
|
||||
done
|
||||
eval "val=`echo '$'$uc`"
|
||||
if test -z "$val"
|
||||
then
|
||||
if test $c = $pkg
|
||||
then
|
||||
DIE="$DIE $c=$VERNEEDED"
|
||||
else
|
||||
DIE="$DIE $c($pkg)=$VERNEEDED"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if test -n "$DIE"
|
||||
then
|
||||
echo "You must have the following installed to compile $package:"
|
||||
for i in $DIE
|
||||
do
|
||||
printf ' '
|
||||
echo $i | sed -e 's/(/ (from /' -e 's/=\(.*\)/ (>= \1)/'
|
||||
done
|
||||
echo "Download the appropriate package(s) for your system,"
|
||||
echo "or get the source from one of the GNU ftp sites"
|
||||
echo "listed in http://www.gnu.org/order/ftp.html"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Generating configuration files for $package, please wait...."
|
||||
|
||||
ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4"
|
||||
|
||||
# /usr/share/aclocal is most likely included by default, already...
|
||||
ac_local_paths='
|
||||
/usr/local/share/aclocal
|
||||
/sw/share/aclocal
|
||||
/usr/pkg/share/aclocal
|
||||
/opt/share/aclocal
|
||||
/usr/gnu/share/aclocal
|
||||
'
|
||||
|
||||
for i in $ac_local_paths; do
|
||||
if test -d "$i"; then
|
||||
ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $i"
|
||||
# we probably only want one of these...
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo " $ACLOCAL $ACLOCAL_FLAGS"
|
||||
$ACLOCAL $ACLOCAL_FLAGS || exit 1
|
||||
|
||||
echo " $AUTOHEADER"
|
||||
$AUTOHEADER || exit 1
|
||||
|
||||
echo " $AUTOMAKE --add-missing $AUTOMAKE_FLAGS"
|
||||
$AUTOMAKE --add-missing $AUTOMAKE_FLAGS || exit 1
|
||||
|
||||
echo " $AUTOCONF"
|
||||
$AUTOCONF || exit 1
|
||||
|
||||
cd "$olddir"
|
||||
if test x$NOCONFIGURE = x; then
|
||||
"$srcdir"/configure "$@" || exit 1
|
||||
fi
|
||||
13
build/pkg-config.sh
Executable file
13
build/pkg-config.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
# This is a wrapper for pkg-config which helps with cross-compiling;
|
||||
# it sets up environment variables to pkg-config searches for
|
||||
# libraries in the sysroot where a copy of this script is located.
|
||||
|
||||
BIN=`dirname $0`
|
||||
ROOT=`dirname "$BIN"`
|
||||
|
||||
export PKG_CONFIG_DIR=
|
||||
export PKG_CONFIG_LIBDIR="${ROOT}/lib/pkgconfig:${ROOT}/share/pkgconfig"
|
||||
|
||||
exec /usr/bin/pkg-config "$@"
|
||||
1590
configure.ac
1590
configure.ac
File diff suppressed because it is too large
Load Diff
214
doc/conf.py
Normal file
214
doc/conf.py
Normal file
@@ -0,0 +1,214 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = ['sphinx.ext.intersphinx']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#
|
||||
# source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = 'Music Player Daemon'
|
||||
copyright = '2003-2018 The Music Player Daemon Project'
|
||||
author = 'Max Kellermann'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.21.26'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = version
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#
|
||||
# today = ''
|
||||
#
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#
|
||||
# today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#
|
||||
# default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#
|
||||
# add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#
|
||||
# add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#
|
||||
# show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
# modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
# keep_warnings = False
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = 'classic'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
# html_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents.
|
||||
# "<project> v<release> documentation" by default.
|
||||
#
|
||||
# html_title = ''
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#
|
||||
# html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#
|
||||
# html_logo = None
|
||||
|
||||
# The name of an image file (relative to this directory) to use as a favicon of
|
||||
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#
|
||||
# html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#
|
||||
# html_extra_path = []
|
||||
|
||||
# If not None, a 'Last updated on:' timestamp is inserted at every page
|
||||
# bottom, using the given strftime format.
|
||||
# The empty string is equivalent to '%b %d, %Y'.
|
||||
#
|
||||
# html_last_updated_fmt = None
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#
|
||||
# html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#
|
||||
# html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#
|
||||
# html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#
|
||||
# html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#
|
||||
# html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#
|
||||
# html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#
|
||||
# html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#
|
||||
# html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#
|
||||
# html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#
|
||||
# html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
# html_file_suffix = None
|
||||
|
||||
# Language to be used for generating the HTML full-text search index.
|
||||
# Sphinx supports the following languages:
|
||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
|
||||
# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'
|
||||
#
|
||||
# html_search_language = 'en'
|
||||
|
||||
# A dictionary with options for the search language support, empty by default.
|
||||
# 'ja' uses this config value.
|
||||
# 'zh' user can custom change `jieba` dictionary path.
|
||||
#
|
||||
# html_search_options = {'type': 'default'}
|
||||
|
||||
# The name of a javascript file (relative to the configuration directory) that
|
||||
# implements a search results scorer. If empty, the default will be used.
|
||||
#
|
||||
# html_search_scorer = 'scorer.js'
|
||||
99
doc/developer.rst
Normal file
99
doc/developer.rst
Normal file
@@ -0,0 +1,99 @@
|
||||
Developer's Manual
|
||||
##################
|
||||
|
||||
Introduction
|
||||
************
|
||||
|
||||
This is a guide for those who wish to hack on the MPD source code. MPD is an open project, and we are always happy about contributions. So far, more than 150 people have contributed patches. This document is work in progress. Most of it may be incomplete yet. Please help!
|
||||
|
||||
Code Style
|
||||
**********
|
||||
|
||||
* indent with tabs (width 8)
|
||||
* don't write CPP when you can write C++: use inline functions and constexpr instead of macros
|
||||
* comment your code, document your APIs
|
||||
* the code should be C++14 compliant, and must compile with :program:`GCC` 6.0 and :program:`clang` 3.4
|
||||
* report error conditions with C++ exceptions, preferable derived from :envvar:`std::runtime_error`
|
||||
* all code must be exception-safe
|
||||
* classes and functions names use CamelCase; variables are lower-case with words separated by underscore
|
||||
|
||||
Some example code:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
Foo(const char *abc, int xyz)
|
||||
{
|
||||
if (abc == nullptr) {
|
||||
LogWarning("Foo happened!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return xyz;
|
||||
}
|
||||
|
||||
Hacking The Source
|
||||
******************
|
||||
|
||||
MPD sources are managed in a git repository on
|
||||
`Github <https://github.com/MusicPlayerDaemon/>`_.
|
||||
|
||||
Always write your code against the latest git:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
git clone git://github.com/MusicPlayerDaemon/MPD
|
||||
|
||||
If you already have a clone, update it:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
git pull --rebase git://github.com/MusicPlayerDaemon/MPD master
|
||||
|
||||
You can do without :code:`--rebase`, but we recommend that you rebase
|
||||
your repository on the "master" repository all the time.
|
||||
|
||||
Configure with the option :code:`--werror`. Enable as many plugins as
|
||||
possible, to be sure that you don't break any disabled code.
|
||||
|
||||
Don't mix several changes in one single patch. Create a separate patch for every change. Tools like :program:`stgit` help you with that. This way, we can review your patches more easily, and we can pick the patches we like most first.
|
||||
|
||||
Basic stgit usage
|
||||
=================
|
||||
|
||||
stgit allows you to create a set of patches and refine all of them: you can go back to any patch at any time, and re-edit it (both the code and the commit message). You can reorder patches and insert new patches at any position. It encourages creating separate patches for tiny changes.
|
||||
|
||||
stgit needs to be initialized on a git repository:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
stg init
|
||||
|
||||
Before you edit the code, create a patch:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
stg new my-patch-name
|
||||
|
||||
stgit now asks you for the commit message.
|
||||
|
||||
Now edit the code. Once you're finished, you have to "refresh" the patch, i.e. your edits are incorporated into the patch you have created:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
stg refresh
|
||||
|
||||
You may now continue editing the same patch, and refresh it as often as you like. Create more patches, edit and refresh them.
|
||||
|
||||
To view the list of patches, type stg series. To go back to a specific patch, type stg goto my-patch-name; now you can re-edit it (don't forget stg refresh when you're finished with that patch).
|
||||
|
||||
When the whole patch series is finished, convert stgit patches to git commits:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
stg commit
|
||||
|
||||
Submitting Patches
|
||||
******************
|
||||
|
||||
Submit pull requests on GitHub:
|
||||
https://github.com/MusicPlayerDaemon/MPD/pulls
|
||||
@@ -1,105 +0,0 @@
|
||||
<?xml version='1.0' encoding="utf-8"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||
"docbook/dtd/xml/4.2/docbookx.dtd">
|
||||
<book>
|
||||
<title>The Music Player Daemon - Developer's Manual</title>
|
||||
|
||||
<chapter>
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>
|
||||
This is a guide for those who wish to hack on the MPD source
|
||||
code. MPD is an open project, and we are always happy about
|
||||
contributions. So far, more than 50 people have contributed
|
||||
patches.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This document is work in progress. Most of it may be incomplete
|
||||
yet. Please help!
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
<chapter>
|
||||
<title>Code Style</title>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
indent with tabs (width 8)
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
don't write CPP when you can write C: use inline functions
|
||||
and enums instead of macros
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
the code should be C99 compliant, and must compile with
|
||||
<application>GCC</application>;
|
||||
<application>clang</application> support is highly desirable
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
C++ is ok (for integrating C++ only libraries), but it
|
||||
should be avoided
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Some example code:
|
||||
</para>
|
||||
|
||||
<programlisting lang="C">static inline bool
|
||||
foo(const char *abc, int xyz)
|
||||
{
|
||||
if (abc == NULL) {
|
||||
g_warning("Foo happened!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return xyz;
|
||||
}
|
||||
</programlisting>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</chapter>
|
||||
|
||||
<chapter>
|
||||
<title>Hacking The Source</title>
|
||||
|
||||
<para>
|
||||
Always write your code against the latest git:
|
||||
</para>
|
||||
|
||||
<programlisting>git clone git://git.musicpd.org/master/mpd.git</programlisting>
|
||||
|
||||
<para>
|
||||
Configure with the options <option>--enable-debug
|
||||
--enable-werror</option>. Enable as many plugins as possible,
|
||||
to be sure that you don't break any disabled code.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Don't mix several changes in one single patch. Create a
|
||||
separate patch for every change. Tools like
|
||||
<application>stgit</application> help you with that.
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
<chapter>
|
||||
<title>Submitting Patches</title>
|
||||
|
||||
<para>
|
||||
Send your patches to the mailing list:
|
||||
musicpd-dev-team@lists.sourceforge.net
|
||||
</para>
|
||||
</chapter>
|
||||
</book>
|
||||
1417
doc/doxygen.conf
1417
doc/doxygen.conf
File diff suppressed because it is too large
Load Diff
2430
doc/doxygen.conf.in
Normal file
2430
doc/doxygen.conf.in
Normal file
File diff suppressed because it is too large
Load Diff
18
doc/index.rst
Normal file
18
doc/index.rst
Normal file
@@ -0,0 +1,18 @@
|
||||
Music Player Daemon
|
||||
===================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Contents:
|
||||
|
||||
user
|
||||
plugins
|
||||
developer
|
||||
protocol
|
||||
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`search`
|
||||
33
doc/meson.build
Normal file
33
doc/meson.build
Normal file
@@ -0,0 +1,33 @@
|
||||
install_man(['mpd.1', 'mpd.conf.5'])
|
||||
|
||||
sphinx = find_program('sphinx-build')
|
||||
sphinx_output = custom_target(
|
||||
'HTML documentation',
|
||||
output: 'html',
|
||||
input: [
|
||||
'index.rst', 'user.rst', 'developer.rst',
|
||||
'plugins.rst',
|
||||
'protocol.rst',
|
||||
'conf.py',
|
||||
],
|
||||
command: [sphinx, '-q', '-b', 'html', '-d', '@OUTDIR@/doctrees', meson.current_source_dir(), '@OUTPUT@'],
|
||||
build_by_default: true,
|
||||
install: true,
|
||||
install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()),
|
||||
)
|
||||
|
||||
custom_target(
|
||||
'upload',
|
||||
input: sphinx_output,
|
||||
output: 'upload',
|
||||
build_always_stale: true,
|
||||
command: [
|
||||
'rsync', '-vpruz', '--delete', meson.current_build_dir() + '/',
|
||||
'www.musicpd.org:/var/www/mpd/doc/',
|
||||
'--chmod=Dug+rwx,Do+rx,Fug+rw,Fo+r',
|
||||
'--include=html', '--include=html/**',
|
||||
'--exclude=*',
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
20
doc/mpd.1
20
doc/mpd.1
@@ -12,29 +12,29 @@ stores info about all available music, and this info can be easily searched and
|
||||
retrieved. Player control, info retrieval, and playlist management can all be
|
||||
managed remotely.
|
||||
|
||||
MPD searches for a config file in \fB~/.mpdconf\fP then \fB/etc/mpd.conf\fP or
|
||||
uses CONF_FILE.
|
||||
MPD searches for a config file in \fB$XDG_CONFIG_HOME/mpd/mpd.conf\fP then
|
||||
\fB~/.mpdconf\fP then \fB/etc/mpd.conf\fP or uses CONF_FILE.
|
||||
|
||||
Read more about MPD at <\fBhttp://www.musicpd.org/\fP>.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BI --help
|
||||
.BI \-\-help
|
||||
Output a brief help message.
|
||||
.TP
|
||||
.BI --kill
|
||||
.BI \-\-kill
|
||||
Kill the currently running mpd session. The pid_file parameter must be
|
||||
specified in the config file for this to work.
|
||||
.TP
|
||||
.BI --no-daemon
|
||||
.BI \-\-no\-daemon
|
||||
Don't detach from console.
|
||||
.TP
|
||||
.BI --stderr
|
||||
.BI \-\-stderr
|
||||
Print messages stderr.
|
||||
.TP
|
||||
.BI --verbose
|
||||
.BI \-\-verbose
|
||||
Verbose logging.
|
||||
.TP
|
||||
.BI --version
|
||||
.BI \-\-version
|
||||
Print version information.
|
||||
.SH FILES
|
||||
.TP
|
||||
@@ -48,8 +48,8 @@ mpd.conf(5), mpc(1)
|
||||
.SH BUGS
|
||||
If you find a bug, please report it at
|
||||
.br
|
||||
<\fBhttp://www.musicpd.org/mantis/bug_report_page.php\fP>.
|
||||
<\fBhttps://github.com/MusicPlayerDaemon/MPD/issues/\fP>.
|
||||
.SH AUTHORS
|
||||
Warren Dukes <warren.dukes@gmail.com>
|
||||
Max Kellermann <max.kellermann@gmail.com>
|
||||
|
||||
Special thanks to all the people that provided feedback and patches.
|
||||
|
||||
359
doc/mpd.conf.5
359
doc/mpd.conf.5
@@ -3,8 +3,9 @@
|
||||
mpd.conf \- Music Player Daemon configuration file
|
||||
.SH DESCRIPTION
|
||||
\fBmpd.conf\fP is the configuration file for mpd(1). If not specified on the
|
||||
command line, MPD first searches for it at \fB~/.mpdconf\fP then at
|
||||
\fB~/.mpd/mpd.conf\fP and then in \fB/etc/mpd.conf\fP.
|
||||
command line, MPD first searches for it at \fB$XDG_CONFIG_HOME/mpd/mpd.conf\fP
|
||||
then at \fB~/.mpdconf\fP then at \fB~/.mpd/mpd.conf\fP and then in
|
||||
\fB/etc/mpd.conf\fP.
|
||||
|
||||
Lines beginning with a "#" character are comments. All other non-empty lines
|
||||
specify parameters and their values. These lines contain the parameter name
|
||||
@@ -27,31 +28,24 @@ paths.
|
||||
|
||||
See \fBdocs/mpdconf.example\fP in the source tarball for an example
|
||||
configuration file.
|
||||
|
||||
This manual is not complete, it lists only the most important options.
|
||||
Please read the MPD user manual for a complete configuration guide:
|
||||
<\fBhttp://www.musicpd.org/doc/user/\fP>
|
||||
.SH REQUIRED PARAMETERS
|
||||
.TP
|
||||
.B follow_outside_symlinks <yes or no>
|
||||
Control if MPD will follow symbolic links pointing outside the music dir.
|
||||
You must recreate the database after changing this option.
|
||||
The default is "yes".
|
||||
.TP
|
||||
.B follow_inside_symlinks <yes or no>
|
||||
Control if MPD will follow symbolic links pointing inside the music dir,
|
||||
potentially adding duplicates to the database.
|
||||
You must recreate the database after changing this option.
|
||||
The default is "yes".
|
||||
.TP
|
||||
.B db_file <file>
|
||||
This specifies where the db file will be stored.
|
||||
.TP
|
||||
.B sticker_file <file>
|
||||
The location of the sticker database. This is a database which
|
||||
manages dynamic information attached to songs.
|
||||
.TP
|
||||
.B log_file <file>
|
||||
This specifies where the log file should be located.
|
||||
The special value "syslog" makes MPD use the local syslog daemon.
|
||||
.SH OPTIONAL PARAMETERS
|
||||
.TP
|
||||
.B sticker_file <file>
|
||||
The location of the sticker database. This is a database which
|
||||
manages dynamic information attached to songs.
|
||||
.TP
|
||||
.B pid_file <file>
|
||||
This specifies the file to save mpd's process ID in.
|
||||
.TP
|
||||
@@ -69,20 +63,15 @@ mpd will be saved to this file when mpd is terminated by a TERM signal or by
|
||||
the "kill" command. When mpd is restarted, it will read the state file and
|
||||
restore the state of mpd (including the playlist).
|
||||
.TP
|
||||
.B restore_paused <yes or no>
|
||||
Put MPD into pause mode instead of starting playback after startup.
|
||||
.TP
|
||||
.B user <username>
|
||||
This specifies the user that MPD will run as, if set. MPD should
|
||||
never run as root, and you may use this option to make MPD change its
|
||||
user id after initialization. Do not use this option if you start MPD
|
||||
as an unprivileged user.
|
||||
.TP
|
||||
.B bind_to_address <ip address or hostname or any>
|
||||
This specifies which address mpd binds to and listens on. Multiple
|
||||
bind_to_address parameters may be specified. The default is "any", which binds
|
||||
to all available addresses.
|
||||
|
||||
To bind to a Unix domain socket, specify an absolute path. For a
|
||||
system-wide MPD, we suggest the path "\fB/var/run/mpd/socket\fP".
|
||||
.TP
|
||||
.B port <port>
|
||||
This specifies the port that mpd listens on. The default is 6600.
|
||||
.TP
|
||||
@@ -92,6 +81,17 @@ reports from what address a connection is opened, and when it is closed, and
|
||||
"verbose" records excessive amounts of information for debugging purposes. The
|
||||
default is "default".
|
||||
.TP
|
||||
.B follow_outside_symlinks <yes or no>
|
||||
Control if MPD will follow symbolic links pointing outside the music dir.
|
||||
You must recreate the database after changing this option.
|
||||
The default is "yes".
|
||||
.TP
|
||||
.B follow_inside_symlinks <yes or no>
|
||||
Control if MPD will follow symbolic links pointing inside the music dir,
|
||||
potentially adding duplicates to the database.
|
||||
You must recreate the database after changing this option.
|
||||
The default is "yes".
|
||||
.TP
|
||||
.B zeroconf_enabled <yes or no>
|
||||
If yes, and MPD has been compiled with support for Avahi or Bonjour, service
|
||||
information will be published with Zeroconf. The default is yes.
|
||||
@@ -99,23 +99,8 @@ information will be published with Zeroconf. The default is yes.
|
||||
.B zeroconf_name <name>
|
||||
If Zeroconf is enabled, this is the service name to publish. This name should
|
||||
be unique to your local network, but name collisions will be properly dealt
|
||||
with. The default is "Music Player".
|
||||
.TP
|
||||
.B password <password@permissions>
|
||||
This specifies a password for access to mpd. The format is
|
||||
"password@permissions" where permissions is a comma delimited list composed
|
||||
of "read", "add", "control", and/or "admin". "read" allows for reading of the
|
||||
database, displaying the current playlist, and current status of mpd. "add"
|
||||
allows for adding songs and loading playlists. "control" allows for all other
|
||||
player and playlist manipulations. "admin" allows the db to be updated and for
|
||||
the client to kill mpd. An example value is "somePassword@read,add". Multiple
|
||||
password parameters may be specified.
|
||||
.TP
|
||||
.B default_permissions <permissions>
|
||||
This specifies the permissions of a client that has not been authenticated
|
||||
using a password. The format of permissions is specified in the description of
|
||||
the "password" config parameter. If no passwords are specified, the default is
|
||||
"read,add,control,admin", otherwise it is "" (no permissions).
|
||||
with. The default is "Music Player @ %h", where %h will be replaced with the
|
||||
hostname of the machine running MPD.
|
||||
.TP
|
||||
.B audio_output
|
||||
See \fBDESCRIPTION\fP and the various \fBAUDIO OUTPUT PARAMETERS\fP sections
|
||||
@@ -123,53 +108,6 @@ for the format of this parameter. Multiple audio_output sections may be
|
||||
specified. If no audio_output section is specified, then MPD will scan for a
|
||||
usable audio output.
|
||||
.TP
|
||||
.B audio_output_format <sample_rate:bits:channels>
|
||||
This specifies the sample rate, bits per sample, and number of channels of
|
||||
audio that is sent to each audio output. Note that audio outputs may specify
|
||||
their own audio format which will be used for actual output to the audio
|
||||
device. An example is "44100:16:2" for 44100Hz, 16 bits, and 2 channels. The
|
||||
default is to use the audio format of the input file.
|
||||
Any of the three attributes may be an asterisk to specify that this
|
||||
attribute should not be enforced
|
||||
.TP
|
||||
.B samplerate_converter <integer or prefix>
|
||||
This specifies the libsamplerate converter to use. The supplied value should
|
||||
either be an integer or a prefix of the name of a converter. The default is
|
||||
"Fastest Sinc Interpolator".
|
||||
|
||||
At the time of this writing, the following converters are available:
|
||||
.RS
|
||||
.TP
|
||||
Best Sinc Interpolator (0)
|
||||
|
||||
Band limited sinc interpolation, best quality, 97dB SNR, 96% BW.
|
||||
.TP
|
||||
Medium Sinc Interpolator (1)
|
||||
|
||||
Band limited sinc interpolation, medium quality, 97dB SNR, 90% BW.
|
||||
.TP
|
||||
Fastest Sinc Interpolator (2)
|
||||
|
||||
Band limited sinc interpolation, fastest, 97dB SNR, 80% BW.
|
||||
.TP
|
||||
ZOH Interpolator (3)
|
||||
|
||||
Zero order hold interpolator, very fast, very poor quality with audible
|
||||
distortions.
|
||||
.TP
|
||||
Linear Interpolator (4)
|
||||
|
||||
Linear interpolator, very fast, poor quality.
|
||||
.TP
|
||||
internal
|
||||
|
||||
Poor quality, no floating point operations. This is the default (and
|
||||
only choice) if MPD was compiled without libsamplerate.
|
||||
.RE
|
||||
.IP
|
||||
For an up-to-date list of available converters, please see the libsamplerate
|
||||
documentation (available online at <\fBhttp://www.mega-nerd.com/SRC/\fP>).
|
||||
.TP
|
||||
.B replaygain <off or album or track or auto>
|
||||
If specified, mpd will adjust the volume of songs played using ReplayGain tags
|
||||
(see <\fBhttp://www.replaygain.org/\fP>). Setting this to "album" will adjust
|
||||
@@ -179,80 +117,23 @@ tags if random play is activated otherwise the album ReplayGain tags. Currently
|
||||
only FLAC, Ogg Vorbis, Musepack, and MP3 (through ID3v2 ReplayGain tags, not
|
||||
APEv2) are supported.
|
||||
.TP
|
||||
.B replaygain_preamp <-15 to 15>
|
||||
.B replaygain_preamp <\-15 to 15>
|
||||
This is the gain (in dB) applied to songs with ReplayGain tags.
|
||||
.TP
|
||||
.B volume_normalization <yes or no>
|
||||
If yes, mpd will normalize the volume of songs as they play. The default is no.
|
||||
.TP
|
||||
.B audio_buffer_size <size in KiB>
|
||||
This specifies the size of the audio buffer in kibibytes. The default is 2048,
|
||||
large enough for nearly 12 seconds of CD-quality audio.
|
||||
.TP
|
||||
.B buffer_before_play <0-100%>
|
||||
This specifies how much of the audio buffer should be filled before playing a
|
||||
song. Try increasing this if you hear skipping when manually changing songs.
|
||||
The default is 10%, a little over 1 second of CD-quality audio with the default
|
||||
buffer size.
|
||||
.TP
|
||||
.B http_proxy_host <hostname>
|
||||
This setting is deprecated. Use the "proxy" setting in the "curl"
|
||||
input block. See MPD user manual for details.
|
||||
.TP
|
||||
.B connection_timeout <seconds>
|
||||
If a client does not send any new data in this time period, the connection is
|
||||
closed. The default is 60.
|
||||
.TP
|
||||
.B max_connections <number>
|
||||
This specifies the maximum number of clients that can be connected to mpd. The
|
||||
default is 5.
|
||||
.TP
|
||||
.B max_playlist_length <number>
|
||||
This specifies the maximum number of songs that can be in the playlist. The
|
||||
default is 4096.
|
||||
.TP
|
||||
.B max_command_list_size <size in KiB>
|
||||
This specifies the maximum size a command list can be. The default is 2048.
|
||||
.TP
|
||||
.B max_output_buffer_size <size in KiB>
|
||||
This specifies the maximum size of the output buffer to a client. The default
|
||||
is 8192.
|
||||
.TP
|
||||
.B filesystem_charset <charset>
|
||||
This specifies the character set used for the filesystem. A list of supported
|
||||
character sets can be obtained by running "iconv -l". The default is
|
||||
character sets can be obtained by running "iconv \-l". The default is
|
||||
determined from the locale when the db was originally created.
|
||||
.TP
|
||||
.B id3v1_encoding <charset>
|
||||
This specifies the character set which ID3v1 tags are encoded in. A list of
|
||||
supported character sets can be obtained by running "iconv -l". The default is
|
||||
to let libid3tag convert them (from ISO-8859-1, as the standard specifies) and
|
||||
do no additional conversion.
|
||||
.TP
|
||||
.B gapless_mp3_playback <yes or no>
|
||||
This specifies whether to support gapless playback of MP3s which have the
|
||||
necessary headers. Useful if your MP3s have headers with incorrect
|
||||
information. If you have such MP3s, it is highly recommended that you fix them
|
||||
using vbrfix (available from <http://www.willwap.co.uk/Programs/vbrfix.php>)
|
||||
instead of disabling gapless MP3 playback. The default is to support gapless
|
||||
MP3 playback.
|
||||
.TP
|
||||
.B save_absolute_paths_in_playlists <yes or no>
|
||||
This specifies whether relative or absolute paths for song filenames are used
|
||||
when saving playlists. The default is "no".
|
||||
.TP
|
||||
.B metadata_to_use <tags>
|
||||
This specifies the tag types that will be scanned for and made available to
|
||||
clients. Note that you must recreate (not update) your database for changes to
|
||||
this parameter to take effect. Possible values are artist, album, title,
|
||||
track, name, genre, date, composer, performer, comment, and disc. Multiple
|
||||
tags may be specified as a comma separated list. An example value is
|
||||
"artist,album,title,track". The special value "none" may be used alone to
|
||||
disable all metadata. The default is to use all known tag types except for
|
||||
comments.
|
||||
.TP
|
||||
.B auto_update <yes or no>
|
||||
This specifies the wheter to support automatic update of music database when
|
||||
This specifies the whether to support automatic update of music database when
|
||||
files are changed in music_directory. The default is to disable autoupdate
|
||||
of database.
|
||||
.TP
|
||||
@@ -263,7 +144,7 @@ the music directory itself. There is no limit by default.
|
||||
.TP
|
||||
.B type <type>
|
||||
This specifies the audio output type. See the list of supported outputs in mpd
|
||||
--version for possible values.
|
||||
\-\-version for possible values.
|
||||
.TP
|
||||
.B name <name>
|
||||
This specifies a unique name for the audio output.
|
||||
@@ -282,190 +163,12 @@ Specifies how replay gain is applied. The default is "software",
|
||||
which uses an internal software volume control. "mixer" uses the
|
||||
configured (hardware) mixer control. "none" disables replay gain on
|
||||
this audio output.
|
||||
.SH OPTIONAL ALSA OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B device <dev>
|
||||
This specifies the device to use for audio output. The default is "default".
|
||||
.TP
|
||||
.B mixer_type <hardware, software or none>
|
||||
Specifies which mixer should be used for this audio output: the
|
||||
hardware mixer (available for ALSA, OSS and PulseAudio), the software
|
||||
mixer or no mixer ("none"). By default, the hardware mixer is used
|
||||
for devices which support it, and none for the others.
|
||||
.TP
|
||||
.B mixer_device <mixer dev>
|
||||
This specifies which mixer to use. The default is "default". To use
|
||||
the second sound card in a system, use "hw:1".
|
||||
.TP
|
||||
.B mixer_control <mixer ctrl>
|
||||
This specifies which mixer control to use (sometimes referred to as
|
||||
the "device"). The default is "PCM". Use "amixer scontrols" to see
|
||||
the list of possible controls.
|
||||
.TP
|
||||
.B mixer_index <mixer index>
|
||||
A number identifying the index of the named mixer control. This is
|
||||
probably only useful if your alsa device has more than one
|
||||
identically\-named mixer control. The default is "0". Use "amixer
|
||||
scontrols" to see the list of controls with their indexes.
|
||||
.TP
|
||||
.B use_mmap <yes or no>
|
||||
Setting this allows you to use memory-mapped I/O. Certain hardware setups may
|
||||
benefit from this, but most do not. Most users do not need to set this. The
|
||||
default is to not use memory-mapped I/O.
|
||||
.TP
|
||||
.B auto_resample <yes or no>
|
||||
Setting this to "no" disables ALSA's software resampling, if the
|
||||
hardware does not support a specific sample rate. This lets MPD do
|
||||
the resampling. "yes" is the default and allows ALSA to resample.
|
||||
.TP
|
||||
.B auto_channels <yes or no>
|
||||
Setting this to "no" disables ALSA's channel conversion, if the
|
||||
hardware does not support a specific number of channels. Default: "yes".
|
||||
.TP
|
||||
.B auto_format <yes or no>
|
||||
Setting this to "no" disables ALSA's sample format conversion, if the
|
||||
hardware does not support a specific sample format. Default: "yes".
|
||||
.TP
|
||||
.B buffer_time <time in microseconds>
|
||||
This sets the length of the hardware sample buffer in microseconds. Increasing
|
||||
it may help to reduce or eliminate skipping on certain setups. Most users do
|
||||
not need to change this. The default is 500000 microseconds (0.5 seconds).
|
||||
.TP
|
||||
.B period_time <time in microseconds>
|
||||
This sets the time between hardware sample transfers in microseconds.
|
||||
Increasing this can reduce CPU usage while lowering it can reduce underrun
|
||||
errors on bandwidth-limited devices. Some users have reported good results
|
||||
with this set to 50000, but not all devices support values this high. Most
|
||||
users do not need to change this. The default is 256000000 / sample_rate(kHz),
|
||||
or 5804 microseconds for CD-quality audio.
|
||||
.SH OPTIONAL OSS OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B device <dev>
|
||||
This specifies the device to use for audio output. The default is "/dev/dsp".
|
||||
.TP
|
||||
.B mixer_device <mixer dev>
|
||||
This specifies which mixer to use. The default is "/dev/mixer".
|
||||
.TP
|
||||
.B mixer_control <mixer ctrl>
|
||||
This specifies which mixer control to use (sometimes referred to as the
|
||||
"device"). The default is to use the main PCM mixer. An example is "Pcm".
|
||||
.SH OPTIONAL PULSE OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B server <server list>
|
||||
A space separated list of servers to try to connect to. See
|
||||
<\fBhttp://www.pulseaudio.org/wiki/ServerStrings\fP> for more details. The
|
||||
default is to let PulseAudio choose a server.
|
||||
If you specify more than one server name, MPD tries to connect to one
|
||||
after another until it successfully establishes a connection.
|
||||
.TP
|
||||
.B sink <sink>
|
||||
The sink to output to. The default is to let PulseAudio choose a sink.
|
||||
.SH OPTIONAL JACK OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B client_name <name>
|
||||
The client name to use when connecting to JACK. The output ports <name>:left
|
||||
and <name>:right will also be created for the left and right channels,
|
||||
respectively.
|
||||
.TP
|
||||
.B ports <left_port,right_port>
|
||||
This specifies the left and right ports to connect to for the left and right
|
||||
channels, respectively. The default is to let JACK choose a pair of ports.
|
||||
.TP
|
||||
.B ringbuffer_size <size in bytes>
|
||||
This specifies the size of the ringbuffer in bytes. The default is 32768.
|
||||
.SH OPTIONAL AO OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B driver <driver>
|
||||
This specifies the libao driver to use for audio output. Possible values
|
||||
depend on what libao drivers are available. See
|
||||
<\fBhttp://www.xiph.org/ao/doc/drivers.html\fP> for information on some
|
||||
commonly used drivers. Typical values for Linux include "oss" and "alsa09".
|
||||
The default is "default", which causes libao to select an appropriate plugin.
|
||||
.TP
|
||||
.B options <opts>
|
||||
This specifies the options to use for the selected libao driver. For oss, the
|
||||
only option available is "dsp". For alsa09, the available options are: "dev",
|
||||
"buf_size", and "periods". See <\fBhttp://www.xiph.org/ao/doc/drivers.html\fP>
|
||||
for available options for some commonly used drivers. Options are assigned
|
||||
using "=", and ";" is used to separate options. An example for oss:
|
||||
"dsp=/dev/dsp". An example for alsa09: "dev=hw:0,0;buf_size=4096". The
|
||||
default is "".
|
||||
.TP
|
||||
.B write_size <size in bytes>
|
||||
This specifies how many bytes to write to the audio device at once. This
|
||||
parameter is to work around a bug in older versions of libao on sound cards
|
||||
with very small buffers. The default is 1024.
|
||||
.SH REQUIRED FIFO OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B path <path>
|
||||
This specifies the path of the FIFO to output to. Must be an absolute path.
|
||||
If the path does not exist it will be created when mpd is started, and removed
|
||||
when mpd is stopped. The FIFO will be created with the same user and group as
|
||||
mpd is running as. Default permissions can be modified by using the builtin
|
||||
shell command "umask". If a FIFO already exists at the specified path it will
|
||||
be reused, and will \fBnot\fP be removed when mpd is stopped. You can use the
|
||||
"mkfifo" command to create this, and then you may modify the permissions to
|
||||
your liking.
|
||||
.SH REQUIRED SHOUT OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B name <name>
|
||||
This specifies not only the unique audio output name, but also the stream
|
||||
title.
|
||||
.TP
|
||||
.B host <hostname>
|
||||
This specifies the hostname of the icecast server to connect to.
|
||||
.TP
|
||||
.B port <port>
|
||||
This specifies the port of the icecast server to connect to.
|
||||
.TP
|
||||
.B mount <mountpoint>
|
||||
This specifies the icecast mountpoint to use.
|
||||
.TP
|
||||
.B password <password>
|
||||
This specifies the password to use when logging in to the icecast server.
|
||||
.TP
|
||||
.B quality <quality>
|
||||
This specifies the encoding quality to use. The value must be between 0
|
||||
and 10. Fractional values, such as 2.5, are permitted. Either the quality or
|
||||
the bitrate parameter must be specified, but not both. For Ogg, a
|
||||
higher quality number produces higher quality output. For MP3, it's
|
||||
just the opposite, with lower numbers producing higher quality output.
|
||||
.TP
|
||||
.B bitrate <kbps>
|
||||
This specifies the bitrate to use for encoding. Either the quality or the
|
||||
bitrate parameter must be specified, but not both.
|
||||
.TP
|
||||
.B format <sample_rate:bits:channels>
|
||||
This specifies the sample rate, bits per sample, and number of channels to use
|
||||
for encoding.
|
||||
.SH OPTIONAL SHOUT OUTPUT PARAMETERS
|
||||
.TP
|
||||
.B encoding <encoding>
|
||||
This specifies which output encoding to use. Should be either "ogg"
|
||||
or "mp3", "mp3" is needed for shoutcast streaming. The default is "ogg".
|
||||
.TP
|
||||
.B protocol <protocol>
|
||||
This specifies the protocol that wil be used to connect to the
|
||||
icecast/shoutcast server. The options are "shoutcast", "icecast1" and
|
||||
"icecast2". The default is "icecast2".
|
||||
.TP
|
||||
.B user <username>
|
||||
This specifies the username to use when logging in to the icecast server. The
|
||||
default is "source".
|
||||
.TP
|
||||
.B public <yes or no>
|
||||
This specifies whether to request that the stream be listed in all public
|
||||
stream directories that the icecast server knows about. The default is no.
|
||||
.TP
|
||||
.B timeout <seconds>
|
||||
This specifies the number of seconds to wait before giving up on trying to
|
||||
connect to the icecast server. The default is 2 seconds.
|
||||
.TP
|
||||
.B description <description>
|
||||
This specifies a description of the stream.
|
||||
.TP
|
||||
.B genre <genre>
|
||||
This specifies the genre(s) of the stream.
|
||||
.SH FILES
|
||||
.TP
|
||||
.BI ~/.mpdconf
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# An example configuration file for MPD
|
||||
# See the mpd.conf man page for a more detailed description of each parameter.
|
||||
# An example configuration file for MPD.
|
||||
# Read the user manual for documentation: http://www.musicpd.org/doc/user/
|
||||
|
||||
|
||||
# Files and directories #######################################################
|
||||
@@ -32,7 +32,7 @@
|
||||
# settings.
|
||||
#
|
||||
# The special value "syslog" makes MPD use the local syslog daemon. This
|
||||
# setting defaults to logging to syslog, otherwise logging is disabled.
|
||||
# setting defaults to logging to syslog.
|
||||
#
|
||||
#log_file "~/.mpd/log"
|
||||
#
|
||||
@@ -75,7 +75,8 @@
|
||||
#
|
||||
# This setting sets the address for the daemon to listen on. Careful attention
|
||||
# should be paid if this is assigned to anything other then the default, any.
|
||||
# This setting can deny access to control of the daemon.
|
||||
# This setting can deny access to control of the daemon. Not effective if
|
||||
# systemd socket activiation is in use.
|
||||
#
|
||||
# For network
|
||||
#bind_to_address "any"
|
||||
@@ -95,25 +96,25 @@
|
||||
#
|
||||
#log_level "default"
|
||||
#
|
||||
# If you have a problem with your MP3s ending abruptly it is recommended that
|
||||
# you set this argument to "no" to attempt to fix the problem. If this solves
|
||||
# the problem, it is highly recommended to fix the MP3 files with vbrfix
|
||||
# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
|
||||
# point gapless MP3 playback can be enabled.
|
||||
# Setting "restore_paused" to "yes" puts MPD into pause mode instead
|
||||
# of starting playback after startup.
|
||||
#
|
||||
#gapless_mp3_playback "yes"
|
||||
#restore_paused "no"
|
||||
#
|
||||
# This setting enables MPD to create playlists in a format usable by other
|
||||
# music players.
|
||||
#
|
||||
#save_absolute_paths_in_playlists "no"
|
||||
#
|
||||
# This setting defines a list of tag types that will be extracted during the
|
||||
# audio file discovery process. Optionally, 'comment' can be added to this
|
||||
# list.
|
||||
#
|
||||
# This setting defines a list of tag types that will be extracted during the
|
||||
# audio file discovery process. The complete list of possible values can be
|
||||
# found in the user manual.
|
||||
#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
|
||||
#
|
||||
# This example just enables the "comment" tag without disabling all
|
||||
# the other supported tags:
|
||||
#metadata_to_use "+comment"
|
||||
#
|
||||
# This setting enables automatic update of MPD's database when files in
|
||||
# music_directory are changed.
|
||||
#
|
||||
@@ -150,9 +151,9 @@
|
||||
#zeroconf_enabled "yes"
|
||||
#
|
||||
# The argument to this setting will be the Zeroconf / Avahi unique name for
|
||||
# this MPD server on the network.
|
||||
# this MPD server on the network. %h will be replaced with the hostname.
|
||||
#
|
||||
#zeroconf_name "Music Player"
|
||||
#zeroconf_name "Music Player @ %h"
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
@@ -160,7 +161,7 @@
|
||||
# Permissions #################################################################
|
||||
#
|
||||
# If this setting is set, MPD will require password authorization. The password
|
||||
# can setting can be specified multiple times for different password profiles.
|
||||
# setting can be specified multiple times for different password profiles.
|
||||
#
|
||||
#password "password@read,add,control,admin"
|
||||
#
|
||||
@@ -171,6 +172,15 @@
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Database #######################################################################
|
||||
#
|
||||
|
||||
#database {
|
||||
# plugin "proxy"
|
||||
# host "other.mpd.host"
|
||||
# port "6600"
|
||||
#}
|
||||
|
||||
# Input #######################################################################
|
||||
#
|
||||
|
||||
@@ -191,16 +201,12 @@ input {
|
||||
# blocks. Setting this block is optional, though the server will only attempt
|
||||
# autodetection for one sound card.
|
||||
#
|
||||
# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
|
||||
# other audio outputs.
|
||||
#
|
||||
# An example of an ALSA output:
|
||||
#
|
||||
#audio_output {
|
||||
# type "alsa"
|
||||
# name "My ALSA Device"
|
||||
## device "hw:0,0" # optional
|
||||
## format "44100:16:2" # optional
|
||||
## mixer_type "hardware" # optional
|
||||
## mixer_device "default" # optional
|
||||
## mixer_control "PCM" # optional
|
||||
@@ -213,7 +219,6 @@ input {
|
||||
# type "oss"
|
||||
# name "My OSS Device"
|
||||
## device "/dev/dsp" # optional
|
||||
## format "44100:16:2" # optional
|
||||
## mixer_type "hardware" # optional
|
||||
## mixer_device "/dev/mixer" # optional
|
||||
## mixer_control "PCM" # optional
|
||||
@@ -223,7 +228,7 @@ input {
|
||||
#
|
||||
#audio_output {
|
||||
# type "shout"
|
||||
# encoding "ogg" # optional
|
||||
# encoder "vorbis" # optional
|
||||
# name "My Shout Stream"
|
||||
# host "localhost"
|
||||
# port "8000"
|
||||
@@ -235,6 +240,7 @@ input {
|
||||
## protocol "icecast2" # optional
|
||||
## user "source" # optional
|
||||
## description "My Stream Description" # optional
|
||||
## url "http://example.com" # optional
|
||||
## genre "jazz" # optional
|
||||
## public "no" # optional
|
||||
## timeout "2" # optional
|
||||
@@ -276,6 +282,42 @@ input {
|
||||
## sink "remote_server_sink" # optional
|
||||
#}
|
||||
#
|
||||
# An example of a winmm output (Windows multimedia API).
|
||||
#
|
||||
#audio_output {
|
||||
# type "winmm"
|
||||
# name "My WinMM output"
|
||||
## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
|
||||
# or
|
||||
## device "0" # optional
|
||||
## mixer_type "hardware" # optional
|
||||
#}
|
||||
#
|
||||
# An example of an openal output.
|
||||
#
|
||||
#audio_output {
|
||||
# type "openal"
|
||||
# name "My OpenAL output"
|
||||
## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
|
||||
#}
|
||||
#
|
||||
# An example of an sndio output.
|
||||
#
|
||||
#audio_output {
|
||||
# type "sndio"
|
||||
# name "sndio output"
|
||||
# mixer_type "hardware"
|
||||
#}
|
||||
#
|
||||
# An example of an OS X output:
|
||||
#
|
||||
#audio_output {
|
||||
# type "osx"
|
||||
# name "My OS X Device"
|
||||
## device "Built-in Output" # optional
|
||||
## channel_map "-1,-1,0,1" # optional
|
||||
#}
|
||||
#
|
||||
## Example "pipe" output:
|
||||
#
|
||||
#audio_output {
|
||||
@@ -297,27 +339,17 @@ input {
|
||||
# mixer_type "none" # optional
|
||||
#}
|
||||
#
|
||||
# This setting will change all decoded audio to be converted to the specified
|
||||
# format before being passed to the audio outputs. By default, this setting is
|
||||
# disabled.
|
||||
#
|
||||
#audio_output_format "44100:16:2"
|
||||
#
|
||||
# If MPD has been compiled with libsamplerate support, this setting specifies
|
||||
# the sample rate converter to use. Possible values can be found in the
|
||||
# mpd.conf man page or the libsamplerate documentation. By default, this is
|
||||
# setting is disabled.
|
||||
#
|
||||
#samplerate_converter "Fastest Sinc Interpolator"
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Normalization automatic volume adjustments ##################################
|
||||
#
|
||||
# This setting specifies the type of ReplayGain to use. This setting can have
|
||||
# the argument "off", "album" or "track". See <http://www.replaygain.org>
|
||||
# for more details. This setting is off by default.
|
||||
# the argument "off", "album", "track" or "auto". "auto" is a special mode that
|
||||
# chooses between "track" and "album" depending on the current state of
|
||||
# random playback. If random playback is enabled then "track" mode is used.
|
||||
# See <http://www.replaygain.org> for more details about ReplayGain.
|
||||
# This setting is off by default.
|
||||
#
|
||||
#replaygain "album"
|
||||
#
|
||||
@@ -326,6 +358,20 @@ input {
|
||||
#
|
||||
#replaygain_preamp "0"
|
||||
#
|
||||
# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
|
||||
# By default this setting is disabled.
|
||||
#
|
||||
#replaygain_missing_preamp "0"
|
||||
#
|
||||
# This setting enables or disables ReplayGain limiting.
|
||||
# MPD calculates actual amplification based on the ReplayGain tags
|
||||
# and replaygain_preamp / replaygain_missing_preamp setting.
|
||||
# If replaygain_limit is enabled MPD will never amplify audio signal
|
||||
# above its original level. If replaygain_limit is disabled such amplification
|
||||
# might occur. By default this setting is enabled.
|
||||
#
|
||||
#replaygain_limit "yes"
|
||||
#
|
||||
# This setting enables on-the-fly normalization volume adjustment. This will
|
||||
# result in the volume of all playing audio to be adjusted so the output has
|
||||
# equal "loudness". This setting is disabled by default.
|
||||
@@ -334,39 +380,6 @@ input {
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# MPD Internal Buffering ######################################################
|
||||
#
|
||||
# This setting adjusts the size of internal decoded audio buffering. Changing
|
||||
# this may have undesired effects. Don't change this if you don't know what you
|
||||
# are doing.
|
||||
#
|
||||
#audio_buffer_size "2048"
|
||||
#
|
||||
# This setting controls the percentage of the buffer which is filled before
|
||||
# beginning to play. Increasing this reduces the chance of audio file skipping,
|
||||
# at the cost of increased time prior to audio playback.
|
||||
#
|
||||
#buffer_before_play "10%"
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Resource Limitations ########################################################
|
||||
#
|
||||
# These settings are various limitations to prevent MPD from using too many
|
||||
# resources. Generally, these settings should be minimized to prevent security
|
||||
# risks, depending on the operating resources.
|
||||
#
|
||||
#connection_timeout "60"
|
||||
#max_connections "10"
|
||||
#max_playlist_length "16384"
|
||||
#max_command_list_size "2048"
|
||||
#max_output_buffer_size "8192"
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Character Encoding ##########################################################
|
||||
#
|
||||
# If file or directory names do not display correctly for your locale then you
|
||||
@@ -374,34 +387,4 @@ input {
|
||||
#
|
||||
#filesystem_charset "UTF-8"
|
||||
#
|
||||
# This setting controls the encoding that ID3v1 tags should be converted from.
|
||||
#
|
||||
#id3v1_encoding "ISO-8859-1"
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# SIDPlay decoder #############################################################
|
||||
#
|
||||
# songlength_database:
|
||||
# Location of your songlengths file, as distributed with the HVSC.
|
||||
# The sidplay plugin checks this for matching MD5 fingerprints.
|
||||
# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
|
||||
#
|
||||
# default_songlength:
|
||||
# This is the default playing time in seconds for songs not in the
|
||||
# songlength database, or in case you're not using a database.
|
||||
# A value of 0 means play indefinitely.
|
||||
#
|
||||
# filter:
|
||||
# Turns the SID filter emulation on or off.
|
||||
#
|
||||
#decoder {
|
||||
# plugin "sidplay"
|
||||
# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt"
|
||||
# default_songlength "120"
|
||||
# filter "true"
|
||||
#}
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
1179
doc/plugins.rst
Normal file
1179
doc/plugins.rst
Normal file
File diff suppressed because it is too large
Load Diff
1329
doc/protocol.rst
Normal file
1329
doc/protocol.rst
Normal file
File diff suppressed because it is too large
Load Diff
1674
doc/protocol.xml
1674
doc/protocol.xml
File diff suppressed because it is too large
Load Diff
1064
doc/user.rst
Normal file
1064
doc/user.rst
Normal file
File diff suppressed because it is too large
Load Diff
1503
doc/user.xml
1503
doc/user.xml
File diff suppressed because it is too large
Load Diff
192
m4/faad.m4
192
m4/faad.m4
@@ -1,192 +0,0 @@
|
||||
AC_DEFUN([AM_PATH_FAAD],
|
||||
[dnl ##
|
||||
dnl faad
|
||||
dnl ##
|
||||
|
||||
AC_ARG_ENABLE(aac,
|
||||
AS_HELP_STRING([--disable-aac],
|
||||
[disable AAC support (default: enable)]),,
|
||||
enable_aac=yes)
|
||||
|
||||
AC_ARG_WITH(faad,
|
||||
AS_HELP_STRING([--with-faad=PFX],
|
||||
[prefix where faad2 is installed (optional)]),,
|
||||
faad_prefix="")
|
||||
AC_ARG_WITH(faad-libraries,
|
||||
AS_HELP_STRING([--with-faad-libraries=DIR],
|
||||
[directory where faad2 library is installed (optional)]),,
|
||||
faad_libraries="")
|
||||
AC_ARG_WITH(faad-includes,
|
||||
AS_HELP_STRING([--with-faad-includes=DIR],
|
||||
[directory where faad2 header files are installed (optional)]),,
|
||||
faad_includes="")
|
||||
|
||||
if test x$enable_aac = xyes; then
|
||||
if test "x$faad_libraries" != "x" ; then
|
||||
FAAD_LIBS="-L$faad_libraries"
|
||||
elif test "x$faad_prefix" != "x" ; then
|
||||
FAAD_LIBS="-L$faad_prefix/lib"
|
||||
fi
|
||||
|
||||
FAAD_LIBS="$FAAD_LIBS -lfaad"
|
||||
|
||||
if test "x$faad_includes" != "x" ; then
|
||||
FAAD_CFLAGS="-I$faad_includes"
|
||||
elif test "x$faad_prefix" != "x" ; then
|
||||
FAAD_CFLAGS="-I$faad_prefix/include"
|
||||
fi
|
||||
|
||||
oldcflags=$CFLAGS
|
||||
oldlibs=$LIBS
|
||||
oldcppflags=$CPPFLAGS
|
||||
CFLAGS="$CFLAGS $MPD_CFLAGS $FAAD_CFLAGS -I."
|
||||
LIBS="$LIBS $MPD_LIBS $FAAD_LIBS"
|
||||
CPPFLAGS=$CFLAGS
|
||||
AC_CHECK_HEADER(faad.h,,enable_aac=no)
|
||||
if test x$enable_aac = xyes; then
|
||||
AC_CHECK_DECL(FAAD2_VERSION,,enable_aac=no,[#include <faad.h>])
|
||||
fi
|
||||
if test x$enable_aac = xyes; then
|
||||
AC_CHECK_DECL(faacDecInit2,,enable_aac=no,[#include <faad.h>])
|
||||
fi
|
||||
if test x$enable_aac = xyes; then
|
||||
AC_CHECK_LIB(faad,faacDecInit2,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS"],enable_aac=no)
|
||||
if test x$enable_aac = xno; then
|
||||
enable_aac=yes
|
||||
AC_CHECK_LIB(faad,NeAACDecInit2,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS"],enable_aac=no)
|
||||
fi
|
||||
fi
|
||||
if test x$enable_aac = xyes; then
|
||||
AC_MSG_CHECKING(that FAAD2 uses buffer and bufferlen)
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||
#include <faad.h>
|
||||
|
||||
int main() {
|
||||
char buffer;
|
||||
long bufferlen = 0;
|
||||
faacDecHandle decoder;
|
||||
faacDecFrameInfo frameInfo;
|
||||
faacDecConfigurationPtr config;
|
||||
unsigned char channels;
|
||||
long sampleRate;
|
||||
mp4AudioSpecificConfig mp4ASC;
|
||||
|
||||
decoder = faacDecOpen();
|
||||
config = faacDecGetCurrentConfiguration(decoder);
|
||||
config->outputFormat = FAAD_FMT_16BIT;
|
||||
faacDecSetConfiguration(decoder,config);
|
||||
AudioSpecificConfig(&buffer, bufferlen, &mp4ASC);
|
||||
faacDecInit(decoder,&buffer,bufferlen,&sampleRate,&channels);
|
||||
faacDecInit2(decoder,&buffer,bufferlen,&sampleRate,&channels);
|
||||
faacDecDecode(decoder,&frameInfo,&buffer,bufferlen);
|
||||
|
||||
return 0;
|
||||
}
|
||||
])],[AC_MSG_RESULT(yes);AC_DEFINE(HAVE_FAAD_BUFLEN_FUNCS,1,[Define if FAAD2 uses buflen in function calls])],[AC_MSG_RESULT(no);
|
||||
AC_MSG_CHECKING(that FAAD2 can even be used)
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||
#include <faad.h>
|
||||
|
||||
int main() {
|
||||
char buffer;
|
||||
faacDecHandle decoder;
|
||||
faacDecFrameInfo frameInfo;
|
||||
faacDecConfigurationPtr config;
|
||||
unsigned char channels;
|
||||
long sampleRate;
|
||||
long bufferlen = 0;
|
||||
unsigned long dummy1_32;
|
||||
unsigned char dummy2_8, dummy3_8, dummy4_8, dummy5_8, dummy6_8,
|
||||
dummy7_8, dummy8_8;
|
||||
|
||||
decoder = faacDecOpen();
|
||||
config = faacDecGetCurrentConfiguration(decoder);
|
||||
config->outputFormat = FAAD_FMT_16BIT;
|
||||
faacDecSetConfiguration(decoder,config);
|
||||
AudioSpecificConfig(&buffer,&dummy1_32,&dummy2_8,
|
||||
&dummy3_8,&dummy4_8,&dummy5_8,
|
||||
&dummy6_8,&dummy7_8,&dummy8_8);
|
||||
faacDecInit(decoder,&buffer,&sampleRate,&channels);
|
||||
faacDecInit2(decoder,&buffer,bufferlen,&sampleRate,&channels);
|
||||
faacDecDecode(decoder,&frameInfo,&buffer);
|
||||
faacDecClose(decoder);
|
||||
|
||||
return 0;
|
||||
}
|
||||
])],AC_MSG_RESULT(yes),[AC_MSG_RESULT(no);enable_aac=no])
|
||||
])
|
||||
fi
|
||||
if test x$enable_aac = xyes; then
|
||||
AC_CHECK_MEMBERS([faacDecConfiguration.downMatrix,faacDecConfiguration.dontUpSampleImplicitSBR,faacDecFrameInfo.samplerate],,,[#include <faad.h>])
|
||||
AC_DEFINE(HAVE_FAAD,1,[Define to use FAAD2 for AAC decoding])
|
||||
else
|
||||
AC_MSG_WARN([faad2 lib needed for MP4/AAC support -- disabling MP4/AAC support])
|
||||
fi
|
||||
CFLAGS=$oldcflags
|
||||
LIBS=$oldlibs
|
||||
CPPFLAGS=$oldcppflags
|
||||
fi
|
||||
|
||||
if test x$enable_aac = xyes; then
|
||||
oldcflags=$CFLAGS
|
||||
oldlibs=$LIBS
|
||||
oldcppflags=$CPPFLAGS
|
||||
CFLAGS="$CFLAGS $MPD_CFLAGS $FAAD_CFLAGS -Werror"
|
||||
LIBS="$LIBS $MPD_LIBS $FAAD_LIBS"
|
||||
CPPFLAGS=$CFLAGS
|
||||
|
||||
AC_MSG_CHECKING(for broken libfaad headers)
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||
#include <faad.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
int main() {
|
||||
unsigned char channels;
|
||||
uint32_t sample_rate;
|
||||
|
||||
faacDecInit2(NULL, NULL, 0, &sample_rate, &channels);
|
||||
return 0;
|
||||
}
|
||||
])],
|
||||
[AC_MSG_RESULT(correct)],
|
||||
[AC_MSG_RESULT(broken);
|
||||
AC_DEFINE(HAVE_FAAD_LONG, 1, [Define if faad.h uses the broken "unsigned long" pointers])])
|
||||
|
||||
CFLAGS=$oldcflags
|
||||
LIBS=$oldlibs
|
||||
CPPFLAGS=$oldcppflags
|
||||
fi
|
||||
|
||||
if test x$enable_aac = xyes; then
|
||||
enable_mp4=yes
|
||||
MP4FF_LIBS="-lmp4ff"
|
||||
|
||||
oldcflags=$CFLAGS
|
||||
oldlibs=$LIBS
|
||||
oldcppflags=$CPPFLAGS
|
||||
CFLAGS="$CFLAGS $FAAD_CFLAGS"
|
||||
LIBS="$LIBS $FAAD_LIBS $MP4FF_LIBS"
|
||||
CPPFLAGS=$CFLAGS
|
||||
|
||||
AC_CHECK_HEADER(mp4ff.h,,enable_mp4=no)
|
||||
|
||||
if test x$enable_mp4 = xyes; then
|
||||
AC_CHECK_LIB(mp4ff,mp4ff_open_read,,enable_mp4=no)
|
||||
fi
|
||||
|
||||
if test x$enable_mp4 = xyes; then
|
||||
AC_SUBST(MP4FF_LIBS)
|
||||
AC_DEFINE(HAVE_MP4, 1, [Define to use FAAD2+mp4ff for MP4 decoding])
|
||||
else
|
||||
AC_MSG_WARN([libmp4ff needed for MP4 support -- disabling MP4 support])
|
||||
unset MP4FF_LIBS
|
||||
fi
|
||||
|
||||
CFLAGS=$oldcflags
|
||||
LIBS=$oldlibs
|
||||
CPPFLAGS=$oldcppflags
|
||||
else
|
||||
enable_mp4=no
|
||||
fi
|
||||
])
|
||||
@@ -1,14 +0,0 @@
|
||||
dnl
|
||||
dnl Usage:
|
||||
dnl AC_CHECK_LIBWRAP([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl
|
||||
|
||||
AC_DEFUN([AC_CHECK_LIBWRAP],[
|
||||
AC_CHECK_HEADERS([tcpd.h],
|
||||
AC_CHECK_LIB([wrap], [request_init],
|
||||
[LIBWRAP_CFLAGS=""
|
||||
LIBWRAP_LDFLAGS="-lwrap"
|
||||
$1],
|
||||
$2),
|
||||
$2)
|
||||
])
|
||||
@@ -1,65 +0,0 @@
|
||||
AC_DEFUN([MPD_AUTO_ENABLED], [
|
||||
var="enable_$1"
|
||||
feature="$2"
|
||||
|
||||
if eval "test x`echo '$'$var` = xauto"; then
|
||||
AC_MSG_NOTICE([auto-detected $feature])
|
||||
eval "$var=yes"
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([MPD_AUTO_DISABLED], [
|
||||
var="enable_$1"
|
||||
feature="$2"
|
||||
msg="$3"
|
||||
|
||||
if eval "test x`echo '$'$var` = xauto"; then
|
||||
AC_MSG_WARN([$msg -- disabling $feature])
|
||||
eval "$var=no"
|
||||
elif eval "test x`echo '$'$var` = xyes"; then
|
||||
AC_MSG_ERROR([$feature: $msg])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl Check whether a prerequisite for a feature was found. This is
|
||||
dnl very similar to MPD_AUTO_RESULT, but does not finalize the
|
||||
dnl detection; it assumes that more checks will follow.
|
||||
AC_DEFUN([MPD_AUTO_PRE], [
|
||||
name="$1"
|
||||
var="enable_$1"
|
||||
found="found_$name"
|
||||
feature="$2"
|
||||
msg="$3"
|
||||
|
||||
if eval "test x`echo '$'$var` != xno" && eval "test x`echo '$'$found` = xno"; then
|
||||
MPD_AUTO_DISABLED([$name], [$feature], [$msg])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([MPD_AUTO_RESULT], [
|
||||
name="$1"
|
||||
var="enable_$1"
|
||||
found="found_$name"
|
||||
feature="$2"
|
||||
msg="$3"
|
||||
|
||||
if eval "test x`echo '$'$var` = xno"; then
|
||||
eval "$found=no"
|
||||
fi
|
||||
|
||||
if eval "test x`echo '$'$found` = xyes"; then
|
||||
MPD_AUTO_ENABLED([$name], [$feature])
|
||||
else
|
||||
MPD_AUTO_DISABLED([$name], [$feature], [$msg])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([MPD_AUTO_PKG], [
|
||||
if eval "test x`echo '$'enable_$1` != xno"; then
|
||||
PKG_CHECK_MODULES([$2], [$3],
|
||||
[eval "found_$1=yes"],
|
||||
[eval "found_$1=no"])
|
||||
fi
|
||||
|
||||
MPD_AUTO_RESULT([$1], [$4], [$5])
|
||||
])
|
||||
@@ -1,18 +0,0 @@
|
||||
AC_DEFUN([MPD_CHECK_FLAG],[
|
||||
var=`echo "$1" | tr "=-" "__"`
|
||||
AC_CACHE_CHECK([whether the C compiler accepts $1],
|
||||
[mpd_check_cflag_$var],[
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $1"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||
int main(void) { return 0; }
|
||||
])], [ eval "mpd_check_cflag_$var=yes"
|
||||
], [ eval "mpd_check_cflag_$var=no" ])
|
||||
CFLAGS="$save_CFLAGS"
|
||||
])
|
||||
if eval "test x`echo '$mpd_check_cflag_'$var` = xyes"
|
||||
then
|
||||
AM_CFLAGS="$AM_CFLAGS $1"
|
||||
fi
|
||||
])
|
||||
])
|
||||
157
m4/pkg.m4
157
m4/pkg.m4
@@ -1,157 +0,0 @@
|
||||
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
||||
# ----------------------------------
|
||||
AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
|
||||
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
|
||||
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
|
||||
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
|
||||
fi
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
_pkg_min_version=m4_default([$1], [0.9.0])
|
||||
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
PKG_CONFIG=""
|
||||
fi
|
||||
|
||||
fi[]dnl
|
||||
])# PKG_PROG_PKG_CONFIG
|
||||
|
||||
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
# Check to see whether a particular set of modules exists. Similar
|
||||
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||
#
|
||||
#
|
||||
# Similar to PKG_CHECK_MODULES, make sure that the first instance of
|
||||
# this or PKG_CHECK_MODULES is called, or make sure to call
|
||||
# PKG_CHECK_EXISTS manually
|
||||
# --------------------------------------------------------------
|
||||
AC_DEFUN([PKG_CHECK_EXISTS],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
|
||||
m4_ifval([$2], [$2], [:])
|
||||
m4_ifvaln([$3], [else
|
||||
$3])dnl
|
||||
fi])
|
||||
|
||||
|
||||
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
|
||||
# ---------------------------------------------
|
||||
m4_define([_PKG_CONFIG],
|
||||
[if test -n "$PKG_CONFIG"; then
|
||||
if test -n "$$1"; then
|
||||
pkg_cv_[]$1="$$1"
|
||||
else
|
||||
PKG_CHECK_EXISTS([$3],
|
||||
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
|
||||
[pkg_failed=yes])
|
||||
fi
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi[]dnl
|
||||
])# _PKG_CONFIG
|
||||
|
||||
# _PKG_SHORT_ERRORS_SUPPORTED
|
||||
# -----------------------------
|
||||
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
_pkg_short_errors_supported=yes
|
||||
else
|
||||
_pkg_short_errors_supported=no
|
||||
fi[]dnl
|
||||
])# _PKG_SHORT_ERRORS_SUPPORTED
|
||||
|
||||
|
||||
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
# [ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
#
|
||||
# Note that if there is a possibility the first call to
|
||||
# PKG_CHECK_MODULES might not happen, you should be sure to include an
|
||||
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
||||
#
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
AC_DEFUN([PKG_CHECK_MODULES],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
|
||||
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
|
||||
|
||||
pkg_failed=no
|
||||
AC_MSG_CHECKING([for $1])
|
||||
|
||||
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
|
||||
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
|
||||
|
||||
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
|
||||
and $1[]_LIBS to avoid the need to call pkg-config.
|
||||
See the pkg-config man page for more details.])
|
||||
|
||||
if test $pkg_failed = yes; then
|
||||
_PKG_SHORT_ERRORS_SUPPORTED
|
||||
if test $_pkg_short_errors_supported = yes; then
|
||||
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
|
||||
else
|
||||
$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
|
||||
fi
|
||||
# Put the nasty error message in config.log where it belongs
|
||||
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
|
||||
|
||||
ifelse([$4], , [AC_MSG_ERROR(dnl
|
||||
[Package requirements ($2) were not met:
|
||||
|
||||
$$1_PKG_ERRORS
|
||||
|
||||
Consider adjusting the PKG_CONFIG_PATH environment variable if you
|
||||
installed software in a non-standard prefix.
|
||||
|
||||
_PKG_TEXT
|
||||
])],
|
||||
[AC_MSG_RESULT([no])
|
||||
$4])
|
||||
elif test $pkg_failed = untried; then
|
||||
ifelse([$4], , [AC_MSG_FAILURE(dnl
|
||||
[The pkg-config script could not be found or is too old. Make sure it
|
||||
is in your PATH or set the PKG_CONFIG environment variable to the full
|
||||
path to pkg-config.
|
||||
|
||||
_PKG_TEXT
|
||||
|
||||
To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
|
||||
[$4])
|
||||
else
|
||||
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
|
||||
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
|
||||
AC_MSG_RESULT([yes])
|
||||
ifelse([$3], , :, [$3])
|
||||
fi[]dnl
|
||||
])# PKG_CHECK_MODULES
|
||||
@@ -1,19 +0,0 @@
|
||||
AC_DEFUN([results], [
|
||||
dnl This is a hack to allow "with" names, otherwise "enable".
|
||||
num=`expr $1 : 'with'`
|
||||
if test "$num" != "0"; then
|
||||
var="`echo '$'$1`"
|
||||
else
|
||||
var="`echo '$'enable_$1`"
|
||||
fi
|
||||
|
||||
printf '('
|
||||
if eval "test x$var = xyes"; then
|
||||
printf '+'
|
||||
elif test -n "$3" && eval "test x$var = x$3"; then
|
||||
printf '+'
|
||||
else
|
||||
printf '-'
|
||||
fi
|
||||
printf '%s) ' "$2"
|
||||
])
|
||||
32
m4/ucred.m4
32
m4/ucred.m4
@@ -1,32 +0,0 @@
|
||||
# Check if "struct ucred" is available. If not, try harder with
|
||||
# _GNU_SOURCE.
|
||||
#
|
||||
# Author: Max Kellermann <max@duempel.org>
|
||||
|
||||
AC_DEFUN([STRUCT_UCRED],[
|
||||
AC_MSG_CHECKING([for struct ucred])
|
||||
AC_CACHE_VAL(mpd_cv_have_struct_ucred, [
|
||||
AC_TRY_COMPILE([#include <sys/socket.h>],
|
||||
[struct ucred cred;],
|
||||
mpd_cv_have_struct_ucred=yes,
|
||||
mpd_cv_have_struct_ucred=no)
|
||||
if test x$mpd_cv_have_struct_ucred = xno; then
|
||||
# glibc 2.8 forces _GNU_SOURCE on us
|
||||
AC_TRY_COMPILE(
|
||||
[#define _GNU_SOURCE
|
||||
#include <sys/socket.h>],
|
||||
[struct ucred cred;],
|
||||
mpd_cv_have_struct_ucred=yes,
|
||||
mpd_cv_have_struct_ucred=no)
|
||||
if test x$mpd_cv_have_struct_ucred = xyes; then
|
||||
# :(
|
||||
MPD_CFLAGS="$MPD_CFLAGS -D_GNU_SOURCE"
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_MSG_RESULT($mpd_cv_have_struct_ucred)
|
||||
if test x$mpd_cv_have_struct_ucred = xyes; then
|
||||
AC_DEFINE(HAVE_STRUCT_UCRED, 1, [Define if struct ucred is present from sys/socket.h])
|
||||
fi
|
||||
])
|
||||
510
meson.build
Normal file
510
meson.build
Normal file
@@ -0,0 +1,510 @@
|
||||
project(
|
||||
'mpd',
|
||||
['c', 'cpp'],
|
||||
version: '0.21.26',
|
||||
meson_version: '>= 0.49.0',
|
||||
default_options: [
|
||||
'c_std=c99',
|
||||
'cpp_std=c++14',
|
||||
'warning_level=2',
|
||||
],
|
||||
license: 'GPLv2+',
|
||||
)
|
||||
|
||||
version_cxx = vcs_tag(input: 'src/GitVersion.cxx', output: 'GitVersion.cxx')
|
||||
|
||||
compiler = meson.get_compiler('cpp')
|
||||
c_compiler = meson.get_compiler('c')
|
||||
|
||||
if compiler.get_id() == 'gcc' and compiler.version().version_compare('<6')
|
||||
warning('Your GCC version is too old. You need at least version 6.')
|
||||
elif compiler.get_id() == 'clang' and compiler.version().version_compare('<3')
|
||||
warning('Your clang version is too old. You need at least version 3.')
|
||||
endif
|
||||
|
||||
conf = configuration_data()
|
||||
conf.set_quoted('PACKAGE', meson.project_name())
|
||||
conf.set_quoted('PACKAGE_NAME', meson.project_name())
|
||||
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
|
||||
conf.set_quoted('VERSION', meson.project_version())
|
||||
conf.set_quoted('PROTOCOL_VERSION', '0.21.11')
|
||||
conf.set_quoted('SYSTEM_CONFIG_FILE_LOCATION', join_paths(get_option('prefix'), get_option('sysconfdir'), 'mpd.conf'))
|
||||
|
||||
common_cppflags = [
|
||||
'-D_GNU_SOURCE',
|
||||
]
|
||||
|
||||
common_cflags = [
|
||||
]
|
||||
|
||||
common_cxxflags = [
|
||||
]
|
||||
|
||||
test_common_flags = [
|
||||
'-fvisibility=hidden',
|
||||
|
||||
'-ffast-math',
|
||||
'-ftree-vectorize',
|
||||
]
|
||||
|
||||
test_cxxflags = test_common_flags + [
|
||||
'-fno-threadsafe-statics',
|
||||
'-fmerge-all-constants',
|
||||
|
||||
'-Wmissing-declarations',
|
||||
'-Wshadow',
|
||||
'-Wpointer-arith',
|
||||
'-Wcast-qual',
|
||||
'-Wwrite-strings',
|
||||
'-Wsign-compare',
|
||||
|
||||
'-Wno-non-virtual-dtor',
|
||||
|
||||
# work around bogus GCC7 warning "mangled name for ... will change
|
||||
# in C++17 because the exception specification is part of a function
|
||||
# type"
|
||||
'-Wno-noexcept-type',
|
||||
]
|
||||
|
||||
if compiler.get_id() == 'clang'
|
||||
# Workaround for clang bug
|
||||
# https://bugs.llvm.org/show_bug.cgi?id=32611
|
||||
test_cxxflags += '-funwind-tables'
|
||||
endif
|
||||
|
||||
test_cflags = test_common_flags + [
|
||||
'-Wmissing-prototypes',
|
||||
'-Wshadow',
|
||||
'-Wpointer-arith',
|
||||
'-Wstrict-prototypes',
|
||||
'-Wcast-qual',
|
||||
'-Wwrite-strings',
|
||||
'-pedantic',
|
||||
]
|
||||
|
||||
test_ldflags = [
|
||||
]
|
||||
|
||||
if get_option('buildtype') != 'debug'
|
||||
test_cxxflags += [
|
||||
'-ffunction-sections',
|
||||
'-fdata-sections',
|
||||
]
|
||||
test_cflags += [
|
||||
'-ffunction-sections',
|
||||
'-fdata-sections',
|
||||
]
|
||||
test_ldflags += [
|
||||
'-Wl,--gc-sections',
|
||||
]
|
||||
endif
|
||||
|
||||
add_global_arguments(common_cxxflags + compiler.get_supported_arguments(test_cxxflags), language: 'cpp')
|
||||
add_global_arguments(common_cflags + c_compiler.get_supported_arguments(test_cflags), language: 'c')
|
||||
add_global_link_arguments(compiler.get_supported_link_arguments(test_ldflags), language: 'cpp')
|
||||
|
||||
is_linux = host_machine.system() == 'linux'
|
||||
is_android = get_option('android_ndk') != ''
|
||||
is_darwin = host_machine.system() == 'darwin'
|
||||
is_windows = host_machine.system() == 'windows'
|
||||
is_haiku = host_machine.system() == 'haiku'
|
||||
|
||||
if is_android
|
||||
common_cppflags += '-DANDROID'
|
||||
endif
|
||||
|
||||
if is_windows
|
||||
common_cppflags += [
|
||||
'-DWIN32_LEAN_AND_MEAN',
|
||||
'-DWINVER=0x0600', '-D_WIN32_WINNT=0x0600',
|
||||
'-DSTRICT',
|
||||
'-DUNICODE', '-D_UNICODE',
|
||||
]
|
||||
|
||||
subdir('win32')
|
||||
endif
|
||||
|
||||
if is_android
|
||||
subdir('android')
|
||||
endif
|
||||
|
||||
add_global_arguments(common_cppflags, language: 'c')
|
||||
add_global_arguments(common_cppflags, language: 'cpp')
|
||||
|
||||
enable_daemon = not is_windows and not is_android and get_option('daemon')
|
||||
conf.set('ENABLE_DAEMON', enable_daemon)
|
||||
|
||||
conf.set('HAVE_LOCALE_H', compiler.has_header('locale.h'))
|
||||
|
||||
conf.set('HAVE_GETPWNAM_R', compiler.has_function('getpwnam_r'))
|
||||
conf.set('HAVE_GETPWUID_R', compiler.has_function('getpwuid_r'))
|
||||
conf.set('HAVE_INITGROUPS', compiler.has_function('initgroups'))
|
||||
conf.set('HAVE_FNMATCH', compiler.has_function('fnmatch'))
|
||||
|
||||
# Explicitly exclude Windows in this check because
|
||||
# https://github.com/mesonbuild/meson/issues/3672 (reported in 2018,
|
||||
# still not fixed in 2020) causes Meson to believe it exists, because
|
||||
# __builtin_strndup() exists (but strndup() still cannot be used).
|
||||
conf.set('HAVE_STRNDUP', not is_windows and compiler.has_function('strndup', prefix: '#define _GNU_SOURCE\n#include <string.h>'))
|
||||
|
||||
conf.set('HAVE_STRCASESTR', compiler.has_function('strcasestr'))
|
||||
|
||||
conf.set('HAVE_PRCTL', is_linux)
|
||||
|
||||
conf.set('USE_EVENTFD', is_linux and get_option('eventfd'))
|
||||
conf.set('USE_SIGNALFD', is_linux and get_option('signalfd'))
|
||||
|
||||
if is_windows
|
||||
conf.set('USE_WINSELECT', true)
|
||||
elif is_linux and get_option('epoll')
|
||||
conf.set('USE_EPOLL', true)
|
||||
else
|
||||
conf.set('USE_POLL', true)
|
||||
endif
|
||||
|
||||
if not get_option('syslog').disabled()
|
||||
if compiler.has_function('syslog')
|
||||
conf.set('HAVE_SYSLOG', true)
|
||||
elif get_option('syslog').enabled()
|
||||
error('syslog() not found')
|
||||
endif
|
||||
endif
|
||||
|
||||
enable_database = get_option('database')
|
||||
conf.set('ENABLE_DATABASE', enable_database)
|
||||
|
||||
enable_inotify = get_option('inotify') and is_linux and enable_database
|
||||
conf.set('ENABLE_INOTIFY', enable_inotify)
|
||||
|
||||
conf.set('ENABLE_DSD', get_option('dsd'))
|
||||
|
||||
inc = include_directories(
|
||||
'src',
|
||||
|
||||
# for the generated config.h
|
||||
'.',
|
||||
)
|
||||
|
||||
boost_dep = dependency('boost', version: '>= 1.58')
|
||||
if boost_dep.version() == '1.67'
|
||||
# https://github.com/MusicPlayerDaemon/MPD/pull/384
|
||||
# https://github.com/boostorg/lockfree/commit/12726cda009a855073b9bedbdce57b6ce7763da2
|
||||
warning('Your Boost version 1.67 is known to be buggy, and the MPD build will fail. Please upgrade to Boost 1.68 or later.')
|
||||
endif
|
||||
|
||||
sources = [
|
||||
version_cxx,
|
||||
'src/Main.cxx',
|
||||
'src/protocol/Ack.cxx',
|
||||
'src/protocol/ArgParser.cxx',
|
||||
'src/protocol/Result.cxx',
|
||||
'src/command/CommandError.cxx',
|
||||
'src/command/AllCommands.cxx',
|
||||
'src/command/QueueCommands.cxx',
|
||||
'src/command/TagCommands.cxx',
|
||||
'src/command/PlayerCommands.cxx',
|
||||
'src/command/PlaylistCommands.cxx',
|
||||
'src/command/FileCommands.cxx',
|
||||
'src/command/OutputCommands.cxx',
|
||||
'src/command/MessageCommands.cxx',
|
||||
'src/command/ClientCommands.cxx',
|
||||
'src/command/PartitionCommands.cxx',
|
||||
'src/command/OtherCommands.cxx',
|
||||
'src/command/CommandListBuilder.cxx',
|
||||
'src/Idle.cxx',
|
||||
'src/IdleFlags.cxx',
|
||||
'src/decoder/Domain.cxx',
|
||||
'src/decoder/Thread.cxx',
|
||||
'src/decoder/Control.cxx',
|
||||
'src/decoder/Bridge.cxx',
|
||||
'src/decoder/DecoderPrint.cxx',
|
||||
'src/client/Listener.cxx',
|
||||
'src/client/Client.cxx',
|
||||
'src/client/ClientEvent.cxx',
|
||||
'src/client/ClientExpire.cxx',
|
||||
'src/client/ClientGlobal.cxx',
|
||||
'src/client/ClientIdle.cxx',
|
||||
'src/client/ClientList.cxx',
|
||||
'src/client/ClientNew.cxx',
|
||||
'src/client/ClientProcess.cxx',
|
||||
'src/client/ClientRead.cxx',
|
||||
'src/client/ClientWrite.cxx',
|
||||
'src/client/ClientMessage.cxx',
|
||||
'src/client/ClientSubscribe.cxx',
|
||||
'src/client/ClientFile.cxx',
|
||||
'src/client/Response.cxx',
|
||||
'src/Listen.cxx',
|
||||
'src/LogInit.cxx',
|
||||
'src/LogBackend.cxx',
|
||||
'src/Log.cxx',
|
||||
'src/ls.cxx',
|
||||
'src/Instance.cxx',
|
||||
'src/win32/Win32Main.cxx',
|
||||
'src/MusicBuffer.cxx',
|
||||
'src/MusicPipe.cxx',
|
||||
'src/MusicChunk.cxx',
|
||||
'src/MusicChunkPtr.cxx',
|
||||
'src/Mapper.cxx',
|
||||
'src/Partition.cxx',
|
||||
'src/Permission.cxx',
|
||||
'src/player/CrossFade.cxx',
|
||||
'src/player/Thread.cxx',
|
||||
'src/player/Control.cxx',
|
||||
'src/PlaylistError.cxx',
|
||||
'src/PlaylistPrint.cxx',
|
||||
'src/PlaylistSave.cxx',
|
||||
'src/playlist/PlaylistStream.cxx',
|
||||
'src/playlist/PlaylistMapper.cxx',
|
||||
'src/playlist/PlaylistAny.cxx',
|
||||
'src/playlist/PlaylistSong.cxx',
|
||||
'src/playlist/PlaylistQueue.cxx',
|
||||
'src/playlist/Print.cxx',
|
||||
'src/db/PlaylistVector.cxx',
|
||||
'src/queue/Queue.cxx',
|
||||
'src/queue/QueuePrint.cxx',
|
||||
'src/queue/QueueSave.cxx',
|
||||
'src/queue/Playlist.cxx',
|
||||
'src/queue/PlaylistControl.cxx',
|
||||
'src/queue/PlaylistEdit.cxx',
|
||||
'src/queue/PlaylistTag.cxx',
|
||||
'src/queue/PlaylistState.cxx',
|
||||
'src/ReplayGainGlobal.cxx',
|
||||
'src/LocateUri.cxx',
|
||||
'src/SongUpdate.cxx',
|
||||
'src/SongLoader.cxx',
|
||||
'src/SongPrint.cxx',
|
||||
'src/SongSave.cxx',
|
||||
'src/StateFile.cxx',
|
||||
'src/StateFileConfig.cxx',
|
||||
'src/Stats.cxx',
|
||||
'src/TagPrint.cxx',
|
||||
'src/TagSave.cxx',
|
||||
'src/TagFile.cxx',
|
||||
'src/TagStream.cxx',
|
||||
'src/TimePrint.cxx',
|
||||
'src/mixer/Volume.cxx',
|
||||
'src/PlaylistFile.cxx',
|
||||
]
|
||||
|
||||
if not is_android
|
||||
sources += [
|
||||
'src/CommandLine.cxx',
|
||||
'src/unix/SignalHandlers.cxx',
|
||||
]
|
||||
else
|
||||
sources += [
|
||||
'src/android/Context.cxx',
|
||||
'src/android/AudioManager.cxx',
|
||||
'src/android/Environment.cxx',
|
||||
'src/android/LogListener.cxx',
|
||||
]
|
||||
endif
|
||||
|
||||
if enable_daemon
|
||||
sources += 'src/unix/Daemon.cxx'
|
||||
endif
|
||||
|
||||
if enable_database
|
||||
sources += [
|
||||
'src/queue/PlaylistUpdate.cxx',
|
||||
'src/command/StorageCommands.cxx',
|
||||
'src/command/DatabaseCommands.cxx',
|
||||
]
|
||||
endif
|
||||
|
||||
subdir('src/util')
|
||||
subdir('src/time')
|
||||
subdir('src/system')
|
||||
subdir('src/thread')
|
||||
subdir('src/net')
|
||||
subdir('src/event')
|
||||
|
||||
subdir('src/apple')
|
||||
|
||||
subdir('src/lib/dbus')
|
||||
subdir('src/lib/icu')
|
||||
subdir('src/lib/smbclient')
|
||||
subdir('src/lib/zlib')
|
||||
|
||||
subdir('src/lib/alsa')
|
||||
subdir('src/lib/curl')
|
||||
subdir('src/lib/expat')
|
||||
subdir('src/lib/ffmpeg')
|
||||
subdir('src/lib/gcrypt')
|
||||
subdir('src/lib/nfs')
|
||||
subdir('src/lib/oss')
|
||||
subdir('src/lib/pcre')
|
||||
subdir('src/lib/pulse')
|
||||
subdir('src/lib/sndio')
|
||||
subdir('src/lib/sqlite')
|
||||
subdir('src/lib/systemd')
|
||||
subdir('src/lib/upnp')
|
||||
subdir('src/lib/yajl')
|
||||
|
||||
subdir('src/fs')
|
||||
subdir('src/config')
|
||||
subdir('src/tag')
|
||||
subdir('src/pcm')
|
||||
subdir('src/neighbor')
|
||||
subdir('src/input')
|
||||
subdir('src/archive')
|
||||
subdir('src/filter')
|
||||
subdir('src/mixer')
|
||||
subdir('src/output')
|
||||
subdir('src/lib/xiph')
|
||||
subdir('src/decoder')
|
||||
subdir('src/encoder')
|
||||
subdir('src/song')
|
||||
subdir('src/playlist')
|
||||
subdir('src/zeroconf')
|
||||
|
||||
if curl_dep.found()
|
||||
sources += 'src/RemoteTagCache.cxx'
|
||||
endif
|
||||
|
||||
if sqlite_dep.found()
|
||||
sources += [
|
||||
'src/command/StickerCommands.cxx',
|
||||
'src/sticker/StickerDatabase.cxx',
|
||||
'src/sticker/StickerPrint.cxx',
|
||||
'src/sticker/SongSticker.cxx',
|
||||
]
|
||||
endif
|
||||
|
||||
basic = static_library(
|
||||
'basic',
|
||||
'src/ReplayGainInfo.cxx',
|
||||
'src/ReplayGainMode.cxx',
|
||||
'src/SingleMode.cxx',
|
||||
include_directories: inc,
|
||||
)
|
||||
|
||||
basic_dep = declare_dependency(
|
||||
link_with: basic,
|
||||
)
|
||||
|
||||
if enable_database
|
||||
subdir('src/storage')
|
||||
else
|
||||
storage_glue_dep = dependency('', required: false)
|
||||
endif
|
||||
subdir('src/db')
|
||||
|
||||
if neighbor_glue_dep.found()
|
||||
sources += 'src/command/NeighborCommands.cxx'
|
||||
endif
|
||||
|
||||
if archive_glue_dep.found()
|
||||
sources += [
|
||||
'src/TagArchive.cxx',
|
||||
]
|
||||
|
||||
if enable_database
|
||||
sources += ['src/db/update/Archive.cxx']
|
||||
endif
|
||||
endif
|
||||
|
||||
if is_windows
|
||||
sources += windows_resources
|
||||
endif
|
||||
|
||||
link_args = []
|
||||
more_deps = []
|
||||
if is_android
|
||||
subdir('src/java')
|
||||
target_type = 'shared_library'
|
||||
target_name = 'mpd'
|
||||
link_args += [
|
||||
'-Wl,--no-undefined,-shared,-Bsymbolic',
|
||||
'-llog',
|
||||
'-lz',
|
||||
]
|
||||
more_deps += [
|
||||
declare_dependency(sources: [classes_jar]),
|
||||
java_dep,
|
||||
]
|
||||
elif is_haiku
|
||||
target_type = 'executable'
|
||||
target_name = 'mpd.nores'
|
||||
link_args += [
|
||||
'-lnetwork',
|
||||
'-lbe',
|
||||
]
|
||||
else
|
||||
target_type = 'executable'
|
||||
target_name = 'mpd'
|
||||
endif
|
||||
|
||||
mpd = build_target(
|
||||
target_name,
|
||||
sources,
|
||||
target_type: target_type,
|
||||
include_directories: inc,
|
||||
dependencies: [
|
||||
basic_dep,
|
||||
config_dep,
|
||||
dbus_dep,
|
||||
fs_dep,
|
||||
net_dep,
|
||||
util_dep,
|
||||
event_dep,
|
||||
thread_dep,
|
||||
neighbor_glue_dep,
|
||||
input_glue_dep,
|
||||
archive_glue_dep,
|
||||
output_glue_dep,
|
||||
mixer_glue_dep,
|
||||
decoder_glue_dep,
|
||||
encoder_glue_dep,
|
||||
playlist_glue_dep,
|
||||
db_glue_dep,
|
||||
storage_glue_dep,
|
||||
song_dep,
|
||||
systemd_dep,
|
||||
sqlite_dep,
|
||||
zeroconf_dep,
|
||||
more_deps,
|
||||
],
|
||||
link_args: link_args,
|
||||
install: not is_android and not is_haiku,
|
||||
)
|
||||
|
||||
if is_android
|
||||
subdir('android/apk')
|
||||
endif
|
||||
|
||||
if is_haiku
|
||||
subdir('src/haiku')
|
||||
custom_target(
|
||||
'mpd',
|
||||
output: 'mpd',
|
||||
input: [mpd, rsrc],
|
||||
command: [addres, '@OUTPUT@', '@INPUT0@', '@INPUT1@'],
|
||||
install: true,
|
||||
install_dir: get_option('bindir'),
|
||||
)
|
||||
endif
|
||||
|
||||
configure_file(output: 'config.h', configuration: conf)
|
||||
|
||||
if systemd_dep.found()
|
||||
subdir('systemd')
|
||||
endif
|
||||
|
||||
install_data(
|
||||
'mpd.svg',
|
||||
install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', 'scalable', 'apps'),
|
||||
)
|
||||
|
||||
install_data(
|
||||
'AUTHORS', 'COPYING', 'NEWS', 'README.md',
|
||||
install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()),
|
||||
)
|
||||
|
||||
if get_option('documentation')
|
||||
subdir('doc')
|
||||
endif
|
||||
|
||||
if get_option('test')
|
||||
subdir('test')
|
||||
endif
|
||||
187
meson_options.txt
Normal file
187
meson_options.txt
Normal file
@@ -0,0 +1,187 @@
|
||||
option('documentation', type: 'boolean', value: false, description: 'Build documentation')
|
||||
|
||||
option('test', type: 'boolean', value: false, description: 'Build the unit tests and debug programs')
|
||||
|
||||
option('syslog', type: 'feature', description: 'syslog support')
|
||||
option('inotify', type: 'boolean', value: true, description: 'inotify support (for automatic database update)')
|
||||
|
||||
option('daemon', type: 'boolean', value: true, description: 'enable daemonization')
|
||||
option('systemd', type: 'feature', description: 'systemd support')
|
||||
|
||||
option('systemd_system_unit_dir', type: 'string', description: 'systemd system service directory')
|
||||
option('systemd_user_unit_dir', type: 'string', description: 'systemd user service directory')
|
||||
|
||||
#
|
||||
# Android
|
||||
#
|
||||
|
||||
option('android_sdk', type: 'string', description: 'The path where Android SDK is installed')
|
||||
option('android_ndk', type: 'string', description: 'The path where Android NDK is installed')
|
||||
option('android_abi', type: 'string', value: 'armeabi-v7a', description: 'The Android ABI to be built')
|
||||
|
||||
option('android_strip', type: 'string', value: 'strip', description: 'The "strip" tool from the NDK')
|
||||
|
||||
option('android_debug_keystore', type: 'string', description: 'The keystore file used to sign debug APK files')
|
||||
|
||||
option('android_keystore', type: 'string', description: 'The keystore file used to sign APK files')
|
||||
option('android_keyalias', type: 'string', description: 'The key alias used to sign APK files')
|
||||
option('android_keypass', type: 'string', description: 'The password of the keystore used to sign APK files')
|
||||
|
||||
#
|
||||
# System call support
|
||||
#
|
||||
|
||||
option('epoll', type: 'boolean', value: true, description: 'Use epoll on Linux')
|
||||
option('eventfd', type: 'boolean', value: true, description: 'Use eventfd() on Linux')
|
||||
option('signalfd', type: 'boolean', value: true, description: 'Use signalfd() on Linux')
|
||||
|
||||
#
|
||||
# Network support
|
||||
#
|
||||
|
||||
option('tcp', type: 'boolean', value: true, description: 'Support for clients connecting via TCP')
|
||||
option('ipv6', type: 'feature', description: 'Support for IPv6')
|
||||
option('local_socket', type: 'boolean', value: true, description: 'Support for clients connecting via local sockets')
|
||||
|
||||
#
|
||||
# Audio formats
|
||||
#
|
||||
|
||||
option('dsd', type: 'boolean', value: true, description: 'Support the DSD audio format')
|
||||
|
||||
#
|
||||
# Database plugins
|
||||
#
|
||||
|
||||
option('database', type: 'boolean', value: true, description: 'enable support for the music database')
|
||||
option('upnp', type: 'feature', description: 'UPnP client support')
|
||||
option('libmpdclient', type: 'feature', description: 'libmpdclient support (for the proxy database plugin)')
|
||||
|
||||
#
|
||||
# Neighbor plugins
|
||||
#
|
||||
|
||||
option('neighbor', type: 'boolean', value: true, description: 'enable support for neighbor discovery')
|
||||
|
||||
#
|
||||
# Storage plugins
|
||||
#
|
||||
|
||||
option('udisks', type: 'feature', description: 'Support for removable media using udisks2')
|
||||
option('webdav', type: 'feature', description: 'WebDAV support using CURL and Expat')
|
||||
|
||||
#
|
||||
# Playlist plugins
|
||||
#
|
||||
|
||||
option('cue', type: 'boolean', value: true, description: 'CUE sheet support')
|
||||
|
||||
#
|
||||
# Input plugins
|
||||
#
|
||||
|
||||
option('cdio_paranoia', type: 'feature', description: 'libcdio_paranoia input plugin')
|
||||
option('curl', type: 'feature', description: 'HTTP client using CURL')
|
||||
option('mms', type: 'feature', description: 'MMS protocol support using libmms')
|
||||
option('nfs', type: 'feature', description: 'NFS protocol support using libnfs')
|
||||
option('smbclient', type: 'feature', description: 'SMB support using libsmbclient')
|
||||
|
||||
#
|
||||
# Commercial services
|
||||
#
|
||||
|
||||
option('qobuz', type: 'feature', description: 'Qobuz client')
|
||||
option('soundcloud', type: 'feature', description: 'SoundCloud client')
|
||||
option('tidal', type: 'feature', description: 'Tidal client')
|
||||
|
||||
#
|
||||
# Archive plugins
|
||||
#
|
||||
|
||||
option('bzip2', type: 'feature', description: 'bzip2 support using libbz2')
|
||||
option('iso9660', type: 'feature', description: 'ISO9660 support using libiso9660')
|
||||
option('zzip', type: 'feature', description: 'ZIP support using zziplib')
|
||||
|
||||
#
|
||||
# Tag plugins
|
||||
#
|
||||
|
||||
option('id3tag', type: 'feature', description: 'ID3 support using libid3tag')
|
||||
option('chromaprint', type: 'feature', description: 'ChromaPrint / AcoustID support')
|
||||
|
||||
#
|
||||
# Decoder plugins
|
||||
#
|
||||
|
||||
option('adplug', type: 'feature', description: 'AdPlug decoder plugin')
|
||||
option('audiofile', type: 'feature', description: 'libaudiofile decoder plugin')
|
||||
option('faad', type: 'feature', description: 'AAC decoder using libfaad')
|
||||
option('ffmpeg', type: 'feature', description: 'FFmpeg codec support')
|
||||
option('flac', type: 'feature', description: 'FLAC decoder plugin')
|
||||
option('fluidsynth', type: 'feature', description: 'fluidsynth MIDI decoder plugin')
|
||||
option('gme', type: 'feature', description: 'Game Music Emulator decoder plugin')
|
||||
option('mad', type: 'feature', description: 'MP3 decoder using libmad')
|
||||
option('mikmod', type: 'feature', description: 'MikMod decoder plugin')
|
||||
option('modplug', type: 'feature', description: 'Modplug decoder plugin')
|
||||
option('mpcdec', type: 'feature', description: 'Musepack decoder plugin')
|
||||
option('mpg123', type: 'feature', description: 'MP3 decoder using libmpg123')
|
||||
option('opus', type: 'feature', description: 'Opus decoder plugin')
|
||||
option('sidplay', type: 'feature', description: 'C64 SID support via libsidplayfp or libsidplay2')
|
||||
option('sndfile', type: 'feature', description: 'libsndfile decoder plugin')
|
||||
option('tremor', type: 'feature', description: 'Fixed-point vorbis decoder plugin')
|
||||
option('vorbis', type: 'feature', description: 'Vorbis decoder plugin')
|
||||
option('wavpack', type: 'feature', description: 'WavPack decoder plugin')
|
||||
option('wildmidi', type: 'feature', description: 'WildMidi decoder plugin')
|
||||
|
||||
#
|
||||
# Encoder plugins
|
||||
#
|
||||
|
||||
option('vorbisenc', type: 'feature', description: 'Vorbis encoder plugin')
|
||||
option('lame', type: 'feature', description: 'LAME MP3 encoder plugin')
|
||||
option('twolame', type: 'feature', description: 'TwoLAME MP2 encoder plugin')
|
||||
option('shine', type: 'feature', description: 'shine MP3 encoder plugin')
|
||||
option('wave_encoder', type: 'boolean', value: true, description: 'PCM wave encoder encoder plugin')
|
||||
|
||||
#
|
||||
# Filter plugins
|
||||
#
|
||||
|
||||
option('libsamplerate', type: 'feature', description: 'libsamplerate resampler')
|
||||
option('soxr', type: 'feature', description: 'libsoxr resampler')
|
||||
|
||||
#
|
||||
# Output plugins
|
||||
#
|
||||
|
||||
option('alsa', type: 'feature', description: 'ALSA support')
|
||||
option('ao', type: 'feature', description: 'libao output plugin')
|
||||
option('fifo', type: 'boolean', value: true, description: 'FIFO output plugin')
|
||||
option('httpd', type: 'boolean', value: true, description: 'HTTP streaming output plugin')
|
||||
option('jack', type: 'feature', description: 'JACK output plugin')
|
||||
option('openal', type: 'feature', description: 'OpenAL output plugin')
|
||||
option('oss', type: 'feature', description: 'Open Sound System support')
|
||||
option('pipe', type: 'boolean', value: true, description: 'Pipe output plugin')
|
||||
option('pulse', type: 'feature', description: 'PulseAudio support')
|
||||
option('recorder', type: 'boolean', value: true, description: 'Recorder output plugin')
|
||||
option('shout', type: 'feature', description: 'Shoutcast streaming support using libshout')
|
||||
option('sndio', type: 'feature', description: 'sndio output plugin')
|
||||
option('solaris_output', type: 'feature', description: 'Solaris /dev/audio support')
|
||||
|
||||
#
|
||||
# Misc libraries
|
||||
#
|
||||
|
||||
option('dbus', type: 'feature', description: 'D-Bus support')
|
||||
option('expat', type: 'feature', description: 'Expat XML support')
|
||||
option('icu', type: 'feature', description: 'Use libicu for Unicode')
|
||||
option('iconv', type: 'feature', description: 'Use iconv() for character set conversion')
|
||||
option('pcre', type: 'feature', description: 'Enable regular expression support (using libpcre)')
|
||||
option('sqlite', type: 'feature', description: 'SQLite database support (for stickers)')
|
||||
option('yajl', type: 'feature', description: 'libyajl for YAML support')
|
||||
option('zlib', type: 'feature', description: 'zlib support (for database compression)')
|
||||
|
||||
option('zeroconf', type: 'combo',
|
||||
choices: ['auto', 'avahi', 'bonjour', 'disabled'],
|
||||
value: 'auto',
|
||||
description: 'Zeroconf support')
|
||||
857
mpd.svg
Normal file
857
mpd.svg
Normal file
@@ -0,0 +1,857 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
x="0"
|
||||
y="0"
|
||||
width="128"
|
||||
height="128"
|
||||
id="svg1"
|
||||
sodipodi:version="0.32"
|
||||
sodipodi:docname="mpd.svg"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-test5.png"
|
||||
inkscape:export-xdpi="76.799988"
|
||||
inkscape:export-ydpi="76.799988">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
inkscape:zoom="2.6884788"
|
||||
inkscape:cx="71.610485"
|
||||
inkscape:cy="61.484977"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<defs
|
||||
id="defs3">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 80 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="160 : 80 : 1"
|
||||
inkscape:persp3d-origin="80 : 53.333333 : 1"
|
||||
id="perspective118" />
|
||||
<linearGradient
|
||||
id="linearGradient919">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.86092716;"
|
||||
offset="0.0000000"
|
||||
id="stop920" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop921" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1068">
|
||||
<stop
|
||||
offset="0.0000000"
|
||||
style="stop-color:#d2d2d2;stop-opacity:1.0000000;"
|
||||
id="stop1070" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
id="stop1069" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1065">
|
||||
<stop
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
id="stop1067" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#c2bfbf;stop-opacity:0.99607843;"
|
||||
id="stop1066" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1060">
|
||||
<stop
|
||||
offset="0.0000000"
|
||||
style="stop-color:#878787;stop-opacity:1.0000000;"
|
||||
id="stop1063" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#000000;stop-opacity:0.99607843;"
|
||||
id="stop1061" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient645">
|
||||
<stop
|
||||
style="stop-color:#aca597;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop646" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop647" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient593">
|
||||
<stop
|
||||
style="stop-color:#478acf;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop594" />
|
||||
<stop
|
||||
style="stop-color:#65c6f7;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient574">
|
||||
<stop
|
||||
style="stop-color:#85ad92;stop-opacity:1.0000;"
|
||||
offset="0"
|
||||
id="stop575" />
|
||||
<stop
|
||||
style="stop-color:#559db2;stop-opacity:0.7725;"
|
||||
offset="1"
|
||||
id="stop576" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient570">
|
||||
<stop
|
||||
style="stop-color:#999999;stop-opacity:0.7176;"
|
||||
offset="0"
|
||||
id="stop571" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.3725;"
|
||||
offset="1"
|
||||
id="stop572" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient573"
|
||||
xlink:href="#linearGradient1068"
|
||||
x1="40.458553"
|
||||
y1="389.65582"
|
||||
x2="36.063946"
|
||||
y2="357.28375"
|
||||
gradientTransform="matrix(2.3025192,0,0,0.29683004,-0.91913426,-1.5117091)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient1213"
|
||||
xlink:href="#linearGradient1068"
|
||||
x1="123.71407"
|
||||
y1="141.41566"
|
||||
x2="98.353867"
|
||||
y2="113.41083"
|
||||
gradientTransform="matrix(0.91680324,0,0,0.74547827,-0.91913426,-1.5117091)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
id="radialGradient581"
|
||||
xlink:href="#linearGradient919"
|
||||
cx="0.095785439"
|
||||
cy="0.16814159"
|
||||
r="1.5409589"
|
||||
fx="0.095785439"
|
||||
fy="0.16814159" />
|
||||
<linearGradient
|
||||
id="linearGradient580"
|
||||
xlink:href="#linearGradient1068"
|
||||
x1="132.0352"
|
||||
y1="135.68469"
|
||||
x2="119.62381"
|
||||
y2="111.07157"
|
||||
gradientTransform="matrix(0.90170536,0,0,0.75796032,-0.91913426,-1.5117091)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1060"
|
||||
id="linearGradient901"
|
||||
x1="0.93491787"
|
||||
y1="0.92044502"
|
||||
x2="-0.052546836"
|
||||
y2="0.20347559" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient593"
|
||||
id="linearGradient902" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1068"
|
||||
id="linearGradient916"
|
||||
x1="0.14831461"
|
||||
y1="-1.6875"
|
||||
x2="0.43370786"
|
||||
y2="1.8125" />
|
||||
<defs
|
||||
id="defs890">
|
||||
<linearGradient
|
||||
id="linearGradient922"
|
||||
x1="0"
|
||||
y1="0.5"
|
||||
x2="1"
|
||||
y2="0.5"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad"
|
||||
xlink:href="#linearGradient1065" />
|
||||
<linearGradient
|
||||
id="linearGradient908"
|
||||
x1="0"
|
||||
y1="0.5"
|
||||
x2="1"
|
||||
y2="0.5"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad"
|
||||
xlink:href="#linearGradient1060" />
|
||||
<linearGradient
|
||||
id="linearGradient894"
|
||||
x1="0"
|
||||
y1="0.5"
|
||||
x2="1"
|
||||
y2="0.5"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad"
|
||||
xlink:href="#linearGradient1068" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient894"
|
||||
id="linearGradient897"
|
||||
x1="0.5955056"
|
||||
y1="-0.33587787"
|
||||
x2="0.61348313"
|
||||
y2="1.1908396" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient894"
|
||||
id="linearGradient898"
|
||||
x1="0.96449792"
|
||||
y1="1.0278323"
|
||||
x2="0.46738392"
|
||||
y2="0.21800731" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient908"
|
||||
id="linearGradient907"
|
||||
x1="0.57078654"
|
||||
y1="2.3770492"
|
||||
x2="0.33258426"
|
||||
y2="0.49180329" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient922"
|
||||
id="linearGradient921"
|
||||
x1="0.47058824"
|
||||
y1="0.15384616"
|
||||
x2="0.46547315"
|
||||
y2="0.98380566" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient922"
|
||||
id="linearGradient948" />
|
||||
<defs
|
||||
id="defs987">
|
||||
<linearGradient
|
||||
id="linearGradient855"
|
||||
x1="0"
|
||||
y1="0.5"
|
||||
x2="1"
|
||||
y2="0.5"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad"
|
||||
xlink:href="#linearGradient908" />
|
||||
<linearGradient
|
||||
id="linearGradient1188"
|
||||
x1="0"
|
||||
y1="0.5"
|
||||
x2="1"
|
||||
y2="0.5"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad"
|
||||
xlink:href="#linearGradient922" />
|
||||
<linearGradient
|
||||
id="linearGradient831">
|
||||
<stop
|
||||
style="stop-color:#94897f;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop832" />
|
||||
<stop
|
||||
style="stop-color:#fff5fe;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop833" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1188"
|
||||
id="linearGradient834"
|
||||
x1="0.87550199"
|
||||
y1="0.34817815"
|
||||
x2="-0.29317269"
|
||||
y2="0.93522269"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient1188"
|
||||
id="radialGradient835"
|
||||
r="0.55628061"
|
||||
fy="0.28125"
|
||||
fx="0.59090906"
|
||||
cy="0.28125"
|
||||
cx="0.59090906"
|
||||
spreadMethod="pad" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1188"
|
||||
id="linearGradient893"
|
||||
x1="0.12793733"
|
||||
y1="0.76923078"
|
||||
x2="0.49608356"
|
||||
y2="0.70850199" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient855"
|
||||
id="linearGradient625"
|
||||
x1="0.035955057"
|
||||
y1="1.0276498"
|
||||
x2="0.053932585"
|
||||
y2="-0.359447" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1188"
|
||||
id="linearGradient627"
|
||||
x1="1.2826855"
|
||||
y1="0.12550607"
|
||||
x2="-0.15547703"
|
||||
y2="0.96356273" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient1188"
|
||||
id="radialGradient628"
|
||||
r="1.5982224"
|
||||
fy="0.4866707"
|
||||
fx="0.36789617"
|
||||
cy="0.4866707"
|
||||
cx="0.36789617"
|
||||
gradientTransform="scale(0.877379,1.139758)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1188"
|
||||
id="linearGradient628"
|
||||
x1="0.76923078"
|
||||
y1="0.14979757"
|
||||
x2="0.41909814"
|
||||
y2="0.73279351" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview898"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.4732669"
|
||||
inkscape:cx="50.051177"
|
||||
inkscape:cy="18.096983"
|
||||
inkscape:window-width="1022"
|
||||
inkscape:window-height="670"
|
||||
showguides="false"
|
||||
snaptoguides="false"
|
||||
showgrid="false"
|
||||
snaptogrid="false"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25">
|
||||
<sodipodi:guide
|
||||
orientation="vertical"
|
||||
position="28.705556"
|
||||
id="guide879" />
|
||||
<sodipodi:guide
|
||||
orientation="horizontal"
|
||||
position="30.130655"
|
||||
id="guide880" />
|
||||
</sodipodi:namedview>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1003"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.3368738"
|
||||
inkscape:cx="24.541029"
|
||||
inkscape:cy="14.368596"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="499"
|
||||
showguides="true"
|
||||
snaptoguides="true"
|
||||
inkscape:window-x="138"
|
||||
inkscape:window-y="169" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1060"
|
||||
id="linearGradient1304"
|
||||
x1="-0.20218579"
|
||||
y1="0.21681416"
|
||||
x2="0.67759562"
|
||||
y2="0.57522124" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient1065"
|
||||
id="linearGradient1322"
|
||||
x1="0.32404181"
|
||||
y1="0.77876109"
|
||||
x2="0.24041812"
|
||||
y2="0.26548672" />
|
||||
<defs
|
||||
id="defs989">
|
||||
<linearGradient
|
||||
id="linearGradient850">
|
||||
<stop
|
||||
style="stop-color:#eed680;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop852" />
|
||||
<stop
|
||||
style="stop-color:#dfb546;stop-opacity:1.0000000;"
|
||||
offset="0.68035328"
|
||||
id="stop858" />
|
||||
<stop
|
||||
style="stop-color:#d8a429;stop-opacity:1.0000000;"
|
||||
offset="0.77277374"
|
||||
id="stop859" />
|
||||
<stop
|
||||
style="stop-color:#d1940c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop857" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient850"
|
||||
id="linearGradient569"
|
||||
x1="0.11875"
|
||||
y1="0.12612613"
|
||||
x2="0.59375"
|
||||
y2="0.66066068"
|
||||
spreadMethod="pad" />
|
||||
<linearGradient
|
||||
id="linearGradient839">
|
||||
<stop
|
||||
style="stop-color:#46a046;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop840" />
|
||||
<stop
|
||||
style="stop-color:#df421e;stop-opacity:1.0000000;"
|
||||
offset="0.39364964"
|
||||
id="stop841" />
|
||||
<stop
|
||||
style="stop-color:#ada7c8;stop-opacity:1.0000000;"
|
||||
offset="0.72036445"
|
||||
id="stop842" />
|
||||
<stop
|
||||
style="stop-color:#eed680;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop843" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient839"
|
||||
id="linearGradient836"
|
||||
x1="1.3267924e-17"
|
||||
y1="0.5"
|
||||
x2="1"
|
||||
y2="0.5" />
|
||||
<defs
|
||||
id="defs604">
|
||||
<linearGradient
|
||||
id="linearGradient622">
|
||||
<stop
|
||||
style="stop-color:#f8e29d;stop-opacity:0.4471;"
|
||||
offset="0"
|
||||
id="stop623" />
|
||||
<stop
|
||||
style="stop-color:#272d2d;stop-opacity:0.4784;"
|
||||
offset="1"
|
||||
id="stop624" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient617">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop618" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop619" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient613">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.6235;"
|
||||
offset="0"
|
||||
id="stop614" />
|
||||
<stop
|
||||
style="stop-color:#5d6567;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop615" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient607">
|
||||
<stop
|
||||
style="stop-color:#d7d5d5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop608" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.4039;"
|
||||
offset="1"
|
||||
id="stop609" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient607"
|
||||
id="radialGradient610"
|
||||
cx="1.4287461"
|
||||
cy="0.75323397"
|
||||
r="0.85534656"
|
||||
fx="1.4287461"
|
||||
fy="0.75323397"
|
||||
gradientTransform="matrix(1,2.268336e-6,-1.975559e-5,1,5.713033e-8,3.856326e-8)" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient617"
|
||||
id="linearGradient612"
|
||||
x1="7.7024956"
|
||||
y1="-2.0263922"
|
||||
x2="62.759903"
|
||||
y2="56.137772"
|
||||
gradientTransform="scale(0.9953779,1.0046436)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient613"
|
||||
id="radialGradient616"
|
||||
cx="58.70882"
|
||||
cy="53.831562"
|
||||
r="43.551846"
|
||||
fx="58.70882"
|
||||
fy="53.831562"
|
||||
gradientTransform="scale(0.99517298,1.0048504)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient617"
|
||||
id="linearGradient621" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient617"
|
||||
id="linearGradient626"
|
||||
x1="72.060211"
|
||||
y1="55.161442"
|
||||
x2="32.409"
|
||||
y2="12.126946"
|
||||
gradientTransform="matrix(0.995134,-1.068631e-5,-1.31398e-7,1.00489,0,0)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient607"
|
||||
id="linearGradient687"
|
||||
x1="67.707405"
|
||||
y1="49.314793"
|
||||
x2="-10.031048"
|
||||
y2="4.6068792"
|
||||
gradientTransform="scale(0.99522839,1.0047945)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient617"
|
||||
id="linearGradient742"
|
||||
x1="-7.4378386"
|
||||
y1="25.923714"
|
||||
x2="18.009745"
|
||||
y2="10.089797"
|
||||
gradientTransform="scale(0.889853,1.123781)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview889"
|
||||
showguides="true"
|
||||
snaptoguides="true"
|
||||
inkscape:zoom="7.5625000"
|
||||
inkscape:cx="24.000000"
|
||||
inkscape:cy="24.000000"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="496"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1023"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.5521067"
|
||||
inkscape:cx="66.459318"
|
||||
inkscape:cy="62.629296"
|
||||
inkscape:window-width="1150"
|
||||
inkscape:window-height="752"
|
||||
showgrid="true"
|
||||
snaptogrid="true"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="29">
|
||||
<inkscape:grid
|
||||
id="GridFromPre046Settings"
|
||||
type="xygrid"
|
||||
originx="0px"
|
||||
originy="0px"
|
||||
spacingx="1.0000000mm"
|
||||
spacingy="1.0000000mm"
|
||||
color="#0000ff"
|
||||
empcolor="#0000ff"
|
||||
opacity="0.2"
|
||||
empopacity="0.4"
|
||||
empspacing="5" />
|
||||
</sodipodi:namedview>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1068"
|
||||
id="linearGradient2924"
|
||||
x1="41.673889"
|
||||
y1="320.40921"
|
||||
x2="36.082947"
|
||||
y2="279.22458"
|
||||
gradientTransform="matrix(2.3376099,0,0,0.29237422,-0.91913426,-1.5117091)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1068"
|
||||
id="linearGradient2926"
|
||||
x1="134.95444"
|
||||
y1="108.16693"
|
||||
x2="102.05431"
|
||||
y2="71.835884"
|
||||
gradientTransform="matrix(0.91680324,0,0,0.74547824,-0.91913426,-1.5117091)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1068"
|
||||
id="linearGradient2928"
|
||||
x1="145.32188"
|
||||
y1="101.97199"
|
||||
x2="129.22044"
|
||||
y2="70.041069"
|
||||
gradientTransform="matrix(0.90170536,0,0,0.75796032,-0.91913426,-1.5117091)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<rect
|
||||
style="fill-opacity:0.47154475;fill-rule:evenodd;stroke-width:3pt"
|
||||
id="rect918"
|
||||
width="48.72493"
|
||||
height="42.16835"
|
||||
ry="0.74231374"
|
||||
x="67.536102"
|
||||
y="66.474693"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.7811048" />
|
||||
<rect
|
||||
style="fill-opacity:0.47154475;fill-rule:evenodd;stroke-width:3pt"
|
||||
id="rect1006"
|
||||
width="63.211483"
|
||||
height="54.705563"
|
||||
ry="0.74231374"
|
||||
x="64.47226"
|
||||
y="30.558294"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.7811048" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.47058824;fill-rule:evenodd"
|
||||
id="rect1005"
|
||||
width="57.843418"
|
||||
height="9.0050545"
|
||||
ry="0.62889248"
|
||||
x="65.398254"
|
||||
y="82.153206"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.66175652" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient2924);fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.82671446"
|
||||
id="rect1007"
|
||||
width="54.910637"
|
||||
height="6.1445785"
|
||||
ry="0.42912331"
|
||||
x="64.622299"
|
||||
y="82.282539"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.44939452" />
|
||||
<rect
|
||||
width="57.905403"
|
||||
height="47.084496"
|
||||
ry="1.7822117"
|
||||
x="63.784973"
|
||||
y="32.456562"
|
||||
style="font-size:12px;fill:url(#linearGradient2926);fill-rule:evenodd;stroke:#000000;stroke-width:0"
|
||||
id="rect1009"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="1.6336281" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.47058824;fill-rule:evenodd"
|
||||
id="rect971"
|
||||
width="44.58709"
|
||||
height="6.9413123"
|
||||
ry="0.62889248"
|
||||
x="68.249886"
|
||||
y="106.24529"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.66175652" />
|
||||
<rect
|
||||
width="64.637024"
|
||||
height="54.068516"
|
||||
ry="1.4120796"
|
||||
x="59.853096"
|
||||
y="28.740753"
|
||||
style="font-size:12px;fill:url(#linearGradient2928);fill-rule:evenodd;stroke:#000000;stroke-width:1.65869105"
|
||||
id="rect1008"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="1.3970968" />
|
||||
<rect
|
||||
width="51.129478"
|
||||
height="39.964478"
|
||||
ry="0.5422883"
|
||||
x="66.358932"
|
||||
y="34.89621"
|
||||
style="font-size:12px;fill:#00b4ed;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79054338;stroke-linejoin:round"
|
||||
id="rect976"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.5422883" />
|
||||
<metadata
|
||||
id="metadata982">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<rect
|
||||
width="44.634872"
|
||||
height="36.293858"
|
||||
ry="1.7822117"
|
||||
x="67.006332"
|
||||
y="67.937927"
|
||||
style="font-size:12px;fill:url(#linearGradient1213);fill-rule:evenodd;stroke:#000000;stroke-width:0"
|
||||
id="rect575"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="1.633628" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="font-size:12px;fill:#444040;fill-opacity:0.47058824;fill-rule:evenodd"
|
||||
id="path672"
|
||||
d="m 68.473,57.85183 a 23.629898,3.2222576 0 1 1 -47.259797,0 23.629898,3.2222576 0 1 1 47.259797,0 z"
|
||||
sodipodi:cx="44.843102"
|
||||
sodipodi:cy="57.85183"
|
||||
sodipodi:rx="23.629898"
|
||||
sodipodi:ry="3.2222576"
|
||||
transform="matrix(1.4221482,0,-0.30247168,1.9834766,9.6201687,-10.428817)"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big2.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="font-size:12px;fill:#4e4d4b;fill-rule:evenodd;stroke:#000000;stroke-width:2.30019999;stroke-opacity:0.9565"
|
||||
id="path625"
|
||||
d="m 58.291138,27.531645 a 19.367088,19.556963 0 1 1 -38.734177,0 19.367088,19.556963 0 1 1 38.734177,0 z"
|
||||
sodipodi:cx="38.924049"
|
||||
sodipodi:cy="27.531645"
|
||||
sodipodi:rx="19.367088"
|
||||
sodipodi:ry="19.556963"
|
||||
transform="matrix(-1.0172416,-0.47376693,-0.5523759,1.3286212,116.84611,57.272851)"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big2.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="font-size:12px;fill:url(#linearGradient612);fill-rule:evenodd;stroke:#000000;stroke-width:2.06100011;stroke-opacity:0.9565"
|
||||
id="path605"
|
||||
d="m 58.291138,27.531645 a 19.367088,19.556963 0 1 1 -38.734177,0 19.367088,19.556963 0 1 1 38.734177,0 z"
|
||||
sodipodi:cx="38.924049"
|
||||
sodipodi:cy="27.531645"
|
||||
sodipodi:rx="19.367088"
|
||||
sodipodi:ry="19.556963"
|
||||
transform="matrix(-1.4321234,-0.79696518,-1.1299666,2.2349846,128.07685,29.383033)"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big2.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="font-size:12px;fill:url(#radialGradient616);fill-rule:evenodd;stroke:#000000;stroke-width:0.317;stroke-opacity:0.97829997"
|
||||
id="path606"
|
||||
d="m 58.291138,27.531645 a 19.367088,19.556963 0 1 1 -38.734177,0 19.367088,19.556963 0 1 1 38.734177,0 z"
|
||||
sodipodi:cx="38.924049"
|
||||
sodipodi:cy="27.531645"
|
||||
sodipodi:rx="19.367088"
|
||||
sodipodi:ry="19.556963"
|
||||
transform="matrix(-1.1546358,-0.69851175,-0.95634664,1.9588777,108.06887,31.115628)"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big2.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:1.63499999"
|
||||
id="path686"
|
||||
d="m 58.291138,27.531645 a 19.367088,19.556963 0 1 1 -38.734177,0 19.367088,19.556963 0 1 1 38.734177,0 z"
|
||||
sodipodi:cx="38.924049"
|
||||
sodipodi:cy="27.531645"
|
||||
sodipodi:rx="19.367088"
|
||||
sodipodi:ry="19.556963"
|
||||
transform="matrix(-0.39495459,-0.4546194,-0.52881207,0.94219495,73.198184,52.427791)"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big2.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="font-size:12px;fill:url(#linearGradient687);fill-rule:evenodd;stroke:#3f3b3b;stroke-width:0.77380002"
|
||||
id="path611"
|
||||
d="m 58.291138,27.531645 a 19.367088,19.556963 0 1 1 -38.734177,0 19.367088,19.556963 0 1 1 38.734177,0 z"
|
||||
sodipodi:cx="38.924049"
|
||||
sodipodi:cy="27.531645"
|
||||
sodipodi:rx="19.367088"
|
||||
sodipodi:ry="19.556963"
|
||||
transform="matrix(-0.36949013,-0.40957751,-0.49471918,0.84885391,70.248021,52.066881)"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big2.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient573);fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.82671446"
|
||||
id="rect934"
|
||||
width="42.326431"
|
||||
height="4.7363882"
|
||||
ry="0.42912331"
|
||||
x="67.651756"
|
||||
y="106.34497"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.44939449" />
|
||||
<rect
|
||||
width="49.823761"
|
||||
height="41.677303"
|
||||
ry="1.4120796"
|
||||
x="63.975548"
|
||||
y="65.073692"
|
||||
style="font-size:12px;fill:url(#linearGradient580);fill-rule:evenodd;stroke:#000000;stroke-width:1.27855873;stroke-opacity:1"
|
||||
id="rect562"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="1.3970969" />
|
||||
<rect
|
||||
width="39.411831"
|
||||
height="30.805574"
|
||||
ry="0.5422883"
|
||||
x="68.990387"
|
||||
y="70.097008"
|
||||
style="font-size:12px;fill:#003d88;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.61407685;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.93023257"
|
||||
id="rect975"
|
||||
inkscape:export-filename="/cowserver/documents/httpd/vhosts/images/mpd-big7.png"
|
||||
inkscape:export-xdpi="721.66998"
|
||||
inkscape:export-ydpi="721.66998"
|
||||
rx="0.5422883" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 27 KiB |
64
python/build/autotools.py
Normal file
64
python/build/autotools.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import os.path, subprocess, sys
|
||||
|
||||
from build.makeproject import MakeProject
|
||||
|
||||
class AutotoolsProject(MakeProject):
|
||||
def __init__(self, url, md5, installed, configure_args=[],
|
||||
autogen=False,
|
||||
autoreconf=False,
|
||||
cppflags='',
|
||||
ldflags='',
|
||||
libs='',
|
||||
subdirs=None,
|
||||
**kwargs):
|
||||
MakeProject.__init__(self, url, md5, installed, **kwargs)
|
||||
self.configure_args = configure_args
|
||||
self.autogen = autogen
|
||||
self.autoreconf = autoreconf
|
||||
self.cppflags = cppflags
|
||||
self.ldflags = ldflags
|
||||
self.libs = libs
|
||||
self.subdirs = subdirs
|
||||
|
||||
def configure(self, toolchain):
|
||||
src = self.unpack(toolchain)
|
||||
if self.autogen:
|
||||
if sys.platform == 'darwin':
|
||||
subprocess.check_call(['glibtoolize', '--force'], cwd=src)
|
||||
else:
|
||||
subprocess.check_call(['libtoolize', '--force'], cwd=src)
|
||||
subprocess.check_call(['aclocal'], cwd=src)
|
||||
subprocess.check_call(['automake', '--add-missing', '--force-missing', '--foreign'], cwd=src)
|
||||
subprocess.check_call(['autoconf'], cwd=src)
|
||||
if self.autoreconf:
|
||||
subprocess.check_call(['autoreconf', '-vif'], cwd=src)
|
||||
|
||||
build = self.make_build_path(toolchain)
|
||||
|
||||
configure = [
|
||||
os.path.join(src, 'configure'),
|
||||
'CC=' + toolchain.cc,
|
||||
'CXX=' + toolchain.cxx,
|
||||
'CFLAGS=' + toolchain.cflags,
|
||||
'CXXFLAGS=' + toolchain.cxxflags,
|
||||
'CPPFLAGS=' + toolchain.cppflags + ' ' + self.cppflags,
|
||||
'LDFLAGS=' + toolchain.ldflags + ' ' + self.ldflags,
|
||||
'LIBS=' + toolchain.libs + ' ' + self.libs,
|
||||
'AR=' + toolchain.ar,
|
||||
'RANLIB=' + toolchain.ranlib,
|
||||
'STRIP=' + toolchain.strip,
|
||||
'--host=' + toolchain.arch,
|
||||
'--prefix=' + toolchain.install_prefix,
|
||||
'--enable-silent-rules',
|
||||
] + self.configure_args
|
||||
|
||||
subprocess.check_call(configure, cwd=build, env=toolchain.env)
|
||||
return build
|
||||
|
||||
def build(self, toolchain):
|
||||
build = self.configure(toolchain)
|
||||
if self.subdirs is not None:
|
||||
for subdir in self.subdirs:
|
||||
MakeProject.build(self, toolchain, os.path.join(build, subdir))
|
||||
else:
|
||||
MakeProject.build(self, toolchain, build)
|
||||
23
python/build/boost.py
Normal file
23
python/build/boost.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import os, shutil
|
||||
import re
|
||||
|
||||
from build.project import Project
|
||||
|
||||
class BoostProject(Project):
|
||||
def __init__(self, url, md5, installed,
|
||||
**kwargs):
|
||||
m = re.match(r'.*/boost_(\d+)_(\d+)_(\d+)\.tar\.bz2$', url)
|
||||
version = "%s.%s.%s" % (m.group(1), m.group(2), m.group(3))
|
||||
Project.__init__(self, url, md5, installed,
|
||||
name='boost', version=version,
|
||||
**kwargs)
|
||||
|
||||
def build(self, toolchain):
|
||||
src = self.unpack(toolchain)
|
||||
|
||||
# install the headers manually; don't build any library
|
||||
# (because right now, we only use header-only libraries)
|
||||
includedir = os.path.join(toolchain.install_prefix, 'include')
|
||||
dest = os.path.join(includedir, 'boost')
|
||||
shutil.rmtree(dest, ignore_errors=True)
|
||||
shutil.copytree(os.path.join(src, 'boost'), dest)
|
||||
45
python/build/cmake.py
Normal file
45
python/build/cmake.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import subprocess
|
||||
|
||||
from build.project import Project
|
||||
|
||||
def configure(toolchain, src, build, args=()):
|
||||
cross_args = []
|
||||
|
||||
if toolchain.is_windows:
|
||||
cross_args.append('-DCMAKE_SYSTEM_NAME=Windows')
|
||||
cross_args.append('-DCMAKE_RC_COMPILER=' + toolchain.windres)
|
||||
|
||||
configure = [
|
||||
'cmake',
|
||||
src,
|
||||
|
||||
'-DCMAKE_INSTALL_PREFIX=' + toolchain.install_prefix,
|
||||
'-DCMAKE_BUILD_TYPE=release',
|
||||
|
||||
'-DCMAKE_C_COMPILER=' + toolchain.cc,
|
||||
'-DCMAKE_CXX_COMPILER=' + toolchain.cxx,
|
||||
|
||||
'-DCMAKE_C_FLAGS=' + toolchain.cflags + ' ' + toolchain.cppflags,
|
||||
'-DCMAKE_CXX_FLAGS=' + toolchain.cxxflags + ' ' + toolchain.cppflags,
|
||||
|
||||
'-GNinja',
|
||||
] + cross_args + args
|
||||
|
||||
subprocess.check_call(configure, env=toolchain.env, cwd=build)
|
||||
|
||||
class CmakeProject(Project):
|
||||
def __init__(self, url, md5, installed, configure_args=[],
|
||||
**kwargs):
|
||||
Project.__init__(self, url, md5, installed, **kwargs)
|
||||
self.configure_args = configure_args
|
||||
|
||||
def configure(self, toolchain):
|
||||
src = self.unpack(toolchain)
|
||||
build = self.make_build_path(toolchain)
|
||||
configure(toolchain, src, build, self.configure_args)
|
||||
return build
|
||||
|
||||
def build(self, toolchain):
|
||||
build = self.configure(toolchain)
|
||||
subprocess.check_call(['ninja', 'install'],
|
||||
cwd=build, env=toolchain.env)
|
||||
9
python/build/dirs.py
Normal file
9
python/build/dirs.py
Normal file
@@ -0,0 +1,9 @@
|
||||
import os.path
|
||||
|
||||
lib_path = os.path.abspath('lib')
|
||||
|
||||
shared_path = lib_path
|
||||
if 'MPD_SHARED_LIB' in os.environ:
|
||||
shared_path = os.environ['MPD_SHARED_LIB']
|
||||
tarball_path = os.path.join(shared_path, 'download')
|
||||
src_path = os.path.join(shared_path, 'src')
|
||||
26
python/build/download.py
Normal file
26
python/build/download.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from build.verify import verify_file_digest
|
||||
import os
|
||||
import urllib.request
|
||||
|
||||
def download_and_verify(url, md5, parent_path):
|
||||
"""Download a file, verify its MD5 checksum and return the local path."""
|
||||
|
||||
os.makedirs(parent_path, exist_ok=True)
|
||||
path = os.path.join(parent_path, os.path.basename(url))
|
||||
|
||||
try:
|
||||
if verify_file_digest(path, md5): return path
|
||||
os.unlink(path)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
tmp_path = path + '.tmp'
|
||||
|
||||
print("download", url)
|
||||
urllib.request.urlretrieve(url, tmp_path)
|
||||
if not verify_file_digest(tmp_path, md5):
|
||||
os.unlink(tmp_path)
|
||||
raise RuntimeError("Digest mismatch")
|
||||
|
||||
os.rename(tmp_path, path)
|
||||
return path
|
||||
56
python/build/ffmpeg.py
Normal file
56
python/build/ffmpeg.py
Normal file
@@ -0,0 +1,56 @@
|
||||
import os.path, subprocess
|
||||
|
||||
from build.project import Project
|
||||
|
||||
class FfmpegProject(Project):
|
||||
def __init__(self, url, md5, installed, configure_args=[],
|
||||
cppflags='',
|
||||
**kwargs):
|
||||
Project.__init__(self, url, md5, installed, **kwargs)
|
||||
self.configure_args = configure_args
|
||||
self.cppflags = cppflags
|
||||
|
||||
def _filter_cflags(self, flags):
|
||||
# FFmpeg expects the GNU as syntax
|
||||
flags = flags.replace(' -integrated-as ', ' -no-integrated-as ')
|
||||
return flags
|
||||
|
||||
def build(self, toolchain):
|
||||
src = self.unpack(toolchain)
|
||||
build = self.make_build_path(toolchain)
|
||||
|
||||
if toolchain.is_arm:
|
||||
arch = 'arm'
|
||||
elif toolchain.is_aarch64:
|
||||
arch = 'aarch64'
|
||||
else:
|
||||
arch = 'x86'
|
||||
|
||||
if toolchain.is_windows:
|
||||
target_os = 'mingw32'
|
||||
else:
|
||||
target_os = 'linux'
|
||||
|
||||
configure = [
|
||||
os.path.join(src, 'configure'),
|
||||
'--cc=' + toolchain.cc,
|
||||
'--cxx=' + toolchain.cxx,
|
||||
'--nm=' + toolchain.nm,
|
||||
'--extra-cflags=' + self._filter_cflags(toolchain.cflags) + ' ' + toolchain.cppflags + ' ' + self.cppflags,
|
||||
'--extra-cxxflags=' + self._filter_cflags(toolchain.cxxflags) + ' ' + toolchain.cppflags + ' ' + self.cppflags,
|
||||
'--extra-ldflags=' + toolchain.ldflags,
|
||||
'--extra-libs=' + toolchain.libs,
|
||||
'--ar=' + toolchain.ar,
|
||||
'--ranlib=' + toolchain.ranlib,
|
||||
'--enable-cross-compile',
|
||||
'--arch=' + arch,
|
||||
'--target-os=' + target_os,
|
||||
'--prefix=' + toolchain.install_prefix,
|
||||
] + self.configure_args
|
||||
|
||||
if toolchain.is_armv7:
|
||||
configure.append('--cpu=cortex-a8')
|
||||
|
||||
subprocess.check_call(configure, cwd=build, env=toolchain.env)
|
||||
subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'], cwd=build, env=toolchain.env)
|
||||
subprocess.check_call(['/usr/bin/make', '--quiet', 'install'], cwd=build, env=toolchain.env)
|
||||
439
python/build/libs.py
Normal file
439
python/build/libs.py
Normal file
@@ -0,0 +1,439 @@
|
||||
import re
|
||||
from os.path import abspath
|
||||
|
||||
from build.project import Project
|
||||
from build.zlib import ZlibProject
|
||||
from build.meson import MesonProject
|
||||
from build.cmake import CmakeProject
|
||||
from build.autotools import AutotoolsProject
|
||||
from build.ffmpeg import FfmpegProject
|
||||
from build.boost import BoostProject
|
||||
|
||||
libmpdclient = MesonProject(
|
||||
'https://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.19.tar.xz',
|
||||
'158aad4c2278ab08e76a3f2b0166c99b39fae00ee17231bd225c5a36e977a189',
|
||||
'lib/libmpdclient.a',
|
||||
)
|
||||
|
||||
libogg = AutotoolsProject(
|
||||
'http://downloads.xiph.org/releases/ogg/libogg-1.3.4.tar.xz',
|
||||
'c163bc12bc300c401b6aa35907ac682671ea376f13ae0969a220f7ddf71893fe',
|
||||
'lib/libogg.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
],
|
||||
)
|
||||
|
||||
libvorbis = AutotoolsProject(
|
||||
'http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz',
|
||||
'b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b',
|
||||
'lib/libvorbis.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
],
|
||||
|
||||
edits={
|
||||
# this option is not understood by clang
|
||||
'configure': lambda data: data.replace('-mno-ieee-fp', ' '),
|
||||
}
|
||||
)
|
||||
|
||||
opus = AutotoolsProject(
|
||||
'https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz',
|
||||
'65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d',
|
||||
'lib/libopus.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--disable-doc',
|
||||
'--disable-extra-programs',
|
||||
],
|
||||
|
||||
# suppress "visibility default" from opus_defines.h
|
||||
cppflags='-DOPUS_EXPORT=',
|
||||
)
|
||||
|
||||
flac = AutotoolsProject(
|
||||
'http://downloads.xiph.org/releases/flac/flac-1.3.3.tar.xz',
|
||||
'213e82bd716c9de6db2f98bcadbc4c24c7e2efe8c75939a1a84e28539c4e1748',
|
||||
'lib/libFLAC.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--disable-xmms-plugin', '--disable-cpplibs',
|
||||
'--disable-doxygen-docs',
|
||||
],
|
||||
subdirs=['include', 'src/libFLAC'],
|
||||
)
|
||||
|
||||
zlib = ZlibProject(
|
||||
'http://zlib.net/zlib-1.2.11.tar.xz',
|
||||
'4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066',
|
||||
'lib/libz.a',
|
||||
)
|
||||
|
||||
libid3tag = AutotoolsProject(
|
||||
'ftp://ftp.mars.org/pub/mpeg/libid3tag-0.15.1b.tar.gz',
|
||||
'e5808ad997ba32c498803822078748c3',
|
||||
'lib/libid3tag.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
|
||||
# without this, libid3tag's configure.ac ignores -O* and -f*
|
||||
'--disable-debugging',
|
||||
],
|
||||
autogen=True,
|
||||
|
||||
edits={
|
||||
# fix bug in libid3tag's configure.ac which discards all but the last optimization flag
|
||||
'configure.ac': lambda data: re.sub(r'optimize="\$1"', r'optimize="$optimize $1"', data, count=1),
|
||||
}
|
||||
)
|
||||
|
||||
libmad = AutotoolsProject(
|
||||
'ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz',
|
||||
'1be543bc30c56fb6bea1d7bf6a64e66c',
|
||||
'lib/libmad.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
|
||||
# without this, libmad's configure.ac ignores -O* and -f*
|
||||
'--disable-debugging',
|
||||
],
|
||||
autogen=True,
|
||||
)
|
||||
|
||||
liblame = AutotoolsProject(
|
||||
'http://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz',
|
||||
'ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e',
|
||||
'lib/libmp3lame.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--disable-gtktest', '--disable-analyzer-hooks',
|
||||
'--disable-decoder', '--disable-frontend',
|
||||
],
|
||||
)
|
||||
|
||||
libmodplug = AutotoolsProject(
|
||||
'https://downloads.sourceforge.net/modplug-xmms/libmodplug/0.8.9.0/libmodplug-0.8.9.0.tar.gz',
|
||||
'457ca5a6c179656d66c01505c0d95fafaead4329b9dbaa0f997d00a3508ad9de',
|
||||
'lib/libmodplug.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
],
|
||||
)
|
||||
|
||||
wildmidi = CmakeProject(
|
||||
'https://codeload.github.com/Mindwerks/wildmidi/tar.gz/wildmidi-0.4.3',
|
||||
'498e5a96455bb4b91b37188ad6dcb070824e92c44f5ed452b90adbaec8eef3c5',
|
||||
'lib/libWildMidi.a',
|
||||
[
|
||||
'-DBUILD_SHARED_LIBS=OFF',
|
||||
'-DWANT_PLAYER=OFF',
|
||||
'-DWANT_STATIC=ON',
|
||||
],
|
||||
base='wildmidi-wildmidi-0.4.3',
|
||||
name='wildmidi',
|
||||
version='0.4.3',
|
||||
)
|
||||
|
||||
gme = CmakeProject(
|
||||
'https://bitbucket.org/mpyne/game-music-emu/downloads/game-music-emu-0.6.3.tar.xz',
|
||||
'aba34e53ef0ec6a34b58b84e28bf8cfbccee6585cebca25333604c35db3e051d',
|
||||
'lib/libgme.a',
|
||||
[
|
||||
'-DBUILD_SHARED_LIBS=OFF',
|
||||
'-DENABLE_UBSAN=OFF',
|
||||
'-DZLIB_INCLUDE_DIR=OFF',
|
||||
'-DSDL2_DIR=OFF',
|
||||
],
|
||||
)
|
||||
|
||||
ffmpeg = FfmpegProject(
|
||||
'http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.xz',
|
||||
'ad009240d46e307b4e03a213a0f49c11b650e445b1f8be0dda2a9212b34d2ffb',
|
||||
'lib/libavcodec.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--enable-gpl',
|
||||
'--enable-small',
|
||||
'--disable-pthreads',
|
||||
'--disable-programs',
|
||||
'--disable-doc',
|
||||
'--disable-avdevice',
|
||||
'--disable-swresample',
|
||||
'--disable-swscale',
|
||||
'--disable-postproc',
|
||||
'--disable-avfilter',
|
||||
'--disable-lzo',
|
||||
'--disable-faan',
|
||||
'--disable-pixelutils',
|
||||
'--disable-network',
|
||||
'--disable-encoders',
|
||||
'--disable-muxers',
|
||||
'--disable-protocols',
|
||||
'--disable-devices',
|
||||
'--disable-filters',
|
||||
'--disable-v4l2_m2m',
|
||||
|
||||
'--disable-parser=bmp',
|
||||
'--disable-parser=cavsvideo',
|
||||
'--disable-parser=dvbsub',
|
||||
'--disable-parser=dvdsub',
|
||||
'--disable-parser=dvd_nav',
|
||||
'--disable-parser=flac',
|
||||
'--disable-parser=g729',
|
||||
'--disable-parser=gsm',
|
||||
'--disable-parser=h261',
|
||||
'--disable-parser=h263',
|
||||
'--disable-parser=h264',
|
||||
'--disable-parser=hevc',
|
||||
'--disable-parser=mjpeg',
|
||||
'--disable-parser=mlp',
|
||||
'--disable-parser=mpeg4video',
|
||||
'--disable-parser=mpegvideo',
|
||||
'--disable-parser=opus',
|
||||
'--disable-parser=vc1',
|
||||
'--disable-parser=vp3',
|
||||
'--disable-parser=vp8',
|
||||
'--disable-parser=vp9',
|
||||
'--disable-parser=png',
|
||||
'--disable-parser=pnm',
|
||||
'--disable-parser=xma',
|
||||
|
||||
'--disable-demuxer=aqtitle',
|
||||
'--disable-demuxer=ass',
|
||||
'--disable-demuxer=bethsoftvid',
|
||||
'--disable-demuxer=bink',
|
||||
'--disable-demuxer=cavsvideo',
|
||||
'--disable-demuxer=cdxl',
|
||||
'--disable-demuxer=dvbsub',
|
||||
'--disable-demuxer=dvbtxt',
|
||||
'--disable-demuxer=h261',
|
||||
'--disable-demuxer=h263',
|
||||
'--disable-demuxer=h264',
|
||||
'--disable-demuxer=ico',
|
||||
'--disable-demuxer=image2',
|
||||
'--disable-demuxer=jacosub',
|
||||
'--disable-demuxer=lrc',
|
||||
'--disable-demuxer=microdvd',
|
||||
'--disable-demuxer=mjpeg',
|
||||
'--disable-demuxer=mjpeg_2000',
|
||||
'--disable-demuxer=mpegps',
|
||||
'--disable-demuxer=mpegvideo',
|
||||
'--disable-demuxer=mpl2',
|
||||
'--disable-demuxer=mpsub',
|
||||
'--disable-demuxer=pjs',
|
||||
'--disable-demuxer=rawvideo',
|
||||
'--disable-demuxer=realtext',
|
||||
'--disable-demuxer=sami',
|
||||
'--disable-demuxer=scc',
|
||||
'--disable-demuxer=srt',
|
||||
'--disable-demuxer=stl',
|
||||
'--disable-demuxer=subviewer',
|
||||
'--disable-demuxer=subviewer1',
|
||||
'--disable-demuxer=swf',
|
||||
'--disable-demuxer=tedcaptions',
|
||||
'--disable-demuxer=vobsub',
|
||||
'--disable-demuxer=vplayer',
|
||||
'--disable-demuxer=webvtt',
|
||||
'--disable-demuxer=yuv4mpegpipe',
|
||||
|
||||
# we don't need these decoders, because we have the dedicated
|
||||
# libraries
|
||||
'--disable-decoder=flac',
|
||||
'--disable-decoder=opus',
|
||||
'--disable-decoder=vorbis',
|
||||
|
||||
# audio codecs nobody uses
|
||||
'--disable-decoder=atrac1',
|
||||
'--disable-decoder=atrac3',
|
||||
'--disable-decoder=atrac3al',
|
||||
'--disable-decoder=atrac3p',
|
||||
'--disable-decoder=atrac3pal',
|
||||
'--disable-decoder=binkaudio_dct',
|
||||
'--disable-decoder=binkaudio_rdft',
|
||||
'--disable-decoder=bmv_audio',
|
||||
'--disable-decoder=dsicinaudio',
|
||||
'--disable-decoder=dvaudio',
|
||||
'--disable-decoder=metasound',
|
||||
'--disable-decoder=paf_audio',
|
||||
'--disable-decoder=ra_144',
|
||||
'--disable-decoder=ra_288',
|
||||
'--disable-decoder=ralf',
|
||||
'--disable-decoder=qdm2',
|
||||
'--disable-decoder=qdmc',
|
||||
|
||||
# disable lots of image and video codecs
|
||||
'--disable-decoder=ass',
|
||||
'--disable-decoder=asv1',
|
||||
'--disable-decoder=asv2',
|
||||
'--disable-decoder=apng',
|
||||
'--disable-decoder=avrn',
|
||||
'--disable-decoder=avrp',
|
||||
'--disable-decoder=bethsoftvid',
|
||||
'--disable-decoder=bink',
|
||||
'--disable-decoder=bmp',
|
||||
'--disable-decoder=bmv_video',
|
||||
'--disable-decoder=cavs',
|
||||
'--disable-decoder=ccaption',
|
||||
'--disable-decoder=cdgraphics',
|
||||
'--disable-decoder=clearvideo',
|
||||
'--disable-decoder=dirac',
|
||||
'--disable-decoder=dsicinvideo',
|
||||
'--disable-decoder=dvbsub',
|
||||
'--disable-decoder=dvdsub',
|
||||
'--disable-decoder=dvvideo',
|
||||
'--disable-decoder=exr',
|
||||
'--disable-decoder=ffv1',
|
||||
'--disable-decoder=ffvhuff',
|
||||
'--disable-decoder=ffwavesynth',
|
||||
'--disable-decoder=flic',
|
||||
'--disable-decoder=flv',
|
||||
'--disable-decoder=fraps',
|
||||
'--disable-decoder=gif',
|
||||
'--disable-decoder=h261',
|
||||
'--disable-decoder=h263',
|
||||
'--disable-decoder=h263i',
|
||||
'--disable-decoder=h263p',
|
||||
'--disable-decoder=h264',
|
||||
'--disable-decoder=hevc',
|
||||
'--disable-decoder=hnm4_video',
|
||||
'--disable-decoder=hq_hqa',
|
||||
'--disable-decoder=hqx',
|
||||
'--disable-decoder=idcin',
|
||||
'--disable-decoder=iff_ilbm',
|
||||
'--disable-decoder=indeo2',
|
||||
'--disable-decoder=indeo3',
|
||||
'--disable-decoder=indeo4',
|
||||
'--disable-decoder=indeo5',
|
||||
'--disable-decoder=interplay_video',
|
||||
'--disable-decoder=jacosub',
|
||||
'--disable-decoder=jpeg2000',
|
||||
'--disable-decoder=jpegls',
|
||||
'--disable-decoder=microdvd',
|
||||
'--disable-decoder=mimic',
|
||||
'--disable-decoder=mjpeg',
|
||||
'--disable-decoder=mmvideo',
|
||||
'--disable-decoder=mpl2',
|
||||
'--disable-decoder=motionpixels',
|
||||
'--disable-decoder=mpeg1video',
|
||||
'--disable-decoder=mpeg2video',
|
||||
'--disable-decoder=mpeg4',
|
||||
'--disable-decoder=mpegvideo',
|
||||
'--disable-decoder=mscc',
|
||||
'--disable-decoder=msmpeg4_crystalhd',
|
||||
'--disable-decoder=msmpeg4v1',
|
||||
'--disable-decoder=msmpeg4v2',
|
||||
'--disable-decoder=msmpeg4v3',
|
||||
'--disable-decoder=msvideo1',
|
||||
'--disable-decoder=mszh',
|
||||
'--disable-decoder=mvc1',
|
||||
'--disable-decoder=mvc2',
|
||||
'--disable-decoder=on2avc',
|
||||
'--disable-decoder=paf_video',
|
||||
'--disable-decoder=png',
|
||||
'--disable-decoder=qdraw',
|
||||
'--disable-decoder=qpeg',
|
||||
'--disable-decoder=rawvideo',
|
||||
'--disable-decoder=realtext',
|
||||
'--disable-decoder=roq',
|
||||
'--disable-decoder=roq_dpcm',
|
||||
'--disable-decoder=rscc',
|
||||
'--disable-decoder=rv10',
|
||||
'--disable-decoder=rv20',
|
||||
'--disable-decoder=rv30',
|
||||
'--disable-decoder=rv40',
|
||||
'--disable-decoder=sami',
|
||||
'--disable-decoder=sheervideo',
|
||||
'--disable-decoder=snow',
|
||||
'--disable-decoder=srt',
|
||||
'--disable-decoder=stl',
|
||||
'--disable-decoder=subrip',
|
||||
'--disable-decoder=subviewer',
|
||||
'--disable-decoder=subviewer1',
|
||||
'--disable-decoder=svq1',
|
||||
'--disable-decoder=svq3',
|
||||
'--disable-decoder=tiff',
|
||||
'--disable-decoder=tiertexseqvideo',
|
||||
'--disable-decoder=truemotion1',
|
||||
'--disable-decoder=truemotion2',
|
||||
'--disable-decoder=truemotion2rt',
|
||||
'--disable-decoder=twinvq',
|
||||
'--disable-decoder=utvideo',
|
||||
'--disable-decoder=vc1',
|
||||
'--disable-decoder=vmdvideo',
|
||||
'--disable-decoder=vp3',
|
||||
'--disable-decoder=vp5',
|
||||
'--disable-decoder=vp6',
|
||||
'--disable-decoder=vp7',
|
||||
'--disable-decoder=vp8',
|
||||
'--disable-decoder=vp9',
|
||||
'--disable-decoder=vqa',
|
||||
'--disable-decoder=webvtt',
|
||||
'--disable-decoder=wmv1',
|
||||
'--disable-decoder=wmv2',
|
||||
'--disable-decoder=wmv3',
|
||||
'--disable-decoder=yuv4',
|
||||
],
|
||||
)
|
||||
|
||||
curl = AutotoolsProject(
|
||||
'http://curl.haxx.se/download/curl-7.72.0.tar.xz',
|
||||
'0ded0808c4d85f2ee0db86980ae610cc9d165e9ca9da466196cc73c346513713',
|
||||
'lib/libcurl.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--disable-debug',
|
||||
'--enable-http',
|
||||
'--enable-ipv6',
|
||||
'--disable-ftp', '--disable-file',
|
||||
'--disable-ldap', '--disable-ldaps',
|
||||
'--disable-rtsp', '--disable-proxy', '--disable-dict', '--disable-telnet',
|
||||
'--disable-tftp', '--disable-pop3', '--disable-imap', '--disable-smtp',
|
||||
'--disable-smb',
|
||||
'--disable-gopher',
|
||||
'--disable-manual',
|
||||
'--disable-threaded-resolver', '--disable-verbose', '--disable-sspi',
|
||||
'--disable-crypto-auth', '--disable-ntlm-wb', '--disable-tls-srp', '--disable-cookies',
|
||||
'--disable-doh',
|
||||
'--disable-mime',
|
||||
'--disable-netrc',
|
||||
'--disable-progress-meter',
|
||||
'--disable-alt-svc',
|
||||
'--without-ssl', '--without-gnutls', '--without-nss', '--without-libssh2',
|
||||
],
|
||||
|
||||
patches='src/lib/curl/patches',
|
||||
)
|
||||
|
||||
libexpat = AutotoolsProject(
|
||||
'https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.bz2',
|
||||
'f1063084dc4302a427dabcca499c8312b3a32a29b7d2506653ecc8f950a9a237',
|
||||
'lib/libexpat.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--without-docbook',
|
||||
],
|
||||
)
|
||||
|
||||
libnfs = AutotoolsProject(
|
||||
'https://github.com/sahlberg/libnfs/archive/libnfs-4.0.0.tar.gz',
|
||||
'6ee77e9fe220e2d3e3b1f53cfea04fb319828cc7dbb97dd9df09e46e901d797d',
|
||||
'lib/libnfs.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--disable-debug',
|
||||
|
||||
# work around -Wtautological-compare
|
||||
'--disable-werror',
|
||||
|
||||
'--disable-utils', '--disable-examples',
|
||||
],
|
||||
base='libnfs-libnfs-4.0.0',
|
||||
autoreconf=True,
|
||||
)
|
||||
|
||||
boost = BoostProject(
|
||||
'https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.bz2',
|
||||
'83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1',
|
||||
'include/boost/version.hpp',
|
||||
)
|
||||
28
python/build/makeproject.py
Normal file
28
python/build/makeproject.py
Normal file
@@ -0,0 +1,28 @@
|
||||
import subprocess
|
||||
|
||||
from build.project import Project
|
||||
|
||||
class MakeProject(Project):
|
||||
def __init__(self, url, md5, installed,
|
||||
install_target='install',
|
||||
**kwargs):
|
||||
Project.__init__(self, url, md5, installed, **kwargs)
|
||||
self.install_target = install_target
|
||||
|
||||
def get_simultaneous_jobs(self):
|
||||
return 12
|
||||
|
||||
def get_make_args(self, toolchain):
|
||||
return ['--quiet', '-j' + str(self.get_simultaneous_jobs())]
|
||||
|
||||
def get_make_install_args(self, toolchain):
|
||||
return ['--quiet', self.install_target]
|
||||
|
||||
def make(self, toolchain, wd, args):
|
||||
subprocess.check_call(['/usr/bin/make'] + args,
|
||||
cwd=wd, env=toolchain.env)
|
||||
|
||||
def build(self, toolchain, wd, install=True):
|
||||
self.make(toolchain, wd, self.get_make_args(toolchain))
|
||||
if install:
|
||||
self.make(toolchain, wd, self.get_make_install_args(toolchain))
|
||||
116
python/build/meson.py
Normal file
116
python/build/meson.py
Normal file
@@ -0,0 +1,116 @@
|
||||
import os.path, subprocess, sys
|
||||
|
||||
from build.project import Project
|
||||
|
||||
def make_cross_file(toolchain):
|
||||
if toolchain.is_windows:
|
||||
system = 'windows'
|
||||
windres = "windres = '%s'" % toolchain.windres
|
||||
else:
|
||||
system = 'linux'
|
||||
windres = ''
|
||||
|
||||
if toolchain.is_arm:
|
||||
cpu_family = 'arm'
|
||||
if toolchain.is_armv7:
|
||||
cpu = 'armv7'
|
||||
else:
|
||||
cpu = 'armv6'
|
||||
elif toolchain.is_aarch64:
|
||||
cpu_family = 'aarch64'
|
||||
cpu = 'arm64-v8a'
|
||||
else:
|
||||
cpu_family = 'x86'
|
||||
if 'x86_64' in toolchain.arch:
|
||||
cpu = 'x86_64'
|
||||
else:
|
||||
cpu = 'i686'
|
||||
|
||||
# TODO: support more CPUs
|
||||
endian = 'little'
|
||||
|
||||
# TODO: write pkg-config wrapper
|
||||
|
||||
path = os.path.join(toolchain.build_path, 'meson.cross')
|
||||
os.makedirs(toolchain.build_path, exist_ok=True)
|
||||
with open(path, 'w') as f:
|
||||
f.write("""
|
||||
[binaries]
|
||||
c = '%s'
|
||||
cpp = '%s'
|
||||
ar = '%s'
|
||||
strip = '%s'
|
||||
pkgconfig = '%s'
|
||||
%s
|
||||
|
||||
[properties]
|
||||
root = '%s'
|
||||
|
||||
c_args = %s
|
||||
c_link_args = %s
|
||||
|
||||
cpp_args = %s
|
||||
cpp_link_args = %s
|
||||
|
||||
# Keep Meson from executing Android-x86 test binariees
|
||||
needs_exe_wrapper = true
|
||||
|
||||
[host_machine]
|
||||
system = '%s'
|
||||
cpu_family = '%s'
|
||||
cpu = '%s'
|
||||
endian = '%s'
|
||||
""" % (toolchain.cc, toolchain.cxx, toolchain.ar, toolchain.strip,
|
||||
toolchain.pkg_config,
|
||||
windres,
|
||||
toolchain.install_prefix,
|
||||
repr((toolchain.cppflags + ' ' + toolchain.cflags).split()),
|
||||
repr(toolchain.ldflags.split() + toolchain.libs.split()),
|
||||
repr((toolchain.cppflags + ' ' + toolchain.cxxflags).split()),
|
||||
repr(toolchain.ldflags.split() + toolchain.libs.split()),
|
||||
system, cpu_family, cpu, endian))
|
||||
return path
|
||||
|
||||
def configure(toolchain, src, build, args=()):
|
||||
cross_file = make_cross_file(toolchain)
|
||||
configure = [
|
||||
'meson',
|
||||
src, build,
|
||||
|
||||
'--prefix', toolchain.install_prefix,
|
||||
|
||||
# this is necessary because Meson uses Debian's build machine
|
||||
# MultiArch path (e.g. "lib/x86_64-linux-gnu") for cross
|
||||
# builds, which is obviously wrong
|
||||
'--libdir', 'lib',
|
||||
|
||||
'--buildtype', 'plain',
|
||||
|
||||
'--default-library=static',
|
||||
|
||||
'--cross-file', cross_file,
|
||||
] + args
|
||||
|
||||
env = toolchain.env.copy()
|
||||
|
||||
# Meson 0.54 requires the BOOST_ROOT environment variable
|
||||
env['BOOST_ROOT'] = toolchain.install_prefix
|
||||
|
||||
subprocess.check_call(configure, env=env)
|
||||
|
||||
class MesonProject(Project):
|
||||
def __init__(self, url, md5, installed, configure_args=[],
|
||||
**kwargs):
|
||||
Project.__init__(self, url, md5, installed, **kwargs)
|
||||
self.configure_args = configure_args
|
||||
|
||||
def configure(self, toolchain):
|
||||
src = self.unpack(toolchain)
|
||||
build = self.make_build_path(toolchain)
|
||||
configure(toolchain, src, build, self.configure_args)
|
||||
return build
|
||||
|
||||
def build(self, toolchain):
|
||||
build = self.configure(toolchain)
|
||||
subprocess.check_call(['ninja', 'install'],
|
||||
cwd=build, env=toolchain.env)
|
||||
81
python/build/project.py
Normal file
81
python/build/project.py
Normal file
@@ -0,0 +1,81 @@
|
||||
import os, shutil
|
||||
import re
|
||||
|
||||
from build.download import download_and_verify
|
||||
from build.tar import untar
|
||||
from build.quilt import push_all
|
||||
|
||||
class Project:
|
||||
def __init__(self, url, md5, installed, name=None, version=None,
|
||||
base=None,
|
||||
patches=None,
|
||||
edits=None,
|
||||
use_cxx=False):
|
||||
if base is None:
|
||||
basename = os.path.basename(url)
|
||||
m = re.match(r'^(.+)\.(tar(\.(gz|bz2|xz|lzma))?|zip)$', basename)
|
||||
if not m: raise
|
||||
self.base = m.group(1)
|
||||
else:
|
||||
self.base = base
|
||||
|
||||
if name is None or version is None:
|
||||
m = re.match(r'^([-\w]+)-(\d[\d.]*[a-z]?[\d.]*)$', self.base)
|
||||
if name is None: name = m.group(1)
|
||||
if version is None: version = m.group(2)
|
||||
|
||||
self.name = name
|
||||
self.version = version
|
||||
|
||||
self.url = url
|
||||
self.md5 = md5
|
||||
self.installed = installed
|
||||
|
||||
if patches is not None:
|
||||
srcdir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
|
||||
patches = os.path.join(srcdir, patches)
|
||||
self.patches = patches
|
||||
self.edits = edits
|
||||
self.use_cxx = use_cxx
|
||||
|
||||
def download(self, toolchain):
|
||||
return download_and_verify(self.url, self.md5, toolchain.tarball_path)
|
||||
|
||||
def is_installed(self, toolchain):
|
||||
tarball = self.download(toolchain)
|
||||
installed = os.path.join(toolchain.install_prefix, self.installed)
|
||||
tarball_mtime = os.path.getmtime(tarball)
|
||||
try:
|
||||
return os.path.getmtime(installed) >= tarball_mtime
|
||||
except FileNotFoundError:
|
||||
return False
|
||||
|
||||
def unpack(self, toolchain, out_of_tree=True):
|
||||
if out_of_tree:
|
||||
parent_path = toolchain.src_path
|
||||
else:
|
||||
parent_path = toolchain.build_path
|
||||
path = untar(self.download(toolchain), parent_path, self.base)
|
||||
|
||||
if self.patches is not None:
|
||||
push_all(toolchain, path, self.patches)
|
||||
|
||||
if self.edits is not None:
|
||||
for filename, function in self.edits.items():
|
||||
with open(os.path.join(path, filename), 'r+t') as f:
|
||||
old_data = f.read()
|
||||
new_data = function(old_data)
|
||||
f.seek(0)
|
||||
f.truncate(0)
|
||||
f.write(new_data)
|
||||
|
||||
return path
|
||||
|
||||
def make_build_path(self, toolchain):
|
||||
path = os.path.join(toolchain.build_path, self.base)
|
||||
try:
|
||||
shutil.rmtree(path)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
os.makedirs(path, exist_ok=True)
|
||||
return path
|
||||
9
python/build/quilt.py
Normal file
9
python/build/quilt.py
Normal file
@@ -0,0 +1,9 @@
|
||||
import subprocess
|
||||
|
||||
def run_quilt(toolchain, cwd, patches_path, *args):
|
||||
env = dict(toolchain.env)
|
||||
env['QUILT_PATCHES'] = patches_path
|
||||
subprocess.check_call(['quilt'] + list(args), cwd=cwd, env=env)
|
||||
|
||||
def push_all(toolchain, src_path, patches_path):
|
||||
run_quilt(toolchain, src_path, patches_path, 'push', '-a')
|
||||
11
python/build/tar.py
Normal file
11
python/build/tar.py
Normal file
@@ -0,0 +1,11 @@
|
||||
import os, shutil, subprocess
|
||||
|
||||
def untar(tarball_path, parent_path, base):
|
||||
path = os.path.join(parent_path, base)
|
||||
try:
|
||||
shutil.rmtree(path)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
os.makedirs(parent_path, exist_ok=True)
|
||||
subprocess.check_call(['/bin/tar', 'xfC', tarball_path, parent_path])
|
||||
return path
|
||||
42
python/build/verify.py
Normal file
42
python/build/verify.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import hashlib
|
||||
|
||||
def feed_file(h, f):
|
||||
"""Feed data read from an open file into the hashlib instance."""
|
||||
|
||||
while True:
|
||||
data = f.read(65536)
|
||||
if len(data) == 0:
|
||||
# end of file
|
||||
break
|
||||
h.update(data)
|
||||
|
||||
def feed_file_path(h, path):
|
||||
"""Feed data read from a file (to be opened by this function) into the hashlib instance."""
|
||||
|
||||
with open(path, 'rb') as f:
|
||||
feed_file(h, f)
|
||||
|
||||
def file_digest(algorithm, path):
|
||||
"""Calculate the digest of a file and return it in hexadecimal notation."""
|
||||
|
||||
h = algorithm()
|
||||
feed_file_path(h, path)
|
||||
return h.hexdigest()
|
||||
|
||||
def guess_digest_algorithm(digest):
|
||||
l = len(digest)
|
||||
if l == 32:
|
||||
return hashlib.md5
|
||||
elif l == 40:
|
||||
return hashlib.sha1
|
||||
elif l == 64:
|
||||
return hashlib.sha256
|
||||
else:
|
||||
return None
|
||||
|
||||
def verify_file_digest(path, expected_digest):
|
||||
"""Verify the digest of a file, and return True if the digest matches with the given expected digest."""
|
||||
|
||||
algorithm = guess_digest_algorithm(expected_digest)
|
||||
assert(algorithm is not None)
|
||||
return file_digest(algorithm, path) == expected_digest
|
||||
22
python/build/zlib.py
Normal file
22
python/build/zlib.py
Normal file
@@ -0,0 +1,22 @@
|
||||
import os.path, subprocess
|
||||
|
||||
from build.project import Project
|
||||
|
||||
class ZlibProject(Project):
|
||||
def __init__(self, url, md5, installed,
|
||||
**kwargs):
|
||||
Project.__init__(self, url, md5, installed, **kwargs)
|
||||
|
||||
def build(self, toolchain):
|
||||
src = self.unpack(toolchain, out_of_tree=False)
|
||||
|
||||
subprocess.check_call(['/usr/bin/make', '--quiet',
|
||||
'-f', 'win32/Makefile.gcc',
|
||||
'PREFIX=' + toolchain.arch + '-',
|
||||
'-j12',
|
||||
'install',
|
||||
'INCLUDE_PATH='+ os.path.join(toolchain.install_prefix, 'include'),
|
||||
'LIBRARY_PATH=' + os.path.join(toolchain.install_prefix, 'lib'),
|
||||
'BINARY_PATH=' + os.path.join(toolchain.install_prefix, 'bin'),
|
||||
],
|
||||
cwd=src, env=toolchain.env)
|
||||
@@ -1,47 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This script verifies that every source includes config.h first.
|
||||
# This is very important for consistent Large File Support.
|
||||
#
|
||||
|
||||
def check_file(file)
|
||||
first = true
|
||||
file.each_line do |line|
|
||||
if line =~ /^\#include\s+(\S+)/ then
|
||||
if $1 == '"config.h"'
|
||||
unless first
|
||||
puts "#{file.path}: config.h included too late"
|
||||
end
|
||||
else
|
||||
if first
|
||||
puts "#{file.path}: config.h missing"
|
||||
end
|
||||
end
|
||||
first = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def check_path(path)
|
||||
File.open(path) do |file|
|
||||
check_file(file)
|
||||
end
|
||||
end
|
||||
|
||||
if ARGV.empty?
|
||||
Dir["src/*.c"].each do |path|
|
||||
check_path(path)
|
||||
end
|
||||
|
||||
Dir["src/*/*.c"].each do |path|
|
||||
check_path(path)
|
||||
end
|
||||
|
||||
Dir["test/*.c"].each do |path|
|
||||
check_path(path)
|
||||
end
|
||||
else
|
||||
ARGV.each do |path|
|
||||
check_path(path)
|
||||
end
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/bin/sh
|
||||
PWD=`pwd`
|
||||
|
||||
## If we're not in the scripts directory
|
||||
## assume the base directory.
|
||||
if test "`basename $PWD`" == "scripts"; then
|
||||
cd ../
|
||||
else
|
||||
MYOLDPWD=`pwd`
|
||||
cd `dirname $0`/../
|
||||
fi
|
||||
|
||||
if test -e Makefile
|
||||
then
|
||||
make distclean
|
||||
fi
|
||||
./autogen.sh
|
||||
make
|
||||
make dist
|
||||
|
||||
if test "`basename $PWD`" == "scripts"; then
|
||||
cd contrib/
|
||||
else
|
||||
cd $MYOLDPWD
|
||||
fi
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cdw -cd0 -c0 -cp0 "$@"
|
||||
|
||||
# there doesn't seem to be an indent switch for this, but this
|
||||
# forces goto labels to the left-most column, without indentation
|
||||
perl -i -p -e 's/^\s+(\w+):/$1:/g unless /^\s+default:/' "$@"
|
||||
@@ -1,93 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# This shell script tests the build of MPD with various compile-time
|
||||
# options.
|
||||
#
|
||||
# Author: Max Kellermann <max@duempel.org>
|
||||
|
||||
PREFIX=/tmp/mpd
|
||||
rm -rf $PREFIX
|
||||
|
||||
test "x$MAKE" != x || MAKE=make
|
||||
|
||||
export CFLAGS="-Os"
|
||||
|
||||
test -x configure || NOCONFIGURE=1 ./autogen.sh
|
||||
|
||||
# all features on
|
||||
./configure --prefix=$PREFIX/full \
|
||||
--disable-dependency-tracking --enable-debug --enable-werror \
|
||||
--enable-un \
|
||||
--enable-modplug \
|
||||
--enable-ao --enable-mikmod --enable-mvp
|
||||
$MAKE install
|
||||
$MAKE distclean
|
||||
|
||||
# no UN, no oggvorbis, no flac, enable oggflac
|
||||
./configure --prefix=$PREFIX/small \
|
||||
--disable-dependency-tracking --enable-debug --enable-werror \
|
||||
--disable-un \
|
||||
--disable-flac --disable-vorbis --enable-oggflac
|
||||
$MAKE install
|
||||
$MAKE distclean
|
||||
|
||||
# strip down (disable TCP, disable nearly all plugins)
|
||||
CFLAGS="$CFLAGS -DNDEBUG" \
|
||||
./configure --prefix=$PREFIX/tiny \
|
||||
--disable-dependency-tracking --disable-debug --enable-werror \
|
||||
--disable-tcp \
|
||||
--disable-curl \
|
||||
--disable-id3 --disable-lsr \
|
||||
--disable-ao --disable-alsa --disable-jack --disable-pulse --disable-fifo \
|
||||
--disable-shout-ogg --disable-shout-mp3 --disable-lame-encoder \
|
||||
--disable-ffmpeg --disable-wavpack --disable-mpc --disable-aac \
|
||||
--disable-flac --disable-vorbis --disable-oggflac --disable-audiofile \
|
||||
--disable-cue \
|
||||
--with-zeroconf=no
|
||||
$MAKE install
|
||||
$MAKE distclean
|
||||
|
||||
# shout: ogg without mp3
|
||||
# sndfile instead of modplug
|
||||
./configure --prefix=$PREFIX/shout_ogg \
|
||||
--disable-dependency-tracking --disable-debug --enable-werror \
|
||||
--disable-tcp \
|
||||
--disable-curl \
|
||||
--disable-id3 --disable-lsr \
|
||||
--disable-ao --disable-alsa --disable-jack --disable-pulse --disable-fifo \
|
||||
--enable-shout-ogg --disable-shout-mp3 --disable-lame-encoder \
|
||||
--disable-ffmpeg --disable-wavpack --disable-mpc --disable-aac \
|
||||
--disable-flac --enable-vorbis --disable-oggflac --disable-audiofile \
|
||||
--disable-modplug --enable-sndfile \
|
||||
--with-zeroconf=no
|
||||
$MAKE install
|
||||
$MAKE distclean
|
||||
|
||||
# shout: mp3 without ogg
|
||||
./configure --prefix=$PREFIX/shout_mp3 \
|
||||
--disable-dependency-tracking --disable-debug --enable-werror \
|
||||
--disable-tcp \
|
||||
--disable-curl \
|
||||
--disable-id3 --disable-lsr \
|
||||
--disable-ao --disable-alsa --disable-jack --disable-pulse --disable-fifo \
|
||||
--disable-shout-ogg --enable-shout-mp3 --enable-lame-encoder \
|
||||
--disable-ffmpeg --disable-wavpack --disable-mpc --disable-aac \
|
||||
--disable-flac --disable-vorbis --disable-oggflac --disable-audiofile \
|
||||
--with-zeroconf=no
|
||||
$MAKE install
|
||||
$MAKE distclean
|
||||
|
||||
# oggvorbis + oggflac
|
||||
./configure --prefix=$PREFIX/oggvorbisflac \
|
||||
--disable-dependency-tracking --disable-debug --enable-werror \
|
||||
--disable-tcp \
|
||||
--disable-curl \
|
||||
--disable-id3 --disable-lsr \
|
||||
--disable-mp3 \
|
||||
--disable-ao --disable-alsa --disable-jack --disable-pulse --disable-fifo \
|
||||
--disable-shout-ogg --disable-shout-mp3 --disable-lame-encoder \
|
||||
--disable-ffmpeg --disable-wavpack --disable-mpc --disable-aac \
|
||||
--disable-flac --enable-vorbis --enable-oggflac --disable-audiofile \
|
||||
--with-zeroconf=no
|
||||
$MAKE install
|
||||
$MAKE distclean
|
||||
@@ -33,6 +33,9 @@ struct Compressor {
|
||||
struct Compressor *Compressor_new(unsigned int history)
|
||||
{
|
||||
struct Compressor *obj = malloc(sizeof(struct Compressor));
|
||||
if (obj == NULL)
|
||||
/* out of memory, not much we can do */
|
||||
abort();
|
||||
|
||||
obj->prefs.target = TARGET;
|
||||
obj->prefs.maxgain = GAINMAX;
|
||||
@@ -61,6 +64,10 @@ void Compressor_delete(struct Compressor *obj)
|
||||
static int *resizeArray(int *data, int newsz, int oldsz)
|
||||
{
|
||||
data = realloc(data, newsz*sizeof(int));
|
||||
if (data == NULL)
|
||||
/* out of memory, not much we can do */
|
||||
abort();
|
||||
|
||||
if (newsz > oldsz)
|
||||
memset(data + oldsz, 0, sizeof(int)*(newsz - oldsz));
|
||||
return data;
|
||||
|
||||
@@ -19,6 +19,10 @@ struct CompressorConfig {
|
||||
|
||||
struct Compressor;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//! Create a new compressor (use history value of 0 for default)
|
||||
struct Compressor *Compressor_new(unsigned int history);
|
||||
|
||||
@@ -34,7 +38,12 @@ struct CompressorConfig *Compressor_getConfig(struct Compressor *);
|
||||
//! Process 16-bit signed data
|
||||
void Compressor_Process_int16(struct Compressor *, int16_t *data, unsigned int count);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
//! TODO: Compressor_Process_int32, Compressor_Process_float, others as needed
|
||||
|
||||
//! TODO: functions for getting at the peak/gain/clip history buffers (for monitoring)
|
||||
|
||||
#endif
|
||||
|
||||
75
src/AudioFormat.cxx
Normal file
75
src/AudioFormat.cxx
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "AudioFormat.hxx"
|
||||
#include "util/StringBuffer.hxx"
|
||||
#include "util/StringFormat.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
void
|
||||
AudioFormat::ApplyMask(AudioFormat mask) noexcept
|
||||
{
|
||||
assert(IsValid());
|
||||
assert(mask.IsMaskValid());
|
||||
|
||||
if (mask.sample_rate != 0)
|
||||
sample_rate = mask.sample_rate;
|
||||
|
||||
if (mask.format != SampleFormat::UNDEFINED)
|
||||
format = mask.format;
|
||||
|
||||
if (mask.channels != 0)
|
||||
channels = mask.channels;
|
||||
|
||||
assert(IsValid());
|
||||
}
|
||||
|
||||
StringBuffer<24>
|
||||
ToString(const AudioFormat af) noexcept
|
||||
{
|
||||
StringBuffer<24> buffer;
|
||||
char *p = buffer.data();
|
||||
|
||||
if (af.format == SampleFormat::DSD && af.sample_rate > 0 &&
|
||||
af.sample_rate % 44100 == 0) {
|
||||
/* use shortcuts such as "dsd64" which implies the
|
||||
sample rate */
|
||||
p += sprintf(p, "dsd%u:", af.sample_rate * 8 / 44100);
|
||||
} else {
|
||||
const char *sample_format = af.format != SampleFormat::UNDEFINED
|
||||
? sample_format_to_string(af.format)
|
||||
: "*";
|
||||
|
||||
if (af.sample_rate > 0)
|
||||
p += sprintf(p, "%u:%s:", af.sample_rate,
|
||||
sample_format);
|
||||
else
|
||||
p += sprintf(p, "*:%s:", sample_format);
|
||||
}
|
||||
|
||||
if (af.channels > 0)
|
||||
p += sprintf(p, "%u", af.channels);
|
||||
else {
|
||||
*p++ = '*';
|
||||
*p = 0;
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
245
src/AudioFormat.hxx
Normal file
245
src/AudioFormat.hxx
Normal file
@@ -0,0 +1,245 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_AUDIO_FORMAT_HXX
|
||||
#define MPD_AUDIO_FORMAT_HXX
|
||||
|
||||
#include "pcm/SampleFormat.hxx" // IWYU pragma: export
|
||||
#include "util/Compiler.h"
|
||||
|
||||
#include <chrono>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
template<size_t CAPACITY> class StringBuffer;
|
||||
|
||||
static constexpr unsigned MAX_CHANNELS = 8;
|
||||
|
||||
/**
|
||||
* This structure describes the format of a raw PCM stream.
|
||||
*/
|
||||
struct AudioFormat {
|
||||
/**
|
||||
* The sample rate in Hz. A better name for this attribute is
|
||||
* "frame rate", because technically, you have two samples per
|
||||
* frame in stereo sound.
|
||||
*/
|
||||
uint32_t sample_rate;
|
||||
|
||||
/**
|
||||
* The format samples are stored in. See the #sample_format
|
||||
* enum for valid values.
|
||||
*/
|
||||
SampleFormat format;
|
||||
|
||||
/**
|
||||
* The number of channels.
|
||||
*
|
||||
* Channel order follows the FLAC convention
|
||||
* (https://xiph.org/flac/format.html):
|
||||
*
|
||||
* - 1 channel: mono
|
||||
* - 2 channels: left, right
|
||||
* - 3 channels: left, right, center
|
||||
* - 4 channels: front left, front right, back left, back right
|
||||
* - 5 channels: front left, front right, front center, back/surround left, back/surround right
|
||||
* - 6 channels: front left, front right, front center, LFE, back/surround left, back/surround right
|
||||
* - 7 channels: front left, front right, front center, LFE, back center, side left, side right
|
||||
* - 8 channels: front left, front right, front center, LFE, back left, back right, side left, side right
|
||||
*/
|
||||
uint8_t channels;
|
||||
|
||||
AudioFormat() = default;
|
||||
|
||||
constexpr AudioFormat(uint32_t _sample_rate,
|
||||
SampleFormat _format, uint8_t _channels)
|
||||
:sample_rate(_sample_rate),
|
||||
format(_format), channels(_channels) {}
|
||||
|
||||
static constexpr AudioFormat Undefined() {
|
||||
return AudioFormat(0, SampleFormat::UNDEFINED,0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the object, i.e. sets all attributes to an undefined
|
||||
* (invalid) value.
|
||||
*/
|
||||
void Clear() {
|
||||
sample_rate = 0;
|
||||
format = SampleFormat::UNDEFINED;
|
||||
channels = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the object has a defined value.
|
||||
*/
|
||||
constexpr bool IsDefined() const {
|
||||
return sample_rate != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the object is full, i.e. all attributes are
|
||||
* defined. This is more complete than IsDefined(), but
|
||||
* slower.
|
||||
*/
|
||||
constexpr bool IsFullyDefined() const {
|
||||
return sample_rate != 0 && format != SampleFormat::UNDEFINED &&
|
||||
channels != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the object has at least one defined value.
|
||||
*/
|
||||
constexpr bool IsMaskDefined() const {
|
||||
return sample_rate != 0 || format != SampleFormat::UNDEFINED ||
|
||||
channels != 0;
|
||||
}
|
||||
|
||||
bool IsValid() const;
|
||||
bool IsMaskValid() const;
|
||||
|
||||
constexpr bool operator==(const AudioFormat other) const {
|
||||
return sample_rate == other.sample_rate &&
|
||||
format == other.format &&
|
||||
channels == other.channels;
|
||||
}
|
||||
|
||||
constexpr bool operator!=(const AudioFormat other) const {
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
void ApplyMask(AudioFormat mask) noexcept;
|
||||
|
||||
gcc_pure
|
||||
AudioFormat WithMask(AudioFormat mask) const noexcept {
|
||||
AudioFormat result = *this;
|
||||
result.ApplyMask(mask);
|
||||
return result;
|
||||
}
|
||||
|
||||
gcc_pure
|
||||
bool MatchMask(AudioFormat mask) const noexcept {
|
||||
return WithMask(mask) == *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size of each (mono) sample in bytes.
|
||||
*/
|
||||
unsigned GetSampleSize() const;
|
||||
|
||||
/**
|
||||
* Returns the size of each full frame in bytes.
|
||||
*/
|
||||
unsigned GetFrameSize() const;
|
||||
|
||||
template<typename D>
|
||||
constexpr auto TimeToFrames(D t) const noexcept {
|
||||
using Period = typename D::period;
|
||||
return ((t.count() * sample_rate) / Period::den) * Period::num;
|
||||
}
|
||||
|
||||
template<typename D>
|
||||
constexpr size_t TimeToSize(D t) const noexcept {
|
||||
return size_t(size_t(TimeToFrames(t)) * GetFrameSize());
|
||||
}
|
||||
|
||||
template<typename D>
|
||||
constexpr D FramesToTime(std::uintmax_t size) const noexcept {
|
||||
using Rep = typename D::rep;
|
||||
using Period = typename D::period;
|
||||
return D(((Rep(1) * size / Period::num) * Period::den) / sample_rate);
|
||||
}
|
||||
|
||||
template<typename D>
|
||||
constexpr D SizeToTime(std::uintmax_t size) const noexcept {
|
||||
return FramesToTime<D>(size / GetFrameSize());
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks whether the sample rate is valid.
|
||||
*
|
||||
* @param sample_rate the sample rate in Hz
|
||||
*/
|
||||
static constexpr inline bool
|
||||
audio_valid_sample_rate(unsigned sample_rate)
|
||||
{
|
||||
return sample_rate > 0 && sample_rate < (1 << 30);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the number of channels is valid.
|
||||
*/
|
||||
static constexpr inline bool
|
||||
audio_valid_channel_count(unsigned channels)
|
||||
{
|
||||
return channels >= 1 && channels <= MAX_CHANNELS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns false if the format is not valid for playback with MPD.
|
||||
* This function performs some basic validity checks.
|
||||
*/
|
||||
inline bool
|
||||
AudioFormat::IsValid() const
|
||||
{
|
||||
return audio_valid_sample_rate(sample_rate) &&
|
||||
audio_valid_sample_format(format) &&
|
||||
audio_valid_channel_count(channels);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns false if the format mask is not valid for playback with
|
||||
* MPD. This function performs some basic validity checks.
|
||||
*/
|
||||
inline bool
|
||||
AudioFormat::IsMaskValid() const
|
||||
{
|
||||
return (sample_rate == 0 ||
|
||||
audio_valid_sample_rate(sample_rate)) &&
|
||||
(format == SampleFormat::UNDEFINED ||
|
||||
audio_valid_sample_format(format)) &&
|
||||
(channels == 0 || audio_valid_channel_count(channels));
|
||||
}
|
||||
|
||||
inline unsigned
|
||||
AudioFormat::GetSampleSize() const
|
||||
{
|
||||
return sample_format_size(format);
|
||||
}
|
||||
|
||||
inline unsigned
|
||||
AudioFormat::GetFrameSize() const
|
||||
{
|
||||
return GetSampleSize() * channels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the #AudioFormat object into a string, e.g. for printing
|
||||
* it in a log file.
|
||||
*
|
||||
* @param af the #AudioFormat object
|
||||
* @return the string buffer
|
||||
*/
|
||||
gcc_const
|
||||
StringBuffer<24>
|
||||
ToString(AudioFormat af) noexcept;
|
||||
|
||||
#endif
|
||||
187
src/AudioParser.cxx
Normal file
187
src/AudioParser.cxx
Normal file
@@ -0,0 +1,187 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Parser functions for audio related objects.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "AudioParser.hxx"
|
||||
#include "AudioFormat.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static uint32_t
|
||||
ParseSampleRate(const char *src, bool mask, const char **endptr_r)
|
||||
{
|
||||
unsigned long value;
|
||||
char *endptr;
|
||||
|
||||
if (mask && *src == '*') {
|
||||
*endptr_r = src + 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
value = strtoul(src, &endptr, 10);
|
||||
if (endptr == src) {
|
||||
throw std::invalid_argument("Failed to parse the sample rate");
|
||||
} else if (!audio_valid_sample_rate(value))
|
||||
throw FormatInvalidArgument("Invalid sample rate: %lu", value);
|
||||
|
||||
*endptr_r = endptr;
|
||||
return value;
|
||||
}
|
||||
|
||||
static SampleFormat
|
||||
ParseSampleFormat(const char *src, bool mask, const char **endptr_r)
|
||||
{
|
||||
unsigned long value;
|
||||
char *endptr;
|
||||
SampleFormat sample_format;
|
||||
|
||||
if (mask && *src == '*') {
|
||||
*endptr_r = src + 1;
|
||||
return SampleFormat::UNDEFINED;
|
||||
}
|
||||
|
||||
if (*src == 'f') {
|
||||
*endptr_r = src + 1;
|
||||
return SampleFormat::FLOAT;
|
||||
}
|
||||
|
||||
if (memcmp(src, "dsd", 3) == 0) {
|
||||
*endptr_r = src + 3;
|
||||
return SampleFormat::DSD;
|
||||
}
|
||||
|
||||
value = strtoul(src, &endptr, 10);
|
||||
if (endptr == src)
|
||||
throw std::invalid_argument("Failed to parse the sample format");
|
||||
|
||||
switch (value) {
|
||||
case 8:
|
||||
sample_format = SampleFormat::S8;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
sample_format = SampleFormat::S16;
|
||||
break;
|
||||
|
||||
case 24:
|
||||
if (memcmp(endptr, "_3", 2) == 0)
|
||||
/* for backwards compatibility */
|
||||
endptr += 2;
|
||||
|
||||
sample_format = SampleFormat::S24_P32;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
sample_format = SampleFormat::S32;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw FormatInvalidArgument("Invalid sample format: %lu",
|
||||
value);
|
||||
}
|
||||
|
||||
assert(audio_valid_sample_format(sample_format));
|
||||
|
||||
*endptr_r = endptr;
|
||||
return sample_format;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
ParseChannelCount(const char *src, bool mask, const char **endptr_r)
|
||||
{
|
||||
unsigned long value;
|
||||
char *endptr;
|
||||
|
||||
if (mask && *src == '*') {
|
||||
*endptr_r = src + 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
value = strtoul(src, &endptr, 10);
|
||||
if (endptr == src)
|
||||
throw std::invalid_argument("Failed to parse the channel count");
|
||||
else if (!audio_valid_channel_count(value))
|
||||
throw FormatInvalidArgument("Invalid channel count: %u",
|
||||
value);
|
||||
|
||||
*endptr_r = endptr;
|
||||
return value;
|
||||
}
|
||||
|
||||
AudioFormat
|
||||
ParseAudioFormat(const char *src, bool mask)
|
||||
{
|
||||
AudioFormat dest;
|
||||
dest.Clear();
|
||||
|
||||
if (strncmp(src, "dsd", 3) == 0) {
|
||||
/* allow format specifications such as "dsd64" which
|
||||
implies the sample rate */
|
||||
|
||||
char *endptr;
|
||||
auto dsd = strtoul(src + 3, &endptr, 10);
|
||||
if (endptr > src + 3 && *endptr == ':' &&
|
||||
dsd >= 32 && dsd <= 4096 && dsd % 2 == 0) {
|
||||
dest.sample_rate = dsd * 44100 / 8;
|
||||
dest.format = SampleFormat::DSD;
|
||||
|
||||
src = endptr + 1;
|
||||
dest.channels = ParseChannelCount(src, mask, &src);
|
||||
if (*src != 0)
|
||||
throw FormatInvalidArgument("Extra data after channel count: %s",
|
||||
src);
|
||||
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
||||
/* parse sample rate */
|
||||
|
||||
dest.sample_rate = ParseSampleRate(src, mask, &src);
|
||||
|
||||
if (*src++ != ':')
|
||||
throw std::invalid_argument("Sample format missing");
|
||||
|
||||
/* parse sample format */
|
||||
|
||||
dest.format = ParseSampleFormat(src, mask, &src);
|
||||
|
||||
if (*src++ != ':')
|
||||
throw std::invalid_argument("Channel count missing");
|
||||
|
||||
/* parse channel count */
|
||||
|
||||
dest.channels = ParseChannelCount(src, mask, &src);
|
||||
|
||||
if (*src != 0)
|
||||
throw FormatInvalidArgument("Extra data after channel count: %s",
|
||||
src);
|
||||
|
||||
assert(mask
|
||||
? dest.IsMaskValid()
|
||||
: dest.IsValid());
|
||||
return dest;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2003-2010 The Music Player Daemon Project
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -22,28 +22,21 @@
|
||||
* Parser functions for audio related objects.
|
||||
*/
|
||||
|
||||
#ifndef AUDIO_PARSER_H
|
||||
#define AUDIO_PARSER_H
|
||||
#ifndef MPD_AUDIO_PARSER_HXX
|
||||
#define MPD_AUDIO_PARSER_HXX
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
struct audio_format;
|
||||
struct AudioFormat;
|
||||
|
||||
/**
|
||||
* Parses a string in the form "SAMPLE_RATE:BITS:CHANNELS" into an
|
||||
* #audio_format.
|
||||
* #AudioFormat.
|
||||
*
|
||||
* Throws #std::runtime_error on error.
|
||||
*
|
||||
* @param dest the destination #audio_format struct
|
||||
* @param src the input string
|
||||
* @param mask if true, then "*" is allowed for any number of items
|
||||
* @param error_r location to store the error occuring, or NULL to
|
||||
* ignore errors
|
||||
* @return true on success
|
||||
*/
|
||||
bool
|
||||
audio_format_parse(struct audio_format *dest, const char *src,
|
||||
bool mask, GError **error_r);
|
||||
AudioFormat
|
||||
ParseAudioFormat(const char *src, bool mask);
|
||||
|
||||
#endif
|
||||
41
src/BulkEdit.hxx
Normal file
41
src/BulkEdit.hxx
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_BULK_EDIT_HXX
|
||||
#define MPD_BULK_EDIT_HXX
|
||||
|
||||
#include "Partition.hxx"
|
||||
|
||||
/**
|
||||
* Begin a "bulk edit" and commit it automatically.
|
||||
*/
|
||||
class ScopeBulkEdit {
|
||||
Partition &partition;
|
||||
|
||||
public:
|
||||
ScopeBulkEdit(Partition &_partition):partition(_partition) {
|
||||
partition.playlist.BeginBulk();
|
||||
}
|
||||
|
||||
~ScopeBulkEdit() {
|
||||
partition.playlist.CommitBulk(partition.pc);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
61
src/CheckAudioFormat.cxx
Normal file
61
src/CheckAudioFormat.cxx
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "AudioFormat.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
void
|
||||
CheckSampleRate(unsigned long sample_rate)
|
||||
{
|
||||
if (!audio_valid_sample_rate(sample_rate))
|
||||
throw FormatRuntimeError("Invalid sample rate: %lu",
|
||||
sample_rate);
|
||||
}
|
||||
|
||||
void
|
||||
CheckSampleFormat(SampleFormat sample_format)
|
||||
{
|
||||
if (!audio_valid_sample_format(sample_format))
|
||||
throw FormatRuntimeError("Invalid sample format: %u",
|
||||
unsigned(sample_format));
|
||||
}
|
||||
|
||||
void
|
||||
CheckChannelCount(unsigned channels)
|
||||
{
|
||||
if (!audio_valid_channel_count(channels))
|
||||
throw FormatRuntimeError("Invalid channel count: %u",
|
||||
channels);
|
||||
}
|
||||
|
||||
AudioFormat
|
||||
CheckAudioFormat(unsigned long sample_rate,
|
||||
SampleFormat sample_format, unsigned channels)
|
||||
{
|
||||
CheckSampleRate(sample_rate);
|
||||
CheckSampleFormat(sample_format);
|
||||
CheckChannelCount(channels);
|
||||
|
||||
return AudioFormat(sample_rate, sample_format, channels);
|
||||
}
|
||||
44
src/CheckAudioFormat.hxx
Normal file
44
src/CheckAudioFormat.hxx
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_CHECK_AUDIO_FORMAT_HXX
|
||||
#define MPD_CHECK_AUDIO_FORMAT_HXX
|
||||
|
||||
#include "AudioFormat.hxx"
|
||||
|
||||
void
|
||||
CheckSampleRate(unsigned long sample_rate);
|
||||
|
||||
void
|
||||
CheckSampleFormat(SampleFormat sample_format);
|
||||
|
||||
void
|
||||
CheckChannelCount(unsigned sample_format);
|
||||
|
||||
/**
|
||||
* Check #AudioFormat attributes and construct an #AudioFormat
|
||||
* instance.
|
||||
*
|
||||
* Throws #std::runtime_error on error.
|
||||
*/
|
||||
AudioFormat
|
||||
CheckAudioFormat(unsigned long sample_rate,
|
||||
SampleFormat sample_format, unsigned channels);
|
||||
|
||||
#endif
|
||||
225
src/Chrono.hxx
Normal file
225
src/Chrono.hxx
Normal file
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_CHRONO_HXX
|
||||
#define MPD_CHRONO_HXX
|
||||
|
||||
#include <chrono>
|
||||
#include <utility>
|
||||
#include <cstdint>
|
||||
|
||||
using FloatDuration = std::chrono::duration<double>;
|
||||
|
||||
/**
|
||||
* A time stamp within a song. Granularity is 1 millisecond and the
|
||||
* maximum value is about 49 days.
|
||||
*/
|
||||
class SongTime : public std::chrono::duration<std::uint32_t, std::milli> {
|
||||
typedef std::chrono::duration<std::uint32_t, std::milli> Base;
|
||||
|
||||
public:
|
||||
SongTime() = default;
|
||||
|
||||
template<typename T>
|
||||
explicit constexpr SongTime(T t):Base(t) {}
|
||||
|
||||
static constexpr SongTime zero() {
|
||||
return SongTime(Base::zero());
|
||||
}
|
||||
|
||||
template<typename D>
|
||||
static constexpr SongTime Cast(D src) {
|
||||
return SongTime(std::chrono::duration_cast<Base>(src));
|
||||
}
|
||||
|
||||
static constexpr SongTime FromS(unsigned s) {
|
||||
return SongTime(rep(s) * 1000);
|
||||
}
|
||||
|
||||
static constexpr SongTime FromS(float s) {
|
||||
return SongTime(rep(s * 1000));
|
||||
}
|
||||
|
||||
static constexpr SongTime FromS(double s) {
|
||||
return SongTime(rep(s * 1000));
|
||||
}
|
||||
|
||||
static constexpr SongTime FromMS(rep ms) {
|
||||
return SongTime(ms);
|
||||
}
|
||||
|
||||
constexpr rep ToS() const {
|
||||
return count() / rep(1000);
|
||||
}
|
||||
|
||||
constexpr rep RoundS() const {
|
||||
return (count() + 500) / rep(1000);
|
||||
}
|
||||
|
||||
constexpr rep ToMS() const {
|
||||
return count();
|
||||
}
|
||||
|
||||
template<typename T=rep>
|
||||
constexpr T ToScale(unsigned scale) const {
|
||||
return count() * T(scale) / 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a scalar value with the given scale to a #SongTime
|
||||
* instance.
|
||||
*
|
||||
* @param value the input value
|
||||
* @param scale the value's scale in Hz
|
||||
*/
|
||||
template<typename T=rep>
|
||||
static constexpr SongTime FromScale(T value, unsigned scale) {
|
||||
return SongTime(value * T(1000) / T(scale));
|
||||
}
|
||||
|
||||
constexpr double ToDoubleS() const {
|
||||
return double(count()) / 1000.;
|
||||
};
|
||||
|
||||
constexpr bool IsZero() const {
|
||||
return count() == 0;
|
||||
}
|
||||
|
||||
constexpr bool IsPositive() const {
|
||||
return count() > 0;
|
||||
}
|
||||
|
||||
constexpr SongTime operator+(const SongTime &other) const {
|
||||
return SongTime(*(const Base *)this + (const Base &)other);
|
||||
}
|
||||
|
||||
constexpr SongTime operator-(const SongTime &other) const {
|
||||
return SongTime(*(const Base *)this - (const Base &)other);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* A variant of #SongTime that is based on a signed integer. It can
|
||||
* be used for relative values.
|
||||
*/
|
||||
class SignedSongTime : public std::chrono::duration<std::int32_t, std::milli> {
|
||||
typedef std::chrono::duration<std::int32_t, std::milli> Base;
|
||||
|
||||
public:
|
||||
SignedSongTime() = default;
|
||||
|
||||
template<typename T>
|
||||
explicit constexpr SignedSongTime(T t):Base(t) {}
|
||||
|
||||
/**
|
||||
* Allow implicit conversion from SongTime to SignedSongTime.
|
||||
*/
|
||||
constexpr SignedSongTime(SongTime t):Base(t) {}
|
||||
|
||||
static constexpr SignedSongTime zero() {
|
||||
return SignedSongTime(Base::zero());
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a negative value.
|
||||
*/
|
||||
static constexpr SignedSongTime Negative() {
|
||||
return SignedSongTime(-1);
|
||||
}
|
||||
|
||||
template<typename D>
|
||||
static constexpr SongTime Cast(D src) {
|
||||
return SongTime(std::chrono::duration_cast<Base>(src));
|
||||
}
|
||||
|
||||
static constexpr SignedSongTime FromS(int s) {
|
||||
return SignedSongTime(rep(s) * 1000);
|
||||
}
|
||||
|
||||
static constexpr SignedSongTime FromS(unsigned s) {
|
||||
return SignedSongTime(rep(s) * 1000);
|
||||
}
|
||||
|
||||
static constexpr SignedSongTime FromS(float s) {
|
||||
return SignedSongTime(rep(s * 1000));
|
||||
}
|
||||
|
||||
static constexpr SignedSongTime FromS(double s) {
|
||||
return SignedSongTime(rep(s * 1000));
|
||||
}
|
||||
|
||||
static constexpr SignedSongTime FromMS(rep ms) {
|
||||
return SignedSongTime(ms);
|
||||
}
|
||||
|
||||
constexpr rep ToS() const {
|
||||
return count() / rep(1000);
|
||||
}
|
||||
|
||||
constexpr rep RoundS() const {
|
||||
return (count() + 500) / rep(1000);
|
||||
}
|
||||
|
||||
constexpr rep ToMS() const {
|
||||
return count();
|
||||
}
|
||||
|
||||
template<typename T=rep>
|
||||
constexpr T ToScale(unsigned scale) const {
|
||||
return count() * T(scale) / 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a scalar value with the given scale to a
|
||||
* #SignedSongTime instance.
|
||||
*
|
||||
* @param value the input value
|
||||
* @param scale the value's scale in Hz
|
||||
*/
|
||||
template<typename T=rep>
|
||||
static constexpr SignedSongTime FromScale(T value, unsigned scale) {
|
||||
return SignedSongTime(value * T(1000) / T(scale));
|
||||
}
|
||||
|
||||
constexpr double ToDoubleS() const {
|
||||
return double(count()) / 1000.;
|
||||
};
|
||||
|
||||
constexpr bool IsZero() const {
|
||||
return count() == 0;
|
||||
}
|
||||
|
||||
constexpr bool IsPositive() const {
|
||||
return count() > 0;
|
||||
}
|
||||
|
||||
constexpr bool IsNegative() const {
|
||||
return count() < 0;
|
||||
}
|
||||
|
||||
constexpr SignedSongTime operator+(const SignedSongTime &other) const {
|
||||
return SignedSongTime(*(const Base *)this + (const Base &)other);
|
||||
}
|
||||
|
||||
constexpr SignedSongTime operator-(const SignedSongTime &other) const {
|
||||
return SignedSongTime(*(const Base *)this - (const Base &)other);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
405
src/CommandLine.cxx
Normal file
405
src/CommandLine.cxx
Normal file
@@ -0,0 +1,405 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "CommandLine.hxx"
|
||||
#include "GitVersion.hxx"
|
||||
#include "ls.hxx"
|
||||
#include "LogInit.hxx"
|
||||
#include "Log.hxx"
|
||||
#include "config/File.hxx"
|
||||
#include "decoder/DecoderList.hxx"
|
||||
#include "decoder/DecoderPlugin.hxx"
|
||||
#include "output/Registry.hxx"
|
||||
#include "output/OutputPlugin.hxx"
|
||||
#include "input/Registry.hxx"
|
||||
#include "input/InputPlugin.hxx"
|
||||
#include "playlist/PlaylistRegistry.hxx"
|
||||
#include "playlist/PlaylistPlugin.hxx"
|
||||
#include "fs/AllocatedPath.hxx"
|
||||
#include "fs/NarrowPath.hxx"
|
||||
#include "fs/Traits.hxx"
|
||||
#include "fs/FileSystem.hxx"
|
||||
#include "fs/StandardDirectory.hxx"
|
||||
#include "system/Error.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
#include "util/OptionDef.hxx"
|
||||
#include "util/OptionParser.hxx"
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
#include "db/Registry.hxx"
|
||||
#include "db/DatabasePlugin.hxx"
|
||||
#include "storage/Registry.hxx"
|
||||
#include "storage/StoragePlugin.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
#include "neighbor/Registry.hxx"
|
||||
#include "neighbor/NeighborPlugin.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_ENCODER
|
||||
#include "encoder/EncoderList.hxx"
|
||||
#include "encoder/EncoderPlugin.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
#include "archive/ArchiveList.hxx"
|
||||
#include "archive/ArchivePlugin.hxx"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
namespace {
|
||||
#ifdef _WIN32
|
||||
constexpr auto CONFIG_FILE_LOCATION = Path::FromFS(PATH_LITERAL("mpd\\mpd.conf"));
|
||||
constexpr auto APP_CONFIG_FILE_LOCATION = Path::FromFS(PATH_LITERAL("conf\\mpd.conf"));
|
||||
#else
|
||||
constexpr auto USER_CONFIG_FILE_LOCATION1 = Path::FromFS(PATH_LITERAL(".mpdconf"));
|
||||
constexpr auto USER_CONFIG_FILE_LOCATION2 = Path::FromFS(PATH_LITERAL(".mpd/mpd.conf"));
|
||||
constexpr auto USER_CONFIG_FILE_LOCATION_XDG = Path::FromFS(PATH_LITERAL("mpd/mpd.conf"));
|
||||
#endif
|
||||
}
|
||||
|
||||
enum Option {
|
||||
OPTION_KILL,
|
||||
OPTION_NO_CONFIG,
|
||||
OPTION_NO_DAEMON,
|
||||
OPTION_STDOUT,
|
||||
OPTION_STDERR,
|
||||
OPTION_VERBOSE,
|
||||
OPTION_VERSION,
|
||||
OPTION_HELP,
|
||||
OPTION_HELP2,
|
||||
};
|
||||
|
||||
static constexpr OptionDef option_defs[] = {
|
||||
{"kill", "kill the currently running mpd session"},
|
||||
{"no-config", "don't read from config"},
|
||||
{"no-daemon", "don't detach from console"},
|
||||
{"stdout", nullptr}, // hidden, compatibility with old versions
|
||||
{"stderr", "print messages to stderr"},
|
||||
{"verbose", 'v', "verbose logging"},
|
||||
{"version", 'V', "print version number"},
|
||||
{"help", 'h', "show help options"},
|
||||
{nullptr, '?', nullptr}, // hidden, standard alias for --help
|
||||
};
|
||||
|
||||
static constexpr Domain cmdline_domain("cmdline");
|
||||
|
||||
gcc_noreturn
|
||||
static void version(void)
|
||||
{
|
||||
printf("Music Player Daemon " VERSION " (%s)"
|
||||
"\n"
|
||||
"Copyright 2003-2007 Warren Dukes <warren.dukes@gmail.com>\n"
|
||||
"Copyright 2008-2018 Max Kellermann <max.kellermann@gmail.com>\n"
|
||||
"This is free software; see the source for copying conditions. There is NO\n"
|
||||
"warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
|
||||
GIT_VERSION);
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
printf("\n"
|
||||
"Database plugins:\n");
|
||||
|
||||
for (auto i = database_plugins; *i != nullptr; ++i)
|
||||
printf(" %s", (*i)->name);
|
||||
|
||||
printf("\n\n"
|
||||
"Storage plugins:\n");
|
||||
|
||||
for (auto i = storage_plugins; *i != nullptr; ++i)
|
||||
printf(" %s", (*i)->name);
|
||||
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
printf("\n"
|
||||
"Neighbor plugins:\n");
|
||||
for (auto i = neighbor_plugins; *i != nullptr; ++i)
|
||||
printf(" %s", (*i)->name);
|
||||
|
||||
#endif
|
||||
|
||||
printf("\n"
|
||||
"\n"
|
||||
"Decoders plugins:\n");
|
||||
|
||||
decoder_plugins_for_each([](const DecoderPlugin &plugin){
|
||||
printf(" [%s]", plugin.name);
|
||||
|
||||
const char *const*suffixes = plugin.suffixes;
|
||||
if (suffixes != nullptr)
|
||||
for (; *suffixes != nullptr; ++suffixes)
|
||||
printf(" %s", *suffixes);
|
||||
|
||||
printf("\n");
|
||||
});
|
||||
|
||||
printf("\n"
|
||||
"Filters:\n"
|
||||
#ifdef ENABLE_LIBSAMPLERATE
|
||||
" libsamplerate"
|
||||
#endif
|
||||
#ifdef ENABLE_SOXR
|
||||
" soxr"
|
||||
#endif
|
||||
"\n\n"
|
||||
"Tag plugins:\n"
|
||||
#ifdef ENABLE_ID3TAG
|
||||
" id3tag"
|
||||
#endif
|
||||
"\n\n"
|
||||
"Output plugins:\n");
|
||||
audio_output_plugins_for_each(plugin)
|
||||
printf(" %s", plugin->name);
|
||||
printf("\n"
|
||||
|
||||
#ifdef ENABLE_ENCODER
|
||||
"\n"
|
||||
"Encoder plugins:\n");
|
||||
encoder_plugins_for_each(plugin)
|
||||
printf(" %s", plugin->name);
|
||||
printf("\n"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
"\n"
|
||||
"Archive plugins:\n");
|
||||
archive_plugins_for_each(plugin) {
|
||||
printf(" [%s]", plugin->name);
|
||||
|
||||
const char *const*suffixes = plugin->suffixes;
|
||||
if (suffixes != nullptr)
|
||||
for (; *suffixes != nullptr; ++suffixes)
|
||||
printf(" %s", *suffixes);
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf(""
|
||||
#endif
|
||||
|
||||
"\n"
|
||||
"Input plugins:\n"
|
||||
" file"
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
" archive"
|
||||
#endif
|
||||
);
|
||||
input_plugins_for_each(plugin)
|
||||
printf(" %s", plugin->name);
|
||||
|
||||
printf("\n\n"
|
||||
"Playlist plugins:\n");
|
||||
playlist_plugins_for_each(plugin)
|
||||
printf(" %s", plugin->name);
|
||||
|
||||
printf("\n\n"
|
||||
"Protocols:\n");
|
||||
print_supported_uri_schemes_to_fp(stdout);
|
||||
|
||||
printf("\n"
|
||||
"Other features:\n"
|
||||
#ifdef HAVE_AVAHI
|
||||
" avahi"
|
||||
#endif
|
||||
#ifdef ENABLE_DBUS
|
||||
" dbus"
|
||||
#endif
|
||||
#ifdef ENABLE_UDISKS
|
||||
" udisks"
|
||||
#endif
|
||||
#ifdef USE_EPOLL
|
||||
" epoll"
|
||||
#endif
|
||||
#ifdef HAVE_ICONV
|
||||
" iconv"
|
||||
#endif
|
||||
#ifdef HAVE_ICU
|
||||
" icu"
|
||||
#endif
|
||||
#ifdef ENABLE_INOTIFY
|
||||
" inotify"
|
||||
#endif
|
||||
#ifdef HAVE_IPV6
|
||||
" ipv6"
|
||||
#endif
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
" systemd"
|
||||
#endif
|
||||
#ifdef HAVE_TCP
|
||||
" tcp"
|
||||
#endif
|
||||
#ifdef HAVE_UN
|
||||
" un"
|
||||
#endif
|
||||
"\n");
|
||||
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
static void PrintOption(const OptionDef &opt)
|
||||
{
|
||||
if (opt.HasShortOption())
|
||||
printf(" -%c, --%-12s%s\n",
|
||||
opt.GetShortOption(),
|
||||
opt.GetLongOption(),
|
||||
opt.GetDescription());
|
||||
else
|
||||
printf(" --%-16s%s\n",
|
||||
opt.GetLongOption(),
|
||||
opt.GetDescription());
|
||||
}
|
||||
|
||||
gcc_noreturn
|
||||
static void help(void)
|
||||
{
|
||||
printf("Usage:\n"
|
||||
" mpd [OPTION...] [path/to/mpd.conf]\n"
|
||||
"\n"
|
||||
"Music Player Daemon - a daemon for playing music.\n"
|
||||
"\n"
|
||||
"Options:\n");
|
||||
|
||||
for (const auto &i : option_defs)
|
||||
if(i.HasDescription() == true) // hide hidden options from help print
|
||||
PrintOption(i);
|
||||
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
class ConfigLoader
|
||||
{
|
||||
ConfigData &config;
|
||||
|
||||
public:
|
||||
explicit ConfigLoader(ConfigData &_config) noexcept
|
||||
:config(_config) {}
|
||||
|
||||
bool TryFile(const Path path);
|
||||
bool TryFile(const AllocatedPath &base_path, Path path);
|
||||
};
|
||||
|
||||
bool ConfigLoader::TryFile(Path path)
|
||||
{
|
||||
if (FileExists(path)) {
|
||||
ReadConfigFile(config, path);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ConfigLoader::TryFile(const AllocatedPath &base_path, Path path)
|
||||
{
|
||||
if (base_path.IsNull())
|
||||
return false;
|
||||
auto full_path = base_path / path;
|
||||
return TryFile(full_path);
|
||||
}
|
||||
|
||||
void
|
||||
ParseCommandLine(int argc, char **argv, struct options &options,
|
||||
ConfigData &config)
|
||||
{
|
||||
bool use_config_file = true;
|
||||
|
||||
// First pass: handle command line options
|
||||
OptionParser parser(option_defs, argc, argv);
|
||||
while (auto o = parser.Next()) {
|
||||
switch (Option(o.index)) {
|
||||
case OPTION_KILL:
|
||||
options.kill = true;
|
||||
break;
|
||||
|
||||
case OPTION_NO_CONFIG:
|
||||
use_config_file = false;
|
||||
break;
|
||||
|
||||
case OPTION_NO_DAEMON:
|
||||
options.daemon = false;
|
||||
break;
|
||||
|
||||
case OPTION_STDOUT:
|
||||
case OPTION_STDERR:
|
||||
options.log_stderr = true;
|
||||
break;
|
||||
|
||||
case OPTION_VERBOSE:
|
||||
options.verbose = true;
|
||||
break;
|
||||
|
||||
case OPTION_VERSION:
|
||||
version();
|
||||
|
||||
case OPTION_HELP:
|
||||
case OPTION_HELP2:
|
||||
help();
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize the logging library, so the configuration file
|
||||
parser can use it already */
|
||||
log_early_init(options.verbose);
|
||||
|
||||
if (!use_config_file) {
|
||||
LogDebug(cmdline_domain,
|
||||
"Ignoring config, using daemon defaults");
|
||||
return;
|
||||
}
|
||||
|
||||
// Second pass: find non-option parameters (i.e. config file)
|
||||
const char *config_file = nullptr;
|
||||
for (const char *i : parser.GetRemaining()) {
|
||||
if (config_file == nullptr) {
|
||||
config_file = i;
|
||||
continue;
|
||||
}
|
||||
|
||||
throw std::runtime_error("too many arguments");
|
||||
}
|
||||
|
||||
if (config_file != nullptr) {
|
||||
/* use specified configuration file */
|
||||
ReadConfigFile(config, FromNarrowPath(config_file));
|
||||
return;
|
||||
}
|
||||
|
||||
/* use default configuration file path */
|
||||
|
||||
ConfigLoader loader(config);
|
||||
|
||||
bool found =
|
||||
#ifdef _WIN32
|
||||
loader.TryFile(GetUserConfigDir(), CONFIG_FILE_LOCATION) ||
|
||||
loader.TryFile(GetSystemConfigDir(), CONFIG_FILE_LOCATION) ||
|
||||
loader.TryFile(GetAppBaseDir(), APP_CONFIG_FILE_LOCATION);
|
||||
#else
|
||||
loader.TryFile(GetUserConfigDir(),
|
||||
USER_CONFIG_FILE_LOCATION_XDG) ||
|
||||
loader.TryFile(GetHomeDir(), USER_CONFIG_FILE_LOCATION1) ||
|
||||
loader.TryFile(GetHomeDir(), USER_CONFIG_FILE_LOCATION2) ||
|
||||
loader.TryFile(Path::FromFS(SYSTEM_CONFIG_FILE_LOCATION));
|
||||
#endif
|
||||
if (!found)
|
||||
throw std::runtime_error("No configuration file found");
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2003-2010 The Music Player Daemon Project
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -17,22 +17,20 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef CMDLINE_H
|
||||
#define CMDLINE_H
|
||||
#ifndef MPD_COMMAND_LINE_HXX
|
||||
#define MPD_COMMAND_LINE_HXX
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
struct ConfigData;
|
||||
|
||||
struct options {
|
||||
gboolean kill;
|
||||
gboolean daemon;
|
||||
gboolean log_stderr;
|
||||
gboolean verbose;
|
||||
bool kill = false;
|
||||
bool daemon = true;
|
||||
bool log_stderr = false;
|
||||
bool verbose = false;
|
||||
};
|
||||
|
||||
bool
|
||||
parse_cmdline(int argc, char **argv, struct options *options,
|
||||
GError **error_r);
|
||||
void
|
||||
ParseCommandLine(int argc, char **argv, struct options &options,
|
||||
ConfigData &config);
|
||||
|
||||
#endif
|
||||
22
src/GitVersion.cxx
Normal file
22
src/GitVersion.cxx
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "GitVersion.hxx"
|
||||
|
||||
char GIT_VERSION[] = "@VCS_TAG@";
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2003-2010 The Music Player Daemon Project
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -17,9 +17,9 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_SIG_HANDLERS_H
|
||||
#define MPD_SIG_HANDLERS_H
|
||||
#ifndef MPD_GIT_VERSION_HXX
|
||||
#define MPD_GIT_VERSION_HXX
|
||||
|
||||
void initSigHandlers(void);
|
||||
extern char GIT_VERSION[];
|
||||
|
||||
#endif
|
||||
250
src/IcyMetaDataParser.cxx
Normal file
250
src/IcyMetaDataParser.cxx
Normal file
@@ -0,0 +1,250 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "IcyMetaDataParser.hxx"
|
||||
#include "tag/Tag.hxx"
|
||||
#include "tag/Builder.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
#include "util/StringView.hxx"
|
||||
#include "Log.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
static constexpr Domain icy_metadata_domain("icy_metadata");
|
||||
|
||||
void
|
||||
IcyMetaDataParser::Reset() noexcept
|
||||
{
|
||||
if (!IsDefined())
|
||||
return;
|
||||
|
||||
if (data_rest == 0 && meta_size > 0)
|
||||
delete[] meta_data;
|
||||
|
||||
tag.reset();
|
||||
|
||||
data_rest = data_size;
|
||||
meta_size = 0;
|
||||
}
|
||||
|
||||
size_t
|
||||
IcyMetaDataParser::Data(size_t length) noexcept
|
||||
{
|
||||
assert(length > 0);
|
||||
|
||||
if (!IsDefined())
|
||||
return length;
|
||||
|
||||
if (data_rest == 0)
|
||||
return 0;
|
||||
|
||||
if (length >= data_rest) {
|
||||
length = data_rest;
|
||||
data_rest = 0;
|
||||
} else
|
||||
data_rest -= length;
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
static void
|
||||
icy_add_item(TagBuilder &tag, TagType type, const char *value) noexcept
|
||||
{
|
||||
size_t length = strlen(value);
|
||||
|
||||
if (length >= 2 && value[0] == '\'' && value[length - 1] == '\'') {
|
||||
/* strip the single quotes */
|
||||
++value;
|
||||
length -= 2;
|
||||
}
|
||||
|
||||
if (length > 0)
|
||||
tag.AddItem(type, {value, length});
|
||||
}
|
||||
|
||||
static void
|
||||
icy_parse_tag_item(TagBuilder &tag,
|
||||
const char *name, const char *value) noexcept
|
||||
{
|
||||
if (strcmp(name, "StreamTitle") == 0)
|
||||
icy_add_item(tag, TAG_TITLE, value);
|
||||
else
|
||||
FormatDebug(icy_metadata_domain,
|
||||
"unknown icy-tag: '%s'", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a single quote that is followed by a semicolon (or by the end
|
||||
* of the string). If that fails, return the first single quote. If
|
||||
* that also fails, return #end.
|
||||
*/
|
||||
static char *
|
||||
find_end_quote(char *p, char *const end) noexcept
|
||||
{
|
||||
char *fallback = std::find(p, end, '\'');
|
||||
if (fallback >= end - 1 || fallback[1] == ';')
|
||||
return fallback;
|
||||
|
||||
p = fallback + 1;
|
||||
while (true) {
|
||||
p = std::find(p, end, '\'');
|
||||
if (p == end)
|
||||
return fallback;
|
||||
|
||||
if (p == end - 1 || p[1] == ';')
|
||||
return p;
|
||||
|
||||
++p;
|
||||
}
|
||||
}
|
||||
|
||||
static std::unique_ptr<Tag>
|
||||
icy_parse_tag(char *p, char *const end) noexcept
|
||||
{
|
||||
assert(p != nullptr);
|
||||
assert(end != nullptr);
|
||||
assert(p <= end);
|
||||
|
||||
TagBuilder tag;
|
||||
|
||||
while (p != end) {
|
||||
const char *const name = p;
|
||||
char *eq = std::find(p, end, '=');
|
||||
if (eq == end)
|
||||
break;
|
||||
|
||||
*eq = 0;
|
||||
p = eq + 1;
|
||||
|
||||
if (*p != '\'') {
|
||||
/* syntax error; skip to the next semicolon,
|
||||
try to recover */
|
||||
char *semicolon = std::find(p, end, ';');
|
||||
if (semicolon == end)
|
||||
break;
|
||||
p = semicolon + 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
++p;
|
||||
|
||||
const char *const value = p;
|
||||
char *quote = find_end_quote(p, end);
|
||||
if (quote == end)
|
||||
break;
|
||||
|
||||
*quote = 0;
|
||||
p = quote + 1;
|
||||
|
||||
icy_parse_tag_item(tag, name, value);
|
||||
|
||||
char *semicolon = std::find(p, end, ';');
|
||||
if (semicolon == end)
|
||||
break;
|
||||
p = semicolon + 1;
|
||||
}
|
||||
|
||||
return tag.CommitNew();
|
||||
}
|
||||
|
||||
size_t
|
||||
IcyMetaDataParser::Meta(const void *data, size_t length) noexcept
|
||||
{
|
||||
const unsigned char *p = (const unsigned char *)data;
|
||||
|
||||
assert(IsDefined());
|
||||
assert(data_rest == 0);
|
||||
assert(length > 0);
|
||||
|
||||
if (meta_size == 0) {
|
||||
/* read meta_size from the first byte of a meta
|
||||
block */
|
||||
meta_size = *p++ * 16;
|
||||
if (meta_size == 0) {
|
||||
/* special case: no metadata */
|
||||
data_rest = data_size;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 1 byte was consumed (must be re-added later for the
|
||||
return value */
|
||||
--length;
|
||||
|
||||
/* initialize metadata reader, allocate enough
|
||||
memory (+1 for the null terminator) */
|
||||
meta_position = 0;
|
||||
meta_data = new char[meta_size + 1];
|
||||
}
|
||||
|
||||
assert(meta_position < meta_size);
|
||||
|
||||
if (length > meta_size - meta_position)
|
||||
length = meta_size - meta_position;
|
||||
|
||||
memcpy(meta_data + meta_position, p, length);
|
||||
meta_position += length;
|
||||
|
||||
if (p != data)
|
||||
/* re-add the first byte (which contained meta_size) */
|
||||
++length;
|
||||
|
||||
if (meta_position == meta_size) {
|
||||
/* parse */
|
||||
|
||||
tag = icy_parse_tag(meta_data, meta_data + meta_size);
|
||||
delete[] meta_data;
|
||||
|
||||
/* change back to normal data mode */
|
||||
|
||||
meta_size = 0;
|
||||
data_rest = data_size;
|
||||
}
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
size_t
|
||||
IcyMetaDataParser::ParseInPlace(void *data, size_t length) noexcept
|
||||
{
|
||||
uint8_t *const dest0 = (uint8_t *)data;
|
||||
uint8_t *dest = dest0;
|
||||
const uint8_t *src = dest0;
|
||||
|
||||
while (length > 0) {
|
||||
size_t chunk = Data(length);
|
||||
if (chunk > 0) {
|
||||
memmove(dest, src, chunk);
|
||||
dest += chunk;
|
||||
src += chunk;
|
||||
length -= chunk;
|
||||
|
||||
if (length == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
chunk = Meta(src, length);
|
||||
if (chunk > 0) {
|
||||
src += chunk;
|
||||
length -= chunk;
|
||||
}
|
||||
}
|
||||
|
||||
return dest - dest0;
|
||||
}
|
||||
91
src/IcyMetaDataParser.hxx
Normal file
91
src/IcyMetaDataParser.hxx
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_ICY_META_DATA_PARSER_HXX
|
||||
#define MPD_ICY_META_DATA_PARSER_HXX
|
||||
|
||||
#include "tag/Tag.hxx"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
class IcyMetaDataParser {
|
||||
size_t data_size = 0, data_rest;
|
||||
|
||||
size_t meta_size, meta_position;
|
||||
char *meta_data;
|
||||
|
||||
std::unique_ptr<Tag> tag;
|
||||
|
||||
public:
|
||||
~IcyMetaDataParser() noexcept {
|
||||
Reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize an enabled icy_metadata object with the specified
|
||||
* data_size (from the icy-metaint HTTP response header).
|
||||
*/
|
||||
void Start(size_t _data_size) noexcept {
|
||||
data_size = data_rest = _data_size;
|
||||
meta_size = 0;
|
||||
tag = nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the icy_metadata. Call this after rewinding the stream.
|
||||
*/
|
||||
void Reset() noexcept;
|
||||
|
||||
/**
|
||||
* Checks whether the icy_metadata object is enabled.
|
||||
*/
|
||||
bool IsDefined() const noexcept {
|
||||
return data_size > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates data. Returns the number of bytes of normal data which
|
||||
* can be read by the caller, but not more than "length". If the
|
||||
* return value is smaller than "length", the caller should invoke
|
||||
* icy_meta().
|
||||
*/
|
||||
size_t Data(size_t length) noexcept;
|
||||
|
||||
/**
|
||||
* Reads metadata from the stream. Returns the number of bytes
|
||||
* consumed. If the return value is smaller than "length", the caller
|
||||
* should invoke icy_data().
|
||||
*/
|
||||
size_t Meta(const void *data, size_t length) noexcept;
|
||||
|
||||
/**
|
||||
* Parse data and eliminate metadata.
|
||||
*
|
||||
* @return the number of data bytes remaining in the buffer
|
||||
*/
|
||||
size_t ParseInPlace(void *data, size_t length) noexcept;
|
||||
|
||||
std::unique_ptr<Tag> ReadTag() noexcept {
|
||||
return std::exchange(tag, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
37
src/Idle.cxx
Normal file
37
src/Idle.cxx
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Support library for the "idle" command.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Idle.hxx"
|
||||
#include "Main.hxx"
|
||||
#include "Instance.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
void
|
||||
idle_add(unsigned flags)
|
||||
{
|
||||
assert(flags != 0);
|
||||
|
||||
instance->EmitIdle(flags);
|
||||
}
|
||||
37
src/Idle.hxx
Normal file
37
src/Idle.hxx
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Support library for the "idle" command.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MPD_IDLE_HXX
|
||||
#define MPD_IDLE_HXX
|
||||
|
||||
#include "IdleFlags.hxx"
|
||||
|
||||
/**
|
||||
* Adds idle flag (with bitwise "or") and queues notifications to all
|
||||
* clients.
|
||||
*/
|
||||
void
|
||||
idle_add(unsigned flags);
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2003-2010 The Music Player Daemon Project
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -22,15 +22,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "idle.h"
|
||||
#include "event_pipe.h"
|
||||
#include "IdleFlags.hxx"
|
||||
#include "util/ASCII.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <glib.h>
|
||||
|
||||
static unsigned idle_flags;
|
||||
static GMutex *idle_mutex = NULL;
|
||||
|
||||
static const char *const idle_names[] = {
|
||||
"database",
|
||||
@@ -42,51 +37,31 @@ static const char *const idle_names[] = {
|
||||
"options",
|
||||
"sticker",
|
||||
"update",
|
||||
NULL
|
||||
"subscription",
|
||||
"message",
|
||||
"neighbor",
|
||||
"mount",
|
||||
"partition",
|
||||
nullptr
|
||||
};
|
||||
|
||||
void
|
||||
idle_init(void)
|
||||
{
|
||||
g_assert(idle_mutex == NULL);
|
||||
idle_mutex = g_mutex_new();
|
||||
}
|
||||
|
||||
void
|
||||
idle_deinit(void)
|
||||
{
|
||||
g_assert(idle_mutex != NULL);
|
||||
g_mutex_free(idle_mutex);
|
||||
idle_mutex = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
idle_add(unsigned flags)
|
||||
{
|
||||
assert(flags != 0);
|
||||
|
||||
g_mutex_lock(idle_mutex);
|
||||
idle_flags |= flags;
|
||||
g_mutex_unlock(idle_mutex);
|
||||
|
||||
event_pipe_emit(PIPE_EVENT_IDLE);
|
||||
}
|
||||
|
||||
unsigned
|
||||
idle_get(void)
|
||||
{
|
||||
unsigned flags;
|
||||
|
||||
g_mutex_lock(idle_mutex);
|
||||
flags = idle_flags;
|
||||
idle_flags = 0;
|
||||
g_mutex_unlock(idle_mutex);
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
const char*const*
|
||||
idle_get_names(void)
|
||||
idle_get_names() noexcept
|
||||
{
|
||||
return idle_names;
|
||||
}
|
||||
|
||||
unsigned
|
||||
idle_parse_name(const char *name) noexcept
|
||||
{
|
||||
#if !CLANG_CHECK_VERSION(3,6)
|
||||
/* disabled on clang due to -Wtautological-pointer-compare */
|
||||
assert(name != nullptr);
|
||||
#endif
|
||||
|
||||
for (unsigned i = 0; idle_names[i] != nullptr; ++i)
|
||||
if (StringEqualsCaseASCII(name, idle_names[i]))
|
||||
return 1 << i;
|
||||
|
||||
return 0;
|
||||
}
|
||||
88
src/IdleFlags.hxx
Normal file
88
src/IdleFlags.hxx
Normal file
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Support library for the "idle" command.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MPD_IDLE_FLAGS_HXX
|
||||
#define MPD_IDLE_FLAGS_HXX
|
||||
|
||||
#include "util/Compiler.h"
|
||||
|
||||
/** song database has been updated*/
|
||||
static constexpr unsigned IDLE_DATABASE = 0x1;
|
||||
|
||||
/** a stored playlist has been modified, created, deleted or
|
||||
renamed */
|
||||
static constexpr unsigned IDLE_STORED_PLAYLIST = 0x2;
|
||||
|
||||
/** the current playlist has been modified */
|
||||
static constexpr unsigned IDLE_PLAYLIST = 0x4;
|
||||
|
||||
/** the player state has changed: play, stop, pause, seek, ... */
|
||||
static constexpr unsigned IDLE_PLAYER = 0x8;
|
||||
|
||||
/** the volume has been modified */
|
||||
static constexpr unsigned IDLE_MIXER = 0x10;
|
||||
|
||||
/** an audio output device has been enabled or disabled */
|
||||
static constexpr unsigned IDLE_OUTPUT = 0x20;
|
||||
|
||||
/** options have changed: crossfade; random; repeat; ... */
|
||||
static constexpr unsigned IDLE_OPTIONS = 0x40;
|
||||
|
||||
/** a sticker has been modified. */
|
||||
static constexpr unsigned IDLE_STICKER = 0x80;
|
||||
|
||||
/** a database update has started or finished. */
|
||||
static constexpr unsigned IDLE_UPDATE = 0x100;
|
||||
|
||||
/** a client has subscribed or unsubscribed to/from a channel */
|
||||
static constexpr unsigned IDLE_SUBSCRIPTION = 0x200;
|
||||
|
||||
/** a message on the subscribed channel was received */
|
||||
static constexpr unsigned IDLE_MESSAGE = 0x400;
|
||||
|
||||
/** a neighbor was found or lost */
|
||||
static constexpr unsigned IDLE_NEIGHBOR = 0x800;
|
||||
|
||||
/** the mount list has changed */
|
||||
static constexpr unsigned IDLE_MOUNT = 0x1000;
|
||||
|
||||
/** the partition list has changed */
|
||||
static constexpr unsigned IDLE_PARTITION = 0x2000;
|
||||
|
||||
/**
|
||||
* Get idle names
|
||||
*/
|
||||
gcc_const
|
||||
const char*const*
|
||||
idle_get_names() noexcept;
|
||||
|
||||
/**
|
||||
* Parse an idle name and return its mask. Returns 0 if the given
|
||||
* name is unknown.
|
||||
*/
|
||||
gcc_nonnull_all gcc_pure
|
||||
unsigned
|
||||
idle_parse_name(const char *name) noexcept;
|
||||
|
||||
#endif
|
||||
168
src/Instance.cxx
Normal file
168
src/Instance.cxx
Normal file
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "Instance.hxx"
|
||||
#include "Partition.hxx"
|
||||
#include "Idle.hxx"
|
||||
#include "Stats.hxx"
|
||||
|
||||
#ifdef ENABLE_CURL
|
||||
#include "RemoteTagCache.hxx"
|
||||
#include "util/UriUtil.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
#include "db/DatabaseError.hxx"
|
||||
#include "db/Interface.hxx"
|
||||
#include "db/update/Service.hxx"
|
||||
#include "storage/StorageInterface.hxx"
|
||||
|
||||
#ifdef ENABLE_SQLITE
|
||||
#include "sticker/StickerDatabase.hxx"
|
||||
#include "sticker/SongSticker.hxx"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <exception>
|
||||
|
||||
Instance::Instance()
|
||||
:rtio_thread(true),
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
systemd_watchdog(event_loop),
|
||||
#endif
|
||||
idle_monitor(event_loop, BIND_THIS_METHOD(OnIdle))
|
||||
{
|
||||
}
|
||||
|
||||
Instance::~Instance() noexcept
|
||||
{
|
||||
#ifdef ENABLE_DATABASE
|
||||
delete update;
|
||||
|
||||
if (database != nullptr) {
|
||||
database->Close();
|
||||
database.reset();
|
||||
}
|
||||
|
||||
delete storage;
|
||||
#endif
|
||||
}
|
||||
|
||||
Partition *
|
||||
Instance::FindPartition(const char *name) noexcept
|
||||
{
|
||||
for (auto &partition : partitions)
|
||||
if (partition.name == name)
|
||||
return &partition;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
|
||||
const Database &
|
||||
Instance::GetDatabaseOrThrow() const
|
||||
{
|
||||
if (database == nullptr)
|
||||
throw DatabaseError(DatabaseErrorCode::DISABLED,
|
||||
"No database");
|
||||
|
||||
return *database;
|
||||
}
|
||||
|
||||
void
|
||||
Instance::OnDatabaseModified()
|
||||
{
|
||||
assert(database != nullptr);
|
||||
|
||||
/* propagate the change to all subsystems */
|
||||
|
||||
stats_invalidate();
|
||||
|
||||
for (auto &partition : partitions)
|
||||
partition.DatabaseModified(*database);
|
||||
}
|
||||
|
||||
void
|
||||
Instance::OnDatabaseSongRemoved(const char *uri)
|
||||
{
|
||||
assert(database != nullptr);
|
||||
|
||||
#ifdef ENABLE_SQLITE
|
||||
/* if the song has a sticker, remove it */
|
||||
if (sticker_enabled()) {
|
||||
try {
|
||||
sticker_song_delete(uri);
|
||||
} catch (...) {
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
for (auto &partition : partitions)
|
||||
partition.StaleSong(uri);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
|
||||
void
|
||||
Instance::FoundNeighbor(gcc_unused const NeighborInfo &info) noexcept
|
||||
{
|
||||
for (auto &partition : partitions)
|
||||
partition.EmitIdle(IDLE_NEIGHBOR);
|
||||
}
|
||||
|
||||
void
|
||||
Instance::LostNeighbor(gcc_unused const NeighborInfo &info) noexcept
|
||||
{
|
||||
for (auto &partition : partitions)
|
||||
partition.EmitIdle(IDLE_NEIGHBOR);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_CURL
|
||||
|
||||
void
|
||||
Instance::LookupRemoteTag(const char *uri) noexcept
|
||||
{
|
||||
if (!uri_has_scheme(uri))
|
||||
return;
|
||||
|
||||
if (!remote_tag_cache)
|
||||
remote_tag_cache = std::make_unique<RemoteTagCache>(event_loop,
|
||||
*this);
|
||||
|
||||
remote_tag_cache->Lookup(uri);
|
||||
}
|
||||
|
||||
void
|
||||
Instance::OnRemoteTag(const char *uri, const Tag &tag) noexcept
|
||||
{
|
||||
if (!tag.IsDefined())
|
||||
/* boring */
|
||||
return;
|
||||
|
||||
for (auto &partition : partitions)
|
||||
partition.TagModified(uri, tag);
|
||||
}
|
||||
|
||||
#endif
|
||||
200
src/Instance.hxx
Normal file
200
src/Instance.hxx
Normal file
@@ -0,0 +1,200 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_INSTANCE_HXX
|
||||
#define MPD_INSTANCE_HXX
|
||||
|
||||
#include "config.h"
|
||||
#include "event/Loop.hxx"
|
||||
#include "event/Thread.hxx"
|
||||
#include "event/MaskMonitor.hxx"
|
||||
#include "util/Compiler.h"
|
||||
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
#include "lib/systemd/Watchdog.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_CURL
|
||||
#include "RemoteTagCacheHandler.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
#include "neighbor/Listener.hxx"
|
||||
class NeighborGlue;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
#include "db/DatabaseListener.hxx"
|
||||
#include "db/Ptr.hxx"
|
||||
class Storage;
|
||||
class UpdateService;
|
||||
#endif
|
||||
|
||||
#include <memory>
|
||||
#include <list>
|
||||
|
||||
class ClientList;
|
||||
struct Partition;
|
||||
class StateFile;
|
||||
class RemoteTagCache;
|
||||
|
||||
/**
|
||||
* A utility class which, when used as the first base class, ensures
|
||||
* that the #EventLoop gets initialized before the other base classes.
|
||||
*/
|
||||
struct EventLoopHolder {
|
||||
EventLoop event_loop;
|
||||
};
|
||||
|
||||
struct Instance final
|
||||
: EventLoopHolder
|
||||
#if defined(ENABLE_DATABASE) || defined(ENABLE_NEIGHBOR_PLUGINS)
|
||||
,
|
||||
#endif
|
||||
#ifdef ENABLE_DATABASE
|
||||
public DatabaseListener
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
public NeighborListener
|
||||
#endif
|
||||
#ifdef ENABLE_CURL
|
||||
, public RemoteTagCacheHandler
|
||||
#endif
|
||||
{
|
||||
/**
|
||||
* A thread running an #EventLoop for non-blocking (bulk) I/O.
|
||||
*/
|
||||
EventThread io_thread;
|
||||
|
||||
/**
|
||||
* Another thread running an #EventLoop for non-blocking
|
||||
* (real-time) I/O. This is used instead of #io_thread for
|
||||
* events which require low latency, e.g. for filling hardware
|
||||
* ring buffers.
|
||||
*/
|
||||
EventThread rtio_thread;
|
||||
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
Systemd::Watchdog systemd_watchdog;
|
||||
#endif
|
||||
|
||||
MaskMonitor idle_monitor;
|
||||
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
NeighborGlue *neighbors;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
DatabasePtr database;
|
||||
|
||||
/**
|
||||
* This is really a #CompositeStorage. To avoid heavy include
|
||||
* dependencies, we declare it as just #Storage.
|
||||
*/
|
||||
Storage *storage = nullptr;
|
||||
|
||||
UpdateService *update = nullptr;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_CURL
|
||||
std::unique_ptr<RemoteTagCache> remote_tag_cache;
|
||||
#endif
|
||||
|
||||
ClientList *client_list;
|
||||
|
||||
std::list<Partition> partitions;
|
||||
|
||||
StateFile *state_file = nullptr;
|
||||
|
||||
Instance();
|
||||
~Instance() noexcept;
|
||||
|
||||
/**
|
||||
* Wrapper for EventLoop::Break(). Call to initiate shutdown.
|
||||
*/
|
||||
void Break() {
|
||||
event_loop.Break();
|
||||
}
|
||||
|
||||
void EmitIdle(unsigned mask) {
|
||||
idle_monitor.OrMask(mask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a #Partition with the given name. Returns nullptr if
|
||||
* no such partition was found.
|
||||
*/
|
||||
gcc_pure
|
||||
Partition *FindPartition(const char *name) noexcept;
|
||||
|
||||
void BeginShutdownPartitions() noexcept;
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
/**
|
||||
* Returns the global #Database instance. May return nullptr
|
||||
* if this MPD configuration has no database (no
|
||||
* music_directory was configured).
|
||||
*/
|
||||
Database *GetDatabase() {
|
||||
return database.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the global #Database instance. Throws
|
||||
* DatabaseError if this MPD configuration has no database (no
|
||||
* music_directory was configured).
|
||||
*/
|
||||
const Database &GetDatabaseOrThrow() const;
|
||||
#endif
|
||||
|
||||
void BeginShutdownUpdate() noexcept;
|
||||
|
||||
#ifdef ENABLE_CURL
|
||||
void LookupRemoteTag(const char *uri) noexcept;
|
||||
#else
|
||||
void LookupRemoteTag(const char *) noexcept {
|
||||
/* no-op */
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
#ifdef ENABLE_DATABASE
|
||||
void OnDatabaseModified() override;
|
||||
void OnDatabaseSongRemoved(const char *uri) override;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NEIGHBOR_PLUGINS
|
||||
/* virtual methods from class NeighborListener */
|
||||
void FoundNeighbor(const NeighborInfo &info) noexcept override;
|
||||
void LostNeighbor(const NeighborInfo &info) noexcept override;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_CURL
|
||||
/* virtual methods from class RemoteTagCacheHandler */
|
||||
void OnRemoteTag(const char *uri, const Tag &tag) noexcept override;
|
||||
#endif
|
||||
|
||||
/* callback for #idle_monitor */
|
||||
void OnIdle(unsigned mask);
|
||||
};
|
||||
|
||||
#endif
|
||||
161
src/Listen.cxx
Normal file
161
src/Listen.cxx
Normal file
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "Listen.hxx"
|
||||
#include "Log.hxx"
|
||||
#include "client/Listener.hxx"
|
||||
#include "config/Param.hxx"
|
||||
#include "config/Data.hxx"
|
||||
#include "config/Option.hxx"
|
||||
#include "config/Net.hxx"
|
||||
#include "net/AllocatedSocketAddress.hxx"
|
||||
#include "net/UniqueSocketDescriptor.hxx"
|
||||
#include "net/SocketUtil.hxx"
|
||||
#include "system/Error.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
#include "fs/AllocatedPath.hxx"
|
||||
#include "fs/XDG.hxx"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
#include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
#define DEFAULT_PORT 6600
|
||||
|
||||
int listen_port;
|
||||
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
|
||||
static bool
|
||||
listen_systemd_activation(ClientListener &listener)
|
||||
{
|
||||
int n = sd_listen_fds(true);
|
||||
if (n <= 0) {
|
||||
if (n < 0)
|
||||
throw MakeErrno(-n, "sd_listen_fds() failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = SD_LISTEN_FDS_START, end = SD_LISTEN_FDS_START + n;
|
||||
i != end; ++i)
|
||||
listener.AddFD(UniqueSocketDescriptor(i));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Listen on "$XDG_RUNTIME_DIR/mpd/socket" (if applicable).
|
||||
*
|
||||
* @return true if a listener socket was added
|
||||
*/
|
||||
static bool
|
||||
ListenXdgRuntimeDir(ClientListener &listener) noexcept
|
||||
{
|
||||
#if defined(USE_XDG) && defined(HAVE_UN)
|
||||
if (geteuid() == 0)
|
||||
/* this MPD instance is a system-wide daemon; don't
|
||||
use $XDG_RUNTIME_DIR */
|
||||
return false;
|
||||
|
||||
Path xdg_runtime_dir = Path::FromFS(getenv("XDG_RUNTIME_DIR"));
|
||||
if (xdg_runtime_dir.IsNull())
|
||||
return false;
|
||||
|
||||
const auto mpd_runtime_dir = xdg_runtime_dir / Path::FromFS("mpd");
|
||||
mkdir(mpd_runtime_dir.c_str(), 0700);
|
||||
|
||||
const auto socket_path = mpd_runtime_dir / Path::FromFS("socket");
|
||||
unlink(socket_path.c_str());
|
||||
|
||||
AllocatedSocketAddress address;
|
||||
address.SetLocal(socket_path.c_str());
|
||||
|
||||
try {
|
||||
auto fd = socket_bind_listen(AF_LOCAL, SOCK_STREAM, 0,
|
||||
address, 5);
|
||||
chmod(socket_path.c_str(), 0600);
|
||||
listener.AddFD(std::move(fd), std::move(address));
|
||||
return true;
|
||||
} catch (...) {
|
||||
FormatError(std::current_exception(),
|
||||
"Failed to listen on '%s' (not fatal)",
|
||||
socket_path.c_str());
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
(void)listener;
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
listen_global_init(const ConfigData &config, ClientListener &listener)
|
||||
{
|
||||
int port = config.GetPositive(ConfigOption::PORT, DEFAULT_PORT);
|
||||
|
||||
#ifdef ENABLE_SYSTEMD_DAEMON
|
||||
if (listen_systemd_activation(listener))
|
||||
return;
|
||||
#endif
|
||||
|
||||
for (const auto ¶m : config.GetParamList(ConfigOption::BIND_TO_ADDRESS)) {
|
||||
try {
|
||||
ServerSocketAddGeneric(listener, param.value.c_str(),
|
||||
port);
|
||||
} catch (...) {
|
||||
std::throw_with_nested(FormatRuntimeError("Failed to listen on %s (line %i)",
|
||||
param.value.c_str(),
|
||||
param.line));
|
||||
}
|
||||
}
|
||||
|
||||
bool have_xdg_runtime_listener = false;
|
||||
|
||||
if (listener.IsEmpty()) {
|
||||
/* no "bind_to_address" configured, bind the
|
||||
configured port on all interfaces */
|
||||
|
||||
have_xdg_runtime_listener = ListenXdgRuntimeDir(listener);
|
||||
|
||||
try {
|
||||
listener.AddPort(port);
|
||||
} catch (...) {
|
||||
std::throw_with_nested(FormatRuntimeError("Failed to listen on *:%d: ", port));
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
listener.Open();
|
||||
} catch (...) {
|
||||
if (have_xdg_runtime_listener)
|
||||
LogError(std::current_exception(),
|
||||
"Default TCP listener setup failed, but this is okay because we have a $XDG_RUNTIME_DIR listener");
|
||||
else
|
||||
throw;
|
||||
}
|
||||
|
||||
listen_port = port;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2003-2010 The Music Player Daemon Project
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -17,18 +17,15 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef MPD_LISTEN_H
|
||||
#define MPD_LISTEN_H
|
||||
#ifndef MPD_LISTEN_HXX
|
||||
#define MPD_LISTEN_HXX
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
struct ConfigData;
|
||||
class ClientListener;
|
||||
|
||||
extern int listen_port;
|
||||
|
||||
bool
|
||||
listen_global_init(GError **error_r);
|
||||
|
||||
void listen_global_finish(void);
|
||||
void
|
||||
listen_global_init(const ConfigData &config, ClientListener &listener);
|
||||
|
||||
#endif
|
||||
125
src/LocateUri.cxx
Normal file
125
src/LocateUri.cxx
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright 2003-2018 The Music Player Daemon Project
|
||||
* http://www.musicpd.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "LocateUri.hxx"
|
||||
#include "client/Client.hxx"
|
||||
#include "fs/AllocatedPath.hxx"
|
||||
#include "ls.hxx"
|
||||
#include "util/UriUtil.hxx"
|
||||
#include "util/ASCII.hxx"
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
#include "storage/StorageInterface.hxx"
|
||||
#endif
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
static LocatedUri
|
||||
LocateFileUri(const char *uri, const Client *client
|
||||
#ifdef ENABLE_DATABASE
|
||||
, const Storage *storage
|
||||
#endif
|
||||
)
|
||||
{
|
||||
auto path = AllocatedPath::FromUTF8Throw(uri);
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
if (storage != nullptr) {
|
||||
const char *suffix = storage->MapToRelativeUTF8(uri);
|
||||
if (suffix != nullptr)
|
||||
/* this path was relative to the music
|
||||
directory */
|
||||
return LocatedUri(LocatedUri::Type::RELATIVE, suffix);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (client != nullptr)
|
||||
client->AllowFile(path);
|
||||
|
||||
return LocatedUri(LocatedUri::Type::PATH, uri, std::move(path));
|
||||
}
|
||||
|
||||
static LocatedUri
|
||||
LocateAbsoluteUri(UriPluginKind kind, const char *uri
|
||||
#ifdef ENABLE_DATABASE
|
||||
, const Storage *storage
|
||||
#endif
|
||||
)
|
||||
{
|
||||
switch (kind) {
|
||||
case UriPluginKind::INPUT:
|
||||
case UriPluginKind::STORAGE: // TODO: separate check for storage plugins
|
||||
if (!uri_supported_scheme(uri))
|
||||
throw std::runtime_error("Unsupported URI scheme");
|
||||
break;
|
||||
|
||||
case UriPluginKind::PLAYLIST:
|
||||
/* for now, no validation for playlist URIs; this is
|
||||
more complicated because there are three ways to
|
||||
identify which plugin to use: URI scheme, filename
|
||||
suffix and MIME type */
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_DATABASE
|
||||
if (storage != nullptr) {
|
||||
const char *suffix = storage->MapToRelativeUTF8(uri);
|
||||
if (suffix != nullptr)
|
||||
return LocatedUri(LocatedUri::Type::RELATIVE, suffix);
|
||||
}
|
||||
#endif
|
||||
|
||||
return LocatedUri(LocatedUri::Type::ABSOLUTE, uri);
|
||||
}
|
||||
|
||||
LocatedUri
|
||||
LocateUri(UriPluginKind kind,
|
||||
const char *uri, const Client *client
|
||||
#ifdef ENABLE_DATABASE
|
||||
, const Storage *storage
|
||||
#endif
|
||||
)
|
||||
{
|
||||
/* skip the obsolete "file://" prefix */
|
||||
const char *path_utf8 = StringAfterPrefixCaseASCII(uri, "file://");
|
||||
if (path_utf8 != nullptr) {
|
||||
if (!PathTraitsUTF8::IsAbsolute(path_utf8))
|
||||
throw std::runtime_error("Malformed file:// URI");
|
||||
|
||||
return LocateFileUri(path_utf8, client
|
||||
#ifdef ENABLE_DATABASE
|
||||
, storage
|
||||
#endif
|
||||
);
|
||||
} else if (PathTraitsUTF8::IsAbsolute(uri))
|
||||
return LocateFileUri(uri, client
|
||||
#ifdef ENABLE_DATABASE
|
||||
, storage
|
||||
#endif
|
||||
);
|
||||
else if (uri_has_scheme(uri))
|
||||
return LocateAbsoluteUri(kind, uri
|
||||
#ifdef ENABLE_DATABASE
|
||||
, storage
|
||||
#endif
|
||||
);
|
||||
else
|
||||
return LocatedUri(LocatedUri::Type::RELATIVE, uri);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user