diff --git a/.run/nwerc-2018.run.xml b/.run/nwerc-2018.run.xml
new file mode 100644
index 000000000..af2653781
--- /dev/null
+++ b/.run/nwerc-2018.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/config/_examples/_domjudge_test1/settings.json b/config/_examples/_domjudge_test1/settings.json
index 2284fb75b..0bc87cab4 100644
--- a/config/_examples/_domjudge_test1/settings.json
+++ b/config/_examples/_domjudge_test1/settings.json
@@ -1,6 +1,11 @@
-{
- "login":"live",
- "password":"$creds.cds_password_pretest_dhaka",
- "url":"https://cds.storm.vu/api/contests/pretest_dhaka",
- "type":"clics"
+{
+ "type":"clics",
+ "feeds": [
+ {
+ "login":"live",
+ "password":"$creds.cds_password_pretest_dhaka",
+ "url":"https://cds.storm.vu/api",
+ "contestId": "pretest_dhaka"
+ }
+ ]
}
\ No newline at end of file
diff --git a/config/_examples/_pc2/settings.json b/config/_examples/_pc2/settings.json
index f912fab59..b2629e76c 100644
--- a/config/_examples/_pc2/settings.json
+++ b/config/_examples/_pc2/settings.json
@@ -1,8 +1,13 @@
{
"type":"clics",
-
- "url":"_examples/_pc2",
- "feedVersion":"2020_03",
+ "feeds": [
+ {
+ "url": ".",
+ "contestId": "",
+ "eventFeedPath": "",
+ "feedVersion": "2020_03"
+ }
+ ],
"emulation":{"speed":5,"startTime":"now"}
}
diff --git a/config/ejoi/2023/advanced.json b/config/ejoi/2023/advanced.json
new file mode 100644
index 000000000..1d22236b2
--- /dev/null
+++ b/config/ejoi/2023/advanced.json
@@ -0,0 +1,58 @@
+{
+ "freezeTimeSeconds": 18000,
+ "teamOverrides": {
+ "GEO5" : {"isOutOfContest": true },
+ "GEO6" : {"isOutOfContest": true },
+ "GEO7" : {"isOutOfContest": true },
+ "GEO8" : {"isOutOfContest": true }
+ },
+ "teamOverrideTemplate": {
+ "displayName": "[{country}] {first_name} {last_name}"
+ },
+ "teamMediaTemplate": {
+ "photo": {
+ "type": "Photo",
+ "url": "/media/photos/{teamId}.png"
+ }
+ },
+ "problemOverrides": {
+ "search": {
+ "displayName": "A1"
+ },
+ "teleport": {
+ "displayName": "B1"
+ },
+ "offices": {
+ "displayName": "C1"
+ },
+ "puzzle": {
+ "displayName": "A2"
+ },
+ "infection": {
+ "displayName": "B2"
+ },
+ "team": {
+ "displayName": "C2"
+ }
+ },
+ "scoreboardOverrides": {
+ "medals": [
+ {
+ "name": "gold",
+ "count": 8,
+ "tiebreakMode": "ALL"
+ },
+ {
+ "name": "silver",
+ "count": 15,
+ "tiebreakMode": "ALL"
+ },
+ {
+ "name": "bronze",
+ "count": 23,
+ "tiebreakMode": "ALL"
+ }
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/config/ejoi/2023/media/photos/ARM1.png b/config/ejoi/2023/media/photos/ARM1.png
new file mode 100644
index 000000000..84958fb41
Binary files /dev/null and b/config/ejoi/2023/media/photos/ARM1.png differ
diff --git a/config/ejoi/2023/media/photos/ARM2.png b/config/ejoi/2023/media/photos/ARM2.png
new file mode 100644
index 000000000..a74513ded
Binary files /dev/null and b/config/ejoi/2023/media/photos/ARM2.png differ
diff --git a/config/ejoi/2023/media/photos/ARM3.png b/config/ejoi/2023/media/photos/ARM3.png
new file mode 100644
index 000000000..62812fc93
Binary files /dev/null and b/config/ejoi/2023/media/photos/ARM3.png differ
diff --git a/config/ejoi/2023/media/photos/ARM4.png b/config/ejoi/2023/media/photos/ARM4.png
new file mode 100644
index 000000000..ca257001d
Binary files /dev/null and b/config/ejoi/2023/media/photos/ARM4.png differ
diff --git a/config/ejoi/2023/media/photos/AZE1.png b/config/ejoi/2023/media/photos/AZE1.png
new file mode 100644
index 000000000..2ea35d595
Binary files /dev/null and b/config/ejoi/2023/media/photos/AZE1.png differ
diff --git a/config/ejoi/2023/media/photos/AZE2.png b/config/ejoi/2023/media/photos/AZE2.png
new file mode 100644
index 000000000..00dea837e
Binary files /dev/null and b/config/ejoi/2023/media/photos/AZE2.png differ
diff --git a/config/ejoi/2023/media/photos/AZE3.png b/config/ejoi/2023/media/photos/AZE3.png
new file mode 100644
index 000000000..c3550f469
Binary files /dev/null and b/config/ejoi/2023/media/photos/AZE3.png differ
diff --git a/config/ejoi/2023/media/photos/AZE4.png b/config/ejoi/2023/media/photos/AZE4.png
new file mode 100644
index 000000000..6b601bc15
Binary files /dev/null and b/config/ejoi/2023/media/photos/AZE4.png differ
diff --git a/config/ejoi/2023/media/photos/BEL1.png b/config/ejoi/2023/media/photos/BEL1.png
new file mode 100644
index 000000000..6f45174cd
Binary files /dev/null and b/config/ejoi/2023/media/photos/BEL1.png differ
diff --git a/config/ejoi/2023/media/photos/BEL2.png b/config/ejoi/2023/media/photos/BEL2.png
new file mode 100644
index 000000000..6dc507af2
Binary files /dev/null and b/config/ejoi/2023/media/photos/BEL2.png differ
diff --git a/config/ejoi/2023/media/photos/BEL3.png b/config/ejoi/2023/media/photos/BEL3.png
new file mode 100644
index 000000000..9d9a2bad4
Binary files /dev/null and b/config/ejoi/2023/media/photos/BEL3.png differ
diff --git a/config/ejoi/2023/media/photos/BEL4.png b/config/ejoi/2023/media/photos/BEL4.png
new file mode 100644
index 000000000..81ea79f20
Binary files /dev/null and b/config/ejoi/2023/media/photos/BEL4.png differ
diff --git a/config/ejoi/2023/media/photos/BGR1.png b/config/ejoi/2023/media/photos/BGR1.png
new file mode 100644
index 000000000..00a44b96d
Binary files /dev/null and b/config/ejoi/2023/media/photos/BGR1.png differ
diff --git a/config/ejoi/2023/media/photos/BGR2.png b/config/ejoi/2023/media/photos/BGR2.png
new file mode 100644
index 000000000..8b6aa5126
Binary files /dev/null and b/config/ejoi/2023/media/photos/BGR2.png differ
diff --git a/config/ejoi/2023/media/photos/BGR3.png b/config/ejoi/2023/media/photos/BGR3.png
new file mode 100644
index 000000000..307595053
Binary files /dev/null and b/config/ejoi/2023/media/photos/BGR3.png differ
diff --git a/config/ejoi/2023/media/photos/BGR4.png b/config/ejoi/2023/media/photos/BGR4.png
new file mode 100644
index 000000000..dc8640ae6
Binary files /dev/null and b/config/ejoi/2023/media/photos/BGR4.png differ
diff --git a/config/ejoi/2023/media/photos/BIH1.png b/config/ejoi/2023/media/photos/BIH1.png
new file mode 100644
index 000000000..cb32a252f
Binary files /dev/null and b/config/ejoi/2023/media/photos/BIH1.png differ
diff --git a/config/ejoi/2023/media/photos/BIH2.png b/config/ejoi/2023/media/photos/BIH2.png
new file mode 100644
index 000000000..4f33cad2c
Binary files /dev/null and b/config/ejoi/2023/media/photos/BIH2.png differ
diff --git a/config/ejoi/2023/media/photos/BIH3.png b/config/ejoi/2023/media/photos/BIH3.png
new file mode 100644
index 000000000..0f71714b7
Binary files /dev/null and b/config/ejoi/2023/media/photos/BIH3.png differ
diff --git a/config/ejoi/2023/media/photos/BIH4.png b/config/ejoi/2023/media/photos/BIH4.png
new file mode 100644
index 000000000..4be0f93e5
Binary files /dev/null and b/config/ejoi/2023/media/photos/BIH4.png differ
diff --git a/config/ejoi/2023/media/photos/CHE1.png b/config/ejoi/2023/media/photos/CHE1.png
new file mode 100644
index 000000000..7c4fca5b6
Binary files /dev/null and b/config/ejoi/2023/media/photos/CHE1.png differ
diff --git a/config/ejoi/2023/media/photos/CHE2.png b/config/ejoi/2023/media/photos/CHE2.png
new file mode 100644
index 000000000..30e621d67
Binary files /dev/null and b/config/ejoi/2023/media/photos/CHE2.png differ
diff --git a/config/ejoi/2023/media/photos/CHE3.png b/config/ejoi/2023/media/photos/CHE3.png
new file mode 100644
index 000000000..da4e60065
Binary files /dev/null and b/config/ejoi/2023/media/photos/CHE3.png differ
diff --git a/config/ejoi/2023/media/photos/CYP1.png b/config/ejoi/2023/media/photos/CYP1.png
new file mode 100644
index 000000000..c9d1c5b3d
Binary files /dev/null and b/config/ejoi/2023/media/photos/CYP1.png differ
diff --git a/config/ejoi/2023/media/photos/CYP2.png b/config/ejoi/2023/media/photos/CYP2.png
new file mode 100644
index 000000000..e0b283a48
Binary files /dev/null and b/config/ejoi/2023/media/photos/CYP2.png differ
diff --git a/config/ejoi/2023/media/photos/CYP3.png b/config/ejoi/2023/media/photos/CYP3.png
new file mode 100644
index 000000000..8ab7d3b73
Binary files /dev/null and b/config/ejoi/2023/media/photos/CYP3.png differ
diff --git a/config/ejoi/2023/media/photos/CYP4.png b/config/ejoi/2023/media/photos/CYP4.png
new file mode 100644
index 000000000..85cbc3878
Binary files /dev/null and b/config/ejoi/2023/media/photos/CYP4.png differ
diff --git a/config/ejoi/2023/media/photos/EST1.png b/config/ejoi/2023/media/photos/EST1.png
new file mode 100644
index 000000000..e1e7eb319
Binary files /dev/null and b/config/ejoi/2023/media/photos/EST1.png differ
diff --git a/config/ejoi/2023/media/photos/EST2.png b/config/ejoi/2023/media/photos/EST2.png
new file mode 100644
index 000000000..3a57a9783
Binary files /dev/null and b/config/ejoi/2023/media/photos/EST2.png differ
diff --git a/config/ejoi/2023/media/photos/FRA1.png b/config/ejoi/2023/media/photos/FRA1.png
new file mode 100644
index 000000000..39b771a00
Binary files /dev/null and b/config/ejoi/2023/media/photos/FRA1.png differ
diff --git a/config/ejoi/2023/media/photos/FRA2.png b/config/ejoi/2023/media/photos/FRA2.png
new file mode 100644
index 000000000..5f896e507
Binary files /dev/null and b/config/ejoi/2023/media/photos/FRA2.png differ
diff --git a/config/ejoi/2023/media/photos/FRA3.png b/config/ejoi/2023/media/photos/FRA3.png
new file mode 100644
index 000000000..099b45508
Binary files /dev/null and b/config/ejoi/2023/media/photos/FRA3.png differ
diff --git a/config/ejoi/2023/media/photos/FRA4.png b/config/ejoi/2023/media/photos/FRA4.png
new file mode 100644
index 000000000..6324fffd7
Binary files /dev/null and b/config/ejoi/2023/media/photos/FRA4.png differ
diff --git a/config/ejoi/2023/media/photos/GEO1.png b/config/ejoi/2023/media/photos/GEO1.png
new file mode 100644
index 000000000..71f38f6e3
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO1.png differ
diff --git a/config/ejoi/2023/media/photos/GEO2.png b/config/ejoi/2023/media/photos/GEO2.png
new file mode 100644
index 000000000..b43b9b528
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO2.png differ
diff --git a/config/ejoi/2023/media/photos/GEO3.png b/config/ejoi/2023/media/photos/GEO3.png
new file mode 100644
index 000000000..42c675e33
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO3.png differ
diff --git a/config/ejoi/2023/media/photos/GEO4.png b/config/ejoi/2023/media/photos/GEO4.png
new file mode 100644
index 000000000..19ae85a51
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO4.png differ
diff --git a/config/ejoi/2023/media/photos/GEO5.png b/config/ejoi/2023/media/photos/GEO5.png
new file mode 100644
index 000000000..7c3689913
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO5.png differ
diff --git a/config/ejoi/2023/media/photos/GEO6.png b/config/ejoi/2023/media/photos/GEO6.png
new file mode 100644
index 000000000..843ea5a9e
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO6.png differ
diff --git a/config/ejoi/2023/media/photos/GEO7.png b/config/ejoi/2023/media/photos/GEO7.png
new file mode 100644
index 000000000..fb6ed2564
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO7.png differ
diff --git a/config/ejoi/2023/media/photos/GEO8.png b/config/ejoi/2023/media/photos/GEO8.png
new file mode 100644
index 000000000..fce044d69
Binary files /dev/null and b/config/ejoi/2023/media/photos/GEO8.png differ
diff --git a/config/ejoi/2023/media/photos/GRC1.png b/config/ejoi/2023/media/photos/GRC1.png
new file mode 100644
index 000000000..5ada6c172
Binary files /dev/null and b/config/ejoi/2023/media/photos/GRC1.png differ
diff --git a/config/ejoi/2023/media/photos/GRC2.png b/config/ejoi/2023/media/photos/GRC2.png
new file mode 100644
index 000000000..50b458be0
Binary files /dev/null and b/config/ejoi/2023/media/photos/GRC2.png differ
diff --git a/config/ejoi/2023/media/photos/GRC3.png b/config/ejoi/2023/media/photos/GRC3.png
new file mode 100644
index 000000000..b995c07ea
Binary files /dev/null and b/config/ejoi/2023/media/photos/GRC3.png differ
diff --git a/config/ejoi/2023/media/photos/GRC4.png b/config/ejoi/2023/media/photos/GRC4.png
new file mode 100644
index 000000000..f892720fd
Binary files /dev/null and b/config/ejoi/2023/media/photos/GRC4.png differ
diff --git a/config/ejoi/2023/media/photos/HRV1.png b/config/ejoi/2023/media/photos/HRV1.png
new file mode 100644
index 000000000..03c161501
Binary files /dev/null and b/config/ejoi/2023/media/photos/HRV1.png differ
diff --git a/config/ejoi/2023/media/photos/HRV2.png b/config/ejoi/2023/media/photos/HRV2.png
new file mode 100644
index 000000000..3b06049ac
Binary files /dev/null and b/config/ejoi/2023/media/photos/HRV2.png differ
diff --git a/config/ejoi/2023/media/photos/HRV3.png b/config/ejoi/2023/media/photos/HRV3.png
new file mode 100644
index 000000000..e213ac621
Binary files /dev/null and b/config/ejoi/2023/media/photos/HRV3.png differ
diff --git a/config/ejoi/2023/media/photos/HRV4.png b/config/ejoi/2023/media/photos/HRV4.png
new file mode 100644
index 000000000..6752c9965
Binary files /dev/null and b/config/ejoi/2023/media/photos/HRV4.png differ
diff --git a/config/ejoi/2023/media/photos/HUN1.png b/config/ejoi/2023/media/photos/HUN1.png
new file mode 100644
index 000000000..07d4b7fb7
Binary files /dev/null and b/config/ejoi/2023/media/photos/HUN1.png differ
diff --git a/config/ejoi/2023/media/photos/HUN2.png b/config/ejoi/2023/media/photos/HUN2.png
new file mode 100644
index 000000000..932f794c4
Binary files /dev/null and b/config/ejoi/2023/media/photos/HUN2.png differ
diff --git a/config/ejoi/2023/media/photos/HUN3.png b/config/ejoi/2023/media/photos/HUN3.png
new file mode 100644
index 000000000..b2e5fda95
Binary files /dev/null and b/config/ejoi/2023/media/photos/HUN3.png differ
diff --git a/config/ejoi/2023/media/photos/HUN4.png b/config/ejoi/2023/media/photos/HUN4.png
new file mode 100644
index 000000000..7ea0ff37a
Binary files /dev/null and b/config/ejoi/2023/media/photos/HUN4.png differ
diff --git a/config/ejoi/2023/media/photos/KAZ1.png b/config/ejoi/2023/media/photos/KAZ1.png
new file mode 100644
index 000000000..ea1cf17d2
Binary files /dev/null and b/config/ejoi/2023/media/photos/KAZ1.png differ
diff --git a/config/ejoi/2023/media/photos/KAZ2.png b/config/ejoi/2023/media/photos/KAZ2.png
new file mode 100644
index 000000000..fda334049
Binary files /dev/null and b/config/ejoi/2023/media/photos/KAZ2.png differ
diff --git a/config/ejoi/2023/media/photos/KAZ3.png b/config/ejoi/2023/media/photos/KAZ3.png
new file mode 100644
index 000000000..b4314610d
Binary files /dev/null and b/config/ejoi/2023/media/photos/KAZ3.png differ
diff --git a/config/ejoi/2023/media/photos/KAZ4.png b/config/ejoi/2023/media/photos/KAZ4.png
new file mode 100644
index 000000000..8ffc9b027
Binary files /dev/null and b/config/ejoi/2023/media/photos/KAZ4.png differ
diff --git a/config/ejoi/2023/media/photos/LTU1.png b/config/ejoi/2023/media/photos/LTU1.png
new file mode 100644
index 000000000..fe7f7deca
Binary files /dev/null and b/config/ejoi/2023/media/photos/LTU1.png differ
diff --git a/config/ejoi/2023/media/photos/LTU2.png b/config/ejoi/2023/media/photos/LTU2.png
new file mode 100644
index 000000000..d57f8f44d
Binary files /dev/null and b/config/ejoi/2023/media/photos/LTU2.png differ
diff --git a/config/ejoi/2023/media/photos/LTU3.png b/config/ejoi/2023/media/photos/LTU3.png
new file mode 100644
index 000000000..cebda2222
Binary files /dev/null and b/config/ejoi/2023/media/photos/LTU3.png differ
diff --git a/config/ejoi/2023/media/photos/LTU4.png b/config/ejoi/2023/media/photos/LTU4.png
new file mode 100644
index 000000000..7c9a963c0
Binary files /dev/null and b/config/ejoi/2023/media/photos/LTU4.png differ
diff --git a/config/ejoi/2023/media/photos/LVA1.png b/config/ejoi/2023/media/photos/LVA1.png
new file mode 100644
index 000000000..798d4570b
Binary files /dev/null and b/config/ejoi/2023/media/photos/LVA1.png differ
diff --git a/config/ejoi/2023/media/photos/LVA2.png b/config/ejoi/2023/media/photos/LVA2.png
new file mode 100644
index 000000000..6f9490582
Binary files /dev/null and b/config/ejoi/2023/media/photos/LVA2.png differ
diff --git a/config/ejoi/2023/media/photos/LVA3.png b/config/ejoi/2023/media/photos/LVA3.png
new file mode 100644
index 000000000..b6e739f55
Binary files /dev/null and b/config/ejoi/2023/media/photos/LVA3.png differ
diff --git a/config/ejoi/2023/media/photos/LVA4.png b/config/ejoi/2023/media/photos/LVA4.png
new file mode 100644
index 000000000..ab894689a
Binary files /dev/null and b/config/ejoi/2023/media/photos/LVA4.png differ
diff --git a/config/ejoi/2023/media/photos/MDA1.png b/config/ejoi/2023/media/photos/MDA1.png
new file mode 100644
index 000000000..f94ab6491
Binary files /dev/null and b/config/ejoi/2023/media/photos/MDA1.png differ
diff --git a/config/ejoi/2023/media/photos/MDA2.png b/config/ejoi/2023/media/photos/MDA2.png
new file mode 100644
index 000000000..d77f6e1ac
Binary files /dev/null and b/config/ejoi/2023/media/photos/MDA2.png differ
diff --git a/config/ejoi/2023/media/photos/MDA3.png b/config/ejoi/2023/media/photos/MDA3.png
new file mode 100644
index 000000000..b2aec9cd6
Binary files /dev/null and b/config/ejoi/2023/media/photos/MDA3.png differ
diff --git a/config/ejoi/2023/media/photos/MKD1.png b/config/ejoi/2023/media/photos/MKD1.png
new file mode 100644
index 000000000..2ca23bec2
Binary files /dev/null and b/config/ejoi/2023/media/photos/MKD1.png differ
diff --git a/config/ejoi/2023/media/photos/MKD2.png b/config/ejoi/2023/media/photos/MKD2.png
new file mode 100644
index 000000000..e2ab7a620
Binary files /dev/null and b/config/ejoi/2023/media/photos/MKD2.png differ
diff --git a/config/ejoi/2023/media/photos/MKD3.png b/config/ejoi/2023/media/photos/MKD3.png
new file mode 100644
index 000000000..51a14e6be
Binary files /dev/null and b/config/ejoi/2023/media/photos/MKD3.png differ
diff --git a/config/ejoi/2023/media/photos/MKD4.png b/config/ejoi/2023/media/photos/MKD4.png
new file mode 100644
index 000000000..188de2604
Binary files /dev/null and b/config/ejoi/2023/media/photos/MKD4.png differ
diff --git a/config/ejoi/2023/media/photos/POL1.png b/config/ejoi/2023/media/photos/POL1.png
new file mode 100644
index 000000000..6d9d45b36
Binary files /dev/null and b/config/ejoi/2023/media/photos/POL1.png differ
diff --git a/config/ejoi/2023/media/photos/POL2.png b/config/ejoi/2023/media/photos/POL2.png
new file mode 100644
index 000000000..568f9e30c
Binary files /dev/null and b/config/ejoi/2023/media/photos/POL2.png differ
diff --git a/config/ejoi/2023/media/photos/POL3.png b/config/ejoi/2023/media/photos/POL3.png
new file mode 100644
index 000000000..bfdb3815a
Binary files /dev/null and b/config/ejoi/2023/media/photos/POL3.png differ
diff --git a/config/ejoi/2023/media/photos/POL4.png b/config/ejoi/2023/media/photos/POL4.png
new file mode 100644
index 000000000..43b6f94a3
Binary files /dev/null and b/config/ejoi/2023/media/photos/POL4.png differ
diff --git a/config/ejoi/2023/media/photos/ROU1.png b/config/ejoi/2023/media/photos/ROU1.png
new file mode 100644
index 000000000..43c1f1c4a
Binary files /dev/null and b/config/ejoi/2023/media/photos/ROU1.png differ
diff --git a/config/ejoi/2023/media/photos/ROU2.png b/config/ejoi/2023/media/photos/ROU2.png
new file mode 100644
index 000000000..3c5a83929
Binary files /dev/null and b/config/ejoi/2023/media/photos/ROU2.png differ
diff --git a/config/ejoi/2023/media/photos/ROU3.png b/config/ejoi/2023/media/photos/ROU3.png
new file mode 100644
index 000000000..7cc4939b5
Binary files /dev/null and b/config/ejoi/2023/media/photos/ROU3.png differ
diff --git a/config/ejoi/2023/media/photos/ROU4.png b/config/ejoi/2023/media/photos/ROU4.png
new file mode 100644
index 000000000..914ec5cc0
Binary files /dev/null and b/config/ejoi/2023/media/photos/ROU4.png differ
diff --git a/config/ejoi/2023/media/photos/SRB1.png b/config/ejoi/2023/media/photos/SRB1.png
new file mode 100644
index 000000000..d41fe0ac7
Binary files /dev/null and b/config/ejoi/2023/media/photos/SRB1.png differ
diff --git a/config/ejoi/2023/media/photos/SRB2.png b/config/ejoi/2023/media/photos/SRB2.png
new file mode 100644
index 000000000..edb4c763f
Binary files /dev/null and b/config/ejoi/2023/media/photos/SRB2.png differ
diff --git a/config/ejoi/2023/media/photos/SRB3.png b/config/ejoi/2023/media/photos/SRB3.png
new file mode 100644
index 000000000..6b5cac75c
Binary files /dev/null and b/config/ejoi/2023/media/photos/SRB3.png differ
diff --git a/config/ejoi/2023/media/photos/SRB4.png b/config/ejoi/2023/media/photos/SRB4.png
new file mode 100644
index 000000000..002f4747e
Binary files /dev/null and b/config/ejoi/2023/media/photos/SRB4.png differ
diff --git a/config/ejoi/2023/media/photos/SVN1.png b/config/ejoi/2023/media/photos/SVN1.png
new file mode 100644
index 000000000..d57a47d92
Binary files /dev/null and b/config/ejoi/2023/media/photos/SVN1.png differ
diff --git a/config/ejoi/2023/media/photos/SVN2.png b/config/ejoi/2023/media/photos/SVN2.png
new file mode 100644
index 000000000..39c083d66
Binary files /dev/null and b/config/ejoi/2023/media/photos/SVN2.png differ
diff --git a/config/ejoi/2023/media/photos/SVN3.png b/config/ejoi/2023/media/photos/SVN3.png
new file mode 100644
index 000000000..5504a8b70
Binary files /dev/null and b/config/ejoi/2023/media/photos/SVN3.png differ
diff --git a/config/ejoi/2023/media/photos/SVN4.png b/config/ejoi/2023/media/photos/SVN4.png
new file mode 100644
index 000000000..8cd511c1c
Binary files /dev/null and b/config/ejoi/2023/media/photos/SVN4.png differ
diff --git a/config/ejoi/2023/media/photos/TUR1.png b/config/ejoi/2023/media/photos/TUR1.png
new file mode 100644
index 000000000..f56c7d1ce
Binary files /dev/null and b/config/ejoi/2023/media/photos/TUR1.png differ
diff --git a/config/ejoi/2023/media/photos/TUR2.png b/config/ejoi/2023/media/photos/TUR2.png
new file mode 100644
index 000000000..df7a0f8ae
Binary files /dev/null and b/config/ejoi/2023/media/photos/TUR2.png differ
diff --git a/config/ejoi/2023/media/photos/TUR3.png b/config/ejoi/2023/media/photos/TUR3.png
new file mode 100644
index 000000000..4690cc15b
Binary files /dev/null and b/config/ejoi/2023/media/photos/TUR3.png differ
diff --git a/config/ejoi/2023/media/photos/TUR4.png b/config/ejoi/2023/media/photos/TUR4.png
new file mode 100644
index 000000000..f0026c77a
Binary files /dev/null and b/config/ejoi/2023/media/photos/TUR4.png differ
diff --git a/config/ejoi/2023/media/photos/UKR1.png b/config/ejoi/2023/media/photos/UKR1.png
new file mode 100644
index 000000000..096bfdea8
Binary files /dev/null and b/config/ejoi/2023/media/photos/UKR1.png differ
diff --git a/config/ejoi/2023/media/photos/UKR2.png b/config/ejoi/2023/media/photos/UKR2.png
new file mode 100644
index 000000000..119610c99
Binary files /dev/null and b/config/ejoi/2023/media/photos/UKR2.png differ
diff --git a/config/ejoi/2023/media/photos/UKR3.png b/config/ejoi/2023/media/photos/UKR3.png
new file mode 100644
index 000000000..b7a4a0857
Binary files /dev/null and b/config/ejoi/2023/media/photos/UKR3.png differ
diff --git a/config/ejoi/2023/media/photos/UKR4.png b/config/ejoi/2023/media/photos/UKR4.png
new file mode 100644
index 000000000..89fc33686
Binary files /dev/null and b/config/ejoi/2023/media/photos/UKR4.png differ
diff --git a/config/ejoi/2023/settings.json b/config/ejoi/2023/settings.json
new file mode 100644
index 000000000..5fdd1cf3e
--- /dev/null
+++ b/config/ejoi/2023/settings.json
@@ -0,0 +1,6 @@
+{
+ "type": "cms",
+ "activeContest": "day2",
+ "otherContests": ["day1"],
+ "url": "http://ranking.ejoi2023.kiu.edu.ge"
+}
\ No newline at end of file
diff --git a/config/icpc-bapc/2022/settings.json b/config/icpc-bapc/2022/settings.json
index 1d2821a86..486d05aa0 100644
--- a/config/icpc-bapc/2022/settings.json
+++ b/config/icpc-bapc/2022/settings.json
@@ -1,6 +1,11 @@
{
- "type":"clics",
- "login":"$creds.login",
- "password":"$creds.password",
- "url":"https://cds.gehack.nl/api/contests/bapc2022"
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "$creds.login",
+ "password": "$creds.password",
+ "url": "https://cds.gehack.nl/api",
+ "contestId": "bapc2022"
+ }
+ ]
}
diff --git a/config/icpc-nac/2022/practice4/settings.json b/config/icpc-nac/2022/practice4/settings.json
index b3a1a59f5..98d922085 100644
--- a/config/icpc-nac/2022/practice4/settings.json
+++ b/config/icpc-nac/2022/practice4/settings.json
@@ -1,8 +1,13 @@
{
- "login":"$creds.kattis_login",
- "password":"$creds.kattis_token",
- "url":"https://open.kattis.com/clics-api/contests/nac22practice4",
- "type":"clics",
- "feedVersion":"2020_03",
+ "type": "clics",
+ "feeds": [
+ {
+ "url": "https://open.kattis.com/clics-api",
+ "contestId": "nac22practice4",
+ "feedVersion": "2020_03",
+ "login":"$creds.kattis_login",
+ "password":"$creds.kattis_token"
+ }
+ ],
"emulation": { "speed": 10, "startTime": "now"}
}
\ No newline at end of file
diff --git a/config/icpc-nac/2023/contest/settings.json b/config/icpc-nac/2023/contest/settings.json
index 0a67829d5..51f9dbbb5 100644
--- a/config/icpc-nac/2023/contest/settings.json
+++ b/config/icpc-nac/2023/contest/settings.json
@@ -1,9 +1,12 @@
{
- "type":"clics",
- "login":"$creds.cds_login",
- "password":"$creds.cds_password",
- "url":"https://10.3.3.207/api/contests/NAC-2023-real",
- "useTeamNames":false,
-
- "#media_base_url":"http://10.3.3.207/api"
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "$creds.cds_login",
+ "password": "$creds.cds_password",
+ "url": "https://10.3.3.207/api",
+ "contestId": "NAC-2023-real"
+ }
+ ],
+ "useTeamNames": false
}
\ No newline at end of file
diff --git a/config/icpc-nac/2023/dr/settings.json b/config/icpc-nac/2023/dr/settings.json
index 8d9c8ca8b..fa9a21b17 100644
--- a/config/icpc-nac/2023/dr/settings.json
+++ b/config/icpc-nac/2023/dr/settings.json
@@ -1,10 +1,13 @@
{
"type":"clics",
- "login":"$creds.cds_login",
- "password":"$creds.cds_password",
- "url":"https://10.3.3.207/api/contests/NAC-2023-dress",
- "useTeamNames": false,
-
- "#media_base_url":"http://10.3.3.207/api"
+ "feeds": [
+ {
+ "login": "$creds.cds_login",
+ "password": "$creds.cds_password",
+ "url": "https://10.3.3.207/api",
+ "contestId": "NAC-2023-dress"
+ }
+ ],
+ "useTeamNames": false
}
diff --git a/config/icpc-nac/2023/test1/settings.json b/config/icpc-nac/2023/test1/settings.json
index b477b0a1f..3bc594034 100644
--- a/config/icpc-nac/2023/test1/settings.json
+++ b/config/icpc-nac/2023/test1/settings.json
@@ -1,8 +1,12 @@
{
"type": "clics",
- "login": "$creds.cds_login",
- "password": "$creds.cds_password",
- "url": "https://10.3.3.207/api/contests/NAC-2023-test1",
- "useTeamNames": false,
- "#media_base_url": "http://10.3.3.207/api"
+ "feeds": [
+ {
+ "login": "$creds.cds_login",
+ "password": "$creds.cds_password",
+ "url": "https://10.3.3.207/api",
+ "contestId": "NAC-2023-test1"
+ }
+ ],
+ "useTeamNames": false
}
diff --git a/config/icpc-nac/2023/test2/settings.json b/config/icpc-nac/2023/test2/settings.json
index 20f8d8d74..ac1efb7ce 100644
--- a/config/icpc-nac/2023/test2/settings.json
+++ b/config/icpc-nac/2023/test2/settings.json
@@ -1,10 +1,13 @@
{
- "type":"clics",
- "login":"$creds.cds_login",
- "password":"$creds.cds_password",
- "url":"https://10.3.3.207/api/contests/NAC-2023-test2",
- "useTeamNames":false,
-
- "#media_base_url":"http://10.3.3.207/api"
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "$creds.cds_login",
+ "password": "$creds.cds_password",
+ "url": "https://10.3.3.207/api",
+ "contestId": "NAC-2023-test2"
+ }
+ ],
+ "useTeamNames": false
}
diff --git a/config/icpc-nwerc/2018/cds/settings.json b/config/icpc-nwerc/2018/cds/settings.json
index b5d873c91..673ff896f 100644
--- a/config/icpc-nwerc/2018/cds/settings.json
+++ b/config/icpc-nwerc/2018/cds/settings.json
@@ -1,6 +1,11 @@
{
"type":"clics",
- "login":"$creds.nwerc18_login_cds",
- "password":"$creds.nwerc18_password_cds",
- "url":"https://cds.gehack.nl/api/contests/nwerc18"
+ "feeds": [
+ {
+ "login": "$creds.nwerc18_login_cds",
+ "password": "$creds.nwerc18_password_cds",
+ "url": "https://cds.gehack.nl/api",
+ "contestId": "nwerc18"
+ }
+ ]
}
diff --git a/config/icpc-nwerc/2018/native/settings.json b/config/icpc-nwerc/2018/native/settings.json
index 4f5eb2dbb..8394a0c16 100644
--- a/config/icpc-nwerc/2018/native/settings.json
+++ b/config/icpc-nwerc/2018/native/settings.json
@@ -1,6 +1,11 @@
{
- "type":"clics",
- "login":"$creds.nwerc18_login",
- "password":"$creds.nwerc18_password",
- "url":"https://www.domjudge.org/demoweb/api/contests/nwerc18"
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "$creds.nwerc18_login",
+ "password": "$creds.nwerc18_password",
+ "url": "https://www.domjudge.org/demoweb/api",
+ "contestId": "nwerc18"
+ }
+ ]
}
\ No newline at end of file
diff --git a/config/icpc-nwerc/2019/settings.json b/config/icpc-nwerc/2019/settings.json
index e0628da69..6b667becd 100644
--- a/config/icpc-nwerc/2019/settings.json
+++ b/config/icpc-nwerc/2019/settings.json
@@ -1,6 +1,11 @@
{
"type":"clics",
- "login":"live",
- "password":"monger-lawless-hymn-inhaler",
- "url":"https://judge.gehack.nl:8443/api/contests/3"
+ "feeds": [
+ {
+ "login": "live",
+ "password": "monger-lawless-hymn-inhaler",
+ "url": "https://judge.gehack.nl:8443/api",
+ "contestId": "3"
+ }
+ ]
}
diff --git a/config/icpc-nwerc/2022/settings.json b/config/icpc-nwerc/2022/settings.json
index caff37e1e..313e07974 100644
--- a/config/icpc-nwerc/2022/settings.json
+++ b/config/icpc-nwerc/2022/settings.json
@@ -1,7 +1,11 @@
{
"type":"clics",
- "login":"$creds.login",
- "password":"$creds.password",
- "url":"https://cds.chipcie.ch.tudelft.nl/api/contests/nwerc2022",
- "mediaBaseUrl":"https://cds.chipcie.ch.tudelft.nl/api"
+ "feeds": [
+ {
+ "login": "$creds.login",
+ "password": "$creds.password",
+ "url": "https://cds.chipcie.ch.tudelft.nl/api",
+ "contestId": "nwerc2022"
+ }
+ ]
}
\ No newline at end of file
diff --git a/config/icpc-rmc/2021/settings.json b/config/icpc-rmc/2021/settings.json
index 973e0e6bf..818669af1 100644
--- a/config/icpc-rmc/2021/settings.json
+++ b/config/icpc-rmc/2021/settings.json
@@ -1,9 +1,14 @@
{
"type":"clics",
- "login":"$creds.kattis_login",
- "password":"$creds.kattis_token",
- "url":"https://open.kattis.com/clics-api/contests/rmc21",
- "feedVersion":"2020_03",
+ "feeds": [
+ {
+ "login": "$creds.kattis_login",
+ "password": "$creds.kattis_token",
+ "url": "https://open.kattis.com/clics-api",
+ "contestId": "rmc21",
+ "feedVersion": "2020_03"
+ }
+ ],
"emulation":{"speed":5,"startTime":"2022-05-11 22:40"}
}
\ No newline at end of file
diff --git a/config/icpc-swerc/2021/contest/events.properties b/config/icpc-swerc/2021/contest/events.properties
deleted file mode 100644
index 8411eb639..000000000
--- a/config/icpc-swerc/2021/contest/events.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-login=live
-password=secret
-url=https://cds.swerc.eu/api/contests/swerc2021
-standings.type=WF
\ No newline at end of file
diff --git a/config/icpc-swerc/2021/contest/settings.json b/config/icpc-swerc/2021/contest/settings.json
new file mode 100644
index 000000000..198b575e1
--- /dev/null
+++ b/config/icpc-swerc/2021/contest/settings.json
@@ -0,0 +1,11 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "live",
+ "password": "secret",
+ "url": "https://cds.swerc.eu/api",
+ "contestId": "swerc2021"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/config/icpc-swerc/2021/dress/settings.json b/config/icpc-swerc/2021/dress/settings.json
index ddad5f045..c4e5f6aeb 100644
--- a/config/icpc-swerc/2021/dress/settings.json
+++ b/config/icpc-swerc/2021/dress/settings.json
@@ -1,7 +1,12 @@
{
"type":"clics",
- "login":"live",
- "password":"SECRET",
- "url":"https://cds.swerc.eu/api/contests/demo",
- "feedVersion":"2020_03"
+ "feeds": [
+ {
+ "login": "live",
+ "password": "SECRET",
+ "url": "https://cds.swerc.eu/api",
+ "contestId": "demo",
+ "feedVersion": "2020_03"
+ }
+ ]
}
\ No newline at end of file
diff --git a/config/icpc-swerc/2022/contest/events.properties b/config/icpc-swerc/2022/contest/events.properties
deleted file mode 100644
index cc537acc3..000000000
--- a/config/icpc-swerc/2022/contest/events.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-login=live
-password=$creds.swerc22
-url=https://cds.swerc.eu/api/contests/swerc2022
-standings.type=CLICS
diff --git a/config/icpc-swerc/2022/contest/settings.json b/config/icpc-swerc/2022/contest/settings.json
new file mode 100644
index 000000000..c93b39f89
--- /dev/null
+++ b/config/icpc-swerc/2022/contest/settings.json
@@ -0,0 +1,11 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "live",
+ "password": "$creds.swerc22",
+ "url": "https://cds.swerc.eu/api",
+ "contestId": "swerc2022"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/config/icpc-swerc/2022/mirror/events.properties b/config/icpc-swerc/2022/mirror/events.properties
deleted file mode 100644
index 5f8535e4c..000000000
--- a/config/icpc-swerc/2022/mirror/events.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-cf.api.key=$creds.codeforces_key
-cf.api.secret=$creds.codeforces_secret
-contest_id=1776
-standings.type=CF
-
diff --git a/config/icpc-swerc/2022/mirror/settings.json b/config/icpc-swerc/2022/mirror/settings.json
new file mode 100644
index 000000000..2a9f00813
--- /dev/null
+++ b/config/icpc-swerc/2022/mirror/settings.json
@@ -0,0 +1,6 @@
+{
+ "type": "cf",
+ "apiKey": "$creds.codeforces_key",
+ "apiSecret": "$creds.codeforces_secret",
+ "contestId": 1776
+}
\ No newline at end of file
diff --git a/config/icpc-swerc/2022/practice/events.properties b/config/icpc-swerc/2022/practice/events.properties
deleted file mode 100644
index 11e49ea50..000000000
--- a/config/icpc-swerc/2022/practice/events.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-login=live
-password=$creds.swerc22
-url=https://cds.swerc.eu/api/contests/practice
-standings.type=CLICS
diff --git a/config/icpc-swerc/2022/practice/settings.json b/config/icpc-swerc/2022/practice/settings.json
new file mode 100644
index 000000000..5f58bbd12
--- /dev/null
+++ b/config/icpc-swerc/2022/practice/settings.json
@@ -0,0 +1,11 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "login": "live",
+ "password": "$creds.swerc22",
+ "url": "https://cds.swerc.eu/api",
+ "contestId": "practice"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2020/settings.json b/config/icpc-wf/2020/settings.json
index b087b5290..d49d0698f 100644
--- a/config/icpc-wf/2020/settings.json
+++ b/config/icpc-wf/2020/settings.json
@@ -1,8 +1,14 @@
{
"type": "clics",
- "url": "icpc-wf/2020",
+ "feeds": [
+ {
+ "url": ".",
+ "contestId": "",
+ "eventFeedPath": "",
+ "feedVersion": "2020_03"
+ }
+ ],
"useTeamNames": false,
- "feedVersion": "2020_03",
"emulation": {
"speed": 10,
"startTime": "now"
diff --git a/config/icpc-wf/2021/dress/events.properties b/config/icpc-wf/2021/dress/events.properties
deleted file mode 100644
index d6a2038ca..000000000
--- a/config/icpc-wf/2021/dress/events.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-standings.type=CLICS
-url=2021/dress
-login=live
-password=landed-wafer-state-diner
-use_team_names=false
-#additional_feed.url=http://172.29.1.215:8099
-#additional_feed.event_feed_name=commentary-messages
-#additional_feed.feed_version=2020_03
diff --git a/config/icpc-wf/2021/dress/settings.json b/config/icpc-wf/2021/dress/settings.json
new file mode 100644
index 000000000..4d0ee3c49
--- /dev/null
+++ b/config/icpc-wf/2021/dress/settings.json
@@ -0,0 +1,13 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": ".",
+ "contestId": "",
+ "eventFeedPath": "",
+ "login": "live",
+ "password": "landed-wafer-state-diner"
+ }
+ ],
+ "useTeamNames": false
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2021/finals/events.properties b/config/icpc-wf/2021/finals/events.properties
deleted file mode 100644
index 90fa8a484..000000000
--- a/config/icpc-wf/2021/finals/events.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-standings.type=CLICS
-url=icpc-wf/2021/finals
-login=live
-password=landed-wafer-state-diner
-use_team_names=false
-additional_feed.url=icpc-wf/2021/finals
-additional_feed.event_feed_name=commentary-messages
-additional_feed.feed_version=2020_03
-
-emulation.startTime=now
-emulation.speed=5
diff --git a/config/icpc-wf/2021/finals/settings.json b/config/icpc-wf/2021/finals/settings.json
new file mode 100644
index 000000000..1882e2669
--- /dev/null
+++ b/config/icpc-wf/2021/finals/settings.json
@@ -0,0 +1,20 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": ".",
+ "login": "live",
+ "contestId": "",
+ "eventFeedPath": "",
+ "password": "landed-wafer-state-diner"
+ },
+ {
+ "url": ".",
+ "eventFeedName": "commentary-messages",
+ "contestId": "",
+ "eventFeedPath": "",
+ "feedVersion": "2020_03"
+ }
+ ],
+ "useTeamNames": false
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2021/mock/events.properties b/config/icpc-wf/2021/mock/events.properties
deleted file mode 100644
index 7b290b927..000000000
--- a/config/icpc-wf/2021/mock/events.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-standings.type=CLICS
-url=https://172.29.1.207:8443/api/contests/mock
-use_team_names=false
diff --git a/config/icpc-wf/2021/mock/settings.json b/config/icpc-wf/2021/mock/settings.json
new file mode 100644
index 000000000..27ddcf24c
--- /dev/null
+++ b/config/icpc-wf/2021/mock/settings.json
@@ -0,0 +1,10 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": "https://172.29.1.207:8443/api",
+ "contestId": "mock"
+ }
+ ],
+ "useTeamNames": false
+}
diff --git a/config/icpc-wf/2021/pretest/events.properties b/config/icpc-wf/2021/pretest/events.properties
deleted file mode 100644
index 4da433f86..000000000
--- a/config/icpc-wf/2021/pretest/events.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-login=live
-password=$creds.pretest_dhaka_pass
-url=https://cds.storm.vu/api/contests/pretest_dhaka
-standings.type=CLICS
diff --git a/config/icpc-wf/2021/pretest/settings.json b/config/icpc-wf/2021/pretest/settings.json
new file mode 100644
index 000000000..803954c99
--- /dev/null
+++ b/config/icpc-wf/2021/pretest/settings.json
@@ -0,0 +1,12 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": "https://cds.storm.vu/api",
+ "password": "$creds.pretest_dhaka_pass",
+ "login": "live",
+ "contestId": "pretest_dhaka"
+ }
+ ],
+ "useTeamNames": false
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2021/systest1/events.properties b/config/icpc-wf/2021/systest1/events.properties
deleted file mode 100644
index 8f461185d..000000000
--- a/config/icpc-wf/2021/systest1/events.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-standings.type=CLICS
-url=2021/systest1
diff --git a/config/icpc-wf/2021/systest1/settings.json b/config/icpc-wf/2021/systest1/settings.json
new file mode 100644
index 000000000..421d14f6f
--- /dev/null
+++ b/config/icpc-wf/2021/systest1/settings.json
@@ -0,0 +1,10 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": ".",
+ "contestId": "",
+ "eventFeedPath": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2021/systest2/events.properties b/config/icpc-wf/2021/systest2/events.properties
deleted file mode 100644
index fa0ac1ee9..000000000
--- a/config/icpc-wf/2021/systest2/events.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-standings.type=CLICS
-url=2021/systest2
-login=live
-password=landed-wafer-state-diner
-use_team_names=false
-#additional_feed.url=http://172.29.1.215:8099
-#additional_feed.event_feed_name=commentary-messages
-#additional_feed.feed_version=2020_03
diff --git a/config/icpc-wf/2021/systest2/settings.json b/config/icpc-wf/2021/systest2/settings.json
new file mode 100644
index 000000000..11828a08f
--- /dev/null
+++ b/config/icpc-wf/2021/systest2/settings.json
@@ -0,0 +1,11 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": ".",
+ "contestId": "",
+ "eventFeedPath": ""
+ }
+ ],
+ "useTeamNames": false
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2021/test0/events.properties b/config/icpc-wf/2021/test0/events.properties
deleted file mode 100644
index 4a30df3a2..000000000
--- a/config/icpc-wf/2021/test0/events.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-standings.type=CLICS
-url=2021/test0
-use_team_names=false
diff --git a/config/icpc-wf/2021/test0/settings.json b/config/icpc-wf/2021/test0/settings.json
new file mode 100644
index 000000000..11828a08f
--- /dev/null
+++ b/config/icpc-wf/2021/test0/settings.json
@@ -0,0 +1,11 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": ".",
+ "contestId": "",
+ "eventFeedPath": ""
+ }
+ ],
+ "useTeamNames": false
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2021/test0_1/events.properties b/config/icpc-wf/2021/test0_1/events.properties
deleted file mode 100644
index fcc54be56..000000000
--- a/config/icpc-wf/2021/test0_1/events.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-standings.type=CLICS
-url=https://172.29.1.207:8443/api/contests/test0
-use_team_names=false
diff --git a/config/icpc-wf/2021/test0_1/settings.json b/config/icpc-wf/2021/test0_1/settings.json
new file mode 100644
index 000000000..319674cef
--- /dev/null
+++ b/config/icpc-wf/2021/test0_1/settings.json
@@ -0,0 +1,11 @@
+{
+ "type": "clics",
+ "feeds": [
+ {
+ "url": "https://172.29.1.207:8443/api/contests/test0",
+ "contestId": "",
+ "eventFeedPath": ""
+ }
+ ],
+ "useTeamNames": false
+}
\ No newline at end of file
diff --git a/config/icpc-wf/2014/events.xml b/config/icpc-wf/v2-configs/2014/events.xml
similarity index 100%
rename from config/icpc-wf/2014/events.xml
rename to config/icpc-wf/v2-configs/2014/events.xml
diff --git a/config/icpc-wf/2014/hashtags.tsv b/config/icpc-wf/v2-configs/2014/hashtags.tsv
similarity index 100%
rename from config/icpc-wf/2014/hashtags.tsv
rename to config/icpc-wf/v2-configs/2014/hashtags.tsv
diff --git a/config/icpc-wf/2014/problemset.yaml b/config/icpc-wf/v2-configs/2014/problemset.yaml
similarity index 100%
rename from config/icpc-wf/2014/problemset.yaml
rename to config/icpc-wf/v2-configs/2014/problemset.yaml
diff --git a/config/icpc-wf/2014/teams.tsv b/config/icpc-wf/v2-configs/2014/teams.tsv
similarity index 100%
rename from config/icpc-wf/2014/teams.tsv
rename to config/icpc-wf/v2-configs/2014/teams.tsv
diff --git a/config/icpc-wf/2015/events-analyst.xml b/config/icpc-wf/v2-configs/2015/events-analyst.xml
similarity index 100%
rename from config/icpc-wf/2015/events-analyst.xml
rename to config/icpc-wf/v2-configs/2015/events-analyst.xml
diff --git a/config/icpc-wf/2015/events.xml b/config/icpc-wf/v2-configs/2015/events.xml
similarity index 100%
rename from config/icpc-wf/2015/events.xml
rename to config/icpc-wf/v2-configs/2015/events.xml
diff --git a/config/icpc-wf/2015/problemset.yaml b/config/icpc-wf/v2-configs/2015/problemset.yaml
similarity index 100%
rename from config/icpc-wf/2015/problemset.yaml
rename to config/icpc-wf/v2-configs/2015/problemset.yaml
diff --git a/config/icpc-wf/2015/teams.tsv b/config/icpc-wf/v2-configs/2015/teams.tsv
similarity index 100%
rename from config/icpc-wf/2015/teams.tsv
rename to config/icpc-wf/v2-configs/2015/teams.tsv
diff --git a/config/icpc-wf/2016/events.xml b/config/icpc-wf/v2-configs/2016/events.xml
similarity index 100%
rename from config/icpc-wf/2016/events.xml
rename to config/icpc-wf/v2-configs/2016/events.xml
diff --git a/config/icpc-wf/2016/problem.json b/config/icpc-wf/v2-configs/2016/problem.json
similarity index 100%
rename from config/icpc-wf/2016/problem.json
rename to config/icpc-wf/v2-configs/2016/problem.json
diff --git a/config/icpc-wf/2016/teams.json b/config/icpc-wf/v2-configs/2016/teams.json
similarity index 100%
rename from config/icpc-wf/2016/teams.json
rename to config/icpc-wf/v2-configs/2016/teams.json
diff --git a/config/icpc-wf/2017/contest/events.properties b/config/icpc-wf/v2-configs/2017/contest/events.properties
similarity index 100%
rename from config/icpc-wf/2017/contest/events.properties
rename to config/icpc-wf/v2-configs/2017/contest/events.properties
diff --git a/config/icpc-wf/2017/contest/mainscreen.properties b/config/icpc-wf/v2-configs/2017/contest/mainscreen.properties
similarity index 100%
rename from config/icpc-wf/2017/contest/mainscreen.properties
rename to config/icpc-wf/v2-configs/2017/contest/mainscreen.properties
diff --git a/config/icpc-wf/2017/contest/teamData/1.json b/config/icpc-wf/v2-configs/2017/contest/teamData/1.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/1.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/1.json
diff --git a/config/icpc-wf/2017/contest/teamData/1.png b/config/icpc-wf/v2-configs/2017/contest/teamData/1.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/1.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/1.png
diff --git a/config/icpc-wf/2017/contest/teamData/10.json b/config/icpc-wf/v2-configs/2017/contest/teamData/10.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/10.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/10.json
diff --git a/config/icpc-wf/2017/contest/teamData/10.png b/config/icpc-wf/v2-configs/2017/contest/teamData/10.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/10.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/10.png
diff --git a/config/icpc-wf/2017/contest/teamData/100.json b/config/icpc-wf/v2-configs/2017/contest/teamData/100.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/100.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/100.json
diff --git a/config/icpc-wf/2017/contest/teamData/100.png b/config/icpc-wf/v2-configs/2017/contest/teamData/100.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/100.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/100.png
diff --git a/config/icpc-wf/2017/contest/teamData/101.json b/config/icpc-wf/v2-configs/2017/contest/teamData/101.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/101.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/101.json
diff --git a/config/icpc-wf/2017/contest/teamData/101.png b/config/icpc-wf/v2-configs/2017/contest/teamData/101.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/101.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/101.png
diff --git a/config/icpc-wf/2017/contest/teamData/102.json b/config/icpc-wf/v2-configs/2017/contest/teamData/102.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/102.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/102.json
diff --git a/config/icpc-wf/2017/contest/teamData/102.png b/config/icpc-wf/v2-configs/2017/contest/teamData/102.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/102.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/102.png
diff --git a/config/icpc-wf/2017/contest/teamData/103.json b/config/icpc-wf/v2-configs/2017/contest/teamData/103.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/103.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/103.json
diff --git a/config/icpc-wf/2017/contest/teamData/103.png b/config/icpc-wf/v2-configs/2017/contest/teamData/103.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/103.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/103.png
diff --git a/config/icpc-wf/2017/contest/teamData/104.json b/config/icpc-wf/v2-configs/2017/contest/teamData/104.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/104.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/104.json
diff --git a/config/icpc-wf/2017/contest/teamData/104.png b/config/icpc-wf/v2-configs/2017/contest/teamData/104.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/104.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/104.png
diff --git a/config/icpc-wf/2017/contest/teamData/105.json b/config/icpc-wf/v2-configs/2017/contest/teamData/105.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/105.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/105.json
diff --git a/config/icpc-wf/2017/contest/teamData/105.png b/config/icpc-wf/v2-configs/2017/contest/teamData/105.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/105.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/105.png
diff --git a/config/icpc-wf/2017/contest/teamData/106.json b/config/icpc-wf/v2-configs/2017/contest/teamData/106.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/106.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/106.json
diff --git a/config/icpc-wf/2017/contest/teamData/106.png b/config/icpc-wf/v2-configs/2017/contest/teamData/106.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/106.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/106.png
diff --git a/config/icpc-wf/2017/contest/teamData/107.json b/config/icpc-wf/v2-configs/2017/contest/teamData/107.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/107.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/107.json
diff --git a/config/icpc-wf/2017/contest/teamData/107.png b/config/icpc-wf/v2-configs/2017/contest/teamData/107.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/107.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/107.png
diff --git a/config/icpc-wf/2017/contest/teamData/108.json b/config/icpc-wf/v2-configs/2017/contest/teamData/108.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/108.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/108.json
diff --git a/config/icpc-wf/2017/contest/teamData/108.png b/config/icpc-wf/v2-configs/2017/contest/teamData/108.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/108.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/108.png
diff --git a/config/icpc-wf/2017/contest/teamData/109.json b/config/icpc-wf/v2-configs/2017/contest/teamData/109.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/109.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/109.json
diff --git a/config/icpc-wf/2017/contest/teamData/109.png b/config/icpc-wf/v2-configs/2017/contest/teamData/109.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/109.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/109.png
diff --git a/config/icpc-wf/2017/contest/teamData/11.json b/config/icpc-wf/v2-configs/2017/contest/teamData/11.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/11.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/11.json
diff --git a/config/icpc-wf/2017/contest/teamData/11.png b/config/icpc-wf/v2-configs/2017/contest/teamData/11.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/11.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/11.png
diff --git a/config/icpc-wf/2017/contest/teamData/110.json b/config/icpc-wf/v2-configs/2017/contest/teamData/110.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/110.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/110.json
diff --git a/config/icpc-wf/2017/contest/teamData/110.png b/config/icpc-wf/v2-configs/2017/contest/teamData/110.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/110.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/110.png
diff --git a/config/icpc-wf/2017/contest/teamData/111.json b/config/icpc-wf/v2-configs/2017/contest/teamData/111.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/111.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/111.json
diff --git a/config/icpc-wf/2017/contest/teamData/111.png b/config/icpc-wf/v2-configs/2017/contest/teamData/111.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/111.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/111.png
diff --git a/config/icpc-wf/2017/contest/teamData/112.json b/config/icpc-wf/v2-configs/2017/contest/teamData/112.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/112.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/112.json
diff --git a/config/icpc-wf/2017/contest/teamData/112.png b/config/icpc-wf/v2-configs/2017/contest/teamData/112.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/112.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/112.png
diff --git a/config/icpc-wf/2017/contest/teamData/113.json b/config/icpc-wf/v2-configs/2017/contest/teamData/113.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/113.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/113.json
diff --git a/config/icpc-wf/2017/contest/teamData/113.png b/config/icpc-wf/v2-configs/2017/contest/teamData/113.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/113.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/113.png
diff --git a/config/icpc-wf/2017/contest/teamData/114.json b/config/icpc-wf/v2-configs/2017/contest/teamData/114.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/114.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/114.json
diff --git a/config/icpc-wf/2017/contest/teamData/114.png b/config/icpc-wf/v2-configs/2017/contest/teamData/114.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/114.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/114.png
diff --git a/config/icpc-wf/2017/contest/teamData/115.json b/config/icpc-wf/v2-configs/2017/contest/teamData/115.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/115.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/115.json
diff --git a/config/icpc-wf/2017/contest/teamData/115.png b/config/icpc-wf/v2-configs/2017/contest/teamData/115.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/115.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/115.png
diff --git a/config/icpc-wf/2017/contest/teamData/116.json b/config/icpc-wf/v2-configs/2017/contest/teamData/116.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/116.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/116.json
diff --git a/config/icpc-wf/2017/contest/teamData/116.png b/config/icpc-wf/v2-configs/2017/contest/teamData/116.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/116.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/116.png
diff --git a/config/icpc-wf/2017/contest/teamData/117.json b/config/icpc-wf/v2-configs/2017/contest/teamData/117.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/117.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/117.json
diff --git a/config/icpc-wf/2017/contest/teamData/117.png b/config/icpc-wf/v2-configs/2017/contest/teamData/117.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/117.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/117.png
diff --git a/config/icpc-wf/2017/contest/teamData/118.json b/config/icpc-wf/v2-configs/2017/contest/teamData/118.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/118.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/118.json
diff --git a/config/icpc-wf/2017/contest/teamData/118.png b/config/icpc-wf/v2-configs/2017/contest/teamData/118.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/118.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/118.png
diff --git a/config/icpc-wf/2017/contest/teamData/119.json b/config/icpc-wf/v2-configs/2017/contest/teamData/119.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/119.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/119.json
diff --git a/config/icpc-wf/2017/contest/teamData/119.png b/config/icpc-wf/v2-configs/2017/contest/teamData/119.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/119.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/119.png
diff --git a/config/icpc-wf/2017/contest/teamData/12.json b/config/icpc-wf/v2-configs/2017/contest/teamData/12.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/12.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/12.json
diff --git a/config/icpc-wf/2017/contest/teamData/12.png b/config/icpc-wf/v2-configs/2017/contest/teamData/12.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/12.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/12.png
diff --git a/config/icpc-wf/2017/contest/teamData/120.json b/config/icpc-wf/v2-configs/2017/contest/teamData/120.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/120.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/120.json
diff --git a/config/icpc-wf/2017/contest/teamData/120.png b/config/icpc-wf/v2-configs/2017/contest/teamData/120.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/120.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/120.png
diff --git a/config/icpc-wf/2017/contest/teamData/121.json b/config/icpc-wf/v2-configs/2017/contest/teamData/121.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/121.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/121.json
diff --git a/config/icpc-wf/2017/contest/teamData/121.png b/config/icpc-wf/v2-configs/2017/contest/teamData/121.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/121.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/121.png
diff --git a/config/icpc-wf/2017/contest/teamData/122.json b/config/icpc-wf/v2-configs/2017/contest/teamData/122.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/122.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/122.json
diff --git a/config/icpc-wf/2017/contest/teamData/122.png b/config/icpc-wf/v2-configs/2017/contest/teamData/122.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/122.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/122.png
diff --git a/config/icpc-wf/2017/contest/teamData/123.json b/config/icpc-wf/v2-configs/2017/contest/teamData/123.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/123.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/123.json
diff --git a/config/icpc-wf/2017/contest/teamData/123.png b/config/icpc-wf/v2-configs/2017/contest/teamData/123.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/123.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/123.png
diff --git a/config/icpc-wf/2017/contest/teamData/124.json b/config/icpc-wf/v2-configs/2017/contest/teamData/124.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/124.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/124.json
diff --git a/config/icpc-wf/2017/contest/teamData/124.png b/config/icpc-wf/v2-configs/2017/contest/teamData/124.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/124.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/124.png
diff --git a/config/icpc-wf/2017/contest/teamData/125.json b/config/icpc-wf/v2-configs/2017/contest/teamData/125.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/125.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/125.json
diff --git a/config/icpc-wf/2017/contest/teamData/125.png b/config/icpc-wf/v2-configs/2017/contest/teamData/125.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/125.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/125.png
diff --git a/config/icpc-wf/2017/contest/teamData/126.json b/config/icpc-wf/v2-configs/2017/contest/teamData/126.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/126.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/126.json
diff --git a/config/icpc-wf/2017/contest/teamData/126.png b/config/icpc-wf/v2-configs/2017/contest/teamData/126.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/126.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/126.png
diff --git a/config/icpc-wf/2017/contest/teamData/127.json b/config/icpc-wf/v2-configs/2017/contest/teamData/127.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/127.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/127.json
diff --git a/config/icpc-wf/2017/contest/teamData/127.png b/config/icpc-wf/v2-configs/2017/contest/teamData/127.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/127.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/127.png
diff --git a/config/icpc-wf/2017/contest/teamData/128.json b/config/icpc-wf/v2-configs/2017/contest/teamData/128.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/128.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/128.json
diff --git a/config/icpc-wf/2017/contest/teamData/128.png b/config/icpc-wf/v2-configs/2017/contest/teamData/128.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/128.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/128.png
diff --git a/config/icpc-wf/2017/contest/teamData/129.json b/config/icpc-wf/v2-configs/2017/contest/teamData/129.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/129.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/129.json
diff --git a/config/icpc-wf/2017/contest/teamData/129.png b/config/icpc-wf/v2-configs/2017/contest/teamData/129.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/129.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/129.png
diff --git a/config/icpc-wf/2017/contest/teamData/13.json b/config/icpc-wf/v2-configs/2017/contest/teamData/13.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/13.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/13.json
diff --git a/config/icpc-wf/2017/contest/teamData/13.png b/config/icpc-wf/v2-configs/2017/contest/teamData/13.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/13.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/13.png
diff --git a/config/icpc-wf/2017/contest/teamData/130.json b/config/icpc-wf/v2-configs/2017/contest/teamData/130.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/130.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/130.json
diff --git a/config/icpc-wf/2017/contest/teamData/130.png b/config/icpc-wf/v2-configs/2017/contest/teamData/130.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/130.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/130.png
diff --git a/config/icpc-wf/2017/contest/teamData/131.json b/config/icpc-wf/v2-configs/2017/contest/teamData/131.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/131.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/131.json
diff --git a/config/icpc-wf/2017/contest/teamData/131.png b/config/icpc-wf/v2-configs/2017/contest/teamData/131.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/131.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/131.png
diff --git a/config/icpc-wf/2017/contest/teamData/132.json b/config/icpc-wf/v2-configs/2017/contest/teamData/132.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/132.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/132.json
diff --git a/config/icpc-wf/2017/contest/teamData/132.png b/config/icpc-wf/v2-configs/2017/contest/teamData/132.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/132.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/132.png
diff --git a/config/icpc-wf/2017/contest/teamData/133.json b/config/icpc-wf/v2-configs/2017/contest/teamData/133.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/133.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/133.json
diff --git a/config/icpc-wf/2017/contest/teamData/133.png b/config/icpc-wf/v2-configs/2017/contest/teamData/133.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/133.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/133.png
diff --git a/config/icpc-wf/2017/contest/teamData/14.json b/config/icpc-wf/v2-configs/2017/contest/teamData/14.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/14.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/14.json
diff --git a/config/icpc-wf/2017/contest/teamData/14.png b/config/icpc-wf/v2-configs/2017/contest/teamData/14.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/14.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/14.png
diff --git a/config/icpc-wf/2017/contest/teamData/15.json b/config/icpc-wf/v2-configs/2017/contest/teamData/15.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/15.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/15.json
diff --git a/config/icpc-wf/2017/contest/teamData/15.png b/config/icpc-wf/v2-configs/2017/contest/teamData/15.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/15.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/15.png
diff --git a/config/icpc-wf/2017/contest/teamData/16.json b/config/icpc-wf/v2-configs/2017/contest/teamData/16.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/16.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/16.json
diff --git a/config/icpc-wf/2017/contest/teamData/16.png b/config/icpc-wf/v2-configs/2017/contest/teamData/16.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/16.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/16.png
diff --git a/config/icpc-wf/2017/contest/teamData/17.json b/config/icpc-wf/v2-configs/2017/contest/teamData/17.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/17.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/17.json
diff --git a/config/icpc-wf/2017/contest/teamData/17.png b/config/icpc-wf/v2-configs/2017/contest/teamData/17.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/17.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/17.png
diff --git a/config/icpc-wf/2017/contest/teamData/18.json b/config/icpc-wf/v2-configs/2017/contest/teamData/18.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/18.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/18.json
diff --git a/config/icpc-wf/2017/contest/teamData/18.png b/config/icpc-wf/v2-configs/2017/contest/teamData/18.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/18.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/18.png
diff --git a/config/icpc-wf/2017/contest/teamData/19.json b/config/icpc-wf/v2-configs/2017/contest/teamData/19.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/19.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/19.json
diff --git a/config/icpc-wf/2017/contest/teamData/19.png b/config/icpc-wf/v2-configs/2017/contest/teamData/19.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/19.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/19.png
diff --git a/config/icpc-wf/2017/contest/teamData/2.json b/config/icpc-wf/v2-configs/2017/contest/teamData/2.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/2.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/2.json
diff --git a/config/icpc-wf/2017/contest/teamData/2.png b/config/icpc-wf/v2-configs/2017/contest/teamData/2.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/2.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/2.png
diff --git a/config/icpc-wf/2017/contest/teamData/20.json b/config/icpc-wf/v2-configs/2017/contest/teamData/20.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/20.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/20.json
diff --git a/config/icpc-wf/2017/contest/teamData/20.png b/config/icpc-wf/v2-configs/2017/contest/teamData/20.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/20.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/20.png
diff --git a/config/icpc-wf/2017/contest/teamData/21.json b/config/icpc-wf/v2-configs/2017/contest/teamData/21.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/21.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/21.json
diff --git a/config/icpc-wf/2017/contest/teamData/21.png b/config/icpc-wf/v2-configs/2017/contest/teamData/21.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/21.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/21.png
diff --git a/config/icpc-wf/2017/contest/teamData/22.json b/config/icpc-wf/v2-configs/2017/contest/teamData/22.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/22.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/22.json
diff --git a/config/icpc-wf/2017/contest/teamData/22.png b/config/icpc-wf/v2-configs/2017/contest/teamData/22.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/22.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/22.png
diff --git a/config/icpc-wf/2017/contest/teamData/23.json b/config/icpc-wf/v2-configs/2017/contest/teamData/23.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/23.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/23.json
diff --git a/config/icpc-wf/2017/contest/teamData/23.png b/config/icpc-wf/v2-configs/2017/contest/teamData/23.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/23.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/23.png
diff --git a/config/icpc-wf/2017/contest/teamData/24.json b/config/icpc-wf/v2-configs/2017/contest/teamData/24.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/24.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/24.json
diff --git a/config/icpc-wf/2017/contest/teamData/24.png b/config/icpc-wf/v2-configs/2017/contest/teamData/24.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/24.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/24.png
diff --git a/config/icpc-wf/2017/contest/teamData/25.json b/config/icpc-wf/v2-configs/2017/contest/teamData/25.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/25.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/25.json
diff --git a/config/icpc-wf/2017/contest/teamData/25.png b/config/icpc-wf/v2-configs/2017/contest/teamData/25.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/25.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/25.png
diff --git a/config/icpc-wf/2017/contest/teamData/26.json b/config/icpc-wf/v2-configs/2017/contest/teamData/26.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/26.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/26.json
diff --git a/config/icpc-wf/2017/contest/teamData/26.png b/config/icpc-wf/v2-configs/2017/contest/teamData/26.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/26.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/26.png
diff --git a/config/icpc-wf/2017/contest/teamData/27.json b/config/icpc-wf/v2-configs/2017/contest/teamData/27.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/27.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/27.json
diff --git a/config/icpc-wf/2017/contest/teamData/27.png b/config/icpc-wf/v2-configs/2017/contest/teamData/27.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/27.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/27.png
diff --git a/config/icpc-wf/2017/contest/teamData/28.json b/config/icpc-wf/v2-configs/2017/contest/teamData/28.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/28.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/28.json
diff --git a/config/icpc-wf/2017/contest/teamData/28.png b/config/icpc-wf/v2-configs/2017/contest/teamData/28.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/28.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/28.png
diff --git a/config/icpc-wf/2017/contest/teamData/29.json b/config/icpc-wf/v2-configs/2017/contest/teamData/29.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/29.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/29.json
diff --git a/config/icpc-wf/2017/contest/teamData/29.png b/config/icpc-wf/v2-configs/2017/contest/teamData/29.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/29.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/29.png
diff --git a/config/icpc-wf/2017/contest/teamData/3.json b/config/icpc-wf/v2-configs/2017/contest/teamData/3.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/3.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/3.json
diff --git a/config/icpc-wf/2017/contest/teamData/3.png b/config/icpc-wf/v2-configs/2017/contest/teamData/3.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/3.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/3.png
diff --git a/config/icpc-wf/2017/contest/teamData/30.json b/config/icpc-wf/v2-configs/2017/contest/teamData/30.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/30.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/30.json
diff --git a/config/icpc-wf/2017/contest/teamData/30.png b/config/icpc-wf/v2-configs/2017/contest/teamData/30.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/30.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/30.png
diff --git a/config/icpc-wf/2017/contest/teamData/31.json b/config/icpc-wf/v2-configs/2017/contest/teamData/31.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/31.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/31.json
diff --git a/config/icpc-wf/2017/contest/teamData/31.png b/config/icpc-wf/v2-configs/2017/contest/teamData/31.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/31.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/31.png
diff --git a/config/icpc-wf/2017/contest/teamData/32.json b/config/icpc-wf/v2-configs/2017/contest/teamData/32.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/32.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/32.json
diff --git a/config/icpc-wf/2017/contest/teamData/32.png b/config/icpc-wf/v2-configs/2017/contest/teamData/32.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/32.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/32.png
diff --git a/config/icpc-wf/2017/contest/teamData/33.json b/config/icpc-wf/v2-configs/2017/contest/teamData/33.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/33.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/33.json
diff --git a/config/icpc-wf/2017/contest/teamData/33.png b/config/icpc-wf/v2-configs/2017/contest/teamData/33.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/33.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/33.png
diff --git a/config/icpc-wf/2017/contest/teamData/34.json b/config/icpc-wf/v2-configs/2017/contest/teamData/34.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/34.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/34.json
diff --git a/config/icpc-wf/2017/contest/teamData/34.png b/config/icpc-wf/v2-configs/2017/contest/teamData/34.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/34.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/34.png
diff --git a/config/icpc-wf/2017/contest/teamData/35.json b/config/icpc-wf/v2-configs/2017/contest/teamData/35.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/35.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/35.json
diff --git a/config/icpc-wf/2017/contest/teamData/35.png b/config/icpc-wf/v2-configs/2017/contest/teamData/35.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/35.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/35.png
diff --git a/config/icpc-wf/2017/contest/teamData/36.json b/config/icpc-wf/v2-configs/2017/contest/teamData/36.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/36.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/36.json
diff --git a/config/icpc-wf/2017/contest/teamData/36.png b/config/icpc-wf/v2-configs/2017/contest/teamData/36.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/36.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/36.png
diff --git a/config/icpc-wf/2017/contest/teamData/37.json b/config/icpc-wf/v2-configs/2017/contest/teamData/37.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/37.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/37.json
diff --git a/config/icpc-wf/2017/contest/teamData/37.png b/config/icpc-wf/v2-configs/2017/contest/teamData/37.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/37.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/37.png
diff --git a/config/icpc-wf/2017/contest/teamData/38.json b/config/icpc-wf/v2-configs/2017/contest/teamData/38.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/38.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/38.json
diff --git a/config/icpc-wf/2017/contest/teamData/38.png b/config/icpc-wf/v2-configs/2017/contest/teamData/38.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/38.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/38.png
diff --git a/config/icpc-wf/2017/contest/teamData/39.json b/config/icpc-wf/v2-configs/2017/contest/teamData/39.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/39.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/39.json
diff --git a/config/icpc-wf/2017/contest/teamData/39.png b/config/icpc-wf/v2-configs/2017/contest/teamData/39.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/39.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/39.png
diff --git a/config/icpc-wf/2017/contest/teamData/4.json b/config/icpc-wf/v2-configs/2017/contest/teamData/4.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/4.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/4.json
diff --git a/config/icpc-wf/2017/contest/teamData/4.png b/config/icpc-wf/v2-configs/2017/contest/teamData/4.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/4.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/4.png
diff --git a/config/icpc-wf/2017/contest/teamData/40.json b/config/icpc-wf/v2-configs/2017/contest/teamData/40.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/40.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/40.json
diff --git a/config/icpc-wf/2017/contest/teamData/40.png b/config/icpc-wf/v2-configs/2017/contest/teamData/40.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/40.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/40.png
diff --git a/config/icpc-wf/2017/contest/teamData/41.json b/config/icpc-wf/v2-configs/2017/contest/teamData/41.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/41.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/41.json
diff --git a/config/icpc-wf/2017/contest/teamData/41.png b/config/icpc-wf/v2-configs/2017/contest/teamData/41.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/41.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/41.png
diff --git a/config/icpc-wf/2017/contest/teamData/42.json b/config/icpc-wf/v2-configs/2017/contest/teamData/42.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/42.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/42.json
diff --git a/config/icpc-wf/2017/contest/teamData/42.png b/config/icpc-wf/v2-configs/2017/contest/teamData/42.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/42.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/42.png
diff --git a/config/icpc-wf/2017/contest/teamData/43.json b/config/icpc-wf/v2-configs/2017/contest/teamData/43.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/43.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/43.json
diff --git a/config/icpc-wf/2017/contest/teamData/43.png b/config/icpc-wf/v2-configs/2017/contest/teamData/43.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/43.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/43.png
diff --git a/config/icpc-wf/2017/contest/teamData/44.json b/config/icpc-wf/v2-configs/2017/contest/teamData/44.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/44.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/44.json
diff --git a/config/icpc-wf/2017/contest/teamData/44.png b/config/icpc-wf/v2-configs/2017/contest/teamData/44.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/44.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/44.png
diff --git a/config/icpc-wf/2017/contest/teamData/45.json b/config/icpc-wf/v2-configs/2017/contest/teamData/45.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/45.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/45.json
diff --git a/config/icpc-wf/2017/contest/teamData/45.png b/config/icpc-wf/v2-configs/2017/contest/teamData/45.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/45.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/45.png
diff --git a/config/icpc-wf/2017/contest/teamData/46.json b/config/icpc-wf/v2-configs/2017/contest/teamData/46.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/46.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/46.json
diff --git a/config/icpc-wf/2017/contest/teamData/46.png b/config/icpc-wf/v2-configs/2017/contest/teamData/46.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/46.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/46.png
diff --git a/config/icpc-wf/2017/contest/teamData/47.json b/config/icpc-wf/v2-configs/2017/contest/teamData/47.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/47.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/47.json
diff --git a/config/icpc-wf/2017/contest/teamData/47.png b/config/icpc-wf/v2-configs/2017/contest/teamData/47.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/47.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/47.png
diff --git a/config/icpc-wf/2017/contest/teamData/48.json b/config/icpc-wf/v2-configs/2017/contest/teamData/48.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/48.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/48.json
diff --git a/config/icpc-wf/2017/contest/teamData/48.png b/config/icpc-wf/v2-configs/2017/contest/teamData/48.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/48.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/48.png
diff --git a/config/icpc-wf/2017/contest/teamData/49.json b/config/icpc-wf/v2-configs/2017/contest/teamData/49.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/49.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/49.json
diff --git a/config/icpc-wf/2017/contest/teamData/49.png b/config/icpc-wf/v2-configs/2017/contest/teamData/49.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/49.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/49.png
diff --git a/config/icpc-wf/2017/contest/teamData/5.json b/config/icpc-wf/v2-configs/2017/contest/teamData/5.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/5.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/5.json
diff --git a/config/icpc-wf/2017/contest/teamData/5.png b/config/icpc-wf/v2-configs/2017/contest/teamData/5.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/5.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/5.png
diff --git a/config/icpc-wf/2017/contest/teamData/50.json b/config/icpc-wf/v2-configs/2017/contest/teamData/50.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/50.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/50.json
diff --git a/config/icpc-wf/2017/contest/teamData/50.png b/config/icpc-wf/v2-configs/2017/contest/teamData/50.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/50.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/50.png
diff --git a/config/icpc-wf/2017/contest/teamData/51.json b/config/icpc-wf/v2-configs/2017/contest/teamData/51.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/51.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/51.json
diff --git a/config/icpc-wf/2017/contest/teamData/51.png b/config/icpc-wf/v2-configs/2017/contest/teamData/51.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/51.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/51.png
diff --git a/config/icpc-wf/2017/contest/teamData/52.json b/config/icpc-wf/v2-configs/2017/contest/teamData/52.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/52.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/52.json
diff --git a/config/icpc-wf/2017/contest/teamData/52.png b/config/icpc-wf/v2-configs/2017/contest/teamData/52.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/52.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/52.png
diff --git a/config/icpc-wf/2017/contest/teamData/53.json b/config/icpc-wf/v2-configs/2017/contest/teamData/53.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/53.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/53.json
diff --git a/config/icpc-wf/2017/contest/teamData/53.png b/config/icpc-wf/v2-configs/2017/contest/teamData/53.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/53.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/53.png
diff --git a/config/icpc-wf/2017/contest/teamData/54.json b/config/icpc-wf/v2-configs/2017/contest/teamData/54.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/54.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/54.json
diff --git a/config/icpc-wf/2017/contest/teamData/54.png b/config/icpc-wf/v2-configs/2017/contest/teamData/54.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/54.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/54.png
diff --git a/config/icpc-wf/2017/contest/teamData/55.json b/config/icpc-wf/v2-configs/2017/contest/teamData/55.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/55.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/55.json
diff --git a/config/icpc-wf/2017/contest/teamData/55.png b/config/icpc-wf/v2-configs/2017/contest/teamData/55.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/55.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/55.png
diff --git a/config/icpc-wf/2017/contest/teamData/56.json b/config/icpc-wf/v2-configs/2017/contest/teamData/56.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/56.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/56.json
diff --git a/config/icpc-wf/2017/contest/teamData/56.png b/config/icpc-wf/v2-configs/2017/contest/teamData/56.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/56.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/56.png
diff --git a/config/icpc-wf/2017/contest/teamData/57.json b/config/icpc-wf/v2-configs/2017/contest/teamData/57.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/57.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/57.json
diff --git a/config/icpc-wf/2017/contest/teamData/57.png b/config/icpc-wf/v2-configs/2017/contest/teamData/57.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/57.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/57.png
diff --git a/config/icpc-wf/2017/contest/teamData/58.json b/config/icpc-wf/v2-configs/2017/contest/teamData/58.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/58.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/58.json
diff --git a/config/icpc-wf/2017/contest/teamData/58.png b/config/icpc-wf/v2-configs/2017/contest/teamData/58.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/58.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/58.png
diff --git a/config/icpc-wf/2017/contest/teamData/59.json b/config/icpc-wf/v2-configs/2017/contest/teamData/59.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/59.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/59.json
diff --git a/config/icpc-wf/2017/contest/teamData/59.png b/config/icpc-wf/v2-configs/2017/contest/teamData/59.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/59.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/59.png
diff --git a/config/icpc-wf/2017/contest/teamData/6.json b/config/icpc-wf/v2-configs/2017/contest/teamData/6.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/6.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/6.json
diff --git a/config/icpc-wf/2017/contest/teamData/6.png b/config/icpc-wf/v2-configs/2017/contest/teamData/6.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/6.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/6.png
diff --git a/config/icpc-wf/2017/contest/teamData/60.json b/config/icpc-wf/v2-configs/2017/contest/teamData/60.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/60.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/60.json
diff --git a/config/icpc-wf/2017/contest/teamData/60.png b/config/icpc-wf/v2-configs/2017/contest/teamData/60.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/60.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/60.png
diff --git a/config/icpc-wf/2017/contest/teamData/61.json b/config/icpc-wf/v2-configs/2017/contest/teamData/61.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/61.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/61.json
diff --git a/config/icpc-wf/2017/contest/teamData/61.png b/config/icpc-wf/v2-configs/2017/contest/teamData/61.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/61.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/61.png
diff --git a/config/icpc-wf/2017/contest/teamData/62.json b/config/icpc-wf/v2-configs/2017/contest/teamData/62.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/62.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/62.json
diff --git a/config/icpc-wf/2017/contest/teamData/62.png b/config/icpc-wf/v2-configs/2017/contest/teamData/62.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/62.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/62.png
diff --git a/config/icpc-wf/2017/contest/teamData/63.json b/config/icpc-wf/v2-configs/2017/contest/teamData/63.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/63.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/63.json
diff --git a/config/icpc-wf/2017/contest/teamData/63.png b/config/icpc-wf/v2-configs/2017/contest/teamData/63.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/63.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/63.png
diff --git a/config/icpc-wf/2017/contest/teamData/64.json b/config/icpc-wf/v2-configs/2017/contest/teamData/64.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/64.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/64.json
diff --git a/config/icpc-wf/2017/contest/teamData/64.png b/config/icpc-wf/v2-configs/2017/contest/teamData/64.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/64.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/64.png
diff --git a/config/icpc-wf/2017/contest/teamData/65.json b/config/icpc-wf/v2-configs/2017/contest/teamData/65.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/65.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/65.json
diff --git a/config/icpc-wf/2017/contest/teamData/65.png b/config/icpc-wf/v2-configs/2017/contest/teamData/65.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/65.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/65.png
diff --git a/config/icpc-wf/2017/contest/teamData/66.json b/config/icpc-wf/v2-configs/2017/contest/teamData/66.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/66.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/66.json
diff --git a/config/icpc-wf/2017/contest/teamData/66.png b/config/icpc-wf/v2-configs/2017/contest/teamData/66.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/66.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/66.png
diff --git a/config/icpc-wf/2017/contest/teamData/67.json b/config/icpc-wf/v2-configs/2017/contest/teamData/67.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/67.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/67.json
diff --git a/config/icpc-wf/2017/contest/teamData/67.png b/config/icpc-wf/v2-configs/2017/contest/teamData/67.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/67.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/67.png
diff --git a/config/icpc-wf/2017/contest/teamData/68.json b/config/icpc-wf/v2-configs/2017/contest/teamData/68.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/68.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/68.json
diff --git a/config/icpc-wf/2017/contest/teamData/68.png b/config/icpc-wf/v2-configs/2017/contest/teamData/68.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/68.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/68.png
diff --git a/config/icpc-wf/2017/contest/teamData/69.json b/config/icpc-wf/v2-configs/2017/contest/teamData/69.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/69.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/69.json
diff --git a/config/icpc-wf/2017/contest/teamData/69.png b/config/icpc-wf/v2-configs/2017/contest/teamData/69.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/69.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/69.png
diff --git a/config/icpc-wf/2017/contest/teamData/7.json b/config/icpc-wf/v2-configs/2017/contest/teamData/7.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/7.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/7.json
diff --git a/config/icpc-wf/2017/contest/teamData/7.png b/config/icpc-wf/v2-configs/2017/contest/teamData/7.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/7.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/7.png
diff --git a/config/icpc-wf/2017/contest/teamData/70.json b/config/icpc-wf/v2-configs/2017/contest/teamData/70.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/70.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/70.json
diff --git a/config/icpc-wf/2017/contest/teamData/70.png b/config/icpc-wf/v2-configs/2017/contest/teamData/70.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/70.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/70.png
diff --git a/config/icpc-wf/2017/contest/teamData/71.json b/config/icpc-wf/v2-configs/2017/contest/teamData/71.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/71.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/71.json
diff --git a/config/icpc-wf/2017/contest/teamData/71.png b/config/icpc-wf/v2-configs/2017/contest/teamData/71.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/71.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/71.png
diff --git a/config/icpc-wf/2017/contest/teamData/72.json b/config/icpc-wf/v2-configs/2017/contest/teamData/72.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/72.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/72.json
diff --git a/config/icpc-wf/2017/contest/teamData/72.png b/config/icpc-wf/v2-configs/2017/contest/teamData/72.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/72.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/72.png
diff --git a/config/icpc-wf/2017/contest/teamData/73.json b/config/icpc-wf/v2-configs/2017/contest/teamData/73.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/73.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/73.json
diff --git a/config/icpc-wf/2017/contest/teamData/73.png b/config/icpc-wf/v2-configs/2017/contest/teamData/73.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/73.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/73.png
diff --git a/config/icpc-wf/2017/contest/teamData/74.json b/config/icpc-wf/v2-configs/2017/contest/teamData/74.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/74.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/74.json
diff --git a/config/icpc-wf/2017/contest/teamData/74.png b/config/icpc-wf/v2-configs/2017/contest/teamData/74.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/74.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/74.png
diff --git a/config/icpc-wf/2017/contest/teamData/75.json b/config/icpc-wf/v2-configs/2017/contest/teamData/75.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/75.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/75.json
diff --git a/config/icpc-wf/2017/contest/teamData/75.png b/config/icpc-wf/v2-configs/2017/contest/teamData/75.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/75.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/75.png
diff --git a/config/icpc-wf/2017/contest/teamData/76.json b/config/icpc-wf/v2-configs/2017/contest/teamData/76.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/76.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/76.json
diff --git a/config/icpc-wf/2017/contest/teamData/76.png b/config/icpc-wf/v2-configs/2017/contest/teamData/76.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/76.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/76.png
diff --git a/config/icpc-wf/2017/contest/teamData/77.json b/config/icpc-wf/v2-configs/2017/contest/teamData/77.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/77.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/77.json
diff --git a/config/icpc-wf/2017/contest/teamData/77.png b/config/icpc-wf/v2-configs/2017/contest/teamData/77.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/77.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/77.png
diff --git a/config/icpc-wf/2017/contest/teamData/78.json b/config/icpc-wf/v2-configs/2017/contest/teamData/78.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/78.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/78.json
diff --git a/config/icpc-wf/2017/contest/teamData/78.png b/config/icpc-wf/v2-configs/2017/contest/teamData/78.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/78.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/78.png
diff --git a/config/icpc-wf/2017/contest/teamData/79.json b/config/icpc-wf/v2-configs/2017/contest/teamData/79.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/79.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/79.json
diff --git a/config/icpc-wf/2017/contest/teamData/79.png b/config/icpc-wf/v2-configs/2017/contest/teamData/79.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/79.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/79.png
diff --git a/config/icpc-wf/2017/contest/teamData/8.json b/config/icpc-wf/v2-configs/2017/contest/teamData/8.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/8.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/8.json
diff --git a/config/icpc-wf/2017/contest/teamData/8.png b/config/icpc-wf/v2-configs/2017/contest/teamData/8.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/8.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/8.png
diff --git a/config/icpc-wf/2017/contest/teamData/80.json b/config/icpc-wf/v2-configs/2017/contest/teamData/80.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/80.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/80.json
diff --git a/config/icpc-wf/2017/contest/teamData/80.png b/config/icpc-wf/v2-configs/2017/contest/teamData/80.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/80.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/80.png
diff --git a/config/icpc-wf/2017/contest/teamData/81.json b/config/icpc-wf/v2-configs/2017/contest/teamData/81.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/81.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/81.json
diff --git a/config/icpc-wf/2017/contest/teamData/81.png b/config/icpc-wf/v2-configs/2017/contest/teamData/81.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/81.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/81.png
diff --git a/config/icpc-wf/2017/contest/teamData/82.json b/config/icpc-wf/v2-configs/2017/contest/teamData/82.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/82.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/82.json
diff --git a/config/icpc-wf/2017/contest/teamData/82.png b/config/icpc-wf/v2-configs/2017/contest/teamData/82.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/82.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/82.png
diff --git a/config/icpc-wf/2017/contest/teamData/83.json b/config/icpc-wf/v2-configs/2017/contest/teamData/83.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/83.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/83.json
diff --git a/config/icpc-wf/2017/contest/teamData/83.png b/config/icpc-wf/v2-configs/2017/contest/teamData/83.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/83.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/83.png
diff --git a/config/icpc-wf/2017/contest/teamData/84.json b/config/icpc-wf/v2-configs/2017/contest/teamData/84.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/84.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/84.json
diff --git a/config/icpc-wf/2017/contest/teamData/84.png b/config/icpc-wf/v2-configs/2017/contest/teamData/84.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/84.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/84.png
diff --git a/config/icpc-wf/2017/contest/teamData/85.json b/config/icpc-wf/v2-configs/2017/contest/teamData/85.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/85.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/85.json
diff --git a/config/icpc-wf/2017/contest/teamData/85.png b/config/icpc-wf/v2-configs/2017/contest/teamData/85.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/85.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/85.png
diff --git a/config/icpc-wf/2017/contest/teamData/86.json b/config/icpc-wf/v2-configs/2017/contest/teamData/86.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/86.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/86.json
diff --git a/config/icpc-wf/2017/contest/teamData/86.png b/config/icpc-wf/v2-configs/2017/contest/teamData/86.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/86.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/86.png
diff --git a/config/icpc-wf/2017/contest/teamData/87.json b/config/icpc-wf/v2-configs/2017/contest/teamData/87.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/87.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/87.json
diff --git a/config/icpc-wf/2017/contest/teamData/87.png b/config/icpc-wf/v2-configs/2017/contest/teamData/87.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/87.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/87.png
diff --git a/config/icpc-wf/2017/contest/teamData/88.json b/config/icpc-wf/v2-configs/2017/contest/teamData/88.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/88.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/88.json
diff --git a/config/icpc-wf/2017/contest/teamData/88.png b/config/icpc-wf/v2-configs/2017/contest/teamData/88.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/88.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/88.png
diff --git a/config/icpc-wf/2017/contest/teamData/89.json b/config/icpc-wf/v2-configs/2017/contest/teamData/89.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/89.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/89.json
diff --git a/config/icpc-wf/2017/contest/teamData/89.png b/config/icpc-wf/v2-configs/2017/contest/teamData/89.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/89.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/89.png
diff --git a/config/icpc-wf/2017/contest/teamData/9.json b/config/icpc-wf/v2-configs/2017/contest/teamData/9.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/9.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/9.json
diff --git a/config/icpc-wf/2017/contest/teamData/9.png b/config/icpc-wf/v2-configs/2017/contest/teamData/9.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/9.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/9.png
diff --git a/config/icpc-wf/2017/contest/teamData/90.json b/config/icpc-wf/v2-configs/2017/contest/teamData/90.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/90.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/90.json
diff --git a/config/icpc-wf/2017/contest/teamData/90.png b/config/icpc-wf/v2-configs/2017/contest/teamData/90.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/90.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/90.png
diff --git a/config/icpc-wf/2017/contest/teamData/91.json b/config/icpc-wf/v2-configs/2017/contest/teamData/91.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/91.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/91.json
diff --git a/config/icpc-wf/2017/contest/teamData/91.png b/config/icpc-wf/v2-configs/2017/contest/teamData/91.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/91.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/91.png
diff --git a/config/icpc-wf/2017/contest/teamData/92.json b/config/icpc-wf/v2-configs/2017/contest/teamData/92.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/92.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/92.json
diff --git a/config/icpc-wf/2017/contest/teamData/92.png b/config/icpc-wf/v2-configs/2017/contest/teamData/92.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/92.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/92.png
diff --git a/config/icpc-wf/2017/contest/teamData/93.json b/config/icpc-wf/v2-configs/2017/contest/teamData/93.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/93.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/93.json
diff --git a/config/icpc-wf/2017/contest/teamData/93.png b/config/icpc-wf/v2-configs/2017/contest/teamData/93.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/93.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/93.png
diff --git a/config/icpc-wf/2017/contest/teamData/94.json b/config/icpc-wf/v2-configs/2017/contest/teamData/94.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/94.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/94.json
diff --git a/config/icpc-wf/2017/contest/teamData/94.png b/config/icpc-wf/v2-configs/2017/contest/teamData/94.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/94.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/94.png
diff --git a/config/icpc-wf/2017/contest/teamData/95.json b/config/icpc-wf/v2-configs/2017/contest/teamData/95.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/95.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/95.json
diff --git a/config/icpc-wf/2017/contest/teamData/95.png b/config/icpc-wf/v2-configs/2017/contest/teamData/95.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/95.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/95.png
diff --git a/config/icpc-wf/2017/contest/teamData/96.json b/config/icpc-wf/v2-configs/2017/contest/teamData/96.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/96.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/96.json
diff --git a/config/icpc-wf/2017/contest/teamData/96.png b/config/icpc-wf/v2-configs/2017/contest/teamData/96.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/96.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/96.png
diff --git a/config/icpc-wf/2017/contest/teamData/97.json b/config/icpc-wf/v2-configs/2017/contest/teamData/97.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/97.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/97.json
diff --git a/config/icpc-wf/2017/contest/teamData/97.png b/config/icpc-wf/v2-configs/2017/contest/teamData/97.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/97.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/97.png
diff --git a/config/icpc-wf/2017/contest/teamData/98.json b/config/icpc-wf/v2-configs/2017/contest/teamData/98.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/98.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/98.json
diff --git a/config/icpc-wf/2017/contest/teamData/98.png b/config/icpc-wf/v2-configs/2017/contest/teamData/98.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/98.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/98.png
diff --git a/config/icpc-wf/2017/contest/teamData/99.json b/config/icpc-wf/v2-configs/2017/contest/teamData/99.json
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/99.json
rename to config/icpc-wf/v2-configs/2017/contest/teamData/99.json
diff --git a/config/icpc-wf/2017/contest/teamData/99.png b/config/icpc-wf/v2-configs/2017/contest/teamData/99.png
similarity index 100%
rename from config/icpc-wf/2017/contest/teamData/99.png
rename to config/icpc-wf/v2-configs/2017/contest/teamData/99.png
diff --git a/config/icpc-wf/2017/test-1/cds.events.properties b/config/icpc-wf/v2-configs/2017/test-1/cds.events.properties
similarity index 100%
rename from config/icpc-wf/2017/test-1/cds.events.properties
rename to config/icpc-wf/v2-configs/2017/test-1/cds.events.properties
diff --git a/config/icpc-wf/2017/test-1/cds.mainscreen.properties b/config/icpc-wf/v2-configs/2017/test-1/cds.mainscreen.properties
similarity index 100%
rename from config/icpc-wf/2017/test-1/cds.mainscreen.properties
rename to config/icpc-wf/v2-configs/2017/test-1/cds.mainscreen.properties
diff --git a/config/icpc-wf/2017/test-1/contest.json b/config/icpc-wf/v2-configs/2017/test-1/contest.json
similarity index 100%
rename from config/icpc-wf/2017/test-1/contest.json
rename to config/icpc-wf/v2-configs/2017/test-1/contest.json
diff --git a/config/icpc-wf/2018/contest/event-feed b/config/icpc-wf/v2-configs/2018/contest/event-feed
similarity index 100%
rename from config/icpc-wf/2018/contest/event-feed
rename to config/icpc-wf/v2-configs/2018/contest/event-feed
diff --git a/config/icpc-wf/2018/contest/events.properties b/config/icpc-wf/v2-configs/2018/contest/events.properties
similarity index 100%
rename from config/icpc-wf/2018/contest/events.properties
rename to config/icpc-wf/v2-configs/2018/contest/events.properties
diff --git a/config/icpc-wf/2018/contest/groups b/config/icpc-wf/v2-configs/2018/contest/groups
similarity index 100%
rename from config/icpc-wf/2018/contest/groups
rename to config/icpc-wf/v2-configs/2018/contest/groups
diff --git a/config/icpc-wf/2018/contest/languages b/config/icpc-wf/v2-configs/2018/contest/languages
similarity index 100%
rename from config/icpc-wf/2018/contest/languages
rename to config/icpc-wf/v2-configs/2018/contest/languages
diff --git a/config/icpc-wf/2018/contest/mainscreen.properties b/config/icpc-wf/v2-configs/2018/contest/mainscreen.properties
similarity index 100%
rename from config/icpc-wf/2018/contest/mainscreen.properties
rename to config/icpc-wf/v2-configs/2018/contest/mainscreen.properties
diff --git a/config/icpc-wf/2018/contest/organizations b/config/icpc-wf/v2-configs/2018/contest/organizations
similarity index 100%
rename from config/icpc-wf/2018/contest/organizations
rename to config/icpc-wf/v2-configs/2018/contest/organizations
diff --git a/config/icpc-wf/2018/contest/problems b/config/icpc-wf/v2-configs/2018/contest/problems
similarity index 100%
rename from config/icpc-wf/2018/contest/problems
rename to config/icpc-wf/v2-configs/2018/contest/problems
diff --git a/config/icpc-wf/2018/contest/scoreboard b/config/icpc-wf/v2-configs/2018/contest/scoreboard
similarity index 100%
rename from config/icpc-wf/2018/contest/scoreboard
rename to config/icpc-wf/v2-configs/2018/contest/scoreboard
diff --git a/config/icpc-wf/2018/contest/teams b/config/icpc-wf/v2-configs/2018/contest/teams
similarity index 100%
rename from config/icpc-wf/2018/contest/teams
rename to config/icpc-wf/v2-configs/2018/contest/teams
diff --git a/config/icpc-wf/2018/test/event-feed b/config/icpc-wf/v2-configs/2018/test/event-feed
similarity index 100%
rename from config/icpc-wf/2018/test/event-feed
rename to config/icpc-wf/v2-configs/2018/test/event-feed
diff --git a/config/icpc-wf/2018/test/groups b/config/icpc-wf/v2-configs/2018/test/groups
similarity index 100%
rename from config/icpc-wf/2018/test/groups
rename to config/icpc-wf/v2-configs/2018/test/groups
diff --git a/config/icpc-wf/2018/test/languages b/config/icpc-wf/v2-configs/2018/test/languages
similarity index 100%
rename from config/icpc-wf/2018/test/languages
rename to config/icpc-wf/v2-configs/2018/test/languages
diff --git a/config/icpc-wf/2018/test/organizations b/config/icpc-wf/v2-configs/2018/test/organizations
similarity index 100%
rename from config/icpc-wf/2018/test/organizations
rename to config/icpc-wf/v2-configs/2018/test/organizations
diff --git a/config/icpc-wf/2018/test/problems b/config/icpc-wf/v2-configs/2018/test/problems
similarity index 100%
rename from config/icpc-wf/2018/test/problems
rename to config/icpc-wf/v2-configs/2018/test/problems
diff --git a/config/icpc-wf/2018/test/teams b/config/icpc-wf/v2-configs/2018/test/teams
similarity index 100%
rename from config/icpc-wf/2018/test/teams
rename to config/icpc-wf/v2-configs/2018/test/teams
diff --git a/config/icpc-wf/2019/contest/admin-event-feed b/config/icpc-wf/v2-configs/2019/contest/admin-event-feed
similarity index 100%
rename from config/icpc-wf/2019/contest/admin-event-feed
rename to config/icpc-wf/v2-configs/2019/contest/admin-event-feed
diff --git a/config/icpc-wf/2019/contest/event-feed b/config/icpc-wf/v2-configs/2019/contest/event-feed
similarity index 100%
rename from config/icpc-wf/2019/contest/event-feed
rename to config/icpc-wf/v2-configs/2019/contest/event-feed
diff --git a/config/icpc-wf/2019/contest/events.properties b/config/icpc-wf/v2-configs/2019/contest/events.properties
similarity index 100%
rename from config/icpc-wf/2019/contest/events.properties
rename to config/icpc-wf/v2-configs/2019/contest/events.properties
diff --git a/config/icpc-wf/2019/contest/mainscreen.properties b/config/icpc-wf/v2-configs/2019/contest/mainscreen.properties
similarity index 100%
rename from config/icpc-wf/2019/contest/mainscreen.properties
rename to config/icpc-wf/v2-configs/2019/contest/mainscreen.properties
diff --git a/config/icpc-wf/2019/test/events.properties b/config/icpc-wf/v2-configs/2019/test/events.properties
similarity index 100%
rename from config/icpc-wf/2019/test/events.properties
rename to config/icpc-wf/v2-configs/2019/test/events.properties
diff --git a/config/icpc-wf/2019/test/mainscreen.properties b/config/icpc-wf/v2-configs/2019/test/mainscreen.properties
similarity index 100%
rename from config/icpc-wf/2019/test/mainscreen.properties
rename to config/icpc-wf/v2-configs/2019/test/mainscreen.properties
diff --git a/config/icpc-wf/2019/test/splitscreen.properties b/config/icpc-wf/v2-configs/2019/test/splitscreen.properties
similarity index 100%
rename from config/icpc-wf/2019/test/splitscreen.properties
rename to config/icpc-wf/v2-configs/2019/test/splitscreen.properties
diff --git a/config/regionalroi/spb-2022-d1/settings.json b/config/regionalroi/spb-2022-d1/settings.json
index ab1f8bb3d..fae072637 100644
--- a/config/regionalroi/spb-2022-d1/settings.json
+++ b/config/regionalroi/spb-2022-d1/settings.json
@@ -1,5 +1,5 @@
{
"type": "pcms",
- "url": "regionalroi/spb-2022-d1/ru-olymp-spb-2022-standings-day1-groups.xml",
+ "url": "ru-olymp-spb-2022-standings-day1-groups.xml",
"resultType": "IOI"
}
diff --git a/config/roi/2022/day1/settings.json b/config/roi/2022/day1/settings.json
index 2cfa630a3..1cd99725d 100644
--- a/config/roi/2022/day1/settings.json
+++ b/config/roi/2022/day1/settings.json
@@ -2,6 +2,6 @@
"type": "pcms",
"login": "admin",
"password": "adm1n",
- "url": "roi-2022-day1/standings-live-day1.xml",
+ "url": "standings-live-day1.xml",
"resultType": "IOI"
}
diff --git a/config/roi/2023/day1/settings.json b/config/roi/2023/day1/settings.json
index 91fabe8a6..3ff479cc8 100644
--- a/config/roi/2023/day1/settings.json
+++ b/config/roi/2023/day1/settings.json
@@ -1,6 +1,5 @@
{
- "type":"pcms",
- "#url":"http://192.168.90.248/standings/standings-live.xml",
- "url":"roi/2023/day1/day1.xml",
- "resultType":"IOI"
+ "type": "pcms",
+ "url": "day1.xml",
+ "resultType": "IOI"
}
\ No newline at end of file
diff --git a/config/roi/2023/day2/settings.json b/config/roi/2023/day2/settings.json
index 31379391e..366232dba 100644
--- a/config/roi/2023/day2/settings.json
+++ b/config/roi/2023/day2/settings.json
@@ -1,6 +1,5 @@
{
"type": "pcms",
- "#url": "http://192.168.90.248/standings/standings-live.xml",
- "url": "roi/2023/day2/day2.xml",
+ "url": "day2.xml",
"resultType": "IOI"
}
diff --git a/config/roi/2023/it-sequel/settings.json b/config/roi/2023/it-sequel/settings.json
index f9c77a561..260d56f37 100644
--- a/config/roi/2023/it-sequel/settings.json
+++ b/config/roi/2023/it-sequel/settings.json
@@ -1,7 +1,6 @@
{
"type": "pcms",
- "#url": "http://192.168.90.248/standings/standings-live.xml",
- "url": "roi/2023/it-sequel/it-sequel.xml",
+ "url": "it-sequel.xml",
"resultType": "IOI"
}
diff --git a/config/roi/2023/test/settings.json b/config/roi/2023/test/settings.json
index 9bb80f5d4..5e73d124e 100644
--- a/config/roi/2023/test/settings.json
+++ b/config/roi/2023/test/settings.json
@@ -1,5 +1,5 @@
{
- "type":"pcms",
- "url":"roi/2023/test/standings-live.xml",
- "resultType":"IOI"
+ "type": "pcms",
+ "url": "standings-live.xml",
+ "resultType": "IOI"
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 0ccfa89d0..cb6e36a76 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -20,6 +20,7 @@ grpc-kotlin = "1.3.1" # https://github.com/grpc/grpc-kotlin
dokka = "1.8.20" # https://github.com/Kotlin/dokka
retrofit = "2.9.0" # https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit/2.9.0
json5 = "0.3.0" # https://github.com/xn32/json5k
+kxs-ts-gen = "0.2.1" # https://github.com/adamko-dev/kotlinx-serialization-typescript-generator
[libraries]
@@ -74,6 +75,7 @@ grpc-gen-kotlin = { version.ref = "grpc-kotlin", group = "io.grpc", name = "prot
protobuf = { version.ref = "protobuf", group = "com.google.protobuf", name = "protobuf-kotlin" }
protoc = { version.ref = "protobuf", group = "com.google.protobuf", name = "protoc" }
+kxs-ts-gen-core = { version.ref = "kxs-ts-gen" , group = "dev.adamko.kxstsgen", name = "kxs-ts-gen-core" }
[plugins]
diff --git a/schemas/advanced.schema.json b/schemas/advanced.schema.json
index 183265bb6..f948cd358 100644
--- a/schemas/advanced.schema.json
+++ b/schemas/advanced.schema.json
@@ -1,822 +1,193 @@
{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://github.com/icpc/live-v3/blob/main/schemas/advanced.schema.json",
- "title": "ICPC live advanced settings",
- "type": "object",
- "properties": {
- "startTime": {
- "type": "string"
+ "$ref": "#/$defs/ICPC live advanced settings",
+ "$defs": {
+ "Object": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "Object",
+ "default": "Object"
+ },
+ "url": {
+ "type": "string"
+ },
+ "isMedia": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "url"
+ ],
+ "title": "Object"
},
- "freezeTimeSeconds": {
- "type": "integer"
+ "Photo": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "Photo",
+ "default": "Photo"
+ },
+ "url": {
+ "type": "string"
+ },
+ "isMedia": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "url"
+ ],
+ "title": "Photo"
},
- "holdTimeSeconds": {
- "type": "integer"
+ "TaskStatus": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "TaskStatus",
+ "default": "TaskStatus"
+ },
+ "teamId": {
+ "type": "number"
+ },
+ "isMedia": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "teamId"
+ ],
+ "title": "TaskStatus"
},
- "teamMediaTemplate": {
+ "Video": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "Video",
+ "default": "Video"
+ },
+ "url": {
+ "type": "string"
+ },
+ "isMedia": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "url"
+ ],
+ "title": "Video"
+ },
+ "WebRTCGrabberConnection": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "WebRTCGrabberConnection",
+ "default": "WebRTCGrabberConnection"
+ },
+ "url": {
+ "type": "string"
+ },
+ "peerName": {
+ "type": "string"
+ },
+ "streamType": {
+ "type": "string"
+ },
+ "credential": {
+ "type": "string"
+ },
+ "isMedia": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "url",
+ "peerName",
+ "streamType",
+ "credential"
+ ],
+ "title": "WebRTCGrabberConnection"
+ },
+ "WebRTCProxyConnection": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "WebRTCProxyConnection",
+ "default": "WebRTCProxyConnection"
+ },
+ "url": {
+ "type": "string"
+ },
+ "audioUrl": {
+ "type": "string"
+ },
+ "isMedia": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "url"
+ ],
+ "title": "WebRTCProxyConnection"
+ },
+ "org.icpclive.api.MediaType?>": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Object"
+ },
+ {
+ "$ref": "#/$defs/Photo"
+ },
+ {
+ "$ref": "#/$defs/TaskStatus"
+ },
+ {
+ "$ref": "#/$defs/Video"
+ },
+ {
+ "$ref": "#/$defs/WebRTCGrabberConnection"
+ },
+ {
+ "$ref": "#/$defs/WebRTCProxyConnection"
+ }
+ ]
+ },
+ "kotlin.collections.LinkedHashMap?": {
"type": "object",
"properties": {
"camera": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
+ "$ref": "#/$defs/org.icpclive.api.MediaType?>"
},
"screen": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
+ "$ref": "#/$defs/org.icpclive.api.MediaType?>"
},
"record": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
+ "$ref": "#/$defs/org.icpclive.api.MediaType?>"
},
"photo": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
+ "$ref": "#/$defs/org.icpclive.api.MediaType?>"
},
"reactionVideo": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
+ "$ref": "#/$defs/org.icpclive.api.MediaType?>"
},
"achievement": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
+ "$ref": "#/$defs/org.icpclive.api.MediaType?>"
}
}
},
- "teamOverrideTemplate": {
+ "org.icpclive.api.tunning.TeamOverrideTemplate?": {
"type": "object",
"properties": {
"displayName": {
@@ -826,1819 +197,289 @@
"type": "string"
},
"medias": {
- "type": "object",
- "properties": {
- "camera": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "screen": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "record": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "photo": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "reactionVideo": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "achievement": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- }
- }
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
}
},
"additionalProperties": false,
"required": [
]
},
- "teamRegexes": {
+ "kotlin.collections.LinkedHashMap?": {
+ "type": "object",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "org.icpclive.api.tunning.TeamRegexOverrides?": {
"type": "object",
"properties": {
"organizationRegex": {
"type": "string"
},
"customFields": {
- "type": "object",
- "patternProperties": {
- ".*": {
- "type": "string"
- }
- }
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
},
"groupRegex": {
- "type": "object",
- "patternProperties": {
- ".*": {
- "type": "string"
- }
- }
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
}
},
"additionalProperties": false,
"required": [
]
},
- "teamOverrides": {
+ "kotlin.collections.ArrayList?": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "kotlin.collections.LinkedHashMap?": {
"type": "object",
"patternProperties": {
".*": {
- "type": "object",
- "properties": {
- "fullName": {
- "type": "string"
- },
- "displayName": {
- "type": "string"
- },
- "groups": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "organizationId": {
- "type": "string"
- },
- "hashTag": {
- "type": "string"
- },
- "medias": {
- "type": "object",
- "properties": {
- "camera": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "screen": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "record": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "photo": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "reactionVideo": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- },
- "achievement": {
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Object"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Photo"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "TaskStatus"
- },
- "teamId": {
- "type": "integer"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "teamId"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "Video"
- },
- "url": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCGrabberConnection"
- },
- "url": {
- "type": "string"
- },
- "peerName": {
- "type": "string"
- },
- "streamType": {
- "type": "string"
- },
- "credential": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url",
- "peerName",
- "streamType",
- "credential"
- ]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "const": "WebRTCProxyConnection"
- },
- "url": {
- "type": "string"
- },
- "audioUrl": {
- "type": "string"
- },
- "isMedia": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- "type",
- "url"
- ]
- }
- ]
- }
- }
- },
- "customFields": {
- "type": "object",
- "patternProperties": {
- ".*": {
- "type": "string"
- }
- }
- },
- "isHidden": {
- "type": "boolean"
- },
- "isOutOfContest": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "type": "string"
}
}
},
- "groupOverrides": {
+ "org.icpclive.api.tunning.TeamInfoOverride": {
+ "type": "object",
+ "properties": {
+ "fullName": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "groups": {
+ "$ref": "#/$defs/kotlin.collections.ArrayList?"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "hashTag": {
+ "type": "string"
+ },
+ "medias": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "customFields": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "isHidden": {
+ "type": "boolean"
+ },
+ "isOutOfContest": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ ]
+ },
+ "kotlin.collections.LinkedHashMap?": {
+ "type": "object",
+ "patternProperties": {
+ ".*": {
+ "$ref": "#/$defs/org.icpclive.api.tunning.TeamInfoOverride"
+ }
+ }
+ },
+ "org.icpclive.api.tunning.GroupInfoOverride": {
+ "type": "object",
+ "properties": {
+ "isHidden": {
+ "type": "boolean"
+ },
+ "isOutOfContest": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ ]
+ },
+ "kotlin.collections.LinkedHashMap?": {
"type": "object",
"patternProperties": {
".*": {
- "type": "object",
- "properties": {
- "isHidden": {
- "type": "boolean"
- },
- "isOutOfContest": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.api.tunning.GroupInfoOverride"
}
}
},
- "organizationOverrides": {
+ "org.icpclive.api.tunning.OrganizationInfoOverride": {
+ "type": "object",
+ "properties": {
+ "displayName": {
+ "type": "string"
+ },
+ "fullName": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ ]
+ },
+ "kotlin.collections.LinkedHashMap?": {
"type": "object",
"patternProperties": {
".*": {
- "type": "object",
- "properties": {
- "displayName": {
- "type": "string"
- },
- "fullName": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.api.tunning.OrganizationInfoOverride"
}
}
},
- "problemOverrides": {
+ "org.icpclive.api.ScoreMergeMode?": {
+ "enum": [
+ "MAX_PER_GROUP",
+ "MAX_TOTAL",
+ "LAST",
+ "LAST_OK",
+ "SUM"
+ ]
+ },
+ "org.icpclive.api.tunning.ProblemInfoOverride": {
+ "type": "object",
+ "properties": {
+ "displayName": {
+ "type": "string"
+ },
+ "fullName": {
+ "type": "string"
+ },
+ "color": {
+ "type": "string"
+ },
+ "ordinal": {
+ "type": "number"
+ },
+ "minScore": {
+ "type": "number"
+ },
+ "maxScore": {
+ "type": "number"
+ },
+ "scoreMergeMode": {
+ "$ref": "#/$defs/org.icpclive.api.ScoreMergeMode?"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ ]
+ },
+ "kotlin.collections.LinkedHashMap?": {
"type": "object",
"patternProperties": {
".*": {
- "type": "object",
- "properties": {
- "displayName": {
- "type": "string"
- },
- "fullName": {
- "type": "string"
- },
- "color": {
- "type": "string"
- },
- "ordinal": {
- "type": "integer"
- },
- "minScore": {
- "type": "number"
- },
- "maxScore": {
- "type": "number"
- },
- "scoreMergeMode": {
- "enum": [
- "MAX_PER_GROUP",
- "MAX_TOTAL",
- "LAST",
- "LAST_OK",
- "SUM"
- ]
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.api.tunning.ProblemInfoOverride"
+ }
+ }
+ },
+ "org.icpclive.api.MedalTiebreakMode": {
+ "enum": [
+ "NONE",
+ "ALL"
+ ]
+ },
+ "org.icpclive.api.MedalType": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "count": {
+ "type": "number"
+ },
+ "minScore": {
+ "type": "number"
+ },
+ "tiebreakMode": {
+ "$ref": "#/$defs/org.icpclive.api.MedalTiebreakMode"
}
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "count"
+ ]
+ },
+ "kotlin.collections.ArrayList?": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/org.icpclive.api.MedalType"
}
},
- "scoreboardOverrides": {
+ "org.icpclive.api.PenaltyRoundingMode?": {
+ "enum": [
+ "each_submission_down_to_minute",
+ "sum_down_to_minute",
+ "sum_in_seconds",
+ "last",
+ "zero"
+ ]
+ },
+ "org.icpclive.api.tunning.RankingSettings?": {
"type": "object",
"properties": {
"medals": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "count": {
- "type": "integer"
- },
- "minScore": {
- "type": "number"
- },
- "tiebreakMode": {
- "enum": [
- "NONE",
- "ALL"
- ]
- }
- },
- "additionalProperties": false,
- "required": [
- "name",
- "count"
- ]
- }
+ "$ref": "#/$defs/kotlin.collections.ArrayList?"
},
"penaltyPerWrongAttempt": {
- "type": "integer"
+ "type": "number"
},
"showTeamsWithoutSubmissions": {
"type": "boolean"
},
"penaltyRoundingMode": {
- "enum": [
- "each_submission_down_to_minute",
- "sum_down_to_minute",
- "sum_in_seconds",
- "last",
- "zero"
- ]
+ "$ref": "#/$defs/org.icpclive.api.PenaltyRoundingMode?"
}
},
"additionalProperties": false,
"required": [
]
+ },
+ "ICPC live advanced settings": {
+ "type": "object",
+ "properties": {
+ "startTime": {
+ "type": "string"
+ },
+ "freezeTimeSeconds": {
+ "type": "number"
+ },
+ "holdTimeSeconds": {
+ "type": "number"
+ },
+ "teamMediaTemplate": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "teamOverrideTemplate": {
+ "$ref": "#/$defs/org.icpclive.api.tunning.TeamOverrideTemplate?"
+ },
+ "teamRegexes": {
+ "$ref": "#/$defs/org.icpclive.api.tunning.TeamRegexOverrides?"
+ },
+ "teamOverrides": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "groupOverrides": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "organizationOverrides": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "problemOverrides": {
+ "$ref": "#/$defs/kotlin.collections.LinkedHashMap?"
+ },
+ "scoreboardOverrides": {
+ "$ref": "#/$defs/org.icpclive.api.tunning.RankingSettings?"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ ],
+ "title": "ICPC live advanced settings"
}
- },
- "additionalProperties": false,
- "required": [
- ]
+ }
}
diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json
index 2568492d7..5f9d34520 100644
--- a/schemas/settings.schema.json
+++ b/schemas/settings.schema.json
@@ -1,122 +1,81 @@
{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://github.com/icpc/live-v3/blob/main/schemas/settings.schema.json",
- "title": "ICPC live settings",
- "oneOf": [
- {
+ "$ref": "#/$defs/ICPC live settings",
+ "$defs": {
+ "org.icpclive.cds.settings.EmulationSettings?": {
"type": "object",
"properties": {
- "type": {
- "const": "atcoder"
- },
- "contestId": {
- "type": "string"
- },
- "sessionCookie": {
- "type": "string"
+ "speed": {
+ "type": "number"
},
"startTime": {
"type": "string"
- },
- "contestLengthSeconds": {
- "type": "integer"
- },
- "emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
- },
- "network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
}
},
"additionalProperties": false,
"required": [
- "type",
- "contestId",
- "sessionCookie",
- "startTime",
- "contestLengthSeconds"
+ "speed",
+ "startTime"
+ ]
+ },
+ "org.icpclive.cds.settings.NetworkSettings?": {
+ "type": "object",
+ "properties": {
+ "allowUnsecureConnections": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
]
},
- {
+ "atcoder": {
"type": "object",
"properties": {
"type": {
- "const": "cf"
+ "const": "atcoder",
+ "default": "atcoder"
},
"contestId": {
- "type": "integer"
+ "type": "string"
},
- "apiKey": {
+ "sessionCookie": {
"type": "string"
},
- "apiSecret": {
+ "startTime": {
"type": "string"
},
- "asManager": {
- "type": "boolean"
+ "contestLengthSeconds": {
+ "type": "number"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
"required": [
"type",
"contestId",
- "apiKey",
- "apiSecret"
+ "sessionCookie",
+ "startTime",
+ "contestLengthSeconds"
+ ],
+ "title": "atcoder"
+ },
+ "org.icpclive.api.ContestResultType": {
+ "enum": [
+ "ICPC",
+ "IOI"
]
},
- {
+ "cats": {
"type": "object",
"properties": {
"type": {
- "const": "cats"
+ "const": "cats",
+ "default": "cats"
},
"login": {
"type": "string"
@@ -131,40 +90,16 @@
"type": "string"
},
"resultType": {
- "enum": [
- "ICPC",
- "IOI"
- ]
+ "$ref": "#/$defs/org.icpclive.api.ContestResultType"
},
"cid": {
"type": "string"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
@@ -174,17 +109,59 @@
"password",
"url",
"cid"
- ]
+ ],
+ "title": "cats"
},
- {
+ "cf": {
"type": "object",
"properties": {
"type": {
- "const": "clics"
+ "const": "cf",
+ "default": "cf"
+ },
+ "contestId": {
+ "type": "number"
+ },
+ "apiKey": {
+ "type": "string"
+ },
+ "apiSecret": {
+ "type": "string"
},
+ "asManager": {
+ "type": "boolean"
+ },
+ "emulation": {
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
+ },
+ "network": {
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "contestId",
+ "apiKey",
+ "apiSecret"
+ ],
+ "title": "cf"
+ },
+ "org.icpclive.cds.settings.ClicsSettings.FeedVersion": {
+ "enum": [
+ "2020_03",
+ "2022_07"
+ ]
+ },
+ "org.icpclive.cds.settings.ClicsFeed,kotlin.String,kotlinx.serialization.ContextualSerializer?,kotlinx.serialization.ContextualSerializer?,kotlin.String,kotlin.String?,org.icpclive.cds.settings.ClicsSettings.FeedVersion>": {
+ "type": "object",
+ "properties": {
"url": {
"type": "string"
},
+ "contestId": {
+ "type": "string"
+ },
"login": {
"type": "string"
},
@@ -194,84 +171,64 @@
"eventFeedName": {
"type": "string"
},
+ "eventFeedPath": {
+ "type": "string"
+ },
"feedVersion": {
- "enum": [
- "2020_03",
- "2022_07"
- ]
- },
- "additionalFeed": {
- "type": "object",
- "properties": {
- "url": {
- "type": "string"
- },
- "login": {
- "type": "string"
- },
- "password": {
- "type": "string"
- },
- "eventFeedName": {
- "type": "string"
- },
- "feedVersion": {
- "enum": [
- "2020_03",
- "2022_07"
- ]
- }
- },
- "additionalProperties": false,
- "required": [
- "url"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.ClicsSettings.FeedVersion"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "url",
+ "contestId"
+ ]
+ },
+ "kotlin.collections.ArrayList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/org.icpclive.cds.settings.ClicsFeed,kotlin.String,kotlinx.serialization.ContextualSerializer?,kotlinx.serialization.ContextualSerializer?,kotlin.String,kotlin.String?,org.icpclive.cds.settings.ClicsSettings.FeedVersion>"
+ }
+ },
+ "clics": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "const": "clics",
+ "default": "clics"
+ },
+ "feeds": {
+ "$ref": "#/$defs/kotlin.collections.ArrayList"
},
"useTeamNames": {
"type": "boolean"
},
- "mediaBaseUrl": {
- "type": "string"
- },
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
"required": [
"type",
- "url"
- ]
+ "feeds"
+ ],
+ "title": "clics"
+ },
+ "kotlin.collections.ArrayList": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
},
- {
+ "cms": {
"type": "object",
"properties": {
"type": {
- "const": "cms"
+ "const": "cms",
+ "default": "cms"
},
"url": {
"type": "string"
@@ -280,37 +237,13 @@
"type": "string"
},
"otherContests": {
- "type": "array",
- "items": {
- "type": "string"
- }
+ "$ref": "#/$defs/kotlin.collections.ArrayList"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
}
},
"additionalProperties": false,
@@ -319,19 +252,21 @@
"url",
"activeContest",
"otherContests"
- ]
+ ],
+ "title": "cms"
},
- {
+ "codedrills": {
"type": "object",
"properties": {
"type": {
- "const": "codedrills"
+ "const": "codedrills",
+ "default": "codedrills"
},
"url": {
"type": "string"
},
"port": {
- "type": "integer"
+ "type": "number"
},
"contestId": {
"type": "string"
@@ -340,31 +275,10 @@
"type": "string"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
@@ -374,65 +288,45 @@
"port",
"contestId",
"authKey"
- ]
+ ],
+ "title": "codedrills"
},
- {
+ "ejudge": {
"type": "object",
"properties": {
"type": {
- "const": "ejudge"
+ "const": "ejudge",
+ "default": "ejudge"
},
"url": {
"type": "string"
},
"resultType": {
- "enum": [
- "ICPC",
- "IOI"
- ]
+ "$ref": "#/$defs/org.icpclive.api.ContestResultType"
},
"timeZone": {
"type": "string"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
"required": [
"type",
"url"
- ]
+ ],
+ "title": "ejudge"
},
- {
+ "krsu": {
"type": "object",
"properties": {
"type": {
- "const": "krsu"
+ "const": "krsu",
+ "default": "krsu"
},
"submissionsUrl": {
"type": "string"
@@ -444,31 +338,10 @@
"type": "string"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
@@ -476,52 +349,35 @@
"type",
"submissionsUrl",
"contestUrl"
- ]
+ ],
+ "title": "krsu"
},
- {
+ "noop": {
"type": "object",
"properties": {
"type": {
- "const": "noop"
+ "const": "noop",
+ "default": "noop"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
"required": [
"type"
- ]
+ ],
+ "title": "noop"
},
- {
+ "pcms": {
"type": "object",
"properties": {
"type": {
- "const": "pcms"
+ "const": "pcms",
+ "default": "pcms"
},
"url": {
"type": "string"
@@ -536,50 +392,28 @@
"type": "string"
},
"resultType": {
- "enum": [
- "ICPC",
- "IOI"
- ]
+ "$ref": "#/$defs/org.icpclive.api.ContestResultType"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
"required": [
"type",
"url"
- ]
+ ],
+ "title": "pcms"
},
- {
+ "testsys": {
"type": "object",
"properties": {
"type": {
- "const": "testsys"
+ "const": "testsys",
+ "default": "testsys"
},
"url": {
"type": "string"
@@ -588,44 +422,25 @@
"type": "string"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
"required": [
"type",
"url"
- ]
+ ],
+ "title": "testsys"
},
- {
+ "yandex": {
"type": "object",
"properties": {
"type": {
- "const": "yandex"
+ "const": "yandex",
+ "default": "yandex"
},
"apiKey": {
"type": "string"
@@ -634,40 +449,16 @@
"type": "string"
},
"contestId": {
- "type": "integer"
+ "type": "number"
},
"resultType": {
- "enum": [
- "ICPC",
- "IOI"
- ]
+ "$ref": "#/$defs/org.icpclive.api.ContestResultType"
},
"emulation": {
- "type": "object",
- "properties": {
- "speed": {
- "type": "number"
- },
- "startTime": {
- "type": "string"
- }
- },
- "additionalProperties": false,
- "required": [
- "speed",
- "startTime"
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.EmulationSettings?"
},
"network": {
- "type": "object",
- "properties": {
- "allowUnsecureConnections": {
- "type": "boolean"
- }
- },
- "additionalProperties": false,
- "required": [
- ]
+ "$ref": "#/$defs/org.icpclive.cds.settings.NetworkSettings?"
}
},
"additionalProperties": false,
@@ -676,7 +467,49 @@
"apiKey",
"loginRegex",
"contestId"
- ]
+ ],
+ "title": "yandex"
+ },
+ "ICPC live settings": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/atcoder"
+ },
+ {
+ "$ref": "#/$defs/cats"
+ },
+ {
+ "$ref": "#/$defs/cf"
+ },
+ {
+ "$ref": "#/$defs/clics"
+ },
+ {
+ "$ref": "#/$defs/cms"
+ },
+ {
+ "$ref": "#/$defs/codedrills"
+ },
+ {
+ "$ref": "#/$defs/ejudge"
+ },
+ {
+ "$ref": "#/$defs/krsu"
+ },
+ {
+ "$ref": "#/$defs/noop"
+ },
+ {
+ "$ref": "#/$defs/pcms"
+ },
+ {
+ "$ref": "#/$defs/testsys"
+ },
+ {
+ "$ref": "#/$defs/yandex"
+ }
+ ],
+ "title": "ICPC live settings"
}
- ]
+ }
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 79f6c4458..414a24f4c 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -18,6 +18,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
include(
":backend",
+ ":backend-api",
":cds",
":cds-converter",
":clics-api",
@@ -29,6 +30,7 @@ include(
":faker"
)
project(":backend").projectDir = file("src/backend")
+project(":backend-api").projectDir = file("src/backend-api")
project(":cds").projectDir = file("src/cds")
project(":cds-converter").projectDir = file("src/cds-converter")
project(":clics-api").projectDir = file("src/clics-api")
diff --git a/src/backend-api/build.gradle.kts b/src/backend-api/build.gradle.kts
new file mode 100644
index 000000000..d17a6f36f
--- /dev/null
+++ b/src/backend-api/build.gradle.kts
@@ -0,0 +1,13 @@
+plugins {
+ `java-library`
+ alias(libs.plugins.kotlin.jvm)
+ alias(libs.plugins.kotlin.serialization)
+}
+
+dependencies {
+ api(libs.kotlinx.serialization.json)
+ api(libs.kotlinx.datetime)
+ api(projects.common)
+ api(projects.cds)
+ testImplementation(libs.kotlin.junit)
+}
\ No newline at end of file
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/AdminUser.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/AdminUser.kt
similarity index 100%
rename from src/backend/src/main/kotlin/org/icpclive/api/AdminUser.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/AdminUser.kt
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Event.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Event.kt
similarity index 100%
rename from src/backend/src/main/kotlin/org/icpclive/api/Event.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Event.kt
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Objects.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Objects.kt
similarity index 100%
rename from src/backend/src/main/kotlin/org/icpclive/api/Objects.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Objects.kt
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Settings.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Settings.kt
similarity index 93%
rename from src/backend/src/main/kotlin/org/icpclive/api/Settings.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Settings.kt
index b59a64afb..08438933a 100644
--- a/src/backend/src/main/kotlin/org/icpclive/api/Settings.kt
+++ b/src/backend-api/src/main/kotlin/org/icpclive/api/Settings.kt
@@ -4,7 +4,7 @@ package org.icpclive.api
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
-import org.icpclive.admin.ApiActionException
+import java.lang.IllegalArgumentException
interface ObjectSettings
@@ -81,13 +81,7 @@ data class TeamLocatorExternalCircleSettings(
val radius: Int,
val teamId: Int? = null,
val cdsTeamId: String? = null,
-) {
- init {
- if ((teamId == null) == (cdsTeamId == null)) {
- throw ApiActionException("Only one of of teamId and cdsTeamsId can be specified")
- }
- }
-}
+)
@Serializable
data class ExternalTeamLocatorSettings(
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Social.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Social.kt
similarity index 100%
rename from src/backend/src/main/kotlin/org/icpclive/api/Social.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Social.kt
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/SpotlightTeam.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/SpotlightTeam.kt
similarity index 88%
rename from src/backend/src/main/kotlin/org/icpclive/api/SpotlightTeam.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/SpotlightTeam.kt
index 48adc6a97..65e22fe3f 100644
--- a/src/backend/src/main/kotlin/org/icpclive/api/SpotlightTeam.kt
+++ b/src/backend-api/src/main/kotlin/org/icpclive/api/SpotlightTeam.kt
@@ -1,7 +1,6 @@
package org.icpclive.api
import kotlinx.serialization.Serializable
-import org.icpclive.service.TeamState
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
@@ -10,9 +9,7 @@ class RunCause(val runId: Int) : KeyTeamCause()
object ScoreSumCause : KeyTeamCause()
data class KeyTeam(val teamId: Int, val cause: KeyTeamCause)
-data class CurrentTeamState(val teamId: Int, val score: Double) {
- constructor(state: TeamState) : this(state.teamId, state.score)
-}
+data class CurrentTeamState(val teamId: Int, val score: Double)
@Serializable
data class InterestingTeam(val teamId: Int, val teamName: String, val score: Double)
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Statistics.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Statistics.kt
similarity index 100%
rename from src/backend/src/main/kotlin/org/icpclive/api/Statistics.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Statistics.kt
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Ticker.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Ticker.kt
similarity index 100%
rename from src/backend/src/main/kotlin/org/icpclive/api/Ticker.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Ticker.kt
diff --git a/src/backend/src/main/kotlin/org/icpclive/api/Widgets.kt b/src/backend-api/src/main/kotlin/org/icpclive/api/Widgets.kt
similarity index 97%
rename from src/backend/src/main/kotlin/org/icpclive/api/Widgets.kt
rename to src/backend-api/src/main/kotlin/org/icpclive/api/Widgets.kt
index 5b8b4a725..10c5d9272 100644
--- a/src/backend/src/main/kotlin/org/icpclive/api/Widgets.kt
+++ b/src/backend-api/src/main/kotlin/org/icpclive/api/Widgets.kt
@@ -4,10 +4,11 @@ package org.icpclive.api
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
-import org.icpclive.Config
import kotlin.random.Random
import kotlin.random.nextUInt
+var defaultWidgetPositions: Map = emptyMap()
+
fun generateId(widgetPrefix: String): String = "$widgetPrefix-${Random.nextUInt()}"
@Serializable
@@ -19,7 +20,7 @@ class LocationRectangle(
)
fun getLocationOrDefault(widgetPrefix: String, defaultLocationRectangle: LocationRectangle) =
- Config.widgetPositions.getOrDefault(widgetPrefix, defaultLocationRectangle)
+ defaultWidgetPositions.getOrDefault(widgetPrefix, defaultLocationRectangle)
@Serializable
sealed class Widget(
diff --git a/src/backend/build.gradle.kts b/src/backend/build.gradle.kts
index c69e96dc7..9b98913d2 100644
--- a/src/backend/build.gradle.kts
+++ b/src/backend/build.gradle.kts
@@ -54,6 +54,7 @@ tasks {
dependencies {
implementation(projects.cds)
implementation(projects.common)
+ implementation(projects.backendApi)
implementation(libs.cli)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktor.server.auth)
diff --git a/src/backend/src/main/kotlin/org/icpclive/Application.kt b/src/backend/src/main/kotlin/org/icpclive/Application.kt
index 01f9be8b2..4d5e5148a 100644
--- a/src/backend/src/main/kotlin/org/icpclive/Application.kt
+++ b/src/backend/src/main/kotlin/org/icpclive/Application.kt
@@ -133,8 +133,8 @@ fun Application.module() {
.stateIn(this)
DataBus.advancedPropertiesFlow.completeOrThrow(advancedPropertiesFlow)
- val loader = parseFileToCdsSettings(path)
- .toFlow(config.creds)
+ val loader = parseFileToCdsSettings(path, config.creds)
+ .toFlow()
.applyAdvancedProperties(advancedPropertiesFlow)
.contestState()
.filterUseless()
diff --git a/src/backend/src/main/kotlin/org/icpclive/Config.kt b/src/backend/src/main/kotlin/org/icpclive/Config.kt
index ca97ba76c..70798fda4 100644
--- a/src/backend/src/main/kotlin/org/icpclive/Config.kt
+++ b/src/backend/src/main/kotlin/org/icpclive/Config.kt
@@ -8,6 +8,7 @@ import com.github.ajalt.clikt.parameters.types.*
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import org.icpclive.api.LocationRectangle
+import org.icpclive.api.defaultWidgetPositions
object Config : CliktCommand(name = "java -jar live-v3.jar", printHelpOnEmptyArgs = true) {
val configDirectory by option(
@@ -50,12 +51,14 @@ object Config : CliktCommand(name = "java -jar live-v3.jar", printHelpOnEmptyArg
path.toFile().inputStream().use { Json.decodeFromStream