mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-14 00:40:27 +08:00
Compare commits
7368 Commits
v4.19.2
...
rft/battle
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d434fb84c | ||
|
|
8681039067 | ||
|
|
dd36585b16 | ||
|
|
b58917c74b | ||
|
|
633fe73993 | ||
|
|
aa46d668d1 | ||
|
|
f76db36364 | ||
|
|
7f4a95280c | ||
|
|
711041f190 | ||
|
|
21086dcf68 | ||
|
|
2c3b6ac50a | ||
|
|
743c51a4b5 | ||
|
|
61ce039b12 | ||
|
|
f6788e6029 | ||
|
|
a7ed964cb0 | ||
|
|
a91fc84942 | ||
|
|
66ef1f0836 | ||
|
|
f0a3bbf16a | ||
|
|
529fedd95e | ||
|
|
434932d39a | ||
|
|
6601c6621c | ||
|
|
7a65be5fa5 | ||
|
|
0ca0de9663 | ||
|
|
c69ce8ca7a | ||
|
|
9bccb24654 | ||
|
|
0d4ffca813 | ||
|
|
b13e4d022b | ||
|
|
110847e005 | ||
|
|
772424e920 | ||
|
|
57888f783e | ||
|
|
f4ee5356d1 | ||
|
|
035fdaa6ca | ||
|
|
2d4c556bc6 | ||
|
|
58a3157bb3 | ||
|
|
848ebeb747 | ||
|
|
989ba7ee52 | ||
|
|
53e3ec8273 | ||
|
|
dbc1f1f6da | ||
|
|
0d57e73bb4 | ||
|
|
cf4553fa0a | ||
|
|
0af71a9f32 | ||
|
|
6ab3b6cc56 | ||
|
|
ec1de48e42 | ||
|
|
87e43d91f0 | ||
|
|
6104d0602b | ||
|
|
f04b9a6409 | ||
|
|
4fbb831c44 | ||
|
|
9301ea44b1 | ||
|
|
7e7beabb35 | ||
|
|
eb5803fef7 | ||
|
|
24f2cb5cbf | ||
|
|
fb8f3b78ad | ||
|
|
abcaf2ee06 | ||
|
|
03188824f7 | ||
|
|
340e2798a0 | ||
|
|
f9d468f557 | ||
|
|
e71eb3985d | ||
|
|
5adb76e377 | ||
|
|
be0ff90b8a | ||
|
|
cd723f2210 | ||
|
|
93ab1cc811 | ||
|
|
92421d464c | ||
|
|
260ab6e839 | ||
|
|
7e3e43e81a | ||
|
|
3b3056a65f | ||
|
|
5aa1d74b96 | ||
|
|
b9f196c3a1 | ||
|
|
c7a8191e03 | ||
|
|
3a87307bda | ||
|
|
f0ff035546 | ||
|
|
81504417c7 | ||
|
|
771c3e53b7 | ||
|
|
5cc7861d5c | ||
|
|
61f25c94e5 | ||
|
|
8da46bf991 | ||
|
|
26f421418e | ||
|
|
82dbe28b5e | ||
|
|
cc7c740921 | ||
|
|
4396c71802 | ||
|
|
351529d4cf | ||
|
|
eeeca5aa0f | ||
|
|
37c712637c | ||
|
|
3c995514a6 | ||
|
|
5038576b75 | ||
|
|
43952444bb | ||
|
|
1848caf82a | ||
|
|
baff16c024 | ||
|
|
894d540649 | ||
|
|
aef60f179c | ||
|
|
25903aba2d | ||
|
|
42f57797d7 | ||
|
|
30ade6e2a6 | ||
|
|
017147f3f6 | ||
|
|
4c5afa12c7 | ||
|
|
2fa5c743cc | ||
|
|
1702372f0f | ||
|
|
3dc32c1368 | ||
|
|
d6415c301b | ||
|
|
9bd75e6692 | ||
|
|
9dc8c05a73 | ||
|
|
00d1f93472 | ||
|
|
639c6d711b | ||
|
|
bd6176b25f | ||
|
|
e60a065ba4 | ||
|
|
41c9643b38 | ||
|
|
1e9d9ba5a0 | ||
|
|
678f0bd60e | ||
|
|
9bffc02d7f | ||
|
|
9c020dd5f9 | ||
|
|
e159598dc8 | ||
|
|
022b39c25a | ||
|
|
e94e3888bb | ||
|
|
ed2c55e81c | ||
|
|
b861c544a6 | ||
|
|
c72d99a030 | ||
|
|
4a836290b9 | ||
|
|
34a5bfdd3d | ||
|
|
1a072e302e | ||
|
|
e2e496122a | ||
|
|
6ac61f2274 | ||
|
|
a68ee788e1 | ||
|
|
7022a6d298 | ||
|
|
5cda61f8a6 | ||
|
|
b37afbaec1 | ||
|
|
be075ab749 | ||
|
|
6461d6a7e2 | ||
|
|
68130ede6d | ||
|
|
2f7d4a6c91 | ||
|
|
8a6982a144 | ||
|
|
5a2e2f2d6a | ||
|
|
754b4135cc | ||
|
|
966ded3836 | ||
|
|
b9e69dde73 | ||
|
|
f184093732 | ||
|
|
ef844da918 | ||
|
|
a3ac79d999 | ||
|
|
29b25079b8 | ||
|
|
7059375a2f | ||
|
|
062397669f | ||
|
|
c7d1718d97 | ||
|
|
9d875538bf | ||
|
|
6a05dfa694 | ||
|
|
109d20d3fd | ||
|
|
e579d2c683 | ||
|
|
c3a7ae0c22 | ||
|
|
558746add6 | ||
|
|
d51895af57 | ||
|
|
512ffa55bb | ||
|
|
56f2b35ea7 | ||
|
|
3086cee0cc | ||
|
|
66577b193c | ||
|
|
35f28a7c29 | ||
|
|
245279711d | ||
|
|
979f6699cc | ||
|
|
7359653317 | ||
|
|
f311f8525e | ||
|
|
4debf210bd | ||
|
|
1eeae5326f | ||
|
|
ce3624cfbb | ||
|
|
632447e8d3 | ||
|
|
a5917adc1c | ||
|
|
c86ea9fa12 | ||
|
|
539e2b48b2 | ||
|
|
58c2c6eccd | ||
|
|
8eb49dc463 | ||
|
|
cd44b22b8c | ||
|
|
1f7b675d04 | ||
|
|
e89e3d3f35 | ||
|
|
a47b1d427b | ||
|
|
774cc6d6fe | ||
|
|
c740e71900 | ||
|
|
a73eb5d52d | ||
|
|
7dfae900f1 | ||
|
|
edb5e0f7fc | ||
|
|
e9f0353d01 | ||
|
|
bc734f288b | ||
|
|
89f4d927a4 | ||
|
|
54c434c547 | ||
|
|
bb0d148fae | ||
|
|
cd42686824 | ||
|
|
7c9b12113f | ||
|
|
22f88ef718 | ||
|
|
722302bc28 | ||
|
|
188e55450a | ||
|
|
df2edc4bd4 | ||
|
|
c9672599a0 | ||
|
|
6c80f26542 | ||
|
|
7cd6873085 | ||
|
|
254db83bf6 | ||
|
|
6b6bed6c4d | ||
|
|
c11543f5a4 | ||
|
|
31cc95fb7f | ||
|
|
457ffe67de | ||
|
|
d53509ff06 | ||
|
|
6d8a4c7a5b | ||
|
|
e2c19995c2 | ||
|
|
3f10c972cd | ||
|
|
d3730cc0da | ||
|
|
b5b357938e | ||
|
|
805b76f113 | ||
|
|
4c5ae67063 | ||
|
|
8a97330be3 | ||
|
|
623e542f45 | ||
|
|
7350401ddd | ||
|
|
c4db21dd2b | ||
|
|
d713ca59e3 | ||
|
|
b3203ad848 | ||
|
|
89a42be269 | ||
|
|
218e9ec31a | ||
|
|
ba26b64b22 | ||
|
|
33b54e81b0 | ||
|
|
cb64ca4b13 | ||
|
|
e6549f0bf6 | ||
|
|
5466678785 | ||
|
|
8f279dc1b4 | ||
|
|
60c83e78e1 | ||
|
|
e63de8df32 | ||
|
|
053e11c9ba | ||
|
|
fbf48ebefd | ||
|
|
7ef4343f16 | ||
|
|
3e75ec507f | ||
|
|
94a0a4d916 | ||
|
|
ca605edffd | ||
|
|
7177e48d5c | ||
|
|
14c809a9ac | ||
|
|
ad4f4a93c0 | ||
|
|
5add3a5d8a | ||
|
|
f3f8264b53 | ||
|
|
3e30750da7 | ||
|
|
715c2c13b5 | ||
|
|
8d02395657 | ||
|
|
824d3bfebe | ||
|
|
88a0b97224 | ||
|
|
d6f73bc753 | ||
|
|
d1c09cc01a | ||
|
|
d65cde7574 | ||
|
|
afaeb011cf | ||
|
|
fa42a0880e | ||
|
|
2a32052ab0 | ||
|
|
1dba23a93e | ||
|
|
9592b1fd40 | ||
|
|
6deea622bd | ||
|
|
503d653330 | ||
|
|
fe5744f328 | ||
|
|
abcc3ba100 | ||
|
|
0b058bb0d9 | ||
|
|
c62d2ac4f8 | ||
|
|
9a81315b7f | ||
|
|
42f9b80be3 | ||
|
|
57cde24e99 | ||
|
|
f775b2a551 | ||
|
|
756f352c02 | ||
|
|
f574b14ed4 | ||
|
|
ef99f63311 | ||
|
|
62b72b0faa | ||
|
|
c988b7463d | ||
|
|
ee281863ff | ||
|
|
08f78a3151 | ||
|
|
af34bb6a6f | ||
|
|
0e5ed3be50 | ||
|
|
6f3bc269d6 | ||
|
|
68d7ac593b | ||
|
|
ab664d74fb | ||
|
|
aba41f09c0 | ||
|
|
2dc6745fdb | ||
|
|
5820fb202d | ||
|
|
cba20d7835 | ||
|
|
81f8ad902d | ||
|
|
426d76ee50 | ||
|
|
dd82fa0075 | ||
|
|
91b53a4b73 | ||
|
|
12fc5bbde3 | ||
|
|
6cfab2c1f0 | ||
|
|
730b9b2ad9 | ||
|
|
ddbf647524 | ||
|
|
6e9ef3c66e | ||
|
|
1ad6f70b55 | ||
|
|
9e990c337a | ||
|
|
8733055e83 | ||
|
|
e8885dc095 | ||
|
|
0d140c1b46 | ||
|
|
1f29f9dc16 | ||
|
|
505ba76fea | ||
|
|
e76e95c0a4 | ||
|
|
aff4ef43fa | ||
|
|
e4aa506cb4 | ||
|
|
7c5fe215ac | ||
|
|
ced3843c4b | ||
|
|
5f30226d99 | ||
|
|
2e30ef6169 | ||
|
|
3b0093c13c | ||
|
|
3416a47b26 | ||
|
|
d646af45ca | ||
|
|
c69fd51bc9 | ||
|
|
4fb83a9bca | ||
|
|
abf69a9c63 | ||
|
|
436643db9c | ||
|
|
1311a40126 | ||
|
|
dc49df6c0d | ||
|
|
209902466a | ||
|
|
6f0426b285 | ||
|
|
317a0d5224 | ||
|
|
193525cacb | ||
|
|
e32b526e81 | ||
|
|
96751335d3 | ||
|
|
2e6df0af8e | ||
|
|
43d13f5aaf | ||
|
|
6c405da322 | ||
|
|
dce6e317c8 | ||
|
|
fdc76bc5b5 | ||
|
|
2f8840feac | ||
|
|
f98a595620 | ||
|
|
2a7729074a | ||
|
|
40e607c98f | ||
|
|
351395f5b9 | ||
|
|
3e38b59f0c | ||
|
|
079932e34c | ||
|
|
9666b4a42b | ||
|
|
8779c867bf | ||
|
|
d10c90bc79 | ||
|
|
ac83069b99 | ||
|
|
8077d73a9b | ||
|
|
e5357e7dd7 | ||
|
|
f87be175e1 | ||
|
|
316dd9a005 | ||
|
|
6f07b16388 | ||
|
|
b59b42345a | ||
|
|
f80ec0b232 | ||
|
|
0cab88a1fb | ||
|
|
f5b8fe18e1 | ||
|
|
8fb76030b2 | ||
|
|
0234f2d274 | ||
|
|
018955d010 | ||
|
|
ed361efcd3 | ||
|
|
08665869ea | ||
|
|
2b0ad53830 | ||
|
|
f5010a3681 | ||
|
|
072592c49a | ||
|
|
45e55c0eaf | ||
|
|
d32ed24879 | ||
|
|
8c83b5e2d2 | ||
|
|
8a33102408 | ||
|
|
432a51a238 | ||
|
|
39dce2a0e1 | ||
|
|
c58e0a0e92 | ||
|
|
5e30ffc714 | ||
|
|
68a5ef3f85 | ||
|
|
d1bb221096 | ||
|
|
0743e1773b | ||
|
|
fafd1970be | ||
|
|
446ec8b8f6 | ||
|
|
07e561fae8 | ||
|
|
d42a8ba42e | ||
|
|
86a861f1c1 | ||
|
|
73801e5eae | ||
|
|
085444f25f | ||
|
|
81f6540170 | ||
|
|
66d49a7e81 | ||
|
|
9982545c99 | ||
|
|
eaf3b93c8e | ||
|
|
e29d506cf2 | ||
|
|
e4e9c8264c | ||
|
|
7204d0f62a | ||
|
|
60308846f3 | ||
|
|
e8717c0936 | ||
|
|
786518917c | ||
|
|
91195d3c02 | ||
|
|
09608430a9 | ||
|
|
f09e4de87e | ||
|
|
d306941c4f | ||
|
|
288fa379d3 | ||
|
|
66c9e3c65c | ||
|
|
f2586ec7fe | ||
|
|
63a30d96f6 | ||
|
|
99db411ea6 | ||
|
|
b330cb465b | ||
|
|
3c76830ad5 | ||
|
|
2b87578d53 | ||
|
|
a4420961ce | ||
|
|
4d76fabd77 | ||
|
|
457023106c | ||
|
|
e1b000631a | ||
|
|
04531f33c7 | ||
|
|
d3d8e1a5cf | ||
|
|
deb5fa3044 | ||
|
|
18a4a3fc31 | ||
|
|
3f5a7322e5 | ||
|
|
fc4437183d | ||
|
|
1d8068daf0 | ||
|
|
b0d14b4820 | ||
|
|
26caabb8d0 | ||
|
|
9443c835fa | ||
|
|
b981160487 | ||
|
|
9ed30c5658 | ||
|
|
cc7891c11d | ||
|
|
21f9864140 | ||
|
|
de2c50ec7e | ||
|
|
c447ee3568 | ||
|
|
5727be3b3a | ||
|
|
debcf92010 | ||
|
|
0839de2c94 | ||
|
|
c9374383c1 | ||
|
|
1c321bb313 | ||
|
|
4d975a1633 | ||
|
|
6137cc701b | ||
|
|
e15b95c084 | ||
|
|
660bb141aa | ||
|
|
d3981265bb | ||
|
|
d801be3fc1 | ||
|
|
8abff51da2 | ||
|
|
28ad1f2816 | ||
|
|
6bbc15040a | ||
|
|
86cbff2cab | ||
|
|
c3dc7d3711 | ||
|
|
4e3b10ded7 | ||
|
|
1a8e1bc989 | ||
|
|
814d9a651f | ||
|
|
5c9a01be2a | ||
|
|
13fa90a214 | ||
|
|
ae9a1f1cf0 | ||
|
|
21bc191a96 | ||
|
|
aa754996f0 | ||
|
|
631466cfff | ||
|
|
3d64624ad4 | ||
|
|
76a007501a | ||
|
|
cfad7fc743 | ||
|
|
e99dcb3e10 | ||
|
|
0b16a4fb26 | ||
|
|
8586c21312 | ||
|
|
80aa7c3bee | ||
|
|
3cb0a8ac08 | ||
|
|
40a614df0d | ||
|
|
30276f9c2d | ||
|
|
6c62cc373b | ||
|
|
31bf864f78 | ||
|
|
6196676eb3 | ||
|
|
856e2a140f | ||
|
|
d32f0c202f | ||
|
|
cf496728a3 | ||
|
|
2f9c187916 | ||
|
|
a265d0c06b | ||
|
|
4a5c808e21 | ||
|
|
fab8731f50 | ||
|
|
9eda7095e7 | ||
|
|
ee29f65a8e | ||
|
|
d2298e0105 | ||
|
|
f0b318fed3 | ||
|
|
68641758ab | ||
|
|
4302611bf7 | ||
|
|
9310f2e204 | ||
|
|
3685dae146 | ||
|
|
7ed3da2bee | ||
|
|
edfb4ce73a | ||
|
|
f679256612 | ||
|
|
383c38831a | ||
|
|
c3dc844b9a | ||
|
|
a7f909cad0 | ||
|
|
2df97627fe | ||
|
|
5d5492b018 | ||
|
|
741eaafee1 | ||
|
|
f0d7840b51 | ||
|
|
3d62daed59 | ||
|
|
d85b69632f | ||
|
|
c64c80b7fc | ||
|
|
875a8dbe65 | ||
|
|
c3bf90dd44 | ||
|
|
6db893a23d | ||
|
|
db03ab5976 | ||
|
|
55721e9e35 | ||
|
|
3d7b7d5e58 | ||
|
|
8971893e81 | ||
|
|
af68ac46cf | ||
|
|
951ed330a8 | ||
|
|
3babe9d76e | ||
|
|
adf6f1f80c | ||
|
|
ebaf3f9307 | ||
|
|
60f0d56ddf | ||
|
|
f94ddabeef | ||
|
|
74f85680e8 | ||
|
|
60f6b910cd | ||
|
|
e9bf062b55 | ||
|
|
4142896c82 | ||
|
|
70398dda8b | ||
|
|
63bedace6e | ||
|
|
bc677b69ca | ||
|
|
3bb0833704 | ||
|
|
29dad9ac7f | ||
|
|
ea29cc2c20 | ||
|
|
934f752820 | ||
|
|
bd28098db9 | ||
|
|
a1ff2a522d | ||
|
|
7a329c8647 | ||
|
|
f74a04155f | ||
|
|
e95f5f5ad7 | ||
|
|
8ffc1a253d | ||
|
|
b22805843b | ||
|
|
0045bbcd8b | ||
|
|
90ed19b192 | ||
|
|
402ececdde | ||
|
|
4c4b56c1a8 | ||
|
|
7277b7e8ec | ||
|
|
7f1466eeb0 | ||
|
|
fb8ba366ca | ||
|
|
fd5b5cab4e | ||
|
|
62abaf51d7 | ||
|
|
51926cd41c | ||
|
|
fef3fd4817 | ||
|
|
11a120b056 | ||
|
|
86f76f71ea | ||
|
|
ee41f9c322 | ||
|
|
5ad0f1e1fc | ||
|
|
e432deee2c | ||
|
|
2b64f974ec | ||
|
|
46d3e91483 | ||
|
|
105bf5b865 | ||
|
|
73be332b4d | ||
|
|
eb69190f18 | ||
|
|
3096f8e311 | ||
|
|
419b3ae82d | ||
|
|
563c9507d5 | ||
|
|
13ccf1b851 | ||
|
|
e312d425b8 | ||
|
|
517141a5f4 | ||
|
|
433eb0aa0b | ||
|
|
5680895daa | ||
|
|
3f426ffd35 | ||
|
|
2ec5caf456 | ||
|
|
2540ec0bc3 | ||
|
|
4f81046a40 | ||
|
|
1e6ae76a2e | ||
|
|
e2afc7a0cd | ||
|
|
9c30e9e83e | ||
|
|
b28ebf3ca9 | ||
|
|
a642024500 | ||
|
|
4b61fdf5d9 | ||
|
|
0e13f97b8c | ||
|
|
0475421520 | ||
|
|
c7c17676e2 | ||
|
|
6a85baede6 | ||
|
|
a935caf588 | ||
|
|
34ac9b69f4 | ||
|
|
7174edab5a | ||
|
|
6bc2c2167e | ||
|
|
634738a24d | ||
|
|
567e62abe2 | ||
|
|
b508d9e306 | ||
|
|
768c0e289a | ||
|
|
f9319906b0 | ||
|
|
b33d88861c | ||
|
|
088be6e970 | ||
|
|
a6d52b4a44 | ||
|
|
0ff82e143f | ||
|
|
977cd6c9b6 | ||
|
|
53b0d56209 | ||
|
|
079359749d | ||
|
|
0b92134160 | ||
|
|
1a7b615cf8 | ||
|
|
7479b95179 | ||
|
|
0fb839f0f6 | ||
|
|
704bf6e05a | ||
|
|
0b6ff2a7ad | ||
|
|
0b3c18e206 | ||
|
|
1bb16ee657 | ||
|
|
63cd7a56a9 | ||
|
|
80039160cf | ||
|
|
15bfd243f1 | ||
|
|
763264e110 | ||
|
|
5c405a321e | ||
|
|
fa0065cff7 | ||
|
|
0dbd5ee80b | ||
|
|
219d3a9151 | ||
|
|
79f3228389 | ||
|
|
f13c265e70 | ||
|
|
ca11661405 | ||
|
|
5dab97c71e | ||
|
|
de1ca4d414 | ||
|
|
bb7eb4f095 | ||
|
|
40e158bb24 | ||
|
|
7d0cfcddda | ||
|
|
c46024cb6a | ||
|
|
df905440f5 | ||
|
|
42e36f11da | ||
|
|
69acd541d3 | ||
|
|
a8cc94d5b9 | ||
|
|
5cd9164d21 | ||
|
|
b481071e6b | ||
|
|
443c9a74ff | ||
|
|
acd8afd3b5 | ||
|
|
a3795b4312 | ||
|
|
d643bd332e | ||
|
|
a145ddc5fc | ||
|
|
d0d71cb45b | ||
|
|
bb860a5f26 | ||
|
|
4226546b46 | ||
|
|
f80d89cee4 | ||
|
|
46d7d4b2ad | ||
|
|
3c2105eae1 | ||
|
|
81d5d51938 | ||
|
|
2f373ba893 | ||
|
|
db2edc29be | ||
|
|
47dc686e89 | ||
|
|
434d5b9f2b | ||
|
|
5429120a93 | ||
|
|
5f0e2a8366 | ||
|
|
5c06a78ac1 | ||
|
|
26917639b9 | ||
|
|
4676e83921 | ||
|
|
b24d1f8b7e | ||
|
|
8d4dc58ddf | ||
|
|
8fb585c3bd | ||
|
|
d4cfdd0153 | ||
|
|
a82fbe2193 | ||
|
|
616a283538 | ||
|
|
38ffe6e047 | ||
|
|
b39ef8d44c | ||
|
|
92e81d51be | ||
|
|
ebc06d3b9c | ||
|
|
6e215b016a | ||
|
|
fb33815586 | ||
|
|
ea269d69c7 | ||
|
|
5453be7ed4 | ||
|
|
9c5cb6e020 | ||
|
|
62ce927ef9 | ||
|
|
ed814d77f4 | ||
|
|
2af21754d7 | ||
|
|
31e64c87bc | ||
|
|
9ae1e097f4 | ||
|
|
078e03b637 | ||
|
|
0673d8f790 | ||
|
|
13c6737d87 | ||
|
|
a10009f6ae | ||
|
|
8a98f06910 | ||
|
|
881f3c6393 | ||
|
|
2312a6b766 | ||
|
|
6929abc2db | ||
|
|
6c0c2d548e | ||
|
|
1e20c8ce30 | ||
|
|
b872cbf0ec | ||
|
|
8958b93a98 | ||
|
|
a7a48c6145 | ||
|
|
66db13d1ae | ||
|
|
673231881e | ||
|
|
7274b29714 | ||
|
|
5631e8ea0d | ||
|
|
e180bf6fb4 | ||
|
|
c911d27a8f | ||
|
|
2198df02b4 | ||
|
|
4cb4622438 | ||
|
|
9299625f04 | ||
|
|
81a53dbb6f | ||
|
|
424effe5f2 | ||
|
|
43c672df54 | ||
|
|
d0de85c7cd | ||
|
|
b25796e4b5 | ||
|
|
28259b23f7 | ||
|
|
cb398487f1 | ||
|
|
758f79d1ad | ||
|
|
a42b1546b3 | ||
|
|
04eacd6615 | ||
|
|
a13550370a | ||
|
|
9ab022f5ba | ||
|
|
35089726d9 | ||
|
|
a3d81c6029 | ||
|
|
5828b76ea7 | ||
|
|
882c617031 | ||
|
|
8523b760e4 | ||
|
|
f1210a6103 | ||
|
|
8a85df4a36 | ||
|
|
aeb557d004 | ||
|
|
ccd343db0f | ||
|
|
15d1a8623e | ||
|
|
d2b2538d77 | ||
|
|
8bad202185 | ||
|
|
2fd03290e6 | ||
|
|
ee0e6a9519 | ||
|
|
b0ba0fc4fc | ||
|
|
622c22cf24 | ||
|
|
793a4631d6 | ||
|
|
bb1758b699 | ||
|
|
211e3eaea9 | ||
|
|
13d766e071 | ||
|
|
4427d37cd3 | ||
|
|
2ee090e749 | ||
|
|
56e578f99c | ||
|
|
a033d99f66 | ||
|
|
f101fb5afb | ||
|
|
325db06cd6 | ||
|
|
b36bd89a32 | ||
|
|
917534e474 | ||
|
|
2e17de4983 | ||
|
|
2aa996b59d | ||
|
|
ae2f714ec1 | ||
|
|
3b73b28e1c | ||
|
|
a786556623 | ||
|
|
abbcbdfdac | ||
|
|
2115d2e7c9 | ||
|
|
b73087a190 | ||
|
|
7275d126c7 | ||
|
|
dff4b57d66 | ||
|
|
f59ca76dfc | ||
|
|
6bc44b934c | ||
|
|
19a73ef5d4 | ||
|
|
a42d253962 | ||
|
|
bfd0ce283e | ||
|
|
c0ff1ddbe9 | ||
|
|
907d742ba6 | ||
|
|
67b680e83a | ||
|
|
3d5189c8a8 | ||
|
|
f5e17393a7 | ||
|
|
d354f5cefe | ||
|
|
7f60b24c15 | ||
|
|
75d30fd48c | ||
|
|
1dd501427d | ||
|
|
c5fb4f099a | ||
|
|
e63c471baf | ||
|
|
1090f6bd5a | ||
|
|
c139c29538 | ||
|
|
2f5c625abd | ||
|
|
85a19f514a | ||
|
|
d57b196649 | ||
|
|
7ccd76e99f | ||
|
|
bad812ff2a | ||
|
|
b14a563403 | ||
|
|
c9261d7702 | ||
|
|
8f5a398154 | ||
|
|
bf13b5ebc8 | ||
|
|
81e1eb5660 | ||
|
|
8419dc567e | ||
|
|
82b63a0c3e | ||
|
|
a80d7bbc03 | ||
|
|
bc5e04e6b8 | ||
|
|
d131261dda | ||
|
|
a1d49556d2 | ||
|
|
e6e6b3d486 | ||
|
|
f82a3615b3 | ||
|
|
12ec6e3ca5 | ||
|
|
79097158e5 | ||
|
|
36788ed6c7 | ||
|
|
a74b0e23de | ||
|
|
eaa85466e3 | ||
|
|
d6cab77a7b | ||
|
|
a12ea44824 | ||
|
|
4d3124aadb | ||
|
|
5a4fe8ce43 | ||
|
|
5f1abee203 | ||
|
|
6070861ed2 | ||
|
|
4923cf0277 | ||
|
|
834d55a156 | ||
|
|
49d9af722e | ||
|
|
ecb098e65c | ||
|
|
55c1391afc | ||
|
|
35b1ce3d1d | ||
|
|
e61c61679d | ||
|
|
6737e8b958 | ||
|
|
520819a8c2 | ||
|
|
8e36b6b0ea | ||
|
|
05edea23b5 | ||
|
|
f933d7a605 | ||
|
|
836e26cb55 | ||
|
|
375daa1d13 | ||
|
|
cc7df9d88b | ||
|
|
3f20295c89 | ||
|
|
8b1f4ab24d | ||
|
|
e709445fb8 | ||
|
|
fd6c8c2742 | ||
|
|
6872945e32 | ||
|
|
14ee103e19 | ||
|
|
589bc60267 | ||
|
|
05c8f3728c | ||
|
|
ecd148149e | ||
|
|
9ccdd9884a | ||
|
|
7597fd7a20 | ||
|
|
d004729626 | ||
|
|
7a9c5a9f2d | ||
|
|
83c45934af | ||
|
|
4c8d57cca9 | ||
|
|
5aa8f17670 | ||
|
|
76e59348b2 | ||
|
|
931a136d5c | ||
|
|
7e2d61d788 | ||
|
|
16c47f466b | ||
|
|
2ee0114b14 | ||
|
|
2d3947ecd1 | ||
|
|
d69b7e3e49 | ||
|
|
d9256650b7 | ||
|
|
e7fb41f56f | ||
|
|
ff007306fc | ||
|
|
fe362d09fc | ||
|
|
206352a8e6 | ||
|
|
faff79e9c6 | ||
|
|
7a34a175e6 | ||
|
|
aac930bdb4 | ||
|
|
de3e1cf0ba | ||
|
|
75c71a90d5 | ||
|
|
baad476f38 | ||
|
|
94cb4f8f7f | ||
|
|
4154184fb4 | ||
|
|
e1860299f7 | ||
|
|
d49eea9fbd | ||
|
|
3171c8a84c | ||
|
|
ab1c6e1c13 | ||
|
|
6b594d31f4 | ||
|
|
c93302501e | ||
|
|
90ce95977b | ||
|
|
beac7446ff | ||
|
|
730a45d383 | ||
|
|
4077409448 | ||
|
|
fa24231caf | ||
|
|
2d648bf4cc | ||
|
|
07f46ab421 | ||
|
|
d603bbc495 | ||
|
|
d3ca47d386 | ||
|
|
43992af553 | ||
|
|
73907eb807 | ||
|
|
e354e17266 | ||
|
|
ca7563d9a2 | ||
|
|
5fef5b818e | ||
|
|
6670293ccd | ||
|
|
e75717260b | ||
|
|
edd46c8f79 | ||
|
|
e42a839828 | ||
|
|
c8d60f65e0 | ||
|
|
afe2165af6 | ||
|
|
ff83e07e69 | ||
|
|
e40e7f08e3 | ||
|
|
403579c512 | ||
|
|
b5a8792350 | ||
|
|
5d12a9f055 | ||
|
|
aa3f472c37 | ||
|
|
9b91ee760b | ||
|
|
af4e6c1ad3 | ||
|
|
5d09cacc6c | ||
|
|
7cd4fe3b4f | ||
|
|
7b47443385 | ||
|
|
39e712cf51 | ||
|
|
96d725e88a | ||
|
|
fcaf4e442e | ||
|
|
daee3f88d2 | ||
|
|
8fd4cd8009 | ||
|
|
151608c57c | ||
|
|
27b7b59c4a | ||
|
|
0d59ac68c0 | ||
|
|
c166a21a8b | ||
|
|
f0ea039514 | ||
|
|
7d4ddba8df | ||
|
|
7a820560c5 | ||
|
|
3d495b1c21 | ||
|
|
edc45943e2 | ||
|
|
ea35873645 | ||
|
|
62aad5a22b | ||
|
|
876df6e005 | ||
|
|
7b2ec0f967 | ||
|
|
25155facf6 | ||
|
|
4186fb3080 | ||
|
|
ebb4b603a4 | ||
|
|
3ae29ec453 | ||
|
|
f3233b12db | ||
|
|
107c9d330c | ||
|
|
45ae528f17 | ||
|
|
ef2c721fd0 | ||
|
|
842e49cc86 | ||
|
|
f080f55b88 | ||
|
|
26d270a51a | ||
|
|
53f0807add | ||
|
|
222ab9be7c | ||
|
|
3bc44d3e0d | ||
|
|
54edd21f79 | ||
|
|
5cee25efee | ||
|
|
f8b417506a | ||
|
|
f55ea6b1f8 | ||
|
|
8e63f60a6e | ||
|
|
77cc830feb | ||
|
|
6d229c72fe | ||
|
|
66c59a3600 | ||
|
|
f147b89c2b | ||
|
|
9d9f3ea70c | ||
|
|
b2a458f547 | ||
|
|
cd7c6a54e0 | ||
|
|
6f2f239e93 | ||
|
|
d2c5a7d784 | ||
|
|
5d42b463c8 | ||
|
|
bc7774de4d | ||
|
|
de4af1518c | ||
|
|
3ff11e072b | ||
|
|
dd71224d63 | ||
|
|
d9c32d5b1e | ||
|
|
f78deb7b93 | ||
|
|
1e3d5f28bd | ||
|
|
0fab23f4e4 | ||
|
|
c4c529f3a2 | ||
|
|
ce4887435a | ||
|
|
004d6b4a9b | ||
|
|
efe5f33a22 | ||
|
|
3182eff718 | ||
|
|
a4fbee3207 | ||
|
|
9980536522 | ||
|
|
0b05cc5b17 | ||
|
|
39707f70ac | ||
|
|
596257122e | ||
|
|
92d53de182 | ||
|
|
65a290f447 | ||
|
|
76ea0d34e7 | ||
|
|
ded67fe648 | ||
|
|
ffdd316a67 | ||
|
|
35058aa56e | ||
|
|
3bd7f05694 | ||
|
|
51f2758f7a | ||
|
|
70a1b34c3a | ||
|
|
746d3a514c | ||
|
|
5e7dd5eeff | ||
|
|
16022bcc2d | ||
|
|
952b1b2f34 | ||
|
|
06a01c257e | ||
|
|
01900aa7ba | ||
|
|
9d5c5266a4 | ||
|
|
172dd92636 | ||
|
|
7a567a967e | ||
|
|
d09899fb68 | ||
|
|
ec3bd9b48b | ||
|
|
242f165c5c | ||
|
|
091d3b0f70 | ||
|
|
c4aafe3dd3 | ||
|
|
0ec33a46d5 | ||
|
|
05812c394e | ||
|
|
f1c27399a3 | ||
|
|
72b9d6b983 | ||
|
|
789884b41c | ||
|
|
c3478fd090 | ||
|
|
8abd69a723 | ||
|
|
ff1281e386 | ||
|
|
066b844b8e | ||
|
|
c425c79d2b | ||
|
|
f44b11dfc9 | ||
|
|
927ad515ab | ||
|
|
53e1d93352 | ||
|
|
3ce1cd520f | ||
|
|
4df531e749 | ||
|
|
e3a21d50ba | ||
|
|
6cf98066ac | ||
|
|
40ad3c429c | ||
|
|
9b8f92f0f7 | ||
|
|
89102a1e86 | ||
|
|
77b5187fd3 | ||
|
|
a4e54a3c7f | ||
|
|
1844845d1c | ||
|
|
bbef238e61 | ||
|
|
47443ef810 | ||
|
|
634c7c6917 | ||
|
|
eeb0b78328 | ||
|
|
a9032e22a7 | ||
|
|
361256bdf0 | ||
|
|
33811962fe | ||
|
|
4a007f497c | ||
|
|
34124cc037 | ||
|
|
c5d36d0bf9 | ||
|
|
76c315882d | ||
|
|
6d99a935d9 | ||
|
|
334e99026d | ||
|
|
a8d68dd72d | ||
|
|
39fdfac0c1 | ||
|
|
687ebe8827 | ||
|
|
dd6aeee59c | ||
|
|
559c588472 | ||
|
|
96ce68340d | ||
|
|
538f734cc8 | ||
|
|
b321264add | ||
|
|
383a3ee34f | ||
|
|
b085aa2d80 | ||
|
|
6b52105797 | ||
|
|
819b74e8ee | ||
|
|
1e2ded6dde | ||
|
|
7b78e0762e | ||
|
|
632ff2b027 | ||
|
|
7799d94699 | ||
|
|
d61a7b5e5d | ||
|
|
d54c408769 | ||
|
|
8ce492dbae | ||
|
|
6985a93b59 | ||
|
|
7b737a85f9 | ||
|
|
f3f6dd40f1 | ||
|
|
c350b62cd2 | ||
|
|
0e95ef2192 | ||
|
|
aaa6aa35bc | ||
|
|
7b3ba914de | ||
|
|
7b547ed88c | ||
|
|
7367e9c4e8 | ||
|
|
6013c42cd4 | ||
|
|
95aa8c9560 | ||
|
|
d6cf18bd5c | ||
|
|
f1ab78279e | ||
|
|
122f6dfc60 | ||
|
|
dd7517fb67 | ||
|
|
656256dc66 | ||
|
|
aa4bd03e38 | ||
|
|
888a39837d | ||
|
|
81b8fa2114 | ||
|
|
83804a7668 | ||
|
|
fe2dfe1d65 | ||
|
|
32d519b272 | ||
|
|
71a2e7f619 | ||
|
|
38f22e2aa0 | ||
|
|
4390ec12b5 | ||
|
|
9a138670c3 | ||
|
|
39b03e4720 | ||
|
|
8b6cb46655 | ||
|
|
7969378335 | ||
|
|
547b95a473 | ||
|
|
13a549a015 | ||
|
|
2e707458c7 | ||
|
|
79465ac833 | ||
|
|
ef78c399b9 | ||
|
|
918ecba24e | ||
|
|
86663ad2d2 | ||
|
|
59af6900ad | ||
|
|
c9e257ea1a | ||
|
|
eaac213d4f | ||
|
|
67a8c4860d | ||
|
|
c47e48a9b6 | ||
|
|
f9399fc1d9 | ||
|
|
61db62b21d | ||
|
|
a1b8c0d103 | ||
|
|
a6f99a3e4d | ||
|
|
72ac9f094d | ||
|
|
463b4a02ea | ||
|
|
6342391243 | ||
|
|
918cebcaf0 | ||
|
|
f455f1425b | ||
|
|
9e6192db8c | ||
|
|
d690ecd363 | ||
|
|
5420d33c7d | ||
|
|
72355204fc | ||
|
|
4e3a0351d6 | ||
|
|
b281c993e0 | ||
|
|
34acb5b739 | ||
|
|
038789f301 | ||
|
|
5f784bdf41 | ||
|
|
9e81a4cc4f | ||
|
|
e23b0b4d2b | ||
|
|
ba7f837c3f | ||
|
|
28e9076e82 | ||
|
|
32f80411a8 | ||
|
|
21cd004974 | ||
|
|
01504ff404 | ||
|
|
3f5ab514c0 | ||
|
|
01c794b83e | ||
|
|
14942259e5 | ||
|
|
33e8eefc6e | ||
|
|
878b651765 | ||
|
|
d8c1fe8108 | ||
|
|
b96af4cc02 | ||
|
|
349a5b792a | ||
|
|
06497e1d9a | ||
|
|
662150c821 | ||
|
|
551aab1cfb | ||
|
|
4f37edcbaf | ||
|
|
3dfee0ac65 | ||
|
|
515b453da4 | ||
|
|
0d82b1a976 | ||
|
|
911f2b4bab | ||
|
|
387c6e298b | ||
|
|
3712be5b70 | ||
|
|
12d63cbc2c | ||
|
|
6cf10a2c8f | ||
|
|
c94a0b546a | ||
|
|
ff51c61744 | ||
|
|
2ba65cb802 | ||
|
|
80d85aafe8 | ||
|
|
d7bff50abd | ||
|
|
bad87d0d5e | ||
|
|
c08f38eb2e | ||
|
|
ad793ba764 | ||
|
|
b1ba539945 | ||
|
|
663d017a1f | ||
|
|
2dc0f84dcc | ||
|
|
79371dc12f | ||
|
|
c31fdccbfb | ||
|
|
7701272539 | ||
|
|
66957eef90 | ||
|
|
7738532199 | ||
|
|
0d9f495e05 | ||
|
|
25daf694c1 | ||
|
|
f7152c3061 | ||
|
|
f4ec9c1bcb | ||
|
|
e080c65b70 | ||
|
|
a532ef9914 | ||
|
|
84126547ba | ||
|
|
690f2b8841 | ||
|
|
1b57a27879 | ||
|
|
ffc7da7028 | ||
|
|
f62f37904d | ||
|
|
62cb676b6a | ||
|
|
5f6dee8df5 | ||
|
|
d1eaff1d22 | ||
|
|
6e5708bb98 | ||
|
|
2ede6097ad | ||
|
|
d2fa4e9b63 | ||
|
|
9d3f859974 | ||
|
|
5f5c406a3d | ||
|
|
0f20c91e94 | ||
|
|
aaf5d826a3 | ||
|
|
dad5bb71ee | ||
|
|
036b2350e7 | ||
|
|
bc81f492f2 | ||
|
|
2a78ca9a1b | ||
|
|
85cf5087f7 | ||
|
|
bfe2e29249 | ||
|
|
7113ea82aa | ||
|
|
e5d9f1a191 | ||
|
|
b888a3e064 | ||
|
|
15bf60f397 | ||
|
|
35ab099cce | ||
|
|
36ea07b076 | ||
|
|
f05c860692 | ||
|
|
bee9c1c045 | ||
|
|
f5c2b951c6 | ||
|
|
6ac39062f2 | ||
|
|
31c5e9b29c | ||
|
|
87faeb12dd | ||
|
|
e24d8109ff | ||
|
|
f417f8caae | ||
|
|
40f7bc9185 | ||
|
|
6472a448a9 | ||
|
|
80bfdfa257 | ||
|
|
8477690784 | ||
|
|
b09eb7cb42 | ||
|
|
fc15bad06c | ||
|
|
ed8b0bcc06 | ||
|
|
59bdc266e9 | ||
|
|
9c196d080a | ||
|
|
d7deb04c74 | ||
|
|
ffab8ec14d | ||
|
|
027aaea799 | ||
|
|
9459388036 | ||
|
|
684b2c787d | ||
|
|
d6eed05b35 | ||
|
|
f28bff152b | ||
|
|
a473c610d8 | ||
|
|
786b72e55c | ||
|
|
2d0c19a2f7 | ||
|
|
c6c1832bc6 | ||
|
|
0ce4006b5e | ||
|
|
d00e26d0fd | ||
|
|
6b877bcf8f | ||
|
|
b4e595ce3b | ||
|
|
5f34d3e906 | ||
|
|
888582339f | ||
|
|
74dd9d2c40 | ||
|
|
1e69ae827e | ||
|
|
8f2fe6a334 | ||
|
|
65ff54b98d | ||
|
|
a5ba2d94e0 | ||
|
|
b4be266d15 | ||
|
|
d6a7e7fe5a | ||
|
|
9ba7ead6c8 | ||
|
|
ce0beb62a1 | ||
|
|
6b7b78802b | ||
|
|
4f62898f31 | ||
|
|
dc8951dd89 | ||
|
|
1054cfe93c | ||
|
|
40fa5f8161 | ||
|
|
ea4bffeaa5 | ||
|
|
a329d55857 | ||
|
|
d7d1f7f2e8 | ||
|
|
2b77443ddc | ||
|
|
85d928f2e6 | ||
|
|
8688baa623 | ||
|
|
ce67295e7d | ||
|
|
e79efce17d | ||
|
|
a40dde9432 | ||
|
|
e785b540c7 | ||
|
|
2f8dfa3a36 | ||
|
|
c0730c419f | ||
|
|
a7e5f6ff5f | ||
|
|
600cee7395 | ||
|
|
14f414f6ca | ||
|
|
7d8ab5e77a | ||
|
|
3eee1c769a | ||
|
|
7095790129 | ||
|
|
b831a11746 | ||
|
|
0dbe5ac09c | ||
|
|
f2ff8d3248 | ||
|
|
0ec0cdbff1 | ||
|
|
1bc82628f6 | ||
|
|
3a90c008b0 | ||
|
|
e71e817577 | ||
|
|
cbf7a61260 | ||
|
|
9b55aad993 | ||
|
|
1d50dc1587 | ||
|
|
6ed439063b | ||
|
|
64ea49044a | ||
|
|
6802be2a34 | ||
|
|
38c8dd81e1 | ||
|
|
df96a45b4f | ||
|
|
8139eca40f | ||
|
|
aa7e949df9 | ||
|
|
68357b95bf | ||
|
|
1ca9ca4112 | ||
|
|
380bf68cfc | ||
|
|
93f431431f | ||
|
|
1e46f9234a | ||
|
|
13364bff65 | ||
|
|
8d83ab15c5 | ||
|
|
bf034aab41 | ||
|
|
6a7fb1643d | ||
|
|
51a336ae83 | ||
|
|
e1ed7237a0 | ||
|
|
9042abab6a | ||
|
|
902828dc49 | ||
|
|
7b0fbf9b23 | ||
|
|
0137f9ca11 | ||
|
|
dcd7e0a7cf | ||
|
|
dc545a3ba5 | ||
|
|
fc0fa1f078 | ||
|
|
023ed5563f | ||
|
|
ed42afa473 | ||
|
|
7058163f70 | ||
|
|
4ee96b8f10 | ||
|
|
0350521a58 | ||
|
|
c91ac4d9dd | ||
|
|
65b87a5699 | ||
|
|
2359a6e113 | ||
|
|
89d7a3be49 | ||
|
|
87088f7b55 | ||
|
|
04cd0505c5 | ||
|
|
9c2b777b05 | ||
|
|
ff4454c85b | ||
|
|
9e0f58ca46 | ||
|
|
7d67cefd73 | ||
|
|
dc70f2bf2e | ||
|
|
b44b0472b9 | ||
|
|
623c930158 | ||
|
|
f5188ea76c | ||
|
|
2488031e83 | ||
|
|
499e18280a | ||
|
|
09a016b58b | ||
|
|
2d367b55e3 | ||
|
|
70cefeb99c | ||
|
|
a832fb028e | ||
|
|
66a2c34be3 | ||
|
|
673e13f462 | ||
|
|
1f04e25e13 | ||
|
|
4e71d5a186 | ||
|
|
30ce3bae48 | ||
|
|
4271beb615 | ||
|
|
0ebf5e5bea | ||
|
|
ada5eb0a0d | ||
|
|
302fd92754 | ||
|
|
47535d2cdd | ||
|
|
6de2f61076 | ||
|
|
af861d03b5 | ||
|
|
5eb6737b0b | ||
|
|
f333c420f0 | ||
|
|
22986f7a19 | ||
|
|
a519a9eaee | ||
|
|
cf97aa4c18 | ||
|
|
b1a5f92916 | ||
|
|
a50d48ddd1 | ||
|
|
21a90dca17 | ||
|
|
2deff411bf | ||
|
|
bac348b6e8 | ||
|
|
8f5ee4819e | ||
|
|
0b0486a4ee | ||
|
|
28c5d624c2 | ||
|
|
98d0777a79 | ||
|
|
350b5b7023 | ||
|
|
774bbf2c03 | ||
|
|
3a43d26aef | ||
|
|
a3ca02c8a5 | ||
|
|
d0a84e0d0f | ||
|
|
59f3667aa2 | ||
|
|
81b0f4a988 | ||
|
|
be441991ca | ||
|
|
794f1717a1 | ||
|
|
0549fd0347 | ||
|
|
ecaf6a8f53 | ||
|
|
102bc8cb31 | ||
|
|
c7d808c0bd | ||
|
|
56e136e717 | ||
|
|
94a8e01543 | ||
|
|
eaecef60d1 | ||
|
|
eafb294209 | ||
|
|
7f0dd034c4 | ||
|
|
caa7fac662 | ||
|
|
f6c0627e32 | ||
|
|
6dc64c65a2 | ||
|
|
a7bdb0b115 | ||
|
|
7afa244e6a | ||
|
|
3fa01d304c | ||
|
|
ceb5d45085 | ||
|
|
0a6e7b48c7 | ||
|
|
0938351e6a | ||
|
|
432684550d | ||
|
|
681a09201a | ||
|
|
447fa76acb | ||
|
|
6d143de11b | ||
|
|
0e990e163c | ||
|
|
86d422087f | ||
|
|
9b3f2874ed | ||
|
|
ddf634ab30 | ||
|
|
a55c977441 | ||
|
|
ba415a937d | ||
|
|
a113526ca9 | ||
|
|
524fe9e22a | ||
|
|
ba33274087 | ||
|
|
41a551fc12 | ||
|
|
0e56713f48 | ||
|
|
04d0f59144 | ||
|
|
c5d9644e70 | ||
|
|
e3afd3d4b5 | ||
|
|
f2a8d3619c | ||
|
|
3afc19fd1b | ||
|
|
2d2ecc8862 | ||
|
|
1d48465456 | ||
|
|
be7db3fa40 | ||
|
|
8aaad31a7b | ||
|
|
dcc4aa0d7f | ||
|
|
bda924566f | ||
|
|
6b8b32ae5e | ||
|
|
ae2aaa1e6d | ||
|
|
7b8d1dade0 | ||
|
|
40e133a806 | ||
|
|
b268cb063d | ||
|
|
321992a284 | ||
|
|
0fdcae4c21 | ||
|
|
ca060c6088 | ||
|
|
8caac62e18 | ||
|
|
3436904035 | ||
|
|
7f8eb5deb7 | ||
|
|
ae0fe4c054 | ||
|
|
0d3168782e | ||
|
|
2ec5b06e44 | ||
|
|
0bce9b0ba8 | ||
|
|
e6e8b2f783 | ||
|
|
dc220f05cf | ||
|
|
f8fa4cdb5a | ||
|
|
30d3aec48a | ||
|
|
8fa2591d1c | ||
|
|
e6d76e5049 | ||
|
|
f56beb312f | ||
|
|
f435beea8f | ||
|
|
669e289d27 | ||
|
|
96b2084b64 | ||
|
|
af613af810 | ||
|
|
5e79834287 | ||
|
|
2c5f027534 | ||
|
|
b224237503 | ||
|
|
71b7f80207 | ||
|
|
4ba078784a | ||
|
|
76c4096761 | ||
|
|
868467ec1f | ||
|
|
4367865f6f | ||
|
|
da73ba18dc | ||
|
|
17ef7a759c | ||
|
|
b9f2d793f5 | ||
|
|
01d63d9d63 | ||
|
|
1e9380f418 | ||
|
|
325e83920c | ||
|
|
9c0b40b367 | ||
|
|
6149329707 | ||
|
|
ecc6962024 | ||
|
|
be36a88607 | ||
|
|
026b0742c2 | ||
|
|
1e29fe6525 | ||
|
|
81b1465cd1 | ||
|
|
b960f0305c | ||
|
|
b396063d7d | ||
|
|
1a408a7234 | ||
|
|
e203728fb5 | ||
|
|
6d0ca82418 | ||
|
|
d09fed8f95 | ||
|
|
e874df408b | ||
|
|
03c1fc8d28 | ||
|
|
e78f94d59f | ||
|
|
512a199382 | ||
|
|
c4317b556b | ||
|
|
3efab62747 | ||
|
|
835d9b9816 | ||
|
|
3bedb90578 | ||
|
|
d63085002a | ||
|
|
23602d95f2 | ||
|
|
f522a38f68 | ||
|
|
2556b0f9ed | ||
|
|
e24842913f | ||
|
|
2f70d3d665 | ||
|
|
44349b2775 | ||
|
|
fbf26fe628 | ||
|
|
28eb7efff2 | ||
|
|
c0f2eb3471 | ||
|
|
a184f8fe89 | ||
|
|
0ef899f955 | ||
|
|
7ca44dd84c | ||
|
|
40700ef1bd | ||
|
|
b47adf15fd | ||
|
|
ca53694c71 | ||
|
|
c6c85f76ad | ||
|
|
47f649c96d | ||
|
|
a17c8f2eef | ||
|
|
57bfafbaeb | ||
|
|
ab2debfd32 | ||
|
|
e20cb789e6 | ||
|
|
fd81de52d4 | ||
|
|
2b501bb815 | ||
|
|
fe8739c587 | ||
|
|
14e71e3aaa | ||
|
|
1e35d0ef02 | ||
|
|
f8b1ce122a | ||
|
|
3a01a7f50c | ||
|
|
afd286d72b | ||
|
|
53d86fb008 | ||
|
|
581e4649d5 | ||
|
|
f95f1b8cc6 | ||
|
|
430164d52d | ||
|
|
d64863a6cf | ||
|
|
c0a0657f42 | ||
|
|
447d6d0aee | ||
|
|
cc2968c2e9 | ||
|
|
562e84aa97 | ||
|
|
bab71d1da4 | ||
|
|
e1fab541e5 | ||
|
|
8d12d313f5 | ||
|
|
c643045b57 | ||
|
|
b72b30ab6d | ||
|
|
d1e6ca611a | ||
|
|
47b8fc72a5 | ||
|
|
a0047a6d49 | ||
|
|
4eef588031 | ||
|
|
00439ecfa9 | ||
|
|
24542bc4fc | ||
|
|
8b4dd70b48 | ||
|
|
ea4256a9f2 | ||
|
|
395d53fe0c | ||
|
|
a6a02e5c6e | ||
|
|
f55db60431 | ||
|
|
881a852d96 | ||
|
|
ef9fbf81da | ||
|
|
2a31a33194 | ||
|
|
7317087458 | ||
|
|
92b69fbe93 | ||
|
|
a4369b7d59 | ||
|
|
a73f1fe939 | ||
|
|
ae69496159 | ||
|
|
6b1854afe7 | ||
|
|
0128c309a9 | ||
|
|
3053680369 | ||
|
|
0b3bfa9678 | ||
|
|
16db020f04 | ||
|
|
fd95858e65 | ||
|
|
45c803def4 | ||
|
|
74c7cb0bc6 | ||
|
|
cd15f14d5c | ||
|
|
01e4b2470f | ||
|
|
b7c763375e | ||
|
|
4f35c1d7c4 | ||
|
|
19fc7d3472 | ||
|
|
ae4239597d | ||
|
|
be67372350 | ||
|
|
4e382eccd4 | ||
|
|
96c6abe1c9 | ||
|
|
a02a7a91ee | ||
|
|
dce5d55672 | ||
|
|
7e46255ca6 | ||
|
|
3b25f8d8da | ||
|
|
70119da5b2 | ||
|
|
7629c089f4 | ||
|
|
4c38bb4094 | ||
|
|
2f7bea450b | ||
|
|
1cc457266f | ||
|
|
1b89299c9c | ||
|
|
570648a89c | ||
|
|
35d9b03b96 | ||
|
|
14c68fb69d | ||
|
|
0d746a4053 | ||
|
|
06685f185c | ||
|
|
bde76c94cb | ||
|
|
2b573aedaf | ||
|
|
b1cabfca1a | ||
|
|
588ec01baf | ||
|
|
6a9390170d | ||
|
|
d81b61dd46 | ||
|
|
74989c14ef | ||
|
|
7b1f41a064 | ||
|
|
848201f71a | ||
|
|
d3ab6c4060 | ||
|
|
229bdb6514 | ||
|
|
d7f4f974d3 | ||
|
|
411bba66f8 | ||
|
|
9cfde0b6a6 | ||
|
|
424fe44e30 | ||
|
|
074088de08 | ||
|
|
012671159c | ||
|
|
21ce4d5fbb | ||
|
|
12c57cc762 | ||
|
|
64f4358c77 | ||
|
|
8fb2734f7c | ||
|
|
ff7fff97fa | ||
|
|
e57efd0d79 | ||
|
|
e4c03d2775 | ||
|
|
42dfa2233c | ||
|
|
f6882998dd | ||
|
|
da7b0bf51a | ||
|
|
8c4a47916b | ||
|
|
3c965f556b | ||
|
|
b5113dee24 | ||
|
|
c925d4d85b | ||
|
|
d11893a05a | ||
|
|
272d71fa29 | ||
|
|
5140055482 | ||
|
|
0a38544023 | ||
|
|
6dc53704b8 | ||
|
|
9577fc4e95 | ||
|
|
355cbbc32b | ||
|
|
6311c1c612 | ||
|
|
d5d5daee8e | ||
|
|
d684b3b6f0 | ||
|
|
d56404207f | ||
|
|
2d5aee85f8 | ||
|
|
c4f3a1c795 | ||
|
|
88673a2f16 | ||
|
|
15c60163a8 | ||
|
|
d18e824c70 | ||
|
|
3587b57a3a | ||
|
|
fec66d5c05 | ||
|
|
92144559a9 | ||
|
|
0389430f17 | ||
|
|
cbd71c0d74 | ||
|
|
d57487dfb0 | ||
|
|
8bbc4c2209 | ||
|
|
540ac8939c | ||
|
|
2b45705ffd | ||
|
|
e9e20e78c3 | ||
|
|
62da79859f | ||
|
|
91b4fc1025 | ||
|
|
79fb27cbac | ||
|
|
81cd1ae247 | ||
|
|
1e6bab9a0b | ||
|
|
4d70df7457 | ||
|
|
7081bb3a43 | ||
|
|
07023b15a4 | ||
|
|
e96c698fe9 | ||
|
|
e250f780c0 | ||
|
|
94d445d354 | ||
|
|
11ea7470b4 | ||
|
|
70cf5096f3 | ||
|
|
85e6f51724 | ||
|
|
ec3c3543f3 | ||
|
|
0696fde360 | ||
|
|
d73d4e7e8c | ||
|
|
8cc0779541 | ||
|
|
c778353cda | ||
|
|
ccca4afc53 | ||
|
|
524d5fa2a0 | ||
|
|
fdbe389995 | ||
|
|
3065689ed2 | ||
|
|
2654499f62 | ||
|
|
32dac5731c | ||
|
|
8a4fb52830 | ||
|
|
74aa188bd4 | ||
|
|
9b2400040f | ||
|
|
29e74c1f50 | ||
|
|
b3d4269476 | ||
|
|
68776ea8af | ||
|
|
4a11d0eeb0 | ||
|
|
941a98d90a | ||
|
|
f549c1feee | ||
|
|
fe1deb1f23 | ||
|
|
941c5bee4e | ||
|
|
f803a6510d | ||
|
|
dc016a982c | ||
|
|
0b1b48a42f | ||
|
|
1c5bbd1602 | ||
|
|
14b99f8538 | ||
|
|
f22f817ed2 | ||
|
|
e7925f5191 | ||
|
|
30fe628a30 | ||
|
|
5e126b6c09 | ||
|
|
84a8313d6c | ||
|
|
f69bab0594 | ||
|
|
3c9b3c53fc | ||
|
|
3977bdd69d | ||
|
|
79c656e271 | ||
|
|
fc8e43037e | ||
|
|
d4f49b60fc | ||
|
|
02b0234a27 | ||
|
|
26aed3ea0f | ||
|
|
bf656ab6eb | ||
|
|
f450292a51 | ||
|
|
488040a140 | ||
|
|
4ddf92e827 | ||
|
|
db81dd428a | ||
|
|
df5ee99fc0 | ||
|
|
2d9637372e | ||
|
|
437bf628f1 | ||
|
|
7b2b69dd03 | ||
|
|
79e526833b | ||
|
|
cf4ea870cb | ||
|
|
8c6d72c88d | ||
|
|
f7a5bad3a9 | ||
|
|
1523683633 | ||
|
|
ac2b7d461d | ||
|
|
a724ddddfb | ||
|
|
bdd3b3396f | ||
|
|
94f5a264ca | ||
|
|
b4a674efe5 | ||
|
|
2f61a4d31f | ||
|
|
c36a4cab44 | ||
|
|
901e61ae78 | ||
|
|
c246b30991 | ||
|
|
cc138a42df | ||
|
|
bf01575dc1 | ||
|
|
e7aab4d034 | ||
|
|
185b980d9e | ||
|
|
033f24731a | ||
|
|
8fa17ad8af | ||
|
|
23fa98b4d4 | ||
|
|
310e59e582 | ||
|
|
d7f34153a7 | ||
|
|
8e494d47fb | ||
|
|
4c95f3504e | ||
|
|
247e47a754 | ||
|
|
2b7a590aa6 | ||
|
|
25e32840aa | ||
|
|
53ba8f28b6 | ||
|
|
24bb091e4d | ||
|
|
122b32731e | ||
|
|
2f8d624bcb | ||
|
|
fbb8193091 | ||
|
|
99406da8eb | ||
|
|
50652cda12 | ||
|
|
fdffb9cc89 | ||
|
|
7eb9fcaed2 | ||
|
|
0c534b94b9 | ||
|
|
cd0a53fbe5 | ||
|
|
39997a467b | ||
|
|
7ea94ef014 | ||
|
|
47d8b0f604 | ||
|
|
89fe3ddcc2 | ||
|
|
0e7a5e8974 | ||
|
|
c7cf92df67 | ||
|
|
885a1a8a6c | ||
|
|
70f26f5f73 | ||
|
|
82859d6a12 | ||
|
|
a8c04a4b17 | ||
|
|
d166461c12 | ||
|
|
6a2f25a8bd | ||
|
|
3d127fba5f | ||
|
|
bae7fcbe90 | ||
|
|
0935da1cd6 | ||
|
|
c987b3a3e1 | ||
|
|
e7742bc226 | ||
|
|
bdea1f5554 | ||
|
|
184da533a5 | ||
|
|
8bed0b9705 | ||
|
|
214a3021b0 | ||
|
|
a8398e017a | ||
|
|
3a311dbd6d | ||
|
|
219459eb7e | ||
|
|
9a8dc9b9a4 | ||
|
|
9b490f37f6 | ||
|
|
03a99a9a99 | ||
|
|
e9bb0681a2 | ||
|
|
962f8b200d | ||
|
|
8ccf5da63e | ||
|
|
5445ca5c53 | ||
|
|
3175d67da3 | ||
|
|
b69203ffa5 | ||
|
|
09cee87600 | ||
|
|
c27ae95a89 | ||
|
|
bbfa3a21eb | ||
|
|
fad068ba71 | ||
|
|
66684553a5 | ||
|
|
6435d700a9 | ||
|
|
37bf2841b4 | ||
|
|
12bfe03c58 | ||
|
|
cb1a609350 | ||
|
|
64f55cd2c6 | ||
|
|
449838625c | ||
|
|
748293b91a | ||
|
|
e9db404960 | ||
|
|
4cc3051da5 | ||
|
|
a2902fdd29 | ||
|
|
94031f7da9 | ||
|
|
fc3bade2df | ||
|
|
1c1852b940 | ||
|
|
1ed394b034 | ||
|
|
63fb2293c4 | ||
|
|
d6b24b26c0 | ||
|
|
1c14b211d3 | ||
|
|
3e4ca1111c | ||
|
|
efa0050cb7 | ||
|
|
343ceb40f5 | ||
|
|
b634aef1c4 | ||
|
|
36feae8e16 | ||
|
|
82a6326be2 | ||
|
|
d58ed52cbe | ||
|
|
5e959927f4 | ||
|
|
1d24adfa89 | ||
|
|
53916b3b9d | ||
|
|
4edc788c13 | ||
|
|
f3b07e8f84 | ||
|
|
4254668bfb | ||
|
|
0295638422 | ||
|
|
300c2284e4 | ||
|
|
4ac175d1f0 | ||
|
|
ae1adb84fb | ||
|
|
b4df55d4d6 | ||
|
|
bdb16e5a32 | ||
|
|
6ae13d87a0 | ||
|
|
0be44e2696 | ||
|
|
a8d6be994a | ||
|
|
ffa7ce55ee | ||
|
|
378ecd7629 | ||
|
|
d847ecfeed | ||
|
|
d30637c3fc | ||
|
|
a277fa550c | ||
|
|
f349fa8421 | ||
|
|
66411c76f1 | ||
|
|
f52d9ca449 | ||
|
|
b54a3d52fa | ||
|
|
f1d60f3654 | ||
|
|
5e47bed765 | ||
|
|
89fd84518b | ||
|
|
9ded9435f4 | ||
|
|
5fe64e4105 | ||
|
|
067944a472 | ||
|
|
f5aa884005 | ||
|
|
90751cdb53 | ||
|
|
8ef3a34ddf | ||
|
|
1f18b8647e | ||
|
|
f1f2255b5b | ||
|
|
7925360b22 | ||
|
|
e6862636a6 | ||
|
|
89ced63090 | ||
|
|
225b6155fa | ||
|
|
a080a3f8e4 | ||
|
|
3757626b2a | ||
|
|
e13f1e357a | ||
|
|
57d79eddcf | ||
|
|
3b91c61816 | ||
|
|
04e2524d40 | ||
|
|
4b4fdb9a03 | ||
|
|
75a279b25e | ||
|
|
3f2db7d83f | ||
|
|
56ec14acb9 | ||
|
|
84f6ebd897 | ||
|
|
4a19a0417f | ||
|
|
fd40a8c218 | ||
|
|
8c05d5063b | ||
|
|
d5617d6304 | ||
|
|
216d78f6e8 | ||
|
|
20ab374337 | ||
|
|
72119ac361 | ||
|
|
3de378b7f7 | ||
|
|
a17ac2ea69 | ||
|
|
38e3ff5c50 | ||
|
|
c5ce1f79c2 | ||
|
|
9cb69b49d7 | ||
|
|
1456e11803 | ||
|
|
ddd926e073 | ||
|
|
46aa097801 | ||
|
|
3c97864f0a | ||
|
|
e83d188d10 | ||
|
|
5a028c506d | ||
|
|
4a4e8e47a9 | ||
|
|
5256640fc3 | ||
|
|
be01c24635 | ||
|
|
75e14c8379 | ||
|
|
0b0e007d05 | ||
|
|
2306eb40ae | ||
|
|
ab0d6324cb | ||
|
|
a4de0ef66c | ||
|
|
f013a5980d | ||
|
|
616c12951b | ||
|
|
14bab28e63 | ||
|
|
755aeff1cd | ||
|
|
2a93ea01d2 | ||
|
|
1d3f543fbd | ||
|
|
059cd38f73 | ||
|
|
2916be666d | ||
|
|
2996de0a18 | ||
|
|
6c91a87474 | ||
|
|
d0c03174d9 | ||
|
|
5bbd4923a8 | ||
|
|
315216d7fd | ||
|
|
17251bb417 | ||
|
|
9f10c31f33 | ||
|
|
aff03a3bbd | ||
|
|
62195dfa0b | ||
|
|
b2ec0007e4 | ||
|
|
3c30f19198 | ||
|
|
02229b32db | ||
|
|
ed166e1011 | ||
|
|
d7545f20fe | ||
|
|
730da23524 | ||
|
|
ff124dd085 | ||
|
|
8e41170298 | ||
|
|
da937c6d5a | ||
|
|
afcfdd394d | ||
|
|
b2392e419e | ||
|
|
4d2978ff07 | ||
|
|
bd0a51ecb3 | ||
|
|
1270f69261 | ||
|
|
f12729ec6a | ||
|
|
b0ca5f6165 | ||
|
|
9c5ba9e3ae | ||
|
|
70aa3558f0 | ||
|
|
89a0c947a6 | ||
|
|
5b97f8d063 | ||
|
|
99d4fc16f7 | ||
|
|
950c7959b8 | ||
|
|
7355f3e2f7 | ||
|
|
5c59ce6662 | ||
|
|
82ede27999 | ||
|
|
bff501f250 | ||
|
|
bcd8b02270 | ||
|
|
9d633c100c | ||
|
|
fe90503f6d | ||
|
|
fe470f3188 | ||
|
|
ffeb9d3e6e | ||
|
|
f6d0426ee7 | ||
|
|
d1818c4b44 | ||
|
|
ebe4775a71 | ||
|
|
3036c88ada | ||
|
|
98630837bb | ||
|
|
a69d5d92f3 | ||
|
|
42982a8fad | ||
|
|
6865ed0f80 | ||
|
|
9086c0df30 | ||
|
|
c3f034f977 | ||
|
|
fe1e105df3 | ||
|
|
ec17e7f799 | ||
|
|
963b250aa6 | ||
|
|
0dced4556b | ||
|
|
023518bf0d | ||
|
|
8449677510 | ||
|
|
8ba4ba137d | ||
|
|
611379083e | ||
|
|
2e6388420a | ||
|
|
a4984e9831 | ||
|
|
71216b8d4d | ||
|
|
d1f242090e | ||
|
|
c7572b5864 | ||
|
|
e1e210c99d | ||
|
|
63885d1a04 | ||
|
|
a8233796be | ||
|
|
51874622e4 | ||
|
|
043ce3aa2b | ||
|
|
a6bbd936e0 | ||
|
|
90d816c619 | ||
|
|
902a70db23 | ||
|
|
84b471bed5 | ||
|
|
c711f3e05e | ||
|
|
cea619c62f | ||
|
|
bc39c2d2ec | ||
|
|
3ecbf8bc26 | ||
|
|
5cca9e5e1f | ||
|
|
e740012e81 | ||
|
|
2d05141535 | ||
|
|
57c0692444 | ||
|
|
5e40d92a61 | ||
|
|
6ade1ab7a6 | ||
|
|
ed3d64e849 | ||
|
|
6c7376f445 | ||
|
|
ef08237fd6 | ||
|
|
9a0013026f | ||
|
|
2a598bda65 | ||
|
|
b28ffcc13e | ||
|
|
2dcd54a2d8 | ||
|
|
acf4c9ccc7 | ||
|
|
ccbf15e5a2 | ||
|
|
e2ad6b69f8 | ||
|
|
b152814afb | ||
|
|
5014fb8e70 | ||
|
|
3d2307fced | ||
|
|
8f483ae1ed | ||
|
|
b1ad1b2b55 | ||
|
|
c533e7379a | ||
|
|
1f69ccb654 | ||
|
|
627fa36b69 | ||
|
|
82e2c2ad6d | ||
|
|
f678f65c8e | ||
|
|
aee8ba3aea | ||
|
|
2b7a457cbd | ||
|
|
f02208c7c6 | ||
|
|
482f013697 | ||
|
|
2802e169d3 | ||
|
|
1049b17d9e | ||
|
|
28f5e009a2 | ||
|
|
906de62d58 | ||
|
|
9be4b9c157 | ||
|
|
e0b963aef8 | ||
|
|
2445453de0 | ||
|
|
eaeaab7b18 | ||
|
|
5d45fc7ec2 | ||
|
|
d464d87d07 | ||
|
|
e7872bb76e | ||
|
|
e83888d548 | ||
|
|
cc3afa83bd | ||
|
|
fce556ff46 | ||
|
|
6e965ef2da | ||
|
|
afc39b5843 | ||
|
|
b430f36bb4 | ||
|
|
7d6212026b | ||
|
|
5480c20328 | ||
|
|
2e9950ab60 | ||
|
|
dcfe9510d2 | ||
|
|
9f24927367 | ||
|
|
cdb7e781bf | ||
|
|
22c26483dc | ||
|
|
2f6a6dfafc | ||
|
|
5dc3512bb8 | ||
|
|
6943051574 | ||
|
|
5cbebd574f | ||
|
|
53d58e1b54 | ||
|
|
723c27bab2 | ||
|
|
65b5a586c6 | ||
|
|
9a41644725 | ||
|
|
d2d80a2858 | ||
|
|
62dd266c63 | ||
|
|
ef504ddcb9 | ||
|
|
0ae9f9ed5c | ||
|
|
a497a3cfc3 | ||
|
|
72265d2db2 | ||
|
|
e3b6ab3962 | ||
|
|
f7772bc814 | ||
|
|
d3796ea4b3 | ||
|
|
6fecfa640d | ||
|
|
ea1c74ab01 | ||
|
|
7e251a154b | ||
|
|
8bc6dc9bb9 | ||
|
|
798869cbdb | ||
|
|
fcbf8838c7 | ||
|
|
085d401ec5 | ||
|
|
00850f209d | ||
|
|
deb9ad3e11 | ||
|
|
ae49d0c3fe | ||
|
|
26f46a7464 | ||
|
|
e24b5e18be | ||
|
|
5e5b18edea | ||
|
|
beabba92e3 | ||
|
|
c85c66a126 | ||
|
|
b7835b84ed | ||
|
|
a3b483ffe8 | ||
|
|
7ab291a843 | ||
|
|
246df99a78 | ||
|
|
fc01083c47 | ||
|
|
139d87cdb1 | ||
|
|
7ffcbbff1b | ||
|
|
0d6ad34b92 | ||
|
|
69da388948 | ||
|
|
d20cc1031e | ||
|
|
ce08ab921e | ||
|
|
3f8a9ff8bc | ||
|
|
018e54ffe0 | ||
|
|
64ae91b048 | ||
|
|
d23f6b1b18 | ||
|
|
5172acf64b | ||
|
|
d77e280434 | ||
|
|
de181e805b | ||
|
|
783c77d2d9 | ||
|
|
9c7efd138b | ||
|
|
4ffde96d99 | ||
|
|
f10d011893 | ||
|
|
7fd7dea530 | ||
|
|
dee8df8f78 | ||
|
|
e5874b581b | ||
|
|
f45ddc4a70 | ||
|
|
1e4cfd04a0 | ||
|
|
9a6c8b57e6 | ||
|
|
8d80c4d1da | ||
|
|
393ce18356 | ||
|
|
332785354b | ||
|
|
158fc9849d | ||
|
|
7c617ec62c | ||
|
|
54878c88ea | ||
|
|
09cdf4e14c | ||
|
|
a3499053a8 | ||
|
|
3493160256 | ||
|
|
fc6bf94b13 | ||
|
|
69c8c0e2f2 | ||
|
|
db3ab147a1 | ||
|
|
79a7174c78 | ||
|
|
033a8732f3 | ||
|
|
c0b71c5ddf | ||
|
|
13fd031941 | ||
|
|
10726377c6 | ||
|
|
fa49fd7789 | ||
|
|
87e6d9a442 | ||
|
|
f4a3c8afda | ||
|
|
dd0a08c708 | ||
|
|
683a64feda | ||
|
|
b13bc21cad | ||
|
|
fa83a5a8df | ||
|
|
69fc490459 | ||
|
|
bdf0a6fd27 | ||
|
|
f685f37905 | ||
|
|
c7038260ed | ||
|
|
0f7f454074 | ||
|
|
20d79460f0 | ||
|
|
6c1b91749a | ||
|
|
30ae6d2ad9 | ||
|
|
9b9b201a63 | ||
|
|
a331c55bf8 | ||
|
|
5d099b4eb9 | ||
|
|
4770311c55 | ||
|
|
a5c642a9ca | ||
|
|
df63d861a5 | ||
|
|
95f620f08c | ||
|
|
504da130e7 | ||
|
|
3f53c2b3fb | ||
|
|
9367a86f96 | ||
|
|
fa3dffaf9f | ||
|
|
385541a44d | ||
|
|
c2849d2c32 | ||
|
|
b3a2e710ab | ||
|
|
26bb6b29f5 | ||
|
|
92ea90ac0e | ||
|
|
e699b8c890 | ||
|
|
e25ef273ba | ||
|
|
7b3d741440 | ||
|
|
83d158d015 | ||
|
|
562ffbf5d3 | ||
|
|
90e4508011 | ||
|
|
194c34c189 | ||
|
|
cf9fc094b6 | ||
|
|
f445e26b73 | ||
|
|
1d28f6e830 | ||
|
|
71a7f8aa05 | ||
|
|
cc26e0815c | ||
|
|
48d2d25996 | ||
|
|
167739b5c5 | ||
|
|
ece52124a9 | ||
|
|
5e3988ba91 | ||
|
|
192ad2cf6f | ||
|
|
627dbe4189 | ||
|
|
f8e6880899 | ||
|
|
df21dcb201 | ||
|
|
73bf9f4e21 | ||
|
|
69da70c1ba | ||
|
|
9d00d3851e | ||
|
|
bd44c5f0fa | ||
|
|
1759f8c234 | ||
|
|
cdc9903e9f | ||
|
|
6f31264c48 | ||
|
|
1c686c4b5a | ||
|
|
6ef35b1e74 | ||
|
|
f50f72678e | ||
|
|
e6102b579e | ||
|
|
2d214bb3ea | ||
|
|
142c8aad3c | ||
|
|
0185d4908d | ||
|
|
3fcff1f09d | ||
|
|
7ab323d3dd | ||
|
|
5d76565ba2 | ||
|
|
236742c3ab | ||
|
|
6f72b444ac | ||
|
|
5e1e931c2d | ||
|
|
b6a7d3bfc8 | ||
|
|
6f16995ce6 | ||
|
|
9e15bf6a60 | ||
|
|
d3d2cd307b | ||
|
|
55a3f83e8a | ||
|
|
c234f0f4d9 | ||
|
|
501cc62096 | ||
|
|
4ab1e3704b | ||
|
|
f88c90aa0c | ||
|
|
c3a36da016 | ||
|
|
afbbedd88f | ||
|
|
122af971c3 | ||
|
|
90e5f37a9f | ||
|
|
e1a4010e98 | ||
|
|
30310ca40a | ||
|
|
b5a93c5f9f | ||
|
|
20fed4c971 | ||
|
|
90f9ba7e9e | ||
|
|
2530598b6f | ||
|
|
0a132b241f | ||
|
|
d07506012f | ||
|
|
e1b8fefd12 | ||
|
|
80a55c9327 | ||
|
|
ea6ccf4885 | ||
|
|
4b258d57bc | ||
|
|
35607fd056 | ||
|
|
bda8c30f18 | ||
|
|
9a6a2ad31b | ||
|
|
aa02e5e23d | ||
|
|
ae18f00679 | ||
|
|
f4ba45957a | ||
|
|
e59a5e2b7a | ||
|
|
f40036d6df | ||
|
|
d8f3dded11 | ||
|
|
49aa88a35c | ||
|
|
43a9d2ec9f | ||
|
|
574e4da878 | ||
|
|
7cd1047886 | ||
|
|
261e4f22cf | ||
|
|
f42f527015 | ||
|
|
f38c88c7f4 | ||
|
|
525140fa75 | ||
|
|
0075b59da1 | ||
|
|
cb331b653c | ||
|
|
e78420fac6 | ||
|
|
e7e32a22fa | ||
|
|
8bd0ce5626 | ||
|
|
94ff657808 | ||
|
|
608efbec1f | ||
|
|
e15a15e074 | ||
|
|
db8265086e | ||
|
|
ebe7c808d5 | ||
|
|
af7a93c179 | ||
|
|
50251278ed | ||
|
|
6c25ec2f46 | ||
|
|
f202c0f0d3 | ||
|
|
259925c1f2 | ||
|
|
f9bfec7dee | ||
|
|
8f97191ee9 | ||
|
|
2c212376b8 | ||
|
|
b9824460c5 | ||
|
|
1f0b884e33 | ||
|
|
4d6567ffdd | ||
|
|
89ce9ae546 | ||
|
|
82a5f53ff1 | ||
|
|
ae77c07311 | ||
|
|
c4e320526c | ||
|
|
4734d2600d | ||
|
|
a47597879c | ||
|
|
1e6a985bc7 | ||
|
|
557abe700e | ||
|
|
b8ea0d41a7 | ||
|
|
ffb7da7a58 | ||
|
|
9c80f7a04d | ||
|
|
d2040d3328 | ||
|
|
885f248364 | ||
|
|
bac30b6678 | ||
|
|
2a8cb64801 | ||
|
|
d77778fb5d | ||
|
|
eef2a80b36 | ||
|
|
0618dd6e50 | ||
|
|
463bd84c6f | ||
|
|
bc14b6cf27 | ||
|
|
ef2873c977 | ||
|
|
331bfa11ce | ||
|
|
b27df9b509 | ||
|
|
a7be240c4a | ||
|
|
40c0898427 | ||
|
|
34a2b083d8 | ||
|
|
a99c900658 | ||
|
|
5a3698a396 | ||
|
|
5cf3f0ac7b | ||
|
|
389ce2d5fd | ||
|
|
2e4bb63acf | ||
|
|
02ff6e0c63 | ||
|
|
2b3435b66d | ||
|
|
fbca4a6bf0 | ||
|
|
1c00f4277e | ||
|
|
fca3c26564 | ||
|
|
838a1d9844 | ||
|
|
08f44e066d | ||
|
|
ba596c74f8 | ||
|
|
6081a04f2e | ||
|
|
7744a30869 | ||
|
|
e9003c772c | ||
|
|
a0e1fc1b2d | ||
|
|
ae1a8cfcba | ||
|
|
77f812b1ac | ||
|
|
5e11128fa2 | ||
|
|
1d6481448a | ||
|
|
46d4c5ceb2 | ||
|
|
701579d863 | ||
|
|
a12f3d8fc9 | ||
|
|
f998118d44 | ||
|
|
07129479a8 | ||
|
|
f8f9a70dca | ||
|
|
abb471ba74 | ||
|
|
40327e4f4a | ||
|
|
b1c607518c | ||
|
|
26781dd864 | ||
|
|
4bd5b9ee79 | ||
|
|
32535dc79f | ||
|
|
b224518303 | ||
|
|
fb0410174c | ||
|
|
fa9bc36f3b | ||
|
|
927ab19e3e | ||
|
|
79b024ecfb | ||
|
|
6529b8b1bc | ||
|
|
32c64823ee | ||
|
|
e4cf893ed5 | ||
|
|
a9e2eb901e | ||
|
|
ca2d9ccf0b | ||
|
|
43d184c57c | ||
|
|
6866c57f48 | ||
|
|
7023d7ea57 | ||
|
|
ee96efeede | ||
|
|
7e5aa9402c | ||
|
|
1ec890214d | ||
|
|
ccdd0c9e06 | ||
|
|
7d31fc8c29 | ||
|
|
a82e162957 | ||
|
|
aa55e51b2c | ||
|
|
c6e929933f | ||
|
|
c552395b56 | ||
|
|
d82934783b | ||
|
|
9262fe180a | ||
|
|
ce6fb339e1 | ||
|
|
a793341181 | ||
|
|
c2a285eaa2 | ||
|
|
598575d13c | ||
|
|
c59fb8413c | ||
|
|
1293504c64 | ||
|
|
9b92283954 | ||
|
|
02dc16d5a3 | ||
|
|
2056cbef00 | ||
|
|
e9336d78ec | ||
|
|
8829cdc70f | ||
|
|
453ce619f8 | ||
|
|
77a66a1aee | ||
|
|
86a4f23038 | ||
|
|
5deda05370 | ||
|
|
854c8af83f | ||
|
|
ab62d1e6e7 | ||
|
|
3aa60a91e6 | ||
|
|
6b571b2c63 | ||
|
|
c6c640c2a6 | ||
|
|
e5d5a48033 | ||
|
|
8857eb03ea | ||
|
|
93ed600d1c | ||
|
|
a9eb6ed025 | ||
|
|
4e395b62ae | ||
|
|
45e8548b07 | ||
|
|
a89e2e4143 | ||
|
|
56afb55340 | ||
|
|
593c00a36f | ||
|
|
db09953636 | ||
|
|
506e1228cf | ||
|
|
f73edd5874 | ||
|
|
7e304a8a23 | ||
|
|
bacb892a46 | ||
|
|
f59f539817 | ||
|
|
2396a7e67f | ||
|
|
c17593e913 | ||
|
|
7e32a8ce40 | ||
|
|
18af8f0bf8 | ||
|
|
5f4d505f0f | ||
|
|
f4a6d50e17 | ||
|
|
5b19ee109d | ||
|
|
576c0b472b | ||
|
|
533662d9e9 | ||
|
|
92d4b012cb | ||
|
|
be872da15b | ||
|
|
1bf3ce832e | ||
|
|
9b1b5bc2e9 | ||
|
|
0485307acb | ||
|
|
9f30777e73 | ||
|
|
c6c6b862ca | ||
|
|
773a5ceff4 | ||
|
|
e3d69ba4e5 | ||
|
|
1d0de2fcfa | ||
|
|
29d052e34f | ||
|
|
60516bf79c | ||
|
|
30acf5d150 | ||
|
|
b31810faaa | ||
|
|
41bb236867 | ||
|
|
0d85a37dc7 | ||
|
|
4c07483079 | ||
|
|
b39678faad | ||
|
|
8454075468 | ||
|
|
9d96081f47 | ||
|
|
13befbf153 | ||
|
|
13bb0a9261 | ||
|
|
c109854749 | ||
|
|
89d016e88e | ||
|
|
aa014333af | ||
|
|
6acb8301c2 | ||
|
|
28fbe72e24 | ||
|
|
39ac002224 | ||
|
|
f4362b44f9 | ||
|
|
78f3e7678b | ||
|
|
76c5708be7 | ||
|
|
62bc8bd007 | ||
|
|
f618d776d7 | ||
|
|
8ce0950ff4 | ||
|
|
92b4fee512 | ||
|
|
b5c62832ed | ||
|
|
d510c12f94 | ||
|
|
b88de666f1 | ||
|
|
df285b9a66 | ||
|
|
c7d4d6362a | ||
|
|
50bcd9de1c | ||
|
|
9511070f3d | ||
|
|
bbfbf96b83 | ||
|
|
39d0ad576e | ||
|
|
33e69aaeb8 | ||
|
|
ac6944dbae | ||
|
|
a04a4b837f | ||
|
|
42b773f219 | ||
|
|
4dfc4dc3c6 | ||
|
|
ba93f8c8e9 | ||
|
|
b6b15f498f | ||
|
|
4528b2213e | ||
|
|
5c645e7564 | ||
|
|
d8f321564c | ||
|
|
c479834d38 | ||
|
|
f3fa4ff001 | ||
|
|
35f3bb193f | ||
|
|
45a5e14dde | ||
|
|
f2b96645c8 | ||
|
|
5349fe0635 | ||
|
|
cfef166602 | ||
|
|
0ecaaa5400 | ||
|
|
022fcc2b13 | ||
|
|
f3ede6858a | ||
|
|
d862a2fec5 | ||
|
|
4d824d08af | ||
|
|
69e7b399b6 | ||
|
|
117e074a84 | ||
|
|
4a07315e19 | ||
|
|
1610e3b81a | ||
|
|
ee360c3ddf | ||
|
|
9273cf6abe | ||
|
|
e60d708548 | ||
|
|
784b94a440 | ||
|
|
bd926c64f6 | ||
|
|
f65210ed93 | ||
|
|
6569089abb | ||
|
|
950961a089 | ||
|
|
5a10df22d3 | ||
|
|
881e46f499 | ||
|
|
8aa9b63306 | ||
|
|
872b400bec | ||
|
|
1608136bea | ||
|
|
fdb9f7e295 | ||
|
|
d869103497 | ||
|
|
f40ba2e58f | ||
|
|
17cb0ae3e4 | ||
|
|
af9dd71b30 | ||
|
|
4c6deb571a | ||
|
|
e13f4611d1 | ||
|
|
6dcb77f168 | ||
|
|
5872d6606e | ||
|
|
5875de69aa | ||
|
|
9a1f59206d | ||
|
|
d5ed0db686 | ||
|
|
962dcc3b51 | ||
|
|
25e409f8d0 | ||
|
|
f7a4b4bac4 | ||
|
|
3910bfa0fa | ||
|
|
20cebf57cd | ||
|
|
f94b1d2c11 | ||
|
|
11c1cdcae8 | ||
|
|
14f25c8638 | ||
|
|
d1fad4efd4 | ||
|
|
cdd4c4c78e | ||
|
|
808e0d2863 | ||
|
|
465f49fbe4 | ||
|
|
75e723a1b4 | ||
|
|
1199b7de42 | ||
|
|
d141db3680 | ||
|
|
43ec787767 | ||
|
|
49e74fa293 | ||
|
|
dcf9f0ffe1 | ||
|
|
cc9e3a516c | ||
|
|
77de769213 | ||
|
|
eccc5e08f8 | ||
|
|
ee9c1f38ba | ||
|
|
21c33e68ea | ||
|
|
b03e5a56e9 | ||
|
|
de26d22f79 | ||
|
|
75c82df749 | ||
|
|
64eb5536e1 | ||
|
|
fcf5bb696c | ||
|
|
e227d71813 | ||
|
|
bdfc1f139c | ||
|
|
9b80ba96c7 | ||
|
|
2afb29191a | ||
|
|
d929b433db | ||
|
|
6fe87e4eca | ||
|
|
8edcf183a5 | ||
|
|
5a66f65287 | ||
|
|
207172b366 | ||
|
|
a04269bdcb | ||
|
|
736b0055d8 | ||
|
|
7888158f1b | ||
|
|
18257c70e7 | ||
|
|
55e8436b5f | ||
|
|
4798f4df06 | ||
|
|
f7d9856c85 | ||
|
|
5470c313e2 | ||
|
|
3be685c560 | ||
|
|
ec93472984 | ||
|
|
c8c90c1604 | ||
|
|
89261430cb | ||
|
|
971699bcbe | ||
|
|
046b3329ea | ||
|
|
0fd48d774a | ||
|
|
92d187558e | ||
|
|
7c3c5b81d4 | ||
|
|
019e483f91 | ||
|
|
62eae0ad59 | ||
|
|
ae923d65f9 | ||
|
|
46f5475df0 | ||
|
|
c3a5471ca2 | ||
|
|
8e6ba0e21a | ||
|
|
b2b8137d16 | ||
|
|
c0eb5a2819 | ||
|
|
3d44d574a2 | ||
|
|
13886380a6 | ||
|
|
cb87f2f614 | ||
|
|
eb70b3ddd2 | ||
|
|
8d0e9bb9c0 | ||
|
|
10d51c6c38 | ||
|
|
ffdf42a72f | ||
|
|
4dde138858 | ||
|
|
4db4297c4f | ||
|
|
f07ff1bf27 | ||
|
|
77808ffca2 | ||
|
|
a737e978bd | ||
|
|
af5ff9b07b | ||
|
|
5f9e4905ac | ||
|
|
78e82ced53 | ||
|
|
3509638773 | ||
|
|
637b302cc3 | ||
|
|
c80a6fff05 | ||
|
|
4a493fb466 | ||
|
|
4a156f4c7f | ||
|
|
db4b80e967 | ||
|
|
72a78402fb | ||
|
|
af27e95fdc | ||
|
|
d539d26ac8 | ||
|
|
bceea3bd93 | ||
|
|
3625fb18c4 | ||
|
|
2991ab3ad7 | ||
|
|
078d8ee50d | ||
|
|
ed8873580b | ||
|
|
dc153b34c7 | ||
|
|
d57e74a2e6 | ||
|
|
0af22cd776 | ||
|
|
7ec665dd91 | ||
|
|
fa0786d627 | ||
|
|
d201dea34f | ||
|
|
637f67d4a1 | ||
|
|
7521b526ee | ||
|
|
6c4582faa6 | ||
|
|
0171d9c025 | ||
|
|
8b34d53358 | ||
|
|
008d06b7b5 | ||
|
|
5e8241fc7c | ||
|
|
cb1b627e20 | ||
|
|
a4463100c1 | ||
|
|
c89362ab82 | ||
|
|
eb11ed16ef | ||
|
|
b0d54c8a3f | ||
|
|
498ea5f6a4 | ||
|
|
39fe945e30 | ||
|
|
9994819e13 | ||
|
|
969493a031 | ||
|
|
5bdc822b7a | ||
|
|
90fac774ce | ||
|
|
5fdea2ada4 | ||
|
|
6188a2ba3f | ||
|
|
facbff3ef2 | ||
|
|
c3f867624c | ||
|
|
48e2f72008 | ||
|
|
d79690a269 | ||
|
|
17ef91e259 | ||
|
|
f70f4500e1 | ||
|
|
575a0fce81 | ||
|
|
ba35b711d2 | ||
|
|
56f1bf6b66 | ||
|
|
d41e436f4f | ||
|
|
a0dd8e60df | ||
|
|
6b89a87a02 | ||
|
|
d3b09741c7 | ||
|
|
56654a4ddf | ||
|
|
a4a2b8456b | ||
|
|
7631e9a5d2 | ||
|
|
bc4694a1a0 | ||
|
|
cab776350a | ||
|
|
ffe8bfcf09 | ||
|
|
5f3f93473f | ||
|
|
66a9b4ebfa | ||
|
|
435a374915 | ||
|
|
d04f2f64b4 | ||
|
|
ed489bab8f | ||
|
|
77a3e49cfd | ||
|
|
70aded1a40 | ||
|
|
6c2ed8a0b7 | ||
|
|
e64140408c | ||
|
|
8a4bf6ae0c | ||
|
|
945ff7ca30 | ||
|
|
54e6481310 | ||
|
|
4c3a65c407 | ||
|
|
788275c131 | ||
|
|
0bf6beac84 | ||
|
|
8c68d90a3d | ||
|
|
1d06e808f8 | ||
|
|
9f8c3f583d | ||
|
|
58056d0ccb | ||
|
|
9bf4111d98 | ||
|
|
653f1c296a | ||
|
|
2816d36221 | ||
|
|
b5080423ef | ||
|
|
7464b1b06b | ||
|
|
2c5f79c2a5 | ||
|
|
bd52348126 | ||
|
|
17b04ae60d | ||
|
|
52998a5db0 | ||
|
|
ca4458f20d | ||
|
|
884edc604b | ||
|
|
ebc0d3e26d | ||
|
|
1905d5923b | ||
|
|
48df7ee075 | ||
|
|
aaeb6f4c11 | ||
|
|
c0e3756a96 | ||
|
|
bade06bee1 | ||
|
|
9032f77010 | ||
|
|
8b31031f8b | ||
|
|
420e743bce | ||
|
|
21e19ccdcb | ||
|
|
dde048fb4c | ||
|
|
2190016c06 | ||
|
|
b094bf8600 | ||
|
|
74ed921355 | ||
|
|
cd9ba50d57 | ||
|
|
a2b1c8a95b | ||
|
|
99fe87a005 | ||
|
|
f260c78bb9 | ||
|
|
d788c5ad73 | ||
|
|
84af1ee70e | ||
|
|
92f24ec988 | ||
|
|
4937464195 | ||
|
|
810d347e95 | ||
|
|
6b6a20e6d3 | ||
|
|
cc150d9a4a | ||
|
|
7330494e58 | ||
|
|
63064ca3ca | ||
|
|
ccc9d046c8 | ||
|
|
6bf06c6c72 | ||
|
|
ff84e07881 | ||
|
|
03a7440473 | ||
|
|
ebdb594515 | ||
|
|
5e0aaecc3e | ||
|
|
fe4449d2ea | ||
|
|
09ed6d6ff7 | ||
|
|
4b781d9a9d | ||
|
|
ee1f24f60e | ||
|
|
f5f9873684 | ||
|
|
fdbd7a05f0 | ||
|
|
62b530b48f | ||
|
|
0c774de473 | ||
|
|
8de4d75683 | ||
|
|
366881fe8f | ||
|
|
92e477dd45 | ||
|
|
5ef663af0d | ||
|
|
7d02255b46 | ||
|
|
a7e545034c | ||
|
|
e1556c4b45 | ||
|
|
c45b685c17 | ||
|
|
f4f016b407 | ||
|
|
634b22175d | ||
|
|
e07baaafec | ||
|
|
165afc8d90 | ||
|
|
657a1c254f | ||
|
|
38139b9091 | ||
|
|
bf10bcdaa6 | ||
|
|
87cd2f107f | ||
|
|
0e3d51db02 | ||
|
|
332d067112 | ||
|
|
4c348d6cf0 | ||
|
|
148dfede6c | ||
|
|
9639c04448 | ||
|
|
de8ba8af63 | ||
|
|
d719a81d1c | ||
|
|
d2ce2399b9 | ||
|
|
59ee90dd10 | ||
|
|
736f836232 | ||
|
|
d319bac4a5 | ||
|
|
06785bad3f | ||
|
|
a3f7b0af9a | ||
|
|
7681b80ec8 | ||
|
|
3509e1ae1b | ||
|
|
0dea692e41 | ||
|
|
bd346bd578 | ||
|
|
2116fbf347 | ||
|
|
a61c6130e2 | ||
|
|
80c34a07e1 | ||
|
|
a0bfa4cd48 | ||
|
|
6f431852e3 | ||
|
|
11605b7982 | ||
|
|
86dfe16551 | ||
|
|
f47020ce7f | ||
|
|
7855c64765 | ||
|
|
d120a04206 | ||
|
|
f7ab391eff | ||
|
|
c96f2e66b2 | ||
|
|
cfdc61eb46 | ||
|
|
3b6404b7e6 | ||
|
|
0879dc2788 | ||
|
|
c847cb6942 | ||
|
|
0e51aaba09 | ||
|
|
73841ee525 | ||
|
|
67e30955f7 | ||
|
|
290d10418c | ||
|
|
946a164907 | ||
|
|
444bb7909e | ||
|
|
e585b91339 | ||
|
|
24de93fbfb | ||
|
|
53deb4d0d3 | ||
|
|
3994e845ad | ||
|
|
b3e1cba56b | ||
|
|
0074cf0ae0 | ||
|
|
5cabfa755f | ||
|
|
9a14f70223 | ||
|
|
eb591c0343 | ||
|
|
11aeb1ccb8 | ||
|
|
05ac9c286d | ||
|
|
cdc69eea08 | ||
|
|
c82aeb0256 | ||
|
|
7e9b5d0006 | ||
|
|
f64aca75a5 | ||
|
|
b6cb642778 | ||
|
|
87b01d90f8 | ||
|
|
9e76c47a09 | ||
|
|
9487cc8b06 | ||
|
|
411b8f6a4f | ||
|
|
ae1c6a6b8f | ||
|
|
5505f8030f | ||
|
|
24377f19a2 | ||
|
|
2ec467ef04 | ||
|
|
fef78b2e6b | ||
|
|
3c40a48ab5 | ||
|
|
8a3595991a | ||
|
|
7505461ccc | ||
|
|
89f35b616d | ||
|
|
b557d9f8c6 | ||
|
|
c7fe02ebbb | ||
|
|
402d68f478 | ||
|
|
06a8cb68ff | ||
|
|
c707825a92 | ||
|
|
9c69899620 | ||
|
|
56f4702278 | ||
|
|
72446cedd3 | ||
|
|
286b2e147d | ||
|
|
c01b52a6d2 | ||
|
|
0afe548fd6 | ||
|
|
06d45ea0bf | ||
|
|
43a097d03b | ||
|
|
54a4a789c3 | ||
|
|
22f0231587 | ||
|
|
d762da42e1 | ||
|
|
b1241f4f74 | ||
|
|
f50ab269d7 | ||
|
|
d39f4a0327 | ||
|
|
fc9cb70024 | ||
|
|
ed94f0af51 | ||
|
|
104f8e8de7 | ||
|
|
5253bdc808 | ||
|
|
91fbaff4f4 | ||
|
|
7bda539e49 | ||
|
|
6277e5fa47 | ||
|
|
d194f4895f | ||
|
|
d0310dc61c | ||
|
|
cf659e0055 | ||
|
|
dcfddbdfdd | ||
|
|
242eab79c7 | ||
|
|
75a25f0711 | ||
|
|
e29304dd9f | ||
|
|
856b7ee4d3 | ||
|
|
2ba4eb866a | ||
|
|
74b05d60e1 | ||
|
|
875af8f213 | ||
|
|
a3173eb04c | ||
|
|
749a97775f | ||
|
|
adf2501615 | ||
|
|
33a5f275a1 | ||
|
|
0095c44431 | ||
|
|
13b127c468 | ||
|
|
9108f01264 | ||
|
|
4c05c081c3 | ||
|
|
d5e4d0efd7 | ||
|
|
880917b64c | ||
|
|
0e6ed98b68 | ||
|
|
e207a74995 | ||
|
|
daa6596b41 | ||
|
|
d3b26140e3 | ||
|
|
f89b59e680 | ||
|
|
2829a5701d | ||
|
|
96fdcb55d2 | ||
|
|
740e49cc4e | ||
|
|
f8f13fc533 | ||
|
|
463fdfdaab | ||
|
|
57c5185104 | ||
|
|
9c26964779 | ||
|
|
3898c2fc42 | ||
|
|
1749cd18c3 | ||
|
|
0085e1242f | ||
|
|
b78e7109f2 | ||
|
|
5328640ace | ||
|
|
e722615273 | ||
|
|
faa68bf51e | ||
|
|
b8f49ca656 | ||
|
|
a0c1904ae9 | ||
|
|
b71e535541 | ||
|
|
01ab3165f6 | ||
|
|
44731c7771 | ||
|
|
0773d31fd7 | ||
|
|
86318dc3ff | ||
|
|
46abd60d9d | ||
|
|
2dceadbd7d | ||
|
|
9e2f4084a8 | ||
|
|
5731c4e0be | ||
|
|
c776897e72 | ||
|
|
ae071ab379 | ||
|
|
8b43f4a1ec | ||
|
|
24ad0b1802 | ||
|
|
cfc26bf7ba | ||
|
|
b41a99a719 | ||
|
|
5c0825328c | ||
|
|
cacec2b614 | ||
|
|
c63af68d6c | ||
|
|
99962c1405 | ||
|
|
d488a5afba | ||
|
|
592f47200c | ||
|
|
77518e50a6 | ||
|
|
42799aafda | ||
|
|
8c6b2514e6 | ||
|
|
c6a8967c8b | ||
|
|
bb2a44c539 | ||
|
|
7c7f44bb45 | ||
|
|
5e7e988de0 | ||
|
|
d08b3f4d4d | ||
|
|
1ef2e664f1 | ||
|
|
aa083beaaf | ||
|
|
8704585bb0 | ||
|
|
8eec24a15c | ||
|
|
58f44d8fb8 | ||
|
|
b8437e4035 | ||
|
|
fe17ecfccc | ||
|
|
67735d600a | ||
|
|
a544fcb683 | ||
|
|
909d875426 | ||
|
|
5abad4e282 | ||
|
|
5d75f4a214 | ||
|
|
e00e230d27 | ||
|
|
f4ed000684 | ||
|
|
0e5b83cf80 | ||
|
|
e1c3d5083c | ||
|
|
519cc493e0 | ||
|
|
9017e60538 | ||
|
|
bc1c01a1bc | ||
|
|
920d5735f8 | ||
|
|
0095332a0a | ||
|
|
086d68cb8c | ||
|
|
0f2b501974 | ||
|
|
837c5bc04a | ||
|
|
271985fcb4 | ||
|
|
eb141d6eda | ||
|
|
adf7ea8a79 | ||
|
|
dc923fa092 | ||
|
|
ce0ed9b169 | ||
|
|
4c9cd8ae91 | ||
|
|
69de3b94a9 | ||
|
|
7e35d609f6 | ||
|
|
7f17ea83d6 | ||
|
|
db733b6310 | ||
|
|
be58898ac9 | ||
|
|
4a266c905b | ||
|
|
4abae82403 | ||
|
|
484e8a9c23 | ||
|
|
4b1750f093 | ||
|
|
fd959ae341 | ||
|
|
08fa9313c3 | ||
|
|
8088a840c9 | ||
|
|
872bc5e78d | ||
|
|
4450e4f36c | ||
|
|
2e4809bb25 | ||
|
|
5f5eccda72 | ||
|
|
954e4a68f0 | ||
|
|
5108899bc3 | ||
|
|
83bf7d5718 | ||
|
|
99e8f47ce1 | ||
|
|
b54a1bc4fc | ||
|
|
3134f3d468 | ||
|
|
db14568241 | ||
|
|
f0b06ba771 | ||
|
|
1ceec50e50 | ||
|
|
e745dc9d7b | ||
|
|
43f7f1f167 | ||
|
|
9f6b6f0257 | ||
|
|
a03972b19c | ||
|
|
b5d7bbd631 | ||
|
|
aed6652217 | ||
|
|
199d9d350d | ||
|
|
12849a7ca0 | ||
|
|
77305e2f52 | ||
|
|
f44095e8e7 | ||
|
|
cbc2a18c7a | ||
|
|
4deeeb8ea2 | ||
|
|
018e0a82cc | ||
|
|
16e6093633 | ||
|
|
f77d978aec | ||
|
|
1d1f67c55d | ||
|
|
698990562e | ||
|
|
0372a7d36c | ||
|
|
8581db53f9 | ||
|
|
2beedb7e0d | ||
|
|
0bb28cc626 | ||
|
|
fe7cc5f7b0 | ||
|
|
6781323d55 | ||
|
|
a8e0c2a63e | ||
|
|
18c5555388 | ||
|
|
64e429ea02 | ||
|
|
c51aeecd06 | ||
|
|
cf87918d79 | ||
|
|
8682a6e6cf | ||
|
|
55d3883d58 | ||
|
|
dedc3c7d4a | ||
|
|
0d7b37e38b | ||
|
|
29d52c3832 | ||
|
|
5720d7d887 | ||
|
|
513823ba5d | ||
|
|
c17c036a0f | ||
|
|
a8d406e57c | ||
|
|
72c85b3f5b | ||
|
|
7986f03568 | ||
|
|
1d5f19a418 | ||
|
|
03c50e634a | ||
|
|
a614dda122 | ||
|
|
3f842303d8 | ||
|
|
8a04d42a92 | ||
|
|
afedc19d57 | ||
|
|
7d502f9e42 | ||
|
|
c551d393cb | ||
|
|
07d7e32348 | ||
|
|
16912e3290 | ||
|
|
b6a3c61dfe | ||
|
|
ad56e24127 | ||
|
|
724ce1f541 | ||
|
|
68f463760a | ||
|
|
10eac1ffc6 | ||
|
|
7476bb67a1 | ||
|
|
57c9df9dc9 | ||
|
|
5beecae05f | ||
|
|
b80265f24d | ||
|
|
87bc5cf235 | ||
|
|
5f7c76e007 | ||
|
|
1efd262315 | ||
|
|
89ac713d92 | ||
|
|
29ca30cb99 | ||
|
|
d905457092 | ||
|
|
4f88127091 | ||
|
|
c8f2696d4c | ||
|
|
7fc2531a8c | ||
|
|
95ea69a78f | ||
|
|
557329075f | ||
|
|
bbe5602bf6 | ||
|
|
2ad1f22298 | ||
|
|
84acb20806 | ||
|
|
171c5891ec | ||
|
|
338e4e40b1 | ||
|
|
e32c6bb2d6 | ||
|
|
5fc26287cb | ||
|
|
298e995c6b | ||
|
|
8bbce5b3e5 | ||
|
|
7b205f62fe | ||
|
|
6527c9859e | ||
|
|
5ccaab3302 | ||
|
|
6035f67aad | ||
|
|
a930afe949 | ||
|
|
3d73780c01 | ||
|
|
06709a4057 | ||
|
|
4571877241 | ||
|
|
9711111a36 | ||
|
|
6b9aa97eec | ||
|
|
fe32a357a0 | ||
|
|
d21ab5c668 | ||
|
|
140c75d461 | ||
|
|
30e59cbdbe | ||
|
|
0a2b003fce | ||
|
|
2a7ecf6074 | ||
|
|
640eed235b | ||
|
|
d915385031 | ||
|
|
112c576a95 | ||
|
|
b42d5ecd62 | ||
|
|
de955494aa | ||
|
|
5a93b0427b | ||
|
|
d9b641e6b5 | ||
|
|
9bcf350706 | ||
|
|
f4d767df04 | ||
|
|
93120e9a18 | ||
|
|
eddb064957 | ||
|
|
aef7bba79b | ||
|
|
ba7e4fc995 | ||
|
|
4bec53c435 | ||
|
|
c17ec74461 | ||
|
|
4a93784be0 | ||
|
|
19e35c7457 | ||
|
|
54c84d4322 | ||
|
|
abd064150a | ||
|
|
1820aa9120 | ||
|
|
f36173fa45 | ||
|
|
1d34d82cd1 | ||
|
|
456319cffd | ||
|
|
f3c5e34d16 | ||
|
|
871d88ffe1 | ||
|
|
b31728b9c4 | ||
|
|
7872ae0fae | ||
|
|
4c688fad87 | ||
|
|
34ba4248a4 | ||
|
|
fb2fe90953 | ||
|
|
bf6256573a | ||
|
|
8dc21b9b52 | ||
|
|
513ddd4f2b | ||
|
|
1e8b218970 | ||
|
|
6a03d27714 | ||
|
|
1a2619419f | ||
|
|
873ea0e4bf | ||
|
|
8447cd1c28 | ||
|
|
06ea04e31e | ||
|
|
e692059267 | ||
|
|
78c0a0cbaf | ||
|
|
dfa200a83b | ||
|
|
ad4f69e349 | ||
|
|
c2b980317a | ||
|
|
98d6d21020 | ||
|
|
f5822e645d | ||
|
|
f2f093aa87 | ||
|
|
2208b5252d | ||
|
|
1d59efdce2 | ||
|
|
43cecbbedd | ||
|
|
1d63f39c1f | ||
|
|
848c5331cf | ||
|
|
29a2448421 | ||
|
|
3a4fbd0193 | ||
|
|
73361fdc5b | ||
|
|
bc3ad67a02 | ||
|
|
0f7a8c5246 | ||
|
|
893c37e5d0 | ||
|
|
f30b1899cc | ||
|
|
fef326b367 | ||
|
|
91a33a9f5b | ||
|
|
7fd1c8941c | ||
|
|
951f7835a7 | ||
|
|
b310735a34 | ||
|
|
473ddc24e6 | ||
|
|
bd98173e01 | ||
|
|
7cca2b2357 | ||
|
|
02a397c749 | ||
|
|
c69e212be9 | ||
|
|
598c1fa541 | ||
|
|
34540de430 | ||
|
|
5cf99f870a | ||
|
|
fa9159fde7 | ||
|
|
ff9ba449dd | ||
|
|
c3e11e75a0 | ||
|
|
de10aeb983 | ||
|
|
2e7aa2d1f0 | ||
|
|
99d16f91bc | ||
|
|
4fed9fd491 | ||
|
|
94c9ea2cfb | ||
|
|
f212344585 | ||
|
|
dae1c9b541 | ||
|
|
928224f73b | ||
|
|
6eb02d9045 | ||
|
|
9ffdb6fc42 | ||
|
|
acc6520f28 | ||
|
|
9f6a642349 | ||
|
|
87dee5c8ad | ||
|
|
3b863c176e | ||
|
|
dec6961d9c | ||
|
|
978dde365a | ||
|
|
be8d124211 | ||
|
|
e48fe00d6c | ||
|
|
cdf5847bc9 | ||
|
|
88aac0099a | ||
|
|
9bfdec238c | ||
|
|
e299977244 | ||
|
|
a6f991a6e5 | ||
|
|
755d928123 | ||
|
|
50cb0ed9f7 | ||
|
|
9b58ede500 | ||
|
|
d4fc9e2531 | ||
|
|
42b272398a | ||
|
|
b0076809aa | ||
|
|
20ddfedfb7 | ||
|
|
c89b63b78e | ||
|
|
09830dde00 | ||
|
|
18cd3a9495 | ||
|
|
d3a4696e2a | ||
|
|
21429db907 | ||
|
|
e158b73337 | ||
|
|
51153ce76d | ||
|
|
e9fdeaf476 | ||
|
|
478c493589 | ||
|
|
2712b9cf48 | ||
|
|
68039317be | ||
|
|
9def4fd479 | ||
|
|
e8d4a64e14 | ||
|
|
c97abfdeb0 | ||
|
|
713dd2b5a2 | ||
|
|
ddee6b8aea | ||
|
|
d4163b10b3 | ||
|
|
b6c3dd98a5 | ||
|
|
0b2140a7ad | ||
|
|
a8657429be | ||
|
|
371a54c2f2 | ||
|
|
5b6e54de14 | ||
|
|
f704533086 | ||
|
|
e2de008ef6 | ||
|
|
ace0dbcad7 | ||
|
|
254d8a21a8 | ||
|
|
2d08f5f87f | ||
|
|
13aa6286d1 | ||
|
|
55bca1b173 | ||
|
|
26a1ee9eec | ||
|
|
7b0b0f6d5b | ||
|
|
6df0ee07f2 | ||
|
|
69dde6100c | ||
|
|
a2f82fa1b4 | ||
|
|
bad3639340 | ||
|
|
5526f29113 | ||
|
|
5aaaae758f | ||
|
|
1d057ac63d | ||
|
|
75410a1913 | ||
|
|
5e9501ba8e | ||
|
|
272fd395e0 | ||
|
|
ea5f5e6b3a | ||
|
|
d5aa510fc6 | ||
|
|
01a864650a | ||
|
|
774b12dc96 | ||
|
|
53804bbbbe | ||
|
|
91500aca09 | ||
|
|
a4444dc7e0 | ||
|
|
6ec07666d8 | ||
|
|
ab8a1f1782 | ||
|
|
4c428607fb | ||
|
|
b8a51ba171 | ||
|
|
3909a037fd | ||
|
|
063fc498bd | ||
|
|
5e9655b543 | ||
|
|
cb4d9c43e3 | ||
|
|
9342969191 | ||
|
|
7ee9415863 | ||
|
|
8d75c42adc | ||
|
|
3373651ed1 | ||
|
|
f1cf3d0710 | ||
|
|
1c116be819 | ||
|
|
5e378259ce | ||
|
|
a8a43c5789 | ||
|
|
f95a2dd39e | ||
|
|
b3c2b871ea | ||
|
|
5aaa208dee | ||
|
|
6bf79144ac | ||
|
|
1573af9f54 | ||
|
|
43e5e9b6bd | ||
|
|
5ca253b51d | ||
|
|
85f1a719a3 | ||
|
|
423a37bfbb | ||
|
|
5b1d8b2805 | ||
|
|
fc74d96efc | ||
|
|
b6e347d15b | ||
|
|
c6ad3c756a | ||
|
|
9d82cb8fb5 | ||
|
|
50ddefa763 | ||
|
|
47a6424c26 | ||
|
|
b842261f20 | ||
|
|
1b4092188d | ||
|
|
77c0a1d837 | ||
|
|
b28497f1a4 | ||
|
|
cc0a959013 | ||
|
|
396ba7043a | ||
|
|
71d85cf6d0 | ||
|
|
37bef043a3 | ||
|
|
4551b82364 | ||
|
|
a57d8cf46d | ||
|
|
140aec0cbe | ||
|
|
184aeed007 | ||
|
|
485f1f7e0a | ||
|
|
e467f9007e | ||
|
|
31d66f722c | ||
|
|
0bcfc2eadc | ||
|
|
334a2e5f70 | ||
|
|
f79da224ae | ||
|
|
21e3728b99 | ||
|
|
478df7d5c0 | ||
|
|
206829dfa6 | ||
|
|
0a38d42985 | ||
|
|
863478d0e0 | ||
|
|
d5f186a897 | ||
|
|
041f00e07d | ||
|
|
2ebaa0a978 | ||
|
|
e5c6bc5191 | ||
|
|
8ae3d9a952 | ||
|
|
0ed11717a7 | ||
|
|
9c41379645 | ||
|
|
ae53e6ac63 | ||
|
|
ac432c841c | ||
|
|
9e1165243c | ||
|
|
2bfbc1b8c2 | ||
|
|
be853ba12d | ||
|
|
2cbc61b085 | ||
|
|
984f09872a | ||
|
|
45624a50a5 | ||
|
|
0e172089a5 | ||
|
|
ee910d176d | ||
|
|
fd6f70f5e0 | ||
|
|
bbee68d4f8 | ||
|
|
879d136fe7 | ||
|
|
184d26cad2 | ||
|
|
a1bd49951d | ||
|
|
6eec5cbaf2 | ||
|
|
01ca06d6e6 | ||
|
|
ddbac35c1b | ||
|
|
b1dd6114fc | ||
|
|
0e1cf6d040 | ||
|
|
f9543a890e | ||
|
|
e2f661edd7 | ||
|
|
d6a179ea43 | ||
|
|
ad3439be7a | ||
|
|
72796f2799 | ||
|
|
46b28d5df3 | ||
|
|
1736c93b09 | ||
|
|
b219e74d2b | ||
|
|
0b480c3f28 | ||
|
|
8a450576bc | ||
|
|
e977734c7b | ||
|
|
d85f3c38f6 | ||
|
|
fd0037ba62 | ||
|
|
7983519488 | ||
|
|
0f0b7c9517 | ||
|
|
f440353dc4 | ||
|
|
f5e8c68a60 | ||
|
|
8a5d5b7a7b | ||
|
|
a684711df1 | ||
|
|
5f3730b767 | ||
|
|
a330053500 | ||
|
|
189ee960f9 | ||
|
|
674b4e25d0 | ||
|
|
7a758bce84 | ||
|
|
f0bdccdf0d | ||
|
|
8b4b1e9b43 | ||
|
|
546bfc399c | ||
|
|
2984b35da2 | ||
|
|
dbf47ce5ae | ||
|
|
b60eea2def | ||
|
|
74350ef1e0 | ||
|
|
6b0631aa46 | ||
|
|
3932290c2e | ||
|
|
a03d45e651 | ||
|
|
b1092542d4 | ||
|
|
179a59651d | ||
|
|
ef347db33b | ||
|
|
20a17b2704 | ||
|
|
df2f2a6783 | ||
|
|
e3d63894b2 | ||
|
|
6aecdf86ff | ||
|
|
797bf26c40 | ||
|
|
d04410d1f6 | ||
|
|
4ab5c5416b | ||
|
|
01d4a4b27b | ||
|
|
4e58606a79 | ||
|
|
9efc6efcdf | ||
|
|
e657f1beb3 | ||
|
|
d84da5d01a | ||
|
|
686a929d1b | ||
|
|
7ab2274d5e | ||
|
|
273fd28389 | ||
|
|
81b95a0979 | ||
|
|
994e78e787 | ||
|
|
f48c1b9d21 | ||
|
|
9581f7cc94 | ||
|
|
ccd65ad9fa | ||
|
|
01d7896831 | ||
|
|
9860e6163e | ||
|
|
d4d8b2d6be | ||
|
|
a7b6144435 | ||
|
|
da5953ee91 | ||
|
|
e7a081c1a5 | ||
|
|
d685ce0e89 | ||
|
|
115eaff478 | ||
|
|
5efef16a2e | ||
|
|
2ed2376763 | ||
|
|
ee147b0083 | ||
|
|
697ce6e33e | ||
|
|
dc5f1506f4 | ||
|
|
8b41e0518d | ||
|
|
39997e0b1c | ||
|
|
860c4ee3d9 | ||
|
|
31c54233c7 | ||
|
|
0ea0f751fc | ||
|
|
6c26417a28 | ||
|
|
1bc0a0df0c | ||
|
|
415766bfe5 | ||
|
|
ae493cff4e | ||
|
|
65bdd25c0d | ||
|
|
0fd393b9ed | ||
|
|
6c631b1015 | ||
|
|
2e724180a9 | ||
|
|
806a97d5ae | ||
|
|
10f2528453 | ||
|
|
21b4d5f226 | ||
|
|
672e121e4a | ||
|
|
1b022b8afb | ||
|
|
157a586524 | ||
|
|
02f326c053 | ||
|
|
e579462aa6 | ||
|
|
9c671bded9 | ||
|
|
f507bae326 | ||
|
|
cc4bffa716 | ||
|
|
70e9031ac9 | ||
|
|
1559f08173 | ||
|
|
7dad3879ad | ||
|
|
7fd2a8783b | ||
|
|
f45ccaeeb5 | ||
|
|
4c67e80f91 | ||
|
|
fe0eca5a00 | ||
|
|
8e21efdcf5 | ||
|
|
4244e2ef88 | ||
|
|
10598b3e74 | ||
|
|
f2f158ba67 | ||
|
|
ba8a2182db | ||
|
|
0347e82a47 | ||
|
|
29e0c36c2d | ||
|
|
fd7062773a | ||
|
|
66dbfb6990 | ||
|
|
a8a2299880 | ||
|
|
03c3991a1f | ||
|
|
462440d784 | ||
|
|
6d6cb1c1d6 | ||
|
|
6691f7c52c | ||
|
|
47545a831c | ||
|
|
5d56ff9cd2 | ||
|
|
f6b20861c5 | ||
|
|
62ffdc73cb | ||
|
|
75733e82ec | ||
|
|
62cee63841 | ||
|
|
ff8aeceada | ||
|
|
e5666653ff | ||
|
|
3c7d7ae100 | ||
|
|
9af863655d | ||
|
|
af0840aa45 | ||
|
|
09043136b6 | ||
|
|
fd18e5704f | ||
|
|
5b50a9864f | ||
|
|
dba73b39a6 | ||
|
|
c2196759d2 | ||
|
|
db1c86f20d | ||
|
|
42db60eb88 | ||
|
|
911c6836ce | ||
|
|
0d2186ab3b | ||
|
|
8570023f94 | ||
|
|
569800bf9c | ||
|
|
f528f5c233 | ||
|
|
5aa16e1c71 | ||
|
|
2428a4610c | ||
|
|
5d8c0213a5 | ||
|
|
f76461ac31 | ||
|
|
a26909a019 | ||
|
|
906760e680 | ||
|
|
5a4cffa02d | ||
|
|
a6b2c03af3 | ||
|
|
312e0296bd | ||
|
|
0a6e7c794b | ||
|
|
c60d5544e9 | ||
|
|
d52b1e13ec | ||
|
|
05668443fc | ||
|
|
b495a16a0a | ||
|
|
c6fa1a7258 | ||
|
|
c3bb7c8d17 | ||
|
|
530e32f1a1 | ||
|
|
d8f364aa58 | ||
|
|
40f33fd2f2 | ||
|
|
c632054716 | ||
|
|
38c1f77326 | ||
|
|
f74004d954 | ||
|
|
7eaf4f2de3 | ||
|
|
73458d38ca | ||
|
|
e6eef5a03d | ||
|
|
e20f429ae4 | ||
|
|
434d05bcd9 | ||
|
|
1ea5104aee | ||
|
|
e18a46acfa | ||
|
|
fcf25b2a2a | ||
|
|
624cef1e8c | ||
|
|
9b7f1e36e0 | ||
|
|
6963037ba0 | ||
|
|
2642053096 | ||
|
|
1da98683f3 | ||
|
|
ed4c7c0a04 | ||
|
|
05870cc6c7 | ||
|
|
7a66c5315d | ||
|
|
68e56325b6 | ||
|
|
140db8e274 | ||
|
|
8c3643b691 | ||
|
|
cef5797419 | ||
|
|
8535c53289 | ||
|
|
aa032b5790 | ||
|
|
b49a495f78 | ||
|
|
970e45209a | ||
|
|
edbf4aefda | ||
|
|
87ea4fe357 | ||
|
|
694572694d | ||
|
|
8b90bd7968 | ||
|
|
22221cce21 | ||
|
|
f93f7979e1 | ||
|
|
b3d991070e | ||
|
|
df9791e5d9 | ||
|
|
4921fb7558 | ||
|
|
dadbfd92d0 | ||
|
|
25e9e0d745 | ||
|
|
44a0b20c49 | ||
|
|
7d8cb51689 | ||
|
|
f10eb36229 | ||
|
|
5a303d9c34 | ||
|
|
4473a45e63 | ||
|
|
48f9188fb4 | ||
|
|
f761605bfc | ||
|
|
2ba2db3c5a | ||
|
|
ff8ba97918 | ||
|
|
17f01726b4 | ||
|
|
1b8911f550 | ||
|
|
9f5e502d42 | ||
|
|
1f49d6363d | ||
|
|
1e55c956b7 | ||
|
|
e97b54173b | ||
|
|
496af0800f | ||
|
|
34d0a637cf | ||
|
|
43c5306ba4 | ||
|
|
718de46ac7 | ||
|
|
b8df114b73 | ||
|
|
fb560915d5 | ||
|
|
994be62578 | ||
|
|
41a87e3806 | ||
|
|
78545b8dfe | ||
|
|
e7bff44fe1 | ||
|
|
a530b93b5f | ||
|
|
fd9c0d3f6e | ||
|
|
e4e22d3c51 | ||
|
|
a50c00ea8f | ||
|
|
a0608eb314 | ||
|
|
a340d515ad | ||
|
|
7891ba2c8d | ||
|
|
6c61e42d9b | ||
|
|
11cc3b04b9 | ||
|
|
6b63576798 | ||
|
|
c2f71bd49b | ||
|
|
7071432e6c | ||
|
|
c6a9378dbf | ||
|
|
57fbe81be1 | ||
|
|
b6ba67b2b8 | ||
|
|
20b6cea436 | ||
|
|
e3d1359626 | ||
|
|
4b7cc9dc1e | ||
|
|
b2d06dd24d | ||
|
|
002bf0ab02 | ||
|
|
2baf567120 | ||
|
|
44aa11eccc | ||
|
|
3c50d37ddd | ||
|
|
860bd8f155 | ||
|
|
89213dfbff | ||
|
|
265c1b4ffe | ||
|
|
112db812fb | ||
|
|
aec6c0c070 | ||
|
|
ad6ba8f81c | ||
|
|
f20c839af5 | ||
|
|
0aae618a29 | ||
|
|
2bc9796c0c | ||
|
|
37aff29443 | ||
|
|
bc14fcb0dd | ||
|
|
3f858de1f3 | ||
|
|
a624ffc461 | ||
|
|
a0c90d4d8d | ||
|
|
b4c8112322 | ||
|
|
b59fdc8db8 | ||
|
|
f6f458a660 | ||
|
|
9ad82247db | ||
|
|
ef09a3ef12 | ||
|
|
fa7f04c55b | ||
|
|
5252f67faf | ||
|
|
01ffe4886e | ||
|
|
5bce745838 | ||
|
|
6b0e1ef9ac | ||
|
|
4ff0343916 | ||
|
|
ec7720e3d0 | ||
|
|
37a8e5b0d9 | ||
|
|
8bfb223dac | ||
|
|
adf18f00af | ||
|
|
6d72bb6e24 | ||
|
|
07669bc806 | ||
|
|
a586c526a0 | ||
|
|
5e66b9bfc8 | ||
|
|
c587b11904 | ||
|
|
550353f9f9 | ||
|
|
ce00d41141 | ||
|
|
973582a52e | ||
|
|
a36c8f7644 | ||
|
|
b7561c5b17 | ||
|
|
b5cf46ddd0 | ||
|
|
e295c1a830 | ||
|
|
5003df7cf8 | ||
|
|
35e1af29cd | ||
|
|
357353e23c | ||
|
|
fbd42db377 | ||
|
|
80c1b50254 | ||
|
|
3e3aad1569 | ||
|
|
3a18ab2970 | ||
|
|
0d8c150c21 | ||
|
|
55a6c41216 | ||
|
|
a4a8bf644d | ||
|
|
f4cc72a44b | ||
|
|
114bd8d2d0 | ||
|
|
d04838b846 | ||
|
|
063c8d54ef | ||
|
|
f815d850e6 | ||
|
|
b5eb2a004f | ||
|
|
fa51662273 | ||
|
|
ab484ffdc4 | ||
|
|
3efe3cc698 | ||
|
|
9f242800e8 | ||
|
|
c170147162 | ||
|
|
9eaa4a4afa | ||
|
|
14e546b4c3 | ||
|
|
4ae002e1bb | ||
|
|
8cc725f3e8 | ||
|
|
718d2d07fa | ||
|
|
f5dea882d0 | ||
|
|
98ecb301b4 | ||
|
|
54dcd2736a | ||
|
|
d2e5001e7e | ||
|
|
d6572b2c7e | ||
|
|
3e5b6dd4fb | ||
|
|
ccfcbd830d | ||
|
|
895a22fcfe | ||
|
|
ff41a13170 | ||
|
|
c9744cb5f0 | ||
|
|
d1a60aa1bb | ||
|
|
d1b581a3f5 | ||
|
|
3d862ec61b | ||
|
|
198043b865 | ||
|
|
2dbd8fc83a | ||
|
|
fd53a3e516 | ||
|
|
1a40aa3fae | ||
|
|
268cfebd13 | ||
|
|
f4572f9f94 | ||
|
|
90d3c140fe | ||
|
|
f2ca2e48aa | ||
|
|
4f1ef65a9c | ||
|
|
1b2cc439f2 | ||
|
|
33bca2e82a | ||
|
|
6d9b12eff6 | ||
|
|
d6a65ec5db | ||
|
|
825f3afe3f | ||
|
|
229d280724 | ||
|
|
7f9c5c0b8c | ||
|
|
ed407de99c | ||
|
|
34d8a26c0a | ||
|
|
7ef398bd54 | ||
|
|
60d58bf93e | ||
|
|
47aa717a4d | ||
|
|
ea5ae36654 | ||
|
|
7c58f1d493 | ||
|
|
ba9c282d96 | ||
|
|
b704c9a941 | ||
|
|
0e2e1222a9 | ||
|
|
b1ecfd8304 | ||
|
|
327115b003 | ||
|
|
4fff19a738 | ||
|
|
624b9834b0 | ||
|
|
c0b3ea28ea | ||
|
|
6ec82116b7 | ||
|
|
1fc47ab475 | ||
|
|
3286bf6164 | ||
|
|
f72d36c67b | ||
|
|
d03a5cfc2c | ||
|
|
77ccb26512 | ||
|
|
f078e19ce1 | ||
|
|
0d8103777c | ||
|
|
1640f99668 | ||
|
|
83412902fb | ||
|
|
742898c624 | ||
|
|
9e8009299c | ||
|
|
bed66f2c7b | ||
|
|
ce4e8692a7 | ||
|
|
67cb180ba8 | ||
|
|
09baaf2c20 | ||
|
|
1102d933c8 | ||
|
|
b3f7af41ef | ||
|
|
b70e1ef492 | ||
|
|
3532b4483e | ||
|
|
ac43a1d5c9 | ||
|
|
325ca10c70 | ||
|
|
8cc7fe3e33 | ||
|
|
39f09a4142 | ||
|
|
9e3fd79b89 | ||
|
|
11b64cae3a | ||
|
|
0f14c11e3d | ||
|
|
e1c9705ff2 | ||
|
|
8c45959ea6 | ||
|
|
655e03f815 | ||
|
|
47f912e998 | ||
|
|
6c19c1ccbd | ||
|
|
ef458b41fd | ||
|
|
f9a216ed2f | ||
|
|
063e44a8b8 | ||
|
|
065c09b9d6 | ||
|
|
e8eda19c02 | ||
|
|
66cde22297 | ||
|
|
f89d71d5c1 | ||
|
|
41e6c76d56 | ||
|
|
33cb6ef8eb | ||
|
|
2e05ebb696 | ||
|
|
f62162317e | ||
|
|
442c4218d4 | ||
|
|
42e4e0223d | ||
|
|
3fa6e72604 | ||
|
|
10dd024bcf | ||
|
|
8c245946a6 | ||
|
|
c8b32ba265 | ||
|
|
ca557d7000 | ||
|
|
23e60d386c | ||
|
|
cc15014b9c | ||
|
|
d4d392819e | ||
|
|
1bf5a67c87 | ||
|
|
53df9b4e4d | ||
|
|
c6d332d625 | ||
|
|
3b08454352 | ||
|
|
6240ca54ed | ||
|
|
6c4d5951ae | ||
|
|
1652647f17 | ||
|
|
7c57454c1b | ||
|
|
78f6ca6fa8 | ||
|
|
d44a5f8257 | ||
|
|
f76a8627cc | ||
|
|
84bee958ce | ||
|
|
d4d809dd45 | ||
|
|
5b7029ca76 | ||
|
|
9855f565ab | ||
|
|
4d0304b804 | ||
|
|
ccd6fbef29 | ||
|
|
de61d407f6 | ||
|
|
106bba6679 | ||
|
|
303e0dd036 | ||
|
|
fff1e5d7ff | ||
|
|
33823e1c81 | ||
|
|
321347fa6b | ||
|
|
fa355d48bc | ||
|
|
c413b14df3 | ||
|
|
fc69d98d22 | ||
|
|
43dd9b5250 | ||
|
|
62bac0c6b9 | ||
|
|
92ffafb769 | ||
|
|
8c9cec989a | ||
|
|
b727e1d152 | ||
|
|
c69b810619 | ||
|
|
295743e448 | ||
|
|
297f1612fe | ||
|
|
49c5b3dff5 | ||
|
|
4629705d17 | ||
|
|
2dec6372e0 | ||
|
|
37fe1c97ea | ||
|
|
f3b02fbc98 | ||
|
|
8254c5b0fd | ||
|
|
b6f2df28b3 | ||
|
|
f7d30de263 | ||
|
|
e2c43fc437 | ||
|
|
22ff69e89a | ||
|
|
993ddae3bd | ||
|
|
e5813e6430 | ||
|
|
cda4a9b498 | ||
|
|
3e4ad00c20 | ||
|
|
86fc8a87fd | ||
|
|
fed45e98b1 | ||
|
|
3edd84f137 | ||
|
|
b79e3e7516 | ||
|
|
b05332fd04 | ||
|
|
15cde5284b | ||
|
|
b5ae4f9fbc | ||
|
|
8904bc1eab | ||
|
|
e0e49b5542 | ||
|
|
1e7e5b6d9f | ||
|
|
e5fb933b98 | ||
|
|
c343756e30 | ||
|
|
ce4c9cd87c | ||
|
|
748a602327 | ||
|
|
8df651bb82 | ||
|
|
b4fc3528de | ||
|
|
fb638a9c08 | ||
|
|
8bc3558cb5 | ||
|
|
28333e3f75 | ||
|
|
c5cfd44a21 | ||
|
|
072057beff | ||
|
|
e35b09b19d | ||
|
|
f52dbd116e | ||
|
|
031ff11bd8 | ||
|
|
976f813ad2 | ||
|
|
2f8a5481f7 | ||
|
|
750aa2ac67 | ||
|
|
41e488d2e7 | ||
|
|
a01c5756a1 | ||
|
|
0dc3ad50d3 | ||
|
|
a429b634f5 | ||
|
|
75bb86b573 | ||
|
|
a57d719ed5 | ||
|
|
cf98c29553 | ||
|
|
e27ff5502a | ||
|
|
b396f37221 | ||
|
|
a6f533afc6 | ||
|
|
02decce31e | ||
|
|
ecab6b1ad2 | ||
|
|
6d7d595354 | ||
|
|
17fca4e1ea | ||
|
|
58b18c3782 | ||
|
|
7ab466a17b | ||
|
|
56c939d0e5 | ||
|
|
73a3ba7f48 | ||
|
|
c4b94ace10 | ||
|
|
94efd15f91 | ||
|
|
47b38d5416 | ||
|
|
1f9aa4c7a7 | ||
|
|
15eb4f87d8 | ||
|
|
b42f010e9d | ||
|
|
63f3b90f1c | ||
|
|
32d06df501 | ||
|
|
175c396053 | ||
|
|
de5dd23b36 | ||
|
|
16036b1b56 | ||
|
|
64af0f5202 | ||
|
|
465c389c07 | ||
|
|
9ec3c9f158 | ||
|
|
3a18e5799a | ||
|
|
051c22ebdb | ||
|
|
5cc8f751f2 | ||
|
|
f8da676839 | ||
|
|
a722071115 | ||
|
|
45e8ce93b5 | ||
|
|
ae41b5fc5c | ||
|
|
d0e3cba92e | ||
|
|
9606274a28 | ||
|
|
4dd3f0cba3 | ||
|
|
752b2d7066 | ||
|
|
cbcfeac0de | ||
|
|
4fd6030779 | ||
|
|
41f2b72a9f | ||
|
|
222b82f3f5 | ||
|
|
b3cf1a5b01 | ||
|
|
4bc1e22058 | ||
|
|
7251099996 | ||
|
|
cbf4bbcf6a | ||
|
|
1ddf8f0236 | ||
|
|
5e2f206d95 | ||
|
|
cdd7e6cb12 | ||
|
|
6eb85ff640 | ||
|
|
6c62a8462d | ||
|
|
fa98339687 | ||
|
|
e9b485ac5b | ||
|
|
ad63509588 | ||
|
|
212836c466 | ||
|
|
4601501939 | ||
|
|
d109106dcb | ||
|
|
6896df67d4 | ||
|
|
6b0f7ea6ef | ||
|
|
cdec1e1925 | ||
|
|
d03571fb2a | ||
|
|
214744aa69 | ||
|
|
f6bf20f7e3 | ||
|
|
c5d6bfa506 | ||
|
|
67456c0cb2 | ||
|
|
da78caa4f2 | ||
|
|
40c736ea46 | ||
|
|
b5f9b7601e | ||
|
|
d70ce66cb4 | ||
|
|
f0b8774d35 | ||
|
|
62dbe304ca | ||
|
|
d7034ab3f4 | ||
|
|
76b03fdda9 | ||
|
|
9a81ebe8df | ||
|
|
79cc49c512 | ||
|
|
e00c98ed11 | ||
|
|
928e2994a2 | ||
|
|
43cd479aa7 | ||
|
|
4a59b32911 | ||
|
|
7677fac783 | ||
|
|
8fffaa2eb0 | ||
|
|
978f35967e | ||
|
|
6bed31fe28 | ||
|
|
49f24e42f1 | ||
|
|
c70cd85a04 | ||
|
|
2b8f320ee1 | ||
|
|
e16ec680b2 | ||
|
|
afbe5e2e03 | ||
|
|
e36b185505 | ||
|
|
5f31cd9ab0 | ||
|
|
a7d7a65a97 | ||
|
|
ae93554f58 | ||
|
|
23945022e0 | ||
|
|
605dcda98a | ||
|
|
0165469ad0 | ||
|
|
949618ca3c | ||
|
|
0d1f415172 | ||
|
|
362a872b00 | ||
|
|
b3d9f6b64c | ||
|
|
7f4854c47d | ||
|
|
60af8c0f14 | ||
|
|
8673a36de4 | ||
|
|
82c6425c77 | ||
|
|
0fe64b28e0 | ||
|
|
60446de766 | ||
|
|
36b7c4191c | ||
|
|
8dcfcc06a8 | ||
|
|
34dd31fbbd | ||
|
|
704145a3d9 | ||
|
|
4129033c3f | ||
|
|
a20f4097e4 | ||
|
|
9dbf4e85ad | ||
|
|
265ba6d2a6 | ||
|
|
85d508a76f | ||
|
|
6f6dccf02e | ||
|
|
084fbb6f11 | ||
|
|
9c3663c5d9 | ||
|
|
0b08f525b2 | ||
|
|
adcfb3dcf4 | ||
|
|
1f8bb96cc4 | ||
|
|
35e399c29d | ||
|
|
e675b4bd21 | ||
|
|
9c843a9dc5 | ||
|
|
0caf181bca | ||
|
|
58a64c05a9 | ||
|
|
414c7201eb | ||
|
|
711b0ea043 | ||
|
|
cc970f60f2 | ||
|
|
c12362a34b | ||
|
|
7d91810871 | ||
|
|
7d847eaf0a | ||
|
|
78258ccc6f | ||
|
|
682b1458ee | ||
|
|
42154a24d7 | ||
|
|
fa08675fc5 | ||
|
|
a90792d17a | ||
|
|
772b3b010e | ||
|
|
167014fcef | ||
|
|
ce012da241 | ||
|
|
2ed9e994a4 | ||
|
|
3c151f8422 | ||
|
|
8a02c9d75a | ||
|
|
fe742acb1c | ||
|
|
72baf23452 | ||
|
|
5e9055d5d8 | ||
|
|
da8b1b669f | ||
|
|
c6949bb76a | ||
|
|
ff7136447a | ||
|
|
1bd8dce63a | ||
|
|
e94cbb1b7c | ||
|
|
646d1e2172 | ||
|
|
ff1164776b | ||
|
|
bc7de558e9 | ||
|
|
5e03372d56 | ||
|
|
c668ebc4a9 | ||
|
|
e1526c939a | ||
|
|
fd5d523460 | ||
|
|
bc01f3bf25 | ||
|
|
a2fcfadba2 | ||
|
|
c2bd0133ba | ||
|
|
cf2455770d | ||
|
|
0c4e9958fd | ||
|
|
01c96431ce | ||
|
|
1e856c9a28 | ||
|
|
4c031484af | ||
|
|
d01d7b1368 | ||
|
|
03be3e77d6 | ||
|
|
a162f20f73 | ||
|
|
a469b1d4ca | ||
|
|
c084ad2593 | ||
|
|
9960c5b7cd | ||
|
|
ec27c41840 | ||
|
|
11bc14592e | ||
|
|
c102233a54 | ||
|
|
eba917d38a | ||
|
|
037991a66b | ||
|
|
b532155b42 | ||
|
|
c2d014a74d | ||
|
|
827594cc29 | ||
|
|
fb2f88e71b | ||
|
|
27bd5054fa | ||
|
|
1ddd7023bc | ||
|
|
09c04eec27 | ||
|
|
21cf20fea8 | ||
|
|
070662c513 | ||
|
|
0368f6e31a | ||
|
|
eb9fc59e0a | ||
|
|
b0a76fea8d | ||
|
|
5a65afbb49 | ||
|
|
a22212c558 | ||
|
|
936db94023 | ||
|
|
c0aee71d7b | ||
|
|
fd13d970c1 | ||
|
|
08ecc3913c | ||
|
|
e0dbd0a7a5 | ||
|
|
489403f832 | ||
|
|
b79de46f7f | ||
|
|
f5b6bf1ced | ||
|
|
28d66894b8 | ||
|
|
8b8ab2664f | ||
|
|
bfc4f25756 | ||
|
|
7346ab4d6c | ||
|
|
dc2f99b32f | ||
|
|
951634fbef | ||
|
|
b4b753c357 | ||
|
|
ad723c9d3b | ||
|
|
4c505faa86 | ||
|
|
cc2082e214 | ||
|
|
7635e124f9 | ||
|
|
f0b07b7819 | ||
|
|
4de621c182 | ||
|
|
0c5a79f5a7 | ||
|
|
8795288e76 | ||
|
|
470cefa834 | ||
|
|
56122a6af2 | ||
|
|
d0121ba22e | ||
|
|
b2eeaaa33e | ||
|
|
04044b4f7e | ||
|
|
8391b601fc | ||
|
|
0e3da9cf85 | ||
|
|
390165b661 | ||
|
|
ea1446ea5b | ||
|
|
63d21f1ccb | ||
|
|
a1b9a36b23 | ||
|
|
20d8151895 | ||
|
|
0be47d1cb8 | ||
|
|
73ad1c62e9 | ||
|
|
dcf331fabc | ||
|
|
03343070d0 | ||
|
|
bca181c365 | ||
|
|
e1228e26fb | ||
|
|
74342c0a25 | ||
|
|
b4c180f275 | ||
|
|
b3350ac23b | ||
|
|
1c94820755 | ||
|
|
41506ffa6f | ||
|
|
f9717be116 | ||
|
|
f896ab1f84 | ||
|
|
8e00c54833 | ||
|
|
c351323605 | ||
|
|
9a1b8e8cc8 | ||
|
|
70376024fa | ||
|
|
44319974c5 | ||
|
|
dc080cca33 | ||
|
|
a529d83758 | ||
|
|
c5cf3900d4 | ||
|
|
774b74575b | ||
|
|
4165234f9c | ||
|
|
be08f05be4 | ||
|
|
bf49151640 | ||
|
|
9c887176d5 | ||
|
|
a48a24932e | ||
|
|
2111a401b2 | ||
|
|
246a628acf | ||
|
|
ef7e64a180 | ||
|
|
b954513444 | ||
|
|
57243d944d | ||
|
|
4cc4ec9c64 | ||
|
|
33818281c1 | ||
|
|
9f05c01c5d | ||
|
|
b8e69f62db | ||
|
|
2000bc3597 | ||
|
|
a0ce5e1acf | ||
|
|
b3b09a966d | ||
|
|
17a3718853 | ||
|
|
f56643a1c0 | ||
|
|
cd347b73e7 | ||
|
|
8c2d73d76e | ||
|
|
724c3d0623 | ||
|
|
2f4dc75540 | ||
|
|
02ec5be3a2 | ||
|
|
5c40b54bd2 | ||
|
|
42338942f5 | ||
|
|
437a6958e4 | ||
|
|
df90caba1b | ||
|
|
38f7c32018 | ||
|
|
fe11b359f4 | ||
|
|
f3a86a94ac | ||
|
|
d945ef1d1b | ||
|
|
21098fbeb8 | ||
|
|
36d54df766 | ||
|
|
c19302755d | ||
|
|
5a20a85dfe | ||
|
|
379349d71a | ||
|
|
6b289e9c9b | ||
|
|
979f2e91da | ||
|
|
02b1f0db62 | ||
|
|
dbb550f71a | ||
|
|
c4c1cbc7f5 | ||
|
|
030b3f718e | ||
|
|
cf05d0d4bb | ||
|
|
6f450c18a2 | ||
|
|
006201d12f | ||
|
|
3b01249c11 | ||
|
|
35c639326e | ||
|
|
f4ea366bf3 | ||
|
|
303162ed8b | ||
|
|
558f35e39b | ||
|
|
6eee1d85bc | ||
|
|
3d3d8c1036 | ||
|
|
c00d1673f5 | ||
|
|
634117c687 | ||
|
|
2cd3781f00 | ||
|
|
b4ee62714b | ||
|
|
93f34fa002 | ||
|
|
99e53443c3 | ||
|
|
9e814827df | ||
|
|
55e9ec4e1f | ||
|
|
acf01e5698 | ||
|
|
015ad7863f | ||
|
|
f57bc040d5 | ||
|
|
de43c04f68 | ||
|
|
aabd8a199b | ||
|
|
366e700c10 | ||
|
|
80f30d4c8b | ||
|
|
6796a2dcd1 | ||
|
|
9f808db912 | ||
|
|
48003b344d | ||
|
|
9e1b44491c | ||
|
|
22900fdd71 | ||
|
|
b2a604e7da | ||
|
|
73bbf5fb68 | ||
|
|
fd762415e5 | ||
|
|
9d2a4720e7 | ||
|
|
05127b1f56 | ||
|
|
f958383e3a | ||
|
|
c3dbf2b129 | ||
|
|
4b11f96141 | ||
|
|
05a1233c13 | ||
|
|
0bde2ae92d | ||
|
|
1cc8381d4d | ||
|
|
f6b81886fa | ||
|
|
155e45ea5c | ||
|
|
3594217fb0 | ||
|
|
98772abb3e | ||
|
|
9a7369f9be | ||
|
|
393cf1b373 | ||
|
|
81a5227005 | ||
|
|
c3e18d3eef | ||
|
|
5856ad2afe | ||
|
|
58bac2c1d0 | ||
|
|
2efe941daf | ||
|
|
767edee59c | ||
|
|
e0d332e3fa | ||
|
|
302a82eb68 | ||
|
|
e2f15fbb16 | ||
|
|
430f656a95 | ||
|
|
dcd6011141 | ||
|
|
531e169a1e | ||
|
|
8ff37f3f73 | ||
|
|
cf6cb8ab14 | ||
|
|
217e3d40dd | ||
|
|
c686f8e187 | ||
|
|
af8ff14e18 | ||
|
|
897f8066fc | ||
|
|
5f8c3e0e02 | ||
|
|
871f611141 | ||
|
|
b250d7ac26 | ||
|
|
6c1f95637c | ||
|
|
37ae5d611e | ||
|
|
a6be1dc4d5 | ||
|
|
a7db686116 | ||
|
|
6c06e49168 | ||
|
|
4d2214e413 | ||
|
|
478765a2df | ||
|
|
c2aa103a49 | ||
|
|
aa7f98b836 | ||
|
|
2915678e90 | ||
|
|
3af7dd863a | ||
|
|
2ac2ec7f79 | ||
|
|
7cc1e7b551 | ||
|
|
a4e5c595d3 | ||
|
|
54be213527 | ||
|
|
d160fc6572 | ||
|
|
1858055b49 | ||
|
|
81f934647f | ||
|
|
ab76804767 | ||
|
|
9759890b68 | ||
|
|
a017f5a546 | ||
|
|
6e35bb6379 | ||
|
|
811c38e6a8 | ||
|
|
e3fb8e608b | ||
|
|
0ad2df9813 | ||
|
|
d1a1010e53 | ||
|
|
a5fa75543b | ||
|
|
f9599282f9 | ||
|
|
ba449e89f2 | ||
|
|
b57a27fe2e | ||
|
|
19fb2b0583 | ||
|
|
2bd4bd58bc | ||
|
|
becd5e1a69 | ||
|
|
b46a6e5f82 | ||
|
|
374861e561 | ||
|
|
50c804c7e0 | ||
|
|
e4ce8009ad | ||
|
|
60482d7dea | ||
|
|
36b7cc180e | ||
|
|
d79a9b92ed | ||
|
|
f90fc74916 | ||
|
|
ce37e751de | ||
|
|
c6ee063189 | ||
|
|
529e053edd | ||
|
|
714015bb8e | ||
|
|
bda25e549f | ||
|
|
b5b30f9539 | ||
|
|
58a2dc831c | ||
|
|
5c0f903f43 | ||
|
|
30cd2fc487 | ||
|
|
fc2449feeb | ||
|
|
2725b30841 | ||
|
|
8274997c45 | ||
|
|
f89eca7794 | ||
|
|
2dee06a0f0 | ||
|
|
5153082de5 | ||
|
|
177f72fd01 | ||
|
|
dd2e09f7ed | ||
|
|
47f93548fc | ||
|
|
b318c4a878 | ||
|
|
9f3ff3c07a | ||
|
|
482bfb7f39 | ||
|
|
e26e1f7f38 | ||
|
|
11f0aa4e2e | ||
|
|
4915ef3276 | ||
|
|
60440f262b | ||
|
|
2992a1a02e | ||
|
|
84b722ab23 | ||
|
|
b2c532e7aa | ||
|
|
cdc15ee101 | ||
|
|
56e545de3a | ||
|
|
51e656ae8e | ||
|
|
1c3d9be1b2 | ||
|
|
3e3c2450c8 | ||
|
|
dbb9e1c554 | ||
|
|
1fd26107b9 | ||
|
|
8054460c1a | ||
|
|
01ea6c00a9 | ||
|
|
4361cb5ee3 | ||
|
|
fa55db7e1e | ||
|
|
94a69d74c1 | ||
|
|
581b95db0d | ||
|
|
18355621b9 | ||
|
|
bf73e14937 | ||
|
|
04b230cc8c | ||
|
|
1ee4dd9f58 | ||
|
|
6b5f836e22 | ||
|
|
f12323deeb | ||
|
|
97aa809072 | ||
|
|
d9ca21913b | ||
|
|
11c5419871 | ||
|
|
b4438d7a9f | ||
|
|
486efee545 | ||
|
|
8a28f57ac0 | ||
|
|
fba373469d | ||
|
|
e997986102 | ||
|
|
979e3af778 | ||
|
|
33c6f06773 | ||
|
|
9da3312a22 | ||
|
|
3d4923b78d | ||
|
|
9c6ae6cd06 | ||
|
|
dfbc147ffb | ||
|
|
127803b3b5 | ||
|
|
1f1f94b2cb | ||
|
|
3412d57f2c | ||
|
|
14d8bc0f5d | ||
|
|
26b0589e0b | ||
|
|
8b4c73e01a | ||
|
|
1246f2f582 | ||
|
|
90be17900d | ||
|
|
51d637659c | ||
|
|
c217eaefc0 | ||
|
|
d3245dcb86 | ||
|
|
589d5962b9 | ||
|
|
2e1d34e43c | ||
|
|
0e9151266a | ||
|
|
0dfba56443 | ||
|
|
f49427e1dc | ||
|
|
9160d6d912 | ||
|
|
5abe552d56 | ||
|
|
d3ff599ab4 | ||
|
|
3bbd61aedf | ||
|
|
ea77fcce91 | ||
|
|
37d92becca | ||
|
|
1f0b06b165 | ||
|
|
845a9995aa | ||
|
|
ad87ab956b | ||
|
|
aef7a82007 | ||
|
|
a3d7745954 | ||
|
|
d4dc518774 | ||
|
|
9203b3d9c3 | ||
|
|
925bdf2a81 | ||
|
|
0db0149b01 | ||
|
|
0dd832526c | ||
|
|
d393a227ea | ||
|
|
a9b580da1e | ||
|
|
543964929b | ||
|
|
55d10017a1 | ||
|
|
87d3993226 | ||
|
|
c44d9132ad | ||
|
|
dcbca0c672 | ||
|
|
c555bd5021 | ||
|
|
dbddb55595 | ||
|
|
9aa361cb6e | ||
|
|
94a8b7dcb1 | ||
|
|
3aa1261a34 | ||
|
|
32632402d3 | ||
|
|
26a1734e7a | ||
|
|
31c23c44e7 | ||
|
|
6c65842a9c | ||
|
|
c5370d1f1c | ||
|
|
2c72213108 | ||
|
|
12d1cf2ea6 | ||
|
|
f7270a349e | ||
|
|
e61783dfec | ||
|
|
88c9054a91 | ||
|
|
e8b1a4a65a | ||
|
|
035ff6c926 | ||
|
|
8b5fb20957 | ||
|
|
e6367fd2a7 | ||
|
|
f725860acf | ||
|
|
4319a0f4ef | ||
|
|
858de4ef40 | ||
|
|
6bcb238f9a | ||
|
|
690c99c4e3 | ||
|
|
7df2060c3c | ||
|
|
8157dedc22 | ||
|
|
8f4e63d633 | ||
|
|
531c65ed7c | ||
|
|
f3d6358dd7 | ||
|
|
9b2da02bdd | ||
|
|
999f9087b5 | ||
|
|
400dc9f42f | ||
|
|
5397727f95 | ||
|
|
437ae363ae | ||
|
|
129cff1ac2 | ||
|
|
637b8be32c | ||
|
|
3c7f0d8e00 | ||
|
|
eca4f95612 | ||
|
|
d0392b70c7 | ||
|
|
5581776313 | ||
|
|
8a7cf9ee56 | ||
|
|
1ec93236f6 | ||
|
|
55f5c5508e | ||
|
|
af71f497ec | ||
|
|
436eabcb76 | ||
|
|
4ec8c32a9d | ||
|
|
55345e6efa | ||
|
|
61fbb12099 | ||
|
|
1079844c22 | ||
|
|
931b11339c | ||
|
|
6f29561f57 | ||
|
|
172dfa62a4 | ||
|
|
cf15e7d65b | ||
|
|
0ee6079edc | ||
|
|
0478eb3be8 | ||
|
|
3fdc1d2011 | ||
|
|
3ee30f23ff | ||
|
|
50f6813de8 | ||
|
|
c8cc39515a | ||
|
|
bc4313e9e2 | ||
|
|
33dac71960 | ||
|
|
9de91e8709 | ||
|
|
84f34ebdb2 | ||
|
|
1ba2c557d5 | ||
|
|
647cf6d656 | ||
|
|
501003b108 | ||
|
|
9c94dfea97 | ||
|
|
53b644b688 | ||
|
|
1f2a6ca7eb | ||
|
|
762e433036 | ||
|
|
3d85b7a351 | ||
|
|
b40a5ec180 | ||
|
|
f92f2f729f | ||
|
|
b1d62d4d29 | ||
|
|
4067c9d369 | ||
|
|
ac3dcd9175 | ||
|
|
7fe35dfa24 | ||
|
|
9867a46106 | ||
|
|
3001fc30ba | ||
|
|
4e02c82efd | ||
|
|
573a16e143 | ||
|
|
7e97aadb5f | ||
|
|
d6a4c9df20 | ||
|
|
6f00c2db39 | ||
|
|
078feead6f | ||
|
|
396460fe7e | ||
|
|
d5cac654cb | ||
|
|
d3686d4262 | ||
|
|
18f572e0e3 | ||
|
|
15b537b0e2 | ||
|
|
58e1788072 | ||
|
|
ed7da40e60 | ||
|
|
dd5e9519a9 | ||
|
|
7dce5b6c25 | ||
|
|
1a65cd840b | ||
|
|
e6bf3c4605 | ||
|
|
39693497ea | ||
|
|
65e96f7313 | ||
|
|
88aa5cc9e9 | ||
|
|
4f55990e8f | ||
|
|
d9486f2432 | ||
|
|
e8e9937c43 | ||
|
|
4a464c14ec | ||
|
|
f4df22907a | ||
|
|
4fb9aa2c8b | ||
|
|
6c79ff49ee | ||
|
|
6d8ca0f3ae | ||
|
|
8e69781d5e | ||
|
|
627fd12893 | ||
|
|
c704e2aa70 | ||
|
|
f3eef61341 | ||
|
|
e346b24d33 | ||
|
|
95b3bea4be | ||
|
|
294cfee63f | ||
|
|
05625c3f5e | ||
|
|
7686c29a10 | ||
|
|
d42722b127 | ||
|
|
04c921c873 | ||
|
|
55a9db2218 | ||
|
|
3ac0a1d1d4 | ||
|
|
60ad3e1f7c | ||
|
|
4b004340c7 | ||
|
|
eead8b8b86 | ||
|
|
65a0b3f91b | ||
|
|
91b0b8e4f4 | ||
|
|
793c7b115e | ||
|
|
f84ac3ce1b | ||
|
|
101474d036 | ||
|
|
4e73b07b52 | ||
|
|
1b0e74ad20 | ||
|
|
7a88dbb780 | ||
|
|
5dc39561e3 | ||
|
|
4a216ddd59 | ||
|
|
d362e97d43 | ||
|
|
41b5d81f37 | ||
|
|
5529c9bb3a | ||
|
|
7a6542b37c | ||
|
|
17ac702c8f | ||
|
|
8dca4d31d0 | ||
|
|
efae540915 | ||
|
|
0d9b6294ab | ||
|
|
9b193c6f45 | ||
|
|
ebbde85b85 | ||
|
|
4fcfa56b18 | ||
|
|
de9fdccde1 | ||
|
|
40292de864 | ||
|
|
4682d427e0 | ||
|
|
5cb73e630a | ||
|
|
d0c96b4b84 | ||
|
|
2a7f0db5e8 | ||
|
|
d6f7a0ecea | ||
|
|
238d886f0e | ||
|
|
a937afa06f | ||
|
|
7ef36afaf9 | ||
|
|
68ddca7f6c | ||
|
|
c7ab89c307 | ||
|
|
1746417a78 | ||
|
|
bab14c12bd | ||
|
|
369b57ec38 | ||
|
|
b8a30971fe | ||
|
|
6949ba9d14 | ||
|
|
1d39b0fbdc | ||
|
|
3cd26fa7db | ||
|
|
13d8f74704 | ||
|
|
86b4e710fd | ||
|
|
aef2fc0d14 | ||
|
|
438e59ee47 | ||
|
|
d3e3ecd423 | ||
|
|
6edfb842e0 | ||
|
|
858238c5e9 | ||
|
|
95f5c5569e | ||
|
|
02f12795b5 | ||
|
|
f1270fcd3c | ||
|
|
b5a1030f73 | ||
|
|
b22edbb92b | ||
|
|
0df376426c | ||
|
|
a1c31a47c6 | ||
|
|
77886acce0 | ||
|
|
7c3a760cc2 | ||
|
|
8a2732fa02 | ||
|
|
f8e7a755a4 | ||
|
|
32875b8bd9 | ||
|
|
54d612f42b | ||
|
|
c7f6b42bc3 | ||
|
|
e7668275c8 | ||
|
|
11f1c1fba7 | ||
|
|
d0701a95b7 | ||
|
|
2eb5e0c3ae | ||
|
|
44431b865d | ||
|
|
c790e5cfc6 | ||
|
|
461c638897 | ||
|
|
56ca855f7f | ||
|
|
b490f27b49 | ||
|
|
b60ee2d925 | ||
|
|
19d7705cbb | ||
|
|
700e820570 | ||
|
|
a218b3deb4 | ||
|
|
9c472f8fc7 | ||
|
|
2691fd7130 | ||
|
|
e23b5abcbe | ||
|
|
8f79e405b8 | ||
|
|
576af93eb2 | ||
|
|
730b4842b3 | ||
|
|
8b0ecb3ea1 | ||
|
|
8efdc52772 | ||
|
|
7e3782433b | ||
|
|
1302f0885e | ||
|
|
504067d9c4 | ||
|
|
c25c29d7dd | ||
|
|
655c0c059a | ||
|
|
a1a182776f | ||
|
|
1de3b6dced | ||
|
|
7cf9c32013 | ||
|
|
3b7fff780b | ||
|
|
b01ddac697 | ||
|
|
6c5786a672 | ||
|
|
99b9ee37ee | ||
|
|
7a25ccfcb9 | ||
|
|
a4fab00981 | ||
|
|
b69a66ecfd | ||
|
|
2d21ba3a6e | ||
|
|
3d11713555 | ||
|
|
a4024f19c5 | ||
|
|
be34b07274 | ||
|
|
6365c70196 | ||
|
|
1a99d4d95d | ||
|
|
b71168e601 | ||
|
|
a72dfbee70 | ||
|
|
6bf3619d66 | ||
|
|
b725c3aa72 | ||
|
|
ac4d249b35 | ||
|
|
167991fae4 | ||
|
|
8e8378583a | ||
|
|
808c10446d | ||
|
|
6cc215e552 | ||
|
|
e876017275 | ||
|
|
6e5aed1317 | ||
|
|
eb0838a485 | ||
|
|
d9c55f4dcf | ||
|
|
74a06fc732 | ||
|
|
16f0963de3 | ||
|
|
2defbbc7ca | ||
|
|
b12216c0ea | ||
|
|
035a1b6368 | ||
|
|
ede9b458c6 | ||
|
|
305a5ad973 | ||
|
|
324e9e26b5 | ||
|
|
930dc26d51 | ||
|
|
fc30703cb8 | ||
|
|
03d0776bd0 | ||
|
|
abe6badce2 | ||
|
|
5ebcb70fac | ||
|
|
4e0c1d0f6c | ||
|
|
11689cc861 | ||
|
|
6277eb3a5a | ||
|
|
60b9d671d2 | ||
|
|
0765a0be35 | ||
|
|
3ae0e78066 | ||
|
|
64b418c1cc | ||
|
|
0ba66601d5 | ||
|
|
d299d66ff6 | ||
|
|
d7fc112987 | ||
|
|
b1d49b5643 | ||
|
|
c17c7e5ac5 | ||
|
|
c4a80426d3 | ||
|
|
e22aa3a217 | ||
|
|
6bf368ad8f | ||
|
|
36757e87d2 | ||
|
|
fb6e870b7d | ||
|
|
c477381edf | ||
|
|
db10b40170 | ||
|
|
3746eab179 | ||
|
|
bcb0a1970b | ||
|
|
b9e47a05fb | ||
|
|
309793c58e | ||
|
|
89c5788325 | ||
|
|
32356773dd | ||
|
|
ff177dae6e | ||
|
|
829de5ef67 | ||
|
|
e30ea1dac7 | ||
|
|
f2c7a8c92e | ||
|
|
23d1326e6b | ||
|
|
5fc90291d9 | ||
|
|
746b5f5489 | ||
|
|
413e3ee860 | ||
|
|
82c7028c74 | ||
|
|
fe643754a7 | ||
|
|
de865ef60e | ||
|
|
b81bb50ad9 | ||
|
|
e7371f7311 | ||
|
|
3babfdd954 | ||
|
|
d299a50ccd | ||
|
|
1b7850fe3f | ||
|
|
ae4c46914f | ||
|
|
22dcb001c9 | ||
|
|
6331e92d42 | ||
|
|
8de092f8a6 | ||
|
|
83f0610d9b | ||
|
|
0a67e99692 | ||
|
|
6ff39b8597 | ||
|
|
1deaa51123 | ||
|
|
79b1d9da42 | ||
|
|
cf828efbee | ||
|
|
d945c21d71 | ||
|
|
434f1797f5 | ||
|
|
f44dae1b78 | ||
|
|
9158528030 | ||
|
|
5292c4fb98 | ||
|
|
d520dad86c | ||
|
|
f6ffd5ea87 | ||
|
|
1bc32ff062 | ||
|
|
6bdc0fcef3 | ||
|
|
5b622f7082 | ||
|
|
2e9a53ea59 | ||
|
|
b54446b26f | ||
|
|
b56eaa9481 | ||
|
|
8a72b2add0 | ||
|
|
dd97c6e1d6 | ||
|
|
3e2297db9f | ||
|
|
3ebe8d2cc3 | ||
|
|
a24e0e4bdc | ||
|
|
89be919ee6 | ||
|
|
e8dae39ba2 | ||
|
|
6648498d7e | ||
|
|
f2b30c363b | ||
|
|
55fc88403e | ||
|
|
1455bf01a8 | ||
|
|
712308a465 | ||
|
|
e6bf27185f | ||
|
|
d63f6d7b90 | ||
|
|
09d594442e | ||
|
|
f36f6dc41c | ||
|
|
752c0d42e0 | ||
|
|
5d4e9c1bfc | ||
|
|
ab58229e96 | ||
|
|
2497c708b2 | ||
|
|
4d5b6a7afd | ||
|
|
f9f9c4ee13 | ||
|
|
cf6a607a51 | ||
|
|
b303f7b847 | ||
|
|
2f5f498f43 | ||
|
|
d5fb81aa57 | ||
|
|
9a96158563 | ||
|
|
6032d0d1c8 | ||
|
|
ad3e816155 | ||
|
|
f7872bb2ca | ||
|
|
ce7f5f3f6b | ||
|
|
1688884091 | ||
|
|
27ffe05aaa | ||
|
|
637db34306 | ||
|
|
a37a126105 | ||
|
|
8e90f981fb | ||
|
|
af15c56ed5 | ||
|
|
19b0f518aa | ||
|
|
a57d644c0e | ||
|
|
64c9c41349 | ||
|
|
ea21a787b3 | ||
|
|
642014a35b | ||
|
|
c1082feef4 | ||
|
|
6ca3c14b4e | ||
|
|
d1701f51d7 | ||
|
|
4c6d01a96a | ||
|
|
be5e145c16 | ||
|
|
8cd39559e4 | ||
|
|
2d5f991a7c | ||
|
|
ce9a285f05 | ||
|
|
1b53164fb5 | ||
|
|
f0e81a141f | ||
|
|
0b5017d689 | ||
|
|
2f22380d96 | ||
|
|
c20cd33fb9 | ||
|
|
7bbb5f3122 | ||
|
|
5ec4a6f71e | ||
|
|
e61a8eebaf | ||
|
|
90a6c36b17 | ||
|
|
68d20b0efc | ||
|
|
0edfc3a347 | ||
|
|
b82bcfa10c | ||
|
|
a83cc24db0 | ||
|
|
327a7ce4bb | ||
|
|
f47abe6a91 | ||
|
|
46871e98c1 | ||
|
|
391ed39211 | ||
|
|
027ae716a4 | ||
|
|
39bc9878d6 | ||
|
|
cf7e9e1c8e | ||
|
|
624ed939c8 | ||
|
|
f8e6b0e982 | ||
|
|
bf9981054d | ||
|
|
80237630ab | ||
|
|
2e4e61c155 | ||
|
|
e9810d5ed8 | ||
|
|
f083059e0b | ||
|
|
3d7b0d2a69 | ||
|
|
4658f05532 | ||
|
|
70104e7e82 | ||
|
|
dc97305494 | ||
|
|
d8b0121938 | ||
|
|
db73e2f56e | ||
|
|
1e36e9ba48 | ||
|
|
b723b83b0e | ||
|
|
6afb0526e8 | ||
|
|
c4e44c784f | ||
|
|
feea4f1ac8 | ||
|
|
03e6615423 | ||
|
|
b1f74fcd6d | ||
|
|
dfc95b40b3 | ||
|
|
ab4fa44f5c | ||
|
|
fcd5dfb861 | ||
|
|
c1bdea35e8 | ||
|
|
d36acc417c | ||
|
|
81c1958992 | ||
|
|
8c6db4c514 | ||
|
|
ae9b55e493 | ||
|
|
9c0eff49f0 | ||
|
|
d0043a65e5 | ||
|
|
41aa25a4b2 | ||
|
|
ec0e42d9db | ||
|
|
54e723b541 | ||
|
|
eacd15bee8 | ||
|
|
e5ffec18a2 | ||
|
|
4acb69d02f | ||
|
|
e969c61d0a | ||
|
|
4707807c93 | ||
|
|
e9bba419b2 | ||
|
|
27d779b3ca | ||
|
|
3e5b4bb3be | ||
|
|
8ade314b27 | ||
|
|
337d4d8acd | ||
|
|
578e2b1479 | ||
|
|
4c2ecfd31a | ||
|
|
fcea4750f8 | ||
|
|
a9535f6f80 | ||
|
|
2db2923e94 | ||
|
|
919989f1b7 | ||
|
|
ab947189a2 | ||
|
|
5b484e3ebd | ||
|
|
5073104f1d | ||
|
|
f7e990b253 | ||
|
|
6cf257179b | ||
|
|
892bbf18dc | ||
|
|
c0c4e2bcee | ||
|
|
aead81e796 | ||
|
|
577d11317a | ||
|
|
77b2ee89a4 | ||
|
|
6345b0dd2a | ||
|
|
6e4de53eb3 | ||
|
|
b17fcce49f | ||
|
|
931251a49f | ||
|
|
b9f39111bc | ||
|
|
22d59dafdb | ||
|
|
5aba3664bc | ||
|
|
e2b8257174 | ||
|
|
d725bc6326 | ||
|
|
29c1ca4a49 | ||
|
|
b112f5dc24 | ||
|
|
a741bfe633 | ||
|
|
98b679867a | ||
|
|
f239fd86dc | ||
|
|
edb02e1f6a | ||
|
|
37bd5b5e07 | ||
|
|
3a0fb0d53b | ||
|
|
0ad336263b | ||
|
|
2a5802c253 | ||
|
|
a29154dd38 | ||
|
|
fd9577dcf1 | ||
|
|
59e08285d0 | ||
|
|
4fc2a16628 | ||
|
|
6fcc266125 | ||
|
|
6718137086 | ||
|
|
8df9f475d9 | ||
|
|
1924bf45bc | ||
|
|
77df630a6d | ||
|
|
2a8ef187e6 | ||
|
|
654ad3cc6f | ||
|
|
5d50c8a5d4 | ||
|
|
67a33423ba | ||
|
|
a013ca3275 | ||
|
|
5b3389fced | ||
|
|
d569e23a0e | ||
|
|
e440e023d0 | ||
|
|
d0ad287eac | ||
|
|
241a264b9e | ||
|
|
ea47301e14 | ||
|
|
12767f62f3 | ||
|
|
39c394b556 | ||
|
|
cb4bd7aace | ||
|
|
7c9d88cdbf | ||
|
|
8d33f507ca | ||
|
|
7a2562549a | ||
|
|
0178ace830 | ||
|
|
0b90c1ea0d | ||
|
|
a7e129b665 | ||
|
|
6a8d38d8a6 | ||
|
|
08f0198ea6 | ||
|
|
611178a123 | ||
|
|
24890f878b | ||
|
|
a659ec31c4 | ||
|
|
d988c096d6 | ||
|
|
7dd4c6e6ab | ||
|
|
257f37ef0e | ||
|
|
8484823c64 | ||
|
|
c051f20958 | ||
|
|
072472a143 | ||
|
|
fc15ef31a2 | ||
|
|
7c930c6030 | ||
|
|
1067cd8309 | ||
|
|
b624bbce53 | ||
|
|
87789c74a7 | ||
|
|
a9b4044f8b | ||
|
|
13d4bb7c7f | ||
|
|
1891e8861b | ||
|
|
d4bceb1c16 | ||
|
|
98ba616c02 | ||
|
|
9e9a5b0859 | ||
|
|
240e0d8dd5 | ||
|
|
2ef010278f | ||
|
|
f2aa29a0f8 | ||
|
|
58b9b0fd75 | ||
|
|
5e4002b058 | ||
|
|
ceb6544367 | ||
|
|
3be6348194 | ||
|
|
9053b8a372 | ||
|
|
f385070640 | ||
|
|
33a484071c | ||
|
|
1ba86f2554 | ||
|
|
37c8f95489 | ||
|
|
f3ba5c47b0 | ||
|
|
263a90c244 | ||
|
|
6c67fcb32c | ||
|
|
67413cf0e6 | ||
|
|
b66e297b5d | ||
|
|
0af135a8e4 | ||
|
|
99090f302e | ||
|
|
fce45d9656 | ||
|
|
622d2e81a2 | ||
|
|
2d5366bf44 | ||
|
|
6701054fd5 | ||
|
|
7f6d9e36d3 | ||
|
|
7d46677fa3 | ||
|
|
e67b1e7c07 | ||
|
|
1ebdecaa10 | ||
|
|
11c099da2f | ||
|
|
72c01d39eb | ||
|
|
4f118af87c | ||
|
|
ee9d576401 | ||
|
|
3ca51cb548 | ||
|
|
4f817e93fa | ||
|
|
b2dbaab771 | ||
|
|
beed3fdc43 | ||
|
|
08b6469aad | ||
|
|
182a0fd182 | ||
|
|
6e4e6cee4e | ||
|
|
7b4d175678 | ||
|
|
ad32918fc3 | ||
|
|
e00024ea65 | ||
|
|
c997bbea4c | ||
|
|
54fa1af24b | ||
|
|
bf49c82580 | ||
|
|
3314b3034a | ||
|
|
c8df13455b | ||
|
|
c21d3280c7 | ||
|
|
c43b757f1b | ||
|
|
b950958bce | ||
|
|
d5e65fbb5d | ||
|
|
b845dc8c46 | ||
|
|
311fc34378 | ||
|
|
2bc2763f3f | ||
|
|
8b9ad4a28b | ||
|
|
cb9256dec0 | ||
|
|
82d809da21 | ||
|
|
514c712628 | ||
|
|
553a5b641a | ||
|
|
6cb046d65c | ||
|
|
53cc2c2572 | ||
|
|
9fdd3d7742 | ||
|
|
f85cdebec7 | ||
|
|
e7451c2430 | ||
|
|
3c984195af | ||
|
|
62400452cd | ||
|
|
949fdfb408 | ||
|
|
8a4ecd0263 | ||
|
|
69fe734e30 | ||
|
|
4ba0d7e6b9 | ||
|
|
90e40e13ff | ||
|
|
b8d7c67495 | ||
|
|
fafdb3b641 | ||
|
|
333e2c6704 | ||
|
|
e2b56f6401 | ||
|
|
dbef8075be | ||
|
|
0f48e53445 | ||
|
|
70bc90504c | ||
|
|
6b503bfa49 | ||
|
|
d168d46c60 | ||
|
|
04274bf260 | ||
|
|
e759a50d89 | ||
|
|
3aaf554bf9 | ||
|
|
122c76b542 | ||
|
|
c4d7548bce | ||
|
|
984ba72b94 | ||
|
|
fa613f1a44 | ||
|
|
df357ca0c0 | ||
|
|
344a461f53 | ||
|
|
7120bbd488 | ||
|
|
3db0964f2c | ||
|
|
98935e4a59 | ||
|
|
7364d9a517 | ||
|
|
16020e6637 | ||
|
|
68289b8111 | ||
|
|
4a077b2697 | ||
|
|
472fea4463 | ||
|
|
f4119ab3b8 | ||
|
|
c36a077bc2 | ||
|
|
ae6c6f7b5b | ||
|
|
e6f7f2054a | ||
|
|
823aa332c2 | ||
|
|
dd1166887c | ||
|
|
ec9c4f9a62 | ||
|
|
e68f93be6e | ||
|
|
0a9efad6a1 | ||
|
|
7e19caa2f6 | ||
|
|
240cd9069a | ||
|
|
35ac89616d | ||
|
|
bfb5ebd81b | ||
|
|
456bcbaf66 | ||
|
|
01cd21d25a | ||
|
|
ad0d2528e7 | ||
|
|
221860adbd | ||
|
|
4a20069a60 | ||
|
|
ce39a7ffbb | ||
|
|
7c4b52a2a0 | ||
|
|
ad067e812a | ||
|
|
af1b5af4b8 | ||
|
|
27ff5a11b7 | ||
|
|
cc2e426ea6 | ||
|
|
d38b614659 | ||
|
|
1e024c9b2b | ||
|
|
b21756de26 | ||
|
|
b4ac8ba647 | ||
|
|
694640d8a1 | ||
|
|
886bdfe486 | ||
|
|
9c0f6cfc0f | ||
|
|
75ebd56616 | ||
|
|
cddf553e35 | ||
|
|
18550385b7 | ||
|
|
ad9238ab63 | ||
|
|
67a025c846 | ||
|
|
aeb84b3d8f | ||
|
|
8c6bd1a4ba | ||
|
|
86aea12398 | ||
|
|
4e487cf0ba | ||
|
|
64188cbec5 | ||
|
|
477ef3d7dc | ||
|
|
fbd9b1e20a | ||
|
|
6b35a9ced0 | ||
|
|
9014a8c93e | ||
|
|
aa0f2b8d9b | ||
|
|
c01883b723 | ||
|
|
1818359763 | ||
|
|
e54a6373fa | ||
|
|
e440fb521b | ||
|
|
ea6c249ec6 | ||
|
|
7d89e1d2e8 | ||
|
|
a5aa750913 | ||
|
|
4f0a3920c4 | ||
|
|
2867484aa8 | ||
|
|
d270d0a032 | ||
|
|
8eee0f7486 | ||
|
|
6d3b875820 | ||
|
|
df950c593d | ||
|
|
f1767d661d | ||
|
|
48263ab49c | ||
|
|
5c3a07445b | ||
|
|
81f9cf79d3 | ||
|
|
786cbe44c5 | ||
|
|
324feac0f7 | ||
|
|
8cf235ccb6 | ||
|
|
1b75b22851 | ||
|
|
bc2905c987 | ||
|
|
dce36cdf51 | ||
|
|
40cbe52c00 | ||
|
|
812138fda5 | ||
|
|
2d35708fb4 | ||
|
|
e72da87514 | ||
|
|
e22b75ef96 | ||
|
|
cebd997fcc | ||
|
|
727282110b | ||
|
|
0f05a82e89 | ||
|
|
e95f02eabc | ||
|
|
607d0f9d72 | ||
|
|
a8031dec6b | ||
|
|
1fb4eb0355 | ||
|
|
7c264fa1e4 | ||
|
|
ea97f8f3bc | ||
|
|
021bcba05a | ||
|
|
13bb38c6f2 | ||
|
|
a9f961ed94 | ||
|
|
29f3c67c9d | ||
|
|
4d9edf7c46 | ||
|
|
a190e95559 | ||
|
|
2afee109dc | ||
|
|
481cc6eb71 | ||
|
|
62ce372a20 | ||
|
|
e09942d2b0 | ||
|
|
f102f498b7 | ||
|
|
cea20154ec | ||
|
|
9ffcfab62a | ||
|
|
e769dfd316 | ||
|
|
9d65675a90 | ||
|
|
de31d16528 | ||
|
|
983b13dd7d | ||
|
|
d5f9e5470b | ||
|
|
64c925610c | ||
|
|
37697eb39f | ||
|
|
a363ff43ea | ||
|
|
d46976b794 | ||
|
|
7468357c9c | ||
|
|
cd564d6005 | ||
|
|
25922ac246 | ||
|
|
550811a7a3 | ||
|
|
eb2979320f | ||
|
|
af8f665017 | ||
|
|
54e7ab71ef | ||
|
|
456183937a | ||
|
|
bb530ad098 | ||
|
|
8bf2a17603 | ||
|
|
5da189deeb | ||
|
|
c2a77fbf82 | ||
|
|
8f1fc01bbb | ||
|
|
153fb6198e | ||
|
|
30ab80f6f0 | ||
|
|
c715a1bc0c | ||
|
|
e40d26b83e | ||
|
|
e033ce0aac | ||
|
|
5deac04d38 | ||
|
|
ff3a8f4301 | ||
|
|
6ce6b2d10a | ||
|
|
8ecfcd2cd7 | ||
|
|
d2cede4a21 | ||
|
|
ef41816422 | ||
|
|
e0d5d1bf1d | ||
|
|
1729244938 | ||
|
|
2338a23c4b | ||
|
|
1184aad1e0 | ||
|
|
76b61ff3a2 | ||
|
|
8c016ff854 | ||
|
|
4e50f9e402 | ||
|
|
0811eb3e00 | ||
|
|
ea420f4b51 | ||
|
|
d03f41d059 | ||
|
|
fa9c441b5f | ||
|
|
ed6334750e | ||
|
|
1c8ec725d8 | ||
|
|
033c0d22d8 | ||
|
|
82f9f84d26 | ||
|
|
389bbfd24a | ||
|
|
c2f194ffb7 | ||
|
|
b21da5f269 | ||
|
|
14d3b003c2 | ||
|
|
249e499a0a | ||
|
|
bf55d58d68 | ||
|
|
3c535cdf7e | ||
|
|
71d4a86fc6 | ||
|
|
717d397a91 | ||
|
|
619e0b9944 | ||
|
|
5735b9d91d | ||
|
|
ea16dbab0e | ||
|
|
8b72ff9941 | ||
|
|
287c469e2c | ||
|
|
82509b069a | ||
|
|
5c8a0f3d89 | ||
|
|
a3608fe817 | ||
|
|
25daebd3be | ||
|
|
9fdc438267 | ||
|
|
68c3312f64 | ||
|
|
41d42e65f8 | ||
|
|
bac1a63114 | ||
|
|
c36e583228 | ||
|
|
813763865b | ||
|
|
762185219c | ||
|
|
6f6226814a | ||
|
|
9ae0ea9399 | ||
|
|
8653a2edfc | ||
|
|
8a549466cd | ||
|
|
1c8e5f73db | ||
|
|
b838e26686 | ||
|
|
21ced64d21 | ||
|
|
3ebf790840 | ||
|
|
db6a9bbb3c | ||
|
|
5fc4605586 | ||
|
|
677bc8dabf | ||
|
|
75ebe8aa96 | ||
|
|
7418d3f8c1 | ||
|
|
30f654bb0c | ||
|
|
6eb0f76bbc | ||
|
|
033caa20ee | ||
|
|
a13e044f12 | ||
|
|
a82b754fa6 | ||
|
|
d041485252 | ||
|
|
0f8cbf0f1a | ||
|
|
c92d4a6db6 | ||
|
|
df88f82fdd | ||
|
|
eed8a560b8 | ||
|
|
3e73c1f53f | ||
|
|
52939bb2a4 | ||
|
|
e0f9bddd1d | ||
|
|
cfa92f367c | ||
|
|
a2ce0ed523 | ||
|
|
db50dce5f5 | ||
|
|
1cc63bb76a | ||
|
|
f6412f5a7f | ||
|
|
8c4ff46431 | ||
|
|
8f812c570a | ||
|
|
96305fbd98 | ||
|
|
35e8afb466 | ||
|
|
d22b59b497 | ||
|
|
6d3a5d3749 | ||
|
|
f4abb5da32 | ||
|
|
10d1a1a772 | ||
|
|
8561cfef61 | ||
|
|
0f603e55dd | ||
|
|
e166216457 | ||
|
|
5c2aab7065 | ||
|
|
5b39c8ebcf | ||
|
|
ba4511aa85 | ||
|
|
25302f1bb0 | ||
|
|
5caa2bea30 | ||
|
|
f4085a107e | ||
|
|
43c66a101f | ||
|
|
b4fc7adcb5 | ||
|
|
b7b215072d | ||
|
|
086db045f4 | ||
|
|
e5fd1874eb | ||
|
|
dbe689f619 | ||
|
|
1f703b75a8 | ||
|
|
745c88393e | ||
|
|
4c2a8ec87b | ||
|
|
0d51398a4a | ||
|
|
3999ed4561 | ||
|
|
2c9a7a3b7d | ||
|
|
dbfeff96d8 | ||
|
|
d082f62487 | ||
|
|
ccf66a5c65 | ||
|
|
82f75bfb1c | ||
|
|
86a049b2f9 | ||
|
|
1d63fbd398 | ||
|
|
c3589e6f09 | ||
|
|
890537822b | ||
|
|
02911638ce | ||
|
|
e98ae16b39 | ||
|
|
0e5cc0f550 | ||
|
|
edbb9ae5e0 | ||
|
|
028c98a9a8 | ||
|
|
40f38b8db7 | ||
|
|
14a8aab0f3 | ||
|
|
59d6a56343 | ||
|
|
1790d3359f | ||
|
|
17c3911626 | ||
|
|
f89fd33994 | ||
|
|
7fbcaa0e06 | ||
|
|
01cca6e0e8 | ||
|
|
2c4f502bb3 | ||
|
|
c743681818 | ||
|
|
502acd6450 | ||
|
|
23c0c27a87 | ||
|
|
6d1e50cc01 | ||
|
|
e3060bec4d | ||
|
|
954043d857 | ||
|
|
eb90fa0a9f | ||
|
|
35c9a47bcf | ||
|
|
e3c504168f | ||
|
|
9c90038205 | ||
|
|
868a6a7f5f | ||
|
|
7b7db6b3e6 | ||
|
|
2c0390ec4d | ||
|
|
a903171be5 | ||
|
|
f5243ce8bb | ||
|
|
4bd0a05013 | ||
|
|
f75ea14839 | ||
|
|
a83444e55d | ||
|
|
93e7489bb5 | ||
|
|
658ef97c4b | ||
|
|
e90a397a4e | ||
|
|
6090f311bc | ||
|
|
f5dec98883 | ||
|
|
e02f987471 | ||
|
|
c988788b19 | ||
|
|
ec455d1e58 | ||
|
|
c58d5c95fe | ||
|
|
f05fd6bc13 | ||
|
|
45a8cad1ea | ||
|
|
731d75a627 | ||
|
|
1a31f72da5 | ||
|
|
bdda9b1e8e | ||
|
|
509a448d70 | ||
|
|
759cc5e440 | ||
|
|
a1c4adf32c | ||
|
|
4f0c11d079 | ||
|
|
09c48d672c | ||
|
|
c1f245c4cd | ||
|
|
46ae1e0505 | ||
|
|
7fa2ba4978 | ||
|
|
afaad13d6a | ||
|
|
48d4105a36 | ||
|
|
c9b10d08ea | ||
|
|
e4dbdb9017 | ||
|
|
d86e5dc770 | ||
|
|
8f145041d0 | ||
|
|
db4171b684 | ||
|
|
71ce07d5e1 | ||
|
|
319452a7cd | ||
|
|
51da43f196 | ||
|
|
31da83059f | ||
|
|
3ccc0107d7 | ||
|
|
7d77e7f6df | ||
|
|
e5be6a64f7 | ||
|
|
e76643ed47 | ||
|
|
782e71d4aa | ||
|
|
940008b448 | ||
|
|
a70a1ed6cb | ||
|
|
cc3ac7ef1b | ||
|
|
6b5b0d5ec2 | ||
|
|
55875a2eb5 | ||
|
|
060e07e23d | ||
|
|
4faefe3eda | ||
|
|
cc63deefc0 | ||
|
|
781e808658 | ||
|
|
4f5bfbf01b | ||
|
|
b4c6e1fe4a | ||
|
|
3732d4b2ee | ||
|
|
eaa7fcebed | ||
|
|
5ad3b29c33 | ||
|
|
d0a5171442 | ||
|
|
e289003fb8 | ||
|
|
83cec5b339 | ||
|
|
193b636c0e | ||
|
|
4d9e0895a8 | ||
|
|
0e68e74b8a | ||
|
|
6e5f333bd8 | ||
|
|
21168a4fc9 | ||
|
|
b2d88de507 | ||
|
|
e4035c390a | ||
|
|
496e990ae1 | ||
|
|
ed0125f968 | ||
|
|
c9ee2ada73 | ||
|
|
d6cfea8433 | ||
|
|
26ae1bd52a | ||
|
|
960afe2435 | ||
|
|
25ecae2120 | ||
|
|
d8a828e3aa | ||
|
|
981ddedaf4 | ||
|
|
98094bb7a7 | ||
|
|
671faaa7b3 | ||
|
|
73e9629250 | ||
|
|
db24383501 | ||
|
|
835f59edf2 | ||
|
|
cb2b058785 | ||
|
|
95e67bf291 | ||
|
|
c769ae74e6 | ||
|
|
23949600dc | ||
|
|
89a9fc2730 | ||
|
|
36f7875c88 | ||
|
|
03db17d8e5 | ||
|
|
5dfa38eb54 | ||
|
|
da96efb756 | ||
|
|
ded49dc1db | ||
|
|
3a37a0e58f | ||
|
|
0d25ef8e33 | ||
|
|
ed7435c1fb | ||
|
|
5d70dc6219 | ||
|
|
23c851d08c | ||
|
|
dc55375790 | ||
|
|
1c3bf74541 | ||
|
|
c9232ffa54 | ||
|
|
8b308865f3 | ||
|
|
22ac8be103 | ||
|
|
854e17f4ec | ||
|
|
5356ad9439 | ||
|
|
1e78ddd87b | ||
|
|
0287b713a5 | ||
|
|
4dd1530b66 | ||
|
|
51b0a4949e | ||
|
|
fce5c8cc93 | ||
|
|
a1b03d0468 | ||
|
|
47210b33ac | ||
|
|
1f8fd5e87f | ||
|
|
eab2704fd6 | ||
|
|
38266f5b9e | ||
|
|
ee4b509413 | ||
|
|
ec6cdecb1e | ||
|
|
c5cb491dbd | ||
|
|
82a9d8a382 | ||
|
|
cf10929df6 | ||
|
|
e37b0bad45 | ||
|
|
eccd82846b | ||
|
|
792062e31d | ||
|
|
bed6106185 | ||
|
|
98ae45e848 | ||
|
|
2fd0cc26a4 | ||
|
|
65b20b6a8f | ||
|
|
0fdbddafe1 | ||
|
|
e584c7901f | ||
|
|
960fe3d379 | ||
|
|
f2789940d6 | ||
|
|
d1ac6ed8ed | ||
|
|
5de56c13eb | ||
|
|
2f1af211d6 | ||
|
|
3829dbd8e7 | ||
|
|
889149d756 | ||
|
|
fceb17a999 | ||
|
|
c89048818e | ||
|
|
079aeeea93 | ||
|
|
72812bd646 | ||
|
|
6a0f3a70ae | ||
|
|
ecfd5ea8de | ||
|
|
b1c3f3a2ff | ||
|
|
5dc4fefff9 | ||
|
|
921d303465 | ||
|
|
a9b00f77f3 | ||
|
|
9e6ceab9a6 | ||
|
|
befc3703c0 | ||
|
|
e752e03bda | ||
|
|
061d98d626 | ||
|
|
aee0d9a17c | ||
|
|
51a9abfc4f | ||
|
|
17f8cf7a96 | ||
|
|
eb7439b4f4 | ||
|
|
fd0d99263f | ||
|
|
6cc29db35d | ||
|
|
38c0e82b50 | ||
|
|
2ed9555c9e | ||
|
|
01c67e87ee | ||
|
|
ee76259283 | ||
|
|
d330fe6dbe | ||
|
|
8347768ea6 | ||
|
|
7448c6a188 | ||
|
|
f817944d8d | ||
|
|
bb9c2609e9 | ||
|
|
c86cfc70b8 | ||
|
|
e4a6245c62 | ||
|
|
1bf4d5f33d | ||
|
|
3d80b118ee | ||
|
|
d3dca1d025 | ||
|
|
adb6d2b5bc | ||
|
|
5b03fa97e2 | ||
|
|
a41a3ea009 | ||
|
|
d5a68bf277 | ||
|
|
186223c88a | ||
|
|
a0475da1e3 | ||
|
|
64c6e44e2c | ||
|
|
df7a8ae212 | ||
|
|
5d8526abd1 | ||
|
|
cdc809bea9 | ||
|
|
d8312b672b | ||
|
|
dda9c9d017 | ||
|
|
a17f156d78 | ||
|
|
bf13e41a4e | ||
|
|
98b7475671 | ||
|
|
6d645cd071 | ||
|
|
b2f9f030eb | ||
|
|
8343d7a5c5 | ||
|
|
64fbe3052d | ||
|
|
50b2f35528 | ||
|
|
9ce9139cee | ||
|
|
e35fff1516 | ||
|
|
abc7ed66f3 | ||
|
|
bfe24efbf3 | ||
|
|
1f7187926b | ||
|
|
26799c5fca | ||
|
|
8e51978c00 | ||
|
|
d03833910f | ||
|
|
e7ea339925 | ||
|
|
93b5f31add | ||
|
|
ecbe271601 | ||
|
|
ac2d9d4d78 | ||
|
|
ffdbb98ea2 | ||
|
|
6a96642778 | ||
|
|
046cf75d76 | ||
|
|
8d8c9814af | ||
|
|
3755db095e | ||
|
|
7d73c44519 | ||
|
|
2549be766f | ||
|
|
5aec014b52 | ||
|
|
7b0e1b4867 | ||
|
|
0d535f9592 | ||
|
|
652a49f47c | ||
|
|
c3bc6ae6ff | ||
|
|
ce4995d5f5 | ||
|
|
a1e5bb60c1 | ||
|
|
b5fee2a67b | ||
|
|
5fa3d8ab5c | ||
|
|
2075a88d7b | ||
|
|
508ef08f69 | ||
|
|
0a19f1db07 | ||
|
|
abea80b101 | ||
|
|
c2f7e659d4 | ||
|
|
0ae92d0de5 | ||
|
|
cae0f2227a | ||
|
|
a14883ada2 | ||
|
|
38fac9db46 | ||
|
|
7b13b39e62 | ||
|
|
3983509636 | ||
|
|
aff9318a5d | ||
|
|
19f086931f | ||
|
|
2a45d9fd75 | ||
|
|
6b010d3d14 | ||
|
|
644ab57825 | ||
|
|
e5a27d5b62 | ||
|
|
ea7bb2fd12 | ||
|
|
a833fc123a | ||
|
|
91805cb7f5 | ||
|
|
c68bd1d8d4 | ||
|
|
60e517e654 | ||
|
|
3c504e5fd8 | ||
|
|
2611e15fa3 | ||
|
|
5fb4d0d3c0 | ||
|
|
6b79953956 | ||
|
|
c61f523a7a | ||
|
|
9a66a05e73 | ||
|
|
e852b6ad84 | ||
|
|
320dac2328 | ||
|
|
081687d993 | ||
|
|
3cd3f1d90e | ||
|
|
e3d51cd85f | ||
|
|
314b314ce5 | ||
|
|
4d91c5e173 | ||
|
|
140b1b8c9c | ||
|
|
3d5f92e46c | ||
|
|
e71380ead9 | ||
|
|
b49125f979 | ||
|
|
3cff6bebc9 | ||
|
|
2797827d17 | ||
|
|
85f574b438 | ||
|
|
125ee73764 | ||
|
|
7222735f08 | ||
|
|
3091689079 | ||
|
|
6525b68662 | ||
|
|
630c453de5 | ||
|
|
5040e0aeb3 | ||
|
|
338df73601 | ||
|
|
f5d9e3ec69 | ||
|
|
5d6de2bc56 | ||
|
|
19bfaf8986 | ||
|
|
c0d170dbf3 | ||
|
|
b6ec9bffe2 | ||
|
|
69c6439d4c | ||
|
|
f26c4bc3b6 | ||
|
|
5665eef1cc | ||
|
|
d2f1628faf | ||
|
|
5eb7c4d0c3 | ||
|
|
715556cca1 | ||
|
|
f15e812df2 | ||
|
|
a30e7b39e7 | ||
|
|
d04bf219af | ||
|
|
c8bfb011a5 | ||
|
|
cdf828fa57 | ||
|
|
ed9bc3dca2 | ||
|
|
398b65e8c1 | ||
|
|
473a1b81ba | ||
|
|
435b18115c | ||
|
|
dad98c901a | ||
|
|
efc99b4279 | ||
|
|
3859fe7425 | ||
|
|
96a832d318 | ||
|
|
b6329cccd4 | ||
|
|
38e0a05c5b | ||
|
|
57c7651d09 | ||
|
|
793bd00cef | ||
|
|
acc3077a53 | ||
|
|
2f963d58f0 | ||
|
|
0287bb2a05 | ||
|
|
e0d77819c9 | ||
|
|
74e96ffa89 | ||
|
|
ab15a24108 | ||
|
|
724428eab0 | ||
|
|
8ce8b21290 | ||
|
|
56acb34848 | ||
|
|
dbcf53b280 | ||
|
|
cca6464d54 | ||
|
|
337eb8f2eb | ||
|
|
b2e6214bbc | ||
|
|
94bcd01134 | ||
|
|
e084877a94 | ||
|
|
e2f307b16e | ||
|
|
9f060afb1b | ||
|
|
5963e9fef1 | ||
|
|
6e0f3067af | ||
|
|
1ca4f7228c | ||
|
|
838c0f548d | ||
|
|
60d2e11e13 | ||
|
|
2e35efa58d | ||
|
|
0f1346d81f | ||
|
|
f671be1223 | ||
|
|
e9bc1aeae2 | ||
|
|
33de231182 | ||
|
|
17d80c3e22 | ||
|
|
15ebc4f717 | ||
|
|
ec8c373d44 | ||
|
|
d767629fdc | ||
|
|
7cc9c8d292 | ||
|
|
8870ee68de | ||
|
|
9a90a21059 | ||
|
|
16417e32a6 | ||
|
|
113f3235b3 | ||
|
|
a5d908eba2 | ||
|
|
0767551756 | ||
|
|
bc9bf1db32 | ||
|
|
2246cc07ec | ||
|
|
d779ffdb2d | ||
|
|
1148357a23 | ||
|
|
2c6f9fc9d0 | ||
|
|
db989e2fb4 | ||
|
|
65b32b13f4 | ||
|
|
85f802fbaa | ||
|
|
81621fdd68 | ||
|
|
04241b42d6 | ||
|
|
46287e2621 | ||
|
|
8ca6ec3208 | ||
|
|
72513562e4 | ||
|
|
f5583a14c0 | ||
|
|
1fa26b4ee1 | ||
|
|
a9cb610dde | ||
|
|
54d5d89b6c | ||
|
|
7e91237296 | ||
|
|
4295f875c7 | ||
|
|
a2672f3d9e | ||
|
|
814a254c7a | ||
|
|
0152f8f03a | ||
|
|
96bfea4d75 | ||
|
|
258f9ec6ba | ||
|
|
8897280586 | ||
|
|
c1f399b48c | ||
|
|
5e919096ce | ||
|
|
1417895436 | ||
|
|
160643ac4b | ||
|
|
3502ac4e1a | ||
|
|
7ae4812ab6 | ||
|
|
7e00abcd59 | ||
|
|
0d0ab1f9d8 | ||
|
|
5069f9258c | ||
|
|
5c684b8a19 | ||
|
|
ecdccbcc08 | ||
|
|
f862cdee2a | ||
|
|
a604866737 | ||
|
|
72136751f1 | ||
|
|
a337b6487f | ||
|
|
975108aba6 | ||
|
|
cb52337710 | ||
|
|
a248036d09 | ||
|
|
e97de2c4db | ||
|
|
686ccc05df | ||
|
|
d3949197f8 | ||
|
|
decb1b1aee | ||
|
|
18ddd36061 | ||
|
|
77d0757ca1 | ||
|
|
34e716db07 | ||
|
|
85f6bd648c | ||
|
|
232c9762e7 | ||
|
|
27b691ab44 | ||
|
|
fedd09ea18 | ||
|
|
b401a1472b | ||
|
|
2340005427 | ||
|
|
d503df0a64 | ||
|
|
4e792626a5 | ||
|
|
b99dd803ae | ||
|
|
7b69018c7d | ||
|
|
12789302a2 | ||
|
|
b7a34aa4dd | ||
|
|
e024cc953e | ||
|
|
a3b53fc59f | ||
|
|
fcdab4eb39 | ||
|
|
4c82f4dafd | ||
|
|
aecd16c4c5 | ||
|
|
a5fe0b6ab8 | ||
|
|
4f63c89dc4 | ||
|
|
8e14ab7e49 | ||
|
|
5b3d774f04 | ||
|
|
dc455860f3 | ||
|
|
cb8be68a32 | ||
|
|
65afb6bae4 | ||
|
|
5b4b444109 | ||
|
|
52a2dba3b5 | ||
|
|
4bc874942b | ||
|
|
cab61ecd1f | ||
|
|
34a0361f95 | ||
|
|
c817988844 | ||
|
|
9bf95ecb3f | ||
|
|
755a3a4314 | ||
|
|
3d26f97a30 | ||
|
|
41c4bccc10 | ||
|
|
73ca80f183 | ||
|
|
cf924869b5 | ||
|
|
2763aa279f | ||
|
|
579acdc979 | ||
|
|
bbfdd572d7 | ||
|
|
4dd014341d | ||
|
|
ef2acdf042 | ||
|
|
665d2fc16d | ||
|
|
7616ac7ee0 | ||
|
|
e8730f5d81 | ||
|
|
8be86f9eb8 | ||
|
|
e5b7b9f8f5 | ||
|
|
f434a9a262 | ||
|
|
abb703418e | ||
|
|
2c5ee4977c | ||
|
|
f82eb0b612 | ||
|
|
dd69ff6808 | ||
|
|
5f9a1dcddb | ||
|
|
4b02e246ba | ||
|
|
e6e0c42a41 | ||
|
|
a011708bc5 | ||
|
|
f330f502aa | ||
|
|
a9f9424c4f | ||
|
|
9464c6c845 | ||
|
|
d65a2892e8 | ||
|
|
b4f9410a5d | ||
|
|
ca0189d858 | ||
|
|
2397bd1576 | ||
|
|
0dd4441683 | ||
|
|
6150ce58b1 | ||
|
|
79e76ffe96 | ||
|
|
fb4dea5bb5 | ||
|
|
c1bd5e4ae0 | ||
|
|
22d5c1975c | ||
|
|
5591bf144c | ||
|
|
930145378b | ||
|
|
a7e6d497cf | ||
|
|
9b87703780 | ||
|
|
4390232dfe | ||
|
|
65907c34ac | ||
|
|
dfe5aa6b06 | ||
|
|
5cf9710b38 | ||
|
|
680b284729 | ||
|
|
d7584515b3 | ||
|
|
d5637550da | ||
|
|
e49b646056 | ||
|
|
35d3af099f | ||
|
|
db4e97e0b5 | ||
|
|
642744bfa4 | ||
|
|
578d47096d | ||
|
|
9a86334d8a | ||
|
|
33c67e550a | ||
|
|
dd62d7c453 | ||
|
|
c12f35a099 | ||
|
|
a21d709f95 | ||
|
|
8e5fd998d3 | ||
|
|
fc5707fc03 | ||
|
|
17f75f41be | ||
|
|
8d49bc5206 | ||
|
|
0b0cfdba82 | ||
|
|
92633142db | ||
|
|
7b18382b01 | ||
|
|
d20c9709e1 | ||
|
|
0219faab38 | ||
|
|
f4704be5a3 | ||
|
|
b71b5c72bc | ||
|
|
e794ac066e | ||
|
|
52ff1821e8 | ||
|
|
6e5731fed3 | ||
|
|
5e1b97b393 | ||
|
|
c45ae6aaed | ||
|
|
984a30cb26 | ||
|
|
05a4bd3e5f | ||
|
|
67e34bbf90 | ||
|
|
9c7fd49e5b | ||
|
|
95536c0854 | ||
|
|
b603618d40 | ||
|
|
783a2bb0ab | ||
|
|
20761f9f26 | ||
|
|
e5717117a1 | ||
|
|
33a41c5b19 | ||
|
|
4d5f7e56b2 | ||
|
|
f594a134df | ||
|
|
05ad1ccb2c | ||
|
|
82aa482475 | ||
|
|
41fddb8d70 | ||
|
|
b12c35d844 | ||
|
|
dcf203187e | ||
|
|
5489c71458 | ||
|
|
fbfc4a6ca1 | ||
|
|
94baa44792 | ||
|
|
bc01704446 | ||
|
|
a467a7091f | ||
|
|
0bf80bdebe | ||
|
|
1738a6ee6a | ||
|
|
7ce3428b85 | ||
|
|
490cfbf033 | ||
|
|
776f27ccc5 | ||
|
|
948305208d | ||
|
|
83eb18565f | ||
|
|
d0c9d20ce9 | ||
|
|
7be34191b9 | ||
|
|
ecd6baf11d | ||
|
|
5706d122c8 | ||
|
|
6894cfdbd3 | ||
|
|
8950d2ceaf | ||
|
|
6c02ae50fc | ||
|
|
1c45ff9a82 | ||
|
|
18817c18b7 | ||
|
|
86601f4fac | ||
|
|
06c92f6b1b | ||
|
|
fd7feeb9a9 | ||
|
|
fb13a0f943 | ||
|
|
7776d151a0 | ||
|
|
4beb733fcf | ||
|
|
03aa96619c | ||
|
|
cb8ea19825 | ||
|
|
78b4fbd4d9 | ||
|
|
df8d7b7a7b | ||
|
|
4835b00dac | ||
|
|
9fffc04428 | ||
|
|
95940c2aa0 | ||
|
|
ee0128667e | ||
|
|
ed0060703f | ||
|
|
c520a03a7f | ||
|
|
7c01a3a147 | ||
|
|
85e040668b | ||
|
|
10c442ca21 | ||
|
|
59eac9529d | ||
|
|
066a4b3315 | ||
|
|
00a09ac8a7 | ||
|
|
d945a99655 | ||
|
|
2f75d4b0a9 | ||
|
|
6dadc7cc6c | ||
|
|
a40ec5f31b | ||
|
|
0f2eb8e5b3 | ||
|
|
1f297e652a | ||
|
|
3d6b4e1b97 | ||
|
|
e30d872bb1 | ||
|
|
5287e60a58 | ||
|
|
73fbc24990 | ||
|
|
c06c6768c3 | ||
|
|
8c5c77d327 | ||
|
|
e769f3dc88 | ||
|
|
9a44746cb1 | ||
|
|
d7033a2298 | ||
|
|
ffab1a3c2c | ||
|
|
aef28b93b7 | ||
|
|
6463b358a4 | ||
|
|
28f45f7929 | ||
|
|
48b1eac9ea | ||
|
|
d2374beb4b | ||
|
|
11a0dee15f | ||
|
|
b53d425696 | ||
|
|
ab51cf72dd | ||
|
|
6b8ac3a720 | ||
|
|
ddaed3ef4a | ||
|
|
df5a9fe8ab | ||
|
|
b527258c42 | ||
|
|
34aa0167e8 | ||
|
|
c979cb31ec | ||
|
|
931e3ec9a9 | ||
|
|
8829252d1f | ||
|
|
3d20189496 | ||
|
|
2591a99d6b | ||
|
|
5614d8a7a5 | ||
|
|
5e42641f8f | ||
|
|
1772df381b | ||
|
|
a63a789fed | ||
|
|
e0c5927f3f | ||
|
|
be52330fd5 | ||
|
|
ccae9e8ca4 | ||
|
|
8964afb728 | ||
|
|
6fc9f13ea2 | ||
|
|
83d8583c07 | ||
|
|
d9df951500 | ||
|
|
d7bcd6ac81 | ||
|
|
74091e98be | ||
|
|
38f36bf907 | ||
|
|
cafa961145 | ||
|
|
f124c9acad | ||
|
|
d117d5a905 | ||
|
|
030c7eb709 | ||
|
|
79021d2a9e | ||
|
|
e04769ea7c | ||
|
|
25fc06f8e0 | ||
|
|
95f26f7a8b | ||
|
|
34e57714a5 | ||
|
|
5139240933 | ||
|
|
c541f23d35 | ||
|
|
cc35a78c73 | ||
|
|
79659d4871 | ||
|
|
0f261a097c | ||
|
|
d2df732899 | ||
|
|
ca8714e17e | ||
|
|
0bb3a39e42 | ||
|
|
2ca89e614c | ||
|
|
52b08207ed | ||
|
|
8dbbb66a42 | ||
|
|
7a1ceb1bc8 | ||
|
|
eff4b259ba | ||
|
|
a089b064aa | ||
|
|
48cd09d9dd | ||
|
|
dee5fbdc8b | ||
|
|
a43f627786 | ||
|
|
5622b7ed78 | ||
|
|
0d84fc7412 | ||
|
|
922c9ff014 | ||
|
|
d921477f8d | ||
|
|
40f39fe102 | ||
|
|
dbaab91d86 | ||
|
|
1ffe83bc0c | ||
|
|
aa982aec7f | ||
|
|
50842697a9 | ||
|
|
d8bc0c3c48 | ||
|
|
d5acf3d183 | ||
|
|
fefa67dab0 | ||
|
|
54a3e86bd2 | ||
|
|
c266e22f5d | ||
|
|
252c354977 | ||
|
|
9cbfff055a | ||
|
|
e47e38afba | ||
|
|
ddf665f3a4 | ||
|
|
4993d32c41 | ||
|
|
fcbecb3102 | ||
|
|
b9741df8cb | ||
|
|
e2ca6dbdf8 | ||
|
|
17b2abeea7 | ||
|
|
5fec6097e1 | ||
|
|
432bc70fc1 | ||
|
|
9e56a8bd29 | ||
|
|
68a4a4041f | ||
|
|
09728df29f | ||
|
|
19fd7c3023 | ||
|
|
d7b4a65a22 | ||
|
|
8218492af7 | ||
|
|
0237af9b06 | ||
|
|
bd40f03422 | ||
|
|
c2ce9e1a69 | ||
|
|
a0a55e4eb5 | ||
|
|
b64142496c | ||
|
|
b5588d57b3 | ||
|
|
1a65210e89 | ||
|
|
fe57a5cfd5 | ||
|
|
f49c5e963e | ||
|
|
209abd8911 | ||
|
|
5111343ecb | ||
|
|
1340381912 | ||
|
|
46ae69d599 | ||
|
|
8ce8e5414f | ||
|
|
0cde898a26 | ||
|
|
7cd13475f9 | ||
|
|
7588492891 | ||
|
|
a2a50c9f48 | ||
|
|
32e78ae359 | ||
|
|
edc872aba0 | ||
|
|
7f08865a6a | ||
|
|
0efd44da9b | ||
|
|
e03fee55f5 | ||
|
|
c0e5aa674f | ||
|
|
36270f0c2f | ||
|
|
5c7db8b71f | ||
|
|
084a5c7750 | ||
|
|
e033e220b6 | ||
|
|
69b93fbeee | ||
|
|
d8a4d9b762 | ||
|
|
709534a7f6 | ||
|
|
bed32f6b51 | ||
|
|
999061bbf1 | ||
|
|
51e25eb78b | ||
|
|
243e8cb708 | ||
|
|
f1720c99ec | ||
|
|
631957f522 | ||
|
|
ae974561de | ||
|
|
c8510a9a07 | ||
|
|
bca3fb0747 | ||
|
|
abddc02fb2 | ||
|
|
77bc815bcc | ||
|
|
e4507d7d6f | ||
|
|
3e9713767d | ||
|
|
cd7bf16f26 | ||
|
|
8e0ac02cb9 | ||
|
|
d52ade109e | ||
|
|
2e841c782e | ||
|
|
9eda4d9e68 | ||
|
|
cc68694daf | ||
|
|
712539b041 | ||
|
|
8e16230944 | ||
|
|
43c308350d | ||
|
|
b05360b8c5 | ||
|
|
51da33ae29 | ||
|
|
66c482da90 | ||
|
|
f18cbd6b39 | ||
|
|
ccde2d0c7a | ||
|
|
8ce5529bee | ||
|
|
c64e161df3 | ||
|
|
734cb199eb | ||
|
|
3674f0cf77 | ||
|
|
2e71598bc8 | ||
|
|
a3f04669db | ||
|
|
b1ee495101 | ||
|
|
a1a2b2625e | ||
|
|
504475cd85 | ||
|
|
fa5930a443 | ||
|
|
c011dbe075 | ||
|
|
447942811c | ||
|
|
cfa9975baa | ||
|
|
b6f11efda7 | ||
|
|
15536b40ec | ||
|
|
7708dd387b | ||
|
|
4805a4e4ae | ||
|
|
a07a39a0b2 | ||
|
|
860b9788a5 | ||
|
|
b61fd65ba5 | ||
|
|
4d200bdcc9 | ||
|
|
13464db189 | ||
|
|
e5c8787535 | ||
|
|
a8cf0e617d | ||
|
|
44d0800fbf | ||
|
|
6edf93324c | ||
|
|
bc2bf38118 | ||
|
|
bc99faee6f | ||
|
|
938d533fbb | ||
|
|
ec0d56cbc9 | ||
|
|
eb9e4adb17 | ||
|
|
7a9c226af9 | ||
|
|
3cb5cdf851 | ||
|
|
cb1782bb6a | ||
|
|
6eb3b554d9 | ||
|
|
1700f0a414 | ||
|
|
efa3f83bf1 | ||
|
|
2eb30e2e63 | ||
|
|
4cf8de9b5a | ||
|
|
f6fffda0b8 | ||
|
|
f5f8d3ae59 | ||
|
|
05ba680154 | ||
|
|
803900e383 | ||
|
|
50d527fde1 | ||
|
|
535ffb94eb | ||
|
|
fbeb79403f | ||
|
|
926c22290b | ||
|
|
679bf46d1f | ||
|
|
5f222c34dc | ||
|
|
40160da2ea | ||
|
|
54b9bc1277 | ||
|
|
d1b17b51be | ||
|
|
3ba33c05a2 | ||
|
|
47fd3fda0a | ||
|
|
c8af5f459d | ||
|
|
af51ed6496 | ||
|
|
32e6f4aa4c | ||
|
|
13dd6a0533 | ||
|
|
df9ea96ca2 | ||
|
|
335a1b372a | ||
|
|
5e320d7096 | ||
|
|
a4b6fa515f | ||
|
|
cf42563ea3 | ||
|
|
b49e3d082c | ||
|
|
b3bea7ef99 | ||
|
|
651b76c2c9 | ||
|
|
3659d74227 | ||
|
|
ce11ed2415 | ||
|
|
74b19209d3 | ||
|
|
e779a3ed2b | ||
|
|
4cfb02ce3e | ||
|
|
d2bfd50ba4 | ||
|
|
669801ed77 | ||
|
|
15cc058360 | ||
|
|
a72ac972bc | ||
|
|
8598020711 | ||
|
|
1c0fc24e4a | ||
|
|
b9b21ab8db | ||
|
|
c8d97f58ac | ||
|
|
a7804ccc6c | ||
|
|
de299190a7 | ||
|
|
909205970a | ||
|
|
48133da317 | ||
|
|
e16a980ae9 | ||
|
|
c90fa7412e | ||
|
|
c4a992840e | ||
|
|
21182a3997 | ||
|
|
80d7ee415e | ||
|
|
dcd6abdf2a | ||
|
|
8ee107a773 | ||
|
|
4a9c3d79b1 | ||
|
|
c6594de45c | ||
|
|
005fbea4e0 | ||
|
|
b9c8679e20 | ||
|
|
58594cb25b | ||
|
|
e34b46723e | ||
|
|
8dddd1e80a | ||
|
|
0b26686b1e | ||
|
|
c483d09e94 | ||
|
|
4b3f1300b8 | ||
|
|
d312d6d041 | ||
|
|
0b660f7cc7 | ||
|
|
e05f95668b | ||
|
|
c86fcfd4ea | ||
|
|
41669e9de4 | ||
|
|
8f35ce2155 | ||
|
|
25df6f1d56 | ||
|
|
c05bc25734 | ||
|
|
083c7134c4 | ||
|
|
dcbe55e44c | ||
|
|
2d03e9ac5b | ||
|
|
b1c2e75567 | ||
|
|
61ceb3788a | ||
|
|
274d275f4f | ||
|
|
c55187afa7 | ||
|
|
1204abf6be | ||
|
|
42e9542cd1 | ||
|
|
06eae3e06a | ||
|
|
34307c6618 | ||
|
|
e36f266f6e | ||
|
|
5eee5098c0 | ||
|
|
e40527cc3f | ||
|
|
790f41188f | ||
|
|
794531c274 | ||
|
|
87c08af867 | ||
|
|
a76e8614c4 | ||
|
|
b4409dc96f | ||
|
|
0c80162256 | ||
|
|
70b6317d70 | ||
|
|
6f3401528b | ||
|
|
bb09167413 | ||
|
|
7af4c6e44b | ||
|
|
6d5f3971a4 | ||
|
|
c01cafd08d | ||
|
|
5764044b9d | ||
|
|
0e3d3c4c03 | ||
|
|
243716666c | ||
|
|
308a70e0eb | ||
|
|
45da058793 | ||
|
|
27c1364da8 | ||
|
|
d4beb302cf | ||
|
|
08eeae14b9 | ||
|
|
2fa541860d | ||
|
|
51bf2f8fa6 | ||
|
|
19d89dd935 | ||
|
|
05d0c02ad4 | ||
|
|
d61ed3a3c0 | ||
|
|
f1f77e626a | ||
|
|
5c28e6ec4b | ||
|
|
a26e901b29 | ||
|
|
c1b5199f4c | ||
|
|
b2438153a9 | ||
|
|
7ebce50f2f | ||
|
|
d5233af8da | ||
|
|
e6b0d58a8e | ||
|
|
5f2b003630 | ||
|
|
b1257356f1 | ||
|
|
f0fabfb4b4 | ||
|
|
b535f1ef80 | ||
|
|
470d3c712d | ||
|
|
bdb8f777b6 | ||
|
|
fa132665ef | ||
|
|
9dd1315170 | ||
|
|
cf348d7a19 | ||
|
|
7a0c10864e | ||
|
|
40d092b11b | ||
|
|
0aeef53151 | ||
|
|
231b61d55a | ||
|
|
22f3323517 | ||
|
|
877d4dd4be | ||
|
|
414256d2a4 | ||
|
|
0f444ac923 | ||
|
|
a6d557e11d | ||
|
|
81bdc4425f | ||
|
|
f4da503520 | ||
|
|
d498217bbc | ||
|
|
37b5925b75 | ||
|
|
7db3936e1c | ||
|
|
238509170f | ||
|
|
fcca77c9c9 | ||
|
|
1eadcde4b0 | ||
|
|
a077e58719 | ||
|
|
2a2c137d82 | ||
|
|
1f9f48128f | ||
|
|
7b354505be | ||
|
|
7cc1139ad9 | ||
|
|
acad862075 | ||
|
|
0ae8591edb | ||
|
|
5858a61967 | ||
|
|
2bf60de8c7 | ||
|
|
587ec35c6b | ||
|
|
7ef39b00e1 | ||
|
|
000459dd34 | ||
|
|
2ce48e5bcf | ||
|
|
d14f7482f2 | ||
|
|
d1d88759f2 | ||
|
|
4c4cdcb280 | ||
|
|
6256dc111d | ||
|
|
576155f545 | ||
|
|
2272578cc0 | ||
|
|
611d292a12 | ||
|
|
952bb8a539 | ||
|
|
25fbc4cf5c | ||
|
|
a47a313a61 | ||
|
|
915aa0f53b | ||
|
|
44f5ae0f4b | ||
|
|
df4219da8f | ||
|
|
ce982ebdab | ||
|
|
5f106ab0a5 | ||
|
|
c8c45cf6d8 | ||
|
|
ec6afec1dd | ||
|
|
bf4134efb2 | ||
|
|
e8baa79e73 | ||
|
|
bd72f57f38 | ||
|
|
d437a64480 | ||
|
|
efd19d2a0b | ||
|
|
aaafed51a1 | ||
|
|
4b866fb93e | ||
|
|
1f9ef990e2 | ||
|
|
b949868455 | ||
|
|
a5f8569528 | ||
|
|
209c906b56 | ||
|
|
e8cc326a68 | ||
|
|
7a80079015 | ||
|
|
c6c9a37a13 | ||
|
|
183a9a5f29 | ||
|
|
466be7766d | ||
|
|
48116037ac | ||
|
|
37332ee0d5 | ||
|
|
6fd642b01d | ||
|
|
436dcd1d11 | ||
|
|
ff88092e0a | ||
|
|
e1253dec1e | ||
|
|
aa1c17baa3 | ||
|
|
9e5c999f23 | ||
|
|
853af70ac1 | ||
|
|
1d2b06f8de | ||
|
|
161cd8da9b | ||
|
|
ecf46374dc | ||
|
|
43c41bd287 | ||
|
|
5042d3b729 | ||
|
|
30e448b620 | ||
|
|
974905a7c2 | ||
|
|
e8dac63266 | ||
|
|
12f6a43c28 | ||
|
|
26f72292f5 | ||
|
|
efcc05751b | ||
|
|
227e7e73b6 | ||
|
|
53661f64e9 | ||
|
|
03bb1b1b0f | ||
|
|
45edba1134 | ||
|
|
c53ebdc736 | ||
|
|
9f02515729 | ||
|
|
b88df053cf | ||
|
|
7e7c6b0d07 | ||
|
|
42762bfbb7 | ||
|
|
418edbea4a | ||
|
|
18e14e2620 | ||
|
|
cba20939a8 | ||
|
|
b54ea1360d | ||
|
|
27737f8806 | ||
|
|
de330a4cb8 | ||
|
|
e42d4e601d | ||
|
|
c04deefd89 | ||
|
|
d7971fdf71 | ||
|
|
ba1a62511b | ||
|
|
688e6bfeb3 | ||
|
|
ad59d59d5d | ||
|
|
965fa1e02e | ||
|
|
f43501b3ed | ||
|
|
57237ee23e | ||
|
|
ea256c4cf9 | ||
|
|
a28012b6d9 | ||
|
|
2477014f3e | ||
|
|
a5daac889a | ||
|
|
db9afdc77e | ||
|
|
c3430da64f | ||
|
|
b89efd2edd | ||
|
|
85e3ed7a22 | ||
|
|
107dc3d1c3 | ||
|
|
af5419a26f | ||
|
|
a99c27682d | ||
|
|
26981ecd38 | ||
|
|
0d7ee3d275 | ||
|
|
8c64dc58f2 | ||
|
|
0847576940 | ||
|
|
205858cef0 | ||
|
|
6b0e5eac22 | ||
|
|
b18f5369e4 | ||
|
|
96d8403321 | ||
|
|
3decae267c | ||
|
|
2809cff43e | ||
|
|
2fc3adf8d8 | ||
|
|
c28519131f | ||
|
|
8e2045eb00 | ||
|
|
d19d21a317 | ||
|
|
c57eb8314a | ||
|
|
d70a2fbf16 | ||
|
|
595aa0cd61 | ||
|
|
0536b9e7a7 | ||
|
|
5ab83de96f | ||
|
|
1c7d608b75 | ||
|
|
f09adb62e6 | ||
|
|
67fc5199de | ||
|
|
9daf46443c | ||
|
|
0dc2f394ab | ||
|
|
b8f62f3069 | ||
|
|
c14e1e5dbc | ||
|
|
71feaef680 | ||
|
|
0b7371c7c8 | ||
|
|
11c430d151 | ||
|
|
a5524159c4 | ||
|
|
7ff11684f7 | ||
|
|
5acbaff1d6 | ||
|
|
f92dd9f774 | ||
|
|
b0cf9a87fb | ||
|
|
46d1de5208 | ||
|
|
36629f6ff4 | ||
|
|
e7f5b6257e | ||
|
|
c074ac5b17 | ||
|
|
1b0ae5f75f | ||
|
|
1c1d1ac511 | ||
|
|
a22be93678 | ||
|
|
d493829d25 | ||
|
|
d92677675e | ||
|
|
da7c19c98b | ||
|
|
e7ea7219c1 | ||
|
|
3e89b4a35e | ||
|
|
6e3a80efcb | ||
|
|
2af330cb4b | ||
|
|
12aebc6612 | ||
|
|
7a1a476c09 | ||
|
|
1bfba5180d | ||
|
|
7fd753f8a2 | ||
|
|
20dfd8b3d0 | ||
|
|
7467584209 | ||
|
|
eb4ba950dc | ||
|
|
512f045677 | ||
|
|
00796be0b2 | ||
|
|
b9c4ec15e2 | ||
|
|
afd9849f8d | ||
|
|
630ed9da8d | ||
|
|
04f3118294 | ||
|
|
7d44278884 | ||
|
|
88d1ce50fd | ||
|
|
12ff33d7a3 | ||
|
|
dcded46c6b | ||
|
|
ad5c2d9dd9 | ||
|
|
9b46afa19c | ||
|
|
723968efd7 | ||
|
|
79b41c5457 | ||
|
|
ebe548bda5 | ||
|
|
8e8cfe037d | ||
|
|
78a0baacaf | ||
|
|
8dc9e6f5a9 | ||
|
|
02f1e5672d | ||
|
|
a91c5be3d4 | ||
|
|
d5ca0377a0 | ||
|
|
32a86569a0 | ||
|
|
01bd8ebf03 | ||
|
|
1649b12050 | ||
|
|
df747d32e3 | ||
|
|
1b32b76e68 | ||
|
|
bba79cf2a9 | ||
|
|
919cc79e68 | ||
|
|
963e0a9f1b | ||
|
|
000a9fdceb | ||
|
|
28c2487d7b | ||
|
|
95b1c95ced | ||
|
|
d6d163d9d0 | ||
|
|
d07840974a | ||
|
|
0f63d4a5c0 | ||
|
|
de2ac9a4d6 | ||
|
|
624aa9c31e | ||
|
|
0386cfb672 | ||
|
|
02cfb4e994 | ||
|
|
2ed4d76b1f | ||
|
|
a0b7114b1b | ||
|
|
7f4146147d | ||
|
|
906f3b6952 | ||
|
|
ff9d10b628 | ||
|
|
19784b10f7 | ||
|
|
e93ccfa38a | ||
|
|
11c9d87ffd | ||
|
|
80ce00e46f | ||
|
|
afe3641f92 | ||
|
|
d8b6b700c2 | ||
|
|
16033ae9ed | ||
|
|
05b4f65b28 | ||
|
|
884b7287a6 | ||
|
|
26f49cfbf9 | ||
|
|
6c5265022c | ||
|
|
710c34eb25 | ||
|
|
6c4d0e8fb0 | ||
|
|
1fadee338f | ||
|
|
45157f5909 | ||
|
|
73ab4ffc29 | ||
|
|
8f1454311b | ||
|
|
bb16493bea | ||
|
|
83b0206f8a | ||
|
|
586ec6838f | ||
|
|
1023c4fd95 | ||
|
|
5766fe9a2b | ||
|
|
8765b681f4 | ||
|
|
f089973c96 | ||
|
|
090e09cf49 | ||
|
|
c1d9226382 | ||
|
|
9e0c707830 | ||
|
|
01356c7f05 | ||
|
|
8608eeef55 | ||
|
|
1cc03fbdca | ||
|
|
ae7dbadb55 | ||
|
|
9ec19516ad | ||
|
|
1f14ebf0e8 | ||
|
|
0dd1405061 | ||
|
|
07b793204e | ||
|
|
8ab2cbb45c | ||
|
|
39168ee6c0 | ||
|
|
1c53e66081 | ||
|
|
cde0946d2c | ||
|
|
de9ffbc625 | ||
|
|
eae6c5f6e8 | ||
|
|
a5d103f21d | ||
|
|
5e3f9c8a92 | ||
|
|
77d7e4399e | ||
|
|
f8ec5cba04 | ||
|
|
055abcfefd | ||
|
|
c37d85bd0d | ||
|
|
76aac71141 | ||
|
|
e965b367af | ||
|
|
c2347cf521 | ||
|
|
d175c26c4b | ||
|
|
112ae88418 | ||
|
|
8d72c086f0 | ||
|
|
1b1e0eaa04 | ||
|
|
47da23311b | ||
|
|
541bbb9cec | ||
|
|
33a6570c92 | ||
|
|
8c8c8a755b | ||
|
|
20e7d429c1 | ||
|
|
840c633d4e | ||
|
|
bc8b659ee5 | ||
|
|
8bbf240408 | ||
|
|
4a40f81334 | ||
|
|
b30d129a11 | ||
|
|
c44b876a19 | ||
|
|
b2f9f258f1 | ||
|
|
66d4c33935 | ||
|
|
125782f1eb | ||
|
|
d71ede8cb1 | ||
|
|
10d286c8ee | ||
|
|
ac8c51ccc4 | ||
|
|
5a2aa5d872 | ||
|
|
0d7226c51c | ||
|
|
e0f27aef6b | ||
|
|
31e01eacf7 | ||
|
|
547d69d1be | ||
|
|
8399ab418b | ||
|
|
dcca78944f | ||
|
|
7369f5dce0 | ||
|
|
b738231c77 | ||
|
|
6c1da94b3c | ||
|
|
2e21fa0d00 | ||
|
|
774355c3a7 | ||
|
|
64e9726d66 | ||
|
|
fbb0f1a34c | ||
|
|
24d712c0c4 | ||
|
|
4a60759843 | ||
|
|
fa2b0e8eab | ||
|
|
756c789c71 | ||
|
|
2717ca0ec6 | ||
|
|
43651b1b44 | ||
|
|
1c2c970086 | ||
|
|
c9a1bac6af | ||
|
|
9362956541 | ||
|
|
5c77622db3 | ||
|
|
83fda39b54 | ||
|
|
9c653dba81 | ||
|
|
49fbcd1f5d | ||
|
|
c89e711aec | ||
|
|
4284b47940 | ||
|
|
caef5c411d | ||
|
|
5b4834f51a | ||
|
|
16e4a024cc | ||
|
|
89aaf14cd6 | ||
|
|
7798c2dcf8 | ||
|
|
cc24ced60d | ||
|
|
bde1ef8475 | ||
|
|
c17227c210 | ||
|
|
340ff17d51 | ||
|
|
3ca1a369f1 | ||
|
|
292ee8cc10 | ||
|
|
0b74c0309c | ||
|
|
d05f3d295e | ||
|
|
bf2a60d25a | ||
|
|
6e7650ea73 | ||
|
|
72b2348f5f | ||
|
|
77e6bfa466 | ||
|
|
4f5343aa41 | ||
|
|
1ce4843662 | ||
|
|
9100a00411 | ||
|
|
bf16adacf1 | ||
|
|
16d8ae1ec5 | ||
|
|
94efc941dc | ||
|
|
29354159f6 | ||
|
|
88bb4b27d3 | ||
|
|
8ed8449a45 | ||
|
|
d4c1f4e7de | ||
|
|
41f55c6997 | ||
|
|
643c751406 | ||
|
|
ac0be48b1f | ||
|
|
c24e6badff | ||
|
|
2b1df44ed5 | ||
|
|
3ff6b37fcd | ||
|
|
d7bc8fcea3 | ||
|
|
874ae757ba | ||
|
|
e48f79b921 | ||
|
|
b486890d45 | ||
|
|
4d15306f2e | ||
|
|
a12bfd2a9e | ||
|
|
bfff060987 | ||
|
|
fc6ef285e7 | ||
|
|
9edd7f341b | ||
|
|
f20583d268 | ||
|
|
eb852d0029 | ||
|
|
4102f9727e | ||
|
|
b5aa604f6f | ||
|
|
34fd6c3579 | ||
|
|
9e8adf0cb6 | ||
|
|
64f04b648a | ||
|
|
336860768d | ||
|
|
72a79dc01d | ||
|
|
b88cb4e237 | ||
|
|
3ae4d298ba | ||
|
|
163b519c81 | ||
|
|
9de22604bb | ||
|
|
a358d1d9cf | ||
|
|
2a5479b8c8 | ||
|
|
752858c442 | ||
|
|
6aaf750169 | ||
|
|
b63c05d66f | ||
|
|
4fd41b26f9 | ||
|
|
9e7c08edf8 | ||
|
|
d2967091f6 | ||
|
|
ee89b787e1 | ||
|
|
770db3d22d | ||
|
|
484225beae | ||
|
|
4bcfdab180 | ||
|
|
f1bb491902 | ||
|
|
ee904ce60a | ||
|
|
2839fceb86 | ||
|
|
5596ad5469 | ||
|
|
ff147aed81 | ||
|
|
9e70b7b8cf | ||
|
|
4e4008f0e6 | ||
|
|
b691078283 | ||
|
|
1888770eea | ||
|
|
c4e9c0c5dd | ||
|
|
08ed5304c6 | ||
|
|
cd4fd07891 | ||
|
|
92dde9f441 | ||
|
|
70387a918e | ||
|
|
4f8990a078 | ||
|
|
8fa95e4c0c | ||
|
|
40b3652a85 | ||
|
|
403f57fb2d | ||
|
|
9291ff6e1f | ||
|
|
6616e6a08c | ||
|
|
171329994d | ||
|
|
518f826f89 | ||
|
|
ecc3dc2f37 | ||
|
|
cc3e7f5810 | ||
|
|
4cf609bbc9 | ||
|
|
d9918c998c | ||
|
|
4fd4a2744b | ||
|
|
52cd712576 | ||
|
|
a0bc318c4e | ||
|
|
000683713d | ||
|
|
edb50eea85 | ||
|
|
9f66fd1039 | ||
|
|
f2d37627f1 | ||
|
|
f215305a0e | ||
|
|
7a3b402cfe | ||
|
|
7bc861e412 | ||
|
|
757c0a4551 | ||
|
|
4c1499de79 | ||
|
|
c923792a45 | ||
|
|
22b50709a4 | ||
|
|
cca287dbb7 | ||
|
|
8de6799bdd | ||
|
|
b5e6f21c1a | ||
|
|
2102fd1e69 | ||
|
|
36c5bca88a | ||
|
|
2b55f982c4 | ||
|
|
886a15f318 | ||
|
|
05c7776f1a | ||
|
|
2ca8d8c10c | ||
|
|
771077cde1 | ||
|
|
0577f4b980 | ||
|
|
98d64be44c | ||
|
|
16f0c49098 | ||
|
|
a502330d8b | ||
|
|
32d402b53c | ||
|
|
9c36e4d90d | ||
|
|
4be35069e6 | ||
|
|
4a7b5cca9c | ||
|
|
83aed90ffd | ||
|
|
669ff378f8 | ||
|
|
dc11119e8b | ||
|
|
9bc5a35557 | ||
|
|
4e5e17e241 | ||
|
|
258a5243ec | ||
|
|
843a599bc1 | ||
|
|
6a38be7280 | ||
|
|
677bd72012 | ||
|
|
1243a6e6be | ||
|
|
4a169f32e7 | ||
|
|
0747a6a8df | ||
|
|
aae06a4812 | ||
|
|
662498ffe8 | ||
|
|
fa2ecdbc37 | ||
|
|
075ca891a1 | ||
|
|
11fde1b76a | ||
|
|
d810df9bf0 | ||
|
|
596831fde2 | ||
|
|
f8a713c31e | ||
|
|
f69d70b1e1 | ||
|
|
4824f1c10a | ||
|
|
4878f62f68 | ||
|
|
2ab0c688c7 | ||
|
|
53402df68c | ||
|
|
5332afc134 | ||
|
|
d82f9e53e8 | ||
|
|
856ce1d800 | ||
|
|
2d72cb09d6 | ||
|
|
e7fd011cc0 | ||
|
|
c8ea39f883 | ||
|
|
5bfb033426 | ||
|
|
9ab6598d05 | ||
|
|
fd19b92501 | ||
|
|
e15d6d63a9 | ||
|
|
cc2e56ebee | ||
|
|
a6374e48d2 | ||
|
|
4fdf09f4df | ||
|
|
1521b03750 | ||
|
|
9159695f1b | ||
|
|
183294f04a | ||
|
|
ab651ca606 | ||
|
|
71ea085544 | ||
|
|
80e56ff9b4 | ||
|
|
db4bc83a1e | ||
|
|
4ae5053e74 | ||
|
|
57a4641021 | ||
|
|
c986723646 | ||
|
|
fd7f98b0d7 | ||
|
|
6ab4e83189 | ||
|
|
7f73f55ca7 | ||
|
|
8895a30554 | ||
|
|
78632aa14b | ||
|
|
dc11a8c40c | ||
|
|
c15ef1cc22 | ||
|
|
056a7f5c32 | ||
|
|
905d7da2fd | ||
|
|
5ddbb6fc54 | ||
|
|
682b485837 | ||
|
|
968c4de2b8 | ||
|
|
5e3601a433 | ||
|
|
b137479f11 | ||
|
|
1095f9cf00 | ||
|
|
3f626608c4 | ||
|
|
ae85719a83 | ||
|
|
ab7beaac6e | ||
|
|
7f8669b37b | ||
|
|
908e840229 | ||
|
|
c31705f74b | ||
|
|
9283928652 | ||
|
|
27dee653dd | ||
|
|
f13bd18ff2 | ||
|
|
500cfb5744 | ||
|
|
65173deee9 | ||
|
|
0fd9f0725d | ||
|
|
8530125edb | ||
|
|
83f0a1f64c | ||
|
|
6174d62929 | ||
|
|
cc008d9360 | ||
|
|
27a2294e2b | ||
|
|
9e372bdf06 | ||
|
|
b02de11ada | ||
|
|
3bcc822996 | ||
|
|
8d04e872e4 | ||
|
|
8fd7c40228 | ||
|
|
2296c73112 | ||
|
|
8451ef0866 | ||
|
|
f948604f07 | ||
|
|
a44dc12050 | ||
|
|
df96a00a02 | ||
|
|
a29edc27ef | ||
|
|
5f72e09060 | ||
|
|
03c6edc332 | ||
|
|
a6d15544d5 | ||
|
|
c7ce9e46a5 | ||
|
|
19088e972e | ||
|
|
78d03d7436 | ||
|
|
a87095e8d1 | ||
|
|
e4fd35c456 | ||
|
|
17fb4930ed | ||
|
|
be83faf31e | ||
|
|
74656d2418 | ||
|
|
3e060886b3 | ||
|
|
c63d99cd2e | ||
|
|
95b695ecff | ||
|
|
489ab4f2e3 | ||
|
|
7c1e145fc8 | ||
|
|
ea69c374a6 | ||
|
|
60fa30e02b | ||
|
|
b7ee09f4f9 | ||
|
|
69e866234d | ||
|
|
cac2b61054 | ||
|
|
474340cc94 | ||
|
|
b82802d767 | ||
|
|
8423eddfcc | ||
|
|
1e4eb67470 | ||
|
|
4006a39e2b | ||
|
|
ecd3053862 | ||
|
|
645748ea06 | ||
|
|
81e2792d47 | ||
|
|
915156beec | ||
|
|
9a2025c253 | ||
|
|
f2a101b207 | ||
|
|
ccc35e841d | ||
|
|
f82e49bb13 | ||
|
|
b310e281f2 | ||
|
|
1e3402a681 | ||
|
|
0afbdadb79 | ||
|
|
2c7246f1c3 | ||
|
|
355b9a82b2 | ||
|
|
26fe41d5de | ||
|
|
f525e1cd97 | ||
|
|
e678f733ba | ||
|
|
ae87ce9f93 | ||
|
|
1af99601c0 | ||
|
|
6af9afbbe7 | ||
|
|
07aa723f51 | ||
|
|
7419796525 | ||
|
|
c2ae19df25 | ||
|
|
a17cfda455 | ||
|
|
339d85d31a | ||
|
|
6ad956f006 | ||
|
|
5d08ac6857 | ||
|
|
1bb121d393 | ||
|
|
4813ed08aa | ||
|
|
ad668195ff | ||
|
|
3c6aa4a9be | ||
|
|
5851f5a0a4 | ||
|
|
eefc33e7a7 | ||
|
|
9084568a7d | ||
|
|
1dc6b21dee | ||
|
|
e35e234b30 | ||
|
|
359ece7ae7 | ||
|
|
0ec8a8224a | ||
|
|
35afe9a688 | ||
|
|
98b703c304 | ||
|
|
6130fc4d46 | ||
|
|
9c0e61f43c | ||
|
|
94d3cf341e | ||
|
|
7920ce617d | ||
|
|
ca45e4fef3 | ||
|
|
1d188ddcb6 | ||
|
|
959b262a07 | ||
|
|
8b45512b3b | ||
|
|
cea3467512 | ||
|
|
d38bad19d0 | ||
|
|
3daf72fbe0 | ||
|
|
bba0727bbd | ||
|
|
7ee6944a94 | ||
|
|
7dd691f0cc | ||
|
|
db8e6ac333 | ||
|
|
80fb7821b7 | ||
|
|
c4d8237bf5 | ||
|
|
988f28311f | ||
|
|
c488c71dd6 | ||
|
|
a17922f815 | ||
|
|
8fd6fdfb5a | ||
|
|
7ef3597de3 | ||
|
|
d1a0b96750 | ||
|
|
50f49d4094 | ||
|
|
d96381b02c | ||
|
|
2d5f168efa | ||
|
|
587ed732f0 | ||
|
|
1dcaf756fc | ||
|
|
c5fb01b9b9 | ||
|
|
65d1703093 | ||
|
|
b1facee543 | ||
|
|
100738567d | ||
|
|
9d17b39b7e | ||
|
|
9263a9f69b | ||
|
|
3e0207b12e | ||
|
|
2326c677fc | ||
|
|
52af9e1046 | ||
|
|
a81b0cd825 | ||
|
|
889c07459c | ||
|
|
5b32654617 | ||
|
|
36ab489fc8 | ||
|
|
f6ba9bee67 | ||
|
|
60f4a2698e | ||
|
|
20802de448 | ||
|
|
ab19387791 | ||
|
|
d197b02d04 | ||
|
|
f9a6f3290b | ||
|
|
fa0c1128be | ||
|
|
157a884488 | ||
|
|
93138980b4 | ||
|
|
a80694b570 | ||
|
|
1795ddce4d | ||
|
|
b76f859a8c | ||
|
|
f0081e788d | ||
|
|
ad1c49c7be | ||
|
|
e812bad5a4 | ||
|
|
e3c455d2d8 | ||
|
|
6325628b67 | ||
|
|
949a9c50eb | ||
|
|
12ccb3acdb | ||
|
|
616d8b6646 | ||
|
|
bdf8405c89 | ||
|
|
9d6bad5d63 | ||
|
|
a1c0a6575a | ||
|
|
5d3a07e030 | ||
|
|
ee21631850 | ||
|
|
ff976586cb | ||
|
|
7d026ee556 | ||
|
|
02e45e6d5c | ||
|
|
d916d9e679 | ||
|
|
e135e024c5 | ||
|
|
ff7f0c09d0 | ||
|
|
a17930123d | ||
|
|
4d9cc3c781 | ||
|
|
02deeeea75 | ||
|
|
8fc60710c1 | ||
|
|
72f7b380d2 | ||
|
|
c5552ec5d1 | ||
|
|
8a7a39e997 | ||
|
|
6ef5b03d8d | ||
|
|
d5a6508f73 | ||
|
|
a85d5972dc | ||
|
|
06f16352ef | ||
|
|
2ea24b9558 | ||
|
|
c04674eb3f | ||
|
|
1694dde79a | ||
|
|
6ee7ec2026 | ||
|
|
0210e03c20 | ||
|
|
111a812870 | ||
|
|
54fb8caa37 | ||
|
|
e7c8d5b7d5 | ||
|
|
c4334f6a1a | ||
|
|
fa6ce28a19 | ||
|
|
5954e22a3a | ||
|
|
6d04ff697f | ||
|
|
2eb099c7ae | ||
|
|
976dc4ad35 | ||
|
|
80de6496b2 | ||
|
|
d9eb3ace1c | ||
|
|
d7843a7583 | ||
|
|
f6ce389cb6 | ||
|
|
189b448bed | ||
|
|
c21746c3f7 | ||
|
|
a3be359a3d | ||
|
|
6ef6789819 | ||
|
|
27124c65be | ||
|
|
9bb3c878f8 | ||
|
|
de01df6af6 | ||
|
|
1939319312 | ||
|
|
4a6316c76a | ||
|
|
54f6ca91c0 | ||
|
|
9743a1137a | ||
|
|
07d8138315 | ||
|
|
e9b22da266 | ||
|
|
0207013518 | ||
|
|
dae738a248 | ||
|
|
8c32f402bf | ||
|
|
17fb892306 | ||
|
|
e5d50b1c2f | ||
|
|
94d6eb00ff | ||
|
|
797e4d8c75 | ||
|
|
db2a7298ea | ||
|
|
07dbb54e1e | ||
|
|
8b75aaeb58 | ||
|
|
dc31e6b5e3 | ||
|
|
4b6b80d884 | ||
|
|
7858de1c45 | ||
|
|
2d23e2da6f | ||
|
|
5a2d3783f7 | ||
|
|
a13ce2f389 | ||
|
|
6a34b4e255 | ||
|
|
840216e7c0 | ||
|
|
d7fb47714b | ||
|
|
7093a820c4 | ||
|
|
b1392ff51b | ||
|
|
0acb6c7cf5 | ||
|
|
eb58f574fa | ||
|
|
137caf662b | ||
|
|
9f46d65b01 | ||
|
|
f304dd5af2 | ||
|
|
5d4da7ed0b | ||
|
|
6d2b62bde9 | ||
|
|
cbe6bbbf28 | ||
|
|
dabaa51f7f | ||
|
|
2817f5fa31 | ||
|
|
fedc66a812 | ||
|
|
e280cefced | ||
|
|
1cb0fe8dba | ||
|
|
3029e6d9b9 | ||
|
|
3fa182d735 | ||
|
|
9c1a3f64e5 | ||
|
|
92ca091a5d | ||
|
|
cf7ab4dd40 | ||
|
|
663400f034 | ||
|
|
cd23ffe994 | ||
|
|
6ae5453933 | ||
|
|
763aa60990 | ||
|
|
aa6ba11f75 | ||
|
|
6490396ae5 | ||
|
|
1294a1ded9 | ||
|
|
490bcc9078 | ||
|
|
4b0f84a1e7 | ||
|
|
838035341d | ||
|
|
a19df2e24e | ||
|
|
bd989df3d7 | ||
|
|
29ef60e1b4 | ||
|
|
64dff48960 | ||
|
|
ac430180e5 | ||
|
|
8a64d347f8 | ||
|
|
25bdc39b58 | ||
|
|
3e04ef90e0 | ||
|
|
24a7a47d9a | ||
|
|
1720966320 | ||
|
|
17d2674188 | ||
|
|
f391614827 | ||
|
|
5a4298e404 | ||
|
|
9edee9013c | ||
|
|
f5a700b804 | ||
|
|
43500be3a6 | ||
|
|
179365c5ef | ||
|
|
828f2e45d0 | ||
|
|
a655c2bf14 | ||
|
|
7430884e3b | ||
|
|
1411e84333 | ||
|
|
c4523d9cbe | ||
|
|
c1672500d4 | ||
|
|
778d5be2ab | ||
|
|
5dc587e92e | ||
|
|
3495c12eac | ||
|
|
aad908d219 | ||
|
|
56afccb0d7 | ||
|
|
4895edc928 | ||
|
|
2f7b7622a0 | ||
|
|
0d5d32f442 | ||
|
|
8ca76de6f8 | ||
|
|
2c8c9121df | ||
|
|
a61d8fd631 | ||
|
|
c33ae3c275 | ||
|
|
2d64d49a8e | ||
|
|
66a9bac83c | ||
|
|
bdd74f74d9 | ||
|
|
e873a98ba6 | ||
|
|
774a0a750b | ||
|
|
c603a674aa | ||
|
|
5a66e7873f | ||
|
|
1126db9f23 | ||
|
|
677bfc893f | ||
|
|
afb007641a | ||
|
|
038253b750 | ||
|
|
585af49f37 | ||
|
|
3881dd4d1a | ||
|
|
909a489a69 | ||
|
|
131e6a3870 | ||
|
|
4959fbd4d8 | ||
|
|
f48275af26 | ||
|
|
dac1be6dcc | ||
|
|
7bcc12a7fc | ||
|
|
bb71ef33d7 | ||
|
|
f3de06a8a3 | ||
|
|
e0b57a1abb | ||
|
|
bb9380852c | ||
|
|
e00d9fd43b | ||
|
|
3437c299dd | ||
|
|
99a6007175 | ||
|
|
c58e660b8f | ||
|
|
3d57bc4847 | ||
|
|
fbca49c17f | ||
|
|
41c370ebee | ||
|
|
b23972844d | ||
|
|
68730d1c15 | ||
|
|
53deee8777 | ||
|
|
b676bcb564 | ||
|
|
5154d0d970 | ||
|
|
a9995e7b9b | ||
|
|
743ab1bb61 | ||
|
|
9cdfe7e0cc | ||
|
|
6f8a98a9f2 | ||
|
|
58d24beb59 | ||
|
|
0153801c1d | ||
|
|
18c10f9297 | ||
|
|
9068c4a8b7 | ||
|
|
c8a2664b8e | ||
|
|
0b2fc76148 | ||
|
|
75a550af6d | ||
|
|
d33f68133d | ||
|
|
4a56845b1c | ||
|
|
6a52cbbf9f | ||
|
|
f7e053f1a3 | ||
|
|
570bc3cb2c | ||
|
|
e79da19ce9 | ||
|
|
65d420d1f1 | ||
|
|
1457b9cba6 | ||
|
|
1abd99fe3c | ||
|
|
21797c494b | ||
|
|
200c561043 | ||
|
|
ae8fb94f7c | ||
|
|
6ed5a04d50 | ||
|
|
aa69ecc909 | ||
|
|
12ee590bd5 | ||
|
|
185f29293b | ||
|
|
bc32eb6a98 | ||
|
|
de55d911e1 | ||
|
|
a1639bde8f | ||
|
|
67dc46444d | ||
|
|
19067f21a9 | ||
|
|
7689895468 | ||
|
|
c4a1fda99c | ||
|
|
8e5aa434f6 | ||
|
|
87f1700104 | ||
|
|
88b3a3c6b3 | ||
|
|
0394206d01 | ||
|
|
29e22ec875 | ||
|
|
ccf27dadb3 | ||
|
|
8cd9b0baac | ||
|
|
d4776da391 | ||
|
|
1ca477b8e3 | ||
|
|
a729d0d35d | ||
|
|
830ccf28e7 | ||
|
|
681704032b | ||
|
|
a9a631fd8f | ||
|
|
bc6d689339 | ||
|
|
d7c17fa693 | ||
|
|
4e3f48c4a1 | ||
|
|
471ee56187 | ||
|
|
bea8b11c6b | ||
|
|
b01090ea49 | ||
|
|
6932303311 | ||
|
|
fd9a269dba | ||
|
|
f241b30f30 | ||
|
|
c46be788d1 | ||
|
|
363b987408 | ||
|
|
001959f408 | ||
|
|
1ab27717ae | ||
|
|
2f99fe736c | ||
|
|
8ff71bfac7 | ||
|
|
f71d5f0255 | ||
|
|
70b48f7111 | ||
|
|
aff90a749a | ||
|
|
054f5a6ee5 | ||
|
|
8079ca2bf6 | ||
|
|
13822618b4 | ||
|
|
fcc8f84290 | ||
|
|
b832d3f1a7 | ||
|
|
2882878392 | ||
|
|
72bc76aa24 | ||
|
|
7a9ec26241 | ||
|
|
0fc5374c3d | ||
|
|
4586e536c3 | ||
|
|
0b6a07bdfa | ||
|
|
9032220b10 | ||
|
|
404ac43cc5 | ||
|
|
3e1a7a17a5 | ||
|
|
c75de28019 | ||
|
|
8cc9bc6ab9 | ||
|
|
1ac79248df | ||
|
|
4336c1b789 | ||
|
|
37e26c6ea3 | ||
|
|
8b08e10aa3 | ||
|
|
44c51044ea | ||
|
|
f5c61a30ac | ||
|
|
c37b889cf2 | ||
|
|
5e1cefa539 | ||
|
|
0eb9e68993 | ||
|
|
d77a542f95 | ||
|
|
c2a9fabd8d | ||
|
|
0b6f34dbaa | ||
|
|
117ddb84ae | ||
|
|
9747ac6f62 | ||
|
|
06703048c4 | ||
|
|
ff1668e6f0 | ||
|
|
60644902a5 | ||
|
|
ac9e7a414e | ||
|
|
5142a63201 | ||
|
|
9b3f0c995f | ||
|
|
d5ea735124 | ||
|
|
efb2447680 | ||
|
|
afdd57c9d5 | ||
|
|
1646e76704 | ||
|
|
35487f87fe | ||
|
|
5c6378f836 | ||
|
|
71e0b876f3 | ||
|
|
2f22697bf9 | ||
|
|
282dcfe90a | ||
|
|
3853e2e385 | ||
|
|
2bb41066e0 | ||
|
|
653a59778f | ||
|
|
acf72e6079 | ||
|
|
58fd37d877 | ||
|
|
069041fdc2 | ||
|
|
d3d9378088 | ||
|
|
38c80dff1a | ||
|
|
66dd06a4ac | ||
|
|
a4ecff2b4c | ||
|
|
32290f4315 | ||
|
|
1b85511539 | ||
|
|
073bedb3db | ||
|
|
1827b6cd47 | ||
|
|
0cbc1165c8 | ||
|
|
cbd39e9ab6 | ||
|
|
d8a4b4e07d | ||
|
|
a727fc6037 | ||
|
|
495b6bce2b | ||
|
|
56554d2ff7 | ||
|
|
09db2e5751 | ||
|
|
8033b0f200 | ||
|
|
247f1ed357 | ||
|
|
b4b6a99b07 | ||
|
|
b0889e26cf | ||
|
|
a50547f85f | ||
|
|
23bcb0fa92 | ||
|
|
292a25625b | ||
|
|
d0dc2946dc | ||
|
|
b86affd4ce | ||
|
|
a7a990546a | ||
|
|
1545b064e3 | ||
|
|
46a69fb960 | ||
|
|
deeddc4826 | ||
|
|
86bc107c69 | ||
|
|
48360063a7 | ||
|
|
b7b72d42e4 | ||
|
|
25687bd210 | ||
|
|
444efa2325 | ||
|
|
f38b13efea | ||
|
|
629f17ad74 | ||
|
|
bb1617112a | ||
|
|
fb71ebb0bf | ||
|
|
cc25d5ec43 | ||
|
|
d2b980454c | ||
|
|
6586b6d5e3 | ||
|
|
47f64d6307 | ||
|
|
636dc392ba | ||
|
|
19539d8d83 | ||
|
|
81dadc452d | ||
|
|
358566f784 | ||
|
|
a90a2ee2b2 | ||
|
|
f63ee0c5c0 | ||
|
|
53e5c2de84 | ||
|
|
d85eba38d8 | ||
|
|
489d987d45 | ||
|
|
58a6e5a22e | ||
|
|
ce27219c83 | ||
|
|
21315ad7ad | ||
|
|
98b71292c2 | ||
|
|
c35020a39b | ||
|
|
2c584fd1eb | ||
|
|
627e549951 | ||
|
|
265190d7fc | ||
|
|
d46b920e0c | ||
|
|
33d277246e | ||
|
|
9c074e6058 | ||
|
|
04ef9cf673 | ||
|
|
cefb9c03f5 | ||
|
|
87d2ac691c | ||
|
|
7d8213ef7e | ||
|
|
511063658b | ||
|
|
7d3e7a4437 | ||
|
|
ec92605ed2 | ||
|
|
b6fe3c1c15 | ||
|
|
6ade96968b | ||
|
|
6346ad483c | ||
|
|
a423409ca1 | ||
|
|
b181fec3cb | ||
|
|
2a11921ae4 | ||
|
|
adae413e0d | ||
|
|
97a174aa9f | ||
|
|
6c01f18fcb | ||
|
|
c96b379810 | ||
|
|
57fceebf79 | ||
|
|
ee023a77f8 | ||
|
|
e58e20d9ab | ||
|
|
91a19e6b2c | ||
|
|
e929279cb1 | ||
|
|
14a66b2f17 | ||
|
|
3d324d4720 | ||
|
|
9701f190bb | ||
|
|
2a694d50e5 | ||
|
|
81ab4b2109 | ||
|
|
400f7a340a | ||
|
|
f33e9c4fbb | ||
|
|
d0eaf84200 | ||
|
|
4f8424eaf4 | ||
|
|
0b03b68b18 | ||
|
|
8c363f0d0a | ||
|
|
6155e3d42b | ||
|
|
1a0fcf9167 | ||
|
|
73f05342a2 | ||
|
|
f54cdcc063 | ||
|
|
6737b38a41 | ||
|
|
3a3c803029 | ||
|
|
af7ef9d89c | ||
|
|
25d2fd9636 | ||
|
|
4c2c644bfa | ||
|
|
f1dd6e3fe0 | ||
|
|
2ddb2d1e15 | ||
|
|
99ee00fbee | ||
|
|
d789736e91 | ||
|
|
561d75ba44 | ||
|
|
1cb55c48a8 | ||
|
|
8c2d20b06d | ||
|
|
71525158c2 | ||
|
|
5be50e9e1d | ||
|
|
670a8df844 | ||
|
|
6cd69e0cf7 | ||
|
|
80c2e8e6e1 | ||
|
|
5c5632df1d | ||
|
|
cba148fc84 | ||
|
|
70210447c0 | ||
|
|
e3a8f19ba2 | ||
|
|
9bbca043e2 | ||
|
|
b3e17de782 | ||
|
|
1e868aacc1 | ||
|
|
3668aa1f0a | ||
|
|
506afe1d56 | ||
|
|
3b5e892932 | ||
|
|
55f0729bd9 | ||
|
|
ef51fa1ff8 | ||
|
|
637f2ca9e3 | ||
|
|
5da2919382 | ||
|
|
ce5a2e579c | ||
|
|
2de6ec3e51 | ||
|
|
5b368301a7 | ||
|
|
d9a76967ca | ||
|
|
035c750d82 | ||
|
|
df52ca361b | ||
|
|
35bbd89142 | ||
|
|
389357d301 | ||
|
|
aed571b6d2 | ||
|
|
ac230a68e9 | ||
|
|
d80f14db88 | ||
|
|
800b03edbf | ||
|
|
4e15ae3077 | ||
|
|
7dc204014e | ||
|
|
1efb690e4f | ||
|
|
49a8393e6e | ||
|
|
205694959b | ||
|
|
0b1bb2f6c7 | ||
|
|
4eaf0dd5f0 | ||
|
|
5ddf590b7c | ||
|
|
67538b8c0e | ||
|
|
27d3922302 | ||
|
|
111082f118 | ||
|
|
129f9a2a5b | ||
|
|
f668b5aece | ||
|
|
5aad921076 | ||
|
|
10c5f832a1 | ||
|
|
a7b7241d32 | ||
|
|
60604a6934 | ||
|
|
5f0f2f8610 | ||
|
|
1aebcee468 | ||
|
|
1034c980fa | ||
|
|
77eadc2e25 | ||
|
|
2246bdbc73 | ||
|
|
602d08c96c | ||
|
|
1bdd36bbb4 | ||
|
|
09113ef6ca | ||
|
|
5d8eb72e74 | ||
|
|
e1ea9a6299 | ||
|
|
5ea526dcd7 | ||
|
|
4611279bfd | ||
|
|
5ec976c919 | ||
|
|
f1fcf1190e | ||
|
|
36aa9bae3c | ||
|
|
3dd14b373c | ||
|
|
d425389372 | ||
|
|
1c0ce607e9 | ||
|
|
845a26ace5 | ||
|
|
993c114e5d | ||
|
|
1292313bb9 | ||
|
|
07256ed138 | ||
|
|
3c6961d74b | ||
|
|
568dee5a10 | ||
|
|
f2e03ba03a | ||
|
|
c45fb68aad | ||
|
|
e52877a2bf | ||
|
|
6e788c8f6f | ||
|
|
70db734a98 | ||
|
|
19a28e9239 | ||
|
|
fddec13161 | ||
|
|
d1d6aab0d2 | ||
|
|
92d7e72abc | ||
|
|
6618aa7889 | ||
|
|
ca60dbc1c8 | ||
|
|
45e9d341a9 | ||
|
|
bc1da1717e | ||
|
|
ddd49c8312 | ||
|
|
2d0d6db187 | ||
|
|
ad51d94e29 | ||
|
|
d03b8df79f | ||
|
|
f92d28abd8 | ||
|
|
22c5a05b02 | ||
|
|
b1239bb81d | ||
|
|
9c66e103ad | ||
|
|
20edddc5c1 | ||
|
|
4a695d687d | ||
|
|
c4d0486e3e | ||
|
|
88ed4008e4 | ||
|
|
daeb6b8dfe | ||
|
|
d552f4f568 | ||
|
|
050c2ed012 | ||
|
|
10cb6190b8 | ||
|
|
b13fa984ae | ||
|
|
89610a9140 | ||
|
|
77240318bf | ||
|
|
d9a89e0a01 | ||
|
|
89d51f401b | ||
|
|
b2838104f7 | ||
|
|
132ac9c5a4 | ||
|
|
c155c15185 | ||
|
|
eac287308b | ||
|
|
68f3f46e01 | ||
|
|
f8b3c228a1 | ||
|
|
0703928814 | ||
|
|
1c64b3e419 | ||
|
|
32717817c5 | ||
|
|
5db17af0c9 | ||
|
|
60a78f5ff6 | ||
|
|
8eb94e7c2b | ||
|
|
6b685d7fe2 | ||
|
|
28c5ff6160 | ||
|
|
91c746ce62 | ||
|
|
dd9359bc9f | ||
|
|
883e285d22 | ||
|
|
c3b5b85102 | ||
|
|
b8cb6023e6 | ||
|
|
f102a27ec5 | ||
|
|
cd7ef88bfa | ||
|
|
0e984e04de | ||
|
|
c9addf2791 | ||
|
|
5f5e1f296a | ||
|
|
8961a42945 | ||
|
|
0a58b23d76 | ||
|
|
9771128fab | ||
|
|
8ea7df73f6 | ||
|
|
0c88105a6f | ||
|
|
03c3614b16 | ||
|
|
a56c156299 | ||
|
|
a6a741ce10 | ||
|
|
fe1f59997c | ||
|
|
cd886320d0 | ||
|
|
4f01f3a7ca | ||
|
|
3ea44dd134 | ||
|
|
d6124fd37c | ||
|
|
4db54a10d4 | ||
|
|
63d711e1a9 | ||
|
|
364f04517a | ||
|
|
bcf559de9b | ||
|
|
8d39f95919 | ||
|
|
b3967331b2 | ||
|
|
f405f6f22c | ||
|
|
5a60cb1e89 | ||
|
|
449d7ccce8 | ||
|
|
7d266e8c4e | ||
|
|
ba7573635a | ||
|
|
160305728c | ||
|
|
09ae8fb76c | ||
|
|
30128df17d | ||
|
|
dc6f1e33f2 | ||
|
|
574d7380cf | ||
|
|
ed6000a17b | ||
|
|
f27a203690 | ||
|
|
bd728000fa | ||
|
|
11c1d3de48 | ||
|
|
be70cfb07d | ||
|
|
6677fe7969 | ||
|
|
af6f08c396 | ||
|
|
1264862024 | ||
|
|
1f1924a9e7 | ||
|
|
3eeea3f0ae | ||
|
|
ef1b170530 | ||
|
|
cb1de611c4 | ||
|
|
90c229a150 | ||
|
|
fc91de1e6b | ||
|
|
ffbdef1637 | ||
|
|
069c1e9dbb | ||
|
|
6125f5d912 | ||
|
|
6436df1860 | ||
|
|
9ec20fda64 | ||
|
|
446cbd3fda | ||
|
|
0a58bc16dd | ||
|
|
4441c32b16 | ||
|
|
9171bee9e6 | ||
|
|
1c6ae6e3e9 | ||
|
|
9f2c7488b3 | ||
|
|
f7a10e6b5f | ||
|
|
bef4366bf3 | ||
|
|
3a15aa386c | ||
|
|
72c58536c6 | ||
|
|
88740dc1bb | ||
|
|
83a8bf29e1 | ||
|
|
c04720c6ab | ||
|
|
00a41456ea | ||
|
|
5091f0b3c3 | ||
|
|
222e796cc6 | ||
|
|
992a3bed58 | ||
|
|
f302cfba09 | ||
|
|
d57a408298 | ||
|
|
ffc7b8b0b7 | ||
|
|
2a07a4848a | ||
|
|
a0e977ffe4 | ||
|
|
ef909a0e2f | ||
|
|
6573ba051f | ||
|
|
f017fedfe4 | ||
|
|
03288fad9d | ||
|
|
964b8c4ff8 | ||
|
|
90cf38b490 | ||
|
|
0bdad521db | ||
|
|
f3fe5552ee | ||
|
|
89dc501958 | ||
|
|
abc00d131e | ||
|
|
12317de2cd | ||
|
|
850fcaef40 | ||
|
|
8f8a26af33 | ||
|
|
73ad014681 | ||
|
|
9b2a334f2a | ||
|
|
cb1147aa59 | ||
|
|
1e77c1ca96 | ||
|
|
7b754942bd | ||
|
|
52ef4c57c8 | ||
|
|
3751205230 | ||
|
|
47225838d6 | ||
|
|
e57bbc02b8 | ||
|
|
f246c184b1 | ||
|
|
27e5637879 | ||
|
|
ec8d40ed0e | ||
|
|
e77a6866c7 | ||
|
|
0e1c5fcd82 | ||
|
|
3acb002ad4 | ||
|
|
ae4ac52670 | ||
|
|
5f7bad3e15 | ||
|
|
284cdb887b | ||
|
|
e745f03ad5 | ||
|
|
af5fff1201 | ||
|
|
45a0671874 | ||
|
|
2ac1df4b69 | ||
|
|
e112f3d5e7 | ||
|
|
a080169617 | ||
|
|
b0b26e5d61 | ||
|
|
6a91010537 | ||
|
|
d23f5eab8e | ||
|
|
5f5145d8a7 | ||
|
|
d771702297 | ||
|
|
9866e72dac | ||
|
|
95527c7802 | ||
|
|
6e00f57a40 | ||
|
|
de153887a9 | ||
|
|
737e66f012 | ||
|
|
8395887245 | ||
|
|
a810467fe4 | ||
|
|
5e57c21cdb | ||
|
|
d56a562e6d | ||
|
|
dae50f507f | ||
|
|
c4e200a5e0 | ||
|
|
16b1e5b53c | ||
|
|
9eb06ef622 | ||
|
|
036db735de | ||
|
|
ef876c5001 | ||
|
|
f1a9f63119 | ||
|
|
29cb707172 | ||
|
|
e780a63493 | ||
|
|
0ef1cdfa06 | ||
|
|
765a5eb4b2 | ||
|
|
f3e5c03bba | ||
|
|
d76c56f536 | ||
|
|
317cc0c207 | ||
|
|
23b23ef17b | ||
|
|
af2670ca5e | ||
|
|
b637f7b2b8 | ||
|
|
d92e6992e3 | ||
|
|
451389e110 | ||
|
|
6747f98dd1 | ||
|
|
326e477812 | ||
|
|
19e2061b8a | ||
|
|
29936c3cc0 | ||
|
|
78e4722b22 | ||
|
|
cbb6e2c00f | ||
|
|
e90f8b15b6 | ||
|
|
3438d6517b | ||
|
|
2cb4989c57 | ||
|
|
40116ba67e | ||
|
|
3233774df6 | ||
|
|
0656242a3f | ||
|
|
963818db1e | ||
|
|
b4a37ba2f9 | ||
|
|
cdc2624142 | ||
|
|
46b9799c27 | ||
|
|
2a6a7e1932 | ||
|
|
b586293489 | ||
|
|
76f4ed3df7 | ||
|
|
9072b2b6a8 | ||
|
|
6c9a7a9527 | ||
|
|
358e85a5b9 | ||
|
|
2ce8ac9ef7 | ||
|
|
f6ff5d7b72 | ||
|
|
81f7461f5e | ||
|
|
342809d41f | ||
|
|
6f73aaef03 | ||
|
|
d8743528dd | ||
|
|
00da3056cd | ||
|
|
9ccaf6d6b2 | ||
|
|
0e8607c8e2 | ||
|
|
76b8caac21 | ||
|
|
480c044525 | ||
|
|
c4156144bb | ||
|
|
d56537aefd | ||
|
|
0b4872baad | ||
|
|
03b64806a8 | ||
|
|
4f524745ae | ||
|
|
08e8a043fb | ||
|
|
15a5f0f93d | ||
|
|
1220a92b96 | ||
|
|
189c1d655b | ||
|
|
583a9363fd | ||
|
|
2b4e100f1d | ||
|
|
dcbcfecc07 | ||
|
|
bf24f2d101 | ||
|
|
3a9fa75b3f | ||
|
|
2f9f70a0cc | ||
|
|
bd0cef81ee | ||
|
|
3ef5f9f21b | ||
|
|
e91bc17882 | ||
|
|
833753a729 | ||
|
|
b67272d661 | ||
|
|
3e13084e25 | ||
|
|
943491b9f7 | ||
|
|
30a56fc5a2 | ||
|
|
e78ac7ab91 | ||
|
|
d560cf80a0 | ||
|
|
917a6c05ba | ||
|
|
5014aad480 | ||
|
|
a031d42c10 | ||
|
|
e72da0587d | ||
|
|
bfaceada9e | ||
|
|
cb9e96e7d2 | ||
|
|
b5dca9cc27 | ||
|
|
c1ed782e6b | ||
|
|
50dc1364d2 | ||
|
|
ecfa8de4b5 | ||
|
|
86a223fa6e | ||
|
|
8bc54d8952 | ||
|
|
ef5937f1e0 | ||
|
|
c0b48ea372 | ||
|
|
6c97d5456a | ||
|
|
5c1108e752 | ||
|
|
abd33efc95 | ||
|
|
d44ef758f4 | ||
|
|
9147290737 | ||
|
|
5bb376b45e | ||
|
|
69c5e3048b | ||
|
|
355fe410cb | ||
|
|
3213c38c78 | ||
|
|
93ee28d574 | ||
|
|
8af952353d | ||
|
|
8adc288110 | ||
|
|
79db7447ff | ||
|
|
3dbb7a5747 | ||
|
|
87f0e5e96a | ||
|
|
c67334828b | ||
|
|
725a4e4b41 | ||
|
|
9918463f9a | ||
|
|
0922026e49 | ||
|
|
57715de777 | ||
|
|
dab8b61506 | ||
|
|
4be3263781 | ||
|
|
ce762ceba8 | ||
|
|
7e007dac69 | ||
|
|
db488569f1 | ||
|
|
ec2d31ac32 | ||
|
|
9a18278c32 | ||
|
|
a47f46453e | ||
|
|
aa5ddc94c4 | ||
|
|
a009568031 | ||
|
|
fee13e1e0b | ||
|
|
da7710ccb1 | ||
|
|
71eaa195af | ||
|
|
b2343cc96a | ||
|
|
ed9b48ca29 | ||
|
|
31e0a0c299 | ||
|
|
96eb8b8d0a | ||
|
|
be01e4b975 | ||
|
|
94f98d2cf6 | ||
|
|
ef2a9de13b | ||
|
|
f88c052bdf | ||
|
|
94218114a6 | ||
|
|
81694e38fb | ||
|
|
6cc67d30f5 | ||
|
|
02e33d3023 | ||
|
|
099c1ea75c | ||
|
|
2026f54287 | ||
|
|
fdd0210b1f | ||
|
|
d7ce84bf02 | ||
|
|
cdb7cbb685 | ||
|
|
b5935e4c04 | ||
|
|
14c8a64fe8 | ||
|
|
5de1d75fe3 | ||
|
|
31242df558 | ||
|
|
ae2f829954 | ||
|
|
4744af42c5 | ||
|
|
1222083865 | ||
|
|
263e60b3b4 | ||
|
|
4fa8469bda | ||
|
|
e72f3c8ee6 | ||
|
|
1171eceb28 | ||
|
|
77bcc9fb77 | ||
|
|
30b3ee208f | ||
|
|
32884e62dc | ||
|
|
3933543e14 | ||
|
|
f850122e10 | ||
|
|
dfe7005fbb | ||
|
|
f09fab4c1e | ||
|
|
e7efc37d1d | ||
|
|
3d391ba5db | ||
|
|
340bdcdf33 | ||
|
|
61da32c627 | ||
|
|
d446c9250e | ||
|
|
805688f06f | ||
|
|
0a0bbb5d97 | ||
|
|
0b4c57abe8 | ||
|
|
ef2b60dd43 | ||
|
|
891ee3fa23 | ||
|
|
96ea8fcf03 | ||
|
|
18b63b5798 | ||
|
|
40d6357b22 | ||
|
|
0453f31709 | ||
|
|
7266dd6f67 | ||
|
|
ec6dd7167f | ||
|
|
8d745ea2d6 | ||
|
|
ee8204c51a | ||
|
|
52b53baeea | ||
|
|
cae4070997 | ||
|
|
18e48b2987 | ||
|
|
6e1f27bc7c | ||
|
|
9839e9cb04 | ||
|
|
9b1b1c3098 | ||
|
|
cdda78a22b | ||
|
|
ef60643d0c | ||
|
|
33e07e5f1e | ||
|
|
5516b6b347 | ||
|
|
234df5e97e | ||
|
|
0113de5a09 | ||
|
|
57777e8f33 | ||
|
|
52506ecf3d | ||
|
|
e27c3cb319 | ||
|
|
3de539bedf | ||
|
|
66e336d8b2 | ||
|
|
96842f68b0 | ||
|
|
6d6b7f9b47 | ||
|
|
21289b87b8 | ||
|
|
84da59b264 | ||
|
|
8f1ac2023c | ||
|
|
94e8012a4b | ||
|
|
6c4c53301e | ||
|
|
14d325c57a | ||
|
|
44a9e4be14 | ||
|
|
47eed6f93f | ||
|
|
187dfa2f02 | ||
|
|
59874866f4 | ||
|
|
3b0f4e7ea5 | ||
|
|
8f996e039d | ||
|
|
04fe5e41e8 | ||
|
|
d51bf89747 | ||
|
|
69060aa50d | ||
|
|
88d97988bd | ||
|
|
9c2b330fdb |
244
.clang-format
244
.clang-format
@@ -1,35 +1,42 @@
|
||||
Language: Json
|
||||
ColumnLimit: 1000
|
||||
IndentWidth: 4
|
||||
---
|
||||
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
|
||||
# for clang-format 20.0.0
|
||||
Language: Cpp
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
BasedOnStyle: "WebKit"
|
||||
# AccessModifierOffset: 2
|
||||
AlignAfterOpenBracket: "AlwaysBreak"
|
||||
AlignArrayOfStructures: None
|
||||
AlignConsecutiveMacros: None
|
||||
AlignConsecutiveAssignments: None
|
||||
AlignConsecutiveBitFields: None
|
||||
AlignConsecutiveDeclarations: None
|
||||
AlignConsecutiveMacros: None
|
||||
# AlignConsecutiveShortCaseStatements: None
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: Align
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AlignTrailingComments:
|
||||
Kind: Always
|
||||
OverEmptyLines: 1
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: Never
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: Inline
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||
# AllowShortCompoundRequirementOnASingleLine: true
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLambdasOnASingleLine: Inline
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
AttributeMacros:
|
||||
- __capability
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BreakAfterReturnType: Automatic
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
BreakTemplateDeclarations: Yes
|
||||
# AttributeMacros:
|
||||
# - __pragma
|
||||
# - _Pragma
|
||||
# - __attribute__
|
||||
# - __declspec
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
BitFieldColonSpacing: After
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: true
|
||||
@@ -37,159 +44,148 @@ BraceWrapping:
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterObjCDeclaration: true
|
||||
# AfterObjCDeclaration: true
|
||||
AfterStruct: true
|
||||
AfterUnion: false
|
||||
AfterUnion: true
|
||||
AfterExternBlock: true
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
BeforeLambdaBody: false
|
||||
BeforeWhile: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: false
|
||||
SplitEmptyNamespace: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
# BracedInitializerIndentWidth: 4
|
||||
BreakAfterAttributes: Never
|
||||
BreakAfterJavaFieldAnnotations: true
|
||||
BreakArrays: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeConceptDeclarations: true
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeInheritanceComma: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakBeforeConceptDeclarations: Always
|
||||
BreakBeforeInlineASMColon: OnlyMultiline
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakConstructorInitializers: AfterColon
|
||||
BreakInheritanceList: AfterColon
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 120
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
QualifierAlignment: Leave
|
||||
# CommentPragmas: '^ MEO pragma:'
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: false
|
||||
DeriveLineEnding: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
EmptyLineAfterAccessModifier: Never
|
||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
PackConstructorInitializers: BinPack
|
||||
BasedOnStyle: ''
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
AllowAllConstructorInitializersOnNextLine: true
|
||||
# ExperimentalAutoDetectBinPacking: true
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IfMacros:
|
||||
- KJ_IF_MAYBE
|
||||
# ForEachMacros:
|
||||
# - foreach
|
||||
# - Q_FOREACH
|
||||
# - BOOST_FOREACH
|
||||
# IfMacros:
|
||||
# - 'KJ_IF_MAYBE'
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||
Priority: 2
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
||||
Priority: 3
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: '.*'
|
||||
Priority: 1
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
IncludeIsMainRegex: '(Test)?$'
|
||||
IncludeIsMainSourceRegex: ''
|
||||
# IncludeCategories:
|
||||
# IncludeIsMainRegex:
|
||||
# IncludeIsMainSourceRegex:
|
||||
IndentAccessModifiers: false
|
||||
IndentCaseLabels: false
|
||||
IndentCaseBlocks: false
|
||||
IndentGotoLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentCaseLabels: false
|
||||
IndentExternBlock: AfterExternBlock
|
||||
IndentGotoLabels: false
|
||||
IndentPPDirectives: None
|
||||
IndentRequiresClause: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
InsertTrailingCommas: None
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
IndentWrappedFunctionNames: true
|
||||
InsertBraces: true
|
||||
InsertNewlineAtEOF: true
|
||||
InsertTrailingCommas: Wrapped
|
||||
IntegerLiteralSeparator:
|
||||
Binary: 4
|
||||
BinaryMinDigits: 9
|
||||
Decimal: 3
|
||||
DecimalMinDigits: 7
|
||||
Hex: -1
|
||||
# JavaImportGroups:
|
||||
# JavaScriptQuotes:
|
||||
# JavaScriptWrapImports:
|
||||
KeepEmptyLinesAtEOF: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
LambdaBodyIndentation: Signature
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
# LineEnding: LF
|
||||
# MacroBlockBegin: "MAA.*_NS_BEGIN$"
|
||||
# MacroBlockEnd: "MAA.*_NS_END$"
|
||||
# Macros:
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: All
|
||||
ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCBreakBeforeNestedBlockParam: true
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakOpenParenthesis: 0
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 1000
|
||||
PenaltyIndentedWhitespace: 0
|
||||
NamespaceIndentation: None
|
||||
# NamespaceMacros:
|
||||
# ObjCBinPackProtocolList:
|
||||
# ObjCBlockIndentWidth:
|
||||
# ObjCBreakBeforeNestedBlockParam:
|
||||
# ObjCSpaceAfterProperty:
|
||||
# ObjCSpaceBeforeProtocolList:
|
||||
PackConstructorInitializers: Never
|
||||
# PenaltyBreakAssignment:
|
||||
# PenaltyBreakBeforeFirstCallParameter:
|
||||
# PenaltyBreakComment:
|
||||
# PenaltyBreakFirstLessLess:
|
||||
# PenaltyBreakOpenParenthesis:
|
||||
# PenaltyBreakTemplateDeclaration:
|
||||
# PenaltyExcessCharacter:
|
||||
# PenaltyIndentedWhitespace:
|
||||
# PenaltyReturnTypeOnItsOwnLine:
|
||||
PointerAlignment: Left
|
||||
PPIndentWidth: -1
|
||||
ReferenceAlignment: Pointer
|
||||
ReflowComments: true
|
||||
# QualifierAlignment: Custom
|
||||
# QualifierOrder:
|
||||
# - inline
|
||||
# - static
|
||||
# - const
|
||||
# - constexpr
|
||||
# - type
|
||||
ReferenceAlignment: Left
|
||||
ReflowComments: Always
|
||||
RemoveBracesLLVM: false
|
||||
RemoveParentheses: Leave
|
||||
RemoveSemicolon: false
|
||||
RequiresClausePosition: OwnLine
|
||||
SeparateDefinitionBlocks: Leave
|
||||
ShortNamespaceLines: 50
|
||||
RequiresExpressionIndentation: OuterScope
|
||||
SeparateDefinitionBlocks: Always
|
||||
ShortNamespaceLines: 1000
|
||||
SortIncludes: CaseSensitive
|
||||
SortJavaStaticImport: Before
|
||||
SortUsingDeclarations: true
|
||||
# SortJavaStaticImport:
|
||||
SortUsingDeclarations: Lexicographic
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCaseColon: false
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeJsonColon: false
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeParensOptions:
|
||||
AfterControlStatements: true
|
||||
AfterForeachMacros: true
|
||||
AfterFunctionDefinitionName: false
|
||||
AfterFunctionDeclarationName: false
|
||||
AfterIfMacros: true
|
||||
AfterOverloadedOperator: false
|
||||
AfterRequiresInClause: true
|
||||
AfterRequiresInExpression: true
|
||||
BeforeNonEmptyParentheses: false
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
# SpaceBeforeParensOptions:
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceBeforeSquareBrackets: false
|
||||
SpaceInEmptyBlock: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: Never
|
||||
SpacesInConditionalStatement: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 1
|
||||
Maximum: -1
|
||||
SpacesInParentheses: false
|
||||
SpacesInParens: Never
|
||||
SpacesInSquareBrackets: false
|
||||
SpaceBeforeSquareBrackets: false
|
||||
BitFieldColonSpacing: Both
|
||||
Standard: c++20
|
||||
StatementAttributeLikeMacros:
|
||||
- Q_EMIT
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
# StatementAttributeLikeMacros:
|
||||
# StatementMacros:
|
||||
TabWidth: 4
|
||||
UseCRLF: false
|
||||
# TypeNames:
|
||||
# TypenameMacros:
|
||||
UseTab: Never
|
||||
WhitespaceSensitiveMacros:
|
||||
- STRINGIZE
|
||||
- PP_STRINGIZE
|
||||
- BOOST_PP_STRINGIZE
|
||||
- NS_SWIFT_NAME
|
||||
- CF_SWIFT_NAME
|
||||
# VerilogBreakBetweenInstancePorts:
|
||||
# WhitespaceSensitiveMacros:
|
||||
RemoveEmptyLinesInUnwrappedLines: true
|
||||
|
||||
13
.devcontainer/devcontainer.json
Normal file
13
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"image": "mcr.microsoft.com/devcontainers/cpp:ubuntu-22.04",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/python:1": {},
|
||||
"ghcr.io/devcontainers/features/sshd:1": {}
|
||||
},
|
||||
"postCreateCommand": "sudo sh -ce 'apt update && apt install g++-12 -y && echo export CC=gcc-12 CXX=g++-12 >> /etc/profile.d/set-compiler.sh'",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": ["llvm-vs-code-extensions.vscode-clangd", "DavidAnson.vscode-markdownlint"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,72 +10,3 @@ end_of_line = lf
|
||||
[*.json]
|
||||
|
||||
indent_size = 4
|
||||
|
||||
[*.{c++,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx,tlh,tli}]
|
||||
|
||||
indent_size = 4
|
||||
|
||||
# Visual C++ Code Style settings
|
||||
|
||||
cpp_generate_documentation_comments = xml
|
||||
|
||||
# Visual C++ Formatting settings
|
||||
|
||||
cpp_indent_braces = false
|
||||
cpp_indent_multi_line_relative_to = innermost_parenthesis
|
||||
cpp_indent_within_parentheses = indent
|
||||
cpp_indent_preserve_within_parentheses = true
|
||||
cpp_indent_case_contents = true
|
||||
cpp_indent_case_labels = false
|
||||
cpp_indent_case_contents_when_block = false
|
||||
cpp_indent_lambda_braces_when_parameter = true
|
||||
cpp_indent_goto_labels = one_left
|
||||
cpp_indent_preprocessor = leftmost_column
|
||||
cpp_indent_access_specifiers = false
|
||||
cpp_indent_namespace_contents = true
|
||||
cpp_indent_preserve_comments = false
|
||||
cpp_new_line_before_open_brace_namespace = new_line
|
||||
cpp_new_line_before_open_brace_type = new_line
|
||||
cpp_new_line_before_open_brace_function = new_line
|
||||
cpp_new_line_before_open_brace_block = same_line
|
||||
cpp_new_line_before_open_brace_lambda = same_line
|
||||
cpp_new_line_scope_braces_on_separate_lines = false
|
||||
cpp_new_line_close_brace_same_line_empty_type = false
|
||||
cpp_new_line_close_brace_same_line_empty_function = false
|
||||
cpp_new_line_before_catch = true
|
||||
cpp_new_line_before_else = true
|
||||
cpp_new_line_before_while_in_do_while = false
|
||||
cpp_space_before_function_open_parenthesis = remove
|
||||
cpp_space_within_parameter_list_parentheses = false
|
||||
cpp_space_between_empty_parameter_list_parentheses = false
|
||||
cpp_space_after_keywords_in_control_flow_statements = true
|
||||
cpp_space_within_control_flow_statement_parentheses = false
|
||||
cpp_space_before_lambda_open_parenthesis = false
|
||||
cpp_space_within_cast_parentheses = false
|
||||
cpp_space_after_cast_close_parenthesis = false
|
||||
cpp_space_within_expression_parentheses = false
|
||||
cpp_space_before_block_open_brace = true
|
||||
cpp_space_between_empty_braces = false
|
||||
cpp_space_before_initializer_list_open_brace = false
|
||||
cpp_space_within_initializer_list_braces = true
|
||||
cpp_space_preserve_in_initializer_list = true
|
||||
cpp_space_before_open_square_bracket = false
|
||||
cpp_space_within_square_brackets = false
|
||||
cpp_space_before_empty_square_brackets = false
|
||||
cpp_space_between_empty_square_brackets = false
|
||||
cpp_space_group_square_brackets = true
|
||||
cpp_space_within_lambda_brackets = false
|
||||
cpp_space_between_empty_lambda_brackets = false
|
||||
cpp_space_before_comma = false
|
||||
cpp_space_after_comma = true
|
||||
cpp_space_remove_around_member_operators = true
|
||||
cpp_space_before_inheritance_colon = true
|
||||
cpp_space_before_constructor_colon = true
|
||||
cpp_space_remove_before_semicolon = true
|
||||
cpp_space_after_semicolon = false
|
||||
cpp_space_remove_around_unary_operator = true
|
||||
cpp_space_around_binary_operator = insert
|
||||
cpp_space_around_assignment_operator = insert
|
||||
cpp_space_pointer_reference_alignment = left
|
||||
cpp_space_around_ternary_operator = insert
|
||||
cpp_wrap_preserve_blocks = one_liners
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
# style: clang format
|
||||
98f949346e93e5a1adaade22cda9841e01b98c0b
|
||||
290cc30f153a0206bd870a0a58cb6338aa16ea34
|
||||
db9afdc77e85d5fc462d923fca5318be021656cd
|
||||
a5daac889a55baf8895918d4964f20dad1938470
|
||||
9ed30c5658c88edf1ef839771a53c7d599183b8b
|
||||
|
||||
# incorrect format of 3rdparty/resource/Arknights-Tile-Pos/levels.json
|
||||
65d654e54b9d04d1902c9ee9f9fb2679520adafd
|
||||
@@ -20,6 +23,7 @@
|
||||
206df466fd5e3d8ef80387049b0c5011fb58cada
|
||||
c9b5aa638a97397ab8666031ea646904527afc09
|
||||
559c913fca0dd0966896396e251be13f76ea3e52
|
||||
|
||||
# Re-structure again.
|
||||
4b3b84df8f487be0ac86506c28dbebc4635f1282
|
||||
91abbb7f175b93a58368a136acf3799666f770d2
|
||||
@@ -27,3 +31,24 @@ c9b5aa638a97397ab8666031ea646904527afc09
|
||||
bae271c09bb79e5cc2a7f8491ce882d276ac97b4
|
||||
3d83b80dd67d996a5f4f1732fe1eb36cacc7605e
|
||||
21617270bcef2456cb7f89e54560ca6788450711
|
||||
|
||||
# resource/*.json prettier mass styling
|
||||
d84da5d01a872540d520bc87408d4524e07cfa39
|
||||
546bfc399cdd140a9812f44b5e6bc89fccfda5fa
|
||||
f0bdccdf0da7fac29f475951f0f43d3ab56a7ffe
|
||||
7a758bce844bc2778f04a789195efbd17681dac7
|
||||
5f3730b76785b1168125eb3b5edbed399722f8f9
|
||||
bc3ad67a02cb3b8e154c06955cf17091c4265000
|
||||
|
||||
# oxipng template optimization
|
||||
e3d63894b28b2ef5e2405e144a32a6981de5e1b2
|
||||
|
||||
# refactor: divide tasks.json into multiple jsons
|
||||
dce6e317c8e56836662b64ac4b3d1a69b4ff4dd8
|
||||
|
||||
# usage: add "[blame ignore]" to the commit message
|
||||
# This file is managed by an automated workflow
|
||||
# Do not add, remove or modify lines below this comment
|
||||
# as they are automatically appended
|
||||
# --------------------------------------------------- #
|
||||
f7772bc814c52f9a5e65af02404cf54b70fe0a32
|
||||
|
||||
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -8,4 +8,5 @@
|
||||
|
||||
*.json text eol=lf
|
||||
*.md text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.yaml text eol=lf
|
||||
|
||||
1
.github/.last-blame-ignore-commit
vendored
Normal file
1
.github/.last-blame-ignore-commit
vendored
Normal file
@@ -0,0 +1 @@
|
||||
272d71fa2938f945832f86232532b86a9e5406b8
|
||||
62
.github/ISSUE_TEMPLATE/cn-bug-report.yaml
vendored
62
.github/ISSUE_TEMPLATE/cn-bug-report.yaml
vendored
@@ -1,43 +1,74 @@
|
||||
name: Bug 反馈(使用中文)
|
||||
description: 识别错误、操作异常、连接错误等
|
||||
labels: ['bug']
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: 在提问之前...
|
||||
label: 请确认自己完成了下列要求之后再进行勾选,若未完成但勾选将被直接关闭 Issue
|
||||
options:
|
||||
- label: 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
|
||||
required: true
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我已查看最新测试版本的更新内容,并未提及该 bug 已被修复的情况
|
||||
required: true
|
||||
- label: 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
|
||||
required: true
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 Issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我使用的是当前更新版本的最新版,且已查看版本发布至今的 [更新内容](https://github.com/MaaAssistantArknights/MaaAssistantArknights/commits/dev/) 和 [Pull Requests](https://github.com/MaaAssistantArknights/MaaAssistantArknights/pulls) 中尚未发布的更新内容,并未提及该 Bug 已被修复的情况
|
||||
required: true
|
||||
- label: 我已检查了[常见问题](https://maa.plus/docs/zh-cn/manual/faq.html)、[公告](/MaaAssistantArknights/MaaAssistantArknights/issues/7732)、[活跃议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues)、[已关闭议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues?q=is%3Aissue%20state%3Aclosed),确认我的问题未被提及
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: 问题描述
|
||||
description: 尽可能详细描述你的问题
|
||||
description: 描述问题时请尽可能详细
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: |
|
||||
请提供 MAA 版本。可在 MAA -> 设置 -> 软件更新中找到。点击图标可复制。
|
||||
请分别点击 `资源版本` 和 `MAA 版本` 并粘贴,最终应有 5 行版本信息。
|
||||
placeholder: |
|
||||
Resource Version:
|
||||
MAA Version:
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: 日志文件
|
||||
label: 日志和配置文件
|
||||
description: |
|
||||
**上传 `debug` 文件夹中的 `asst.log` 和 `gui.log` 日志文件,并说明问题出现的大致时间点**
|
||||
**请在 MAA -> 设置 -> 问题反馈中找到生成日志压缩包按钮,点击并上传压缩包**
|
||||
|
||||
**请直接将完整的文件拖拽进来,而非自己裁切或复制的片段;若文件体积过大可压缩后再上传**
|
||||
|
||||
如果你在使用 MacBook,请点击屏幕左上角的“文件”,点击“打开日志文件夹”
|
||||
placeholder: |
|
||||
请确认上传文件前已关闭 MAA
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: configuration
|
||||
attributes:
|
||||
label: 配置信息
|
||||
description: |
|
||||
请说明操作系统及版本、模拟器品牌、模拟器分辨率、DPI、帧率;
|
||||
若正在使用 MuMu 12 或雷电 9,请说明截图增强是否开启;
|
||||
最后请说明 GPU 加速推理是否开启,若开启请提供 GPU 型号。
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: 截图
|
||||
label: 截图或录屏
|
||||
description: |
|
||||
如果有,添加屏幕截图以帮助解释你的问题,包括但不限于 MAA 软件截图、游戏画面截图
|
||||
`debug` 目录下按功能分类的文件夹内,有一些自动截图的错误图片,若有相关的,请一并打包上传
|
||||
|
||||
可上传屏幕截图或录制以帮助解释你的问题,包括但不限于 MAA 软件截图、游戏画面截图
|
||||
若是**识别相关问题**,请尽可能提供模拟器自带的截图工具截取的无遮挡的**原图**(或通过 adb 截取原图)
|
||||
用其他的工具(如QQ)截取的图片包含窗口边框,不利于我们排除bug
|
||||
`debug` 文件夹下有一些自动截图的错误图片,若有相关的,请一并打包上传
|
||||
用其他的工具(如QQ/微信)截取的图片包含窗口边框且长宽比、分辨率不固定,不利于我们排除bug
|
||||
若文件体积过大可压缩后再上传
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
@@ -45,7 +76,6 @@ body:
|
||||
attributes:
|
||||
label: 还有别的吗?
|
||||
description: |
|
||||
使用的模拟器?操作系统?相关的配置?链接?参考资料?
|
||||
任何能让我们对你所遇到的问题有更多了解的东西
|
||||
validations:
|
||||
required: false
|
||||
|
||||
14
.github/ISSUE_TEMPLATE/cn-feature-request.yaml
vendored
14
.github/ISSUE_TEMPLATE/cn-feature-request.yaml
vendored
@@ -1,16 +1,20 @@
|
||||
name: 需求建议(使用中文)
|
||||
description: 新功能、建议等
|
||||
labels: ['enhancement']
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: 在提问之前...
|
||||
options:
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我基本确定这是一个新功能/建议,而不是遇到了 bug(不确定的话请附上日志)
|
||||
required: true
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 Issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我基本确定这是一个新功能/建议,而不是遇到了 Bug(不确定的话请附上日志)
|
||||
required: true
|
||||
- label: 我使用的是当前更新版本的最新版,且已查看版本发布至今的 [更新内容](https://github.com/MaaAssistantArknights/MaaAssistantArknights/commits/dev/) 和 [Pull Requests](https://github.com/MaaAssistantArknights/MaaAssistantArknights/pulls) 中尚未发布的更新内容,确认我的建议未被提及
|
||||
required: true
|
||||
- label: 我已检查了 [公告](/MaaAssistantArknights/MaaAssistantArknights/issues/7732)、[活跃议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues)、[已关闭议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues?q=is%3Aissue%20state%3Aclosed),确认我的建议未被提及
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
|
||||
83
.github/ISSUE_TEMPLATE/cn-ld-report.yaml
vendored
Normal file
83
.github/ISSUE_TEMPLATE/cn-ld-report.yaml
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
name: 雷电截图增强反馈(使用中文)
|
||||
description: 有关雷电 9 截图增强功能的集中反馈
|
||||
labels: ["LD9 API"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: 在提问之前...
|
||||
options:
|
||||
- label: 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
|
||||
required: true
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 Issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我已检查了[公告](/MaaAssistantArknights/MaaAssistantArknights/issues/7732)、[活跃议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues)、[已关闭议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues?q=is%3Aissue%20state%3Aclosed),确认我的问题未被提及
|
||||
required: true
|
||||
- label: 我正在使用最新的 MAA 公测版本和最新的官版雷电 9 模拟器
|
||||
required: true
|
||||
- label: 我已参考文档确定安装路径、实例编号填写正确,并确认在关闭截图增强模式后问题消失
|
||||
required: true
|
||||
- label: 我未开启高帧率,且模拟器帧数设置为 60
|
||||
required: false
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: 问题描述
|
||||
description: 描述问题时请尽可能详细
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: |
|
||||
请提供 MAA 版本和雷电 9 版本。MAA 版本可在 MAA -> 设置 -> 软件更新中找到(点击图标可复制)。
|
||||
雷电 9 版本可在右上角菜单按钮 -> 关于雷电 中找到。
|
||||
placeholder: |
|
||||
Resource Version:
|
||||
MAA Version:
|
||||
雷电 9 版本号:
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: MAA 日志和配置文件
|
||||
description: |
|
||||
**请在 MAA -> 设置 -> 问题反馈中找到生成日志压缩包按钮,点击并上传压缩包**
|
||||
|
||||
**请直接将完整的文件拖拽进来,而非自己裁切或复制的片段;若文件体积过大可压缩后再上传**
|
||||
placeholder: |
|
||||
请确认上传文件前已关闭 MAA
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: ldlogs
|
||||
attributes:
|
||||
label: 雷电 9 诊断信息
|
||||
description: |
|
||||
**在雷电 9 右上角菜单按钮 -> 诊断信息 中点击 复制信息,并将全部内容粘贴进来。**
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: 截图
|
||||
description: |
|
||||
`debug` 目录下按功能分类的文件夹内,有一些自动截图的错误图片,若有相关的,请一并打包上传
|
||||
|
||||
可上传屏幕截图或录制以帮助解释你的问题,包括但不限于 MAA 软件截图、游戏画面截图
|
||||
若是**识别相关问题**,请尽可能提供模拟器自带的截图工具截取的无遮挡的**原图**(或通过 adb 截取原图)
|
||||
用其他的工具(如QQ/微信)截取的图片包含窗口边框且长宽比、分辨率不固定,不利于我们排除bug
|
||||
若文件体积过大可压缩后再上传
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: others
|
||||
attributes:
|
||||
label: 其他
|
||||
description: |
|
||||
GPU 加速推理是否开启,若开启请提供 GPU 型号。
|
||||
亦或者任何能让我们对你所遇到的问题有更多了解的东西
|
||||
validations:
|
||||
required: false
|
||||
84
.github/ISSUE_TEMPLATE/cn-mumu-report.yaml
vendored
Normal file
84
.github/ISSUE_TEMPLATE/cn-mumu-report.yaml
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
name: MuMu 截图增强反馈(使用中文)
|
||||
description: 有关 MuMu 截图增强功能的集中反馈
|
||||
labels: ["MuMu API"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: 在提问之前...
|
||||
options:
|
||||
- label: 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
|
||||
required: true
|
||||
- label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 Issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
|
||||
required: true
|
||||
- label: 我已检查了[公告](/MaaAssistantArknights/MaaAssistantArknights/issues/7732)、[活跃议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues)、[已关闭议题](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues?q=is%3Aissue%20state%3Aclosed),确认我的问题未被提及
|
||||
required: true
|
||||
- label: 我正在使用最新的 MAA 公测版本和最新的官版或方舟专版 MuMu 模拟器
|
||||
required: true
|
||||
- label: 我已参考文档确定安装路径、实例编号、屏幕编号填写正确,并确认在关闭截图增强模式后问题消失
|
||||
required: true
|
||||
- label: 我未开启后台保活,模拟器帧数为 60,显存使用策略为“画面表现更好”
|
||||
required: false
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: 问题描述
|
||||
description: 描述问题时请尽可能详细
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: |
|
||||
请提供 MAA 版本和 MuMu 版本。MAA 版本可在 MAA -> 设置 -> 软件更新中找到(点击图标可复制)。
|
||||
MuMu 版本可在右上角菜单按钮 -> 关于 MuMu 中找到。
|
||||
placeholder: |
|
||||
Resource Version:
|
||||
MAA Version:
|
||||
MuMu 版本号:
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: MAA 日志和配置文件
|
||||
description: |
|
||||
**请在 MAA -> 设置 -> 问题反馈中找到生成日志压缩包按钮,点击并上传压缩包**
|
||||
|
||||
**请直接将完整的文件拖拽进来,而非自己裁切或复制的片段;若文件体积过大可压缩后再上传**
|
||||
placeholder: |
|
||||
请确认上传文件前已关闭 MAA
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: mumulogs
|
||||
attributes:
|
||||
label: MuMu 问题诊断
|
||||
description: |
|
||||
**在 MuMu 右上角菜单按钮 -> 问题诊断 中点击 复制配置信息,并将全部内容粘贴进来。**
|
||||
**注意隐去 电脑出口IP地址 等以保护个人隐私**
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: 截图
|
||||
description: |
|
||||
`debug` 目录下按功能分类的文件夹内,有一些自动截图的错误图片,若有相关的,请一并打包上传
|
||||
|
||||
可上传屏幕截图或录制以帮助解释你的问题,包括但不限于 MAA 软件截图、游戏画面截图
|
||||
若是**识别相关问题**,请尽可能提供模拟器自带的截图工具截取的无遮挡的**原图**(或通过 adb 截取原图)
|
||||
用其他的工具(如QQ/微信)截取的图片包含窗口边框且长宽比、分辨率不固定,不利于我们排除bug
|
||||
若文件体积过大可压缩后再上传
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: others
|
||||
attributes:
|
||||
label: 其他
|
||||
description: |
|
||||
GPU 加速推理是否开启,若开启请提供 GPU 型号。
|
||||
亦或者任何能让我们对你所遇到的问题有更多了解的东西
|
||||
validations:
|
||||
required: false
|
||||
4
.github/ISSUE_TEMPLATE/cn-others.yaml
vendored
4
.github/ISSUE_TEMPLATE/cn-others.yaml
vendored
@@ -1,6 +1,6 @@
|
||||
name: 其他议题(使用中文)
|
||||
description: 提出问题,而不是 bug 反馈或需求建议
|
||||
labels: ['question']
|
||||
description: 提出问题,而不是 Bug 反馈或需求建议
|
||||
labels: ["question"]
|
||||
body:
|
||||
- type: textarea
|
||||
id: describe
|
||||
|
||||
88
.github/ISSUE_TEMPLATE/en-bug-report.yaml
vendored
88
.github/ISSUE_TEMPLATE/en-bug-report.yaml
vendored
@@ -2,53 +2,77 @@ name: Bug Report (in English)
|
||||
description: >-
|
||||
Recognition errors, operation abnormalities,
|
||||
connection errors, etc.
|
||||
labels: ['bug']
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Before raising the issue...
|
||||
description: |
|
||||
Please ensure that you have completed the requirements before checking the box.
|
||||
Issues with the checkbox checked but not completed will be directly closed.
|
||||
options:
|
||||
- label: >-
|
||||
I understand that Issues are for feedback and problem solving,
|
||||
not trolling the comments section, and will provide as
|
||||
much information as possible to help solve the problem.
|
||||
required: true
|
||||
- label: >-
|
||||
I filled in a short, clear title
|
||||
so that developers could quickly identify the general problem
|
||||
when going through the issue list.
|
||||
Instead of "Some suggestions", "Stuck", etc.
|
||||
required: true
|
||||
- label: >-
|
||||
I have checked the latest beta update and there is no mention
|
||||
of the bug being fixed.
|
||||
required: true
|
||||
- label: I understand that Issues are for feedback and problem solving, not trolling the comments section, and will provide as much information as possible to help solve the problem.
|
||||
required: true
|
||||
- label: I filled in a short, clear title so that developers could quickly identify the general problem when going through the issue list. Instead of "Some suggestions", "Stuck", etc.
|
||||
required: true
|
||||
- label: I am using the latest version of the current update version and have reviewed both the [Unreleased changes](https://github.com/MaaAssistantArknights/MaaAssistantArknights/commits/dev/) and there is no mention of the bug being fixed.
|
||||
required: true
|
||||
- label: I have reviewed the [FAQs](https://maa.plus/docs/en-us/manual/faq.html), [Announcement](/MaaAssistantArknights/MaaAssistantArknights/issues/7732), [Open Issue](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues), [Closed Issue](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues?q=is%3Aissue%20state%3Aclosed) to ensure that my issue/bug has not been mentioned.
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
label: Description
|
||||
description: Describe your problem in as much detail as possible.
|
||||
description: Please provide a detailed description of your issue.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: |
|
||||
Please provide the MAA version. Can be found in MAA -> Settings -> Update. Click to copy.
|
||||
Click on `Resource Version` and `MAA Version` and paste them respectively. There should be 5 lines of version information in total.
|
||||
placeholder: |
|
||||
Resource Version:
|
||||
MAA Version:
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Log files
|
||||
label: Log and config files
|
||||
description: >-
|
||||
**Upload the `asst.log` and `gui.log` log file in the `debug` folder and**
|
||||
**indicate the approximate point in time when the problem occurred.**
|
||||
**Please locate the Generate Support Payload button under MAA Settings -> Issue Report, click the button, and upload the generated zip file**
|
||||
|
||||
**Please drag and drop the full file in, not your own cuttings or copies;**
|
||||
**compress it before uploading if too large.**
|
||||
**Please drag and drop the full file in, not your own cuttings or copies; compress it before uploading if too large.**
|
||||
|
||||
If you are using MacBook, please click the "File" option in the top-left corner of the screen, then click "Open Log Folder".
|
||||
placeholder: |
|
||||
Please confirm that MAA is not running before uploading files.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: configuration
|
||||
attributes:
|
||||
label: Configuration information
|
||||
description: |
|
||||
Please specify the operating system and version, emulator brand, emulator resolution, DPI, and frame rate;
|
||||
If you are using MuMu 12 or LDPlayer 9, please specify whether Screenshot Enhancement is enabled;
|
||||
Finally, please specify whether GPU accelerated inference is enabled, and if so, provide the GPU model.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
label: Screenshots or recordings
|
||||
description: >-
|
||||
If available, add screenshots to help explain your problem,
|
||||
In the `debug` directory, within the functionally categorized folders,
|
||||
there are some error images captured automatically.
|
||||
If related to this issue, please upload them together.
|
||||
|
||||
If available, upload screenshots and recordings to help explain your problem,
|
||||
including but not limited to screenshots of MAA software,
|
||||
screenshots of game screens.
|
||||
|
||||
@@ -56,11 +80,11 @@ body:
|
||||
the **original image** taken by the emulator's own screenshot tool
|
||||
(or via adb).
|
||||
|
||||
Screenshots taken with other tools may contain the frames of the window/emulator, which makes it harder for us to debug.
|
||||
Screenshots taken with other tools may contain the frames of the window/emulator
|
||||
and their aspect ratio and resolution are inconsistent,
|
||||
which makes it harder for us to debug.
|
||||
|
||||
The `debug` folder has some automatic screenshots of the error images,
|
||||
if you have any,
|
||||
please upload them together.
|
||||
If the file siz is too large, you may compress it before uploading.
|
||||
|
||||
validations:
|
||||
required: false
|
||||
@@ -68,11 +92,7 @@ body:
|
||||
id: others
|
||||
attributes:
|
||||
label: Anthing else?
|
||||
description: >-
|
||||
Emulator used, operating system, related configuration, links,
|
||||
reference material, etc.
|
||||
|
||||
Anything that will give us more insight into the problem
|
||||
you are having.
|
||||
description: |
|
||||
Anything that will give us more insight into the problem you are having.
|
||||
validations:
|
||||
required: false
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/en-feature-request.yaml
vendored
20
.github/ISSUE_TEMPLATE/en-feature-request.yaml
vendored
@@ -1,16 +1,26 @@
|
||||
name: Feature Request (in English)
|
||||
description: New features, suggestions, etc.
|
||||
labels: ['enhancement']
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: checks
|
||||
attributes:
|
||||
label: Before raising the issue...
|
||||
options:
|
||||
- label: I filled in a short, clear title so that developers could quickly identify the general problem when going through the issue list. Instead of "Some suggestions", "Stuck", etc.
|
||||
required: true
|
||||
- label: I'm probably sure this is a new feature/suggestion and not a bug encountered (please attach logs if you're not sure)
|
||||
required: true
|
||||
- label: |
|
||||
I filled in a short, clear title so that developers could quickly identify the general problem when going through the issue list.
|
||||
Instead of "Some suggestions", "Stuck", etc.
|
||||
required: true
|
||||
- label: |
|
||||
I'm probably sure this is a new feature/suggestion and not a bug encountered (please attach logs if you're not sure).
|
||||
required: true
|
||||
- label: |
|
||||
I am using the latest version of the current update version and have reviewed both the [Unreleased changes](https://github.com/MaaAssistantArknights/MaaAssistantArknights/commits/dev/) and the [Pull requests](https://github.com/MaaAssistantArknights/MaaAssistantArknights/pulls),
|
||||
but there is no mention of this feature/suggestion being added.
|
||||
required: true
|
||||
- label: |
|
||||
I have reviewed the [Announcement](/MaaAssistantArknights/MaaAssistantArknights/issues/7732), [Open Issue](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues), [Closed Issue](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues?q=is%3Aissue%20state%3Aclosed) to ensure that my feature/suggestion has not been mentioned.
|
||||
required: true
|
||||
- type: textarea
|
||||
id: describe
|
||||
attributes:
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/en-others.yaml
vendored
2
.github/ISSUE_TEMPLATE/en-others.yaml
vendored
@@ -1,6 +1,6 @@
|
||||
name: Others (in English)
|
||||
description: Ask a question rather than a bug report or feature request.
|
||||
labels: ['question']
|
||||
labels: ["question"]
|
||||
body:
|
||||
- type: textarea
|
||||
id: describe
|
||||
|
||||
18
.github/dependabot.yaml
vendored
Normal file
18
.github/dependabot.yaml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
directory: /.github/workflows
|
||||
schedule:
|
||||
interval: weekly
|
||||
commit-message:
|
||||
prefix: ci
|
||||
assignees:
|
||||
- constrat
|
||||
- AnnAngela
|
||||
groups:
|
||||
github-actions:
|
||||
patterns:
|
||||
- "*"
|
||||
ignore:
|
||||
- dependency-name: "Nerixyz/actionsx-prettier"
|
||||
versions: ["3.0.0"]
|
||||
1043
.github/issue-checker.yml
vendored
1043
.github/issue-checker.yml
vendored
File diff suppressed because it is too large
Load Diff
16
.github/release_reviewers.yaml
vendored
Normal file
16
.github/release_reviewers.yaml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# Set to true to add reviewers to pull requests
|
||||
addReviewers: true
|
||||
|
||||
# Set to true to add assignees to pull requests
|
||||
addAssignees: false
|
||||
|
||||
# A list of reviewers to be added to pull requests (GitHub user name)
|
||||
reviewers:
|
||||
- AnnAngela
|
||||
|
||||
# A list of assignees to be added to pull requests (GitHub user name)
|
||||
assignees:
|
||||
- AnnAngela
|
||||
# A list of keywords to be skipped the process that add reviewers if pull requests include it
|
||||
# skipKeywords:
|
||||
# - wip
|
||||
38
.github/stale_cache_remover.ps1
vendored
Normal file
38
.github/stale_cache_remover.ps1
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
$totalClearedSize = 0
|
||||
$cacheList = gh cache list --json id,ref,sizeInBytes | ConvertFrom-Json
|
||||
$prCaches = $cacheList | Where-Object { $_.ref -like "*merge*" }
|
||||
|
||||
if (-not $prCaches) {
|
||||
Write-Output "No PR caches found."
|
||||
exit
|
||||
}
|
||||
|
||||
foreach ($cache in $prCaches) {
|
||||
$cacheId = $cache.id
|
||||
$cacheRef = $cache.ref
|
||||
$cacheSizeInBytes = $cache.sizeInBytes
|
||||
|
||||
if ($cacheRef -match "refs/pull/(\d+)/merge") {
|
||||
$prNumber = $matches[1]
|
||||
|
||||
Write-Host "PR #${prNumber}: " -NoNewline
|
||||
|
||||
$prStatus = gh pr view $prNumber --json state | ConvertFrom-Json
|
||||
|
||||
Write-Host $prStatus.state -NoNewline
|
||||
|
||||
if ($prStatus.state -eq "MERGED" -or $prStatus.state -eq "CLOSED") {
|
||||
Write-Host " -> DELETING"
|
||||
|
||||
gh cache delete $cacheId
|
||||
|
||||
$totalClearedSize += $cacheSizeInBytes
|
||||
}
|
||||
else {
|
||||
Write-Host ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$formattedSize = "{0:N2}" -f ($totalClearedSize / 1MB)
|
||||
Write-Output "Cleared size: $formattedSize MB"
|
||||
49
.github/workflows/blame-ignore.yml
vendored
Normal file
49
.github/workflows/blame-ignore.yml
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
name: Git Blame Ignore
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "45 21 * * *" # Runs daily at 22:00 UTC
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
blame-ignore:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false # Needed to bypass protection rules in Push changes
|
||||
|
||||
- name: Check blame
|
||||
id: check_changes
|
||||
run: |
|
||||
LAST_CHECKED_COMMIT=$(cat .github/.last-blame-ignore-commit 2>/dev/null || git rev-list --max-parents=0 HEAD)
|
||||
|
||||
git log $LAST_CHECKED_COMMIT..HEAD --pretty=format:"%H %s" --grep="\[blame ignore\]" | awk '{print $1}' >> .git-blame-ignore-revs
|
||||
|
||||
git diff --quiet .git-blame-ignore-revs
|
||||
|
||||
- name: Commit and Push changes
|
||||
if: ${{ steps.check_changes.outcome == 'failure' }}
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
git rev-parse HEAD > .github/.last-blame-ignore-commit
|
||||
|
||||
git add .github/.last-blame-ignore-commit .git-blame-ignore-revs
|
||||
git commit -m "chore: auto blame ignore" -m "[skip changelog]"
|
||||
|
||||
- name: Push changes
|
||||
if: ${{ steps.check_changes.outcome == 'failure' }}
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
branch: ${{ github.ref }}
|
||||
github_token: ${{ secrets.MAA_RESOURCE_SYNC }}
|
||||
|
||||
- name: Stop if no changes
|
||||
if: ${{ steps.check_changes.outcome == 'success' }}
|
||||
uses: andymckay/cancel-action@0.5
|
||||
39
.github/workflows/cache-delete.yml
vendored
Normal file
39
.github/workflows/cache-delete.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: Delete Cache
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [closed]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: "PR Number"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
cache-delete:
|
||||
# Run only on organization branches with PRs
|
||||
if: github.event_name == 'workflow_dispatch' ||
|
||||
github.event.pull_request.head.repo.full_name ==
|
||||
github.event.pull_request.base.repo.full_name
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Delete cache on PR merged
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
PR_NUMBER=${{ github.event.inputs.pr_number }}
|
||||
else
|
||||
PR_NUMBER=${{ github.event.pull_request.number }}
|
||||
fi
|
||||
echo "PR Number: $PR_NUMBER"
|
||||
|
||||
curl -s -L https://api.github.com/repos/Maaassistantarknights/Maaassistantarknights/actions/caches |
|
||||
jq -r --arg PR_NUMBER "refs/pull/$PR_NUMBER/merge" '.actions_caches[] | select(.ref == $PR_NUMBER) | .id' |
|
||||
while read -r id; do
|
||||
echo "Deleting cache with ID: $id"
|
||||
|
||||
curl -L -X DELETE \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/actions/caches/$id"
|
||||
done
|
||||
411
.github/workflows/ci.yml
vendored
411
.github/workflows/ci.yml
vendored
@@ -3,39 +3,53 @@ name: ci
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
- "v*"
|
||||
branches-ignore:
|
||||
- 'master'
|
||||
- "master"
|
||||
paths:
|
||||
- '3rdparty/include/**'
|
||||
- 'include/**'
|
||||
- 'src/**'
|
||||
- 'cmake/**'
|
||||
- 'CMakeLists.txt'
|
||||
- 'MAA.sln'
|
||||
- "3rdparty/include/**"
|
||||
- "include/**"
|
||||
- "src/**"
|
||||
- "cmake/**"
|
||||
- "CMakeLists.txt"
|
||||
- "MAA.sln"
|
||||
- ".github/workflows/ci.yml"
|
||||
- "!**/*.md"
|
||||
pull_request:
|
||||
branches:
|
||||
- 'dev'
|
||||
- "dev"
|
||||
paths:
|
||||
- '3rdparty/include/**'
|
||||
- 'include/**'
|
||||
- 'src/**'
|
||||
- 'cmake/**'
|
||||
- 'CMakeLists.txt'
|
||||
- 'MAA.sln'
|
||||
- "3rdparty/include/**"
|
||||
- "include/**"
|
||||
- "src/**"
|
||||
- "cmake/**"
|
||||
- "CMakeLists.txt"
|
||||
- "MAA.sln"
|
||||
- "!**/*.md"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
meta:
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
tag: ${{ steps.set_tag.outputs.tag }}
|
||||
prerelease: ${{ steps.set_pre.outputs.prerelease }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: temp
|
||||
show-progress: false
|
||||
|
||||
- name: Fetch history
|
||||
if: ${{ !startsWith(github.ref, 'refs/pull/') }}
|
||||
run: |
|
||||
@@ -47,13 +61,15 @@ jobs:
|
||||
git reset --hard origin/$(git branch --show-current) || true
|
||||
git checkout ${{ github.ref_name }}
|
||||
|
||||
- id: set_tag
|
||||
- name: Set tag
|
||||
id: set_tag
|
||||
run: |
|
||||
${{ startsWith(github.ref, 'refs/pull/') && 'cd temp' || '' }}
|
||||
echo tag=$(git describe --tags --match "v*" ${{ github.ref }} || git rev-parse --short HEAD) | tee -a $GITHUB_OUTPUT
|
||||
exit ${PIPESTATUS[0]}
|
||||
|
||||
- id: set_pre
|
||||
- name: Judge pre-release
|
||||
id: set_pre
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
||||
run: |
|
||||
if [[ '${{ steps.set_tag.outputs.tag }}' =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
@@ -61,7 +77,9 @@ jobs:
|
||||
else
|
||||
echo prerelease=true | tee -a $GITHUB_OUTPUT
|
||||
fi
|
||||
- if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
||||
|
||||
- name: Generate changelog
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
||||
run: |
|
||||
this_tag=${{ steps.set_tag.outputs.tag }}
|
||||
if [[ '${{ steps.set_pre.outputs.prerelease }}' != 'false' ]]; then
|
||||
@@ -71,13 +89,22 @@ jobs:
|
||||
fi
|
||||
echo >> CHANGELOG.md
|
||||
echo "**Full Changelog**: [$last_tag -> $this_tag](https://github.com/MaaAssistantArknights/MaaAssistantArknights/compare/${last_tag}...${this_tag})" >> CHANGELOG.md
|
||||
- uses: actions/upload-artifact@v3
|
||||
echo >> CHANGELOG.md
|
||||
echo "[已有 Mirror酱 CDK?前往 Mirror酱 高速下载](https://mirrorchyan.com/zh/projects?rid=MAA)" >> CHANGELOG.md
|
||||
|
||||
- name: Upload changelog to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
||||
with:
|
||||
name: changelog
|
||||
path: CHANGELOG.md
|
||||
|
||||
windows:
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name
|
||||
|
||||
needs: meta
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -91,17 +118,38 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Fetch submodules
|
||||
run: |
|
||||
git submodule update --init --depth 1 3rdparty/EmulatorExtras
|
||||
|
||||
- name: Cache .nuke/temp, ~/.nuget/packages
|
||||
uses: actions/cache@v3
|
||||
id: cache-nuget
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
.nuke/temp
|
||||
~/.nuget/packages
|
||||
key: ${{ runner.os }}-${{ matrix.msbuild_target }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
|
||||
- name: Restore dependencies
|
||||
if: steps.cache-nuget.outputs.cache-hit != 'true'
|
||||
run: dotnet restore
|
||||
|
||||
- name: Cache MaaDeps
|
||||
id: cache-maadeps
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
./MaaDeps
|
||||
key: ${{ runner.os }}-${{ matrix.lowercase_target }}-maadeps-${{ hashFiles('./maadeps-download.py') }}
|
||||
|
||||
- name: Bootstrap MaaDeps
|
||||
if: steps.cache-maadeps.outputs.cache-hit != 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
@@ -110,10 +158,33 @@ jobs:
|
||||
- name: Create fake event file
|
||||
shell: bash
|
||||
run: cp -v "$GITHUB_EVENT_PATH" ./event.json
|
||||
- if: startsWith(github.ref, 'refs/tags/v')
|
||||
|
||||
- name: Merge Event Data with Inputs
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
shell: bash
|
||||
run: |
|
||||
cat "$GITHUB_EVENT_PATH" | jq '. + { "inputs": {"ReleaseSimulation": "${{ needs.meta.outputs.tag }}"} }' | tee ./event.json
|
||||
|
||||
- name: Taggify Version
|
||||
run: |
|
||||
$csprojPath = "src/MaaWpfGui/MaaWpfGui.csproj"
|
||||
$csprojPath = Resolve-Path -Path $csprojPath
|
||||
$tag = '${{ needs.meta.outputs.tag }}' -replace '.*?/', ''
|
||||
if ($tag -match '\d+(\.\d+){1,3}') {
|
||||
$match = $Matches[0]
|
||||
} else {
|
||||
$match = "0.0.1"
|
||||
}
|
||||
[xml]$csproj = Get-Content -Path $csprojPath
|
||||
$node = $csproj.Project.PropertyGroup | where {$_.ApplicationVersion -ne $null}
|
||||
$node.InformationalVersion = $tag
|
||||
$node.Version = $match
|
||||
$node.FileVersion = $match
|
||||
$node.AssemblyVersion = $match
|
||||
$csproj.Save($csprojPath)
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
$env:GITHUB_WORKFLOW = 'dev-build-win' # pretend this is a dev-build-win workflow
|
||||
@@ -123,22 +194,41 @@ jobs:
|
||||
./build.cmd DevBuild
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- run: |
|
||||
|
||||
- name: Cleanup checksum file
|
||||
run: |
|
||||
rm -vf ./artifacts/checksum.json
|
||||
shell: bash
|
||||
- uses: actions/upload-artifact@v3
|
||||
|
||||
- name: Upload MAA to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MAA-win-${{ matrix.lowercase_target }}
|
||||
path: artifacts
|
||||
|
||||
ubuntu:
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name
|
||||
|
||||
needs: meta
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [aarch64, x86_64]
|
||||
permissions:
|
||||
actions: write
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Fetch submodules
|
||||
run: |
|
||||
git submodule update --init --depth 1 3rdparty/EmulatorExtras
|
||||
git submodule update --init --depth 1 src/maa-cli
|
||||
|
||||
- name: Install cross compile toolchains
|
||||
if: ${{ matrix.arch != 'x86_64' }}
|
||||
@@ -146,11 +236,7 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install g++-12-aarch64-linux-gnu g++-12-aarch64-linux-gnu
|
||||
|
||||
- name: Setup ccache
|
||||
uses: Chocobo1/setup-ccache-action@v1
|
||||
with:
|
||||
remove_stale_cache: false
|
||||
|
||||
# Caching not necessary on ubuntu runner
|
||||
- name: Bootstrap MaaDeps
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -158,12 +244,10 @@ jobs:
|
||||
python3 maadeps-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux
|
||||
|
||||
- name: Build MAA
|
||||
env:
|
||||
CC: ${{ matrix.arch == 'x86_64' && 'ccache gcc-12' || 'ccache aarch64-linux-gnu-gcc-12' }}
|
||||
CXX: ${{ matrix.arch == 'x86_64' && 'ccache g++-12' || 'ccache aarch64-linux-gnu-g++-12' }}
|
||||
run: |
|
||||
mkdir -p build
|
||||
cmake -B build \
|
||||
-DCMAKE_COMPILE_WARNING_AS_ERROR=ON \
|
||||
-DMAADEPS_TRIPLET='maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux' \
|
||||
-DINSTALL_THIRD_LIBS=ON \
|
||||
-DINSTALL_RESOURCE=ON \
|
||||
@@ -173,109 +257,247 @@ jobs:
|
||||
|
||||
mkdir -p install
|
||||
cmake --install build --prefix install
|
||||
env:
|
||||
CC: ${{ matrix.arch == 'x86_64' && 'gcc-12' || 'aarch64-linux-gnu-gcc-12' }}
|
||||
CXX: ${{ matrix.arch == 'x86_64' && 'g++-12' || 'aarch64-linux-gnu-g++-12' }}
|
||||
CMAKE_COLOR_DIAGNOSTICS: ON
|
||||
CLICOLOR_FORCE: 1
|
||||
CXXFLAGS: | # workaround for gcc bugs
|
||||
-Wno-error=restrict -Wno-error=array-bounds -Wno-error=stringop-overread -Wno-error=missing-field-initializers
|
||||
|
||||
- name: tar files
|
||||
- name: Setup Cross Compile Toolchains for CLI
|
||||
uses: ./src/maa-cli/.github/actions/setup
|
||||
with:
|
||||
os: ubuntu-latest
|
||||
target_arch: ${{ matrix.arch }}
|
||||
|
||||
- name: Build CLI
|
||||
run: |
|
||||
cargo build --release --locked --package maa-cli --features vendored-openssl
|
||||
cp -v target/$CARGO_BUILD_TARGET/release/maa $GITHUB_WORKSPACE/install/maa
|
||||
cargo build --release --locked --package maa-cli --no-default-features \
|
||||
--features git2,vendored-openssl
|
||||
cp -v target/$CARGO_BUILD_TARGET/release/maa $GITHUB_WORKSPACE/appimage-maa
|
||||
working-directory: src/maa-cli
|
||||
|
||||
- name: Build Appimage
|
||||
run: |
|
||||
sudo add-apt-repository universe
|
||||
sudo apt update
|
||||
sudo apt install libfuse2
|
||||
mkdir -pv release
|
||||
mkdir -pv Maa.AppDir/usr/share/maa
|
||||
cp -r install/* Maa.AppDir/usr/share/maa/
|
||||
wget -c https://raw.githubusercontent.com/MaaAssistantArknights/design/main/logo/maa-logo_512x512.png -O Maa.AppDir/maa.png
|
||||
mkdir -pv Maa.AppDir/usr/share/icons/hicolor/512x512/apps/
|
||||
cp -v Maa.AppDir/maa.png Maa.AppDir/usr/share/icons/hicolor/512x512/apps/
|
||||
cp -v appimage-maa Maa.AppDir/usr/share/maa/maa
|
||||
chmod a+x Maa.AppDir/usr/share/maa/maa
|
||||
|
||||
cat > Maa.AppDir/maa.desktop <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=MaaAssistantArknights
|
||||
Icon=maa
|
||||
Exec=AppRun
|
||||
Terminal=true
|
||||
Categories=Game;StrategyGame;
|
||||
Comment=An Arknights assistant
|
||||
EOF
|
||||
|
||||
ln -sv usr/share/maa/maa Maa.AppDir/AppRun
|
||||
mkdir -pv Maa.AppDir/usr/share/metainfo/
|
||||
cp -v tools/AppImage/io.github.maaassistantarknights.maaassistantarknights.metainfo.xml Maa.AppDir/usr/share/metainfo/
|
||||
wget "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
# appimagetool with embedded runtime does not support cross build, till AppImage/appimagetool 7a10b8
|
||||
wget "https://github.com/AppImage/type2-runtime/releases/download/old/runtime-fuse3-${{ matrix.arch }}"
|
||||
chmod a+x appimagetool-x86_64.AppImage
|
||||
ARCH=${{ matrix.arch }} ./appimagetool-x86_64.AppImage --runtime-file runtime-fuse3-${{ matrix.arch }} Maa.AppDir
|
||||
chmod a+x MaaAssistantArknights-${{ matrix.arch }}.AppImage
|
||||
mv -v MaaAssistantArknights-${{ matrix.arch }}.AppImage $GITHUB_WORKSPACE/release/MAA-${{ needs.meta.outputs.tag }}-linux-${{ matrix.arch }}.AppImage
|
||||
|
||||
- name: Tar files
|
||||
run: |
|
||||
mkdir -p release
|
||||
cd install
|
||||
tar czvf $GITHUB_WORKSPACE/release/MAA-${{ needs.meta.outputs.tag }}-linux-${{ matrix.arch }}.tar.gz .
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- name: Upload MAA to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MAA-linux-${{ matrix.arch }}
|
||||
path: 'release/*.tar.gz'
|
||||
path: |
|
||||
release/*.AppImage
|
||||
release/*.tar.gz
|
||||
|
||||
macOS-Core:
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name
|
||||
|
||||
needs: meta
|
||||
runs-on: macos-13
|
||||
runs-on: macos-14
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [arm64, x86_64]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Install Dependencies
|
||||
run: brew install ninja
|
||||
run: |
|
||||
brew install ninja
|
||||
|
||||
# Caching not necessary on macOS runner
|
||||
- name: Bootstrap MaaDeps
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
[[ ${{ matrix.arch }} = "arm64" ]] && triplet="arm64-osx" || triplet="x64-osx"
|
||||
python3 maadeps-download.py ${triplet}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Configure MaaCore
|
||||
run: |
|
||||
cmake -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES='${{ matrix.arch }}' -DMAA_VERSION='${{ needs.meta.outputs.tag }}'
|
||||
|
||||
- name: Build MaaCore
|
||||
run: |
|
||||
cmake --build build
|
||||
cmake --install build --prefix install
|
||||
- uses: actions/upload-artifact@v3
|
||||
|
||||
- name: Upload MAA to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MAACore-macos-${{ matrix.arch }}
|
||||
path: 'install/*.dylib'
|
||||
path: "install/*.dylib"
|
||||
|
||||
macOS-GUI:
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name
|
||||
|
||||
needs: [meta, macOS-Core]
|
||||
runs-on: macos-13
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: actions/download-artifact@v3
|
||||
show-progress: false
|
||||
|
||||
- name: Install Dependencies
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
brew install graphicsmagick imagemagick
|
||||
npm install -g create-dmg
|
||||
|
||||
- name: Fetch submodules
|
||||
run: |
|
||||
git submodule update --init --depth 1 src/MaaMacGui
|
||||
|
||||
- name: Download Arm64 MAA from Github
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: MAACore-macos-arm64
|
||||
path: install-arm64
|
||||
- uses: actions/download-artifact@v3
|
||||
|
||||
- name: Download x64 MAA from Github
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: MAACore-macos-x86_64
|
||||
path: install-x86_64
|
||||
|
||||
- name: Install Developer ID Certificate
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
uses: ssrobins/import-codesign-certs@v2
|
||||
uses: apple-actions/import-codesign-certs@v5
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.HGUANDL_SIGN_CERT_P12 }}
|
||||
p12-password: ${{ secrets.HGUANDL_SIGN_CERT_PASSWD }}
|
||||
|
||||
- name: Download Provisioning Profiles
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
uses: apple-actions/download-provisioning-profiles@v4
|
||||
with:
|
||||
bundle-id: "com.hguandl.MeoAsstMac"
|
||||
issuer-id: ${{ secrets.HGUANDL_APPSTORE_ISSUER }}
|
||||
api-key-id: ${{ secrets.HGUANDL_APPSTORE_KEYID }}
|
||||
api-private-key: ${{ secrets.HGUANDL_APPSTORE_KEY }}
|
||||
|
||||
- name: Setup Xcode Toolchain
|
||||
if: true
|
||||
run: |
|
||||
sudo xcode-select -s /Applications/Xcode_16.1.app/Contents/Developer
|
||||
|
||||
- name: Build Universal Binaries
|
||||
run: |
|
||||
mkdir build
|
||||
for LIB_NAME in $(ls install-arm64); do
|
||||
lipo -create install-arm64/$LIB_NAME install-x86_64/$LIB_NAME -output build/$LIB_NAME
|
||||
done
|
||||
|
||||
- name: Archive Runtime Files
|
||||
run: |
|
||||
mkdir runtime && cd runtime
|
||||
name='MAA-${{ needs.meta.outputs.tag }}-macos-runtime-universal'
|
||||
mkdir "$name" && cd "$name"
|
||||
cp -v ../../build/*.dylib .
|
||||
ln -vs libonnxruntime*.dylib libonnxruntime.dylib
|
||||
ln -vs libopencv_world4*.dylib libopencv_world4.dylib
|
||||
cp -vr ../../resource .
|
||||
cd .. || exit 1
|
||||
zip -yrX9 "$name.zip" "$name"
|
||||
|
||||
- name: Upload MAA runtime to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MAA-macos-runtime-universal
|
||||
path: runtime/MAA-${{ needs.meta.outputs.tag }}-macos-runtime-universal.zip
|
||||
|
||||
- name: Build XCFramework
|
||||
working-directory: build
|
||||
run: |
|
||||
xcodebuild -create-xcframework -library libMaaCore.dylib -headers ../include -output MaaCore.xcframework
|
||||
xcodebuild -create-xcframework -library libMaaDerpLearning.dylib -output MaaDerpLearning.xcframework
|
||||
xcodebuild -create-xcframework -library libfastdeploy_ppocr.dylib -output fastdeploy_ppocr.xcframework
|
||||
xcodebuild -create-xcframework -library libonnxruntime.*.dylib -output ONNXRuntime.xcframework
|
||||
xcodebuild -create-xcframework -library libopencv*.dylib -output OpenCV.xcframework
|
||||
working-directory: build
|
||||
|
||||
- name: Setup GUI Version
|
||||
run: |
|
||||
RELEASE_COUNT=$(git ls-remote --tags origin | grep refs/tags/v | awk 'END{print NR}')
|
||||
echo 'MARKETING_VERSION = ${{ needs.meta.outputs.tag }}' | tee src/MaaMacGui/Version.xcconfig
|
||||
echo 'CURRENT_PROJECT_VERSION = '"${RELEASE_COUNT}" | tee -a src/MaaMacGui/Version.xcconfig
|
||||
|
||||
- name: Build MAA
|
||||
working-directory: src/MaaMacGui
|
||||
run: |
|
||||
if ${{ startsWith(github.ref, 'refs/tags/v') }}; then
|
||||
xcodebuild -project MeoAsstMac.xcodeproj -scheme MAA archive -archivePath MAA.xcarchive -configuration Release
|
||||
xcodebuild -scheme MAA archive -archivePath MAA.xcarchive
|
||||
else
|
||||
xcodebuild CODE_SIGN_IDENTITY="-" DEVELOPMENT_TEAM="-" ONLY_ACTIVE_ARCH=NO -project MeoAsstMac.xcodeproj -scheme MAA archive -archivePath MAA.xcarchive -configuration Debug
|
||||
xcodebuild CODE_SIGNING_ALLOWED=NO -scheme MAA archive -archivePath MAA.xcarchive
|
||||
fi
|
||||
working-directory: src/MaaMacGui
|
||||
|
||||
- name: Export MAA
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
xcodebuild -exportArchive -archivePath MAA.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath Export
|
||||
working-directory: src/MaaMacGui
|
||||
run: xcodebuild -exportArchive -archivePath MAA.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath Export
|
||||
|
||||
- name: Create Disk Image
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
working-directory: src/MaaMacGui
|
||||
run: |
|
||||
mkdir Image
|
||||
mv Export/MAA.app Image/
|
||||
ln -s /Applications Image/
|
||||
hdiutil create -volname MAA -srcfolder Image -ov -fs APFS -format ULMO MAA.dmg
|
||||
create-dmg Export/MAA.app
|
||||
mv MAA*.dmg MAA.dmg
|
||||
working-directory: src/MaaMacGui
|
||||
|
||||
- name: Archive Debug Symbols
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
ditto -c -k --keepParent MAA.app.dSYM MAA.app.dSYM.zip
|
||||
working-directory: src/MaaMacGui/MAA.xcarchive/dSYMs
|
||||
run: ditto -c -k --keepParent MAA.app.dSYM MAA.app.dSYM.zip
|
||||
|
||||
- name: Place Packages
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
@@ -285,46 +507,75 @@ jobs:
|
||||
mkdir -p release
|
||||
mv src/MaaMacGui/MAA.dmg release/${APP_DMG}
|
||||
mv src/MaaMacGui/MAA.xcarchive/dSYMs/MAA.app.dSYM.zip release/${APP_SYM}
|
||||
|
||||
- name: Notarize Image
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
uses: nick-fields/retry@v3
|
||||
with:
|
||||
max_attempts: 3
|
||||
timeout_minutes: 15
|
||||
command: |
|
||||
cd release
|
||||
echo "$APPSTORE_KEY" > "AuthKey_${APPSTORE_KEYID}.p8"
|
||||
dmg="MAA-${{ needs.meta.outputs.tag }}-macos-universal.dmg"
|
||||
xcrun notarytool submit -k "AuthKey_${APPSTORE_KEYID}.p8" -d "$APPSTORE_KEYID" -i "$ISSUER_ID" --wait ${dmg}
|
||||
env:
|
||||
NOTARY_USER: ${{ secrets.HGUANDL_NOTARY_AAPL_ID }}
|
||||
NOTARY_PASSWD: ${{ secrets.HGUANDL_NOTARY_PASSWD }}
|
||||
NOTARY_TEAM: ${{ secrets.HGUANDL_SIGN_IDENTITY }}
|
||||
working-directory: release
|
||||
APPSTORE_KEYID: ${{ secrets.HGUANDL_APPSTORE_KEYID }}
|
||||
APPSTORE_KEY: ${{ secrets.HGUANDL_APPSTORE_KEY }}
|
||||
ISSUER_ID: ${{ secrets.HGUANDL_APPSTORE_ISSUER }}
|
||||
|
||||
- name: Attach Notarization Tickets
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
find . -name "*.dmg" | while read dmg; do
|
||||
codesign -s "$NOTARY_TEAM" --timestamp ${dmg}
|
||||
xcrun notarytool submit --apple-id "$NOTARY_USER" --password "$NOTARY_PASSWD" --team-id "$NOTARY_TEAM" --wait ${dmg}
|
||||
xcrun stapler staple ${dmg}
|
||||
done
|
||||
- uses: actions/upload-artifact@v3
|
||||
dmg="MAA-${{ needs.meta.outputs.tag }}-macos-universal.dmg"
|
||||
xcrun stapler staple ${dmg}
|
||||
working-directory: release
|
||||
|
||||
- name: Upload MAA to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MAA-macos-universal
|
||||
path: ${{ startsWith(github.ref, 'refs/tags/v') && 'release/MAA*' || 'src/MaaMacGui/MAA.xcarchive/**' }}
|
||||
|
||||
release:
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
needs: [meta, windows, ubuntu, macOS-GUI]
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: (github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name) && startsWith(github.ref, 'refs/tags/v')
|
||||
|
||||
needs: [meta, windows, ubuntu, macOS-Core, macOS-GUI]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/download-artifact@v3
|
||||
- name: Download MAA from Github
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: assets
|
||||
- run: |
|
||||
|
||||
- name: Cleanup files
|
||||
run: |
|
||||
mv -vf assets/changelog/* .
|
||||
rm -rf assets/MAACore-macos-*
|
||||
cd assets
|
||||
# find . -type f | xargs mv -fvt .
|
||||
find . -type f | while read f; do mv -fvt . $f; done
|
||||
- uses: softprops/action-gh-release@v1
|
||||
|
||||
- name: Release to Github
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body_path: CHANGELOG.md
|
||||
files: |
|
||||
assets/*
|
||||
prerelease: ${{ needs.meta.outputs.prerelease != 'false' }}
|
||||
|
||||
- name: Trigger MirrorChyan
|
||||
run: |
|
||||
gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan
|
||||
gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_release_note
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Trigger secondary workflows # ref: https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
|
||||
run: |
|
||||
gh workflow run --repo $GITHUB_REPOSITORY release-ota
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
|
||||
73
.github/workflows/gen-changelog.yml
vendored
73
.github/workflows/gen-changelog.yml
vendored
@@ -2,38 +2,75 @@ name: gen-changelog
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, reopened, ready_for_review]
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- ready_for_review
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
gen:
|
||||
if: github.event.pull_request.draft == false && (startsWith(github.event.pull_request.title, 'Release v') || startsWith(github.event.pull_request.title, 'release v'))
|
||||
# startsWith 表达式不区分大小写
|
||||
if: github.event.pull_request.draft == false && startsWith(github.event.pull_request.title, 'Release v')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
show-progress: false
|
||||
|
||||
- name: Extract Tag Name
|
||||
- name: Extract tag name
|
||||
id: extract_tag
|
||||
env:
|
||||
PR_BODY: ${{ format('{0}/{1}', runner.temp, 'output' ) }}
|
||||
run: |
|
||||
tag_name=$(echo "${{ github.event.pull_request.title }}" | sed -E 's/(Release|release)//' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
||||
echo "tag_name=$tag_name" >> $GITHUB_OUTPUT
|
||||
|
||||
|
||||
pr_title="docs: Auto Update Changelogs of "$tag_name
|
||||
echo "pr_title=$pr_title" >> $GITHUB_OUTPUT
|
||||
|
||||
latest_stable_tag=$(git tag -l 'v*' | grep -v '-' | sort -V | tail -n 1) # 上一个 stable 版本
|
||||
newest_tag=$(git describe --tags --match "v*" --abbrev=0) # 最新版本
|
||||
echo "latest_stable_tag=$latest_stable_tag" >> $GITHUB_OUTPUT
|
||||
echo "newest_tag=$newest_tag" >> $GITHUB_OUTPUT
|
||||
|
||||
if [[ $tag_name == *-* ]]; then # 判断新版本是否为 beta 版本
|
||||
latest=$newest_tag # 若是,则将 latest 参数设置为最新版本
|
||||
else
|
||||
latest=$latest_stable_tag # 若否,则设置为上一个 stable 版本
|
||||
fi
|
||||
|
||||
echo "latest=$latest" >> $GITHUB_OUTPUT
|
||||
|
||||
cat $GITHUB_OUTPUT
|
||||
|
||||
echo '======='
|
||||
|
||||
echo 'Target RP: ${{ github.event.pull_request.html_url }}' >> $PR_BODY
|
||||
echo '' >> $PR_BODY
|
||||
echo '<details><summary>Debug info</summary>' >> $PR_BODY
|
||||
echo '' >> $PR_BODY
|
||||
echo '```' >> $PR_BODY
|
||||
sed 's/=/: /1' $GITHUB_OUTPUT >> $PR_BODY
|
||||
echo '```' >> $PR_BODY
|
||||
echo '' >> $PR_BODY
|
||||
echo '</details>' >> $PR_BODY
|
||||
|
||||
cat $PR_BODY
|
||||
|
||||
- name: Generate Changelog
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
git switch dev
|
||||
python3 tools/ChangelogGenerator/changelog_generator.py --tag "${{ steps.extract_tag.outputs.tag_name }}"
|
||||
python3 tools/ChangelogGenerator/changelog_generator.py --tag "${{ steps.extract_tag.outputs.tag_name }}" --latest "${{ steps.extract_tag.outputs.latest }}"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Add files to git
|
||||
run: |
|
||||
git status
|
||||
|
||||
|
||||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
git add .
|
||||
@@ -42,11 +79,21 @@ jobs:
|
||||
git commit -m "$commit_msg"
|
||||
|
||||
- name: Create PR
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
sign-commits: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
title: ${{ steps.extract_tag.outputs.pr_title }}
|
||||
body: ${{ github.event.pull_request.html_url }}
|
||||
base: 'dev'
|
||||
branch: 'changelog'
|
||||
body-path: ${{ format('{0}/{1}', runner.temp, 'output' ) }}
|
||||
base: "dev"
|
||||
branch: "changelog"
|
||||
delete-branch: true
|
||||
reviewers: |
|
||||
AnnAngela
|
||||
assignees: |
|
||||
AnnAngela
|
||||
|
||||
- name: Add reviewers to release PR
|
||||
uses: kentaro-m/auto-assign-action@v2.0.0
|
||||
with:
|
||||
configuration-path: ".github/release_reviewers.yaml"
|
||||
|
||||
13
.github/workflows/issue-checker.yml
vendored
13
.github/workflows/issue-checker.yml
vendored
@@ -1,4 +1,5 @@
|
||||
name: "Issue Checker"
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
@@ -16,9 +17,9 @@ jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: zzyyyl/issue-checker@v1.7
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
configuration-path: .github/issue-checker.yml
|
||||
not-before: 2022-08-05T00:00:00Z
|
||||
include-title: 1
|
||||
- uses: MaaAssistantArknights/issue-checker@v1.14
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
configuration-path: .github/issue-checker.yml
|
||||
not-before: 2022-08-05T00:00:00Z
|
||||
include-title: 1
|
||||
|
||||
64
.github/workflows/markdown-checker.yml
vendored
Normal file
64
.github/workflows/markdown-checker.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
name: Check Dead Links
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * 2" # Every Tuesday at 00:00 UTC
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- "**/*.md"
|
||||
- "docs/**"
|
||||
- ".github/workflows/markdown-checker.yml"
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- "**/*.md"
|
||||
- "docs/**"
|
||||
- ".github/workflows/markdown-checker.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
check-links:
|
||||
if: github.repository_owner == 'MaaAssistantArknights' && github.event.head_commit.author.email != '41898282+github-actions[bot]@users.noreply.github.com'
|
||||
name: Check Dead Links
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Cache Primes
|
||||
id: cache-primes
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .lycheecache
|
||||
key: lychee-cache
|
||||
|
||||
- name: Check dead links
|
||||
uses: lycheeverse/lychee-action@v2
|
||||
with:
|
||||
# 仅检查内部链接,排除所有外部链接
|
||||
args: >
|
||||
--verbose --no-progress
|
||||
--cache --max-cache-age 1d --cache-exclude-status '429, 500..599'
|
||||
--exclude 'https?://.*'
|
||||
--exclude-path 'docs/zh-tw/manual/introduction/introduction_old.md'
|
||||
--exclude-path 'docs/ja-jp/manual/introduction/introduction_old.md'
|
||||
--exclude 'files/MAA_Runtime_Fix_Pwsh.ps1$'
|
||||
-- './docs/**/*.md' './README.md'
|
||||
|
||||
- name: Comment (only for PR)
|
||||
if: failure() && github.event_name == 'pull_request'
|
||||
uses: marocchino/sticky-pull-request-comment@v2
|
||||
with:
|
||||
message: |
|
||||
Dead links found in the documentation. Please fix them.
|
||||
Details: https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/${{ github.run_id }}
|
||||
71
.github/workflows/mirrorchyan.yml
vendored
Normal file
71
.github/workflows/mirrorchyan.yml
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
name: mirrorchyan
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
mirrorchyan:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- name: Upload MAA win x64
|
||||
uses: MirrorChyan/uploading-action@v1
|
||||
if: always()
|
||||
with:
|
||||
filetype: latest-release
|
||||
filename: "*MAA-*-win-x64.zip"
|
||||
mirrorchyan_rid: MAA
|
||||
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
repo: ${{ github.event.repository.name }}
|
||||
upload_token: ${{ secrets.MirrorChyanUploadToken }}
|
||||
os: win
|
||||
arch: x64
|
||||
|
||||
- name: Upload MAA win arm64
|
||||
uses: MirrorChyan/uploading-action@v1
|
||||
if: always()
|
||||
with:
|
||||
filetype: latest-release
|
||||
filename: "*MAA-*-win-arm64.zip"
|
||||
mirrorchyan_rid: MAA
|
||||
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
repo: ${{ github.event.repository.name }}
|
||||
upload_token: ${{ secrets.MirrorChyanUploadToken }}
|
||||
os: win
|
||||
arch: arm64
|
||||
|
||||
- name: Upload MAA macos arm64
|
||||
uses: MirrorChyan/uploading-action@v1
|
||||
if: always()
|
||||
with:
|
||||
filetype: latest-release
|
||||
filename: "MAA-*-macos-universal.dmg"
|
||||
extra_zip: true
|
||||
mirrorchyan_rid: MAA
|
||||
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
repo: ${{ github.event.repository.name }}
|
||||
upload_token: ${{ secrets.MirrorChyanUploadToken }}
|
||||
os: macos
|
||||
arch: arm64
|
||||
|
||||
- name: Upload MAA macos x64
|
||||
uses: MirrorChyan/uploading-action@v1
|
||||
if: always()
|
||||
with:
|
||||
filetype: latest-release
|
||||
filename: "MAA-*-macos-universal.dmg"
|
||||
extra_zip: true
|
||||
mirrorchyan_rid: MAA
|
||||
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
repo: ${{ github.event.repository.name }}
|
||||
upload_token: ${{ secrets.MirrorChyanUploadToken }}
|
||||
os: macos
|
||||
arch: x64
|
||||
19
.github/workflows/mirrorchyan_release_note.yml
vendored
Normal file
19
.github/workflows/mirrorchyan_release_note.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
name: mirrorchyan_release_note
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [edited]
|
||||
|
||||
jobs:
|
||||
mirrorchyan:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- name: Release Note for MAA
|
||||
uses: MirrorChyan/release-note-action@v1
|
||||
with:
|
||||
mirrorchyan_rid: MAA
|
||||
|
||||
upload_token: ${{ secrets.MirrorChyanUploadToken }}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
109
.github/workflows/optimize-templates.yml
vendored
Normal file
109
.github/workflows/optimize-templates.yml
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
name: Optimize PNG Templates
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "dev"
|
||||
paths:
|
||||
- "resource/**/*.png"
|
||||
- "docs/.vuepress/public/images/**"
|
||||
- "website/apps/web/public/**"
|
||||
- "website/apps/web/src/assets/links/**"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit_message:
|
||||
description: "Commit Message"
|
||||
type: string
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
optimize-png:
|
||||
# Skip workflow to prevent double consecutive runs
|
||||
# Skip workflow on PR merges
|
||||
if: github.repository_owner == 'MaaAssistantArknights' && ${{ github.event.head_commit.author.email != '41898282+github-actions[bot]@users.noreply.github.com' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check for direct push
|
||||
id: check_push
|
||||
run: |
|
||||
if [[ "${{ github.event_name }}" != "workflow_dispatch" ]]; then
|
||||
pr_merge_status=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
"https://api.github.com/repos/${{ github.repository }}/commits/${{ github.event.after }}/pulls" | xargs)
|
||||
|
||||
if [[ "$pr_merge_status" == "[ ]" ]]; then
|
||||
echo "Direct push detected. Proceeding..."
|
||||
echo "is_pr=False" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "PR merge detected. Exiting."
|
||||
echo "is_pr=True" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
else
|
||||
echo "Manual trigger detected. Proceeding..."
|
||||
echo "is_pr=False" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Checkout repository
|
||||
if: steps.check_push.outputs.is_pr != 'True'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup python
|
||||
if: steps.check_push.outputs.is_pr != 'True'
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.11"
|
||||
|
||||
# - name: Cache Python packages
|
||||
# id: cache_python
|
||||
# if: steps.check_push.outputs.is_pr != 'True' && always()
|
||||
# uses: actions/cache@v4
|
||||
# with:
|
||||
# path: ${{ env.pythonLocation }}/lib/python3.11/site-packages
|
||||
# key: ${{ runner.os }}-pip-optimize-templates-${{ hashFiles('./tools/OptimizeTemplates/requirements.txt') }}
|
||||
|
||||
- name: Install dependencies
|
||||
# if: steps.check_push.outputs.is_pr != 'True' && steps.cache_python.outputs.cache-hit != 'true'
|
||||
if: steps.check_push.outputs.is_pr != 'True'
|
||||
run: |
|
||||
pip install -r tools/OptimizeTemplates/requirements.txt
|
||||
|
||||
- name: Setup oxipng
|
||||
if: steps.check_push.outputs.is_pr != 'True'
|
||||
uses: baptiste0928/cargo-install@v3
|
||||
with:
|
||||
crate: oxipng
|
||||
|
||||
- name: Run optimize_templates
|
||||
if: steps.check_push.outputs.is_pr != 'True'
|
||||
run: |
|
||||
python3 tools/OptimizeTemplates/optimize_templates.py
|
||||
|
||||
- name: Commit changes
|
||||
id: commit_changes
|
||||
if: steps.check_push.outputs.is_pr != 'True'
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
git add .
|
||||
|
||||
if git diff-index --quiet HEAD --; then
|
||||
echo "No changes to commit"
|
||||
else
|
||||
commit_msg="${{ github.event.inputs.commit_message }}"
|
||||
if [ -z "$commit_msg" ]; then
|
||||
commit_msg="chore: Auto Templates Optimization"
|
||||
fi
|
||||
git commit -m "$commit_msg" -m "Triggered by ${{github.sha}}" -m "[skip changelog]"
|
||||
git pull origin $(git rev-parse --abbrev-ref HEAD) --unshallow --rebase
|
||||
echo "have_commits=True" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Push changes
|
||||
if: steps.check_push.outputs.is_pr != 'True' && steps.commit_changes.outputs.have_commits == 'True'
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.MAA_RESOURCE_SYNC }}
|
||||
branch: ${{ github.ref }}
|
||||
8
.github/workflows/pr-auto-tag.yml
vendored
8
.github/workflows/pr-auto-tag.yml
vendored
@@ -18,16 +18,18 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
|
||||
- name: Git config
|
||||
run: |
|
||||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Extract Tag Name
|
||||
- name: Extract tag name
|
||||
id: extract_tag
|
||||
run: |
|
||||
if ${{ github.event_name != 'workflow_dispatch' }}; then
|
||||
@@ -37,7 +39,7 @@ jobs:
|
||||
echo "tag_name=${{ inputs.tag }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Create Release Tag and push
|
||||
- name: Create release tag and push
|
||||
run: |
|
||||
git tag -a "${{ steps.extract_tag.outputs.tag_name }}" -m "${{ steps.extract_tag.outputs.tag_name }}" -f
|
||||
git push origin "${{ steps.extract_tag.outputs.tag_name }}"
|
||||
|
||||
58
.github/workflows/pr-checker.yml
vendored
Normal file
58
.github/workflows/pr-checker.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
name: PR Checker
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, edited, ready_for_review, reopened, synchronize]
|
||||
|
||||
jobs:
|
||||
check_commit_name_in_pr:
|
||||
if: ${{ !github.event.pull_request.merged && github.base_ref != 'master' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Cleanup Previous Comment
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const { data: comments } = await github.rest.issues.listComments({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.payload.pull_request.number
|
||||
});
|
||||
|
||||
const previousComment = comments.find(comment => comment.user.login === 'github-actions[bot]' && comment.body.includes('invalid commit(s)'));
|
||||
if (previousComment) {
|
||||
await github.rest.issues.deleteComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
comment_id: previousComment.id
|
||||
});
|
||||
}
|
||||
- name: Check Commits
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const { data: commits } = await github.rest.pulls.listCommits({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.payload.pull_request.number,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
const regex = /^((build|chore|ci|docs?|feat!?|fix|perf|refactor|rft|style|test|i18n|typo|debug)[\:\.\(\,]|[Rr]evert|[Rr]elease|[Rr]eapply)/;
|
||||
const invalidCommits = commits.filter(commit => !regex.test(commit.commit.message) || commit.parents.length > 1);
|
||||
|
||||
console.log(`Checked ${commits.length} commit(s)`);
|
||||
|
||||
if (invalidCommits.length > 0) {
|
||||
const invalidCommitNames = invalidCommits.map(commit => commit.commit.message);
|
||||
const invalidCommitInfoList = invalidCommits.map(commit => `- ${commit.commit.message.split("\n")[0]} [\`${commit.sha.substring(0, 7)}\`](${commit.html_url})`).join("\n");
|
||||
|
||||
github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.payload.pull_request.number,
|
||||
body: `## ⚠️ Found ${invalidCommits.length} invalid commit(s):\n\n${invalidCommitInfoList}\n\n---\nPlease follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format, and **DO NOT** use merge commits.\n请遵循 [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) 格式,以及**不要**使用Merge Commit(修改 Commit Message 无法绕过检测)。`
|
||||
});
|
||||
|
||||
core.setFailed(`Found ${invalidCommits.length} invalid commit(s):\n${invalidCommitNames.join("\n-------------------\n")}`);
|
||||
}
|
||||
310
.github/workflows/release-nightly-ota.yml
vendored
310
.github/workflows/release-nightly-ota.yml
vendored
@@ -1,35 +1,36 @@
|
||||
name: release-nightly-ota
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 22 * * *" # Runs daily at 22:00 UTC
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_body:
|
||||
description: 'Release note'
|
||||
description: "Release note"
|
||||
type: string
|
||||
required: false
|
||||
ref:
|
||||
description: 'Commit to build (git checkout)'
|
||||
description: "Commit to build (git checkout)"
|
||||
type: string
|
||||
required: false
|
||||
limit:
|
||||
description: 'Number of releases to fetch from MaaAssistantArknights'
|
||||
limit_maa:
|
||||
description: "Number of releases to fetch from MaaAssistantArknights"
|
||||
required: true
|
||||
default: 30
|
||||
default: "10"
|
||||
type: number
|
||||
limit_2:
|
||||
description: 'Number of releases to fetch from MaaRelease'
|
||||
limit_mr:
|
||||
description: "Number of releases to fetch from MaaRelease"
|
||||
required: true
|
||||
default: 30
|
||||
default: "10"
|
||||
type: number
|
||||
|
||||
jobs:
|
||||
|
||||
build-win-nightly:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- msbuild_target: x64
|
||||
lowercase_target: x64
|
||||
msbuild_target: [x64]
|
||||
fail-fast: false
|
||||
env:
|
||||
MAABUILDER_TARGET_PLATFORM: ${{ matrix.msbuild_target }}
|
||||
@@ -37,67 +38,186 @@ jobs:
|
||||
tag: ${{ steps.set_tag.outputs.tag }}
|
||||
pre_version: ${{ steps.set_tag.outputs.pre_version }}
|
||||
main_tag_name: ${{ steps.push_main_tag.outputs.main_tag_name }}
|
||||
changelog: ${{ steps.read_changelog.outputs.content }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
# repository: 'MaaAssistantArknights/MaaAssistantArknights'
|
||||
submodules: recursive
|
||||
#ref: ${{ inputs.ref }}
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Checkout ref
|
||||
run: |
|
||||
if ("${{ inputs.ref }}" -ne "") {
|
||||
git checkout --progress --recurse-submodules ${{ inputs.ref || 'dev' }}
|
||||
}
|
||||
- run: |
|
||||
npm install --global --progress semver
|
||||
fetch-depth: 250
|
||||
|
||||
- name: Set tag
|
||||
- name: Fetch tags
|
||||
run: |
|
||||
git fetch --depth=250 --tags
|
||||
|
||||
- name: Fetch submodules
|
||||
run: |
|
||||
git submodule update --init --depth 1 3rdparty/EmulatorExtras
|
||||
|
||||
- name: Checkout ref (if provided)
|
||||
if: inputs.ref != ''
|
||||
run: |
|
||||
git checkout --progress --recurse-submodules ${{ inputs.ref }}
|
||||
|
||||
- name: Check for Changes and Set tag
|
||||
id: set_tag
|
||||
run: |
|
||||
$described = $(git describe --tags --long --match 'v*')
|
||||
$ids = $($described -split "-")
|
||||
if ($ids.length -eq 3) {
|
||||
$ver = "v$(semver --increment $ids[0].Substring(1))"
|
||||
$pre_version = "$($ids[0])"
|
||||
$dist = `printf "%03d"` $ids[1]
|
||||
echo "tag=$ver-alpha.1.d$($dist).$($ids[2])" >> $env:GITHUB_OUTPUT
|
||||
echo "pre_version=$pre_version" >> $env:GITHUB_OUTPUT
|
||||
# Fetch the latest tag from the repository
|
||||
$latest_tag = git describe --tags --abbrev=0
|
||||
|
||||
Write-Output "Previous Tag: $latest_tag"
|
||||
Write-Output "latest_tag=$latest_tag" >> $env:GITHUB_OUTPUT
|
||||
|
||||
# Check for changes between the latest tag and HEAD
|
||||
$recent_changes = git log "$latest_tag..HEAD" --oneline
|
||||
|
||||
if (-not $recent_changes) {
|
||||
Write-Output "No commits. Cancelling workflow..."
|
||||
Write-Output "cancel_run=true" >> $env:GITHUB_ENV
|
||||
exit 0
|
||||
} else {
|
||||
Write-Output "Recent commits: $recent_changes"
|
||||
Write-Output "Commits found. Continuing build..."
|
||||
Write-Output "cancel_run=false" >> $env:GITHUB_ENV
|
||||
}
|
||||
|
||||
# Get the full description of the current commit
|
||||
$described = git describe --tags --long --match 'v*'
|
||||
Write-Output "New Described: $described"
|
||||
$ids = $described -split "-"
|
||||
|
||||
if ($ids.Length -eq 3) {
|
||||
# Extract and parse the current version
|
||||
$current_version = $ids[0].Substring(1)
|
||||
$parts = $current_version -split '\.'
|
||||
if ($parts.Length -ne 3) {
|
||||
Write-Error "Invalid version format: $current_version. Expected 'major.minor.patch'."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Increment the patch version
|
||||
$parts[2] = [int]$parts[2] + 1
|
||||
$new_version = "$($parts[0]).$($parts[1]).$($parts[2])"
|
||||
|
||||
# Construct the new tag and pre_version
|
||||
$ver = "v$new_version"
|
||||
$pre_version = $ids[0]
|
||||
$dist = "{0:D3}" -f [int]$ids[1]
|
||||
|
||||
Write-Output "pre_version=$pre_version" >> $env:GITHUB_OUTPUT
|
||||
Write-Output "New Tag: $ver-alpha.1.d$dist.$($ids[2])"
|
||||
Write-Output "tag=$ver-alpha.1.d$dist.$($ids[2])" >> $env:GITHUB_OUTPUT
|
||||
|
||||
exit 0
|
||||
}
|
||||
if ($ids.length -eq 4) {
|
||||
$dist = `printf "%03d"` $ids[2]
|
||||
$pre_version = "$($ids[0])""-""$($ids[1])"
|
||||
echo "tag=$($ids[0])-$($ids[1]).d$($dist).$($ids[3])" >> $env:GITHUB_OUTPUT
|
||||
echo "pre_version=$pre_version" >> $env:GITHUB_OUTPUT
|
||||
|
||||
if ($ids.Length -eq 4) {
|
||||
$dist = "{0:D3}" -f [int]$ids[2]
|
||||
$pre_version = "$($ids[0])-$($ids[1])"
|
||||
|
||||
Write-Output "Pre Version: $pre_version"
|
||||
Write-Output "pre_version=$pre_version" >> $env:GITHUB_OUTPUT
|
||||
|
||||
Write-Output "tag: $pre_version.d$dist.$($ids[3])"
|
||||
Write-Output "tag=$pre_version.d$dist.$($ids[3])" >> $env:GITHUB_OUTPUT
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
exit 1
|
||||
|
||||
- name: Push tag to main repo
|
||||
id: push_main_tag
|
||||
- name: Stop if no changes
|
||||
if: env.cancel_run == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
git config user.name 'github-actions[bot]'
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
|
||||
$main_tag_name=$(echo "alpha/${{ steps.set_tag.outputs.tag }}")
|
||||
git tag $main_tag_name -f
|
||||
git push --tags origin HEAD:refs/tags/$main_tag_name -f
|
||||
echo "main_tag_name=$main_tag_name" >> $env:GITHUB_OUTPUT
|
||||
curl -s -L -X POST `
|
||||
-H "Accept: application/vnd.github+json" `
|
||||
-H "Authorization: Bearer ${{ secrets.MAA_ACTION_READ_WRITE }}" `
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" `
|
||||
"https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/actions/runs/${{ github.run_id }}/cancel" > $null
|
||||
|
||||
gh run watch ${{ github.run_id }}
|
||||
|
||||
- name: Generate Changelog
|
||||
id: generate_changelog
|
||||
run: |
|
||||
python3 tools/ChangelogGenerator/changelog_generator.py --latest "${{ steps.set_tag.outputs.latest_tag }}" --tag "${{ steps.set_tag.outputs.tag }}"
|
||||
Get-Content .\changelog.md | Select-Object -Skip 2 | Out-File -FilePath changelog_notag.md -Encoding utf8
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PYTHONIOENCODING: "utf-8"
|
||||
|
||||
- name: Stop if no changes
|
||||
if: steps.generate_changelog.outputs.cancel_run == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
curl -s -L -X POST `
|
||||
-H "Accept: application/vnd.github+json" `
|
||||
-H "Authorization: Bearer ${{ secrets.MAA_ACTION_READ_WRITE }}" `
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" `
|
||||
"https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/actions/runs/${{ github.run_id }}/cancel" > $null
|
||||
|
||||
gh run watch ${{ github.run_id }}
|
||||
|
||||
- name: Read Changelog to variable
|
||||
id: read_changelog
|
||||
uses: juliangruber/read-file-action@v1
|
||||
with:
|
||||
path: ./changelog_notag.md
|
||||
|
||||
- name: Cache .nuke/temp, ~/.nuget/packages
|
||||
uses: actions/cache@v3
|
||||
id: cache-nuget
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
.nuke/temp
|
||||
~/.nuget/packages
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
key: ${{ runner.os }}-${{ matrix.msbuild_target }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
|
||||
|
||||
- name: Restore dependencies
|
||||
if: steps.cache-nuget.outputs.cache-hit != 'true'
|
||||
run: dotnet restore
|
||||
|
||||
- name: Cache MaaDeps
|
||||
id: cache-maadeps
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
./MaaDeps
|
||||
key: ${{ runner.os }}-${{ matrix.msbuild_target }}-maadeps-${{ hashFiles('./maadeps-download.py') }}
|
||||
|
||||
- name: Bootstrap MaaDeps
|
||||
if: steps.cache-maadeps.outputs.cache-hit != 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
python3 maadeps-download.py ${{ matrix.lowercase_target }}-windows
|
||||
python3 maadeps-download.py ${{ matrix.msbuild_target }}-windows
|
||||
|
||||
- name: Taggify Version
|
||||
run: |
|
||||
$csprojPath = "src/MaaWpfGui/MaaWpfGui.csproj"
|
||||
$csprojPath = Resolve-Path -Path $csprojPath
|
||||
$tag = '${{ steps.set_tag.outputs.tag }}' -replace '.*?/', ''
|
||||
if ($tag -match '\d+(\.\d+){1,3}') {
|
||||
$match = $Matches[0]
|
||||
} else {
|
||||
$match = "0.0.1"
|
||||
}
|
||||
echo "Tag value: $tag"
|
||||
echo "Version value: $match"
|
||||
[xml]$csproj = Get-Content -Path $csprojPath
|
||||
$node = $csproj.Project.PropertyGroup | where {$_.ApplicationVersion -ne $null}
|
||||
$node.InformationalVersion = $tag
|
||||
$node.Version = $match
|
||||
$node.FileVersion = $match
|
||||
$node.AssemblyVersion = $match
|
||||
$csproj.Save($csprojPath)
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Run './build.cmd DevBuild'
|
||||
run: |
|
||||
$env:GITHUB_WORKFLOW = 'dev-build-win' # pretend this is a dev-build-win workflow
|
||||
@@ -106,24 +226,39 @@ jobs:
|
||||
|
||||
./build.cmd DevBuild
|
||||
env:
|
||||
Reason: 'Build nightly version'
|
||||
Reason: "Build nightly version"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: actions/upload-artifact@v3
|
||||
|
||||
- name: Upload MAA to Github
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MAA-win-${{ matrix.lowercase_target }}
|
||||
name: MAA-win-${{ matrix.msbuild_target }}
|
||||
path: artifacts
|
||||
|
||||
- name: Push tag to main repo
|
||||
id: push_main_tag
|
||||
run: |
|
||||
git config user.name 'github-actions[bot]'
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
|
||||
$main_tag_name=$(echo "alpha/${{ steps.set_tag.outputs.tag }}")
|
||||
git tag $main_tag_name -f
|
||||
git push --tags origin HEAD:refs/tags/$main_tag_name -f
|
||||
echo "main_tag_name=$main_tag_name" >> $env:GITHUB_OUTPUT
|
||||
|
||||
push-tag:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
needs: build-win-nightly
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Fetch MaaRelease"
|
||||
uses: actions/checkout@v3
|
||||
- name: Fetch MaaRelease
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
show-progress: false
|
||||
|
||||
- name: Commit and setup tag
|
||||
run: |
|
||||
git config user.name 'github-actions[bot]'
|
||||
@@ -135,30 +270,45 @@ jobs:
|
||||
git push --tags origin HEAD:refs/tags/${{ needs.build-win-nightly.outputs.tag }}
|
||||
|
||||
make-ota:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
needs: [build-win-nightly, push-tag]
|
||||
strategy:
|
||||
matrix:
|
||||
target: [x64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo ${{ needs.build-win-nightly.outputs.tag }}
|
||||
- uses: actions/checkout@v3
|
||||
- name: Echo tag version
|
||||
run: |
|
||||
echo ${{ needs.build-win-nightly.outputs.tag }}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: MaaAssistantArknights
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
- uses: actions/download-artifact@v3
|
||||
show-progress: false
|
||||
|
||||
- name: Download MAA from Github
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: MAA-win-${{ matrix.target }}
|
||||
path: ${{ format('{0}/{1}', 'build-ota', needs.build-win-nightly.outputs.tag) }}
|
||||
- name: "Fetch release info"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Fetch release info
|
||||
run: |
|
||||
mkdir -pv build-ota && cd build-ota
|
||||
|
||||
# Convert inputs to integers
|
||||
limit_maa=${{ inputs.limit_maa || 10 }}
|
||||
limit_maa=${limit_maa%.*}
|
||||
echo "Parsed limit_maa: $limit_maa"
|
||||
|
||||
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit ${{ inputs.limit || 30 }} | tee ./release_maa.txt
|
||||
gh release list --repo "${{ github.repository_owner }}/MaaRelease" --limit ${{ inputs.limit_2 || 30 }} | tee ./release_mr.txt
|
||||
limit_mr=${{ inputs.limit_mr || 10 }}
|
||||
limit_mr=${limit_mr%.*}
|
||||
echo "Parsed limit_mr: $limit_mr"
|
||||
|
||||
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit $limit_maa | tee ./release_maa.txt
|
||||
gh release list --repo "${{ github.repository_owner }}/MaaRelease" --limit $limit_mr | tee ./release_mr.txt
|
||||
echo ${{ needs.build-win-nightly.outputs.tag }} > ./config
|
||||
|
||||
cat ./release_maa.txt | awk '{ print $1 }' > ./tags_maa.txt
|
||||
@@ -170,9 +320,10 @@ jobs:
|
||||
cat ./config
|
||||
|
||||
echo "release_tag=$(head -n 1 ./config)" >> $GITHUB_ENV
|
||||
- name: "Build OTA"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build OTA
|
||||
run: |
|
||||
cd build-ota
|
||||
|
||||
@@ -183,24 +334,10 @@ jobs:
|
||||
|
||||
$GITHUB_WORKSPACE/MaaAssistantArknights/tools/OTAPacker/build.sh 'MaaAssistantArknights/MaaAssistantArknights' ./config ${{ matrix.target }} "${{ github.repository_owner }}/MaaRelease"
|
||||
mv -v ${{ needs.build-win-nightly.outputs.tag }}/*.zip ./MAA-${{ env.release_tag }}-win-${{ matrix.target }}.zip
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Make release body
|
||||
id: make_release_body
|
||||
shell: bash
|
||||
run: |
|
||||
pre_version=${{ needs.build-win-nightly.outputs.pre_version }}
|
||||
cur_version=${{ needs.build-win-nightly.outputs.main_tag_name }}
|
||||
echo -e "${{ inputs.release_body || '' }}\n\n**Full Changelog**: [$pre_version -> $cur_version](https://github.com/$GITHUB_REPOSITORY/compare/$pre_version...$cur_version)" > alpha_changelog.md
|
||||
export r=$(cat alpha_changelog.md)
|
||||
|
||||
# https://github.com/svenstaro/upload-release-action
|
||||
r="${r//'%'/'%25'}" # Multiline escape sequences for %
|
||||
r="${r//$'\n'/'%0A'}" # Multiline escape sequences for '\n'
|
||||
r="${r//$'\r'/'%0D'}" # Multiline escape sequences for '\r'
|
||||
echo $r
|
||||
echo "full_release_body=$r" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: "Upload to MaaRelease"
|
||||
- name: Upload to MaaRelease
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_name: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
@@ -210,10 +347,17 @@ jobs:
|
||||
tag: ${{ env.release_tag }}
|
||||
prerelease: true
|
||||
overwrite: true
|
||||
body: ${{ steps.make_release_body.outputs.full_release_body }}
|
||||
body: |
|
||||
${{ inputs.release_body || '' }}
|
||||
|
||||
- name: Deploy the release
|
||||
${{ needs.build-win-nightly.outputs.changelog }}
|
||||
|
||||
**Full Changelog**: [${{ needs.build-win-nightly.outputs.pre_version }} -> ${{ needs.build-win-nightly.outputs.main_tag_name }}](https://github.com/${{ github.repository }}/compare/${{ needs.build-win-nightly.outputs.pre_version }}...${{ needs.build-win-nightly.outputs.main_tag_name }})
|
||||
|
||||
- name: Setup release mirror
|
||||
run: |
|
||||
gh workflow --repo MaaAssistantArknights/MaaRelease run release-mirrors.yml
|
||||
gh workflow --repo MaaAssistantArknights/MaaRelease run release-mirrors.yml
|
||||
gh workflow --repo MaaAssistantArknights/MaaRelease run mirrorchyan_alpha.yml
|
||||
gh workflow --repo MaaAssistantArknights/MaaRelease run mirrorchyan_alpha_release_note.yml
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
|
||||
103
.github/workflows/release-ota.yml
vendored
103
.github/workflows/release-ota.yml
vendored
@@ -2,19 +2,19 @@ name: release-ota
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
types:
|
||||
- published
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
limit:
|
||||
description: Number of releases to fetch from MaaAssistantArknights, 2 at least
|
||||
required: false
|
||||
default: 31
|
||||
default: "31"
|
||||
type: number
|
||||
limit_2:
|
||||
description: Number of releases to fetch from MaaRelease
|
||||
required: false
|
||||
default: 30
|
||||
default: "30"
|
||||
type: number
|
||||
|
||||
env:
|
||||
@@ -24,19 +24,31 @@ jobs:
|
||||
create-tag:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Fetch MaaRelease"
|
||||
uses: actions/checkout@v3
|
||||
- name: Fetch MaaRelease
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
repository: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
path: MaaRelease
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
|
||||
- name: Fetch release info
|
||||
id: fetchReleaseInfo
|
||||
run: |
|
||||
mkdir -pv build-ota && cd build-ota
|
||||
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit ${{ inputs.limit || 31 }} | tee ./release_maa.txt
|
||||
gh release list --repo "MaaAssistantArknights/MaaRelease" --limit ${{ inputs.limit_2 || 30 }} | tee ./release_mr.txt
|
||||
|
||||
# Convert inputs to integers
|
||||
limit=${{ inputs.limit || 31 }}
|
||||
limit=${limit%.*}
|
||||
echo "Parsed limit: $limit"
|
||||
|
||||
limit_2=${{ inputs.limit_2 || 30 }}
|
||||
limit_2=${limit_2%.*}
|
||||
echo "Parsed limit_2: $limit_2"
|
||||
|
||||
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit $limit | tee ./release_maa.txt
|
||||
gh release list --repo "MaaAssistantArknights/MaaRelease" --limit $limit_2 | tee ./release_mr.txt
|
||||
head -n 1 ./release_maa.txt | awk '{ print $1 }' > ./config
|
||||
|
||||
tail -n +1 ./release_maa.txt | awk '{ print $1 }' > ./tags_maa.txt
|
||||
@@ -49,6 +61,7 @@ jobs:
|
||||
|
||||
echo "prerelease=$([ $(head -n 1 release_maa.txt | awk '{ print $2}') = 'Pre-release' ] && echo true || echo false)" >> $GITHUB_OUTPUT
|
||||
echo "release_tag=$(head -n 1 ./config)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Commit and setup tag
|
||||
run: |
|
||||
cd MaaRelease
|
||||
@@ -61,10 +74,13 @@ jobs:
|
||||
git push --tags
|
||||
env:
|
||||
PUSH_REMOTE: https://github-actions[bot]:${{ secrets.MAARELEASE_RELEASE }}@github.com/${{ github.repository_owner }}/MaaRelease
|
||||
- uses: actions/upload-artifact@v3
|
||||
|
||||
- name: Upload release config to GitHub
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MaaReleaseConfig
|
||||
path: ./build-ota/config
|
||||
|
||||
outputs:
|
||||
prerelease: ${{ steps.fetchReleaseInfo.outputs.prerelease }}
|
||||
release_tag: ${{ steps.fetchReleaseInfo.outputs.release_tag }}
|
||||
@@ -73,31 +89,40 @@ jobs:
|
||||
needs: create-tag
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target:
|
||||
matrix:
|
||||
target:
|
||||
- x64
|
||||
steps:
|
||||
- uses: actions/download-artifact@v3
|
||||
- name: Download release config
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Fetch MaaRelease
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
repository: ${{ format('{0}/{1}', github.repository_owner, 'MaaRelease') }}
|
||||
path: MaaRelease
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.MAARELEASE_RELEASE }}
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
path: MaaAssistantArknights
|
||||
|
||||
- name: Download latest version for server
|
||||
run: |
|
||||
mkdir -pv build-ota/${{ needs.create-tag.outputs.release_tag }}
|
||||
cd build-ota/${{ needs.create-tag.outputs.release_tag }}
|
||||
gh release download ${{ needs.create-tag.outputs.release_tag }} --repo 'MaaAssistantArknights/MaaAssistantArknights' --pattern "MAA-${{ needs.create-tag.outputs.release_tag }}-win-${{ matrix.target }}.zip" --clobber
|
||||
cp *.zip ..
|
||||
|
||||
- name: Build OTA
|
||||
run: |
|
||||
cd build-ota
|
||||
$GITHUB_WORKSPACE/MaaAssistantArknights/tools/OTAPacker/build.sh 'MaaAssistantArknights/MaaAssistantArknights' ../MaaReleaseConfig/config ${{ matrix.target }} 'MaaAssistantArknights/MaaRelease'
|
||||
|
||||
- name: Upload to MaaRelease
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
@@ -111,11 +136,12 @@ jobs:
|
||||
|
||||
make-ota-mac:
|
||||
needs: create-tag
|
||||
runs-on: macos-13
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- name: Fetch Release Information
|
||||
- name: Fetch release info
|
||||
run: gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit ${{ inputs.limit || 31 }} | tee ./release_maa.txt
|
||||
- name: Download Release Packages
|
||||
|
||||
- name: Download release packages
|
||||
run: |
|
||||
cat ./release_maa.txt | awk '{ print $1 }' | while read tag; do
|
||||
gh release download "$tag" --repo 'MaaAssistantArknights/MaaAssistantArknights' --clobber -D packages -p 'MAA-*-macos-universal.dmg' || true
|
||||
@@ -123,8 +149,11 @@ jobs:
|
||||
gh api /markdown -f text="$RELEASE_NOTES" | tee ./packages/MAA-"$tag"-macos-universal.html
|
||||
done
|
||||
curl -fsSL -o packages/appcast.xml https://maa-release.hguandl.com/macos/appcast.xml
|
||||
|
||||
- name: Setup Sparkle
|
||||
run: gh release download --repo 'sparkle-project/Sparkle' --clobber -O - -p 'Sparkle-*.tar.xz' | tar xf -
|
||||
run: |
|
||||
gh release download --repo 'sparkle-project/Sparkle' --clobber -O - -p 'Sparkle-*.tar.xz' | tar xf -
|
||||
|
||||
- name: Generate Update Packages
|
||||
run: |
|
||||
if [ $(head -n 1 release_maa.txt | awk '{ print $2 }') = 'Pre-release' ]; then
|
||||
@@ -132,8 +161,11 @@ jobs:
|
||||
else
|
||||
echo ${{ secrets.SPARKLE_PRIV_KEY }} | ./bin/generate_appcast --ed-key-file - ./packages
|
||||
fi
|
||||
- name: Clean unneed files
|
||||
run: find ./packages -type f ! \( -name 'MAA-${{ needs.create-tag.outputs.release_tag }}-macos-universal.dmg' -o -name '*.delta' -o -name '*.xml' \) -print -delete
|
||||
|
||||
- name: Cleanup files
|
||||
run: |
|
||||
find ./packages -type f ! \( -name 'MAA-${{ needs.create-tag.outputs.release_tag }}-macos-universal.dmg' -o -name '*.delta' -o -name '*.xml' \) -print -delete
|
||||
|
||||
- name: Upload to MaaRelease
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
@@ -146,38 +178,13 @@ jobs:
|
||||
overwrite: true
|
||||
|
||||
release:
|
||||
needs:
|
||||
needs:
|
||||
- make-ota
|
||||
- make-ota-mac
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
steps:
|
||||
- name: Deploy the release
|
||||
- name: Setup release mirror
|
||||
run: |
|
||||
gh workflow --repo MaaAssistantArknights/MaaRelease run release-mirrors.yml
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
- name: "Fetch MaaAssistantArknights"
|
||||
uses: actions/checkout@v3
|
||||
- name: Deploy the docs
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
run: |
|
||||
git tag --list 'v*' --sort=-creatordate | head -n 2 > ${{ runner.temp }}/release_maa.txt
|
||||
export NEW_VERSION=$(sed -n '1p' ${{ runner.temp }}/release_maa.txt)
|
||||
echo "NEW_VERSION: $NEW_VERSION"
|
||||
export OLD_VERSION=$(sed -n '2p' ${{ runner.temp }}/release_maa.txt)
|
||||
echo "OLD_VERSION: $OLD_VERSION"
|
||||
git diff --name-only "$NEW_VERSION" "$OLD_VERSION" > ${{ runner.temp }}/diff
|
||||
export DOCS_CHANGED=false
|
||||
while IFS= read -r file; do
|
||||
file=$(echo "$file" | sed 's/"//g')
|
||||
if [[ $file == "docs/"* ]]; then
|
||||
echo "Found docs changed: $file"
|
||||
export DOCS_CHANGED=true
|
||||
fi
|
||||
done < ${{ runner.temp }}/diff
|
||||
echo "DOCS_CHANGED: $DOCS_CHANGED"
|
||||
if [ "$variable" = "true" ]; then
|
||||
gh workflow --repo MaaAssistantArknights/maa-website run azure-deploy.yaml
|
||||
echo "Deploying the docs."
|
||||
fi
|
||||
|
||||
351
.github/workflows/res-update-game.yml
vendored
351
.github/workflows/res-update-game.yml
vendored
@@ -2,106 +2,339 @@ name: res-update-game
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "*/20 * * * *"
|
||||
- cron: "*/20 * * * *" # Runs every 20 minutes
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit_message:
|
||||
description: 'Commit Message'
|
||||
description: "Commit Message"
|
||||
type: string
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
clone-resources-official:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone ArknightsGameResource for Official
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
repository: yuanyan3060/ArknightsGameResource
|
||||
ref: main
|
||||
path: ./Official
|
||||
sparse-checkout-cone-mode: false
|
||||
sparse-checkout: |
|
||||
/levels.json
|
||||
/item
|
||||
/building_skill
|
||||
/gamedata/excel/item_table.json
|
||||
/gamedata/excel/building_data.json
|
||||
/gamedata/excel/range_table.json
|
||||
/gamedata/excel/character_table.json
|
||||
/gamedata/excel/gacha_table.json
|
||||
/gamedata/excel/roguelike_topic_table.json
|
||||
/gamedata/excel/activity_table.json
|
||||
|
||||
- name: Upload Official
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: official
|
||||
path: ./Official
|
||||
compression-level: 0
|
||||
|
||||
clone-resources-overseas:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone ArknightsGameResource_Yostar for Overseas
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
repository: ArknightsAssets/ArknightsGamedata
|
||||
ref: master
|
||||
path: ./Overseas
|
||||
sparse-checkout-cone-mode: false
|
||||
sparse-checkout: |
|
||||
/en/gamedata/excel/item_table.json
|
||||
/en/gamedata/excel/building_data.json
|
||||
/en/gamedata/excel/range_table.json
|
||||
/en/gamedata/excel/character_table.json
|
||||
/en/gamedata/excel/gacha_table.json
|
||||
/en/gamedata/excel/roguelike_topic_table.json
|
||||
/en/gamedata/excel/activity_table.json
|
||||
/jp/gamedata/excel/item_table.json
|
||||
/jp/gamedata/excel/building_data.json
|
||||
/jp/gamedata/excel/range_table.json
|
||||
/jp/gamedata/excel/character_table.json
|
||||
/jp/gamedata/excel/gacha_table.json
|
||||
/jp/gamedata/excel/roguelike_topic_table.json
|
||||
/jp/gamedata/excel/activity_table.json
|
||||
/kr/gamedata/excel/item_table.json
|
||||
/kr/gamedata/excel/building_data.json
|
||||
/kr/gamedata/excel/range_table.json
|
||||
/kr/gamedata/excel/character_table.json
|
||||
/kr/gamedata/excel/gacha_table.json
|
||||
/kr/gamedata/excel/roguelike_topic_table.json
|
||||
/kr/gamedata/excel/activity_table.json
|
||||
|
||||
- name: Upload Official
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: overseas
|
||||
path: ./Overseas
|
||||
compression-level: 0
|
||||
|
||||
clone-resources-txwy:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone arknights-toolbox-update for Taiwan
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
repository: arkntools/arknights-toolbox-update
|
||||
ref: data-tw
|
||||
path: ./excel
|
||||
token: ${{ secrets.ARKNTOOLS_MAA_RESOURCE_UPDATER}}
|
||||
|
||||
- name: Download stages.json from Penguin Stats
|
||||
run: |
|
||||
cd "./excel"
|
||||
|
||||
baseUrl="https://penguin-stats.io/PenguinStats/api/v2/stages?server="
|
||||
|
||||
parameters=("CN" "US" "JP" "KR")
|
||||
|
||||
for param in "${parameters[@]}"; do
|
||||
{
|
||||
if curl -s -o "stages_${param}.json" "${baseUrl}${param}"; then
|
||||
echo "Successfully fetched data for ${param}"
|
||||
else
|
||||
echo "Failed to fetch data for ${param}" >&2
|
||||
exit 1
|
||||
fi
|
||||
} &
|
||||
done
|
||||
wait
|
||||
|
||||
- name: Upload Official
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: txwy
|
||||
path: ./excel
|
||||
compression-level: 0
|
||||
|
||||
update-game-resources:
|
||||
# In case of rate limitations on the runners/instances, add dependency, by removing the comment
|
||||
|
||||
# needs: [clone-resources-official, clone-resources-overseas, clone-resources-txwy]
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Checkout MAA
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.MISTEOWORKFLOW }}
|
||||
# TL;DR https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/9872#issuecomment-2251378371
|
||||
# actions/checkout uses ${{ secrets.GITHUB_TOKEN }} by default, meaning all steps will inherit it
|
||||
persist-credentials: false # Needed to bypass protection rules in Push changes
|
||||
show-progress: false
|
||||
fetch-depth: 3
|
||||
|
||||
- name: Restore ResourceUpdater.exe from cache
|
||||
id: cache-resupd
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: Resource-updater-${{ hashFiles('./tools/ResourceUpdater/main.cpp') }}
|
||||
path: |
|
||||
./tools/ResourceUpdater/x64/Release/opencv_world4_maa.dll
|
||||
./tools/ResourceUpdater/x64/Release/ResourceUpdater.exe
|
||||
|
||||
- name: Cache MaaDeps
|
||||
if: steps.cache-resupd.outputs.cache-hit != 'true'
|
||||
id: cache-maadeps
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
./MaaDeps
|
||||
key: ${{ runner.os }}-x64-maadeps-${{ hashFiles('./maadeps-download.py') }}
|
||||
|
||||
- name: Bootstrap MaaDeps
|
||||
if: steps.cache-resupd.outputs.cache-hit != 'true' && steps.cache-maadeps.outputs.cache-hit != 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
python3 maadeps-download.py x64-windows
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
if: steps.cache-resupd.outputs.cache-hit != 'true'
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Build Resource Updater
|
||||
if: steps.cache-resupd.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
MSBUILD tools/ResourceUpdater/ResourceUpdater.vcxproj /t:rebuild /p:Configuration="Release" /p:Platform="x64" /p:BuildProjectReferences=false /m
|
||||
|
||||
- name: Save ResourceUpdater.exe to cache
|
||||
if: always() && steps.cache-resupd.outputs.cache-hit != 'true'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
key: Resource-updater-${{ hashFiles('./tools/ResourceUpdater/main.cpp') }}
|
||||
path: |
|
||||
./tools/ResourceUpdater/x64/Release/opencv_world4_maa.dll
|
||||
./tools/ResourceUpdater/x64/Release/ResourceUpdater.exe
|
||||
|
||||
- name: Download txwy
|
||||
id: download-txwy
|
||||
uses: actions/download-artifact@v4.1.8
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: txwy
|
||||
path: ./tools/ResourceUpdater/x64/Release/Overseas/tw/gamedata/excel
|
||||
|
||||
- name: Delay txwy
|
||||
if: steps.download-txwy.outcome == 'failure'
|
||||
run: |
|
||||
Start-Sleep -s 20
|
||||
|
||||
- name: Re-download txwy
|
||||
if: steps.download-txwy.outcome == 'failure'
|
||||
uses: actions/download-artifact@v4.1.8
|
||||
with:
|
||||
name: txwy
|
||||
path: ./tools/ResourceUpdater/x64/Release/Overseas/tw/gamedata/excel
|
||||
|
||||
- name: Download Overseas
|
||||
id: download-overseas
|
||||
uses: actions/download-artifact@v4.1.8
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: overseas
|
||||
path: ./tools/ResourceUpdater/x64/Release/Overseas
|
||||
|
||||
- name: Delay Overseas
|
||||
if: steps.download-overseas.outcome == 'failure'
|
||||
run: |
|
||||
Start-Sleep -s 20
|
||||
|
||||
- name: Re-download Overseas
|
||||
if: steps.download-overseas.outcome == 'failure'
|
||||
uses: actions/download-artifact@v4.1.8
|
||||
with:
|
||||
name: overseas
|
||||
path: ./tools/ResourceUpdater/x64/Release/Overseas
|
||||
|
||||
- name: Download Official
|
||||
id: download-official
|
||||
uses: actions/download-artifact@v4.1.8
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: official
|
||||
path: ./tools/ResourceUpdater/x64/Release/Official
|
||||
|
||||
- name: Delay Official
|
||||
if: steps.download-official.outcome == 'failure'
|
||||
run: |
|
||||
Start-Sleep -s 20
|
||||
|
||||
- name: Re-download Official
|
||||
if: steps.download-official.outcome == 'failure'
|
||||
uses: actions/download-artifact@v4.1.8
|
||||
with:
|
||||
name: official
|
||||
path: ./tools/ResourceUpdater/x64/Release/Official
|
||||
|
||||
- name: Run Resource Updater
|
||||
run: |
|
||||
.\tools\ResourceUpdater\x64\Release\ResourceUpdater.exe
|
||||
./tools/ResourceUpdater/x64/Release/ResourceUpdater.exe
|
||||
|
||||
- name: Check if only sorted
|
||||
id: check_only_sorted
|
||||
- name: Task Sorting
|
||||
id: task_sorting
|
||||
run: |
|
||||
git status
|
||||
python3 tools/TaskSorter/TaskSorter.py
|
||||
Write-Output "gitdiff=$(git diff --name-only --diff-filter=ACM 2>$null | Select-String -Pattern '\.json$' -List)" >> $env:GITHUB_OUTPUT
|
||||
|
||||
$diff = $(git diff --numstat HEAD | findstr -i resource)
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
echo "no diff"
|
||||
exit 0
|
||||
}
|
||||
|
||||
echo "diff: "$diff
|
||||
$sp = $($diff -split "\s+")
|
||||
$numbers = $($sp | Where-Object { $_ -match "^\d+$" })
|
||||
echo "numbers: "$numbers
|
||||
- name: Run prettier
|
||||
uses: Nerixyz/actionsx-prettier@v3-adj
|
||||
with:
|
||||
args: -w ${{ steps.task_sorting.outputs.gitdiff }}
|
||||
|
||||
$length = $numbers.Length
|
||||
$isAllEqual = $true
|
||||
for ($i = 0; $i -lt $length; $i += 2) {
|
||||
$firstNumber = $numbers[$i]
|
||||
$secondNumber = $numbers[$i+1]
|
||||
|
||||
if ($firstNumber -ne $secondNumber) {
|
||||
$isAllEqual = $false
|
||||
break
|
||||
}
|
||||
}
|
||||
echo "isAllEqual: "$isAllEqual
|
||||
echo "only_sorted=$isAllEqual" >> $env:GITHUB_OUTPUT
|
||||
|
||||
- name: Cancelling
|
||||
if: steps.check_only_sorted.outputs.only_sorted == 'True'
|
||||
uses: andymckay/cancel-action@0.3
|
||||
- name: Update version.json date if necessary
|
||||
id: update_version
|
||||
run: pwsh tools/ResourceUpdater/version.ps1
|
||||
|
||||
- name: Setup python
|
||||
if: steps.update_version.outputs.contains_png == 'True'
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Cache Python packages
|
||||
if: always() && steps.update_version.outputs.contains_png == 'True'
|
||||
id: cache_python
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.pythonLocation }}/Lib/site-packages
|
||||
key: ${{ runner.os }}-pip-optimize-templates-${{ hashFiles('./tools/OptimizeTemplates/requirements.txt') }}
|
||||
|
||||
- name: Install dependencies
|
||||
if: steps.cache_python.outputs.cache-hit != 'true' && steps.update_version.outputs.contains_png == 'True'
|
||||
run: |
|
||||
pip install -r tools/OptimizeTemplates/requirements.txt
|
||||
|
||||
- name: Setup oxipng
|
||||
if: steps.update_version.outputs.contains_png == 'True'
|
||||
uses: baptiste0928/cargo-install@v3
|
||||
with:
|
||||
crate: oxipng
|
||||
|
||||
- name: Run optimize_templates
|
||||
if: steps.update_version.outputs.contains_png == 'True'
|
||||
run: |
|
||||
python3 tools/OptimizeTemplates/optimize_templates.py -p resource/template/items/ resource/template/infrast/
|
||||
|
||||
- name: Add files to git
|
||||
if: steps.check_only_sorted.outputs.only_sorted != 'True'
|
||||
if: steps.update_version.outputs.changes == 'True'
|
||||
id: add_files
|
||||
run: |
|
||||
git status
|
||||
|
||||
git config user.name "$env:GITHUB_ACTOR"
|
||||
git config user.email "$env:GITHUB_ACTOR@users.noreply.github.com"
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add .
|
||||
|
||||
$commit_msg = "${{ github.event.inputs.commit_message }}"
|
||||
if (-not [string]::IsNullOrWhiteSpace($commit_msg)) {
|
||||
$commit_msg = $commit_msg.Trim()
|
||||
} else {
|
||||
if ([string]::IsNullOrWhiteSpace($commit_msg)) {
|
||||
$commit_msg = "chore: Auto Update Game Resources - $(Get-Date -Format 'yyyy-MM-dd')"
|
||||
} else {
|
||||
$commit_msg = $commit_msg.Trim()
|
||||
}
|
||||
git commit -m "$commit_msg"
|
||||
|
||||
$run_url = "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
|
||||
git commit -m "$commit_msg" -m "$run_url" -m "[skip changelog]"
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
echo "have_commits=True" >> $env:GITHUB_OUTPUT
|
||||
Write-Output "have_commits=True" >> $env:GITHUB_OUTPUT
|
||||
}
|
||||
|
||||
git pull origin $(git rev-parse --abbrev-ref HEAD) --unshallow --rebase
|
||||
git pull origin ${{ github.ref_name }} --rebase
|
||||
|
||||
- name: Cancelling
|
||||
if: steps.add_files.outputs.have_commits != 'True'
|
||||
uses: andymckay/cancel-action@0.3
|
||||
|
||||
- name: Push changes # push the output folder to your repo
|
||||
- name: Push changes
|
||||
if: steps.add_files.outputs.have_commits == 'True'
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.MISTEOWORKFLOW }}
|
||||
branch: ${{ github.ref }}
|
||||
github_token: ${{ secrets.MAA_RESOURCE_SYNC }}
|
||||
|
||||
- name: Release # ref: https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
|
||||
if: steps.add_files.outputs.have_commits == 'True'
|
||||
run: |
|
||||
gh workflow run release-nightly-ota -f release_body="Auto Release of Resource Updates"
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
# - name: Update OTA resource
|
||||
# if: steps.update_version.outputs.update_resources == 'True'
|
||||
# env:
|
||||
# GH_TOKEN: ${{ secrets.MISTEOWORKFLOW }}
|
||||
# run: |
|
||||
# gh workflow --repo MaaAssistantArknights/MaaRelease run update-resource.yml
|
||||
|
||||
- name: Add cancelled status
|
||||
if: steps.update_version.outputs.changes != 'True' || steps.add_files.outputs.have_commits != 'True'
|
||||
uses: andymckay/cancel-action@0.5
|
||||
|
||||
# - name: Release # ref: https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
|
||||
# if: steps.add_files.outputs.have_commits == 'True'
|
||||
# run: |
|
||||
# gh workflow run release-nightly-ota -f release_body="Auto Release of Resource Updates"
|
||||
|
||||
142
.github/workflows/smoke-testing.yml
vendored
142
.github/workflows/smoke-testing.yml
vendored
@@ -1,59 +1,121 @@
|
||||
name: test
|
||||
name: smoke-testing
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- '3rdparty/include/**'
|
||||
- 'include/**'
|
||||
- 'src/**'
|
||||
- 'cmake/**'
|
||||
- 'CMakeLists.txt'
|
||||
- 'MAA.sln'
|
||||
- 'resource/**'
|
||||
- 'MaaDeps/**'
|
||||
- "3rdparty/include/**"
|
||||
- "include/**"
|
||||
- "src/Cpp/**"
|
||||
- "src/MaaCore/**"
|
||||
- "src/SyncRes/**"
|
||||
- "MAA.sln"
|
||||
- "resource/**"
|
||||
- "!**/*.md"
|
||||
pull_request:
|
||||
paths:
|
||||
- '3rdparty/include/**'
|
||||
- 'include/**'
|
||||
- 'src/**'
|
||||
- 'cmake/**'
|
||||
- 'CMakeLists.txt'
|
||||
- 'MAA.sln'
|
||||
- 'resource/**'
|
||||
- 'MaaDeps/**'
|
||||
- "3rdparty/include/**"
|
||||
- "include/**"
|
||||
- "src/Cpp/**"
|
||||
- "src/MaaCore/**"
|
||||
- "src/SyncRes/**"
|
||||
- "MAA.sln"
|
||||
- "resource/**"
|
||||
- "!**/*.md"
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
smoke-testing:
|
||||
# Prevent duplicate runs on organization branches with PRs
|
||||
if: github.event_name != 'pull_request' ||
|
||||
github.event.pull_request.head.repo.full_name !=
|
||||
github.event.pull_request.base.repo.full_name
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: NuGet/setup-nuget@v1.2.0
|
||||
- run: |
|
||||
nuget restore MAA.sln
|
||||
if ($LASTEXITCODE) { nuget restore MAA.sln }
|
||||
if ($LASTEXITCODE) { nuget restore MAA.sln }
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Generate cache key
|
||||
id: cache_key
|
||||
run: |
|
||||
Write-Output "key=Smoke-testing-${{ hashFiles('src/Cpp/**', 'src/MaaCore/**', 'src/SyncRes/**', '3rdparty/include/**', 'include/**', 'MAA.sln') }}" >> $env:GITHUB_OUTPUT
|
||||
|
||||
- name: Restore cache smoke-testing
|
||||
id: cache-exe
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: ${{ steps.cache_key.outputs.key }}
|
||||
path: |
|
||||
./x64/Debug/Sample.exe
|
||||
./x64/Debug/fastdeploy_ppocr.dll
|
||||
./x64/Debug/MaaCore.dll
|
||||
./x64/Debug/onnxruntime_maa.dll
|
||||
./x64/Debug/opencv_world4d_maa.dll
|
||||
|
||||
- name: Fetch submodules
|
||||
if: steps.cache-exe.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
git submodule update --init --depth 1 3rdparty/EmulatorExtras
|
||||
|
||||
- name: Cache MaaDeps
|
||||
if: steps.cache-exe.outputs.cache-hit != 'true'
|
||||
id: cache-maadeps
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
./MaaDeps
|
||||
key: ${{ runner.os }}-x64-maadeps-${{ hashFiles('./maadeps-download.py') }}
|
||||
|
||||
- name: Bootstrap MaaDeps
|
||||
if: steps.cache-exe.outputs.cache-hit != 'true' && steps.cache-maadeps.outputs.cache-hit != 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
python3 maadeps-download.py x64-windows
|
||||
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
- name: Build MaaSample
|
||||
run: |
|
||||
MSBUILD src/Cpp/MaaSample.slnf /t:rebuild /p:Configuration="Debug" /p:Platform="x64" /m
|
||||
|
||||
- name: Run Testing
|
||||
run: |
|
||||
.\x64\Debug\Sample.exe
|
||||
|
||||
- name: Upload Logs
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
if: steps.cache-exe.outputs.cache-hit != 'true'
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
with:
|
||||
name: log
|
||||
path: .\x64\Debug\debug
|
||||
msbuild-architecture: x64
|
||||
|
||||
- name: Build MaaSample
|
||||
if: steps.cache-exe.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
MSBUILD src/Cpp/MaaSample.slnf -t:restore,build -p:Configuration="Debug" -p:Platform="x64" -m
|
||||
|
||||
- name: Copy resource to build directory
|
||||
if: steps.cache-exe.outputs.cache-hit == 'true'
|
||||
run: |
|
||||
(robocopy "resource" "x64/Debug/resource" /E /XD "Arknights-Tile-Pos" /MT:4 > $null);
|
||||
if ($LASTEXITCODE -lt 2) { $global:LASTEXITCODE = $null }
|
||||
(robocopy "resource/Arknights-Tile-Pos" "x64/Debug/resource/Arknights-Tile-Pos" "overview.json" > $null);
|
||||
if ($LASTEXITCODE -lt 2) { $global:LASTEXITCODE= $null }
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
pwsh tools/SmokeTesting/run_tests.ps1
|
||||
|
||||
- name: Save cache smoke-testing (only in dev)
|
||||
if: steps.cache-exe.outputs.cache-hit != 'true' && github.ref == 'refs/heads/dev'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
key: ${{ steps.cache_key.outputs.key }}
|
||||
path: |
|
||||
./x64/Debug/Sample.exe
|
||||
./x64/Debug/fastdeploy_ppocr.dll
|
||||
./x64/Debug/MaaCore.dll
|
||||
./x64/Debug/onnxruntime_maa.dll
|
||||
./x64/Debug/opencv_world4d_maa.dll
|
||||
|
||||
- name: Upload logs
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: logs
|
||||
path: ./x64/Debug/debug
|
||||
|
||||
39
.github/workflows/stale.yml
vendored
Normal file
39
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: "Inactive Issues Closer"
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # Runs daily at UTC 00:00
|
||||
workflow_dispatch: # Allows manual triggering
|
||||
|
||||
env: # config
|
||||
daysBeforeStale: 90 # Number of days of inactivity before marking as stale
|
||||
daysBeforeClose: 7 # Number of days to wait after marking as stale before closing
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: write # Workaround for https://github.com/actions/stale/issues/1090
|
||||
issues: write
|
||||
# Completely disable stalling for PRs
|
||||
pull-requests: none
|
||||
contents: none
|
||||
steps:
|
||||
- name: Close inactive issues
|
||||
uses: actions/stale@v9
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: ${{ env.daysBeforeStale }}
|
||||
days-before-close: ${{ env.daysBeforeClose }}
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: |
|
||||
This issue has been inactive for a prolonged period and will be closed automatically in ${{ env.daysBeforeClose }} days.
|
||||
该问题已长时间处于闲置状态,${{ env.daysBeforeClose }} 天后将自动关闭。
|
||||
exempt-issue-labels: "keep-open, MAA Team, enhancement"
|
||||
days-before-pr-stale: -1 # Completely disable stalling for PRs
|
||||
days-before-pr-close: -1 # Completely disable closing for PRs
|
||||
|
||||
# Temporary to reduce the huge issues number
|
||||
operations-per-run: 100
|
||||
debug-only: false
|
||||
51
.github/workflows/sync-resource.yml
vendored
Normal file
51
.github/workflows/sync-resource.yml
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
name: sync-resource
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- "resource/**"
|
||||
- ".github/workflows/sync-resource.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
sync-resource:
|
||||
if: github.repository_owner == 'MaaAssistantArknights'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout MaaAssistantArknights
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.name 'github-actions[bot]'
|
||||
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
git show -s
|
||||
|
||||
- name: Checkout MaaResource
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: MaaAssistantArknights/MaaResource
|
||||
show-progress: false
|
||||
ssh-key: ${{secrets.MAA_RESOURCE_DEPLOY}}
|
||||
path: MaaResource
|
||||
|
||||
- name: Update MaaResource
|
||||
run: |
|
||||
export commit_msg=$(git show -s --format=%s)
|
||||
cd MaaResource
|
||||
shopt -s extglob
|
||||
|
||||
cd resource
|
||||
rm -rf !(".gitignore")
|
||||
cp -rf ../../resource/* .
|
||||
cd ..
|
||||
|
||||
git add .
|
||||
git status
|
||||
git commit -m "$commit_msg" || exit 0
|
||||
git push
|
||||
107
.github/workflows/website-workflow.yml
vendored
Normal file
107
.github/workflows/website-workflow.yml
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
name: MaaWebsite Workflow
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "master"
|
||||
- "dev"
|
||||
paths:
|
||||
- ".github/workflows/website-workflow.yml"
|
||||
- "docs/**"
|
||||
- "website/**"
|
||||
pull_request:
|
||||
paths:
|
||||
- ".github/workflows/website-workflow.yml"
|
||||
- "docs/**"
|
||||
- "website/**"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
deploy-to-prod-env:
|
||||
description: "Deploy to production environment"
|
||||
default: false
|
||||
required: true
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
build:
|
||||
timeout-minutes: 20
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
show-progress: false
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
working-directory: "./website"
|
||||
|
||||
- name: Build
|
||||
run: pnpm run build
|
||||
working-directory: "./website"
|
||||
|
||||
- name: Upload artifact to GitHub
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: dist
|
||||
path: "./website/dist"
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: github.event_name != 'pull_request'
|
||||
steps:
|
||||
- name: Download website artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: dist
|
||||
|
||||
- name: Set deployment environment
|
||||
id: set-deployment-env
|
||||
run: |
|
||||
if [[ "${{ github.event_name }}" != "workflow_dispatch" && "${{ github.ref }}" == "refs/heads/master" ]] || [[ "${{ github.event.inputs.deploy-to-prod-env }}" == "true" ]]; then
|
||||
echo "AZURE_TARGET_ENV=prod" >> $GITHUB_ENV
|
||||
else
|
||||
echo "AZURE_TARGET_ENV=dev" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Show environment
|
||||
run: echo ${{ env.AZURE_TARGET_ENV }}
|
||||
|
||||
- name: Deploy to Azure (prod)
|
||||
id: deploy-prod
|
||||
uses: Azure/static-web-apps-deploy@v1
|
||||
if: env.AZURE_TARGET_ENV == 'prod'
|
||||
with:
|
||||
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_MAA_WEBSITE }}
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
action: "upload"
|
||||
app_location: "."
|
||||
api_location: ""
|
||||
skip_app_build: true
|
||||
skip_api_build: true
|
||||
|
||||
- name: Deploy to Azure (dev)
|
||||
id: deploy-dev
|
||||
uses: Azure/static-web-apps-deploy@v1
|
||||
if: env.AZURE_TARGET_ENV == 'dev'
|
||||
with:
|
||||
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_MAA_WEBSITE }}
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
action: "upload"
|
||||
deployment_environment: dev
|
||||
app_location: "."
|
||||
api_location: ""
|
||||
skip_app_build: true
|
||||
skip_api_build: true
|
||||
23
.gitignore
vendored
23
.gitignore
vendored
@@ -1,6 +1,3 @@
|
||||
# docs
|
||||
docs/node_modules
|
||||
docs/.vuepress/.temp
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
@@ -440,6 +437,9 @@ tools/**/*.png
|
||||
.vscode
|
||||
enc_temp_folder/*
|
||||
|
||||
# RoguelikeRecruitmentTool 导出的 Excel 文件
|
||||
tools/RoguelikeRecruitmentTool/output
|
||||
|
||||
# Nuke
|
||||
.nuke/temp/*
|
||||
|
||||
@@ -450,3 +450,20 @@ enc_temp_folder/*
|
||||
/resource/Arknights-Tile-Pos/act2bossrush_04-activities-act2bossrush-level_bossrush2_04.json
|
||||
# CF 活动关卡(异格夜刀),手动改的地图
|
||||
/resource/Arknights-Tile-Pos/act24side_09-activities-act24side-level_act24side_09.json
|
||||
/src/MaaWpfGui/FodyWeavers.xml
|
||||
|
||||
# 链接检查缓存
|
||||
.lycheecache
|
||||
|
||||
# MaaDeps
|
||||
/MaaDeps/*
|
||||
|
||||
# ResourceUpdater workflow
|
||||
/original/*
|
||||
|
||||
# Windows Explorer Shits
|
||||
desktop.ini
|
||||
Thumbs.db
|
||||
|
||||
# macOS Finder Shit
|
||||
.DS_Store
|
||||
|
||||
11
.gitmodules
vendored
11
.gitmodules
vendored
@@ -4,8 +4,9 @@
|
||||
[submodule "src/MaaMacGui"]
|
||||
path = src/MaaMacGui
|
||||
url = https://github.com/MaaAssistantArknights/MaaMacGui.git
|
||||
[submodule "MaaDeps"]
|
||||
path = MaaDeps
|
||||
url = https://github.com/MaaAssistantArknights/MaaDeps
|
||||
shallow = true
|
||||
branch = master
|
||||
[submodule "src/maa-cli"]
|
||||
path = src/maa-cli
|
||||
url = https://github.com/MaaAssistantArknights/maa-cli.git
|
||||
[submodule "3rdparty/EmulatorExtras"]
|
||||
path = 3rdparty/EmulatorExtras
|
||||
url = https://github.com/MaaXYZ/EmulatorExtras.git
|
||||
|
||||
@@ -1,132 +1,127 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "Build Schema",
|
||||
"$ref": "#/definitions/build",
|
||||
"definitions": {
|
||||
"build": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Continue": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates to continue a previously failed build attempt"
|
||||
},
|
||||
"Help": {
|
||||
"type": "boolean",
|
||||
"description": "Shows the help text for this build assembly"
|
||||
},
|
||||
"Host": {
|
||||
"type": "string",
|
||||
"description": "Host for execution. Default is 'automatic'",
|
||||
"enum": [
|
||||
"AppVeyor",
|
||||
"AzurePipelines",
|
||||
"Bamboo",
|
||||
"Bitbucket",
|
||||
"Bitrise",
|
||||
"GitHubActions",
|
||||
"GitLab",
|
||||
"Jenkins",
|
||||
"Rider",
|
||||
"SpaceAutomation",
|
||||
"TeamCity",
|
||||
"Terminal",
|
||||
"TravisCI",
|
||||
"VisualStudio",
|
||||
"VSCode"
|
||||
]
|
||||
},
|
||||
"NoLogo": {
|
||||
"type": "boolean",
|
||||
"description": "Disables displaying the NUKE logo"
|
||||
},
|
||||
"Partition": {
|
||||
"type": "string",
|
||||
"description": "Partition to use on CI"
|
||||
},
|
||||
"Plan": {
|
||||
"type": "boolean",
|
||||
"description": "Shows the execution plan (HTML)"
|
||||
},
|
||||
"Profile": {
|
||||
"type": "array",
|
||||
"description": "Defines the profiles to load",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"Root": {
|
||||
"type": "string",
|
||||
"description": "Root directory during build execution"
|
||||
},
|
||||
"Skip": {
|
||||
"type": "array",
|
||||
"description": "List of targets to be skipped. Empty list skips all dependencies",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"DevBuildDefault",
|
||||
"DevBuildReleaseSimulation",
|
||||
"ReleaseMaa",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
"UseClean",
|
||||
"UseCommitVersion",
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseRsVersion",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileWpfRelease",
|
||||
"WithSyncRes"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Target": {
|
||||
"type": "array",
|
||||
"description": "List of targets to be invoked. Default is '{default_target}'",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"DevBuildDefault",
|
||||
"DevBuildReleaseSimulation",
|
||||
"ReleaseMaa",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
"UseClean",
|
||||
"UseCommitVersion",
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseRsVersion",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileWpfRelease",
|
||||
"WithSyncRes"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Verbosity": {
|
||||
"type": "string",
|
||||
"description": "Logging verbosity during build execution. Default is 'Normal'",
|
||||
"enum": [
|
||||
"Minimal",
|
||||
"Normal",
|
||||
"Quiet",
|
||||
"Verbose"
|
||||
]
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"title": "Build Schema",
|
||||
"$ref": "#/definitions/build",
|
||||
"definitions": {
|
||||
"build": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Continue": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates to continue a previously failed build attempt"
|
||||
},
|
||||
"Help": {
|
||||
"type": "boolean",
|
||||
"description": "Shows the help text for this build assembly"
|
||||
},
|
||||
"Host": {
|
||||
"type": "string",
|
||||
"description": "Host for execution. Default is 'automatic'",
|
||||
"enum": [
|
||||
"AppVeyor",
|
||||
"AzurePipelines",
|
||||
"Bamboo",
|
||||
"Bitbucket",
|
||||
"Bitrise",
|
||||
"GitHubActions",
|
||||
"GitLab",
|
||||
"Jenkins",
|
||||
"Rider",
|
||||
"SpaceAutomation",
|
||||
"TeamCity",
|
||||
"Terminal",
|
||||
"TravisCI",
|
||||
"VisualStudio",
|
||||
"VSCode"
|
||||
]
|
||||
},
|
||||
"NoLogo": {
|
||||
"type": "boolean",
|
||||
"description": "Disables displaying the NUKE logo"
|
||||
},
|
||||
"Partition": {
|
||||
"type": "string",
|
||||
"description": "Partition to use on CI"
|
||||
},
|
||||
"Plan": {
|
||||
"type": "boolean",
|
||||
"description": "Shows the execution plan (HTML)"
|
||||
},
|
||||
"Profile": {
|
||||
"type": "array",
|
||||
"description": "Defines the profiles to load",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"Root": {
|
||||
"type": "string",
|
||||
"description": "Root directory during build execution"
|
||||
},
|
||||
"Skip": {
|
||||
"type": "array",
|
||||
"description": "List of targets to be skipped. Empty list skips all dependencies",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"DevBuildDefault",
|
||||
"DevBuildReleaseSimulation",
|
||||
"ReleaseMaa",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
"UseClean",
|
||||
"UseCommitVersion",
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseRsVersion",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileWpfRelease",
|
||||
"WithSyncRes"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Target": {
|
||||
"type": "array",
|
||||
"description": "List of targets to be invoked. Default is '{default_target}'",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Default",
|
||||
"DevBuild",
|
||||
"DevBuildDefault",
|
||||
"DevBuildReleaseSimulation",
|
||||
"ReleaseMaa",
|
||||
"SetMaaChangeLog",
|
||||
"SetPackageBundled",
|
||||
"SetVersion",
|
||||
"UseClean",
|
||||
"UseCommitVersion",
|
||||
"UseMaaChangeLog",
|
||||
"UseMaaDevBundle",
|
||||
"UseMaaRelease",
|
||||
"UsePublishArtifact",
|
||||
"UsePublishRelease",
|
||||
"UseRsVersion",
|
||||
"UseTagVersion",
|
||||
"WithCompileCoreRelease",
|
||||
"WithCompileWpfRelease",
|
||||
"WithSyncRes"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Verbosity": {
|
||||
"type": "string",
|
||||
"description": "Logging verbosity during build execution. Default is 'Normal'",
|
||||
"enum": ["Minimal", "Normal", "Quiet", "Verbose"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"$schema": "./build.schema.json",
|
||||
"Solution": "tools/MaaBuilder.sln"
|
||||
"$schema": "./build.schema.json",
|
||||
"Solution": "tools/MaaBuilder.sln"
|
||||
}
|
||||
|
||||
32
.pre-commit-config.yaml
Normal file
32
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
default_install_hook_types: [pre-commit, prepare-commit-msg]
|
||||
ci:
|
||||
autofix_commit_msg: "chore: Auto update by pre-commit hooks [skip changelog]"
|
||||
autofix_prs: true
|
||||
repos:
|
||||
- repo: https://github.com/shssoichiro/oxipng
|
||||
rev: v9.1.4
|
||||
hooks:
|
||||
- id: oxipng
|
||||
args: ["-q", "-o", "2", "-s", "--ng"]
|
||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||
rev: v20.1.0
|
||||
hooks:
|
||||
- id: clang-format
|
||||
files: ^src/MaaCore/.*
|
||||
args: ["--assume-filename", ".clang-format"]
|
||||
- repo: https://github.com/rbubley/mirrors-prettier
|
||||
rev: v3.5.3
|
||||
hooks:
|
||||
- id: prettier
|
||||
files: ^((\.github/ISSUE_TEMPLATE|docs|resource|src|tools|website)/.*|\.pre-commit-config\.yaml|package-definition\.json)
|
||||
types_or:
|
||||
- yaml
|
||||
- json
|
||||
- repo: https://github.com/DavidAnson/markdownlint-cli2
|
||||
rev: v0.17.2
|
||||
hooks:
|
||||
- id: markdownlint-cli2
|
||||
files: ^docs/.*|^README\.md$
|
||||
types:
|
||||
- markdown
|
||||
args: ["--fix", "--config", "docs/.markdownlint.yaml", "#**/node_modules"]
|
||||
15
.prettierignore
Normal file
15
.prettierignore
Normal file
@@ -0,0 +1,15 @@
|
||||
**/node_modules/
|
||||
|
||||
MaaDeps/
|
||||
3rdparty/
|
||||
src/maa-cli
|
||||
src/MaaMacGui
|
||||
|
||||
website/
|
||||
docs/
|
||||
|
||||
resource/Arknights-Tile-Pos/
|
||||
tools/OptimizeTemplates/optimize_templates.json
|
||||
|
||||
CITATION.cff
|
||||
CHANGELOG.md
|
||||
17
.prettierrc
Normal file
17
.prettierrc
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"tabWidth": 4,
|
||||
"printWidth": 120,
|
||||
"useTabs": false,
|
||||
"bracketSameLine": true,
|
||||
"bracketSpacing": true,
|
||||
"endOfLine": "auto",
|
||||
"overrides": [
|
||||
{
|
||||
"files": [".clang-format", "**/*.yml", "**/*.yaml"],
|
||||
"options": {
|
||||
"parser": "yaml",
|
||||
"tabWidth": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
1
3rdparty/EmulatorExtras
vendored
Submodule
1
3rdparty/EmulatorExtras
vendored
Submodule
Submodule 3rdparty/EmulatorExtras added at 54d3a3ad44
172
3rdparty/include/Arknights-Tile-Pos/TileCalc.hpp
vendored
172
3rdparty/include/Arknights-Tile-Pos/TileCalc.hpp
vendored
@@ -1,172 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <meojson/json.hpp>
|
||||
#include <opencv2/core.hpp>
|
||||
|
||||
#include "TileDef.hpp"
|
||||
|
||||
namespace Map
|
||||
{
|
||||
struct Tile
|
||||
{
|
||||
int heightType = 0;
|
||||
int buildableType = 0;
|
||||
std::string tileKey;
|
||||
};
|
||||
|
||||
class Level
|
||||
{
|
||||
public:
|
||||
Level(const json::value& data);
|
||||
int get_width() const { return width; }
|
||||
int get_height() const { return height; }
|
||||
Tile get_item(int y, int x) const { return tiles[y][x]; }
|
||||
std::vector<cv::Point3d> view;
|
||||
LevelKey key;
|
||||
|
||||
private:
|
||||
int height = 0;
|
||||
int width = 0;
|
||||
std::vector<std::vector<Tile>> tiles;
|
||||
};
|
||||
|
||||
class TileCalc
|
||||
{
|
||||
public:
|
||||
TileCalc(int width, int height);
|
||||
|
||||
bool run(const Level& level, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles, double shift_x = 0, double shift_y = 0) const;
|
||||
|
||||
private:
|
||||
bool adapter(double& x, double& y) const;
|
||||
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
const double degree = atan(1.0) * 4 / 180;
|
||||
std::vector<Level> levels;
|
||||
cv::Mat MatrixP = cv::Mat(4, 4, CV_64F);
|
||||
cv::Mat MatrixX = cv::Mat(4, 4, CV_64F);
|
||||
cv::Mat MatrixY = cv::Mat(4, 4, CV_64F);
|
||||
};
|
||||
|
||||
inline void InitMat4x4(cv::Mat& m, double (*num)[4])
|
||||
{
|
||||
for (int i = 0; i < m.rows; i++)
|
||||
for (int j = 0; j < m.cols; j++)
|
||||
m.at<double>(i, j) = num[i][j];
|
||||
}
|
||||
|
||||
inline Level::Level(const json::value& data)
|
||||
{
|
||||
key.stageId = data.at("stageId").as_string();
|
||||
key.code = data.at("code").as_string();
|
||||
key.levelId = data.at("levelId").as_string();
|
||||
key.name = data.get("name", "null");
|
||||
this->height = data.at("height").as_integer();
|
||||
this->width = data.at("width").as_integer();
|
||||
for (const json::value& point_data : data.at("view").as_array()) {
|
||||
cv::Point3d tmp;
|
||||
auto point_array = point_data.as_array();
|
||||
tmp.x = point_array[0].as_double();
|
||||
tmp.y = point_array[1].as_double();
|
||||
tmp.z = point_array[2].as_double();
|
||||
this->view.emplace_back(std::move(tmp));
|
||||
}
|
||||
for (const json::value& row : data.at("tiles").as_array()) {
|
||||
std::vector<Tile> tmp;
|
||||
tmp.reserve(this->width);
|
||||
for (const json::value& tile : row.as_array()) {
|
||||
tmp.emplace_back(Tile { tile.at("heightType").as_integer(), tile.at("buildableType").as_integer(),
|
||||
tile.get("tileKey", std::string()) });
|
||||
}
|
||||
tiles.emplace_back(std::move(tmp));
|
||||
}
|
||||
}
|
||||
|
||||
inline TileCalc::TileCalc(int width, int height)
|
||||
{
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
double ratio = static_cast<double>(height) / width;
|
||||
double matrixP[4][4] { { ratio / tan(20 * degree), 0, 0, 0 },
|
||||
{ 0, 1 / tan(20 * degree), 0, 0 },
|
||||
{ 0, 0, -(1000 + 0.3) / (1000 - 0.3), -(1000 * 0.3 * 2) / (1000 - 0.3) },
|
||||
{ 0, 0, -1, 0 } };
|
||||
InitMat4x4(this->MatrixP, matrixP);
|
||||
double matrixX[4][4] { { 1, 0, 0, 0 },
|
||||
{ 0, cos(30 * degree), -sin(30 * degree), 0 },
|
||||
{ 0, -sin(30 * degree), -cos(30 * degree), 0 },
|
||||
{ 0, 0, 0, 1 } };
|
||||
InitMat4x4(this->MatrixX, matrixX);
|
||||
double matrixY[4][4] { { cos(10 * degree), 0, sin(10 * degree), 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ -sin(10 * degree), 0, cos(10 * degree), 0 },
|
||||
{ 0, 0, 0, 1 } };
|
||||
InitMat4x4(this->MatrixY, matrixY);
|
||||
}
|
||||
|
||||
inline bool TileCalc::run(const Level& level, bool side, std::vector<std::vector<cv::Point2d>>& out_pos,
|
||||
std::vector<std::vector<Tile>>& out_tiles, double shift_x, double shift_y) const
|
||||
{
|
||||
auto [x, y, z] = level.view[side ? 1 : 0];
|
||||
double adapter_y = 0, adapter_z = 0;
|
||||
this->adapter(adapter_y, adapter_z);
|
||||
double matrix[4][4] {
|
||||
{ 1, 0, 0, -x }, { 0, 1, 0, -y - adapter_y }, { 0, 0, 1, -z - adapter_z }, { 0, 0, 0, 1 }
|
||||
};
|
||||
auto raw = cv::Mat(cv::Size(4, 4), CV_64F);
|
||||
auto Finall_Matrix = cv::Mat(cv::Size(4, 4), CV_64F);
|
||||
InitMat4x4(raw, matrix);
|
||||
if (side) {
|
||||
Finall_Matrix = this->MatrixP * this->MatrixX * this->MatrixY * raw;
|
||||
}
|
||||
else {
|
||||
Finall_Matrix = this->MatrixP * this->MatrixX * raw;
|
||||
}
|
||||
int h = level.get_height();
|
||||
int w = level.get_width();
|
||||
auto map_point = cv::Mat(cv::Size(1, 4), CV_64F);
|
||||
map_point.at<double>(3, 0) = 1;
|
||||
auto tmp_pos = std::vector<cv::Point2d>(w);
|
||||
auto tmp_tiles = std::vector<Tile>(w);
|
||||
for (int i = 0; i < h; i++) {
|
||||
for (int j = 0; j < w; j++) {
|
||||
tmp_tiles[j] = level.get_item(i, j);
|
||||
map_point.at<double>(0, 0) = j - (w - 1) / 2.0 + shift_x;
|
||||
map_point.at<double>(1, 0) = (h - 1) / 2.0 - i + shift_y;
|
||||
map_point.at<double>(2, 0) = tmp_tiles[j].heightType * -0.4;
|
||||
cv::Mat view_point = Finall_Matrix * map_point;
|
||||
view_point = view_point / view_point.at<double>(3, 0);
|
||||
view_point = (view_point + 1) / 2;
|
||||
tmp_pos[j] = cv::Point2d(view_point.at<double>(0, 0) * this->width,
|
||||
(1 - view_point.at<double>(1, 0)) * this->height);
|
||||
}
|
||||
out_pos.emplace_back(tmp_pos);
|
||||
out_tiles.emplace_back(tmp_tiles);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool TileCalc::adapter(double& x, double& y) const
|
||||
{
|
||||
const double fromRatio = 9.0 / 16;
|
||||
const double toRatio = 3.0 / 4;
|
||||
double ratio = static_cast<double>(height) / width;
|
||||
if (ratio < fromRatio - 0.00001) {
|
||||
x = 0;
|
||||
y = 0;
|
||||
return false;
|
||||
}
|
||||
double t = (ratio - fromRatio) / (toRatio - fromRatio);
|
||||
x = -1.4 * t;
|
||||
y = -2.8 * t;
|
||||
return true;
|
||||
}
|
||||
} // namespace Map
|
||||
131
3rdparty/include/Arknights-Tile-Pos/TileCalc2.hpp
vendored
Normal file
131
3rdparty/include/Arknights-Tile-Pos/TileCalc2.hpp
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
#pragma once
|
||||
|
||||
#include <meojson/json.hpp>
|
||||
#include <numbers>
|
||||
#include <opencv2/core/matx.hpp>
|
||||
#include <opencv2/core/types.hpp>
|
||||
|
||||
#include "TileDef.hpp"
|
||||
|
||||
namespace Map::TileCalc2
|
||||
{
|
||||
using vec3d = cv::Vec3d;
|
||||
using matrix4x4 = cv::Matx44d;
|
||||
static constexpr double degree = std::numbers::pi / 180;
|
||||
|
||||
inline vec3d camera_pos(const Level& level, bool side = false, int width = 1280, int height = 720)
|
||||
{
|
||||
const auto [x, y, z] = level.view[side ? 1 : 0];
|
||||
|
||||
static constexpr double fromRatio = 9. / 16;
|
||||
static constexpr double toRatio = 3. / 4;
|
||||
const double ratio = static_cast<double>(height) / width;
|
||||
const double t = (fromRatio - ratio) / (fromRatio - toRatio);
|
||||
const vec3d pos_adj = { -1.4 * t, -2.8 * t, 0 };
|
||||
return { x + pos_adj[0], y + pos_adj[1], z + pos_adj[2] };
|
||||
}
|
||||
|
||||
inline vec3d camera_euler_angles_yxz(const Level& /*level*/, bool side = false)
|
||||
{
|
||||
if (side) {
|
||||
return { 10 * degree, 30 * degree, 0 };
|
||||
}
|
||||
|
||||
return { 0, 30 * degree, 0 };
|
||||
}
|
||||
|
||||
inline matrix4x4 camera_matrix_from_trans(
|
||||
const vec3d& pos,
|
||||
const vec3d& euler,
|
||||
double ratio,
|
||||
double fov_2_y = 20 * degree,
|
||||
double far_c = 1000,
|
||||
double near_c = 0.3)
|
||||
{
|
||||
const double cos_y = std::cos(euler[0]);
|
||||
const double sin_y = std::sin(euler[0]);
|
||||
const double cos_x = std::cos(euler[1]);
|
||||
const double sin_x = std::sin(euler[1]);
|
||||
const double tan_f = std::tan(fov_2_y);
|
||||
|
||||
const matrix4x4 translate = {
|
||||
1, 0, 0, -pos[0], //
|
||||
0, 1, 0, -pos[1], //
|
||||
0, 0, 1, -pos[2], //
|
||||
0, 0, 0, 1,
|
||||
};
|
||||
const matrix4x4 matrixY = {
|
||||
cos_y, 0, sin_y, 0, //
|
||||
0, 1, 0, 0, //
|
||||
-sin_y, 0, cos_y, 0, //
|
||||
0, 0, 0, 1,
|
||||
};
|
||||
const matrix4x4 matrixX = {
|
||||
1, 0, 0, 0, //
|
||||
0, cos_x, -sin_x, 0, //
|
||||
0, -sin_x, -cos_x, 0, //
|
||||
0, 0, 0, 1,
|
||||
};
|
||||
const matrix4x4 proj = matrix4x4 {
|
||||
// clang-format off
|
||||
ratio / tan_f, 0, 0, 0,
|
||||
0, 1 / tan_f, 0, 0,
|
||||
0, 0, -(far_c + near_c) / (far_c - near_c), -(far_c * near_c * 2) / (far_c - near_c),
|
||||
0, 0, -1, 0,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
return proj * matrixX * matrixY * translate;
|
||||
}
|
||||
|
||||
inline cv::Point world_to_screen(const Level& level, const vec3d& world_pos, bool side, const vec3d& offset = {})
|
||||
{
|
||||
static constexpr int width = 1280;
|
||||
static constexpr int height = 720;
|
||||
const vec3d pos_cam = camera_pos(level, side, width, height) + offset;
|
||||
const vec3d euler = camera_euler_angles_yxz(level, side);
|
||||
const matrix4x4 matrix = camera_matrix_from_trans(pos_cam, euler, static_cast<double>(height) / width);
|
||||
auto result = matrix * cv::Point3d(world_pos);
|
||||
result = result / result(3);
|
||||
result = (result + cv::Vec4d::ones()) / 2.;
|
||||
return {
|
||||
static_cast<int>(std::round(result(0) * width)),
|
||||
static_cast<int>(std::round((1 - result(1)) * height)),
|
||||
};
|
||||
}
|
||||
|
||||
inline vec3d get_tile_world_pos(const Level& level, int tile_y, int tile_x)
|
||||
{
|
||||
const int h = level.get_height();
|
||||
const int w = level.get_width();
|
||||
const auto& tile = level.get_item(tile_y, tile_x);
|
||||
return {
|
||||
tile_x - (w - 1) / 2.,
|
||||
(h - 1) / 2. - tile_y,
|
||||
tile.heightType * -0.4,
|
||||
};
|
||||
}
|
||||
|
||||
inline auto get_tile_screen_pos(const Level& level, int tile_y, int tile_x, bool side = false, const vec3d& offset = {})
|
||||
{
|
||||
return world_to_screen(level, get_tile_world_pos(level, tile_y, tile_x), side, offset);
|
||||
}
|
||||
|
||||
static constexpr double rel_pos_x = 1.3143386840820312;
|
||||
static constexpr double rel_pos_y = 1.314337134361267;
|
||||
static constexpr double rel_pos_z = -0.3967874050140381;
|
||||
|
||||
inline auto get_retreat_screen_pos(const Level& level)
|
||||
{
|
||||
const vec3d relative_pos = { -rel_pos_x, +rel_pos_y, rel_pos_z };
|
||||
return world_to_screen(level, relative_pos, true);
|
||||
}
|
||||
|
||||
inline auto get_skill_screen_pos(const Level& level)
|
||||
{
|
||||
const vec3d relative_pos = { +rel_pos_x, -rel_pos_y, rel_pos_z };
|
||||
return world_to_screen(level, relative_pos, true);
|
||||
}
|
||||
|
||||
} // namespace Map::TileCalc2
|
||||
|
||||
106
3rdparty/include/Arknights-Tile-Pos/TileDef.hpp
vendored
106
3rdparty/include/Arknights-Tile-Pos/TileDef.hpp
vendored
@@ -1,32 +1,94 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <meojson/json.hpp>
|
||||
#include <opencv2/core.hpp>
|
||||
|
||||
namespace Map
|
||||
{
|
||||
struct LevelKey
|
||||
{
|
||||
std::string stageId;
|
||||
std::string code;
|
||||
std::string levelId;
|
||||
std::string name;
|
||||
struct LevelKey
|
||||
{
|
||||
std::string stageId;
|
||||
std::string code;
|
||||
std::string levelId;
|
||||
std::string name;
|
||||
|
||||
bool empty_or_equal(const std::string& lhs, const std::string& rhs) const noexcept
|
||||
{
|
||||
return (lhs.empty() || rhs.empty()) ? true : lhs == rhs;
|
||||
bool empty_or_equal(const std::string& lhs, const std::string& rhs) const noexcept
|
||||
{
|
||||
return (lhs.empty() || rhs.empty()) ? true : lhs == rhs;
|
||||
}
|
||||
|
||||
bool operator==(const LevelKey& other) const noexcept
|
||||
{
|
||||
return empty_or_equal(stageId, other.stageId) && empty_or_equal(code, other.code)
|
||||
&& empty_or_equal(levelId, other.levelId) && empty_or_equal(name, other.name);
|
||||
}
|
||||
|
||||
bool operator==(const std::string& any_key) const noexcept
|
||||
{
|
||||
if (any_key.empty()) {
|
||||
return false;
|
||||
}
|
||||
bool operator==(const LevelKey& other) const noexcept
|
||||
{
|
||||
return empty_or_equal(stageId, other.stageId) && empty_or_equal(code, other.code) &&
|
||||
empty_or_equal(levelId, other.levelId) && empty_or_equal(name, other.name);
|
||||
return empty_or_equal(stageId, any_key) || empty_or_equal(code, any_key)
|
||||
|| empty_or_equal(levelId, any_key) || empty_or_equal(name, any_key);
|
||||
}
|
||||
};
|
||||
|
||||
struct Tile
|
||||
{
|
||||
int heightType = 0;
|
||||
int buildableType = 0;
|
||||
std::string tileKey;
|
||||
};
|
||||
|
||||
class Level
|
||||
{
|
||||
public:
|
||||
explicit Level(const json::value& data);
|
||||
Level() = default;
|
||||
|
||||
int get_width() const { return width; }
|
||||
|
||||
int get_height() const { return height; }
|
||||
|
||||
Tile get_item(int y, int x) const { return tiles[y][x]; }
|
||||
|
||||
std::vector<cv::Point3d> view {};
|
||||
LevelKey key {};
|
||||
|
||||
private:
|
||||
int height = 0;
|
||||
int width = 0;
|
||||
std::vector<std::vector<Tile>> tiles;
|
||||
};
|
||||
|
||||
inline Level::Level(const json::value& data)
|
||||
{
|
||||
key.stageId = data.at("stageId").as_string();
|
||||
key.code = data.at("code").as_string();
|
||||
key.levelId = data.at("levelId").as_string();
|
||||
key.name = data.get("name", "null");
|
||||
this->height = data.at("height").as_integer();
|
||||
this->width = data.at("width").as_integer();
|
||||
for (const json::value& point_data : data.at("view").as_array()) {
|
||||
cv::Point3d tmp;
|
||||
auto point_array = point_data.as_array();
|
||||
tmp.x = point_array[0].as_double();
|
||||
tmp.y = point_array[1].as_double();
|
||||
tmp.z = point_array[2].as_double();
|
||||
this->view.emplace_back(tmp);
|
||||
}
|
||||
for (const json::value& row : data.at("tiles").as_array()) {
|
||||
std::vector<Tile> tmp;
|
||||
tmp.reserve(this->width);
|
||||
for (const json::value& tile : row.as_array()) {
|
||||
tmp.emplace_back(Tile { tile.at("heightType").as_integer(),
|
||||
tile.at("buildableType").as_integer(),
|
||||
tile.get("tileKey", std::string()) });
|
||||
}
|
||||
bool operator==(const std::string& any_key) const noexcept
|
||||
{
|
||||
if (any_key.empty()) {
|
||||
return false;
|
||||
}
|
||||
return empty_or_equal(stageId, any_key) || empty_or_equal(code, any_key) ||
|
||||
empty_or_equal(levelId, any_key) || empty_or_equal(name, any_key);
|
||||
}
|
||||
};
|
||||
tiles.emplace_back(std::move(tmp));
|
||||
}
|
||||
}
|
||||
} // namespace Map
|
||||
|
||||
195
3rdparty/include/meojson/.clang-format
vendored
195
3rdparty/include/meojson/.clang-format
vendored
@@ -1,195 +0,0 @@
|
||||
Language: Json
|
||||
ColumnLimit: 1000
|
||||
IndentWidth: 4
|
||||
---
|
||||
Language: Cpp
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignArrayOfStructures: None
|
||||
AlignConsecutiveMacros: None
|
||||
AlignConsecutiveAssignments: None
|
||||
AlignConsecutiveBitFields: None
|
||||
AlignConsecutiveDeclarations: None
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: Align
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: Inline
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: WithoutElse
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
AttributeMacros:
|
||||
- __capability
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: true
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterObjCDeclaration: true
|
||||
AfterStruct: true
|
||||
AfterUnion: false
|
||||
AfterExternBlock: true
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
BeforeLambdaBody: false
|
||||
BeforeWhile: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: false
|
||||
SplitEmptyNamespace: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeConceptDeclarations: true
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeInheritanceComma: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 120
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
QualifierAlignment: Leave
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: false
|
||||
DeriveLineEnding: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
EmptyLineAfterAccessModifier: Never
|
||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
PackConstructorInitializers: BinPack
|
||||
BasedOnStyle: ''
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
AllowAllConstructorInitializersOnNextLine: true
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IfMacros:
|
||||
- KJ_IF_MAYBE
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||
Priority: 2
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
||||
Priority: 3
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: '.*'
|
||||
Priority: 1
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
IncludeIsMainRegex: '(Test)?$'
|
||||
IncludeIsMainSourceRegex: ''
|
||||
IndentAccessModifiers: false
|
||||
IndentCaseLabels: false
|
||||
IndentCaseBlocks: false
|
||||
IndentGotoLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentExternBlock: AfterExternBlock
|
||||
IndentRequiresClause: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
InsertTrailingCommas: None
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
LambdaBodyIndentation: Signature
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: Inner
|
||||
ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCBreakBeforeNestedBlockParam: true
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakOpenParenthesis: 0
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 1000
|
||||
PenaltyIndentedWhitespace: 0
|
||||
PointerAlignment: Left
|
||||
PPIndentWidth: -1
|
||||
ReferenceAlignment: Pointer
|
||||
ReflowComments: true
|
||||
RemoveBracesLLVM: false
|
||||
RequiresClausePosition: OwnLine
|
||||
SeparateDefinitionBlocks: Leave
|
||||
ShortNamespaceLines: 50
|
||||
SortIncludes: CaseSensitive
|
||||
SortJavaStaticImport: Before
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCaseColon: false
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeParensOptions:
|
||||
AfterControlStatements: true
|
||||
AfterForeachMacros: true
|
||||
AfterFunctionDefinitionName: false
|
||||
AfterFunctionDeclarationName: false
|
||||
AfterIfMacros: true
|
||||
AfterOverloadedOperator: false
|
||||
AfterRequiresInClause: true
|
||||
AfterRequiresInExpression: true
|
||||
BeforeNonEmptyParentheses: false
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceInEmptyBlock: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: Never
|
||||
SpacesInConditionalStatement: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 1
|
||||
Maximum: -1
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
SpaceBeforeSquareBrackets: false
|
||||
BitFieldColonSpacing: Both
|
||||
Standard: c++20
|
||||
StatementAttributeLikeMacros:
|
||||
- Q_EMIT
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
TabWidth: 4
|
||||
UseCRLF: false
|
||||
UseTab: Never
|
||||
WhitespaceSensitiveMacros:
|
||||
- STRINGIZE
|
||||
- PP_STRINGIZE
|
||||
- BOOST_PP_STRINGIZE
|
||||
- NS_SWIFT_NAME
|
||||
- CF_SWIFT_NAME
|
||||
717
3rdparty/include/meojson/common/array.hpp
vendored
Normal file
717
3rdparty/include/meojson/common/array.hpp
vendored
Normal file
@@ -0,0 +1,717 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <initializer_list>
|
||||
#include <optional>
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
#include "exception.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
namespace json
|
||||
{
|
||||
template <typename string_t>
|
||||
class basic_array
|
||||
{
|
||||
friend class basic_value<string_t>;
|
||||
friend class basic_object<string_t>;
|
||||
|
||||
public:
|
||||
using raw_array = std::vector<basic_value<string_t>>;
|
||||
using value_type = typename raw_array::value_type;
|
||||
using iterator = typename raw_array::iterator;
|
||||
using const_iterator = typename raw_array::const_iterator;
|
||||
using reverse_iterator = typename raw_array::reverse_iterator;
|
||||
using const_reverse_iterator = typename raw_array::const_reverse_iterator;
|
||||
using char_t = typename string_t::value_type;
|
||||
|
||||
public:
|
||||
basic_array() = default;
|
||||
basic_array(const basic_array<string_t>& rhs) = default;
|
||||
basic_array(basic_array<string_t>&& rhs) noexcept = default;
|
||||
basic_array(std::initializer_list<value_type> init_list);
|
||||
basic_array(typename raw_array::size_type size);
|
||||
|
||||
// explicit basic_array(const basic_value<string_t>& val);
|
||||
// explicit basic_array(basic_value<string_t>&& val);
|
||||
|
||||
template <
|
||||
typename collection_t,
|
||||
std::enable_if_t<
|
||||
_utils::is_collection<collection_t>
|
||||
&& std::is_constructible_v<value_type, _utils::range_value_t<collection_t>>,
|
||||
bool> = true>
|
||||
basic_array(collection_t arr)
|
||||
: _array_data(std::make_move_iterator(arr.begin()), std::make_move_iterator(arr.end()))
|
||||
{
|
||||
}
|
||||
|
||||
template <
|
||||
typename fixed_array_t,
|
||||
std::enable_if_t<_utils::is_fixed_array<fixed_array_t>, bool> = true>
|
||||
basic_array(const fixed_array_t& arr)
|
||||
: _array_data(arr.begin(), arr.end())
|
||||
{
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<_utils::has_to_json_in_member<jsonization_t>::value, bool> = true>
|
||||
basic_array(const jsonization_t& value)
|
||||
: basic_array(value.to_json())
|
||||
{
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<_utils::has_to_json_in_templ_spec<jsonization_t>::value, bool> = true>
|
||||
basic_array(const jsonization_t& value)
|
||||
: basic_array(ext::jsonization<jsonization_t>().to_json(value))
|
||||
{
|
||||
}
|
||||
|
||||
template <typename... elem_ts>
|
||||
basic_array(const std::tuple<elem_ts...>& tup)
|
||||
{
|
||||
foreach_tuple(tup, std::make_index_sequence<std::tuple_size_v<std::tuple<elem_ts...>>>());
|
||||
}
|
||||
template <typename first_t, typename second_t>
|
||||
basic_array(std::pair<first_t, second_t> pair)
|
||||
: _array_data({ std::move(pair.first), std::move(pair.second) })
|
||||
{
|
||||
}
|
||||
|
||||
~basic_array() noexcept = default;
|
||||
|
||||
bool empty() const noexcept { return _array_data.empty(); }
|
||||
|
||||
size_t size() const noexcept { return _array_data.size(); }
|
||||
|
||||
bool contains(size_t pos) const { return pos < _array_data.size(); }
|
||||
|
||||
bool exists(size_t pos) const { return contains(pos); }
|
||||
|
||||
const basic_value<string_t>& at(size_t pos) const;
|
||||
|
||||
string_t dumps(std::optional<size_t> indent = std::nullopt) const
|
||||
{
|
||||
return indent ? format(*indent) : to_string();
|
||||
}
|
||||
|
||||
string_t to_string() const;
|
||||
|
||||
string_t format(size_t indent = 4) const { return format(indent, 0); }
|
||||
|
||||
template <typename value_t>
|
||||
bool all() const;
|
||||
template <typename value_t, template <typename...> typename collection_t = std::vector>
|
||||
collection_t<value_t> as_collection() const;
|
||||
template <
|
||||
typename value_t,
|
||||
size_t Size,
|
||||
template <typename, size_t> typename fixed_array_t = std::array>
|
||||
fixed_array_t<value_t, Size> as_fixed_array() const;
|
||||
template <typename... elem_ts>
|
||||
std::tuple<elem_ts...> as_tuple() const;
|
||||
template <typename first_t, typename second_t>
|
||||
std::pair<first_t, second_t> as_pair() const;
|
||||
|
||||
// Usage: get(key_1, key_2, ..., default_value);
|
||||
template <typename... key_then_default_value_t>
|
||||
auto get(key_then_default_value_t&&... keys_then_default_value) const;
|
||||
|
||||
template <typename value_t = basic_value<string_t>>
|
||||
std::optional<value_t> find(size_t pos) const;
|
||||
|
||||
template <typename... args_t>
|
||||
decltype(auto) emplace_back(args_t&&... args);
|
||||
template <typename... args_t>
|
||||
decltype(auto) push_back(args_t&&... args);
|
||||
|
||||
void clear() noexcept;
|
||||
bool erase(size_t pos);
|
||||
bool erase(iterator iter);
|
||||
|
||||
iterator begin() noexcept;
|
||||
iterator end() noexcept;
|
||||
const_iterator begin() const noexcept;
|
||||
const_iterator end() const noexcept;
|
||||
const_iterator cbegin() const noexcept;
|
||||
const_iterator cend() const noexcept;
|
||||
|
||||
reverse_iterator rbegin() noexcept;
|
||||
reverse_iterator rend() noexcept;
|
||||
const_reverse_iterator rbegin() const noexcept;
|
||||
const_reverse_iterator rend() const noexcept;
|
||||
const_reverse_iterator crbegin() const noexcept;
|
||||
const_reverse_iterator crend() const noexcept;
|
||||
|
||||
const basic_value<string_t>& operator[](size_t pos) const;
|
||||
basic_value<string_t>& operator[](size_t pos);
|
||||
|
||||
basic_array<string_t> operator+(const basic_array<string_t>& rhs) const&;
|
||||
basic_array<string_t> operator+(basic_array<string_t>&& rhs) const&;
|
||||
basic_array<string_t> operator+(const basic_array<string_t>& rhs) &&;
|
||||
basic_array<string_t> operator+(basic_array<string_t>&& rhs) &&;
|
||||
|
||||
basic_array<string_t>& operator+=(const basic_array<string_t>& rhs);
|
||||
basic_array<string_t>& operator+=(basic_array<string_t>&& rhs);
|
||||
|
||||
basic_array<string_t>& operator=(const basic_array<string_t>&) = default;
|
||||
basic_array<string_t>& operator=(basic_array<string_t>&&) noexcept = default;
|
||||
|
||||
template <
|
||||
typename value_t,
|
||||
std::enable_if_t<std::is_convertible_v<value_t, basic_array<string_t>>, bool> = true>
|
||||
basic_array<string_t>& operator=(value_t rhs)
|
||||
{
|
||||
return *this = basic_array<string_t>(std::move(rhs));
|
||||
}
|
||||
|
||||
bool operator==(const basic_array<string_t>& rhs) const;
|
||||
|
||||
bool operator!=(const basic_array<string_t>& rhs) const { return !(*this == rhs); }
|
||||
|
||||
template <
|
||||
typename value_t,
|
||||
template <typename...> typename collection_t = std::vector,
|
||||
std::enable_if_t<_utils::is_collection<collection_t<value_t>>, bool> = true>
|
||||
explicit operator collection_t<value_t>() const
|
||||
{
|
||||
return as_collection<value_t, collection_t>();
|
||||
}
|
||||
|
||||
template <
|
||||
typename value_t,
|
||||
size_t Size,
|
||||
template <typename, size_t> typename fixed_array_t = std::array,
|
||||
std::enable_if_t<_utils::is_fixed_array<fixed_array_t<value_t, Size>>, bool> = true>
|
||||
explicit operator fixed_array_t<value_t, Size>() const
|
||||
{
|
||||
return as_fixed_array<value_t, Size, fixed_array_t>();
|
||||
}
|
||||
|
||||
template <typename... elem_ts>
|
||||
explicit operator std::tuple<elem_ts...>() const
|
||||
{
|
||||
return as_tuple<elem_ts...>();
|
||||
}
|
||||
|
||||
template <typename elem1_t, typename elem2_t>
|
||||
explicit operator std::pair<elem1_t, elem2_t>() const
|
||||
{
|
||||
return as_pair<elem1_t, elem2_t>();
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<_utils::has_from_json_in_member<jsonization_t, string_t>::value, bool> =
|
||||
true>
|
||||
explicit operator jsonization_t() const
|
||||
{
|
||||
jsonization_t dst {};
|
||||
if (!dst.from_json(*this)) {
|
||||
throw exception("Wrong JSON");
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<
|
||||
_utils::has_from_json_in_templ_spec<jsonization_t, string_t>::value,
|
||||
bool> = true>
|
||||
explicit operator jsonization_t() const
|
||||
{
|
||||
jsonization_t dst {};
|
||||
if (!ext::jsonization<jsonization_t>().from_json(*this, dst)) {
|
||||
throw exception("Wrong JSON");
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename... key_then_default_value_t, size_t... keys_indexes_t>
|
||||
auto
|
||||
get(std::tuple<key_then_default_value_t...> keys_then_default_value,
|
||||
std::index_sequence<keys_indexes_t...>) const;
|
||||
template <typename value_t, typename... rest_keys_t>
|
||||
auto get_helper(const value_t& default_value, size_t pos, rest_keys_t&&... rest) const;
|
||||
template <typename value_t>
|
||||
auto get_helper(const value_t& default_value, size_t pos) const;
|
||||
|
||||
template <typename tuple_t>
|
||||
tuple_t as_tuple_templ() const;
|
||||
template <size_t index, typename tuple_t>
|
||||
void set_tuple(tuple_t& tup) const;
|
||||
|
||||
template <typename Tuple, std::size_t... Is>
|
||||
void foreach_tuple(const Tuple& t, std::index_sequence<Is...>)
|
||||
{
|
||||
(_array_data.emplace_back(std::get<Is>(t)), ...);
|
||||
}
|
||||
|
||||
string_t format(size_t indent, size_t indent_times) const;
|
||||
|
||||
private:
|
||||
raw_array _array_data;
|
||||
};
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t>::basic_array(std::initializer_list<value_type> init_list)
|
||||
: _array_data(init_list)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t>::basic_array(typename raw_array::size_type size)
|
||||
: _array_data(size)
|
||||
{
|
||||
}
|
||||
|
||||
// template <typename string_t>
|
||||
// inline basic_array<string_t>::basic_array(const basic_value<string_t>& val) :
|
||||
// basic_array<string_t>(val.as_array())
|
||||
//{}
|
||||
//
|
||||
// template <typename string_t>
|
||||
// inline basic_array<string_t>::basic_array(basic_value<string_t>&& val)
|
||||
// : basic_array<string_t>(std::move(val.as_array()))
|
||||
//{}
|
||||
|
||||
template <typename string_t>
|
||||
inline void basic_array<string_t>::clear() noexcept
|
||||
{
|
||||
_array_data.clear();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_array<string_t>::erase(size_t pos)
|
||||
{
|
||||
return erase(_array_data.begin() + pos);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_array<string_t>::erase(iterator iter)
|
||||
{
|
||||
return _array_data.erase(iter) != _array_data.end();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... args_t>
|
||||
inline decltype(auto) basic_array<string_t>::emplace_back(args_t&&... args)
|
||||
{
|
||||
static_assert(
|
||||
std::is_constructible_v<value_type, args_t...>,
|
||||
"Parameter can't be used to construct a raw_array::value_type");
|
||||
return _array_data.emplace_back(std::forward<args_t>(args)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... args_t>
|
||||
inline decltype(auto) basic_array<string_t>::push_back(args_t&&... args)
|
||||
{
|
||||
return emplace_back(std::forward<args_t>(args)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline const basic_value<string_t>& basic_array<string_t>::at(size_t pos) const
|
||||
{
|
||||
return _array_data.at(pos);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline string_t basic_array<string_t>::to_string() const
|
||||
{
|
||||
string_t str { '[' };
|
||||
for (auto iter = _array_data.cbegin(); iter != _array_data.cend();) {
|
||||
str += iter->to_string();
|
||||
if (++iter != _array_data.cend()) {
|
||||
str += ',';
|
||||
}
|
||||
}
|
||||
str += char_t(']');
|
||||
return str;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline string_t basic_array<string_t>::format(size_t indent, size_t indent_times) const
|
||||
{
|
||||
const string_t tail_indent(indent * indent_times, ' ');
|
||||
const string_t body_indent(indent * (indent_times + 1), ' ');
|
||||
|
||||
string_t str { '[', '\n' };
|
||||
for (auto iter = _array_data.cbegin(); iter != _array_data.cend();) {
|
||||
str += body_indent + iter->format(indent, indent_times + 1);
|
||||
if (++iter != _array_data.cend()) {
|
||||
str += ',';
|
||||
}
|
||||
str += '\n';
|
||||
}
|
||||
str += tail_indent + char_t(']');
|
||||
return str;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t>
|
||||
inline bool basic_array<string_t>::all() const
|
||||
{
|
||||
for (const auto& elem : _array_data) {
|
||||
if (!elem.template is<value_t>()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace _as_collection_helper
|
||||
{
|
||||
template <typename T>
|
||||
class has_emplace_back
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int) -> decltype(std::declval<U>().emplace_back(), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t, template <typename...> typename collection_t>
|
||||
inline collection_t<value_t> basic_array<string_t>::as_collection() const
|
||||
{
|
||||
collection_t<value_t> result;
|
||||
if constexpr (_as_collection_helper::has_emplace_back<collection_t<value_t>>::value) {
|
||||
for (const auto& elem : _array_data) {
|
||||
result.emplace_back(elem.template as<value_t>());
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (const auto& elem : _array_data) {
|
||||
result.emplace(elem.template as<value_t>());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t, size_t Size, template <typename, size_t> typename fixed_array_t>
|
||||
inline fixed_array_t<value_t, Size> basic_array<string_t>::as_fixed_array() const
|
||||
{
|
||||
if (size() != Size) {
|
||||
throw exception("Wrong array size");
|
||||
}
|
||||
|
||||
fixed_array_t<value_t, Size> result;
|
||||
for (size_t i = 0; i < Size; ++i) {
|
||||
result.at(i) = _array_data.at(i).template as<value_t>();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <size_t index, typename tuple_t>
|
||||
inline void basic_array<string_t>::set_tuple(tuple_t& tup) const
|
||||
{
|
||||
using elem_t = std::tuple_element_t<index, tuple_t>;
|
||||
|
||||
if constexpr (index > 0) {
|
||||
set_tuple<index - 1>(tup);
|
||||
}
|
||||
|
||||
std::get<index>(tup) = static_cast<elem_t>(at(index));
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename tuple_t>
|
||||
inline tuple_t basic_array<string_t>::as_tuple_templ() const
|
||||
{
|
||||
constexpr size_t tuple_size = std::tuple_size_v<tuple_t>;
|
||||
|
||||
if (size() != tuple_size) {
|
||||
throw exception("Wrong array size");
|
||||
}
|
||||
|
||||
tuple_t result;
|
||||
set_tuple<tuple_size - 1>(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... elem_ts>
|
||||
inline std::tuple<elem_ts...> basic_array<string_t>::as_tuple() const
|
||||
{
|
||||
return as_tuple_templ<std::tuple<elem_ts...>>();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename first_t, typename second_t>
|
||||
inline std::pair<first_t, second_t> basic_array<string_t>::as_pair() const
|
||||
{
|
||||
return as_tuple_templ<std::pair<first_t, second_t>>();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... key_then_default_value_t>
|
||||
inline auto basic_array<string_t>::get(key_then_default_value_t&&... keys_then_default_value) const
|
||||
{
|
||||
return get(
|
||||
std::forward_as_tuple(keys_then_default_value...),
|
||||
std::make_index_sequence<sizeof...(keys_then_default_value) - 1> {});
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... key_then_default_value_t, size_t... keys_indexes_t>
|
||||
inline auto basic_array<string_t>::get(
|
||||
std::tuple<key_then_default_value_t...> keys_then_default_value,
|
||||
std::index_sequence<keys_indexes_t...>) const
|
||||
{
|
||||
constexpr unsigned long default_value_index = sizeof...(key_then_default_value_t) - 1;
|
||||
return get_helper(
|
||||
std::get<default_value_index>(keys_then_default_value),
|
||||
std::get<keys_indexes_t>(keys_then_default_value)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t, typename... rest_keys_t>
|
||||
inline auto basic_array<string_t>::get_helper(
|
||||
const value_t& default_value,
|
||||
size_t pos,
|
||||
rest_keys_t&&... rest) const
|
||||
{
|
||||
constexpr bool is_json = std::is_same_v<basic_value<string_t>, value_t>
|
||||
|| std::is_same_v<basic_array<string_t>, value_t>
|
||||
|| std::is_same_v<basic_object<string_t>, value_t>;
|
||||
constexpr bool is_string = std::is_constructible_v<string_t, value_t> && !is_json;
|
||||
|
||||
if (!contains(pos)) {
|
||||
if constexpr (is_string) {
|
||||
return string_t(default_value);
|
||||
}
|
||||
else {
|
||||
return value_t(default_value);
|
||||
}
|
||||
}
|
||||
|
||||
return at(pos).get_helper(default_value, std::forward<rest_keys_t>(rest)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t>
|
||||
inline auto basic_array<string_t>::get_helper(const value_t& default_value, size_t pos) const
|
||||
{
|
||||
constexpr bool is_json = std::is_same_v<basic_value<string_t>, value_t>
|
||||
|| std::is_same_v<basic_array<string_t>, value_t>
|
||||
|| std::is_same_v<basic_object<string_t>, value_t>;
|
||||
constexpr bool is_string = std::is_constructible_v<string_t, value_t> && !is_json;
|
||||
|
||||
if (!contains(pos)) {
|
||||
if constexpr (is_string) {
|
||||
return string_t(default_value);
|
||||
}
|
||||
else {
|
||||
return value_t(default_value);
|
||||
}
|
||||
}
|
||||
|
||||
auto val = _array_data.at(pos);
|
||||
if (val.template is<value_t>()) {
|
||||
if constexpr (is_string) {
|
||||
return val.template as<string_t>();
|
||||
}
|
||||
else {
|
||||
return val.template as<value_t>();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if constexpr (is_string) {
|
||||
return string_t(default_value);
|
||||
}
|
||||
else {
|
||||
return value_t(default_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t>
|
||||
inline std::optional<value_t> basic_array<string_t>::find(size_t pos) const
|
||||
{
|
||||
if (!contains(pos)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
const auto& val = _array_data.at(pos);
|
||||
return val.template is<value_t>() ? std::optional<value_t>(val.template as<value_t>())
|
||||
: std::nullopt;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::iterator basic_array<string_t>::begin() noexcept
|
||||
{
|
||||
return _array_data.begin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::iterator basic_array<string_t>::end() noexcept
|
||||
{
|
||||
return _array_data.end();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_iterator basic_array<string_t>::begin() const noexcept
|
||||
{
|
||||
return _array_data.begin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_iterator basic_array<string_t>::end() const noexcept
|
||||
{
|
||||
return _array_data.end();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_iterator basic_array<string_t>::cbegin() const noexcept
|
||||
{
|
||||
return _array_data.cbegin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_iterator basic_array<string_t>::cend() const noexcept
|
||||
{
|
||||
return _array_data.cend();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::reverse_iterator basic_array<string_t>::rbegin() noexcept
|
||||
{
|
||||
return _array_data.rbegin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::reverse_iterator basic_array<string_t>::rend() noexcept
|
||||
{
|
||||
return _array_data.rend();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_reverse_iterator
|
||||
basic_array<string_t>::rbegin() const noexcept
|
||||
{
|
||||
return _array_data.rbegin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_reverse_iterator
|
||||
basic_array<string_t>::rend() const noexcept
|
||||
{
|
||||
return _array_data.rend();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_reverse_iterator
|
||||
basic_array<string_t>::crbegin() const noexcept
|
||||
{
|
||||
return _array_data.crbegin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_array<string_t>::const_reverse_iterator
|
||||
basic_array<string_t>::crend() const noexcept
|
||||
{
|
||||
return _array_data.crend();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_value<string_t>& basic_array<string_t>::operator[](size_t pos)
|
||||
{
|
||||
return _array_data[pos];
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline const basic_value<string_t>& basic_array<string_t>::operator[](size_t pos) const
|
||||
{
|
||||
return _array_data[pos];
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t>
|
||||
basic_array<string_t>::operator+(const basic_array<string_t>& rhs) const&
|
||||
{
|
||||
basic_array<string_t> temp = *this;
|
||||
temp._array_data.insert(_array_data.end(), rhs.begin(), rhs.end());
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t> basic_array<string_t>::operator+(basic_array<string_t>&& rhs) const&
|
||||
{
|
||||
basic_array<string_t> temp = *this;
|
||||
temp._array_data.insert(
|
||||
_array_data.end(),
|
||||
std::make_move_iterator(rhs.begin()),
|
||||
std::make_move_iterator(rhs.end()));
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t> basic_array<string_t>::operator+(const basic_array<string_t>& rhs) &&
|
||||
{
|
||||
_array_data.insert(_array_data.end(), rhs.begin(), rhs.end());
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t> basic_array<string_t>::operator+(basic_array<string_t>&& rhs) &&
|
||||
{
|
||||
_array_data.insert(
|
||||
_array_data.end(),
|
||||
std::make_move_iterator(rhs.begin()),
|
||||
std::make_move_iterator(rhs.end()));
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t>& basic_array<string_t>::operator+=(const basic_array<string_t>& rhs)
|
||||
{
|
||||
_array_data.insert(_array_data.end(), rhs.begin(), rhs.end());
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_array<string_t>& basic_array<string_t>::operator+=(basic_array<string_t>&& rhs)
|
||||
{
|
||||
_array_data.insert(
|
||||
_array_data.end(),
|
||||
std::make_move_iterator(rhs.begin()),
|
||||
std::make_move_iterator(rhs.end()));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_array<string_t>::operator==(const basic_array<string_t>& rhs) const
|
||||
{
|
||||
return _array_data == rhs._array_data;
|
||||
}
|
||||
|
||||
template <
|
||||
typename ostream_t,
|
||||
typename string_t,
|
||||
typename std_ostream_t = std::basic_ostream<
|
||||
typename string_t::value_type,
|
||||
std::char_traits<typename string_t::value_type>>,
|
||||
typename enable_t = std::enable_if_t<
|
||||
std::is_same_v<std_ostream_t, ostream_t> || std::is_base_of_v<std_ostream_t, ostream_t>>>
|
||||
ostream_t& operator<<(ostream_t& out, const basic_array<string_t>& arr)
|
||||
{
|
||||
out << arr.format();
|
||||
return out;
|
||||
}
|
||||
} // namespace json
|
||||
35
3rdparty/include/meojson/common/exception.hpp
vendored
Normal file
35
3rdparty/include/meojson/common/exception.hpp
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <exception>
|
||||
#include <string>
|
||||
|
||||
namespace json
|
||||
{
|
||||
class exception : public std::exception
|
||||
{
|
||||
public:
|
||||
exception() = default;
|
||||
|
||||
exception(const std::string& msg)
|
||||
: _what(msg)
|
||||
{
|
||||
}
|
||||
|
||||
exception(const exception&) = default;
|
||||
exception& operator=(const exception&) = default;
|
||||
exception(exception&&) = default;
|
||||
exception& operator=(exception&&) = default;
|
||||
|
||||
virtual ~exception() noexcept override = default;
|
||||
|
||||
virtual const char* what() const noexcept override
|
||||
{
|
||||
return _what.empty() ? "Unknown exception" : _what.c_str();
|
||||
}
|
||||
|
||||
protected:
|
||||
std::string _what;
|
||||
};
|
||||
}
|
||||
534
3rdparty/include/meojson/common/object.hpp
vendored
Normal file
534
3rdparty/include/meojson/common/object.hpp
vendored
Normal file
@@ -0,0 +1,534 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <initializer_list>
|
||||
#include <map>
|
||||
#include <optional>
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
|
||||
#include "exception.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
namespace json
|
||||
{
|
||||
template <typename string_t>
|
||||
class basic_object
|
||||
{
|
||||
friend class basic_value<string_t>;
|
||||
friend class basic_array<string_t>;
|
||||
|
||||
public:
|
||||
using raw_object = std::map<string_t, basic_value<string_t>>;
|
||||
using key_type = typename raw_object::key_type;
|
||||
using mapped_type = typename raw_object::mapped_type;
|
||||
using value_type = typename raw_object::value_type;
|
||||
using iterator = typename raw_object::iterator;
|
||||
using const_iterator = typename raw_object::const_iterator;
|
||||
using char_t = typename string_t::value_type;
|
||||
|
||||
public:
|
||||
basic_object() = default;
|
||||
basic_object(const basic_object<string_t>& rhs) = default;
|
||||
basic_object(basic_object<string_t>&& rhs) noexcept = default;
|
||||
basic_object(std::initializer_list<value_type> init_list);
|
||||
|
||||
// explicit basic_object(const basic_value<string_t>& val);
|
||||
// explicit basic_object(basic_value<string_t>&& val);
|
||||
|
||||
template <
|
||||
typename map_t,
|
||||
std::enable_if_t<
|
||||
_utils::is_map<map_t>
|
||||
&& std::is_constructible_v<value_type, _utils::range_value_t<map_t>>,
|
||||
bool> = true>
|
||||
basic_object(map_t map)
|
||||
: _object_data(std::make_move_iterator(map.begin()), std::make_move_iterator(map.end()))
|
||||
{
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<_utils::has_to_json_in_member<jsonization_t>::value, bool> = true>
|
||||
basic_object(const jsonization_t& value)
|
||||
: basic_object(value.to_json())
|
||||
{
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<_utils::has_to_json_in_templ_spec<jsonization_t>::value, bool> = true>
|
||||
basic_object(const jsonization_t& value)
|
||||
: basic_object(ext::jsonization<jsonization_t>().to_json(value))
|
||||
{
|
||||
}
|
||||
|
||||
~basic_object() = default;
|
||||
|
||||
bool empty() const noexcept { return _object_data.empty(); }
|
||||
|
||||
size_t size() const noexcept { return _object_data.size(); }
|
||||
|
||||
bool contains(const string_t& key) const;
|
||||
|
||||
bool exists(const string_t& key) const { return contains(key); }
|
||||
|
||||
const basic_value<string_t>& at(const string_t& key) const;
|
||||
|
||||
string_t dumps(std::optional<size_t> indent = std::nullopt) const
|
||||
{
|
||||
return indent ? format(*indent) : to_string();
|
||||
}
|
||||
|
||||
string_t to_string() const;
|
||||
|
||||
string_t format(size_t indent = 4) const { return format(indent, 0); }
|
||||
|
||||
template <typename value_t>
|
||||
bool all() const;
|
||||
template <typename value_t, template <typename...> typename map_t = std::map>
|
||||
map_t<string_t, value_t> as_map() const;
|
||||
|
||||
// Usage: get(key_1, key_2, ..., default_value);
|
||||
template <typename... key_then_default_value_t>
|
||||
auto get(key_then_default_value_t&&... keys_then_default_value) const;
|
||||
|
||||
template <typename value_t = basic_value<string_t>>
|
||||
std::optional<value_t> find(const string_t& key) const;
|
||||
|
||||
template <typename... args_t>
|
||||
decltype(auto) emplace(args_t&&... args);
|
||||
template <typename... args_t>
|
||||
decltype(auto) insert(args_t&&... args);
|
||||
|
||||
void clear() noexcept;
|
||||
bool erase(const string_t& key);
|
||||
bool erase(iterator iter);
|
||||
|
||||
iterator begin() noexcept;
|
||||
iterator end() noexcept;
|
||||
const_iterator begin() const noexcept;
|
||||
const_iterator end() const noexcept;
|
||||
const_iterator cbegin() const noexcept;
|
||||
const_iterator cend() const noexcept;
|
||||
|
||||
basic_value<string_t>& operator[](const string_t& key);
|
||||
basic_value<string_t>& operator[](string_t&& key);
|
||||
|
||||
basic_object<string_t> operator|(const basic_object<string_t>& rhs) const&;
|
||||
basic_object<string_t> operator|(basic_object<string_t>&& rhs) const&;
|
||||
basic_object<string_t> operator|(const basic_object<string_t>& rhs) &&;
|
||||
basic_object<string_t> operator|(basic_object<string_t>&& rhs) &&;
|
||||
|
||||
basic_object<string_t>& operator|=(const basic_object<string_t>& rhs);
|
||||
basic_object<string_t>& operator|=(basic_object<string_t>&& rhs);
|
||||
|
||||
basic_object<string_t>& operator=(const basic_object<string_t>&) = default;
|
||||
basic_object<string_t>& operator=(basic_object<string_t>&&) = default;
|
||||
|
||||
template <
|
||||
typename value_t,
|
||||
std::enable_if_t<std::is_convertible_v<value_t, basic_object<string_t>>, bool> = true>
|
||||
basic_object<string_t>& operator=(value_t rhs)
|
||||
{
|
||||
return *this = basic_object<string_t>(std::move(rhs));
|
||||
}
|
||||
|
||||
bool operator==(const basic_object<string_t>& rhs) const;
|
||||
|
||||
bool operator!=(const basic_object<string_t>& rhs) const { return !(*this == rhs); }
|
||||
|
||||
template <
|
||||
typename value_t,
|
||||
template <typename...> typename map_t = std::map,
|
||||
std::enable_if_t<_utils::is_map<map_t<string_t, value_t>>, bool> = true>
|
||||
explicit operator map_t<string_t, value_t>() const
|
||||
{
|
||||
return as_map<value_t, map_t>();
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<_utils::has_from_json_in_member<jsonization_t, string_t>::value, bool> =
|
||||
true>
|
||||
explicit operator jsonization_t() const
|
||||
{
|
||||
jsonization_t dst {};
|
||||
if (!dst.from_json(*this)) {
|
||||
throw exception("Wrong JSON");
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
|
||||
template <
|
||||
typename jsonization_t,
|
||||
std::enable_if_t<
|
||||
_utils::has_from_json_in_templ_spec<jsonization_t, string_t>::value,
|
||||
bool> = true>
|
||||
explicit operator jsonization_t() const
|
||||
{
|
||||
jsonization_t dst {};
|
||||
if (!ext::jsonization<jsonization_t>().from_json(*this, dst)) {
|
||||
throw exception("Wrong JSON");
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename... key_then_default_value_t, size_t... keys_indexes_t>
|
||||
auto
|
||||
get(std::tuple<key_then_default_value_t...> keys_then_default_value,
|
||||
std::index_sequence<keys_indexes_t...>) const;
|
||||
template <typename value_t, typename... rest_keys_t>
|
||||
auto get_helper(const value_t& default_value, const string_t& key, rest_keys_t&&... rest) const;
|
||||
template <typename value_t>
|
||||
auto get_helper(const value_t& default_value, const string_t& key) const;
|
||||
|
||||
string_t format(size_t indent, size_t indent_times) const;
|
||||
|
||||
private:
|
||||
raw_object _object_data;
|
||||
};
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t>::basic_object(std::initializer_list<value_type> init_list)
|
||||
: _object_data(
|
||||
std::make_move_iterator(init_list.begin()),
|
||||
std::make_move_iterator(init_list.end()))
|
||||
{
|
||||
}
|
||||
|
||||
// template <typename string_t>
|
||||
// inline basic_object<string_t>::basic_object(const basic_value<string_t>& val) :
|
||||
// basic_object<string_t>(val.as_object())
|
||||
//{}
|
||||
//
|
||||
// template <typename string_t>
|
||||
// inline basic_object<string_t>::basic_object(basic_value<string_t>&& val)
|
||||
// : basic_object<string_t>(std::move(val.as_object()))
|
||||
//{}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_object<string_t>::contains(const string_t& key) const
|
||||
{
|
||||
return _object_data.find(key) != _object_data.cend();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline const basic_value<string_t>& basic_object<string_t>::at(const string_t& key) const
|
||||
{
|
||||
return _object_data.at(key);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline void basic_object<string_t>::clear() noexcept
|
||||
{
|
||||
_object_data.clear();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_object<string_t>::erase(const string_t& key)
|
||||
{
|
||||
return _object_data.erase(key) > 0 ? true : false;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_object<string_t>::erase(iterator iter)
|
||||
{
|
||||
return _object_data.erase(iter) != _object_data.end();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... args_t>
|
||||
inline decltype(auto) basic_object<string_t>::emplace(args_t&&... args)
|
||||
{
|
||||
static_assert(
|
||||
std::is_constructible_v<value_type, args_t...>,
|
||||
"Parameter can't be used to construct a raw_object::value_type");
|
||||
return _object_data.insert_or_assign(std::forward<args_t>(args)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... args_t>
|
||||
inline decltype(auto) basic_object<string_t>::insert(args_t&&... args)
|
||||
{
|
||||
return emplace(std::forward<args_t>(args)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline string_t basic_object<string_t>::to_string() const
|
||||
{
|
||||
string_t str { '{' };
|
||||
for (auto iter = _object_data.cbegin(); iter != _object_data.cend();) {
|
||||
const auto& [key, val] = *iter;
|
||||
str +=
|
||||
char_t('"') + _utils::unescape_string(key) + string_t { '\"', ':' } + val.to_string();
|
||||
if (++iter != _object_data.cend()) {
|
||||
str += ',';
|
||||
}
|
||||
}
|
||||
str += char_t('}');
|
||||
return str;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline string_t basic_object<string_t>::format(size_t indent, size_t indent_times) const
|
||||
{
|
||||
const string_t tail_indent(indent * indent_times, ' ');
|
||||
const string_t body_indent(indent * (indent_times + 1), ' ');
|
||||
|
||||
string_t str { '{', '\n' };
|
||||
for (auto iter = _object_data.cbegin(); iter != _object_data.cend();) {
|
||||
const auto& [key, val] = *iter;
|
||||
str += body_indent + char_t('"') + _utils::unescape_string(key)
|
||||
+ string_t { '\"', ':', ' ' } + val.format(indent, indent_times + 1);
|
||||
if (++iter != _object_data.cend()) {
|
||||
str += ',';
|
||||
}
|
||||
str += '\n';
|
||||
}
|
||||
str += tail_indent + char_t('}');
|
||||
return str;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t>
|
||||
inline bool basic_object<string_t>::all() const
|
||||
{
|
||||
for (const auto& [_, val] : _object_data) {
|
||||
if (!val.template is<value_t>()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t, template <typename...> typename map_t>
|
||||
inline map_t<string_t, value_t> basic_object<string_t>::as_map() const
|
||||
{
|
||||
map_t<string_t, value_t> result;
|
||||
for (const auto& [key, val] : _object_data) {
|
||||
result.emplace(key, val.template as<value_t>());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... key_then_default_value_t>
|
||||
inline auto basic_object<string_t>::get(key_then_default_value_t&&... keys_then_default_value) const
|
||||
{
|
||||
return get(
|
||||
std::forward_as_tuple(keys_then_default_value...),
|
||||
std::make_index_sequence<sizeof...(keys_then_default_value) - 1> {});
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename... key_then_default_value_t, size_t... keys_indexes_t>
|
||||
inline auto basic_object<string_t>::get(
|
||||
std::tuple<key_then_default_value_t...> keys_then_default_value,
|
||||
std::index_sequence<keys_indexes_t...>) const
|
||||
{
|
||||
constexpr unsigned long default_value_index = sizeof...(key_then_default_value_t) - 1;
|
||||
return get_helper(
|
||||
std::get<default_value_index>(keys_then_default_value),
|
||||
std::get<keys_indexes_t>(keys_then_default_value)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t, typename... rest_keys_t>
|
||||
inline auto basic_object<string_t>::get_helper(
|
||||
const value_t& default_value,
|
||||
const string_t& key,
|
||||
rest_keys_t&&... rest) const
|
||||
{
|
||||
constexpr bool is_json = std::is_same_v<basic_value<string_t>, value_t>
|
||||
|| std::is_same_v<basic_array<string_t>, value_t>
|
||||
|| std::is_same_v<basic_object<string_t>, value_t>;
|
||||
constexpr bool is_string = std::is_constructible_v<string_t, value_t> && !is_json;
|
||||
|
||||
if (!contains(key)) {
|
||||
if constexpr (is_string) {
|
||||
return string_t(default_value);
|
||||
}
|
||||
else {
|
||||
return value_t(default_value);
|
||||
}
|
||||
}
|
||||
|
||||
return at(key).get_helper(default_value, std::forward<rest_keys_t>(rest)...);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t>
|
||||
inline auto
|
||||
basic_object<string_t>::get_helper(const value_t& default_value, const string_t& key) const
|
||||
{
|
||||
constexpr bool is_json = std::is_same_v<basic_value<string_t>, value_t>
|
||||
|| std::is_same_v<basic_array<string_t>, value_t>
|
||||
|| std::is_same_v<basic_object<string_t>, value_t>;
|
||||
constexpr bool is_string = std::is_constructible_v<string_t, value_t> && !is_json;
|
||||
|
||||
if (!contains(key)) {
|
||||
if constexpr (is_string) {
|
||||
return string_t(default_value);
|
||||
}
|
||||
else {
|
||||
return value_t(default_value);
|
||||
}
|
||||
}
|
||||
|
||||
auto val = _object_data.at(key);
|
||||
if (val.template is<value_t>()) {
|
||||
if constexpr (is_string) {
|
||||
return val.template as<string_t>();
|
||||
}
|
||||
else {
|
||||
return val.template as<value_t>();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if constexpr (is_string) {
|
||||
return string_t(default_value);
|
||||
}
|
||||
else {
|
||||
return value_t(default_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
template <typename value_t>
|
||||
inline std::optional<value_t> basic_object<string_t>::find(const string_t& key) const
|
||||
{
|
||||
auto iter = _object_data.find(key);
|
||||
if (iter == _object_data.end()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
const auto& val = iter->second;
|
||||
return val.template is<value_t>() ? std::optional<value_t>(val.template as<value_t>())
|
||||
: std::nullopt;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_object<string_t>::iterator basic_object<string_t>::begin() noexcept
|
||||
{
|
||||
return _object_data.begin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_object<string_t>::iterator basic_object<string_t>::end() noexcept
|
||||
{
|
||||
return _object_data.end();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_object<string_t>::const_iterator
|
||||
basic_object<string_t>::begin() const noexcept
|
||||
{
|
||||
return _object_data.begin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_object<string_t>::const_iterator basic_object<string_t>::end() const noexcept
|
||||
{
|
||||
return _object_data.end();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_object<string_t>::const_iterator
|
||||
basic_object<string_t>::cbegin() const noexcept
|
||||
{
|
||||
return _object_data.cbegin();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline typename basic_object<string_t>::const_iterator basic_object<string_t>::cend() const noexcept
|
||||
{
|
||||
return _object_data.cend();
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_value<string_t>& basic_object<string_t>::operator[](const string_t& key)
|
||||
{
|
||||
return _object_data[key];
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_value<string_t>& basic_object<string_t>::operator[](string_t&& key)
|
||||
{
|
||||
return _object_data[std::move(key)];
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t>
|
||||
basic_object<string_t>::operator|(const basic_object<string_t>& rhs) const&
|
||||
{
|
||||
basic_object<string_t> temp = *this;
|
||||
temp._object_data.insert(rhs.begin(), rhs.end());
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t> basic_object<string_t>::operator|(basic_object<string_t>&& rhs) const&
|
||||
{
|
||||
basic_object<string_t> temp = *this;
|
||||
// temp._object_data.merge(std::move(rhs._object_data));
|
||||
temp._object_data.insert(
|
||||
std::make_move_iterator(rhs.begin()),
|
||||
std::make_move_iterator(rhs.end()));
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t>
|
||||
basic_object<string_t>::operator|(const basic_object<string_t>& rhs) &&
|
||||
{
|
||||
_object_data.insert(rhs.begin(), rhs.end());
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t> basic_object<string_t>::operator|(basic_object<string_t>&& rhs) &&
|
||||
{
|
||||
//_object_data.merge(std::move(rhs._object_data));
|
||||
_object_data.insert(std::make_move_iterator(rhs.begin()), std::make_move_iterator(rhs.end()));
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t>& basic_object<string_t>::operator|=(const basic_object<string_t>& rhs)
|
||||
{
|
||||
_object_data.insert(rhs.begin(), rhs.end());
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline basic_object<string_t>& basic_object<string_t>::operator|=(basic_object<string_t>&& rhs)
|
||||
{
|
||||
_object_data.insert(std::make_move_iterator(rhs.begin()), std::make_move_iterator(rhs.end()));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline bool basic_object<string_t>::operator==(const basic_object<string_t>& rhs) const
|
||||
{
|
||||
return _object_data == rhs._object_data;
|
||||
}
|
||||
|
||||
template <
|
||||
typename ostream_t,
|
||||
typename string_t,
|
||||
typename std_ostream_t = std::basic_ostream<
|
||||
typename string_t::value_type,
|
||||
std::char_traits<typename string_t::value_type>>,
|
||||
typename enable_t = std::enable_if_t<
|
||||
std::is_same_v<std_ostream_t, ostream_t> || std::is_base_of_v<std_ostream_t, ostream_t>>>
|
||||
ostream_t& operator<<(ostream_t& out, const basic_object<string_t>& obj)
|
||||
{
|
||||
out << obj.format();
|
||||
return out;
|
||||
}
|
||||
} // namespace json
|
||||
207
3rdparty/include/meojson/common/serialization.hpp
vendored
Normal file
207
3rdparty/include/meojson/common/serialization.hpp
vendored
Normal file
@@ -0,0 +1,207 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
#include "types.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
namespace json
|
||||
{
|
||||
namespace _serialization_helper
|
||||
{
|
||||
template <typename in_t, typename serializer_t>
|
||||
class is_serializable
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<serializer_t>()(std::declval<U>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<in_t>(0))::value;
|
||||
};
|
||||
|
||||
struct empty_serializer
|
||||
{
|
||||
// sample:
|
||||
// json::value operator()(const type_1&) const { return ...; }
|
||||
// json::value operator()(const type_2&) const { return ...; }
|
||||
// json::value operator()(const type_3&) const { return ...; }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
void unable_to_serialize()
|
||||
{
|
||||
static_assert(
|
||||
!sizeof(T),
|
||||
"Unable to serialize T. "
|
||||
#ifdef _MSC_VER
|
||||
"See T below: " __FUNCSIG__
|
||||
#else
|
||||
// "See T below: " __PRETTY_FUNCTION__
|
||||
|
||||
#endif
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
namespace _serialization_helper
|
||||
{
|
||||
template <typename out_t, typename deserializer_t, typename string_t = default_string_t>
|
||||
class is_deserializable
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<deserializer_t>()(std::declval<basic_value<string_t>>(), std::declval<U&>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<out_t>(0))::value;
|
||||
};
|
||||
|
||||
struct empty_deserializer
|
||||
{
|
||||
// sample:
|
||||
// bool operator()(const json::value&, type_1&) const { return ...; }
|
||||
// bool operator()(const json::value&, type_2&) const { return ...; }
|
||||
// bool operator()(const json::value&, type_3&) const { return ...; }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
void unable_to_deserialize()
|
||||
{
|
||||
static_assert(
|
||||
!sizeof(T),
|
||||
"Unable to deserialize T. "
|
||||
#ifdef _MSC_VER
|
||||
"See T below: " __FUNCSIG__
|
||||
#else
|
||||
// "See T below: " __PRETTY_FUNCTION__
|
||||
|
||||
#endif
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
template <
|
||||
typename in_t,
|
||||
typename serializer_t = _serialization_helper::empty_serializer,
|
||||
typename string_t = default_string_t>
|
||||
basic_value<string_t> serialize(in_t&& in, const serializer_t& serializer = {})
|
||||
{
|
||||
if constexpr (_serialization_helper::is_serializable<in_t, serializer_t>::value) {
|
||||
return serializer(std::forward<in_t>(in));
|
||||
}
|
||||
else if constexpr (
|
||||
_utils::is_collection<std::decay_t<in_t>> || _utils::is_fixed_array<std::decay_t<in_t>>) {
|
||||
basic_array<string_t> arr;
|
||||
for (auto&& elem : in) {
|
||||
using elem_t = decltype(elem);
|
||||
|
||||
auto j_elem =
|
||||
serialize<elem_t, serializer_t, string_t>(std::forward<elem_t>(elem), serializer);
|
||||
arr.emplace_back(std::move(j_elem));
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
else if constexpr (_utils::is_map<std::decay_t<in_t>>) {
|
||||
basic_object<string_t> obj;
|
||||
for (auto&& [key, elem] : in) {
|
||||
using key_t = decltype(key);
|
||||
using elem_t = decltype(elem);
|
||||
|
||||
auto j_elem =
|
||||
serialize<elem_t, serializer_t, string_t>(std::forward<elem_t>(elem), serializer);
|
||||
obj.emplace(std::forward<key_t>(key), std::move(j_elem));
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
else if constexpr (std::is_constructible_v<basic_value<string_t>, in_t>) {
|
||||
return basic_value<string_t>(std::forward<in_t>(in));
|
||||
}
|
||||
else {
|
||||
_serialization_helper::unable_to_serialize<in_t>();
|
||||
}
|
||||
}
|
||||
|
||||
template <
|
||||
typename out_t,
|
||||
typename deserializer_t = _serialization_helper::empty_deserializer,
|
||||
typename string_t = default_string_t>
|
||||
bool deserialize(
|
||||
const basic_value<string_t>& in,
|
||||
out_t& out,
|
||||
const deserializer_t& deserializer = {})
|
||||
{
|
||||
if constexpr (_serialization_helper::is_deserializable<out_t, deserializer_t>::value) {
|
||||
return deserializer(in, out);
|
||||
}
|
||||
else if constexpr (_utils::is_collection<std::decay_t<out_t>>) {
|
||||
if (!in.is_array()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& j_elem : in.as_array()) {
|
||||
using elem_t = typename out_t::value_type;
|
||||
elem_t elem {};
|
||||
if (!deserialize<elem_t, deserializer_t, string_t>(j_elem, elem, deserializer)) {
|
||||
return false;
|
||||
}
|
||||
if constexpr (_as_collection_helper::has_emplace_back<out_t>::value) {
|
||||
out.emplace_back(std::move(elem));
|
||||
}
|
||||
else {
|
||||
out.emplace(std::move(elem));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if constexpr (_utils::is_fixed_array<std::decay_t<out_t>>) {
|
||||
if (!in.is_array()) {
|
||||
return false;
|
||||
}
|
||||
auto&& in_as_arr = in.as_array();
|
||||
constexpr size_t out_size = _utils::fixed_array_size<out_t>;
|
||||
if (in_as_arr.size() != out_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < out_size; ++i) {
|
||||
auto&& j_elem = in_as_arr.at(i);
|
||||
using elem_t = typename out_t::value_type;
|
||||
elem_t elem {};
|
||||
if (!deserialize<elem_t, deserializer_t, string_t>(j_elem, elem, deserializer)) {
|
||||
return false;
|
||||
}
|
||||
out.at(i) = std::move(elem);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if constexpr (_utils::is_map<std::decay_t<out_t>>) {
|
||||
if (!in.is_object()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& [key, j_elem] : in.as_object()) {
|
||||
using elem_t = typename out_t::mapped_type;
|
||||
elem_t elem {};
|
||||
if (!deserialize<elem_t, deserializer_t, string_t>(j_elem, elem, deserializer)) {
|
||||
return false;
|
||||
}
|
||||
out.emplace(std::forward<decltype(key)>(key), std::move(elem));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if constexpr (std::is_constructible_v<out_t, basic_value<string_t>>) {
|
||||
out = out_t(in);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
_serialization_helper::unable_to_deserialize<out_t>();
|
||||
}
|
||||
}
|
||||
} // namespace json
|
||||
7
3rdparty/include/meojson/common/types.hpp
vendored
Normal file
7
3rdparty/include/meojson/common/types.hpp
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "array.hpp"
|
||||
#include "object.hpp"
|
||||
#include "value.hpp"
|
||||
331
3rdparty/include/meojson/common/utils.hpp
vendored
Normal file
331
3rdparty/include/meojson/common/utils.hpp
vendored
Normal file
@@ -0,0 +1,331 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <iomanip>
|
||||
#include <limits>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
#include <variant>
|
||||
|
||||
namespace json
|
||||
{
|
||||
template <typename string_t>
|
||||
class basic_value;
|
||||
template <typename string_t>
|
||||
class basic_array;
|
||||
template <typename string_t>
|
||||
class basic_object;
|
||||
|
||||
using default_string_t = std::string;
|
||||
|
||||
using value = basic_value<default_string_t>;
|
||||
using array = basic_array<default_string_t>;
|
||||
using object = basic_object<default_string_t>;
|
||||
|
||||
using wvalue = basic_value<std::wstring>;
|
||||
using warray = basic_array<std::wstring>;
|
||||
using wobject = basic_object<std::wstring>;
|
||||
}
|
||||
|
||||
namespace json::ext
|
||||
{
|
||||
template <typename T>
|
||||
class jsonization
|
||||
{
|
||||
public:
|
||||
// json::value to_json(const T&) const;
|
||||
// bool check_json(const json::value&) const;
|
||||
// bool from_json(const json::value&, T&) const;
|
||||
};
|
||||
}
|
||||
|
||||
namespace json::_utils
|
||||
{
|
||||
template <typename T>
|
||||
using iterator_t = decltype(std::declval<T&>().begin());
|
||||
template <typename T>
|
||||
using remove_cvref_t = std::remove_cv_t<std::remove_reference_t<T>>;
|
||||
template <typename T>
|
||||
using iter_value_t = typename std::iterator_traits<remove_cvref_t<T>>::value_type;
|
||||
template <typename R>
|
||||
using range_value_t = iter_value_t<iterator_t<R>>;
|
||||
|
||||
template <typename T, typename = void>
|
||||
constexpr bool is_string = false;
|
||||
template <typename T>
|
||||
constexpr bool is_string<T, std::void_t<typename T::traits_type>> =
|
||||
std::is_same_v<typename T::traits_type, std::char_traits<typename T::value_type>>;
|
||||
|
||||
template <typename T, typename = void>
|
||||
constexpr bool is_container = false;
|
||||
template <typename T>
|
||||
constexpr bool is_container<T, std::void_t<typename T::value_type, range_value_t<T>>> =
|
||||
std::is_same_v<typename T::value_type, range_value_t<T>> && !is_string<T>;
|
||||
|
||||
template <typename T, typename = void>
|
||||
constexpr bool is_map = false;
|
||||
template <typename T>
|
||||
constexpr bool is_map<T, std::void_t<typename T::key_type, typename T::mapped_type>> =
|
||||
is_container<T>;
|
||||
|
||||
template <typename T, typename = void>
|
||||
constexpr bool is_fixed_array = false;
|
||||
template <template <typename, size_t> typename arr_t, typename value_t, size_t size>
|
||||
constexpr bool is_fixed_array<arr_t<value_t, size>> = true;
|
||||
|
||||
template <typename T, typename = std::enable_if_t<is_fixed_array<T>>>
|
||||
constexpr size_t fixed_array_size = 0;
|
||||
template <template <typename, size_t> typename arr_t, typename value_t, size_t size>
|
||||
constexpr size_t fixed_array_size<arr_t<value_t, size>> = size;
|
||||
|
||||
template <typename T, typename = void>
|
||||
constexpr bool is_collection = false;
|
||||
template <typename T>
|
||||
constexpr bool is_collection<T> = is_container<T> && !is_map<T> && !is_fixed_array<T>;
|
||||
|
||||
template <typename T>
|
||||
constexpr bool is_variant = false;
|
||||
template <typename... args_t>
|
||||
constexpr bool is_variant<std::variant<args_t...>> = true;
|
||||
|
||||
template <typename T>
|
||||
constexpr bool is_tuple = false;
|
||||
template <typename... args_t>
|
||||
constexpr bool is_tuple<std::tuple<args_t...>> = true;
|
||||
|
||||
template <typename T>
|
||||
constexpr bool is_pair = false;
|
||||
template <typename... args_t>
|
||||
constexpr bool is_pair<std::pair<args_t...>> = true;
|
||||
|
||||
template <typename T>
|
||||
class has_to_json_in_member
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int) -> decltype(std::declval<U>().to_json(), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class has_to_json_in_templ_spec
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<ext::jsonization<U>>().to_json(std::declval<U>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
|
||||
template <typename T, typename string_t>
|
||||
class has_check_json_in_member
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<U>().check_json(std::declval<json::basic_value<string_t>>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
|
||||
template <typename T, typename string_t>
|
||||
class has_check_json_in_templ_spec
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<ext::jsonization<U>>().check_json(std::declval<json::basic_value<string_t>>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
|
||||
template <typename T, typename string_t>
|
||||
class has_from_json_in_member
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<U>().from_json(std::declval<json::basic_value<string_t>>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
|
||||
template <typename T, typename string_t>
|
||||
class has_from_json_in_templ_spec
|
||||
{
|
||||
template <typename U>
|
||||
static auto test(int)
|
||||
-> decltype(std::declval<ext::jsonization<U>>().from_json(std::declval<json::basic_value<string_t>>(), std::declval<U&>()), std::true_type());
|
||||
|
||||
template <typename U>
|
||||
static std::false_type test(...);
|
||||
|
||||
public:
|
||||
static constexpr bool value = decltype(test<T>(0))::value;
|
||||
};
|
||||
|
||||
template <typename string_t>
|
||||
inline constexpr string_t unescape_string(const string_t& str)
|
||||
{
|
||||
using char_t = typename string_t::value_type;
|
||||
|
||||
string_t result {};
|
||||
auto cur = str.cbegin();
|
||||
auto end = str.cend();
|
||||
auto no_escape_beg = cur;
|
||||
char_t escape = 0;
|
||||
|
||||
for (; cur != end; ++cur) {
|
||||
switch (*cur) {
|
||||
case '"':
|
||||
escape = '"';
|
||||
break;
|
||||
case '\\':
|
||||
escape = '\\';
|
||||
break;
|
||||
case '\b':
|
||||
escape = 'b';
|
||||
break;
|
||||
case '\f':
|
||||
escape = 'f';
|
||||
break;
|
||||
case '\n':
|
||||
escape = 'n';
|
||||
break;
|
||||
case '\r':
|
||||
escape = 'r';
|
||||
break;
|
||||
case '\t':
|
||||
escape = 't';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (escape) {
|
||||
result += string_t(no_escape_beg, cur) + char_t('\\') + escape;
|
||||
no_escape_beg = cur + 1;
|
||||
escape = 0;
|
||||
}
|
||||
}
|
||||
result += string_t(no_escape_beg, cur);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline constexpr string_t true_string()
|
||||
{
|
||||
return { 't', 'r', 'u', 'e' };
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline constexpr string_t false_string()
|
||||
{
|
||||
return { 'f', 'a', 'l', 's', 'e' };
|
||||
}
|
||||
|
||||
template <typename string_t>
|
||||
inline constexpr string_t null_string()
|
||||
{
|
||||
return { 'n', 'u', 'l', 'l' };
|
||||
}
|
||||
|
||||
template <typename string_t, typename any_t>
|
||||
inline string_t to_basic_string(any_t&& arg)
|
||||
{
|
||||
#ifdef MEOJSON_KEEP_FLOATING_PRECISION
|
||||
using real_type = std::remove_reference_t<any_t>;
|
||||
if constexpr (std::is_floating_point_v<real_type>) {
|
||||
if constexpr (std::is_same_v<string_t, std::string>) {
|
||||
std::ostringstream oss;
|
||||
oss << std::setprecision(std::numeric_limits<real_type>::max_digits10) << arg;
|
||||
return oss.str();
|
||||
}
|
||||
else if constexpr (std::is_same_v<string_t, std::wstring>) {
|
||||
std::wostringstream oss;
|
||||
oss << std::setprecision(std::numeric_limits<real_type>::max_digits10) << arg;
|
||||
return oss.str();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if constexpr (std::is_same_v<string_t, std::string>) {
|
||||
return std::to_string(std::forward<any_t>(arg));
|
||||
}
|
||||
else if constexpr (std::is_same_v<string_t, std::wstring>) {
|
||||
return std::to_wstring(std::forward<any_t>(arg));
|
||||
}
|
||||
else {
|
||||
static_assert(!sizeof(any_t), "Unsupported type");
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t id, typename string_t, typename variant_t>
|
||||
inline bool _serialize_variant_impl(basic_value<string_t>& val, variant_t&& var)
|
||||
{
|
||||
if (var.index() != id) {
|
||||
return false;
|
||||
}
|
||||
val = basic_value<string_t>(std::get<id>(std::forward<variant_t>(var)));
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename string_t, typename variant_t, std::size_t... ids>
|
||||
inline basic_value<string_t> serialize_variant(variant_t&& var, std::index_sequence<ids...>)
|
||||
{
|
||||
basic_value<string_t> val;
|
||||
(_serialize_variant_impl<ids>(val, std::forward<variant_t>(var)) || ...);
|
||||
return val;
|
||||
}
|
||||
|
||||
template <std::size_t id, typename string_t, typename variant_t>
|
||||
inline bool _deserialize_variant_impl(const basic_value<string_t>& val, variant_t& var)
|
||||
{
|
||||
using alt_t = std::variant_alternative_t<id, variant_t>;
|
||||
if (!val.template is<alt_t>()) {
|
||||
return false;
|
||||
}
|
||||
var = val.template as<alt_t>();
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename string_t, typename variant_t, std::size_t... ids>
|
||||
inline variant_t deserialize_variant(const basic_value<string_t>& val, std::index_sequence<ids...>)
|
||||
{
|
||||
variant_t var;
|
||||
(_deserialize_variant_impl<ids>(val, var) || ...);
|
||||
return var;
|
||||
}
|
||||
|
||||
template <typename string_t, typename variant_t, std::size_t... ids>
|
||||
inline bool detect_variant(const basic_value<string_t>& val, std::index_sequence<ids...>)
|
||||
{
|
||||
return (val.template is<std::variant_alternative_t<ids, variant_t>>() || ...);
|
||||
}
|
||||
|
||||
template <typename string_t, typename tuple_t, std::size_t... ids>
|
||||
inline bool detect_tuple(const basic_value<string_t>& val, std::index_sequence<ids...>)
|
||||
{
|
||||
return val.is_array() && val.as_array().size() == std::tuple_size_v<tuple_t>
|
||||
&& (val.at(ids).template is<std::tuple_element_t<ids, tuple_t>>() || ...);
|
||||
}
|
||||
} // namespace json::_utils
|
||||
1233
3rdparty/include/meojson/common/value.hpp
vendored
Normal file
1233
3rdparty/include/meojson/common/value.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2524
3rdparty/include/meojson/json.hpp
vendored
2524
3rdparty/include/meojson/json.hpp
vendored
File diff suppressed because it is too large
Load Diff
8
3rdparty/include/meojson/json5.hpp
vendored
Normal file
8
3rdparty/include/meojson/json5.hpp
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
// IWYU pragma: begin_exports
|
||||
|
||||
#include "common/types.hpp"
|
||||
#include "parser5/parser5.hpp"
|
||||
|
||||
// IWYU pragma: end_exports
|
||||
139
3rdparty/include/meojson/parser/bitops.hpp
vendored
Normal file
139
3rdparty/include/meojson/parser/bitops.hpp
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#if __cplusplus >= 202002L || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
|
||||
#include <bit>
|
||||
|
||||
namespace json::_bitops
|
||||
{
|
||||
using std::countl_one;
|
||||
using std::countl_zero;
|
||||
using std::countr_one;
|
||||
using std::countr_zero;
|
||||
|
||||
inline constexpr bool is_little_endian()
|
||||
{
|
||||
return std::endian::native == std::endian::little;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#include <cstdint>
|
||||
|
||||
namespace json::_bitops
|
||||
{
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
inline constexpr int countl_zero(uint32_t x)
|
||||
{
|
||||
if constexpr (sizeof(uint32_t) == sizeof(unsigned int)) {
|
||||
return x == 0 ? 32 : __builtin_clz(x);
|
||||
}
|
||||
if constexpr (sizeof(uint32_t) == sizeof(unsigned long)) {
|
||||
return x == 0 ? 32 : __builtin_clzl(x);
|
||||
}
|
||||
return x == 0 ? 32 : __builtin_clzll(x);
|
||||
}
|
||||
|
||||
inline constexpr int countr_zero(uint32_t x)
|
||||
{
|
||||
if constexpr (sizeof(uint32_t) == sizeof(unsigned int)) {
|
||||
return x == 0 ? 32 : __builtin_ctz(x);
|
||||
}
|
||||
if constexpr (sizeof(uint32_t) == sizeof(unsigned long)) {
|
||||
return x == 0 ? 32 : __builtin_ctzl(x);
|
||||
}
|
||||
return x == 0 ? 32 : __builtin_ctzll(x);
|
||||
}
|
||||
|
||||
inline constexpr int countl_zero(uint64_t x)
|
||||
{
|
||||
return x == 0 ? 64 : __builtin_clzll(x);
|
||||
}
|
||||
|
||||
inline constexpr int countr_zero(uint64_t x)
|
||||
{
|
||||
return x == 0 ? 64 : __builtin_ctzll(x);
|
||||
}
|
||||
#elif defined(_MSC_VER)
|
||||
#ifdef __AVX2__
|
||||
// lzcnt intrinsics is not constexpr
|
||||
inline int countl_zero(uint32_t x)
|
||||
{
|
||||
return __lzcnt(x);
|
||||
}
|
||||
|
||||
inline int countr_zero(uint32_t x)
|
||||
{
|
||||
return _tzcnt_u32(x);
|
||||
}
|
||||
|
||||
inline int countl_zero(uint64_t x)
|
||||
{
|
||||
return (int)__lzcnt64(x);
|
||||
}
|
||||
|
||||
inline int countr_zero(uint64_t x)
|
||||
{
|
||||
return (int)_tzcnt_u64(x);
|
||||
}
|
||||
#else
|
||||
inline constexpr int countl_zero(uint32_t x)
|
||||
{
|
||||
unsigned long index = 0;
|
||||
return _BitScanReverse(&index, x) ? 31 - index : 32;
|
||||
}
|
||||
|
||||
inline constexpr int countr_zero(uint32_t x)
|
||||
{
|
||||
unsigned long index = 0;
|
||||
return _BitScanForward(&index, x) ? index : 32;
|
||||
}
|
||||
|
||||
inline constexpr int countl_zero(uint64_t x)
|
||||
{
|
||||
unsigned long index = 0;
|
||||
return _BitScanReverse64(&index, x) ? 63 - index : 64;
|
||||
}
|
||||
|
||||
inline constexpr int countr_zero(uint64_t x)
|
||||
{
|
||||
unsigned long index = 0;
|
||||
return _BitScanForward64(&index, x) ? index : 64;
|
||||
}
|
||||
#endif // __AVX2__
|
||||
#else // compiler
|
||||
#error "bring your own bit counting implementation"
|
||||
#endif
|
||||
inline int countl_one(uint32_t x)
|
||||
{
|
||||
return countl_zero(~x);
|
||||
}
|
||||
|
||||
inline int countr_one(uint32_t x)
|
||||
{
|
||||
return countr_zero(~x);
|
||||
}
|
||||
|
||||
inline int countl_one(uint64_t x)
|
||||
{
|
||||
return countl_zero(~x);
|
||||
}
|
||||
|
||||
inline int countr_one(uint64_t x)
|
||||
{
|
||||
return countr_zero(~x);
|
||||
}
|
||||
|
||||
// no constexpr endian awareness before C++20
|
||||
inline bool is_little_endian()
|
||||
{
|
||||
union
|
||||
{
|
||||
uint32_t u32;
|
||||
uint8_t u8;
|
||||
} u = { 0x01020304 };
|
||||
|
||||
return u.u8 == 4;
|
||||
}
|
||||
} // namespace json::_bitops
|
||||
#endif // C++20
|
||||
161
3rdparty/include/meojson/parser/packed_bytes.hpp
vendored
Normal file
161
3rdparty/include/meojson/parser/packed_bytes.hpp
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <type_traits>
|
||||
|
||||
#include "bitops.hpp"
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#define __packed_bytes_strong_inline __attribute__((always_inline))
|
||||
#elif defined(_MSC_VER)
|
||||
#define __packed_bytes_strong_inline __forceinline
|
||||
#else
|
||||
#define __packed_bytes_strong_inline inline
|
||||
#endif
|
||||
|
||||
namespace json::_packed_bytes
|
||||
{
|
||||
struct packed_bytes_trait_none
|
||||
{
|
||||
static constexpr bool available = false;
|
||||
};
|
||||
|
||||
template <size_t N>
|
||||
struct packed_bytes
|
||||
{
|
||||
using traits = packed_bytes_trait_none;
|
||||
};
|
||||
}
|
||||
|
||||
#ifndef MEOJSON_DISABLE_PACKED_BYTES
|
||||
#if defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP)
|
||||
#include "packed_bytes_x86.hpp"
|
||||
#elif defined(__ARM_NEON) || defined(_M_ARM) || defined(_M_ARM64)
|
||||
#include "packed_bytes_arm.hpp"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace json::_packed_bytes
|
||||
{
|
||||
struct packed_bytes_trait_uint64
|
||||
{
|
||||
static constexpr bool available = sizeof(void*) >= 8;
|
||||
static constexpr auto step = 8;
|
||||
using value_type = uint64_t;
|
||||
|
||||
__packed_bytes_strong_inline static value_type load_unaligned(const void* ptr)
|
||||
{
|
||||
value_type result;
|
||||
memcpy((void*)&result, ptr, 8);
|
||||
return result;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type less(value_type x, uint8_t n)
|
||||
{
|
||||
return (((x)-UINT64_C(0x0101010101010101) * (n)) & ~(x)&UINT64_C(0x8080808080808080));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type is_zero_memberwise(value_type v)
|
||||
{
|
||||
return (((v)-UINT64_C(0x0101010101010101)) & ~(v)&UINT64_C(0x8080808080808080));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static bool is_all_zero(value_type v) { return v == UINT64_C(0); }
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, uint8_t n)
|
||||
{
|
||||
return is_zero_memberwise((x) ^ (UINT64_C(0x0101010101010101) * (n)));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b)
|
||||
{
|
||||
return a | b;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x)
|
||||
{
|
||||
if (_bitops::is_little_endian()) {
|
||||
return _bitops::countr_zero(x) / 8;
|
||||
}
|
||||
else {
|
||||
return _bitops::countl_zero(x) / 8;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct packed_bytes_trait_uint32
|
||||
{
|
||||
static constexpr bool available = true;
|
||||
static constexpr auto step = 4;
|
||||
using value_type = uint32_t;
|
||||
|
||||
__packed_bytes_strong_inline static value_type load_unaligned(const void* ptr)
|
||||
{
|
||||
value_type result;
|
||||
memcpy((void*)&result, ptr, 4);
|
||||
return result;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type less(value_type x, uint8_t n)
|
||||
{
|
||||
return (((x) - ~UINT32_C(0) / 255 * (n)) & ~(x) & ~UINT32_C(0) / 255 * 128);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type is_zero_memberwise(value_type v)
|
||||
{
|
||||
return (((v)-UINT32_C(0x01010101)) & ~(v)&UINT32_C(0x80808080));
|
||||
;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static bool is_all_zero(value_type v) { return v == UINT32_C(0); }
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, uint8_t n)
|
||||
{
|
||||
return is_zero_memberwise((x) ^ (~UINT32_C(0) / 255 * (n)));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b)
|
||||
{
|
||||
return a | b;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x)
|
||||
{
|
||||
if (_bitops::is_little_endian()) {
|
||||
return _bitops::countr_zero(x) / 8;
|
||||
}
|
||||
else {
|
||||
return _bitops::countl_zero(x) / 8;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packed_bytes<8>
|
||||
{
|
||||
using traits = packed_bytes_trait_uint64;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packed_bytes<4>
|
||||
{
|
||||
using traits = packed_bytes_trait_uint32;
|
||||
};
|
||||
|
||||
template <size_t N>
|
||||
using packed_bytes_trait = typename packed_bytes<N>::traits;
|
||||
|
||||
using packed_bytes_trait_max = std::conditional_t<
|
||||
packed_bytes_trait<32>::available,
|
||||
packed_bytes_trait<32>,
|
||||
std::conditional_t<
|
||||
packed_bytes_trait<16>::available,
|
||||
packed_bytes_trait<16>,
|
||||
std::conditional_t<
|
||||
packed_bytes_trait<8>::available,
|
||||
packed_bytes_trait<8>,
|
||||
packed_bytes_trait<4>>>>;
|
||||
} // namespace json::_packed_bytes
|
||||
79
3rdparty/include/meojson/parser/packed_bytes_arm.hpp
vendored
Normal file
79
3rdparty/include/meojson/parser/packed_bytes_arm.hpp
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
// current NEON implementation doesn't outperform 64-bit scalar implementation
|
||||
#ifdef MEOJSON_ENABLE_NEON
|
||||
#include "packed_bytes.hpp"
|
||||
#include <arm_neon.h>
|
||||
|
||||
#if defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64)
|
||||
#define __packed_bytes_trait_arm64
|
||||
#endif
|
||||
|
||||
namespace json::_packed_bytes
|
||||
{
|
||||
struct packed_bytes_trait_neon
|
||||
{
|
||||
static constexpr bool available = true;
|
||||
static constexpr auto step = 16;
|
||||
using value_type = uint8x16_t;
|
||||
|
||||
__packed_bytes_strong_inline static value_type load_unaligned(const void* ptr)
|
||||
{
|
||||
return vld1q_u8((uint8_t*)ptr);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type less(value_type x, uint8_t n)
|
||||
{
|
||||
auto bcast = vdupq_n_u8(n);
|
||||
auto is_less = vcltq_u8(x, bcast);
|
||||
return is_less;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, uint8_t n)
|
||||
{
|
||||
return vceqq_u8(x, vdupq_n_u8(n));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, value_type y)
|
||||
{
|
||||
return vceqq_u8(x, y);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b)
|
||||
{
|
||||
return vorrq_u8(a, b);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static bool is_all_zero(value_type x)
|
||||
{
|
||||
#ifdef __packed_bytes_trait_arm64
|
||||
return vmaxvq_u8(x) == 0;
|
||||
#else
|
||||
auto fold64 = vorr_u64(
|
||||
vget_high_u64(vreinterpretq_u8_u64(x), 0),
|
||||
vget_low_u64(vreinterpretq_u8_u64(x), 1));
|
||||
auto fold32 = vget_lane_u32(vreinterpret_u64_u32(fold64), 0)
|
||||
| vget_lane_u32(vreinterpret_u64_u32(fold64), 1);
|
||||
return fold32 == 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x)
|
||||
{
|
||||
// https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon
|
||||
auto cmp = equal(x, 0);
|
||||
auto res = vshrn_n_u16(cmp, 4);
|
||||
auto mask64 = vget_lane_u64(vreinterpret_u64_u8(res), 0);
|
||||
return _bitops::countr_one(mask64) >> 2;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packed_bytes<16>
|
||||
{
|
||||
using traits = packed_bytes_trait_neon;
|
||||
};
|
||||
}
|
||||
#endif
|
||||
140
3rdparty/include/meojson/parser/packed_bytes_x86.hpp
vendored
Normal file
140
3rdparty/include/meojson/parser/packed_bytes_x86.hpp
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "packed_bytes.hpp"
|
||||
|
||||
#include <emmintrin.h>
|
||||
#if defined(__SSE4_1__) || defined(__AVX2__) || defined(_MSC_VER)
|
||||
// MSVC enables all SSE4.1 intrinsics by default
|
||||
#include <smmintrin.h>
|
||||
#endif
|
||||
|
||||
namespace json::_packed_bytes
|
||||
{
|
||||
struct packed_bytes_trait_sse
|
||||
{
|
||||
static constexpr bool available = true;
|
||||
static constexpr auto step = 16;
|
||||
using value_type = __m128i;
|
||||
|
||||
__packed_bytes_strong_inline static value_type load_unaligned(const void* ptr)
|
||||
{
|
||||
return _mm_loadu_si128(reinterpret_cast<const __m128i*>(ptr));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type less(value_type x, uint8_t n)
|
||||
{
|
||||
auto bcast = _mm_set1_epi8(static_cast<char>(n));
|
||||
auto all1 = _mm_set1_epi8(-1);
|
||||
auto max_with_n = _mm_max_epu8(x, bcast);
|
||||
auto is_greater_or_equal = _mm_cmpeq_epi8(max_with_n, x);
|
||||
auto is_less = _mm_andnot_si128(is_greater_or_equal, all1);
|
||||
return is_less;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, uint8_t n)
|
||||
{
|
||||
return _mm_cmpeq_epi8(x, _mm_set1_epi8(static_cast<char>(n)));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, value_type y)
|
||||
{
|
||||
return _mm_cmpeq_epi8(x, y);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b)
|
||||
{
|
||||
return _mm_or_si128(a, b);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static bool is_all_zero(value_type x)
|
||||
{
|
||||
#if defined(__SSE4_1__) || defined(__AVX2__) || defined(_MSC_VER)
|
||||
// SSE4.1 path
|
||||
return !!_mm_testz_si128(x, x);
|
||||
#else
|
||||
// SSE2 path
|
||||
auto cmp = _mm_cmpeq_epi8(x, _mm_set1_epi8(0));
|
||||
auto mask = (uint16_t)_mm_movemask_epi8(cmp);
|
||||
return mask == UINT16_C(0xFFFF);
|
||||
#endif
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x)
|
||||
{
|
||||
auto cmp = _mm_cmpeq_epi8(x, _mm_set1_epi8(0));
|
||||
auto mask = (uint16_t)_mm_movemask_epi8(cmp);
|
||||
return _bitops::countr_one((uint32_t)mask);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packed_bytes<16>
|
||||
{
|
||||
using traits = packed_bytes_trait_sse;
|
||||
};
|
||||
}
|
||||
#ifdef __AVX2__
|
||||
#include <immintrin.h>
|
||||
|
||||
namespace json::_packed_bytes
|
||||
{
|
||||
struct packed_bytes_trait_avx2
|
||||
{
|
||||
static constexpr bool available = true;
|
||||
static constexpr auto step = 32;
|
||||
using value_type = __m256i;
|
||||
|
||||
__packed_bytes_strong_inline static value_type load_unaligned(const void* ptr)
|
||||
{
|
||||
return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(ptr));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type less(value_type x, uint8_t n)
|
||||
{
|
||||
auto bcast = _mm256_set1_epi8(static_cast<char>(n));
|
||||
auto all1 = _mm256_set1_epi8(-1);
|
||||
auto max_with_n = _mm256_max_epu8(x, bcast);
|
||||
auto is_greater_or_equal = _mm256_cmpeq_epi8(max_with_n, x);
|
||||
auto is_less = _mm256_andnot_si256(is_greater_or_equal, all1);
|
||||
return is_less;
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, uint8_t n)
|
||||
{
|
||||
return _mm256_cmpeq_epi8(x, _mm256_set1_epi8(static_cast<char>(n)));
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type equal(value_type x, value_type y)
|
||||
{
|
||||
return _mm256_cmpeq_epi8(x, y);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b)
|
||||
{
|
||||
return _mm256_or_si256(a, b);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static bool is_all_zero(value_type x)
|
||||
{
|
||||
return (bool)_mm256_testz_si256(x, x);
|
||||
}
|
||||
|
||||
__packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x)
|
||||
{
|
||||
auto cmp = _mm256_cmpeq_epi8(x, _mm256_set1_epi8(0));
|
||||
auto mask = (uint32_t)_mm256_movemask_epi8(cmp);
|
||||
// AVX512 alternative: _mm_cmpeq_epi8_mask
|
||||
return _bitops::countr_one(mask);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packed_bytes<32>
|
||||
{
|
||||
using traits = packed_bytes_trait_avx2;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
763
3rdparty/include/meojson/parser/parser.hpp
vendored
Normal file
763
3rdparty/include/meojson/parser/parser.hpp
vendored
Normal file
@@ -0,0 +1,763 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cctype>
|
||||
#include <fstream>
|
||||
#include <optional>
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
|
||||
#include "../common/types.hpp"
|
||||
#include "packed_bytes.hpp"
|
||||
|
||||
namespace json
|
||||
{
|
||||
// ****************************
|
||||
// * parser declare *
|
||||
// ****************************
|
||||
|
||||
template <
|
||||
typename string_t = default_string_t,
|
||||
typename parsing_t = void,
|
||||
typename accel_traits = _packed_bytes::packed_bytes_trait_max>
|
||||
class parser
|
||||
{
|
||||
public:
|
||||
using parsing_iter_t = typename parsing_t::const_iterator;
|
||||
|
||||
public:
|
||||
~parser() noexcept = default;
|
||||
|
||||
static std::optional<basic_value<string_t>> parse(const parsing_t& content);
|
||||
|
||||
private:
|
||||
parser(parsing_iter_t cbegin, parsing_iter_t cend) noexcept
|
||||
: _cur(cbegin)
|
||||
, _end(cend)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
std::optional<basic_value<string_t>> parse();
|
||||
basic_value<string_t> parse_value();
|
||||
|
||||
basic_value<string_t> parse_null();
|
||||
basic_value<string_t> parse_boolean();
|
||||
basic_value<string_t> parse_number();
|
||||
// parse and return a basic_value<string_t> whose type is value_type::string
|
||||
basic_value<string_t> parse_string();
|
||||
basic_value<string_t> parse_array();
|
||||
basic_value<string_t> parse_object();
|
||||
|
||||
// parse and return a string_t
|
||||
std::optional<string_t> parse_stdstring();
|
||||
|
||||
bool skip_string_literal_with_accel();
|
||||
bool skip_whitespace() noexcept;
|
||||
bool skip_digit();
|
||||
bool skip_unicode_escape(uint16_t& pair_high, string_t& result);
|
||||
|
||||
private:
|
||||
parsing_iter_t _cur;
|
||||
parsing_iter_t _end;
|
||||
};
|
||||
|
||||
// ***************************
|
||||
// * utils declare *
|
||||
// ***************************
|
||||
|
||||
template <typename parsing_t>
|
||||
auto parse(const parsing_t& content);
|
||||
|
||||
template <typename char_t>
|
||||
auto parse(char_t* content);
|
||||
|
||||
template <
|
||||
typename istream_t,
|
||||
typename = std::enable_if_t<
|
||||
std::is_base_of_v<std::basic_istream<typename istream_t::char_type>, istream_t>>>
|
||||
auto parse(istream_t& istream, bool check_bom);
|
||||
|
||||
template <typename ifstream_t = std::ifstream, typename path_t = void>
|
||||
auto open(const path_t& path, bool check_bom = false);
|
||||
|
||||
namespace literals
|
||||
{
|
||||
value operator""_json(const char* str, size_t len);
|
||||
wvalue operator""_json(const wchar_t* str, size_t len);
|
||||
|
||||
value operator""_jvalue(const char* str, size_t len);
|
||||
wvalue operator""_jvalue(const wchar_t* str, size_t len);
|
||||
|
||||
array operator""_jarray(const char* str, size_t len);
|
||||
warray operator""_jarray(const wchar_t* str, size_t len);
|
||||
|
||||
object operator""_jobject(const char* str, size_t len);
|
||||
wobject operator""_jobject(const wchar_t* str, size_t len);
|
||||
}
|
||||
|
||||
template <typename string_t = default_string_t>
|
||||
const basic_value<string_t> invalid_value();
|
||||
|
||||
// *************************
|
||||
// * parser impl *
|
||||
// *************************
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline std::optional<basic_value<string_t>>
|
||||
parser<string_t, parsing_t, accel_traits>::parse(const parsing_t& content)
|
||||
{
|
||||
return parser<string_t, parsing_t, accel_traits>(content.cbegin(), content.cend()).parse();
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline std::optional<basic_value<string_t>> parser<string_t, parsing_t, accel_traits>::parse()
|
||||
{
|
||||
if (!skip_whitespace()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
basic_value<string_t> result_value;
|
||||
switch (*_cur) {
|
||||
case '[':
|
||||
result_value = parse_array();
|
||||
break;
|
||||
case '{':
|
||||
result_value = parse_object();
|
||||
break;
|
||||
default: // A JSON payload should be an basic_object or basic_array
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
if (!result_value.valid()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// After the parsing is complete, there should be no more content other than
|
||||
// spaces behind
|
||||
if (skip_whitespace()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
return result_value;
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_value()
|
||||
{
|
||||
switch (*_cur) {
|
||||
case 'n':
|
||||
return parse_null();
|
||||
case 't':
|
||||
case 'f':
|
||||
return parse_boolean();
|
||||
case '-':
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
return parse_number();
|
||||
case '"':
|
||||
return parse_string();
|
||||
case '[':
|
||||
return parse_array();
|
||||
case '{':
|
||||
return parse_object();
|
||||
default:
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_null()
|
||||
{
|
||||
for (const auto& ch : _utils::null_string<string_t>()) {
|
||||
if (_cur != _end && *_cur == ch) {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
|
||||
return basic_value<string_t>();
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_boolean()
|
||||
{
|
||||
switch (*_cur) {
|
||||
case 't':
|
||||
for (const auto& ch : _utils::true_string<string_t>()) {
|
||||
if (_cur != _end && *_cur == ch) {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
case 'f':
|
||||
for (const auto& ch : _utils::false_string<string_t>()) {
|
||||
if (_cur != _end && *_cur == ch) {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_number()
|
||||
{
|
||||
const auto first = _cur;
|
||||
if (*_cur == '-') {
|
||||
++_cur;
|
||||
}
|
||||
|
||||
// numbers cannot have leading zeroes
|
||||
if (_cur != _end && *_cur == '0' && _cur + 1 != _end && std::isdigit(*(_cur + 1))) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
if (!skip_digit()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
if (*_cur == '.') {
|
||||
++_cur;
|
||||
if (!skip_digit()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
|
||||
if (*_cur == 'e' || *_cur == 'E') {
|
||||
if (++_cur == _end) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
if (*_cur == '+' || *_cur == '-') {
|
||||
++_cur;
|
||||
}
|
||||
if (!skip_digit()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
}
|
||||
|
||||
return basic_value<string_t>(basic_value<string_t>::value_type::number, string_t(first, _cur));
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_string()
|
||||
{
|
||||
auto string_opt = parse_stdstring();
|
||||
if (!string_opt) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
return basic_value<string_t>(
|
||||
basic_value<string_t>::value_type::string,
|
||||
std::move(string_opt).value());
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_array()
|
||||
{
|
||||
if (*_cur == '[') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
if (!skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
else if (*_cur == ']') {
|
||||
++_cur;
|
||||
// empty basic_array
|
||||
return basic_array<string_t>();
|
||||
}
|
||||
|
||||
typename basic_array<string_t>::raw_array result;
|
||||
while (true) {
|
||||
if (!skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
basic_value<string_t> val = parse_value();
|
||||
|
||||
if (!val.valid() || !skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
result.emplace_back(std::move(val));
|
||||
|
||||
if (*_cur == ',') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (skip_whitespace() && *_cur == ']') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
return basic_array<string_t>(std::move(result));
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline basic_value<string_t> parser<string_t, parsing_t, accel_traits>::parse_object()
|
||||
{
|
||||
if (*_cur == '{') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
if (!skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
else if (*_cur == '}') {
|
||||
++_cur;
|
||||
// empty basic_object
|
||||
return basic_object<string_t>();
|
||||
}
|
||||
|
||||
typename basic_object<string_t>::raw_object result;
|
||||
while (true) {
|
||||
if (!skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
auto key_opt = parse_stdstring();
|
||||
|
||||
if (key_opt && skip_whitespace() && *_cur == ':') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
if (!skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
basic_value<string_t> val = parse_value();
|
||||
|
||||
if (!val.valid() || !skip_whitespace()) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
auto emplaced = result.emplace(std::move(*key_opt), std::move(val)).second;
|
||||
if (!emplaced) {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
if (*_cur == ',') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (skip_whitespace() && *_cur == '}') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return invalid_value<string_t>();
|
||||
}
|
||||
|
||||
return basic_object<string_t>(std::move(result));
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline std::optional<string_t> parser<string_t, parsing_t, accel_traits>::parse_stdstring()
|
||||
{
|
||||
if (*_cur == '"') {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
string_t result;
|
||||
auto no_escape_beg = _cur;
|
||||
uint16_t pair_high = 0;
|
||||
|
||||
while (_cur != _end) {
|
||||
if constexpr (sizeof(*_cur) == 1 && accel_traits::available) {
|
||||
if (!skip_string_literal_with_accel()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
switch (*_cur) {
|
||||
case '\t':
|
||||
case '\r':
|
||||
case '\n':
|
||||
return std::nullopt;
|
||||
case '\\': {
|
||||
result += string_t(no_escape_beg, _cur++);
|
||||
if (_cur == _end) {
|
||||
return std::nullopt;
|
||||
}
|
||||
if (pair_high && *_cur != 'u') {
|
||||
return std::nullopt;
|
||||
}
|
||||
switch (*_cur) {
|
||||
case '"':
|
||||
result.push_back('"');
|
||||
break;
|
||||
case '\\':
|
||||
result.push_back('\\');
|
||||
break;
|
||||
case '/':
|
||||
result.push_back('/');
|
||||
break;
|
||||
case 'b':
|
||||
result.push_back('\b');
|
||||
break;
|
||||
case 'f':
|
||||
result.push_back('\f');
|
||||
break;
|
||||
case 'n':
|
||||
result.push_back('\n');
|
||||
break;
|
||||
case 'r':
|
||||
result.push_back('\r');
|
||||
break;
|
||||
case 't':
|
||||
result.push_back('\t');
|
||||
break;
|
||||
case 'u':
|
||||
if (!skip_unicode_escape(pair_high, result)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Illegal backslash escape
|
||||
return std::nullopt;
|
||||
}
|
||||
no_escape_beg = ++_cur;
|
||||
break;
|
||||
}
|
||||
case '"': {
|
||||
if (pair_high) {
|
||||
return std::nullopt;
|
||||
}
|
||||
result += string_t(no_escape_beg, _cur++);
|
||||
return result;
|
||||
}
|
||||
default:
|
||||
if (pair_high) {
|
||||
return std::nullopt;
|
||||
}
|
||||
++_cur;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline bool parser<string_t, parsing_t, accel_traits>::skip_unicode_escape(
|
||||
uint16_t& pair_high,
|
||||
string_t& result)
|
||||
{
|
||||
uint16_t cp = 0;
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
if (++_cur == _end) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!std::isxdigit(static_cast<unsigned char>(*_cur))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
cp <<= 4;
|
||||
|
||||
if ('0' <= *_cur && *_cur <= '9') {
|
||||
cp |= *_cur - '0';
|
||||
}
|
||||
else if ('a' <= *_cur && *_cur <= 'f') {
|
||||
cp |= *_cur - 'a' + 10;
|
||||
}
|
||||
else if ('A' <= *_cur && *_cur <= 'F') {
|
||||
cp |= *_cur - 'A' + 10;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ext_cp = cp;
|
||||
uint16_t hi_cp = 0, lo_cp = 0;
|
||||
|
||||
if (0xD800 <= cp && cp <= 0xDBFF) {
|
||||
if (pair_high) {
|
||||
return false;
|
||||
}
|
||||
pair_high = cp;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (0xDC00 <= cp && cp <= 0xDFFF) {
|
||||
if (!pair_high) {
|
||||
return false;
|
||||
}
|
||||
ext_cp = (((pair_high - 0xD800) << 10) | (cp - 0xDC00)) + 0x10000;
|
||||
hi_cp = pair_high;
|
||||
lo_cp = cp;
|
||||
pair_high = 0;
|
||||
}
|
||||
|
||||
if constexpr (std::is_same_v<typename string_t::value_type, char>) {
|
||||
// utf8
|
||||
if (ext_cp <= 0x7F) {
|
||||
result.push_back(static_cast<char>(ext_cp));
|
||||
}
|
||||
else if (ext_cp <= 0x7FF) {
|
||||
result.push_back(static_cast<char>(((ext_cp >> 6) & 0b00011111) | 0b11000000u));
|
||||
result.push_back(static_cast<char>((ext_cp & 0b00111111) | 0b10000000u));
|
||||
}
|
||||
else if (ext_cp <= 0xFFFF) {
|
||||
result.push_back(static_cast<char>(((ext_cp >> 12) & 0b00001111) | 0b11100000u));
|
||||
result.push_back(static_cast<char>(((ext_cp >> 6) & 0b00111111) | 0b10000000u));
|
||||
result.push_back(static_cast<char>((ext_cp & 0b00111111) | 0b10000000u));
|
||||
}
|
||||
else {
|
||||
result.push_back(static_cast<char>(((ext_cp >> 18) & 0b00000111) | 0b11110000u));
|
||||
result.push_back(static_cast<char>(((ext_cp >> 12) & 0b00111111) | 0b10000000u));
|
||||
result.push_back(static_cast<char>(((ext_cp >> 6) & 0b00111111) | 0b10000000u));
|
||||
result.push_back(static_cast<char>((ext_cp & 0b00111111) | 0b10000000u));
|
||||
}
|
||||
}
|
||||
else if constexpr (std::is_same_v<typename string_t::value_type, wchar_t>) {
|
||||
if constexpr (sizeof(wchar_t) == 4) {
|
||||
result.push_back(static_cast<wchar_t>(ext_cp));
|
||||
}
|
||||
else if constexpr (sizeof(wchar_t) == 2) {
|
||||
if (ext_cp <= 0xFFFF) {
|
||||
result.push_back(static_cast<wchar_t>(ext_cp));
|
||||
}
|
||||
else {
|
||||
result.push_back(static_cast<wchar_t>(hi_cp));
|
||||
result.push_back(static_cast<wchar_t>(lo_cp));
|
||||
}
|
||||
}
|
||||
else {
|
||||
static_assert(!sizeof(typename string_t::value_type), "Unsupported wchar");
|
||||
}
|
||||
}
|
||||
else {
|
||||
static_assert(!sizeof(typename string_t::value_type), "Unsupported type");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline bool parser<string_t, parsing_t, accel_traits>::skip_string_literal_with_accel()
|
||||
{
|
||||
if constexpr (sizeof(*_cur) != 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (_end - _cur >= accel_traits::step) {
|
||||
auto pack = accel_traits::load_unaligned(&(*_cur));
|
||||
auto result = accel_traits::less(pack, 32);
|
||||
result =
|
||||
accel_traits::bitwise_or(result, accel_traits::equal(pack, static_cast<uint8_t>('"')));
|
||||
result =
|
||||
accel_traits::bitwise_or(result, accel_traits::equal(pack, static_cast<uint8_t>('\\')));
|
||||
|
||||
if (accel_traits::is_all_zero(result)) {
|
||||
_cur += accel_traits::step;
|
||||
}
|
||||
else {
|
||||
auto index = accel_traits::first_nonzero_byte(result);
|
||||
_cur += index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return _cur != _end;
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline bool parser<string_t, parsing_t, accel_traits>::skip_whitespace() noexcept
|
||||
{
|
||||
while (_cur != _end) {
|
||||
switch (*_cur) {
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\r':
|
||||
case '\n':
|
||||
++_cur;
|
||||
break;
|
||||
case '\0':
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename string_t, typename parsing_t, typename accel_traits>
|
||||
inline bool parser<string_t, parsing_t, accel_traits>::skip_digit()
|
||||
{
|
||||
// At least one digit
|
||||
if (_cur != _end && std::isdigit(*_cur)) {
|
||||
++_cur;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
||||
while (_cur != _end && std::isdigit(*_cur)) {
|
||||
++_cur;
|
||||
}
|
||||
|
||||
if (_cur != _end) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// *************************
|
||||
// * utils impl *
|
||||
// *************************
|
||||
|
||||
template <typename parsing_t>
|
||||
auto parse(const parsing_t& content)
|
||||
{
|
||||
using string_t = std::basic_string<typename parsing_t::value_type>;
|
||||
return parser<string_t, parsing_t>::parse(content);
|
||||
}
|
||||
|
||||
template <typename char_t>
|
||||
auto parse(char_t* content)
|
||||
{
|
||||
return parse(std::basic_string_view<std::decay_t<char_t>> { content });
|
||||
}
|
||||
|
||||
template <typename istream_t, typename _>
|
||||
auto parse(istream_t& ifs, bool check_bom)
|
||||
{
|
||||
using string_t = std::basic_string<typename istream_t::char_type>;
|
||||
|
||||
ifs.seekg(0, std::ios::end);
|
||||
auto file_size = ifs.tellg();
|
||||
|
||||
ifs.seekg(0, std::ios::beg);
|
||||
string_t str(file_size, '\0');
|
||||
|
||||
ifs.read(str.data(), file_size);
|
||||
|
||||
if (check_bom) {
|
||||
using uchar = unsigned char;
|
||||
static constexpr uchar Bom_0 = 0xEF;
|
||||
static constexpr uchar Bom_1 = 0xBB;
|
||||
static constexpr uchar Bom_2 = 0xBF;
|
||||
|
||||
if (str.size() >= 3 && static_cast<uchar>(str.at(0)) == Bom_0
|
||||
&& static_cast<uchar>(str.at(1)) == Bom_1 && static_cast<uchar>(str.at(2)) == Bom_2) {
|
||||
str.assign(str.begin() + 3, str.end());
|
||||
}
|
||||
}
|
||||
return parse(str);
|
||||
}
|
||||
|
||||
template <typename ifstream_t, typename path_t>
|
||||
auto open(const path_t& filepath, bool check_bom)
|
||||
{
|
||||
using char_t = typename ifstream_t::char_type;
|
||||
using string_t = std::basic_string<char_t>;
|
||||
using json_t = json::basic_value<string_t>;
|
||||
using return_t = std::optional<json_t>;
|
||||
|
||||
ifstream_t ifs(filepath, std::ios::in);
|
||||
if (!ifs.is_open()) {
|
||||
return return_t(std::nullopt);
|
||||
}
|
||||
auto opt = parse(ifs, check_bom);
|
||||
ifs.close();
|
||||
return opt;
|
||||
}
|
||||
|
||||
namespace literals
|
||||
{
|
||||
inline value operator""_json(const char* str, size_t len)
|
||||
{
|
||||
return operator""_jvalue(str, len);
|
||||
}
|
||||
|
||||
inline wvalue operator""_json(const wchar_t* str, size_t len)
|
||||
{
|
||||
return operator""_jvalue(str, len);
|
||||
}
|
||||
|
||||
inline value operator""_jvalue(const char* str, size_t len)
|
||||
{
|
||||
return parse(std::string_view(str, len)).value_or(value());
|
||||
}
|
||||
|
||||
inline wvalue operator""_jvalue(const wchar_t* str, size_t len)
|
||||
{
|
||||
return parse(std::wstring_view(str, len)).value_or(wvalue());
|
||||
}
|
||||
|
||||
inline array operator""_jarray(const char* str, size_t len)
|
||||
{
|
||||
auto val = parse(std::string_view(str, len)).value_or(value());
|
||||
return val.is_array() ? val.as_array() : array();
|
||||
}
|
||||
|
||||
inline warray operator""_jarray(const wchar_t* str, size_t len)
|
||||
{
|
||||
auto val = parse(std::wstring_view(str, len)).value_or(wvalue());
|
||||
return val.is_array() ? val.as_array() : warray();
|
||||
}
|
||||
|
||||
inline object operator""_jobject(const char* str, size_t len)
|
||||
{
|
||||
auto val = parse(std::string_view(str, len)).value_or(value());
|
||||
return val.is_object() ? val.as_object() : object();
|
||||
}
|
||||
|
||||
inline wobject operator""_jobject(const wchar_t* str, size_t len)
|
||||
{
|
||||
auto val = parse(std::wstring_view(str, len)).value_or(wvalue());
|
||||
return val.is_object() ? val.as_object() : wobject();
|
||||
}
|
||||
} // namespace literals
|
||||
|
||||
template <typename string_t>
|
||||
const basic_value<string_t> invalid_value()
|
||||
{
|
||||
return basic_value<string_t>(
|
||||
basic_value<string_t>::value_type::invalid,
|
||||
typename basic_value<string_t>::var_t());
|
||||
}
|
||||
} // namespace json
|
||||
1539
3rdparty/include/meojson/parser5/parser5.hpp
vendored
Normal file
1539
3rdparty/include/meojson/parser5/parser5.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18
3rdparty/include/meojson/parser5/unicode.h
vendored
Normal file
18
3rdparty/include/meojson/parser5/unicode.h
vendored
Normal file
File diff suppressed because one or more lines are too long
473
3rdparty/include/meojson/reflection/jsonization.hpp
vendored
Normal file
473
3rdparty/include/meojson/reflection/jsonization.hpp
vendored
Normal file
@@ -0,0 +1,473 @@
|
||||
// IWYU pragma: private, include <meojson/json.hpp>
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
|
||||
#include "../common/types.hpp"
|
||||
|
||||
namespace json::_jsonization_helper
|
||||
{
|
||||
struct next_is_optional_t
|
||||
{
|
||||
};
|
||||
|
||||
struct va_arg_end
|
||||
{
|
||||
};
|
||||
|
||||
struct dumper
|
||||
{
|
||||
template <typename var_t, typename... rest_t>
|
||||
json::value _to_json(const char* key, const var_t& var, rest_t&&... rest) const
|
||||
{
|
||||
json::value result = _to_json(std::forward<rest_t>(rest)...);
|
||||
result.emplace(key, var);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename... rest_t>
|
||||
json::value _to_json(const char*, next_is_optional_t, rest_t&&... rest) const
|
||||
{
|
||||
return _to_json(std::forward<rest_t>(rest)...);
|
||||
}
|
||||
|
||||
json::value _to_json(va_arg_end) const { return {}; }
|
||||
};
|
||||
|
||||
struct checker
|
||||
{
|
||||
template <typename var_t, typename... rest_t>
|
||||
bool _check_json(
|
||||
const json::value& in,
|
||||
std::string& error_key,
|
||||
const char* key,
|
||||
const var_t&,
|
||||
rest_t&&... rest) const
|
||||
{
|
||||
auto opt = in.find(key);
|
||||
if (!opt || !opt->is<var_t>()) {
|
||||
error_key = key;
|
||||
return false;
|
||||
}
|
||||
return _check_json(in, error_key, std::forward<rest_t>(rest)...);
|
||||
}
|
||||
|
||||
template <typename var_t, typename... rest_t>
|
||||
bool _check_json(
|
||||
const json::value& in,
|
||||
std::string& error_key,
|
||||
const char*,
|
||||
next_is_optional_t,
|
||||
const char* key,
|
||||
const var_t&,
|
||||
rest_t&&... rest) const
|
||||
{
|
||||
auto opt = in.find(key);
|
||||
if (opt) {
|
||||
if (!opt->is<var_t>()) {
|
||||
error_key = key;
|
||||
return false;
|
||||
}
|
||||
} // next_is_optional_t, ignore key not found
|
||||
|
||||
return _check_json(in, error_key, std::forward<rest_t>(rest)...);
|
||||
}
|
||||
|
||||
bool _check_json(const json::value&, std::string&, va_arg_end) const { return true; }
|
||||
};
|
||||
|
||||
struct loader
|
||||
{
|
||||
template <typename var_t, typename... rest_t>
|
||||
bool _from_json(
|
||||
const json::value& in,
|
||||
std::string& error_key,
|
||||
const char* key,
|
||||
var_t& var,
|
||||
rest_t&&... rest) const
|
||||
{
|
||||
auto opt = in.find(key);
|
||||
if (!opt || !opt->is<var_t>()) {
|
||||
error_key = key;
|
||||
return false;
|
||||
}
|
||||
var = std::move(opt)->as<var_t>();
|
||||
|
||||
return _from_json(in, error_key, std::forward<rest_t>(rest)...);
|
||||
}
|
||||
|
||||
template <typename var_t, typename... rest_t>
|
||||
bool _from_json(
|
||||
const json::value& in,
|
||||
std::string& error_key,
|
||||
const char*,
|
||||
next_is_optional_t,
|
||||
const char* key,
|
||||
var_t& var,
|
||||
rest_t&&... rest) const
|
||||
{
|
||||
auto opt = in.find(key);
|
||||
if (opt) {
|
||||
if (!opt->is<var_t>()) {
|
||||
error_key = key;
|
||||
return false;
|
||||
}
|
||||
var = std::move(opt)->as<var_t>();
|
||||
} // next_is_optional_t, ignore key not found
|
||||
|
||||
return _from_json(in, error_key, std::forward<rest_t>(rest)...);
|
||||
}
|
||||
|
||||
bool _from_json(const json::value&, std::string&, va_arg_end) const { return true; }
|
||||
};
|
||||
} // namespace json::_jsonization_helper
|
||||
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
|
||||
#endif
|
||||
|
||||
namespace json::_private_macro
|
||||
{
|
||||
#define _MEOJSON_STRINGIZE(arg) _MEOJSON_STRINGIZE1(arg)
|
||||
#define _MEOJSON_STRINGIZE1(arg) _MEOJSON_STRINGIZE2(arg)
|
||||
#define _MEOJSON_STRINGIZE2(arg) #arg
|
||||
|
||||
#define _MEOJSON_CONCATENATE(arg1, arg2) _MEOJSON_CONCATENATE1(arg1, arg2)
|
||||
#define _MEOJSON_CONCATENATE1(arg1, arg2) _MEOJSON_CONCATENATE2(arg1, arg2)
|
||||
#define _MEOJSON_CONCATENATE2(arg1, arg2) arg1##arg2
|
||||
|
||||
#define _MEOJSON_EXPAND(x) x
|
||||
|
||||
#define _MEOJSON_FOR_EACH_0(pred, ...)
|
||||
#define _MEOJSON_FOR_EACH_1(pred, x, ...) pred(x)
|
||||
#define _MEOJSON_FOR_EACH_2(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_1(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_3(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_2(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_4(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_3(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_5(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_4(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_6(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_5(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_7(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_6(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_8(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_7(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_9(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_8(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_10(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_9(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_11(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_10(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_12(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_11(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_13(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_12(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_14(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_13(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_15(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_14(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_16(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_15(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_17(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_16(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_18(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_17(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_19(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_18(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_20(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_19(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_21(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_20(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_22(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_21(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_23(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_22(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_24(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_23(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_25(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_24(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_26(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_25(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_27(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_26(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_28(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_27(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_29(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_28(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_30(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_29(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_31(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_30(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_32(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_31(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_33(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_32(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_34(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_33(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_35(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_34(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_36(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_35(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_37(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_36(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_38(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_37(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_39(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_38(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_40(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_39(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_41(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_40(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_42(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_41(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_43(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_42(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_44(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_43(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_45(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_44(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_46(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_45(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_47(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_46(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_48(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_47(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_49(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_48(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_50(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_49(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_51(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_50(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_52(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_51(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_53(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_52(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_54(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_53(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_55(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_54(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_56(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_55(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_57(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_56(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_58(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_57(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_59(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_58(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_60(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_59(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_61(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_60(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_62(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_61(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_63(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_62(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH_64(pred, x, ...) \
|
||||
pred(x) _MEOJSON_EXPAND(_MEOJSON_FOR_EACH_63(pred, __VA_ARGS__))
|
||||
|
||||
#define _MEOJSON_ARG_COUNT(...) \
|
||||
_MEOJSON_EXPAND(_MEOJSON_ARG_COUNT1( \
|
||||
0, \
|
||||
##__VA_ARGS__, \
|
||||
64, \
|
||||
63, \
|
||||
62, \
|
||||
61, \
|
||||
60, \
|
||||
59, \
|
||||
58, \
|
||||
57, \
|
||||
56, \
|
||||
55, \
|
||||
54, \
|
||||
53, \
|
||||
52, \
|
||||
51, \
|
||||
50, \
|
||||
49, \
|
||||
48, \
|
||||
47, \
|
||||
46, \
|
||||
45, \
|
||||
44, \
|
||||
43, \
|
||||
42, \
|
||||
41, \
|
||||
40, \
|
||||
39, \
|
||||
38, \
|
||||
37, \
|
||||
36, \
|
||||
35, \
|
||||
34, \
|
||||
33, \
|
||||
32, \
|
||||
31, \
|
||||
30, \
|
||||
29, \
|
||||
28, \
|
||||
27, \
|
||||
26, \
|
||||
25, \
|
||||
24, \
|
||||
23, \
|
||||
22, \
|
||||
21, \
|
||||
20, \
|
||||
19, \
|
||||
18, \
|
||||
17, \
|
||||
16, \
|
||||
15, \
|
||||
14, \
|
||||
13, \
|
||||
12, \
|
||||
11, \
|
||||
10, \
|
||||
9, \
|
||||
8, \
|
||||
7, \
|
||||
6, \
|
||||
5, \
|
||||
4, \
|
||||
3, \
|
||||
2, \
|
||||
1, \
|
||||
0))
|
||||
#define _MEOJSON_ARG_COUNT1( \
|
||||
_0, \
|
||||
_1, \
|
||||
_2, \
|
||||
_3, \
|
||||
_4, \
|
||||
_5, \
|
||||
_6, \
|
||||
_7, \
|
||||
_8, \
|
||||
_9, \
|
||||
_10, \
|
||||
_11, \
|
||||
_12, \
|
||||
_13, \
|
||||
_14, \
|
||||
_15, \
|
||||
_16, \
|
||||
_17, \
|
||||
_18, \
|
||||
_19, \
|
||||
_20, \
|
||||
_21, \
|
||||
_22, \
|
||||
_23, \
|
||||
_24, \
|
||||
_25, \
|
||||
_26, \
|
||||
_27, \
|
||||
_28, \
|
||||
_29, \
|
||||
_30, \
|
||||
_31, \
|
||||
_32, \
|
||||
_33, \
|
||||
_34, \
|
||||
_35, \
|
||||
_36, \
|
||||
_37, \
|
||||
_38, \
|
||||
_39, \
|
||||
_40, \
|
||||
_41, \
|
||||
_42, \
|
||||
_43, \
|
||||
_44, \
|
||||
_45, \
|
||||
_46, \
|
||||
_47, \
|
||||
_48, \
|
||||
_49, \
|
||||
_50, \
|
||||
_51, \
|
||||
_52, \
|
||||
_53, \
|
||||
_54, \
|
||||
_55, \
|
||||
_56, \
|
||||
_57, \
|
||||
_58, \
|
||||
_59, \
|
||||
_60, \
|
||||
_61, \
|
||||
_62, \
|
||||
_63, \
|
||||
_64, \
|
||||
N, \
|
||||
...) \
|
||||
N
|
||||
|
||||
#define _MEOJSON_FOR_EACH_(N, pred, ...) \
|
||||
_MEOJSON_EXPAND(_MEOJSON_CONCATENATE(_MEOJSON_FOR_EACH_, N)(pred, __VA_ARGS__))
|
||||
#define _MEOJSON_FOR_EACH(pred, ...) \
|
||||
_MEOJSON_EXPAND( \
|
||||
_MEOJSON_FOR_EACH_(_MEOJSON_EXPAND(_MEOJSON_ARG_COUNT(__VA_ARGS__)), pred, __VA_ARGS__))
|
||||
|
||||
#define _MEOJSON_VARNAME(x) _MEOJSON_CONCATENATE(_meojson_jsonization_, x)
|
||||
#define _MEOJSON_KEY_VALUE(x) _MEOJSON_STRINGIZE(x), x,
|
||||
} // namespace json::_private_macro
|
||||
|
||||
#define MEO_TOJSON(...) \
|
||||
json::value to_json() const \
|
||||
{ \
|
||||
return json::_jsonization_helper::dumper()._to_json( \
|
||||
_MEOJSON_EXPAND(_MEOJSON_FOR_EACH(_MEOJSON_KEY_VALUE, __VA_ARGS__)) \
|
||||
json::_jsonization_helper::va_arg_end {}); \
|
||||
}
|
||||
|
||||
#define MEO_CHECKJSON(...) \
|
||||
bool check_json(const json::value& _MEOJSON_VARNAME(in)) const \
|
||||
{ \
|
||||
std::string _MEOJSON_VARNAME(error_key); \
|
||||
return check_json(_MEOJSON_VARNAME(in), _MEOJSON_VARNAME(error_key)); \
|
||||
} \
|
||||
bool check_json( \
|
||||
const json::value& _MEOJSON_VARNAME(in), \
|
||||
std::string& _MEOJSON_VARNAME(error_key)) const \
|
||||
{ \
|
||||
return json::_jsonization_helper::checker()._check_json( \
|
||||
_MEOJSON_VARNAME(in), \
|
||||
_MEOJSON_VARNAME(error_key), \
|
||||
_MEOJSON_EXPAND(_MEOJSON_FOR_EACH(_MEOJSON_KEY_VALUE, __VA_ARGS__)) \
|
||||
json::_jsonization_helper::va_arg_end {}); \
|
||||
}
|
||||
|
||||
#define MEO_FROMJSON(...) \
|
||||
bool from_json(const json::value& _MEOJSON_VARNAME(in)) \
|
||||
{ \
|
||||
std::string _MEOJSON_VARNAME(error_key); \
|
||||
return from_json(_MEOJSON_VARNAME(in), _MEOJSON_VARNAME(error_key)); \
|
||||
} \
|
||||
bool from_json( \
|
||||
const json::value& _MEOJSON_VARNAME(in), \
|
||||
std::string& _MEOJSON_VARNAME(error_key)) \
|
||||
{ \
|
||||
return json::_jsonization_helper::loader()._from_json( \
|
||||
_MEOJSON_VARNAME(in), \
|
||||
_MEOJSON_VARNAME(error_key), \
|
||||
_MEOJSON_EXPAND(_MEOJSON_FOR_EACH(_MEOJSON_KEY_VALUE, __VA_ARGS__)) \
|
||||
json::_jsonization_helper::va_arg_end {}); \
|
||||
}
|
||||
|
||||
#define MEO_JSONIZATION(...) \
|
||||
_MEOJSON_EXPAND(MEO_TOJSON(__VA_ARGS__)) \
|
||||
_MEOJSON_EXPAND(MEO_CHECKJSON(__VA_ARGS__)) \
|
||||
_MEOJSON_EXPAND(MEO_FROMJSON(__VA_ARGS__))
|
||||
|
||||
#define MEO_OPT json::_jsonization_helper::next_is_optional_t {},
|
||||
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop // -Wgnu-zero-variadic-macro-arguments
|
||||
#endif
|
||||
77
CHANGELOG.md
77
CHANGELOG.md
@@ -1,49 +1,48 @@
|
||||
## v4.19.2
|
||||
## v5.16.5
|
||||
|
||||
### 新增
|
||||
### 新增 | New
|
||||
|
||||
- 新增 LE 活动关卡导航 @ABA2396
|
||||
* Mac新增基建配置 @hguandl
|
||||
* 特征匹配 (#10966) @status102
|
||||
* 绿票、黄票、活动商店 (#12586) @Daydreamer114 @status102 @ABA2396
|
||||
|
||||
### 改进
|
||||
### 改进 | Improved
|
||||
|
||||
- 雷神保全浊蒂版&约翰保全浊蒂版修改 修改职业名称为英文,同步作业站版本 (#5172) @junyihan233
|
||||
- 重训了国服, 日服, 台服和韩服的OCR模型 (#5151) @Plumess
|
||||
- 更新了简中和英文的ocr det模型, 以及英文的ocr rec模型 (#5156) @Plumess
|
||||
- 优化退出模拟器,添加日志 @ABA2396
|
||||
- 随机展示简中文档中模拟器支持列表 (#5161) @bakashigure @AnnAngela
|
||||
- 优化界面显示 @moomiji @ABA2396
|
||||
- 关卡提示支持显示多个活动 @ABA2396
|
||||
* 调整连战输出 @ABA2396
|
||||
* 肉鸽不期而遇退出检测加个重试 @status102
|
||||
|
||||
### 修复
|
||||
### 修复 | Fix
|
||||
|
||||
- 修复特别关注识别错误、部分干员名错误 @MistEO
|
||||
- 修复抄作业编队超过 10 人时无法选人的问题 @MistEO
|
||||
- 修复自动基建 制造站 bskill_man_exp4 技能错误 @MistEO
|
||||
- 扩大roi范围,修复PlayCover无法开始唤醒 #5099 @ABA2396
|
||||
- 点赞接口序列化两次导致后端报错 @ABA2396
|
||||
* 修复MaaCore asst.log文件句柄泄露 (#12639) @status102
|
||||
* 修复了屎遇上手动覆盖文件的大聪明爆炸的问题 @ABA2396
|
||||
* 凹开局干员直升精二选项显示时机错误 @ABA2396
|
||||
* 连战次数乘号匹配失败 @status102
|
||||
* store underfunded ocr full match @Daydreamer114
|
||||
|
||||
### 其他
|
||||
### 文档 | Docs
|
||||
|
||||
- fix filename @horror-proton
|
||||
- Auto Update Game Resources
|
||||
- 修正拼写错误 @ABA2396 @kongwei981126 @doquangminh28
|
||||
- Update en-bug-report.yaml @ABA2396
|
||||
- 移除不需要的changelog @AnnAngela
|
||||
- 删除多余mac完整包 @AnnAngela
|
||||
- Do not force push tag @MistEO
|
||||
- 集成战略文档更新 (#5186) @LingXii
|
||||
- 发版检测到docs发生变动时部署 @AnnAngela
|
||||
* 任务流color_scales注释优化 @status102
|
||||
|
||||
### For overseas
|
||||
### 其他 | Other
|
||||
|
||||
#### YostarEN
|
||||
|
||||
- translation refactoring of en-us.xaml for YostarEN (#5111) @Constrat @ABA2396
|
||||
- Difficulty selection for YostarEN (#5200) @Constrat
|
||||
- Fight Task Adverse Start YostarEN (#5196) @Constrat
|
||||
- OperBoxNameOCR tasks.json YostarEN (#5169) @Constrat
|
||||
|
||||
#### YostarKR
|
||||
|
||||
- recruitment failure with DP-Recovery tag for KR (after OCR update) @178619
|
||||
- Update ocrReplaces for KR @178619
|
||||
* yellow ticket items @Daydreamer114
|
||||
* ocrTask text @status102
|
||||
* Store@UnderfundedOCR @Daydreamer114
|
||||
* 再铲一屎 @status102
|
||||
* cache 移动逻辑 @ABA2396
|
||||
* ubuntu unused @status102
|
||||
* 铲屎 @status102
|
||||
* 指定类型 @status102
|
||||
* store loading @Daydreamer114
|
||||
* Revert "feat: 在肉鸽招募中增加m3作为群奶 (#12353)" @Saratoga-Official
|
||||
* 简化代码 @ABA2396
|
||||
* 提示补全 @status102
|
||||
* NumberReplace @status102
|
||||
* 再次调整官网细节 @MistEO
|
||||
* 调整官网标题 @MistEO
|
||||
* Revert "fix: github change string to int (#12574)" @Daydreamer114
|
||||
* 绿票、黄票、活动商店-国际服适配 (#12674) @Daydreamer114
|
||||
* mark @status102
|
||||
* 调整 UI 与 Core 版本不一致的解决方案提示 @ABA2396
|
||||
* 点击任意职业回正列表 @ABA2396
|
||||
* 基建先进行技能识别并返回列表首位,再清空选择 @ABA2396
|
||||
|
||||
17
CITATION.cff
Normal file
17
CITATION.cff
Normal file
@@ -0,0 +1,17 @@
|
||||
# This CITATION.cff file was generated with cffinit.
|
||||
# Visit https://bit.ly/cffinit to generate yours today!
|
||||
|
||||
cff-version: 1.2.0
|
||||
title: MaaAssistantArknights
|
||||
message: >-
|
||||
If you use this software, please cite it using the
|
||||
metadata from this file.
|
||||
type: software
|
||||
authors:
|
||||
- name: Maa Team
|
||||
website: 'https://maa.plus/'
|
||||
date-start: '2021-07-10'
|
||||
repository-code: >-
|
||||
https://github.com/MaaAssistantArknights/MaaAssistantArknights/
|
||||
url: 'https://maa.plus/'
|
||||
license: AGPL-3.0-only
|
||||
113
CMakeLists.txt
113
CMakeLists.txt
@@ -13,38 +13,46 @@ option(BUILD_UNIVERSAL "build both arm64 and x86_64 on macOS" OFF)
|
||||
option(INSTALL_PYTHON "install python ffi" OFF)
|
||||
option(INSTALL_RESOURCE "install resource" OFF)
|
||||
option(INSTALL_DEVEL "install development files" OFF)
|
||||
option(INSTALL_FLATTEN "do not use bin lib include directory" ON)
|
||||
option(INSTALL_THIRD_LIBS "install third party libraries" ON)
|
||||
option(USE_MAADEPS "use third-party libraries built by MaaDeps" ON)
|
||||
option(USE_RANGE_V3 "use range-v3" OFF)
|
||||
option(WITH_EMULATOR_EXTRAS "build with emulator extras" ${WIN32})
|
||||
option(WITH_THRIFT "build with thrift" OFF)
|
||||
option(WITH_ASST_DEBUG "build with ASST_DEBUG defined" OFF)
|
||||
|
||||
include(${PROJECT_SOURCE_DIR}/cmake/utils.cmake)
|
||||
include(${PROJECT_SOURCE_DIR}/cmake/thrift-gen.cmake)
|
||||
|
||||
if(USE_MAADEPS)
|
||||
include(${PROJECT_SOURCE_DIR}/MaaDeps/maadeps.cmake)
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
add_compile_options("/utf-8")
|
||||
add_compile_options("/MP")
|
||||
add_compile_options("/W4;/WX")
|
||||
add_compile_options("/wd4127") # conditional expression is constant
|
||||
add_compile_options("/Wv:19.35.32217") # disable warning introduced after this version
|
||||
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||||
else ()
|
||||
add_compile_options("-Wall;-Werror;-Wextra;-Wpedantic;-Wno-missing-field-initializers")
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13)
|
||||
add_compile_options("-Wno-restrict")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
|
||||
add_library(header_only_libraries INTERFACE)
|
||||
target_include_directories(header_only_libraries INTERFACE 3rdparty/include)
|
||||
target_include_directories(header_only_libraries INTERFACE 3rdparty/include 3rdparty/EmulatorExtras)
|
||||
|
||||
file(GLOB_RECURSE maa_src src/MaaCore/*.cpp)
|
||||
|
||||
add_library(MaaCore SHARED ${maa_src})
|
||||
|
||||
if (MSVC)
|
||||
target_compile_options(MaaCore PRIVATE "/utf-8")
|
||||
target_compile_options(MaaCore PRIVATE "/MP")
|
||||
target_compile_options(MaaCore PRIVATE "/W4;/WX")
|
||||
target_compile_options(MaaCore PRIVATE "/wd4127") # conditional expression is constant
|
||||
target_compile_options(MaaCore PRIVATE "/Wv:19.35.32217") # disable warning introduced after this version
|
||||
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||||
else ()
|
||||
target_compile_options(MaaCore PRIVATE "-Wall;-Wextra;-Wpedantic")
|
||||
# LLVM clang 16 will failed with `error: no member named 'join' in namespace 'std::ranges::views'`, but Apple clang 16 won't
|
||||
# value defined in https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html
|
||||
if ((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
|
||||
OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17))
|
||||
target_compile_options(MaaCore PRIVATE "-fexperimental-library")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (WIN32)
|
||||
#注意:相比VS版本缺少了 -D_CONSOLE -D_WINDLL 两项
|
||||
target_compile_definitions(MaaCore PRIVATE ASST_DLL_EXPORTS _UNICODE UNICODE)
|
||||
@@ -58,7 +66,9 @@ set_target_properties(MaaCore PROPERTIES
|
||||
PUBLIC_HEADER "${MaaCore_PUBLIC_HEADERS}"
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
set_target_properties(MaaCore PROPERTIES INSTALL_RPATH "@loader_path/")
|
||||
elseif(UNIX)
|
||||
set_target_properties(MaaCore PROPERTIES INSTALL_RPATH "$ORIGIN/")
|
||||
endif()
|
||||
|
||||
@@ -71,20 +81,64 @@ if (BUILD_TEST)
|
||||
target_link_libraries(test MaaCore)
|
||||
endif (BUILD_TEST)
|
||||
|
||||
find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs videoio)
|
||||
find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs videoio features2d)
|
||||
find_package(OpenCV QUIET COMPONENTS xfeatures2d)
|
||||
find_package(ZLIB REQUIRED)
|
||||
find_package(MaaDerpLearning REQUIRED)
|
||||
find_package(asio REQUIRED)
|
||||
find_package(ONNXRuntime)
|
||||
find_package(cpr CONFIG REQUIRED)
|
||||
|
||||
target_link_libraries(MaaCore ${OpenCV_LIBS} MaaDerpLearning asio::asio ZLIB::ZLIB ONNXRuntime::ONNXRuntime cpr::cpr header_only_libraries)
|
||||
list(APPEND maa_libs ${OpenCV_LIBS} ZLIB::ZLIB cpr::cpr header_only_libraries)
|
||||
|
||||
if(USE_MAADEPS)
|
||||
find_package(asio REQUIRED)
|
||||
list(APPEND maa_libs asio::asio)
|
||||
endif()
|
||||
|
||||
find_package(onnxruntime CONFIG REQUIRED) # provided by onnxruntime>=1.16
|
||||
list(APPEND maa_libs onnxruntime::onnxruntime)
|
||||
if(DEFINED fastdeploy_SOURCE_DIR)
|
||||
# TODO: FetchContent github.com/MaaAssistantArknights/FastDeploy
|
||||
if(NOT DEFINED fastdeploy_BINARY_DIR)
|
||||
set(fastdeploy_BINARY_DIR ${CMAKE_BINARY_DIR}/fastdeploy)
|
||||
endif()
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
add_subdirectory(${fastdeploy_SOURCE_DIR} ${fastdeploy_BINARY_DIR} EXCLUDE_FROM_ALL SYSTEM)
|
||||
if(NOT DEFINED fastdeploy_INCLUDE_DIRS)
|
||||
set(fastdeploy_INCLUDE_DIRS ${fastdeploy_SOURCE_DIR})
|
||||
endif()
|
||||
target_include_directories(MaaCore SYSTEM PRIVATE ${fastdeploy_INCLUDE_DIRS})
|
||||
get_target_property(fastdeploy_type fastdeploy_ppocr TYPE)
|
||||
if(fastdeploy_type STREQUAL "SHARED_LIBRARY")
|
||||
install(TARGETS fastdeploy_ppocr)
|
||||
endif()
|
||||
else()
|
||||
find_package(fastdeploy_ppocr REQUIRED)
|
||||
endif()
|
||||
list(APPEND maa_libs fastdeploy_ppocr)
|
||||
|
||||
target_link_libraries(MaaCore ${maa_libs})
|
||||
|
||||
if(WITH_EMULATOR_EXTRAS AND NOT EXISTS ${PROJECT_SOURCE_DIR}/3rdparty/EmulatorExtras/Mumu)
|
||||
message(WARNING "EmulatorExtras not found, please run `git submodule update --init 3rdparty/EmulatorExtras`")
|
||||
set(WITH_EMULATOR_EXTRAS OFF)
|
||||
endif()
|
||||
target_compile_definitions(MaaCore PRIVATE ASST_WITH_EMULATOR_EXTRAS=$<BOOL:${WITH_EMULATOR_EXTRAS}>)
|
||||
|
||||
if(WITH_THRIFT)
|
||||
find_package(Thrift CONFIG REQUIRED)
|
||||
add_subdirectory(src/MaaThriftController)
|
||||
target_link_libraries(MaaCore MaaThriftController)
|
||||
endif(WITH_THRIFT)
|
||||
|
||||
if (WITH_ASST_DEBUG)
|
||||
target_compile_definitions(MaaCore PRIVATE ASST_DEBUG)
|
||||
endif ()
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(MaaCore ws2_32)
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
||||
if (USE_RANGE_V3)
|
||||
target_compile_definitions(MaaCore PRIVATE ASST_USE_RANGES_RANGE_V3)
|
||||
find_package(range-v3 REQUIRED)
|
||||
target_link_libraries(MaaCore range-v3::range-v3)
|
||||
endif ()
|
||||
@@ -93,12 +147,11 @@ if(INSTALL_DEVEL)
|
||||
set(MaaCore_install_extra_args PUBLIC_HEADER DESTINATION devel/include ARCHIVE DESTINATION devel/lib)
|
||||
endif()
|
||||
|
||||
install(TARGETS MaaCore
|
||||
RUNTIME DESTINATION .
|
||||
LIBRARY DESTINATION .
|
||||
PUBLIC_HEADER DESTINATION .
|
||||
${MaaCore_install_extra_args}
|
||||
)
|
||||
if(INSTALL_FLATTEN)
|
||||
set(MaaCore_install_flatten_args RUNTIME DESTINATION . LIBRARY DESTINATION . PUBLIC_HEADER DESTINATION .)
|
||||
endif()
|
||||
|
||||
install(TARGETS MaaCore ${MaaCore_install_flatten_args} ${MaaCore_install_extra_args})
|
||||
|
||||
if(INSTALL_THIRD_LIBS AND USE_MAADEPS)
|
||||
maadeps_install()
|
||||
|
||||
77
DependencySetup_依赖库安装.bat
Normal file
77
DependencySetup_依赖库安装.bat
Normal file
@@ -0,0 +1,77 @@
|
||||
@echo off
|
||||
chcp 65001
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: 定义ANSI颜色代码
|
||||
for /f %%a in ('echo prompt $E^| cmd') do set "ESC=%%a"
|
||||
set "RESET=%ESC%[0m"
|
||||
set "GREEN=%ESC%[32m"
|
||||
set "RED=%ESC%[31m"
|
||||
set "YELLOW=%ESC%[33m"
|
||||
set "BLUE=%ESC%[34m"
|
||||
set "CYAN=%ESC%[36m"
|
||||
set "WHITE=%ESC%[37m"
|
||||
set "BOLD=%ESC%[1m"
|
||||
|
||||
:: 初始化错误标志
|
||||
set "ErrorOccurred=0"
|
||||
|
||||
openfiles >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo %YELLOW%正在获取管理员权限...%RESET%
|
||||
echo %YELLOW%Obtaining administrator privileges...%RESET%
|
||||
powershell -Command "Start-Process cmd.exe -ArgumentList '/c %~dpnx0' -Verb RunAs"
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo.
|
||||
echo %BLUE%========================================%RESET%
|
||||
echo %BOLD%%CYAN%正在安装 Microsoft Visual C++ Redistributable%RESET%
|
||||
echo %BOLD%%CYAN%Installing Microsoft Visual C++ Redistributable%RESET%
|
||||
echo %BLUE%========================================%RESET%
|
||||
echo.
|
||||
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
if %errorlevel% neq 0 (
|
||||
echo.
|
||||
echo %BOLD%%RED%错误: Microsoft.VCRedist.2015+.x64 安装失败%RESET%
|
||||
echo %BOLD%%RED%Error: Microsoft.VCRedist.2015+.x64 installation failed%RESET%
|
||||
set "ErrorOccurred=1"
|
||||
)
|
||||
|
||||
echo.
|
||||
echo %BLUE%========================================%RESET%
|
||||
echo %BOLD%%CYAN%正在安装 .NET Desktop Runtime 8.0%RESET%
|
||||
echo %BOLD%%CYAN%Installing .NET Desktop Runtime 8.0%RESET%
|
||||
echo %BLUE%========================================%RESET%
|
||||
echo.
|
||||
|
||||
winget install "Microsoft.DotNet.DesktopRuntime.8" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
if %errorlevel% neq 0 (
|
||||
echo.
|
||||
echo %BOLD%%RED%错误: Microsoft.DotNet.DesktopRuntime.8 安装失败%RESET%
|
||||
echo %BOLD%%RED%Error: Microsoft.DotNet.DesktopRuntime.8 installation failed%RESET%
|
||||
set "ErrorOccurred=1"
|
||||
)
|
||||
|
||||
echo.
|
||||
if %ErrorOccurred% equ 0 (
|
||||
echo %BOLD%%GREEN%运行库修复完成,请重启电脑后再次尝试运行 MAA。%RESET%
|
||||
echo %BOLD%%GREEN%The runtime library repair is complete. Please restart your computer and try running MAA again.%RESET%
|
||||
) else (
|
||||
echo %RED%========================================%RESET%
|
||||
echo %BOLD%%RED%运行库修复过程中出现错误%RESET%
|
||||
echo %BOLD%%RED%Errors occurred during runtime library repair%RESET%
|
||||
echo.
|
||||
echo %YELLOW%您可以尝试手动下载并安装以下组件:%RESET%
|
||||
echo %YELLOW%You can try to manually download and install the following components:%RESET%
|
||||
echo.
|
||||
echo %WHITE%Microsoft Visual C++ Redistributable:%RESET%
|
||||
echo %CYAN%https://aka.ms/vs/17/release/vc_redist.x64.exe%RESET%
|
||||
echo.
|
||||
echo %WHITE%.NET Desktop Runtime 8.0:%RESET%
|
||||
echo %CYAN%https://aka.ms/dotnet/8.0/windowsdesktop-runtime-win-x64.exe%RESET%
|
||||
echo %RED%========================================%RESET%
|
||||
)
|
||||
|
||||
pause
|
||||
6
LICENSE.spdx
Normal file
6
LICENSE.spdx
Normal file
@@ -0,0 +1,6 @@
|
||||
SPDXVersion: SPDX-2.3
|
||||
DataLicense: CC0-1.0
|
||||
PackageName: MaaAssistantArknights
|
||||
PackageOriginator: Maa Team and all contributors
|
||||
PackageHomePage: https://github.com/MaaAssistantArknights/MaaAssistantArknights
|
||||
PackageLicenseDeclared: AGPL-3.0-only
|
||||
14
MAA.sln
14
MAA.sln
@@ -11,6 +11,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaaWpfGui", "src\MaaWpfGui\
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaaCore", "src\MaaCore\MaaCore.vcxproj", "{362D1E30-F5AE-4279-9985-65C27B3BA300}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaaThriftController", "src\MaaThriftController\MaaThriftController.vcxproj", "{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{11F02235-5785-408B-9651-8A4B41FF36F4}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
@@ -58,6 +60,18 @@ Global
|
||||
{362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|ARM64.Build.0 = RelWithDebInfo|ARM64
|
||||
{362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
|
||||
{362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Debug|x64.Build.0 = Debug|x64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Release|x64.ActiveCfg = Release|x64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.Release|x64.Build.0 = Release|x64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|ARM64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.RelWithDebInfo|ARM64.Build.0 = RelWithDebInfo|ARM64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
|
||||
{8238EDB1-19BF-4E3B-AF5B-016120D59D7B}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
|
||||
{F860C043-4D86-41B6-A97E-4A75C9A6C4EC}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{F860C043-4D86-41B6-A97E-4A75C9A6C4EC}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{F860C043-4D86-41B6-A97E-4A75C9A6C4EC}.Debug|x64.ActiveCfg = Debug|x64
|
||||
|
||||
170
MAA.sln.DotSettings
Normal file
170
MAA.sln.DotSettings
Normal file
@@ -0,0 +1,170 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EN/@EntryIndexedValue">EN</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KR/@EntryIndexedValue">KR</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JP/@EntryIndexedValue">JP</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GUI/@EntryIndexedValue">GUI</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SWMINIMIZE/@EntryIndexedValue">SWMINIMIZE</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=AP/@EntryIndexedValue">AP</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=AP_002D/@EntryIndexedValue">AP-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CA/@EntryIndexedValue">CA</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CA_002D/@EntryIndexedValue">CA-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CE/@EntryIndexedValue">CE</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=CE_002D/@EntryIndexedValue">CE-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=EN/@EntryIndexedValue">EN</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=IS/@EntryIndexedValue">IS</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=JP/@EntryIndexedValue">JP</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=KR/@EntryIndexedValue">KR</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=LD/@EntryIndexedValue">LD</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=LS/@EntryIndexedValue">LS</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=LS_002D/@EntryIndexedValue">LS-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DA/@EntryIndexedValue">PR-A</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DA_002D/@EntryIndexedValue">PR-A-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DB/@EntryIndexedValue">PR-B</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DB_002D/@EntryIndexedValue">PR-B-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DC/@EntryIndexedValue">PR-C</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DC_002D/@EntryIndexedValue">PR-C-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DD/@EntryIndexedValue">PR-D</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=PR_002DD_002D/@EntryIndexedValue">PR-D-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=SK/@EntryIndexedValue">SK</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=SK_002D/@EntryIndexedValue">SK-</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=SSS/@EntryIndexedValue">SSS</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=WSA/@EntryIndexedValue">WSA</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/Abbreviations/=XYAZ/@EntryIndexedValue">XYAZ</s:String>
|
||||
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=Github/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=_4E00_9375_8F2A/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=_591C_95F4_6A21_5F0F/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acfend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acguad/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acpion/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acspec/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=acsupo/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=advapi/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Aero/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Affero/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=aguard/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=amedic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=amiya/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=apionr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=arget/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Arknights/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=arkplanner/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=asnipe/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=autofill/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Bilibili/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Bluestacks/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=bsconsole/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ccast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cdfend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cguard/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Chayn/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Chyan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cmedic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Collapsal/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cpione/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=csnipe/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=cspec/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=csuppo/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ctrler/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=desp/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=dnplayer/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Ehem/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=esource/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Eyjafjalla/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Favourite/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=filetime/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=findstr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=FLASHW/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=FLASHWINFO/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=foldartal/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Foldartals/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=framerate/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=furni/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Gacha/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Gavial/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Grandet/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hotkey/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=hwnd/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Infrast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Inited/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=iter/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=jsend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ldconsole/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ldplayer/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=LD_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=leidian/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Lolicon/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=lpwndpl/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ls_005B_0022sub/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=luestacks/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=maatouch/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=MAA_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=memuc/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Minitouch/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=mirrorc/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mirrorchyan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mizuki/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mumu/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nemu/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Netease/@EntryIndexedValue">True</s:Boolean>
|
||||
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=netstat/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nonfriend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=notstationed/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=objstr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=oper/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=opers/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Originite/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Originium/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=originiums/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Orundum/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Orundums/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=o_FF9Fv_FF9F/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pallas/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=pidl/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pormpt/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=powrprof/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ppidl/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Prts/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=pwfi/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=qmsg/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Raidian/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rcast/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rdfend/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=removelist/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rguard/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rmean/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rmedic/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Roguelike/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rsnipe/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sami/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sarkaz/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Screencap/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=sctp/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=serilog/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Showminimized/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Shownormal/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Skland/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=specialaccess/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=spid/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=SSS/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=STGM/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stormeye/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=strlen/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stylet/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=subtask/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Suppressions/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Surtr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=SWMINIMIZE/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=taskchain/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Todays/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=txwy/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ucrtbase/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=vmonitor/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhook/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=XYAZ/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Yahei/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=yituliu/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Yostar/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0020_0020_0020wp_002ELength_0020/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0020_003D_0020stri/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
1
MaaDeps
1
MaaDeps
Submodule MaaDeps deleted from 1297324ea7
184
README.md
184
README.md
@@ -1,12 +1,14 @@
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
<div align="center">
|
||||
|
||||
<img alt="LOGO" src="https://cdn.jsdelivr.net/gh/MaaAssistantArknights/design@main/logo/maa-logo_512x512.png" width="256" height="256" />
|
||||
<img alt="LOGO" src="./docs/.vuepress/public/images/maa-logo_512x512.png" width="256" height="256" />
|
||||
|
||||
# MaaAssistantArknights
|
||||
|
||||
<br>
|
||||
<div>
|
||||
<img alt="C++" src="https://img.shields.io/badge/c++-20-%2300599C?logo=cplusplus">
|
||||
<img alt="C++" src="https://img.shields.io/badge/C++-20-%2300599C?logo=cplusplus">
|
||||
</div>
|
||||
<div>
|
||||
<img alt="platform" src="https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-blueviolet">
|
||||
@@ -14,11 +16,16 @@
|
||||
<div>
|
||||
<img alt="license" src="https://img.shields.io/github/license/MaaAssistantArknights/MaaAssistantArknights">
|
||||
<img alt="commit" src="https://img.shields.io/github/commit-activity/m/MaaAssistantArknights/MaaAssistantArknights?color=%23ff69b4">
|
||||
</div>
|
||||
<div>
|
||||
<img alt="stars" src="https://img.shields.io/github/stars/MaaAssistantArknights/MaaAssistantArknights?style=social">
|
||||
<img alt="GitHub all releases" src="https://img.shields.io/github/downloads/MaaAssistantArknights/MaaAssistantArknights/total?style=social">
|
||||
</div>
|
||||
<br>
|
||||
|
||||
[简体中文](https://maa.plus/docs/) | [繁體中文](https://maa.plus/docs/zh-tw/) | [English](https://maa.plus/docs/en-us/) | [日本語](https://maa.plus/docs/ja-jp/) | [한국어](https://maa.plus/docs/ko-kr/)
|
||||
<!-- markdownlint-restore -->
|
||||
|
||||
[简体中文](https://maa.plus/docs/zh-cn/) | [繁體中文](https://maa.plus/docs/zh-tw/) | [English](https://maa.plus/docs/en-us/) | [日本語](https://maa.plus/docs/ja-jp/) | [한국어](https://maa.plus/docs/ko-kr/)
|
||||
|
||||
MAA 的意思是 MAA Assistant Arknights
|
||||
|
||||
@@ -26,57 +33,66 @@ MAA 的意思是 MAA Assistant Arknights
|
||||
|
||||
基于图像识别技术,一键完成全部日常任务!
|
||||
|
||||
绝赞更新中 ✿✿ヽ(°▽°)ノ✿<br>
|
||||
绝赞更新中 ✿✿ヽ(°▽°)ノ✿
|
||||
|
||||
</div>
|
||||
|
||||
## 下载与安装
|
||||
|
||||
请阅读 [文档](https://maa.plus/docs/zh-cn/manual/newbie.html) 后前往 [官网](https://maa.plus) 或 [Releases](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases) 下载,并参考 [新手上路](https://maa.plus/docs/zh-cn/manual/newbie.html) 进行安装。
|
||||
|
||||
## 亮点功能
|
||||
|
||||
- 刷理智,掉落识别及上传 [企鹅物流](https://penguin-stats.cn/)
|
||||
- 智能基建换班,自动计算干员效率,单设施内最优解;同时也支持 [自定义排班](https://maa.plus/docs/3.6-基建排班协议.html)
|
||||
- 自动公招,可选使用加急许可,一次全部刷完!公招数据上传 [企鹅物流](https://penguin-stats.cn/result/stage/recruit/recruit),[一图流](https://yituliu.site/maarecruitdata)
|
||||
- 访问好友、收取信用及购物、领取日常奖励等。一键全日常自动长草!
|
||||
- 肉鸽全自动刷源石锭和蜡烛,自动识别干员及练度
|
||||
- 选择作业 JSON 文件,自动抄作业! [视频演示](https://www.bilibili.com/video/BV1H841177Fk/)
|
||||
- 仓库识别并支持导出至 [企鹅物流刷图规划器](https://penguin-stats.cn/planner), [明日方舟工具箱](https://arkn.lolicon.app/#/material), [ARK-NIGHTS 干员培养表](https://ark-nights.com/settings)
|
||||
- 刷理智,掉落识别及上传 [企鹅物流](https://penguin-stats.cn/),[一图流](https://ark.yituliu.cn/)
|
||||
- 智能基建换班,自动计算干员效率,单设施内最优解;同时也支持 [自定义排班](https://maa.plus/docs/zh-cn/protocol/base-scheduling-schema.html)
|
||||
- 自动公招,可选使用加急许可,一次全部刷完!公招数据自动上传 [企鹅物流](https://penguin-stats.cn/result/stage/recruit/recruit),[一图流](https://ark.yituliu.cn/survey/maarecruitdata)
|
||||
- 支持手动识别公招界面,方便对高星公招做出选择 ~~(你的这个高资回费出的是推王呢还是推王呢)~~
|
||||
- 支持识别干员列表,统计已有和未有干员及潜能,并在公招识别显示
|
||||
- 支持识别养成材料,并导出至 [企鹅物流刷图规划](https://penguin-stats.cn/planner)、[明日方舟工具箱](https://arkntools.app/#/material)、[ARK-NIGHTS 干员培养表](https://ark-nights.com/settings)
|
||||
- 访问好友、收取信用及购物、领取日常奖励等,一键全日常自动长草
|
||||
- 肉鸽全自动刷源石锭和等级,自动烧水和凹直升,智能识别干员及练度
|
||||
- 选择作业 JSON 文件,自动抄作业, [视频演示](https://www.bilibili.com/video/BV1H841177Fk/)
|
||||
- 支持 C, Python, Java, Rust, Golang, Java HTTP, Rust HTTP 等多种接口,方便集成调用,自定义你的 MAA!
|
||||
|
||||
话不多说,看图!<br>
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||

|
||||

|
||||
<details><summary>话不多说,看图!</summary>
|
||||
|
||||
## 下载地址
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./docs/.vuepress/public/images/zh-cn/readme/1-dark.png">
|
||||
<img alt="zh1" src="./docs/.vuepress/public/images/zh-cn/readme/1-light.png">
|
||||
</picture>
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./docs/.vuepress/public/images/zh-cn/readme/2-dark.png">
|
||||
<img alt="zh2" src="./docs/.vuepress/public/images/zh-cn/readme/2-light.png">
|
||||
</picture>
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./docs/.vuepress/public/images/zh-cn/readme/3-dark.png">
|
||||
<img alt="zh3" src="./docs/.vuepress/public/images/zh-cn/readme/3-light.png">
|
||||
</picture>
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./docs/.vuepress/public/images/zh-cn/readme/4-dark.png">
|
||||
<img alt="zh4" src="./docs/.vuepress/public/images/zh-cn/readme/4-light.png">
|
||||
</picture>
|
||||
|
||||
- [稳定版/公测版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases)
|
||||
- [内测版](https://github.com/MaaAssistantArknights/MaaRelease/releases)
|
||||
</details>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 基本说明
|
||||
### 功能介绍
|
||||
|
||||
1. 请根据 [模拟器支持情况](https://maa.plus/docs/1.3-模拟器支持.html),进行对应的操作。
|
||||
2. 修改模拟器分辨率为 `16:9` 比例,最低 `1280 * 720`,更高不限。
|
||||
3. 开始使用吧!
|
||||
|
||||
更多使用说明请参考 [详细介绍](https://maa.plus/docs/1.1-详细介绍.html)
|
||||
|
||||
### 常见问题
|
||||
|
||||
- 软件一打开就闪退
|
||||
- 连接错误、不知道 adb 路径怎么填写
|
||||
- 连接成功了,但没反应
|
||||
- 如何连接自定义端口
|
||||
- 下载速度慢,且镜像站无法打开网页
|
||||
- 下载到一半提示“登陆”/“鉴权”
|
||||
- 连接正常,任务开始了,但是没反应
|
||||
|
||||
请参考 [常见问题](https://maa.plus/docs/1.2-常见问题.html)
|
||||
请参阅 [用户手册](https://maa.plus/docs/zh-cn/manual/)。
|
||||
|
||||
### 外服支持
|
||||
|
||||
目前国际服(美服)、日服、韩服、繁中服的绝大部分功能均已支持。但由于外服用户较少及项目人手不足,很多功能并没有进行全面的测试,所以请自行体验。
|
||||
若您遇到了 Bug,或对某个功能有强需求,欢迎在 [Issues](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues) 和 [讨论区](https://github.com/MaaAssistantArknights/MaaAssistantArknights/discussions) 催更;或加入我们一起建设 MAA!请参考 [外服适配教程](#外服适配)
|
||||
若您遇到了 Bug,或对某个功能有强需求,欢迎在 [Issues](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues) 和 [讨论区](https://github.com/MaaAssistantArknights/MaaAssistantArknights/discussions) 催更;或加入我们一起建设 MAA!请参阅 [外服适配教程](https://maa.plus/docs/zh-cn/develop/overseas-client-adaptation.html)
|
||||
|
||||
### CLI 支持
|
||||
|
||||
MAA 支持命令行界面(CLI)操作,支持 Linux,macOS 和 Windows,可用于自动化脚本或在无图形界面的服务器上使用。请参阅 [CLI 使用指南](https://maa.plus/docs/zh-cn/manual/cli/)
|
||||
|
||||
## 加入我们
|
||||
|
||||
@@ -84,64 +100,57 @@ MAA 的意思是 MAA Assistant Arknights
|
||||
|
||||
**目前项目组非常缺前端大佬,若您有相关经验,欢迎加入我们!**
|
||||
|
||||
- 全新 GUI:[MaaX](https://github.com/MaaAssistantArknights/MaaX) (正在开发中,欢迎加入!)
|
||||
- [作业站](https://prts.plus) 前端:[maa-copilot-frontend](https://github.com/MaaAssistantArknights/maa-copilot-frontend) (正在开发中,欢迎加入!)
|
||||
- 全新框架:[MaaFramework](https://github.com/MaaXYZ/MaaFramework)
|
||||
- [作业站](https://prts.plus) 前端:[maa-copilot-frontend](https://github.com/MaaAssistantArknights/maa-copilot-frontend)
|
||||
- [作业站](https://prts.plus) 后端:[MaaBackendCenter](https://github.com/MaaAssistantArknights/MaaBackendCenter)
|
||||
- [官网](https://maa.plus):[前端](https://github.com/MaaAssistantArknights/maa-website)
|
||||
- [官网](https://maa.plus):[前端](website)
|
||||
- 深度学习:[MaaAI](https://github.com/MaaAssistantArknights/MaaAI)
|
||||
|
||||
|
||||
### 多语言 (i18n)
|
||||
|
||||
MAA 支持多国语言,并使用 Weblate 进行本地化管理。如果您通晓多门语言,欢迎前往 [MAA Weblate](https://weblate.maa-org.net) 帮助我们进行翻译。
|
||||
|
||||
MAA 以中文(简体)为第一语言,翻译词条均以中文(简体)为准。
|
||||
|
||||
[](https://weblate.maa-org.net/engage/maa-assistant-arknights/zh_Hans/)
|
||||
[](https://weblate.maa-org.net/engage/maa/)
|
||||
|
||||
### Windows
|
||||
### 参与开发
|
||||
|
||||
1. 下载预构建的第三方库
|
||||
#### Windows
|
||||
|
||||
```cmd
|
||||
python maadeps-download.py
|
||||
```
|
||||
请参阅 [开始开发](https://maa.plus/docs/zh-cn/develop/development.html)。
|
||||
|
||||
2. 使用 Visual Studio 2022 打开 `MAA.sln`,右键 `MaaWpfGui`,设为启动项目
|
||||
3. VS 上方配置选择 `RelWithDebInfo` `x64` (如果编译 Release 包 或 ARM 平台,请忽略这步)
|
||||
4. 右键 `MaaWpfGui` - 属性 - 调试 - 启用本地调试(这样就能把断点挂到 C++ Core 那边了)
|
||||
5. (可选)若准备提交 PR,建议启用 [clang-format 支持](https://maa.plus/docs/2.2-开发相关.html#在-visual-studio-中启用-clang-format)
|
||||
#### Linux | macOS
|
||||
|
||||
### Linux | macOS
|
||||
请参阅 [Linux 编译教程](https://maa.plus/docs/zh-cn/develop/linux-tutorial.html)。
|
||||
|
||||
请参考 [Linux 编译教程](https://maa.plus/docs/2.1-Linux编译教程.html)
|
||||
|
||||
### API
|
||||
#### API
|
||||
|
||||
- [C 接口](include/AsstCaller.h):[集成示例](src/Cpp/main.cpp)
|
||||
- [Python 接口](src/Python/asst/asst.py):[集成示例](src/Python/sample.py)
|
||||
- [Golang 接口](src/Golang/):[集成示例](src/Golang/maa/maa.go)
|
||||
- [Dart 接口](src/Dart/)
|
||||
- [Golang 接口](src/Golang):[集成示例](src/Golang/maa/maa.go)
|
||||
- [Dart 接口](src/Dart)
|
||||
- [Java 接口](src/Java/src/main/java/com/iguigui/maaj/easySample/MaaCore.java):[集成示例](src/Java/src/main/java/com/iguigui/maaj/easySample/MaaJavaSample.java)
|
||||
- [Java HTTP 接口](src/Java/Readme.md)
|
||||
- [Rust 接口](src/Rust/src/maa_sys/):[HTTP 接口](src/Rust)
|
||||
- [TypeScript 接口](https://github.com/MaaAssistantArknights/MaaAsstElectronUI/tree/main/packages/main/coreLoader)
|
||||
- [集成文档](https://maa.plus/docs/3.1-集成文档.html)
|
||||
- [回调消息协议](https://maa.plus/docs/3.2-回调消息协议.html)
|
||||
- [任务流程协议](https://maa.plus/docs/3.4-任务流程协议.html)
|
||||
- [自动抄作业协议](https://maa.plus/docs/3.3-战斗流程协议.html)
|
||||
- [Rust 接口](src/Rust/src/maa_sys):[HTTP 接口](src/Rust)
|
||||
- [TypeScript 接口](https://github.com/MaaAssistantArknights/MaaX/tree/main/packages/main/coreLoader)
|
||||
- [Woolang 接口](src/Woolang/maa.wo):[集成示例](src/Woolang/demo.wo)
|
||||
- [集成文档](https://maa.plus/docs/zh-cn/protocol/integration.html)
|
||||
- [回调消息协议](https://maa.plus/docs/zh-cn/protocol/callback-schema.html)
|
||||
- [任务流程协议](https://maa.plus/docs/zh-cn/protocol/task-schema.html)
|
||||
- [自动抄作业协议](https://maa.plus/docs/zh-cn/protocol/copilot-schema.html)
|
||||
|
||||
### 外服适配
|
||||
#### 外服适配
|
||||
|
||||
请参考 [外服适配教程](https://maa.plus/docs/2.5-外服适配教程.html),对于国服已支持的功能,绝大部分的外服适配工作仅需要截图 + 简单的 JSON 修改即可。
|
||||
请参阅 [外服适配教程](https://maa.plus/docs/zh-cn/develop/overseas-client-adaptation.html),对于国服已支持的功能,绝大部分的外服适配工作仅需要截图 + 简单的 JSON 修改即可。
|
||||
|
||||
### 想参与开发,但不太会用 GitHub?
|
||||
#### 想参与开发,但不太会用 GitHub?
|
||||
|
||||
[GitHub Pull Request 流程简述](https://maa.plus/docs/2.2-开发相关.html#github-pull-request-流程简述)
|
||||
[GitHub Pull Request 流程简述](https://maa.plus/docs/zh-cn/develop/development.html#github-pull-request-流程简述)
|
||||
|
||||
### Issue bot
|
||||
#### Issue bot
|
||||
|
||||
请参考 [Issue bot 使用方法](https://maa.plus/docs/2.3-IssueBot使用方法.html)
|
||||
请参阅 [Issue Bot 使用方法](https://maa.plus/docs/zh-cn/develop/issue-bot-usage.html)
|
||||
|
||||
## 致谢
|
||||
|
||||
@@ -154,47 +163,52 @@ MAA 以中文(简体)为第一语言,翻译词条均以中文(简体)
|
||||
- 机器学习加速器:[onnxruntime](https://github.com/microsoft/onnxruntime)
|
||||
- ~~关卡掉落识别:[企鹅物流识别](https://github.com/penguin-statistics/recognizer)~~
|
||||
- 地图格子识别:[Arknights-Tile-Pos](https://github.com/yuanyan3060/Arknights-Tile-Pos)
|
||||
- C++ JSON库:[meojson](https://github.com/MistEO/meojson.git)
|
||||
- C++ JSON 库:[meojson](https://github.com/MistEO/meojson.git)
|
||||
- C++ 运算符解析器:[calculator](https://github.com/kimwalisch/calculator)
|
||||
- ~~C++ base64编解码:[cpp-base64](https://github.com/ReneNyffenegger/cpp-base64)~~
|
||||
- ~~C++ base64 编解码:[cpp-base64](https://github.com/ReneNyffenegger/cpp-base64)~~
|
||||
- C++ 解压压缩库:[zlib](https://github.com/madler/zlib)
|
||||
- C++ Gzip封装:[gzip-hpp](https://github.com/mapbox/gzip-hpp)
|
||||
- 安卓触控事件器:[minitouch](https://github.com/openstf/minitouch)
|
||||
- C++ Gzip 封装:[gzip-hpp](https://github.com/mapbox/gzip-hpp)
|
||||
- 安卓触控事件器:[Minitouch](https://github.com/DeviceFarmer/minitouch)
|
||||
- 安卓触控事件器:[MaaTouch](https://github.com/MaaAssistantArknights/MaaTouch)
|
||||
- WPF MVVM框架:[Stylet](https://github.com/canton7/Stylet)
|
||||
- WPF控件库:[HandyControl](https://github.com/HandyOrg/HandyControl) -> [HandyControls](https://github.com/ghost1372/HandyControls)
|
||||
- WPF MVVM 框架:[Stylet](https://github.com/canton7/Stylet)
|
||||
- WPF 控件库:[HandyControl](https://github.com/HandyOrg/HandyControl) -> [HandyControls](https://github.com/ghost1372/HandyControls)
|
||||
- C# 日志:[Serilog](https://github.com/serilog/serilog)
|
||||
- C# JSON库:[Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) & [System.Text.Json](https://github.com/dotnet/runtime)
|
||||
- C# JSON 库:[Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) & [System.Text.Json](https://github.com/dotnet/runtime)
|
||||
- ~~下载器:[aria2](https://github.com/aria2/aria2)~~
|
||||
|
||||
### 数据源
|
||||
|
||||
- ~~公开招募数据:[明日方舟工具箱](https://www.bigfun.cn/tools/aktools/hr)~~
|
||||
- ~~干员及基建数据:[PRTS明日方舟中文WIKI](http://prts.wiki/)~~
|
||||
- ~~干员及基建数据:[PRTS Wiki](http://prts.wiki/)~~
|
||||
- 关卡数据:[企鹅物流数据统计](https://penguin-stats.cn/)
|
||||
- 游戏数据及资源:[明日方舟客户端素材](https://github.com/yuanyan3060/ArknightsGameResource)
|
||||
- ~~游戏数据:[《明日方舟》游戏数据](https://github.com/Kengxxiao/ArknightsGameData)~~
|
||||
- 游戏数据:[《明日方舟》Yostar游戏数据](https://github.com/ArknightsAssets/ArknightsGamedata)
|
||||
|
||||
### 贡献/参与者
|
||||
|
||||
感谢所有参与到开发/测试中的朋友们,是大家的帮助让 MAA 越来越好! (\*´▽`)ノノ
|
||||
|
||||
[](https://github.com/MaaAssistantArknights/MaaAssistantArknights/graphs/contributors)
|
||||
|
||||
[](https://github.com/MaaAssistantArknights/MaaAssistantArknights/graphs/contributors)
|
||||
|
||||
## 声明
|
||||
|
||||
- 本软件使用 [GNU Affero General Public License v3.0 only](https://spdx.org/licenses/AGPL-3.0-only.html) 开源,并附带额外 [用户协议](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/terms-of-service.md)。
|
||||
- 本软件 logo 并非使用 AGPL 3.0 协议开源,[耗毛](https://weibo.com/u/3251357314)、vie 两位画师及软件全体开发者保留所有权利。不得以 AGPL 3.0 协议已授权为由在未经授权的情况下使用本软件 logo,不得在未经授权的情况下将本软件 logo 用于任何商业用途。
|
||||
- 本软件开源、免费,仅供学习交流使用。若您遇到商家使用本软件进行代练并收费,可能是设备与时间等费用,产生的问题及后果与本软件无关。
|
||||
|
||||
### DirectML 支持说明
|
||||
|
||||
本软件支持 GPU 加速功能,其在 Windows 平台上依赖于 Microsoft 提供的独立组件 [DirectML](https://learn.microsoft.com/en-us/windows/ai/directml/)。DirectML 并非本项目的开源部分,也不受 AGPL 3.0 的约束。为方便用户,我们随安装包附带了一个未经修改的 DirectML.dll 文件。如果您无需 GPU 加速功能,可安全删除该 DLL 文件,软件的核心功能仍可正常运行。
|
||||
|
||||
## 广告
|
||||
|
||||
用户交流 QQ 群:[MAA 使用 & 粥游交流 QQ 群](https://ota.maa.plus/MaaAssistantArknights/api/qqgroup/index.html)<br>
|
||||
用户交流 TG 群:[Telegram 群](https://t.me/+Mgc2Zngr-hs3ZjU1)<br>
|
||||
自动战斗 JSON 作业分享:[prts.plus](https://prts.plus) 或 [抄作业.com](http://抄作业.com)<br>
|
||||
Bilibili 直播间:[直播间](https://live.bilibili.com/2808861) 每晚直播敲代码,近期很长一段时间应该都是在写本软件~<br>
|
||||
用户交流 QQ 群:[MAA 使用 & 粥游交流 QQ 群](https://api.maa.plus/MaaAssistantArknights/api/qqgroup/index.html)
|
||||
Discord 服务器: [邀请链接](https://discord.gg/23DfZ9uA4V)
|
||||
用户交流 TG 群:[Telegram 群](https://t.me/+Mgc2Zngr-hs3ZjU1)
|
||||
自动战斗 JSON 作业分享:[prts.plus](https://prts.plus)
|
||||
Bilibili 直播间:[MrEO 直播间](https://live.bilibili.com/2808861) 直播敲代码 & [MAA-Official 直播间](https://live.bilibili.com/27548877) 游戏/杂谈
|
||||
|
||||
技术 & 吹水群(舟无关):[内卷地狱!(QQ 群)](https://jq.qq.com/?_wv=1027&k=ypbzXcA2)<br>
|
||||
开发者群:[QQ 群](https://jq.qq.com/?_wv=1027&k=JM9oCk3C)<br>
|
||||
技术群(舟无关、禁水):[内卷地狱!(QQ 群)](https://jq.qq.com/?_wv=1027&k=ypbzXcA2)
|
||||
开发者群:[QQ 群](https://jq.qq.com/?_wv=1027&k=JM9oCk3C)
|
||||
|
||||
如果觉得软件对你有帮助,帮忙点个 Star 吧!~(网页最上方右上角的小星星),这就是对我们最大的支持了!
|
||||
|
||||
21
SECURITY.md
Normal file
21
SECURITY.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# 安全策略 / Security Policy
|
||||
|
||||
## 受支持的版本 / Supported Versions
|
||||
|
||||
我们仅对 v4 和 v5 两个大版本的最新稳定版提供安全支持,如有安全问题,我们将会尽可能快地发布新的稳定版解决。
|
||||
|
||||
内测版、公测版仅供测试,我们不会对其提供安全支持。
|
||||
|
||||
We only provide security support for the latest Stable Release versions of v4 and v5. If there are security issues, we will release a new stable version as soon as possible to solve them.
|
||||
|
||||
The Nightly Release version and the Beta Release version are for testing only, and we will not provide security support for them.
|
||||
|
||||
## 如何报告漏洞 / Reporting a Vulnerability
|
||||
|
||||
如果该漏洞可以公开发表,请通过 [issue](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/new?assignees=&labels=bug&projects=&template=cn-bug-report.yaml) 发布。
|
||||
|
||||
如果该漏洞**不可以**公开发表(例如远程控制功能等可能被用于入侵用户的),请通过[秘密途径](https://github.com/MaaAssistantArknights/MaaAssistantArknights/security/advisories/new)报告。
|
||||
|
||||
If the vulnerability can be published publicly, please [publish it through an issue](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/new?assignees=&labels=bug&projects=&template=cn-bug-report.yaml).
|
||||
|
||||
If the vulnerability **cannot be published publicly** (for example, the vulnerability that can be used to invade the user's devices), please [report it privately](https://github.com/MaaAssistantArknights/MaaAssistantArknights/security/advisories/new).
|
||||
@@ -1,22 +0,0 @@
|
||||
# TODO: replace with cmake-generated interface file
|
||||
|
||||
find_path(FastDeploy_INCLUDE_DIR NAMES fastdeploy/fastdeploy_model.h)
|
||||
|
||||
find_library(FastDeploy_LIBRARY NAMES fastdeploy)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(
|
||||
FastDeploy
|
||||
REQUIRED_VARS FastDeploy_LIBRARY FastDeploy_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(FastDeploy_FOUND)
|
||||
set(FastDeploy_INCLUDE_DIRS ${FastDeploy_INCLUDE_DIR})
|
||||
if(NOT TARGET FastDeploy::FastDeploy)
|
||||
add_library(FastDeploy::FastDeploy UNKNOWN IMPORTED)
|
||||
set_target_properties(FastDeploy::FastDeploy PROPERTIES
|
||||
IMPORTED_LOCATION "${FastDeploy_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${FastDeploy_INCLUDE_DIR}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,20 +0,0 @@
|
||||
find_path(ONNXRuntime_INCLUDE_DIR NAMES onnxruntime/core/session/onnxruntime_c_api.h)
|
||||
|
||||
find_library(ONNXRuntime_LIBRARY NAMES onnxruntime)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(
|
||||
ONNXRuntime
|
||||
REQUIRED_VARS ONNXRuntime_LIBRARY ONNXRuntime_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(ONNXRuntime_FOUND)
|
||||
set(ONNXRuntime_INCLUDE_DIRS ${ONNXRuntime_INCLUDE_DIR})
|
||||
if(NOT TARGET ONNXRuntime::ONNXRuntime)
|
||||
add_library(ONNXRuntime::ONNXRuntime UNKNOWN IMPORTED)
|
||||
set_target_properties(ONNXRuntime::ONNXRuntime PROPERTIES
|
||||
IMPORTED_LOCATION "${ONNXRuntime_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${ONNXRuntime_INCLUDE_DIR}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,50 +0,0 @@
|
||||
|
||||
|
||||
set(FASTDEPLOY_URL_PREFIX "https://github.com/MaaAssistantArknights/build-fastdeploy/releases/download")
|
||||
|
||||
set(FASTDEPLOY_TAG "gac255b8a")
|
||||
|
||||
set(COMPRESSED_SUFFIX ".tar.gz")
|
||||
|
||||
if(WIN32)
|
||||
set(FASTDEPLOY_FILENAME "FastDeploy-Windows")
|
||||
set(FASTDEPLOY_CHECKSUM "0a0700d4e8923bcd4c387a658e5e9a689ed9e0d114c260b11d082a2176c233d4")
|
||||
elseif(APPLE)
|
||||
if (CURRENT_OSX_ARCH STREQUAL "arm64")
|
||||
set(FASTDEPLOY_FILENAME "FastDeploy-macOS-arm64")
|
||||
set(FASTDEPLOY_CHECKSUM "28a771814d197ba8056f1fcb7cc0671facec90a8733a0dac2cf0b68a8cc36d24")
|
||||
else()
|
||||
set(FASTDEPLOY_FILENAME "FastDeploy-macOS-x86_64")
|
||||
set(FASTDEPLOY_CHECKSUM "76e97c7e944a18eb160646fa32ac0a7e24c87751b2b127dc33454f993f6d4b97")
|
||||
endif()
|
||||
else()
|
||||
set(FASTDEPLOY_FILENAME "FastDeploy-Linux")
|
||||
set(FASTDEPLOY_CHECKSUM "4d106e5499e9b5b29426667617215ac7e4e70d2353af10caccdfdf6c1f1534a7")
|
||||
endif(WIN32)
|
||||
|
||||
set(FASTDEPLOY_URL ${FASTDEPLOY_URL_PREFIX}/${FASTDEPLOY_TAG}/${FASTDEPLOY_FILENAME}${COMPRESSED_SUFFIX})
|
||||
|
||||
if (FASTDEPLOY_DIRECTORY)
|
||||
set(FastDeploy_DIR ${FASTDEPLOY_DIRECTORY})
|
||||
find_package(FastDeploy REQUIRED PATHS ${FastDeploy_DIR})
|
||||
include_directories(${FastDeploy_INCLUDE_DIRS})
|
||||
list(APPEND DEPEND_LIBS ${FastDeploy_LIBS})
|
||||
else ()
|
||||
download_and_decompress(${FASTDEPLOY_URL}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${FASTDEPLOY_FILENAME}${COMPRESSED_SUFFIX}
|
||||
${FASTDEPLOY_CHECKSUM}
|
||||
${THIRD_PARTY_PATH}/install/)
|
||||
set(FASTDEPLOY_FILENAME fastdeploy)
|
||||
set(FastDeploy_DIR ${THIRD_PARTY_PATH}/install/${FASTDEPLOY_FILENAME})
|
||||
|
||||
find_package(FastDeploy REQUIRED PATHS ${FastDeploy_DIR} NO_DEFAULT_PATH)
|
||||
include_directories(${FastDeploy_INCLUDE_DIRS})
|
||||
list(APPEND DEPEND_LIBS ${FastDeploy_LIBS})
|
||||
endif (FASTDEPLOY_DIRECTORY)
|
||||
|
||||
if (INSTALL_THIRD_LIBS)
|
||||
install(DIRECTORY ${FastDeploy_DIR}/lib/ DESTINATION . USE_SOURCE_PERMISSIONS)
|
||||
install(DIRECTORY ${ORT_LIB_PATH}/ DESTINATION . USE_SOURCE_PERMISSIONS)
|
||||
install(DIRECTORY ${FastDeploy_DIR}/third_libs/install/paddle2onnx/lib/
|
||||
DESTINATION . USE_SOURCE_PERMISSIONS)
|
||||
endif (INSTALL_THIRD_LIBS)
|
||||
@@ -7,21 +7,21 @@ if (BUILD_XCFRAMEWORK)
|
||||
|
||||
add_custom_command(OUTPUT OpenCV.xcframework
|
||||
COMMAND rm -rf OpenCV.xcframework
|
||||
COMMAND xcodebuild -create-xcframework -library "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/libopencv_world4.407.dylib" -output OpenCV.xcframework
|
||||
COMMAND xcodebuild -create-xcframework -library "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/libopencv_world4.408.dylib" -output OpenCV.xcframework
|
||||
)
|
||||
|
||||
add_custom_command(OUTPUT ONNXRuntime.xcframework
|
||||
COMMAND rm -rf ONNXRuntime.xcframework
|
||||
COMMAND xcodebuild -create-xcframework -library "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/libonnxruntime.1.14.1.dylib" -output ONNXRuntime.xcframework
|
||||
COMMAND xcodebuild -create-xcframework -library "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/libonnxruntime.1.18.0.dylib" -output ONNXRuntime.xcframework
|
||||
)
|
||||
|
||||
add_custom_command(OUTPUT MaaDerpLearning.xcframework
|
||||
COMMAND rm -rf MaaDerpLearning.xcframework
|
||||
COMMAND xcodebuild -create-xcframework -library "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/libMaaDerpLearning.dylib" -output MaaDerpLearning.xcframework
|
||||
add_custom_command(OUTPUT fastdeploy_ppocr.xcframework
|
||||
COMMAND rm -rf fastdeploy_ppocr.xcframework
|
||||
COMMAND xcodebuild -create-xcframework -library "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/libfastdeploy_ppocr.dylib" -output fastdeploy_ppocr.xcframework
|
||||
)
|
||||
|
||||
add_custom_target(MaaXCFramework ALL
|
||||
DEPENDS MaaCore MaaCore.xcframework OpenCV.xcframework ONNXRuntime.xcframework MaaDerpLearning.xcframework
|
||||
DEPENDS MaaCore MaaCore.xcframework OpenCV.xcframework ONNXRuntime.xcframework fastdeploy_ppocr.xcframework
|
||||
)
|
||||
endif (BUILD_XCFRAMEWORK)
|
||||
|
||||
|
||||
44
cmake/thrift-gen.cmake
Normal file
44
cmake/thrift-gen.cmake
Normal file
@@ -0,0 +1,44 @@
|
||||
macro(GENERATE_THRIFT_LIB LIB_NAME FILENAME OUTPUTDIR SOURCES)
|
||||
file(MAKE_DIRECTORY ${OUTPUTDIR})
|
||||
detect_host_triplet(HOST_TRIPLET)
|
||||
if (CMAKE_CROSSCOMPILING)
|
||||
if (CMAKE_HOST_WIN32)
|
||||
set(_host_executable_suffix ".exe")
|
||||
else()
|
||||
set(_host_executable_suffix "")
|
||||
endif()
|
||||
else()
|
||||
set(_host_executable_suffix ${CMAKE_EXECUTABLE_SUFFIX})
|
||||
endif()
|
||||
if(EXISTS ${PROJECT_SOURCE_DIR}/MaaDeps/vcpkg/installed/maa-${HOST_TRIPLET}/tools/thrift/thrift${_host_executable_suffix})
|
||||
set(THRIFT_COMPILER ${PROJECT_SOURCE_DIR}/MaaDeps/vcpkg/installed/maa-${HOST_TRIPLET}/tools/thrift/thrift${_host_executable_suffix})
|
||||
else()
|
||||
find_program(THRIFT_COMPILER thrift)
|
||||
endif()
|
||||
if(NOT THRIFT_COMPILER)
|
||||
message(FATAL_ERROR "Thrift compiler not found")
|
||||
endif()
|
||||
get_filename_component(THRIFT_IDL_NAME ${FILENAME} NAME_WE)
|
||||
set(THRIFT_IDL_TARGET "${LIB_NAME}_${THRIFT_IDL_NAME}_idl")
|
||||
set("${THRIFT_IDL_NAME}-gen-cpp"
|
||||
${OUTPUTDIR}/${THRIFT_IDL_NAME}.cpp
|
||||
${OUTPUTDIR}/${THRIFT_IDL_NAME}.h
|
||||
${OUTPUTDIR}/${THRIFT_IDL_NAME}_types.cpp
|
||||
${OUTPUTDIR}/${THRIFT_IDL_NAME}_types.h)
|
||||
|
||||
add_custom_command(OUTPUT ${${THRIFT_IDL_NAME}-gen-cpp}
|
||||
DEPENDS ${FILENAME}
|
||||
COMMAND ${THRIFT_COMPILER} --gen cpp:no_skeleton -out ${OUTPUTDIR} ${FILENAME}
|
||||
VERBATIM)
|
||||
add_custom_target(${THRIFT_IDL_TARGET} DEPENDS ${${THRIFT_IDL_NAME}-gen-cpp})
|
||||
add_library(${LIB_NAME} STATIC ${${THRIFT_IDL_NAME}-gen-cpp})
|
||||
add_dependencies(${LIB_NAME} ${THRIFT_IDL_TARGET})
|
||||
set_target_properties(${LIB_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
target_link_libraries(${LIB_NAME} PUBLIC thrift::thrift)
|
||||
target_include_directories(${LIB_NAME} PUBLIC ${OUTPUTDIR})
|
||||
set(${SOURCES} ${${SOURCES}} ${GENERATED_SOURCES} PARENT_SCOPE)
|
||||
endmacro(GENERATE_THRIFT_LIB)
|
||||
|
||||
if (WITH_THRIFT)
|
||||
add_compile_definitions(WITH_THRIFT)
|
||||
endif (WITH_THRIFT)
|
||||
@@ -24,6 +24,26 @@ function(get_osx_architecture)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(detect_host_triplet outvar)
|
||||
string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" host_triplet_system)
|
||||
string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" host_triplet_arch)
|
||||
if(host_triplet_system STREQUAL "darwin")
|
||||
set(host_triplet_system "osx")
|
||||
endif()
|
||||
message("host_triplet_system: ${host_triplet_system}")
|
||||
message("host_triplet_arch: ${host_triplet_arch}")
|
||||
if(host_triplet_arch MATCHES "(amd64|x86_64)")
|
||||
set(host_triplet_arch "x64")
|
||||
elseif(host_triplet_arch MATCHES "i[3456]86")
|
||||
set(host_triplet_arch "x86")
|
||||
elseif(host_triplet_arch MATCHES "(aarch64|armv8l|arm64)")
|
||||
set(host_triplet_arch "arm64")
|
||||
else()
|
||||
message(FATAL_ERROR "Unrecognized CMAKE_HOST_SYSTEM_PROCESSOR: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
set(${outvar} "${host_triplet_arch}-${host_triplet_system}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if (APPLE)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0)
|
||||
get_osx_architecture()
|
||||
|
||||
1
docs/.gitignore
vendored
1
docs/.gitignore
vendored
@@ -6,6 +6,7 @@
|
||||
# Generated files
|
||||
/.vuepress/.cache/
|
||||
/.vuepress/.temp/
|
||||
/.vuepress/dist/
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
|
||||
@@ -223,6 +223,4 @@ MD052: true
|
||||
# MD053/link-image-reference-definitions - Link and image reference definitions should be needed
|
||||
MD053:
|
||||
# Ignored definitions
|
||||
ignored_definitions: [
|
||||
"//"
|
||||
]
|
||||
ignored_definitions: ["//"]
|
||||
|
||||
12
docs/.vuepress/client.ts
Normal file
12
docs/.vuepress/client.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { defineClientConfig } from "vuepress/client";
|
||||
import Image1 from "../components/Image1.vue";
|
||||
import Image2 from "../components/Image2.vue";
|
||||
import Image4 from "../components/Image4.vue";
|
||||
|
||||
export default defineClientConfig({
|
||||
enhance: ({ app }) => {
|
||||
app.component("Image1", Image1);
|
||||
app.component("Image2", Image2);
|
||||
app.component("Image4", Image4);
|
||||
},
|
||||
});
|
||||
52
docs/.vuepress/components/LanguageDropdown.ts
Normal file
52
docs/.vuepress/components/LanguageDropdown.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import type { VNode } from "vue";
|
||||
import { defineComponent, h } from "vue";
|
||||
|
||||
import NavbarDropdown from "@theme-hope/modules/navbar/components/NavbarDropdown";
|
||||
import { I18nIcon } from "@theme-hope/modules/navbar/components/icons/index";
|
||||
import { useNavbarLanguageDropdown } from "@theme-hope/modules/navbar/composables/index";
|
||||
|
||||
export default defineComponent({
|
||||
name: "LanguageDropdown",
|
||||
|
||||
setup() {
|
||||
const dropdown = useNavbarLanguageDropdown();
|
||||
|
||||
const filteredDropdown = () => {
|
||||
if (!dropdown.value) return null;
|
||||
|
||||
const filteredConfig = { ...dropdown.value };
|
||||
|
||||
if (filteredConfig.children) {
|
||||
filteredConfig.children = filteredConfig.children.filter(item => item.link !== '/');
|
||||
}
|
||||
|
||||
return filteredConfig;
|
||||
};
|
||||
|
||||
//console.log("OldLanguageDropdown", dropdown.value);
|
||||
//console.log("NewLanguageDropdown", filteredDropdown());
|
||||
|
||||
return (): VNode | null =>
|
||||
dropdown.value
|
||||
? h(
|
||||
"div",
|
||||
{ class: "vp-nav-item" },
|
||||
h(
|
||||
NavbarDropdown,
|
||||
{ config: filteredDropdown() },
|
||||
{
|
||||
title: () =>
|
||||
h(I18nIcon, {
|
||||
"aria-label": filteredDropdown()?.ariaLabel,
|
||||
style: {
|
||||
width: "1rem",
|
||||
height: "1rem",
|
||||
verticalAlign: "middle",
|
||||
},
|
||||
}),
|
||||
},
|
||||
),
|
||||
)
|
||||
: null;
|
||||
},
|
||||
});
|
||||
@@ -1,42 +1,98 @@
|
||||
import { defineUserConfig } from 'vuepress';
|
||||
import Theme from './theme.config';
|
||||
import SearchPlugin from './plugins/search';
|
||||
import { defineUserConfig } from "vuepress";
|
||||
import { getDirname, path } from "vuepress/utils";
|
||||
import { viteBundler } from "@vuepress/bundler-vite";
|
||||
import { googleAnalyticsPlugin } from "@vuepress/plugin-google-analytics";
|
||||
import Theme from "./theme";
|
||||
|
||||
const __dirname = getDirname(import.meta.url);
|
||||
|
||||
export default defineUserConfig({
|
||||
base: '/docs/',
|
||||
base: "/docs/",
|
||||
lang: "zh-CN",
|
||||
title: "MaaAssistantArknights",
|
||||
description: "MAA",
|
||||
theme: Theme,
|
||||
port: 3001,
|
||||
|
||||
locales: {
|
||||
'/': {
|
||||
lang: 'zh-CN',
|
||||
description: '开发者文档',
|
||||
"/": {
|
||||
lang: " ",
|
||||
title: " ",
|
||||
description: " ",
|
||||
},
|
||||
'/zh-tw/': {
|
||||
lang: 'zh-TW',
|
||||
description: '開發者文檔',
|
||||
"/zh-cn/": {
|
||||
lang: "zh-cn",
|
||||
description: "文档",
|
||||
},
|
||||
'/en-us/': {
|
||||
lang: 'en-US',
|
||||
title: 'Documents'
|
||||
"/zh-tw/": {
|
||||
lang: "zh-tw",
|
||||
description: "文件",
|
||||
},
|
||||
'/ja-jp/': {
|
||||
lang: 'ja-JP',
|
||||
description: 'ドキュメント'
|
||||
"/en-us/": {
|
||||
lang: "en-us",
|
||||
description: "Documentation",
|
||||
},
|
||||
"/ja-jp/": {
|
||||
lang: "ja-jp",
|
||||
description: "ドキュメンテーション",
|
||||
},
|
||||
"/ko-kr/": {
|
||||
lang: "ko-kr",
|
||||
description: "선적 서류 비치",
|
||||
},
|
||||
'/ko-kr/': {
|
||||
lang: 'ko-KR',
|
||||
description: '문서'
|
||||
}
|
||||
},
|
||||
|
||||
markdown: {
|
||||
headers: {
|
||||
level: [2, 3, 4, 5],
|
||||
},
|
||||
},
|
||||
plugins: [SearchPlugin()],
|
||||
temp: '.vuepress/.temp',
|
||||
cache: '.vuepress/.cache'
|
||||
|
||||
theme: Theme,
|
||||
|
||||
alias: {
|
||||
"@theme-hope/modules/navbar/components/LanguageDropdown": path.resolve(
|
||||
__dirname,
|
||||
"./components/LanguageDropdown.ts",
|
||||
),
|
||||
},
|
||||
|
||||
plugins: [
|
||||
googleAnalyticsPlugin({
|
||||
id: "G-FJQDKG394Z",
|
||||
}),
|
||||
],
|
||||
|
||||
head: [
|
||||
["link", { rel: "preconnect", href: "https://fonts.googleapis.com" }],
|
||||
[
|
||||
"link",
|
||||
{ rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "" },
|
||||
],
|
||||
[
|
||||
"link",
|
||||
{
|
||||
href: "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100..900&display=swap",
|
||||
rel: "stylesheet",
|
||||
},
|
||||
],
|
||||
[
|
||||
"link",
|
||||
{
|
||||
href: "https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@200..900&display=swap",
|
||||
rel: "stylesheet",
|
||||
},
|
||||
],
|
||||
[
|
||||
"link",
|
||||
{
|
||||
href: "https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap",
|
||||
rel: "stylesheet",
|
||||
},
|
||||
],
|
||||
],
|
||||
|
||||
bundler: viteBundler({
|
||||
viteOptions: {},
|
||||
vuePluginOptions: {},
|
||||
}),
|
||||
});
|
||||
|
||||
29
docs/.vuepress/navbar/en-us.ts
Normal file
29
docs/.vuepress/navbar/en-us.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { navbar } from "vuepress-theme-hope";
|
||||
|
||||
export const enusNavbar = navbar([
|
||||
{
|
||||
text: "Home",
|
||||
icon: "ic:round-home",
|
||||
link: "/en-us/",
|
||||
},
|
||||
{
|
||||
text: "User Manual",
|
||||
icon: "mdi:user",
|
||||
link: "/en-us/manual/",
|
||||
},
|
||||
{
|
||||
text: "Development Docs",
|
||||
icon: "ph:code-bold",
|
||||
link: "/en-us/develop/",
|
||||
},
|
||||
{
|
||||
text: "Protocol Docs",
|
||||
icon: "basil:document-solid",
|
||||
link: "/en-us/protocol/",
|
||||
},
|
||||
{
|
||||
text: "MAA Website",
|
||||
icon: "mdi:cow",
|
||||
link: "https://maa.plus",
|
||||
},
|
||||
]);
|
||||
5
docs/.vuepress/navbar/index.ts
Normal file
5
docs/.vuepress/navbar/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export * from "./zh-cn";
|
||||
export * from "./zh-tw";
|
||||
export * from "./en-us";
|
||||
export * from "./ja-jp";
|
||||
export * from "./ko-kr";
|
||||
29
docs/.vuepress/navbar/ja-jp.ts
Normal file
29
docs/.vuepress/navbar/ja-jp.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { navbar } from "vuepress-theme-hope";
|
||||
|
||||
export const jajpNavbar = navbar([
|
||||
{
|
||||
text: "ホームページ",
|
||||
icon: "ic:round-home",
|
||||
link: "/ja-jp/",
|
||||
},
|
||||
{
|
||||
text: "使用説明",
|
||||
icon: "mdi:user",
|
||||
link: "/ja-jp/manual/",
|
||||
},
|
||||
{
|
||||
text: "開発関連",
|
||||
icon: "ph:code-bold",
|
||||
link: "/ja-jp/develop/",
|
||||
},
|
||||
{
|
||||
text: "プロトコルドキュメント",
|
||||
icon: "basil:document-solid",
|
||||
link: "/ja-jp/protocol/",
|
||||
},
|
||||
{
|
||||
text: "MAA 公式サイト",
|
||||
icon: "mdi:cow",
|
||||
link: "https://maa.plus",
|
||||
},
|
||||
]);
|
||||
29
docs/.vuepress/navbar/ko-kr.ts
Normal file
29
docs/.vuepress/navbar/ko-kr.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { navbar } from "vuepress-theme-hope";
|
||||
|
||||
export const kokrNavbar = navbar([
|
||||
{
|
||||
text: "홈페이지",
|
||||
icon: "ic:round-home",
|
||||
link: "/ko-kr/",
|
||||
},
|
||||
{
|
||||
text: "사용자 설명서",
|
||||
icon: "mdi:user",
|
||||
link: "/ko-kr/manual/",
|
||||
},
|
||||
{
|
||||
text: "개발 문서",
|
||||
icon: "ph:code-bold",
|
||||
link: "/ko-kr/develop/",
|
||||
},
|
||||
{
|
||||
text: "프로토콜 문서",
|
||||
icon: "basil:document-solid",
|
||||
link: "/ko-kr/protocol/",
|
||||
},
|
||||
{
|
||||
text: "MAA 공식 홈페이지",
|
||||
icon: "mdi:cow",
|
||||
link: "https://maa.plus",
|
||||
},
|
||||
]);
|
||||
29
docs/.vuepress/navbar/zh-cn.ts
Normal file
29
docs/.vuepress/navbar/zh-cn.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { navbar } from "vuepress-theme-hope";
|
||||
|
||||
export const zhcnNavbar = navbar([
|
||||
{
|
||||
text: "主页",
|
||||
icon: "ic:round-home",
|
||||
link: "/zh-cn/",
|
||||
},
|
||||
{
|
||||
text: "用户手册",
|
||||
icon: "mdi:user",
|
||||
link: "/zh-cn/manual/",
|
||||
},
|
||||
{
|
||||
text: "开发文档",
|
||||
icon: "ph:code-bold",
|
||||
link: "/zh-cn/develop/",
|
||||
},
|
||||
{
|
||||
text: "协议文档",
|
||||
icon: "basil:document-solid",
|
||||
link: "/zh-cn/protocol/",
|
||||
},
|
||||
{
|
||||
text: "MAA 官网",
|
||||
icon: "mdi:cow",
|
||||
link: "https://maa.plus",
|
||||
},
|
||||
]);
|
||||
29
docs/.vuepress/navbar/zh-tw.ts
Normal file
29
docs/.vuepress/navbar/zh-tw.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { navbar } from "vuepress-theme-hope";
|
||||
|
||||
export const zhtwNavbar = navbar([
|
||||
{
|
||||
text: "首頁",
|
||||
icon: "ic:round-home",
|
||||
link: "/zh-tw/",
|
||||
},
|
||||
{
|
||||
text: "用戶說明書",
|
||||
icon: "mdi:user",
|
||||
link: "/zh-tw/manual/",
|
||||
},
|
||||
{
|
||||
text: "開發文件",
|
||||
icon: "ph:code-bold",
|
||||
link: "/zh-tw/develop/",
|
||||
},
|
||||
{
|
||||
text: "協議文件",
|
||||
icon: "basil:document-solid",
|
||||
link: "/zh-tw/protocol/",
|
||||
},
|
||||
{
|
||||
text: "MAA 官網",
|
||||
icon: "mdi:cow",
|
||||
link: "https://maa.plus",
|
||||
},
|
||||
]);
|
||||
@@ -1,21 +1,88 @@
|
||||
import { searchPlugin } from "@vuepress/plugin-search";
|
||||
|
||||
export default function SearchPlugin() {
|
||||
return searchPlugin({
|
||||
export default {
|
||||
appId: "99JM20SIFG",
|
||||
apiKey: "7596a5a8c95cd64d4cf3050c9a4f878e",
|
||||
indexName: "maa",
|
||||
// 这里应该把所有本地化配置都放入 locales 中
|
||||
locales: {
|
||||
'/': {
|
||||
placeholder: '搜索',
|
||||
},
|
||||
'/zh-tw/': {
|
||||
placeholder: '搜索',
|
||||
},
|
||||
'/en-us/': {
|
||||
placeholder: 'Search',
|
||||
},
|
||||
'/ja-jp/': {
|
||||
placeholder: '検索する'
|
||||
}
|
||||
"/zh-cn/": {
|
||||
placeholder: "搜索",
|
||||
translations: {
|
||||
button: {
|
||||
buttonText: "搜索",
|
||||
},
|
||||
modal: {
|
||||
searchBox: {
|
||||
resetButtonTitle: "清除查询条件",
|
||||
cancelButtonText: "取消",
|
||||
},
|
||||
startScreen: {
|
||||
recentSearchesTitle: "搜索历史",
|
||||
noRecentSearchesText: "没有搜索历史",
|
||||
saveRecentSearchButtonTitle: "保存至搜索历史",
|
||||
removeRecentSearchButtonTitle: "从搜索历史中移除",
|
||||
favoriteSearchesTitle: "收藏",
|
||||
removeFavoriteSearchButtonTitle: "从收藏中移除",
|
||||
},
|
||||
errorScreen: {
|
||||
titleText: "无法获取结果",
|
||||
helpText: "你可能需要检查你的网络连接",
|
||||
},
|
||||
footer: {
|
||||
selectText: "选择",
|
||||
navigateText: "切换",
|
||||
closeText: "关闭",
|
||||
searchByText: "搜索提供者",
|
||||
},
|
||||
noResultsScreen: {
|
||||
noResultsText: "无法找到相关结果",
|
||||
suggestedQueryText: "你可以尝试查询",
|
||||
reportMissingResultsText: "你认为该查询应该有结果?",
|
||||
reportMissingResultsLinkText: "点击反馈",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"/en-us/": {
|
||||
placeholder: "Search",
|
||||
translations: {
|
||||
button: {
|
||||
buttonText: "Search",
|
||||
},
|
||||
modal: {
|
||||
searchBox: {
|
||||
resetButtonTitle: "Clear the query",
|
||||
cancelButtonText: "Cancel",
|
||||
},
|
||||
startScreen: {
|
||||
recentSearchesTitle: "Recent",
|
||||
noRecentSearchesText: "No recent searches",
|
||||
saveRecentSearchButtonTitle: "Save this search",
|
||||
removeRecentSearchButtonTitle:
|
||||
"Remove this search from history",
|
||||
favoriteSearchesTitle: "Favorite",
|
||||
removeFavoriteSearchButtonTitle:
|
||||
"Remove this search from favorites",
|
||||
},
|
||||
errorScreen: {
|
||||
titleText: "Unable to fetch results",
|
||||
helpText:
|
||||
"You might want to check your network connection.",
|
||||
},
|
||||
footer: {
|
||||
selectText: "to select",
|
||||
navigateText: "to navigate",
|
||||
closeText: "to close",
|
||||
searchByText: "Search by",
|
||||
},
|
||||
noResultsScreen: {
|
||||
noResultsText: "No results for",
|
||||
suggestedQueryText: "Try searching for",
|
||||
reportMissingResultsText:
|
||||
"Believe this query should return results?",
|
||||
reportMissingResultsLinkText: "Let us know.",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
hotKeys: ['k']
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
101
docs/.vuepress/public/files/MAA_Runtime_Fix_Pwsh.ps1
Normal file
101
docs/.vuepress/public/files/MAA_Runtime_Fix_Pwsh.ps1
Normal file
@@ -0,0 +1,101 @@
|
||||
# This file MUST use GBK encoding, whatever the system language is.
|
||||
# You may do more testing, but at least it works like this for me.
|
||||
# Fuck Microsoft.
|
||||
# 修改请使用 GBK 编码保存。
|
||||
# 如果能用 UTF-8 保存而不乱码,那就去做,我实在是研究不明白微软的屎了。
|
||||
# 你或许想加一条 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 来解决问题。
|
||||
# 但很神奇的,这根本不管用,甚至还会让中文汉字渲染重叠在一起。
|
||||
# 我在 CMD 里面都能 chcp 65001 换成 UTF-8。
|
||||
# 微软什么时候能把 PowerShell 7 集成到系统里。
|
||||
# 我由衷的认为 Windows 中预装的 PowerShell 就是一坨屎,甚至不如 CMD。
|
||||
# 用 PowerShell 写这东西真成为了一盘醋包的饺子了。
|
||||
|
||||
# 检查 PowerShell 脚本运行策略
|
||||
# 我真理解不了这个运行策略的存在意义了,明明叫脚本运行策略,却可以用脚本修改。
|
||||
# 我既可以在不提权的情况下允许所有脚本运行,也可以直接启动一个运行所有脚本运行的会话。
|
||||
# 本脚本在测试时发现,在不修改策略且不提权的情况下也可以正常运行,只是在安装运行库时需要点安装程序的 UAC 弹窗。
|
||||
# 而不修改策略且提权时反而因为脚本策略运行不了了,这是什么品种的管理员权限。
|
||||
# $ExecutionPolicy = Get-ExecutionPolicy
|
||||
# if ($ExecutionPolicy -eq 'Restricted' -or $ExecutionPolicy -eq 'AllSigned') {
|
||||
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
# Write-Host "已修改当前用户的 PowerShell 脚本运行策略为 RemoteSigned 以便运行此脚本。"
|
||||
# Write-Host "这只需运行一次,且理应不会产生较大的安全风险。"
|
||||
# Write-Host "如果您对此有疑虑,请在脚本运行结束后,在 PowerShell 中运行以下命令将策略值清空。"
|
||||
# Write-Host "Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser"
|
||||
# Pause
|
||||
# }
|
||||
|
||||
# 获取 UAC 权限并启动一个 RemoteSigned 脚本策略会话
|
||||
If (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
|
||||
Write-Host "正在获取管理员权限..."
|
||||
Start-Process powershell.exe "-ExecutionPolicy RemoteSigned -File `"$PSCommandPath`" -ArgumentList `"$PSCommandPath`"" -Verb RunAs
|
||||
Exit
|
||||
}
|
||||
|
||||
# 读取系统代理并应用
|
||||
$Internet_Settings = Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'
|
||||
if ($Internet_Settings.ProxyEnable -eq 1) {
|
||||
$env:HTTP_PROXY = "http://$($Internet_Settings.ProxyServer)"
|
||||
$env:HTTPS_PROXY = "http://$($Internet_Settings.ProxyServer)"
|
||||
Write-Host "已应用系统代理:$($Internet_Settings.ProxyServer)。"
|
||||
}
|
||||
# else {
|
||||
# Write-Host "未启用系统代理。"
|
||||
# }
|
||||
Remove-Variable -Name Internet_Settings
|
||||
|
||||
# 新建下载用临时文件夹
|
||||
New-Item -Path "$env:TEMP" -Name "MAA_Runtime_Fix_Pwsh" -ItemType "Directory" | Out-Null
|
||||
|
||||
# 使用 BITS 下载运行库安装包
|
||||
Write-Host "正在下载运行库安装包..."
|
||||
# Start-Sleep -Seconds 1
|
||||
Start-BitsTransfer -Source "https://aka.ms/vs/17/release/vc_redist.x64.exe" -Destination "$env:TEMP\MAA_Runtime_Fix_Pwsh\vc_redist.x64.exe"
|
||||
Start-BitsTransfer -Source "https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-x64.exe" -Destination "$env:TEMP\MAA_Runtime_Fix_Pwsh\windowsdesktop-runtime-8.0.11-win-x64.exe"
|
||||
|
||||
# 卸载 vc++ 和 dotnet8
|
||||
Write-Host ""
|
||||
Write-Host "尝试调用 WinGet 卸载已安装的运行库..."
|
||||
winget uninstall "Microsoft.VCRedist.2015+.x64" "Microsoft.DotNet.DesktopRuntime.8" --force --all-versions
|
||||
|
||||
# 安装 vc++
|
||||
Write-Host ""
|
||||
Write-Host "正在安装/修复 Microsoft Visual C++ 可再发行程序包..."
|
||||
$vcProcess = Start-Process "$env:TEMP\MAA_Runtime_Fix_Pwsh\vc_redist.x64.exe" -ArgumentList '/repair', '/passive', '/norestart' -PassThru
|
||||
$vcProcess.WaitForExit()
|
||||
|
||||
# 安装 dotnet8
|
||||
Write-Host "正在安装/修复 .NET 桌面运行时 8..."
|
||||
$dotnetProcess = Start-Process "$env:TEMP\MAA_Runtime_Fix_Pwsh\windowsdesktop-runtime-8.0.11-win-x64.exe" -ArgumentList '/repair', '/passive', '/norestart' -PassThru
|
||||
$dotnetProcess.WaitForExit()
|
||||
|
||||
# 删除临时文件夹
|
||||
Write-Host ""
|
||||
Write-Host "正在清理临时文件..."
|
||||
Remove-Item -Path "$env:TEMP\MAA_Runtime_Fix_Pwsh" -Recurse -Force
|
||||
|
||||
Write-Host "运行库修复完成,请再次尝试运行 MAA。"
|
||||
Write-Host ""
|
||||
Pause
|
||||
|
||||
# 使用 winget 安装/更新运行库并卸载旧版本
|
||||
# winget install "Microsoft.VCRedist.2015+.x64" "Microsoft.DotNet.DesktopRuntime.8" --uninstall-previous --accept-package-agreements
|
||||
|
||||
# 使用 winget 下载运行库安装包
|
||||
# winget download --id "Microsoft.VCRedist.2015+.x64" -d "$env:TEMP\MAA_Runtime_Fix_Pwsh\"
|
||||
# winget download --id "Microsoft.DotNet.DesktopRuntime.8" -d "$env:TEMP\MAA_Runtime_Fix_Pwsh\"
|
||||
|
||||
# 不使用 winget 卸载 vc++
|
||||
# 会进行卸载 但是卸不掉
|
||||
# Get-Package -Name "Microsoft Visual C++ 2015-2022 Redistributable (x64) - *" | Uninstall-Package -Force
|
||||
|
||||
# 不使用 winget 卸载 dotnet8
|
||||
# 会进行卸载 但是卸不掉
|
||||
# Get-Package -Name "Microsoft Windows Desktop Runtime - 8.* (x64)" | Uninstall-Package -Force
|
||||
|
||||
# 下载安装包那里注释了一个睡一秒是因为本来下载文件的那个进度条会把上面输出过的所有内容都覆盖掉,上来就只能看到个下载进度条,别的啥也看不到。
|
||||
# 但当我去掉新建文件夹时输出的一大坨东西之后,这行就能露出来了。
|
||||
# 我建议每个人都去看一下 PowerShell 的 New-Item 新建文件夹能输出多大一坨玩意。
|
||||
# 还有 PowerShell 弱智一样的进度条显示机制,非得搞个固定不透明一大坨的浮窗上去干什么,就不能和别人一样在命令底部显示吗。
|
||||
|
||||
# 再用 Pwsh 写脚本我就是傻逼。
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 691 KiB |
BIN
docs/.vuepress/public/images/en-us/readme/1-dark.png
Normal file
BIN
docs/.vuepress/public/images/en-us/readme/1-dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
docs/.vuepress/public/images/en-us/readme/1-light.png
Normal file
BIN
docs/.vuepress/public/images/en-us/readme/1-light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/.vuepress/public/images/en-us/readme/2-dark.png
Normal file
BIN
docs/.vuepress/public/images/en-us/readme/2-dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/.vuepress/public/images/en-us/readme/2-light.png
Normal file
BIN
docs/.vuepress/public/images/en-us/readme/2-light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/.vuepress/public/images/en-us/readme/3-dark.png
Normal file
BIN
docs/.vuepress/public/images/en-us/readme/3-dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user