From 8150fdbf13b7a8a00a5c9d5c8a5a612fcf8864c9 Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 20:42:23 +0100 Subject: [PATCH 01/14] Updated from origin/main --- .gradle/8.14/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 17 bytes .../java/hhn/temp/project/provider/Database.java | 1 + .../project/provider/SimpleDatabaseManager.java | 9 ++++++++- test/hhn/temp/project/DatabaseGoodCasesTest.java | 14 -------------- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.gradle/8.14/fileHashes/fileHashes.lock b/.gradle/8.14/fileHashes/fileHashes.lock index 3bdaec1a8f7fd341ca151b56ad3b2ecba29eccb8..59980652cf40366787c1e51f14bd0c0d2e185c6d 100644 GIT binary patch literal 17 UcmZQJ+4?|x>8n?D3=rT606a4VH~;_u literal 17 VcmZQJ+4?|x>8n?D3}C>x0RTLl1)u-` diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a4beab638e9dd3c60e6aec3ae9c039673dd95b87..ec8e1775d1ca302ba4256f7d81168feadc1f0a6a 100644 GIT binary patch literal 17 VcmZQBa#cSO`uvX|0~j#!0{}221Oos7 literal 17 UcmZQBa#cSO`uvX|0|eX!05I?b&;S4c diff --git a/src/main/java/hhn/temp/project/provider/Database.java b/src/main/java/hhn/temp/project/provider/Database.java index be2d5c74..2c44df3f 100644 --- a/src/main/java/hhn/temp/project/provider/Database.java +++ b/src/main/java/hhn/temp/project/provider/Database.java @@ -6,4 +6,5 @@ import java.sql.SQLException; public interface Database { public void connect() throws SQLException, IOException; + public void close() throws SQLException; } diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index 941e74e4..c624e80f 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -26,7 +26,7 @@ public class SimpleDatabaseManager implements DatabaseManager { @Override public void saveObject(E object) { - +g } @Override @@ -38,4 +38,11 @@ public class SimpleDatabaseManager implements DatabaseManager { public void connect() throws SQLException, IOException { connection = DriverManager.getConnection("jdbc:mysql://sql7.freesqldatabase.com/sql7810540?user=sql7810540&password=mXdJCFtDZz"); } + + @Override + public void close() throws SQLException { + if (connection != null) { + connection.close(); + } + } } diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index 4f776ea7..6e9ed491 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -13,18 +13,6 @@ public class DatabaseGoodCasesTest { private DatabaseManager databaseManager; - public class TestClass { - private int id; - private String dataString; - private int dataInteger; - - public TestClass(int id, String dataString, int dataInteger) { - this.id = id; - this.dataString = dataString; - this.dataInteger = dataInteger; - } - } - @BeforeEach public void setup() { databaseManager = new SimpleDatabaseManager<>(); @@ -33,7 +21,6 @@ public class DatabaseGoodCasesTest { @Test @DisplayName("Assert that the TestClass could be inserted into the database") public void assertGetTestClass() throws SQLException, IOException { - TestClass testClass = new TestClass(1, "Hello World", 123); databaseManager.connect(); databaseManager.getObject(1); @@ -42,7 +29,6 @@ public class DatabaseGoodCasesTest { @Test @DisplayName("Assert that the TestClass could be inserted into the database") public void assertInsertTestClass() throws SQLException, IOException { - TestClass testClass = new TestClass(1, "Hello World", 123); databaseManager.connect(); databaseManager.saveObject(testClass); From b801ea7d214fbf8549263d2c34065803bb418c8e Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 20:52:47 +0100 Subject: [PATCH 02/14] Added NotImplementedException, edited some DatabaseGoodCasesTest tests. --- src/main/java/hhn/temp/project/Task.java | 4 +--- .../temp/project/provider/DatabaseManager.java | 8 +++++--- .../project/provider/SimpleDatabaseManager.java | 14 ++++++++------ test/hhn/temp/project/DatabaseBadCasesTest.java | 8 +------- .../hhn/temp/project/DatabaseGoodCasesTest.java | 17 +++++++++++------ 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/main/java/hhn/temp/project/Task.java b/src/main/java/hhn/temp/project/Task.java index b5ee9cc9..f4d015bb 100644 --- a/src/main/java/hhn/temp/project/Task.java +++ b/src/main/java/hhn/temp/project/Task.java @@ -5,10 +5,8 @@ public class Task { String description; int taskId; int workerId; - AssignmentManager manager; TaskState state; - public Task(int taskId, int workerId, String name, String description, AssignmentManager manager) { - this.manager = manager; + public Task(int taskId, int workerId, String name, String description) { this.name = name; this.description = description; this.taskId = taskId; diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index 272943a9..21644dcf 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -1,10 +1,12 @@ package hhn.temp.project.provider; +import jdk.jshell.spi.ExecutionControl; + import java.util.Collection; public interface DatabaseManager extends Database { public void saveObjects(Collection objects); - public Collection getObjects(); - public void saveObject(E object); - public E getObject(int id); + public Collection getObjects() throws ExecutionControl.NotImplementedException; + public void saveObject(E object) throws ExecutionControl.NotImplementedException; + public E getObject(int id) throws ExecutionControl.NotImplementedException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index c624e80f..c12f9a1b 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -1,5 +1,7 @@ package hhn.temp.project.provider; +import jdk.jshell.spi.ExecutionControl; + import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -20,18 +22,18 @@ public class SimpleDatabaseManager implements DatabaseManager { } @Override - public Collection getObjects() { - return List.of(); + public Collection getObjects() throws ExecutionControl.NotImplementedException { + throw new ExecutionControl.NotImplementedException("Not Implemented!"); } @Override - public void saveObject(E object) { -g + public void saveObject(E object) throws ExecutionControl.NotImplementedException { + throw new ExecutionControl.NotImplementedException("Not Implemented!"); } @Override - public E getObject(int id) { - return null; + public E getObject(int id) throws ExecutionControl.NotImplementedException { + throw new ExecutionControl.NotImplementedException("Not Implemented!"); } @Override diff --git a/test/hhn/temp/project/DatabaseBadCasesTest.java b/test/hhn/temp/project/DatabaseBadCasesTest.java index c9d45048..6e73bd41 100644 --- a/test/hhn/temp/project/DatabaseBadCasesTest.java +++ b/test/hhn/temp/project/DatabaseBadCasesTest.java @@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.*; public class DatabaseBadCasesTest { - private DatabaseManager databaseManager; + private DatabaseManager databaseManager; public class TestClass { private int id; @@ -30,10 +30,4 @@ public class DatabaseBadCasesTest { public void setup() { databaseManager = new SimpleDatabaseManager<>(); } - - @Test - @DisplayName("Assert connection failed") - public void assertConnectionFailed() { - assertThrows(SQLException.class, () -> databaseManager.connect()); - } } \ No newline at end of file diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index 6e9ed491..53b4e250 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -2,6 +2,7 @@ package hhn.temp.project; import hhn.temp.project.provider.DatabaseManager; import hhn.temp.project.provider.SimpleDatabaseManager; +import jdk.jshell.spi.ExecutionControl; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,27 +12,31 @@ import java.sql.SQLException; public class DatabaseGoodCasesTest { - private DatabaseManager databaseManager; + private DatabaseManager databaseManager; + private AssignmentManager manager; @BeforeEach public void setup() { databaseManager = new SimpleDatabaseManager<>(); + manager = new AssignmentManager(); } @Test @DisplayName("Assert that the TestClass could be inserted into the database") - public void assertGetTestClass() throws SQLException, IOException { + public void assertGetTestClass() throws SQLException, IOException, ExecutionControl.NotImplementedException { databaseManager.connect(); - databaseManager.getObject(1); + Task task = databaseManager.getObject(1); } @Test - @DisplayName("Assert that the TestClass could be inserted into the database") - public void assertInsertTestClass() throws SQLException, IOException { + @DisplayName("Assert that a simple Task could be inserted into the database") + public void assertInsertTestClass() throws SQLException, IOException, ExecutionControl.NotImplementedException { + + Task testTask = new Task(1, 1, "Hello World", "Description"); databaseManager.connect(); - databaseManager.saveObject(testClass); + databaseManager.saveObject(testTask); } @Test From d9da291d45c7b117097df587a5a42d04e8893265 Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 21:45:26 +0100 Subject: [PATCH 03/14] Added first sql-queries into the SimpleDatabaseManager.java (Still failing / Red Errors) --- .../hhn/temp/project/AssignmentManager.java | 2 +- .../project/provider/DatabaseManager.java | 6 +- .../provider/SimpleDatabaseManager.java | 59 ++++++++++++++++--- .../project/provider/sql/createTaskTable.sql | 7 +++ .../project/provider/sql/deleteTaskTable.sql | 1 + .../project/provider/sql/insertTaskTable.sql | 1 + .../project/provider/sql/selectTaskTable.sql | 1 + .../project/provider/sql/updateTaskTable.sql | 1 + .../temp/project/DatabaseGoodCasesTest.java | 3 + 9 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql create mode 100644 src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql create mode 100644 src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql create mode 100644 src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql create mode 100644 src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql diff --git a/src/main/java/hhn/temp/project/AssignmentManager.java b/src/main/java/hhn/temp/project/AssignmentManager.java index ec8d4510..756b1eeb 100644 --- a/src/main/java/hhn/temp/project/AssignmentManager.java +++ b/src/main/java/hhn/temp/project/AssignmentManager.java @@ -27,7 +27,7 @@ public class AssignmentManager { if (!workerMap.containsKey(workerId) || name == null || description == null) { throw new IllegalArgumentException("WorkerId must exist and name or description can't be null"); } - Task task = new Task(++taskIdCounter, workerId, name, description, this); + Task task = new Task(++taskIdCounter, workerId, name, description); taskMap.put(taskIdCounter, task); return taskIdCounter; } diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index 21644dcf..e59789c4 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -2,11 +2,13 @@ package hhn.temp.project.provider; import jdk.jshell.spi.ExecutionControl; +import java.io.IOException; +import java.sql.SQLException; import java.util.Collection; public interface DatabaseManager extends Database { - public void saveObjects(Collection objects); + public void saveObjects(Collection objects) throws ExecutionControl.NotImplementedException, IOException, SQLException; public Collection getObjects() throws ExecutionControl.NotImplementedException; - public void saveObject(E object) throws ExecutionControl.NotImplementedException; + public void saveObject(E object) throws ExecutionControl.NotImplementedException, IOException, SQLException; public E getObject(int id) throws ExecutionControl.NotImplementedException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index c12f9a1b..1542a698 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -1,34 +1,75 @@ package hhn.temp.project.provider; +import hhn.temp.project.Task; +import hhn.temp.project.TaskState; import jdk.jshell.spi.ExecutionControl; -import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Collection; -import java.util.List; public class SimpleDatabaseManager implements DatabaseManager { private Connection connection; - @Override - public void saveObjects(Collection objects) { - + private enum QueryMode { + SELECT, INSERT, DELETE, UPDATE } + private int taskStateToInt(TaskState taskState) { + return (taskState == TaskState.FINISHED) ? 1 : 0; + } + + private TaskState intToTaskState(int i) { + if (i < 0 || i > 1) { + throw new IllegalArgumentException("Integer may only bet 0 or 1"); + } + + return (i == 1) ? TaskState.FINISHED : TaskState.IN_PROGRESS; + } + + private String getQuery(QueryMode query) throws IOException { + String queryString = null; + + switch (query) { + case INSERT -> queryString = "INSERT INTO Task (name, description, workerid, taskstate) VALUES (?, ?, ?, ?)"; + case UPDATE -> queryString = "UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ?"; + case DELETE -> queryString = "DELETE FROM Task WHERE taskid = ?"; + case SELECT -> queryString = "SELECT * FROM Task WHERE workerid = ?"; + } + + return queryString; + } + + @Override + public void saveObjects(Collection objects) throws IOException, SQLException { + for (E obj : objects) { + saveObject(obj); + } + } + + @Override public Collection getObjects() throws ExecutionControl.NotImplementedException { throw new ExecutionControl.NotImplementedException("Not Implemented!"); } @Override - public void saveObject(E object) throws ExecutionControl.NotImplementedException { - throw new ExecutionControl.NotImplementedException("Not Implemented!"); + public void saveObject(E object) throws IOException, SQLException { + String query = getQuery(QueryMode.INSERT); + + if (object instanceof Task task) { + try (PreparedStatement ps = connection.prepareStatement(query)) { + ps.setInt(1, task.getTaskId()); + ps.setString(2, task.getName()); + ps.setString(3, task.getDescription()); + ps.setInt(4, task.getWorkerId()); + ps.setInt(5, taskStateToInt(task.getTaskState())); + } + } } @Override diff --git a/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql new file mode 100644 index 00000000..6e39b6f4 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql @@ -0,0 +1,7 @@ +CREATE TABLE Task ( + taskid INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + description TEXT, + workerid INT, + taskstate INT +); \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql new file mode 100644 index 00000000..179a1d92 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql @@ -0,0 +1 @@ +DELETE FROM Task WHERE taskid = ? \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql new file mode 100644 index 00000000..bc00c911 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql @@ -0,0 +1 @@ +INSERT INTO Task (name, description, workerid, taskstate) VALUES (?, ?, ?, ?) \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql new file mode 100644 index 00000000..34d1e37a --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql @@ -0,0 +1 @@ +SELECT * FROM Task WHERE workerid = ? \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql new file mode 100644 index 00000000..e013b304 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql @@ -0,0 +1 @@ +UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ? \ No newline at end of file diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index 53b4e250..43768733 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -27,6 +27,7 @@ public class DatabaseGoodCasesTest { databaseManager.connect(); Task task = databaseManager.getObject(1); + databaseManager.close(); } @Test @@ -37,11 +38,13 @@ public class DatabaseGoodCasesTest { databaseManager.connect(); databaseManager.saveObject(testTask); + databaseManager.close(); } @Test @DisplayName("Assert connecting to database") public void assertConnectToDatabase() throws SQLException, IOException { databaseManager.connect(); + databaseManager.close(); } } \ No newline at end of file From 625e089a36ac0d960be3eb24b6f354a70ec47f2a Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 22:10:24 +0100 Subject: [PATCH 04/14] Prepared new tests --- .../hhn/temp/project/provider/Database.java | 1 + .../project/provider/DatabaseManager.java | 4 +- .../project/provider/sql/insertTaskTable.sql | 2 +- .../temp/project/DatabaseGoodCasesTest.java | 41 ++++++++++++++++--- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/Database.java b/src/main/java/hhn/temp/project/provider/Database.java index 2c44df3f..f11f507d 100644 --- a/src/main/java/hhn/temp/project/provider/Database.java +++ b/src/main/java/hhn/temp/project/provider/Database.java @@ -7,4 +7,5 @@ import java.sql.SQLException; public interface Database { public void connect() throws SQLException, IOException; public void close() throws SQLException; + public void clearDatabase() throws SQLException; } diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index e59789c4..044b9ead 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -9,6 +9,6 @@ import java.util.Collection; public interface DatabaseManager extends Database { public void saveObjects(Collection objects) throws ExecutionControl.NotImplementedException, IOException, SQLException; public Collection getObjects() throws ExecutionControl.NotImplementedException; - public void saveObject(E object) throws ExecutionControl.NotImplementedException, IOException, SQLException; - public E getObject(int id) throws ExecutionControl.NotImplementedException; + public void saveObject(E object) throws IOException, SQLException; + public E getObject(int id) throws SQLException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql index bc00c911..aafc7901 100644 --- a/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql +++ b/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql @@ -1 +1 @@ -INSERT INTO Task (name, description, workerid, taskstate) VALUES (?, ?, ?, ?) \ No newline at end of file +INSERT INTO Task (taskid, name, description, workerid, taskstate) VALUES (?, ?, ?, ?, ?) \ No newline at end of file diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index 43768733..e47e0e8e 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -7,8 +7,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + import java.io.IOException; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; public class DatabaseGoodCasesTest { @@ -16,23 +20,37 @@ public class DatabaseGoodCasesTest { private AssignmentManager manager; @BeforeEach - public void setup() { + public void setup() throws SQLException, IOException { databaseManager = new SimpleDatabaseManager<>(); + databaseManager.connect(); + databaseManager.clearDatabase(); manager = new AssignmentManager(); } @Test @DisplayName("Assert that the TestClass could be inserted into the database") - public void assertGetTestClass() throws SQLException, IOException, ExecutionControl.NotImplementedException { + public void assertGetTestClass() throws SQLException, IOException { databaseManager.connect(); - Task task = databaseManager.getObject(1); + + Task task = new Task(1, 1, "hi", "hi"); + + databaseManager.saveObject(task); + + Task taskNew = databaseManager.getObject(1); + + assertEquals(task.getTaskId(), taskNew.getTaskId()); + assertEquals(task.getName(), taskNew.getName()); + assertEquals(task.getDescription(), taskNew.getDescription()); + assertEquals(task.getWorkerId(), taskNew.getWorkerId()); + assertEquals(task.getTaskState(), taskNew.getTaskState()); + databaseManager.close(); } @Test @DisplayName("Assert that a simple Task could be inserted into the database") - public void assertInsertTestClass() throws SQLException, IOException, ExecutionControl.NotImplementedException { + public void assertInsertTask() throws SQLException, IOException, ExecutionControl.NotImplementedException { Task testTask = new Task(1, 1, "Hello World", "Description"); @@ -42,9 +60,20 @@ public class DatabaseGoodCasesTest { } @Test - @DisplayName("Assert connecting to database") - public void assertConnectToDatabase() throws SQLException, IOException { + @DisplayName("Assert that simple Tasks could be inserted into the database") + public void assertInsertMultipleTasks() throws SQLException, IOException, ExecutionControl.NotImplementedException { + + Task testTaskZero = new Task(1, 1, "Hello", "Description"); + Task testTaskOne = new Task(2, 2, "World", "Description"); + Task testTaskTwo = new Task(3, 3, "Hello World", "Description"); + + Collection tasks = new ArrayList<>(); + tasks.add(testTaskZero); + tasks.add(testTaskOne); + tasks.add(testTaskTwo); + databaseManager.connect(); + databaseManager.saveObjects(tasks); databaseManager.close(); } } \ No newline at end of file From 41e711ab74956082b4a769ab459b6b17017e9e03 Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 22:22:30 +0100 Subject: [PATCH 05/14] Added resultSet.next() --- .../provider/SimpleDatabaseManager.java | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index 1542a698..481c2628 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -5,10 +5,7 @@ import hhn.temp.project.TaskState; import jdk.jshell.spi.ExecutionControl; import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.SQLException; +import java.sql.*; import java.util.Collection; public class SimpleDatabaseManager implements DatabaseManager { @@ -31,11 +28,11 @@ public class SimpleDatabaseManager implements DatabaseManager { return (i == 1) ? TaskState.FINISHED : TaskState.IN_PROGRESS; } - private String getQuery(QueryMode query) throws IOException { + private String getQuery(QueryMode query) { String queryString = null; switch (query) { - case INSERT -> queryString = "INSERT INTO Task (name, description, workerid, taskstate) VALUES (?, ?, ?, ?)"; + case INSERT -> queryString = "INSERT INTO Task (taskid, name, description, workerid, taskstate) VALUES (?, ?, ?, ?, ?)"; case UPDATE -> queryString = "UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ?"; case DELETE -> queryString = "DELETE FROM Task WHERE taskid = ?"; case SELECT -> queryString = "SELECT * FROM Task WHERE workerid = ?"; @@ -44,6 +41,12 @@ public class SimpleDatabaseManager implements DatabaseManager { return queryString; } + public void clearDatabase() throws SQLException { + try (Statement statement = connection.createStatement()) { + statement.executeUpdate("TRUNCATE TABLE Task;"); + } + } + @Override public void saveObjects(Collection objects) throws IOException, SQLException { for (E obj : objects) { @@ -58,7 +61,7 @@ public class SimpleDatabaseManager implements DatabaseManager { } @Override - public void saveObject(E object) throws IOException, SQLException { + public void saveObject(E object) throws SQLException { String query = getQuery(QueryMode.INSERT); if (object instanceof Task task) { @@ -68,13 +71,35 @@ public class SimpleDatabaseManager implements DatabaseManager { ps.setString(3, task.getDescription()); ps.setInt(4, task.getWorkerId()); ps.setInt(5, taskStateToInt(task.getTaskState())); + + ps.executeUpdate(); } } } @Override - public E getObject(int id) throws ExecutionControl.NotImplementedException { - throw new ExecutionControl.NotImplementedException("Not Implemented!"); + public E getObject(int id) throws SQLException { + String query = getQuery(QueryMode.SELECT); + Task task = null; + + try (PreparedStatement ps = connection.prepareStatement(query)) { + ps.setInt(1, id); + + ResultSet resultSet = ps.executeQuery(); + + if (resultSet.next()) { + + task = new Task( + resultSet.getInt("taskid"), + resultSet.getInt("workderid"), + resultSet.getString("name"), + resultSet.getString("description") + ); + task.setTaskState(intToTaskState(resultSet.getInt("taskstate"))); + } + } + + return (E) task; } @Override From daafd7d09e5a4bfa4ad7e08d5ca6622aa3c78a69 Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 22:24:04 +0100 Subject: [PATCH 06/14] Fixed a typo in the query --- .../java/hhn/temp/project/provider/SimpleDatabaseManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index 481c2628..8ebd65ac 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -91,7 +91,7 @@ public class SimpleDatabaseManager implements DatabaseManager { task = new Task( resultSet.getInt("taskid"), - resultSet.getInt("workderid"), + resultSet.getInt("workerid"), resultSet.getString("name"), resultSet.getString("description") ); From 995fba6fce00f861b45c78c959fb2dc80b6c9d2a Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 22:29:52 +0100 Subject: [PATCH 07/14] Added a placeholder method to delete objects from the database. --- .../java/hhn/temp/project/provider/Database.java | 2 +- .../hhn/temp/project/provider/DatabaseManager.java | 7 ++++--- .../project/provider/SimpleDatabaseManager.java | 13 +++++++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/Database.java b/src/main/java/hhn/temp/project/provider/Database.java index f11f507d..9ff971df 100644 --- a/src/main/java/hhn/temp/project/provider/Database.java +++ b/src/main/java/hhn/temp/project/provider/Database.java @@ -5,7 +5,7 @@ import java.nio.file.Path; import java.sql.SQLException; public interface Database { - public void connect() throws SQLException, IOException; + public void connect() throws SQLException; public void close() throws SQLException; public void clearDatabase() throws SQLException; } diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index 044b9ead..2335d83d 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -7,8 +7,9 @@ import java.sql.SQLException; import java.util.Collection; public interface DatabaseManager extends Database { - public void saveObjects(Collection objects) throws ExecutionControl.NotImplementedException, IOException, SQLException; - public Collection getObjects() throws ExecutionControl.NotImplementedException; - public void saveObject(E object) throws IOException, SQLException; + public void saveObjects(Collection objects) throws SQLException; + public Collection getObjects() throws SQLException; + public void saveObject(E object) throws SQLException; public E getObject(int id) throws SQLException; + public void deleteObject(int id) throws SQLException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index 8ebd65ac..f7baa11a 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -48,7 +48,7 @@ public class SimpleDatabaseManager implements DatabaseManager { } @Override - public void saveObjects(Collection objects) throws IOException, SQLException { + public void saveObjects(Collection objects) throws SQLException { for (E obj : objects) { saveObject(obj); } @@ -56,8 +56,8 @@ public class SimpleDatabaseManager implements DatabaseManager { @Override - public Collection getObjects() throws ExecutionControl.NotImplementedException { - throw new ExecutionControl.NotImplementedException("Not Implemented!"); + public Collection getObjects() throws SQLException { + return null; } @Override @@ -103,7 +103,12 @@ public class SimpleDatabaseManager implements DatabaseManager { } @Override - public void connect() throws SQLException, IOException { + public void deleteObject(int id) throws SQLException { + throw new SQLException("Not implemented yet"); + } + + @Override + public void connect() throws SQLException { connection = DriverManager.getConnection("jdbc:mysql://sql7.freesqldatabase.com/sql7810540?user=sql7810540&password=mXdJCFtDZz"); } From f2cc964d393966ede42025bc866472e4720756a0 Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 23:04:21 +0100 Subject: [PATCH 08/14] Added new tests that needs to be implemented. --- .../project/provider/DatabaseManager.java | 5 +- .../provider/SimpleDatabaseManager.java | 43 +++++++++------- .../temp/project/DatabaseBadCasesTest.java | 17 ++++++- .../temp/project/DatabaseGoodCasesTest.java | 49 ++++++++++++++++--- 4 files changed, 87 insertions(+), 27 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index 2335d83d..e2defa3e 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -10,6 +10,7 @@ public interface DatabaseManager extends Database { public void saveObjects(Collection objects) throws SQLException; public Collection getObjects() throws SQLException; public void saveObject(E object) throws SQLException; - public E getObject(int id) throws SQLException; - public void deleteObject(int id) throws SQLException; + public E getObject(int taskId) throws SQLException; + public void deleteObject(int taskId) throws SQLException; + public E updateObject(int taskId, E object) throws SQLException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index f7baa11a..d13775e0 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -2,11 +2,11 @@ package hhn.temp.project.provider; import hhn.temp.project.Task; import hhn.temp.project.TaskState; -import jdk.jshell.spi.ExecutionControl; -import java.io.IOException; import java.sql.*; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; public class SimpleDatabaseManager implements DatabaseManager { @@ -78,33 +78,42 @@ public class SimpleDatabaseManager implements DatabaseManager { } @Override - public E getObject(int id) throws SQLException { + public E getObject(int taskId) throws SQLException { String query = getQuery(QueryMode.SELECT); Task task = null; - try (PreparedStatement ps = connection.prepareStatement(query)) { - ps.setInt(1, id); + PreparedStatement ps = connection.prepareStatement(query); + ps.setInt(1, taskId); - ResultSet resultSet = ps.executeQuery(); + ResultSet resultSet = ps.executeQuery(); - if (resultSet.next()) { + if (resultSet.next()) { - task = new Task( - resultSet.getInt("taskid"), - resultSet.getInt("workerid"), - resultSet.getString("name"), - resultSet.getString("description") - ); - task.setTaskState(intToTaskState(resultSet.getInt("taskstate"))); - } + task = new Task( + resultSet.getInt("taskid"), + resultSet.getInt("workerid"), + resultSet.getString("name"), + resultSet.getString("description") + ); + task.setTaskState(intToTaskState(resultSet.getInt("taskstate"))); } return (E) task; } @Override - public void deleteObject(int id) throws SQLException { - throw new SQLException("Not implemented yet"); + public void deleteObject(int taskId) throws SQLException { + String query = getQuery(QueryMode.DELETE); + + try (PreparedStatement ps = connection.prepareStatement(query)) { + ps.setInt(1, taskId); + ps.executeUpdate(); + } + } + + @Override + public E updateObject(int taskId, E object) throws SQLException { + return null; } @Override diff --git a/test/hhn/temp/project/DatabaseBadCasesTest.java b/test/hhn/temp/project/DatabaseBadCasesTest.java index 6e73bd41..f00db386 100644 --- a/test/hhn/temp/project/DatabaseBadCasesTest.java +++ b/test/hhn/temp/project/DatabaseBadCasesTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.io.IOException; import java.sql.SQLException; import static org.junit.jupiter.api.Assertions.*; @@ -27,7 +28,21 @@ public class DatabaseBadCasesTest { } @BeforeEach - public void setup() { + public void setup() throws SQLException, IOException { databaseManager = new SimpleDatabaseManager<>(); + databaseManager.connect(); + databaseManager.clearDatabase(); + } + + @Test + @DisplayName("Gets an object that may not be existent") + public void assertObjectShouldNotBeExistent() throws SQLException { + assertNull(databaseManager.getObject(999)); + } + + @Test + @DisplayName("Updates an object that does not exist") + public void assertUpdateNonExistentObject() throws SQLException { + assertNull(databaseManager.updateObject(123, new Task(1, 2, "", ""))); } } \ No newline at end of file diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index e47e0e8e..0c16f0fb 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -2,7 +2,6 @@ package hhn.temp.project; import hhn.temp.project.provider.DatabaseManager; import hhn.temp.project.provider.SimpleDatabaseManager; -import jdk.jshell.spi.ExecutionControl; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -17,19 +16,17 @@ import java.util.Collection; public class DatabaseGoodCasesTest { private DatabaseManager databaseManager; - private AssignmentManager manager; @BeforeEach public void setup() throws SQLException, IOException { databaseManager = new SimpleDatabaseManager<>(); databaseManager.connect(); databaseManager.clearDatabase(); - manager = new AssignmentManager(); } @Test @DisplayName("Assert that the TestClass could be inserted into the database") - public void assertGetTestClass() throws SQLException, IOException { + public void assertGetTestClass() throws SQLException { databaseManager.connect(); @@ -48,9 +45,26 @@ public class DatabaseGoodCasesTest { databaseManager.close(); } + @Test + @DisplayName("Assert that an inserted and deleted task is not there anymore") + public void assertDeleteTest() throws SQLException { + + databaseManager.connect(); + + Task task = new Task(9, 1, "hi", "hi"); + + databaseManager.saveObject(task); + + databaseManager.deleteObject(9); + + databaseManager.getObject(9); + + databaseManager.close(); + } + @Test @DisplayName("Assert that a simple Task could be inserted into the database") - public void assertInsertTask() throws SQLException, IOException, ExecutionControl.NotImplementedException { + public void assertInsertTask() throws SQLException { Task testTask = new Task(1, 1, "Hello World", "Description"); @@ -60,8 +74,8 @@ public class DatabaseGoodCasesTest { } @Test - @DisplayName("Assert that simple Tasks could be inserted into the database") - public void assertInsertMultipleTasks() throws SQLException, IOException, ExecutionControl.NotImplementedException { + @DisplayName("Assert that multiple Tasks could be inserted into the database") + public void assertInsertMultipleTasks() throws SQLException { Task testTaskZero = new Task(1, 1, "Hello", "Description"); Task testTaskOne = new Task(2, 2, "World", "Description"); @@ -76,4 +90,25 @@ public class DatabaseGoodCasesTest { databaseManager.saveObjects(tasks); databaseManager.close(); } + + @Test + @DisplayName("Assert insert object and update it") + public void assertInsertUpdateTask() throws SQLException { + + int taskId = 1; + + Task testTask = new Task(taskId, 1, "Hello World", "Description"); + Task newTask = new Task(taskId, 1, "No World", "Description"); + + databaseManager.connect(); + databaseManager.saveObject(testTask); + newTask = databaseManager.updateObject(testTask.getTaskId(), newTask); + + assertNotNull(testTask); + + assertNotEquals(testTask.getDescription(), newTask.getDescription()); + assertEquals(testTask.getTaskId(), newTask.getTaskId()); + + databaseManager.close(); + } } \ No newline at end of file From 292d6c74c3b9f1b752ba27d73ce2c65eba085605 Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Wed, 3 Dec 2025 23:17:31 +0100 Subject: [PATCH 09/14] Implemented Update method --- .../provider/SimpleDatabaseManager.java | 38 +++++++++++++++---- .../project/provider/sql/createTaskTable.sql | 3 +- .../temp/project/DatabaseBadCasesTest.java | 2 +- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index d13775e0..68d9d8e1 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -65,15 +65,14 @@ public class SimpleDatabaseManager implements DatabaseManager { String query = getQuery(QueryMode.INSERT); if (object instanceof Task task) { - try (PreparedStatement ps = connection.prepareStatement(query)) { - ps.setInt(1, task.getTaskId()); - ps.setString(2, task.getName()); - ps.setString(3, task.getDescription()); - ps.setInt(4, task.getWorkerId()); - ps.setInt(5, taskStateToInt(task.getTaskState())); + PreparedStatement ps = connection.prepareStatement(query); + ps.setInt(1, task.getTaskId()); + ps.setString(2, task.getName()); + ps.setString(3, task.getDescription()); + ps.setInt(4, task.getWorkerId()); + ps.setInt(5, taskStateToInt(task.getTaskState())); - ps.executeUpdate(); - } + ps.executeUpdate(); } } @@ -113,6 +112,29 @@ public class SimpleDatabaseManager implements DatabaseManager { @Override public E updateObject(int taskId, E object) throws SQLException { + String query = getQuery(QueryMode.UPDATE); + + if (object instanceof Task task) { + + if (taskId != task.getTaskId()) { + throw new IllegalArgumentException("Task ID does not equals Task ID from Task!"); + } + + PreparedStatement ps = connection.prepareStatement(query); + ps.setString(1, task.getName()); + ps.setString(2, task.getDescription()); + ps.setInt(3, taskStateToInt(task.getTaskState())); + ps.setInt(4, task.getTaskId()); + + int updated = ps.executeUpdate(); + + if (updated == 0) { + return null; + } + + return (E) task; + } + return null; } diff --git a/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql index 6e39b6f4..bc1ab8f5 100644 --- a/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql +++ b/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql @@ -1,5 +1,6 @@ CREATE TABLE Task ( - taskid INT AUTO_INCREMENT PRIMARY KEY, + id INT AUTO_INCREMENT PRIMARY KEY, + taskid INT, name VARCHAR(255) NOT NULL, description TEXT, workerid INT, diff --git a/test/hhn/temp/project/DatabaseBadCasesTest.java b/test/hhn/temp/project/DatabaseBadCasesTest.java index f00db386..a775001c 100644 --- a/test/hhn/temp/project/DatabaseBadCasesTest.java +++ b/test/hhn/temp/project/DatabaseBadCasesTest.java @@ -43,6 +43,6 @@ public class DatabaseBadCasesTest { @Test @DisplayName("Updates an object that does not exist") public void assertUpdateNonExistentObject() throws SQLException { - assertNull(databaseManager.updateObject(123, new Task(1, 2, "", ""))); + assertNull(databaseManager.updateObject(123, new Task(123, 2, "", ""))); } } \ No newline at end of file From e9b2ad0a57ce416aaba93aa3d89cae611035e78a Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Mon, 8 Dec 2025 17:50:21 +0100 Subject: [PATCH 10/14] Heavily refactored DatabaseManager.java and SimpleDatabaseManager.java. Fully refactored DatabaseGoodCasesTest.java and DatabaseBadCasesTest.java. --- .../hhn/temp/project/provider/Database.java | 24 ++- .../project/provider/DatabaseManager.java | 117 ++++++++++- .../provider/SimpleDatabaseManager.java | 190 ++++++------------ .../temp/project/DatabaseBadCasesTest.java | 40 ++-- .../temp/project/DatabaseGoodCasesTest.java | 108 ++++------ 5 files changed, 254 insertions(+), 225 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/Database.java b/src/main/java/hhn/temp/project/provider/Database.java index 9ff971df..1f9a84b4 100644 --- a/src/main/java/hhn/temp/project/provider/Database.java +++ b/src/main/java/hhn/temp/project/provider/Database.java @@ -4,8 +4,26 @@ import java.io.IOException; import java.nio.file.Path; import java.sql.SQLException; +/** + * A database interface with basic database connectivity + * @author Riley Schneider + */ public interface Database { - public void connect() throws SQLException; - public void close() throws SQLException; - public void clearDatabase() throws SQLException; + /** + * Creates a connection to the database + * @throws SQLException Thrown if database error occurs + */ + void connect() throws SQLException; + + /** + * Closes a connection to the database + * @throws SQLException Thrown if database error occurs + */ + void close() throws SQLException; + + /** + * Clears the entire tables in the database and reset primary key counter to each table + * @throws SQLException Thrown if database error occurs + */ + void clearDatabase() throws SQLException; } diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index e2defa3e..a29a05cd 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -1,16 +1,115 @@ package hhn.temp.project.provider; -import jdk.jshell.spi.ExecutionControl; +import hhn.temp.project.Task; +import hhn.temp.project.Worker; -import java.io.IOException; import java.sql.SQLException; import java.util.Collection; -public interface DatabaseManager extends Database { - public void saveObjects(Collection objects) throws SQLException; - public Collection getObjects() throws SQLException; - public void saveObject(E object) throws SQLException; - public E getObject(int taskId) throws SQLException; - public void deleteObject(int taskId) throws SQLException; - public E updateObject(int taskId, E object) throws SQLException; +/** + * Simple Database Manager to handle simple command such as insertion, deletion, updating of Task and Worker objects. + * @author Riley Schneider + */ +public interface DatabaseManager extends Database { + /** + * Saves a Task object into the database + * @param task Task to be saved into the database + * @throws SQLException Thrown if database error occurs + */ + void saveTask(Task task) throws SQLException; + + /** + * Saves a collection of Task objects into the database + * @param tasks Tasks to be saved into the database + * @throws SQLException Thrown if database error occurs + */ + void saveTasks(Collection tasks) throws SQLException; + + /** + * Saves a Worker object into the database + * @param worker Worker to be saved into the database + * @throws SQLException Thrown if database error occurs + */ + void saveWorker(Worker worker) throws SQLException; + + /** + * Saves a collection Worker objects into the database + * @param workers Workers to be saved into the database + * @throws SQLException Thrown if database error occurs + */ + void saveWorkers(Collection workers) throws SQLException; + + /** + * Updates a Task object that already exists in the database + * @param taskId The ID of the given task + * @param newTaskObject The new Task object that will overwrite the existent task on database + * @throws SQLException Thrown if database error occurs + */ + void updateTask(int taskId, Task newTaskObject) throws SQLException; + + /** + * Updates a Worker object that already exists in the database + * @param workerId The ID of the given worker + * @param newWorkerObject The new Worker object that will overwrite the existent task on database + * @throws SQLException Thrown if database error occurs + */ + void updateWorker(int workerId, Worker newWorkerObject) throws SQLException; + + /** + * Deletes a task from the database + * @param taskId The ID of the given task that needs to be deleted + * @throws SQLException Thrown if database error occurs + */ + void deleteTask(int taskId) throws SQLException; + + /** + * Deletes a worker from the database + * @param workerId The ID of the given worker that needs to be deleted + * @throws SQLException Thrown if database error occurs + */ + void deleteWorker(int workerId) throws SQLException; + + /** + * Gets a collection of all tasks available in the database + * @return A collection of tasks (empty if no task available) + * @throws SQLException Thrown if database error occurs + */ + Collection getTasks() throws SQLException; + + /** + * Gets a collection of all workers available in the database + * @return A collection of workers (empty if no task available) + * @throws SQLException Thrown if database error occurs + */ + Collection getWorkers() throws SQLException; + + /** + * Gets a task given by its ID from the database + * @param taskId The task ID + * @return A task from the database (NULL if no task found) + * @throws SQLException Thrown if database error occurs + */ + Task getTaskByTaskId(int taskId) throws SQLException; + + /** + * Gets a worker given by its ID from the database + * @param workerId The worker ID + * @return A worker from the database (NULL if no worker found) + * @throws SQLException Thrown if database error occurs + */ + Worker getWorkerByWorkerId(int workerId) throws SQLException; + + /** + * Gets the total number of available tasks in the database. + * @return The total number of tasks (0 = zero entries; -1 = error) + * @throws SQLException Thrown if database error occurs + */ + int getTotalNumberOfTasks() throws SQLException; + + /** + * Gets the total number of available workers in the database. + * @return The total number of workers (0 = zero entries; -1 = error) + * @throws SQLException Thrown if database error occurs + */ + int getTotalNumberOfWorkers() throws SQLException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index 68d9d8e1..4134a586 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -1,152 +1,94 @@ package hhn.temp.project.provider; import hhn.temp.project.Task; -import hhn.temp.project.TaskState; +import hhn.temp.project.Worker; import java.sql.*; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; -public class SimpleDatabaseManager implements DatabaseManager { +public class SimpleDatabaseManager implements DatabaseManager { - private Connection connection; - - private enum QueryMode { - SELECT, INSERT, DELETE, UPDATE + @Override + public void saveTask(Task task) throws SQLException { + throw new SQLException(); } - private int taskStateToInt(TaskState taskState) { - return (taskState == TaskState.FINISHED) ? 1 : 0; + @Override + public void saveTasks(Collection tasks) throws SQLException { + throw new SQLException(); } - private TaskState intToTaskState(int i) { - if (i < 0 || i > 1) { - throw new IllegalArgumentException("Integer may only bet 0 or 1"); - } - - return (i == 1) ? TaskState.FINISHED : TaskState.IN_PROGRESS; + @Override + public void saveWorker(Worker worker) throws SQLException { + throw new SQLException(); } - private String getQuery(QueryMode query) { - String queryString = null; + @Override + public void saveWorkers(Collection workers) throws SQLException { + throw new SQLException(); + } - switch (query) { - case INSERT -> queryString = "INSERT INTO Task (taskid, name, description, workerid, taskstate) VALUES (?, ?, ?, ?, ?)"; - case UPDATE -> queryString = "UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ?"; - case DELETE -> queryString = "DELETE FROM Task WHERE taskid = ?"; - case SELECT -> queryString = "SELECT * FROM Task WHERE workerid = ?"; - } + @Override + public void updateTask(int taskId, Task newTaskObject) throws SQLException { + throw new SQLException(); + } - return queryString; + @Override + public void updateWorker(int workerId, Worker newWorkerObject) throws SQLException { + throw new SQLException(); + } + + @Override + public void deleteTask(int taskId) throws SQLException { + throw new SQLException(); + } + + @Override + public void deleteWorker(int workerId) throws SQLException { + throw new SQLException(); + } + + @Override + public Collection getTasks() throws SQLException { + throw new SQLException(); + } + + @Override + public Collection getWorkers() throws SQLException { + throw new SQLException(); + } + + @Override + public Task getTaskByTaskId(int taskId) throws SQLException { + return new Task(0, 0, null, null); + } + + @Override + public Worker getWorkerByWorkerId(int workerId) throws SQLException { + return new Worker(null, 0); + } + + @Override + public int getTotalNumberOfTasks() throws SQLException { + return -1; + } + + @Override + public int getTotalNumberOfWorkers() throws SQLException { + return -1; } public void clearDatabase() throws SQLException { - try (Statement statement = connection.createStatement()) { - statement.executeUpdate("TRUNCATE TABLE Task;"); - } - } - - @Override - public void saveObjects(Collection objects) throws SQLException { - for (E obj : objects) { - saveObject(obj); - } - } - - - @Override - public Collection getObjects() throws SQLException { - return null; - } - - @Override - public void saveObject(E object) throws SQLException { - String query = getQuery(QueryMode.INSERT); - - if (object instanceof Task task) { - PreparedStatement ps = connection.prepareStatement(query); - ps.setInt(1, task.getTaskId()); - ps.setString(2, task.getName()); - ps.setString(3, task.getDescription()); - ps.setInt(4, task.getWorkerId()); - ps.setInt(5, taskStateToInt(task.getTaskState())); - - ps.executeUpdate(); - } - } - - @Override - public E getObject(int taskId) throws SQLException { - String query = getQuery(QueryMode.SELECT); - Task task = null; - - PreparedStatement ps = connection.prepareStatement(query); - ps.setInt(1, taskId); - - ResultSet resultSet = ps.executeQuery(); - - if (resultSet.next()) { - - task = new Task( - resultSet.getInt("taskid"), - resultSet.getInt("workerid"), - resultSet.getString("name"), - resultSet.getString("description") - ); - task.setTaskState(intToTaskState(resultSet.getInt("taskstate"))); - } - - return (E) task; - } - - @Override - public void deleteObject(int taskId) throws SQLException { - String query = getQuery(QueryMode.DELETE); - - try (PreparedStatement ps = connection.prepareStatement(query)) { - ps.setInt(1, taskId); - ps.executeUpdate(); - } - } - - @Override - public E updateObject(int taskId, E object) throws SQLException { - String query = getQuery(QueryMode.UPDATE); - - if (object instanceof Task task) { - - if (taskId != task.getTaskId()) { - throw new IllegalArgumentException("Task ID does not equals Task ID from Task!"); - } - - PreparedStatement ps = connection.prepareStatement(query); - ps.setString(1, task.getName()); - ps.setString(2, task.getDescription()); - ps.setInt(3, taskStateToInt(task.getTaskState())); - ps.setInt(4, task.getTaskId()); - - int updated = ps.executeUpdate(); - - if (updated == 0) { - return null; - } - - return (E) task; - } - - return null; + throw new SQLException(); } @Override public void connect() throws SQLException { - connection = DriverManager.getConnection("jdbc:mysql://sql7.freesqldatabase.com/sql7810540?user=sql7810540&password=mXdJCFtDZz"); + throw new SQLException(); } @Override public void close() throws SQLException { - if (connection != null) { - connection.close(); - } + throw new SQLException(); } } diff --git a/test/hhn/temp/project/DatabaseBadCasesTest.java b/test/hhn/temp/project/DatabaseBadCasesTest.java index a775001c..bda06a3f 100644 --- a/test/hhn/temp/project/DatabaseBadCasesTest.java +++ b/test/hhn/temp/project/DatabaseBadCasesTest.java @@ -13,36 +13,34 @@ import static org.junit.jupiter.api.Assertions.*; public class DatabaseBadCasesTest { - private DatabaseManager databaseManager; - - public class TestClass { - private int id; - private String dataString; - private int dataInteger; - - public TestClass(int id, String dataString, int dataInteger) { - this.id = id; - this.dataString = dataString; - this.dataInteger = dataInteger; - } - } + private DatabaseManager databaseManager; @BeforeEach - public void setup() throws SQLException, IOException { - databaseManager = new SimpleDatabaseManager<>(); + public void setup() throws SQLException { + databaseManager = new SimpleDatabaseManager(); databaseManager.connect(); databaseManager.clearDatabase(); } @Test - @DisplayName("Gets an object that may not be existent") - public void assertObjectShouldNotBeExistent() throws SQLException { - assertNull(databaseManager.getObject(999)); + @DisplayName("Inserting Tasks with the same ID") + public void insertTasksWithTheSameId() throws SQLException { + Task task = new Task(10, 10, "ABC", "XYZ"); + Task taskFaker = new Task(10, 5, "ABC!", "XYZ!"); + + databaseManager.saveTask(task); + + databaseManager.saveTask(taskFaker); } @Test - @DisplayName("Updates an object that does not exist") - public void assertUpdateNonExistentObject() throws SQLException { - assertNull(databaseManager.updateObject(123, new Task(123, 2, "", ""))); + @DisplayName("Inserting Workers with the same ID") + public void insertWorkersWithTheSameId() throws SQLException { + Worker worker = new Worker("Worker-1", 1); + Worker workerFaker = new Worker("Worker-100", 1); + + databaseManager.saveWorker(worker); + + databaseManager.saveWorker(workerFaker); } } \ No newline at end of file diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index 0c16f0fb..b72b00be 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -12,103 +12,75 @@ import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; +import java.util.List; public class DatabaseGoodCasesTest { - private DatabaseManager databaseManager; + private DatabaseManager databaseManager; @BeforeEach - public void setup() throws SQLException, IOException { - databaseManager = new SimpleDatabaseManager<>(); + public void setup() throws SQLException { + databaseManager = new SimpleDatabaseManager(); databaseManager.connect(); databaseManager.clearDatabase(); } @Test - @DisplayName("Assert that the TestClass could be inserted into the database") - public void assertGetTestClass() throws SQLException { + @DisplayName("Inserting test task into the database and receiving back the same test task") + public void insertTaskAndReceiveItBackTest() throws SQLException { + Task task = new Task(123, 10, "Hello World", "Doing Something, hell yeah!"); - databaseManager.connect(); + databaseManager.saveTask(task); - Task task = new Task(1, 1, "hi", "hi"); + Task reTask = databaseManager.getTaskByTaskId(task.getTaskId()); - databaseManager.saveObject(task); + assertNotNull(reTask); + assertEquals(task.getTaskId(), reTask.getTaskId()); + assertEquals(task.getDescription(), reTask.getDescription()); + assertEquals(task.getName(), reTask.getName()); + assertEquals(task.getWorkerId(), reTask.getWorkerId()); - Task taskNew = databaseManager.getObject(1); - - assertEquals(task.getTaskId(), taskNew.getTaskId()); - assertEquals(task.getName(), taskNew.getName()); - assertEquals(task.getDescription(), taskNew.getDescription()); - assertEquals(task.getWorkerId(), taskNew.getWorkerId()); - assertEquals(task.getTaskState(), taskNew.getTaskState()); - - databaseManager.close(); + assertEquals(1, databaseManager.getTotalNumberOfTasks()); } @Test - @DisplayName("Assert that an inserted and deleted task is not there anymore") - public void assertDeleteTest() throws SQLException { + @DisplayName("Inserting test worker into the database and receiving back the same test worker") + public void insertWorkerAndReceivedItBackTest() throws SQLException { + Worker worker = new Worker("Worker-01", 12345678); - databaseManager.connect(); + databaseManager.saveWorker(worker); - Task task = new Task(9, 1, "hi", "hi"); + Worker reWorker = databaseManager.getWorkerByWorkerId(worker.getId()); - databaseManager.saveObject(task); + assertNotNull(reWorker); - databaseManager.deleteObject(9); - - databaseManager.getObject(9); - - databaseManager.close(); + assertEquals(worker.getId(), reWorker.getId()); + assertEquals(worker.getName(), reWorker.getName()); } @Test - @DisplayName("Assert that a simple Task could be inserted into the database") - public void assertInsertTask() throws SQLException { + @DisplayName("Clearing the database (Task and Worker) test") + public void clearDatabaseTest() throws SQLException, InterruptedException { + Task task1 = new Task(10, 5, "Hello", "World"); + Task task2 = new Task(9, 4, "Hochschule", "Heilbronn"); + Task task3 = new Task(8, 9, "Gangnam", "Style"); + Collection tasks = List.of(task1, task2, task3); - Task testTask = new Task(1, 1, "Hello World", "Description"); + Worker worker1 = new Worker("ABC", 2); + Worker worker2 = new Worker("XYZ", 9); + Collection workers = List.of(worker1, worker2); - databaseManager.connect(); - databaseManager.saveObject(testTask); - databaseManager.close(); - } + databaseManager.saveTasks(tasks); + databaseManager.saveWorkers(workers); - @Test - @DisplayName("Assert that multiple Tasks could be inserted into the database") - public void assertInsertMultipleTasks() throws SQLException { + Thread.sleep(500); - Task testTaskZero = new Task(1, 1, "Hello", "Description"); - Task testTaskOne = new Task(2, 2, "World", "Description"); - Task testTaskTwo = new Task(3, 3, "Hello World", "Description"); + assertEquals(tasks.size(), databaseManager.getTotalNumberOfTasks()); + assertEquals(workers.size(), databaseManager.getTotalNumberOfWorkers()); - Collection tasks = new ArrayList<>(); - tasks.add(testTaskZero); - tasks.add(testTaskOne); - tasks.add(testTaskTwo); + databaseManager.clearDatabase(); - databaseManager.connect(); - databaseManager.saveObjects(tasks); - databaseManager.close(); - } - - @Test - @DisplayName("Assert insert object and update it") - public void assertInsertUpdateTask() throws SQLException { - - int taskId = 1; - - Task testTask = new Task(taskId, 1, "Hello World", "Description"); - Task newTask = new Task(taskId, 1, "No World", "Description"); - - databaseManager.connect(); - databaseManager.saveObject(testTask); - newTask = databaseManager.updateObject(testTask.getTaskId(), newTask); - - assertNotNull(testTask); - - assertNotEquals(testTask.getDescription(), newTask.getDescription()); - assertEquals(testTask.getTaskId(), newTask.getTaskId()); - - databaseManager.close(); + assertEquals(0, databaseManager.getTotalNumberOfTasks()); + assertEquals(0, databaseManager.getTotalNumberOfWorkers()); } } \ No newline at end of file From 0dd7fd4687e1b4432de208c3335d50659dc5b8ee Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:06:43 +0100 Subject: [PATCH 11/14] Provide mock-like DB manager for integration testing --- .../provider/SimpleDatabaseManager.java | 133 +++++++++++++++--- 1 file changed, 116 insertions(+), 17 deletions(-) diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index 4134a586..e53ff173 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -8,87 +8,186 @@ import java.util.*; public class SimpleDatabaseManager implements DatabaseManager { + private boolean connected = false; + private Map temporaryTaskList = new HashMap(); + private Map temporaryWorkerList = new HashMap<>(); + @Override public void saveTask(Task task) throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (!temporaryTaskList.containsKey(task.getTaskId())) { + temporaryTaskList.put(task.getTaskId(), task); + } else { + throw new SQLException("[INSERTION FAILED] Task with the same Task ID already exists."); + } } @Override public void saveTasks(Collection tasks) throws SQLException { - throw new SQLException(); + for (Task task : tasks) { + saveTask(task); + } } @Override public void saveWorker(Worker worker) throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (!temporaryWorkerList.containsKey(worker.getId())) { + temporaryWorkerList.put(worker.getId(), worker); + } else { + throw new SQLException("[INSERTION FAILED] Task with the same Task ID already exists."); + } } @Override public void saveWorkers(Collection workers) throws SQLException { - throw new SQLException(); + for (Worker worker : workers) { + saveWorker(worker); + } } @Override public void updateTask(int taskId, Task newTaskObject) throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (temporaryTaskList.containsKey(taskId) && newTaskObject.getTaskId() == taskId) { + temporaryTaskList.remove(taskId); + temporaryTaskList.put(taskId, newTaskObject); + return; + } + + throw new SQLException("[UPDATE FAILED] Task ID not found OR Task ID does not equal New Task ID."); } @Override public void updateWorker(int workerId, Worker newWorkerObject) throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (temporaryWorkerList.containsKey(workerId) && newWorkerObject.getId() == workerId) { + temporaryWorkerList.remove(workerId); + temporaryWorkerList.put(workerId, newWorkerObject); + return; + } + + throw new SQLException("[UPDATE FAILED] Worker ID not found OR Worker ID does not equal New Worker ID."); } @Override public void deleteTask(int taskId) throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (temporaryTaskList.containsKey(taskId)) { + temporaryTaskList.remove(taskId); + return; + } + + throw new SQLException("[DELETION FAILED] Could not find Task ID. Nothing to delete."); } @Override public void deleteWorker(int workerId) throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (temporaryWorkerList.containsKey(workerId)) { + temporaryWorkerList.remove(workerId); + return; + } + + throw new SQLException("[DELETION FAILED] Could not find Worker ID. Nothing to delete."); } @Override public Collection getTasks() throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + return temporaryTaskList.values(); } @Override public Collection getWorkers() throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + return temporaryWorkerList.values(); } @Override public Task getTaskByTaskId(int taskId) throws SQLException { - return new Task(0, 0, null, null); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (temporaryTaskList.containsKey(taskId)) { + return temporaryTaskList.get(taskId); + } + + throw new SQLException("[SELECTION FAILED] Could not find Task ID. Nothing to get."); } @Override public Worker getWorkerByWorkerId(int workerId) throws SQLException { - return new Worker(null, 0); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + if (temporaryWorkerList.containsKey(workerId)) { + return temporaryWorkerList.get(workerId); + } + + throw new SQLException("[SELECTION FAILED] Could not find Worker ID. Nothing to get."); } @Override public int getTotalNumberOfTasks() throws SQLException { - return -1; + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + return temporaryTaskList.size(); } @Override public int getTotalNumberOfWorkers() throws SQLException { - return -1; + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + return temporaryWorkerList.size(); } public void clearDatabase() throws SQLException { - throw new SQLException(); + if (!connected) { + throw new SQLException("[CONNECTION FAILED] Instance is not connected to database."); + } + + temporaryTaskList.clear(); + temporaryWorkerList.clear(); } @Override public void connect() throws SQLException { - throw new SQLException(); + connected = true; } @Override public void close() throws SQLException { - throw new SQLException(); + connected = false; } } From 97990a3e76be43add01fa8d6682fdf9a27d939cf Mon Sep 17 00:00:00 2001 From: Riley Schneider <88947587+Ferryry@users.noreply.github.com> Date: Mon, 8 Dec 2025 21:15:46 +0100 Subject: [PATCH 12/14] Deleted unnecessary files. --- .gradle/8.14/checksums/checksums.lock | Bin 17 -> 0 bytes .gradle/8.14/checksums/md5-checksums.bin | Bin 19097 -> 0 bytes .gradle/8.14/checksums/sha1-checksums.bin | Bin 20009 -> 0 bytes .../executionHistory/executionHistory.bin | Bin 86514 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/8.14/expanded/expanded.lock | Bin 17 -> 0 bytes .gradle/8.14/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/8.14/fileHashes/fileHashes.bin | Bin 22797 -> 0 bytes .gradle/8.14/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../8.14/fileHashes/resourceHashesCache.bin | Bin 19449 -> 0 bytes .gradle/8.14/gc.properties | 0 .gradle/9.1.0/checksums/checksums.lock | Bin 17 -> 0 bytes .gradle/9.1.0/checksums/md5-checksums.bin | Bin 18697 -> 0 bytes .gradle/9.1.0/checksums/sha1-checksums.bin | Bin 18929 -> 0 bytes .../executionHistory/executionHistory.bin | Bin 97223 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/9.1.0/expanded/expanded.lock | Bin 17 -> 0 bytes .gradle/9.1.0/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/9.1.0/fileHashes/fileHashes.bin | Bin 23947 -> 0 bytes .gradle/9.1.0/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../9.1.0/fileHashes/resourceHashesCache.bin | Bin 20265 -> 0 bytes .gradle/9.1.0/gc.properties | 0 .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .gradle/buildOutputCleanup/cache.properties | 2 - .gradle/file-system.probe | Bin 8 -> 0 bytes .gradle/vcs-1/gc.properties | 0 .../hhn/temp/project/AssignmentManager.class | Bin 3306 -> 0 bytes .../java/main/hhn/temp/project/Task.class | Bin 1544 -> 0 bytes .../main/hhn/temp/project/TaskState.class | Bin 1041 -> 0 bytes .../java/main/hhn/temp/project/Worker.class | Bin 592 -> 0 bytes .../hhn/temp/project/provider/Database.class | Bin 224 -> 0 bytes .../project/provider/DatabaseManager.class | Bin 580 -> 0 bytes .../test/hhn/temp/project/BadCasesTest.class | Bin 4489 -> 0 bytes .../test/hhn/temp/project/GoodCasesTest.class | Bin 4541 -> 0 bytes build/jacoco/test.exec | Bin 43097 -> 0 bytes .../hhn.temp.project/AssignmentManager.html | 1 - .../AssignmentManager.java.html | 73 - build/jacocoHtml/hhn.temp.project/Task.html | 1 - .../hhn.temp.project/Task.java.html | 45 - .../hhn.temp.project/TaskState.html | 1 - .../hhn.temp.project/TaskState.java.html | 7 - build/jacocoHtml/hhn.temp.project/Worker.html | 1 - .../hhn.temp.project/Worker.java.html | 18 - build/jacocoHtml/hhn.temp.project/index.html | 1 - .../hhn.temp.project/index.source.html | 1 - build/jacocoHtml/index.html | 1 - .../jacocoHtml/jacoco-resources/branchfc.gif | Bin 91 -> 0 bytes .../jacocoHtml/jacoco-resources/branchnc.gif | Bin 91 -> 0 bytes .../jacocoHtml/jacoco-resources/branchpc.gif | Bin 91 -> 0 bytes build/jacocoHtml/jacoco-resources/bundle.gif | Bin 709 -> 0 bytes build/jacocoHtml/jacoco-resources/class.gif | Bin 586 -> 0 bytes build/jacocoHtml/jacoco-resources/down.gif | Bin 67 -> 0 bytes .../jacocoHtml/jacoco-resources/greenbar.gif | Bin 91 -> 0 bytes build/jacocoHtml/jacoco-resources/group.gif | Bin 351 -> 0 bytes build/jacocoHtml/jacoco-resources/method.gif | Bin 193 -> 0 bytes build/jacocoHtml/jacoco-resources/package.gif | Bin 227 -> 0 bytes .../jacocoHtml/jacoco-resources/prettify.css | 13 - build/jacocoHtml/jacoco-resources/prettify.js | 1510 ----------------- build/jacocoHtml/jacoco-resources/redbar.gif | Bin 91 -> 0 bytes build/jacocoHtml/jacoco-resources/report.css | 243 --- build/jacocoHtml/jacoco-resources/report.gif | Bin 363 -> 0 bytes build/jacocoHtml/jacoco-resources/session.gif | Bin 213 -> 0 bytes build/jacocoHtml/jacoco-resources/sort.gif | Bin 58 -> 0 bytes build/jacocoHtml/jacoco-resources/sort.js | 148 -- build/jacocoHtml/jacoco-resources/source.gif | Bin 354 -> 0 bytes build/jacocoHtml/jacoco-resources/up.gif | Bin 67 -> 0 bytes build/jacocoHtml/jacoco-sessions.html | 1 - build/reports/problems/problems-report.html | 663 -------- .../hhn.temp.project.BadCasesTest.html | 128 -- .../hhn.temp.project.GoodCasesTest.html | 134 -- build/reports/tests/test/css/style.css | 84 - build/reports/tests/test/index.html | 143 -- build/reports/tests/test/js/report.js | 218 --- .../tests/test/packages/hhn.temp.project.html | 113 -- .../TEST-hhn.temp.project.BadCasesTest.xml | 12 - .../TEST-hhn.temp.project.GoodCasesTest.xml | 13 - build/test-results/test/binary/results.bin | Bin 1258 -> 0 bytes .../AssignmentManager.class.uniqueId0 | Bin 2745 -> 0 bytes .../stash-dir/Task.class.uniqueId1 | Bin 1186 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 388 -> 0 bytes .../stash-dir/GoodCasesTest.class.uniqueId0 | Bin 4430 -> 0 bytes .../previous-compilation-data.bin | Bin 1347 -> 0 bytes .../success.txt | 0 ...w bc0e30860cb3697296a4ef6ee22735a5c83cf522 | 44 - 84 files changed, 3619 deletions(-) delete mode 100644 .gradle/8.14/checksums/checksums.lock delete mode 100644 .gradle/8.14/checksums/md5-checksums.bin delete mode 100644 .gradle/8.14/checksums/sha1-checksums.bin delete mode 100644 .gradle/8.14/executionHistory/executionHistory.bin delete mode 100644 .gradle/8.14/executionHistory/executionHistory.lock delete mode 100644 .gradle/8.14/expanded/expanded.lock delete mode 100644 .gradle/8.14/fileChanges/last-build.bin delete mode 100644 .gradle/8.14/fileHashes/fileHashes.bin delete mode 100644 .gradle/8.14/fileHashes/fileHashes.lock delete mode 100644 .gradle/8.14/fileHashes/resourceHashesCache.bin delete mode 100644 .gradle/8.14/gc.properties delete mode 100644 .gradle/9.1.0/checksums/checksums.lock delete mode 100644 .gradle/9.1.0/checksums/md5-checksums.bin delete mode 100644 .gradle/9.1.0/checksums/sha1-checksums.bin delete mode 100644 .gradle/9.1.0/executionHistory/executionHistory.bin delete mode 100644 .gradle/9.1.0/executionHistory/executionHistory.lock delete mode 100644 .gradle/9.1.0/expanded/expanded.lock delete mode 100644 .gradle/9.1.0/fileChanges/last-build.bin delete mode 100644 .gradle/9.1.0/fileHashes/fileHashes.bin delete mode 100644 .gradle/9.1.0/fileHashes/fileHashes.lock delete mode 100644 .gradle/9.1.0/fileHashes/resourceHashesCache.bin delete mode 100644 .gradle/9.1.0/gc.properties delete mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 .gradle/file-system.probe delete mode 100644 .gradle/vcs-1/gc.properties delete mode 100644 build/classes/java/main/hhn/temp/project/AssignmentManager.class delete mode 100644 build/classes/java/main/hhn/temp/project/Task.class delete mode 100644 build/classes/java/main/hhn/temp/project/TaskState.class delete mode 100644 build/classes/java/main/hhn/temp/project/Worker.class delete mode 100644 build/classes/java/main/hhn/temp/project/provider/Database.class delete mode 100644 build/classes/java/main/hhn/temp/project/provider/DatabaseManager.class delete mode 100644 build/classes/java/test/hhn/temp/project/BadCasesTest.class delete mode 100644 build/classes/java/test/hhn/temp/project/GoodCasesTest.class delete mode 100644 build/jacoco/test.exec delete mode 100644 build/jacocoHtml/hhn.temp.project/AssignmentManager.html delete mode 100644 build/jacocoHtml/hhn.temp.project/AssignmentManager.java.html delete mode 100644 build/jacocoHtml/hhn.temp.project/Task.html delete mode 100644 build/jacocoHtml/hhn.temp.project/Task.java.html delete mode 100644 build/jacocoHtml/hhn.temp.project/TaskState.html delete mode 100644 build/jacocoHtml/hhn.temp.project/TaskState.java.html delete mode 100644 build/jacocoHtml/hhn.temp.project/Worker.html delete mode 100644 build/jacocoHtml/hhn.temp.project/Worker.java.html delete mode 100644 build/jacocoHtml/hhn.temp.project/index.html delete mode 100644 build/jacocoHtml/hhn.temp.project/index.source.html delete mode 100644 build/jacocoHtml/index.html delete mode 100644 build/jacocoHtml/jacoco-resources/branchfc.gif delete mode 100644 build/jacocoHtml/jacoco-resources/branchnc.gif delete mode 100644 build/jacocoHtml/jacoco-resources/branchpc.gif delete mode 100644 build/jacocoHtml/jacoco-resources/bundle.gif delete mode 100644 build/jacocoHtml/jacoco-resources/class.gif delete mode 100644 build/jacocoHtml/jacoco-resources/down.gif delete mode 100644 build/jacocoHtml/jacoco-resources/greenbar.gif delete mode 100644 build/jacocoHtml/jacoco-resources/group.gif delete mode 100644 build/jacocoHtml/jacoco-resources/method.gif delete mode 100644 build/jacocoHtml/jacoco-resources/package.gif delete mode 100644 build/jacocoHtml/jacoco-resources/prettify.css delete mode 100644 build/jacocoHtml/jacoco-resources/prettify.js delete mode 100644 build/jacocoHtml/jacoco-resources/redbar.gif delete mode 100644 build/jacocoHtml/jacoco-resources/report.css delete mode 100644 build/jacocoHtml/jacoco-resources/report.gif delete mode 100644 build/jacocoHtml/jacoco-resources/session.gif delete mode 100644 build/jacocoHtml/jacoco-resources/sort.gif delete mode 100644 build/jacocoHtml/jacoco-resources/sort.js delete mode 100644 build/jacocoHtml/jacoco-resources/source.gif delete mode 100644 build/jacocoHtml/jacoco-resources/up.gif delete mode 100644 build/jacocoHtml/jacoco-sessions.html delete mode 100644 build/reports/problems/problems-report.html delete mode 100644 build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html delete mode 100644 build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html delete mode 100644 build/reports/tests/test/css/style.css delete mode 100644 build/reports/tests/test/index.html delete mode 100644 build/reports/tests/test/js/report.js delete mode 100644 build/reports/tests/test/packages/hhn.temp.project.html delete mode 100644 build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml delete mode 100644 build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml delete mode 100644 build/test-results/test/binary/results.bin delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/AssignmentManager.class.uniqueId0 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Task.class.uniqueId1 delete mode 100644 build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 build/tmp/compileTestJava/compileTransaction/stash-dir/GoodCasesTest.class.uniqueId0 delete mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 build/tmp/jacocoTestCoverageVerification/success.txt delete mode 100644 git show bc0e30860cb3697296a4ef6ee22735a5c83cf522 diff --git a/.gradle/8.14/checksums/checksums.lock b/.gradle/8.14/checksums/checksums.lock deleted file mode 100644 index d7e7c6066353735c75e1b76965746146b7128615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZP$)7bd`{pL^o3=m)f06;MXi2wiq diff --git a/.gradle/8.14/checksums/md5-checksums.bin b/.gradle/8.14/checksums/md5-checksums.bin deleted file mode 100644 index d18866f890603823195f8656efd78137a989e658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19097 zcmeI(Z%7ki00!{0n*UlVH0P)&H)b(5t&k9NrPE+)65%L9B`F71WZ6Ncn`Wzuc%Md8Ur#V@G-v zDmgbr*N?M&F7H>-#;ZBObiIe=^P`o61qPRyu6M9}K|Z1^jUUXX>o2qX$L_jejrG71 z&2O<>9@Lv55}7hdp1q#sY0aib7InfT&G)f9C$?R@zc$Q6@~je;7tZMYixn?B==x%o zvpvTJ?Iq{%3jqi~00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0ucDO0*U3Cfm zXuK_aK|fZ|Y!Nn;jir*rSJK;^%Hbk!jklgO-1I$v@m*o#x%+1F39U1={>%F((W=Ok zv|%TAb*D|(a89>5BtA=5@znRvGPS>#Hh6)+*u)>Nee!oh*2vWK2SZtt;i=+|um%B=PU@Vx+&V5|JU~g@28qm^) ii8R8!!fTiv-obP3nqW=*wEbFw>ltbIDrqA&(D)6nmqH2v diff --git a/.gradle/8.14/checksums/sha1-checksums.bin b/.gradle/8.14/checksums/sha1-checksums.bin deleted file mode 100644 index 4f2514b4fea4e3709eff841debc9ebf3753e8ff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20009 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 diff --git a/.gradle/8.14/executionHistory/executionHistory.lock b/.gradle/8.14/executionHistory/executionHistory.lock deleted file mode 100644 index 49b5cfeb2100de4d41b397b69f458e3a36cf41d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZSnb#-Tx%i?)c7$Cq407CKwaR2}S diff --git a/.gradle/8.14/expanded/expanded.lock b/.gradle/8.14/expanded/expanded.lock deleted file mode 100644 index e4bca16e8d69f6871f784de5fb72bfbf8bba3b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 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 diff --git a/.gradle/8.14/fileHashes/resourceHashesCache.bin b/.gradle/8.14/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 627fd17193af0e9d377a92844097e5ecc4540178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19449 zcmeI(`%jZs9LMp7B?V==c5>;4&~R~umJSq{u>}d1rZf3J z)>@y)eB#M4{OxQP?>_*hfg{Rc< z%a5ywE~!JkB46P%-e-;>y3`%@>d({9dvEA95naYby{2A1TdT<|Ci^ASFL!h?PRcX3?IW9g#7av4@Gu!)nMcjoN zqD!*>=_fDoU6<`|CC`aLJ$>UhL7&{&b(QGSRMa!y-=bOJT}Qs(Bmt=J8J>1l7CwJU zp1%Nf^qWGlyGT3+KS2NlKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY`StOV~_?{wRp)|vU&w_$8U?rZ+y7E^G@ zur+%8d$IY8gng^*c4ruksjPQnlM3)fh*Npv5BIV;OjfVpEBDar_`(9yE_9 zzi@OiCB}CR31<&~jW13V#x*o^<@=)}qN%iol?r^}AUx~0WvN!>-ecwo*4s1jg|AM? znfUF>Pt1p=P_K&b_Tmf2_{apisO2~O%^e#a)AC2~1ub7XSZ{9hcbUvc{L@!&`_{%B zk6i}sphA77>e=HD>HQ-~E%;(+jnmTO$*fbU3%o|dl~LF5#X`{yt?RM*^*;Vvc~b@4 z|9D+WSv+lR&O^^Xo=xTV?~ts+&*)m@S11h7JKSYwSs0w1AK{BTYR;?ev8!FL+%8X| zi@JZr7iAZz0T0?s@-pVVw4}K7@$p6Q!1jpBe4R+J?QEqvcrY7Z=BJNJ3UTnpXSZD+ja zqsD@fFdN3PV^KAnhn0=|)oSN(INOtWE#*8uSIlboRpTIC*~s3fH?*ha-SNBkXWjp~ OuNq=aHEQL%2>t-#MS2?m diff --git a/.gradle/9.1.0/checksums/sha1-checksums.bin b/.gradle/9.1.0/checksums/sha1-checksums.bin deleted file mode 100644 index e0818a62640cfad357d65e41abf0e1069aac80b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18929 zcmeI%OGs2v9LMo9kHrupwlHu8!B7Oj5qvC?ngk)j2Reei5ZsukJ5efIxKPnri6r t^x@>Lvwh*&G+O?&&Nan19nlPJ>{ERFS$9_5hOS}GO@5*EN>$=q{{dEr_(cE! diff --git a/.gradle/9.1.0/executionHistory/executionHistory.bin b/.gradle/9.1.0/executionHistory/executionHistory.bin deleted file mode 100644 index 76d8a3ad66eca499cb05e7e9b0cbdc0a2ce90075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97223 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 Y-gX|aW531gw1u&$BOYPsKvC=e1Kf1BwEzGB diff --git a/.gradle/9.1.0/executionHistory/executionHistory.lock b/.gradle/9.1.0/executionHistory/executionHistory.lock deleted file mode 100644 index d242ea5b21ad173c8ade8206ed6ed24c190f753c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 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 diff --git a/.gradle/9.1.0/fileHashes/fileHashes.lock b/.gradle/9.1.0/fileHashes/fileHashes.lock deleted file mode 100644 index 1e6947cfdfbac5bb7b7cba25c6820f12b7821bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 VcmZR+v#j8;@G8|?3}C=i2>?4V1rPuL diff --git a/.gradle/9.1.0/fileHashes/resourceHashesCache.bin b/.gradle/9.1.0/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 19617dc6336d006021dc7dfb711793b05a8be45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20265 zcmeI3c{Ege9Kh#IJzFKp8j?24Ace}7t$EChp^dbdQc+SA)f71`N+lw)j4dr5p;VSk zBrl=K@=_Yb6P410(o>Wk^US&Tr}O4^PUpNoJKs5HxaTvU^ZniXx#!G3bAO9TBo#R! z{vv&QDSkVIBPaj`pa2wr0#E=7KmjNK1)u;FfC5ke3P1rU00p1`6o3Ly;Abh|I&vX0 z*u|*mlSKy;*(8$D_>lvXP@z`;62A;z>|@7`==X!L2Nf?7szmoUk zekS6_-+eXrV<V+oZd?*KG>>@`7V-(->&NK zTDEKQB7Dvb#LFez$Bwl*tckCCZj`$`7%u-5(T{P)PQ>rH4pXj1Jkr6qQzzngb0+2X z=N!L=&+$OKGUIx2Q~Gv3#+lNHS4n9!vX&k{jL*4%cy)IRg~2I`!}%e^dE7NF(lu7+ zF;4eHyspaYbzOLsDL$Wqczvz4vU0ZFb$pH$;!liE>F_x9+wnOWh_`ZWOQg4+7{<7> zD&o)YD_jjNBhA3)4

1<5^9DLxChdUk&ls!nj)v$KvcT&S*lsi{!OBe$R>>_?**- z4{Qoa9vId(!Z^Kpl&5R_5_suWD8`*D5dTN3Nmief9EQ(#L7Xhfe^_%*VhP4+6A+gj za%fr5+m?oL$D@c(ddO9eiaLt-WacA2)gfE%eOYrN=F>G0H<6I1m8>VH;B$D0nd z>)}2VaeA~@>Y)&&nHZ-n9pzW|y><$|m4W;Ih;P=LaoT%XZXU+z)`_vg9L+$?1+!=@O7Ue9&*Hv9sP;&E5;qW5J&$>q_H2c&)_c< zfC5ke3P1rU00p1`6o3Ly017|>C;$bZ02F`%Pyh-*0Vn_kpa2wr0#E=7KmjNK1)u;F zfC5ke3P1rU00p1`6!`_r>d0GO^p;zu-eX@HtkLV*y3oX9y!n+8IQ75A-%+*3 zd+WxOn}ygU%9qR}ng7p?RL{^vtx_nU2c}$YSXPOto13^~zm=B86yZM&zjsmOFV3v(tI&d@M!JnTyRB_VK#U zv+r1CkeqUA7F}NSNq>oxFA)pL_*5IeOpl#(Xj9CNhqk;z)(?a%uJI^tR@<5 z)qNhH#wj$ryEVR|3Xh5Qdx)))6tS$N+JJSKY0H$5D_P`CG^D7Pbhpe+iPqq^o7=CE z6zy>ko1v3RrS$)G^Sb7XX3OarQNcuGoZI4+WTyp{`t1$tJLST=h=yD^y@T6cs;@NQ z=l)iwNVMZaY?a*=DIMOi7qdQe8p^kHt-VJyUM*Lcd&WcitmlO3J=Sce+eAawp)y4| zMut06f1CN|lLp_pFC1<2l!A~KT5mpl4sY2>TSc7FI9WG>I;TkLkzT;C3T4-PqQP8x zq{^oUACb@2Qj%*>Gw0s1V$q34?8%VFnk)Ctqdac;*fXf4 zMl@<|OE^c1FS8&-_+0N77z{To0-~@0nzTBn)UbVDRMqNg3tehII z@N;Y1UZOFcW8T(lxWI51=}srhuaQGE)=b;JWrDGtFegEz>aQvkn*c6ia>W}KPXDRw@B^ut5ZEZTqf`y)>IUdFqY|)M)v3qMo zt`7{}q`(@;_SNc{uIWrP9y9fqget0@FOFR<=m-iH?b;HX(H$i#$WQgH%?T(QY;0oZ z6OH3BZ>7(*`nRXWzu8CIW3-cK=u!78f6oe!~sq-l^zjdol3jEG@^7qd4UtsucMgRZ+ diff --git a/.gradle/9.1.0/gc.properties b/.gradle/9.1.0/gc.properties deleted file mode 100644 index e69de29b..00000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index ec8e1775d1ca302ba4256f7d81168feadc1f0a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 VcmZQBa#cSO`uvX|0~j#!0{}221Oos7 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 9fa4503b..00000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Dec 03 20:34:21 CET 2025 -gradle.version=8.14 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe deleted file mode 100644 index affeca697f57fcf371143ef41b9216af0e5320b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 PcmZQzV4U@o>B4IO2{i*g diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29b..00000000 diff --git a/build/classes/java/main/hhn/temp/project/AssignmentManager.class b/build/classes/java/main/hhn/temp/project/AssignmentManager.class deleted file mode 100644 index 66b2b20b90ba2a714f18d01b74d25902559880bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3306 zcmb_e*>V#{6g@4;mMo7~z~ChymKezkVsik?HZfjcj2B`NJ0=T^r9l?RBO{FrWciTf zJ#TqPQh-BTMe>kJs`4fIid4>>87&}_B1^g4Qs3!5_uO-C_vrUOe|!O89AAXtgFlFX zh6Xe$wBIwfjd;$mGV!JLduGa3XdKI0S$jgkAC0X95mM-I7M1L5E`H4@ZY&sEVFclC zLNl}=S~RqxP2t$ah84HX&8_%WAumwz$zm~^u{KT1UN9^pV-^&e9_9=8%>p45+UBdc z3?u}vLqn&41#P2vpTQvZD;%stUUg7pLzjkwI7BcPSWi#oOO`FElpe-D^hlw-3SCh* zn^S7iE@Z7tLXWM4@fHpTaYRD|N6VEuYjmPGl!Mzwu4FFV6%0LAgW|17G~+l<1o5_p zewpfjuB&w}Kd^ z7gbyJT+YlGxyeGNBu>mcN|{@BHgAOxSGeQ~siz~GrJ@}%A7wcjRytxCn`R_mh@{P8 zs*rUyL{f%z(vGZ~5v!ETg)xLPqV3sNhzwDKI_qxISTXJ$4Hv|?7IC^_TNvkX zNnl467NWXdBasKZN2D%CUE?KUD0LCGFrx#_%Fj97WEWYKs+!)3fnyD}#2>fcM- zn$(^-AzV>7UIwLJuAcQ7q^@ZVGa^^8XxfX^S7KK+T$5NUW7Acwh0vUa>q4lpU~cBO z%_b~hF^DA%H}IZ9PhHW%B5518sSujg7xm<|nQ4W-`PVN@2!o`Cn|NPABZC@737}jNFP*$jaOc2JDS&QQ<^Aq55{B zT&aRdtzE9KIRd&uKn{{5tR6_Ok7?{f=N41wu21P{z-BShX(>n{8hxYF5M$Pmi>#;V zP0a}=9ovCASf9`lji-?vl#+|r6D7#g;HK}9%WuzKqEC&2E9t`CdLr;Pje7T4**~rv ze>L`IJ>k%kjtH6Qtj8$!hWA5kg}mHDKfsc*ovdP&U}2m2KdicAr#j5&4*hY`8KP}KjfS*D~^!6k7E;`@jcA(BhHHO z^A9*Wumd%)i{RQ0nw}zD{o3B)|6|NQ{v8+j@G-|8ZkD70rfEYv=N&lAq!GUQKH-yy z3y9me!`WfZgn(jPITU>SG_cN52s|K~5E$IWzO})DwI?_bxO3|%4(y}QI8CaI<$^wJX;DWsW9)|j}*U0)oVN|K*E3bxx)KGmg?!(VG_icrwE9G(ed4i7iJLI}txC*&JY&qm4 zy&tNFc^{y_MPg)}GsVva$sxF|MbcshJYlGXjLll0PKW*X|!)aW>8R$6cu$yo* zSE`+>STX0+Ez-_8rbxfeIi>`N((0JfP&OqZrflP(S5d(;C03Q54OXt;6;pH{R;z?N zozs1umW&cm!bIwfi=kKrI0G{J%8Y37@BBmgYgh2M#_-JUShTYco z8^>nT6G%L>Y|Gmg7_HWhQW!%jiL`=oC<28}$JRWvd#0T^J%($ChI=BA>>9SwHXVW0 zoe<=O>soEQYuetfkJ{p@lL|7(3dC%qYYI&5TrjD7j%BwcYD&QkMvb>jx9M1Cp4GEC zyP#kiGep*-{(4J5=o~I8C~uB+uS?vHcaQx zXq-x`dQIc>$Z#xv4}vkTW4Qt|(X6*o#YWRC*G)X01UCe<3 zlyW7IA_Tj{6QT9d$yAEG4~8M2P{P1PfyHVxT{(~~Zm9$XgApwd^^kpof}}EC@0~kM z^NqzurTCjo-Yb-8IY#Igkf0B(9X-K|B~Mx;dD7;{lQvzRG+jDVpb=x0p10`jGgaXl z74;{CT8#IRR5$vVP>ZoXa_Y@K^6Fe4v+8%yz5I=!BUq#7G7$jMh|v!zO${=bKmn7q zt{Ga*EMan}5MtXek1A^PMvZvSsX5=6Ad9F-38V7HB4YB!wBv+Su^y1s=;X|}`U4YR z>EcsK$Y5T!Q+z|qKV{&iOds`g=>hgH%#OX?gpYRJCgr0&P#jY e+qp(6D%YssHDnbJ@hCz?dDzZcB$3Bb>yv-k!v<&o diff --git a/build/classes/java/main/hhn/temp/project/TaskState.class b/build/classes/java/main/hhn/temp/project/TaskState.class deleted file mode 100644 index 55392b987ca9174dc68c2679a50436395bb6e647..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1041 zcmaJ@Gw$pblhICG=9h;}7?wD>zZ?w4Rl7cjD%a~I!k2?(U zYe2;v_NeBm=?tyLdxmGZG4`%w4hE$$hv9p++bNA#;0c2K85MVtWtb}4uI+Cz%#EiC znN_VBg``lsnJ8lXTvoAyRo-@>VZgAI(= zM{RA=G#OI0e%o}Krf2gMVII*ndz3D9a|U$ze%B_sF~jb-ra$xuC*-syU2D1Rgfl3N z5&5LblQe9V7!;#F^xD>*&AW*IS+)YdvF#$wD^1%eY%lP=1L&kh0+JcNI~0+~Uc)Nk z9+0&{Cx4U?l+TD?BJq(dhKKZ>3St7`=kX}SKSd<)Dk+w~z^zL#j*t9>&yh#HLP0}5 zh||3jidQT`pcjzy>)CTGd%4lo-@h3`QqM1x3PU{?ADb|j1-7)Rm= zvT;*?6a{RAw4IQ){FPX#Md2Lx&L9NFk{B5B1@50g;kvHI5D(;vG&~6z`j3QqbZinP Gg5ob+o7D>d diff --git a/build/classes/java/main/hhn/temp/project/Worker.class b/build/classes/java/main/hhn/temp/project/Worker.class deleted file mode 100644 index 155a0cdaa254c82bc79363b3cbecf880be149d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmZ`#%TB^j5Is}+;86q-!3QR~gPPb6K;4*_kPuv8FfI$+KoMF}i~f`gO(Z5R`~W}7 zIQN#sM0C;9nYrhjd3=7oe*iecK^7WP7IYg1OhR$uJ$UZa3r6l$eWy9oX=E&9ZRB7Rs^f9s#$q;i=TRu>?oAloiHM*F-b@fm?H|K#9QnbhDJ?c^6i_6j z9~HedBv6Y`sjt&pjUKyQghO^KwEaMI7PG#HuD$+L`G*5<+Vdh`=BuI}kNtbXZu_6< zngnYk;*OfITyLy5B^XSQWAV~FShgE3qJg;dWzSr)h=3TM(>wjmYCMjFRe s?5x_j{FiTr^9t*kgT&laMOzsrVq;~_D-=m%QWrul+)6$F8V(0;Tb6`L_N>DyZL0ew_73b}gkaPNEf ze!j0afDI-L7GV*`idXWM^SschjH+hV$wd}?D=HC+QZn=i(^S-gXF^@MA2vP$i?mYh zW-nJ~g1dW0GOrS?N`@g}-ky~Aj0dMw( diff --git a/build/classes/java/main/hhn/temp/project/provider/DatabaseManager.class b/build/classes/java/main/hhn/temp/project/provider/DatabaseManager.class deleted file mode 100644 index e1477bc3ceba0a88a6d835949ef84e6a0b0158ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmah`yH3ME5S$IcCJv7P36BB_D!a+`B&2~LAsJBw(O<&Jab)bsKKtV+_y9f%v9=>) zK~Rd*Y4&Dk_I5tM-ai1`;M7Ee;LPWt(CTd|mT|ODGo9a=|EgkfC$*f)L_Nw-dMY;2 zBy<)slOm9zC!VG`-Go87+AKn7Co)rIQ$jem-9jqWejsk6AYd&&3J1;$p*8WnQ0g>R zgv<53;q!PfD#(_nbftP`JL_c$7ymq!N(Ad?JVI~fTKi~WX4vdoj99tmg z&UAu19AB4X)d{1&C3o{4S%i(a8{@(syuo2~!= diff --git a/build/classes/java/test/hhn/temp/project/BadCasesTest.class b/build/classes/java/test/hhn/temp/project/BadCasesTest.class deleted file mode 100644 index 49db1e17b284b1a6aa210cf40d2496287ea3e041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4489 zcmbVO30E7}75*NZuoxRq>IGvbW30rI+(bArZi4JIGQo*rfm5KkakmW8LmD%hQD#P9 zx}{0lbYIea-~K_*X-G=X=@01XKk0wy>Gx(P(tub@4~Nma@4fro?=J7Y_pkqM{}aFs z{3VGV^d``!p&tVRBlnGUBX1dYEq`a_zO48H1J_O4^q&{#&19Do7!;VO*X_J78_j&v zb=0PO(euoj-H^6FXV^wfx=AF^dkjO+5;(5m1cn99cd6YpsxyWsy(Q_2 zmaG|8(XF+V7qbs4vgwe(($IFoZlN6S$(`X*?rvJjmBat2AzU zvyG;|8I`ZD*j%P9zqrC9CLDxC#^@?l9lN)A)##dHdN z%0#~!4X957)5_bM8fNe!qu8=nd6v9-7_t6Lsgzw-8*XWMNo`1Wmeq7g!z;MWX;(I! zbs1{)WvDcWIRQ}`#2v004LvH~UWj+!Qkn}I7O^BSD63`=V1X>Hb*H0yCcDgl%{W!Y zZMbaOa=z7Ak?xWz3V~GFsTkI>;hIX0Cj0!l$try8kTW6B?@7PKM31qoe6t~!P0u7u z(Y77mh)R26pUS-{R~=W*8kIUzcP32lyxdSR@rtgTcl`O5Wzpk};M|w00_XODQr(6i z7x!6y(e#>@u{m!vBzN_%8&->+KVA%uobJ~RUuV(Fs_rY>dd09W`TB~~L;Gh#YGu>& z=beq9Jd3M5{lzL74JZ{w?Q(>sw&|v)5ZF%rP2Es?6+YXPZUiO-#zV|m=JJkhZO%TR z7S{vcdGI1EhfBJQ);i=AHB|+YW-o<6s7fbZO>en77t%8L|teX=|R9(BH$p7p~|5KCPM>?$07?w&eVB7N$(&t z#kiT4{bW8oSz%NIhk|gaV)671)358yvsu-fu^2pO8I6^ykv^*RG#gN|eS>%jydm&N z=c;Mpt}9 zNydB8X}J}7i}w>RlK5Txl!`nbHa8u|_k7oA&Pl)SRK4K=d^L%$;mriTuHh}bz2iM# z+Uw4m%$I`-poXz(RD8!}wGZ)#bfkaBuii*0H1M)vS9w{c%Z{_wY8JX1ZER+T;?ibQ z#fE_KYR(RgYimEOV=HpYNSy=gvK_mw^=YdH}sxqvH&{LfHnayhcEbql1rkI!}0d<4&{ZM!3^KAlT3XlJoybl~eP3VP|7ZNA_UKo*p3<*ceq> zMgzp<4^yv(n4jA1{KXjL=pK-~G$P0uLMrEn1LyYzoQU~990971)$KoTrwICC;(9WM zdq7-Sj+-RegD>IB{9V8xzQVb8@D2Wlqi?lG-))b6&>sD`J^E>T^o#cB*Bt$hxJgF$ L_xL0JjIsX#eUTqS diff --git a/build/classes/java/test/hhn/temp/project/GoodCasesTest.class b/build/classes/java/test/hhn/temp/project/GoodCasesTest.class deleted file mode 100644 index 57d7f1b8149a4d926f59aabb52da3ba1079bd1ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4541 zcmb7H`Fj)B6+Pnx+42w*0jAi-nScSyDTt*>2m%r>0z_n+*sf`sw#is}w#FXKC^I7) zC*9H|>7MTCzNGt_h7w~)+pqn#U;n0lJ#S__8X?4&{-Bw8+r8(Ud*6Le|Nifte*id- zzbDa#_5?aqbYh2sT`T&Uo-uW6IWx1kB8r}Z9p?-6{cZEAITzX1Wg2f7k z3r%yITx7fOAkmGPOO7Z>f4f!e!CnPw(Gj{QuG!A2a1`tvDbz{Ld5&Q%XVdvE>?5Pu zn$?Bg*>4G(kqvhafC z{UiBwGbuTiP2v!S6F98m2#zYyY-c&MQlsX4Rt--$8NF&qiG|}Cw&g0=sr!v-+ncVL z=3NwnxMkA|Nu)8Fz#}T&k7JzFBx!(5Vw~11LcyMqbTc7|E~DZEPEw}8Z|=pKZW6}P zxU!+!n1L9O1Wv2?03KD43>BHus|p_6c3ATaGsCWI4<5&v1fEcF7FiPYBey-Opu;s@ zB2Z=`Wj=)S5*IVGb0nWnFLdE4&bX$Vt6dl;Sox)$uE%szMGhAgbcvD?MkURKF~nhZ zH1`BzURIHpNdRg~~DIp3JRXbL~o zKB!^=*P>v~mmPbZ!JLZ+bHZe#v;T+Tc;fgLeRthd=2;aV#&Zg~*ZuwI$GtaDcss6y z^-+8*f#+4c0G(+OQ_J!M%Lye})6JTgSyIp^cT&>~KXZyIN|5=%04X>UXSAJ+v6W$0 z0?P{aHEoWdd?c}iQTbR=u_`mNlcw`5H)&K}t(wME|Oa*Ch0w{PgozXJ;cgz!_E$`Y%u+_W^9dlPU&6Y)mSz5 zvub-rMJyPuK|5oXWmBY}G9GM^v*TjPc0^7umKmGAfL;)u3EdjouJK(#j^;}WlswNC zj{%U4!4_8Ku|<1_S`1GbZq?K`WO3!JPCtV=d(1E1npf66P1gbxT2Z$&o;B={!DO`# zFv^BISGL#lR>6>GWVft<6E+o4aIC>nsU%ANVpr20A&s%^+4Li{VC_&~Gk2YqcnbQq zNq=1ASP%tyZbK8{jL@9KwkR}NHs!3rz)U3HtY7kG)~x{f!8ocIyPz_L^acVOlfo3V z=_8?9dbKKaZuV25iBd2e!mw=3v@KQx&7~k(t*RMTj9q_V@{;g)WV+JvgzY%IotPUu zNG8gnxT=MNQ3^=M{`QzC^U5Qbhq*XBINoIedaUEvo-+0>4$TyI$C$GRj$VcFie@i@cq17d7mQ<8lG- zZR57>xt^m}r-WCwOK$HD{3(e)&jPA~ws6&$VypaEGU-vr*}efIuSSw8}C@Gw2L@pxDG z<4u^)B)@sz=JN||W%!n3oujv)yv>g`e34H%40Pj5e5%0&d>LP1OTkw;+U74li*|oZ z9eo#xXK$hV9VF{E-U?V;Pc9W}J`HI7LyulqK?9@%^a9kdFZ9=(ZVYS$)G=j7Kw zsxS4vP4u6ajloR}ZQ)?5Z@aOHku4mryY3@HU^lt$!9MK8LG#%1bktj z=OA|C0R0bP7!TnwB9u5s0~aCAoos(U#Hsm++c{9F$bTFme=F2_CNAQ8*IKSRu!$=J@#PIM7~(AhIL;Vk$l(MzoMa46;Q~%$ znr!N^n2BOB9>wBJ6pKe%$Koes^wWsZ%VZ>DaZEyL5esJcmDKd;;2m5AwlII~?wmP8 z&7UCNv&@(*|74wu>3uBH`%t8JUu(U8Msz=q(ETe!x7q?-YL^_ii4P5I;Ul-P*oJ>% zX%l7U#XScM&hx`1H|-|O!G@+SN9){zSUg2;W8^l@C`|IdO%BiDB35uY#&I>`s7D;< zTXTGq9DfmUd^6-&Xu(l-4-l_&12y>_K!14)pV}Vz%nf|LapZ0i1(KK|iD_=<8K%@# zhUytS%|BW7jZuh5j7KCMZB62ryV~T@5f77%f8bk|`#-YpueizIE$M+hTeyS2VgLUC^h9!q diff --git a/build/jacoco/test.exec b/build/jacoco/test.exec deleted file mode 100644 index afc26a5f83a0520377046c2ccf8246c4da89c068..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43097 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 V*a{AyAssignmentManager

AssignmentManager

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total0 of 207100 %3 of 2286 %32003809
addTask(int, String, String)41100 %1583 %140501
editTask(int, int, String, String)31100 %4100 %030601
finishTask(int, int)28100 %1375 %130501
unfinishTask(int, int)28100 %1375 %130501
createWorker(String)23100 %n/a010301
getTask(int)18100 %2100 %020301
removeTask(int)18100 %2100 %020401
AssignmentManager()17100 %n/a010601
getTaskMap()3100 %n/a010101
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/AssignmentManager.java.html b/build/jacocoHtml/hhn.temp.project/AssignmentManager.java.html deleted file mode 100644 index c1dbc0a1..00000000 --- a/build/jacocoHtml/hhn.temp.project/AssignmentManager.java.html +++ /dev/null @@ -1,73 +0,0 @@ -AssignmentManager.java

AssignmentManager.java

package hhn.temp.project;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class AssignmentManager {
-    Map<Integer, Worker> workerMap;
-    Map<Integer, Task> taskMap;
-    int workerIdCounter;
-    int taskIdCounter;
-
-    public AssignmentManager() {
-        workerMap = new HashMap<>();
-        taskMap = new HashMap<>();
-        int workerIdCounter = 1000;
-        int taskIdCounter = 0;
-    }
-
-    public int createWorker(String name) {
-        Worker worker = new Worker(name, ++workerIdCounter);
-        workerMap.put(workerIdCounter, worker);
-        return workerIdCounter;
-    }
-    public int addTask(int workerId, String name, String description) {
-        if (!workerMap.containsKey(workerId) || name == null || description == null) {
-            throw new IllegalArgumentException("WorkerId must exist and name or description can't be null");
-        }
-        Task task = new Task(++taskIdCounter, workerId, name, description, this);
-        taskMap.put(taskIdCounter, task);
-        return taskIdCounter;
-    }
-    public Task getTask(int taskId) {
-        if (!taskMap.containsKey(taskId)) {
-            throw new IllegalArgumentException("Task Id does not exist");
-        }
-        return taskMap.get(taskId);
-    }
-    public Map<Integer, Task> getTaskMap() {
-        return taskMap;
-    }
-    public void editTask(int workerId, int taskId, String name, String description) {
-        if (!workerMap.containsKey(workerId) || !taskMap.containsKey(taskId)) {
-            throw new IllegalArgumentException("Task Id or Worker Id does not exist");
-        }
-        Task task = taskMap.get(taskId);
-        task.setName(name);
-        task.setDescription(description);
-    }
-    public void removeTask(int taskId) {
-        if (!taskMap.containsKey(taskId)) {
-            throw new IllegalArgumentException("Task Id does not exist");
-        }
-        taskMap.remove(taskId);
-    }
-    public void finishTask(int workerId, int taskId) {
-        if (!workerMap.containsKey(workerId) || !taskMap.containsKey(taskId)) {
-            throw new IllegalArgumentException("Task Id or Worker Id does not exist");
-        }
-        Task task = taskMap.get(taskId);
-        task.setTaskState(TaskState.FINISHED);
-    }
-    public void unfinishTask(int workerId, int taskId) {
-        if (!workerMap.containsKey(workerId) || !taskMap.containsKey(taskId)) {
-            throw new IllegalArgumentException("Task Id or Worker Id does not exist");
-        }
-        Task task = taskMap.get(taskId);
-        task.setTaskState(TaskState.IN_PROGRESS);
-    }
-
-}
-
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/Task.html b/build/jacocoHtml/hhn.temp.project/Task.html deleted file mode 100644 index 83d2c4f3..00000000 --- a/build/jacocoHtml/hhn.temp.project/Task.html +++ /dev/null @@ -1 +0,0 @@ -Task

Task

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total0 of 48100 %0 of 0n/a0901909
Task(int, int, String, String, AssignmentManager)21100 %n/a010801
setName(String)4100 %n/a010201
setDescription(String)4100 %n/a010201
setTaskState(TaskState)4100 %n/a010201
getName()3100 %n/a010101
getDescription()3100 %n/a010101
getTaskId()3100 %n/a010101
getWorkerId()3100 %n/a010101
getTaskState()3100 %n/a010101
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/Task.java.html b/build/jacocoHtml/hhn.temp.project/Task.java.html deleted file mode 100644 index 41a68133..00000000 --- a/build/jacocoHtml/hhn.temp.project/Task.java.html +++ /dev/null @@ -1,45 +0,0 @@ -Task.java

Task.java

package hhn.temp.project;
-
-public class Task {
-    String name;
-    String description;
-    int taskId;
-    int workerId;
-    AssignmentManager manager;
-    TaskState state;
-    public Task(int taskId, int workerId, String name, String description, AssignmentManager manager) {
-        this.manager = manager;
-        this.name = name;
-        this.description = description;
-        this.taskId = taskId;
-        this.workerId = workerId;
-        this.state = TaskState.IN_PROGRESS;
-    }
-
-    public String getName() {
-        return name;
-    }
-    public void setName(String name) {
-        this.name = name;
-    }
-    public String getDescription() {
-        return description;
-    }
-    public void setDescription(String description) {
-        this.description = description;
-    }
-    public int getTaskId() {
-        return taskId;
-    }
-    public int getWorkerId() {
-        return workerId;
-    }
-    public void setTaskState(TaskState state) {
-        this.state = state;
-    }
-    public TaskState getTaskState() {
-        return state;
-    }
-
-}
-
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/TaskState.html b/build/jacocoHtml/hhn.temp.project/TaskState.html deleted file mode 100644 index 56274ee6..00000000 --- a/build/jacocoHtml/hhn.temp.project/TaskState.html +++ /dev/null @@ -1 +0,0 @@ -TaskState

TaskState

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total0 of 15100 %0 of 0n/a010301
static {...}15100 %n/a010301
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/TaskState.java.html b/build/jacocoHtml/hhn.temp.project/TaskState.java.html deleted file mode 100644 index f4a0d646..00000000 --- a/build/jacocoHtml/hhn.temp.project/TaskState.java.html +++ /dev/null @@ -1,7 +0,0 @@ -TaskState.java

TaskState.java

package hhn.temp.project;
-
-public enum TaskState {
-    IN_PROGRESS,
-    FINISHED;
-}
-
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/Worker.html b/build/jacocoHtml/hhn.temp.project/Worker.html deleted file mode 100644 index 72cc95d8..00000000 --- a/build/jacocoHtml/hhn.temp.project/Worker.html +++ /dev/null @@ -1 +0,0 @@ -Worker

Worker

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total0 of 15100 %0 of 0n/a030603
Worker(String, int)9100 %n/a010401
getName()3100 %n/a010101
getId()3100 %n/a010101
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/Worker.java.html b/build/jacocoHtml/hhn.temp.project/Worker.java.html deleted file mode 100644 index f37fd9fc..00000000 --- a/build/jacocoHtml/hhn.temp.project/Worker.java.html +++ /dev/null @@ -1,18 +0,0 @@ -Worker.java

Worker.java

package hhn.temp.project;
-
-public class Worker {
-    String name;
-    int workerId;
-    public Worker(String name, int workerId) {
-        this.name = name;
-        this.workerId = workerId;
-    }
-
-    public String getName() {
-        return name;
-    }
-    public int getId() {
-        return workerId;
-    }
-}
-
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/index.html b/build/jacocoHtml/hhn.temp.project/index.html deleted file mode 100644 index e03d2aab..00000000 --- a/build/jacocoHtml/hhn.temp.project/index.html +++ /dev/null @@ -1 +0,0 @@ -hhn.temp.project

hhn.temp.project

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total0 of 285100 %3 of 2286 %33306602204
AssignmentManager207100 %31986 %3200380901
Task48100 %n/a090190901
TaskState15100 %n/a01030101
Worker15100 %n/a03060301
\ No newline at end of file diff --git a/build/jacocoHtml/hhn.temp.project/index.source.html b/build/jacocoHtml/hhn.temp.project/index.source.html deleted file mode 100644 index f5e5b9e2..00000000 --- a/build/jacocoHtml/hhn.temp.project/index.source.html +++ /dev/null @@ -1 +0,0 @@ -hhn.temp.project

hhn.temp.project

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total0 of 285100 %3 of 2286 %33306602204
AssignmentManager.java207100 %31986 %3200380901
Task.java48100 %n/a090190901
Worker.java15100 %n/a03060301
TaskState.java15100 %n/a01030101
\ No newline at end of file diff --git a/build/jacocoHtml/index.html b/build/jacocoHtml/index.html deleted file mode 100644 index 4f92f874..00000000 --- a/build/jacocoHtml/index.html +++ /dev/null @@ -1 +0,0 @@ -Template

Template

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total0 of 285100 %3 of 2286 %33306602204
hhn.temp.project285100 %31986 %33306602204
\ No newline at end of file diff --git a/build/jacocoHtml/jacoco-resources/branchfc.gif b/build/jacocoHtml/jacoco-resources/branchfc.gif deleted file mode 100644 index 989b46d30469b56b014758f846ee6c5abfda16aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHb6=b<*h$V|V6X-NwhSNb diff --git a/build/jacocoHtml/jacoco-resources/branchnc.gif b/build/jacocoHtml/jacoco-resources/branchnc.gif deleted file mode 100644 index 1933e07c376bb71bdd9aac91cf858da3fcdb0f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHb6=b<*h$V|V6X-N9U38B diff --git a/build/jacocoHtml/jacoco-resources/branchpc.gif b/build/jacocoHtml/jacoco-resources/branchpc.gif deleted file mode 100644 index cbf711b7030929b733f22f7a0cf3dbf61fe7868f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHbm$mi>nCYN#As;!%lJz1A{dHmlPuc diff --git a/build/jacocoHtml/jacoco-resources/bundle.gif b/build/jacocoHtml/jacoco-resources/bundle.gif deleted file mode 100644 index fca9c53e629a7a5c07186ac1e2a1e37d8d6e88f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmZ?wbhEHb6krfwxXQrrpW*-7BK;o8CDEUD?$vun5^UNelT%D!ODhRsX(Ohwq+z^!{nkw1lu( zDPc2HV&`P7KEHX-jYA>R6T@ewM9fTyo0E0x)!k_2wz@P-Sk{|^LE{K>+|z);Vi!vF-J zIALI4-caAv+|t_C-oY&>$uA|y-ND80=rPrik*keM);A(7JS@bMXJ#`uzjsjN>eYc> zj1!vJoq|_~`Ugb%`8WwRvs$=Bx;h_qcXM-KZDthLjMNep5fPP;Q{vk%FCD3^prRsd zAfR@-Nl4k$GSW~(G16XNhoM=9$H>NPjk%o(&&DPp6ODz*?)|b>X&fF28jY>Ox-nZU Y5*r^bWMyL$kZ52~Skzz7#K>R`0G8r7i~s-t diff --git a/build/jacocoHtml/jacoco-resources/down.gif b/build/jacocoHtml/jacoco-resources/down.gif deleted file mode 100644 index 440a14db74e76c2b6e854eacac1c44414b166271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHbZ%p}jXB Ub$^Lu-Ncq(ygK&ScM%3_0Po}%Qvd(} diff --git a/build/jacocoHtml/jacoco-resources/greenbar.gif b/build/jacocoHtml/jacoco-resources/greenbar.gif deleted file mode 100644 index 0ba65672530ee09f086821a26156836d0c91bd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHbWMtrCc+ADXzmZ>do2<@m9j_x^v8Q5duh#b5>RIq$!Lmoo);w9mu$BQ0 eDgI<(1nOeYVE_V<84N5O20cYWMlKB;4AuaIXBwOU diff --git a/build/jacocoHtml/jacoco-resources/group.gif b/build/jacocoHtml/jacoco-resources/group.gif deleted file mode 100644 index a4ea580d278fb727e4ae692838877fa63c4becf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmZ?wbhEHb6krfwxXQpVwXtJrV`pb|Z&Bgo_>{Q`Df1G5Wa`}H^qKLgbHn221;#86 zie2Oyy23SVg;&(l)`=%9{nuIstg#PSrQx<&&vS#m*G7G>4W@o;CvAN*Y1^AgTVGGw z_ImEoPjiobns@ZmyknnMUi-Q7>W`Jzer$aB_t(pL-|kQQ|MAfO*PGv5?Ee3B$^ToO z|A8VGOaEW3eSEO?=BC06Ybq|Tt-P?N@;?|b;0205Sr{1@Oc``Qsz82XV5>PWtH47? zs^4Q~P@BxTjDV;&5*!R(s==>VnJe}-&SEIintfiq!@CwnVRxXubL!4|)qjO}gg>klxZ?TGXw~#-V zU_Y2&N}FX?r*L1YbYiM-aj|xBv2}#Mgo3?-guaA=wSS1Yfrz+)iMWB7#*ml2h^x<; ztIwFU(w+bR{{R30A^8LW0015UEC2ui01yBW000F(peK%GX`X1Rt}L1aL$Vf5mpMgx vG+WO#2NYmJDM}^)l;8n@L?90V%CN9pFcyU&MPO(u48jTlL$uClRtNw)MiWcq diff --git a/build/jacocoHtml/jacoco-resources/package.gif b/build/jacocoHtml/jacoco-resources/package.gif deleted file mode 100644 index 131c28da405493661e3253ef79a68bd273039295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmZ?wbhEHb6krfwIKsg2^W*Nf7neOfxp04z;n8NJ+xzDotkS){bH@Hst%K#-*LO_c zo~yCDQ0v_4?v)A3lSAd#C95utQCbkGxF}NT_=2WF8}WGs5taT9|NsAIzy=h5vM@3* zNHFMtBtdpEuqG&|^`&Ia(}-MpBVo@mW@+b{B25<}cFdc?!Kkoc14n0vkh1`XOwU>7 z#al8o_@;D=?hdfkdC)D9Q@O@%Lfqp;ZBt~9C*29`GMF2XzQp8akWQVjDvMC75PzEx Mi%z;upCW@b03m@=3jhEB diff --git a/build/jacocoHtml/jacoco-resources/prettify.css b/build/jacocoHtml/jacoco-resources/prettify.css deleted file mode 100644 index be5166e0..00000000 --- a/build/jacocoHtml/jacoco-resources/prettify.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Pretty printing styles. Used with prettify.js. */ - -.str { color: #2A00FF; } -.kwd { color: #7F0055; font-weight:bold; } -.com { color: #3F5FBF; } -.typ { color: #606; } -.lit { color: #066; } -.pun { color: #660; } -.pln { color: #000; } -.tag { color: #008; } -.atn { color: #606; } -.atv { color: #080; } -.dec { color: #606; } diff --git a/build/jacocoHtml/jacoco-resources/prettify.js b/build/jacocoHtml/jacoco-resources/prettify.js deleted file mode 100644 index b2766fe0..00000000 --- a/build/jacocoHtml/jacoco-resources/prettify.js +++ /dev/null @@ -1,1510 +0,0 @@ -// Copyright (C) 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -/** - * @fileoverview - * some functions for browser-side pretty printing of code contained in html. - *

- * - * For a fairly comprehensive set of languages see the - * README - * file that came with this source. At a minimum, the lexer should work on a - * number of languages including C and friends, Java, Python, Bash, SQL, HTML, - * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk - * and a subset of Perl, but, because of commenting conventions, doesn't work on - * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. - *

- * Usage:

    - *
  1. include this source file in an html page via - * {@code } - *
  2. define style rules. See the example page for examples. - *
  3. mark the {@code
    } and {@code } tags in your source with
    - *    {@code class=prettyprint.}
    - *    You can also use the (html deprecated) {@code } tag, but the pretty
    - *    printer needs to do more substantial DOM manipulations to support that, so
    - *    some css styles may not be preserved.
    - * </ol>
    - * That's it.  I wanted to keep the API as simple as possible, so there's no
    - * need to specify which language the code is in, but if you wish, you can add
    - * another class to the {@code <pre>} or {@code <code>} element to specify the
    - * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    - * starts with "lang-" followed by a file extension, specifies the file type.
    - * See the "lang-*.js" files in this directory for code that implements
    - * per-language file handlers.
    - * <p>
    - * Change log:<br>
    - * cbeust, 2006/08/22
    - * <blockquote>
    - *   Java annotations (start with "@") are now captured as literals ("lit")
    - * </blockquote>
    - * @requires console
    - */
    -
    -// JSLint declarations
    -/*global console, document, navigator, setTimeout, window */
    -
    -/**
    - * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    - * UI events.
    - * If set to {@code false}, {@code prettyPrint()} is synchronous.
    - */
    -window['PR_SHOULD_USE_CONTINUATION'] = true;
    -
    -/** the number of characters between tab columns */
    -window['PR_TAB_WIDTH'] = 8;
    -
    -/** Walks the DOM returning a properly escaped version of innerHTML.
    -  * @param {Node} node
    -  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    -  */
    -window['PR_normalizedHtml']
    -
    -/** Contains functions for creating and registering new language handlers.
    -  * @type {Object}
    -  */
    -  = window['PR']
    -
    -/** Pretty print a chunk of code.
    -  *
    -  * @param {string} sourceCodeHtml code as html
    -  * @return {string} code as html, but prettier
    -  */
    -  = window['prettyPrintOne']
    -/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    -  * {@code class=prettyprint} and prettify them.
    -  * @param {Function?} opt_whenDone if specified, called when the last entry
    -  *     has been finished.
    -  */
    -  = window['prettyPrint'] = void 0;
    -
    -/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    -window['_pr_isIE6'] = function () {
    -  var ieVersion = navigator && navigator.userAgent &&
    -      navigator.userAgent.match(/\bMSIE ([678])\./);
    -  ieVersion = ieVersion ? +ieVersion[1] : false;
    -  window['_pr_isIE6'] = function () { return ieVersion; };
    -  return ieVersion;
    -};
    -
    -
    -(function () {
    -  // Keyword lists for various languages.
    -  var FLOW_CONTROL_KEYWORDS =
    -      "break continue do else for if return while ";
    -  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    -      "double enum extern float goto int long register short signed sizeof " +
    -      "static struct switch typedef union unsigned void volatile ";
    -  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    -      "new operator private protected public this throw true try typeof ";
    -  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    -      "concept concept_map const_cast constexpr decltype " +
    -      "dynamic_cast explicit export friend inline late_check " +
    -      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    -      "template typeid typename using virtual wchar_t where ";
    -  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    -      "abstract boolean byte extends final finally implements import " +
    -      "instanceof null native package strictfp super synchronized throws " +
    -      "transient ";
    -  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    -      "as base by checked decimal delegate descending event " +
    -      "fixed foreach from group implicit in interface internal into is lock " +
    -      "object out override orderby params partial readonly ref sbyte sealed " +
    -      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    -  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    -      "debugger eval export function get null set undefined var with " +
    -      "Infinity NaN ";
    -  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    -      "goto if import last local my next no our print package redo require " +
    -      "sub undef unless until use wantarray while BEGIN END ";
    -  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    -      "elif except exec finally from global import in is lambda " +
    -      "nonlocal not or pass print raise try with yield " +
    -      "False True None ";
    -  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    -      " defined elsif end ensure false in module next nil not or redo rescue " +
    -      "retry self super then true undef unless until when yield BEGIN END ";
    -  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    -      "function in local set then until ";
    -  var ALL_KEYWORDS = (
    -      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    -      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    -
    -  // token style names.  correspond to css classes
    -  /** token style for a string literal */
    -  var PR_STRING = 'str';
    -  /** token style for a keyword */
    -  var PR_KEYWORD = 'kwd';
    -  /** token style for a comment */
    -  var PR_COMMENT = 'com';
    -  /** token style for a type */
    -  var PR_TYPE = 'typ';
    -  /** token style for a literal value.  e.g. 1, null, true. */
    -  var PR_LITERAL = 'lit';
    -  /** token style for a punctuation string. */
    -  var PR_PUNCTUATION = 'pun';
    -  /** token style for a punctuation string. */
    -  var PR_PLAIN = 'pln';
    -
    -  /** token style for an sgml tag. */
    -  var PR_TAG = 'tag';
    -  /** token style for a markup declaration such as a DOCTYPE. */
    -  var PR_DECLARATION = 'dec';
    -  /** token style for embedded source. */
    -  var PR_SOURCE = 'src';
    -  /** token style for an sgml attribute name. */
    -  var PR_ATTRIB_NAME = 'atn';
    -  /** token style for an sgml attribute value. */
    -  var PR_ATTRIB_VALUE = 'atv';
    -
    -  /**
    -   * A class that indicates a section of markup that is not code, e.g. to allow
    -   * embedding of line numbers within code listings.
    -   */
    -  var PR_NOCODE = 'nocode';
    -
    -  /** A set of tokens that can precede a regular expression literal in
    -    * javascript.
    -    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    -    * list, but I've removed ones that might be problematic when seen in
    -    * languages that don't support regular expression literals.
    -    *
    -    * <p>Specifically, I've removed any keywords that can't precede a regexp
    -    * literal in a syntactically legal javascript program, and I've removed the
    -    * "in" keyword since it's not a keyword in many languages, and might be used
    -    * as a count of inches.
    -    *
    -    * <p>The link a above does not accurately describe EcmaScript rules since
    -    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    -    * very well in practice.
    -    *
    -    * @private
    -    */
    -  var REGEXP_PRECEDER_PATTERN = function () {
    -      var preceders = [
    -          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    -          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    -          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    -          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    -          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    -          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    -          "||=", "~" /* handles =~ and !~ */,
    -          "break", "case", "continue", "delete",
    -          "do", "else", "finally", "instanceof",
    -          "return", "throw", "try", "typeof"
    -          ];
    -      var pattern = '(?:^^|[+-]';
    -      for (var i = 0; i < preceders.length; ++i) {
    -        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    -      }
    -      pattern += ')\\s*';  // matches at end, and matches empty string
    -      return pattern;
    -      // CAVEAT: this does not properly handle the case where a regular
    -      // expression immediately follows another since a regular expression may
    -      // have flags for case-sensitivity and the like.  Having regexp tokens
    -      // adjacent is not valid in any language I'm aware of, so I'm punting.
    -      // TODO: maybe style special characters inside a regexp as punctuation.
    -    }();
    -
    -  // Define regexps here so that the interpreter doesn't have to create an
    -  // object each time the function containing them is called.
    -  // The language spec requires a new object created even if you don't access
    -  // the $1 members.
    -  var pr_amp = /&/g;
    -  var pr_lt = /</g;
    -  var pr_gt = />/g;
    -  var pr_quot = /\"/g;
    -  /** like textToHtml but escapes double quotes to be attribute safe. */
    -  function attribToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;')
    -        .replace(pr_quot, '&quot;');
    -  }
    -
    -  /** escapest html special characters to html. */
    -  function textToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;');
    -  }
    -
    -
    -  var pr_ltEnt = /&lt;/g;
    -  var pr_gtEnt = /&gt;/g;
    -  var pr_aposEnt = /&apos;/g;
    -  var pr_quotEnt = /&quot;/g;
    -  var pr_ampEnt = /&amp;/g;
    -  var pr_nbspEnt = /&nbsp;/g;
    -  /** unescapes html to plain text. */
    -  function htmlToText(html) {
    -    var pos = html.indexOf('&');
    -    if (pos < 0) { return html; }
    -    // Handle numeric entities specially.  We can't use functional substitution
    -    // since that doesn't work in older versions of Safari.
    -    // These should be rare since most browsers convert them to normal chars.
    -    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    -      var end = html.indexOf(';', pos);
    -      if (end >= 0) {
    -        var num = html.substring(pos + 3, end);
    -        var radix = 10;
    -        if (num && num.charAt(0) === 'x') {
    -          num = num.substring(1);
    -          radix = 16;
    -        }
    -        var codePoint = parseInt(num, radix);
    -        if (!isNaN(codePoint)) {
    -          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    -                  html.substring(end + 1));
    -        }
    -      }
    -    }
    -
    -    return html.replace(pr_ltEnt, '<')
    -        .replace(pr_gtEnt, '>')
    -        .replace(pr_aposEnt, "'")
    -        .replace(pr_quotEnt, '"')
    -        .replace(pr_nbspEnt, ' ')
    -        .replace(pr_ampEnt, '&');
    -  }
    -
    -  /** is the given node's innerHTML normally unescaped? */
    -  function isRawContent(node) {
    -    return 'XMP' === node.tagName;
    -  }
    -
    -  var newlineRe = /[\r\n]/g;
    -  /**
    -   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    -   */
    -  function isPreformatted(node, content) {
    -    // PRE means preformatted, and is a very common case, so don't create
    -    // unnecessary computed style objects.
    -    if ('PRE' === node.tagName) { return true; }
    -    if (!newlineRe.test(content)) { return true; }  // Don't care
    -    var whitespace = '';
    -    // For disconnected nodes, IE has no currentStyle.
    -    if (node.currentStyle) {
    -      whitespace = node.currentStyle.whiteSpace;
    -    } else if (window.getComputedStyle) {
    -      // Firefox makes a best guess if node is disconnected whereas Safari
    -      // returns the empty string.
    -      whitespace = window.getComputedStyle(node, null).whiteSpace;
    -    }
    -    return !whitespace || whitespace === 'pre';
    -  }
    -
    -  function normalizedHtml(node, out, opt_sortAttrs) {
    -    switch (node.nodeType) {
    -      case 1:  // an element
    -        var name = node.tagName.toLowerCase();
    -
    -        out.push('<', name);
    -        var attrs = node.attributes;
    -        var n = attrs.length;
    -        if (n) {
    -          if (opt_sortAttrs) {
    -            var sortedAttrs = [];
    -            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    -            sortedAttrs.sort(function (a, b) {
    -                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    -              });
    -            attrs = sortedAttrs;
    -          }
    -          for (var i = 0; i < n; ++i) {
    -            var attr = attrs[i];
    -            if (!attr.specified) { continue; }
    -            out.push(' ', attr.name.toLowerCase(),
    -                     '="', attribToHtml(attr.value), '"');
    -          }
    -        }
    -        out.push('>');
    -        for (var child = node.firstChild; child; child = child.nextSibling) {
    -          normalizedHtml(child, out, opt_sortAttrs);
    -        }
    -        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    -          out.push('<\/', name, '>');
    -        }
    -        break;
    -      case 3: case 4: // text
    -        out.push(textToHtml(node.nodeValue));
    -        break;
    -    }
    -  }
    -
    -  /**
    -   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    -   * matches the union o the sets o strings matched d by the input RegExp.
    -   * Since it matches globally, if the input strings have a start-of-input
    -   * anchor (/^.../), it is ignored for the purposes of unioning.
    -   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    -   * @return {RegExp} a global regex.
    -   */
    -  function combinePrefixPatterns(regexs) {
    -    var capturedGroupIndex = 0;
    -
    -    var needToFoldCase = false;
    -    var ignoreCase = false;
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.ignoreCase) {
    -        ignoreCase = true;
    -      } else if (/[a-z]/i.test(regex.source.replace(
    -                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    -        needToFoldCase = true;
    -        ignoreCase = false;
    -        break;
    -      }
    -    }
    -
    -    function decodeEscape(charsetPart) {
    -      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    -      switch (charsetPart.charAt(1)) {
    -        case 'b': return 8;
    -        case 't': return 9;
    -        case 'n': return 0xa;
    -        case 'v': return 0xb;
    -        case 'f': return 0xc;
    -        case 'r': return 0xd;
    -        case 'u': case 'x':
    -          return parseInt(charsetPart.substring(2), 16)
    -              || charsetPart.charCodeAt(1);
    -        case '0': case '1': case '2': case '3': case '4':
    -        case '5': case '6': case '7':
    -          return parseInt(charsetPart.substring(1), 8);
    -        default: return charsetPart.charCodeAt(1);
    -      }
    -    }
    -
    -    function encodeEscape(charCode) {
    -      if (charCode < 0x20) {
    -        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    -      }
    -      var ch = String.fromCharCode(charCode);
    -      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    -        ch = '\\' + ch;
    -      }
    -      return ch;
    -    }
    -
    -    function caseFoldCharset(charSet) {
    -      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    -          new RegExp(
    -              '\\\\u[0-9A-Fa-f]{4}'
    -              + '|\\\\x[0-9A-Fa-f]{2}'
    -              + '|\\\\[0-3][0-7]{0,2}'
    -              + '|\\\\[0-7]{1,2}'
    -              + '|\\\\[\\s\\S]'
    -              + '|-'
    -              + '|[^-\\\\]',
    -              'g'));
    -      var groups = [];
    -      var ranges = [];
    -      var inverse = charsetParts[0] === '^';
    -      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    -        var p = charsetParts[i];
    -        switch (p) {
    -          case '\\B': case '\\b':
    -          case '\\D': case '\\d':
    -          case '\\S': case '\\s':
    -          case '\\W': case '\\w':
    -            groups.push(p);
    -            continue;
    -        }
    -        var start = decodeEscape(p);
    -        var end;
    -        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    -          end = decodeEscape(charsetParts[i + 2]);
    -          i += 2;
    -        } else {
    -          end = start;
    -        }
    -        ranges.push([start, end]);
    -        // If the range might intersect letters, then expand it.
    -        if (!(end < 65 || start > 122)) {
    -          if (!(end < 65 || start > 90)) {
    -            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    -          }
    -          if (!(end < 97 || start > 122)) {
    -            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    -          }
    -        }
    -      }
    -
    -      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    -      // -> [[1, 12], [14, 14], [16, 17]]
    -      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    -      var consolidatedRanges = [];
    -      var lastRange = [NaN, NaN];
    -      for (var i = 0; i < ranges.length; ++i) {
    -        var range = ranges[i];
    -        if (range[0] <= lastRange[1] + 1) {
    -          lastRange[1] = Math.max(lastRange[1], range[1]);
    -        } else {
    -          consolidatedRanges.push(lastRange = range);
    -        }
    -      }
    -
    -      var out = ['['];
    -      if (inverse) { out.push('^'); }
    -      out.push.apply(out, groups);
    -      for (var i = 0; i < consolidatedRanges.length; ++i) {
    -        var range = consolidatedRanges[i];
    -        out.push(encodeEscape(range[0]));
    -        if (range[1] > range[0]) {
    -          if (range[1] + 1 > range[0]) { out.push('-'); }
    -          out.push(encodeEscape(range[1]));
    -        }
    -      }
    -      out.push(']');
    -      return out.join('');
    -    }
    -
    -    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    -      // Split into character sets, escape sequences, punctuation strings
    -      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    -      // include any of the above.
    -      var parts = regex.source.match(
    -          new RegExp(
    -              '(?:'
    -              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    -              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    -              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    -              + '|\\\\[0-9]+'  // a back-reference or octal escape
    -              + '|\\\\[^ux0-9]'  // other escape sequence
    -              + '|\\(\\?[:!=]'  // start of a non-capturing group
    -              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    -              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    -              + ')',
    -              'g'));
    -      var n = parts.length;
    -
    -      // Maps captured group numbers to the number they will occupy in
    -      // the output or to -1 if that has not been determined, or to
    -      // undefined if they need not be capturing in the output.
    -      var capturedGroups = [];
    -
    -      // Walk over and identify back references to build the capturedGroups
    -      // mapping.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          // groups are 1-indexed, so max group index is count of '('
    -          ++groupIndex;
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            capturedGroups[decimalValue] = -1;
    -          }
    -        }
    -      }
    -
    -      // Renumber groups and reduce capturing groups to non-capturing groups
    -      // where possible.
    -      for (var i = 1; i < capturedGroups.length; ++i) {
    -        if (-1 === capturedGroups[i]) {
    -          capturedGroups[i] = ++capturedGroupIndex;
    -        }
    -      }
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          ++groupIndex;
    -          if (capturedGroups[groupIndex] === undefined) {
    -            parts[i] = '(?:';
    -          }
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            parts[i] = '\\' + capturedGroups[groupIndex];
    -          }
    -        }
    -      }
    -
    -      // Remove any prefix anchors so that the output will match anywhere.
    -      // ^^ really does mean an anchored match though.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    -      }
    -
    -      // Expand letters to groupts to handle mixing of case-sensitive and
    -      // case-insensitive patterns if necessary.
    -      if (regex.ignoreCase && needToFoldCase) {
    -        for (var i = 0; i < n; ++i) {
    -          var p = parts[i];
    -          var ch0 = p.charAt(0);
    -          if (p.length >= 2 && ch0 === '[') {
    -            parts[i] = caseFoldCharset(p);
    -          } else if (ch0 !== '\\') {
    -            // TODO: handle letters in numeric escapes.
    -            parts[i] = p.replace(
    -                /[a-zA-Z]/g,
    -                function (ch) {
    -                  var cc = ch.charCodeAt(0);
    -                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    -                });
    -          }
    -        }
    -      }
    -
    -      return parts.join('');
    -    }
    -
    -    var rewritten = [];
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    -      rewritten.push(
    -          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    -    }
    -
    -    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    -  }
    -
    -  var PR_innerHtmlWorks = null;
    -  function getInnerHtml(node) {
    -    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    -    // an html description of well formed XML and the containing tag is a PRE
    -    // tag, so we detect that case and emulate innerHTML.
    -    if (null === PR_innerHtmlWorks) {
    -      var testNode = document.createElement('PRE');
    -      testNode.appendChild(
    -          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    -      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    -    }
    -
    -    if (PR_innerHtmlWorks) {
    -      var content = node.innerHTML;
    -      // XMP tags contain unescaped entities so require special handling.
    -      if (isRawContent(node)) {
    -        content = textToHtml(content);
    -      } else if (!isPreformatted(node, content)) {
    -        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    -            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    -      }
    -      return content;
    -    }
    -
    -    var out = [];
    -    for (var child = node.firstChild; child; child = child.nextSibling) {
    -      normalizedHtml(child, out);
    -    }
    -    return out.join('');
    -  }
    -
    -  /** returns a function that expand tabs to spaces.  This function can be fed
    -    * successive chunks of text, and will maintain its own internal state to
    -    * keep track of how tabs are expanded.
    -    * @return {function (string) : string} a function that takes
    -    *   plain text and return the text with tabs expanded.
    -    * @private
    -    */
    -  function makeTabExpander(tabWidth) {
    -    var SPACES = '                ';
    -    var charInLine = 0;
    -
    -    return function (plainText) {
    -      // walk over each character looking for tabs and newlines.
    -      // On tabs, expand them.  On newlines, reset charInLine.
    -      // Otherwise increment charInLine
    -      var out = null;
    -      var pos = 0;
    -      for (var i = 0, n = plainText.length; i < n; ++i) {
    -        var ch = plainText.charAt(i);
    -
    -        switch (ch) {
    -          case '\t':
    -            if (!out) { out = []; }
    -            out.push(plainText.substring(pos, i));
    -            // calculate how much space we need in front of this part
    -            // nSpaces is the amount of padding -- the number of spaces needed
    -            // to move us to the next column, where columns occur at factors of
    -            // tabWidth.
    -            var nSpaces = tabWidth - (charInLine % tabWidth);
    -            charInLine += nSpaces;
    -            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    -              out.push(SPACES.substring(0, nSpaces));
    -            }
    -            pos = i + 1;
    -            break;
    -          case '\n':
    -            charInLine = 0;
    -            break;
    -          default:
    -            ++charInLine;
    -        }
    -      }
    -      if (!out) { return plainText; }
    -      out.push(plainText.substring(pos));
    -      return out.join('');
    -    };
    -  }
    -
    -  var pr_chunkPattern = new RegExp(
    -      '[^<]+'  // A run of characters other than '<'
    -      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    -      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    -      // a probable tag that should not be highlighted
    -      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    -      + '|<',  // A '<' that does not begin a larger chunk
    -      'g');
    -  var pr_commentPrefix = /^<\!--/;
    -  var pr_cdataPrefix = /^<!\[CDATA\[/;
    -  var pr_brPrefix = /^<br\b/i;
    -  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    -
    -  /** split markup into chunks of html tags (style null) and
    -    * plain text (style {@link #PR_PLAIN}), converting tags which are
    -    * significant for tokenization (<br>) into their textual equivalent.
    -    *
    -    * @param {string} s html where whitespace is considered significant.
    -    * @return {Object} source code and extracted tags.
    -    * @private
    -    */
    -  function extractTags(s) {
    -    // since the pattern has the 'g' modifier and defines no capturing groups,
    -    // this will return a list of all chunks which we then classify and wrap as
    -    // PR_Tokens
    -    var matches = s.match(pr_chunkPattern);
    -    var sourceBuf = [];
    -    var sourceBufLen = 0;
    -    var extractedTags = [];
    -    if (matches) {
    -      for (var i = 0, n = matches.length; i < n; ++i) {
    -        var match = matches[i];
    -        if (match.length > 1 && match.charAt(0) === '<') {
    -          if (pr_commentPrefix.test(match)) { continue; }
    -          if (pr_cdataPrefix.test(match)) {
    -            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    -            sourceBuf.push(match.substring(9, match.length - 3));
    -            sourceBufLen += match.length - 12;
    -          } else if (pr_brPrefix.test(match)) {
    -            // <br> tags are lexically significant so convert them to text.
    -            // This is undone later.
    -            sourceBuf.push('\n');
    -            ++sourceBufLen;
    -          } else {
    -            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    -              // A <span class="nocode"> will start a section that should be
    -              // ignored.  Continue walking the list until we see a matching end
    -              // tag.
    -              var name = match.match(pr_tagNameRe)[2];
    -              var depth = 1;
    -              var j;
    -              end_tag_loop:
    -              for (j = i + 1; j < n; ++j) {
    -                var name2 = matches[j].match(pr_tagNameRe);
    -                if (name2 && name2[2] === name) {
    -                  if (name2[1] === '/') {
    -                    if (--depth === 0) { break end_tag_loop; }
    -                  } else {
    -                    ++depth;
    -                  }
    -                }
    -              }
    -              if (j < n) {
    -                extractedTags.push(
    -                    sourceBufLen, matches.slice(i, j + 1).join(''));
    -                i = j;
    -              } else {  // Ignore unclosed sections.
    -                extractedTags.push(sourceBufLen, match);
    -              }
    -            } else {
    -              extractedTags.push(sourceBufLen, match);
    -            }
    -          }
    -        } else {
    -          var literalText = htmlToText(match);
    -          sourceBuf.push(literalText);
    -          sourceBufLen += literalText.length;
    -        }
    -      }
    -    }
    -    return { source: sourceBuf.join(''), tags: extractedTags };
    -  }
    -
    -  /** True if the given tag contains a class attribute with the nocode class. */
    -  function isNoCodeTag(tag) {
    -    return !!tag
    -        // First canonicalize the representation of attributes
    -        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    -                 ' $1="$2$3$4"')
    -        // Then look for the attribute we want.
    -        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    -  }
    -
    -  /**
    -   * Apply the given language handler to sourceCode and add the resulting
    -   * decorations to out.
    -   * @param {number} basePos the index of sourceCode within the chunk of source
    -   *    whose decorations are already present on out.
    -   */
    -  function appendDecorations(basePos, sourceCode, langHandler, out) {
    -    if (!sourceCode) { return; }
    -    var job = {
    -      source: sourceCode,
    -      basePos: basePos
    -    };
    -    langHandler(job);
    -    out.push.apply(out, job.decorations);
    -  }
    -
    -  /** Given triples of [style, pattern, context] returns a lexing function,
    -    * The lexing function interprets the patterns to find token boundaries and
    -    * returns a decoration list of the form
    -    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    -    * where index_n is an index into the sourceCode, and style_n is a style
    -    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    -    * all characters in sourceCode[index_n-1:index_n].
    -    *
    -    * The stylePatterns is a list whose elements have the form
    -    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    -    *
    -    * Style is a style constant like PR_PLAIN, or can be a string of the
    -    * form 'lang-FOO', where FOO is a language extension describing the
    -    * language of the portion of the token in $1 after pattern executes.
    -    * E.g., if style is 'lang-lisp', and group 1 contains the text
    -    * '(hello (world))', then that portion of the token will be passed to the
    -    * registered lisp handler for formatting.
    -    * The text before and after group 1 will be restyled using this decorator
    -    * so decorators should take care that this doesn't result in infinite
    -    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    -    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    -    * '<script>foo()<\/script>', which would cause the current decorator to
    -    * be called with '<script>' which would not match the same rule since
    -    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    -    * the generic tag rule.  The handler registered for the 'js' extension would
    -    * then be called with 'foo()', and finally, the current decorator would
    -    * be called with '<\/script>' which would not match the original rule and
    -    * so the generic tag rule would identify it as a tag.
    -    *
    -    * Pattern must only match prefixes, and if it matches a prefix, then that
    -    * match is considered a token with the same style.
    -    *
    -    * Context is applied to the last non-whitespace, non-comment token
    -    * recognized.
    -    *
    -    * Shortcut is an optional string of characters, any of which, if the first
    -    * character, gurantee that this pattern and only this pattern matches.
    -    *
    -    * @param {Array} shortcutStylePatterns patterns that always start with
    -    *   a known character.  Must have a shortcut string.
    -    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    -    *   order if the shortcut ones fail.  May have shortcuts.
    -    *
    -    * @return {function (Object)} a
    -    *   function that takes source code and returns a list of decorations.
    -    */
    -  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    -    var shortcuts = {};
    -    var tokenizer;
    -    (function () {
    -      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    -      var allRegexs = [];
    -      var regexKeys = {};
    -      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    -        var patternParts = allPatterns[i];
    -        var shortcutChars = patternParts[3];
    -        if (shortcutChars) {
    -          for (var c = shortcutChars.length; --c >= 0;) {
    -            shortcuts[shortcutChars.charAt(c)] = patternParts;
    -          }
    -        }
    -        var regex = patternParts[1];
    -        var k = '' + regex;
    -        if (!regexKeys.hasOwnProperty(k)) {
    -          allRegexs.push(regex);
    -          regexKeys[k] = null;
    -        }
    -      }
    -      allRegexs.push(/[\0-\uffff]/);
    -      tokenizer = combinePrefixPatterns(allRegexs);
    -    })();
    -
    -    var nPatterns = fallthroughStylePatterns.length;
    -    var notWs = /\S/;
    -
    -    /**
    -     * Lexes job.source and produces an output array job.decorations of style
    -     * classes preceded by the position at which they start in job.source in
    -     * order.
    -     *
    -     * @param {Object} job an object like {@code
    -     *    source: {string} sourceText plain text,
    -     *    basePos: {int} position of job.source in the larger chunk of
    -     *        sourceCode.
    -     * }
    -     */
    -    var decorate = function (job) {
    -      var sourceCode = job.source, basePos = job.basePos;
    -      /** Even entries are positions in source in ascending order.  Odd enties
    -        * are style markers (e.g., PR_COMMENT) that run from that position until
    -        * the end.
    -        * @type {Array.<number|string>}
    -        */
    -      var decorations = [basePos, PR_PLAIN];
    -      var pos = 0;  // index into sourceCode
    -      var tokens = sourceCode.match(tokenizer) || [];
    -      var styleCache = {};
    -
    -      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    -        var token = tokens[ti];
    -        var style = styleCache[token];
    -        var match = void 0;
    -
    -        var isEmbedded;
    -        if (typeof style === 'string') {
    -          isEmbedded = false;
    -        } else {
    -          var patternParts = shortcuts[token.charAt(0)];
    -          if (patternParts) {
    -            match = token.match(patternParts[1]);
    -            style = patternParts[0];
    -          } else {
    -            for (var i = 0; i < nPatterns; ++i) {
    -              patternParts = fallthroughStylePatterns[i];
    -              match = token.match(patternParts[1]);
    -              if (match) {
    -                style = patternParts[0];
    -                break;
    -              }
    -            }
    -
    -            if (!match) {  // make sure that we make progress
    -              style = PR_PLAIN;
    -            }
    -          }
    -
    -          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    -          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    -            isEmbedded = false;
    -            style = PR_SOURCE;
    -          }
    -
    -          if (!isEmbedded) { styleCache[token] = style; }
    -        }
    -
    -        var tokenStart = pos;
    -        pos += token.length;
    -
    -        if (!isEmbedded) {
    -          decorations.push(basePos + tokenStart, style);
    -        } else {  // Treat group 1 as an embedded block of source code.
    -          var embeddedSource = match[1];
    -          var embeddedSourceStart = token.indexOf(embeddedSource);
    -          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    -          if (match[2]) {
    -            // If embeddedSource can be blank, then it would match at the
    -            // beginning which would cause us to infinitely recurse on the
    -            // entire token, so we catch the right context in match[2].
    -            embeddedSourceEnd = token.length - match[2].length;
    -            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    -          }
    -          var lang = style.substring(5);
    -          // Decorate the left of the embedded source
    -          appendDecorations(
    -              basePos + tokenStart,
    -              token.substring(0, embeddedSourceStart),
    -              decorate, decorations);
    -          // Decorate the embedded source
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceStart,
    -              embeddedSource,
    -              langHandlerForExtension(lang, embeddedSource),
    -              decorations);
    -          // Decorate the right of the embedded section
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceEnd,
    -              token.substring(embeddedSourceEnd),
    -              decorate, decorations);
    -        }
    -      }
    -      job.decorations = decorations;
    -    };
    -    return decorate;
    -  }
    -
    -  /** returns a function that produces a list of decorations from source text.
    -    *
    -    * This code treats ", ', and ` as string delimiters, and \ as a string
    -    * escape.  It does not recognize perl's qq() style strings.
    -    * It has no special handling for double delimiter escapes as in basic, or
    -    * the tripled delimiters used in python, but should work on those regardless
    -    * although in those cases a single string literal may be broken up into
    -    * multiple adjacent string literals.
    -    *
    -    * It recognizes C, C++, and shell style comments.
    -    *
    -    * @param {Object} options a set of optional parameters.
    -    * @return {function (Object)} a function that examines the source code
    -    *     in the input job and builds the decoration list.
    -    */
    -  function sourceDecorator(options) {
    -    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    -    if (options['tripleQuotedStrings']) {
    -      // '''multi-line-string''', 'single-line-string', and double-quoted
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    -           null, '\'"']);
    -    } else if (options['multiLineStrings']) {
    -      // 'multi-line-string', "multi-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    -           null, '\'"`']);
    -    } else {
    -      // 'single-line-string', "single-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,
    -           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    -           null, '"\'']);
    -    }
    -    if (options['verbatimStrings']) {
    -      // verbatim-string-literal production from the C# grammar.  See issue 93.
    -      fallthroughStylePatterns.push(
    -          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    -    }
    -    if (options['hashComments']) {
    -      if (options['cStyleComments']) {
    -        // Stop C preprocessor declarations at an unclosed open comment
    -        shortcutStylePatterns.push(
    -            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    -             null, '#']);
    -        fallthroughStylePatterns.push(
    -            [PR_STRING,
    -             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    -             null]);
    -      } else {
    -        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    -      }
    -    }
    -    if (options['cStyleComments']) {
    -      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    -      fallthroughStylePatterns.push(
    -          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    -    }
    -    if (options['regexLiterals']) {
    -      var REGEX_LITERAL = (
    -          // A regular expression literal starts with a slash that is
    -          // not followed by * or / so that it is not confused with
    -          // comments.
    -          '/(?=[^/*])'
    -          // and then contains any number of raw characters,
    -          + '(?:[^/\\x5B\\x5C]'
    -          // escape sequences (\x5C),
    -          +    '|\\x5C[\\s\\S]'
    -          // or non-nesting character sets (\x5B\x5D);
    -          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    -          // finally closed by a /.
    -          + '/');
    -      fallthroughStylePatterns.push(
    -          ['lang-regex',
    -           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    -           ]);
    -    }
    -
    -    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    -    if (keywords.length) {
    -      fallthroughStylePatterns.push(
    -          [PR_KEYWORD,
    -           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    -    }
    -
    -    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    -    fallthroughStylePatterns.push(
    -        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    -        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    -        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_LITERAL,
    -         new RegExp(
    -             '^(?:'
    -             // A hex number
    -             + '0x[a-f0-9]+'
    -             // or an octal or decimal number,
    -             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    -             // possibly in scientific notation
    -             + '(?:e[+\\-]?\\d+)?'
    -             + ')'
    -             // with an optional modifier like UL for unsigned long
    -             + '[a-z]*', 'i'),
    -         null, '0123456789'],
    -        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    -
    -    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    -  }
    -
    -  var decorateSource = sourceDecorator({
    -        'keywords': ALL_KEYWORDS,
    -        'hashComments': true,
    -        'cStyleComments': true,
    -        'multiLineStrings': true,
    -        'regexLiterals': true
    -      });
    -
    -  /** Breaks {@code job.source} around style boundaries in
    -    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    -    * and leaves the result in {@code job.prettyPrintedHtml}.
    -    * @param {Object} job like {
    -    *    source: {string} source as plain text,
    -    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    -    *                   html preceded by their position in {@code job.source}
    -    *                   in order
    -    *    decorations: {Array.<number|string} an array of style classes preceded
    -    *                 by the position at which they start in job.source in order
    -    * }
    -    * @private
    -    */
    -  function recombineTagsAndDecorations(job) {
    -    var sourceText = job.source;
    -    var extractedTags = job.extractedTags;
    -    var decorations = job.decorations;
    -
    -    var html = [];
    -    // index past the last char in sourceText written to html
    -    var outputIdx = 0;
    -
    -    var openDecoration = null;
    -    var currentDecoration = null;
    -    var tagPos = 0;  // index into extractedTags
    -    var decPos = 0;  // index into decorations
    -    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    -
    -    var adjacentSpaceRe = /([\r\n ]) /g;
    -    var startOrSpaceRe = /(^| ) /gm;
    -    var newlineRe = /\r\n?|\n/g;
    -    var trailingSpaceRe = /[ \r\n]$/;
    -    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    -
    -    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    -    var isIE678 = window['_pr_isIE6']();
    -    var lineBreakHtml = (
    -        isIE678
    -        ? (job.sourceNode.tagName === 'PRE'
    -           // Use line feeds instead of <br>s so that copying and pasting works
    -           // on IE.
    -           // Doing this on other browsers breaks lots of stuff since \r\n is
    -           // treated as two newlines on Firefox.
    -           ? (isIE678 === 6 ? '&#160;\r\n' :
    -              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    -           // IE collapses multiple adjacent <br>s into 1 line break.
    -           // Prefix every newline with '&#160;' to prevent such behavior.
    -           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    -           : '&#160;<br />')
    -        : '<br />');
    -
    -    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    -    // number of the first line.
    -    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    -    var lineBreaker;
    -    if (numberLines) {
    -      var lineBreaks = [];
    -      for (var i = 0; i < 10; ++i) {
    -        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    -      }
    -      var lineNum = numberLines[1] && numberLines[1].length
    -          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    -      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    -      if (lineNum) {
    -        html.push(' value="', lineNum + 1, '"');
    -      }
    -      html.push('>');
    -      lineBreaker = function () {
    -        var lb = lineBreaks[++lineNum % 10];
    -        // If a decoration is open, we need to close it before closing a list-item
    -        // and reopen it on the other side of the list item.
    -        return openDecoration
    -            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    -      };
    -    } else {
    -      lineBreaker = lineBreakHtml;
    -    }
    -
    -    // A helper function that is responsible for opening sections of decoration
    -    // and outputing properly escaped chunks of source
    -    function emitTextUpTo(sourceIdx) {
    -      if (sourceIdx > outputIdx) {
    -        if (openDecoration && openDecoration !== currentDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        if (!openDecoration && currentDecoration) {
    -          openDecoration = currentDecoration;
    -          html.push('<span class="', openDecoration, '">');
    -        }
    -        // This interacts badly with some wikis which introduces paragraph tags
    -        // into pre blocks for some strange reason.
    -        // It's necessary for IE though which seems to lose the preformattedness
    -        // of <pre> tags when their innerHTML is assigned.
    -        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    -        // and it serves to undo the conversion of <br>s to newlines done in
    -        // chunkify.
    -        var htmlChunk = textToHtml(
    -            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    -            .replace(lastWasSpace
    -                     ? startOrSpaceRe
    -                     : adjacentSpaceRe, '$1&#160;');
    -        // Keep track of whether we need to escape space at the beginning of the
    -        // next chunk.
    -        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    -        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    -        outputIdx = sourceIdx;
    -      }
    -    }
    -
    -    while (true) {
    -      // Determine if we're going to consume a tag this time around.  Otherwise
    -      // we consume a decoration or exit.
    -      var outputTag;
    -      if (tagPos < extractedTags.length) {
    -        if (decPos < decorations.length) {
    -          // Pick one giving preference to extractedTags since we shouldn't open
    -          // a new style that we're going to have to immediately close in order
    -          // to output a tag.
    -          outputTag = extractedTags[tagPos] <= decorations[decPos];
    -        } else {
    -          outputTag = true;
    -        }
    -      } else {
    -        outputTag = false;
    -      }
    -      // Consume either a decoration or a tag or exit.
    -      if (outputTag) {
    -        emitTextUpTo(extractedTags[tagPos]);
    -        if (openDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        html.push(extractedTags[tagPos + 1]);
    -        tagPos += 2;
    -      } else if (decPos < decorations.length) {
    -        emitTextUpTo(decorations[decPos]);
    -        currentDecoration = decorations[decPos + 1];
    -        decPos += 2;
    -      } else {
    -        break;
    -      }
    -    }
    -    emitTextUpTo(sourceText.length);
    -    if (openDecoration) {
    -      html.push('</span>');
    -    }
    -    if (numberLines) { html.push('</li></ol>'); }
    -    job.prettyPrintedHtml = html.join('');
    -  }
    -
    -  /** Maps language-specific file extensions to handlers. */
    -  var langHandlerRegistry = {};
    -  /** Register a language handler for the given file extensions.
    -    * @param {function (Object)} handler a function from source code to a list
    -    *      of decorations.  Takes a single argument job which describes the
    -    *      state of the computation.   The single parameter has the form
    -    *      {@code {
    -    *        source: {string} as plain text.
    -    *        decorations: {Array.<number|string>} an array of style classes
    -    *                     preceded by the position at which they start in
    -    *                     job.source in order.
    -    *                     The language handler should assigned this field.
    -    *        basePos: {int} the position of source in the larger source chunk.
    -    *                 All positions in the output decorations array are relative
    -    *                 to the larger source chunk.
    -    *      } }
    -    * @param {Array.<string>} fileExtensions
    -    */
    -  function registerLangHandler(handler, fileExtensions) {
    -    for (var i = fileExtensions.length; --i >= 0;) {
    -      var ext = fileExtensions[i];
    -      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    -        langHandlerRegistry[ext] = handler;
    -      } else if ('console' in window) {
    -        console['warn']('cannot override language handler %s', ext);
    -      }
    -    }
    -  }
    -  function langHandlerForExtension(extension, source) {
    -    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    -      // Treat it as markup if the first non whitespace character is a < and
    -      // the last non-whitespace character is a >.
    -      extension = /^\s*</.test(source)
    -          ? 'default-markup'
    -          : 'default-code';
    -    }
    -    return langHandlerRegistry[extension];
    -  }
    -  registerLangHandler(decorateSource, ['default-code']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [],
    -          [
    -           [PR_PLAIN,       /^[^<?]+/],
    -           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    -           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    -           // Unescaped content in an unknown language
    -           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    -           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    -           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    -           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    -           // Unescaped content in javascript.  (Or possibly vbscript).
    -           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    -           // Contains unescaped stylesheet content
    -           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    -           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    -          ]),
    -      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [
    -           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    -           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    -           ],
    -          [
    -           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    -           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    -           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    -           [PR_PUNCTUATION,  /^[=<>\/]+/],
    -           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    -           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    -           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    -           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    -           ]),
    -      ['in.tag']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CPP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true
    -        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': 'null true false'
    -        }), ['json']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CSHARP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true,
    -          'verbatimStrings': true
    -        }), ['cs']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JAVA_KEYWORDS,
    -          'cStyleComments': true
    -        }), ['java']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': SH_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true
    -        }), ['bsh', 'csh', 'sh']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PYTHON_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'tripleQuotedStrings': true
    -        }), ['cv', 'py']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PERL_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['perl', 'pl', 'pm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': RUBY_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['rb']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JSCRIPT_KEYWORDS,
    -          'cStyleComments': true,
    -          'regexLiterals': true
    -        }), ['js']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    -
    -  function applyDecorator(job) {
    -    var sourceCodeHtml = job.sourceCodeHtml;
    -    var opt_langExtension = job.langExtension;
    -
    -    // Prepopulate output in case processing fails with an exception.
    -    job.prettyPrintedHtml = sourceCodeHtml;
    -
    -    try {
    -      // Extract tags, and convert the source code to plain text.
    -      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    -      /** Plain text. @type {string} */
    -      var source = sourceAndExtractedTags.source;
    -      job.source = source;
    -      job.basePos = 0;
    -
    -      /** Even entries are positions in source in ascending order.  Odd entries
    -        * are tags that were extracted at that position.
    -        * @type {Array.<number|string>}
    -        */
    -      job.extractedTags = sourceAndExtractedTags.tags;
    -
    -      // Apply the appropriate language handler
    -      langHandlerForExtension(opt_langExtension, source)(job);
    -      // Integrate the decorations and tags back into the source code to produce
    -      // a decorated html string which is left in job.prettyPrintedHtml.
    -      recombineTagsAndDecorations(job);
    -    } catch (e) {
    -      if ('console' in window) {
    -        console['log'](e && e['stack'] ? e['stack'] : e);
    -      }
    -    }
    -  }
    -
    -  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    -    var job = {
    -      sourceCodeHtml: sourceCodeHtml,
    -      langExtension: opt_langExtension
    -    };
    -    applyDecorator(job);
    -    return job.prettyPrintedHtml;
    -  }
    -
    -  function prettyPrint(opt_whenDone) {
    -    function byTagName(tn) { return document.getElementsByTagName(tn); }
    -    // fetch a list of nodes to rewrite
    -    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    -    var elements = [];
    -    for (var i = 0; i < codeSegments.length; ++i) {
    -      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    -        elements.push(codeSegments[i][j]);
    -      }
    -    }
    -    codeSegments = null;
    -
    -    var clock = Date;
    -    if (!clock['now']) {
    -      clock = { 'now': function () { return (new Date).getTime(); } };
    -    }
    -
    -    // The loop is broken into a series of continuations to make sure that we
    -    // don't make the browser unresponsive when rewriting a large page.
    -    var k = 0;
    -    var prettyPrintingJob;
    -
    -    function doWork() {
    -      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    -                     clock.now() + 250 /* ms */ :
    -                     Infinity);
    -      for (; k < elements.length && clock.now() < endTime; k++) {
    -        var cs = elements[k];
    -        // [JACOCO] 'prettyprint' -> 'source'
    -        if (cs.className && cs.className.indexOf('source') >= 0) {
    -          // If the classes includes a language extensions, use it.
    -          // Language extensions can be specified like
    -          //     <pre class="prettyprint lang-cpp">
    -          // the language extension "cpp" is used to find a language handler as
    -          // passed to PR_registerLangHandler.
    -          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    -          if (langExtension) { langExtension = langExtension[1]; }
    -
    -          // make sure this is not nested in an already prettified element
    -          var nested = false;
    -          for (var p = cs.parentNode; p; p = p.parentNode) {
    -            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    -                 p.tagName === 'xmp') &&
    -                // [JACOCO] 'prettyprint' -> 'source'
    -                p.className && p.className.indexOf('source') >= 0) {
    -              nested = true;
    -              break;
    -            }
    -          }
    -          if (!nested) {
    -            // fetch the content as a snippet of properly escaped HTML.
    -            // Firefox adds newlines at the end.
    -            var content = getInnerHtml(cs);
    -            content = content.replace(/(?:\r\n?|\n)$/, '');
    -
    -            // do the pretty printing
    -            prettyPrintingJob = {
    -              sourceCodeHtml: content,
    -              langExtension: langExtension,
    -              sourceNode: cs
    -            };
    -            applyDecorator(prettyPrintingJob);
    -            replaceWithPrettyPrintedHtml();
    -          }
    -        }
    -      }
    -      if (k < elements.length) {
    -        // finish up in a continuation
    -        setTimeout(doWork, 250);
    -      } else if (opt_whenDone) {
    -        opt_whenDone();
    -      }
    -    }
    -
    -    function replaceWithPrettyPrintedHtml() {
    -      var newContent = prettyPrintingJob.prettyPrintedHtml;
    -      if (!newContent) { return; }
    -      var cs = prettyPrintingJob.sourceNode;
    -
    -      // push the prettified html back into the tag.
    -      if (!isRawContent(cs)) {
    -        // just replace the old html with the new
    -        cs.innerHTML = newContent;
    -      } else {
    -        // we need to change the tag to a <pre> since <xmp>s do not allow
    -        // embedded tags such as the span tags used to attach styles to
    -        // sections of source code.
    -        var pre = document.createElement('PRE');
    -        for (var i = 0; i < cs.attributes.length; ++i) {
    -          var a = cs.attributes[i];
    -          if (a.specified) {
    -            var aname = a.name.toLowerCase();
    -            if (aname === 'class') {
    -              pre.className = a.value;  // For IE 6
    -            } else {
    -              pre.setAttribute(a.name, a.value);
    -            }
    -          }
    -        }
    -        pre.innerHTML = newContent;
    -
    -        // remove the old
    -        cs.parentNode.replaceChild(pre, cs);
    -        cs = pre;
    -      }
    -    }
    -
    -    doWork();
    -  }
    -
    -  window['PR_normalizedHtml'] = normalizedHtml;
    -  window['prettyPrintOne'] = prettyPrintOne;
    -  window['prettyPrint'] = prettyPrint;
    -  window['PR'] = {
    -        'combinePrefixPatterns': combinePrefixPatterns,
    -        'createSimpleLexer': createSimpleLexer,
    -        'registerLangHandler': registerLangHandler,
    -        'sourceDecorator': sourceDecorator,
    -        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    -        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    -        'PR_COMMENT': PR_COMMENT,
    -        'PR_DECLARATION': PR_DECLARATION,
    -        'PR_KEYWORD': PR_KEYWORD,
    -        'PR_LITERAL': PR_LITERAL,
    -        'PR_NOCODE': PR_NOCODE,
    -        'PR_PLAIN': PR_PLAIN,
    -        'PR_PUNCTUATION': PR_PUNCTUATION,
    -        'PR_SOURCE': PR_SOURCE,
    -        'PR_STRING': PR_STRING,
    -        'PR_TAG': PR_TAG,
    -        'PR_TYPE': PR_TYPE
    -      };
    -})();
    diff --git a/build/jacocoHtml/jacoco-resources/redbar.gif b/build/jacocoHtml/jacoco-resources/redbar.gif
    deleted file mode 100644
    index c2f71469ba995289439d86ea39b1b33edb03388c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHbWMtrCc+AD{pP&D~tn7aso&R25|6^nS*Vg{;>G{84!T)8;{;yfXu$BQ0
    fDgI<(<YM4w&|v@qkQodt90ol_LPjnP91PX~3&9+X
    
    diff --git a/build/jacocoHtml/jacoco-resources/report.css b/build/jacocoHtml/jacoco-resources/report.css
    deleted file mode 100644
    index dd936bca..00000000
    --- a/build/jacocoHtml/jacoco-resources/report.css
    +++ /dev/null
    @@ -1,243 +0,0 @@
    -body, td {
    -  font-family:sans-serif;
    -  font-size:10pt;
    -}
    -
    -h1 {
    -  font-weight:bold;
    -  font-size:18pt;
    -}
    -
    -.breadcrumb {
    -  border:#d6d3ce 1px solid;
    -  padding:2px 4px 2px 4px;
    -}
    -
    -.breadcrumb .info {
    -  float:right;
    -}
    -
    -.breadcrumb .info a {
    -  margin-left:8px;
    -}
    -
    -.el_report {
    -  padding-left:18px;
    -  background-image:url(report.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_group {
    -  padding-left:18px;
    -  background-image:url(group.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_bundle {
    -  padding-left:18px;
    -  background-image:url(bundle.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_package {
    -  padding-left:18px;
    -  background-image:url(package.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_class {
    -  padding-left:18px;
    -  background-image:url(class.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_source {
    -  padding-left:18px;
    -  background-image:url(source.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_method {
    -  padding-left:18px;
    -  background-image:url(method.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_session {
    -  padding-left:18px;
    -  background-image:url(session.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -pre.source {
    -  border:#d6d3ce 1px solid;
    -  font-family:monospace;
    -}
    -
    -pre.source ol {
    -  margin-bottom: 0px;
    -  margin-top: 0px;
    -}
    -
    -pre.source li {
    -  border-left: 1px solid #D6D3CE;
    -  color: #A0A0A0;
    -  padding-left: 0px;
    -}
    -
    -pre.source span.fc {
    -  background-color:#ccffcc;
    -}
    -
    -pre.source span.nc {
    -  background-color:#ffaaaa;
    -}
    -
    -pre.source span.pc {
    -  background-color:#ffffcc;
    -}
    -
    -pre.source span.bfc {
    -  background-image: url(branchfc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bfc:hover {
    -  background-color:#80ff80;
    -}
    -
    -pre.source span.bnc {
    -  background-image: url(branchnc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bnc:hover {
    -  background-color:#ff8080;
    -}
    -
    -pre.source span.bpc {
    -  background-image: url(branchpc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bpc:hover {
    -  background-color:#ffff80;
    -}
    -
    -table.coverage {
    -  empty-cells:show;
    -  border-collapse:collapse;
    -}
    -
    -table.coverage thead {
    -  background-color:#e0e0e0;
    -}
    -
    -table.coverage thead td {
    -  white-space:nowrap;
    -  padding:2px 14px 0px 6px;
    -  border-bottom:#b0b0b0 1px solid;
    -}
    -
    -table.coverage thead td.bar {
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr1 {
    -  text-align:right;
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr2 {
    -  text-align:right;
    -  padding-left:2px;
    -}
    -
    -table.coverage thead td.sortable {
    -  cursor:pointer;
    -  background-image:url(sort.gif);
    -  background-position:right center;
    -  background-repeat:no-repeat;
    -}
    -
    -table.coverage thead td.up {
    -  background-image:url(up.gif);
    -}
    -
    -table.coverage thead td.down {
    -  background-image:url(down.gif);
    -}
    -
    -table.coverage tbody td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -  border-bottom:#d6d3ce 1px solid;
    -}
    -
    -table.coverage tbody tr:hover {
    -  background: #f0f0d0 !important;
    -}
    -
    -table.coverage tbody td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -table.coverage tfoot td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -}
    -
    -table.coverage tfoot td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -.footer {
    -  margin-top:20px;
    -  border-top:#d6d3ce 1px solid;
    -  padding-top:2px;
    -  font-size:8pt;
    -  color:#a0a0a0;
    -}
    -
    -.footer a {
    -  color:#a0a0a0;
    -}
    -
    -.right {
    -  float:right;
    -}
    diff --git a/build/jacocoHtml/jacoco-resources/report.gif b/build/jacocoHtml/jacoco-resources/report.gif
    deleted file mode 100644
    index 8547be50bf3e97e725920927b5aa4cdb031f4823..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 363
    zcmZ?wbhEHb6krfwSZc{In}J~s1H&!`1_uX+xVSjMb&S>db~X8S)dhAn1$OlXwvB~0
    zO@%hC#Wq5_7&^+V`^qgRRa;E2HJ?*&DsqWoev|2fCetO&CQDmPR<;_iXfs~ZZnVC`
    za8s8-+pK*(^AAm4c5K#~(^ocST-lU)byMc8y)_R`^xu2&{oaco_g{R!|Ki8Pmp>lA
    z{_*VHkC*R%zWMa)!{^_hzyAL8?f2(zzrTL}{q@K1Z$Ey2|M}<VuRs5>0mYvzj9d)%
    z3_1)z0P+(9TgQR<1s*zF)+bahX*_u_??Pbv&V#KE^V2&`bhGjjR;*MxC8EFO_3_}<
    zH?w9WrJ7AX`tJM8r525X{~8+WorLsRL^?W{nR=L*odosT`KItOGtTI963}JgV_m??
    z%&>&9-=1G*^3>@wm-A|~FmK+nbvd`DhNhP0UUhXIS1vYAPL5-o?Ce}VXI&i`tO1G(
    BvdRDe
    
    diff --git a/build/jacocoHtml/jacoco-resources/session.gif b/build/jacocoHtml/jacoco-resources/session.gif
    deleted file mode 100644
    index 0151bad8a001e5cc5cc7723a608185f746b7f8c1..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 213
    zcmZ?wbhEHb6krfwXc1xPS$gU4xw~t2pG#?5#^Be>V3WrXI-S9<hrzA(|Nr^_@5k?-
    zZ~y=IhyVNSXZ04}pKqV%t9oe5k~tY+Ar=Pzi2#Z}Sr{1@<Qa4rfB<AC18dL&^}dwM
    zX_r*ys<8N;e6mS?i^dP8jVmAd@U^}&$uv>xc~m$hYN?d{@xrG~CzZCfhpBIRC}Q>I
    kiQ?_Ai=3VZEOFW9fBwaksdwMK(Err)E%VcVRYeAC06w^MK>z>%
    
    diff --git a/build/jacocoHtml/jacoco-resources/sort.gif b/build/jacocoHtml/jacoco-resources/sort.gif
    deleted file mode 100644
    index 6757c2c32b57d768f3c12c4ae99a28bc32c9cbd7..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 58
    zcmZ?wbhEHb<YC}qXkcX6uwldh|Nj+#vM_QnFf!;c00|xjP6h@h!JfpGjC*fB>i!bx
    N`t(%z_h<$NYXI&b5{m!;
    
    diff --git a/build/jacocoHtml/jacoco-resources/sort.js b/build/jacocoHtml/jacoco-resources/sort.js
    deleted file mode 100644
    index 345cbada..00000000
    --- a/build/jacocoHtml/jacoco-resources/sort.js
    +++ /dev/null
    @@ -1,148 +0,0 @@
    -/*******************************************************************************
    - * Copyright (c) 2009, 2025 Mountainminds GmbH & Co. KG and Contributors
    - * This program and the accompanying materials are made available under
    - * the terms of the Eclipse Public License 2.0 which is available at
    - * http://www.eclipse.org/legal/epl-2.0
    - *
    - * SPDX-License-Identifier: EPL-2.0
    - *
    - * Contributors:
    - *    Marc R. Hoffmann - initial API and implementation
    - *
    - *******************************************************************************/
    -
    -(function () {
    -
    -  /**
    -   * Sets the initial sorting derived from the hash.
    -   *
    -   * @param linkelementids
    -   *          list of element ids to search for links to add sort inidcator
    -   *          hash links
    -   */
    -  function initialSort(linkelementids) {
    -    window.linkelementids = linkelementids;
    -    var hash = window.location.hash;
    -    if (hash) {
    -      var m = hash.match(/up-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, true);
    -        }
    -        return;
    -      }
    -      var m = hash.match(/dn-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, false);
    -        }
    -        return
    -      }
    -    }
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header dependening on the current sort state.
    -   */
    -  function toggleSort(header) {
    -    var sortup = header.className.indexOf('down ') == 0;
    -    sortColumn(header, sortup);
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header in the given direction.
    -   */
    -  function sortColumn(header, sortup) {
    -    var table = header.parentNode.parentNode.parentNode;
    -    var body = table.tBodies[0];
    -    var colidx = getNodePosition(header);
    -
    -    resetSortedStyle(table);
    -
    -    var rows = body.rows;
    -    var sortedrows = [];
    -    for (var i = 0; i < rows.length; i++) {
    -      r = rows[i];
    -      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    -    }
    -
    -    var hash;
    -
    -    if (sortup) {
    -      for (var i = sortedrows.length - 1; i >= 0; i--) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'up ' + header.className;
    -      hash = 'up-' + header.id;
    -    } else {
    -      for (var i = 0; i < sortedrows.length; i++) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'down ' + header.className;
    -      hash = 'dn-' + header.id;
    -    }
    -
    -    setHash(hash);
    -  }
    -
    -  /**
    -   * Adds the sort indicator as a hash to the document URL and all links.
    -   */
    -  function setHash(hash) {
    -    window.document.location.hash = hash;
    -    ids = window.linkelementids;
    -    for (var i = 0; i < ids.length; i++) {
    -        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    -    }
    -  }
    -
    -  /**
    -   * Extend all links within the given tag with the given hash.
    -   */
    -  function setHashOnAllLinks(tag, hash) {
    -    links = tag.getElementsByTagName("a");
    -    for (var i = 0; i < links.length; i++) {
    -        var a = links[i];
    -        var href = a.href;
    -        var hashpos = href.indexOf("#");
    -        if (hashpos != -1) {
    -            href = href.substring(0, hashpos);
    -        }
    -        a.href = href + "#" + hash;
    -    }
    -  }
    -
    -  /**
    -   * Calculates the position of a element within its parent.
    -   */
    -  function getNodePosition(element) {
    -    var pos = -1;
    -    while (element) {
    -      element = element.previousSibling;
    -      pos++;
    -    }
    -    return pos;
    -  }
    -
    -  /**
    -   * Remove the sorting indicator style from all headers.
    -   */
    -  function resetSortedStyle(table) {
    -    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    -      if (c.className) {
    -        if (c.className.indexOf('down ') == 0) {
    -          c.className = c.className.slice(5);
    -        }
    -        if (c.className.indexOf('up ') == 0) {
    -          c.className = c.className.slice(3);
    -        }
    -      }
    -    }
    -  }
    -
    -  window['initialSort'] = initialSort;
    -  window['toggleSort'] = toggleSort;
    -
    -})();
    diff --git a/build/jacocoHtml/jacoco-resources/source.gif b/build/jacocoHtml/jacoco-resources/source.gif
    deleted file mode 100644
    index b226e41c5276581db33d71525298ef572cc5d7ce..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 354
    zcmZ?wbhEHb6krfwxXQrr`Rnf=KmWY@^y|~t-#>r-`SJ62+pK*(^ACOa@_X{KW3$$r
    zUbOlAiXE5N?74dH#gDtszu$lH{mGl3&)@xg`{~!`Z@=#VMPB~6_u~7*S3h2T`1$R}
    z?`Q9Re)#(P)3@JWfBgRb^LKTLe^s%6bxA;7sb4jaQ5?`-<<ng5TVLWgvEHM%)~l!1
    zYi_IS^d`3r{dQ}59F})EE$?<()ZzT#ME{lvwpTV~T-lU)Yj4ffO_~4y|7XAeia%Kx
    z85k@XbU-p7KQXY?ADC0%p(B)eLgkXi62W-^(!DQ#v2a~Gz-z9%&!+3h!38t#X02Ds
    zad;WPFvUVOY)YY2k84HG1kp%gVW!3wVI5ap$%?8ZHc4GqO=+PiQzvV>Y72H(vk7Xs
    us!1$fvP8{QU92ZrK%7tARasP&f6JDw8m_8J3W|I7DyXXX9C3DJum%7=h^`F)
    
    diff --git a/build/jacocoHtml/jacoco-resources/up.gif b/build/jacocoHtml/jacoco-resources/up.gif
    deleted file mode 100644
    index 58ed21660ec467736a4d2af17d91341f7cfb556c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ=;nroA^G
    Ub$^Kz-Nct)ygK&ScM%3_0PmU?SpWb4
    
    diff --git a/build/jacocoHtml/jacoco-sessions.html b/build/jacocoHtml/jacoco-sessions.html
    deleted file mode 100644
    index 4e031b20..00000000
    --- a/build/jacocoHtml/jacoco-sessions.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="de"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">Template</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">Kevin-Thinkpad-c6098a24</span></td><td>03.12.2025, 19:35:33</td><td>03.12.2025, 19:35:34</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">com.esotericsoftware.kryo.io.Input</span></td><td><code>82caa4ac8d2c9ad6</code></td></tr><tr><td><span class="el_class">com.esotericsoftware.kryo.io.Output</span></td><td><code>2e152e7951e62ecf</code></td></tr><tr><td><span class="el_class">com.sun.security.sasl.gsskerb.JdkSASL</span></td><td><code>64616edb9a35b7d8</code></td></tr><tr><td><span class="el_class">com.sun.security.sasl.gsskerb.JdkSASL.1</span></td><td><code>0c5e6fbb019aaa08</code></td></tr><tr><td><span class="el_class">com.sun.security.sasl.gsskerb.JdkSASL.ProviderService</span></td><td><code>9b2beff76c2c0ad0</code></td></tr><tr><td><a href="hhn.temp.project/AssignmentManager.html" class="el_class">hhn.temp.project.AssignmentManager</a></td><td><code>6f48d7e281f9300c</code></td></tr><tr><td><span class="el_class">hhn.temp.project.BadCasesTest</span></td><td><code>a5fe84189a272163</code></td></tr><tr><td><span class="el_class">hhn.temp.project.GoodCasesTest</span></td><td><code>0322cb2effe8f05e</code></td></tr><tr><td><a href="hhn.temp.project/Task.html" class="el_class">hhn.temp.project.Task</a></td><td><code>a721bd442becfd7b</code></td></tr><tr><td><a href="hhn.temp.project/TaskState.html" class="el_class">hhn.temp.project.TaskState</a></td><td><code>33cf25c89dd2c17c</code></td></tr><tr><td><a href="hhn.temp.project/Worker.html" class="el_class">hhn.temp.project.Worker</a></td><td><code>a828c6db89b722d5</code></td></tr><tr><td><span class="el_class">org.apache.commons.lang.StringUtils</span></td><td><code>9dd94cc65aafa7e1</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.AbstractTestDescriptor</span></td><td><code>b7d6764e5c2ed1e2</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.DefaultTestClassDescriptor</span></td><td><code>29a580f844a707e9</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.DefaultTestClassRunInfo</span></td><td><code>68a7e79b2914fd4d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.DefaultTestDescriptor</span></td><td><code>62e300564099c798</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.DefaultTestSuiteDescriptor</span></td><td><code>7ca2225e2fb0b4b2</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor</span></td><td><code>af72bb8826a6828d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.TestCompleteEvent</span></td><td><code>0bc5b41bc5fd92f5</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.TestStartEvent</span></td><td><code>7c275a9943dba162</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.DefaultThrowableToTestFailureMapper</span></td><td><code>98b3c6d95620e628</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.TestFailureMapper</span></td><td><code>fad0361b08728e0d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.mappers.AssertErrorMapper</span></td><td><code>f8f52c2b08659a75</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.mappers.AssertjMultipleAssertionsErrorMapper</span></td><td><code>6d9c88eceee97e47</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.mappers.JUnitComparisonTestFailureMapper</span></td><td><code>1870ccedd70c62d3</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.mappers.OpenTestAssertionFailedMapper</span></td><td><code>670c8d72a39d27d6</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.failure.mappers.OpenTestMultipleFailuresErrorMapper</span></td><td><code>fd9e46b889182617</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.filter.TestFilterSpec</span></td><td><code>a7526e6ebab295a4</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor</span></td><td><code>e052047f692cb949</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformSpec</span></td><td><code>f5579f12caeb524a</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor</span></td><td><code>4c75223a5693afa4</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.BackwardsCompatibleLauncherSession</span></td><td><code>7c93d17cac3a9550</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.CollectAllTestClassesExecutor</span></td><td><code>4b0f383cf965c86c</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessorFactory</span></td><td><code>af09c0eae5fa5ced</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestExecutionListener</span></td><td><code>b0f418134c40bf3d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.processors.CaptureTestOutputTestResultProcessor</span></td><td><code>6ad5ce3fa22109c1</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.redirector.DefaultStandardOutputRedirector</span></td><td><code>66011962fbed0a65</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.redirector.DefaultStandardOutputRedirector.DiscardAction</span></td><td><code>c8ea3545fa32c9b3</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.redirector.DefaultStandardOutputRedirector.WriteAction</span></td><td><code>77c2ee9a9fa842b1</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.redirector.JULRedirector</span></td><td><code>14551eb76b8ecae2</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.redirector.TestOutputRedirector</span></td><td><code>3bd5f34889305e8d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.redirector.TestOutputRedirector.Forwarder</span></td><td><code>d61609d95c6d50d3</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.results.AttachParentTestResultProcessor</span></td><td><code>6d02567fd2a7d62d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer</span></td><td><code>5f32a7ab6120753f</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultNestedTestSuiteDescriptorSerializer</span></td><td><code>a46705f180b3563a</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultParameterizedTestDescriptorSerializer</span></td><td><code>e127b3bb672baf7f</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestClassDescriptorSerializer</span></td><td><code>e10b56bac3d27de5</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestClassRunInfoSerializer</span></td><td><code>b395c3a3085809af</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestDescriptorSerializer</span></td><td><code>23901d25c1e75a58</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestFailureSerializer</span></td><td><code>20561e1a5f6db7a7</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestMethodDescriptorSerializer</span></td><td><code>3d1b5d8baa0a900e</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestOutputEventSerializer</span></td><td><code>f44f90cc4c1aac70</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.DefaultTestSuiteDescriptorSerializer</span></td><td><code>4860e580b0f8c694</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.IdSerializer</span></td><td><code>c0b64d9e606e6d13</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.NullableSerializer</span></td><td><code>062a5d6c320f0d23</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.TestCompleteEventSerializer</span></td><td><code>d1bf01c1eff18541</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.TestStartEventSerializer</span></td><td><code>680e50b2e35795b4</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestEventSerializer.WorkerTestSuiteDescriptorSerializer</span></td><td><code>925d25f3960ae5eb</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestWorker</span></td><td><code>b93df52c3074c532</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestWorker.1</span></td><td><code>b8314e777e355f7d</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestWorker.2</span></td><td><code>cc4e0ec7222faee6</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestWorker.3</span></td><td><code>030c348be1c106a4</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestWorker.State</span></td><td><code>903c35047a140ff9</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.TestWorker.TestFrameworkServiceRegistry</span></td><td><code>12a7a3db90dec4e3</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.WorkerTestClassProcessor</span></td><td><code>0f6525b02f2bb3d2</code></td></tr><tr><td><span class="el_class">org.gradle.api.internal.tasks.testing.worker.WorkerTestClassProcessor.WorkerTestSuiteDescriptor</span></td><td><code>b3807e9b92351840</code></td></tr><tr><td><span class="el_class">org.gradle.api.logging.LogLevel</span></td><td><code>236e938e30516638</code></td></tr><tr><td><span class="el_class">org.gradle.api.tasks.testing.TestOutputEvent.Destination</span></td><td><code>5f28eafb6895d752</code></td></tr><tr><td><span class="el_class">org.gradle.internal.Cast</span></td><td><code>6130c81e08d81640</code></td></tr><tr><td><span class="el_class">org.gradle.internal.MutableBoolean</span></td><td><code>349de2b8a37d4338</code></td></tr><tr><td><span class="el_class">org.gradle.internal.SystemProperties</span></td><td><code>f454284e0229cc37</code></td></tr><tr><td><span class="el_class">org.gradle.internal.actor.internal.DefaultActorFactory</span></td><td><code>43acc9e5b3a492ea</code></td></tr><tr><td><span class="el_class">org.gradle.internal.actor.internal.DefaultActorFactory.BlockingActor</span></td><td><code>e2e64c7c8141667f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.AbstractDelegatingExecutorService</span></td><td><code>49d3dededcea40d0</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.AbstractManagedExecutor</span></td><td><code>3e801af2d608b388</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.AbstractManagedExecutor.1</span></td><td><code>e617b5280c0b131e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.CompositeStoppable</span></td><td><code>4a36b916ba0a65be</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.CompositeStoppable.1</span></td><td><code>7991c35593ad107a</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.CompositeStoppable.3</span></td><td><code>e70f2f4c49f9854e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.DefaultExecutorFactory</span></td><td><code>63847aa635eddd82</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.DefaultExecutorFactory.TrackedManagedExecutor</span></td><td><code>36f4bc1cd93c039c</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.ExecutorPolicy.CatchAndRecordFailures</span></td><td><code>2aacf6d3d0dd2240</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.ManagedExecutorImpl</span></td><td><code>ce6f255f6fc1de83</code></td></tr><tr><td><span class="el_class">org.gradle.internal.concurrent.ThreadFactoryImpl</span></td><td><code>1d388becbfb01ad8</code></td></tr><tr><td><span class="el_class">org.gradle.internal.dispatch.ContextClassLoaderDispatch</span></td><td><code>132d0c3fd93e8141</code></td></tr><tr><td><span class="el_class">org.gradle.internal.dispatch.ContextClassLoaderProxy</span></td><td><code>d72ee515504b89e6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.dispatch.MethodInvocation</span></td><td><code>bbd5401404e52b1f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.dispatch.ProxyDispatchAdapter</span></td><td><code>67194db65692ab5d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.dispatch.ProxyDispatchAdapter.DispatchingInvocationHandler</span></td><td><code>82935bb9f2db6b85</code></td></tr><tr><td><span class="el_class">org.gradle.internal.dispatch.ReflectionDispatch</span></td><td><code>6976fdf67f3e8979</code></td></tr><tr><td><span class="el_class">org.gradle.internal.event.AbstractBroadcastDispatch</span></td><td><code>0f5ffe97fa60f855</code></td></tr><tr><td><span class="el_class">org.gradle.internal.event.BroadcastDispatch</span></td><td><code>971f57b98f410335</code></td></tr><tr><td><span class="el_class">org.gradle.internal.event.BroadcastDispatch.CompositeDispatch</span></td><td><code>5d8a079ebb58640f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.event.BroadcastDispatch.EmptyDispatch</span></td><td><code>136c24cb564bd0f5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.event.BroadcastDispatch.SingletonDispatch</span></td><td><code>66b75507cc7e3700</code></td></tr><tr><td><span class="el_class">org.gradle.internal.event.ListenerBroadcast</span></td><td><code>f665e273f2a756e4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.id.CompositeIdGenerator</span></td><td><code>f1c607aa5fccdbaa</code></td></tr><tr><td><span class="el_class">org.gradle.internal.id.CompositeIdGenerator.CompositeId</span></td><td><code>e710c854f802c58b</code></td></tr><tr><td><span class="el_class">org.gradle.internal.id.LongIdGenerator</span></td><td><code>6f8168bf486a560d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.id.UUIDGenerator</span></td><td><code>047a43ab94df6ffa</code></td></tr><tr><td><span class="el_class">org.gradle.internal.io.BufferCaster</span></td><td><code>88a8af829d9f2dca</code></td></tr><tr><td><span class="el_class">org.gradle.internal.io.LinePerThreadBufferingOutputStream</span></td><td><code>6663ead4c1825a46</code></td></tr><tr><td><span class="el_class">org.gradle.internal.io.NullOutputStream</span></td><td><code>eefcfe0665bbfe4c</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.config.LoggingSystemAdapter</span></td><td><code>2bb5150ee66232e9</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.config.LoggingSystemAdapter.SnapshotImpl</span></td><td><code>221de860d84422df</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.console.DefaultUserInputReceiver</span></td><td><code>44c8536611e071b4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.EndOutputEvent</span></td><td><code>0d8edd2a5ce274ee</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.LogLevelChangeEvent</span></td><td><code>33b762c6d5852de7</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.OutputEvent</span></td><td><code>85bce87f1bcda18d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.OutputEventListener</span></td><td><code>e7d50a9306531b49</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.OutputEventListener.1</span></td><td><code>5c6014dff2070607</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.StyledTextOutputEvent</span></td><td><code>11f48fb1a17330c8</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.events.StyledTextOutputEvent.Span</span></td><td><code>c55f799d2631f13d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.serializer.LogEventSerializer</span></td><td><code>b6d88af223db296a</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.serializer.LogLevelChangeEventSerializer</span></td><td><code>f77a59533dde75ec</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.serializer.SpanSerializer</span></td><td><code>5f773b7d1ad07c9f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.serializer.StyledTextOutputEventSerializer</span></td><td><code>faebed27ac3e65ba</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.DefaultLoggingManager</span></td><td><code>61e216a064052ff1</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.DefaultLoggingManager.StartableLoggingRouter</span></td><td><code>78396be937af48de</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.DefaultLoggingManager.StartableLoggingSystem</span></td><td><code>b121a97021902643</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.DefaultLoggingManagerFactory</span></td><td><code>04bcce4325025a96</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.LoggingServiceRegistry</span></td><td><code>90edc2132a7bd2d5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.LoggingServiceRegistry.1</span></td><td><code>b114ac6ebd4de8f3</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.LoggingServiceRegistry.CommandLineLogging</span></td><td><code>ab0f0dfe4e42595e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.services.TextStreamOutputEventListener</span></td><td><code>ef4d0c3267356598</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventListenerManager</span></td><td><code>d6dee3d6fea49020</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventListenerManager.1</span></td><td><code>1e218a705ff0ee7e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventRenderer</span></td><td><code>ad1cc4fc552ab292</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventRenderer.1</span></td><td><code>b94418b2e260aede</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventRenderer.2</span></td><td><code>a956801cd98ca633</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventRenderer.LazyListener</span></td><td><code>7ee882569b166e1e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventRenderer.SnapshotImpl</span></td><td><code>827634628a47c5f5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.sink.OutputEventTransformer</span></td><td><code>06c2270eef0e291e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.slf4j.BuildOperationAwareLogger</span></td><td><code>6a70f9123229323f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger</span></td><td><code>30ddd0a8ff91b5f5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.slf4j.OutputEventListenerBackedLoggerContext</span></td><td><code>9d35d4b7a722eb08</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.slf4j.OutputEventListenerBackedLoggerContext.NoOpLogger</span></td><td><code>3868cc8d50014a37</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.slf4j.Slf4jLoggingConfigurer</span></td><td><code>75fba29c3739b15f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.DefaultStdErrLoggingSystem</span></td><td><code>fd3dd0caab2f1d95</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.DefaultStdOutLoggingSystem</span></td><td><code>528bb39bfb67c3ae</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.JavaUtilLoggingSystem</span></td><td><code>5e967b17aabfd442</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.JavaUtilLoggingSystem.SnapshotImpl</span></td><td><code>15dfc30250723749</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.PrintStreamLoggingSystem</span></td><td><code>1ae6e6b715c6b3f9</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.PrintStreamLoggingSystem.1</span></td><td><code>65643cb979acba64</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.PrintStreamLoggingSystem.OutputEventDestination</span></td><td><code>8c1ddf1476568828</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.PrintStreamLoggingSystem.PrintStreamDestination</span></td><td><code>9e7273f370028123</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.source.PrintStreamLoggingSystem.SnapshotImpl</span></td><td><code>8f80a46f9780a57e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.logging.text.StyledTextOutput.Style</span></td><td><code>d676557b62e3f601</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.filesystem.services.FileSystemServices</span></td><td><code>4556096f1c5a9c8e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.jansi.DefaultJansiRuntimeResolver</span></td><td><code>913dbea9c5665791</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.jansi.JansiBootPathConfigurer</span></td><td><code>3a766bce65ac1a48</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.jansi.JansiLibraryFactory</span></td><td><code>0cbaac430d6656c4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.jansi.JansiStorageLocator</span></td><td><code>c8bff1ccb071f9b6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices</span></td><td><code>60e06107da63f5bf</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.1</span></td><td><code>8cc4a38f8f9f2c24</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeFeatures</span></td><td><code>6c2167dd01d3a7df</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeFeatures.1</span></td><td><code>3b01a06496dac527</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeFeatures.1.2</span></td><td><code>3ac5c626690263b8</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeFeatures.2</span></td><td><code>3e453e557ec15489</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeServicesMode</span></td><td><code>239d6c658f109a99</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeServicesMode.1</span></td><td><code>709d06b6d4cada75</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeServicesMode.2</span></td><td><code>7701fd550a9f507e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.nativeintegration.services.NativeServices.NativeServicesMode.3</span></td><td><code>e9495efc537003de</code></td></tr><tr><td><span class="el_class">org.gradle.internal.reflect.JavaMethod</span></td><td><code>5541c31d24227b86</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.KryoBackedMessageSerializer</span></td><td><code>0028157720ec1f27</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.ConnectionSet</span></td><td><code>323708d9214e34e4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.ConnectionState</span></td><td><code>250fb1b274991d9a</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer</span></td><td><code>b5f4b38125033ffd</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer.ArraySerializer</span></td><td><code>16505d5ccbb1b78b</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer.EmptyArraySerializer</span></td><td><code>cdc53c79a631aa33</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.IncomingQueue</span></td><td><code>0e8ecdb8f31efe51</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.InterHubMessageSerializer</span></td><td><code>7d84d4aa85858c73</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.InterHubMessageSerializer.MessageReader</span></td><td><code>ab1cd6753eb75a29</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.InterHubMessageSerializer.MessageWriter</span></td><td><code>3e4611f758508afb</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.JavaSerializationBackedMethodArgsSerializer</span></td><td><code>4c7a738ee4525ff6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub</span></td><td><code>1326887a1f1da0ac</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub.ChannelDispatch</span></td><td><code>8a9dfd1b6306d8e6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub.ConnectionDispatch</span></td><td><code>df1d0a86180d66e4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub.ConnectionReceive</span></td><td><code>e1dc78071e8e957d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub.Discard</span></td><td><code>63a8d677cc1f9101</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub.Handler</span></td><td><code>3d232f51f2c02828</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHub.State</span></td><td><code>1b76747d7bce6b89</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHubBackedClient</span></td><td><code>77c2124c3c43d832</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection</span></td><td><code>c23964928f1aff22</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection.1</span></td><td><code>ac806a6bc6b1b21d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection.2</span></td><td><code>8ac38215966e3a20</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection.DispatchWrapper</span></td><td><code>9aa5d8679dbc6601</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MethodInvocationSerializer</span></td><td><code>47063ab293644e83</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MethodInvocationSerializer.MethodDetails</span></td><td><code>b6b7fb55e88cc4b9</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MethodInvocationSerializer.MethodInvocationReader</span></td><td><code>e6b939136f207ff5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.MethodInvocationSerializer.MethodInvocationWriter</span></td><td><code>c3b77db1b2556afe</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.OutgoingQueue</span></td><td><code>fbcc05506ad40c68</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.protocol.ChannelIdentifier</span></td><td><code>7697ff6a7c712869</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.protocol.ChannelMessage</span></td><td><code>9bff479666e58802</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.protocol.EndOfStream</span></td><td><code>f29ffed85365f7db</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.protocol.InterHubMessage</span></td><td><code>0c6e49b6ec077e16</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.protocol.InterHubMessage.Delivery</span></td><td><code>0652d09c2a7fd1ac</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.queue.EndPointQueue</span></td><td><code>8038a5636529123d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.queue.MultiChannelQueue</span></td><td><code>bcaac9c224068764</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.queue.MultiEndPointQueue</span></td><td><code>27222a892157733f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.queue.MultiEndPointQueue.1</span></td><td><code>44049b3edc682954</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.hub.queue.QueueInitializer</span></td><td><code>ad18361c23e679b1</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.MultiChoiceAddress</span></td><td><code>91381aa03cdd48e7</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.MultiChoiceAddressSerializer</span></td><td><code>7ffc395650705aaa</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketBlockingUtil</span></td><td><code>c4937b9849ff6540</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketConnectCompletion</span></td><td><code>0da46ac4ccd1c9ce</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketConnection</span></td><td><code>4a6255ae3fb5a6e9</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketConnection.1</span></td><td><code>6bd72dd3a4f955f4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketConnection.SocketInputStream</span></td><td><code>41ab28127ec07333</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketConnection.SocketOutputStream</span></td><td><code>56a19b1a3dd17be0</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketInetAddress</span></td><td><code>20cc3fd7992230e8</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.SocketInetAddress.Serializer</span></td><td><code>d42dd7f644e6367c</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.internal.inet.TcpOutgoingConnector</span></td><td><code>da9b573729b690fd</code></td></tr><tr><td><span class="el_class">org.gradle.internal.remote.services.MessagingServices</span></td><td><code>371e97275eb35dc5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.AbstractCollectionSerializer</span></td><td><code>7897b7a9a0c39b1b</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.AbstractDecoder</span></td><td><code>6f331f65d3691839</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.AbstractEncoder</span></td><td><code>44ea8279ea7b3a07</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.AbstractSerializer</span></td><td><code>d5cd8744f99ef12d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory</span></td><td><code>83d030ef5f6c0526</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.BigDecimalSerializer</span></td><td><code>4dcd516a5e9202d8</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.BigIntegerSerializer</span></td><td><code>50f6ab963a855e2a</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.BooleanSerializer</span></td><td><code>9a343eeb20f2b7f4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.ByteArraySerializer</span></td><td><code>9566e41ef84566ae</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.ByteSerializer</span></td><td><code>85286889be7534cf</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.CharSerializer</span></td><td><code>6fba21fa805857ff</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.DoubleSerializer</span></td><td><code>085b687ded9be124</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.EnumSerializer</span></td><td><code>a314f7118f1d0412</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.FileSerializer</span></td><td><code>c43bc85ad47073ee</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.FloatSerializer</span></td><td><code>dad7a35798e49d9d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.IntegerSerializer</span></td><td><code>e8a55740afa66954</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.LongSerializer</span></td><td><code>3a08a2ef15abca0d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.PathSerializer</span></td><td><code>22894f3c1859ada1</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.ShortSerializer</span></td><td><code>5791e5a0a4ad1ece</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.StringMapSerializer</span></td><td><code>eb348217154fd0ed</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.StringSerializer</span></td><td><code>01576ecfb2720760</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.BaseSerializerFactory.ThrowableSerializer</span></td><td><code>ae463fe767977ceb</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.ClassLoaderObjectInputStream</span></td><td><code>81d9f3a2338180d3</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializer</span></td><td><code>9b7593104d5f803c</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry</span></td><td><code>84449bcf590c1af7</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.1</span></td><td><code>aeba2bb0cd2eab52</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.HierarchySerializerMatcher</span></td><td><code>c4fa93579434fd2b</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.InstanceBasedSerializerFactory</span></td><td><code>4d56c9c7fbddbcc0</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.SerializerClassMatcherStrategy</span></td><td><code>ea36ea8beff22743</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.StrictSerializerMatcher</span></td><td><code>6df6080c06573b93</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.TaggedTypeSerializer</span></td><td><code>264fbb605d976b35</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.DefaultSerializerRegistry.TypeInfo</span></td><td><code>bd6904d4ac5974ce</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.HashCodeSerializer</span></td><td><code>874be2a480b96af8</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.InputStreamBackedDecoder</span></td><td><code>1a43def6f05c6405</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.ListSerializer</span></td><td><code>bad970c0192233e9</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.kryo.KryoBackedDecoder</span></td><td><code>f9287092db21f40c</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.kryo.KryoBackedEncoder</span></td><td><code>e6a2be1dd138a272</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.kryo.TypeSafeSerializer</span></td><td><code>1dbc9e4c69fd1973</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.kryo.TypeSafeSerializer.1</span></td><td><code>bb88df969641a032</code></td></tr><tr><td><span class="el_class">org.gradle.internal.serialize.kryo.TypeSafeSerializer.2</span></td><td><code>599bac595545b9c0</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.AbstractServiceMethod</span></td><td><code>d8f9bf72435aa0d5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceAccessToken</span></td><td><code>552643647739457e</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceMethodFactory</span></td><td><code>7cd5dc9e6187cc39</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry</span></td><td><code>5b91c2e6d1541db9</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.1</span></td><td><code>a5957bd6a7e35017</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.ClassInspector</span></td><td><code>a67f4de9fecf4e9f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.ClassInspector.ClassDetails</span></td><td><code>e14a78fdabafa6a6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.CompositeServiceProvider</span></td><td><code>ad51f0e7303e801d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.ConstructorService</span></td><td><code>c53583a3bbee2329</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.FactoryMethodService</span></td><td><code>c94f704959a77ddb</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.FactoryService</span></td><td><code>5efa06cdad2305e5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.FixedInstanceService</span></td><td><code>adf12b7e82dfb3fd</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.ManagedObjectServiceProvider</span></td><td><code>00ae876b89fa7714</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.OwnServices</span></td><td><code>d7eed1a352f0d8e6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.ParentServices</span></td><td><code>8369f7999f6e2ac7</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.SingletonService</span></td><td><code>d319469c908bc1cf</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.SingletonService.1</span></td><td><code>cdfec069e7d8ab42</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.SingletonService.BindState</span></td><td><code>b653da4aa2ccd9df</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.State</span></td><td><code>76b519b0b74b53cb</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.DefaultServiceRegistry.ThisAsService</span></td><td><code>2eef9987bf419fb4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.InjectUtil</span></td><td><code>4e32c5f95305147b</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.MethodHandleBasedServiceMethod</span></td><td><code>674037aa99129b52</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.MethodHandleBasedServiceMethodFactory</span></td><td><code>47e87df4713e4ce5</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.ReflectionBasedServiceMethod</span></td><td><code>56fdba7d8393253f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.RelevantMethods</span></td><td><code>ebb3efee7040ae62</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.RelevantMethods.RelevantMethodsBuilder</span></td><td><code>653e2ed3e283822f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.ServiceAccess</span></td><td><code>eae993853cb06bb6</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.ServiceAccess.1</span></td><td><code>c3b7931689739967</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.ServiceRegistryBuilder</span></td><td><code>73d1a49b155b6056</code></td></tr><tr><td><span class="el_class">org.gradle.internal.service.TypeStringFormatter</span></td><td><code>8ef195776e72517f</code></td></tr><tr><td><span class="el_class">org.gradle.internal.time.MonotonicClock</span></td><td><code>723fd7c85fffe54b</code></td></tr><tr><td><span class="el_class">org.gradle.internal.time.Time</span></td><td><code>118854647ab7eed4</code></td></tr><tr><td><span class="el_class">org.gradle.internal.time.TimeSource</span></td><td><code>79d456cc39bbde3d</code></td></tr><tr><td><span class="el_class">org.gradle.internal.time.TimeSource.1</span></td><td><code>4be788ff9e4278cd</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.WorkerLoggingSerializer</span></td><td><code>adae78bad8b0e727</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.ActionExecutionWorker</span></td><td><code>a7d30aba9c762788</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.ActionExecutionWorker.1</span></td><td><code>d0eba6bfe3f78d57</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.DefaultWorkerDirectoryProvider</span></td><td><code>10469cccf2e081cb</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker</span></td><td><code>4397743716cfa5f5</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.2</span></td><td><code>701810a4c2fdd0f8</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.ContextImpl</span></td><td><code>c1b75620f1c49583</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.PrintUnrecoverableErrorToFileHandler</span></td><td><code>4c53666c8024a79b</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.WorkerServices</span></td><td><code>b7825f369a8ee808</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.WorkerServices.1</span></td><td><code>69e3f98f4d4b96c1</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.child.WorkerLogEventListener</span></td><td><code>4a0b5fb708591833</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.messaging.WorkerConfig</span></td><td><code>8633f06980fb19fd</code></td></tr><tr><td><span class="el_class">org.gradle.process.internal.worker.messaging.WorkerConfigSerializer</span></td><td><code>b913cc847f396960</code></td></tr><tr><td><span class="el_class">org.gradle.util.internal.ArrayUtils</span></td><td><code>05a97ebb2e812055</code></td></tr><tr><td><span class="el_class">org.gradle.util.internal.CollectionUtils</span></td><td><code>609c55009e4302e6</code></td></tr><tr><td><span class="el_class">org.jcp.xml.dsig.internal.dom.XMLDSigRI</span></td><td><code>9cf392f18b7cd412</code></td></tr><tr><td><span class="el_class">org.jcp.xml.dsig.internal.dom.XMLDSigRI.1</span></td><td><code>d211c6b68bd5276d</code></td></tr><tr><td><span class="el_class">org.jcp.xml.dsig.internal.dom.XMLDSigRI.2</span></td><td><code>d447966a4da69570</code></td></tr><tr><td><span class="el_class">org.jcp.xml.dsig.internal.dom.XMLDSigRI.ProviderService</span></td><td><code>74efb962559a710c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertEquals</span></td><td><code>02e79388fd0ddf18</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertFalse</span></td><td><code>dea6dc33450c92f0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertNotNull</span></td><td><code>34eb9c4ee51b2816</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertSame</span></td><td><code>77061b15f086bbc5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertThrows</span></td><td><code>2e413933639a681e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertionUtils</span></td><td><code>a580a647f9b0d1af</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.Assertions</span></td><td><code>30bb83f461535d85</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator</span></td><td><code>1c70d4d828122f05</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.IndicativeSentences</span></td><td><code>b23b44fe1a1ae4b6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores</span></td><td><code>45af1f815eb3bfc6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.Simple</span></td><td><code>3587fc3bd5ac68a7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.Standard</span></td><td><code>232bffaaa51a0c4e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.TestInstance.Lifecycle</span></td><td><code>235138c6fffd45f1</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>fc311dfabd3a0e23</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext</span></td><td><code>dacb7330135ba8f9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>eb8d03782ab35d64</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.InvocationInterceptor</span></td><td><code>695ac2a6b4b9c7e4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>011031d0b1fe58db</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>9da5fe6b78ad9a14</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>bbee9c72790c271d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>433eec982a6fabbc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>d2270f0957971443</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>6b3fc41ad8b41d4f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor</span></td><td><code>414ee653c9e673cf</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassExtensionContext</span></td><td><code>e804dacaeaef4a6a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassTestDescriptor</span></td><td><code>2f87db51b4485e07</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.DefaultTestInstanceFactoryContext</span></td><td><code>b1b7d61e94c58605</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.DisplayNameUtils</span></td><td><code>8a6f8eeb3e12ddf6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ExtensionUtils</span></td><td><code>43a683ad1b768e92</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>3d2dbddce296b041</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>7146ce9988edfce2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterTestDescriptor</span></td><td><code>67ad750cdb2cb53b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.LifecycleMethodUtils</span></td><td><code>286eb923d0b68032</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor</span></td><td><code>f531f49451e39050</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodExtensionContext</span></td><td><code>b5abe6523f4a32d7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils</span></td><td><code>a247fc379f47df66</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor</span></td><td><code>35334f82ecefa63c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractAnnotatedDescriptorWrapper</span></td><td><code>90b10f2d90d7b01b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>f8eb297929c247eb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>c8e1585f8474ed61</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>1f09fc1c6b9779bb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>e25bb2b197bc8493</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DefaultClassDescriptor</span></td><td><code>9064f3528773a161</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>5dc6be896f50996f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>621c8591e557439a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>7d9864cebac818e1</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>679c52dec5ee3cd2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType</span></td><td><code>2ca704c5264882ae</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.1</span></td><td><code>b3bc3007a7dfdaa0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.2</span></td><td><code>598aec8eeefe85e3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.3</span></td><td><code>e8fd5325e2431a2b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>d746bcff9a71ec26</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>f75dfd9ee2347890</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>909f14a1b9fe84dc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>34690a186bfcf3ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>941a8af0d47a68fd</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>f2039dbd13fce110</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>c13a4260435c18a8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>4be487dee199f633</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConditionEvaluator</span></td><td><code>df91d94b180fe511</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConstructorInvocation</span></td><td><code>60b80968f2bdedc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultExecutableInvoker</span></td><td><code>97f15d1e3151968f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultTestInstances</span></td><td><code>0fc6d90567826bc4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InterceptingExecutableInvoker</span></td><td><code>42cb185ff5e76387</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall</span></td><td><code>7e154d03f7a732e5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain</span></td><td><code>9798b2a812d2015d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain.InterceptedInvocation</span></td><td><code>199eef1acbe0b316</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain.ValidatingInvocation</span></td><td><code>f064b1c2c4a4bf86</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>b48cc2a96dab0116</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>d1557432e23d2776</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>3926323ef1c7fb03</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.MethodInvocation</span></td><td><code>8b8fd00463d994df</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.NamespaceAwareStore</span></td><td><code>00e5ea1337f34969</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ParameterResolutionUtils</span></td><td><code>5aba48e342016f8f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.TestInstancesProvider</span></td><td><code>357bca6226069e7b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>1604b4e34c1363e4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.ExtensionRegistry</span></td><td><code>687649643dbb04fc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>4daca7ba95c88845</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>7a30afad0f944ea5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>7a8413f5c14657c8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory.Scope</span></td><td><code>ad6de5090886dd64</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>3c520f8376f91ff7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>7187071bfc76c6ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutConfiguration</span></td><td><code>44b8593a8e980687</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutDurationParser</span></td><td><code>bb6a412c3829dae9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>13bcdadb20fcc7bb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>e9ee7d4e1adecdd1</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>5200e6adc191344c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>5d1cf7b52cd7a7ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>39fdfe1f67bc0eda</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>c71dcf008235901c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.support.AnnotationSupport</span></td><td><code>4b0c63263b83acb5</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.support.ReflectionSupport</span></td><td><code>db9de9450da5225a</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>efebc064783617e1</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>0d0959e2f6aa173e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>e725a6f058746f53</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassUtils</span></td><td><code>60a2276f3701443f</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>54e3df9bb2092b52</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>d47999c87f911057</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>2c2a6e13cda880d4</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>3d0b05a220d10774</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>349d54e51f2ffb44</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>237c0cb03ac19254</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>e906a774e770e7d4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>6a52e5b4f7292f48</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>cc0aadc5880fb4e4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>c3024068e43bb7f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>693fee5cbd4c2df0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>b74e001541d12dd1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>5ffaaa90df97ca04</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>a787a89e1f12d534</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>ca52e15a278dcf5c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>c505c2274f89f01d</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>a828437d5cd2ea4f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>7628a7c639ef3a60</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>6b1b512d17bb680e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>ad256e9fb4407e04</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>4308af7bfbde4ba1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>f2d36a9ca9d14367</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>6c86362ad62a1954</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>3174b37b3ba53b7e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>7863536f4276f4dd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.MethodSelector</span></td><td><code>3fe9eccb2ba205d2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>b9c965daf4d9a476</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.ClassSource</span></td><td><code>37bd92069360f773</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>8f2f77769ee0e9c9</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.MethodSource</span></td><td><code>1d55ac49f5cabc20</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>dc6114dc7e983729</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>506a6b871d2fd8fe</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>db18f59764ea1f2a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>e7fb3042ea8112f0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>d86618af76b95613</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1904819635770d62</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>e64e4fd796d9641d</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>789c682356298d75</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>1761e56439c8d93c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>ab713bbdee405d17</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>c29acbe41918b09a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>96e95d210b150f97</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>3ac292151741b7fc</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>963cba9b029b4b19</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>5aedd3bd3957b5a6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>5c68850150771b6e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>5aca1404ff0f9294</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>7c2670c7a35cfba6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>f652d8cc5e11bdc5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>abd00dd511d28b2f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>bdf88cd3834282a5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c689092b060d0b12</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>a7ec8f66d373c169</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>2f3b283eba81629f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>2036ec8b92a38105</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>6fd7a27676be3c50</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore</span></td><td><code>f773d297d7dc3275</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.CompositeKey</span></td><td><code>3f8758b273ff41a9</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.EvaluatedValue</span></td><td><code>3362298f87d9b160</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.MemoizingSupplier</span></td><td><code>be04f7b805ba11e1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.StoredValue</span></td><td><code>8e79d12821d1a835</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult</span></td><td><code>44ae55d9c94cdd13</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult.Status</span></td><td><code>c6f73a818e869b3a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener</span></td><td><code>c8e17526e895636b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener.1</span></td><td><code>8959ed22ae756aca</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener</span></td><td><code>fd09754de5a01f16</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener.1</span></td><td><code>44b3640faa83f474</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestExecutionListener</span></td><td><code>f482f6546d6593dc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>2b393a1d76332bc4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>125780e74ba9c50c</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeEngineExecutionListener</span></td><td><code>cea0030887322419</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeTestExecutionListener</span></td><td><code>283b3c281a0728e5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>5706e3938a47edbc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>0bd6690ec3f385ab</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>6fbfe73d83f861ce</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession</span></td><td><code>593c9fadcd439bc2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.1</span></td><td><code>4e7ad5e44df7008e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.ClosedLauncher</span></td><td><code>1fe238faa78c4ee2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingEngineExecutionListener</span></td><td><code>98129d4f91790da1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingLauncher</span></td><td><code>443e4e7cef8118ba</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator</span></td><td><code>9260ad30b5b1dcb4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.Phase</span></td><td><code>c5da52319ffdb6cc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>241befbef6ea2edf</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineExecutionOrchestrator</span></td><td><code>61a7d44fcaf1fd6d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineFilterer</span></td><td><code>5886e10a3932fe3b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineIdValidator</span></td><td><code>a3cbf4111f4706bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>027b702b863a1b7b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.InternalTestPlan</span></td><td><code>6c1da5c749fc1754</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder</span></td><td><code>67fbbac106398c55</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.1</span></td><td><code>c32d4c631876b3d3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.2</span></td><td><code>b3c544910702c338</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>58100dc14c875cb9</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>b0426f929eec8a53</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>443c9d189d7662aa</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.Builder</span></td><td><code>89b3d95a424a68ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider</span></td><td><code>da0ae1240b20de42</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.2</span></td><td><code>481aeb52e3ac15c4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.3</span></td><td><code>2d8e65fa362495e2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>8aa84e8c1156fc9d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryResult</span></td><td><code>6ba764b26de92159</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>7c870cd17431cb9d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherListenerRegistry</span></td><td><code>64d5f2a8ac991f94</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ListenerRegistry</span></td><td><code>387fd40f10f1e6b5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener</span></td><td><code>4c68ad66a29b4dd7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.Outcome</span></td><td><code>b6ca0889820c3cca</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderRegistry</span></td><td><code>2a95faa488a889e7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>69f4349cc7042ed7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener</span></td><td><code>dbf05583a874b58d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>36972afd5e542435</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.UniqueIdTrackingListener</span></td><td><code>f828b9fe46e426f0</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener</span></td><td><code>ee6720edc40a9ccf</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners</span></td><td><code>03063623efb5e8b2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners.LauncherDiscoveryListenerType</span></td><td><code>e18e1a0e62e22287</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.session.LauncherSessionListeners</span></td><td><code>792ecbf10e49d607</code></td></tr><tr><td><span class="el_class">org.slf4j.LoggerFactory</span></td><td><code>a381b7ddf19bf47d</code></td></tr><tr><td><span class="el_class">org.slf4j.bridge.SLF4JBridgeHandler</span></td><td><code>a24ab9068b3f1049</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.NOPLoggerFactory</span></td><td><code>54f5632bfcb8d8d5</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.SubstituteLoggerFactory</span></td><td><code>dc7efc0107a4a62d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.Util</span></td><td><code>857ff3acc0576435</code></td></tr><tr><td><span class="el_class">org.slf4j.impl.StaticLoggerBinder</span></td><td><code>6822bf7129d487fa</code></td></tr><tr><td><span class="el_class">sun.security.ec.SunEC</span></td><td><code>047b876ac98a1133</code></td></tr><tr><td><span class="el_class">sun.security.ec.SunEC.1</span></td><td><code>f831e2713965eef1</code></td></tr><tr><td><span class="el_class">sun.security.ec.SunEC.ProviderService</span></td><td><code>d7855095f52a725d</code></td></tr><tr><td><span class="el_class">sun.security.ec.SunEC.ProviderServiceA</span></td><td><code>84b6e3e9f56e578d</code></td></tr><tr><td><span class="el_class">sun.security.jgss.SunProvider</span></td><td><code>75dc1878c65381a7</code></td></tr><tr><td><span class="el_class">sun.security.jgss.SunProvider.1</span></td><td><code>3c312cdfef3f9db8</code></td></tr><tr><td><span class="el_class">sun.security.jgss.SunProvider.ProviderService</span></td><td><code>e66e7f181e19c4a1</code></td></tr><tr><td><span class="el_class">sun.security.mscapi.SunMSCAPI</span></td><td><code>1f276d31c18118f5</code></td></tr><tr><td><span class="el_class">sun.security.mscapi.SunMSCAPI.1</span></td><td><code>32afbf4ccafd524f</code></td></tr><tr><td><span class="el_class">sun.security.mscapi.SunMSCAPI.2</span></td><td><code>ad65893d6e880a36</code></td></tr><tr><td><span class="el_class">sun.security.mscapi.SunMSCAPI.ProviderService</span></td><td><code>357c0a96b7faf91a</code></td></tr><tr><td><span class="el_class">sun.security.mscapi.SunMSCAPI.ProviderServiceA</span></td><td><code>57e6f67efc1c070b</code></td></tr><tr><td><span class="el_class">sun.security.pkcs11.SunPKCS11</span></td><td><code>8d0c72790971cc7d</code></td></tr><tr><td><span class="el_class">sun.security.pkcs11.SunPKCS11.Descriptor</span></td><td><code>168514eafd23451b</code></td></tr><tr><td><span class="el_class">sun.security.smartcardio.SunPCSC</span></td><td><code>c848528cde3b9a66</code></td></tr><tr><td><span class="el_class">sun.security.smartcardio.SunPCSC.1</span></td><td><code>329160750da2a246</code></td></tr><tr><td><span class="el_class">sun.security.smartcardio.SunPCSC.ProviderService</span></td><td><code>b13e03db329cdd65</code></td></tr><tr><td><span class="el_class">sun.text.resources.cldr.ext.FormatData_de</span></td><td><code>bb786f9842a8e946</code></td></tr><tr><td><span class="el_class">sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo</span></td><td><code>9ed83010eeaa402e</code></td></tr><tr><td><span class="el_class">sun.util.resources.provider.LocaleDataProvider</span></td><td><code>090384bcacb31f21</code></td></tr><tr><td><span class="el_class">worker.org.gradle.api.JavaVersion</span></td><td><code>6444045275aae40b</code></td></tr><tr><td><span class="el_class">worker.org.gradle.api.internal.jvm.JavaVersionParser</span></td><td><code>1206b4dd1a2e9827</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.ClassLoaderSpec</span></td><td><code>cb374b01ccbebc0b</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.ClassLoaderUtils</span></td><td><code>8203100709821636</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.ClassLoaderUtils.AbstractClassLoaderLookuper</span></td><td><code>c285dc94ede87ba6</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.ClassLoaderUtils.Java9PackagesFetcher</span></td><td><code>66503273ab6df058</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.ClassLoaderUtils.LookupClassDefiner</span></td><td><code>101fed03f270a39f</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.FilteringClassLoader</span></td><td><code>60efc1577bff24c0</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.FilteringClassLoader.RetrieveSystemPackagesClassLoader</span></td><td><code>f37f538880fb8032</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.FilteringClassLoader.Spec</span></td><td><code>66254ecaab39094b</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.FilteringClassLoader.Trie</span></td><td><code>d8a5448b9f881d5b</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.FilteringClassLoader.Trie.Builder</span></td><td><code>c8dff2dff6ca0a46</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.classloader.FilteringClassLoader.TrieSet</span></td><td><code>9a9aec377ecda35c</code></td></tr><tr><td><span class="el_class">worker.org.gradle.internal.stream.EncodedStream.EncodedInput</span></td><td><code>9af7c11b2107c234</code></td></tr><tr><td><span class="el_class">worker.org.gradle.process.internal.worker.GradleWorkerMain</span></td><td><code>232767ef46e8d7ca</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
    \ No newline at end of file
    diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html
    deleted file mode 100644
    index 615d6f90..00000000
    --- a/build/reports/problems/problems-report.html
    +++ /dev/null
    @@ -1,663 +0,0 @@
    -<!DOCTYPE html>
    -
    -<html lang="en">
    -<head>
    -    <!-- Required meta tags -->
    -    <meta charset="utf-8">
    -    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    -
    -                    <style type="text/css">
    -                /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
    -html {
    -    line-height: 1.15;
    -    -ms-text-size-adjust: 100%;
    -    -webkit-text-size-adjust: 100%
    -}
    -
    -body {
    -    margin: 0
    -}
    -
    -article, aside, footer, header, nav, section {
    -    display: block
    -}
    -
    -h1 {
    -    font-size: 2em;
    -    margin: .67em 0
    -}
    -
    -figcaption, figure, main {
    -    display: block
    -}
    -
    -figure {
    -    margin: 1em 40px
    -}
    -
    -hr {
    -    box-sizing: content-box;
    -    height: 0;
    -    overflow: visible
    -}
    -
    -pre {
    -    font-family: monospace, monospace;
    -    font-size: 1em
    -}
    -
    -a {
    -    background-color: transparent;
    -    -webkit-text-decoration-skip: objects
    -}
    -
    -abbr[title] {
    -    border-bottom: none;
    -    text-decoration: underline;
    -    text-decoration: underline dotted
    -}
    -
    -b, strong {
    -    font-weight: inherit
    -}
    -
    -b, strong {
    -    font-weight: bolder
    -}
    -
    -code, kbd, samp {
    -    font-family: monospace, monospace;
    -    font-size: 1em
    -}
    -
    -dfn {
    -    font-style: italic
    -}
    -
    -mark {
    -    background-color: #ff0;
    -    color: #000
    -}
    -
    -small {
    -    font-size: 80%
    -}
    -
    -sub, sup {
    -    font-size: 75%;
    -    line-height: 0;
    -    position: relative;
    -    vertical-align: baseline
    -}
    -
    -sub {
    -    bottom: -.25em
    -}
    -
    -sup {
    -    top: -.5em
    -}
    -
    -audio, video {
    -    display: inline-block
    -}
    -
    -audio:not([controls]) {
    -    display: none;
    -    height: 0
    -}
    -
    -img {
    -    border-style: none
    -}
    -
    -svg:not(:root) {
    -    overflow: hidden
    -}
    -
    -button, input, optgroup, select, textarea {
    -    font-family: sans-serif;
    -    font-size: 100%;
    -    line-height: 1.15;
    -    margin: 0
    -}
    -
    -button, input {
    -    overflow: visible
    -}
    -
    -button, select {
    -    text-transform: none
    -}
    -
    -[type=reset], [type=submit], button, html [type=button] {
    -    -webkit-appearance: button
    -}
    -
    -[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner {
    -    border-style: none;
    -    padding: 0
    -}
    -
    -[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring {
    -    outline: 1px dotted ButtonText
    -}
    -
    -fieldset {
    -    padding: .35em .75em .625em
    -}
    -
    -legend {
    -    box-sizing: border-box;
    -    color: inherit;
    -    display: table;
    -    max-width: 100%;
    -    padding: 0;
    -    white-space: normal
    -}
    -
    -progress {
    -    display: inline-block;
    -    vertical-align: baseline
    -}
    -
    -textarea {
    -    overflow: auto
    -}
    -
    -[type=checkbox], [type=radio] {
    -    box-sizing: border-box;
    -    padding: 0
    -}
    -
    -[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button {
    -    height: auto
    -}
    -
    -[type=search] {
    -    -webkit-appearance: textfield;
    -    outline-offset: -2px
    -}
    -
    -[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration {
    -    -webkit-appearance: none
    -}
    -
    -::-webkit-file-upload-button {
    -    -webkit-appearance: button;
    -    font: inherit
    -}
    -
    -details, menu {
    -    display: block
    -}
    -
    -summary {
    -    display: list-item
    -}
    -
    -canvas {
    -    display: inline-block
    -}
    -
    -template {
    -    display: none
    -}
    -
    -[hidden] {
    -    display: none
    -}
    -
    -/* configuration cache styles */
    -
    -.report-wrapper {
    -    margin: 0;
    -    padding: 0 24px;
    -}
    -
    -.gradle-logo {
    -    width: 32px;
    -    height: 24px;
    -    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAGAAAAAA915G0AAAD5klEQVRIDbVWC0xTZxT+emmhVUEeA1/ROh/tFAFFGK7oJisIKsNVoOwBbJPowEWHzikRxeiMRpwwjDWRBHQLIzOmiRhe22BT40TitiyaMBQFfMEeLMIEaSmk+/+rvd7be4no6Elu7n++c/5zzv845/wyOyG4iGyDgzCdNOPLM9W41n4bnmNUiHo5DNsz0hGsmcV6lbkyAOOWXJjrz4qWp1C4o3z/LqzWL4VcJB1FIHmZHn/f78a6pDcxbeIEfNvQiPwTZbDZBpC24zOEaGfDpTsgtZby6u+QlrubFWUY3nh6AH39/ahr/Bn1jZfxW3ML2js60dtvgbtcQVblj8CZM7A0PBSrol6Ft+c4KZ8iTB1nwN0//8IEP9/hA2i924Gir0/iq8oa/NvbJzLiDKiUSqTE6pGVbEBY4BxnsYAPSnwXTa3tLCZ5BF3dPdAkGNHzoFcwcaRMnC4CeZkZiAgKFE252nITC1Pew9Dj5GNEGgS4Rbb5eZ1Te7UXG6FLX4cV6zeh5kIDaDpSunL9Boyf5nLOpwT4Sx+BxWrFK8QAnTAapPRQwofcj86uLoG59cbVEOzA0NAQNh38Atn5RSjY8rFAmc/I3dyQvOx1PsSNVy7Roa3ajHDePbBYLSLn1MaGd5KFAXy07xAOl59C6elK+I73hIHcbGd6wXs8qkyH8FZcjLOI5X/9/TrOnLsAldJDUu4As1NToFFPe3IEpm/M2HigwCFnU6t4Zw6Ck1JhGRhgcXq5juXloKyqFnlHirmz5CaNcEAv59kSE9wVikcB3O78A/MSU0Fznk/H9+yAetJEnPr+B8RFLsLcGS8ia28+qQuX+WrPNNZOV+Nc6VH4+3iz89g0pEaLzRUiQ3LGDWsM8Qidq2WL0PGKKlgf74ZIeQTAfFJ6a44WIsDXh9OW/dPdY58aawC9KK6kpOgolO7JxViVSuBGXnvxksudZ5F0O5yzGYxMJnBOGaau4fnPU2RNAtCFBKFoa7akczaAptY2iWmjB33+yQa4kZwfjpi2ex3Dyf43vuAljWQ/4Btmei1WPj+q45hF4U+1J4fEizCEvNf0EWHoIW244sfzoN1RipaT2kDfdjfv3MNpojdISjmfIheE8Fnp8WR9vJ2Zr+O+bYUmO+kJ9KnIUtf9bnvY2x9wcqrrvnCJvfL8Tw4V9v9LU7PdKzJaoNdy645AR4ph1JMncZHRKrVvYyYY5kmP8iO1v2T3dk6HDtYmrgJtOnwKnaPFrg8z+BBX7QSgEyOPJfX9Qd9DFs40GgTOHbrBs2ch4bXFuEG2mmFkeD9hpUMk+NMXEe0TNtsg/Ly94DVurEAuxfwHC1WiVbe0U7MAAAAASUVORK5CYII=");
    -    background-size: contain;
    -}
    -
    -.header {
    -    display: flex;
    -    flex-wrap: wrap;
    -    position: fixed;
    -    top: 0;
    -    left: 0;
    -    width: 100%;
    -    padding: 24px 24px 0 24px;
    -    background-color: white;
    -    z-index: 1;
    -}
    -
    -.learn-more {
    -    margin-left: auto;
    -    align-self: center;
    -    font-size: 0.875rem;
    -    font-weight: normal;
    -}
    -
    -.title {
    -    display: flex;
    -    align-items: center;
    -    padding: 18px 0 24px 0;
    -    flex: 1 0 100%;
    -}
    -
    -.content {
    -    font-size: 0.875rem;
    -    padding: 240px 0 48px;
    -    overflow-x: auto;
    -    white-space: nowrap;
    -}
    -
    -.content ol:first-of-type {
    -    margin: 0;
    -}
    -
    -.tree-btn {
    -    cursor: pointer;
    -    display: inline-block;
    -    width: 16px;
    -    height: 16px;
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-top: -0.2em;
    -}
    -
    -.tree-btn.collapsed {
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M166.9 264.5l-117.8 116c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L127.3 256 25.1 155.6c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l117.8 116c4.6 4.7 4.6 12.3-.1 17z" fill="%23999999" stroke="%23999999"/></svg>');
    -}
    -
    -.tree-btn.expanded {
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><path d="M119.5 326.9L3.5 209.1c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0L128 287.3l100.4-102.2c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L136.5 327c-4.7 4.6-12.3 4.6-17-.1z" fill="%23999999" stroke="%23999999"/></svg>');
    -}
    -
    -ul .tree-btn {
    -    margin-right: 3px;
    -}
    -
    -.leaf-icon {
    -    display: inline-block;
    -    width: 16px;
    -    height: 16px;
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><path d="M32 256 H224" stroke="%23999999" stroke-width="48" stroke-linecap="round"/></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-top: -0.2em;
    -}
    -
    -.invisible-text {
    -    user-select: all; /* Allow the text to be selectable */
    -    color: transparent; /* Hide the text */
    -    text-indent: -9999px; /* Move the text out of view */
    -    position: relative;
    -    white-space: pre; /* Preserve meaningful whitespace in the invisible text for copying */
    -}
    -
    -.text-for-copy {
    -    display: inline-block;
    -}
    -
    -.enum-icon {
    -    display: inline-block;
    -    width: 16px;
    -    height: 16px;
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><circle cx="512" cy="512" r="200" /></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-inline-start: 0.5ex;
    -    margin-inline-end: 0.5ex;
    -    margin-top: -0.2em;
    -}
    -
    -.error-icon {
    -    display: inline-block;
    -    width: 16px;
    -    height: 16px;
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M193.94 256L296.5 153.44l21.15-21.15c3.12-3.12 3.12-8.19 0-11.31l-22.63-22.63c-3.12-3.12-8.19-3.12-11.31 0L160 222.06 36.29 98.34c-3.12-3.12-8.19-3.12-11.31 0L2.34 120.97c-3.12 3.12-3.12 8.19 0 11.31L126.06 256 2.34 379.71c-3.12 3.12-3.12 8.19 0 11.31l22.63 22.63c3.12 3.12 8.19 3.12 11.31 0L160 289.94 262.56 392.5l21.15 21.15c3.12 3.12 8.19 3.12 11.31 0l22.63-22.63c3.12-3.12 3.12-8.19 0-11.31L193.94 256z" fill="%23FC461E" stroke="%23FC461E"/></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-inline-start: 0.5ex;
    -    margin-inline-end: 0.5ex;
    -    margin-top: -0.2em;
    -}
    -
    -.advice-icon {
    -    display: inline-block;
    -    width: 16px;
    -    height: 16px;
    -    background-image: url('data:image/svg+xml;utf8,<svg width="800px" height="800px" viewBox="-4.93 0 122.88 122.88" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"  style="enable-background:new 0 0 113.01 122.88" xml:space="preserve"><g><path d="M44.13,102.06c-1.14,0.03-2.14-0.81-2.3-1.96c-0.17-1.2,0.64-2.31,1.82-2.54c-1.3-7.37-4.85-11.43-8.6-15.72 c-2.92-3.34-5.95-6.81-8.34-11.92c-2.35-5.03-3.64-10.23-3.6-15.63c0.05-5.4,1.42-10.96,4.4-16.71c0.02-0.04,0.04-0.07,0.06-0.11 l0,0c3.91-6.62,9.38-11.04,15.47-13.52c5.11-2.09,10.66-2.8,16.1-2.3c5.42,0.5,10.73,2.2,15.37,4.94 c5.9,3.49,10.75,8.67,13.42,15.21c1.44,3.54,2.42,7.49,2.54,11.82c0.12,4.31-0.62,8.96-2.61,13.88 c-2.66,6.59-6.18,10.68-9.47,14.51c-3.03,3.53-5.85,6.81-7.42,11.84c0.89,0.21,1.59,0.94,1.73,1.9c0.17,1.24-0.7,2.39-1.94,2.56 l-0.77,0.11c-0.14,1.09-0.23,2.26-0.27,3.51l0.25-0.04c1.24-0.17,2.39,0.7,2.56,1.94c0.17,1.24-0.7,2.39-1.94,2.56l-0.78,0.11 c0.01,0.15,0.02,0.3,0.03,0.45l0,0c0.07,0.88,0.08,1.73,0.03,2.54l0.13-0.02c1.25-0.15,2.38,0.74,2.54,1.98 c0.15,1.25-0.74,2.38-1.98,2.54l-1.68,0.21c-1.2,3.11-3.34,5.48-5.87,6.94c-1.74,1.01-3.67,1.59-5.61,1.71 c-1.97,0.12-3.96-0.25-5.78-1.13c-2.08-1.02-3.94-2.71-5.29-5.14c-0.65-0.33-1.13-0.97-1.23-1.75c-0.04-0.31-0.01-0.61,0.07-0.89 c-0.39-1.16-0.68-2.43-0.87-3.83l-0.07,0.01c-1.24,0.17-2.39-0.7-2.56-1.94c-0.17-1.24,0.7-2.39,1.94-2.56l0.54-0.08 C44.19,104.32,44.18,103.16,44.13,102.06L44.13,102.06z M2.18,58.86C1.01,58.89,0.04,57.98,0,56.81c-0.04-1.17,0.88-2.14,2.05-2.18 l8.7-0.3c1.17-0.04,2.14,0.88,2.18,2.05c0.04,1.17-0.88,2.14-2.05,2.18L2.18,58.86L2.18,58.86z M110.68,50.25 c1.16-0.12,2.2,0.73,2.32,1.89c0.12,1.16-0.73,2.2-1.89,2.32l-8.66,0.91c-1.16,0.12-2.2-0.73-2.32-1.89 c-0.12-1.16,0.73-2.2,1.89-2.32L110.68,50.25L110.68,50.25z M94.91,14.78c0.65-0.97,1.96-1.23,2.93-0.58 c0.97,0.65,1.23,1.96,0.58,2.93l-4.84,7.24c-0.65,0.97-1.96,1.23-2.93,0.58c-0.97-0.65-1.23-1.96-0.58-2.93L94.91,14.78 L94.91,14.78z M57.63,2.06c0.03-1.17,1-2.09,2.16-2.06c1.17,0.03,2.09,1,2.06,2.16l-0.22,8.7c-0.03,1.17-1,2.09-2.16,2.06 c-1.17-0.03-2.09-1-2.06-2.16L57.63,2.06L57.63,2.06z M13.88,15.53c-0.86-0.8-0.9-2.14-0.11-2.99c0.8-0.86,2.14-0.9,2.99-0.11 l6.37,5.94c0.86,0.8,0.9,2.14,0.11,2.99c-0.8,0.86-2.14,0.9-2.99,0.11L13.88,15.53L13.88,15.53z M47.88,96.95l18.49-2.63 c1.59-6.7,5.05-10.73,8.8-15.08c3.08-3.58,6.36-7.4,8.76-13.34c1.76-4.35,2.41-8.43,2.31-12.19c-0.1-3.75-0.96-7.21-2.24-10.34 c-2.3-5.63-6.51-10.11-11.65-13.15c-4.11-2.43-8.8-3.94-13.59-4.37c-4.77-0.44-9.64,0.19-14.13,2.02 c-5.26,2.15-9.99,5.97-13.39,11.72c-2.64,5.12-3.86,10.02-3.9,14.73c-0.04,4.74,1.11,9.33,3.2,13.8c2.13,4.56,4.97,7.8,7.69,10.92 C42.47,83.9,46.48,88.49,47.88,96.95L47.88,96.95z M65.62,99.02l-17.27,2.45c0.05,1.1,0.07,2.25,0.05,3.47l17.05-2.42 C65.47,101.29,65.52,100.12,65.62,99.02L65.62,99.02z M48.49,109.52c0.12,0.92,0.3,1.76,0.53,2.54l16.55-2.04 c0.11-0.86,0.13-1.77,0.05-2.74l0,0l0-0.02l-0.01-0.17L48.49,109.52L48.49,109.52z M51.37,116.36c0.64,0.67,1.35,1.19,2.1,1.55 c1.15,0.56,2.42,0.79,3.67,0.72c1.29-0.08,2.57-0.47,3.74-1.15c1.1-0.64,2.09-1.53,2.88-2.65L51.37,116.36L51.37,116.36z"/></g></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-inline-start: 0.5ex;
    -    margin-inline-end: 0.5ex;
    -    margin-top: -0.2em;
    -}
    -
    -.warning-icon {
    -    display: inline-block;
    -    width: 13px;
    -    height: 13px;
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M270.2 160h35.5c3.4 0 6.1 2.8 6 6.2l-7.5 196c-.1 3.2-2.8 5.8-6 5.8h-20.5c-3.2 0-5.9-2.5-6-5.8l-7.5-196c-.1-3.4 2.6-6.2 6-6.2zM288 388c-15.5 0-28 12.5-28 28s12.5 28 28 28 28-12.5 28-28-12.5-28-28-28zm281.5 52L329.6 24c-18.4-32-64.7-32-83.2 0L6.5 440c-18.4 31.9 4.6 72 41.6 72H528c36.8 0 60-40 41.5-72zM528 480H48c-12.3 0-20-13.3-13.9-24l240-416c6.1-10.6 21.6-10.7 27.7 0l240 416c6.2 10.6-1.5 24-13.8 24z" fill="%23DEAD22" stroke="%23DEAD22"/></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-inline-start: 0.3ex;
    -    margin-inline-end: 1.1ex;
    -    margin-top: -0.1em;
    -}
    -
    -.documentation-button {
    -    cursor: pointer;
    -    display: inline-block;
    -    width: 13px;
    -    height: 13px;
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 340c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28zm7.67-24h-16c-6.627 0-12-5.373-12-12v-.381c0-70.343 77.44-63.619 77.44-107.408 0-20.016-17.761-40.211-57.44-40.211-29.144 0-44.265 9.649-59.211 28.692-3.908 4.98-11.054 5.995-16.248 2.376l-13.134-9.15c-5.625-3.919-6.86-11.771-2.645-17.177C185.658 133.514 210.842 116 255.67 116c52.32 0 97.44 29.751 97.44 80.211 0 67.414-77.44 63.849-77.44 107.408V304c0 6.627-5.373 12-12 12zM256 40c118.621 0 216 96.075 216 216 0 119.291-96.61 216-216 216-119.244 0-216-96.562-216-216 0-119.203 96.602-216 216-216m0-32C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8z" fill="%23999999" stroke="%23999999"/></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-inline-start: 0.5ex;
    -    margin-inline-end: 0.5ex;
    -    margin-top: -0.2em;
    -}
    -
    -.documentation-button::selection {
    -    color: transparent;
    -}
    -
    -.documentation-button:hover {
    -    color: transparent;
    -}
    -
    -.copy-button {
    -    cursor: pointer;
    -    display: inline-block;
    -    width: 12px;
    -    height: 12px;
    -    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M433.941 193.941l-51.882-51.882A48 48 0 0 0 348.118 128H320V80c0-26.51-21.49-48-48-48h-66.752C198.643 13.377 180.858 0 160 0s-38.643 13.377-45.248 32H48C21.49 32 0 53.49 0 80v288c0 26.51 21.49 48 48 48h80v48c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V227.882a48 48 0 0 0-14.059-33.941zm-22.627 22.627a15.888 15.888 0 0 1 4.195 7.432H352v-63.509a15.88 15.88 0 0 1 7.431 4.195l51.883 51.882zM160 30c9.941 0 18 8.059 18 18s-8.059 18-18 18-18-8.059-18-18 8.059-18 18-18zM48 384c-8.822 0-16-7.178-16-16V80c0-8.822 7.178-16 16-16h66.752c6.605 18.623 24.389 32 45.248 32s38.643-13.377 45.248-32H272c8.822 0 16 7.178 16 16v48H176c-26.51 0-48 21.49-48 48v208H48zm352 96H176c-8.822 0-16-7.178-16-16V176c0-8.822 7.178-16 16-16h144v72c0 13.2 10.8 24 24 24h72v208c0 8.822-7.178 16-16 16z" fill="%23999999" stroke="%23999999"/></svg>');
    -    background-size: contain;
    -    background-repeat: no-repeat;
    -    vertical-align: middle;
    -    margin-inline-start: 0.5ex;
    -    margin-top: -0.2em;
    -}
    -
    -.groups{
    -    display: flex;
    -    border-bottom: 1px solid #EDEEEF;
    -    flex: 1 0 100%;
    -}
    -
    -.uncategorized {
    -    display: flex;
    -    border-top: 4px solid #EDEEEF;
    -    flex: 1 0 100%;
    -}
    -
    -.group-selector {
    -    padding: 0 52px 24px 0;
    -    font-size: 0.9rem;
    -    font-weight: bold;
    -    color: #999999;
    -    cursor: pointer;
    -}
    -
    -.group-selector__count {
    -    margin: 0 8px;
    -    border-radius: 8px;
    -    background-color: #999;
    -    color: #fff;
    -    padding: 1px 8px 2px;
    -    font-size: 0.75rem;
    -}
    -
    -.group-selector--active {
    -    color: #02303A;
    -    cursor: auto;
    -}
    -
    -.group-selector--active .group-selector__count {
    -    background-color: #686868;
    -}
    -
    -.group-selector--disabled {
    -    cursor: not-allowed;
    -}
    -
    -.accordion-header {
    -    cursor: pointer;
    -}
    -
    -.container {
    -    padding-left: 0.5em;
    -    padding-right: 0.5em;
    -}
    -
    -.stacktrace {
    -    border-radius: 4px;
    -    overflow-x: auto;
    -    padding: 0.5rem;
    -    margin-bottom: 0;
    -    min-width: 1000px;
    -}
    -
    -/* Lato (bold, regular) */
    -@font-face {
    -    font-display: swap;
    -    font-family: Lato;
    -    font-weight: 500;
    -    font-style: normal;
    -    src: url("https://assets.gradle.com/lato/fonts/lato-semibold/lato-semibold.woff2") format("woff2"),
    -    url("https://assets.gradle.com/lato/fonts/lato-semibold/lato-semibold.woff") format("woff");
    -}
    -
    -@font-face {
    -    font-display: swap;
    -    font-family: Lato;
    -    font-weight: bold;
    -    font-style: normal;
    -    src: url("https://assets.gradle.com/lato/fonts/lato-bold/lato-bold.woff2") format("woff2"),
    -    url("https://assets.gradle.com/lato/fonts/lato-bold/lato-bold.woff") format("woff");
    -}
    -
    -* {
    -    -webkit-box-sizing: border-box;
    -    -moz-box-sizing: border-box;
    -    box-sizing: border-box;
    -}
    -
    -html,
    -body {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -html {
    -    font-family: "Lato", "Helvetica Neue", Arial, sans-serif;
    -    font-size: 16px;
    -    font-weight: 400;
    -    line-height: 1.5;
    -}
    -
    -body {
    -    color: #02303A;
    -    background-color: #ffffff;
    -    -webkit-text-size-adjust: 100%;
    -    -ms-text-size-adjust: 100%;
    -    -webkit-font-smoothing: antialiased;
    -}
    -
    -
    -/* typography */
    -h1, h2, h3, h4, h5, h6 {
    -    color: #02303A;
    -    text-rendering: optimizeLegibility;
    -    margin: 0;
    -}
    -
    -h1 {
    -    font-size: 1rem;
    -}
    -
    -h2 {
    -    font-size: 0.9rem;
    -}
    -
    -h3 {
    -    font-size: 1.125rem;
    -}
    -
    -h4, h5, h6 {
    -    font-size: 0.875rem;
    -}
    -
    -h1 code {
    -    font-weight: bold;
    -}
    -
    -ul, ol, dl {
    -    list-style-position: outside;
    -    line-height: 1.6;
    -    padding: 0;
    -    margin: 0 0 0 20px;
    -    list-style-type: none;
    -}
    -
    -li {
    -    line-height: 2;
    -}
    -
    -a {
    -    color: #1DA2BD;
    -    text-decoration: none;
    -    transition: all 0.3s ease, visibility 0s;
    -}
    -
    -a:hover {
    -    color: #35c1e4;
    -}
    -
    -/* code */
    -code, pre {
    -    font-family: Inconsolata, Monaco, "Courier New", monospace;
    -    font-style: normal;
    -    font-variant-ligatures: normal;
    -    font-variant-caps: normal;
    -    font-variant-numeric: normal;
    -    font-variant-east-asian: normal;
    -    font-weight: normal;
    -    font-stretch: normal;
    -    color: #686868;
    -}
    -
    -*:not(pre) > code {
    -    letter-spacing: 0;
    -    padding: 0.1em 0.5ex;
    -    text-rendering: optimizeSpeed;
    -    word-spacing: -0.15em;
    -    word-wrap: break-word;
    -}
    -
    -pre {
    -    font-size: 0.75rem;
    -    line-height: 1.8;
    -    margin-top: 0;
    -    margin-bottom: 1.5em;
    -    padding: 1rem;
    -}
    -
    -pre code {
    -    background-color: transparent;
    -    color: inherit;
    -    line-height: 1.8;
    -    font-size: 100%;
    -    padding: 0;
    -}
    -
    -a code {
    -    color: #1BA8CB;
    -}
    -
    -pre.code, pre.programlisting, pre.screen, pre.tt {
    -    background-color: #f7f7f8;
    -    border-radius: 4px;
    -    font-size: 1em;
    -    line-height: 1.45;
    -    margin-bottom: 1.25em;
    -    overflow-x: auto;
    -    padding: 1rem;
    -}
    -
    -li em, p em {
    -    padding: 0 1px;
    -}
    -
    -code em, tt em {
    -    text-decoration: none;
    -}
    -
    -code + .copy-button {
    -    margin-inline-start: 0.2ex;
    -}
    -
    -.java-exception {
    -    font-size: 0.75rem;
    -    padding-left: 24px;
    -}
    -
    -.java-exception ul {
    -    margin: 0;
    -    line-height: inherit;
    -}
    -
    -.java-exception code {
    -    white-space: pre;
    -}
    -
    -.java-exception-part-toggle {
    -    user-select: none;
    -    cursor: pointer;
    -    border-radius: 2px;
    -    padding: 0.1em 0.2em;
    -    background: azure;
    -    color: #686868;
    -}
    -
    -                </style>
    -    <!-- Inconsolata is used as a default monospace font in the report. -->
    -    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inconsolata:400,700" />
    -
    -    <title>Gradle Configuration Cache</title>
    -</head>
    -<body>
    -
    -<div id="playground"></div>
    -
    -<div class="report" id="report">
    -    Loading...
    -</div>
    -
    -<script type="text/javascript">
    -function configurationCacheProblems() { return (
    -// begin-report-data
    -{"diagnostics":[{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('exceptionFormat = <value>') instead."}]]}],"problemsReport":{"totalProblemCount":1,"buildName":"Template","requestedTasks":"jacocoTestReport","documentationLink":"https://docs.gradle.org/8.14/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}}
    -// end-report-data
    -);}
    -</script>
    -                <script type="text/javascript">
    -                !function(n,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["configuration-cache-report"]=t():n["configuration-cache-report"]=t()}(this,(()=>(({70:function(){void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(n){return null!=n&&null!=n.__proto__&&n.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===Math.imul&&(Math.imul=function(n,t){return(4294901760&n)*(65535&t)+(65535&n)*(0|t)|0}),this["configuration-cache-report"]=function(n){"use strict";var t,r,i,e,u,o,f,s,c,a,h,l,_,v,d,g,w,b,p,m,k,q,y,B,C,x,j,P,I,S,z,T,E,L,N,A,M,F,D,O,R,H,$,G,U,V,Q,Z,Y,W,K,X,J,nn,tn,rn,en,un,on,fn,sn,cn,an,hn,ln,_n,vn,dn,gn,wn,bn,pn,mn,kn,qn,yn,Bn,Cn,xn,jn,Pn,In,Sn,zn,Tn,En,Ln,Nn,An,Mn=Math.imul,Fn=ArrayBuffer.isView;function Dn(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));return function(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Ct();if(t>=n.length)return function(n){switch(n.length){case 0:return Ct();case 1:return qr(n[0]);default:return function(n){return Hr(function(n){return new It(n,!1)}(n))}(n)}}(n);if(1===t)return qr(n[0]);var r=0,i=Rr(),e=0,u=n.length;n:for(;e<u;){var o=n[e];if(e=e+1|0,i.d(o),(r=r+1|0)===t)break n}return i}(n,rt(n.length-t|0,0))}function On(n,t,r,i,e,u,o){return t=t===A?", ":t,r=r===A?"":r,i=i===A?"":i,e=e===A?-1:e,u=u===A?"...":u,o=o===A?null:o,function(n,t,r,i,e,u,o,f){r=r===A?", ":r,i=i===A?"":i,e=e===A?"":e,u=u===A?-1:u,o=o===A?"...":o,f=f===A?null:f,t.e(i);var s=0,c=0,a=n.length;n:for(;c<a;){var h=n[c];if(c=c+1|0,(s=s+1|0)>1&&t.e(r),!(u<0||s<=u))break n;Jt(t,h,f)}return u>=0&&s>u&&t.e(o),t.e(e),t}(n,Bi(),t,r,i,e,u,o).toString()}function Rn(n){return n.length-1|0}function Hn(n,t){if(null==t){var r=0,i=n.length-1|0;if(r<=i)do{var e=r;if(r=r+1|0,null==n[e])return e}while(r<=i)}else{var u=0,o=n.length-1|0;if(u<=o)do{var f=u;if(u=u+1|0,le(t,n[f]))return f}while(u<=o)}return-1}function $n(n,t,r,i,e,u,o){return t=t===A?", ":t,r=r===A?"":r,i=i===A?"":i,e=e===A?-1:e,u=u===A?"...":u,o=o===A?null:o,Gn(n,Bi(),t,r,i,e,u,o).toString()}function Gn(n,t,r,i,e,u,o,f){r=r===A?", ":r,i=i===A?"":i,e=e===A?"":e,u=u===A?-1:u,o=o===A?"...":o,f=f===A?null:f,t.e(i);var s=0,c=n.f();n:for(;c.g();){var a=c.h();if((s=s+1|0)>1&&t.e(r),!(u<0||s<=u))break n;Jt(t,a,f)}return u>=0&&s>u&&t.e(o),t.e(e),t}function Un(n){if(n.i())throw xu("List is empty.");return n.j(0)}function Vn(n){return new tt(n)}function Qn(n){if(Ke(n,Di)){var t;switch(n.k()){case 0:t=Ct();break;case 1:t=qr(Ke(n,Fi)?n.j(0):n.f().h());break;default:t=Zn(n)}return t}return xt(Xn(n))}function Zn(n){return Hr(n)}function Yn(n){if(Ke(n,Di)&&n.k()<=1)return Qn(n);var t=Xn(n);return function(n){var t=(n.k()/2|0)-1|0;if(t<0)return br();var r=jt(n),i=0;if(i<=t)do{var e=i;i=i+1|0;var u=n.j(e);n.f4(e,n.j(r)),n.f4(r,u),r=r-1|0}while(e!==t)}(t),t}function Wn(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));return function(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Ct();if(Ke(n,Di)){if(t>=n.k())return Qn(n);if(1===t)return qr(function(n){if(Ke(n,Fi))return Un(n);var t=n.f();if(!t.g())throw xu("Collection is empty.");return t.h()}(n))}var r=0,i=Rr(),e=n.f();n:for(;e.g();){var u=e.h();if(i.d(u),(r=r+1|0)===t)break n}return xt(i)}(n,rt(n.k()-t|0,0))}function Kn(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Ct();var r=n.k();if(t>=r)return Qn(n);if(1===t)return qr(Jn(n));var i=Rr();if(Ke(n,bi)){var e=r-t|0;if(e<r)do{var u=e;e=e+1|0,i.d(n.j(u))}while(e<r)}else for(var o=n.l(r-t|0);o.g();){var f=o.h();i.d(f)}return i}function Xn(n){return Ke(n,Di)?Zn(n):nt(n,Or())}function Jn(n){if(n.i())throw xu("List is empty.");return n.j(jt(n))}function nt(n,t){for(var r=n.f();r.g();){var i=r.h();t.d(i)}return t}function tt(n){this.n_1=n}function rt(n,t){return n<t?t:n}function it(n,t){return n>t?t:n}function et(n,t){return Kt().q(n,t,-1)}function ut(n,t){return new Ft(n,t)}function ot(n){var t=n.f();if(!t.g())return Ct();var r=t.h();if(!t.g())return qr(r);var i=Or();for(i.d(r);t.g();)i.d(t.h());return i}function ft(n){this.r_1=n}function st(n,t){this.s_1=n,this.t_1=t}function ct(){}function at(n){this.x_1=n,this.w_1=0}function ht(n,t){this.a1_1=n,at.call(this,n),_t().b1(t,this.a1_1.k()),this.w_1=t}function lt(){t=this}function _t(){return null==t&&new lt,t}function vt(){_t(),ct.call(this)}function dt(n){this.h1_1=n}function gt(n,t){return t===n?"(this Map)":Vi(t)}function wt(n,t){var r;n:{for(var i=n.o().f();i.g();){var e=i.h();if(le(e.j1(),t)){r=e;break n}}r=null}return r}function bt(){r=this}function pt(){return null==r&&new bt,r}function mt(n){this.q1_1=n,ct.call(this)}function kt(){pt(),this.n1_1=null,this.o1_1=null}function qt(){i=this}function yt(){return null==i&&new qt,i}function Bt(n){return n.length>0?ou(n):Ct()}function Ct(){return null==e&&new Pt,e}function xt(n){switch(n.k()){case 0:return Ct();case 1:return qr(n.j(0));default:return n}}function jt(n){return n.k()-1|0}function Pt(){e=this,this.z1_1=new ke(-1478467534,-1720727600)}function It(n,t){this.b2_1=n,this.c2_1=t}function St(){u=this}function zt(){return null==u&&new St,u}function Tt(n,t){return Ke(n,Di)?n.k():t}function Et(n,t){if(Ke(t,Di))return n.m(t);for(var r=!1,i=t.f();i.g();){var e=i.h();n.d(e)&&(r=!0)}return r}function Lt(){}function Nt(n,t){this.h2_1=n,this.g2_1=n.i2_1.l(function(n,t){if(!(0<=t&&t<=n.k()))throw du("Position index "+t+" must be in range ["+Ve(0,n.k())+"].");return n.k()-t|0}(n,t))}function At(n){vt.call(this),this.i2_1=n}function Mt(n){this.k2_1=n,this.j2_1=n.l2_1.f()}function Ft(n,t){this.l2_1=n,this.m2_1=t}function Dt(n){for(;n.n2_1.g();){var t=n.n2_1.h();if(n.q2_1.t2_1(t)===n.q2_1.s2_1)return n.p2_1=t,n.o2_1=1,br()}n.o2_1=0}function Ot(n){this.q2_1=n,this.n2_1=n.r2_1.f(),this.o2_1=-1,this.p2_1=null}function Rt(n,t,r){t=t===A||t,this.r2_1=n,this.s2_1=t,this.t2_1=r}function Ht(){return null==o&&new $t,o}function $t(){o=this,this.u2_1=new ke(1993859828,793161749)}function Gt(n,t,r){return Ut(Ut(n,r)-Ut(t,r)|0,r)}function Ut(n,t){var r=n%t|0;return r>=0?r:r+t|0}function Vt(){f=this,this.p_1=new Zt(1,0)}function Qt(){return null==f&&new Vt,f}function Zt(n,t){Qt(),Xt.call(this,n,t,1)}function Yt(n,t,r){Lt.call(this),this.d3_1=r,this.e3_1=t,this.f3_1=this.d3_1>0?n<=t:n>=t,this.g3_1=this.f3_1?n:this.e3_1}function Wt(){s=this}function Kt(){return null==s&&new Wt,s}function Xt(n,t,r){if(Kt(),0===r)throw _u("Step must be non-zero.");if(r===mr().MIN_VALUE)throw _u("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.z2_1=n,this.a3_1=function(n,t,r){var i;if(r>0)i=n>=t?t:t-Gt(t,n,r)|0;else{if(!(r<0))throw _u("Step is zero.");i=n<=t?t:t+Gt(n,t,0|-r)|0}return i}(n,t,r),this.b3_1=r}function Jt(n,t,r){null!=r?n.e(r(t)):null==t||nu(t)?n.e(t):t instanceof Mi?n.i3(t.h3_1):n.e(Vi(t))}function nr(n,t,r){if(n===t)return!0;if(!(r=r!==A&&r))return!1;var i=xi(n),e=xi(t);return i===e||le(new Mi(ne(Li(i).toLowerCase(),0)),new Mi(ne(Li(e).toLowerCase(),0)))}function tr(n){return re(n)-1|0}function rr(n,t,r,i){return r=r===A?0:r,(i=i!==A&&i)||"string"!=typeof n?ir(n,t,r,re(n),i):n.indexOf(t,r)}function ir(n,t,r,i,e,u){var o=(u=u!==A&&u)?et(it(r,tr(n)),rt(i,0)):Ve(rt(r,0),it(i,re(n)));if("string"==typeof n&&"string"==typeof t){var f=o.z2_1,s=o.a3_1,c=o.b3_1;if(c>0&&f<=s||c<0&&s<=f)do{var a=f;if(f=f+c|0,Ti(t,0,n,a,re(t),e))return a}while(a!==s)}else{var h=o.z2_1,l=o.a3_1,_=o.b3_1;if(_>0&&h<=l||_<0&&l<=h)do{var v=h;if(h=h+_|0,fr(t,0,n,v,re(t),e))return v}while(v!==l)}return-1}function er(n){var t=0,r=re(n)-1|0,i=!1;n:for(;t<=r;){var e=ji(ne(n,i?r:t));if(i){if(!e)break n;r=r-1|0}else e?t=t+1|0:i=!0}return ie(n,t,r+1|0)}function ur(n,t){return ce(ie(n,t.y2(),t.c3()+1|0))}function or(n,t,r,i,e){r=r===A?0:r,i=i!==A&&i,sr(e=e===A?0:e);var u,o,f=ou(t);return new hr(n,r,e,(u=f,o=i,function(n,t){var r=function(n,t,r,i){if(!i&&1===t.k()){var e=function(n){if(Ke(n,Fi))return function(n){var t;switch(n.k()){case 0:throw xu("List is empty.");case 1:t=n.j(0);break;default:throw _u("List has more than one element.")}return t}(n);var t=n.f();if(!t.g())throw xu("Collection is empty.");var r=t.h();if(t.g())throw _u("Collection has more than one element.");return r}(t),u=rr(n,e,r);return u<0?null:_r(u,e)}var o=Ve(rt(r,0),re(n));if("string"==typeof n){var f=o.z2_1,s=o.a3_1,c=o.b3_1;if(c>0&&f<=s||c<0&&s<=f)do{var a,h=f;f=f+c|0;n:{for(var l=t.f();l.g();){var _=l.h();if(Ti(_,0,n,h,_.length,i)){a=_;break n}}a=null}if(null!=a)return _r(h,a)}while(h!==s)}else{var v=o.z2_1,d=o.a3_1,g=o.b3_1;if(g>0&&v<=d||g<0&&d<=v)do{var w,b=v;v=v+g|0;n:{for(var p=t.f();p.g();){var m=p.h();if(fr(m,0,n,b,m.length,i)){w=m;break n}}w=null}if(null!=w)return _r(b,w)}while(b!==d)}return null}(n,u,t,o);return null==r?null:_r(r.t3_1,r.u3_1.length)}))}function fr(n,t,r,i,e,u){if(i<0||t<0||t>(re(n)-e|0)||i>(re(r)-e|0))return!1;var o=0;if(o<e)do{var f=o;if(o=o+1|0,!nr(ne(n,t+f|0),ne(r,i+f|0),u))return!1}while(o<e);return!0}function sr(n){if(!(n>=0))throw _u(ce("Limit must be non-negative, but was "+n))}function cr(n){if(n.l3_1<0)n.j3_1=0,n.m3_1=null;else{var t;if(n.o3_1.r3_1>0?(n.n3_1=n.n3_1+1|0,t=n.n3_1>=n.o3_1.r3_1):t=!1,t||n.l3_1>re(n.o3_1.p3_1))n.m3_1=Ve(n.k3_1,tr(n.o3_1.p3_1)),n.l3_1=-1;else{var r=n.o3_1.s3_1(n.o3_1.p3_1,n.l3_1);if(null==r)n.m3_1=Ve(n.k3_1,tr(n.o3_1.p3_1)),n.l3_1=-1;else{var i=r.v3(),e=r.w3();n.m3_1=function(n,t){return t<=mr().MIN_VALUE?Qt().p_1:Ve(n,t-1|0)}(n.k3_1,i),n.k3_1=i+e|0,n.l3_1=n.k3_1+(0===e?1:0)|0}}n.j3_1=1}}function ar(n){this.o3_1=n,this.j3_1=-1,this.k3_1=function(n,t,r){if(0>r)throw _u("Cannot coerce value to an empty range: maximum "+r+" is less than minimum 0.");return n<0?0:n>r?r:n}(n.q3_1,0,re(n.p3_1)),this.l3_1=this.k3_1,this.m3_1=null,this.n3_1=0}function hr(n,t,r,i){this.p3_1=n,this.q3_1=t,this.r3_1=r,this.s3_1=i}function lr(n,t){this.t3_1=n,this.u3_1=t}function _r(n,t){return new lr(n,t)}function vr(){}function dr(){}function gr(){}function wr(){c=this}function br(){return null==c&&new wr,c}function pr(){a=this,this.MIN_VALUE=-2147483648,this.MAX_VALUE=2147483647,this.SIZE_BYTES=4,this.SIZE_BITS=32}function mr(){return null==a&&new pr,a}function kr(n){for(var t=[],r=n.f();r.g();)t.push(r.h());return t}function qr(n){return 0===(t=[n]).length?Or():Hr(new It(t,!0));var t}function yr(n){return n<0&&function(){throw Pu("Index overflow has happened.")}(),n}function Br(n){return void 0!==n.toArray?n.toArray():kr(n)}function Cr(n){return function(n,t){for(var r=0,i=n.length;r<i;){var e=n[r];r=r+1|0,t.d(e)}return t}(t=[n],(r=t.length,i=de(ve(ni)),function(n,t,r){Mr.call(r),ni.call(r),r.y5_1=function(n){return Kr(n,0,de(ve(Xr)))}(n)}(r,0,i),i));var t,r,i}function xr(){ct.call(this)}function jr(n){this.j4_1=n,this.h4_1=0,this.i4_1=-1}function Pr(n,t){this.n4_1=n,jr.call(this,n),_t().b1(t,this.n4_1.k()),this.h4_1=t}function Ir(){xr.call(this),this.o4_1=0}function Sr(n){this.r4_1=n}function zr(n){this.s4_1=n}function Tr(n,t){this.t4_1=n,this.u4_1=t}function Er(){Mr.call(this)}function Lr(n){this.x4_1=n,Mr.call(this)}function Nr(n){this.e5_1=n,xr.call(this)}function Ar(){kt.call(this),this.c5_1=null,this.d5_1=null}function Mr(){xr.call(this)}function Fr(){h=this;var n=Rr();n.c_1=!0,this.i5_1=n}function Dr(){return null==h&&new Fr,h}function Or(){return n=de(ve(Gr)),t=[],Gr.call(n,t),n;var n,t}function Rr(n){return t=de(ve(Gr)),r=[],Gr.call(t,r),t;var t,r}function Hr(n){return function(n,t){var r;return r=Br(n),Gr.call(t,r),t}(n,de(ve(Gr)))}function $r(n,t){return _t().e1(t,n.k()),t}function Gr(n){Dr(),Ir.call(this),this.b_1=n,this.c_1=!1}function Ur(n,t,r,i,e){if(r===i)return n;var u=(r+i|0)/2|0,o=Ur(n,t,r,u,e),f=Ur(n,t,u+1|0,i,e),s=o===t?n:t,c=r,a=u+1|0,h=r;if(h<=i)do{var l=h;if(h=h+1|0,c<=u&&a<=i){var _=o[c],v=f[a];e.compare(_,v)<=0?(s[l]=_,c=c+1|0):(s[l]=v,a=a+1|0)}else c<=u?(s[l]=o[c],c=c+1|0):(s[l]=f[a],a=a+1|0)}while(l!==i);return s}function Vr(n,t){return(3&n)-(3&t)|0}function Qr(){_=this}function Zr(n){this.n5_1=n,Er.call(this)}function Yr(n){return function(n,t){Ar.call(t),Xr.call(t),t.t5_1=n,t.u5_1=n.w5()}(new ui((null==_&&new Qr,_)),n),n}function Wr(){return Yr(de(ve(Xr)))}function Kr(n,t,r){if(Yr(r),!(n>=0))throw _u(ce("Negative initial capacity: "+n));if(!(t>=0))throw _u(ce("Non-positive load factor: "+t));return r}function Xr(){this.v5_1=null}function Jr(n,t){return Mr.call(t),ni.call(t),t.y5_1=n,t}function ni(){}function ti(n,t){var r=ii(n,n.h6_1.m5(t));if(null==r)return null;var i=r;if(null!=i&&Xe(i))return ri(i,n,t);var e=i;return n.h6_1.l5(e.j1(),t)?e:null}function ri(n,t,r){var i;n:{for(var e=0,u=n.length;e<u;){var o=n[e];if(e=e+1|0,t.h6_1.l5(o.j1(),r)){i=o;break n}}i=null}return i}function ii(n,t){var r=n.i6_1[t];return void 0===r?null:r}function ei(n){this.g6_1=n,this.z5_1=-1,this.a6_1=Object.keys(n.i6_1),this.b6_1=-1,this.c6_1=null,this.d6_1=!1,this.e6_1=-1,this.f6_1=null}function ui(n){this.h6_1=n,this.i6_1=this.k6(),this.j6_1=0}function oi(){}function fi(n){this.n6_1=n,this.l6_1=null,this.m6_1=null,this.m6_1=this.n6_1.y6_1.v6_1}function si(){v=this;var n,t=(_i(0,0,n=de(ve(vi))),n);t.x6_1=!0,this.e7_1=t}function ci(){return null==v&&new si,v}function ai(n,t,r){this.d7_1=n,Tr.call(this,t,r),this.b7_1=null,this.c7_1=null}function hi(n){this.y6_1=n,Er.call(this)}function li(){return Yr(n=de(ve(vi))),vi.call(n),n.w6_1=Wr(),n;var n}function _i(n,t,r){return Kr(n,t,r),vi.call(r),r.w6_1=Wr(),r}function vi(){ci(),this.v6_1=null,this.x6_1=!1}function di(){d=this;var n=gi(0),t=n.y5_1;(t instanceof vi?t:pe()).j5(),this.f7_1=n}function gi(n){return function(n,t){return function(n,t,r){Jr(function(n,t){return _i(n,t,de(ve(vi)))}(n,t),r),wi.call(r)}(n,0,t),t}(n,de(ve(wi)))}function wi(){null==d&&new di}function bi(){}function pi(){}function mi(n){pi.call(this),this.k7_1=n}function ki(){qi.call(this)}function qi(){pi.call(this),this.m7_1=""}function yi(){if(!w){w=!0;var n="undefined"!=typeof process&&process.versions&&!!process.versions.node;g=n?new mi(process.stdout):new ki}}function Bi(){return n=de(ve(Ci)),Ci.call(n,""),n;var n}function Ci(n){this.o7_1=void 0!==n?n:""}function xi(n){var t=Li(n).toUpperCase();return t.length>1?n:ne(t,0)}function ji(n){return function(n){return 9<=n&&n<=13||28<=n&&n<=32||160===n||n>4096&&(5760===n||8192<=n&&n<=8202||8232===n||8233===n||8239===n||8287===n||12288===n)}(n)}function Pi(){b=this,this.q7_1=new RegExp("[\\\\^$*+?.()|[\\]{}]","g"),this.r7_1=new RegExp("[\\\\$]","g"),this.s7_1=new RegExp("\\$","g")}function Ii(){return null==b&&new Pi,b}function Si(n,t){Ii(),this.v7_1=n,this.w7_1=function(n){if(Ke(n,Di)){var t;switch(n.k()){case 0:t=Ht();break;case 1:t=Cr(Ke(n,Fi)?n.j(0):n.f().h());break;default:t=nt(n,gi(n.k()))}return t}return function(n){switch(n.k()){case 0:return Ht();case 1:return Cr(n.f().h());default:return n}}(nt(n,(r=de(ve(wi)),Jr(li(),r),wi.call(r),r)));var r}(t),this.x7_1=new RegExp(n,$n(t,"","gu",A,A,A,zi)),this.y7_1=null,this.z7_1=null}function zi(n){return n.d8_1}function Ti(n,t,r,i,e,u){return fr(n,t,r,i,e,u=u!==A&&u)}function Ei(n,t){return n-t|0}function Li(n){return String.fromCharCode(n)}function Ni(){p=this,this.e8_1=0,this.f8_1=65535,this.g8_1=55296,this.h8_1=56319,this.i8_1=56320,this.j8_1=57343,this.k8_1=55296,this.l8_1=57343,this.m8_1=2,this.n8_1=16}function Ai(){return null==p&&new Ni,p}function Mi(n){Ai(),this.h3_1=n}function Fi(){}function Di(){}function Oi(){}function Ri(){}function Hi(){}function $i(){}function Gi(){m=this}function Ui(n,t){null==m&&new Gi,this.p8_1=n,this.q8_1=t}function Vi(n){var t=null==n?null:ce(n);return null==t?"null":t}function Qi(n){return new Zi(n)}function Zi(n){this.t8_1=n,this.s8_1=0}function Yi(){return Ji(),k}function Wi(){return Ji(),q}function Ki(){return Ji(),y}function Xi(){return Ji(),B}function Ji(){x||(x=!0,k=new ArrayBuffer(8),q=new Float64Array(Yi()),new Float32Array(Yi()),y=new Int32Array(Yi()),Wi()[0]=-1,B=0!==Ki()[0]?1:0,C=1-Xi()|0)}function ne(n,t){var r;if(te(n)){var i,e=n.charCodeAt(t);if(Ai(),e<0?i=!0:(Ai(),i=e>65535),i)throw _u("Invalid Char code: "+e);r=Ue(e)}else r=n.y3(t);return r}function te(n){return"string"==typeof n}function re(n){return te(n)?n.length:n.x3()}function ie(n,t,r){return te(n)?n.substring(t,r):n.z3(t,r)}function ee(n){return ce(n)}function ue(n,t){var r;switch(typeof n){case"number":r="number"==typeof t?oe(n,t):t instanceof ke?oe(n,t.w8()):fe(n,t);break;case"string":case"boolean":r=fe(n,t);break;default:r=function(n,t){return n.a4(t)}(n,t)}return r}function oe(n,t){var r;if(n<t)r=-1;else if(n>t)r=1;else if(n===t){var i;if(0!==n)i=0;else{var e=1/n;i=e===1/t?0:e<0?-1:1}r=i}else r=n!=n?t!=t?0:1:-1;return r}function fe(n,t){return n<t?-1:n>t?1:0}function se(n){if(!("kotlinHashCodeValue$"in n)){var t=4294967296*Math.random()|0,r=new Object;r.value=t,r.enumerable=!1,Object.defineProperty(n,"kotlinHashCodeValue$",r)}return n.kotlinHashCodeValue$}function ce(n){return null==n?"null":function(n){return!!Ye(n)||Fn(n)}(n)?"[...]":n.toString()}function ae(n){if(null==n)return 0;var t;switch(typeof n){case"object":t="function"==typeof n.hashCode?n.hashCode():se(n);break;case"function":t=se(n);break;case"number":t=function(n){return Ji(),(0|n)===n?Ge(n):(Wi()[0]=n,Mn(Ki()[(Ji(),C)],31)+Ki()[Xi()]|0)}(n);break;case"boolean":t=n?1:0;break;default:t=he(String(n))}return t}function he(n){var t=0,r=0,i=n.length-1|0;if(r<=i)do{var e=r;r=r+1|0;var u=n.charCodeAt(e);t=Mn(t,31)+u|0}while(e!==i);return t}function le(n,t){return null==n?null==t:null!=t&&("object"==typeof n&&"function"==typeof n.equals?n.equals(t):n!=n?t!=t:"number"==typeof n&&"number"==typeof t?n===t&&(0!==n||1/n==1/t):n===t)}function _e(n,t){null!=Error.captureStackTrace?Error.captureStackTrace(n,t):n.stack=(new Error).stack}function ve(n){return n.prototype}function de(n){return Object.create(n)}function ge(n,t,r){Error.call(n),function(n,t,r){var i=eu(Object.getPrototypeOf(n));if(!(1&i)){var e;if(null==t){var u;if(null!==t){var o=null==r?null:r.toString();u=null==o?A:o}else u=A;e=u}else e=t;n.message=e}2&i||(n.cause=r),n.name=Object.getPrototypeOf(n).constructor.name}(n,t,r)}function we(n){var t;return null==n?function(){throw Eu()}():t=n,t}function be(){throw Nu()}function pe(){throw Mu()}function me(){j=this,this.x8_1=new ke(0,-2147483648),this.y8_1=new ke(-1,2147483647),this.z8_1=8,this.a9_1=64}function ke(n,t){null==j&&new me,gr.call(this),this.u8_1=n,this.v8_1=t}function qe(){return $e(),P}function ye(){return $e(),I}function Be(){return $e(),S}function Ce(){return $e(),T}function xe(){return $e(),E}function je(n,t){if($e(),Te(n,t))return 0;var r=Ne(n),i=Ne(t);return r&&!i?-1:!r&&i?1:Ne(Ie(n,t))?-1:1}function Pe(n,t){$e();var r=n.v8_1>>>16|0,i=65535&n.v8_1,e=n.u8_1>>>16|0,u=65535&n.u8_1,o=t.v8_1>>>16|0,f=65535&t.v8_1,s=t.u8_1>>>16|0,c=0,a=0,h=0,l=0;return c=(c=c+((a=(a=a+((h=(h=h+((l=l+(u+(65535&t.u8_1)|0)|0)>>>16|0)|0)+(e+s|0)|0)>>>16|0)|0)+(i+f|0)|0)>>>16|0)|0)+(r+o|0)|0,new ke((h&=65535)<<16|(l&=65535),(c&=65535)<<16|(a&=65535))}function Ie(n,t){return $e(),Pe(n,t.e9())}function Se(n,t){if($e(),Ae(n))return qe();if(Ae(t))return qe();if(Te(n,Ce()))return Me(t)?Ce():qe();if(Te(t,Ce()))return Me(n)?Ce():qe();if(Ne(n))return Ne(t)?Se(Fe(n),Fe(t)):Fe(Se(Fe(n),t));if(Ne(t))return Fe(Se(n,Fe(t)));if(De(n,xe())&&De(t,xe()))return Oe(ze(n)*ze(t));var r=n.v8_1>>>16|0,i=65535&n.v8_1,e=n.u8_1>>>16|0,u=65535&n.u8_1,o=t.v8_1>>>16|0,f=65535&t.v8_1,s=t.u8_1>>>16|0,c=65535&t.u8_1,a=0,h=0,l=0,_=0;return l=l+((_=_+Mn(u,c)|0)>>>16|0)|0,_&=65535,h=(h=h+((l=l+Mn(e,c)|0)>>>16|0)|0)+((l=(l&=65535)+Mn(u,s)|0)>>>16|0)|0,l&=65535,a=(a=(a=a+((h=h+Mn(i,c)|0)>>>16|0)|0)+((h=(h&=65535)+Mn(e,s)|0)>>>16|0)|0)+((h=(h&=65535)+Mn(u,f)|0)>>>16|0)|0,h&=65535,a=a+(((Mn(r,c)+Mn(i,s)|0)+Mn(e,f)|0)+Mn(u,o)|0)|0,new ke(l<<16|_,(a&=65535)<<16|h)}function ze(n){return $e(),4294967296*n.v8_1+function(n){return $e(),n.u8_1>=0?n.u8_1:4294967296+n.u8_1}(n)}function Te(n,t){return $e(),n.v8_1===t.v8_1&&n.u8_1===t.u8_1}function Ee(n,t){if($e(),t<2||36<t)throw mu("radix out of range: "+t);if(Ae(n))return"0";if(Ne(n)){if(Te(n,Ce())){var r=Le(t),i=n.d9(r),e=Ie(Se(i,r),n).g9();return Ee(i,t)+e.toString(t)}return"-"+Ee(Fe(n),t)}for(var u=2===t?31:t<=10?9:t<=21?7:t<=35?6:5,o=Oe(Math.pow(t,u)),f=n,s="";;){var c=f.d9(o),a=Ie(f,Se(c,o)).g9().toString(t);if(Ae(f=c))return a+s;for(;a.length<u;)a="0"+a;s=a+s}}function Le(n){return $e(),new ke(n,n<0?-1:0)}function Ne(n){return $e(),n.v8_1<0}function Ae(n){return $e(),0===n.v8_1&&0===n.u8_1}function Me(n){return $e(),!(1&~n.u8_1)}function Fe(n){return $e(),n.e9()}function De(n,t){return $e(),je(n,t)<0}function Oe(n){if($e(),(t=n)!=t)return qe();if(n<=-0x8000000000000000)return Ce();if(n+1>=0x8000000000000000)return $e(),z;if(n<0)return Fe(Oe(-n));var t,r=4294967296;return new ke(n%r|0,n/r|0)}function Re(n,t){return $e(),je(n,t)>0}function He(n,t){return $e(),je(n,t)>=0}function $e(){L||(L=!0,P=Le(0),I=Le(1),S=Le(-1),z=new ke(-1,2147483647),T=new ke(0,-2147483648),E=Le(16777216))}function Ge(n){return n instanceof ke?n.g9():function(n){return n>2147483647?2147483647:n<-2147483648?-2147483648:0|n}(n)}function Ue(n){var t;return t=function(n){return n<<16>>16}(Ge(n)),function(n){return 65535&n}(t)}function Ve(n,t){return new Zt(n,t)}function Qe(n,t,r,i){return Ze("class",n,t,r,i,null)}function Ze(n,t,r,i,e,u){return{kind:n,simpleName:t,associatedObjectKey:r,associatedObjects:i,suspendArity:e,$kClass$:A,iid:u}}function Ye(n){return Array.isArray(n)}function We(n,t,r,i,e,u,o,f){null!=i&&(n.prototype=Object.create(i.prototype),n.prototype.constructor=n);var s=r(t,u,o,null==f?[]:f);n.$metadata$=s,null!=e&&((null!=s.iid?n:n.prototype).$imask$=function(n){for(var t=1,r=[],i=0,e=n.length;i<e;){var u=n[i];i=i+1|0;var o=t,f=u.prototype.$imask$,s=null==f?u.$imask$:f;null!=s&&(r.push(s),o=s.length);var c=u.$metadata$.iid,a=null==c?null:(l=void 0,v=1<<(31&(h=c)),(l=new Int32Array(1+(h>>5)|0))[_=h>>5]=l[_]|v,l);null!=a&&(r.push(a),o=Math.max(o,a.length)),o>t&&(t=o)}var h,l,_,v;return function(n,t){for(var r=0,i=new Int32Array(n);r<n;){for(var e=r,u=0,o=0,f=t.length;o<f;){var s=t[o];o=o+1|0,e<s.length&&(u|=s[e])}i[e]=u,r=r+1|0}return i}(t,r)}(e))}function Ke(n,t){return function(n,t){var r=n.$imask$;return null!=r&&function(n,t){var r=t>>5;if(r>n.length)return!1;var i=1<<(31&t);return!!(n[r]&i)}(r,t)}(n,t.$metadata$.iid)}function Xe(n){return!!Ye(n)&&!n.$type$}function Je(n){var t;switch(typeof n){case"string":case"number":case"boolean":case"function":t=!0;break;default:t=n instanceof Object}return t}function nu(n){return"string"==typeof n||Ke(n,vr)}function tu(n,t,r,i){return Ze("interface",n,t,r,i,(null==N&&(N=0),N=ru()+1|0,ru()))}function ru(){if(null!=N)return N;!function(){throw Du("lateinit property iid has not been initialized")}()}function iu(n,t,r,i){return Ze("object",n,t,r,i,null)}function eu(n){var t=n.constructor,r=null==t?null:t.$metadata$,i=null==r?null:r.errorInfo;if(null!=i)return i;var e,u=0;if(uu(n,"message")&&(u|=1),uu(n,"cause")&&(u|=2),3!==u){var o=(e=n,Object.getPrototypeOf(e));o!=Error.prototype&&(u|=eu(o))}return null!=r&&(r.errorInfo=u),u}function uu(n,t){return n.hasOwnProperty(t)}function ou(n){return new Gr(n)}function fu(n,t,r){for(var i=new Int32Array(r),e=0,u=0,o=0,f=0,s=n.length;f<s;){var c=ne(n,f);f=f+1|0;var a=t[c];if(u|=(31&a)<<o,a<32){var h=e;e=h+1|0,i[h]=u,u=0,o=0}else o=o+5|0}return i}function su(n,t){for(var r=0,i=n.length-1|0,e=-1,u=0;r<=i;)if(t>(u=n[e=(r+i|0)/2|0]))r=e+1|0;else{if(t===u)return e;i=e-1|0}return e-(t<u?1:0)|0}function cu(){M=this;var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=new Int32Array(128),r=0,i=re(n)-1|0;if(r<=i)do{var e=r;r=r+1|0,t[ne(n,e)]=e}while(r<=i);var u=fu("hCgBpCQGYHZH5BRpBPPPPPPRMP5BPPlCPP6BkEPPPPcPXPzBvBrB3BOiDoBHwD+E3DauCnFmBmB2D6E1BlBTiBmBlBP5BhBiBrBvBjBqBnBPRtBiCmCtBlB0BmB5BiB7BmBgEmChBZgCoEoGVpBSfRhBPqKQ2BwBYoFgB4CJuTiEvBuCuDrF5DgEgFlJ1DgFmBQtBsBRGsB+BPiBlD1EIjDPRPPPQPPPPPGQSQS/DxENVNU+B9zCwBwBPPCkDPNnBPqDYY1R8B7FkFgTgwGgwUwmBgKwBuBScmEP/BPPPPPPrBP8B7F1B/ErBqC6B7BiBmBfQsBUwCw/KwqIwLwETPcPjQgJxFgBlBsD",t,222),o=new Int32Array(u.length),f=0,s=u.length-1|0;if(f<=s)do{var c=f;f=f+1|0,o[c]=0===c?u[c]:o[c-1|0]+u[c]|0}while(f<=s);this.h9_1=o,this.i9_1=fu("aaMBXHYH5BRpBPPPPPPRMP5BPPlCPPzBDOOPPcPXPzBvBjB3BOhDmBBpB7DoDYxB+EiBP1DoExBkBQhBekBPmBgBhBctBiBMWOOXhCsBpBkBUV3Ba4BkB0DlCgBXgBtD4FSdBfPhBPpKP0BvBXjEQ2CGsT8DhBtCqDpFvD1D3E0IrD2EkBJrBDOBsB+BPiBlB1EIjDPPPPPPPPPPPGPPMNLsBNPNPKCvBvBPPCkDPBmBPhDXXgD4B6FzEgDguG9vUtkB9JcuBSckEP/BPPPPPPBPf4FrBjEhBpC3B5BKaWPrBOwCk/KsCuLqDHPbPxPsFtEaaqDL",t,222),this.j9_1=fu("GFjgggUHGGFFZZZmzpz5qB6s6020B60ptltB6smt2sB60mz22B1+vv+8BZZ5s2850BW5q1ymtB506smzBF3q1q1qB1q1q1+Bgii4wDTm74g3KiggxqM60q1q1Bq1o1q1BF1qlrqrBZ2q5wprBGFZWWZGHFsjiooLowgmOowjkwCkgoiIk7ligGogiioBkwkiYkzj2oNoi+sbkwj04DghhkQ8wgiYkgoioDsgnkwC4gikQ//v+85BkwvoIsgoyI4yguI0whiwEowri4CoghsJowgqYowgm4DkwgsY/nwnzPowhmYkg6wI8yggZswikwHgxgmIoxgqYkwgk4DkxgmIkgoioBsgssoBgzgyI8g9gL8g9kI0wgwJoxgkoC0wgioFkw/wI0w53iF4gioYowjmgBHGq1qkgwBF1q1q8qBHwghuIwghyKk0goQkwgoQk3goQHGFHkyg0pBgxj6IoinkxDswno7Ikwhz9Bo0gioB8z48Rwli0xN0mpjoX8w78pDwltoqKHFGGwwgsIHFH3q1q16BFHWFZ1q10q1B2qlwq1B1q10q1B2q1yq1B6q1gq1Biq1qhxBir1qp1Bqt1q1qB1g1q1+B//3q16B///q1qBH/qlqq9Bholqq9B1i00a1q10qD1op1HkwmigEigiy6Cptogq1Bixo1kDq7/j00B2qgoBWGFm1lz50B6s5q1+BGWhggzhwBFFhgk4//Bo2jigE8wguI8wguI8wgugUog1qoB4qjmIwwi2KgkYHHH4lBgiFWkgIWoghssMmz5smrBZ3q1y50B5sm7gzBtz1smzB5smz50BqzqtmzB5sgzqzBF2/9//5BowgoIwmnkzPkwgk4C8ys65BkgoqI0wgy6FghquZo2giY0ghiIsgh24B4ghsQ8QF/v1q1OFs0O8iCHHF1qggz/B8wg6Iznv+//B08QgohsjK0QGFk7hsQ4gB",t,222)}function au(){return null==M&&new cu,M}function hu(){F=this,this.k9_1=new Int32Array([170,186,688,704,736,837,890,7468,7544,7579,8305,8319,8336,8560,9424,11388,42652,42864,43e3,43868]),this.l9_1=new Int32Array([1,1,9,2,5,1,1,63,1,37,1,1,13,16,26,2,2,1,2,4])}function lu(){return null==F&&new hu,F}function _u(n){var t=function(n,t){return yu(n,t),vu.call(t),t}(n,de(ve(vu)));return _e(t,_u),t}function vu(){_e(this,vu)}function du(n){var t=function(n,t){return yu(n,t),gu.call(t),t}(n,de(ve(gu)));return _e(t,du),t}function gu(){_e(this,gu)}function wu(n){var t=function(n,t){return yu(n,t),bu.call(t),t}(n,de(ve(bu)));return _e(t,wu),t}function bu(){_e(this,bu)}function pu(n,t){return ge(t,n),ku.call(t),t}function mu(n){var t=pu(n,de(ve(ku)));return _e(t,mu),t}function ku(){_e(this,ku)}function qu(n){return function(n){ge(n),ku.call(n)}(n),Bu.call(n),n}function yu(n,t){return pu(n,t),Bu.call(t),t}function Bu(){_e(this,Bu)}function Cu(){var n,t=(qu(n=de(ve(ju))),ju.call(n),n);return _e(t,Cu),t}function xu(n){var t=function(n,t){return yu(n,t),ju.call(t),t}(n,de(ve(ju)));return _e(t,xu),t}function ju(){_e(this,ju)}function Pu(n){var t=function(n,t){return yu(n,t),Iu.call(t),t}(n,de(ve(Iu)));return _e(t,Pu),t}function Iu(){_e(this,Iu)}function Su(){var n,t=(qu(n=de(ve(Tu))),Tu.call(n),n);return _e(t,Su),t}function zu(n){var t=function(n,t){return yu(n,t),Tu.call(t),t}(n,de(ve(Tu)));return _e(t,zu),t}function Tu(){_e(this,Tu)}function Eu(){var n,t=(qu(n=de(ve(Lu))),Lu.call(n),n);return _e(t,Eu),t}function Lu(){_e(this,Lu)}function Nu(){var n,t=(qu(n=de(ve(Au))),Au.call(n),n);return _e(t,Nu),t}function Au(){_e(this,Au)}function Mu(){var n,t=(qu(n=de(ve(Fu))),Fu.call(n),n);return _e(t,Mu),t}function Fu(){_e(this,Fu)}function Du(n){var t=function(n,t){return yu(n,t),Ou.call(t),t}(n,de(ve(Ou)));return _e(t,Du),t}function Ou(){_e(this,Ou)}function Ru(n,t){var r,i=n.className;return(r="(^|.*\\s+)"+t+"($|\\s+.*)",function(n,t){return Si.call(t,n,Ht()),t}(r,de(ve(Si)))).a8(i)}function Hu(n,t){this.o9_1=n,this.p9_1=t}function $u(n){this.q9_1=n}function Gu(n,t,r){var i,e=Gf(),u=ro(),o=$f().ga(t),f=ro();if(0===re(r))i=Of();else{var s=n.ia_1,c=null==s?null:new $u(s).v9(r,"Copy reference to the clipboard");i=null==c?Of():c}return e.ja([u,o,f,i])}function Uu(n){n=n===A?null:n,this.ia_1=n}function Vu(n,t,r){to.call(this),this.ma_1=n,this.na_1=t,this.oa_1=r}function Qu(n,t){this.ra_1=n,this.sa_1=t}function Zu(n,t){to.call(this),this.va_1=n,this.wa_1=t}function Yu(n,t){to.call(this),this.xa_1=n,this.ya_1=t}function Wu(n){to.call(this),this.za_1=n}function Ku(n){to.call(this),this.ab_1=n}function Xu(n){to.call(this),this.bb_1=n}function Ju(n,t){to.call(this),this.cb_1=n,this.db_1=t}function no(n){to.call(this),this.eb_1=n}function to(){}function ro(){return so(),D}function io(){return so(),O}function eo(){return so(),R}function uo(){return so(),H}function oo(n){return so(),Gf().fb(us(fo),n)}function fo(n){return so(),n.gb(["invisible-text","text-for-copy"]),br()}function so(){$||($=!0,D=oo("`"),O=oo(" "),R=oo("("),H=oo(")"))}function co(n,t){to.call(this),this.hb_1=n,this.ib_1=t}function ao(n){to.call(this),this.jb_1=n}function ho(n,t){to.call(this),this.kb_1=n,this.lb_1=t}function lo(n){to.call(this),this.mb_1=n}function _o(n){to.call(this),this.nb_1=n}function vo(n){to.call(this),this.ob_1=n}function go(n,t,r){to.call(this),this.pb_1=n,this.qb_1=t,this.rb_1=r}function wo(n){to.call(this),this.sb_1=n}function bo(n){to.call(this),this.tb_1=n}function po(n){return n.xb_1.vb_1.k()}function mo(){if(Z)return br();Z=!0,G=new jo("Inputs",0,"Build configuration inputs"),U=new jo("ByMessage",1,"Problems grouped by message"),V=new jo("ByLocation",2,"Problems grouped by location"),Q=new jo("IncompatibleTasks",3,"Incompatible tasks")}function ko(n){Fc.call(this),this.yb_1=n}function qo(n){Fc.call(this),this.ac_1=n}function yo(n){Fc.call(this),this.bc_1=n}function Bo(n){Fc.call(this),this.cc_1=n}function Co(n){Po.call(this),this.dc_1=n}function xo(n,t,r,i,e,u,o,f){this.ec_1=n,this.fc_1=t,this.gc_1=r,this.hc_1=i,this.ic_1=e,this.jc_1=u,this.kc_1=o,this.lc_1=f}function jo(n,t,r){Ui.call(this,n,t),this.qc_1=r}function Po(){Oc.call(this)}function Io(n,t){var r=Hf(),i=us(Oo),e=Hf().y9(us(Ro),[]),u=function(n,t){var r,i=Hf(),e=us(Vo),u=Gf().ga("Learn more about the "),o=Yf();return i.y9(e,[u,o.fb(us((r=t,function(n){return n.bd(r.tc_1),br()})),t.sc_1),Gf().ga(".")])}(0,t.gc_1),o=Hf().y9(us(Ho),[zo(0,t)]),f=Hf();return r.y9(i,[e,u,o,f.y9(us($o),[No(0,Qo(),t.lc_1,po(t.jc_1)),No(0,Zo(),t.lc_1,po(t.hc_1)),No(0,Yo(),t.lc_1,po(t.ic_1)),No(0,Wo(),t.lc_1,po(t.kc_1))])])}function So(n,t){var r,i,e=Hf(),u=us(Go);switch(t.lc_1.q8_1){case 0:r=Mo(0,t.jc_1,((i=function(n){return new yo(n)}).callableName="<init>",i));break;case 3:r=Mo(0,t.kc_1,function(){var n=function(n){return new Bo(n)};return n.callableName="<init>",n}());break;case 1:r=Mo(0,t.hc_1,function(){var n=function(n){return new qo(n)};return n.callableName="<init>",n}());break;case 2:r=Mo(0,t.ic_1,function(){var n=function(n){return new ko(n)};return n.callableName="<init>",n}());break;default:be()}return e.y9(u,[r])}function zo(n,t){return Hf().ja([Lo(0,t),To(0,t)])}function To(n,t){for(var r=Hf(),i=t.fc_1,e=Or(),u=0,o=i.f();o.g();){var f=o.h(),s=u;u=s+1|0,Et(e,0===yr(s)?qr(Eo(Xo(),f)):Bt([Wf().ja([]),Eo(Xo(),f)]))}return r.ha(e)}function Eo(n,t){return Uf().ja([Uc(t)])}function Lo(n,t){return Rf().ja([$c().ka(t.ec_1)])}function No(n,t,r,i){var e,u,o;return Hf().y9(us((e=i,u=t,o=r,function(n){return n.t9("group-selector"),0===e?(n.t9("group-selector--disabled"),br()):u.equals(o)?(n.t9("group-selector--active"),br()):(n.u9(function(n){return function(t){return new Co(n)}}(u)),br()),br()})),[Gf().rc(t.qc_1,[Ao(0,i)])])}function Ao(n,t){return Gf().y9(us(Uo),[io(),eo(),Gf().ga(""+t),uo()])}function Mo(n,t,r){return function(n,t,r){var i,e=Hf(),u=Vf();return e.ja([u.ha(Ps(t,(i=r,function(n){var t,r=n.cd().ub_1;return r instanceof Zu?Kc(i,(Xo(),(t=function(n){return Fo(0,n)}).callableName="viewNode",t),n,r.va_1,r.wa_1,Rc()):r instanceof Yu?Kc(i,function(){var n=function(n){return Fo(0,n)};return n.callableName="viewNode",n}(Xo()),n,r.xa_1,r.ya_1,Hc()):r instanceof co?Kc(i,function(){var n=function(n){return Fo(0,n)};return n.callableName="viewNode",n}(Xo()),n,r.hb_1,r.ib_1,A,Ao(Xo(),n.cd().vb_1.k())):r instanceof Vu?Wc(i,n,r):Kc(i,function(){var n=function(n){return Fo(0,n)};return n.callableName="viewNode",n}(Xo()),n,r)})))])}(0,t.xb_1.uc().vc(),r)}function Fo(n,t){var r;return t instanceof ao?Vc((r=t,function(n){return n.ed("project "),n.fd(r.jb_1),br()})):t instanceof go?Vc(function(n){return function(t){return t.ed(n.pb_1+" "),t.fd(n.qb_1),t.ed(" of "),t.fd(n.rb_1),br()}}(t)):t instanceof vo?Vc(function(n){return function(t){return t.ed("system property "),t.fd(n.ob_1),br()}}(t)):t instanceof ho?Vc(function(n){return function(t){return t.ed("task "),t.fd(n.kb_1),t.ed(" of type "),t.fd(n.lb_1),br()}}(t)):t instanceof _o?Vc(function(n){return function(t){return t.ed("bean of type "),t.fd(n.nb_1),br()}}(t)):t instanceof wo?Vc(function(n){return function(t){return t.ed(n.sb_1),br()}}(t)):t instanceof bo?Vc(function(n){return function(t){return t.ed("class "),t.fd(n.tb_1),br()}}(t)):t instanceof no?Vc(function(n){return function(t){return t.ed(n.eb_1),br()}}(t)):t instanceof Wu?Uc(t.za_1):t instanceof Ju?Jo(t):Gf().ga(ce(t))}function Do(n){return n.t9("report-wrapper"),br()}function Oo(n){return n.t9("header"),br()}function Ro(n){return n.t9("gradle-logo"),br()}function Ho(n){return n.t9("title"),br()}function $o(n){return n.t9("groups"),br()}function Go(n){return n.t9("content"),br()}function Uo(n){return n.t9("group-selector__count"),br()}function Vo(n){return n.t9("learn-more"),br()}function Qo(){return mo(),G}function Zo(){return mo(),U}function Yo(){return mo(),V}function Wo(){return mo(),Q}function Ko(){Y=this}function Xo(){return null==Y&&new Ko,Y}function Jo(n){var t;return Yf().fb(us((t=n,function(n){return n.t9("documentation-button"),n.bd(t.cb_1),br()})),n.db_1)}function nf(n,t,r){this.kd_1=n,this.ld_1=t,this.md_1=r}function tf(n,t,r){this.nd_1=n,this.od_1=t,this.pd_1=r}function rf(n,t){for(var r=mf(n),i=t.trace,e=Rr(i.length),u=0,o=i.length;u<o;){var f,s=i[u];u=u+1|0,f=of(s),e.d(f)}return new nf(t,r,e)}function ef(n,t){var r,i=null==(r=t.kd_1.error)?null:ff(r);null==i||n.d(i)}function uf(n){return function(n,t,r){var i=null==n.error?null:new Zu(t,r);return null==i?new Yu(t,r):i}(n.kd_1,new Wu(n.ld_1),af(n.kd_1))}function of(n){var t;switch(n.kind){case"Project":t=new ao(n.path);break;case"Task":t=new ho(n.path,n.type);break;case"TaskPath":t=new lo(n.path);break;case"Bean":t=new _o(n.type);break;case"Field":t=new go("field",n.name,n.declaringType);break;case"InputProperty":t=new go("input property",n.name,n.task);break;case"OutputProperty":t=new go("output property",n.name,n.task);break;case"SystemProperty":t=new vo(n.name);break;case"PropertyUsage":t=new go("property",n.name,n.from);break;case"BuildLogic":t=new wo(n.location);break;case"BuildLogicClass":t=new bo(n.type);break;default:t=new no("Gradle runtime")}return t}function ff(n){var t=n.parts;if(null==t){var r=n.summary;return null==r?null:new Wu(mf(r))}for(var i=n.summary,e=null==i?null:mf(i),u=Or(),o=Qi(t);o.g();){var f=cf(o.h());null==f||u.d(f)}for(var s=$n(u,"\n"),c=Or(),a=Qi(t);a.g();){var h=sf(a.h());null==h||c.d(h)}return new Vu(e,s,c)}function sf(n){var t=cf(n);if(null==t)return null;var r,i,e=ot(new Rt(function(n,t,r,i){var e;return ut(or(n,["\r\n","\n","\r"],A,r=r!==A&&r,i=i===A?0:i),(e=n,function(n){return ur(e,n)}))}(t),!0,bf));return new Qu(e,(r=!(null==n.internalText),i=e.k(),r&&i>1?Cs():null))}function cf(n){var t=n.text;return null==t?n.internalText:t}function af(n){var t=n.documentationLink;return null==t?null:new Ju(t,"")}function hf(n,t){return new ds(lf(n,Ef().sd(t),Cs()))}function lf(n,t,r){return new js(n,function(n,t){var r,i=ut(Vn(n.o()),Nf);return ot(ut(new st(i,new _f(pf)),(r=t,function(n){return lf(n.v3(),n.w3().wd_1,r)})))}(t,1===Lf(t)?xs():Cs()),0===Lf(t)?Cs():r)}function _f(n){this.td_1=n}function vf(n){var t=Or(),r=n.ld_1,i=Un(r.ca_1).fa_1,e=ce(er(nu(i)?i:pe())),u=r.vd(function(n,t){var r;if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Qn(n);if(Ke(n,Di)){var i=n.k()-t|0;if(i<=0)return Ct();if(1===i)return qr(function(n){if(Ke(n,Fi))return Jn(n);var t=n.f();if(!t.g())throw xu("Collection is empty.");for(var r=t.h();t.g();)r=t.h();return r}(n));if(r=Rr(),Ke(n,Fi)){if(Ke(n,bi)){var e=t,u=n.k();if(e<u)do{var o=e;e=e+1|0,r.d(n.j(o))}while(e<u)}else for(var f=n.l(t);f.g();){var s=f.h();r.d(s)}return r}}else r=Or();for(var c=0,a=n.f();a.g();){var h=a.h();c>=t?r.d(h):c=c+1|0}return xt(r)}(r.ca_1,1));return t.d(new co(new no(e),af(n.kd_1))),t.d(new Wu(u)),t.m(n.md_1),t.j5()}function df(n){var t=Or(),r=n.ld_1,i=r.vd(r.ca_1);return t.d(new Yu(new Wu(i),af(n.kd_1))),t.j5()}function gf(n){var t=Or();return t.d(uf(n)),t.m(n.md_1),ef(t,n),t.j5()}function wf(n){var t=Or();return t.m(new At(n.md_1)),t.d(uf(n)),ef(t,n),t.j5()}function bf(n){return re(n)>0}function pf(n,t){return function(n,t){return n===t?0:null==n?-1:null==t?1:ue(null!=n&&("string"==(i=typeof(r=n))||"boolean"===i||function(n){return"number"==typeof n||n instanceof ke}(r)||Ke(r,dr))?n:pe(),t);var r,i}(Vi(n.v3()),Vi(t.v3()))}function mf(n){var t;return Sf().qd((t=n,function(n){for(var r=t,i=0,e=r.length;i<e;){var u=r[i];i=i+1|0;var o=u.text;null==o||n.ed(o);var f=u.name;null==f||(n.fd(f),br())}return br()}))}function kf(n,t){return(0!==(r=n)?r.toString():"No")+" "+qf(t,n)+" "+yf(n)+" found";var r}function qf(n,t){return t<2?n:n+"s"}function yf(n){return n<=1?"was":"were"}function Bf(n,t){this.sc_1=n,this.tc_1=t}function Cf(n){jf.call(this),this.fa_1=n}function xf(n,t){jf.call(this),this.da_1=n,this.ea_1=t}function jf(){}function Pf(){this.dd_1=Or()}function If(){W=this}function Sf(){return null==W&&new If,W}function zf(n){Sf(),this.ca_1=n}function Tf(){K=this}function Ef(){return null==K&&new Tf,K}function Lf(n){return n.k()}function Nf(n){var t=n.j1(),r=n.i1();return _r(t,new Af(Ke(r,Ri)?r:pe()))}function Af(n){Ef(),this.wd_1=n}function Mf(n,t,r){var i;Df(t,n,r),i="Component mounted at #"+n.id+".",yi(),(yi(),g).j7(i)}function Ff(n){var t=document.getElementById(n);if(null==t)throw wu("'"+n+"' element missing");return t}function Df(n,t,r){var i,e,u;i=n.z9(r),e=t,u=function(n,t,r){return function(i){return Df(n,r,n.ba(i,t)),br()}}(n,r,t),_s(),e.innerHTML="",hs(e,i,u)}function Of(){return _s(),X}function Rf(){return _s(),J}function Hf(){return _s(),nn}function $f(){return _s(),tn}function Gf(){return _s(),rn}function Uf(){return _s(),en}function Vf(){return _s(),un}function Qf(){return _s(),on}function Zf(){return _s(),fn}function Yf(){return _s(),sn}function Wf(){return _s(),cn}function Kf(n){this.x9_1=n}function Xf(){an=this}function Jf(){return null==an&&new Xf,an}function ns(){hn=this,es.call(this)}function ts(){return null==hn&&new ns,hn}function rs(n,t,r,i){t=t===A?Ct():t,r=r===A?null:r,i=i===A?Ct():i,es.call(this),this.be_1=n,this.ce_1=t,this.de_1=r,this.ee_1=i}function is(){}function es(){Jf()}function us(n){_s();var t,r=Or();return n(new os((t=r,function(n){return t.d(n),br()}))),r}function os(n){this.r9_1=n}function fs(n,t){as.call(this),this.fe_1=n,this.ge_1=t}function ss(n){as.call(this),this.he_1=n}function cs(n,t){as.call(this),this.ie_1=n,this.je_1=t}function as(){}function hs(n,t,r){if(_s(),t instanceof rs)!function(n,t,r){var i=function(n,t,r){var i=n.createElement(t);return r(i),i}(we(n.ownerDocument),t,r);n.appendChild(i)}(n,t.be_1,(e=t,u=r,function(n){for(var t=e.ce_1.f();t.g();)ls(n,t.h(),u);var r=e.de_1;null==r||function(n,t){n.appendChild(we(n.ownerDocument).createTextNode(t))}(n,r);for(var i=e.ee_1.f();i.g();)hs(n,i.h(),u);return br()}));else if(t instanceof is){var i=t instanceof is?t:pe();hs(n,i.ke_1,function(n,t){return function(r){return n(t.le_1(r)),br()}}(r,i))}else if(le(t,ts()))return br();var e,u}function ls(n,t,r){var i,e;_s(),t instanceof cs?n.setAttribute(t.ie_1,t.je_1):t instanceof ss?function(n,t){for(var r=Or(),i=0,e=t.length;i<e;){var u=t[i];i=i+1|0,Ru(n,u)||r.d(u)}var o=r;if(!o.i()){var f=n.className,s=ce(er(nu(f)?f:pe())),c=Bi();c.p7(s),0!==re(s)&&c.p7(" "),Gn(o,c," "),n.className=c.toString()}}(n,[t.he_1]):t instanceof fs&&n.addEventListener(t.fe_1,(i=r,e=t,function(n){return n.stopPropagation(),i(e.ge_1(n)),br()}))}function _s(){ln||(ln=!0,X=ts(),new Kf("hr"),J=new Kf("h1"),new Kf("h2"),nn=new Kf("div"),new Kf("pre"),tn=new Kf("code"),rn=new Kf("span"),en=new Kf("small"),un=new Kf("ol"),on=new Kf("ul"),fn=new Kf("li"),sn=new Kf("a"),cn=new Kf("br"),new Kf("p"))}function vs(n){gs.call(this),this.ne_1=n}function ds(n){this.xb_1=n}function gs(){}function ws(n){return n.me(A,A,n.wb_1.ad())}function bs(){_n=this}function ps(){return null==_n&&new bs,_n}function ms(){if(gn)return br();gn=!0,vn=new ys("Collapsed",0),dn=new ys("Expanded",1)}function ks(n){Bs.call(this),this.ve_1=n}function qs(n,t,r){Bs.call(this),this.se_1=n,this.te_1=t,this.ue_1=r}function ys(n,t){Ui.call(this,n,t)}function Bs(){}function Cs(){return ms(),vn}function xs(){return ms(),dn}function js(n,t,r){t=t===A?Ct():t,r=r===A?Cs():r,this.ub_1=n,this.vb_1=t,this.wb_1=r}function Ps(n,t){return ot(ut(n,(r=t,function(n){return function(n,t){var r,i=n.cd(),e=Zf(),u=t(n),o=i.vb_1;r=null==(i.wb_1.equals(xs())&&!o.i()?o:null)?null:function(n,t){return Qf().ha(function(n,t){return Ps(n.vc(),t)}(n,t))}(n,t);var f=r;return e.ja([u,null==f?Of():f])}(n,r)})));var r}function Is(){if(xn)return br();xn=!0,kn=new Ss("ByMessage",0,"Messages"),qn=new Ss("ByGroup",1,"Group"),yn=new Ss("ByFileLocation",2,"File Locations"),Bn=new Ss("ByPluginLocation",3,"Plugin Locations"),Cn=new Ss("ByTaskLocation",4,"Task Locations")}function Ss(n,t,r){Ui.call(this,n,t),this.cf_1=r}function zs(n,t){this.df_1=n,this.ef_1=t}function Ts(n,t){this.ff_1=n,this.gf_1=t}function Es(n,t,r){ec();for(var i=Or(),e=li(),u=0,o=n.length;u<o;){var f=n[u];u=u+1|0;var s=f.locations;null==s||0===s.length?i.d(Os(f)):r(f,e)||i.d(Os(f))}var c=function(n,t,r){ec();for(var i=n.w1(),e=Rr(Tt(i,10)),u=i.f();u.g();){var o;o=u.h().t3_1,e.d(o)}var f=Zn(e);return t.i()||f.d(new js(new oc(Sf().rd("no location"),!0),t)),r>0&&f.d(Ns(r)),f}(e,i,t);return new ds(new js(new uc("text"),c))}function Ls(n){return ec(),t=n,function(n,r){var i,e=n.locations;if(null==e)i=null;else{for(var u=Or(),o=Qi(e);o.g();){var f=o.h();null!=t(f)&&u.d(f)}i=u}var s,c=i;if(null==c||c.i())s=!1;else{for(var a=c.f();a.g();){var h=a.h();As(r,we(t(h)),n,h)}s=!0}return s};var t}function Ns(n){return ec(),new js(new Wu(Sf().rd(n+" more problem"+(n>1?"s have":" has")+" been skipped")))}function As(n,t,r,i){ec();var e,u,o=n.v1(t);if(null==o){var f=Or(),s=_r(new js(new oc(Sf().qd((u=t,function(n){return n.fd(u),br()}))),f,xs()),f);n.h5(t,s),e=s}else e=o;e.u3_1.d(Os(r,i))}function Ms(n,t,r,i){var e,u;if(t=t===A?Or():t,r=r===A?li():r,i===A){var o=(ec(),mn);u=o+1|0,ec(),mn=u,e=o}else e=i;i=e,this.hf_1=n,this.if_1=t,this.jf_1=r,this.kf_1=i}function Fs(n,t){if(ec(),t.i())return null;for(var r,i=n,e=null,u=t.f();u.g();){var o=u.h();r=e;var f,s=i,c=o.ef_1+" ("+o.df_1+")",a=s.v1(c);if(null==a){var h=Or(),l=new Ms(new js(new oc(Sf().qd(Ys(o))),h,xs()),h);s.h5(c,l),f=l}else f=a;e=f,null==r||we(r).if_1.u(we(e).hf_1)||we(r).if_1.d(we(e).hf_1),i=we(e).jf_1}return e}function Ds(n,t){if(ec(),n.k()===t.length){var r;n:{var i=function(n,t){var r=t.length,i=Tt(n,10),e=Rr(Math.min(i,r)),u=0,o=n.f();t:for(;o.g();){var f,s=o.h();if(u>=r)break t;var c=u;u=c+1|0,f=_r(s,t[c]),e.d(f)}return e}(n,t);if(Ke(i,Di)&&i.i())r=!0;else{for(var e=i.f();e.g();){var u=e.h();if(u.t3_1.df_1!==u.u3_1.name||u.t3_1.ef_1!==u.u3_1.displayName){r=!1;break n}}r=!0}}return r}return!1}function Os(n,t,r){t=t===A?null:t,r=r!==A&&r,ec();var i=function(n,t,r){t=t===A?null:t,r=r!==A&&r,ec();var i=$s(function(n,t){return ec(),n&&null!=t.contextualLabel?we(t.contextualLabel):Rs(t)}(r,n),t).j5();return Hs(n,new Wu(i))}(n,t,r),e=function(n,t,r){r=r!==A&&r,ec();var i,e=n.problemDetails;if(null==e)i=null;else{var u,o=e[0].text,f=null==o?null:function(n,t,r,i){if(r=r!==A&&r,i=i===A?0:i,1===t.length){var e=t[0];if(0!==re(e))return function(n,t,r,i){sr(i);var e=0,u=rr(n,t,e,r);if(-1===u||1===i)return qr(ce(n));var o,f=i>0,s=Rr(f&&it(i,10));n:do{var c;if(c=ce(ie(n,e,u)),s.d(c),e=u+t.length|0,f&&s.k()===(i-1|0))break n;u=rr(n,t,e,r)}while(-1!==u);return o=ce(ie(n,e,re(n))),s.d(o),s}(n,e,r,i)}for(var u=function(n){return new ft(n)}(or(n,t,A,r,i)),o=Rr(Tt(u,10)),f=u.f();f.g();){var s;s=ur(n,f.h()),o.d(s)}return o}(o,["\n"]);if(null==f)u=null;else{for(var s=Rr(Tt(f,10)),c=f.f();c.g();){var a,h=c.h();a=Us(n)?Sf().qd(Ks(h)):Sf().rd(h),s.d(a)}u=s}var l,_=u;if(null==_)l=null;else{for(var v=Rr(Tt(_,10)),d=_.f();d.g();){var g;g=new js(new Wu(d.h())),v.d(g)}l=v}var w=null==l?null:Zn(l);i=null==w?Or():w}var b=i,p=null==b?Or():b;r||null==n.contextualLabel||p.d(new js(new Wu(Sf().rd(we(n.contextualLabel)))));var m=function(n){ec();var t=n.solutions;if(null==t||0===t.length)return null;for(var r=new Xu(Sf().rd("Solutions")),i=we(n.solutions),e=Rr(i.length),u=0,o=i.length;u<o;){var f,s=i[u];u=u+1|0,f=new js(new Ku(mf(s))),e.d(f)}return new js(r,e)}(n);null==m||p.d(m);var k,q=n.error,y=null==q?null:ff(q);if(null==y||p.d(new js(y)),t){var B=n.locations;k=!(null==B||0===B.length)}else k=!1;return k&&p.d(function(n){ec();var t,r=n.locations;if(null==r)t=null;else{for(var i=Rr(r.length),e=Qi(r);e.g();){var u,o=e.h();u=new js(new Wu(Sf().qd(Xs(o)))),i.d(u)}t=i}var f=t;return new js(new no("Locations"),null==f?Ct():f)}(n)),p}(n,null==t,r);return new js(i,e)}function Rs(n){return ec(),function(n){if(0===n.length)throw xu("Array is empty.");return n[Rn(n)]}(n.problemId).displayName}function Hs(n,t){var r;switch(ec(),n.severity){case"WARNING":var i=n.documentationLink;r=new Yu(t,null==i?null:new Ju(i,""));break;case"ERROR":var e=n.documentationLink;r=new Zu(t,null==e?null:new Ju(e,""));break;case"ADVICE":var u=n.documentationLink;r=new fc(t,null==u?null:new Ju(u,""));break;default:console.error("no severity "+n.severity),r=t}return r}function $s(n,t){t=t===A?null:t,ec();var r,i=new Pf;if(i.ed(n),null==t);else if(null!=t.line){var e=Gs(t);i.xd(e+(r=t,ec(),null==r.line||null==r.length?"":"-"+r.length),""+t.path+e),br()}else null!=t.taskPath?(i.fd(we(t.taskPath)),br()):null!=t.pluginId&&(i.fd(we(t.pluginId)),br());return i}function Gs(n){var t;if(ec(),null==n.line)t=null;else{var r,i=":"+n.line,e=n.column;t=i+(null==(r=null==e?null:":"+e)?"":r)}return null==t?"":t}function Us(n){var t;ec();var r,i=n.problemId;n:{for(var e=0,u=i.length;e<u;){var o=i[e];if(e=e+1|0,"compilation"===o.name){r=o;break n}}r=null}if(null!=r){var f,s=n.problemId;n:{for(var c=0,a=s.length;c<a;){var h=s[c];if(c=c+1|0,"java"===h.name){f=h;break n}}f=null}t=!(null==f)}else t=!1;return t}function Vs(n){return ec(),n.path}function Qs(n){return ec(),n.pluginId}function Zs(n){return ec(),n.taskPath}function Ys(n){return function(t){return t.ed(n.ef_1),t.fd(n.df_1),br()}}function Ws(n){return ec(),n.name}function Ks(n){return function(t){return t.xd(function(n,t,r,i){i=i!==A&&i;var e=new RegExp(Ii().t7(" "),i?"gui":"gu"),u=Ii().u7(" ");return n.replace(e,u)}(n),""),br()}}function Xs(n){return function(t){var r;return t.ed("- "),t.fd((r=n,ec(),null!=r.path?""+r.path+Gs(r):null!=r.taskPath?we(r.taskPath):"<undefined>")),br()}}function Js(){return Is(),kn}function nc(){return Is(),qn}function tc(){return Is(),yn}function rc(){return Is(),Bn}function ic(){return Is(),Cn}function ec(){jn||(jn=!0,wn=Ls(Vs),bn=Ls(Qs),pn=Ls(Zs),mn=0)}function uc(n){sc.call(this),this.lf_1=n}function oc(n,t){t=t!==A&&t,sc.call(this),this.mf_1=n,this.nf_1=t}function fc(n,t){t=t===A?null:t,to.call(this),this.of_1=n,this.pf_1=t}function sc(){to.call(this)}function cc(n){Fc.call(this),this.qf_1=n}function ac(n){Fc.call(this),this.rf_1=n}function hc(n){Fc.call(this),this.sf_1=n}function lc(n){Fc.call(this),this.tf_1=n}function _c(n){Fc.call(this),this.uf_1=n}function vc(n){gc.call(this),this.vf_1=n}function dc(n,t,r,i,e,u,o,f,s,c){this.wf_1=n,this.xf_1=t,this.yf_1=r,this.zf_1=i,this.ag_1=e,this.bg_1=u,this.cg_1=o,this.dg_1=f,this.eg_1=s,this.fg_1=c}function gc(){Oc.call(this)}function wc(n,t){var r=Or();po(t.zf_1)>0&&r.d(yc(0,Js(),t.fg_1,t.eg_1)),po(t.ag_1)>0&&r.d(yc(0,nc(),t.fg_1,t.eg_1)),po(t.bg_1)>0&&r.d(yc(0,tc(),t.fg_1,t.eg_1)),po(t.cg_1)>0&&r.d(yc(0,rc(),t.fg_1,t.eg_1)),po(t.dg_1)>0&&r.d(yc(0,ic(),t.fg_1,t.eg_1));var i=Hf(),e=us(jc),u=Hf().y9(us(Pc),[]),o=function(n,t){var r,i=Hf(),e=us(Ec),u=Gf().ga("Learn more about "),o=Yf();return i.y9(e,[u,o.fb(us((r=t,function(n){return n.bd(r.tc_1),br()})),t.sc_1),Gf().ga(".")])}(0,t.yf_1),f=Hf().y9(us(Ic),[pc(0,t)]),s=Hf();return i.y9(e,[u,o,f,s.zd(us(Sc),r)])}function bc(n,t){var r,i,e=Hf(),u=us(zc);switch(t.fg_1.q8_1){case 0:r=Bc(0,t.zf_1,((i=function(n){return new cc(n)}).callableName="<init>",i));break;case 1:r=Bc(0,t.ag_1,function(){var n=function(n){return new ac(n)};return n.callableName="<init>",n}());break;case 2:r=Bc(0,t.bg_1,function(){var n=function(n){return new hc(n)};return n.callableName="<init>",n}());break;case 3:r=Bc(0,t.cg_1,function(){var n=function(n){return new lc(n)};return n.callableName="<init>",n}());break;case 4:r=Bc(0,t.dg_1,function(){var n=function(n){return new _c(n)};return n.callableName="<init>",n}());break;default:be()}return e.y9(u,[r])}function pc(n,t){return Hf().ja([qc(0,t),mc(0,t)])}function mc(n,t){for(var r=Hf(),i=t.xf_1,e=Or(),u=0,o=i.f();o.g();){var f=o.h(),s=u;u=s+1|0,Et(e,0===yr(s)?qr(kc(Nc(),f)):Bt([Wf().ja([]),kc(Nc(),f)]))}return r.ha(e)}function kc(n,t){return Uf().ja([Uc(t)])}function qc(n,t){return Rf().ja([$c().ka(t.wf_1)])}function yc(n,t,r,i){var e,u,o,f;return Hf().y9(us((e=i,u=t,o=r,function(n){return n.t9("group-selector"),0===e?(n.t9("group-selector--disabled"),br()):u.equals(o)?(n.t9("group-selector--active"),br()):(n.u9(function(n){return function(t){return new vc(n)}}(u)),br()),br()})),[Gf().rc(t.cf_1,[(f=i,Gf().y9(us(Tc),[io(),eo(),Gf().ga(""+f),uo()]))])])}function Bc(n,t,r){return function(n,t,r){var i,e=Hf(),u=Vf();return e.ja([u.ha(Ps(t,(i=r,function(n){return function(n,t,r,i){var e,u;return t instanceof uc?Uc(Sf().rd(t.lf_1)):t instanceof oc?Hf().y9(us((u=t,function(n){return u.nf_1&&(n.t9("uncategorized"),br()),br()})),[Hf().ja([Qc(r,i),Uc(t.mf_1)])]):t instanceof Vu?Wc(i,r,t):t instanceof Wu?Uc(t.za_1):t instanceof Ku?Hf().ja([(sa(),Tn),Uc(t.ab_1)]):t instanceof Xu?Hf().ja([Qc(r,i),Uc(t.bb_1)]):t instanceof Zu?Kc(i,((e=function(n){return Cc(0,n)}).callableName="viewIt",e),r,t.va_1,t.wa_1,Rc()):t instanceof fc?Kc(i,function(){var n=function(n){return Cc(0,n)};return n.callableName="viewIt",n}(),r,t.of_1,t.pf_1,(sa(),Sn)):t instanceof Yu?Kc(i,function(){var n=function(n){return Cc(0,n)};return n.callableName="viewIt",n}(),r,t.xa_1,t.ya_1,Hc()):t instanceof no?Hf().ja([Qc(r,i),Uc(Sf().rd(t.eb_1))]):Gf().ga("Unknown node type viewNode: "+t)}(Nc(),n.cd().ub_1,n,i)})))])}(0,t.xb_1.uc().vc(),r)}function Cc(n,t){var r;if(t instanceof Ju)r=Jo(t);else if(t instanceof no)r=Uc(Sf().rd(t.eb_1));else if(t instanceof Wu)r=Uc(t.za_1);else{var i="Unknown node type viewIt: "+t;console.error(i),r=Gf().ga(i)}return r}function xc(n){return n.t9("report-wrapper"),br()}function jc(n){return n.t9("header"),br()}function Pc(n){return n.t9("gradle-logo"),br()}function Ic(n){return n.t9("title"),br()}function Sc(n){return n.t9("groups"),br()}function zc(n){return n.t9("content"),br()}function Tc(n){return n.t9("group-selector__count"),br()}function Ec(n){return n.t9("learn-more"),br()}function Lc(){Pn=this,document.title="Gradle - Problems Report"}function Nc(){return null==Pn&&new Lc,Pn}function Ac(n,t,r){return n.pe(t.zb().oe(),r)}function Mc(n){Oc.call(this),this.hd_1=n}function Fc(){Oc.call(this)}function Dc(n,t){Oc.call(this),this.wc_1=n,this.xc_1=t}function Oc(){}function Rc(){return sa(),In}function Hc(){return sa(),zn}function $c(){return sa(),En}function Gc(){return sa(),Ln}function Uc(n){return sa(),Gc().ka(n)}function Vc(n){return sa(),Gc().ka(Sf().qd(n))}function Qc(n,t){return sa(),n.cd().ye()?Xc(n,t):function(n){return sa(),Gf().fb(us(oa),Jc(n))}(n)}function Zc(n,t,r,i){var e,u,o;return sa(),Gf().fb(us((e=r,u=t,o=i,function(n){return n.t9("java-exception-part-toggle"),n.u9(function(n,t){return function(r){return new Dc(n,t())}}(u,o)),n.s9("Click to "+function(n){var t;switch(sa(),n.q8_1){case 0:t="show";break;case 1:t="hide";break;default:be()}return t}(e)),br()})),"("+n+" internal "+qf("line",n)+" "+function(n){var t;switch(sa(),n.q8_1){case 0:t="hidden";break;case 1:t="shown";break;default:be()}return t}(r)+")")}function Yc(n,t){t=t===A?Of():t,sa();for(var r=Qf(),i=Rr(Tt(n,10)),e=0,u=n.f();u.g();){var o,f=e;e=f+1|0,s=u.h(),c=(c=0===yr(f)?t:Of())===A?Of():c,sa(),o=Zf().ja([$f().ga(s),c]),i.d(o)}var s,c;return r.ha(i)}function Wc(n,t,r){sa();var i,e,u,o=Hf(),f=Xc(t,n),s=Gf().ga("Exception"),c=Gf().ja([(sa(),Nn).v9(r.na_1,"Copy exception to the clipboard")]),a=null==r.ma_1?null:Gf().ga(" "),h=null==a?Of():a,l=r.ma_1,_=null==l?null:Uc(l),v=null==_?Of():_;switch(t.cd().wb_1.q8_1){case 0:i=Of();break;case 1:i=function(n,t){sa();for(var r=Hf(),i=us(fa),e=n.oa_1,u=Rr(Tt(e,10)),o=0,f=e.f();f.g();){var s,c=f.h(),a=o;o=a+1|0;var h,l=yr(a);if(null!=c.sa_1){var _,v=Zc(c.ra_1.k(),l,c.sa_1,t),d=c.sa_1;switch(null==d?-1:d.q8_1){case 0:_=Yc(Kn(c.ra_1,1),v);break;case 1:_=Yc(c.ra_1,v);break;default:be()}h=_}else h=Yc(c.ra_1);s=h,u.d(s)}return r.zd(i,u)}(r,(e=n,u=t,function(){return e(new vs(u))}));break;default:be()}return o.ja([f,s,c,h,v,i])}function Kc(n,t,r,i,e,u,o){e=e===A?null:e,u=u===A?Of():u,o=o===A?Of():o,sa();var f=Hf(),s=Qc(r,n),c=t(i),a=null==e?null:t(e);return f.ja([s,u,c,null==a?Of():a,o])}function Xc(n,t){var r,i;return sa(),Gf().fb(us((r=n,i=t,function(n){return n.gb(["invisible-text","tree-btn"]),r.cd().wb_1===Cs()&&(n.t9("collapsed"),br()),r.cd().wb_1===xs()&&(n.t9("expanded"),br()),n.s9("Click to "+function(n){var t;switch(sa(),n.q8_1){case 0:t="expand";break;case 1:t="collapse";break;default:be()}return t}(r.cd().wb_1)),n.u9(function(n,t){return function(r){return n(new vs(t))}}(i,r)),br()})),Jc(n))}function Jc(n){return sa(),function(n,t){var r;if(!(t>=0))throw _u(ce("Count 'n' must be non-negative, but was "+t+"."));switch(t){case 0:r="";break;case 1:r=ce(n);break;default:var i="";if(0!==re(n))for(var e=ce(n),u=t;1&~u||(i+=e),0!=(u=u>>>1|0);)e+=e;return i}return r}("    ",n.we()-1|0)+"- "}function na(n){return sa(),n.gb(["invisible-text","error-icon"]),br()}function ta(n){return sa(),n.gb(["invisible-text","advice-icon"]),br()}function ra(n){return sa(),n.gb(["invisible-text","warning-icon"]),br()}function ia(n){return sa(),n.gb(["invisible-text","enum-icon"]),br()}function ea(n){return sa(),new Mc(n)}function ua(n){return sa(),new Mc(n)}function oa(n){return sa(),n.gb(["invisible-text","leaf-icon"]),br()}function fa(n){return sa(),n.t9("java-exception"),br()}function sa(){if(!An){An=!0;var n=Gf();In=n.fb(us(na),"[error] ");var t=Gf();Sn=t.fb(us(ta),"[advice] ");var r=Gf();zn=r.fb(us(ra),"[warn]  ");var i=Gf();Tn=i.fb(us(ia),"[enum]  "),En=new Uu,Ln=new Uu(ea),Nn=new $u(ua)}}return We(tt,A,Qe),We(ft,A,Qe),We(st,A,Qe),We(Di,"Collection",tu),We(ct,"AbstractCollection",Qe,A,[Di]),We(at,"IteratorImpl",Qe),We(ht,"ListIteratorImpl",Qe,at),We(lt,"Companion",iu),We(Fi,"List",tu,A,[Di]),We(vt,"AbstractList",Qe,ct,[ct,Fi]),We(dt,A,Qe),We(bt,"Companion",iu),We(mt,A,Qe,ct),We(Ri,"Map",tu),We(kt,"AbstractMap",Qe,A,[Ri]),We(qt,"Companion",iu),We(bi,"RandomAccess",tu),We(Pt,"EmptyList",iu,A,[Fi,bi]),We(It,"ArrayAsCollection",Qe,A,[Di]),We(St,"EmptyIterator",iu),We(Lt,"IntIterator",Qe),We(Nt,A,Qe),We(At,"ReversedListReadOnly",Qe,vt),We(Mt,A,Qe),We(Ft,"TransformingSequence",Qe),We(Ot,A,Qe),We(Rt,"FilteringSequence",Qe),We($i,"Set",tu,A,[Di]),We($t,"EmptySet",iu,A,[$i]),We(Vt,"Companion",iu),We(Xt,"IntProgression",Qe),We(Zt,"IntRange",Qe,Xt),We(Yt,"IntProgressionIterator",Qe,Lt),We(Wt,"Companion",iu),We(ar,A,Qe),We(hr,"DelimitedRangesSequence",Qe),We(lr,"Pair",Qe),We(vr,"CharSequence",tu),We(dr,"Comparable",tu),We(gr,"Number",Qe),We(wr,"Unit",iu),We(pr,"IntCompanionObject",iu),We(xr,"AbstractMutableCollection",Qe,ct,[ct,Di]),We(jr,"IteratorImpl",Qe),We(Pr,"ListIteratorImpl",Qe,jr),We(Ir,"AbstractMutableList",Qe,xr,[xr,Di,Fi]),We(Sr,A,Qe),We(zr,A,Qe),We(Oi,"Entry",tu),We(Hi,"MutableEntry",tu,A,[Oi]),We(Tr,"SimpleEntry",Qe,A,[Hi]),We(Mr,"AbstractMutableSet",Qe,xr,[xr,$i,Di]),We(Er,"AbstractEntrySet",Qe,Mr),We(Lr,A,Qe,Mr),We(Nr,A,Qe,xr),We(Ar,"AbstractMutableMap",Qe,kt,[kt,Ri]),We(Fr,"Companion",iu),We(Gr,"ArrayList",Qe,Ir,[Ir,Di,Fi,bi]),We(Qr,"HashCode",iu),We(Zr,"EntrySet",Qe,Er),We(Xr,"HashMap",Qe,Ar,[Ar,Ri]),We(ni,"HashSet",Qe,Mr,[Mr,$i,Di]),We(ei,A,Qe),We(oi,"InternalMap",tu),We(ui,"InternalHashCodeMap",Qe,A,[oi]),We(fi,"EntryIterator",Qe),We(si,"Companion",iu),We(ai,"ChainEntry",Qe,Tr),We(hi,"EntrySet",Qe,Er),We(vi,"LinkedHashMap",Qe,Xr,[Xr,Ri]),We(di,"Companion",iu),We(wi,"LinkedHashSet",Qe,ni,[ni,$i,Di]),We(pi,"BaseOutput",Qe),We(mi,"NodeJsOutput",Qe,pi),We(qi,"BufferedOutput",Qe,pi),We(ki,"BufferedOutputToConsoleLog",Qe,qi),We(Ci,"StringBuilder",Qe,A,[vr]),We(Pi,"Companion",iu),We(Si,"Regex",Qe),We(Ni,"Companion",iu),We(Mi,"Char",Qe,A,[dr]),We(Gi,"Companion",iu),We(Ui,"Enum",Qe,A,[dr]),We(Zi,A,Qe),We(me,"Companion",iu),We(ke,"Long",Qe,gr,[gr,dr]),We(cu,"Letter",iu),We(hu,"OtherLowercase",iu),We(ku,"Exception",Qe,Error),We(Bu,"RuntimeException",Qe,ku),We(vu,"IllegalArgumentException",Qe,Bu),We(gu,"IndexOutOfBoundsException",Qe,Bu),We(bu,"IllegalStateException",Qe,Bu),We(ju,"NoSuchElementException",Qe,Bu),We(Iu,"ArithmeticException",Qe,Bu),We(Tu,"UnsupportedOperationException",Qe,Bu),We(Lu,"NullPointerException",Qe,Bu),We(Au,"NoWhenBranchMatchedException",Qe,Bu),We(Fu,"ClassCastException",Qe,Bu),We(Ou,"UninitializedPropertyAccessException",Qe,Bu),We(Hu,"Model",Qe),We($u,"CopyButtonComponent",Qe),We(Uu,"PrettyTextComponent",Qe),We(to,"ProblemNode",Qe),We(Vu,"Exception",Qe,to),We(Qu,"StackTracePart",Qe),We(Zu,"Error",Qe,to),We(Yu,"Warning",Qe,to),We(Wu,"Message",Qe,to),We(Ku,"ListElement",Qe,to),We(Xu,"TreeNode",Qe,to),We(Ju,"Link",Qe,to),We(no,"Label",Qe,to),We(co,"Info",Qe,to),We(ao,"Project",Qe,to),We(ho,"Task",Qe,to),We(lo,"TaskPath",Qe,to),We(_o,"Bean",Qe,to),We(vo,"SystemProperty",Qe,to),We(go,"Property",Qe,to),We(wo,"BuildLogic",Qe,to),We(bo,"BuildLogicClass",Qe,to),We(Oc,"BaseIntent",Qe),We(Fc,"TreeIntent",Qe,Oc),We(ko,"TaskTreeIntent",Qe,Fc),We(qo,"MessageTreeIntent",Qe,Fc),We(yo,"InputTreeIntent",Qe,Fc),We(Bo,"IncompatibleTaskTreeIntent",Qe,Fc),We(Po,"Intent",Qe,Oc),We(Co,"SetTab",Qe,Po),We(xo,"Model",Qe),We(jo,"Tab",Qe,Ui),We(Ko,"ConfigurationCacheReportPage",iu),We(nf,"ImportedProblem",Qe),We(tf,"ImportedDiagnostics",Qe),We(_f,"sam$kotlin_Comparator$0",Qe),We(Bf,"LearnMore",Qe),We(jf,"Fragment",Qe),We(Cf,"Text",Qe,jf),We(xf,"Reference",Qe,jf),We(Pf,"Builder",Qe),We(If,"Companion",iu),We(zf,"PrettyText",Qe),We(Tf,"Companion",iu),We(Af,"Trie",Qe),We(Kf,"ViewFactory",Qe),We(Xf,"Companion",iu),We(es,"View",Qe),We(ns,"Empty",iu,es),We(rs,"Element",Qe,es),We(is,"MappedView",Qe,es),We(os,"Attributes",Qe),We(as,"Attribute",Qe),We(fs,"OnEvent",Qe,as),We(ss,"ClassName",Qe,as),We(cs,"Named",Qe,as),We(gs,"Intent",Qe),We(vs,"Toggle",Qe,gs),We(ds,"Model",Qe),We(bs,"TreeView",iu),We(Bs,"Focus",Qe),We(ks,"Original",Qe,Bs),We(qs,"Child",Qe,Bs),We(ys,"ViewState",Qe,Ui),We(js,"Tree",Qe),We(Ss,"Tab",Qe,Ui),We(zs,"ProblemIdElement",Qe),We(Ts,"ProblemSummary",Qe),We(Ms,"ProblemNodeGroup",Qe),We(sc,"ProblemApiNode",Qe,to),We(uc,"Text",Qe,sc),We(oc,"ProblemIdNode",Qe,sc),We(fc,"Advice",Qe,to),We(cc,"MessageTreeIntent",Qe,Fc),We(ac,"ProblemIdTreeIntent",Qe,Fc),We(hc,"FileLocationTreeIntent",Qe,Fc),We(lc,"PluginLocationTreeIntent",Qe,Fc),We(_c,"TaskLocationTreeIntent",Qe,Fc),We(gc,"Intent",Qe,Oc),We(vc,"SetTab",Qe,gc),We(dc,"Model",Qe),We(Lc,"ProblemsReportPage",iu),We(Mc,"Copy",Qe,Oc),We(Dc,"ToggleStackTracePart",Qe,Oc),ve(tt).f=function(){return this.n_1.f()},ve(ft).f=function(){return this.r_1.f()},ve(st).f=function(){var n,t,r=function(n,t){for(var r=n.f();r.g();){var i=r.h();t.d(i)}return t}(this.s_1,Or());return n=r,t=this.t_1,function(n,t){if(n.k()<=1)return br();var r=Br(n);!function(n,t){if(function(){if(null!=l)return l;l=!1;var n=[],t=0;if(t<600)do{var r=t;t=t+1|0,n.push(r)}while(t<600);var i=Vr;n.sort(i);var e=1,u=n.length;if(e<u)do{var o=e;e=e+1|0;var f=n[o-1|0],s=n[o];if((3&f)==(3&s)&&f>=s)return!1}while(e<u);return l=!0,!0}()){var r=(i=t,function(n,t){return i.compare(n,t)});n.sort(r)}else!function(n,t,r,i){var e=n.length,u=function(n){var t=0,r=n.length-1|0;if(t<=r)do{var i=t;t=t+1|0,n[i]=null}while(i!==r);return n}(Array(e)),o=Ur(n,u,0,r,i);if(o!==n){var f=0;if(f<=r)do{var s=f;f=f+1|0,n[s]=o[s]}while(s!==r)}}(n,0,Rn(n),t);var i}(r,t);var i=0,e=r.length;if(i<e)do{var u=i;i=i+1|0,n.f4(u,r[u])}while(i<e)}(n,t),r.f()},ve(ct).u=function(n){var t;n:if(Ke(this,Di)&&this.i())t=!1;else{for(var r=this.f();r.g();)if(le(r.h(),n)){t=!0;break n}t=!1}return t},ve(ct).v=function(n){var t;n:if(Ke(n,Di)&&n.i())t=!0;else{for(var r=n.f();r.g();){var i=r.h();if(!this.u(i)){t=!1;break n}}t=!0}return t},ve(ct).i=function(){return 0===this.k()},ve(ct).toString=function(){return $n(this,", ","[","]",A,A,(n=this,function(t){return t===n?"(this Collection)":Vi(t)}));var n},ve(ct).toArray=function(){return kr(this)},ve(at).g=function(){return this.w_1<this.x_1.k()},ve(at).h=function(){if(!this.g())throw Cu();var n=this.w_1;return this.w_1=n+1|0,this.x_1.j(n)},ve(ht).c1=function(){return this.w_1>0},ve(ht).d1=function(){if(!this.c1())throw Cu();return this.w_1=this.w_1-1|0,this.a1_1.j(this.w_1)},ve(lt).e1=function(n,t){if(n<0||n>=t)throw du("index: "+n+", size: "+t)},ve(lt).b1=function(n,t){if(n<0||n>t)throw du("index: "+n+", size: "+t)},ve(lt).f1=function(n){for(var t=1,r=n.f();r.g();){var i=r.h(),e=Mn(31,t),u=null==i?null:ae(i);t=e+(null==u?0:u)|0}return t},ve(lt).g1=function(n,t){if(n.k()!==t.k())return!1;for(var r=t.f(),i=n.f();i.g();)if(!le(i.h(),r.h()))return!1;return!0},ve(vt).f=function(){return new at(this)},ve(vt).l=function(n){return new ht(this,n)},ve(vt).equals=function(n){return n===this||!(null==n||!Ke(n,Fi))&&_t().g1(this,n)},ve(vt).hashCode=function(){return _t().f1(this)},ve(dt).g=function(){return this.h1_1.g()},ve(dt).h=function(){return this.h1_1.h().i1()},ve(bt).k1=function(n){var t=n.j1(),r=null==t?null:ae(t),i=null==r?0:r,e=n.i1(),u=null==e?null:ae(e);return i^(null==u?0:u)},ve(bt).l1=function(n){return Vi(n.j1())+"="+Vi(n.i1())},ve(bt).m1=function(n,t){return!(null==t||!Ke(t,Oi))&&!!le(n.j1(),t.j1())&&le(n.i1(),t.i1())},ve(mt).r1=function(n){return this.q1_1.s1(n)},ve(mt).u=function(n){return!(null!=n&&!Je(n))&&this.r1(null==n||Je(n)?n:pe())},ve(mt).f=function(){return new dt(this.q1_1.o().f())},ve(mt).k=function(){return this.q1_1.k()},ve(kt).t1=function(n){return!(null==wt(this,n))},ve(kt).s1=function(n){var t;n:{var r=this.o();if(Ke(r,Di)&&r.i())t=!1;else{for(var i=r.f();i.g();)if(le(i.h().i1(),n)){t=!0;break n}t=!1}}return t},ve(kt).u1=function(n){if(null==n||!Ke(n,Oi))return!1;var t=n.j1(),r=n.i1(),i=(Ke(this,Ri)?this:pe()).v1(t);return!(!le(r,i)||null==i&&!(Ke(this,Ri)?this:pe()).t1(t))},ve(kt).equals=function(n){if(n===this)return!0;if(null==n||!Ke(n,Ri))return!1;if(this.k()!==n.k())return!1;var t;n:{var r=n.o();if(Ke(r,Di)&&r.i())t=!0;else{for(var i=r.f();i.g();){var e=i.h();if(!this.u1(e)){t=!1;break n}}t=!0}}return t},ve(kt).v1=function(n){var t=wt(this,n);return null==t?null:t.i1()},ve(kt).hashCode=function(){return ae(this.o())},ve(kt).i=function(){return 0===this.k()},ve(kt).k=function(){return this.o().k()},ve(kt).toString=function(){var n;return $n(this.o(),", ","{","}",A,A,(n=this,function(t){return n.p1(t)}))},ve(kt).p1=function(n){return gt(this,n.j1())+"="+gt(this,n.i1())},ve(kt).w1=function(){return null==this.o1_1&&(this.o1_1=new mt(this)),we(this.o1_1)},ve(qt).x1=function(n){for(var t=0,r=n.f();r.g();){var i=r.h(),e=t,u=null==i?null:ae(i);t=e+(null==u?0:u)|0}return t},ve(qt).y1=function(n,t){return n.k()===t.k()&&n.v(t)},ve(Pt).equals=function(n){return!(null==n||!Ke(n,Fi))&&n.i()},ve(Pt).hashCode=function(){return 1},ve(Pt).toString=function(){return"[]"},ve(Pt).k=function(){return 0},ve(Pt).i=function(){return!0},ve(Pt).a2=function(n){return n.i()},ve(Pt).v=function(n){return this.a2(n)},ve(Pt).j=function(n){throw du("Empty list doesn't contain element at index "+n+".")},ve(Pt).f=function(){return zt()},ve(Pt).l=function(n){if(0!==n)throw du("Index: "+n);return zt()},ve(It).k=function(){return this.b2_1.length},ve(It).i=function(){return 0===this.b2_1.length},ve(It).d2=function(n){return function(n,t){return Hn(n,t)>=0}(this.b2_1,n)},ve(It).e2=function(n){var t;n:if(Ke(n,Di)&&n.i())t=!0;else{for(var r=n.f();r.g();){var i=r.h();if(!this.d2(i)){t=!1;break n}}t=!0}return t},ve(It).v=function(n){return this.e2(n)},ve(It).f=function(){return Qi(this.b2_1)},ve(St).g=function(){return!1},ve(St).c1=function(){return!1},ve(St).h=function(){throw Cu()},ve(St).d1=function(){throw Cu()},ve(Lt).h=function(){return this.f2()},ve(Nt).g=function(){return this.g2_1.c1()},ve(Nt).c1=function(){return this.g2_1.g()},ve(Nt).h=function(){return this.g2_1.d1()},ve(Nt).d1=function(){return this.g2_1.h()},ve(At).k=function(){return this.i2_1.k()},ve(At).j=function(n){return this.i2_1.j(function(n,t){if(!(0<=t&&t<=jt(n)))throw du("Element index "+t+" must be in range ["+Ve(0,jt(n))+"].");return jt(n)-t|0}(this,n))},ve(At).f=function(){return this.l(0)},ve(At).l=function(n){return new Nt(this,n)},ve(Mt).h=function(){return this.k2_1.m2_1(this.j2_1.h())},ve(Mt).g=function(){return this.j2_1.g()},ve(Ft).f=function(){return new Mt(this)},ve(Ot).h=function(){if(-1===this.o2_1&&Dt(this),0===this.o2_1)throw Cu();var n=this.p2_1;return this.p2_1=null,this.o2_1=-1,null==n||Je(n)?n:pe()},ve(Ot).g=function(){return-1===this.o2_1&&Dt(this),1===this.o2_1},ve(Rt).f=function(){return new Ot(this)},ve($t).equals=function(n){return!(null==n||!Ke(n,$i))&&n.i()},ve($t).hashCode=function(){return 0},ve($t).toString=function(){return"[]"},ve($t).k=function(){return 0},ve($t).i=function(){return!0},ve($t).a2=function(n){return n.i()},ve($t).v=function(n){return this.a2(n)},ve($t).f=function(){return zt()},ve(Zt).y2=function(){return this.z2_1},ve(Zt).c3=function(){return this.a3_1},ve(Zt).i=function(){return this.z2_1>this.a3_1},ve(Zt).equals=function(n){return n instanceof Zt&&(!(!this.i()||!n.i())||this.z2_1===n.z2_1&&this.a3_1===n.a3_1)},ve(Zt).hashCode=function(){return this.i()?-1:Mn(31,this.z2_1)+this.a3_1|0},ve(Zt).toString=function(){return this.z2_1+".."+this.a3_1},ve(Yt).g=function(){return this.f3_1},ve(Yt).f2=function(){var n=this.g3_1;if(n===this.e3_1){if(!this.f3_1)throw Cu();this.f3_1=!1}else this.g3_1=this.g3_1+this.d3_1|0;return n},ve(Wt).q=function(n,t,r){return new Xt(n,t,r)},ve(Xt).f=function(){return new Yt(this.z2_1,this.a3_1,this.b3_1)},ve(Xt).i=function(){return this.b3_1>0?this.z2_1>this.a3_1:this.z2_1<this.a3_1},ve(Xt).equals=function(n){return n instanceof Xt&&(!(!this.i()||!n.i())||this.z2_1===n.z2_1&&this.a3_1===n.a3_1&&this.b3_1===n.b3_1)},ve(Xt).hashCode=function(){return this.i()?-1:Mn(31,Mn(31,this.z2_1)+this.a3_1|0)+this.b3_1|0},ve(Xt).toString=function(){return this.b3_1>0?this.z2_1+".."+this.a3_1+" step "+this.b3_1:this.z2_1+" downTo "+this.a3_1+" step "+(0|-this.b3_1)},ve(ar).h=function(){if(-1===this.j3_1&&cr(this),0===this.j3_1)throw Cu();var n=this.m3_1,t=n instanceof Zt?n:pe();return this.m3_1=null,this.j3_1=-1,t},ve(ar).g=function(){return-1===this.j3_1&&cr(this),1===this.j3_1},ve(hr).f=function(){return new ar(this)},ve(lr).toString=function(){return"("+this.t3_1+", "+this.u3_1+")"},ve(lr).v3=function(){return this.t3_1},ve(lr).w3=function(){return this.u3_1},ve(lr).hashCode=function(){var n=null==this.t3_1?0:ae(this.t3_1);return Mn(n,31)+(null==this.u3_1?0:ae(this.u3_1))|0},ve(lr).equals=function(n){if(this===n)return!0;if(!(n instanceof lr))return!1;var t=n instanceof lr?n:pe();return!!le(this.t3_1,t.t3_1)&&!!le(this.u3_1,t.u3_1)},ve(wr).toString=function(){return"kotlin.Unit"},ve(pr).b4=function(){return this.MIN_VALUE},ve(pr).c4=function(){return this.MAX_VALUE},ve(pr).d4=function(){return this.SIZE_BYTES},ve(pr).e4=function(){return this.SIZE_BITS},ve(xr).m=function(n){this.g4();for(var t=!1,r=n.f();r.g();){var i=r.h();this.d(i)&&(t=!0)}return t},ve(xr).toJSON=function(){return this.toArray()},ve(xr).g4=function(){},ve(jr).g=function(){return this.h4_1<this.j4_1.k()},ve(jr).h=function(){if(!this.g())throw Cu();var n=this.h4_1;return this.h4_1=n+1|0,this.i4_1=n,this.j4_1.j(this.i4_1)},ve(Pr).c1=function(){return this.h4_1>0},ve(Pr).d1=function(){if(!this.c1())throw Cu();return this.h4_1=this.h4_1-1|0,this.i4_1=this.h4_1,this.n4_1.j(this.i4_1)},ve(Ir).d=function(n){return this.g4(),this.p4(this.k(),n),!0},ve(Ir).f=function(){return new jr(this)},ve(Ir).u=function(n){return this.q4(n)>=0},ve(Ir).q4=function(n){var t=0,r=jt(this);if(t<=r)do{var i=t;if(t=t+1|0,le(this.j(i),n))return i}while(i!==r);return-1},ve(Ir).l=function(n){return new Pr(this,n)},ve(Ir).equals=function(n){return n===this||!(null==n||!Ke(n,Fi))&&_t().g1(this,n)},ve(Ir).hashCode=function(){return _t().f1(this)},ve(Sr).g=function(){return this.r4_1.g()},ve(Sr).h=function(){return this.r4_1.h().j1()},ve(zr).g=function(){return this.s4_1.g()},ve(zr).h=function(){return this.s4_1.h().i1()},ve(Tr).j1=function(){return this.t4_1},ve(Tr).i1=function(){return this.u4_1},ve(Tr).v4=function(n){var t=this.u4_1;return this.u4_1=n,t},ve(Tr).hashCode=function(){return pt().k1(this)},ve(Tr).toString=function(){return pt().l1(this)},ve(Tr).equals=function(n){return pt().m1(this,n)},ve(Er).u=function(n){return this.w4(n)},ve(Lr).y4=function(n){throw zu("Add is not supported on keys")},ve(Lr).d=function(n){return this.y4(null==n||Je(n)?n:pe())},ve(Lr).z4=function(n){return this.x4_1.t1(n)},ve(Lr).u=function(n){return!(null!=n&&!Je(n))&&this.z4(null==n||Je(n)?n:pe())},ve(Lr).f=function(){return new Sr(this.x4_1.o().f())},ve(Lr).k=function(){return this.x4_1.k()},ve(Lr).g4=function(){return this.x4_1.g4()},ve(Nr).f5=function(n){throw zu("Add is not supported on values")},ve(Nr).d=function(n){return this.f5(null==n||Je(n)?n:pe())},ve(Nr).r1=function(n){return this.e5_1.s1(n)},ve(Nr).u=function(n){return!(null!=n&&!Je(n))&&this.r1(null==n||Je(n)?n:pe())},ve(Nr).f=function(){return new zr(this.e5_1.o().f())},ve(Nr).k=function(){return this.e5_1.k()},ve(Nr).g4=function(){return this.e5_1.g4()},ve(Ar).g5=function(){return null==this.c5_1&&(this.c5_1=new Lr(this)),we(this.c5_1)},ve(Ar).w1=function(){return null==this.d5_1&&(this.d5_1=new Nr(this)),we(this.d5_1)},ve(Ar).g4=function(){},ve(Mr).equals=function(n){return n===this||!(null==n||!Ke(n,$i))&&yt().y1(this,n)},ve(Mr).hashCode=function(){return yt().x1(this)},ve(Gr).j5=function(){return this.g4(),this.c_1=!0,this.k()>0?this:Dr().i5_1},ve(Gr).k=function(){return this.b_1.length},ve(Gr).j=function(n){var t=this.b_1[$r(this,n)];return null==t||Je(t)?t:pe()},ve(Gr).f4=function(n,t){this.g4(),$r(this,n);var r=this.b_1[n];this.b_1[n]=t;var i=r;return null==i||Je(i)?i:pe()},ve(Gr).d=function(n){return this.g4(),this.b_1.push(n),this.o4_1=this.o4_1+1|0,!0},ve(Gr).p4=function(n,t){this.g4(),this.b_1.splice(function(n,t){return _t().b1(t,n.k()),t}(this,n),0,t),this.o4_1=this.o4_1+1|0},ve(Gr).m=function(n){if(this.g4(),n.i())return!1;for(var t,r,i,e=(t=this,r=n.k(),i=t.k(),t.b_1.length=t.k()+r|0,i),u=0,o=n.f();o.g();){var f=o.h(),s=u;u=s+1|0;var c=yr(s);this.b_1[e+c|0]=f}return this.o4_1=this.o4_1+1|0,!0},ve(Gr).q4=function(n){return Hn(this.b_1,n)},ve(Gr).toString=function(){return On(this.b_1,", ","[","]",A,A,ee)},ve(Gr).k5=function(){return[].slice.call(this.b_1)},ve(Gr).toArray=function(){return this.k5()},ve(Gr).g4=function(){if(this.c_1)throw Su()},ve(Qr).l5=function(n,t){return le(n,t)},ve(Qr).m5=function(n){var t=null==n?null:ae(n);return null==t?0:t},ve(Zr).o5=function(n){throw zu("Add is not supported on entries")},ve(Zr).d=function(n){return this.o5(null!=n&&Ke(n,Hi)?n:pe())},ve(Zr).w4=function(n){return this.n5_1.u1(n)},ve(Zr).f=function(){return this.n5_1.t5_1.f()},ve(Zr).k=function(){return this.n5_1.k()},ve(Xr).t1=function(n){return this.t5_1.z4(n)},ve(Xr).s1=function(n){var t;n:{var r=this.t5_1;if(Ke(r,Di)&&r.i())t=!1;else{for(var i=r.f();i.g();){var e=i.h();if(this.u5_1.l5(e.i1(),n)){t=!0;break n}}t=!1}}return t},ve(Xr).o=function(){return null==this.v5_1&&(this.v5_1=this.x5()),we(this.v5_1)},ve(Xr).x5=function(){return new Zr(this)},ve(Xr).v1=function(n){return this.t5_1.v1(n)},ve(Xr).h5=function(n,t){return this.t5_1.h5(n,t)},ve(Xr).k=function(){return this.t5_1.k()},ve(ni).d=function(n){return null==this.y5_1.h5(n,this)},ve(ni).u=function(n){return this.y5_1.t1(n)},ve(ni).i=function(){return this.y5_1.i()},ve(ni).f=function(){return this.y5_1.g5().f()},ve(ni).k=function(){return this.y5_1.k()},ve(ei).g=function(){return-1===this.z5_1&&(this.z5_1=function(n){if(null!=n.c6_1&&n.d6_1){var t=n.c6_1.length;if(n.e6_1=n.e6_1+1|0,n.e6_1<t)return 0}if(n.b6_1=n.b6_1+1|0,n.b6_1<n.a6_1.length){n.c6_1=n.g6_1.i6_1[n.a6_1[n.b6_1]];var r=n,i=n.c6_1;return r.d6_1=null!=i&&Xe(i),n.e6_1=0,0}return n.c6_1=null,1}(this)),0===this.z5_1},ve(ei).h=function(){if(!this.g())throw Cu();var n=this.d6_1?this.c6_1[this.e6_1]:this.c6_1;return this.f6_1=n,this.z5_1=-1,n},ve(ui).w5=function(){return this.h6_1},ve(ui).k=function(){return this.j6_1},ve(ui).h5=function(n,t){var r=this.h6_1.m5(n),i=ii(this,r);if(null==i)this.i6_1[r]=new Tr(n,t);else{if(null==i||!Xe(i)){var e,u=i;return this.h6_1.l5(u.j1(),n)?u.v4(t):(e=[u,new Tr(n,t)],this.i6_1[r]=e,this.j6_1=this.j6_1+1|0,null)}var o=i,f=ri(o,this,n);if(null!=f)return f.v4(t);o.push(new Tr(n,t))}return this.j6_1=this.j6_1+1|0,null},ve(ui).z4=function(n){return!(null==ti(this,n))},ve(ui).v1=function(n){var t=ti(this,n);return null==t?null:t.i1()},ve(ui).f=function(){return new ei(this)},ve(fi).g=function(){return!(null===this.m6_1)},ve(fi).h=function(){if(!this.g())throw Cu();var n=we(this.m6_1);this.l6_1=n;var t,r=n.b7_1;return t=r!==this.n6_1.y6_1.v6_1?r:null,this.m6_1=t,n},ve(ai).v4=function(n){return this.d7_1.g4(),ve(Tr).v4.call(this,n)},ve(hi).o5=function(n){throw zu("Add is not supported on entries")},ve(hi).d=function(n){return this.o5(null!=n&&Ke(n,Hi)?n:pe())},ve(hi).w4=function(n){return this.y6_1.u1(n)},ve(hi).f=function(){return new fi(this)},ve(hi).k=function(){return this.y6_1.k()},ve(hi).g4=function(){return this.y6_1.g4()},ve(vi).j5=function(){var n;if(this.g4(),this.x6_1=!0,this.k()>0)n=this;else{var t=ci().e7_1;n=Ke(t,Ri)?t:pe()}return n},ve(vi).t1=function(n){return this.w6_1.t1(n)},ve(vi).s1=function(n){var t=this.v6_1;if(null==t)return!1;var r=t;do{if(le(r.i1(),n))return!0;r=we(r.b7_1)}while(r!==this.v6_1);return!1},ve(vi).x5=function(){return new hi(this)},ve(vi).v1=function(n){var t=this.w6_1.v1(n);return null==t?null:t.i1()},ve(vi).h5=function(n,t){this.g4();var r=this.w6_1.v1(n);if(null==r){var i=new ai(this,n,t);return this.w6_1.h5(n,i),function(n,t){if(null!=n.b7_1||null!=n.c7_1)throw wu(ce("Check failed."));var r=t.v6_1;if(null==r)t.v6_1=n,n.b7_1=n,n.c7_1=n;else{var i=r.c7_1;if(null==i)throw wu(ce("Required value was null."));var e=i;n.c7_1=e,n.b7_1=r,r.c7_1=n,e.b7_1=n}}(i,this),null}return r.v4(t)},ve(vi).k=function(){return this.w6_1.k()},ve(vi).g4=function(){if(this.x6_1)throw Su()},ve(wi).g4=function(){return this.y5_1.g4()},ve(pi).h7=function(){this.i7("\n")},ve(pi).j7=function(n){this.i7(n),this.h7()},ve(mi).i7=function(n){var t=String(n);this.k7_1.write(t)},ve(ki).i7=function(n){var t=String(n),r=t.lastIndexOf("\n",0);if(r>=0){var i=this.m7_1;this.m7_1=i+t.substring(0,r),this.n7();var e=r+1|0;t=t.substring(e)}this.m7_1=this.m7_1+t},ve(ki).n7=function(){console.log(this.m7_1),this.m7_1=""},ve(qi).i7=function(n){var t=this.m7_1;this.m7_1=t+String(n)},ve(Ci).x3=function(){return this.o7_1.length},ve(Ci).y3=function(n){var t=this.o7_1;if(!(n>=0&&n<=tr(t)))throw du("index: "+n+", length: "+this.x3()+"}");return ne(t,n)},ve(Ci).z3=function(n,t){return this.o7_1.substring(n,t)},ve(Ci).i3=function(n){return this.o7_1=this.o7_1+new Mi(n),this},ve(Ci).e=function(n){return this.o7_1=this.o7_1+Vi(n),this},ve(Ci).p7=function(n){var t=this.o7_1;return this.o7_1=t+(null==n?"null":n),this},ve(Ci).toString=function(){return this.o7_1},ve(Pi).t7=function(n){var t=this.q7_1;return n.replace(t,"\\$&")},ve(Pi).u7=function(n){var t=this.s7_1;return n.replace(t,"$$$$")},ve(Si).a8=function(n){this.x7_1.lastIndex=0;var t=this.x7_1.exec(ce(n));return null!=t&&0===t.index&&this.x7_1.lastIndex===re(n)},ve(Si).toString=function(){return this.x7_1.toString()},ve(Mi).o8=function(n){return Ei(this.h3_1,n)},ve(Mi).a4=function(n){return function(n,t){return Ei(n.h3_1,t instanceof Mi?t.h3_1:pe())}(this,n)},ve(Mi).equals=function(n){return function(n,t){return t instanceof Mi&&n===t.h3_1}(this.h3_1,n)},ve(Mi).hashCode=function(){return this.h3_1},ve(Mi).toString=function(){return Li(this.h3_1)},ve(Ui).r8=function(n){return ue(this.q8_1,n.q8_1)},ve(Ui).a4=function(n){return this.r8(n instanceof Ui?n:pe())},ve(Ui).equals=function(n){return this===n},ve(Ui).hashCode=function(){return se(this)},ve(Ui).toString=function(){return this.p8_1},ve(Zi).g=function(){return!(this.s8_1===this.t8_1.length)},ve(Zi).h=function(){if(this.s8_1===this.t8_1.length)throw xu(""+this.s8_1);var n=this.s8_1;return this.s8_1=n+1|0,this.t8_1[n]},ve(ke).b9=function(n){return je(this,n)},ve(ke).a4=function(n){return this.b9(n instanceof ke?n:pe())},ve(ke).c9=function(n){return Pe(this,n)},ve(ke).d9=function(n){return function(n,t){if($e(),Ae(t))throw mu("division by zero");if(Ae(n))return qe();if(Te(n,Ce())){if(Te(t,ye())||Te(t,Be()))return Ce();if(Te(t,Ce()))return ye();var r=function(n){$e();return new ke(n.u8_1>>>1|n.v8_1<<31,n.v8_1>>1)}(n),i=function(n){$e();return new ke(n.u8_1<<1,n.v8_1<<1|n.u8_1>>>31)}(r.d9(t));return Te(i,qe())?Ne(t)?ye():Be():Pe(i,Ie(n,Se(t,i)).d9(t))}if(Te(t,Ce()))return qe();if(Ne(n))return Ne(t)?Fe(n).d9(Fe(t)):Fe(Fe(n).d9(t));if(Ne(t))return Fe(n.d9(Fe(t)));for(var e=qe(),u=n;He(u,t);){for(var o=ze(u)/ze(t),f=Math.max(1,Math.floor(o)),s=Math.ceil(Math.log(f)/Math.LN2),c=s<=48?1:Math.pow(2,s-48),a=Oe(f),h=Se(a,t);Ne(h)||Re(h,u);)h=Se(a=Oe(f-=c),t);Ae(a)&&(a=ye()),e=Pe(e,a),u=Ie(u,h)}return e}(this,n)},ve(ke).e9=function(){return this.f9().c9(new ke(1,0))},ve(ke).f9=function(){return new ke(~this.u8_1,~this.v8_1)},ve(ke).g9=function(){return this.u8_1},ve(ke).w8=function(){return ze(this)},ve(ke).valueOf=function(){return this.w8()},ve(ke).equals=function(n){return n instanceof ke&&Te(this,n)},ve(ke).hashCode=function(){return $e(),this.u8_1^this.v8_1},ve(ke).toString=function(){return Ee(this,10)},ve(Hu).toString=function(){return"Model(text="+this.o9_1+", tooltip="+this.p9_1+")"},ve(Hu).hashCode=function(){var n=he(this.o9_1);return Mn(n,31)+he(this.p9_1)|0},ve(Hu).equals=function(n){if(this===n)return!0;if(!(n instanceof Hu))return!1;var t=n instanceof Hu?n:pe();return this.o9_1===t.o9_1&&this.p9_1===t.p9_1},ve($u).v9=function(n,t){return this.w9(new Hu(n,t))},ve($u).w9=function(n){var t,r;return Uf().y9(us((t=n,r=this,function(n){return n.s9(t.p9_1),n.t9("copy-button"),n.u9(function(n,t){return function(r){return n.q9_1(t.o9_1)}}(r,t)),br()})),[])},ve($u).z9=function(n){return this.w9(n instanceof Hu?n:pe())},ve($u).aa=function(n,t){return t},ve($u).ba=function(n,t){var r=null==n||Je(n)?n:pe();return this.aa(r,t instanceof Hu?t:pe())},ve(Uu).ka=function(n){return function(n,t){for(var r=Gf(),i=t.ca_1,e=Rr(Tt(i,10)),u=i.f();u.g();){var o,f,s=u.h();s instanceof Cf?f=Gf().ga(s.fa_1):s instanceof xf?f=Gu(n,s.da_1,s.ea_1):be(),o=f,e.d(o)}return r.ha(e)}(this,n)},ve(Uu).z9=function(n){return this.ka(n instanceof zf?n:pe())},ve(Uu).la=function(n,t){return t},ve(Uu).ba=function(n,t){var r=null==n||Je(n)?n:pe();return this.la(r,t instanceof zf?t:pe())},ve(Vu).pa=function(n,t,r){return new Vu(n,t,r)},ve(Vu).qa=function(n,t,r,i){return n=n===A?this.ma_1:n,t=t===A?this.na_1:t,r=r===A?this.oa_1:r,i===A?this.pa(n,t,r):i.pa.call(this,n,t,r)},ve(Vu).toString=function(){return"Exception(summary="+this.ma_1+", fullText="+this.na_1+", parts="+this.oa_1+")"},ve(Vu).hashCode=function(){var n=null==this.ma_1?0:this.ma_1.hashCode();return n=Mn(n,31)+he(this.na_1)|0,Mn(n,31)+ae(this.oa_1)|0},ve(Vu).equals=function(n){if(this===n)return!0;if(!(n instanceof Vu))return!1;var t=n instanceof Vu?n:pe();return!!le(this.ma_1,t.ma_1)&&this.na_1===t.na_1&&!!le(this.oa_1,t.oa_1)},ve(Qu).ta=function(n,t){return new Qu(n,t)},ve(Qu).ua=function(n,t,r){return n=n===A?this.ra_1:n,t=t===A?this.sa_1:t,r===A?this.ta(n,t):r.ta.call(this,n,t)},ve(Qu).toString=function(){return"StackTracePart(lines="+this.ra_1+", state="+this.sa_1+")"},ve(Qu).hashCode=function(){var n=ae(this.ra_1);return Mn(n,31)+(null==this.sa_1?0:this.sa_1.hashCode())|0},ve(Qu).equals=function(n){if(this===n)return!0;if(!(n instanceof Qu))return!1;var t=n instanceof Qu?n:pe();return!!le(this.ra_1,t.ra_1)&&!!le(this.sa_1,t.sa_1)},ve(Zu).toString=function(){return"Error(label="+this.va_1+", docLink="+this.wa_1+")"},ve(Zu).hashCode=function(){var n=ae(this.va_1);return Mn(n,31)+(null==this.wa_1?0:ae(this.wa_1))|0},ve(Zu).equals=function(n){if(this===n)return!0;if(!(n instanceof Zu))return!1;var t=n instanceof Zu?n:pe();return!!le(this.va_1,t.va_1)&&!!le(this.wa_1,t.wa_1)},ve(Yu).toString=function(){return"Warning(label="+this.xa_1+", docLink="+this.ya_1+")"},ve(Yu).hashCode=function(){var n=ae(this.xa_1);return Mn(n,31)+(null==this.ya_1?0:ae(this.ya_1))|0},ve(Yu).equals=function(n){if(this===n)return!0;if(!(n instanceof Yu))return!1;var t=n instanceof Yu?n:pe();return!!le(this.xa_1,t.xa_1)&&!!le(this.ya_1,t.ya_1)},ve(Wu).toString=function(){return"Message(prettyText="+this.za_1+")"},ve(Wu).hashCode=function(){return this.za_1.hashCode()},ve(Wu).equals=function(n){if(this===n)return!0;if(!(n instanceof Wu))return!1;var t=n instanceof Wu?n:pe();return!!this.za_1.equals(t.za_1)},ve(Ku).toString=function(){return"ListElement(prettyText="+this.ab_1+")"},ve(Ku).hashCode=function(){return this.ab_1.hashCode()},ve(Ku).equals=function(n){if(this===n)return!0;if(!(n instanceof Ku))return!1;var t=n instanceof Ku?n:pe();return!!this.ab_1.equals(t.ab_1)},ve(Xu).toString=function(){return"TreeNode(prettyText="+this.bb_1+")"},ve(Xu).hashCode=function(){return this.bb_1.hashCode()},ve(Xu).equals=function(n){if(this===n)return!0;if(!(n instanceof Xu))return!1;var t=n instanceof Xu?n:pe();return!!this.bb_1.equals(t.bb_1)},ve(Ju).toString=function(){return"Link(href="+this.cb_1+", label="+this.db_1+")"},ve(Ju).hashCode=function(){var n=he(this.cb_1);return Mn(n,31)+he(this.db_1)|0},ve(Ju).equals=function(n){if(this===n)return!0;if(!(n instanceof Ju))return!1;var t=n instanceof Ju?n:pe();return this.cb_1===t.cb_1&&this.db_1===t.db_1},ve(no).toString=function(){return"Label(text="+this.eb_1+")"},ve(no).hashCode=function(){return he(this.eb_1)},ve(no).equals=function(n){if(this===n)return!0;if(!(n instanceof no))return!1;var t=n instanceof no?n:pe();return this.eb_1===t.eb_1},ve(co).toString=function(){return"Info(label="+this.hb_1+", docLink="+this.ib_1+")"},ve(co).hashCode=function(){var n=ae(this.hb_1);return Mn(n,31)+(null==this.ib_1?0:ae(this.ib_1))|0},ve(co).equals=function(n){if(this===n)return!0;if(!(n instanceof co))return!1;var t=n instanceof co?n:pe();return!!le(this.hb_1,t.hb_1)&&!!le(this.ib_1,t.ib_1)},ve(ao).toString=function(){return"Project(path="+this.jb_1+")"},ve(ao).hashCode=function(){return he(this.jb_1)},ve(ao).equals=function(n){if(this===n)return!0;if(!(n instanceof ao))return!1;var t=n instanceof ao?n:pe();return this.jb_1===t.jb_1},ve(ho).toString=function(){return"Task(path="+this.kb_1+", type="+this.lb_1+")"},ve(ho).hashCode=function(){var n=he(this.kb_1);return Mn(n,31)+he(this.lb_1)|0},ve(ho).equals=function(n){if(this===n)return!0;if(!(n instanceof ho))return!1;var t=n instanceof ho?n:pe();return this.kb_1===t.kb_1&&this.lb_1===t.lb_1},ve(lo).toString=function(){return"TaskPath(path="+this.mb_1+")"},ve(lo).hashCode=function(){return he(this.mb_1)},ve(lo).equals=function(n){if(this===n)return!0;if(!(n instanceof lo))return!1;var t=n instanceof lo?n:pe();return this.mb_1===t.mb_1},ve(_o).toString=function(){return"Bean(type="+this.nb_1+")"},ve(_o).hashCode=function(){return he(this.nb_1)},ve(_o).equals=function(n){if(this===n)return!0;if(!(n instanceof _o))return!1;var t=n instanceof _o?n:pe();return this.nb_1===t.nb_1},ve(vo).toString=function(){return"SystemProperty(name="+this.ob_1+")"},ve(vo).hashCode=function(){return he(this.ob_1)},ve(vo).equals=function(n){if(this===n)return!0;if(!(n instanceof vo))return!1;var t=n instanceof vo?n:pe();return this.ob_1===t.ob_1},ve(go).toString=function(){return"Property(kind="+this.pb_1+", name="+this.qb_1+", owner="+this.rb_1+")"},ve(go).hashCode=function(){var n=he(this.pb_1);return n=Mn(n,31)+he(this.qb_1)|0,Mn(n,31)+he(this.rb_1)|0},ve(go).equals=function(n){if(this===n)return!0;if(!(n instanceof go))return!1;var t=n instanceof go?n:pe();return this.pb_1===t.pb_1&&this.qb_1===t.qb_1&&this.rb_1===t.rb_1},ve(wo).toString=function(){return"BuildLogic(location="+this.sb_1+")"},ve(wo).hashCode=function(){return he(this.sb_1)},ve(wo).equals=function(n){if(this===n)return!0;if(!(n instanceof wo))return!1;var t=n instanceof wo?n:pe();return this.sb_1===t.sb_1},ve(bo).toString=function(){return"BuildLogicClass(type="+this.tb_1+")"},ve(bo).hashCode=function(){return he(this.tb_1)},ve(bo).equals=function(n){if(this===n)return!0;if(!(n instanceof bo))return!1;var t=n instanceof bo?n:pe();return this.tb_1===t.tb_1},ve(ko).zb=function(){return this.yb_1},ve(ko).toString=function(){return"TaskTreeIntent(delegate="+this.yb_1+")"},ve(ko).hashCode=function(){return ae(this.yb_1)},ve(ko).equals=function(n){if(this===n)return!0;if(!(n instanceof ko))return!1;var t=n instanceof ko?n:pe();return!!le(this.yb_1,t.yb_1)},ve(qo).zb=function(){return this.ac_1},ve(qo).toString=function(){return"MessageTreeIntent(delegate="+this.ac_1+")"},ve(qo).hashCode=function(){return ae(this.ac_1)},ve(qo).equals=function(n){if(this===n)return!0;if(!(n instanceof qo))return!1;var t=n instanceof qo?n:pe();return!!le(this.ac_1,t.ac_1)},ve(yo).zb=function(){return this.bc_1},ve(yo).toString=function(){return"InputTreeIntent(delegate="+this.bc_1+")"},ve(yo).hashCode=function(){return ae(this.bc_1)},ve(yo).equals=function(n){if(this===n)return!0;if(!(n instanceof yo))return!1;var t=n instanceof yo?n:pe();return!!le(this.bc_1,t.bc_1)},ve(Bo).zb=function(){return this.cc_1},ve(Bo).toString=function(){return"IncompatibleTaskTreeIntent(delegate="+this.cc_1+")"},ve(Bo).hashCode=function(){return ae(this.cc_1)},ve(Bo).equals=function(n){if(this===n)return!0;if(!(n instanceof Bo))return!1;var t=n instanceof Bo?n:pe();return!!le(this.cc_1,t.cc_1)},ve(Co).toString=function(){return"SetTab(tab="+this.dc_1+")"},ve(Co).hashCode=function(){return this.dc_1.hashCode()},ve(Co).equals=function(n){if(this===n)return!0;if(!(n instanceof Co))return!1;var t=n instanceof Co?n:pe();return!!this.dc_1.equals(t.dc_1)},ve(xo).mc=function(n,t,r,i,e,u,o,f){return new xo(n,t,r,i,e,u,o,f)},ve(xo).nc=function(n,t,r,i,e,u,o,f,s){return n=n===A?this.ec_1:n,t=t===A?this.fc_1:t,r=r===A?this.gc_1:r,i=i===A?this.hc_1:i,e=e===A?this.ic_1:e,u=u===A?this.jc_1:u,o=o===A?this.kc_1:o,f=f===A?this.lc_1:f,s===A?this.mc(n,t,r,i,e,u,o,f):s.mc.call(this,n,t,r,i,e,u,o,f)},ve(xo).toString=function(){return"Model(heading="+this.ec_1+", summary="+this.fc_1+", learnMore="+this.gc_1+", messageTree="+this.hc_1+", locationTree="+this.ic_1+", inputTree="+this.jc_1+", incompatibleTaskTree="+this.kc_1+", tab="+this.lc_1+")"},ve(xo).hashCode=function(){var n=this.ec_1.hashCode();return n=Mn(n,31)+ae(this.fc_1)|0,n=Mn(n,31)+this.gc_1.hashCode()|0,n=Mn(n,31)+this.hc_1.hashCode()|0,n=Mn(n,31)+this.ic_1.hashCode()|0,n=Mn(n,31)+this.jc_1.hashCode()|0,n=Mn(n,31)+this.kc_1.hashCode()|0,Mn(n,31)+this.lc_1.hashCode()|0},ve(xo).equals=function(n){if(this===n)return!0;if(!(n instanceof xo))return!1;var t=n instanceof xo?n:pe();return!!(this.ec_1.equals(t.ec_1)&&le(this.fc_1,t.fc_1)&&this.gc_1.equals(t.gc_1)&&this.hc_1.equals(t.hc_1)&&this.ic_1.equals(t.ic_1)&&this.jc_1.equals(t.jc_1)&&this.kc_1.equals(t.kc_1)&&this.lc_1.equals(t.lc_1))},ve(Ko).gd=function(n,t){var r,i;return n instanceof ko?r=t.nc(A,A,A,A,ps().id(n.yb_1,t.ic_1)):n instanceof qo?r=t.nc(A,A,A,ps().id(n.ac_1,t.hc_1)):n instanceof yo?r=t.nc(A,A,A,A,A,ps().id(n.bc_1,t.jc_1)):n instanceof Bo?r=t.nc(A,A,A,A,A,A,ps().id(n.cc_1,t.kc_1)):n instanceof Dc?r=function(n,t,r,i){var e;return r instanceof qo?e=n.nc(A,A,A,Ac(n.hc_1,r,i)):r instanceof ko?e=n.nc(A,A,A,A,Ac(n.ic_1,r,i)):r instanceof yo?e=n.nc(A,A,A,A,A,Ac(n.jc_1,r,i)):r instanceof Bo?e=n.nc(A,A,A,A,A,A,Ac(n.kc_1,r,i)):(console.error("Unhandled tree intent: "+r),e=n),e}(t,0,n.xc_1,(i=n,function(n){var t;if(!(n instanceof Vu))throw _u(ce("Failed requirement."));for(var r=n.oa_1,e=i.wc_1,u=Rr(Tt(r,10)),o=0,f=r.f();f.g();){var s,c,a=f.h(),h=o;if(o=h+1|0,e===yr(h)){var l=a.sa_1;c=a.ua(A,null==l?null:l.ad())}else c=a;s=c,u.d(s)}return t=u,n.qa(A,A,t)})):n instanceof Mc?(window.navigator.clipboard.writeText(n.hd_1),r=t):n instanceof Co?r=t.nc(A,A,A,A,A,A,A,n.dc_1):(console.error("Unhandled intent: "+n),r=t),r},ve(Ko).ba=function(n,t){var r=n instanceof Oc?n:pe();return this.gd(r,t instanceof xo?t:pe())},ve(Ko).jd=function(n){return Hf().y9(us(Do),[Io(0,n),So(0,n)])},ve(Ko).z9=function(n){return this.jd(n instanceof xo?n:pe())},ve(nf).toString=function(){return"ImportedProblem(problem="+this.kd_1+", message="+this.ld_1+", trace="+this.md_1+")"},ve(nf).hashCode=function(){var n=ae(this.kd_1);return n=Mn(n,31)+this.ld_1.hashCode()|0,Mn(n,31)+ae(this.md_1)|0},ve(nf).equals=function(n){if(this===n)return!0;if(!(n instanceof nf))return!1;var t=n instanceof nf?n:pe();return!!le(this.kd_1,t.kd_1)&&!!this.ld_1.equals(t.ld_1)&&!!le(this.md_1,t.md_1)},ve(_f).ud=function(n,t){return this.td_1(n,t)},ve(_f).compare=function(n,t){return this.ud(n,t)},ve(Bf).toString=function(){return"LearnMore(text="+this.sc_1+", documentationLink="+this.tc_1+")"},ve(Bf).hashCode=function(){var n=he(this.sc_1);return Mn(n,31)+he(this.tc_1)|0},ve(Bf).equals=function(n){if(this===n)return!0;if(!(n instanceof Bf))return!1;var t=n instanceof Bf?n:pe();return this.sc_1===t.sc_1&&this.tc_1===t.tc_1},ve(Cf).toString=function(){return"Text(text="+this.fa_1+")"},ve(Cf).hashCode=function(){return he(this.fa_1)},ve(Cf).equals=function(n){if(this===n)return!0;if(!(n instanceof Cf))return!1;var t=n instanceof Cf?n:pe();return this.fa_1===t.fa_1},ve(xf).toString=function(){return"Reference(name="+this.da_1+", clipboardString="+this.ea_1+")"},ve(xf).hashCode=function(){var n=he(this.da_1);return Mn(n,31)+he(this.ea_1)|0},ve(xf).equals=function(n){if(this===n)return!0;if(!(n instanceof xf))return!1;var t=n instanceof xf?n:pe();return this.da_1===t.da_1&&this.ea_1===t.ea_1},ve(Pf).ed=function(n){return this.dd_1.d(new Cf(n)),this},ve(Pf).xd=function(n,t){return this.dd_1.d(new xf(n,t)),this},ve(Pf).fd=function(n,t,r){return t=t===A?n:t,r===A?this.xd(n,t):r.xd.call(this,n,t)},ve(Pf).j5=function(){return new zf(Qn(this.dd_1))},ve(If).rd=function(n){return new zf(qr(new Cf(n)))},ve(If).qd=function(n){var t=new Pf;return n(t),t.j5()},ve(zf).vd=function(n){return new zf(n)},ve(zf).toString=function(){return"PrettyText(fragments="+this.ca_1+")"},ve(zf).hashCode=function(){return ae(this.ca_1)},ve(zf).equals=function(n){if(this===n)return!0;if(!(n instanceof zf))return!1;var t=n instanceof zf?n:pe();return!!le(this.ca_1,t.ca_1)},ve(Tf).sd=function(n){return function(n){for(var t=Wr(),r=n.f();r.g();)for(var i=t,e=r.h().f();e.g();){var u,o=e.h(),f=i,s=f.v1(o);if(null==s){var c=Wr();f.h5(o,c),u=c}else u=s;i=u instanceof Xr?u:pe()}return t}(n)},ve(Af).toString=function(){return"Trie(nestedMaps="+this.wd_1+")"},ve(Af).hashCode=function(){return ae(this.wd_1)},ve(Af).equals=function(n){return function(n,t){return t instanceof Af&&!!le(n,t instanceof Af?t.wd_1:pe())}(this.wd_1,n)},ve(Kf).ga=function(n){return Jf().yd(this.x9_1,A,n)},ve(Kf).ha=function(n){return Jf().yd(this.x9_1,A,A,n)},ve(Kf).ja=function(n){return Jf().yd(this.x9_1,A,A,ou(n))},ve(Kf).y9=function(n,t){return Jf().yd(this.x9_1,n,A,ou(t))},ve(Kf).zd=function(n,t){return Jf().yd(this.x9_1,n,A,t)},ve(Kf).fb=function(n,t){return Jf().yd(this.x9_1,n,t)},ve(Kf).rc=function(n,t){return Jf().yd(this.x9_1,A,n,ou(t))},ve(Kf).toString=function(){return"ViewFactory(elementName="+this.x9_1+")"},ve(Kf).hashCode=function(){return he(this.x9_1)},ve(Kf).equals=function(n){if(this===n)return!0;if(!(n instanceof Kf))return!1;var t=n instanceof Kf?n:pe();return this.x9_1===t.x9_1},ve(Xf).ae=function(n,t,r,i){return new rs(n,t,r,i)},ve(Xf).yd=function(n,t,r,i,e){return t=t===A?Ct():t,r=r===A?null:r,i=i===A?Ct():i,e===A?this.ae(n,t,r,i):e.ae.call(this,n,t,r,i)},ve(rs).toString=function(){return"Element(elementName="+this.be_1+", attributes="+this.ce_1+", innerText="+this.de_1+", children="+this.ee_1+")"},ve(rs).hashCode=function(){var n=he(this.be_1);return n=Mn(n,31)+ae(this.ce_1)|0,n=Mn(n,31)+(null==this.de_1?0:he(this.de_1))|0,Mn(n,31)+ae(this.ee_1)|0},ve(rs).equals=function(n){if(this===n)return!0;if(!(n instanceof rs))return!1;var t=n instanceof rs?n:pe();return this.be_1===t.be_1&&!!le(this.ce_1,t.ce_1)&&this.de_1==t.de_1&&!!le(this.ee_1,t.ee_1)},ve(os).u9=function(n){return this.r9_1(new fs("click",n))},ve(os).t9=function(n){return this.r9_1(new ss(n))},ve(os).gb=function(n){for(var t=0,r=n.length;t<r;){var i=n[t];t=t+1|0,this.r9_1(new ss(i))}return br()},ve(os).s9=function(n){return this.r9_1(new cs("title",n))},ve(os).bd=function(n){return this.r9_1(new cs("href",n))},ve(vs).oe=function(){return this.ne_1},ve(vs).toString=function(){return"Toggle(focus="+this.ne_1+")"},ve(vs).hashCode=function(){return ae(this.ne_1)},ve(vs).equals=function(n){if(this===n)return!0;if(!(n instanceof vs))return!1;var t=n instanceof vs?n:pe();return!!le(this.ne_1,t.ne_1)},ve(ds).pe=function(n,t){return this.re(n.qe((r=t,function(n){return n.me(r(n.ub_1))})));var r},ve(ds).re=function(n){return new ds(n)},ve(ds).toString=function(){return"Model(tree="+this.xb_1+")"},ve(ds).hashCode=function(){return this.xb_1.hashCode()},ve(ds).equals=function(n){if(this===n)return!0;if(!(n instanceof ds))return!1;var t=n instanceof ds?n:pe();return!!this.xb_1.equals(t.xb_1)},ve(bs).id=function(n,t){var r;if(n instanceof vs){var i=n.oe();r=t.re(i.qe(ws))}else be();return r},ve(ks).cd=function(){return this.ve_1},ve(ks).we=function(){return 0},ve(ks).qe=function(n){return n(this.ve_1)},ve(ks).toString=function(){return"Original(tree="+this.ve_1+")"},ve(ks).hashCode=function(){return this.ve_1.hashCode()},ve(ks).equals=function(n){if(this===n)return!0;if(!(n instanceof ks))return!1;var t=n instanceof ks?n:pe();return!!this.ve_1.equals(t.ve_1)},ve(qs).cd=function(){return this.ue_1},ve(qs).we=function(){return this.se_1.we()+1|0},ve(qs).qe=function(n){return this.se_1.qe((t=this,r=n,function(n){for(var i,e=n.vb_1,u=t.te_1,o=Rr(Tt(e,10)),f=0,s=e.f();s.g();){var c,a=s.h(),h=f;f=h+1|0,c=u===yr(h)?r(a):a,o.d(c)}return i=o,n.me(A,i)}));var t,r},ve(qs).toString=function(){return"Child(parent="+this.se_1+", index="+this.te_1+", tree="+this.ue_1+")"},ve(qs).hashCode=function(){var n=ae(this.se_1);return n=Mn(n,31)+this.te_1|0,Mn(n,31)+this.ue_1.hashCode()|0},ve(qs).equals=function(n){if(this===n)return!0;if(!(n instanceof qs))return!1;var t=n instanceof qs?n:pe();return!!le(this.se_1,t.se_1)&&this.te_1===t.te_1&&!!this.ue_1.equals(t.ue_1)},ve(ys).ad=function(){var n;switch(this.q8_1){case 0:n=xs();break;case 1:n=Cs();break;default:be()}return n},ve(Bs).vc=function(){var n,t;return ut(Vn(Ve(0,this.cd().vb_1.k()-1|0)),(n=this,(t=function(t){return n.xe(t)}).callableName="child",t))},ve(Bs).xe=function(n){return new qs(this,n,this.cd().vb_1.j(n))},ve(js).uc=function(){return new ks(this)},ve(js).ye=function(){return!this.vb_1.i()},ve(js).ze=function(n,t,r){return new js(n,t,r)},ve(js).me=function(n,t,r,i){return n=n===A?this.ub_1:n,t=t===A?this.vb_1:t,r=r===A?this.wb_1:r,i===A?this.ze(n,t,r):i.ze.call(this,n,t,r)},ve(js).toString=function(){return"Tree(label="+this.ub_1+", children="+this.vb_1+", state="+this.wb_1+")"},ve(js).hashCode=function(){var n=null==this.ub_1?0:ae(this.ub_1);return n=Mn(n,31)+ae(this.vb_1)|0,Mn(n,31)+this.wb_1.hashCode()|0},ve(js).equals=function(n){if(this===n)return!0;if(!(n instanceof js))return!1;var t=n instanceof js?n:pe();return!!le(this.ub_1,t.ub_1)&&!!le(this.vb_1,t.vb_1)&&!!this.wb_1.equals(t.wb_1)},ve(zs).toString=function(){return"ProblemIdElement(name="+this.df_1+", displayName="+this.ef_1+")"},ve(zs).hashCode=function(){var n=he(this.df_1);return Mn(n,31)+he(this.ef_1)|0},ve(zs).equals=function(n){if(this===n)return!0;if(!(n instanceof zs))return!1;var t=n instanceof zs?n:pe();return this.df_1===t.df_1&&this.ef_1===t.ef_1},ve(Ts).toString=function(){return"ProblemSummary(problemId="+this.ff_1+", count="+this.gf_1+")"},ve(Ts).hashCode=function(){var n=ae(this.ff_1);return Mn(n,31)+this.gf_1|0},ve(Ts).equals=function(n){if(this===n)return!0;if(!(n instanceof Ts))return!1;var t=n instanceof Ts?n:pe();return!!le(this.ff_1,t.ff_1)&&this.gf_1===t.gf_1},ve(Ms).toString=function(){return"ProblemNodeGroup(tree="+this.hf_1+", children="+this.if_1+", childGroups="+this.jf_1+", id="+this.kf_1+")"},ve(Ms).hashCode=function(){var n=this.hf_1.hashCode();return n=Mn(n,31)+ae(this.if_1)|0,n=Mn(n,31)+ae(this.jf_1)|0,Mn(n,31)+this.kf_1|0},ve(Ms).equals=function(n){if(this===n)return!0;if(!(n instanceof Ms))return!1;var t=n instanceof Ms?n:pe();return!!this.hf_1.equals(t.hf_1)&&!!le(this.if_1,t.if_1)&&!!le(this.jf_1,t.jf_1)&&this.kf_1===t.kf_1},ve(uc).toString=function(){return"Text(text="+this.lf_1+")"},ve(uc).hashCode=function(){return he(this.lf_1)},ve(uc).equals=function(n){if(this===n)return!0;if(!(n instanceof uc))return!1;var t=n instanceof uc?n:pe();return this.lf_1===t.lf_1},ve(oc).toString=function(){return"ProblemIdNode(prettyText="+this.mf_1+", separator="+this.nf_1+")"},ve(oc).hashCode=function(){var n=this.mf_1.hashCode();return Mn(n,31)+(0|this.nf_1)|0},ve(oc).equals=function(n){if(this===n)return!0;if(!(n instanceof oc))return!1;var t=n instanceof oc?n:pe();return!!this.mf_1.equals(t.mf_1)&&this.nf_1===t.nf_1},ve(fc).toString=function(){return"Advice(label="+this.of_1+", docLink="+this.pf_1+")"},ve(fc).hashCode=function(){var n=ae(this.of_1);return Mn(n,31)+(null==this.pf_1?0:ae(this.pf_1))|0},ve(fc).equals=function(n){if(this===n)return!0;if(!(n instanceof fc))return!1;var t=n instanceof fc?n:pe();return!!le(this.of_1,t.of_1)&&!!le(this.pf_1,t.pf_1)},ve(cc).zb=function(){return this.qf_1},ve(cc).toString=function(){return"MessageTreeIntent(delegate="+this.qf_1+")"},ve(cc).hashCode=function(){return ae(this.qf_1)},ve(cc).equals=function(n){if(this===n)return!0;if(!(n instanceof cc))return!1;var t=n instanceof cc?n:pe();return!!le(this.qf_1,t.qf_1)},ve(ac).zb=function(){return this.rf_1},ve(ac).toString=function(){return"ProblemIdTreeIntent(delegate="+this.rf_1+")"},ve(ac).hashCode=function(){return ae(this.rf_1)},ve(ac).equals=function(n){if(this===n)return!0;if(!(n instanceof ac))return!1;var t=n instanceof ac?n:pe();return!!le(this.rf_1,t.rf_1)},ve(hc).zb=function(){return this.sf_1},ve(hc).toString=function(){return"FileLocationTreeIntent(delegate="+this.sf_1+")"},ve(hc).hashCode=function(){return ae(this.sf_1)},ve(hc).equals=function(n){if(this===n)return!0;if(!(n instanceof hc))return!1;var t=n instanceof hc?n:pe();return!!le(this.sf_1,t.sf_1)},ve(lc).zb=function(){return this.tf_1},ve(lc).toString=function(){return"PluginLocationTreeIntent(delegate="+this.tf_1+")"},ve(lc).hashCode=function(){return ae(this.tf_1)},ve(lc).equals=function(n){if(this===n)return!0;if(!(n instanceof lc))return!1;var t=n instanceof lc?n:pe();return!!le(this.tf_1,t.tf_1)},ve(_c).zb=function(){return this.uf_1},ve(_c).toString=function(){return"TaskLocationTreeIntent(delegate="+this.uf_1+")"},ve(_c).hashCode=function(){return ae(this.uf_1)},ve(_c).equals=function(n){if(this===n)return!0;if(!(n instanceof _c))return!1;var t=n instanceof _c?n:pe();return!!le(this.uf_1,t.uf_1)},ve(vc).toString=function(){return"SetTab(tab="+this.vf_1+")"},ve(vc).hashCode=function(){return this.vf_1.hashCode()},ve(vc).equals=function(n){if(this===n)return!0;if(!(n instanceof vc))return!1;var t=n instanceof vc?n:pe();return!!this.vf_1.equals(t.vf_1)},ve(dc).gg=function(n,t,r,i,e,u,o,f,s,c){return new dc(n,t,r,i,e,u,o,f,s,c)},ve(dc).hg=function(n,t,r,i,e,u,o,f,s,c,a){return n=n===A?this.wf_1:n,t=t===A?this.xf_1:t,r=r===A?this.yf_1:r,i=i===A?this.zf_1:i,e=e===A?this.ag_1:e,u=u===A?this.bg_1:u,o=o===A?this.cg_1:o,f=f===A?this.dg_1:f,s=s===A?this.eg_1:s,c=c===A?this.fg_1:c,a===A?this.gg(n,t,r,i,e,u,o,f,s,c):a.gg.call(this,n,t,r,i,e,u,o,f,s,c)},ve(dc).toString=function(){return"Model(heading="+this.wf_1+", summary="+this.xf_1+", learnMore="+this.yf_1+", messageTree="+this.zf_1+", problemIdTree="+this.ag_1+", fileLocationTree="+this.bg_1+", pluginLocationTree="+this.cg_1+", taskLocationTree="+this.dg_1+", problemCount="+this.eg_1+", tab="+this.fg_1+")"},ve(dc).hashCode=function(){var n=this.wf_1.hashCode();return n=Mn(n,31)+ae(this.xf_1)|0,n=Mn(n,31)+this.yf_1.hashCode()|0,n=Mn(n,31)+this.zf_1.hashCode()|0,n=Mn(n,31)+this.ag_1.hashCode()|0,n=Mn(n,31)+this.bg_1.hashCode()|0,n=Mn(n,31)+this.cg_1.hashCode()|0,n=Mn(n,31)+this.dg_1.hashCode()|0,n=Mn(n,31)+this.eg_1|0,Mn(n,31)+this.fg_1.hashCode()|0},ve(dc).equals=function(n){if(this===n)return!0;if(!(n instanceof dc))return!1;var t=n instanceof dc?n:pe();return!!(this.wf_1.equals(t.wf_1)&&le(this.xf_1,t.xf_1)&&this.yf_1.equals(t.yf_1)&&this.zf_1.equals(t.zf_1)&&this.ag_1.equals(t.ag_1)&&this.bg_1.equals(t.bg_1)&&this.cg_1.equals(t.cg_1)&&this.dg_1.equals(t.dg_1)&&this.eg_1===t.eg_1&&this.fg_1.equals(t.fg_1))},ve(Lc).ig=function(n,t){var r,i;return n instanceof hc?r=t.hg(A,A,A,A,A,ps().id(n.sf_1,t.bg_1)):n instanceof lc?r=t.hg(A,A,A,A,A,A,ps().id(n.tf_1,t.cg_1)):n instanceof _c?r=t.hg(A,A,A,A,A,A,A,ps().id(n.uf_1,t.dg_1)):n instanceof ac?r=t.hg(A,A,A,A,ps().id(n.rf_1,t.ag_1)):n instanceof cc?r=t.hg(A,A,A,ps().id(n.qf_1,t.zf_1)):n instanceof Dc?r=function(n,t,r,i){var e;return r instanceof cc?e=n.hg(A,A,A,Ac(n.zf_1,r,i)):r instanceof ac?e=n.hg(A,A,A,A,Ac(n.ag_1,r,i)):r instanceof hc?e=n.hg(A,A,A,A,A,Ac(n.bg_1,r,i)):r instanceof lc?e=n.hg(A,A,A,A,A,A,Ac(n.cg_1,r,i)):r instanceof _c?e=n.hg(A,A,A,A,A,A,A,Ac(n.dg_1,r,i)):(console.error("Unhandled tree intent: "+r),e=n),e}(t,0,n.xc_1,(i=n,function(n){var t;if(!(n instanceof Vu))throw _u(ce("Failed requirement."));for(var r=n.oa_1,e=i.wc_1,u=Rr(Tt(r,10)),o=0,f=r.f();f.g();){var s,c,a=f.h(),h=o;if(o=h+1|0,e===yr(h)){var l=a.sa_1;c=a.ua(A,null==l?null:l.ad())}else c=a;s=c,u.d(s)}return t=u,n.qa(A,A,t)})):n instanceof Mc?(window.navigator.clipboard.writeText(n.hd_1),r=t):n instanceof vc?r=t.hg(A,A,A,A,A,A,A,A,A,n.vf_1):(console.error("Unhandled intent: "+n),r=t),r},ve(Lc).ba=function(n,t){var r=n instanceof Oc?n:pe();return this.ig(r,t instanceof dc?t:pe())},ve(Lc).jg=function(n){return Hf().y9(us(xc),[wc(0,n),bc(0,n)])},ve(Lc).z9=function(n){return this.jg(n instanceof dc?n:pe())},ve(Mc).toString=function(){return"Copy(text="+this.hd_1+")"},ve(Mc).hashCode=function(){return he(this.hd_1)},ve(Mc).equals=function(n){if(this===n)return!0;if(!(n instanceof Mc))return!1;var t=n instanceof Mc?n:pe();return this.hd_1===t.hd_1},ve(Dc).toString=function(){return"ToggleStackTracePart(partIndex="+this.wc_1+", location="+this.xc_1+")"},ve(Dc).hashCode=function(){var n=this.wc_1;return Mn(n,31)+ae(this.xc_1)|0},ve(Dc).equals=function(n){if(this===n)return!0;if(!(n instanceof Dc))return!1;var t=n instanceof Dc?n:pe();return this.wc_1===t.wc_1&&!!le(this.xc_1,t.xc_1)},ve(ui).k6=function(){var n=Object.create(null);return n.foo=1,delete n.foo,br(),n},l=null,function(){var n=configurationCacheProblems();if(null==n.problemsReport)Mf(Ff("report"),Xo(),function(n){var t,r,i,e,u,o,f,s,c,a,h=function(n){for(var t=Or(),r=Or(),i=Or(),e=0,u=n.length;e<u;){var o=n[e];e=e+1|0;var f,s=o.input,c=null==s?null:r.d(rf(s,o));if(null==c){var a=o.incompatibleTask;f=null==a?null:i.d(rf(a,o))}else f=c;if(null==f){var h=we(o.problem);t.d(rf(h,o))}}return new tf(t,r,i)}(n.diagnostics),l=n.totalProblemCount;return new xo((f=(t=n).buildName,s=t.requestedTasks,c=null==s?null:rr(s," ",A,r=r!==A&&r)>=0,a=null==c||c,Sf().qd((i=t,e=f,u=s,o=a,function(n){n.ed(function(n){var t;if(re(n)>0){var r,i=ne(n,0);r=function(n){return 97<=n&&n<=122||!(Ei(n,128)<0)&&function(n){var t;return t=1===function(n){var t=n,r=su(au().h9_1,t),i=au().h9_1[r],e=(i+au().i9_1[r]|0)-1|0,u=au().j9_1[r];if(t>e)return 0;var o=3&u;if(0===o){var f=2,s=i,c=0;if(c<=1)do{if(c=c+1|0,(s=s+(u>>f&127)|0)>t)return 3;if((s=s+(u>>(f=f+7|0)&127)|0)>t)return 0;f=f+7|0}while(c<=1);return 3}if(u<=7)return o;var a=t-i|0;return u>>Mn(2,u<=31?a%2|0:a)&3}(n)||function(n){var t=su(lu().k9_1,n);return t>=0&&n<(lu().k9_1[t]+lu().l9_1[t]|0)}(n),t}(n)}(i)?function(n){return function(n){var t=Li(n).toUpperCase();if(t.length>1){var r;if(329===n)r=t;else{var i=ne(t,0),e=t.substring(1).toLowerCase();r=Li(i)+e}return r}return Li(function(n){return function(n){var t=n;return 452<=t&&t<=460||497<=t&&t<=499?Ue(Mn(3,(t+1|0)/3|0)):4304<=t&&t<=4346||4349<=t&&t<=4351?n:xi(n)}(n)}(n))}(n)}(i):Li(i),t=ce(r)+n.substring(1)}else t=n;return t}(i.cacheAction)+" the configuration cache for ");var t=e;null==t||n.fd(t),null==e||n.ed(" build and ");var r=u;return null==(null==r?null:n.fd(r))&&n.ed("default"),n.ed(o?" tasks":" task"),br()}))),function(n,t){var r=n.cacheActionDescription,i=null==r?null:mf(r),e=Sf().rd(function(n){var t=n.od_1.k(),r=kf(t,"build configuration input");return t>0?r+" and will cause the cache to be discarded when "+(t<=1?"its":"their")+" value change":r}(t)),u=Sf().rd(function(n,t){var r=n.totalProblemCount,i=t.nd_1.k(),e=kf(r,"problem");return r>i?e+", only the first "+i+" "+yf(i)+" included in this report":e}(n,t));return function(n,t){for(var r=0,i=n.length;r<i;){var e=n[r];r=r+1|0,null!=e&&t.d(e)}return t}([i,e,u],Or())}(n,h),new Bf("Gradle Configuration Cache",n.documentationLink),hf(new no(Zo().qc_1),ut(Vn(h.nd_1),gf)),hf(new no(Yo().qc_1),function(n){return ut(Vn(n),wf)}(h.nd_1)),hf(new no(Qo().qc_1),ut(Vn(h.od_1),vf)),hf(new no(Wo().qc_1),ut(Vn(h.pd_1),df)),0===l?Qo():Zo())}(n));else{var t=n.problemsReport;Mf(Ff("report"),Nc(),function(n,t){ec();for(var r=n.summaries,i=Rr(r.length),e=0,u=r.length;e<u;){var o,f=r[e];e=e+1|0;for(var s=f.problemId,c=Rr(s.length),a=0,h=s.length;a<h;){var l,_=s[a];a=a+1|0,l=new zs(_.name,_.displayName),c.d(l)}o=new Ts(c,f.count),i.d(o)}for(var v=i,d=function(n,t){ec();for(var r=li(),i=0,e=n.length;i<e;){var u=n[i];i=i+1|0;var o,f=(a=u.problemId,ec(),On(a,":",A,A,A,A,Ws)),s=r.v1(f);if(null==s){var c=Or();r.h5(f,c),o=c}else o=s;o.d(u)}for(var a,h=r.o(),l=Rr(Tt(h,10)),_=h.f();_.g();){for(var v,d=_.h(),g=d.i1(),w=Rr(Tt(g,10)),b=g.f();b.g();){var p;p=Os(b.h(),null,!0),w.d(p)}var m,k=Zn(w),q=Un(d.i1()),y=Hs(q,new Wu($s(Rs(q)).ed(" ("+d.i1().k()+")").j5()));n:{for(var B=t.f();B.g();){var C=B.h();if(Ds(C.ff_1,q.problemId)){m=C;break n}}m=null}var x=m;null==x||k.d(Ns(x.gf_1)),v=new js(y,k),l.d(v)}var j=l;return new ds(new js(new uc("message tree root"),j))}(t,v),g=function(n,t){ec();for(var r=function(){ec();var n=Or();return new Ms(new js(new oc(Sf().rd("Ungrouped"),!0),n),n,li())}(),i=li(),e=0,u=n.length;e<u;){var o=n[e];e=e+1|0;for(var f=Yn(Dn(o.problemId,1)),s=Rr(Tt(f,10)),c=f.f();c.g();){var a,h=c.h();a=new zs(h.name,h.displayName),s.d(a)}var l=Fs(i,s),_=Os(o);null==l?r.if_1.d(_):l.if_1.d(_)}for(var v=Rr(Tt(t,10)),d=t.f();d.g();){var g,w=d.h();g=new Ts(Yn(Wn(w.ff_1,1)),w.gf_1),v.d(g)}for(var b=li(),p=v.f();p.g();){var m,k=p.h(),q=k.ff_1,y=b.v1(q);if(null==y){var B=Or();b.h5(q,B),m=B}else m=y;m.d(k)}for(var C=b.o(),x=Rr(Tt(C,10)),j=C.f();j.g();){for(var P,I=j.h(),S=I.j1(),z=0,T=I.i1().f();T.g();)z=z+T.h().gf_1|0;P=new Ts(S,z),x.d(P)}for(var E=x.f();E.g();){var L=E.h(),N=Fs(i,L.ff_1),A=null==N?null:N.if_1;null==A||A.d(Ns(L.gf_1))}for(var M=i.w1(),F=Rr(Tt(M,10)),D=M.f();D.g();){var O;O=D.h().hf_1,F.d(O)}var R=function(n,t){var r=Rr(n.k());return r.m(n),r.d(t),r}(F,r.hf_1);return new ds(new js(new uc("group tree root"),R))}(t,v),w=0,b=v.f();b.g();)w=w+b.h().gf_1|0;for(var p=Es(t,w,(ec(),wn)),m=0,k=v.f();k.g();)m=m+k.h().gf_1|0;for(var q=Es(t,m,(ec(),bn)),y=0,B=v.f();B.g();)y=y+B.h().gf_1|0;var C=Es(t,y,(ec(),pn));return new dc(Sf().rd("Problems Report"),function(n,t){ec();var r,i,e,u=n.description,o=null==u?null:qr(mf(u));return r=null==o?qr(Sf().qd((i=t,e=n,function(n){n.ed(i.length+" problems have been reported during the execution");var t=e.buildName;null==t||(n.ed(" of build "),n.fd(t));var r=e.requestedTasks;return null==r||(n.ed(" for the following tasks:"),n.fd(r),br()),br()}))):o,r}(n,t),new Bf("reporting problems",n.documentationLink),d,g,p,q,C,t.length,function(n,t,r,i,e){return ec(),po(r)>0?tc():po(n)>0?Js():po(t)>0?nc():po(i)>0?rc():po(e)>0?ic():Js()}(d,g,p,q,C))}(t,n.diagnostics))}}(),n}(void 0===this["configuration-cache-report"]?{}:this["configuration-cache-report"])}}[70](),{}))));
    -//# sourceMappingURL=configuration-cache-report.js.map
    -                </script>
    -
    -</body>
    -</html>
    diff --git a/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html b/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html
    deleted file mode 100644
    index a456ba38..00000000
    --- a/build/reports/tests/test/classes/hhn.temp.project.BadCasesTest.html
    +++ /dev/null
    @@ -1,128 +0,0 @@
    -<!DOCTYPE html>
    -<html>
    -<head>
    -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    -<meta http-equiv="x-ua-compatible" content="IE=edge"/>
    -<title>Test results - BadCasesTest</title>
    -<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
    -<link href="../css/style.css" rel="stylesheet" type="text/css"/>
    -<script src="../js/report.js" type="text/javascript"></script>
    -</head>
    -<body>
    -<div id="content">
    -<h1>BadCasesTest</h1>
    -<div class="breadcrumbs">
    -<a href="../index.html">all</a> &gt; 
    -<a href="../packages/hhn.temp.project.html">hhn.temp.project</a> &gt; BadCasesTest</div>
    -<div id="summary">
    -<table>
    -<tr>
    -<td>
    -<div class="summaryGroup">
    -<table>
    -<tr>
    -<td>
    -<div class="infoBox" id="tests">
    -<div class="counter">6</div>
    -<p>tests</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="failures">
    -<div class="counter">0</div>
    -<p>failures</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="ignored">
    -<div class="counter">0</div>
    -<p>ignored</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="duration">
    -<div class="counter">0.057s</div>
    -<p>duration</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox success" id="successRate">
    -<div class="percent">100%</div>
    -<p>successful</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -<div class="tab-container">
    -<ul class="tabLinks">
    -<li>
    -<a href="#">Tests</a>
    -</li>
    -</ul>
    -<div class="tab">
    -<h2>Tests</h2>
    -<table>
    -<thead>
    -<tr>
    -<th>Test</th>
    -<th>Method name</th>
    -<th>Duration</th>
    -<th>Result</th>
    -</tr>
    -</thead>
    -<tr>
    -<td class="success">Assert Add Task is programmed defensively</td>
    -<td class="success">assertAddTaskOnlyAcceptsValidParameters()</td>
    -<td class="success">0.002s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert only existing tasks can be edited</td>
    -<td class="success">assertEditOnlyExistingTasks()</td>
    -<td class="success">0.002s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert List isn't empty after adding a task</td>
    -<td class="success">assertListNowEmptyAfterAdd()</td>
    -<td class="success">0.046s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that added tasks can't be Null</td>
    -<td class="success">assertNewTasksAreNotNull()</td>
    -<td class="success">0.002s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that Remove Task is programmed defensively</td>
    -<td class="success">assertRemoveTaskOnlyAcceptsValidParameters()</td>
    -<td class="success">0.003s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that un-/finishing a Task only works with valid parameters</td>
    -<td class="success">assertTaskStateChangesOnlyAcceptsValidParameters()</td>
    -<td class="success">0.002s</td>
    -<td class="success">passed</td>
    -</tr>
    -</table>
    -</div>
    -</div>
    -<div id="footer">
    -<p>
    -<div>
    -<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
    -<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
    -</label>
    -</div>Generated by 
    -<a href="https://www.gradle.org">Gradle 8.14</a> at 03.12.2025, 19:35:34</p>
    -</div>
    -</div>
    -</body>
    -</html>
    diff --git a/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html b/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html
    deleted file mode 100644
    index 226a822f..00000000
    --- a/build/reports/tests/test/classes/hhn.temp.project.GoodCasesTest.html
    +++ /dev/null
    @@ -1,134 +0,0 @@
    -<!DOCTYPE html>
    -<html>
    -<head>
    -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    -<meta http-equiv="x-ua-compatible" content="IE=edge"/>
    -<title>Test results - GoodCasesTest</title>
    -<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
    -<link href="../css/style.css" rel="stylesheet" type="text/css"/>
    -<script src="../js/report.js" type="text/javascript"></script>
    -</head>
    -<body>
    -<div id="content">
    -<h1>GoodCasesTest</h1>
    -<div class="breadcrumbs">
    -<a href="../index.html">all</a> &gt; 
    -<a href="../packages/hhn.temp.project.html">hhn.temp.project</a> &gt; GoodCasesTest</div>
    -<div id="summary">
    -<table>
    -<tr>
    -<td>
    -<div class="summaryGroup">
    -<table>
    -<tr>
    -<td>
    -<div class="infoBox" id="tests">
    -<div class="counter">7</div>
    -<p>tests</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="failures">
    -<div class="counter">0</div>
    -<p>failures</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="ignored">
    -<div class="counter">0</div>
    -<p>ignored</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="duration">
    -<div class="counter">0.007s</div>
    -<p>duration</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox success" id="successRate">
    -<div class="percent">100%</div>
    -<p>successful</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -<div class="tab-container">
    -<ul class="tabLinks">
    -<li>
    -<a href="#">Tests</a>
    -</li>
    -</ul>
    -<div class="tab">
    -<h2>Tests</h2>
    -<table>
    -<thead>
    -<tr>
    -<th>Test</th>
    -<th>Method name</th>
    -<th>Duration</th>
    -<th>Result</th>
    -</tr>
    -</thead>
    -<tr>
    -<td class="success">Assert deleted Tasks no longer show up in the List</td>
    -<td class="success">assertDeletedTasksDisappear()</td>
    -<td class="success">0s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert existing Tasks can be edited</td>
    -<td class="success">assertExistingTasksCanBeEdited()</td>
    -<td class="success">0s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Check Getters</td>
    -<td class="success">assertGettersWorkCorrectly()</td>
    -<td class="success">0.003s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that Task State is actually changed when submitted as finished</td>
    -<td class="success">assertTaskStateChanges()</td>
    -<td class="success">0.002s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that added Tasks are added to the List</td>
    -<td class="success">assertTasksShowInList()</td>
    -<td class="success">0.001s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that a Worker can add a Task</td>
    -<td class="success">assertWorkerCanAddTask()</td>
    -<td class="success">0.001s</td>
    -<td class="success">passed</td>
    -</tr>
    -<tr>
    -<td class="success">Assert that Worker can remove Task</td>
    -<td class="success">assertWorkerCanRemoveOwnTask()</td>
    -<td class="success">0s</td>
    -<td class="success">passed</td>
    -</tr>
    -</table>
    -</div>
    -</div>
    -<div id="footer">
    -<p>
    -<div>
    -<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
    -<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
    -</label>
    -</div>Generated by 
    -<a href="https://www.gradle.org">Gradle 8.14</a> at 03.12.2025, 19:35:34</p>
    -</div>
    -</div>
    -</body>
    -</html>
    diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css
    deleted file mode 100644
    index 3dc4913e..00000000
    --- a/build/reports/tests/test/css/style.css
    +++ /dev/null
    @@ -1,84 +0,0 @@
    -
    -#summary {
    -    margin-top: 30px;
    -    margin-bottom: 40px;
    -}
    -
    -#summary table {
    -    border-collapse: collapse;
    -}
    -
    -#summary td {
    -    vertical-align: top;
    -}
    -
    -.breadcrumbs, .breadcrumbs a {
    -    color: #606060;
    -}
    -
    -.infoBox {
    -    width: 110px;
    -    padding-top: 15px;
    -    padding-bottom: 15px;
    -    text-align: center;
    -}
    -
    -.infoBox p {
    -    margin: 0;
    -}
    -
    -.counter, .percent {
    -    font-size: 120%;
    -    font-weight: bold;
    -    margin-bottom: 8px;
    -}
    -
    -#duration {
    -    width: 125px;
    -}
    -
    -#successRate, .summaryGroup {
    -    border: solid 2px #d0d0d0;
    -    -moz-border-radius: 10px;
    -    border-radius: 10px;
    -}
    -
    -#successRate {
    -    width: 140px;
    -    margin-left: 35px;
    -}
    -
    -#successRate .percent {
    -    font-size: 180%;
    -}
    -
    -.success, .success a {
    -    color: #008000;
    -}
    -
    -div.success, #successRate.success {
    -    background-color: #bbd9bb;
    -    border-color: #008000;
    -}
    -
    -.failures, .failures a {
    -    color: #b60808;
    -}
    -
    -.skipped, .skipped a {
    -    color: #c09853;
    -}
    -
    -div.failures, #successRate.failures {
    -    background-color: #ecdada;
    -    border-color: #b60808;
    -}
    -
    -ul.linkList {
    -    padding-left: 0;
    -}
    -
    -ul.linkList li {
    -    list-style: none;
    -    margin-bottom: 5px;
    -}
    diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html
    deleted file mode 100644
    index 2d9cc44d..00000000
    --- a/build/reports/tests/test/index.html
    +++ /dev/null
    @@ -1,143 +0,0 @@
    -<!DOCTYPE html>
    -<html>
    -<head>
    -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    -<meta http-equiv="x-ua-compatible" content="IE=edge"/>
    -<title>Test results - Test Summary</title>
    -<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
    -<link href="css/style.css" rel="stylesheet" type="text/css"/>
    -<script src="js/report.js" type="text/javascript"></script>
    -</head>
    -<body>
    -<div id="content">
    -<h1>Test Summary</h1>
    -<div id="summary">
    -<table>
    -<tr>
    -<td>
    -<div class="summaryGroup">
    -<table>
    -<tr>
    -<td>
    -<div class="infoBox" id="tests">
    -<div class="counter">13</div>
    -<p>tests</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="failures">
    -<div class="counter">0</div>
    -<p>failures</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="ignored">
    -<div class="counter">0</div>
    -<p>ignored</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="duration">
    -<div class="counter">0.064s</div>
    -<p>duration</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox success" id="successRate">
    -<div class="percent">100%</div>
    -<p>successful</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -<div class="tab-container">
    -<ul class="tabLinks">
    -<li>
    -<a href="#">Packages</a>
    -</li>
    -<li>
    -<a href="#">Classes</a>
    -</li>
    -</ul>
    -<div class="tab">
    -<h2>Packages</h2>
    -<table>
    -<thead>
    -<tr>
    -<th>Package</th>
    -<th>Tests</th>
    -<th>Failures</th>
    -<th>Ignored</th>
    -<th>Duration</th>
    -<th>Success rate</th>
    -</tr>
    -</thead>
    -<tbody>
    -<tr>
    -<td class="success">
    -<a href="packages/hhn.temp.project.html">hhn.temp.project</a>
    -</td>
    -<td>13</td>
    -<td>0</td>
    -<td>0</td>
    -<td>0.064s</td>
    -<td class="success">100%</td>
    -</tr>
    -</tbody>
    -</table>
    -</div>
    -<div class="tab">
    -<h2>Classes</h2>
    -<table>
    -<thead>
    -<tr>
    -<th>Class</th>
    -<th>Tests</th>
    -<th>Failures</th>
    -<th>Ignored</th>
    -<th>Duration</th>
    -<th>Success rate</th>
    -</tr>
    -</thead>
    -<tbody>
    -<tr>
    -<td class="success">
    -<a href="classes/hhn.temp.project.BadCasesTest.html">hhn.temp.project.BadCasesTest</a>
    -</td>
    -<td>6</td>
    -<td>0</td>
    -<td>0</td>
    -<td>0.057s</td>
    -<td class="success">100%</td>
    -</tr>
    -<tr>
    -<td class="success">
    -<a href="classes/hhn.temp.project.GoodCasesTest.html">hhn.temp.project.GoodCasesTest</a>
    -</td>
    -<td>7</td>
    -<td>0</td>
    -<td>0</td>
    -<td>0.007s</td>
    -<td class="success">100%</td>
    -</tr>
    -</tbody>
    -</table>
    -</div>
    -</div>
    -<div id="footer">
    -<p>
    -<div>
    -<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
    -<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
    -</label>
    -</div>Generated by 
    -<a href="https://www.gradle.org">Gradle 8.14</a> at 03.12.2025, 19:35:34</p>
    -</div>
    -</div>
    -</body>
    -</html>
    diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js
    deleted file mode 100644
    index e246ebad..00000000
    --- a/build/reports/tests/test/js/report.js
    +++ /dev/null
    @@ -1,218 +0,0 @@
    -(function (window, document) {
    -    "use strict";
    -
    -    function changeElementClass(element, classValue) {
    -        if (element.getAttribute("className")) {
    -            element.setAttribute("className", classValue);
    -        } else {
    -            element.setAttribute("class", classValue);
    -        }
    -    }
    -
    -    function getClassAttribute(element) {
    -        if (element.getAttribute("className")) {
    -            return element.getAttribute("className");
    -        } else {
    -            return element.getAttribute("class");
    -        }
    -    }
    -
    -    function addClass(element, classValue) {
    -        changeElementClass(element, getClassAttribute(element) + " " + classValue);
    -    }
    -
    -    function removeClass(element, classValue) {
    -        changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
    -    }
    -
    -    function getCheckBox() {
    -        return document.getElementById("line-wrapping-toggle");
    -    }
    -
    -    function getLabelForCheckBox() {
    -        return document.getElementById("label-for-line-wrapping-toggle");
    -    }
    -
    -    function findCodeBlocks() {
    -        const codeBlocks = [];
    -        const tabContainers = getTabContainers();
    -        for (let i = 0; i < tabContainers.length; i++) {
    -            const spans = tabContainers[i].getElementsByTagName("span");
    -            for (let i = 0; i < spans.length; ++i) {
    -                if (spans[i].className.indexOf("code") >= 0) {
    -                    codeBlocks.push(spans[i]);
    -                }
    -            }
    -        }
    -        return codeBlocks;
    -    }
    -
    -    function forAllCodeBlocks(operation) {
    -        const codeBlocks = findCodeBlocks();
    -
    -        for (let i = 0; i < codeBlocks.length; ++i) {
    -            operation(codeBlocks[i], "wrapped");
    -        }
    -    }
    -
    -    function toggleLineWrapping() {
    -        const checkBox = getCheckBox();
    -
    -        if (checkBox.checked) {
    -            forAllCodeBlocks(addClass);
    -        } else {
    -            forAllCodeBlocks(removeClass);
    -        }
    -    }
    -
    -    function initControls() {
    -        if (findCodeBlocks().length > 0) {
    -            const checkBox = getCheckBox();
    -            const label = getLabelForCheckBox();
    -
    -            checkBox.onclick = toggleLineWrapping;
    -            checkBox.checked = false;
    -
    -            removeClass(label, "hidden");
    -         }
    -    }
    -
    -    class TabManager {
    -        baseId;
    -        tabs;
    -        titles;
    -        headers;
    -
    -        constructor(baseId, tabs, titles, headers) {
    -            this.baseId = baseId;
    -            this.tabs = tabs;
    -            this.titles = titles;
    -            this.headers = headers;
    -        }
    -
    -        select(i) {
    -            this.deselectAll();
    -
    -            changeElementClass(this.tabs[i], "tab selected");
    -            changeElementClass(this.headers[i], "selected");
    -
    -            while (this.headers[i].firstChild) {
    -                this.headers[i].removeChild(this.headers[i].firstChild);
    -            }
    -
    -            const a = document.createElement("a");
    -
    -            a.appendChild(document.createTextNode(this.titles[i]));
    -            this.headers[i].appendChild(a);
    -        }
    -
    -        deselectAll() {
    -            for (let i = 0; i < this.tabs.length; i++) {
    -                changeElementClass(this.tabs[i], "tab deselected");
    -                changeElementClass(this.headers[i], "deselected");
    -
    -                while (this.headers[i].firstChild) {
    -                    this.headers[i].removeChild(this.headers[i].firstChild);
    -                }
    -
    -                const a = document.createElement("a");
    -
    -                const id = this.baseId + "-tab" + i;
    -                a.setAttribute("id", id);
    -                a.setAttribute("href", "#tab" + i);
    -                a.onclick = () => {
    -                    this.select(i);
    -                    return false;
    -                };
    -                a.appendChild(document.createTextNode(this.titles[i]));
    -
    -                this.headers[i].appendChild(a);
    -            }
    -        }
    -    }
    -
    -    function getTabContainers() {
    -        const tabContainers = Array.from(document.getElementsByClassName("tab-container"));
    -
    -        // Used by existing TabbedPageRenderer users, which have not adjusted to use TabsRenderer yet.
    -        const legacyContainer = document.getElementById("tabs");
    -        if (legacyContainer) {
    -            tabContainers.push(legacyContainer);
    -        }
    -
    -        return tabContainers;
    -    }
    -
    -    function initTabs() {
    -        let tabGroups = 0;
    -
    -        function createTab(num, container) {
    -            const tabElems = findTabs(container);
    -            const tabManager = new TabManager("tabs" + num, tabElems, findTitles(tabElems), findHeaders(container));
    -            tabManager.select(0);
    -        }
    -
    -        const tabContainers = getTabContainers();
    -
    -        for (let i = 0; i < tabContainers.length; i++) {
    -            createTab(tabGroups, tabContainers[i]);
    -            tabGroups++;
    -        }
    -
    -        return true;
    -    }
    -
    -    function findTabs(container) {
    -        return findChildElements(container, "DIV", "tab");
    -    }
    -
    -    function findHeaders(container) {
    -        const owner = findChildElements(container, "UL", "tabLinks");
    -        return findChildElements(owner[0], "LI", null);
    -    }
    -
    -    function findTitles(tabs) {
    -        const titles = [];
    -
    -        for (let i = 0; i < tabs.length; i++) {
    -            const tab = tabs[i];
    -            const header = findChildElements(tab, "H2", null)[0];
    -
    -            header.parentNode.removeChild(header);
    -
    -            if (header.innerText) {
    -                titles.push(header.innerText);
    -            } else {
    -                titles.push(header.textContent);
    -            }
    -        }
    -
    -        return titles;
    -    }
    -
    -    function findChildElements(container, name, targetClass) {
    -        const elements = [];
    -        const children = container.childNodes;
    -
    -        for (let i = 0; i < children.length; i++) {
    -            const child = children.item(i);
    -
    -            if (child.nodeType === 1 && child.nodeName === name) {
    -                if (targetClass && child.className.indexOf(targetClass) < 0) {
    -                    continue;
    -                }
    -
    -                elements.push(child);
    -            }
    -        }
    -
    -        return elements;
    -    }
    -
    -    // Entry point.
    -
    -    window.onload = function() {
    -        initTabs();
    -        initControls();
    -    };
    -} (window, window.document));
    diff --git a/build/reports/tests/test/packages/hhn.temp.project.html b/build/reports/tests/test/packages/hhn.temp.project.html
    deleted file mode 100644
    index f902adb1..00000000
    --- a/build/reports/tests/test/packages/hhn.temp.project.html
    +++ /dev/null
    @@ -1,113 +0,0 @@
    -<!DOCTYPE html>
    -<html>
    -<head>
    -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    -<meta http-equiv="x-ua-compatible" content="IE=edge"/>
    -<title>Test results - Package hhn.temp.project</title>
    -<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
    -<link href="../css/style.css" rel="stylesheet" type="text/css"/>
    -<script src="../js/report.js" type="text/javascript"></script>
    -</head>
    -<body>
    -<div id="content">
    -<h1>Package hhn.temp.project</h1>
    -<div class="breadcrumbs">
    -<a href="../index.html">all</a> &gt; hhn.temp.project</div>
    -<div id="summary">
    -<table>
    -<tr>
    -<td>
    -<div class="summaryGroup">
    -<table>
    -<tr>
    -<td>
    -<div class="infoBox" id="tests">
    -<div class="counter">13</div>
    -<p>tests</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="failures">
    -<div class="counter">0</div>
    -<p>failures</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="ignored">
    -<div class="counter">0</div>
    -<p>ignored</p>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox" id="duration">
    -<div class="counter">0.064s</div>
    -<p>duration</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -</td>
    -<td>
    -<div class="infoBox success" id="successRate">
    -<div class="percent">100%</div>
    -<p>successful</p>
    -</div>
    -</td>
    -</tr>
    -</table>
    -</div>
    -<div class="tab-container">
    -<ul class="tabLinks">
    -<li>
    -<a href="#">Classes</a>
    -</li>
    -</ul>
    -<div class="tab">
    -<h2>Classes</h2>
    -<table>
    -<thead>
    -<tr>
    -<th>Class</th>
    -<th>Tests</th>
    -<th>Failures</th>
    -<th>Ignored</th>
    -<th>Duration</th>
    -<th>Success rate</th>
    -</tr>
    -</thead>
    -<tr>
    -<td class="success">
    -<a href="../classes/hhn.temp.project.BadCasesTest.html">BadCasesTest</a>
    -</td>
    -<td>6</td>
    -<td>0</td>
    -<td>0</td>
    -<td>0.057s</td>
    -<td class="success">100%</td>
    -</tr>
    -<tr>
    -<td class="success">
    -<a href="../classes/hhn.temp.project.GoodCasesTest.html">GoodCasesTest</a>
    -</td>
    -<td>7</td>
    -<td>0</td>
    -<td>0</td>
    -<td>0.007s</td>
    -<td class="success">100%</td>
    -</tr>
    -</table>
    -</div>
    -</div>
    -<div id="footer">
    -<p>
    -<div>
    -<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
    -<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
    -</label>
    -</div>Generated by 
    -<a href="https://www.gradle.org">Gradle 8.14</a> at 03.12.2025, 19:35:34</p>
    -</div>
    -</div>
    -</body>
    -</html>
    diff --git a/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml b/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml
    deleted file mode 100644
    index 6d77e6ae..00000000
    --- a/build/test-results/test/TEST-hhn.temp.project.BadCasesTest.xml
    +++ /dev/null
    @@ -1,12 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<testsuite name="hhn.temp.project.BadCasesTest" tests="6" skipped="0" failures="0" errors="0" timestamp="2025-12-03T18:35:34.515Z" hostname="KEVIN-THINKPAD" time="0.067">
    -  <properties/>
    -  <testcase name="Assert List isn't empty after adding a task" classname="hhn.temp.project.BadCasesTest" time="0.046"/>
    -  <testcase name="Assert that Remove Task is programmed defensively" classname="hhn.temp.project.BadCasesTest" time="0.003"/>
    -  <testcase name="Assert Add Task is programmed defensively" classname="hhn.temp.project.BadCasesTest" time="0.002"/>
    -  <testcase name="Assert only existing tasks can be edited" classname="hhn.temp.project.BadCasesTest" time="0.002"/>
    -  <testcase name="Assert that un-/finishing a Task only works with valid parameters" classname="hhn.temp.project.BadCasesTest" time="0.002"/>
    -  <testcase name="Assert that added tasks can't be Null" classname="hhn.temp.project.BadCasesTest" time="0.002"/>
    -  <system-out><![CDATA[]]></system-out>
    -  <system-err><![CDATA[]]></system-err>
    -</testsuite>
    diff --git a/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml b/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml
    deleted file mode 100644
    index f0783ce3..00000000
    --- a/build/test-results/test/TEST-hhn.temp.project.GoodCasesTest.xml
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<testsuite name="hhn.temp.project.GoodCasesTest" tests="7" skipped="0" failures="0" errors="0" timestamp="2025-12-03T18:35:34.587Z" hostname="KEVIN-THINKPAD" time="0.013">
    -  <properties/>
    -  <testcase name="Check Getters" classname="hhn.temp.project.GoodCasesTest" time="0.003"/>
    -  <testcase name="Assert that added Tasks are added to the List" classname="hhn.temp.project.GoodCasesTest" time="0.001"/>
    -  <testcase name="Assert that Worker can remove Task" classname="hhn.temp.project.GoodCasesTest" time="0.0"/>
    -  <testcase name="Assert that a Worker can add a Task" classname="hhn.temp.project.GoodCasesTest" time="0.001"/>
    -  <testcase name="Assert existing Tasks can be edited" classname="hhn.temp.project.GoodCasesTest" time="0.0"/>
    -  <testcase name="Assert that Task State is actually changed when submitted as finished" classname="hhn.temp.project.GoodCasesTest" time="0.002"/>
    -  <testcase name="Assert deleted Tasks no longer show up in the List" classname="hhn.temp.project.GoodCasesTest" time="0.0"/>
    -  <system-out><![CDATA[]]></system-out>
    -  <system-err><![CDATA[]]></system-err>
    -</testsuite>
    diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
    deleted file mode 100644
    index 7aff7fb428a834f67fb13674b03ff9e04f91f283..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 1258
    zcmah|OKuZE5N+F#@aGD}24;{j5(_p+2*<Gu5^@lUVBMLiWCoABN8RlVUU34lAR9g+
    z5dt9*0Sj^i7TkmrZ~>}6w#P&wvl~_QtM^{LYBihtSti;BM`gQI@);(ky~5Kj*Qhs8
    zo0s(;#u{&bzj*a$sqvm`jmkXCwHe5&H!97fvt>|q(lm;{c3cr`6>=@E86bEw0d8A>
    zr)e&>frH_C$l4xs?+R;u^PrD$BzJIwiff{nbdm&1qo431Pako`M@SetihqP5CgTSD
    z6R>Y+Adrx4>KtJTDQ=<A`3@En)(WGpvQvkC6wy6t&S98Ctta6(1O9b(df(&s(%e`P
    zz2{^FiMGRt`<H+zsRS5m&JGO;7qE$d^b%7xg>18>BM)gI)(tn<&A8Y`{XdU>Ho_oh
    z(pcQMxs{7tXWoA2mZMNfHPle$CW9U8Gn6x<XAEw!<#(RJ04t}Xqi`V2U|bYY{JB1e
    z7EI0?tJTV(^^+jmHv_xP&K?|#U0=$1?sgacg0Xj&&xGLh(byO~CE{JF6s5M9MDcDn
    z!(<4dINSGKcJB4uJiVUD>VdG~jN<Rdc{^>u722R$9TH52F3hYEh}>i64?Ln}fU3)d
    zkKkG*?E5JGSO@k^ZnesV+a-z7XYXmR!!Eq}2Q36Mia*tHIMk4c9o>+fHlx*L7e9EQ
    zg}@QJ6|_-AI?gHJEOuV+V(g~OR@tS%%y!jd7sbC8!e#5=8teh`#Ef}C;Z9sgQ>Zc&
    zpvRk|oc2b%HTWdfBHm}0!_}-}K}YT`Q?KTlmnCu)#Ye%4)R&!f4MIX8=@1lX+AEAp
    M$i;kNQz7@+UjzopApigX
    
    diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/AssignmentManager.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/AssignmentManager.class.uniqueId0
    deleted file mode 100644
    index 1e2b98f219db10c1ed2569e311e9f798a6721ded..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 2745
    zcmb7G*>V#{6g{oQW6R?eFxVzAEHRQ7#O45&?Zj+B#)iZuc1$+L(jX7WBWE-M@+rwT
    z<RPg79O5dHhg4FPFUeP=a&FIP2_jXbTxzNBbf0tXJ-2)O=ifiS0x*Z|6k>=QNSH{X
    zL!tkn{n*ZyZLgHQv-!{|1PUFquIC2x3h{Ji%|NHZfL>G!+;aA&UENx?cTzAA??N|B
    z13e~s(Wh{HYs<?9&h}1r$FB%fcA;8zOWwBQ1<ST)mmFWA>q*6b<oJY8=v!*yGLRFz
    z0TY7)W(0Qi5rYQyD;#V?Ue_qHVaUWm93of<oG)Ij)Vx5bR6d1$7?DIr6^7Cwn@)8#
    z@LjKz%V*Y7cn3!e95rF#SUpp{CQlSC*?4T1YtEeqf|1X(phPQj-8g}h2HrI>hEobX
    z|H_JG+^Mmums<J5Qs-K*qDU)z6cY4|iE&IQbQdaKV7p%Rmh+9mfj2;A?irY(7foC9
    z<+4+<%L{&~CQe*`T5xs(x8ijot8h6iWWH!^*Q$Z#JaswRUeWUGZO5wkR?(>zd{=L<
    z3buDDur?jbtCh<sOyaE6_S|biqS{L9T;QWN>+aH6G44GR7sa?9ak^n!3g>ZIU}qGT
    z)A@W$i6Y=PMA|so8ZVbw>%=S_6n2a07AsEG@+wivQsa3O@8bj7RdQ(8*qdtGLLHgY
    zi7N^x>Y%JwSkHC_$?KYl>ryVG>IAo0Ux|Ha;-<uU8N1f3wFp`?aZ3bs_|A6avBR^o
    z%F|>AHJ`udLM{4C@|euFNUOKyQd?O<ak=@NLezWzZ@=WJcPFk^iWJee<a*BS+V-a7
    z-?cZ(j0`SS3U+zT_Fb7r!9=j-RuxXR3u^aC!7TWW9XO%Z|LCo}LP9!J2%DWAH3%#A
    zL|+dI!|jw&4d{YhEJ{KO>GWH*S%$2gA#%RRv)FPpC@0WR2ipmC(b(pzfnAUrEh>t^
    zHVf%T<W_0(D%#c|xI&kT))Rr(R64pS>i*Huxz}TF*AtpYI-=7lx{;#HTOPd38g+%;
    z8K#n8DiT|*)ck^T!<Cj8YBTw?ScYS~17dt9CHUd{0}4z06~i(|z5*Ka+nn=;=Loql
    zI2wG$mlwx7oK+F$A8>4Z7ixSD#>OtXo+H)#**_5fYc@XjBNxT+5yug37SaT1`q0n$
    z0FIE<;``!bKCwbTtYDS1Bb<o<#kkTEV*I{~PdJKzuZboCCibvzV`6;c84e`w-+PV&
    zyBJ;`e?}#Y{Di}kFL6AMb(ww7<)M^by>$rtNijx}CjCT2PhhNJon*4+Q*3aj!aaNz
    z(Z6CnlEhmPs!{U1L^_6V(LMP)jHy4+vxmuz!PC1q^UEI2Z-~BWt#5jCa*8#(G?U=Y
    zetxF8c{tHfIV~#Vx?n?^VU+p~<2Va4gQN7x(rPb+><zUm_*@r@inMO=cm-cDgE;pc
    z!k74pg}={e0<l9~%)-WIl*<m+$odIU)X3$#D2JTn(0no%!>>611DA&)!&080pC{?)
    zm=-q_!ZpNAprFMGeH?0pyhS)%Bt~XAQ~XW}hv0@5NuvQ7jc0}nBD}C+A23$J7Doa3
    zjkwZXiv(%4W1oN?uG>>jX`!A{_#{keCOMp(dV#CM$>GEc+>pKvGYtE7l7*k*{{vaf
    z;ta0fEb=&~)y;>@jcgYiRxIkgrL>FM6zSJRZAyYDz1oyy-4shqaq%$9$S1q(%rr~S
    p2CHZAnko4h)|-L{_36GqOQvbbMWk`5#g<G%Xr|qkM`Vnl{15B6b7uem
    
    diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Task.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/Task.class.uniqueId1
    deleted file mode 100644
    index 41957b7bebf1c8d74ae635c62618c19a181cdac6..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 1186
    zcma)*-)<5?6vn>+b}6vX7E4P7v1nD;s`~&{5~DF8q4lB-y<X@Bwk=DuZ1qKa3@<d1
    zn0Vm>_)y003|MMe6GNCkXTCG%H{Z<u{Pq0@fR}ihMFPn*QWgxD3TtQXd)K*egMss|
    zcjomY1@na;_)$wC*=Tk%SV1O@tc4sbh0<^sIFUEHbS}fO$em+%a;}gbxq&<ILWSMV
    zlH}E7;tzt67eog$)xPXnu&|0Xg;d~<JcVLsL2?v@elXCgqJ=x6%AI<Xe&}CD{y32A
    zl7&rd5jJA|_NjtuOL*JDT?wyz7>DOxC<_OTc6)j6n8<%{H@oD0Jw7GxYR3<}!>dux
    z3y<C2g+9T!?_PA>(3kl<n2Lt}L}6>$6)|p~&JDciP&=^EXf9JxF!>`WHI~<fsK71W
    zEbL)`DSrhrR7gGXgSXnIpNyPbdz3vIUxj_|tuN=ui1NAI2I{ml!FOZu&&y&9xenda
    ze%;e=-Sd60PeV~%VO!<wBePBRJN7pyd)t^IZ9khLZ*QljShp)vY}nN)%3r8S;2zr=
    zcK|X-A<JKmRV|c|=dBiSpR*cQTeCem-{FkA%Tr)Q83~OL?`Ynn9tm+ukA%^nvW^FA
    zh0tLynTGup`Oh58FiagR>T=dhFfXU@5W9>>a*JvyX4-o^)Z!5Gje*z(!3217rn&|;
    zHJlWF6brI`8>Acy@;Dx3{WeI2Ak}|>h&KZA1daKjZaT8@iS#!esl|dcW0T9blk2g`
    Iwl1;v8)sF%n*aa+
    
    diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
    deleted file mode 100644
    index 18ca8e6861c8816ee69b1560794d787e67a705e1..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 388
    zcmZQ$2w~J?(qq<RVQ9(7$YW(_ElJHSU}NYgD9X=DO)g<)XyjmMNi5D5;9b;yK5zPu
    zJ15ctmtJ&d*~jV2<;cj*&{bTVnVy%MnpeWZ(4Lr=n4VfBaAeig#Mc+rTv%S#X~UE(
    z`I<MJk&mG*zbG3hw?~b!p1<?{j$M9BYA<jb-{toea1qoK(qj^4=mgqXmYI@T#4f_n
    zkyw(Llvtd~Bk=6)p;a@@KRr)l*%TUTlvgVtkobm^&x!x{{Jj4e5(amZuZjjUhymT5
    zSduD`w*1Kx#z{Z^w_O*Vn|SxKI4c7q10yE`Cy-=d;03b<fFwVIC?g|Kkb$8Ah~c0C
    z&H_q+WZA^^B*G>2rSzrsSy<WF`D7Scvl7b^fijG|vU+mC@*$EOVlp7EsDhq6n8Bc^
    or{tonuc9v{%q{{J5m41r^Hq10<mLf$IW_b&eU%_=evl;$0I^?Tvj6}9
    
    diff --git a/build/tmp/compileTestJava/compileTransaction/stash-dir/GoodCasesTest.class.uniqueId0 b/build/tmp/compileTestJava/compileTransaction/stash-dir/GoodCasesTest.class.uniqueId0
    deleted file mode 100644
    index 55ac44299889cef1b5bfe9b57e0e4fad72ccd204..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 4430
    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
    DGKN&w
    
    diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
    deleted file mode 100644
    index d7e76392ae6f837e0a59ddefb9294319ce114fcf..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 1347
    zcmah|3s6*L6h4;)Wr4+?<spw)SE2<0e=wjBF<q8rlQ*)4KnmC8!d_tS-MRNJL=!$n
    zp5n;XM9ehRG!C>@4gyU;g-#E(nj$a?ri3U5BFCYLXd2VhexQd;Hl2Uw%zqx=`Oo>!
    zIZj}tbWX`K?2KLT8mKp$xwX(BF&3*UG+PC}f-y;QIN}CJ=~8!SphZUXfO<xhP*Hrs
    z2cJye47ybtc&?<u*Qzjj>ed-#2<myh)ZGI`MjdC1Zx5IBoE;Ju=g=uvFQXEBV;}5`
    z{fLiHz8)GYY#b~3Lvw}A%1Vq70QIz$m3vU&1PTb$2PG@-gGQ!|7nopTGMQHls>}^q
    znHr9XB3sT`7*5&<O*BWBGs22JB<ubZWhgYUqP2>yeSjb>%!);0l!XydtfVLfK)6=9
    zX(<XLNG#8Z)Y796kuQscMqa2S(UzQ|@-&;thtLwUEW%;9i~bgT0?}uQU56rPxJ*A~
    zi{u%i>c!Y68k(%MKwCuQ|GfLpH=}mU&ZZ9z{V?5Qj=@{7--B?Rlv{42g;JL00+71l
    zjD0lbsb{?>I)ASo`&AQ*{o<gNw~`9UhsRZ*F1K49;T2cJSG2vw_*BPt8l*VcG{SXU
    zpZusSx9gI@`J4)!f32OqHhOy0QQeZ{WD2+zzw4o#hqVbfMotJ_RqoZdRrfD`^W&BT
    z*?VtRZ_P^#jhAnOMpB?nL~-<u+;6`aab6hrJh5S+av}u%@^z7aQ1F$$zWn?HAMa~7
    z_@K*o`ch7G_RJ5pcVANOIr*s<GQ6BA9jSSB@XH(HIjXPh_N3J9sgD?Ugoev^k|tOf
    z-X>{DhuA8cz$BB4N#ccCG@mcK{oMFlAwRv7?%34r2=+#kd|<$$y?^_=_V05pzMf*&
    z<)s+)I2C&vpry>lnU=aFe-xU{0$;;&<-4HSX0=wajDRK;dU*1}z+9|nf&bX$`GGXO
    zJ{^ud!I*3keV~d#^Akl=vo1lAbluLjgX)B{;ppP<Z=EmIX}5iz*gY_F@M%W`8q!dQ
    z*0oFzzMa)sH|iccm0`@pSvVW#VBcJ5A(JGLIkfDCW)p9*ka5X_R+{5@@^MRP8KIf<
    zX!)@Vj+)7a!r-g>b6R)1^ql`N3Y9r#W~gVb-)WrieUY9TTc3@3M>f9yLQ~;Fwo6;D
    zX>K?VVd%H;rM4<&Gs~6nYQ9VzMpgtbF9_kw>w#B>DNJpqMYYLHbLC8F4D{X$ch_8D
    za$g0Bh12(f{4-~(yfqY1Do_!wfp`jB12aOBymV>du$8Fd!3WOVE7+>MSH(*ruyF8(
    zH~ts)uf%oB(6nV9LAVMs2={_0!ZnZ$gZ~}!ulC_To3|<@I82e9cG`m<Gv@2|8VaHd
    nql==~taX(mcaO)Rp@OcaiJemH!~2cJx{~Aqw<SH%kVEJX-z3WU
    
    diff --git a/build/tmp/jacocoTestCoverageVerification/success.txt b/build/tmp/jacocoTestCoverageVerification/success.txt
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/git show bc0e30860cb3697296a4ef6ee22735a5c83cf522 b/git show bc0e30860cb3697296a4ef6ee22735a5c83cf522
    deleted file mode 100644
    index 28599ad1..00000000
    --- a/git show bc0e30860cb3697296a4ef6ee22735a5c83cf522	
    +++ /dev/null
    @@ -1,44 +0,0 @@
    -commit bc0e30860cb3697296a4ef6ee22735a5c83cf522 (HEAD -> database)
    -Author: Riley Schneider <88947587+Ferryry@users.noreply.github.com>
    -Date:   Wed Dec 3 17:30:33 2025 +0100
    -
    -    First database tests
    -
    -commit 26f7ecbee653b98739e75eb8c4707745f252a1a8 (origin/main, origin/HEAD, main)
    -Merge: 668a76e2 eed1390c
    -Author: Ferryry <rileymika99@gmail.com>
    -Date:   Wed Dec 3 16:44:45 2025 +0100
    -
    -    Merge pull request 'Skeleton' (#1) from Skeleton into main
    -    
    -    Reviewed-on: https://home.luithardt.cloud:5400/KevinSchoenmayer/GseTDDUebungKCLR/pulls/1
    -
    -commit eed1390c6513f1b5e827fd6e09c91f54da7be463 (origin/Skeleton, Skeleton)
    -Author: Riley Schneider <88947587+Ferryry@users.noreply.github.com>
    -Date:   Wed Dec 3 16:42:41 2025 +0100
    -
    -    Remove database folder
    -
    -commit b732d8d4b50abc5893d138c6a574fef0025981e0
    -Author: Riley Schneider <88947587+Ferryry@users.noreply.github.com>
    -Date:   Wed Dec 3 16:38:10 2025 +0100
    -
    -    Initial Commit
    -
    -commit c5e26bf594b282ab3d665590d0535b61afa18247
    -Author: KevinSchoenmayer <kschoenmay@stud.hs-heilbronn.de>
    -Date:   Wed Dec 3 16:28:17 2025 +0100
    -
    -    Rough Skeleton for Tests and Classes
    -
    -commit 668a76e26cfd908499bb74a7732269206062df86
    -Author: KevinSchoenmayer <kschoenmay@stud.hs-heilbronn.de>
    -Date:   Wed Dec 3 15:26:09 2025 +0100
    -
    -    Initial Test Push
    -
    -commit 2d963c7fd8ab188625c0e2bc9203c4d55ee07aa3
    -Author: KevinSchoenmayer <kschoenmay@stud.hs-heilbronn.de>
    -Date:   Wed Dec 3 15:18:41 2025 +0100
    -
    -    Initial commit
    
    From 3344ba67ccbc38cc6a5d6f025d8d649c3191f7df Mon Sep 17 00:00:00 2001
    From: Riley Schneider <88947587+Ferryry@users.noreply.github.com>
    Date: Sun, 14 Dec 2025 17:53:04 +0100
    Subject: [PATCH 13/14] Updated files and created compose.yml for internal
     database usage
    
    ---
     docker/compose.yml                            | 19 ++++++++++
     .../sql/createTaskTable.sql                   |  0
     resources/sql/createWorkerTable.sql           |  5 +++
     .../sql/deleteTaskTable.sql                   |  0
     .../sql/insertTaskTable.sql                   |  0
     resources/sql/insertWorkerTable.sql           |  1 +
     .../sql/selectTaskTable.sql                   |  0
     .../sql/updateTaskTable.sql                   |  0
     .../provider/SimpleDatabaseManager.java       | 35 +++++++++++++++++++
     .../temp/project/DatabaseGoodCasesTest.java   |  8 ++++-
     10 files changed, 67 insertions(+), 1 deletion(-)
     create mode 100644 docker/compose.yml
     rename {src/main/java/hhn/temp/project/provider => resources}/sql/createTaskTable.sql (100%)
     create mode 100644 resources/sql/createWorkerTable.sql
     rename {src/main/java/hhn/temp/project/provider => resources}/sql/deleteTaskTable.sql (100%)
     rename {src/main/java/hhn/temp/project/provider => resources}/sql/insertTaskTable.sql (100%)
     create mode 100644 resources/sql/insertWorkerTable.sql
     rename {src/main/java/hhn/temp/project/provider => resources}/sql/selectTaskTable.sql (100%)
     rename {src/main/java/hhn/temp/project/provider => resources}/sql/updateTaskTable.sql (100%)
    
    diff --git a/docker/compose.yml b/docker/compose.yml
    new file mode 100644
    index 00000000..60f5f3a9
    --- /dev/null
    +++ b/docker/compose.yml
    @@ -0,0 +1,19 @@
    +version: "3.9"
    +
    +services:
    +  mysql:
    +    image: mysql:8.0
    +    container_name: mysql-db
    +    restart: unless-stopped
    +    environment:
    +      MYSQL_ROOT_PASSWORD: root
    +      MYSQL_DATABASE: sql7810540&
    +      MYSQL_USER: sql7810540&
    +      MYSQL_PASSWORD: mXdJCFtDZz
    +    ports:
    +      - "3306:3306"
    +    volumes:
    +      - mysql_data:/var/lib/mysql
    +
    +volumes:
    +  mysql_data:
    \ No newline at end of file
    diff --git a/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql b/resources/sql/createTaskTable.sql
    similarity index 100%
    rename from src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql
    rename to resources/sql/createTaskTable.sql
    diff --git a/resources/sql/createWorkerTable.sql b/resources/sql/createWorkerTable.sql
    new file mode 100644
    index 00000000..159d6dde
    --- /dev/null
    +++ b/resources/sql/createWorkerTable.sql
    @@ -0,0 +1,5 @@
    +CREATE TABLE Worker (
    +    id INT AUTO_INCREMENT PRIMARY KEY,
    +    workerid INT,
    +    name VARCHAR(255) NOT NULL
    +);
    \ No newline at end of file
    diff --git a/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql b/resources/sql/deleteTaskTable.sql
    similarity index 100%
    rename from src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql
    rename to resources/sql/deleteTaskTable.sql
    diff --git a/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql b/resources/sql/insertTaskTable.sql
    similarity index 100%
    rename from src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql
    rename to resources/sql/insertTaskTable.sql
    diff --git a/resources/sql/insertWorkerTable.sql b/resources/sql/insertWorkerTable.sql
    new file mode 100644
    index 00000000..d99a2d5e
    --- /dev/null
    +++ b/resources/sql/insertWorkerTable.sql
    @@ -0,0 +1 @@
    +INSERT INTO Worker (workerid, name) VALUES (?, ?)
    \ No newline at end of file
    diff --git a/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql b/resources/sql/selectTaskTable.sql
    similarity index 100%
    rename from src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql
    rename to resources/sql/selectTaskTable.sql
    diff --git a/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql b/resources/sql/updateTaskTable.sql
    similarity index 100%
    rename from src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql
    rename to resources/sql/updateTaskTable.sql
    diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
    index e53ff173..ca958401 100644
    --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
    +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
    @@ -3,15 +3,50 @@ package hhn.temp.project.provider;
     import hhn.temp.project.Task;
     import hhn.temp.project.Worker;
     
    +import java.io.File;
    +import java.io.IOException;
    +import java.net.URISyntaxException;
    +import java.nio.file.Files;
    +import java.nio.file.Path;
     import java.sql.*;
     import java.util.*;
     
     public class SimpleDatabaseManager implements DatabaseManager {
     
    +  private final static Path INSERT_TASK = Path.of("./src/main/resources/sql/InsertTaskTable.sql");
    +  private final static Path DELETE_TASK = Path.of("./src/main/resources/sql/DeleteTaskTable.sql");
    +  private final static Path SELECT_TASK = Path.of("./src/main/resources/sql/SelectTaskTable.sql");
    +  private final static Path UPDATE_TASK = Path.of("./src/main/resources/sql/UpdateTaskTable.sql");
    +
       private boolean connected = false;
       private Map<Integer, Task> temporaryTaskList = new HashMap();
       private Map<Integer, Worker> temporaryWorkerList = new HashMap<>();
     
    +  public enum QueryMode {
    +    INSERT,
    +    SELECT,
    +    UPDATE,
    +    DELETE
    +  }
    +
    +  public String loadFile(QueryMode queryMode) throws IOException, URISyntaxException {
    +    switch (queryMode) {
    +      case INSERT -> {
    +        return Files.readString(INSERT_TASK);
    +      }
    +      case SELECT -> {
    +
    +      }
    +      case DELETE -> {
    +
    +      }
    +      case UPDATE -> {
    +
    +      }
    +    }
    +    return "";
    +  }
    +
       @Override
       public void saveTask(Task task) throws SQLException {
         if (!connected) {
    diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java
    index b72b00be..e34bd28f 100644
    --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java
    +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java
    @@ -9,6 +9,7 @@ import org.junit.jupiter.api.Test;
     import static org.junit.jupiter.api.Assertions.*;
     
     import java.io.IOException;
    +import java.net.URISyntaxException;
     import java.sql.SQLException;
     import java.util.ArrayList;
     import java.util.Collection;
    @@ -16,7 +17,7 @@ import java.util.List;
     
     public class DatabaseGoodCasesTest {
     
    -  private DatabaseManager databaseManager;
    +  private SimpleDatabaseManager databaseManager;
     
       @BeforeEach
       public void setup() throws SQLException {
    @@ -83,4 +84,9 @@ public class DatabaseGoodCasesTest {
         assertEquals(0, databaseManager.getTotalNumberOfTasks());
         assertEquals(0, databaseManager.getTotalNumberOfWorkers());
       }
    +
    +  @Test
    +  public void testRandom() throws IOException, URISyntaxException {
    +     System.out.println(databaseManager.loadFile(SimpleDatabaseManager.QueryMode.INSERT));
    +  }
     }
    \ No newline at end of file
    
    From 35e22bba99720f99165c947e38497bc078aea812 Mon Sep 17 00:00:00 2001
    From: Riley Schneider <88947587+Ferryry@users.noreply.github.com>
    Date: Thu, 18 Dec 2025 10:01:58 +0100
    Subject: [PATCH 14/14] Added MySQL functionality
    
    ---
     .idea/modules.xml                             |   1 +
     docker/compose.yml                            |   4 +-
     resources/sql/CountAllFieldsTask.sql          |   1 +
     resources/sql/CountAllFieldsWorker.sql        |   1 +
     resources/sql/SelectAllTask.sql               |   1 +
     resources/sql/SelectAllWorker.sql             |   1 +
     resources/sql/SelectTaskById.sql              |   1 +
     resources/sql/SelectWorkerById.sql            |   1 +
     resources/sql/UpdateWorkerTable.sql           |   1 +
     resources/sql/createTaskTable.sql             |   2 +-
     .../provider/SimpleDatabaseManager.java       | 395 +++++++++++++-----
     .../temp/project/DatabaseGoodCasesTest.java   |   4 +-
     12 files changed, 297 insertions(+), 116 deletions(-)
     create mode 100644 resources/sql/CountAllFieldsTask.sql
     create mode 100644 resources/sql/CountAllFieldsWorker.sql
     create mode 100644 resources/sql/SelectAllTask.sql
     create mode 100644 resources/sql/SelectAllWorker.sql
     create mode 100644 resources/sql/SelectTaskById.sql
     create mode 100644 resources/sql/SelectWorkerById.sql
     create mode 100644 resources/sql/UpdateWorkerTable.sql
    
    diff --git a/.idea/modules.xml b/.idea/modules.xml
    index ffe7c8fc..41600e97 100644
    --- a/.idea/modules.xml
    +++ b/.idea/modules.xml
    @@ -2,6 +2,7 @@
     <project version="4">
       <component name="ProjectModuleManager">
         <modules>
    +      <module fileurl="file://$PROJECT_DIR$/.idea/modules/Template.iml" filepath="$PROJECT_DIR$/.idea/modules/Template.iml" />
           <module fileurl="file://$PROJECT_DIR$/.idea/modules/Template.test.iml" filepath="$PROJECT_DIR$/.idea/modules/Template.test.iml" />
         </modules>
       </component>
    diff --git a/docker/compose.yml b/docker/compose.yml
    index 60f5f3a9..9f70a5e7 100644
    --- a/docker/compose.yml
    +++ b/docker/compose.yml
    @@ -7,8 +7,8 @@ services:
         restart: unless-stopped
         environment:
           MYSQL_ROOT_PASSWORD: root
    -      MYSQL_DATABASE: sql7810540&
    -      MYSQL_USER: sql7810540&
    +      MYSQL_DATABASE: sql7810540
    +      MYSQL_USER: sql7810540
           MYSQL_PASSWORD: mXdJCFtDZz
         ports:
           - "3306:3306"
    diff --git a/resources/sql/CountAllFieldsTask.sql b/resources/sql/CountAllFieldsTask.sql
    new file mode 100644
    index 00000000..8cbf36b5
    --- /dev/null
    +++ b/resources/sql/CountAllFieldsTask.sql
    @@ -0,0 +1 @@
    +SELECT COUNT(*) AS total FROM Task
    \ No newline at end of file
    diff --git a/resources/sql/CountAllFieldsWorker.sql b/resources/sql/CountAllFieldsWorker.sql
    new file mode 100644
    index 00000000..8534b834
    --- /dev/null
    +++ b/resources/sql/CountAllFieldsWorker.sql
    @@ -0,0 +1 @@
    +SELECT COUNT(*) AS total FROM Worker
    \ No newline at end of file
    diff --git a/resources/sql/SelectAllTask.sql b/resources/sql/SelectAllTask.sql
    new file mode 100644
    index 00000000..2de1e62b
    --- /dev/null
    +++ b/resources/sql/SelectAllTask.sql
    @@ -0,0 +1 @@
    +SELECT * FROM Task
    \ No newline at end of file
    diff --git a/resources/sql/SelectAllWorker.sql b/resources/sql/SelectAllWorker.sql
    new file mode 100644
    index 00000000..06c9037b
    --- /dev/null
    +++ b/resources/sql/SelectAllWorker.sql
    @@ -0,0 +1 @@
    +SELECT * FROM Worker
    \ No newline at end of file
    diff --git a/resources/sql/SelectTaskById.sql b/resources/sql/SelectTaskById.sql
    new file mode 100644
    index 00000000..ec4fcfb0
    --- /dev/null
    +++ b/resources/sql/SelectTaskById.sql
    @@ -0,0 +1 @@
    +SELECT * FROM Task WHERE taskid = ? LIMIT 1
    \ No newline at end of file
    diff --git a/resources/sql/SelectWorkerById.sql b/resources/sql/SelectWorkerById.sql
    new file mode 100644
    index 00000000..11b4b8fe
    --- /dev/null
    +++ b/resources/sql/SelectWorkerById.sql
    @@ -0,0 +1 @@
    +SELECT * FROM Worker WHERE workerid = ? LIMIT 1
    \ No newline at end of file
    diff --git a/resources/sql/UpdateWorkerTable.sql b/resources/sql/UpdateWorkerTable.sql
    new file mode 100644
    index 00000000..c69999a9
    --- /dev/null
    +++ b/resources/sql/UpdateWorkerTable.sql
    @@ -0,0 +1 @@
    +UPDATE Worker SET workerid = ?, name = ? WHERE workerid = ?
    \ No newline at end of file
    diff --git a/resources/sql/createTaskTable.sql b/resources/sql/createTaskTable.sql
    index bc1ab8f5..0098750e 100644
    --- a/resources/sql/createTaskTable.sql
    +++ b/resources/sql/createTaskTable.sql
    @@ -4,5 +4,5 @@ CREATE TABLE Task (
         name VARCHAR(255) NOT NULL,
         description TEXT,
         workerid INT,
    -    taskstate INT
    +    taskstate BIT
     );
    \ No newline at end of file
    diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
    index ca958401..4b364c49 100644
    --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
    +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java
    @@ -1,11 +1,10 @@
     package hhn.temp.project.provider;
     
     import hhn.temp.project.Task;
    +import hhn.temp.project.TaskState;
     import hhn.temp.project.Worker;
     
    -import java.io.File;
     import java.io.IOException;
    -import java.net.URISyntaxException;
     import java.nio.file.Files;
     import java.nio.file.Path;
     import java.sql.*;
    @@ -13,216 +12,392 @@ import java.util.*;
     
     public class SimpleDatabaseManager implements DatabaseManager {
     
    -  private final static Path INSERT_TASK = Path.of("./src/main/resources/sql/InsertTaskTable.sql");
    -  private final static Path DELETE_TASK = Path.of("./src/main/resources/sql/DeleteTaskTable.sql");
    -  private final static Path SELECT_TASK = Path.of("./src/main/resources/sql/SelectTaskTable.sql");
    -  private final static Path UPDATE_TASK = Path.of("./src/main/resources/sql/UpdateTaskTable.sql");
    +  private Connection connection;
     
    -  private boolean connected = false;
    -  private Map<Integer, Task> temporaryTaskList = new HashMap();
    -  private Map<Integer, Worker> temporaryWorkerList = new HashMap<>();
    +  private final static Path INSERT_TASK = Path.of("resources/sql/InsertTaskTable.sql");
    +  private final static Path DELETE_TASK = Path.of("resources/sql/DeleteTaskTable.sql");
    +  private final static Path SELECT_TASK = Path.of("resources/sql/SelectTaskTable.sql");
    +  private final static Path UPDATE_TASK = Path.of("resources/sql/UpdateTaskTable.sql");
    +  private final static Path COUNT_ALL_TASK = Path.of("resources/sql/CountAllFieldsTask.sql");
    +  private final static Path SELECT_ALL_TASK = Path.of("resources/sql/SelectAllFieldsTask.sql");
    +  private final static Path SELECT_TASK_BY_ID = Path.of("resources/sql/SelectTaskById.sql");
    +  private final static Path INSERT_WORKER = Path.of("resources/sql/InsertWorkerTable.sql");
    +  private final static Path DELETE_WORKER = Path.of("resources/sql/DeleteWorkerTable.sql");
    +  private final static Path SELECT_WORKER = Path.of("resources/sql/SelectWorkerTable.sql");
    +  private final static Path UPDATE_WORKER = Path.of("resources/sql/UpdateWorkerTable.sql");
    +  private final static Path COUNT_ALL_WORKER = Path.of("resources/sql/CountAllFieldsWorker.sql");
    +  private final static Path SELECT_ALL_WORKER = Path.of("resources/sql/SelectAllFieldsWorker.sql");
    +  private final static Path SELECT_WORKER_BY_ID = Path.of("resources/sql/SelectWorkerById.sql");
     
       public enum QueryMode {
    -    INSERT,
    -    SELECT,
    -    UPDATE,
    -    DELETE
    +    INSERT_TASK,
    +    SELECT_TASK,
    +    UPDATE_TASK,
    +    DELETE_TASK,
    +    SELECT_ALL_TASK,
    +    SELECT_TASK_BY_ID,
    +    COUNT_ALL_TASK,
    +    INSERT_WORKER,
    +    SELECT_WORKER,
    +    UPDATE_WORKER,
    +    DELETE_WORKER,
    +    COUNT_ALL_WORKER,
    +    SELECT_ALL_WORKER,
    +    SELECT_WORKER_BY_ID,
       }
     
    -  public String loadFile(QueryMode queryMode) throws IOException, URISyntaxException {
    +  public String loadFile(QueryMode queryMode) throws IOException {
         switch (queryMode) {
    -      case INSERT -> {
    +      case INSERT_TASK -> {
             return Files.readString(INSERT_TASK);
           }
    -      case SELECT -> {
    -
    +      case SELECT_TASK -> {
    +        return Files.readString(SELECT_TASK);
           }
    -      case DELETE -> {
    -
    +      case DELETE_TASK -> {
    +        return Files.readString(DELETE_TASK);
           }
    -      case UPDATE -> {
    -
    +      case UPDATE_TASK -> {
    +        return Files.readString(UPDATE_TASK);
    +      }
    +      case COUNT_ALL_TASK -> {
    +        return Files.readString(COUNT_ALL_TASK);
    +      }
    +      case SELECT_ALL_TASK -> {
    +        return Files.readString(SELECT_ALL_TASK);
    +      }
    +      case SELECT_TASK_BY_ID -> {
    +        return Files.readString(SELECT_TASK_BY_ID);
    +      }
    +      case INSERT_WORKER -> {
    +        return Files.readString(INSERT_WORKER);
    +      }
    +      case SELECT_WORKER -> {
    +        return Files.readString(SELECT_WORKER);
    +      }
    +      case DELETE_WORKER -> {
    +        return Files.readString(DELETE_WORKER);
    +      }
    +      case UPDATE_WORKER -> {
    +        return Files.readString(UPDATE_WORKER);
    +      }
    +      case COUNT_ALL_WORKER -> {
    +        return Files.readString(COUNT_ALL_WORKER);
    +      }
    +      case SELECT_ALL_WORKER -> {
    +        return Files.readString(SELECT_ALL_WORKER);
    +      }
    +      case SELECT_WORKER_BY_ID -> {
    +        return Files.readString(SELECT_WORKER_BY_ID);
    +      }
    +      default -> {
    +        return "";
           }
         }
    -    return "";
    +  }
    +
    +  private TaskState integerToTaskState(final int in) {
    +    return in == 1 ? TaskState.FINISHED : TaskState.IN_PROGRESS;
    +  }
    +
    +  private int taskStateToInteger(final TaskState taskState) {
    +    return taskState == TaskState.FINISHED ? 1 : 0;
       }
     
       @Override
    -  public void saveTask(Task task) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +  public void saveTask(final Task task) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.INSERT_TASK);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return;
         }
    -
    -    if (!temporaryTaskList.containsKey(task.getTaskId())) {
    -      temporaryTaskList.put(task.getTaskId(), task);
    -    } else {
    -      throw new SQLException("[INSERTION FAILED] Task with the same Task ID already exists.");
    +    try (PreparedStatement preparedStatement = connection.prepareStatement(query);) {
    +      preparedStatement.setInt(1, task.getTaskId());
    +      preparedStatement.setString(2, task.getName());
    +      preparedStatement.setString(3, task.getDescription());
    +      preparedStatement.setInt(4, task.getWorkerId());
    +      preparedStatement.setInt(5, taskStateToInteger(task.getTaskState()));
    +      preparedStatement.execute();
         }
       }
     
       @Override
    -  public void saveTasks(Collection<Task> tasks) throws SQLException {
    +  public void saveTasks(final Collection<Task> tasks) throws SQLException {
         for (Task task : tasks) {
           saveTask(task);
         }
       }
     
       @Override
    -  public void saveWorker(Worker worker) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +  public void saveWorker(final Worker worker) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.INSERT_WORKER);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return;
         }
    -
    -    if (!temporaryWorkerList.containsKey(worker.getId())) {
    -      temporaryWorkerList.put(worker.getId(), worker);
    -    } else {
    -      throw new SQLException("[INSERTION FAILED] Task with the same Task ID already exists.");
    +    try (PreparedStatement preparedStatement = connection.prepareStatement(query);) {
    +      preparedStatement.setInt(1, worker.getId());
    +      preparedStatement.setString(2, worker.getName());
    +      preparedStatement.execute();
         }
       }
     
       @Override
    -  public void saveWorkers(Collection<Worker> workers) throws SQLException {
    +  public void saveWorkers(final Collection<Worker> workers) throws SQLException {
         for (Worker worker : workers) {
           saveWorker(worker);
         }
       }
     
       @Override
    -  public void updateTask(int taskId, Task newTaskObject) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    -    }
    -
    -    if (temporaryTaskList.containsKey(taskId) && newTaskObject.getTaskId() == taskId) {
    -      temporaryTaskList.remove(taskId);
    -      temporaryTaskList.put(taskId, newTaskObject);
    +  public void updateTask(final int taskId, final Task newTaskObject) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.UPDATE_TASK);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
           return;
         }
    -
    -    throw new SQLException("[UPDATE FAILED] Task ID not found OR Task ID does not equal New Task ID.");
    +    try (PreparedStatement preparedStatement = connection.prepareStatement(query);) {
    +      preparedStatement.setString(1, newTaskObject.getName());
    +      preparedStatement.setString(2, newTaskObject.getDescription());
    +      preparedStatement.setInt(3, taskStateToInteger(newTaskObject.getTaskState()));
    +      preparedStatement.setInt(4, taskId);
    +      preparedStatement.execute();
    +    }
       }
     
       @Override
    -  public void updateWorker(int workerId, Worker newWorkerObject) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    -    }
    -
    -    if (temporaryWorkerList.containsKey(workerId) && newWorkerObject.getId() == workerId) {
    -      temporaryWorkerList.remove(workerId);
    -      temporaryWorkerList.put(workerId, newWorkerObject);
    +  public void updateWorker(final int workerId, final Worker newWorkerObject) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.UPDATE_WORKER);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
           return;
         }
    -
    -    throw new SQLException("[UPDATE FAILED] Worker ID not found OR Worker ID does not equal New Worker ID.");
    +    try (PreparedStatement preparedStatement = connection.prepareStatement(query);) {
    +      preparedStatement.setInt(1, newWorkerObject.getId());
    +      preparedStatement.setString(2, newWorkerObject.getName());
    +      preparedStatement.setInt(3, workerId);
    +      preparedStatement.execute();
    +    }
       }
     
       @Override
    -  public void deleteTask(int taskId) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    -    }
    -
    -    if (temporaryTaskList.containsKey(taskId)) {
    -      temporaryTaskList.remove(taskId);
    +  public void deleteTask(final int taskId) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.DELETE_TASK);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
           return;
         }
    -
    -    throw new SQLException("[DELETION FAILED] Could not find Task ID. Nothing to delete.");
    +    try (PreparedStatement preparedStatement = connection.prepareStatement(query);) {
    +      preparedStatement.setInt(1, taskId);
    +      preparedStatement.execute();
    +    }
       }
     
       @Override
    -  public void deleteWorker(int workerId) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    -    }
    -
    -    if (temporaryWorkerList.containsKey(workerId)) {
    -      temporaryWorkerList.remove(workerId);
    +  public void deleteWorker(final int workerId) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.DELETE_WORKER);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
           return;
         }
    -
    -    throw new SQLException("[DELETION FAILED] Could not find Worker ID. Nothing to delete.");
    +    try (PreparedStatement preparedStatement = connection.prepareStatement(query);) {
    +      preparedStatement.setInt(1, workerId);
    +      preparedStatement.execute();
    +    }
       }
     
       @Override
       public Collection<Task> getTasks() throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.SELECT_ALL_TASK);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return null;
         }
     
    -    return temporaryTaskList.values();
    +    Collection<Task> tasks = new ArrayList<>();
    +
    +    try (Statement statement = connection.createStatement();
    +         ResultSet rs = statement.executeQuery(query);) {
    +
    +      while (rs.next()) {
    +            int taskId = rs.getInt("taskid");
    +            String name = rs.getString("name");
    +            String description = rs.getString("description");
    +            int workerId = rs.getInt("workerid");
    +            TaskState taskState = integerToTaskState(rs.getInt("taskstate"));
    +
    +            Task task = new Task(taskId, workerId, name, description);
    +            task.setTaskState(taskState);
    +
    +            tasks.add(task);
    +      }
    +
    +    }
    +
    +    return tasks;
       }
     
       @Override
       public Collection<Worker> getWorkers() throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.SELECT_ALL_WORKER);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return null;
         }
     
    -    return temporaryWorkerList.values();
    +    Collection<Worker> workers = new ArrayList<>();
    +
    +    try (Statement statement = connection.createStatement();
    +         ResultSet rs = statement.executeQuery(query);) {
    +
    +      while (rs.next()) {
    +        int workerId = rs.getInt("workerid");
    +        String name = rs.getString("name");
    +
    +        Worker worker = new Worker(name, workerId);
    +
    +        workers.add(worker);
    +      }
    +
    +    }
    +
    +    return workers;
       }
     
       @Override
    -  public Task getTaskByTaskId(int taskId) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +  public Task getTaskByTaskId(final int taskId) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.SELECT_TASK_BY_ID);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return null;
         }
     
    -    if (temporaryTaskList.containsKey(taskId)) {
    -      return temporaryTaskList.get(taskId);
    +    try (PreparedStatement statement = connection.prepareStatement(query);) {
    +
    +      statement.setInt(1, taskId);
    +
    +      ResultSet rs = statement.executeQuery();
    +
    +      while (rs.next()) {
    +        int taskId1 = rs.getInt("taskid");
    +        String name = rs.getString("name");
    +        String description = rs.getString("description");
    +        int workerId = rs.getInt("workerid");
    +        TaskState taskState = integerToTaskState(rs.getInt("taskstate"));
    +
    +        Task task = new Task(taskId1, workerId, name, description);
    +        task.setTaskState(taskState);
    +
    +        return task;
    +      }
    +
         }
     
    -    throw new SQLException("[SELECTION FAILED] Could not find Task ID. Nothing to get.");
    +    return null;
       }
     
       @Override
    -  public Worker getWorkerByWorkerId(int workerId) throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +  public Worker getWorkerByWorkerId(final int workerId) throws SQLException {
    +    String query;
    +    try {
    +      query = loadFile(QueryMode.SELECT_WORKER_BY_ID);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return null;
         }
     
    -    if (temporaryWorkerList.containsKey(workerId)) {
    -      return temporaryWorkerList.get(workerId);
    +    try (PreparedStatement statement = connection.prepareStatement(query);) {
    +
    +      statement.setInt(1, workerId);
    +
    +      ResultSet rs = statement.executeQuery();
    +
    +      while (rs.next()) {
    +        int workerId1 = rs.getInt("workerid");
    +        String name = rs.getString("name");
    +
    +        Worker worker = new Worker(name, workerId1);
    +
    +        return worker;
    +      }
    +
         }
     
    -    throw new SQLException("[SELECTION FAILED] Could not find Worker ID. Nothing to get.");
    +    return null;
       }
     
       @Override
       public int getTotalNumberOfTasks() throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +    String query = "";
    +    try {
    +      query = loadFile(QueryMode.COUNT_ALL_TASK);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return -1;
    +    }
    +    try (Statement statement = connection.createStatement();
    +         ResultSet rs = statement.executeQuery(query);) {
    +
    +      if (rs.next()) {
    +        return rs.getInt("total");
    +      }
         }
     
    -    return temporaryTaskList.size();
    +    return 0;
       }
     
       @Override
       public int getTotalNumberOfWorkers() throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +    String query = "";
    +    try {
    +      query = loadFile(QueryMode.COUNT_ALL_WORKER);
    +    } catch (IOException e) {
    +      System.err.println(e.getStackTrace());
    +      return -1;
    +    }
    +    try (Statement statement = connection.createStatement();
    +         ResultSet rs = statement.executeQuery(query);) {
    +
    +      if (rs.next()) {
    +        return rs.getInt("total");
    +      }
         }
     
    -    return temporaryWorkerList.size();
    +    return 0;
       }
     
       public void clearDatabase() throws SQLException {
    -    if (!connected) {
    -      throw new SQLException("[CONNECTION FAILED] Instance is not connected to database.");
    +    try (Statement statement = connection.createStatement()) {
    +      statement.execute("TRUNCATE TABLE Task");
    +      statement.execute("TRUNCATE TABLE Worker");
         }
    -
    -    temporaryTaskList.clear();
    -    temporaryWorkerList.clear();
       }
     
       @Override
       public void connect() throws SQLException {
    -    connected = true;
    +    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/sql7810540?user=sql7810540&password=mXdJCFtDZz");
       }
     
       @Override
       public void close() throws SQLException {
    -    connected = false;
    +    connection.close();
       }
    -}
    +}
    \ No newline at end of file
    diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java
    index e34bd28f..88a214fb 100644
    --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java
    +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java
    @@ -1,6 +1,5 @@
     package hhn.temp.project;
     
    -import hhn.temp.project.provider.DatabaseManager;
     import hhn.temp.project.provider.SimpleDatabaseManager;
     import org.junit.jupiter.api.BeforeEach;
     import org.junit.jupiter.api.DisplayName;
    @@ -11,7 +10,6 @@ import static org.junit.jupiter.api.Assertions.*;
     import java.io.IOException;
     import java.net.URISyntaxException;
     import java.sql.SQLException;
    -import java.util.ArrayList;
     import java.util.Collection;
     import java.util.List;
     
    @@ -87,6 +85,6 @@ public class DatabaseGoodCasesTest {
     
       @Test
       public void testRandom() throws IOException, URISyntaxException {
    -     System.out.println(databaseManager.loadFile(SimpleDatabaseManager.QueryMode.INSERT));
    +     System.out.println(databaseManager.loadFile(SimpleDatabaseManager.QueryMode.INSERT_TASK));
       }
     }
    \ No newline at end of file