From 308f273b57fada9be1cd707b27873b46583fb2c0 Mon Sep 17 00:00:00 2001 From: Project516 <138796702+Project516@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:17:15 +0000 Subject: [PATCH 01/11] cheerpj --- .github/workflows/javadoc.yml | 3 +++ .gitignore | 3 ++- README.md | 9 +++------ cheerpj.sh | 7 +++++++ cheerpj/app.jar | Bin 0 -> 14991 bytes cheerpj/index.html | 17 +++++++++++++++++ test-gui.sh | 5 ++--- test.sh | 5 ++--- 8 files changed, 36 insertions(+), 13 deletions(-) create mode 100755 cheerpj.sh create mode 100644 cheerpj/app.jar create mode 100644 cheerpj/index.html diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index eb211a6..4bc6f92 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -23,6 +23,9 @@ jobs: - name: Generate JavaDoc run: ./gradlew javadoc + + -name: Copy Cheerpj + run: ./cheerpj.sh - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v4 diff --git a/.gitignore b/.gitignore index d825c36..54afea8 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ NumberGuessingGame-macos/ NumberGuessingGame-linux/ NumberGuessingGame-windows.zip NumberGuessingGame-macos.zip -NumberGuessingGame-linux.tar.gz \ No newline at end of file +NumberGuessingGame-linux.tar.gz + diff --git a/README.md b/README.md index 7c4f9f8..f9f08ca 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,9 @@ A simple number guessing game where you try to guess a randomly generated number. The game features both a user-friendly graphical interface (GUI) and a classic console mode. The GUI provides visual feedback with color-coded hints and tracks your progress in real-time. **Features:** -- 🎮 Modern Swing-based GUI (default) -- 💻 Classic console mode (use `--console` flag) -- 🎯 Visual feedback with color coding -- 📊 Real-time guess counter -- ⌨️ Keyboard shortcuts for quick navigation -- 🌍 Cross-platform compatible (Windows, macOS, Linux) +- Swing-based GUI (default) +- Console mode (use `--console` flag) +- Cross-platform ## Installation & Running diff --git a/cheerpj.sh b/cheerpj.sh new file mode 100755 index 0000000..aaadc4b --- /dev/null +++ b/cheerpj.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +./gradlew build +rm -f cheerpj/app.jar +cp app/build/libs/app.jar cheerpj +mkdir -p app/build/docs/javadoc/cheerpj +cp -f cheerpj/* app/build/docs/javadoc/cheerpj/ diff --git a/cheerpj/app.jar b/cheerpj/app.jar new file mode 100644 index 0000000000000000000000000000000000000000..2e54ed4687d2313bd72c5bd2fcc2d48a0794f0e5 GIT binary patch literal 14991 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 literal 0 HcmV?d00001 diff --git a/cheerpj/index.html b/cheerpj/index.html new file mode 100644 index 0000000..18a650f --- /dev/null +++ b/cheerpj/index.html @@ -0,0 +1,17 @@ + + + + + CheerpJ test + + + + + + \ No newline at end of file diff --git a/test-gui.sh b/test-gui.sh index 49fb6e4..d51c663 100644 --- a/test-gui.sh +++ b/test-gui.sh @@ -1,5 +1,4 @@ #!/bin/sh -cd app -gradle build -java -jar build/libs/app.jar +./gradlew build +java -jar app/build/libs/app.jar diff --git a/test.sh b/test.sh index 9cbdf97..26b9281 100755 --- a/test.sh +++ b/test.sh @@ -1,5 +1,4 @@ #!/bin/sh -cd app -gradle build -java -jar build/libs/app.jar --console +./gradlew build +java -jar app/build/libs/app.jar --console From 4dc07e5e5917b93682f986661ed9ff570fbd83e6 Mon Sep 17 00:00:00 2001 From: Project516 <138796702+Project516@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:19:15 +0000 Subject: [PATCH 02/11] fix ci --- .github/workflows/javadoc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index 4bc6f92..a00b91e 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -24,7 +24,7 @@ jobs: - name: Generate JavaDoc run: ./gradlew javadoc - -name: Copy Cheerpj + - name: Copy Cheerpj run: ./cheerpj.sh - name: Deploy to GitHub Pages From c2b96549a6bee021ab1ee1131c16e8f5a29b3da0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:30:42 +0000 Subject: [PATCH 03/11] Initial plan From 601b73bee23e76b56bee9809caab915fdd5c359b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:31:50 +0000 Subject: [PATCH 04/11] Initial plan From 58cf1f1935c4befb18c76ce124faef7a9f0ee464 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:43:12 +0000 Subject: [PATCH 05/11] Add high score system with username support for both GUI and console modes Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- .../project516/NumberGuessingGame/GUI.java | 85 ++++++++- .../NumberGuessingGame/GameLogic.java | 42 +++++ .../NumberGuessingGame/HighScore.java | 65 +++++++ .../NumberGuessingGame/HighScoreManager.java | 162 ++++++++++++++++++ .../NumberGuessingGame/Username.java | 50 +++++- .../HighScoreManagerTest.java | 128 ++++++++++++++ .../NumberGuessingGame/HighScoreTest.java | 83 +++++++++ .../NumberGuessingGame/UsernameTest.java | 29 ++++ 8 files changed, 634 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/io/github/project516/NumberGuessingGame/HighScore.java create mode 100644 app/src/main/java/io/github/project516/NumberGuessingGame/HighScoreManager.java create mode 100644 app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreManagerTest.java create mode 100644 app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreTest.java create mode 100644 app/src/test/java/io/github/project516/NumberGuessingGame/UsernameTest.java diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/GUI.java b/app/src/main/java/io/github/project516/NumberGuessingGame/GUI.java index 38c991f..fc90d13 100644 --- a/app/src/main/java/io/github/project516/NumberGuessingGame/GUI.java +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/GUI.java @@ -16,6 +16,7 @@ public class GUI extends JFrame { private RandomNumber randomGenerator; private CheckGuess guessChecker; private GameInfo gameInfo; + private HighScoreManager highScoreManager; // UI Components private JTextField guessField; @@ -38,6 +39,15 @@ public GUI() { guessChecker = new CheckGuess(); gameInfo = new GameInfo(); + // Initialize high score manager + try { + highScoreManager = new HighScoreManager(); + } catch (Exception e) { + System.err.println( + "Warning: Could not initialize high score system: " + e.getMessage()); + highScoreManager = null; + } + // Set up the frame setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 400); @@ -76,6 +86,14 @@ private void createMenuBar() { exitItem.addActionListener(e -> System.exit(0)); fileMenu.add(exitItem); + // View menu + JMenu viewMenu = new JMenu("View"); + viewMenu.setMnemonic(KeyEvent.VK_V); + + JMenuItem highScoresItem = new JMenuItem("High Scores", KeyEvent.VK_H); + highScoresItem.addActionListener(e -> showHighScores()); + viewMenu.add(highScoresItem); + // Help menu JMenu helpMenu = new JMenu("Help"); helpMenu.setMnemonic(KeyEvent.VK_H); @@ -85,6 +103,7 @@ private void createMenuBar() { helpMenu.add(aboutItem); menuBar.add(fileMenu); + menuBar.add(viewMenu); menuBar.add(helpMenu); setJMenuBar(menuBar); @@ -223,13 +242,8 @@ private void submitGuess() { newGameButton.setVisible(true); newGameButton.requestFocus(); - // Show congratulations dialog - String message = - String.format( - "You guessed the number in %d %s!", - numberOfGuesses, numberOfGuesses == 1 ? "guess" : "guesses"); - JOptionPane.showMessageDialog( - this, message, "Congratulations!", JOptionPane.INFORMATION_MESSAGE); + // Handle high score + handleHighScore(); } guessField.setText(""); @@ -270,6 +284,63 @@ private void showAboutDialog() { this, message, "About Number Guessing Game", JOptionPane.INFORMATION_MESSAGE); } + /** + * Handles high score submission after a successful game. Prompts the user for their username + * and saves the score if applicable. + */ + private void handleHighScore() { + if (highScoreManager == null) { + // Show basic congratulations dialog if high score system is unavailable + String message = + String.format( + "You guessed the number in %d %s!", + numberOfGuesses, numberOfGuesses == 1 ? "guess" : "guesses"); + JOptionPane.showMessageDialog( + this, message, "Congratulations!", JOptionPane.INFORMATION_MESSAGE); + return; + } + + // Prompt for username + String username = + JOptionPane.showInputDialog( + this, + String.format( + "You guessed the number in %d %s!\n\nEnter your username (1-20 characters):", + numberOfGuesses, numberOfGuesses == 1 ? "guess" : "guesses"), + "Congratulations!", + JOptionPane.QUESTION_MESSAGE); + + // Validate username + if (username != null && Username.isValid(username)) { + highScoreManager.addHighScore(username, numberOfGuesses); + showHighScores(); + } else if (username != null) { + JOptionPane.showMessageDialog( + this, "Invalid username. Score not saved.", "Error", JOptionPane.ERROR_MESSAGE); + } + } + + /** Displays the top high scores in a dialog. */ + private void showHighScores() { + if (highScoreManager == null) { + return; + } + + java.util.List topScores = highScoreManager.getTopHighScores(10); + if (topScores.isEmpty()) { + return; + } + + StringBuilder sb = new StringBuilder(); + sb.append("Top High Scores\n\n"); + for (int i = 0; i < topScores.size(); i++) { + sb.append(String.format("%d. %s\n", i + 1, topScores.get(i))); + } + + JOptionPane.showMessageDialog( + this, sb.toString(), "High Scores", JOptionPane.INFORMATION_MESSAGE); + } + /** * Gets the version of the application. * diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/GameLogic.java b/app/src/main/java/io/github/project516/NumberGuessingGame/GameLogic.java index 7f750e7..3ce8a77 100644 --- a/app/src/main/java/io/github/project516/NumberGuessingGame/GameLogic.java +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/GameLogic.java @@ -1,10 +1,25 @@ package io.github.project516.NumberGuessingGame; +import java.util.List; + /** * Contains the main game logic for the Number Guessing Game. This class manages the game loop, user * input, and guess validation. */ public class GameLogic { + private HighScoreManager highScoreManager; + + /** Constructs a new GameLogic instance and initializes the high score manager. */ + public GameLogic() { + try { + highScoreManager = new HighScoreManager(); + } catch (Exception e) { + System.err.println( + "Warning: Could not initialize high score system: " + e.getMessage()); + highScoreManager = null; + } + } + /** * Runs the main game loop. Generates a random number and prompts the user to guess it. Provides * feedback on each guess and tracks the number of attempts. @@ -30,9 +45,36 @@ void game(ScannerHelper scan) { } else { numOfGuesses++; System.out.println("Took you " + numOfGuesses + " guesses!"); + + // Handle high score + if (highScoreManager != null) { + String username = Username.promptUsername(scan); + if (highScoreManager.addHighScore(username, numOfGuesses)) { + System.out.println("Score saved!"); + } + displayHighScores(); + } break; } numOfGuesses++; } } + + /** Displays the top high scores to the console. */ + private void displayHighScores() { + if (highScoreManager == null) { + return; + } + + List topScores = highScoreManager.getTopHighScores(5); + if (topScores.isEmpty()) { + return; + } + + System.out.println("\n=== Top High Scores ==="); + for (int i = 0; i < topScores.size(); i++) { + System.out.println((i + 1) + ". " + topScores.get(i)); + } + System.out.println("=======================\n"); + } } diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/HighScore.java b/app/src/main/java/io/github/project516/NumberGuessingGame/HighScore.java new file mode 100644 index 0000000..b5446f2 --- /dev/null +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/HighScore.java @@ -0,0 +1,65 @@ +package io.github.project516.NumberGuessingGame; + +/** + * Represents a single high score entry in the Number Guessing Game. Each entry contains a username + * and the number of guesses it took to win the game. + */ +public class HighScore implements Comparable { + private final String username; + private final int numberOfGuesses; + + /** + * Constructs a new HighScore entry. + * + * @param username the username of the player + * @param numberOfGuesses the number of guesses it took to win + * @throws IllegalArgumentException if username is null or empty, or if numberOfGuesses is less + * than 1 + */ + public HighScore(String username, int numberOfGuesses) { + if (username == null || username.trim().isEmpty()) { + throw new IllegalArgumentException("Username cannot be null or empty"); + } + if (numberOfGuesses < 1) { + throw new IllegalArgumentException("Number of guesses must be at least 1"); + } + this.username = username.trim(); + this.numberOfGuesses = numberOfGuesses; + } + + /** + * Gets the username for this high score entry. + * + * @return the username + */ + public String getUsername() { + return username; + } + + /** + * Gets the number of guesses for this high score entry. + * + * @return the number of guesses + */ + public int getNumberOfGuesses() { + return numberOfGuesses; + } + + /** + * Compares this high score to another. High scores are ordered by number of guesses (ascending) + * so that lower scores (fewer guesses) come first. + * + * @param other the other high score to compare to + * @return a negative integer, zero, or a positive integer as this high score is less than, + * equal to, or greater than the specified high score + */ + @Override + public int compareTo(HighScore other) { + return Integer.compare(this.numberOfGuesses, other.numberOfGuesses); + } + + @Override + public String toString() { + return username + ": " + numberOfGuesses + " guess" + (numberOfGuesses == 1 ? "" : "es"); + } +} diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/HighScoreManager.java b/app/src/main/java/io/github/project516/NumberGuessingGame/HighScoreManager.java new file mode 100644 index 0000000..4121a35 --- /dev/null +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/HighScoreManager.java @@ -0,0 +1,162 @@ +package io.github.project516.NumberGuessingGame; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; + +/** + * Manages high scores for the Number Guessing Game. Handles loading, saving, and retrieving high + * scores from persistent storage. + */ +public class HighScoreManager { + private static final String CONFIG_DIR = ".numberguessinggame"; + private static final String HIGH_SCORE_FILE = "highscores.properties"; + private static final int MAX_HIGH_SCORES = 10; + + private final File highScoreFile; + private final List highScores; + + /** + * Constructs a new HighScoreManager and loads existing high scores from storage. + * + * @throws IOException if there is an error creating the storage directory + */ + public HighScoreManager() throws IOException { + this(CONFIG_DIR); + } + + /** + * Constructs a new HighScoreManager with a custom config directory. Used primarily for testing. + * + * @param configDirName the name of the config directory + * @throws IOException if there is an error creating the storage directory + */ + HighScoreManager(String configDirName) throws IOException { + File configDir = new File(System.getProperty("user.home"), configDirName); + if (!configDir.exists()) { + if (!configDir.mkdirs()) { + throw new IOException("Failed to create config directory: " + configDir); + } + } + + highScoreFile = new File(configDir, HIGH_SCORE_FILE); + highScores = new ArrayList<>(); + loadHighScores(); + } + + /** + * Loads high scores from the properties file. If the file doesn't exist or can't be read, an + * empty high score list is initialized. + */ + private void loadHighScores() { + if (!highScoreFile.exists()) { + return; + } + + Properties props = new Properties(); + try (FileInputStream fis = new FileInputStream(highScoreFile)) { + props.load(fis); + + for (String key : props.stringPropertyNames()) { + if (key.startsWith("score.")) { + try { + String[] parts = props.getProperty(key).split(":"); + if (parts.length == 2) { + String username = parts[0]; + int guesses = Integer.parseInt(parts[1]); + highScores.add(new HighScore(username, guesses)); + } + } catch (Exception e) { + // Skip invalid entries + } + } + } + Collections.sort(highScores); + } catch (IOException e) { + // If we can't read the file, just start with empty high scores + } + } + + /** + * Saves the current high scores to the properties file. + * + * @throws IOException if there is an error writing to the file + */ + private void saveHighScores() throws IOException { + Properties props = new Properties(); + + for (int i = 0; i < highScores.size(); i++) { + HighScore score = highScores.get(i); + props.setProperty("score." + i, score.getUsername() + ":" + score.getNumberOfGuesses()); + } + + try (FileOutputStream fos = new FileOutputStream(highScoreFile)) { + props.store(fos, "Number Guessing Game High Scores"); + } + } + + /** + * Adds a new high score. The score will only be saved if it is in the top scores. The list is + * automatically sorted and trimmed to the maximum number of high scores. + * + * @param username the username of the player + * @param numberOfGuesses the number of guesses it took to win + * @return true if the score was added to the high scores list, false otherwise + */ + public boolean addHighScore(String username, int numberOfGuesses) { + try { + HighScore newScore = new HighScore(username, numberOfGuesses); + highScores.add(newScore); + Collections.sort(highScores); + + // Keep only top scores + if (highScores.size() > MAX_HIGH_SCORES) { + highScores.subList(MAX_HIGH_SCORES, highScores.size()).clear(); + } + + saveHighScores(); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * Gets the top high scores. + * + * @param limit the maximum number of high scores to return + * @return a list of the top high scores, limited by the specified amount + */ + public List getTopHighScores(int limit) { + int count = Math.min(limit, highScores.size()); + return new ArrayList<>(highScores.subList(0, count)); + } + + /** + * Gets all high scores. + * + * @return a list of all high scores + */ + public List getAllHighScores() { + return new ArrayList<>(highScores); + } + + /** + * Checks if a given number of guesses qualifies as a high score. + * + * @param numberOfGuesses the number of guesses to check + * @return true if this would be a high score, false otherwise + */ + public boolean isHighScore(int numberOfGuesses) { + if (highScores.size() < MAX_HIGH_SCORES) { + return true; + } + HighScore lowestHighScore = highScores.get(highScores.size() - 1); + return numberOfGuesses < lowestHighScore.getNumberOfGuesses(); + } +} diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java b/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java index df078c3..d4ca20f 100644 --- a/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java @@ -1,9 +1,53 @@ package io.github.project516.NumberGuessingGame; /** - * Placeholder class for username functionality. Will be used for a high score system in future - * versions. + * Utility class for prompting and validating usernames in the Number Guessing Game. Used for the + * high score system. */ public class Username { - // TODO - add usernames for a high score system + private static final int MAX_USERNAME_LENGTH = 20; + private static final int MIN_USERNAME_LENGTH = 1; + + /** + * Prompts the user for a username using the console. + * + * @param scan the ScannerHelper instance to use for user input + * @return the validated username + */ + public static String promptUsername(ScannerHelper scan) { + // Clear any remaining input buffer + if (scan.scan.hasNextLine()) { + scan.scan.nextLine(); + } + + while (true) { + System.out.print("Enter your username: "); + String username = scan.scan.nextLine().trim(); + + if (isValid(username)) { + return username; + } + + System.out.println( + "Invalid username. Must be between " + + MIN_USERNAME_LENGTH + + " and " + + MAX_USERNAME_LENGTH + + " characters."); + } + } + + /** + * Validates a username. + * + * @param username the username to validate + * @return true if the username is valid, false otherwise + */ + public static boolean isValid(String username) { + if (username == null || username.trim().isEmpty()) { + return false; + } + int length = username.trim().length(); + return length >= MIN_USERNAME_LENGTH && length <= MAX_USERNAME_LENGTH; + } } diff --git a/app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreManagerTest.java b/app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreManagerTest.java new file mode 100644 index 0000000..bdae0df --- /dev/null +++ b/app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreManagerTest.java @@ -0,0 +1,128 @@ +package io.github.project516.NumberGuessingGame; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +/** Unit tests for the HighScoreManager class. */ +class HighScoreManagerTest { + private static final String TEST_CONFIG_DIR = ".numberguessinggame_test"; + + private void cleanup() { + // Clean up test files + File configDir = new File(System.getProperty("user.home"), TEST_CONFIG_DIR); + if (configDir.exists()) { + File[] files = configDir.listFiles(); + if (files != null) { + for (File file : files) { + file.delete(); + } + } + configDir.delete(); + } + } + + @AfterEach + void cleanupAfter() { + cleanup(); + } + + @Test + void testHighScoreManagerCreation() { + cleanup(); + assertDoesNotThrow( + () -> { + HighScoreManager manager = new HighScoreManager(TEST_CONFIG_DIR); + assertNotNull(manager); + }); + } + + @Test + void testAddHighScore() throws IOException { + cleanup(); + HighScoreManager manager = new HighScoreManager(TEST_CONFIG_DIR); + assertTrue(manager.addHighScore("Alice", 5)); + + List scores = manager.getAllHighScores(); + assertEquals(1, scores.size()); + assertEquals("Alice", scores.get(0).getUsername()); + assertEquals(5, scores.get(0).getNumberOfGuesses()); + } + + @Test + void testHighScoresAreSorted() throws IOException { + cleanup(); + HighScoreManager manager = new HighScoreManager(TEST_CONFIG_DIR); + manager.addHighScore("Charlie", 7); + manager.addHighScore("Alice", 3); + manager.addHighScore("Bob", 5); + + List scores = manager.getAllHighScores(); + assertEquals(3, scores.size()); + assertEquals("Alice", scores.get(0).getUsername()); + assertEquals("Bob", scores.get(1).getUsername()); + assertEquals("Charlie", scores.get(2).getUsername()); + } + + @Test + void testTopHighScoresLimit() throws IOException { + cleanup(); + HighScoreManager manager = new HighScoreManager(TEST_CONFIG_DIR); + + // Add 15 scores + for (int i = 1; i <= 15; i++) { + manager.addHighScore("Player" + i, i); + } + + // Should only keep top 10 + List allScores = manager.getAllHighScores(); + assertEquals(10, allScores.size()); + assertEquals("Player1", allScores.get(0).getUsername()); + assertEquals("Player10", allScores.get(9).getUsername()); + } + + @Test + void testGetTopHighScores() throws IOException { + cleanup(); + HighScoreManager manager = new HighScoreManager(TEST_CONFIG_DIR); + + for (int i = 1; i <= 10; i++) { + manager.addHighScore("Player" + i, i); + } + + List top5 = manager.getTopHighScores(5); + assertEquals(5, top5.size()); + assertEquals("Player1", top5.get(0).getUsername()); + assertEquals("Player5", top5.get(4).getUsername()); + } + + @Test + void testIsHighScore() throws IOException { + cleanup(); + HighScoreManager manager = new HighScoreManager(TEST_CONFIG_DIR); + + // Empty list - everything is a high score + assertTrue(manager.isHighScore(100)); + + // Add 10 scores + for (int i = 1; i <= 10; i++) { + manager.addHighScore("Player" + i, i * 10); + } + + // 5 is better than all existing scores + assertTrue(manager.isHighScore(5)); + + // 50 is better than some existing scores + assertTrue(manager.isHighScore(50)); + + // 100 is equal to worst score - not better + assertFalse(manager.isHighScore(100)); + + // 150 is worse than all existing scores + assertFalse(manager.isHighScore(150)); + } +} diff --git a/app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreTest.java b/app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreTest.java new file mode 100644 index 0000000..726d6c3 --- /dev/null +++ b/app/src/test/java/io/github/project516/NumberGuessingGame/HighScoreTest.java @@ -0,0 +1,83 @@ +package io.github.project516.NumberGuessingGame; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +/** Unit tests for the HighScore class. */ +class HighScoreTest { + @Test + void testHighScoreCreation() { + HighScore score = new HighScore("Alice", 5); + assertEquals("Alice", score.getUsername()); + assertEquals(5, score.getNumberOfGuesses()); + } + + @Test + void testHighScoreWithWhitespace() { + HighScore score = new HighScore(" Bob ", 3); + assertEquals("Bob", score.getUsername()); + assertEquals(3, score.getNumberOfGuesses()); + } + + @Test + void testHighScoreNullUsername() { + assertThrows( + IllegalArgumentException.class, + () -> { + new HighScore(null, 5); + }); + } + + @Test + void testHighScoreEmptyUsername() { + assertThrows( + IllegalArgumentException.class, + () -> { + new HighScore("", 5); + }); + } + + @Test + void testHighScoreWhitespaceOnlyUsername() { + assertThrows( + IllegalArgumentException.class, + () -> { + new HighScore(" ", 5); + }); + } + + @Test + void testHighScoreInvalidGuessCount() { + assertThrows( + IllegalArgumentException.class, + () -> { + new HighScore("Alice", 0); + }); + assertThrows( + IllegalArgumentException.class, + () -> { + new HighScore("Alice", -1); + }); + } + + @Test + void testHighScoreComparison() { + HighScore score1 = new HighScore("Alice", 5); + HighScore score2 = new HighScore("Bob", 3); + HighScore score3 = new HighScore("Charlie", 7); + + assertTrue(score2.compareTo(score1) < 0); // Bob's 3 < Alice's 5 + assertTrue(score1.compareTo(score3) < 0); // Alice's 5 < Charlie's 7 + assertTrue(score3.compareTo(score2) > 0); // Charlie's 7 > Bob's 3 + } + + @Test + void testHighScoreToString() { + HighScore score1 = new HighScore("Alice", 1); + HighScore score2 = new HighScore("Bob", 5); + + assertEquals("Alice: 1 guess", score1.toString()); + assertEquals("Bob: 5 guesses", score2.toString()); + } +} diff --git a/app/src/test/java/io/github/project516/NumberGuessingGame/UsernameTest.java b/app/src/test/java/io/github/project516/NumberGuessingGame/UsernameTest.java new file mode 100644 index 0000000..590d1e2 --- /dev/null +++ b/app/src/test/java/io/github/project516/NumberGuessingGame/UsernameTest.java @@ -0,0 +1,29 @@ +package io.github.project516.NumberGuessingGame; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +/** Unit tests for the Username class. */ +class UsernameTest { + @Test + void testValidUsername() { + assertTrue(Username.isValid("Alice")); + assertTrue(Username.isValid("Bob123")); + assertTrue(Username.isValid("a")); // 1 character + assertTrue(Username.isValid("12345678901234567890")); // 20 characters + } + + @Test + void testInvalidUsername() { + assertFalse(Username.isValid(null)); + assertFalse(Username.isValid("")); + assertFalse(Username.isValid(" ")); + assertFalse(Username.isValid("123456789012345678901")); // 21 characters - too long + } + + @Test + void testUsernameWithWhitespace() { + assertTrue(Username.isValid(" Alice ")); // Whitespace trimmed, valid + } +} From f333e97a5a96f455d969dbacd557c2bae09c81dc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:46:39 +0000 Subject: [PATCH 06/11] Add TeaVM build configuration and initial setup Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- app/build.gradle | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ teavm/index.html | 41 ++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 teavm/index.html diff --git a/app/build.gradle b/app/build.gradle index 53f60ae..17764d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,3 +1,13 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + // TeaVM tooling for JavaScript compilation task + classpath 'org.teavm:teavm-tooling:0.10.2' + } +} + plugins { // Apply the application plugin to add support for building a CLI application in Java. id 'application' @@ -11,9 +21,20 @@ repositories { mavenCentral() } +// Separate configuration for TeaVM compiler (not part of application runtime) +configurations { + teavm +} + dependencies { // This dependency is used by the application. implementation libs.guava + + // TeaVM dependencies for JavaScript compilation (only for build, not runtime) + teavm 'org.teavm:teavm-core:0.10.2' + teavm 'org.teavm:teavm-tooling:0.10.2' + teavm 'org.teavm:teavm-classlib:0.10.2' + teavm 'org.teavm:teavm-jso-apis:0.10.2' } testing { @@ -61,3 +82,53 @@ jar { ) } } + +// TeaVM task for compiling Java GUI to JavaScript +task generateTeaVM { + group = 'build' + description = 'Compiles Java GUI application to JavaScript using TeaVM' + + dependsOn classes + + // Define outputs for up-to-date checking + outputs.dir(layout.buildDirectory.dir('teavm')) + + doLast { + // Create output directory + def outputDir = layout.buildDirectory.dir('teavm').get().asFile + outputDir.mkdirs() + + // Get TeaVM classpath + def teavmClasspath = configurations.teavm.files.collect { it.toURI().toURL() } as URL[] + def appClasspath = (sourceSets.main.runtimeClasspath.files + sourceSets.main.output.classesDirs.files) + .collect { it.toURI().toURL() } as URL[] + + // Combined classloader with TeaVM and application classes + def combinedLoader = new URLClassLoader( + teavmClasspath + appClasspath, + ClassLoader.getSystemClassLoader() + ) + + // Configure TeaVM + def toolingClass = combinedLoader.loadClass('org.teavm.tooling.TeaVMTool') + def targetTypeClass = combinedLoader.loadClass('org.teavm.tooling.TeaVMTargetType') + def tooling = toolingClass.getDeclaredConstructor().newInstance() + + tooling.targetDirectory = outputDir + // Use GUI as main class - TeaVM will compile what it can + tooling.mainClass = 'io.github.project516.NumberGuessingGame.GUI' + + // Application classloader for TeaVM to analyze + def appLoader = new URLClassLoader(appClasspath as URL[], (ClassLoader) null) + tooling.classLoader = appLoader + + // Configuration options + tooling.targetType = targetTypeClass.JAVASCRIPT + tooling.debugInformationGenerated = true + + // Generate JavaScript + tooling.generate() + + println "TeaVM compilation completed. Output: ${outputDir}" + } +} diff --git a/teavm/index.html b/teavm/index.html new file mode 100644 index 0000000..4337d3b --- /dev/null +++ b/teavm/index.html @@ -0,0 +1,41 @@ + + + + + + Number Guessing Game - TeaVM + + + +
+

Number Guessing Game

+

Loading application...

+

Compiled with TeaVM

