diff --git a/.gitignore b/.gitignore index c3d54ada..2ba8d4a7 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,7 @@ src/primaite/notebooks/scratch.py sandbox.py sandbox/ sandbox.ipynb + +# benchmarking +**/benchmark/sessions/ +**/benchmark/output/ diff --git a/benchmark/benchmark.py b/benchmark/benchmark.py new file mode 100644 index 00000000..5212b5d2 --- /dev/null +++ b/benchmark/benchmark.py @@ -0,0 +1,21 @@ +from typing import Any, Dict, Optional, Tuple + +from gymnasium.core import ObsType + +from primaite.session.environment import PrimaiteGymEnv + + +class BenchmarkPrimaiteGymEnv(PrimaiteGymEnv): + """ + Class that extends the PrimaiteGymEnv. + + The reset method is extended so that the average rewards per episode are recorded. + """ + + total_time_steps: int = 0 + + def reset(self, seed: Optional[int] = None) -> Tuple[ObsType, Dict[str, Any]]: + """Overrides the PrimAITEGymEnv reset so that the total timesteps is saved.""" + self.total_time_steps += self.game.step_counter + + return super().reset(seed=seed) diff --git a/benchmark/primaite_benchmark.py b/benchmark/primaite_benchmark.py index 226bb71e..ac38e360 100644 --- a/benchmark/primaite_benchmark.py +++ b/benchmark/primaite_benchmark.py @@ -1,33 +1,15 @@ -# flake8: noqa -raise DeprecationWarning( - "Benchmarking depends on deprecated functionality and it has not been updated to primaite v3 yet." -) # © Crown-owned copyright 2023, Defence Science and Technology Laboratory UK -import json -import platform import shutil -import sys from datetime import datetime from pathlib import Path -from typing import Any, Dict, Final, Optional, Tuple, Union -from unittest.mock import patch +from typing import Any, Dict, Final, Tuple -import GPUtil -import plotly.graph_objects as go -import polars as pl -import psutil -import yaml -from plotly.graph_objs import Figure -from pylatex import Command, Document -from pylatex import Figure as LatexFigure -from pylatex import Section, Subsection, Tabular -from pylatex.utils import bold +from report import build_benchmark_latex_report +from stable_baselines3 import PPO import primaite -from primaite.config.lay_down_config import data_manipulation_config_path -from primaite.data_viz.session_plots import get_plotly_config -from primaite.environment.primaite_env import Primaite -from primaite.primaite_session import PrimaiteSession +from benchmark import BenchmarkPrimaiteGymEnv +from primaite.config.load import data_manipulation_config_path _LOGGER = primaite.getLogger(__name__) @@ -41,171 +23,74 @@ if _OUTPUT_ROOT.exists(): shutil.rmtree(_OUTPUT_ROOT) _OUTPUT_ROOT.mkdir() -_TRAINING_CONFIG_PATH = _BENCHMARK_ROOT / "config" / "benchmark_training_config.yaml" -_LAY_DOWN_CONFIG_PATH = data_manipulation_config_path() +class BenchmarkSession: + """Benchmark Session class.""" -def get_size(size_bytes: int) -> str: - """ - Scale bytes to its proper format. + gym_env: BenchmarkPrimaiteGymEnv + """Gym environment used by the session to train.""" - e.g: - 1253656 => '1.20MB' - 1253656678 => '1.17GB' + num_episodes: int + """Number of episodes to run the training session.""" - : - """ - factor = 1024 - for unit in ["", "K", "M", "G", "T", "P"]: - if size_bytes < factor: - return f"{size_bytes:.2f}{unit}B" - size_bytes /= factor + episode_len: int + """The number of steps per episode.""" + total_steps: int + """Number of steps to run the training session.""" -def _get_system_info() -> Dict: - """Builds and returns a dict containing system info.""" - uname = platform.uname() - cpu_freq = psutil.cpu_freq() - virtual_mem = psutil.virtual_memory() - swap_mem = psutil.swap_memory() - gpus = GPUtil.getGPUs() - return { - "System": { - "OS": uname.system, - "OS Version": uname.version, - "Machine": uname.machine, - "Processor": uname.processor, - }, - "CPU": { - "Physical Cores": psutil.cpu_count(logical=False), - "Total Cores": psutil.cpu_count(logical=True), - "Max Frequency": f"{cpu_freq.max:.2f}Mhz", - }, - "Memory": {"Total": get_size(virtual_mem.total), "Swap Total": get_size(swap_mem.total)}, - "GPU": [{"Name": gpu.name, "Total Memory": f"{gpu.memoryTotal}MB"} for gpu in gpus], - } + batch_size: int + """Number of steps for each episode.""" + learning_rate: float + """Learning rate for the model.""" -def _build_benchmark_latex_report( - benchmark_metadata_dict: Dict, this_version_plot_path: Path, all_version_plot_path: Path -) -> None: - geometry_options = {"tmargin": "2.5cm", "rmargin": "2.5cm", "bmargin": "2.5cm", "lmargin": "2.5cm"} - data = benchmark_metadata_dict - primaite_version = data["primaite_version"] + start_time: datetime + """Start time for the session.""" - # Create a new document - doc = Document("report", geometry_options=geometry_options) - # Title - doc.preamble.append(Command("title", f"PrimAITE {primaite_version} Learning Benchmark")) - doc.preamble.append(Command("author", "PrimAITE Dev Team")) - doc.preamble.append(Command("date", datetime.now().date())) - doc.append(Command("maketitle")) + end_time: datetime + """End time for the session.""" - sessions = data["total_sessions"] - episodes = data["training_config"]["num_train_episodes"] - steps = data["training_config"]["num_train_steps"] - - # Body - with doc.create(Section("Introduction")): - doc.append( - f"PrimAITE v{primaite_version} was benchmarked automatically upon release. Learning rate metrics " - f"were captured to be referenced during system-level testing and user acceptance testing (UAT)." - ) - doc.append( - f"\nThe benchmarking process consists of running {sessions} training session using the same " - f"training and lay down config files. Each session trains an agent for {episodes} episodes, " - f"with each episode consisting of {steps} steps." - ) - doc.append( - f"\nThe mean reward per episode from each session is captured. This is then used to calculate a " - f"combined average reward per episode from the {sessions} individual sessions for smoothing. " - f"Finally, a 25-widow rolling average of the combined average reward per session is calculated for " - f"further smoothing." - ) - - with doc.create(Section("System Information")): - with doc.create(Subsection("Python")): - with doc.create(Tabular("|l|l|")) as table: - table.add_hline() - table.add_row((bold("Version"), sys.version)) - table.add_hline() - for section, section_data in data["system_info"].items(): - if section_data: - with doc.create(Subsection(section)): - if isinstance(section_data, dict): - with doc.create(Tabular("|l|l|")) as table: - table.add_hline() - for key, value in section_data.items(): - table.add_row((bold(key), value)) - table.add_hline() - elif isinstance(section_data, list): - headers = section_data[0].keys() - tabs_str = "|".join(["l" for _ in range(len(headers))]) - tabs_str = f"|{tabs_str}|" - with doc.create(Tabular(tabs_str)) as table: - table.add_hline() - table.add_row([bold(h) for h in headers]) - table.add_hline() - for item in section_data: - table.add_row(item.values()) - table.add_hline() - - headers_map = { - "total_sessions": "Total Sessions", - "total_episodes": "Total Episodes", - "total_time_steps": "Total Steps", - "av_s_per_session": "Av Session Duration (s)", - "av_s_per_step": "Av Step Duration (s)", - "av_s_per_100_steps_10_nodes": "Av Duration per 100 Steps per 10 Nodes (s)", - } - with doc.create(Section("Stats")): - with doc.create(Subsection("Benchmark Results")): - with doc.create(Tabular("|l|l|")) as table: - table.add_hline() - for section, header in headers_map.items(): - if section.startswith("av_"): - table.add_row((bold(header), f"{data[section]:.4f}")) - else: - table.add_row((bold(header), data[section])) - table.add_hline() - - with doc.create(Section("Graphs")): - with doc.create(Subsection(f"PrimAITE {primaite_version} Learning Benchmark Plot")): - with doc.create(LatexFigure(position="h!")) as pic: - pic.add_image(str(this_version_plot_path)) - pic.add_caption(f"PrimAITE {primaite_version} Learning Benchmark Plot") - - with doc.create(Subsection("PrimAITE All Versions Learning Benchmark Plot")): - with doc.create(LatexFigure(position="h!")) as pic: - pic.add_image(str(all_version_plot_path)) - pic.add_caption("PrimAITE All Versions Learning Benchmark Plot") - - doc.generate_pdf(str(this_version_plot_path).replace(".png", ""), clean_tex=True) - - -class BenchmarkPrimaiteSession(PrimaiteSession): - """A benchmarking primaite session.""" + session_metadata: Dict + """Dict containing the metadata for the session - used to generate benchmark report.""" def __init__( self, - training_config_path: Union[str, Path], - lay_down_config_path: Union[str, Path], - ) -> None: - super().__init__(training_config_path, lay_down_config_path) - self.setup() + gym_env: BenchmarkPrimaiteGymEnv, + episode_len: int, + num_episodes: int, + n_steps: int, + batch_size: int, + learning_rate: float, + ): + """Initialise the BenchmarkSession.""" + self.gym_env = gym_env + self.episode_len = episode_len + self.n_steps = n_steps + self.num_episodes = num_episodes + self.total_steps = self.num_episodes * self.episode_len + self.batch_size = batch_size + self.learning_rate = learning_rate - @property - def env(self) -> Primaite: - """Direct access to the env for ease of testing.""" - return self._agent_session._env # noqa + def train(self): + """Run the training session.""" + # start timer for session + self.start_time = datetime.now() + model = PPO( + policy="MlpPolicy", + env=self.gym_env, + learning_rate=self.learning_rate, + n_steps=self.n_steps, + batch_size=self.batch_size, + verbose=0, + tensorboard_log="./PPO_UC2/", + ) + model.learn(total_timesteps=self.total_steps) - def __enter__(self) -> "BenchmarkPrimaiteSession": - return self + # end timer for session + self.end_time = datetime.now() - # TODO: typehints uncertain - def __exit__(self, type: Any, value: Any, tb: Any) -> None: - shutil.rmtree(self.session_path) - _LOGGER.debug(f"Deleted benchmark session directory: {self.session_path}") + self.session_metadata = self.generate_learn_metadata_dict() def _learn_benchmark_durations(self) -> Tuple[float, float, float]: """ @@ -219,235 +104,93 @@ class BenchmarkPrimaiteSession(PrimaiteSession): :return: The learning benchmark durations as a Tuple of three floats: Tuple[total_s, s_per_step, s_per_100_steps_10_nodes]. """ - data = self.metadata_file_as_dict() - start_dt = datetime.fromisoformat(data["start_datetime"]) - end_dt = datetime.fromisoformat(data["end_datetime"]) - delta = end_dt - start_dt + delta = self.end_time - self.start_time total_s = delta.total_seconds() - total_steps = data["learning"]["total_time_steps"] + total_steps = self.batch_size * self.num_episodes s_per_step = total_s / total_steps - num_nodes = self.env.num_nodes + num_nodes = len(self.gym_env.game.simulation.network.nodes) num_intervals = total_steps / 100 av_interval_time = total_s / num_intervals s_per_100_steps_10_nodes = av_interval_time / (num_nodes / 10) return total_s, s_per_step, s_per_100_steps_10_nodes - def learn_metadata_dict(self) -> Dict[str, Any]: + def generate_learn_metadata_dict(self) -> Dict[str, Any]: """Metadata specific to the learning session.""" total_s, s_per_step, s_per_100_steps_10_nodes = self._learn_benchmark_durations() + self.gym_env.average_reward_per_episode.pop(0) # remove episode 0 return { - "total_episodes": self.env.actual_episode_count, - "total_time_steps": self.env.total_step_count, + "total_episodes": self.gym_env.episode_counter, + "total_time_steps": self.gym_env.total_time_steps, "total_s": total_s, "s_per_step": s_per_step, "s_per_100_steps_10_nodes": s_per_100_steps_10_nodes, - "av_reward_per_episode": self.learn_av_reward_per_episode_dict(), + "av_reward_per_episode": self.gym_env.average_reward_per_episode, } -def _get_benchmark_session_path(session_timestamp: datetime) -> Path: - return _OUTPUT_ROOT / session_timestamp.strftime("%Y-%m-%d_%H-%M-%S") - - -def _get_benchmark_primaite_session() -> BenchmarkPrimaiteSession: - with patch("primaite.agents.agent_abc.get_session_path", _get_benchmark_session_path) as mck: - mck.session_timestamp = datetime.now() - return BenchmarkPrimaiteSession(_TRAINING_CONFIG_PATH, _LAY_DOWN_CONFIG_PATH) - - -def _build_benchmark_results_dict(start_datetime: datetime, metadata_dict: Dict) -> dict: - n = len(metadata_dict) - with open(_TRAINING_CONFIG_PATH, "r") as file: - training_config_dict = yaml.safe_load(file) - with open(_LAY_DOWN_CONFIG_PATH, "r") as file: - lay_down_config_dict = yaml.safe_load(file) - averaged_data = { - "start_timestamp": start_datetime.isoformat(), - "end_datetime": datetime.now().isoformat(), - "primaite_version": primaite.__version__, - "system_info": _get_system_info(), - "total_sessions": n, - "total_episodes": sum(d["total_episodes"] for d in metadata_dict.values()), - "total_time_steps": sum(d["total_time_steps"] for d in metadata_dict.values()), - "av_s_per_session": sum(d["total_s"] for d in metadata_dict.values()) / n, - "av_s_per_step": sum(d["s_per_step"] for d in metadata_dict.values()) / n, - "av_s_per_100_steps_10_nodes": sum(d["s_per_100_steps_10_nodes"] for d in metadata_dict.values()) / n, - "combined_av_reward_per_episode": {}, - "session_av_reward_per_episode": {k: v["av_reward_per_episode"] for k, v in metadata_dict.items()}, - "training_config": training_config_dict, - "lay_down_config": lay_down_config_dict, - } - - episodes = metadata_dict[1]["av_reward_per_episode"].keys() - - for episode in episodes: - combined_av_reward = sum(metadata_dict[k]["av_reward_per_episode"][episode] for k in metadata_dict.keys()) / n - averaged_data["combined_av_reward_per_episode"][episode] = combined_av_reward - - return averaged_data - - -def _get_df_from_episode_av_reward_dict(data: Dict) -> pl.DataFrame: - data: Dict = {"episode": data.keys(), "av_reward": data.values()} - - return ( - pl.from_dict(data) - .with_columns(rolling_mean=pl.col("av_reward").rolling_mean(window_size=25)) - .rename({"rolling_mean": "rolling_av_reward"}) - ) - - -def _plot_benchmark_metadata( - benchmark_metadata_dict: Dict, - title: Optional[str] = None, - subtitle: Optional[str] = None, -) -> Figure: - if title: - if subtitle: - title = f"{title}
{subtitle}" - else: - if subtitle: - title = subtitle - - config = get_plotly_config() - layout = go.Layout( - autosize=config["size"]["auto_size"], - width=config["size"]["width"], - height=config["size"]["height"], - ) - # Create the line graph with a colored line - fig = go.Figure(layout=layout) - fig.update_layout(template=config["template"]) - - for session, av_reward_dict in benchmark_metadata_dict["session_av_reward_per_episode"].items(): - df = _get_df_from_episode_av_reward_dict(av_reward_dict) - fig.add_trace( - go.Scatter( - x=df["episode"], - y=df["av_reward"], - mode="lines", - name=f"Session {session}", - opacity=0.25, - line={"color": "#a6a6a6"}, - ) - ) - - df = _get_df_from_episode_av_reward_dict(benchmark_metadata_dict["combined_av_reward_per_episode"]) - fig.add_trace( - go.Scatter( - x=df["episode"], y=df["av_reward"], mode="lines", name="Combined Session Av", line={"color": "#FF0000"} - ) - ) - - fig.add_trace( - go.Scatter( - x=df["episode"], - y=df["rolling_av_reward"], - mode="lines", - name="Rolling Av (Combined Session Av)", - line={"color": "#4CBB17"}, - ) - ) - - # Set the layout of the graph - fig.update_layout( - xaxis={ - "title": "Episode", - "type": "linear", - }, - yaxis={"title": "Average Reward"}, - title=title, - ) - - return fig - - -def _plot_all_benchmarks_combined_session_av() -> Figure: +def _get_benchmark_primaite_environment() -> BenchmarkPrimaiteGymEnv: """ - Plot the Benchmark results for each released version of PrimAITE. + Create an instance of the BenchmarkPrimaiteGymEnv. - Does this by iterating over the ``benchmark/results`` directory and - extracting the benchmark metadata json for each version that has been - benchmarked. The combined_av_reward_per_episode is extracted from each, - converted into a polars dataframe, and plotted as a scatter line in plotly. + This environment will be used to train the agents on. """ - title = "PrimAITE Versions Learning Benchmark" - subtitle = "Rolling Av (Combined Session Av)" - if title: - if subtitle: - title = f"{title}
{subtitle}" - else: - if subtitle: - title = subtitle - config = get_plotly_config() - layout = go.Layout( - autosize=config["size"]["auto_size"], - width=config["size"]["width"], - height=config["size"]["height"], - ) - # Create the line graph with a colored line - fig = go.Figure(layout=layout) - fig.update_layout(template=config["template"]) - - for dir in _RESULTS_ROOT.iterdir(): - if dir.is_dir(): - metadata_file = dir / f"{dir.name}_benchmark_metadata.json" - with open(metadata_file, "r") as file: - metadata_dict = json.load(file) - df = _get_df_from_episode_av_reward_dict(metadata_dict["combined_av_reward_per_episode"]) - - fig.add_trace(go.Scatter(x=df["episode"], y=df["rolling_av_reward"], mode="lines", name=dir.name)) - - # Set the layout of the graph - fig.update_layout( - xaxis={ - "title": "Episode", - "type": "linear", - }, - yaxis={"title": "Average Reward"}, - title=title, - ) - fig["data"][0]["showlegend"] = True - - return fig + env = BenchmarkPrimaiteGymEnv(env_config=data_manipulation_config_path()) + return env -def run() -> None: +def _prepare_session_directory(): + """Prepare the session directory so that it is easier to clean up after the benchmarking is done.""" + # override session path + session_path = _BENCHMARK_ROOT / "sessions" + + if session_path.is_dir(): + shutil.rmtree(session_path) + + primaite.PRIMAITE_PATHS.user_sessions_path = session_path + primaite.PRIMAITE_PATHS.user_sessions_path.mkdir(exist_ok=True, parents=True) + + +def run( + number_of_sessions: int = 5, + num_episodes: int = 1000, + episode_len: int = 128, + n_steps: int = 1280, + batch_size: int = 32, + learning_rate: float = 3e-4, +) -> None: """Run the PrimAITE benchmark.""" - start_datetime = datetime.now() - av_reward_per_episode_dicts = {} - for i in range(1, 11): + benchmark_start_time = datetime.now() + + session_metadata_dict = {} + + _prepare_session_directory() + + # run training + for i in range(1, number_of_sessions + 1): print(f"Starting Benchmark Session: {i}") - with _get_benchmark_primaite_session() as session: - session.learn() - av_reward_per_episode_dicts[i] = session.learn_metadata_dict() - benchmark_metadata = _build_benchmark_results_dict( - start_datetime=start_datetime, metadata_dict=av_reward_per_episode_dicts + with _get_benchmark_primaite_environment() as gym_env: + session = BenchmarkSession( + gym_env=gym_env, + num_episodes=num_episodes, + n_steps=n_steps, + episode_len=episode_len, + batch_size=batch_size, + learning_rate=learning_rate, + ) + session.train() + session_metadata_dict[i] = session.session_metadata + + # generate report + build_benchmark_latex_report( + benchmark_start_time=benchmark_start_time, + session_metadata=session_metadata_dict, + config_path=data_manipulation_config_path(), + results_root_path=_RESULTS_ROOT, ) - v_str = f"v{primaite.__version__}" - - version_result_dir = _RESULTS_ROOT / v_str - if version_result_dir.exists(): - shutil.rmtree(version_result_dir) - version_result_dir.mkdir(exist_ok=True, parents=True) - - with open(version_result_dir / f"{v_str}_benchmark_metadata.json", "w") as file: - json.dump(benchmark_metadata, file, indent=4) - title = f"PrimAITE v{primaite.__version__.strip()} Learning Benchmark" - fig = _plot_benchmark_metadata(benchmark_metadata, title=title) - this_version_plot_path = version_result_dir / f"{title}.png" - fig.write_image(this_version_plot_path) - - fig = _plot_all_benchmarks_combined_session_av() - - all_version_plot_path = _RESULTS_ROOT / "PrimAITE Versions Learning Benchmark.png" - fig.write_image(all_version_plot_path) - - _build_benchmark_latex_report(benchmark_metadata, this_version_plot_path, all_version_plot_path) if __name__ == "__main__": diff --git a/benchmark/report.py b/benchmark/report.py new file mode 100644 index 00000000..d4d8ec76 --- /dev/null +++ b/benchmark/report.py @@ -0,0 +1,307 @@ +# © Crown-owned copyright 2023, Defence Science and Technology Laboratory UK +import json +import shutil +import sys +from datetime import datetime +from pathlib import Path +from typing import Dict, Optional + +import plotly.graph_objects as go +import polars as pl +import yaml +from plotly.graph_objs import Figure +from pylatex import Command, Document +from pylatex import Figure as LatexFigure +from pylatex import Section, Subsection, Tabular +from pylatex.utils import bold +from utils import _get_system_info + +import primaite + +PLOT_CONFIG = { + "size": {"auto_size": False, "width": 1500, "height": 900}, + "template": "plotly_white", + "range_slider": False, +} + + +def _build_benchmark_results_dict(start_datetime: datetime, metadata_dict: Dict, config: Dict) -> dict: + num_sessions = len(metadata_dict) # number of sessions + + averaged_data = { + "start_timestamp": start_datetime.isoformat(), + "end_datetime": datetime.now().isoformat(), + "primaite_version": primaite.__version__, + "system_info": _get_system_info(), + "total_sessions": num_sessions, + "total_episodes": sum(d["total_episodes"] for d in metadata_dict.values()), + "total_time_steps": sum(d["total_time_steps"] for d in metadata_dict.values()), + "av_s_per_session": sum(d["total_s"] for d in metadata_dict.values()) / num_sessions, + "av_s_per_step": sum(d["s_per_step"] for d in metadata_dict.values()) / num_sessions, + "av_s_per_100_steps_10_nodes": sum(d["s_per_100_steps_10_nodes"] for d in metadata_dict.values()) + / num_sessions, + "combined_av_reward_per_episode": {}, + "session_av_reward_per_episode": {k: v["av_reward_per_episode"] for k, v in metadata_dict.items()}, + "config": config, + } + + # find the average of each episode across all sessions + episodes = metadata_dict[1]["av_reward_per_episode"].keys() + + for episode in episodes: + combined_av_reward = ( + sum(metadata_dict[k]["av_reward_per_episode"][episode] for k in metadata_dict.keys()) / num_sessions + ) + averaged_data["combined_av_reward_per_episode"][episode] = combined_av_reward + + return averaged_data + + +def _get_df_from_episode_av_reward_dict(data: Dict) -> pl.DataFrame: + data: Dict = {"episode": data.keys(), "av_reward": data.values()} + + return ( + pl.from_dict(data) + .with_columns(rolling_mean=pl.col("av_reward").rolling_mean(window_size=25)) + .rename({"rolling_mean": "rolling_av_reward"}) + ) + + +def _plot_benchmark_metadata( + benchmark_metadata_dict: Dict, + title: Optional[str] = None, + subtitle: Optional[str] = None, +) -> Figure: + if title: + if subtitle: + title = f"{title}
{subtitle}" + else: + if subtitle: + title = subtitle + + layout = go.Layout( + autosize=PLOT_CONFIG["size"]["auto_size"], + width=PLOT_CONFIG["size"]["width"], + height=PLOT_CONFIG["size"]["height"], + ) + # Create the line graph with a colored line + fig = go.Figure(layout=layout) + fig.update_layout(template=PLOT_CONFIG["template"]) + + for session, av_reward_dict in benchmark_metadata_dict["session_av_reward_per_episode"].items(): + df = _get_df_from_episode_av_reward_dict(av_reward_dict) + fig.add_trace( + go.Scatter( + x=df["episode"], + y=df["av_reward"], + mode="lines", + name=f"Session {session}", + opacity=0.25, + line={"color": "#a6a6a6"}, + ) + ) + + df = _get_df_from_episode_av_reward_dict(benchmark_metadata_dict["combined_av_reward_per_episode"]) + fig.add_trace( + go.Scatter( + x=df["episode"], y=df["av_reward"], mode="lines", name="Combined Session Av", line={"color": "#FF0000"} + ) + ) + + fig.add_trace( + go.Scatter( + x=df["episode"], + y=df["rolling_av_reward"], + mode="lines", + name="Rolling Av (Combined Session Av)", + line={"color": "#4CBB17"}, + ) + ) + + # Set the layout of the graph + fig.update_layout( + xaxis={ + "title": "Episode", + "type": "linear", + }, + yaxis={"title": "Average Reward"}, + title=title, + ) + + return fig + + +def _plot_all_benchmarks_combined_session_av(results_directory: Path) -> Figure: + """ + Plot the Benchmark results for each released version of PrimAITE. + + Does this by iterating over the ``benchmark/results`` directory and + extracting the benchmark metadata json for each version that has been + benchmarked. The combined_av_reward_per_episode is extracted from each, + converted into a polars dataframe, and plotted as a scatter line in plotly. + """ + title = "PrimAITE Versions Learning Benchmark" + subtitle = "Rolling Av (Combined Session Av)" + if title: + if subtitle: + title = f"{title}
{subtitle}" + else: + if subtitle: + title = subtitle + layout = go.Layout( + autosize=PLOT_CONFIG["size"]["auto_size"], + width=PLOT_CONFIG["size"]["width"], + height=PLOT_CONFIG["size"]["height"], + ) + # Create the line graph with a colored line + fig = go.Figure(layout=layout) + fig.update_layout(template=PLOT_CONFIG["template"]) + + for dir in results_directory.iterdir(): + if dir.is_dir(): + metadata_file = dir / f"{dir.name}_benchmark_metadata.json" + with open(metadata_file, "r") as file: + metadata_dict = json.load(file) + df = _get_df_from_episode_av_reward_dict(metadata_dict["combined_av_reward_per_episode"]) + + fig.add_trace(go.Scatter(x=df["episode"], y=df["rolling_av_reward"], mode="lines", name=dir.name)) + + # Set the layout of the graph + fig.update_layout( + xaxis={ + "title": "Episode", + "type": "linear", + }, + yaxis={"title": "Average Reward"}, + title=title, + ) + fig["data"][0]["showlegend"] = True + + return fig + + +def build_benchmark_latex_report( + benchmark_start_time: datetime, session_metadata: Dict, config_path: Path, results_root_path: Path +) -> None: + """Generates a latex report of the benchmark run.""" + # generate report folder + v_str = f"v{primaite.__version__}" + + version_result_dir = results_root_path / v_str + if version_result_dir.exists(): + shutil.rmtree(version_result_dir) + version_result_dir.mkdir(exist_ok=True, parents=True) + + # load the config file as dict + with open(config_path, "r") as f: + cfg_data = yaml.safe_load(f) + + # generate the benchmark metadata dict + benchmark_metadata_dict = _build_benchmark_results_dict( + start_datetime=benchmark_start_time, metadata_dict=session_metadata, config=cfg_data + ) + + with open(version_result_dir / f"{v_str}_benchmark_metadata.json", "w") as file: + json.dump(benchmark_metadata_dict, file, indent=4) + title = f"PrimAITE v{primaite.__version__.strip()} Learning Benchmark" + fig = _plot_benchmark_metadata(benchmark_metadata_dict, title=title) + this_version_plot_path = version_result_dir / f"{title}.png" + fig.write_image(this_version_plot_path) + + fig = _plot_all_benchmarks_combined_session_av(results_directory=results_root_path) + + all_version_plot_path = results_root_path / "PrimAITE Versions Learning Benchmark.png" + fig.write_image(all_version_plot_path) + + geometry_options = {"tmargin": "2.5cm", "rmargin": "2.5cm", "bmargin": "2.5cm", "lmargin": "2.5cm"} + data = benchmark_metadata_dict + primaite_version = data["primaite_version"] + + # Create a new document + doc = Document("report", geometry_options=geometry_options) + # Title + doc.preamble.append(Command("title", f"PrimAITE {primaite_version} Learning Benchmark")) + doc.preamble.append(Command("author", "PrimAITE Dev Team")) + doc.preamble.append(Command("date", datetime.now().date())) + doc.append(Command("maketitle")) + + sessions = data["total_sessions"] + episodes = session_metadata[1]["total_episodes"] - 1 + steps = data["config"]["game"]["max_episode_length"] + + # Body + with doc.create(Section("Introduction")): + doc.append( + f"PrimAITE v{primaite_version} was benchmarked automatically upon release. Learning rate metrics " + f"were captured to be referenced during system-level testing and user acceptance testing (UAT)." + ) + doc.append( + f"\nThe benchmarking process consists of running {sessions} training session using the same " + f"config file. Each session trains an agent for {episodes} episodes, " + f"with each episode consisting of {steps} steps." + ) + doc.append( + f"\nThe mean reward per episode from each session is captured. This is then used to calculate a " + f"combined average reward per episode from the {sessions} individual sessions for smoothing. " + f"Finally, a 25-widow rolling average of the combined average reward per session is calculated for " + f"further smoothing." + ) + + with doc.create(Section("System Information")): + with doc.create(Subsection("Python")): + with doc.create(Tabular("|l|l|")) as table: + table.add_hline() + table.add_row((bold("Version"), sys.version)) + table.add_hline() + for section, section_data in data["system_info"].items(): + if section_data: + with doc.create(Subsection(section)): + if isinstance(section_data, dict): + with doc.create(Tabular("|l|l|")) as table: + table.add_hline() + for key, value in section_data.items(): + table.add_row((bold(key), value)) + table.add_hline() + elif isinstance(section_data, list): + headers = section_data[0].keys() + tabs_str = "|".join(["l" for _ in range(len(headers))]) + tabs_str = f"|{tabs_str}|" + with doc.create(Tabular(tabs_str)) as table: + table.add_hline() + table.add_row([bold(h) for h in headers]) + table.add_hline() + for item in section_data: + table.add_row(item.values()) + table.add_hline() + + headers_map = { + "total_sessions": "Total Sessions", + "total_episodes": "Total Episodes", + "total_time_steps": "Total Steps", + "av_s_per_session": "Av Session Duration (s)", + "av_s_per_step": "Av Step Duration (s)", + "av_s_per_100_steps_10_nodes": "Av Duration per 100 Steps per 10 Nodes (s)", + } + with doc.create(Section("Stats")): + with doc.create(Subsection("Benchmark Results")): + with doc.create(Tabular("|l|l|")) as table: + table.add_hline() + for section, header in headers_map.items(): + if section.startswith("av_"): + table.add_row((bold(header), f"{data[section]:.4f}")) + else: + table.add_row((bold(header), data[section])) + table.add_hline() + + with doc.create(Section("Graphs")): + with doc.create(Subsection(f"PrimAITE {primaite_version} Learning Benchmark Plot")): + with doc.create(LatexFigure(position="h!")) as pic: + pic.add_image(str(this_version_plot_path)) + pic.add_caption(f"PrimAITE {primaite_version} Learning Benchmark Plot") + + with doc.create(Subsection("PrimAITE All Versions Learning Benchmark Plot")): + with doc.create(LatexFigure(position="h!")) as pic: + pic.add_image(str(all_version_plot_path)) + pic.add_caption("PrimAITE All Versions Learning Benchmark Plot") + + doc.generate_pdf(str(this_version_plot_path).replace(".png", ""), clean_tex=True) diff --git a/benchmark/results/PrimAITE Versions Learning Benchmark.png b/benchmark/results/PrimAITE Versions Learning Benchmark.png index cd41f85f..d1f40a25 100644 Binary files a/benchmark/results/PrimAITE Versions Learning Benchmark.png and b/benchmark/results/PrimAITE Versions Learning Benchmark.png differ diff --git a/benchmark/results/v3.0.0/PrimAITE v3.0.0 Learning Benchmark.pdf b/benchmark/results/v3.0.0/PrimAITE v3.0.0 Learning Benchmark.pdf new file mode 100644 index 00000000..cc7359bd Binary files /dev/null and b/benchmark/results/v3.0.0/PrimAITE v3.0.0 Learning Benchmark.pdf differ diff --git a/benchmark/results/v3.0.0/PrimAITE v3.0.0 Learning Benchmark.png b/benchmark/results/v3.0.0/PrimAITE v3.0.0 Learning Benchmark.png new file mode 100644 index 00000000..9b830ff1 Binary files /dev/null and b/benchmark/results/v3.0.0/PrimAITE v3.0.0 Learning Benchmark.png differ diff --git a/benchmark/results/v3.0.0/v3.0.0_benchmark_metadata.json b/benchmark/results/v3.0.0/v3.0.0_benchmark_metadata.json new file mode 100644 index 00000000..b6780eac --- /dev/null +++ b/benchmark/results/v3.0.0/v3.0.0_benchmark_metadata.json @@ -0,0 +1,7436 @@ +{ + "start_timestamp": "2024-06-05T13:42:03.340305", + "end_datetime": "2024-06-05T18:09:12.905806", + "primaite_version": "3.0.0", + "system_info": { + "System": { + "OS": "Windows", + "OS Version": "10.0.22631", + "Machine": "AMD64", + "Processor": "Intel64 Family 6 Model 142 Stepping 12, GenuineIntel" + }, + "CPU": { + "Physical Cores": 4, + "Total Cores": 8, + "Max Frequency": "2304.00Mhz" + }, + "Memory": { + "Total": "15.68GB", + "Swap Total": "15.68GB" + }, + "GPU": [] + }, + "total_sessions": 5, + "total_episodes": 5005, + "total_time_steps": 640000, + "av_s_per_session": 3205.6340542, + "av_s_per_step": 0.10017606419375, + "av_s_per_100_steps_10_nodes": 10.017606419375, + "combined_av_reward_per_episode": { + "1": -53.42999999999999, + "2": -25.18000000000001, + "3": -42.00000000000002, + "4": -49.20000000000003, + "5": -51.42999999999999, + "6": -32.34, + "7": -25.680000000000025, + "8": -23.03000000000001, + "9": -26.399999999999984, + "10": -49.52000000000006, + "11": -32.61, + "12": -27.349999999999994, + "13": -24.01000000000001, + "14": -19.69999999999998, + "15": -47.260000000000005, + "16": -47.400000000000034, + "17": -47.86000000000008, + "18": -27.699999999999996, + "19": -39.24000000000005, + "20": -32.030000000000015, + "21": -38.98000000000001, + "22": -14.029999999999982, + "23": -32.34999999999999, + "24": -28.94999999999997, + "25": -40.05999999999999, + "26": -32.91999999999998, + "27": -31.399999999999988, + "28": -37.15000000000001, + "29": -32.399999999999984, + "30": -47.72000000000002, + "31": -25.46, + "32": -30.720000000000017, + "33": -35.14, + "34": -13.459999999999976, + "35": -29.610000000000003, + "36": -22.61999999999999, + "37": -34.569999999999986, + "38": -6.239999999999982, + "39": -16.459999999999972, + "40": -30.310000000000002, + "41": -26.680000000000007, + "42": -45.540000000000006, + "43": -18.13999999999998, + "44": -15.73999999999998, + "45": -58.73999999999999, + "46": -24.20999999999997, + "47": -53.60999999999997, + "48": -23.170000000000005, + "49": -34.02, + "50": -24.039999999999992, + "51": -31.199999999999978, + "52": -24.649999999999967, + "53": -22.16999999999999, + "54": -30.20999999999998, + "55": -31.639999999999997, + "56": -35.949999999999974, + "57": -13.60999999999998, + "58": -25.879999999999978, + "59": -34.28999999999998, + "60": -50.72000000000003, + "61": -67.51, + "62": -26.78999999999998, + "63": -54.01000000000001, + "64": -15.929999999999987, + "65": -16.53, + "66": -36.31000000000002, + "67": -29.529999999999983, + "68": -22.96999999999997, + "69": -48.43999999999997, + "70": -34.84999999999995, + "71": -24.289999999999985, + "72": -17.87999999999998, + "73": -26.54999999999999, + "74": -8.489999999999975, + "75": -29.31000000000001, + "76": -14.089999999999995, + "77": -55.120000000000005, + "78": -24.11999999999999, + "79": -22.309999999999988, + "80": -36.84000000000002, + "81": -31.66999999999998, + "82": -37.70000000000003, + "83": -34.35, + "84": -26.069999999999983, + "85": -12.879999999999978, + "86": -40.050000000000054, + "87": -32.15999999999998, + "88": -31.560000000000024, + "89": -9.029999999999989, + "90": -33.70999999999998, + "91": -35.04999999999998, + "92": -31.67999999999998, + "93": -19.529999999999987, + "94": -41.85, + "95": -67.88, + "96": -69.57000000000002, + "97": -20.369999999999994, + "98": -26.72999999999999, + "99": -16.359999999999975, + "100": -7.610000000000008, + "101": -15.309999999999974, + "102": -26.65999999999999, + "103": -61.219999999999985, + "104": -36.86999999999997, + "105": -39.419999999999995, + "106": -6.009999999999972, + "107": -30.83000000000003, + "108": -46.370000000000005, + "109": -32.24, + "110": -38.27000000000001, + "111": -31.140000000000004, + "112": -19.309999999999995, + "113": -32.33999999999997, + "114": -20.619999999999983, + "115": -35.19000000000001, + "116": -32.71, + "117": -25.07000000000002, + "118": -29.50999999999994, + "119": -47.98999999999999, + "120": -22.109999999999992, + "121": -36.819999999999965, + "122": -24.610000000000007, + "123": -22.18999999999999, + "124": -31.9, + "125": -15.389999999999981, + "126": -35.01999999999999, + "127": -15.619999999999987, + "128": -23.289999999999985, + "129": -20.81000000000001, + "130": -13.230000000000018, + "131": -29.029999999999983, + "132": -3.4100000000000277, + "133": -13.549999999999988, + "134": -14.329999999999979, + "135": -32.87999999999999, + "136": -30.660000000000025, + "137": -30.820000000000004, + "138": -9.909999999999982, + "139": 3.299999999999995, + "140": -57.36999999999999, + "141": -25.150000000000002, + "142": -25.65999999999998, + "143": -15.309999999999992, + "144": -31.309999999999995, + "145": -14.769999999999971, + "146": -33.14999999999999, + "147": -22.149999999999984, + "148": -12.060000000000006, + "149": -7.089999999999975, + "150": -17.639999999999997, + "151": -51.56999999999998, + "152": -35.87000000000002, + "153": -40.41999999999999, + "154": -8.030000000000014, + "155": -2.66999999999999, + "156": -26.26, + "157": -14.999999999999991, + "158": -38.25999999999996, + "159": -45.96000000000001, + "160": -44.23999999999999, + "161": -17.700000000000006, + "162": -2.6099999999999914, + "163": -48.91999999999998, + "164": -45.160000000000004, + "165": -29.349999999999977, + "166": -31.33000000000002, + "167": -17.660000000000032, + "168": -46.59999999999998, + "169": -14.210000000000031, + "170": -45.92, + "171": -43.59000000000001, + "172": -37.029999999999994, + "173": -22.75999999999998, + "174": -27.220000000000006, + "175": -7.579999999999979, + "176": -15.040000000000001, + "177": -40.389999999999986, + "178": -16.31000000000001, + "179": -39.35, + "180": -1.8099999999999805, + "181": -14.559999999999965, + "182": -15.529999999999987, + "183": -28.41999999999998, + "184": -35.60999999999999, + "185": 5.010000000000003, + "186": -36.85000000000001, + "187": -32.35999999999997, + "188": -36.400000000000006, + "189": -26.220000000000006, + "190": -21.849999999999994, + "191": -12.069999999999979, + "192": -43.44999999999999, + "193": -29.52, + "194": -16.929999999999996, + "195": -17.710000000000008, + "196": 5.560000000000011, + "197": -23.619999999999976, + "198": -23.599999999999994, + "199": -32.259999999999984, + "200": -7.279999999999996, + "201": -21.439999999999987, + "202": -37.07000000000001, + "203": -30.399999999999977, + "204": -12.809999999999977, + "205": -51.85999999999997, + "206": 1.8800000000000083, + "207": -33.49, + "208": -3.0000000000000298, + "209": -23.970000000000006, + "210": -14.099999999999998, + "211": -17.349999999999977, + "212": -18.699999999999967, + "213": -17.15, + "214": -0.05000000000001137, + "215": -19.03999999999999, + "216": -11.849999999999989, + "217": -20.549999999999976, + "218": -10.709999999999992, + "219": -34.01999999999997, + "220": -21.840000000000003, + "221": -6.460000000000008, + "222": -20.040000000000013, + "223": -6.370000000000017, + "224": -32.69999999999999, + "225": -62.30999999999997, + "226": -4.909999999999997, + "227": -40.0, + "228": 19.44000000000001, + "229": -27.57000000000003, + "230": -0.3800000000000779, + "231": 11.459999999999937, + "232": -14.889999999999986, + "233": -6.519999999999982, + "234": -18.159999999999986, + "235": -41.589999999999996, + "236": -11.99000000000001, + "237": 10.859999999999928, + "238": 10.859999999999994, + "239": -22.35999999999999, + "240": -18.699999999999996, + "241": 12.349999999999959, + "242": -15.650000000000025, + "243": -19.18000000000002, + "244": 7.369999999999931, + "245": 8.569999999999974, + "246": -15.379999999999987, + "247": -6.399999999999995, + "248": 21.57999999999999, + "249": -0.1500000000000142, + "250": -19.23999999999999, + "251": -11.97000000000006, + "252": 1.739999999999999, + "253": 5.599999999999978, + "254": 14.960000000000047, + "255": 14.360000000000003, + "256": 11.219999999999926, + "257": 23.279999999999973, + "258": 14.319999999999975, + "259": -5.600000000000001, + "260": -10.239999999999998, + "261": 26.639999999999993, + "262": 14.999999999999968, + "263": -16.400000000000016, + "264": 28.329999999999956, + "265": 12.909999999999954, + "266": -33.24000000000002, + "267": 31.80999999999999, + "268": 9.439999999999944, + "269": 11.429999999999984, + "270": 31.479999999999922, + "271": 2.879999999999971, + "272": 13.180000000000003, + "273": 1.9899999999999896, + "274": 52.75000000000008, + "275": 23.439999999999976, + "276": 18.219999999999946, + "277": 26.07000000000004, + "278": 34.619999999999926, + "279": 22.119999999999983, + "280": 2.890000000000023, + "281": 0.48999999999998634, + "282": 11.729999999999972, + "283": -3.0600000000000307, + "284": -26.960000000000015, + "285": 16.130000000000052, + "286": 49.25999999999998, + "287": 19.15999999999999, + "288": 15.869999999999948, + "289": 34.890000000000065, + "290": 31.34999999999992, + "291": 39.719999999999985, + "292": 38.04000000000004, + "293": -10.500000000000039, + "294": 53.67, + "295": 42.92, + "296": 23.02999999999995, + "297": 41.94000000000001, + "298": 6.339999999999941, + "299": 57.34000000000001, + "300": 52.01000000000005, + "301": 65.96999999999993, + "302": 12.410000000000005, + "303": 21.090000000000025, + "304": 30.76999999999999, + "305": 33.58999999999996, + "306": 50.77999999999996, + "307": 51.159999999999954, + "308": 47.610000000000014, + "309": 55.55999999999999, + "310": 37.16999999999997, + "311": 51.229999999999976, + "312": 34.76999999999997, + "313": 46.38999999999999, + "314": 39.539999999999964, + "315": 37.12999999999997, + "316": 18.609999999999964, + "317": 31.299999999999937, + "318": 45.48, + "319": 66.16999999999999, + "320": 57.57999999999991, + "321": 47.49999999999997, + "322": 61.73000000000002, + "323": 18.960000000000036, + "324": 17.059999999999953, + "325": 29.950000000000017, + "326": 72.55999999999997, + "327": 56.239999999999974, + "328": 52.93000000000005, + "329": 66.8500000000001, + "330": 41.69000000000004, + "331": 44.66000000000001, + "332": 18.389999999999972, + "333": 59.40999999999999, + "334": 38.26, + "335": 35.409999999999954, + "336": 72.00000000000004, + "337": 49.43000000000005, + "338": 54.30000000000001, + "339": 34.12000000000001, + "340": 36.649999999999984, + "341": 61.93999999999998, + "342": 64.25, + "343": 77.73000000000002, + "344": 56.30999999999996, + "345": 33.15999999999998, + "346": 97.51000000000002, + "347": 66.30000000000004, + "348": 62.129999999999995, + "349": 66.78000000000004, + "350": 74.30000000000004, + "351": 84.32000000000005, + "352": 84.61000000000004, + "353": 84.73000000000005, + "354": 82.93000000000008, + "355": 68.25000000000004, + "356": 81.20999999999995, + "357": 86.05000000000004, + "358": 101.50000000000001, + "359": 52.18000000000001, + "360": 77.03999999999996, + "361": 56.35999999999997, + "362": 37.92000000000004, + "363": 55.38999999999997, + "364": 73.38999999999999, + "365": 87.18000000000009, + "366": 52.51999999999998, + "367": 79.56000000000002, + "368": 104.86000000000006, + "369": 90.67, + "370": 46.780000000000015, + "371": 95.87000000000006, + "372": 80.30000000000001, + "373": 89.15000000000005, + "374": 62.790000000000035, + "375": 79.02999999999996, + "376": 52.35999999999999, + "377": 71.50000000000004, + "378": 64.99000000000001, + "379": 85.16000000000001, + "380": 64.61999999999996, + "381": 86.38000000000007, + "382": 75.47999999999999, + "383": 90.79000000000008, + "384": 47.88000000000002, + "385": 78.22000000000006, + "386": 95.23000000000009, + "387": 62.260000000000005, + "388": 98.30000000000007, + "389": 96.87000000000009, + "390": 89.86000000000006, + "391": 81.84000000000006, + "392": 89.85999999999997, + "393": 85.64000000000006, + "394": 94.20000000000012, + "395": 84.8900000000001, + "396": 84.00000000000003, + "397": 87.8700000000001, + "398": 90.79000000000005, + "399": 89.76000000000003, + "400": 90.93000000000006, + "401": 92.94000000000003, + "402": 76.24000000000004, + "403": 100.1500000000001, + "404": 74.65000000000006, + "405": 93.45000000000009, + "406": 83.1, + "407": 88.18000000000009, + "408": 101.87000000000006, + "409": 98.75000000000007, + "410": 93.41000000000005, + "411": 87.29000000000005, + "412": 96.15000000000005, + "413": 61.90000000000001, + "414": 96.95000000000006, + "415": 88.66000000000004, + "416": 102.69000000000003, + "417": 92.90000000000006, + "418": 98.63000000000005, + "419": 87.88999999999993, + "420": 104.38000000000004, + "421": 105.45000000000012, + "422": 94.10999999999999, + "423": 103.0100000000001, + "424": 93.52000000000007, + "425": 95.01000000000008, + "426": 92.73000000000003, + "427": 61.749999999999986, + "428": 106.69000000000005, + "429": 67.73999999999998, + "430": 101.39000000000009, + "431": 93.69000000000008, + "432": 103.09000000000007, + "433": 100.92000000000014, + "434": 108.52000000000005, + "435": 102.89000000000007, + "436": 97.18000000000002, + "437": 83.02999999999997, + "438": 102.86000000000004, + "439": 79.78, + "440": 84.15000000000012, + "441": 100.4400000000001, + "442": 103.63000000000008, + "443": 99.71000000000006, + "444": 106.74000000000008, + "445": 110.36000000000008, + "446": 99.64000000000001, + "447": 101.71000000000006, + "448": 106.89000000000013, + "449": 100.66000000000007, + "450": 84.13000000000007, + "451": 88.16000000000001, + "452": 98.79000000000005, + "453": 96.48000000000008, + "454": 98.1000000000001, + "455": 100.49000000000011, + "456": 102.00000000000009, + "457": 80.97000000000006, + "458": 106.74000000000005, + "459": 92.44000000000001, + "460": 83.60000000000005, + "461": 96.57000000000002, + "462": 96.95, + "463": 105.86000000000008, + "464": 86.39000000000006, + "465": 100.77000000000007, + "466": 98.18, + "467": 108.3600000000001, + "468": 103.9400000000001, + "469": 99.2800000000001, + "470": 112.54000000000008, + "471": 107.64000000000003, + "472": 99.98999999999998, + "473": 91.29999999999998, + "474": 99.01000000000003, + "475": 98.15, + "476": 82.97000000000007, + "477": 103.87000000000003, + "478": 89.69000000000004, + "479": 99.9100000000001, + "480": 101.79000000000006, + "481": 109.69000000000003, + "482": 110.00000000000009, + "483": 109.32000000000012, + "484": 93.60000000000007, + "485": 95.79999999999994, + "486": 97.5800000000001, + "487": 104.71000000000008, + "488": 91.97000000000007, + "489": 103.03000000000004, + "490": 98.50000000000001, + "491": 107.53, + "492": 107.98999999999998, + "493": 102.28999999999999, + "494": 106.03000000000009, + "495": 85.19000000000005, + "496": 98.03, + "497": 107.60999999999999, + "498": 113.52000000000014, + "499": 67.78, + "500": 107.51000000000008, + "501": 111.15000000000005, + "502": 107.94000000000008, + "503": 111.25000000000007, + "504": 92.46000000000006, + "505": 110.73000000000006, + "506": 106.95000000000007, + "507": 112.69000000000008, + "508": 100.75000000000004, + "509": 102.05000000000005, + "510": 111.5500000000001, + "511": 84.91000000000012, + "512": 99.25000000000006, + "513": 75.33000000000001, + "514": 108.66000000000008, + "515": 99.84, + "516": 106.1000000000001, + "517": 90.51000000000008, + "518": 94.95000000000006, + "519": 113.2700000000001, + "520": 104.46000000000006, + "521": 109.72000000000017, + "522": 95.16999999999999, + "523": 111.41000000000004, + "524": 112.0900000000001, + "525": 102.2800000000001, + "526": 74.75000000000003, + "527": 112.96000000000004, + "528": 112.05, + "529": 88.92000000000004, + "530": 92.04000000000005, + "531": 111.37000000000009, + "532": 96.09000000000012, + "533": 87.22000000000003, + "534": 105.06000000000002, + "535": 100.41999999999999, + "536": 104.68000000000004, + "537": 98.40000000000006, + "538": 76.62000000000005, + "539": 104.88000000000004, + "540": 91.47000000000001, + "541": 109.36000000000008, + "542": 106.11000000000006, + "543": 100.07000000000005, + "544": 108.85000000000005, + "545": 114.59000000000015, + "546": 109.05000000000004, + "547": 97.19, + "548": 108.62000000000009, + "549": 99.49000000000001, + "550": 108.29000000000008, + "551": 76.75000000000007, + "552": 77.51, + "553": 100.11000000000004, + "554": 98.33000000000007, + "555": 96.36000000000003, + "556": 71.85000000000008, + "557": 100.52000000000005, + "558": 106.76000000000008, + "559": 77.76000000000005, + "560": 86.00000000000003, + "561": 103.4400000000001, + "562": 102.25000000000001, + "563": 95.7300000000001, + "564": 105.78000000000004, + "565": 81.67000000000003, + "566": 69.25000000000001, + "567": 84.89000000000013, + "568": 85.57000000000002, + "569": 84.37999999999998, + "570": 110.12000000000005, + "571": 76.47000000000003, + "572": 107.25000000000004, + "573": 103.12000000000008, + "574": 92.90000000000002, + "575": 71.58000000000001, + "576": 101.26000000000005, + "577": 108.97000000000007, + "578": 99.80000000000007, + "579": 98.73000000000012, + "580": 102.08000000000004, + "581": 102.90000000000006, + "582": 93.73000000000005, + "583": 96.41, + "584": 108.49000000000017, + "585": 102.98999999999998, + "586": 108.66000000000015, + "587": 103.58999999999999, + "588": 107.59999999999998, + "589": 108.62000000000012, + "590": 110.27000000000012, + "591": 89.32000000000002, + "592": 94.60000000000007, + "593": 92.90000000000005, + "594": 92.42000000000004, + "595": 105.41000000000004, + "596": 99.83, + "597": 101.31000000000003, + "598": 97.30000000000004, + "599": 88.44000000000008, + "600": 98.44000000000007, + "601": 106.03000000000013, + "602": 106.07000000000012, + "603": 85.46000000000014, + "604": 109.87000000000008, + "605": 106.56000000000009, + "606": 96.01000000000002, + "607": 85.52000000000001, + "608": 74.34000000000003, + "609": 107.61000000000008, + "610": 100.89000000000007, + "611": 92.68000000000009, + "612": 101.27999999999994, + "613": 95.65000000000005, + "614": 111.29000000000005, + "615": 111.60000000000014, + "616": 100.77000000000005, + "617": 84.43000000000009, + "618": 93.43000000000002, + "619": 111.56000000000009, + "620": 111.04000000000008, + "621": 93.54, + "622": 105.55000000000007, + "623": 106.9200000000001, + "624": 90.46000000000006, + "625": 94.35000000000008, + "626": 107.47000000000006, + "627": 107.85, + "628": 99.71999999999998, + "629": 106.29000000000012, + "630": 103.92000000000007, + "631": 111.71000000000008, + "632": 104.81000000000003, + "633": 93.88000000000002, + "634": 102.31000000000002, + "635": 97.68000000000004, + "636": 111.31999999999998, + "637": 111.26000000000006, + "638": 111.15000000000009, + "639": 108.30000000000011, + "640": 80.35000000000008, + "641": 75.79999999999995, + "642": 94.97000000000003, + "643": 97.2300000000001, + "644": 82.43999999999998, + "645": 106.8100000000001, + "646": 90.74000000000004, + "647": 97.49000000000007, + "648": 94.85000000000007, + "649": 102.53000000000009, + "650": 100.30000000000004, + "651": 99.18000000000008, + "652": 100.18000000000009, + "653": 97.75000000000004, + "654": 105.00000000000003, + "655": 94.92000000000002, + "656": 103.94000000000001, + "657": 97.40000000000006, + "658": 95.91999999999999, + "659": 98.24000000000002, + "660": 101.10000000000001, + "661": 101.91, + "662": 105.82000000000009, + "663": 88.70000000000007, + "664": 95.59, + "665": 105.51000000000003, + "666": 103.15000000000009, + "667": 77.63000000000002, + "668": 109.07000000000008, + "669": 104.1000000000001, + "670": 107.96000000000011, + "671": 103.84000000000006, + "672": 105.64000000000003, + "673": 89.55999999999999, + "674": 104.09000000000006, + "675": 110.71000000000008, + "676": 82.57000000000005, + "677": 109.10000000000007, + "678": 110.3400000000001, + "679": 108.3600000000001, + "680": 112.8000000000001, + "681": 96.88000000000005, + "682": 102.44000000000003, + "683": 98.23999999999998, + "684": 96.39000000000006, + "685": 111.07000000000012, + "686": 83.20999999999994, + "687": 107.7, + "688": 102.35000000000007, + "689": 111.86000000000004, + "690": 109.91000000000011, + "691": 83.71000000000001, + "692": 100.70000000000012, + "693": 109.61000000000004, + "694": 103.18999999999997, + "695": 91.47000000000011, + "696": 107.89000000000003, + "697": 101.27000000000007, + "698": 94.35000000000005, + "699": 111.98000000000013, + "700": 106.38000000000002, + "701": 94.61000000000008, + "702": 101.75000000000003, + "703": 106.99000000000005, + "704": 110.75000000000009, + "705": 109.20000000000012, + "706": 110.56000000000009, + "707": 111.45000000000005, + "708": 111.41000000000012, + "709": 107.53000000000002, + "710": 105.27000000000014, + "711": 106.04000000000005, + "712": 109.6400000000001, + "713": 104.43000000000009, + "714": 107.25000000000007, + "715": 103.58000000000004, + "716": 108.03000000000009, + "717": 108.82000000000005, + "718": 91.42, + "719": 108.64000000000001, + "720": 112.89000000000006, + "721": 111.45000000000007, + "722": 111.46000000000006, + "723": 97.90000000000002, + "724": 110.77000000000007, + "725": 111.97000000000003, + "726": 110.19000000000005, + "727": 98.41000000000003, + "728": 108.12000000000003, + "729": 113.6000000000001, + "730": 107.56000000000006, + "731": 111.6100000000001, + "732": 108.04000000000003, + "733": 110.37999999999997, + "734": 114.6800000000001, + "735": 88.51000000000005, + "736": 95.48999999999997, + "737": 93.22000000000004, + "738": 103.04000000000005, + "739": 109.81000000000006, + "740": 106.0900000000001, + "741": 102.90000000000005, + "742": 83.93000000000004, + "743": 93.63000000000011, + "744": 108.48000000000006, + "745": 101.40000000000005, + "746": 107.83000000000007, + "747": 111.72000000000007, + "748": 103.55000000000004, + "749": 105.63000000000004, + "750": 103.91000000000008, + "751": 102.59000000000012, + "752": 108.02000000000002, + "753": 82.87000000000005, + "754": 101.22000000000006, + "755": 98.05000000000007, + "756": 108.96000000000004, + "757": 109.53000000000004, + "758": 101.35000000000005, + "759": 113.43000000000009, + "760": 111.06000000000013, + "761": 111.89000000000014, + "762": 109.84000000000006, + "763": 106.32000000000008, + "764": 97.49999999999999, + "765": 108.57000000000005, + "766": 111.83000000000007, + "767": 108.75000000000004, + "768": 110.96000000000004, + "769": 113.68000000000013, + "770": 108.16000000000008, + "771": 112.68000000000002, + "772": 105.77000000000002, + "773": 107.92000000000004, + "774": 110.19000000000003, + "775": 107.47000000000007, + "776": 110.5900000000001, + "777": 114.56000000000003, + "778": 112.06000000000013, + "779": 112.07000000000014, + "780": 111.21000000000008, + "781": 96.50000000000003, + "782": 102.43000000000002, + "783": 109.47000000000007, + "784": 111.58000000000001, + "785": 111.42000000000003, + "786": 107.28000000000009, + "787": 114.24000000000015, + "788": 109.28000000000009, + "789": 107.0600000000001, + "790": 113.78000000000016, + "791": 105.17000000000012, + "792": 97.64999999999995, + "793": 109.31000000000003, + "794": 110.45000000000009, + "795": 112.08000000000001, + "796": 112.21000000000004, + "797": 108.54000000000005, + "798": 109.67000000000012, + "799": 84.29000000000003, + "800": 110.61000000000008, + "801": 112.08000000000007, + "802": 113.32000000000008, + "803": 112.37000000000005, + "804": 108.25000000000004, + "805": 111.52000000000014, + "806": 109.90000000000006, + "807": 112.44000000000008, + "808": 107.66000000000008, + "809": 108.48000000000009, + "810": 111.1800000000001, + "811": 111.90000000000006, + "812": 114.39000000000003, + "813": 110.7400000000001, + "814": 98.65, + "815": 110.52000000000012, + "816": 107.75000000000007, + "817": 109.60000000000005, + "818": 112.74000000000008, + "819": 114.99000000000012, + "820": 105.29999999999995, + "821": 109.6000000000001, + "822": 112.20000000000005, + "823": 111.93000000000002, + "824": 107.15000000000005, + "825": 111.55000000000007, + "826": 111.77999999999997, + "827": 104.37999999999997, + "828": 107.96000000000004, + "829": 109.4, + "830": 112.2, + "831": 93.95, + "832": 114.2900000000001, + "833": 111.49000000000008, + "834": 110.1900000000001, + "835": 108.77000000000005, + "836": 75.7, + "837": 95.42000000000004, + "838": 97.78000000000003, + "839": 110.7200000000001, + "840": 107.88000000000011, + "841": 101.18000000000004, + "842": 113.23000000000006, + "843": 110.07000000000002, + "844": 108.8000000000001, + "845": 112.33000000000008, + "846": 105.64000000000007, + "847": 100.72000000000007, + "848": 105.25000000000003, + "849": 109.75000000000007, + "850": 91.50000000000003, + "851": 74.92, + "852": 104.97000000000006, + "853": 105.62000000000003, + "854": 71.96, + "855": 109.47, + "856": 107.39000000000003, + "857": 114.7900000000001, + "858": 109.87000000000003, + "859": 96.55999999999997, + "860": 112.41000000000012, + "861": 85.77000000000005, + "862": 113.43000000000013, + "863": 110.76000000000013, + "864": 86.15000000000005, + "865": 108.96000000000011, + "866": 74.38999999999997, + "867": 111.89000000000014, + "868": 105.6400000000001, + "869": 85.18999999999998, + "870": 90.26000000000005, + "871": 88.56000000000007, + "872": 79.2900000000001, + "873": 109.81000000000006, + "874": 106.53000000000004, + "875": 90.01000000000002, + "876": 109.41000000000004, + "877": 105.73000000000002, + "878": 113.07000000000008, + "879": 110.85000000000007, + "880": 111.05000000000004, + "881": 96.38999999999996, + "882": 107.95000000000009, + "883": 92.63000000000007, + "884": 82.78999999999994, + "885": 108.46000000000006, + "886": 99.02000000000004, + "887": 109.95000000000007, + "888": 104.32000000000002, + "889": 114.87000000000008, + "890": 103.4300000000001, + "891": 110.88000000000011, + "892": 93.03000000000006, + "893": 105.53000000000004, + "894": 99.39000000000001, + "895": 106.48000000000009, + "896": 108.43000000000009, + "897": 96.05000000000005, + "898": 109.5900000000001, + "899": 104.57000000000005, + "900": 107.19000000000005, + "901": 111.14000000000007, + "902": 99.48000000000009, + "903": 76.02000000000005, + "904": 111.19000000000003, + "905": 93.26000000000003, + "906": 106.86000000000013, + "907": 113.82000000000009, + "908": 111.56000000000009, + "909": 107.29000000000008, + "910": 97.72999999999999, + "911": 107.19000000000008, + "912": 109.11000000000013, + "913": 114.19000000000008, + "914": 86.27000000000007, + "915": 110.64000000000007, + "916": 111.99000000000005, + "917": 102.81000000000006, + "918": 110.01000000000013, + "919": 87.88000000000008, + "920": 107.4300000000001, + "921": 112.51000000000008, + "922": 112.38000000000011, + "923": 111.66000000000004, + "924": 109.02000000000002, + "925": 102.73000000000006, + "926": 112.62000000000009, + "927": 110.83000000000008, + "928": 114.02000000000005, + "929": 96.5, + "930": 112.74000000000008, + "931": 106.63000000000007, + "932": 107.65000000000006, + "933": 109.5500000000001, + "934": 102.63999999999996, + "935": 113.26000000000008, + "936": 111.31000000000006, + "937": 111.13000000000007, + "938": 112.09000000000007, + "939": 111.2400000000001, + "940": 101.72999999999999, + "941": 93.6500000000001, + "942": 111.97000000000003, + "943": 114.54000000000008, + "944": 107.3600000000001, + "945": 113.56000000000009, + "946": 112.25000000000007, + "947": 110.04000000000005, + "948": 102.43000000000004, + "949": 109.00000000000004, + "950": 111.21000000000006, + "951": 104.88000000000007, + "952": 109.62999999999997, + "953": 113.76000000000003, + "954": 115.7700000000001, + "955": 104.64000000000006, + "956": 110.82000000000002, + "957": 104.98000000000006, + "958": 108.25000000000009, + "959": 114.3900000000001, + "960": 108.59000000000007, + "961": 112.2400000000001, + "962": 93.43999999999993, + "963": 109.91000000000005, + "964": 106.43000000000002, + "965": 107.78000000000006, + "966": 112.47000000000011, + "967": 107.00000000000011, + "968": 111.91000000000008, + "969": 108.42000000000003, + "970": 116.22000000000003, + "971": 104.26000000000003, + "972": 112.59000000000012, + "973": 112.0500000000001, + "974": 111.07000000000005, + "975": 114.0900000000001, + "976": 110.94000000000001, + "977": 108.6800000000001, + "978": 106.68000000000006, + "979": 102.15000000000008, + "980": 110.1700000000001, + "981": 71.59000000000002, + "982": 111.89000000000003, + "983": 110.4200000000001, + "984": 92.44000000000008, + "985": 113.17999999999999, + "986": 106.27000000000007, + "987": 112.91000000000005, + "988": 111.20000000000005, + "989": 106.60000000000005, + "990": 115.01000000000006, + "991": 109.79000000000003, + "992": 110.43000000000006, + "993": 109.84000000000003, + "994": 91.15000000000005, + "995": 111.5400000000001, + "996": 74.26000000000008, + "997": 111.37000000000003, + "998": 108.57000000000002, + "999": 112.19000000000008, + "1000": 110.26000000000008 + }, + "session_av_reward_per_episode": { + "1": { + "1": -71.44999999999999, + "2": -50.300000000000075, + "3": -42.350000000000044, + "4": -45.55000000000017, + "5": -78.14999999999999, + "6": -72.10000000000004, + "7": -21.749999999999957, + "8": -16.299999999999972, + "9": -33.999999999999986, + "10": -38.40000000000004, + "11": -8.549999999999997, + "12": -10.250000000000009, + "13": -19.09999999999997, + "14": -21.599999999999955, + "15": -53.50000000000008, + "16": -59.450000000000095, + "17": -71.10000000000004, + "18": -66.20000000000007, + "19": -39.9000000000001, + "20": -21.199999999999957, + "21": -19.849999999999966, + "22": -4.299999999999994, + "23": -20.799999999999958, + "24": -19.899999999999963, + "25": -99.69999999999999, + "26": -22.699999999999953, + "27": -80.20000000000005, + "28": -40.450000000000074, + "29": -95.05000000000001, + "30": -72.85, + "31": -37.500000000000036, + "32": -6.9499999999999975, + "33": -22.499999999999954, + "34": -20.450000000000006, + "35": -66.45000000000007, + "36": -36.50000000000001, + "37": -30.500000000000018, + "38": -2.7999999999999856, + "39": -20.999999999999957, + "40": -7.8999999999999995, + "41": -13.749999999999988, + "42": -9.249999999999996, + "43": -38.64999999999994, + "44": -16.899999999999974, + "45": -72.70000000000002, + "46": -21.14999999999996, + "47": -12.549999999999988, + "48": -18.04999999999996, + "49": -34.35000000000006, + "50": -23.24999999999995, + "51": -93.29999999999998, + "52": -17.74999999999997, + "53": -19.099999999999966, + "54": -15.199999999999978, + "55": -68.90000000000003, + "56": -10.099999999999984, + "57": -17.299999999999972, + "58": -18.449999999999967, + "59": -75.09999999999997, + "60": -97.44999999999999, + "61": -18.749999999999968, + "62": -10.299999999999988, + "63": -67.85, + "64": -1.8999999999999924, + "65": 3.750000000000023, + "66": -11.699999999999992, + "67": -4.599999999999996, + "68": -16.09999999999998, + "69": -23.19999999999995, + "70": -17.54999999999997, + "71": -15.849999999999973, + "72": -18.44999999999997, + "73": -18.149999999999967, + "74": -20.099999999999962, + "75": -6.349999999999987, + "76": -2.149999999999986, + "77": -17.699999999999978, + "78": -15.949999999999978, + "79": -18.09999999999997, + "80": -11.349999999999996, + "81": -88.25, + "82": -4.249999999999991, + "83": -10.699999999999994, + "84": -22.899999999999952, + "85": -9.399999999999988, + "86": -6.650000000000006, + "87": -21.749999999999954, + "88": -18.84999999999997, + "89": 1.550000000000002, + "90": -15.699999999999974, + "91": -94.24999999999994, + "92": -17.249999999999968, + "93": -20.899999999999974, + "94": 12.799999999999997, + "95": -77.55, + "96": -88.6, + "97": -11.00000000000001, + "98": 2.500000000000029, + "99": -28.199999999999996, + "100": -29.100000000000023, + "101": -10.049999999999986, + "102": -22.99999999999993, + "103": -84.25, + "104": -8.749999999999993, + "105": -13.849999999999987, + "106": -3.2499999999999787, + "107": -34.050000000000054, + "108": -19.449999999999964, + "109": -11.649999999999988, + "110": -37.100000000000065, + "111": -35.150000000000055, + "112": -32.599999999999994, + "113": -73.55, + "114": -19.649999999999963, + "115": -82.49999999999997, + "116": -15.44999999999998, + "117": -41.650000000000134, + "118": -19.449999999999932, + "119": -72.04999999999998, + "120": -76.2, + "121": -20.799999999999958, + "122": -21.199999999999978, + "123": 7.9999999999999885, + "124": -19.949999999999964, + "125": -15.999999999999977, + "126": -64.84999999999997, + "127": -18.899999999999967, + "128": -26.34999999999998, + "129": -16.449999999999978, + "130": 23.149999999999917, + "131": 4.550000000000013, + "132": -16.699999999999978, + "133": 10.450000000000077, + "134": 16.000000000000018, + "135": -77.05000000000001, + "136": -55.8000000000001, + "137": -0.24999999999996714, + "138": -12.199999999999989, + "139": -0.7000000000000068, + "140": -72.64999999999995, + "141": 23.34999999999991, + "142": -21.149999999999956, + "143": -3.199999999999977, + "144": -54.9, + "145": -10.799999999999988, + "146": -8.15, + "147": -66.95000000000002, + "148": 11.300000000000015, + "149": -4.6499999999999995, + "150": -70.55000000000005, + "151": -66.99999999999994, + "152": -2.45, + "153": -79.5, + "154": -2.3000000000000034, + "155": 2.6000000000000396, + "156": 3.850000000000015, + "157": 7.150000000000051, + "158": -76.2999999999999, + "159": -67.90000000000002, + "160": -13.649999999999979, + "161": -6.34999999999999, + "162": -9.39999999999999, + "163": -56.75, + "164": -78.69999999999992, + "165": -4.649999999999984, + "166": 29.949999999999864, + "167": -79.69999999999999, + "168": -92.5, + "169": 0.6499999999999813, + "170": -80.45000000000003, + "171": -59.349999999999994, + "172": -61.250000000000014, + "173": -82.94999999999999, + "174": -70.99999999999997, + "175": -3.4999999999999902, + "176": -1.1499999999999755, + "177": -68.94999999999996, + "178": -35.49999999999999, + "179": -23.64999999999995, + "180": -11.049999999999983, + "181": 10.800000000000066, + "182": -14.100000000000007, + "183": -57.400000000000006, + "184": -47.45, + "185": -16.149999999999974, + "186": -22.65000000000006, + "187": -72.99999999999999, + "188": -79.5, + "189": -70.94999999999999, + "190": 3.6499999999999857, + "191": -19.79999999999995, + "192": -74.80000000000001, + "193": -33.85000000000004, + "194": -1.3999999999999708, + "195": -3.049999999999988, + "196": 23.14999999999998, + "197": -57.250000000000014, + "198": -13.799999999999985, + "199": -25.89999999999998, + "200": -1.8999999999999737, + "201": -26.45, + "202": -95.95, + "203": -80.69999999999996, + "204": 22.550000000000015, + "205": -84.64999999999988, + "206": 13.950000000000035, + "207": -75.45000000000006, + "208": -73.29999999999993, + "209": -20.200000000000028, + "210": 4.650000000000018, + "211": -64.94999999999996, + "212": 1.0499999999999912, + "213": -14.399999999999993, + "214": -76.95000000000005, + "215": 33.400000000000006, + "216": 33.30000000000001, + "217": -80.0, + "218": 5.349999999999952, + "219": 70.70000000000009, + "220": -22.150000000000016, + "221": -72.50000000000003, + "222": -44.49999999999999, + "223": -58.100000000000016, + "224": -3.4999999999999813, + "225": -55.64999999999999, + "226": -29.94999999999998, + "227": -88.39999999999998, + "228": 15.400000000000023, + "229": -70.74999999999997, + "230": -10.250000000000012, + "231": -5.80000000000002, + "232": -1.5999999999999903, + "233": 14.600000000000033, + "234": -7.499999999999994, + "235": -43.59999999999995, + "236": -2.850000000000028, + "237": -12.200000000000015, + "238": 14.750000000000032, + "239": -6.249999999999982, + "240": -55.099999999999945, + "241": 3.3306690738754696e-15, + "242": 54.8499999999999, + "243": 1.7000000000000317, + "244": -1.8000000000000227, + "245": 1.9000000000000663, + "246": 0.5999999999999699, + "247": -73.65000000000003, + "248": 11.399999999999952, + "249": -55.95, + "250": -69.69999999999999, + "251": -68.15, + "252": -29.750000000000025, + "253": -45.65000000000002, + "254": 2.4000000000000146, + "255": 61.900000000000034, + "256": 41.250000000000085, + "257": -0.5000000000000142, + "258": -39.60000000000003, + "259": -90.00000000000003, + "260": -60.95, + "261": 16.349999999999998, + "262": 11.900000000000004, + "263": -2.949999999999963, + "264": 52.79999999999999, + "265": -40.9500000000001, + "266": -48.00000000000015, + "267": 80.69999999999999, + "268": -11.200000000000008, + "269": 55.49999999999989, + "270": 8.650000000000002, + "271": 7.000000000000008, + "272": -10.099999999999998, + "273": -18.40000000000002, + "274": 98.75000000000013, + "275": 50.89999999999986, + "276": 26.70000000000001, + "277": 24.149999999999967, + "278": -48.49999999999997, + "279": 12.249999999999915, + "280": -56.3, + "281": 27.75000000000001, + "282": 77.40000000000002, + "283": -52.050000000000075, + "284": -63.80000000000003, + "285": -53.15000000000003, + "286": 36.750000000000014, + "287": 73.64999999999995, + "288": 1.399999999999987, + "289": -18.59999999999998, + "290": 54.6500000000001, + "291": 92.6499999999999, + "292": -2.5999999999999965, + "293": -71.70000000000002, + "294": 66.90000000000002, + "295": 23.4, + "296": 13.749999999999973, + "297": 64.79999999999995, + "298": 55.49999999999994, + "299": 102.65000000000008, + "300": 14.349999999999994, + "301": 65.54999999999995, + "302": -23.200000000000006, + "303": 38.000000000000064, + "304": -14.300000000000002, + "305": 13.200000000000033, + "306": 96.90000000000005, + "307": 58.250000000000014, + "308": 78.40000000000003, + "309": 50.6, + "310": -15.800000000000066, + "311": 106.95000000000005, + "312": 76.39999999999998, + "313": 47.55000000000004, + "314": 44.74999999999998, + "315": -35.099999999999994, + "316": 46.999999999999886, + "317": 2.149999999999996, + "318": 47.699999999999896, + "319": 90.05000000000001, + "320": 38.899999999999864, + "321": -32.79999999999999, + "322": 11.65000000000003, + "323": 51.949999999999996, + "324": 42.699999999999996, + "325": 46.34999999999989, + "326": 105.25000000000001, + "327": 114.30000000000001, + "328": 103.14999999999999, + "329": 86.70000000000003, + "330": 16.149999999999967, + "331": -19.10000000000003, + "332": 36.300000000000026, + "333": 98.7500000000001, + "334": 60.249999999999986, + "335": 72.24999999999999, + "336": -6.950000000000001, + "337": 19.949999999999985, + "338": 79.65, + "339": 21.849999999999987, + "340": -63.19999999999994, + "341": 75.90000000000006, + "342": 102.65000000000003, + "343": 83.45000000000003, + "344": 93.25000000000001, + "345": 88.29999999999997, + "346": 80.69999999999999, + "347": 47.09999999999998, + "348": 89.45, + "349": 31.549999999999773, + "350": 50.099999999999966, + "351": 109.55000000000008, + "352": 101.45000000000006, + "353": 100.10000000000001, + "354": 53.39999999999997, + "355": 58.700000000000074, + "356": 118.55000000000004, + "357": 89.10000000000002, + "358": 103.34999999999994, + "359": 100.05000000000008, + "360": 86.35000000000002, + "361": 14.500000000000028, + "362": 102.50000000000009, + "363": 17.099999999999998, + "364": 104.3500000000001, + "365": 97.00000000000016, + "366": 64.19999999999989, + "367": 77.95000000000002, + "368": 114.90000000000002, + "369": 70.54999999999986, + "370": 103.85000000000005, + "371": 107.0500000000001, + "372": 108.70000000000005, + "373": 103.64999999999999, + "374": 68.89999999999998, + "375": 108.90000000000012, + "376": 36.84999999999999, + "377": 82.45000000000017, + "378": 67.19999999999996, + "379": 94.89999999999996, + "380": 109.6, + "381": 116.6000000000001, + "382": 88.05000000000007, + "383": 66.80000000000007, + "384": 42.199999999999925, + "385": 83.40000000000002, + "386": 85.20000000000003, + "387": 60.1499999999999, + "388": 118.30000000000003, + "389": 113.39999999999996, + "390": 116.75000000000004, + "391": 65.7999999999999, + "392": 81.84999999999992, + "393": 94.20000000000003, + "394": 111.90000000000015, + "395": 101.9000000000001, + "396": 71.54999999999998, + "397": 105.00000000000026, + "398": 91.35000000000012, + "399": 101.4, + "400": 118.05000000000013, + "401": 75.99999999999996, + "402": 86.80000000000008, + "403": 88.10000000000007, + "404": 86.90000000000005, + "405": 106.10000000000012, + "406": 80.30000000000005, + "407": 77.54999999999998, + "408": 115.70000000000022, + "409": 75.10000000000004, + "410": 65.99999999999997, + "411": 89.24999999999991, + "412": 117.2000000000001, + "413": 1.0499999999999994, + "414": 104.45000000000005, + "415": 97.60000000000004, + "416": 83.60000000000007, + "417": 102.25000000000017, + "418": 119.60000000000001, + "419": 57.40000000000003, + "420": 110.8000000000001, + "421": 105.85000000000002, + "422": 86.45000000000003, + "423": 98.09999999999995, + "424": 91.65000000000008, + "425": 102.65000000000005, + "426": 107.30000000000001, + "427": 101.99999999999996, + "428": 119.45000000000019, + "429": 112.50000000000009, + "430": 68.70000000000005, + "431": 75.10000000000004, + "432": 107.1500000000001, + "433": 102.35000000000022, + "434": 114.70000000000003, + "435": 99.05000000000008, + "436": 117.65000000000009, + "437": 80.44999999999996, + "438": 104.30000000000008, + "439": 84.70000000000005, + "440": 102.99999999999994, + "441": 115.99999999999996, + "442": 101.50000000000004, + "443": 118.55000000000007, + "444": 116.45000000000012, + "445": 100.45000000000006, + "446": 81.90000000000018, + "447": 107.70000000000002, + "448": 109.80000000000008, + "449": 90.55000000000014, + "450": 118.55000000000013, + "451": 116.35000000000004, + "452": 110.55000000000011, + "453": 117.85000000000008, + "454": 66.59999999999994, + "455": 99.1500000000001, + "456": 107.90000000000009, + "457": 110.05000000000011, + "458": 117.25000000000011, + "459": 100.7000000000001, + "460": 112.10000000000007, + "461": 115.49999999999996, + "462": 107.40000000000013, + "463": 113.90000000000013, + "464": 111.44999999999995, + "465": 112.85000000000016, + "466": 120.10000000000005, + "467": 103.40000000000002, + "468": 84.40000000000015, + "469": 118.70000000000007, + "470": 106.20000000000016, + "471": 118.60000000000005, + "472": 80.49999999999991, + "473": 104.3500000000001, + "474": 62.599999999999795, + "475": 100.14999999999988, + "476": 111.25, + "477": 90.34999999999998, + "478": 111.2, + "479": 103.05000000000008, + "480": 108.60000000000007, + "481": 94.9500000000001, + "482": 108.60000000000001, + "483": 111.3000000000001, + "484": 105.14999999999999, + "485": 107.89999999999998, + "486": 112.00000000000004, + "487": 102.50000000000011, + "488": 114.50000000000009, + "489": 117.50000000000003, + "490": 107.95000000000005, + "491": 118.10000000000004, + "492": 108.85000000000011, + "493": 90.69999999999989, + "494": 113.45000000000012, + "495": 111.80000000000005, + "496": 102.4500000000001, + "497": 103.65000000000002, + "498": 118.40000000000018, + "499": 115.05000000000014, + "500": 107.10000000000012, + "501": 104.65000000000006, + "502": 110.80000000000013, + "503": 116.65000000000013, + "504": 113.25000000000016, + "505": 119.95000000000003, + "506": 113.99999999999997, + "507": 111.40000000000012, + "508": 111.50000000000009, + "509": 94.70000000000005, + "510": 107.7000000000001, + "511": 109.80000000000007, + "512": 117.85000000000011, + "513": 50.04999999999987, + "514": 106.19999999999999, + "515": 100.60000000000014, + "516": 103.40000000000008, + "517": 107.45000000000007, + "518": 115.55000000000005, + "519": 122.30000000000011, + "520": 113.9000000000001, + "521": 109.85000000000022, + "522": 58.79999999999984, + "523": 109.60000000000002, + "524": 109.25000000000001, + "525": 113.55000000000008, + "526": -18.29999999999997, + "527": 117.75000000000014, + "528": 112.20000000000006, + "529": 109.3, + "530": 106.95000000000007, + "531": 109.20000000000007, + "532": 118.65000000000028, + "533": 109.25000000000004, + "534": 110.70000000000003, + "535": 105.49999999999987, + "536": 100.99999999999993, + "537": 107.05000000000013, + "538": 99.2000000000001, + "539": 96.35000000000004, + "540": 100.59999999999998, + "541": 114.40000000000003, + "542": 118.9500000000001, + "543": 110.50000000000001, + "544": 116.80000000000011, + "545": 119.30000000000018, + "546": 110.94999999999997, + "547": 111.75000000000014, + "548": 100.40000000000006, + "549": 113.80000000000011, + "550": 103.20000000000013, + "551": 104.20000000000002, + "552": 116.14999999999998, + "553": 103.15000000000009, + "554": 109.00000000000001, + "555": 88.94999999999992, + "556": 112.75000000000013, + "557": 116.65000000000029, + "558": 112.65000000000002, + "559": 13.900000000000045, + "560": 105.8000000000001, + "561": 115.10000000000015, + "562": 105.99999999999997, + "563": 109.1000000000002, + "564": 105.3, + "565": 97.60000000000012, + "566": 65.04999999999978, + "567": 109.5500000000002, + "568": 105.40000000000009, + "569": 113.2000000000001, + "570": 118.25000000000006, + "571": -6.449999999999994, + "572": 110.54999999999994, + "573": 103.25000000000009, + "574": 104.44999999999997, + "575": 103.24999999999999, + "576": 90.55000000000003, + "577": 116.3000000000001, + "578": 102.20000000000014, + "579": 111.30000000000008, + "580": 101.3999999999999, + "581": 118.05000000000013, + "582": 96.99999999999996, + "583": 96.95, + "584": 112.85000000000008, + "585": 99.14999999999992, + "586": 109.0500000000001, + "587": 103.90000000000008, + "588": 107.29999999999998, + "589": 111.85000000000015, + "590": 105.75000000000016, + "591": 110.60000000000016, + "592": 105.80000000000013, + "593": 108.15000000000002, + "594": 115.10000000000002, + "595": 111.00000000000003, + "596": 102.49999999999994, + "597": 104.94999999999996, + "598": 115.60000000000012, + "599": 109.90000000000016, + "600": 115.2000000000001, + "601": 118.10000000000028, + "602": 112.0, + "603": 111.90000000000013, + "604": 107.69999999999993, + "605": 110.35000000000011, + "606": 119.05000000000005, + "607": 101.09999999999991, + "608": 106.10000000000005, + "609": 114.89999999999999, + "610": 116.1000000000001, + "611": 115.60000000000007, + "612": 119.10000000000002, + "613": 112.6500000000001, + "614": 110.95000000000007, + "615": 113.95000000000024, + "616": 116.7000000000001, + "617": -14.399999999999974, + "618": 112.20000000000005, + "619": 111.85000000000002, + "620": 117.75000000000013, + "621": 103.20000000000016, + "622": 115.59999999999998, + "623": 113.70000000000017, + "624": 5.450000000000024, + "625": 100.35000000000002, + "626": 114.05000000000001, + "627": 111.54999999999998, + "628": 110.35000000000002, + "629": 110.10000000000015, + "630": 106.50000000000004, + "631": 107.24999999999997, + "632": 111.90000000000015, + "633": 45.49999999999989, + "634": 112.14999999999999, + "635": 98.5000000000002, + "636": 118.90000000000002, + "637": 107.85000000000004, + "638": 110.99999999999994, + "639": 104.90000000000008, + "640": 113.55000000000008, + "641": 106.25000000000004, + "642": 111.25000000000011, + "643": 103.25000000000013, + "644": 98.44999999999997, + "645": 109.50000000000004, + "646": 99.8499999999998, + "647": 110.80000000000015, + "648": 101.65000000000018, + "649": 106.80000000000013, + "650": 111.8500000000001, + "651": 109.15000000000005, + "652": 109.45000000000009, + "653": 104.00000000000013, + "654": 103.70000000000003, + "655": 115.25000000000004, + "656": 100.90000000000002, + "657": 101.54999999999995, + "658": 114.55000000000007, + "659": 116.80000000000007, + "660": 113.50000000000001, + "661": 115.2, + "662": 111.30000000000021, + "663": 113.45000000000009, + "664": 100.39999999999992, + "665": 114.0000000000001, + "666": 114.50000000000009, + "667": 104.40000000000018, + "668": 113.00000000000009, + "669": 110.95000000000014, + "670": 101.69999999999992, + "671": 119.85000000000001, + "672": 109.60000000000004, + "673": 105.94999999999993, + "674": 108.05000000000004, + "675": 114.35000000000005, + "676": 114.20000000000007, + "677": 110.75, + "678": 101.55000000000013, + "679": 113.1000000000001, + "680": 115.05000000000004, + "681": 101.35000000000012, + "682": 122.35000000000012, + "683": 109.4000000000001, + "684": 112.55000000000027, + "685": 117.75000000000003, + "686": 110.04999999999998, + "687": 106.49999999999996, + "688": 112.20000000000014, + "689": 107.24999999999997, + "690": 108.20000000000006, + "691": 107.94999999999995, + "692": 97.10000000000002, + "693": 113.2500000000001, + "694": 72.49999999999993, + "695": 111.00000000000009, + "696": 108.40000000000002, + "697": 110.40000000000003, + "698": 118.35000000000007, + "699": 109.55000000000011, + "700": 100.65000000000006, + "701": 112.15, + "702": 110.30000000000018, + "703": 108.30000000000004, + "704": 113.9000000000001, + "705": 114.40000000000022, + "706": 113.80000000000008, + "707": 107.00000000000006, + "708": 114.30000000000013, + "709": 111.5, + "710": 86.9000000000001, + "711": 85.55000000000007, + "712": 113.85000000000005, + "713": 105.90000000000009, + "714": 100.50000000000006, + "715": 103.79999999999994, + "716": 111.40000000000009, + "717": 107.15000000000002, + "718": 117.35000000000012, + "719": 109.5, + "720": 112.84999999999987, + "721": 115.7500000000001, + "722": 109.19999999999999, + "723": 111.45000000000006, + "724": 117.95000000000005, + "725": 114.35000000000012, + "726": 116.25000000000016, + "727": 114.70000000000003, + "728": 111.6000000000001, + "729": 110.75000000000016, + "730": 114.95, + "731": 110.25000000000003, + "732": 102.05, + "733": 105.09999999999987, + "734": 107.95000000000009, + "735": 107.90000000000009, + "736": 114.10000000000001, + "737": 107.64999999999995, + "738": 113.10000000000018, + "739": 106.10000000000016, + "740": 105.20000000000005, + "741": 110.35000000000015, + "742": 93.35000000000001, + "743": 114.70000000000013, + "744": 107.29999999999981, + "745": 104.05000000000011, + "746": 111.55000000000003, + "747": 114.00000000000013, + "748": 108.75000000000004, + "749": 117.49999999999994, + "750": 89.80000000000007, + "751": 102.75000000000017, + "752": 118.40000000000008, + "753": 113.15000000000008, + "754": 111.35000000000002, + "755": 111.75000000000013, + "756": 114.25000000000013, + "757": 119.44999999999997, + "758": 104.90000000000012, + "759": 113.25000000000004, + "760": 112.05000000000004, + "761": 114.40000000000018, + "762": 110.40000000000005, + "763": 113.0500000000001, + "764": 107.45000000000003, + "765": 105.15000000000013, + "766": 115.90000000000006, + "767": 114.45000000000016, + "768": 107.40000000000006, + "769": 113.75000000000011, + "770": 115.80000000000013, + "771": 105.60000000000005, + "772": 109.69999999999997, + "773": 107.4500000000001, + "774": 116.75000000000007, + "775": 115.25000000000016, + "776": 103.55000000000005, + "777": 118.75000000000003, + "778": 110.1500000000002, + "779": 105.20000000000002, + "780": 111.55000000000011, + "781": 111.25000000000003, + "782": 104.10000000000004, + "783": 112.60000000000004, + "784": 114.30000000000003, + "785": 113.30000000000013, + "786": 110.45000000000002, + "787": 110.20000000000026, + "788": 111.50000000000003, + "789": 102.80000000000021, + "790": 113.90000000000013, + "791": 110.20000000000017, + "792": 104.94999999999985, + "793": 109.85000000000015, + "794": 113.50000000000011, + "795": 113.99999999999997, + "796": 114.85000000000012, + "797": 114.30000000000008, + "798": 104.95, + "799": 102.60000000000007, + "800": 112.60000000000005, + "801": 110.15000000000012, + "802": 122.20000000000013, + "803": 106.79999999999993, + "804": 107.14999999999999, + "805": 115.70000000000029, + "806": 111.9999999999999, + "807": 107.59999999999991, + "808": 105.20000000000017, + "809": 107.95000000000002, + "810": 115.2500000000001, + "811": 108.95000000000016, + "812": 114.10000000000004, + "813": 110.25000000000003, + "814": 102.10000000000005, + "815": 119.60000000000014, + "816": 109.00000000000006, + "817": 105.50000000000004, + "818": 109.3000000000002, + "819": 122.05000000000007, + "820": 103.55000000000001, + "821": 113.19999999999997, + "822": 108.9000000000001, + "823": 119.45000000000012, + "824": 104.34999999999988, + "825": 107.30000000000013, + "826": 109.25000000000001, + "827": 101.7, + "828": 107.75, + "829": 99.14999999999996, + "830": 111.55000000000017, + "831": 107.64999999999992, + "832": 118.00000000000004, + "833": 108.14999999999995, + "834": 108.60000000000016, + "835": 107.50000000000004, + "836": -39.44999999999998, + "837": 103.6, + "838": 105.15000000000013, + "839": 112.25000000000009, + "840": 109.80000000000011, + "841": 112.65000000000006, + "842": 113.40000000000003, + "843": 111.70000000000003, + "844": 113.70000000000019, + "845": 114.40000000000018, + "846": 115.1000000000002, + "847": 113.15000000000018, + "848": 110.15000000000012, + "849": 114.65, + "850": 110.5500000000001, + "851": 108.00000000000004, + "852": 116.00000000000006, + "853": 121.59999999999997, + "854": 111.44999999999999, + "855": 105.99999999999984, + "856": 105.05000000000001, + "857": 113.05000000000022, + "858": 93.14999999999999, + "859": 103.90000000000002, + "860": 114.00000000000018, + "861": 105.20000000000002, + "862": 119.0, + "863": 109.30000000000017, + "864": 30.150000000000077, + "865": 104.75000000000021, + "866": 107.74999999999987, + "867": 108.65000000000009, + "868": 106.0500000000001, + "869": 111.90000000000003, + "870": 114.20000000000013, + "871": 62.35000000000002, + "872": 111.50000000000018, + "873": 106.54999999999993, + "874": 111.14999999999999, + "875": 17.399999999999903, + "876": 108.74999999999993, + "877": 95.84999999999992, + "878": 118.00000000000006, + "879": 108.85000000000004, + "880": 121.15000000000005, + "881": 55.79999999999997, + "882": 111.30000000000013, + "883": 116.30000000000017, + "884": 98.75000000000006, + "885": 107.64999999999998, + "886": 110.45000000000007, + "887": 109.75, + "888": 114.25000000000004, + "889": 116.0000000000001, + "890": 114.55000000000021, + "891": 115.80000000000013, + "892": 120.35000000000015, + "893": 113.35000000000025, + "894": 112.35000000000002, + "895": 115.10000000000012, + "896": 108.95, + "897": 107.90000000000012, + "898": 109.5500000000001, + "899": 111.40000000000002, + "900": 113.60000000000005, + "901": 119.90000000000006, + "902": 111.40000000000008, + "903": 109.85000000000002, + "904": 107.05000000000004, + "905": 110.95000000000002, + "906": 104.25000000000011, + "907": 115.45000000000007, + "908": 111.35000000000007, + "909": 113.00000000000007, + "910": 100.75, + "911": 107.25000000000006, + "912": 116.50000000000011, + "913": 115.50000000000007, + "914": 119.75000000000024, + "915": 110.95000000000005, + "916": 113.60000000000008, + "917": 115.1500000000001, + "918": 108.45000000000014, + "919": 105.50000000000004, + "920": 108.60000000000004, + "921": 110.95000000000009, + "922": 106.90000000000013, + "923": 109.70000000000006, + "924": 111.69999999999999, + "925": 99.10000000000014, + "926": 103.05000000000014, + "927": 106.70000000000009, + "928": 108.35000000000005, + "929": 119.50000000000003, + "930": 108.15000000000006, + "931": 106.85000000000014, + "932": 107.50000000000004, + "933": 112.35000000000014, + "934": 102.64999999999996, + "935": 111.8999999999999, + "936": 109.4999999999999, + "937": 104.24999999999994, + "938": 109.80000000000011, + "939": 107.1500000000001, + "940": 114.45000000000009, + "941": 20.749999999999954, + "942": 113.25000000000004, + "943": 124.00000000000014, + "944": 112.45000000000024, + "945": 114.70000000000006, + "946": 116.30000000000015, + "947": 106.39999999999992, + "948": 104.89999999999999, + "949": 107.8500000000001, + "950": 108.95000000000006, + "951": 116.10000000000011, + "952": 104.64999999999992, + "953": 110.35, + "954": 113.50000000000001, + "955": 101.50000000000003, + "956": 111.65000000000008, + "957": 103.49999999999997, + "958": 115.75, + "959": 100.75000000000014, + "960": 104.35000000000005, + "961": 110.40000000000006, + "962": 110.10000000000002, + "963": 108.3000000000001, + "964": 108.7500000000001, + "965": 105.70000000000012, + "966": 108.80000000000017, + "967": 107.90000000000019, + "968": 117.20000000000012, + "969": 100.4, + "970": 124.4, + "971": 93.1000000000001, + "972": 111.25000000000013, + "973": 110.79999999999998, + "974": 117.05000000000001, + "975": 118.20000000000016, + "976": 108.64999999999999, + "977": 111.25000000000018, + "978": 109.4000000000002, + "979": 118.40000000000002, + "980": 114.20000000000019, + "981": 113.50000000000003, + "982": 115.45, + "983": 101.25000000000014, + "984": 112.84999999999997, + "985": 117.15000000000013, + "986": 113.05000000000013, + "987": 119.1500000000001, + "988": 104.25000000000007, + "989": 104.00000000000004, + "990": 117.00000000000009, + "991": 113.70000000000003, + "992": 113.20000000000013, + "993": 109.2500000000001, + "994": 118.40000000000006, + "995": 105.75000000000011, + "996": -74.0, + "997": 111.94999999999999, + "998": 110.85, + "999": 107.6000000000001, + "1000": 108.75000000000003 + }, + "2": { + "1": -60.0500000000001, + "2": -52.65000000000007, + "3": -21.20000000000001, + "4": -15.14999999999997, + "5": -18.24999999999997, + "6": -18.799999999999965, + "7": -13.49999999999999, + "8": -9.349999999999989, + "9": -11.749999999999988, + "10": -73.45000000000002, + "11": -16.54999999999997, + "12": -80.30000000000001, + "13": -13.34999999999999, + "14": -20.149999999999988, + "15": -16.399999999999974, + "16": -37.60000000000002, + "17": -47.55000000000007, + "18": -19.849999999999962, + "19": -10.750000000000005, + "20": -53.200000000000074, + "21": -104.7, + "22": -13.649999999999968, + "23": -95.75, + "24": -5.299999999999985, + "25": -21.349999999999966, + "26": -86.05000000000001, + "27": -18.699999999999967, + "28": -14.249999999999979, + "29": -22.749999999999954, + "30": -74.00000000000001, + "31": -15.749999999999975, + "32": -58.75000000000009, + "33": -4.64999999999998, + "34": -21.949999999999942, + "35": -18.999999999999964, + "36": -22.850000000000026, + "37": -18.549999999999965, + "38": -16.949999999999974, + "39": -23.44999999999995, + "40": -20.699999999999974, + "41": -60.850000000000044, + "42": -12.499999999999986, + "43": -16.849999999999984, + "44": -12.94999999999999, + "45": -88.6, + "46": -18.349999999999966, + "47": -93.39999999999995, + "48": -8.999999999999993, + "49": -16.299999999999976, + "50": -42.65000000000005, + "51": -15.99999999999998, + "52": -34.4, + "53": -15.799999999999974, + "54": -30.149999999999977, + "55": -42.45000000000004, + "56": -31.99999999999998, + "57": -15.049999999999981, + "58": -17.349999999999973, + "59": -63.7, + "60": -24.44999999999995, + "61": -88.1, + "62": 9.500000000000004, + "63": -83.4500000000001, + "64": -17.949999999999985, + "65": -16.549999999999976, + "66": -10.499999999999996, + "67": -18.04999999999997, + "68": -6.349999999999986, + "69": -100.85, + "70": 4.749999999999992, + "71": -41.45000000000006, + "72": -19.649999999999963, + "73": -32.05000000000003, + "74": -21.449999999999964, + "75": -15.999999999999977, + "76": -45.150000000000055, + "77": -34.35000000000006, + "78": -49.85000000000007, + "79": -34.950000000000024, + "80": -13.199999999999985, + "81": -16.69999999999997, + "82": -15.299999999999969, + "83": -96.65, + "84": -4.099999999999989, + "85": -16.19999999999996, + "86": -35.35000000000004, + "87": -84.80000000000001, + "88": -61.3500000000001, + "89": -12.599999999999987, + "90": -96.25, + "91": -19.599999999999966, + "92": 15.80000000000003, + "93": -15.699999999999976, + "94": -17.499999999999975, + "95": -97.2, + "96": -37.15000000000004, + "97": -12.400000000000004, + "98": -68.80000000000005, + "99": -2.449999999999953, + "100": -10.450000000000008, + "101": 13.75000000000006, + "102": -6.599999999999993, + "103": -22.99999999999995, + "104": -65.05, + "105": -12.34999999999999, + "106": -1.4499999999999758, + "107": -60.35000000000007, + "108": -60.35000000000002, + "109": -9.999999999999991, + "110": -92.65, + "111": -32.95000000000004, + "112": -38.100000000000044, + "113": -20.94999999999996, + "114": -17.84999999999997, + "115": -16.899999999999974, + "116": 16.00000000000003, + "117": -70.19999999999999, + "118": -5.849999999999993, + "119": -31.55, + "120": -17.449999999999974, + "121": -79.99999999999997, + "122": -70.4000000000001, + "123": -5.249999999999984, + "124": -1.099999999999973, + "125": -44.84999999999998, + "126": -12.549999999999992, + "127": -71.15000000000002, + "128": -12.849999999999973, + "129": -6.9999999999999964, + "130": -58.899999999999984, + "131": 4.600000000000029, + "132": -4.5, + "133": -44.7, + "134": 8.050000000000043, + "135": -13.849999999999984, + "136": -84.0, + "137": -7.149999999999976, + "138": -15.449999999999976, + "139": -0.6499999999999901, + "140": -104.39999999999996, + "141": -12.699999999999994, + "142": -16.849999999999966, + "143": -42.65000000000007, + "144": -8.099999999999996, + "145": -16.29999999999997, + "146": 1.1000000000000354, + "147": 3.400000000000049, + "148": 19.6499999999999, + "149": -11.59999999999999, + "150": 8.600000000000005, + "151": -20.24999999999996, + "152": -89.3, + "153": -7.799999999999988, + "154": -19.74999999999996, + "155": -24.299999999999947, + "156": -10.549999999999986, + "157": 2.708944180085382e-14, + "158": -102.1, + "159": -9.149999999999999, + "160": -87.75000000000001, + "161": -14.699999999999983, + "162": -7.6999999999999895, + "163": -1.9499999999999993, + "164": -18.499999999999982, + "165": -31.299999999999976, + "166": -83.59999999999998, + "167": 4.950000000000003, + "168": -31.099999999999966, + "169": -16.649999999999963, + "170": -11.100000000000001, + "171": -42.499999999999986, + "172": -4.499999999999991, + "173": -3.4500000000000055, + "174": -11.299999999999994, + "175": -26.749999999999943, + "176": -16.39999999999997, + "177": -15.399999999999986, + "178": -12.199999999999974, + "179": -71.8, + "180": -16.399999999999974, + "181": -22.249999999999993, + "182": -5.899999999999976, + "183": -15.549999999999962, + "184": 3.05, + "185": 7.4000000000000234, + "186": -18.04999999999997, + "187": -2.5499999999999687, + "188": -11.799999999999988, + "189": 10.7, + "190": -6.700000000000002, + "191": -2.199999999999967, + "192": -7.3499999999999925, + "193": -3.9499999999999966, + "194": -5.39999999999999, + "195": -4.99999999999999, + "196": -9.950000000000006, + "197": -10.499999999999986, + "198": -7.949999999999985, + "199": -7.899999999999998, + "200": -19.149999999999967, + "201": -16.549999999999976, + "202": 12.000000000000002, + "203": 4.300000000000029, + "204": -53.09999999999999, + "205": -89.29999999999998, + "206": -20.349999999999962, + "207": -20.850000000000023, + "208": -25.250000000000014, + "209": -3.6999999999999886, + "210": -26.000000000000018, + "211": -6.149999999999986, + "212": 7.849999999999983, + "213": 10.099999999999941, + "214": 9.800000000000013, + "215": -56.39999999999997, + "216": 18.049999999999997, + "217": -9.949999999999992, + "218": -22.549999999999955, + "219": -58.94999999999998, + "220": -1.6999999999999675, + "221": 19.2, + "222": -96.24999999999999, + "223": -17.59999999999997, + "224": -17.09999999999997, + "225": -49.849999999999966, + "226": -8.65, + "227": -5.8500000000000005, + "228": 27.199999999999836, + "229": -22.29999999999995, + "230": 47.09999999999978, + "231": 38.24999999999979, + "232": -23.84999999999996, + "233": -20.04999999999996, + "234": 18.100000000000062, + "235": -83.6, + "236": -1.749999999999967, + "237": 50.64999999999979, + "238": -13.399999999999984, + "239": -33.30000000000001, + "240": 18.599999999999998, + "241": 9.900000000000016, + "242": -43.25000000000004, + "243": -75.45, + "244": -11.850000000000032, + "245": -5.199999999999981, + "246": -18.899999999999952, + "247": 32.04999999999998, + "248": 92.45000000000007, + "249": 37.34999999999985, + "250": -9.349999999999985, + "251": 41.24999999999984, + "252": -4.4999999999999805, + "253": 66.94999999999992, + "254": -78.1999999999999, + "255": -38.05, + "256": -41.100000000000065, + "257": -11.800000000000004, + "258": 12.700000000000077, + "259": 81.5, + "260": -13.00000000000001, + "261": 10.350000000000037, + "262": -6.049999999999979, + "263": 40.89999999999989, + "264": -21.799999999999997, + "265": -64.3, + "266": -70.15000000000003, + "267": 23.35000000000007, + "268": -2.9499999999999975, + "269": 13.800000000000047, + "270": 54.799999999999784, + "271": -77.69999999999999, + "272": -10.550000000000008, + "273": -1.1499999999999932, + "274": 94.7000000000002, + "275": -17.599999999999966, + "276": 12.500000000000046, + "277": 16.050000000000054, + "278": 39.399999999999885, + "279": 3.550000000000023, + "280": 69.8500000000001, + "281": 1.200000000000074, + "282": -48.99999999999997, + "283": -5.4500000000000055, + "284": -23.400000000000023, + "285": 98.65000000000018, + "286": 38.44999999999977, + "287": -6.950000000000058, + "288": 63.94999999999974, + "289": 117.30000000000028, + "290": 38.149999999999736, + "291": 10.900000000000109, + "292": 112.65000000000029, + "293": -12.149999999999991, + "294": 70.55000000000007, + "295": 70.34999999999997, + "296": 39.69999999999973, + "297": 34.79999999999984, + "298": -16.19999999999996, + "299": -1.8499999999999632, + "300": 75.50000000000023, + "301": 109.74999999999983, + "302": 17.300000000000008, + "303": -14.399999999999961, + "304": 68.49999999999991, + "305": 41.199999999999974, + "306": 56.44999999999981, + "307": 39.44999999999979, + "308": 12.950000000000053, + "309": 21.300000000000033, + "310": 46.99999999999983, + "311": 15.049999999999995, + "312": -19.35000000000003, + "313": 19.849999999999966, + "314": 24.099999999999923, + "315": 7.9000000000000155, + "316": -3.5499999999999767, + "317": 51.949999999999825, + "318": 95.50000000000017, + "319": 117.35000000000028, + "320": 49.4499999999998, + "321": 96.89999999999999, + "322": 26.549999999999972, + "323": 82.90000000000013, + "324": 30.44999999999996, + "325": 1.9000000000000332, + "326": 77.85000000000002, + "327": -72.95, + "328": 10.55000000000005, + "329": 29.100000000000016, + "330": -1.749999999999986, + "331": 17.25000000000002, + "332": -83.45, + "333": 27.74999999999983, + "334": 46.699999999999946, + "335": 23.499999999999975, + "336": 76.55000000000004, + "337": 18.050000000000004, + "338": 40.60000000000001, + "339": -0.4500000000000075, + "340": 34.799999999999976, + "341": 20.250000000000043, + "342": 82.40000000000002, + "343": 63.749999999999865, + "344": 62.84999999999989, + "345": -52.50000000000004, + "346": 113.95000000000022, + "347": 114.10000000000022, + "348": 94.75000000000013, + "349": 108.35000000000025, + "350": 103.55000000000015, + "351": 112.00000000000016, + "352": 95.20000000000013, + "353": 104.2000000000001, + "354": 115.90000000000009, + "355": 78.20000000000019, + "356": 77.29999999999978, + "357": 97.55000000000021, + "358": 102.70000000000017, + "359": -34.400000000000006, + "360": 59.949999999999754, + "361": 38.94999999999976, + "362": 8.149999999999974, + "363": 106.90000000000023, + "364": -16.400000000000006, + "365": 109.4500000000002, + "366": 67.8500000000002, + "367": 109.25000000000023, + "368": 99.60000000000008, + "369": 107.45000000000022, + "370": -28.1, + "371": 98.55000000000003, + "372": 103.85000000000024, + "373": 60.59999999999992, + "374": 96.85000000000015, + "375": 69.14999999999986, + "376": 80.15000000000003, + "377": 83.60000000000002, + "378": 69.89999999999993, + "379": 48.349999999999866, + "380": 41.89999999999981, + "381": 111.3000000000002, + "382": 80.39999999999985, + "383": 108.60000000000012, + "384": 75.60000000000004, + "385": 73.29999999999995, + "386": 70.69999999999995, + "387": 36.15000000000002, + "388": 114.00000000000017, + "389": 90.70000000000012, + "390": 100.60000000000001, + "391": 95.10000000000014, + "392": 58.199999999999925, + "393": 83.75000000000004, + "394": 91.40000000000008, + "395": 102.14999999999995, + "396": 72.14999999999993, + "397": 79.10000000000002, + "398": 97.34999999999984, + "399": 46.89999999999989, + "400": 109.50000000000004, + "401": 93.5000000000001, + "402": 52.04999999999983, + "403": 88.0, + "404": 94.50000000000006, + "405": 82.25, + "406": 80.64999999999992, + "407": 70.4500000000002, + "408": 83.90000000000006, + "409": 113.60000000000016, + "410": 114.35000000000024, + "411": 106.05000000000022, + "412": 89.89999999999993, + "413": 34.84999999999998, + "414": 113.10000000000022, + "415": 87.05000000000004, + "416": 107.09999999999988, + "417": 100.45000000000009, + "418": 94.6500000000001, + "419": 89.29999999999987, + "420": 99.95000000000017, + "421": 112.05000000000015, + "422": 72.54999999999987, + "423": 117.7000000000002, + "424": 81.00000000000001, + "425": 109.80000000000011, + "426": 110.59999999999997, + "427": 78.0, + "428": 89.65000000000006, + "429": 32.34999999999974, + "430": 110.75000000000009, + "431": 113.1000000000001, + "432": 100.60000000000004, + "433": 105.1000000000001, + "434": 115.55000000000014, + "435": 87.00000000000001, + "436": 107.34999999999987, + "437": 109.20000000000006, + "438": 96.19999999999997, + "439": 29.500000000000064, + "440": 113.40000000000023, + "441": 112.65000000000028, + "442": 114.2000000000002, + "443": 113.60000000000024, + "444": 103.9500000000002, + "445": 114.55000000000022, + "446": 106.99999999999997, + "447": 89.10000000000008, + "448": 113.35000000000004, + "449": 92.6000000000001, + "450": -1.3000000000000105, + "451": 95.55000000000005, + "452": 90.25000000000004, + "453": 108.1000000000002, + "454": 111.75000000000027, + "455": 101.15000000000012, + "456": 100.40000000000015, + "457": -16.650000000000052, + "458": 105.79999999999986, + "459": 110.05000000000003, + "460": 103.6000000000001, + "461": 69.54999999999978, + "462": 109.0999999999999, + "463": 98.35000000000005, + "464": 81.55, + "465": 103.65000000000012, + "466": 55.249999999999844, + "467": 99.00000000000013, + "468": 102.70000000000007, + "469": 72.60000000000021, + "470": 113.60000000000026, + "471": 110.14999999999993, + "472": 94.29999999999973, + "473": 99.04999999999987, + "474": 112.35000000000012, + "475": 113.90000000000016, + "476": -11.79999999999998, + "477": 93.74999999999982, + "478": 56.59999999999996, + "479": 115.30000000000025, + "480": 98.35000000000002, + "481": 107.59999999999978, + "482": 104.40000000000003, + "483": 103.55000000000005, + "484": 11.849999999999994, + "485": 46.649999999999885, + "486": 109.40000000000019, + "487": 107.5500000000002, + "488": 40.000000000000014, + "489": 77.29999999999984, + "490": 64.79999999999984, + "491": 106.04999999999991, + "492": 108.59999999999985, + "493": 92.74999999999999, + "494": 102.60000000000015, + "495": -18.599999999999998, + "496": 62.79999999999974, + "497": 111.74999999999993, + "498": 114.00000000000016, + "499": -33.450000000000024, + "500": 108.90000000000008, + "501": 108.55000000000004, + "502": 109.09999999999994, + "503": 110.59999999999988, + "504": 91.39999999999999, + "505": 109.95000000000013, + "506": 80.85000000000001, + "507": 107.70000000000013, + "508": 48.49999999999986, + "509": 89.94999999999992, + "510": 111.90000000000002, + "511": 117.90000000000028, + "512": 81.15, + "513": 110.90000000000008, + "514": 100.7500000000001, + "515": 76.34999999999978, + "516": 98.90000000000012, + "517": 10.450000000000063, + "518": 111.95000000000026, + "519": 107.90000000000015, + "520": 77.09999999999992, + "521": 114.10000000000024, + "522": 96.74999999999976, + "523": 104.15000000000005, + "524": 116.00000000000024, + "525": 105.80000000000018, + "526": 104.25000000000014, + "527": 101.89999999999986, + "528": 109.59999999999992, + "529": -0.9499999999999762, + "530": 112.50000000000007, + "531": 114.35000000000022, + "532": 99.80000000000005, + "533": 109.94999999999999, + "534": 112.8, + "535": 92.85000000000001, + "536": 104.35000000000007, + "537": 71.74999999999996, + "538": 99.50000000000004, + "539": 89.14999999999999, + "540": 56.599999999999916, + "541": 93.35000000000007, + "542": 80.69999999999996, + "543": 83.35000000000004, + "544": 88.54999999999997, + "545": 114.55000000000015, + "546": 107.25000000000006, + "547": 96.15000000000002, + "548": 109.6500000000001, + "549": 111.30000000000005, + "550": 101.55000000000011, + "551": 82.84999999999991, + "552": 113.60000000000005, + "553": 111.80000000000011, + "554": 111.40000000000006, + "555": 112.75000000000011, + "556": -42.10000000000001, + "557": 105.79999999999998, + "558": 111.05000000000001, + "559": 91.45000000000003, + "560": 96.75000000000004, + "561": 102.40000000000012, + "562": 109.15000000000003, + "563": 112.3000000000001, + "564": 101.55000000000018, + "565": 78.85000000000002, + "566": -21.000000000000014, + "567": 104.10000000000012, + "568": 34.09999999999992, + "569": 37.29999999999989, + "570": 96.64999999999988, + "571": 98.00000000000006, + "572": 100.35000000000021, + "573": 114.00000000000016, + "574": 112.40000000000016, + "575": -9.799999999999962, + "576": 102.9500000000001, + "577": 115.20000000000017, + "578": 93.8499999999999, + "579": 115.00000000000018, + "580": 89.25000000000009, + "581": 107.00000000000023, + "582": 112.35000000000021, + "583": 99.80000000000008, + "584": 107.65000000000013, + "585": 105.99999999999993, + "586": 109.80000000000025, + "587": 93.54999999999987, + "588": 90.65, + "589": 112.1500000000002, + "590": 112.15000000000013, + "591": 74.75000000000001, + "592": 112.05000000000021, + "593": 96.6500000000001, + "594": 99.7500000000001, + "595": 105.30000000000001, + "596": 85.09999999999982, + "597": 100.20000000000016, + "598": 109.95, + "599": 106.20000000000014, + "600": 111.20000000000014, + "601": 104.65000000000009, + "602": 104.45000000000026, + "603": 117.05000000000027, + "604": 109.60000000000022, + "605": 111.25, + "606": 44.64999999999984, + "607": 32.549999999999855, + "608": -12.049999999999978, + "609": 112.50000000000017, + "610": 87.30000000000004, + "611": 113.40000000000018, + "612": 94.74999999999982, + "613": 69.49999999999996, + "614": 109.35000000000011, + "615": 107.80000000000015, + "616": 103.49999999999993, + "617": 106.35000000000007, + "618": 34.099999999999724, + "619": 115.80000000000024, + "620": 107.60000000000007, + "621": 82.24999999999997, + "622": 90.35000000000001, + "623": 103.35000000000007, + "624": 112.70000000000019, + "625": 115.7500000000002, + "626": 107.45000000000007, + "627": 97.89999999999995, + "628": 85.04999999999983, + "629": 105.85000000000012, + "630": 106.00000000000011, + "631": 110.95000000000012, + "632": 87.04999999999977, + "633": 114.95000000000022, + "634": 110.1, + "635": 112.15000000000006, + "636": 87.6499999999998, + "637": 106.5000000000002, + "638": 111.65000000000003, + "639": 108.79999999999995, + "640": 108.2000000000002, + "641": 37.84999999999995, + "642": 83.15000000000002, + "643": 113.90000000000008, + "644": 49.2499999999998, + "645": 105.65000000000019, + "646": 107.30000000000018, + "647": 108.05000000000021, + "648": 100.40000000000015, + "649": 115.85000000000025, + "650": 100.99999999999993, + "651": 103.75000000000017, + "652": 113.60000000000024, + "653": 109.44999999999999, + "654": 109.34999999999987, + "655": 84.35000000000002, + "656": 77.99999999999979, + "657": 115.05000000000022, + "658": 109.65000000000003, + "659": 96.79999999999993, + "660": 109.44999999999999, + "661": 109.35000000000002, + "662": 103.40000000000013, + "663": 110.75000000000018, + "664": 116.3000000000002, + "665": 111.85000000000008, + "666": 111.55000000000021, + "667": 41.94999999999992, + "668": 95.04999999999994, + "669": 102.0500000000001, + "670": 111.40000000000018, + "671": 110.95000000000023, + "672": 91.79999999999997, + "673": 97.70000000000009, + "674": 107.25000000000003, + "675": 104.05000000000003, + "676": 55.099999999999916, + "677": 104.04999999999997, + "678": 113.30000000000021, + "679": 82.25000000000006, + "680": 110.55000000000003, + "681": 99.69999999999985, + "682": 108.55000000000001, + "683": 95.34999999999992, + "684": 95.20000000000012, + "685": 119.25000000000033, + "686": 102.04999999999991, + "687": 97.04999999999981, + "688": 102.25000000000009, + "689": 111.25000000000006, + "690": 110.94999999999997, + "691": 111.45000000000009, + "692": 107.45000000000006, + "693": 98.44999999999996, + "694": 105.3499999999998, + "695": 113.90000000000023, + "696": 104.60000000000014, + "697": 104.7000000000001, + "698": 98.65000000000012, + "699": 113.8500000000002, + "700": 104.99999999999999, + "701": 111.50000000000024, + "702": 109.5499999999999, + "703": 106.45000000000012, + "704": 102.19999999999995, + "705": 91.89999999999998, + "706": 114.20000000000019, + "707": 110.25000000000011, + "708": 106.75000000000018, + "709": 110.44999999999986, + "710": 112.95000000000013, + "711": 110.20000000000023, + "712": 104.75000000000007, + "713": 102.69999999999995, + "714": 110.4500000000002, + "715": 111.20000000000023, + "716": 101.39999999999995, + "717": 114.05000000000011, + "718": 102.75000000000014, + "719": 104.40000000000005, + "720": 112.4, + "721": 102.15000000000015, + "722": 113.9500000000002, + "723": 106.69999999999999, + "724": 112.19999999999997, + "725": 106.75000000000013, + "726": 104.85000000000001, + "727": 110.10000000000008, + "728": 105.09999999999997, + "729": 112.65000000000023, + "730": 84.89999999999995, + "731": 115.05000000000025, + "732": 103.34999999999994, + "733": 110.10000000000004, + "734": 117.25000000000001, + "735": 5.9499999999999975, + "736": 102.8499999999999, + "737": 111.30000000000014, + "738": 104.19999999999999, + "739": 111.44999999999997, + "740": 110.25000000000018, + "741": 83.14999999999995, + "742": 97.00000000000001, + "743": 113.05000000000022, + "744": 98.85000000000015, + "745": 101.19999999999997, + "746": 94.45000000000006, + "747": 112.15000000000013, + "748": 113.95000000000003, + "749": 100.80000000000003, + "750": 100.70000000000017, + "751": 109.60000000000016, + "752": 87.54999999999987, + "753": 108.7999999999998, + "754": 94.24999999999996, + "755": 53.99999999999991, + "756": 103.34999999999998, + "757": 102.50000000000006, + "758": 108.85000000000008, + "759": 111.75000000000014, + "760": 107.80000000000022, + "761": 102.65000000000013, + "762": 103.69999999999999, + "763": 100.35000000000011, + "764": 101.3, + "765": 113.64999999999995, + "766": 112.75000000000014, + "767": 97.59999999999998, + "768": 110.04999999999988, + "769": 114.15000000000019, + "770": 106.15000000000003, + "771": 104.94999999999992, + "772": 104.99999999999994, + "773": 102.60000000000012, + "774": 104.80000000000001, + "775": 101.75000000000006, + "776": 112.50000000000014, + "777": 111.35000000000007, + "778": 117.40000000000025, + "779": 110.3500000000002, + "780": 104.35000000000012, + "781": 25.199999999999942, + "782": 72.69999999999996, + "783": 108.70000000000005, + "784": 113.25000000000009, + "785": 114.6499999999999, + "786": 98.85000000000012, + "787": 112.85000000000021, + "788": 110.1000000000002, + "789": 101.15000000000008, + "790": 111.30000000000017, + "791": 108.85000000000016, + "792": 42.39999999999982, + "793": 103.79999999999981, + "794": 108.9500000000002, + "795": 108.74999999999997, + "796": 112.19999999999993, + "797": 105.59999999999994, + "798": 108.40000000000018, + "799": 98.79999999999998, + "800": 103.85000000000008, + "801": 116.45000000000014, + "802": 104.40000000000002, + "803": 109.19999999999993, + "804": 107.1500000000001, + "805": 112.50000000000013, + "806": 112.35000000000021, + "807": 115.4000000000002, + "808": 104.80000000000001, + "809": 108.45000000000016, + "810": 111.40000000000003, + "811": 116.45000000000005, + "812": 116.70000000000002, + "813": 110.85000000000014, + "814": 108.15000000000009, + "815": 105.95000000000019, + "816": 107.15000000000005, + "817": 107.20000000000012, + "818": 111.54999999999986, + "819": 113.10000000000021, + "820": 105.89999999999989, + "821": 109.10000000000012, + "822": 108.40000000000002, + "823": 93.94999999999983, + "824": 107.60000000000011, + "825": 113.99999999999999, + "826": 108.39999999999975, + "827": 114.94999999999987, + "828": 111.05000000000003, + "829": 109.14999999999989, + "830": 107.14999999999984, + "831": 28.6, + "832": 115.10000000000012, + "833": 117.3000000000001, + "834": 111.90000000000008, + "835": 105.15000000000002, + "836": 105.84999999999977, + "837": 45.299999999999926, + "838": 49.29999999999984, + "839": 103.35000000000012, + "840": 110.95000000000014, + "841": 52.54999999999985, + "842": 114.25000000000014, + "843": 101.59999999999995, + "844": 98.40000000000005, + "845": 111.40000000000008, + "846": 84.44999999999995, + "847": 98.99999999999996, + "848": 82.69999999999983, + "849": 105.80000000000008, + "850": 111.15000000000012, + "851": -46.64999999999997, + "852": 105.30000000000011, + "853": 109.90000000000012, + "854": -15.19999999999998, + "855": 107.40000000000002, + "856": 106.34999999999992, + "857": 117.65000000000015, + "858": 111.95000000000016, + "859": 110.64999999999992, + "860": 109.5500000000001, + "861": 19.19999999999997, + "862": 113.85000000000022, + "863": 113.00000000000018, + "864": 111.60000000000008, + "865": 106.95000000000013, + "866": -30.799999999999965, + "867": 106.45000000000017, + "868": 113.50000000000017, + "869": 50.6499999999998, + "870": -0.8499999999999961, + "871": 103.00000000000011, + "872": -36.55, + "873": 101.10000000000015, + "874": 107.59999999999991, + "875": 113.60000000000001, + "876": 114.50000000000013, + "877": 114.6500000000001, + "878": 112.30000000000007, + "879": 109.40000000000003, + "880": 96.00000000000001, + "881": 104.60000000000008, + "882": 111.00000000000006, + "883": 17.45000000000004, + "884": 45.89999999999978, + "885": 109.64999999999998, + "886": 101.25000000000007, + "887": 112.40000000000003, + "888": 78.24999999999983, + "889": 116.45000000000007, + "890": 106.75000000000016, + "891": 115.99999999999997, + "892": 7.550000000000008, + "893": 117.65000000000009, + "894": 81.99999999999993, + "895": 75.59999999999991, + "896": 112.75000000000003, + "897": 110.75, + "898": 111.10000000000011, + "899": 72.79999999999995, + "900": 111.1500000000001, + "901": 111.35000000000007, + "902": 113.10000000000026, + "903": -66.05, + "904": 112.50000000000004, + "905": 22.449999999999935, + "906": 113.00000000000013, + "907": 110.39999999999999, + "908": 115.55000000000008, + "909": 106.95000000000006, + "910": 77.25000000000001, + "911": 107.20000000000005, + "912": 105.35000000000016, + "913": 114.6000000000001, + "914": 110.55000000000005, + "915": 118.55000000000011, + "916": 109.60000000000012, + "917": 59.09999999999994, + "918": 102.2500000000001, + "919": 112.50000000000009, + "920": 106.10000000000012, + "921": 112.60000000000008, + "922": 113.70000000000016, + "923": 114.94999999999995, + "924": 118.50000000000013, + "925": 106.05000000000003, + "926": 109.65000000000006, + "927": 118.10000000000015, + "928": 117.00000000000006, + "929": 43.59999999999991, + "930": 110.25000000000009, + "931": 102.20000000000007, + "932": 106.9000000000001, + "933": 107.00000000000003, + "934": 111.45000000000009, + "935": 114.45000000000016, + "936": 111.2500000000002, + "937": 116.09999999999998, + "938": 116.70000000000009, + "939": 118.00000000000017, + "940": 106.09999999999991, + "941": 105.75000000000006, + "942": 109.94999999999996, + "943": 109.50000000000011, + "944": 115.60000000000001, + "945": 107.40000000000006, + "946": 107.55000000000005, + "947": 111.55000000000018, + "948": 111.70000000000005, + "949": 109.4499999999999, + "950": 113.45000000000012, + "951": 109.04999999999998, + "952": 114.80000000000001, + "953": 119.40000000000018, + "954": 118.60000000000002, + "955": 100.44999999999986, + "956": 103.45000000000003, + "957": 116.65000000000018, + "958": 106.75000000000009, + "959": 115.95000000000016, + "960": 107.15000000000006, + "961": 113.20000000000002, + "962": 108.84999999999992, + "963": 106.3000000000002, + "964": 98.14999999999976, + "965": 115.50000000000009, + "966": 114.65000000000005, + "967": 118.20000000000013, + "968": 107.40000000000003, + "969": 107.80000000000005, + "970": 106.85000000000018, + "971": 109.34999999999988, + "972": 109.85000000000015, + "973": 106.9, + "974": 113.79999999999997, + "975": 108.70000000000012, + "976": 112.70000000000007, + "977": 109.65000000000008, + "978": 104.20000000000002, + "979": 110.2000000000001, + "980": 108.00000000000009, + "981": -27.549999999999994, + "982": 120.30000000000015, + "983": 110.15000000000006, + "984": 111.10000000000024, + "985": 114.20000000000009, + "986": 112.90000000000005, + "987": 114.95, + "988": 108.80000000000001, + "989": 111.30000000000014, + "990": 112.15000000000008, + "991": 112.04999999999995, + "992": 104.54999999999995, + "993": 109.10000000000001, + "994": 112.60000000000018, + "995": 115.20000000000006, + "996": 115.10000000000018, + "997": 107.29999999999994, + "998": 110.30000000000003, + "999": 113.84999999999998, + "1000": 112.2500000000002 + }, + "3": { + "1": -83.14999999999995, + "2": -3.3999999999999924, + "3": -34.44999999999999, + "4": -26.64999999999995, + "5": -66.90000000000003, + "6": -16.399999999999974, + "7": -60.50000000000016, + "8": -19.899999999999963, + "9": -34.49999999999998, + "10": -38.600000000000115, + "11": -55.10000000000009, + "12": -16.249999999999975, + "13": -18.049999999999972, + "14": -7.449999999999982, + "15": -95.25, + "16": -5.099999999999988, + "17": -60.5000000000001, + "18": -19.349999999999955, + "19": -52.600000000000186, + "20": -12.150000000000006, + "21": -9.599999999999973, + "22": -18.04999999999997, + "23": -7.04999999999998, + "24": -20.29999999999996, + "25": -15.249999999999977, + "26": -18.80000000000001, + "27": -8.499999999999991, + "28": -97.45, + "29": -12.449999999999987, + "30": -64.10000000000011, + "31": -15.599999999999982, + "32": -18.749999999999968, + "33": -51.25000000000007, + "34": 6.60000000000002, + "35": -8.999999999999998, + "36": -15.799999999999976, + "37": -9.099999999999996, + "38": 0.9000000000000177, + "39": -18.99999999999999, + "40": -13.949999999999985, + "41": -10.249999999999982, + "42": -97.40000000000005, + "43": -9.049999999999988, + "44": -9.749999999999996, + "45": -95.95, + "46": 13.150000000000047, + "47": -80.19999999999996, + "48": -14.149999999999988, + "49": -88.85000000000001, + "50": -21.050000000000008, + "51": -15.599999999999978, + "52": -19.999999999999964, + "53": -18.69999999999997, + "54": -75.99999999999997, + "55": -23.999999999999943, + "56": -19.649999999999956, + "57": -10.449999999999996, + "58": -71.3, + "59": -3.9499999999999984, + "60": -68.70000000000005, + "61": -95.6, + "62": -14.59999999999998, + "63": -15.449999999999978, + "64": -29.050000000000004, + "65": -12.199999999999998, + "66": -8.649999999999993, + "67": -93.75, + "68": -74.74999999999991, + "69": -77.1, + "70": -84.19999999999983, + "71": -22.649999999999952, + "72": 1.8000000000000231, + "73": -59.54999999999997, + "74": 21.549999999999997, + "75": -16.749999999999975, + "76": -1.449999999999974, + "77": -67.95, + "78": -15.799999999999974, + "79": -17.499999999999975, + "80": -42.750000000000156, + "81": -20.49999999999996, + "82": -93.75000000000014, + "83": -32.40000000000004, + "84": -15.549999999999976, + "85": -15.799999999999976, + "86": -59.3000000000001, + "87": -28.5, + "88": -55.70000000000008, + "89": -7.899999999999994, + "90": 6.000000000000044, + "91": -34.65000000000005, + "92": -52.800000000000004, + "93": -33.50000000000003, + "94": -103.45, + "95": -99.7, + "96": -58.85000000000001, + "97": -7.549999999999986, + "98": 2.7000000000000286, + "99": -12.599999999999987, + "100": -1.9499999999999718, + "101": -10.649999999999988, + "102": -93.9, + "103": -17.19999999999997, + "104": -7.049999999999956, + "105": -83.50000000000001, + "106": 3.4500000000000393, + "107": -14.999999999999977, + "108": -12.699999999999985, + "109": -62.20000000000006, + "110": -6.849999999999987, + "111": 8.150000000000059, + "112": -19.64999999999996, + "113": -24.399999999999945, + "114": -36.90000000000004, + "115": 30.099999999999923, + "116": -62.700000000000074, + "117": -11.649999999999993, + "118": -83.79999999999981, + "119": -11.099999999999993, + "120": 19.949999999999992, + "121": -60.150000000000006, + "122": -4.249999999999994, + "123": -8.999999999999991, + "124": -54.5000000000001, + "125": 2.250000000000018, + "126": -0.09999999999999276, + "127": 9.950000000000003, + "128": -44.050000000000004, + "129": -47.250000000000064, + "130": -32.20000000000005, + "131": -22.499999999999954, + "132": -5.799999999999981, + "133": 23.549999999999915, + "134": -10.24999999999999, + "135": 10.050000000000022, + "136": -11.849999999999985, + "137": -88.5, + "138": 5.250000000000002, + "139": 26.299999999999997, + "140": -60.250000000000014, + "141": -4.799999999999986, + "142": -33.09999999999999, + "143": -18.89999999999997, + "144": -20.24999999999996, + "145": -46.34999999999994, + "146": -2.9499999999999957, + "147": -2.599999999999973, + "148": -48.25000000000003, + "149": 0.8000000000000278, + "150": -5.949999999999991, + "151": -85.05, + "152": -37.30000000000009, + "153": -18.44999999999997, + "154": -46.799999999999976, + "155": -15.849999999999977, + "156": -54.34999999999997, + "157": -61.70000000000005, + "158": 9.850000000000005, + "159": -81.8, + "160": -93.94999999999999, + "161": -5.099999999999979, + "162": 13.200000000000028, + "163": -85.59999999999997, + "164": -74.55000000000001, + "165": -89.75, + "166": -15.049999999999969, + "167": -36.55000000000003, + "168": -21.399999999999956, + "169": -32.1, + "170": -58.84999999999996, + "171": -58.050000000000026, + "172": -24.999999999999993, + "173": 18.150000000000055, + "174": 15.949999999999946, + "175": 13.350000000000012, + "176": -1.749999999999979, + "177": -18.400000000000002, + "178": -80.9, + "179": -76.70000000000002, + "180": -4.399999999999975, + "181": 12.250000000000064, + "182": -19.749999999999993, + "183": -1.6499999999999775, + "184": -17.849999999999977, + "185": 13.050000000000011, + "186": 16.49999999999998, + "187": 22.300000000000058, + "188": -59.6500000000001, + "189": -12.49999999999999, + "190": -31.749999999999993, + "191": -21.650000000000002, + "192": -24.999999999999986, + "193": -17.749999999999975, + "194": -34.00000000000001, + "195": -25.35, + "196": 15.000000000000053, + "197": 4.700000000000045, + "198": -6.1, + "199": -55.849999999999945, + "200": 10.899999999999977, + "201": 9.150000000000038, + "202": 11.450000000000019, + "203": -15.649999999999977, + "204": -19.349999999999962, + "205": -59.85, + "206": 25.1999999999999, + "207": -14.299999999999981, + "208": 47.24999999999978, + "209": -25.200000000000014, + "210": -36.60000000000001, + "211": -5.199999999999979, + "212": -22.249999999999975, + "213": -30.999999999999968, + "214": -45.35000000000015, + "215": -70.10000000000004, + "216": -49.10000000000001, + "217": -0.6500000000000115, + "218": -50.85000000000001, + "219": -14.54999999999998, + "220": -52.50000000000008, + "221": 32.44999999999994, + "222": 15.199999999999978, + "223": -10.749999999999995, + "224": -63.54999999999999, + "225": -91.54999999999995, + "226": 63.19999999999992, + "227": -14.49999999999998, + "228": -12.349999999999985, + "229": -61.750000000000036, + "230": -14.849999999999978, + "231": -3.7499999999999902, + "232": 4.600000000000036, + "233": -29.349999999999987, + "234": -57.2, + "235": 14.3, + "236": 17.34999999999998, + "237": 35.149999999999906, + "238": 16.699999999999914, + "239": -3.599999999999987, + "240": 4.1300296516055823e-14, + "241": -34.04999999999996, + "242": -20.249999999999957, + "243": -31.85000000000009, + "244": 34.099999999999845, + "245": 56.69999999999988, + "246": -77.19999999999985, + "247": -72.30000000000005, + "248": 59.09999999999989, + "249": -4.94999999999999, + "250": 27.150000000000013, + "251": -8.950000000000017, + "252": 29.700000000000024, + "253": -66.55000000000001, + "254": 52.29999999999996, + "255": -5.699999999999981, + "256": 43.299999999999805, + "257": -8.800000000000006, + "258": 45.2499999999999, + "259": -20.94999999999996, + "260": 10.350000000000037, + "261": 22.299999999999862, + "262": 77.94999999999983, + "263": 25.249999999999957, + "264": 23.4, + "265": 80.74999999999976, + "266": -61.95000000000001, + "267": -3.949999999999977, + "268": 91.54999999999978, + "269": 36.79999999999994, + "270": 10.750000000000009, + "271": 59.54999999999984, + "272": 30.349999999999966, + "273": 40.34999999999995, + "274": 22.55000000000001, + "275": -39.50000000000006, + "276": 11.89999999999996, + "277": 79.40000000000005, + "278": 53.1499999999999, + "279": 21.549999999999997, + "280": -12.649999999999988, + "281": 5.800000000000001, + "282": -9.449999999999992, + "283": 45.69999999999987, + "284": -6.300000000000009, + "285": -55.24999999999998, + "286": 61.69999999999993, + "287": -13.79999999999997, + "288": -5.500000000000008, + "289": 23.24999999999997, + "290": 89.64999999999992, + "291": 43.2999999999999, + "292": 27.449999999999907, + "293": 87.34999999999985, + "294": 70.04999999999993, + "295": 28.39999999999996, + "296": -46.55, + "297": -1.6500000000000368, + "298": 56.44999999999974, + "299": 52.84999999999982, + "300": 31.60000000000004, + "301": 9.550000000000015, + "302": 4.60000000000001, + "303": 44.89999999999985, + "304": 18.949999999999974, + "305": 50.099999999999895, + "306": -3.100000000000022, + "307": 58.34999999999985, + "308": 72.19999999999996, + "309": 61.29999999999985, + "310": 13.600000000000051, + "311": 37.999999999999844, + "312": 37.74999999999993, + "313": 15.249999999999968, + "314": 7.050000000000011, + "315": 27.149999999999917, + "316": 87.65, + "317": 41.89999999999994, + "318": -13.850000000000005, + "319": 54.899999999999736, + "320": 98.04999999999994, + "321": 85.84999999999978, + "322": 67.15000000000002, + "323": 12.449999999999996, + "324": 33.99999999999978, + "325": 103.35000000000016, + "326": 54.499999999999964, + "327": 69.14999999999984, + "328": 110.2000000000002, + "329": 98.00000000000017, + "330": 108.35000000000022, + "331": 63.84999999999994, + "332": 47.599999999999746, + "333": 62.24999999999994, + "334": 77.54999999999995, + "335": 29.299999999999805, + "336": 84.90000000000005, + "337": 112.70000000000024, + "338": 91.9500000000001, + "339": 14.69999999999994, + "340": 96.79999999999991, + "341": 42.74999999999992, + "342": 44.74999999999992, + "343": 80.95000000000012, + "344": 48.399999999999885, + "345": -14.699999999999976, + "346": 85.69999999999985, + "347": 48.74999999999993, + "348": 53.599999999999845, + "349": 8.65000000000003, + "350": 80.80000000000004, + "351": 117.40000000000022, + "352": 81.54999999999991, + "353": 87.55000000000007, + "354": 111.30000000000022, + "355": 79.89999999999993, + "356": 89.10000000000005, + "357": 83.04999999999994, + "358": 78.29999999999997, + "359": 65.14999999999985, + "360": 85.79999999999994, + "361": 86.75000000000006, + "362": -68.15, + "363": 60.899999999999956, + "364": 103.4499999999998, + "365": 104.10000000000004, + "366": 62.24999999999981, + "367": 78.74999999999979, + "368": 112.00000000000013, + "369": 100.89999999999989, + "370": 107.05000000000015, + "371": 93.95000000000006, + "372": 42.049999999999784, + "373": 104.10000000000008, + "374": 109.25000000000021, + "375": 76.1999999999998, + "376": 25.449999999999896, + "377": -17.049999999999972, + "378": 105.40000000000012, + "379": 112.55000000000011, + "380": 106.75000000000007, + "381": 20.799999999999972, + "382": 102.90000000000002, + "383": 88.40000000000008, + "384": -50.999999999999936, + "385": 86.5500000000002, + "386": 97.15000000000013, + "387": 104.50000000000016, + "388": 101.80000000000013, + "389": 106.7500000000002, + "390": 111.95000000000026, + "391": 78.80000000000005, + "392": 102.4, + "393": 76.95000000000007, + "394": 114.00000000000018, + "395": 102.50000000000026, + "396": 91.90000000000012, + "397": 87.30000000000007, + "398": 111.35000000000022, + "399": 113.95000000000014, + "400": 13.300000000000024, + "401": 84.39999999999993, + "402": 79.29999999999998, + "403": 108.40000000000016, + "404": 45.99999999999993, + "405": 90.50000000000004, + "406": 55.79999999999986, + "407": 111.65000000000022, + "408": 106.54999999999998, + "409": 98.65000000000009, + "410": 86.39999999999996, + "411": 97.45000000000009, + "412": 103.95000000000012, + "413": 86.5500000000001, + "414": 95.90000000000013, + "415": 97.40000000000012, + "416": 102.60000000000002, + "417": 95.70000000000013, + "418": 97.85000000000011, + "419": 101.94999999999979, + "420": 86.49999999999979, + "421": 101.8500000000001, + "422": 115.10000000000002, + "423": 111.80000000000014, + "424": 112.35000000000028, + "425": 101.85000000000004, + "426": 103.00000000000016, + "427": 111.90000000000005, + "428": 109.39999999999986, + "429": 76.80000000000007, + "430": 108.60000000000018, + "431": 113.15000000000016, + "432": 111.95000000000005, + "433": 102.65000000000019, + "434": 81.15, + "435": 103.85000000000015, + "436": 110.35000000000012, + "437": 90.4499999999999, + "438": 104.94999999999992, + "439": 56.69999999999987, + "440": 104.20000000000017, + "441": 91.30000000000011, + "442": 109.24999999999999, + "443": 82.09999999999988, + "444": 99.54999999999994, + "445": 116.40000000000008, + "446": 107.64999999999988, + "447": 117.45000000000013, + "448": 117.75000000000028, + "449": 112.10000000000002, + "450": 106.45000000000017, + "451": 32.34999999999981, + "452": 98.95000000000002, + "453": 81.25000000000007, + "454": 114.3500000000001, + "455": 119.70000000000022, + "456": 113.15000000000023, + "457": 109.20000000000026, + "458": 113.85000000000014, + "459": 54.29999999999982, + "460": 4.8500000000000005, + "461": 98.20000000000014, + "462": 59.599999999999866, + "463": 100.20000000000007, + "464": 90.85000000000012, + "465": 104.10000000000008, + "466": 113.00000000000009, + "467": 115.50000000000026, + "468": 112.90000000000016, + "469": 110.84999999999997, + "470": 116.85, + "471": 96.85000000000004, + "472": 113.45000000000005, + "473": 91.29999999999995, + "474": 112.85000000000004, + "475": 68.79999999999991, + "476": 109.35000000000015, + "477": 117.65000000000019, + "478": 83.75000000000024, + "479": 116.20000000000022, + "480": 113.70000000000003, + "481": 112.95000000000007, + "482": 109.85000000000011, + "483": 110.7000000000002, + "484": 115.40000000000005, + "485": 111.94999999999997, + "486": 103.55000000000008, + "487": 91.14999999999985, + "488": 89.55, + "489": 88.65000000000019, + "490": 120.95000000000007, + "491": 112.60000000000002, + "492": 96.94999999999996, + "493": 111.99999999999993, + "494": 94.00000000000003, + "495": 116.20000000000002, + "496": 104.65000000000013, + "497": 107.65000000000009, + "498": 102.70000000000023, + "499": 34.69999999999977, + "500": 91.20000000000017, + "501": 118.65000000000003, + "502": 112.10000000000018, + "503": 113.75000000000009, + "504": 34.60000000000001, + "505": 105.40000000000005, + "506": 101.85000000000014, + "507": 110.09999999999997, + "508": 116.40000000000022, + "509": 107.1000000000001, + "510": 117.60000000000008, + "511": -4.399999999999987, + "512": 108.95000000000013, + "513": 106.70000000000003, + "514": 103.55000000000013, + "515": 93.30000000000003, + "516": 114.00000000000026, + "517": 112.4000000000001, + "518": 97.35000000000004, + "519": 103.90000000000002, + "520": 110.30000000000015, + "521": 105.30000000000014, + "522": 109.7500000000001, + "523": 122.10000000000004, + "524": 113.80000000000011, + "525": 81.55000000000007, + "526": 113.85000000000007, + "527": 115.85000000000004, + "528": 112.30000000000005, + "529": 114.45000000000013, + "530": 107.19999999999999, + "531": 105.60000000000004, + "532": 109.10000000000018, + "533": -12.499999999999986, + "534": 106.44999999999999, + "535": 106.65000000000005, + "536": 110.0000000000001, + "537": 106.95000000000013, + "538": 95.20000000000007, + "539": 117.00000000000007, + "540": 114.75000000000017, + "541": 121.6000000000001, + "542": 121.65000000000019, + "543": 77.39999999999998, + "544": 112.04999999999998, + "545": 104.75000000000003, + "546": 110.1500000000002, + "547": 116.34999999999997, + "548": 110.30000000000017, + "549": 107.60000000000012, + "550": 116.00000000000007, + "551": 99.30000000000022, + "552": 114.60000000000007, + "553": 106.85000000000007, + "554": 114.1500000000002, + "555": 111.3500000000001, + "556": 118.45000000000022, + "557": 105.55000000000008, + "558": 108.40000000000018, + "559": 112.80000000000008, + "560": 111.35000000000012, + "561": 109.65000000000008, + "562": 116.00000000000004, + "563": 109.80000000000021, + "564": 102.1, + "565": 102.64999999999998, + "566": 108.35000000000007, + "567": 115.5000000000002, + "568": 113.55000000000018, + "569": 113.65000000000005, + "570": 118.9500000000002, + "571": 105.35, + "572": 109.50000000000007, + "573": 106.85000000000001, + "574": 93.75000000000009, + "575": 114.24999999999997, + "576": 107.79999999999995, + "577": 119.04999999999998, + "578": 104.6500000000001, + "579": 114.25000000000023, + "580": 99.6500000000001, + "581": 117.65, + "582": 112.10000000000014, + "583": 91.50000000000004, + "584": 109.35000000000014, + "585": 117.40000000000005, + "586": 105.30000000000011, + "587": 107.85000000000007, + "588": 118.64999999999995, + "589": 117.75000000000011, + "590": 106.85000000000022, + "591": 71.74999999999999, + "592": 60.900000000000006, + "593": 89.20000000000017, + "594": 107.35000000000016, + "595": 116.80000000000008, + "596": 104.69999999999996, + "597": 110.60000000000001, + "598": 56.69999999999992, + "599": 14.55000000000003, + "600": 64.69999999999999, + "601": 90.10000000000012, + "602": 106.75000000000011, + "603": 93.95000000000019, + "604": 104.00000000000017, + "605": 80.29999999999998, + "606": 109.15000000000006, + "607": 99.80000000000015, + "608": 55.04999999999983, + "609": 82.15000000000003, + "610": 96.1, + "611": 53.30000000000002, + "612": 95.44999999999999, + "613": 85.6, + "614": 116.30000000000008, + "615": 111.90000000000008, + "616": 76.04999999999998, + "617": 104.30000000000005, + "618": 104.50000000000017, + "619": 119.70000000000005, + "620": 117.30000000000004, + "621": 107.60000000000004, + "622": 105.15000000000016, + "623": 101.30000000000008, + "624": 116.99999999999997, + "625": 24.299999999999983, + "626": 100.39999999999998, + "627": 102.99999999999996, + "628": 100.99999999999994, + "629": 106.5500000000002, + "630": 109.50000000000001, + "631": 119.65000000000006, + "632": 99.50000000000007, + "633": 98.54999999999995, + "634": 88.85000000000008, + "635": 119.3000000000001, + "636": 124.20000000000006, + "637": 109.85000000000005, + "638": 116.00000000000018, + "639": 104.15000000000015, + "640": 112.35000000000005, + "641": 65.44999999999995, + "642": 110.90000000000015, + "643": 109.30000000000013, + "644": 109.70000000000019, + "645": 98.55000000000005, + "646": 90.3500000000001, + "647": 115.3, + "648": 108.55000000000007, + "649": 112.55000000000011, + "650": 109.15000000000015, + "651": 115.25000000000018, + "652": 104.55000000000013, + "653": 114.6500000000001, + "654": 86.85000000000007, + "655": 112.05000000000005, + "656": 112.25000000000003, + "657": 105.85000000000002, + "658": 75.79999999999991, + "659": 116.6000000000002, + "660": 113.70000000000016, + "661": 121.60000000000011, + "662": 97.7500000000001, + "663": 101.05000000000003, + "664": 114.00000000000009, + "665": 111.95000000000003, + "666": 111.15000000000008, + "667": 113.10000000000008, + "668": 109.35000000000008, + "669": 90.65000000000003, + "670": 107.40000000000018, + "671": 110.75, + "672": 114.25, + "673": 112.7, + "674": 89.49999999999999, + "675": 105.75000000000018, + "676": 114.75000000000014, + "677": 112.75000000000013, + "678": 115.90000000000023, + "679": 117.8000000000002, + "680": 114.25000000000018, + "681": 68.3000000000001, + "682": 119.9500000000001, + "683": 105.95000000000009, + "684": 114.25000000000011, + "685": 100.30000000000011, + "686": 93.69999999999989, + "687": 105.00000000000001, + "688": 110.30000000000003, + "689": 118.15000000000015, + "690": 106.20000000000013, + "691": 93.59999999999988, + "692": 100.15000000000012, + "693": 117.05000000000001, + "694": 110.55000000000008, + "695": 113.20000000000013, + "696": 110.75000000000018, + "697": 114.90000000000018, + "698": 112.10000000000012, + "699": 108.70000000000019, + "700": 107.69999999999993, + "701": 120.45000000000003, + "702": 113.80000000000013, + "703": 101.8, + "704": 119.20000000000022, + "705": 114.3500000000001, + "706": 108.75, + "707": 113.04999999999993, + "708": 113.85000000000014, + "709": 111.4500000000001, + "710": 106.80000000000004, + "711": 104.94999999999986, + "712": 108.75000000000014, + "713": 101.8000000000002, + "714": 100.30000000000003, + "715": 92.74999999999984, + "716": 99.8000000000001, + "717": 110.10000000000012, + "718": 55.89999999999982, + "719": 115.75000000000001, + "720": 120.75000000000004, + "721": 116.90000000000006, + "722": 106.70000000000002, + "723": 109.70000000000007, + "724": 105.40000000000003, + "725": 117.14999999999998, + "726": 118.15000000000003, + "727": 119.25000000000013, + "728": 115.65000000000012, + "729": 110.95, + "730": 111.55000000000011, + "731": 111.15000000000013, + "732": 116.85000000000004, + "733": 117.15000000000005, + "734": 113.4000000000002, + "735": 107.84999999999998, + "736": 116.69999999999996, + "737": 115.05000000000007, + "738": 76.20000000000002, + "739": 108.85000000000005, + "740": 99.10000000000012, + "741": 116.95000000000005, + "742": 109.35000000000015, + "743": 110.70000000000016, + "744": 109.55000000000003, + "745": 116.75000000000013, + "746": 119.65000000000005, + "747": 109.8500000000001, + "748": 114.90000000000006, + "749": 112.00000000000021, + "750": 106.39999999999996, + "751": 91.60000000000005, + "752": 103.90000000000009, + "753": 111.1000000000002, + "754": 112.80000000000013, + "755": 102.45000000000009, + "756": 112.30000000000004, + "757": 110.0, + "758": 111.65000000000005, + "759": 117.45000000000017, + "760": 110.85000000000011, + "761": 110.15000000000009, + "762": 112.70000000000002, + "763": 110.34999999999988, + "764": 111.00000000000009, + "765": 96.19999999999999, + "766": 113.25000000000013, + "767": 106.79999999999988, + "768": 116.25000000000014, + "769": 114.10000000000022, + "770": 112.05000000000005, + "771": 123.35000000000004, + "772": 94.65000000000006, + "773": 111.35000000000007, + "774": 111.70000000000006, + "775": 114.7500000000001, + "776": 108.8000000000001, + "777": 115.70000000000005, + "778": 108.80000000000005, + "779": 105.80000000000014, + "780": 118.55000000000008, + "781": 117.55000000000003, + "782": 109.2, + "783": 105.94999999999997, + "784": 111.50000000000007, + "785": 106.54999999999997, + "786": 110.2000000000002, + "787": 120.40000000000019, + "788": 107.80000000000013, + "789": 108.80000000000008, + "790": 117.50000000000011, + "791": 110.90000000000018, + "792": 113.79999999999994, + "793": 107.50000000000001, + "794": 111.15000000000006, + "795": 110.05000000000011, + "796": 117.9000000000001, + "797": 103.04999999999997, + "798": 113.70000000000009, + "799": 112.10000000000001, + "800": 112.15000000000013, + "801": 117.00000000000004, + "802": 108.49999999999997, + "803": 117.75000000000011, + "804": 99.35000000000002, + "805": 105.7000000000001, + "806": 107.90000000000012, + "807": 118.55000000000013, + "808": 110.80000000000013, + "809": 104.3500000000001, + "810": 109.60000000000021, + "811": 107.20000000000005, + "812": 112.50000000000004, + "813": 115.65000000000016, + "814": 113.49999999999999, + "815": 114.05000000000001, + "816": 114.29999999999998, + "817": 111.80000000000008, + "818": 112.15000000000003, + "819": 117.15000000000013, + "820": 99.10000000000008, + "821": 115.45000000000006, + "822": 112.74999999999999, + "823": 120.70000000000006, + "824": 112.35000000000008, + "825": 102.64999999999998, + "826": 112.79999999999991, + "827": 89.00000000000001, + "828": 113.04999999999998, + "829": 111.60000000000002, + "830": 113.30000000000004, + "831": 107.45000000000003, + "832": 113.70000000000012, + "833": 105.40000000000008, + "834": 111.05000000000008, + "835": 109.5, + "836": 84.89999999999995, + "837": 115.35000000000011, + "838": 114.65000000000009, + "839": 111.35000000000008, + "840": 106.0000000000002, + "841": 115.05000000000014, + "842": 113.74999999999996, + "843": 111.85000000000008, + "844": 114.14999999999998, + "845": 115.10000000000011, + "846": 107.70000000000005, + "847": 107.35000000000007, + "848": 109.85000000000007, + "849": 100.64999999999999, + "850": 109.00000000000001, + "851": 108.35000000000007, + "852": 116.60000000000008, + "853": 109.50000000000006, + "854": 36.79999999999978, + "855": 116.90000000000009, + "856": 105.74999999999999, + "857": 107.64999999999996, + "858": 113.59999999999994, + "859": 121.90000000000006, + "860": 107.30000000000004, + "861": 95.99999999999991, + "862": 104.75000000000018, + "863": 104.50000000000017, + "864": 111.95000000000007, + "865": 114.14999999999999, + "866": 101.84999999999987, + "867": 114.70000000000014, + "868": 108.25000000000004, + "869": 110.99999999999994, + "870": 113.20000000000014, + "871": 105.35000000000016, + "872": 113.25000000000023, + "873": 120.90000000000005, + "874": 97.5, + "875": 110.20000000000017, + "876": 121.65000000000016, + "877": 108.49999999999997, + "878": 112.25000000000003, + "879": 113.20000000000007, + "880": 113.55000000000004, + "881": 111.85, + "882": 102.9000000000001, + "883": 108.85000000000011, + "884": 100.9499999999999, + "885": 98.25000000000006, + "886": 74.8000000000001, + "887": 112.45000000000007, + "888": 114.55000000000014, + "889": 109.74999999999996, + "890": 109.9000000000001, + "891": 109.60000000000011, + "892": 111.85, + "893": 76.34999999999995, + "894": 117.60000000000005, + "895": 112.90000000000016, + "896": 109.40000000000015, + "897": 111.55000000000015, + "898": 111.45000000000013, + "899": 121.05000000000021, + "900": 113.90000000000006, + "901": 103.45000000000016, + "902": 110.55000000000015, + "903": 105.50000000000009, + "904": 119.6000000000001, + "905": 117.05000000000013, + "906": 111.30000000000015, + "907": 110.2500000000002, + "908": 104.29999999999998, + "909": 114.00000000000003, + "910": 115.50000000000003, + "911": 110.10000000000004, + "912": 113.60000000000021, + "913": 115.75000000000004, + "914": 108.70000000000007, + "915": 116.5500000000001, + "916": 106.69999999999993, + "917": 115.40000000000015, + "918": 105.85000000000012, + "919": 109.80000000000022, + "920": 112.35000000000018, + "921": 115.75000000000003, + "922": 115.90000000000013, + "923": 113.35000000000008, + "924": 105.44999999999999, + "925": 110.19999999999996, + "926": 122.05000000000004, + "927": 115.20000000000003, + "928": 117.15000000000002, + "929": 102.89999999999998, + "930": 116.00000000000007, + "931": 99.39999999999993, + "932": 111.50000000000006, + "933": 113.40000000000005, + "934": 108.04999999999988, + "935": 122.70000000000005, + "936": 115.9500000000001, + "937": 107.70000000000005, + "938": 113.6, + "939": 114.20000000000005, + "940": 116.40000000000005, + "941": 112.55000000000024, + "942": 115.35000000000005, + "943": 116.35000000000005, + "944": 115.4000000000001, + "945": 117.35000000000011, + "946": 110.20000000000002, + "947": 111.90000000000006, + "948": 110.35000000000008, + "949": 107.80000000000003, + "950": 121.10000000000008, + "951": 111.25000000000014, + "952": 116.64999999999998, + "953": 114.64999999999999, + "954": 118.20000000000016, + "955": 104.00000000000014, + "956": 117.5000000000001, + "957": 103.4500000000001, + "958": 103.95000000000017, + "959": 120.30000000000008, + "960": 110.85000000000014, + "961": 120.8000000000001, + "962": 104.49999999999991, + "963": 107.89999999999993, + "964": 106.65000000000006, + "965": 95.65000000000006, + "966": 113.90000000000018, + "967": 115.7500000000002, + "968": 116.65000000000022, + "969": 114.5500000000001, + "970": 117.50000000000007, + "971": 107.8000000000001, + "972": 114.20000000000012, + "973": 112.55000000000005, + "974": 109.95000000000017, + "975": 112.9, + "976": 117.49999999999997, + "977": 102.30000000000013, + "978": 110.35000000000008, + "979": 110.75000000000016, + "980": 110.70000000000014, + "981": 42.09999999999988, + "982": 107.09999999999995, + "983": 112.10000000000012, + "984": 115.3500000000002, + "985": 114.99999999999994, + "986": 114.10000000000007, + "987": 112.05, + "988": 117.50000000000003, + "989": 110.34999999999992, + "990": 115.39999999999995, + "991": 119.55, + "992": 101.05, + "993": 106.30000000000003, + "994": 109.95000000000003, + "995": 116.6500000000001, + "996": 106.7000000000001, + "997": 112.15000000000003, + "998": 111.70000000000016, + "999": 114.9500000000001, + "1000": 113.55000000000008 + }, + "4": { + "1": -27.849999999999984, + "2": -20.19999999999996, + "3": -43.850000000000044, + "4": -94.6, + "5": -82.85, + "6": -42.600000000000065, + "7": -0.699999999999982, + "8": -42.00000000000016, + "9": -19.949999999999964, + "10": -62.9500000000001, + "11": -21.449999999999957, + "12": -16.14999999999998, + "13": -12.399999999999993, + "14": -16.94999999999999, + "15": -12.849999999999977, + "16": -99.90000000000003, + "17": -57.10000000000016, + "18": -20.49999999999999, + "19": -24.749999999999947, + "20": -60.2500000000001, + "21": -19.749999999999964, + "22": -21.749999999999986, + "23": -32.85000000000003, + "24": -23.49999999999995, + "25": -22.949999999999953, + "26": -21.699999999999957, + "27": -22.699999999999953, + "28": -28.39999999999999, + "29": -23.899999999999988, + "30": -16.99999999999999, + "31": -38.10000000000005, + "32": -39.84999999999998, + "33": -87.1, + "34": -23.54999999999995, + "35": -33.15000000000001, + "36": -11.949999999999994, + "37": -98.95, + "38": -0.7499999999999756, + "39": -4.200000000000005, + "40": -27.79999999999998, + "41": -13.799999999999981, + "42": -91.80000000000001, + "43": -8.75, + "44": -17.149999999999974, + "45": -16.799999999999976, + "46": -75.85, + "47": -64.89999999999998, + "48": -7.699999999999995, + "49": -18.599999999999973, + "50": -16.399999999999977, + "51": -15.14999999999997, + "52": -33.54999999999994, + "53": -12.749999999999982, + "54": -23.24999999999995, + "55": -4.899999999999997, + "56": -103.94999999999997, + "57": -10.299999999999986, + "58": -16.549999999999958, + "59": -20.94999999999996, + "60": -44.500000000000206, + "61": -45.65000000000006, + "62": -97.44999999999999, + "63": -84.00000000000001, + "64": -12.94999999999999, + "65": -43.70000000000007, + "66": -56.05000000000009, + "67": -15.49999999999998, + "68": -1.6500000000000024, + "69": -20.149999999999963, + "70": -66.49999999999999, + "71": -17.949999999999974, + "72": -21.949999999999978, + "73": -13.399999999999983, + "74": -23.099999999999973, + "75": -46.45, + "76": -11.399999999999965, + "77": -62.6, + "78": -15.799999999999978, + "79": -18.599999999999966, + "80": -30.79999999999999, + "81": -13.999999999999993, + "82": -55.150000000000084, + "83": -13.599999999999987, + "84": -19.899999999999963, + "85": -4.899999999999988, + "86": -37.35000000000001, + "87": -17.699999999999967, + "88": -7.949999999999993, + "89": -12.799999999999988, + "90": -61.1, + "91": -16.399999999999974, + "92": -17.79999999999997, + "93": -18.649999999999967, + "94": -90.8, + "95": -49.900000000000034, + "96": -92.10000000000012, + "97": -54.899999999999984, + "98": -70.19999999999999, + "99": -16.849999999999973, + "100": 7.149999999999957, + "101": -17.299999999999972, + "102": -0.15000000000000413, + "103": -89.95, + "104": -14.49999999999998, + "105": -79.75000000000001, + "106": -21.699999999999957, + "107": -46.30000000000007, + "108": -49.450000000000074, + "109": -64.05, + "110": -7.749999999999987, + "111": -78.19999999999999, + "112": -15.149999999999979, + "113": -22.84999999999995, + "114": -25.999999999999936, + "115": -18.849999999999966, + "116": -10.09999999999999, + "117": -19.899999999999963, + "118": -19.200000000000003, + "119": -77.65, + "120": -29.999999999999957, + "121": -24.099999999999948, + "122": -9.59999999999999, + "123": -16.89999999999998, + "124": -82.79999999999998, + "125": -16.299999999999976, + "126": -79.80000000000001, + "127": 14.10000000000002, + "128": -18.949999999999967, + "129": 3.2500000000000355, + "130": 8.950000000000031, + "131": -62.30000000000001, + "132": 23.949999999999804, + "133": -53.64999999999997, + "134": 3.550000000000032, + "135": -82.7, + "136": -3.75000000000004, + "137": -44.9000000000001, + "138": -19.149999999999967, + "139": -3.2499999999999902, + "140": -1.4499999999999775, + "141": -32.54999999999996, + "142": -50.09999999999998, + "143": -13.39999999999998, + "144": -75.9, + "145": 21.1, + "146": -93.9, + "147": -26.650000000000013, + "148": -20.79999999999996, + "149": 1.5500000000000431, + "150": -2.2999999999999785, + "151": -36.2, + "152": 9.100000000000005, + "153": -87.0, + "154": 27.199999999999854, + "155": 22.099999999999937, + "156": -54.85000000000009, + "157": -14.849999999999982, + "158": 1.4000000000000374, + "159": -18.600000000000016, + "160": -6.5000000000000115, + "161": -19.749999999999964, + "162": 18.050000000000004, + "163": -88.64999999999998, + "164": 7.05, + "165": -2.7499999999999547, + "166": 12.25, + "167": 28.54999999999984, + "168": 8.050000000000054, + "169": 31.749999999999893, + "170": -4.5000000000000115, + "171": -44.70000000000005, + "172": -86.25, + "173": -41.39999999999997, + "174": -54.45000000000003, + "175": -8.599999999999985, + "176": -58.3000000000001, + "177": -96.85, + "178": 25.699999999999868, + "179": -15.49999999999998, + "180": 8.650000000000034, + "181": -1.4499999999999686, + "182": -24.599999999999977, + "183": -15.900000000000002, + "184": -39.89999999999997, + "185": 24.84999999999995, + "186": -73.94999999999999, + "187": -84.0, + "188": -20.099999999999962, + "189": -84.30000000000001, + "190": -66.29999999999995, + "191": -14.200000000000003, + "192": -22.99999999999995, + "193": -38.64999999999999, + "194": 1.6500000000000559, + "195": -9.349999999999993, + "196": -0.29999999999998206, + "197": -67.14999999999993, + "198": -15.649999999999968, + "199": -9.049999999999985, + "200": -0.39999999999999075, + "201": -3.650000000000004, + "202": -84.20000000000005, + "203": -41.65000000000002, + "204": -30.4, + "205": -7.099999999999993, + "206": -17.899999999999967, + "207": 31.35000000000005, + "208": 54.84999999999998, + "209": 2.1499999999999986, + "210": -8.699999999999996, + "211": -3.7999999999999705, + "212": -9.850000000000001, + "213": -11.39999999999999, + "214": 82.55000000000015, + "215": -3.1499999999999835, + "216": -3.749999999999977, + "217": -26.049999999999933, + "218": 19.150000000000027, + "219": -73.49999999999999, + "220": -10.499999999999996, + "221": 7.300000000000016, + "222": 24.39999999999993, + "223": 68.24999999999989, + "224": -10.549999999999986, + "225": -59.049999999999955, + "226": 29.30000000000004, + "227": -8.900000000000048, + "228": 70.25000000000017, + "229": 35.84999999999979, + "230": 31.499999999999908, + "231": 25.69999999999991, + "232": -40.75000000000002, + "233": 3.799999999999967, + "234": -32.249999999999986, + "235": -23.850000000000016, + "236": 11.849999999999973, + "237": -13.750000000000036, + "238": 56.59999999999997, + "239": -54.79999999999998, + "240": 20.54999999999994, + "241": 34.499999999999915, + "242": -4.2000000000000295, + "243": 26.349999999999984, + "244": 63.39999999999985, + "245": 66.59999999999991, + "246": 35.49999999999987, + "247": 98.35000000000011, + "248": -76.49999999999997, + "249": 12.999999999999993, + "250": -31.25000000000002, + "251": 51.64999999999985, + "252": 32.40000000000004, + "253": 98.05000000000004, + "254": 96.55000000000013, + "255": 46.899999999999935, + "256": 39.34999999999984, + "257": 107.40000000000003, + "258": 32.25, + "259": 26.149999999999963, + "260": 15.199999999999967, + "261": 65.15000000000005, + "262": 5.849999999999987, + "263": -76.4, + "264": 42.74999999999981, + "265": 105.80000000000015, + "266": 0.8500000000000099, + "267": 23.29999999999999, + "268": 7.300000000000004, + "269": 12.000000000000046, + "270": 29.14999999999996, + "271": 39.25000000000002, + "272": 39.700000000000045, + "273": -4.25, + "274": 99.95000000000007, + "275": 100.30000000000005, + "276": 1.5499999999999357, + "277": 32.45000000000009, + "278": 93.29999999999998, + "279": 95.09999999999995, + "280": 43.94999999999997, + "281": 52.39999999999987, + "282": 9.299999999999976, + "283": -26.799999999999933, + "284": 3.4999999999999867, + "285": 100.55000000000008, + "286": 118.00000000000014, + "287": 48.600000000000016, + "288": 7.299999999999976, + "289": 36.000000000000036, + "290": 59.04999999999984, + "291": 45.49999999999999, + "292": 38.099999999999994, + "293": 22.699999999999967, + "294": 57.50000000000001, + "295": 95.25000000000006, + "296": 106.75000000000004, + "297": 84.50000000000021, + "298": 33.04999999999999, + "299": 108.65000000000015, + "300": 90.50000000000013, + "301": 102.30000000000007, + "302": 67.94999999999999, + "303": 112.8500000000002, + "304": 107.70000000000009, + "305": 65.2999999999999, + "306": 101.15, + "307": 99.50000000000011, + "308": 84.70000000000012, + "309": 100.75, + "310": 52.04999999999992, + "311": 53.00000000000002, + "312": 77.84999999999997, + "313": 57.849999999999945, + "314": 49.04999999999982, + "315": 101.19999999999997, + "316": -2.8500000000000174, + "317": 48.84999999999991, + "318": 90.19999999999997, + "319": 60.84999999999994, + "320": 40.349999999999916, + "321": 103.65000000000009, + "322": 97.0, + "323": -35.549999999999976, + "324": -16.34999999999998, + "325": 59.050000000000004, + "326": 96.94999999999992, + "327": 71.49999999999996, + "328": 47.79999999999999, + "329": 106.65000000000016, + "330": 93.5000000000001, + "331": 109.5500000000001, + "332": 60.50000000000006, + "333": 80.10000000000001, + "334": 96.45000000000013, + "335": 52.35000000000002, + "336": 104.70000000000012, + "337": 83.65000000000005, + "338": -10.900000000000036, + "339": 98.80000000000004, + "340": 59.39999999999985, + "341": 73.84999999999985, + "342": 79.05000000000001, + "343": 109.85000000000008, + "344": 97.10000000000001, + "345": 50.749999999999886, + "346": 112.00000000000001, + "347": 107.85000000000011, + "348": 88.95, + "349": 97.00000000000009, + "350": 109.20000000000012, + "351": 47.8499999999999, + "352": 113.3500000000001, + "353": 108.1000000000001, + "354": 95.55000000000008, + "355": 88.74999999999999, + "356": 64.64999999999986, + "357": 98.75000000000007, + "358": 110.49999999999994, + "359": 84.10000000000002, + "360": 97.75000000000014, + "361": 88.50000000000003, + "362": 102.40000000000005, + "363": 55.19999999999976, + "364": 93.55000000000001, + "365": 117.20000000000006, + "366": 98.9, + "367": 90.85000000000002, + "368": 99.95000000000006, + "369": 100.29999999999995, + "370": 13.700000000000049, + "371": 116.60000000000007, + "372": 111.25, + "373": 110.20000000000013, + "374": 69.29999999999987, + "375": 112.25000000000007, + "376": 113.05000000000004, + "377": 87.50000000000003, + "378": 32.549999999999976, + "379": 105.95000000000013, + "380": 56.84999999999989, + "381": 89.44999999999996, + "382": 86.74999999999994, + "383": 105.0, + "384": 104.99999999999999, + "385": 106.80000000000011, + "386": 108.00000000000014, + "387": 47.800000000000004, + "388": 103.35, + "389": 90.85000000000007, + "390": 95.55000000000003, + "391": 100.5500000000001, + "392": 111.59999999999994, + "393": 117.75000000000023, + "394": 103.65000000000012, + "395": 110.90000000000013, + "396": 106.8, + "397": 111.10000000000024, + "398": 87.20000000000006, + "399": 113.15000000000012, + "400": 99.8500000000001, + "401": 115.85000000000012, + "402": 88.15000000000029, + "403": 114.40000000000019, + "404": 110.4000000000002, + "405": 115.4000000000002, + "406": 117.00000000000007, + "407": 89.25000000000004, + "408": 103.9, + "409": 95.60000000000004, + "410": 115.2500000000001, + "411": 118.54999999999997, + "412": 102.40000000000013, + "413": 108.89999999999998, + "414": 53.34999999999994, + "415": 101.89999999999999, + "416": 113.85000000000016, + "417": 110.94999999999996, + "418": 90.90000000000002, + "419": 111.7999999999999, + "420": 114.85000000000014, + "421": 104.30000000000022, + "422": 97.24999999999989, + "423": 113.10000000000018, + "424": 106.69999999999993, + "425": 93.95000000000013, + "426": 93.54999999999998, + "427": -0.9499999999999846, + "428": 107.85000000000008, + "429": 110.75, + "430": 113.7000000000001, + "431": 101.5000000000001, + "432": 111.75000000000018, + "433": 112.1500000000002, + "434": 115.90000000000003, + "435": 118.50000000000011, + "436": 113.30000000000008, + "437": 104.40000000000002, + "438": 112.0500000000002, + "439": 108.30000000000001, + "440": 116.80000000000021, + "441": 109.5000000000002, + "442": 74.7000000000001, + "443": 118.40000000000008, + "444": 103.15000000000009, + "445": 112.85000000000007, + "446": 102.05000000000003, + "447": 99.35000000000002, + "448": 99.70000000000003, + "449": 104.05000000000004, + "450": 107.20000000000003, + "451": 110.90000000000015, + "452": 103.95000000000007, + "453": 93.70000000000005, + "454": 113.90000000000006, + "455": 84.45000000000009, + "456": 105.89999999999993, + "457": 109.30000000000003, + "458": 105.95000000000007, + "459": 94.44999999999997, + "460": 107.60000000000004, + "461": 114.6000000000001, + "462": 111.39999999999996, + "463": 104.90000000000002, + "464": 108.65000000000008, + "465": 119.75000000000001, + "466": 108.69999999999993, + "467": 109.14999999999999, + "468": 113.25000000000013, + "469": 107.4000000000002, + "470": 120.04999999999998, + "471": 110.30000000000001, + "472": 109.60000000000011, + "473": 106.75000000000004, + "474": 112.05000000000014, + "475": 106.6500000000001, + "476": 98.10000000000011, + "477": 114.35000000000002, + "478": 108.99999999999996, + "479": 113.10000000000004, + "480": 88.15000000000012, + "481": 117.95000000000005, + "482": 114.80000000000018, + "483": 111.80000000000025, + "484": 116.20000000000023, + "485": 111.04999999999993, + "486": 74.5000000000001, + "487": 117.80000000000018, + "488": 102.95000000000014, + "489": 112.65000000000005, + "490": 111.4500000000001, + "491": 99.9999999999999, + "492": 111.55000000000004, + "493": 103.00000000000009, + "494": 113.20000000000016, + "495": 109.35000000000001, + "496": 105.74999999999997, + "497": 119.55000000000003, + "498": 121.00000000000009, + "499": 116.20000000000007, + "500": 114.00000000000001, + "501": 114.25000000000007, + "502": 108.3000000000001, + "503": 108.40000000000008, + "504": 118.25000000000013, + "505": 102.65000000000012, + "506": 118.05000000000011, + "507": 121.0000000000001, + "508": 115.40000000000009, + "509": 104.95000000000012, + "510": 119.25000000000009, + "511": 88.05000000000014, + "512": 113.64999999999995, + "513": -9.449999999999994, + "514": 117.0000000000001, + "515": 109.44999999999995, + "516": 112.49999999999996, + "517": 109.80000000000008, + "518": 45.999999999999766, + "519": 117.45000000000007, + "520": 121.05000000000005, + "521": 114.70000000000019, + "522": 101.10000000000004, + "523": 109.95000000000009, + "524": 111.50000000000011, + "525": 103.70000000000007, + "526": 62.849999999999866, + "527": 117.05000000000008, + "528": 108.35000000000005, + "529": 109.44999999999999, + "530": 102.65000000000008, + "531": 115.84999999999998, + "532": 40.449999999999946, + "533": 114.25, + "534": 105.90000000000008, + "535": 91.1, + "536": 102.90000000000012, + "537": 97.70000000000012, + "538": -14.749999999999975, + "539": 112.30000000000005, + "540": 105.70000000000012, + "541": 104.90000000000006, + "542": 93.19999999999987, + "543": 110.65000000000018, + "544": 117.10000000000007, + "545": 112.10000000000021, + "546": 110.69999999999999, + "547": 50.04999999999984, + "548": 109.45000000000003, + "549": 67.69999999999989, + "550": 109.3, + "551": -14.849999999999977, + "552": 47.599999999999895, + "553": 74.44999999999989, + "554": 38.749999999999936, + "555": 52.89999999999991, + "556": 53.149999999999956, + "557": 65.99999999999996, + "558": 87.89999999999999, + "559": 66.95000000000003, + "560": 41.39999999999986, + "561": 78.54999999999998, + "562": 74.94999999999993, + "563": 44.64999999999988, + "564": 96.95000000000003, + "565": 16.799999999999997, + "566": 80.05000000000013, + "567": -7.500000000000012, + "568": 56.099999999999916, + "569": 49.14999999999993, + "570": 103.89999999999998, + "571": 71.84999999999995, + "572": 101.59999999999994, + "573": 78.19999999999999, + "574": 47.04999999999983, + "575": 39.099999999999916, + "576": 94.80000000000005, + "577": 93.65000000000013, + "578": 94.65000000000019, + "579": 38.59999999999996, + "580": 106.75000000000011, + "581": 57.049999999999855, + "582": 37.09999999999987, + "583": 92.34999999999997, + "584": 98.70000000000027, + "585": 79.40000000000002, + "586": 112.65000000000015, + "587": 107.74999999999997, + "588": 106.4999999999999, + "589": 88.45000000000005, + "590": 106.85000000000004, + "591": 88.09999999999995, + "592": 90.50000000000003, + "593": 68.65000000000002, + "594": 30.249999999999954, + "595": 85.75000000000001, + "596": 91.35000000000001, + "597": 74.64999999999998, + "598": 96.95000000000007, + "599": 101.70000000000009, + "600": 91.84999999999995, + "601": 112.85000000000011, + "602": 95.20000000000014, + "603": -12.149999999999961, + "604": 113.25000000000007, + "605": 114.85000000000024, + "606": 92.29999999999998, + "607": 80.69999999999997, + "608": 113.00000000000013, + "609": 116.95000000000013, + "610": 92.95000000000012, + "611": 73.05, + "612": 81.79999999999988, + "613": 97.90000000000002, + "614": 105.2, + "615": 112.40000000000005, + "616": 94.55000000000001, + "617": 109.55000000000014, + "618": 105.40000000000009, + "619": 101.2, + "620": 98.65, + "621": 74.19999999999997, + "622": 107.50000000000003, + "623": 99.3500000000001, + "624": 102.05, + "625": 118.1, + "626": 105.10000000000004, + "627": 112.95000000000005, + "628": 93.44999999999999, + "629": 100.10000000000007, + "630": 91.40000000000009, + "631": 112.15000000000016, + "632": 110.75000000000003, + "633": 105.90000000000002, + "634": 91.60000000000005, + "635": 49.34999999999979, + "636": 105.05000000000007, + "637": 119.40000000000003, + "638": 110.70000000000019, + "639": 109.85000000000016, + "640": 63.8, + "641": 109.79999999999997, + "642": 109.34999999999998, + "643": 117.1000000000002, + "644": 118.75, + "645": 111.10000000000011, + "646": 103.95000000000012, + "647": 34.14999999999991, + "648": 106.75000000000004, + "649": 81.2500000000001, + "650": 105.95, + "651": 112.80000000000007, + "652": 118.25000000000004, + "653": 115.55000000000011, + "654": 112.9000000000001, + "655": 107.55, + "656": 117.55000000000013, + "657": 99.15000000000015, + "658": 113.1500000000001, + "659": 106.45000000000005, + "660": 103.55000000000008, + "661": 102.30000000000008, + "662": 107.10000000000005, + "663": 103.70000000000007, + "664": 61.949999999999875, + "665": 102.85, + "666": 104.20000000000017, + "667": 110.30000000000003, + "668": 115.85000000000015, + "669": 109.4500000000001, + "670": 107.60000000000012, + "671": 116.00000000000014, + "672": 114.70000000000013, + "673": 114.80000000000005, + "674": 113.90000000000015, + "675": 117.5500000000001, + "676": 21.89999999999997, + "677": 109.10000000000022, + "678": 112.44999999999993, + "679": 116.95000000000006, + "680": 115.20000000000009, + "681": 103.70000000000006, + "682": 100.65000000000006, + "683": 105.54999999999991, + "684": 99.29999999999995, + "685": 105.35000000000015, + "686": 28.849999999999866, + "687": 116.35000000000001, + "688": 109.20000000000012, + "689": 114.95000000000003, + "690": 112.9000000000002, + "691": 106.55000000000014, + "692": 110.90000000000018, + "693": 108.95000000000017, + "694": 113.85000000000007, + "695": 111.6500000000001, + "696": 100.89999999999986, + "697": 106.49999999999997, + "698": 115.30000000000004, + "699": 112.30000000000008, + "700": 109.10000000000008, + "701": 110.10000000000014, + "702": 107.25000000000001, + "703": 109.75000000000009, + "704": 108.1999999999999, + "705": 112.75000000000014, + "706": 100.0, + "707": 109.70000000000009, + "708": 111.35000000000002, + "709": 110.65000000000008, + "710": 109.80000000000022, + "711": 111.25000000000014, + "712": 107.90000000000005, + "713": 105.4500000000001, + "714": 115.1, + "715": 110.25000000000017, + "716": 109.90000000000015, + "717": 108.75000000000006, + "718": 114.75000000000013, + "719": 113.10000000000004, + "720": 116.20000000000022, + "721": 110.8, + "722": 118.50000000000007, + "723": 112.00000000000001, + "724": 116.10000000000026, + "725": 111.84999999999992, + "726": 109.00000000000006, + "727": 109.39999999999999, + "728": 112.74999999999994, + "729": 115.35000000000008, + "730": 114.10000000000008, + "731": 113.35000000000001, + "732": 110.25000000000004, + "733": 109.09999999999997, + "734": 116.00000000000018, + "735": 115.40000000000012, + "736": 106.20000000000002, + "737": 113.3500000000001, + "738": 119.35000000000025, + "739": 115.15, + "740": 110.45000000000006, + "741": 107.55000000000014, + "742": 103.65000000000002, + "743": 97.55, + "744": 114.60000000000022, + "745": 108.19999999999992, + "746": 105.10000000000004, + "747": 109.50000000000004, + "748": 102.50000000000009, + "749": 122.3, + "750": 107.3, + "751": 107.15000000000016, + "752": 111.4000000000001, + "753": 114.35000000000011, + "754": 105.85000000000001, + "755": 110.45000000000013, + "756": 101.79999999999998, + "757": 112.00000000000011, + "758": 73.95000000000002, + "759": 110.50000000000009, + "760": 116.70000000000022, + "761": 117.10000000000018, + "762": 112.2, + "763": 90.60000000000018, + "764": 107.99999999999997, + "765": 112.35000000000012, + "766": 111.50000000000006, + "767": 110.10000000000005, + "768": 109.35000000000011, + "769": 107.40000000000009, + "770": 92.65000000000002, + "771": 112.45000000000005, + "772": 105.55, + "773": 106.04999999999987, + "774": 111.55000000000004, + "775": 101.25000000000003, + "776": 116.35000000000011, + "777": 117.30000000000004, + "778": 114.00000000000001, + "779": 115.40000000000018, + "780": 112.75000000000004, + "781": 117.2000000000001, + "782": 118.3000000000001, + "783": 108.85000000000008, + "784": 109.09999999999998, + "785": 109.00000000000009, + "786": 112.1500000000001, + "787": 111.49999999999996, + "788": 112.45000000000009, + "789": 113.60000000000014, + "790": 113.45000000000016, + "791": 98.10000000000002, + "792": 114.00000000000007, + "793": 114.8000000000001, + "794": 107.50000000000004, + "795": 109.20000000000005, + "796": 104.85000000000002, + "797": 107.40000000000012, + "798": 112.70000000000013, + "799": 107.70000000000007, + "800": 116.0500000000002, + "801": 102.80000000000007, + "802": 112.45000000000017, + "803": 113.85000000000007, + "804": 110.50000000000014, + "805": 111.35000000000016, + "806": 107.25000000000009, + "807": 113.10000000000015, + "808": 103.80000000000004, + "809": 107.60000000000007, + "810": 112.35000000000011, + "811": 109.60000000000004, + "812": 111.85, + "813": 106.35000000000011, + "814": 60.149999999999906, + "815": 108.55000000000015, + "816": 102.60000000000011, + "817": 112.65, + "818": 111.00000000000013, + "819": 116.15000000000019, + "820": 107.64999999999995, + "821": 100.05000000000018, + "822": 116.9, + "823": 111.49999999999997, + "824": 101.65000000000006, + "825": 113.7500000000001, + "826": 111.65000000000022, + "827": 107.29999999999997, + "828": 106.75000000000004, + "829": 112.00000000000009, + "830": 111.70000000000005, + "831": 111.54999999999998, + "832": 110.50000000000006, + "833": 114.00000000000009, + "834": 100.10000000000011, + "835": 107.25000000000007, + "836": 112.6500000000001, + "837": 110.00000000000016, + "838": 111.55000000000001, + "839": 105.2000000000001, + "840": 102.35, + "841": 114.10000000000005, + "842": 113.65000000000002, + "843": 112.35000000000005, + "844": 108.85000000000004, + "845": 103.55000000000005, + "846": 108.50000000000009, + "847": 113.3500000000002, + "848": 108.75000000000013, + "849": 107.90000000000009, + "850": 83.05000000000004, + "851": 94.39999999999993, + "852": 113.40000000000002, + "853": 78.40000000000008, + "854": 117.9500000000001, + "855": 109.79999999999995, + "856": 111.2500000000001, + "857": 117.0500000000001, + "858": 121.49999999999999, + "859": 92.64999999999998, + "860": 109.8500000000001, + "861": 103.00000000000014, + "862": 114.7500000000001, + "863": 116.60000000000015, + "864": 69.90000000000002, + "865": 100.40000000000008, + "866": 114.35000000000008, + "867": 114.10000000000014, + "868": 108.89999999999998, + "869": 110.25000000000014, + "870": 107.04999999999997, + "871": 102.50000000000013, + "872": 114.75000000000011, + "873": 109.35000000000005, + "874": 107.45000000000022, + "875": 111.29999999999995, + "876": 115.29999999999998, + "877": 107.54999999999995, + "878": 113.70000000000014, + "879": 107.90000000000005, + "880": 111.50000000000007, + "881": 101.2499999999999, + "882": 106.45000000000013, + "883": 110.2, + "884": 121.50000000000009, + "885": 122.40000000000016, + "886": 102.69999999999999, + "887": 116.15000000000022, + "888": 111.40000000000002, + "889": 121.05000000000018, + "890": 109.85000000000008, + "891": 103.40000000000013, + "892": 112.95, + "893": 110.54999999999998, + "894": 82.89999999999992, + "895": 121.00000000000004, + "896": 113.00000000000014, + "897": 107.80000000000004, + "898": 115.0000000000001, + "899": 104.45000000000003, + "900": 116.90000000000012, + "901": 114.00000000000001, + "902": 116.95000000000006, + "903": 111.85000000000007, + "904": 109.14999999999993, + "905": 109.75000000000014, + "906": 106.5000000000001, + "907": 117.00000000000014, + "908": 111.00000000000006, + "909": 110.90000000000002, + "910": 100.39999999999999, + "911": 106.00000000000014, + "912": 99.8000000000001, + "913": 117.0500000000001, + "914": 103.34999999999997, + "915": 102.95, + "916": 114.85000000000022, + "917": 109.70000000000007, + "918": 115.00000000000004, + "919": 3.350000000000014, + "920": 104.15000000000005, + "921": 109.65000000000013, + "922": 116.55000000000005, + "923": 114.10000000000008, + "924": 111.64999999999995, + "925": 93.9000000000001, + "926": 112.70000000000002, + "927": 106.65000000000005, + "928": 116.20000000000019, + "929": 103.79999999999997, + "930": 117.20000000000006, + "931": 115.60000000000016, + "932": 109.50000000000009, + "933": 104.10000000000007, + "934": 121.55000000000004, + "935": 102.55000000000017, + "936": 108.85000000000002, + "937": 113.05000000000015, + "938": 106.60000000000008, + "939": 107.85000000000015, + "940": 109.90000000000009, + "941": 113.80000000000007, + "942": 115.19999999999997, + "943": 106.9, + "944": 111.75000000000016, + "945": 112.90000000000002, + "946": 118.40000000000009, + "947": 107.39999999999995, + "948": 75.25000000000013, + "949": 108.40000000000002, + "950": 108.95000000000002, + "951": 92.10000000000011, + "952": 101.44999999999996, + "953": 116.2, + "954": 115.10000000000011, + "955": 114.30000000000015, + "956": 113.99999999999993, + "957": 115.40000000000003, + "958": 101.09999999999997, + "959": 117.65000000000003, + "960": 113.40000000000012, + "961": 110.50000000000018, + "962": 46.7999999999999, + "963": 113.74999999999991, + "964": 113.00000000000007, + "965": 109.45000000000003, + "966": 112.25000000000016, + "967": 113.60000000000011, + "968": 105.30000000000003, + "969": 113.04999999999997, + "970": 119.50000000000007, + "971": 113.6, + "972": 110.45000000000012, + "973": 118.60000000000016, + "974": 103.20000000000006, + "975": 109.05000000000014, + "976": 108.90000000000003, + "977": 108.50000000000003, + "978": 101.74999999999999, + "979": 63.999999999999886, + "980": 113.5000000000001, + "981": 113.6500000000001, + "982": 105.65000000000005, + "983": 114.05000000000011, + "984": 84.5000000000002, + "985": 108.09999999999982, + "986": 95.15000000000003, + "987": 109.70000000000017, + "988": 114.7000000000001, + "989": 97.30000000000008, + "990": 114.45000000000014, + "991": 99.95000000000009, + "992": 117.7500000000001, + "993": 110.39999999999999, + "994": 110.64999999999996, + "995": 108.75000000000009, + "996": 107.6000000000001, + "997": 113.75000000000009, + "998": 101.95000000000013, + "999": 119.30000000000001, + "1000": 107.79999999999997 + }, + "5": { + "1": -24.64999999999995, + "2": 0.6500000000000454, + "3": -68.15000000000002, + "4": -64.0500000000001, + "5": -10.99999999999999, + "6": -11.799999999999974, + "7": -31.950000000000017, + "8": -27.59999999999993, + "9": -31.800000000000022, + "10": -34.20000000000004, + "11": -61.39999999999999, + "12": -13.799999999999985, + "13": -57.15000000000011, + "14": -32.34999999999999, + "15": -58.3, + "16": -34.950000000000024, + "17": -3.050000000000022, + "18": -12.599999999999985, + "19": -68.20000000000006, + "20": -13.349999999999968, + "21": -41.00000000000014, + "22": -12.39999999999999, + "23": -5.299999999999996, + "24": -75.75, + "25": -41.05000000000003, + "26": -15.34999999999998, + "27": -26.90000000000002, + "28": -5.199999999999991, + "29": -7.849999999999986, + "30": -10.649999999999988, + "31": -20.349999999999962, + "32": -29.300000000000026, + "33": -10.199999999999992, + "34": -7.949999999999997, + "35": -20.44999999999996, + "36": -25.99999999999996, + "37": -15.749999999999972, + "38": -11.599999999999987, + "39": -14.649999999999974, + "40": -81.20000000000006, + "41": -34.75000000000002, + "42": -16.749999999999975, + "43": -17.399999999999974, + "44": -21.949999999999957, + "45": -19.649999999999967, + "46": -18.849999999999962, + "47": -16.999999999999975, + "48": -66.95000000000009, + "49": -11.999999999999988, + "50": -16.849999999999973, + "51": -15.94999999999997, + "52": -17.549999999999955, + "53": -44.50000000000006, + "54": -6.450000000000003, + "55": -17.94999999999997, + "56": -14.049999999999981, + "57": -14.949999999999966, + "58": -5.7499999999999885, + "59": -7.749999999999994, + "60": -18.499999999999957, + "61": -89.45, + "62": -21.09999999999996, + "63": -19.29999999999996, + "64": -17.799999999999972, + "65": -13.949999999999989, + "66": -94.65, + "67": -15.749999999999977, + "68": -15.999999999999973, + "69": -20.89999999999996, + "70": -10.749999999999991, + "71": -23.54999999999997, + "72": -31.150000000000023, + "73": -9.6, + "74": 0.6500000000000259, + "75": -61.00000000000011, + "76": -10.299999999999999, + "77": -93.0, + "78": -23.19999999999995, + "79": -22.40000000000001, + "80": -86.09999999999997, + "81": -18.899999999999967, + "82": -20.04999999999996, + "83": -18.399999999999967, + "84": -67.90000000000002, + "85": -18.099999999999973, + "86": -61.6000000000001, + "87": -8.050000000000002, + "88": -13.949999999999987, + "89": -13.399999999999979, + "90": -1.4999999999999818, + "91": -10.349999999999993, + "92": -86.34999999999998, + "93": -8.899999999999991, + "94": -10.299999999999997, + "95": -15.049999999999983, + "96": -71.14999999999998, + "97": -15.999999999999979, + "98": 0.15000000000004343, + "99": -21.699999999999957, + "100": -3.6999999999999904, + "101": -52.29999999999998, + "102": -9.65000000000001, + "103": -91.69999999999999, + "104": -88.99999999999994, + "105": -7.649999999999988, + "106": -7.09999999999999, + "107": 1.550000000000013, + "108": -89.89999999999999, + "109": -13.299999999999978, + "110": -47.0, + "111": -17.549999999999972, + "112": 8.950000000000017, + "113": -19.949999999999996, + "114": -2.699999999999993, + "115": -87.80000000000008, + "116": -91.29999999999998, + "117": 18.049999999999976, + "118": -19.24999999999996, + "119": -47.59999999999996, + "120": -6.850000000000003, + "121": 0.9500000000000397, + "122": -17.59999999999997, + "123": -87.8, + "124": -1.1499999999999826, + "125": -2.049999999999976, + "126": -17.799999999999972, + "127": -12.099999999999984, + "128": -14.249999999999986, + "129": -36.60000000000003, + "130": -7.149999999999996, + "131": -69.49999999999999, + "132": -13.999999999999988, + "133": -3.3999999999999577, + "134": -89.0, + "135": -0.8499999999999972, + "136": 2.1000000000000068, + "137": -13.299999999999976, + "138": -7.999999999999987, + "139": -5.200000000000035, + "140": -48.10000000000006, + "141": -99.04999999999998, + "142": -7.100000000000006, + "143": 1.6000000000000303, + "144": 2.599999999999989, + "145": -21.499999999999957, + "146": -61.849999999999966, + "147": -17.94999999999997, + "148": -22.19999999999995, + "149": -21.549999999999958, + "150": -17.99999999999997, + "151": -49.349999999999994, + "152": -59.40000000000003, + "153": -9.349999999999993, + "154": 1.500000000000014, + "155": 2.099999999999996, + "156": -15.399999999999991, + "157": -5.59999999999999, + "158": -24.14999999999995, + "159": -52.35, + "160": -19.349999999999966, + "161": -42.600000000000115, + "162": -27.20000000000001, + "163": -11.649999999999986, + "164": -61.1000000000001, + "165": -18.29999999999997, + "166": -100.2, + "167": -5.549999999999984, + "168": -96.05000000000001, + "169": -54.70000000000006, + "170": -74.7, + "171": -13.349999999999985, + "172": -8.149999999999991, + "173": -4.149999999999979, + "174": -15.299999999999983, + "175": -12.399999999999986, + "176": 2.40000000000002, + "177": -2.3499999999999686, + "178": 21.350000000000055, + "179": -9.100000000000039, + "180": 14.149999999999993, + "181": -72.14999999999999, + "182": -13.299999999999985, + "183": -51.599999999999966, + "184": -75.89999999999999, + "185": -4.099999999999998, + "186": -86.1, + "187": -24.549999999999947, + "188": -10.949999999999994, + "189": 25.94999999999995, + "190": -8.150000000000004, + "191": -2.499999999999975, + "192": -87.1, + "193": -53.39999999999999, + "194": -45.50000000000007, + "195": -45.80000000000006, + "196": -0.09999999999998921, + "197": 12.099999999999993, + "198": -74.50000000000003, + "199": -62.60000000000003, + "200": -25.85000000000002, + "201": -69.69999999999999, + "202": -28.649999999999995, + "203": -18.29999999999997, + "204": 16.25000000000004, + "205": -18.399999999999967, + "206": 8.500000000000036, + "207": -88.2, + "208": -18.54999999999997, + "209": -72.89999999999999, + "210": -3.8499999999999828, + "211": -6.649999999999996, + "212": -70.29999999999983, + "213": -39.04999999999998, + "214": 29.699999999999974, + "215": 1.0500000000000205, + "216": -57.749999999999964, + "217": 13.900000000000034, + "218": -4.649999999999975, + "219": -93.80000000000001, + "220": -22.349999999999955, + "221": -18.749999999999968, + "222": 0.9500000000000042, + "223": -13.649999999999984, + "224": -68.80000000000001, + "225": -55.45000000000002, + "226": -78.44999999999996, + "227": -82.34999999999998, + "228": -3.299999999999999, + "229": -18.899999999999967, + "230": -55.400000000000084, + "231": 2.899999999999995, + "232": -12.849999999999989, + "233": -1.5999999999999672, + "234": -11.949999999999998, + "235": -71.2, + "236": -84.55000000000001, + "237": -5.550000000000003, + "238": -20.349999999999962, + "239": -13.849999999999985, + "240": -77.55000000000001, + "241": 51.39999999999982, + "242": -65.4, + "243": -16.650000000000016, + "244": -46.999999999999986, + "245": -77.15000000000002, + "246": -16.899999999999977, + "247": -16.449999999999978, + "248": 21.450000000000035, + "249": 9.800000000000075, + "250": -13.049999999999986, + "251": -75.64999999999996, + "252": -19.150000000000063, + "253": -24.800000000000033, + "254": 1.7500000000000324, + "255": 6.750000000000026, + "256": -26.70000000000004, + "257": 30.099999999999852, + "258": 20.999999999999932, + "259": -24.69999999999998, + "260": -2.799999999999984, + "261": 19.05000000000001, + "262": -14.64999999999999, + "263": -68.79999999999997, + "264": 44.499999999999964, + "265": -16.750000000000043, + "266": 13.05000000000004, + "267": 35.649999999999885, + "268": -37.50000000000007, + "269": -60.95, + "270": 54.04999999999984, + "271": -13.700000000000033, + "272": 16.500000000000018, + "273": -6.5999999999999925, + "274": -52.19999999999999, + "275": 23.100000000000012, + "276": 38.44999999999977, + "277": -21.69999999999997, + "278": 35.74999999999983, + "279": -21.849999999999955, + "280": -30.399999999999963, + "281": -84.70000000000002, + "282": 30.399999999999824, + "283": 23.29999999999999, + "284": -44.8, + "285": -10.149999999999988, + "286": -8.59999999999999, + "287": -5.6999999999999975, + "288": 12.200000000000038, + "289": 16.500000000000036, + "290": -84.75, + "291": 6.250000000000013, + "292": 14.600000000000009, + "293": -78.7, + "294": 3.34999999999998, + "295": -2.7999999999999874, + "296": 1.500000000000021, + "297": 27.25000000000009, + "298": -97.1, + "299": 24.399999999999974, + "300": 48.09999999999984, + "301": 42.69999999999978, + "302": -4.599999999999982, + "303": -75.9, + "304": -27.00000000000004, + "305": -1.8499999999999597, + "306": 2.4999999999999694, + "307": 0.2500000000000029, + "308": -10.20000000000009, + "309": 43.85000000000005, + "310": 89.00000000000013, + "311": 43.14999999999994, + "312": 1.2000000000000124, + "313": 91.45000000000005, + "314": 72.75000000000009, + "315": 84.49999999999991, + "316": -35.20000000000007, + "317": 11.649999999999993, + "318": 7.84999999999992, + "319": 7.6999999999999575, + "320": 61.150000000000105, + "321": -16.1, + "322": 106.3000000000001, + "323": -16.94999999999996, + "324": -5.499999999999972, + "325": -60.900000000000006, + "326": 28.249999999999996, + "327": 99.20000000000006, + "328": -7.050000000000033, + "329": 13.800000000000063, + "330": -7.800000000000067, + "331": 51.75000000000007, + "332": 31.000000000000032, + "333": 28.200000000000045, + "334": -89.65000000000006, + "335": -0.3499999999999981, + "336": 100.80000000000004, + "337": 12.799999999999972, + "338": 70.2, + "339": 35.700000000000074, + "340": 55.45000000000011, + "341": 96.95000000000003, + "342": 12.399999999999991, + "343": 50.64999999999999, + "344": -20.050000000000022, + "345": 93.95000000000005, + "346": 95.20000000000005, + "347": 13.69999999999996, + "348": -16.100000000000023, + "349": 88.35000000000004, + "350": 27.84999999999993, + "351": 34.79999999999988, + "352": 31.50000000000005, + "353": 23.69999999999996, + "354": 38.500000000000014, + "355": 35.700000000000074, + "356": 56.450000000000045, + "357": 61.8, + "358": 112.65000000000005, + "359": 46.00000000000007, + "360": 55.34999999999988, + "361": 53.099999999999966, + "362": 44.7000000000001, + "363": 36.84999999999994, + "364": 82.00000000000003, + "365": 8.149999999999975, + "366": -30.599999999999994, + "367": 40.99999999999997, + "368": 97.85000000000004, + "369": 74.15000000000012, + "370": 37.39999999999981, + "371": 63.20000000000003, + "372": 35.64999999999997, + "373": 67.20000000000007, + "374": -30.350000000000033, + "375": 28.65, + "376": 6.300000000000008, + "377": 121.00000000000001, + "378": 49.900000000000055, + "379": 64.04999999999998, + "380": 7.99999999999999, + "381": 93.7500000000001, + "382": 19.29999999999999, + "383": 85.15000000000006, + "384": 67.60000000000008, + "385": 41.05000000000002, + "386": 115.10000000000014, + "387": 62.69999999999994, + "388": 54.050000000000054, + "389": 82.65000000000008, + "390": 24.449999999999967, + "391": 68.95000000000003, + "392": 95.25000000000004, + "393": 55.54999999999988, + "394": 50.05000000000004, + "395": 7.000000000000031, + "396": 77.60000000000011, + "397": 56.84999999999996, + "398": 66.70000000000005, + "399": 73.4, + "400": 113.95000000000003, + "401": 94.95000000000006, + "402": 74.9, + "403": 101.8500000000001, + "404": 35.45000000000007, + "405": 73.00000000000006, + "406": 81.75000000000007, + "407": 92.00000000000003, + "408": 99.30000000000001, + "409": 110.80000000000001, + "410": 85.05000000000004, + "411": 25.150000000000077, + "412": 67.29999999999998, + "413": 78.15000000000002, + "414": 117.95, + "415": 59.350000000000044, + "416": 106.30000000000007, + "417": 55.14999999999997, + "418": 90.14999999999998, + "419": 79.00000000000007, + "420": 109.80000000000001, + "421": 103.20000000000005, + "422": 99.20000000000009, + "423": 74.35, + "424": 75.90000000000005, + "425": 66.80000000000004, + "426": 49.199999999999974, + "427": 17.799999999999965, + "428": 107.10000000000004, + "429": 6.299999999999996, + "430": 105.20000000000006, + "431": 65.60000000000002, + "432": 84.00000000000004, + "433": 82.34999999999995, + "434": 115.30000000000005, + "435": 106.05, + "436": 37.24999999999994, + "437": 30.649999999999913, + "438": 96.80000000000001, + "439": 119.70000000000005, + "440": -16.650000000000002, + "441": 72.75, + "442": 118.50000000000007, + "443": 65.90000000000002, + "444": 110.60000000000002, + "445": 107.55, + "446": 99.60000000000001, + "447": 94.95000000000006, + "448": 93.85000000000014, + "449": 104.00000000000007, + "450": 89.75000000000001, + "451": 85.65, + "452": 90.25000000000003, + "453": 81.5, + "454": 83.90000000000009, + "455": 98.0, + "456": 82.65000000000005, + "457": 92.94999999999995, + "458": 90.85000000000012, + "459": 102.70000000000009, + "460": 89.85000000000008, + "461": 85.00000000000011, + "462": 97.25000000000009, + "463": 111.95000000000005, + "464": 39.45000000000012, + "465": 63.49999999999998, + "466": 93.85000000000008, + "467": 114.7500000000001, + "468": 106.45000000000005, + "469": 86.85000000000002, + "470": 106.00000000000003, + "471": 102.30000000000008, + "472": 102.10000000000011, + "473": 55.049999999999976, + "474": 95.20000000000013, + "475": 101.24999999999999, + "476": 107.95000000000002, + "477": 103.25000000000006, + "478": 87.90000000000009, + "479": 51.8999999999999, + "480": 100.15000000000003, + "481": 115.00000000000007, + "482": 112.35000000000015, + "483": 109.25000000000004, + "484": 119.40000000000008, + "485": 101.45, + "486": 88.45000000000006, + "487": 104.55000000000005, + "488": 112.85000000000007, + "489": 119.05000000000017, + "490": 87.35000000000001, + "491": 100.90000000000006, + "492": 114.0, + "493": 113.00000000000004, + "494": 106.90000000000002, + "495": 107.20000000000013, + "496": 114.50000000000003, + "497": 95.44999999999982, + "498": 111.50000000000016, + "499": 106.4, + "500": 116.35000000000008, + "501": 109.65000000000006, + "502": 99.40000000000013, + "503": 106.8500000000001, + "504": 104.80000000000007, + "505": 115.70000000000002, + "506": 120.00000000000009, + "507": 113.25000000000009, + "508": 111.94999999999996, + "509": 113.55000000000011, + "510": 101.30000000000017, + "511": 113.20000000000013, + "512": 74.65000000000002, + "513": 118.45000000000012, + "514": 115.80000000000004, + "515": 119.5000000000001, + "516": 101.70000000000009, + "517": 112.45000000000005, + "518": 103.90000000000013, + "519": 114.80000000000007, + "520": 99.95000000000009, + "521": 104.65000000000006, + "522": 109.45000000000019, + "523": 111.25000000000006, + "524": 109.90000000000009, + "525": 106.80000000000013, + "526": 111.10000000000008, + "527": 112.2500000000001, + "528": 117.80000000000001, + "529": 112.35000000000016, + "530": 30.899999999999952, + "531": 111.85000000000021, + "532": 112.45000000000012, + "533": 115.1500000000001, + "534": 89.44999999999996, + "535": 106.00000000000001, + "536": 105.14999999999999, + "537": 108.54999999999994, + "538": 103.95000000000002, + "539": 109.60000000000001, + "540": 79.69999999999992, + "541": 112.5500000000002, + "542": 116.05000000000022, + "543": 118.45000000000002, + "544": 109.75000000000011, + "545": 122.25000000000011, + "546": 106.20000000000003, + "547": 111.65000000000003, + "548": 113.30000000000008, + "549": 97.0499999999999, + "550": 111.40000000000008, + "551": 112.2500000000002, + "552": -4.399999999999996, + "553": 104.30000000000005, + "554": 118.35000000000007, + "555": 115.85000000000008, + "556": 117.0000000000001, + "557": 108.59999999999994, + "558": 113.80000000000013, + "559": 103.70000000000003, + "560": 74.69999999999999, + "561": 111.50000000000011, + "562": 105.1500000000001, + "563": 102.80000000000011, + "564": 123.00000000000001, + "565": 112.45, + "566": 113.8000000000001, + "567": 102.80000000000011, + "568": 118.70000000000007, + "569": 108.59999999999997, + "570": 112.85000000000015, + "571": 113.60000000000014, + "572": 114.25000000000006, + "573": 113.30000000000013, + "574": 106.85000000000004, + "575": 111.10000000000014, + "576": 110.20000000000012, + "577": 100.64999999999998, + "578": 103.64999999999999, + "579": 114.5000000000001, + "580": 113.35000000000005, + "581": 114.75000000000007, + "582": 110.10000000000015, + "583": 101.44999999999993, + "584": 113.90000000000018, + "585": 113.00000000000001, + "586": 106.50000000000009, + "587": 104.89999999999999, + "588": 114.90000000000012, + "589": 112.90000000000005, + "590": 119.75000000000003, + "591": 101.39999999999998, + "592": 103.75000000000003, + "593": 101.84999999999988, + "594": 109.65000000000003, + "595": 108.20000000000006, + "596": 115.5000000000002, + "597": 116.15000000000009, + "598": 107.30000000000007, + "599": 109.85, + "600": 109.25000000000013, + "601": 104.45000000000003, + "602": 111.95000000000005, + "603": 116.55000000000013, + "604": 114.80000000000001, + "605": 116.05000000000005, + "606": 114.90000000000008, + "607": 113.45000000000014, + "608": 109.60000000000015, + "609": 111.55000000000004, + "610": 112.00000000000018, + "611": 108.05000000000018, + "612": 115.30000000000004, + "613": 112.60000000000012, + "614": 114.65000000000005, + "615": 111.95000000000012, + "616": 113.05000000000024, + "617": 116.35000000000011, + "618": 110.95000000000002, + "619": 109.25000000000006, + "620": 113.90000000000025, + "621": 100.44999999999987, + "622": 109.15000000000018, + "623": 116.9000000000001, + "624": 115.10000000000014, + "625": 113.25000000000016, + "626": 110.3500000000001, + "627": 113.85000000000005, + "628": 108.75000000000013, + "629": 108.85000000000004, + "630": 106.20000000000016, + "631": 108.55000000000011, + "632": 114.8500000000001, + "633": 104.50000000000003, + "634": 108.84999999999988, + "635": 109.10000000000004, + "636": 120.79999999999998, + "637": 112.7, + "638": 106.40000000000012, + "639": 113.80000000000014, + "640": 3.850000000000038, + "641": 59.649999999999864, + "642": 60.19999999999987, + "643": 42.59999999999997, + "644": 36.04999999999996, + "645": 109.25000000000011, + "646": 52.25, + "647": 119.15000000000005, + "648": 56.89999999999993, + "649": 96.19999999999982, + "650": 73.55000000000005, + "651": 54.94999999999993, + "652": 55.04999999999993, + "653": 45.0999999999999, + "654": 112.20000000000005, + "655": 55.39999999999993, + "656": 111.0, + "657": 65.39999999999996, + "658": 66.44999999999987, + "659": 54.54999999999988, + "660": 65.29999999999984, + "661": 61.099999999999866, + "662": 109.54999999999997, + "663": 14.550000000000002, + "664": 85.30000000000001, + "665": 86.89999999999999, + "666": 74.34999999999997, + "667": 18.399999999999963, + "668": 112.10000000000014, + "669": 107.40000000000003, + "670": 111.70000000000012, + "671": 61.64999999999984, + "672": 97.85000000000002, + "673": 16.649999999999892, + "674": 101.75000000000009, + "675": 111.85000000000005, + "676": 106.90000000000013, + "677": 108.85000000000004, + "678": 108.5, + "679": 111.70000000000019, + "680": 108.95000000000016, + "681": 111.3500000000002, + "682": 60.69999999999979, + "683": 74.94999999999993, + "684": 60.64999999999983, + "685": 112.69999999999997, + "686": 81.40000000000003, + "687": 113.60000000000018, + "688": 77.80000000000004, + "689": 107.69999999999997, + "690": 111.30000000000014, + "691": -0.9999999999999816, + "692": 87.90000000000019, + "693": 110.35, + "694": 113.69999999999997, + "695": 7.600000000000028, + "696": 114.8, + "697": 69.84999999999998, + "698": 27.349999999999895, + "699": 115.5000000000001, + "700": 109.45000000000009, + "701": 18.849999999999987, + "702": 67.84999999999998, + "703": 108.65, + "704": 110.25000000000017, + "705": 112.6000000000001, + "706": 116.05000000000008, + "707": 117.25000000000003, + "708": 110.80000000000017, + "709": 93.60000000000001, + "710": 109.9000000000001, + "711": 118.25000000000004, + "712": 112.95000000000019, + "713": 106.3000000000001, + "714": 109.90000000000013, + "715": 99.90000000000003, + "716": 117.65000000000018, + "717": 104.05, + "718": 66.34999999999982, + "719": 100.44999999999999, + "720": 102.25000000000013, + "721": 111.65000000000008, + "722": 108.94999999999997, + "723": 49.64999999999995, + "724": 102.20000000000006, + "725": 109.75000000000004, + "726": 102.70000000000005, + "727": 38.5999999999999, + "728": 95.50000000000009, + "729": 118.30000000000004, + "730": 112.30000000000017, + "731": 108.25000000000009, + "732": 107.70000000000019, + "733": 110.44999999999992, + "734": 118.8000000000001, + "735": 105.45000000000003, + "736": 37.599999999999916, + "737": 18.74999999999995, + "738": 102.34999999999984, + "739": 107.50000000000016, + "740": 105.45000000000007, + "741": 96.49999999999999, + "742": 16.300000000000036, + "743": 32.15000000000006, + "744": 112.10000000000008, + "745": 76.80000000000008, + "746": 108.4000000000001, + "747": 113.10000000000001, + "748": 77.64999999999993, + "749": 75.54999999999997, + "750": 115.35000000000016, + "751": 101.85000000000007, + "752": 118.85000000000004, + "753": -33.04999999999998, + "754": 81.85000000000021, + "755": 111.60000000000015, + "756": 113.10000000000008, + "757": 103.7, + "758": 107.39999999999998, + "759": 114.20000000000005, + "760": 107.9, + "761": 115.15000000000013, + "762": 110.20000000000016, + "763": 117.25000000000001, + "764": 59.74999999999984, + "765": 115.50000000000001, + "766": 105.75, + "767": 114.80000000000022, + "768": 111.75000000000003, + "769": 119.0, + "770": 114.15000000000009, + "771": 117.05000000000008, + "772": 113.95000000000006, + "773": 112.15000000000008, + "774": 106.15, + "775": 104.35000000000004, + "776": 111.75000000000007, + "777": 109.70000000000005, + "778": 109.95000000000006, + "779": 123.60000000000012, + "780": 108.85000000000005, + "781": 111.30000000000005, + "782": 107.85000000000008, + "783": 111.25000000000023, + "784": 109.75, + "785": 113.60000000000008, + "786": 104.75000000000004, + "787": 116.25000000000014, + "788": 104.55, + "789": 108.95000000000007, + "790": 112.75000000000023, + "791": 97.80000000000005, + "792": 113.1000000000001, + "793": 110.60000000000012, + "794": 111.15, + "795": 118.39999999999995, + "796": 111.24999999999999, + "797": 112.35000000000008, + "798": 108.60000000000014, + "799": 0.2500000000000129, + "800": 108.40000000000002, + "801": 114.0, + "802": 119.05000000000007, + "803": 114.25000000000014, + "804": 117.10000000000008, + "805": 112.35000000000001, + "806": 109.99999999999996, + "807": 107.55, + "808": 113.70000000000009, + "809": 114.05000000000005, + "810": 107.30000000000001, + "811": 117.30000000000008, + "812": 116.80000000000007, + "813": 110.6, + "814": 109.34999999999997, + "815": 104.45000000000002, + "816": 105.70000000000016, + "817": 110.85000000000005, + "818": 119.70000000000019, + "819": 106.49999999999997, + "820": 110.29999999999988, + "821": 110.2000000000001, + "822": 114.05000000000004, + "823": 114.05000000000008, + "824": 109.8000000000001, + "825": 120.05000000000008, + "826": 116.80000000000004, + "827": 108.95000000000006, + "828": 101.20000000000007, + "829": 115.10000000000008, + "830": 117.30000000000001, + "831": 114.50000000000009, + "832": 114.15000000000013, + "833": 112.6000000000001, + "834": 119.30000000000008, + "835": 114.45000000000013, + "836": 114.55000000000015, + "837": 102.85000000000004, + "838": 108.25000000000004, + "839": 121.45000000000006, + "840": 110.30000000000007, + "841": 111.55000000000004, + "842": 111.10000000000014, + "843": 112.85000000000007, + "844": 108.90000000000015, + "845": 117.20000000000006, + "846": 112.45000000000013, + "847": 70.74999999999996, + "848": 114.79999999999993, + "849": 119.75000000000018, + "850": 43.749999999999865, + "851": 110.49999999999997, + "852": 73.54999999999998, + "853": 108.69999999999995, + "854": 108.8000000000001, + "855": 107.25000000000011, + "856": 108.55000000000011, + "857": 118.55000000000005, + "858": 109.15000000000003, + "859": 53.69999999999987, + "860": 121.35000000000014, + "861": 105.45000000000013, + "862": 114.80000000000015, + "863": 110.4, + "864": 107.14999999999999, + "865": 118.55000000000017, + "866": 78.80000000000003, + "867": 115.55000000000013, + "868": 91.5000000000002, + "869": 42.150000000000006, + "870": 117.7, + "871": 69.59999999999997, + "872": 93.50000000000003, + "873": 111.15000000000009, + "874": 108.95000000000009, + "875": 97.55000000000007, + "876": 86.85000000000004, + "877": 102.10000000000011, + "878": 109.10000000000008, + "879": 114.90000000000015, + "880": 113.05000000000007, + "881": 108.44999999999996, + "882": 108.10000000000005, + "883": 110.35000000000005, + "884": 46.84999999999993, + "885": 104.35000000000014, + "886": 105.89999999999999, + "887": 99.00000000000001, + "888": 103.15000000000006, + "889": 111.10000000000002, + "890": 76.09999999999997, + "891": 109.60000000000025, + "892": 112.45000000000012, + "893": 109.74999999999993, + "894": 102.10000000000008, + "895": 107.80000000000021, + "896": 98.05000000000003, + "897": 42.249999999999964, + "898": 100.85000000000004, + "899": 113.14999999999993, + "900": 80.39999999999993, + "901": 107.00000000000013, + "902": 45.39999999999989, + "903": 118.95000000000007, + "904": 107.65000000000008, + "905": 106.09999999999995, + "906": 99.2500000000001, + "907": 116.00000000000013, + "908": 115.60000000000018, + "909": 91.60000000000015, + "910": 94.74999999999997, + "911": 105.40000000000013, + "912": 110.30000000000011, + "913": 108.05000000000008, + "914": -10.999999999999993, + "915": 104.20000000000013, + "916": 115.19999999999999, + "917": 114.70000000000007, + "918": 118.50000000000017, + "919": 108.25000000000001, + "920": 105.95000000000012, + "921": 113.60000000000004, + "922": 108.85000000000005, + "923": 106.19999999999997, + "924": 97.80000000000004, + "925": 104.40000000000013, + "926": 115.6500000000002, + "927": 107.50000000000007, + "928": 111.39999999999998, + "929": 112.70000000000014, + "930": 112.1000000000001, + "931": 109.10000000000002, + "932": 102.85000000000004, + "933": 110.90000000000016, + "934": 69.49999999999983, + "935": 114.7000000000001, + "936": 111.00000000000006, + "937": 114.5500000000002, + "938": 113.7500000000001, + "939": 109.00000000000007, + "940": 61.79999999999981, + "941": 115.4000000000002, + "942": 106.10000000000008, + "943": 115.95000000000002, + "944": 81.60000000000007, + "945": 115.4500000000001, + "946": 108.80000000000008, + "947": 112.95000000000012, + "948": 109.95000000000003, + "949": 111.5000000000002, + "950": 103.6, + "951": 95.90000000000002, + "952": 110.59999999999997, + "953": 108.19999999999999, + "954": 113.45000000000017, + "955": 102.95000000000006, + "956": 107.50000000000003, + "957": 85.89999999999999, + "958": 113.70000000000016, + "959": 117.30000000000001, + "960": 107.20000000000003, + "961": 106.3000000000001, + "962": 96.94999999999995, + "963": 113.30000000000015, + "964": 105.60000000000005, + "965": 112.60000000000005, + "966": 112.75000000000003, + "967": 79.54999999999997, + "968": 113.0000000000001, + "969": 106.3000000000001, + "970": 112.84999999999991, + "971": 97.45000000000003, + "972": 117.20000000000009, + "973": 111.40000000000023, + "974": 111.35000000000005, + "975": 121.6000000000001, + "976": 106.94999999999996, + "977": 111.70000000000016, + "978": 107.70000000000003, + "979": 107.40000000000019, + "980": 104.4499999999999, + "981": 116.25000000000013, + "982": 110.94999999999999, + "983": 114.55000000000005, + "984": 38.399999999999785, + "985": 111.45000000000007, + "986": 96.15000000000006, + "987": 108.70000000000003, + "988": 110.75000000000007, + "989": 110.05000000000011, + "990": 116.05000000000005, + "991": 103.70000000000003, + "992": 115.60000000000015, + "993": 114.15000000000005, + "994": 4.15, + "995": 111.35000000000008, + "996": 115.90000000000005, + "997": 111.70000000000009, + "998": 108.04999999999988, + "999": 105.25000000000017, + "1000": 108.95000000000016 + } + }, + "config": { + "io_settings": { + "save_agent_actions": true, + "save_step_metadata": false, + "save_pcap_logs": false, + "save_sys_logs": false, + "sys_log_level": "WARNING" + }, + "game": { + "max_episode_length": 128, + "ports": [ + "HTTP", + "POSTGRES_SERVER" + ], + "protocols": [ + "ICMP", + "TCP", + "UDP" + ], + "thresholds": { + "nmne": { + "high": 10, + "medium": 5, + "low": 0 + } + } + }, + "agents": [ + { + "ref": "client_2_green_user", + "team": "GREEN", + "type": "ProbabilisticAgent", + "agent_settings": { + "action_probabilities": { + "0": 0.3, + "1": 0.6, + "2": 0.1 + } + }, + "observation_space": null, + "action_space": { + "action_list": [ + { + "type": "DONOTHING" + }, + { + "type": "NODE_APPLICATION_EXECUTE" + } + ], + "options": { + "nodes": [ + { + "node_name": "client_2", + "applications": [ + { + "application_name": "WebBrowser" + }, + { + "application_name": "DatabaseClient" + } + ] + } + ], + "max_folders_per_node": 1, + "max_files_per_folder": 1, + "max_services_per_node": 1, + "max_applications_per_node": 2 + }, + "action_map": { + "0": { + "action": "DONOTHING", + "options": {} + }, + "1": { + "action": "NODE_APPLICATION_EXECUTE", + "options": { + "node_id": 0, + "application_id": 0 + } + }, + "2": { + "action": "NODE_APPLICATION_EXECUTE", + "options": { + "node_id": 0, + "application_id": 1 + } + } + } + }, + "reward_function": { + "reward_components": [ + { + "type": "WEBPAGE_UNAVAILABLE_PENALTY", + "weight": 0.25, + "options": { + "node_hostname": "client_2" + } + }, + { + "type": "GREEN_ADMIN_DATABASE_UNREACHABLE_PENALTY", + "weight": 0.05, + "options": { + "node_hostname": "client_2" + } + } + ] + } + }, + { + "ref": "client_1_green_user", + "team": "GREEN", + "type": "ProbabilisticAgent", + "agent_settings": { + "action_probabilities": { + "0": 0.3, + "1": 0.6, + "2": 0.1 + } + }, + "observation_space": null, + "action_space": { + "action_list": [ + { + "type": "DONOTHING" + }, + { + "type": "NODE_APPLICATION_EXECUTE" + } + ], + "options": { + "nodes": [ + { + "node_name": "client_1", + "applications": [ + { + "application_name": "WebBrowser" + }, + { + "application_name": "DatabaseClient" + } + ] + } + ], + "max_folders_per_node": 1, + "max_files_per_folder": 1, + "max_services_per_node": 1, + "max_applications_per_node": 2 + }, + "action_map": { + "0": { + "action": "DONOTHING", + "options": {} + }, + "1": { + "action": "NODE_APPLICATION_EXECUTE", + "options": { + "node_id": 0, + "application_id": 0 + } + }, + "2": { + "action": "NODE_APPLICATION_EXECUTE", + "options": { + "node_id": 0, + "application_id": 1 + } + } + } + }, + "reward_function": { + "reward_components": [ + { + "type": "WEBPAGE_UNAVAILABLE_PENALTY", + "weight": 0.25, + "options": { + "node_hostname": "client_1" + } + }, + { + "type": "GREEN_ADMIN_DATABASE_UNREACHABLE_PENALTY", + "weight": 0.05, + "options": { + "node_hostname": "client_1" + } + } + ] + } + }, + { + "ref": "data_manipulation_attacker", + "team": "RED", + "type": "RedDatabaseCorruptingAgent", + "observation_space": null, + "action_space": { + "action_list": [ + { + "type": "DONOTHING" + }, + { + "type": "NODE_APPLICATION_EXECUTE" + } + ], + "options": { + "nodes": [ + { + "node_name": "client_1", + "applications": [ + { + "application_name": "DataManipulationBot" + } + ] + }, + { + "node_name": "client_2", + "applications": [ + { + "application_name": "DataManipulationBot" + } + ] + } + ], + "max_folders_per_node": 1, + "max_files_per_folder": 1, + "max_services_per_node": 1 + } + }, + "reward_function": { + "reward_components": [ + { + "type": "DUMMY" + } + ] + }, + "agent_settings": { + "start_settings": { + "start_step": 25, + "frequency": 20, + "variance": 5 + } + } + }, + { + "ref": "defender", + "team": "BLUE", + "type": "ProxyAgent", + "observation_space": { + "type": "CUSTOM", + "options": { + "components": [ + { + "type": "NODES", + "label": "NODES", + "options": { + "hosts": [ + { + "hostname": "domain_controller" + }, + { + "hostname": "web_server", + "services": [ + { + "service_name": "WebServer" + } + ] + }, + { + "hostname": "database_server", + "folders": [ + { + "folder_name": "database", + "files": [ + { + "file_name": "database.db" + } + ] + } + ] + }, + { + "hostname": "backup_server" + }, + { + "hostname": "security_suite" + }, + { + "hostname": "client_1" + }, + { + "hostname": "client_2" + } + ], + "num_services": 1, + "num_applications": 0, + "num_folders": 1, + "num_files": 1, + "num_nics": 2, + "include_num_access": false, + "include_nmne": true, + "routers": [ + { + "hostname": "router_1" + } + ], + "num_ports": 0, + "ip_list": [ + "192.168.1.10", + "192.168.1.12", + "192.168.1.14", + "192.168.1.16", + "192.168.1.110", + "192.168.10.21", + "192.168.10.22", + "192.168.10.110" + ], + "wildcard_list": [ + "0.0.0.1" + ], + "port_list": [ + 80, + 5432 + ], + "protocol_list": [ + "ICMP", + "TCP", + "UDP" + ], + "num_rules": 10 + } + }, + { + "type": "LINKS", + "label": "LINKS", + "options": { + "link_references": [ + "router_1:eth-1<->switch_1:eth-8", + "router_1:eth-2<->switch_2:eth-8", + "switch_1:eth-1<->domain_controller:eth-1", + "switch_1:eth-2<->web_server:eth-1", + "switch_1:eth-3<->database_server:eth-1", + "switch_1:eth-4<->backup_server:eth-1", + "switch_1:eth-7<->security_suite:eth-1", + "switch_2:eth-1<->client_1:eth-1", + "switch_2:eth-2<->client_2:eth-1", + "switch_2:eth-7<->security_suite:eth-2" + ] + } + }, + { + "type": "NONE", + "label": "ICS", + "options": {} + } + ] + } + }, + "action_space": { + "action_list": [ + { + "type": "DONOTHING" + }, + { + "type": "NODE_SERVICE_SCAN" + }, + { + "type": "NODE_SERVICE_STOP" + }, + { + "type": "NODE_SERVICE_START" + }, + { + "type": "NODE_SERVICE_PAUSE" + }, + { + "type": "NODE_SERVICE_RESUME" + }, + { + "type": "NODE_SERVICE_RESTART" + }, + { + "type": "NODE_SERVICE_DISABLE" + }, + { + "type": "NODE_SERVICE_ENABLE" + }, + { + "type": "NODE_SERVICE_FIX" + }, + { + "type": "NODE_FILE_SCAN" + }, + { + "type": "NODE_FILE_CHECKHASH" + }, + { + "type": "NODE_FILE_DELETE" + }, + { + "type": "NODE_FILE_REPAIR" + }, + { + "type": "NODE_FILE_RESTORE" + }, + { + "type": "NODE_FOLDER_SCAN" + }, + { + "type": "NODE_FOLDER_CHECKHASH" + }, + { + "type": "NODE_FOLDER_REPAIR" + }, + { + "type": "NODE_FOLDER_RESTORE" + }, + { + "type": "NODE_OS_SCAN" + }, + { + "type": "NODE_SHUTDOWN" + }, + { + "type": "NODE_STARTUP" + }, + { + "type": "NODE_RESET" + }, + { + "type": "ROUTER_ACL_ADDRULE" + }, + { + "type": "ROUTER_ACL_REMOVERULE" + }, + { + "type": "HOST_NIC_ENABLE" + }, + { + "type": "HOST_NIC_DISABLE" + } + ], + "action_map": { + "0": { + "action": "DONOTHING", + "options": {} + }, + "1": { + "action": "NODE_SERVICE_SCAN", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "2": { + "action": "NODE_SERVICE_STOP", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "3": { + "action": "NODE_SERVICE_START", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "4": { + "action": "NODE_SERVICE_PAUSE", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "5": { + "action": "NODE_SERVICE_RESUME", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "6": { + "action": "NODE_SERVICE_RESTART", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "7": { + "action": "NODE_SERVICE_DISABLE", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "8": { + "action": "NODE_SERVICE_ENABLE", + "options": { + "node_id": 1, + "service_id": 0 + } + }, + "9": { + "action": "NODE_FILE_SCAN", + "options": { + "node_id": 2, + "folder_id": 0, + "file_id": 0 + } + }, + "10": { + "action": "NODE_FILE_CHECKHASH", + "options": { + "node_id": 2, + "folder_id": 0, + "file_id": 0 + } + }, + "11": { + "action": "NODE_FILE_DELETE", + "options": { + "node_id": 2, + "folder_id": 0, + "file_id": 0 + } + }, + "12": { + "action": "NODE_FILE_REPAIR", + "options": { + "node_id": 2, + "folder_id": 0, + "file_id": 0 + } + }, + "13": { + "action": "NODE_SERVICE_FIX", + "options": { + "node_id": 2, + "service_id": 0 + } + }, + "14": { + "action": "NODE_FOLDER_SCAN", + "options": { + "node_id": 2, + "folder_id": 0 + } + }, + "15": { + "action": "NODE_FOLDER_CHECKHASH", + "options": { + "node_id": 2, + "folder_id": 0 + } + }, + "16": { + "action": "NODE_FOLDER_REPAIR", + "options": { + "node_id": 2, + "folder_id": 0 + } + }, + "17": { + "action": "NODE_FOLDER_RESTORE", + "options": { + "node_id": 2, + "folder_id": 0 + } + }, + "18": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 0 + } + }, + "19": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 0 + } + }, + "20": { + "action": "NODE_STARTUP", + "options": { + "node_id": 0 + } + }, + "21": { + "action": "NODE_RESET", + "options": { + "node_id": 0 + } + }, + "22": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 1 + } + }, + "23": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 1 + } + }, + "24": { + "action": "NODE_STARTUP", + "options": { + "node_id": 1 + } + }, + "25": { + "action": "NODE_RESET", + "options": { + "node_id": 1 + } + }, + "26": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 2 + } + }, + "27": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 2 + } + }, + "28": { + "action": "NODE_STARTUP", + "options": { + "node_id": 2 + } + }, + "29": { + "action": "NODE_RESET", + "options": { + "node_id": 2 + } + }, + "30": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 3 + } + }, + "31": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 3 + } + }, + "32": { + "action": "NODE_STARTUP", + "options": { + "node_id": 3 + } + }, + "33": { + "action": "NODE_RESET", + "options": { + "node_id": 3 + } + }, + "34": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 4 + } + }, + "35": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 4 + } + }, + "36": { + "action": "NODE_STARTUP", + "options": { + "node_id": 4 + } + }, + "37": { + "action": "NODE_RESET", + "options": { + "node_id": 4 + } + }, + "38": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 5 + } + }, + "39": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 5 + } + }, + "40": { + "action": "NODE_STARTUP", + "options": { + "node_id": 5 + } + }, + "41": { + "action": "NODE_RESET", + "options": { + "node_id": 5 + } + }, + "42": { + "action": "NODE_OS_SCAN", + "options": { + "node_id": 6 + } + }, + "43": { + "action": "NODE_SHUTDOWN", + "options": { + "node_id": 6 + } + }, + "44": { + "action": "NODE_STARTUP", + "options": { + "node_id": 6 + } + }, + "45": { + "action": "NODE_RESET", + "options": { + "node_id": 6 + } + }, + "46": { + "action": "ROUTER_ACL_ADDRULE", + "options": { + "target_router_nodename": "router_1", + "position": 1, + "permission": 2, + "source_ip_id": 7, + "dest_ip_id": 1, + "source_port_id": 1, + "dest_port_id": 1, + "protocol_id": 1, + "source_wildcard_id": 0, + "dest_wildcard_id": 0 + } + }, + "47": { + "action": "ROUTER_ACL_ADDRULE", + "options": { + "target_router_nodename": "router_1", + "position": 2, + "permission": 2, + "source_ip_id": 8, + "dest_ip_id": 1, + "source_port_id": 1, + "dest_port_id": 1, + "protocol_id": 1, + "source_wildcard_id": 0, + "dest_wildcard_id": 0 + } + }, + "48": { + "action": "ROUTER_ACL_ADDRULE", + "options": { + "target_router_nodename": "router_1", + "position": 3, + "permission": 2, + "source_ip_id": 7, + "dest_ip_id": 3, + "source_port_id": 1, + "dest_port_id": 1, + "protocol_id": 3, + "source_wildcard_id": 0, + "dest_wildcard_id": 0 + } + }, + "49": { + "action": "ROUTER_ACL_ADDRULE", + "options": { + "target_router_nodename": "router_1", + "position": 4, + "permission": 2, + "source_ip_id": 8, + "dest_ip_id": 3, + "source_port_id": 1, + "dest_port_id": 1, + "protocol_id": 3, + "source_wildcard_id": 0, + "dest_wildcard_id": 0 + } + }, + "50": { + "action": "ROUTER_ACL_ADDRULE", + "options": { + "target_router_nodename": "router_1", + "position": 5, + "permission": 2, + "source_ip_id": 7, + "dest_ip_id": 4, + "source_port_id": 1, + "dest_port_id": 1, + "protocol_id": 3, + "source_wildcard_id": 0, + "dest_wildcard_id": 0 + } + }, + "51": { + "action": "ROUTER_ACL_ADDRULE", + "options": { + "target_router_nodename": "router_1", + "position": 6, + "permission": 2, + "source_ip_id": 8, + "dest_ip_id": 4, + "source_port_id": 1, + "dest_port_id": 1, + "protocol_id": 3, + "source_wildcard_id": 0, + "dest_wildcard_id": 0 + } + }, + "52": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 0 + } + }, + "53": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 1 + } + }, + "54": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 2 + } + }, + "55": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 3 + } + }, + "56": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 4 + } + }, + "57": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 5 + } + }, + "58": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 6 + } + }, + "59": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 7 + } + }, + "60": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 8 + } + }, + "61": { + "action": "ROUTER_ACL_REMOVERULE", + "options": { + "target_router_nodename": "router_1", + "position": 9 + } + }, + "62": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 0, + "nic_id": 0 + } + }, + "63": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 0, + "nic_id": 0 + } + }, + "64": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 1, + "nic_id": 0 + } + }, + "65": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 1, + "nic_id": 0 + } + }, + "66": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 2, + "nic_id": 0 + } + }, + "67": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 2, + "nic_id": 0 + } + }, + "68": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 3, + "nic_id": 0 + } + }, + "69": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 3, + "nic_id": 0 + } + }, + "70": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 4, + "nic_id": 0 + } + }, + "71": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 4, + "nic_id": 0 + } + }, + "72": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 4, + "nic_id": 1 + } + }, + "73": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 4, + "nic_id": 1 + } + }, + "74": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 5, + "nic_id": 0 + } + }, + "75": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 5, + "nic_id": 0 + } + }, + "76": { + "action": "HOST_NIC_DISABLE", + "options": { + "node_id": 6, + "nic_id": 0 + } + }, + "77": { + "action": "HOST_NIC_ENABLE", + "options": { + "node_id": 6, + "nic_id": 0 + } + } + }, + "options": { + "nodes": [ + { + "node_name": "domain_controller" + }, + { + "node_name": "web_server", + "applications": [ + { + "application_name": "DatabaseClient" + } + ], + "services": [ + { + "service_name": "WebServer" + } + ] + }, + { + "node_name": "database_server", + "folders": [ + { + "folder_name": "database", + "files": [ + { + "file_name": "database.db" + } + ] + } + ], + "services": [ + { + "service_name": "DatabaseService" + } + ] + }, + { + "node_name": "backup_server" + }, + { + "node_name": "security_suite" + }, + { + "node_name": "client_1" + }, + { + "node_name": "client_2" + } + ], + "max_folders_per_node": 2, + "max_files_per_folder": 2, + "max_services_per_node": 2, + "max_nics_per_node": 8, + "max_acl_rules": 10, + "ip_list": [ + "192.168.1.10", + "192.168.1.12", + "192.168.1.14", + "192.168.1.16", + "192.168.1.110", + "192.168.10.21", + "192.168.10.22", + "192.168.10.110" + ] + } + }, + "reward_function": { + "reward_components": [ + { + "type": "DATABASE_FILE_INTEGRITY", + "weight": 0.4, + "options": { + "node_hostname": "database_server", + "folder_name": "database", + "file_name": "database.db" + } + }, + { + "type": "SHARED_REWARD", + "weight": 1.0, + "options": { + "agent_name": "client_1_green_user" + } + }, + { + "type": "SHARED_REWARD", + "weight": 1.0, + "options": { + "agent_name": "client_2_green_user" + } + } + ] + }, + "agent_settings": { + "flatten_obs": true + } + } + ], + "simulation": { + "network": { + "nmne_config": { + "capture_nmne": true, + "nmne_capture_keywords": [ + "DELETE" + ] + }, + "nodes": [ + { + "hostname": "router_1", + "type": "router", + "num_ports": 5, + "ports": { + "1": { + "ip_address": "192.168.1.1", + "subnet_mask": "255.255.255.0" + }, + "2": { + "ip_address": "192.168.10.1", + "subnet_mask": "255.255.255.0" + } + }, + "acl": { + "18": { + "action": "PERMIT", + "src_port": "POSTGRES_SERVER", + "dst_port": "POSTGRES_SERVER" + }, + "19": { + "action": "PERMIT", + "src_port": "DNS", + "dst_port": "DNS" + }, + "20": { + "action": "PERMIT", + "src_port": "FTP", + "dst_port": "FTP" + }, + "21": { + "action": "PERMIT", + "src_port": "HTTP", + "dst_port": "HTTP" + }, + "22": { + "action": "PERMIT", + "src_port": "ARP", + "dst_port": "ARP" + }, + "23": { + "action": "PERMIT", + "protocol": "ICMP" + } + } + }, + { + "hostname": "switch_1", + "type": "switch", + "num_ports": 8 + }, + { + "hostname": "switch_2", + "type": "switch", + "num_ports": 8 + }, + { + "hostname": "domain_controller", + "type": "server", + "ip_address": "192.168.1.10", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "services": [ + { + "type": "DNSServer", + "options": { + "domain_mapping": { + "arcd.com": "192.168.1.12" + } + } + } + ] + }, + { + "hostname": "web_server", + "type": "server", + "ip_address": "192.168.1.12", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": "192.168.1.10", + "services": [ + { + "type": "WebServer" + } + ], + "applications": [ + { + "type": "DatabaseClient", + "options": { + "db_server_ip": "192.168.1.14" + } + } + ] + }, + { + "hostname": "database_server", + "type": "server", + "ip_address": "192.168.1.14", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": "192.168.1.10", + "services": [ + { + "type": "DatabaseService", + "options": { + "backup_server_ip": "192.168.1.16" + } + }, + { + "type": "FTPClient" + } + ] + }, + { + "hostname": "backup_server", + "type": "server", + "ip_address": "192.168.1.16", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": "192.168.1.10", + "services": [ + { + "type": "FTPServer" + } + ] + }, + { + "hostname": "security_suite", + "type": "server", + "ip_address": "192.168.1.110", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": "192.168.1.10", + "network_interfaces": { + "2": { + "ip_address": "192.168.10.110", + "subnet_mask": "255.255.255.0" + } + } + }, + { + "hostname": "client_1", + "type": "computer", + "ip_address": "192.168.10.21", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.10.1", + "dns_server": "192.168.1.10", + "applications": [ + { + "type": "DataManipulationBot", + "options": { + "port_scan_p_of_success": 0.8, + "data_manipulation_p_of_success": 0.8, + "payload": "DELETE", + "server_ip": "192.168.1.14" + } + }, + { + "type": "WebBrowser", + "options": { + "target_url": "http://arcd.com/users/" + } + }, + { + "type": "DatabaseClient", + "options": { + "db_server_ip": "192.168.1.14" + } + } + ], + "services": [ + { + "type": "DNSClient" + } + ] + }, + { + "hostname": "client_2", + "type": "computer", + "ip_address": "192.168.10.22", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.10.1", + "dns_server": "192.168.1.10", + "applications": [ + { + "type": "WebBrowser", + "options": { + "target_url": "http://arcd.com/users/" + } + }, + { + "type": "DataManipulationBot", + "options": { + "port_scan_p_of_success": 0.8, + "data_manipulation_p_of_success": 0.8, + "payload": "DELETE", + "server_ip": "192.168.1.14" + } + }, + { + "type": "DatabaseClient", + "options": { + "db_server_ip": "192.168.1.14" + } + } + ], + "services": [ + { + "type": "DNSClient" + } + ] + } + ], + "links": [ + { + "endpoint_a_hostname": "router_1", + "endpoint_a_port": 1, + "endpoint_b_hostname": "switch_1", + "endpoint_b_port": 8 + }, + { + "endpoint_a_hostname": "router_1", + "endpoint_a_port": 2, + "endpoint_b_hostname": "switch_2", + "endpoint_b_port": 8 + }, + { + "endpoint_a_hostname": "switch_1", + "endpoint_a_port": 1, + "endpoint_b_hostname": "domain_controller", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_1", + "endpoint_a_port": 2, + "endpoint_b_hostname": "web_server", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_1", + "endpoint_a_port": 3, + "endpoint_b_hostname": "database_server", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_1", + "endpoint_a_port": 4, + "endpoint_b_hostname": "backup_server", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_1", + "endpoint_a_port": 7, + "endpoint_b_hostname": "security_suite", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_2", + "endpoint_a_port": 1, + "endpoint_b_hostname": "client_1", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_2", + "endpoint_a_port": 2, + "endpoint_b_hostname": "client_2", + "endpoint_b_port": 1 + }, + { + "endpoint_a_hostname": "switch_2", + "endpoint_a_port": 7, + "endpoint_b_hostname": "security_suite", + "endpoint_b_port": 2 + } + ] + } + } + } +} diff --git a/benchmark/utils.py b/benchmark/utils.py new file mode 100644 index 00000000..f15c4a12 --- /dev/null +++ b/benchmark/utils.py @@ -0,0 +1,47 @@ +# © Crown-owned copyright 2023, Defence Science and Technology Laboratory UK +import platform +from typing import Dict + +import psutil +from GPUtil import GPUtil + + +def get_size(size_bytes: int) -> str: + """ + Scale bytes to its proper format. + + e.g: + 1253656 => '1.20MB' + 1253656678 => '1.17GB' + + : + """ + factor = 1024 + for unit in ["", "K", "M", "G", "T", "P"]: + if size_bytes < factor: + return f"{size_bytes:.2f}{unit}B" + size_bytes /= factor + + +def _get_system_info() -> Dict: + """Builds and returns a dict containing system info.""" + uname = platform.uname() + cpu_freq = psutil.cpu_freq() + virtual_mem = psutil.virtual_memory() + swap_mem = psutil.swap_memory() + gpus = GPUtil.getGPUs() + return { + "System": { + "OS": uname.system, + "OS Version": uname.version, + "Machine": uname.machine, + "Processor": uname.processor, + }, + "CPU": { + "Physical Cores": psutil.cpu_count(logical=False), + "Total Cores": psutil.cpu_count(logical=True), + "Max Frequency": f"{cpu_freq.max:.2f}Mhz", + }, + "Memory": {"Total": get_size(virtual_mem.total), "Swap Total": get_size(swap_mem.total)}, + "GPU": [{"Name": gpu.name, "Total Memory": f"{gpu.memoryTotal}MB"} for gpu in gpus], + } diff --git a/pyproject.toml b/pyproject.toml index d01299be..290720bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "numpy==1.23.5", "platformdirs==3.5.1", "plotly==5.15.0", - "polars==0.18.4", + "polars==0.20.30", "prettytable==3.8.0", "PyYAML==6.0", "typer[all]==0.9.0", diff --git a/src/primaite/VERSION b/src/primaite/VERSION index 9e0b71d0..4a36342f 100644 --- a/src/primaite/VERSION +++ b/src/primaite/VERSION @@ -1 +1 @@ -3.0.0b9 +3.0.0 diff --git a/src/primaite/session/environment.py b/src/primaite/session/environment.py index 477efa9b..1c605f59 100644 --- a/src/primaite/session/environment.py +++ b/src/primaite/session/environment.py @@ -37,6 +37,8 @@ class PrimaiteGymEnv(gymnasium.Env): """Name of the RL agent. Since there should only be one RL agent we can just pull the first and only key.""" self.episode_counter: int = 0 """Current episode number.""" + self.average_reward_per_episode: Dict[int, float] = {} + """Average rewards of agents per episode.""" @property def agent(self) -> ProxyAgent: @@ -89,6 +91,8 @@ class PrimaiteGymEnv(gymnasium.Env): f"Resetting environment, episode {self.episode_counter}, " f"avg. reward: {self.agent.reward_function.total_reward}" ) + self.average_reward_per_episode[self.episode_counter] = self.agent.reward_function.total_reward + if self.io.settings.save_agent_actions: all_agent_actions = {name: agent.history for name, agent in self.game.agents.items()} self.io.write_agent_log(agent_actions=all_agent_actions, episode=self.episode_counter)