+
+ + + + From da6958e526c076336c5dc4cdd5b5989c72883e54 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:49:45 +0000 Subject: [PATCH 07/11] Fix Scanner buffer issue in username prompt for console mode Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- .../io/github/project516/NumberGuessingGame/Username.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java b/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java index d4ca20f..f74c530 100644 --- a/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/Username.java @@ -15,10 +15,8 @@ public class Username { * @return the validated username */ public static String promptUsername(ScannerHelper scan) { - // Clear any remaining input buffer - if (scan.scan.hasNextLine()) { - scan.scan.nextLine(); - } + // Clear any remaining newline from previous nextInt() call + scan.scan.nextLine(); while (true) { System.out.print("Enter your username: "); From 3ac2fbccc5d56e5b8108bc776e58171cbd03c387 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:54:10 +0000 Subject: [PATCH 08/11] Document high score feature in README Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- README.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f9f08ca..a97e018 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ A simple number guessing game where you try to guess a randomly generated number **Features:** - Swing-based GUI (default) - Console mode (use `--console` flag) +- High score tracking with usernames +- Persistent score storage - Cross-platform ## Installation & Running @@ -83,10 +85,13 @@ The game now features both a graphical user interface (GUI) and a console mode. - Orange text indicates your guess was too high - Green text indicates you guessed correctly! 5. The number of guesses is displayed and updated in real-time -6. When you guess correctly, click "New Game" to play again -7. Use the menu bar for additional options: +6. When you guess correctly, you'll be prompted to enter your username +7. After entering your username, your score will be saved and the top high scores will be displayed +8. Click "New Game" to play again +9. Use the menu bar for additional options: - File → New Game (Ctrl+N): Start a new game - File → Exit: Close the application + - View → High Scores: View the top high scores - Help → About: View game information #### Console Mode @@ -105,6 +110,18 @@ In console mode: 2. The game will tell you if your guess is too high or too low 3. Keep guessing until you find the correct number 4. The game will display how many guesses it took you +5. Enter your username when prompted to save your score +6. The top high scores will be displayed after saving your score + +### High Scores + +The game automatically tracks high scores (games won with the fewest guesses). High scores are stored persistently in your home directory at `~/.numberguessinggame/highscores.properties`. + +- The top 10 scores are kept +- Scores are sorted by the number of guesses (fewest is best) +- Each score includes the username and number of guesses +- High scores persist across game sessions +- View high scores from the GUI menu (View → High Scores) or after completing a game ## Development From 57057cfb1c809071091839bd823463f9e025e8aa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:08:24 +0000 Subject: [PATCH 09/11] Add WebGUI class and TeaVM configuration (WIP - debugging compilation) Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- app/build.gradle | 52 ++++- .../NumberGuessingGame/SimpleTest.java | 8 + .../project516/NumberGuessingGame/WebGUI.java | 214 ++++++++++++++++++ 3 files changed, 269 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java create mode 100644 app/src/main/java/io/github/project516/NumberGuessingGame/WebGUI.java diff --git a/app/build.gradle b/app/build.gradle index 17764d4..96f0150 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,6 +30,9 @@ dependencies { // This dependency is used by the application. implementation libs.guava + // TeaVM JSO APIs for web development (needed at compile time for WebGUI) + compileOnly 'org.teavm:teavm-jso-apis:0.10.2' + // TeaVM dependencies for JavaScript compilation (only for build, not runtime) teavm 'org.teavm:teavm-core:0.10.2' teavm 'org.teavm:teavm-tooling:0.10.2' @@ -56,7 +59,8 @@ java { } tasks.withType(JavaCompile) { - options.release.set(8) + // Changed from 8 to 11 to support TeaVM for web deployment + options.release.set(11) } application { @@ -115,8 +119,9 @@ task generateTeaVM { def tooling = toolingClass.getDeclaredConstructor().newInstance() tooling.targetDirectory = outputDir - // Use GUI as main class - TeaVM will compile what it can - tooling.mainClass = 'io.github.project516.NumberGuessingGame.GUI' + // Use SimpleTest as main class for testing + tooling.mainClass = 'io.github.project516.NumberGuessingGame.SimpleTest' + tooling.entryPointName = 'main' // Application classloader for TeaVM to analyze def appLoader = new URLClassLoader(appClasspath as URL[], (ClassLoader) null) @@ -125,10 +130,47 @@ task generateTeaVM { // Configuration options tooling.targetType = targetTypeClass.JAVASCRIPT tooling.debugInformationGenerated = true + tooling.targetFileName = 'classes.js' + + // Enable logging + def logClass = combinedLoader.loadClass('org.teavm.tooling.ConsoleTeaVMToolLog') + tooling.log = logClass.getDeclaredConstructor(boolean.class).newInstance(true) + + // Print classpath for debugging + println "Classpath URLs:" + appClasspath.each { url -> println " - ${url}" } // Generate JavaScript - tooling.generate() + println "Starting TeaVM generation..." + println "Main class: ${tooling.mainClass}" + println "Output directory: ${outputDir}" - println "TeaVM compilation completed. Output: ${outputDir}" + try { + tooling.generate() + println "TeaVM generation completed" + + // Try to check for problems if the API supports it + try { + def problemProvider = tooling.problemProvider + if (problemProvider != null && problemProvider.problems) { + problemProvider.problems.each { problem -> + println " ${problem.severity}: ${problem.text}" + } + } + } catch (Exception e) { + // Problems API might not be available + println "Could not check for problems: ${e.message}" + } + } catch (Exception e) { + println "TeaVM generation failed: ${e.message}" + e.printStackTrace() + throw e + } + + // List generated files + println "Generated files:" + outputDir.listFiles().each { file -> + println " - ${file.name} (${file.length()} bytes)" + } } } diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java b/app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java new file mode 100644 index 0000000..6164490 --- /dev/null +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java @@ -0,0 +1,8 @@ +package io.github.project516.NumberGuessingGame; + +/** Simple test class for TeaVM compilation. */ +public class SimpleTest { + public static void main(String[] args) { + System.out.println("Hello from TeaVM!"); + } +} diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/WebGUI.java b/app/src/main/java/io/github/project516/NumberGuessingGame/WebGUI.java new file mode 100644 index 0000000..8827697 --- /dev/null +++ b/app/src/main/java/io/github/project516/NumberGuessingGame/WebGUI.java @@ -0,0 +1,214 @@ +package io.github.project516.NumberGuessingGame; + +import org.teavm.jso.browser.Window; +import org.teavm.jso.dom.html.*; + +/** + * Web-based GUI for the Number Guessing Game using TeaVM. This class provides a browser-native + * interface that reuses the core game logic from the existing classes. Created specifically for + * TeaVM compilation to JavaScript for GitHub Pages deployment. + */ +public class WebGUI { + // Game state - reusing existing game logic classes + private int targetNumber; + private int numberOfGuesses; + private RandomNumber randomGenerator; + private CheckGuess guessChecker; + + // DOM elements + private HTMLDocument document; + private HTMLInputElement guessInput; + private HTMLButtonElement submitButton; + private HTMLButtonElement newGameButton; + private HTMLElement feedbackElement; + private HTMLElement guessCountElement; + + /** + * Main entry point for the web application. TeaVM will call this method when the page loads. + * + * @param args command line arguments (not used in web context) + */ + public static void main(String[] args) { + new WebGUI().initialize(); + } + + /** Initializes the web GUI and starts a new game. */ + public void initialize() { + // Initialize game objects - reusing existing classes + randomGenerator = new RandomNumber(); + guessChecker = new CheckGuess(); + + // Get the HTML document + document = Window.current().getDocument(); + + // Create the game UI + createGameUI(); + + // Start a new game + startNewGame(); + } + + /** Creates the game UI elements in the HTML document. */ + private void createGameUI() { + // Get or create the game container + HTMLElement gameContainer = (HTMLElement) document.getElementById("game-container"); + if (gameContainer == null) { + gameContainer = (HTMLElement) document.createElement("div"); + gameContainer.setId("game-container"); + document.getBody().appendChild(gameContainer); + } + + // Clear existing content + gameContainer.setInnerHTML(""); + + // Create title + HTMLElement title = (HTMLElement) document.createElement("h1"); + title.setInnerHTML("Number Guessing Game"); + gameContainer.appendChild(title); + + // Create instructions + HTMLElement instructions = (HTMLElement) document.createElement("p"); + instructions.setInnerHTML("Guess a number between 1 and 100!"); + gameContainer.appendChild(instructions); + + // Create guess count display + guessCountElement = (HTMLElement) document.createElement("p"); + guessCountElement.setId("guess-count"); + guessCountElement.setInnerHTML("Number of guesses: 0"); + gameContainer.appendChild(guessCountElement); + + // Create input field + guessInput = (HTMLInputElement) document.createElement("input"); + guessInput.setType("number"); + guessInput.setAttribute("min", "1"); + guessInput.setAttribute("max", "100"); + guessInput.setAttribute("placeholder", "Enter your guess"); + guessInput.setId("guess-input"); + gameContainer.appendChild(guessInput); + + // Create submit button + submitButton = (HTMLButtonElement) document.createElement("button"); + submitButton.setInnerHTML("Submit Guess"); + submitButton.setId("submit-button"); + submitButton.addEventListener("click", evt -> submitGuess()); + gameContainer.appendChild(submitButton); + + // Allow Enter key to submit + guessInput.addEventListener( + "keypress", + evt -> { + if ("Enter".equals(((HTMLKeyboardEvent) evt).getKey())) { + submitGuess(); + } + }); + + // Create feedback area + feedbackElement = (HTMLElement) document.createElement("p"); + feedbackElement.setId("feedback"); + feedbackElement.setInnerHTML(" "); + gameContainer.appendChild(feedbackElement); + + // Create new game button (initially hidden) + newGameButton = (HTMLButtonElement) document.createElement("button"); + newGameButton.setInnerHTML("New Game"); + newGameButton.setId("new-game-button"); + newGameButton.getStyle().setProperty("display", "none"); + newGameButton.addEventListener("click", evt -> startNewGame()); + gameContainer.appendChild(newGameButton); + } + + /** Starts a new game by resetting the game state. */ + private void startNewGame() { + // Generate new target number using existing RandomNumber class + targetNumber = randomGenerator.number(100); + numberOfGuesses = 0; + + // Reset UI + guessInput.setValue(""); + guessInput.setDisabled(false); + submitButton.setDisabled(false); + newGameButton.getStyle().setProperty("display", "none"); + feedbackElement.setInnerHTML(" "); + feedbackElement.setClassName(""); + updateGuessCount(); + + // Focus on input + guessInput.focus(); + } + + /** Processes the user's guess and updates the UI with feedback. */ + private void submitGuess() { + String input = guessInput.getValue().trim(); + + if (input.isEmpty()) { + showFeedback("Please enter a number!", "error"); + return; + } + + int guess; + try { + guess = Integer.parseInt(input); + } catch (NumberFormatException e) { + showFeedback("Invalid input! Please enter a valid number.", "error"); + guessInput.setValue(""); + return; + } + + // Validate guess using existing CheckGuess class + try { + guessChecker.check(guess); + } catch (IllegalArgumentException e) { + showFeedback(e.getMessage(), "error"); + guessInput.setValue(""); + return; + } + + numberOfGuesses++; + updateGuessCount(); + + // Check the guess + if (guess > targetNumber) { + showFeedback("Too high! Try a lower number.", "high"); + } else if (guess < targetNumber) { + showFeedback("Too low! Try a higher number.", "low"); + } else { + // Correct guess! + showFeedback( + String.format( + "🎉 Congratulations! You guessed it in %d %s!", + numberOfGuesses, numberOfGuesses == 1 ? "guess" : "guesses"), + "success"); + guessInput.setDisabled(true); + submitButton.setDisabled(true); + newGameButton.getStyle().setProperty("display", "block"); + newGameButton.focus(); + } + + guessInput.setValue(""); + guessInput.focus(); + } + + /** + * Updates the feedback message and applies the appropriate CSS class. + * + * @param message the feedback message to display + * @param cssClass the CSS class to apply (error, high, low, success) + */ + private void showFeedback(String message, String cssClass) { + feedbackElement.setInnerHTML(message); + feedbackElement.setClassName("feedback-" + cssClass); + } + + /** Updates the guess count display. */ + private void updateGuessCount() { + guessCountElement.setInnerHTML("Number of guesses: " + numberOfGuesses); + } + + /** Keyboard event interface for handling key presses. */ + private interface HTMLKeyboardEvent extends HTMLEvent { + String getKey(); + } + + /** Base HTML event interface. */ + private interface HTMLEvent extends org.teavm.jso.JSObject {} +} From c5e3dc94e44e27411898fd4a7a6aa5c020c08a9e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:17:44 +0000 Subject: [PATCH 10/11] Complete TeaVM integration - replace CheerpJ with working TeaVM setup Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- .github/workflows/javadoc.yml | 4 +- app/build.gradle | 114 +-- .../NumberGuessingGame/SimpleTest.java | 8 - teavm.sh | 18 + teavm/README.md | 45 + teavm/classes.js | 817 ++++++++++++++++++ teavm/index.html | 88 +- 7 files changed, 970 insertions(+), 124 deletions(-) delete mode 100644 app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java create mode 100755 teavm.sh create mode 100644 teavm/README.md create mode 100644 teavm/classes.js diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index a00b91e..4101de2 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -24,8 +24,8 @@ jobs: - name: Generate JavaDoc run: ./gradlew javadoc - - name: Copy Cheerpj - run: ./cheerpj.sh + - name: Build TeaVM (JavaScript compilation) + run: ./teavm.sh - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v4 diff --git a/app/build.gradle b/app/build.gradle index 96f0150..92a84af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,19 +1,12 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - // TeaVM tooling for JavaScript compilation task - classpath 'org.teavm:teavm-tooling:0.10.2' - } -} - plugins { // Apply the application plugin to add support for building a CLI application in Java. id 'application' //Spotless id 'com.diffplug.spotless' version '8.0.0' + + // TeaVM plugin for JavaScript compilation + id 'io.github.zebalu.teavm-gradle-plugin' version '1.0.0' } repositories { @@ -21,23 +14,12 @@ repositories { mavenCentral() } -// Separate configuration for TeaVM compiler (not part of application runtime) -configurations { - teavm -} - dependencies { // This dependency is used by the application. implementation libs.guava // TeaVM JSO APIs for web development (needed at compile time for WebGUI) compileOnly 'org.teavm:teavm-jso-apis:0.10.2' - - // TeaVM dependencies for JavaScript compilation (only for build, not runtime) - teavm 'org.teavm:teavm-core:0.10.2' - teavm 'org.teavm:teavm-tooling:0.10.2' - teavm 'org.teavm:teavm-classlib:0.10.2' - teavm 'org.teavm:teavm-jso-apis:0.10.2' } testing { @@ -87,90 +69,8 @@ jar { } } -// TeaVM task for compiling Java GUI to JavaScript -task generateTeaVM { - group = 'build' - description = 'Compiles Java GUI application to JavaScript using TeaVM' - - dependsOn classes - - // Define outputs for up-to-date checking - outputs.dir(layout.buildDirectory.dir('teavm')) - - doLast { - // Create output directory - def outputDir = layout.buildDirectory.dir('teavm').get().asFile - outputDir.mkdirs() - - // Get TeaVM classpath - def teavmClasspath = configurations.teavm.files.collect { it.toURI().toURL() } as URL[] - def appClasspath = (sourceSets.main.runtimeClasspath.files + sourceSets.main.output.classesDirs.files) - .collect { it.toURI().toURL() } as URL[] - - // Combined classloader with TeaVM and application classes - def combinedLoader = new URLClassLoader( - teavmClasspath + appClasspath, - ClassLoader.getSystemClassLoader() - ) - - // Configure TeaVM - def toolingClass = combinedLoader.loadClass('org.teavm.tooling.TeaVMTool') - def targetTypeClass = combinedLoader.loadClass('org.teavm.tooling.TeaVMTargetType') - def tooling = toolingClass.getDeclaredConstructor().newInstance() - - tooling.targetDirectory = outputDir - // Use SimpleTest as main class for testing - tooling.mainClass = 'io.github.project516.NumberGuessingGame.SimpleTest' - tooling.entryPointName = 'main' - - // Application classloader for TeaVM to analyze - def appLoader = new URLClassLoader(appClasspath as URL[], (ClassLoader) null) - tooling.classLoader = appLoader - - // Configuration options - tooling.targetType = targetTypeClass.JAVASCRIPT - tooling.debugInformationGenerated = true - tooling.targetFileName = 'classes.js' - - // Enable logging - def logClass = combinedLoader.loadClass('org.teavm.tooling.ConsoleTeaVMToolLog') - tooling.log = logClass.getDeclaredConstructor(boolean.class).newInstance(true) - - // Print classpath for debugging - println "Classpath URLs:" - appClasspath.each { url -> println " - ${url}" } - - // Generate JavaScript - println "Starting TeaVM generation..." - println "Main class: ${tooling.mainClass}" - println "Output directory: ${outputDir}" - - try { - tooling.generate() - println "TeaVM generation completed" - - // Try to check for problems if the API supports it - try { - def problemProvider = tooling.problemProvider - if (problemProvider != null && problemProvider.problems) { - problemProvider.problems.each { problem -> - println " ${problem.severity}: ${problem.text}" - } - } - } catch (Exception e) { - // Problems API might not be available - println "Could not check for problems: ${e.message}" - } - } catch (Exception e) { - println "TeaVM generation failed: ${e.message}" - e.printStackTrace() - throw e - } - - // List generated files - println "Generated files:" - outputDir.listFiles().each { file -> - println " - ${file.name} (${file.length()} bytes)" - } - } +// TeaVM configuration for compiling Java GUI to JavaScript +teavm { + // Main class to compile + mainClass = 'io.github.project516.NumberGuessingGame.WebGUI' } diff --git a/app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java b/app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java deleted file mode 100644 index 6164490..0000000 --- a/app/src/main/java/io/github/project516/NumberGuessingGame/SimpleTest.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.project516.NumberGuessingGame; - -/** Simple test class for TeaVM compilation. */ -public class SimpleTest { - public static void main(String[] args) { - System.out.println("Hello from TeaVM!"); - } -} diff --git a/teavm.sh b/teavm.sh new file mode 100755 index 0000000..05a3e3d --- /dev/null +++ b/teavm.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Script to build TeaVM JavaScript output for GitHub Pages deployment +# This replaces the cheerpj.sh script + +echo "Building project..." +./gradlew build + +echo "Compiling Java to JavaScript with TeaVM..." +# Disable configuration cache due to TeaVM plugin compatibility +./gradlew teavmc --no-configuration-cache + +echo "Copying TeaVM output to javadoc directory..." +mkdir -p app/build/docs/javadoc/teavm +cp -f app/build/teavm/classes.js app/build/docs/javadoc/teavm/ +cp -f teavm/index.html app/build/docs/javadoc/teavm/ + +echo "TeaVM build completed successfully!" +echo "Output location: app/build/docs/javadoc/teavm/" diff --git a/teavm/README.md b/teavm/README.md new file mode 100644 index 0000000..aa43624 --- /dev/null +++ b/teavm/README.md @@ -0,0 +1,45 @@ +# TeaVM Web Version + +This directory contains the web browser version of the Number Guessing Game, compiled from Java to JavaScript using TeaVM. + +## What is TeaVM? + +TeaVM is an ahead-of-time compiler for Java bytecode that emits JavaScript. It allows running Java applications in web browsers without requiring a Java plugin or JVM. + +## Files + +- `index.html` - The main HTML page that loads and runs the game +- `classes.js` - The compiled JavaScript (generated during build, not committed to git) + +## Building + +To build the TeaVM version: + +```bash +./teavm.sh +``` + +This script will: +1. Build the project +2. Compile the WebGUI class to JavaScript using TeaVM +3. Copy the output to `app/build/docs/javadoc/teavm/` for deployment + +## Implementation + +The web version uses `WebGUI.java` which: +- Implements a browser-native UI using TeaVM's JSO (JavaScript Objects) API +- Reuses the core game logic classes (`RandomNumber`, `CheckGuess`, etc.) +- Creates DOM elements dynamically for the game interface +- Provides the same gameplay experience as the Swing GUI + +## Deployment + +The TeaVM version is automatically deployed to GitHub Pages via the `javadoc.yml` workflow whenever changes are pushed to the master branch. + +## Technical Details + +- **TeaVM Version**: 0.10.2 +- **Plugin**: io.github.zebalu.teavm-gradle-plugin v1.0.0 +- **Main Class**: `io.github.project516.NumberGuessingGame.WebGUI` +- **Target**: JavaScript +- **Java Version Required**: 11+ (for compilation) diff --git a/teavm/classes.js b/teavm/classes.js new file mode 100644 index 0000000..ace9f29 --- /dev/null +++ b/teavm/classes.js @@ -0,0 +1,817 @@ +"use strict"; +var main;(function(){ +var $rt_seed=2463534242;function $rt_nextId(){var x=$rt_seed;x^=x<<13;x^=x>>17;x^=x<<5;$rt_seed=x;return x;}function $rt_compare(a,b){return a>b?1:a0){var i=0;do {data[i]=null;i=i+1|0;}while(i=0;i=i -1|0){if(dimensions[i]===0){first=i;break;}}if(first>0){for(i=0;i=0?packages[prefixIndex]:"";packages[j] +=prefix+data[i++]+".";}$rt_packageData=packages;}function $rt_metadata(data){var packages=$rt_packageData;var i=0;while(i=0){m.name=packages[packageIndex]+m.name;}}m.binaryName="L"+m.name+";";var superclass=data[i++];m.superclass=superclass!==0?superclass:null;m.supertypes=data[i++];if(m.superclass){m.supertypes.push(m.superclass);cls.prototype +=Object.create(m.superclass.prototype);}else {cls.prototype={};}var flags=data[i++];m.enum=(flags&8)!==0;m.flags=flags;m.primitive=false;m.item=null;cls.prototype.constructor=cls;cls.classObject=null;m.accessLevel=data[i++];var clinit=data[i++];cls.$clinit=clinit!==0?clinit:function(){};var virtualMethods=data[i++];if(virtualMethods!==0){for(var j=0;j0){clsName+="[]";}return clsName;}function Long(lo,hi){this.lo=lo|0;this.hi=hi|0;}Long.prototype.__teavm_class__=function(){return "long";};Long.prototype.toString +=function(){var result=[];var n=this;var positive=Long_isPositive(n);if(!positive){n=Long_neg(n);}var radix=new Long(10,0);do {var divRem=Long_divRem(n,radix);result.push(String.fromCharCode(48+divRem[1].lo));n=divRem[0];}while(n.lo!==0||n.hi!==0);result=(result.reverse()).join('');return positive?result:"-"+result;};Long.prototype.valueOf=function(){return Long_toNumber(this);};var Long_ZERO=new Long(0,0);var Long_MAX_NORMAL=1<<18;function Long_fromInt(val){return val>=0?new Long(val,0):new Long(val, -1);}function Long_fromNumber(val) +{if(val>=0){return new Long(val|0,val/0x100000000|0);}else {return Long_neg(new Long( -val|0, -val/0x100000000|0));}}function Long_toNumber(val){var lo=val.lo;var hi=val.hi;if(lo<0){lo+=0x100000000;}return 0x100000000*hi+lo;}var $rt_imul=Math.imul||function(a,b){var ah=a>>>16&0xFFFF;var al=a&0xFFFF;var bh=b>>>16&0xFFFF;var bl=b&0xFFFF;return al*bl+(ah*bl+al*bh<<16>>>0)|0;};var $rt_udiv=function(a,b){if(a<0){a+=0x100000000;}if(b<0){b+=0x100000000;}return a/b|0;};var $rt_umod=function(a,b){if(a<0){a+=0x100000000;}if +(b<0){b+=0x100000000;}return a%b|0;};function $rt_setCloneMethod(target, f){target.cz=f;} +function $rt_cls(cls){return D$(cls);} +function $rt_str(str) {if (str === null) {return null;}var characters = $rt_createCharArray(str.length);var charsBuffer = characters.data;for (var i = 0; i < str.length; i = (i + 1) | 0) {charsBuffer[i] = str.charCodeAt(i) & 0xFFFF;}return Dm(characters);} +function $rt_ustr(str) {if (str === null) {return null;}var data = str.e.data;var result = "";for (var i = 0; i < data.length; i = (i + 1) | 0) {result += String.fromCharCode(data[i]);}return result;} +function $rt_objcls() { return C; } +function $rt_nullCheck(val) {if (val === null) {$rt_throw(CN());}return val;} +function $rt_intern(str) {return str;}function $rt_getThread(){return null;} +function $rt_setThread(t){} +function $rt_createException(message){return JG(message);} +function $rt_createStackElement(className,methodName,fileName,lineNumber){return null;} +function $rt_setStack(e,stack){} +var A=Object.create(null); +var E=$rt_throw;var I7=$rt_compare;var JH=$rt_nullCheck;var H=$rt_cls;var U=$rt_createArray;var Gn=$rt_isInstance;var JI=$rt_nativeThread;var JJ=$rt_suspending;var JK=$rt_resuming;var JL=$rt_invalidPointer;var B=$rt_s;var Ba=$rt_eraseClinit;var B3=$rt_imul;var C2=$rt_wrapException; +function C(){this.$id$=0;} +function JM(){var a=new C();G(a);return a;} +function G(a){return;} +function Bc(a){return D$(a.constructor);} +function HX(a){return F().a(Bc(a).dy()).a(B(0)).a(C6(Dp(a))).d();} +function Dp(a){var b,c;b=a;if(!b.$id$){c=$rt_nextId();b.$id$=c;}return a.$id$;} +function Fo(a){var b,c,d;if(!Gn(a,Be)){b=a;if(b.constructor.$meta.item===null)E(I9());}c=F4(a);b=c;d=$rt_nextId();b.$id$=d;return c;} +function BB(){var a=this;C.call(a);a.bR=null;a.er=null;a.bF=0;a.bS=0;} +function JN(){var a=new BB();D9(a);return a;} +function JO(a){var b=new BB();CS(b,a);return b;} +function JP(a,b){var c=new BB();Fm(c,a,b);return c;} +function D9(a){a.bF=1;a.bS=1;a.bv();} +function CS(a,b){a.bF=1;a.bS=1;a.bv();a.bR=b;} +function Fm(a,b,c){a.bF=1;a.bS=1;a.bv();a.bR=b;a.er=c;} +function Gk(a){return a;} +function IR(a){return a.bR;} +function X(){BB.call(this);} +function JQ(){var a=new X();Cb(a);return a;} +function JR(a){var b=new X();Dv(b,a);return b;} +function Cb(a){D9(a);} +function Dv(a,b){CS(a,b);} +function Q(){X.call(this);} +function JS(){var a=new Q();Bn(a);return a;} +function JG(a){var b=new Q();CG(b,a);return b;} +function Bn(a){Cb(a);} +function CG(a,b){Dv(a,b);} +function Cc(){Q.call(this);} +function B5(){var a=new Cc();E9(a);return a;} +function E9(a){Bn(a);} +function Es(){C.call(this);} +function Ed(b,c){var d,e,f,g;d=b.data;e=$rt_createCharArray(c);f=Cx(c,d.length);g=0;while(g=0&&e>=0&&f>=0&&(c+f|0)<=E5(b)){g=e+f|0;if(g<=E5(d)){a:{b:{if(b!==d){h=Bc(b).bn();i=Bc(d).bn();if(h!==null&&i!==null){if(h===i)break b;if(!h.bl()&&!i.bl()){j=b;k=0;g=c;while(k=2&&c<=36))c=10;return Jm(20).b9(b,c).d();} +function C6(b){Bf();return BW(b,4);} +function CM(b){Bf();return Fu(b,10);} +function Ep(b,c){var d,e,f,g,h;Bf();if(c>=2&&c<=36){if(b!==null&&!b.J()){a:{d=0;e=0;switch(b.h(0)){case 43:e=1;break a;case 45:d=1;e=1;break a;default:}}f=0;if(e==b.c())E(JA());while(e=c)E(BU(F().a(B(3)).n(c).a(B(4)).a(b).d()));f=B3(c,f)+h|0;if(f<0){if(g==b.c()&&f==(-2147483648)&&d)return (-2147483648);E(BU(F().a(B(5)).a(b).d()));}e=g;}if(d)f= -f;return f;}E(BU(B(6)));}E(BU(F().a(B(7)).n(c).d()));} +function FA(b){Bf();return Ep(b,10);} +function Em(b){Bf();if(b>=(-128)&&b<=127){Ej();return JW.data[b+128|0];}return Gw(b);} +function Ej(){var b;Bf();a:{if(JW===null){JW=U(Bg,256);b=0;while(true){if(b>=JW.data.length)break a;JW.data[b]=Gw(b-128|0);b=b+1|0;}}}} +function G0(a){return a.D;} +function Hu(a){return CM(a.D);} +function FR(a){return a.D>>>4^a.D<<28^a.D<<8^a.D>>>24;} +function Eh(b){var c,d,e;Bf();if(!b)return 32;c=0;d=b>>>16;if(d)c=16;else d=b;e=d>>>8;if(!e)e=d;else c=c|8;d=e>>>4;if(!d)d=e;else c=c|4;e=d>>>2;if(!e)e=d;else c=c|2;if(e>>>1)c=c|1;return (32-c|0)-1|0;} +function Ev(b){var c,d,e;Bf();if(!b)return 32;c=0;d=b<<16;if(d)c=16;else d=b;e=d<<8;if(!e)e=d;else c=c|8;d=e<<4;if(!d)d=e;else c=c|4;e=d<<2;if(!e)e=d;else c=c|2;if(e<<1)c=c|1;return (32-c|0)-1|0;} +function F2(){JV=H($rt_intcls());} +function Cj(){X.call(this);} +function I9(){var a=new Cj();HP(a);return a;} +function HP(a){Cb(a);} +function Bk(){C.call(this);} +var JX=null;var JY=null;var JZ=null;var J0=null;function R(){R=Ba(Bk);GE();} +function Ft(b){R();return b>=0&&b<=1114111?1:0;} +function Ec(b){R();return (b&64512)!=55296?0:1;} +function D2(b){R();return (b&64512)!=56320?0:1;} +function Ee(b,c){R();return ((b&1023)<<10|c&1023)+65536|0;} +function BQ(b){var c;R();c=b-65536|0;return (55296|c>>10&1023)&65535;} +function BJ(b){R();return (56320|b&1023)&65535;} +function DB(b){R();return C$(b)&65535;} +function C$(b){R();return FG(b).toUpperCase().charCodeAt(0);} +function Dc(b){R();return Fg(b);} +function Fg(b){var c,d,e,f,g,h,i,j;R();c=Dx();d=c.data;e=0;f=(d.length/2|0)-1|0;while(f>=e){g=(e+f|0)/2|0;h=g*2|0;i=d[h];j=I7(b,i);if(j>0)e=g+1|0;else{if(j>=0)return d[h+1|0];f=g-1|0;}}return (-1);} +function Bd(b,c){R();if(c>=2&&c<=36&&b%5B%9F%=J%AN%Eo%Is%Mw%Q{%U!\'Y&\'^*\'b.\'f2\'j6\'n:\'r>\'vB\'zF\'!#J\'&#N\'*#R\'.#V\'2#Z\'6#_\':#c\'>#g\'B#k\'F#o\'J#s\'N#w\'R#6)I:)M>)QB)UF)YJ)^N)bR)fV)jZ)n_)rc)vg)zk)!#o)&#s)*#w).#{)2#!+6#&+:#*+>#.+B#2+F#6+J#:+N#>+R#{R# !T#%&T#)*T#-.T#12T#56T#9:T#=>T#ABT#E6a# :a#%>a#)Ba#-Fa#1Ja#5Na#9Ra#=Va#AZa#E:s# >s#%Bs#)Fs#-Js#1Ns#5Rs#9Vs#=Zs#A_s#EZ:% _:%%c:%)g:%-k:%1o:%5s:%9w:%={:%A!<%E2F% 6F%%:F%)>F%-BF%1FF%5JF%9NF%=RF%AVF%EgP% kP%%oP%)sP%-wP%1{P%5!R%9&R%=*R%A.R%E>]% B]%%F]%)J]%-N]%1R]%5V]%9Z]%=_]%Ac]%Esg% wg%%{g%)!i%-&" ++"i%1*i%5.i%92i%=6i%A:i%EJs% Ns%%Rs%)Vs%-Zs%1_s%5cs%9gs%=ks%Aos%E!!\' &!\'%*!\').!\'-2!\'16!\'5:!\'9>!\'=B!\'AF!\'EV,\' Z,\'%_,\')c,\'-g,\'1k,\'5o,\'9s,\'=w,\'A{,\'E.8\' 28\'%68\'):8\'->8\'1B8\'5F8\'9J8\'=N8\'AR8\'EcB\' gB\'%kB\')oB\'-sB\'1wB\'5{B\'9!D\'=&D\'A*D\'E>L\' BL\'%FL\')JL\'-NL\'1RL\'5VL\'9ZL\'=_L\'AcL\'EsV\' wV\'%{V\')!X\'-&X\'1*X\'5.X\'92X\'=6X\'A:X\'EB_\' F_\'%J_\')N_\'-R_\'1V_\'5Z_\'9__\'=c_\'Ag_\'Esw\' ww\'%{w\')!y\'-&y\'1*y\'5.y\'92y\'=6y\'A:y\'EB!) F!)%J!))N!)-R!)1V!)5Z!)9_!)=c!)Ag!)Egi+ ki+%oi+)si+-wi+1{i+5!k+9&k+=*k+A.k+Eom+ sm+%wm+){m+-!o+1&o+5*o+9.o+=2o+A6o+E>,- B,-%F" ++",-)J,--N,-1R,-5V,-9Z,-=_,-Ac,-E>8- B8-%F8-)J8--N8-1R8-5V8-9Z8-=_8-Ac8-E{F- !H-%&H-)*H--.H-12H-56H-9:H-=>H-ABH-E_H- cH-%gH-)kH--oH-1sH-5wH-9{H-=!J-A&J-E!Z- &Z-%*Z-).Z--2Z-16Z-5:Z-9>Z-=BZ-AFZ-E2c- 6c-%:c-)>c--Bc-1Fc-5Jc-9Nc-=Rc-AVc-EJo- No-%Ro-)Vo--Zo-1_o-5co-9go-=ko-Aoo-E.q- 2q-%6q-):q-->q-1Bq-5Fq-9Jq-=Nq-ARq-E&4r *4r%.4r)24r-64r1:4r5>4r9B4r=F4rAJ4rE{or !qr%&qr)*qr-.qr12qr56qr9:qr=>qrABqrE&ur *ur%.ur)2ur-6ur1:ur5>ur9Bur=FurAJurE**t .*t%2*t)6*t-:*t1>*t5B*t9F*t=J*tAN*tEN,t R,t%V,t)Z,t-_,t1c,t5g,t9k,t=o,tAs,tE_" ++"4t c4t%g4t)k4t-o4t1s4t5w4t9{4t=!6tA&6tEgXt kXt%oXt)sXt-wXt1{Xt5!Zt9&Zt=*ZtA.ZtE{c@# !e@#%&e@#)*e@#-.e@#12e@#56e@#9:e@#=>e@#ABe@#Ece@#Ige@#Mke@#Qoe@#Use@#Ywe@#^{e@#b!g@#f&g@#j*g@#n.g@#r2g@#v6g@#z:g@#!#>g@#&#Bg@#*#Fg@#.#Jg@#2#Ng@#6#Rg@#:#Vg@#>#Zg@#B#_g@#F#cg@#J#gg@#N#kg@#R#*i@#I.i@#M2i@#Q6i@#U:i@#Y>i@#^Bi@#bFi@#fJi@#jNi@#nRi@#rVi@#vZi@#z_i@#!#ci@#&#gi@#*#ki@#.#oi@#2#si@#6#wi@#:#{i@#>#!k@#B#&k@#F#*k@#J#.k@#N#2k@#R#s&D# w&D#%{&D#)!(D#-&(D#1*(D#5.(D#92(D#=6(D#A:(D#E2.H# 6.H#%:.H#)>.H#-B.H#1F.H#5J.H#9N.H#=R.H#AV." ++"H#EwuH# {uH#%!wH#)&wH#-*wH#1.wH#52wH#96wH#=:wH#A>wH#Ew$J# {$J#%!&J#)&&J#-*&J#1.&J#52&J#96&J#=:&J#A>&J#E{*J# !,J#%&,J#)*,J#-.,J#12,J#56,J#9:,J#=>,J#AB,J#E_8J# c8J#%g8J#)k8J#-o8J#1s8J#5w8J#9{8J#=!:J#A&:J#E2RJ# 6RJ#%:RJ#)>RJ#-BRJ#1FRJ#5JRJ#9NRJ#=RRJ#AVRJ#ENqJ# RqJ#%VqJ#)ZqJ#-_qJ#1cqJ#5gqJ#9kqJ#=oqJ#AsqJ#E&}J# *}J#%.}J#)2}J#-6}J#1:}J#5>}J#9B}J#=F}J#AJ}J#Eg@L# k@L#%o@L#)s@L#-w@L#1{@L#5!BL#9&BL#=*BL#A.BL#EZJL# _JL#%cJL#)gJL#-kJL#1oJL#5sJL#9wJL#={JL#A!LL#ENTL# RTL#%VTL#)ZTL#-_TL#1cTL#5gTL#9kTL#=oTL#AsTL#E:{L# >{L#" ++"%B{L#)F{L#-J{L#1N{L#5R{L#9V{L#=Z{L#A_{L#ERkN# VkN#%ZkN#)_kN#-ckN#1gkN#5kkN#9okN#=skN#AwkN#E_$P# c$P#%g$P#)k$P#-o$P#1s$P#5w$P#9{$P#=!&P#A&&P#E.,P# 2,P#%6,P#):,P#->,P#1B,P#5F,P#9J,P#=N,P#AR,P#EFau# Jau#%Nau#)Rau#-Vau#1Zau#5_au#9cau#=gau#Akau#Eouu# suu#%wuu#){uu#-!wu#1&wu#5*wu#9.wu#=2wu#A6wu#EF0N% J0N%%N0N%)R0N%-V0N%1Z0N%5_0N%9c0N%=g0N%Ak0N%Eo0N% s0N%%w0N%){0N%-!2N%1&2N%5*2N%9.2N%=22N%A62N%E:2N% >2N%%B2N%)F2N%-J2N%1N2N%5R2N%9V2N%=Z2N%A_2N%Ec2N% g2N%%k2N%)o2N%-s2N%1w2N%5{2N%9!4N%=&4N%A*4N%E.4N% 24N%%64N%):4N%->" ++"4N%1B4N%5F4N%9J4N%=N4N%AR4N%ERJR% VJR%%ZJR%)_JR%-cJR%1gJR%5kJR%9oJR%=sJR%AwJR%E>qR% BqR%%FqR%)JqR%-NqR%1RqR%5VqR%9ZqR%=_qR%AcqR%E:FV% >FV%%BFV%)FFV%-JFV%1NFV%5RFV%9VFV%=ZFV%A_FV%E"};} +function BO(){Y.call(this);} +var J1=null;function F9(){F9=Ba(BO);G6();} +function D6(b){F9();return F().dR(b).d();} +function D_(b){var c,d,e;F9();if(Long_eq(b,Long_ZERO))return 64;c=0;d=Long_shru(b,32);if(Long_ne(d,Long_ZERO))c=32;else d=b;e=Long_shru(d,16);if(Long_eq(e,Long_ZERO))e=d;else c=c|16;d=Long_shru(e,8);if(Long_eq(d,Long_ZERO))d=e;else c=c|8;e=Long_shru(d,4);if(Long_eq(e,Long_ZERO))e=d;else c=c|4;d=Long_shru(e,2);if(Long_eq(d,Long_ZERO))d=e;else c=c|2;if(Long_ne(Long_shru(d,1),Long_ZERO))c=c|1;return (64-c|0)-1|0;} +function G6(){J1=H($rt_longcls());} +function Cn(){} +function Bo(){Q.call(this);} +function HU(){var a=new Bo();ER(a);return a;} +function O(a){var b=new Bo();C_(b,a);return b;} +function ER(a){Bn(a);} +function C_(a,b){CG(a,b);} +function M(){Bo.call(this);} +function J2(a){var b=new M();Z(b,a);return b;} +function Z(a,b){C_(a,b);} +function Df(){M.call(this);this.ej=null;} +function IW(a){var b=new Df();FJ(b,a);return b;} +function FJ(a,b){Z(a,F().a(B(8)).a(b).d());a.ej=b;} +function Bx(){C.call(this);} +var J3=null;var J4=null;var J5=null;var J6=null;function Fb(b,c){if(!c.J())b=F().a(b).a(B(9)).a(c).d();return b;} +function G_(b){var c;c=HQ();if(c.hasOwnProperty($rt_ustr(b)))b=(c[$rt_ustr(b)].value!==null?$rt_str(c[$rt_ustr(b)].value):null);return b;} +function IU(b,c){var d,e;if(c.J()){d=G_(b);e=d.d7(95);c=e<=0?B(10):d.bk(e+1|0);}return c;} +function HQ(){if(J3===null)J3=IQ();return J3;} +function Hv(){if(J4===null)J4=GU();return J4;} +function HN(b,c){return Gf(Hy(),b,c);} +function Hy(){if(J5===null)J5=GC();return J5;} +function Gf(b,c,d){var e,f,g;e=Fb(c,d);if(b.hasOwnProperty($rt_ustr(e)))f=b[$rt_ustr(e)];else if(b.hasOwnProperty($rt_ustr(c)))f=b[$rt_ustr(c)];else{g=b.root;f=g;}return (f.value!==null?$rt_str(f.value):null);} +function H$(b,c){var d,e,f;d=Hq();e=Fb(b,c);if(d.hasOwnProperty($rt_ustr(e)))f=d[$rt_ustr(e)];else if(d.hasOwnProperty($rt_ustr(b)))f=d[$rt_ustr(b)];else{f=d.root;f=f;}return f;} +function Hq(){if(J6===null)J6=Iz();return J6;} +function IQ(){return {"ksh":{"value":"ksh-Latn-DE"},"ksj":{"value":"ksj-Latn-ZZ"},"cch":{"value":"cch-Latn-NG"},"und-Khar":{"value":"pra-Khar-PK"},"gkn":{"value":"gkn-Latn-ZZ"},"ksr":{"value":"ksr-Latn-ZZ"},"und-Mani":{"value":"xmn-Mani-CN"},"gkp":{"value":"gkp-Latn-ZZ"},"xmf":{"value":"xmf-Geor-GE"},"ccp":{"value":"ccp-Cakm-BD"},"ted":{"value":"ted-Latn-ZZ"},"und-Mand":{"value":"myz-Mand-IR"},"ktb":{"value":"ktb-Ethi-ZZ"},"xmn":{"value":"xmn-Mani-CN"},"sd-Sind":{"value":"sd-Sind-IN"},"xmr":{"value":"xmr-Merc-SD"} +,"tem":{"value":"tem-Latn-SL"},"und-Mroo":{"value":"mro-Mroo-BD"},"teo":{"value":"teo-Latn-UG"},"tet":{"value":"tet-Latn-TL"},"ktm":{"value":"ktm-Latn-ZZ"},"glk":{"value":"glk-Arab-IR"},"kto":{"value":"kto-Latn-ZZ"},"und-Soyo":{"value":"cmg-Soyo-MN"},"xna":{"value":"xna-Narb-SA"},"tfi":{"value":"tfi-Latn-ZZ"},"kub":{"value":"kub-Latn-ZZ"},"kue":{"value":"kue-Latn-ZZ"},"kud":{"value":"kud-Latn-ZZ"},"xnr":{"value":"xnr-Deva-IN"},"ceb":{"value":"ceb-Latn-PH"},"kuj":{"value":"kuj-Latn-ZZ"},"kum":{"value":"kum-Cyrl-RU"} +,"kun":{"value":"kun-Latn-ZZ"},"gmm":{"value":"gmm-Latn-ZZ"},"kup":{"value":"kup-Latn-ZZ"},"kus":{"value":"kus-Latn-ZZ"},"gmv":{"value":"gmv-Ethi-ZZ"},"tgc":{"value":"tgc-Latn-ZZ"},"xog":{"value":"xog-Latn-UG"},"und-Arab-YT":{"value":"swb-Arab-YT"},"und-Latn-ET":{"value":"en-Latn-ET"},"xon":{"value":"xon-Latn-ZZ"},"ha-CM":{"value":"ha-Arab-CM"},"gnd":{"value":"gnd-Latn-ZZ"},"kvg":{"value":"kvg-Latn-ZZ"},"tgo":{"value":"tgo-Latn-ZZ"},"cfa":{"value":"cfa-Latn-ZZ"},"gng":{"value":"gng-Latn-ZZ"},"tgu":{"value": +"tgu-Latn-ZZ"},"und-Latn-GE":{"value":"ku-Latn-GE"},"kvr":{"value":"kvr-Latn-ID"},"kvx":{"value":"kvx-Arab-PK"},"und-Gujr":{"value":"gu-Gujr-IN"},"thl":{"value":"thl-Deva-NP"},"xpr":{"value":"xpr-Prti-IR"},"thq":{"value":"thq-Deva-NP"},"god":{"value":"god-Latn-ZZ"},"gof":{"value":"gof-Ethi-ZZ"},"kwj":{"value":"kwj-Latn-ZZ"},"ky-Arab":{"value":"ky-Arab-CN"},"thr":{"value":"thr-Deva-NP"},"goi":{"value":"goi-Latn-ZZ"},"cgg":{"value":"cgg-Latn-UG"},"kwo":{"value":"kwo-Latn-ZZ"},"gom":{"value":"gom-Deva-IN"},"gon": +{"value":"gon-Telu-IN"},"gos":{"value":"gos-Latn-NL"},"gor":{"value":"gor-Latn-ID"},"und-Latn-CY":{"value":"tr-Latn-CY"},"got":{"value":"got-Goth-UA"},"tif":{"value":"tif-Latn-ZZ"},"tig":{"value":"tig-Ethi-ER"},"kxa":{"value":"kxa-Latn-ZZ"},"kxc":{"value":"kxc-Ethi-ZZ"},"pag":{"value":"pag-Latn-PH"},"tik":{"value":"tik-Latn-ZZ"},"tim":{"value":"tim-Latn-ZZ"},"pal":{"value":"pal-Phli-IR"},"tio":{"value":"tio-Latn-ZZ"},"pam":{"value":"pam-Latn-PH"},"und-Marc":{"value":"bo-Marc-CN"},"pap":{"value":"pap-Latn-AW"} +,"und-Latn-CN":{"value":"za-Latn-CN"},"tiv":{"value":"tiv-Latn-NG"},"kxm":{"value":"kxm-Thai-TH"},"kxp":{"value":"kxp-Arab-PK"},"pau":{"value":"pau-Latn-PW"},"chk":{"value":"chk-Latn-FM"},"chm":{"value":"chm-Cyrl-RU"},"xrb":{"value":"xrb-Latn-ZZ"},"chp":{"value":"chp-Latn-CA"},"cho":{"value":"cho-Latn-US"},"kxw":{"value":"kxw-Latn-ZZ"},"und-Latn-DZ":{"value":"fr-Latn-DZ"},"chr":{"value":"chr-Cher-US"},"kxz":{"value":"kxz-Latn-ZZ"},"und-Batk":{"value":"bbc-Batk-ID"},"und-Bass":{"value":"bsq-Bass-LR"},"kye":{"value" +:"kye-Latn-ZZ"},"pbi":{"value":"pbi-Latn-ZZ"},"und-Deva-MU":{"value":"bho-Deva-MU"},"und-Sgnw":{"value":"ase-Sgnw-US"},"xsa":{"value":"xsa-Sarb-YE"},"kyx":{"value":"kyx-Latn-ZZ"},"xsi":{"value":"xsi-Latn-ZZ"},"pcd":{"value":"pcd-Latn-FR"},"und-Latn-AM":{"value":"ku-Latn-AM"},"xsm":{"value":"xsm-Latn-ZZ"},"tkl":{"value":"tkl-Latn-TK"},"und-Thai-CN":{"value":"lcp-Thai-CN"},"grb":{"value":"grb-Latn-ZZ"},"xsr":{"value":"xsr-Deva-NP"},"und-Latn-AF":{"value":"tk-Latn-AF"},"grc":{"value":"grc-Cprt-CY"},"tkr":{"value" +:"tkr-Latn-AZ"},"cja":{"value":"cja-Arab-KH"},"pcm":{"value":"pcm-Latn-NG"},"tkt":{"value":"tkt-Deva-NP"},"und-Olck":{"value":"sat-Olck-IN"},"kzr":{"value":"kzr-Latn-ZZ"},"cjm":{"value":"cjm-Cham-VN"},"grt":{"value":"grt-Beng-IN"},"und-Arab-TJ":{"value":"fa-Arab-TJ"},"und-Arab-TG":{"value":"apd-Arab-TG"},"und-Arab-TH":{"value":"mfa-Arab-TH"},"und-Deva-PK":{"value":"btv-Deva-PK"},"grw":{"value":"grw-Latn-ZZ"},"cjv":{"value":"cjv-Latn-ZZ"},"pdc":{"value":"pdc-Latn-US"},"tlf":{"value":"tlf-Latn-ZZ"},"und-Arab-TR": +{"value":"az-Arab-TR"},"ckb":{"value":"ckb-Arab-IQ"},"tly":{"value":"tly-Latn-AZ"},"pdt":{"value":"pdt-Latn-CA"},"tlx":{"value":"tlx-Latn-ZZ"},"ckl":{"value":"ckl-Latn-ZZ"},"cko":{"value":"cko-Latn-ZZ"},"gsw":{"value":"gsw-Latn-CH"},"ped":{"value":"ped-Latn-ZZ"},"tmh":{"value":"tmh-Latn-NE"},"cky":{"value":"cky-Latn-ZZ"},"kk-Arab":{"value":"kk-Arab-CN"},"und-Runr":{"value":"non-Runr-SE"},"cla":{"value":"cla-Latn-ZZ"},"peo":{"value":"peo-Xpeo-IR"},"tmy":{"value":"tmy-Latn-ZZ"},"pex":{"value":"pex-Latn-ZZ"},"ky-TR": +{"value":"ky-Latn-TR"},"tnh":{"value":"tnh-Latn-ZZ"},"guc":{"value":"guc-Latn-CO"},"gub":{"value":"gub-Latn-BR"},"gud":{"value":"gud-Latn-ZZ"},"pfl":{"value":"pfl-Latn-DE"},"cme":{"value":"cme-Latn-ZZ"},"cmg":{"value":"cmg-Soyo-MN"},"gur":{"value":"gur-Latn-GH"},"xwe":{"value":"xwe-Latn-ZZ"},"guw":{"value":"guw-Latn-ZZ"},"tof":{"value":"tof-Latn-ZZ"},"gux":{"value":"gux-Latn-ZZ"},"guz":{"value":"guz-Latn-KE"},"tog":{"value":"tog-Latn-MW"},"gvf":{"value":"gvf-Latn-ZZ"},"toq":{"value":"toq-Latn-ZZ"},"gvr":{"value" +:"gvr-Deva-NP"},"und-Guru":{"value":"pa-Guru-IN"},"gvs":{"value":"gvs-Latn-ZZ"},"tpi":{"value":"tpi-Latn-PG"},"tpm":{"value":"tpm-Latn-ZZ"},"und-Tfng":{"value":"zgh-Tfng-MA"},"gwc":{"value":"gwc-Arab-ZZ"},"und-Arab-PK":{"value":"ur-Arab-PK"},"phl":{"value":"phl-Arab-ZZ"},"und-Aghb":{"value":"lez-Aghb-RU"},"phn":{"value":"phn-Phnx-LB"},"gwi":{"value":"gwi-Latn-CA"},"tpz":{"value":"tpz-Latn-ZZ"},"cop":{"value":"cop-Copt-EG"},"gwt":{"value":"gwt-Arab-ZZ"},"lab":{"value":"lab-Lina-GR"},"lad":{"value":"lad-Hebr-IL"} +,"lah":{"value":"lah-Arab-PK"},"pil":{"value":"pil-Latn-ZZ"},"lag":{"value":"lag-Latn-TZ"},"tqo":{"value":"tqo-Latn-ZZ"},"laj":{"value":"laj-Latn-UG"},"pip":{"value":"pip-Latn-ZZ"},"und-Khmr":{"value":"km-Khmr-KH"},"las":{"value":"las-Latn-ZZ"},"sd-Deva":{"value":"sd-Deva-IN"},"und-Khoj":{"value":"sd-Khoj-IN"},"cps":{"value":"cps-Latn-PH"},"kk-AF":{"value":"kk-Arab-AF"},"und-Arab-MU":{"value":"ur-Arab-MU"},"lbe":{"value":"lbe-Cyrl-RU"},"und-Arab-NG":{"value":"ha-Arab-NG"},"gyi":{"value":"gyi-Latn-ZZ"},"tru": +{"value":"tru-Latn-TR"},"trw":{"value":"trw-Arab-ZZ"},"trv":{"value":"trv-Latn-TW"},"lbu":{"value":"lbu-Latn-ZZ"},"lbw":{"value":"lbw-Latn-ID"},"tsd":{"value":"tsd-Grek-GR"},"tsf":{"value":"tsf-Deva-NP"},"pka":{"value":"pka-Brah-IN"},"tsg":{"value":"tsg-Latn-PH"},"tsj":{"value":"tsj-Tibt-BT"},"und-Deva-FJ":{"value":"hif-Deva-FJ"},"pko":{"value":"pko-Latn-KE"},"lcm":{"value":"lcm-Latn-ZZ"},"crh":{"value":"crh-Cyrl-UA"},"lcp":{"value":"lcp-Thai-CN"},"tsw":{"value":"tsw-Latn-ZZ"},"crj":{"value":"crj-Cans-CA"}, +"crl":{"value":"crl-Cans-CA"},"und-Arab-MN":{"value":"kk-Arab-MN"},"crk":{"value":"crk-Cans-CA"},"crm":{"value":"crm-Cans-CA"},"und-Arab-MM":{"value":"rhg-Arab-MM"},"pla":{"value":"pla-Latn-ZZ"},"tte":{"value":"tte-Latn-ZZ"},"crs":{"value":"crs-Latn-SC"},"ttd":{"value":"ttd-Latn-ZZ"},"ldb":{"value":"ldb-Latn-ZZ"},"ttj":{"value":"ttj-Latn-UG"},"kk-CN":{"value":"kk-Arab-CN"},"und-Yiii":{"value":"ii-Yiii-CN"},"tts":{"value":"tts-Thai-TH"},"csb":{"value":"csb-Latn-PL"},"ttr":{"value":"ttr-Latn-ZZ"},"ttt":{"value" +:"ttt-Latn-AZ"},"csw":{"value":"csw-Cans-CA"},"tuh":{"value":"tuh-Latn-ZZ"},"led":{"value":"led-Latn-ZZ"},"tul":{"value":"tul-Latn-ZZ"},"lee":{"value":"lee-Latn-ZZ"},"tum":{"value":"tum-Latn-MW"},"und-Arab-KH":{"value":"cja-Arab-KH"},"tuq":{"value":"tuq-Latn-ZZ"},"ctd":{"value":"ctd-Pauc-MM"},"lem":{"value":"lem-Latn-ZZ"},"lep":{"value":"lep-Lepc-IN"},"pms":{"value":"pms-Latn-IT"},"leq":{"value":"leq-Latn-ZZ"},"und-Pauc":{"value":"ctd-Pauc-MM"},"und-Sogo":{"value":"sog-Sogo-UZ"},"leu":{"value":"leu-Latn-ZZ"} +,"lez":{"value":"lez-Cyrl-RU"},"tvd":{"value":"tvd-Latn-ZZ"},"mn-CN":{"value":"mn-Mong-CN"},"sr-TR":{"value":"sr-Latn-TR"},"png":{"value":"png-Latn-ZZ"},"tvl":{"value":"tvl-Latn-TV"},"und-Brah":{"value":"pka-Brah-IN"},"und-Brai":{"value":"fr-Brai-FR"},"pnn":{"value":"pnn-Latn-ZZ"},"tvu":{"value":"tvu-Latn-ZZ"},"pnt":{"value":"pnt-Grek-GR"},"uz-CN":{"value":"uz-Cyrl-CN"},"ha-SD":{"value":"ha-Arab-SD"},"twh":{"value":"twh-Latn-ZZ"},"und-Takr":{"value":"doi-Takr-IN"},"lgg":{"value":"lgg-Latn-ZZ"},"pon":{"value" +:"pon-Latn-FM"},"twq":{"value":"twq-Latn-NE"},"und-Arab-ID":{"value":"ms-Arab-ID"},"und-Arab-IN":{"value":"ur-Arab-IN"},"txg":{"value":"txg-Tang-CN"},"yam":{"value":"yam-Latn-ZZ"},"und-Talu":{"value":"khb-Talu-CN"},"yao":{"value":"yao-Latn-MZ"},"yap":{"value":"yap-Latn-FM"},"yas":{"value":"yas-Latn-ZZ"},"yat":{"value":"yat-Latn-ZZ"},"ppo":{"value":"ppo-Latn-ZZ"},"yav":{"value":"yav-Latn-CM"},"yay":{"value":"yay-Latn-ZZ"},"yaz":{"value":"yaz-Latn-ZZ"},"und-Tale":{"value":"tdd-Tale-CN"},"ybb":{"value":"ybb-Latn-CM"} +,"yba":{"value":"yba-Latn-ZZ"},"tya":{"value":"tya-Latn-ZZ"},"lia":{"value":"lia-Latn-ZZ"},"lid":{"value":"lid-Latn-ZZ"},"und-Latn-TW":{"value":"trv-Latn-TW"},"lif":{"value":"lif-Deva-NP"},"lih":{"value":"lih-Latn-ZZ"},"lig":{"value":"lig-Latn-ZZ"},"lij":{"value":"lij-Latn-IT"},"hag":{"value":"hag-Latn-ZZ"},"und-Latn-TN":{"value":"fr-Latn-TN"},"tyv":{"value":"tyv-Cyrl-RU"},"yby":{"value":"yby-Latn-ZZ"},"und-Arab-GB":{"value":"ks-Arab-GB"},"hak":{"value":"hak-Hans-CN"},"und-Taml":{"value":"ta-Taml-IN"},"ham": +{"value":"ham-Latn-ZZ"},"lis":{"value":"lis-Lisu-CN"},"und-Latn-SY":{"value":"fr-Latn-SY"},"ky-Latn":{"value":"ky-Latn-TR"},"pra":{"value":"pra-Khar-PK"},"haw":{"value":"haw-Latn-US"},"haz":{"value":"haz-Arab-AF"},"ku-LB":{"value":"ku-Arab-LB"},"prd":{"value":"prd-Arab-IR"},"prg":{"value":"prg-Latn-001"},"tzm":{"value":"tzm-Latn-MA"},"hbb":{"value":"hbb-Latn-ZZ"},"und-Latn-UA":{"value":"pl-Latn-UA"},"ljp":{"value":"ljp-Latn-ID"},"und-Tang":{"value":"txg-Tang-CN"},"yue-Hans":{"value":"yue-Hans-CN"},"und-Latn-RU": +{"value":"krl-Latn-RU"},"lki":{"value":"lki-Arab-IR"},"pss":{"value":"pss-Latn-ZZ"},"lkt":{"value":"lkt-Latn-US"},"sr-RO":{"value":"sr-Latn-RO"},"und-Arab-CN":{"value":"ug-Arab-CN"},"lle":{"value":"lle-Latn-ZZ"},"und-Cyrl":{"value":"ru-Cyrl-RU"},"uz-AF":{"value":"uz-Arab-AF"},"yer":{"value":"yer-Latn-ZZ"},"und-Beng":{"value":"bn-Beng-BD"},"ptp":{"value":"ptp-Latn-ZZ"},"lln":{"value":"lln-Latn-ZZ"},"sr-RU":{"value":"sr-Latn-RU"},"hdy":{"value":"hdy-Ethi-ZZ"},"unr-NP":{"value":"unr-Deva-NP"},"und-Mend":{"value" +:"men-Mend-SL"},"lmn":{"value":"lmn-Telu-IN"},"lmp":{"value":"lmp-Latn-ZZ"},"lmo":{"value":"lmo-Latn-IT"},"puu":{"value":"puu-Latn-GA"},"und-Arab-CC":{"value":"ms-Arab-CC"},"pal-Phlp":{"value":"pal-Phlp-CN"},"ygr":{"value":"ygr-Latn-ZZ"},"ygw":{"value":"ygw-Latn-ZZ"},"lns":{"value":"lns-Latn-ZZ"},"ky-CN":{"value":"ky-Arab-CN"},"lnu":{"value":"lnu-Latn-ZZ"},"pwa":{"value":"pwa-Latn-ZZ"},"und-Mahj":{"value":"hi-Mahj-IN"},"rif-NL":{"value":"rif-Latn-NL"},"loj":{"value":"loj-Latn-ZZ"},"lol":{"value":"lol-Latn-CD"} +,"lok":{"value":"lok-Latn-ZZ"},"lor":{"value":"lor-Latn-ZZ"},"und-Sora":{"value":"srb-Sora-IN"},"los":{"value":"los-Latn-ZZ"},"loz":{"value":"loz-Latn-ZM"},"und-202":{"value":"en-Latn-NG"},"und-Latn-MR":{"value":"fr-Latn-MR"},"hhy":{"value":"hhy-Latn-ZZ"},"hia":{"value":"hia-Latn-ZZ"},"hif":{"value":"hif-Latn-FJ"},"dad":{"value":"dad-Latn-ZZ"},"hih":{"value":"hih-Latn-ZZ"},"hig":{"value":"hig-Latn-ZZ"},"daf":{"value":"daf-Latn-ZZ"},"ubu":{"value":"ubu-Latn-ZZ"},"dah":{"value":"dah-Latn-ZZ"},"hil":{"value":"hil-Latn-PH"} +,"dag":{"value":"dag-Latn-ZZ"},"und-Mero":{"value":"xmr-Mero-SD"},"dak":{"value":"dak-Latn-US"},"und-Merc":{"value":"xmr-Merc-SD"},"dar":{"value":"dar-Cyrl-RU"},"dav":{"value":"dav-Latn-KE"},"lrc":{"value":"lrc-Arab-IR"},"yko":{"value":"yko-Latn-ZZ"},"und-Latn-MK":{"value":"sq-Latn-MK"},"und-Latn-MM":{"value":"kac-Latn-MM"},"dbd":{"value":"dbd-Latn-ZZ"},"und-Latn-MO":{"value":"pt-Latn-MO"},"und-Latn-MA":{"value":"fr-Latn-MA"},"und-Bali":{"value":"ban-Bali-ID"},"und-Tavt":{"value":"blt-Tavt-VN"},"dbq":{"value" +:"dbq-Latn-ZZ"},"yle":{"value":"yle-Latn-ZZ"},"ylg":{"value":"ylg-Latn-ZZ"},"und-Maka":{"value":"mak-Maka-ID"},"yll":{"value":"yll-Latn-ZZ"},"udm":{"value":"udm-Cyrl-RU"},"dcc":{"value":"dcc-Arab-IN"},"yml":{"value":"yml-Latn-ZZ"},"hla":{"value":"hla-Latn-ZZ"},"und-Latn-IR":{"value":"tk-Latn-IR"},"ltg":{"value":"ltg-Latn-LV"},"und-Latn-KM":{"value":"fr-Latn-KM"},"ddn":{"value":"ddn-Latn-ZZ"},"hlu":{"value":"hlu-Hluw-TR"},"lua":{"value":"lua-Latn-CD"},"und-Bamu":{"value":"bax-Bamu-CM"},"hmd":{"value":"hmd-Plrd-CN"} +,"ded":{"value":"ded-Latn-ZZ"},"luo":{"value":"luo-Latn-KE"},"und-142":{"value":"zh-Hans-CN"},"und-143":{"value":"uz-Latn-UZ"},"den":{"value":"den-Latn-CA"},"und-Gran":{"value":"sa-Gran-IN"},"hmt":{"value":"hmt-Latn-ZZ"},"uga":{"value":"uga-Ugar-SY"},"luz":{"value":"luz-Arab-IR"},"luy":{"value":"luy-Latn-KE"},"und-145":{"value":"ar-Arab-SA"},"und-Cakm":{"value":"ccp-Cakm-BD"},"und-Dupl":{"value":"fr-Dupl-FR"},"yon":{"value":"yon-Latn-ZZ"},"ug-MN":{"value":"ug-Cyrl-MN"},"hne":{"value":"hne-Deva-IN"},"hnd":{"value" +:"hnd-Arab-PK"},"hnj":{"value":"hnj-Hmng-LA"},"hno":{"value":"hno-Arab-PK"},"hnn":{"value":"hnn-Latn-PH"},"ug-KZ":{"value":"ug-Cyrl-KZ"},"und-154":{"value":"en-Latn-GB"},"und-155":{"value":"de-Latn-DE"},"und-150":{"value":"ru-Cyrl-RU"},"und-151":{"value":"ru-Cyrl-RU"},"und-Sylo":{"value":"syl-Sylo-BD"},"hoc":{"value":"hoc-Deva-IN"},"dga":{"value":"dga-Latn-ZZ"},"lwl":{"value":"lwl-Thai-TH"},"und-Ital":{"value":"ett-Ital-IT"},"hoj":{"value":"hoj-Deva-IN"},"dgh":{"value":"dgh-Latn-ZZ"},"dgi":{"value":"dgi-Latn-ZZ"} +,"dgl":{"value":"dgl-Arab-ZZ"},"hot":{"value":"hot-Latn-ZZ"},"dgr":{"value":"dgr-Latn-CA"},"dgz":{"value":"dgz-Latn-ZZ"},"yrb":{"value":"yrb-Latn-ZZ"},"yre":{"value":"yre-Latn-ZZ"},"und-Lyci":{"value":"xlc-Lyci-TR"},"und-Cans":{"value":"cr-Cans-CA"},"und-Hluw":{"value":"hlu-Hluw-TR"},"und-Nand":{"value":"sa-Nand-IN"},"yrl":{"value":"yrl-Latn-BR"},"dia":{"value":"dia-Latn-ZZ"},"und-Grek":{"value":"el-Grek-GR"},"und-Mong":{"value":"mn-Mong-CN"},"und-Lydi":{"value":"xld-Lydi-TR"},"yss":{"value":"yss-Latn-ZZ"}, +"und-Newa":{"value":"new-Newa-NP"},"lzh":{"value":"lzh-Hans-CN"},"dje":{"value":"dje-Latn-NE"},"lzz":{"value":"lzz-Latn-TR"},"uli":{"value":"uli-Latn-FM"},"hsb":{"value":"hsb-Latn-DE"},"und-Xsux":{"value":"akk-Xsux-IQ"},"hsn":{"value":"hsn-Hans-CN"},"und-Cari":{"value":"xcr-Cari-TR"},"und-Syrc":{"value":"syr-Syrc-IQ"},"yua":{"value":"yua-Latn-MX"},"yue":{"value":"yue-Hant-HK"},"umb":{"value":"umb-Latn-AO"},"yuj":{"value":"yuj-Latn-ZZ"},"yut":{"value":"yut-Latn-ZZ"},"yuw":{"value":"yuw-Latn-ZZ"},"und-Bopo":{"value" +:"zh-Bopo-TW"},"und":{"value":"en-Latn-US"},"und-Egyp":{"value":"egy-Egyp-EG"},"und-Tglg":{"value":"fil-Tglg-PH"},"unr":{"value":"unr-Beng-IN"},"hui":{"value":"hui-Latn-ZZ"},"und-Elba":{"value":"sq-Elba-AL"},"unx":{"value":"unx-Beng-IN"},"und-Narb":{"value":"xna-Narb-SA"},"pa-PK":{"value":"pa-Arab-PK"},"und-Hebr-CA":{"value":"yi-Hebr-CA"},"und-Geor":{"value":"ka-Geor-GE"},"und-Shrd":{"value":"sa-Shrd-IN"},"dnj":{"value":"dnj-Latn-CI"},"dob":{"value":"dob-Latn-ZZ"},"und-Mymr-TH":{"value":"mnw-Mymr-TH"},"doi": +{"value":"doi-Arab-IN"},"dop":{"value":"dop-Latn-ZZ"},"und-Sund":{"value":"su-Sund-ID"},"dow":{"value":"dow-Latn-ZZ"},"sr-ME":{"value":"sr-Latn-ME"},"und-Hung":{"value":"hu-Hung-HU"},"mad":{"value":"mad-Latn-ID"},"mag":{"value":"mag-Deva-IN"},"maf":{"value":"maf-Latn-CM"},"mai":{"value":"mai-Deva-IN"},"mak":{"value":"mak-Latn-ID"},"man":{"value":"man-Latn-GM"},"mas":{"value":"mas-Latn-KE"},"maw":{"value":"maw-Latn-ZZ"},"maz":{"value":"maz-Latn-MX"},"uri":{"value":"uri-Latn-ZZ"},"mbh":{"value":"mbh-Latn-ZZ"} +,"urt":{"value":"urt-Latn-ZZ"},"mbo":{"value":"mbo-Latn-ZZ"},"urw":{"value":"urw-Latn-ZZ"},"mbq":{"value":"mbq-Latn-ZZ"},"mbu":{"value":"mbu-Latn-ZZ"},"und-Hebr-GB":{"value":"yi-Hebr-GB"},"usa":{"value":"usa-Latn-ZZ"},"mbw":{"value":"mbw-Latn-ZZ"},"mci":{"value":"mci-Latn-ZZ"},"dri":{"value":"dri-Latn-ZZ"},"mcq":{"value":"mcq-Latn-ZZ"},"mcp":{"value":"mcp-Latn-ZZ"},"mcr":{"value":"mcr-Latn-ZZ"},"mcu":{"value":"mcu-Latn-ZZ"},"drs":{"value":"drs-Ethi-ZZ"},"mda":{"value":"mda-Latn-ZZ"},"mdf":{"value":"mdf-Cyrl-RU"} +,"mde":{"value":"mde-Arab-ZZ"},"mdh":{"value":"mdh-Latn-PH"},"dsb":{"value":"dsb-Latn-DE"},"mdj":{"value":"mdj-Latn-ZZ"},"utr":{"value":"utr-Latn-ZZ"},"mdr":{"value":"mdr-Latn-ID"},"mdx":{"value":"mdx-Ethi-ZZ"},"mee":{"value":"mee-Latn-ZZ"},"med":{"value":"med-Latn-ZZ"},"mek":{"value":"mek-Latn-ZZ"},"men":{"value":"men-Latn-SL"},"az-RU":{"value":"az-Cyrl-RU"},"mis-Medf":{"value":"mis-Medf-NG"},"mer":{"value":"mer-Latn-KE"},"dtm":{"value":"dtm-Latn-ML"},"meu":{"value":"meu-Latn-ZZ"},"met":{"value":"met-Latn-ZZ"} +,"dtp":{"value":"dtp-Latn-MY"},"dts":{"value":"dts-Latn-ZZ"},"uvh":{"value":"uvh-Latn-ZZ"},"dty":{"value":"dty-Deva-NP"},"mfa":{"value":"mfa-Arab-TH"},"uvl":{"value":"uvl-Latn-ZZ"},"mfe":{"value":"mfe-Latn-MU"},"dua":{"value":"dua-Latn-CM"},"dud":{"value":"dud-Latn-ZZ"},"duc":{"value":"duc-Latn-ZZ"},"mfn":{"value":"mfn-Latn-ZZ"},"dug":{"value":"dug-Latn-ZZ"},"mfo":{"value":"mfo-Latn-ZZ"},"mfq":{"value":"mfq-Latn-ZZ"},"und-Phag":{"value":"lzh-Phag-CN"},"dva":{"value":"dva-Latn-ZZ"},"mgh":{"value":"mgh-Latn-MZ"} +,"mgl":{"value":"mgl-Latn-ZZ"},"mgo":{"value":"mgo-Latn-CM"},"mgp":{"value":"mgp-Deva-NP"},"mgy":{"value":"mgy-Latn-TZ"},"zag":{"value":"zag-Latn-SD"},"mhi":{"value":"mhi-Latn-ZZ"},"mhl":{"value":"mhl-Latn-ZZ"},"dww":{"value":"dww-Latn-ZZ"},"mif":{"value":"mif-Latn-ZZ"},"und-Mymr-IN":{"value":"kht-Mymr-IN"},"min":{"value":"min-Latn-ID"},"mis":{"value":"mis-Hatr-IQ"},"ian":{"value":"ian-Latn-ZZ"},"miw":{"value":"miw-Latn-ZZ"},"iar":{"value":"iar-Latn-ZZ"},"uz-Arab":{"value":"uz-Arab-AF"},"ibb":{"value":"ibb-Latn-NG"} +,"iba":{"value":"iba-Latn-MY"},"dyo":{"value":"dyo-Latn-SN"},"dyu":{"value":"dyu-Latn-BF"},"iby":{"value":"iby-Latn-ZZ"},"zdj":{"value":"zdj-Arab-KM"},"ica":{"value":"ica-Latn-ZZ"},"mki":{"value":"mki-Arab-ZZ"},"und-Wcho":{"value":"nnp-Wcho-IN"},"ich":{"value":"ich-Latn-ZZ"},"mkl":{"value":"mkl-Latn-ZZ"},"dzg":{"value":"dzg-Latn-ZZ"},"mkp":{"value":"mkp-Latn-ZZ"},"zea":{"value":"zea-Latn-NL"},"mkw":{"value":"mkw-Latn-ZZ"},"mle":{"value":"mle-Latn-ZZ"},"idd":{"value":"idd-Latn-ZZ"},"idi":{"value":"idi-Latn-ZZ"} +,"lif-Limb":{"value":"lif-Limb-IN"},"mlp":{"value":"mlp-Latn-ZZ"},"mls":{"value":"mls-Latn-SD"},"idu":{"value":"idu-Latn-ZZ"},"quc":{"value":"quc-Latn-GT"},"qug":{"value":"qug-Latn-EC"},"und-Jamo":{"value":"ko-Jamo-KR"},"mmo":{"value":"mmo-Latn-ZZ"},"mmu":{"value":"mmu-Latn-ZZ"},"mmx":{"value":"mmx-Latn-ZZ"},"zgh":{"value":"zgh-Tfng-MA"},"mna":{"value":"mna-Latn-ZZ"},"mnf":{"value":"mnf-Latn-ZZ"},"ife":{"value":"ife-Latn-TG"},"mni":{"value":"mni-Beng-IN"},"mnw":{"value":"mnw-Mymr-MM"},"moa":{"value":"moa-Latn-ZZ"} +,"moe":{"value":"moe-Latn-CA"},"igb":{"value":"igb-Latn-ZZ"},"ige":{"value":"ige-Latn-ZZ"},"moh":{"value":"moh-Latn-CA"},"und-Hebr-SE":{"value":"yi-Hebr-SE"},"zhx":{"value":"zhx-Nshu-CN"},"mos":{"value":"mos-Latn-BF"},"und-Shaw":{"value":"en-Shaw-GB"},"zia":{"value":"zia-Latn-ZZ"},"mox":{"value":"mox-Latn-ZZ"},"vag":{"value":"vag-Latn-ZZ"},"vai":{"value":"vai-Vaii-LR"},"van":{"value":"van-Latn-ZZ"},"mpp":{"value":"mpp-Latn-ZZ"},"mpt":{"value":"mpt-Latn-ZZ"},"mps":{"value":"mps-Latn-ZZ"},"mpx":{"value":"mpx-Latn-ZZ"} +,"und-Hebr-US":{"value":"yi-Hebr-US"},"mql":{"value":"mql-Latn-ZZ"},"und-Hebr-UA":{"value":"yi-Hebr-UA"},"mrd":{"value":"mrd-Deva-NP"},"mrj":{"value":"mrj-Cyrl-RU"},"ijj":{"value":"ijj-Latn-ZZ"},"mro":{"value":"mro-Mroo-BD"},"und-Modi":{"value":"mr-Modi-IN"},"ebu":{"value":"ebu-Latn-KE"},"zlm":{"value":"zlm-Latn-TG"},"arc-Palm":{"value":"arc-Palm-SY"},"ikk":{"value":"ikk-Latn-ZZ"},"ikt":{"value":"ikt-Latn-CA"},"ikw":{"value":"ikw-Latn-ZZ"},"vec":{"value":"vec-Latn-IT"},"ikx":{"value":"ikx-Latn-ZZ"},"zmi":{"value" +:"zmi-Latn-MY"},"mtc":{"value":"mtc-Latn-ZZ"},"mtf":{"value":"mtf-Latn-ZZ"},"vep":{"value":"vep-Latn-RU"},"zh-Bopo":{"value":"zh-Bopo-TW"},"mti":{"value":"mti-Latn-ZZ"},"und-Ethi":{"value":"am-Ethi-ET"},"mtr":{"value":"mtr-Deva-IN"},"und-Thai-LA":{"value":"kdt-Thai-LA"},"ilo":{"value":"ilo-Latn-PH"},"zne":{"value":"zne-Latn-ZZ"},"mua":{"value":"mua-Latn-CM"},"und-Thai-KH":{"value":"kdt-Thai-KH"},"imo":{"value":"imo-Latn-ZZ"},"mus":{"value":"mus-Latn-US"},"mur":{"value":"mur-Latn-ZZ"},"mva":{"value":"mva-Latn-ZZ"} +,"inh":{"value":"inh-Cyrl-RU"},"mvn":{"value":"mvn-Latn-ZZ"},"efi":{"value":"efi-Latn-NG"},"mvy":{"value":"mvy-Arab-PK"},"und-Java":{"value":"jv-Java-ID"},"mwk":{"value":"mwk-Latn-ML"},"mwr":{"value":"mwr-Deva-IN"},"und-021":{"value":"en-Latn-US"},"egl":{"value":"egl-Latn-IT"},"mww":{"value":"mww-Hmnp-US"},"mwv":{"value":"mwv-Latn-ID"},"iou":{"value":"iou-Latn-ZZ"},"und-029":{"value":"es-Latn-CU"},"vic":{"value":"vic-Latn-SX"},"egy":{"value":"egy-Egyp-EG"},"und-Ugar":{"value":"uga-Ugar-SY"},"mxc":{"value":"mxc-Latn-ZW"} +,"raj":{"value":"raj-Deva-IN"},"rai":{"value":"rai-Latn-ZZ"},"rao":{"value":"rao-Latn-ZZ"},"viv":{"value":"viv-Latn-ZZ"},"mxm":{"value":"mxm-Latn-ZZ"},"und-034":{"value":"hi-Deva-IN"},"und-030":{"value":"zh-Hans-CN"},"und-039":{"value":"it-Latn-IT"},"und-035":{"value":"id-Latn-ID"},"ug-Cyrl":{"value":"ug-Cyrl-KZ"},"myk":{"value":"myk-Latn-ZZ"},"mym":{"value":"mym-Ethi-ZZ"},"aai":{"value":"aai-Latn-ZZ"},"aak":{"value":"aak-Latn-ZZ"},"myw":{"value":"myw-Latn-ZZ"},"myv":{"value":"myv-Cyrl-RU"},"myx":{"value":"myx-Latn-UG"} +,"myz":{"value":"myz-Mand-IR"},"und-Sinh":{"value":"si-Sinh-LK"},"und-Sind":{"value":"sd-Sind-IN"},"aau":{"value":"aau-Latn-ZZ"},"rcf":{"value":"rcf-Latn-RE"},"und-Orkh":{"value":"otk-Orkh-MN"},"mzk":{"value":"mzk-Latn-ZZ"},"mzn":{"value":"mzn-Arab-IR"},"iri":{"value":"iri-Latn-ZZ"},"mzm":{"value":"mzm-Latn-ZZ"},"mzp":{"value":"mzp-Latn-ZZ"},"und-053":{"value":"en-Latn-AU"},"abi":{"value":"abi-Latn-ZZ"},"und-054":{"value":"en-Latn-PG"},"mzw":{"value":"mzw-Latn-ZZ"},"mzz":{"value":"mzz-Latn-ZZ"},"abr":{"value" +:"abr-Latn-GH"},"abq":{"value":"abq-Cyrl-ZZ"},"abt":{"value":"abt-Latn-ZZ"},"und-057":{"value":"en-Latn-GU"},"aby":{"value":"aby-Latn-ZZ"},"eka":{"value":"eka-Latn-ZZ"},"vls":{"value":"vls-Latn-BE"},"ace":{"value":"ace-Latn-ID"},"acd":{"value":"acd-Latn-ZZ"},"ach":{"value":"ach-Latn-UG"},"vmf":{"value":"vmf-Latn-DE"},"eky":{"value":"eky-Kali-MM"},"rej":{"value":"rej-Latn-ID"},"rel":{"value":"rel-Latn-ZZ"},"ada":{"value":"ada-Latn-GH"},"res":{"value":"res-Latn-ZZ"},"vmw":{"value":"vmw-Latn-MZ"},"ade":{"value" +:"ade-Latn-ZZ"},"adj":{"value":"adj-Latn-ZZ"},"und-Hira":{"value":"ja-Hira-JP"},"adz":{"value":"adz-Latn-ZZ"},"ady":{"value":"ady-Cyrl-RU"},"ema":{"value":"ema-Latn-ZZ"},"und-Deva":{"value":"hi-Deva-IN"},"aeb":{"value":"aeb-Arab-TN"},"emi":{"value":"emi-Latn-ZZ"},"und-009":{"value":"en-Latn-AU"},"aey":{"value":"aey-Latn-ZZ"},"und-002":{"value":"en-Latn-NG"},"und-003":{"value":"en-Latn-US"},"und-005":{"value":"pt-Latn-BR"},"rgn":{"value":"rgn-Latn-IT"},"vot":{"value":"vot-Latn-RU"},"enn":{"value":"enn-Latn-ZZ"} +,"enq":{"value":"enq-Latn-ZZ"},"und-011":{"value":"en-Latn-NG"},"rhg":{"value":"rhg-Arab-MM"},"und-017":{"value":"sw-Latn-CD"},"und-018":{"value":"en-Latn-ZA"},"und-019":{"value":"en-Latn-US"},"und-013":{"value":"es-Latn-MX"},"und-014":{"value":"sw-Latn-TZ"},"und-015":{"value":"ar-Arab-EG"},"agc":{"value":"agc-Latn-ZZ"},"und-Zanb":{"value":"cmg-Zanb-MN"},"iwm":{"value":"iwm-Latn-ZZ"},"agd":{"value":"agd-Latn-ZZ"},"agg":{"value":"agg-Latn-ZZ"},"iws":{"value":"iws-Latn-ZZ"},"agm":{"value":"agm-Latn-ZZ"},"ago": +{"value":"ago-Latn-ZZ"},"agq":{"value":"agq-Latn-CM"},"ria":{"value":"ria-Latn-IN"},"rif":{"value":"rif-Tfng-MA"},"nac":{"value":"nac-Latn-ZZ"},"naf":{"value":"naf-Latn-ZZ"},"nak":{"value":"nak-Latn-ZZ"},"nan":{"value":"nan-Hans-CN"},"aha":{"value":"aha-Latn-ZZ"},"nap":{"value":"nap-Latn-IT"},"naq":{"value":"naq-Latn-NA"},"zza":{"value":"zza-Latn-TR"},"nas":{"value":"nas-Latn-ZZ"},"ahl":{"value":"ahl-Latn-ZZ"},"en-Shaw":{"value":"en-Shaw-GB"},"und-Copt":{"value":"cop-Copt-EG"},"aho":{"value":"aho-Ahom-IN"}, +"vro":{"value":"vro-Latn-EE"},"rjs":{"value":"rjs-Deva-NP"},"nca":{"value":"nca-Latn-ZZ"},"ncf":{"value":"ncf-Latn-ZZ"},"nce":{"value":"nce-Latn-ZZ"},"nch":{"value":"nch-Latn-MX"},"izh":{"value":"izh-Latn-RU"},"izi":{"value":"izi-Latn-ZZ"},"rkt":{"value":"rkt-Beng-BD"},"nco":{"value":"nco-Latn-ZZ"},"eri":{"value":"eri-Latn-ZZ"},"ajg":{"value":"ajg-Latn-ZZ"},"ncu":{"value":"ncu-Latn-ZZ"},"ndc":{"value":"ndc-Latn-MZ"},"esg":{"value":"esg-Gonm-IN"},"nds":{"value":"nds-Latn-DE"},"akk":{"value":"akk-Xsux-IQ"},"esu": +{"value":"esu-Latn-US"},"neb":{"value":"neb-Latn-ZZ"},"rmf":{"value":"rmf-Latn-FI"},"und-061":{"value":"sm-Latn-WS"},"und-Limb":{"value":"lif-Limb-IN"},"vun":{"value":"vun-Latn-TZ"},"ff-Adlm":{"value":"ff-Adlm-GN"},"vut":{"value":"vut-Latn-ZZ"},"rmo":{"value":"rmo-Latn-CH"},"ala":{"value":"ala-Latn-ZZ"},"rmt":{"value":"rmt-Arab-IR"},"rmu":{"value":"rmu-Latn-SE"},"ali":{"value":"ali-Latn-ZZ"},"nex":{"value":"nex-Latn-ZZ"},"new":{"value":"new-Deva-NP"},"aln":{"value":"aln-Latn-XK"},"etr":{"value":"etr-Latn-ZZ"} +,"und-Rohg":{"value":"rhg-Rohg-MM"},"ett":{"value":"ett-Ital-IT"},"rna":{"value":"rna-Latn-ZZ"},"etu":{"value":"etu-Latn-ZZ"},"alt":{"value":"alt-Cyrl-RU"},"etx":{"value":"etx-Latn-ZZ"},"rng":{"value":"rng-Latn-MZ"},"und-Linb":{"value":"grc-Linb-GR"},"und-Lina":{"value":"lab-Lina-GR"},"und-Jpan":{"value":"ja-Jpan-JP"},"man-GN":{"value":"man-Nkoo-GN"},"nfr":{"value":"nfr-Latn-ZZ"},"amm":{"value":"amm-Latn-ZZ"},"und-Arab":{"value":"ar-Arab-EG"},"amo":{"value":"amo-Latn-NG"},"amn":{"value":"amn-Latn-ZZ"},"rob": +{"value":"rob-Latn-ID"},"amp":{"value":"amp-Latn-ZZ"},"ngb":{"value":"ngb-Latn-ZZ"},"rof":{"value":"rof-Latn-TZ"},"nga":{"value":"nga-Latn-ZZ"},"ngl":{"value":"ngl-Latn-MZ"},"roo":{"value":"roo-Latn-ZZ"},"anc":{"value":"anc-Latn-ZZ"},"ank":{"value":"ank-Latn-ZZ"},"ann":{"value":"ann-Latn-ZZ"},"und-Bhks":{"value":"sa-Bhks-IN"},"nhb":{"value":"nhb-Latn-ZZ"},"nhe":{"value":"nhe-Latn-MX"},"any":{"value":"any-Latn-ZZ"},"und-Orya":{"value":"or-Orya-IN"},"ewo":{"value":"ewo-Latn-CM"},"nhw":{"value":"nhw-Latn-MX"}, +"aoj":{"value":"aoj-Latn-ZZ"},"aom":{"value":"aom-Latn-ZZ"},"zh-Hanb":{"value":"zh-Hanb-TW"},"jab":{"value":"jab-Latn-ZZ"},"nif":{"value":"nif-Latn-ZZ"},"aoz":{"value":"aoz-Latn-ID"},"nij":{"value":"nij-Latn-ID"},"nii":{"value":"nii-Latn-ZZ"},"zh-PH":{"value":"zh-Hant-PH"},"nin":{"value":"nin-Latn-ZZ"},"zh-Hant":{"value":"zh-Hant-TW"},"zh-PF":{"value":"zh-Hant-PF"},"und-Ahom":{"value":"aho-Ahom-IN"},"apd":{"value":"apd-Arab-TG"},"apc":{"value":"apc-Arab-ZZ"},"ape":{"value":"ape-Latn-ZZ"},"jam":{"value":"jam-Latn-JM"} +,"zh-PA":{"value":"zh-Hant-PA"},"niu":{"value":"niu-Latn-NU"},"niz":{"value":"niz-Latn-ZZ"},"niy":{"value":"niy-Latn-ZZ"},"ext":{"value":"ext-Latn-ES"},"apr":{"value":"apr-Latn-ZZ"},"aps":{"value":"aps-Latn-ZZ"},"apz":{"value":"apz-Latn-ZZ"},"rro":{"value":"rro-Latn-ZZ"},"njo":{"value":"njo-Latn-IN"},"jbo":{"value":"jbo-Latn-001"},"jbu":{"value":"jbu-Latn-ZZ"},"zh-MO":{"value":"zh-Hant-MO"},"nkg":{"value":"nkg-Latn-ZZ"},"zh-MY":{"value":"zh-Hant-MY"},"arc":{"value":"arc-Armi-IR"},"nko":{"value":"nko-Latn-ZZ"} +,"arh":{"value":"arh-Latn-ZZ"},"pa-Arab":{"value":"pa-Arab-PK"},"und-Mtei":{"value":"mni-Mtei-IN"},"arn":{"value":"arn-Latn-CL"},"aro":{"value":"aro-Latn-BO"},"und-Cyrl-RO":{"value":"bg-Cyrl-RO"},"arq":{"value":"arq-Arab-DZ"},"arz":{"value":"arz-Arab-EG"},"ary":{"value":"ary-Arab-MA"},"rtm":{"value":"rtm-Latn-FJ"},"asa":{"value":"asa-Latn-TZ"},"und-Grek-TR":{"value":"bgx-Grek-TR"},"ase":{"value":"ase-Sgnw-US"},"asg":{"value":"asg-Latn-ZZ"},"aso":{"value":"aso-Latn-ZZ"},"ast":{"value":"ast-Latn-ES"},"rue":{"value" +:"rue-Cyrl-UA"},"rug":{"value":"rug-Latn-SB"},"nmg":{"value":"nmg-Latn-CM"},"ata":{"value":"ata-Latn-ZZ"},"jen":{"value":"jen-Latn-ZZ"},"atg":{"value":"atg-Latn-ZZ"},"atj":{"value":"atj-Latn-CA"},"nmz":{"value":"nmz-Latn-ZZ"},"unr-Deva":{"value":"unr-Deva-NP"},"nnf":{"value":"nnf-Latn-ZZ"},"nnh":{"value":"nnh-Latn-CM"},"nnk":{"value":"nnk-Latn-ZZ"},"nnm":{"value":"nnm-Latn-ZZ"},"nnp":{"value":"nnp-Wcho-IN"},"az-IR":{"value":"az-Arab-IR"},"und-Adlm":{"value":"ff-Adlm-GN"},"az-IQ":{"value":"az-Arab-IQ"},"und-Nbat": +{"value":"arc-Nbat-JO"},"sd-Khoj":{"value":"sd-Khoj-IN"},"nod":{"value":"nod-Lana-TH"},"auy":{"value":"auy-Latn-ZZ"},"noe":{"value":"noe-Deva-IN"},"rwk":{"value":"rwk-Latn-TZ"},"und-Cyrl-MD":{"value":"uk-Cyrl-MD"},"rwo":{"value":"rwo-Latn-ZZ"},"non":{"value":"non-Runr-SE"},"nop":{"value":"nop-Latn-ZZ"},"jgk":{"value":"jgk-Latn-ZZ"},"jgo":{"value":"jgo-Latn-CM"},"und-Vaii":{"value":"vai-Vaii-LR"},"nou":{"value":"nou-Latn-ZZ"},"avl":{"value":"avl-Arab-ZZ"},"avn":{"value":"avn-Latn-ZZ"},"wae":{"value":"wae-Latn-CH"} +,"avt":{"value":"avt-Latn-ZZ"},"avu":{"value":"avu-Latn-ZZ"},"waj":{"value":"waj-Latn-ZZ"},"wal":{"value":"wal-Ethi-ET"},"wan":{"value":"wan-Latn-ZZ"},"zh-HK":{"value":"zh-Hant-HK"},"war":{"value":"war-Latn-PH"},"awa":{"value":"awa-Deva-IN"},"und-Plrd":{"value":"hmd-Plrd-CN"},"awb":{"value":"awb-Latn-ZZ"},"awo":{"value":"awo-Latn-ZZ"},"und-Knda":{"value":"kn-Knda-IN"},"zh-ID":{"value":"zh-Hant-ID"},"jib":{"value":"jib-Latn-ZZ"},"awx":{"value":"awx-Latn-ZZ"},"wbp":{"value":"wbp-Latn-AU"},"und-Sidd":{"value": +"sa-Sidd-IN"},"fab":{"value":"fab-Latn-ZZ"},"wbr":{"value":"wbr-Deva-IN"},"faa":{"value":"faa-Latn-ZZ"},"wbq":{"value":"wbq-Telu-IN"},"und-Kali":{"value":"eky-Kali-MM"},"fag":{"value":"fag-Latn-ZZ"},"nqo":{"value":"nqo-Nkoo-GN"},"fai":{"value":"fai-Latn-ZZ"},"ryu":{"value":"ryu-Kana-JP"},"fan":{"value":"fan-Latn-GQ"},"wci":{"value":"wci-Latn-ZZ"},"nrb":{"value":"nrb-Latn-ZZ"},"und-Phlp":{"value":"pal-Phlp-CN"},"ayb":{"value":"ayb-Latn-ZZ"},"und-Phli":{"value":"pal-Phli-IR"},"cu-Glag":{"value":"cu-Glag-BG"}, +"und-Cyrl-XK":{"value":"sr-Cyrl-XK"},"az-Arab":{"value":"az-Arab-IR"},"und-Thai":{"value":"th-Thai-TH"},"nsk":{"value":"nsk-Cans-CA"},"nsn":{"value":"nsn-Latn-ZZ"},"nso":{"value":"nso-Latn-ZA"},"und-Thaa":{"value":"dv-Thaa-MV"},"und-Nshu":{"value":"zhx-Nshu-CN"},"nss":{"value":"nss-Latn-ZZ"},"zh-VN":{"value":"zh-Hant-VN"},"und-Hmnp":{"value":"mww-Hmnp-US"},"und-Kana":{"value":"ja-Kana-JP"},"und-Hmng":{"value":"hnj-Hmng-LA"},"wer":{"value":"wer-Latn-ZZ"},"zh-TW":{"value":"zh-Hant-TW"},"ntm":{"value":"ntm-Latn-ZZ"} +,"ntr":{"value":"ntr-Latn-ZZ"},"zh-US":{"value":"zh-Hant-US"},"und-Xpeo":{"value":"peo-Xpeo-IR"},"jmc":{"value":"jmc-Latn-TZ"},"nui":{"value":"nui-Latn-ZZ"},"jml":{"value":"jml-Deva-NP"},"nup":{"value":"nup-Latn-ZZ"},"und-Cyrl-SK":{"value":"uk-Cyrl-SK"},"nus":{"value":"nus-Latn-SS"},"nuv":{"value":"nuv-Latn-ZZ"},"nux":{"value":"nux-Latn-ZZ"},"zh-TH":{"value":"zh-Hant-TH"},"wgi":{"value":"wgi-Latn-ZZ"},"und-Phnx":{"value":"phn-Phnx-LB"},"und-Cyrl-TR":{"value":"kbd-Cyrl-TR"},"ffi":{"value":"ffi-Latn-ZZ"},"und-Elym": +{"value":"arc-Elym-IR"},"ffm":{"value":"ffm-Latn-ML"},"und-Rjng":{"value":"rej-Rjng-ID"},"whg":{"value":"whg-Latn-ZZ"},"nwb":{"value":"nwb-Latn-ZZ"},"zh-SR":{"value":"zh-Hant-SR"},"wib":{"value":"wib-Latn-ZZ"},"und-Hebr":{"value":"he-Hebr-IL"},"saf":{"value":"saf-Latn-GH"},"sah":{"value":"sah-Cyrl-RU"},"saq":{"value":"saq-Latn-KE"},"wiu":{"value":"wiu-Latn-ZZ"},"sas":{"value":"sas-Latn-ID"},"wiv":{"value":"wiv-Latn-ZZ"},"nxq":{"value":"nxq-Latn-CN"},"sat":{"value":"sat-Latn-IN"},"nxr":{"value":"nxr-Latn-ZZ"} +,"sav":{"value":"sav-Latn-SN"},"saz":{"value":"saz-Saur-IN"},"wja":{"value":"wja-Latn-ZZ"},"sba":{"value":"sba-Latn-ZZ"},"sbe":{"value":"sbe-Latn-ZZ"},"wji":{"value":"wji-Latn-ZZ"},"mn-Mong":{"value":"mn-Mong-CN"},"und-419":{"value":"es-Latn-419"},"fia":{"value":"fia-Arab-SD"},"sbp":{"value":"sbp-Latn-TZ"},"und-NO":{"value":"nb-Latn-NO"},"nyn":{"value":"nyn-Latn-UG"},"nym":{"value":"nym-Latn-TZ"},"und-NL":{"value":"nl-Latn-NL"},"und-NP":{"value":"ne-Deva-NP"},"fil":{"value":"fil-Latn-PH"},"bal":{"value":"bal-Arab-PK"} +,"ban":{"value":"ban-Latn-ID"},"bap":{"value":"bap-Deva-NP"},"fit":{"value":"fit-Latn-SE"},"bar":{"value":"bar-Latn-AT"},"bas":{"value":"bas-Latn-CM"},"bav":{"value":"bav-Latn-ZZ"},"bax":{"value":"bax-Bamu-CM"},"jra":{"value":"jra-Latn-ZZ"},"sck":{"value":"sck-Deva-IN"},"nzi":{"value":"nzi-Latn-GH"},"scl":{"value":"scl-Arab-ZZ"},"sco":{"value":"sco-Latn-GB"},"scn":{"value":"scn-Latn-IT"},"aa":{"value":"aa-Latn-ET"},"bba":{"value":"bba-Latn-ZZ"},"und-MN":{"value":"mn-Cyrl-MN"},"ab":{"value":"ab-Cyrl-GE"},"und-MM": +{"value":"my-Mymr-MM"},"und-Osma":{"value":"so-Osma-SO"},"bbc":{"value":"bbc-Latn-ID"},"scs":{"value":"scs-Latn-CA"},"und-ML":{"value":"bm-Latn-ML"},"bbb":{"value":"bbb-Latn-ZZ"},"und-MK":{"value":"mk-Cyrl-MK"},"ae":{"value":"ae-Avst-IR"},"und-MR":{"value":"ar-Arab-MR"},"af":{"value":"af-Latn-ZA"},"bbd":{"value":"bbd-Latn-ZZ"},"und-MQ":{"value":"fr-Latn-MQ"},"und-Wara":{"value":"hoc-Wara-IN"},"und-MO":{"value":"zh-Hant-MO"},"und-MV":{"value":"dv-Thaa-MV"},"und-MU":{"value":"mfe-Latn-MU"},"ak":{"value":"ak-Latn-GH"} +,"und-MT":{"value":"mt-Latn-MT"},"bbj":{"value":"bbj-Latn-CM"},"am":{"value":"am-Ethi-ET"},"und-MZ":{"value":"pt-Latn-MZ"},"und-MY":{"value":"ms-Latn-MY"},"und-MX":{"value":"es-Latn-MX"},"ar":{"value":"ar-Arab-EG"},"bbp":{"value":"bbp-Latn-ZZ"},"as":{"value":"as-Beng-IN"},"bbr":{"value":"bbr-Latn-ZZ"},"sdc":{"value":"sdc-Latn-IT"},"und-NC":{"value":"fr-Latn-NC"},"av":{"value":"av-Cyrl-RU"},"sdh":{"value":"sdh-Arab-IR"},"und-NA":{"value":"af-Latn-NA"},"ay":{"value":"ay-Latn-BO"},"az":{"value":"az-Latn-AZ"},"und-NE": +{"value":"ha-Latn-NE"},"und-NI":{"value":"es-Latn-NI"},"ba":{"value":"ba-Cyrl-RU"},"wls":{"value":"wls-Latn-WF"},"und-Kore":{"value":"ko-Kore-KR"},"und-LK":{"value":"si-Sinh-LK"},"be":{"value":"be-Cyrl-BY"},"bcf":{"value":"bcf-Latn-ZZ"},"bg":{"value":"bg-Cyrl-BG"},"bch":{"value":"bch-Latn-ZZ"},"bi":{"value":"bi-Latn-VU"},"und-LU":{"value":"fr-Latn-LU"},"bci":{"value":"bci-Latn-CI"},"und-LT":{"value":"lt-Latn-LT"},"und-LS":{"value":"st-Latn-LS"},"bm":{"value":"bm-Latn-ML"},"bcn":{"value":"bcn-Latn-ZZ"},"bn": +{"value":"bn-Beng-BD"},"und-LY":{"value":"ar-Arab-LY"},"bcm":{"value":"bcm-Latn-ZZ"},"bo":{"value":"bo-Tibt-CN"},"bco":{"value":"bco-Latn-ZZ"},"und-LV":{"value":"lv-Latn-LV"},"br":{"value":"br-Latn-FR"},"bcq":{"value":"bcq-Ethi-ZZ"},"bs":{"value":"bs-Latn-BA"},"bcu":{"value":"bcu-Latn-ZZ"},"sef":{"value":"sef-Latn-CI"},"und-MA":{"value":"ar-Arab-MA"},"sei":{"value":"sei-Latn-MX"},"seh":{"value":"seh-Latn-MZ"},"und-MF":{"value":"fr-Latn-MF"},"wmo":{"value":"wmo-Latn-ZZ"},"und-ME":{"value":"sr-Latn-ME"},"und-MD": +{"value":"ro-Latn-MD"},"und-MC":{"value":"fr-Latn-MC"},"ca":{"value":"ca-Latn-ES"},"und-MG":{"value":"mg-Latn-MG"},"ses":{"value":"ses-Latn-ML"},"ce":{"value":"ce-Cyrl-RU"},"und-Cyrl-BA":{"value":"sr-Cyrl-BA"},"bdd":{"value":"bdd-Latn-ZZ"},"und-KP":{"value":"ko-Kore-KP"},"ch":{"value":"ch-Latn-GU"},"und-KM":{"value":"ar-Arab-KM"},"und-KR":{"value":"ko-Kore-KR"},"co":{"value":"co-Latn-FR"},"flr":{"value":"flr-Latn-ZZ"},"und-KW":{"value":"ar-Arab-KW"},"wnc":{"value":"wnc-Latn-ZZ"},"und-Dogr":{"value":"doi-Dogr-IN"} +,"cr":{"value":"cr-Cans-CA"},"cs":{"value":"cs-Latn-CZ"},"cu":{"value":"cu-Cyrl-RU"},"und-KZ":{"value":"ru-Cyrl-KZ"},"cv":{"value":"cv-Cyrl-RU"},"wni":{"value":"wni-Arab-KM"},"und-LA":{"value":"lo-Laoo-LA"},"cy":{"value":"cy-Latn-GB"},"und-LB":{"value":"ar-Arab-LB"},"und-LI":{"value":"de-Latn-LI"},"da":{"value":"da-Latn-DK"},"und-Cyrl-AL":{"value":"mk-Cyrl-AL"},"wnu":{"value":"wnu-Latn-ZZ"},"de":{"value":"de-Latn-DE"},"bef":{"value":"bef-Latn-ZZ"},"beh":{"value":"beh-Latn-ZZ"},"und-JO":{"value":"ar-Arab-JO"} +,"bej":{"value":"bej-Arab-SD"},"fmp":{"value":"fmp-Latn-ZZ"},"jut":{"value":"jut-Latn-DK"},"bem":{"value":"bem-Latn-ZM"},"und-JP":{"value":"ja-Jpan-JP"},"wob":{"value":"wob-Latn-ZZ"},"sga":{"value":"sga-Ogam-IE"},"bet":{"value":"bet-Latn-ZZ"},"dv":{"value":"dv-Thaa-MV"},"bex":{"value":"bex-Latn-ZZ"},"bew":{"value":"bew-Latn-ID"},"bez":{"value":"bez-Latn-TZ"},"dz":{"value":"dz-Tibt-BT"},"ms-ID":{"value":"ms-Arab-ID"},"wos":{"value":"wos-Latn-ZZ"},"und-KH":{"value":"km-Khmr-KH"},"und-KG":{"value":"ky-Cyrl-KG"} +,"sgs":{"value":"sgs-Latn-LT"},"und-KE":{"value":"sw-Latn-KE"},"ee":{"value":"ee-Latn-GH"},"bfd":{"value":"bfd-Latn-CM"},"sgw":{"value":"sgw-Ethi-ZZ"},"und-IN":{"value":"hi-Deva-IN"},"und-IL":{"value":"he-Hebr-IL"},"el":{"value":"el-Grek-GR"},"sgz":{"value":"sgz-Latn-ZZ"},"und-IR":{"value":"fa-Arab-IR"},"en":{"value":"en-Latn-US"},"und-IQ":{"value":"ar-Arab-IQ"},"und-Perm":{"value":"kv-Perm-RU"},"eo":{"value":"eo-Latn-001"},"bfq":{"value":"bfq-Taml-IN"},"es":{"value":"es-Latn-ES"},"und-IT":{"value":"it-Latn-IT"} +,"et":{"value":"et-Latn-EE"},"und-IS":{"value":"is-Latn-IS"},"eu":{"value":"eu-Latn-ES"},"bft":{"value":"bft-Arab-PK"},"bfy":{"value":"bfy-Deva-IN"},"shi":{"value":"shi-Tfng-MA"},"shk":{"value":"shk-Latn-ZZ"},"shn":{"value":"shn-Mymr-MM"},"fod":{"value":"fod-Latn-ZZ"},"fa":{"value":"fa-Arab-IR"},"bgc":{"value":"bgc-Deva-IN"},"ff":{"value":"ff-Latn-SN"},"shu":{"value":"shu-Arab-ZZ"},"fi":{"value":"fi-Latn-FI"},"fj":{"value":"fj-Latn-FJ"},"fon":{"value":"fon-Latn-BJ"},"und-HM":{"value":"und-Latn-HM"},"und-HK": +{"value":"zh-Hant-HK"},"bgn":{"value":"bgn-Arab-PK"},"for":{"value":"for-Latn-ZZ"},"fo":{"value":"fo-Latn-FO"},"und-HN":{"value":"es-Latn-HN"},"fr":{"value":"fr-Latn-FR"},"und-HU":{"value":"hu-Latn-HU"},"und-HT":{"value":"ht-Latn-HT"},"ku-Arab":{"value":"ku-Arab-IQ"},"sid":{"value":"sid-Latn-ET"},"und-HR":{"value":"hr-Latn-HR"},"sig":{"value":"sig-Latn-ZZ"},"bgx":{"value":"bgx-Grek-TR"},"fy":{"value":"fy-Latn-NL"},"sim":{"value":"sim-Latn-ZZ"},"sil":{"value":"sil-Latn-ZZ"},"fpe":{"value":"fpe-Latn-ZZ"},"ga": +{"value":"ga-Latn-IE"},"bhb":{"value":"bhb-Deva-IN"},"gd":{"value":"gd-Latn-GB"},"und-ID":{"value":"id-Latn-ID"},"und-IC":{"value":"es-Latn-IC"},"bhg":{"value":"bhg-Latn-ZZ"},"und-GH":{"value":"ak-Latn-GH"},"bhi":{"value":"bhi-Deva-IN"},"und-GF":{"value":"fr-Latn-GF"},"und-GE":{"value":"ka-Geor-GE"},"bhk":{"value":"bhk-Latn-PH"},"und-GL":{"value":"kl-Latn-GL"},"gl":{"value":"gl-Latn-ES"},"bhl":{"value":"bhl-Latn-ZZ"},"gn":{"value":"gn-Latn-PY"},"bho":{"value":"bho-Deva-IN"},"und-GP":{"value":"fr-Latn-GP"},"und-GN": +{"value":"fr-Latn-GN"},"und-GT":{"value":"es-Latn-GT"},"und-GS":{"value":"und-Latn-GS"},"gu":{"value":"gu-Gujr-IN"},"und-GR":{"value":"el-Grek-GR"},"gv":{"value":"gv-Latn-IM"},"und-GQ":{"value":"es-Latn-GQ"},"und-Palm":{"value":"arc-Palm-SY"},"und-GW":{"value":"pt-Latn-GW"},"bhy":{"value":"bhy-Latn-ZZ"},"ha":{"value":"ha-Latn-NG"},"wrs":{"value":"wrs-Latn-ZZ"},"bib":{"value":"bib-Latn-ZZ"},"sjr":{"value":"sjr-Latn-ZZ"},"he":{"value":"he-Hebr-IL"},"big":{"value":"big-Latn-ZZ"},"hi":{"value":"hi-Deva-IN"},"und-Cyrl-GE": +{"value":"ab-Cyrl-GE"},"bik":{"value":"bik-Latn-PH"},"bin":{"value":"bin-Latn-NG"},"und-Cham":{"value":"cjm-Cham-VN"},"und-FI":{"value":"fi-Latn-FI"},"bim":{"value":"bim-Latn-ZZ"},"ho":{"value":"ho-Latn-PG"},"tg-PK":{"value":"tg-Arab-PK"},"und-FO":{"value":"fo-Latn-FO"},"bio":{"value":"bio-Latn-ZZ"},"fqs":{"value":"fqs-Latn-ZZ"},"hr":{"value":"hr-Latn-HR"},"skc":{"value":"skc-Latn-ZZ"},"wsg":{"value":"wsg-Gong-IN"},"biq":{"value":"biq-Latn-ZZ"},"ht":{"value":"ht-Latn-HT"},"hu":{"value":"hu-Latn-HU"},"und-FR": +{"value":"fr-Latn-FR"},"wsk":{"value":"wsk-Latn-ZZ"},"hy":{"value":"hy-Armn-AM"},"hz":{"value":"hz-Latn-NA"},"frc":{"value":"frc-Latn-US"},"ia":{"value":"ia-Latn-001"},"sks":{"value":"sks-Latn-ZZ"},"id":{"value":"id-Latn-ID"},"skr":{"value":"skr-Arab-PK"},"ig":{"value":"ig-Latn-NG"},"und-GA":{"value":"fr-Latn-GA"},"bji":{"value":"bji-Ethi-ZZ"},"ii":{"value":"ii-Yiii-CN"},"bjh":{"value":"bjh-Latn-ZZ"},"und-EE":{"value":"et-Latn-EE"},"ik":{"value":"ik-Latn-US"},"bjj":{"value":"bjj-Deva-IN"},"und-EC":{"value": +"es-Latn-EC"},"und-Cprt":{"value":"grc-Cprt-CY"},"frp":{"value":"frp-Latn-FR"},"in":{"value":"in-Latn-ID"},"bjo":{"value":"bjo-Latn-ZZ"},"frs":{"value":"frs-Latn-DE"},"io":{"value":"io-Latn-001"},"und-EH":{"value":"ar-Arab-EH"},"bjn":{"value":"bjn-Latn-ID"},"frr":{"value":"frr-Latn-DE"},"und-EG":{"value":"ar-Arab-EG"},"is":{"value":"is-Latn-IS"},"sld":{"value":"sld-Latn-ZZ"},"bjr":{"value":"bjr-Latn-ZZ"},"it":{"value":"it-Latn-IT"},"iu":{"value":"iu-Cans-CA"},"und-ER":{"value":"ti-Ethi-ER"},"bjt":{"value":"bjt-Latn-SN"} +,"iw":{"value":"iw-Hebr-IL"},"und-Tirh":{"value":"mai-Tirh-IN"},"sli":{"value":"sli-Latn-PL"},"und-EU":{"value":"en-Latn-GB"},"wtm":{"value":"wtm-Deva-IN"},"sll":{"value":"sll-Latn-ZZ"},"und-ET":{"value":"am-Ethi-ET"},"bjz":{"value":"bjz-Latn-ZZ"},"und-ES":{"value":"es-Latn-ES"},"und-EZ":{"value":"de-Latn-EZ"},"ja":{"value":"ja-Jpan-JP"},"zh-GF":{"value":"zh-Hant-GF"},"bkc":{"value":"bkc-Latn-ZZ"},"zh-GB":{"value":"zh-Hant-GB"},"und-Cyrl-GR":{"value":"mk-Cyrl-GR"},"ji":{"value":"ji-Hebr-UA"},"und-DE":{"value" +:"de-Latn-DE"},"sly":{"value":"sly-Latn-ID"},"bkm":{"value":"bkm-Latn-CM"},"sma":{"value":"sma-Latn-SE"},"bkq":{"value":"bkq-Latn-ZZ"},"und-DK":{"value":"da-Latn-DK"},"und-DJ":{"value":"aa-Latn-DJ"},"bkv":{"value":"bkv-Latn-ZZ"},"jv":{"value":"jv-Latn-ID"},"bku":{"value":"bku-Latn-PH"},"jw":{"value":"jw-Latn-ID"},"und-DO":{"value":"es-Latn-DO"},"smj":{"value":"smj-Latn-SE"},"smn":{"value":"smn-Latn-FI"},"ka":{"value":"ka-Geor-GE"},"smq":{"value":"smq-Latn-ZZ"},"wuu":{"value":"wuu-Hans-CN"},"smp":{"value":"smp-Samr-IL"} +,"sms":{"value":"sms-Latn-FI"},"wuv":{"value":"wuv-Latn-ZZ"},"und-DZ":{"value":"ar-Arab-DZ"},"kg":{"value":"kg-Latn-CD"},"und-EA":{"value":"es-Latn-EA"},"ki":{"value":"ki-Latn-KE"},"kj":{"value":"kj-Latn-NA"},"kk":{"value":"kk-Cyrl-KZ"},"man-Nkoo":{"value":"man-Nkoo-GN"},"und-CD":{"value":"sw-Latn-CD"},"kl":{"value":"kl-Latn-GL"},"und-Telu":{"value":"te-Telu-IN"},"km":{"value":"km-Khmr-KH"},"kn":{"value":"kn-Knda-IN"},"ko":{"value":"ko-Kore-KR"},"und-CH":{"value":"de-Latn-CH"},"und-CG":{"value":"fr-Latn-CG"} +,"und-CF":{"value":"fr-Latn-CF"},"kr":{"value":"kr-Latn-ZZ"},"ks":{"value":"ks-Arab-IN"},"und-CL":{"value":"es-Latn-CL"},"snc":{"value":"snc-Latn-ZZ"},"ku":{"value":"ku-Latn-TR"},"blt":{"value":"blt-Tavt-VN"},"kv":{"value":"kv-Cyrl-RU"},"und-CI":{"value":"fr-Latn-CI"},"kw":{"value":"kw-Latn-GB"},"und-CP":{"value":"und-Latn-CP"},"und-CO":{"value":"es-Latn-CO"},"ky":{"value":"ky-Cyrl-KG"},"und-CN":{"value":"zh-Hans-CN"},"und-CM":{"value":"fr-Latn-CM"},"snk":{"value":"snk-Latn-ML"},"fub":{"value":"fub-Arab-CM"} +,"und-CR":{"value":"es-Latn-CR"},"fud":{"value":"fud-Latn-WF"},"snp":{"value":"snp-Latn-ZZ"},"la":{"value":"la-Latn-VA"},"und-CW":{"value":"pap-Latn-CW"},"fuf":{"value":"fuf-Latn-GN"},"lb":{"value":"lb-Latn-LU"},"und-CV":{"value":"pt-Latn-CV"},"fue":{"value":"fue-Latn-ZZ"},"und-CU":{"value":"es-Latn-CU"},"fuh":{"value":"fuh-Latn-ZZ"},"und-CZ":{"value":"cs-Latn-CZ"},"lg":{"value":"lg-Latn-UG"},"und-CY":{"value":"el-Grek-CY"},"bmh":{"value":"bmh-Latn-ZZ"},"snx":{"value":"snx-Latn-ZZ"},"li":{"value":"li-Latn-NL"} +,"sny":{"value":"sny-Latn-ZZ"},"wwa":{"value":"wwa-Latn-ZZ"},"bmk":{"value":"bmk-Latn-ZZ"},"und-Cher":{"value":"chr-Cher-US"},"fur":{"value":"fur-Latn-IT"},"ln":{"value":"ln-Latn-CD"},"und-BA":{"value":"bs-Latn-BA"},"fuq":{"value":"fuq-Latn-NE"},"lo":{"value":"lo-Laoo-LA"},"und-BG":{"value":"bg-Cyrl-BG"},"und-BF":{"value":"fr-Latn-BF"},"fuv":{"value":"fuv-Latn-NG"},"und-BE":{"value":"nl-Latn-BE"},"bmq":{"value":"bmq-Latn-ML"},"und-BD":{"value":"bn-Beng-BD"},"lt":{"value":"lt-Latn-LT"},"lu":{"value":"lu-Latn-CD"} +,"und-BJ":{"value":"fr-Latn-BJ"},"lv":{"value":"lv-Latn-LV"},"ogc":{"value":"ogc-Latn-ZZ"},"sog":{"value":"sog-Sogd-UZ"},"und-BI":{"value":"rn-Latn-BI"},"bmu":{"value":"bmu-Latn-ZZ"},"fuy":{"value":"fuy-Latn-ZZ"},"und-BH":{"value":"ar-Arab-BH"},"und-BO":{"value":"es-Latn-BO"},"und-BN":{"value":"ms-Latn-BN"},"sok":{"value":"sok-Latn-ZZ"},"und-BL":{"value":"fr-Latn-BL"},"und-BR":{"value":"pt-Latn-BR"},"und-BQ":{"value":"pap-Latn-BQ"},"soq":{"value":"soq-Latn-ZZ"},"und-BV":{"value":"und-Latn-BV"},"und-BT":{"value" +:"dz-Tibt-BT"},"sou":{"value":"sou-Thai-TH"},"bng":{"value":"bng-Latn-ZZ"},"mg":{"value":"mg-Latn-MG"},"und-BY":{"value":"be-Cyrl-BY"},"und-Glag":{"value":"cu-Glag-BG"},"mh":{"value":"mh-Latn-MH"},"mi":{"value":"mi-Latn-NZ"},"soy":{"value":"soy-Latn-ZZ"},"mk":{"value":"mk-Cyrl-MK"},"ml":{"value":"ml-Mlym-IN"},"bnm":{"value":"bnm-Latn-ZZ"},"mn":{"value":"mn-Cyrl-MN"},"und-Prti":{"value":"xpr-Prti-IR"},"fvr":{"value":"fvr-Latn-SD"},"und-AF":{"value":"fa-Arab-AF"},"bnp":{"value":"bnp-Latn-ZZ"},"mr":{"value":"mr-Deva-IN"} +,"und-AE":{"value":"ar-Arab-AE"},"ms":{"value":"ms-Latn-MY"},"spd":{"value":"spd-Latn-ZZ"},"und-AD":{"value":"ca-Latn-AD"},"mt":{"value":"mt-Latn-MT"},"my":{"value":"my-Mymr-MM"},"zh-BN":{"value":"zh-Hant-BN"},"und-AM":{"value":"hy-Armn-AM"},"spl":{"value":"spl-Latn-ZZ"},"und-AL":{"value":"sq-Latn-AL"},"und-AR":{"value":"es-Latn-AR"},"und-AQ":{"value":"und-Latn-AQ"},"na":{"value":"na-Latn-NR"},"und-AO":{"value":"pt-Latn-AO"},"nb":{"value":"nb-Latn-NO"},"nd":{"value":"nd-Latn-ZW"},"und-AT":{"value":"de-Latn-AT"} +,"ne":{"value":"ne-Deva-NP"},"sps":{"value":"sps-Latn-ZZ"},"und-AS":{"value":"sm-Latn-AS"},"und-AZ":{"value":"az-Latn-AZ"},"ng":{"value":"ng-Latn-NA"},"und-AX":{"value":"sv-Latn-AX"},"und-AW":{"value":"nl-Latn-AW"},"boj":{"value":"boj-Latn-ZZ"},"nl":{"value":"nl-Latn-NL"},"bon":{"value":"bon-Latn-ZZ"},"nn":{"value":"nn-Latn-NO"},"bom":{"value":"bom-Latn-ZZ"},"no":{"value":"no-Latn-NO"},"nr":{"value":"nr-Latn-ZA"},"arc-Nbat":{"value":"arc-Nbat-JO"},"und-Medf":{"value":"mis-Medf-NG"},"nv":{"value":"nv-Latn-US"} +,"kaa":{"value":"kaa-Cyrl-UZ"},"ny":{"value":"ny-Latn-MW"},"kac":{"value":"kac-Latn-MM"},"kab":{"value":"kab-Latn-DZ"},"kad":{"value":"kad-Latn-ZZ"},"kai":{"value":"kai-Latn-ZZ"},"oc":{"value":"oc-Latn-FR"},"zh-AU":{"value":"zh-Hant-AU"},"kaj":{"value":"kaj-Latn-NG"},"kam":{"value":"kam-Latn-KE"},"und-Tagb":{"value":"tbw-Tagb-PH"},"kao":{"value":"kao-Latn-ML"},"und-Ogam":{"value":"sga-Ogam-IE"},"om":{"value":"om-Latn-ET"},"srb":{"value":"srb-Sora-IN"},"or":{"value":"or-Orya-IN"},"tg-Arab":{"value":"tg-Arab-PK"} +,"os":{"value":"os-Cyrl-GE"},"und-Sogd":{"value":"sog-Sogd-UZ"},"bpy":{"value":"bpy-Beng-IN"},"kbd":{"value":"kbd-Cyrl-RU"},"srn":{"value":"srn-Latn-SR"},"pa":{"value":"pa-Guru-IN"},"srr":{"value":"srr-Latn-SN"},"bqc":{"value":"bqc-Latn-ZZ"},"und-Kthi":{"value":"bho-Kthi-IN"},"kbm":{"value":"kbm-Latn-ZZ"},"kbp":{"value":"kbp-Latn-ZZ"},"srx":{"value":"srx-Deva-IN"},"bqi":{"value":"bqi-Arab-IR"},"kbq":{"value":"kbq-Latn-ZZ"},"pl":{"value":"pl-Latn-PL"},"bqp":{"value":"bqp-Latn-ZZ"},"kbx":{"value":"kbx-Latn-ZZ"} +,"kby":{"value":"kby-Arab-NE"},"ps":{"value":"ps-Arab-AF"},"pt":{"value":"pt-Latn-BR"},"ssd":{"value":"ssd-Latn-ZZ"},"und-Nkoo":{"value":"man-Nkoo-GN"},"bqv":{"value":"bqv-Latn-CI"},"ssg":{"value":"ssg-Latn-ZZ"},"und-Mymr":{"value":"my-Mymr-MM"},"kcg":{"value":"kcg-Latn-NG"},"bra":{"value":"bra-Deva-IN"},"kck":{"value":"kck-Latn-ZW"},"kcl":{"value":"kcl-Latn-ZZ"},"okr":{"value":"okr-Latn-ZZ"},"ssy":{"value":"ssy-Latn-ER"},"brh":{"value":"brh-Arab-PK"},"okv":{"value":"okv-Latn-ZZ"},"kct":{"value":"kct-Latn-ZZ"} +,"und-Hani":{"value":"zh-Hani-CN"},"und-Bugi":{"value":"bug-Bugi-ID"},"und-Hang":{"value":"ko-Hang-KR"},"qu":{"value":"qu-Latn-PE"},"brx":{"value":"brx-Deva-IN"},"und-Samr":{"value":"smp-Samr-IL"},"brz":{"value":"brz-Latn-ZZ"},"stk":{"value":"stk-Latn-ZZ"},"und-Hano":{"value":"hnn-Hano-PH"},"kde":{"value":"kde-Latn-TZ"},"kdh":{"value":"kdh-Arab-TG"},"stq":{"value":"stq-Latn-DE"},"kdl":{"value":"kdl-Latn-ZZ"},"bsj":{"value":"bsj-Latn-ZZ"},"und-Hanb":{"value":"zh-Hanb-TW"},"kdt":{"value":"kdt-Thai-TH"},"rm":{"value" +:"rm-Latn-CH"},"rn":{"value":"rn-Latn-BI"},"ro":{"value":"ro-Latn-RO"},"sua":{"value":"sua-Latn-ZZ"},"und-Deva-BT":{"value":"ne-Deva-BT"},"bsq":{"value":"bsq-Bass-LR"},"bst":{"value":"bst-Ethi-ZZ"},"sue":{"value":"sue-Latn-ZZ"},"bss":{"value":"bss-Latn-CM"},"ru":{"value":"ru-Cyrl-RU"},"und-Buhd":{"value":"bku-Buhd-PH"},"rw":{"value":"rw-Latn-RW"},"kea":{"value":"kea-Latn-CV"},"suk":{"value":"suk-Latn-TZ"},"grc-Linb":{"value":"grc-Linb-GR"},"sa":{"value":"sa-Deva-IN"},"sc":{"value":"sc-Latn-IT"},"sus":{"value" +:"sus-Latn-GN"},"sd":{"value":"sd-Arab-PK"},"sur":{"value":"sur-Latn-ZZ"},"se":{"value":"se-Latn-NO"},"sg":{"value":"sg-Latn-CF"},"ken":{"value":"ken-Latn-CM"},"si":{"value":"si-Sinh-LK"},"und-Hant":{"value":"zh-Hant-TW"},"und-Hans":{"value":"zh-Hans-CN"},"sk":{"value":"sk-Latn-SK"},"sl":{"value":"sl-Latn-SI"},"sm":{"value":"sm-Latn-WS"},"sn":{"value":"sn-Latn-ZW"},"bto":{"value":"bto-Latn-PH"},"so":{"value":"so-Latn-SO"},"sq":{"value":"sq-Latn-AL"},"sr":{"value":"sr-Cyrl-RS"},"ss":{"value":"ss-Latn-ZA"},"kez": +{"value":"kez-Latn-ZZ"},"st":{"value":"st-Latn-ZA"},"su":{"value":"su-Latn-ID"},"btt":{"value":"btt-Latn-ZZ"},"sv":{"value":"sv-Latn-SE"},"sw":{"value":"sw-Latn-TZ"},"btv":{"value":"btv-Deva-PK"},"ong":{"value":"ong-Latn-ZZ"},"ta":{"value":"ta-Taml-IN"},"onn":{"value":"onn-Latn-ZZ"},"bua":{"value":"bua-Cyrl-RU"},"bud":{"value":"bud-Latn-ZZ"},"buc":{"value":"buc-Latn-YT"},"te":{"value":"te-Telu-IN"},"tg":{"value":"tg-Cyrl-TJ"},"th":{"value":"th-Thai-TH"},"und-Gong":{"value":"wsg-Gong-IN"},"bug":{"value":"bug-Latn-ID"} +,"kfo":{"value":"kfo-Latn-CI"},"ons":{"value":"ons-Latn-ZZ"},"ti":{"value":"ti-Ethi-ET"},"kfr":{"value":"kfr-Deva-IN"},"tk":{"value":"tk-Latn-TM"},"tl":{"value":"tl-Latn-PH"},"und-Lisu":{"value":"lis-Lisu-CN"},"buk":{"value":"buk-Latn-ZZ"},"tn":{"value":"tn-Latn-ZA"},"bum":{"value":"bum-Latn-CM"},"to":{"value":"to-Latn-TO"},"buo":{"value":"buo-Latn-ZZ"},"swc":{"value":"swc-Latn-CD"},"tr":{"value":"tr-Latn-TR"},"und-Gonm":{"value":"esg-Gonm-IN"},"kfy":{"value":"kfy-Deva-IN"},"swb":{"value":"swb-Arab-YT"},"ts": +{"value":"ts-Latn-ZA"},"tt":{"value":"tt-Cyrl-RU"},"bus":{"value":"bus-Latn-ZZ"},"swg":{"value":"swg-Latn-DE"},"buu":{"value":"buu-Latn-ZZ"},"ty":{"value":"ty-Latn-PF"},"kge":{"value":"kge-Latn-ID"},"kgf":{"value":"kgf-Latn-ZZ"},"swp":{"value":"swp-Latn-ZZ"},"bvb":{"value":"bvb-Latn-GQ"},"ug":{"value":"ug-Arab-CN"},"swv":{"value":"swv-Deva-IN"},"kgp":{"value":"kgp-Latn-BR"},"uk":{"value":"uk-Cyrl-UA"},"ur":{"value":"ur-Arab-PK"},"kk-IR":{"value":"kk-Arab-IR"},"khb":{"value":"khb-Talu-CN"},"kha":{"value":"kha-Latn-IN"} +,"uz":{"value":"uz-Latn-UZ"},"sxn":{"value":"sxn-Latn-ID"},"xav":{"value":"xav-Latn-BR"},"opm":{"value":"opm-Latn-ZZ"},"bwd":{"value":"bwd-Latn-ZZ"},"und-Mlym":{"value":"ml-Mlym-IN"},"ve":{"value":"ve-Latn-ZA"},"khn":{"value":"khn-Deva-IN"},"sxw":{"value":"sxw-Latn-ZZ"},"vi":{"value":"vi-Latn-VN"},"khq":{"value":"khq-Latn-ML"},"kht":{"value":"kht-Mymr-IN"},"khs":{"value":"khs-Latn-ZZ"},"vo":{"value":"vo-Latn-001"},"khw":{"value":"khw-Arab-PK"},"bwr":{"value":"bwr-Latn-ZZ"},"khz":{"value":"khz-Latn-ZZ"},"und-ZW": +{"value":"sn-Latn-ZW"},"xbi":{"value":"xbi-Latn-ZZ"},"gaa":{"value":"gaa-Latn-GH"},"syl":{"value":"syl-Beng-BD"},"wa":{"value":"wa-Latn-BE"},"gag":{"value":"gag-Latn-MD"},"gaf":{"value":"gaf-Latn-ZZ"},"kij":{"value":"kij-Latn-ZZ"},"syr":{"value":"syr-Syrc-IQ"},"und-YE":{"value":"ar-Arab-YE"},"gah":{"value":"gah-Latn-ZZ"},"gaj":{"value":"gaj-Latn-ZZ"},"gam":{"value":"gam-Latn-ZZ"},"bxh":{"value":"bxh-Latn-ZZ"},"gan":{"value":"gan-Hans-CN"},"kiu":{"value":"kiu-Latn-TR"},"kiw":{"value":"kiw-Latn-ZZ"},"wo":{"value" +:"wo-Latn-SN"},"gaw":{"value":"gaw-Latn-ZZ"},"und-Sarb":{"value":"xsa-Sarb-YE"},"gay":{"value":"gay-Latn-ID"},"und-YT":{"value":"fr-Latn-YT"},"kjd":{"value":"kjd-Latn-ZZ"},"szl":{"value":"szl-Latn-PL"},"xcr":{"value":"xcr-Cari-TR"},"gba":{"value":"gba-Latn-ZZ"},"und-Mult":{"value":"skr-Mult-PK"},"kjg":{"value":"kjg-Laoo-LA"},"gbf":{"value":"gbf-Latn-ZZ"},"oro":{"value":"oro-Latn-ZZ"},"und-Hatr":{"value":"mis-Hatr-IQ"},"bye":{"value":"bye-Latn-ZZ"},"xh":{"value":"xh-Latn-ZA"},"gbm":{"value":"gbm-Deva-IN"},"oru": +{"value":"oru-Arab-ZZ"},"kjs":{"value":"kjs-Latn-ZZ"},"byn":{"value":"byn-Ethi-ER"},"und-XK":{"value":"sq-Latn-XK"},"yue-CN":{"value":"yue-Hans-CN"},"und-Lepc":{"value":"lep-Lepc-IN"},"byr":{"value":"byr-Latn-ZZ"},"kjy":{"value":"kjy-Latn-ZZ"},"osa":{"value":"osa-Osge-US"},"bys":{"value":"bys-Latn-ZZ"},"byv":{"value":"byv-Latn-CM"},"gbz":{"value":"gbz-Arab-IR"},"gby":{"value":"gby-Latn-ZZ"},"byx":{"value":"byx-Latn-ZZ"},"kkc":{"value":"kkc-Latn-ZZ"},"und-VU":{"value":"bi-Latn-VU"},"bza":{"value":"bza-Latn-ZZ"} +,"und-Goth":{"value":"got-Goth-UA"},"kkj":{"value":"kkj-Latn-CM"},"bze":{"value":"bze-Latn-ML"},"und-Avst":{"value":"ae-Avst-IR"},"bzf":{"value":"bzf-Latn-ZZ"},"yi":{"value":"yi-Hebr-001"},"bzh":{"value":"bzh-Latn-ZZ"},"und-WF":{"value":"fr-Latn-WF"},"yo":{"value":"yo-Latn-NG"},"gcr":{"value":"gcr-Latn-GF"},"ota":{"value":"ota-Arab-ZZ"},"und-WS":{"value":"sm-Latn-WS"},"bzw":{"value":"bzw-Latn-ZZ"},"und-UZ":{"value":"uz-Latn-UZ"},"und-UY":{"value":"es-Latn-UY"},"otk":{"value":"otk-Orkh-MN"},"xes":{"value":"xes-Latn-ZZ"} +,"za":{"value":"za-Latn-CN"},"gde":{"value":"gde-Latn-ZZ"},"kln":{"value":"kln-Latn-KE"},"und-VA":{"value":"it-Latn-VA"},"zh":{"value":"zh-Hans-CN"},"gdn":{"value":"gdn-Latn-ZZ"},"klq":{"value":"klq-Latn-ZZ"},"und-Saur":{"value":"saz-Saur-IN"},"klt":{"value":"klt-Latn-ZZ"},"und-VE":{"value":"es-Latn-VE"},"gdr":{"value":"gdr-Latn-ZZ"},"klx":{"value":"klx-Latn-ZZ"},"und-VN":{"value":"vi-Latn-VN"},"kk-MN":{"value":"kk-Arab-MN"},"zu":{"value":"zu-Latn-ZA"},"und-Armn":{"value":"hy-Armn-AM"},"kmb":{"value":"kmb-Latn-AO"} +,"und-TR":{"value":"tr-Latn-TR"},"geb":{"value":"geb-Latn-ZZ"},"und-TW":{"value":"zh-Hant-TW"},"kmh":{"value":"kmh-Latn-ZZ"},"und-TV":{"value":"tvl-Latn-TV"},"und-TZ":{"value":"sw-Latn-TZ"},"kmo":{"value":"kmo-Latn-ZZ"},"gej":{"value":"gej-Latn-ZZ"},"und-UA":{"value":"uk-Cyrl-UA"},"gel":{"value":"gel-Latn-ZZ"},"kms":{"value":"kms-Latn-ZZ"},"kmu":{"value":"kmu-Latn-ZZ"},"kmw":{"value":"kmw-Latn-ZZ"},"und-Tibt":{"value":"bo-Tibt-CN"},"und-UG":{"value":"sw-Latn-UG"},"und-Armi":{"value":"arc-Armi-IR"},"gez":{"value" +:"gez-Ethi-ET"},"und-ST":{"value":"pt-Latn-ST"},"knf":{"value":"knf-Latn-GW"},"und-SR":{"value":"nl-Latn-SR"},"und-SV":{"value":"es-Latn-SV"},"und-SY":{"value":"ar-Arab-SY"},"knp":{"value":"knp-Latn-ZZ"},"gfk":{"value":"gfk-Latn-ZZ"},"und-TD":{"value":"fr-Latn-TD"},"und-TH":{"value":"th-Thai-TH"},"und-TG":{"value":"fr-Latn-TG"},"und-TF":{"value":"fr-Latn-TF"},"und-TM":{"value":"tk-Latn-TM"},"und-TL":{"value":"pt-Latn-TL"},"und-TK":{"value":"tkl-Latn-TK"},"und-TJ":{"value":"tg-Cyrl-TJ"},"und-TO":{"value":"to-Latn-TO"} +,"und-TN":{"value":"ar-Arab-TN"},"und-RS":{"value":"sr-Cyrl-RS"},"koi":{"value":"koi-Cyrl-RU"},"und-RW":{"value":"rw-Latn-RW"},"kok":{"value":"kok-Deva-IN"},"und-RU":{"value":"ru-Cyrl-RU"},"kol":{"value":"kol-Latn-ZZ"},"kos":{"value":"kos-Latn-FM"},"ggn":{"value":"ggn-Deva-NP"},"und-SD":{"value":"ar-Arab-SD"},"und-SC":{"value":"fr-Latn-SC"},"und-SA":{"value":"ar-Arab-SA"},"koz":{"value":"koz-Latn-ZZ"},"und-SE":{"value":"sv-Latn-SE"},"und-SK":{"value":"sk-Latn-SK"},"und-SJ":{"value":"nb-Latn-SJ"},"und-SI":{"value" +:"sl-Latn-SI"},"taj":{"value":"taj-Deva-NP"},"und-SO":{"value":"so-Latn-SO"},"tal":{"value":"tal-Latn-ZZ"},"und-SN":{"value":"fr-Latn-SN"},"und-Osge":{"value":"osa-Osge-US"},"und-SM":{"value":"it-Latn-SM"},"kpf":{"value":"kpf-Latn-ZZ"},"tan":{"value":"tan-Latn-ZZ"},"kpe":{"value":"kpe-Latn-LR"},"und-QO":{"value":"en-Latn-DG"},"taq":{"value":"taq-Latn-ZZ"},"kpo":{"value":"kpo-Latn-ZZ"},"kpr":{"value":"kpr-Latn-ZZ"},"kpx":{"value":"kpx-Latn-ZZ"},"ghs":{"value":"ghs-Latn-ZZ"},"und-Lana":{"value":"nod-Lana-TH"} +,"tbc":{"value":"tbc-Latn-ZZ"},"und-RE":{"value":"fr-Latn-RE"},"tbd":{"value":"tbd-Latn-ZZ"},"tbg":{"value":"tbg-Latn-ZZ"},"tbf":{"value":"tbf-Latn-ZZ"},"und-RO":{"value":"ro-Latn-RO"},"kqb":{"value":"kqb-Latn-ZZ"},"tbo":{"value":"tbo-Latn-ZZ"},"kqf":{"value":"kqf-Latn-ZZ"},"und-PT":{"value":"pt-Latn-PT"},"und-PS":{"value":"ar-Arab-PS"},"und-PR":{"value":"es-Latn-PR"},"tbw":{"value":"tbw-Latn-PH"},"und-PY":{"value":"gn-Latn-PY"},"gim":{"value":"gim-Latn-ZZ"},"und-PW":{"value":"pau-Latn-PW"},"gil":{"value":"gil-Latn-KI"} +,"kqs":{"value":"kqs-Latn-ZZ"},"tbz":{"value":"tbz-Latn-ZZ"},"und-Laoo":{"value":"lo-Laoo-LA"},"can":{"value":"can-Latn-ZZ"},"und-QA":{"value":"ar-Arab-QA"},"kqy":{"value":"kqy-Ethi-ZZ"},"ms-CC":{"value":"ms-Arab-CC"},"tci":{"value":"tci-Latn-ZZ"},"krc":{"value":"krc-Cyrl-RU"},"krj":{"value":"krj-Latn-PH"},"kri":{"value":"kri-Latn-SL"},"ozm":{"value":"ozm-Latn-ZZ"},"und-OM":{"value":"ar-Arab-OM"},"krl":{"value":"krl-Latn-RU"},"gjk":{"value":"gjk-Arab-PK"},"cbj":{"value":"cbj-Latn-ZZ"},"gjn":{"value":"gjn-Latn-ZZ"} +,"tcy":{"value":"tcy-Knda-IN"},"xla":{"value":"xla-Latn-ZZ"},"krs":{"value":"krs-Latn-ZZ"},"xlc":{"value":"xlc-Lyci-TR"},"kru":{"value":"kru-Deva-IN"},"und-PA":{"value":"es-Latn-PA"},"xld":{"value":"xld-Lydi-TR"},"gju":{"value":"gju-Arab-PK"},"und-PE":{"value":"es-Latn-PE"},"tdd":{"value":"tdd-Tale-CN"},"tdg":{"value":"tdg-Deva-NP"},"tdh":{"value":"tdh-Deva-NP"},"und-PH":{"value":"fil-Latn-PH"},"und-PG":{"value":"tpi-Latn-PG"},"ksb":{"value":"ksb-Latn-TZ"},"und-PF":{"value":"fr-Latn-PF"},"und-PM":{"value":"fr-Latn-PM"} +,"ksd":{"value":"ksd-Latn-ZZ"},"und-PL":{"value":"pl-Latn-PL"},"und-PK":{"value":"ur-Arab-PK"},"ksf":{"value":"ksf-Latn-CM"}};} +function GU(){return {"value":"en_GB"};} +function GC(){return {"root":{"value":"#,##0.###"},"en":{"value":"#,##0.###"}};} +function Iz(){return {"root":{"exponentSeparator":"E","minusSign":45,"perMille":8240,"decimalSeparator":46,"listSeparator":59,"naN":"NaN","infinity":"∞","groupingSeparator":44,"percent":37},"en":{"exponentSeparator":"E","minusSign":45,"perMille":8240,"decimalSeparator":46,"listSeparator":59,"naN":"NaN","infinity":"∞","groupingSeparator":44,"percent":37}};} +function S(){} +function EC(){C.call(this);} +function Js(){var a=new EC();IC(a);return a;} +function IC(a){G(a);} +function B$(){} +function By(){BB.call(this);} +function J7(a,b){var c=new By();EY(c,a,b);return c;} +function J8(a){var b=new By();Db(b,a);return b;} +function EY(a,b,c){Fm(a,b,c);} +function Db(a,b){CS(a,b);} +function BE(){By.call(this);} +function J9(a){var b=new BE();DI(b,a);return b;} +function DI(a,b){Db(a,b);} +function Bl(){} +function Gt(b){return b;} +function Bm(){} +function Cz(){} +function EP(){M.call(this);this.dI=null;} +function I$(a){var b=new EP();IN(b,a);return b;} +function IN(a,b){Z(a,F().a(B(11)).a(b).d());a.dI=b;} +function E3(){Cc.call(this);} +function Ie(){var a=new E3();Go(a);return a;} +function Go(a){E9(a);} +function BG(){} +function DM(){C.call(this);this.ce=null;} +function Ju(a){var b=new DM();FX(b,a);return b;} +function FX(a,b){G(a);a.ce=b;} +function H4(a,b){D3(a.ce,b);} +function Hr(a,b){a.P(b);} +function DO(){C.call(this);this.cb=null;} +function Jz(a){var b=new DO();IA(b,a);return b;} +function IA(a,b){G(a);a.cb=b;} +function HY(a,b){E7(a.cb,b);} +function HF(a,b){a.P(b);} +function B_(){C.call(this);} +var J$=null;var J_=null;function Ir(){if(J$===null)J$=HB();return J$;} +function Iy(){if(J_===null)J_=Is();return J_;} +function HB(){return [{"code":"AFN","fractionDigits":2,"numericCode":971},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"ALL","fractionDigits":2,"numericCode":8},{"code":"DZD","fractionDigits":2,"numericCode":12},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"AOA","fractionDigits":2,"numericCode":973},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":null,"fractionDigits":0,"numericCode":0},{"code":"XCD","fractionDigits" +:2,"numericCode":951},{"code":"ARS","fractionDigits":2,"numericCode":32},{"code":"AMD","fractionDigits":2,"numericCode":51},{"code":"AWG","fractionDigits":2,"numericCode":533},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"AZN","fractionDigits":2,"numericCode":944},{"code":"BSD","fractionDigits":2,"numericCode":44},{"code":"BHD","fractionDigits":3,"numericCode":48},{"code":"BDT","fractionDigits":2,"numericCode":50},{"code":"BBD","fractionDigits" +:2,"numericCode":52},{"code":"BYR","fractionDigits":0,"numericCode":974},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"BZD","fractionDigits":2,"numericCode":84},{"code":"XOF","fractionDigits":0,"numericCode":952},{"code":"BMD","fractionDigits":2,"numericCode":60},{"code":"BTN","fractionDigits":2,"numericCode":64},{"code":"INR","fractionDigits":2,"numericCode":356},{"code":"BOB","fractionDigits":2,"numericCode":68},{"code":"BOV","fractionDigits":2,"numericCode":984},{"code":"USD","fractionDigits" +:2,"numericCode":840},{"code":"BAM","fractionDigits":2,"numericCode":977},{"code":"BWP","fractionDigits":2,"numericCode":72},{"code":"NOK","fractionDigits":2,"numericCode":578},{"code":"BRL","fractionDigits":2,"numericCode":986},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"BND","fractionDigits":2,"numericCode":96},{"code":"BGN","fractionDigits":2,"numericCode":975},{"code":"XOF","fractionDigits":0,"numericCode":952},{"code":"BIF","fractionDigits":0,"numericCode":108},{"code":"KHR","fractionDigits" +:2,"numericCode":116},{"code":"XAF","fractionDigits":0,"numericCode":950},{"code":"CAD","fractionDigits":2,"numericCode":124},{"code":"CVE","fractionDigits":2,"numericCode":132},{"code":"KYD","fractionDigits":2,"numericCode":136},{"code":"XAF","fractionDigits":0,"numericCode":950},{"code":"XAF","fractionDigits":0,"numericCode":950},{"code":"CLF","fractionDigits":4,"numericCode":990},{"code":"CLP","fractionDigits":0,"numericCode":152},{"code":"CNY","fractionDigits":2,"numericCode":156},{"code":"AUD","fractionDigits" +:2,"numericCode":36},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"COP","fractionDigits":2,"numericCode":170},{"code":"COU","fractionDigits":2,"numericCode":970},{"code":"KMF","fractionDigits":0,"numericCode":174},{"code":"XAF","fractionDigits":0,"numericCode":950},{"code":"CDF","fractionDigits":2,"numericCode":976},{"code":"NZD","fractionDigits":2,"numericCode":554},{"code":"CRC","fractionDigits":2,"numericCode":188},{"code":"XOF","fractionDigits":0,"numericCode":952},{"code":"HRK","fractionDigits" +:2,"numericCode":191},{"code":"CUC","fractionDigits":2,"numericCode":931},{"code":"CUP","fractionDigits":2,"numericCode":192},{"code":"ANG","fractionDigits":2,"numericCode":532},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"CZK","fractionDigits":2,"numericCode":203},{"code":"DKK","fractionDigits":2,"numericCode":208},{"code":"DJF","fractionDigits":0,"numericCode":262},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":"DOP","fractionDigits":2,"numericCode":214},{"code":"USD","fractionDigits" +:2,"numericCode":840},{"code":"EGP","fractionDigits":2,"numericCode":818},{"code":"SVC","fractionDigits":2,"numericCode":222},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"XAF","fractionDigits":0,"numericCode":950},{"code":"ERN","fractionDigits":2,"numericCode":232},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"ETB","fractionDigits":2,"numericCode":230},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"FKP","fractionDigits":2,"numericCode":238},{"code":"DKK","fractionDigits" +:2,"numericCode":208},{"code":"FJD","fractionDigits":2,"numericCode":242},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"XPF","fractionDigits":0,"numericCode":953},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"XAF","fractionDigits":0,"numericCode":950},{"code":"GMD","fractionDigits":2,"numericCode":270},{"code":"GEL","fractionDigits":2,"numericCode":981},{"code":"EUR","fractionDigits" +:2,"numericCode":978},{"code":"GHS","fractionDigits":2,"numericCode":936},{"code":"GIP","fractionDigits":2,"numericCode":292},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"DKK","fractionDigits":2,"numericCode":208},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"GTQ","fractionDigits":2,"numericCode":320},{"code":"GBP","fractionDigits":2,"numericCode":826},{"code":"GNF","fractionDigits" +:0,"numericCode":324},{"code":"XOF","fractionDigits":0,"numericCode":952},{"code":"GYD","fractionDigits":2,"numericCode":328},{"code":"HTG","fractionDigits":2,"numericCode":332},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"HNL","fractionDigits":2,"numericCode":340},{"code":"HKD","fractionDigits":2,"numericCode":344},{"code":"HUF","fractionDigits":2,"numericCode":348},{"code":"ISK","fractionDigits" +:0,"numericCode":352},{"code":"INR","fractionDigits":2,"numericCode":356},{"code":"IDR","fractionDigits":2,"numericCode":360},{"code":"XDR","fractionDigits":-1,"numericCode":960},{"code":"IRR","fractionDigits":2,"numericCode":364},{"code":"IQD","fractionDigits":3,"numericCode":368},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"GBP","fractionDigits":2,"numericCode":826},{"code":"ILS","fractionDigits":2,"numericCode":376},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"JMD","fractionDigits" +:2,"numericCode":388},{"code":"JPY","fractionDigits":0,"numericCode":392},{"code":"GBP","fractionDigits":2,"numericCode":826},{"code":"JOD","fractionDigits":3,"numericCode":400},{"code":"KZT","fractionDigits":2,"numericCode":398},{"code":"KES","fractionDigits":2,"numericCode":404},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"KPW","fractionDigits":2,"numericCode":408},{"code":"KRW","fractionDigits":0,"numericCode":410},{"code":"KWD","fractionDigits":3,"numericCode":414},{"code":"KGS","fractionDigits" +:2,"numericCode":417},{"code":"LAK","fractionDigits":2,"numericCode":418},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"LBP","fractionDigits":2,"numericCode":422},{"code":"LSL","fractionDigits":2,"numericCode":426},{"code":"ZAR","fractionDigits":2,"numericCode":710},{"code":"LRD","fractionDigits":2,"numericCode":430},{"code":"LYD","fractionDigits":3,"numericCode":434},{"code":"CHF","fractionDigits":2,"numericCode":756},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"EUR","fractionDigits" +:2,"numericCode":978},{"code":"MOP","fractionDigits":2,"numericCode":446},{"code":"MKD","fractionDigits":2,"numericCode":807},{"code":"MGA","fractionDigits":2,"numericCode":969},{"code":"MWK","fractionDigits":2,"numericCode":454},{"code":"MYR","fractionDigits":2,"numericCode":458},{"code":"MVR","fractionDigits":2,"numericCode":462},{"code":"XOF","fractionDigits":0,"numericCode":952},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"EUR","fractionDigits" +:2,"numericCode":978},{"code":"MRO","fractionDigits":2,"numericCode":478},{"code":"MUR","fractionDigits":2,"numericCode":480},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"XUA","fractionDigits":-1,"numericCode":965},{"code":"MXN","fractionDigits":2,"numericCode":484},{"code":"MXV","fractionDigits":2,"numericCode":979},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"MDL","fractionDigits":2,"numericCode":498},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"MNT","fractionDigits" +:2,"numericCode":496},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":"MAD","fractionDigits":2,"numericCode":504},{"code":"MZN","fractionDigits":2,"numericCode":943},{"code":"MMK","fractionDigits":2,"numericCode":104},{"code":"NAD","fractionDigits":2,"numericCode":516},{"code":"ZAR","fractionDigits":2,"numericCode":710},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"NPR","fractionDigits":2,"numericCode":524},{"code":"EUR","fractionDigits" +:2,"numericCode":978},{"code":"XPF","fractionDigits":0,"numericCode":953},{"code":"NZD","fractionDigits":2,"numericCode":554},{"code":"NIO","fractionDigits":2,"numericCode":558},{"code":"XOF","fractionDigits":0,"numericCode":952},{"code":"NGN","fractionDigits":2,"numericCode":566},{"code":"NZD","fractionDigits":2,"numericCode":554},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"NOK","fractionDigits":2,"numericCode":578},{"code":"OMR","fractionDigits" +:3,"numericCode":512},{"code":"PKR","fractionDigits":2,"numericCode":586},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":null,"fractionDigits":0,"numericCode":0},{"code":"PAB","fractionDigits":2,"numericCode":590},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"PGK","fractionDigits":2,"numericCode":598},{"code":"PYG","fractionDigits":0,"numericCode":600},{"code":"PEN","fractionDigits":2,"numericCode":604},{"code":"PHP","fractionDigits":2,"numericCode":608},{"code":"NZD","fractionDigits" +:2,"numericCode":554},{"code":"PLN","fractionDigits":2,"numericCode":985},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"QAR","fractionDigits":2,"numericCode":634},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"RON","fractionDigits":2,"numericCode":946},{"code":"RUB","fractionDigits":2,"numericCode":643},{"code":"RWF","fractionDigits":0,"numericCode":646},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"SHP","fractionDigits" +:2,"numericCode":654},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"XCD","fractionDigits":2,"numericCode":951},{"code":"WST","fractionDigits":2,"numericCode":882},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"STD","fractionDigits":2,"numericCode":678},{"code":"SAR","fractionDigits":2,"numericCode":682},{"code":"XOF","fractionDigits" +:0,"numericCode":952},{"code":"RSD","fractionDigits":2,"numericCode":941},{"code":"SCR","fractionDigits":2,"numericCode":690},{"code":"SLL","fractionDigits":2,"numericCode":694},{"code":"SGD","fractionDigits":2,"numericCode":702},{"code":"ANG","fractionDigits":2,"numericCode":532},{"code":"XSU","fractionDigits":-1,"numericCode":994},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"SBD","fractionDigits":2,"numericCode":90},{"code":"SOS","fractionDigits" +:2,"numericCode":706},{"code":"ZAR","fractionDigits":2,"numericCode":710},{"code":null,"fractionDigits":0,"numericCode":0},{"code":"SSP","fractionDigits":2,"numericCode":728},{"code":"EUR","fractionDigits":2,"numericCode":978},{"code":"LKR","fractionDigits":2,"numericCode":144},{"code":"SDG","fractionDigits":2,"numericCode":938},{"code":"SRD","fractionDigits":2,"numericCode":968},{"code":"NOK","fractionDigits":2,"numericCode":578},{"code":"SZL","fractionDigits":2,"numericCode":748},{"code":"SEK","fractionDigits" +:2,"numericCode":752},{"code":"CHE","fractionDigits":2,"numericCode":947},{"code":"CHF","fractionDigits":2,"numericCode":756},{"code":"CHW","fractionDigits":2,"numericCode":948},{"code":"SYP","fractionDigits":2,"numericCode":760},{"code":"TWD","fractionDigits":2,"numericCode":901},{"code":"TJS","fractionDigits":2,"numericCode":972},{"code":"TZS","fractionDigits":2,"numericCode":834},{"code":"THB","fractionDigits":2,"numericCode":764},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"XOF","fractionDigits" +:0,"numericCode":952},{"code":"NZD","fractionDigits":2,"numericCode":554},{"code":"TOP","fractionDigits":2,"numericCode":776},{"code":"TTD","fractionDigits":2,"numericCode":780},{"code":"TND","fractionDigits":3,"numericCode":788},{"code":"TRY","fractionDigits":2,"numericCode":949},{"code":"TMT","fractionDigits":2,"numericCode":934},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"AUD","fractionDigits":2,"numericCode":36},{"code":"UGX","fractionDigits":0,"numericCode":800},{"code":"UAH","fractionDigits" +:2,"numericCode":980},{"code":"AED","fractionDigits":2,"numericCode":784},{"code":"GBP","fractionDigits":2,"numericCode":826},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"USN","fractionDigits":2,"numericCode":997},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"UYI","fractionDigits":0,"numericCode":940},{"code":"UYU","fractionDigits":2,"numericCode":858},{"code":"UZS","fractionDigits":2,"numericCode":860},{"code":"VUV","fractionDigits":0,"numericCode":548},{"code":"VEF","fractionDigits" +:2,"numericCode":937},{"code":"VND","fractionDigits":0,"numericCode":704},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"USD","fractionDigits":2,"numericCode":840},{"code":"XPF","fractionDigits":0,"numericCode":953},{"code":"MAD","fractionDigits":2,"numericCode":504},{"code":"YER","fractionDigits":2,"numericCode":886},{"code":"ZMW","fractionDigits":2,"numericCode":967},{"code":"ZWL","fractionDigits":2,"numericCode":932},{"code":"XBA","fractionDigits":-1,"numericCode":955},{"code":"XBB","fractionDigits" +:-1,"numericCode":956},{"code":"XBC","fractionDigits":-1,"numericCode":957},{"code":"XBD","fractionDigits":-1,"numericCode":958},{"code":"XTS","fractionDigits":-1,"numericCode":963},{"code":"XXX","fractionDigits":-1,"numericCode":999},{"code":"XAU","fractionDigits":-1,"numericCode":959},{"code":"XPD","fractionDigits":-1,"numericCode":964},{"code":"XPT","fractionDigits":-1,"numericCode":962},{"code":"XAG","fractionDigits":-1,"numericCode":961}];} +function Is(){return {"":{"value":"CYP"},"PR":{"value":"USD"},"PT":{"value":"EUR"},"PW":{"value":"USD"},"PY":{"value":"PYG"},"QA":{"value":"QAR"},"AC":{"value":"SHP"},"AD":{"value":"EUR"},"AE":{"value":"AED"},"AF":{"value":"AFN"},"AG":{"value":"XCD"},"AI":{"value":"XCD"},"AL":{"value":"ALL"},"AM":{"value":"AMD"},"AN":{"value":"ANG"},"AO":{"value":"AOA"},"242":{"value":"Brazzaville"},"AQ":{"value":""},"AR":{"value":"ARS"},"243":{"value":"Kinshasa"},"AS":{"value":"USD"},"AT":{"value":"EUR"},"RE":{"value":"EUR"} +,"AU":{"value":""},"AW":{"value":"AWG"},"AX":{"value":"EUR"},"AZ":{"value":"AMD"},"RO":{"value":"RON"},"BA":{"value":"BAM"},"BB":{"value":"BBD"},"RS":{"value":"RSD"},"BD":{"value":"BDT"},"BE":{"value":"EUR"},"RU":{"value":"RUB"},"BF":{"value":"XOF"},"BG":{"value":"BGN"},"RW":{"value":"RWF"},"27":{"value":""},"BH":{"value":"BHD"},"BI":{"value":"BIF"},"BJ":{"value":"XOF"},"BM":{"value":"BMD"},"BN":{"value":"BND"},"BO":{"value":"BOB"},"SA":{"value":"SAR"},"SB":{"value":"SBD"},"BR":{"value":"BRL"},"SC":{"value" +:"SCR"},"SD":{"value":"SDD"},"BT":{"value":"BTN"},"SE":{"value":"SEK"},"SG":{"value":"SGD"},"BV":{"value":""},"BW":{"value":"BWP"},"SH":{"value":"SHP"},"SI":{"value":"EUR"},"BY":{"value":"BYR"},"SJ":{"value":"NOK"},"BZ":{"value":"BZD"},"SK":{"value":"SKK"},"SL":{"value":"SLL"},"SM":{"value":"EUR"},"SN":{"value":"XOF"},"SO":{"value":""},"CA":{"value":"CAD"},"SR":{"value":"SRD"},"CC":{"value":"AUD"},"ST":{"value":"STD"},"CF":{"value":"XAF"},"SV":{"value":"USD"},"CH":{"value":"CHF"},"CI":{"value":"XOF"},"SY":{"value" +:"SYP"},"SZ":{"value":"SZL"},"CK":{"value":"NZD"},"CL":{"value":"CLP"},"CM":{"value":"XAF"},"CO":{"value":"COP"},"TA":{"value":"SHP"},"CR":{"value":"CRC"},"TC":{"value":"USD"},"TD":{"value":"XAF"},"CU":{"value":"CUP"},"TF":{"value":""},"CV":{"value":"CVE"},"TG":{"value":"XOF"},"TH":{"value":"THB"},"CX":{"value":"AUD"},"CY":{"value":"TRY"},"TJ":{"value":"TJS"},"CZ":{"value":"CZK"},"TK":{"value":"NZD"},"TL":{"value":"USD"},"TM":{"value":"TMM"},"TN":{"value":"TND"},"TO":{"value":"TOP"},"TR":{"value":"TRY"},"TT": +{"value":"TTD"},"DE":{"value":"EUR"},"TV":{"value":"AUD"},"DJ":{"value":"DJF"},"TZ":{"value":"TZS"},"DK":{"value":"DKK"},"DM":{"value":"XCD"},"DO":{"value":"DOP"},"UA":{"value":"UAH"},"UG":{"value":"UGX"},"DZ":{"value":"DZD"},"UM":{"value":""},"EC":{"value":"USD"},"US":{"value":"USD"},"EE":{"value":"EEK"},"EG":{"value":"EGP"},"UY":{"value":"UYU"},"UZ":{"value":"UZS"},"VA":{"value":"EUR"},"ER":{"value":"ERN"},"VC":{"value":"XCD"},"ES":{"value":"EUR"},"ET":{"value":"ETB"},"VE":{"value":"VEB"},"VG":{"value":"USD"} +,"VI":{"value":"USD"},"VN":{"value":"VND"},"VU":{"value":"VUV"},"FI":{"value":"EUR"},"FJ":{"value":"FJD"},"FK":{"value":"FKP"},"FM":{"value":"USD"},"FO":{"value":"DKK"},"FR":{"value":"EUR"},"WF":{"value":"XPF"},"850":{"value":"Pyongyang"},"GA":{"value":"XAF"},"GB":{"value":"GBP"},"WS":{"value":"WST"},"GD":{"value":"XCD"},"GE":{"value":"RUB and GEL"},"GF":{"value":"EUR"},"GG":{"value":"GGP"},"GH":{"value":"GHC"},"GI":{"value":"GIP"},"GL":{"value":"DKK"},"GN":{"value":"GNF"},"GP":{"value":"EUR"},"GQ":{"value" +:"XAF"},"GR":{"value":"EUR"},"GS":{"value":""},"GT":{"value":"GTQ"},"GU":{"value":"USD"},"GW":{"value":"XOF"},"GY":{"value":"GYD"},"-241":{"value":"Nassau"},"82":{"value":"Seoul"},"86":{"value":"Beijing"},"HK":{"value":"HKD"},"HM":{"value":""},"HN":{"value":"HNL"},"HR":{"value":"HRK"},"HT":{"value":"HTG"},"YE":{"value":"YER"},"HU":{"value":"HUF"},"ID":{"value":"IDR"},"YT":{"value":"EUR"},"IE":{"value":"EUR"},"IL":{"value":"ILS"},"IM":{"value":"IMP"},"IN":{"value":"INR"},"IO":{"value":""},"IQ":{"value":"IQD"} +,"IR":{"value":"IRR"},"IS":{"value":"ISK"},"IT":{"value":"EUR"},"ZM":{"value":"ZMK"},"886":{"value":"Taipei"},"JE":{"value":"JEP"},"ZW":{"value":"ZWD"},"JM":{"value":"JMD"},"JO":{"value":"JOD"},"JP":{"value":"JPY"},"KE":{"value":"KES"},"KG":{"value":"KGS"},"KH":{"value":"KHR"},"KI":{"value":"AUD"},"KM":{"value":"KMF"},"KN":{"value":"XCD"},"KW":{"value":"KWD"},"KY":{"value":"KYD"},"KZ":{"value":"KZT"},"LA":{"value":"LAK"},"LB":{"value":"LBP"},"LC":{"value":"XCD"},"LI":{"value":"CHF"},"LK":{"value":"LKR"},"LR": +{"value":"LRD"},"LS":{"value":"LSL"},"LT":{"value":"LTL"},"LU":{"value":"EUR"},"LV":{"value":"LVL"},"LY":{"value":"LYD"},"MA":{"value":"MAD"},"MC":{"value":"EUR"},"MD":{"value":""},"ME":{"value":"EUR"},"MG":{"value":"MGA"},"MH":{"value":"USD"},"MK":{"value":"MKD"},"ML":{"value":"XOF"},"MM":{"value":"MMK"},"MN":{"value":"MNT"},"MO":{"value":"MOP"},"MP":{"value":"USD"},"MQ":{"value":"EUR"},"MR":{"value":"MRO"},"MS":{"value":"XCD"},"MT":{"value":"MTL"},"MU":{"value":"MUR"},"MV":{"value":"MVR"},"MW":{"value":"MWK"} +,"MX":{"value":"MXN"},"MY":{"value":"MYR"},"MZ":{"value":"MZM"},"NA":{"value":"NAD"},"NC":{"value":"XPF"},"NE":{"value":"XOF"},"NF":{"value":"AUD"},"NG":{"value":"NGN"},"NI":{"value":"NIO"},"NL":{"value":"EUR"},"NO":{"value":"NOK"},"NP":{"value":"NPR"},"NR":{"value":"AUD"},"NU":{"value":"NZD"},"NZ":{"value":"NZD"},"OM":{"value":"OMR"},"220":{"value":"Banjul"},"PA":{"value":"PAB"},"PE":{"value":"PEN"},"PF":{"value":""},"PG":{"value":"PGK"},"PH":{"value":"PHP"},"PK":{"value":"PKR"},"PL":{"value":"PLN"},"PM":{"value" +:"EUR"},"PN":{"value":"NZD"}};} +function DR(){var a=this;C.call(a);a.bJ=0;a.L=0;a.b0=null;a.ch=null;a.t=null;a.o=null;a.C=null;a.x=null;a.z=null;a.ba=null;} +function Jy(){var a=new DR();GP(a);return a;} +function GP(a){G(a);} +function Jd(b){Jy().cS();} +function H0(a){a.b0=I0();a.ch=Jp();a.t=window.document;Fx(a);C5(a);} +function Fx(a){var b,c,d,e,f,g;b=a.t.getElementById("game-container");if(b===null){b=a.t.createElement("div");b.M(B(12));a.t.body.appendChild(b);}c="";b.innerHTML=c;d=a.t.createElement("h1");c="Number Guessing Game";d.innerHTML=c;b.appendChild(d);e=a.t.createElement("p");c="Guess a number between 1 and 100!";e.innerHTML=c;b.appendChild(e);a.ba=a.t.createElement("p");a.ba.M(B(13));c=a.ba;f="Number of guesses: 0";c.innerHTML=f;c=a.ba;b.appendChild(c);a.o=a.t.createElement("input");c=a.o;f="number";c.type=f;a.o.setAttribute("min", +"1");a.o.setAttribute("max","100");a.o.setAttribute("placeholder","Enter your guess");a.o.M(B(14));c=a.o;b.appendChild(c);a.C=a.t.createElement("button");c=a.C;f="Submit Guess";c.innerHTML=f;a.C.M(B(15));c=a.C;g=Ja(a);c.addEventListener("click",Ck(g,"handleEvent"));c=a.C;b.appendChild(c);c=a.o;g=Jz(a);c.addEventListener("keypress",Ck(g,"handleEvent"));a.z=a.t.createElement("p");a.z.M(B(16));c=a.z;f=" ";c.innerHTML=f;c=a.z;b.appendChild(c);a.x=a.t.createElement("button");c=a.x;f="New Game";c.innerHTML=f;a.x.M(B(17));a.x.style.setProperty("display", +"none");c=a.x;g=Ju(a);c.addEventListener("click",Ck(g,"handleEvent"));c=a.x;b.appendChild(c);} +function C5(a){var b,c;a.bJ=a.b0.dc(100);a.L=0;b=a.o;c="";b.value=c;b=a.o;c=!!0;b.disabled=c;b=a.C;c=!!0;b.disabled=c;a.x.style.setProperty("display","none");b=a.z;c=" ";b.innerHTML=c;b=a.z;c="";b.className=c;Cu(a);a.o.focus();} +function CZ(a){var b,c,d,e,f,g,h,i,$$je;b=$rt_str(a.o.value).c0();if(b.J()){Br(a,B(18),B(19));return;}a:{try{c=FA(b);break a;}catch($$e){$$je=C2($$e);if($$je instanceof CH){}else{throw $$e;}}Br(a,B(20),B(19));d=a.o;e="";d.value=e;return;}b:{try{a.ch.dT(c);break b;}catch($$e){$$je=C2($$e);if($$je instanceof Bo){f=$$je;}else{throw $$e;}}Br(a,f.c7(),B(19));d=a.o;e="";d.value=e;return;}a.L=a.L+1|0;Cu(a);if(c>a.bJ)Br(a,B(21),B(22));else if(c=92)return (b-32|0)-2|0;return (b-32|0)-1|0;} +function B4(){var a=this;C.call(a);a.k=null;a.m=0;} +function Ka(){var a=new B4();EK(a);return a;} +function Jm(a){var b=new B4();Ct(b,a);return b;} +function EK(a){Ct(a,16);} +function Ct(a,b){G(a);a.k=$rt_createCharArray(b);} +function Ew(a,b){return a.bs(a.m,b);} +function Dh(a,b,c){var d,e,f;if(b>=0&&b<=a.m){if(c===null)c=B(32);else if(c.J())return a;a.V(a.m+c.c()|0);d=a.m-1|0;while(d>=b){a.k.data[d+c.c()|0]=a.k.data[d];d=d+(-1)|0;}a.m=a.m+c.c()|0;d=0;while(dc){k=h;break b;}i=i+1|0;if(k>j)break;h=k;}}if(!e)i=i+1|0;Bb(a,b,b+i|0);if(e)l=b;else{f=a.k.data;l=b+1|0;f[b]=45;}while(true){if(k<=0)break a;f=a.k.data;g=l+1|0;f[l]=Bd(c/k|0,d);c=c%k|0;k=k/d|0;l=g;}}}return a;} +function ED(a,b){return a.ck(a.m,b);} +function Fv(a,b,c){return a.dm(b,c,10);} +function F7(a,b,c,d){var e,f,g,h,i,j,k,l;e=1;if(Long_lt(c,Long_ZERO)){e=0;c=Long_neg(c);}a:{f=Long_fromInt(d);if(Long_lt(c,f)){if(e)Bb(a,b,b+1|0);else{Bb(a,b,b+2|0);g=a.k.data;h=b+1|0;g[b]=45;b=h;}a.k.data[b]=Bd(c.lo,d);}else{i=1;j=Long_fromInt(1);while(true){k=Long_mul(j,f);if(Long_le(k,j))break;if(Long_gt(k,c))break;i=i+1|0;j=k;}if(!e)i=i+1|0;Bb(a,b,b+i|0);if(e)l=b;else{g=a.k.data;l=b+1|0;g[b]=45;}while(true){if(Long_le(j,Long_ZERO))break a;g=a.k.data;h=l+1|0;g[l]=Bd(Long_div(c,j).lo,d);c=Long_rem(c,j);j= +Long_div(j,f);l=h;}}}return a;} +function Fd(a,b){return a.b6(a.m,b);} +function E0(a,b,c){Bb(a,b,b+1|0);a.k.data[b]=c;return a;} +function EO(a,b){return a.bZ(a.m,b);} +function DE(a,b,c){return a.bs(b,c===null?B(32):c.d());} +function EF(a,b){var c,d;if(a.k.data.length>=b)return;if(a.k.data.length>=1073741823)c=2147483647;else{d=a.k.data.length*2|0;c=Bq(b,Bq(d,5));}a.k=Ed(a.k,c);} +function DP(a){return H8(a.k,0,a.m);} +function El(a){return a.m;} +function DL(a,b){if(b>=0&&b=0){Bb(a,b,(b+e|0)-d|0);while(d=0){a.k.data[c+e|0]=a.k.data[b+e|0];e=e+(-1)|0;}a.m=a.m+(c-b|0)|0;} +function CE(){} +function Dw(){B4.call(this);} +function I4(a){var b=new Dw();Ib(b,a);return b;} +function F(){var a=new Dw();HW(a);return a;} +function Ib(a,b){Ct(a,b);} +function HW(a){EK(a);} +function Gb(a,b){Ew(a,b);return a;} +function DU(a,b){EI(a,b);return a;} +function GZ(a,b){ED(a,b);return a;} +function F3(a,b){Fd(a,b);return a;} +function Hx(a,b,c,d){EV(a,b,c,d);return a;} +function Gz(a,b){Fr(a,b);return a;} +function BY(a,b){EO(a,b);return a;} +function Gl(a,b,c){Fv(a,b,c);return a;} +function Gx(a,b,c,d,e){DK(a,b,c,d,e);return a;} +function If(a,b,c){DE(a,b,c);return a;} +function GX(a,b,c){E0(a,b,c);return a;} +function In(a,b,c){Dh(a,b,c);return a;} +function It(a,b){DY(a,b);} +function HA(a,b,c,d,e){return a.ex(b,c,d,e);} +function IL(a,b,c,d){return a.dz(b,c,d);} +function GI(a,b){return DL(a,b);} +function Hw(a){return El(a);} +function CO(a){return DP(a);} +function Iw(a,b){EF(a,b);} +function Gd(a,b,c){return a.d2(b,c);} +function FP(a,b,c){return a.d0(b,c);} +function Ia(a,b,c){return a.cX(b,c);} +function IJ(a,b,c){return a.dV(b,c);} +function F6(a,b){return a.cv(b);} +function D1(){Q.call(this);} +function Jt(){var a=new D1();Io(a);return a;} +function Io(a){Bn(a);} +function Cp(){} +function C9(){} +function CP(){} +function CK(){} +function CX(){} +function EB(){var a=this;M.call(a);a.c1=null;a.d8=0;} +function Jj(a,b){var c=new EB();FN(c,a,b);return c;} +function FN(a,b,c){Z(a,F().a(B(33)).a(b).a(B(34)).q(c).d());a.c1=b;a.d8=c;} +function CC(){C.call(this);this.ee=null;} +var Kb=null;function Jr(a){var b=new CC();II(b,a);return b;} +function II(a,b){G(a);a.ee=b;} +function Hc(){var b,c,d,e;if(Kb!==null)return;Kb=JD();b=Ir();c=0;while(c=1073741823)c=2147483647;else{d=a.A.data.length*2|0;c=Bq(b,Bq(d,5));}a.A=HL(a.A,c);}} +function Iv(a,b){DC(a,b);return a.A.data[b];} +function Hj(a){return a.S;} +function Hf(a,b){var c,d;a.V(a.S+1|0);c=a.A.data;d=a.S;a.S=d+1|0;c[d]=b;a.bc=a.bc+1|0;return 1;} +function DC(a,b){if(b>=0&&b=0&&b=a.e.data.length)return (-1);if(a.e.data[d]==e)break;d=d+1|0;}return d;}f=BQ(b);g=BJ(b);while(true){if(d>=(a.e.data.length-1|0))return (-1);if(a.e.data[d]==f&&a.e.data[d+1|0]==g)break;d=d+1|0;}return d;} +function FV(a,b){return a.by(b,0);} +function Hd(a,b,c){var d,e,f,g,h,i;d=Cx(c,a.c()-1|0);if(b<65536){e=b&65535;while(true){if(d<0)return (-1);if(a.e.data[d]==e)break;d=d+(-1)|0;}return d;}f=BQ(b);g=BJ(b);while(true){if(d<1)return (-1);if(a.e.data[d]==g){h=a.e.data;i=d-1|0;if(h[i]==f)break;}d=d+(-1)|0;}return i;} +function HG(a,b){return a.ei(b,a.c()-1|0);} +function Gg(a,b,c){if(b>c)E(B5());return H8(a.e,b,c-b|0);} +function HK(a,b){return a.y(b,a.c());} +function Im(a){var b,c;b=0;c=a.c()-1|0;a:{while(b<=c){if(a.h(b)>32)break a;b=b+1|0;}}while(b<=c&&a.h(c)<=32){c=c+(-1)|0;}return a.y(b,c+1|0);} +function HV(a){return a;} +function H9(a){var b,c,d;b=$rt_createCharArray(a.e.data.length);c=0;while(true){d=b.data;if(c>=d.length)break;d[c]=a.e.data[c];c=c+1|0;}return b;} +function Fy(b){BP();return b===null?B(32):b.d();} +function BD(b){var c,d;BP();c=new BN;d=$rt_createCharArray(1);d.data[0]=b;Cs(c,d);return c;} +function He(a,b){var c,d;if(a===b)return 1;if(!(b instanceof BN))return 0;c=b;if(c.c()!=a.c())return 0;d=0;while(d=c)break a;e=b[d];a.bb=(31*a.bb|0)+e|0;d=d+1|0;}}}return a.bb;} +function Gp(a){var b,c,d,e,f,g,h,i;if(a.J())return a;b=$rt_createIntArray(a.e.data.length);c=0;d=0;while(d=a.cf?0:1;} +function GH(a){var b,c;Fi(a);a.b4=a.bj;b=a.U;c=a.bj;a.bj=c+1|0;return b.dp(c);} +function Fi(a){if(a.cd>=a.U.bc)return;E(Jt());} +function ES(){C.call(this);} +function Jp(){var a=new ES();IP(a);return a;} +function IP(a){G(a);} +function GO(a,b){if(b>=1&&b<=101)return;E(O(B(36)));} +function DW(){C.call(this);} +function E5(b){if (b === null || b.constructor.$meta.item === undefined) {$rt_throw(HU());}return b.data.length;} +function E$(b,c){if(b===null)E(CN());if(b===H($rt_voidcls()))E(HU());if(c<0)E(Jl());return HD(b.ec(),c);} +function HD(b,c){if (b.$meta.primitive) {if (b == $rt_bytecls()) {return $rt_createByteArray(c);}if (b == $rt_shortcls()) {return $rt_createShortArray(c);}if (b == $rt_charcls()) {return $rt_createCharArray(c);}if (b == $rt_intcls()) {return $rt_createIntArray(c);}if (b == $rt_longcls()) {return $rt_createLongArray(c);}if (b == $rt_floatcls()) {return $rt_createFloatArray(c);}if (b == $rt_doublecls()) {return $rt_createDoubleArray(c);}if (b == $rt_booleancls()) {return $rt_createBooleanArray(c);}} else {return $rt_createArray(b, c)}} +function DJ(){var a=this;C.call(a);a.cl=null;a.H=null;a.bu=null;a.j=null;a.B=null;a.g=0;a.ct=0;a.cn=0;a.s=0;a.cx=0;a.u=0;a.w=0;a.l=0;} +function Jn(a,b,c,d,e){var f=new DJ();Hk(f,a,b,c,d,e);return f;} +function Hk(a,b,c,d,e,f){G(a);a.cl=b;a.H=c;a.bu=d;a.j=e;a.B=f;} +function IT(a){var b,c;while(true){b=a.j.by(37,a.g);if(b<0)break;a.H.Z(a.j.y(a.g,b));a.g=b+1|0;a.ct=a.g;c=DZ(a);Fn(a);Du(a,c);}a.H.Z(a.j.bk(a.g));} +function Du(a,b){a:{b:{switch(b){case 66:break;case 67:CB(a,b,1);break a;case 68:CD(a,b,1);break a;case 69:case 70:case 71:case 73:case 74:case 75:case 76:case 77:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 93:case 94:case 95:case 96:case 97:case 101:case 102:case 103:case 105:case 106:case 107:case 108:case 109:case 110:case 112:case 113:case 114:case 116:case 117:case 118:case 119:break b;case 72:Cl(a,b,1);break a;case 79:BR(a,b,3,1);break a;case 83:Ch(a, +b,1);break a;case 88:BR(a,b,4,1);break a;case 98:Cy(a,b,0);break a;case 99:CB(a,b,0);break a;case 100:CD(a,b,0);break a;case 104:Cl(a,b,0);break a;case 111:BR(a,b,3,0);break a;case 115:Ch(a,b,0);break a;case 120:BR(a,b,4,0);break a;default:break b;}Cy(a,b,1);break a;}E(FC(BD(b)));}} +function Cy(a,b,c){var d,e;Cf(a,b);d=a.B.data[a.s];e=Dy(d instanceof BC?d.eS():d===null?0:1);Bj(a,c,e);} +function Cl(a,b,c){var d,e;Cf(a,b);d=a.B.data[a.s];e=d===null?B(32):C6(d.bq());Bj(a,c,e);} +function Ch(a,b,c){var d,e;Cf(a,b);d=a.B.data[a.s];if(!Gn(d,CT))Bj(a,c,Fy(d));else{e=a.l&7;if(c)e=e|2;d.e7(a.cl,e,a.u,a.w);}} +function CB(a,b,c){var d,e;BH(a,b,259);d=a.B.data[a.s];if(a.w>=0)E(Hg(a.w));if(d instanceof Bk)e=d.eN();else if(d instanceof Bu)e=d.ev()&65535;else if(d instanceof BF)e=d.cQ()&65535;else{if(!(d instanceof Bg)){if(d===null){Bj(a,c,B(32));return;}E(EL(b,d===null?null:Bc(d)));}e=d.bQ();if(!Ft(e))E(Jo(e));}Bj(a,c,Dm(EZ(e)));} +function CD(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;BH(a,b,507);Da(a);d=a.B.data[a.s];if(d instanceof BO){e=d.dN();f=D6(GM(e));g=Long_ge(e,Long_ZERO)?0:1;}else{if(!(d instanceof Bg)&&!(d instanceof Bu)&&!(d instanceof BF))E(EL(b,d===null?null:Bc(d)));h=d.bQ();f=CM(FQ(h));g=h>=0?0:1;}i=0;j=F();if(g){if(!(a.l&128)){j.q(45);i=1;}else{j.q(40);i=2;}}else if(a.l&8){j.q(43);i=1;}else if(a.l&16){j.q(32);i=1;}k=F();if(!(a.l&64))k.a(f);else{l=Hi(a.bu).dX();m=IE(a.bu).dD();n=f.c()%m|0;if(!n)n=m;o=0;while(n=a.u)break a;j.q(Bd(0,10));n=n+1|0;}}}j.cv(k);if(g&&a.l&128)j.q(41);Bj(a,c,j.d());} +function BR(a,b,c,d){var e,f,g,h,i;BH(a,b,423);Da(a);e=a.B.data[a.s];if(e instanceof BO)f=H_(e.dN(),c);else if(e instanceof Bg)f=BW(e.bQ(),c);else if(e instanceof BF)f=BW(e.cQ()&65535,c);else{if(!(e instanceof Bu))E(EL(b,e===null?null:Bc(e)));f=BW(e.ev()&255,c);}g=F();if(a.l&4){h=c!=4?B(37):B(38);f=F().a(h).a(f).d();}a:{if(a.l&32){i=f.c();while(true){if(i>=a.u)break a;g.q(Bd(0,10));i=i+1|0;}}}g.a(f);Bj(a,d,g.d());} +function Da(a){if(a.l&8&&a.l&16)E(F_(B(39)));if(a.l&32&&a.l&1)E(F_(B(40)));if(a.w>=0)E(Hg(a.w));if(a.l&1&&a.u<0)E(I$(a.j.y(a.ct,a.g)));} +function Bj(a,b,c){if(a.w>0)c=c.y(0,a.w);if(b)c=c.cV();if(!(a.l&1)){CI(a,c);a.H.Z(c);}else{a.H.Z(c);CI(a,c);}} +function Cf(a,b){BH(a,b,263);} +function BH(a,b,c){if((a.l|c)==c)return;E(Jj(Fk(a,a.l&(c^(-1))),b));} +function Fk(a,b){var c;c=Ev(b);return BD(B(41).h(c));} +function CI(a,b){var c,d,e;if(a.u>b.c()){c=a.u-b.c()|0;d=I4(c);e=0;while(e=48&&b<=57?1:0;} +function Ex(){var a=this;C.call(a);a.bA=null;a.df=0;a.b7=0;a.dn=0;a.dP=0;a.dx=0;a.d_=0;a.dO=0;a.dE=null;a.en=null;a.el=0;a.eE=0;a.dl=null;} +function Hi(a){var b=new Ex();Hz(b,a);return b;} +function Hz(a,b){G(a);a.bA=b;DT(a);} +function DT(a){var b,c,d;b=H$(B1(a.bA),B7(a.bA));a.df=48;c=b.groupingSeparator;a.b7=c&65535;c=b.decimalSeparator;a.dn=c&65535;c=b.perMille;a.dP=c&65535;c=b.percent;a.dx=c&65535;a.d_=35;a.dO=59;d=(b.naN!==null?$rt_str(b.naN):null);a.dE=d;d=(b.infinity!==null?$rt_str(b.infinity):null);a.en=d;c=b.minusSign;a.el=c&65535;c=b.decimalSeparator;a.eE=c&65535;d=(b.exponentSeparator!==null?$rt_str(b.exponentSeparator):null);a.dl=d;} +function H5(a){return a.b7;} +function IG(a){var b,c,$$je;a:{try{b=Fo(a);}catch($$e){$$je=C2($$e);if($$je instanceof Cj){c=$$je;break a;}else{throw $$e;}}return b;}E(I6(B(42),c));} +function DV(){C.call(this);} +function Jh(){var a=new DV();F0(a);return a;} +function F0(a){G(a);} +function G3(a,b){return a.ef()*b|0;} +function Gc(a){return Math.random();} +function C3(){} +function Fz(){C.call(this);} +function Dq(){Q.call(this);} +function Jx(a){var b=new Dq();Ga(b,a);return b;} +function CN(){var a=new Dq();Ic(a);return a;} +function Ga(a,b){CG(a,b);} +function Ic(a){Bn(a);} +function Cv(){} +function Dz(){var a=this;C.call(a);a.co=null;a.bg=null;a.dj=null;} +function JE(){var a=new Dz();HH(a);return a;} +function Kl(a){var b=new Dz();Dl(b,a);return b;} +function Km(a,b){var c=new Dz();EQ(c,a,b);return c;} +function HH(a){Dl(a,Cw());} +function Dl(a,b){EQ(a,F(),b);} +function EQ(a,b,c){G(a);a.bg=b;a.co=c;} +function CJ(a){if(a.bg!==null)return;E(IY());} +function Eo(a){CJ(a);return a.bg.d();} +function Fw(a,b,c){return FE(a,a.co,b,c);} +function FE(a,b,c,d){var e,$$je;CJ(a);a:{try{if(d===null)d=U(C,1);Jn(a,a.bg,b,c,d).dG();break a;}catch($$e){$$je=C2($$e);if($$je instanceof CQ){e=$$je;}else{throw $$e;}}a.dj=e;}return a;} +function En(){Bv.call(this);} +function Kn(a){var b=new En();H1(b,a);return b;} +function H1(a,b){CA(a,b);} +function Fa(){M.call(this);this.em=0;} +function Hg(a){var b=new Fa();G4(b,a);return b;} +function G4(a,b){Z(a,F().a(B(43)).n(b).d());a.em=b;} +function Cg(){var a=this;C.call(a);a.dU=null;a.cW=0;} +function Ko(a,b){var c=new Cg();Eq(c,a,b);return c;} +function Eq(a,b,c){G(a);a.dU=b;a.cW=c;} +function FB(){C.call(this);} +function BW(b,c){var d,e,f,g,h,i,j,k;if(!b)return B(37);d=1<=0){j=g.data;k=i+1|0;j[i]=Bd(b>>>h&e,d);h=h-c|0;i=k;}return Dm(g);} +function H_(b,c){var d,e,f,g,h,i,j,k;if(Long_eq(b,Long_ZERO))return B(37);d=1<c)c=b;return c;} +function FQ(b){if(b<=0)b= -b;return b;} +function GM(b){if(Long_le(b,Long_ZERO))b=Long_neg(b);return b;} +function Bu(){Y.call(this);} +var KO=null;function KP(){KP=Ba(Bu);Gv();} +function Gv(){KO=H($rt_bytecls());} +function V(){Cg.call(this);this.c9=0;} +var KQ=null;var KR=null;var KS=null;var KT=null;var KU=null;var KV=null;var Kd=null;var KW=null;var KX=null;function Ix(){Ix=Ba(V);GK();} +function Bs(a,b,c){var d=new V();EX(d,a,b,c);return d;} +function EX(a,b,c,d){Ix();Eq(a,b,c);a.c9=d;} +function GK(){var b,c;KQ=Bs(B(61),0,0);KR=Bs(B(62),1,1);KS=Bs(B(63),2,2);KT=Bs(B(64),3,3);KU=Bs(B(65),4,4);KV=Bs(B(66),5,5);Kd=Bs(B(67),6,6);KW=Bs(B(68),7,7);b=U(V,8);c=b.data;c[0]=KQ;c[1]=KR;c[2]=KS;c[3]=KT;c[4]=KU;c[5]=KV;c[6]=Kd;c[7]=KW;KX=b;} +function Fj(){C.call(this);} +function Ck(b,c){var name='jso$functor$'+c;if(!b[name]){var fn=function(){return b[c].apply(b,arguments);};b[name]=function(){return fn;};}return b[name]();} +function B6(b,c){if(typeof b!=="function")return b;var result={};result[c]=b;return result;} +function E2(){C.call(this);} +function IB(b){var c,d,e,f;c=JF(b.et());d=DQ(c);e=$rt_createIntArray(d);f=0;while(f=a.i.c())break a;d:{f=a.i.h(a.b);switch(f){case 35:case 48:if(!b)break a;E(O(F().a(B(72)).n(a.b).a(B(71)).a(a.i).d()));case 37:if(e.c()>0){d.v(BL(e.d()));e.O(0);}d.v(I8());a.b=a.b+1|0;a.bp=100;break d;case 39:a.b=a.b+1|0;g=a.i.by(39,a.b);if(g<0)E(O(F().a(B(73)).n(a.b).a(B(74)).a(a.i).d()));if(g==a.b)e.q(39);else e.a(a.i.y(a.b,g));a.b=g+1|0;break d;case 45:if(e.c()>0){d.v(BL(e.d()));e.O(0);}d.v(Il());a.b=a.b+1|0;break d;case 46:case 69:break c;case 59:break b;case 164:if +(e.c()>0){d.v(BL(e.d()));e.O(0);}d.v(Js());a.b=a.b+1|0;break d;case 8240:if(e.c()>0){d.v(BL(e.d()));e.O(0);}d.v(IZ());a.b=a.b+1|0;a.bp=1000;break d;default:}e.q(f);a.b=a.b+1|0;}}E(O(F().a(B(72)).n(a.b).a(B(71)).a(a.i).d()));}if(c)E(O(F().a(B(72)).n(a.b).a(B(71)).a(a.i).d()));}if(e.c()>0)d.v(BL(e.d()));return d.c3(U(S,d.bC()));} +function CF(a,b){Ds(a,b);if(a.b=a.i.c())break a;c:{d:{switch(a.i.h(a.b)){case 35:if(!e)break b;f=f+1|0;break c;case 44:break d;case 48:break;default:break a;}e=0;f=f+1|0;g=g+1|0;break c;}if(d==a.b)E(O(F().a(B(75)).n(a.b).a(B(71)).a(a.i).d()));if(b)a.N=a.b-d|0;d=a.b+1|0;}a.b=a.b+1|0;}E(O(F().a(B(76)).n(a.b).a(B(71)).a(a.i).d()));}if(!f)E(O(F().a(B(77)).n(a.b).a(B(71)).a(a.i).d()));if(d==a.b)E(O(F().a(B(78)).n(a.b).a(B(71)).a(a.i).d()));if(b&&d>c)a.N=a.b-d|0;if(b) +{a.b5=f;a.bL=g;}} +function Ff(a,b){var c,d,e;c=0;d=0;e=0;a:{b:while(true){if(a.b>=a.i.c())break a;c:{switch(a.i.h(a.b)){case 35:break;case 44:E(O(F().a(B(79)).n(a.b).a(B(71)).a(a.i).d()));case 46:E(O(F().a(B(80)).n(a.b).a(B(71)).a(a.i).d()));case 48:if(c)break b;d=d+1|0;e=e+1|0;break c;default:break a;}d=d+1|0;c=1;}a.b=a.b+1|0;}E(O(F().a(B(81)).n(a.b).a(B(71)).a(a.i).d()));}if(b){a.bI=d;a.bP=e;a.be=d?0:1;}} +function D7(a,b){var c;c=0;a:{b:while(true){if(a.b>=a.i.c())break a;switch(a.i.h(a.b)){case 35:case 44:case 46:case 69:break b;case 48:break;default:break a;}c=c+1|0;a.b=a.b+1|0;}E(O(F().a(B(82)).n(a.b).a(B(71)).a(a.i).d()));}if(c){if(b)a.bH=c;return;}E(O(F().a(B(83)).n(a.b).a(B(71)).a(a.i).d()));} +function Cd(){var a=this;C.call(a);a.bT=null;a.bh=null;} +function KY(a,b){var c=new Cd();Fq(c,a,b);return c;} +function Fq(a,b,c){G(a);a.bT=b;a.bh=c;} +function Co(){var a=this;Cd.call(a);a.bx=0;a.Y=null;} +function I3(a,b){var c=new Co();HS(c,a,b);return c;} +function HS(a,b,c){Fq(a,b,null);a.bx=c;} +function CR(){} +function Et(){C.call(this);} +function Ji(){var a=new Et();Ho(a);return a;} +function Ho(a){G(a);} +function Ef(){Q.call(this);} +function Dj(){var a=new Ef();Gj(a);return a;} +function Gj(a){Bn(a);} +function CT(){} +function DX(){C.call(this);this.b2=null;} +function I0(){var a=new DX();ID(a);return a;} +function ID(a){G(a);a.b2=Jh();} +function H3(a,b){return a.b2.c2(b+1|0);} +function Ce(){C.call(this);} +function KZ(){var a=new Ce();Dg(a);return a;} +function Dg(a){G(a);} +function E_(){var a=this;Ce.call(a);a.Q=0;a.r=null;a.bm=0;a.cB=0.0;a.bG=0;} +function JD(){var a=new E_();FO(a);return a;} +function K0(a){var b=new E_();Dk(b,a);return b;} +function K1(a,b){var c=new E_();ET(c,a,b);return c;} +function G1(a,b){return U(Co,b);} +function FO(a){Dk(a,16);} +function Dk(a,b){ET(a,b,0.75);} +function EJ(b){var c,d;if(b>=1073741824)return 1073741824;if(!b)return 16;c=b-1|0;d=c|c>>1;d=d|d>>2;d=d|d>>4;d=d|d>>8;d=d|d>>16;return d+1|0;} +function ET(a,b,c){var d;Dg(a);if(b>=0&&c>0.0){d=EJ(b);a.Q=0;a.r=a.cm(d);a.cB=c;CY(a);return;}E(HU());} +function CY(a){a.bG=a.r.data.length*a.cB|0;} +function G7(a,b){var c;c=DS(a,b);if(c===null)return null;return c.bh;} +function DS(a,b){var c,d,e;if(b===null)c=C8(a);else{d=E8(b);e=d&(a.r.data.length-1|0);c=Cr(a,b,e,d);}return c;} +function Cr(a,b,c,d){var e,f;e=a.r.data[c];while(e!==null){if(e.bx==d){f=e.bT;if(G8(b,f))break;}e=e.Y;}return e;} +function C8(a){var b;b=a.r.data[0];while(b!==null&&b.bT!==null){b=b.Y;}return b;} +function Gr(a,b,c){return a.ea(b,c);} +function GN(a,b,c){var d,e,f,g,h;if(b===null){d=C8(a);if(d===null){a.bm=a.bm+1|0;d=a.cD(null,0,0);e=a.Q+1|0;a.Q=e;if(e>a.bG)a.cC();}}else{f=E8(b);g=f&(a.r.data.length-1|0);d=Cr(a,b,g,f);if(d===null){a.bm=a.bm+1|0;d=a.cD(b,g,f);e=a.Q+1|0;a.Q=e;if(e>a.bG)a.cC();}}h=d.bh;d.bh=c;return h;} +function H2(a,b,c,d){var e;e=I3(b,d);e.Y=a.r.data[c];a.r.data[c]=e;return e;} +function GG(a,b){var c,d,e,f,g,h,i;c=EJ(!b?1:b<<1);d=a.cm(c);e=0;while(e0){str+=", ";}str+=this.data[i].toString();}str+="]";return str;};$rt_setCloneMethod($rt_array.prototype,function(){var dataCopy;if('slice' in this.data){dataCopy=this.data.slice();}else {dataCopy=new this.data.constructor(this.data.length);for +(var i=0;ib.hi){return true;}var x=a.lo>>>1;var y=b.lo>>>1;if(x!==y){return x>y;}return (a.lo&1)>(b.lo&1);}function Long_ge(a,b){if(a.hib.hi){return true;}var x=a.lo>>>1;var y=b.lo>>>1;if(x!==y){return x>=y;}return (a.lo&1)>=(b.lo&1);}function Long_lt(a,b){if(a.hi>b.hi){return false;}if(a.hi>> +1;var y=b.lo>>>1;if(x!==y){return xb.hi){return false;}if(a.hi>>1;var y=b.lo>>>1;if(x!==y){return x<=y;}return (a.lo&1)<=(b.lo&1);}function Long_add(a,b){if(a.hi===a.lo>>31&&b.hi===b.lo>>31){return Long_fromNumber(a.lo+b.lo);}else if(Math.abs(a.hi)>>16;var a_hilo=a.hi&0xFFFF;var a_hihi +=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;var lolo=a_lolo+b_lolo|0;var lohi=a_lohi+b_lohi+(lolo>>16)|0;var hilo=a_hilo+b_hilo+(lohi>>16)|0;var hihi=a_hihi+b_hihi+(hilo>>16)|0;return new Long(lolo&0xFFFF|(lohi&0xFFFF)<<16,hilo&0xFFFF|(hihi&0xFFFF)<<16);}function Long_inc(a){var lo=a.lo+1|0;var hi=a.hi;if(lo===0){hi=hi+1|0;}return new Long(lo,hi);}function Long_dec(a){var lo=a.lo -1|0;var hi=a.hi;if(lo=== -1){hi=hi -1|0;}return new Long(lo,hi);}function Long_neg(a) +{return Long_inc(new Long(a.lo^0xFFFFFFFF,a.hi^0xFFFFFFFF));}function Long_sub(a,b){if(a.hi===a.lo>>31&&b.hi===b.lo>>31){return Long_fromNumber(a.lo -b.lo);}var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;var lolo=a_lolo -b_lolo|0;var lohi=a_lohi -b_lohi+(lolo>>16)|0;var hilo=a_hilo -b_hilo+(lohi>>16)|0;var hihi=a_hihi -b_hihi+(hilo>>16)|0;return new Long(lolo&0xFFFF|(lohi&0xFFFF)<< +16,hilo&0xFFFF|(hihi&0xFFFF)<<16);}function Long_compare(a,b){var r=a.hi -b.hi;if(r!==0){return r;}r=(a.lo>>>1) -(b.lo>>>1);if(r!==0){return r;}return (a.lo&1) -(b.lo&1);}function Long_isPositive(a){return (a.hi&0x80000000)===0;}function Long_isNegative(a){return (a.hi&0x80000000)!==0;}function Long_mul(a,b){var positive=Long_isNegative(a)===Long_isNegative(b);if(Long_isNegative(a)){a=Long_neg(a);}if(Long_isNegative(b)){b=Long_neg(b);}var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi +=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;var lolo=0;var lohi=0;var hilo=0;var hihi=0;lolo=a_lolo*b_lolo|0;lohi=lolo>>>16;lohi=(lohi&0xFFFF)+a_lohi*b_lolo|0;hilo=hilo+(lohi>>>16)|0;lohi=(lohi&0xFFFF)+a_lolo*b_lohi|0;hilo=hilo+(lohi>>>16)|0;hihi=hilo>>>16;hilo=(hilo&0xFFFF)+a_hilo*b_lolo|0;hihi=hihi+(hilo>>>16)|0;hilo=(hilo&0xFFFF)+a_lohi*b_lohi|0;hihi=hihi+(hilo>>>16)|0;hilo=(hilo&0xFFFF)+a_lolo*b_hilo|0;hihi=hihi+(hilo>>>16)|0;hihi=hihi+a_hihi*b_lolo ++a_hilo*b_lohi+a_lohi*b_hilo+a_lolo*b_hihi|0;var result=new Long(lolo&0xFFFF|lohi<<16,hilo&0xFFFF|hihi<<16);return positive?result:Long_neg(result);}function Long_div(a,b){if(Math.abs(a.hi)=0&&a.hi=0&&b.hi=0&&a.hi=0&&b.hi>>16|a.hi<<16);}function Long_shiftRight16(a) +{return new Long(a.lo>>>16|a.hi<<16,a.hi>>>16);}function Long_and(a,b){return new Long(a.lo&b.lo,a.hi&b.hi);}function Long_or(a,b){return new Long(a.lo|b.lo,a.hi|b.hi);}function Long_xor(a,b){return new Long(a.lo^b.lo,a.hi^b.hi);}function Long_shl(a,b){b&=63;if(b===0){return a;}else if(b<32){return new Long(a.lo<>>32 -b|a.hi<>>b|a.hi +<<32 -b,a.hi>>b);}else if(b===32){return new Long(a.hi,a.hi>>31);}else {return new Long(a.hi>>b -32,a.hi>>31);}}function Long_shru(a,b){b&=63;if(b===0){return a;}else if(b<32){return new Long(a.lo>>>b|a.hi<<32 -b,a.hi>>>b);}else if(b===32){return new Long(a.hi,0);}else {return new Long(a.hi>>>b -32,0);}}function LongInt(lo,hi,sup){this.lo=lo;this.hi=hi;this.sup=sup;}function LongInt_mul(a,b){var a_lolo=(a.lo&0xFFFF)*b|0;var a_lohi=(a.lo>>>16)*b|0;var a_hilo=(a.hi&0xFFFF)*b|0;var a_hihi=(a.hi>>>16)*b|0;var sup +=a.sup*b|0;a_lohi=a_lohi+(a_lolo>>>16)|0;a_hilo=a_hilo+(a_lohi>>>16)|0;a_hihi=a_hihi+(a_hilo>>>16)|0;sup=sup+(a_hihi>>>16)|0;a.lo=a_lolo&0xFFFF|a_lohi<<16;a.hi=a_hilo&0xFFFF|a_hihi<<16;a.sup=sup&0xFFFF;}function LongInt_sub(a,b){var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;a_lolo=a_lolo -b_lolo|0;a_lohi=a_lohi -b_lohi+(a_lolo>>16)|0;a_hilo=a_hilo -b_hilo+(a_lohi>>16)|0;a_hihi=a_hihi - +b_hihi+(a_hilo>>16)|0;var sup=a.sup -b.sup+(a_hihi>>16)|0;a.lo=a_lolo&0xFFFF|a_lohi<<16;a.hi=a_hilo&0xFFFF|a_hihi<<16;a.sup=sup;}function LongInt_add(a,b){var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;a_lolo=a_lolo+b_lolo|0;a_lohi=a_lohi+b_lohi+(a_lolo>>16)|0;a_hilo=a_hilo+b_hilo+(a_lohi>>16)|0;a_hihi=a_hihi+b_hihi+(a_hilo>>16)|0;var sup=a.sup+b.sup+(a_hihi>>16)|0;a.lo=a_lolo&0xFFFF +|a_lohi<<16;a.hi=a_hilo&0xFFFF|a_hihi<<16;a.sup=sup;}function LongInt_inc(a){a.lo=a.lo+1|0;if(a.lo===0){a.hi=a.hi+1|0;if(a.hi===0){a.sup=a.sup+1&0xFFFF;}}}function LongInt_dec(a){a.lo=a.lo -1|0;if(a.lo=== -1){a.hi=a.hi -1|0;if(a.hi=== -1){a.sup=a.sup -1&0xFFFF;}}}function LongInt_ucompare(a,b){var r=a.sup -b.sup;if(r!==0){return r;}r=(a.hi>>>1) -(b.hi>>>1);if(r!==0){return r;}r=(a.hi&1) -(b.hi&1);if(r!==0){return r;}r=(a.lo>>>1) -(b.lo>>>1);if(r!==0){return r;}return (a.lo&1) -(b.lo&1);}function LongInt_numOfLeadingZeroBits(a) +{var n=0;var d=16;while(d>0){if(a>>>d!==0){a>>>=d;n=n+d|0;}d=d/2|0;}return 31 -n;}function LongInt_shl(a,b){if(b===0){return;}if(b<32){a.sup=(a.hi>>>32 -b|a.sup<>>32 -b|a.hi<>>64 -b|a.hi<>>b|a.hi<<32 -b;a.hi=a.hi>>>b|a.sup<<32 -b;a.sup>>>=b;}else if(b===64){a.lo=a.sup;a.hi=0;a.sup=0;}else if(b<64){a.lo=a.hi>>>b -32|a.sup<<64 -b;a.hi=a.sup>>>b -32;a.sup=0;}else {a.lo=a.sup>>>b -64;a.hi=0;a.sup=0;}}function LongInt_copy(a){return new LongInt(a.lo,a.hi,a.sup);}function LongInt_div(a,b){var bits=b.hi!==0?LongInt_numOfLeadingZeroBits(b.hi):LongInt_numOfLeadingZeroBits(b.lo)+32;var sz=1+(bits/16|0);var dividentBits=bits%16;LongInt_shl(b,bits);LongInt_shl(a,dividentBits);var q +=new LongInt(0,0,0);while(sz-->0){LongInt_shl(q,16);var digitA=(a.hi>>>16)+0x10000*a.sup;var digitB=b.hi>>>16;var digit=digitA/digitB|0;var t=LongInt_copy(b);LongInt_mul(t,digit);if(LongInt_ucompare(t,a)>=0){while(LongInt_ucompare(t,a)>0){LongInt_sub(t,b); --digit;}}else {while(true){var nextT=LongInt_copy(t);LongInt_add(nextT,b);if(LongInt_ucompare(nextT,a)>0){break;}t=nextT;++digit;}}LongInt_sub(a,t);q.lo|=digit;LongInt_shl(a,16);}LongInt_shr(a,bits+16);return q;}function $rt_startThread(runner,callback){var result;try {result +=runner();}catch(e){result=e;}if(typeof callback!=='undefined'){callback(result);}else if(result instanceof Error){throw result;}}function $rt_suspending(){return false;}function $rt_resuming(){return false;}function $rt_nativeThread(){return null;}function $rt_invalidPointer(){}main=$rt_mainStarter(Jd); +(function(){var c;c=DM.prototype;c.handleEvent=c.b8;c=DO.prototype;c.handleEvent=c.b8;c=D8.prototype;c.dispatchEvent=c.e6;c.addEventListener=c.fA;c.removeEventListener=c.ft;c.getLength=c.e_;c.get=c.eP;c.addEventListener=c.fE;c.removeEventListener=c.eT;c=DN.prototype;c.handleEvent=c.b8;})(); +})(); diff --git a/teavm/index.html b/teavm/index.html index 4337d3b..982bd79 100644 --- a/teavm/index.html +++ b/teavm/index.html @@ -12,29 +12,103 @@ padding: 20px; background-color: #f5f5f5; } - #message { - padding: 20px; + #game-container { + padding: 30px; background: white; border-radius: 8px; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); + box-shadow: 0 2px 8px rgba(0,0,0,0.1); } h1 { color: #333; + text-align: center; + margin-bottom: 20px; } p { line-height: 1.6; color: #666; + text-align: center; + } + #guess-count { + font-weight: bold; + color: #555; + margin: 20px 0; + } + #guess-input { + width: 100%; + padding: 10px; + font-size: 16px; + border: 2px solid #ddd; + border-radius: 4px; + box-sizing: border-box; + margin: 10px 0; + } + button { + width: 100%; + padding: 12px; + font-size: 16px; + background-color: #4CAF50; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + margin: 10px 0; + transition: background-color 0.3s; + } + button:hover { + background-color: #45a049; + } + button:disabled { + background-color: #cccccc; + cursor: not-allowed; + } + #new-game-button { + background-color: #008CBA; + } + #new-game-button:hover { + background-color: #007399; + } + #feedback { + padding: 15px; + border-radius: 4px; + margin: 20px 0; + text-align: center; + font-weight: bold; + min-height: 20px; + } + .feedback-error { + background-color: #ffebee; + color: #c62828; + } + .feedback-high { + background-color: #fff3e0; + color: #e65100; + } + .feedback-low { + background-color: #e3f2fd; + color: #1565c0; + } + .feedback-success { + background-color: #e8f5e9; + color: #2e7d32; + } + footer { + text-align: center; + margin-top: 30px; + color: #999; + font-size: 14px; } -
-

Number Guessing Game

-

Loading application...

-

Compiled with TeaVM

+
+
+
+

Powered by TeaVM - Java compiled to JavaScript

+
From 58e144173c1c383e7eca783bc33723d0f110dce7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:22:35 +0000 Subject: [PATCH 11/11] Final changes: update .gitignore, README, and documentation Co-authored-by: Project516 <138796702+Project516@users.noreply.github.com> --- .gitignore | 2 ++ README.md | 3 ++- app/build.gradle | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 54afea8..2ab5edd 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,5 @@ NumberGuessingGame-windows.zip NumberGuessingGame-macos.zip NumberGuessingGame-linux.tar.gz +# TeaVM generated JavaScript (build artifact) +teavm/classes.js diff --git a/README.md b/README.md index f9f08ca..866b2ac 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ A simple number guessing game where you try to guess a randomly generated number **Features:** - Swing-based GUI (default) - Console mode (use `--console` flag) +- Web browser version (available on GitHub Pages) - Cross-platform ## Installation & Running @@ -59,7 +60,7 @@ Download the `archive.zip` from the [latest release](https://github.com/project5 #### Requirements -- Java 8 or higher (may require Java 17+ in future versions) +- Java 11 or higher #### How to Run diff --git a/app/build.gradle b/app/build.gradle index 92a84af..7b5aa1d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,7 +41,9 @@ java { } tasks.withType(JavaCompile) { - // Changed from 8 to 11 to support TeaVM for web deployment + // Changed from 8 to 11 to support TeaVM for web deployment. + // TeaVM 0.10.2+ requires Java 11 as minimum target. + // This change affects the minimum JRE required to run the JAR. options.release.set(11) }