diff --git a/README.md b/README.md index f33894fe610a3dc4f06e59d0cdc59b1582d97ab4..1f81b85c8339f6f22a1fe8870d2c84d300319edd 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -BCQ - commit - [4876f7e]5afa9eb2981feec5daf67202514477518 \ No newline at end of file +BCQ - commit - [4876f7e]5afa9eb2981feec5daf67202514477518 - https://github.com/sfujim/BCQ +baselines - commit - [b99a73a]fe37206775ac8b884d32a36e213a3fac2 - https://github.com/openai/baselines/tree/tf2 \ No newline at end of file diff --git a/baselines/.benchmark_pattern b/baselines/.benchmark_pattern new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/baselines/.benchmark_pattern @@ -0,0 +1 @@ + diff --git a/baselines/.gitignore b/baselines/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a41103d0b7c62c8942ff9320c210e3d13ba93712 --- /dev/null +++ b/baselines/.gitignore @@ -0,0 +1,36 @@ +*.swp +*.pyc +*.pkl +*.py~ +.pytest_cache +.DS_Store +.idea + +# Setuptools distribution and build folders. +/dist/ +/build +keys/ + +# Virtualenv +/env + + +*.sublime-project +*.sublime-workspace + +.idea + +logs/ + +.ipynb_checkpoints +ghostdriver.log + +htmlcov + +junk +src + +*.egg-info +.cache + +MUJOCO_LOG.TXT diff --git a/baselines/.travis.yml b/baselines/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..b8bccbb0a3ea18d0918362e9660aa3066548792f --- /dev/null +++ b/baselines/.travis.yml @@ -0,0 +1,14 @@ +language: python +python: + - "3.6" + +services: + - docker + +install: + - pip install flake8 + - docker build . -t baselines-test + +script: + - flake8 . --show-source --statistics --exclude=baselines/her + - docker run -e RUNSLOW=1 baselines-test pytest -v . diff --git a/baselines/Dockerfile b/baselines/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..12e67be483604760eb2f04860dbb9920b2acdfbf --- /dev/null +++ b/baselines/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.6 + +RUN apt-get -y update && apt-get -y install ffmpeg +# RUN apt-get -y update && apt-get -y install git wget python-dev python3-dev libopenmpi-dev python-pip zlib1g-dev cmake python-opencv + +ENV CODE_DIR /root/code + +COPY . $CODE_DIR/baselines +WORKDIR $CODE_DIR/baselines + +# Clean up pycache and pyc files +RUN rm -rf __pycache__ && \ + find . -name "*.pyc" -delete && \ + pip install tensorflow && \ + pip install -e .[test] + + +CMD /bin/bash diff --git a/baselines/LICENSE b/baselines/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..57f53c30e81d5e33c6e423cbde23718f0f2be143 --- /dev/null +++ b/baselines/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2017 OpenAI (http://openai.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/baselines/README.md b/baselines/README.md new file mode 100644 index 0000000000000000000000000000000000000000..932e822b360f1fe49275381e5d6adc926bc44c0e --- /dev/null +++ b/baselines/README.md @@ -0,0 +1,160 @@ +**Status:** Active (under active development, breaking changes may occur) + +<img src="data/logo.jpg" width=25% align="right" /> [](https://travis-ci.org/openai/baselines) + +# Baselines + +OpenAI Baselines is a set of high-quality implementations of reinforcement learning algorithms. + +These algorithms will make it easier for the research community to replicate, refine, and identify new ideas, and will create good baselines to build research on top of. Our DQN implementation and its variants are roughly on par with the scores in published papers. We expect they will be used as a base around which new ideas can be added, and as a tool for comparing a new approach against existing ones. + +## Prerequisites +Baselines requires python3 (>=3.5) with the development headers. You'll also need system packages CMake, OpenMPI and zlib. Those can be installed as follows +### Ubuntu + +```bash +sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev +``` + +### Mac OS X +Installation of system packages on Mac requires [Homebrew](https://brew.sh). With Homebrew installed, run the following: +```bash +brew install cmake openmpi +``` + +## Virtual environment +From the general python package sanity perspective, it is a good idea to use virtual environments (virtualenvs) to make sure packages from different projects do not interfere with each other. You can install virtualenv (which is itself a pip package) via +```bash +pip install virtualenv +``` +Virtualenvs are essentially folders that have copies of python executable and all python packages. +To create a virtualenv called venv with python3, one runs +```bash +virtualenv /path/to/venv --python=python3 +``` +To activate a virtualenv: +``` +. /path/to/venv/bin/activate +``` +More thorough tutorial on virtualenvs and options can be found [here](https://virtualenv.pypa.io/en/stable/) + + +## Installation +- Clone the repo and cd into it: + ```bash + git clone https://github.com/openai/baselines.git + cd baselines + ``` +- If you don't have TensorFlow installed already, install your favourite flavor of TensorFlow. In most cases, + ```bash + pip install tensorflow-gpu # if you have a CUDA-compatible gpu and proper drivers + ``` + or + ```bash + pip install tensorflow + ``` + should be sufficient. Refer to [TensorFlow installation guide](https://www.tensorflow.org/install/) + for more details. + +- Install baselines package + ```bash + pip install -e . + ``` + +### MuJoCo +Some of the baselines examples use [MuJoCo](http://www.mujoco.org) (multi-joint dynamics in contact) physics simulator, which is proprietary and requires binaries and a license (temporary 30-day license can be obtained from [www.mujoco.org](http://www.mujoco.org)). Instructions on setting up MuJoCo can be found [here](https://github.com/openai/mujoco-py) + +## Testing the installation +All unit tests in baselines can be run using pytest runner: +``` +pip install pytest +pytest +``` + +## Training models +Most of the algorithms in baselines repo are used as follows: +```bash +python -m baselines.run --alg=<name of the algorithm> --env=<environment_id> [additional arguments] +``` +### Example 1. PPO with MuJoCo Humanoid +For instance, to train a fully-connected network controlling MuJoCo humanoid using PPO2 for 20M timesteps +```bash +python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 +``` +Note that for mujoco environments fully-connected network is default, so we can omit `--network=mlp` +The hyperparameters for both network and the learning algorithm can be controlled via the command line, for instance: +```bash +python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 --ent_coef=0.1 --num_hidden=32 --num_layers=3 --value_network=copy +``` +will set entropy coefficient to 0.1, and construct fully connected network with 3 layers with 32 hidden units in each, and create a separate network for value function estimation (so that its parameters are not shared with the policy network, but the structure is the same) + +See docstrings in [common/models.py](baselines/common/models.py) for description of network parameters for each type of model, and +docstring for [baselines/ppo2/ppo2.py/learn()](baselines/ppo2/ppo2.py#L152) for the description of the ppo2 hyperparameters. + +### Example 2. DQN on Atari +DQN with Atari is at this point a classics of benchmarks. To run the baselines implementation of DQN on Atari Pong: +``` +python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6 +``` + +## Saving, loading and visualizing models + +### Saving and loading the model +The algorithms serialization API is not properly unified yet; however, there is a simple method to save / restore trained models. +`--save_path` and `--load_path` command-line option loads the tensorflow state from a given path before training, and saves it after the training, respectively. +Let's imagine you'd like to train ppo2 on Atari Pong, save the model and then later visualize what has it learnt. +```bash +python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path=~/models/pong_20M_ppo2 +``` +This should get to the mean reward per episode about 20. To load and visualize the model, we'll do the following - load the model, train it for 0 steps, and then visualize: +```bash +python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path=~/models/pong_20M_ppo2 --play +``` + +*NOTE:* Mujoco environments require normalization to work properly, so we wrap them with VecNormalize wrapper. Currently, to ensure the models are saved with normalization (so that trained models can be restored and run without further training) the normalization coefficients are saved as tensorflow variables. This can decrease the performance somewhat, so if you require high-throughput steps with Mujoco and do not need saving/restoring the models, it may make sense to use numpy normalization instead. To do that, set 'use_tf=False` in [baselines/run.py](baselines/run.py#L116). + +### Logging and vizualizing learning curves and other training metrics +By default, all summary data, including progress, standard output, is saved to a unique directory in a temp folder, specified by a call to Python's [tempfile.gettempdir()](https://docs.python.org/3/library/tempfile.html#tempfile.gettempdir). +The directory can be changed with the `--log_path` command-line option. +```bash +python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path=~/models/pong_20M_ppo2 --log_path=~/logs/Pong/ +``` +*NOTE:* Please be aware that the logger will overwrite files of the same name in an existing directory, thus it's recommended that folder names be given a unique timestamp to prevent overwritten logs. + +Another way the temp directory can be changed is through the use of the `$OPENAI_LOGDIR` environment variable. + +For examples on how to load and display the training data, see [here](docs/viz/viz.ipynb). + +## Subpackages + +- [A2C](baselines/a2c) +- [ACER](baselines/acer) +- [ACKTR](baselines/acktr) +- [DDPG](baselines/ddpg) +- [DQN](baselines/deepq) +- [GAIL](baselines/gail) +- [HER](baselines/her) +- [PPO1](baselines/ppo1) (obsolete version, left here temporarily) +- [PPO2](baselines/ppo2) +- [TRPO](baselines/trpo_mpi) + + + +## Benchmarks +Results of benchmarks on Mujoco (1M timesteps) and Atari (10M timesteps) are available +[here for Mujoco](https://htmlpreview.github.com/?https://github.com/openai/baselines/blob/master/benchmarks_mujoco1M.htm) +and +[here for Atari](https://htmlpreview.github.com/?https://github.com/openai/baselines/blob/master/benchmarks_atari10M.htm) +respectively. Note that these results may be not on the latest version of the code, particular commit hash with which results were obtained is specified on the benchmarks page. + +To cite this repository in publications: + + @misc{baselines, + author = {Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Tan, Zhenyu and Wu, Yuhuai and Zhokhov, Peter}, + title = {OpenAI Baselines}, + year = {2017}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/openai/baselines}}, + } + diff --git a/baselines/baselines/__init__.py b/baselines/baselines/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/a2c/README.md b/baselines/baselines/a2c/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9450054021acf3af1abc8927d5c74ff162813b02 --- /dev/null +++ b/baselines/baselines/a2c/README.md @@ -0,0 +1,13 @@ +# A2C + +- Original paper: https://arxiv.org/abs/1602.01783 +- Baselines blog post: https://blog.openai.com/baselines-acktr-a2c/ +- `python -m baselines.run --alg=a2c --env=PongNoFrameskip-v4` runs the algorithm for 40M frames = 10M timesteps on an Atari Pong. See help (`-h`) for more options +- also refer to the repo-wide [README.md](../../README.md#training-models) + +## Files +- `run_atari`: file used to run the algorithm. +- `policies.py`: contains the different versions of the A2C architecture (MlpPolicy, CNNPolicy, LstmPolicy...). +- `a2c.py`: - Model : class used to initialize the step_model (sampling) and train_model (training) + - learn : Main entrypoint for A2C algorithm. Train a policy with given network architecture on a given environment using a2c algorithm. +- `runner.py`: class used to generates a batch of experiences diff --git a/baselines/baselines/a2c/__init__.py b/baselines/baselines/a2c/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/a2c/a2c.py b/baselines/baselines/a2c/a2c.py new file mode 100644 index 0000000000000000000000000000000000000000..dacadaf16dee83325e8bccc9c9b77b97c96d5a6e --- /dev/null +++ b/baselines/baselines/a2c/a2c.py @@ -0,0 +1,203 @@ +import time +import tensorflow as tf + +from baselines import logger + +from baselines.common import set_global_seeds, explained_variance +from baselines.common.models import get_network_builder +from baselines.common.policies import PolicyWithValue + +from baselines.a2c.utils import InverseLinearTimeDecay +from baselines.a2c.runner import Runner +from baselines.ppo2.ppo2 import safemean +import os.path as osp +from collections import deque + +class Model(tf.keras.Model): + + """ + We use this class to : + __init__: + - Creates the step_model + - Creates the train_model + + train(): + - Make the training part (feedforward and retropropagation of gradients) + + save/load(): + - Save load the model + """ + def __init__(self, *, ac_space, policy_network, nupdates, + ent_coef=0.01, vf_coef=0.5, max_grad_norm=0.5, lr=7e-4, + alpha=0.99, epsilon=1e-5, total_timesteps=int(80e6)): + + super(Model, self).__init__(name='A2CModel') + self.train_model = PolicyWithValue(ac_space, policy_network, value_network=None, estimate_q=False) + lr_schedule = InverseLinearTimeDecay(initial_learning_rate=lr, nupdates=nupdates) + self.optimizer = tf.keras.optimizers.RMSprop(learning_rate=lr_schedule, rho=alpha, epsilon=epsilon) + + self.ent_coef = ent_coef + self.vf_coef = vf_coef + self.max_grad_norm = max_grad_norm + self.step = self.train_model.step + self.value = self.train_model.value + self.initial_state = self.train_model.initial_state + + @tf.function + def train(self, obs, states, rewards, masks, actions, values): + advs = rewards - values + with tf.GradientTape() as tape: + policy_latent = self.train_model.policy_network(obs) + pd, _ = self.train_model.pdtype.pdfromlatent(policy_latent) + neglogpac = pd.neglogp(actions) + entropy = tf.reduce_mean(pd.entropy()) + vpred = self.train_model.value(obs) + vf_loss = tf.reduce_mean(tf.square(vpred - rewards)) + pg_loss = tf.reduce_mean(advs * neglogpac) + loss = pg_loss - entropy * self.ent_coef + vf_loss * self.vf_coef + + var_list = tape.watched_variables() + grads = tape.gradient(loss, var_list) + grads, _ = tf.clip_by_global_norm(grads, self.max_grad_norm) + grads_and_vars = list(zip(grads, var_list)) + self.optimizer.apply_gradients(grads_and_vars) + + return pg_loss, vf_loss, entropy + + +def learn( + network, + env, + seed=None, + nsteps=5, + total_timesteps=int(80e6), + vf_coef=0.5, + ent_coef=0.01, + max_grad_norm=0.5, + lr=7e-4, + lrschedule='linear', + epsilon=1e-5, + alpha=0.99, + gamma=0.99, + log_interval=100, + load_path=None, + **network_kwargs): + + ''' + Main entrypoint for A2C algorithm. Train a policy with given network architecture on a given environment using a2c algorithm. + + Parameters: + ----------- + + network: policy network architecture. Either string (mlp, lstm, lnlstm, cnn_lstm, cnn, cnn_small, conv_only - see baselines.common/models.py for full list) + specifying the standard network architecture, or a function that takes tensorflow tensor as input and returns + tuple (output_tensor, extra_feed) where output tensor is the last network layer output, extra_feed is None for feed-forward + neural nets, and extra_feed is a dictionary describing how to feed state into the network for recurrent neural nets. + See baselines.common/policies.py/lstm for more details on using recurrent nets in policies + + + env: RL environment. Should implement interface similar to VecEnv (baselines.common/vec_env) or be wrapped with DummyVecEnv (baselines.common/vec_env/dummy_vec_env.py) + + + seed: seed to make random number sequence in the alorightm reproducible. By default is None which means seed from system noise generator (not reproducible) + + nsteps: int, number of steps of the vectorized environment per update (i.e. batch size is nsteps * nenv where + nenv is number of environment copies simulated in parallel) + + total_timesteps: int, total number of timesteps to train on (default: 80M) + + vf_coef: float, coefficient in front of value function loss in the total loss function (default: 0.5) + + ent_coef: float, coeffictiant in front of the policy entropy in the total loss function (default: 0.01) + + max_gradient_norm: float, gradient is clipped to have global L2 norm no more than this value (default: 0.5) + + lr: float, learning rate for RMSProp (current implementation has RMSProp hardcoded in) (default: 7e-4) + + lrschedule: schedule of learning rate. Can be 'linear', 'constant', or a function [0..1] -> [0..1] that takes fraction of the training progress as input and + returns fraction of the learning rate (specified as lr) as output + + epsilon: float, RMSProp epsilon (stabilizes square root computation in denominator of RMSProp update) (default: 1e-5) + + alpha: float, RMSProp decay parameter (default: 0.99) + + gamma: float, reward discounting parameter (default: 0.99) + + log_interval: int, specifies how frequently the logs are printed out (default: 100) + + **network_kwargs: keyword arguments to the policy / network builder. See baselines.common/policies.py/build_policy and arguments to a particular type of network + For instance, 'mlp' network architecture has arguments num_hidden and num_layers. + + ''' + + + + set_global_seeds(seed) + + total_timesteps = int(total_timesteps) + + # Get the nb of env + nenvs = env.num_envs + + # Get state_space and action_space + ob_space = env.observation_space + ac_space = env.action_space + + if isinstance(network, str): + network_type = network + policy_network_fn = get_network_builder(network_type)(**network_kwargs) + policy_network = policy_network_fn(ob_space.shape) + + # Calculate the batch_size + nbatch = nenvs * nsteps + nupdates = total_timesteps // nbatch + + # Instantiate the model object (that creates step_model and train_model) + model = Model(ac_space=ac_space, policy_network=policy_network, nupdates=nupdates, ent_coef=ent_coef, vf_coef=vf_coef, + max_grad_norm=max_grad_norm, lr=lr, alpha=alpha, epsilon=epsilon, total_timesteps=total_timesteps) + + if load_path is not None: + load_path = osp.expanduser(load_path) + ckpt = tf.train.Checkpoint(model=model) + manager = tf.train.CheckpointManager(ckpt, load_path, max_to_keep=None) + ckpt.restore(manager.latest_checkpoint) + + # Instantiate the runner object + runner = Runner(env, model, nsteps=nsteps, gamma=gamma) + epinfobuf = deque(maxlen=100) + + # Start total timer + tstart = time.time() + + for update in range(1, nupdates+1): + # Get mini batch of experiences + obs, states, rewards, masks, actions, values, epinfos = runner.run() + epinfobuf.extend(epinfos) + + obs = tf.constant(obs) + if states is not None: + states = tf.constant(states) + rewards = tf.constant(rewards) + masks = tf.constant(masks) + actions = tf.constant(actions) + values = tf.constant(values) + policy_loss, value_loss, policy_entropy = model.train(obs, states, rewards, masks, actions, values) + nseconds = time.time()-tstart + + # Calculate the fps (frame per second) + fps = int((update*nbatch)/nseconds) + if update % log_interval == 0 or update == 1: + # Calculates if value function is a good predicator of the returns (ev > 1) + # or if it's just worse than predicting nothing (ev =< 0) + ev = explained_variance(values, rewards) + logger.record_tabular("nupdates", update) + logger.record_tabular("total_timesteps", update*nbatch) + logger.record_tabular("fps", fps) + logger.record_tabular("policy_entropy", float(policy_entropy)) + logger.record_tabular("value_loss", float(value_loss)) + logger.record_tabular("explained_variance", float(ev)) + logger.record_tabular("eprewmean", safemean([epinfo['r'] for epinfo in epinfobuf])) + logger.record_tabular("eplenmean", safemean([epinfo['l'] for epinfo in epinfobuf])) + logger.dump_tabular() + return model + diff --git a/baselines/baselines/a2c/runner.py b/baselines/baselines/a2c/runner.py new file mode 100644 index 0000000000000000000000000000000000000000..68d1c78e37cc4a422a1392f686f16dab22b3a523 --- /dev/null +++ b/baselines/baselines/a2c/runner.py @@ -0,0 +1,80 @@ +import tensorflow as tf +import numpy as np +from baselines.a2c.utils import discount_with_dones +from baselines.common.runners import AbstractEnvRunner + +class Runner(AbstractEnvRunner): + """ + We use this class to generate batches of experiences + + __init__: + - Initialize the runner + + run(): + - Make a mini batch of experiences + """ + def __init__(self, env, model, nsteps=5, gamma=0.99): + super().__init__(env=env, model=model, nsteps=nsteps) + self.gamma = gamma + + def run(self): + # We initialize the lists that will contain the mb of experiences + mb_obs, mb_rewards, mb_actions, mb_values, mb_dones = [],[],[],[],[] + mb_states = self.states + epinfos = [] + for _ in range(self.nsteps): + # Given observations, take action and value (V(s)) + # We already have self.obs because Runner superclass run self.obs[:] = env.reset() on init + obs = tf.constant(self.obs) + actions, values, self.states, _ = self.model.step(obs) + actions = actions._numpy() + # Append the experiences + mb_obs.append(self.obs.copy()) + mb_actions.append(actions) + mb_values.append(values._numpy()) + mb_dones.append(self.dones) + + # Take actions in env and look the results + self.obs[:], rewards, self.dones, infos = self.env.step(actions) + for info in infos: + maybeepinfo = info.get('episode') + if maybeepinfo: epinfos.append(maybeepinfo) + mb_rewards.append(rewards) + + mb_dones.append(self.dones) + + # Batch of steps to batch of rollouts + mb_obs = sf01(np.asarray(mb_obs, dtype=self.obs.dtype)) + mb_rewards = np.asarray(mb_rewards, dtype=np.float32).swapaxes(1, 0) + mb_actions = sf01(np.asarray(mb_actions, dtype=actions.dtype)) + mb_values = np.asarray(mb_values, dtype=np.float32).swapaxes(1, 0) + mb_dones = np.asarray(mb_dones, dtype=np.bool).swapaxes(1, 0) + mb_masks = mb_dones[:, :-1] + mb_dones = mb_dones[:, 1:] + + + if self.gamma > 0.0: + # Discount/bootstrap off value fn + last_values = self.model.value(tf.constant(self.obs))._numpy().tolist() + for n, (rewards, dones, value) in enumerate(zip(mb_rewards, mb_dones, last_values)): + rewards = rewards.tolist() + dones = dones.tolist() + if dones[-1] == 0: + rewards = discount_with_dones(rewards+[value], dones+[0], self.gamma)[:-1] + else: + rewards = discount_with_dones(rewards, dones, self.gamma) + + mb_rewards[n] = rewards + + + mb_rewards = mb_rewards.flatten() + mb_values = mb_values.flatten() + mb_masks = mb_masks.flatten() + return mb_obs, mb_states, mb_rewards, mb_masks, mb_actions, mb_values, epinfos + +def sf01(arr): + """ + swap and then flatten axes 0 and 1 + """ + s = arr.shape + return arr.swapaxes(0, 1).reshape(s[0] * s[1], *s[2:]) diff --git a/baselines/baselines/a2c/utils.py b/baselines/baselines/a2c/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c68de112e7d46a17398c5e562504445ac8368d13 --- /dev/null +++ b/baselines/baselines/a2c/utils.py @@ -0,0 +1,63 @@ +import numpy as np +import tensorflow as tf + +def ortho_init(scale=1.0): + def _ortho_init(shape, dtype, partition_info=None): + #lasagne ortho init for tf + shape = tuple(shape) + if len(shape) == 2: + flat_shape = shape + elif len(shape) == 4: # assumes NHWC + flat_shape = (np.prod(shape[:-1]), shape[-1]) + else: + raise NotImplementedError + a = np.random.normal(0.0, 1.0, flat_shape) + u, _, v = np.linalg.svd(a, full_matrices=False) + q = u if u.shape == flat_shape else v # pick the one with the correct shape + q = q.reshape(shape) + return (scale * q[:shape[0], :shape[1]]).astype(np.float32) + return _ortho_init + +def conv(scope, *, nf, rf, stride, activation, pad='valid', init_scale=1.0, data_format='channels_last'): + with tf.name_scope(scope): + layer = tf.keras.layers.Conv2D(filters=nf, kernel_size=rf, strides=stride, padding=pad, + data_format=data_format, kernel_initializer=ortho_init(init_scale)) + return layer + +def fc(input_shape, scope, nh, *, init_scale=1.0, init_bias=0.0): + with tf.name_scope(scope): + layer = tf.keras.layers.Dense(units=nh, kernel_initializer=ortho_init(init_scale), + bias_initializer=tf.keras.initializers.Constant(init_bias)) + layer.build(input_shape) + return layer + +def discount_with_dones(rewards, dones, gamma): + discounted = [] + r = 0 + for reward, done in zip(rewards[::-1], dones[::-1]): + r = reward + gamma*r*(1.-done) # fixed off by one bug + discounted.append(r) + return discounted[::-1] + +class InverseLinearTimeDecay(tf.keras.optimizers.schedules.LearningRateSchedule): + def __init__(self, initial_learning_rate, nupdates, name="InverseLinearTimeDecay"): + super(InverseLinearTimeDecay, self).__init__() + self.initial_learning_rate = initial_learning_rate + self.nupdates = nupdates + self.name = name + + def __call__(self, step): + with tf.name_scope(self.name): + initial_learning_rate = tf.convert_to_tensor(self.initial_learning_rate, name="initial_learning_rate") + dtype = initial_learning_rate.dtype + step_t = tf.cast(step, dtype) + nupdates_t = tf.convert_to_tensor(self.nupdates, dtype=dtype) + tf.assert_less(step_t, nupdates_t) + return initial_learning_rate * (1. - step_t / nupdates_t) + + def get_config(self): + return { + "initial_learning_rate": self.initial_learning_rate, + "nupdates": self.nupdates, + "name": self.name + } diff --git a/baselines/baselines/bench/__init__.py b/baselines/baselines/bench/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ecfa5372c2be36f4abe37cffe2928ca99a869e75 --- /dev/null +++ b/baselines/baselines/bench/__init__.py @@ -0,0 +1,2 @@ +from baselines.bench.benchmarks import * # noqa: F403 F401 +from baselines.bench.monitor import * # noqa: F403 F401 diff --git a/baselines/baselines/bench/benchmarks.py b/baselines/baselines/bench/benchmarks.py new file mode 100644 index 0000000000000000000000000000000000000000..5d626ded231572abc257a39db32f55e67aa9b6c9 --- /dev/null +++ b/baselines/baselines/bench/benchmarks.py @@ -0,0 +1,164 @@ +import re +import os +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) + +_atari7 = ['BeamRider', 'Breakout', 'Enduro', 'Pong', 'Qbert', 'Seaquest', 'SpaceInvaders'] +_atariexpl7 = ['Freeway', 'Gravitar', 'MontezumaRevenge', 'Pitfall', 'PrivateEye', 'Solaris', 'Venture'] + +_BENCHMARKS = [] + +remove_version_re = re.compile(r'-v\d+$') + + +def register_benchmark(benchmark): + for b in _BENCHMARKS: + if b['name'] == benchmark['name']: + raise ValueError('Benchmark with name %s already registered!' % b['name']) + + # automatically add a description if it is not present + if 'tasks' in benchmark: + for t in benchmark['tasks']: + if 'desc' not in t: + t['desc'] = remove_version_re.sub('', t.get('env_id', t.get('id'))) + _BENCHMARKS.append(benchmark) + + +def list_benchmarks(): + return [b['name'] for b in _BENCHMARKS] + + +def get_benchmark(benchmark_name): + for b in _BENCHMARKS: + if b['name'] == benchmark_name: + return b + raise ValueError('%s not found! Known benchmarks: %s' % (benchmark_name, list_benchmarks())) + + +def get_task(benchmark, env_id): + """Get a task by env_id. Return None if the benchmark doesn't have the env""" + return next(filter(lambda task: task['env_id'] == env_id, benchmark['tasks']), None) + + +def find_task_for_env_id_in_any_benchmark(env_id): + for bm in _BENCHMARKS: + for task in bm["tasks"]: + if task["env_id"] == env_id: + return bm, task + return None, None + + +_ATARI_SUFFIX = 'NoFrameskip-v4' + +register_benchmark({ + 'name': 'Atari50M', + 'description': '7 Atari games from Mnih et al. (2013), with pixel observations, 50M timesteps', + 'tasks': [{'desc': _game, 'env_id': _game + _ATARI_SUFFIX, 'trials': 2, 'num_timesteps': int(50e6)} for _game in _atari7] +}) + +register_benchmark({ + 'name': 'Atari10M', + 'description': '7 Atari games from Mnih et al. (2013), with pixel observations, 10M timesteps', + 'tasks': [{'desc': _game, 'env_id': _game + _ATARI_SUFFIX, 'trials': 6, 'num_timesteps': int(10e6)} for _game in _atari7] +}) + +register_benchmark({ + 'name': 'Atari1Hr', + 'description': '7 Atari games from Mnih et al. (2013), with pixel observations, 1 hour of walltime', + 'tasks': [{'desc': _game, 'env_id': _game + _ATARI_SUFFIX, 'trials': 2, 'num_seconds': 60 * 60} for _game in _atari7] +}) + +register_benchmark({ + 'name': 'AtariExploration10M', + 'description': '7 Atari games emphasizing exploration, with pixel observations, 10M timesteps', + 'tasks': [{'desc': _game, 'env_id': _game + _ATARI_SUFFIX, 'trials': 2, 'num_timesteps': int(10e6)} for _game in _atariexpl7] +}) + + +# MuJoCo + +_mujocosmall = [ + 'InvertedDoublePendulum-v2', 'InvertedPendulum-v2', + 'HalfCheetah-v2', 'Hopper-v2', 'Walker2d-v2', + 'Reacher-v2', 'Swimmer-v2'] +register_benchmark({ + 'name': 'Mujoco1M', + 'description': 'Some small 2D MuJoCo tasks, run for 1M timesteps', + 'tasks': [{'env_id': _envid, 'trials': 6, 'num_timesteps': int(1e6)} for _envid in _mujocosmall] +}) + +register_benchmark({ + 'name': 'MujocoWalkers', + 'description': 'MuJoCo forward walkers, run for 8M, humanoid 100M', + 'tasks': [ + {'env_id': "Hopper-v1", 'trials': 4, 'num_timesteps': 8 * 1000000}, + {'env_id': "Walker2d-v1", 'trials': 4, 'num_timesteps': 8 * 1000000}, + {'env_id': "Humanoid-v1", 'trials': 4, 'num_timesteps': 100 * 1000000}, + ] +}) + +# Bullet +_bulletsmall = [ + 'InvertedDoublePendulum', 'InvertedPendulum', 'HalfCheetah', 'Reacher', 'Walker2D', 'Hopper', 'Ant' +] +_bulletsmall = [e + 'BulletEnv-v0' for e in _bulletsmall] + +register_benchmark({ + 'name': 'Bullet1M', + 'description': '6 mujoco-like tasks from bullet, 1M steps', + 'tasks': [{'env_id': e, 'trials': 6, 'num_timesteps': int(1e6)} for e in _bulletsmall] +}) + + +# Roboschool + +register_benchmark({ + 'name': 'Roboschool8M', + 'description': 'Small 2D tasks, up to 30 minutes to complete on 8 cores', + 'tasks': [ + {'env_id': "RoboschoolReacher-v1", 'trials': 4, 'num_timesteps': 2 * 1000000}, + {'env_id': "RoboschoolAnt-v1", 'trials': 4, 'num_timesteps': 8 * 1000000}, + {'env_id': "RoboschoolHalfCheetah-v1", 'trials': 4, 'num_timesteps': 8 * 1000000}, + {'env_id': "RoboschoolHopper-v1", 'trials': 4, 'num_timesteps': 8 * 1000000}, + {'env_id': "RoboschoolWalker2d-v1", 'trials': 4, 'num_timesteps': 8 * 1000000}, + ] +}) +register_benchmark({ + 'name': 'RoboschoolHarder', + 'description': 'Test your might!!! Up to 12 hours on 32 cores', + 'tasks': [ + {'env_id': "RoboschoolHumanoid-v1", 'trials': 4, 'num_timesteps': 100 * 1000000}, + {'env_id': "RoboschoolHumanoidFlagrun-v1", 'trials': 4, 'num_timesteps': 200 * 1000000}, + {'env_id': "RoboschoolHumanoidFlagrunHarder-v1", 'trials': 4, 'num_timesteps': 400 * 1000000}, + ] +}) + +# Other + +_atari50 = [ # actually 47 + 'Alien', 'Amidar', 'Assault', 'Asterix', 'Asteroids', + 'Atlantis', 'BankHeist', 'BattleZone', 'BeamRider', 'Bowling', + 'Breakout', 'Centipede', 'ChopperCommand', 'CrazyClimber', + 'DemonAttack', 'DoubleDunk', 'Enduro', 'FishingDerby', 'Freeway', + 'Frostbite', 'Gopher', 'Gravitar', 'IceHockey', 'Jamesbond', + 'Kangaroo', 'Krull', 'KungFuMaster', 'MontezumaRevenge', 'MsPacman', + 'NameThisGame', 'Pitfall', 'Pong', 'PrivateEye', 'Qbert', + 'RoadRunner', 'Robotank', 'Seaquest', 'SpaceInvaders', 'StarGunner', + 'Tennis', 'TimePilot', 'Tutankham', 'UpNDown', 'Venture', + 'VideoPinball', 'WizardOfWor', 'Zaxxon', +] + +register_benchmark({ + 'name': 'Atari50_10M', + 'description': '47 Atari games from Mnih et al. (2013), with pixel observations, 10M timesteps', + 'tasks': [{'desc': _game, 'env_id': _game + _ATARI_SUFFIX, 'trials': 2, 'num_timesteps': int(10e6)} for _game in _atari50] +}) + +# HER DDPG + +_fetch_tasks = ['FetchReach-v1', 'FetchPush-v1', 'FetchSlide-v1'] +register_benchmark({ + 'name': 'Fetch1M', + 'description': 'Fetch* benchmarks for 1M timesteps', + 'tasks': [{'trials': 6, 'env_id': env_id, 'num_timesteps': int(1e6)} for env_id in _fetch_tasks] +}) + diff --git a/baselines/baselines/bench/monitor.py b/baselines/baselines/bench/monitor.py new file mode 100644 index 0000000000000000000000000000000000000000..e63e71db5c0a1e7d421794e8a64b048a1a6cfc84 --- /dev/null +++ b/baselines/baselines/bench/monitor.py @@ -0,0 +1,162 @@ +__all__ = ['Monitor', 'get_monitor_files', 'load_results'] + +from gym.core import Wrapper +import time +from glob import glob +import csv +import os.path as osp +import json + +class Monitor(Wrapper): + EXT = "monitor.csv" + f = None + + def __init__(self, env, filename, allow_early_resets=False, reset_keywords=(), info_keywords=()): + Wrapper.__init__(self, env=env) + self.tstart = time.time() + if filename: + self.results_writer = ResultsWriter(filename, + header={"t_start": time.time(), 'env_id' : env.spec and env.spec.id}, + extra_keys=reset_keywords + info_keywords + ) + else: + self.results_writer = None + self.reset_keywords = reset_keywords + self.info_keywords = info_keywords + self.allow_early_resets = allow_early_resets + self.rewards = None + self.needs_reset = True + self.episode_rewards = [] + self.episode_lengths = [] + self.episode_times = [] + self.total_steps = 0 + self.current_reset_info = {} # extra info about the current episode, that was passed in during reset() + + def reset(self, **kwargs): + self.reset_state() + for k in self.reset_keywords: + v = kwargs.get(k) + if v is None: + raise ValueError('Expected you to pass kwarg %s into reset'%k) + self.current_reset_info[k] = v + return self.env.reset(**kwargs) + + def reset_state(self): + if not self.allow_early_resets and not self.needs_reset: + raise RuntimeError("Tried to reset an environment before done. If you want to allow early resets, wrap your env with Monitor(env, path, allow_early_resets=True)") + self.rewards = [] + self.needs_reset = False + + + def step(self, action): + if self.needs_reset: + raise RuntimeError("Tried to step environment that needs reset") + ob, rew, done, info = self.env.step(action) + self.update(ob, rew, done, info) + return (ob, rew, done, info) + + def update(self, ob, rew, done, info): + self.rewards.append(rew) + if done: + self.needs_reset = True + eprew = sum(self.rewards) + eplen = len(self.rewards) + epinfo = {"r": round(eprew, 6), "l": eplen, "t": round(time.time() - self.tstart, 6)} + for k in self.info_keywords: + epinfo[k] = info[k] + self.episode_rewards.append(eprew) + self.episode_lengths.append(eplen) + self.episode_times.append(time.time() - self.tstart) + epinfo.update(self.current_reset_info) + if self.results_writer: + self.results_writer.write_row(epinfo) + assert isinstance(info, dict) + if isinstance(info, dict): + info['episode'] = epinfo + + self.total_steps += 1 + + def close(self): + if self.f is not None: + self.f.close() + + def get_total_steps(self): + return self.total_steps + + def get_episode_rewards(self): + return self.episode_rewards + + def get_episode_lengths(self): + return self.episode_lengths + + def get_episode_times(self): + return self.episode_times + +class LoadMonitorResultsError(Exception): + pass + + +class ResultsWriter(object): + def __init__(self, filename, header='', extra_keys=()): + self.extra_keys = extra_keys + assert filename is not None + if not filename.endswith(Monitor.EXT): + if osp.isdir(filename): + filename = osp.join(filename, Monitor.EXT) + else: + filename = filename + "." + Monitor.EXT + self.f = open(filename, "wt") + if isinstance(header, dict): + header = '# {} \n'.format(json.dumps(header)) + self.f.write(header) + self.logger = csv.DictWriter(self.f, fieldnames=('r', 'l', 't')+tuple(extra_keys)) + self.logger.writeheader() + self.f.flush() + + def write_row(self, epinfo): + if self.logger: + self.logger.writerow(epinfo) + self.f.flush() + + +def get_monitor_files(dir): + return glob(osp.join(dir, "*" + Monitor.EXT)) + +def load_results(dir): + import pandas + monitor_files = ( + glob(osp.join(dir, "*monitor.json")) + + glob(osp.join(dir, "*monitor.csv"))) # get both csv and (old) json files + if not monitor_files: + raise LoadMonitorResultsError("no monitor files of the form *%s found in %s" % (Monitor.EXT, dir)) + dfs = [] + headers = [] + for fname in monitor_files: + with open(fname, 'rt') as fh: + if fname.endswith('csv'): + firstline = fh.readline() + if not firstline: + continue + assert firstline[0] == '#' + header = json.loads(firstline[1:]) + df = pandas.read_csv(fh, index_col=None) + headers.append(header) + elif fname.endswith('json'): # Deprecated json format + episodes = [] + lines = fh.readlines() + header = json.loads(lines[0]) + headers.append(header) + for line in lines[1:]: + episode = json.loads(line) + episodes.append(episode) + df = pandas.DataFrame(episodes) + else: + assert 0, 'unreachable' + df['t'] += header['t_start'] + dfs.append(df) + df = pandas.concat(dfs) + df.sort_values('t', inplace=True) + df.reset_index(inplace=True) + df['t'] -= min(header['t_start'] for header in headers) + df.headers = headers # HACK to preserve backwards compatibility + return df diff --git a/baselines/baselines/common/__init__.py b/baselines/baselines/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0834b3649275b3b0607acde57f83983155c54ecc --- /dev/null +++ b/baselines/baselines/common/__init__.py @@ -0,0 +1,5 @@ +# flake8: noqa F403 +from baselines.common.console_util import * +from baselines.common.dataset import Dataset +from baselines.common.math_util import * +from baselines.common.misc_util import * diff --git a/baselines/baselines/common/atari_wrappers.py b/baselines/baselines/common/atari_wrappers.py new file mode 100644 index 0000000000000000000000000000000000000000..8be0a2f2542c5d88e3638cf068502b1df58c862b --- /dev/null +++ b/baselines/baselines/common/atari_wrappers.py @@ -0,0 +1,290 @@ +import numpy as np +import os +os.environ.setdefault('PATH', '') +from collections import deque +import gym +from gym import spaces +import cv2 +cv2.ocl.setUseOpenCL(False) +from .wrappers import TimeLimit + + +class NoopResetEnv(gym.Wrapper): + def __init__(self, env, noop_max=30): + """Sample initial states by taking random number of no-ops on reset. + No-op is assumed to be action 0. + """ + gym.Wrapper.__init__(self, env) + self.noop_max = noop_max + self.override_num_noops = None + self.noop_action = 0 + assert env.unwrapped.get_action_meanings()[0] == 'NOOP' + + def reset(self, **kwargs): + """ Do no-op action for a number of steps in [1, noop_max].""" + self.env.reset(**kwargs) + if self.override_num_noops is not None: + noops = self.override_num_noops + else: + noops = self.unwrapped.np_random.randint(1, self.noop_max + 1) #pylint: disable=E1101 + assert noops > 0 + obs = None + for _ in range(noops): + obs, _, done, _ = self.env.step(self.noop_action) + if done: + obs = self.env.reset(**kwargs) + return obs + + def step(self, ac): + return self.env.step(ac) + +class FireResetEnv(gym.Wrapper): + def __init__(self, env): + """Take action on reset for environments that are fixed until firing.""" + gym.Wrapper.__init__(self, env) + assert env.unwrapped.get_action_meanings()[1] == 'FIRE' + assert len(env.unwrapped.get_action_meanings()) >= 3 + + def reset(self, **kwargs): + self.env.reset(**kwargs) + obs, _, done, _ = self.env.step(1) + if done: + self.env.reset(**kwargs) + obs, _, done, _ = self.env.step(2) + if done: + self.env.reset(**kwargs) + return obs + + def step(self, ac): + return self.env.step(ac) + +class EpisodicLifeEnv(gym.Wrapper): + def __init__(self, env): + """Make end-of-life == end-of-episode, but only reset on true game over. + Done by DeepMind for the DQN and co. since it helps value estimation. + """ + gym.Wrapper.__init__(self, env) + self.lives = 0 + self.was_real_done = True + + def step(self, action): + obs, reward, done, info = self.env.step(action) + self.was_real_done = done + # check current lives, make loss of life terminal, + # then update lives to handle bonus lives + lives = self.env.unwrapped.ale.lives() + if lives < self.lives and lives > 0: + # for Qbert sometimes we stay in lives == 0 condition for a few frames + # so it's important to keep lives > 0, so that we only reset once + # the environment advertises done. + done = True + self.lives = lives + return obs, reward, done, info + + def reset(self, **kwargs): + """Reset only when lives are exhausted. + This way all states are still reachable even though lives are episodic, + and the learner need not know about any of this behind-the-scenes. + """ + if self.was_real_done: + obs = self.env.reset(**kwargs) + else: + # no-op step to advance from terminal/lost life state + obs, _, _, _ = self.env.step(0) + self.lives = self.env.unwrapped.ale.lives() + return obs + +class MaxAndSkipEnv(gym.Wrapper): + def __init__(self, env, skip=4): + """Return only every `skip`-th frame""" + gym.Wrapper.__init__(self, env) + # most recent raw observations (for max pooling across time steps) + self._obs_buffer = np.zeros((2,)+env.observation_space.shape, dtype=np.uint8) + self._skip = skip + + def step(self, action): + """Repeat action, sum reward, and max over last observations.""" + total_reward = 0.0 + done = None + for i in range(self._skip): + obs, reward, done, info = self.env.step(action) + if i == self._skip - 2: self._obs_buffer[0] = obs + if i == self._skip - 1: self._obs_buffer[1] = obs + total_reward += reward + if done: + break + # Note that the observation on the done=True frame + # doesn't matter + max_frame = self._obs_buffer.max(axis=0) + + return max_frame, total_reward, done, info + + def reset(self, **kwargs): + return self.env.reset(**kwargs) + +class ClipRewardEnv(gym.RewardWrapper): + def __init__(self, env): + gym.RewardWrapper.__init__(self, env) + + def reward(self, reward): + """Bin reward to {+1, 0, -1} by its sign.""" + return np.sign(reward) + + +class WarpFrame(gym.ObservationWrapper): + def __init__(self, env, width=84, height=84, grayscale=True, dict_space_key=None): + """ + Warp frames to 84x84 as done in the Nature paper and later work. + + If the environment uses dictionary observations, `dict_space_key` can be specified which indicates which + observation should be warped. + """ + super().__init__(env) + self._width = width + self._height = height + self._grayscale = grayscale + self._key = dict_space_key + if self._grayscale: + num_colors = 1 + else: + num_colors = 3 + + new_space = gym.spaces.Box( + low=0, + high=255, + shape=(self._height, self._width, num_colors), + dtype=np.uint8, + ) + if self._key is None: + original_space = self.observation_space + self.observation_space = new_space + else: + original_space = self.observation_space.spaces[self._key] + self.observation_space.spaces[self._key] = new_space + assert original_space.dtype == np.uint8 and len(original_space.shape) == 3 + + def observation(self, obs): + if self._key is None: + frame = obs + else: + frame = obs[self._key] + + if self._grayscale: + frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) + frame = cv2.resize( + frame, (self._width, self._height), interpolation=cv2.INTER_AREA + ) + if self._grayscale: + frame = np.expand_dims(frame, -1) + + if self._key is None: + obs = frame + else: + obs = obs.copy() + obs[self._key] = frame + return obs + + +class FrameStack(gym.Wrapper): + def __init__(self, env, k): + """Stack k last frames. + + Returns lazy array, which is much more memory efficient. + + See Also + -------- + baselines.common.atari_wrappers.LazyFrames + """ + gym.Wrapper.__init__(self, env) + self.k = k + self.frames = deque([], maxlen=k) + shp = env.observation_space.shape + self.observation_space = spaces.Box(low=0, high=255, shape=(shp[:-1] + (shp[-1] * k,)), dtype=env.observation_space.dtype) + + def reset(self): + ob = self.env.reset() + for _ in range(self.k): + self.frames.append(ob) + return self._get_ob() + + def step(self, action): + ob, reward, done, info = self.env.step(action) + self.frames.append(ob) + return self._get_ob(), reward, done, info + + def _get_ob(self): + assert len(self.frames) == self.k + return LazyFrames(list(self.frames)) + +class ScaledFloatFrame(gym.ObservationWrapper): + def __init__(self, env): + gym.ObservationWrapper.__init__(self, env) + self.observation_space = gym.spaces.Box(low=0, high=1, shape=env.observation_space.shape, dtype=np.float32) + + def observation(self, observation): + # careful! This undoes the memory optimization, use + # with smaller replay buffers only. + return np.array(observation).astype(np.float32) / 255.0 + +class LazyFrames(object): + def __init__(self, frames): + """This object ensures that common frames between the observations are only stored once. + It exists purely to optimize memory usage which can be huge for DQN's 1M frames replay + buffers. + + This object should only be converted to numpy array before being passed to the model. + + You'd not believe how complex the previous solution was.""" + self._frames = frames + self._out = None + + def _force(self): + if self._out is None: + self._out = np.concatenate(self._frames, axis=-1) + self._frames = None + return self._out + + def __array__(self, dtype=None): + out = self._force() + if dtype is not None: + out = out.astype(dtype) + return out + + def __len__(self): + return len(self._force()) + + def __getitem__(self, i): + return self._force()[i] + + def count(self): + frames = self._force() + return frames.shape[frames.ndim - 1] + + def frame(self, i): + return self._force()[..., i] + +def make_atari(env_id, max_episode_steps=None): + env = gym.make(env_id) + assert 'NoFrameskip' in env.spec.id + env = NoopResetEnv(env, noop_max=30) + env = MaxAndSkipEnv(env, skip=4) + if max_episode_steps is not None: + env = TimeLimit(env, max_episode_steps=max_episode_steps) + return env + +def wrap_deepmind(env, episode_life=True, clip_rewards=True, frame_stack=False, scale=False): + """Configure environment for DeepMind-style Atari. + """ + if episode_life: + env = EpisodicLifeEnv(env) + if 'FIRE' in env.unwrapped.get_action_meanings(): + env = FireResetEnv(env) + env = WarpFrame(env) + if scale: + env = ScaledFloatFrame(env) + if clip_rewards: + env = ClipRewardEnv(env) + if frame_stack: + env = FrameStack(env, 4) + return env + diff --git a/baselines/baselines/common/cg.py b/baselines/baselines/common/cg.py new file mode 100644 index 0000000000000000000000000000000000000000..52ca49dc865799c69c746b11e5f8813ba044ef8c --- /dev/null +++ b/baselines/baselines/common/cg.py @@ -0,0 +1,34 @@ +import numpy as np +def cg(f_Ax, b, cg_iters=10, callback=None, verbose=False, residual_tol=1e-10): + """ + Demmel p 312 + """ + p = b.copy() + r = b.copy() + x = np.zeros_like(b) + rdotr = r.dot(r) + + fmtstr = "%10i %10.3g %10.3g" + titlestr = "%10s %10s %10s" + if verbose: print(titlestr % ("iter", "residual norm", "soln norm")) + + for i in range(cg_iters): + if callback is not None: + callback(x) + if verbose: print(fmtstr % (i, rdotr, np.linalg.norm(x))) + z = f_Ax(p) + v = rdotr / p.dot(z) + x += v*p + r -= v*z + newrdotr = r.dot(r) + mu = newrdotr/rdotr + p = r + mu*p + + rdotr = newrdotr + if rdotr < residual_tol: + break + + if callback is not None: + callback(x) + if verbose: print(fmtstr % (i+1, rdotr, np.linalg.norm(x))) # pylint: disable=W0631 + return x diff --git a/baselines/baselines/common/cmd_util.py b/baselines/baselines/common/cmd_util.py new file mode 100644 index 0000000000000000000000000000000000000000..fb04dd05a2c36865b8322ff44d4e260c4b59a549 --- /dev/null +++ b/baselines/baselines/common/cmd_util.py @@ -0,0 +1,186 @@ +""" +Helpers for scripts like run_atari.py. +""" + +import os +try: + from mpi4py import MPI +except ImportError: + MPI = None + +import gym +from gym.wrappers import FlattenDictWrapper +from baselines import logger +from baselines.bench import Monitor +from baselines.common import set_global_seeds +from baselines.common.atari_wrappers import make_atari, wrap_deepmind +from baselines.common.vec_env.subproc_vec_env import SubprocVecEnv +from baselines.common.vec_env.dummy_vec_env import DummyVecEnv +from baselines.common import retro_wrappers + +def make_vec_env(env_id, env_type, num_env, seed, + wrapper_kwargs=None, + start_index=0, + reward_scale=1.0, + flatten_dict_observations=True, + gamestate=None): + """ + Create a wrapped, monitored SubprocVecEnv for Atari and MuJoCo. + """ + wrapper_kwargs = wrapper_kwargs or {} + mpi_rank = MPI.COMM_WORLD.Get_rank() if MPI else 0 + seed = seed + 10000 * mpi_rank if seed is not None else None + logger_dir = logger.get_dir() + def make_thunk(rank): + return lambda: make_env( + env_id=env_id, + env_type=env_type, + mpi_rank=mpi_rank, + subrank=rank, + seed=seed, + reward_scale=reward_scale, + gamestate=gamestate, + flatten_dict_observations=flatten_dict_observations, + wrapper_kwargs=wrapper_kwargs, + logger_dir=logger_dir + ) + + set_global_seeds(seed) + if num_env > 1: + return SubprocVecEnv([make_thunk(i + start_index) for i in range(num_env)]) + else: + return DummyVecEnv([make_thunk(start_index)]) + + +def make_env(env_id, env_type, mpi_rank=0, subrank=0, seed=None, reward_scale=1.0, gamestate=None, flatten_dict_observations=True, wrapper_kwargs=None, logger_dir=None): + wrapper_kwargs = wrapper_kwargs or {} + if env_type == 'atari': + env = make_atari(env_id) + elif env_type == 'retro': + import retro + gamestate = gamestate or retro.State.DEFAULT + env = retro_wrappers.make_retro(game=env_id, max_episode_steps=10000, use_restricted_actions=retro.Actions.DISCRETE, state=gamestate) + else: + env = gym.make(env_id) + + if flatten_dict_observations and isinstance(env.observation_space, gym.spaces.Dict): + keys = env.observation_space.spaces.keys() + env = gym.wrappers.FlattenDictWrapper(env, dict_keys=list(keys)) + + env.seed(seed + subrank if seed is not None else None) + env = Monitor(env, + logger_dir and os.path.join(logger_dir, str(mpi_rank) + '.' + str(subrank)), + allow_early_resets=True) + + if env_type == 'atari': + env = wrap_deepmind(env, **wrapper_kwargs) + elif env_type == 'retro': + if 'frame_stack' not in wrapper_kwargs: + wrapper_kwargs['frame_stack'] = 1 + env = retro_wrappers.wrap_deepmind_retro(env, **wrapper_kwargs) + + if reward_scale != 1: + env = retro_wrappers.RewardScaler(env, reward_scale) + + return env + + +def make_mujoco_env(env_id, seed, reward_scale=1.0): + """ + Create a wrapped, monitored gym.Env for MuJoCo. + """ + rank = MPI.COMM_WORLD.Get_rank() + myseed = seed + 1000 * rank if seed is not None else None + set_global_seeds(myseed) + env = gym.make(env_id) + logger_path = None if logger.get_dir() is None else os.path.join(logger.get_dir(), str(rank)) + env = Monitor(env, logger_path, allow_early_resets=True) + env.seed(seed) + if reward_scale != 1.0: + from baselines.common.retro_wrappers import RewardScaler + env = RewardScaler(env, reward_scale) + return env + +def make_robotics_env(env_id, seed, rank=0): + """ + Create a wrapped, monitored gym.Env for MuJoCo. + """ + set_global_seeds(seed) + env = gym.make(env_id) + env = FlattenDictWrapper(env, ['observation', 'desired_goal']) + env = Monitor( + env, logger.get_dir() and os.path.join(logger.get_dir(), str(rank)), + info_keywords=('is_success',)) + env.seed(seed) + return env + +def arg_parser(): + """ + Create an empty argparse.ArgumentParser. + """ + import argparse + return argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + +def atari_arg_parser(): + """ + Create an argparse.ArgumentParser for run_atari.py. + """ + print('Obsolete - use common_arg_parser instead') + return common_arg_parser() + +def mujoco_arg_parser(): + print('Obsolete - use common_arg_parser instead') + return common_arg_parser() + +def common_arg_parser(): + """ + Create an argparse.ArgumentParser for run_mujoco.py. + """ + parser = arg_parser() + parser.add_argument('--env', help='environment ID', type=str, default='Reacher-v2') + parser.add_argument('--env_type', help='type of environment, used when the environment type cannot be automatically determined', type=str) + parser.add_argument('--seed', help='RNG seed', type=int, default=None) + parser.add_argument('--alg', help='Algorithm', type=str, default='ppo2') + parser.add_argument('--num_timesteps', type=float, default=1e6), + parser.add_argument('--network', help='network type (mlp, cnn, lstm, cnn_lstm, conv_only)', default=None) + parser.add_argument('--gamestate', help='game state to load (so far only used in retro games)', default=None) + parser.add_argument('--num_env', help='Number of environment copies being run in parallel. When not specified, set to number of cpus for Atari, and to 1 for Mujoco', default=None, type=int) + parser.add_argument('--reward_scale', help='Reward scale factor. Default: 1.0', default=1.0, type=float) + parser.add_argument('--save_path', help='Path to save trained model to', default=None, type=str) + parser.add_argument('--save_video_interval', help='Save video every x steps (0 = disabled)', default=0, type=int) + parser.add_argument('--save_video_length', help='Length of recorded video. Default: 200', default=200, type=int) + parser.add_argument('--log_path', help='Directory to save learning curve data.', default=None, type=str) + parser.add_argument('--play', default=False, action='store_true') + return parser + +def robotics_arg_parser(): + """ + Create an argparse.ArgumentParser for run_mujoco.py. + """ + parser = arg_parser() + parser.add_argument('--env', help='environment ID', type=str, default='FetchReach-v0') + parser.add_argument('--seed', help='RNG seed', type=int, default=None) + parser.add_argument('--num-timesteps', type=int, default=int(1e6)) + return parser + + +def parse_unknown_args(args): + """ + Parse arguments not consumed by arg parser into a dictionary + """ + retval = {} + preceded_by_key = False + for arg in args: + if arg.startswith('--'): + if '=' in arg: + key = arg.split('=')[0][2:] + value = arg.split('=')[1] + retval[key] = value + else: + key = arg[2:] + preceded_by_key = True + elif preceded_by_key: + retval[key] = arg + preceded_by_key = False + + return retval diff --git a/baselines/baselines/common/console_util.py b/baselines/baselines/common/console_util.py new file mode 100644 index 0000000000000000000000000000000000000000..3b011c59750ca38a3fc96f73735b61f72c04db02 --- /dev/null +++ b/baselines/baselines/common/console_util.py @@ -0,0 +1,80 @@ +from __future__ import print_function +from contextlib import contextmanager +import numpy as np +import time +import shlex +import subprocess + +# ================================================================ +# Misc +# ================================================================ + +def fmt_row(width, row, header=False): + out = " | ".join(fmt_item(x, width) for x in row) + if header: out = out + "\n" + "-"*len(out) + return out + +def fmt_item(x, l): + if isinstance(x, np.ndarray): + assert x.ndim==0 + x = x.item() + if isinstance(x, (float, np.float32, np.float64)): + v = abs(x) + if (v < 1e-4 or v > 1e+4) and v > 0: + rep = "%7.2e" % x + else: + rep = "%7.5f" % x + else: rep = str(x) + return " "*(l - len(rep)) + rep + +color2num = dict( + gray=30, + red=31, + green=32, + yellow=33, + blue=34, + magenta=35, + cyan=36, + white=37, + crimson=38 +) + +def colorize(string, color='green', bold=False, highlight=False): + attr = [] + num = color2num[color] + if highlight: num += 10 + attr.append(str(num)) + if bold: attr.append('1') + return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string) + +def print_cmd(cmd, dry=False): + if isinstance(cmd, str): # for shell=True + pass + else: + cmd = ' '.join(shlex.quote(arg) for arg in cmd) + print(colorize(('CMD: ' if not dry else 'DRY: ') + cmd)) + + +def get_git_commit(cwd=None): + return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], cwd=cwd).decode('utf8') + +def get_git_commit_message(cwd=None): + return subprocess.check_output(['git', 'show', '-s', '--format=%B', 'HEAD'], cwd=cwd).decode('utf8') + +def ccap(cmd, dry=False, env=None, **kwargs): + print_cmd(cmd, dry) + if not dry: + subprocess.check_call(cmd, env=env, **kwargs) + + +MESSAGE_DEPTH = 0 + +@contextmanager +def timed(msg): + global MESSAGE_DEPTH #pylint: disable=W0603 + print(colorize('\t'*MESSAGE_DEPTH + '=: ' + msg, color='magenta')) + tstart = time.time() + MESSAGE_DEPTH += 1 + yield + MESSAGE_DEPTH -= 1 + print(colorize('\t'*MESSAGE_DEPTH + "done in %.3f seconds"%(time.time() - tstart), color='magenta')) diff --git a/baselines/baselines/common/dataset.py b/baselines/baselines/common/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..41a38c8af68cd4c86cc01e862e8a4193b98c7e1a --- /dev/null +++ b/baselines/baselines/common/dataset.py @@ -0,0 +1,60 @@ +import numpy as np + +class Dataset(object): + def __init__(self, data_map, deterministic=False, shuffle=True): + self.data_map = data_map + self.deterministic = deterministic + self.enable_shuffle = shuffle + self.n = next(iter(data_map.values())).shape[0] + self._next_id = 0 + self.shuffle() + + def shuffle(self): + if self.deterministic: + return + perm = np.arange(self.n) + np.random.shuffle(perm) + + for key in self.data_map: + self.data_map[key] = self.data_map[key][perm] + + self._next_id = 0 + + def next_batch(self, batch_size): + if self._next_id >= self.n and self.enable_shuffle: + self.shuffle() + + cur_id = self._next_id + cur_batch_size = min(batch_size, self.n - self._next_id) + self._next_id += cur_batch_size + + data_map = dict() + for key in self.data_map: + data_map[key] = self.data_map[key][cur_id:cur_id+cur_batch_size] + return data_map + + def iterate_once(self, batch_size): + if self.enable_shuffle: self.shuffle() + + while self._next_id <= self.n - batch_size: + yield self.next_batch(batch_size) + self._next_id = 0 + + def subset(self, num_elements, deterministic=True): + data_map = dict() + for key in self.data_map: + data_map[key] = self.data_map[key][:num_elements] + return Dataset(data_map, deterministic) + + +def iterbatches(arrays, *, num_batches=None, batch_size=None, shuffle=True, include_final_partial_batch=True): + assert (num_batches is None) != (batch_size is None), 'Provide num_batches or batch_size, but not both' + arrays = tuple(map(np.asarray, arrays)) + n = arrays[0].shape[0] + assert all(a.shape[0] == n for a in arrays[1:]) + inds = np.arange(n) + if shuffle: np.random.shuffle(inds) + sections = np.arange(0, n, batch_size)[1:] if num_batches is None else num_batches + for batch_inds in np.array_split(inds, sections): + if include_final_partial_batch or len(batch_inds) == batch_size: + yield tuple(a[batch_inds] for a in arrays) diff --git a/baselines/baselines/common/distributions.py b/baselines/baselines/common/distributions.py new file mode 100644 index 0000000000000000000000000000000000000000..c58db7f28841ec1ebb2dd432984a6d952589ebfb --- /dev/null +++ b/baselines/baselines/common/distributions.py @@ -0,0 +1,186 @@ +import tensorflow as tf +import numpy as np +from baselines.a2c.utils import fc + +class Pd(object): + """ + A particular probability distribution + """ + def flatparam(self): + raise NotImplementedError + def mode(self): + raise NotImplementedError + def neglogp(self, x): + # Usually it's easier to define the negative logprob + raise NotImplementedError + def kl(self, other): + raise NotImplementedError + def entropy(self): + raise NotImplementedError + def sample(self): + raise NotImplementedError + def logp(self, x): + return - self.neglogp(x) + def get_shape(self): + return self.flatparam().shape + @property + def shape(self): + return self.get_shape() + def __getitem__(self, idx): + return self.__class__(self.flatparam()[idx]) + +class PdType(tf.Module): + """ + Parametrized family of probability distributions + """ + def pdclass(self): + raise NotImplementedError + def pdfromflat(self, flat): + return self.pdclass()(flat) + def pdfromlatent(self, latent_vector): + raise NotImplementedError + def param_shape(self): + raise NotImplementedError + def sample_shape(self): + raise NotImplementedError + def sample_dtype(self): + raise NotImplementedError + + def __eq__(self, other): + return (type(self) == type(other)) and (self.__dict__ == other.__dict__) + +class CategoricalPdType(PdType): + def __init__(self, latent_shape, ncat, init_scale=1.0, init_bias=0.0): + self.ncat = ncat + self.matching_fc = _matching_fc(latent_shape, 'pi', self.ncat, init_scale=init_scale, init_bias=init_bias) + + def pdclass(self): + return CategoricalPd + def pdfromlatent(self, latent_vector): + pdparam = self.matching_fc(latent_vector) + return self.pdfromflat(pdparam), pdparam + + def param_shape(self): + return [self.ncat] + def sample_shape(self): + return [] + def sample_dtype(self): + return tf.int32 + +class DiagGaussianPdType(PdType): + def __init__(self, latent_shape, size, init_scale=1.0, init_bias=0.0): + self.size = size + self.matching_fc = _matching_fc(latent_shape, 'pi', self.size, init_scale=init_scale, init_bias=init_bias) + self.logstd = tf.Variable(np.zeros((1, self.size)), name='pi/logstd', dtype=tf.float32) + + def pdclass(self): + return DiagGaussianPd + + def pdfromlatent(self, latent_vector): + mean = self.matching_fc(latent_vector) + pdparam = tf.concat([mean, mean * 0.0 + self.logstd], axis=1) + return self.pdfromflat(pdparam), mean + + def param_shape(self): + return [2*self.size] + def sample_shape(self): + return [self.size] + def sample_dtype(self): + return tf.float32 + + +class CategoricalPd(Pd): + def __init__(self, logits): + self.logits = logits + def flatparam(self): + return self.logits + def mode(self): + return tf.argmax(self.logits, axis=-1) + + @property + def mean(self): + return tf.nn.softmax(self.logits) + + def neglogp(self, x): + # return tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.logits, labels=x) + # Note: we can't use sparse_softmax_cross_entropy_with_logits because + # the implementation does not allow second-order derivatives... + if x.dtype in {tf.uint8, tf.int32, tf.int64}: + # one-hot encoding + x_shape_list = x.shape.as_list() + logits_shape_list = self.logits.get_shape().as_list()[:-1] + for xs, ls in zip(x_shape_list, logits_shape_list): + if xs is not None and ls is not None: + assert xs == ls, 'shape mismatch: {} in x vs {} in logits'.format(xs, ls) + + x = tf.one_hot(x, self.logits.get_shape().as_list()[-1]) + else: + # already encoded + print('logits is {}'.format(self.logits)) + assert x.shape.as_list() == self.logits.shape.as_list() + + return tf.nn.softmax_cross_entropy_with_logits(logits=self.logits, labels=x) + + def kl(self, other): + a0 = self.logits - tf.reduce_max(self.logits, axis=-1, keepdims=True) + a1 = other.logits - tf.reduce_max(other.logits, axis=-1, keepdims=True) + ea0 = tf.exp(a0) + ea1 = tf.exp(a1) + z0 = tf.reduce_sum(ea0, axis=-1, keepdims=True) + z1 = tf.reduce_sum(ea1, axis=-1, keepdims=True) + p0 = ea0 / z0 + return tf.reduce_sum(p0 * (a0 - tf.math.log(z0) - a1 + tf.math.log(z1)), axis=-1) + def entropy(self): + a0 = self.logits - tf.reduce_max(self.logits, axis=-1, keepdims=True) + ea0 = tf.exp(a0) + z0 = tf.reduce_sum(ea0, axis=-1, keepdims=True) + p0 = ea0 / z0 + return tf.reduce_sum(p0 * (tf.math.log(z0) - a0), axis=-1) + def sample(self): + u = tf.random.uniform(tf.shape(self.logits), dtype=self.logits.dtype, seed=0) + return tf.argmax(self.logits - tf.math.log(-tf.math.log(u)), axis=-1) + @classmethod + def fromflat(cls, flat): + return cls(flat) + +class DiagGaussianPd(Pd): + def __init__(self, flat): + self.flat = flat + mean, logstd = tf.split(axis=len(flat.shape)-1, num_or_size_splits=2, value=flat) + self.mean = mean + self.logstd = logstd + self.std = tf.exp(logstd) + def flatparam(self): + return self.flat + def mode(self): + return self.mean + def neglogp(self, x): + return 0.5 * tf.reduce_sum(tf.square((x - self.mean) / self.std), axis=-1) \ + + 0.5 * np.log(2.0 * np.pi) * tf.cast(tf.shape(x)[-1], dtype=tf.float32) \ + + tf.reduce_sum(self.logstd, axis=-1) + def kl(self, other): + assert isinstance(other, DiagGaussianPd) + return tf.reduce_sum(other.logstd - self.logstd + (tf.square(self.std) + tf.square(self.mean - other.mean)) / (2.0 * tf.square(other.std)) - 0.5, axis=-1) + def entropy(self): + return tf.reduce_sum(self.logstd + .5 * np.log(2.0 * np.pi * np.e), axis=-1) + def sample(self): + return self.mean + self.std * tf.random.normal(tf.shape(self.mean)) + @classmethod + def fromflat(cls, flat): + return cls(flat) + +def make_pdtype(latent_shape, ac_space, init_scale=1.0): + from gym import spaces + if isinstance(ac_space, spaces.Box): + assert len(ac_space.shape) == 1 + return DiagGaussianPdType(latent_shape, ac_space.shape[0], init_scale) + elif isinstance(ac_space, spaces.Discrete): + return CategoricalPdType(latent_shape, ac_space.n, init_scale) + else: + raise ValueError('No implementation for {}'.format(ac_space)) + +def _matching_fc(tensor_shape, name, size, init_scale, init_bias): + if tensor_shape[-1] == size: + return lambda x: x + else: + return fc(tensor_shape, name, size, init_scale=init_scale, init_bias=init_bias) diff --git a/baselines/baselines/common/math_util.py b/baselines/baselines/common/math_util.py new file mode 100644 index 0000000000000000000000000000000000000000..461bdb79908696e1d7b1b811f578d7216c883b71 --- /dev/null +++ b/baselines/baselines/common/math_util.py @@ -0,0 +1,85 @@ +import numpy as np +import scipy.signal + + +def discount(x, gamma): + """ + computes discounted sums along 0th dimension of x. + + inputs + ------ + x: ndarray + gamma: float + + outputs + ------- + y: ndarray with same shape as x, satisfying + + y[t] = x[t] + gamma*x[t+1] + gamma^2*x[t+2] + ... + gamma^k x[t+k], + where k = len(x) - t - 1 + + """ + assert x.ndim >= 1 + return scipy.signal.lfilter([1],[1,-gamma],x[::-1], axis=0)[::-1] + +def explained_variance(ypred,y): + """ + Computes fraction of variance that ypred explains about y. + Returns 1 - Var[y-ypred] / Var[y] + + interpretation: + ev=0 => might as well have predicted zero + ev=1 => perfect prediction + ev<0 => worse than just predicting zero + + """ + assert y.ndim == 1 and ypred.ndim == 1 + vary = np.var(y) + return np.nan if vary==0 else 1 - np.var(y-ypred)/vary + +def explained_variance_2d(ypred, y): + assert y.ndim == 2 and ypred.ndim == 2 + vary = np.var(y, axis=0) + out = 1 - np.var(y-ypred)/vary + out[vary < 1e-10] = 0 + return out + +def ncc(ypred, y): + return np.corrcoef(ypred, y)[1,0] + +def flatten_arrays(arrs): + return np.concatenate([arr.flat for arr in arrs]) + +def unflatten_vector(vec, shapes): + i=0 + arrs = [] + for shape in shapes: + size = np.prod(shape) + arr = vec[i:i+size].reshape(shape) + arrs.append(arr) + i += size + return arrs + +def discount_with_boundaries(X, New, gamma): + """ + X: 2d array of floats, time x features + New: 2d array of bools, indicating when a new episode has started + """ + Y = np.zeros_like(X) + T = X.shape[0] + Y[T-1] = X[T-1] + for t in range(T-2, -1, -1): + Y[t] = X[t] + gamma * Y[t+1] * (1 - New[t+1]) + return Y + +def test_discount_with_boundaries(): + gamma=0.9 + x = np.array([1.0, 2.0, 3.0, 4.0], 'float32') + starts = [1.0, 0.0, 0.0, 1.0] + y = discount_with_boundaries(x, starts, gamma) + assert np.allclose(y, [ + 1 + gamma * 2 + gamma**2 * 3, + 2 + gamma * 3, + 3, + 4 + ]) diff --git a/baselines/baselines/common/misc_util.py b/baselines/baselines/common/misc_util.py new file mode 100644 index 0000000000000000000000000000000000000000..96ab3cad945fa35c82bf8ec3e70c41502acab868 --- /dev/null +++ b/baselines/baselines/common/misc_util.py @@ -0,0 +1,243 @@ +import gym +import numpy as np +import os +import pickle +import random +import tempfile +import zipfile + + +def zipsame(*seqs): + L = len(seqs[0]) + assert all(len(seq) == L for seq in seqs[1:]) + return zip(*seqs) + + +class EzPickle(object): + """Objects that are pickled and unpickled via their constructor + arguments. + + Example usage: + + class Dog(Animal, EzPickle): + def __init__(self, furcolor, tailkind="bushy"): + Animal.__init__() + EzPickle.__init__(furcolor, tailkind) + ... + + When this object is unpickled, a new Dog will be constructed by passing the provided + furcolor and tailkind into the constructor. However, philosophers are still not sure + whether it is still the same dog. + + This is generally needed only for environments which wrap C/C++ code, such as MuJoCo + and Atari. + """ + + def __init__(self, *args, **kwargs): + self._ezpickle_args = args + self._ezpickle_kwargs = kwargs + + def __getstate__(self): + return {"_ezpickle_args": self._ezpickle_args, "_ezpickle_kwargs": self._ezpickle_kwargs} + + def __setstate__(self, d): + out = type(self)(*d["_ezpickle_args"], **d["_ezpickle_kwargs"]) + self.__dict__.update(out.__dict__) + + +def set_global_seeds(i): + try: + import MPI + rank = MPI.COMM_WORLD.Get_rank() + except ImportError: + rank = 0 + + myseed = i + 1000 * rank if i is not None else None + try: + import tensorflow as tf + tf.random.set_seed(myseed) + except ImportError: + pass + np.random.seed(myseed) + random.seed(myseed) + + +def pretty_eta(seconds_left): + """Print the number of seconds in human readable format. + + Examples: + 2 days + 2 hours and 37 minutes + less than a minute + + Paramters + --------- + seconds_left: int + Number of seconds to be converted to the ETA + Returns + ------- + eta: str + String representing the pretty ETA. + """ + minutes_left = seconds_left // 60 + seconds_left %= 60 + hours_left = minutes_left // 60 + minutes_left %= 60 + days_left = hours_left // 24 + hours_left %= 24 + + def helper(cnt, name): + return "{} {}{}".format(str(cnt), name, ('s' if cnt > 1 else '')) + + if days_left > 0: + msg = helper(days_left, 'day') + if hours_left > 0: + msg += ' and ' + helper(hours_left, 'hour') + return msg + if hours_left > 0: + msg = helper(hours_left, 'hour') + if minutes_left > 0: + msg += ' and ' + helper(minutes_left, 'minute') + return msg + if minutes_left > 0: + return helper(minutes_left, 'minute') + return 'less than a minute' + + +class RunningAvg(object): + def __init__(self, gamma, init_value=None): + """Keep a running estimate of a quantity. This is a bit like mean + but more sensitive to recent changes. + + Parameters + ---------- + gamma: float + Must be between 0 and 1, where 0 is the most sensitive to recent + changes. + init_value: float or None + Initial value of the estimate. If None, it will be set on the first update. + """ + self._value = init_value + self._gamma = gamma + + def update(self, new_val): + """Update the estimate. + + Parameters + ---------- + new_val: float + new observated value of estimated quantity. + """ + if self._value is None: + self._value = new_val + else: + self._value = self._gamma * self._value + (1.0 - self._gamma) * new_val + + def __float__(self): + """Get the current estimate""" + return self._value + +def boolean_flag(parser, name, default=False, help=None): + """Add a boolean flag to argparse parser. + + Parameters + ---------- + parser: argparse.Parser + parser to add the flag to + name: str + --<name> will enable the flag, while --no-<name> will disable it + default: bool or None + default value of the flag + help: str + help string for the flag + """ + dest = name.replace('-', '_') + parser.add_argument("--" + name, action="store_true", default=default, dest=dest, help=help) + parser.add_argument("--no-" + name, action="store_false", dest=dest) + + +def get_wrapper_by_name(env, classname): + """Given an a gym environment possibly wrapped multiple times, returns a wrapper + of class named classname or raises ValueError if no such wrapper was applied + + Parameters + ---------- + env: gym.Env of gym.Wrapper + gym environment + classname: str + name of the wrapper + + Returns + ------- + wrapper: gym.Wrapper + wrapper named classname + """ + currentenv = env + while True: + if classname == currentenv.class_name(): + return currentenv + elif isinstance(currentenv, gym.Wrapper): + currentenv = currentenv.env + else: + raise ValueError("Couldn't find wrapper named %s" % classname) + + +def relatively_safe_pickle_dump(obj, path, compression=False): + """This is just like regular pickle dump, except from the fact that failure cases are + different: + + - It's never possible that we end up with a pickle in corrupted state. + - If a there was a different file at the path, that file will remain unchanged in the + even of failure (provided that filesystem rename is atomic). + - it is sometimes possible that we end up with useless temp file which needs to be + deleted manually (it will be removed automatically on the next function call) + + The indended use case is periodic checkpoints of experiment state, such that we never + corrupt previous checkpoints if the current one fails. + + Parameters + ---------- + obj: object + object to pickle + path: str + path to the output file + compression: bool + if true pickle will be compressed + """ + temp_storage = path + ".relatively_safe" + if compression: + # Using gzip here would be simpler, but the size is limited to 2GB + with tempfile.NamedTemporaryFile() as uncompressed_file: + pickle.dump(obj, uncompressed_file) + uncompressed_file.file.flush() + with zipfile.ZipFile(temp_storage, "w", compression=zipfile.ZIP_DEFLATED) as myzip: + myzip.write(uncompressed_file.name, "data") + else: + with open(temp_storage, "wb") as f: + pickle.dump(obj, f) + os.rename(temp_storage, path) + + +def pickle_load(path, compression=False): + """Unpickle a possible compressed pickle. + + Parameters + ---------- + path: str + path to the output file + compression: bool + if true assumes that pickle was compressed when created and attempts decompression. + + Returns + ------- + obj: object + the unpickled object + """ + + if compression: + with zipfile.ZipFile(path, "r", compression=zipfile.ZIP_DEFLATED) as myzip: + with myzip.open("data") as f: + return pickle.load(f) + else: + with open(path, "rb") as f: + return pickle.load(f) diff --git a/baselines/baselines/common/models.py b/baselines/baselines/common/models.py new file mode 100644 index 0000000000000000000000000000000000000000..21e1da1fa204f95498f36ea97632d6c9ef5b306b --- /dev/null +++ b/baselines/baselines/common/models.py @@ -0,0 +1,117 @@ +import numpy as np +import tensorflow as tf +from baselines.a2c.utils import ortho_init, conv + +mapping = {} + +def register(name): + def _thunk(func): + mapping[name] = func + return func + return _thunk + + +def nature_cnn(input_shape, **conv_kwargs): + """ + CNN from Nature paper. + """ + print('input shape is {}'.format(input_shape)) + x_input = tf.keras.Input(shape=input_shape, dtype=tf.uint8) + h = x_input + h = tf.cast(h, tf.float32) / 255. + h = conv('c1', nf=32, rf=8, stride=4, activation='relu', init_scale=np.sqrt(2))(h) + h2 = conv('c2', nf=64, rf=4, stride=2, activation='relu', init_scale=np.sqrt(2))(h) + h3 = conv('c3', nf=64, rf=3, stride=1, activation='relu', init_scale=np.sqrt(2))(h2) + h3 = tf.keras.layers.Flatten()(h3) + h3 = tf.keras.layers.Dense(units=512, kernel_initializer=ortho_init(np.sqrt(2)), + name='fc1', activation='relu')(h3) + network = tf.keras.Model(inputs=[x_input], outputs=[h3]) + return network + +@register("mlp") +def mlp(num_layers=2, num_hidden=64, activation=tf.tanh): + """ + Stack of fully-connected layers to be used in a policy / q-function approximator + + Parameters: + ---------- + + num_layers: int number of fully-connected layers (default: 2) + + num_hidden: int size of fully-connected layers (default: 64) + + activation: activation function (default: tf.tanh) + + Returns: + ------- + + function that builds fully connected network with a given input tensor / placeholder + """ + def network_fn(input_shape): + print('input shape is {}'.format(input_shape)) + x_input = tf.keras.Input(shape=input_shape) + # h = tf.keras.layers.Flatten(x_input) + h = x_input + for i in range(num_layers): + h = tf.keras.layers.Dense(units=num_hidden, kernel_initializer=ortho_init(np.sqrt(2)), + name='mlp_fc{}'.format(i), activation=activation)(h) + + network = tf.keras.Model(inputs=[x_input], outputs=[h]) + return network + + return network_fn + + +@register("cnn") +def cnn(**conv_kwargs): + def network_fn(input_shape): + return nature_cnn(input_shape, **conv_kwargs) + return network_fn + + +@register("conv_only") +def conv_only(convs=[(32, 8, 4), (64, 4, 2), (64, 3, 1)], **conv_kwargs): + ''' + convolutions-only net + Parameters: + ---------- + conv: list of triples (filter_number, filter_size, stride) specifying parameters for each layer. + Returns: + function that takes tensorflow tensor as input and returns the output of the last convolutional layer + ''' + + def network_fn(input_shape): + print('input shape is {}'.format(input_shape)) + x_input = tf.keras.Input(shape=input_shape, dtype=tf.uint8) + h = x_input + h = tf.cast(h, tf.float32) / 255. + with tf.name_scope("convnet"): + for num_outputs, kernel_size, stride in convs: + h = tf.keras.layers.Conv2D( + filters=num_outputs, kernel_size=kernel_size, strides=stride, + activation='relu', **conv_kwargs)(h) + + network = tf.keras.Model(inputs=[x_input], outputs=[h]) + return network + return network_fn + + +def get_network_builder(name): + """ + If you want to register your own network outside models.py, you just need: + + Usage Example: + ------------- + from baselines.common.models import register + @register("your_network_name") + def your_network_define(**net_kwargs): + ... + return network_fn + + """ + if callable(name): + return name + elif name in mapping: + return mapping[name] + else: + raise ValueError('Unknown network type: {}'.format(name)) diff --git a/baselines/baselines/common/mpi_adam.py b/baselines/baselines/common/mpi_adam.py new file mode 100644 index 0000000000000000000000000000000000000000..ccda451ac90216643f5104e930cf4199696cb5de --- /dev/null +++ b/baselines/baselines/common/mpi_adam.py @@ -0,0 +1,60 @@ +import baselines.common.tf_util as U +import numpy as np +try: + from mpi4py import MPI +except ImportError: + MPI = None + + +class MpiAdam(object): + def __init__(self, var_list, *, beta1=0.9, beta2=0.999, epsilon=1e-08, scale_grad_by_procs=True, comm=None): + self.var_list = var_list + self.beta1 = beta1 + self.beta2 = beta2 + self.epsilon = epsilon + self.scale_grad_by_procs = scale_grad_by_procs + size = sum(U.numel(v) for v in var_list) + self.m = np.zeros(size, 'float32') + self.v = np.zeros(size, 'float32') + self.t = 0 + self.setfromflat = U.SetFromFlat(var_list) + self.getflat = U.GetFlat(var_list) + self.comm = MPI.COMM_WORLD if comm is None and MPI is not None else comm + + def update(self, localg, stepsize): + if self.t % 100 == 0: + self.check_synced() + localg = localg.astype('float32') + if self.comm is not None: + globalg = np.zeros_like(localg) + self.comm.Allreduce(localg, globalg, op=MPI.SUM) + if self.scale_grad_by_procs: + globalg /= self.comm.Get_size() + else: + globalg = np.copy(localg) + + self.t += 1 + a = stepsize * np.sqrt(1 - self.beta2**self.t)/(1 - self.beta1**self.t) + self.m = self.beta1 * self.m + (1 - self.beta1) * globalg + self.v = self.beta2 * self.v + (1 - self.beta2) * (globalg * globalg) + step = (- a) * self.m / (np.sqrt(self.v) + self.epsilon) + self.setfromflat(self.getflat() + step) + + def sync(self): + if self.comm is None: + return + theta = self.getflat() + self.comm.Bcast(theta, root=0) + self.setfromflat(theta) + + def check_synced(self): + if self.comm is None: + return + if self.comm.Get_rank() == 0: # this is root + theta = self.getflat() + self.comm.Bcast(theta, root=0) + else: + thetalocal = self.getflat() + thetaroot = np.empty_like(thetalocal) + self.comm.Bcast(thetaroot, root=0) + assert (thetaroot == thetalocal).all(), (thetaroot, thetalocal) diff --git a/baselines/baselines/common/mpi_adam_optimizer.py b/baselines/baselines/common/mpi_adam_optimizer.py new file mode 100644 index 0000000000000000000000000000000000000000..04f3e5da64ffb1c3c0f88a41330086d519ef8325 --- /dev/null +++ b/baselines/baselines/common/mpi_adam_optimizer.py @@ -0,0 +1,59 @@ +import numpy as np +import tensorflow as tf +try: + from mpi4py import MPI +except ImportError: + MPI = None + +class MpiAdamOptimizer(tf.Module): + """Adam optimizer that averages gradients across mpi processes.""" + def __init__(self, comm, var_list): + self.var_list = var_list + self.comm = comm + self.beta1 = 0.9 + self.beta2 = 0.999 + self.epsilon = 1e-08 + self.t = tf.Variable(0, name='step', dtype=tf.int32) + var_shapes = [v.shape.as_list() for v in var_list] + self.var_sizes = [int(np.prod(s)) for s in var_shapes] + self.flat_var_size = sum(self.var_sizes) + self.m = tf.Variable(np.zeros(self.flat_var_size, 'float32')) + self.v = tf.Variable(np.zeros(self.flat_var_size, 'float32')) + + def apply_gradients(self, flat_grad, lr): + buf = np.zeros(self.flat_var_size, np.float32) + self.comm.Allreduce(flat_grad.numpy(), buf, op=MPI.SUM) + avg_flat_grad = np.divide(buf, float(self.comm.Get_size())) + self._apply_gradients(tf.constant(avg_flat_grad), lr) + if self.t.numpy() % 100 == 0: + check_synced(tf.reduce_sum(self.var_list[0]).numpy()) + + @tf.function + def _apply_gradients(self, avg_flat_grad, lr): + self.t.assign_add(1) + t = tf.cast(self.t, tf.float32) + a = lr * tf.math.sqrt(1 - tf.math.pow(self.beta2, t)) / (1 - tf.math.pow(self.beta1, t)) + self.m.assign(self.beta1 * self.m + (1 - self.beta1) * avg_flat_grad) + self.v.assign(self.beta2 * self.v + (1 - self.beta2) * tf.math.square(avg_flat_grad)) + flat_step = (- a) * self.m / (tf.math.sqrt(self.v) + self.epsilon) + var_steps = tf.split(flat_step, self.var_sizes, axis=0) + for var_step, var in zip(var_steps, self.var_list): + var.assign_add(tf.reshape(var_step, var.shape)) + + +def check_synced(localval, comm=None): + """ + It's common to forget to initialize your variables to the same values, or + (less commonly) if you update them in some other way than adam, to get them out of sync. + This function checks that variables on all MPI workers are the same, and raises + an AssertionError otherwise + + Arguments: + comm: MPI communicator + localval: list of local variables (list of variables on current worker to be compared with the other workers) + """ + comm = comm or MPI.COMM_WORLD + vals = comm.gather(localval) + if comm.rank == 0: + assert all(val==vals[0] for val in vals[1:]),\ + 'MpiAdamOptimizer detected that different workers have different weights: {}'.format(vals) diff --git a/baselines/baselines/common/mpi_fork.py b/baselines/baselines/common/mpi_fork.py new file mode 100644 index 0000000000000000000000000000000000000000..07b555e4fe7bbf121298058a3a89bb30da73a6bd --- /dev/null +++ b/baselines/baselines/common/mpi_fork.py @@ -0,0 +1,23 @@ +import os, subprocess, sys + +def mpi_fork(n, bind_to_core=False): + """Re-launches the current script with workers + Returns "parent" for original parent, "child" for MPI children + """ + if n<=1: + return "child" + if os.getenv("IN_MPI") is None: + env = os.environ.copy() + env.update( + MKL_NUM_THREADS="1", + OMP_NUM_THREADS="1", + IN_MPI="1" + ) + args = ["mpirun", "-np", str(n)] + if bind_to_core: + args += ["-bind-to", "core"] + args += [sys.executable] + sys.argv + subprocess.check_call(args, env=env) + return "parent" + else: + return "child" diff --git a/baselines/baselines/common/mpi_moments.py b/baselines/baselines/common/mpi_moments.py new file mode 100644 index 0000000000000000000000000000000000000000..7a97a4300635d0f95a93070d0f489e7b2b457d37 --- /dev/null +++ b/baselines/baselines/common/mpi_moments.py @@ -0,0 +1,60 @@ +from mpi4py import MPI +import numpy as np +from baselines.common import zipsame + + +def mpi_mean(x, axis=0, comm=None, keepdims=False): + x = np.asarray(x) + assert x.ndim > 0 + if comm is None: comm = MPI.COMM_WORLD + xsum = x.sum(axis=axis, keepdims=keepdims) + n = xsum.size + localsum = np.zeros(n+1, x.dtype) + localsum[:n] = xsum.ravel() + localsum[n] = x.shape[axis] + globalsum = np.zeros_like(localsum) + comm.Allreduce(localsum, globalsum, op=MPI.SUM) + return globalsum[:n].reshape(xsum.shape) / globalsum[n], globalsum[n] + +def mpi_moments(x, axis=0, comm=None, keepdims=False): + x = np.asarray(x) + assert x.ndim > 0 + mean, count = mpi_mean(x, axis=axis, comm=comm, keepdims=True) + sqdiffs = np.square(x - mean) + meansqdiff, count1 = mpi_mean(sqdiffs, axis=axis, comm=comm, keepdims=True) + assert count1 == count + std = np.sqrt(meansqdiff) + if not keepdims: + newshape = mean.shape[:axis] + mean.shape[axis+1:] + mean = mean.reshape(newshape) + std = std.reshape(newshape) + return mean, std, count + + +def test_runningmeanstd(): + import subprocess + subprocess.check_call(['mpirun', '-np', '3', + 'python','-c', + 'from baselines.common.mpi_moments import _helper_runningmeanstd; _helper_runningmeanstd()']) + +def _helper_runningmeanstd(): + comm = MPI.COMM_WORLD + np.random.seed(0) + for (triple,axis) in [ + ((np.random.randn(3), np.random.randn(4), np.random.randn(5)),0), + ((np.random.randn(3,2), np.random.randn(4,2), np.random.randn(5,2)),0), + ((np.random.randn(2,3), np.random.randn(2,4), np.random.randn(2,4)),1), + ]: + + + x = np.concatenate(triple, axis=axis) + ms1 = [x.mean(axis=axis), x.std(axis=axis), x.shape[axis]] + + + ms2 = mpi_moments(triple[comm.Get_rank()],axis=axis) + + for (a1,a2) in zipsame(ms1, ms2): + print(a1, a2) + assert np.allclose(a1, a2) + print("ok!") + diff --git a/baselines/baselines/common/mpi_running_mean_std.py b/baselines/baselines/common/mpi_running_mean_std.py new file mode 100644 index 0000000000000000000000000000000000000000..51ee359fc1a8385431a33cbac516810a57eebeb9 --- /dev/null +++ b/baselines/baselines/common/mpi_running_mean_std.py @@ -0,0 +1,56 @@ +try: + from mpi4py import MPI +except ImportError: + MPI = None + +import tensorflow as tf, numpy as np + +class RunningMeanStd(tf.Module): + # https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Parallel_algorithm + def __init__(self, epsilon=1e-2, shape=(), default_clip_range=np.inf): + + self._sum = tf.Variable( + initial_value=np.zeros(shape=shape, dtype=np.float64), + dtype=tf.float64, + name="runningsum", trainable=False) + self._sumsq = tf.Variable( + initial_value=np.full(shape=shape, fill_value=epsilon, dtype=np.float64), + dtype=tf.float64, + name="runningsumsq", trainable=False) + self._count = tf.Variable( + initial_value=epsilon, + dtype=tf.float64, + name="count", trainable=False) + self.shape = shape + self.epsilon = epsilon + self.default_clip_range = default_clip_range + + def update(self, x): + x = x.astype('float64') + n = int(np.prod(self.shape)) + addvec = np.concatenate([x.sum(axis=0).ravel(), np.square(x).sum(axis=0).ravel(), np.array([len(x)],dtype='float64')]) + totalvec = np.zeros(n*2+1, 'float64') + if MPI is not None: + # totalvec = np.zeros(n*2+1, 'float64') + MPI.COMM_WORLD.Allreduce(addvec, totalvec, op=MPI.SUM) + # else: + # totalvec = addvec + self._sum.assign_add(totalvec[0:n].reshape(self.shape)) + self._sumsq.assign_add(totalvec[n:2*n].reshape(self.shape)) + self._count.assign_add(totalvec[2*n]) + + @property + def mean(self): + return tf.cast(self._sum / self._count, tf.float32) + + @property + def std(self): + return tf.sqrt(tf.maximum(tf.cast(self._sumsq / self._count, tf.float32) - tf.square(self.mean), self.epsilon)) + + def normalize(self, v, clip_range=None): + if clip_range is None: + clip_range = self.default_clip_range + return tf.clip_by_value((v - self.mean) / self.std, -clip_range, clip_range) + + def denormalize(self, v): + return self.mean + v * self.std \ No newline at end of file diff --git a/baselines/baselines/common/mpi_util.py b/baselines/baselines/common/mpi_util.py new file mode 100644 index 0000000000000000000000000000000000000000..05df247b04cfb5421dbfe076fdca58e2d3485331 --- /dev/null +++ b/baselines/baselines/common/mpi_util.py @@ -0,0 +1,131 @@ +from collections import defaultdict +import os, numpy as np +import platform +import shutil +import subprocess +import warnings +import sys + +try: + from mpi4py import MPI +except ImportError: + MPI = None + + +def sync_from_root(variables, comm=None): + """ + Send the root node's parameters to every worker. + Arguments: + variables: all parameter variables including optimizer's + """ + if comm is None: comm = MPI.COMM_WORLD + values = comm.bcast([var.numpy() for var in variables]) + for (var, val) in zip(variables, values): + var.assign(val) + +def gpu_count(): + """ + Count the GPUs on this machine. + """ + if shutil.which('nvidia-smi') is None: + return 0 + output = subprocess.check_output(['nvidia-smi', '--query-gpu=gpu_name', '--format=csv']) + return max(0, len(output.split(b'\n')) - 2) + +def setup_mpi_gpus(): + """ + Set CUDA_VISIBLE_DEVICES to MPI rank if not already set + """ + if 'CUDA_VISIBLE_DEVICES' not in os.environ: + if sys.platform == 'darwin': # This Assumes if you're on OSX you're just + ids = [] # doing a smoke test and don't want GPUs + else: + lrank, _lsize = get_local_rank_size(MPI.COMM_WORLD) + ids = [lrank] + os.environ["CUDA_VISIBLE_DEVICES"] = ",".join(map(str, ids)) + +def get_local_rank_size(comm): + """ + Returns the rank of each process on its machine + The processes on a given machine will be assigned ranks + 0, 1, 2, ..., N-1, + where N is the number of processes on this machine. + + Useful if you want to assign one gpu per machine + """ + this_node = platform.node() + ranks_nodes = comm.allgather((comm.Get_rank(), this_node)) + node2rankssofar = defaultdict(int) + local_rank = None + for (rank, node) in ranks_nodes: + if rank == comm.Get_rank(): + local_rank = node2rankssofar[node] + node2rankssofar[node] += 1 + assert local_rank is not None + return local_rank, node2rankssofar[this_node] + +def share_file(comm, path): + """ + Copies the file from rank 0 to all other ranks + Puts it in the same place on all machines + """ + localrank, _ = get_local_rank_size(comm) + if comm.Get_rank() == 0: + with open(path, 'rb') as fh: + data = fh.read() + comm.bcast(data) + else: + data = comm.bcast(None) + if localrank == 0: + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, 'wb') as fh: + fh.write(data) + comm.Barrier() + +def dict_gather(comm, d, op='mean', assert_all_have_data=True): + """ + Perform a reduction operation over dicts + """ + if comm is None: return d + alldicts = comm.allgather(d) + size = comm.size + k2li = defaultdict(list) + for d in alldicts: + for (k,v) in d.items(): + k2li[k].append(v) + result = {} + for (k,li) in k2li.items(): + if assert_all_have_data: + assert len(li)==size, "only %i out of %i MPI workers have sent '%s'" % (len(li), size, k) + if op=='mean': + result[k] = np.mean(li, axis=0) + elif op=='sum': + result[k] = np.sum(li, axis=0) + else: + assert 0, op + return result + +def mpi_weighted_mean(comm, local_name2valcount): + """ + Perform a weighted average over dicts that are each on a different node + Input: local_name2valcount: dict mapping key -> (value, count) + Returns: key -> mean + """ + all_name2valcount = comm.gather(local_name2valcount) + if comm.rank == 0: + name2sum = defaultdict(float) + name2count = defaultdict(float) + for n2vc in all_name2valcount: + for (name, (val, count)) in n2vc.items(): + try: + val = float(val) + except ValueError: + if comm.rank == 0: + warnings.warn('WARNING: tried to compute mean on non-float {}={}'.format(name, val)) + else: + name2sum[name] += val * count + name2count[name] += count + return {name : name2sum[name] / name2count[name] for name in name2sum} + else: + return {} + diff --git a/baselines/baselines/common/plot_util.py b/baselines/baselines/common/plot_util.py new file mode 100644 index 0000000000000000000000000000000000000000..e15c5082a4d3bd117d037771b93ab466af2aca0d --- /dev/null +++ b/baselines/baselines/common/plot_util.py @@ -0,0 +1,434 @@ +import matplotlib.pyplot as plt +import os.path as osp +import json +import os +import numpy as np +import pandas +from collections import defaultdict, namedtuple +from baselines.bench import monitor +from baselines.logger import read_json, read_csv + +def smooth(y, radius, mode='two_sided', valid_only=False): + ''' + Smooth signal y, where radius is determines the size of the window + + mode='twosided': + average over the window [max(index - radius, 0), min(index + radius, len(y)-1)] + mode='causal': + average over the window [max(index - radius, 0), index] + + valid_only: put nan in entries where the full-sized window is not available + + ''' + assert mode in ('two_sided', 'causal') + if len(y) < 2*radius+1: + return np.ones_like(y) * y.mean() + elif mode == 'two_sided': + convkernel = np.ones(2 * radius+1) + out = np.convolve(y, convkernel,mode='same') / np.convolve(np.ones_like(y), convkernel, mode='same') + if valid_only: + out[:radius] = out[-radius:] = np.nan + elif mode == 'causal': + convkernel = np.ones(radius) + out = np.convolve(y, convkernel,mode='full') / np.convolve(np.ones_like(y), convkernel, mode='full') + out = out[:-radius+1] + if valid_only: + out[:radius] = np.nan + return out + +def one_sided_ema(xolds, yolds, low=None, high=None, n=512, decay_steps=1., low_counts_threshold=1e-8): + ''' + perform one-sided (causal) EMA (exponential moving average) + smoothing and resampling to an even grid with n points. + Does not do extrapolation, so we assume + xolds[0] <= low && high <= xolds[-1] + + Arguments: + + xolds: array or list - x values of data. Needs to be sorted in ascending order + yolds: array of list - y values of data. Has to have the same length as xolds + + low: float - min value of the new x grid. By default equals to xolds[0] + high: float - max value of the new x grid. By default equals to xolds[-1] + + n: int - number of points in new x grid + + decay_steps: float - EMA decay factor, expressed in new x grid steps. + + low_counts_threshold: float or int + - y values with counts less than this value will be set to NaN + + Returns: + tuple sum_ys, count_ys where + xs - array with new x grid + ys - array of EMA of y at each point of the new x grid + count_ys - array of EMA of y counts at each point of the new x grid + + ''' + + low = xolds[0] if low is None else low + high = xolds[-1] if high is None else high + + assert xolds[0] <= low, 'low = {} < xolds[0] = {} - extrapolation not permitted!'.format(low, xolds[0]) + assert xolds[-1] >= high, 'high = {} > xolds[-1] = {} - extrapolation not permitted!'.format(high, xolds[-1]) + assert len(xolds) == len(yolds), 'length of xolds ({}) and yolds ({}) do not match!'.format(len(xolds), len(yolds)) + + + xolds = xolds.astype('float64') + yolds = yolds.astype('float64') + + luoi = 0 # last unused old index + sum_y = 0. + count_y = 0. + xnews = np.linspace(low, high, n) + decay_period = (high - low) / (n - 1) * decay_steps + interstep_decay = np.exp(- 1. / decay_steps) + sum_ys = np.zeros_like(xnews) + count_ys = np.zeros_like(xnews) + for i in range(n): + xnew = xnews[i] + sum_y *= interstep_decay + count_y *= interstep_decay + while True: + if luoi >= len(xolds): + break + xold = xolds[luoi] + if xold <= xnew: + decay = np.exp(- (xnew - xold) / decay_period) + sum_y += decay * yolds[luoi] + count_y += decay + luoi += 1 + else: + break + sum_ys[i] = sum_y + count_ys[i] = count_y + + ys = sum_ys / count_ys + ys[count_ys < low_counts_threshold] = np.nan + + return xnews, ys, count_ys + +def symmetric_ema(xolds, yolds, low=None, high=None, n=512, decay_steps=1., low_counts_threshold=1e-8): + ''' + perform symmetric EMA (exponential moving average) + smoothing and resampling to an even grid with n points. + Does not do extrapolation, so we assume + xolds[0] <= low && high <= xolds[-1] + + Arguments: + + xolds: array or list - x values of data. Needs to be sorted in ascending order + yolds: array of list - y values of data. Has to have the same length as xolds + + low: float - min value of the new x grid. By default equals to xolds[0] + high: float - max value of the new x grid. By default equals to xolds[-1] + + n: int - number of points in new x grid + + decay_steps: float - EMA decay factor, expressed in new x grid steps. + + low_counts_threshold: float or int + - y values with counts less than this value will be set to NaN + + Returns: + tuple sum_ys, count_ys where + xs - array with new x grid + ys - array of EMA of y at each point of the new x grid + count_ys - array of EMA of y counts at each point of the new x grid + + ''' + xs, ys1, count_ys1 = one_sided_ema(xolds, yolds, low, high, n, decay_steps, low_counts_threshold=0) + _, ys2, count_ys2 = one_sided_ema(-xolds[::-1], yolds[::-1], -high, -low, n, decay_steps, low_counts_threshold=0) + ys2 = ys2[::-1] + count_ys2 = count_ys2[::-1] + count_ys = count_ys1 + count_ys2 + ys = (ys1 * count_ys1 + ys2 * count_ys2) / count_ys + ys[count_ys < low_counts_threshold] = np.nan + return xs, ys, count_ys + +Result = namedtuple('Result', 'monitor progress dirname metadata') +Result.__new__.__defaults__ = (None,) * len(Result._fields) + +def load_results(root_dir_or_dirs, enable_progress=True, enable_monitor=True, verbose=False): + ''' + load summaries of runs from a list of directories (including subdirectories) + Arguments: + + enable_progress: bool - if True, will attempt to load data from progress.csv files (data saved by logger). Default: True + + enable_monitor: bool - if True, will attempt to load data from monitor.csv files (data saved by Monitor environment wrapper). Default: True + + verbose: bool - if True, will print out list of directories from which the data is loaded. Default: False + + + Returns: + List of Result objects with the following fields: + - dirname - path to the directory data was loaded from + - metadata - run metadata (such as command-line arguments and anything else in metadata.json file + - monitor - if enable_monitor is True, this field contains pandas dataframe with loaded monitor.csv file (or aggregate of all *.monitor.csv files in the directory) + - progress - if enable_progress is True, this field contains pandas dataframe with loaded progress.csv file + ''' + import re + if isinstance(root_dir_or_dirs, str): + rootdirs = [osp.expanduser(root_dir_or_dirs)] + else: + rootdirs = [osp.expanduser(d) for d in root_dir_or_dirs] + allresults = [] + for rootdir in rootdirs: + assert osp.exists(rootdir), "%s doesn't exist"%rootdir + for dirname, dirs, files in os.walk(rootdir): + if '-proc' in dirname: + files[:] = [] + continue + monitor_re = re.compile(r'(\d+\.)?(\d+\.)?monitor\.csv') + if set(['metadata.json', 'monitor.json', 'progress.json', 'progress.csv']).intersection(files) or \ + any([f for f in files if monitor_re.match(f)]): # also match monitor files like 0.1.monitor.csv + # used to be uncommented, which means do not go deeper than current directory if any of the data files + # are found + # dirs[:] = [] + result = {'dirname' : dirname} + if "metadata.json" in files: + with open(osp.join(dirname, "metadata.json"), "r") as fh: + result['metadata'] = json.load(fh) + progjson = osp.join(dirname, "progress.json") + progcsv = osp.join(dirname, "progress.csv") + if enable_progress: + if osp.exists(progjson): + result['progress'] = pandas.DataFrame(read_json(progjson)) + elif osp.exists(progcsv): + try: + result['progress'] = read_csv(progcsv) + except pandas.errors.EmptyDataError: + print('skipping progress file in ', dirname, 'empty data') + else: + if verbose: print('skipping %s: no progress file'%dirname) + + if enable_monitor: + try: + result['monitor'] = pandas.DataFrame(monitor.load_results(dirname)) + except monitor.LoadMonitorResultsError: + print('skipping %s: no monitor files'%dirname) + except Exception as e: + print('exception loading monitor file in %s: %s'%(dirname, e)) + + if result.get('monitor') is not None or result.get('progress') is not None: + allresults.append(Result(**result)) + if verbose: + print('successfully loaded %s'%dirname) + + if verbose: print('loaded %i results'%len(allresults)) + return allresults + +COLORS = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 'purple', 'pink', + 'brown', 'orange', 'teal', 'lightblue', 'lime', 'lavender', 'turquoise', + 'darkgreen', 'tan', 'salmon', 'gold', 'darkred', 'darkblue'] + + +def default_xy_fn(r): + x = np.cumsum(r.monitor.l) + y = smooth(r.monitor.r, radius=10) + return x,y + +def default_split_fn(r): + import re + # match name between slash and -<digits> at the end of the string + # (slash in the beginning or -<digits> in the end or either may be missing) + match = re.search(r'[^/-]+(?=(-\d+)?\Z)', r.dirname) + if match: + return match.group(0) + +def plot_results( + allresults, *, + xy_fn=default_xy_fn, + split_fn=default_split_fn, + group_fn=default_split_fn, + average_group=False, + shaded_std=True, + shaded_err=True, + figsize=None, + legend_outside=False, + resample=0, + smooth_step=1.0, + tiling='vertical', + xlabel=None, + ylabel=None +): + ''' + Plot multiple Results objects + + xy_fn: function Result -> x,y - function that converts results objects into tuple of x and y values. + By default, x is cumsum of episode lengths, and y is episode rewards + + split_fn: function Result -> hashable - function that converts results objects into keys to split curves into sub-panels by. + That is, the results r for which split_fn(r) is different will be put on different sub-panels. + By default, the portion of r.dirname between last / and -<digits> is returned. The sub-panels are + stacked vertically in the figure. + + group_fn: function Result -> hashable - function that converts results objects into keys to group curves by. + That is, the results r for which group_fn(r) is the same will be put into the same group. + Curves in the same group have the same color (if average_group is False), or averaged over + (if average_group is True). The default value is the same as default value for split_fn + + average_group: bool - if True, will average the curves in the same group and plot the mean. Enables resampling + (if resample = 0, will use 512 steps) + + shaded_std: bool - if True (default), the shaded region corresponding to standard deviation of the group of curves will be + shown (only applicable if average_group = True) + + shaded_err: bool - if True (default), the shaded region corresponding to error in mean estimate of the group of curves + (that is, standard deviation divided by square root of number of curves) will be + shown (only applicable if average_group = True) + + figsize: tuple or None - size of the resulting figure (including sub-panels). By default, width is 6 and height is 6 times number of + sub-panels. + + + legend_outside: bool - if True, will place the legend outside of the sub-panels. + + resample: int - if not zero, size of the uniform grid in x direction to resample onto. Resampling is performed via symmetric + EMA smoothing (see the docstring for symmetric_ema). + Default is zero (no resampling). Note that if average_group is True, resampling is necessary; in that case, default + value is 512. + + smooth_step: float - when resampling (i.e. when resample > 0 or average_group is True), use this EMA decay parameter (in units of the new grid step). + See docstrings for decay_steps in symmetric_ema or one_sided_ema functions. + + ''' + + if split_fn is None: split_fn = lambda _ : '' + if group_fn is None: group_fn = lambda _ : '' + sk2r = defaultdict(list) # splitkey2results + for result in allresults: + splitkey = split_fn(result) + sk2r[splitkey].append(result) + assert len(sk2r) > 0 + assert isinstance(resample, int), "0: don't resample. <integer>: that many samples" + if tiling == 'vertical' or tiling is None: + nrows = len(sk2r) + ncols = 1 + elif tiling == 'horizontal': + ncols = len(sk2r) + nrows = 1 + elif tiling == 'symmetric': + import math + N = len(sk2r) + largest_divisor = 1 + for i in range(1, int(math.sqrt(N))+1): + if N % i == 0: + largest_divisor = i + ncols = largest_divisor + nrows = N // ncols + figsize = figsize or (6 * ncols, 6 * nrows) + + f, axarr = plt.subplots(nrows, ncols, sharex=False, squeeze=False, figsize=figsize) + + groups = list(set(group_fn(result) for result in allresults)) + + default_samples = 512 + if average_group: + resample = resample or default_samples + + for (isplit, sk) in enumerate(sorted(sk2r.keys())): + g2l = {} + g2c = defaultdict(int) + sresults = sk2r[sk] + gresults = defaultdict(list) + idx_row = isplit // ncols + idx_col = isplit % ncols + ax = axarr[idx_row][idx_col] + for result in sresults: + group = group_fn(result) + g2c[group] += 1 + x, y = xy_fn(result) + if x is None: x = np.arange(len(y)) + x, y = map(np.asarray, (x, y)) + if average_group: + gresults[group].append((x,y)) + else: + if resample: + x, y, counts = symmetric_ema(x, y, x[0], x[-1], resample, decay_steps=smooth_step) + l, = ax.plot(x, y, color=COLORS[groups.index(group) % len(COLORS)]) + g2l[group] = l + if average_group: + for group in sorted(groups): + xys = gresults[group] + if not any(xys): + continue + color = COLORS[groups.index(group) % len(COLORS)] + origxs = [xy[0] for xy in xys] + minxlen = min(map(len, origxs)) + def allequal(qs): + return all((q==qs[0]).all() for q in qs[1:]) + if resample: + low = max(x[0] for x in origxs) + high = min(x[-1] for x in origxs) + usex = np.linspace(low, high, resample) + ys = [] + for (x, y) in xys: + ys.append(symmetric_ema(x, y, low, high, resample, decay_steps=smooth_step)[1]) + else: + assert allequal([x[:minxlen] for x in origxs]),\ + 'If you want to average unevenly sampled data, set resample=<number of samples you want>' + usex = origxs[0] + ys = [xy[1][:minxlen] for xy in xys] + ymean = np.mean(ys, axis=0) + ystd = np.std(ys, axis=0) + ystderr = ystd / np.sqrt(len(ys)) + l, = axarr[idx_row][idx_col].plot(usex, ymean, color=color) + g2l[group] = l + if shaded_err: + ax.fill_between(usex, ymean - ystderr, ymean + ystderr, color=color, alpha=.4) + if shaded_std: + ax.fill_between(usex, ymean - ystd, ymean + ystd, color=color, alpha=.2) + + + # https://matplotlib.org/users/legend_guide.html + plt.tight_layout() + if any(g2l.keys()): + ax.legend( + g2l.values(), + ['%s (%i)'%(g, g2c[g]) for g in g2l] if average_group else g2l.keys(), + loc=2 if legend_outside else None, + bbox_to_anchor=(1,1) if legend_outside else None) + ax.set_title(sk) + # add xlabels, but only to the bottom row + if xlabel is not None: + for ax in axarr[-1]: + plt.sca(ax) + plt.xlabel(xlabel) + # add ylabels, but only to left column + if ylabel is not None: + for ax in axarr[:,0]: + plt.sca(ax) + plt.ylabel(ylabel) + + return f, axarr + +def regression_analysis(df): + xcols = list(df.columns.copy()) + xcols.remove('score') + ycols = ['score'] + import statsmodels.api as sm + mod = sm.OLS(df[ycols], sm.add_constant(df[xcols]), hasconst=False) + res = mod.fit() + print(res.summary()) + +def test_smooth(): + norig = 100 + nup = 300 + ndown = 30 + xs = np.cumsum(np.random.rand(norig) * 10 / norig) + yclean = np.sin(xs) + ys = yclean + .1 * np.random.randn(yclean.size) + xup, yup, _ = symmetric_ema(xs, ys, xs.min(), xs.max(), nup, decay_steps=nup/ndown) + xdown, ydown, _ = symmetric_ema(xs, ys, xs.min(), xs.max(), ndown, decay_steps=ndown/ndown) + xsame, ysame, _ = symmetric_ema(xs, ys, xs.min(), xs.max(), norig, decay_steps=norig/ndown) + plt.plot(xs, ys, label='orig', marker='x') + plt.plot(xup, yup, label='up', marker='x') + plt.plot(xdown, ydown, label='down', marker='x') + plt.plot(xsame, ysame, label='same', marker='x') + plt.plot(xs, yclean, label='clean', marker='x') + plt.legend() + plt.show() + + diff --git a/baselines/baselines/common/policies.py b/baselines/baselines/common/policies.py new file mode 100644 index 0000000000000000000000000000000000000000..d566824a484500501a5492c242cd06e5249b2ccc --- /dev/null +++ b/baselines/baselines/common/policies.py @@ -0,0 +1,81 @@ +import tensorflow as tf +from baselines.a2c.utils import fc +from baselines.common.distributions import make_pdtype + +import gym + + +class PolicyWithValue(tf.Module): + """ + Encapsulates fields and methods for RL policy and value function estimation with shared parameters + """ + + def __init__(self, ac_space, policy_network, value_network=None, estimate_q=False): + """ + Parameters: + ---------- + ac_space action space + + policy_network keras network for policy + + value_network keras network for value + + estimate_q q value or v value + + """ + + self.policy_network = policy_network + self.value_network = value_network or policy_network + self.estimate_q = estimate_q + self.initial_state = None + + # Based on the action space, will select what probability distribution type + self.pdtype = make_pdtype(policy_network.output_shape, ac_space, init_scale=0.01) + + if estimate_q: + assert isinstance(ac_space, gym.spaces.Discrete) + self.value_fc = fc(self.value_network.output_shape, 'q', ac_space.n) + else: + self.value_fc = fc(self.value_network.output_shape, 'vf', 1) + + @tf.function + def step(self, observation): + """ + Compute next action(s) given the observation(s) + + Parameters: + ---------- + + observation batched observation data + + Returns: + ------- + (action, value estimate, next state, negative log likelihood of the action under current policy parameters) tuple + """ + + latent = self.policy_network(observation) + pd, pi = self.pdtype.pdfromlatent(latent) + action = pd.sample() + neglogp = pd.neglogp(action) + value_latent = self.value_network(observation) + vf = tf.squeeze(self.value_fc(value_latent), axis=1) + return action, vf, None, neglogp + + @tf.function + def value(self, observation): + """ + Compute value estimate(s) given the observation(s) + + Parameters: + ---------- + + observation observation data (either single or a batch) + + Returns: + ------- + value estimate + """ + value_latent = self.value_network(observation) + result = tf.squeeze(self.value_fc(value_latent), axis=1) + return result + diff --git a/baselines/baselines/common/retro_wrappers.py b/baselines/baselines/common/retro_wrappers.py new file mode 100644 index 0000000000000000000000000000000000000000..badbbdd634aa6aedcbba990f32654ea961394c46 --- /dev/null +++ b/baselines/baselines/common/retro_wrappers.py @@ -0,0 +1,280 @@ +from collections import deque +import cv2 +cv2.ocl.setUseOpenCL(False) +from .atari_wrappers import WarpFrame, ClipRewardEnv, FrameStack, ScaledFloatFrame +from .wrappers import TimeLimit +import numpy as np +import gym + + +class StochasticFrameSkip(gym.Wrapper): + def __init__(self, env, n, stickprob): + gym.Wrapper.__init__(self, env) + self.n = n + self.stickprob = stickprob + self.curac = None + self.rng = np.random.RandomState() + self.supports_want_render = hasattr(env, "supports_want_render") + + def reset(self, **kwargs): + self.curac = None + return self.env.reset(**kwargs) + + def step(self, ac): + done = False + totrew = 0 + for i in range(self.n): + # First step after reset, use action + if self.curac is None: + self.curac = ac + # First substep, delay with probability=stickprob + elif i==0: + if self.rng.rand() > self.stickprob: + self.curac = ac + # Second substep, new action definitely kicks in + elif i==1: + self.curac = ac + if self.supports_want_render and i<self.n-1: + ob, rew, done, info = self.env.step(self.curac, want_render=False) + else: + ob, rew, done, info = self.env.step(self.curac) + totrew += rew + if done: break + return ob, totrew, done, info + + def seed(self, s): + self.rng.seed(s) + +class PartialFrameStack(gym.Wrapper): + def __init__(self, env, k, channel=1): + """ + Stack one channel (channel keyword) from previous frames + """ + gym.Wrapper.__init__(self, env) + shp = env.observation_space.shape + self.channel = channel + self.observation_space = gym.spaces.Box(low=0, high=255, + shape=(shp[0], shp[1], shp[2] + k - 1), + dtype=env.observation_space.dtype) + self.k = k + self.frames = deque([], maxlen=k) + shp = env.observation_space.shape + + def reset(self): + ob = self.env.reset() + assert ob.shape[2] > self.channel + for _ in range(self.k): + self.frames.append(ob) + return self._get_ob() + + def step(self, ac): + ob, reward, done, info = self.env.step(ac) + self.frames.append(ob) + return self._get_ob(), reward, done, info + + def _get_ob(self): + assert len(self.frames) == self.k + return np.concatenate([frame if i==self.k-1 else frame[:,:,self.channel:self.channel+1] + for (i, frame) in enumerate(self.frames)], axis=2) + +class Downsample(gym.ObservationWrapper): + def __init__(self, env, ratio): + """ + Downsample images by a factor of ratio + """ + gym.ObservationWrapper.__init__(self, env) + (oldh, oldw, oldc) = env.observation_space.shape + newshape = (oldh//ratio, oldw//ratio, oldc) + self.observation_space = gym.spaces.Box(low=0, high=255, + shape=newshape, dtype=np.uint8) + + def observation(self, frame): + height, width, _ = self.observation_space.shape + frame = cv2.resize(frame, (width, height), interpolation=cv2.INTER_AREA) + if frame.ndim == 2: + frame = frame[:,:,None] + return frame + +class Rgb2gray(gym.ObservationWrapper): + def __init__(self, env): + """ + Downsample images by a factor of ratio + """ + gym.ObservationWrapper.__init__(self, env) + (oldh, oldw, _oldc) = env.observation_space.shape + self.observation_space = gym.spaces.Box(low=0, high=255, + shape=(oldh, oldw, 1), dtype=np.uint8) + + def observation(self, frame): + frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) + return frame[:,:,None] + + +class MovieRecord(gym.Wrapper): + def __init__(self, env, savedir, k): + gym.Wrapper.__init__(self, env) + self.savedir = savedir + self.k = k + self.epcount = 0 + def reset(self): + if self.epcount % self.k == 0: + self.env.unwrapped.movie_path = self.savedir + else: + self.env.unwrapped.movie_path = None + self.env.unwrapped.movie = None + self.epcount += 1 + return self.env.reset() + +class AppendTimeout(gym.Wrapper): + def __init__(self, env): + gym.Wrapper.__init__(self, env) + self.action_space = env.action_space + self.timeout_space = gym.spaces.Box(low=np.array([0.0]), high=np.array([1.0]), dtype=np.float32) + self.original_os = env.observation_space + if isinstance(self.original_os, gym.spaces.Dict): + import copy + ordered_dict = copy.deepcopy(self.original_os.spaces) + ordered_dict['value_estimation_timeout'] = self.timeout_space + self.observation_space = gym.spaces.Dict(ordered_dict) + self.dict_mode = True + else: + self.observation_space = gym.spaces.Dict({ + 'original': self.original_os, + 'value_estimation_timeout': self.timeout_space + }) + self.dict_mode = False + self.ac_count = None + while 1: + if not hasattr(env, "_max_episode_steps"): # Looking for TimeLimit wrapper that has this field + env = env.env + continue + break + self.timeout = env._max_episode_steps + + def step(self, ac): + self.ac_count += 1 + ob, rew, done, info = self.env.step(ac) + return self._process(ob), rew, done, info + + def reset(self): + self.ac_count = 0 + return self._process(self.env.reset()) + + def _process(self, ob): + fracmissing = 1 - self.ac_count / self.timeout + if self.dict_mode: + ob['value_estimation_timeout'] = fracmissing + else: + return { 'original': ob, 'value_estimation_timeout': fracmissing } + +class StartDoingRandomActionsWrapper(gym.Wrapper): + """ + Warning: can eat info dicts, not good if you depend on them + """ + def __init__(self, env, max_random_steps, on_startup=True, every_episode=False): + gym.Wrapper.__init__(self, env) + self.on_startup = on_startup + self.every_episode = every_episode + self.random_steps = max_random_steps + self.last_obs = None + if on_startup: + self.some_random_steps() + + def some_random_steps(self): + self.last_obs = self.env.reset() + n = np.random.randint(self.random_steps) + #print("running for random %i frames" % n) + for _ in range(n): + self.last_obs, _, done, _ = self.env.step(self.env.action_space.sample()) + if done: self.last_obs = self.env.reset() + + def reset(self): + return self.last_obs + + def step(self, a): + self.last_obs, rew, done, info = self.env.step(a) + if done: + self.last_obs = self.env.reset() + if self.every_episode: + self.some_random_steps() + return self.last_obs, rew, done, info + +def make_retro(*, game, state=None, max_episode_steps=4500, **kwargs): + import retro + if state is None: + state = retro.State.DEFAULT + env = retro.make(game, state, **kwargs) + env = StochasticFrameSkip(env, n=4, stickprob=0.25) + if max_episode_steps is not None: + env = TimeLimit(env, max_episode_steps=max_episode_steps) + return env + +def wrap_deepmind_retro(env, scale=True, frame_stack=4): + """ + Configure environment for retro games, using config similar to DeepMind-style Atari in wrap_deepmind + """ + env = WarpFrame(env) + env = ClipRewardEnv(env) + if frame_stack > 1: + env = FrameStack(env, frame_stack) + if scale: + env = ScaledFloatFrame(env) + return env + +class SonicDiscretizer(gym.ActionWrapper): + """ + Wrap a gym-retro environment and make it use discrete + actions for the Sonic game. + """ + def __init__(self, env): + super(SonicDiscretizer, self).__init__(env) + buttons = ["B", "A", "MODE", "START", "UP", "DOWN", "LEFT", "RIGHT", "C", "Y", "X", "Z"] + actions = [['LEFT'], ['RIGHT'], ['LEFT', 'DOWN'], ['RIGHT', 'DOWN'], ['DOWN'], + ['DOWN', 'B'], ['B']] + self._actions = [] + for action in actions: + arr = np.array([False] * 12) + for button in action: + arr[buttons.index(button)] = True + self._actions.append(arr) + self.action_space = gym.spaces.Discrete(len(self._actions)) + + def action(self, a): # pylint: disable=W0221 + return self._actions[a].copy() + +class RewardScaler(gym.RewardWrapper): + """ + Bring rewards to a reasonable scale for PPO. + This is incredibly important and effects performance + drastically. + """ + def __init__(self, env, scale=0.01): + super(RewardScaler, self).__init__(env) + self.scale = scale + + def reward(self, reward): + return reward * self.scale + +class AllowBacktracking(gym.Wrapper): + """ + Use deltas in max(X) as the reward, rather than deltas + in X. This way, agents are not discouraged too heavily + from exploring backwards if there is no way to advance + head-on in the level. + """ + def __init__(self, env): + super(AllowBacktracking, self).__init__(env) + self._cur_x = 0 + self._max_x = 0 + + def reset(self, **kwargs): # pylint: disable=E0202 + self._cur_x = 0 + self._max_x = 0 + return self.env.reset(**kwargs) + + def step(self, action): # pylint: disable=E0202 + obs, rew, done, info = self.env.step(action) + self._cur_x += rew + rew = max(0, self._cur_x - self._max_x) + self._max_x = max(self._max_x, self._cur_x) + return obs, rew, done, info diff --git a/baselines/baselines/common/runners.py b/baselines/baselines/common/runners.py new file mode 100644 index 0000000000000000000000000000000000000000..c30e322d940ca0d403290339805a9b2546c29bf5 --- /dev/null +++ b/baselines/baselines/common/runners.py @@ -0,0 +1,19 @@ +import numpy as np +from abc import ABC, abstractmethod + +class AbstractEnvRunner(ABC): + def __init__(self, *, env, model, nsteps): + self.env = env + self.model = model + self.nenv = nenv = env.num_envs if hasattr(env, 'num_envs') else 1 + self.batch_ob_shape = (nenv*nsteps,) + env.observation_space.shape + self.obs = np.zeros((nenv,) + env.observation_space.shape, dtype=env.observation_space.dtype.name) + self.obs[:] = env.reset() + self.nsteps = nsteps + self.states = model.initial_state + self.dones = [False for _ in range(nenv)] + + @abstractmethod + def run(self): + raise NotImplementedError + diff --git a/baselines/baselines/common/running_mean_std.py b/baselines/baselines/common/running_mean_std.py new file mode 100644 index 0000000000000000000000000000000000000000..61324c7449ba4ceaf57fc80249bbfbe6a364f186 --- /dev/null +++ b/baselines/baselines/common/running_mean_std.py @@ -0,0 +1,31 @@ +import numpy as np + +class RunningMeanStd(object): + # https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Parallel_algorithm + def __init__(self, epsilon=1e-4, shape=()): + self.mean = np.zeros(shape, 'float64') + self.var = np.ones(shape, 'float64') + self.count = epsilon + + def update(self, x): + batch_mean = np.mean(x, axis=0) + batch_var = np.var(x, axis=0) + batch_count = x.shape[0] + self.update_from_moments(batch_mean, batch_var, batch_count) + + def update_from_moments(self, batch_mean, batch_var, batch_count): + self.mean, self.var, self.count = update_mean_var_count_from_moments( + self.mean, self.var, self.count, batch_mean, batch_var, batch_count) + +def update_mean_var_count_from_moments(mean, var, count, batch_mean, batch_var, batch_count): + delta = batch_mean - mean + tot_count = count + batch_count + + new_mean = mean + delta * batch_count / tot_count + m_a = var * count + m_b = batch_var * batch_count + M2 = m_a + m_b + np.square(delta) * count * batch_count / tot_count + new_var = M2 / tot_count + new_count = tot_count + + return new_mean, new_var, new_count diff --git a/baselines/baselines/common/schedules.py b/baselines/baselines/common/schedules.py new file mode 100644 index 0000000000000000000000000000000000000000..9dfff50f950f396945e4602defc8d6e0066f622b --- /dev/null +++ b/baselines/baselines/common/schedules.py @@ -0,0 +1,99 @@ +"""This file is used for specifying various schedules that evolve over +time throughout the execution of the algorithm, such as: + - learning rate for the optimizer + - exploration epsilon for the epsilon greedy exploration strategy + - beta parameter for beta parameter in prioritized replay + +Each schedule has a function `value(t)` which returns the current value +of the parameter given the timestep t of the optimization procedure. +""" + + +class Schedule(object): + def value(self, t): + """Value of the schedule at time t""" + raise NotImplementedError() + + +class ConstantSchedule(object): + def __init__(self, value): + """Value remains constant over time. + + Parameters + ---------- + value: float + Constant value of the schedule + """ + self._v = value + + def value(self, t): + """See Schedule.value""" + return self._v + + +def linear_interpolation(l, r, alpha): + return l + alpha * (r - l) + + +class PiecewiseSchedule(object): + def __init__(self, endpoints, interpolation=linear_interpolation, outside_value=None): + """Piecewise schedule. + + endpoints: [(int, int)] + list of pairs `(time, value)` meanining that schedule should output + `value` when `t==time`. All the values for time must be sorted in + an increasing order. When t is between two times, e.g. `(time_a, value_a)` + and `(time_b, value_b)`, such that `time_a <= t < time_b` then value outputs + `interpolation(value_a, value_b, alpha)` where alpha is a fraction of + time passed between `time_a` and `time_b` for time `t`. + interpolation: lambda float, float, float: float + a function that takes value to the left and to the right of t according + to the `endpoints`. Alpha is the fraction of distance from left endpoint to + right endpoint that t has covered. See linear_interpolation for example. + outside_value: float + if the value is requested outside of all the intervals sepecified in + `endpoints` this value is returned. If None then AssertionError is + raised when outside value is requested. + """ + idxes = [e[0] for e in endpoints] + assert idxes == sorted(idxes) + self._interpolation = interpolation + self._outside_value = outside_value + self._endpoints = endpoints + + def value(self, t): + """See Schedule.value""" + for (l_t, l), (r_t, r) in zip(self._endpoints[:-1], self._endpoints[1:]): + if l_t <= t and t < r_t: + alpha = float(t - l_t) / (r_t - l_t) + return self._interpolation(l, r, alpha) + + # t does not belong to any of the pieces, so doom. + assert self._outside_value is not None + return self._outside_value + + +class LinearSchedule(object): + def __init__(self, schedule_timesteps, final_p, initial_p=1.0): + """Linear interpolation between initial_p and final_p over + schedule_timesteps. After this many timesteps pass final_p is + returned. + + Parameters + ---------- + schedule_timesteps: int + Number of timesteps for which to linearly anneal initial_p + to final_p + initial_p: float + initial output value + final_p: float + final output value + """ + self.schedule_timesteps = schedule_timesteps + self.final_p = final_p + self.initial_p = initial_p + + def value(self, t): + """See Schedule.value""" + fraction = min(float(t) / self.schedule_timesteps, 1.0) + return self.initial_p + fraction * (self.final_p - self.initial_p) diff --git a/baselines/baselines/common/segment_tree.py b/baselines/baselines/common/segment_tree.py new file mode 100644 index 0000000000000000000000000000000000000000..cb386ecdb5bbc1d2c6a4821d29920fc8dcb71adf --- /dev/null +++ b/baselines/baselines/common/segment_tree.py @@ -0,0 +1,145 @@ +import operator + + +class SegmentTree(object): + def __init__(self, capacity, operation, neutral_element): + """Build a Segment Tree data structure. + + https://en.wikipedia.org/wiki/Segment_tree + + Can be used as regular array, but with two + important differences: + + a) setting item's value is slightly slower. + It is O(lg capacity) instead of O(1). + b) user has access to an efficient ( O(log segment size) ) + `reduce` operation which reduces `operation` over + a contiguous subsequence of items in the array. + + Paramters + --------- + capacity: int + Total size of the array - must be a power of two. + operation: lambda obj, obj -> obj + and operation for combining elements (eg. sum, max) + must form a mathematical group together with the set of + possible values for array elements (i.e. be associative) + neutral_element: obj + neutral element for the operation above. eg. float('-inf') + for max and 0 for sum. + """ + assert capacity > 0 and capacity & (capacity - 1) == 0, "capacity must be positive and a power of 2." + self._capacity = capacity + self._value = [neutral_element for _ in range(2 * capacity)] + self._operation = operation + + def _reduce_helper(self, start, end, node, node_start, node_end): + if start == node_start and end == node_end: + return self._value[node] + mid = (node_start + node_end) // 2 + if end <= mid: + return self._reduce_helper(start, end, 2 * node, node_start, mid) + else: + if mid + 1 <= start: + return self._reduce_helper(start, end, 2 * node + 1, mid + 1, node_end) + else: + return self._operation( + self._reduce_helper(start, mid, 2 * node, node_start, mid), + self._reduce_helper(mid + 1, end, 2 * node + 1, mid + 1, node_end) + ) + + def reduce(self, start=0, end=None): + """Returns result of applying `self.operation` + to a contiguous subsequence of the array. + + self.operation(arr[start], operation(arr[start+1], operation(... arr[end]))) + + Parameters + ---------- + start: int + beginning of the subsequence + end: int + end of the subsequences + + Returns + ------- + reduced: obj + result of reducing self.operation over the specified range of array elements. + """ + if end is None: + end = self._capacity + if end < 0: + end += self._capacity + end -= 1 + return self._reduce_helper(start, end, 1, 0, self._capacity - 1) + + def __setitem__(self, idx, val): + # index of the leaf + idx += self._capacity + self._value[idx] = val + idx //= 2 + while idx >= 1: + self._value[idx] = self._operation( + self._value[2 * idx], + self._value[2 * idx + 1] + ) + idx //= 2 + + def __getitem__(self, idx): + assert 0 <= idx < self._capacity + return self._value[self._capacity + idx] + + +class SumSegmentTree(SegmentTree): + def __init__(self, capacity): + super(SumSegmentTree, self).__init__( + capacity=capacity, + operation=operator.add, + neutral_element=0.0 + ) + + def sum(self, start=0, end=None): + """Returns arr[start] + ... + arr[end]""" + return super(SumSegmentTree, self).reduce(start, end) + + def find_prefixsum_idx(self, prefixsum): + """Find the highest index `i` in the array such that + sum(arr[0] + arr[1] + ... + arr[i - i]) <= prefixsum + + if array values are probabilities, this function + allows to sample indexes according to the discrete + probability efficiently. + + Parameters + ---------- + perfixsum: float + upperbound on the sum of array prefix + + Returns + ------- + idx: int + highest index satisfying the prefixsum constraint + """ + assert 0 <= prefixsum <= self.sum() + 1e-5 + idx = 1 + while idx < self._capacity: # while non-leaf + if self._value[2 * idx] > prefixsum: + idx = 2 * idx + else: + prefixsum -= self._value[2 * idx] + idx = 2 * idx + 1 + return idx - self._capacity + + +class MinSegmentTree(SegmentTree): + def __init__(self, capacity): + super(MinSegmentTree, self).__init__( + capacity=capacity, + operation=min, + neutral_element=float('inf') + ) + + def min(self, start=0, end=None): + """Returns min(arr[start], ..., arr[end])""" + + return super(MinSegmentTree, self).reduce(start, end) diff --git a/baselines/baselines/common/tests/test_with_mpi.py b/baselines/baselines/common/tests/test_with_mpi.py new file mode 100644 index 0000000000000000000000000000000000000000..9388078feedb89d6fd9173320e04697503988797 --- /dev/null +++ b/baselines/baselines/common/tests/test_with_mpi.py @@ -0,0 +1,38 @@ +import os +import sys +import subprocess +import cloudpickle +import base64 +import pytest +from functools import wraps + +try: + from mpi4py import MPI +except ImportError: + MPI = None + +def with_mpi(nproc=2, timeout=30, skip_if_no_mpi=True): + def outer_thunk(fn): + @wraps(fn) + def thunk(*args, **kwargs): + serialized_fn = base64.b64encode(cloudpickle.dumps(lambda: fn(*args, **kwargs))) + subprocess.check_call([ + 'mpiexec','-n', str(nproc), + sys.executable, + '-m', 'baselines.common.tests.test_with_mpi', + serialized_fn + ], env=os.environ, timeout=timeout) + + if skip_if_no_mpi: + return pytest.mark.skipif(MPI is None, reason="MPI not present")(thunk) + else: + return thunk + + return outer_thunk + + +if __name__ == '__main__': + if len(sys.argv) > 1: + fn = cloudpickle.loads(base64.b64decode(sys.argv[1])) + assert callable(fn) + fn() diff --git a/baselines/baselines/common/tf_util.py b/baselines/baselines/common/tf_util.py new file mode 100644 index 0000000000000000000000000000000000000000..db1076c89f42a9e2906453e573b83b21a87db66e --- /dev/null +++ b/baselines/baselines/common/tf_util.py @@ -0,0 +1,199 @@ +import numpy as np +import tensorflow as tf # pylint: ignore-module +import copy + +def switch(condition, then_expression, else_expression): + """Switches between two operations depending on a scalar value (int or bool). + Note that both `then_expression` and `else_expression` + should be symbolic tensors of the *same shape*. + + # Arguments + condition: scalar tensor. + then_expression: TensorFlow operation. + else_expression: TensorFlow operation. + """ + x_shape = copy.copy(then_expression.get_shape()) + x = tf.cond(tf.cast(condition, 'bool'), + lambda: then_expression, + lambda: else_expression) + x.set_shape(x_shape) + return x + +# ================================================================ +# Extras +# ================================================================ + +def lrelu(x, leak=0.2): + f1 = 0.5 * (1 + leak) + f2 = 0.5 * (1 - leak) + return f1 * x + f2 * abs(x) + +# ================================================================ +# Mathematical utils +# ================================================================ + +def huber_loss(x, delta=1.0): + """Reference: https://en.wikipedia.org/wiki/Huber_loss""" + return tf.where( + tf.abs(x) < delta, + tf.square(x) * 0.5, + delta * (tf.abs(x) - 0.5 * delta) + ) + +# ================================================================ +# Model components +# ================================================================ + +def normc_initializer(std=1.0, axis=0): + def _initializer(shape, dtype=None, partition_info=None): # pylint: disable=W0613 + out = np.random.randn(*shape).astype(dtype.as_numpy_dtype) + out *= std / np.sqrt(np.square(out).sum(axis=axis, keepdims=True)) + return tf.constant(out) + return _initializer + +def conv2d(x, num_filters, name, filter_size=(3, 3), stride=(1, 1), pad="SAME", dtype=tf.float32, collections=None, + summary_tag=None): + with tf.variable_scope(name): + stride_shape = [1, stride[0], stride[1], 1] + filter_shape = [filter_size[0], filter_size[1], int(x.get_shape()[3]), num_filters] + + # there are "num input feature maps * filter height * filter width" + # inputs to each hidden unit + fan_in = intprod(filter_shape[:3]) + # each unit in the lower layer receives a gradient from: + # "num output feature maps * filter height * filter width" / + # pooling size + fan_out = intprod(filter_shape[:2]) * num_filters + # initialize weights with random weights + w_bound = np.sqrt(6. / (fan_in + fan_out)) + + w = tf.get_variable("W", filter_shape, dtype, tf.random_uniform_initializer(-w_bound, w_bound), + collections=collections) + b = tf.get_variable("b", [1, 1, 1, num_filters], initializer=tf.zeros_initializer(), + collections=collections) + + if summary_tag is not None: + tf.summary.image(summary_tag, + tf.transpose(tf.reshape(w, [filter_size[0], filter_size[1], -1, 1]), + [2, 0, 1, 3]), + max_images=10) + + return tf.nn.conv2d(x, w, stride_shape, pad) + b + +# ================================================================ +# Flat vectors +# ================================================================ + +def var_shape(x): + out = x.get_shape().as_list() + assert all(isinstance(a, int) for a in out), \ + "shape function assumes that shape is fully known" + return out + +def numel(x): + return intprod(var_shape(x)) + +def intprod(x): + return int(np.prod(x)) + +def flatgrad(grads, var_list, clip_norm=None): + if clip_norm is not None: + grads = [tf.clip_by_norm(grad, clip_norm=clip_norm) for grad in grads] + return tf.concat(axis=0, values=[ + tf.reshape(grad if grad is not None else tf.zeros_like(v), [numel(v)]) + for (v, grad) in zip(var_list, grads) + ]) + +class SetFromFlat(object): + def __init__(self, var_list, dtype=tf.float32): + self.shapes = list(map(var_shape, var_list)) + self.total_size = np.sum([intprod(shape) for shape in self.shapes]) + self.var_list = var_list + + def __call__(self, theta): + start = 0 + for (shape, v) in zip(self.shapes, self.var_list): + size = intprod(shape) + v.assign(tf.reshape(theta[start:start + size], shape)) + start += size + +class GetFlat(object): + def __init__(self, var_list): + self.var_list = var_list + + def __call__(self): + return tf.concat(axis=0, values=[tf.reshape(v, [numel(v)]) for v in self.var_list]).numpy() + +def flattenallbut0(x): + return tf.reshape(x, [-1, intprod(x.get_shape().as_list()[1:])]) + + +# ================================================================ +# Shape adjustment for feeding into tf tensors +# ================================================================ +def adjust_shape(input_tensor, data): + ''' + adjust shape of the data to the shape of the tensor if possible. + If shape is incompatible, AssertionError is thrown + + Parameters: + input_tensor tensorflow input tensor + + data input data to be (potentially) reshaped to be fed into input + + Returns: + reshaped data + ''' + + if not isinstance(data, np.ndarray) and not isinstance(data, list): + return data + if isinstance(data, list): + data = np.array(data) + + input_shape = [x or -1 for x in input_tensor.shape.as_list()] + + assert _check_shape(input_shape, data.shape), \ + 'Shape of data {} is not compatible with shape of the input {}'.format(data.shape, input_shape) + + return np.reshape(data, input_shape) + + +def _check_shape(input_shape, data_shape): + ''' check if two shapes are compatible (i.e. differ only by dimensions of size 1, or by the batch dimension)''' + + squeezed_input_shape = _squeeze_shape(input_shape) + squeezed_data_shape = _squeeze_shape(data_shape) + + for i, s_data in enumerate(squeezed_data_shape): + s_input = squeezed_input_shape[i] + if s_input != -1 and s_data != s_input: + return False + + return True + + +def _squeeze_shape(shape): + return [x for x in shape if x != 1] + +# ================================================================ +# Tensorboard interfacing +# ================================================================ + +def launch_tensorboard_in_background(log_dir): + ''' + To log the Tensorflow graph when using rl-algs + algorithms, you can run the following code + in your main script: + import threading, time + def start_tensorboard(session): + time.sleep(10) # Wait until graph is setup + tb_path = osp.join(logger.get_dir(), 'tb') + summary_writer = tf.summary.FileWriter(tb_path, graph=session.graph) + summary_op = tf.summary.merge_all() + launch_tensorboard_in_background(tb_path) + session = tf.get_default_session() + t = threading.Thread(target=start_tensorboard, args=([session])) + t.start() + ''' + import subprocess + subprocess.Popen(['tensorboard', '--logdir', log_dir]) diff --git a/baselines/baselines/common/tile_images.py b/baselines/baselines/common/tile_images.py new file mode 100644 index 0000000000000000000000000000000000000000..929da8994a974fbfe6065a44762fc1db3f5b36d3 --- /dev/null +++ b/baselines/baselines/common/tile_images.py @@ -0,0 +1,23 @@ +import numpy as np + +def tile_images(img_nhwc): + """ + Tile N images into one big PxQ image + (P,Q) are chosen to be as close as possible, and if N + is square, then P=Q. + + input: img_nhwc, list or array of images, ndim=4 once turned into array + n = batch index, h = height, w = width, c = channel + returns: + bigim_HWc, ndarray with ndim=3 + """ + img_nhwc = np.asarray(img_nhwc) + N, h, w, c = img_nhwc.shape + H = int(np.ceil(np.sqrt(N))) + W = int(np.ceil(float(N)/H)) + img_nhwc = np.array(list(img_nhwc) + [img_nhwc[0]*0 for _ in range(N, H*W)]) + img_HWhwc = img_nhwc.reshape(H, W, h, w, c) + img_HhWwc = img_HWhwc.transpose(0, 2, 1, 3, 4) + img_Hh_Ww_c = img_HhWwc.reshape(H*h, W*w, c) + return img_Hh_Ww_c + diff --git a/baselines/baselines/common/vec_env/__init__.py b/baselines/baselines/common/vec_env/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1e4ef55299b4dfc220f887f68a4c86ede30d3cdc --- /dev/null +++ b/baselines/baselines/common/vec_env/__init__.py @@ -0,0 +1,10 @@ +from .vec_env import AlreadySteppingError, NotSteppingError, VecEnv, VecEnvWrapper, VecEnvObservationWrapper, CloudpickleWrapper +from .dummy_vec_env import DummyVecEnv +from .shmem_vec_env import ShmemVecEnv +from .subproc_vec_env import SubprocVecEnv +from .vec_frame_stack import VecFrameStack +from .vec_monitor import VecMonitor +from .vec_normalize import VecNormalize +from .vec_remove_dict_obs import VecExtractDictObs + +__all__ = ['AlreadySteppingError', 'NotSteppingError', 'VecEnv', 'VecEnvWrapper', 'VecEnvObservationWrapper', 'CloudpickleWrapper', 'DummyVecEnv', 'ShmemVecEnv', 'SubprocVecEnv', 'VecFrameStack', 'VecMonitor', 'VecNormalize', 'VecExtractDictObs'] diff --git a/baselines/baselines/common/vec_env/dummy_vec_env.py b/baselines/baselines/common/vec_env/dummy_vec_env.py new file mode 100644 index 0000000000000000000000000000000000000000..adcbce806509ac7c19afd91e2f9b8b88ce032295 --- /dev/null +++ b/baselines/baselines/common/vec_env/dummy_vec_env.py @@ -0,0 +1,81 @@ +import numpy as np +from .vec_env import VecEnv +from .util import copy_obs_dict, dict_to_obs, obs_space_info + +class DummyVecEnv(VecEnv): + """ + VecEnv that does runs multiple environments sequentially, that is, + the step and reset commands are send to one environment at a time. + Useful when debugging and when num_env == 1 (in the latter case, + avoids communication overhead) + """ + def __init__(self, env_fns): + """ + Arguments: + + env_fns: iterable of callables functions that build environments + """ + self.envs = [fn() for fn in env_fns] + env = self.envs[0] + VecEnv.__init__(self, len(env_fns), env.observation_space, env.action_space) + obs_space = env.observation_space + self.keys, shapes, dtypes = obs_space_info(obs_space) + + self.buf_obs = { k: np.zeros((self.num_envs,) + tuple(shapes[k]), dtype=dtypes[k]) for k in self.keys } + self.buf_dones = np.zeros((self.num_envs,), dtype=np.bool) + self.buf_rews = np.zeros((self.num_envs,), dtype=np.float32) + self.buf_infos = [{} for _ in range(self.num_envs)] + self.actions = None + self.spec = self.envs[0].spec + + def step_async(self, actions): + listify = True + try: + if len(actions) == self.num_envs: + listify = False + except TypeError: + pass + + if not listify: + self.actions = actions + else: + assert self.num_envs == 1, "actions {} is either not a list or has a wrong size - cannot match to {} environments".format(actions, self.num_envs) + self.actions = [actions] + + def step_wait(self): + for e in range(self.num_envs): + action = self.actions[e] + # if isinstance(self.envs[e].action_space, spaces.Discrete): + # action = int(action) + + obs, self.buf_rews[e], self.buf_dones[e], self.buf_infos[e] = self.envs[e].step(action) + if self.buf_dones[e]: + obs = self.envs[e].reset() + self._save_obs(e, obs) + return (self._obs_from_buf(), np.copy(self.buf_rews), np.copy(self.buf_dones), + self.buf_infos.copy()) + + def reset(self): + for e in range(self.num_envs): + obs = self.envs[e].reset() + self._save_obs(e, obs) + return self._obs_from_buf() + + def _save_obs(self, e, obs): + for k in self.keys: + if k is None: + self.buf_obs[k][e] = obs + else: + self.buf_obs[k][e] = obs[k] + + def _obs_from_buf(self): + return dict_to_obs(copy_obs_dict(self.buf_obs)) + + def get_images(self): + return [env.render(mode='rgb_array') for env in self.envs] + + def render(self, mode='human'): + if self.num_envs == 1: + return self.envs[0].render(mode=mode) + else: + return super().render(mode=mode) diff --git a/baselines/baselines/common/vec_env/shmem_vec_env.py b/baselines/baselines/common/vec_env/shmem_vec_env.py new file mode 100644 index 0000000000000000000000000000000000000000..343ef94a348ef2872eab9d56aea1add48e4d6fea --- /dev/null +++ b/baselines/baselines/common/vec_env/shmem_vec_env.py @@ -0,0 +1,139 @@ +""" +An interface for asynchronous vectorized environments. +""" + +import multiprocessing as mp +import numpy as np +from .vec_env import VecEnv, CloudpickleWrapper, clear_mpi_env_vars +import ctypes +from baselines import logger + +from .util import dict_to_obs, obs_space_info, obs_to_dict + +_NP_TO_CT = {np.float32: ctypes.c_float, + np.int32: ctypes.c_int32, + np.int8: ctypes.c_int8, + np.uint8: ctypes.c_char, + np.bool: ctypes.c_bool} + + +class ShmemVecEnv(VecEnv): + """ + Optimized version of SubprocVecEnv that uses shared variables to communicate observations. + """ + + def __init__(self, env_fns, spaces=None, context='spawn'): + """ + If you don't specify observation_space, we'll have to create a dummy + environment to get it. + """ + ctx = mp.get_context(context) + if spaces: + observation_space, action_space = spaces + else: + logger.log('Creating dummy env object to get spaces') + with logger.scoped_configure(format_strs=[]): + dummy = env_fns[0]() + observation_space, action_space = dummy.observation_space, dummy.action_space + dummy.close() + del dummy + VecEnv.__init__(self, len(env_fns), observation_space, action_space) + self.obs_keys, self.obs_shapes, self.obs_dtypes = obs_space_info(observation_space) + self.obs_bufs = [ + {k: ctx.Array(_NP_TO_CT[self.obs_dtypes[k].type], int(np.prod(self.obs_shapes[k]))) for k in self.obs_keys} + for _ in env_fns] + self.parent_pipes = [] + self.procs = [] + with clear_mpi_env_vars(): + for env_fn, obs_buf in zip(env_fns, self.obs_bufs): + wrapped_fn = CloudpickleWrapper(env_fn) + parent_pipe, child_pipe = ctx.Pipe() + proc = ctx.Process(target=_subproc_worker, + args=(child_pipe, parent_pipe, wrapped_fn, obs_buf, self.obs_shapes, self.obs_dtypes, self.obs_keys)) + proc.daemon = True + self.procs.append(proc) + self.parent_pipes.append(parent_pipe) + proc.start() + child_pipe.close() + self.waiting_step = False + self.viewer = None + + def reset(self): + if self.waiting_step: + logger.warn('Called reset() while waiting for the step to complete') + self.step_wait() + for pipe in self.parent_pipes: + pipe.send(('reset', None)) + return self._decode_obses([pipe.recv() for pipe in self.parent_pipes]) + + def step_async(self, actions): + assert len(actions) == len(self.parent_pipes) + for pipe, act in zip(self.parent_pipes, actions): + pipe.send(('step', act)) + + def step_wait(self): + outs = [pipe.recv() for pipe in self.parent_pipes] + obs, rews, dones, infos = zip(*outs) + return self._decode_obses(obs), np.array(rews), np.array(dones), infos + + def close_extras(self): + if self.waiting_step: + self.step_wait() + for pipe in self.parent_pipes: + pipe.send(('close', None)) + for pipe in self.parent_pipes: + pipe.recv() + pipe.close() + for proc in self.procs: + proc.join() + + def get_images(self, mode='human'): + for pipe in self.parent_pipes: + pipe.send(('render', None)) + return [pipe.recv() for pipe in self.parent_pipes] + + def _decode_obses(self, obs): + result = {} + for k in self.obs_keys: + + bufs = [b[k] for b in self.obs_bufs] + o = [np.frombuffer(b.get_obj(), dtype=self.obs_dtypes[k]).reshape(self.obs_shapes[k]) for b in bufs] + result[k] = np.array(o) + return dict_to_obs(result) + + +def _subproc_worker(pipe, parent_pipe, env_fn_wrapper, obs_bufs, obs_shapes, obs_dtypes, keys): + """ + Control a single environment instance using IPC and + shared memory. + """ + def _write_obs(maybe_dict_obs): + flatdict = obs_to_dict(maybe_dict_obs) + for k in keys: + dst = obs_bufs[k].get_obj() + dst_np = np.frombuffer(dst, dtype=obs_dtypes[k]).reshape(obs_shapes[k]) # pylint: disable=W0212 + np.copyto(dst_np, flatdict[k]) + + env = env_fn_wrapper.x() + parent_pipe.close() + try: + while True: + cmd, data = pipe.recv() + if cmd == 'reset': + pipe.send(_write_obs(env.reset())) + elif cmd == 'step': + obs, reward, done, info = env.step(data) + if done: + obs = env.reset() + pipe.send((_write_obs(obs), reward, done, info)) + elif cmd == 'render': + pipe.send(env.render(mode='rgb_array')) + elif cmd == 'close': + pipe.send(None) + break + else: + raise RuntimeError('Got unrecognized cmd %s' % cmd) + except KeyboardInterrupt: + print('ShmemVecEnv worker: got KeyboardInterrupt') + finally: + env.close() diff --git a/baselines/baselines/common/vec_env/subproc_vec_env.py b/baselines/baselines/common/vec_env/subproc_vec_env.py new file mode 100644 index 0000000000000000000000000000000000000000..a36a7af1b1a5914e05133c4d772f1a2c8d36bb0d --- /dev/null +++ b/baselines/baselines/common/vec_env/subproc_vec_env.py @@ -0,0 +1,117 @@ +import multiprocessing as mp + +import numpy as np +from .vec_env import VecEnv, CloudpickleWrapper, clear_mpi_env_vars + + +def worker(remote, parent_remote, env_fn_wrapper): + parent_remote.close() + env = env_fn_wrapper.x() + try: + while True: + cmd, data = remote.recv() + if cmd == 'step': + ob, reward, done, info = env.step(data) + if done: + ob = env.reset() + remote.send((ob, reward, done, info)) + elif cmd == 'reset': + ob = env.reset() + remote.send(ob) + elif cmd == 'render': + remote.send(env.render(mode='rgb_array')) + elif cmd == 'close': + remote.close() + break + elif cmd == 'get_spaces_spec': + remote.send((env.observation_space, env.action_space, env.spec)) + else: + raise NotImplementedError + except KeyboardInterrupt: + print('SubprocVecEnv worker: got KeyboardInterrupt') + finally: + env.close() + + +class SubprocVecEnv(VecEnv): + """ + VecEnv that runs multiple environments in parallel in subproceses and communicates with them via pipes. + Recommended to use when num_envs > 1 and step() can be a bottleneck. + """ + def __init__(self, env_fns, spaces=None, context='spawn'): + """ + Arguments: + + env_fns: iterable of callables - functions that create environments to run in subprocesses. Need to be cloud-pickleable + """ + self.waiting = False + self.closed = False + nenvs = len(env_fns) + ctx = mp.get_context(context) + self.remotes, self.work_remotes = zip(*[ctx.Pipe() for _ in range(nenvs)]) + self.ps = [ctx.Process(target=worker, args=(work_remote, remote, CloudpickleWrapper(env_fn))) + for (work_remote, remote, env_fn) in zip(self.work_remotes, self.remotes, env_fns)] + for p in self.ps: + p.daemon = True # if the main process crashes, we should not cause things to hang + with clear_mpi_env_vars(): + p.start() + for remote in self.work_remotes: + remote.close() + + self.remotes[0].send(('get_spaces_spec', None)) + observation_space, action_space, self.spec = self.remotes[0].recv() + self.viewer = None + VecEnv.__init__(self, len(env_fns), observation_space, action_space) + + def step_async(self, actions): + self._assert_not_closed() + for remote, action in zip(self.remotes, actions): + remote.send(('step', action)) + self.waiting = True + + def step_wait(self): + self._assert_not_closed() + results = [remote.recv() for remote in self.remotes] + self.waiting = False + obs, rews, dones, infos = zip(*results) + return _flatten_obs(obs), np.stack(rews), np.stack(dones), infos + + def reset(self): + self._assert_not_closed() + for remote in self.remotes: + remote.send(('reset', None)) + return _flatten_obs([remote.recv() for remote in self.remotes]) + + def close_extras(self): + self.closed = True + if self.waiting: + for remote in self.remotes: + remote.recv() + for remote in self.remotes: + remote.send(('close', None)) + for p in self.ps: + p.join() + + def get_images(self): + self._assert_not_closed() + for pipe in self.remotes: + pipe.send(('render', None)) + imgs = [pipe.recv() for pipe in self.remotes] + return imgs + + def _assert_not_closed(self): + assert not self.closed, "Trying to operate on a SubprocVecEnv after calling close()" + + def __del__(self): + if not self.closed: + self.close() + +def _flatten_obs(obs): + assert isinstance(obs, (list, tuple)) + assert len(obs) > 0 + + if isinstance(obs[0], dict): + keys = obs[0].keys() + return {k: np.stack([o[k] for o in obs]) for k in keys} + else: + return np.stack(obs) diff --git a/baselines/baselines/common/vec_env/test_vec_env.py b/baselines/baselines/common/vec_env/test_vec_env.py new file mode 100644 index 0000000000000000000000000000000000000000..4feabb0816ee925fa247dd41074e26762f0ce9f0 --- /dev/null +++ b/baselines/baselines/common/vec_env/test_vec_env.py @@ -0,0 +1,114 @@ +""" +Tests for asynchronous vectorized environments. +""" + +import gym +import numpy as np +import pytest +from .dummy_vec_env import DummyVecEnv +from .shmem_vec_env import ShmemVecEnv +from .subproc_vec_env import SubprocVecEnv +from baselines.common.tests.test_with_mpi import with_mpi + + +def assert_venvs_equal(venv1, venv2, num_steps): + """ + Compare two environments over num_steps steps and make sure + that the observations produced by each are the same when given + the same actions. + """ + assert venv1.num_envs == venv2.num_envs + assert venv1.observation_space.shape == venv2.observation_space.shape + assert venv1.observation_space.dtype == venv2.observation_space.dtype + assert venv1.action_space.shape == venv2.action_space.shape + assert venv1.action_space.dtype == venv2.action_space.dtype + + try: + obs1, obs2 = venv1.reset(), venv2.reset() + assert np.array(obs1).shape == np.array(obs2).shape + assert np.array(obs1).shape == (venv1.num_envs,) + venv1.observation_space.shape + assert np.allclose(obs1, obs2) + venv1.action_space.seed(1337) + for _ in range(num_steps): + actions = np.array([venv1.action_space.sample() for _ in range(venv1.num_envs)]) + for venv in [venv1, venv2]: + venv.step_async(actions) + outs1 = venv1.step_wait() + outs2 = venv2.step_wait() + for out1, out2 in zip(outs1[:3], outs2[:3]): + assert np.array(out1).shape == np.array(out2).shape + assert np.allclose(out1, out2) + assert list(outs1[3]) == list(outs2[3]) + finally: + venv1.close() + venv2.close() + + +@pytest.mark.parametrize('klass', (ShmemVecEnv, SubprocVecEnv)) +@pytest.mark.parametrize('dtype', ('uint8', 'float32')) +def test_vec_env(klass, dtype): # pylint: disable=R0914 + """ + Test that a vectorized environment is equivalent to + DummyVecEnv, since DummyVecEnv is less likely to be + error prone. + """ + num_envs = 3 + num_steps = 100 + shape = (3, 8) + + def make_fn(seed): + """ + Get an environment constructor with a seed. + """ + return lambda: SimpleEnv(seed, shape, dtype) + fns = [make_fn(i) for i in range(num_envs)] + env1 = DummyVecEnv(fns) + env2 = klass(fns) + assert_venvs_equal(env1, env2, num_steps=num_steps) + + +class SimpleEnv(gym.Env): + """ + An environment with a pre-determined observation space + and RNG seed. + """ + + def __init__(self, seed, shape, dtype): + np.random.seed(seed) + self._dtype = dtype + self._start_obs = np.array(np.random.randint(0, 0x100, size=shape), + dtype=dtype) + self._max_steps = seed + 1 + self._cur_obs = None + self._cur_step = 0 + # this is 0xFF instead of 0x100 because the Box space includes + # the high end, while randint does not + self.action_space = gym.spaces.Box(low=0, high=0xFF, shape=shape, dtype=dtype) + self.observation_space = self.action_space + + def step(self, action): + self._cur_obs += np.array(action, dtype=self._dtype) + self._cur_step += 1 + done = self._cur_step >= self._max_steps + reward = self._cur_step / self._max_steps + return self._cur_obs, reward, done, {'foo': 'bar' + str(reward)} + + def reset(self): + self._cur_obs = self._start_obs + self._cur_step = 0 + return self._cur_obs + + def render(self, mode=None): + raise NotImplementedError + + + +@with_mpi() +def test_mpi_with_subprocvecenv(): + shape = (2,3,4) + nenv = 1 + venv = SubprocVecEnv([lambda: SimpleEnv(0, shape, 'float32')] * nenv) + ob = venv.reset() + venv.close() + assert ob.shape == (nenv,) + shape + diff --git a/baselines/baselines/common/vec_env/test_video_recorder.py b/baselines/baselines/common/vec_env/test_video_recorder.py new file mode 100644 index 0000000000000000000000000000000000000000..363404a60f27ec0d465da9e164296a77e37ddcca --- /dev/null +++ b/baselines/baselines/common/vec_env/test_video_recorder.py @@ -0,0 +1,49 @@ +""" +Tests for asynchronous vectorized environments. +""" + +import gym +import pytest +import os +import glob +import tempfile + +from .dummy_vec_env import DummyVecEnv +from .shmem_vec_env import ShmemVecEnv +from .subproc_vec_env import SubprocVecEnv +from .vec_video_recorder import VecVideoRecorder + +@pytest.mark.parametrize('klass', (DummyVecEnv, ShmemVecEnv, SubprocVecEnv)) +@pytest.mark.parametrize('num_envs', (1, 4)) +@pytest.mark.parametrize('video_length', (10, 100)) +@pytest.mark.parametrize('video_interval', (1, 50)) +def test_video_recorder(klass, num_envs, video_length, video_interval): + """ + Wrap an existing VecEnv with VevVideoRecorder, + Make (video_interval + video_length + 1) steps, + then check that the file is present + """ + + def make_fn(): + env = gym.make('PongNoFrameskip-v4') + return env + fns = [make_fn for _ in range(num_envs)] + env = klass(fns) + + with tempfile.TemporaryDirectory() as video_path: + env = VecVideoRecorder(env, video_path, record_video_trigger=lambda x: x % video_interval == 0, video_length=video_length) + + env.reset() + for _ in range(video_interval + video_length + 1): + env.step([0] * num_envs) + env.close() + + + recorded_video = glob.glob(os.path.join(video_path, "*.mp4")) + + # first and second step + assert len(recorded_video) == 2 + # Files are not empty + assert all(os.stat(p).st_size != 0 for p in recorded_video) + + diff --git a/baselines/baselines/common/vec_env/util.py b/baselines/baselines/common/vec_env/util.py new file mode 100644 index 0000000000000000000000000000000000000000..d29d8a33239fa3344254d7e6b3cb8642a1d71043 --- /dev/null +++ b/baselines/baselines/common/vec_env/util.py @@ -0,0 +1,59 @@ +""" +Helpers for dealing with vectorized environments. +""" + +from collections import OrderedDict + +import gym +import numpy as np + + +def copy_obs_dict(obs): + """ + Deep-copy an observation dict. + """ + return {k: np.copy(v) for k, v in obs.items()} + + +def dict_to_obs(obs_dict): + """ + Convert an observation dict into a raw array if the + original observation space was not a Dict space. + """ + if set(obs_dict.keys()) == {None}: + return obs_dict[None] + return obs_dict + + +def obs_space_info(obs_space): + """ + Get dict-structured information about a gym.Space. + + Returns: + A tuple (keys, shapes, dtypes): + keys: a list of dict keys. + shapes: a dict mapping keys to shapes. + dtypes: a dict mapping keys to dtypes. + """ + if isinstance(obs_space, gym.spaces.Dict): + assert isinstance(obs_space.spaces, OrderedDict) + subspaces = obs_space.spaces + else: + subspaces = {None: obs_space} + keys = [] + shapes = {} + dtypes = {} + for key, box in subspaces.items(): + keys.append(key) + shapes[key] = box.shape + dtypes[key] = box.dtype + return keys, shapes, dtypes + + +def obs_to_dict(obs): + """ + Convert an observation into a dict. + """ + if isinstance(obs, dict): + return obs + return {None: obs} diff --git a/baselines/baselines/common/vec_env/vec_env.py b/baselines/baselines/common/vec_env/vec_env.py new file mode 100644 index 0000000000000000000000000000000000000000..437d15f928e2c9e7c58aed2221528f21d1bef47e --- /dev/null +++ b/baselines/baselines/common/vec_env/vec_env.py @@ -0,0 +1,218 @@ +import contextlib +import os +from abc import ABC, abstractmethod + +from baselines.common.tile_images import tile_images + +class AlreadySteppingError(Exception): + """ + Raised when an asynchronous step is running while + step_async() is called again. + """ + + def __init__(self): + msg = 'already running an async step' + Exception.__init__(self, msg) + + +class NotSteppingError(Exception): + """ + Raised when an asynchronous step is not running but + step_wait() is called. + """ + + def __init__(self): + msg = 'not running an async step' + Exception.__init__(self, msg) + + +class VecEnv(ABC): + """ + An abstract asynchronous, vectorized environment. + Used to batch data from multiple copies of an environment, so that + each observation becomes an batch of observations, and expected action is a batch of actions to + be applied per-environment. + """ + closed = False + viewer = None + + metadata = { + 'render.modes': ['human', 'rgb_array'] + } + + def __init__(self, num_envs, observation_space, action_space): + self.num_envs = num_envs + self.observation_space = observation_space + self.action_space = action_space + + @abstractmethod + def reset(self): + """ + Reset all the environments and return an array of + observations, or a dict of observation arrays. + + If step_async is still doing work, that work will + be cancelled and step_wait() should not be called + until step_async() is invoked again. + """ + pass + + @abstractmethod + def step_async(self, actions): + """ + Tell all the environments to start taking a step + with the given actions. + Call step_wait() to get the results of the step. + + You should not call this if a step_async run is + already pending. + """ + pass + + @abstractmethod + def step_wait(self): + """ + Wait for the step taken with step_async(). + + Returns (obs, rews, dones, infos): + - obs: an array of observations, or a dict of + arrays of observations. + - rews: an array of rewards + - dones: an array of "episode done" booleans + - infos: a sequence of info objects + """ + pass + + def close_extras(self): + """ + Clean up the extra resources, beyond what's in this base class. + Only runs when not self.closed. + """ + pass + + def close(self): + if self.closed: + return + if self.viewer is not None: + self.viewer.close() + self.close_extras() + self.closed = True + + def step(self, actions): + """ + Step the environments synchronously. + + This is available for backwards compatibility. + """ + self.step_async(actions) + return self.step_wait() + + def render(self, mode='human'): + imgs = self.get_images() + bigimg = tile_images(imgs) + if mode == 'human': + self.get_viewer().imshow(bigimg) + return self.get_viewer().isopen + elif mode == 'rgb_array': + return bigimg + else: + raise NotImplementedError + + def get_images(self): + """ + Return RGB images from each environment + """ + raise NotImplementedError + + @property + def unwrapped(self): + if isinstance(self, VecEnvWrapper): + return self.venv.unwrapped + else: + return self + + def get_viewer(self): + if self.viewer is None: + from gym.envs.classic_control import rendering + self.viewer = rendering.SimpleImageViewer() + return self.viewer + +class VecEnvWrapper(VecEnv): + """ + An environment wrapper that applies to an entire batch + of environments at once. + """ + + def __init__(self, venv, observation_space=None, action_space=None): + self.venv = venv + super().__init__(num_envs=venv.num_envs, + observation_space=observation_space or venv.observation_space, + action_space=action_space or venv.action_space) + + def step_async(self, actions): + self.venv.step_async(actions) + + @abstractmethod + def reset(self): + pass + + @abstractmethod + def step_wait(self): + pass + + def close(self): + return self.venv.close() + + def render(self, mode='human'): + return self.venv.render(mode=mode) + + def get_images(self): + return self.venv.get_images() + +class VecEnvObservationWrapper(VecEnvWrapper): + @abstractmethod + def process(self, obs): + pass + + def reset(self): + obs = self.venv.reset() + return self.process(obs) + + def step_wait(self): + obs, rews, dones, infos = self.venv.step_wait() + return self.process(obs), rews, dones, infos + +class CloudpickleWrapper(object): + """ + Uses cloudpickle to serialize contents (otherwise multiprocessing tries to use pickle) + """ + + def __init__(self, x): + self.x = x + + def __getstate__(self): + import cloudpickle + return cloudpickle.dumps(self.x) + + def __setstate__(self, ob): + import pickle + self.x = pickle.loads(ob) + + +@contextlib.contextmanager +def clear_mpi_env_vars(): + """ + from mpi4py import MPI will call MPI_Init by default. If the child process has MPI environment variables, MPI will think that the child process is an MPI process just like the parent and do bad things such as hang. + This context manager is a hacky way to clear those environment variables temporarily such as when we are starting multiprocessing + Processes. + """ + removed_environment = {} + for k, v in list(os.environ.items()): + for prefix in ['OMPI_', 'PMI_']: + if k.startswith(prefix): + removed_environment[k] = v + del os.environ[k] + try: + yield + finally: + os.environ.update(removed_environment) diff --git a/baselines/baselines/common/vec_env/vec_frame_stack.py b/baselines/baselines/common/vec_env/vec_frame_stack.py new file mode 100644 index 0000000000000000000000000000000000000000..0da1a0aadacccadfb2344ab369c3202212dd0c9b --- /dev/null +++ b/baselines/baselines/common/vec_env/vec_frame_stack.py @@ -0,0 +1,30 @@ +from .vec_env import VecEnvWrapper +import numpy as np +from gym import spaces + + +class VecFrameStack(VecEnvWrapper): + def __init__(self, venv, nstack): + self.venv = venv + self.nstack = nstack + wos = venv.observation_space # wrapped ob space + low = np.repeat(wos.low, self.nstack, axis=-1) + high = np.repeat(wos.high, self.nstack, axis=-1) + self.stackedobs = np.zeros((venv.num_envs,) + low.shape, low.dtype) + observation_space = spaces.Box(low=low, high=high, dtype=venv.observation_space.dtype) + VecEnvWrapper.__init__(self, venv, observation_space=observation_space) + + def step_wait(self): + obs, rews, news, infos = self.venv.step_wait() + self.stackedobs = np.roll(self.stackedobs, shift=-1, axis=-1) + for (i, new) in enumerate(news): + if new: + self.stackedobs[i] = 0 + self.stackedobs[..., -obs.shape[-1]:] = obs + return self.stackedobs, rews, news, infos + + def reset(self): + obs = self.venv.reset() + self.stackedobs[...] = 0 + self.stackedobs[..., -obs.shape[-1]:] = obs + return self.stackedobs diff --git a/baselines/baselines/common/vec_env/vec_monitor.py b/baselines/baselines/common/vec_env/vec_monitor.py new file mode 100644 index 0000000000000000000000000000000000000000..6e673783f1dcdc292ce3489703e4bf807b334dbc --- /dev/null +++ b/baselines/baselines/common/vec_env/vec_monitor.py @@ -0,0 +1,49 @@ +from . import VecEnvWrapper +from baselines.bench.monitor import ResultsWriter +import numpy as np +import time +from collections import deque + +class VecMonitor(VecEnvWrapper): + def __init__(self, venv, filename=None, keep_buf=0): + VecEnvWrapper.__init__(self, venv) + self.eprets = None + self.eplens = None + self.epcount = 0 + self.tstart = time.time() + if filename: + self.results_writer = ResultsWriter(filename, header={'t_start': self.tstart}) + else: + self.results_writer = None + self.keep_buf = keep_buf + if self.keep_buf: + self.epret_buf = deque([], maxlen=keep_buf) + self.eplen_buf = deque([], maxlen=keep_buf) + + def reset(self): + obs = self.venv.reset() + self.eprets = np.zeros(self.num_envs, 'f') + self.eplens = np.zeros(self.num_envs, 'i') + return obs + + def step_wait(self): + obs, rews, dones, infos = self.venv.step_wait() + self.eprets += rews + self.eplens += 1 + newinfos = [] + for (i, (done, ret, eplen, info)) in enumerate(zip(dones, self.eprets, self.eplens, infos)): + info = info.copy() + if done: + epinfo = {'r': ret, 'l': eplen, 't': round(time.time() - self.tstart, 6)} + info['episode'] = epinfo + if self.keep_buf: + self.epret_buf.append(ret) + self.eplen_buf.append(eplen) + self.epcount += 1 + self.eprets[i] = 0 + self.eplens[i] = 0 + if self.results_writer: + self.results_writer.write_row(epinfo) + newinfos.append(info) + + return obs, rews, dones, newinfos diff --git a/baselines/baselines/common/vec_env/vec_normalize.py b/baselines/baselines/common/vec_env/vec_normalize.py new file mode 100644 index 0000000000000000000000000000000000000000..f3255e9c372c3929ea36a4d5b367b5a53c8b3b84 --- /dev/null +++ b/baselines/baselines/common/vec_env/vec_normalize.py @@ -0,0 +1,43 @@ +from . import VecEnvWrapper +from baselines.common.running_mean_std import RunningMeanStd +import numpy as np + + +class VecNormalize(VecEnvWrapper): + """ + A vectorized wrapper that normalizes the observations + and returns from an environment. + """ + + def __init__(self, venv, ob=True, ret=True, clipob=10., cliprew=10., gamma=0.99, epsilon=1e-8): + VecEnvWrapper.__init__(self, venv) + self.ob_rms = RunningMeanStd(shape=self.observation_space.shape) if ob else None + self.ret_rms = RunningMeanStd(shape=()) if ret else None + self.clipob = clipob + self.cliprew = cliprew + self.ret = np.zeros(self.num_envs) + self.gamma = gamma + self.epsilon = epsilon + + def step_wait(self): + obs, rews, news, infos = self.venv.step_wait() + self.ret = self.ret * self.gamma + rews + obs = self._obfilt(obs) + if self.ret_rms: + self.ret_rms.update(self.ret) + rews = np.clip(rews / np.sqrt(self.ret_rms.var + self.epsilon), -self.cliprew, self.cliprew) + self.ret[news] = 0. + return obs, rews, news, infos + + def _obfilt(self, obs): + if self.ob_rms: + self.ob_rms.update(obs) + obs = np.clip((obs - self.ob_rms.mean) / np.sqrt(self.ob_rms.var + self.epsilon), -self.clipob, self.clipob) + return obs + else: + return obs + + def reset(self): + self.ret = np.zeros(self.num_envs) + obs = self.venv.reset() + return self._obfilt(obs) diff --git a/baselines/baselines/common/vec_env/vec_remove_dict_obs.py b/baselines/baselines/common/vec_env/vec_remove_dict_obs.py new file mode 100644 index 0000000000000000000000000000000000000000..602b949ed2c87437f326adf223e3da6fcfd07bef --- /dev/null +++ b/baselines/baselines/common/vec_env/vec_remove_dict_obs.py @@ -0,0 +1,11 @@ +from .vec_env import VecEnvObservationWrapper + + +class VecExtractDictObs(VecEnvObservationWrapper): + def __init__(self, venv, key): + self.key = key + super().__init__(venv=venv, + observation_space=venv.observation_space.spaces[self.key]) + + def process(self, obs): + return obs[self.key] \ No newline at end of file diff --git a/baselines/baselines/common/vec_env/vec_video_recorder.py b/baselines/baselines/common/vec_env/vec_video_recorder.py new file mode 100644 index 0000000000000000000000000000000000000000..b4e7059ff0a7d20710482d1aa8262fbcc2128671 --- /dev/null +++ b/baselines/baselines/common/vec_env/vec_video_recorder.py @@ -0,0 +1,89 @@ +import os +from baselines import logger +from baselines.common.vec_env import VecEnvWrapper +from gym.wrappers.monitoring import video_recorder + + +class VecVideoRecorder(VecEnvWrapper): + """ + Wrap VecEnv to record rendered image as mp4 video. + """ + + def __init__(self, venv, directory, record_video_trigger, video_length=200): + """ + # Arguments + venv: VecEnv to wrap + directory: Where to save videos + record_video_trigger: + Function that defines when to start recording. + The function takes the current number of step, + and returns whether we should start recording or not. + video_length: Length of recorded video + """ + + VecEnvWrapper.__init__(self, venv) + self.record_video_trigger = record_video_trigger + self.video_recorder = None + + self.directory = os.path.abspath(directory) + if not os.path.exists(self.directory): os.mkdir(self.directory) + + self.file_prefix = "vecenv" + self.file_infix = '{}'.format(os.getpid()) + self.step_id = 0 + self.video_length = video_length + + self.recording = False + self.recorded_frames = 0 + + def reset(self): + obs = self.venv.reset() + + self.start_video_recorder() + + return obs + + def start_video_recorder(self): + self.close_video_recorder() + + base_path = os.path.join(self.directory, '{}.video.{}.video{:06}'.format(self.file_prefix, self.file_infix, self.step_id)) + self.video_recorder = video_recorder.VideoRecorder( + env=self.venv, + base_path=base_path, + metadata={'step_id': self.step_id} + ) + + self.video_recorder.capture_frame() + self.recorded_frames = 1 + self.recording = True + + def _video_enabled(self): + return self.record_video_trigger(self.step_id) + + def step_wait(self): + obs, rews, dones, infos = self.venv.step_wait() + + self.step_id += 1 + if self.recording: + self.video_recorder.capture_frame() + self.recorded_frames += 1 + if self.recorded_frames > self.video_length: + logger.info("Saving video to ", self.video_recorder.path) + self.close_video_recorder() + elif self._video_enabled(): + self.start_video_recorder() + + return obs, rews, dones, infos + + def close_video_recorder(self): + if self.recording: + self.video_recorder.close() + self.recording = False + self.recorded_frames = 0 + + def close(self): + VecEnvWrapper.close(self) + self.close_video_recorder() + + def __del__(self): + self.close() diff --git a/baselines/baselines/common/wrappers.py b/baselines/baselines/common/wrappers.py new file mode 100644 index 0000000000000000000000000000000000000000..7683d180177644f5055681d4a2a762f2976267c5 --- /dev/null +++ b/baselines/baselines/common/wrappers.py @@ -0,0 +1,19 @@ +import gym + +class TimeLimit(gym.Wrapper): + def __init__(self, env, max_episode_steps=None): + super(TimeLimit, self).__init__(env) + self._max_episode_steps = max_episode_steps + self._elapsed_steps = 0 + + def step(self, ac): + observation, reward, done, info = self.env.step(ac) + self._elapsed_steps += 1 + if self._elapsed_steps >= self._max_episode_steps: + done = True + info['TimeLimit.truncated'] = True + return observation, reward, done, info + + def reset(self, **kwargs): + self._elapsed_steps = 0 + return self.env.reset(**kwargs) \ No newline at end of file diff --git a/baselines/baselines/ddpg/README.md b/baselines/baselines/ddpg/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ed6d23fa610769665ed5d9f8116f2f5b74dfb9a9 --- /dev/null +++ b/baselines/baselines/ddpg/README.md @@ -0,0 +1,5 @@ +# DDPG + +- Original paper: https://arxiv.org/abs/1509.02971 +- Baselines post: https://blog.openai.com/better-exploration-with-parameter-noise/ +- `python -m baselines.run --alg=ddpg --env=HalfCheetah-v2 --num_timesteps=1e6` runs the algorithm for 1M frames = 10M timesteps on a Mujoco environment. See help (`-h`) for more options. diff --git a/baselines/baselines/ddpg/__init__.py b/baselines/baselines/ddpg/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/ddpg/ddpg.py b/baselines/baselines/ddpg/ddpg.py new file mode 100644 index 0000000000000000000000000000000000000000..0a2c405aef1ab33457cf8c88423bb2ac392300fb --- /dev/null +++ b/baselines/baselines/ddpg/ddpg.py @@ -0,0 +1,285 @@ +import os +import os.path as osp +import time +from collections import deque +import pickle + +from baselines.ddpg.ddpg_learner import DDPG +from baselines.ddpg.models import Actor, Critic +from baselines.ddpg.memory import Memory +from baselines.ddpg.noise import AdaptiveParamNoiseSpec, NormalActionNoise, OrnsteinUhlenbeckActionNoise +from baselines.common import set_global_seeds + +from baselines import logger +import tensorflow as tf +import numpy as np + +try: + from mpi4py import MPI +except ImportError: + MPI = None + +def learn(network, env, + seed=None, + total_timesteps=None, + nb_epochs=None, # with default settings, perform 1M steps total + nb_epoch_cycles=20, + nb_rollout_steps=100, + reward_scale=1.0, + render=False, + render_eval=False, + noise_type='adaptive-param_0.2', + normalize_returns=False, + normalize_observations=True, + critic_l2_reg=1e-2, + actor_lr=1e-4, + critic_lr=1e-3, + popart=False, + gamma=0.99, + clip_norm=None, + nb_train_steps=50, # per epoch cycle and MPI worker, + nb_eval_steps=100, + batch_size=64, # per MPI worker + tau=0.01, + eval_env=None, + param_noise_adaption_interval=50, + load_path=None, + **network_kwargs): + + set_global_seeds(seed) + + if total_timesteps is not None: + assert nb_epochs is None + nb_epochs = int(total_timesteps) // (nb_epoch_cycles * nb_rollout_steps) + else: + nb_epochs = 500 + + if MPI is not None: + rank = MPI.COMM_WORLD.Get_rank() + else: + rank = 0 + + nb_actions = env.action_space.shape[-1] + assert (np.abs(env.action_space.low) == env.action_space.high).all() # we assume symmetric actions. + + memory = Memory(limit=int(1e6), action_shape=env.action_space.shape, observation_shape=env.observation_space.shape) + critic = Critic(nb_actions, ob_shape=env.observation_space.shape, network=network, **network_kwargs) + actor = Actor(nb_actions, ob_shape=env.observation_space.shape, network=network, **network_kwargs) + + action_noise = None + param_noise = None + if noise_type is not None: + for current_noise_type in noise_type.split(','): + current_noise_type = current_noise_type.strip() + if current_noise_type == 'none': + pass + elif 'adaptive-param' in current_noise_type: + _, stddev = current_noise_type.split('_') + param_noise = AdaptiveParamNoiseSpec(initial_stddev=float(stddev), desired_action_stddev=float(stddev)) + elif 'normal' in current_noise_type: + _, stddev = current_noise_type.split('_') + action_noise = NormalActionNoise(mu=np.zeros(nb_actions), sigma=float(stddev) * np.ones(nb_actions)) + elif 'ou' in current_noise_type: + _, stddev = current_noise_type.split('_') + action_noise = OrnsteinUhlenbeckActionNoise(mu=np.zeros(nb_actions), sigma=float(stddev) * np.ones(nb_actions)) + else: + raise RuntimeError('unknown noise type "{}"'.format(current_noise_type)) + + max_action = env.action_space.high + logger.info('scaling actions by {} before executing in env'.format(max_action)) + + agent = DDPG(actor, critic, memory, env.observation_space.shape, env.action_space.shape, + gamma=gamma, tau=tau, normalize_returns=normalize_returns, normalize_observations=normalize_observations, + batch_size=batch_size, action_noise=action_noise, param_noise=param_noise, critic_l2_reg=critic_l2_reg, + actor_lr=actor_lr, critic_lr=critic_lr, enable_popart=popart, clip_norm=clip_norm, + reward_scale=reward_scale) + logger.info('Using agent with the following configuration:') + logger.info(str(agent.__dict__.items())) + + if load_path is not None: + load_path = osp.expanduser(load_path) + ckpt = tf.train.Checkpoint(model=agent) + manager = tf.train.CheckpointManager(ckpt, load_path, max_to_keep=None) + ckpt.restore(manager.latest_checkpoint) + print("Restoring from {}".format(manager.latest_checkpoint)) + + eval_episode_rewards_history = deque(maxlen=100) + episode_rewards_history = deque(maxlen=100) + + # Prepare everything. + agent.initialize() + + agent.reset() + + obs = env.reset() + if eval_env is not None: + eval_obs = eval_env.reset() + nenvs = obs.shape[0] + + episode_reward = np.zeros(nenvs, dtype = np.float32) #vector + episode_step = np.zeros(nenvs, dtype = int) # vector + episodes = 0 #scalar + t = 0 # scalar + + epoch = 0 + + + + start_time = time.time() + + epoch_episode_rewards = [] + epoch_episode_steps = [] + epoch_actions = [] + epoch_qs = [] + epoch_episodes = 0 + for epoch in range(nb_epochs): + for cycle in range(nb_epoch_cycles): + # Perform rollouts. + if nenvs > 1: + # if simulating multiple envs in parallel, impossible to reset agent at the end of the episode in each + # of the environments, so resetting here instead + agent.reset() + for t_rollout in range(nb_rollout_steps): + # Predict next action. + action, q, _, _ = agent.step(tf.constant(obs), apply_noise=True, compute_Q=True) + action, q = action.numpy(), q.numpy() + + # Execute next action. + if rank == 0 and render: + env.render() + + # max_action is of dimension A, whereas action is dimension (nenvs, A) - the multiplication gets broadcasted to the batch + new_obs, r, done, info = env.step(max_action * action) # scale for execution in env (as far as DDPG is concerned, every action is in [-1, 1]) + # note these outputs are batched from vecenv + + t += 1 + if rank == 0 and render: + env.render() + episode_reward += r + episode_step += 1 + + # Book-keeping. + epoch_actions.append(action) + epoch_qs.append(q) + agent.store_transition(obs, action, r, new_obs, done) #the batched data will be unrolled in memory.py's append. + + obs = new_obs + + for d in range(len(done)): + if done[d]: + # Episode done. + epoch_episode_rewards.append(episode_reward[d]) + episode_rewards_history.append(episode_reward[d]) + epoch_episode_steps.append(episode_step[d]) + episode_reward[d] = 0. + episode_step[d] = 0 + epoch_episodes += 1 + episodes += 1 + if nenvs == 1: + agent.reset() + + + # Train. + epoch_actor_losses = [] + epoch_critic_losses = [] + epoch_adaptive_distances = [] + for t_train in range(nb_train_steps): + # Adapt param noise, if necessary. + if memory.nb_entries >= batch_size and t_train % param_noise_adaption_interval == 0: + batch = agent.memory.sample(batch_size=batch_size) + obs0 = tf.constant(batch['obs0']) + distance = agent.adapt_param_noise(obs0) + epoch_adaptive_distances.append(distance) + + cl, al = agent.train() + epoch_critic_losses.append(cl) + epoch_actor_losses.append(al) + agent.update_target_net() + + # Evaluate. + eval_episode_rewards = [] + eval_qs = [] + if eval_env is not None: + nenvs_eval = eval_obs.shape[0] + eval_episode_reward = np.zeros(nenvs_eval, dtype = np.float32) + for t_rollout in range(nb_eval_steps): + eval_action, eval_q, _, _ = agent.step(eval_obs, apply_noise=False, compute_Q=True) + eval_obs, eval_r, eval_done, eval_info = eval_env.step(max_action * eval_action) # scale for execution in env (as far as DDPG is concerned, every action is in [-1, 1]) + if render_eval: + eval_env.render() + eval_episode_reward += eval_r + + eval_qs.append(eval_q) + for d in range(len(eval_done)): + if eval_done[d]: + eval_episode_rewards.append(eval_episode_reward[d]) + eval_episode_rewards_history.append(eval_episode_reward[d]) + eval_episode_reward[d] = 0.0 + + if MPI is not None: + mpi_size = MPI.COMM_WORLD.Get_size() + else: + mpi_size = 1 + + # Log stats. + # XXX shouldn't call np.mean on variable length lists + duration = time.time() - start_time + stats = agent.get_stats() + combined_stats = stats.copy() + combined_stats['rollout/return'] = np.mean(epoch_episode_rewards) + combined_stats['rollout/return_std'] = np.std(epoch_episode_rewards) + combined_stats['rollout/return_history'] = np.mean(episode_rewards_history) + combined_stats['rollout/return_history_std'] = np.std(episode_rewards_history) + combined_stats['rollout/episode_steps'] = np.mean(epoch_episode_steps) + combined_stats['rollout/actions_mean'] = np.mean(epoch_actions) + combined_stats['rollout/Q_mean'] = np.mean(epoch_qs) + combined_stats['train/loss_actor'] = np.mean(epoch_actor_losses) + combined_stats['train/loss_critic'] = np.mean(epoch_critic_losses) + combined_stats['train/param_noise_distance'] = np.mean(epoch_adaptive_distances) + combined_stats['total/duration'] = duration + combined_stats['total/steps_per_second'] = float(t) / float(duration) + combined_stats['total/episodes'] = episodes + combined_stats['rollout/episodes'] = epoch_episodes + combined_stats['rollout/actions_std'] = np.std(epoch_actions) + # Evaluation statistics. + if eval_env is not None: + combined_stats['eval/return'] = eval_episode_rewards + combined_stats['eval/return_history'] = np.mean(eval_episode_rewards_history) + combined_stats['eval/Q'] = eval_qs + combined_stats['eval/episodes'] = len(eval_episode_rewards) + def as_scalar(x): + if isinstance(x, np.ndarray): + assert x.size == 1 + return x[0] + elif np.isscalar(x): + return x + else: + raise ValueError('expected scalar, got %s'%x) + + combined_stats_sums = np.array([ np.array(x).flatten()[0] for x in combined_stats.values()]) + if MPI is not None: + combined_stats_sums = MPI.COMM_WORLD.allreduce(combined_stats_sums) + + combined_stats = {k : v / mpi_size for (k,v) in zip(combined_stats.keys(), combined_stats_sums)} + + # Total statistics. + combined_stats['total/epochs'] = epoch + 1 + combined_stats['total/steps'] = t + + for key in sorted(combined_stats.keys()): + logger.record_tabular(key, combined_stats[key]) + + if rank == 0: + logger.dump_tabular() + logger.info('') + logdir = logger.get_dir() + if rank == 0 and logdir: + if hasattr(env, 'get_state'): + with open(os.path.join(logdir, 'env_state.pkl'), 'wb') as f: + pickle.dump(env.get_state(), f) + if eval_env and hasattr(eval_env, 'get_state'): + with open(os.path.join(logdir, 'eval_env_state.pkl'), 'wb') as f: + pickle.dump(eval_env.get_state(), f) + + + return agent diff --git a/baselines/baselines/ddpg/ddpg_learner.py b/baselines/baselines/ddpg/ddpg_learner.py new file mode 100644 index 0000000000000000000000000000000000000000..44b2d5951b62dc25ce4143b3fa5dd5484c7fcd9b --- /dev/null +++ b/baselines/baselines/ddpg/ddpg_learner.py @@ -0,0 +1,356 @@ +from functools import reduce + +import numpy as np +import tensorflow as tf + +from baselines import logger +from baselines.ddpg.models import Actor, Critic +from baselines.common.mpi_running_mean_std import RunningMeanStd +try: + from mpi4py import MPI + from baselines.common.mpi_adam_optimizer import MpiAdamOptimizer + from baselines.common.mpi_util import sync_from_root +except ImportError: + MPI = None + +def normalize(x, stats): + if stats is None: + return x + return (x - stats.mean) / (stats.std + 1e-8) + + +def denormalize(x, stats): + if stats is None: + return x + return x * stats.std + stats.mean + +@tf.function +def reduce_std(x, axis=None, keepdims=False): + return tf.sqrt(reduce_var(x, axis=axis, keepdims=keepdims)) + +def reduce_var(x, axis=None, keepdims=False): + m = tf.reduce_mean(x, axis=axis, keepdims=True) + devs_squared = tf.square(x - m) + return tf.reduce_mean(devs_squared, axis=axis, keepdims=keepdims) + +@tf.function +def update_perturbed_actor(actor, perturbed_actor, param_noise_stddev): + + for var, perturbed_var in zip(actor.variables, perturbed_actor.variables): + if var in actor.perturbable_vars: + perturbed_var.assign(var + tf.random.normal(shape=tf.shape(var), mean=0., stddev=param_noise_stddev)) + else: + perturbed_var.assign(var) + + +class DDPG(tf.Module): + def __init__(self, actor, critic, memory, observation_shape, action_shape, param_noise=None, action_noise=None, + gamma=0.99, tau=0.001, normalize_returns=False, enable_popart=False, normalize_observations=True, + batch_size=128, observation_range=(-5., 5.), action_range=(-1., 1.), return_range=(-np.inf, np.inf), + critic_l2_reg=0., actor_lr=1e-4, critic_lr=1e-3, clip_norm=None, reward_scale=1.): + + # Parameters. + self.gamma = gamma + self.tau = tau + self.memory = memory + self.normalize_observations = normalize_observations + self.normalize_returns = normalize_returns + self.action_noise = action_noise + self.param_noise = param_noise + self.action_range = action_range + self.return_range = return_range + self.observation_range = observation_range + self.observation_shape = observation_shape + self.critic = critic + self.actor = actor + self.clip_norm = clip_norm + self.enable_popart = enable_popart + self.reward_scale = reward_scale + self.batch_size = batch_size + self.stats_sample = None + self.critic_l2_reg = critic_l2_reg + self.actor_lr = tf.constant(actor_lr) + self.critic_lr = tf.constant(critic_lr) + + # Observation normalization. + if self.normalize_observations: + with tf.name_scope('obs_rms'): + self.obs_rms = RunningMeanStd(shape=observation_shape) + else: + self.obs_rms = None + + # Return normalization. + if self.normalize_returns: + with tf.name_scope('ret_rms'): + self.ret_rms = RunningMeanStd() + else: + self.ret_rms = None + + # Create target networks. + self.target_critic = Critic(actor.nb_actions, observation_shape, name='target_critic', network=critic.network, **critic.network_kwargs) + self.target_actor = Actor(actor.nb_actions, observation_shape, name='target_actor', network=actor.network, **actor.network_kwargs) + + # Set up parts. + if self.param_noise is not None: + self.setup_param_noise() + + if MPI is not None: + comm = MPI.COMM_WORLD + self.actor_optimizer = MpiAdamOptimizer(comm, self.actor.trainable_variables) + self.critic_optimizer = MpiAdamOptimizer(comm, self.critic.trainable_variables) + else: + self.actor_optimizer = tf.keras.optimizers.Adam(learning_rate=actor_lr) + self.critic_optimizer = tf.keras.optimizers.Adam(learning_rate=critic_lr) + + logger.info('setting up actor optimizer') + actor_shapes = [var.get_shape().as_list() for var in self.actor.trainable_variables] + actor_nb_params = sum([reduce(lambda x, y: x * y, shape) for shape in actor_shapes]) + logger.info(' actor shapes: {}'.format(actor_shapes)) + logger.info(' actor params: {}'.format(actor_nb_params)) + logger.info('setting up critic optimizer') + critic_shapes = [var.get_shape().as_list() for var in self.critic.trainable_variables] + critic_nb_params = sum([reduce(lambda x, y: x * y, shape) for shape in critic_shapes]) + logger.info(' critic shapes: {}'.format(critic_shapes)) + logger.info(' critic params: {}'.format(critic_nb_params)) + if self.critic_l2_reg > 0.: + critic_reg_vars = [] + for layer in self.critic.network_builder.layers[1:]: + critic_reg_vars.append(layer.kernel) + for var in critic_reg_vars: + logger.info(' regularizing: {}'.format(var.name)) + logger.info(' applying l2 regularization with {}'.format(self.critic_l2_reg)) + + logger.info('setting up critic target updates ...') + for var, target_var in zip(self.critic.variables, self.target_critic.variables): + logger.info(' {} <- {}'.format(target_var.name, var.name)) + logger.info('setting up actor target updates ...') + for var, target_var in zip(self.actor.variables, self.target_actor.variables): + logger.info(' {} <- {}'.format(target_var.name, var.name)) + + if self.param_noise: + logger.info('setting up param noise') + for var, perturbed_var in zip(self.actor.variables, self.perturbed_actor.variables): + if var in actor.perturbable_vars: + logger.info(' {} <- {} + noise'.format(perturbed_var.name, var.name)) + else: + logger.info(' {} <- {}'.format(perturbed_var.name, var.name)) + for var, perturbed_var in zip(self.actor.variables, self.perturbed_adaptive_actor.variables): + if var in actor.perturbable_vars: + logger.info(' {} <- {} + noise'.format(perturbed_var.name, var.name)) + else: + logger.info(' {} <- {}'.format(perturbed_var.name, var.name)) + + if self.normalize_returns and self.enable_popart: + self.setup_popart() + + self.initial_state = None # recurrent architectures not supported yet + + + def setup_param_noise(self): + assert self.param_noise is not None + + # Configure perturbed actor. + self.perturbed_actor = Actor(self.actor.nb_actions, self.observation_shape, name='param_noise_actor', network=self.actor.network, **self.actor.network_kwargs) + + # Configure separate copy for stddev adoption. + self.perturbed_adaptive_actor = Actor(self.actor.nb_actions, self.observation_shape, name='adaptive_param_noise_actor', network=self.actor.network, **self.actor.network_kwargs) + + def setup_popart(self): + # See https://arxiv.org/pdf/1602.07714.pdf for details. + for vs in [self.critic.output_vars, self.target_critic.output_vars]: + assert len(vs) == 2 + M, b = vs + assert 'kernel' in M.name + assert 'bias' in b.name + assert M.get_shape()[-1] == 1 + assert b.get_shape()[-1] == 1 + + @tf.function + def step(self, obs, apply_noise=True, compute_Q=True): + normalized_obs = tf.clip_by_value(normalize(obs, self.obs_rms), self.observation_range[0], self.observation_range[1]) + actor_tf = self.actor(normalized_obs) + if self.param_noise is not None and apply_noise: + action = self.perturbed_actor(normalized_obs) + else: + action = actor_tf + + if compute_Q: + normalized_critic_with_actor_tf = self.critic(normalized_obs, actor_tf) + q = denormalize(tf.clip_by_value(normalized_critic_with_actor_tf, self.return_range[0], self.return_range[1]), self.ret_rms) + else: + q = None + + if self.action_noise is not None and apply_noise: + noise = self.action_noise() + action += noise + action = tf.clip_by_value(action, self.action_range[0], self.action_range[1]) + + return action, q, None, None + + def store_transition(self, obs0, action, reward, obs1, terminal1): + reward *= self.reward_scale + + B = obs0.shape[0] + for b in range(B): + self.memory.append(obs0[b], action[b], reward[b], obs1[b], terminal1[b]) + if self.normalize_observations: + self.obs_rms.update(np.array([obs0[b]])) + + def train(self): + batch = self.memory.sample(batch_size=self.batch_size) + obs0, obs1 = tf.constant(batch['obs0']), tf.constant(batch['obs1']) + actions, rewards, terminals1 = tf.constant(batch['actions']), tf.constant(batch['rewards']), tf.constant(batch['terminals1'], dtype=tf.float32) + normalized_obs0, target_Q = self.compute_normalized_obs0_and_target_Q(obs0, obs1, rewards, terminals1) + + if self.normalize_returns and self.enable_popart: + old_mean = self.ret_rms.mean + old_std = self.ret_rms.std + self.ret_rms.update(target_Q.flatten()) + # renormalize Q outputs + new_mean = self.ret_rms.mean + new_std = self.ret_rms.std + for vs in [self.critic.output_vars, self.target_critic.output_vars]: + kernel, bias = vs + kernel.assign(kernel * old_std / new_std) + bias.assign((bias * old_std + old_mean - new_mean) / new_std) + + + actor_grads, actor_loss = self.get_actor_grads(normalized_obs0) + critic_grads, critic_loss = self.get_critic_grads(normalized_obs0, actions, target_Q) + + if MPI is not None: + self.actor_optimizer.apply_gradients(actor_grads, self.actor_lr) + self.critic_optimizer.apply_gradients(critic_grads, self.critic_lr) + else: + self.actor_optimizer.apply_gradients(zip(actor_grads, self.actor.trainable_variables)) + self.critic_optimizer.apply_gradients(zip(critic_grads, self.critic.trainable_variables)) + + return critic_loss, actor_loss + + @tf.function + def compute_normalized_obs0_and_target_Q(self, obs0, obs1, rewards, terminals1): + normalized_obs0 = tf.clip_by_value(normalize(obs0, self.obs_rms), self.observation_range[0], self.observation_range[1]) + normalized_obs1 = tf.clip_by_value(normalize(obs1, self.obs_rms), self.observation_range[0], self.observation_range[1]) + Q_obs1 = denormalize(self.target_critic(normalized_obs1, self.target_actor(normalized_obs1)), self.ret_rms) + target_Q = rewards + (1. - terminals1) * self.gamma * Q_obs1 + return normalized_obs0, target_Q + + @tf.function + def get_actor_grads(self, normalized_obs0): + with tf.GradientTape() as tape: + actor_tf = self.actor(normalized_obs0) + normalized_critic_with_actor_tf = self.critic(normalized_obs0, actor_tf) + critic_with_actor_tf = denormalize(tf.clip_by_value(normalized_critic_with_actor_tf, self.return_range[0], self.return_range[1]), self.ret_rms) + actor_loss = -tf.reduce_mean(critic_with_actor_tf) + actor_grads = tape.gradient(actor_loss, self.actor.trainable_variables) + if self.clip_norm: + actor_grads = [tf.clip_by_norm(grad, clip_norm=self.clip_norm) for grad in actor_grads] + if MPI is not None: + actor_grads = tf.concat([tf.reshape(g, (-1,)) for g in actor_grads], axis=0) + return actor_grads, actor_loss + + @tf.function + def get_critic_grads(self, normalized_obs0, actions, target_Q): + with tf.GradientTape() as tape: + normalized_critic_tf = self.critic(normalized_obs0, actions) + normalized_critic_target_tf = tf.clip_by_value(normalize(target_Q, self.ret_rms), self.return_range[0], self.return_range[1]) + critic_loss = tf.reduce_mean(tf.square(normalized_critic_tf - normalized_critic_target_tf)) + # The first is input layer, which is ignored here. + if self.critic_l2_reg > 0.: + # Ignore the first input layer. + for layer in self.critic.network_builder.layers[1:]: + # The original l2_regularizer takes half of sum square. + critic_loss += (self.critic_l2_reg / 2.)* tf.reduce_sum(tf.square(layer.kernel)) + critic_grads = tape.gradient(critic_loss, self.critic.trainable_variables) + if self.clip_norm: + critic_grads = [tf.clip_by_norm(grad, clip_norm=self.clip_norm) for grad in critic_grads] + if MPI is not None: + critic_grads = tf.concat([tf.reshape(g, (-1,)) for g in critic_grads], axis=0) + return critic_grads, critic_loss + + + def initialize(self): + if MPI is not None: + sync_from_root(self.actor.trainable_variables + self.critic.trainable_variables) + self.target_actor.set_weights(self.actor.get_weights()) + self.target_critic.set_weights(self.critic.get_weights()) + + @tf.function + def update_target_net(self): + for var, target_var in zip(self.actor.variables, self.target_actor.variables): + target_var.assign((1. - self.tau) * target_var + self.tau * var) + for var, target_var in zip(self.critic.variables, self.target_critic.variables): + target_var.assign((1. - self.tau) * target_var + self.tau * var) + + def get_stats(self): + + if self.stats_sample is None: + # Get a sample and keep that fixed for all further computations. + # This allows us to estimate the change in value for the same set of inputs. + self.stats_sample = self.memory.sample(batch_size=self.batch_size) + obs0 = self.stats_sample['obs0'] + actions = self.stats_sample['actions'] + normalized_obs0 = tf.clip_by_value(normalize(obs0, self.obs_rms), self.observation_range[0], self.observation_range[1]) + normalized_critic_tf = self.critic(normalized_obs0, actions) + critic_tf = denormalize(tf.clip_by_value(normalized_critic_tf, self.return_range[0], self.return_range[1]), self.ret_rms) + actor_tf = self.actor(normalized_obs0) + normalized_critic_with_actor_tf = self.critic(normalized_obs0, actor_tf) + critic_with_actor_tf = denormalize(tf.clip_by_value(normalized_critic_with_actor_tf, self.return_range[0], self.return_range[1]), self.ret_rms) + + stats = {} + if self.normalize_returns: + stats['ret_rms_mean'] = self.ret_rms.mean + stats['ret_rms_std'] = self.ret_rms.std + if self.normalize_observations: + stats['obs_rms_mean'] = tf.reduce_mean(self.obs_rms.mean) + stats['obs_rms_std'] = tf.reduce_mean(self.obs_rms.std) + stats['reference_Q_mean'] = tf.reduce_mean(critic_tf) + stats['reference_Q_std'] = reduce_std(critic_tf) + stats['reference_actor_Q_mean'] = tf.reduce_mean(critic_with_actor_tf) + stats['reference_actor_Q_std'] = reduce_std(critic_with_actor_tf) + stats['reference_action_mean'] = tf.reduce_mean(actor_tf) + stats['reference_action_std'] = reduce_std(actor_tf) + + if self.param_noise: + perturbed_actor_tf = self.perturbed_actor(normalized_obs0) + stats['reference_perturbed_action_mean'] = tf.reduce_mean(perturbed_actor_tf) + stats['reference_perturbed_action_std'] = reduce_std(perturbed_actor_tf) + stats.update(self.param_noise.get_stats()) + return stats + + + + def adapt_param_noise(self, obs0): + try: + from mpi4py import MPI + except ImportError: + MPI = None + + if self.param_noise is None: + return 0. + + mean_distance = self.get_mean_distance(obs0).numpy() + + if MPI is not None: + mean_distance = MPI.COMM_WORLD.allreduce(mean_distance, op=MPI.SUM) / MPI.COMM_WORLD.Get_size() + + self.param_noise.adapt(mean_distance) + return mean_distance + + @tf.function + def get_mean_distance(self, obs0): + # Perturb a separate copy of the policy to adjust the scale for the next "real" perturbation. + update_perturbed_actor(self.actor, self.perturbed_adaptive_actor, self.param_noise.current_stddev) + + normalized_obs0 = tf.clip_by_value(normalize(obs0, self.obs_rms), self.observation_range[0], self.observation_range[1]) + actor_tf = self.actor(normalized_obs0) + adaptive_actor_tf = self.perturbed_adaptive_actor(normalized_obs0) + mean_distance = tf.sqrt(tf.reduce_mean(tf.square(actor_tf - adaptive_actor_tf))) + return mean_distance + + def reset(self): + # Reset internal state after an episode is complete. + if self.action_noise is not None: + self.action_noise.reset() + if self.param_noise is not None: + update_perturbed_actor(self.actor, self.perturbed_actor, self.param_noise.current_stddev) diff --git a/baselines/baselines/ddpg/memory.py b/baselines/baselines/ddpg/memory.py new file mode 100644 index 0000000000000000000000000000000000000000..715f4c08f0faccf7c4f7287c554a0ca715cca286 --- /dev/null +++ b/baselines/baselines/ddpg/memory.py @@ -0,0 +1,83 @@ +import numpy as np + + +class RingBuffer(object): + def __init__(self, maxlen, shape, dtype='float32'): + self.maxlen = maxlen + self.start = 0 + self.length = 0 + self.data = np.zeros((maxlen,) + shape).astype(dtype) + + def __len__(self): + return self.length + + def __getitem__(self, idx): + if idx < 0 or idx >= self.length: + raise KeyError() + return self.data[(self.start + idx) % self.maxlen] + + def get_batch(self, idxs): + return self.data[(self.start + idxs) % self.maxlen] + + def append(self, v): + if self.length < self.maxlen: + # We have space, simply increase the length. + self.length += 1 + elif self.length == self.maxlen: + # No space, "remove" the first item. + self.start = (self.start + 1) % self.maxlen + else: + # This should never happen. + raise RuntimeError() + self.data[(self.start + self.length - 1) % self.maxlen] = v + + +def array_min2d(x): + x = np.array(x) + if x.ndim >= 2: + return x + return x.reshape(-1, 1) + + +class Memory(object): + def __init__(self, limit, action_shape, observation_shape): + self.limit = limit + + self.observations0 = RingBuffer(limit, shape=observation_shape) + self.actions = RingBuffer(limit, shape=action_shape) + self.rewards = RingBuffer(limit, shape=(1,)) + self.terminals1 = RingBuffer(limit, shape=(1,)) + self.observations1 = RingBuffer(limit, shape=observation_shape) + + def sample(self, batch_size): + # Draw such that we always have a proceeding element. + batch_idxs = np.random.randint(self.nb_entries - 2, size=batch_size) + + obs0_batch = self.observations0.get_batch(batch_idxs) + obs1_batch = self.observations1.get_batch(batch_idxs) + action_batch = self.actions.get_batch(batch_idxs) + reward_batch = self.rewards.get_batch(batch_idxs) + terminal1_batch = self.terminals1.get_batch(batch_idxs) + + result = { + 'obs0': array_min2d(obs0_batch), + 'obs1': array_min2d(obs1_batch), + 'rewards': array_min2d(reward_batch), + 'actions': array_min2d(action_batch), + 'terminals1': array_min2d(terminal1_batch), + } + return result + + def append(self, obs0, action, reward, obs1, terminal1, training=True): + if not training: + return + + self.observations0.append(obs0) + self.actions.append(action) + self.rewards.append(reward) + self.observations1.append(obs1) + self.terminals1.append(terminal1) + + @property + def nb_entries(self): + return len(self.observations0) diff --git a/baselines/baselines/ddpg/models.py b/baselines/baselines/ddpg/models.py new file mode 100644 index 0000000000000000000000000000000000000000..175f9b862db341bd9f1b2c92b131da4f9df3383d --- /dev/null +++ b/baselines/baselines/ddpg/models.py @@ -0,0 +1,49 @@ +import tensorflow as tf +from baselines.common.models import get_network_builder + + +class Model(tf.keras.Model): + def __init__(self, name, network='mlp', **network_kwargs): + super(Model, self).__init__(name=name) + self.network = network + self.network_kwargs = network_kwargs + + @property + def perturbable_vars(self): + return [var for var in self.trainable_variables if 'layer_normalization' not in var.name] + + +class Actor(Model): + def __init__(self, nb_actions, ob_shape, name='actor', network='mlp', **network_kwargs): + super().__init__(name=name, network=network, **network_kwargs) + self.nb_actions = nb_actions + self.network_builder = get_network_builder(network)(**network_kwargs)(ob_shape) + self.output_layer = tf.keras.layers.Dense(units=self.nb_actions, + activation=tf.keras.activations.tanh, + kernel_initializer=tf.random_uniform_initializer(minval=-3e-3, maxval=3e-3)) + _ = self.output_layer(self.network_builder.outputs[0]) + + @tf.function + def call(self, obs): + return self.output_layer(self.network_builder(obs)) + + +class Critic(Model): + def __init__(self, nb_actions, ob_shape, name='critic', network='mlp', **network_kwargs): + super().__init__(name=name, network=network, **network_kwargs) + self.layer_norm = True + self.network_builder = get_network_builder(network)(**network_kwargs)((ob_shape[0] + nb_actions,)) + self.output_layer = tf.keras.layers.Dense(units=1, + kernel_initializer=tf.random_uniform_initializer(minval=-3e-3, maxval=3e-3), + name='output') + _ = self.output_layer(self.network_builder.outputs[0]) + + @tf.function + def call(self, obs, actions): + x = tf.concat([obs, actions], axis=-1) # this assumes observation and action can be concatenated + x = self.network_builder(x) + return self.output_layer(x) + + @property + def output_vars(self): + return self.output_layer.trainable_variables diff --git a/baselines/baselines/ddpg/noise.py b/baselines/baselines/ddpg/noise.py new file mode 100644 index 0000000000000000000000000000000000000000..c48d0d6a2288677e05950623f5c93d1e87c2071a --- /dev/null +++ b/baselines/baselines/ddpg/noise.py @@ -0,0 +1,67 @@ +import numpy as np + + +class AdaptiveParamNoiseSpec(object): + def __init__(self, initial_stddev=0.1, desired_action_stddev=0.1, adoption_coefficient=1.01): + self.initial_stddev = initial_stddev + self.desired_action_stddev = desired_action_stddev + self.adoption_coefficient = adoption_coefficient + + self.current_stddev = initial_stddev + + def adapt(self, distance): + if distance > self.desired_action_stddev: + # Decrease stddev. + self.current_stddev /= self.adoption_coefficient + else: + # Increase stddev. + self.current_stddev *= self.adoption_coefficient + + def get_stats(self): + stats = { + 'param_noise_stddev': self.current_stddev, + } + return stats + + def __repr__(self): + fmt = 'AdaptiveParamNoiseSpec(initial_stddev={}, desired_action_stddev={}, adoption_coefficient={})' + return fmt.format(self.initial_stddev, self.desired_action_stddev, self.adoption_coefficient) + + +class ActionNoise(object): + def reset(self): + pass + + +class NormalActionNoise(ActionNoise): + def __init__(self, mu, sigma): + self.mu = mu + self.sigma = sigma + + def __call__(self): + return np.random.normal(self.mu, self.sigma) + + def __repr__(self): + return 'NormalActionNoise(mu={}, sigma={})'.format(self.mu, self.sigma) + + +# Based on http://math.stackexchange.com/questions/1287634/implementing-ornstein-uhlenbeck-in-matlab +class OrnsteinUhlenbeckActionNoise(ActionNoise): + def __init__(self, mu, sigma, theta=.15, dt=1e-2, x0=None): + self.theta = theta + self.mu = mu + self.sigma = sigma + self.dt = dt + self.x0 = x0 + self.reset() + + def __call__(self): + x = self.x_prev + self.theta * (self.mu - self.x_prev) * self.dt + self.sigma * np.sqrt(self.dt) * np.random.normal(size=self.mu.shape) + self.x_prev = x + return x + + def reset(self): + self.x_prev = self.x0 if self.x0 is not None else np.zeros_like(self.mu) + + def __repr__(self): + return 'OrnsteinUhlenbeckActionNoise(mu={}, sigma={})'.format(self.mu, self.sigma) diff --git a/baselines/baselines/deepq/README.md b/baselines/baselines/deepq/README.md new file mode 100644 index 0000000000000000000000000000000000000000..51fcbefb723a7e51a4b518550cb2795d74f5fa45 --- /dev/null +++ b/baselines/baselines/deepq/README.md @@ -0,0 +1,37 @@ +## If you are curious. + +##### Train a Cartpole agent and watch it play once it converges! + +Here's a list of commands to run to quickly get a working example: + +<img src="../../data/cartpole.gif" width="25%" /> + + +```bash +# Train model and save the results to cartpole_model.pkl +python -m baselines.run --alg=deepq --env=CartPole-v0 --save_path=./cartpole_model.pkl --num_timesteps=1e5 +# Load the model saved in cartpole_model.pkl and visualize the learned policy +python -m baselines.run --alg=deepq --env=CartPole-v0 --load_path=./cartpole_model.pkl --num_timesteps=0 --play +``` + +## If you wish to apply DQN to solve a problem. + +Check out our simple agent trained with one stop shop `deepq.learn` function. + +- [baselines/deepq/experiments/train_cartpole.py](experiments/train_cartpole.py) - train a Cartpole agent. + +In particular notice that once `deepq.learn` finishes training it returns `act` function which can be used to select actions in the environment. Once trained you can easily save it and load at later time. Complimentary file `enjoy_cartpole.py` loads and visualizes the learned policy. + +## If you wish to experiment with the algorithm + +##### Check out the examples + +- [baselines/deepq/experiments/custom_cartpole.py](experiments/custom_cartpole.py) - Cartpole training with more fine grained control over the internals of DQN algorithm. +- [baselines/deepq/defaults.py](defaults.py) - settings for training on atari. Run + +```bash +python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 +``` +to train on Atari Pong (see more in repo-wide [README.md](../../README.md#training-models)) + + diff --git a/baselines/baselines/deepq/__init__.py b/baselines/baselines/deepq/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..79140c2bc02ea20d5ba81e72d366f70b0a8e4aff --- /dev/null +++ b/baselines/baselines/deepq/__init__.py @@ -0,0 +1,8 @@ +from baselines.deepq import models # noqa F401 +from baselines.deepq.deepq_learner import DEEPQ # noqa F401 +from baselines.deepq.deepq import learn # noqa F401 +from baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer # noqa F401 + +def wrap_atari_dqn(env): + from baselines.common.atari_wrappers import wrap_deepmind + return wrap_deepmind(env, frame_stack=True, scale=False) diff --git a/baselines/baselines/deepq/deepq.py b/baselines/baselines/deepq/deepq.py new file mode 100644 index 0000000000000000000000000000000000000000..0b537ba778f004988ab14670f7414dac3ec0e472 --- /dev/null +++ b/baselines/baselines/deepq/deepq.py @@ -0,0 +1,234 @@ +import os.path as osp + +import tensorflow as tf +import numpy as np + +from baselines import logger +from baselines.common.schedules import LinearSchedule +from baselines.common.vec_env.vec_env import VecEnv +from baselines.common import set_global_seeds + +from baselines import deepq +from baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer + +from baselines.deepq.models import build_q_func + + + +def learn(env, + network, + seed=None, + lr=5e-4, + total_timesteps=100000, + buffer_size=50000, + exploration_fraction=0.1, + exploration_final_eps=0.02, + train_freq=1, + batch_size=32, + print_freq=100, + checkpoint_freq=10000, + checkpoint_path=None, + learning_starts=1000, + gamma=1.0, + target_network_update_freq=500, + prioritized_replay=False, + prioritized_replay_alpha=0.6, + prioritized_replay_beta0=0.4, + prioritized_replay_beta_iters=None, + prioritized_replay_eps=1e-6, + param_noise=False, + callback=None, + load_path=None, + **network_kwargs + ): + """Train a deepq model. + + Parameters + ------- + env: gym.Env + environment to train on + network: string or a function + neural network to use as a q function approximator. If string, has to be one of the names of registered models in baselines.common.models + (mlp, cnn, conv_only). If a function, should take an observation tensor and return a latent variable tensor, which + will be mapped to the Q function heads (see build_q_func in baselines.deepq.models for details on that) + seed: int or None + prng seed. The runs with the same seed "should" give the same results. If None, no seeding is used. + lr: float + learning rate for adam optimizer + total_timesteps: int + number of env steps to optimizer for + buffer_size: int + size of the replay buffer + exploration_fraction: float + fraction of entire training period over which the exploration rate is annealed + exploration_final_eps: float + final value of random action probability + train_freq: int + update the model every `train_freq` steps. + set to None to disable printing + batch_size: int + size of a batched sampled from replay buffer for training + print_freq: int + how often to print out training progress + set to None to disable printing + checkpoint_freq: int + how often to save the model. This is so that the best version is restored + at the end of the training. If you do not wish to restore the best version at + the end of the training set this variable to None. + learning_starts: int + how many steps of the model to collect transitions for before learning starts + gamma: float + discount factor + target_network_update_freq: int + update the target network every `target_network_update_freq` steps. + prioritized_replay: True + if True prioritized replay buffer will be used. + prioritized_replay_alpha: float + alpha parameter for prioritized replay buffer + prioritized_replay_beta0: float + initial value of beta for prioritized replay buffer + prioritized_replay_beta_iters: int + number of iterations over which beta will be annealed from initial value + to 1.0. If set to None equals to total_timesteps. + prioritized_replay_eps: float + epsilon to add to the TD errors when updating priorities. + param_noise: bool + whether or not to use parameter space noise (https://arxiv.org/abs/1706.01905) + callback: (locals, globals) -> None + function called at every steps with state of the algorithm. + If callback returns true training stops. + load_path: str + path to load the model from. (default: None) + **network_kwargs + additional keyword arguments to pass to the network builder. + + Returns + ------- + act: ActWrapper + Wrapper over act function. Adds ability to save it and load it. + See header of baselines/deepq/categorical.py for details on the act function. + """ + # Create all the functions necessary to train the model + + set_global_seeds(seed) + + q_func = build_q_func(network, **network_kwargs) + + # capture the shape outside the closure so that the env object is not serialized + # by cloudpickle when serializing make_obs_ph + + observation_space = env.observation_space + + model = deepq.DEEPQ( + q_func=q_func, + observation_shape=env.observation_space.shape, + num_actions=env.action_space.n, + lr=lr, + grad_norm_clipping=10, + gamma=gamma, + param_noise=param_noise + ) + + if load_path is not None: + load_path = osp.expanduser(load_path) + ckpt = tf.train.Checkpoint(model=model) + manager = tf.train.CheckpointManager(ckpt, load_path, max_to_keep=None) + ckpt.restore(manager.latest_checkpoint) + print("Restoring from {}".format(manager.latest_checkpoint)) + + # Create the replay buffer + if prioritized_replay: + replay_buffer = PrioritizedReplayBuffer(buffer_size, alpha=prioritized_replay_alpha) + if prioritized_replay_beta_iters is None: + prioritized_replay_beta_iters = total_timesteps + beta_schedule = LinearSchedule(prioritized_replay_beta_iters, + initial_p=prioritized_replay_beta0, + final_p=1.0) + else: + replay_buffer = ReplayBuffer(buffer_size) + beta_schedule = None + # Create the schedule for exploration starting from 1. + exploration = LinearSchedule(schedule_timesteps=int(exploration_fraction * total_timesteps), + initial_p=1.0, + final_p=exploration_final_eps) + + model.update_target() + + episode_rewards = [0.0] + saved_mean_reward = None + obs = env.reset() + # always mimic the vectorized env + if not isinstance(env, VecEnv): + obs = np.expand_dims(np.array(obs), axis=0) + reset = True + + for t in range(total_timesteps): + if callback is not None: + if callback(locals(), globals()): + break + kwargs = {} + if not param_noise: + update_eps = tf.constant(exploration.value(t)) + update_param_noise_threshold = 0. + else: + update_eps = tf.constant(0.) + # Compute the threshold such that the KL divergence between perturbed and non-perturbed + # policy is comparable to eps-greedy exploration with eps = exploration.value(t). + # See Appendix C.1 in Parameter Space Noise for Exploration, Plappert et al., 2017 + # for detailed explanation. + update_param_noise_threshold = -np.log(1. - exploration.value(t) + exploration.value(t) / float(env.action_space.n)) + kwargs['reset'] = reset + kwargs['update_param_noise_threshold'] = update_param_noise_threshold + kwargs['update_param_noise_scale'] = True + action, _, _, _ = model.step(tf.constant(obs), update_eps=update_eps, **kwargs) + action = action[0].numpy() + reset = False + new_obs, rew, done, _ = env.step(action) + # Store transition in the replay buffer. + if not isinstance(env, VecEnv): + new_obs = np.expand_dims(np.array(new_obs), axis=0) + replay_buffer.add(obs[0], action, rew, new_obs[0], float(done)) + else: + replay_buffer.add(obs[0], action, rew[0], new_obs[0], float(done[0])) + # # Store transition in the replay buffer. + # replay_buffer.add(obs, action, rew, new_obs, float(done)) + obs = new_obs + + episode_rewards[-1] += rew + if done: + obs = env.reset() + if not isinstance(env, VecEnv): + obs = np.expand_dims(np.array(obs), axis=0) + episode_rewards.append(0.0) + reset = True + + if t > learning_starts and t % train_freq == 0: + # Minimize the error in Bellman's equation on a batch sampled from replay buffer. + if prioritized_replay: + experience = replay_buffer.sample(batch_size, beta=beta_schedule.value(t)) + (obses_t, actions, rewards, obses_tp1, dones, weights, batch_idxes) = experience + else: + obses_t, actions, rewards, obses_tp1, dones = replay_buffer.sample(batch_size) + weights, batch_idxes = np.ones_like(rewards), None + obses_t, obses_tp1 = tf.constant(obses_t), tf.constant(obses_tp1) + actions, rewards, dones = tf.constant(actions), tf.constant(rewards), tf.constant(dones) + weights = tf.constant(weights) + td_errors = model.train(obses_t, actions, rewards, obses_tp1, dones, weights) + if prioritized_replay: + new_priorities = np.abs(td_errors) + prioritized_replay_eps + replay_buffer.update_priorities(batch_idxes, new_priorities) + + if t > learning_starts and t % target_network_update_freq == 0: + # Update target network periodically. + model.update_target() + + mean_100ep_reward = round(np.mean(episode_rewards[-101:-1]), 1) + num_episodes = len(episode_rewards) + if done and print_freq is not None and len(episode_rewards) % print_freq == 0: + logger.record_tabular("steps", t) + logger.record_tabular("episodes", num_episodes) + logger.record_tabular("mean 100 episode reward", mean_100ep_reward) + logger.record_tabular("% time spent exploring", int(100 * exploration.value(t))) + logger.dump_tabular() + + return model diff --git a/baselines/baselines/deepq/deepq_learner.py b/baselines/baselines/deepq/deepq_learner.py new file mode 100644 index 0000000000000000000000000000000000000000..3b314a6293583606297b0cc46c6bc0169acec3bb --- /dev/null +++ b/baselines/baselines/deepq/deepq_learner.py @@ -0,0 +1,191 @@ +"""Deep Q model + +The functions in this model: + +======= step ======== + + Function to chose an action given an observation + + Parameters + ---------- + observation: tensor + Observation that can be feed into the output of make_obs_ph + stochastic: bool + if set to False all the actions are always deterministic (default False) + update_eps: float + update epsilon a new value, if negative not update happens + (default: no update) + + Returns + ------- + Tensor of dtype tf.int64 and shape (BATCH_SIZE,) with an action to be performed for + every element of the batch. + + +(NOT IMPLEMENTED YET) +======= step (in case of parameter noise) ======== + + Function to chose an action given an observation + + Parameters + ---------- + observation: object + Observation that can be feed into the output of make_obs_ph + stochastic: bool + if set to False all the actions are always deterministic (default False) + update_eps: float + update epsilon to a new value, if negative no update happens + (default: no update) + reset: bool + reset the perturbed policy by sampling a new perturbation + update_param_noise_threshold: float + the desired threshold for the difference between non-perturbed and perturbed policy + update_param_noise_scale: bool + whether or not to update the scale of the noise for the next time it is re-perturbed + + Returns + ------- + Tensor of dtype tf.int64 and shape (BATCH_SIZE,) with an action to be performed for + every element of the batch. + + +======= train ======= + + Function that takes a transition (s,a,r,s',d) and optimizes Bellman equation's error: + + td_error = Q(s,a) - (r + gamma * (1-d) * max_a' Q(s', a')) + loss = huber_loss[td_error] + + Parameters + ---------- + obs_t: object + a batch of observations + action: np.array + actions that were selected upon seeing obs_t. + dtype must be int32 and shape must be (batch_size,) + reward: np.array + immediate reward attained after executing those actions + dtype must be float32 and shape must be (batch_size,) + obs_tp1: object + observations that followed obs_t + done: np.array + 1 if obs_t was the last observation in the episode and 0 otherwise + obs_tp1 gets ignored, but must be of the valid shape. + dtype must be float32 and shape must be (batch_size,) + weight: np.array + imporance weights for every element of the batch (gradient is multiplied + by the importance weight) dtype must be float32 and shape must be (batch_size,) + + Returns + ------- + td_error: np.array + a list of differences between Q(s,a) and the target in Bellman's equation. + dtype is float32 and shape is (batch_size,) + +======= update_target ======== + + copy the parameters from optimized Q function to the target Q function. + In Q learning we actually optimize the following error: + + Q(s,a) - (r + gamma * max_a' Q'(s', a')) + + Where Q' is lagging behind Q to stablize the learning. For example for Atari + + Q' is set to Q once every 10000 updates training steps. + +""" +import tensorflow as tf + +@tf.function +def huber_loss(x, delta=1.0): + """Reference: https://en.wikipedia.org/wiki/Huber_loss""" + return tf.where( + tf.abs(x) < delta, + tf.square(x) * 0.5, + delta * (tf.abs(x) - 0.5 * delta) + ) + +class DEEPQ(tf.Module): + + def __init__(self, q_func, observation_shape, num_actions, lr, grad_norm_clipping=None, gamma=1.0, + double_q=True, param_noise=False, param_noise_filter_func=None): + + self.num_actions = num_actions + self.gamma = gamma + self.double_q = double_q + self.param_noise = param_noise + self.param_noise_filter_func = param_noise_filter_func + self.grad_norm_clipping = grad_norm_clipping + + self.optimizer = tf.keras.optimizers.Adam(lr) + + with tf.name_scope('q_network'): + self.q_network = q_func(observation_shape, num_actions) + with tf.name_scope('target_q_network'): + self.target_q_network = q_func(observation_shape, num_actions) + self.eps = tf.Variable(0., name="eps") + + @tf.function + def step(self, obs, stochastic=True, update_eps=-1): + if self.param_noise: + raise ValueError('not supporting noise yet') + else: + q_values = self.q_network(obs) + deterministic_actions = tf.argmax(q_values, axis=1) + batch_size = tf.shape(obs)[0] + random_actions = tf.random.uniform(tf.stack([batch_size]), minval=0, maxval=self.num_actions, dtype=tf.int64) + chose_random = tf.random.uniform(tf.stack([batch_size]), minval=0, maxval=1, dtype=tf.float32) < self.eps + stochastic_actions = tf.where(chose_random, random_actions, deterministic_actions) + + if stochastic: + output_actions = stochastic_actions + else: + output_actions = deterministic_actions + + if update_eps >= 0: + self.eps.assign(update_eps) + + return output_actions, None, None, None + + @tf.function() + def train(self, obs0, actions, rewards, obs1, dones, importance_weights): + with tf.GradientTape() as tape: + q_t = self.q_network(obs0) + q_t_selected = tf.reduce_sum(q_t * tf.one_hot(actions, self.num_actions, dtype=tf.float32), 1) + + q_tp1 = self.target_q_network(obs1) + + if self.double_q: + q_tp1_using_online_net = self.q_network(obs1) + q_tp1_best_using_online_net = tf.argmax(q_tp1_using_online_net, 1) + q_tp1_best = tf.reduce_sum(q_tp1 * tf.one_hot(q_tp1_best_using_online_net, self.num_actions, dtype=tf.float32), 1) + else: + q_tp1_best = tf.reduce_max(q_tp1, 1) + + dones = tf.cast(dones, q_tp1_best.dtype) + q_tp1_best_masked = (1.0 - dones) * q_tp1_best + + q_t_selected_target = rewards + self.gamma * q_tp1_best_masked + + td_error = q_t_selected - tf.stop_gradient(q_t_selected_target) + errors = huber_loss(td_error) + weighted_error = tf.reduce_mean(importance_weights * errors) + + grads = tape.gradient(weighted_error, self.q_network.trainable_variables) + if self.grad_norm_clipping: + clipped_grads = [] + for grad in grads: + clipped_grads.append(tf.clip_by_norm(grad, self.grad_norm_clipping)) + clipped_grads = grads + grads_and_vars = zip(grads, self.q_network.trainable_variables) + self.optimizer.apply_gradients(grads_and_vars) + + return td_error + + @tf.function(autograph=False) + def update_target(self): + q_vars = self.q_network.trainable_variables + target_q_vars = self.target_q_network.trainable_variables + for var, var_target in zip(q_vars, target_q_vars): + var_target.assign(var) + diff --git a/baselines/baselines/deepq/defaults.py b/baselines/baselines/deepq/defaults.py new file mode 100644 index 0000000000000000000000000000000000000000..d41fb180e8590ca5f72432c8f2ffac63ae99bfd9 --- /dev/null +++ b/baselines/baselines/deepq/defaults.py @@ -0,0 +1,21 @@ +def atari(): + return dict( + network='conv_only', + lr=1e-4, + buffer_size=10000, + exploration_fraction=0.1, + exploration_final_eps=0.01, + train_freq=4, + learning_starts=10000, + target_network_update_freq=1000, + gamma=0.99, + prioritized_replay=True, + prioritized_replay_alpha=0.6, + checkpoint_freq=10000, + checkpoint_path=None, + dueling=True + ) + +def retro(): + return atari() + diff --git a/baselines/baselines/deepq/models.py b/baselines/baselines/deepq/models.py new file mode 100644 index 0000000000000000000000000000000000000000..70822a2ddb2fac3f19bf586bf46d4e2438a03307 --- /dev/null +++ b/baselines/baselines/deepq/models.py @@ -0,0 +1,47 @@ +import tensorflow as tf + + +def build_q_func(network, hiddens=[256], dueling=True, layer_norm=False, **network_kwargs): + if isinstance(network, str): + from baselines.common.models import get_network_builder + network = get_network_builder(network)(**network_kwargs) + + def q_func_builder(input_shape, num_actions): + # the sub Functional model which does not include the top layer. + model = network(input_shape) + + # wrapping the sub Functional model with layers that compute action scores into another Functional model. + latent = model.outputs + if len(latent) > 1: + if latent[1] is not None: + raise NotImplementedError("DQN is not compatible with recurrent policies yet") + latent = latent[0] + + latent = tf.keras.layers.Flatten()(latent) + + with tf.name_scope("action_value"): + action_out = latent + for hidden in hiddens: + action_out = tf.keras.layers.Dense(units=hidden, activation=None)(action_out) + if layer_norm: + action_out = tf.keras.layers.LayerNormalization(center=True, scale=True)(action_out) + action_out = tf.nn.relu(action_out) + action_scores = tf.keras.layers.Dense(units=num_actions, activation=None)(action_out) + + if dueling: + with tf.name_scope("state_value"): + state_out = latent + for hidden in hiddens: + state_out = tf.keras.layers.Dense(units=hidden, activation=None)(state_out) + if layer_norm: + state_out = tf.keras.layers.LayerNormalization(center=True, scale=True)(state_out) + state_out = tf.nn.relu(state_out) + state_score = tf.keras.layers.Dense(units=1, activation=None)(state_out) + action_scores_mean = tf.reduce_mean(action_scores, 1) + action_scores_centered = action_scores - tf.expand_dims(action_scores_mean, 1) + q_out = state_score + action_scores_centered + else: + q_out = action_scores + return tf.keras.Model(inputs=model.inputs, outputs=[q_out]) + + return q_func_builder diff --git a/baselines/baselines/deepq/replay_buffer.py b/baselines/baselines/deepq/replay_buffer.py new file mode 100644 index 0000000000000000000000000000000000000000..f848d751d5f896583a0f4a7f2452480672c5199d --- /dev/null +++ b/baselines/baselines/deepq/replay_buffer.py @@ -0,0 +1,194 @@ +import numpy as np +import random + +from baselines.common.segment_tree import SumSegmentTree, MinSegmentTree + + +class ReplayBuffer(object): + def __init__(self, size): + """Create Replay buffer. + + Parameters + ---------- + size: int + Max number of transitions to store in the buffer. When the buffer + overflows the old memories are dropped. + """ + self._storage = [] + self._maxsize = size + self._next_idx = 0 + + def __len__(self): + return len(self._storage) + + def add(self, obs_t, action, reward, obs_tp1, done): + data = (obs_t, action, reward, obs_tp1, done) + + if self._next_idx >= len(self._storage): + self._storage.append(data) + else: + self._storage[self._next_idx] = data + self._next_idx = (self._next_idx + 1) % self._maxsize + + def _encode_sample(self, idxes): + obses_t, actions, rewards, obses_tp1, dones = [], [], [], [], [] + data = self._storage[0] + ob_dtype = data[0].dtype + ac_dtype = data[1].dtype + for i in idxes: + data = self._storage[i] + obs_t, action, reward, obs_tp1, done = data + obses_t.append(np.array(obs_t, copy=False)) + actions.append(np.array(action, copy=False)) + rewards.append(reward) + obses_tp1.append(np.array(obs_tp1, copy=False)) + dones.append(done) + return np.array(obses_t, dtype=ob_dtype), np.array(actions, dtype=ac_dtype), np.array(rewards, dtype=np.float32), np.array(obses_tp1, dtype=ob_dtype), np.array(dones, dtype=np.float32) + + def sample(self, batch_size): + """Sample a batch of experiences. + + Parameters + ---------- + batch_size: int + How many transitions to sample. + + Returns + ------- + obs_batch: np.array + batch of observations + act_batch: np.array + batch of actions executed given obs_batch + rew_batch: np.array + rewards received as results of executing act_batch + next_obs_batch: np.array + next set of observations seen after executing act_batch + done_mask: np.array + done_mask[i] = 1 if executing act_batch[i] resulted in + the end of an episode and 0 otherwise. + """ + idxes = [random.randint(0, len(self._storage) - 1) for _ in range(batch_size)] + return self._encode_sample(idxes) + + +class PrioritizedReplayBuffer(ReplayBuffer): + def __init__(self, size, alpha): + """Create Prioritized Replay buffer. + + Parameters + ---------- + size: int + Max number of transitions to store in the buffer. When the buffer + overflows the old memories are dropped. + alpha: float + how much prioritization is used + (0 - no prioritization, 1 - full prioritization) + + See Also + -------- + ReplayBuffer.__init__ + """ + super(PrioritizedReplayBuffer, self).__init__(size) + assert alpha >= 0 + self._alpha = alpha + + it_capacity = 1 + while it_capacity < size: + it_capacity *= 2 + + self._it_sum = SumSegmentTree(it_capacity) + self._it_min = MinSegmentTree(it_capacity) + self._max_priority = 1.0 + + def add(self, *args, **kwargs): + """See ReplayBuffer.store_effect""" + idx = self._next_idx + super().add(*args, **kwargs) + self._it_sum[idx] = self._max_priority ** self._alpha + self._it_min[idx] = self._max_priority ** self._alpha + + def _sample_proportional(self, batch_size): + res = [] + p_total = self._it_sum.sum(0, len(self._storage) - 1) + every_range_len = p_total / batch_size + for i in range(batch_size): + mass = random.random() * every_range_len + i * every_range_len + idx = self._it_sum.find_prefixsum_idx(mass) + res.append(idx) + return res + + def sample(self, batch_size, beta): + """Sample a batch of experiences. + + compared to ReplayBuffer.sample + it also returns importance weights and idxes + of sampled experiences. + + + Parameters + ---------- + batch_size: int + How many transitions to sample. + beta: float + To what degree to use importance weights + (0 - no corrections, 1 - full correction) + + Returns + ------- + obs_batch: np.array + batch of observations + act_batch: np.array + batch of actions executed given obs_batch + rew_batch: np.array + rewards received as results of executing act_batch + next_obs_batch: np.array + next set of observations seen after executing act_batch + done_mask: np.array + done_mask[i] = 1 if executing act_batch[i] resulted in + the end of an episode and 0 otherwise. + weights: np.array + Array of shape (batch_size,) and dtype np.float32 + denoting importance weight of each sampled transition + idxes: np.array + Array of shape (batch_size,) and dtype np.int32 + idexes in buffer of sampled experiences + """ + assert beta > 0 + + idxes = self._sample_proportional(batch_size) + + weights = [] + p_min = self._it_min.min() / self._it_sum.sum() + max_weight = (p_min * len(self._storage)) ** (-beta) + + for idx in idxes: + p_sample = self._it_sum[idx] / self._it_sum.sum() + weight = (p_sample * len(self._storage)) ** (-beta) + weights.append(weight / max_weight) + weights = np.array(weights, dtype=np.float32) + encoded_sample = self._encode_sample(idxes) + return tuple(list(encoded_sample) + [weights, idxes]) + + def update_priorities(self, idxes, priorities): + """Update priorities of sampled transitions. + + sets priority of transition at index idxes[i] in buffer + to priorities[i]. + + Parameters + ---------- + idxes: [int] + List of idxes of sampled transitions + priorities: [float] + List of updated priorities corresponding to + transitions at the sampled idxes denoted by + variable `idxes`. + """ + assert len(idxes) == len(priorities) + for idx, priority in zip(idxes, priorities): + assert priority > 0 + assert 0 <= idx < len(self._storage) + self._it_sum[idx] = priority ** self._alpha + self._it_min[idx] = priority ** self._alpha + + self._max_priority = max(self._max_priority, priority) diff --git a/baselines/baselines/her/README.md b/baselines/baselines/her/README.md new file mode 100644 index 0000000000000000000000000000000000000000..232b5053bda1c038c3e8f1fb3f897d2d3d68833b --- /dev/null +++ b/baselines/baselines/her/README.md @@ -0,0 +1,85 @@ +# Hindsight Experience Replay +For details on Hindsight Experience Replay (HER), please read the [paper](https://arxiv.org/abs/1707.01495). + +## How to use Hindsight Experience Replay + +### Getting started +Training an agent is very simple: +```bash +python -m baselines.run --alg=her --env=FetchReach-v1 --num_timesteps=5000 +``` +This will train a DDPG+HER agent on the `FetchReach` environment. +You should see the success rate go up quickly to `1.0`, which means that the agent achieves the +desired goal in 100% of the cases (note how HER can solve it in <5k steps - try doing that with PPO by replacing her with ppo2 :)) +The training script logs other diagnostics as well. Policy at the end of the training can be saved using `--save_path` flag, for instance: +```bash +python -m baselines.run --alg=her --env=FetchReach-v1 --num_timesteps=5000 --save_path=~/policies/her/fetchreach5k +``` + +To inspect what the agent has learned, use the `--play` flag: +```bash +python -m baselines.run --alg=her --env=FetchReach-v1 --num_timesteps=5000 --play +``` +(note `--play` can be combined with `--load_path`, which lets one load trained policies, for more results see [README.md](../../README.md)) + + +### Reproducing results +In [Plappert et al. (2018)](https://arxiv.org/abs/1802.09464), 38 trajectories were generated in parallel +(19 MPI processes, each generating computing gradients from 2 trajectories and aggregating). +To reproduce that behaviour, use +```bash +mpirun -np 19 python -m baselines.run --num_env=2 --alg=her ... +``` +This will require a machine with sufficient amount of physical CPU cores. In our experiments, +we used [Azure's D15v2 instances](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/sizes), +which have 20 physical cores. We only scheduled the experiment on 19 of those to leave some head-room on the system. + + +## Hindsight Experience Replay with Demonstrations +Using pre-recorded demonstrations to Overcome the exploration problem in HER based Reinforcement learning. +For details, please read the [paper](https://arxiv.org/pdf/1709.10089.pdf). + +### Getting started +The first step is to generate the demonstration dataset. This can be done in two ways, either by using a VR system to manipulate the arm using physical VR trackers or the simpler way is to write a script to carry out the respective task. Now some tasks can be complex and thus it would be difficult to write a hardcoded script for that task (eg. Fetch Push), but here our focus is on providing an algorithm that helps the agent to learn from demonstrations, and not on the demonstration generation paradigm itself. Thus the data collection part is left to the reader's choice. + +We provide a script for the Fetch Pick and Place task, to generate demonstrations for the Pick and Place task execute: +```bash +python experiment/data_generation/fetch_data_generation.py +``` +This outputs ```data_fetch_random_100.npz``` file which is our data file. + +To launch training with demonstrations (more technically, with behaviour cloning loss as an auxilliary loss), run the following +```bash +python -m baselines.run --alg=her --env=FetchPickAndPlace-v1 --num_timesteps=2.5e6 --demo_file=/Path/to/demo_file.npz +``` +This will train a DDPG+HER agent on the `FetchPickAndPlace` environment by using previously generated demonstration data. +To inspect what the agent has learned, use the `--play` flag as described above. + +#### Configuration +The provided configuration is for training an agent with HER without demonstrations, we need to change a few paramters for the HER algorithm to learn through demonstrations, to do that, set: + +* bc_loss: 1 - whether or not to use the behavior cloning loss as an auxilliary loss +* q_filter: 1 - whether or not a Q value filter should be used on the Actor outputs +* num_demo: 100 - number of expert demo episodes +* demo_batch_size: 128 - number of samples to be used from the demonstrations buffer, per mpi thread +* prm_loss_weight: 0.001 - Weight corresponding to the primary loss +* aux_loss_weight: 0.0078 - Weight corresponding to the auxilliary loss also called the cloning loss + +Apart from these changes the reported results also have the following configurational changes: + +* n_cycles: 20 - per epoch +* batch_size: 1024 - per mpi thread, total batch size +* random_eps: 0.1 - percentage of time a random action is taken +* noise_eps: 0.1 - std of gaussian noise added to not-completely-random actions + +These parameters can be changed either in [experiment/config.py](experiment/config.py) or passed to the command line as `--param=value`) + +### Results +Training with demonstrations helps overcome the exploration problem and achieves a faster and better convergence. The following graphs contrast the difference between training with and without demonstration data, We report the mean Q values vs Epoch and the Success Rate vs Epoch: + + +<div class="imgcap" align="middle"> +<center><img src="../../data/fetchPickAndPlaceContrast.png"></center> +<div class="thecap" align="middle"><b>Training results for Fetch Pick and Place task constrasting between training with and without demonstration data.</b></div> +</div> + diff --git a/baselines/baselines/her/__init__.py b/baselines/baselines/her/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/her/actor_critic.py b/baselines/baselines/her/actor_critic.py new file mode 100644 index 0000000000000000000000000000000000000000..ffd1c7f23228d78eb634fe91b25fe254dc5f2262 --- /dev/null +++ b/baselines/baselines/her/actor_critic.py @@ -0,0 +1,65 @@ +import tensorflow as tf +from baselines.her.util import store_args, nn + + +def normalize(x, stats): + if stats is None: + return x + return (x - stats.mean) / (stats.std + 1e-8) + + +def denormalize(x, stats): + if stats is None: + return x + return x * stats.std + stats.mean + +class ActorCritic: + @store_args + def __init__(self, name, dimo, dimg, dimu, max_u, o_stats, g_stats, hidden, layers, + **kwargs): + """The actor-critic network and related training code. + + Args: + dimo (int): the dimension of the observations + dimg (int): the dimension of the goals + dimu (int): the dimension of the actions + max_u (float): the maximum magnitude of actions; action outputs will be scaled + accordingly + o_stats (baselines.her.Normalizer): normalizer for observations + g_stats (baselines.her.Normalizer): normalizer for goals + hidden (int): number of hidden units that should be used in hidden layers + layers (int): number of hidden layers + """ + # self.o_tf = inputs_tf['o'] + # self.g_tf = inputs_tf['g'] + # self.u_tf = inputs_tf['u'] + + # Prepare inputs for actor and critic. + # o = self.o_stats.normalize(self.o_tf) + # g = self.g_stats.normalize(self.g_tf) + # input_pi = tf.concat(axis=1, values=[o, g]) # for actor + + input_pi_shape = dimo + dimg + self.actor_network = nn( + input_shape=input_pi_shape, + layers_sizes=[self.hidden] + self.layers + [self.dimu], + name='pi', + output_activation='tanh') + input_Q_shape = dimo + dimg + dimu + self.critic_network = nn( + input_shape=input_Q_shape, + layers_sizes=[self.hidden] + self.layers + [1], + name='Q') + + # Networks. + # with tf.variable_scope('pi'): + # self.pi_tf = self.max_u * tf.tanh(nn( + # input_pi, [self.hidden] * self.layers + [self.dimu])) + # with tf.variable_scope('Q'): + # # for policy training + # input_Q = tf.concat(axis=1, values=[o, g, self.pi_tf / self.max_u]) + # self.Q_pi_tf = nn(input_Q, [self.hidden] * self.layers + [1]) + # # for critic training + # input_Q = tf.concat(axis=1, values=[o, g, self.u_tf / self.max_u]) + # self._input_Q = input_Q # exposed for tests + # self.Q_tf = nn(input_Q, [self.hidden] * self.layers + [1], reuse=True) diff --git a/baselines/baselines/her/ddpg.py b/baselines/baselines/her/ddpg.py new file mode 100644 index 0000000000000000000000000000000000000000..c71828e14a84e7f914caaa469e8bde513880f57f --- /dev/null +++ b/baselines/baselines/her/ddpg.py @@ -0,0 +1,413 @@ +from collections import OrderedDict + +import numpy as np +import tensorflow as tf + +from baselines import logger +from baselines.her.util import ( + import_function, store_args, flatten_grads, transitions_in_episode_batch, convert_episode_to_batch_major) +from baselines.her.normalizer import Normalizer +from baselines.her.replay_buffer import ReplayBuffer +from baselines.common.mpi_adam import MpiAdam +from baselines.common import tf_util +from baselines.common.mpi_running_mean_std import RunningMeanStd + + +def dims_to_shapes(input_dims): + return {key: tuple([val]) if val > 0 else tuple() for key, val in input_dims.items()} + + +global DEMO_BUFFER #buffer for demonstrations + +class DDPG(object): + @store_args + def __init__(self, input_dims, buffer_size, hidden, layers, network_class, polyak, batch_size, + Q_lr, pi_lr, norm_eps, norm_clip, max_u, action_l2, clip_obs, scope, T, + rollout_batch_size, subtract_goals, relative_goals, clip_pos_returns, clip_return, + bc_loss, q_filter, num_demo, demo_batch_size, prm_loss_weight, aux_loss_weight, + sample_transitions, gamma, reuse=False, **kwargs): + """Implementation of DDPG that is used in combination with Hindsight Experience Replay (HER). + Added functionality to use demonstrations for training to Overcome exploration problem. + + Args: + input_dims (dict of ints): dimensions for the observation (o), the goal (g), and the + actions (u) + buffer_size (int): number of transitions that are stored in the replay buffer + hidden (int): number of units in the hidden layers + layers (int): number of hidden layers + network_class (str): the network class that should be used (e.g. 'baselines.her.ActorCritic') + polyak (float): coefficient for Polyak-averaging of the target network + batch_size (int): batch size for training + Q_lr (float): learning rate for the Q (critic) network + pi_lr (float): learning rate for the pi (actor) network + norm_eps (float): a small value used in the normalizer to avoid numerical instabilities + norm_clip (float): normalized inputs are clipped to be in [-norm_clip, norm_clip] + max_u (float): maximum action magnitude, i.e. actions are in [-max_u, max_u] + action_l2 (float): coefficient for L2 penalty on the actions + clip_obs (float): clip observations before normalization to be in [-clip_obs, clip_obs] + scope (str): the scope used for the TensorFlow graph + T (int): the time horizon for rollouts + rollout_batch_size (int): number of parallel rollouts per DDPG agent + subtract_goals (function): function that subtracts goals from each other + relative_goals (boolean): whether or not relative goals should be fed into the network + clip_pos_returns (boolean): whether or not positive returns should be clipped + clip_return (float): clip returns to be in [-clip_return, clip_return] + sample_transitions (function) function that samples from the replay buffer + gamma (float): gamma used for Q learning updates + reuse (boolean): whether or not the networks should be reused + bc_loss: whether or not the behavior cloning loss should be used as an auxilliary loss + q_filter: whether or not a filter on the q value update should be used when training with demonstartions + num_demo: Number of episodes in to be used in the demonstration buffer + demo_batch_size: number of samples to be used from the demonstrations buffer, per mpi thread + prm_loss_weight: Weight corresponding to the primary loss + aux_loss_weight: Weight corresponding to the auxilliary loss also called the cloning loss + """ + if self.clip_return is None: + self.clip_return = np.inf + + self.create_actor_critic = import_function(self.network_class) + + input_shapes = dims_to_shapes(self.input_dims) + self.dimo = self.input_dims['o'] + self.dimg = self.input_dims['g'] + self.dimu = self.input_dims['u'] + + # Prepare staging area for feeding data to the model. + stage_shapes = OrderedDict() + for key in sorted(self.input_dims.keys()): + if key.startswith('info_'): + continue + stage_shapes[key] = (None, *input_shapes[key]) + for key in ['o', 'g']: + stage_shapes[key + '_2'] = stage_shapes[key] + stage_shapes['r'] = (None,) + self.stage_shapes = stage_shapes + print('stage shapes are {}'.format(list(stage_shapes.values()))) + + # Create network. + with tf.variable_scope(self.scope): + self.staging_tf = StagingArea( + dtypes=[tf.float32 for _ in self.stage_shapes.keys()], + shapes=list(self.stage_shapes.values())) + self.buffer_ph_tf = [ + tf.placeholder(tf.float32, shape=shape) for shape in self.stage_shapes.values()] + self.stage_op = self.staging_tf.put(self.buffer_ph_tf) + + self._create_network(reuse=reuse) + + # Configure the replay buffer. + buffer_shapes = {key: (self.T-1 if key != 'o' else self.T, *input_shapes[key]) + for key, val in input_shapes.items()} + buffer_shapes['g'] = (buffer_shapes['g'][0], self.dimg) + buffer_shapes['ag'] = (self.T, self.dimg) + + buffer_size = (self.buffer_size // self.rollout_batch_size) * self.rollout_batch_size + self.buffer = ReplayBuffer(buffer_shapes, buffer_size, self.T, self.sample_transitions) + + global DEMO_BUFFER + DEMO_BUFFER = ReplayBuffer(buffer_shapes, buffer_size, self.T, self.sample_transitions) #initialize the demo buffer; in the same way as the primary data buffer + + def _random_action(self, n): + return np.random.uniform(low=-self.max_u, high=self.max_u, size=(n, self.dimu)) + + def _preprocess_og(self, o, ag, g): + if self.relative_goals: + g_shape = g.shape + g = g.reshape(-1, self.dimg) + ag = ag.reshape(-1, self.dimg) + g = self.subtract_goals(g, ag) + g = g.reshape(*g_shape) + o = np.clip(o, -self.clip_obs, self.clip_obs) + g = np.clip(g, -self.clip_obs, self.clip_obs) + return o, g + + def step(self, obs): + actions = self.get_actions(obs['observation'], obs['achieved_goal'], obs['desired_goal']) + return actions, None, None, None + + + def get_actions(self, o, ag, g, noise_eps=0., random_eps=0., use_target_net=False, + compute_Q=False): + o, g = self._preprocess_og(o, ag, g) + policy = self.target if use_target_net else self.main + # values to compute + vals = [policy.pi_tf] + if compute_Q: + vals += [policy.Q_pi_tf] + # feed + feed = { + policy.o_tf: o.reshape(-1, self.dimo), + policy.g_tf: g.reshape(-1, self.dimg), + policy.u_tf: np.zeros((o.size // self.dimo, self.dimu), dtype=np.float32) + } + + ret = self.sess.run(vals, feed_dict=feed) + # action postprocessing + u = ret[0] + noise = noise_eps * self.max_u * np.random.randn(*u.shape) # gaussian noise + u += noise + u = np.clip(u, -self.max_u, self.max_u) + u += np.random.binomial(1, random_eps, u.shape[0]).reshape(-1, 1) * (self._random_action(u.shape[0]) - u) # eps-greedy + if u.shape[0] == 1: + u = u[0] + u = u.copy() + ret[0] = u + + if len(ret) == 1: + return ret[0] + else: + return ret + + def init_demo_buffer(self, demoDataFile, update_stats=True): #function that initializes the demo buffer + + demoData = np.load(demoDataFile) #load the demonstration data from data file + info_keys = [key.replace('info_', '') for key in self.input_dims.keys() if key.startswith('info_')] + info_values = [np.empty((self.T - 1, 1, self.input_dims['info_' + key]), np.float32) for key in info_keys] + + demo_data_obs = demoData['obs'] + demo_data_acs = demoData['acs'] + demo_data_info = demoData['info'] + + for epsd in range(self.num_demo): # we initialize the whole demo buffer at the start of the training + obs, acts, goals, achieved_goals = [], [] ,[] ,[] + i = 0 + for transition in range(self.T - 1): + obs.append([demo_data_obs[epsd][transition].get('observation')]) + acts.append([demo_data_acs[epsd][transition]]) + goals.append([demo_data_obs[epsd][transition].get('desired_goal')]) + achieved_goals.append([demo_data_obs[epsd][transition].get('achieved_goal')]) + for idx, key in enumerate(info_keys): + info_values[idx][transition, i] = demo_data_info[epsd][transition][key] + + + obs.append([demo_data_obs[epsd][self.T - 1].get('observation')]) + achieved_goals.append([demo_data_obs[epsd][self.T - 1].get('achieved_goal')]) + + episode = dict(o=obs, + u=acts, + g=goals, + ag=achieved_goals) + for key, value in zip(info_keys, info_values): + episode['info_{}'.format(key)] = value + + episode = convert_episode_to_batch_major(episode) + global DEMO_BUFFER + DEMO_BUFFER.store_episode(episode) # create the observation dict and append them into the demonstration buffer + logger.debug("Demo buffer size currently ", DEMO_BUFFER.get_current_size()) #print out the demonstration buffer size + + if update_stats: + # add transitions to normalizer to normalize the demo data as well + episode['o_2'] = episode['o'][:, 1:, :] + episode['ag_2'] = episode['ag'][:, 1:, :] + num_normalizing_transitions = transitions_in_episode_batch(episode) + transitions = self.sample_transitions(episode, num_normalizing_transitions) + + o, g, ag = transitions['o'], transitions['g'], transitions['ag'] + transitions['o'], transitions['g'] = self._preprocess_og(o, ag, g) + # No need to preprocess the o_2 and g_2 since this is only used for stats + + self.o_stats.update(transitions['o']) + self.g_stats.update(transitions['g']) + + self.o_stats.recompute_stats() + self.g_stats.recompute_stats() + episode.clear() + + logger.info("Demo buffer size: ", DEMO_BUFFER.get_current_size()) #print out the demonstration buffer size + + def store_episode(self, episode_batch, update_stats=True): + """ + episode_batch: array of batch_size x (T or T+1) x dim_key + 'o' is of size T+1, others are of size T + """ + + self.buffer.store_episode(episode_batch) + + if update_stats: + # add transitions to normalizer + episode_batch['o_2'] = episode_batch['o'][:, 1:, :] + episode_batch['ag_2'] = episode_batch['ag'][:, 1:, :] + num_normalizing_transitions = transitions_in_episode_batch(episode_batch) + transitions = self.sample_transitions(episode_batch, num_normalizing_transitions) + + o, g, ag = transitions['o'], transitions['g'], transitions['ag'] + transitions['o'], transitions['g'] = self._preprocess_og(o, ag, g) + # No need to preprocess the o_2 and g_2 since this is only used for stats + + self.o_stats.update(transitions['o']) + self.g_stats.update(transitions['g']) + + self.o_stats.recompute_stats() + self.g_stats.recompute_stats() + + def get_current_buffer_size(self): + return self.buffer.get_current_size() + + def _sync_optimizers(self): + self.Q_adam.sync() + self.pi_adam.sync() + + def _grads(self): + # Avoid feed_dict here for performance! + critic_loss, actor_loss, Q_grad, pi_grad = self.sess.run([ + self.Q_loss_tf, + self.main.Q_pi_tf, + self.Q_grad_tf, + self.pi_grad_tf + ]) + return critic_loss, actor_loss, Q_grad, pi_grad + + def _update(self, Q_grad, pi_grad): + self.Q_adam.update(Q_grad, self.Q_lr) + self.pi_adam.update(pi_grad, self.pi_lr) + + def sample_batch(self): + if self.bc_loss: #use demonstration buffer to sample as well if bc_loss flag is set TRUE + transitions = self.buffer.sample(self.batch_size - self.demo_batch_size) + global DEMO_BUFFER + transitions_demo = DEMO_BUFFER.sample(self.demo_batch_size) #sample from the demo buffer + for k, values in transitions_demo.items(): + rolloutV = transitions[k].tolist() + for v in values: + rolloutV.append(v.tolist()) + transitions[k] = np.array(rolloutV) + else: + transitions = self.buffer.sample(self.batch_size) #otherwise only sample from primary buffer + + o, o_2, g = transitions['o'], transitions['o_2'], transitions['g'] + ag, ag_2 = transitions['ag'], transitions['ag_2'] + transitions['o'], transitions['g'] = self._preprocess_og(o, ag, g) + transitions['o_2'], transitions['g_2'] = self._preprocess_og(o_2, ag_2, g) + + transitions_batch = [transitions[key] for key in self.stage_shapes.keys()] + return transitions_batch + + def stage_batch(self, batch=None): + if batch is None: + batch = self.sample_batch() + assert len(self.buffer_ph_tf) == len(batch) + self.sess.run(self.stage_op, feed_dict=dict(zip(self.buffer_ph_tf, batch))) + + def train(self, stage=True): + if stage: + self.stage_batch() + critic_loss, actor_loss, Q_grad, pi_grad = self._grads() + self._update(Q_grad, pi_grad) + return critic_loss, actor_loss + + def _init_target_net(self): + for var, target_var in zip(self.main.trainable_variables, self.target.trainable_variables): + target_var.assign(var) + + def update_target_net(self): + for var, target_var in zip(self.main.trainable_variables, self.target.trainable_variables): + target_var.assign(self.polyak * target_var + (1. - self.polyak * var)) + + def clear_buffer(self): + self.buffer.clear_buffer() + + def _create_network(self, reuse=False): + logger.info("Creating a DDPG agent with action space %d x %s..." % (self.dimu, self.max_u)) + + # running averages + with tf.name_scope('o_stats'): + self.o_stats = RunningMeanStd(epsilon=self.norm_eps, shape=(self.dimo,), default_clip_range=self.norm_clip) + with tf.name_scope('g_stats'): + self.g_stats = RunningMeanStd(epsilon=self.norm_eps, shape=(self.dimg,), default_clip_range=self.norm_clip) + + # mini-batch sampling. + batch = self.staging_tf.get() + batch_tf = OrderedDict([(key, batch[i]) + for i, key in enumerate(self.stage_shapes.keys())]) + batch_tf['r'] = tf.reshape(batch_tf['r'], [-1, 1]) + + #choose only the demo buffer samples + mask = np.concatenate((np.zeros(self.batch_size - self.demo_batch_size), np.ones(self.demo_batch_size)), axis = 0) + + self.main = self.create_actor_critic(name='main', **self.__dict__) + self.target = self.create_actor_critic(name='target', **self.__dict__) + + # loss functions + # target_Q_pi_tf = self.target.Q_pi_tf + # clip_range = (-self.clip_return, 0. if self.clip_pos_returns else np.inf) + # target_tf = tf.clip_by_value(batch_tf['r'] + self.gamma * target_Q_pi_tf, *clip_range) + # self.Q_loss_tf = tf.reduce_mean(tf.square(tf.stop_gradient(target_tf) - self.main.Q_tf)) + + # if self.bc_loss ==1 and self.q_filter == 1 : # train with demonstrations and use bc_loss and q_filter both + # maskMain = tf.reshape(tf.boolean_mask(self.main.Q_tf > self.main.Q_pi_tf, mask), [-1]) #where is the demonstrator action better than actor action according to the critic? choose those samples only + # #define the cloning loss on the actor's actions only on the samples which adhere to the above masks + # self.cloning_loss_tf = tf.reduce_sum(tf.square(tf.boolean_mask(tf.boolean_mask((self.main.pi_tf), mask), maskMain, axis=0) - tf.boolean_mask(tf.boolean_mask((batch_tf['u']), mask), maskMain, axis=0))) + # self.pi_loss_tf = -self.prm_loss_weight * tf.reduce_mean(self.main.Q_pi_tf) #primary loss scaled by it's respective weight prm_loss_weight + # self.pi_loss_tf += self.prm_loss_weight * self.action_l2 * tf.reduce_mean(tf.square(self.main.pi_tf / self.max_u)) #L2 loss on action values scaled by the same weight prm_loss_weight + # self.pi_loss_tf += self.aux_loss_weight * self.cloning_loss_tf #adding the cloning loss to the actor loss as an auxilliary loss scaled by its weight aux_loss_weight + + # elif self.bc_loss == 1 and self.q_filter == 0: # train with demonstrations without q_filter + # self.cloning_loss_tf = tf.reduce_sum(tf.square(tf.boolean_mask((self.main.pi_tf), mask) - tf.boolean_mask((batch_tf['u']), mask))) + # self.pi_loss_tf = -self.prm_loss_weight * tf.reduce_mean(self.main.Q_pi_tf) + # self.pi_loss_tf += self.prm_loss_weight * self.action_l2 * tf.reduce_mean(tf.square(self.main.pi_tf / self.max_u)) + # self.pi_loss_tf += self.aux_loss_weight * self.cloning_loss_tf + + # else: #If not training with demonstrations + # self.pi_loss_tf = -tf.reduce_mean(self.main.Q_pi_tf) + # self.pi_loss_tf += self.action_l2 * tf.reduce_mean(tf.square(self.main.pi_tf / self.max_u)) + + # Q_grads_tf = tf.gradients(self.Q_loss_tf, self._vars('main/Q')) + # pi_grads_tf = tf.gradients(self.pi_loss_tf, self._vars('main/pi')) + + # self.Q_grads_vars_tf = zip(Q_grads_tf, self._vars('main/Q')) + # self.pi_grads_vars_tf = zip(pi_grads_tf, self._vars('main/pi')) + # self.Q_grad_tf = flatten_grads(grads=Q_grads_tf, var_list=self._vars('main/Q')) + # self.pi_grad_tf = flatten_grads(grads=pi_grads_tf, var_list=self._vars('main/pi')) + + # optimizers + self.Q_adam = MpiAdam(self.main.critic_network.trainable_variables, scale_grad_by_procs=False) + self.pi_adam = MpiAdam(self.main.actor_network.trainable_variables, scale_grad_by_procs=False) + + # initialize all variables + self._sync_optimizers() + self._init_target_net() + + def logs(self, prefix=''): + logs = [] + logs += [('stats_o/mean', np.mean(self.sess.run([self.o_stats.mean])))] + logs += [('stats_o/std', np.mean(self.sess.run([self.o_stats.std])))] + logs += [('stats_g/mean', np.mean(self.sess.run([self.g_stats.mean])))] + logs += [('stats_g/std', np.mean(self.sess.run([self.g_stats.std])))] + + if prefix != '' and not prefix.endswith('/'): + return [(prefix + '/' + key, val) for key, val in logs] + else: + return logs + + def __getstate__(self): + """Our policies can be loaded from pkl, but after unpickling you cannot continue training. + """ + excluded_subnames = ['_tf', '_op', '_vars', '_adam', 'buffer', 'sess', '_stats', + 'main', 'target', 'lock', 'env', 'sample_transitions', + 'stage_shapes', 'create_actor_critic'] + + state = {k: v for k, v in self.__dict__.items() if all([not subname in k for subname in excluded_subnames])} + state['buffer_size'] = self.buffer_size + state['tf'] = self.sess.run([x for x in self._global_vars('') if 'buffer' not in x.name]) + return state + + def __setstate__(self, state): + if 'sample_transitions' not in state: + # We don't need this for playing the policy. + state['sample_transitions'] = None + + self.__init__(**state) + # set up stats (they are overwritten in __init__) + for k, v in state.items(): + if k[-6:] == '_stats': + self.__dict__[k] = v + # load TF variables + vars = [x for x in self._global_vars('') if 'buffer' not in x.name] + assert(len(vars) == len(state["tf"])) + node = [tf.assign(var, val) for var, val in zip(vars, state["tf"])] + self.sess.run(node) + + #TODO: add saving logic + # def save(self, save_path): + # tf_util.save_variables(save_path) + diff --git a/baselines/baselines/her/experiment/__init__.py b/baselines/baselines/her/experiment/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/her/experiment/config.py b/baselines/baselines/her/experiment/config.py new file mode 100644 index 0000000000000000000000000000000000000000..6370505a844783a36c6866e70cf3b42fe9c23936 --- /dev/null +++ b/baselines/baselines/her/experiment/config.py @@ -0,0 +1,201 @@ +import os +import numpy as np +import gym + +from baselines import logger +from baselines.her.ddpg import DDPG +from baselines.her.her_sampler import make_sample_her_transitions +from baselines.bench.monitor import Monitor + +DEFAULT_ENV_PARAMS = { + 'FetchReach-v1': { + 'n_cycles': 10, + }, +} + + +DEFAULT_PARAMS = { + # env + 'max_u': 1., # max absolute value of actions on different coordinates + # ddpg + 'layers': 3, # number of layers in the critic/actor networks + 'hidden': 256, # number of neurons in each hidden layers + 'network_class': 'baselines.her.actor_critic:ActorCritic', + 'Q_lr': 0.001, # critic learning rate + 'pi_lr': 0.001, # actor learning rate + 'buffer_size': int(1E6), # for experience replay + 'polyak': 0.95, # polyak averaging coefficient + 'action_l2': 1.0, # quadratic penalty on actions (before rescaling by max_u) + 'clip_obs': 200., + 'scope': 'ddpg', # can be tweaked for testing + 'relative_goals': False, + # training + 'n_cycles': 50, # per epoch + 'rollout_batch_size': 2, # per mpi thread + 'n_batches': 40, # training batches per cycle + 'batch_size': 256, # per mpi thread, measured in transitions and reduced to even multiple of chunk_length. + 'n_test_rollouts': 10, # number of test rollouts per epoch, each consists of rollout_batch_size rollouts + 'test_with_polyak': False, # run test episodes with the target network + # exploration + 'random_eps': 0.3, # percentage of time a random action is taken + 'noise_eps': 0.2, # std of gaussian noise added to not-completely-random actions as a percentage of max_u + # HER + 'replay_strategy': 'future', # supported modes: future, none + 'replay_k': 4, # number of additional goals used for replay, only used if off_policy_data=future + # normalization + 'norm_eps': 0.01, # epsilon used for observation normalization + 'norm_clip': 5, # normalized observations are cropped to this values + + 'bc_loss': 0, # whether or not to use the behavior cloning loss as an auxilliary loss + 'q_filter': 0, # whether or not a Q value filter should be used on the Actor outputs + 'num_demo': 100, # number of expert demo episodes + 'demo_batch_size': 128, #number of samples to be used from the demonstrations buffer, per mpi thread 128/1024 or 32/256 + 'prm_loss_weight': 0.001, #Weight corresponding to the primary loss + 'aux_loss_weight': 0.0078, #Weight corresponding to the auxilliary loss also called the cloning loss +} + + +CACHED_ENVS = {} + + +def cached_make_env(make_env): + """ + Only creates a new environment from the provided function if one has not yet already been + created. This is useful here because we need to infer certain properties of the env, e.g. + its observation and action spaces, without any intend of actually using it. + """ + if make_env not in CACHED_ENVS: + env = make_env() + CACHED_ENVS[make_env] = env + return CACHED_ENVS[make_env] + + +def prepare_params(kwargs): + # DDPG params + ddpg_params = dict() + env_name = kwargs['env_name'] + + def make_env(subrank=None): + env = gym.make(env_name) + if subrank is not None and logger.get_dir() is not None: + try: + from mpi4py import MPI + mpi_rank = MPI.COMM_WORLD.Get_rank() + except ImportError: + MPI = None + mpi_rank = 0 + logger.warn('Running with a single MPI process. This should work, but the results may differ from the ones publshed in Plappert et al.') + + max_episode_steps = env._max_episode_steps + env = Monitor(env, + os.path.join(logger.get_dir(), str(mpi_rank) + '.' + str(subrank)), + allow_early_resets=True) + # hack to re-expose _max_episode_steps (ideally should replace reliance on it downstream) + env = gym.wrappers.TimeLimit(env, max_episode_steps=max_episode_steps) + return env + + kwargs['make_env'] = make_env + tmp_env = cached_make_env(kwargs['make_env']) + assert hasattr(tmp_env, '_max_episode_steps') + kwargs['T'] = tmp_env._max_episode_steps + + kwargs['max_u'] = np.array(kwargs['max_u']) if isinstance(kwargs['max_u'], list) else kwargs['max_u'] + kwargs['gamma'] = 1. - 1. / kwargs['T'] + if 'lr' in kwargs: + kwargs['pi_lr'] = kwargs['lr'] + kwargs['Q_lr'] = kwargs['lr'] + del kwargs['lr'] + for name in ['buffer_size', 'hidden', 'layers', + 'network_class', + 'polyak', + 'batch_size', 'Q_lr', 'pi_lr', + 'norm_eps', 'norm_clip', 'max_u', + 'action_l2', 'clip_obs', 'scope', 'relative_goals']: + ddpg_params[name] = kwargs[name] + kwargs['_' + name] = kwargs[name] + del kwargs[name] + kwargs['ddpg_params'] = ddpg_params + + return kwargs + + +def log_params(params, logger=logger): + for key in sorted(params.keys()): + logger.info('{}: {}'.format(key, params[key])) + + +def configure_her(params): + env = cached_make_env(params['make_env']) + env.reset() + + def reward_fun(ag_2, g, info): # vectorized + return env.compute_reward(achieved_goal=ag_2, desired_goal=g, info=info) + + # Prepare configuration for HER. + her_params = { + 'reward_fun': reward_fun, + } + for name in ['replay_strategy', 'replay_k']: + her_params[name] = params[name] + params['_' + name] = her_params[name] + del params[name] + sample_her_transitions = make_sample_her_transitions(**her_params) + + return sample_her_transitions + + +def simple_goal_subtract(a, b): + assert a.shape == b.shape + return a - b + + +def configure_ddpg(dims, params, reuse=False, use_mpi=True, clip_return=True): + sample_her_transitions = configure_her(params) + # Extract relevant parameters. + gamma = params['gamma'] + rollout_batch_size = params['rollout_batch_size'] + ddpg_params = params['ddpg_params'] + + input_dims = dims.copy() + + # DDPG agent + env = cached_make_env(params['make_env']) + env.reset() + ddpg_params.update({'input_dims': input_dims, # agent takes an input observations + 'T': params['T'], + 'clip_pos_returns': True, # clip positive returns + 'clip_return': (1. / (1. - gamma)) if clip_return else np.inf, # max abs of return + 'rollout_batch_size': rollout_batch_size, + 'subtract_goals': simple_goal_subtract, + 'sample_transitions': sample_her_transitions, + 'gamma': gamma, + 'bc_loss': params['bc_loss'], + 'q_filter': params['q_filter'], + 'num_demo': params['num_demo'], + 'demo_batch_size': params['demo_batch_size'], + 'prm_loss_weight': params['prm_loss_weight'], + 'aux_loss_weight': params['aux_loss_weight'], + }) + ddpg_params['info'] = { + 'env_name': params['env_name'], + } + policy = DDPG(reuse=reuse, **ddpg_params, use_mpi=use_mpi) + return policy + + +def configure_dims(params): + env = cached_make_env(params['make_env']) + env.reset() + obs, _, _, info = env.step(env.action_space.sample()) + + dims = { + 'o': obs['observation'].shape[0], + 'u': env.action_space.shape[0], + 'g': obs['desired_goal'].shape[0], + } + for key, value in info.items(): + value = np.array(value) + if value.ndim == 0: + value = value.reshape(1) + dims['info_{}'.format(key)] = value.shape[0] + return dims diff --git a/baselines/baselines/her/experiment/data_generation/fetch_data_generation.py b/baselines/baselines/her/experiment/data_generation/fetch_data_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..0a0a755db120e86439770a8a52715ba6029e2dc7 --- /dev/null +++ b/baselines/baselines/her/experiment/data_generation/fetch_data_generation.py @@ -0,0 +1,126 @@ +import gym +import numpy as np + + +"""Data generation for the case of a single block pick and place in Fetch Env""" + +actions = [] +observations = [] +infos = [] + +def main(): + env = gym.make('FetchPickAndPlace-v1') + numItr = 100 + initStateSpace = "random" + env.reset() + print("Reset!") + while len(actions) < numItr: + obs = env.reset() + print("ITERATION NUMBER ", len(actions)) + goToGoal(env, obs) + + + fileName = "data_fetch" + fileName += "_" + initStateSpace + fileName += "_" + str(numItr) + fileName += ".npz" + + np.savez_compressed(fileName, acs=actions, obs=observations, info=infos) # save the file + +def goToGoal(env, lastObs): + + goal = lastObs['desired_goal'] + objectPos = lastObs['observation'][3:6] + object_rel_pos = lastObs['observation'][6:9] + episodeAcs = [] + episodeObs = [] + episodeInfo = [] + + object_oriented_goal = object_rel_pos.copy() + object_oriented_goal[2] += 0.03 # first make the gripper go slightly above the object + + timeStep = 0 #count the total number of timesteps + episodeObs.append(lastObs) + + while np.linalg.norm(object_oriented_goal) >= 0.005 and timeStep <= env._max_episode_steps: + env.render() + action = [0, 0, 0, 0] + object_oriented_goal = object_rel_pos.copy() + object_oriented_goal[2] += 0.03 + + for i in range(len(object_oriented_goal)): + action[i] = object_oriented_goal[i]*6 + + action[len(action)-1] = 0.05 #open + + obsDataNew, reward, done, info = env.step(action) + timeStep += 1 + + episodeAcs.append(action) + episodeInfo.append(info) + episodeObs.append(obsDataNew) + + objectPos = obsDataNew['observation'][3:6] + object_rel_pos = obsDataNew['observation'][6:9] + + while np.linalg.norm(object_rel_pos) >= 0.005 and timeStep <= env._max_episode_steps : + env.render() + action = [0, 0, 0, 0] + for i in range(len(object_rel_pos)): + action[i] = object_rel_pos[i]*6 + + action[len(action)-1] = -0.005 + + obsDataNew, reward, done, info = env.step(action) + timeStep += 1 + + episodeAcs.append(action) + episodeInfo.append(info) + episodeObs.append(obsDataNew) + + objectPos = obsDataNew['observation'][3:6] + object_rel_pos = obsDataNew['observation'][6:9] + + + while np.linalg.norm(goal - objectPos) >= 0.01 and timeStep <= env._max_episode_steps : + env.render() + action = [0, 0, 0, 0] + for i in range(len(goal - objectPos)): + action[i] = (goal - objectPos)[i]*6 + + action[len(action)-1] = -0.005 + + obsDataNew, reward, done, info = env.step(action) + timeStep += 1 + + episodeAcs.append(action) + episodeInfo.append(info) + episodeObs.append(obsDataNew) + + objectPos = obsDataNew['observation'][3:6] + object_rel_pos = obsDataNew['observation'][6:9] + + while True: #limit the number of timesteps in the episode to a fixed duration + env.render() + action = [0, 0, 0, 0] + action[len(action)-1] = -0.005 # keep the gripper closed + + obsDataNew, reward, done, info = env.step(action) + timeStep += 1 + + episodeAcs.append(action) + episodeInfo.append(info) + episodeObs.append(obsDataNew) + + objectPos = obsDataNew['observation'][3:6] + object_rel_pos = obsDataNew['observation'][6:9] + + if timeStep >= env._max_episode_steps: break + + actions.append(episodeAcs) + observations.append(episodeObs) + infos.append(episodeInfo) + + +if __name__ == "__main__": + main() diff --git a/baselines/baselines/her/experiment/play.py b/baselines/baselines/her/experiment/play.py new file mode 100644 index 0000000000000000000000000000000000000000..8989c9277ecd7cdf3781df1d90a4d3b4e7b43099 --- /dev/null +++ b/baselines/baselines/her/experiment/play.py @@ -0,0 +1,61 @@ +# DEPRECATED, use --play flag to baselines.run instead +import click +import numpy as np +import pickle + +from baselines import logger +from baselines.common import set_global_seeds +import baselines.her.experiment.config as config +from baselines.her.rollout import RolloutWorker + + +@click.command() +@click.argument('policy_file', type=str) +@click.option('--seed', type=int, default=0) +@click.option('--n_test_rollouts', type=int, default=10) +@click.option('--render', type=int, default=1) +def main(policy_file, seed, n_test_rollouts, render): + set_global_seeds(seed) + + # Load policy. + with open(policy_file, 'rb') as f: + policy = pickle.load(f) + env_name = policy.info['env_name'] + + # Prepare params. + params = config.DEFAULT_PARAMS + if env_name in config.DEFAULT_ENV_PARAMS: + params.update(config.DEFAULT_ENV_PARAMS[env_name]) # merge env-specific parameters in + params['env_name'] = env_name + params = config.prepare_params(params) + config.log_params(params, logger=logger) + + dims = config.configure_dims(params) + + eval_params = { + 'exploit': True, + 'use_target_net': params['test_with_polyak'], + 'compute_Q': True, + 'rollout_batch_size': 1, + 'render': bool(render), + } + + for name in ['T', 'gamma', 'noise_eps', 'random_eps']: + eval_params[name] = params[name] + + evaluator = RolloutWorker(params['make_env'], policy, dims, logger, **eval_params) + evaluator.seed(seed) + + # Run evaluation. + evaluator.clear_history() + for _ in range(n_test_rollouts): + evaluator.generate_rollouts() + + # record logs + for key, val in evaluator.logs('test'): + logger.record_tabular(key, np.mean(val)) + logger.dump_tabular() + + +if __name__ == '__main__': + main() diff --git a/baselines/baselines/her/experiment/plot.py b/baselines/baselines/her/experiment/plot.py new file mode 100644 index 0000000000000000000000000000000000000000..542de0e1ac5a518d824addc30ec3271ea4f5656a --- /dev/null +++ b/baselines/baselines/her/experiment/plot.py @@ -0,0 +1,120 @@ +# DEPRECATED, use baselines.common.plot_util instead + +import os +import matplotlib.pyplot as plt +import numpy as np +import json +import seaborn as sns; sns.set() +import glob2 +import argparse + + +def smooth_reward_curve(x, y): + halfwidth = int(np.ceil(len(x) / 60)) # Halfwidth of our smoothing convolution + k = halfwidth + xsmoo = x + ysmoo = np.convolve(y, np.ones(2 * k + 1), mode='same') / np.convolve(np.ones_like(y), np.ones(2 * k + 1), + mode='same') + return xsmoo, ysmoo + + +def load_results(file): + if not os.path.exists(file): + return None + with open(file, 'r') as f: + lines = [line for line in f] + if len(lines) < 2: + return None + keys = [name.strip() for name in lines[0].split(',')] + data = np.genfromtxt(file, delimiter=',', skip_header=1, filling_values=0.) + if data.ndim == 1: + data = data.reshape(1, -1) + assert data.ndim == 2 + assert data.shape[-1] == len(keys) + result = {} + for idx, key in enumerate(keys): + result[key] = data[:, idx] + return result + + +def pad(xs, value=np.nan): + maxlen = np.max([len(x) for x in xs]) + + padded_xs = [] + for x in xs: + if x.shape[0] >= maxlen: + padded_xs.append(x) + + padding = np.ones((maxlen - x.shape[0],) + x.shape[1:]) * value + x_padded = np.concatenate([x, padding], axis=0) + assert x_padded.shape[1:] == x.shape[1:] + assert x_padded.shape[0] == maxlen + padded_xs.append(x_padded) + return np.array(padded_xs) + + +parser = argparse.ArgumentParser() +parser.add_argument('dir', type=str) +parser.add_argument('--smooth', type=int, default=1) +args = parser.parse_args() + +# Load all data. +data = {} +paths = [os.path.abspath(os.path.join(path, '..')) for path in glob2.glob(os.path.join(args.dir, '**', 'progress.csv'))] +for curr_path in paths: + if not os.path.isdir(curr_path): + continue + results = load_results(os.path.join(curr_path, 'progress.csv')) + if not results: + print('skipping {}'.format(curr_path)) + continue + print('loading {} ({})'.format(curr_path, len(results['epoch']))) + with open(os.path.join(curr_path, 'params.json'), 'r') as f: + params = json.load(f) + + success_rate = np.array(results['test/success_rate']) + epoch = np.array(results['epoch']) + 1 + env_id = params['env_name'] + replay_strategy = params['replay_strategy'] + + if replay_strategy == 'future': + config = 'her' + else: + config = 'ddpg' + if 'Dense' in env_id: + config += '-dense' + else: + config += '-sparse' + env_id = env_id.replace('Dense', '') + + # Process and smooth data. + assert success_rate.shape == epoch.shape + x = epoch + y = success_rate + if args.smooth: + x, y = smooth_reward_curve(epoch, success_rate) + assert x.shape == y.shape + + if env_id not in data: + data[env_id] = {} + if config not in data[env_id]: + data[env_id][config] = [] + data[env_id][config].append((x, y)) + +# Plot data. +for env_id in sorted(data.keys()): + print('exporting {}'.format(env_id)) + plt.clf() + + for config in sorted(data[env_id].keys()): + xs, ys = zip(*data[env_id][config]) + xs, ys = pad(xs), pad(ys) + assert xs.shape == ys.shape + + plt.plot(xs[0], np.nanmedian(ys, axis=0), label=config) + plt.fill_between(xs[0], np.nanpercentile(ys, 25, axis=0), np.nanpercentile(ys, 75, axis=0), alpha=0.25) + plt.title(env_id) + plt.xlabel('Epoch') + plt.ylabel('Median Success Rate') + plt.legend() + plt.savefig(os.path.join(args.dir, 'fig_{}.png'.format(env_id))) diff --git a/baselines/baselines/her/her.py b/baselines/baselines/her/her.py new file mode 100644 index 0000000000000000000000000000000000000000..4f7d893bb1bf6b4ef3d75fa374551d7fd592d876 --- /dev/null +++ b/baselines/baselines/her/her.py @@ -0,0 +1,196 @@ +import os + +import click +import numpy as np +import json +from mpi4py import MPI + +from baselines import logger +from baselines.common import set_global_seeds, tf_util +from baselines.common.mpi_moments import mpi_moments +import baselines.her.experiment.config as config +from baselines.her.rollout import RolloutWorker + +def mpi_average(value): + if not isinstance(value, list): + value = [value] + if not any(value): + value = [0.] + return mpi_moments(np.array(value))[0] + + +def train(*, policy, rollout_worker, evaluator, + n_epochs, n_test_rollouts, n_cycles, n_batches, policy_save_interval, + save_path, demo_file, **kwargs): + rank = MPI.COMM_WORLD.Get_rank() + + if save_path: + latest_policy_path = os.path.join(save_path, 'policy_latest.pkl') + best_policy_path = os.path.join(save_path, 'policy_best.pkl') + periodic_policy_path = os.path.join(save_path, 'policy_{}.pkl') + + logger.info("Training...") + best_success_rate = -1 + + if policy.bc_loss == 1: policy.init_demo_buffer(demo_file) #initialize demo buffer if training with demonstrations + + # num_timesteps = n_epochs * n_cycles * rollout_length * number of rollout workers + for epoch in range(n_epochs): + # train + rollout_worker.clear_history() + for _ in range(n_cycles): + episode = rollout_worker.generate_rollouts() + policy.store_episode(episode) + for _ in range(n_batches): + policy.train() + policy.update_target_net() + + # test + evaluator.clear_history() + for _ in range(n_test_rollouts): + evaluator.generate_rollouts() + + # record logs + logger.record_tabular('epoch', epoch) + for key, val in evaluator.logs('test'): + logger.record_tabular(key, mpi_average(val)) + for key, val in rollout_worker.logs('train'): + logger.record_tabular(key, mpi_average(val)) + for key, val in policy.logs(): + logger.record_tabular(key, mpi_average(val)) + + if rank == 0: + logger.dump_tabular() + + # save the policy if it's better than the previous ones + success_rate = mpi_average(evaluator.current_success_rate()) + if rank == 0 and success_rate >= best_success_rate and save_path: + best_success_rate = success_rate + logger.info('New best success rate: {}. Saving policy to {} ...'.format(best_success_rate, best_policy_path)) + evaluator.save_policy(best_policy_path) + evaluator.save_policy(latest_policy_path) + if rank == 0 and policy_save_interval > 0 and epoch % policy_save_interval == 0 and save_path: + policy_path = periodic_policy_path.format(epoch) + logger.info('Saving periodic policy to {} ...'.format(policy_path)) + evaluator.save_policy(policy_path) + + # make sure that different threads have different seeds + local_uniform = np.random.uniform(size=(1,)) + root_uniform = local_uniform.copy() + MPI.COMM_WORLD.Bcast(root_uniform, root=0) + if rank != 0: + assert local_uniform[0] != root_uniform[0] + + return policy + + +def learn(*, network, env, total_timesteps, + seed=None, + eval_env=None, + replay_strategy='future', + policy_save_interval=5, + clip_return=True, + demo_file=None, + override_params=None, + load_path=None, + save_path=None, + **kwargs +): + + raise TypeError('HER is not supported in TF2 branch yet, we are still working on it.') + override_params = override_params or {} + if MPI is not None: + rank = MPI.COMM_WORLD.Get_rank() + num_cpu = MPI.COMM_WORLD.Get_size() + + # Seed everything. + rank_seed = seed + 1000000 * rank if seed is not None else None + set_global_seeds(rank_seed) + + # Prepare params. + params = config.DEFAULT_PARAMS + env_name = env.spec.id + params['env_name'] = env_name + params['replay_strategy'] = replay_strategy + if env_name in config.DEFAULT_ENV_PARAMS: + params.update(config.DEFAULT_ENV_PARAMS[env_name]) # merge env-specific parameters in + params.update(**override_params) # makes it possible to override any parameter + with open(os.path.join(logger.get_dir(), 'params.json'), 'w') as f: + json.dump(params, f) + params = config.prepare_params(params) + params['rollout_batch_size'] = env.num_envs + + if demo_file is not None: + params['bc_loss'] = 1 + params.update(kwargs) + + config.log_params(params, logger=logger) + + if num_cpu == 1: + logger.warn() + logger.warn('*** Warning ***') + logger.warn( + 'You are running HER with just a single MPI worker. This will work, but the ' + + 'experiments that we report in Plappert et al. (2018, https://arxiv.org/abs/1802.09464) ' + + 'were obtained with --num_cpu 19. This makes a significant difference and if you ' + + 'are looking to reproduce those results, be aware of this. Please also refer to ' + + 'https://github.com/openai/baselines/issues/314 for further details.') + logger.warn('****************') + logger.warn() + + dims = config.configure_dims(params) + print('dims are {}'.format(dims)) + policy = config.configure_ddpg(dims=dims, params=params, clip_return=clip_return) + #TODO: load path + # if load_path is not None: + # tf_util.load_variables(load_path) + + rollout_params = { + 'exploit': False, + 'use_target_net': False, + 'use_demo_states': True, + 'compute_Q': False, + 'T': params['T'], + } + + eval_params = { + 'exploit': True, + 'use_target_net': params['test_with_polyak'], + 'use_demo_states': False, + 'compute_Q': True, + 'T': params['T'], + } + + for name in ['T', 'rollout_batch_size', 'gamma', 'noise_eps', 'random_eps']: + rollout_params[name] = params[name] + eval_params[name] = params[name] + + eval_env = eval_env or env + + rollout_worker = RolloutWorker(env, policy, dims, logger, monitor=True, **rollout_params) + evaluator = RolloutWorker(eval_env, policy, dims, logger, **eval_params) + + n_cycles = params['n_cycles'] + n_epochs = total_timesteps // n_cycles // rollout_worker.T // rollout_worker.rollout_batch_size + + return train( + save_path=save_path, policy=policy, rollout_worker=rollout_worker, + evaluator=evaluator, n_epochs=n_epochs, n_test_rollouts=params['n_test_rollouts'], + n_cycles=params['n_cycles'], n_batches=params['n_batches'], + policy_save_interval=policy_save_interval, demo_file=demo_file) + + +@click.command() +@click.option('--env', type=str, default='FetchReach-v1', help='the name of the OpenAI Gym environment that you want to train on') +@click.option('--total_timesteps', type=int, default=int(5e5), help='the number of timesteps to run') +@click.option('--seed', type=int, default=0, help='the random seed used to seed both the environment and the training code') +@click.option('--policy_save_interval', type=int, default=5, help='the interval with which policy pickles are saved. If set to 0, only the best and latest policy will be pickled.') +@click.option('--replay_strategy', type=click.Choice(['future', 'none']), default='future', help='the HER replay strategy to be used. "future" uses HER, "none" disables HER.') +@click.option('--clip_return', type=int, default=1, help='whether or not returns should be clipped') +@click.option('--demo_file', type=str, default = 'PATH/TO/DEMO/DATA/FILE.npz', help='demo data file path') +def main(**kwargs): + learn(**kwargs) + + +if __name__ == '__main__': + main() diff --git a/baselines/baselines/her/her_sampler.py b/baselines/baselines/her/her_sampler.py new file mode 100644 index 0000000000000000000000000000000000000000..76f3c346ae34f93150926ba70d1a4987be484ddd --- /dev/null +++ b/baselines/baselines/her/her_sampler.py @@ -0,0 +1,63 @@ +import numpy as np + + +def make_sample_her_transitions(replay_strategy, replay_k, reward_fun): + """Creates a sample function that can be used for HER experience replay. + + Args: + replay_strategy (in ['future', 'none']): the HER replay strategy; if set to 'none', + regular DDPG experience replay is used + replay_k (int): the ratio between HER replays and regular replays (e.g. k = 4 -> 4 times + as many HER replays as regular replays are used) + reward_fun (function): function to re-compute the reward with substituted goals + """ + if replay_strategy == 'future': + future_p = 1 - (1. / (1 + replay_k)) + else: # 'replay_strategy' == 'none' + future_p = 0 + + def _sample_her_transitions(episode_batch, batch_size_in_transitions): + """episode_batch is {key: array(buffer_size x T x dim_key)} + """ + T = episode_batch['u'].shape[1] + rollout_batch_size = episode_batch['u'].shape[0] + batch_size = batch_size_in_transitions + + # Select which episodes and time steps to use. + episode_idxs = np.random.randint(0, rollout_batch_size, batch_size) + t_samples = np.random.randint(T, size=batch_size) + transitions = {key: episode_batch[key][episode_idxs, t_samples].copy() + for key in episode_batch.keys()} + + # Select future time indexes proportional with probability future_p. These + # will be used for HER replay by substituting in future goals. + her_indexes = np.where(np.random.uniform(size=batch_size) < future_p) + future_offset = np.random.uniform(size=batch_size) * (T - t_samples) + future_offset = future_offset.astype(int) + future_t = (t_samples + 1 + future_offset)[her_indexes] + + # Replace goal with achieved goal but only for the previously-selected + # HER transitions (as defined by her_indexes). For the other transitions, + # keep the original goal. + future_ag = episode_batch['ag'][episode_idxs[her_indexes], future_t] + transitions['g'][her_indexes] = future_ag + + # Reconstruct info dictionary for reward computation. + info = {} + for key, value in transitions.items(): + if key.startswith('info_'): + info[key.replace('info_', '')] = value + + # Re-compute reward since we may have substituted the goal. + reward_params = {k: transitions[k] for k in ['ag_2', 'g']} + reward_params['info'] = info + transitions['r'] = reward_fun(**reward_params) + + transitions = {k: transitions[k].reshape(batch_size, *transitions[k].shape[1:]) + for k in transitions.keys()} + + assert(transitions['u'].shape[0] == batch_size_in_transitions) + + return transitions + + return _sample_her_transitions diff --git a/baselines/baselines/her/normalizer.py b/baselines/baselines/her/normalizer.py new file mode 100644 index 0000000000000000000000000000000000000000..d02967cd3fcae035f830ebaa1dec75efa9989220 --- /dev/null +++ b/baselines/baselines/her/normalizer.py @@ -0,0 +1,139 @@ +import threading + +import numpy as np +from mpi4py import MPI +import tensorflow as tf + +from baselines.her.util import reshape_for_broadcasting + + +class Normalizer(tf.Module): + def __init__(self, size, eps=1e-2, default_clip_range=np.inf): + """A normalizer that ensures that observations are approximately distributed according to + a standard Normal distribution (i.e. have mean zero and variance one). + + Args: + size (int): the size of the observation to be normalized + eps (float): a small constant that avoids underflows + default_clip_range (float): normalized observations are clipped to be in + [-default_clip_range, default_clip_range] + sess (object): the TensorFlow session to be used + """ + self.size = size + self.eps = eps + self.default_clip_range = default_clip_range + + self.local_sum = np.zeros(self.size, np.float32) + self.local_sumsq = np.zeros(self.size, np.float32) + self.local_count = np.zeros(1, np.float32) + + self.sum_tf = tf.get_variable( + initializer=tf.zeros_initializer(), shape=self.local_sum.shape, name='sum', + trainable=False, dtype=tf.float32) + self.sumsq_tf = tf.get_variable( + initializer=tf.zeros_initializer(), shape=self.local_sumsq.shape, name='sumsq', + trainable=False, dtype=tf.float32) + self.count_tf = tf.get_variable( + initializer=tf.ones_initializer(), shape=self.local_count.shape, name='count', + trainable=False, dtype=tf.float32) + self.mean = tf.get_variable( + initializer=tf.zeros_initializer(), shape=(self.size,), name='mean', + trainable=False, dtype=tf.float32) + self.std = tf.get_variable( + initializer=tf.ones_initializer(), shape=(self.size,), name='std', + trainable=False, dtype=tf.float32) + self.count_pl = tf.placeholder(name='count_pl', shape=(1,), dtype=tf.float32) + self.sum_pl = tf.placeholder(name='sum_pl', shape=(self.size,), dtype=tf.float32) + self.sumsq_pl = tf.placeholder(name='sumsq_pl', shape=(self.size,), dtype=tf.float32) + + self.update_op = tf.group( + self.count_tf.assign_add(self.count_pl), + self.sum_tf.assign_add(self.sum_pl), + self.sumsq_tf.assign_add(self.sumsq_pl) + ) + self.recompute_op = tf.group( + tf.assign(self.mean, self.sum_tf / self.count_tf), + tf.assign(self.std, tf.sqrt(tf.maximum( + tf.square(self.eps), + self.sumsq_tf / self.count_tf - tf.square(self.sum_tf / self.count_tf) + ))), + ) + self.lock = threading.Lock() + + def update(self, v): + v = v.reshape(-1, self.size) + + with self.lock: + self.local_sum += v.sum(axis=0) + self.local_sumsq += (np.square(v)).sum(axis=0) + self.local_count[0] += v.shape[0] + + def normalize(self, v, clip_range=None): + if clip_range is None: + clip_range = self.default_clip_range + mean = reshape_for_broadcasting(self.mean, v) + std = reshape_for_broadcasting(self.std, v) + return tf.clip_by_value((v - mean) / std, -clip_range, clip_range) + + def denormalize(self, v): + mean = reshape_for_broadcasting(self.mean, v) + std = reshape_for_broadcasting(self.std, v) + return mean + v * std + + def _mpi_average(self, x): + buf = np.zeros_like(x) + MPI.COMM_WORLD.Allreduce(x, buf, op=MPI.SUM) + buf /= MPI.COMM_WORLD.Get_size() + return buf + + def synchronize(self, local_sum, local_sumsq, local_count, root=None): + local_sum[...] = self._mpi_average(local_sum) + local_sumsq[...] = self._mpi_average(local_sumsq) + local_count[...] = self._mpi_average(local_count) + return local_sum, local_sumsq, local_count + + def recompute_stats(self): + with self.lock: + # Copy over results. + local_count = self.local_count.copy() + local_sum = self.local_sum.copy() + local_sumsq = self.local_sumsq.copy() + + # Reset. + self.local_count[...] = 0 + self.local_sum[...] = 0 + self.local_sumsq[...] = 0 + + # We perform the synchronization outside of the lock to keep the critical section as short + # as possible. + synced_sum, synced_sumsq, synced_count = self.synchronize( + local_sum=local_sum, local_sumsq=local_sumsq, local_count=local_count) + + self.sess.run(self.update_op, feed_dict={ + self.count_pl: synced_count, + self.sum_pl: synced_sum, + self.sumsq_pl: synced_sumsq, + }) + self.sess.run(self.recompute_op) + + +class IdentityNormalizer: + def __init__(self, size, std=1.): + self.size = size + self.mean = tf.zeros(self.size, tf.float32) + self.std = std * tf.ones(self.size, tf.float32) + + def update(self, x): + pass + + def normalize(self, x, clip_range=None): + return x / self.std + + def denormalize(self, x): + return self.std * x + + def synchronize(self): + pass + + def recompute_stats(self): + pass diff --git a/baselines/baselines/her/replay_buffer.py b/baselines/baselines/her/replay_buffer.py new file mode 100644 index 0000000000000000000000000000000000000000..b0005523fd63a8f85acc50ab8a30b0c2b8253d1f --- /dev/null +++ b/baselines/baselines/her/replay_buffer.py @@ -0,0 +1,108 @@ +import threading + +import numpy as np + + +class ReplayBuffer: + def __init__(self, buffer_shapes, size_in_transitions, T, sample_transitions): + """Creates a replay buffer. + + Args: + buffer_shapes (dict of ints): the shape for all buffers that are used in the replay + buffer + size_in_transitions (int): the size of the buffer, measured in transitions + T (int): the time horizon for episodes + sample_transitions (function): a function that samples from the replay buffer + """ + self.buffer_shapes = buffer_shapes + self.size = size_in_transitions // T + self.T = T + self.sample_transitions = sample_transitions + + # self.buffers is {key: array(size_in_episodes x T or T+1 x dim_key)} + self.buffers = {key: np.empty([self.size, *shape]) + for key, shape in buffer_shapes.items()} + + # memory management + self.current_size = 0 + self.n_transitions_stored = 0 + + self.lock = threading.Lock() + + @property + def full(self): + with self.lock: + return self.current_size == self.size + + def sample(self, batch_size): + """Returns a dict {key: array(batch_size x shapes[key])} + """ + buffers = {} + + with self.lock: + assert self.current_size > 0 + for key in self.buffers.keys(): + buffers[key] = self.buffers[key][:self.current_size] + + buffers['o_2'] = buffers['o'][:, 1:, :] + buffers['ag_2'] = buffers['ag'][:, 1:, :] + + transitions = self.sample_transitions(buffers, batch_size) + + for key in (['r', 'o_2', 'ag_2'] + list(self.buffers.keys())): + assert key in transitions, "key %s missing from transitions" % key + + return transitions + + def store_episode(self, episode_batch): + """episode_batch: array(batch_size x (T or T+1) x dim_key) + """ + batch_sizes = [len(episode_batch[key]) for key in episode_batch.keys()] + assert np.all(np.array(batch_sizes) == batch_sizes[0]) + batch_size = batch_sizes[0] + + with self.lock: + idxs = self._get_storage_idx(batch_size) + + # load inputs into buffers + for key in self.buffers.keys(): + self.buffers[key][idxs] = episode_batch[key] + + self.n_transitions_stored += batch_size * self.T + + def get_current_episode_size(self): + with self.lock: + return self.current_size + + def get_current_size(self): + with self.lock: + return self.current_size * self.T + + def get_transitions_stored(self): + with self.lock: + return self.n_transitions_stored + + def clear_buffer(self): + with self.lock: + self.current_size = 0 + + def _get_storage_idx(self, inc=None): + inc = inc or 1 # size increment + assert inc <= self.size, "Batch committed to replay is too large!" + # go consecutively until you hit the end, and then go randomly. + if self.current_size+inc <= self.size: + idx = np.arange(self.current_size, self.current_size+inc) + elif self.current_size < self.size: + overflow = inc - (self.size - self.current_size) + idx_a = np.arange(self.current_size, self.size) + idx_b = np.random.randint(0, self.current_size, overflow) + idx = np.concatenate([idx_a, idx_b]) + else: + idx = np.random.randint(0, self.size, inc) + + # update replay size + self.current_size = min(self.size, self.current_size+inc) + + if inc == 1: + idx = idx[0] + return idx diff --git a/baselines/baselines/her/rollout.py b/baselines/baselines/her/rollout.py new file mode 100644 index 0000000000000000000000000000000000000000..3235ab78e3cbb70a9e6a0377c9b5c41952506ee7 --- /dev/null +++ b/baselines/baselines/her/rollout.py @@ -0,0 +1,170 @@ +from collections import deque + +import numpy as np +import pickle + +from baselines.her.util import convert_episode_to_batch_major, store_args + + +class RolloutWorker: + + @store_args + def __init__(self, venv, policy, dims, logger, T, rollout_batch_size=1, + exploit=False, use_target_net=False, compute_Q=False, noise_eps=0, + random_eps=0, history_len=100, render=False, monitor=False, **kwargs): + """Rollout worker generates experience by interacting with one or many environments. + + Args: + make_env (function): a factory function that creates a new instance of the environment + when called + policy (object): the policy that is used to act + dims (dict of ints): the dimensions for observations (o), goals (g), and actions (u) + logger (object): the logger that is used by the rollout worker + rollout_batch_size (int): the number of parallel rollouts that should be used + exploit (boolean): whether or not to exploit, i.e. to act optimally according to the + current policy without any exploration + use_target_net (boolean): whether or not to use the target net for rollouts + compute_Q (boolean): whether or not to compute the Q values alongside the actions + noise_eps (float): scale of the additive Gaussian noise + random_eps (float): probability of selecting a completely random action + history_len (int): length of history for statistics smoothing + render (boolean): whether or not to render the rollouts + """ + + assert self.T > 0 + + self.info_keys = [key.replace('info_', '') for key in dims.keys() if key.startswith('info_')] + + self.success_history = deque(maxlen=history_len) + self.Q_history = deque(maxlen=history_len) + + self.n_episodes = 0 + self.reset_all_rollouts() + self.clear_history() + + def reset_all_rollouts(self): + self.obs_dict = self.venv.reset() + self.initial_o = self.obs_dict['observation'] + self.initial_ag = self.obs_dict['achieved_goal'] + self.g = self.obs_dict['desired_goal'] + + def generate_rollouts(self): + """Performs `rollout_batch_size` rollouts in parallel for time horizon `T` with the current + policy acting on it accordingly. + """ + self.reset_all_rollouts() + + # compute observations + o = np.empty((self.rollout_batch_size, self.dims['o']), np.float32) # observations + ag = np.empty((self.rollout_batch_size, self.dims['g']), np.float32) # achieved goals + o[:] = self.initial_o + ag[:] = self.initial_ag + + # generate episodes + obs, achieved_goals, acts, goals, successes = [], [], [], [], [] + dones = [] + info_values = [np.empty((self.T - 1, self.rollout_batch_size, self.dims['info_' + key]), np.float32) for key in self.info_keys] + Qs = [] + for t in range(self.T): + policy_output = self.policy.get_actions( + o, ag, self.g, + compute_Q=self.compute_Q, + noise_eps=self.noise_eps if not self.exploit else 0., + random_eps=self.random_eps if not self.exploit else 0., + use_target_net=self.use_target_net) + + if self.compute_Q: + u, Q = policy_output + Qs.append(Q) + else: + u = policy_output + + if u.ndim == 1: + # The non-batched case should still have a reasonable shape. + u = u.reshape(1, -1) + + o_new = np.empty((self.rollout_batch_size, self.dims['o'])) + ag_new = np.empty((self.rollout_batch_size, self.dims['g'])) + success = np.zeros(self.rollout_batch_size) + # compute new states and observations + obs_dict_new, _, done, info = self.venv.step(u) + o_new = obs_dict_new['observation'] + ag_new = obs_dict_new['achieved_goal'] + success = np.array([i.get('is_success', 0.0) for i in info]) + + if any(done): + # here we assume all environments are done is ~same number of steps, so we terminate rollouts whenever any of the envs returns done + # trick with using vecenvs is not to add the obs from the environments that are "done", because those are already observations + # after a reset + break + + for i, info_dict in enumerate(info): + for idx, key in enumerate(self.info_keys): + info_values[idx][t, i] = info[i][key] + + if np.isnan(o_new).any(): + self.logger.warn('NaN caught during rollout generation. Trying again...') + self.reset_all_rollouts() + return self.generate_rollouts() + + dones.append(done) + obs.append(o.copy()) + achieved_goals.append(ag.copy()) + successes.append(success.copy()) + acts.append(u.copy()) + goals.append(self.g.copy()) + o[...] = o_new + ag[...] = ag_new + obs.append(o.copy()) + achieved_goals.append(ag.copy()) + + episode = dict(o=obs, + u=acts, + g=goals, + ag=achieved_goals) + for key, value in zip(self.info_keys, info_values): + episode['info_{}'.format(key)] = value + + # stats + successful = np.array(successes)[-1, :] + assert successful.shape == (self.rollout_batch_size,) + success_rate = np.mean(successful) + self.success_history.append(success_rate) + if self.compute_Q: + self.Q_history.append(np.mean(Qs)) + self.n_episodes += self.rollout_batch_size + + return convert_episode_to_batch_major(episode) + + def clear_history(self): + """Clears all histories that are used for statistics + """ + self.success_history.clear() + self.Q_history.clear() + + def current_success_rate(self): + return np.mean(self.success_history) + + def current_mean_Q(self): + return np.mean(self.Q_history) + + def save_policy(self, path): + """Pickles the current policy for later inspection. + """ + with open(path, 'wb') as f: + pickle.dump(self.policy, f) + + def logs(self, prefix='worker'): + """Generates a dictionary that contains all collected statistics. + """ + logs = [] + logs += [('success_rate', np.mean(self.success_history))] + if self.compute_Q: + logs += [('mean_Q', np.mean(self.Q_history))] + logs += [('episode', self.n_episodes)] + + if prefix != '' and not prefix.endswith('/'): + return [(prefix + '/' + key, val) for key, val in logs] + else: + return logs + diff --git a/baselines/baselines/her/util.py b/baselines/baselines/her/util.py new file mode 100644 index 0000000000000000000000000000000000000000..9a4947b66c9a6513ca2dcba74fa177f3ab96fc19 --- /dev/null +++ b/baselines/baselines/her/util.py @@ -0,0 +1,137 @@ +import os +import subprocess +import sys +import importlib +import inspect +import functools + +import tensorflow as tf +import numpy as np + +from baselines.common import tf_util as U + + +def store_args(method): + """Stores provided method args as instance attributes. + """ + argspec = inspect.getfullargspec(method) + defaults = {} + if argspec.defaults is not None: + defaults = dict( + zip(argspec.args[-len(argspec.defaults):], argspec.defaults)) + if argspec.kwonlydefaults is not None: + defaults.update(argspec.kwonlydefaults) + arg_names = argspec.args[1:] + + @functools.wraps(method) + def wrapper(*positional_args, **keyword_args): + self = positional_args[0] + # Get default arg values + args = defaults.copy() + # Add provided arg values + for name, value in zip(arg_names, positional_args[1:]): + args[name] = value + args.update(keyword_args) + self.__dict__.update(args) + return method(*positional_args, **keyword_args) + + return wrapper + + +def import_function(spec): + """Import a function identified by a string like "pkg.module:fn_name". + """ + mod_name, fn_name = spec.split(':') + module = importlib.import_module(mod_name) + fn = getattr(module, fn_name) + return fn + + +def flatten_grads(var_list, grads): + """Flattens a variables and their gradients. + """ + return tf.concat([tf.reshape(grad, [U.numel(v)]) + for (v, grad) in zip(var_list, grads)], 0) + + +def nn(input_shape, layers_sizes, name="", output_activation=None): + """Creates a simple neural network + """ + print('input shape is {}'.format(input_shape)) + x_input = tf.keras.Input(shape=input_shape) + h = x_input + for i, size in enumerate(layers_sizes): + activation = 'relu' if i < len(layers_sizes) - 1 else output_activation + h = tf.keras.layers.Dense( + units=size, kernel_initializer='glorot_uniform', activation=activation, + name=name + '_' + str(i))(h) + network = tf.keras.Model(inputs=[x_input], outputs=[h]) + return network + + +def install_mpi_excepthook(): + import sys + from mpi4py import MPI + old_hook = sys.excepthook + + def new_hook(a, b, c): + old_hook(a, b, c) + sys.stdout.flush() + sys.stderr.flush() + MPI.COMM_WORLD.Abort() + sys.excepthook = new_hook + + +def mpi_fork(n, extra_mpi_args=[]): + """Re-launches the current script with workers + Returns "parent" for original parent, "child" for MPI children + """ + if n <= 1: + return "child" + if os.getenv("IN_MPI") is None: + env = os.environ.copy() + env.update( + MKL_NUM_THREADS="1", + OMP_NUM_THREADS="1", + IN_MPI="1" + ) + # "-bind-to core" is crucial for good performance + args = ["mpirun", "-np", str(n)] + \ + extra_mpi_args + \ + [sys.executable] + + args += sys.argv + subprocess.check_call(args, env=env) + return "parent" + else: + install_mpi_excepthook() + return "child" + + +def convert_episode_to_batch_major(episode): + """Converts an episode to have the batch dimension in the major (first) + dimension. + """ + episode_batch = {} + for key in episode.keys(): + val = np.array(episode[key]).copy() + # make inputs batch-major instead of time-major + episode_batch[key] = val.swapaxes(0, 1) + + return episode_batch + + +def transitions_in_episode_batch(episode_batch): + """Number of transitions in a given episode batch. + """ + shape = episode_batch['u'].shape + return shape[0] * shape[1] + + +def reshape_for_broadcasting(source, target): + """Reshapes a tensor (source) to have the correct shape and dtype of the target + before broadcasting it with MPI. + """ + dim = len(target.get_shape()) + shape = ([1] * (dim - 1)) + [-1] + return tf.reshape(tf.cast(source, target.dtype), shape) diff --git a/baselines/baselines/logger.py b/baselines/baselines/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..e74f99bc0beabaa1cff5c464b9fa96c3d996afd1 --- /dev/null +++ b/baselines/baselines/logger.py @@ -0,0 +1,501 @@ +import os +import sys +import shutil +import os.path as osp +import json +import time +import datetime +import tempfile +from collections import defaultdict +from contextlib import contextmanager + +DEBUG = 10 +INFO = 20 +WARN = 30 +ERROR = 40 + +DISABLED = 50 + +class KVWriter(object): + def writekvs(self, kvs): + raise NotImplementedError + +class SeqWriter(object): + def writeseq(self, seq): + raise NotImplementedError + +class HumanOutputFormat(KVWriter, SeqWriter): + def __init__(self, filename_or_file): + if isinstance(filename_or_file, str): + self.file = open(filename_or_file, 'wt') + self.own_file = True + else: + assert hasattr(filename_or_file, 'read'), 'expected file or str, got %s'%filename_or_file + self.file = filename_or_file + self.own_file = False + + def writekvs(self, kvs): + # Create strings for printing + key2str = {} + for (key, val) in sorted(kvs.items()): + if isinstance(val, float): + valstr = '%-8.3g' % (val,) + else: + valstr = str(val) + key2str[self._truncate(key)] = self._truncate(valstr) + + # Find max widths + if len(key2str) == 0: + print('WARNING: tried to write empty key-value dict') + return + else: + keywidth = max(map(len, key2str.keys())) + valwidth = max(map(len, key2str.values())) + + # Write out the data + dashes = '-' * (keywidth + valwidth + 7) + lines = [dashes] + for (key, val) in sorted(key2str.items(), key=lambda kv: kv[0].lower()): + lines.append('| %s%s | %s%s |' % ( + key, + ' ' * (keywidth - len(key)), + val, + ' ' * (valwidth - len(val)), + )) + lines.append(dashes) + self.file.write('\n'.join(lines) + '\n') + + # Flush the output to the file + self.file.flush() + + def _truncate(self, s): + maxlen = 30 + return s[:maxlen-3] + '...' if len(s) > maxlen else s + + def writeseq(self, seq): + seq = list(seq) + for (i, elem) in enumerate(seq): + self.file.write(elem) + if i < len(seq) - 1: # add space unless this is the last one + self.file.write(' ') + self.file.write('\n') + self.file.flush() + + def close(self): + if self.own_file: + self.file.close() + +class JSONOutputFormat(KVWriter): + def __init__(self, filename): + self.file = open(filename, 'wt') + + def writekvs(self, kvs): + for k, v in sorted(kvs.items()): + if hasattr(v, 'dtype'): + v = v.tolist() + kvs[k] = float(v) + self.file.write(json.dumps(kvs) + '\n') + self.file.flush() + + def close(self): + self.file.close() + +class CSVOutputFormat(KVWriter): + def __init__(self, filename): + self.file = open(filename, 'w+t') + self.keys = [] + self.sep = ',' + + def writekvs(self, kvs): + # Add our current row to the history + extra_keys = list(kvs.keys() - self.keys) + extra_keys.sort() + if extra_keys: + self.keys.extend(extra_keys) + self.file.seek(0) + lines = self.file.readlines() + self.file.seek(0) + for (i, k) in enumerate(self.keys): + if i > 0: + self.file.write(',') + self.file.write(k) + self.file.write('\n') + for line in lines[1:]: + self.file.write(line[:-1]) + self.file.write(self.sep * len(extra_keys)) + self.file.write('\n') + for (i, k) in enumerate(self.keys): + if i > 0: + self.file.write(',') + v = kvs.get(k) + if v is not None: + self.file.write(str(v)) + self.file.write('\n') + self.file.flush() + + def close(self): + self.file.close() + + +class TensorBoardOutputFormat(KVWriter): + """ + Dumps key/value pairs into TensorBoard's numeric format. + """ + def __init__(self, dir): + os.makedirs(dir, exist_ok=True) + self.dir = dir + self.step = 1 + prefix = 'events' + path = osp.join(osp.abspath(dir), prefix) + import tensorflow as tf + from tensorflow.python import pywrap_tensorflow + from tensorflow.core.util import event_pb2 + from tensorflow.python.util import compat + self.tf = tf + self.event_pb2 = event_pb2 + self.pywrap_tensorflow = pywrap_tensorflow + self.writer = pywrap_tensorflow.EventsWriter(compat.as_bytes(path)) + + def writekvs(self, kvs): + def summary_val(k, v): + kwargs = {'tag': k, 'simple_value': float(v)} + return self.tf.Summary.Value(**kwargs) + summary = self.tf.Summary(value=[summary_val(k, v) for k, v in kvs.items()]) + event = self.event_pb2.Event(wall_time=time.time(), summary=summary) + event.step = self.step # is there any reason why you'd want to specify the step? + self.writer.WriteEvent(event) + self.writer.Flush() + self.step += 1 + + def close(self): + if self.writer: + self.writer.Close() + self.writer = None + +def make_output_format(format, ev_dir, log_suffix=''): + os.makedirs(ev_dir, exist_ok=True) + if format == 'stdout': + return HumanOutputFormat(sys.stdout) + elif format == 'log': + return HumanOutputFormat(osp.join(ev_dir, 'log%s.txt' % log_suffix)) + elif format == 'json': + return JSONOutputFormat(osp.join(ev_dir, 'progress%s.json' % log_suffix)) + elif format == 'csv': + return CSVOutputFormat(osp.join(ev_dir, 'progress%s.csv' % log_suffix)) + elif format == 'tensorboard': + return TensorBoardOutputFormat(osp.join(ev_dir, 'tb%s' % log_suffix)) + else: + raise ValueError('Unknown format specified: %s' % (format,)) + +# ================================================================ +# API +# ================================================================ + +def logkv(key, val): + """ + Log a value of some diagnostic + Call this once for each diagnostic quantity, each iteration + If called many times, last value will be used. + """ + get_current().logkv(key, val) + +def logkv_mean(key, val): + """ + The same as logkv(), but if called many times, values averaged. + """ + get_current().logkv_mean(key, val) + +def logkvs(d): + """ + Log a dictionary of key-value pairs + """ + for (k, v) in d.items(): + logkv(k, v) + +def dumpkvs(): + """ + Write all of the diagnostics from the current iteration + """ + return get_current().dumpkvs() + +def getkvs(): + return get_current().name2val + + +def log(*args, level=INFO): + """ + Write the sequence of args, with no separators, to the console and output files (if you've configured an output file). + """ + get_current().log(*args, level=level) + +def debug(*args): + log(*args, level=DEBUG) + +def info(*args): + log(*args, level=INFO) + +def warn(*args): + log(*args, level=WARN) + +def error(*args): + log(*args, level=ERROR) + + +def set_level(level): + """ + Set logging threshold on current logger. + """ + get_current().set_level(level) + +def set_comm(comm): + get_current().set_comm(comm) + +def get_dir(): + """ + Get directory that log files are being written to. + will be None if there is no output directory (i.e., if you didn't call start) + """ + return get_current().get_dir() + +record_tabular = logkv +dump_tabular = dumpkvs + +@contextmanager +def profile_kv(scopename): + logkey = 'wait_' + scopename + tstart = time.time() + try: + yield + finally: + get_current().name2val[logkey] += time.time() - tstart + +def profile(n): + """ + Usage: + @profile("my_func") + def my_func(): code + """ + def decorator_with_name(func): + def func_wrapper(*args, **kwargs): + with profile_kv(n): + return func(*args, **kwargs) + return func_wrapper + return decorator_with_name + + +# ================================================================ +# Backend +# ================================================================ + +def get_current(): + if Logger.CURRENT is None: + _configure_default_logger() + + return Logger.CURRENT + + +class Logger(object): + DEFAULT = None # A logger with no output files. (See right below class definition) + # So that you can still log to the terminal without setting up any output files + CURRENT = None # Current logger being used by the free functions above + + def __init__(self, dir, output_formats, comm=None): + self.name2val = defaultdict(float) # values this iteration + self.name2cnt = defaultdict(int) + self.level = INFO + self.dir = dir + self.output_formats = output_formats + self.comm = comm + + # Logging API, forwarded + # ---------------------------------------- + def logkv(self, key, val): + self.name2val[key] = val + + def logkv_mean(self, key, val): + oldval, cnt = self.name2val[key], self.name2cnt[key] + self.name2val[key] = oldval*cnt/(cnt+1) + val/(cnt+1) + self.name2cnt[key] = cnt + 1 + + def dumpkvs(self): + if self.comm is None: + d = self.name2val + else: + from baselines.common import mpi_util + d = mpi_util.mpi_weighted_mean(self.comm, + {name : (val, self.name2cnt.get(name, 1)) + for (name, val) in self.name2val.items()}) + if self.comm.rank != 0: + d['dummy'] = 1 # so we don't get a warning about empty dict + out = d.copy() # Return the dict for unit testing purposes + for fmt in self.output_formats: + if isinstance(fmt, KVWriter): + fmt.writekvs(d) + self.name2val.clear() + self.name2cnt.clear() + return out + + def log(self, *args, level=INFO): + if self.level <= level: + self._do_log(args) + + # Configuration + # ---------------------------------------- + def set_level(self, level): + self.level = level + + def set_comm(self, comm): + self.comm = comm + + def get_dir(self): + return self.dir + + def close(self): + for fmt in self.output_formats: + fmt.close() + + # Misc + # ---------------------------------------- + def _do_log(self, args): + for fmt in self.output_formats: + if isinstance(fmt, SeqWriter): + fmt.writeseq(map(str, args)) + +def get_rank_without_mpi_import(): + # check environment variables here instead of importing mpi4py + # to avoid calling MPI_Init() when this module is imported + for varname in ['PMI_RANK', 'OMPI_COMM_WORLD_RANK']: + if varname in os.environ: + return int(os.environ[varname]) + return 0 + +def configure(dir=None, format_strs=None, comm=None, log_suffix=''): + """ + If comm is provided, average all numerical stats across that comm + """ + if dir is None: + dir = os.getenv('OPENAI_LOGDIR') + if dir is None: + dir = osp.join(tempfile.gettempdir(), + datetime.datetime.now().strftime("openai-%Y-%m-%d-%H-%M-%S-%f")) + assert isinstance(dir, str) + dir = os.path.expanduser(dir) + os.makedirs(os.path.expanduser(dir), exist_ok=True) + + rank = get_rank_without_mpi_import() + if rank > 0: + log_suffix = "-rank%03i" % rank + + if format_strs is None: + if rank == 0: + format_strs = os.getenv('OPENAI_LOG_FORMAT', 'stdout,log,csv').split(',') + else: + format_strs = os.getenv('OPENAI_LOG_FORMAT_MPI', 'log').split(',') + format_strs = filter(None, format_strs) + output_formats = [make_output_format(f, dir, log_suffix) for f in format_strs] + + Logger.CURRENT = Logger(dir=dir, output_formats=output_formats, comm=comm) + log('Logging to %s'%dir) + +def _configure_default_logger(): + configure() + Logger.DEFAULT = Logger.CURRENT + +def reset(): + if Logger.CURRENT is not Logger.DEFAULT: + Logger.CURRENT.close() + Logger.CURRENT = Logger.DEFAULT + log('Reset logger') + +@contextmanager +def scoped_configure(dir=None, format_strs=None, comm=None): + prevlogger = Logger.CURRENT + configure(dir=dir, format_strs=format_strs, comm=comm) + try: + yield + finally: + Logger.CURRENT.close() + Logger.CURRENT = prevlogger + +# ================================================================ + +def _demo(): + info("hi") + debug("shouldn't appear") + set_level(DEBUG) + debug("should appear") + dir = "/tmp/testlogging" + if os.path.exists(dir): + shutil.rmtree(dir) + configure(dir=dir) + logkv("a", 3) + logkv("b", 2.5) + dumpkvs() + logkv("b", -2.5) + logkv("a", 5.5) + dumpkvs() + info("^^^ should see a = 5.5") + logkv_mean("b", -22.5) + logkv_mean("b", -44.4) + logkv("a", 5.5) + dumpkvs() + info("^^^ should see b = -33.3") + + logkv("b", -2.5) + dumpkvs() + + logkv("a", "longasslongasslongasslongasslongasslongassvalue") + dumpkvs() + + +# ================================================================ +# Readers +# ================================================================ + +def read_json(fname): + import pandas + ds = [] + with open(fname, 'rt') as fh: + for line in fh: + ds.append(json.loads(line)) + return pandas.DataFrame(ds) + +def read_csv(fname): + import pandas + return pandas.read_csv(fname, index_col=None, comment='#') + +def read_tb(path): + """ + path : a tensorboard file OR a directory, where we will find all TB files + of the form events.* + """ + import pandas + import numpy as np + from glob import glob + import tensorflow as tf + if osp.isdir(path): + fnames = glob(osp.join(path, "events.*")) + elif osp.basename(path).startswith("events."): + fnames = [path] + else: + raise NotImplementedError("Expected tensorboard file or directory containing them. Got %s"%path) + tag2pairs = defaultdict(list) + maxstep = 0 + for fname in fnames: + for summary in tf.train.summary_iterator(fname): + if summary.step > 0: + for v in summary.summary.value: + pair = (summary.step, v.simple_value) + tag2pairs[v.tag].append(pair) + maxstep = max(summary.step, maxstep) + data = np.empty((maxstep, len(tag2pairs))) + data[:] = np.nan + tags = sorted(tag2pairs.keys()) + for (colidx,tag) in enumerate(tags): + pairs = tag2pairs[tag] + for (step, value) in pairs: + data[step-1, colidx] = value + return pandas.DataFrame(data, columns=tags) + +if __name__ == "__main__": + _demo() diff --git a/baselines/baselines/ppo2/README.md b/baselines/baselines/ppo2/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4d431bca967caffedb5ea76ef38af4b9d99571d8 --- /dev/null +++ b/baselines/baselines/ppo2/README.md @@ -0,0 +1,8 @@ +# PPO2 + +- Original paper: https://arxiv.org/abs/1707.06347 +- Baselines blog post: https://blog.openai.com/openai-baselines-ppo/ + +- `python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4` runs the algorithm for 40M frames = 10M timesteps on an Atari Pong. See help (`-h`) for more options. +- `python -m baselines.run --alg=ppo2 --env=Ant-v2 --num_timesteps=1e6` runs the algorithm for 1M frames on a Mujoco Ant environment. +- also refer to the repo-wide [README.md](../../README.md#training-models) diff --git a/baselines/baselines/ppo2/__init__.py b/baselines/baselines/ppo2/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/ppo2/defaults.py b/baselines/baselines/ppo2/defaults.py new file mode 100644 index 0000000000000000000000000000000000000000..9f3f96e976e3f02f5819476f9e81896d5b8e8898 --- /dev/null +++ b/baselines/baselines/ppo2/defaults.py @@ -0,0 +1,25 @@ +def mujoco(): + return dict( + nsteps=2048, + nminibatches=32, + lam=0.95, + gamma=0.99, + noptepochs=10, + log_interval=1, + ent_coef=0.0, + lr=lambda f: 3e-4 * f, + cliprange=0.2, + value_network='copy' + ) + +def atari(): + return dict( + nsteps=128, nminibatches=4, + lam=0.95, gamma=0.99, noptepochs=4, log_interval=1, + ent_coef=.01, + lr=lambda f : f * 2.5e-4, + cliprange=0.1, + ) + +def retro(): + return atari() diff --git a/baselines/baselines/ppo2/model.py b/baselines/baselines/ppo2/model.py new file mode 100644 index 0000000000000000000000000000000000000000..f83d88cc98752116fdf2b707f38332ce3ce741dd --- /dev/null +++ b/baselines/baselines/ppo2/model.py @@ -0,0 +1,90 @@ +import tensorflow as tf +from baselines.common.policies import PolicyWithValue + +try: + from baselines.common.mpi_adam_optimizer import MpiAdamOptimizer + from mpi4py import MPI + from baselines.common.mpi_util import sync_from_root +except ImportError: + MPI = None + +class Model(tf.Module): + """ + We use this object to : + __init__: + - Creates the step_model + - Creates the train_model + + train(): + - Make the training part (feedforward and retropropagation of gradients) + + save/load(): + - Save load the model + """ + def __init__(self, *, ac_space, policy_network, value_network=None, ent_coef, vf_coef, max_grad_norm): + super(Model, self).__init__(name='PPO2Model') + self.train_model = PolicyWithValue(ac_space, policy_network, value_network, estimate_q=False) + if MPI is not None: + self.optimizer = MpiAdamOptimizer(MPI.COMM_WORLD, self.train_model.trainable_variables) + else: + self.optimizer = tf.keras.optimizers.Adam() + self.ent_coef = ent_coef + self.vf_coef = vf_coef + self.max_grad_norm = max_grad_norm + self.step = self.train_model.step + self.value = self.train_model.value + self.initial_state = self.train_model.initial_state + self.loss_names = ['policy_loss', 'value_loss', 'policy_entropy', 'approxkl', 'clipfrac'] + if MPI is not None: + sync_from_root(self.variables) + + def train(self, lr, cliprange, obs, returns, masks, actions, values, neglogpac_old, states=None): + grads, pg_loss, vf_loss, entropy, approxkl, clipfrac = self.get_grad( + cliprange, obs, returns, masks, actions, values, neglogpac_old) + if MPI is not None: + self.optimizer.apply_gradients(grads, lr) + else: + self.optimizer.learning_rate = lr + grads_and_vars = zip(grads, self.train_model.trainable_variables) + self.optimizer.apply_gradients(grads_and_vars) + + return pg_loss, vf_loss, entropy, approxkl, clipfrac + + + @tf.function + def get_grad(self, cliprange, obs, returns, masks, actions, values, neglogpac_old): + # Here we calculate advantage A(s,a) = R + yV(s') - V(s) + # Returns = R + yV(s') + advs = returns - values + + # Normalize the advantages + advs = (advs - tf.reduce_mean(advs)) / (tf.keras.backend.std(advs) + 1e-8) + + with tf.GradientTape() as tape: + policy_latent = self.train_model.policy_network(obs) + pd, _ = self.train_model.pdtype.pdfromlatent(policy_latent) + neglogpac = pd.neglogp(actions) + entropy = tf.reduce_mean(pd.entropy()) + vpred = self.train_model.value(obs) + vpredclipped = values + tf.clip_by_value(vpred - values, -cliprange, cliprange) + vf_losses1 = tf.square(vpred - returns) + vf_losses2 = tf.square(vpredclipped - returns) + vf_loss = .5 * tf.reduce_mean(tf.maximum(vf_losses1, vf_losses2)) + + ratio = tf.exp(neglogpac_old - neglogpac) + pg_losses1 = -advs * ratio + pg_losses2 = -advs * tf.clip_by_value(ratio, 1-cliprange, 1+cliprange) + pg_loss = tf.reduce_mean(tf.maximum(pg_losses1, pg_losses2)) + + approxkl = .5 * tf.reduce_mean(tf.square(neglogpac - neglogpac_old)) + clipfrac = tf.reduce_mean(tf.cast(tf.greater(tf.abs(ratio - 1.0), cliprange), tf.float32)) + + loss = pg_loss - entropy * self.ent_coef + vf_loss * self.vf_coef + + var_list = self.train_model.trainable_variables + grads = tape.gradient(loss, var_list) + if self.max_grad_norm is not None: + grads, _ = tf.clip_by_global_norm(grads, self.max_grad_norm) + if MPI is not None: + grads = tf.concat([tf.reshape(g, (-1,)) for g in grads], axis=0) + return grads, pg_loss, vf_loss, entropy, approxkl, clipfrac \ No newline at end of file diff --git a/baselines/baselines/ppo2/ppo2.py b/baselines/baselines/ppo2/ppo2.py new file mode 100644 index 0000000000000000000000000000000000000000..ec127adf7a6f3edfc08f7119d3a3544716b92498 --- /dev/null +++ b/baselines/baselines/ppo2/ppo2.py @@ -0,0 +1,200 @@ +import time +import numpy as np +import tensorflow as tf +import os.path as osp +from baselines import logger +from collections import deque +from baselines.common import explained_variance, set_global_seeds +from baselines.common.models import get_network_builder +try: + from mpi4py import MPI +except ImportError: + MPI = None +from baselines.ppo2.runner import Runner + +def constfn(val): + def f(_): + return val + return f + +def learn(*, network, env, total_timesteps, eval_env = None, seed=None, nsteps=2048, ent_coef=0.0, lr=3e-4, + vf_coef=0.5, max_grad_norm=0.5, gamma=0.99, lam=0.95, + log_interval=10, nminibatches=4, noptepochs=4, cliprange=0.2, + save_interval=0, load_path=None, model_fn=None, **network_kwargs): + ''' + Learn policy using PPO algorithm (https://arxiv.org/abs/1707.06347) + + Parameters: + ---------- + + network: policy network architecture. Either string (mlp, lstm, lnlstm, cnn_lstm, cnn, cnn_small, conv_only - see baselines.common/models.py for full list) + specifying the standard network architecture, or a function that takes tensorflow tensor as input and returns + tuple (output_tensor, extra_feed) where output tensor is the last network layer output, extra_feed is None for feed-forward + neural nets, and extra_feed is a dictionary describing how to feed state into the network for recurrent neural nets. + See common/models.py/lstm for more details on using recurrent nets in policies + + env: baselines.common.vec_env.VecEnv environment. Needs to be vectorized for parallel environment simulation. + The environments produced by gym.make can be wrapped using baselines.common.vec_env.DummyVecEnv class. + + + nsteps: int number of steps of the vectorized environment per update (i.e. batch size is nsteps * nenv where + nenv is number of environment copies simulated in parallel) + + total_timesteps: int number of timesteps (i.e. number of actions taken in the environment) + + ent_coef: float policy entropy coefficient in the optimization objective + + lr: float or function learning rate, constant or a schedule function [0,1] -> R+ where 1 is beginning of the + training and 0 is the end of the training. + + vf_coef: float value function loss coefficient in the optimization objective + + max_grad_norm: float or None gradient norm clipping coefficient + + gamma: float discounting factor + + lam: float advantage estimation discounting factor (lambda in the paper) + + log_interval: int number of timesteps between logging events + + nminibatches: int number of training minibatches per update. For recurrent policies, + should be smaller or equal than number of environments run in parallel. + + noptepochs: int number of training epochs per update + + cliprange: float or function clipping range, constant or schedule function [0,1] -> R+ where 1 is beginning of the training + and 0 is the end of the training + + save_interval: int number of timesteps between saving events + + load_path: str path to load the model from + + **network_kwargs: keyword arguments to the policy / network builder. See baselines.common/policies.py/build_policy and arguments to a particular type of network + For instance, 'mlp' network architecture has arguments num_hidden and num_layers. + + + + ''' + + set_global_seeds(seed) + + if isinstance(lr, float): lr = constfn(lr) + else: assert callable(lr) + if isinstance(cliprange, float): cliprange = constfn(cliprange) + else: assert callable(cliprange) + total_timesteps = int(total_timesteps) + + # Get the nb of env + nenvs = env.num_envs + + # Get state_space and action_space + ob_space = env.observation_space + ac_space = env.action_space + + if isinstance(network, str): + network_type = network + policy_network_fn = get_network_builder(network_type)(**network_kwargs) + network = policy_network_fn(ob_space.shape) + + # Calculate the batch_size + nbatch = nenvs * nsteps + nbatch_train = nbatch // nminibatches + is_mpi_root = (MPI is None or MPI.COMM_WORLD.Get_rank() == 0) + + # Instantiate the model object (that creates act_model and train_model) + if model_fn is None: + from baselines.ppo2.model import Model + model_fn = Model + + model = model_fn(ac_space=ac_space, policy_network=network, ent_coef=ent_coef, vf_coef=vf_coef, + max_grad_norm=max_grad_norm) + + if load_path is not None: + load_path = osp.expanduser(load_path) + ckpt = tf.train.Checkpoint(model=model) + manager = tf.train.CheckpointManager(ckpt, load_path, max_to_keep=None) + ckpt.restore(manager.latest_checkpoint) + + # Instantiate the runner object + runner = Runner(env=env, model=model, nsteps=nsteps, gamma=gamma, lam=lam) + if eval_env is not None: + eval_runner = Runner(env = eval_env, model = model, nsteps = nsteps, gamma = gamma, lam= lam) + + epinfobuf = deque(maxlen=100) + if eval_env is not None: + eval_epinfobuf = deque(maxlen=100) + + # Start total timer + tfirststart = time.perf_counter() + + nupdates = total_timesteps//nbatch + for update in range(1, nupdates+1): + assert nbatch % nminibatches == 0 + # Start timer + tstart = time.perf_counter() + frac = 1.0 - (update - 1.0) / nupdates + # Calculate the learning rate + lrnow = lr(frac) + cliprangenow = cliprange(frac) + + if update % log_interval == 0 and is_mpi_root: logger.info('Stepping environment...') + + # Get minibatch + obs, returns, masks, actions, values, neglogpacs, states, epinfos = runner.run() #pylint: disable=E0632 + if eval_env is not None: + eval_obs, eval_returns, eval_masks, eval_actions, eval_values, eval_neglogpacs, eval_states, eval_epinfos = eval_runner.run() #pylint: disable=E0632 + + epinfobuf.extend(epinfos) + if eval_env is not None: + eval_epinfobuf.extend(eval_epinfos) + + # Here what we're going to do is for each minibatch calculate the loss and append it. + mblossvals = [] + if states is None: # nonrecurrent version + # Index of each element of batch_size + # Create the indices array + inds = np.arange(nbatch) + for _ in range(noptepochs): + # Randomize the indexes + np.random.shuffle(inds) + # 0 to batch_size with batch_train_size step + for start in range(0, nbatch, nbatch_train): + end = start + nbatch_train + mbinds = inds[start:end] + slices = (tf.constant(arr[mbinds]) for arr in (obs, returns, masks, actions, values, neglogpacs)) + mblossvals.append(model.train(lrnow, cliprangenow, *slices)) + else: # recurrent version + raise ValueError('Not Support Yet') + + # Feedforward --> get losses --> update + lossvals = np.mean(mblossvals, axis=0) + # End timer + tnow = time.perf_counter() + # Calculate the fps (frame per second) + fps = int(nbatch / (tnow - tstart)) + if update % log_interval == 0 or update == 1: + # Calculates if value function is a good predicator of the returns (ev > 1) + # or if it's just worse than predicting nothing (ev =< 0) + ev = explained_variance(values, returns) + logger.logkv("misc/serial_timesteps", update*nsteps) + logger.logkv("misc/nupdates", update) + logger.logkv("misc/total_timesteps", update*nbatch) + logger.logkv("fps", fps) + logger.logkv("misc/explained_variance", float(ev)) + logger.logkv('eprewmean', safemean([epinfo['r'] for epinfo in epinfobuf])) + logger.logkv('eplenmean', safemean([epinfo['l'] for epinfo in epinfobuf])) + if eval_env is not None: + logger.logkv('eval_eprewmean', safemean([epinfo['r'] for epinfo in eval_epinfobuf]) ) + logger.logkv('eval_eplenmean', safemean([epinfo['l'] for epinfo in eval_epinfobuf]) ) + logger.logkv('misc/time_elapsed', tnow - tfirststart) + for (lossval, lossname) in zip(lossvals, model.loss_names): + logger.logkv('loss/' + lossname, lossval) + + logger.dumpkvs() + + return model +# Avoid division error when calculate the mean (in our case if epinfo is empty returns np.nan, not return an error) +def safemean(xs): + return np.nan if len(xs) == 0 else np.mean(xs) + + diff --git a/baselines/baselines/ppo2/runner.py b/baselines/baselines/ppo2/runner.py new file mode 100644 index 0000000000000000000000000000000000000000..af5470b1555c0be7011f624d26e7f75515dd5182 --- /dev/null +++ b/baselines/baselines/ppo2/runner.py @@ -0,0 +1,79 @@ +import numpy as np +import tensorflow as tf +from baselines.common.runners import AbstractEnvRunner + +class Runner(AbstractEnvRunner): + """ + We use this object to make a mini batch of experiences + __init__: + - Initialize the runner + + run(): + - Make a mini batch + """ + def __init__(self, *, env, model, nsteps, gamma, lam): + super().__init__(env=env, model=model, nsteps=nsteps) + # Lambda used in GAE (General Advantage Estimation) + self.lam = lam + # Discount rate + self.gamma = gamma + + def run(self): + # Here, we init the lists that will contain the mb of experiences + mb_obs, mb_rewards, mb_actions, mb_values, mb_dones, mb_neglogpacs = [],[],[],[],[],[] + mb_states = self.states + epinfos = [] + # For n in range number of steps + for _ in range(self.nsteps): + # Given observations, get action value and neglopacs + # We already have self.obs because Runner superclass run self.obs[:] = env.reset() on init + obs = tf.constant(self.obs) + actions, values, self.states, neglogpacs = self.model.step(obs) + actions = actions._numpy() + mb_obs.append(self.obs.copy()) + mb_actions.append(actions) + mb_values.append(values._numpy()) + mb_neglogpacs.append(neglogpacs._numpy()) + mb_dones.append(self.dones) + + # Take actions in env and look the results + # Infos contains a ton of useful informations + self.obs[:], rewards, self.dones, infos = self.env.step(actions) + for info in infos: + maybeepinfo = info.get('episode') + if maybeepinfo: epinfos.append(maybeepinfo) + mb_rewards.append(rewards) + + #batch of steps to batch of rollouts + mb_obs = np.asarray(mb_obs, dtype=self.obs.dtype) + mb_rewards = np.asarray(mb_rewards, dtype=np.float32) + mb_actions = np.asarray(mb_actions) + mb_values = np.asarray(mb_values, dtype=np.float32) + mb_neglogpacs = np.asarray(mb_neglogpacs, dtype=np.float32) + mb_dones = np.asarray(mb_dones, dtype=np.bool) + last_values = self.model.value(tf.constant(self.obs))._numpy() + + # discount/bootstrap off value fn + mb_returns = np.zeros_like(mb_rewards) + mb_advs = np.zeros_like(mb_rewards) + lastgaelam = 0 + for t in reversed(range(self.nsteps)): + if t == self.nsteps - 1: + nextnonterminal = 1.0 - self.dones + nextvalues = last_values + else: + nextnonterminal = 1.0 - mb_dones[t+1] + nextvalues = mb_values[t+1] + delta = mb_rewards[t] + self.gamma * nextvalues * nextnonterminal - mb_values[t] + mb_advs[t] = lastgaelam = delta + self.gamma * self.lam * nextnonterminal * lastgaelam + mb_returns = mb_advs + mb_values + return (*map(sf01, (mb_obs, mb_returns, mb_dones, mb_actions, mb_values, mb_neglogpacs)), + mb_states, epinfos) + + +def sf01(arr): + """ + swap and then flatten axes 0 and 1 + """ + s = arr.shape + return arr.swapaxes(0, 1).reshape(s[0] * s[1], *s[2:]) diff --git a/baselines/baselines/results_plotter.py b/baselines/baselines/results_plotter.py new file mode 100644 index 0000000000000000000000000000000000000000..66f09bd12d92accb8f989579bb347a19ab0acdd0 --- /dev/null +++ b/baselines/baselines/results_plotter.py @@ -0,0 +1,94 @@ +import numpy as np +import matplotlib +matplotlib.use('TkAgg') # Can change to 'Agg' for non-interactive mode + +import matplotlib.pyplot as plt +plt.rcParams['svg.fonttype'] = 'none' + +from baselines.common import plot_util + +X_TIMESTEPS = 'timesteps' +X_EPISODES = 'episodes' +X_WALLTIME = 'walltime_hrs' +Y_REWARD = 'reward' +Y_TIMESTEPS = 'timesteps' +POSSIBLE_X_AXES = [X_TIMESTEPS, X_EPISODES, X_WALLTIME] +EPISODES_WINDOW = 100 +COLORS = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 'purple', 'pink', + 'brown', 'orange', 'teal', 'coral', 'lightblue', 'lime', 'lavender', 'turquoise', + 'darkgreen', 'tan', 'salmon', 'gold', 'darkred', 'darkblue'] + +def rolling_window(a, window): + shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) + strides = a.strides + (a.strides[-1],) + return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) + +def window_func(x, y, window, func): + yw = rolling_window(y, window) + yw_func = func(yw, axis=-1) + return x[window-1:], yw_func + +def ts2xy(ts, xaxis, yaxis): + if xaxis == X_TIMESTEPS: + x = np.cumsum(ts.l.values) + elif xaxis == X_EPISODES: + x = np.arange(len(ts)) + elif xaxis == X_WALLTIME: + x = ts.t.values / 3600. + else: + raise NotImplementedError + if yaxis == Y_REWARD: + y = ts.r.values + elif yaxis == Y_TIMESTEPS: + y = ts.l.values + else: + raise NotImplementedError + return x, y + +def plot_curves(xy_list, xaxis, yaxis, title): + fig = plt.figure(figsize=(8,2)) + maxx = max(xy[0][-1] for xy in xy_list) + minx = 0 + for (i, (x, y)) in enumerate(xy_list): + color = COLORS[i % len(COLORS)] + plt.scatter(x, y, s=2) + x, y_mean = window_func(x, y, EPISODES_WINDOW, np.mean) #So returns average of last EPISODE_WINDOW episodes + plt.plot(x, y_mean, color=color) + plt.xlim(minx, maxx) + plt.title(title) + plt.xlabel(xaxis) + plt.ylabel(yaxis) + plt.tight_layout() + fig.canvas.mpl_connect('resize_event', lambda event: plt.tight_layout()) + plt.grid(True) + + +def split_by_task(taskpath): + return taskpath['dirname'].split('/')[-1].split('-')[0] + +def plot_results(dirs, num_timesteps=10e6, xaxis=X_TIMESTEPS, yaxis=Y_REWARD, title='', split_fn=split_by_task): + results = plot_util.load_results(dirs) + plot_util.plot_results(results, xy_fn=lambda r: ts2xy(r['monitor'], xaxis, yaxis), split_fn=split_fn, average_group=True, resample=int(1e6)) + +# Example usage in jupyter-notebook +# from baselines.results_plotter import plot_results +# %matplotlib inline +# plot_results("./log") +# Here ./log is a directory containing the monitor.csv files + +def main(): + import argparse + import os + parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('--dirs', help='List of log directories', nargs = '*', default=['./log']) + parser.add_argument('--num_timesteps', type=int, default=int(10e6)) + parser.add_argument('--xaxis', help = 'Varible on X-axis', default = X_TIMESTEPS) + parser.add_argument('--yaxis', help = 'Varible on Y-axis', default = Y_REWARD) + parser.add_argument('--task_name', help = 'Title of plot', default = 'Breakout') + args = parser.parse_args() + args.dirs = [os.path.abspath(dir) for dir in args.dirs] + plot_results(args.dirs, args.num_timesteps, args.xaxis, args.yaxis, args.task_name) + plt.show() + +if __name__ == '__main__': + main() diff --git a/baselines/baselines/run.py b/baselines/baselines/run.py new file mode 100644 index 0000000000000000000000000000000000000000..fbf24535b7dc38e155dbce607e0f1f9f04652d80 --- /dev/null +++ b/baselines/baselines/run.py @@ -0,0 +1,248 @@ +import sys +import re +import multiprocessing +import os.path as osp +import gym +from collections import defaultdict +import tensorflow as tf +import numpy as np + +from baselines.common.vec_env import VecFrameStack, VecNormalize, VecEnv +from baselines.common.vec_env.vec_video_recorder import VecVideoRecorder +from baselines.common.cmd_util import common_arg_parser, parse_unknown_args, make_vec_env, make_env +from baselines import logger +from importlib import import_module + +try: + from mpi4py import MPI +except ImportError: + MPI = None + +try: + import pybullet_envs +except ImportError: + pybullet_envs = None + +try: + import roboschool +except ImportError: + roboschool = None + +_game_envs = defaultdict(set) +for env in gym.envs.registry.all(): + # TODO: solve this with regexes + env_type = env.entry_point.split(':')[0].split('.')[-1] + _game_envs[env_type].add(env.id) + +# reading benchmark names directly from retro requires +# importing retro here, and for some reason that crashes tensorflow +# in ubuntu +_game_envs['retro'] = { + 'BubbleBobble-Nes', + 'SuperMarioBros-Nes', + 'TwinBee3PokoPokoDaimaou-Nes', + 'SpaceHarrier-Nes', + 'SonicTheHedgehog-Genesis', + 'Vectorman-Genesis', + 'FinalFight-Snes', + 'SpaceInvaders-Snes', +} + + +def train(args, extra_args): + env_type, env_id = get_env_type(args) + print('env_type: {}'.format(env_type)) + + total_timesteps = int(args.num_timesteps) + seed = args.seed + + learn = get_learn_function(args.alg) + alg_kwargs = get_learn_function_defaults(args.alg, env_type) + alg_kwargs.update(extra_args) + + env = build_env(args) + if args.save_video_interval != 0: + env = VecVideoRecorder(env, osp.join(logger.get_dir(), "videos"), record_video_trigger=lambda x: x % args.save_video_interval == 0, video_length=args.save_video_length) + + if args.network: + alg_kwargs['network'] = args.network + else: + if alg_kwargs.get('network') is None: + alg_kwargs['network'] = get_default_network(env_type) + + print('Training {} on {}:{} with arguments \n{}'.format(args.alg, env_type, env_id, alg_kwargs)) + + model = learn( + env=env, + seed=seed, + total_timesteps=total_timesteps, + **alg_kwargs + ) + + return model, env + + +def build_env(args): + ncpu = multiprocessing.cpu_count() + if sys.platform == 'darwin': ncpu //= 2 + nenv = args.num_env or ncpu + alg = args.alg + seed = args.seed + + env_type, env_id = get_env_type(args) + + if env_type in {'atari', 'retro'}: + if alg == 'deepq': + env = make_env(env_id, env_type, seed=seed, wrapper_kwargs={'frame_stack': True}) + elif alg == 'trpo_mpi': + env = make_env(env_id, env_type, seed=seed) + else: + frame_stack_size = 4 + env = make_vec_env(env_id, env_type, nenv, seed, gamestate=args.gamestate, reward_scale=args.reward_scale) + env = VecFrameStack(env, frame_stack_size) + + else: + flatten_dict_observations = alg not in {'her'} + env = make_vec_env(env_id, env_type, args.num_env or 1, seed, reward_scale=args.reward_scale, flatten_dict_observations=flatten_dict_observations) + + if env_type == 'mujoco': + env = VecNormalize(env) + + return env + + +def get_env_type(args): + env_id = args.env + + if args.env_type is not None: + return args.env_type, env_id + + # Re-parse the gym registry, since we could have new envs since last time. + for env in gym.envs.registry.all(): + env_type = env.entry_point.split(':')[0].split('.')[-1] + _game_envs[env_type].add(env.id) # This is a set so add is idempotent + + if env_id in _game_envs.keys(): + env_type = env_id + env_id = [g for g in _game_envs[env_type]][0] + else: + env_type = None + for g, e in _game_envs.items(): + if env_id in e: + env_type = g + break + if ':' in env_id: + env_type = re.sub(r':.*', '', env_id) + assert env_type is not None, 'env_id {} is not recognized in env types'.format(env_id, _game_envs.keys()) + + return env_type, env_id + + +def get_default_network(env_type): + if env_type in {'atari', 'retro'}: + return 'cnn' + else: + return 'mlp' + +def get_alg_module(alg, submodule=None): + submodule = submodule or alg + try: + # first try to import the alg module from baselines + alg_module = import_module('.'.join(['baselines', alg, submodule])) + except ImportError: + # then from rl_algs + alg_module = import_module('.'.join(['rl_' + 'algs', alg, submodule])) + + return alg_module + + +def get_learn_function(alg): + return get_alg_module(alg).learn + + +def get_learn_function_defaults(alg, env_type): + try: + alg_defaults = get_alg_module(alg, 'defaults') + kwargs = getattr(alg_defaults, env_type)() + except (ImportError, AttributeError): + kwargs = {} + return kwargs + + + +def parse_cmdline_kwargs(args): + ''' + convert a list of '='-spaced command-line arguments to a dictionary, evaluating python objects when possible + ''' + def parse(v): + + assert isinstance(v, str) + try: + return eval(v) + except (NameError, SyntaxError): + return v + + return {k: parse(v) for k,v in parse_unknown_args(args).items()} + + +def configure_logger(log_path, **kwargs): + if log_path is not None: + logger.configure(log_path) + else: + logger.configure(**kwargs) + + +def main(args): + # configure logger, disable logging in child MPI processes (with rank > 0) + + arg_parser = common_arg_parser() + args, unknown_args = arg_parser.parse_known_args(args) + extra_args = parse_cmdline_kwargs(unknown_args) + + if MPI is None or MPI.COMM_WORLD.Get_rank() == 0: + rank = 0 + configure_logger(args.log_path) + else: + rank = MPI.COMM_WORLD.Get_rank() + configure_logger(args.log_path, format_strs=[]) + + model, env = train(args, extra_args) + + if args.save_path is not None and rank == 0: + save_path = osp.expanduser(args.save_path) + ckpt = tf.train.Checkpoint(model=model) + manager = tf.train.CheckpointManager(ckpt, save_path, max_to_keep=None) + manager.save() + + if args.play: + logger.log("Running trained model") + obs = env.reset() + if not isinstance(env, VecEnv): + obs = np.expand_dims(np.array(obs), axis=0) + + state = model.initial_state if hasattr(model, 'initial_state') else None + + episode_rew = np.zeros(env.num_envs) if isinstance(env, VecEnv) else np.zeros(1) + while True: + if state is not None: + actions, _, state, _ = model.step(obs) + else: + actions, _, _, _ = model.step(obs) + + obs, rew, done, _ = env.step(actions.numpy()) + if not isinstance(env, VecEnv): + obs = np.expand_dims(np.array(obs), axis=0) + episode_rew += rew + env.render() + done_any = done.any() if isinstance(done, np.ndarray) else done + if done_any: + for i in np.nonzero(done)[0]: + print('episode_rew={}'.format(episode_rew[i])) + episode_rew[i] = 0 + + env.close() + + return model + +if __name__ == '__main__': + main(sys.argv) diff --git a/baselines/baselines/trpo_mpi/README.md b/baselines/baselines/trpo_mpi/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4cdbb5aee2d09cb4d38e0d237fbdac6576e529bf --- /dev/null +++ b/baselines/baselines/trpo_mpi/README.md @@ -0,0 +1,7 @@ +# trpo_mpi + +- Original paper: https://arxiv.org/abs/1502.05477 +- Baselines blog post https://blog.openai.com/openai-baselines-ppo/ +- `mpirun -np 16 python -m baselines.run --alg=trpo_mpi --env=PongNoFrameskip-v4` runs the algorithm for 40M frames = 10M timesteps on an Atari Pong. See help (`-h`) for more options. +- `python -m baselines.run --alg=trpo_mpi --env=Ant-v2 --num_timesteps=1e6` runs the algorithm for 1M timesteps on a Mujoco Ant environment. +- also refer to the repo-wide [README.md](../../README.md#training-models) diff --git a/baselines/baselines/trpo_mpi/__init__.py b/baselines/baselines/trpo_mpi/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/baselines/baselines/trpo_mpi/defaults.py b/baselines/baselines/trpo_mpi/defaults.py new file mode 100644 index 0000000000000000000000000000000000000000..2ac3f7af35eb4c39eb4a3ca64438189781bd63eb --- /dev/null +++ b/baselines/baselines/trpo_mpi/defaults.py @@ -0,0 +1,30 @@ +from baselines.common.models import mlp, cnn_small + + +def atari(): + return dict( + network = cnn_small(), + timesteps_per_batch=512, + max_kl=0.001, + cg_iters=10, + cg_damping=1e-3, + gamma=0.98, + lam=1.0, + vf_iters=3, + vf_stepsize=1e-4, + entcoeff=0.00, + ) + +def mujoco(): + return dict( + network = mlp(num_hidden=32, num_layers=2), + timesteps_per_batch=1024, + max_kl=0.01, + cg_iters=10, + cg_damping=0.1, + gamma=0.99, + lam=0.98, + vf_iters=5, + vf_stepsize=1e-3, + normalize_observations=True, + ) diff --git a/baselines/baselines/trpo_mpi/trpo_mpi.py b/baselines/baselines/trpo_mpi/trpo_mpi.py new file mode 100644 index 0000000000000000000000000000000000000000..d131aaa38c3196cfa46f55d4aafd892e5467a48b --- /dev/null +++ b/baselines/baselines/trpo_mpi/trpo_mpi.py @@ -0,0 +1,448 @@ +from baselines.common import explained_variance, zipsame, dataset +from baselines import logger +import baselines.common.tf_util as U +import tensorflow as tf, numpy as np +import time +import os.path as osp +from baselines.common import colorize +from collections import deque +from baselines.common import set_global_seeds +from baselines.common.models import get_network_builder +from baselines.common.mpi_adam import MpiAdam +from baselines.common.cg import cg +from baselines.common.policies import PolicyWithValue +from baselines.common.vec_env.vec_env import VecEnv +from contextlib import contextmanager + +try: + from mpi4py import MPI +except ImportError: + MPI = None + +def traj_segment_generator(pi, env, horizon): + # Initialize state variables + t = 0 + ac = env.action_space.sample() + new = True + rew = 0.0 + ob = env.reset() + if not isinstance(env, VecEnv): + ob = np.expand_dims(ob, axis=0) + + cur_ep_ret = 0 + cur_ep_len = 0 + ep_rets = [] + ep_lens = [] + + # Initialize history arrays + obs = np.array([ob for _ in range(horizon)]) + rews = np.zeros(horizon, 'float32') + vpreds = np.zeros(horizon, 'float32') + news = np.zeros(horizon, 'int32') + acs = np.array([ac for _ in range(horizon)]) + prevacs = acs.copy() + + while True: + prevac = ac + ob = tf.constant(ob) + ac, vpred, _, _ = pi.step(ob) + ac = ac.numpy() + # Slight weirdness here because we need value function at time T + # before returning segment [0, T-1] so we get the correct + # terminal value + if t > 0 and t % horizon == 0: + yield {"ob" : obs, "rew" : rews, "vpred" : vpreds, "new" : news, + "ac" : acs, "prevac" : prevacs, "nextvpred": vpred * (1 - new), + "ep_rets" : ep_rets, "ep_lens" : ep_lens} + _, vpred, _, _ = pi.step(ob) + # Be careful!!! if you change the downstream algorithm to aggregate + # several of these batches, then be sure to do a deepcopy + ep_rets = [] + ep_lens = [] + i = t % horizon + obs[i] = ob + vpreds[i] = vpred.numpy() + news[i] = new + acs[i] = ac + prevacs[i] = prevac + + ob, rew, new, _ = env.step(ac) + if not isinstance(env, VecEnv): + ob = np.expand_dims(ob, axis=0) + rews[i] = rew + + cur_ep_ret += rew + cur_ep_len += 1 + if new: + ep_rets.append(cur_ep_ret) + ep_lens.append(cur_ep_len) + cur_ep_ret = 0 + cur_ep_len = 0 + ob = env.reset() + if not isinstance(env, VecEnv): + ob = np.expand_dims(ob, axis=0) + t += 1 + +def add_vtarg_and_adv(seg, gamma, lam): + new = np.append(seg["new"], 0) # last element is only used for last vtarg, but we already zeroed it if last new = 1 + vpred = np.append(seg["vpred"], seg["nextvpred"]) + T = len(seg["rew"]) + seg["adv"] = gaelam = np.empty(T, 'float32') + rew = seg["rew"] + lastgaelam = 0 + for t in reversed(range(T)): + nonterminal = 1-new[t+1] + delta = rew[t] + gamma * vpred[t+1] * nonterminal - vpred[t] + gaelam[t] = lastgaelam = delta + gamma * lam * nonterminal * lastgaelam + seg["tdlamret"] = seg["adv"] + seg["vpred"] + +def learn(*, + network, + env, + total_timesteps, + timesteps_per_batch=1024, # what to train on + max_kl=0.001, + cg_iters=10, + gamma=0.99, + lam=1.0, # advantage estimation + seed=None, + ent_coef=0.0, + cg_damping=1e-2, + vf_stepsize=3e-4, + vf_iters =3, + max_episodes=0, max_iters=0, # time constraint + callback=None, + load_path=None, + **network_kwargs + ): + ''' + learn a policy function with TRPO algorithm + + Parameters: + ---------- + + network neural network to learn. Can be either string ('mlp', 'cnn', 'lstm', 'lnlstm' for basic types) + or function that takes input placeholder and returns tuple (output, None) for feedforward nets + or (output, (state_placeholder, state_output, mask_placeholder)) for recurrent nets + + env environment (one of the gym environments or wrapped via baselines.common.vec_env.VecEnv-type class + + timesteps_per_batch timesteps per gradient estimation batch + + max_kl max KL divergence between old policy and new policy ( KL(pi_old || pi) ) + + ent_coef coefficient of policy entropy term in the optimization objective + + cg_iters number of iterations of conjugate gradient algorithm + + cg_damping conjugate gradient damping + + vf_stepsize learning rate for adam optimizer used to optimie value function loss + + vf_iters number of iterations of value function optimization iterations per each policy optimization step + + total_timesteps max number of timesteps + + max_episodes max number of episodes + + max_iters maximum number of policy optimization iterations + + callback function to be called with (locals(), globals()) each policy optimization step + + load_path str, path to load the model from (default: None, i.e. no model is loaded) + + **network_kwargs keyword arguments to the policy / network builder. See baselines.common/policies.py/build_policy and arguments to a particular type of network + + Returns: + ------- + + learnt model + + ''' + + if MPI is not None: + nworkers = MPI.COMM_WORLD.Get_size() + rank = MPI.COMM_WORLD.Get_rank() + else: + nworkers = 1 + rank = 0 + + set_global_seeds(seed) + + np.set_printoptions(precision=3) + # Setup losses and stuff + # ---------------------------------------- + ob_space = env.observation_space + ac_space = env.action_space + + if isinstance(network, str): + network = get_network_builder(network)(**network_kwargs) + + with tf.name_scope("pi"): + pi_policy_network = network(ob_space.shape) + pi_value_network = network(ob_space.shape) + pi = PolicyWithValue(ac_space, pi_policy_network, pi_value_network) + with tf.name_scope("oldpi"): + old_pi_policy_network = network(ob_space.shape) + old_pi_value_network = network(ob_space.shape) + oldpi = PolicyWithValue(ac_space, old_pi_policy_network, old_pi_value_network) + + pi_var_list = pi_policy_network.trainable_variables + list(pi.pdtype.trainable_variables) + old_pi_var_list = old_pi_policy_network.trainable_variables + list(oldpi.pdtype.trainable_variables) + vf_var_list = pi_value_network.trainable_variables + pi.value_fc.trainable_variables + old_vf_var_list = old_pi_value_network.trainable_variables + oldpi.value_fc.trainable_variables + + if load_path is not None: + load_path = osp.expanduser(load_path) + ckpt = tf.train.Checkpoint(model=pi) + manager = tf.train.CheckpointManager(ckpt, load_path, max_to_keep=None) + ckpt.restore(manager.latest_checkpoint) + + vfadam = MpiAdam(vf_var_list) + + get_flat = U.GetFlat(pi_var_list) + set_from_flat = U.SetFromFlat(pi_var_list) + loss_names = ["optimgain", "meankl", "entloss", "surrgain", "entropy"] + shapes = [var.get_shape().as_list() for var in pi_var_list] + + + def assign_old_eq_new(): + for pi_var, old_pi_var in zip(pi_var_list, old_pi_var_list): + old_pi_var.assign(pi_var) + for vf_var, old_vf_var in zip(vf_var_list, old_vf_var_list): + old_vf_var.assign(vf_var) + + @tf.function + def compute_lossandgrad(ob, ac, atarg): + with tf.GradientTape() as tape: + old_policy_latent = oldpi.policy_network(ob) + old_pd, _ = oldpi.pdtype.pdfromlatent(old_policy_latent) + policy_latent = pi.policy_network(ob) + pd, _ = pi.pdtype.pdfromlatent(policy_latent) + kloldnew = old_pd.kl(pd) + ent = pd.entropy() + meankl = tf.reduce_mean(kloldnew) + meanent = tf.reduce_mean(ent) + entbonus = ent_coef * meanent + ratio = tf.exp(pd.logp(ac) - old_pd.logp(ac)) + surrgain = tf.reduce_mean(ratio * atarg) + optimgain = surrgain + entbonus + losses = [optimgain, meankl, entbonus, surrgain, meanent] + gradients = tape.gradient(optimgain, pi_var_list) + return losses + [U.flatgrad(gradients, pi_var_list)] + + @tf.function + def compute_losses(ob, ac, atarg): + old_policy_latent = oldpi.policy_network(ob) + old_pd, _ = oldpi.pdtype.pdfromlatent(old_policy_latent) + policy_latent = pi.policy_network(ob) + pd, _ = pi.pdtype.pdfromlatent(policy_latent) + kloldnew = old_pd.kl(pd) + ent = pd.entropy() + meankl = tf.reduce_mean(kloldnew) + meanent = tf.reduce_mean(ent) + entbonus = ent_coef * meanent + ratio = tf.exp(pd.logp(ac) - old_pd.logp(ac)) + surrgain = tf.reduce_mean(ratio * atarg) + optimgain = surrgain + entbonus + losses = [optimgain, meankl, entbonus, surrgain, meanent] + return losses + + #ob shape should be [batch_size, ob_dim], merged nenv + #ret shape should be [batch_size] + @tf.function + def compute_vflossandgrad(ob, ret): + with tf.GradientTape() as tape: + pi_vf = pi.value(ob) + vferr = tf.reduce_mean(tf.square(pi_vf - ret)) + return U.flatgrad(tape.gradient(vferr, vf_var_list), vf_var_list) + + @tf.function + def compute_fvp(flat_tangent, ob, ac, atarg): + with tf.GradientTape() as outter_tape: + with tf.GradientTape() as inner_tape: + old_policy_latent = oldpi.policy_network(ob) + old_pd, _ = oldpi.pdtype.pdfromlatent(old_policy_latent) + policy_latent = pi.policy_network(ob) + pd, _ = pi.pdtype.pdfromlatent(policy_latent) + kloldnew = old_pd.kl(pd) + meankl = tf.reduce_mean(kloldnew) + klgrads = inner_tape.gradient(meankl, pi_var_list) + start = 0 + tangents = [] + for shape in shapes: + sz = U.intprod(shape) + tangents.append(tf.reshape(flat_tangent[start:start+sz], shape)) + start += sz + gvp = tf.add_n([tf.reduce_sum(g*tangent) for (g, tangent) in zipsame(klgrads, tangents)]) + hessians_products = outter_tape.gradient(gvp, pi_var_list) + fvp = U.flatgrad(hessians_products, pi_var_list) + return fvp + + @contextmanager + def timed(msg): + if rank == 0: + print(colorize(msg, color='magenta')) + tstart = time.time() + yield + print(colorize("done in %.3f seconds"%(time.time() - tstart), color='magenta')) + else: + yield + + def allmean(x): + assert isinstance(x, np.ndarray) + if MPI is not None: + out = np.empty_like(x) + MPI.COMM_WORLD.Allreduce(x, out, op=MPI.SUM) + out /= nworkers + else: + out = np.copy(x) + + return out + + th_init = get_flat() + if MPI is not None: + MPI.COMM_WORLD.Bcast(th_init, root=0) + + set_from_flat(th_init) + vfadam.sync() + print("Init param sum", th_init.sum(), flush=True) + + # Prepare for rollouts + # ---------------------------------------- + seg_gen = traj_segment_generator(pi, env, timesteps_per_batch) + + episodes_so_far = 0 + timesteps_so_far = 0 + iters_so_far = 0 + tstart = time.time() + lenbuffer = deque(maxlen=40) # rolling buffer for episode lengths + rewbuffer = deque(maxlen=40) # rolling buffer for episode rewards + + if sum([max_iters>0, total_timesteps>0, max_episodes>0])==0: + # noththing to be done + return pi + + assert sum([max_iters>0, total_timesteps>0, max_episodes>0]) < 2, \ + 'out of max_iters, total_timesteps, and max_episodes only one should be specified' + + while True: + if callback: callback(locals(), globals()) + if total_timesteps and timesteps_so_far >= total_timesteps: + break + elif max_episodes and episodes_so_far >= max_episodes: + break + elif max_iters and iters_so_far >= max_iters: + break + logger.log("********** Iteration %i ************"%iters_so_far) + + with timed("sampling"): + seg = seg_gen.__next__() + add_vtarg_and_adv(seg, gamma, lam) + + # ob, ac, atarg, ret, td1ret = map(np.concatenate, (obs, acs, atargs, rets, td1rets)) + ob, ac, atarg, tdlamret = seg["ob"], seg["ac"], seg["adv"], seg["tdlamret"] + ob = sf01(ob) + vpredbefore = seg["vpred"] # predicted value function before udpate + atarg = (atarg - atarg.mean()) / atarg.std() # standardized advantage function estimate + + if hasattr(pi, "ret_rms"): pi.ret_rms.update(tdlamret) + if hasattr(pi, "ob_rms"): pi.ob_rms.update(ob) # update running mean/std for policy + + args = ob, ac, atarg + fvpargs = [arr[::5] for arr in args] + def fisher_vector_product(p): + return allmean(compute_fvp(p, *fvpargs).numpy()) + cg_damping * p + + assign_old_eq_new() # set old parameter values to new parameter values + with timed("computegrad"): + *lossbefore, g = compute_lossandgrad(*args) + lossbefore = allmean(np.array(lossbefore)) + g = g.numpy() + g = allmean(g) + if np.allclose(g, 0): + logger.log("Got zero gradient. not updating") + else: + with timed("cg"): + stepdir = cg(fisher_vector_product, g, cg_iters=cg_iters, verbose=rank==0) + assert np.isfinite(stepdir).all() + shs = .5*stepdir.dot(fisher_vector_product(stepdir)) + lm = np.sqrt(shs / max_kl) + # logger.log("lagrange multiplier:", lm, "gnorm:", np.linalg.norm(g)) + fullstep = stepdir / lm + expectedimprove = g.dot(fullstep) + surrbefore = lossbefore[0] + stepsize = 1.0 + thbefore = get_flat() + for _ in range(10): + thnew = thbefore + fullstep * stepsize + set_from_flat(thnew) + meanlosses = surr, kl, *_ = allmean(np.array(compute_losses(*args))) + improve = surr - surrbefore + logger.log("Expected: %.3f Actual: %.3f"%(expectedimprove, improve)) + if not np.isfinite(meanlosses).all(): + logger.log("Got non-finite value of losses -- bad!") + elif kl > max_kl * 1.5: + logger.log("violated KL constraint. shrinking step.") + elif improve < 0: + logger.log("surrogate didn't improve. shrinking step.") + else: + logger.log("Stepsize OK!") + break + stepsize *= .5 + else: + logger.log("couldn't compute a good step") + set_from_flat(thbefore) + if nworkers > 1 and iters_so_far % 20 == 0: + paramsums = MPI.COMM_WORLD.allgather((thnew.sum(), vfadam.getflat().sum())) # list of tuples + assert all(np.allclose(ps, paramsums[0]) for ps in paramsums[1:]) + + for (lossname, lossval) in zip(loss_names, meanlosses): + logger.record_tabular(lossname, lossval) + + with timed("vf"): + + for _ in range(vf_iters): + for (mbob, mbret) in dataset.iterbatches((seg["ob"], seg["tdlamret"]), + include_final_partial_batch=False, batch_size=64): + mbob = sf01(mbob) + g = allmean(compute_vflossandgrad(mbob, mbret).numpy()) + vfadam.update(g, vf_stepsize) + + logger.record_tabular("ev_tdlam_before", explained_variance(vpredbefore, tdlamret)) + + lrlocal = (seg["ep_lens"], seg["ep_rets"]) # local values + if MPI is not None: + listoflrpairs = MPI.COMM_WORLD.allgather(lrlocal) # list of tuples + else: + listoflrpairs = [lrlocal] + + lens, rews = map(flatten_lists, zip(*listoflrpairs)) + lenbuffer.extend(lens) + rewbuffer.extend(rews) + + logger.record_tabular("EpLenMean", np.mean(lenbuffer)) + logger.record_tabular("EpRewMean", np.mean(rewbuffer)) + logger.record_tabular("EpThisIter", len(lens)) + episodes_so_far += len(lens) + timesteps_so_far += sum(lens) + iters_so_far += 1 + + logger.record_tabular("EpisodesSoFar", episodes_so_far) + logger.record_tabular("TimestepsSoFar", timesteps_so_far) + logger.record_tabular("TimeElapsed", time.time() - tstart) + + if rank==0: + logger.dump_tabular() + + return pi + +def flatten_lists(listoflists): + return [el for list_ in listoflists for el in list_] + +def sf01(arr): + """ + swap and then flatten axes 0 and 1 + """ + s = arr.shape + return arr.swapaxes(0, 1).reshape(s[0] * s[1], *s[2:]) diff --git a/baselines/benchmarks_atari10M.htm b/baselines/benchmarks_atari10M.htm new file mode 100644 index 0000000000000000000000000000000000000000..626fc0b4896bda590dc7ed68cce1b5cea59545db --- /dev/null +++ b/baselines/benchmarks_atari10M.htm @@ -0,0 +1,16789 @@ +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="https://cloud.githubusercontent.com/assets/306655/25257645/38a30806-25ee-11e7-82d5-eae86a9dfad0.png"> + <title>bench viewer</title> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" + integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" + crossorigin="anonymous"></script> + <script scr="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" + integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" + crossorigin="anonymous"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/js/jquery.dataTables.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.13/js/dataTables.bootstrap4.min.js"></script> + + + <link rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" + integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" + crossorigin="anonymous"> + <link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/css/dataTables.bootstrap4.min.css" + rel="stylesheet"/> + <style> + .navbar { + border-radius: 0; + } + + .benchmark-title { + padding: 3rem 1.5rem; + text-align: center; + margin-top: 40px; + } + .ci-section { + margin-top: 20px; + text-align: center; + } + .bmrun-link { + font-family: Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace; + color: #fff; !important; + text-decoration: none; !important; + padding: 0.5em .4em; + } + .bmrun-link:hover { + color: #fff; !important; + text-decoration: none; !important; + } + </style> +</head> + +<body> + +<div class="container"> + + <div class="benchmark-title"> + <h1>Atari10M Comparison</h1> + </div> + <div style="text-align: center"> +</div> + + <table class="table sortable-data-table"> + <thead> + <tr> + <th> algo </th> + + <td> </td> + + <td>user</td> + + <td>mean</td> + + <td>Enduro</td> + + <td>SpaceInvaders</td> + + <td>Qbert</td> + + <td>Seaquest</td> + + <td>Pong</td> + + <td>BeamRider</td> + + <td>Breakout</td> + + <td>commit</td> + + </tr> + </thead> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + ppo2 + </div> + </td> + + <td><div style="background-color:rgba(102, 194, 165, 1.0)"> </div></td> + + <td>cron</td> + + <td>1509.38</td> + + <td>350.22</td> + + <td>557.28</td> + + <td>7012.06</td> + + <td>1218.87</td> + + <td>13.68</td> + + <td>1299.25</td> + + <td>114.26</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + deepq + </div> + </td> + + <td><div style="background-color:rgba(252, 141, 98, 1.0)"> </div></td> + + <td>cron</td> + + <td>1012.69</td> + + <td>479.75</td> + + <td>459.86</td> + + <td>3254.83</td> + + <td>1164.08</td> + + <td>16.49</td> + + <td>1582.34</td> + + <td>131.46</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + acktr + </div> + </td> + + <td><div style="background-color:rgba(141, 160, 203, 1.0)"> </div></td> + + <td>cron</td> + + <td>1211.71</td> + + <td>0.0</td> + + <td>557.19</td> + + <td>4429.3</td> + + <td>1201.16</td> + + <td>9.56</td> + + <td>2171.19</td> + + <td>113.58</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + acer + </div> + </td> + + <td><div style="background-color:rgba(231, 138, 195, 1.0)"> </div></td> + + <td>cron</td> + + <td>1457.36</td> + + <td>0.0</td> + + <td>656.91</td> + + <td>6433.38</td> + + <td>1065.98</td> + + <td>3.11</td> + + <td>1959.22</td> + + <td>82.94</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + ppo2_mpi + </div> + </td> + + <td><div style="background-color:rgba(166, 216, 84, 1.0)"> </div></td> + + <td>cron</td> + + <td>1417.92</td> + + <td>207.47</td> + + <td>459.89</td> + + <td>7184.73</td> + + <td>1383.38</td> + + <td>13.9</td> + + <td>594.45</td> + + <td>81.61</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + a2c + </div> + </td> + + <td><div style="background-color:rgba(255, 217, 47, 1.0)"> </div></td> + + <td>cron</td> + + <td>717.73</td> + + <td>0.0</td> + + <td>463.06</td> + + <td>2047.07</td> + + <td>1150.66</td> + + <td>1.0</td> + + <td>1302.61</td> + + <td>59.72</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + trpo_mpi + </div> + </td> + + <td><div style="background-color:rgba(229, 196, 148, 1.0)"> </div></td> + + <td>cron</td> + + <td>625.67</td> + + <td>24.83</td> + + <td>457.7</td> + + <td>2486.18</td> + + <td>710.07</td> + + <td>2.82</td> + + <td>683.11</td> + + <td>14.98</td> + + <td><a href=https://github.com/openai/baselines/commit/7bfbcf177eca8f46c0c0bfbb378e044539f5e061>7bfbcf1</a></td> + + </tr> + + </table> + +</form> + <div style="margin-top: 60px; text-align: center"> + <h3>Learning Curves</h3> + X-axis: timesteps, Y-axis: reward (avg. over 6 runs) + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.27 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 50.27 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 96.94 +L 73.381364 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.381364, 114.798281)" x="73.381364" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#pd55201c3ea)" d="M 165.827031 96.94 +L 165.827031 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.827031, 114.798281)" x="165.827031" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#pd55201c3ea)" d="M 258.272698 96.94 +L 258.272698 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.272698, 114.798281)" x="258.272698" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#pd55201c3ea)" d="M 350.718365 96.94 +L 350.718365 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.718365, 114.798281)" x="350.718365" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#pd55201c3ea)" d="M 443.164032 96.94 +L 443.164032 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.164032, 114.798281)" x="443.164032" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#pd55201c3ea)" d="M 535.609699 96.94 +L 535.609699 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.609699, 114.798281)" x="535.609699" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#pd55201c3ea)" d="M 50.27 71.570368 +L 558.72 71.570368 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.77, 75.749509)" x="40.77" y="75.749509">2500</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#pd55201c3ea)" d="M 50.27 45.438694 +L 558.72 45.438694 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.77, 49.617835)" x="40.77" y="49.617835">5000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.381364 -51.360908 +L 73.381364 -51.146016 +L 78.050134 -51.481869 +L 82.718905 -51.825542 +L 87.387675 -52.041942 +L 92.056445 -52.148063 +L 96.725216 -52.168222 +L 101.393986 -52.127025 +L 106.062757 -52.066993 +L 110.731527 -52.01023 +L 115.400298 -52.072784 +L 120.069068 -52.118953 +L 124.737839 -52.100905 +L 129.406609 -52.026711 +L 134.07538 -52.05142 +L 138.74415 -52.109309 +L 143.41292 -52.175707 +L 148.081691 -52.255406 +L 152.750461 -52.314351 +L 157.419232 -52.441252 +L 162.088002 -52.563886 +L 166.756773 -52.767157 +L 171.425543 -53.020746 +L 176.094314 -53.326072 +L 180.763084 -53.634303 +L 185.431855 -53.881266 +L 190.100625 -54.224706 +L 194.769395 -54.627098 +L 199.438166 -55.079258 +L 204.106936 -55.497983 +L 208.775707 -55.810258 +L 213.444477 -56.112873 +L 218.113248 -56.582155 +L 222.782018 -56.832627 +L 227.450789 -56.936684 +L 232.119559 -57.105757 +L 236.78833 -57.483625 +L 241.4571 -57.772855 +L 246.125871 -58.123665 +L 250.794641 -58.374306 +L 255.463411 -58.753777 +L 260.132182 -58.937073 +L 264.800952 -59.153094 +L 269.469723 -59.410816 +L 274.138493 -59.82321 +L 278.807264 -60.188427 +L 283.476034 -60.341869 +L 288.144805 -60.440632 +L 292.813575 -60.503964 +L 297.482346 -60.548808 +L 302.151116 -60.533285 +L 306.819886 -60.336137 +L 311.488657 -60.699955 +L 316.157427 -61.012198 +L 320.826198 -61.130071 +L 325.494968 -61.281662 +L 330.163739 -61.245439 +L 334.832509 -61.073459 +L 339.50128 -61.021779 +L 344.17005 -61.086667 +L 348.838821 -61.213834 +L 353.507591 -61.165416 +L 358.176361 -61.330868 +L 362.845132 -61.697723 +L 367.513902 -61.910608 +L 372.182673 -62.062856 +L 376.851443 -62.212161 +L 381.520214 -62.462619 +L 386.188984 -62.538385 +L 390.857755 -62.720284 +L 395.526525 -63.535601 +L 400.195296 -64.03428 +L 404.864066 -64.179037 +L 409.532836 -64.264554 +L 414.201607 -64.103967 +L 418.870377 -64.197842 +L 423.539148 -64.377866 +L 428.207918 -64.918128 +L 432.876689 -65.383515 +L 437.545459 -65.302446 +L 442.21423 -65.345228 +L 446.883 -65.315941 +L 451.551771 -65.656193 +L 456.220541 -65.688034 +L 460.889311 -66.382236 +L 465.558082 -66.640718 +L 470.226852 -66.686561 +L 474.895623 -66.729278 +L 479.564393 -66.883493 +L 484.233164 -67.028593 +L 488.901934 -66.914012 +L 493.570705 -67.017671 +L 498.239475 -67.321723 +L 502.908246 -67.586046 +L 507.577016 -67.569887 +L 512.245786 -67.679428 +L 516.914557 -68.058815 +L 521.583327 -68.263665 +L 526.252098 -68.063415 +L 530.920868 -67.893876 +L 535.589639 -67.601674 +L 535.589639 -72.637986 +L 535.589639 -72.637986 +L 530.920868 -72.727363 +L 526.252098 -72.584802 +L 521.583327 -72.45087 +L 516.914557 -72.674514 +L 512.245786 -72.312724 +L 507.577016 -72.2356 +L 502.908246 -72.073378 +L 498.239475 -71.739677 +L 493.570705 -71.477069 +L 488.901934 -71.512305 +L 484.233164 -71.535764 +L 479.564393 -71.382439 +L 474.895623 -71.08451 +L 470.226852 -71.027115 +L 465.558082 -70.694896 +L 460.889311 -70.319677 +L 456.220541 -69.917917 +L 451.551771 -70.139195 +L 446.883 -69.642078 +L 442.21423 -69.435478 +L 437.545459 -69.21992 +L 432.876689 -69.232607 +L 428.207918 -68.844992 +L 423.539148 -68.607508 +L 418.870377 -68.272053 +L 414.201607 -67.817446 +L 409.532836 -67.777363 +L 404.864066 -67.532457 +L 400.195296 -67.290862 +L 395.526525 -66.8096 +L 390.857755 -65.98671 +L 386.188984 -65.641058 +L 381.520214 -65.875176 +L 376.851443 -65.772701 +L 372.182673 -65.548027 +L 367.513902 -65.301037 +L 362.845132 -65.573195 +L 358.176361 -64.993927 +L 353.507591 -64.489556 +L 348.838821 -64.460143 +L 344.17005 -64.279984 +L 339.50128 -64.258432 +L 334.832509 -64.343776 +L 330.163739 -64.340658 +L 325.494968 -64.172436 +L 320.826198 -64.006313 +L 316.157427 -63.981638 +L 311.488657 -63.6973 +L 306.819886 -63.165296 +L 302.151116 -63.429667 +L 297.482346 -63.161782 +L 292.813575 -63.167349 +L 288.144805 -63.298379 +L 283.476034 -63.458732 +L 278.807264 -63.051877 +L 274.138493 -62.699094 +L 269.469723 -62.441158 +L 264.800952 -62.059158 +L 260.132182 -61.697158 +L 255.463411 -61.542347 +L 250.794641 -61.268052 +L 246.125871 -61.087742 +L 241.4571 -60.792196 +L 236.78833 -60.560628 +L 232.119559 -59.967643 +L 227.450789 -59.927231 +L 222.782018 -59.985065 +L 218.113248 -59.571791 +L 213.444477 -58.809131 +L 208.775707 -58.171547 +L 204.106936 -57.613343 +L 199.438166 -57.117029 +L 194.769395 -56.676321 +L 190.100625 -56.049375 +L 185.431855 -55.46141 +L 180.763084 -55.179786 +L 176.094314 -55.052055 +L 171.425543 -54.800229 +L 166.756773 -54.539977 +L 162.088002 -54.236551 +L 157.419232 -53.960144 +L 152.750461 -53.557146 +L 148.081691 -53.350853 +L 143.41292 -53.093945 +L 138.74415 -52.830243 +L 134.07538 -52.654431 +L 129.406609 -52.493025 +L 124.737839 -52.380651 +L 120.069068 -52.209025 +L 115.400298 -52.188728 +L 110.731527 -52.228337 +L 106.062757 -52.325338 +L 101.393986 -52.381888 +L 96.725216 -52.390952 +L 92.056445 -52.342931 +L 87.387675 -52.192621 +L 82.718905 -52.00076 +L 78.050134 -51.781979 +L 73.381364 -51.360908 +z +" id="m95cacb24bb" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m95cacb24bb" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.381364 -50.469332 +L 73.381364 -50.433124 +L 78.050059 -50.56483 +L 82.718755 -51.050919 +L 87.387451 -51.689248 +L 92.056147 -52.295616 +L 96.724842 -53.182767 +L 101.393538 -54.412148 +L 106.062234 -56.020576 +L 110.73093 -57.70055 +L 115.399625 -58.871983 +L 120.068321 -60.150136 +L 124.737017 -60.165476 +L 129.405713 -60.655368 +L 134.074408 -60.641563 +L 138.743104 -60.370489 +L 143.4118 -60.615465 +L 148.080496 -60.38571 +L 152.749191 -60.471215 +L 157.417887 -60.353101 +L 162.086583 -60.216906 +L 166.755279 -60.517349 +L 171.423974 -60.333911 +L 176.09267 -60.305714 +L 180.761366 -59.941579 +L 185.430062 -59.470969 +L 190.098757 -59.585074 +L 194.767453 -59.527889 +L 199.436149 -59.373918 +L 204.104845 -59.200555 +L 208.77354 -58.884291 +L 213.442236 -58.61563 +L 218.110932 -57.815498 +L 222.779628 -57.198044 +L 227.448323 -57.209162 +L 232.117019 -57.796039 +L 236.785715 -58.920781 +L 241.454411 -59.418084 +L 246.123106 -59.551837 +L 250.791802 -59.763299 +L 255.460498 -59.870731 +L 260.129194 -60.190921 +L 264.797889 -60.077075 +L 269.466585 -60.210834 +L 274.135281 -60.197372 +L 278.803977 -59.991161 +L 283.472672 -60.33722 +L 288.141368 -60.369201 +L 292.810064 -60.761218 +L 297.47876 -60.694004 +L 302.147456 -60.389192 +L 306.816151 -59.794832 +L 311.484847 -59.436777 +L 316.153543 -59.237721 +L 320.822239 -58.958533 +L 325.490934 -59.555342 +L 330.15963 -60.627022 +L 334.828326 -61.498725 +L 339.497022 -62.564669 +L 344.165717 -63.383165 +L 348.834413 -63.654704 +L 353.503109 -64.101937 +L 358.171805 -64.698045 +L 362.8405 -65.370249 +L 367.509196 -64.803156 +L 372.177892 -64.638249 +L 376.846588 -65.074591 +L 381.515283 -65.231551 +L 386.183979 -65.182746 +L 390.852675 -64.591953 +L 395.521371 -63.734616 +L 400.190066 -63.383427 +L 404.858762 -63.953948 +L 409.527458 -65.903956 +L 414.196154 -67.143766 +L 418.864849 -66.989321 +L 423.533545 -67.223979 +L 428.202241 -67.176449 +L 432.870937 -66.635367 +L 437.539632 -66.393501 +L 442.208328 -66.471111 +L 446.877024 -66.368086 +L 451.54572 -66.067374 +L 456.214415 -66.558814 +L 460.883111 -67.313992 +L 465.551807 -67.564938 +L 470.220503 -67.939735 +L 474.889198 -68.433594 +L 479.557894 -68.05056 +L 484.22659 -67.381619 +L 488.895286 -67.524494 +L 493.563981 -68.04645 +L 498.232677 -68.845946 +L 502.901373 -68.574982 +L 507.570069 -68.57239 +L 512.238764 -69.212823 +L 516.90746 -70.029928 +L 521.576156 -70.478144 +L 526.244852 -70.242608 +L 530.913547 -69.739455 +L 535.582243 -69.625146 +L 535.582243 -80.085252 +L 535.582243 -80.085252 +L 530.913547 -79.510917 +L 526.244852 -80.979937 +L 521.576156 -82.225306 +L 516.90746 -82.32246 +L 512.238764 -81.114202 +L 507.570069 -79.26424 +L 502.901373 -78.880269 +L 498.232677 -79.050719 +L 493.563981 -78.720296 +L 488.895286 -79.415141 +L 484.22659 -78.461719 +L 479.557894 -78.696461 +L 474.889198 -79.320859 +L 470.220503 -78.610463 +L 465.551807 -78.000455 +L 460.883111 -77.311821 +L 456.214415 -76.11982 +L 451.54572 -75.514058 +L 446.877024 -75.781579 +L 442.208328 -75.66242 +L 437.539632 -75.289181 +L 432.870937 -76.3668 +L 428.202241 -77.262579 +L 423.533545 -77.094656 +L 418.864849 -76.139517 +L 414.196154 -75.77682 +L 409.527458 -74.308174 +L 404.858762 -71.843386 +L 400.190066 -71.035833 +L 395.521371 -71.357098 +L 390.852675 -72.221303 +L 386.183979 -72.659264 +L 381.515283 -72.354945 +L 376.846588 -71.728612 +L 372.177892 -71.309626 +L 367.509196 -71.27233 +L 362.8405 -71.725057 +L 358.171805 -70.899126 +L 353.503109 -70.29358 +L 348.834413 -69.501769 +L 344.165717 -69.422406 +L 339.497022 -68.239952 +L 334.828326 -67.555956 +L 330.15963 -67.016777 +L 325.490934 -66.058182 +L 320.822239 -65.065983 +L 316.153543 -64.894804 +L 311.484847 -64.198699 +L 306.816151 -65.525668 +L 302.147456 -67.181899 +L 297.47876 -66.823772 +L 292.810064 -65.951114 +L 288.141368 -64.824688 +L 283.472672 -64.727174 +L 278.803977 -63.872083 +L 274.135281 -63.973207 +L 269.466585 -64.205397 +L 264.797889 -63.836749 +L 260.129194 -63.595581 +L 255.460498 -63.022945 +L 250.791802 -62.931682 +L 246.123106 -62.398902 +L 241.454411 -62.254194 +L 236.785715 -61.316776 +L 232.117019 -59.818395 +L 227.448323 -59.060029 +L 222.779628 -58.693202 +L 218.110932 -59.211164 +L 213.442236 -60.274521 +L 208.77354 -60.587091 +L 204.104845 -61.303689 +L 199.436149 -61.541807 +L 194.767453 -61.742933 +L 190.098757 -61.576031 +L 185.430062 -61.130084 +L 180.761366 -61.337005 +L 176.09267 -61.667851 +L 171.423974 -61.854304 +L 166.755279 -61.730397 +L 162.086583 -61.310646 +L 157.417887 -61.301566 +L 152.749191 -61.296187 +L 148.080496 -61.478036 +L 143.4118 -61.894058 +L 138.743104 -61.938592 +L 134.074408 -62.473522 +L 129.405713 -62.696315 +L 124.737017 -62.248569 +L 120.068321 -61.951062 +L 115.399625 -60.570578 +L 110.73093 -59.014029 +L 106.062234 -56.811589 +L 101.393538 -54.888844 +L 96.724842 -53.578157 +L 92.056147 -52.561512 +L 87.387451 -51.82532 +L 82.718755 -51.169281 +L 78.050059 -50.656055 +L 73.381364 -50.469332 +z +" id="m3ca707c28f" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m3ca707c28f" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 73.381364 -50.221118 +L 73.381364 -50.168876 +L 78.028019 -50.276083 +L 82.674674 -50.37122 +L 87.32133 -50.441072 +L 91.967985 -50.527933 +L 96.614641 -50.650653 +L 101.261296 -50.781715 +L 105.907951 -50.945876 +L 110.554607 -51.196347 +L 115.201262 -51.53622 +L 119.847918 -51.900485 +L 124.494573 -52.289033 +L 129.141228 -52.778333 +L 133.787884 -53.284015 +L 138.434539 -53.653957 +L 143.081195 -54.059222 +L 147.72785 -54.497315 +L 152.374505 -54.992834 +L 157.021161 -55.60361 +L 161.667816 -56.181231 +L 166.314472 -56.59113 +L 170.961127 -57.05844 +L 175.607782 -57.469813 +L 180.254438 -57.777557 +L 184.901093 -58.063693 +L 189.547749 -58.449351 +L 194.194404 -58.949585 +L 198.841059 -59.78925 +L 203.487715 -60.316446 +L 208.13437 -60.753055 +L 212.781026 -61.352425 +L 217.427681 -62.353517 +L 222.074336 -63.090719 +L 226.720992 -63.839778 +L 231.367647 -64.431664 +L 236.014303 -64.734195 +L 240.660958 -65.542709 +L 245.307613 -66.62516 +L 249.954269 -67.379963 +L 254.600924 -68.136625 +L 259.24758 -69.1903 +L 263.894235 -70.579468 +L 268.54089 -71.211752 +L 273.187546 -71.707617 +L 277.834201 -72.395986 +L 282.480857 -73.091674 +L 287.127512 -73.189461 +L 291.774167 -73.518438 +L 296.420823 -73.740822 +L 301.067478 -74.210778 +L 305.714134 -74.966218 +L 310.360789 -76.69732 +L 315.007444 -78.189227 +L 319.6541 -79.795472 +L 324.300755 -81.021999 +L 328.947411 -81.250797 +L 333.594066 -81.942081 +L 338.240721 -82.049997 +L 342.887377 -82.273539 +L 347.534032 -82.857555 +L 352.180688 -84.325872 +L 356.827343 -85.670173 +L 361.473998 -85.35379 +L 366.120654 -84.846088 +L 370.767309 -85.297089 +L 375.413965 -85.649199 +L 380.06062 -86.250512 +L 384.707275 -85.776227 +L 389.353931 -85.620448 +L 394.000586 -87.362362 +L 398.647241 -88.804711 +L 403.293897 -88.473726 +L 407.940552 -88.656671 +L 412.587208 -89.723482 +L 417.233863 -90.387964 +L 421.880518 -91.284319 +L 426.527174 -90.959128 +L 431.173829 -90.379548 +L 435.820485 -90.282182 +L 440.46714 -91.067484 +L 445.113795 -92.11991 +L 449.760451 -93.777576 +L 454.407106 -94.048442 +L 459.053762 -93.791683 +L 463.700417 -94.322224 +L 468.347072 -95.663632 +L 472.993728 -97.018809 +L 477.640383 -97.236528 +L 482.287039 -97.685934 +L 486.933694 -98.675564 +L 491.580349 -99.97344 +L 496.227005 -100.456137 +L 500.87366 -101.465951 +L 505.520316 -102.512154 +L 510.166971 -104.191436 +L 514.813626 -105.459373 +L 519.460282 -107.344759 +L 524.106937 -109.212536 +L 528.753593 -108.848544 +L 533.400248 -109.126041 +L 533.400248 -111.144531 +L 533.400248 -111.144531 +L 528.753593 -111.571189 +L 524.106937 -111.873636 +L 519.460282 -109.00033 +L 514.813626 -107.602977 +L 510.166971 -106.408738 +L 505.520316 -105.158806 +L 500.87366 -103.52652 +L 496.227005 -101.87332 +L 491.580349 -100.840411 +L 486.933694 -100.213083 +L 482.287039 -99.74092 +L 477.640383 -99.334691 +L 472.993728 -98.452201 +L 468.347072 -97.564221 +L 463.700417 -96.321601 +L 459.053762 -94.77166 +L 454.407106 -95.46652 +L 449.760451 -95.315375 +L 445.113795 -94.641152 +L 440.46714 -93.752279 +L 435.820485 -92.308051 +L 431.173829 -92.705875 +L 426.527174 -93.500132 +L 421.880518 -94.398424 +L 417.233863 -92.99814 +L 412.587208 -91.547168 +L 407.940552 -90.938 +L 403.293897 -90.865259 +L 398.647241 -91.043992 +L 394.000586 -89.995938 +L 389.353931 -88.295482 +L 384.707275 -87.938079 +L 380.06062 -87.287912 +L 375.413965 -87.073217 +L 370.767309 -85.994355 +L 366.120654 -85.656989 +L 361.473998 -86.452687 +L 356.827343 -86.827177 +L 352.180688 -85.296543 +L 347.534032 -84.040234 +L 342.887377 -83.294029 +L 338.240721 -83.378327 +L 333.594066 -83.394787 +L 328.947411 -82.859032 +L 324.300755 -82.503911 +L 319.6541 -81.316606 +L 315.007444 -80.003718 +L 310.360789 -78.436628 +L 305.714134 -77.698955 +L 301.067478 -77.179545 +L 296.420823 -76.54143 +L 291.774167 -76.192504 +L 287.127512 -75.919906 +L 282.480857 -75.824636 +L 277.834201 -75.462382 +L 273.187546 -74.778669 +L 268.54089 -73.938356 +L 263.894235 -72.791492 +L 259.24758 -71.674977 +L 254.600924 -70.668449 +L 249.954269 -69.744447 +L 245.307613 -68.928566 +L 240.660958 -67.638242 +L 236.014303 -66.196965 +L 231.367647 -65.457928 +L 226.720992 -64.987935 +L 222.074336 -64.434704 +L 217.427681 -63.641081 +L 212.781026 -62.693193 +L 208.13437 -61.942877 +L 203.487715 -61.336523 +L 198.841059 -60.574733 +L 194.194404 -59.603029 +L 189.547749 -59.170529 +L 184.901093 -58.762272 +L 180.254438 -58.458151 +L 175.607782 -58.11049 +L 170.961127 -57.628252 +L 166.314472 -57.151327 +L 161.667816 -56.715632 +L 157.021161 -56.106967 +L 152.374505 -55.468281 +L 147.72785 -54.971128 +L 143.081195 -54.549002 +L 138.434539 -54.23367 +L 133.787884 -53.857745 +L 129.141228 -53.391917 +L 124.494573 -52.853825 +L 119.847918 -52.405318 +L 115.201262 -51.906396 +L 110.554607 -51.436062 +L 105.907951 -51.111303 +L 101.261296 -50.929512 +L 96.614641 -50.785928 +L 91.967985 -50.64958 +L 87.32133 -50.563884 +L 82.674674 -50.479362 +L 78.028019 -50.353053 +L 73.381364 -50.221118 +z +" id="m68c7860df7" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m68c7860df7" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 73.381364 -50.321344 +L 73.381364 -50.184043 +L 78.050326 -50.234455 +L 82.719288 -50.343737 +L 87.388251 -50.51245 +L 92.057213 -50.632738 +L 96.726175 -50.709521 +L 101.395138 -50.759958 +L 106.0641 -50.85993 +L 110.733062 -50.961195 +L 115.402025 -51.005005 +L 120.070987 -51.02862 +L 124.739949 -51.057818 +L 129.408912 -50.996186 +L 134.077874 -51.032995 +L 138.746837 -51.099556 +L 143.415799 -51.186029 +L 148.084761 -51.231768 +L 152.753724 -51.390158 +L 157.422686 -51.557511 +L 162.091648 -51.727579 +L 166.760611 -51.93737 +L 171.429573 -52.28884 +L 176.098535 -52.687389 +L 180.767498 -53.062651 +L 185.43646 -53.563113 +L 190.105422 -54.207923 +L 194.774385 -54.978197 +L 199.443347 -55.875589 +L 204.112309 -57.004254 +L 208.781272 -58.020054 +L 213.450234 -58.976665 +L 218.119197 -59.875118 +L 222.788159 -60.756755 +L 227.457121 -61.47978 +L 232.126084 -62.524643 +L 236.795046 -63.359992 +L 241.464008 -64.293195 +L 246.132971 -65.668584 +L 250.801933 -67.221517 +L 255.470895 -68.610161 +L 260.139858 -69.352791 +L 264.80882 -70.090448 +L 269.477782 -70.453047 +L 274.146745 -71.184625 +L 278.815707 -71.939903 +L 283.484669 -73.306432 +L 288.153632 -74.148621 +L 292.822594 -75.40166 +L 297.491556 -76.623879 +L 302.160519 -77.514524 +L 306.829481 -78.344935 +L 311.498444 -78.543222 +L 316.167406 -79.436832 +L 320.836368 -79.839878 +L 325.505331 -80.242001 +L 330.174293 -81.631969 +L 334.843255 -82.663933 +L 339.512218 -82.482438 +L 344.18118 -82.51858 +L 348.850142 -82.987823 +L 353.519105 -83.08392 +L 358.188067 -83.217328 +L 362.857029 -83.387848 +L 367.525992 -85.24739 +L 372.194954 -87.130784 +L 376.863916 -87.578024 +L 381.532879 -86.659429 +L 386.201841 -88.082389 +L 390.870803 -89.814931 +L 395.539766 -89.780163 +L 400.208728 -89.929737 +L 404.877691 -89.298845 +L 409.546653 -89.314962 +L 414.215615 -90.078386 +L 418.884578 -90.606985 +L 423.55354 -91.416845 +L 428.222502 -92.916262 +L 432.891465 -92.68158 +L 437.560427 -91.540489 +L 442.229389 -91.363379 +L 446.898352 -91.539845 +L 451.567314 -93.080425 +L 456.236276 -94.20933 +L 460.905239 -93.945214 +L 465.574201 -93.141633 +L 470.243163 -92.569755 +L 474.912126 -92.293347 +L 479.581088 -92.289443 +L 484.250051 -92.617767 +L 488.919013 -94.268133 +L 493.587975 -95.100786 +L 498.256938 -95.507459 +L 502.9259 -96.018444 +L 507.594862 -96.030137 +L 512.263825 -96.699622 +L 516.932787 -97.389956 +L 521.601749 -97.290461 +L 526.270712 -97.867941 +L 530.939674 -99.554992 +L 535.608636 -99.6006 +L 535.608636 -101.445156 +L 535.608636 -101.445156 +L 530.939674 -101.618309 +L 526.270712 -100.72844 +L 521.601749 -100.558323 +L 516.932787 -100.46005 +L 512.263825 -98.955126 +L 507.594862 -98.882427 +L 502.9259 -98.565812 +L 498.256938 -98.02665 +L 493.587975 -97.708485 +L 488.919013 -96.315087 +L 484.250051 -95.291436 +L 479.581088 -95.11966 +L 474.912126 -95.405719 +L 470.243163 -95.253144 +L 465.574201 -94.740049 +L 460.905239 -96.052656 +L 456.236276 -96.342113 +L 451.567314 -94.650363 +L 446.898352 -93.202376 +L 442.229389 -93.074706 +L 437.560427 -93.158796 +L 432.891465 -93.881701 +L 428.222502 -94.203424 +L 423.55354 -92.911546 +L 418.884578 -91.660961 +L 414.215615 -92.124263 +L 409.546653 -91.374453 +L 404.877691 -91.046839 +L 400.208728 -91.02198 +L 395.539766 -90.971445 +L 390.870803 -91.118949 +L 386.201841 -89.267876 +L 381.532879 -88.643819 +L 376.863916 -88.971848 +L 372.194954 -88.276106 +L 367.525992 -87.218456 +L 362.857029 -86.180617 +L 358.188067 -87.122731 +L 353.519105 -86.576602 +L 348.850142 -86.110987 +L 344.18118 -85.780136 +L 339.512218 -85.972495 +L 334.843255 -84.884065 +L 330.174293 -83.921456 +L 325.505331 -82.64527 +L 320.836368 -81.104604 +L 316.167406 -80.120118 +L 311.498444 -79.576165 +L 306.829481 -79.45999 +L 302.160519 -78.539198 +L 297.491556 -77.865753 +L 292.822594 -76.131192 +L 288.153632 -75.087056 +L 283.484669 -75.111539 +L 278.815707 -74.187576 +L 274.146745 -73.015796 +L 269.477782 -71.919458 +L 264.80882 -71.720029 +L 260.139858 -71.206789 +L 255.470895 -70.720034 +L 250.801933 -68.973332 +L 246.132971 -66.996187 +L 241.464008 -65.682541 +L 236.795046 -64.818032 +L 232.126084 -63.931919 +L 227.457121 -62.660125 +L 222.788159 -61.972186 +L 218.119197 -61.350272 +L 213.450234 -60.4296 +L 208.781272 -59.437026 +L 204.112309 -58.280179 +L 199.443347 -57.128189 +L 194.774385 -56.151057 +L 190.105422 -55.32779 +L 185.43646 -54.48861 +L 180.767498 -53.798529 +L 176.098535 -53.311517 +L 171.429573 -52.83342 +L 166.760611 -52.362303 +L 162.091648 -52.067434 +L 157.422686 -51.826521 +L 152.753724 -51.61597 +L 148.084761 -51.439363 +L 143.415799 -51.355669 +L 138.746837 -51.256032 +L 134.077874 -51.190824 +L 129.408912 -51.145524 +L 124.739949 -51.184796 +L 120.070987 -51.15941 +L 115.402025 -51.108989 +L 110.733062 -51.060519 +L 106.0641 -50.991557 +L 101.395138 -50.897761 +L 96.726175 -50.836712 +L 92.057213 -50.750083 +L 87.388251 -50.651911 +L 82.719288 -50.496026 +L 78.050326 -50.35854 +L 73.381364 -50.321344 +z +" id="m4e5a768306" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#m4e5a768306" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 73.381364 -51.588833 +L 73.381364 -51.254951 +L 78.050244 -51.530492 +L 82.719125 -51.594059 +L 87.388006 -51.434623 +L 92.056886 -51.298995 +L 96.725767 -51.173982 +L 101.394647 -51.130721 +L 106.063528 -51.182161 +L 110.732409 -51.232792 +L 115.401289 -51.251115 +L 120.07017 -51.185414 +L 124.739051 -51.156998 +L 129.407931 -51.184358 +L 134.076812 -51.04796 +L 138.745693 -50.980358 +L 143.414573 -50.946385 +L 148.083454 -51.00267 +L 152.752335 -51.009977 +L 157.421215 -50.990231 +L 162.090096 -50.927709 +L 166.758977 -50.902287 +L 171.427857 -50.880788 +L 176.096738 -50.904673 +L 180.765618 -50.88706 +L 185.434499 -50.913417 +L 190.10338 -50.948251 +L 194.77226 -50.932524 +L 199.441141 -50.917152 +L 204.110022 -50.919034 +L 208.778902 -50.898331 +L 213.447783 -50.933169 +L 218.116664 -51.006951 +L 222.785544 -50.93469 +L 227.454425 -50.94049 +L 232.123306 -50.953526 +L 236.792186 -50.966697 +L 241.461067 -51.016806 +L 246.129947 -51.065934 +L 250.798828 -51.178514 +L 255.467709 -51.232462 +L 260.136589 -51.215279 +L 264.80547 -51.211415 +L 269.474351 -51.274812 +L 274.143231 -51.325809 +L 278.812112 -51.271882 +L 283.480993 -51.283214 +L 288.149873 -51.33362 +L 292.818754 -51.40714 +L 297.487635 -51.426203 +L 302.156515 -51.511113 +L 306.825396 -51.653526 +L 311.494276 -51.731735 +L 316.163157 -51.81883 +L 320.832038 -51.913818 +L 325.500918 -51.9347 +L 330.169799 -51.9305 +L 334.83868 -51.94943 +L 339.50756 -52.019626 +L 344.176441 -52.118048 +L 348.845322 -52.172316 +L 353.514202 -52.294771 +L 358.183083 -52.425711 +L 362.851964 -52.373799 +L 367.520844 -52.391619 +L 372.189725 -52.474519 +L 376.858605 -52.433773 +L 381.527486 -52.310797 +L 386.196367 -52.323293 +L 390.865247 -52.465018 +L 395.534128 -52.581577 +L 400.203009 -52.649303 +L 404.871889 -52.761122 +L 409.54077 -52.886273 +L 414.209651 -53.021535 +L 418.878531 -53.124235 +L 423.547412 -53.296588 +L 428.216293 -53.444079 +L 432.885173 -53.51401 +L 437.554054 -53.527221 +L 442.222934 -53.570171 +L 446.891815 -53.740531 +L 451.560696 -53.827177 +L 456.229576 -53.821365 +L 460.898457 -54.021738 +L 465.567338 -54.189675 +L 470.236218 -54.212215 +L 474.905099 -54.432552 +L 479.57398 -54.54383 +L 484.24286 -54.699123 +L 488.911741 -55.005803 +L 493.580622 -55.184078 +L 498.249502 -55.363476 +L 502.918383 -55.612099 +L 507.587264 -55.607866 +L 512.256144 -55.53895 +L 516.925025 -55.700997 +L 521.593905 -55.835262 +L 526.262786 -56.016536 +L 530.931667 -56.008067 +L 535.600547 -55.910458 +L 535.600547 -57.736489 +L 535.600547 -57.736489 +L 530.931667 -57.619266 +L 526.262786 -57.469219 +L 521.593905 -57.341924 +L 516.925025 -57.203593 +L 512.256144 -57.144433 +L 507.587264 -57.395022 +L 502.918383 -57.383665 +L 498.249502 -56.804318 +L 493.580622 -56.435821 +L 488.911741 -56.351353 +L 484.24286 -56.190654 +L 479.57398 -55.982186 +L 474.905099 -55.889087 +L 470.236218 -55.687141 +L 465.567338 -55.502355 +L 460.898457 -55.39928 +L 456.229576 -55.270936 +L 451.560696 -55.193793 +L 446.891815 -55.087759 +L 442.222934 -54.955648 +L 437.554054 -54.934536 +L 432.885173 -54.889465 +L 428.216293 -54.97684 +L 423.547412 -55.044832 +L 418.878531 -54.865521 +L 414.209651 -54.672943 +L 409.54077 -54.545216 +L 404.871889 -54.400236 +L 400.203009 -54.311426 +L 395.534128 -53.98657 +L 390.865247 -53.830929 +L 386.196367 -53.623636 +L 381.527486 -53.614698 +L 376.858605 -53.645134 +L 372.189725 -53.652082 +L 367.520844 -53.395979 +L 362.851964 -53.418937 +L 358.183083 -53.580712 +L 353.514202 -53.365427 +L 348.845322 -53.069372 +L 344.176441 -53.154888 +L 339.50756 -52.929514 +L 334.83868 -52.768802 +L 330.169799 -52.845565 +L 325.500918 -52.713073 +L 320.832038 -52.744658 +L 316.163157 -52.615437 +L 311.494276 -52.517066 +L 306.825396 -52.37837 +L 302.156515 -52.147522 +L 297.487635 -51.985583 +L 292.818754 -52.003245 +L 288.149873 -51.949118 +L 283.480993 -51.865026 +L 278.812112 -51.781915 +L 274.143231 -51.755795 +L 269.474351 -51.690398 +L 264.80547 -51.558079 +L 260.136589 -51.538141 +L 255.467709 -51.573853 +L 250.798828 -51.571486 +L 246.129947 -51.459962 +L 241.461067 -51.3649 +L 236.792186 -51.289121 +L 232.123306 -51.265125 +L 227.454425 -51.220475 +L 222.785544 -51.132497 +L 218.116664 -51.118364 +L 213.447783 -51.117567 +L 208.778902 -51.124034 +L 204.110022 -51.152516 +L 199.441141 -51.071001 +L 194.77226 -51.040484 +L 190.10338 -51.081087 +L 185.434499 -51.053585 +L 180.765618 -51.014031 +L 176.096738 -51.014291 +L 171.427857 -50.94865 +L 166.758977 -51.013443 +L 162.090096 -51.109573 +L 157.421215 -51.22371 +L 152.752335 -51.334228 +L 148.083454 -51.279838 +L 143.414573 -51.36758 +L 138.745693 -51.501596 +L 134.076812 -51.567185 +L 129.407931 -51.56865 +L 124.739051 -51.543543 +L 120.07017 -51.563253 +L 115.401289 -51.609703 +L 110.732409 -51.469765 +L 106.063528 -51.392509 +L 101.394647 -51.285451 +L 96.725767 -51.302032 +L 92.056886 -51.45232 +L 87.388006 -51.67316 +L 82.719125 -51.882139 +L 78.050244 -51.891223 +L 73.381364 -51.588833 +z +" id="md4858a710f" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#md4858a710f" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 73.381364 -50.2669 +L 73.381364 -50.146364 +L 78.050242 -50.276234 +L 82.71912 -50.370622 +L 87.387999 -50.402821 +L 92.056877 -50.457129 +L 96.725755 -50.501342 +L 101.394633 -50.513208 +L 106.063512 -50.505906 +L 110.73239 -50.559425 +L 115.401268 -50.621231 +L 120.070147 -50.723023 +L 124.739025 -50.875083 +L 129.407903 -51.048082 +L 134.076782 -51.31975 +L 138.74566 -51.614423 +L 143.414538 -51.865709 +L 148.083417 -52.13048 +L 152.752295 -52.325767 +L 157.421173 -52.559866 +L 162.090052 -52.990009 +L 166.75893 -53.351677 +L 171.427808 -53.761654 +L 176.096686 -54.015705 +L 180.765565 -54.272187 +L 185.434443 -54.631248 +L 190.103321 -54.896282 +L 194.7722 -55.167904 +L 199.441078 -55.470423 +L 204.109956 -55.78633 +L 208.778835 -56.071554 +L 213.447713 -56.328578 +L 218.116591 -56.526232 +L 222.78547 -56.831649 +L 227.454348 -57.127021 +L 232.123226 -57.339649 +L 236.792104 -57.663292 +L 241.460983 -57.914911 +L 246.129861 -58.052952 +L 250.798739 -58.280898 +L 255.467618 -58.572245 +L 260.136496 -58.841575 +L 264.805374 -59.447004 +L 269.474253 -60.085643 +L 274.143131 -60.269276 +L 278.812009 -60.615674 +L 283.480888 -61.036146 +L 288.149766 -61.165157 +L 292.818644 -61.401991 +L 297.487522 -61.771684 +L 302.156401 -62.168182 +L 306.825279 -62.303859 +L 311.494157 -62.811213 +L 316.163036 -63.139122 +L 320.831914 -63.300248 +L 325.500792 -63.554505 +L 330.169671 -63.850475 +L 334.838549 -63.973459 +L 339.507427 -64.090892 +L 344.176306 -64.175547 +L 348.845184 -63.933788 +L 353.514062 -64.213713 +L 358.182941 -64.603634 +L 362.851819 -64.96885 +L 367.520697 -65.126685 +L 372.189575 -65.213146 +L 376.858454 -65.097015 +L 381.527332 -65.359189 +L 386.19621 -66.05971 +L 390.865089 -66.681854 +L 395.533967 -67.069222 +L 400.202845 -67.436677 +L 404.871724 -67.458461 +L 409.540602 -67.600189 +L 414.20948 -67.364178 +L 418.878359 -67.521858 +L 423.547237 -67.573906 +L 428.216115 -68.013391 +L 432.884993 -68.446433 +L 437.553872 -68.986073 +L 442.22275 -69.105388 +L 446.891628 -69.466231 +L 451.560507 -69.01297 +L 456.229385 -68.939572 +L 460.898263 -69.258551 +L 465.567142 -69.024701 +L 470.23602 -69.22596 +L 474.904898 -69.703149 +L 479.573777 -70.74415 +L 484.242655 -70.879511 +L 488.911533 -71.050292 +L 493.580411 -71.243473 +L 498.24929 -71.321961 +L 502.918168 -71.050768 +L 507.587046 -71.271133 +L 512.255925 -71.329564 +L 516.924803 -71.24029 +L 521.593681 -71.536077 +L 526.26256 -71.687909 +L 530.931438 -71.667785 +L 535.600316 -71.086578 +L 535.600316 -73.28753 +L 535.600316 -73.28753 +L 530.931438 -73.580155 +L 526.26256 -73.363526 +L 521.593681 -72.995188 +L 516.924803 -72.611016 +L 512.255925 -73.072408 +L 507.587046 -72.815519 +L 502.918168 -72.970694 +L 498.24929 -73.413235 +L 493.580411 -73.036477 +L 488.911533 -72.704357 +L 484.242655 -72.317323 +L 479.573777 -71.992549 +L 474.904898 -70.931139 +L 470.23602 -70.609691 +L 465.567142 -70.36182 +L 460.898263 -70.565153 +L 456.229385 -70.484826 +L 451.560507 -70.197172 +L 446.891628 -70.38076 +L 442.22275 -70.228676 +L 437.553872 -69.817468 +L 432.884993 -69.749214 +L 428.216115 -69.46822 +L 423.547237 -69.163311 +L 418.878359 -68.969909 +L 414.20948 -68.69518 +L 409.540602 -68.501735 +L 404.871724 -68.191828 +L 400.202845 -68.285487 +L 395.533967 -67.842716 +L 390.865089 -67.455914 +L 386.19621 -67.064886 +L 381.527332 -66.463732 +L 376.858454 -66.326349 +L 372.189575 -66.763365 +L 367.520697 -66.489807 +L 362.851819 -66.023124 +L 358.182941 -65.568761 +L 353.514062 -65.191635 +L 348.845184 -64.683331 +L 344.176306 -64.782036 +L 339.507427 -64.81771 +L 334.838549 -64.488214 +L 330.169671 -64.435287 +L 325.500792 -63.96263 +L 320.831914 -63.871212 +L 316.163036 -63.564731 +L 311.494157 -63.274112 +L 306.825279 -62.957219 +L 302.156401 -62.640347 +L 297.487522 -62.33064 +L 292.818644 -61.895307 +L 288.149766 -61.559272 +L 283.480888 -61.422038 +L 278.812009 -60.884937 +L 274.143131 -60.552788 +L 269.474253 -60.363421 +L 264.805374 -59.716596 +L 260.136496 -59.207913 +L 255.467618 -58.917388 +L 250.798739 -58.744529 +L 246.129861 -58.502464 +L 241.460983 -58.284892 +L 236.792104 -58.067434 +L 232.123226 -57.716536 +L 227.454348 -57.455523 +L 222.78547 -57.188868 +L 218.116591 -56.871564 +L 213.447713 -56.649562 +L 208.778835 -56.494592 +L 204.109956 -56.17136 +L 199.441078 -55.774106 +L 194.7722 -55.535875 +L 190.103321 -55.266395 +L 185.434443 -54.928648 +L 180.765565 -54.534654 +L 176.096686 -54.245158 +L 171.427808 -53.977496 +L 166.75893 -53.550666 +L 162.090052 -53.155428 +L 157.421173 -52.750697 +L 152.752295 -52.523229 +L 148.083417 -52.286414 +L 143.414538 -51.939389 +L 138.74566 -51.686008 +L 134.076782 -51.415781 +L 129.407903 -51.207927 +L 124.739025 -51.020591 +L 120.070147 -50.816669 +L 115.401268 -50.705457 +L 110.73239 -50.619795 +L 106.063512 -50.587909 +L 101.394633 -50.585149 +L 96.725755 -50.628764 +L 92.056877 -50.583924 +L 87.387999 -50.509941 +L 82.71912 -50.441069 +L 78.050242 -50.3599 +L 73.381364 -50.2669 +z +" id="m13a4b7fdc7" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#m13a4b7fdc7" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 73.381364 -50.574343 +L 73.381364 -50.430187 +L 78.050256 -50.553371 +L 82.719148 -50.743199 +L 87.388041 -50.955881 +L 92.056933 -51.146197 +L 96.725825 -51.32932 +L 101.394718 -51.526196 +L 106.06361 -51.632326 +L 110.732502 -51.793593 +L 115.401394 -51.949553 +L 120.070287 -52.028103 +L 124.739179 -52.102435 +L 129.408071 -52.213433 +L 134.076964 -52.321038 +L 138.745856 -52.345137 +L 143.414748 -52.448887 +L 148.083641 -52.525941 +L 152.752533 -52.57299 +L 157.421425 -52.579428 +L 162.090318 -52.645737 +L 166.75921 -52.762738 +L 171.428102 -52.810633 +L 176.096995 -52.841069 +L 180.765887 -52.818114 +L 185.434779 -52.778371 +L 190.103672 -52.760103 +L 194.772564 -52.826136 +L 199.441456 -52.772152 +L 204.110348 -52.772225 +L 208.779241 -52.864572 +L 213.448133 -52.955159 +L 218.117025 -52.969286 +L 222.785918 -53.051268 +L 227.45481 -53.009353 +L 232.123702 -52.950935 +L 236.792595 -52.89203 +L 241.461487 -52.934927 +L 246.130379 -53.014614 +L 250.799272 -53.085509 +L 255.468164 -53.091934 +L 260.137056 -53.109092 +L 264.805949 -53.219026 +L 269.474841 -53.284862 +L 274.143733 -53.286148 +L 278.812626 -53.248685 +L 283.481518 -53.319705 +L 288.15041 -53.435817 +L 292.819302 -53.503103 +L 297.488195 -53.531184 +L 302.157087 -53.479901 +L 306.825979 -53.424898 +L 311.494872 -53.410904 +L 316.163764 -53.453611 +L 320.832656 -53.448032 +L 325.501549 -53.487501 +L 330.170441 -53.481693 +L 334.839333 -53.453037 +L 339.508226 -53.46544 +L 344.177118 -53.453174 +L 348.84601 -53.586751 +L 353.514903 -53.680995 +L 358.183795 -53.66604 +L 362.852687 -53.634982 +L 367.52158 -53.647293 +L 372.190472 -53.690412 +L 376.859364 -53.660089 +L 381.528257 -53.656738 +L 386.197149 -53.643802 +L 390.866041 -53.68747 +L 395.534933 -53.786585 +L 400.203826 -53.805995 +L 404.872718 -53.892375 +L 409.54161 -53.91214 +L 414.210503 -53.97853 +L 418.879395 -54.042614 +L 423.548287 -54.157758 +L 428.21718 -54.12588 +L 432.886072 -54.156057 +L 437.554964 -54.150706 +L 442.223857 -54.125545 +L 446.892749 -54.150682 +L 451.561641 -54.220266 +L 456.230534 -54.22254 +L 460.899426 -54.269065 +L 465.568318 -54.300506 +L 470.237211 -54.330113 +L 474.906103 -54.366985 +L 479.574995 -54.349077 +L 484.243887 -54.326127 +L 488.91278 -54.319416 +L 493.581672 -54.240249 +L 498.250564 -54.242938 +L 502.919457 -54.300331 +L 507.588349 -54.394983 +L 512.257241 -54.360324 +L 516.926134 -54.413441 +L 521.595026 -54.443082 +L 526.263918 -54.48368 +L 530.932811 -54.42005 +L 535.601703 -54.346732 +L 535.601703 -55.30833 +L 535.601703 -55.30833 +L 530.932811 -55.313194 +L 526.263918 -55.380568 +L 521.595026 -55.324655 +L 516.926134 -55.35683 +L 512.257241 -55.321186 +L 507.588349 -55.250133 +L 502.919457 -55.160349 +L 498.250564 -55.1007 +L 493.581672 -54.985851 +L 488.91278 -55.03638 +L 484.243887 -55.009947 +L 479.574995 -55.036486 +L 474.906103 -55.039244 +L 470.237211 -55.035254 +L 465.568318 -54.937574 +L 460.899426 -54.815188 +L 456.230534 -54.700442 +L 451.561641 -54.626938 +L 446.892749 -54.595796 +L 442.223857 -54.630071 +L 437.554964 -54.753243 +L 432.886072 -54.780505 +L 428.21718 -54.722822 +L 423.548287 -54.672606 +L 418.879395 -54.576673 +L 414.210503 -54.47467 +L 409.54161 -54.407365 +L 404.872718 -54.372269 +L 400.203826 -54.340616 +L 395.534933 -54.273116 +L 390.866041 -54.248851 +L 386.197149 -54.269749 +L 381.528257 -54.243706 +L 376.859364 -54.222037 +L 372.190472 -54.240821 +L 367.52158 -54.125311 +L 362.852687 -54.07028 +L 358.183795 -54.057133 +L 353.514903 -54.07352 +L 348.84601 -53.996908 +L 344.177118 -53.880278 +L 339.508226 -53.870806 +L 334.839333 -53.779979 +L 330.170441 -53.744145 +L 325.501549 -53.768224 +L 320.832656 -53.795574 +L 316.163764 -53.82061 +L 311.494872 -53.752746 +L 306.825979 -53.670017 +L 302.157087 -53.649168 +L 297.488195 -53.681575 +L 292.819302 -53.617867 +L 288.15041 -53.562678 +L 283.481518 -53.503158 +L 278.812626 -53.47151 +L 274.143733 -53.478961 +L 269.474841 -53.477323 +L 264.805949 -53.412803 +L 260.137056 -53.307865 +L 255.468164 -53.205762 +L 250.799272 -53.181711 +L 246.130379 -53.110758 +L 241.461487 -53.068419 +L 236.792595 -53.059557 +L 232.123702 -53.152385 +L 227.45481 -53.183711 +L 222.785918 -53.1714 +L 218.117025 -53.110823 +L 213.448133 -53.162896 +L 208.779241 -53.077904 +L 204.110348 -53.003914 +L 199.441456 -52.983622 +L 194.772564 -52.979903 +L 190.103672 -52.948682 +L 185.434779 -52.961413 +L 180.765887 -53.010972 +L 176.096995 -52.993251 +L 171.428102 -52.952743 +L 166.75921 -52.874777 +L 162.090318 -52.817409 +L 157.421425 -52.745053 +L 152.752533 -52.743441 +L 148.083641 -52.72183 +L 143.414748 -52.683281 +L 138.745856 -52.546932 +L 134.076964 -52.492572 +L 129.408071 -52.400842 +L 124.739179 -52.315209 +L 120.070287 -52.231234 +L 115.401394 -52.18231 +L 110.732502 -52.034127 +L 106.06361 -51.834701 +L 101.394718 -51.704946 +L 96.725825 -51.537721 +L 92.056933 -51.318448 +L 87.388041 -51.066408 +L 82.719148 -50.843391 +L 78.050256 -50.679829 +L 73.381364 -50.574343 +z +" id="m5e8ae12e74" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pd55201c3ea)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#m5e8ae12e74" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 92.746538 +L 78.050134 92.368076 +L 82.718905 92.086849 +L 87.387675 91.882719 +L 92.056445 91.754503 +L 96.725216 91.720413 +L 101.393986 91.745543 +L 106.062757 91.803835 +L 110.731527 91.880716 +L 115.400298 91.869244 +L 120.069068 91.836011 +L 124.737839 91.759222 +L 129.406609 91.740132 +L 134.07538 91.647075 +L 138.74415 91.530224 +L 143.41292 91.365174 +L 148.081691 91.196871 +L 152.750461 91.064252 +L 157.419232 90.799302 +L 162.088002 90.599781 +L 166.756773 90.346433 +L 171.425543 90.089512 +L 176.094314 89.810937 +L 180.763084 89.592955 +L 185.431855 89.328662 +L 190.100625 88.86296 +L 194.769395 88.34829 +L 199.438166 87.901857 +L 204.106936 87.444337 +L 208.775707 87.009097 +L 213.444477 86.538998 +L 218.113248 85.923027 +L 222.782018 85.591154 +L 227.450789 85.568043 +L 232.119559 85.4633 +L 236.78833 84.977873 +L 241.4571 84.717475 +L 246.125871 84.394297 +L 250.794641 84.178821 +L 255.463411 83.851938 +L 260.132182 83.682884 +L 264.800952 83.393874 +L 269.469723 83.074013 +L 274.138493 82.738848 +L 278.807264 82.379848 +L 283.476034 82.099699 +L 288.144805 82.130494 +L 292.813575 82.164343 +L 297.482346 82.144705 +L 302.151116 82.018524 +L 306.819886 82.249283 +L 311.488657 81.801372 +L 316.157427 81.503082 +L 320.826198 81.431808 +L 325.494968 81.272951 +L 330.163739 81.206951 +L 334.832509 81.291382 +L 339.50128 81.359894 +L 344.17005 81.316675 +L 348.838821 81.163012 +L 353.507591 81.172514 +L 358.176361 80.837603 +L 362.845132 80.364541 +L 367.513902 80.394178 +L 372.182673 80.194558 +L 376.851443 80.007569 +L 381.520214 79.831102 +L 386.188984 79.910278 +L 390.857755 79.646503 +L 395.526525 78.8274 +L 400.195296 78.337429 +L 404.864066 78.144253 +L 409.532836 77.979041 +L 414.201607 78.039294 +L 418.870377 77.765052 +L 423.539148 77.507313 +L 428.207918 77.11844 +L 432.876689 76.691939 +L 437.545459 76.738817 +L 442.21423 76.609647 +L 446.883 76.52099 +L 451.551771 76.102306 +L 456.220541 76.197025 +L 460.889311 75.649043 +L 465.558082 75.332193 +L 470.226852 75.143162 +L 474.895623 75.093106 +L 479.564393 74.867034 +L 484.233164 74.717821 +L 488.901934 74.786842 +L 493.570705 74.75263 +L 498.239475 74.4693 +L 502.908246 74.170288 +L 507.577016 74.097257 +L 512.245786 74.003924 +L 516.914557 73.633336 +L 521.583327 73.642733 +L 526.252098 73.675891 +L 530.920868 73.689381 +L 535.589639 73.88017 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 93.548772 +L 78.050059 93.389557 +L 82.718755 92.8899 +L 87.387451 92.242716 +L 92.056147 91.571436 +L 96.724842 90.619538 +L 101.393538 89.349504 +L 106.062234 87.583918 +L 110.73093 85.642711 +L 115.399625 84.27872 +L 120.068321 82.949401 +L 124.737017 82.792978 +L 129.405713 82.324158 +L 134.074408 82.442458 +L 138.743104 82.845459 +L 143.4118 82.745239 +L 148.080496 83.068127 +L 152.749191 83.116299 +L 157.417887 83.172667 +L 162.086583 83.236224 +L 166.755279 82.876127 +L 171.423974 82.905893 +L 176.09267 83.013218 +L 180.761366 83.360708 +L 185.430062 83.699473 +L 190.098757 83.419448 +L 194.767453 83.364589 +L 199.436149 83.542138 +L 204.104845 83.747878 +L 208.77354 84.264309 +L 213.442236 84.554925 +L 218.110932 85.486669 +L 222.779628 86.054377 +L 227.448323 85.865404 +L 232.117019 85.192783 +L 236.785715 83.881221 +L 241.454411 83.163861 +L 246.123106 83.024631 +L 250.791802 82.652509 +L 255.460498 82.553162 +L 260.129194 82.106749 +L 264.797889 82.043088 +L 269.466585 81.791884 +L 274.135281 81.91471 +L 278.803977 82.068378 +L 283.472672 81.467803 +L 288.141368 81.403056 +L 292.810064 80.643834 +L 297.47876 80.241112 +L 302.147456 80.214454 +L 306.816151 81.33975 +L 311.484847 82.182262 +L 316.153543 81.933738 +L 320.822239 81.987742 +L 325.490934 81.193238 +L 330.15963 80.1781 +L 334.828326 79.47266 +L 339.497022 78.59769 +L 344.165717 77.597215 +L 348.834413 77.421764 +L 353.503109 76.802241 +L 358.171805 76.201415 +L 362.8405 75.452347 +L 367.509196 75.962257 +L 372.177892 76.026063 +L 376.846588 75.598398 +L 381.515283 75.206752 +L 386.183979 75.078995 +L 390.852675 75.593372 +L 395.521371 76.454143 +L 400.190066 76.79037 +L 404.858762 76.101333 +L 409.527458 73.893935 +L 414.196154 72.539707 +L 418.864849 72.435581 +L 423.533545 71.840682 +L 428.202241 71.780486 +L 432.870937 72.498916 +L 437.539632 73.158659 +L 442.208328 72.933235 +L 446.877024 72.925167 +L 451.54572 73.209284 +L 456.214415 72.660683 +L 460.883111 71.687094 +L 465.551807 71.217304 +L 470.220503 70.724901 +L 474.889198 70.122774 +L 479.557894 70.62649 +L 484.22659 71.078331 +L 488.895286 70.530182 +L 493.563981 70.616627 +L 498.232677 70.051667 +L 502.901373 70.272374 +L 507.570069 70.081685 +L 512.238764 68.836488 +L 516.90746 67.823806 +L 521.576156 67.648275 +L 526.244852 68.388727 +L 530.913547 69.374814 +L 535.582243 69.144801 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 93.805003 +L 78.028019 93.685432 +L 82.674674 93.574709 +L 87.32133 93.497522 +L 91.967985 93.411243 +L 96.614641 93.281709 +L 101.261296 93.144387 +L 105.907951 92.97141 +L 110.554607 92.683795 +L 115.201262 92.278692 +L 119.847918 91.847099 +L 124.494573 91.428571 +L 129.141228 90.914875 +L 133.787884 90.42912 +L 138.434539 90.056187 +L 143.081195 89.695888 +L 147.72785 89.265778 +L 152.374505 88.769442 +L 157.021161 88.144711 +L 161.667816 87.551569 +L 166.314472 87.128772 +L 170.961127 86.656654 +L 175.607782 86.209848 +L 180.254438 85.882146 +L 184.901093 85.587017 +L 189.547749 85.19006 +L 194.194404 84.723693 +L 198.841059 83.818009 +L 203.487715 83.173515 +L 208.13437 82.652034 +L 212.781026 81.977191 +L 217.427681 81.002701 +L 222.074336 80.237288 +L 226.720992 79.586144 +L 231.367647 79.055204 +L 236.014303 78.53442 +L 240.660958 77.409525 +L 245.307613 76.223137 +L 249.954269 75.437795 +L 254.600924 74.597463 +L 259.24758 73.567361 +L 263.894235 72.31452 +L 268.54089 71.424946 +L 273.187546 70.756857 +L 277.834201 70.070816 +L 282.480857 69.541845 +L 287.127512 69.445316 +L 291.774167 69.144529 +L 296.420823 68.858874 +L 301.067478 68.304838 +L 305.714134 67.667413 +L 310.360789 66.433026 +L 315.007444 64.903528 +L 319.6541 63.443961 +L 324.300755 62.237045 +L 328.947411 61.945086 +L 333.594066 61.331566 +L 338.240721 61.285838 +L 342.887377 61.216216 +L 347.534032 60.551105 +L 352.180688 59.188792 +L 356.827343 57.751325 +L 361.473998 58.096762 +L 366.120654 58.748462 +L 370.767309 58.354278 +L 375.413965 57.638792 +L 380.06062 57.230788 +L 384.707275 57.142847 +L 389.353931 57.042035 +L 394.000586 55.32085 +L 398.647241 54.075648 +L 403.293897 54.330508 +L 407.940552 54.202664 +L 412.587208 53.364675 +L 417.233863 52.306948 +L 421.880518 51.158628 +L 426.527174 51.77037 +L 431.173829 52.457289 +L 435.820485 52.704884 +L 440.46714 51.590118 +L 445.113795 50.619469 +L 449.760451 49.453525 +L 454.407106 49.242519 +L 459.053762 49.718329 +L 463.700417 48.678087 +L 468.347072 47.386074 +L 472.993728 46.264495 +L 477.640383 45.714391 +L 482.287039 45.286573 +L 486.933694 44.555676 +L 491.580349 43.593075 +L 496.227005 42.835272 +L 500.87366 41.503765 +L 505.520316 40.16452 +L 510.166971 38.699913 +L 514.813626 37.468825 +L 519.460282 35.827455 +L 524.106937 33.456914 +L 528.753593 33.790134 +L 533.400248 33.864714 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 93.747306 +L 78.050326 93.703502 +L 82.719288 93.580119 +L 87.388251 93.417819 +L 92.057213 93.308589 +L 96.726175 93.226884 +L 101.395138 93.171141 +L 106.0641 93.074257 +L 110.733062 92.989143 +L 115.402025 92.943003 +L 120.070987 92.905985 +L 124.739949 92.878693 +L 129.408912 92.929145 +L 134.077874 92.88809 +L 138.746837 92.822206 +L 143.415799 92.729151 +L 148.084761 92.664434 +L 152.753724 92.496936 +L 157.422686 92.307984 +L 162.091648 92.102493 +L 166.760611 91.850163 +L 171.429573 91.43887 +L 176.098535 91.000547 +L 180.767498 90.56941 +L 185.43646 89.974138 +L 190.105422 89.232144 +L 194.774385 88.435373 +L 199.443347 87.498111 +L 204.112309 86.357784 +L 208.781272 85.27146 +L 213.450234 84.296867 +L 218.119197 83.387305 +L 222.788159 82.63553 +L 227.457121 81.930048 +L 232.126084 80.771719 +L 236.795046 79.910988 +L 241.464008 79.012132 +L 246.132971 77.667614 +L 250.801933 75.902576 +L 255.470895 74.334902 +L 260.139858 73.72021 +L 264.80882 73.094761 +L 269.477782 72.813748 +L 274.146745 71.899789 +L 278.815707 70.936261 +L 283.484669 69.791015 +L 288.153632 69.382162 +L 292.822594 68.233574 +L 297.491556 66.755184 +L 302.160519 65.973139 +L 306.829481 65.097537 +L 311.498444 64.940306 +L 316.167406 64.221525 +L 320.836368 63.527759 +L 325.505331 62.556364 +L 330.174293 61.223288 +L 334.843255 60.226001 +L 339.512218 59.772534 +L 344.18118 59.850642 +L 348.850142 59.450595 +L 353.519105 59.169739 +L 358.188067 58.829971 +L 362.857029 59.215768 +L 367.525992 57.767077 +L 372.194954 56.296555 +L 376.863916 55.725064 +L 381.532879 56.348376 +L 386.201841 55.324867 +L 390.870803 53.53306 +L 395.539766 53.624196 +L 400.208728 53.524141 +L 404.877691 53.827158 +L 409.546653 53.655293 +L 414.215615 52.898675 +L 418.884578 52.866027 +L 423.55354 51.835805 +L 428.222502 50.440157 +L 432.891465 50.718359 +L 437.560427 51.650358 +L 442.229389 51.780957 +L 446.898352 51.628889 +L 451.567314 50.134606 +L 456.236276 48.724279 +L 460.905239 49.001065 +L 465.574201 50.059159 +L 470.243163 50.08855 +L 474.912126 50.150467 +L 479.581088 50.295448 +L 484.250051 50.045398 +L 488.919013 48.70839 +L 493.587975 47.595365 +L 498.256938 47.232946 +L 502.9259 46.707872 +L 507.594862 46.543718 +L 512.263825 46.172626 +L 516.932787 45.074997 +L 521.601749 45.075608 +L 526.270712 44.70181 +L 530.939674 43.41335 +L 535.608636 43.477122 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 92.578108 +L 78.050244 92.289142 +L 82.719125 92.261901 +L 87.388006 92.446108 +L 92.056886 92.624343 +L 96.725767 92.761993 +L 101.394647 92.791914 +L 106.063528 92.712665 +L 110.732409 92.648722 +L 115.401289 92.569591 +L 120.07017 92.625666 +L 124.739051 92.64973 +L 129.407931 92.623496 +L 134.076812 92.692427 +L 138.745693 92.759023 +L 143.414573 92.843017 +L 148.083454 92.858746 +L 152.752335 92.827897 +L 157.421215 92.89303 +L 162.090096 92.981359 +L 166.758977 93.042135 +L 171.427857 93.085281 +L 176.096738 93.040518 +L 180.765618 93.049454 +L 185.434499 93.016499 +L 190.10338 92.985331 +L 194.77226 93.013496 +L 199.441141 93.005924 +L 204.110022 92.964225 +L 208.778902 92.988817 +L 213.447783 92.974632 +L 218.116664 92.937342 +L 222.785544 92.966406 +L 227.454425 92.919517 +L 232.123306 92.890675 +L 236.792186 92.872091 +L 241.461067 92.809147 +L 246.129947 92.737052 +L 250.798828 92.625 +L 255.467709 92.596842 +L 260.136589 92.62329 +L 264.80547 92.615253 +L 269.474351 92.517395 +L 274.143231 92.459198 +L 278.812112 92.473101 +L 283.480993 92.42588 +L 288.149873 92.358631 +L 292.818754 92.294808 +L 297.487635 92.294107 +L 302.156515 92.170683 +L 306.825396 91.984052 +L 311.494276 91.875599 +L 316.163157 91.782867 +L 320.832038 91.670762 +L 325.500918 91.676113 +L 330.169799 91.611968 +L 334.83868 91.640884 +L 339.50756 91.52543 +L 344.176441 91.363532 +L 348.845322 91.379156 +L 353.514202 91.169901 +L 358.183083 90.996788 +L 362.851964 91.103632 +L 367.520844 91.106201 +L 372.189725 90.936699 +L 376.858605 90.960546 +L 381.527486 91.037253 +L 386.196367 91.026535 +L 390.865247 90.852027 +L 395.534128 90.715926 +L 400.203009 90.519635 +L 404.871889 90.419321 +L 409.54077 90.284255 +L 414.209651 90.152761 +L 418.878531 90.005122 +L 423.547412 89.82929 +L 428.216293 89.789541 +L 432.885173 89.798263 +L 437.554054 89.769121 +L 442.222934 89.73709 +L 446.891815 89.585855 +L 451.560696 89.489515 +L 456.229576 89.453849 +L 460.898457 89.289491 +L 465.567338 89.153985 +L 470.236218 89.050322 +L 474.905099 88.839181 +L 479.57398 88.736992 +L 484.24286 88.555112 +L 488.911741 88.321422 +L 493.580622 88.19005 +L 498.249502 87.916103 +L 502.918383 87.502118 +L 507.587264 87.498556 +L 512.256144 87.658308 +L 516.925025 87.547705 +L 521.593905 87.411407 +L 526.262786 87.257122 +L 530.931667 87.186334 +L 535.600547 87.176527 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 93.793368 +L 78.050242 93.681933 +L 82.71912 93.594155 +L 87.387999 93.543619 +L 92.056877 93.479473 +L 96.725755 93.434947 +L 101.394633 93.450821 +L 106.063512 93.453092 +L 110.73239 93.41039 +L 115.401268 93.336656 +L 120.070147 93.230154 +L 124.739025 93.052163 +L 129.407903 92.871996 +L 134.076782 92.632234 +L 138.74566 92.349785 +L 143.414538 92.097451 +L 148.083417 91.791553 +L 152.752295 91.575502 +L 157.421173 91.344718 +L 162.090052 90.927281 +L 166.75893 90.548829 +L 171.427808 90.130425 +L 176.096686 89.869568 +L 180.765565 89.59658 +L 185.434443 89.220052 +L 190.103321 88.918661 +L 194.7722 88.64811 +L 199.441078 88.377735 +L 204.109956 88.021155 +L 208.778835 87.716927 +L 213.447713 87.51093 +L 218.116591 87.301102 +L 222.78547 86.989742 +L 227.454348 86.708728 +L 232.123226 86.471907 +L 236.792104 86.134637 +L 241.460983 85.900098 +L 246.129861 85.722292 +L 250.798739 85.487286 +L 255.467618 85.255183 +L 260.136496 84.975256 +L 264.805374 84.4182 +L 269.474253 83.775468 +L 274.143131 83.588968 +L 278.812009 83.249694 +L 283.480888 82.770908 +L 288.149766 82.637786 +L 292.818644 82.351351 +L 297.487522 81.948838 +L 302.156401 81.595736 +L 306.825279 81.369461 +L 311.494157 80.957337 +L 316.163036 80.648073 +L 320.831914 80.41427 +L 325.500792 80.241433 +L 330.169671 79.857119 +L 334.838549 79.769163 +L 339.507427 79.545699 +L 344.176306 79.521208 +L 348.845184 79.691441 +L 353.514062 79.297326 +L 358.182941 78.913803 +L 362.851819 78.504013 +L 367.520697 78.191754 +L 372.189575 78.011745 +L 376.858454 78.288318 +L 381.527332 78.08854 +L 386.19621 77.437702 +L 390.865089 76.931116 +L 395.533967 76.544031 +L 400.202845 76.138918 +L 404.871724 76.174856 +L 409.540602 75.949038 +L 414.20948 75.970321 +L 418.878359 75.754116 +L 423.547237 75.631391 +L 428.216115 75.259194 +L 432.884993 74.902176 +L 437.553872 74.59823 +L 442.22275 74.332968 +L 446.891628 74.076504 +L 451.560507 74.394929 +L 456.229385 74.287801 +L 460.898263 74.088148 +L 465.567142 74.30674 +L 470.23602 74.082174 +L 474.904898 73.682856 +L 479.573777 72.631651 +L 484.242655 72.401583 +L 488.911533 72.122675 +L 493.580411 71.860025 +L 498.24929 71.632402 +L 502.918168 71.989269 +L 507.587046 71.956674 +L 512.255925 71.799014 +L 516.924803 72.074347 +L 521.593681 71.734367 +L 526.26256 71.474282 +L 530.931438 71.37603 +L 535.600316 71.812946 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#pd55201c3ea)" d="M 73.381364 93.497735 +L 78.050256 93.3834 +L 82.719148 93.206705 +L 87.388041 92.988856 +L 92.056933 92.767678 +L 96.725825 92.566479 +L 101.394718 92.384429 +L 106.06361 92.266487 +L 110.732502 92.08614 +L 115.401394 91.934068 +L 120.070287 91.870331 +L 124.739179 91.791178 +L 129.408071 91.692862 +L 134.076964 91.593195 +L 138.745856 91.553965 +L 143.414748 91.433916 +L 148.083641 91.376114 +L 152.752533 91.341785 +L 157.421425 91.337759 +L 162.090318 91.268427 +L 166.75921 91.181243 +L 171.428102 91.118312 +L 176.096995 91.08284 +L 180.765887 91.085457 +L 185.434779 91.130108 +L 190.103672 91.145608 +L 194.772564 91.09698 +L 199.441456 91.122113 +L 204.110348 91.11193 +L 208.779241 91.028762 +L 213.448133 90.940973 +L 218.117025 90.959945 +L 222.785918 90.888666 +L 227.45481 90.903468 +L 232.123702 90.94834 +L 236.792595 91.024206 +L 241.461487 90.998327 +L 246.130379 90.937314 +L 250.799272 90.86639 +L 255.468164 90.851152 +L 260.137056 90.791521 +L 264.805949 90.684086 +L 269.474841 90.618907 +L 274.143733 90.617445 +L 278.812626 90.639902 +L 283.481518 90.588569 +L 288.15041 90.500753 +L 292.819302 90.439515 +L 297.488195 90.39362 +L 302.157087 90.435466 +L 306.825979 90.452542 +L 311.494872 90.418175 +L 316.163764 90.362889 +L 320.832656 90.378197 +L 325.501549 90.372138 +L 330.170441 90.387081 +L 334.839333 90.383492 +L 339.508226 90.331877 +L 344.177118 90.333274 +L 348.84601 90.208171 +L 353.514903 90.122742 +L 358.183795 90.138413 +L 362.852687 90.147369 +L 367.52158 90.113698 +L 372.190472 90.034383 +L 376.859364 90.058937 +L 381.528257 90.049778 +L 386.197149 90.043225 +L 390.866041 90.031839 +L 395.534933 89.970149 +L 400.203826 89.926694 +L 404.872718 89.867678 +L 409.54161 89.840248 +L 414.210503 89.7734 +L 418.879395 89.690356 +L 423.548287 89.584818 +L 428.21718 89.575649 +L 432.886072 89.531719 +L 437.554964 89.548026 +L 442.223857 89.622192 +L 446.892749 89.626761 +L 451.561641 89.576398 +L 456.230534 89.538509 +L 460.899426 89.457874 +L 465.568318 89.38096 +L 470.237211 89.317316 +L 474.906103 89.296886 +L 479.574995 89.307219 +L 484.243887 89.331963 +L 488.91278 89.322102 +L 493.581672 89.38695 +L 498.250564 89.328181 +L 502.919457 89.26966 +L 507.588349 89.177442 +L 512.257241 89.159245 +L 516.926134 89.114865 +L 521.595026 89.116131 +L 526.263918 89.067876 +L 530.932811 89.133378 +L 535.601703 89.172469 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.27 96.94 +L 50.27 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.27 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.27 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.495, 23.04)" x="304.495" y="23.04">BeamRider</text> + </g> + </g> + </g> + <defs> + <clipPath id="pd55201c3ea"> + <rect height="67.9" width="508.45" x="50.27" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 43.25 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 43.25 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 96.94 +L 66.680455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 66.680455, 114.798281)" x="66.680455" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p7a128d5ac8)" d="M 160.40291 96.94 +L 160.40291 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 160.40291, 114.798281)" x="160.40291" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p7a128d5ac8)" d="M 254.125366 96.94 +L 254.125366 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 254.125366, 114.798281)" x="254.125366" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p7a128d5ac8)" d="M 347.847821 96.94 +L 347.847821 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 347.847821, 114.798281)" x="347.847821" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p7a128d5ac8)" d="M 441.570277 96.94 +L 441.570277 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 441.570277, 114.798281)" x="441.570277" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p7a128d5ac8)" d="M 535.292732 96.94 +L 535.292732 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.292732, 114.798281)" x="535.292732" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p7a128d5ac8)" d="M 43.25 94.035628 +L 558.72 94.035628 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.75, 98.214769)" x="33.75" y="98.214769">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p7a128d5ac8)" d="M 43.25 67.158511 +L 558.72 67.158511 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.75, 71.337651)" x="33.75" y="71.337651">200</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#p7a128d5ac8)" d="M 43.25 40.281394 +L 558.72 40.281394 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.75, 44.460534)" x="33.75" y="44.460534">400</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 66.680455 -50.394524 +L 66.680455 -50.347532 +L 71.413777 -50.481829 +L 76.1471 -50.763168 +L 80.880423 -51.086308 +L 85.613746 -51.39122 +L 90.347069 -51.652007 +L 95.080392 -51.878136 +L 99.813715 -52.081623 +L 104.547038 -52.3415 +L 109.280361 -52.569854 +L 114.013684 -52.802888 +L 118.747007 -52.998762 +L 123.48033 -53.220829 +L 128.213652 -53.445852 +L 132.946975 -53.704297 +L 137.680298 -53.982552 +L 142.413621 -54.305366 +L 147.146944 -54.716076 +L 151.880267 -55.103288 +L 156.61359 -55.479527 +L 161.346913 -55.811099 +L 166.080236 -56.281943 +L 170.813559 -56.948726 +L 175.546882 -57.543373 +L 180.280205 -58.217096 +L 185.013527 -58.866933 +L 189.74685 -59.586879 +L 194.480173 -60.462667 +L 199.213496 -61.040202 +L 203.946819 -61.587826 +L 208.680142 -62.400116 +L 213.413465 -63.235074 +L 218.146788 -63.732441 +L 222.880111 -64.201602 +L 227.613434 -65.107667 +L 232.346757 -65.797703 +L 237.08008 -65.907253 +L 241.813403 -66.005243 +L 246.546725 -66.323024 +L 251.280048 -66.887192 +L 256.013371 -67.457538 +L 260.746694 -67.7976 +L 265.480017 -68.322781 +L 270.21334 -68.873769 +L 274.946663 -70.002435 +L 279.679986 -70.885309 +L 284.413309 -71.001322 +L 289.146632 -70.754284 +L 293.879955 -71.065378 +L 298.613278 -71.826403 +L 303.3466 -72.353927 +L 308.079923 -73.121407 +L 312.813246 -73.738833 +L 317.546569 -74.302545 +L 322.279892 -74.110274 +L 327.013215 -74.429224 +L 331.746538 -75.00726 +L 336.479861 -74.814819 +L 341.213184 -75.081531 +L 345.946507 -75.150497 +L 350.67983 -75.684461 +L 355.413153 -75.827763 +L 360.146475 -77.053515 +L 364.879798 -77.550857 +L 369.613121 -76.73834 +L 374.346444 -76.817728 +L 379.079767 -76.613299 +L 383.81309 -77.390206 +L 388.546413 -77.774049 +L 393.279736 -77.389526 +L 398.013059 -78.104948 +L 402.746382 -78.258691 +L 407.479705 -78.107166 +L 412.213028 -78.911366 +L 416.94635 -79.271726 +L 421.679673 -79.123831 +L 426.412996 -78.744615 +L 431.146319 -79.462941 +L 435.879642 -79.904212 +L 440.612965 -80.439301 +L 445.346288 -80.71912 +L 450.079611 -80.365196 +L 454.812934 -80.273628 +L 459.546257 -80.215261 +L 464.27958 -80.922482 +L 469.012903 -81.364494 +L 473.746225 -80.839256 +L 478.479548 -80.414457 +L 483.212871 -79.896537 +L 487.946194 -80.485793 +L 492.679517 -80.710096 +L 497.41284 -80.310026 +L 502.146163 -80.126267 +L 506.879486 -80.144796 +L 511.612809 -80.092416 +L 516.346132 -80.004448 +L 521.079455 -79.597985 +L 525.812778 -80.460284 +L 530.546101 -81.267197 +L 535.279423 -81.140093 +L 535.279423 -83.274144 +L 535.279423 -83.274144 +L 530.546101 -83.278674 +L 525.812778 -82.636155 +L 521.079455 -81.728528 +L 516.346132 -82.099223 +L 511.612809 -82.252814 +L 506.879486 -81.733863 +L 502.146163 -81.649659 +L 497.41284 -82.59314 +L 492.679517 -83.242221 +L 487.946194 -82.835044 +L 483.212871 -82.374538 +L 478.479548 -82.783969 +L 473.746225 -82.844506 +L 469.012903 -83.14009 +L 464.27958 -83.091994 +L 459.546257 -82.350842 +L 454.812934 -82.006324 +L 450.079611 -81.497985 +L 445.346288 -82.155757 +L 440.612965 -82.388957 +L 435.879642 -81.441987 +L 431.146319 -80.584295 +L 426.412996 -80.129106 +L 421.679673 -80.727988 +L 416.94635 -80.991062 +L 412.213028 -80.950284 +L 407.479705 -79.954776 +L 402.746382 -79.764561 +L 398.013059 -79.647579 +L 393.279736 -79.299116 +L 388.546413 -79.390594 +L 383.81309 -79.097567 +L 379.079767 -78.777082 +L 374.346444 -78.79496 +L 369.613121 -79.003178 +L 364.879798 -79.788744 +L 360.146475 -79.364224 +L 355.413153 -78.220181 +L 350.67983 -77.851064 +L 345.946507 -77.447812 +L 341.213184 -77.249936 +L 336.479861 -76.77757 +L 331.746538 -77.355462 +L 327.013215 -76.893368 +L 322.279892 -76.54623 +L 317.546569 -76.663278 +L 312.813246 -76.86604 +L 308.079923 -76.188796 +L 303.3466 -75.593967 +L 298.613278 -74.941679 +L 293.879955 -74.263603 +L 289.146632 -74.166482 +L 284.413309 -74.604587 +L 279.679986 -73.859847 +L 274.946663 -72.990897 +L 270.21334 -71.880194 +L 265.480017 -70.983489 +L 260.746694 -70.547087 +L 256.013371 -70.095279 +L 251.280048 -69.405226 +L 246.546725 -68.693921 +L 241.813403 -67.959644 +L 237.08008 -67.523089 +L 232.346757 -67.256246 +L 227.613434 -66.649677 +L 222.880111 -66.188187 +L 218.146788 -65.781717 +L 213.413465 -64.925131 +L 208.680142 -64.078666 +L 203.946819 -63.337567 +L 199.213496 -62.897728 +L 194.480173 -62.580253 +L 189.74685 -61.554536 +L 185.013527 -60.675276 +L 180.280205 -59.784966 +L 175.546882 -59.314802 +L 170.813559 -58.592459 +L 166.080236 -57.628095 +L 161.346913 -56.874902 +L 156.61359 -56.34968 +L 151.880267 -55.822323 +L 147.146944 -55.408938 +L 142.413621 -54.975162 +L 137.680298 -54.578369 +L 132.946975 -54.181588 +L 128.213652 -53.881542 +L 123.48033 -53.597716 +L 118.747007 -53.324642 +L 114.013684 -53.076809 +L 109.280361 -52.798178 +L 104.547038 -52.536046 +L 99.813715 -52.304352 +L 95.080392 -52.107119 +L 90.347069 -51.888633 +L 85.613746 -51.642093 +L 80.880423 -51.344106 +L 76.1471 -50.965143 +L 71.413777 -50.582353 +L 66.680455 -50.394524 +z +" id="mb1546cba9f" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#mb1546cba9f" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 66.680455 -50.221548 +L 66.680455 -50.217991 +L 71.413524 -50.255149 +L 76.146594 -50.32532 +L 80.879664 -50.424309 +L 85.612733 -50.560004 +L 90.345803 -50.765502 +L 95.078873 -51.100289 +L 99.811942 -51.652859 +L 104.545012 -52.568131 +L 109.278082 -54.099133 +L 114.011151 -56.212732 +L 118.744221 -58.400457 +L 123.477291 -60.612564 +L 128.21036 -62.547453 +L 132.94343 -64.355257 +L 137.6765 -65.837129 +L 142.409569 -67.410686 +L 147.142639 -68.782507 +L 151.875709 -69.332043 +L 156.608778 -70.237278 +L 161.341848 -71.205394 +L 166.074918 -72.388372 +L 170.807987 -73.314837 +L 175.541057 -73.750603 +L 180.274127 -74.045159 +L 185.007196 -74.371095 +L 189.740266 -74.637349 +L 194.473336 -75.022556 +L 199.206406 -75.818447 +L 203.939475 -76.87245 +L 208.672545 -76.675697 +L 213.405615 -76.192213 +L 218.138684 -76.078606 +L 222.871754 -76.360546 +L 227.604824 -77.184792 +L 232.337893 -76.990174 +L 237.070963 -76.376038 +L 241.804033 -75.939247 +L 246.537102 -76.138985 +L 251.270172 -76.727079 +L 256.003242 -76.611776 +L 260.736311 -76.118439 +L 265.469381 -75.929431 +L 270.202451 -76.22657 +L 274.93552 -76.701547 +L 279.66859 -76.214339 +L 284.40166 -75.952676 +L 289.134729 -75.765666 +L 293.867799 -75.961629 +L 298.600869 -76.113789 +L 303.333938 -75.526121 +L 308.067008 -75.502469 +L 312.800078 -76.020831 +L 317.533147 -74.737548 +L 322.266217 -75.149482 +L 326.999287 -76.004328 +L 331.732357 -75.589001 +L 336.465426 -74.683342 +L 341.198496 -74.408673 +L 345.931566 -75.386196 +L 350.664635 -75.713753 +L 355.397705 -75.775988 +L 360.130775 -76.213699 +L 364.863844 -76.215972 +L 369.596914 -76.449603 +L 374.329984 -76.754564 +L 379.063053 -75.851244 +L 383.796123 -74.836858 +L 388.529193 -74.827811 +L 393.262262 -74.468613 +L 397.995332 -74.747118 +L 402.728402 -76.813446 +L 407.461471 -78.779642 +L 412.194541 -79.535838 +L 416.927611 -79.414005 +L 421.66068 -78.962163 +L 426.39375 -77.858891 +L 431.12682 -77.753133 +L 435.859889 -77.390377 +L 440.592959 -76.793365 +L 445.326029 -77.43663 +L 450.059098 -76.792074 +L 454.792168 -78.016615 +L 459.525238 -78.044171 +L 464.258308 -78.78862 +L 468.991377 -79.800103 +L 473.724447 -79.645392 +L 478.457517 -79.098796 +L 483.190586 -78.399909 +L 487.923656 -78.399761 +L 492.656726 -78.417292 +L 497.389795 -78.119944 +L 502.122865 -78.227611 +L 506.855935 -78.412915 +L 511.589004 -78.756113 +L 516.322074 -79.472449 +L 521.055144 -79.078376 +L 525.788213 -79.18514 +L 530.521283 -80.153766 +L 535.254353 -82.184793 +L 535.254353 -83.836949 +L 535.254353 -83.836949 +L 530.521283 -82.649428 +L 525.788213 -81.825943 +L 521.055144 -81.96259 +L 516.322074 -82.573558 +L 511.589004 -82.137093 +L 506.855935 -82.034032 +L 502.122865 -82.171447 +L 497.389795 -82.74772 +L 492.656726 -82.589345 +L 487.923656 -82.333003 +L 483.190586 -81.7653 +L 478.457517 -82.409674 +L 473.724447 -83.036083 +L 468.991377 -82.66182 +L 464.258308 -82.09277 +L 459.525238 -81.57687 +L 454.792168 -81.699219 +L 450.059098 -81.0668 +L 445.326029 -81.278767 +L 440.592959 -81.560353 +L 435.859889 -81.424765 +L 431.12682 -81.071172 +L 426.39375 -80.79256 +L 421.66068 -80.535123 +L 416.927611 -80.790027 +L 412.194541 -81.343127 +L 407.461471 -81.171843 +L 402.728402 -80.39433 +L 397.995332 -79.71783 +L 393.262262 -80.517008 +L 388.529193 -79.890113 +L 383.796123 -78.631405 +L 379.063053 -80.236524 +L 374.329984 -80.674273 +L 369.596914 -80.146307 +L 364.863844 -79.746832 +L 360.130775 -80.144723 +L 355.397705 -80.392452 +L 350.664635 -80.468146 +L 345.931566 -80.149444 +L 341.198496 -78.430963 +L 336.465426 -77.873338 +L 331.732357 -77.509315 +L 326.999287 -77.451583 +L 322.266217 -77.269309 +L 317.533147 -77.165186 +L 312.800078 -77.747647 +L 308.067008 -77.895541 +L 303.333938 -77.406139 +L 298.600869 -78.257379 +L 293.867799 -78.437102 +L 289.134729 -78.297616 +L 284.40166 -78.109437 +L 279.66859 -77.94636 +L 274.93552 -78.291069 +L 270.202451 -77.83994 +L 265.469381 -77.551493 +L 260.736311 -77.63239 +L 256.003242 -78.01244 +L 251.270172 -78.121094 +L 246.537102 -78.119951 +L 241.804033 -78.50642 +L 237.070963 -78.975131 +L 232.337893 -79.532842 +L 227.604824 -80.056972 +L 222.871754 -79.820336 +L 218.138684 -79.034689 +L 213.405615 -78.943747 +L 208.672545 -79.238715 +L 203.939475 -78.944284 +L 199.206406 -78.494469 +L 194.473336 -78.697195 +L 189.740266 -78.620496 +L 185.007196 -78.317999 +L 180.274127 -77.580304 +L 175.541057 -77.189149 +L 170.807987 -76.918378 +L 166.074918 -75.690413 +L 161.341848 -74.287106 +L 156.608778 -73.561598 +L 151.875709 -72.722229 +L 147.142639 -71.517456 +L 142.409569 -69.651814 +L 137.6765 -67.425535 +L 132.94343 -65.571929 +L 128.21036 -63.650865 +L 123.477291 -61.413799 +L 118.744221 -58.981982 +L 114.011151 -56.572639 +L 109.278082 -54.283084 +L 104.545012 -52.660719 +L 99.811942 -51.7153 +L 95.078873 -51.130922 +L 90.345803 -50.782651 +L 85.612733 -50.574437 +L 80.879664 -50.431906 +L 76.146594 -50.330291 +L 71.413524 -50.258597 +L 66.680455 -50.221548 +z +" id="m5ef30b50c6" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m5ef30b50c6" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 66.680455 -50.163652 +L 66.680455 -50.154636 +L 71.41386 -50.166693 +L 76.147266 -50.193524 +L 80.880672 -50.227782 +L 85.614078 -50.259093 +L 90.347483 -50.301676 +L 95.080889 -50.376462 +L 99.814295 -50.518754 +L 104.547701 -50.727963 +L 109.281106 -50.9765 +L 114.014512 -51.256845 +L 118.747918 -51.560269 +L 123.481324 -51.861661 +L 128.214729 -52.132703 +L 132.948135 -52.398102 +L 137.681541 -52.70782 +L 142.414947 -53.053338 +L 147.148352 -53.432172 +L 151.881758 -53.767888 +L 156.615164 -54.132146 +L 161.34857 -54.571923 +L 166.081975 -55.067971 +L 170.815381 -55.618624 +L 175.548787 -56.166616 +L 180.282193 -56.740629 +L 185.015598 -57.36129 +L 189.749004 -57.972103 +L 194.48241 -58.698723 +L 199.215816 -59.706061 +L 203.949221 -60.642965 +L 208.682627 -61.637177 +L 213.416033 -63.127433 +L 218.149439 -64.627674 +L 222.882844 -66.480332 +L 227.61625 -68.643286 +L 232.349656 -70.312932 +L 237.083062 -72.722835 +L 241.816467 -75.509831 +L 246.549873 -77.540313 +L 251.283279 -79.233372 +L 256.016685 -80.783335 +L 260.75009 -82.619279 +L 265.483496 -84.551153 +L 270.216902 -85.448878 +L 274.950308 -86.267638 +L 279.683713 -87.599814 +L 284.417119 -88.726645 +L 289.150525 -90.075956 +L 293.883931 -91.565896 +L 298.617336 -92.373746 +L 303.350742 -93.563096 +L 308.084148 -94.92806 +L 312.817554 -95.611214 +L 317.550959 -96.609921 +L 322.284365 -97.720102 +L 327.017771 -98.661063 +L 331.751177 -99.157601 +L 336.484582 -99.130987 +L 341.217988 -99.044067 +L 345.951394 -99.409997 +L 350.6848 -99.521428 +L 355.418206 -99.747299 +L 360.151611 -100.451866 +L 364.885017 -100.987544 +L 369.618423 -101.252351 +L 374.351829 -101.343835 +L 379.085234 -101.648684 +L 383.81864 -102.202713 +L 388.552046 -102.542122 +L 393.285452 -103.387165 +L 398.018857 -103.877971 +L 402.752263 -104.19594 +L 407.485669 -104.349537 +L 412.219075 -104.254368 +L 416.95248 -104.467353 +L 421.685886 -104.502755 +L 426.419292 -104.439794 +L 431.152698 -104.16556 +L 435.886103 -104.110473 +L 440.619509 -104.15483 +L 445.352915 -104.125932 +L 450.086321 -103.966712 +L 454.819726 -104.375615 +L 459.553132 -104.693769 +L 464.286538 -104.63057 +L 469.019944 -105.338766 +L 473.753349 -106.249926 +L 478.486755 -106.250743 +L 483.220161 -106.749611 +L 487.953567 -106.61108 +L 492.686972 -106.509187 +L 497.420378 -106.639793 +L 502.153784 -106.992108 +L 506.88719 -107.589292 +L 511.620595 -107.389051 +L 516.354001 -107.675217 +L 521.087407 -108.121474 +L 525.820813 -107.60504 +L 530.554218 -107.7753 +L 535.287624 -108.950574 +L 535.287624 -111.873636 +L 535.287624 -111.873636 +L 530.554218 -110.547241 +L 525.820813 -109.927747 +L 521.087407 -110.603266 +L 516.354001 -109.628608 +L 511.620595 -109.149247 +L 506.88719 -109.150578 +L 502.153784 -108.823244 +L 497.420378 -108.420686 +L 492.686972 -108.493314 +L 487.953567 -108.460342 +L 483.220161 -107.97797 +L 478.486755 -107.142359 +L 473.753349 -106.864037 +L 469.019944 -106.326033 +L 464.286538 -106.020056 +L 459.553132 -106.214565 +L 454.819726 -105.83392 +L 450.086321 -105.605191 +L 445.352915 -105.942177 +L 440.619509 -106.583554 +L 435.886103 -106.873395 +L 431.152698 -106.279646 +L 426.419292 -106.030716 +L 421.685886 -105.931043 +L 416.95248 -105.918165 +L 412.219075 -105.799898 +L 407.485669 -105.519087 +L 402.752263 -105.119767 +L 398.018857 -105.018683 +L 393.285452 -104.650268 +L 388.552046 -103.691529 +L 383.81864 -103.710921 +L 379.085234 -103.51395 +L 374.351829 -103.437876 +L 369.618423 -103.40083 +L 364.885017 -103.254222 +L 360.151611 -102.964751 +L 355.418206 -102.612331 +L 350.6848 -102.087191 +L 345.951394 -101.885736 +L 341.217988 -101.359639 +L 336.484582 -101.470901 +L 331.751177 -101.401992 +L 327.017771 -101.25688 +L 322.284365 -100.587742 +L 317.550959 -99.756838 +L 312.817554 -99.307923 +L 308.084148 -98.892154 +L 303.350742 -98.190186 +L 298.617336 -97.69366 +L 293.883931 -97.166469 +L 289.150525 -95.770368 +L 284.417119 -94.853763 +L 279.683713 -94.07066 +L 274.950308 -93.0946 +L 270.216902 -92.835164 +L 265.483496 -92.13412 +L 260.75009 -90.356428 +L 256.016685 -88.613615 +L 251.283279 -87.49237 +L 246.549873 -86.295446 +L 241.816467 -84.338434 +L 237.083062 -81.357459 +L 232.349656 -78.591208 +L 227.61625 -76.564961 +L 222.882844 -73.802937 +L 218.149439 -70.951219 +L 213.416033 -68.441804 +L 208.682627 -66.327244 +L 203.949221 -64.828075 +L 199.215816 -63.199716 +L 194.48241 -61.551792 +L 189.749004 -60.293446 +L 185.015598 -59.27687 +L 180.282193 -58.32256 +L 175.548787 -57.624602 +L 170.815381 -57.013216 +L 166.081975 -56.274451 +L 161.34857 -55.643431 +L 156.615164 -55.050295 +L 151.881758 -54.608434 +L 147.148352 -54.1887 +L 142.414947 -53.683804 +L 137.681541 -53.225915 +L 132.948135 -52.85681 +L 128.214729 -52.541608 +L 123.481324 -52.229066 +L 118.747918 -51.914025 +L 114.014512 -51.596267 +L 109.281106 -51.299028 +L 104.547701 -50.998455 +L 99.814295 -50.707975 +L 95.080889 -50.481997 +L 90.347483 -50.347738 +L 85.614078 -50.281516 +L 80.880672 -50.243373 +L 76.147266 -50.207541 +L 71.41386 -50.178389 +L 66.680455 -50.163652 +z +" id="m84172e87e1" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m84172e87e1" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 66.680455 -50.152956 +L 66.680455 -50.146364 +L 71.413807 -50.148384 +L 76.14716 -50.154358 +L 80.880513 -50.170666 +L 85.613866 -50.199525 +L 90.347218 -50.225682 +L 95.080571 -50.24058 +L 99.813924 -50.251171 +L 104.547276 -50.278319 +L 109.280629 -50.314906 +L 114.013982 -50.365223 +L 118.747335 -50.421578 +L 123.480687 -50.497943 +L 128.21404 -50.598897 +L 132.947393 -50.747203 +L 137.680746 -50.941842 +L 142.414098 -51.174628 +L 147.147451 -51.401582 +L 151.880804 -51.641458 +L 156.614157 -51.898968 +L 161.347509 -52.172217 +L 166.080862 -52.455926 +L 170.814215 -52.754383 +L 175.547568 -53.11061 +L 180.28092 -53.484451 +L 185.014273 -53.970352 +L 189.747626 -54.539234 +L 194.480978 -55.130284 +L 199.214331 -55.78624 +L 203.947684 -56.484477 +L 208.681037 -57.150407 +L 213.414389 -57.9348 +L 218.147742 -58.732476 +L 222.881095 -59.488149 +L 227.614448 -60.034629 +L 232.3478 -60.865258 +L 237.081153 -62.532242 +L 241.814506 -64.363713 +L 246.547859 -66.201591 +L 251.281211 -68.880282 +L 256.014564 -71.699421 +L 260.747917 -73.814972 +L 265.48127 -75.995701 +L 270.214622 -79.618266 +L 274.947975 -83.390066 +L 279.681328 -86.947319 +L 284.414681 -89.75706 +L 289.148033 -92.775997 +L 293.881386 -95.378141 +L 298.614739 -97.176167 +L 303.348091 -98.217233 +L 308.081444 -99.26537 +L 312.814797 -100.720337 +L 317.54815 -101.681892 +L 322.281502 -102.283067 +L 327.014855 -102.330082 +L 331.748208 -101.864719 +L 336.481561 -101.327624 +L 341.214913 -102.458668 +L 345.948266 -103.602868 +L 350.681619 -104.251147 +L 355.414972 -104.658507 +L 360.148324 -105.512919 +L 364.881677 -105.095781 +L 369.61503 -104.931752 +L 374.348383 -105.654829 +L 379.081735 -106.003669 +L 383.815088 -106.358722 +L 388.548441 -106.714537 +L 393.281794 -107.003497 +L 398.015146 -107.355939 +L 402.748499 -107.215821 +L 407.481852 -106.889674 +L 412.215204 -107.326735 +L 416.948557 -107.19408 +L 421.68191 -107.55293 +L 426.415263 -107.786498 +L 431.148615 -108.457113 +L 435.881968 -108.032402 +L 440.615321 -107.766648 +L 445.348674 -108.460195 +L 450.082026 -108.335366 +L 454.815379 -108.367564 +L 459.548732 -109.273123 +L 464.282085 -109.781907 +L 469.015437 -109.042636 +L 473.74879 -109.02278 +L 478.482143 -109.303137 +L 483.215496 -110.006504 +L 487.948848 -109.854916 +L 492.682201 -109.13458 +L 497.415554 -108.803432 +L 502.148907 -108.368731 +L 506.882259 -108.446615 +L 511.615612 -108.5238 +L 516.348965 -108.512434 +L 521.082317 -108.390016 +L 525.81567 -108.391028 +L 530.549023 -108.497977 +L 535.282376 -108.908056 +L 535.282376 -109.884248 +L 535.282376 -109.884248 +L 530.549023 -109.14335 +L 525.81567 -109.27409 +L 521.082317 -109.745867 +L 516.348965 -110.06783 +L 511.615612 -109.711021 +L 506.882259 -109.620522 +L 502.148907 -109.463298 +L 497.415554 -109.954831 +L 492.682201 -109.875818 +L 487.948848 -110.70233 +L 483.215496 -111.173005 +L 478.482143 -110.509961 +L 473.74879 -110.321131 +L 469.015437 -110.516051 +L 464.282085 -111.034292 +L 459.548732 -110.747467 +L 454.815379 -109.721214 +L 450.082026 -109.219091 +L 445.348674 -109.392162 +L 440.615321 -108.992803 +L 435.881968 -109.373121 +L 431.148615 -109.789299 +L 426.415263 -108.821251 +L 421.68191 -108.292678 +L 416.948557 -107.987552 +L 412.215204 -107.889223 +L 407.481852 -107.756062 +L 402.748499 -107.863781 +L 398.015146 -108.051578 +L 393.281794 -107.67131 +L 388.548441 -107.362956 +L 383.815088 -107.108526 +L 379.081735 -106.532811 +L 374.348383 -106.286791 +L 369.61503 -105.998913 +L 364.881677 -105.960872 +L 360.148324 -106.300683 +L 355.414972 -105.500089 +L 350.681619 -105.105762 +L 345.948266 -104.48119 +L 341.214913 -103.786592 +L 336.481561 -103.047009 +L 331.748208 -102.78577 +L 327.014855 -102.841355 +L 322.281502 -102.897395 +L 317.54815 -102.588341 +L 312.814797 -101.647868 +L 308.081444 -100.390805 +L 303.348091 -99.415998 +L 298.614739 -98.289332 +L 293.881386 -96.368993 +L 289.148033 -94.071619 +L 284.414681 -92.381057 +L 279.681328 -90.466917 +L 274.947975 -87.681535 +L 270.214622 -83.978194 +L 265.48127 -79.938583 +L 260.747917 -77.17006 +L 256.014564 -74.389292 +L 251.281211 -71.136049 +L 246.547859 -68.448929 +L 241.814506 -66.322063 +L 237.081153 -64.094013 +L 232.3478 -62.329825 +L 227.614448 -61.109397 +L 222.881095 -60.439364 +L 218.147742 -59.55983 +L 213.414389 -58.556958 +L 208.681037 -57.681065 +L 203.947684 -56.960264 +L 199.214331 -56.301613 +L 194.480978 -55.607998 +L 189.747626 -55.004056 +L 185.014273 -54.377991 +L 180.28092 -53.854139 +L 175.547568 -53.422486 +L 170.814215 -53.000862 +L 166.080862 -52.654452 +L 161.347509 -52.356597 +L 156.614157 -52.079185 +L 151.880804 -51.805151 +L 147.147451 -51.550971 +L 142.414098 -51.316654 +L 137.680746 -51.069801 +L 132.947393 -50.843721 +L 128.21404 -50.657171 +L 123.480687 -50.531974 +L 118.747335 -50.442633 +L 114.013982 -50.380505 +L 109.280629 -50.327182 +L 104.547276 -50.287374 +L 99.813924 -50.258448 +L 95.080571 -50.24768 +L 90.347218 -50.233058 +L 85.613866 -50.211936 +L 80.880513 -50.181801 +L 76.14716 -50.162307 +L 71.413807 -50.154743 +L 66.680455 -50.152956 +z +" id="m8650ab91a9" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#m8650ab91a9" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 66.680455 -50.438439 +L 66.680455 -50.376006 +L 71.41388 -50.50187 +L 76.147305 -50.741051 +L 80.88073 -51.062281 +L 85.614155 -51.349748 +L 90.34758 -51.573481 +L 95.081006 -51.794029 +L 99.814431 -52.049392 +L 104.547856 -52.281437 +L 109.281281 -52.485562 +L 114.014706 -52.695984 +L 118.748131 -52.868078 +L 123.481556 -53.034917 +L 128.214982 -53.263805 +L 132.948407 -53.474575 +L 137.681832 -53.691714 +L 142.415257 -53.95122 +L 147.148682 -54.255122 +L 151.882107 -54.582961 +L 156.615533 -54.822122 +L 161.348958 -55.016171 +L 166.082383 -55.293328 +L 170.815808 -55.5079 +L 175.549233 -55.688898 +L 180.282658 -55.888372 +L 185.016084 -56.068022 +L 189.749509 -56.271375 +L 194.482934 -56.599698 +L 199.216359 -56.735882 +L 203.949784 -56.893647 +L 208.683209 -57.007523 +L 213.416635 -57.245677 +L 218.15006 -57.465068 +L 222.883485 -57.798917 +L 227.61691 -58.157425 +L 232.350335 -58.559384 +L 237.08376 -59.086258 +L 241.817185 -59.347404 +L 246.550611 -59.453456 +L 251.284036 -59.146775 +L 256.017461 -59.165789 +L 260.750886 -59.782727 +L 265.484311 -60.057281 +L 270.217736 -60.257954 +L 274.951162 -60.317772 +L 279.684587 -60.554359 +L 284.418012 -60.559092 +L 289.151437 -60.822379 +L 293.884862 -61.725208 +L 298.618287 -62.560026 +L 303.351713 -62.963724 +L 308.085138 -63.414841 +L 312.818563 -63.694279 +L 317.551988 -64.061308 +L 322.285413 -63.919972 +L 327.018838 -64.194022 +L 331.752264 -64.465368 +L 336.485689 -65.407811 +L 341.219114 -66.239566 +L 345.952539 -67.087383 +L 350.685964 -68.067915 +L 355.419389 -68.690722 +L 360.152815 -68.24856 +L 364.88624 -68.371916 +L 369.619665 -68.639198 +L 374.35309 -68.873533 +L 379.086515 -68.65293 +L 383.81994 -69.26844 +L 388.553365 -70.137205 +L 393.286791 -70.492268 +L 398.020216 -70.9826 +L 402.753641 -71.351829 +L 407.487066 -71.551219 +L 412.220491 -72.373172 +L 416.953916 -72.774353 +L 421.687342 -72.244113 +L 426.420767 -71.991389 +L 431.154192 -72.924425 +L 435.887617 -73.284307 +L 440.621042 -73.545216 +L 445.354467 -73.235265 +L 450.087893 -73.609841 +L 454.821318 -73.936987 +L 459.554743 -74.495031 +L 464.288168 -75.165933 +L 469.021593 -75.885409 +L 473.755018 -76.203989 +L 478.488444 -76.405746 +L 483.221869 -76.757079 +L 487.955294 -76.80114 +L 492.688719 -76.435946 +L 497.422144 -76.689947 +L 502.155569 -76.561864 +L 506.888994 -77.476409 +L 511.62242 -77.594944 +L 516.355845 -77.324259 +L 521.08927 -77.094756 +L 525.822695 -77.510704 +L 530.55612 -78.424847 +L 535.289545 -78.794126 +L 535.289545 -80.977458 +L 535.289545 -80.977458 +L 530.55612 -80.540632 +L 525.822695 -79.524427 +L 521.08927 -79.606258 +L 516.355845 -80.294968 +L 511.62242 -80.251744 +L 506.888994 -80.080138 +L 502.155569 -79.273355 +L 497.422144 -78.8565 +L 492.688719 -78.385328 +L 487.955294 -78.17416 +L 483.221869 -78.189723 +L 478.488444 -78.26285 +L 473.755018 -78.321524 +L 469.021593 -78.058651 +L 464.288168 -76.779849 +L 459.554743 -75.68305 +L 454.821318 -75.450375 +L 450.087893 -75.260439 +L 445.354467 -75.507277 +L 440.621042 -75.825068 +L 435.887617 -75.019162 +L 431.154192 -74.176375 +L 426.420767 -73.334564 +L 421.687342 -73.892709 +L 416.953916 -74.773961 +L 412.220491 -75.031519 +L 407.487066 -74.730921 +L 402.753641 -74.281672 +L 398.020216 -72.82853 +L 393.286791 -71.722123 +L 388.553365 -71.61168 +L 383.81994 -70.787893 +L 379.086515 -70.33189 +L 374.35309 -70.674057 +L 369.619665 -70.520988 +L 364.88624 -70.012388 +L 360.152815 -69.820448 +L 355.419389 -70.276843 +L 350.685964 -70.052091 +L 345.952539 -69.486672 +L 341.219114 -68.407366 +L 336.485689 -67.278484 +L 331.752264 -65.911006 +L 327.018838 -65.268324 +L 322.285413 -65.057166 +L 317.551988 -65.030825 +L 312.818563 -64.731055 +L 308.085138 -64.335854 +L 303.351713 -63.938442 +L 298.618287 -63.589527 +L 293.884862 -62.543541 +L 289.151437 -61.43465 +L 284.418012 -61.434276 +L 279.684587 -61.42582 +L 274.951162 -61.154172 +L 270.217736 -61.077627 +L 265.484311 -60.866985 +L 260.750886 -60.722983 +L 256.017461 -59.956006 +L 251.284036 -59.843208 +L 246.550611 -60.125047 +L 241.817185 -59.984464 +L 237.08376 -59.566891 +L 232.350335 -58.90621 +L 227.61691 -58.444249 +L 222.883485 -58.087631 +L 218.15006 -57.860355 +L 213.416635 -57.724237 +L 208.683209 -57.580155 +L 203.949784 -57.439858 +L 199.216359 -57.259609 +L 194.482934 -57.19371 +L 189.749509 -56.683361 +L 185.016084 -56.385319 +L 180.282658 -56.220485 +L 175.549233 -55.906768 +L 170.815808 -55.750005 +L 166.082383 -55.573086 +L 161.348958 -55.233911 +L 156.615533 -54.971591 +L 151.882107 -54.773319 +L 147.148682 -54.507832 +L 142.415257 -54.19828 +L 137.681832 -53.922886 +L 132.948407 -53.717056 +L 128.214982 -53.488001 +L 123.481556 -53.299142 +L 118.748131 -53.113519 +L 114.014706 -52.92381 +L 109.281281 -52.679166 +L 104.547856 -52.466971 +L 99.814431 -52.25551 +L 95.081006 -52.04205 +L 90.34758 -51.811018 +L 85.614155 -51.560708 +L 80.88073 -51.256535 +L 76.147305 -50.901834 +L 71.41388 -50.606868 +L 66.680455 -50.438439 +z +" id="mdeedb29cb8" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#mdeedb29cb8" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 66.680455 -50.160004 +L 66.680455 -50.153357 +L 71.413424 -50.16214 +L 76.146393 -50.183835 +L 80.879363 -50.220369 +L 85.612332 -50.234661 +L 90.345301 -50.24666 +L 95.078271 -50.257235 +L 99.81124 -50.270741 +L 104.544209 -50.284046 +L 109.277179 -50.305204 +L 114.010148 -50.345561 +L 118.743117 -50.396085 +L 123.476086 -50.478434 +L 128.209056 -50.60977 +L 132.942025 -50.79951 +L 137.674994 -51.009537 +L 142.407964 -51.229251 +L 147.140933 -51.469187 +L 151.873902 -51.747104 +L 156.606872 -52.079349 +L 161.339841 -52.433436 +L 166.07281 -52.794699 +L 170.80578 -53.199261 +L 175.538749 -53.600485 +L 180.271718 -54.014912 +L 185.004688 -54.407016 +L 189.737657 -54.890444 +L 194.470626 -55.444506 +L 199.203596 -55.813536 +L 203.936565 -56.183262 +L 208.669534 -56.576301 +L 213.402504 -57.038542 +L 218.135473 -57.430519 +L 222.868442 -57.792056 +L 227.601412 -58.149128 +L 232.334381 -58.471326 +L 237.06735 -58.795782 +L 241.80032 -59.082865 +L 246.533289 -59.481973 +L 251.266258 -59.990082 +L 255.999228 -60.600681 +L 260.732197 -60.970628 +L 265.465166 -61.39785 +L 270.198136 -61.879352 +L 274.931105 -62.226724 +L 279.664074 -62.736681 +L 284.397044 -63.417579 +L 289.130013 -63.905101 +L 293.862982 -63.976618 +L 298.595952 -64.444819 +L 303.328921 -64.903546 +L 308.06189 -65.215701 +L 312.79486 -65.493446 +L 317.527829 -66.495584 +L 322.260798 -67.404392 +L 326.993768 -67.75274 +L 331.726737 -67.586908 +L 336.459706 -67.770584 +L 341.192676 -68.342891 +L 345.925645 -69.060712 +L 350.658614 -69.902036 +L 355.391584 -70.358441 +L 360.124553 -70.928217 +L 364.857522 -71.149638 +L 369.590492 -71.051917 +L 374.323461 -70.809526 +L 379.05643 -71.246097 +L 383.7894 -71.490773 +L 388.522369 -72.047394 +L 393.255338 -72.766191 +L 397.988308 -73.325264 +L 402.721277 -74.072216 +L 407.454246 -74.680014 +L 412.187216 -75.114038 +L 416.920185 -75.808357 +L 421.653154 -76.121324 +L 426.386124 -76.395608 +L 431.119093 -77.082234 +L 435.852062 -77.838518 +L 440.585032 -78.672907 +L 445.318001 -79.111129 +L 450.05097 -79.455491 +L 454.78394 -80.425086 +L 459.516909 -81.325963 +L 464.249878 -81.461288 +L 468.982847 -81.583941 +L 473.715817 -81.927767 +L 478.448786 -82.679671 +L 483.181755 -83.231778 +L 487.914725 -83.696881 +L 492.647694 -84.19579 +L 497.380663 -84.556169 +L 502.113633 -84.255707 +L 506.846602 -84.612939 +L 511.579571 -85.330333 +L 516.312541 -85.650656 +L 521.04551 -85.421613 +L 525.778479 -86.008031 +L 530.511449 -85.792643 +L 535.244418 -86.035032 +L 535.244418 -87.794865 +L 535.244418 -87.794865 +L 530.511449 -87.906015 +L 525.778479 -87.976826 +L 521.04551 -87.468038 +L 516.312541 -87.635884 +L 511.579571 -87.00839 +L 506.846602 -86.367134 +L 502.113633 -86.198796 +L 497.380663 -86.462113 +L 492.647694 -85.806012 +L 487.914725 -85.582535 +L 483.181755 -85.335726 +L 478.448786 -84.741621 +L 473.715817 -83.507726 +L 468.982847 -83.29896 +L 464.249878 -83.100951 +L 459.516909 -83.113663 +L 454.78394 -82.095795 +L 450.05097 -81.123322 +L 445.318001 -80.992367 +L 440.585032 -80.9127 +L 435.852062 -79.88935 +L 431.119093 -78.970735 +L 426.386124 -78.307571 +L 421.653154 -77.933839 +L 416.920185 -77.647703 +L 412.187216 -77.245144 +L 407.454246 -76.621112 +L 402.721277 -76.086041 +L 397.988308 -75.227938 +L 393.255338 -74.335521 +L 388.522369 -73.255186 +L 383.7894 -72.737831 +L 379.05643 -72.644369 +L 374.323461 -72.562085 +L 369.590492 -72.477981 +L 364.857522 -72.188371 +L 360.124553 -71.701124 +L 355.391584 -70.881268 +L 350.658614 -70.298936 +L 345.925645 -69.514767 +L 341.192676 -68.902854 +L 336.459706 -68.594059 +L 331.726737 -68.182315 +L 326.993768 -68.298113 +L 322.260798 -68.10491 +L 317.527829 -67.498807 +L 312.79486 -66.622327 +L 308.06189 -66.241818 +L 303.328921 -65.683896 +L 298.595952 -65.049954 +L 293.862982 -64.427684 +L 289.130013 -64.478803 +L 284.397044 -64.25952 +L 279.664074 -63.732165 +L 274.931105 -63.267135 +L 270.198136 -62.747106 +L 265.465166 -62.105441 +L 260.732197 -61.67666 +L 255.999228 -61.236893 +L 251.266258 -60.604329 +L 246.533289 -60.202207 +L 241.80032 -59.901816 +L 237.06735 -59.556283 +L 232.334381 -59.140537 +L 227.601412 -58.7418 +L 222.868442 -58.344152 +L 218.135473 -57.824418 +L 213.402504 -57.379145 +L 208.669534 -56.87403 +L 203.936565 -56.383774 +L 199.203596 -55.989249 +L 194.470626 -55.643951 +L 189.737657 -55.173988 +L 185.004688 -54.727092 +L 180.271718 -54.322883 +L 175.538749 -53.857639 +L 170.80578 -53.411136 +L 166.07281 -52.96439 +L 161.339841 -52.587841 +L 156.606872 -52.209146 +L 151.873902 -51.863181 +L 147.140933 -51.585565 +L 142.407964 -51.332005 +L 137.674994 -51.11479 +L 132.942025 -50.909127 +L 128.209056 -50.713178 +L 123.476086 -50.552793 +L 118.743117 -50.441403 +L 114.010148 -50.372563 +L 109.277179 -50.320548 +L 104.544209 -50.289921 +L 99.81124 -50.276469 +L 95.078271 -50.263324 +L 90.345301 -50.253066 +L 85.612332 -50.242486 +L 80.879363 -50.231353 +L 76.146393 -50.196743 +L 71.413424 -50.171088 +L 66.680455 -50.160004 +z +" id="m24bbf4400e" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#m24bbf4400e" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 66.680455 -50.23016 +L 66.680455 -50.216162 +L 71.413875 -50.265381 +L 76.147295 -50.363292 +L 80.880716 -50.490056 +L 85.614136 -50.615242 +L 90.347557 -50.721967 +L 95.080977 -50.820978 +L 99.814398 -50.890988 +L 104.547818 -50.944381 +L 109.281238 -51.001493 +L 114.014659 -51.056282 +L 118.748079 -51.106379 +L 123.4815 -51.153125 +L 128.21492 -51.220113 +L 132.948341 -51.268498 +L 137.681761 -51.296475 +L 142.415181 -51.339419 +L 147.148602 -51.369278 +L 151.882022 -51.368287 +L 156.615443 -51.369286 +L 161.348863 -51.363031 +L 166.082284 -51.388144 +L 170.815704 -51.438569 +L 175.549124 -51.457709 +L 180.282545 -51.476485 +L 185.015965 -51.498658 +L 189.749386 -51.50075 +L 194.482806 -51.527188 +L 199.216227 -51.556233 +L 203.949647 -51.58783 +L 208.683067 -51.633438 +L 213.416488 -51.673388 +L 218.149908 -51.726765 +L 222.883329 -51.774936 +L 227.616749 -51.774808 +L 232.350169 -51.781386 +L 237.08359 -51.770023 +L 241.81701 -51.774199 +L 246.550431 -51.80497 +L 251.283851 -51.801861 +L 256.017272 -51.776611 +L 260.750692 -51.765703 +L 265.484112 -51.833902 +L 270.217533 -51.90391 +L 274.950953 -51.948592 +L 279.684374 -52.026136 +L 284.417794 -52.037017 +L 289.151215 -52.032644 +L 293.884635 -52.02813 +L 298.618055 -52.048666 +L 303.351476 -52.056949 +L 308.084896 -52.047403 +L 312.818317 -52.060286 +L 317.551737 -52.093734 +L 322.285158 -52.132604 +L 327.018578 -52.172414 +L 331.751998 -52.179867 +L 336.485419 -52.174168 +L 341.218839 -52.212832 +L 345.95226 -52.242935 +L 350.68568 -52.257831 +L 355.419101 -52.245076 +L 360.152521 -52.264659 +L 364.885941 -52.268299 +L 369.619362 -52.223771 +L 374.352782 -52.241695 +L 379.086203 -52.309049 +L 383.819623 -52.337754 +L 388.553044 -52.336057 +L 393.286464 -52.347093 +L 398.019884 -52.404968 +L 402.753305 -52.47804 +L 407.486725 -52.502478 +L 412.220146 -52.443088 +L 416.953566 -52.469853 +L 421.686987 -52.465426 +L 426.420407 -52.500662 +L 431.153827 -52.420404 +L 435.887248 -52.364853 +L 440.620668 -52.388186 +L 445.354089 -52.410221 +L 450.087509 -52.491234 +L 454.82093 -52.4782 +L 459.55435 -52.409512 +L 464.28777 -52.442885 +L 469.021191 -52.513138 +L 473.754611 -52.545091 +L 478.488032 -52.49887 +L 483.221452 -52.568136 +L 487.954873 -52.601299 +L 492.688293 -52.645569 +L 497.421713 -52.721046 +L 502.155134 -52.678517 +L 506.888554 -52.650124 +L 511.621975 -52.645028 +L 516.355395 -52.58246 +L 521.088816 -52.574072 +L 525.822236 -52.577185 +L 530.555656 -52.582838 +L 535.289077 -52.584004 +L 535.289077 -53.443074 +L 535.289077 -53.443074 +L 530.555656 -53.501035 +L 525.822236 -53.493109 +L 521.088816 -53.431286 +L 516.355395 -53.407612 +L 511.621975 -53.48871 +L 506.888554 -53.474839 +L 502.155134 -53.594263 +L 497.421713 -53.744229 +L 492.688293 -53.560995 +L 487.954873 -53.474102 +L 483.221452 -53.393424 +L 478.488032 -53.268222 +L 473.754611 -53.42548 +L 469.021191 -53.358868 +L 464.28777 -53.240022 +L 459.55435 -53.153425 +L 454.82093 -53.271003 +L 450.087509 -53.307396 +L 445.354089 -53.12436 +L 440.620668 -53.084951 +L 435.887248 -52.99793 +L 431.153827 -53.102974 +L 426.420407 -53.231432 +L 421.686987 -53.203638 +L 416.953566 -53.249937 +L 412.220146 -53.250855 +L 407.486725 -53.383552 +L 402.753305 -53.312238 +L 398.019884 -53.167614 +L 393.286464 -53.08102 +L 388.553044 -53.086967 +L 383.819623 -53.011515 +L 379.086203 -52.949556 +L 374.352782 -52.803924 +L 369.619362 -52.754057 +L 364.885941 -52.857784 +L 360.152521 -52.839878 +L 355.419101 -52.815434 +L 350.68568 -52.854087 +L 345.95226 -52.836207 +L 341.218839 -52.774625 +L 336.485419 -52.724582 +L 331.751998 -52.730326 +L 327.018578 -52.726049 +L 322.285158 -52.658351 +L 317.551737 -52.593001 +L 312.818317 -52.56021 +L 308.084896 -52.503336 +L 303.351476 -52.472814 +L 298.618055 -52.494215 +L 293.884635 -52.468492 +L 289.151215 -52.489925 +L 284.417794 -52.514694 +L 279.684374 -52.498354 +L 274.950953 -52.34225 +L 270.217533 -52.27288 +L 265.484112 -52.185867 +L 260.750692 -52.098216 +L 256.017272 -52.112125 +L 251.283851 -52.151391 +L 246.550431 -52.152758 +L 241.81701 -52.093768 +L 237.08359 -52.100044 +L 232.350169 -52.115902 +L 227.616749 -52.105557 +L 222.883329 -52.154613 +L 218.149908 -52.028914 +L 213.416488 -51.943058 +L 208.683067 -51.874843 +L 203.949647 -51.815006 +L 199.216227 -51.781269 +L 194.482806 -51.727365 +L 189.749386 -51.687767 +L 185.015965 -51.690466 +L 180.282545 -51.64775 +L 175.549124 -51.64582 +L 170.815704 -51.632623 +L 166.082284 -51.563583 +L 161.348863 -51.535446 +L 156.615443 -51.539009 +L 151.882022 -51.556978 +L 147.148602 -51.574463 +L 142.415181 -51.552112 +L 137.681761 -51.516124 +L 132.948341 -51.47884 +L 128.21492 -51.396502 +L 123.4815 -51.326826 +L 118.748079 -51.282428 +L 114.014659 -51.205182 +L 109.281238 -51.129592 +L 104.547818 -51.056203 +L 99.814398 -50.98354 +L 95.080977 -50.896099 +L 90.347557 -50.78252 +L 85.614136 -50.663461 +L 80.880716 -50.532503 +L 76.147295 -50.394733 +L 71.413875 -50.282252 +L 66.680455 -50.23016 +z +" id="mf97c9a9f23" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p7a128d5ac8)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#mf97c9a9f23" y="144"/> + </g> + </g> + <g id="line2d_10"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.628972 +L 71.413777 93.467909 +L 76.1471 93.135844 +L 80.880423 92.784793 +L 85.613746 92.483344 +L 90.347069 92.22968 +L 95.080392 92.007372 +L 99.813715 91.807013 +L 104.547038 91.561227 +L 109.280361 91.315984 +L 114.013684 91.060152 +L 118.747007 90.838298 +L 123.48033 90.590727 +L 128.213652 90.336303 +L 132.946975 90.057058 +L 137.680298 89.719539 +L 142.413621 89.359736 +L 147.146944 88.937493 +L 151.880267 88.537194 +L 156.61359 88.085397 +L 161.346913 87.656999 +L 166.080236 87.044981 +L 170.813559 86.229407 +L 175.546882 85.570912 +L 180.280205 84.998969 +L 185.013527 84.228896 +L 189.74685 83.429292 +L 194.480173 82.47854 +L 199.213496 82.031035 +L 203.946819 81.537303 +L 208.680142 80.760609 +L 213.413465 79.919898 +L 218.146788 79.242921 +L 222.880111 78.805105 +L 227.613434 78.121328 +L 232.346757 77.473026 +L 237.08008 77.284829 +L 241.813403 77.017557 +L 246.546725 76.491527 +L 251.280048 75.853791 +L 256.013371 75.223591 +L 260.746694 74.827656 +L 265.480017 74.346865 +L 270.21334 73.623018 +L 274.946663 72.503334 +L 279.679986 71.627422 +L 284.413309 71.197046 +L 289.146632 71.539617 +L 293.879955 71.33551 +L 298.613278 70.615959 +L 303.3466 70.026053 +L 308.079923 69.344898 +L 312.813246 68.697564 +L 317.546569 68.517089 +L 322.279892 68.671748 +L 327.013215 68.338704 +L 331.746538 67.818639 +L 336.479861 68.203805 +L 341.213184 67.834267 +L 345.946507 67.700845 +L 350.67983 67.232238 +L 355.413153 66.976028 +L 360.146475 65.79113 +L 364.879798 65.3302 +L 369.613121 66.129241 +L 374.346444 66.193656 +L 379.079767 66.30481 +L 383.81309 65.756113 +L 388.546413 65.417678 +L 393.279736 65.655679 +L 398.013059 65.123737 +L 402.746382 64.988374 +L 407.479705 64.969029 +L 412.213028 64.069175 +L 416.94635 63.868606 +L 421.679673 64.074091 +L 426.412996 64.56314 +L 431.146319 63.976382 +L 435.879642 63.3269 +L 440.612965 62.585871 +L 445.346288 62.562561 +L 450.079611 63.068409 +L 454.812934 62.860024 +L 459.546257 62.716948 +L 464.27958 61.992762 +L 469.012903 61.747708 +L 473.746225 62.158119 +L 478.479548 62.400787 +L 483.212871 62.864463 +L 487.946194 62.339581 +L 492.679517 62.023842 +L 497.41284 62.548417 +L 502.146163 63.112037 +L 506.879486 63.06067 +L 511.612809 62.827385 +L 516.346132 62.948165 +L 521.079455 63.336743 +L 525.812778 62.451781 +L 530.546101 61.727064 +L 535.279423 61.792881 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.780231 +L 71.413524 93.743127 +L 76.146594 93.672194 +L 80.879664 93.571892 +L 85.612733 93.432779 +L 90.345803 93.225924 +L 95.078873 92.884395 +L 99.811942 92.31592 +L 104.545012 91.385575 +L 109.278082 89.808891 +L 114.011151 87.607314 +L 118.744221 85.308781 +L 123.477291 82.986819 +L 128.21036 80.900841 +L 132.94343 79.036407 +L 137.6765 77.368668 +L 142.409569 75.46875 +L 147.142639 73.850019 +L 151.875709 72.972864 +L 156.608778 72.100562 +L 161.341848 71.25375 +L 166.074918 69.960607 +L 170.807987 68.883392 +L 175.541057 68.530124 +L 180.274127 68.187268 +L 185.007196 67.655453 +L 189.740266 67.371077 +L 194.473336 67.140124 +L 199.206406 66.843542 +L 203.939475 66.091633 +L 208.672545 66.042794 +L 213.405615 66.43202 +L 218.138684 66.443353 +L 222.871754 65.909559 +L 227.604824 65.379118 +L 232.337893 65.738492 +L 237.070963 66.324415 +L 241.804033 66.777167 +L 246.537102 66.870532 +L 251.270172 66.575913 +L 256.003242 66.687892 +L 260.736311 67.124585 +L 265.469381 67.259538 +L 270.202451 66.966745 +L 274.93552 66.503692 +L 279.66859 66.919651 +L 284.40166 66.968944 +L 289.134729 66.968359 +L 293.867799 66.800635 +L 298.600869 66.814416 +L 303.333938 67.53387 +L 308.067008 67.300995 +L 312.800078 67.115761 +L 317.533147 68.048633 +L 322.266217 67.790605 +L 326.999287 67.272044 +L 331.732357 67.450842 +L 336.465426 67.72166 +L 341.198496 67.580182 +L 345.931566 66.23218 +L 350.664635 65.909051 +L 355.397705 65.91578 +L 360.130775 65.820789 +L 364.863844 66.018598 +L 369.596914 65.702045 +L 374.329984 65.285582 +L 379.063053 65.956116 +L 383.796123 67.265869 +L 388.529193 66.641038 +L 393.262262 66.50719 +L 397.995332 66.767526 +L 402.728402 65.396112 +L 407.461471 64.024258 +L 412.194541 63.560518 +L 416.927611 63.897984 +L 421.66068 64.251357 +L 426.39375 64.674275 +L 431.12682 64.587847 +L 435.859889 64.592429 +L 440.592959 64.823141 +L 445.326029 64.642302 +L 450.059098 65.070563 +L 454.792168 64.142083 +L 459.525238 64.189479 +L 464.258308 63.559305 +L 468.991377 62.769038 +L 473.724447 62.659262 +L 478.457517 63.245765 +L 483.190586 63.917395 +L 487.923656 63.633618 +L 492.656726 63.496682 +L 497.389795 63.566168 +L 502.122865 63.800471 +L 506.855935 63.776527 +L 511.589004 63.553397 +L 516.322074 62.976997 +L 521.055144 63.479517 +L 525.788213 63.494458 +L 530.521283 62.598403 +L 535.254353 60.989129 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.840856 +L 71.41386 93.827459 +L 76.147266 93.799467 +L 80.880672 93.764422 +L 85.614078 93.729696 +L 90.347483 93.675293 +L 95.080889 93.57077 +L 99.814295 93.386635 +L 104.547701 93.136791 +L 109.281106 92.862236 +L 114.014512 92.573444 +L 118.747918 92.262853 +L 123.481324 91.954637 +L 128.214729 91.662845 +L 132.948135 91.372544 +L 137.681541 91.033132 +L 142.414947 90.631429 +L 147.148352 90.189564 +L 151.881758 89.811839 +L 156.615164 89.40878 +L 161.34857 88.892323 +L 166.081975 88.328789 +L 170.815381 87.68408 +L 175.548787 87.104391 +L 180.282193 86.468405 +L 185.015598 85.68092 +L 189.749004 84.867226 +L 194.48241 83.874743 +L 199.215816 82.547112 +L 203.949221 81.26448 +L 208.682627 80.017789 +L 213.416033 78.215382 +L 218.149439 76.210554 +L 222.882844 73.858365 +L 227.61625 71.395876 +L 232.349656 69.54793 +L 237.083062 66.959853 +L 241.816467 64.075868 +L 246.549873 62.08212 +L 251.283279 60.637129 +L 256.016685 59.301525 +L 260.75009 57.512146 +L 265.483496 55.657363 +L 270.216902 54.857979 +L 274.950308 54.318881 +L 279.683713 53.164763 +L 284.417119 52.209796 +L 289.150525 51.076838 +L 293.883931 49.633818 +L 298.617336 48.966297 +L 303.350742 48.123359 +L 308.084148 47.089893 +L 312.817554 46.540432 +L 317.550959 45.816621 +L 322.284365 44.846078 +L 327.017771 44.041028 +L 331.751177 43.720204 +L 336.484582 43.699056 +L 341.217988 43.798147 +L 345.951394 43.352134 +L 350.6848 43.19569 +L 355.418206 42.820185 +L 360.151611 42.291692 +L 364.885017 41.879117 +L 369.618423 41.67341 +L 374.351829 41.609145 +L 379.085234 41.418683 +L 383.81864 41.043183 +L 388.552046 40.883175 +L 393.285452 39.981283 +L 398.018857 39.551673 +L 402.752263 39.342147 +L 407.485669 39.065688 +L 412.219075 38.972867 +L 416.95248 38.807241 +L 421.685886 38.783101 +L 426.419292 38.764745 +L 431.152698 38.777397 +L 435.886103 38.508066 +L 440.619509 38.630808 +L 445.352915 38.965945 +L 450.086321 39.214048 +L 454.819726 38.895232 +L 459.553132 38.545833 +L 464.286538 38.674687 +L 469.019944 38.1676 +L 473.753349 37.443019 +L 478.486755 37.303449 +L 483.220161 36.636209 +L 487.953567 36.464289 +L 492.686972 36.498749 +L 497.420378 36.469761 +L 502.153784 36.092324 +L 506.88719 35.630065 +L 511.620595 35.730851 +L 516.354001 35.348087 +L 521.087407 34.63763 +L 525.820813 35.233606 +L 530.554218 34.838729 +L 535.287624 33.587895 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.85034 +L 71.413807 93.848436 +L 76.14716 93.841668 +L 80.880513 93.823767 +L 85.613866 93.79427 +L 90.347218 93.77063 +L 95.080571 93.75587 +L 99.813924 93.745191 +L 104.547276 93.717154 +L 109.280629 93.678956 +L 114.013982 93.627136 +L 118.747335 93.567894 +L 123.480687 93.485042 +L 128.21404 93.371966 +L 132.947393 93.204538 +L 137.680746 92.994179 +L 142.414098 92.754359 +L 147.147451 92.523724 +L 151.880804 92.276695 +L 156.614157 92.010924 +L 161.347509 91.735593 +L 166.080862 91.444811 +L 170.814215 91.122377 +L 175.547568 90.733452 +L 180.28092 90.330705 +L 185.014273 89.825828 +L 189.747626 89.228355 +L 194.480978 88.630859 +L 199.214331 87.956073 +L 203.947684 87.277629 +L 208.681037 86.584264 +L 213.414389 85.754121 +L 218.147742 84.853847 +L 222.881095 84.036244 +L 227.614448 83.427987 +L 232.3478 82.402458 +L 237.081153 80.686873 +L 241.814506 78.657112 +L 246.547859 76.67474 +L 251.281211 73.991834 +L 256.014564 70.955643 +L 260.747917 68.507484 +L 265.48127 66.032858 +L 270.214622 62.20177 +L 274.947975 58.4642 +L 279.681328 55.292882 +L 284.414681 52.930942 +L 289.148033 50.576192 +L 293.881386 48.126433 +L 298.614739 46.26725 +L 303.348091 45.183385 +L 308.081444 44.171913 +L 312.814797 42.815897 +L 317.54815 41.864884 +L 322.281502 41.409769 +L 327.014855 41.414282 +L 331.748208 41.674755 +L 336.481561 41.812683 +L 341.214913 40.87737 +L 345.948266 39.957971 +L 350.681619 39.321546 +L 355.414972 38.920702 +L 360.148324 38.093199 +L 364.881677 38.471674 +L 369.61503 38.534668 +L 374.348383 38.02919 +L 379.081735 37.73176 +L 383.815088 37.266376 +L 388.548441 36.961254 +L 393.281794 36.662597 +L 398.015146 36.296241 +L 402.748499 36.460199 +L 407.481852 36.677132 +L 412.215204 36.392021 +L 416.948557 36.409184 +L 421.68191 36.077196 +L 426.415263 35.696125 +L 431.148615 34.876794 +L 435.881968 35.297239 +L 440.615321 35.620275 +L 445.348674 35.073822 +L 450.082026 35.222771 +L 454.815379 34.955611 +L 459.548732 33.989705 +L 464.282085 33.591901 +L 469.015437 34.220657 +L 473.74879 34.328044 +L 478.482143 34.093451 +L 483.215496 33.410245 +L 487.948848 33.721377 +L 492.682201 34.494801 +L 497.415554 34.620868 +L 502.148907 35.083986 +L 506.882259 34.966431 +L 511.615612 34.88259 +L 516.348965 34.709868 +L 521.082317 34.932058 +L 525.81567 35.167441 +L 530.549023 35.179336 +L 535.282376 34.603848 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.592777 +L 71.41388 93.445631 +L 76.147305 93.178558 +L 80.88073 92.840592 +L 85.614155 92.544772 +L 90.34758 92.307751 +L 95.081006 92.081961 +L 99.814431 91.847549 +L 104.547856 91.625796 +L 109.281281 91.417636 +L 114.014706 91.190103 +L 118.748131 91.009201 +L 123.481556 90.832971 +L 128.214982 90.624097 +L 132.948407 90.404184 +L 137.681832 90.1927 +L 142.415257 89.92525 +L 147.148682 89.618523 +L 151.882107 89.32186 +L 156.615533 89.103144 +L 161.348958 88.874959 +L 166.082383 88.566793 +L 170.815808 88.371048 +L 175.549233 88.202167 +L 180.282658 87.945571 +L 185.016084 87.773329 +L 189.749509 87.522632 +L 194.482934 87.103296 +L 199.216359 87.002254 +L 203.949784 86.833247 +L 208.683209 86.706161 +L 213.416635 86.515043 +L 218.15006 86.337289 +L 222.883485 86.056726 +L 227.61691 85.699163 +L 232.350335 85.267203 +L 237.08376 84.673426 +L 241.817185 84.334066 +L 246.550611 84.210748 +L 251.284036 84.505009 +L 256.017461 84.439102 +L 260.750886 83.747145 +L 265.484311 83.537867 +L 270.217736 83.33221 +L 274.951162 83.264028 +L 279.684587 83.00991 +L 284.418012 83.003316 +L 289.151437 82.871485 +L 293.884862 81.865625 +L 298.618287 80.925223 +L 303.351713 80.548917 +L 308.085138 80.124652 +L 312.818563 79.787333 +L 317.551988 79.453933 +L 322.285413 79.511431 +L 327.018838 79.268827 +L 331.752264 78.811813 +L 336.485689 77.656852 +L 341.219114 76.676534 +L 345.952539 75.712973 +L 350.685964 74.939997 +L 355.419389 74.516217 +L 360.152815 74.965496 +L 364.88624 74.807848 +L 369.619665 74.419907 +L 374.35309 74.226205 +L 379.086515 74.50759 +L 383.81994 73.971833 +L 388.553365 73.125557 +L 393.286791 72.892804 +L 398.020216 72.094435 +L 402.753641 71.18325 +L 407.487066 70.85893 +L 412.220491 70.297655 +L 416.953916 70.225843 +L 421.687342 70.931589 +L 426.420767 71.337024 +L 431.154192 70.4496 +L 435.887617 69.848266 +L 440.621042 69.314858 +L 445.354467 69.628729 +L 450.087893 69.56486 +L 454.821318 69.306319 +L 459.554743 68.91096 +L 464.288168 68.027109 +L 469.021593 67.02797 +L 473.755018 66.737243 +L 478.488444 66.665702 +L 483.221869 66.526599 +L 487.955294 66.51235 +L 492.688719 66.589363 +L 497.422144 66.226776 +L 502.155569 66.08239 +L 506.888994 65.221726 +L 511.62242 65.076656 +L 516.355845 65.190386 +L 521.08927 65.649493 +L 525.822695 65.482435 +L 530.55612 64.517261 +L 535.289545 64.114208 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.84332 +L 71.413424 93.833386 +L 76.146393 93.809711 +L 80.879363 93.774139 +L 85.612332 93.761426 +L 90.345301 93.750137 +L 95.078271 93.73972 +L 99.81124 93.726395 +L 104.544209 93.713017 +L 109.277179 93.687124 +L 114.010148 93.640938 +L 118.743117 93.581256 +L 123.476086 93.484386 +L 128.209056 93.338526 +L 132.942025 93.145682 +L 137.674994 92.937837 +L 142.407964 92.719372 +L 147.140933 92.472624 +L 151.873902 92.194858 +L 156.606872 91.855753 +L 161.339841 91.489361 +L 166.07281 91.120455 +L 170.80578 90.694802 +L 175.538749 90.270938 +L 180.271718 89.831102 +L 185.004688 89.432946 +L 189.737657 88.967784 +L 194.470626 88.455772 +L 199.203596 88.098608 +L 203.936565 87.716482 +L 208.669534 87.274834 +L 213.402504 86.791156 +L 218.135473 86.372532 +L 222.868442 85.931896 +L 227.601412 85.554536 +L 232.334381 85.194068 +L 237.06735 84.823967 +L 241.80032 84.50766 +L 246.533289 84.15791 +L 251.266258 83.702795 +L 255.999228 83.081213 +L 260.732197 82.676356 +L 265.465166 82.248354 +L 270.198136 81.686771 +L 274.931105 81.253071 +L 279.664074 80.765577 +L 284.397044 80.161451 +L 289.130013 79.808048 +L 293.862982 79.797849 +L 298.595952 79.252613 +L 303.328921 78.706279 +L 308.06189 78.271241 +L 312.79486 77.942114 +L 317.527829 77.002804 +L 322.260798 76.245349 +L 326.993768 75.974574 +L 331.726737 76.115388 +L 336.459706 75.817678 +L 341.192676 75.377128 +L 345.925645 74.71226 +L 350.658614 73.899514 +L 355.391584 73.380146 +L 360.124553 72.68533 +L 364.857522 72.330995 +L 369.590492 72.235051 +L 374.323461 72.314194 +L 379.05643 72.054767 +L 383.7894 71.885698 +L 388.522369 71.34871 +L 393.255338 70.449144 +L 397.988308 69.723399 +L 402.721277 68.920872 +L 407.454246 68.349437 +L 412.187216 67.820409 +L 416.920185 67.27197 +L 421.653154 66.972419 +L 426.386124 66.648411 +L 431.119093 65.973516 +L 435.852062 65.136066 +L 440.585032 64.207196 +L 445.318001 63.948252 +L 450.05097 63.710594 +L 454.78394 62.73956 +L 459.516909 61.780187 +L 464.249878 61.71888 +L 468.982847 61.558549 +L 473.715817 61.282253 +L 478.448786 60.289354 +L 483.181755 59.716248 +L 487.914725 59.360292 +L 492.647694 58.999099 +L 497.380663 58.490859 +L 502.113633 58.772749 +L 506.846602 58.509964 +L 511.579571 57.830638 +L 516.312541 57.35673 +L 521.04551 57.555175 +L 525.778479 57.007572 +L 530.511449 57.150671 +L 535.244418 57.085051 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_16"> + <path clip-path="url(#p7a128d5ac8)" d="M 66.680455 93.776839 +L 71.413875 93.726184 +L 76.147295 93.620988 +L 80.880716 93.488721 +L 85.614136 93.360649 +L 90.347557 93.247756 +L 95.080977 93.141461 +L 99.814398 93.062736 +L 104.547818 92.999708 +L 109.281238 92.934458 +L 114.014659 92.869268 +L 118.748079 92.805597 +L 123.4815 92.760025 +L 128.21492 92.691692 +L 132.948341 92.626331 +L 137.681761 92.593701 +L 142.415181 92.554235 +L 147.148602 92.528129 +L 151.882022 92.537367 +L 156.615443 92.545852 +L 161.348863 92.550761 +L 166.082284 92.524136 +L 170.815704 92.464404 +L 175.549124 92.448236 +L 180.282545 92.437883 +L 185.015965 92.405438 +L 189.749386 92.405741 +L 194.482806 92.372724 +L 199.216227 92.331249 +L 203.949647 92.298582 +L 208.683067 92.24586 +L 213.416488 92.191777 +L 218.149908 92.122161 +L 222.883329 92.035225 +L 227.616749 92.059817 +L 232.350169 92.051356 +L 237.08359 92.064966 +L 241.81701 92.066017 +L 246.550431 92.021136 +L 251.283851 92.023374 +L 256.017272 92.055632 +L 260.750692 92.06804 +L 265.484112 91.990116 +L 270.217533 91.911605 +L 274.950953 91.854579 +L 279.684374 91.737755 +L 284.417794 91.724145 +L 289.151215 91.738716 +L 293.884635 91.751689 +L 298.618055 91.728559 +L 303.351476 91.735118 +L 308.084896 91.72463 +L 312.818317 91.689752 +L 317.551737 91.656633 +L 322.285158 91.604522 +L 327.018578 91.550768 +L 331.751998 91.544904 +L 336.485419 91.550625 +L 341.218839 91.506271 +L 345.95226 91.460429 +L 350.68568 91.444041 +L 355.419101 91.469745 +L 360.152521 91.447732 +L 364.885941 91.436959 +L 369.619362 91.511086 +L 374.352782 91.47719 +L 379.086203 91.370697 +L 383.819623 91.325366 +L 388.553044 91.288488 +L 393.286464 91.285944 +L 398.019884 91.213709 +L 402.753305 91.104861 +L 407.486725 91.056985 +L 412.220146 91.153029 +L 416.953566 91.140105 +L 421.686987 91.165468 +L 426.420407 91.133953 +L 431.153827 91.238311 +L 435.887248 91.318609 +L 440.620668 91.263431 +L 445.354089 91.232709 +L 450.087509 91.100685 +L 454.82093 91.125399 +L 459.55435 91.218532 +L 464.28777 91.158546 +L 469.021191 91.063997 +L 473.754611 91.014714 +L 478.488032 91.116454 +L 483.221452 91.01922 +L 487.954873 90.962299 +L 492.688293 90.896718 +L 497.421713 90.767363 +L 502.155134 90.86361 +L 506.888554 90.937519 +L 511.621975 90.933131 +L 516.355395 91.004964 +L 521.088816 90.997321 +L 525.822236 90.964853 +L 530.555656 90.958064 +L 535.289077 90.986461 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 43.25 96.94 +L 43.25 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 43.25 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 43.25 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_11"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 300.985, 23.04)" x="300.985" y="23.04">Breakout</text> + </g> + </g> + </g> + <defs> + <clipPath id="p7a128d5ac8"> + <rect height="67.9" width="515.47" x="43.25" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 43.34 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 43.34 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 96.94 +L 66.766364 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 66.766364, 114.798281)" x="66.766364" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#pb05c831d1b)" d="M 160.471959 96.94 +L 160.471959 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 160.471959, 114.798281)" x="160.471959" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#pb05c831d1b)" d="M 254.177554 96.94 +L 254.177554 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 254.177554, 114.798281)" x="254.177554" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#pb05c831d1b)" d="M 347.883149 96.94 +L 347.883149 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 347.883149, 114.798281)" x="347.883149" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#pb05c831d1b)" d="M 441.588744 96.94 +L 441.588744 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 441.588744, 114.798281)" x="441.588744" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#pb05c831d1b)" d="M 535.294339 96.94 +L 535.294339 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.294339, 114.798281)" x="535.294339" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#pb05c831d1b)" d="M 43.34 93.853636 +L 558.72 93.853636 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.84, 98.032777)" x="33.84" y="98.032777">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#pb05c831d1b)" d="M 43.34 55.132585 +L 558.72 55.132585 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.84, 59.311726)" x="33.84" y="59.311726">500</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 66.766364 -50.313017 +L 66.766364 -50.21964 +L 71.490993 -50.266864 +L 76.215623 -50.432357 +L 80.940252 -50.849845 +L 85.664882 -51.453356 +L 90.389511 -52.180037 +L 95.114141 -53.195808 +L 99.83877 -54.277267 +L 104.563399 -55.188489 +L 109.288029 -55.927138 +L 114.012658 -56.722333 +L 118.737288 -57.484513 +L 123.461917 -58.438852 +L 128.186547 -59.392901 +L 132.911176 -60.508235 +L 137.635806 -61.273751 +L 142.360435 -61.223824 +L 147.085065 -61.704368 +L 151.809694 -61.992763 +L 156.534324 -62.232518 +L 161.258953 -62.626437 +L 165.983583 -62.80396 +L 170.708212 -62.822651 +L 175.432842 -63.051176 +L 180.157471 -63.691841 +L 184.882101 -64.479538 +L 189.60673 -64.7498 +L 194.33136 -64.879377 +L 199.055989 -64.63951 +L 203.780619 -64.720055 +L 208.505248 -64.712469 +L 213.229878 -65.068115 +L 217.954507 -65.940061 +L 222.679136 -67.178331 +L 227.403766 -68.172852 +L 232.128395 -69.965349 +L 236.853025 -71.713456 +L 241.577654 -73.094219 +L 246.302284 -74.154317 +L 251.026913 -74.822687 +L 255.751543 -75.097776 +L 260.476172 -75.281201 +L 265.200802 -75.070824 +L 269.925431 -75.128364 +L 274.650061 -76.028977 +L 279.37469 -77.904086 +L 284.09932 -79.704976 +L 288.823949 -80.868041 +L 293.548579 -81.809437 +L 298.273208 -82.069804 +L 302.997838 -82.482921 +L 307.722467 -83.36797 +L 312.447097 -84.420764 +L 317.171726 -85.399835 +L 321.896356 -85.666102 +L 326.620985 -86.127054 +L 331.345614 -86.612015 +L 336.070244 -88.134913 +L 340.794873 -89.214482 +L 345.519503 -88.956423 +L 350.244132 -88.574247 +L 354.968762 -88.002498 +L 359.693391 -88.688808 +L 364.418021 -90.206049 +L 369.14265 -90.684459 +L 373.86728 -91.117992 +L 378.591909 -91.945318 +L 383.316539 -91.572411 +L 388.041168 -91.408468 +L 392.765798 -91.409501 +L 397.490427 -91.587568 +L 402.215057 -92.079294 +L 406.939686 -92.597787 +L 411.664316 -93.300269 +L 416.388945 -93.96765 +L 421.113575 -94.600243 +L 425.838204 -94.81965 +L 430.562834 -94.248398 +L 435.287463 -94.66486 +L 440.012093 -95.528556 +L 444.736722 -95.973989 +L 449.461351 -97.111999 +L 454.185981 -97.652018 +L 458.91061 -98.48778 +L 463.63524 -99.053734 +L 468.359869 -99.415181 +L 473.084499 -101.283423 +L 477.809128 -101.007077 +L 482.533758 -99.791831 +L 487.258387 -100.141315 +L 491.983017 -99.878487 +L 496.707646 -100.813104 +L 501.432276 -101.44126 +L 506.156905 -102.543969 +L 510.881535 -103.135927 +L 515.606164 -103.916608 +L 520.330794 -103.970504 +L 525.055423 -103.571716 +L 529.780053 -104.231745 +L 534.504682 -103.134189 +L 534.504682 -111.164476 +L 534.504682 -111.164476 +L 529.780053 -111.873636 +L 525.055423 -111.011036 +L 520.330794 -111.851896 +L 515.606164 -111.584947 +L 510.881535 -111.392003 +L 506.156905 -111.317567 +L 501.432276 -110.161715 +L 496.707646 -109.341196 +L 491.983017 -108.881992 +L 487.258387 -109.290183 +L 482.533758 -108.770661 +L 477.809128 -109.411609 +L 473.084499 -109.342417 +L 468.359869 -107.586718 +L 463.63524 -107.13606 +L 458.91061 -106.486739 +L 454.185981 -105.130254 +L 449.461351 -103.242586 +L 444.736722 -101.735325 +L 440.012093 -101.060087 +L 435.287463 -100.529247 +L 430.562834 -100.703895 +L 425.838204 -102.539206 +L 421.113575 -102.992152 +L 416.388945 -102.071659 +L 411.664316 -101.230233 +L 406.939686 -101.224389 +L 402.215057 -101.122969 +L 397.490427 -100.28662 +L 392.765798 -99.84407 +L 388.041168 -99.644195 +L 383.316539 -99.96898 +L 378.591909 -100.235077 +L 373.86728 -98.671403 +L 369.14265 -97.711652 +L 364.418021 -96.781343 +L 359.693391 -94.808351 +L 354.968762 -94.457951 +L 350.244132 -95.781264 +L 345.519503 -96.434244 +L 340.794873 -95.966433 +L 336.070244 -94.094176 +L 331.345614 -92.353958 +L 326.620985 -92.076627 +L 321.896356 -91.98239 +L 317.171726 -92.043868 +L 312.447097 -91.815426 +L 307.722467 -91.535894 +L 302.997838 -90.635885 +L 298.273208 -90.53835 +L 293.548579 -90.415038 +L 288.823949 -89.044511 +L 284.09932 -87.486894 +L 279.37469 -85.739265 +L 274.650061 -84.311043 +L 269.925431 -84.06453 +L 265.200802 -84.514148 +L 260.476172 -85.273872 +L 255.751543 -85.41139 +L 251.026913 -86.024205 +L 246.302284 -85.947452 +L 241.577654 -85.202585 +L 236.853025 -83.81022 +L 232.128395 -82.076765 +L 227.403766 -80.39986 +L 222.679136 -79.967665 +L 217.954507 -78.386281 +L 213.229878 -77.288436 +L 208.505248 -76.827538 +L 203.780619 -76.744993 +L 199.055989 -76.55055 +L 194.33136 -77.019372 +L 189.60673 -76.995053 +L 184.882101 -76.583734 +L 180.157471 -75.257672 +L 175.432842 -73.900466 +L 170.708212 -73.394165 +L 165.983583 -73.287877 +L 161.258953 -72.95776 +L 156.534324 -72.446476 +L 151.809694 -71.927993 +L 147.085065 -71.290595 +L 142.360435 -70.419358 +L 137.635806 -70.476387 +L 132.911176 -69.088585 +L 128.186547 -67.156997 +L 123.461917 -65.500707 +L 118.737288 -63.701407 +L 114.012658 -62.252029 +L 109.288029 -60.834465 +L 104.563399 -59.462024 +L 99.83877 -57.809886 +L 95.114141 -55.971638 +L 90.389511 -54.264807 +L 85.664882 -52.94383 +L 80.940252 -51.715691 +L 76.215623 -50.796772 +L 71.490993 -50.420413 +L 66.766364 -50.313017 +z +" id="mb86550fb5d" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#mb86550fb5d" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 66.766364 -50.149167 +L 66.766364 -50.148449 +L 71.498753 -50.149792 +L 76.231142 -50.1545 +L 80.963531 -50.167496 +L 85.69592 -50.202894 +L 90.428309 -50.299016 +L 95.160698 -50.554111 +L 99.893087 -51.215276 +L 104.625476 -52.853591 +L 109.357865 -56.356689 +L 114.090254 -61.528849 +L 118.822643 -68.044997 +L 123.555032 -74.596438 +L 128.287421 -79.268448 +L 133.01981 -82.445264 +L 137.7522 -85.329881 +L 142.484589 -87.413034 +L 147.216978 -88.302963 +L 151.949367 -89.100469 +L 156.681756 -89.667283 +L 161.414145 -90.5189 +L 166.146534 -92.063892 +L 170.878923 -93.418854 +L 175.611312 -95.106186 +L 180.343701 -95.492792 +L 185.07609 -95.836726 +L 189.808479 -97.756793 +L 194.540868 -98.605244 +L 199.273257 -98.643441 +L 204.005646 -99.403618 +L 208.738035 -99.295467 +L 213.470424 -99.924046 +L 218.202814 -102.07431 +L 222.935203 -102.123793 +L 227.667592 -102.016012 +L 232.399981 -102.229711 +L 237.13237 -102.595676 +L 241.864759 -102.337761 +L 246.597148 -100.363981 +L 251.329537 -98.712243 +L 256.061926 -98.775437 +L 260.794315 -97.621335 +L 265.526704 -96.016622 +L 270.259093 -95.602711 +L 274.991482 -98.140692 +L 279.723871 -99.697705 +L 284.45626 -101.663717 +L 289.188649 -101.573847 +L 293.921039 -101.577435 +L 298.653428 -101.52938 +L 303.385817 -101.865439 +L 308.118206 -101.304639 +L 312.850595 -101.574343 +L 317.582984 -103.556471 +L 322.315373 -103.99259 +L 327.047762 -105.307964 +L 331.780151 -106.513491 +L 336.51254 -107.854327 +L 341.244929 -106.666268 +L 345.977318 -105.305452 +L 350.709707 -103.890498 +L 355.442096 -104.142566 +L 360.174485 -104.772864 +L 364.906874 -104.690666 +L 369.639263 -101.657484 +L 374.371653 -99.997789 +L 379.104042 -99.902299 +L 383.836431 -100.189252 +L 388.56882 -99.308664 +L 393.301209 -97.750798 +L 398.033598 -97.473674 +L 402.765987 -96.827935 +L 407.498376 -94.917714 +L 412.230765 -94.048756 +L 416.963154 -93.887547 +L 421.695543 -92.698889 +L 426.427932 -91.422331 +L 431.160321 -90.904092 +L 435.89271 -92.2855 +L 440.625099 -93.310082 +L 445.357488 -93.86211 +L 450.089877 -94.809792 +L 454.822267 -93.496232 +L 459.554656 -93.357073 +L 464.287045 -94.031629 +L 469.019434 -95.934542 +L 473.751823 -98.960216 +L 478.484212 -101.114181 +L 483.216601 -98.863984 +L 487.94899 -97.474304 +L 492.681379 -97.045777 +L 497.413768 -96.879157 +L 502.146157 -95.634247 +L 506.878546 -93.62582 +L 511.610935 -93.322747 +L 516.343324 -93.241634 +L 521.075713 -93.826861 +L 525.808102 -93.768835 +L 530.540492 -96.67485 +L 535.272881 -98.772765 +L 535.272881 -107.172904 +L 535.272881 -107.172904 +L 530.540492 -105.002468 +L 525.808102 -102.940917 +L 521.075713 -102.34013 +L 516.343324 -101.244472 +L 511.610935 -101.206826 +L 506.878546 -102.638702 +L 502.146157 -106.123053 +L 497.413768 -106.743456 +L 492.681379 -106.899333 +L 487.94899 -106.800447 +L 483.216601 -106.010109 +L 478.484212 -107.640242 +L 473.751823 -106.427613 +L 469.019434 -104.77258 +L 464.287045 -102.853487 +L 459.554656 -100.468451 +L 454.822267 -99.226884 +L 450.089877 -101.440894 +L 445.357488 -102.356284 +L 440.625099 -101.001231 +L 435.89271 -99.992486 +L 431.160321 -98.989002 +L 426.427932 -99.704877 +L 421.695543 -100.01606 +L 416.963154 -99.368782 +L 412.230765 -100.401236 +L 407.498376 -102.473478 +L 402.765987 -104.190579 +L 398.033598 -104.222415 +L 393.301209 -105.395072 +L 388.56882 -106.022507 +L 383.836431 -106.326685 +L 379.104042 -105.180294 +L 374.371653 -104.487584 +L 369.639263 -105.476688 +L 364.906874 -109.118682 +L 360.174485 -109.785346 +L 355.442096 -108.743727 +L 350.709707 -106.129437 +L 345.977318 -109.058712 +L 341.244929 -110.677906 +L 336.51254 -111.192604 +L 331.780151 -109.980308 +L 327.047762 -109.366573 +L 322.315373 -107.251299 +L 317.582984 -105.822509 +L 312.850595 -103.970295 +L 308.118206 -103.86701 +L 303.385817 -105.386756 +L 298.653428 -105.408187 +L 293.921039 -105.726002 +L 289.188649 -105.228702 +L 284.45626 -104.941695 +L 279.723871 -103.281983 +L 274.991482 -102.158609 +L 270.259093 -100.954348 +L 265.526704 -101.694199 +L 260.794315 -102.062955 +L 256.061926 -101.212866 +L 251.329537 -101.140815 +L 246.597148 -102.93853 +L 241.864759 -103.665275 +L 237.13237 -104.877239 +L 232.399981 -105.424611 +L 227.667592 -106.199777 +L 222.935203 -105.717119 +L 218.202814 -105.346043 +L 213.470424 -103.240442 +L 208.738035 -101.827854 +L 204.005646 -101.377024 +L 199.273257 -100.653698 +L 194.540868 -100.237758 +L 189.808479 -99.581198 +L 185.07609 -98.398388 +L 180.343701 -97.527288 +L 175.611312 -97.087922 +L 170.878923 -95.279499 +L 166.146534 -93.63241 +L 161.414145 -92.585877 +L 156.681756 -91.624825 +L 151.949367 -90.461812 +L 147.216978 -89.563387 +L 142.484589 -89.792797 +L 137.7522 -88.059999 +L 133.01981 -85.346043 +L 128.287421 -81.91881 +L 123.555032 -77.167597 +L 118.822643 -70.921127 +L 114.090254 -63.389303 +L 109.357865 -57.491524 +L 104.625476 -53.591677 +L 99.893087 -51.585377 +L 95.160698 -50.696729 +L 90.428309 -50.35174 +L 85.69592 -50.222386 +L 80.963531 -50.174778 +L 76.231142 -50.157304 +L 71.498753 -50.150974 +L 66.766364 -50.149167 +z +" id="m50ec7bb52f" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m50ec7bb52f" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 66.766364 -50.146364 +L 66.766364 -50.146364 +L 71.497527 -50.146364 +L 76.228691 -50.146364 +L 80.959855 -50.146364 +L 85.691019 -50.146364 +L 90.422183 -50.146364 +L 95.153346 -50.146364 +L 99.88451 -50.146364 +L 104.615674 -50.146364 +L 109.346838 -50.146364 +L 114.078002 -50.146364 +L 118.809165 -50.146364 +L 123.540329 -50.146364 +L 128.271493 -50.146364 +L 133.002657 -50.146364 +L 137.73382 -50.146364 +L 142.464984 -50.146364 +L 147.196148 -50.146364 +L 151.927312 -50.146364 +L 156.658476 -50.146364 +L 161.389639 -50.146364 +L 166.120803 -50.146364 +L 170.851967 -50.146364 +L 175.583131 -50.146364 +L 180.314295 -50.146364 +L 185.045458 -50.146364 +L 189.776622 -50.146364 +L 194.507786 -50.146364 +L 199.23895 -50.146364 +L 203.970113 -50.146364 +L 208.701277 -50.146364 +L 213.432441 -50.146364 +L 218.163605 -50.146364 +L 222.894769 -50.146364 +L 227.625932 -50.146364 +L 232.357096 -50.146364 +L 237.08826 -50.146364 +L 241.819424 -50.146364 +L 246.550588 -50.146364 +L 251.281751 -50.146364 +L 256.012915 -50.146364 +L 260.744079 -50.146364 +L 265.475243 -50.146364 +L 270.206407 -50.146364 +L 274.93757 -50.146364 +L 279.668734 -50.146364 +L 284.399898 -50.146364 +L 289.131062 -50.146364 +L 293.862225 -50.146364 +L 298.593389 -50.146364 +L 303.324553 -50.146364 +L 308.055717 -50.146364 +L 312.786881 -50.146364 +L 317.518044 -50.146364 +L 322.249208 -50.146364 +L 326.980372 -50.146364 +L 331.711536 -50.146364 +L 336.4427 -50.146364 +L 341.173863 -50.146364 +L 345.905027 -50.146364 +L 350.636191 -50.146364 +L 355.367355 -50.146364 +L 360.098519 -50.146364 +L 364.829682 -50.146364 +L 369.560846 -50.146364 +L 374.29201 -50.146364 +L 379.023174 -50.146364 +L 383.754337 -50.146364 +L 388.485501 -50.146364 +L 393.216665 -50.146364 +L 397.947829 -50.146364 +L 402.678993 -50.146364 +L 407.410156 -50.146364 +L 412.14132 -50.146364 +L 416.872484 -50.146364 +L 421.603648 -50.146364 +L 426.334812 -50.146364 +L 431.065975 -50.146364 +L 435.797139 -50.146364 +L 440.528303 -50.146364 +L 445.259467 -50.146364 +L 449.99063 -50.146364 +L 454.721794 -50.146364 +L 459.452958 -50.146364 +L 464.184122 -50.146364 +L 468.915286 -50.146364 +L 473.646449 -50.146364 +L 478.377613 -50.146364 +L 483.108777 -50.146364 +L 487.839941 -50.146364 +L 492.571105 -50.146364 +L 497.302268 -50.146364 +L 502.033432 -50.146364 +L 506.764596 -50.146364 +L 511.49576 -50.146364 +L 516.226924 -50.146364 +L 520.958087 -50.146364 +L 525.689251 -50.146364 +L 530.420415 -50.146364 +L 535.151579 -50.146364 +L 535.151579 -50.146364 +L 535.151579 -50.146364 +L 530.420415 -50.146364 +L 525.689251 -50.146364 +L 520.958087 -50.146364 +L 516.226924 -50.146364 +L 511.49576 -50.146364 +L 506.764596 -50.146364 +L 502.033432 -50.146364 +L 497.302268 -50.146364 +L 492.571105 -50.146364 +L 487.839941 -50.146364 +L 483.108777 -50.146364 +L 478.377613 -50.146364 +L 473.646449 -50.146364 +L 468.915286 -50.146364 +L 464.184122 -50.146364 +L 459.452958 -50.146364 +L 454.721794 -50.146364 +L 449.99063 -50.146364 +L 445.259467 -50.146364 +L 440.528303 -50.146364 +L 435.797139 -50.146364 +L 431.065975 -50.146364 +L 426.334812 -50.146364 +L 421.603648 -50.146364 +L 416.872484 -50.146364 +L 412.14132 -50.146364 +L 407.410156 -50.146364 +L 402.678993 -50.146364 +L 397.947829 -50.146364 +L 393.216665 -50.146364 +L 388.485501 -50.146364 +L 383.754337 -50.146364 +L 379.023174 -50.146364 +L 374.29201 -50.146364 +L 369.560846 -50.146364 +L 364.829682 -50.146364 +L 360.098519 -50.146364 +L 355.367355 -50.146364 +L 350.636191 -50.146364 +L 345.905027 -50.146364 +L 341.173863 -50.146364 +L 336.4427 -50.146364 +L 331.711536 -50.146364 +L 326.980372 -50.146364 +L 322.249208 -50.146364 +L 317.518044 -50.146364 +L 312.786881 -50.146364 +L 308.055717 -50.146364 +L 303.324553 -50.146364 +L 298.593389 -50.146364 +L 293.862225 -50.146364 +L 289.131062 -50.146364 +L 284.399898 -50.146364 +L 279.668734 -50.146364 +L 274.93757 -50.146364 +L 270.206407 -50.146364 +L 265.475243 -50.146364 +L 260.744079 -50.146364 +L 256.012915 -50.146364 +L 251.281751 -50.146364 +L 246.550588 -50.146364 +L 241.819424 -50.146364 +L 237.08826 -50.146364 +L 232.357096 -50.146364 +L 227.625932 -50.146364 +L 222.894769 -50.146364 +L 218.163605 -50.146364 +L 213.432441 -50.146364 +L 208.701277 -50.146364 +L 203.970113 -50.146364 +L 199.23895 -50.146364 +L 194.507786 -50.146364 +L 189.776622 -50.146364 +L 185.045458 -50.146364 +L 180.314295 -50.146364 +L 175.583131 -50.146364 +L 170.851967 -50.146364 +L 166.120803 -50.146364 +L 161.389639 -50.146364 +L 156.658476 -50.146364 +L 151.927312 -50.146364 +L 147.196148 -50.146364 +L 142.464984 -50.146364 +L 137.73382 -50.146364 +L 133.002657 -50.146364 +L 128.271493 -50.146364 +L 123.540329 -50.146364 +L 118.809165 -50.146364 +L 114.078002 -50.146364 +L 109.346838 -50.146364 +L 104.615674 -50.146364 +L 99.88451 -50.146364 +L 95.153346 -50.146364 +L 90.422183 -50.146364 +L 85.691019 -50.146364 +L 80.959855 -50.146364 +L 76.228691 -50.146364 +L 71.497527 -50.146364 +L 66.766364 -50.146364 +z +" id="m4521355493" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m4521355493" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 66.766364 -50.146364 +L 66.766364 -50.146364 +L 71.498962 -50.146364 +L 76.231561 -50.146364 +L 80.96416 -50.146364 +L 85.696758 -50.146364 +L 90.429357 -50.146364 +L 95.161956 -50.146364 +L 99.894555 -50.146364 +L 104.627153 -50.146364 +L 109.359752 -50.146364 +L 114.092351 -50.146364 +L 118.824949 -50.146364 +L 123.557548 -50.146364 +L 128.290147 -50.146364 +L 133.022746 -50.146364 +L 137.755344 -50.146364 +L 142.487943 -50.146364 +L 147.220542 -50.146364 +L 151.95314 -50.146364 +L 156.685739 -50.146364 +L 161.418338 -50.146364 +L 166.150937 -50.146364 +L 170.883535 -50.146364 +L 175.616134 -50.146364 +L 180.348733 -50.146364 +L 185.081331 -50.146364 +L 189.81393 -50.146364 +L 194.546529 -50.146364 +L 199.279128 -50.146364 +L 204.011726 -50.146364 +L 208.744325 -50.146364 +L 213.476924 -50.146364 +L 218.209522 -50.146364 +L 222.942121 -50.146364 +L 227.67472 -50.146364 +L 232.407319 -50.146364 +L 237.139917 -50.146364 +L 241.872516 -50.146364 +L 246.605115 -50.146364 +L 251.337713 -50.146364 +L 256.070312 -50.146364 +L 260.802911 -50.146364 +L 265.53551 -50.146364 +L 270.268108 -50.146364 +L 275.000707 -50.146364 +L 279.733306 -50.146364 +L 284.465904 -50.146364 +L 289.198503 -50.146364 +L 293.931102 -50.146364 +L 298.663701 -50.146364 +L 303.396299 -50.146364 +L 308.128898 -50.146364 +L 312.861497 -50.146364 +L 317.594096 -50.146364 +L 322.326694 -50.146364 +L 327.059293 -50.146364 +L 331.791892 -50.146364 +L 336.52449 -50.146364 +L 341.257089 -50.146364 +L 345.989688 -50.146364 +L 350.722287 -50.146364 +L 355.454885 -50.146364 +L 360.187484 -50.146364 +L 364.920083 -50.146364 +L 369.652681 -50.146364 +L 374.38528 -50.146364 +L 379.117879 -50.146364 +L 383.850478 -50.146364 +L 388.583076 -50.146364 +L 393.315675 -50.146364 +L 398.048274 -50.146364 +L 402.780872 -50.146364 +L 407.513471 -50.146364 +L 412.24607 -50.146364 +L 416.978669 -50.146364 +L 421.711267 -50.146364 +L 426.443866 -50.146364 +L 431.176465 -50.146364 +L 435.909063 -50.146364 +L 440.641662 -50.146364 +L 445.374261 -50.146364 +L 450.10686 -50.146364 +L 454.839458 -50.146364 +L 459.572057 -50.146364 +L 464.304656 -50.146364 +L 469.037254 -50.146364 +L 473.769853 -50.146364 +L 478.502452 -50.146364 +L 483.235051 -50.146364 +L 487.967649 -50.146364 +L 492.700248 -50.146364 +L 497.432847 -50.146364 +L 502.165445 -50.146364 +L 506.898044 -50.146364 +L 511.630643 -50.146364 +L 516.363242 -50.146364 +L 521.09584 -50.146364 +L 525.828439 -50.146364 +L 530.561038 -50.146364 +L 535.293636 -50.146364 +L 535.293636 -50.146364 +L 535.293636 -50.146364 +L 530.561038 -50.146364 +L 525.828439 -50.146364 +L 521.09584 -50.146364 +L 516.363242 -50.146364 +L 511.630643 -50.146364 +L 506.898044 -50.146364 +L 502.165445 -50.146364 +L 497.432847 -50.146364 +L 492.700248 -50.146364 +L 487.967649 -50.146364 +L 483.235051 -50.146364 +L 478.502452 -50.146364 +L 473.769853 -50.146364 +L 469.037254 -50.146364 +L 464.304656 -50.146364 +L 459.572057 -50.146364 +L 454.839458 -50.146364 +L 450.10686 -50.146364 +L 445.374261 -50.146364 +L 440.641662 -50.146364 +L 435.909063 -50.146364 +L 431.176465 -50.146364 +L 426.443866 -50.146364 +L 421.711267 -50.146364 +L 416.978669 -50.146364 +L 412.24607 -50.146364 +L 407.513471 -50.146364 +L 402.780872 -50.146364 +L 398.048274 -50.146364 +L 393.315675 -50.146364 +L 388.583076 -50.146364 +L 383.850478 -50.146364 +L 379.117879 -50.146364 +L 374.38528 -50.146364 +L 369.652681 -50.146364 +L 364.920083 -50.146364 +L 360.187484 -50.146364 +L 355.454885 -50.146364 +L 350.722287 -50.146364 +L 345.989688 -50.146364 +L 341.257089 -50.146364 +L 336.52449 -50.146364 +L 331.791892 -50.146364 +L 327.059293 -50.146364 +L 322.326694 -50.146364 +L 317.594096 -50.146364 +L 312.861497 -50.146364 +L 308.128898 -50.146364 +L 303.396299 -50.146364 +L 298.663701 -50.146364 +L 293.931102 -50.146364 +L 289.198503 -50.146364 +L 284.465904 -50.146364 +L 279.733306 -50.146364 +L 275.000707 -50.146364 +L 270.268108 -50.146364 +L 265.53551 -50.146364 +L 260.802911 -50.146364 +L 256.070312 -50.146364 +L 251.337713 -50.146364 +L 246.605115 -50.146364 +L 241.872516 -50.146364 +L 237.139917 -50.146364 +L 232.407319 -50.146364 +L 227.67472 -50.146364 +L 222.942121 -50.146364 +L 218.209522 -50.146364 +L 213.476924 -50.146364 +L 208.744325 -50.146364 +L 204.011726 -50.146364 +L 199.279128 -50.146364 +L 194.546529 -50.146364 +L 189.81393 -50.146364 +L 185.081331 -50.146364 +L 180.348733 -50.146364 +L 175.616134 -50.146364 +L 170.883535 -50.146364 +L 166.150937 -50.146364 +L 161.418338 -50.146364 +L 156.685739 -50.146364 +L 151.95314 -50.146364 +L 147.220542 -50.146364 +L 142.487943 -50.146364 +L 137.755344 -50.146364 +L 133.022746 -50.146364 +L 128.290147 -50.146364 +L 123.557548 -50.146364 +L 118.824949 -50.146364 +L 114.092351 -50.146364 +L 109.359752 -50.146364 +L 104.627153 -50.146364 +L 99.894555 -50.146364 +L 95.161956 -50.146364 +L 90.429357 -50.146364 +L 85.696758 -50.146364 +L 80.96416 -50.146364 +L 76.231561 -50.146364 +L 71.498962 -50.146364 +L 66.766364 -50.146364 +z +" id="m042b156204" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#m042b156204" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 66.766364 -50.146786 +L 66.766364 -50.146409 +L 71.498927 -50.146439 +L 76.231491 -50.146542 +L 80.964055 -50.146827 +L 85.696618 -50.147603 +L 90.429182 -50.149713 +L 95.161746 -50.155322 +L 99.894309 -50.169733 +L 104.626873 -50.206092 +L 109.359437 -50.281426 +L 114.092001 -50.430123 +L 118.824564 -50.519974 +L 123.557128 -50.620619 +L 128.289692 -50.822334 +L 133.022255 -51.033243 +L 137.754819 -51.244073 +L 142.487383 -51.458343 +L 147.219946 -51.740722 +L 151.95251 -52.042645 +L 156.685074 -52.356251 +L 161.417637 -52.877449 +L 166.150201 -53.394094 +L 170.882765 -53.890466 +L 175.615329 -54.482195 +L 180.347892 -55.197416 +L 185.080456 -55.82869 +L 189.81302 -56.199462 +L 194.545583 -56.716359 +L 199.278147 -57.303271 +L 204.010711 -57.910468 +L 208.743274 -58.908498 +L 213.475838 -59.727654 +L 218.208402 -60.478985 +L 222.940966 -61.452856 +L 227.673529 -61.996144 +L 232.406093 -62.395921 +L 237.138657 -62.82686 +L 241.87122 -63.446548 +L 246.603784 -63.665757 +L 251.336348 -64.347617 +L 256.068911 -65.187462 +L 260.801475 -65.586831 +L 265.534039 -65.938484 +L 270.266602 -66.601019 +L 274.999166 -66.710151 +L 279.73173 -66.685567 +L 284.464294 -66.919901 +L 289.196857 -67.030882 +L 293.929421 -67.671435 +L 298.661985 -69.301384 +L 303.394548 -70.786691 +L 308.127112 -71.511785 +L 312.859676 -71.963688 +L 317.592239 -71.428664 +L 322.324803 -71.105338 +L 327.057367 -71.664337 +L 331.78993 -72.554111 +L 336.522494 -73.378717 +L 341.255058 -74.009331 +L 345.987622 -74.912597 +L 350.720185 -75.215231 +L 355.452749 -74.843841 +L 360.185313 -75.67158 +L 364.917876 -76.308377 +L 369.65044 -76.17336 +L 374.383004 -77.334713 +L 379.115567 -77.733399 +L 383.848131 -79.435741 +L 388.580695 -79.585054 +L 393.313258 -78.812116 +L 398.045822 -78.565369 +L 402.778386 -78.661333 +L 407.51095 -78.291929 +L 412.243513 -78.199159 +L 416.976077 -78.397638 +L 421.708641 -79.384347 +L 426.441204 -79.75431 +L 431.173768 -80.521702 +L 435.906332 -81.490073 +L 440.638895 -81.724554 +L 445.371459 -81.776923 +L 450.104023 -81.862092 +L 454.836586 -82.51847 +L 459.56915 -82.816375 +L 464.301714 -83.099396 +L 469.034278 -84.309093 +L 473.766841 -84.6232 +L 478.499405 -84.662069 +L 483.231969 -84.588412 +L 487.964532 -85.049439 +L 492.697096 -85.648656 +L 497.42966 -86.225484 +L 502.162223 -85.412202 +L 506.894787 -85.670957 +L 511.627351 -86.253805 +L 516.359914 -85.931141 +L 521.092478 -85.656788 +L 525.825042 -86.288046 +L 530.557606 -87.094064 +L 535.290169 -86.250053 +L 535.290169 -87.978761 +L 535.290169 -87.978761 +L 530.557606 -88.552883 +L 525.825042 -87.784291 +L 521.092478 -87.597978 +L 516.359914 -88.327381 +L 511.627351 -88.598661 +L 506.894787 -88.315193 +L 502.162223 -88.171533 +L 497.42966 -88.809345 +L 492.697096 -88.178498 +L 487.964532 -87.864566 +L 483.231969 -87.673353 +L 478.499405 -87.660842 +L 473.766841 -87.220094 +L 469.034278 -85.961892 +L 464.301714 -85.580217 +L 459.56915 -86.326765 +L 454.836586 -86.320387 +L 450.104023 -85.233897 +L 445.371459 -84.820269 +L 440.638895 -84.467202 +L 435.906332 -83.980224 +L 431.173768 -83.747913 +L 426.441204 -82.89903 +L 421.708641 -82.267941 +L 416.976077 -81.994888 +L 412.243513 -82.228498 +L 407.51095 -81.821895 +L 402.778386 -81.723649 +L 398.045822 -81.558457 +L 393.313258 -81.334949 +L 388.580695 -81.362164 +L 383.848131 -81.646885 +L 379.115567 -80.515179 +L 374.383004 -79.739382 +L 369.65044 -78.596564 +L 364.917876 -78.358094 +L 360.185313 -77.846291 +L 355.452749 -78.001759 +L 350.720185 -78.170403 +L 345.987622 -78.000694 +L 341.255058 -77.537109 +L 336.522494 -77.130102 +L 331.78993 -76.327057 +L 327.057367 -75.246853 +L 322.324803 -75.012311 +L 317.592239 -75.466923 +L 312.859676 -76.045232 +L 308.127112 -75.548987 +L 303.394548 -74.932014 +L 298.661985 -73.904524 +L 293.929421 -73.107009 +L 289.196857 -72.563416 +L 284.464294 -72.206022 +L 279.73173 -71.695592 +L 274.999166 -71.44486 +L 270.266602 -71.322402 +L 265.534039 -71.070631 +L 260.801475 -70.599068 +L 256.068911 -69.421673 +L 251.336348 -68.12728 +L 246.603784 -67.359412 +L 241.87122 -66.977833 +L 237.138657 -66.333472 +L 232.406093 -65.814343 +L 227.673529 -65.669534 +L 222.940966 -65.403981 +L 218.208402 -64.416729 +L 213.475838 -64.129941 +L 208.743274 -63.625312 +L 204.010711 -62.662959 +L 199.278147 -61.878135 +L 194.545583 -61.311945 +L 189.81302 -60.814128 +L 185.080456 -60.509878 +L 180.347892 -59.72297 +L 175.615329 -58.76501 +L 170.882765 -57.93888 +L 166.150201 -57.289831 +L 161.417637 -56.542764 +L 156.685074 -55.695884 +L 151.95251 -55.234956 +L 147.219946 -54.700099 +L 142.487383 -54.044336 +L 137.754819 -53.350165 +L 133.022255 -52.712571 +L 128.289692 -52.332946 +L 123.557128 -51.899966 +L 118.824564 -51.628987 +L 114.092001 -51.32765 +L 109.359437 -50.933301 +L 104.626873 -50.61839 +L 99.894309 -50.34774 +L 95.161746 -50.227723 +L 90.429182 -50.177318 +L 85.696618 -50.157819 +L 80.964055 -50.150647 +L 76.231491 -50.148013 +L 71.498927 -50.147059 +L 66.766364 -50.146786 +z +" id="m008047e98d" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#m008047e98d" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 66.766364 -50.146364 +L 66.766364 -50.146364 +L 71.498961 -50.146364 +L 76.231558 -50.146364 +L 80.964156 -50.146364 +L 85.696753 -50.146364 +L 90.42935 -50.146364 +L 95.161947 -50.146364 +L 99.894545 -50.146364 +L 104.627142 -50.146364 +L 109.359739 -50.146364 +L 114.092337 -50.146364 +L 118.824934 -50.146364 +L 123.557531 -50.146364 +L 128.290128 -50.146364 +L 133.022726 -50.146364 +L 137.755323 -50.146364 +L 142.48792 -50.146364 +L 147.220518 -50.146364 +L 151.953115 -50.146364 +L 156.685712 -50.146364 +L 161.41831 -50.146364 +L 166.150907 -50.146364 +L 170.883504 -50.146364 +L 175.616101 -50.146364 +L 180.348699 -50.146364 +L 185.081296 -50.146364 +L 189.813893 -50.146364 +L 194.546491 -50.146364 +L 199.279088 -50.146364 +L 204.011685 -50.146364 +L 208.744282 -50.146364 +L 213.47688 -50.146364 +L 218.209477 -50.146364 +L 222.942074 -50.146364 +L 227.674672 -50.146364 +L 232.407269 -50.146364 +L 237.139866 -50.146364 +L 241.872464 -50.146364 +L 246.605061 -50.146364 +L 251.337658 -50.146364 +L 256.070255 -50.146364 +L 260.802853 -50.146364 +L 265.53545 -50.146364 +L 270.268047 -50.146364 +L 275.000645 -50.146364 +L 279.733242 -50.146364 +L 284.465839 -50.146364 +L 289.198436 -50.146364 +L 293.931034 -50.146364 +L 298.663631 -50.146364 +L 303.396228 -50.146364 +L 308.128826 -50.146364 +L 312.861423 -50.146364 +L 317.59402 -50.146364 +L 322.326618 -50.146364 +L 327.059215 -50.146364 +L 331.791812 -50.146364 +L 336.524409 -50.146364 +L 341.257007 -50.146364 +L 345.989604 -50.146364 +L 350.722201 -50.146364 +L 355.454799 -50.146364 +L 360.187396 -50.146364 +L 364.919993 -50.146364 +L 369.65259 -50.146364 +L 374.385188 -50.146364 +L 379.117785 -50.146364 +L 383.850382 -50.146364 +L 388.58298 -50.146364 +L 393.315577 -50.146364 +L 398.048174 -50.146364 +L 402.780772 -50.146364 +L 407.513369 -50.146364 +L 412.245966 -50.146364 +L 416.978563 -50.146364 +L 421.711161 -50.146364 +L 426.443758 -50.146364 +L 431.176355 -50.146364 +L 435.908953 -50.146364 +L 440.64155 -50.146364 +L 445.374147 -50.146364 +L 450.106745 -50.146364 +L 454.839342 -50.146364 +L 459.571939 -50.146364 +L 464.304536 -50.146364 +L 469.037134 -50.146364 +L 473.769731 -50.146364 +L 478.502328 -50.146364 +L 483.234926 -50.146364 +L 487.967523 -50.146364 +L 492.70012 -50.146364 +L 497.432717 -50.146364 +L 502.165315 -50.146364 +L 506.897912 -50.146364 +L 511.630509 -50.146364 +L 516.363107 -50.146364 +L 521.095704 -50.146364 +L 525.828301 -50.146364 +L 530.560899 -50.146364 +L 535.293496 -50.146364 +L 535.293496 -50.146364 +L 535.293496 -50.146364 +L 530.560899 -50.146364 +L 525.828301 -50.146364 +L 521.095704 -50.146364 +L 516.363107 -50.146364 +L 511.630509 -50.146364 +L 506.897912 -50.146364 +L 502.165315 -50.146364 +L 497.432717 -50.146364 +L 492.70012 -50.146364 +L 487.967523 -50.146364 +L 483.234926 -50.146364 +L 478.502328 -50.146364 +L 473.769731 -50.146364 +L 469.037134 -50.146364 +L 464.304536 -50.146364 +L 459.571939 -50.146364 +L 454.839342 -50.146364 +L 450.106745 -50.146364 +L 445.374147 -50.146364 +L 440.64155 -50.146364 +L 435.908953 -50.146364 +L 431.176355 -50.146364 +L 426.443758 -50.146364 +L 421.711161 -50.146364 +L 416.978563 -50.146364 +L 412.245966 -50.146364 +L 407.513369 -50.146364 +L 402.780772 -50.146364 +L 398.048174 -50.146364 +L 393.315577 -50.146364 +L 388.58298 -50.146364 +L 383.850382 -50.146364 +L 379.117785 -50.146364 +L 374.385188 -50.146364 +L 369.65259 -50.146364 +L 364.919993 -50.146364 +L 360.187396 -50.146364 +L 355.454799 -50.146364 +L 350.722201 -50.146364 +L 345.989604 -50.146364 +L 341.257007 -50.146364 +L 336.524409 -50.146364 +L 331.791812 -50.146364 +L 327.059215 -50.146364 +L 322.326618 -50.146364 +L 317.59402 -50.146364 +L 312.861423 -50.146364 +L 308.128826 -50.146364 +L 303.396228 -50.146364 +L 298.663631 -50.146364 +L 293.931034 -50.146364 +L 289.198436 -50.146364 +L 284.465839 -50.146364 +L 279.733242 -50.146364 +L 275.000645 -50.146364 +L 270.268047 -50.146364 +L 265.53545 -50.146364 +L 260.802853 -50.146364 +L 256.070255 -50.146364 +L 251.337658 -50.146364 +L 246.605061 -50.146364 +L 241.872464 -50.146364 +L 237.139866 -50.146364 +L 232.407269 -50.146364 +L 227.674672 -50.146364 +L 222.942074 -50.146364 +L 218.209477 -50.146364 +L 213.47688 -50.146364 +L 208.744282 -50.146364 +L 204.011685 -50.146364 +L 199.279088 -50.146364 +L 194.546491 -50.146364 +L 189.813893 -50.146364 +L 185.081296 -50.146364 +L 180.348699 -50.146364 +L 175.616101 -50.146364 +L 170.883504 -50.146364 +L 166.150907 -50.146364 +L 161.41831 -50.146364 +L 156.685712 -50.146364 +L 151.953115 -50.146364 +L 147.220518 -50.146364 +L 142.48792 -50.146364 +L 137.755323 -50.146364 +L 133.022726 -50.146364 +L 128.290128 -50.146364 +L 123.557531 -50.146364 +L 118.824934 -50.146364 +L 114.092337 -50.146364 +L 109.359739 -50.146364 +L 104.627142 -50.146364 +L 99.894545 -50.146364 +L 95.161947 -50.146364 +L 90.42935 -50.146364 +L 85.696753 -50.146364 +L 80.964156 -50.146364 +L 76.231558 -50.146364 +L 71.498961 -50.146364 +L 66.766364 -50.146364 +z +" id="maabbb78da4" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#maabbb78da4" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 66.766364 -50.149843 +L 66.766364 -50.146619 +L 71.498935 -50.146784 +L 76.231507 -50.14736 +L 80.964079 -50.148577 +L 85.696651 -50.150876 +L 90.429222 -50.155588 +L 95.161794 -50.165511 +L 99.894366 -50.180634 +L 104.626938 -50.212625 +L 109.359509 -50.276899 +L 114.092081 -50.355917 +L 118.824653 -50.511542 +L 123.557224 -50.716619 +L 128.289796 -50.802024 +L 133.022368 -50.832511 +L 137.75494 -50.819137 +L 142.487511 -50.870005 +L 147.220083 -50.893392 +L 151.952655 -50.966496 +L 156.685227 -51.049196 +L 161.417798 -51.128313 +L 166.15037 -51.157327 +L 170.882942 -51.298074 +L 175.615514 -51.33028 +L 180.348085 -51.181672 +L 185.080657 -51.070758 +L 189.813229 -51.044801 +L 194.545801 -51.133869 +L 199.278372 -51.1096 +L 204.010944 -50.907431 +L 208.743516 -50.737502 +L 213.476088 -50.72585 +L 218.208659 -50.732057 +L 222.941231 -50.847375 +L 227.673803 -51.029889 +L 232.406374 -51.170172 +L 237.138946 -51.347169 +L 241.871518 -51.447082 +L 246.60409 -51.491571 +L 251.336661 -51.545161 +L 256.069233 -51.543431 +L 260.801805 -51.410771 +L 265.534377 -51.390174 +L 270.266948 -51.627056 +L 274.99952 -51.709933 +L 279.732092 -51.729396 +L 284.464664 -51.800584 +L 289.197235 -51.859124 +L 293.929807 -51.991465 +L 298.662379 -52.054672 +L 303.394951 -51.961635 +L 308.127522 -51.840112 +L 312.860094 -51.771288 +L 317.592666 -51.653929 +L 322.325238 -51.378004 +L 327.057809 -51.223526 +L 331.790381 -51.145969 +L 336.522953 -51.212666 +L 341.255524 -51.288675 +L 345.988096 -51.315048 +L 350.720668 -51.402665 +L 355.45324 -51.43977 +L 360.185811 -51.54222 +L 364.918383 -51.678484 +L 369.650955 -51.778602 +L 374.383527 -51.750036 +L 379.116098 -51.753544 +L 383.84867 -51.846212 +L 388.581242 -51.897334 +L 393.313814 -51.963949 +L 398.046385 -51.892862 +L 402.778957 -51.782818 +L 407.511529 -51.831746 +L 412.244101 -51.942601 +L 416.976672 -52.131776 +L 421.709244 -52.241605 +L 426.441816 -52.235079 +L 431.174388 -52.001238 +L 435.906959 -51.65993 +L 440.639531 -51.498394 +L 445.372103 -51.474662 +L 450.104674 -51.491912 +L 454.837246 -51.563204 +L 459.569818 -51.60472 +L 464.30239 -51.576542 +L 469.034961 -51.52563 +L 473.767533 -51.5452 +L 478.500105 -51.561775 +L 483.232677 -51.496343 +L 487.965248 -51.386235 +L 492.69782 -51.284123 +L 497.430392 -51.170494 +L 502.162964 -51.092637 +L 506.895535 -51.09756 +L 511.628107 -51.084759 +L 516.360679 -51.051231 +L 521.093251 -51.047156 +L 525.825822 -51.02576 +L 530.558394 -50.955519 +L 535.290966 -50.940394 +L 535.290966 -52.195959 +L 535.290966 -52.195959 +L 530.558394 -52.175193 +L 525.825822 -52.230661 +L 521.093251 -52.324721 +L 516.360679 -52.349967 +L 511.628107 -52.371186 +L 506.895535 -52.355028 +L 502.162964 -52.409275 +L 497.430392 -52.728133 +L 492.69782 -53.260523 +L 487.965248 -53.983176 +L 483.232677 -54.67483 +L 478.500105 -55.002517 +L 473.767533 -55.127421 +L 469.034961 -55.15488 +L 464.30239 -55.237627 +L 459.569818 -55.070992 +L 454.837246 -54.720665 +L 450.104674 -54.308523 +L 445.372103 -54.205214 +L 440.639531 -54.082337 +L 435.906959 -54.04955 +L 431.174388 -54.313126 +L 426.441816 -54.391769 +L 421.709244 -54.308509 +L 416.976672 -54.119109 +L 412.244101 -53.692248 +L 407.511529 -53.459707 +L 402.778957 -53.340946 +L 398.046385 -53.611782 +L 393.313814 -53.902294 +L 388.581242 -54.008232 +L 383.84867 -54.200839 +L 379.116098 -54.370361 +L 374.383527 -54.550554 +L 369.650955 -54.524788 +L 364.918383 -54.285058 +L 360.185811 -54.185266 +L 355.45324 -53.964739 +L 350.720668 -53.783003 +L 345.988096 -53.569325 +L 341.255524 -53.327778 +L 336.522953 -52.864034 +L 331.790381 -52.562726 +L 327.057809 -52.655185 +L 322.325238 -52.803626 +L 317.592666 -53.101192 +L 312.860094 -53.274258 +L 308.127522 -53.408016 +L 303.394951 -53.703345 +L 298.662379 -53.894449 +L 293.929807 -53.797868 +L 289.197235 -53.682097 +L 284.464664 -53.62434 +L 279.732092 -53.420352 +L 274.99952 -53.271145 +L 270.266948 -53.057003 +L 265.534377 -52.674515 +L 260.801805 -52.758617 +L 256.069233 -53.071725 +L 251.336661 -53.150147 +L 246.60409 -53.068761 +L 241.871518 -52.953148 +L 237.138946 -52.755278 +L 232.406374 -52.389439 +L 227.673803 -51.938939 +L 222.941231 -51.49326 +L 218.208659 -51.313445 +L 213.476088 -51.442742 +L 208.743516 -51.609834 +L 204.010944 -51.901595 +L 199.278372 -52.257461 +L 194.545801 -52.346082 +L 189.813229 -52.146561 +L 185.080657 -52.338677 +L 180.348085 -52.729186 +L 175.615514 -53.058869 +L 170.882942 -52.922191 +L 166.15037 -52.667898 +L 161.417798 -52.696092 +L 156.685227 -52.457097 +L 151.952655 -52.267779 +L 147.220083 -52.300625 +L 142.487511 -52.148928 +L 137.75494 -51.807574 +L 133.022368 -51.893094 +L 128.289796 -52.155428 +L 123.557224 -51.776126 +L 118.824653 -51.102686 +L 114.092081 -50.70868 +L 109.359509 -50.722969 +L 104.626938 -50.621603 +L 99.894366 -50.467534 +L 95.161794 -50.353659 +L 90.429222 -50.257455 +L 85.696651 -50.210493 +L 80.964079 -50.179009 +L 76.231507 -50.159941 +L 71.498935 -50.152085 +L 66.766364 -50.149843 +z +" id="m2ad2237497" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pb05c831d1b)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#m2ad2237497" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.733671 +L 71.490993 93.656362 +L 76.215623 93.385435 +L 80.940252 92.717232 +L 85.664882 91.801407 +L 90.389511 90.777578 +L 95.114141 89.416277 +L 99.83877 87.956424 +L 104.563399 86.674743 +L 109.288029 85.619198 +L 114.012658 84.512819 +L 118.737288 83.40704 +L 123.461917 82.030221 +L 128.186547 80.725051 +L 132.911176 79.20159 +L 137.635806 78.124931 +L 142.360435 78.178409 +L 147.085065 77.502519 +L 151.809694 77.039622 +L 156.534324 76.660503 +L 161.258953 76.207901 +L 165.983583 75.954081 +L 170.708212 75.891592 +L 175.432842 75.524179 +L 180.157471 74.525243 +L 184.882101 73.468364 +L 189.60673 73.127574 +L 194.33136 73.050625 +L 199.055989 73.40497 +L 203.780619 73.267476 +L 208.505248 73.229996 +L 213.229878 72.821725 +L 217.954507 71.836829 +L 222.679136 70.427002 +L 227.403766 69.713644 +L 232.128395 67.978943 +L 236.853025 66.238162 +L 241.577654 64.851598 +L 246.302284 63.949115 +L 251.026913 63.576554 +L 255.751543 63.745417 +L 260.476172 63.722464 +L 265.200802 64.207514 +L 269.925431 64.403553 +L 274.650061 63.82999 +L 279.37469 62.178324 +L 284.09932 60.404065 +L 288.823949 59.043724 +L 293.548579 57.887763 +L 298.273208 57.695923 +L 302.997838 57.440597 +L 307.722467 56.548068 +L 312.447097 55.881905 +L 317.171726 55.278148 +L 321.896356 55.175754 +L 326.620985 54.898159 +L 331.345614 54.517014 +L 336.070244 52.885456 +L 340.794873 51.409543 +L 345.519503 51.304666 +L 350.244132 51.822244 +L 354.968762 52.769775 +L 359.693391 52.251421 +L 364.418021 50.506304 +L 369.14265 49.801945 +L 373.86728 49.105302 +L 378.591909 47.909803 +L 383.316539 48.229304 +L 388.041168 48.473669 +L 392.765798 48.373214 +L 397.490427 48.062906 +L 402.215057 47.398869 +L 406.939686 47.088912 +L 411.664316 46.734749 +L 416.388945 45.980346 +L 421.113575 45.203803 +L 425.838204 45.320572 +L 430.562834 46.523853 +L 435.287463 46.402947 +L 440.012093 45.705679 +L 444.736722 45.145343 +L 449.461351 43.822708 +L 454.185981 42.608864 +L 458.91061 41.512741 +L 463.63524 40.905103 +L 468.359869 40.499051 +L 473.084499 38.68708 +L 477.809128 38.790657 +L 482.533758 39.718754 +L 487.258387 39.284251 +L 491.983017 39.61976 +L 496.707646 38.92285 +L 501.432276 38.198513 +L 506.156905 37.069232 +L 510.881535 36.736035 +L 515.606164 36.249222 +L 520.330794 36.0888 +L 525.055423 36.708624 +L 529.780053 35.94731 +L 534.504682 36.850668 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.851192 +L 71.498753 93.849617 +L 76.231142 93.844098 +L 80.963531 93.828863 +L 85.69592 93.78736 +L 90.428309 93.674622 +L 95.160698 93.37458 +L 99.893087 92.599673 +L 104.625476 90.777366 +L 109.357865 87.075894 +L 114.090254 81.540924 +L 118.822643 74.516938 +L 123.555032 68.117983 +L 128.287421 63.406371 +L 133.01981 60.104347 +L 137.7522 57.30506 +L 142.484589 55.397085 +L 147.216978 55.066825 +L 151.949367 54.218859 +L 156.681756 53.353946 +L 161.414145 52.447612 +L 166.146534 51.151849 +L 170.878923 49.650823 +L 175.611312 47.902946 +L 180.343701 47.48996 +L 185.07609 46.882443 +L 189.808479 45.331004 +L 194.540868 44.578499 +L 199.273257 44.351431 +L 204.005646 43.609679 +L 208.738035 43.43834 +L 213.470424 42.417756 +L 218.202814 40.289823 +L 222.935203 40.079544 +L 227.667592 39.892106 +L 232.399981 40.172839 +L 237.13237 40.263542 +L 241.864759 40.998482 +L 246.597148 42.348745 +L 251.329537 44.073471 +L 256.061926 44.005849 +L 260.794315 44.157855 +L 265.526704 45.14459 +L 270.259093 45.72147 +L 274.991482 43.85035 +L 279.723871 42.510156 +L 284.45626 40.697294 +L 289.188649 40.598726 +L 293.921039 40.348282 +L 298.653428 40.531216 +L 303.385817 40.373902 +L 308.118206 41.414175 +L 312.850595 41.227681 +L 317.582984 39.31051 +L 322.315373 38.378055 +L 327.047762 36.662731 +L 331.780151 35.7531 +L 336.51254 34.476534 +L 341.244929 35.327913 +L 345.977318 36.817918 +L 350.709707 38.990033 +L 355.442096 37.556854 +L 360.174485 36.720895 +L 364.906874 37.095326 +L 369.639263 40.432914 +L 374.371653 41.757314 +L 379.104042 41.458703 +L 383.836431 40.742031 +L 388.56882 41.334414 +L 393.301209 42.427065 +L 398.033598 43.151955 +L 402.765987 43.490743 +L 407.498376 45.304404 +L 412.230765 46.775004 +L 416.963154 47.371836 +L 421.695543 47.642525 +L 426.427932 48.436396 +L 431.160321 49.053453 +L 435.89271 47.861007 +L 440.625099 46.844343 +L 445.357488 45.890803 +L 450.089877 45.874657 +L 454.822267 47.638442 +L 459.554656 47.087238 +L 464.287045 45.557442 +L 469.019434 43.646439 +L 473.751823 41.306085 +L 478.484212 39.622789 +L 483.216601 41.562953 +L 487.94899 41.862624 +L 492.681379 42.027445 +L 497.413768 42.188693 +L 502.146157 43.12135 +L 506.878546 45.867739 +L 511.610935 46.735213 +L 516.343324 46.756947 +L 521.075713 45.916505 +L 525.808102 45.645124 +L 530.540492 43.161341 +L 535.272881 41.027166 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.853636 +L 71.497527 93.853636 +L 76.228691 93.853636 +L 80.959855 93.853636 +L 85.691019 93.853636 +L 90.422183 93.853636 +L 95.153346 93.853636 +L 99.88451 93.853636 +L 104.615674 93.853636 +L 109.346838 93.853636 +L 114.078002 93.853636 +L 118.809165 93.853636 +L 123.540329 93.853636 +L 128.271493 93.853636 +L 133.002657 93.853636 +L 137.73382 93.853636 +L 142.464984 93.853636 +L 147.196148 93.853636 +L 151.927312 93.853636 +L 156.658476 93.853636 +L 161.389639 93.853636 +L 166.120803 93.853636 +L 170.851967 93.853636 +L 175.583131 93.853636 +L 180.314295 93.853636 +L 185.045458 93.853636 +L 189.776622 93.853636 +L 194.507786 93.853636 +L 199.23895 93.853636 +L 203.970113 93.853636 +L 208.701277 93.853636 +L 213.432441 93.853636 +L 218.163605 93.853636 +L 222.894769 93.853636 +L 227.625932 93.853636 +L 232.357096 93.853636 +L 237.08826 93.853636 +L 241.819424 93.853636 +L 246.550588 93.853636 +L 251.281751 93.853636 +L 256.012915 93.853636 +L 260.744079 93.853636 +L 265.475243 93.853636 +L 270.206407 93.853636 +L 274.93757 93.853636 +L 279.668734 93.853636 +L 284.399898 93.853636 +L 289.131062 93.853636 +L 293.862225 93.853636 +L 298.593389 93.853636 +L 303.324553 93.853636 +L 308.055717 93.853636 +L 312.786881 93.853636 +L 317.518044 93.853636 +L 322.249208 93.853636 +L 326.980372 93.853636 +L 331.711536 93.853636 +L 336.4427 93.853636 +L 341.173863 93.853636 +L 345.905027 93.853636 +L 350.636191 93.853636 +L 355.367355 93.853636 +L 360.098519 93.853636 +L 364.829682 93.853636 +L 369.560846 93.853636 +L 374.29201 93.853636 +L 379.023174 93.853636 +L 383.754337 93.853636 +L 388.485501 93.853636 +L 393.216665 93.853636 +L 397.947829 93.853636 +L 402.678993 93.853636 +L 407.410156 93.853636 +L 412.14132 93.853636 +L 416.872484 93.853636 +L 421.603648 93.853636 +L 426.334812 93.853636 +L 431.065975 93.853636 +L 435.797139 93.853636 +L 440.528303 93.853636 +L 445.259467 93.853636 +L 449.99063 93.853636 +L 454.721794 93.853636 +L 459.452958 93.853636 +L 464.184122 93.853636 +L 468.915286 93.853636 +L 473.646449 93.853636 +L 478.377613 93.853636 +L 483.108777 93.853636 +L 487.839941 93.853636 +L 492.571105 93.853636 +L 497.302268 93.853636 +L 502.033432 93.853636 +L 506.764596 93.853636 +L 511.49576 93.853636 +L 516.226924 93.853636 +L 520.958087 93.853636 +L 525.689251 93.853636 +L 530.420415 93.853636 +L 535.151579 93.853636 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.853636 +L 71.498962 93.853636 +L 76.231561 93.853636 +L 80.96416 93.853636 +L 85.696758 93.853636 +L 90.429357 93.853636 +L 95.161956 93.853636 +L 99.894555 93.853636 +L 104.627153 93.853636 +L 109.359752 93.853636 +L 114.092351 93.853636 +L 118.824949 93.853636 +L 123.557548 93.853636 +L 128.290147 93.853636 +L 133.022746 93.853636 +L 137.755344 93.853636 +L 142.487943 93.853636 +L 147.220542 93.853636 +L 151.95314 93.853636 +L 156.685739 93.853636 +L 161.418338 93.853636 +L 166.150937 93.853636 +L 170.883535 93.853636 +L 175.616134 93.853636 +L 180.348733 93.853636 +L 185.081331 93.853636 +L 189.81393 93.853636 +L 194.546529 93.853636 +L 199.279128 93.853636 +L 204.011726 93.853636 +L 208.744325 93.853636 +L 213.476924 93.853636 +L 218.209522 93.853636 +L 222.942121 93.853636 +L 227.67472 93.853636 +L 232.407319 93.853636 +L 237.139917 93.853636 +L 241.872516 93.853636 +L 246.605115 93.853636 +L 251.337713 93.853636 +L 256.070312 93.853636 +L 260.802911 93.853636 +L 265.53551 93.853636 +L 270.268108 93.853636 +L 275.000707 93.853636 +L 279.733306 93.853636 +L 284.465904 93.853636 +L 289.198503 93.853636 +L 293.931102 93.853636 +L 298.663701 93.853636 +L 303.396299 93.853636 +L 308.128898 93.853636 +L 312.861497 93.853636 +L 317.594096 93.853636 +L 322.326694 93.853636 +L 327.059293 93.853636 +L 331.791892 93.853636 +L 336.52449 93.853636 +L 341.257089 93.853636 +L 345.989688 93.853636 +L 350.722287 93.853636 +L 355.454885 93.853636 +L 360.187484 93.853636 +L 364.920083 93.853636 +L 369.652681 93.853636 +L 374.38528 93.853636 +L 379.117879 93.853636 +L 383.850478 93.853636 +L 388.583076 93.853636 +L 393.315675 93.853636 +L 398.048274 93.853636 +L 402.780872 93.853636 +L 407.513471 93.853636 +L 412.24607 93.853636 +L 416.978669 93.853636 +L 421.711267 93.853636 +L 426.443866 93.853636 +L 431.176465 93.853636 +L 435.909063 93.853636 +L 440.641662 93.853636 +L 445.374261 93.853636 +L 450.10686 93.853636 +L 454.839458 93.853636 +L 459.572057 93.853636 +L 464.304656 93.853636 +L 469.037254 93.853636 +L 473.769853 93.853636 +L 478.502452 93.853636 +L 483.235051 93.853636 +L 487.967649 93.853636 +L 492.700248 93.853636 +L 497.432847 93.853636 +L 502.165445 93.853636 +L 506.898044 93.853636 +L 511.630643 93.853636 +L 516.363242 93.853636 +L 521.09584 93.853636 +L 525.828439 93.853636 +L 530.561038 93.853636 +L 535.293636 93.853636 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.853402 +L 71.498927 93.853251 +L 76.231491 93.852722 +L 80.964055 93.851263 +L 85.696618 93.847289 +L 90.429182 93.836484 +L 95.161746 93.808477 +L 99.894309 93.741264 +L 104.626873 93.587759 +L 109.359437 93.392637 +L 114.092001 93.121113 +L 118.824564 92.925519 +L 123.557128 92.739708 +L 128.289692 92.42236 +L 133.022255 92.127093 +L 137.754819 91.702881 +L 142.487383 91.248661 +L 147.219946 90.77959 +L 151.95251 90.361199 +L 156.685074 89.973933 +L 161.417637 89.289893 +L 166.150201 88.658037 +L 170.882765 88.085327 +L 175.615329 87.376397 +L 180.347892 86.539807 +L 185.080456 85.830716 +L 189.81302 85.493205 +L 194.545583 84.985848 +L 199.278147 84.409297 +L 204.010711 83.713287 +L 208.743274 82.733095 +L 213.475838 82.071202 +L 218.208402 81.552143 +L 222.940966 80.571582 +L 227.673529 80.167161 +L 232.406093 79.894868 +L 237.138657 79.419834 +L 241.87122 78.787809 +L 246.603784 78.487416 +L 251.336348 77.762552 +L 256.068911 76.695433 +L 260.801475 75.90705 +L 265.534039 75.495442 +L 270.266602 75.03829 +L 274.999166 74.922494 +L 279.73173 74.809421 +L 284.464294 74.437038 +L 289.196857 74.202851 +L 293.929421 73.610778 +L 298.661985 72.397046 +L 303.394548 71.140648 +L 308.127112 70.469614 +L 312.859676 69.99554 +L 317.592239 70.552206 +L 322.324803 70.941175 +L 327.057367 70.544405 +L 331.78993 69.559416 +L 336.522494 68.74559 +L 341.255058 68.22678 +L 345.987622 67.543354 +L 350.720185 67.307183 +L 355.452749 67.5772 +L 360.185313 67.241065 +L 364.917876 66.666764 +L 369.65044 66.615038 +L 374.383004 65.462953 +L 379.115567 64.875711 +L 383.848131 63.458687 +L 388.580695 63.526391 +L 393.313258 63.926467 +L 398.045822 63.938087 +L 402.778386 63.807509 +L 407.51095 63.943088 +L 412.243513 63.786171 +L 416.976077 63.803737 +L 421.708641 63.173856 +L 426.441204 62.67333 +L 431.173768 61.865193 +L 435.906332 61.264851 +L 440.638895 60.904122 +L 445.371459 60.701404 +L 450.104023 60.452006 +L 454.836586 59.580572 +L 459.56915 59.42843 +L 464.301714 59.660193 +L 469.034278 58.864507 +L 473.766841 58.078353 +L 478.499405 57.838544 +L 483.231969 57.869118 +L 487.964532 57.542998 +L 492.697096 57.086423 +L 497.42966 56.482586 +L 502.162223 57.208132 +L 506.894787 57.006925 +L 511.627351 56.573767 +L 516.359914 56.870739 +L 521.092478 57.372617 +L 525.825042 56.963831 +L 530.557606 56.176526 +L 535.290169 56.885593 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.853636 +L 71.498961 93.853636 +L 76.231558 93.853636 +L 80.964156 93.853636 +L 85.696753 93.853636 +L 90.42935 93.853636 +L 95.161947 93.853636 +L 99.894545 93.853636 +L 104.627142 93.853636 +L 109.359739 93.853636 +L 114.092337 93.853636 +L 118.824934 93.853636 +L 123.557531 93.853636 +L 128.290128 93.853636 +L 133.022726 93.853636 +L 137.755323 93.853636 +L 142.48792 93.853636 +L 147.220518 93.853636 +L 151.953115 93.853636 +L 156.685712 93.853636 +L 161.41831 93.853636 +L 166.150907 93.853636 +L 170.883504 93.853636 +L 175.616101 93.853636 +L 180.348699 93.853636 +L 185.081296 93.853636 +L 189.813893 93.853636 +L 194.546491 93.853636 +L 199.279088 93.853636 +L 204.011685 93.853636 +L 208.744282 93.853636 +L 213.47688 93.853636 +L 218.209477 93.853636 +L 222.942074 93.853636 +L 227.674672 93.853636 +L 232.407269 93.853636 +L 237.139866 93.853636 +L 241.872464 93.853636 +L 246.605061 93.853636 +L 251.337658 93.853636 +L 256.070255 93.853636 +L 260.802853 93.853636 +L 265.53545 93.853636 +L 270.268047 93.853636 +L 275.000645 93.853636 +L 279.733242 93.853636 +L 284.465839 93.853636 +L 289.198436 93.853636 +L 293.931034 93.853636 +L 298.663631 93.853636 +L 303.396228 93.853636 +L 308.128826 93.853636 +L 312.861423 93.853636 +L 317.59402 93.853636 +L 322.326618 93.853636 +L 327.059215 93.853636 +L 331.791812 93.853636 +L 336.524409 93.853636 +L 341.257007 93.853636 +L 345.989604 93.853636 +L 350.722201 93.853636 +L 355.454799 93.853636 +L 360.187396 93.853636 +L 364.919993 93.853636 +L 369.65259 93.853636 +L 374.385188 93.853636 +L 379.117785 93.853636 +L 383.850382 93.853636 +L 388.58298 93.853636 +L 393.315577 93.853636 +L 398.048174 93.853636 +L 402.780772 93.853636 +L 407.513369 93.853636 +L 412.245966 93.853636 +L 416.978563 93.853636 +L 421.711161 93.853636 +L 426.443758 93.853636 +L 431.176355 93.853636 +L 435.908953 93.853636 +L 440.64155 93.853636 +L 445.374147 93.853636 +L 450.106745 93.853636 +L 454.839342 93.853636 +L 459.571939 93.853636 +L 464.304536 93.853636 +L 469.037134 93.853636 +L 473.769731 93.853636 +L 478.502328 93.853636 +L 483.234926 93.853636 +L 487.967523 93.853636 +L 492.70012 93.853636 +L 497.432717 93.853636 +L 502.165315 93.853636 +L 506.897912 93.853636 +L 511.630509 93.853636 +L 516.363107 93.853636 +L 521.095704 93.853636 +L 525.828301 93.853636 +L 530.560899 93.853636 +L 535.293496 93.853636 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#pb05c831d1b)" d="M 66.766364 93.851769 +L 71.498935 93.850566 +L 76.231507 93.846349 +L 80.964079 93.836207 +L 85.696651 93.819315 +L 90.429222 93.793478 +L 95.161794 93.740415 +L 99.894366 93.675916 +L 104.626938 93.582886 +L 109.359509 93.500066 +L 114.092081 93.467702 +L 118.824653 93.192886 +L 123.557224 92.753628 +L 128.289796 92.521274 +L 133.022368 92.637198 +L 137.75494 92.686645 +L 142.487511 92.490533 +L 147.220083 92.402992 +L 151.952655 92.382862 +L 156.685227 92.246853 +L 161.417798 92.087797 +L 166.15037 92.087388 +L 170.882942 91.889867 +L 175.615514 91.805425 +L 180.348085 92.044571 +L 185.080657 92.295282 +L 189.813229 92.404319 +L 194.545801 92.260025 +L 199.278372 92.316469 +L 204.010944 92.595487 +L 208.743516 92.826332 +L 213.476088 92.915704 +L 218.208659 92.977249 +L 222.941231 92.829682 +L 227.673803 92.515586 +L 232.406374 92.220194 +L 237.138946 91.948777 +L 241.871518 91.799885 +L 246.60409 91.719834 +L 251.336661 91.652346 +L 256.069233 91.692422 +L 260.801805 91.915306 +L 265.534377 91.967655 +L 270.266948 91.65797 +L 274.99952 91.509461 +L 279.732092 91.425126 +L 284.464664 91.287538 +L 289.197235 91.22939 +L 293.929807 91.105334 +L 298.662379 91.02544 +L 303.394951 91.16751 +L 308.127522 91.375936 +L 312.860094 91.477227 +L 317.592666 91.622439 +L 322.325238 91.909185 +L 327.057809 92.060645 +L 331.790381 92.145652 +L 336.522953 91.96165 +L 341.255524 91.691773 +L 345.988096 91.557814 +L 350.720668 91.407166 +L 355.45324 91.297746 +L 360.185811 91.136257 +L 364.918383 91.018229 +L 369.650955 90.848305 +L 374.383527 90.849705 +L 379.116098 90.938047 +L 383.84867 90.976474 +L 388.581242 91.047217 +L 393.313814 91.066878 +L 398.046385 91.247678 +L 402.778957 91.438118 +L 407.511529 91.354274 +L 412.244101 91.182575 +L 416.976672 90.874558 +L 421.709244 90.724943 +L 426.441816 90.686576 +L 431.174388 90.842818 +L 435.906959 91.14526 +L 440.639531 91.209634 +L 445.372103 91.160062 +L 450.104674 91.099782 +L 454.837246 90.858066 +L 459.569818 90.662144 +L 464.30239 90.592916 +L 469.034961 90.659745 +L 473.767533 90.66369 +L 478.500105 90.717854 +L 483.232677 90.914413 +L 487.965248 91.315295 +L 492.69782 91.727677 +L 497.430392 92.050687 +L 502.162964 92.249044 +L 506.895535 92.273706 +L 511.628107 92.272027 +L 516.360679 92.299401 +L 521.093251 92.314061 +L 525.825822 92.371789 +L 530.558394 92.434644 +L 535.290966 92.431824 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 43.34 96.94 +L 43.34 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 43.34 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 43.34 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 301.03, 23.04)" x="301.03" y="23.04">Enduro</text> + </g> + </g> + </g> + <defs> + <clipPath id="pb05c831d1b"> + <rect height="67.9" width="515.38" x="43.34" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 45.5 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 45.5 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 96.94 +L 68.828182 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 68.828182, 114.798281)" x="68.828182" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p3ff14ed077)" d="M 162.141086 96.94 +L 162.141086 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 162.141086, 114.798281)" x="162.141086" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p3ff14ed077)" d="M 255.453991 96.94 +L 255.453991 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 255.453991, 114.798281)" x="255.453991" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p3ff14ed077)" d="M 348.766896 96.94 +L 348.766896 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 348.766896, 114.798281)" x="348.766896" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p3ff14ed077)" d="M 442.0798 96.94 +L 442.0798 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 442.0798, 114.798281)" x="442.0798" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p3ff14ed077)" d="M 535.392705 96.94 +L 535.392705 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.392705, 114.798281)" x="535.392705" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p3ff14ed077)" d="M 45.5 93.212441 +L 558.72 93.212441 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36, 97.391581)" x="36" y="97.391581">−20</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p3ff14ed077)" d="M 45.5 63.238103 +L 558.72 63.238103 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36, 67.417244)" x="36" y="67.417244">0</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#p3ff14ed077)" d="M 45.5 33.263765 +L 558.72 33.263765 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36, 37.442906)" x="36" y="37.442906">20</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 68.828182 -50.465047 +L 68.828182 -50.401733 +L 73.540862 -50.462013 +L 78.253542 -50.616301 +L 82.966222 -51.113593 +L 87.678902 -52.343086 +L 92.391582 -54.304105 +L 97.104263 -56.665079 +L 101.816943 -59.851033 +L 106.529623 -63.875166 +L 111.242303 -69.831728 +L 115.954983 -76.427126 +L 120.667663 -80.996891 +L 125.380343 -85.403996 +L 130.093023 -87.575657 +L 134.805703 -89.941089 +L 139.518384 -93.420185 +L 144.231064 -95.734388 +L 148.943744 -97.167289 +L 153.656424 -98.513309 +L 158.369104 -99.415459 +L 163.081784 -99.993202 +L 167.794464 -101.172455 +L 172.507144 -102.346568 +L 177.219824 -103.446895 +L 181.932505 -104.336066 +L 186.645185 -104.79035 +L 191.357865 -104.873923 +L 196.070545 -104.673811 +L 200.783225 -104.996454 +L 205.495905 -105.477164 +L 210.208585 -106.110869 +L 214.921265 -106.696142 +L 219.633946 -107.250959 +L 224.346626 -107.474911 +L 229.059306 -107.62183 +L 233.771986 -107.857765 +L 238.484666 -107.966543 +L 243.197346 -108.308816 +L 247.910026 -108.588679 +L 252.622706 -109.006375 +L 257.335386 -109.232433 +L 262.048067 -109.507371 +L 266.760747 -109.66665 +L 271.473427 -109.440972 +L 276.186107 -109.190814 +L 280.898787 -109.354556 +L 285.611467 -109.622351 +L 290.324147 -109.699122 +L 295.036827 -109.575377 +L 299.749508 -109.842893 +L 304.462188 -110.159248 +L 309.174868 -110.265674 +L 313.887548 -110.349849 +L 318.600228 -110.531312 +L 323.312908 -110.643093 +L 328.025588 -110.710441 +L 332.738268 -110.823679 +L 337.450948 -110.947026 +L 342.163629 -110.956506 +L 346.876309 -110.850092 +L 351.588989 -110.894823 +L 356.301669 -110.930587 +L 361.014349 -110.892393 +L 365.727029 -111.045398 +L 370.439709 -111.077703 +L 375.152389 -110.99297 +L 379.865069 -111.042566 +L 384.57775 -111.079888 +L 389.29043 -111.053036 +L 394.00311 -110.953872 +L 398.71579 -110.907915 +L 403.42847 -111.002617 +L 408.14115 -110.984634 +L 412.85383 -110.868622 +L 417.56651 -110.816817 +L 422.279191 -110.889774 +L 426.991871 -110.916556 +L 431.704551 -110.890628 +L 436.417231 -110.976376 +L 441.129911 -111.076797 +L 445.842591 -111.109699 +L 450.555271 -111.134852 +L 455.267951 -111.239552 +L 459.980631 -111.307754 +L 464.693312 -111.289731 +L 469.405992 -111.302776 +L 474.118672 -111.32883 +L 478.831352 -111.525718 +L 483.544032 -111.592305 +L 488.256712 -111.551394 +L 492.969392 -111.411029 +L 497.682072 -111.379475 +L 502.394753 -111.452164 +L 507.107433 -111.47965 +L 511.820113 -111.560957 +L 516.532793 -111.619859 +L 521.245473 -111.614248 +L 525.958153 -111.504679 +L 530.670833 -111.591486 +L 535.383513 -111.608512 +L 535.383513 -111.823164 +L 535.383513 -111.823164 +L 530.670833 -111.816748 +L 525.958153 -111.794923 +L 521.245473 -111.832867 +L 516.532793 -111.852161 +L 511.820113 -111.863442 +L 507.107433 -111.861495 +L 502.394753 -111.854143 +L 497.682072 -111.829016 +L 492.969392 -111.849111 +L 488.256712 -111.873636 +L 483.544032 -111.858327 +L 478.831352 -111.838192 +L 474.118672 -111.81906 +L 469.405992 -111.810854 +L 464.693312 -111.782656 +L 459.980631 -111.761299 +L 455.267951 -111.667558 +L 450.555271 -111.593996 +L 445.842591 -111.560816 +L 441.129911 -111.527948 +L 436.417231 -111.484044 +L 431.704551 -111.428328 +L 426.991871 -111.441855 +L 422.279191 -111.445533 +L 417.56651 -111.385108 +L 412.85383 -111.426401 +L 408.14115 -111.483246 +L 403.42847 -111.478295 +L 398.71579 -111.452931 +L 394.00311 -111.464695 +L 389.29043 -111.516431 +L 384.57775 -111.562978 +L 379.865069 -111.565183 +L 375.152389 -111.533526 +L 370.439709 -111.499217 +L 365.727029 -111.463414 +L 361.014349 -111.384386 +L 356.301669 -111.41946 +L 351.588989 -111.402303 +L 346.876309 -111.372554 +L 342.163629 -111.41583 +L 337.450948 -111.418926 +L 332.738268 -111.347587 +L 328.025588 -111.240951 +L 323.312908 -111.146962 +L 318.600228 -111.032056 +L 313.887548 -110.966342 +L 309.174868 -110.90952 +L 304.462188 -110.897698 +L 299.749508 -110.839061 +L 295.036827 -110.664078 +L 290.324147 -110.630022 +L 285.611467 -110.544749 +L 280.898787 -110.437299 +L 276.186107 -110.399342 +L 271.473427 -110.435789 +L 266.760747 -110.46578 +L 262.048067 -110.35763 +L 257.335386 -110.184523 +L 252.622706 -110.125012 +L 247.910026 -109.952201 +L 243.197346 -109.811938 +L 238.484666 -109.616722 +L 233.771986 -109.435556 +L 229.059306 -109.26589 +L 224.346626 -109.197988 +L 219.633946 -109.035052 +L 214.921265 -108.710534 +L 210.208585 -108.359899 +L 205.495905 -107.879593 +L 200.783225 -107.439945 +L 196.070545 -107.079477 +L 191.357865 -107.167683 +L 186.645185 -107.055673 +L 181.932505 -106.71067 +L 177.219824 -106.122449 +L 172.507144 -105.4761 +L 167.794464 -104.883415 +L 163.081784 -104.015589 +L 158.369104 -103.645517 +L 153.656424 -103.063667 +L 148.943744 -102.179128 +L 144.231064 -101.368344 +L 139.518384 -99.579157 +L 134.805703 -96.491957 +L 130.093023 -93.679294 +L 125.380343 -90.163698 +L 120.667663 -84.612914 +L 115.954983 -78.569127 +L 111.242303 -72.164982 +L 106.529623 -67.247897 +L 101.816943 -62.588052 +L 97.104263 -58.33502 +L 92.391582 -55.242097 +L 87.678902 -52.904718 +L 82.966222 -51.405342 +L 78.253542 -50.769266 +L 73.540862 -50.527205 +L 68.828182 -50.465047 +z +" id="m6e177ba537" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m6e177ba537" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 68.828182 -50.929671 +L 68.828182 -50.857632 +L 73.540939 -51.165894 +L 78.253697 -51.753484 +L 82.966454 -52.578044 +L 87.679211 -53.905249 +L 92.391969 -56.180601 +L 97.104726 -60.19209 +L 101.817484 -67.682063 +L 106.530241 -80.393797 +L 111.242998 -95.529919 +L 115.955756 -104.766097 +L 120.668513 -108.254406 +L 125.381271 -109.413055 +L 130.094028 -109.939858 +L 134.806785 -110.164716 +L 139.519543 -110.262061 +L 144.2323 -110.454581 +L 148.945058 -110.539005 +L 153.657815 -110.660902 +L 158.370573 -110.702117 +L 163.08333 -110.766969 +L 167.796087 -110.757433 +L 172.508845 -110.723949 +L 177.221602 -110.752833 +L 181.93436 -110.778867 +L 186.647117 -110.921147 +L 191.359874 -111.015018 +L 196.072632 -110.993418 +L 200.785389 -111.025835 +L 205.498147 -111.019262 +L 210.210904 -110.951956 +L 214.923661 -111.053823 +L 219.636419 -111.0558 +L 224.349176 -111.036469 +L 229.061934 -111.065661 +L 233.774691 -111.09745 +L 238.487448 -111.087745 +L 243.200206 -111.047308 +L 247.912963 -111.009291 +L 252.625721 -111.056391 +L 257.338478 -111.043046 +L 262.051235 -111.003362 +L 266.763993 -110.912657 +L 271.47675 -110.842706 +L 276.189508 -110.704139 +L 280.902265 -110.53473 +L 285.615022 -110.879577 +L 290.32778 -111.005791 +L 295.040537 -111.062886 +L 299.753295 -111.103743 +L 304.466052 -111.128232 +L 309.17881 -111.067895 +L 313.891567 -111.083282 +L 318.604324 -111.102058 +L 323.317082 -111.07593 +L 328.029839 -111.0597 +L 332.742597 -111.108161 +L 337.455354 -111.064855 +L 342.168111 -111.021986 +L 346.880869 -110.9989 +L 351.593626 -111.01931 +L 356.306384 -111.04465 +L 361.019141 -111.076651 +L 365.731898 -111.09307 +L 370.444656 -111.051334 +L 375.157413 -111.02832 +L 379.870171 -110.983659 +L 384.582928 -111.058773 +L 389.295685 -111.070685 +L 394.008443 -111.088474 +L 398.7212 -111.075404 +L 403.433958 -111.091942 +L 408.146715 -111.043136 +L 412.859472 -111.111119 +L 417.57223 -111.199115 +L 422.284987 -111.218265 +L 426.997745 -111.275879 +L 431.710502 -111.306409 +L 436.423259 -111.236057 +L 441.136017 -111.21249 +L 445.848774 -111.246377 +L 450.561532 -111.202533 +L 455.274289 -111.161777 +L 459.987046 -111.101269 +L 464.699804 -111.136439 +L 469.412561 -111.218313 +L 474.125319 -111.234603 +L 478.838076 -111.248366 +L 483.550834 -111.24292 +L 488.263591 -111.238201 +L 492.976348 -111.256354 +L 497.689106 -111.222321 +L 502.401863 -111.137771 +L 507.114621 -111.233982 +L 511.827378 -111.261453 +L 516.540135 -111.268642 +L 521.252893 -111.229065 +L 525.96565 -111.247445 +L 530.678408 -111.258641 +L 535.391165 -111.230796 +L 535.391165 -111.335183 +L 535.391165 -111.335183 +L 530.678408 -111.333475 +L 525.96565 -111.306022 +L 521.252893 -111.339985 +L 516.540135 -111.362517 +L 511.827378 -111.35786 +L 507.114621 -111.328726 +L 502.401863 -111.287223 +L 497.689106 -111.323809 +L 492.976348 -111.327748 +L 488.263591 -111.281714 +L 483.550834 -111.276952 +L 478.838076 -111.305181 +L 474.125319 -111.31573 +L 469.412561 -111.290157 +L 464.699804 -111.221938 +L 459.987046 -111.207542 +L 455.274289 -111.263922 +L 450.561532 -111.273559 +L 445.848774 -111.361866 +L 441.136017 -111.339121 +L 436.423259 -111.345785 +L 431.710502 -111.39728 +L 426.997745 -111.359211 +L 422.284987 -111.305615 +L 417.57223 -111.310116 +L 412.859472 -111.276955 +L 408.146715 -111.240703 +L 403.433958 -111.255891 +L 398.7212 -111.240181 +L 394.008443 -111.236948 +L 389.295685 -111.194585 +L 384.582928 -111.186853 +L 379.870171 -111.176138 +L 375.157413 -111.17202 +L 370.444656 -111.160967 +L 365.731898 -111.203104 +L 361.019141 -111.168393 +L 356.306384 -111.161787 +L 351.593626 -111.177374 +L 346.880869 -111.1861 +L 342.168111 -111.148536 +L 337.455354 -111.185736 +L 332.742597 -111.199568 +L 328.029839 -111.147349 +L 323.317082 -111.1583 +L 318.604324 -111.158449 +L 313.891567 -111.132653 +L 309.17881 -111.146757 +L 304.466052 -111.202457 +L 299.753295 -111.189862 +L 295.040537 -111.135122 +L 290.32778 -111.11872 +L 285.615022 -111.11602 +L 280.902265 -111.077958 +L 276.189508 -111.074652 +L 271.47675 -111.04946 +L 266.763993 -111.055393 +L 262.051235 -111.080947 +L 257.338478 -111.118945 +L 252.625721 -111.146865 +L 247.912963 -111.083199 +L 243.200206 -111.10358 +L 238.487448 -111.147834 +L 233.774691 -111.156645 +L 229.061934 -111.159759 +L 224.349176 -111.142728 +L 219.636419 -111.197272 +L 214.923661 -111.194608 +L 210.210904 -111.136285 +L 205.498147 -111.125276 +L 200.785389 -111.081616 +L 196.072632 -111.062866 +L 191.359874 -111.076902 +L 186.647117 -111.034109 +L 181.93436 -110.963944 +L 177.221602 -110.977518 +L 172.508845 -110.990526 +L 167.796087 -110.986941 +L 163.08333 -110.968183 +L 158.370573 -110.913837 +L 153.657815 -110.889363 +L 148.945058 -110.76523 +L 144.2323 -110.656565 +L 139.519543 -110.561404 +L 134.806785 -110.467015 +L 130.094028 -110.24291 +L 125.381271 -109.700262 +L 120.668513 -108.482743 +L 115.955756 -105.165399 +L 111.242998 -96.551899 +L 106.530241 -82.354403 +L 101.817484 -69.140451 +L 97.104726 -60.98193 +L 92.391969 -56.614327 +L 87.679211 -54.127983 +L 82.966454 -52.737415 +L 78.253697 -51.896363 +L 73.540939 -51.237807 +L 68.828182 -50.929671 +z +" id="mae79c1ffcd" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#mae79c1ffcd" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 68.828182 -50.319107 +L 68.828182 -50.240759 +L 73.530528 -50.29465 +L 78.232874 -50.292505 +L 82.93522 -50.332347 +L 87.637566 -50.405784 +L 92.339912 -50.575833 +L 97.042258 -50.860453 +L 101.744603 -51.356646 +L 106.446949 -52.406755 +L 111.149295 -54.16232 +L 115.851641 -56.494566 +L 120.553987 -59.626742 +L 125.256333 -63.599848 +L 129.958679 -67.64599 +L 134.661025 -72.901543 +L 139.363371 -77.356903 +L 144.065717 -80.43568 +L 148.768063 -83.192732 +L 153.470409 -87.493745 +L 158.172755 -91.84102 +L 162.875101 -95.351304 +L 167.577447 -97.613593 +L 172.279793 -99.509325 +L 176.982139 -101.154808 +L 181.684485 -102.296938 +L 186.386831 -103.251453 +L 191.089176 -104.018874 +L 195.791522 -105.027157 +L 200.493868 -105.817188 +L 205.196214 -106.132681 +L 209.89856 -106.147821 +L 214.600906 -106.562696 +L 219.303252 -106.749478 +L 224.005598 -106.992252 +L 228.707944 -107.266998 +L 233.41029 -107.411684 +L 238.112636 -107.363487 +L 242.814982 -107.240201 +L 247.517328 -107.364221 +L 252.219674 -107.567591 +L 256.92202 -107.947188 +L 261.624366 -108.194768 +L 266.326712 -108.352219 +L 271.029058 -108.462657 +L 275.731404 -108.560677 +L 280.433749 -108.548972 +L 285.136095 -108.607943 +L 289.838441 -108.724694 +L 294.540787 -108.769473 +L 299.243133 -108.855025 +L 303.945479 -108.932229 +L 308.647825 -108.936209 +L 313.350171 -109.034155 +L 318.052517 -109.157007 +L 322.754863 -109.346563 +L 327.457209 -109.360569 +L 332.159555 -109.430848 +L 336.861901 -109.388726 +L 341.564247 -109.511856 +L 346.266593 -109.577977 +L 350.968939 -109.681194 +L 355.671285 -109.783956 +L 360.373631 -109.85558 +L 365.075977 -109.88595 +L 369.778322 -109.854009 +L 374.480668 -109.776223 +L 379.183014 -109.779578 +L 383.88536 -109.875802 +L 388.587706 -109.971796 +L 393.290052 -109.961126 +L 397.992398 -109.987813 +L 402.694744 -109.965544 +L 407.39709 -110.060373 +L 412.099436 -110.080094 +L 416.801782 -110.088032 +L 421.504128 -110.114189 +L 426.206474 -110.170156 +L 430.90882 -110.115896 +L 435.611166 -110.110091 +L 440.313512 -110.121641 +L 445.015858 -110.14886 +L 449.718204 -110.182919 +L 454.42055 -110.21258 +L 459.122895 -110.196491 +L 463.825241 -110.278263 +L 468.527587 -110.255822 +L 473.229933 -110.247505 +L 477.932279 -110.304209 +L 482.634625 -110.293382 +L 487.336971 -110.365964 +L 492.039317 -110.350072 +L 496.741663 -110.29396 +L 501.444009 -110.304603 +L 506.146355 -110.354527 +L 510.848701 -110.357102 +L 515.551047 -110.371935 +L 520.253393 -110.396935 +L 524.955739 -110.366917 +L 529.658085 -110.433513 +L 534.360431 -110.418585 +L 534.360431 -110.642425 +L 534.360431 -110.642425 +L 529.658085 -110.666504 +L 524.955739 -110.638058 +L 520.253393 -110.650141 +L 515.551047 -110.643695 +L 510.848701 -110.61796 +L 506.146355 -110.581216 +L 501.444009 -110.516092 +L 496.741663 -110.517818 +L 492.039317 -110.552971 +L 487.336971 -110.581062 +L 482.634625 -110.54461 +L 477.932279 -110.537659 +L 473.229933 -110.529426 +L 468.527587 -110.506227 +L 463.825241 -110.490715 +L 459.122895 -110.419369 +L 454.42055 -110.427999 +L 449.718204 -110.392016 +L 445.015858 -110.301193 +L 440.313512 -110.295853 +L 435.611166 -110.299882 +L 430.90882 -110.279121 +L 426.206474 -110.307645 +L 421.504128 -110.265141 +L 416.801782 -110.267846 +L 412.099436 -110.225947 +L 407.39709 -110.198195 +L 402.694744 -110.182807 +L 397.992398 -110.148266 +L 393.290052 -110.089522 +L 388.587706 -110.15152 +L 383.88536 -110.152336 +L 379.183014 -110.036995 +L 374.480668 -109.994439 +L 369.778322 -110.006094 +L 365.075977 -110.008754 +L 360.373631 -109.961618 +L 355.671285 -109.906841 +L 350.968939 -109.879108 +L 346.266593 -109.805795 +L 341.564247 -109.672575 +L 336.861901 -109.576091 +L 332.159555 -109.566948 +L 327.457209 -109.57498 +L 322.754863 -109.568807 +L 318.052517 -109.446463 +L 313.350171 -109.375688 +L 308.647825 -109.346182 +L 303.945479 -109.386268 +L 299.243133 -109.328413 +L 294.540787 -109.208855 +L 289.838441 -109.075205 +L 285.136095 -108.934578 +L 280.433749 -109.007494 +L 275.731404 -109.056401 +L 271.029058 -109.020524 +L 266.326712 -108.818134 +L 261.624366 -108.658742 +L 256.92202 -108.548356 +L 252.219674 -108.363509 +L 247.517328 -108.417776 +L 242.814982 -108.324625 +L 238.112636 -108.340609 +L 233.41029 -108.240403 +L 228.707944 -108.141034 +L 224.005598 -108.080658 +L 219.303252 -107.904328 +L 214.600906 -107.678601 +L 209.89856 -107.506898 +L 205.196214 -107.527997 +L 200.493868 -107.366129 +L 195.791522 -107.153728 +L 191.089176 -106.853048 +L 186.386831 -106.874552 +L 181.684485 -106.71795 +L 176.982139 -106.597745 +L 172.279793 -106.162946 +L 167.577447 -105.529705 +L 162.875101 -104.26976 +L 158.172755 -101.864822 +L 153.470409 -98.407139 +L 148.768063 -95.180484 +L 144.065717 -92.48608 +L 139.363371 -88.923565 +L 134.661025 -83.436502 +L 129.958679 -77.141392 +L 125.256333 -71.051378 +L 120.553987 -64.294119 +L 115.851641 -59.531605 +L 111.149295 -56.326697 +L 106.446949 -53.674522 +L 101.744603 -51.940238 +L 97.042258 -51.092952 +L 92.339912 -50.661619 +L 87.637566 -50.4429 +L 82.93522 -50.384871 +L 78.232874 -50.345717 +L 73.530528 -50.367315 +L 68.828182 -50.319107 +z +" id="m459097c414" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m459097c414" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 68.828182 -50.439167 +L 68.828182 -50.36476 +L 73.54081 -50.416751 +L 78.253438 -50.378004 +L 82.966067 -50.305107 +L 87.678695 -50.297686 +L 92.391323 -50.277324 +L 97.103951 -50.294924 +L 101.81658 -50.382508 +L 106.529208 -50.482138 +L 111.241836 -50.596305 +L 115.954465 -50.761593 +L 120.667093 -50.989249 +L 125.379721 -51.320416 +L 130.092349 -51.734327 +L 134.804978 -52.249142 +L 139.517606 -52.929592 +L 144.230234 -53.728878 +L 148.942863 -54.382577 +L 153.655491 -55.161787 +L 158.368119 -55.913032 +L 163.080747 -56.800353 +L 167.793376 -57.835567 +L 172.506004 -59.164579 +L 177.218632 -60.515627 +L 181.93126 -62.329747 +L 186.643889 -64.831785 +L 191.356517 -67.992787 +L 196.069145 -71.554047 +L 200.781774 -75.096162 +L 205.494402 -79.197731 +L 210.20703 -82.585833 +L 214.919658 -85.071665 +L 219.632287 -87.036053 +L 224.344915 -88.559036 +L 229.057543 -89.893362 +L 233.770171 -91.249146 +L 238.4828 -92.231488 +L 243.195428 -93.18753 +L 247.908056 -94.772959 +L 252.620685 -96.364533 +L 257.333313 -97.439594 +L 262.045941 -98.279301 +L 266.758569 -99.536401 +L 271.471198 -100.743861 +L 276.183826 -101.263869 +L 280.896454 -101.621201 +L 285.609083 -101.77098 +L 290.321711 -102.178553 +L 295.034339 -102.634162 +L 299.746967 -103.161669 +L 304.459596 -103.812223 +L 309.172224 -104.204479 +L 313.884852 -104.616655 +L 318.59748 -105.204586 +L 323.310109 -105.494904 +L 328.022737 -106.022336 +L 332.735365 -106.760227 +L 337.447994 -107.430582 +L 342.160622 -107.586412 +L 346.87325 -107.680798 +L 351.585878 -107.888064 +L 356.298507 -107.913383 +L 361.011135 -108.30182 +L 365.723763 -108.754625 +L 370.436391 -108.924797 +L 375.14902 -109.060961 +L 379.861648 -109.113368 +L 384.574276 -109.237701 +L 389.286905 -109.238556 +L 393.999533 -109.370275 +L 398.712161 -109.461403 +L 403.424789 -109.421435 +L 408.137418 -109.529728 +L 412.850046 -109.630792 +L 417.562674 -109.633526 +L 422.275303 -109.541821 +L 426.987931 -109.548208 +L 431.700559 -109.644695 +L 436.413187 -109.72147 +L 441.125816 -109.72221 +L 445.838444 -109.657384 +L 450.551072 -109.694191 +L 455.2637 -109.666369 +L 459.976329 -109.590274 +L 464.688957 -109.655357 +L 469.401585 -109.61468 +L 474.114214 -109.625838 +L 478.826842 -109.743677 +L 483.53947 -109.8331 +L 488.252098 -109.873255 +L 492.964727 -109.703683 +L 497.677355 -109.695803 +L 502.389983 -109.63553 +L 507.102611 -109.555915 +L 511.81524 -109.452469 +L 516.527868 -109.535066 +L 521.240496 -109.581665 +L 525.953125 -109.688756 +L 530.665753 -109.670917 +L 535.378381 -109.429228 +L 535.378381 -110.571896 +L 535.378381 -110.571896 +L 530.665753 -110.703138 +L 525.953125 -110.742495 +L 521.240496 -110.726844 +L 516.527868 -110.70901 +L 511.81524 -110.586404 +L 507.102611 -110.630368 +L 502.389983 -110.668096 +L 497.677355 -110.653915 +L 492.964727 -110.67996 +L 488.252098 -110.79899 +L 483.53947 -110.7571 +L 478.826842 -110.675455 +L 474.114214 -110.592247 +L 469.401585 -110.612723 +L 464.688957 -110.601738 +L 459.976329 -110.491136 +L 455.2637 -110.561526 +L 450.551072 -110.607089 +L 445.838444 -110.588764 +L 441.125816 -110.594142 +L 436.413187 -110.56316 +L 431.700559 -110.479434 +L 426.987931 -110.365097 +L 422.275303 -110.37388 +L 417.562674 -110.410499 +L 412.850046 -110.395138 +L 408.137418 -110.248602 +L 403.424789 -110.130242 +L 398.712161 -110.12364 +L 393.999533 -110.050505 +L 389.286905 -109.918883 +L 384.574276 -109.796784 +L 379.861648 -109.602765 +L 375.14902 -109.532246 +L 370.436391 -109.439105 +L 365.723763 -109.268381 +L 361.011135 -108.931647 +L 356.298507 -108.794725 +L 351.585878 -108.777597 +L 346.87325 -108.564939 +L 342.160622 -108.589739 +L 337.447994 -108.592038 +L 332.735365 -108.296549 +L 328.022737 -108.014008 +L 323.310109 -107.649705 +L 318.59748 -107.390054 +L 313.884852 -107.114864 +L 309.172224 -106.915584 +L 304.459596 -106.752236 +L 299.746967 -106.592895 +L 295.034339 -106.543563 +L 290.321711 -106.230607 +L 285.609083 -105.655505 +L 280.896454 -105.371611 +L 276.183826 -105.250698 +L 271.471198 -104.930105 +L 266.758569 -104.113727 +L 262.045941 -103.465375 +L 257.333313 -102.872912 +L 252.620685 -102.056252 +L 247.908056 -100.928513 +L 243.195428 -99.784455 +L 238.4828 -98.933381 +L 233.770171 -97.850181 +L 229.057543 -96.038319 +L 224.344915 -93.415109 +L 219.632287 -90.927243 +L 214.919658 -88.066711 +L 210.20703 -85.334091 +L 205.494402 -82.432134 +L 200.781774 -78.47695 +L 196.069145 -74.637389 +L 191.356517 -70.592997 +L 186.643889 -67.006241 +L 181.93126 -64.167851 +L 177.218632 -62.107252 +L 172.506004 -60.274984 +L 167.793376 -58.590113 +L 163.080747 -57.358588 +L 158.368119 -56.325116 +L 153.655491 -55.578248 +L 148.942863 -54.887614 +L 144.230234 -54.2244 +L 139.517606 -53.321356 +L 134.804978 -52.564719 +L 130.092349 -51.981898 +L 125.379721 -51.515832 +L 120.667093 -51.187729 +L 115.954465 -50.888991 +L 111.241836 -50.67664 +L 106.529208 -50.551249 +L 101.81658 -50.47709 +L 97.103951 -50.39327 +L 92.391323 -50.362085 +L 87.678695 -50.379669 +L 82.966067 -50.397187 +L 78.253438 -50.456055 +L 73.54081 -50.482983 +L 68.828182 -50.439167 +z +" id="m3f90d2f2ba" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#m3f90d2f2ba" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 68.828182 -50.431486 +L 68.828182 -50.280599 +L 73.540946 -50.330523 +L 78.25371 -50.498826 +L 82.966474 -51.066659 +L 87.679238 -52.322312 +L 92.392002 -53.688825 +L 97.104766 -55.365013 +L 101.81753 -58.040586 +L 106.530294 -61.708822 +L 111.243058 -66.504227 +L 115.955822 -72.35913 +L 120.668586 -80.211164 +L 125.38135 -86.796513 +L 130.094114 -91.942013 +L 134.806878 -94.305236 +L 139.519642 -96.757151 +L 144.232406 -99.388815 +L 148.94517 -102.289108 +L 153.657934 -103.447878 +L 158.370698 -104.343844 +L 163.083462 -105.08688 +L 167.796226 -105.580388 +L 172.50899 -105.407081 +L 177.221754 -106.252395 +L 181.934518 -106.457029 +L 186.647282 -105.824368 +L 191.360046 -106.228527 +L 196.07281 -107.06928 +L 200.785574 -107.861589 +L 205.498338 -108.245925 +L 210.211102 -108.441696 +L 214.923866 -108.693811 +L 219.63663 -108.849235 +L 224.349394 -108.805429 +L 229.062158 -108.875994 +L 233.774922 -108.812996 +L 238.487686 -108.788025 +L 243.20045 -108.329758 +L 247.913214 -108.59115 +L 252.625978 -109.169492 +L 257.338742 -109.4331 +L 262.051506 -109.321852 +L 266.76427 -109.149598 +L 271.477034 -109.202169 +L 276.189798 -109.221187 +L 280.902562 -109.362754 +L 285.615326 -109.573067 +L 290.32809 -110.032007 +L 295.040854 -110.016069 +L 299.753618 -109.83543 +L 304.466382 -109.684697 +L 309.179146 -109.657082 +L 313.89191 -109.467703 +L 318.604674 -108.973903 +L 323.317438 -108.518979 +L 328.030202 -108.809998 +L 332.742966 -109.459583 +L 337.45573 -109.51526 +L 342.168494 -109.723029 +L 346.881258 -109.711768 +L 351.594022 -109.347551 +L 356.306786 -109.563894 +L 361.01955 -109.572992 +L 365.732314 -109.665726 +L 370.445078 -109.189183 +L 375.157842 -108.498406 +L 379.870606 -108.918885 +L 384.58337 -108.831697 +L 389.296134 -108.864086 +L 394.008898 -109.460153 +L 398.721662 -109.774213 +L 403.434426 -109.857483 +L 408.14719 -109.851104 +L 412.859954 -109.892912 +L 417.572718 -109.526779 +L 422.285482 -108.797207 +L 426.998246 -108.769748 +L 431.71101 -108.915537 +L 436.423774 -109.131264 +L 441.136538 -109.736192 +L 445.849302 -109.926122 +L 450.562066 -110.105057 +L 455.27483 -110.138137 +L 459.987594 -109.868592 +L 464.700358 -109.984531 +L 469.413122 -109.960188 +L 474.125886 -109.907865 +L 478.83865 -110.069947 +L 483.551414 -110.318077 +L 488.264178 -110.293347 +L 492.976942 -110.328495 +L 497.689706 -110.337235 +L 502.40247 -110.393083 +L 507.115234 -110.521107 +L 511.827998 -110.670689 +L 516.540762 -110.731416 +L 521.253526 -110.692537 +L 525.96629 -110.740287 +L 530.679054 -110.660877 +L 535.391818 -110.74893 +L 535.391818 -111.029332 +L 535.391818 -111.029332 +L 530.679054 -110.942959 +L 525.96629 -111.000513 +L 521.253526 -111.016258 +L 516.540762 -111.049745 +L 511.827998 -111.002823 +L 507.115234 -110.874263 +L 502.40247 -110.798923 +L 497.689706 -110.799714 +L 492.976942 -110.798805 +L 488.264178 -110.711097 +L 483.551414 -110.716529 +L 478.83865 -110.692834 +L 474.125886 -110.610587 +L 469.413122 -110.622491 +L 464.700358 -110.571839 +L 459.987594 -110.423775 +L 455.27483 -110.613789 +L 450.562066 -110.644097 +L 445.849302 -110.543067 +L 441.136538 -110.508908 +L 436.423774 -110.608135 +L 431.71101 -110.559476 +L 426.998246 -110.337395 +L 422.285482 -110.293532 +L 417.572718 -110.441041 +L 412.859954 -110.532525 +L 408.14719 -110.661493 +L 403.434426 -110.722359 +L 398.721662 -110.574951 +L 394.008898 -110.482051 +L 389.296134 -110.346197 +L 384.58337 -110.392477 +L 379.870606 -110.440693 +L 375.157842 -110.45253 +L 370.445078 -110.51856 +L 365.732314 -110.439796 +L 361.01955 -110.257305 +L 356.306786 -110.122883 +L 351.594022 -110.099601 +L 346.881258 -110.25343 +L 342.168494 -110.301389 +L 337.45573 -110.303011 +L 332.742966 -110.348844 +L 328.030202 -110.2174 +L 323.317438 -110.162175 +L 318.604674 -110.072728 +L 313.89191 -110.079273 +L 309.179146 -110.120224 +L 304.466382 -110.231303 +L 299.753618 -110.323933 +L 295.040854 -110.416572 +L 290.32809 -110.563506 +L 285.615326 -110.466421 +L 280.902562 -110.282683 +L 276.189798 -110.092464 +L 271.477034 -109.951987 +L 266.76427 -109.905131 +L 262.051506 -110.128985 +L 257.338742 -110.245766 +L 252.625978 -110.134146 +L 247.913214 -109.777867 +L 243.20045 -109.618075 +L 238.487686 -109.775689 +L 233.774922 -109.853359 +L 229.062158 -109.799087 +L 224.349394 -109.837455 +L 219.63663 -109.713682 +L 214.923866 -109.431185 +L 210.211102 -109.328692 +L 205.498338 -109.149765 +L 200.785574 -109.013389 +L 196.07281 -108.663873 +L 191.360046 -108.373854 +L 186.647282 -108.235256 +L 181.934518 -108.432013 +L 177.221754 -108.366128 +L 172.50899 -108.293808 +L 167.796226 -108.183937 +L 163.083462 -107.785855 +L 158.370698 -107.228051 +L 153.657934 -106.593447 +L 148.94517 -106.303181 +L 144.232406 -104.862941 +L 139.519642 -103.335267 +L 134.806878 -101.860982 +L 130.094114 -99.519008 +L 125.38135 -94.255464 +L 120.668586 -87.135803 +L 115.955822 -78.743021 +L 111.243058 -72.10932 +L 106.530294 -66.927469 +L 101.81753 -63.246929 +L 97.104766 -60.010807 +L 92.392002 -56.961743 +L 87.679238 -54.093564 +L 82.966474 -51.864844 +L 78.25371 -50.818835 +L 73.540946 -50.490758 +L 68.828182 -50.431486 +z +" id="mb452d69f9a" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#mb452d69f9a" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 68.828182 -50.276454 +L 68.828182 -50.184191 +L 73.540817 -50.146364 +L 78.253452 -50.205132 +L 82.966086 -50.295364 +L 87.678721 -50.339922 +L 92.391356 -50.399609 +L 97.103991 -50.422671 +L 101.816626 -50.459734 +L 106.529261 -50.498964 +L 111.241896 -50.571282 +L 115.954531 -50.648271 +L 120.667165 -50.751859 +L 125.3798 -50.948584 +L 130.092435 -51.248775 +L 134.80507 -51.641052 +L 139.517705 -52.163045 +L 144.23034 -52.812008 +L 148.942975 -53.602892 +L 153.65561 -54.104761 +L 158.368244 -54.707015 +L 163.080879 -55.633828 +L 167.793514 -56.670813 +L 172.506149 -57.625193 +L 177.218784 -58.714996 +L 181.931419 -59.983365 +L 186.644054 -61.217418 +L 191.356689 -63.134577 +L 196.069323 -65.768384 +L 200.781958 -68.835297 +L 205.494593 -71.807903 +L 210.207228 -75.29006 +L 214.919863 -78.664691 +L 219.632498 -81.985822 +L 224.345133 -84.760717 +L 229.057768 -86.6893 +L 233.770402 -87.96825 +L 238.483037 -89.252947 +L 243.195672 -90.319385 +L 247.908307 -91.069178 +L 252.620942 -91.733465 +L 257.333577 -92.441334 +L 262.046212 -93.016633 +L 266.758847 -93.47524 +L 271.471481 -94.110782 +L 276.184116 -94.872501 +L 280.896751 -95.625308 +L 285.609386 -96.485741 +L 290.322021 -97.275066 +L 295.034656 -97.922424 +L 299.747291 -98.615661 +L 304.459926 -99.518839 +L 309.17256 -100.295631 +L 313.885195 -100.891805 +L 318.59783 -101.29192 +L 323.310465 -101.700255 +L 328.0231 -102.312629 +L 332.735735 -102.571855 +L 337.44837 -102.814454 +L 342.161004 -103.123057 +L 346.873639 -103.63145 +L 351.586274 -103.79379 +L 356.298909 -103.848066 +L 361.011544 -104.033619 +L 365.724179 -104.177577 +L 370.436814 -104.054787 +L 375.149449 -104.231776 +L 379.862083 -104.64453 +L 384.574718 -104.749486 +L 389.287353 -104.929115 +L 393.999988 -105.324304 +L 398.712623 -105.413818 +L 403.425258 -105.621246 +L 408.137893 -105.639076 +L 412.850528 -105.703059 +L 417.563162 -105.945321 +L 422.275797 -106.185788 +L 426.988432 -106.713601 +L 431.701067 -106.909839 +L 436.413702 -106.737154 +L 441.126337 -106.897305 +L 445.838972 -106.956364 +L 450.551607 -107.129951 +L 455.264241 -107.399417 +L 459.976876 -107.413783 +L 464.689511 -107.52975 +L 469.402146 -107.701921 +L 474.114781 -107.766199 +L 478.827416 -107.647241 +L 483.540051 -107.73365 +L 488.252686 -107.800276 +L 492.96532 -108.029077 +L 497.677955 -108.088256 +L 502.39059 -108.246511 +L 507.103225 -108.177128 +L 511.81586 -108.050965 +L 516.528495 -107.923213 +L 521.24113 -107.850457 +L 525.953765 -107.879523 +L 530.666399 -107.801202 +L 535.379034 -107.756713 +L 535.379034 -109.16368 +L 535.379034 -109.16368 +L 530.666399 -109.083298 +L 525.953765 -109.143526 +L 521.24113 -109.074372 +L 516.528495 -109.038969 +L 511.81586 -109.108211 +L 507.103225 -109.174118 +L 502.39059 -109.192273 +L 497.677955 -109.128821 +L 492.96532 -109.045254 +L 488.252686 -108.880929 +L 483.540051 -108.899404 +L 478.827416 -108.881093 +L 474.114781 -108.949395 +L 469.402146 -108.870353 +L 464.689511 -108.731336 +L 459.976876 -108.686554 +L 455.264241 -108.687739 +L 450.551607 -108.660148 +L 445.838972 -108.599235 +L 441.126337 -108.594898 +L 436.413702 -108.542331 +L 431.701067 -108.687472 +L 426.988432 -108.637949 +L 422.275797 -108.339043 +L 417.563162 -108.26315 +L 412.850528 -108.155237 +L 408.137893 -108.114329 +L 403.425258 -108.095177 +L 398.712623 -108.007957 +L 393.999988 -107.99659 +L 389.287353 -107.870394 +L 384.574718 -107.861989 +L 379.862083 -107.824346 +L 375.149449 -107.62344 +L 370.436814 -107.471204 +L 365.724179 -107.492032 +L 361.011544 -107.359227 +L 356.298909 -107.299686 +L 351.586274 -107.211139 +L 346.873639 -107.21927 +L 342.161004 -107.104154 +L 337.44837 -106.979429 +L 332.735735 -106.927954 +L 328.0231 -106.962006 +L 323.310465 -106.685493 +L 318.59783 -106.506354 +L 313.885195 -106.271657 +L 309.17256 -105.788625 +L 304.459926 -105.20164 +L 299.747291 -104.545206 +L 295.034656 -104.038707 +L 290.322021 -103.590578 +L 285.609386 -102.922038 +L 280.896751 -102.386286 +L 276.184116 -101.88583 +L 271.471481 -101.396813 +L 266.758847 -101.045938 +L 262.046212 -100.763486 +L 257.333577 -100.36882 +L 252.620942 -99.679715 +L 247.908307 -99.066275 +L 243.195672 -98.690743 +L 238.483037 -98.060516 +L 233.770402 -97.150154 +L 229.057768 -96.047664 +L 224.345133 -94.203855 +L 219.632498 -91.157613 +L 214.919863 -87.486606 +L 210.207228 -83.195339 +L 205.494593 -77.586872 +L 200.781958 -73.546693 +L 196.069323 -70.422234 +L 191.356689 -66.699325 +L 186.644054 -63.803696 +L 181.931419 -62.136429 +L 177.218784 -60.693815 +L 172.506149 -59.401737 +L 167.793514 -58.265082 +L 163.080879 -57.016887 +L 158.368244 -55.710314 +L 153.65561 -54.705029 +L 148.942975 -54.098254 +L 144.23034 -53.27228 +L 139.517705 -52.547443 +L 134.80507 -51.910749 +L 130.092435 -51.431606 +L 125.3798 -51.077489 +L 120.667165 -50.858245 +L 115.954531 -50.713586 +L 111.241896 -50.613663 +L 106.529261 -50.561619 +L 101.816626 -50.507537 +L 97.103991 -50.472261 +L 92.391356 -50.438465 +L 87.678721 -50.382549 +L 82.966086 -50.361495 +L 78.253452 -50.28548 +L 73.540817 -50.265681 +L 68.828182 -50.276454 +z +" id="mafeaf67453" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#mafeaf67453" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 68.828182 -51.249515 +L 68.828182 -51.049354 +L 73.540851 -51.35975 +L 78.25352 -52.005875 +L 82.96619 -52.950083 +L 87.678859 -53.829015 +L 92.391528 -54.553841 +L 97.104197 -55.043832 +L 101.816867 -55.326104 +L 106.529536 -55.820892 +L 111.242205 -56.37069 +L 115.954875 -57.094461 +L 120.667544 -57.763701 +L 125.380213 -58.574453 +L 130.092882 -59.522714 +L 134.805552 -60.375078 +L 139.518221 -61.080958 +L 144.23089 -62.838263 +L 148.94356 -64.311718 +L 153.656229 -65.671147 +L 158.368898 -66.569118 +L 163.081567 -67.679757 +L 167.794237 -69.309596 +L 172.506906 -69.946131 +L 177.219575 -71.681317 +L 181.932244 -73.144235 +L 186.644914 -74.515222 +L 191.357583 -76.077653 +L 196.070252 -77.055788 +L 200.782922 -77.895184 +L 205.495591 -78.605293 +L 210.20826 -79.066321 +L 214.920929 -79.151115 +L 219.633599 -79.401919 +L 224.346268 -79.442635 +L 229.058937 -80.100415 +L 233.771607 -80.229093 +L 238.484276 -81.07408 +L 243.196945 -81.467859 +L 247.909614 -82.362226 +L 252.622284 -82.586047 +L 257.334953 -82.782997 +L 262.047622 -82.707533 +L 266.760291 -82.48715 +L 271.472961 -82.248627 +L 276.18563 -83.151364 +L 280.898299 -82.905667 +L 285.610969 -83.260207 +L 290.323638 -84.054322 +L 295.036307 -85.152297 +L 299.748976 -85.901694 +L 304.461646 -86.844187 +L 309.174315 -87.174624 +L 313.886984 -87.686505 +L 318.599653 -87.125961 +L 323.312323 -86.762405 +L 328.024992 -87.057272 +L 332.737661 -88.199349 +L 337.450331 -89.27181 +L 342.163 -89.036946 +L 346.875669 -87.465168 +L 351.588338 -87.139832 +L 356.301008 -88.885325 +L 361.013677 -89.523163 +L 365.726346 -88.935871 +L 370.439016 -89.500456 +L 375.151685 -90.583071 +L 379.864354 -90.704069 +L 384.577023 -91.743648 +L 389.289693 -92.4267 +L 394.002362 -93.730606 +L 398.715031 -95.448962 +L 403.4277 -97.001993 +L 408.14037 -97.475349 +L 412.853039 -97.999735 +L 417.565708 -97.304238 +L 422.278378 -98.029952 +L 426.991047 -98.234116 +L 431.703716 -97.689042 +L 436.416385 -97.743027 +L 441.129055 -97.574211 +L 445.841724 -97.156519 +L 450.554393 -97.715422 +L 455.267063 -97.767338 +L 459.979732 -98.312355 +L 464.692401 -98.855926 +L 469.40507 -99.738621 +L 474.11774 -100.845558 +L 478.830409 -101.723788 +L 483.543078 -102.089253 +L 488.255747 -102.354267 +L 492.968417 -101.796185 +L 497.681086 -101.536516 +L 502.393755 -101.641918 +L 507.106425 -101.343598 +L 511.819094 -101.338098 +L 516.531763 -101.424894 +L 521.244432 -101.691077 +L 525.957102 -101.783251 +L 530.669771 -102.10522 +L 535.38244 -102.04512 +L 535.38244 -107.40655 +L 535.38244 -107.40655 +L 530.669771 -107.41622 +L 525.957102 -107.174195 +L 521.244432 -107.028446 +L 516.531763 -106.482846 +L 511.819094 -106.025903 +L 507.106425 -105.782632 +L 502.393755 -106.031376 +L 497.681086 -106.151481 +L 492.968417 -106.325168 +L 488.255747 -106.763622 +L 483.543078 -106.572824 +L 478.830409 -106.494174 +L 474.11774 -105.943594 +L 469.40507 -105.008632 +L 464.692401 -104.271146 +L 459.979732 -103.980427 +L 455.267063 -103.795441 +L 450.554393 -103.801153 +L 445.841724 -103.234377 +L 441.129055 -103.452403 +L 436.416385 -103.356803 +L 431.703716 -103.203199 +L 426.991047 -103.645484 +L 422.278378 -103.868704 +L 417.565708 -103.825594 +L 412.853039 -104.478182 +L 408.14037 -104.268405 +L 403.4277 -103.817754 +L 398.715031 -102.933885 +L 394.002362 -102.167711 +L 389.289693 -101.358394 +L 384.577023 -100.738502 +L 379.864354 -99.850364 +L 375.151685 -99.596975 +L 370.439016 -99.015177 +L 365.726346 -98.762827 +L 361.013677 -99.119819 +L 356.301008 -98.803691 +L 351.588338 -97.723577 +L 346.875669 -97.441818 +L 342.163 -98.031052 +L 337.450331 -98.219035 +L 332.737661 -97.458828 +L 328.024992 -96.681073 +L 323.312323 -96.295815 +L 318.599653 -96.599215 +L 313.886984 -96.627486 +L 309.174315 -96.282455 +L 304.461646 -96.077519 +L 299.748976 -95.580242 +L 295.036307 -95.017104 +L 290.323638 -94.289993 +L 285.610969 -93.747776 +L 280.898299 -93.778495 +L 276.18563 -94.377743 +L 271.472961 -93.764937 +L 266.760291 -93.570413 +L 262.047622 -93.516443 +L 257.334953 -93.191208 +L 252.622284 -92.46657 +L 247.909614 -92.157722 +L 243.196945 -91.639285 +L 238.484276 -91.362287 +L 233.771607 -89.995463 +L 229.058937 -89.374017 +L 224.346268 -88.796656 +L 219.633599 -88.535067 +L 214.920929 -88.126864 +L 210.20826 -88.084861 +L 205.495591 -87.888913 +L 200.782922 -87.588698 +L 196.070252 -87.023074 +L 191.357583 -86.061575 +L 186.644914 -84.504679 +L 181.932244 -83.213406 +L 177.219575 -82.101944 +L 172.506906 -80.412046 +L 167.794237 -79.716382 +L 163.081567 -78.126831 +L 158.368898 -76.762328 +L 153.656229 -75.380443 +L 148.94356 -73.409329 +L 144.23089 -71.286196 +L 139.518221 -69.035651 +L 134.805552 -67.863063 +L 130.092882 -66.524765 +L 125.380213 -65.507885 +L 120.667544 -64.542664 +L 115.954875 -62.962647 +L 111.242205 -61.459536 +L 106.529536 -60.361517 +L 101.816867 -59.263617 +L 97.104197 -58.070798 +L 92.391528 -56.803634 +L 87.678859 -55.184028 +L 82.96619 -53.651384 +L 78.25352 -52.441366 +L 73.540851 -51.615485 +L 68.828182 -51.249515 +z +" id="m5d8ea7a226" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p3ff14ed077)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#m5d8ea7a226" y="144"/> + </g> + </g> + <g id="line2d_10"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 93.56661 +L 73.540862 93.505391 +L 78.253542 93.307217 +L 82.966222 92.740532 +L 87.678902 91.376098 +L 92.391582 89.226899 +L 97.104263 86.49995 +L 101.816943 82.780457 +L 106.529623 78.438469 +L 111.242303 73.001645 +L 115.954983 66.501874 +L 120.667663 61.195097 +L 125.380343 56.216153 +L 130.093023 53.372524 +L 134.805703 50.783477 +L 139.518384 47.500329 +L 144.231064 45.448634 +L 148.943744 44.326792 +L 153.656424 43.211512 +L 158.369104 42.469512 +L 163.081784 41.995604 +L 167.794464 40.972065 +L 172.507144 40.088666 +L 177.219824 39.215328 +L 181.932505 38.476632 +L 186.645185 38.076988 +L 191.357865 37.979197 +L 196.070545 38.123356 +L 200.783225 37.781801 +L 205.495905 37.321621 +L 210.208585 36.764616 +L 214.921265 36.296662 +L 219.633946 35.856994 +L 224.346626 35.66355 +L 229.059306 35.55614 +L 233.771986 35.35334 +L 238.484666 35.208367 +L 243.197346 34.939623 +L 247.910026 34.72956 +L 252.622706 34.434307 +L 257.335386 34.291522 +L 262.048067 34.067499 +L 266.760747 33.933785 +L 271.473427 34.061619 +L 276.186107 34.204922 +L 280.898787 34.104073 +L 285.611467 33.91645 +L 290.324147 33.835428 +L 295.036827 33.880273 +L 299.749508 33.659023 +L 304.462188 33.471527 +L 309.174868 33.412403 +L 313.887548 33.341904 +L 318.600228 33.218316 +L 323.312908 33.104973 +L 328.025588 33.024304 +L 332.738268 32.914367 +L 337.450948 32.817024 +L 342.163629 32.813832 +L 346.876309 32.888677 +L 351.588989 32.851437 +L 356.301669 32.824977 +L 361.014349 32.86161 +L 365.727029 32.745594 +L 370.439709 32.71154 +L 375.152389 32.736752 +L 379.865069 32.696125 +L 384.57775 32.678567 +L 389.29043 32.715266 +L 394.00311 32.790716 +L 398.71579 32.819577 +L 403.42847 32.759544 +L 408.14115 32.76606 +L 412.85383 32.852489 +L 417.56651 32.899038 +L 422.279191 32.832346 +L 426.991871 32.820795 +L 431.704551 32.840522 +L 436.417231 32.76979 +L 441.129911 32.697628 +L 445.842591 32.664742 +L 450.555271 32.635576 +L 455.267951 32.546445 +L 459.980631 32.465473 +L 464.693312 32.463807 +L 469.405992 32.443185 +L 474.118672 32.426055 +L 478.831352 32.318045 +L 483.544032 32.274684 +L 488.256712 32.287485 +L 492.969392 32.36993 +L 497.682072 32.395755 +L 502.394753 32.346846 +L 507.107433 32.329428 +L 511.820113 32.2878 +L 516.532793 32.26399 +L 521.245473 32.276442 +L 525.958153 32.350199 +L 530.670833 32.295883 +L 535.383513 32.284162 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 93.106348 +L 73.540939 92.798149 +L 78.253697 92.175077 +L 82.966454 91.34227 +L 87.679211 89.983384 +L 92.391969 87.602536 +L 97.104726 83.41299 +L 101.817484 75.588743 +L 106.530241 62.6259 +L 111.242998 47.959091 +L 115.955756 39.034252 +L 120.668513 35.631426 +L 125.381271 34.443342 +L 130.094028 33.908616 +L 134.806785 33.684135 +L 139.519543 33.588268 +L 144.2323 33.444427 +L 148.945058 33.347882 +L 153.657815 33.224868 +L 158.370573 33.192023 +L 163.08333 33.132424 +L 167.796087 33.127813 +L 172.508845 33.142762 +L 177.221602 33.134825 +L 181.93436 33.128595 +L 186.647117 33.022372 +L 191.359874 32.95404 +L 196.072632 32.971858 +L 200.785389 32.946274 +L 205.498147 32.927731 +L 210.210904 32.955879 +L 214.923661 32.875784 +L 219.636419 32.873464 +L 224.349176 32.910402 +L 229.061934 32.88729 +L 233.774691 32.872952 +L 238.487448 32.88221 +L 243.200206 32.924556 +L 247.912963 32.953755 +L 252.625721 32.898372 +L 257.338478 32.919004 +L 262.051235 32.957846 +L 266.763993 33.015975 +L 271.47675 33.053917 +L 276.189508 33.110605 +L 280.902265 33.193656 +L 285.615022 33.002202 +L 290.32778 32.937744 +L 295.040537 32.900996 +L 299.753295 32.853198 +L 304.466052 32.834656 +L 309.17881 32.892674 +L 313.891567 32.892032 +L 318.604324 32.869746 +L 323.317082 32.882885 +L 328.029839 32.896476 +L 332.742597 32.846136 +L 337.455354 32.874705 +L 342.168111 32.914739 +L 346.880869 32.9075 +L 351.593626 32.901658 +L 356.306384 32.896782 +L 361.019141 32.877478 +L 365.731898 32.851913 +L 370.444656 32.89385 +L 375.157413 32.89983 +L 379.870171 32.920102 +L 384.582928 32.877187 +L 389.295685 32.867365 +L 394.008443 32.837289 +L 398.7212 32.842208 +L 403.433958 32.826084 +L 408.146715 32.85808 +L 412.859472 32.805963 +L 417.57223 32.745384 +L 422.284987 32.73806 +L 426.997745 32.682455 +L 431.710502 32.648155 +L 436.423259 32.709079 +L 441.136017 32.724194 +L 445.848774 32.695879 +L 450.561532 32.761954 +L 455.274289 32.78715 +L 459.987046 32.845594 +L 464.699804 32.820811 +L 469.412561 32.745765 +L 474.125319 32.724833 +L 478.838076 32.723227 +L 483.550834 32.740064 +L 488.263591 32.740042 +L 492.976348 32.707949 +L 497.689106 32.726935 +L 502.401863 32.787503 +L 507.114621 32.718646 +L 511.827378 32.690343 +L 516.540135 32.68442 +L 521.252893 32.715475 +L 525.96565 32.723266 +L 530.678408 32.703942 +L 535.391165 32.717011 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 93.720067 +L 73.530528 93.669017 +L 78.232874 93.680889 +L 82.93522 93.641391 +L 87.637566 93.575658 +L 92.339912 93.381274 +L 97.042258 93.023298 +L 101.744603 92.351558 +L 106.446949 90.959362 +L 111.149295 88.755492 +L 115.851641 85.986915 +L 120.553987 82.03957 +L 125.256333 76.674387 +L 129.958679 71.606309 +L 134.661025 65.830977 +L 139.363371 60.859766 +L 144.065717 57.53912 +L 148.768063 54.813392 +L 153.470409 51.049558 +L 158.172755 47.147079 +L 162.875101 44.189468 +L 167.577447 42.428351 +L 172.279793 41.163865 +L 176.982139 40.123723 +L 181.684485 39.492556 +L 186.386831 38.936998 +L 191.089176 38.564039 +L 195.791522 37.909558 +L 200.493868 37.408341 +L 205.196214 37.169661 +L 209.89856 37.172641 +L 214.600906 36.879351 +L 219.303252 36.673097 +L 224.005598 36.463545 +L 228.707944 36.295984 +L 233.41029 36.173956 +L 238.112636 36.147952 +L 242.814982 36.217587 +L 247.517328 36.109002 +L 252.219674 36.03445 +L 256.92202 35.752228 +L 261.624366 35.573245 +L 266.326712 35.414824 +L 271.029058 35.258409 +L 275.731404 35.191461 +L 280.433749 35.221767 +L 285.136095 35.228739 +L 289.838441 35.10005 +L 294.540787 35.010836 +L 299.243133 34.908281 +L 303.945479 34.840752 +L 308.647825 34.858804 +L 313.350171 34.795078 +L 318.052517 34.698265 +L 322.754863 34.542315 +L 327.457209 34.532225 +L 332.159555 34.501102 +L 336.861901 34.517591 +L 341.564247 34.407784 +L 346.266593 34.308114 +L 350.968939 34.219849 +L 355.671285 34.154602 +L 360.373631 34.091401 +L 365.075977 34.052648 +L 369.778322 34.069949 +L 374.480668 34.114669 +L 379.183014 34.091713 +L 383.88536 33.985931 +L 388.587706 33.938342 +L 393.290052 33.974676 +L 397.992398 33.93196 +L 402.694744 33.925825 +L 407.39709 33.870716 +L 412.099436 33.846979 +L 416.801782 33.822061 +L 421.504128 33.810335 +L 426.206474 33.7611 +L 430.90882 33.802492 +L 435.611166 33.795014 +L 440.313512 33.791253 +L 445.015858 33.774973 +L 449.718204 33.712533 +L 454.42055 33.679711 +L 459.122895 33.69207 +L 463.825241 33.615511 +L 468.527587 33.618975 +L 473.229933 33.611535 +L 477.932279 33.579066 +L 482.634625 33.581004 +L 487.336971 33.526487 +L 492.039317 33.548478 +L 496.741663 33.594111 +L 501.444009 33.589653 +L 506.146355 33.532129 +L 510.848701 33.512469 +L 515.551047 33.492185 +L 520.253393 33.476462 +L 524.955739 33.497512 +L 529.658085 33.449991 +L 534.360431 33.469495 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 93.598036 +L 73.54081 93.550133 +L 78.253438 93.582971 +L 82.966067 93.648853 +L 87.678695 93.661322 +L 92.391323 93.680296 +L 97.103951 93.655903 +L 101.81658 93.570201 +L 106.529208 93.483306 +L 111.241836 93.363528 +L 115.954465 93.174708 +L 120.667093 92.911511 +L 125.379721 92.581876 +L 130.092349 92.141887 +L 134.804978 91.593069 +L 139.517606 90.874526 +L 144.230234 90.023361 +L 148.942863 89.364904 +L 153.655491 88.629983 +L 158.368119 87.880926 +L 163.080747 86.92053 +L 167.793376 85.78716 +L 172.506004 84.280219 +L 177.218632 82.68856 +L 181.93126 80.751201 +L 186.643889 78.080987 +L 191.356517 74.707108 +L 196.069145 70.904282 +L 200.781774 67.213444 +L 205.494402 63.185067 +L 210.20703 60.040038 +L 214.919658 57.430812 +L 219.632287 55.018352 +L 224.344915 53.012928 +L 229.057543 51.03416 +L 233.770171 49.450336 +L 238.4828 48.417565 +L 243.195428 47.514008 +L 247.908056 46.149264 +L 252.620685 44.789608 +L 257.333313 43.843747 +L 262.045941 43.127662 +L 266.758569 42.174936 +L 271.471198 41.163017 +L 276.183826 40.742716 +L 280.896454 40.503594 +L 285.609083 40.286758 +L 290.321711 39.79542 +L 295.034339 39.411137 +L 299.746967 39.122718 +L 304.459596 38.71777 +L 309.172224 38.439969 +L 313.884852 38.134241 +L 318.59748 37.70268 +L 323.310109 37.427696 +L 328.022737 36.981828 +L 332.735365 36.471612 +L 337.447994 35.98869 +L 342.160622 35.911924 +L 346.87325 35.877131 +L 351.585878 35.66717 +L 356.298507 35.645946 +L 361.011135 35.383267 +L 365.723763 34.988497 +L 370.436391 34.818049 +L 375.14902 34.703396 +L 379.861648 34.641934 +L 384.574276 34.482757 +L 389.286905 34.421281 +L 393.999533 34.28961 +L 398.712161 34.207479 +L 403.424789 34.224161 +L 408.137418 34.110835 +L 412.850046 33.987035 +L 417.562674 33.977988 +L 422.275303 34.042149 +L 426.987931 34.043348 +L 431.700559 33.937935 +L 436.413187 33.857685 +L 441.125816 33.841824 +L 445.838444 33.876926 +L 450.551072 33.84936 +L 455.2637 33.886053 +L 459.976329 33.959295 +L 464.688957 33.871452 +L 469.401585 33.886298 +L 474.114214 33.890957 +L 478.826842 33.790434 +L 483.53947 33.7049 +L 488.252098 33.663877 +L 492.964727 33.808179 +L 497.677355 33.825141 +L 502.389983 33.848187 +L 507.102611 33.906859 +L 511.81524 33.980564 +L 516.527868 33.877962 +L 521.240496 33.845745 +L 525.953125 33.784375 +L 530.665753 33.812972 +L 535.378381 33.999438 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 93.643958 +L 73.540946 93.58936 +L 78.25371 93.341169 +L 82.966474 92.534249 +L 87.679238 90.792062 +L 92.392002 88.674716 +L 97.104766 86.31209 +L 101.81753 83.356243 +L 106.530294 79.681854 +L 111.243058 74.693226 +L 115.955822 68.448924 +L 120.668586 60.326516 +L 125.38135 53.474011 +L 130.094114 48.269489 +L 134.806878 45.916891 +L 139.519642 43.953791 +L 144.232406 41.874122 +L 148.94517 39.703856 +L 153.657934 38.979338 +L 158.370698 38.214052 +L 163.083462 37.563633 +L 167.796226 37.117838 +L 172.50899 37.149556 +L 177.221754 36.690739 +L 181.934518 36.555479 +L 186.647282 36.970188 +L 191.360046 36.69881 +L 196.07281 36.133423 +L 200.785574 35.562511 +L 205.498338 35.302155 +L 210.211102 35.114806 +L 214.923866 34.937502 +L 219.63663 34.718542 +L 224.349394 34.678558 +L 229.062158 34.66246 +L 233.774922 34.666822 +L 238.487686 34.718143 +L 243.20045 35.026084 +L 247.913214 34.815492 +L 252.625978 34.348181 +L 257.338742 34.160567 +L 262.051506 34.274581 +L 266.76427 34.472635 +L 271.477034 34.422922 +L 276.189798 34.343174 +L 280.902562 34.177282 +L 285.615326 33.980256 +L 290.32809 33.702244 +L 295.040854 33.78368 +L 299.753618 33.920319 +L 304.466382 34.042 +L 309.179146 34.111347 +L 313.89191 34.226512 +L 318.604674 34.476684 +L 323.317438 34.659423 +L 328.030202 34.486301 +L 332.742966 34.095786 +L 337.45573 34.090865 +L 342.168494 33.987791 +L 346.881258 34.017401 +L 351.594022 34.276424 +L 356.306786 34.156611 +L 361.01955 34.084852 +L 365.732314 33.947239 +L 370.445078 34.146128 +L 375.157842 34.524532 +L 379.870606 34.320211 +L 384.58337 34.387913 +L 389.296134 34.394858 +L 394.008898 34.028898 +L 398.721662 33.825418 +L 403.434426 33.710079 +L 408.14719 33.743701 +L 412.859954 33.787281 +L 417.572718 34.01609 +L 422.285482 34.454631 +L 426.998246 34.446429 +L 431.71101 34.262493 +L 436.423774 34.130301 +L 441.136538 33.87745 +L 445.849302 33.765405 +L 450.562066 33.625423 +L 455.27483 33.624037 +L 459.987594 33.853817 +L 464.700358 33.721815 +L 469.413122 33.708661 +L 474.125886 33.740774 +L 478.83865 33.618609 +L 483.551414 33.482697 +L 488.264178 33.497778 +L 492.976942 33.43635 +L 497.689706 33.431525 +L 502.40247 33.403997 +L 507.115234 33.302315 +L 511.827998 33.163244 +L 516.540762 33.109419 +L 521.253526 33.145602 +L 525.96629 33.1296 +L 530.679054 33.198082 +L 535.391818 33.110869 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 93.769678 +L 73.540817 93.793978 +L 78.253452 93.754694 +L 82.966086 93.67157 +L 87.678721 93.638765 +L 92.391356 93.580963 +L 97.103991 93.552534 +L 101.816626 93.516365 +L 106.529261 93.469709 +L 111.241896 93.407527 +L 115.954531 93.319072 +L 120.667165 93.194948 +L 125.3798 92.986963 +L 130.092435 92.659809 +L 134.80507 92.224099 +L 139.517705 91.644756 +L 144.23034 90.957856 +L 148.942975 90.149427 +L 153.65561 89.595105 +L 158.368244 88.791335 +L 163.080879 87.674642 +L 167.793514 86.532053 +L 172.506149 85.486535 +L 177.218784 84.295594 +L 181.931419 82.940103 +L 186.644054 81.489443 +L 191.356689 79.083049 +L 196.069323 75.904691 +L 200.781958 72.809005 +L 205.494593 69.302613 +L 210.207228 64.757301 +L 214.919863 60.924352 +L 219.632498 57.428283 +L 224.345133 54.517714 +L 229.057768 52.631518 +L 233.770402 51.440798 +L 238.483037 50.343269 +L 243.195672 49.494936 +L 247.908307 48.932273 +L 252.620942 48.29341 +L 257.333577 47.594923 +L 262.046212 47.10994 +L 266.758847 46.739411 +L 271.471481 46.246202 +L 276.184116 45.620834 +L 280.896751 44.994203 +L 285.609386 44.296111 +L 290.322021 43.567178 +L 295.034656 43.019434 +L 299.747291 42.419566 +L 304.459926 41.639761 +L 309.17256 40.957872 +L 313.885195 40.418269 +L 318.59783 40.100863 +L 323.310465 39.807126 +L 328.0231 39.362682 +L 332.735735 39.250095 +L 337.44837 39.103059 +L 342.161004 38.886394 +L 346.873639 38.57464 +L 351.586274 38.497536 +L 356.298909 38.426124 +L 361.011544 38.303577 +L 365.724179 38.165195 +L 370.436814 38.237004 +L 375.149449 38.072392 +L 379.862083 37.765562 +L 384.574718 37.694263 +L 389.287353 37.600246 +L 393.999988 37.339553 +L 398.712623 37.289113 +L 403.425258 37.141789 +L 408.137893 37.123297 +L 412.850528 37.070852 +L 417.563162 36.895764 +L 422.275797 36.737584 +L 426.988432 36.324225 +L 431.701067 36.201345 +L 436.413702 36.360258 +L 441.126337 36.253899 +L 445.838972 36.2222 +L 450.551607 36.104951 +L 455.264241 35.956422 +L 459.976876 35.949832 +L 464.689511 35.869457 +L 469.402146 35.713863 +L 474.114781 35.642203 +L 478.827416 35.735833 +L 483.540051 35.683473 +L 488.252686 35.659398 +L 492.96532 35.462835 +L 497.677955 35.391461 +L 502.39059 35.280608 +L 507.103225 35.324377 +L 511.81586 35.420412 +L 516.528495 35.518909 +L 521.24113 35.537586 +L 525.953765 35.488475 +L 530.666399 35.55775 +L 535.379034 35.539803 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_16"> + <path clip-path="url(#p3ff14ed077)" d="M 68.828182 92.850566 +L 73.540851 92.512382 +L 78.25352 91.77638 +L 82.96619 90.699266 +L 87.678859 89.493478 +L 92.391528 88.321262 +L 97.104197 87.442685 +L 101.816867 86.70514 +L 106.529536 85.908796 +L 111.242205 85.084887 +L 115.954875 83.971446 +L 120.667544 82.846817 +L 125.380213 81.958831 +L 130.092882 80.976261 +L 134.805552 79.880929 +L 139.518221 78.941695 +L 144.23089 76.93777 +L 148.94356 75.139477 +L 153.656229 73.474205 +L 158.368898 72.334277 +L 163.081567 71.096706 +L 167.794237 69.487011 +L 172.506906 68.820912 +L 177.219575 67.108369 +L 181.932244 65.82118 +L 186.644914 64.49005 +L 191.357583 62.930386 +L 196.070252 61.960569 +L 200.782922 61.258059 +L 205.495591 60.752897 +L 210.20826 60.424409 +L 214.920929 60.361011 +L 219.633599 60.031507 +L 224.346268 59.880354 +L 229.058937 59.262784 +L 233.771607 58.887722 +L 238.484276 57.781816 +L 243.196945 57.446428 +L 247.909614 56.740026 +L 252.622284 56.473692 +L 257.334953 56.012898 +L 262.047622 55.888012 +L 266.760291 55.971218 +L 271.472961 55.993218 +L 276.18563 55.235447 +L 280.898299 55.657919 +L 285.610969 55.496008 +L 290.323638 54.827843 +L 295.036307 53.9153 +L 299.748976 53.259032 +L 304.461646 52.539147 +L 309.174315 52.271461 +L 313.886984 51.843004 +L 318.599653 52.137412 +L 323.312323 52.47089 +L 328.024992 52.130828 +L 332.737661 51.170912 +L 337.450331 50.254578 +L 342.163 50.466001 +L 346.875669 51.546507 +L 351.588338 51.568296 +L 356.301008 50.155492 +L 361.013677 49.678509 +L 365.726346 50.150651 +L 370.439016 49.742184 +L 375.151685 48.909977 +L 379.864354 48.722784 +L 384.577023 47.758925 +L 389.289693 47.107453 +L 394.002362 46.050842 +L 398.715031 44.808576 +L 403.4277 43.590126 +L 408.14037 43.128123 +L 412.853039 42.761042 +L 417.565708 43.435084 +L 422.278378 43.050672 +L 426.991047 43.0602 +L 431.703716 43.55388 +L 436.416385 43.450085 +L 441.129055 43.486693 +L 445.841724 43.804552 +L 450.554393 43.241713 +L 455.267063 43.218611 +L 459.979732 42.853609 +L 464.692401 42.436464 +L 469.40507 41.626374 +L 474.11774 40.605424 +L 478.830409 39.891019 +L 483.543078 39.668962 +L 488.255747 39.441056 +L 492.968417 39.939323 +L 497.681086 40.156002 +L 502.393755 40.163353 +L 507.106425 40.436885 +L 511.819094 40.317999 +L 516.531763 40.04613 +L 521.244432 39.640239 +L 525.957102 39.521277 +L 530.669771 39.23928 +L 535.38244 39.274165 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 45.5 96.94 +L 45.5 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 45.5 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 45.5 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_11"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 302.11, 23.04)" x="302.11" y="23.04">Pong</text> + </g> + </g> + </g> + <defs> + <clipPath id="p3ff14ed077"> + <rect height="67.9" width="513.22" x="45.5" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 57.11 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 57.11 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 96.94 +L 79.910455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 79.910455, 114.798281)" x="79.910455" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p4f418f2e2b)" d="M 171.112273 96.94 +L 171.112273 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 171.112273, 114.798281)" x="171.112273" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p4f418f2e2b)" d="M 262.314091 96.94 +L 262.314091 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 262.314091, 114.798281)" x="262.314091" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p4f418f2e2b)" d="M 353.515909 96.94 +L 353.515909 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 353.515909, 114.798281)" x="353.515909" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p4f418f2e2b)" d="M 444.717727 96.94 +L 444.717727 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 444.717727, 114.798281)" x="444.717727" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p4f418f2e2b)" d="M 535.919545 96.94 +L 535.919545 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.919545, 114.798281)" x="535.919545" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p4f418f2e2b)" d="M 57.11 94.497975 +L 558.72 94.497975 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 47.61, 98.677115)" x="47.61" y="98.677115">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p4f418f2e2b)" d="M 57.11 58.150907 +L 558.72 58.150907 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 47.61, 62.330048)" x="47.61" y="62.330048">10000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 79.910455 -50.647372 +L 79.910455 -50.613735 +L 84.516396 -50.73521 +L 89.122337 -50.909846 +L 93.728278 -51.097943 +L 98.334219 -51.282933 +L 102.94016 -51.4547 +L 107.546101 -51.646716 +L 112.152042 -51.86394 +L 116.757983 -52.122142 +L 121.363924 -52.412391 +L 125.969865 -52.80882 +L 130.575806 -53.399463 +L 135.181747 -54.227567 +L 139.787688 -55.453793 +L 144.393629 -56.920137 +L 148.99957 -58.298991 +L 153.605511 -59.543761 +L 158.211452 -60.264662 +L 162.817393 -60.654568 +L 167.423334 -61.396927 +L 172.029275 -62.326704 +L 176.635216 -63.072037 +L 181.241157 -63.638042 +L 185.847098 -64.050618 +L 190.453039 -64.673598 +L 195.05898 -65.205332 +L 199.664921 -66.071366 +L 204.270862 -67.079677 +L 208.876803 -68.519188 +L 213.482744 -69.702127 +L 218.088685 -71.216107 +L 222.694626 -73.504806 +L 227.300567 -74.853825 +L 231.906508 -75.336139 +L 236.512449 -75.38985 +L 241.11839 -75.901562 +L 245.724331 -76.229911 +L 250.330272 -77.081764 +L 254.936213 -79.160241 +L 259.542154 -80.845767 +L 264.148095 -82.088859 +L 268.754036 -82.657606 +L 273.359977 -83.965627 +L 277.965918 -85.495081 +L 282.571859 -87.433554 +L 287.1778 -88.671538 +L 291.783741 -89.040165 +L 296.389682 -89.85601 +L 300.995623 -90.021878 +L 305.601564 -90.438368 +L 310.207505 -90.880311 +L 314.813446 -91.229833 +L 319.419387 -91.33984 +L 324.025328 -91.427829 +L 328.631269 -92.201572 +L 333.23721 -92.762704 +L 337.843151 -92.595123 +L 342.449092 -92.510405 +L 347.055033 -93.100586 +L 351.660974 -93.586823 +L 356.266915 -94.239729 +L 360.872856 -94.629146 +L 365.478797 -95.355859 +L 370.084738 -95.512369 +L 374.690679 -95.250173 +L 379.29662 -95.460901 +L 383.902561 -95.593871 +L 388.508502 -95.885201 +L 393.114443 -96.237686 +L 397.720384 -96.444453 +L 402.326325 -96.751266 +L 406.932266 -97.450092 +L 411.538207 -97.817099 +L 416.144148 -98.12437 +L 420.750089 -98.446306 +L 425.35603 -98.524072 +L 429.961971 -98.765583 +L 434.567912 -98.712502 +L 439.173853 -98.618221 +L 443.779794 -99.177942 +L 448.385735 -99.211401 +L 452.991676 -99.466501 +L 457.597617 -99.444514 +L 462.203558 -99.873969 +L 466.809499 -100.121968 +L 471.41544 -99.841608 +L 476.021381 -100.45721 +L 480.627323 -100.705121 +L 485.233264 -100.943144 +L 489.839205 -101.223726 +L 494.445146 -101.366643 +L 499.051087 -101.312994 +L 503.657028 -101.736387 +L 508.262969 -101.923919 +L 512.86891 -101.996184 +L 517.474851 -102.279315 +L 522.080792 -102.255761 +L 526.686733 -102.345669 +L 531.292674 -102.215143 +L 535.898615 -102.430824 +L 535.898615 -104.017138 +L 535.898615 -104.017138 +L 531.292674 -103.879096 +L 526.686733 -104.324089 +L 522.080792 -104.375742 +L 517.474851 -104.275839 +L 512.86891 -103.865069 +L 508.262969 -103.571397 +L 503.657028 -103.151128 +L 499.051087 -102.721893 +L 494.445146 -102.900502 +L 489.839205 -102.561179 +L 485.233264 -102.136949 +L 480.627323 -102.080311 +L 476.021381 -101.872252 +L 471.41544 -101.469494 +L 466.809499 -101.604156 +L 462.203558 -101.267182 +L 457.597617 -101.147914 +L 452.991676 -101.378672 +L 448.385735 -101.017219 +L 443.779794 -100.482883 +L 439.173853 -99.815758 +L 434.567912 -100.004726 +L 429.961971 -100.211973 +L 425.35603 -99.934387 +L 420.750089 -99.637071 +L 416.144148 -99.573452 +L 411.538207 -99.476137 +L 406.932266 -98.933645 +L 402.326325 -98.220905 +L 397.720384 -97.812968 +L 393.114443 -97.963096 +L 388.508502 -97.754367 +L 383.902561 -97.419824 +L 379.29662 -96.736278 +L 374.690679 -96.500219 +L 370.084738 -97.265528 +L 365.478797 -97.140169 +L 360.872856 -96.292493 +L 356.266915 -95.916498 +L 351.660974 -95.396015 +L 347.055033 -95.132505 +L 342.449092 -94.836242 +L 337.843151 -95.036007 +L 333.23721 -94.986169 +L 328.631269 -94.295317 +L 324.025328 -93.518677 +L 319.419387 -93.480815 +L 314.813446 -93.65722 +L 310.207505 -93.791446 +L 305.601564 -93.530641 +L 300.995623 -92.685712 +L 296.389682 -92.33704 +L 291.783741 -91.966073 +L 287.1778 -91.227626 +L 282.571859 -90.44265 +L 277.965918 -88.912667 +L 273.359977 -87.66557 +L 268.754036 -86.683071 +L 264.148095 -86.316166 +L 259.542154 -85.514233 +L 254.936213 -84.08533 +L 250.330272 -82.202489 +L 245.724331 -81.150313 +L 241.11839 -80.493041 +L 236.512449 -79.605702 +L 231.906508 -79.415817 +L 227.300567 -78.841082 +L 222.694626 -77.065215 +L 218.088685 -74.381672 +L 213.482744 -72.60719 +L 208.876803 -71.286541 +L 204.270862 -69.339818 +L 199.664921 -67.800577 +L 195.05898 -66.380056 +L 190.453039 -65.471274 +L 185.847098 -64.994277 +L 181.241157 -64.649438 +L 176.635216 -64.044025 +L 172.029275 -63.294073 +L 167.423334 -62.379719 +L 162.817393 -61.49507 +L 158.211452 -60.964273 +L 153.605511 -60.261236 +L 148.99957 -59.058979 +L 144.393629 -57.609873 +L 139.787688 -56.139006 +L 135.181747 -54.932437 +L 130.575806 -54.012161 +L 125.969865 -53.329436 +L 121.363924 -52.762893 +L 116.757983 -52.339978 +L 112.152042 -52.029228 +L 107.546101 -51.768415 +L 102.94016 -51.57124 +L 98.334219 -51.404011 +L 93.728278 -51.2023 +L 89.122337 -50.98157 +L 84.516396 -50.775524 +L 79.910455 -50.647372 +z +" id="m37bd756198" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m37bd756198" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 79.910455 -50.190523 +L 79.910455 -50.186251 +L 84.516607 -50.233392 +L 89.122759 -50.312759 +L 93.728912 -50.400279 +L 98.335064 -50.511256 +L 102.941217 -50.665379 +L 107.547369 -50.860905 +L 112.153522 -51.076955 +L 116.759674 -51.334383 +L 121.365826 -51.696529 +L 125.971979 -52.216114 +L 130.578131 -52.603091 +L 135.184284 -52.938454 +L 139.790436 -53.224637 +L 144.396589 -53.413944 +L 149.002741 -53.514037 +L 153.608893 -53.5374 +L 158.215046 -53.788365 +L 162.821198 -53.954875 +L 167.427351 -54.056295 +L 172.033503 -54.102979 +L 176.639656 -54.159673 +L 181.245808 -54.340644 +L 185.851961 -54.721936 +L 190.458113 -55.138863 +L 195.064265 -55.477549 +L 199.670418 -55.719311 +L 204.27657 -56.07214 +L 208.882723 -56.425161 +L 213.488875 -56.995232 +L 218.095028 -57.556354 +L 222.70118 -57.972651 +L 227.307332 -58.238364 +L 231.913485 -58.842683 +L 236.519637 -59.168725 +L 241.12579 -59.382217 +L 245.731942 -59.168077 +L 250.338095 -59.423622 +L 254.944247 -60.00015 +L 259.550399 -60.3995 +L 264.156552 -60.398485 +L 268.762704 -60.304961 +L 273.368857 -60.530245 +L 277.975009 -60.818479 +L 282.581162 -61.261556 +L 287.187314 -61.670776 +L 291.793466 -61.853508 +L 296.399619 -61.953947 +L 301.005771 -61.950892 +L 305.611924 -62.11971 +L 310.218076 -62.298103 +L 314.824229 -62.573331 +L 319.430381 -62.818033 +L 324.036534 -63.1537 +L 328.642686 -63.180482 +L 333.248838 -63.390832 +L 337.854991 -63.675826 +L 342.461143 -63.956842 +L 347.067296 -64.12287 +L 351.673448 -64.219096 +L 356.279601 -64.082115 +L 360.885753 -64.133154 +L 365.491905 -64.628854 +L 370.098058 -64.919739 +L 374.70421 -65.220037 +L 379.310363 -65.730884 +L 383.916515 -65.798155 +L 388.522668 -65.84414 +L 393.12882 -66.211414 +L 397.734972 -66.374553 +L 402.341125 -67.022001 +L 406.947277 -67.045559 +L 411.55343 -67.173341 +L 416.159582 -67.624789 +L 420.765735 -68.005691 +L 425.371887 -68.874372 +L 429.978039 -69.673224 +L 434.584192 -69.656696 +L 439.190344 -70.170036 +L 443.796497 -70.570526 +L 448.402649 -71.295998 +L 453.008802 -71.643544 +L 457.614954 -72.283601 +L 462.221107 -72.862138 +L 466.827259 -73.109411 +L 471.433411 -73.019685 +L 476.039564 -72.793364 +L 480.645716 -72.55672 +L 485.251869 -72.567039 +L 489.858021 -72.801406 +L 494.464174 -72.789611 +L 499.070326 -73.392246 +L 503.676478 -73.118696 +L 508.282631 -73.404413 +L 512.888783 -73.332656 +L 517.494936 -72.90784 +L 522.101088 -72.422861 +L 526.707241 -72.5491 +L 531.313393 -72.928549 +L 535.919545 -73.521853 +L 535.919545 -79.061826 +L 535.919545 -79.061826 +L 531.313393 -78.138418 +L 526.707241 -77.488504 +L 522.101088 -77.130941 +L 517.494936 -77.730534 +L 512.888783 -77.950137 +L 508.282631 -78.062799 +L 503.676478 -77.845179 +L 499.070326 -78.372245 +L 494.464174 -77.804805 +L 489.858021 -77.692348 +L 485.251869 -77.26915 +L 480.645716 -77.098825 +L 476.039564 -77.18381 +L 471.433411 -77.286063 +L 466.827259 -77.564462 +L 462.221107 -77.519917 +L 457.614954 -76.356912 +L 453.008802 -75.385045 +L 448.402649 -74.99891 +L 443.796497 -74.087169 +L 439.190344 -74.333992 +L 434.584192 -74.209186 +L 429.978039 -74.400696 +L 425.371887 -73.016155 +L 420.765735 -71.675929 +L 416.159582 -71.187075 +L 411.55343 -70.837867 +L 406.947277 -70.917539 +L 402.341125 -71.12865 +L 397.734972 -69.473397 +L 393.12882 -69.130313 +L 388.522668 -68.791679 +L 383.916515 -68.563212 +L 379.310363 -68.235975 +L 374.70421 -67.513754 +L 370.098058 -67.284551 +L 365.491905 -66.625213 +L 360.885753 -65.803409 +L 356.279601 -65.728086 +L 351.673448 -66.324686 +L 347.067296 -66.302993 +L 342.461143 -65.97832 +L 337.854991 -65.332652 +L 333.248838 -64.67896 +L 328.642686 -64.415198 +L 324.036534 -64.446662 +L 319.430381 -64.143115 +L 314.824229 -63.765616 +L 310.218076 -63.427831 +L 305.611924 -63.190632 +L 301.005771 -63.316428 +L 296.399619 -63.409618 +L 291.793466 -63.312741 +L 287.187314 -62.952165 +L 282.581162 -62.583258 +L 277.975009 -62.188122 +L 273.368857 -62.062313 +L 268.762704 -61.798563 +L 264.156552 -61.708719 +L 259.550399 -61.670114 +L 254.944247 -61.515421 +L 250.338095 -61.168119 +L 245.731942 -60.865872 +L 241.12579 -60.899953 +L 236.519637 -60.582751 +L 231.913485 -60.410316 +L 227.307332 -60.060264 +L 222.70118 -59.770747 +L 218.095028 -59.134908 +L 213.488875 -58.468535 +L 208.882723 -57.853045 +L 204.27657 -57.224581 +L 199.670418 -56.514244 +L 195.064265 -56.249904 +L 190.458113 -55.876013 +L 185.851961 -55.412873 +L 181.245808 -55.029952 +L 176.639656 -55.065316 +L 172.033503 -55.193096 +L 167.427351 -55.225861 +L 162.821198 -54.904242 +L 158.215046 -54.621976 +L 153.608893 -54.127759 +L 149.002741 -53.880618 +L 144.396589 -53.695642 +L 139.790436 -53.523515 +L 135.184284 -53.190198 +L 130.578131 -52.805971 +L 125.971979 -52.343365 +L 121.365826 -51.807761 +L 116.759674 -51.400898 +L 112.153522 -51.157889 +L 107.547369 -50.931772 +L 102.941217 -50.715475 +L 98.335064 -50.549785 +L 93.728912 -50.416759 +L 89.122759 -50.323558 +L 84.516607 -50.242536 +L 79.910455 -50.190523 +z +" id="mdc290b9674" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#mdc290b9674" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 79.910455 -50.291057 +L 79.910455 -50.266919 +L 84.516444 -50.366064 +L 89.122433 -50.457896 +L 93.728423 -50.527316 +L 98.334412 -50.576407 +L 102.940401 -50.612199 +L 107.546391 -50.650719 +L 112.15238 -50.7026 +L 116.75837 -50.776555 +L 121.364359 -50.868028 +L 125.970348 -50.984382 +L 130.576338 -51.094531 +L 135.182327 -51.230525 +L 139.788316 -51.407641 +L 144.394306 -51.608434 +L 149.000295 -51.824028 +L 153.606285 -52.097304 +L 158.212274 -52.471402 +L 162.818263 -52.82661 +L 167.424253 -53.230602 +L 172.030242 -53.736281 +L 176.636231 -54.378015 +L 181.242221 -55.032925 +L 185.84821 -55.865033 +L 190.4542 -56.408721 +L 195.060189 -57.173185 +L 199.666178 -58.294971 +L 204.272168 -59.285874 +L 208.878157 -60.086375 +L 213.484146 -60.839775 +L 218.090136 -61.619184 +L 222.696125 -62.160874 +L 227.302115 -62.630954 +L 231.908104 -63.039442 +L 236.514093 -63.305505 +L 241.120083 -63.648919 +L 245.726072 -63.992621 +L 250.332061 -64.215066 +L 254.938051 -64.329174 +L 259.54404 -64.445226 +L 264.15003 -64.591962 +L 268.756019 -64.713364 +L 273.362008 -64.838259 +L 277.967998 -64.845959 +L 282.573987 -64.890247 +L 287.179976 -65.028901 +L 291.785966 -65.157801 +L 296.391955 -65.321325 +L 300.997945 -65.387263 +L 305.603934 -65.564078 +L 310.209923 -65.909171 +L 314.815913 -66.361493 +L 319.421902 -66.990534 +L 324.027891 -68.106834 +L 328.633881 -69.76306 +L 333.23987 -71.261116 +L 337.84586 -72.517671 +L 342.451849 -73.465479 +L 347.057838 -74.656328 +L 351.663828 -75.770073 +L 356.269817 -77.076065 +L 360.875806 -78.216822 +L 365.481796 -79.497026 +L 370.087785 -80.877771 +L 374.693775 -82.636528 +L 379.299764 -84.163936 +L 383.905753 -85.624465 +L 388.511743 -86.864509 +L 393.117732 -87.418545 +L 397.723721 -88.058087 +L 402.329711 -89.046085 +L 406.9357 -90.100267 +L 411.54169 -90.880068 +L 416.147679 -92.23008 +L 420.753668 -94.079328 +L 425.359658 -95.104285 +L 429.965647 -95.785937 +L 434.571636 -96.575676 +L 439.177626 -97.35237 +L 443.783615 -97.686239 +L 448.389605 -97.572223 +L 452.995594 -98.181876 +L 457.601583 -98.994844 +L 462.207573 -99.333588 +L 466.813562 -99.794629 +L 471.419551 -100.136912 +L 476.025541 -100.220337 +L 480.63153 -100.553046 +L 485.23752 -100.735259 +L 489.843509 -100.92319 +L 494.449498 -101.196359 +L 499.055488 -101.423314 +L 503.661477 -101.499808 +L 508.267466 -101.586767 +L 512.873456 -101.50327 +L 517.479445 -101.665798 +L 522.085435 -102.003551 +L 526.691424 -102.644869 +L 531.297413 -102.197551 +L 535.903403 -101.980303 +L 535.903403 -104.035459 +L 535.903403 -104.035459 +L 531.297413 -104.127272 +L 526.691424 -104.427036 +L 522.085435 -103.959205 +L 517.479445 -103.851205 +L 512.873456 -103.769783 +L 508.267466 -103.842411 +L 503.661477 -103.641654 +L 499.055488 -103.385544 +L 494.449498 -103.175185 +L 489.843509 -102.804805 +L 485.23752 -102.763725 +L 480.63153 -102.573445 +L 476.025541 -102.393572 +L 471.419551 -102.411382 +L 466.813562 -102.333118 +L 462.207573 -102.109028 +L 457.601583 -101.80191 +L 452.995594 -101.178186 +L 448.389605 -101.01475 +L 443.783615 -101.023375 +L 439.177626 -100.909799 +L 434.571636 -100.540301 +L 429.965647 -100.503529 +L 425.359658 -100.216911 +L 420.753668 -99.583187 +L 416.147679 -98.137896 +L 411.54169 -97.166342 +L 406.9357 -96.594479 +L 402.329711 -95.630538 +L 397.723721 -94.857763 +L 393.117732 -94.099019 +L 388.511743 -93.700294 +L 383.905753 -92.917465 +L 379.299764 -91.830618 +L 374.693775 -90.571697 +L 370.087785 -89.007777 +L 365.481796 -87.459319 +L 360.875806 -86.33092 +L 356.269817 -85.237104 +L 351.663828 -84.143822 +L 347.057838 -82.54264 +L 342.451849 -80.642691 +L 337.84586 -79.087588 +L 333.23987 -77.094671 +L 328.633881 -74.744404 +L 324.027891 -72.163137 +L 319.421902 -70.075475 +L 314.815913 -68.786253 +L 310.209923 -67.727792 +L 305.603934 -66.809275 +L 300.997945 -66.493539 +L 296.391955 -66.456116 +L 291.785966 -66.289146 +L 287.179976 -66.013017 +L 282.573987 -65.605509 +L 277.967998 -65.480595 +L 273.362008 -65.478226 +L 268.756019 -65.388598 +L 264.15003 -65.272325 +L 259.54404 -65.136408 +L 254.938051 -64.961676 +L 250.332061 -64.826346 +L 245.726072 -64.604637 +L 241.120083 -64.274388 +L 236.514093 -63.989635 +L 231.908104 -63.699223 +L 227.302115 -63.218957 +L 222.696125 -62.60162 +L 218.090136 -62.087037 +L 213.484146 -61.413561 +L 208.878157 -60.746611 +L 204.272168 -59.922724 +L 199.666178 -58.998805 +L 195.060189 -57.924312 +L 190.4542 -57.1873 +L 185.84821 -56.664778 +L 181.242221 -55.835507 +L 176.636231 -55.049541 +L 172.030242 -54.424082 +L 167.424253 -53.815408 +L 162.818263 -53.344816 +L 158.212274 -52.873718 +L 153.606285 -52.443382 +L 149.000295 -52.09668 +L 144.394306 -51.796874 +L 139.788316 -51.530735 +L 135.182327 -51.329581 +L 130.576338 -51.177821 +L 125.970348 -51.0437 +L 121.364359 -50.912542 +L 116.75837 -50.806922 +L 112.15238 -50.724213 +L 107.546391 -50.669597 +L 102.940401 -50.624446 +L 98.334412 -50.588193 +L 93.728423 -50.54034 +L 89.122433 -50.476061 +L 84.516444 -50.385212 +L 79.910455 -50.291057 +z +" id="m1079e5f104" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m1079e5f104" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 79.910455 -50.17609 +L 79.910455 -50.156883 +L 84.516522 -50.212363 +L 89.12259 -50.324193 +L 93.728658 -50.439538 +L 98.334725 -50.555748 +L 102.940793 -50.661502 +L 107.546861 -50.788011 +L 112.152928 -50.93266 +L 116.758996 -51.068 +L 121.365064 -51.191625 +L 125.971131 -51.346645 +L 130.577199 -51.536807 +L 135.183267 -51.764513 +L 139.789334 -52.073911 +L 144.395402 -52.384341 +L 149.00147 -52.631001 +L 153.607537 -52.877914 +L 158.213605 -53.152681 +L 162.819673 -53.423222 +L 167.42574 -54.034126 +L 172.031808 -54.830306 +L 176.637876 -55.692459 +L 181.243944 -57.006002 +L 185.850011 -58.500397 +L 190.456079 -60.192515 +L 195.062147 -61.825213 +L 199.668214 -63.009705 +L 204.274282 -63.837693 +L 208.88035 -64.682405 +L 213.486417 -65.435545 +L 218.092485 -66.273006 +L 222.698553 -67.357012 +L 227.30462 -68.674014 +L 231.910688 -70.317872 +L 236.516756 -72.5042 +L 241.122823 -74.856737 +L 245.728891 -77.206683 +L 250.334959 -79.738386 +L 254.941026 -82.084213 +L 259.547094 -84.106134 +L 264.153162 -86.445462 +L 268.759229 -88.788704 +L 273.365297 -90.881192 +L 277.971365 -93.380708 +L 282.577432 -94.87596 +L 287.1835 -96.678246 +L 291.789568 -97.999812 +L 296.395636 -99.038801 +L 301.001703 -99.63822 +L 305.607771 -99.91401 +L 310.213839 -99.713358 +L 314.819906 -99.620106 +L 319.425974 -99.045336 +L 324.032042 -99.25714 +L 328.638109 -100.115052 +L 333.244177 -100.429909 +L 337.850245 -100.908535 +L 342.456312 -101.54652 +L 347.06238 -101.589127 +L 351.668448 -101.87089 +L 356.274515 -102.38626 +L 360.880583 -103.172363 +L 365.486651 -103.333374 +L 370.092718 -103.456835 +L 374.698786 -103.110044 +L 379.304854 -103.628294 +L 383.910921 -104.046375 +L 388.516989 -103.916943 +L 393.123057 -104.355066 +L 397.729124 -103.731957 +L 402.335192 -103.42081 +L 406.94126 -103.244142 +L 411.547328 -103.227246 +L 416.153395 -102.961741 +L 420.759463 -102.570082 +L 425.365531 -102.675364 +L 429.971598 -103.250874 +L 434.577666 -104.092949 +L 439.183734 -104.403937 +L 443.789801 -104.354467 +L 448.395869 -104.465029 +L 453.001937 -104.192344 +L 457.608004 -104.141106 +L 462.214072 -104.513565 +L 466.82014 -105.151665 +L 471.426207 -105.73938 +L 476.032275 -106.08483 +L 480.638343 -106.23492 +L 485.24441 -106.176859 +L 489.850478 -105.774682 +L 494.456546 -105.616949 +L 499.062613 -106.312302 +L 503.668681 -107.027354 +L 508.274749 -107.068991 +L 512.880816 -106.968485 +L 517.486884 -107.123067 +L 522.092952 -107.825062 +L 526.69902 -108.352221 +L 531.305087 -108.203131 +L 535.911155 -108.404757 +L 535.911155 -111.873636 +L 535.911155 -111.873636 +L 531.305087 -111.552936 +L 526.69902 -111.422909 +L 522.092952 -110.61037 +L 517.486884 -110.325358 +L 512.880816 -110.113721 +L 508.274749 -109.960818 +L 503.668681 -109.612017 +L 499.062613 -108.640668 +L 494.456546 -107.768998 +L 489.850478 -108.077579 +L 485.24441 -108.367214 +L 480.638343 -108.139527 +L 476.032275 -108.384696 +L 471.426207 -108.464827 +L 466.82014 -108.225523 +L 462.214072 -107.53033 +L 457.608004 -106.434392 +L 453.001937 -105.896859 +L 448.395869 -106.034891 +L 443.789801 -106.203633 +L 439.183734 -106.42941 +L 434.577666 -106.155989 +L 429.971598 -105.611223 +L 425.365531 -104.914698 +L 420.759463 -104.510672 +L 416.153395 -104.470616 +L 411.547328 -104.919638 +L 406.94126 -104.973744 +L 402.335192 -104.872716 +L 397.729124 -105.024807 +L 393.123057 -105.682507 +L 388.516989 -105.535215 +L 383.910921 -105.994351 +L 379.304854 -105.86709 +L 374.698786 -105.185233 +L 370.092718 -105.217916 +L 365.486651 -104.941005 +L 360.880583 -104.803643 +L 356.274515 -104.407631 +L 351.668448 -104.116676 +L 347.06238 -103.825929 +L 342.456312 -103.523216 +L 337.850245 -103.14631 +L 333.244177 -103.119741 +L 328.638109 -102.960367 +L 324.032042 -102.300705 +L 319.425974 -102.046532 +L 314.819906 -102.19351 +L 310.213839 -102.453728 +L 305.607771 -102.616716 +L 301.001703 -102.08735 +L 296.395636 -101.928943 +L 291.789568 -101.285648 +L 287.1835 -100.214158 +L 282.577432 -98.773943 +L 277.971365 -97.535152 +L 273.365297 -95.813469 +L 268.759229 -94.676015 +L 264.153162 -93.62646 +L 259.547094 -92.169158 +L 254.941026 -90.667825 +L 250.334959 -88.527931 +L 245.728891 -86.22258 +L 241.122823 -83.412684 +L 236.516756 -80.130523 +L 231.910688 -76.419135 +L 227.30462 -73.550667 +L 222.698553 -70.814032 +L 218.092485 -68.770183 +L 213.486417 -67.367096 +L 208.88035 -66.447797 +L 204.274282 -65.592295 +L 199.668214 -64.740407 +L 195.062147 -63.599401 +L 190.456079 -62.175291 +L 185.850011 -60.634688 +L 181.243944 -58.827221 +L 176.637876 -56.929273 +L 172.031808 -55.728803 +L 167.42574 -54.711918 +L 162.819673 -53.873845 +L 158.213605 -53.426412 +L 153.607537 -53.024616 +L 149.00147 -52.729932 +L 144.395402 -52.509805 +L 139.789334 -52.222807 +L 135.183267 -51.897037 +L 130.577199 -51.615993 +L 125.971131 -51.404627 +L 121.365064 -51.231839 +L 116.758996 -51.097065 +L 112.152928 -50.954022 +L 107.546861 -50.805081 +L 102.940793 -50.683011 +L 98.334725 -50.572366 +L 93.728658 -50.453099 +L 89.12259 -50.342604 +L 84.516522 -50.231997 +L 79.910455 -50.17609 +z +" id="m8f068a436d" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#m8f068a436d" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 79.910455 -50.660146 +L 79.910455 -50.635666 +L 84.516579 -50.761645 +L 89.122704 -50.95154 +L 93.728829 -51.113537 +L 98.334954 -51.245693 +L 102.941079 -51.452523 +L 107.547203 -51.678879 +L 112.153328 -51.992936 +L 116.759453 -52.461736 +L 121.365578 -53.366299 +L 125.971703 -54.595436 +L 130.577827 -55.723461 +L 135.183952 -56.806032 +L 139.790077 -58.080724 +L 144.396202 -59.216841 +L 149.002326 -60.013818 +L 153.608451 -60.888189 +L 158.214576 -61.480831 +L 162.820701 -62.440929 +L 167.426826 -63.644787 +L 172.03295 -64.682378 +L 176.639075 -66.145395 +L 181.2452 -66.867638 +L 185.851325 -67.804028 +L 190.45745 -68.892978 +L 195.063574 -69.842125 +L 199.669699 -70.528484 +L 204.275824 -71.411044 +L 208.881949 -72.941964 +L 213.488074 -73.846017 +L 218.094198 -73.44221 +L 222.700323 -74.410781 +L 227.306448 -75.331787 +L 231.912573 -75.913417 +L 236.518698 -76.571054 +L 241.124822 -77.283899 +L 245.730947 -78.40874 +L 250.337072 -78.933503 +L 254.943197 -79.476755 +L 259.549322 -79.91651 +L 264.155446 -80.009123 +L 268.761571 -80.80395 +L 273.367696 -82.726193 +L 277.973821 -84.102683 +L 282.579946 -84.815343 +L 287.18607 -84.231856 +L 291.792195 -84.191064 +L 296.39832 -85.5873 +L 301.004445 -86.311983 +L 305.61057 -86.62412 +L 310.216694 -86.251715 +L 314.822819 -86.062362 +L 319.428944 -86.271318 +L 324.035069 -86.950088 +L 328.641194 -88.139267 +L 333.247318 -89.094455 +L 337.853443 -89.688048 +L 342.459568 -89.691298 +L 347.065693 -89.587341 +L 351.671818 -90.389941 +L 356.277942 -90.129739 +L 360.884067 -89.976365 +L 365.490192 -89.366297 +L 370.096317 -89.284082 +L 374.702442 -88.882826 +L 379.308566 -89.080096 +L 383.914691 -89.371815 +L 388.520816 -90.114445 +L 393.126941 -90.777526 +L 397.733066 -90.921149 +L 402.33919 -91.786438 +L 406.945315 -92.002649 +L 411.55144 -91.859036 +L 416.157565 -91.91532 +L 420.763689 -92.227247 +L 425.369814 -92.44415 +L 429.975939 -93.108719 +L 434.582064 -94.157642 +L 439.188189 -94.609372 +L 443.794313 -94.068591 +L 448.400438 -94.065295 +L 453.006563 -93.948053 +L 457.612688 -94.324321 +L 462.218813 -94.84659 +L 466.824937 -95.724351 +L 471.431062 -96.291856 +L 476.037187 -95.986484 +L 480.643312 -95.979163 +L 485.249437 -95.497249 +L 489.855561 -95.03089 +L 494.461686 -95.410928 +L 499.067811 -96.430794 +L 503.673936 -96.409026 +L 508.280061 -95.955574 +L 512.886185 -95.602722 +L 517.49231 -95.696077 +L 522.098435 -96.894401 +L 526.70456 -97.184848 +L 531.310685 -96.90344 +L 535.916809 -96.630549 +L 535.916809 -99.735376 +L 535.916809 -99.735376 +L 531.310685 -99.29509 +L 526.70456 -99.311066 +L 522.098435 -98.842963 +L 517.49231 -97.842963 +L 512.886185 -97.694683 +L 508.280061 -97.794088 +L 503.673936 -98.033921 +L 499.067811 -97.740382 +L 494.461686 -97.271904 +L 489.855561 -96.797432 +L 485.249437 -97.150575 +L 480.643312 -97.631567 +L 476.037187 -97.73904 +L 471.431062 -97.674672 +L 466.824937 -97.539759 +L 462.218813 -96.621206 +L 457.612688 -95.768385 +L 453.006563 -95.273379 +L 448.400438 -95.508463 +L 443.794313 -95.924078 +L 439.188189 -96.242439 +L 434.582064 -95.861859 +L 429.975939 -95.09076 +L 425.369814 -94.010369 +L 420.763689 -93.57668 +L 416.157565 -93.496959 +L 411.55144 -93.892132 +L 406.945315 -94.256552 +L 402.33919 -93.915127 +L 397.733066 -92.972352 +L 393.126941 -92.78197 +L 388.520816 -92.389602 +L 383.914691 -92.686694 +L 379.308566 -93.318664 +L 374.702442 -93.643876 +L 370.096317 -93.371984 +L 365.490192 -92.846966 +L 360.884067 -92.928302 +L 356.277942 -92.492792 +L 351.671818 -92.532251 +L 347.065693 -92.079759 +L 342.459568 -91.752712 +L 337.853443 -91.443348 +L 333.247318 -91.038349 +L 328.641194 -90.934363 +L 324.035069 -90.06144 +L 319.428944 -89.271934 +L 314.822819 -89.463925 +L 310.216694 -89.905061 +L 305.61057 -90.057666 +L 301.004445 -89.879925 +L 296.39832 -89.050182 +L 291.792195 -87.960214 +L 287.18607 -87.091833 +L 282.579946 -87.147977 +L 277.973821 -86.908144 +L 273.367696 -85.605434 +L 268.761571 -83.755662 +L 264.155446 -83.143212 +L 259.549322 -82.71667 +L 254.943197 -82.128527 +L 250.337072 -82.113054 +L 245.730947 -81.426774 +L 241.124822 -80.090293 +L 236.518698 -79.376984 +L 231.912573 -79.042228 +L 227.306448 -78.726284 +L 222.700323 -77.430335 +L 218.094198 -76.10452 +L 213.488074 -76.539394 +L 208.881949 -75.47108 +L 204.275824 -73.998846 +L 199.669699 -72.9299 +L 195.063574 -72.434987 +L 190.45745 -71.581779 +L 185.851325 -70.633185 +L 181.2452 -69.958009 +L 176.639075 -70.045571 +L 172.03295 -69.201308 +L 167.426826 -68.249149 +L 162.820701 -66.552792 +L 158.214576 -65.14197 +L 153.608451 -63.880681 +L 149.002326 -62.712016 +L 144.396202 -61.670946 +L 139.790077 -60.490446 +L 135.183952 -59.074361 +L 130.577827 -57.759792 +L 125.971703 -56.014276 +L 121.365578 -54.194801 +L 116.759453 -52.883761 +L 112.153328 -52.232373 +L 107.547203 -51.836472 +L 102.941079 -51.562638 +L 98.334954 -51.328223 +L 93.728829 -51.163291 +L 89.122704 -50.989496 +L 84.516579 -50.79249 +L 79.910455 -50.660146 +z +" id="m0b5ac6ad88" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#m0b5ac6ad88" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 79.910455 -50.171272 +L 79.910455 -50.146364 +L 84.516505 -50.195104 +L 89.122556 -50.332253 +L 93.728606 -50.456612 +L 98.334657 -50.533593 +L 102.940708 -50.581675 +L 107.546758 -50.621264 +L 112.152809 -50.659739 +L 116.75886 -50.69409 +L 121.36491 -50.728058 +L 125.970961 -50.774087 +L 130.577012 -50.82156 +L 135.183062 -50.868821 +L 139.789113 -50.931594 +L 144.395163 -51.005551 +L 149.001214 -51.11093 +L 153.607265 -51.23798 +L 158.213315 -51.357059 +L 162.819366 -51.452696 +L 167.425417 -51.56965 +L 172.031467 -51.688745 +L 176.637518 -51.814861 +L 181.243569 -51.957307 +L 185.849619 -52.097019 +L 190.45567 -52.22027 +L 195.06172 -52.322435 +L 199.667771 -52.404184 +L 204.273822 -52.501282 +L 208.879872 -52.711458 +L 213.485923 -52.909889 +L 218.091974 -53.088369 +L 222.698024 -53.407438 +L 227.304075 -53.628557 +L 231.910126 -53.780596 +L 236.516176 -54.054611 +L 241.122227 -54.475551 +L 245.728277 -54.75893 +L 250.334328 -55.067249 +L 254.940379 -55.546191 +L 259.546429 -55.936767 +L 264.15248 -56.222302 +L 268.758531 -56.52742 +L 273.364581 -56.961996 +L 277.970632 -57.397426 +L 282.576683 -57.827509 +L 287.182733 -58.134303 +L 291.788784 -58.373829 +L 296.394835 -58.722754 +L 301.000885 -59.086694 +L 305.606936 -59.356296 +L 310.212986 -59.489362 +L 314.819037 -59.73497 +L 319.425088 -59.88328 +L 324.031138 -60.153683 +L 328.637189 -60.309243 +L 333.24324 -60.558369 +L 337.84929 -60.534192 +L 342.455341 -60.809399 +L 347.061392 -61.150312 +L 351.667442 -61.392809 +L 356.273493 -61.599299 +L 360.879543 -61.966647 +L 365.485594 -62.325362 +L 370.091645 -62.349502 +L 374.697695 -62.57931 +L 379.303746 -62.809254 +L 383.909797 -62.843836 +L 388.515847 -62.857464 +L 393.121898 -63.108447 +L 397.727949 -63.417132 +L 402.333999 -63.606797 +L 406.94005 -63.673961 +L 411.5461 -63.71298 +L 416.152151 -63.762304 +L 420.758202 -63.855868 +L 425.364252 -64.069519 +L 429.970303 -64.24832 +L 434.576354 -64.320701 +L 439.182404 -64.457109 +L 443.788455 -64.512062 +L 448.394506 -64.540965 +L 453.000556 -64.700833 +L 457.606607 -64.849507 +L 462.212657 -64.867212 +L 466.818708 -64.817311 +L 471.424759 -64.944229 +L 476.030809 -64.983638 +L 480.63686 -65.061538 +L 485.242911 -65.181074 +L 489.848961 -65.157828 +L 494.455012 -65.183187 +L 499.061063 -65.254577 +L 503.667113 -65.350527 +L 508.273164 -65.478507 +L 512.879214 -65.519047 +L 517.485265 -65.485804 +L 522.091316 -65.467252 +L 526.697366 -65.523949 +L 531.303417 -65.544407 +L 535.909468 -65.57157 +L 535.909468 -65.934655 +L 535.909468 -65.934655 +L 531.303417 -65.957956 +L 526.697366 -65.924661 +L 522.091316 -65.913956 +L 517.485265 -65.890989 +L 512.879214 -65.877533 +L 508.273164 -65.825896 +L 503.667113 -65.721116 +L 499.061063 -65.713799 +L 494.455012 -65.652461 +L 489.848961 -65.60059 +L 485.242911 -65.593262 +L 480.63686 -65.513007 +L 476.030809 -65.392979 +L 471.424759 -65.352345 +L 466.818708 -65.284492 +L 462.212657 -65.397023 +L 457.606607 -65.43682 +L 453.000556 -65.301456 +L 448.394506 -65.135027 +L 443.788455 -65.122273 +L 439.182404 -64.978145 +L 434.576354 -64.899521 +L 429.970303 -64.809845 +L 425.364252 -64.615215 +L 420.758202 -64.471822 +L 416.152151 -64.443148 +L 411.5461 -64.341248 +L 406.94005 -64.275014 +L 402.333999 -64.17972 +L 397.727949 -64.058823 +L 393.121898 -63.920671 +L 388.515847 -63.780604 +L 383.909797 -63.749916 +L 379.303746 -63.650691 +L 374.697695 -63.472241 +L 370.091645 -63.205729 +L 365.485594 -63.22568 +L 360.879543 -63.010951 +L 356.273493 -62.689628 +L 351.667442 -62.47183 +L 347.061392 -62.218307 +L 342.455341 -61.90915 +L 337.84929 -61.831509 +L 333.24324 -61.861062 +L 328.637189 -61.596893 +L 324.031138 -61.410724 +L 319.425088 -61.30178 +L 314.819037 -61.160533 +L 310.212986 -61.037417 +L 305.606936 -60.925557 +L 301.000885 -60.648835 +L 296.394835 -60.310251 +L 291.788784 -59.920651 +L 287.182733 -59.589607 +L 282.576683 -59.301205 +L 277.970632 -59.020721 +L 273.364581 -58.63687 +L 268.758531 -58.052865 +L 264.15248 -57.529395 +L 259.546429 -57.110088 +L 254.940379 -56.612255 +L 250.334328 -56.083763 +L 245.728277 -55.73178 +L 241.122227 -55.396723 +L 236.516176 -54.945252 +L 231.910126 -54.548329 +L 227.304075 -54.423316 +L 222.698024 -54.018008 +L 218.091974 -53.569706 +L 213.485923 -53.302848 +L 208.879872 -53.043153 +L 204.273822 -52.849008 +L 199.667771 -52.672244 +L 195.06172 -52.550448 +L 190.45567 -52.45852 +L 185.849619 -52.349365 +L 181.243569 -52.167118 +L 176.637518 -52.04794 +L 172.031467 -51.916463 +L 167.425417 -51.805304 +L 162.819366 -51.655979 +L 158.213315 -51.529475 +L 153.607265 -51.382216 +L 149.001214 -51.224129 +L 144.395163 -51.087127 +L 139.789113 -50.995947 +L 135.183062 -50.913827 +L 130.577012 -50.842768 +L 125.970961 -50.792882 +L 121.36491 -50.747831 +L 116.75886 -50.710658 +L 112.152809 -50.6765 +L 107.546758 -50.638385 +L 102.940708 -50.593499 +L 98.334657 -50.547046 +L 93.728606 -50.470674 +L 89.122556 -50.352187 +L 84.516505 -50.230212 +L 79.910455 -50.171272 +z +" id="m971815ea23" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#m971815ea23" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 79.910455 -50.616793 +L 79.910455 -50.580174 +L 84.516574 -50.80901 +L 89.122694 -51.081918 +L 93.728814 -51.287344 +L 98.334933 -51.433912 +L 102.941053 -51.546324 +L 107.547173 -51.646845 +L 112.153293 -51.759036 +L 116.759412 -51.845911 +L 121.365532 -51.969098 +L 125.971652 -52.157488 +L 130.577772 -52.361093 +L 135.183891 -52.562689 +L 139.790011 -52.768164 +L 144.396131 -53.009866 +L 149.00225 -53.328258 +L 153.60837 -53.60002 +L 158.21449 -53.800793 +L 162.82061 -53.975857 +L 167.426729 -54.096393 +L 172.032849 -54.09741 +L 176.638969 -54.259973 +L 181.245089 -54.419548 +L 185.851208 -54.584915 +L 190.457328 -54.811848 +L 195.063448 -54.941837 +L 199.669568 -55.21332 +L 204.275687 -55.47986 +L 208.881807 -55.834633 +L 213.487927 -56.263683 +L 218.094046 -56.778925 +L 222.700166 -57.177486 +L 227.306286 -57.385715 +L 231.912406 -57.603311 +L 236.518525 -57.96341 +L 241.124645 -58.424597 +L 245.730765 -58.836522 +L 250.336885 -59.069755 +L 254.943004 -59.216617 +L 259.549124 -59.274778 +L 264.155244 -59.22676 +L 268.761363 -58.881199 +L 273.367483 -58.716664 +L 277.973603 -58.925931 +L 282.579723 -59.080829 +L 287.185842 -59.156166 +L 291.791962 -59.275067 +L 296.398082 -59.331512 +L 301.004202 -59.52478 +L 305.610321 -59.693051 +L 310.216441 -59.774723 +L 314.822561 -59.917937 +L 319.42868 -60.069903 +L 324.0348 -60.14536 +L 328.64092 -60.095633 +L 333.24704 -60.296085 +L 337.853159 -60.515856 +L 342.459279 -60.55631 +L 347.065399 -60.485276 +L 351.671519 -60.539507 +L 356.277638 -60.707846 +L 360.883758 -60.782444 +L 365.489878 -60.785351 +L 370.095998 -60.83327 +L 374.702117 -60.835655 +L 379.308237 -60.562841 +L 383.914357 -60.561891 +L 388.520476 -60.703862 +L 393.126596 -60.838176 +L 397.732716 -60.853245 +L 402.338836 -61.015641 +L 406.944955 -61.335255 +L 411.551075 -61.450722 +L 416.157195 -61.637684 +L 420.763315 -61.767673 +L 425.369434 -61.790996 +L 429.975554 -61.685 +L 434.581674 -61.788951 +L 439.187793 -61.873333 +L 443.793913 -61.918276 +L 448.400033 -62.098449 +L 453.006153 -62.198089 +L 457.612272 -62.111252 +L 462.218392 -61.870565 +L 466.824512 -61.700938 +L 471.430632 -61.614899 +L 476.036751 -61.433341 +L 480.642871 -61.341881 +L 485.248991 -61.447341 +L 489.85511 -61.542601 +L 494.46123 -61.684261 +L 499.06735 -61.872139 +L 503.67347 -61.95364 +L 508.279589 -61.995988 +L 512.885709 -61.947416 +L 517.491829 -61.921177 +L 522.097949 -61.855542 +L 526.704068 -61.707691 +L 531.310188 -61.788502 +L 535.916308 -61.714964 +L 535.916308 -63.294545 +L 535.916308 -63.294545 +L 531.310188 -63.317958 +L 526.704068 -63.165004 +L 522.097949 -63.181847 +L 517.491829 -63.163081 +L 512.885709 -63.106731 +L 508.279589 -63.144515 +L 503.67347 -63.242187 +L 499.06735 -63.177825 +L 494.46123 -62.957167 +L 489.85511 -62.707325 +L 485.248991 -62.58762 +L 480.642871 -62.498395 +L 476.036751 -62.568547 +L 471.430632 -62.773794 +L 466.824512 -62.824577 +L 462.218392 -62.982634 +L 457.612272 -63.118385 +L 453.006153 -63.174519 +L 448.400033 -63.120008 +L 443.793913 -62.978056 +L 439.187793 -63.099677 +L 434.581674 -63.138222 +L 429.975554 -63.132847 +L 425.369434 -63.168548 +L 420.763315 -63.046932 +L 416.157195 -62.82904 +L 411.551075 -62.582695 +L 406.944955 -62.308734 +L 402.338836 -61.918008 +L 397.732716 -61.830561 +L 393.126596 -61.764034 +L 388.520476 -61.650997 +L 383.914357 -61.480639 +L 379.308237 -61.522046 +L 374.702117 -61.765069 +L 370.095998 -61.758998 +L 365.489878 -61.763606 +L 360.883758 -61.829594 +L 356.277638 -61.827493 +L 351.671519 -61.69226 +L 347.065399 -61.704203 +L 342.459279 -61.757971 +L 337.853159 -61.606012 +L 333.24704 -61.318443 +L 328.64092 -61.156354 +L 324.0348 -61.174257 +L 319.42868 -61.051679 +L 314.822561 -60.817597 +L 310.216441 -60.719481 +L 305.610321 -60.786885 +L 301.004202 -60.70825 +L 296.398082 -60.528847 +L 291.791962 -60.399713 +L 287.185842 -60.324111 +L 282.579723 -60.18916 +L 277.973603 -59.990612 +L 273.367483 -59.798208 +L 268.761363 -59.976861 +L 264.155244 -60.346636 +L 259.549124 -60.478055 +L 254.943004 -60.460138 +L 250.336885 -60.34925 +L 245.730765 -60.114999 +L 241.124645 -59.778832 +L 236.518525 -59.307131 +L 231.912406 -58.953796 +L 227.306286 -58.709986 +L 222.700166 -58.468121 +L 218.094046 -57.992354 +L 213.487927 -57.378057 +L 208.881807 -56.98076 +L 204.275687 -56.818372 +L 199.669568 -56.679732 +L 195.063448 -56.388366 +L 190.457328 -56.254393 +L 185.851208 -55.961131 +L 181.245089 -55.744871 +L 176.638969 -55.506273 +L 172.032849 -55.187734 +L 167.426729 -55.193266 +L 162.82061 -55.115988 +L 158.21449 -54.887585 +L 153.60837 -54.636623 +L 149.00225 -54.202105 +L 144.396131 -53.789331 +L 139.790011 -53.504563 +L 135.183891 -53.256821 +L 130.577772 -52.966728 +L 125.971652 -52.624046 +L 121.365532 -52.246798 +L 116.759412 -51.984469 +L 112.153293 -51.835356 +L 107.547173 -51.71344 +L 102.941053 -51.590482 +L 98.334933 -51.47164 +L 93.728814 -51.341012 +L 89.122694 -51.142448 +L 84.516574 -50.859752 +L 79.910455 -50.616793 +z +" id="m89ea8f9015" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p4f418f2e2b)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#m89ea8f9015" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.369446 +L 84.516396 93.244633 +L 89.122337 93.054292 +L 93.728278 92.849878 +L 98.334219 92.656528 +L 102.94016 92.48703 +L 107.546101 92.292434 +L 112.152042 92.053416 +L 116.757983 91.76894 +L 121.363924 91.412358 +L 125.969865 90.930872 +L 130.575806 90.294188 +L 135.181747 89.419998 +L 139.787688 88.203601 +L 144.393629 86.734995 +L 148.99957 85.321015 +L 153.605511 84.097501 +L 158.211452 83.385532 +L 162.817393 82.925181 +L 167.423334 82.111677 +L 172.029275 81.189611 +L 176.635216 80.441969 +L 181.241157 79.85626 +L 185.847098 79.477552 +L 190.453039 78.927564 +L 195.05898 78.207306 +L 199.664921 77.064029 +L 204.270862 75.790253 +L 208.876803 74.097135 +L 213.482744 72.845341 +L 218.088685 71.201111 +L 222.694626 68.71499 +L 227.300567 67.152546 +L 231.906508 66.624022 +L 236.512449 66.502224 +L 241.11839 65.802699 +L 245.724331 65.309888 +L 250.330272 64.357874 +L 254.936213 62.377214 +L 259.542154 60.82 +L 264.148095 59.797487 +L 268.754036 59.329661 +L 273.359977 58.184401 +L 277.965918 56.796126 +L 282.571859 55.061898 +L 287.1778 54.050418 +L 291.783741 53.496881 +L 296.389682 52.903475 +L 300.995623 52.646205 +L 305.601564 52.015495 +L 310.207505 51.664121 +L 314.813446 51.556474 +L 319.419387 51.589672 +L 324.025328 51.526747 +L 328.631269 50.751555 +L 333.23721 50.125564 +L 337.843151 50.184435 +L 342.449092 50.326677 +L 347.055033 49.883454 +L 351.660974 49.508581 +L 356.266915 48.921887 +L 360.872856 48.539181 +L 365.478797 47.751986 +L 370.084738 47.611052 +L 374.690679 48.124804 +L 379.29662 47.90141 +L 383.902561 47.493152 +L 388.508502 47.180216 +L 393.114443 46.899609 +L 397.720384 46.871289 +L 402.326325 46.513914 +L 406.932266 45.808131 +L 411.538207 45.353382 +L 416.144148 45.151089 +L 420.750089 44.958311 +L 425.35603 44.770771 +L 429.961971 44.511222 +L 434.567912 44.641386 +L 439.173853 44.783011 +L 443.779794 44.169587 +L 448.385735 43.88569 +L 452.991676 43.577414 +L 457.597617 43.703786 +L 462.203558 43.429425 +L 466.809499 43.136938 +L 471.41544 43.344449 +L 476.021381 42.835269 +L 480.627323 42.607284 +L 485.233264 42.459954 +L 489.839205 42.107548 +L 494.445146 41.866427 +L 499.051087 41.982556 +L 503.657028 41.556243 +L 508.262969 41.252342 +L 512.86891 41.069373 +L 517.474851 40.722423 +L 522.080792 40.684249 +L 526.686733 40.665121 +L 531.292674 40.952881 +L 535.898615 40.776019 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.811613 +L 84.516607 93.762036 +L 89.122759 93.681841 +L 93.728912 93.591481 +L 98.335064 93.469479 +L 102.941217 93.309573 +L 107.547369 93.103662 +L 112.153522 92.882578 +L 116.759674 92.632359 +L 121.365826 92.247855 +L 125.971979 91.72026 +L 130.578131 91.295469 +L 135.184284 90.935674 +L 139.790436 90.625924 +L 144.396589 90.445207 +L 149.002741 90.302673 +L 153.608893 90.167421 +L 158.215046 89.79483 +L 162.821198 89.570441 +L 167.427351 89.358922 +L 172.033503 89.351963 +L 176.639656 89.387506 +L 181.245808 89.314702 +L 185.851961 88.932595 +L 190.458113 88.492562 +L 195.064265 88.136273 +L 199.670418 87.883223 +L 204.27657 87.351639 +L 208.882723 86.860897 +L 213.488875 86.268116 +L 218.095028 85.654369 +L 222.70118 85.128301 +L 227.307332 84.850686 +L 231.913485 84.3735 +L 236.519637 84.124262 +L 241.12579 83.858915 +L 245.731942 83.983026 +L 250.338095 83.704129 +L 254.944247 83.242215 +L 259.550399 82.965193 +L 264.156552 82.946398 +L 268.762704 82.948238 +L 273.368857 82.703721 +L 277.975009 82.496699 +L 282.581162 82.077593 +L 287.187314 81.68853 +L 291.793466 81.416875 +L 296.399619 81.318218 +L 301.005771 81.36634 +L 305.611924 81.344829 +L 310.218076 81.137033 +L 314.824229 80.830526 +L 319.430381 80.519426 +L 324.036534 80.199819 +L 328.642686 80.20216 +L 333.248838 79.965104 +L 337.854991 79.495761 +L 342.461143 79.032419 +L 347.067296 78.787068 +L 351.673448 78.728109 +L 356.279601 79.094899 +L 360.885753 79.031718 +L 365.491905 78.372967 +L 370.098058 77.897855 +L 374.70421 77.633105 +L 379.310363 77.016571 +L 383.916515 76.819317 +L 388.522668 76.682091 +L 393.12882 76.329136 +L 397.734972 76.076025 +L 402.341125 74.924675 +L 406.947277 75.018451 +L 411.55343 74.994396 +L 416.159582 74.594068 +L 420.765735 74.15919 +L 425.371887 73.054737 +L 429.978039 71.96304 +L 434.584192 72.067059 +L 439.190344 71.747986 +L 443.796497 71.671152 +L 448.402649 70.852546 +L 453.008802 70.485705 +L 457.614954 69.679743 +L 462.221107 68.808973 +L 466.827259 68.663063 +L 471.433411 68.847126 +L 476.039564 69.011413 +L 480.645716 69.172227 +L 485.251869 69.081906 +L 489.858021 68.753123 +L 494.464174 68.702792 +L 499.070326 68.117754 +L 503.676478 68.518063 +L 508.282631 68.266394 +L 512.888783 68.358604 +L 517.494936 68.680813 +L 522.101088 69.223099 +L 526.707241 68.981198 +L 531.313393 68.466516 +L 535.919545 67.70816 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.721012 +L 84.516444 93.624362 +L 89.122433 93.533021 +L 93.728423 93.466172 +L 98.334412 93.4177 +L 102.940401 93.381677 +L 107.546391 93.339842 +L 112.15238 93.286594 +L 116.75837 93.208261 +L 121.364359 93.109715 +L 125.970348 92.985959 +L 130.576338 92.863824 +L 135.182327 92.719947 +L 139.788316 92.530812 +L 144.394306 92.297346 +L 149.000295 92.039646 +L 153.606285 91.729657 +L 158.212274 91.32744 +L 162.818263 90.914287 +L 167.424253 90.476995 +L 172.030242 89.919819 +L 176.636231 89.286222 +L 181.242221 88.565784 +L 185.84821 87.735095 +L 190.4542 87.20199 +L 195.060189 86.451252 +L 199.666178 85.353112 +L 204.272168 84.395701 +L 208.878157 83.583507 +L 213.484146 82.873332 +L 218.090136 82.14689 +L 222.696125 81.618753 +L 227.302115 81.075045 +L 231.908104 80.630668 +L 236.514093 80.35243 +L 241.120083 80.038346 +L 245.726072 79.701371 +L 250.332061 79.479294 +L 254.938051 79.354575 +L 259.54404 79.209183 +L 264.15003 79.067856 +L 268.756019 78.949019 +L 273.362008 78.841757 +L 277.967998 78.836723 +L 282.573987 78.752122 +L 287.179976 78.479041 +L 291.785966 78.276526 +L 296.391955 78.11128 +L 300.997945 78.059599 +L 305.603934 77.813323 +L 310.209923 77.181519 +L 314.815913 76.426127 +L 319.421902 75.466995 +L 324.027891 73.865014 +L 328.633881 71.746268 +L 333.23987 69.822107 +L 337.84586 68.197371 +L 342.451849 66.945915 +L 347.057838 65.400516 +L 351.663828 64.043052 +L 356.269817 62.843416 +L 360.875806 61.726129 +L 365.481796 60.521828 +L 370.087785 59.057226 +L 374.693775 57.395887 +L 379.299764 56.002723 +L 383.905753 54.729035 +L 388.511743 53.717598 +L 393.117732 53.241218 +L 397.723721 52.542075 +L 402.329711 51.661689 +L 406.9357 50.652627 +L 411.54169 49.976795 +L 416.147679 48.816012 +L 420.753668 47.168743 +L 425.359658 46.339402 +L 429.965647 45.855267 +L 434.571636 45.442012 +L 439.177626 44.868916 +L 443.783615 44.645193 +L 448.389605 44.706513 +L 452.995594 44.319969 +L 457.601583 43.601623 +L 462.207573 43.278692 +L 466.813562 42.936126 +L 471.419551 42.725853 +L 476.025541 42.693046 +L 480.63153 42.436755 +L 485.23752 42.250508 +L 489.843509 42.136002 +L 494.449498 41.814228 +L 499.055488 41.595571 +L 503.661477 41.429269 +L 508.267466 41.285411 +L 512.873456 41.363474 +L 517.479445 41.241498 +L 522.085435 41.018622 +L 526.691424 40.464047 +L 531.297413 40.837589 +L 535.903403 40.992119 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.833513 +L 84.516522 93.77782 +L 89.12259 93.666602 +L 93.728658 93.553682 +L 98.334725 93.435943 +L 102.940793 93.327744 +L 107.546861 93.203454 +L 112.152928 93.056659 +L 116.758996 92.917468 +L 121.365064 92.788268 +L 125.971131 92.624364 +L 130.577199 92.4236 +L 135.183267 92.169225 +L 139.789334 91.851641 +L 144.395402 91.552927 +L 149.00147 91.319534 +L 153.607537 91.048735 +L 158.213605 90.710454 +L 162.819673 90.351467 +L 167.42574 89.626978 +L 172.031808 88.720445 +L 176.637876 87.689134 +L 181.243944 86.083389 +L 185.850011 84.432457 +L 190.456079 82.816097 +L 195.062147 81.287693 +L 199.668214 80.124944 +L 204.274282 79.285006 +L 208.88035 78.434899 +L 213.486417 77.598679 +L 218.092485 76.478406 +L 222.698553 74.914478 +L 227.30462 72.88766 +L 231.910688 70.631496 +L 236.516756 67.682639 +L 241.122823 64.865289 +L 245.728891 62.285369 +L 250.334959 59.866842 +L 254.941026 57.623981 +L 259.547094 55.862354 +L 264.153162 53.964039 +L 268.759229 52.267641 +L 273.365297 50.65267 +L 277.971365 48.54207 +L 282.577432 47.175048 +L 287.1835 45.553798 +L 291.789568 44.35727 +L 296.395636 43.516128 +L 301.001703 43.137215 +L 305.607771 42.734637 +L 310.213839 42.916457 +L 314.819906 43.093192 +L 319.425974 43.454066 +L 324.032042 43.221077 +L 328.638109 42.462291 +L 333.244177 42.225175 +L 337.850245 41.972578 +L 342.456312 41.465132 +L 347.06238 41.292472 +L 351.668448 41.006217 +L 356.274515 40.603055 +L 360.880583 40.011997 +L 365.486651 39.862811 +L 370.092718 39.662624 +L 374.698786 39.852361 +L 379.304854 39.252308 +L 383.910921 38.979637 +L 388.516989 39.273921 +L 393.123057 38.981213 +L 397.729124 39.621618 +L 402.335192 39.853237 +L 406.94126 39.891057 +L 411.547328 39.926558 +L 416.153395 40.283821 +L 420.759463 40.459623 +L 425.365531 40.204969 +L 429.971598 39.568951 +L 434.577666 38.875531 +L 439.183734 38.583326 +L 443.789801 38.72095 +L 448.395869 38.75004 +L 453.001937 38.955399 +L 457.608004 38.712251 +L 462.214072 37.978052 +L 466.82014 37.311406 +L 471.426207 36.897896 +L 476.032275 36.765237 +L 480.638343 36.812777 +L 485.24441 36.727964 +L 489.850478 37.073869 +L 494.456546 37.307026 +L 499.062613 36.523515 +L 503.668681 35.680314 +L 508.274749 35.485095 +L 512.880816 35.458897 +L 517.486884 35.275787 +L 522.092952 34.782284 +L 526.69902 34.112435 +L 531.305087 34.121967 +L 535.911155 33.860803 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.352094 +L 84.516579 93.222933 +L 89.122704 93.029482 +L 93.728829 92.861586 +L 98.334954 92.713042 +L 102.941079 92.49242 +L 107.547203 92.242324 +L 112.153328 91.887346 +L 116.759453 91.327252 +L 121.365578 90.21945 +L 125.971703 88.695144 +L 130.577827 87.258373 +L 135.183952 86.059804 +L 139.790077 84.714415 +L 144.396202 83.556106 +L 149.002326 82.637083 +L 153.608451 81.615565 +L 158.214576 80.6886 +L 162.820701 79.503139 +L 167.426826 78.053032 +L 172.03295 77.058157 +L 176.639075 75.904517 +L 181.2452 75.587176 +L 185.851325 74.781394 +L 190.45745 73.762622 +L 195.063574 72.861444 +L 199.669699 72.270808 +L 204.275824 71.295055 +L 208.881949 69.793478 +L 213.488074 68.807295 +L 218.094198 69.226635 +L 222.700323 68.079442 +L 227.306448 66.970964 +L 231.912573 66.522178 +L 236.518698 66.025981 +L 241.124822 65.312904 +L 245.730947 64.082243 +L 250.337072 63.476721 +L 254.943197 63.197359 +L 259.549322 62.68341 +L 264.155446 62.423833 +L 268.761571 61.720194 +L 273.367696 59.834186 +L 277.973821 58.494586 +L 282.579946 58.01834 +L 287.18607 58.338155 +L 291.792195 57.924361 +L 296.39832 56.681259 +L 301.004445 55.904046 +L 305.61057 55.659107 +L 310.216694 55.921612 +L 314.822819 56.236856 +L 319.428944 56.228374 +L 324.035069 55.494236 +L 328.641194 54.463185 +L 333.247318 53.933598 +L 337.853443 53.434302 +L 342.459568 53.277995 +L 347.065693 53.16645 +L 351.671818 52.538904 +L 356.277942 52.688735 +L 360.884067 52.547666 +L 365.490192 52.893368 +L 370.096317 52.671967 +L 374.702442 52.736649 +L 379.308566 52.80062 +L 383.914691 52.970745 +L 388.520816 52.747976 +L 393.126941 52.220252 +L 397.733066 52.05325 +L 402.33919 51.149218 +L 406.945315 50.8704 +L 411.55144 51.124416 +L 416.157565 51.293861 +L 420.763689 51.098037 +L 425.369814 50.772741 +L 429.975939 49.900261 +L 434.582064 48.990249 +L 439.188189 48.574094 +L 443.794313 49.003666 +L 448.400438 49.213121 +L 453.006563 49.389284 +L 457.612688 48.953647 +L 462.218813 48.266102 +L 466.824937 47.367945 +L 471.431062 47.016736 +L 476.037187 47.137238 +L 480.643312 47.194635 +L 485.249437 47.676088 +L 489.855561 48.085839 +L 494.461686 47.658584 +L 499.067811 46.914412 +L 503.673936 46.778527 +L 508.280061 47.125169 +L 512.886185 47.351297 +L 517.49231 47.23048 +L 522.098435 46.131318 +L 526.70456 45.752043 +L 531.310685 45.900735 +L 535.916809 45.817037 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.841182 +L 84.516505 93.787342 +L 89.122556 93.65778 +L 93.728606 93.536357 +L 98.334657 93.459681 +L 102.940708 93.412413 +L 107.546758 93.370175 +L 112.152809 93.33188 +L 116.75886 93.297626 +L 121.36491 93.262055 +L 125.970961 93.216515 +L 130.577012 93.167836 +L 135.183062 93.108676 +L 139.789113 93.03623 +L 144.395163 92.953661 +L 149.001214 92.832471 +L 153.607265 92.689902 +L 158.213315 92.556733 +L 162.819366 92.445662 +L 167.425417 92.312523 +L 172.031467 92.197396 +L 176.637518 92.068599 +L 181.243569 91.937788 +L 185.849619 91.776808 +L 190.45567 91.660605 +L 195.06172 91.563558 +L 199.667771 91.461786 +L 204.273822 91.324855 +L 208.879872 91.122694 +L 213.485923 90.893631 +L 218.091974 90.670963 +L 222.698024 90.287277 +L 227.304075 89.974063 +L 231.910126 89.835538 +L 236.516176 89.500069 +L 241.122227 89.063863 +L 245.728277 88.754645 +L 250.334328 88.424494 +L 254.940379 87.920777 +L 259.546429 87.476572 +L 264.15248 87.124151 +L 268.758531 86.709858 +L 273.364581 86.200567 +L 277.970632 85.790926 +L 282.576683 85.435643 +L 287.182733 85.138045 +L 291.788784 84.85276 +L 296.394835 84.483498 +L 301.000885 84.132235 +L 305.606936 83.859074 +L 310.212986 83.73661 +L 314.819037 83.552248 +L 319.425088 83.40747 +L 324.031138 83.217796 +L 328.637189 83.046932 +L 333.24324 82.790284 +L 337.84929 82.81715 +L 342.455341 82.640726 +L 347.061392 82.315691 +L 351.667442 82.06768 +L 356.273493 81.855537 +L 360.879543 81.511201 +L 365.485594 81.224479 +L 370.091645 81.222384 +L 374.697695 80.974225 +L 379.303746 80.770027 +L 383.909797 80.703124 +L 388.515847 80.680966 +L 393.121898 80.485441 +L 397.727949 80.262023 +L 402.333999 80.106742 +L 406.94005 80.025513 +L 411.5461 79.972886 +L 416.152151 79.897274 +L 420.758202 79.836155 +L 425.364252 79.657633 +L 429.970303 79.470918 +L 434.576354 79.389889 +L 439.182404 79.282373 +L 443.788455 79.182832 +L 448.394506 79.162004 +L 453.000556 78.998856 +L 457.606607 78.856837 +L 462.212657 78.867882 +L 466.818708 78.949098 +L 471.424759 78.851713 +L 476.030809 78.811691 +L 480.63686 78.712728 +L 485.242911 78.612832 +L 489.848961 78.620791 +L 494.455012 78.582176 +L 499.061063 78.515812 +L 503.667113 78.464179 +L 508.273164 78.347798 +L 512.879214 78.30171 +L 517.485265 78.311604 +L 522.091316 78.309396 +L 526.697366 78.275695 +L 531.303417 78.248819 +L 535.909468 78.246888 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#p4f418f2e2b)" d="M 79.910455 93.401517 +L 84.516574 93.165619 +L 89.122694 92.887817 +L 93.728814 92.685822 +L 98.334933 92.547224 +L 102.941053 92.431597 +L 107.547173 92.319857 +L 112.153293 92.202804 +L 116.759412 92.08481 +L 121.365532 91.892052 +L 125.971652 91.609233 +L 130.577772 91.336089 +L 135.183891 91.090245 +L 139.790011 90.863636 +L 144.396131 90.600401 +L 149.00225 90.234819 +L 153.60837 89.881679 +L 158.21449 89.655811 +L 162.82061 89.454078 +L 167.426729 89.355171 +L 172.032849 89.357428 +L 176.638969 89.116877 +L 181.245089 88.917791 +L 185.851208 88.726977 +L 190.457328 88.46688 +L 195.063448 88.334898 +L 199.669568 88.053474 +L 204.275687 87.850884 +L 208.881807 87.592303 +L 213.487927 87.17913 +L 218.094046 86.61436 +L 222.700166 86.177196 +L 227.306286 85.95215 +L 231.912406 85.721447 +L 236.518525 85.364729 +L 241.124645 84.898285 +L 245.730765 84.52424 +L 250.336885 84.290497 +L 254.943004 84.161623 +L 259.549124 84.123583 +L 264.155244 84.213302 +L 268.761363 84.57097 +L 273.367483 84.742564 +L 277.973603 84.541728 +L 282.579723 84.365006 +L 287.185842 84.259862 +L 291.791962 84.16261 +L 296.398082 84.069821 +L 301.004202 83.883485 +L 305.610321 83.760032 +L 310.216441 83.752898 +L 314.822561 83.632233 +L 319.42868 83.439209 +L 324.0348 83.340191 +L 328.64092 83.374007 +L 333.24704 83.192736 +L 337.853159 82.939066 +L 342.459279 82.84286 +L 347.065399 82.905261 +L 351.671519 82.884116 +L 356.277638 82.73233 +L 360.883758 82.693981 +L 365.489878 82.725522 +L 370.095998 82.703866 +L 374.702117 82.699638 +L 379.308237 82.957557 +L 383.914357 82.978735 +L 388.520476 82.822571 +L 393.126596 82.698895 +L 397.732716 82.658097 +L 402.338836 82.533176 +L 406.944955 82.178005 +L 411.551075 81.983292 +L 416.157195 81.766638 +L 420.763315 81.592698 +L 425.369434 81.520228 +L 429.975554 81.591076 +L 434.581674 81.536413 +L 439.187793 81.513495 +L 443.793913 81.551834 +L 448.400033 81.390771 +L 453.006153 81.313696 +L 457.612272 81.385181 +L 462.218392 81.573401 +L 466.824512 81.737242 +L 471.430632 81.805653 +L 476.036751 81.999056 +L 480.642871 82.079862 +L 485.248991 81.98252 +L 489.85511 81.875037 +L 494.46123 81.679286 +L 499.06735 81.475018 +L 503.67347 81.402087 +L 508.279589 81.429749 +L 512.885709 81.472926 +L 517.491829 81.457871 +L 522.097949 81.481306 +L 526.704068 81.563653 +L 531.310188 81.44677 +L 535.916308 81.495246 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 57.11 96.94 +L 57.11 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 57.11 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 57.11 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 307.915, 23.04)" x="307.915" y="23.04">Qbert</text> + </g> + </g> + </g> + <defs> + <clipPath id="p4f418f2e2b"> + <rect height="67.9" width="501.61" x="57.11" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.18 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 50.18 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 96.94 +L 73.295455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.295455, 114.798281)" x="73.295455" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p5850334e9a)" d="M 165.757781 96.94 +L 165.757781 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.757781, 114.798281)" x="165.757781" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p5850334e9a)" d="M 258.220108 96.94 +L 258.220108 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.220108, 114.798281)" x="258.220108" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p5850334e9a)" d="M 350.682435 96.94 +L 350.682435 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.682435, 114.798281)" x="350.682435" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p5850334e9a)" d="M 443.144761 96.94 +L 443.144761 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.144761, 114.798281)" x="443.144761" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p5850334e9a)" d="M 535.607088 96.94 +L 535.607088 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.607088, 114.798281)" x="535.607088" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p5850334e9a)" d="M 50.18 95.209279 +L 558.72 95.209279 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 99.388419)" x="40.68" y="99.388419">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p5850334e9a)" d="M 50.18 70.767719 +L 558.72 70.767719 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 74.94686)" x="40.68" y="74.94686">1000</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#p5850334e9a)" d="M 50.18 46.326159 +L 558.72 46.326159 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 50.5053)" x="40.68" y="50.5053">2000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.295455 -57.373608 +L 73.295455 -56.907564 +L 77.964826 -59.55389 +L 82.634197 -62.459143 +L 87.303568 -64.630266 +L 91.97294 -66.050555 +L 96.642311 -66.717659 +L 101.311682 -67.086417 +L 105.981054 -67.638248 +L 110.650425 -68.064834 +L 115.319796 -68.375015 +L 119.989168 -68.601081 +L 124.658539 -68.712365 +L 129.32791 -68.815743 +L 133.997282 -68.84301 +L 138.666653 -68.818973 +L 143.336024 -68.90321 +L 148.005396 -69.008058 +L 152.674767 -69.105253 +L 157.344138 -69.251204 +L 162.01351 -69.30457 +L 166.682881 -69.240117 +L 171.352252 -69.377917 +L 176.021623 -69.542159 +L 180.690995 -69.725665 +L 185.360366 -70.185301 +L 190.029737 -70.667756 +L 194.699109 -71.168308 +L 199.36848 -71.486263 +L 204.037851 -71.715582 +L 208.707223 -71.97056 +L 213.376594 -72.142148 +L 218.045965 -72.410568 +L 222.715337 -72.740701 +L 227.384708 -73.380623 +L 232.054079 -74.22811 +L 236.723451 -74.732084 +L 241.392822 -75.097803 +L 246.062193 -75.237196 +L 250.731565 -75.335832 +L 255.400936 -75.421042 +L 260.070307 -75.775182 +L 264.739678 -76.575386 +L 269.40905 -77.554161 +L 274.078421 -78.237871 +L 278.747792 -78.676906 +L 283.417164 -79.052777 +L 288.086535 -79.33458 +L 292.755906 -79.535828 +L 297.425278 -79.722353 +L 302.094649 -79.851404 +L 306.76402 -79.99593 +L 311.433392 -80.132317 +L 316.102763 -80.11424 +L 320.772134 -80.137491 +L 325.441506 -80.221252 +L 330.110877 -80.324206 +L 334.780248 -80.425885 +L 339.44962 -80.383336 +L 344.118991 -80.437214 +L 348.788362 -80.528977 +L 353.457733 -80.660986 +L 358.127105 -80.720426 +L 362.796476 -80.688937 +L 367.465847 -80.699364 +L 372.135219 -80.668138 +L 376.80459 -80.676771 +L 381.473961 -80.723713 +L 386.143333 -80.823991 +L 390.812704 -80.900855 +L 395.482075 -80.975248 +L 400.151447 -81.02246 +L 404.820818 -80.988799 +L 409.490189 -80.99018 +L 414.159561 -81.058211 +L 418.828932 -81.098749 +L 423.498303 -81.100311 +L 428.167675 -81.087843 +L 432.837046 -81.049602 +L 437.506417 -81.079613 +L 442.175788 -81.172269 +L 446.84516 -81.175685 +L 451.514531 -81.147933 +L 456.183902 -81.146903 +L 460.853274 -81.189847 +L 465.522645 -81.174237 +L 470.192016 -81.156075 +L 474.861388 -81.214981 +L 479.530759 -81.30946 +L 484.20013 -81.351906 +L 488.869502 -81.374195 +L 493.538873 -81.390886 +L 498.208244 -81.424457 +L 502.877616 -81.415472 +L 507.546987 -81.402586 +L 512.216358 -81.413258 +L 516.88573 -81.398834 +L 521.555101 -81.417631 +L 526.224472 -81.439712 +L 530.893843 -81.507155 +L 535.563215 -81.460605 +L 535.563215 -89.523759 +L 535.563215 -89.523759 +L 530.893843 -89.565396 +L 526.224472 -89.467503 +L 521.555101 -89.462923 +L 516.88573 -89.482216 +L 512.216358 -89.528047 +L 507.546987 -89.498745 +L 502.877616 -89.516531 +L 498.208244 -89.571454 +L 493.538873 -89.533386 +L 488.869502 -89.515511 +L 484.20013 -89.524412 +L 479.530759 -89.472507 +L 474.861388 -89.301215 +L 470.192016 -89.200433 +L 465.522645 -89.223023 +L 460.853274 -89.240384 +L 456.183902 -89.188501 +L 451.514531 -89.190749 +L 446.84516 -89.209706 +L 442.175788 -89.191331 +L 437.506417 -89.05313 +L 432.837046 -89.022636 +L 428.167675 -89.076294 +L 423.498303 -89.108638 +L 418.828932 -89.11707 +L 414.159561 -89.044307 +L 409.490189 -88.972078 +L 404.820818 -88.974058 +L 400.151447 -89.024452 +L 395.482075 -88.950223 +L 390.812704 -88.833417 +L 386.143333 -88.71446 +L 381.473961 -88.560237 +L 376.80459 -88.517369 +L 372.135219 -88.468621 +L 367.465847 -88.510024 +L 362.796476 -88.44411 +L 358.127105 -88.451427 +L 353.457733 -88.379509 +L 348.788362 -88.242209 +L 344.118991 -88.128229 +L 339.44962 -88.064127 +L 334.780248 -88.127252 +L 330.110877 -88.034594 +L 325.441506 -87.866815 +L 320.772134 -87.764768 +L 316.102763 -87.704675 +L 311.433392 -87.735803 +L 306.76402 -87.517022 +L 302.094649 -87.309249 +L 297.425278 -87.084061 +L 292.755906 -86.85622 +L 288.086535 -86.545602 +L 283.417164 -86.13466 +L 278.747792 -85.53761 +L 274.078421 -85.025342 +L 269.40905 -84.371121 +L 264.739678 -83.655235 +L 260.070307 -83.097919 +L 255.400936 -82.787119 +L 250.731565 -82.666439 +L 246.062193 -82.42046 +L 241.392822 -82.072003 +L 236.723451 -81.579391 +L 232.054079 -80.832228 +L 227.384708 -79.795848 +L 222.715337 -79.070974 +L 218.045965 -78.658306 +L 213.376594 -78.172984 +L 208.707223 -77.618105 +L 204.037851 -76.946632 +L 199.36848 -76.300297 +L 194.699109 -75.308628 +L 190.029737 -73.796536 +L 185.360366 -72.332217 +L 180.690995 -70.683758 +L 176.021623 -69.819068 +L 171.352252 -69.662822 +L 166.682881 -69.561302 +L 162.01351 -69.525808 +L 157.344138 -69.431476 +L 152.674767 -69.319534 +L 148.005396 -69.244035 +L 143.336024 -69.246393 +L 138.666653 -69.182298 +L 133.997282 -69.139312 +L 129.32791 -69.093343 +L 124.658539 -69.014056 +L 119.989168 -68.830801 +L 115.319796 -68.628746 +L 110.650425 -68.315225 +L 105.981054 -67.9944 +L 101.311682 -67.537511 +L 96.642311 -67.022121 +L 91.97294 -66.26941 +L 87.303568 -65.023547 +L 82.634197 -62.940281 +L 77.964826 -60.117588 +L 73.295455 -57.373608 +z +" id="mb9b1bf4231" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#mb9b1bf4231" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.295455 -50.942376 +L 73.295455 -50.793191 +L 77.965019 -50.709624 +L 82.634583 -50.46455 +L 87.304147 -50.262577 +L 91.973711 -50.146364 +L 96.643275 -50.274528 +L 101.31284 -50.5944 +L 105.982404 -51.419159 +L 110.651968 -52.779308 +L 115.321532 -54.934047 +L 119.991096 -57.128275 +L 124.660661 -59.356205 +L 129.330225 -61.513361 +L 133.999789 -64.371032 +L 138.669353 -67.08519 +L 143.338917 -69.357911 +L 148.008481 -71.300902 +L 152.678046 -73.219654 +L 157.34761 -74.763851 +L 162.017174 -75.703524 +L 166.686738 -76.0793 +L 171.356302 -76.31746 +L 176.025866 -76.624828 +L 180.695431 -76.995058 +L 185.364995 -78.115294 +L 190.034559 -79.588677 +L 194.704123 -80.1863 +L 199.373687 -80.211864 +L 204.043252 -79.325039 +L 208.712816 -77.912744 +L 213.38238 -76.568069 +L 218.051944 -75.636899 +L 222.721508 -75.697334 +L 227.391072 -76.430656 +L 232.060637 -76.9449 +L 236.730201 -76.882377 +L 241.399765 -76.502327 +L 246.069329 -76.498293 +L 250.738893 -77.48819 +L 255.408458 -78.558725 +L 260.078022 -79.85186 +L 264.747586 -80.675951 +L 269.41715 -81.170319 +L 274.086714 -80.9237 +L 278.756278 -80.123415 +L 283.425843 -79.170926 +L 288.095407 -79.16766 +L 292.764971 -80.088077 +L 297.434535 -81.819202 +L 302.104099 -83.036128 +L 306.773663 -83.917943 +L 311.443228 -84.207594 +L 316.112792 -85.088554 +L 320.782356 -85.641796 +L 325.45192 -86.141569 +L 330.121484 -86.732758 +L 334.791049 -86.242141 +L 339.460613 -86.390261 +L 344.130177 -86.287381 +L 348.799741 -86.248113 +L 353.469305 -86.576385 +L 358.138869 -87.671529 +L 362.808434 -88.124154 +L 367.477998 -89.424973 +L 372.147562 -90.470716 +L 376.817126 -91.064865 +L 381.48669 -90.198179 +L 386.156255 -90.158889 +L 390.825819 -89.779704 +L 395.495383 -89.168409 +L 400.164947 -88.135431 +L 404.834511 -88.322283 +L 409.504075 -89.825448 +L 414.17364 -91.1838 +L 418.843204 -92.065761 +L 423.512768 -93.198842 +L 428.182332 -93.501642 +L 432.851896 -93.1676 +L 437.521461 -91.482389 +L 442.191025 -89.905491 +L 446.860589 -88.803086 +L 451.530153 -89.301264 +L 456.199717 -90.86588 +L 460.869281 -92.190785 +L 465.538846 -93.295184 +L 470.20841 -92.612207 +L 474.877974 -91.848334 +L 479.547538 -91.316292 +L 484.217102 -91.283682 +L 488.886666 -91.503368 +L 493.556231 -92.167408 +L 498.225795 -92.809164 +L 502.895359 -92.881781 +L 507.564923 -93.2023 +L 512.234487 -93.199283 +L 516.904052 -91.97424 +L 521.573616 -89.910955 +L 526.24318 -88.297374 +L 530.912744 -88.004561 +L 535.582308 -88.312028 +L 535.582308 -107.678034 +L 535.582308 -107.678034 +L 530.912744 -106.980083 +L 526.24318 -106.739454 +L 521.573616 -108.529188 +L 516.904052 -110.457132 +L 512.234487 -111.873636 +L 507.564923 -111.464207 +L 502.895359 -110.255947 +L 498.225795 -109.788991 +L 493.556231 -108.552781 +L 488.886666 -107.423182 +L 484.217102 -107.659567 +L 479.547538 -108.190739 +L 474.877974 -108.83688 +L 470.20841 -109.282549 +L 465.538846 -109.351817 +L 460.869281 -107.212574 +L 456.199717 -105.764439 +L 451.530153 -104.515428 +L 446.860589 -104.115615 +L 442.191025 -105.101488 +L 437.521461 -105.500594 +L 432.851896 -106.092997 +L 428.182332 -105.996473 +L 423.512768 -105.457665 +L 418.843204 -104.182682 +L 414.17364 -104.058454 +L 409.504075 -103.936039 +L 404.834511 -103.456064 +L 400.164947 -103.338023 +L 395.495383 -104.283616 +L 390.825819 -103.793507 +L 386.156255 -103.265153 +L 381.48669 -102.897414 +L 376.817126 -103.806101 +L 372.147562 -102.958572 +L 367.477998 -101.911014 +L 362.808434 -101.01705 +L 358.138869 -101.255112 +L 353.469305 -100.881462 +L 348.799741 -100.157307 +L 344.130177 -99.65412 +L 339.460613 -99.253969 +L 334.791049 -98.9107 +L 330.121484 -98.624841 +L 325.45192 -96.712682 +L 320.782356 -96.14841 +L 316.112792 -95.987402 +L 311.443228 -95.790703 +L 306.773663 -95.433493 +L 302.104099 -94.291488 +L 297.434535 -93.635339 +L 292.764971 -92.425896 +L 288.095407 -91.138812 +L 283.425843 -90.506587 +L 278.756278 -90.493835 +L 274.086714 -90.344562 +L 269.41715 -90.628861 +L 264.747586 -90.634278 +L 260.078022 -90.502284 +L 255.408458 -89.210087 +L 250.738893 -87.804699 +L 246.069329 -86.569797 +L 241.399765 -86.000308 +L 236.730201 -86.335914 +L 232.060637 -86.666406 +L 227.391072 -85.983947 +L 222.721508 -85.048186 +L 218.051944 -84.79474 +L 213.38238 -84.854013 +L 208.712816 -85.271219 +L 204.043252 -86.375121 +L 199.373687 -87.984444 +L 194.704123 -88.420262 +L 190.034559 -88.152615 +L 185.364995 -87.153503 +L 180.695431 -85.94344 +L 176.025866 -84.848529 +L 171.356302 -84.208159 +L 166.686738 -83.730082 +L 162.017174 -82.919655 +L 157.34761 -81.375423 +L 152.678046 -79.315501 +L 148.008481 -76.836392 +L 143.338917 -73.865671 +L 138.669353 -70.485264 +L 133.999789 -67.207264 +L 129.330225 -63.545022 +L 124.660661 -60.615496 +L 119.991096 -57.999132 +L 115.321532 -55.412414 +L 110.651968 -53.093053 +L 105.982404 -51.673878 +L 101.31284 -50.927847 +L 96.643275 -50.621906 +L 91.973711 -50.492269 +L 87.304147 -50.554652 +L 82.634583 -50.671601 +L 77.965019 -50.912547 +L 73.295455 -50.942376 +z +" id="m6f135361ac" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m6f135361ac" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 73.295455 -52.215122 +L 73.295455 -52.087436 +L 77.965243 -53.397379 +L 82.635032 -55.517196 +L 87.304821 -57.069371 +L 91.97461 -58.04391 +L 96.644399 -58.657219 +L 101.314187 -59.125175 +L 105.983976 -59.729559 +L 110.653765 -60.379092 +L 115.323554 -60.886373 +L 119.993343 -61.5354 +L 124.663131 -62.254678 +L 129.33292 -62.862212 +L 134.002709 -63.572617 +L 138.672498 -64.133843 +L 143.342287 -64.442589 +L 148.012075 -64.64662 +L 152.681864 -65.039126 +L 157.351653 -65.441572 +L 162.021442 -65.64106 +L 166.69123 -65.593393 +L 171.361019 -65.520831 +L 176.030808 -65.490686 +L 180.700597 -65.375989 +L 185.370386 -65.623371 +L 190.040174 -66.745848 +L 194.709963 -68.777199 +L 199.379752 -70.842109 +L 204.049541 -72.222442 +L 208.71933 -73.799652 +L 213.389118 -75.307721 +L 218.058907 -76.509752 +L 222.728696 -78.178209 +L 227.398485 -79.931007 +L 232.068274 -81.261129 +L 236.738062 -82.363607 +L 241.407851 -83.241897 +L 246.07764 -83.819888 +L 250.747429 -84.428944 +L 255.417218 -85.126581 +L 260.087006 -85.529904 +L 264.756795 -85.593136 +L 269.426584 -85.998513 +L 274.096373 -86.421729 +L 278.766162 -86.695976 +L 283.43595 -87.001941 +L 288.105739 -87.255359 +L 292.775528 -87.383045 +L 297.445317 -87.456975 +L 302.115106 -87.68049 +L 306.784894 -88.014529 +L 311.454683 -88.117395 +L 316.124472 -88.217903 +L 320.794261 -88.232907 +L 325.46405 -88.260234 +L 330.133838 -88.535468 +L 334.803627 -88.587147 +L 339.473416 -88.589832 +L 344.143205 -88.702028 +L 348.812994 -88.599956 +L 353.482782 -88.552727 +L 358.152571 -88.584442 +L 362.82236 -88.625215 +L 367.492149 -88.632992 +L 372.161938 -88.551441 +L 376.831726 -88.572621 +L 381.501515 -88.77437 +L 386.171304 -88.916702 +L 390.841093 -88.956412 +L 395.510882 -88.916361 +L 400.18067 -88.908644 +L 404.850459 -88.879737 +L 409.520248 -88.894552 +L 414.190037 -89.109478 +L 418.859826 -89.18372 +L 423.529614 -89.164508 +L 428.199403 -89.115647 +L 432.869192 -89.005559 +L 437.538981 -89.165781 +L 442.20877 -89.286519 +L 446.878558 -89.331499 +L 451.548347 -89.619422 +L 456.218136 -89.721911 +L 460.887925 -89.710188 +L 465.557713 -89.856331 +L 470.227502 -89.841171 +L 474.897291 -89.892073 +L 479.56708 -90.005735 +L 484.236869 -90.114354 +L 488.906657 -90.243413 +L 493.576446 -90.245087 +L 498.246235 -90.249016 +L 502.916024 -90.355414 +L 507.585813 -90.439492 +L 512.255601 -90.435606 +L 516.92539 -90.557422 +L 521.595179 -90.616741 +L 526.264968 -90.626375 +L 530.934757 -90.628138 +L 535.604545 -90.685727 +L 535.604545 -90.862794 +L 535.604545 -90.862794 +L 530.934757 -90.855841 +L 526.264968 -90.85969 +L 521.595179 -90.81004 +L 516.92539 -90.701553 +L 512.255601 -90.545708 +L 507.585813 -90.571464 +L 502.916024 -90.456624 +L 498.246235 -90.386911 +L 493.576446 -90.350345 +L 488.906657 -90.32789 +L 484.236869 -90.278048 +L 479.56708 -90.215462 +L 474.897291 -90.149643 +L 470.227502 -90.104508 +L 465.557713 -90.085354 +L 460.887925 -89.961839 +L 456.218136 -89.998236 +L 451.548347 -89.96869 +L 446.878558 -89.765138 +L 442.20877 -89.598761 +L 437.538981 -89.394473 +L 432.869192 -89.291085 +L 428.199403 -89.362796 +L 423.529614 -89.345186 +L 418.859826 -89.370785 +L 414.190037 -89.312991 +L 409.520248 -89.293084 +L 404.850459 -89.288523 +L 400.18067 -89.25154 +L 395.510882 -89.348206 +L 390.841093 -89.375084 +L 386.171304 -89.26335 +L 381.501515 -89.065566 +L 376.831726 -88.895702 +L 372.161938 -88.808817 +L 367.492149 -88.814511 +L 362.82236 -88.86055 +L 358.152571 -88.785962 +L 353.482782 -88.709346 +L 348.812994 -88.726809 +L 344.143205 -88.887068 +L 339.473416 -88.801108 +L 334.803627 -88.768178 +L 330.133838 -88.710735 +L 325.46405 -88.646472 +L 320.794261 -88.604148 +L 316.124472 -88.470717 +L 311.454683 -88.360185 +L 306.784894 -88.325881 +L 302.115106 -88.167837 +L 297.445317 -87.909269 +L 292.775528 -87.753919 +L 288.105739 -87.582065 +L 283.43595 -87.430684 +L 278.766162 -87.227034 +L 274.096373 -87.031896 +L 269.426584 -86.752196 +L 264.756795 -86.546179 +L 260.087006 -86.513455 +L 255.417218 -86.184351 +L 250.747429 -85.607789 +L 246.07764 -85.081699 +L 241.407851 -84.812103 +L 236.738062 -84.383395 +L 232.068274 -83.710315 +L 227.398485 -82.99429 +L 222.728696 -82.134371 +L 218.058907 -81.260307 +L 213.389118 -79.936627 +L 208.71933 -78.469385 +L 204.049541 -76.796472 +L 199.379752 -74.627272 +L 194.709963 -71.677884 +L 190.040174 -68.453257 +L 185.370386 -66.242311 +L 180.700597 -65.954316 +L 176.030808 -66.08631 +L 171.361019 -66.019396 +L 166.69123 -65.935167 +L 162.021442 -65.872235 +L 157.351653 -65.778317 +L 152.681864 -65.448884 +L 148.012075 -65.123216 +L 143.342287 -64.936187 +L 138.672498 -64.660101 +L 134.002709 -64.33285 +L 129.33292 -63.826307 +L 124.663131 -63.167204 +L 119.993343 -62.459113 +L 115.323554 -61.68131 +L 110.653765 -60.931101 +L 105.983976 -60.130022 +L 101.314187 -59.349289 +L 96.644399 -58.844671 +L 91.97461 -58.274031 +L 87.304821 -57.259533 +L 82.635032 -55.670893 +L 77.965243 -53.524884 +L 73.295455 -52.215122 +z +" id="m7c5b5fbbbb" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m7c5b5fbbbb" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 73.295455 -51.1774 +L 73.295455 -51.0804 +L 77.964887 -51.528341 +L 82.63432 -53.122336 +L 87.303752 -55.412949 +L 91.973185 -57.347361 +L 96.642617 -58.697396 +L 101.312049 -59.792526 +L 105.981482 -60.863647 +L 110.650914 -62.055297 +L 115.320347 -63.12678 +L 119.989779 -63.893081 +L 124.659212 -64.383487 +L 129.328644 -64.748195 +L 133.998077 -64.842394 +L 138.667509 -65.12035 +L 143.336942 -65.39643 +L 148.006374 -65.621969 +L 152.675807 -65.753141 +L 157.345239 -65.819244 +L 162.014672 -65.939753 +L 166.684104 -66.040416 +L 171.353537 -66.301671 +L 176.022969 -66.619972 +L 180.692402 -66.833465 +L 185.361834 -67.021151 +L 190.031267 -67.298503 +L 194.700699 -67.521019 +L 199.370132 -67.694962 +L 204.039564 -67.879307 +L 208.708997 -68.054075 +L 213.378429 -68.286058 +L 218.047862 -68.421357 +L 222.717294 -68.529879 +L 227.386727 -68.612162 +L 232.056159 -68.637243 +L 236.725592 -68.705635 +L 241.395024 -68.758302 +L 246.064457 -68.816231 +L 250.733889 -68.862157 +L 255.403322 -68.893474 +L 260.072754 -69.002732 +L 264.742187 -68.996229 +L 269.411619 -69.021687 +L 274.081052 -69.108717 +L 278.750484 -69.171809 +L 283.419917 -69.253999 +L 288.089349 -69.526121 +L 292.758782 -69.779218 +L 297.428214 -70.493748 +L 302.097647 -72.131516 +L 306.767079 -74.058688 +L 311.436512 -75.845521 +L 316.105944 -77.538031 +L 320.775377 -78.703718 +L 325.444809 -80.052607 +L 330.114242 -81.669186 +L 334.783674 -83.325957 +L 339.453106 -84.469735 +L 344.122539 -85.305599 +L 348.791971 -86.050519 +L 353.461404 -86.619428 +L 358.130836 -87.004522 +L 362.800269 -87.686996 +L 367.469701 -88.117584 +L 372.139134 -88.457961 +L 376.808566 -88.75091 +L 381.477999 -89.106236 +L 386.147431 -89.471454 +L 390.816864 -89.707104 +L 395.486296 -89.744772 +L 400.155729 -89.845229 +L 404.825161 -89.940955 +L 409.494594 -90.040777 +L 414.164026 -90.221237 +L 418.833459 -90.39083 +L 423.502891 -90.534269 +L 428.172324 -90.665177 +L 432.841756 -90.702881 +L 437.511189 -90.693655 +L 442.180621 -90.708238 +L 446.850054 -90.700363 +L 451.519486 -90.641343 +L 456.188919 -90.622952 +L 460.858351 -90.644882 +L 465.527784 -90.673087 +L 470.197216 -90.704896 +L 474.866649 -90.805981 +L 479.536081 -90.915334 +L 484.205514 -90.970035 +L 488.874946 -90.911426 +L 493.544379 -90.90125 +L 498.213811 -90.945527 +L 502.883244 -91.034965 +L 507.552676 -91.084966 +L 512.222109 -91.010406 +L 516.891541 -91.050668 +L 521.560974 -91.033329 +L 526.230406 -91.028538 +L 530.899839 -91.038622 +L 535.569271 -91.045602 +L 535.569271 -91.323167 +L 535.569271 -91.323167 +L 530.899839 -91.294214 +L 526.230406 -91.286627 +L 521.560974 -91.337586 +L 516.891541 -91.335727 +L 512.222109 -91.306853 +L 507.552676 -91.298339 +L 502.883244 -91.222621 +L 498.213811 -91.20008 +L 493.544379 -91.131321 +L 488.874946 -91.084165 +L 484.205514 -91.137997 +L 479.536081 -91.101502 +L 474.866649 -91.065654 +L 470.197216 -90.930754 +L 465.527784 -90.885795 +L 460.858351 -90.781217 +L 456.188919 -90.779507 +L 451.519486 -90.829919 +L 446.850054 -90.914375 +L 442.180621 -90.953503 +L 437.511189 -90.959751 +L 432.841756 -90.965655 +L 428.172324 -90.894555 +L 423.502891 -90.815668 +L 418.833459 -90.721285 +L 414.164026 -90.57538 +L 409.494594 -90.417782 +L 404.825161 -90.361718 +L 400.155729 -90.32908 +L 395.486296 -90.256047 +L 390.816864 -90.157784 +L 386.147431 -89.98335 +L 381.477999 -89.712003 +L 376.808566 -89.459939 +L 372.139134 -89.300255 +L 367.469701 -89.010594 +L 362.800269 -88.797537 +L 358.130836 -88.428371 +L 353.461404 -88.12593 +L 348.791971 -87.592571 +L 344.122539 -86.930854 +L 339.453106 -86.269385 +L 334.783674 -85.772018 +L 330.114242 -85.115064 +L 325.444809 -84.290959 +L 320.775377 -83.035183 +L 316.105944 -81.748939 +L 311.436512 -79.910144 +L 306.767079 -77.992396 +L 302.097647 -75.897042 +L 297.428214 -73.856664 +L 292.758782 -72.303767 +L 288.089349 -70.993469 +L 283.419917 -69.870349 +L 278.750484 -69.469422 +L 274.081052 -69.284574 +L 269.411619 -69.153799 +L 264.742187 -69.154846 +L 260.072754 -69.161749 +L 255.403322 -69.061834 +L 250.733889 -68.995895 +L 246.064457 -68.919464 +L 241.395024 -68.886717 +L 236.725592 -68.905575 +L 232.056159 -68.859464 +L 227.386727 -68.828501 +L 222.717294 -68.706203 +L 218.047862 -68.543167 +L 213.378429 -68.449004 +L 208.708997 -68.317665 +L 204.039564 -68.20158 +L 199.370132 -68.092947 +L 194.700699 -67.934042 +L 190.031267 -67.740658 +L 185.361834 -67.478373 +L 180.692402 -67.336606 +L 176.022969 -67.085489 +L 171.353537 -66.844017 +L 166.684104 -66.597196 +L 162.014672 -66.433381 +L 157.345239 -66.269556 +L 152.675807 -66.191546 +L 148.006374 -66.081716 +L 143.336942 -65.851653 +L 138.667509 -65.502682 +L 133.998077 -65.223745 +L 129.328644 -65.075472 +L 124.659212 -64.757111 +L 119.989779 -64.260205 +L 115.320347 -63.601774 +L 110.650914 -62.852619 +L 105.981482 -61.675449 +L 101.312049 -60.456356 +L 96.642617 -59.243031 +L 91.973185 -57.827288 +L 87.303752 -55.842502 +L 82.63432 -53.285285 +L 77.964887 -51.624221 +L 73.295455 -51.1774 +z +" id="m001b45c5ca" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#m001b45c5ca" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 73.295455 -57.956853 +L 73.295455 -57.454138 +L 77.964831 -59.648088 +L 82.634207 -61.853003 +L 87.303583 -63.002635 +L 91.972958 -64.116452 +L 96.642334 -65.069321 +L 101.31171 -65.393203 +L 105.981086 -65.480898 +L 110.650462 -66.167948 +L 115.319838 -66.537723 +L 119.989214 -67.076812 +L 124.65859 -68.044642 +L 129.327966 -68.997789 +L 133.997342 -69.499259 +L 138.666718 -69.796715 +L 143.336094 -70.178455 +L 148.00547 -70.647633 +L 152.674846 -70.837783 +L 157.344222 -70.822508 +L 162.013598 -70.926843 +L 166.682974 -70.808714 +L 171.35235 -70.418859 +L 176.021726 -70.296884 +L 180.691102 -70.666591 +L 185.360478 -71.787823 +L 190.029854 -72.956613 +L 194.69923 -74.704184 +L 199.368606 -76.293773 +L 204.037982 -77.416283 +L 208.707358 -78.290751 +L 213.376734 -80.021997 +L 218.04611 -81.272944 +L 222.715486 -82.816232 +L 227.384862 -84.307732 +L 232.054238 -85.569489 +L 236.723614 -86.250507 +L 241.39299 -86.637007 +L 246.062366 -86.523624 +L 250.731742 -86.797264 +L 255.401118 -86.954612 +L 260.070494 -87.20482 +L 264.73987 -87.355244 +L 269.409246 -87.498421 +L 274.078622 -87.40468 +L 278.747998 -87.654699 +L 283.417374 -88.164597 +L 288.08675 -88.62283 +L 292.756126 -88.76194 +L 297.425502 -88.60979 +L 302.094878 -88.226879 +L 306.764254 -88.275063 +L 311.43363 -88.356267 +L 316.103006 -88.467317 +L 320.772382 -88.021227 +L 325.441758 -88.141324 +L 330.111134 -88.176652 +L 334.78051 -88.262637 +L 339.449886 -88.251828 +L 344.119262 -88.461943 +L 348.788638 -88.627481 +L 353.458014 -88.877351 +L 358.12739 -88.925328 +L 362.796766 -88.69366 +L 367.466142 -88.276163 +L 372.135518 -88.573892 +L 376.804894 -88.667937 +L 381.47427 -88.470757 +L 386.143646 -88.594945 +L 390.813022 -89.204454 +L 395.482398 -89.598613 +L 400.151774 -89.637523 +L 404.82115 -89.683389 +L 409.490525 -89.721321 +L 414.159901 -89.593738 +L 418.829277 -89.377848 +L 423.498653 -89.33549 +L 428.168029 -89.263611 +L 432.837405 -89.42882 +L 437.506781 -89.217368 +L 442.176157 -89.180457 +L 446.845533 -89.143047 +L 451.514909 -89.100023 +L 456.184285 -89.171287 +L 460.853661 -89.111208 +L 465.523037 -88.883481 +L 470.192413 -88.815598 +L 474.861789 -88.889417 +L 479.531165 -89.073267 +L 484.200541 -88.965161 +L 488.869917 -88.936178 +L 493.539293 -89.027302 +L 498.208669 -89.223448 +L 502.878045 -89.35312 +L 507.547421 -89.163836 +L 512.216797 -88.91755 +L 516.886173 -88.834419 +L 521.555549 -89.059398 +L 526.224925 -89.271618 +L 530.894301 -89.230018 +L 535.563677 -88.939325 +L 535.563677 -90.067966 +L 535.563677 -90.067966 +L 530.894301 -90.280361 +L 526.224925 -90.299679 +L 521.555549 -90.103538 +L 516.886173 -89.870794 +L 512.216797 -89.904546 +L 507.547421 -89.883597 +L 502.878045 -89.848094 +L 498.208669 -89.590425 +L 493.539293 -89.479353 +L 488.869917 -89.693446 +L 484.200541 -89.773981 +L 479.531165 -89.77431 +L 474.861789 -89.743173 +L 470.192413 -89.541967 +L 465.523037 -89.288862 +L 460.853661 -89.501755 +L 456.184285 -89.53801 +L 451.514909 -89.537257 +L 446.845533 -89.577043 +L 442.176157 -89.636811 +L 437.506781 -89.710624 +L 432.837405 -89.792657 +L 428.168029 -89.647552 +L 423.498653 -89.714297 +L 418.829277 -89.746228 +L 414.159901 -89.944484 +L 409.490525 -90.003123 +L 404.82115 -89.940309 +L 400.151774 -89.97054 +L 395.482398 -89.942293 +L 390.813022 -89.689442 +L 386.143646 -89.356006 +L 381.47427 -89.345701 +L 376.804894 -89.392811 +L 372.135518 -89.264971 +L 367.466142 -89.161853 +L 362.796766 -89.300405 +L 358.12739 -89.471316 +L 353.458014 -89.560814 +L 348.788638 -89.3518 +L 344.119262 -89.206011 +L 339.449886 -89.046553 +L 334.78051 -88.988845 +L 330.111134 -88.988623 +L 325.441758 -89.095719 +L 320.772382 -89.052152 +L 316.103006 -89.282367 +L 311.43363 -89.104364 +L 306.764254 -88.904241 +L 302.094878 -88.668691 +L 297.425502 -88.932692 +L 292.756126 -89.149205 +L 288.08675 -88.974265 +L 283.417374 -88.753975 +L 278.747998 -88.404582 +L 274.078622 -88.091993 +L 269.409246 -88.088118 +L 264.73987 -87.986958 +L 260.070494 -88.036236 +L 255.401118 -87.783019 +L 250.731742 -87.784263 +L 246.062366 -87.753671 +L 241.39299 -87.861994 +L 236.723614 -87.579366 +L 232.054238 -87.255552 +L 227.384862 -86.535125 +L 222.715486 -85.785595 +L 218.04611 -85.284661 +L 213.376734 -84.692778 +L 208.707358 -83.829083 +L 204.037982 -82.9312 +L 199.368606 -81.651659 +L 194.69923 -80.370865 +L 190.029854 -79.234202 +L 185.360478 -78.653527 +L 180.691102 -78.018288 +L 176.021726 -77.64826 +L 171.35235 -77.497032 +L 166.682974 -77.704411 +L 162.013598 -77.757618 +L 157.344222 -77.602322 +L 152.674846 -77.184741 +L 148.00547 -76.450961 +L 143.336094 -75.740986 +L 138.666718 -74.954109 +L 133.997342 -74.117047 +L 129.327966 -72.913424 +L 124.65859 -71.063778 +L 119.989214 -69.151457 +L 115.319838 -68.001542 +L 110.650462 -66.827202 +L 105.981086 -66.493377 +L 101.31171 -66.247927 +L 96.642334 -65.731079 +L 91.972958 -64.76668 +L 87.303583 -63.625772 +L 82.634207 -62.209319 +L 77.964831 -60.077022 +L 73.295455 -57.956853 +z +" id="mc16fcce266" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#mc16fcce266" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 73.295455 -52.569307 +L 73.295455 -52.517602 +L 77.965238 -54.115109 +L 82.635022 -56.06528 +L 87.304806 -57.678962 +L 91.974589 -59.009198 +L 96.644373 -60.083481 +L 101.314157 -60.954701 +L 105.98394 -61.71476 +L 110.653724 -62.337795 +L 115.323507 -62.796626 +L 119.993291 -63.13709 +L 124.663075 -63.435427 +L 129.332858 -63.866663 +L 134.002642 -64.200717 +L 138.672426 -64.615924 +L 143.342209 -64.970827 +L 148.011993 -65.371748 +L 152.681777 -65.782399 +L 157.35156 -66.050058 +L 162.021344 -66.240066 +L 166.691128 -66.384477 +L 171.360911 -66.694286 +L 176.030695 -66.946228 +L 180.700479 -67.208665 +L 185.370262 -67.441901 +L 190.040046 -67.684705 +L 194.70983 -67.801369 +L 199.379613 -67.837384 +L 204.049397 -67.934987 +L 208.719181 -67.979687 +L 213.388964 -67.920011 +L 218.058748 -67.886255 +L 222.728532 -67.902379 +L 227.398315 -67.993498 +L 232.068099 -68.194875 +L 236.737883 -68.847303 +L 241.407666 -69.514883 +L 246.07745 -70.271719 +L 250.747234 -71.256839 +L 255.417017 -71.944835 +L 260.086801 -72.423242 +L 264.756585 -72.63754 +L 269.426368 -72.828832 +L 274.096152 -72.848727 +L 278.765936 -73.440385 +L 283.435719 -75.387517 +L 288.105503 -77.134707 +L 292.775287 -78.906804 +L 297.44507 -80.683729 +L 302.114854 -82.242598 +L 306.784638 -83.384465 +L 311.454421 -84.201532 +L 316.124205 -84.740151 +L 320.793989 -85.459513 +L 325.463772 -86.094983 +L 330.133556 -86.703903 +L 334.80334 -87.081181 +L 339.473123 -87.376752 +L 344.142907 -87.655252 +L 348.812691 -87.921749 +L 353.482474 -88.169358 +L 358.152258 -88.38445 +L 362.822041 -88.684554 +L 367.491825 -88.980351 +L 372.161609 -89.191947 +L 376.831392 -89.431881 +L 381.501176 -89.599223 +L 386.17096 -89.65712 +L 390.840743 -89.799111 +L 395.510527 -89.814192 +L 400.180311 -89.930634 +L 404.850094 -90.123929 +L 409.519878 -90.179828 +L 414.189662 -90.300475 +L 418.859445 -90.343306 +L 423.529229 -90.414472 +L 428.199013 -90.296715 +L 432.868796 -90.331983 +L 437.53858 -90.420662 +L 442.208364 -90.613664 +L 446.878147 -90.66996 +L 451.547931 -90.686724 +L 456.217715 -90.847343 +L 460.887498 -90.982755 +L 465.557282 -90.972492 +L 470.227066 -90.993512 +L 474.896849 -91.059017 +L 479.566633 -90.962546 +L 484.236417 -90.944726 +L 488.9062 -90.963515 +L 493.575984 -91.06704 +L 498.245768 -91.163596 +L 502.915551 -91.18614 +L 507.585335 -91.180634 +L 512.255119 -91.254405 +L 516.924902 -91.23934 +L 521.594686 -91.207733 +L 526.26447 -91.235465 +L 530.934253 -91.21492 +L 535.604037 -91.245947 +L 535.604037 -91.414726 +L 535.604037 -91.414726 +L 530.934253 -91.346744 +L 526.26447 -91.349562 +L 521.594686 -91.325617 +L 516.924902 -91.391856 +L 512.255119 -91.394108 +L 507.585335 -91.336144 +L 502.915551 -91.28902 +L 498.245768 -91.24019 +L 493.575984 -91.188217 +L 488.9062 -91.187809 +L 484.236417 -91.187018 +L 479.566633 -91.166458 +L 474.896849 -91.247372 +L 470.227066 -91.147309 +L 465.557282 -91.096361 +L 460.887498 -91.107161 +L 456.217715 -91.05089 +L 451.547931 -90.914986 +L 446.878147 -90.843339 +L 442.208364 -90.835866 +L 437.53858 -90.686781 +L 432.868796 -90.641677 +L 428.199013 -90.635269 +L 423.529229 -90.791375 +L 418.859445 -90.696999 +L 414.189662 -90.571316 +L 409.519878 -90.528611 +L 404.850094 -90.506537 +L 400.180311 -90.414923 +L 395.510527 -90.307888 +L 390.840743 -90.22771 +L 386.17096 -90.105647 +L 381.501176 -90.082126 +L 376.831392 -89.970189 +L 372.161609 -89.777209 +L 367.491825 -89.537024 +L 362.822041 -89.339838 +L 358.152258 -89.155738 +L 353.482474 -89.013322 +L 348.812691 -88.838711 +L 344.142907 -88.642191 +L 339.473123 -88.515695 +L 334.80334 -88.336462 +L 330.133556 -88.199673 +L 325.463772 -87.788344 +L 320.793989 -87.299671 +L 316.124205 -86.898158 +L 311.454421 -86.503231 +L 306.784638 -85.913789 +L 302.114854 -85.163234 +L 297.44507 -84.353729 +L 292.775287 -83.462922 +L 288.105503 -82.346201 +L 283.435719 -80.991373 +L 278.765936 -79.68094 +L 274.096152 -79.061387 +L 269.426368 -78.634032 +L 264.756585 -77.875792 +L 260.086801 -77.189981 +L 255.417017 -76.214072 +L 250.747234 -75.121707 +L 246.07745 -73.485393 +L 241.407666 -71.61802 +L 236.737883 -69.568269 +L 232.068099 -68.68133 +L 227.398315 -68.512276 +L 222.728532 -68.316391 +L 218.058748 -68.27271 +L 213.388964 -68.288503 +L 208.719181 -68.29111 +L 204.049397 -68.291207 +L 199.379613 -68.164661 +L 194.70983 -68.13347 +L 190.040046 -68.027737 +L 185.370262 -67.895268 +L 180.700479 -67.798954 +L 176.030695 -67.494626 +L 171.360911 -67.168846 +L 166.691128 -66.899599 +L 162.021344 -66.700406 +L 157.35156 -66.457601 +L 152.681777 -66.205566 +L 148.011993 -65.733382 +L 143.342209 -65.325778 +L 138.672426 -64.914227 +L 134.002642 -64.452052 +L 129.332858 -64.215993 +L 124.663075 -63.864845 +L 119.993291 -63.510696 +L 115.323507 -63.042577 +L 110.653724 -62.537976 +L 105.98394 -61.951517 +L 101.314157 -61.241832 +L 96.644373 -60.363456 +L 91.974589 -59.224442 +L 87.304806 -57.861138 +L 82.635022 -56.199774 +L 77.965238 -54.20394 +L 73.295455 -52.569307 +z +" id="m64c4ddbeee" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#m64c4ddbeee" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 73.295455 -54.397018 +L 73.295455 -54.10412 +L 77.965191 -55.744428 +L 82.634927 -57.367546 +L 87.304663 -58.598752 +L 91.974399 -59.436436 +L 96.644135 -60.254342 +L 101.313871 -60.7865 +L 105.983607 -61.083897 +L 110.653343 -61.451352 +L 115.323079 -61.772699 +L 119.992815 -62.249947 +L 124.662551 -62.846815 +L 129.332287 -63.23152 +L 134.002023 -63.55452 +L 138.671759 -63.895007 +L 143.341495 -64.12215 +L 148.011231 -64.143561 +L 152.680967 -64.190488 +L 157.350703 -64.54281 +L 162.020439 -64.877297 +L 166.690175 -65.011848 +L 171.359911 -65.200233 +L 176.029647 -65.664366 +L 180.699383 -65.862016 +L 185.369119 -65.915027 +L 190.038855 -66.179821 +L 194.708591 -66.26444 +L 199.378327 -66.066749 +L 204.048063 -65.901149 +L 208.717799 -66.043858 +L 213.387535 -66.095222 +L 218.057271 -66.058799 +L 222.727007 -66.060881 +L 227.396743 -66.078581 +L 232.06648 -66.241888 +L 236.736216 -66.384952 +L 241.405952 -66.561787 +L 246.075688 -66.733804 +L 250.745424 -66.728381 +L 255.41516 -66.707077 +L 260.084896 -66.622723 +L 264.754632 -66.38431 +L 269.424368 -66.30804 +L 274.094104 -66.493103 +L 278.76384 -66.656616 +L 283.433576 -66.506204 +L 288.103312 -66.487607 +L 292.773048 -66.592173 +L 297.442784 -66.66897 +L 302.11252 -66.781773 +L 306.782256 -66.77219 +L 311.451992 -66.852142 +L 316.121728 -67.082153 +L 320.791464 -67.130823 +L 325.4612 -67.060321 +L 330.130936 -67.014489 +L 334.800672 -67.006934 +L 339.470408 -67.08578 +L 344.140144 -67.069536 +L 348.80988 -67.028343 +L 353.479616 -66.941688 +L 358.149352 -66.666251 +L 362.819088 -66.708666 +L 367.488824 -66.690667 +L 372.15856 -66.744655 +L 376.828296 -66.968763 +L 381.498032 -67.102498 +L 386.167768 -67.186073 +L 390.837504 -67.177436 +L 395.50724 -67.141359 +L 400.176977 -67.208391 +L 404.846713 -67.344956 +L 409.516449 -67.399291 +L 414.186185 -67.501145 +L 418.855921 -67.578032 +L 423.525657 -67.555214 +L 428.195393 -67.457094 +L 432.865129 -67.361861 +L 437.534865 -67.34816 +L 442.204601 -67.236842 +L 446.874337 -67.287915 +L 451.544073 -67.453843 +L 456.213809 -67.650576 +L 460.883545 -67.826756 +L 465.553281 -67.907715 +L 470.223017 -67.970212 +L 474.892753 -68.087195 +L 479.562489 -68.135347 +L 484.232225 -68.218647 +L 488.901961 -68.135102 +L 493.571697 -67.882039 +L 498.241433 -67.856662 +L 502.911169 -68.12419 +L 507.580905 -68.31253 +L 512.250641 -68.571239 +L 516.920377 -68.709078 +L 521.590113 -68.886588 +L 526.259849 -69.053572 +L 530.929585 -69.027856 +L 535.599321 -68.961755 +L 535.599321 -69.574749 +L 535.599321 -69.574749 +L 530.929585 -69.583334 +L 526.259849 -69.562941 +L 521.590113 -69.498896 +L 516.920377 -69.323522 +L 512.250641 -69.213938 +L 507.580905 -69.198181 +L 502.911169 -69.207367 +L 498.241433 -69.076005 +L 493.571697 -69.074652 +L 488.901961 -69.161933 +L 484.232225 -69.140913 +L 479.562489 -69.143146 +L 474.892753 -69.253715 +L 470.223017 -69.239383 +L 465.553281 -69.232471 +L 460.883545 -69.163727 +L 456.213809 -69.036362 +L 451.544073 -68.90039 +L 446.874337 -68.806341 +L 442.204601 -68.705808 +L 437.534865 -68.75953 +L 432.865129 -68.802737 +L 428.195393 -68.889766 +L 423.525657 -68.985402 +L 418.855921 -69.080377 +L 414.186185 -69.119559 +L 409.516449 -69.06115 +L 404.846713 -69.018062 +L 400.176977 -68.930551 +L 395.50724 -68.888019 +L 390.837504 -68.892484 +L 386.167768 -68.873741 +L 381.498032 -68.828293 +L 376.828296 -68.751624 +L 372.15856 -68.560965 +L 367.488824 -68.512467 +L 362.819088 -68.476847 +L 358.149352 -68.449296 +L 353.479616 -68.60984 +L 348.80988 -68.709879 +L 344.140144 -68.741878 +L 339.470408 -68.704434 +L 334.800672 -68.663052 +L 330.130936 -68.732509 +L 325.4612 -68.765202 +L 320.791464 -68.768681 +L 316.121728 -68.645481 +L 311.451992 -68.377026 +L 306.782256 -68.238732 +L 302.11252 -68.211316 +L 297.442784 -68.087346 +L 292.773048 -68.016056 +L 288.103312 -67.890866 +L 283.433576 -67.829055 +L 278.76384 -67.968956 +L 274.094104 -67.908891 +L 269.424368 -67.845495 +L 264.754632 -67.944965 +L 260.084896 -68.087649 +L 255.41516 -68.102408 +L 250.745424 -68.089995 +L 246.075688 -68.094592 +L 241.405952 -68.050208 +L 236.736216 -67.950214 +L 232.06648 -67.800332 +L 227.396743 -67.595884 +L 222.727007 -67.529572 +L 218.057271 -67.482396 +L 213.387535 -67.414668 +L 208.717799 -67.377477 +L 204.048063 -67.284599 +L 199.378327 -67.366737 +L 194.708591 -67.390952 +L 190.038855 -67.331094 +L 185.369119 -67.183067 +L 180.699383 -67.153684 +L 176.029647 -67.023906 +L 171.359911 -66.783602 +L 166.690175 -66.657468 +L 162.020439 -66.533768 +L 157.350703 -66.212801 +L 152.680967 -65.894799 +L 148.011231 -65.805257 +L 143.341495 -65.78919 +L 138.671759 -65.515856 +L 134.002023 -65.009081 +L 129.332287 -64.522676 +L 124.662551 -64.107516 +L 119.992815 -63.530503 +L 115.323079 -63.049436 +L 110.653343 -62.774096 +L 105.983607 -62.298493 +L 101.313871 -61.824427 +L 96.644135 -61.135972 +L 91.974399 -60.142305 +L 87.304663 -59.146963 +L 82.634927 -57.857205 +L 77.965191 -56.17882 +L 73.295455 -54.397018 +z +" id="md9b700d42a" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p5850334e9a)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#md9b700d42a" y="144"/> + </g> + </g> + <g id="line2d_10"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 86.859414 +L 77.964826 84.164261 +L 82.634197 81.300288 +L 87.303568 79.173094 +L 91.97294 77.840017 +L 96.642311 77.13011 +L 101.311682 76.688036 +L 105.981054 76.183676 +L 110.650425 75.80997 +L 115.319796 75.49812 +L 119.989168 75.284059 +L 124.658539 75.136789 +L 129.32791 75.045457 +L 133.997282 75.008839 +L 138.666653 74.999364 +L 143.336024 74.925198 +L 148.005396 74.873953 +L 152.674767 74.787607 +L 157.344138 74.65866 +L 162.01351 74.584811 +L 166.682881 74.599291 +L 171.352252 74.479631 +L 176.021623 74.319386 +L 180.690995 73.795288 +L 185.360366 72.741241 +L 190.029737 71.767854 +L 194.699109 70.761532 +L 199.36848 70.10672 +L 204.037851 69.668893 +L 208.707223 69.205667 +L 213.376594 68.842434 +L 218.045965 68.465563 +L 222.715337 68.094163 +L 227.384708 67.411765 +L 232.054079 66.469831 +L 236.723451 65.844262 +L 241.392822 65.415097 +L 246.062193 65.171172 +L 250.731565 64.998865 +L 255.400936 64.895919 +L 260.070307 64.56345 +L 264.739678 63.88469 +L 269.40905 63.037359 +L 274.078421 62.368394 +L 278.747792 61.892742 +L 283.417164 61.406281 +L 288.086535 61.059909 +L 292.755906 60.803976 +L 297.425278 60.596793 +L 302.094649 60.419674 +L 306.76402 60.243524 +L 311.433392 60.06594 +L 316.102763 60.090543 +L 320.772134 60.048871 +L 325.441506 59.955967 +L 330.110877 59.8206 +L 334.780248 59.723432 +L 339.44962 59.776269 +L 344.118991 59.717279 +L 348.788362 59.614407 +L 353.457733 59.479753 +L 358.127105 59.414074 +L 362.796476 59.433477 +L 367.465847 59.395306 +L 372.135219 59.43162 +L 376.80459 59.40293 +L 381.473961 59.358025 +L 386.143333 59.230775 +L 390.812704 59.132864 +L 395.482075 59.037265 +L 400.151447 58.976544 +L 404.820818 59.018571 +L 409.490189 59.018871 +L 414.159561 58.948741 +L 418.828932 58.892091 +L 423.498303 58.895526 +L 428.167675 58.917932 +L 432.837046 58.963881 +L 437.506417 58.933629 +L 442.175788 58.8182 +L 446.84516 58.807304 +L 451.514531 58.830659 +L 456.183902 58.832298 +L 460.853274 58.784884 +L 465.522645 58.80137 +L 470.192016 58.821746 +L 474.861388 58.741902 +L 479.530759 58.609016 +L 484.20013 58.561841 +L 488.869502 58.555147 +L 493.538873 58.537864 +L 498.208244 58.502045 +L 502.877616 58.533999 +L 507.546987 58.549334 +L 512.216358 58.529348 +L 516.88573 58.559475 +L 521.555101 58.559723 +L 526.224472 58.546392 +L 530.893843 58.463724 +L 535.563215 58.507818 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 93.132216 +L 77.965019 93.188914 +L 82.634583 93.431924 +L 87.304147 93.591386 +L 91.973711 93.680684 +L 96.643275 93.551783 +L 101.31284 93.238876 +L 105.982404 92.453481 +L 110.651968 91.063819 +L 115.321532 88.82677 +L 119.991096 86.436296 +L 124.660661 84.01415 +L 129.330225 81.470809 +L 133.999789 78.210852 +L 138.669353 75.214773 +L 143.338917 72.388209 +L 148.008481 69.931353 +L 152.678046 67.732422 +L 157.34761 65.930363 +L 162.017174 64.68841 +L 166.686738 64.095309 +L 171.356302 63.737191 +L 176.025866 63.263322 +L 180.695431 62.530751 +L 185.364995 61.365602 +L 190.034559 60.129354 +L 194.704123 59.696719 +L 199.373687 59.901846 +L 204.043252 61.14992 +L 208.712816 62.408018 +L 213.38238 63.288959 +L 218.051944 63.78418 +L 222.721508 63.62724 +L 227.391072 62.792698 +L 232.060637 62.194347 +L 236.730201 62.390854 +L 241.399765 62.748683 +L 246.069329 62.465955 +L 250.738893 61.353555 +L 255.408458 60.115594 +L 260.078022 58.822928 +L 264.747586 58.344886 +L 269.41715 58.10041 +L 274.086714 58.365869 +L 278.756278 58.691375 +L 283.425843 59.161244 +L 288.095407 58.846764 +L 292.764971 57.743013 +L 297.434535 56.27273 +L 302.104099 55.336192 +L 306.773663 54.324282 +L 311.443228 54.000852 +L 316.112792 53.462022 +L 320.782356 53.104897 +L 325.45192 52.572875 +L 330.121484 51.3212 +L 334.791049 51.423579 +L 339.460613 51.177885 +L 344.130177 51.02925 +L 348.799741 50.79729 +L 353.469305 50.271076 +L 358.138869 49.536679 +L 362.808434 49.429398 +L 367.477998 48.332007 +L 372.147562 47.285356 +L 376.817126 46.564517 +L 381.48669 47.452203 +L 386.156255 47.287979 +L 390.825819 47.213394 +L 395.495383 47.273987 +L 400.164947 48.263273 +L 404.834511 48.110826 +L 409.504075 47.119257 +L 414.17364 46.378873 +L 418.843204 45.875779 +L 423.512768 44.671746 +L 428.182332 44.250943 +L 432.851896 44.369702 +L 437.521461 45.508509 +L 442.191025 46.49651 +L 446.860589 47.540649 +L 451.530153 47.091654 +L 456.199717 45.68484 +L 460.869281 44.29832 +L 465.538846 42.6765 +L 470.20841 43.052622 +L 474.877974 43.657393 +L 479.547538 44.246485 +L 484.217102 44.528375 +L 488.886666 44.536725 +L 493.556231 43.639906 +L 498.225795 42.700923 +L 502.895359 42.431136 +L 507.564923 41.666747 +L 512.234487 41.46354 +L 516.904052 42.784314 +L 521.573616 44.779928 +L 526.24318 46.481586 +L 530.912744 46.507678 +L 535.582308 46.004969 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 91.848721 +L 77.965243 90.538869 +L 82.635032 88.405956 +L 87.304821 86.835548 +L 91.97461 85.84103 +L 96.644399 85.249055 +L 101.314187 84.762768 +L 105.983976 84.070209 +L 110.653765 83.344904 +L 115.323554 82.716159 +L 119.993343 82.002743 +L 124.663131 81.289059 +L 129.33292 80.65574 +L 134.002709 80.047267 +L 138.672498 79.603028 +L 143.342287 79.310612 +L 148.012075 79.115082 +L 152.681864 78.755995 +L 157.351653 78.390055 +L 162.021442 78.243352 +L 166.69123 78.23572 +L 171.361019 78.229886 +L 176.030808 78.211502 +L 180.700597 78.334848 +L 185.370386 78.067159 +L 190.040174 76.400448 +L 194.709963 73.772459 +L 199.379752 71.26531 +L 204.049541 69.490543 +L 208.71933 67.865481 +L 213.389118 66.377826 +L 218.058907 65.11497 +L 222.728696 63.84371 +L 227.398485 62.537351 +L 232.068274 61.514278 +L 236.738062 60.626499 +L 241.407851 59.973 +L 246.07764 59.549206 +L 250.747429 58.981634 +L 255.417218 58.344534 +L 260.087006 57.978321 +L 264.756795 57.930342 +L 269.426584 57.624645 +L 274.096373 57.273187 +L 278.766162 57.038495 +L 283.43595 56.783687 +L 288.105739 56.581288 +L 292.775528 56.431518 +L 297.445317 56.316878 +L 302.115106 56.075836 +L 306.784894 55.829795 +L 311.454683 55.76121 +L 316.124472 55.65569 +L 320.794261 55.581472 +L 325.46405 55.546647 +L 330.133838 55.376898 +L 334.803627 55.322337 +L 339.473416 55.30453 +L 344.143205 55.205452 +L 348.812994 55.336617 +L 353.482782 55.368964 +L 358.152571 55.314798 +L 362.82236 55.257117 +L 367.492149 55.276248 +L 372.161938 55.319871 +L 376.831726 55.265839 +L 381.501515 55.080032 +L 386.171304 54.909974 +L 390.841093 54.834252 +L 395.510882 54.867717 +L 400.18067 54.919908 +L 404.850459 54.91587 +L 409.520248 54.906182 +L 414.190037 54.788765 +L 418.859826 54.722748 +L 423.529614 54.745153 +L 428.199403 54.760779 +L 432.869192 54.851678 +L 437.538981 54.719873 +L 442.20877 54.55736 +L 446.878558 54.451682 +L 451.548347 54.205944 +L 456.218136 54.139927 +L 460.887925 54.163987 +L 465.557713 54.029158 +L 470.227502 54.027161 +L 474.897291 53.979142 +L 479.56708 53.889402 +L 484.236869 53.803799 +L 488.906657 53.714349 +L 493.576446 53.702284 +L 498.246235 53.682037 +L 502.916024 53.593981 +L 507.585813 53.494522 +L 512.255601 53.509343 +L 516.92539 53.370512 +L 521.595179 53.286609 +L 526.264968 53.256968 +L 530.934757 53.25801 +L 535.604545 53.22574 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 92.8711 +L 77.964887 92.423719 +L 82.63432 90.79619 +L 87.303752 88.372275 +L 91.973185 86.412675 +L 96.642617 85.029786 +L 101.312049 83.875559 +L 105.981482 82.730452 +L 110.650914 81.546042 +L 115.320347 80.635723 +L 119.989779 79.923357 +L 124.659212 79.429701 +L 129.328644 79.088167 +L 133.998077 78.966931 +L 138.667509 78.688484 +L 143.336942 78.375958 +L 148.006374 78.148157 +L 152.675807 78.027656 +L 157.345239 77.9556 +L 162.014672 77.813433 +L 166.684104 77.681194 +L 171.353537 77.427156 +L 176.022969 77.147269 +L 180.692402 76.914964 +L 185.361834 76.750238 +L 190.031267 76.480419 +L 194.700699 76.272469 +L 199.370132 76.106046 +L 204.039564 75.959556 +L 208.708997 75.81413 +L 213.378429 75.632469 +L 218.047862 75.517738 +L 222.717294 75.381959 +L 227.386727 75.279668 +L 232.056159 75.251646 +L 236.725592 75.194395 +L 241.395024 75.17749 +L 246.064457 75.132152 +L 250.733889 75.070974 +L 255.403322 75.022346 +L 260.072754 74.91776 +L 264.742187 74.924462 +L 269.411619 74.912257 +L 274.081052 74.803354 +L 278.750484 74.679385 +L 283.419917 74.437826 +L 288.089349 73.740205 +L 292.758782 72.958507 +L 297.428214 71.824794 +L 302.097647 69.985721 +L 306.767079 67.974458 +L 311.436512 66.122168 +L 316.105944 64.356515 +L 320.775377 63.130549 +L 325.444809 61.828217 +L 330.114242 60.607875 +L 334.783674 59.451013 +L 339.453106 58.63044 +L 344.122539 57.881774 +L 348.791971 57.178455 +L 353.461404 56.627321 +L 358.130836 56.283553 +L 362.800269 55.757734 +L 367.469701 55.435911 +L 372.139134 55.120892 +L 376.808566 54.894575 +L 381.477999 54.59088 +L 386.147431 54.272598 +L 390.816864 54.067556 +L 395.486296 53.999591 +L 400.155729 53.912846 +L 404.825161 53.848664 +L 409.494594 53.770721 +L 414.164026 53.601691 +L 418.833459 53.443942 +L 423.502891 53.325031 +L 428.172324 53.220134 +L 432.841756 53.165732 +L 437.511189 53.173297 +L 442.180621 53.169129 +L 446.850054 53.192631 +L 451.519486 53.264369 +L 456.188919 53.298771 +L 460.858351 53.286951 +L 465.527784 53.220559 +L 470.197216 53.182175 +L 474.866649 53.064182 +L 479.536081 52.991582 +L 484.205514 52.945984 +L 488.874946 53.002204 +L 493.544379 52.983714 +L 498.213811 52.927196 +L 502.883244 52.871207 +L 507.552676 52.808347 +L 512.222109 52.84137 +L 516.891541 52.806802 +L 521.560974 52.814543 +L 526.230406 52.842417 +L 530.899839 52.833582 +L 535.569271 52.815616 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 86.294505 +L 77.964831 84.137445 +L 82.634207 81.968839 +L 87.303583 80.685797 +L 91.972958 79.558434 +L 96.642334 78.5998 +L 101.31171 78.179435 +L 105.981086 78.012862 +L 110.650462 77.502425 +L 115.319838 76.730367 +L 119.989214 75.885865 +L 124.65859 74.44579 +L 129.327966 73.044394 +L 133.997342 72.191847 +L 138.666718 71.624588 +L 143.336094 71.040279 +L 148.00547 70.450703 +L 152.674846 69.988738 +L 157.344222 69.787585 +L 162.013598 69.65777 +L 166.682974 69.743437 +L 171.35235 70.042054 +L 176.021726 70.027428 +L 180.691102 69.65756 +L 185.360478 68.779325 +L 190.029854 67.904593 +L 194.69923 66.462475 +L 199.368606 65.027284 +L 204.037982 63.826259 +L 208.707358 62.940083 +L 213.376734 61.642613 +L 218.04611 60.721198 +L 222.715486 59.699086 +L 227.384862 58.578571 +L 232.054238 57.587479 +L 236.723614 57.085064 +L 241.39299 56.7505 +L 246.062366 56.861352 +L 250.731742 56.709236 +L 255.401118 56.631185 +L 260.070494 56.379472 +L 264.73987 56.328899 +L 269.409246 56.20673 +L 274.078622 56.251664 +L 278.747998 55.97036 +L 283.417374 55.540714 +L 288.08675 55.201452 +L 292.756126 55.044428 +L 297.425502 55.228759 +L 302.094878 55.552215 +L 306.764254 55.410348 +L 311.43363 55.269684 +L 316.103006 55.125158 +L 320.772382 55.463311 +L 325.441758 55.381478 +L 330.111134 55.417362 +L 334.78051 55.374259 +L 339.449886 55.350809 +L 344.119262 55.166023 +L 348.788638 55.010359 +L 353.458014 54.780917 +L 358.12739 54.801678 +L 362.796766 55.002968 +L 367.466142 55.280992 +L 372.135518 55.080569 +L 376.804894 54.969626 +L 381.47427 55.091771 +L 386.143646 55.024524 +L 390.813022 54.553052 +L 395.482398 54.229547 +L 400.151774 54.195968 +L 404.82115 54.188151 +L 409.490525 54.137778 +L 414.159901 54.230889 +L 418.829277 54.437962 +L 423.498653 54.475107 +L 428.168029 54.544418 +L 432.837405 54.389262 +L 437.506781 54.536004 +L 442.176157 54.591366 +L 446.845533 54.639955 +L 451.514909 54.68136 +L 456.184285 54.645352 +L 460.853661 54.693519 +L 465.523037 54.913829 +L 470.192413 54.821217 +L 474.861789 54.683705 +L 479.531165 54.576212 +L 484.200541 54.630429 +L 488.869917 54.685188 +L 493.539293 54.746672 +L 498.208669 54.593063 +L 502.878045 54.399393 +L 507.547421 54.476284 +L 512.216797 54.588952 +L 516.886173 54.647393 +L 521.555549 54.418532 +L 526.224925 54.214351 +L 530.894301 54.244811 +L 535.563677 54.496354 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 91.456546 +L 77.965238 89.840475 +L 82.635022 87.867473 +L 87.304806 86.22995 +L 91.974589 84.88318 +L 96.644373 83.776532 +L 101.314157 82.901734 +L 105.98394 82.166861 +L 110.653724 81.562114 +L 115.323507 81.080398 +L 119.993291 80.676107 +L 124.663075 80.349864 +L 129.332858 79.958672 +L 134.002642 79.673616 +L 138.672426 79.234925 +L 143.342209 78.851698 +L 148.011993 78.447435 +L 152.681777 78.006017 +L 157.35156 77.746171 +L 162.021344 77.529764 +L 166.691128 77.357962 +L 171.360911 77.068434 +L 176.030695 76.779573 +L 180.700479 76.496191 +L 185.370262 76.331416 +L 190.040046 76.143779 +L 194.70983 76.032581 +L 199.379613 75.998977 +L 204.049397 75.886903 +L 208.719181 75.864602 +L 213.388964 75.895743 +L 218.058748 75.920517 +L 222.728532 75.890615 +L 227.398315 75.747113 +L 232.068099 75.561897 +L 236.737883 74.792214 +L 241.407666 73.433548 +L 246.07745 72.121444 +L 250.747234 70.810727 +L 255.417017 69.920547 +L 260.086801 69.193389 +L 264.756585 68.743334 +L 269.426368 68.268568 +L 274.096152 68.044943 +L 278.765936 67.439338 +L 283.435719 65.810555 +L 288.105503 64.259546 +L 292.775287 62.815137 +L 297.44507 61.481271 +L 302.114854 60.297084 +L 306.784638 59.350873 +L 311.454421 58.647618 +L 316.124205 58.180845 +L 320.793989 57.620408 +L 325.463772 57.058337 +L 330.133556 56.548212 +L 334.80334 56.291178 +L 339.473123 56.053776 +L 344.142907 55.851279 +L 348.812691 55.61977 +L 353.482474 55.40866 +L 358.152258 55.229906 +L 362.822041 54.987804 +L 367.491825 54.741313 +L 372.161609 54.515422 +L 376.831392 54.298965 +L 381.501176 54.159326 +L 386.17096 54.118617 +L 390.840743 53.98659 +L 395.510527 53.93896 +L 400.180311 53.827222 +L 404.850094 53.684767 +L 409.519878 53.645781 +L 414.189662 53.564104 +L 418.859445 53.479847 +L 423.529229 53.397077 +L 428.199013 53.534008 +L 432.868796 53.51317 +L 437.53858 53.446279 +L 442.208364 53.275235 +L 446.878147 53.24335 +L 451.547931 53.199145 +L 456.217715 53.050884 +L 460.887498 52.955042 +L 465.557282 52.965573 +L 470.227066 52.929589 +L 474.896849 52.846805 +L 479.566633 52.935498 +L 484.236417 52.934128 +L 488.9062 52.924338 +L 493.575984 52.872371 +L 498.245768 52.798107 +L 502.915551 52.76242 +L 507.585335 52.741611 +L 512.255119 52.675744 +L 516.924902 52.684402 +L 521.594686 52.733325 +L 526.26447 52.707487 +L 530.934253 52.719168 +L 535.604037 52.669664 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_16"> + <path clip-path="url(#p5850334e9a)" d="M 73.295455 89.749431 +L 77.965191 88.038376 +L 82.634927 86.387624 +L 87.304663 85.127142 +L 91.974399 84.21063 +L 96.644135 83.304843 +L 101.313871 82.694537 +L 105.983607 82.308805 +L 110.653343 81.887276 +L 115.323079 81.588932 +L 119.992815 81.109775 +L 124.662551 80.522834 +L 129.332287 80.122902 +L 134.002023 79.7182 +L 138.671759 79.294569 +L 143.341495 79.04433 +L 148.011231 79.025591 +L 152.680967 78.957357 +L 157.350703 78.622195 +L 162.020439 78.294468 +L 166.690175 78.165342 +L 171.359911 78.008082 +L 176.029647 77.655864 +L 180.699383 77.49215 +L 185.369119 77.450953 +L 190.038855 77.244543 +L 194.708591 77.172304 +L 199.378327 77.283257 +L 204.048063 77.407126 +L 208.717799 77.289332 +L 213.387535 77.245055 +L 218.057271 77.229403 +L 222.727007 77.204774 +L 227.396743 77.162767 +L 232.06648 76.97889 +L 236.736216 76.832417 +L 241.405952 76.694003 +L 246.075688 76.585802 +L 250.745424 76.590812 +L 255.41516 76.595258 +L 260.084896 76.644814 +L 264.754632 76.835362 +L 269.424368 76.923232 +L 274.094104 76.799003 +L 278.76384 76.687214 +L 283.433576 76.832371 +L 288.103312 76.810763 +L 292.773048 76.695886 +L 297.442784 76.621842 +L 302.11252 76.503456 +L 306.782256 76.494539 +L 311.451992 76.385416 +L 316.121728 76.136183 +L 320.791464 76.050248 +L 325.4612 76.087239 +L 330.130936 76.126501 +L 334.800672 76.165007 +L 339.470408 76.104893 +L 344.140144 76.094293 +L 348.80988 76.130889 +L 353.479616 76.224236 +L 358.149352 76.442227 +L 362.819088 76.407244 +L 367.488824 76.398433 +L 372.15856 76.34719 +L 376.828296 76.139807 +L 381.498032 76.034604 +L 386.167768 75.970093 +L 390.837504 75.96504 +L 395.50724 75.985311 +L 400.176977 75.930529 +L 404.846713 75.818491 +L 409.516449 75.76978 +L 414.186185 75.689648 +L 418.855921 75.670796 +L 423.525657 75.729692 +L 428.195393 75.82657 +L 432.865129 75.917701 +L 437.534865 75.946155 +L 442.204601 76.028675 +L 446.874337 75.952872 +L 451.544073 75.822883 +L 456.213809 75.656531 +L 460.883545 75.504759 +L 465.553281 75.429907 +L 470.223017 75.395202 +L 474.892753 75.329545 +L 479.562489 75.360753 +L 484.232225 75.32022 +L 488.901961 75.351483 +L 493.571697 75.521654 +L 498.241433 75.533666 +L 502.911169 75.334222 +L 507.580905 75.244644 +L 512.250641 75.107412 +L 516.920377 74.9837 +L 521.590113 74.807258 +L 526.259849 74.691744 +L 530.929585 74.694405 +L 535.599321 74.731748 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.18 96.94 +L 50.18 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.18 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.18 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_11"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.45, 23.04)" x="304.45" y="23.04">Seaquest</text> + </g> + </g> + </g> + <defs> + <clipPath id="p5850334e9a"> + <rect height="67.9" width="508.54" x="50.18" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.18 96.94 +L 558.72 96.94 +L 558.72 29.04 +L 50.18 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 96.94 +L 73.295455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.295455, 114.798281)" x="73.295455" y="114.798281">0.0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p2812e3a93b)" d="M 165.757402 96.94 +L 165.757402 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.757402, 114.798281)" x="165.757402" y="114.798281">0.2</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p2812e3a93b)" d="M 258.21935 96.94 +L 258.21935 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.21935, 114.798281)" x="258.21935" y="114.798281">0.4</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p2812e3a93b)" d="M 350.681297 96.94 +L 350.681297 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.681297, 114.798281)" x="350.681297" y="114.798281">0.6</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p2812e3a93b)" d="M 443.143245 96.94 +L 443.143245 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.143245, 114.798281)" x="443.143245" y="114.798281">0.8</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p2812e3a93b)" d="M 535.605193 96.94 +L 535.605193 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.605193, 114.798281)" x="535.605193" y="114.798281">1.0</text> + </g> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 558.72, 128.444219)" x="558.72" y="128.444219">1e7</text> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p2812e3a93b)" d="M 50.18 76.193758 +L 558.72 76.193758 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 80.372899)" x="40.68" y="80.372899">500</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p2812e3a93b)" d="M 50.18 51.084633 +L 558.72 51.084633 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 55.263774)" x="40.68" y="55.263774">1000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.295455 -52.129533 +L 73.295455 -51.760394 +L 77.965243 -52.556804 +L 82.635032 -53.620873 +L 87.304821 -54.622873 +L 91.97461 -55.723471 +L 96.644399 -56.890811 +L 101.314187 -58.293223 +L 105.983976 -59.588988 +L 110.653765 -60.417813 +L 115.323554 -60.97421 +L 119.993343 -61.79752 +L 124.663131 -62.037127 +L 129.33292 -62.186536 +L 134.002709 -62.715598 +L 138.672498 -63.300642 +L 143.342287 -63.827546 +L 148.012075 -64.502823 +L 152.681864 -64.974807 +L 157.351653 -65.236664 +L 162.021442 -65.162518 +L 166.69123 -64.996958 +L 171.361019 -65.175347 +L 176.030808 -65.695288 +L 180.700597 -66.00778 +L 185.370386 -66.314895 +L 190.040174 -66.610849 +L 194.709963 -66.796485 +L 199.379752 -67.035063 +L 204.049541 -67.278573 +L 208.71933 -67.418708 +L 213.389118 -67.831631 +L 218.058907 -68.155049 +L 222.728696 -68.283082 +L 227.398485 -68.336737 +L 232.068274 -68.699392 +L 236.738062 -69.120264 +L 241.407851 -69.343551 +L 246.07764 -69.44541 +L 250.747429 -69.603099 +L 255.417218 -70.064314 +L 260.087006 -70.470355 +L 264.756795 -70.684091 +L 269.426584 -70.879442 +L 274.096373 -71.111908 +L 278.766162 -71.454981 +L 283.43595 -71.663431 +L 288.105739 -72.052368 +L 292.775528 -72.509095 +L 297.445317 -72.884259 +L 302.115106 -72.771967 +L 306.784894 -72.528828 +L 311.454683 -72.585451 +L 316.124472 -72.044924 +L 320.794261 -71.862648 +L 325.46405 -71.666249 +L 330.133838 -71.841991 +L 334.803627 -72.004599 +L 339.473416 -72.226204 +L 344.143205 -72.633143 +L 348.812994 -73.177922 +L 353.482782 -73.473616 +L 358.152571 -73.725872 +L 362.82236 -73.884627 +L 367.492149 -74.055962 +L 372.161938 -74.24118 +L 376.831726 -74.572502 +L 381.501515 -74.688176 +L 386.171304 -74.937176 +L 390.841093 -75.264817 +L 395.510882 -75.558118 +L 400.18067 -75.698351 +L 404.850459 -75.811826 +L 409.520248 -75.920274 +L 414.190037 -76.361616 +L 418.859826 -76.269899 +L 423.529614 -76.383046 +L 428.199403 -76.585707 +L 432.869192 -77.111278 +L 437.538981 -77.536951 +L 442.20877 -77.477827 +L 446.878558 -77.619637 +L 451.548347 -77.730496 +L 456.218136 -77.527384 +L 460.887925 -77.583442 +L 465.557713 -77.638952 +L 470.227502 -77.888532 +L 474.897291 -77.886479 +L 479.56708 -77.789088 +L 484.236869 -77.901159 +L 488.906657 -78.275913 +L 493.576446 -78.54535 +L 498.246235 -78.808215 +L 502.916024 -78.623766 +L 507.585813 -78.679898 +L 512.255601 -78.778295 +L 516.92539 -78.831776 +L 521.595179 -78.98232 +L 526.264968 -79.10497 +L 530.934757 -79.116847 +L 535.604545 -79.051529 +L 535.604545 -83.521817 +L 535.604545 -83.521817 +L 530.934757 -83.502112 +L 526.264968 -83.118197 +L 521.595179 -82.955205 +L 516.92539 -82.568203 +L 512.255601 -82.511433 +L 507.585813 -82.421248 +L 502.916024 -82.270732 +L 498.246235 -82.794449 +L 493.576446 -82.299036 +L 488.906657 -81.94865 +L 484.236869 -81.643173 +L 479.56708 -81.736089 +L 474.897291 -81.826027 +L 470.227502 -81.908344 +L 465.557713 -81.78942 +L 460.887925 -81.389058 +L 456.218136 -81.237213 +L 451.548347 -81.349881 +L 446.878558 -81.30309 +L 442.20877 -81.455536 +L 437.538981 -81.893405 +L 432.869192 -81.361619 +L 428.199403 -80.831567 +L 423.529614 -80.226382 +L 418.859826 -79.670363 +L 414.190037 -79.68954 +L 409.520248 -79.213476 +L 404.850459 -79.184974 +L 400.18067 -79.072195 +L 395.510882 -78.980682 +L 390.841093 -78.625005 +L 386.171304 -78.144803 +L 381.501515 -77.634086 +L 376.831726 -77.309506 +L 372.161938 -76.974824 +L 367.492149 -77.206352 +L 362.82236 -77.128256 +L 358.152571 -77.028662 +L 353.482782 -77.061742 +L 348.812994 -76.790776 +L 344.143205 -76.297368 +L 339.473416 -75.793463 +L 334.803627 -75.447384 +L 330.133838 -75.166407 +L 325.46405 -74.866346 +L 320.794261 -74.603312 +L 316.124472 -74.317807 +L 311.454683 -74.553585 +L 306.784894 -74.561377 +L 302.115106 -74.979367 +L 297.445317 -74.95296 +L 292.775528 -74.32671 +L 288.105739 -73.634753 +L 283.43595 -73.25182 +L 278.766162 -72.913812 +L 274.096373 -72.437822 +L 269.426584 -72.156812 +L 264.756795 -71.936978 +L 260.087006 -71.618614 +L 255.417218 -70.906364 +L 250.747429 -70.491262 +L 246.07764 -70.466567 +L 241.407851 -70.466742 +L 236.738062 -70.271796 +L 232.068274 -69.824102 +L 227.398485 -69.551756 +L 222.728696 -69.637868 +L 218.058907 -69.473586 +L 213.389118 -68.999843 +L 208.71933 -68.741886 +L 204.049541 -68.659776 +L 199.379752 -68.23722 +L 194.709963 -67.904429 +L 190.040174 -67.778721 +L 185.370386 -67.202926 +L 180.700597 -66.892427 +L 176.030808 -66.761826 +L 171.361019 -66.46861 +L 166.69123 -66.354353 +L 162.021442 -66.307961 +L 157.351653 -66.100151 +L 152.681864 -65.760147 +L 148.012075 -65.396664 +L 143.342287 -65.022519 +L 138.672498 -64.492334 +L 134.002709 -63.993543 +L 129.33292 -63.473564 +L 124.663131 -63.066806 +L 119.993343 -62.801104 +L 115.323554 -62.219613 +L 110.653765 -61.548662 +L 105.983976 -60.577321 +L 101.314187 -59.305545 +L 96.644399 -58.075215 +L 91.97461 -56.85353 +L 87.304821 -55.66522 +L 82.635032 -54.339978 +L 77.965243 -53.032684 +L 73.295455 -52.129533 +z +" id="mebeda63b7b" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#mebeda63b7b" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.295455 -51.112533 +L 73.295455 -51.006832 +L 77.965217 -51.3935 +L 82.63498 -52.170533 +L 87.304742 -52.844697 +L 91.974505 -53.446739 +L 96.644268 -53.992249 +L 101.31403 -54.613689 +L 105.983793 -55.329058 +L 110.653556 -56.307527 +L 115.323318 -57.331178 +L 119.993081 -58.683132 +L 124.662844 -59.857333 +L 129.332606 -60.638358 +L 134.002369 -61.013706 +L 138.672132 -61.215134 +L 143.341894 -61.405317 +L 148.011657 -61.640221 +L 152.68142 -62.122518 +L 157.351182 -62.715248 +L 162.020945 -63.185237 +L 166.690707 -63.56691 +L 171.36047 -63.784373 +L 176.030233 -64.095994 +L 180.699995 -64.370509 +L 185.369758 -64.615564 +L 190.039521 -64.838426 +L 194.709283 -64.930331 +L 199.379046 -65.181648 +L 204.048809 -65.350146 +L 208.718571 -65.603507 +L 213.388334 -65.686377 +L 218.058097 -65.893619 +L 222.727859 -65.830495 +L 227.397622 -65.87789 +L 232.067385 -66.065567 +L 236.737147 -66.235416 +L 241.40691 -66.449699 +L 246.076672 -66.577542 +L 250.746435 -66.40937 +L 255.416198 -66.613863 +L 260.08596 -66.712852 +L 264.755723 -66.893724 +L 269.425486 -66.823772 +L 274.095248 -66.67837 +L 278.765011 -66.819219 +L 283.434774 -66.981431 +L 288.104536 -67.167608 +L 292.774299 -67.406825 +L 297.444062 -67.578725 +L 302.113824 -67.569355 +L 306.783587 -67.508872 +L 311.45335 -67.567459 +L 316.123112 -67.693292 +L 320.792875 -67.985384 +L 325.462637 -67.954529 +L 330.1324 -67.572633 +L 334.802163 -67.642942 +L 339.471925 -67.675772 +L 344.141688 -67.748452 +L 348.811451 -67.725744 +L 353.481213 -67.530863 +L 358.150976 -67.580592 +L 362.820739 -67.717516 +L 367.490501 -68.075419 +L 372.160264 -67.892318 +L 376.830027 -67.943574 +L 381.499789 -68.35596 +L 386.169552 -68.570984 +L 390.839314 -68.711837 +L 395.509077 -68.960966 +L 400.17884 -69.212485 +L 404.848602 -69.212627 +L 409.518365 -69.212498 +L 414.188128 -69.229259 +L 418.85789 -69.289072 +L 423.527653 -69.579277 +L 428.197416 -70.107807 +L 432.867178 -70.453164 +L 437.536941 -70.677338 +L 442.206704 -70.554201 +L 446.876466 -70.479495 +L 451.546229 -70.466852 +L 456.215992 -70.090863 +L 460.885754 -69.743511 +L 465.555517 -69.945863 +L 470.225279 -70.1289 +L 474.895042 -70.002649 +L 479.564805 -70.076463 +L 484.234567 -70.396042 +L 488.90433 -70.889678 +L 493.574093 -71.135212 +L 498.243855 -71.2971 +L 502.913618 -71.230692 +L 507.583381 -71.010972 +L 512.253143 -70.762417 +L 516.922906 -71.095952 +L 521.592669 -71.176768 +L 526.262431 -70.890262 +L 530.932194 -70.976093 +L 535.601957 -71.060807 +L 535.601957 -72.924802 +L 535.601957 -72.924802 +L 530.932194 -73.049809 +L 526.262431 -73.251658 +L 521.592669 -73.185994 +L 516.922906 -72.941317 +L 512.253143 -72.366927 +L 507.583381 -72.550656 +L 502.913618 -72.699479 +L 498.243855 -72.963161 +L 493.574093 -72.644382 +L 488.90433 -72.173067 +L 484.234567 -71.860314 +L 479.564805 -71.699859 +L 474.895042 -71.736877 +L 470.225279 -71.778363 +L 465.555517 -71.585091 +L 460.885754 -71.536821 +L 456.215992 -71.661959 +L 451.546229 -71.660166 +L 446.876466 -71.614822 +L 442.206704 -71.613929 +L 437.536941 -71.626007 +L 432.867178 -71.47792 +L 428.197416 -71.296842 +L 423.527653 -70.785892 +L 418.85789 -70.299943 +L 414.188128 -70.295073 +L 409.518365 -70.440756 +L 404.848602 -70.580681 +L 400.17884 -70.643695 +L 395.509077 -70.332503 +L 390.839314 -70.055342 +L 386.169552 -69.470824 +L 381.499789 -69.251769 +L 376.830027 -69.123479 +L 372.160264 -68.999433 +L 367.490501 -69.164587 +L 362.820739 -69.028388 +L 358.150976 -69.046472 +L 353.481213 -68.891513 +L 348.811451 -68.714964 +L 344.141688 -68.63641 +L 339.471925 -68.419057 +L 334.802163 -68.343161 +L 330.1324 -68.11179 +L 325.462637 -68.548518 +L 320.792875 -68.462985 +L 316.123112 -67.985796 +L 311.45335 -68.044006 +L 306.783587 -68.166514 +L 302.113824 -68.326788 +L 297.444062 -68.427288 +L 292.774299 -68.399848 +L 288.104536 -67.947941 +L 283.434774 -67.798772 +L 278.765011 -67.830305 +L 274.095248 -67.881129 +L 269.425486 -68.056923 +L 264.755723 -67.932281 +L 260.08596 -67.81255 +L 255.416198 -67.618981 +L 250.746435 -67.339347 +L 246.076672 -67.288536 +L 241.40691 -66.953216 +L 236.737147 -66.728569 +L 232.067385 -66.644142 +L 227.397622 -66.406657 +L 222.727859 -66.443187 +L 218.058097 -66.680668 +L 213.388334 -66.717678 +L 208.718571 -66.597899 +L 204.048809 -66.415525 +L 199.379046 -66.313829 +L 194.709283 -66.099072 +L 190.039521 -66.063348 +L 185.369758 -65.643158 +L 180.699995 -65.293539 +L 176.030233 -64.950356 +L 171.36047 -64.415052 +L 166.690707 -64.068709 +L 162.020945 -63.851086 +L 157.351182 -63.561795 +L 152.68142 -62.95919 +L 148.011657 -62.530236 +L 143.341894 -62.191042 +L 138.672132 -61.998006 +L 134.002369 -61.785623 +L 129.332606 -61.302985 +L 124.662844 -60.495639 +L 119.993081 -59.3184 +L 115.323318 -57.825559 +L 110.653556 -56.728589 +L 105.983793 -55.842413 +L 101.31403 -55.102509 +L 96.644268 -54.442344 +L 91.974505 -53.818208 +L 87.304742 -53.171699 +L 82.63498 -52.365633 +L 77.965217 -51.515963 +L 73.295455 -51.112533 +z +" id="m3ab86e529a" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m3ab86e529a" y="144"/> + </g> + </g> + <g id="PolyCollection_3"> + <defs> + <path d="M 73.295455 -50.302365 +L 73.295455 -50.146364 +L 77.965184 -50.467131 +L 82.634914 -50.730737 +L 87.304643 -50.979791 +L 91.974373 -51.212132 +L 96.644102 -51.573011 +L 101.313831 -52.136406 +L 105.983561 -52.790639 +L 110.65329 -53.220054 +L 115.32302 -53.518157 +L 119.992749 -54.167918 +L 124.662479 -54.961352 +L 129.332208 -55.691983 +L 134.001938 -56.564472 +L 138.671667 -57.400702 +L 143.341397 -57.991168 +L 148.011126 -58.434562 +L 152.680856 -58.564281 +L 157.350585 -59.39778 +L 162.020315 -60.072654 +L 166.690044 -60.588818 +L 171.359774 -61.360398 +L 176.029503 -62.123779 +L 180.699233 -62.963119 +L 185.368962 -63.754696 +L 190.038692 -64.774301 +L 194.708421 -65.821574 +L 199.378151 -66.684077 +L 204.04788 -67.50019 +L 208.71761 -68.254214 +L 213.387339 -69.043785 +L 218.057069 -70.089123 +L 222.726798 -71.157139 +L 227.396528 -72.339277 +L 232.066257 -73.07408 +L 236.735987 -73.487279 +L 241.405716 -73.780711 +L 246.075446 -74.322313 +L 250.745175 -74.851801 +L 255.414905 -75.471127 +L 260.084634 -75.74673 +L 264.754364 -76.226796 +L 269.424093 -76.475084 +L 274.093823 -76.708368 +L 278.763552 -76.881481 +L 283.433282 -76.886684 +L 288.103011 -76.974739 +L 292.772741 -77.348238 +L 297.44247 -77.357498 +L 302.1122 -77.514734 +L 306.781929 -77.54304 +L 311.451659 -77.641031 +L 316.121388 -78.06691 +L 320.791118 -78.244342 +L 325.460847 -78.426974 +L 330.130577 -78.566305 +L 334.800306 -78.589006 +L 339.470036 -78.951944 +L 344.139765 -79.188883 +L 348.809494 -79.492573 +L 353.479224 -79.725729 +L 358.148953 -80.009028 +L 362.818683 -80.592348 +L 367.488412 -80.591602 +L 372.158142 -80.281602 +L 376.827871 -79.982813 +L 381.497601 -80.125131 +L 386.16733 -79.829643 +L 390.83706 -79.983528 +L 395.506789 -80.035205 +L 400.176519 -80.330641 +L 404.846248 -80.457448 +L 409.515978 -80.698564 +L 414.185707 -80.73621 +L 418.855437 -80.856215 +L 423.525166 -80.792093 +L 428.194896 -80.372331 +L 432.864625 -80.52116 +L 437.534355 -80.596436 +L 442.204084 -80.879323 +L 446.873814 -80.811333 +L 451.543543 -81.023373 +L 456.213273 -81.039725 +L 460.883002 -81.418293 +L 465.552732 -81.835582 +L 470.222461 -81.87588 +L 474.892191 -82.322862 +L 479.56192 -82.674744 +L 484.23165 -82.147691 +L 488.901379 -82.453987 +L 493.571109 -82.290326 +L 498.240838 -82.707446 +L 502.910568 -83.05171 +L 507.580297 -82.786889 +L 512.250027 -82.650804 +L 516.919756 -82.289774 +L 521.589486 -82.598189 +L 526.259215 -82.452984 +L 530.928945 -82.43804 +L 535.598674 -82.619073 +L 535.598674 -88.697827 +L 535.598674 -88.697827 +L 530.928945 -88.330311 +L 526.259215 -87.821404 +L 521.589486 -87.295133 +L 516.919756 -86.361475 +L 512.250027 -86.208351 +L 507.580297 -85.719621 +L 502.910568 -85.309567 +L 498.240838 -84.440155 +L 493.571109 -85.091618 +L 488.901379 -85.609371 +L 484.23165 -85.187082 +L 479.56192 -85.040825 +L 474.892191 -84.486504 +L 470.222461 -83.39897 +L 465.552732 -83.262942 +L 460.883002 -82.673111 +L 456.213273 -82.249871 +L 451.543543 -81.951294 +L 446.873814 -81.708195 +L 442.204084 -81.819281 +L 437.534355 -81.675728 +L 432.864625 -81.771041 +L 428.194896 -81.769569 +L 423.525166 -82.12547 +L 418.855437 -82.438981 +L 414.185707 -82.096114 +L 409.515978 -81.738717 +L 404.846248 -81.208648 +L 400.176519 -80.844398 +L 395.506789 -80.630187 +L 390.83706 -80.543812 +L 386.16733 -80.732035 +L 381.497601 -80.985026 +L 376.827871 -80.820736 +L 372.158142 -80.984904 +L 367.488412 -81.164001 +L 362.818683 -81.133277 +L 358.148953 -80.740801 +L 353.479224 -80.338474 +L 348.809494 -80.020883 +L 344.139765 -79.861947 +L 339.470036 -79.453342 +L 334.800306 -79.113617 +L 330.130577 -79.224742 +L 325.460847 -79.335813 +L 320.791118 -79.107918 +L 316.121388 -78.864853 +L 311.451659 -78.121779 +L 306.781929 -77.937265 +L 302.1122 -78.040195 +L 297.44247 -78.062906 +L 292.772741 -78.186311 +L 288.103011 -77.594171 +L 283.433282 -77.530738 +L 278.763552 -77.685045 +L 274.093823 -77.608457 +L 269.424093 -77.74075 +L 264.754364 -77.451721 +L 260.084634 -77.285094 +L 255.414905 -76.859528 +L 250.745175 -76.185496 +L 246.075446 -75.410283 +L 241.405716 -74.657196 +L 236.735987 -74.464034 +L 232.066257 -74.399045 +L 227.396528 -73.829339 +L 222.726798 -73.090589 +L 218.057069 -72.35493 +L 213.387339 -71.437535 +L 208.71761 -70.689522 +L 204.04788 -69.716728 +L 199.378151 -68.803724 +L 194.708421 -67.712053 +L 190.038692 -66.446459 +L 185.368962 -65.397483 +L 180.699233 -64.507824 +L 176.029503 -63.566808 +L 171.359774 -62.708882 +L 166.690044 -61.718116 +L 162.020315 -60.842103 +L 157.350585 -60.046905 +L 152.680856 -59.220755 +L 148.011126 -58.843466 +L 143.341397 -58.326393 +L 138.671667 -57.685819 +L 134.001938 -57.121681 +L 129.332208 -56.492359 +L 124.662479 -55.728435 +L 119.992749 -54.910266 +L 115.32302 -54.129645 +L 110.65329 -53.682631 +L 105.983561 -53.149553 +L 101.313831 -52.50461 +L 96.644102 -51.957592 +L 91.974373 -51.57597 +L 87.304643 -51.152331 +L 82.634914 -50.965397 +L 77.965184 -50.634041 +L 73.295455 -50.302365 +z +" id="m07dd6a3a51" style="stroke:#8da0cb;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#8da0cb;fill-opacity:0.3;stroke:#8da0cb;stroke-opacity:0.3;" x="0" xlink:href="#m07dd6a3a51" y="144"/> + </g> + </g> + <g id="PolyCollection_4"> + <defs> + <path d="M 73.295455 -50.405081 +L 73.295455 -50.194234 +L 77.965142 -50.38058 +L 82.634829 -50.618131 +L 87.304516 -51.163612 +L 91.974203 -51.858184 +L 96.64389 -52.44839 +L 101.313577 -52.9777 +L 105.983264 -53.596245 +L 110.652951 -54.171465 +L 115.322638 -54.472318 +L 119.992325 -54.765396 +L 124.662011 -54.949179 +L 129.331698 -55.03997 +L 134.001385 -55.467617 +L 138.671072 -56.292583 +L 143.340759 -57.38129 +L 148.010446 -58.787535 +L 152.680133 -60.151518 +L 157.34982 -61.413598 +L 162.019507 -62.836698 +L 166.689194 -64.044411 +L 171.358881 -65.127962 +L 176.028568 -66.265209 +L 180.698255 -67.557342 +L 185.367942 -68.576126 +L 190.037629 -69.803956 +L 194.707316 -71.140708 +L 199.377003 -72.340358 +L 204.04669 -73.426151 +L 208.716377 -74.423874 +L 213.386064 -75.28266 +L 218.055751 -75.663908 +L 222.725438 -75.978879 +L 227.395125 -76.109 +L 232.064812 -76.608185 +L 236.734499 -76.793937 +L 241.404186 -77.230815 +L 246.073873 -77.521019 +L 250.74356 -77.810798 +L 255.413247 -78.12195 +L 260.082934 -78.524464 +L 264.752621 -78.808947 +L 269.422308 -78.635106 +L 274.091995 -78.388837 +L 278.761682 -78.731175 +L 283.431369 -78.991667 +L 288.101056 -79.239543 +L 292.770743 -79.719035 +L 297.44043 -80.025717 +L 302.110117 -80.023897 +L 306.779804 -80.217756 +L 311.449491 -81.083046 +L 316.119178 -81.583897 +L 320.788865 -81.849028 +L 325.458552 -82.497635 +L 330.128239 -82.79063 +L 334.797926 -82.851568 +L 339.467613 -82.523889 +L 344.1373 -82.227666 +L 348.806987 -82.489234 +L 353.476674 -83.101466 +L 358.146361 -83.310352 +L 362.816048 -83.871705 +L 367.485735 -84.397265 +L 372.155422 -84.667858 +L 376.825109 -85.798689 +L 381.494796 -86.717764 +L 386.164483 -87.481214 +L 390.83417 -88.240285 +L 395.503857 -88.805177 +L 400.173544 -88.864134 +L 404.843231 -88.425808 +L 409.512918 -88.763055 +L 414.182605 -89.152792 +L 418.852292 -90.207526 +L 423.521979 -91.132091 +L 428.191666 -91.819082 +L 432.861353 -92.749857 +L 437.53104 -93.445359 +L 442.200727 -93.544122 +L 446.870414 -93.768 +L 451.540101 -94.647162 +L 456.209788 -96.610162 +L 460.879475 -97.661447 +L 465.549162 -97.944194 +L 470.218849 -98.45052 +L 474.888536 -99.182829 +L 479.558223 -99.31076 +L 484.22791 -99.837134 +L 488.897597 -100.942161 +L 493.567284 -102.958426 +L 498.236971 -103.270675 +L 502.906658 -103.708356 +L 507.576345 -104.219314 +L 512.246032 -104.234328 +L 516.915719 -104.951837 +L 521.585406 -104.655331 +L 526.255093 -104.533121 +L 530.92478 -104.830296 +L 535.594467 -104.40442 +L 535.594467 -111.294986 +L 535.594467 -111.294986 +L 530.92478 -110.944278 +L 526.255093 -109.643811 +L 521.585406 -110.417906 +L 516.915719 -111.873636 +L 512.246032 -111.187525 +L 507.576345 -110.443469 +L 502.906658 -109.613923 +L 498.236971 -108.057165 +L 493.567284 -107.73942 +L 488.897597 -107.097006 +L 484.22791 -106.007239 +L 479.558223 -104.699466 +L 474.888536 -104.778396 +L 470.218849 -104.706963 +L 465.549162 -103.387775 +L 460.879475 -103.128234 +L 456.209788 -102.879992 +L 451.540101 -100.582455 +L 446.870414 -99.798506 +L 442.200727 -99.1032 +L 437.53104 -98.456136 +L 432.861353 -97.740638 +L 428.191666 -97.636311 +L 423.521979 -97.087419 +L 418.852292 -95.485458 +L 414.182605 -93.744409 +L 409.512918 -93.728245 +L 404.843231 -93.34055 +L 400.173544 -93.035497 +L 395.503857 -92.378319 +L 390.83417 -91.403503 +L 386.164483 -90.001717 +L 381.494796 -89.006151 +L 376.825109 -87.950451 +L 372.155422 -86.939773 +L 367.485735 -87.003147 +L 362.816048 -86.526763 +L 358.146361 -85.451497 +L 353.476674 -84.8961 +L 348.806987 -84.287045 +L 344.1373 -83.641168 +L 339.467613 -83.691155 +L 334.797926 -84.131558 +L 330.128239 -84.077904 +L 325.458552 -83.735236 +L 320.788865 -83.215478 +L 316.119178 -83.276924 +L 311.449491 -83.076556 +L 306.779804 -82.065549 +L 302.110117 -81.792237 +L 297.44043 -81.986083 +L 292.770743 -81.629725 +L 288.101056 -81.087078 +L 283.431369 -80.669886 +L 278.761682 -80.323115 +L 274.091995 -80.468806 +L 269.422308 -80.575817 +L 264.752621 -80.688899 +L 260.082934 -80.199271 +L 255.413247 -79.682263 +L 250.74356 -79.253457 +L 246.073873 -78.98973 +L 241.404186 -78.736286 +L 236.734499 -78.047958 +L 232.064812 -77.55424 +L 227.395125 -76.98799 +L 222.725438 -76.703557 +L 218.055751 -76.148909 +L 213.386064 -75.693022 +L 208.716377 -74.986645 +L 204.04669 -74.183363 +L 199.377003 -73.442762 +L 194.707316 -72.243517 +L 190.037629 -70.909677 +L 185.367942 -69.696258 +L 180.698255 -68.572944 +L 176.028568 -67.210138 +L 171.358881 -66.196264 +L 166.689194 -65.292591 +L 162.019507 -64.22857 +L 157.34982 -62.857043 +L 152.680133 -61.730471 +L 148.010446 -60.559323 +L 143.340759 -59.200067 +L 138.671072 -57.997445 +L 134.001385 -56.78282 +L 129.331698 -55.965125 +L 124.662011 -55.493927 +L 119.992325 -55.108018 +L 115.322638 -54.777363 +L 110.652951 -54.435723 +L 105.983264 -53.979984 +L 101.313577 -53.344294 +L 96.64389 -52.617548 +L 91.974203 -51.93672 +L 87.304516 -51.318854 +L 82.634829 -50.772754 +L 77.965142 -50.526726 +L 73.295455 -50.405081 +z +" id="mec0e5aa351" style="stroke:#e78ac3;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#e78ac3;fill-opacity:0.3;stroke:#e78ac3;stroke-opacity:0.3;" x="0" xlink:href="#mec0e5aa351" y="144"/> + </g> + </g> + <g id="PolyCollection_5"> + <defs> + <path d="M 73.295455 -52.508638 +L 73.295455 -52.222177 +L 77.965188 -52.839406 +L 82.634922 -53.945277 +L 87.304656 -55.096405 +L 91.974389 -55.947294 +L 96.644123 -56.671419 +L 101.313857 -57.155226 +L 105.98359 -57.750538 +L 110.653324 -58.809266 +L 115.323058 -59.687483 +L 119.992791 -60.545189 +L 124.662525 -61.047402 +L 129.332259 -61.298546 +L 134.001993 -61.658925 +L 138.671726 -61.966181 +L 143.34146 -62.105151 +L 148.011194 -62.218757 +L 152.680927 -62.032424 +L 157.350661 -61.883347 +L 162.020395 -61.782151 +L 166.690128 -61.523855 +L 171.359862 -61.034958 +L 176.029596 -60.969255 +L 180.699329 -61.125083 +L 185.369063 -61.609466 +L 190.038797 -61.57518 +L 194.708531 -61.419891 +L 199.378264 -61.321112 +L 204.047998 -60.925459 +L 208.717732 -60.481131 +L 213.387465 -60.573118 +L 218.057199 -61.032862 +L 222.726933 -61.783179 +L 227.396666 -62.262627 +L 232.0664 -62.632118 +L 236.736134 -62.609446 +L 241.405868 -62.497033 +L 246.075601 -62.528962 +L 250.745335 -62.685895 +L 255.415069 -62.681475 +L 260.084802 -63.082175 +L 264.754536 -63.537429 +L 269.42427 -64.208876 +L 274.094003 -64.53691 +L 278.763737 -65.174792 +L 283.433471 -65.734389 +L 288.103204 -66.538013 +L 292.772938 -66.671045 +L 297.442672 -66.802058 +L 302.112406 -67.090435 +L 306.782139 -67.295679 +L 311.451873 -67.33805 +L 316.121607 -67.165702 +L 320.79134 -67.024632 +L 325.461074 -67.022085 +L 330.130808 -67.374175 +L 334.800541 -67.729835 +L 339.470275 -67.971333 +L 344.140009 -68.386245 +L 348.809742 -68.233731 +L 353.479476 -68.255998 +L 358.14921 -68.632585 +L 362.818944 -68.967726 +L 367.488677 -69.442757 +L 372.158411 -69.718069 +L 376.828145 -69.094585 +L 381.497878 -68.903726 +L 386.167612 -68.710406 +L 390.837346 -68.706919 +L 395.507079 -69.03483 +L 400.176813 -69.084577 +L 404.846547 -68.579497 +L 409.51628 -68.886853 +L 414.186014 -69.052754 +L 418.855748 -69.159628 +L 423.525482 -69.369089 +L 428.195215 -69.563125 +L 432.864949 -69.86649 +L 437.534683 -69.644 +L 442.204416 -69.770195 +L 446.87415 -69.982144 +L 451.543884 -70.004308 +L 456.213617 -70.44151 +L 460.883351 -70.838235 +L 465.553085 -70.849378 +L 470.222818 -71.089063 +L 474.892552 -71.34719 +L 479.562286 -71.186632 +L 484.23202 -71.244959 +L 488.901753 -71.875081 +L 493.571487 -72.181721 +L 498.241221 -71.813333 +L 502.910954 -71.47585 +L 507.580688 -71.573834 +L 512.250422 -71.875452 +L 516.920155 -72.218929 +L 521.589889 -72.614614 +L 526.259623 -72.697148 +L 530.929357 -72.697481 +L 535.59909 -72.785597 +L 535.59909 -74.650465 +L 535.59909 -74.650465 +L 530.929357 -74.554683 +L 526.259623 -74.804047 +L 521.589889 -74.646713 +L 516.920155 -74.421206 +L 512.250422 -74.01844 +L 507.580688 -73.174349 +L 502.910954 -72.829047 +L 498.241221 -73.319033 +L 493.571487 -73.404134 +L 488.901753 -73.052333 +L 484.23202 -72.431108 +L 479.562286 -72.566649 +L 474.892552 -72.981272 +L 470.222818 -72.890406 +L 465.553085 -72.41946 +L 460.883351 -71.951955 +L 456.213617 -71.560963 +L 451.543884 -71.522076 +L 446.87415 -71.631718 +L 442.204416 -71.916837 +L 437.534683 -72.152451 +L 432.864949 -72.467215 +L 428.195215 -72.048969 +L 423.525482 -71.474859 +L 418.855748 -71.211075 +L 414.186014 -71.107539 +L 409.51628 -70.825022 +L 404.846547 -70.362836 +L 400.176813 -70.80981 +L 395.507079 -70.854652 +L 390.837346 -70.94294 +L 386.167612 -71.029709 +L 381.497878 -71.161649 +L 376.828145 -71.144836 +L 372.158411 -71.103639 +L 367.488677 -70.709717 +L 362.818944 -70.325835 +L 358.14921 -69.991497 +L 353.479476 -69.530155 +L 348.809742 -69.222805 +L 344.140009 -69.610787 +L 339.470275 -69.416827 +L 334.800541 -69.066931 +L 330.130808 -68.644959 +L 325.461074 -68.310579 +L 320.79134 -68.308336 +L 316.121607 -68.379437 +L 311.451873 -68.630698 +L 306.782139 -68.530263 +L 302.112406 -68.367192 +L 297.442672 -68.370135 +L 292.772938 -68.37132 +L 288.103204 -68.375223 +L 283.433471 -67.544879 +L 278.763737 -66.836982 +L 274.094003 -66.126114 +L 269.42427 -66.090896 +L 264.754536 -65.521682 +L 260.084802 -64.815177 +L 255.415069 -64.837445 +L 250.745335 -65.202562 +L 246.075601 -65.139488 +L 241.405868 -64.863144 +L 236.736134 -64.987013 +L 232.0664 -65.120615 +L 227.396666 -65.074061 +L 222.726933 -64.72567 +L 218.057199 -63.865077 +L 213.387465 -63.248075 +L 208.717732 -63.138873 +L 204.047998 -63.156534 +L 199.378264 -63.28283 +L 194.708531 -63.34828 +L 190.038797 -63.376438 +L 185.369063 -63.46842 +L 180.699329 -63.497324 +L 176.029596 -63.501797 +L 171.359862 -63.36139 +L 166.690128 -63.525039 +L 162.020395 -63.580823 +L 157.350661 -63.57785 +L 152.680927 -63.816426 +L 148.011194 -63.983943 +L 143.34146 -63.810821 +L 138.671726 -63.609522 +L 134.001993 -63.2887 +L 129.332259 -63.091827 +L 124.662525 -62.86312 +L 119.992791 -62.224915 +L 115.323058 -61.045156 +L 110.653324 -60.146313 +L 105.98359 -59.12094 +L 101.313857 -58.268852 +L 96.644123 -57.696355 +L 91.974389 -56.839333 +L 87.304656 -55.96596 +L 82.634922 -54.737127 +L 77.965188 -53.371097 +L 73.295455 -52.508638 +z +" id="m16e5226c30" style="stroke:#a6d854;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#a6d854;fill-opacity:0.3;stroke:#a6d854;stroke-opacity:0.3;" x="0" xlink:href="#m16e5226c30" y="144"/> + </g> + </g> + <g id="PolyCollection_6"> + <defs> + <path d="M 73.295455 -51.050767 +L 73.295455 -50.707389 +L 77.965163 -51.295079 +L 82.634871 -51.949204 +L 87.304579 -52.163791 +L 91.974287 -52.273459 +L 96.643995 -52.321555 +L 101.313703 -52.492151 +L 105.983411 -52.666801 +L 110.653119 -52.96571 +L 115.322827 -53.141613 +L 119.992535 -53.136187 +L 124.662243 -53.308586 +L 129.331951 -53.264057 +L 134.001659 -53.113262 +L 138.671367 -52.964702 +L 143.341075 -52.983951 +L 148.010783 -53.263749 +L 152.680491 -53.581106 +L 157.350199 -53.901855 +L 162.019907 -54.674846 +L 166.689615 -55.337952 +L 171.359323 -55.971543 +L 176.029031 -56.488664 +L 180.698739 -57.150207 +L 185.368447 -58.035972 +L 190.038155 -58.963153 +L 194.707863 -59.752751 +L 199.377571 -60.310046 +L 204.047279 -60.75496 +L 208.716987 -61.500718 +L 213.386695 -62.52677 +L 218.056403 -63.176418 +L 222.726111 -63.708665 +L 227.395819 -64.389276 +L 232.065527 -64.969928 +L 236.735235 -65.391416 +L 241.404943 -66.03346 +L 246.074651 -66.412845 +L 250.744359 -67.009952 +L 255.414067 -67.532136 +L 260.083775 -68.17421 +L 264.753483 -68.661512 +L 269.423191 -68.778109 +L 274.092899 -69.391405 +L 278.762607 -69.579023 +L 283.432315 -69.879626 +L 288.102023 -70.401586 +L 292.771731 -70.714322 +L 297.441439 -71.238898 +L 302.111147 -71.691217 +L 306.780855 -71.981467 +L 311.450563 -72.104955 +L 316.120271 -72.551657 +L 320.789979 -73.059557 +L 325.459687 -73.209332 +L 330.129395 -73.462308 +L 334.799103 -73.723508 +L 339.468811 -73.674527 +L 344.138519 -73.486168 +L 348.808227 -73.725835 +L 353.477935 -74.005477 +L 358.147643 -74.308155 +L 362.817351 -74.593484 +L 367.487059 -74.619989 +L 372.156767 -74.509708 +L 376.826475 -74.685192 +L 381.496183 -74.730737 +L 386.165891 -74.830141 +L 390.835599 -74.68524 +L 395.505307 -74.741251 +L 400.175015 -74.942918 +L 404.844723 -75.110665 +L 409.514431 -75.178385 +L 414.184139 -75.490114 +L 418.853847 -75.297055 +L 423.523555 -75.319955 +L 428.193263 -75.687214 +L 432.862971 -76.009549 +L 437.532679 -76.269219 +L 442.202387 -76.339624 +L 446.872095 -76.113367 +L 451.541803 -76.158415 +L 456.211511 -75.977327 +L 460.881219 -76.160649 +L 465.550927 -76.336994 +L 470.220635 -76.440311 +L 474.890343 -76.370987 +L 479.560051 -76.095395 +L 484.229759 -76.390824 +L 488.899467 -76.985509 +L 493.569175 -77.355516 +L 498.238883 -77.584425 +L 502.908591 -77.217717 +L 507.578299 -76.871573 +L 512.248007 -76.688822 +L 516.917715 -76.660279 +L 521.587423 -76.618734 +L 526.257131 -76.68544 +L 530.926839 -76.791138 +L 535.596547 -76.644788 +L 535.596547 -77.842493 +L 535.596547 -77.842493 +L 530.926839 -77.753917 +L 526.257131 -77.591664 +L 521.587423 -77.327962 +L 516.917715 -77.265023 +L 512.248007 -77.396661 +L 507.578299 -77.504188 +L 502.908591 -77.699865 +L 498.238883 -78.175604 +L 493.569175 -77.937865 +L 488.899467 -77.554107 +L 484.229759 -76.76691 +L 479.560051 -76.750459 +L 474.890343 -77.157472 +L 470.220635 -77.087978 +L 465.550927 -76.888199 +L 460.881219 -76.594404 +L 456.211511 -76.317578 +L 451.541803 -76.571534 +L 446.872095 -76.780847 +L 442.202387 -76.967323 +L 437.532679 -76.859895 +L 432.862971 -76.745132 +L 428.193263 -76.351115 +L 423.523555 -76.053979 +L 418.853847 -75.90999 +L 414.184139 -76.037798 +L 409.514431 -75.794137 +L 404.844723 -75.610711 +L 400.175015 -75.429807 +L 395.505307 -75.169502 +L 390.835599 -74.974902 +L 386.165891 -75.208121 +L 381.496183 -75.010465 +L 376.826475 -75.048942 +L 372.156767 -75.194742 +L 367.487059 -75.298636 +L 362.817351 -75.18698 +L 358.147643 -75.033561 +L 353.477935 -75.045218 +L 348.808227 -74.824731 +L 344.138519 -74.583623 +L 339.468811 -74.890443 +L 334.799103 -74.905348 +L 330.129395 -74.528563 +L 325.459687 -74.173847 +L 320.789979 -74.144189 +L 316.120271 -73.594779 +L 311.450563 -73.185051 +L 306.780855 -73.125208 +L 302.111147 -72.786726 +L 297.441439 -72.49897 +L 292.771731 -71.919539 +L 288.102023 -71.622657 +L 283.432315 -71.117788 +L 278.762607 -70.794556 +L 274.092899 -70.442916 +L 269.423191 -69.940873 +L 264.753483 -69.719969 +L 260.083775 -69.274396 +L 255.414067 -68.703291 +L 250.744359 -68.221246 +L 246.074651 -67.593454 +L 241.404943 -67.08136 +L 236.735235 -66.314454 +L 232.065527 -65.726913 +L 227.395819 -65.102579 +L 222.726111 -64.408756 +L 218.056403 -63.689469 +L 213.386695 -62.957815 +L 208.716987 -62.02426 +L 204.047279 -61.475925 +L 199.377571 -60.872999 +L 194.707863 -60.106634 +L 190.038155 -59.296314 +L 185.368447 -58.423931 +L 180.698739 -57.636121 +L 176.029031 -57.009209 +L 171.359323 -56.497164 +L 166.689615 -55.74789 +L 162.019907 -55.090236 +L 157.350199 -54.388077 +L 152.680491 -53.991889 +L 148.010783 -53.426333 +L 143.341075 -53.305878 +L 138.671367 -53.457198 +L 134.001659 -53.556343 +L 129.331951 -53.678263 +L 124.662243 -53.636608 +L 119.992535 -53.355432 +L 115.322827 -53.341216 +L 110.653119 -53.212978 +L 105.983411 -52.930065 +L 101.313703 -52.703526 +L 96.643995 -52.484856 +L 91.974287 -52.415872 +L 87.304579 -52.271482 +L 82.634871 -52.073188 +L 77.965163 -51.552254 +L 73.295455 -51.050767 +z +" id="m8c2e7cf53a" style="stroke:#ffd92f;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#ffd92f;fill-opacity:0.3;stroke:#ffd92f;stroke-opacity:0.3;" x="0" xlink:href="#m8c2e7cf53a" y="144"/> + </g> + </g> + <g id="PolyCollection_7"> + <defs> + <path d="M 73.295455 -51.682278 +L 73.295455 -51.405664 +L 77.965182 -51.991076 +L 82.634909 -53.07648 +L 87.304636 -54.28568 +L 91.974363 -55.261726 +L 96.64409 -56.053125 +L 101.313817 -56.883735 +L 105.983545 -57.42723 +L 110.653272 -57.958249 +L 115.322999 -58.539544 +L 119.992726 -59.257948 +L 124.662453 -59.94366 +L 129.33218 -60.333829 +L 134.001908 -60.463184 +L 138.671635 -60.750609 +L 143.341362 -61.108887 +L 148.011089 -61.606132 +L 152.680816 -62.012377 +L 157.350543 -62.258583 +L 162.020271 -62.582931 +L 166.689998 -62.784959 +L 171.359725 -63.005481 +L 176.029452 -63.376999 +L 180.699179 -63.821732 +L 185.368906 -64.241543 +L 190.038633 -64.524391 +L 194.708361 -64.643119 +L 199.378088 -64.781055 +L 204.047815 -64.94488 +L 208.717542 -65.219454 +L 213.387269 -65.308524 +L 218.056996 -65.362482 +L 222.726724 -65.465268 +L 227.396451 -65.431974 +L 232.066178 -65.356657 +L 236.735905 -65.46911 +L 241.405632 -65.507954 +L 246.075359 -65.866556 +L 250.745086 -66.054285 +L 255.414814 -66.213097 +L 260.084541 -66.273903 +L 264.754268 -66.267056 +L 269.423995 -66.503367 +L 274.093722 -66.726752 +L 278.763449 -66.817582 +L 283.433177 -66.960178 +L 288.102904 -67.078536 +L 292.772631 -67.360124 +L 297.442358 -67.400555 +L 302.112085 -67.403438 +L 306.781812 -67.376439 +L 311.451539 -67.362923 +L 316.121267 -67.605039 +L 320.790994 -67.92115 +L 325.460721 -68.057835 +L 330.130448 -67.969185 +L 334.800175 -67.915343 +L 339.469902 -67.86037 +L 344.13963 -67.844884 +L 348.809357 -67.673148 +L 353.479084 -67.571719 +L 358.148811 -67.718458 +L 362.818538 -67.755861 +L 367.488265 -68.008335 +L 372.157993 -68.252317 +L 376.82772 -68.426344 +L 381.497447 -68.626008 +L 386.167174 -68.554651 +L 390.836901 -68.436342 +L 395.506628 -68.224245 +L 400.176355 -68.06401 +L 404.846083 -68.348045 +L 409.51581 -68.465017 +L 414.185537 -68.586547 +L 418.855264 -68.671762 +L 423.524991 -68.875423 +L 428.194718 -68.873194 +L 432.864446 -68.858289 +L 437.534173 -68.906997 +L 442.2039 -68.900734 +L 446.873627 -68.76679 +L 451.543354 -68.896155 +L 456.213081 -68.940687 +L 460.882808 -68.965008 +L 465.552536 -68.999499 +L 470.222263 -69.164214 +L 474.89199 -69.272253 +L 479.561717 -69.1485 +L 484.231444 -69.272946 +L 488.901171 -69.554116 +L 493.570899 -69.560188 +L 498.240626 -69.459964 +L 502.910353 -69.503402 +L 507.58008 -69.49923 +L 512.249807 -69.589069 +L 516.919534 -69.293633 +L 521.589261 -69.283141 +L 526.258989 -69.439777 +L 530.928716 -69.545243 +L 535.598443 -69.707522 +L 535.598443 -70.945292 +L 535.598443 -70.945292 +L 530.928716 -70.767838 +L 526.258989 -70.664817 +L 521.589261 -70.389939 +L 516.919534 -70.315687 +L 512.249807 -70.52026 +L 507.58008 -70.303455 +L 502.910353 -70.320867 +L 498.240626 -70.391968 +L 493.570899 -70.5436 +L 488.901171 -70.594251 +L 484.231444 -70.431308 +L 479.561717 -70.403042 +L 474.89199 -70.50209 +L 470.222263 -70.374824 +L 465.552536 -70.128603 +L 460.882808 -70.093702 +L 456.213081 -70.096649 +L 451.543354 -70.162296 +L 446.873627 -70.011665 +L 442.2039 -70.097979 +L 437.534173 -70.153003 +L 432.864446 -70.073638 +L 428.194718 -69.946914 +L 423.524991 -70.017607 +L 418.855264 -69.83127 +L 414.185537 -69.669186 +L 409.51581 -69.620935 +L 404.846083 -69.599126 +L 400.176355 -69.328787 +L 395.506628 -69.355255 +L 390.836901 -69.444918 +L 386.167174 -69.455384 +L 381.497447 -69.443239 +L 376.82772 -69.297456 +L 372.157993 -69.235899 +L 367.488265 -69.09883 +L 362.818538 -68.85306 +L 358.148811 -68.782787 +L 353.479084 -68.606584 +L 348.809357 -68.476274 +L 344.13963 -68.617479 +L 339.469902 -68.632456 +L 334.800175 -68.59338 +L 330.130448 -68.584181 +L 325.460721 -68.682754 +L 320.790994 -68.740471 +L 316.121267 -68.551824 +L 311.451539 -68.386599 +L 306.781812 -68.438107 +L 302.112085 -68.474141 +L 297.442358 -68.351855 +L 292.772631 -68.282791 +L 288.102904 -67.989133 +L 283.433177 -68.003098 +L 278.763449 -67.900691 +L 274.093722 -67.794038 +L 269.423995 -67.468692 +L 264.754268 -67.127254 +L 260.084541 -67.129609 +L 255.414814 -67.099201 +L 250.745086 -66.911893 +L 246.075359 -66.782021 +L 241.405632 -66.587369 +L 236.735905 -66.616642 +L 232.066178 -66.496254 +L 227.396451 -66.586702 +L 222.726724 -66.639107 +L 218.056996 -66.550096 +L 213.387269 -66.464627 +L 208.717542 -66.371916 +L 204.047815 -66.008565 +L 199.378088 -65.806316 +L 194.708361 -65.781326 +L 190.038633 -65.69307 +L 185.368906 -65.340983 +L 180.699179 -64.867729 +L 176.029452 -64.544493 +L 171.359725 -64.198504 +L 166.689998 -63.857473 +L 162.020271 -63.534768 +L 157.350543 -63.139533 +L 152.680816 -62.87562 +L 148.011089 -62.564919 +L 143.341362 -62.1082 +L 138.671635 -61.72664 +L 134.001908 -61.415638 +L 129.33218 -61.25126 +L 124.662453 -60.799083 +L 119.992726 -60.102377 +L 115.322999 -59.432123 +L 110.653272 -58.825266 +L 105.983545 -58.401635 +L 101.313817 -57.82726 +L 96.64409 -56.871535 +L 91.974363 -55.833889 +L 87.304636 -54.639529 +L 82.634909 -53.371967 +L 77.965182 -52.312451 +L 73.295455 -51.682278 +z +" id="mc057ce7612" style="stroke:#e5c494;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2812e3a93b)"> + <use style="fill:#e5c494;fill-opacity:0.3;stroke:#e5c494;stroke-opacity:0.3;" x="0" xlink:href="#mc057ce7612" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 92.055037 +L 77.965243 91.205256 +L 82.635032 90.019575 +L 87.304821 88.855953 +L 91.97461 87.711499 +L 96.644399 86.516987 +L 101.314187 85.200616 +L 105.983976 83.916846 +L 110.653765 83.016763 +L 115.323554 82.403089 +L 119.993343 81.700688 +L 124.663131 81.448034 +L 129.33292 81.16995 +L 134.002709 80.64543 +L 138.672498 80.103512 +L 143.342287 79.574968 +L 148.012075 79.050256 +L 152.681864 78.632523 +L 157.351653 78.331592 +L 162.021442 78.264761 +L 166.69123 78.324344 +L 171.361019 78.178021 +L 176.030808 77.771443 +L 180.700597 77.549896 +L 185.370386 77.24109 +L 190.040174 76.805215 +L 194.709963 76.649543 +L 199.379752 76.363859 +L 204.049541 76.030826 +L 208.71933 75.919703 +L 213.389118 75.584263 +L 218.058907 75.185683 +L 222.728696 75.039525 +L 227.398485 75.055754 +L 232.068274 74.738253 +L 236.738062 74.30397 +L 241.407851 74.094853 +L 246.07764 74.044011 +L 250.747429 73.95282 +L 255.417218 73.514661 +L 260.087006 72.955516 +L 264.756795 72.689465 +L 269.426584 72.481873 +L 274.096373 72.225135 +L 278.766162 71.815604 +L 283.43595 71.542374 +L 288.105739 71.15644 +L 292.775528 70.582098 +L 297.445317 70.08139 +L 302.115106 70.124333 +L 306.784894 70.454897 +L 311.454683 70.430482 +L 316.124472 70.818634 +L 320.794261 70.76702 +L 325.46405 70.733702 +L 330.133838 70.495801 +L 334.803627 70.274008 +L 339.473416 69.990166 +L 344.143205 69.534744 +L 348.812994 69.015651 +L 353.482782 68.732321 +L 358.152571 68.622733 +L 362.82236 68.493559 +L 367.492149 68.368843 +L 372.161938 68.391998 +L 376.831726 68.058996 +L 381.501515 67.838869 +L 386.171304 67.459011 +L 390.841093 67.055089 +L 395.510882 66.7306 +L 400.18067 66.614727 +L 404.850459 66.5016 +L 409.520248 66.433125 +L 414.190037 65.974422 +L 418.859826 66.029869 +L 423.529614 65.695286 +L 428.199403 65.291363 +L 432.869192 64.763551 +L 437.538981 64.284822 +L 442.20877 64.533319 +L 446.878558 64.538637 +L 451.548347 64.459812 +L 456.218136 64.617701 +L 460.887925 64.51375 +L 465.557713 64.285814 +L 470.227502 64.101562 +L 474.897291 64.143747 +L 479.56708 64.237412 +L 484.236869 64.227834 +L 488.906657 63.887718 +L 493.576446 63.577807 +L 498.246235 63.198668 +L 502.916024 63.552751 +L 507.585813 63.449427 +L 512.255601 63.355136 +L 516.92539 63.300011 +L 521.595179 63.031238 +L 526.264968 62.888417 +L 530.934757 62.69052 +L 535.604545 62.713327 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 92.940318 +L 77.965217 92.545269 +L 82.63498 91.731917 +L 87.304742 90.991802 +L 91.974505 90.367526 +L 96.644268 89.782703 +L 101.31403 89.141901 +L 105.983793 88.414265 +L 110.653556 87.481942 +L 115.323318 86.421632 +L 119.993081 84.999234 +L 124.662844 83.823514 +L 129.332606 83.029328 +L 134.002369 82.600336 +L 138.672132 82.39343 +L 143.341894 82.201821 +L 148.011657 81.914771 +L 152.68142 81.459146 +L 157.351182 80.861479 +L 162.020945 80.481839 +L 166.690707 80.182191 +L 171.36047 79.900288 +L 176.030233 79.476825 +L 180.699995 79.167976 +L 185.369758 78.870639 +L 190.039521 78.549113 +L 194.709283 78.485298 +L 199.379046 78.252261 +L 204.048809 78.117165 +L 208.718571 77.899297 +L 213.388334 77.797973 +L 218.058097 77.712857 +L 222.727859 77.863159 +L 227.397622 77.857726 +L 232.067385 77.645146 +L 236.737147 77.518008 +L 241.40691 77.298543 +L 246.076672 77.066961 +L 250.746435 77.125641 +L 255.416198 76.883578 +L 260.08596 76.737299 +L 264.755723 76.586997 +L 269.425486 76.559653 +L 274.095248 76.720251 +L 278.765011 76.675238 +L 283.434774 76.609898 +L 288.104536 76.442225 +L 292.774299 76.096663 +L 297.444062 75.996993 +L 302.113824 76.051928 +L 306.783587 76.162307 +L 311.45335 76.194268 +L 316.123112 76.160456 +L 320.792875 75.775816 +L 325.462637 75.748476 +L 330.1324 76.157788 +L 334.802163 76.006949 +L 339.471925 75.952586 +L 344.141688 75.807569 +L 348.811451 75.779646 +L 353.481213 75.788812 +L 358.150976 75.686468 +L 362.820739 75.627048 +L 367.490501 75.379997 +L 372.160264 75.554125 +L 376.830027 75.466473 +L 381.499789 75.196135 +L 386.169552 74.979096 +L 390.839314 74.616411 +L 395.509077 74.353265 +L 400.17884 74.07191 +L 404.848602 74.103346 +L 409.518365 74.173373 +L 414.188128 74.237834 +L 418.85789 74.205493 +L 423.527653 73.817416 +L 428.197416 73.297676 +L 432.867178 73.034458 +L 437.536941 72.848328 +L 442.206704 72.915935 +L 446.876466 72.952842 +L 451.546229 72.936491 +L 456.215992 73.123589 +L 460.885754 73.359834 +L 465.555517 73.234523 +L 470.225279 73.046368 +L 474.895042 73.130237 +L 479.564805 73.111839 +L 484.234567 72.871822 +L 488.90433 72.468628 +L 493.574093 72.110203 +L 498.243855 71.869869 +L 502.913618 72.034915 +L 507.583381 72.219186 +L 512.253143 72.435328 +L 516.922906 71.981366 +L 521.592669 71.818619 +L 526.262431 71.92904 +L 530.932194 71.987049 +L 535.601957 72.007195 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 93.775636 +L 77.965184 93.449414 +L 82.634914 93.151933 +L 87.304643 92.933939 +L 91.974373 92.605949 +L 96.644102 92.234699 +L 101.313831 91.679492 +L 105.983561 91.029904 +L 110.65329 90.548657 +L 115.32302 90.176099 +L 119.992749 89.460908 +L 124.662479 88.655107 +L 129.332208 87.907829 +L 134.001938 87.156924 +L 138.671667 86.456739 +L 143.341397 85.84122 +L 148.011126 85.360986 +L 152.680856 85.107482 +L 157.350585 84.277657 +L 162.020315 83.542621 +L 166.690044 82.846533 +L 171.359774 81.96536 +L 176.029503 81.154706 +L 180.699233 80.264528 +L 185.368962 79.423911 +L 190.038692 78.38962 +L 194.708421 77.233187 +L 199.378151 76.256099 +L 204.04788 75.391541 +L 208.71761 74.528132 +L 213.387339 73.75934 +L 218.057069 72.777973 +L 222.726798 71.876136 +L 227.396528 70.915692 +L 232.066257 70.263437 +L 236.735987 70.024343 +L 241.405716 69.781047 +L 246.075446 69.133702 +L 250.745175 68.481351 +L 255.414905 67.834673 +L 260.084634 67.484088 +L 264.754364 67.160741 +L 269.424093 66.892083 +L 274.093823 66.841588 +L 278.763552 66.716737 +L 283.433282 66.791289 +L 288.103011 66.715545 +L 292.772741 66.232726 +L 297.44247 66.289798 +L 302.1122 66.222535 +L 306.781929 66.259848 +L 311.451659 66.118595 +L 316.121388 65.534119 +L 320.791118 65.32387 +L 325.460847 65.118607 +L 330.130577 65.104476 +L 334.800306 65.148688 +L 339.470036 64.797357 +L 344.139765 64.474585 +L 348.809494 64.243272 +L 353.479224 63.967898 +L 358.148953 63.625086 +L 362.818683 63.137188 +L 367.488412 63.122199 +L 372.158142 63.366747 +L 376.827871 63.598225 +L 381.497601 63.444922 +L 386.16733 63.719161 +L 390.83706 63.73633 +L 395.506789 63.667304 +L 400.176519 63.412481 +L 404.846248 63.166952 +L 409.515978 62.78136 +L 414.185707 62.583838 +L 418.855437 62.352402 +L 423.525166 62.541219 +L 428.194896 62.92905 +L 432.864625 62.8539 +L 437.534355 62.863918 +L 442.204084 62.650698 +L 446.873814 62.740236 +L 451.543543 62.512666 +L 456.213273 62.355202 +L 460.883002 61.954298 +L 465.552732 61.450738 +L 470.222461 61.362575 +L 474.892191 60.595317 +L 479.56192 60.142216 +L 484.23165 60.332613 +L 488.901379 59.968321 +L 493.571109 60.309028 +L 498.240838 60.426199 +L 502.910568 59.819362 +L 507.580297 59.746745 +L 512.250027 59.570422 +L 516.919756 59.674376 +L 521.589486 59.053339 +L 526.259215 58.862806 +L 530.928945 58.615824 +L 535.598674 58.34155 +" style="fill:none;stroke:#8da0cb;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 93.700343 +L 77.965142 93.546347 +L 82.634829 93.304558 +L 87.304516 92.758767 +L 91.974203 92.102548 +L 96.64389 91.467031 +L 101.313577 90.839003 +L 105.983264 90.211885 +L 110.652951 89.696406 +L 115.322638 89.375159 +L 119.992325 89.063293 +L 124.662011 88.778447 +L 129.331698 88.497453 +L 134.001385 87.874781 +L 138.671072 86.854986 +L 143.340759 85.709322 +L 148.010446 84.326571 +L 152.680133 83.059006 +L 157.34982 81.86468 +L 162.019507 80.467366 +L 166.689194 79.331499 +L 171.358881 78.337887 +L 176.028568 77.262327 +L 180.698255 75.934857 +L 185.367942 74.863808 +L 190.037629 73.643184 +L 194.707316 72.307887 +L 199.377003 71.10844 +L 204.04669 70.195243 +L 208.716377 69.294741 +L 213.386064 68.512159 +L 218.055751 68.093592 +L 222.725438 67.658782 +L 227.395125 67.451505 +L 232.064812 66.918787 +L 236.734499 66.579052 +L 241.404186 66.016449 +L 246.073873 65.744625 +L 250.74356 65.467873 +L 255.413247 65.097894 +L 260.082934 64.638133 +L 264.752621 64.251077 +L 269.422308 64.394538 +L 274.091995 64.571178 +L 278.761682 64.472855 +L 283.431369 64.169224 +L 288.101056 63.836689 +L 292.770743 63.32562 +L 297.44043 62.9941 +L 302.110117 63.091933 +L 306.779804 62.858347 +L 311.449491 61.920199 +L 316.119178 61.56959 +L 320.788865 61.467747 +L 325.458552 60.883565 +L 330.128239 60.565733 +L 334.797926 60.508437 +L 339.467613 60.892478 +L 344.1373 61.065583 +L 348.806987 60.611861 +L 353.476674 60.001217 +L 358.146361 59.619076 +L 362.816048 58.800766 +L 367.485735 58.299794 +L 372.155422 58.196184 +L 376.825109 57.12543 +L 381.494796 56.138042 +L 386.164483 55.258534 +L 390.83417 54.178106 +L 395.503857 53.408252 +L 400.173544 53.050185 +L 404.843231 53.116821 +L 409.512918 52.75435 +L 414.182605 52.5514 +L 418.852292 51.153508 +L 423.521979 49.890245 +L 428.191666 49.272303 +L 432.861353 48.754752 +L 437.53104 48.049252 +L 442.200727 47.676339 +L 446.870414 47.216747 +L 451.540101 46.385192 +L 456.209788 44.254923 +L 460.879475 43.60516 +L 465.549162 43.334016 +L 470.218849 42.421258 +L 474.888536 42.019387 +L 479.558223 41.994887 +L 484.22791 41.077813 +L 488.897597 39.980416 +L 493.567284 38.651077 +L 498.236971 38.33608 +L 502.906658 37.338861 +L 507.576345 36.668609 +L 512.246032 36.289074 +L 516.915719 35.587263 +L 521.585406 36.463381 +L 526.255093 36.911534 +L 530.92478 36.112713 +L 535.594467 36.150297 +" style="fill:none;stroke:#e78ac3;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_13"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 91.634593 +L 77.965188 90.894749 +L 82.634922 89.658798 +L 87.304656 88.468818 +L 91.974389 87.606686 +L 96.644123 86.816113 +L 101.313857 86.287961 +L 105.98359 85.564261 +L 110.653324 84.522211 +L 115.323058 83.633681 +L 119.992791 82.614948 +L 124.662525 82.044739 +L 129.332259 81.804814 +L 134.001993 81.526187 +L 138.671726 81.212148 +L 143.34146 81.042014 +L 148.011194 80.89865 +L 152.680927 81.075575 +L 157.350661 81.269401 +L 162.020395 81.318513 +L 166.690128 81.475553 +L 171.359862 81.801826 +L 176.029596 81.764474 +L 180.699329 81.688796 +L 185.369063 81.461057 +L 190.038797 81.524191 +L 194.708531 81.615914 +L 199.378264 81.698029 +L 204.047998 81.959003 +L 208.717732 82.189998 +L 213.387465 82.089403 +L 218.057199 81.551031 +L 222.726933 80.745575 +L 227.396666 80.331656 +L 232.0664 80.123633 +L 236.736134 80.20177 +L 241.405868 80.319911 +L 246.075601 80.165775 +L 250.745335 80.055771 +L 255.415069 80.24054 +L 260.084802 80.051324 +L 264.754536 79.470445 +L 269.42427 78.850114 +L 274.094003 78.668488 +L 278.763737 77.994113 +L 283.433471 77.360366 +L 288.103204 76.543382 +L 292.772938 76.478817 +L 297.442672 76.413903 +L 302.112406 76.271187 +L 306.782139 76.087029 +L 311.451873 76.015626 +L 316.121607 76.227431 +L 320.79134 76.333516 +L 325.461074 76.333668 +L 330.130808 75.990433 +L 334.800541 75.601617 +L 339.470275 75.30592 +L 344.140009 75.001484 +L 348.809742 75.271732 +L 353.479476 75.106924 +L 358.14921 74.687959 +L 362.818944 74.353219 +L 367.488677 73.923763 +L 372.158411 73.589146 +L 376.828145 73.88029 +L 381.497878 73.967312 +L 386.167612 74.129942 +L 390.837346 74.175071 +L 395.507079 74.055259 +L 400.176813 74.052806 +L 404.846547 74.528834 +L 409.51628 74.144063 +L 414.186014 73.919854 +L 418.855748 73.814649 +L 423.525482 73.578026 +L 428.195215 73.193953 +L 432.864949 72.833148 +L 437.534683 73.101774 +L 442.204416 73.156484 +L 446.87415 73.193069 +L 451.543884 73.236808 +L 456.213617 72.998763 +L 460.883351 72.604905 +L 465.553085 72.365581 +L 470.222818 72.010265 +L 474.892552 71.835769 +L 479.562286 72.123359 +L 484.23202 72.161967 +L 488.901753 71.536293 +L 493.571487 71.207072 +L 498.241221 71.433817 +L 502.910954 71.847551 +L 507.580688 71.625908 +L 512.250422 71.053054 +L 516.920155 70.679933 +L 521.589889 70.369337 +L 526.259623 70.249403 +L 530.929357 70.373918 +L 535.59909 70.281969 +" style="fill:none;stroke:#a6d854;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_14"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 93.120922 +L 77.965163 92.576333 +L 82.634871 91.988804 +L 87.304579 91.782364 +L 91.974287 91.655335 +L 96.643995 91.596794 +L 101.313703 91.402162 +L 105.983411 91.201567 +L 110.653119 90.910656 +L 115.322827 90.758586 +L 119.992535 90.754191 +L 124.662243 90.527403 +L 129.331951 90.52884 +L 134.001659 90.665197 +L 138.671367 90.78905 +L 143.341075 90.855085 +L 148.010783 90.654959 +L 152.680491 90.213502 +L 157.350199 89.855034 +L 162.019907 89.117459 +L 166.689615 88.457079 +L 171.359323 87.765647 +L 176.029031 87.251063 +L 180.698739 86.606836 +L 185.368447 85.770049 +L 190.038155 84.870267 +L 194.707863 84.070307 +L 199.377571 83.408477 +L 204.047279 82.884558 +L 208.716987 82.237511 +L 213.386695 81.257708 +L 218.056403 80.567057 +L 222.726111 79.94129 +L 227.395819 79.254073 +L 232.065527 78.651579 +L 236.735235 78.147065 +L 241.404943 77.44259 +L 246.074651 76.996851 +L 250.744359 76.384401 +L 255.414067 75.882286 +L 260.083775 75.275697 +L 264.753483 74.809259 +L 269.423191 74.640509 +L 274.092899 74.082839 +L 278.762607 73.81321 +L 283.432315 73.501293 +L 288.102023 72.987878 +L 292.771731 72.683069 +L 297.441439 72.131066 +L 302.111147 71.761029 +L 306.780855 71.446662 +L 311.450563 71.354997 +L 316.120271 70.926782 +L 320.789979 70.398127 +L 325.459687 70.308411 +L 330.129395 70.004564 +L 334.799103 69.685572 +L 339.468811 69.717515 +L 344.138519 69.965105 +L 348.808227 69.724717 +L 353.477935 69.474653 +L 358.147643 69.329142 +L 362.817351 69.109768 +L 367.487059 69.040687 +L 372.156767 69.147775 +L 376.826475 69.132933 +L 381.496183 69.129399 +L 386.165891 68.980869 +L 390.835599 69.169929 +L 395.505307 69.044624 +L 400.175015 68.813637 +L 404.844723 68.639312 +L 409.514431 68.513739 +L 414.184139 68.236044 +L 418.853847 68.396477 +L 423.523555 68.313033 +L 428.193263 67.980836 +L 432.862971 67.622659 +L 437.532679 67.435443 +L 442.202387 67.346527 +L 446.872095 67.552893 +L 451.541803 67.635026 +L 456.211511 67.852547 +L 460.881219 67.622473 +L 465.550927 67.387403 +L 470.220635 67.235855 +L 474.890343 67.23577 +L 479.560051 67.577073 +L 484.229759 67.421133 +L 488.899467 66.730192 +L 493.569175 66.353309 +L 498.238883 66.119985 +L 502.908591 66.541209 +L 507.578299 66.812119 +L 512.248007 66.957258 +L 516.917715 67.037349 +L 521.587423 67.026652 +L 526.257131 66.861448 +L 530.926839 66.727472 +L 535.596547 66.756359 +" style="fill:none;stroke:#ffd92f;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_15"> + <path clip-path="url(#p2812e3a93b)" d="M 73.295455 92.456029 +L 77.965182 91.848236 +L 82.634909 90.775777 +L 87.304636 89.537395 +L 91.974363 88.452193 +L 96.64409 87.53767 +L 101.313817 86.644502 +L 105.983545 86.085567 +L 110.653272 85.608242 +L 115.322999 85.014167 +L 119.992726 84.319837 +L 124.662453 83.628629 +L 129.33218 83.207456 +L 134.001908 83.060589 +L 138.671635 82.761375 +L 143.341362 82.391456 +L 148.011089 81.914474 +L 152.680816 81.556002 +L 157.350543 81.300942 +L 162.020271 80.94115 +L 166.689998 80.678784 +L 171.359725 80.398008 +L 176.029452 80.039254 +L 180.699179 79.65527 +L 185.368906 79.208737 +L 190.038633 78.891269 +L 194.708361 78.787778 +L 199.378088 78.706314 +L 204.047815 78.523277 +L 208.717542 78.204315 +L 213.387269 78.113424 +L 218.056996 78.043711 +L 222.726724 77.947812 +L 227.396451 77.990662 +L 232.066178 78.073545 +L 236.735905 77.957124 +L 241.405632 77.952338 +L 246.075359 77.675712 +L 250.745086 77.516911 +L 255.414814 77.343851 +L 260.084541 77.298244 +L 264.754268 77.302845 +L 269.423995 77.01397 +L 274.093722 76.739605 +L 278.763449 76.640864 +L 283.433177 76.518362 +L 288.102904 76.466165 +L 292.772631 76.178543 +L 297.442358 76.123795 +L 302.112085 76.061211 +L 306.781812 76.092727 +L 311.451539 76.125239 +L 316.121267 75.921569 +L 320.790994 75.66919 +L 325.460721 75.629705 +L 330.130448 75.723317 +L 334.800175 75.745638 +L 339.469902 75.753587 +L 344.13963 75.768819 +L 348.809357 75.925289 +L 353.479084 75.910849 +L 358.148811 75.749378 +L 362.818538 75.69554 +L 367.488265 75.446417 +L 372.157993 75.255892 +L 376.82772 75.1381 +L 381.497447 74.965377 +L 386.167174 74.994982 +L 390.836901 75.05937 +L 395.506628 75.21025 +L 400.176355 75.303602 +L 404.846083 75.026415 +L 409.51581 74.957024 +L 414.185537 74.872134 +L 418.855264 74.748484 +L 423.524991 74.553485 +L 428.194718 74.589946 +L 432.864446 74.534037 +L 437.534173 74.47 +L 442.2039 74.500643 +L 446.873627 74.610773 +L 451.543354 74.470774 +L 456.213081 74.481332 +L 460.882808 74.470645 +L 465.552536 74.435949 +L 470.222263 74.230481 +L 474.89199 74.112828 +L 479.561717 74.224229 +L 484.231444 74.147873 +L 488.901171 73.925817 +L 493.570899 73.948106 +L 498.240626 74.074034 +L 502.910353 74.087865 +L 507.58008 74.098658 +L 512.249807 73.945335 +L 516.919534 74.19534 +L 521.589261 74.16346 +L 526.258989 73.947703 +L 530.928716 73.84346 +L 535.598443 73.673593 +" style="fill:none;stroke:#e5c494;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.18 96.94 +L 50.18 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 96.94 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.18 96.94 +L 558.72 96.94 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.18 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.45, 23.04)" x="304.45" y="23.04">SpaceInvaders</text> + </g> + </g> + </g> + <defs> + <clipPath id="p2812e3a93b"> + <rect height="67.9" width="508.54" x="50.18" y="29.04"/> + </clipPath> + </defs> +</svg> + + + </div> + +</div><!-- /.container --> + +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + +</body> +</html> diff --git a/baselines/benchmarks_mujoco1M.htm b/baselines/benchmarks_mujoco1M.htm new file mode 100644 index 0000000000000000000000000000000000000000..2c332672f59457ee9dd708c40c37591171a1e332 --- /dev/null +++ b/baselines/benchmarks_mujoco1M.htm @@ -0,0 +1,5640 @@ +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="https://cloud.githubusercontent.com/assets/306655/25257645/38a30806-25ee-11e7-82d5-eae86a9dfad0.png"> + <title>bench viewer</title> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" + integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" + crossorigin="anonymous"></script> + <script scr="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" + integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" + crossorigin="anonymous"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/js/jquery.dataTables.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.13/js/dataTables.bootstrap4.min.js"></script> + + + <link rel="stylesheet" + href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" + integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" + crossorigin="anonymous"> + <link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/css/dataTables.bootstrap4.min.css" + rel="stylesheet"/> + <style> + .navbar { + border-radius: 0; + } + + .benchmark-title { + padding: 3rem 1.5rem; + text-align: center; + margin-top: 40px; + } + .ci-section { + margin-top: 20px; + text-align: center; + } + .bmrun-link { + font-family: Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace; + color: #fff; !important; + text-decoration: none; !important; + padding: 0.5em .4em; + } + .bmrun-link:hover { + color: #fff; !important; + text-decoration: none; !important; + } + </style> +</head> + +<body> +<div class="container"> + + <div class="benchmark-title"> + <h1>Mujoco1M Comparison</h1> + </div> + <div style="text-align: center"> +<br /> +</div> + + <table class="table sortable-data-table"> + <thead> + <tr> + <th> bmrun________________________ </th> + + <td> </td> + + <td>user</td> + + <td>mean</td> + + <td>HalfCheetah</td> + + <td>Hopper</td> + + <td>InvertedPendulum</td> + + <td>Swimmer</td> + + <td>InvertedDoublePendulum</td> + + <td>Reacher</td> + + <td>Walker2d</td> + + <td>commit</td> + + </tr> + </thead> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + trpo_mpi + </div> + </td> + + <td><div style="background-color:rgba(102, 194, 165, 1.0)"> </div></td> + + <td>cron</td> + + <td>1896.01</td> + + <td>1289.7</td> + + <td>1912.9</td> + + <td>905.1</td> + + <td>94.96</td> + + <td>6731.63</td> + + <td>-4.82</td> + + <td>2342.63</td> + + <td>ea68f3b</td> + + </tr> + + <tr> + <td style="display: flex"> + + <div style="display: flex"> + ppo2 + </div> + </td> + + <td><div style="background-color:rgba(252, 141, 98, 1.0)"> </div></td> + + <td>cron</td> + + <td>2203.79</td> + + <td>1668.58</td> + + <td>2316.16</td> + + <td>809.43</td> + + <td>111.19</td> + + <td>7102.91</td> + + <td>-6.71</td> + + <td>3424.95</td> + + <td>ea68f3b</td> + + </tr> + + </table> + +</form> + <div style="margin-top: 60px; text-align: center"> + <h3>Learning Curves</h3> + X-axis: timesteps + Y-axis: Reward (avg. 6 seeds) +<br /> + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.18 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 50.18 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p02d2395807)" d="M 73.295455 110.74 +L 73.295455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.295455, 128.598281)" x="73.295455" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p02d2395807)" d="M 165.757273 110.74 +L 165.757273 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.757273, 128.598281)" x="165.757273" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p02d2395807)" d="M 258.219091 110.74 +L 258.219091 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.219091, 128.598281)" x="258.219091" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p02d2395807)" d="M 350.680909 110.74 +L 350.680909 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.680909, 128.598281)" x="350.680909" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p02d2395807)" d="M 443.142727 110.74 +L 443.142727 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.142727, 128.598281)" x="443.142727" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p02d2395807)" d="M 535.604545 110.74 +L 535.604545 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.604545, 128.598281)" x="535.604545" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p02d2395807)" d="M 50.18 88.95753 +L 558.72 88.95753 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 93.136671)" x="40.68" y="93.136671">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p02d2395807)" d="M 50.18 59.339296 +L 558.72 59.339296 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 63.518437)" x="40.68" y="63.518437">1000</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#p02d2395807)" d="M 50.18 29.721062 +L 558.72 29.721062 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 33.900203)" x="40.68" y="33.900203">2000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.295455 -37.31157 +L 73.295455 -36.973636 +L 77.965243 -37.356997 +L 82.635032 -38.255191 +L 87.304821 -39.337429 +L 91.97461 -40.251313 +L 96.644399 -41.152114 +L 101.314187 -41.929064 +L 105.983976 -42.8402 +L 110.653765 -43.624841 +L 115.323554 -44.497803 +L 119.993343 -45.441087 +L 124.663131 -46.618507 +L 129.33292 -47.776861 +L 134.002709 -49.06716 +L 138.672498 -50.637667 +L 143.342287 -52.269166 +L 148.012075 -53.878332 +L 152.681864 -55.549523 +L 157.351653 -57.107979 +L 162.021442 -58.283023 +L 166.69123 -59.345264 +L 171.361019 -60.362432 +L 176.030808 -61.32307 +L 180.700597 -62.301845 +L 185.370386 -63.496477 +L 190.040174 -64.419542 +L 194.709963 -64.850142 +L 199.379752 -65.797793 +L 204.049541 -66.44581 +L 208.71933 -67.571074 +L 213.389118 -68.105954 +L 218.058907 -68.828961 +L 222.728696 -69.701075 +L 227.398485 -70.855281 +L 232.068274 -71.569836 +L 236.738062 -72.038543 +L 241.407851 -72.929641 +L 246.07764 -73.214729 +L 250.747429 -73.276355 +L 255.417218 -74.422954 +L 260.087006 -74.889193 +L 264.756795 -75.578244 +L 269.426584 -75.568404 +L 274.096373 -75.967529 +L 278.766162 -76.769988 +L 283.43595 -77.744633 +L 288.105739 -78.559108 +L 292.775528 -78.637835 +L 297.445317 -78.829771 +L 302.115106 -79.271193 +L 306.784894 -79.898097 +L 311.454683 -79.864413 +L 316.124472 -79.79336 +L 320.794261 -80.1474 +L 325.46405 -81.106086 +L 330.133838 -81.671172 +L 334.803627 -82.223741 +L 339.473416 -82.505782 +L 344.143205 -82.589994 +L 348.812994 -82.724927 +L 353.482782 -83.082244 +L 358.152571 -83.598793 +L 362.82236 -83.347367 +L 367.492149 -82.935964 +L 372.161938 -83.465991 +L 376.831726 -84.122864 +L 381.501515 -84.44283 +L 386.171304 -84.916994 +L 390.841093 -85.184299 +L 395.510882 -85.400416 +L 400.18067 -85.338571 +L 404.850459 -85.493067 +L 409.520248 -85.722369 +L 414.190037 -85.852065 +L 418.859826 -86.132398 +L 423.529614 -86.408689 +L 428.199403 -86.555138 +L 432.869192 -86.409044 +L 437.538981 -86.722423 +L 442.20877 -87.047276 +L 446.878558 -86.542176 +L 451.548347 -86.544975 +L 456.218136 -86.231046 +L 460.887925 -87.24441 +L 465.557713 -87.517835 +L 470.227502 -87.3436 +L 474.897291 -87.194368 +L 479.56708 -87.581183 +L 484.236869 -87.988118 +L 488.906657 -88.570532 +L 493.576446 -88.885826 +L 498.246235 -89.067762 +L 502.916024 -89.347828 +L 507.585813 -89.474069 +L 512.255601 -89.697272 +L 516.92539 -89.939309 +L 521.595179 -89.779396 +L 526.264968 -89.759534 +L 530.934757 -89.479632 +L 535.604545 -89.524025 +L 535.604545 -96.858363 +L 535.604545 -96.858363 +L 530.934757 -96.909599 +L 526.264968 -97.237693 +L 521.595179 -97.216196 +L 516.92539 -98.058602 +L 512.255601 -97.8682 +L 507.585813 -97.03415 +L 502.916024 -97.030916 +L 498.246235 -96.770152 +L 493.576446 -96.35246 +L 488.906657 -95.914137 +L 484.236869 -94.590392 +L 479.56708 -93.301828 +L 474.897291 -92.775159 +L 470.227502 -92.771615 +L 465.557713 -92.467111 +L 460.887925 -92.0393 +L 456.218136 -90.362435 +L 451.548347 -90.372152 +L 446.878558 -89.907309 +L 442.20877 -90.314741 +L 437.538981 -89.746831 +L 432.869192 -89.419492 +L 428.199403 -89.911428 +L 423.529614 -90.011093 +L 418.859826 -89.484812 +L 414.190037 -88.873399 +L 409.520248 -89.074846 +L 404.850459 -88.525932 +L 400.18067 -88.001397 +L 395.510882 -88.721627 +L 390.841093 -88.518373 +L 386.171304 -87.726429 +L 381.501515 -86.450187 +L 376.831726 -85.817993 +L 372.161938 -85.162476 +L 367.492149 -84.870637 +L 362.82236 -85.349041 +L 358.152571 -85.716266 +L 353.482782 -84.789349 +L 348.812994 -84.469229 +L 344.143205 -84.552819 +L 339.473416 -84.743521 +L 334.803627 -84.298449 +L 330.133838 -83.562525 +L 325.46405 -83.037995 +L 320.794261 -82.176345 +L 316.124472 -81.388185 +L 311.454683 -81.30475 +L 306.784894 -81.233503 +L 302.115106 -80.695383 +L 297.445317 -80.233316 +L 292.775528 -79.853009 +L 288.105739 -79.760754 +L 283.43595 -79.137477 +L 278.766162 -78.490497 +L 274.096373 -77.982383 +L 269.426584 -77.678117 +L 264.756795 -77.276161 +L 260.087006 -76.69018 +L 255.417218 -76.213693 +L 250.747429 -75.39797 +L 246.07764 -75.081423 +L 241.407851 -74.59592 +L 236.738062 -73.629391 +L 232.068274 -73.180189 +L 227.398485 -72.548316 +L 222.728696 -71.831468 +L 218.058907 -71.196417 +L 213.389118 -70.610151 +L 208.71933 -69.975155 +L 204.049541 -69.040954 +L 199.379752 -68.326489 +L 194.709963 -67.480358 +L 190.040174 -66.755508 +L 185.370386 -65.752793 +L 180.700597 -64.879737 +L 176.030808 -63.957948 +L 171.361019 -62.954479 +L 166.69123 -61.960903 +L 162.021442 -60.742294 +L 157.351653 -59.354389 +L 152.681864 -57.749828 +L 148.012075 -56.062256 +L 143.342287 -54.212197 +L 138.672498 -52.51573 +L 134.002709 -50.819448 +L 129.33292 -49.293556 +L 124.663131 -47.841408 +L 119.993343 -46.514359 +L 115.323554 -45.406313 +L 110.653765 -44.382968 +L 105.983976 -43.395605 +L 101.314187 -42.303044 +L 96.644399 -41.376931 +L 91.97461 -40.49386 +L 87.304821 -39.570032 +L 82.635032 -38.59557 +L 77.965243 -37.792993 +L 73.295455 -37.31157 +z +" id="m8bfe232d2f" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p02d2395807)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m8bfe232d2f" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.295455 -37.936565 +L 73.295455 -37.507225 +L 77.960574 -38.151883 +L 82.625693 -39.520775 +L 87.290812 -41.336162 +L 91.955931 -43.057341 +L 96.62105 -44.827669 +L 101.286169 -46.886453 +L 105.951288 -49.107187 +L 110.616407 -51.658185 +L 115.281526 -54.472999 +L 119.946645 -57.399835 +L 124.611764 -60.448088 +L 129.276883 -63.722964 +L 133.942002 -66.816129 +L 138.607121 -69.436657 +L 143.27224 -71.618872 +L 147.937359 -73.673267 +L 152.602478 -75.476516 +L 157.267597 -76.804871 +L 161.932716 -78.020961 +L 166.597835 -79.13982 +L 171.262954 -80.12155 +L 175.928073 -81.072284 +L 180.593192 -81.793566 +L 185.258311 -82.721798 +L 189.92343 -83.554561 +L 194.588549 -84.247832 +L 199.253668 -84.797693 +L 203.918787 -85.375484 +L 208.583906 -85.995383 +L 213.249025 -86.587263 +L 217.914144 -87.02332 +L 222.579263 -87.54455 +L 227.244382 -88.11797 +L 231.909501 -88.561995 +L 236.57462 -88.861715 +L 241.239739 -89.299993 +L 245.904858 -89.634621 +L 250.569977 -89.947359 +L 255.235096 -90.335395 +L 259.900215 -90.706295 +L 264.565334 -90.906004 +L 269.230453 -91.210892 +L 273.895572 -91.538186 +L 278.560691 -91.780749 +L 283.22581 -91.923266 +L 287.890929 -92.233 +L 292.556048 -92.662204 +L 297.221167 -92.921633 +L 301.886286 -93.098923 +L 306.551405 -93.281126 +L 311.216524 -93.345369 +L 315.881643 -93.452875 +L 320.546762 -93.613482 +L 325.211881 -93.784956 +L 329.877 -94.110941 +L 334.542119 -94.264392 +L 339.207238 -94.442227 +L 343.872357 -94.782744 +L 348.537476 -94.954865 +L 353.202595 -95.090908 +L 357.867714 -95.093912 +L 362.532833 -95.284458 +L 367.197952 -95.345314 +L 371.863071 -95.423403 +L 376.52819 -95.650218 +L 381.193309 -95.6138 +L 385.858428 -95.478463 +L 390.523547 -95.701569 +L 395.188666 -95.996218 +L 399.853785 -96.148838 +L 404.518904 -96.446619 +L 409.184023 -96.587681 +L 413.849142 -96.767963 +L 418.514261 -96.879951 +L 423.17938 -97.010458 +L 427.844499 -97.116301 +L 432.509618 -97.212985 +L 437.174737 -97.241614 +L 441.839856 -97.2882 +L 446.504975 -97.411194 +L 451.170094 -97.54594 +L 455.835213 -97.548422 +L 460.500332 -97.594029 +L 465.165451 -97.674555 +L 469.83057 -97.718607 +L 474.495689 -97.760626 +L 479.160808 -97.704036 +L 483.825927 -97.784366 +L 488.491046 -97.84785 +L 493.156165 -97.887289 +L 497.821284 -97.903355 +L 502.486403 -97.871585 +L 507.151522 -97.798089 +L 511.816641 -97.781431 +L 516.48176 -97.852965 +L 521.146879 -97.922329 +L 525.811998 -97.931275 +L 530.477117 -97.869201 +L 535.142236 -97.849593 +L 535.142236 -111.16987 +L 535.142236 -111.16987 +L 530.477117 -111.234802 +L 525.811998 -111.228268 +L 521.146879 -111.073995 +L 516.48176 -110.909206 +L 511.816641 -110.724836 +L 507.151522 -110.803349 +L 502.486403 -110.865885 +L 497.821284 -111.246364 +L 493.156165 -111.087302 +L 488.491046 -110.534326 +L 483.825927 -110.444285 +L 479.160808 -110.483933 +L 474.495689 -110.310768 +L 469.83057 -110.113375 +L 465.165451 -109.687569 +L 460.500332 -109.377507 +L 455.835213 -109.482366 +L 451.170094 -109.633639 +L 446.504975 -109.277477 +L 441.839856 -108.937771 +L 437.174737 -109.134084 +L 432.509618 -109.154539 +L 427.844499 -108.992945 +L 423.17938 -108.778607 +L 418.514261 -108.532976 +L 413.849142 -108.107012 +L 409.184023 -107.369689 +L 404.518904 -107.484314 +L 399.853785 -107.32254 +L 395.188666 -106.788939 +L 390.523547 -106.210706 +L 385.858428 -106.3857 +L 381.193309 -106.458519 +L 376.52819 -106.687087 +L 371.863071 -106.306528 +L 367.197952 -105.874156 +L 362.532833 -105.066831 +L 357.867714 -104.783111 +L 353.202595 -104.83163 +L 348.537476 -104.962801 +L 343.872357 -104.621262 +L 339.207238 -104.048929 +L 334.542119 -103.879596 +L 329.877 -103.871474 +L 325.211881 -103.696834 +L 320.546762 -102.959412 +L 315.881643 -102.085941 +L 311.216524 -101.843237 +L 306.551405 -101.372331 +L 301.886286 -100.32741 +L 297.221167 -100.460339 +L 292.556048 -100.122952 +L 287.890929 -99.289466 +L 283.22581 -97.796561 +L 278.560691 -97.791982 +L 273.895572 -97.385853 +L 269.230453 -96.466062 +L 264.565334 -96.868378 +L 259.900215 -96.841085 +L 255.235096 -96.31664 +L 250.569977 -95.526814 +L 245.904858 -94.995822 +L 241.239739 -94.584188 +L 236.57462 -93.67669 +L 231.909501 -93.398508 +L 227.244382 -92.545488 +L 222.579263 -91.801701 +L 217.914144 -91.129884 +L 213.249025 -89.995941 +L 208.583906 -89.426691 +L 203.918787 -88.752101 +L 199.253668 -87.842255 +L 194.588549 -87.199231 +L 189.92343 -86.12586 +L 185.258311 -84.62184 +L 180.593192 -83.336846 +L 175.928073 -82.720667 +L 171.262954 -81.925152 +L 166.597835 -80.822191 +L 161.932716 -79.558661 +L 157.267597 -78.290624 +L 152.602478 -76.950794 +L 147.937359 -75.066093 +L 143.27224 -73.028779 +L 138.607121 -71.012118 +L 133.942002 -68.63356 +L 129.276883 -65.950491 +L 124.611764 -62.870081 +L 119.946645 -59.681194 +L 115.281526 -56.414398 +L 110.616407 -53.300348 +L 105.951288 -50.326507 +L 101.286169 -47.719532 +L 96.62105 -45.404915 +L 91.955931 -43.449881 +L 87.290812 -41.688435 +L 82.625693 -39.882832 +L 77.960574 -38.490283 +L 73.295455 -37.936565 +z +" id="m1bd2687842" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p02d2395807)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m1bd2687842" y="144"/> + </g> + </g> + <g id="line2d_10"> + <path clip-path="url(#p02d2395807)" d="M 73.295455 106.857397 +L 77.965243 106.425005 +L 82.635032 105.574619 +L 87.304821 104.54627 +L 91.97461 103.627413 +L 96.644399 102.735478 +L 101.314187 101.883946 +L 105.983976 100.882097 +L 110.653765 99.996095 +L 115.323554 99.047942 +L 119.993343 98.022277 +L 124.663131 96.770043 +L 129.33292 95.464791 +L 134.002709 94.056696 +L 138.672498 92.423301 +L 143.342287 90.759319 +L 148.012075 89.029706 +L 152.681864 87.350325 +L 157.351653 85.768816 +L 162.021442 84.487341 +L 166.69123 83.346916 +L 171.361019 82.341545 +L 176.030808 81.359491 +L 180.700597 80.409209 +L 185.370386 79.375365 +L 190.040174 78.412475 +L 194.709963 77.83475 +L 199.379752 76.937859 +L 204.049541 76.256618 +L 208.71933 75.226886 +L 213.389118 74.641948 +L 218.058907 73.987311 +L 222.728696 73.233729 +L 227.398485 72.298201 +L 232.068274 71.624988 +L 236.738062 71.166033 +L 241.407851 70.23722 +L 246.07764 69.851924 +L 250.747429 69.662838 +L 255.417218 68.681676 +L 260.087006 68.210313 +L 264.756795 67.572798 +L 269.426584 67.376739 +L 274.096373 67.025044 +L 278.766162 66.369758 +L 283.43595 65.558945 +L 288.105739 64.840069 +L 292.775528 64.754578 +L 297.445317 64.468457 +L 302.115106 64.016712 +L 306.784894 63.4342 +L 311.454683 63.415418 +L 316.124472 63.409228 +L 320.794261 62.838127 +L 325.46405 61.92796 +L 330.133838 61.383152 +L 334.803627 60.738905 +L 339.473416 60.375349 +L 344.143205 60.428594 +L 348.812994 60.402922 +L 353.482782 60.064204 +L 358.152571 59.34247 +L 362.82236 59.651796 +L 367.492149 60.096699 +L 372.161938 59.685767 +L 376.831726 59.029572 +L 381.501515 58.553492 +L 386.171304 57.678289 +L 390.841093 57.148664 +L 395.510882 56.938978 +L 400.18067 57.330016 +L 404.850459 56.990501 +L 409.520248 56.601393 +L 414.190037 56.637268 +L 418.859826 56.191395 +L 423.529614 55.790109 +L 428.199403 55.766717 +L 432.869192 56.085732 +L 437.538981 55.765373 +L 442.20877 55.318991 +L 446.878558 55.775257 +L 451.548347 55.541437 +L 456.218136 55.70326 +L 460.887925 54.358145 +L 465.557713 54.007527 +L 470.227502 53.942393 +L 474.897291 54.015236 +L 479.56708 53.558494 +L 484.236869 52.710745 +L 488.906657 51.757666 +L 493.576446 51.380857 +L 498.246235 51.081043 +L 502.916024 50.810628 +L 507.585813 50.74589 +L 512.255601 50.217264 +L 516.92539 50.001045 +L 521.595179 50.502204 +L 526.264968 50.501386 +L 530.934757 50.805384 +L 535.604545 50.808806 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p02d2395807)" d="M 73.295455 106.278105 +L 77.960574 105.678917 +L 82.625693 104.298197 +L 87.290812 102.487702 +L 91.955931 100.746389 +L 96.62105 98.883708 +L 101.286169 96.697007 +L 105.951288 94.283153 +L 110.616407 91.520734 +L 115.281526 88.556302 +L 119.946645 85.459485 +L 124.611764 82.340916 +L 129.276883 79.163272 +L 133.942002 76.275156 +L 138.607121 73.775612 +L 143.27224 71.676175 +L 147.937359 69.63032 +L 152.602478 67.786345 +L 157.267597 66.452252 +L 161.932716 65.210189 +L 166.597835 64.018994 +L 171.262954 62.976649 +L 175.928073 62.103525 +L 180.593192 61.434794 +L 185.258311 60.328181 +L 189.92343 59.15979 +L 194.588549 58.276469 +L 199.253668 57.680026 +L 203.918787 56.936208 +L 208.583906 56.288963 +L 213.249025 55.708398 +L 217.914144 54.923398 +L 222.579263 54.326875 +L 227.244382 53.668271 +L 231.909501 53.019749 +L 236.57462 52.730798 +L 241.239739 52.057909 +L 245.904858 51.684778 +L 250.569977 51.262913 +L 255.235096 50.673983 +L 259.900215 50.22631 +L 264.565334 50.112809 +L 269.230453 50.161523 +L 273.895572 49.53798 +L 278.560691 49.213635 +L 283.22581 49.140086 +L 287.890929 48.238767 +L 292.556048 47.607422 +L 297.221167 47.309014 +L 301.886286 47.286834 +L 306.551405 46.673272 +L 311.216524 46.405697 +L 315.881643 46.230592 +L 320.546762 45.713553 +L 325.211881 45.259105 +L 329.877 45.008793 +L 334.542119 44.928006 +L 339.207238 44.754422 +L 343.872357 44.297997 +L 348.537476 44.041167 +L 353.202595 44.038731 +L 357.867714 44.061488 +L 362.532833 43.824356 +L 367.197952 43.390265 +L 371.863071 43.135034 +L 376.52819 42.831347 +L 381.193309 42.96384 +L 385.858428 43.067918 +L 390.523547 43.043862 +L 395.188666 42.607422 +L 399.853785 42.264311 +L 404.518904 42.034533 +L 409.184023 42.021315 +L 413.849142 41.562512 +L 418.514261 41.293537 +L 423.17938 41.105467 +L 427.844499 40.945377 +L 432.509618 40.816238 +L 437.174737 40.812151 +L 441.839856 40.887014 +L 446.504975 40.655664 +L 451.170094 40.410211 +L 455.835213 40.484606 +L 460.500332 40.514232 +L 465.165451 40.318938 +L 469.83057 40.084009 +L 474.495689 39.964303 +L 479.160808 39.906015 +L 483.825927 39.885674 +L 488.491046 39.808912 +L 493.156165 39.512705 +L 497.821284 39.425141 +L 502.486403 39.631265 +L 507.151522 39.699281 +L 511.816641 39.746866 +L 516.48176 39.618914 +L 521.146879 39.501838 +L 525.811998 39.420229 +L 530.477117 39.447998 +L 535.142236 39.490269 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.18 110.74 +L 50.18 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.18 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.18 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.45, 23.04)" x="304.45" y="23.04">HalfCheetah</text> + </g> + </g> + </g> + <defs> + <clipPath id="p02d2395807"> + <rect height="81.7" width="508.54" x="50.18" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.18 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 50.18 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p24a6f96763)" d="M 73.295455 110.74 +L 73.295455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.295455, 128.598281)" x="73.295455" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p24a6f96763)" d="M 165.759862 110.74 +L 165.759862 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.759862, 128.598281)" x="165.759862" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p24a6f96763)" d="M 258.224269 110.74 +L 258.224269 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.224269, 128.598281)" x="258.224269" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p24a6f96763)" d="M 350.688676 110.74 +L 350.688676 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.688676, 128.598281)" x="350.688676" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p24a6f96763)" d="M 443.153083 110.74 +L 443.153083 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.153083, 128.598281)" x="443.153083" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p24a6f96763)" d="M 535.61749 110.74 +L 535.61749 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.61749, 128.598281)" x="535.61749" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p24a6f96763)" d="M 50.18 108.545839 +L 558.72 108.545839 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 112.72498)" x="40.68" y="112.72498">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p24a6f96763)" d="M 50.18 79.483446 +L 558.72 79.483446 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 83.662586)" x="40.68" y="83.662586">1000</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#p24a6f96763)" d="M 50.18 50.421052 +L 558.72 50.421052 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 54.600193)" x="40.68" y="54.600193">2000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.295455 -37.585939 +L 73.295455 -37.514209 +L 77.965243 -39.194789 +L 82.635032 -41.47741 +L 87.304821 -43.667667 +L 91.97461 -45.888674 +L 96.644399 -48.421509 +L 101.314187 -51.421827 +L 105.983976 -54.182792 +L 110.653765 -56.836421 +L 115.323554 -60.055555 +L 119.993343 -63.123017 +L 124.663131 -65.746527 +L 129.33292 -68.636677 +L 134.002709 -71.381353 +L 138.672498 -73.855081 +L 143.342287 -74.95722 +L 148.012075 -76.486878 +L 152.681864 -79.714852 +L 157.351653 -81.384524 +L 162.021442 -79.995639 +L 166.69123 -80.075018 +L 171.361019 -81.113362 +L 176.030808 -81.471705 +L 180.700597 -82.244646 +L 185.370386 -82.416296 +L 190.040174 -83.575003 +L 194.709963 -84.403198 +L 199.379752 -84.26159 +L 204.049541 -83.731075 +L 208.71933 -83.336461 +L 213.389118 -83.664577 +L 218.058907 -83.738633 +L 222.728696 -83.560566 +L 227.398485 -81.924784 +L 232.068274 -81.041307 +L 236.738062 -80.34657 +L 241.407851 -80.171016 +L 246.07764 -80.019106 +L 250.747429 -79.886401 +L 255.417218 -79.1386 +L 260.087006 -79.716122 +L 264.756795 -81.446089 +L 269.426584 -82.609813 +L 274.096373 -84.181364 +L 278.766162 -84.33854 +L 283.43595 -84.467462 +L 288.105739 -84.094362 +L 292.775528 -84.852706 +L 297.445317 -85.055622 +L 302.115106 -86.123219 +L 306.784894 -86.404231 +L 311.454683 -85.846228 +L 316.124472 -85.767629 +L 320.794261 -85.052293 +L 325.46405 -84.792023 +L 330.133838 -83.560471 +L 334.803627 -82.624029 +L 339.473416 -82.093115 +L 344.143205 -82.973751 +L 348.812994 -83.323254 +L 353.482782 -83.788574 +L 358.152571 -85.206491 +L 362.82236 -86.171891 +L 367.492149 -86.946248 +L 372.161938 -89.981953 +L 376.831726 -92.102843 +L 381.501515 -93.688334 +L 386.171304 -93.154969 +L 390.841093 -92.74156 +L 395.510882 -92.662769 +L 400.18067 -92.686876 +L 404.850459 -91.093227 +L 409.520248 -88.859251 +L 414.190037 -86.848161 +L 418.859826 -86.302288 +L 423.529614 -85.678845 +L 428.199403 -86.30311 +L 432.869192 -86.42778 +L 437.538981 -88.228846 +L 442.20877 -89.64622 +L 446.878558 -89.994885 +L 451.548347 -88.982336 +L 456.218136 -88.861614 +L 460.887925 -89.417006 +L 465.557713 -87.363898 +L 470.227502 -85.031494 +L 474.897291 -84.920868 +L 479.56708 -85.871484 +L 484.236869 -86.260542 +L 488.906657 -85.874205 +L 493.576446 -85.735033 +L 498.246235 -84.733113 +L 502.916024 -84.191023 +L 507.585813 -83.522175 +L 512.255601 -84.484352 +L 516.92539 -86.032982 +L 521.595179 -87.795858 +L 526.264968 -88.253952 +L 530.934757 -87.407251 +L 535.604545 -88.719903 +L 535.604545 -94.220761 +L 535.604545 -94.220761 +L 530.934757 -94.053806 +L 526.264968 -95.821192 +L 521.595179 -95.317687 +L 516.92539 -93.816609 +L 512.255601 -92.701016 +L 507.585813 -92.703643 +L 502.916024 -94.280933 +L 498.246235 -93.883203 +L 493.576446 -93.216979 +L 488.906657 -93.256399 +L 484.236869 -93.621368 +L 479.56708 -93.322855 +L 474.897291 -92.53781 +L 470.227502 -92.507081 +L 465.557713 -96.085884 +L 460.887925 -97.337003 +L 456.218136 -96.148495 +L 451.548347 -96.270868 +L 446.878558 -95.612567 +L 442.20877 -96.251273 +L 437.538981 -95.648927 +L 432.869192 -94.414283 +L 428.199403 -94.404166 +L 423.529614 -93.048434 +L 418.859826 -93.660466 +L 414.190037 -93.969961 +L 409.520248 -97.701062 +L 404.850459 -100.987417 +L 400.18067 -102.115408 +L 395.510882 -102.140557 +L 390.841093 -103.392538 +L 386.171304 -102.885459 +L 381.501515 -102.229875 +L 376.831726 -100.631521 +L 372.161938 -97.236246 +L 367.492149 -94.722852 +L 362.82236 -93.682723 +L 358.152571 -93.461473 +L 353.482782 -92.475086 +L 348.812994 -91.174763 +L 344.143205 -91.097373 +L 339.473416 -90.391741 +L 334.803627 -89.67037 +L 330.133838 -90.586126 +L 325.46405 -92.377382 +L 320.794261 -93.147919 +L 316.124472 -94.75164 +L 311.454683 -95.493138 +L 306.784894 -95.013403 +L 302.115106 -94.220706 +L 297.445317 -92.117723 +L 292.775528 -91.66987 +L 288.105739 -90.777635 +L 283.43595 -91.688222 +L 278.766162 -91.44794 +L 274.096373 -91.298311 +L 269.426584 -90.184579 +L 264.756795 -89.630559 +L 260.087006 -86.391773 +L 255.417218 -85.420677 +L 250.747429 -87.692824 +L 246.07764 -88.176447 +L 241.407851 -87.414947 +L 236.738062 -87.447571 +L 232.068274 -89.537288 +L 227.398485 -90.522247 +L 222.728696 -91.627914 +L 218.058907 -92.302527 +L 213.389118 -92.718671 +L 208.71933 -90.981678 +L 204.049541 -92.069606 +L 199.379752 -93.781895 +L 194.709963 -94.24281 +L 190.040174 -93.095007 +L 185.370386 -90.430031 +L 180.700597 -89.352335 +L 176.030808 -88.683199 +L 171.361019 -87.672513 +L 166.69123 -86.295209 +L 162.021442 -86.933346 +L 157.351653 -88.105418 +L 152.681864 -86.123599 +L 148.012075 -83.027249 +L 143.342287 -81.039055 +L 138.672498 -80.77494 +L 134.002709 -79.473519 +L 129.33292 -77.701566 +L 124.663131 -74.62934 +L 119.993343 -70.151438 +L 115.323554 -66.781641 +L 110.653765 -63.26322 +L 105.983976 -59.494096 +L 101.314187 -55.416836 +L 96.644399 -50.743942 +L 91.97461 -47.024515 +L 87.304821 -44.191277 +L 82.635032 -41.688277 +L 77.965243 -39.293009 +L 73.295455 -37.585939 +z +" id="ma1d9ba70e6" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p24a6f96763)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#ma1d9ba70e6" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.295455 -37.033765 +L 73.295455 -36.973636 +L 77.962502 -38.174845 +L 82.62955 -40.045841 +L 87.296597 -41.630967 +L 91.963645 -43.109396 +L 96.630692 -44.596398 +L 101.29774 -45.863016 +L 105.964787 -46.940212 +L 110.631835 -48.085074 +L 115.298883 -49.550625 +L 119.96593 -51.376352 +L 124.632978 -53.387267 +L 129.300025 -55.376914 +L 133.967073 -57.362109 +L 138.63412 -59.268444 +L 143.301168 -61.136549 +L 147.968215 -62.817304 +L 152.635263 -64.558132 +L 157.302311 -66.178991 +L 161.969358 -67.26211 +L 166.636406 -68.234639 +L 171.303453 -69.992912 +L 175.970501 -72.304635 +L 180.637548 -75.646788 +L 185.304596 -79.173397 +L 189.971643 -80.152546 +L 194.638691 -81.037016 +L 199.305739 -82.297508 +L 203.972786 -83.149261 +L 208.639834 -84.683864 +L 213.306881 -87.342832 +L 217.973929 -88.429352 +L 222.640976 -90.139457 +L 227.308024 -93.844185 +L 231.975071 -95.807309 +L 236.642119 -96.406844 +L 241.309166 -97.534261 +L 245.976214 -94.948832 +L 250.643262 -90.586247 +L 255.310309 -89.672294 +L 259.977357 -88.456545 +L 264.644404 -87.57149 +L 269.311452 -87.935181 +L 273.978499 -89.536019 +L 278.645547 -91.821129 +L 283.312594 -92.364781 +L 287.979642 -91.048758 +L 292.64669 -91.301467 +L 297.313737 -91.070191 +L 301.980785 -89.501166 +L 306.647832 -89.757065 +L 311.31488 -89.068279 +L 315.981927 -87.396971 +L 320.648975 -88.31573 +L 325.316022 -87.303345 +L 329.98307 -85.72024 +L 334.650118 -84.140837 +L 339.317165 -83.539626 +L 343.984213 -85.973975 +L 348.65126 -88.224249 +L 353.318308 -91.805402 +L 357.985355 -94.759026 +L 362.652403 -94.951612 +L 367.31945 -93.860726 +L 371.986498 -93.72314 +L 376.653546 -95.083892 +L 381.320593 -93.682919 +L 385.987641 -90.810907 +L 390.654688 -90.12794 +L 395.321736 -90.168073 +L 399.988783 -88.516758 +L 404.655831 -87.064363 +L 409.322878 -87.374141 +L 413.989926 -90.356581 +L 418.656974 -92.440873 +L 423.324021 -96.343882 +L 427.991069 -96.612093 +L 432.658116 -93.281614 +L 437.325164 -93.654826 +L 441.992211 -94.229811 +L 446.659259 -93.634887 +L 451.326306 -94.204034 +L 455.993354 -95.762513 +L 460.660402 -97.231937 +L 465.327449 -97.758615 +L 469.994497 -96.558606 +L 474.661544 -94.293042 +L 479.328592 -94.214269 +L 483.995639 -95.077014 +L 488.662687 -95.359545 +L 493.329734 -95.27194 +L 497.996782 -96.08556 +L 502.66383 -100.081834 +L 507.330877 -100.455107 +L 511.997925 -98.683461 +L 516.664972 -97.834261 +L 521.33202 -96.023095 +L 525.999067 -96.376127 +L 530.666115 -96.638784 +L 535.333162 -97.802615 +L 535.333162 -108.010698 +L 535.333162 -108.010698 +L 530.666115 -108.224884 +L 525.999067 -106.865396 +L 521.33202 -106.13088 +L 516.664972 -108.234076 +L 511.997925 -110.110191 +L 507.330877 -111.246364 +L 502.66383 -110.674299 +L 497.996782 -107.251295 +L 493.329734 -104.989487 +L 488.662687 -104.606068 +L 483.995639 -104.263388 +L 479.328592 -102.427533 +L 474.661544 -101.303724 +L 469.994497 -102.740809 +L 465.327449 -104.832121 +L 460.660402 -105.439374 +L 455.993354 -104.797346 +L 451.326306 -103.444417 +L 446.659259 -102.66866 +L 441.992211 -101.532511 +L 437.325164 -100.079244 +L 432.658116 -100.25817 +L 427.991069 -102.916139 +L 423.324021 -104.08576 +L 418.656974 -101.890721 +L 413.989926 -99.435201 +L 409.322878 -96.567819 +L 404.655831 -95.843058 +L 399.988783 -95.950564 +L 395.321736 -97.666143 +L 390.654688 -99.831162 +L 385.987641 -101.631906 +L 381.320593 -104.476675 +L 376.653546 -106.856436 +L 371.986498 -106.18026 +L 367.31945 -104.949062 +L 362.652403 -106.111178 +L 357.985355 -105.505351 +L 353.318308 -102.283203 +L 348.65126 -97.710143 +L 343.984213 -94.854149 +L 339.317165 -91.79675 +L 334.650118 -91.934678 +L 329.98307 -94.37059 +L 325.316022 -97.1989 +L 320.648975 -98.275645 +L 315.981927 -94.806526 +L 311.31488 -94.771463 +L 306.647832 -94.911805 +L 301.980785 -94.249335 +L 297.313737 -93.983916 +L 292.64669 -93.32863 +L 287.979642 -94.664543 +L 283.312594 -97.202331 +L 278.645547 -96.660122 +L 273.978499 -96.064216 +L 269.311452 -96.349527 +L 264.644404 -95.621897 +L 259.977357 -95.243964 +L 255.310309 -93.945709 +L 250.643262 -95.431893 +L 245.976214 -100.91351 +L 241.309166 -103.950285 +L 236.642119 -102.562456 +L 231.975071 -102.621023 +L 227.308024 -102.167246 +L 222.640976 -97.883105 +L 217.973929 -96.236557 +L 213.306881 -94.763428 +L 208.639834 -91.705536 +L 203.972786 -89.811977 +L 199.305739 -89.438421 +L 194.638691 -89.577606 +L 189.971643 -89.350077 +L 185.304596 -88.398658 +L 180.637548 -84.747727 +L 175.970501 -80.575142 +L 171.303453 -76.183751 +L 166.636406 -73.407195 +L 161.969358 -72.014786 +L 157.302311 -70.676595 +L 152.635263 -69.079993 +L 147.968215 -67.129323 +L 143.301168 -64.919041 +L 138.63412 -62.135983 +L 133.967073 -59.656506 +L 129.300025 -57.370308 +L 124.632978 -55.230166 +L 119.96593 -53.202095 +L 115.298883 -51.135099 +L 110.631835 -49.163166 +L 105.964787 -47.581849 +L 101.29774 -46.361888 +L 96.630692 -45.059175 +L 91.963645 -43.516084 +L 87.296597 -41.872826 +L 82.62955 -40.207285 +L 77.962502 -38.32435 +L 73.295455 -37.033765 +z +" id="m1318f7a372" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p24a6f96763)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m1318f7a372" y="144"/> + </g> + </g> + <g id="line2d_10"> + <path clip-path="url(#p24a6f96763)" d="M 73.295455 106.449926 +L 77.965243 104.756101 +L 82.635032 102.417156 +L 87.304821 100.070528 +L 91.97461 97.543406 +L 96.644399 94.417274 +L 101.314187 90.580668 +L 105.983976 87.161556 +L 110.653765 83.950179 +L 115.323554 80.581402 +L 119.993343 77.362773 +L 124.663131 73.812067 +L 129.33292 70.830879 +L 134.002709 68.572564 +L 138.672498 66.684989 +L 143.342287 66.001862 +L 148.012075 64.242936 +L 152.681864 61.080775 +L 157.351653 59.255029 +L 162.021442 60.535508 +L 166.69123 60.814887 +L 171.361019 59.607062 +L 176.030808 58.922548 +L 180.700597 58.20151 +L 185.370386 57.576837 +L 190.040174 55.664995 +L 194.709963 54.676996 +L 199.379752 54.978257 +L 204.049541 56.09966 +L 208.71933 56.840931 +L 213.389118 55.808376 +L 218.058907 55.97942 +L 222.728696 56.40576 +L 227.398485 57.776485 +L 232.068274 58.710703 +L 236.738062 60.10293 +L 241.407851 60.207018 +L 246.07764 59.902223 +L 250.747429 60.210388 +L 255.417218 61.720362 +L 260.087006 60.946052 +L 264.756795 58.461676 +L 269.426584 57.602804 +L 274.096373 56.260162 +L 278.766162 56.10676 +L 283.43595 55.922158 +L 288.105739 56.564002 +L 292.775528 55.738712 +L 297.445317 55.413327 +L 302.115106 53.828037 +L 306.784894 53.291183 +L 311.454683 53.330317 +L 316.124472 53.740365 +L 320.794261 54.899894 +L 325.46405 55.415297 +L 330.133838 56.926702 +L 334.803627 57.852801 +L 339.473416 57.757572 +L 344.143205 56.964438 +L 348.812994 56.750991 +L 353.482782 55.86817 +L 358.152571 54.666018 +L 362.82236 54.072693 +L 367.492149 53.16545 +L 372.161938 50.3909 +L 376.831726 47.632818 +L 381.501515 46.040896 +L 386.171304 45.979786 +L 390.841093 45.932951 +L 395.510882 46.598337 +L 400.18067 46.598858 +L 404.850459 47.959678 +L 409.520248 50.719844 +L 414.190037 53.590939 +L 418.859826 54.018623 +L 423.529614 54.636361 +L 428.199403 53.646362 +L 432.869192 53.578969 +L 437.538981 52.061114 +L 442.20877 51.051254 +L 446.878558 51.196274 +L 451.548347 51.373398 +L 456.218136 51.494945 +L 460.887925 50.622996 +L 465.557713 52.275109 +L 470.227502 55.230713 +L 474.897291 55.270661 +L 479.56708 54.40283 +L 484.236869 54.059045 +L 488.906657 54.434698 +L 493.576446 54.523994 +L 498.246235 54.691842 +L 502.916024 54.764022 +L 507.585813 55.887091 +L 512.255601 55.407316 +L 516.92539 54.075205 +L 521.595179 52.443227 +L 526.264968 51.962428 +L 530.934757 53.269471 +L 535.604545 52.529668 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#p24a6f96763)" d="M 73.295455 106.996299 +L 77.962502 105.750403 +L 82.62955 103.873437 +L 87.296597 102.248104 +L 91.963645 100.68726 +L 96.630692 99.172213 +L 101.29774 97.887548 +L 105.964787 96.73897 +L 110.631835 95.37588 +L 115.298883 93.657138 +L 119.96593 91.710776 +L 124.632978 89.691284 +L 129.300025 87.626389 +L 133.967073 85.490692 +L 138.63412 83.297786 +L 143.301168 80.972205 +L 147.968215 79.026687 +L 152.635263 77.180937 +L 157.302311 75.572207 +L 161.969358 74.361552 +L 166.636406 73.179083 +L 171.303453 70.911668 +L 175.970501 67.560111 +L 180.637548 63.802742 +L 185.304596 60.213972 +L 189.971643 59.248688 +L 194.638691 58.692689 +L 199.305739 58.132036 +L 203.972786 57.519381 +L 208.639834 55.8053 +L 213.306881 52.94687 +L 217.973929 51.667045 +L 222.640976 49.988719 +L 227.308024 45.994285 +L 231.975071 44.785834 +L 236.642119 44.51535 +L 241.309166 43.257727 +L 245.976214 46.068829 +L 250.643262 50.99093 +L 255.310309 52.190999 +L 259.977357 52.149746 +L 264.644404 52.403306 +L 269.311452 51.857646 +L 273.978499 51.199882 +L 278.645547 49.759374 +L 283.312594 49.216444 +L 287.979642 51.143349 +L 292.64669 51.684951 +L 297.313737 51.472946 +L 301.980785 52.124749 +L 306.647832 51.665565 +L 311.31488 52.080129 +L 315.981927 52.898252 +L 320.648975 50.704312 +L 325.316022 51.748878 +L 329.98307 53.954585 +L 334.650118 55.962243 +L 339.317165 56.331812 +L 343.984213 53.585938 +L 348.65126 51.032804 +L 353.318308 46.955697 +L 357.985355 43.867812 +L 362.652403 43.468605 +L 367.31945 44.595106 +L 371.986498 44.0483 +L 376.653546 43.029836 +L 381.320593 44.920203 +L 385.987641 47.778594 +L 390.654688 49.020449 +L 395.321736 50.082892 +L 399.988783 51.766339 +L 404.655831 52.546289 +L 409.322878 52.02902 +L 413.989926 49.104109 +L 418.656974 46.834203 +L 423.324021 43.785179 +L 427.991069 44.235884 +L 432.658116 47.230108 +L 437.325164 47.132965 +L 441.992211 46.118839 +L 446.659259 45.848227 +L 451.326306 45.175775 +L 455.993354 43.720071 +L 460.660402 42.664345 +L 465.327449 42.704632 +L 469.994497 44.350293 +L 474.661544 46.201617 +L 479.328592 45.679099 +L 483.995639 44.329799 +L 488.662687 44.017194 +L 493.329734 43.869286 +L 497.996782 42.331573 +L 502.66383 38.621933 +L 507.330877 38.149265 +L 511.997925 39.603174 +L 516.664972 40.965831 +L 521.33202 42.923012 +L 525.999067 42.379239 +L 530.666115 41.568166 +L 535.333162 41.093344 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.18 110.74 +L 50.18 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.18 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.18 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.45, 23.04)" x="304.45" y="23.04">Hopper</text> + </g> + </g> + </g> + <defs> + <clipPath id="p24a6f96763"> + <rect height="81.7" width="508.54" x="50.18" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.27 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 50.27 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p2ba8c42e99)" d="M 73.381364 110.74 +L 73.381364 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.381364, 128.598281)" x="73.381364" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p2ba8c42e99)" d="M 165.842537 110.74 +L 165.842537 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.842537, 128.598281)" x="165.842537" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p2ba8c42e99)" d="M 258.30371 110.74 +L 258.30371 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.30371, 128.598281)" x="258.30371" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p2ba8c42e99)" d="M 350.764882 110.74 +L 350.764882 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.764882, 128.598281)" x="350.764882" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p2ba8c42e99)" d="M 443.226055 110.74 +L 443.226055 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.226055, 128.598281)" x="443.226055" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p2ba8c42e99)" d="M 535.687228 110.74 +L 535.687228 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.687228, 128.598281)" x="535.687228" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p2ba8c42e99)" d="M 50.27 107.729461 +L 558.72 107.729461 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.77, 111.908602)" x="40.77" y="111.908602">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p2ba8c42e99)" d="M 50.27 58.134286 +L 558.72 58.134286 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.77, 62.313427)" x="40.77" y="62.313427">5000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.381364 -37.081299 +L 73.381364 -37.057115 +L 78.050326 -37.32165 +L 82.719288 -37.878023 +L 87.388251 -38.683279 +L 92.057213 -39.823327 +L 96.726175 -41.770663 +L 101.395138 -45.881517 +L 106.0641 -53.493102 +L 110.733062 -63.981647 +L 115.402025 -76.153515 +L 120.070987 -85.654632 +L 124.739949 -91.373103 +L 129.408912 -92.476865 +L 134.077874 -89.804216 +L 138.746837 -87.798837 +L 143.415799 -87.856709 +L 148.084761 -90.50778 +L 152.753724 -92.070357 +L 157.422686 -90.092913 +L 162.091648 -90.298947 +L 166.760611 -90.624555 +L 171.429573 -92.484448 +L 176.098535 -96.366386 +L 180.767498 -92.465141 +L 185.43646 -90.757933 +L 190.105422 -91.247092 +L 194.774385 -88.710926 +L 199.443347 -89.827389 +L 204.112309 -90.365408 +L 208.781272 -92.841845 +L 213.450234 -93.14339 +L 218.119197 -90.906652 +L 222.788159 -88.670285 +L 227.457121 -88.902517 +L 232.126084 -88.215001 +L 236.795046 -88.638901 +L 241.464008 -89.575629 +L 246.132971 -90.210374 +L 250.801933 -91.328019 +L 255.470895 -90.311571 +L 260.139858 -89.480652 +L 264.80882 -86.72013 +L 269.477782 -87.826944 +L 274.146745 -90.849328 +L 278.815707 -94.602494 +L 283.484669 -96.054542 +L 288.153632 -96.197891 +L 292.822594 -95.528142 +L 297.491556 -93.640067 +L 302.160519 -93.2464 +L 306.829481 -93.041661 +L 311.498444 -93.684475 +L 316.167406 -94.973405 +L 320.836368 -95.965322 +L 325.505331 -96.092732 +L 330.174293 -93.564331 +L 334.843255 -89.826104 +L 339.512218 -91.295846 +L 344.18118 -94.351765 +L 348.850142 -97.10316 +L 353.519105 -98.495611 +L 358.188067 -99.472896 +L 362.857029 -103.245464 +L 367.525992 -103.841003 +L 372.194954 -102.999244 +L 376.863916 -99.140585 +L 381.532879 -96.445361 +L 386.201841 -96.4471 +L 390.870803 -97.50313 +L 395.539766 -98.884507 +L 400.208728 -99.429635 +L 404.877691 -97.166836 +L 409.546653 -97.422155 +L 414.215615 -95.272759 +L 418.884578 -94.908754 +L 423.55354 -94.08822 +L 428.222502 -96.203018 +L 432.891465 -96.588516 +L 437.560427 -94.008387 +L 442.229389 -93.753637 +L 446.898352 -95.643981 +L 451.567314 -95.294389 +L 456.236276 -94.85703 +L 460.905239 -97.706317 +L 465.574201 -96.729042 +L 470.243163 -94.167669 +L 474.912126 -90.770094 +L 479.581088 -90.085927 +L 484.250051 -90.743926 +L 488.919013 -91.596901 +L 493.587975 -93.228465 +L 498.256938 -94.500631 +L 502.9259 -96.143238 +L 507.594862 -97.375841 +L 512.263825 -99.955274 +L 516.932787 -102.903981 +L 521.601749 -101.822334 +L 526.270712 -100.28706 +L 530.939674 -94.671098 +L 535.608636 -93.099531 +L 535.608636 -102.808669 +L 535.608636 -102.808669 +L 530.939674 -104.428088 +L 526.270712 -107.335266 +L 521.601749 -110.570271 +L 516.932787 -111.246364 +L 512.263825 -109.737098 +L 507.594862 -106.773498 +L 502.9259 -105.266227 +L 498.256938 -103.820319 +L 493.587975 -102.864883 +L 488.919013 -101.726571 +L 484.250051 -101.552484 +L 479.581088 -100.533093 +L 474.912126 -99.367108 +L 470.243163 -102.611976 +L 465.574201 -103.662796 +L 460.905239 -106.527161 +L 456.236276 -105.454768 +L 451.567314 -104.714747 +L 446.898352 -103.505432 +L 442.229389 -101.026561 +L 437.560427 -100.502994 +L 432.891465 -104.373734 +L 428.222502 -103.952503 +L 423.55354 -104.402334 +L 418.884578 -106.135825 +L 414.215615 -105.323156 +L 409.546653 -104.132426 +L 404.877691 -102.228356 +L 400.208728 -104.224527 +L 395.539766 -104.992008 +L 390.870803 -104.015383 +L 386.201841 -102.980783 +L 381.532879 -104.827558 +L 376.863916 -106.353757 +L 372.194954 -107.858258 +L 367.525992 -109.338718 +L 362.857029 -109.259724 +L 358.188067 -106.137477 +L 353.519105 -104.208246 +L 348.850142 -101.99761 +L 344.18118 -100.105628 +L 339.512218 -98.682766 +L 334.843255 -98.417133 +L 330.174293 -101.936889 +L 325.505331 -104.219303 +L 320.836368 -103.241027 +L 316.167406 -100.884585 +L 311.498444 -98.656717 +L 306.829481 -99.946564 +L 302.160519 -101.685625 +L 297.491556 -103.459843 +L 292.822594 -105.880919 +L 288.153632 -105.51309 +L 283.484669 -105.081922 +L 278.815707 -102.08465 +L 274.146745 -98.688285 +L 269.477782 -97.051478 +L 264.80882 -95.687298 +L 260.139858 -97.247718 +L 255.470895 -98.941088 +L 250.801933 -99.364579 +L 246.132971 -98.869906 +L 241.464008 -98.309288 +L 236.795046 -100.36911 +L 232.126084 -101.551 +L 227.457121 -102.902147 +L 222.788159 -100.559111 +L 218.119197 -100.403474 +L 213.450234 -102.353439 +L 208.781272 -101.956493 +L 204.112309 -100.852214 +L 199.443347 -99.816762 +L 194.774385 -98.596537 +L 190.105422 -99.984097 +L 185.43646 -101.73451 +L 180.767498 -103.241036 +L 176.098535 -105.092601 +L 171.429573 -100.781123 +L 166.760611 -98.391333 +L 162.091648 -97.396813 +L 157.422686 -97.038728 +L 152.753724 -99.114902 +L 148.084761 -98.130187 +L 143.415799 -97.027423 +L 138.746837 -97.128239 +L 134.077874 -97.718231 +L 129.408912 -97.252003 +L 124.739949 -96.140914 +L 120.070987 -91.659362 +L 115.402025 -82.693044 +L 110.733062 -71.317353 +L 106.0641 -59.981289 +L 101.395138 -49.813567 +L 96.726175 -43.363929 +L 92.057213 -40.367286 +L 87.388251 -38.892347 +L 82.719288 -37.96539 +L 78.050326 -37.361094 +L 73.381364 -37.081299 +z +" id="mde3b1fa199" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2ba8c42e99)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#mde3b1fa199" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.381364 -36.986449 +L 73.381364 -36.973636 +L 78.047776 -37.163063 +L 82.714189 -37.572156 +L 87.380602 -38.122542 +L 92.047014 -38.748782 +L 96.713427 -39.38096 +L 101.37984 -40.041418 +L 106.046252 -40.740522 +L 110.712665 -41.60132 +L 115.379078 -42.663838 +L 120.04549 -44.107983 +L 124.711903 -46.485262 +L 129.378316 -50.337716 +L 134.044728 -56.745375 +L 138.711141 -64.233827 +L 143.377554 -71.244007 +L 148.043966 -76.774775 +L 152.710379 -79.84145 +L 157.376792 -82.186026 +L 162.043204 -84.236751 +L 166.709617 -84.056877 +L 171.37603 -85.873247 +L 176.042442 -85.611721 +L 180.708855 -83.707008 +L 185.375268 -82.428601 +L 190.04168 -83.402024 +L 194.708093 -85.119578 +L 199.374506 -86.109279 +L 204.040918 -84.844279 +L 208.707331 -83.167571 +L 213.373744 -80.992052 +L 218.040156 -80.51431 +L 222.706569 -83.202261 +L 227.372982 -85.160765 +L 232.039394 -85.190837 +L 236.705807 -82.456435 +L 241.37222 -81.794306 +L 246.038632 -83.433488 +L 250.705045 -84.484699 +L 255.371458 -84.422947 +L 260.03787 -85.564561 +L 264.704283 -86.78063 +L 269.370696 -86.491001 +L 274.037108 -86.316282 +L 278.703521 -86.477052 +L 283.369934 -86.890699 +L 288.036346 -86.596038 +L 292.702759 -87.684276 +L 297.369172 -89.770603 +L 302.035584 -90.575044 +L 306.701997 -88.990574 +L 311.368409 -88.901387 +L 316.034822 -85.704334 +L 320.701235 -86.062776 +L 325.367647 -86.366627 +L 330.03406 -84.86538 +L 334.700473 -86.1752 +L 339.366885 -90.330233 +L 344.033298 -91.460963 +L 348.699711 -93.889731 +L 353.366123 -96.069541 +L 358.032536 -97.394454 +L 362.698949 -96.483567 +L 367.365361 -94.93355 +L 372.031774 -94.340188 +L 376.698187 -94.807556 +L 381.364599 -96.118442 +L 386.031012 -96.015811 +L 390.697425 -97.918431 +L 395.363837 -98.632635 +L 400.03025 -98.176571 +L 404.696663 -99.388789 +L 409.363075 -100.194243 +L 414.029488 -100.225142 +L 418.695901 -100.527918 +L 423.362313 -100.631752 +L 428.028726 -101.899371 +L 432.695139 -105.187255 +L 437.361551 -107.01038 +L 442.027964 -104.278761 +L 446.694377 -102.470352 +L 451.360789 -102.606884 +L 456.027202 -104.175426 +L 460.693615 -103.452681 +L 465.360027 -103.115285 +L 470.02644 -103.814657 +L 474.692853 -105.150013 +L 479.359265 -104.184887 +L 484.025678 -103.262168 +L 488.692091 -102.835884 +L 493.358503 -101.912423 +L 498.024916 -103.058402 +L 502.691329 -104.886601 +L 507.357741 -105.797507 +L 512.024154 -108.039119 +L 516.690567 -107.440435 +L 521.356979 -103.991187 +L 526.023392 -104.061527 +L 530.689805 -103.68704 +L 535.356217 -103.382151 +L 535.356217 -106.571111 +L 535.356217 -106.571111 +L 530.689805 -107.932862 +L 526.023392 -109.474515 +L 521.356979 -108.881664 +L 516.690567 -110.023916 +L 512.024154 -109.573893 +L 507.357741 -109.385817 +L 502.691329 -108.352827 +L 498.024916 -107.724419 +L 493.358503 -106.3556 +L 488.692091 -106.720684 +L 484.025678 -107.343188 +L 479.359265 -106.4871 +L 474.692853 -107.237868 +L 470.02644 -106.920266 +L 465.360027 -107.812336 +L 460.693615 -107.449204 +L 456.027202 -106.445794 +L 451.360789 -106.257244 +L 446.694377 -106.27617 +L 442.027964 -107.244542 +L 437.361551 -109.014653 +L 432.695139 -107.761343 +L 428.028726 -105.070834 +L 423.362313 -103.65335 +L 418.695901 -104.51218 +L 414.029488 -106.243106 +L 409.363075 -104.213671 +L 404.696663 -104.163836 +L 400.03025 -102.205447 +L 395.363837 -103.688467 +L 390.697425 -103.03635 +L 386.031012 -101.721946 +L 381.364599 -102.480078 +L 376.698187 -101.812687 +L 372.031774 -99.78386 +L 367.365361 -99.858742 +L 362.698949 -100.358939 +L 358.032536 -99.671082 +L 353.366123 -98.500835 +L 348.699711 -97.174452 +L 344.033298 -94.90257 +L 339.366885 -95.024222 +L 334.700473 -92.42171 +L 330.03406 -90.413621 +L 325.367647 -90.833941 +L 320.701235 -89.621834 +L 316.034822 -89.568123 +L 311.368409 -91.119944 +L 306.701997 -93.477482 +L 302.035584 -94.77268 +L 297.369172 -94.534528 +L 292.702759 -92.595504 +L 288.036346 -91.8044 +L 283.369934 -91.370566 +L 278.703521 -90.641405 +L 274.037108 -89.618604 +L 269.370696 -90.032677 +L 264.704283 -91.671302 +L 260.03787 -90.650948 +L 255.371458 -88.179013 +L 250.705045 -87.934619 +L 246.038632 -87.849155 +L 241.37222 -87.293723 +L 236.705807 -86.150539 +L 232.039394 -89.319625 +L 227.372982 -90.359745 +L 222.706569 -87.30313 +L 218.040156 -85.379658 +L 213.373744 -85.663425 +L 208.707331 -86.610219 +L 204.040918 -87.744835 +L 199.374506 -90.996022 +L 194.708093 -90.234264 +L 190.04168 -88.345246 +L 185.375268 -87.946477 +L 180.708855 -89.080173 +L 176.042442 -90.316644 +L 171.37603 -90.663827 +L 166.709617 -87.0845 +L 162.043204 -86.946462 +L 157.376792 -84.428097 +L 152.710379 -82.083076 +L 148.043966 -80.669943 +L 143.377554 -76.436769 +L 138.711141 -68.826693 +L 134.044728 -60.685286 +L 129.378316 -53.329094 +L 124.711903 -47.821507 +L 120.04549 -44.729689 +L 115.379078 -42.997426 +L 110.712665 -41.784896 +L 106.046252 -40.842046 +L 101.37984 -40.119938 +L 96.713427 -39.451202 +L 92.047014 -38.808315 +L 87.380602 -38.176466 +L 82.714189 -37.608911 +L 78.047776 -37.185249 +L 73.381364 -36.986449 +z +" id="m78bb180e20" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p2ba8c42e99)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m78bb180e20" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#p2ba8c42e99)" d="M 73.381364 106.930793 +L 78.050326 106.658628 +L 82.719288 106.078293 +L 87.388251 105.212187 +L 92.057213 103.904694 +L 96.726175 101.432704 +L 101.395138 96.152458 +L 106.0641 87.262804 +L 110.733062 76.3505 +L 115.402025 64.576721 +L 120.070987 55.343003 +L 124.739949 50.242991 +L 129.408912 49.135566 +L 134.077874 50.238776 +L 138.746837 51.536462 +L 143.415799 51.557934 +L 148.084761 49.681016 +L 152.753724 48.407371 +L 157.422686 50.43418 +L 162.091648 50.15212 +L 166.760611 49.492056 +L 171.429573 47.367215 +L 176.098535 43.270506 +L 180.767498 46.146911 +L 185.43646 47.753779 +L 190.105422 48.384405 +L 194.774385 50.346269 +L 199.443347 49.177925 +L 204.112309 48.391189 +L 208.781272 46.600831 +L 213.450234 46.251586 +L 218.119197 48.344937 +L 222.788159 49.385302 +L 227.457121 48.097668 +L 232.126084 49.116999 +L 236.795046 49.495994 +L 241.464008 50.057542 +L 246.132971 49.45986 +L 250.801933 48.653701 +L 255.470895 49.373671 +L 260.139858 50.635815 +L 264.80882 52.796286 +L 269.477782 51.560789 +L 274.146745 49.231194 +L 278.815707 45.656428 +L 283.484669 43.431768 +L 288.153632 43.14451 +L 292.822594 43.29547 +L 297.491556 45.450045 +L 302.160519 46.533987 +L 306.829481 47.505888 +L 311.498444 47.829404 +L 316.167406 46.071005 +L 320.836368 44.396825 +L 325.505331 43.843983 +L 330.174293 46.24939 +L 334.843255 49.878381 +L 339.512218 49.010694 +L 344.18118 46.771304 +L 348.850142 44.449615 +L 353.519105 42.648072 +L 358.188067 41.194814 +L 362.857029 37.747406 +L 367.525992 37.41014 +L 372.194954 38.571249 +L 376.863916 41.252829 +L 381.532879 43.363541 +L 386.201841 44.286059 +L 390.870803 43.240743 +L 395.539766 42.061742 +L 400.208728 42.172919 +L 404.877691 44.302404 +L 409.546653 43.22271 +L 414.215615 43.702042 +L 418.884578 43.47771 +L 423.55354 44.754723 +L 428.222502 43.92224 +L 432.891465 43.518875 +L 437.560427 46.744309 +L 442.229389 46.609901 +L 446.898352 44.425294 +L 451.567314 43.995432 +L 456.236276 43.844101 +L 460.905239 41.883261 +L 465.574201 43.804081 +L 470.243163 45.610178 +L 474.912126 48.931399 +L 479.581088 48.69049 +L 484.250051 47.851795 +L 488.919013 47.338264 +L 493.587975 45.953326 +L 498.256938 44.839525 +L 502.9259 43.295268 +L 507.594862 41.92533 +L 512.263825 39.153814 +L 516.932787 36.924828 +L 521.601749 37.803698 +L 526.270712 40.188837 +L 530.939674 44.450407 +L 535.608636 46.0459 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#p2ba8c42e99)" d="M 73.381364 107.019958 +L 78.047776 106.825844 +L 82.714189 106.409466 +L 87.380602 105.850496 +L 92.047014 105.221452 +L 96.713427 104.583919 +L 101.37984 103.919322 +L 106.046252 103.208716 +L 110.712665 102.306892 +L 115.379078 101.169368 +L 120.04549 99.581164 +L 124.711903 96.846616 +L 129.378316 92.166595 +L 134.044728 85.28467 +L 138.711141 77.46974 +L 143.377554 70.159612 +L 148.043966 65.277641 +L 152.710379 63.037737 +L 157.376792 60.692938 +L 162.043204 58.408393 +L 166.709617 58.429312 +L 171.37603 55.731463 +L 176.042442 56.035818 +L 180.708855 57.606409 +L 185.375268 58.812461 +L 190.04168 58.126365 +L 194.708093 56.323079 +L 199.374506 55.447349 +L 204.040918 57.705443 +L 208.707331 59.111105 +L 213.373744 60.672262 +L 218.040156 61.053016 +L 222.706569 58.747305 +L 227.372982 56.239745 +L 232.039394 56.744769 +L 236.705807 59.696513 +L 241.37222 59.455985 +L 246.038632 58.358678 +L 250.705045 57.790341 +L 255.371458 57.69902 +L 260.03787 55.892246 +L 264.704283 54.774034 +L 269.370696 55.738161 +L 274.037108 56.032557 +L 278.703521 55.440772 +L 283.369934 54.869368 +L 288.036346 54.799781 +L 292.702759 53.86011 +L 297.369172 51.847435 +L 302.035584 51.326138 +L 306.701997 52.765972 +L 311.368409 53.989334 +L 316.034822 56.363772 +L 320.701235 56.157695 +L 325.367647 55.399716 +L 330.03406 56.3605 +L 334.700473 54.701545 +L 339.366885 51.322773 +L 344.033298 50.818233 +L 348.699711 48.467908 +L 353.366123 46.714812 +L 358.032536 45.467232 +L 362.698949 45.578747 +L 367.365361 46.603854 +L 372.031774 46.937976 +L 376.698187 45.689878 +L 381.364599 44.70074 +L 386.031012 45.131122 +L 390.697425 43.522609 +L 395.363837 42.839449 +L 400.03025 43.808991 +L 404.696663 42.223687 +L 409.363075 41.796043 +L 414.029488 40.765876 +L 418.695901 41.479951 +L 423.362313 41.857449 +L 428.028726 40.514898 +L 432.695139 37.525701 +L 437.361551 35.987483 +L 442.027964 38.238348 +L 446.694377 39.626739 +L 451.360789 39.567936 +L 456.027202 38.68939 +L 460.693615 38.549058 +L 465.360027 38.53619 +L 470.02644 38.632539 +L 474.692853 37.806059 +L 479.359265 38.664006 +L 484.025678 38.697322 +L 488.692091 39.221716 +L 493.358503 39.865989 +L 498.024916 38.608589 +L 502.691329 37.380286 +L 507.357741 36.408338 +L 512.024154 35.193494 +L 516.690567 35.267825 +L 521.356979 37.563575 +L 526.023392 37.231979 +L 530.689805 38.190049 +L 535.356217 39.023369 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.27 110.74 +L 50.27 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.27 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.27 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.495, 23.04)" x="304.495" y="23.04">InvertedDoublePendulum</text> + </g> + </g> + </g> + <defs> + <clipPath id="p2ba8c42e99"> + <rect height="81.7" width="508.45" x="50.27" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.18 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 50.18 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#pf74a20918e)" d="M 73.295455 110.74 +L 73.295455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.295455, 128.598281)" x="73.295455" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#pf74a20918e)" d="M 165.757458 110.74 +L 165.757458 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.757458, 128.598281)" x="165.757458" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#pf74a20918e)" d="M 258.219461 110.74 +L 258.219461 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.219461, 128.598281)" x="258.219461" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#pf74a20918e)" d="M 350.681464 110.74 +L 350.681464 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.681464, 128.598281)" x="350.681464" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#pf74a20918e)" d="M 443.143467 110.74 +L 443.143467 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.143467, 128.598281)" x="443.143467" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#pf74a20918e)" d="M 535.60547 110.74 +L 535.60547 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.60547, 128.598281)" x="535.60547" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#pf74a20918e)" d="M 50.18 108.356945 +L 558.72 108.356945 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 112.536086)" x="40.68" y="112.536086">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#pf74a20918e)" d="M 50.18 68.917673 +L 558.72 68.917673 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 73.096814)" x="40.68" y="73.096814">500</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#pf74a20918e)" d="M 50.18 29.478401 +L 558.72 29.478401 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.68, 33.657542)" x="40.68" y="33.657542">1000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.295455 -37.541646 +L 73.295455 -37.445745 +L 77.965243 -39.911188 +L 82.635032 -47.368242 +L 87.304821 -60.910978 +L 91.97461 -77.607573 +L 96.644399 -89.975234 +L 101.314187 -97.432939 +L 105.983976 -102.278516 +L 110.653765 -104.329082 +L 115.323554 -104.023677 +L 119.993343 -103.953331 +L 124.663131 -103.48048 +L 129.33292 -104.369267 +L 134.002709 -102.60825 +L 138.672498 -105.333169 +L 143.342287 -106.959984 +L 148.012075 -105.789351 +L 152.681864 -103.486864 +L 157.351653 -102.83632 +L 162.021442 -103.336955 +L 166.69123 -102.010241 +L 171.361019 -100.083144 +L 176.030808 -101.625807 +L 180.700597 -102.53097 +L 185.370386 -103.531697 +L 190.040174 -104.109512 +L 194.709963 -105.432322 +L 199.379752 -104.338933 +L 204.049541 -101.786433 +L 208.71933 -102.166523 +L 213.389118 -103.777001 +L 218.058907 -103.394366 +L 222.728696 -103.045325 +L 227.398485 -101.41268 +L 232.068274 -102.489905 +L 236.738062 -102.710954 +L 241.407851 -102.989273 +L 246.07764 -103.656372 +L 250.747429 -103.544365 +L 255.417218 -103.229518 +L 260.087006 -104.639636 +L 264.756795 -104.333773 +L 269.426584 -104.306056 +L 274.096373 -106.277325 +L 278.766162 -107.565145 +L 283.43595 -106.091621 +L 288.105739 -105.295792 +L 292.775528 -105.102036 +L 297.445317 -104.495336 +L 302.115106 -104.78911 +L 306.784894 -103.238069 +L 311.454683 -104.187403 +L 316.124472 -104.453475 +L 320.794261 -103.608585 +L 325.46405 -103.341004 +L 330.133838 -104.37966 +L 334.803627 -106.114989 +L 339.473416 -107.800414 +L 344.143205 -107.10909 +L 348.812994 -106.587283 +L 353.482782 -107.046998 +L 358.152571 -105.375479 +L 362.82236 -103.565793 +L 367.492149 -103.003868 +L 372.161938 -101.157489 +L 376.831726 -101.704549 +L 381.501515 -101.390835 +L 386.171304 -101.961304 +L 390.841093 -105.937937 +L 395.510882 -106.059297 +L 400.18067 -104.795709 +L 404.850459 -104.514878 +L 409.520248 -104.734654 +L 414.190037 -104.718414 +L 418.859826 -103.000256 +L 423.529614 -101.158492 +L 428.199403 -101.063853 +L 432.869192 -102.270653 +L 437.538981 -104.323545 +L 442.20877 -104.117083 +L 446.878558 -103.270917 +L 451.548347 -104.290834 +L 456.218136 -105.957338 +L 460.887925 -107.903697 +L 465.557713 -107.677792 +L 470.227502 -107.142767 +L 474.897291 -105.913795 +L 479.56708 -106.871153 +L 484.236869 -107.100694 +L 488.906657 -106.598388 +L 493.576446 -104.643914 +L 498.246235 -102.568862 +L 502.916024 -103.947984 +L 507.585813 -105.316859 +L 512.255601 -107.467356 +L 516.92539 -106.964017 +L 521.595179 -106.827482 +L 526.264968 -107.519423 +L 530.934757 -108.182175 +L 535.604545 -108.450769 +L 535.604545 -111.246364 +L 535.604545 -111.246364 +L 530.934757 -111.083487 +L 526.264968 -110.235422 +L 521.595179 -109.900875 +L 516.92539 -109.7137 +L 512.255601 -109.208235 +L 507.585813 -108.011856 +L 502.916024 -107.331278 +L 498.246235 -106.313619 +L 493.576446 -107.466141 +L 488.906657 -108.372266 +L 484.236869 -109.130728 +L 479.56708 -109.459977 +L 474.897291 -110.234641 +L 470.227502 -110.0481 +L 465.557713 -109.781996 +L 460.887925 -109.830714 +L 456.218136 -109.178919 +L 451.548347 -107.626642 +L 446.878558 -106.979309 +L 442.20877 -107.745894 +L 437.538981 -107.512115 +L 432.869192 -106.567428 +L 428.199403 -107.486396 +L 423.529614 -106.479496 +L 418.859826 -105.553932 +L 414.190037 -106.762699 +L 409.520248 -107.211156 +L 404.850459 -107.572153 +L 400.18067 -108.351028 +L 395.510882 -108.868259 +L 390.841093 -109.010488 +L 386.171304 -106.443024 +L 381.501515 -105.934038 +L 376.831726 -106.06821 +L 372.161938 -105.906909 +L 367.492149 -107.324604 +L 362.82236 -107.741818 +L 358.152571 -108.67188 +L 353.482782 -110.088914 +L 348.812994 -110.162888 +L 344.143205 -110.516455 +L 339.473416 -111.079374 +L 334.803627 -109.633629 +L 330.133838 -108.434367 +L 325.46405 -107.735768 +L 320.794261 -107.362789 +L 316.124472 -108.246436 +L 311.454683 -108.389028 +L 306.784894 -107.096688 +L 302.115106 -107.731442 +L 297.445317 -107.947897 +L 292.775528 -108.294462 +L 288.105739 -109.327429 +L 283.43595 -109.353308 +L 278.766162 -109.676271 +L 274.096373 -108.614082 +L 269.426584 -107.018578 +L 264.756795 -107.42071 +L 260.087006 -107.733476 +L 255.417218 -107.435202 +L 250.747429 -108.541495 +L 246.07764 -108.209301 +L 241.407851 -107.546738 +L 236.738062 -107.760961 +L 232.068274 -107.639379 +L 227.398485 -105.792358 +L 222.728696 -105.795962 +L 218.058907 -106.425465 +L 213.389118 -107.549698 +L 208.71933 -106.859818 +L 204.049541 -107.009503 +L 199.379752 -108.391099 +L 194.709963 -108.747951 +L 190.040174 -107.75066 +L 185.370386 -106.5082 +L 180.700597 -104.696923 +L 176.030808 -105.33951 +L 171.361019 -105.61519 +L 166.69123 -106.871146 +L 162.021442 -107.961487 +L 157.351653 -108.730745 +L 152.681864 -109.406199 +L 148.012075 -109.550067 +L 143.342287 -109.035405 +L 138.672498 -107.720929 +L 134.002709 -106.305037 +L 129.33292 -108.024926 +L 124.663131 -109.610121 +L 119.993343 -110.017282 +L 115.323554 -108.779315 +L 110.653765 -108.756313 +L 105.983976 -105.856715 +L 101.314187 -100.80367 +L 96.644399 -93.666176 +L 91.97461 -80.014511 +L 87.304821 -62.337291 +L 82.635032 -48.140334 +L 77.965243 -40.192839 +L 73.295455 -37.541646 +z +" id="m808d8b417c" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pf74a20918e)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m808d8b417c" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.295455 -37.034864 +L 73.295455 -36.973636 +L 77.962255 -38.148257 +L 82.629055 -41.820982 +L 87.295855 -50.604444 +L 91.962655 -66.452636 +L 96.629455 -84.818119 +L 101.296255 -97.413484 +L 105.963055 -102.713066 +L 110.629856 -104.36535 +L 115.296656 -105.976895 +L 119.963456 -103.961586 +L 124.630256 -103.273979 +L 129.297056 -104.612631 +L 133.963856 -104.080488 +L 138.630656 -102.617518 +L 143.297456 -102.713092 +L 147.964257 -102.684712 +L 152.631057 -99.288547 +L 157.297857 -94.099414 +L 161.964657 -93.225586 +L 166.631457 -92.832065 +L 171.298257 -92.845108 +L 175.965057 -92.958115 +L 180.631857 -92.74807 +L 185.298658 -94.613709 +L 189.965458 -96.085501 +L 194.632258 -95.567093 +L 199.299058 -95.224701 +L 203.965858 -93.23045 +L 208.632658 -89.88804 +L 213.299458 -87.551898 +L 217.966258 -91.034144 +L 222.633059 -91.040036 +L 227.299859 -91.788174 +L 231.966659 -94.807992 +L 236.633459 -93.542444 +L 241.300259 -93.062587 +L 245.967059 -92.807581 +L 250.633859 -92.563664 +L 255.300659 -94.457117 +L 259.96746 -97.675577 +L 264.63426 -96.202422 +L 269.30106 -93.089234 +L 273.96786 -94.063803 +L 278.63466 -94.483709 +L 283.30146 -94.021136 +L 287.96826 -95.128303 +L 292.63506 -96.168433 +L 297.301861 -95.708708 +L 301.968661 -93.99284 +L 306.635461 -91.517998 +L 311.302261 -92.045083 +L 315.969061 -91.057399 +L 320.635861 -94.6795 +L 325.302661 -95.596231 +L 329.969461 -91.805271 +L 334.636262 -90.729522 +L 339.303062 -90.018727 +L 343.969862 -87.623388 +L 348.636662 -85.805271 +L 353.303462 -90.097987 +L 357.970262 -91.710676 +L 362.637062 -92.6563 +L 367.303862 -93.951881 +L 371.970663 -94.657723 +L 376.637463 -95.225931 +L 381.304263 -95.524721 +L 385.971063 -92.692199 +L 390.637863 -88.634884 +L 395.304663 -91.504989 +L 399.971463 -94.860255 +L 404.638264 -95.267752 +L 409.305064 -94.737308 +L 413.971864 -91.895032 +L 418.638664 -92.405658 +L 423.305464 -94.506059 +L 427.972264 -98.128824 +L 432.639064 -100.486611 +L 437.305864 -98.889935 +L 441.972665 -98.551289 +L 446.639465 -98.481916 +L 451.306265 -94.36507 +L 455.973065 -94.001306 +L 460.639865 -95.262749 +L 465.306665 -97.93881 +L 469.973465 -100.316144 +L 474.640265 -101.003899 +L 479.307066 -97.589926 +L 483.973866 -98.38377 +L 488.640666 -99.125293 +L 493.307466 -98.117234 +L 497.974266 -98.89261 +L 502.641066 -97.1751 +L 507.307866 -95.29265 +L 511.974666 -94.900817 +L 516.641467 -95.251014 +L 521.308267 -97.902235 +L 525.975067 -99.455945 +L 530.641867 -98.848268 +L 535.308667 -95.647145 +L 535.308667 -100.763986 +L 535.308667 -100.763986 +L 530.641867 -101.573258 +L 525.975067 -103.293106 +L 521.308267 -103.226306 +L 516.641467 -100.762538 +L 511.974666 -102.200124 +L 507.307866 -103.155579 +L 502.641066 -104.130825 +L 497.974266 -104.772845 +L 493.307466 -104.68909 +L 488.640666 -104.304181 +L 483.973866 -103.776513 +L 479.307066 -103.356832 +L 474.640265 -103.508923 +L 469.973465 -102.316964 +L 465.306665 -101.175016 +L 460.639865 -99.634566 +L 455.973065 -98.845678 +L 451.306265 -99.737564 +L 446.639465 -102.0827 +L 441.972665 -101.851259 +L 437.305864 -102.429667 +L 432.639064 -102.626293 +L 427.972264 -100.553091 +L 423.305464 -99.546106 +L 418.638664 -98.870193 +L 413.971864 -98.106065 +L 409.305064 -99.677512 +L 404.638264 -99.908009 +L 399.971463 -100.778075 +L 395.304663 -99.949933 +L 390.637863 -98.27288 +L 385.971063 -98.855015 +L 381.304263 -99.727734 +L 376.637463 -99.171562 +L 371.970663 -99.518493 +L 367.303862 -98.14964 +L 362.637062 -95.741875 +L 357.970262 -94.146117 +L 353.303462 -95.081358 +L 348.636662 -94.228619 +L 343.969862 -92.914796 +L 339.303062 -94.472573 +L 334.636262 -96.753317 +L 329.969461 -97.882219 +L 325.302661 -99.520114 +L 320.635861 -99.738187 +L 315.969061 -98.286677 +L 311.302261 -97.64623 +L 306.635461 -97.611367 +L 301.968661 -98.288114 +L 297.301861 -99.233765 +L 292.63506 -100.671716 +L 287.96826 -101.060704 +L 283.30146 -100.649819 +L 278.63466 -98.875601 +L 273.96786 -98.713264 +L 269.30106 -99.889614 +L 264.63426 -99.953921 +L 259.96746 -101.308221 +L 255.300659 -99.694278 +L 250.633859 -98.467256 +L 245.967059 -99.482466 +L 241.300259 -99.23273 +L 236.633459 -99.09612 +L 231.966659 -99.553219 +L 227.299859 -97.860111 +L 222.633059 -96.897842 +L 217.966258 -98.021509 +L 213.299458 -97.690207 +L 208.632658 -99.204778 +L 203.965858 -100.908928 +L 199.299058 -101.504303 +L 194.632258 -101.585 +L 189.965458 -101.374991 +L 185.298658 -101.56667 +L 180.631857 -101.16471 +L 175.965057 -100.160794 +L 171.298257 -100.177228 +L 166.631457 -98.930271 +L 161.964657 -100.192019 +L 157.297857 -101.636901 +L 152.631057 -104.625185 +L 147.964257 -105.788637 +L 143.297456 -106.873944 +L 138.630656 -107.034548 +L 133.963856 -106.664394 +L 129.297056 -107.002251 +L 124.630256 -107.325724 +L 119.963456 -108.956779 +L 115.296656 -110.116966 +L 110.629856 -108.944862 +L 105.963055 -105.754193 +L 101.296255 -98.725605 +L 96.629455 -86.09322 +L 91.962655 -67.987578 +L 87.295855 -51.603395 +L 82.629055 -42.24304 +L 77.962255 -38.29687 +L 73.295455 -37.034864 +z +" id="m104096b595" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#pf74a20918e)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m104096b595" y="144"/> + </g> + </g> + <g id="line2d_10"> + <path clip-path="url(#pf74a20918e)" d="M 73.295455 106.506304 +L 77.965243 103.947987 +L 82.635032 96.245712 +L 87.304821 82.375866 +L 91.97461 65.188958 +L 96.644399 52.179295 +L 101.314187 44.881695 +L 105.983976 39.932385 +L 110.653765 37.457302 +L 115.323554 37.598504 +L 119.993343 37.014693 +L 124.663131 37.4547 +L 129.33292 37.802903 +L 134.002709 39.543357 +L 138.672498 37.472951 +L 143.342287 36.002305 +L 148.012075 36.330291 +L 152.681864 37.553469 +L 157.351653 38.216468 +L 162.021442 38.350779 +L 166.69123 39.559306 +L 171.361019 41.150833 +L 176.030808 40.517341 +L 180.700597 40.386053 +L 185.370386 38.980052 +L 190.040174 38.069914 +L 194.709963 36.909863 +L 199.379752 37.634984 +L 204.049541 39.602032 +L 208.71933 39.48683 +L 213.389118 38.336651 +L 218.058907 39.090085 +L 222.728696 39.579356 +L 227.398485 40.397481 +L 232.068274 38.935358 +L 236.738062 38.764042 +L 241.407851 38.731995 +L 246.07764 38.067163 +L 250.747429 37.95707 +L 255.417218 38.66764 +L 260.087006 37.813444 +L 264.756795 38.122759 +L 269.426584 38.337683 +L 274.096373 36.554296 +L 278.766162 35.379292 +L 283.43595 36.277536 +L 288.105739 36.688389 +L 292.775528 37.301751 +L 297.445317 37.778383 +L 302.115106 37.739724 +L 306.784894 38.832622 +L 311.454683 37.711784 +L 316.124472 37.650045 +L 320.794261 38.514313 +L 325.46405 38.461614 +L 330.133838 37.592986 +L 334.803627 36.125691 +L 339.473416 34.560106 +L 344.143205 35.187227 +L 348.812994 35.624915 +L 353.482782 35.432044 +L 358.152571 36.97632 +L 362.82236 38.346195 +L 367.492149 38.835764 +L 372.161938 40.467801 +L 376.831726 40.11362 +L 381.501515 40.337563 +L 386.171304 39.797836 +L 390.841093 36.525787 +L 395.510882 36.536222 +L 400.18067 37.426631 +L 404.850459 37.956485 +L 409.520248 38.027095 +L 414.190037 38.259444 +L 418.859826 39.722906 +L 423.529614 40.181006 +L 428.199403 39.724875 +L 432.869192 39.58096 +L 437.538981 38.08217 +L 442.20877 38.068511 +L 446.878558 38.874887 +L 451.548347 38.041262 +L 456.218136 36.431872 +L 460.887925 35.132794 +L 465.557713 35.270106 +L 470.227502 35.404567 +L 474.897291 35.925782 +L 479.56708 35.834435 +L 484.236869 35.884289 +L 488.906657 36.514673 +L 493.576446 37.944972 +L 498.246235 39.558759 +L 502.916024 38.360369 +L 507.585813 37.335642 +L 512.255601 35.662204 +L 516.92539 35.661141 +L 521.595179 35.635822 +L 526.264968 35.122577 +L 530.934757 34.367169 +L 535.604545 34.151433 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_11"> + <path clip-path="url(#pf74a20918e)" d="M 73.295455 106.99575 +L 77.962255 105.777436 +L 82.629055 101.967989 +L 87.295855 92.896081 +L 91.962655 76.779893 +L 96.629455 58.544331 +L 101.296255 45.930455 +L 105.963055 39.766371 +L 110.629856 37.344894 +L 115.296656 35.953069 +L 119.963456 37.540817 +L 124.630256 38.700149 +L 129.297056 38.192559 +L 133.963856 38.627559 +L 138.630656 39.173967 +L 143.297456 39.206482 +L 147.964257 39.763326 +L 152.631057 42.043134 +L 157.297857 46.131843 +L 161.964657 47.291198 +L 166.631457 48.118832 +L 171.298257 47.488832 +L 175.965057 47.440546 +L 180.631857 47.04361 +L 185.298658 45.90981 +L 189.965458 45.269754 +L 194.632258 45.423953 +L 199.299058 45.635498 +L 203.965858 46.930311 +L 208.632658 49.453591 +L 213.299458 51.378948 +L 217.966258 49.472174 +L 222.633059 50.031061 +L 227.299859 49.175857 +L 231.966659 46.819394 +L 236.633459 47.680718 +L 241.300259 47.852341 +L 245.967059 47.854977 +L 250.633859 48.48454 +L 255.300659 46.924302 +L 259.96746 44.508101 +L 264.63426 45.921829 +L 269.30106 47.510576 +L 273.96786 47.611467 +L 278.63466 47.320345 +L 283.30146 46.664522 +L 287.96826 45.905496 +L 292.63506 45.579925 +L 297.301861 46.528764 +L 301.968661 47.859523 +L 306.635461 49.435318 +L 311.302261 49.154344 +L 315.969061 49.327962 +L 320.635861 46.791157 +L 325.302661 46.441828 +L 329.969461 49.156255 +L 334.636262 50.258581 +L 339.303062 51.75435 +L 343.969862 53.730908 +L 348.636662 53.983055 +L 353.303462 51.410328 +L 357.970262 51.071603 +L 362.637062 49.800912 +L 367.303862 47.949239 +L 371.970663 46.911892 +L 376.637463 46.801253 +L 381.304263 46.373773 +L 385.971063 48.226393 +L 390.637863 50.546118 +L 395.304663 48.272539 +L 399.971463 46.180835 +L 404.638264 46.412119 +L 409.305064 46.79259 +L 413.971864 48.999451 +L 418.638664 48.362075 +L 423.305464 46.973918 +L 427.972264 44.659042 +L 432.639064 42.443548 +L 437.305864 43.340199 +L 441.972665 43.798726 +L 446.639465 43.717692 +L 451.306265 46.948683 +L 455.973065 47.576508 +L 460.639865 46.551343 +L 465.306665 44.443087 +L 469.973465 42.683446 +L 474.640265 41.743589 +L 479.307066 43.526621 +L 483.973866 42.919859 +L 488.640666 42.285263 +L 493.307466 42.596838 +L 497.974266 42.167273 +L 502.641066 43.347038 +L 507.307866 44.775885 +L 511.974666 45.44953 +L 516.641467 45.993224 +L 521.308267 43.43573 +L 525.975067 42.625475 +L 530.641867 43.789237 +L 535.308667 45.794434 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.18 110.74 +L 50.18 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.18 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.18 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.45, 23.04)" x="304.45" y="23.04">InvertedPendulum</text> + </g> + </g> + </g> + <defs> + <clipPath id="pf74a20918e"> + <rect height="81.7" width="508.54" x="50.18" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 45.59 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 45.59 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p8b60e58ecc)" d="M 68.914091 110.74 +L 68.914091 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 68.914091, 128.598281)" x="68.914091" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p8b60e58ecc)" d="M 162.210455 110.74 +L 162.210455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 162.210455, 128.598281)" x="162.210455" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p8b60e58ecc)" d="M 255.506818 110.74 +L 255.506818 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 255.506818, 128.598281)" x="255.506818" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p8b60e58ecc)" d="M 348.803182 110.74 +L 348.803182 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 348.803182, 128.598281)" x="348.803182" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p8b60e58ecc)" d="M 442.099545 110.74 +L 442.099545 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 442.099545, 128.598281)" x="442.099545" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p8b60e58ecc)" d="M 535.395909 110.74 +L 535.395909 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.395909, 128.598281)" x="535.395909" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p8b60e58ecc)" d="M 45.59 95.397365 +L 558.72 95.397365 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36.09, 99.576506)" x="36.09" y="99.576506">−75</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p8b60e58ecc)" d="M 45.59 73.120839 +L 558.72 73.120839 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36.09, 77.29998)" x="36.09" y="77.29998">−50</text> + </g> + </g> + <g id="ytick_3"> + <g id="line2d_9"> + <path clip-path="url(#p8b60e58ecc)" d="M 45.59 50.844313 +L 558.72 50.844313 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36.09, 55.023453)" x="36.09" y="55.023453">−25</text> + </g> + </g> + <g id="ytick_4"> + <g id="line2d_10"> + <path clip-path="url(#p8b60e58ecc)" d="M 45.59 28.567786 +L 558.72 28.567786 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_10"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 36.09, 32.746927)" x="36.09" y="32.746927">0</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 68.914091 -45.19035 +L 68.914091 -44.232379 +L 73.626028 -55.83985 +L 78.337966 -69.637925 +L 83.049904 -80.236282 +L 87.761841 -87.441184 +L 92.473779 -92.43652 +L 97.185716 -96.113135 +L 101.897654 -98.962459 +L 106.609591 -101.166049 +L 111.321529 -102.849337 +L 116.033466 -104.145806 +L 120.745404 -105.141131 +L 125.457342 -105.994828 +L 130.169279 -106.691378 +L 134.881217 -107.247389 +L 139.593154 -107.663995 +L 144.305092 -108.067749 +L 149.017029 -108.310186 +L 153.728967 -108.546387 +L 158.440904 -108.797681 +L 163.152842 -109.050752 +L 167.86478 -109.20169 +L 172.576717 -109.310259 +L 177.288655 -109.413624 +L 182.000592 -109.539701 +L 186.71253 -109.648831 +L 191.424467 -109.664234 +L 196.136405 -109.727137 +L 200.848343 -109.765511 +L 205.56028 -109.817374 +L 210.272218 -109.855344 +L 214.984155 -109.93758 +L 219.696093 -109.961893 +L 224.40803 -110.014174 +L 229.119968 -110.096804 +L 233.831905 -110.163363 +L 238.543843 -110.206731 +L 243.255781 -110.244125 +L 247.967718 -110.29724 +L 252.679656 -110.33856 +L 257.391593 -110.389797 +L 262.103531 -110.407718 +L 266.815468 -110.428273 +L 271.527406 -110.409795 +L 276.239343 -110.40331 +L 280.951281 -110.433629 +L 285.663219 -110.453009 +L 290.375156 -110.492261 +L 295.087094 -110.546405 +L 299.799031 -110.572397 +L 304.510969 -110.566678 +L 309.222906 -110.590437 +L 313.934844 -110.601648 +L 318.646781 -110.617512 +L 323.358719 -110.622037 +L 328.070657 -110.688695 +L 332.782594 -110.739841 +L 337.494532 -110.753945 +L 342.206469 -110.732948 +L 346.918407 -110.746576 +L 351.630344 -110.784321 +L 356.342282 -110.809018 +L 361.054219 -110.78971 +L 365.766157 -110.790539 +L 370.478095 -110.804818 +L 375.190032 -110.839628 +L 379.90197 -110.868436 +L 384.613907 -110.853311 +L 389.325845 -110.873045 +L 394.037782 -110.917533 +L 398.74972 -110.913738 +L 403.461657 -110.93595 +L 408.173595 -110.935282 +L 412.885533 -110.914475 +L 417.59747 -110.925847 +L 422.309408 -110.937579 +L 427.021345 -110.961645 +L 431.733283 -111.001942 +L 436.44522 -111.007784 +L 441.157158 -110.977462 +L 445.869096 -110.993111 +L 450.581033 -111.005193 +L 455.292971 -111.044902 +L 460.004908 -111.073365 +L 464.716846 -111.047381 +L 469.428783 -111.057769 +L 474.140721 -111.083103 +L 478.852658 -111.088816 +L 483.564596 -111.108525 +L 488.276534 -111.135256 +L 492.988471 -111.134051 +L 497.700409 -111.101148 +L 502.412346 -111.090872 +L 507.124284 -111.106515 +L 511.836221 -111.123148 +L 516.548159 -111.165492 +L 521.260096 -111.164394 +L 525.972034 -111.16304 +L 530.683972 -111.192232 +L 535.395909 -111.161823 +L 535.395909 -111.202541 +L 535.395909 -111.202541 +L 530.683972 -111.246364 +L 525.972034 -111.208361 +L 521.260096 -111.213257 +L 516.548159 -111.228883 +L 511.836221 -111.192756 +L 507.124284 -111.187716 +L 502.412346 -111.168176 +L 497.700409 -111.199135 +L 492.988471 -111.22741 +L 488.276534 -111.229801 +L 483.564596 -111.212414 +L 478.852658 -111.197492 +L 474.140721 -111.162541 +L 469.428783 -111.140068 +L 464.716846 -111.125214 +L 460.004908 -111.160418 +L 455.292971 -111.151979 +L 450.581033 -111.119926 +L 445.869096 -111.122392 +L 441.157158 -111.095125 +L 436.44522 -111.136028 +L 431.733283 -111.117794 +L 427.021345 -111.062312 +L 422.309408 -111.036484 +L 417.59747 -111.036179 +L 412.885533 -111.026217 +L 408.173595 -111.039241 +L 403.461657 -111.022617 +L 398.74972 -111.00328 +L 394.037782 -110.987727 +L 389.325845 -110.941558 +L 384.613907 -110.923034 +L 379.90197 -110.964439 +L 375.190032 -110.949232 +L 370.478095 -110.934218 +L 365.766157 -110.900892 +L 361.054219 -110.897163 +L 356.342282 -110.920325 +L 351.630344 -110.922621 +L 346.918407 -110.87357 +L 342.206469 -110.883895 +L 337.494532 -110.88467 +L 332.782594 -110.840534 +L 328.070657 -110.778594 +L 323.358719 -110.725925 +L 318.646781 -110.729194 +L 313.934844 -110.741462 +L 309.222906 -110.749551 +L 304.510969 -110.730932 +L 299.799031 -110.68261 +L 295.087094 -110.641582 +L 290.375156 -110.607237 +L 285.663219 -110.565426 +L 280.951281 -110.541 +L 276.239343 -110.516132 +L 271.527406 -110.508137 +L 266.815468 -110.523247 +L 262.103531 -110.48389 +L 257.391593 -110.452236 +L 252.679656 -110.391054 +L 247.967718 -110.370449 +L 243.255781 -110.339693 +L 238.543843 -110.316423 +L 233.831905 -110.254375 +L 229.119968 -110.172515 +L 224.40803 -110.11634 +L 219.696093 -110.116797 +L 214.984155 -110.117192 +L 210.272218 -110.053615 +L 205.56028 -110.019848 +L 200.848343 -109.946335 +L 196.136405 -109.897692 +L 191.424467 -109.825017 +L 186.71253 -109.775047 +L 182.000592 -109.682188 +L 177.288655 -109.60527 +L 172.576717 -109.536841 +L 167.86478 -109.454316 +L 163.152842 -109.32811 +L 158.440904 -109.108707 +L 153.728967 -108.921692 +L 149.017029 -108.714999 +L 144.305092 -108.49127 +L 139.593154 -108.093873 +L 134.881217 -107.67372 +L 130.169279 -107.184893 +L 125.457342 -106.590002 +L 120.745404 -105.837673 +L 116.033466 -104.881368 +L 111.321529 -103.595368 +L 106.609591 -101.912423 +L 101.897654 -99.673899 +L 97.185716 -96.838964 +L 92.473779 -93.128628 +L 87.761841 -88.098474 +L 83.049904 -80.830359 +L 78.337966 -70.355238 +L 73.626028 -56.668943 +L 68.914091 -45.19035 +z +" id="m76c5a32ebb" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p8b60e58ecc)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m76c5a32ebb" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 68.914091 -38.202482 +L 68.914091 -36.973636 +L 73.623201 -46.479015 +L 78.332312 -58.293444 +L 83.041422 -68.265263 +L 87.750532 -76.431174 +L 92.459643 -83.003701 +L 97.168753 -88.118002 +L 101.877864 -91.842895 +L 106.586974 -94.68465 +L 111.296084 -96.905591 +L 116.005195 -98.5555 +L 120.714305 -99.85058 +L 125.423416 -100.728051 +L 130.132526 -101.540108 +L 134.841636 -102.292849 +L 139.550747 -102.921265 +L 144.259857 -103.434684 +L 148.968968 -103.916029 +L 153.678078 -104.34173 +L 158.387188 -104.698799 +L 163.096299 -105.086393 +L 167.805409 -105.421839 +L 172.51452 -105.646549 +L 177.22363 -105.816768 +L 181.93274 -106.03593 +L 186.641851 -106.316012 +L 191.350961 -106.405526 +L 196.060072 -106.559841 +L 200.769182 -106.776324 +L 205.478292 -106.843196 +L 210.187403 -106.941005 +L 214.896513 -107.028743 +L 219.605624 -107.141883 +L 224.314734 -107.328336 +L 229.023844 -107.45313 +L 233.732955 -107.537397 +L 238.442065 -107.569502 +L 243.151176 -107.570622 +L 247.860286 -107.621101 +L 252.569396 -107.651853 +L 257.278507 -107.687695 +L 261.987617 -107.796313 +L 266.696727 -107.874806 +L 271.405838 -107.907537 +L 276.114948 -107.848748 +L 280.824059 -107.904843 +L 285.533169 -107.925239 +L 290.242279 -107.949632 +L 294.95139 -107.980757 +L 299.6605 -108.021443 +L 304.369611 -108.056897 +L 309.078721 -108.140627 +L 313.787831 -108.111057 +L 318.496942 -108.146926 +L 323.206052 -108.226158 +L 327.915163 -108.308273 +L 332.624273 -108.286537 +L 337.333383 -108.302893 +L 342.042494 -108.418569 +L 346.751604 -108.438785 +L 351.460715 -108.474057 +L 356.169825 -108.429567 +L 360.878935 -108.454726 +L 365.588046 -108.479386 +L 370.297156 -108.446928 +L 375.006267 -108.396876 +L 379.715377 -108.389058 +L 384.424487 -108.389849 +L 389.133598 -108.304649 +L 393.842708 -108.391096 +L 398.551819 -108.47978 +L 403.260929 -108.465132 +L 407.970039 -108.460842 +L 412.67915 -108.444591 +L 417.38826 -108.452312 +L 422.097371 -108.470332 +L 426.806481 -108.611658 +L 431.515591 -108.673978 +L 436.224702 -108.586044 +L 440.933812 -108.608444 +L 445.642922 -108.579927 +L 450.352033 -108.463534 +L 455.061143 -108.470323 +L 459.770254 -108.473175 +L 464.479364 -108.488189 +L 469.188474 -108.542054 +L 473.897585 -108.619014 +L 478.606695 -108.642255 +L 483.315806 -108.659852 +L 488.024916 -108.66419 +L 492.734026 -108.70106 +L 497.443137 -108.780844 +L 502.152247 -108.712048 +L 506.861358 -108.679209 +L 511.570468 -108.73768 +L 516.279578 -108.729524 +L 520.988689 -108.689613 +L 525.697799 -108.788593 +L 530.40691 -108.900374 +L 535.11602 -108.835351 +L 535.11602 -110.243509 +L 535.11602 -110.243509 +L 530.40691 -110.189412 +L 525.697799 -110.094951 +L 520.988689 -110.08532 +L 516.279578 -110.128043 +L 511.570468 -110.131859 +L 506.861358 -110.108502 +L 502.152247 -110.077615 +L 497.443137 -110.057248 +L 492.734026 -110.028043 +L 488.024916 -110.004727 +L 483.315806 -110.015339 +L 478.606695 -109.985455 +L 473.897585 -109.967242 +L 469.188474 -109.921023 +L 464.479364 -109.901918 +L 459.770254 -109.907636 +L 455.061143 -109.931759 +L 450.352033 -109.908913 +L 445.642922 -109.932198 +L 440.933812 -109.948048 +L 436.224702 -109.901494 +L 431.515591 -109.900156 +L 426.806481 -109.910529 +L 422.097371 -109.815566 +L 417.38826 -109.786318 +L 412.67915 -109.729401 +L 407.970039 -109.677636 +L 403.260929 -109.684399 +L 398.551819 -109.69235 +L 393.842708 -109.632171 +L 389.133598 -109.609245 +L 384.424487 -109.662637 +L 379.715377 -109.646244 +L 375.006267 -109.628669 +L 370.297156 -109.644988 +L 365.588046 -109.636779 +L 360.878935 -109.608616 +L 356.169825 -109.591614 +L 351.460715 -109.593842 +L 346.751604 -109.556384 +L 342.042494 -109.534051 +L 337.333383 -109.463267 +L 332.624273 -109.439653 +L 327.915163 -109.467025 +L 323.206052 -109.418041 +L 318.496942 -109.324822 +L 313.787831 -109.317642 +L 309.078721 -109.314206 +L 304.369611 -109.227628 +L 299.6605 -109.145072 +L 294.95139 -109.099974 +L 290.242279 -109.073581 +L 285.533169 -109.036479 +L 280.824059 -109.054832 +L 276.114948 -109.006368 +L 271.405838 -109.00015 +L 266.696727 -108.93798 +L 261.987617 -108.882544 +L 257.278507 -108.816628 +L 252.569396 -108.818136 +L 247.860286 -108.83365 +L 243.151176 -108.754884 +L 238.442065 -108.719843 +L 233.732955 -108.657721 +L 229.023844 -108.620222 +L 224.314734 -108.611679 +L 219.605624 -108.534919 +L 214.896513 -108.39329 +L 210.187403 -108.260593 +L 205.478292 -108.140864 +L 200.769182 -108.062405 +L 196.060072 -107.839103 +L 191.350961 -107.680678 +L 186.641851 -107.61428 +L 181.93274 -107.36325 +L 177.22363 -107.098449 +L 172.51452 -106.879211 +L 167.805409 -106.62788 +L 163.096299 -106.255321 +L 158.387188 -105.845575 +L 153.678078 -105.348109 +L 148.968968 -104.851316 +L 144.259857 -104.343591 +L 139.550747 -103.784098 +L 134.841636 -103.117299 +L 130.132526 -102.330061 +L 125.423416 -101.454849 +L 120.714305 -100.511623 +L 116.005195 -99.236207 +L 111.296084 -97.54773 +L 106.586974 -95.386084 +L 101.877864 -92.504044 +L 97.168753 -88.78269 +L 92.459643 -83.681348 +L 87.750532 -77.202271 +L 83.041422 -69.289504 +L 78.332312 -59.560221 +L 73.623201 -47.726698 +L 68.914091 -38.202482 +z +" id="m2f80c3da77" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p8b60e58ecc)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m2f80c3da77" y="144"/> + </g> + </g> + <g id="line2d_11"> + <path clip-path="url(#p8b60e58ecc)" d="M 68.914091 99.288635 +L 73.626028 87.745603 +L 78.337966 74.003418 +L 83.049904 63.46668 +L 87.761841 56.230171 +L 92.473779 51.217426 +L 97.185716 47.52395 +L 101.897654 44.681821 +L 106.609591 42.460764 +L 111.321529 40.777647 +L 116.033466 39.486413 +L 120.745404 38.510598 +L 125.457342 37.707585 +L 130.169279 37.061864 +L 134.881217 36.539446 +L 139.593154 36.121066 +L 144.305092 35.720491 +L 149.017029 35.487408 +L 153.728967 35.26596 +L 158.440904 35.046806 +L 163.152842 34.810569 +L 167.86478 34.671997 +L 172.576717 34.57645 +L 177.288655 34.490553 +L 182.000592 34.389055 +L 186.71253 34.288061 +L 191.424467 34.255375 +L 196.136405 34.187586 +L 200.848343 34.144077 +L 205.56028 34.081389 +L 210.272218 34.04552 +L 214.984155 33.972614 +L 219.696093 33.960655 +L 224.40803 33.934743 +L 229.119968 33.86534 +L 233.831905 33.791131 +L 238.543843 33.738423 +L 243.255781 33.708091 +L 247.967718 33.666156 +L 252.679656 33.635193 +L 257.391593 33.578984 +L 262.103531 33.554196 +L 266.815468 33.52424 +L 271.527406 33.541034 +L 276.239343 33.540279 +L 280.951281 33.512686 +L 285.663219 33.490783 +L 290.375156 33.450251 +L 295.087094 33.406006 +L 299.799031 33.372496 +L 304.510969 33.351195 +L 309.222906 33.330006 +L 313.934844 33.328445 +L 318.646781 33.326647 +L 323.358719 33.326019 +L 328.070657 33.266355 +L 332.782594 33.209813 +L 337.494532 33.180692 +L 342.206469 33.191579 +L 346.918407 33.189927 +L 351.630344 33.146529 +L 356.342282 33.135328 +L 361.054219 33.156563 +L 365.766157 33.154284 +L 370.478095 33.130482 +L 375.190032 33.10557 +L 379.90197 33.083562 +L 384.613907 33.111828 +L 389.325845 33.092699 +L 394.037782 33.04737 +L 398.74972 33.041491 +L 403.461657 33.020717 +L 408.173595 33.012738 +L 412.885533 33.029654 +L 417.59747 33.018987 +L 422.309408 33.012968 +L 427.021345 32.988021 +L 431.733283 32.940132 +L 436.44522 32.928094 +L 441.157158 32.963706 +L 445.869096 32.942248 +L 450.581033 32.937441 +L 455.292971 32.901559 +L 460.004908 32.883109 +L 464.716846 32.913702 +L 469.428783 32.901081 +L 474.140721 32.877178 +L 478.852658 32.856846 +L 483.564596 32.83953 +L 488.276534 32.817471 +L 492.988471 32.819269 +L 497.700409 32.849859 +L 502.412346 32.870476 +L 507.124284 32.852884 +L 511.836221 32.842048 +L 516.548159 32.802813 +L 521.260096 32.811175 +L 525.972034 32.8143 +L 530.683972 32.780702 +L 535.395909 32.817818 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_12"> + <path clip-path="url(#p8b60e58ecc)" d="M 68.914091 106.411941 +L 73.623201 96.897143 +L 78.332312 85.073167 +L 83.041422 75.222617 +L 87.750532 67.183277 +L 92.459643 60.657475 +L 97.168753 55.549654 +L 101.877864 51.82653 +L 106.586974 48.964633 +L 111.296084 46.773339 +L 116.005195 45.104147 +L 120.714305 43.818898 +L 125.423416 42.90855 +L 130.132526 42.064915 +L 134.841636 41.294926 +L 139.550747 40.647319 +L 144.259857 40.110863 +L 148.968968 39.616328 +L 153.678078 39.15508 +L 158.387188 38.727813 +L 163.096299 38.329143 +L 167.805409 37.97514 +L 172.51452 37.73712 +L 177.22363 37.542392 +L 181.93274 37.30041 +L 186.641851 37.034854 +L 191.350961 36.956898 +L 196.060072 36.800528 +L 200.769182 36.580636 +L 205.478292 36.50797 +L 210.187403 36.399201 +L 214.896513 36.288983 +L 219.605624 36.161599 +L 224.314734 36.029992 +L 229.023844 35.963324 +L 233.732955 35.902441 +L 238.442065 35.855328 +L 243.151176 35.837247 +L 247.860286 35.772625 +L 252.569396 35.765006 +L 257.278507 35.747838 +L 261.987617 35.660571 +L 266.696727 35.593607 +L 271.405838 35.546156 +L 276.114948 35.572442 +L 280.824059 35.520162 +L 285.533169 35.519141 +L 290.242279 35.488393 +L 294.95139 35.459634 +L 299.6605 35.416742 +L 304.369611 35.357737 +L 309.078721 35.272584 +L 313.787831 35.28565 +L 318.496942 35.264126 +L 323.206052 35.1779 +L 327.915163 35.112351 +L 332.624273 35.136905 +L 337.333383 35.11692 +L 342.042494 35.02369 +L 346.751604 35.002415 +L 351.460715 34.966051 +L 356.169825 34.989409 +L 360.878935 34.968329 +L 365.588046 34.941917 +L 370.297156 34.954042 +L 375.006267 34.987228 +L 379.715377 34.982349 +L 384.424487 34.973757 +L 389.133598 35.043053 +L 393.842708 34.988367 +L 398.551819 34.913935 +L 403.260929 34.925235 +L 407.970039 34.930761 +L 412.67915 34.913004 +L 417.38826 34.880685 +L 422.097371 34.857051 +L 426.806481 34.738906 +L 431.515591 34.712933 +L 436.224702 34.756231 +L 440.933812 34.721754 +L 445.642922 34.743938 +L 450.352033 34.813777 +L 455.061143 34.798959 +L 459.770254 34.809595 +L 464.479364 34.804947 +L 469.188474 34.768461 +L 473.897585 34.706872 +L 478.606695 34.686145 +L 483.315806 34.662405 +L 488.024916 34.665542 +L 492.734026 34.635449 +L 497.443137 34.580954 +L 502.152247 34.605169 +L 506.861358 34.606144 +L 511.570468 34.56523 +L 516.279578 34.571217 +L 520.988689 34.612534 +L 525.697799 34.558228 +L 530.40691 34.455107 +L 535.11602 34.46057 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 45.59 110.74 +L 45.59 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 45.59 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 45.59 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_11"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 302.155, 23.04)" x="302.155" y="23.04">Reacher</text> + </g> + </g> + </g> + <defs> + <clipPath id="p8b60e58ecc"> + <rect height="81.7" width="513.13" x="45.59" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 43.25 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 43.25 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p44aca897b4)" d="M 66.680455 110.74 +L 66.680455 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 66.680455, 128.598281)" x="66.680455" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p44aca897b4)" d="M 160.402273 110.74 +L 160.402273 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 160.402273, 128.598281)" x="160.402273" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p44aca897b4)" d="M 254.124091 110.74 +L 254.124091 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 254.124091, 128.598281)" x="254.124091" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p44aca897b4)" d="M 347.845909 110.74 +L 347.845909 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 347.845909, 128.598281)" x="347.845909" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p44aca897b4)" d="M 441.567727 110.74 +L 441.567727 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 441.567727, 128.598281)" x="441.567727" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p44aca897b4)" d="M 535.289545 110.74 +L 535.289545 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.289545, 128.598281)" x="535.289545" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p44aca897b4)" d="M 43.25 81.169796 +L 558.72 81.169796 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.75, 85.348937)" x="33.75" y="85.348937">50</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p44aca897b4)" d="M 43.25 43.271563 +L 558.72 43.271563 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 33.75, 47.450704)" x="33.75" y="47.450704">100</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 66.680455 -42.863917 +L 66.680455 -40.2976 +L 71.41388 -43.088279 +L 76.147305 -45.468914 +L 80.88073 -47.581645 +L 85.614155 -49.504411 +L 90.34758 -50.720587 +L 95.081006 -51.566544 +L 99.814431 -52.297528 +L 104.547856 -52.767372 +L 109.281281 -53.228679 +L 114.014706 -53.714703 +L 118.748131 -54.550951 +L 123.481556 -55.267964 +L 128.214982 -55.954663 +L 132.948407 -56.628159 +L 137.681832 -57.315782 +L 142.415257 -57.934457 +L 147.148682 -58.499504 +L 151.882107 -59.103138 +L 156.615533 -59.442175 +L 161.348958 -59.385252 +L 166.082383 -61.4656 +L 170.815808 -63.96046 +L 175.549233 -65.840205 +L 180.282658 -67.59686 +L 185.016084 -69.356057 +L 189.749509 -71.217635 +L 194.482934 -72.236316 +L 199.216359 -72.867725 +L 203.949784 -73.487853 +L 208.683209 -74.796144 +L 213.416635 -76.337374 +L 218.15006 -77.812734 +L 222.883485 -79.226327 +L 227.61691 -80.026764 +L 232.350335 -80.174577 +L 237.08376 -80.15793 +L 241.817185 -79.827481 +L 246.550611 -79.161569 +L 251.284036 -78.523224 +L 256.017461 -79.229597 +L 260.750886 -79.652483 +L 265.484311 -79.27086 +L 270.217736 -80.059201 +L 274.951162 -80.993655 +L 279.684587 -81.690398 +L 284.418012 -81.80182 +L 289.151437 -81.319112 +L 293.884862 -80.502179 +L 298.618287 -80.188994 +L 303.351713 -80.205562 +L 308.085138 -79.858473 +L 312.818563 -81.332478 +L 317.551988 -81.559546 +L 322.285413 -81.527637 +L 327.018838 -82.521009 +L 331.752264 -83.045222 +L 336.485689 -82.837836 +L 341.219114 -83.267042 +L 345.952539 -83.542926 +L 350.685964 -83.329845 +L 355.419389 -82.622215 +L 360.152815 -81.449238 +L 364.88624 -83.010838 +L 369.619665 -84.578601 +L 374.35309 -84.952153 +L 379.086515 -84.418662 +L 383.81994 -83.522673 +L 388.553365 -83.832866 +L 393.286791 -84.05923 +L 398.020216 -83.738843 +L 402.753641 -83.710834 +L 407.487066 -84.423677 +L 412.220491 -84.640564 +L 416.953916 -84.68216 +L 421.687342 -84.776878 +L 426.420767 -84.72496 +L 431.154192 -84.333723 +L 435.887617 -84.500142 +L 440.621042 -82.987754 +L 445.354467 -79.818516 +L 450.087893 -81.25534 +L 454.821318 -84.280574 +L 459.554743 -85.212204 +L 464.288168 -84.305733 +L 469.021593 -86.670575 +L 473.755018 -87.793172 +L 478.488444 -88.412526 +L 483.221869 -88.072124 +L 487.955294 -86.981046 +L 492.688719 -88.211387 +L 497.422144 -88.77607 +L 502.155569 -89.126973 +L 506.888994 -89.334599 +L 511.62242 -89.545788 +L 516.355845 -89.161664 +L 521.08927 -88.625774 +L 525.822695 -88.297808 +L 530.55612 -88.034485 +L 535.289545 -87.514827 +L 535.289545 -104.382678 +L 535.289545 -104.382678 +L 530.55612 -104.473348 +L 525.822695 -104.557295 +L 521.08927 -104.891374 +L 516.355845 -105.171125 +L 511.62242 -105.607095 +L 506.888994 -105.503296 +L 502.155569 -105.37282 +L 497.422144 -105.090315 +L 492.688719 -105.208457 +L 487.955294 -104.904896 +L 483.221869 -105.11961 +L 478.488444 -105.063955 +L 473.755018 -104.613563 +L 469.021593 -104.260846 +L 464.288168 -103.563649 +L 459.554743 -102.99369 +L 454.821318 -102.097149 +L 450.087893 -101.147086 +L 445.354467 -100.733276 +L 440.621042 -101.82368 +L 435.887617 -102.548189 +L 431.154192 -102.770293 +L 426.420767 -102.700246 +L 421.687342 -102.62752 +L 416.953916 -102.44725 +L 412.220491 -102.180182 +L 407.487066 -101.668017 +L 402.753641 -101.15868 +L 398.020216 -101.212101 +L 393.286791 -101.155962 +L 388.553365 -100.850159 +L 383.81994 -101.03751 +L 379.086515 -101.852387 +L 374.35309 -102.064855 +L 369.619665 -101.718409 +L 364.88624 -101.217246 +L 360.152815 -101.003583 +L 355.419389 -101.505778 +L 350.685964 -101.809088 +L 345.952539 -102.242415 +L 341.219114 -102.506095 +L 336.485689 -102.293606 +L 331.752264 -102.306034 +L 327.018838 -101.898343 +L 322.285413 -101.178181 +L 317.551988 -101.311255 +L 312.818563 -101.18677 +L 308.085138 -99.749954 +L 303.351713 -100.393742 +L 298.618287 -101.325898 +L 293.884862 -101.81739 +L 289.151437 -102.036945 +L 284.418012 -102.463671 +L 279.684587 -102.447797 +L 274.951162 -102.094052 +L 270.217736 -101.807256 +L 265.484311 -101.29831 +L 260.750886 -100.924464 +L 256.017461 -100.62 +L 251.284036 -99.864309 +L 246.550611 -100.267489 +L 241.817185 -100.682483 +L 237.08376 -100.892564 +L 232.350335 -100.895125 +L 227.61691 -100.616132 +L 222.883485 -99.490219 +L 218.15006 -97.868795 +L 213.416635 -95.60824 +L 208.683209 -93.534919 +L 203.949784 -92.128418 +L 199.216359 -90.551619 +L 194.482934 -88.50074 +L 189.749509 -86.854581 +L 185.016084 -85.064113 +L 180.282658 -83.531253 +L 175.549233 -81.858668 +L 170.815808 -79.633852 +L 166.082383 -76.747349 +L 161.348958 -74.574455 +L 156.615533 -73.880127 +L 151.882107 -73.172227 +L 147.148682 -72.479347 +L 142.415257 -71.480407 +L 137.681832 -69.953399 +L 132.948407 -67.619805 +L 128.214982 -64.436014 +L 123.481556 -61.330049 +L 118.748131 -58.846922 +L 114.014706 -56.73149 +L 109.281281 -55.290286 +L 104.547856 -54.303739 +L 99.814431 -53.611729 +L 95.081006 -52.87264 +L 90.34758 -52.211428 +L 85.614155 -51.380527 +L 80.88073 -49.943106 +L 76.147305 -48.145572 +L 71.41388 -46.057023 +L 66.680455 -42.863917 +z +" id="m0a281c4cf0" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p44aca897b4)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m0a281c4cf0" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 66.680455 -39.462848 +L 66.680455 -36.973636 +L 71.409146 -41.412883 +L 76.137838 -45.12826 +L 80.86653 -47.853889 +L 85.595221 -49.61611 +L 90.323913 -50.713459 +L 95.052605 -51.708585 +L 99.781297 -52.670265 +L 104.509988 -53.099917 +L 109.23868 -53.187318 +L 113.967372 -53.28799 +L 118.696064 -53.994227 +L 123.424755 -54.523158 +L 128.153447 -55.234444 +L 132.882139 -55.820064 +L 137.610831 -56.618269 +L 142.339522 -57.472444 +L 147.068214 -57.963139 +L 151.796906 -58.71761 +L 156.525598 -59.643796 +L 161.254289 -60.593565 +L 165.982981 -61.738684 +L 170.711673 -62.569907 +L 175.440364 -63.151218 +L 180.169056 -63.763424 +L 184.897748 -64.058828 +L 189.62644 -64.431206 +L 194.355131 -65.645952 +L 199.083823 -67.206902 +L 203.812515 -69.142975 +L 208.541207 -70.780328 +L 213.269898 -71.431474 +L 217.99859 -73.021618 +L 222.727282 -74.708706 +L 227.455974 -76.054614 +L 232.184665 -77.970062 +L 236.913357 -79.885172 +L 241.642049 -81.603456 +L 246.37074 -82.744399 +L 251.099432 -84.296495 +L 255.828124 -85.678533 +L 260.556816 -87.415234 +L 265.285507 -89.249975 +L 270.014199 -90.561241 +L 274.742891 -91.509199 +L 279.471583 -93.238535 +L 284.200274 -94.872691 +L 288.928966 -96.572505 +L 293.657658 -97.635726 +L 298.38635 -98.329525 +L 303.115041 -99.134121 +L 307.843733 -100.014838 +L 312.572425 -100.395817 +L 317.301117 -100.776717 +L 322.029808 -100.68814 +L 326.7585 -100.590728 +L 331.487192 -101.205811 +L 336.215883 -102.315047 +L 340.944575 -103.136156 +L 345.673267 -103.798814 +L 350.401959 -104.482186 +L 355.13065 -105.049119 +L 359.859342 -105.316329 +L 364.588034 -105.295004 +L 369.316726 -104.910896 +L 374.045417 -104.669576 +L 378.774109 -104.911508 +L 383.502801 -104.436102 +L 388.231493 -105.410326 +L 392.960184 -105.807359 +L 397.688876 -106.096786 +L 402.417568 -106.302364 +L 407.14626 -106.523756 +L 411.874951 -106.425261 +L 416.603643 -106.545552 +L 421.332335 -106.324674 +L 426.061026 -106.310825 +L 430.789718 -106.113416 +L 435.51841 -106.257274 +L 440.247102 -105.973644 +L 444.975793 -105.904779 +L 449.704485 -106.523905 +L 454.433177 -106.926448 +L 459.161869 -107.091191 +L 463.89056 -107.141048 +L 468.619252 -107.354497 +L 473.347944 -107.540578 +L 478.076636 -107.5439 +L 482.805327 -107.745598 +L 487.534019 -107.606884 +L 492.262711 -107.593489 +L 496.991402 -107.48114 +L 501.720094 -107.297978 +L 506.448786 -107.33052 +L 511.177478 -107.80988 +L 515.906169 -107.952594 +L 520.634861 -107.919703 +L 525.363553 -108.16358 +L 530.092245 -108.35919 +L 534.820936 -108.529409 +L 534.820936 -111.246364 +L 534.820936 -111.246364 +L 530.092245 -111.110262 +L 525.363553 -111.033022 +L 520.634861 -110.696621 +L 515.906169 -110.811618 +L 511.177478 -110.843168 +L 506.448786 -110.523327 +L 501.720094 -110.253464 +L 496.991402 -110.068603 +L 492.262711 -109.833032 +L 487.534019 -109.641836 +L 482.805327 -109.910409 +L 478.076636 -109.817406 +L 473.347944 -109.896529 +L 468.619252 -109.740447 +L 463.89056 -109.54968 +L 459.161869 -109.676798 +L 454.433177 -109.604015 +L 449.704485 -109.356895 +L 444.975793 -108.886294 +L 440.247102 -108.778783 +L 435.51841 -108.754851 +L 430.789718 -108.650141 +L 426.061026 -108.886425 +L 421.332335 -108.811215 +L 416.603643 -108.903463 +L 411.874951 -108.929983 +L 407.14626 -108.94971 +L 402.417568 -108.679262 +L 397.688876 -108.283798 +L 392.960184 -107.881346 +L 388.231493 -107.772197 +L 383.502801 -107.751738 +L 378.774109 -107.937871 +L 374.045417 -107.562987 +L 369.316726 -107.6175 +L 364.588034 -107.737333 +L 359.859342 -107.613501 +L 355.13065 -107.789727 +L 350.401959 -107.501262 +L 345.673267 -107.099874 +L 340.944575 -106.47486 +L 336.215883 -105.778567 +L 331.487192 -104.839207 +L 326.7585 -104.178633 +L 322.029808 -103.853727 +L 317.301117 -103.400976 +L 312.572425 -102.84701 +L 307.843733 -102.852131 +L 303.115041 -102.377971 +L 298.38635 -101.97929 +L 293.657658 -102.129602 +L 288.928966 -102.009113 +L 284.200274 -101.083403 +L 279.471583 -100.462349 +L 274.742891 -99.55846 +L 270.014199 -99.257145 +L 265.285507 -98.677894 +L 260.556816 -97.621212 +L 255.828124 -96.199961 +L 251.099432 -95.118771 +L 246.37074 -93.56329 +L 241.642049 -92.594254 +L 236.913357 -90.914208 +L 232.184665 -88.913591 +L 227.455974 -86.776115 +L 222.727282 -85.283894 +L 217.99859 -82.964371 +L 213.269898 -81.116824 +L 208.541207 -80.373481 +L 203.812515 -78.763205 +L 199.083823 -76.69881 +L 194.355131 -74.924729 +L 189.62644 -73.22784 +L 184.897748 -71.619632 +L 180.169056 -70.423536 +L 175.440364 -69.244969 +L 170.711673 -67.980821 +L 165.982981 -67.148235 +L 161.254289 -66.438341 +L 156.525598 -64.784497 +L 151.796906 -62.965317 +L 147.068214 -61.318045 +L 142.339522 -60.495713 +L 137.610831 -59.490367 +L 132.882139 -58.077243 +L 128.153447 -56.841486 +L 123.424755 -55.551963 +L 118.696064 -54.756834 +L 113.967372 -54.222496 +L 109.23868 -53.984835 +L 104.509988 -53.601647 +L 99.781297 -53.156254 +L 95.052605 -52.151066 +L 90.323913 -51.085423 +L 85.595221 -50.267924 +L 80.86653 -48.804903 +L 76.137838 -46.051029 +L 71.409146 -43.158922 +L 66.680455 -39.462848 +z +" id="m4f3e22d269" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p44aca897b4)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m4f3e22d269" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#p44aca897b4)" d="M 66.680455 102.419242 +L 71.41388 99.427349 +L 76.147305 97.192757 +L 80.88073 95.237624 +L 85.614155 93.557531 +L 90.34758 92.533993 +L 95.081006 91.780408 +L 99.814431 91.045372 +L 104.547856 90.464445 +L 109.281281 89.740517 +L 114.014706 88.776903 +L 118.748131 87.301064 +L 123.481556 85.700994 +L 128.214982 83.804662 +L 132.948407 81.876018 +L 137.681832 80.36541 +L 142.415257 79.292568 +L 147.148682 78.510574 +L 151.882107 77.862317 +L 156.615533 77.338849 +L 161.348958 77.020147 +L 166.082383 74.893525 +L 170.815808 72.202844 +L 175.549233 70.150564 +L 180.282658 68.435944 +L 185.016084 66.789915 +L 189.749509 64.963892 +L 194.482934 63.631472 +L 199.216359 62.290328 +L 203.949784 61.191864 +L 208.683209 59.834468 +L 213.416635 58.027193 +L 218.15006 56.159235 +L 222.883485 54.641727 +L 227.61691 53.678552 +L 232.350335 53.465149 +L 237.08376 53.474753 +L 241.817185 53.745018 +L 246.550611 54.285471 +L 251.284036 54.806234 +L 256.017461 54.075202 +L 260.750886 53.711526 +L 265.484311 53.715415 +L 270.217736 53.066772 +L 274.951162 52.456147 +L 279.684587 51.930902 +L 284.418012 51.867254 +L 289.151437 52.321972 +L 293.884862 52.840216 +L 298.618287 53.242554 +L 303.351713 53.700348 +L 308.085138 54.195787 +L 312.818563 52.740376 +L 317.551988 52.564599 +L 322.285413 52.647091 +L 327.018838 51.790324 +L 331.752264 51.324372 +L 336.485689 51.434279 +L 341.219114 51.113432 +L 345.952539 51.107329 +L 350.685964 51.430534 +L 355.419389 51.936003 +L 360.152815 52.773589 +L 364.88624 51.885958 +L 369.619665 50.851495 +L 374.35309 50.491496 +L 379.086515 50.864475 +L 383.81994 51.719909 +L 388.553365 51.658488 +L 393.286791 51.392404 +L 398.020216 51.524528 +L 402.753641 51.565243 +L 407.487066 50.954153 +L 412.220491 50.589627 +L 416.953916 50.435295 +L 421.687342 50.297801 +L 426.420767 50.287397 +L 431.154192 50.447992 +L 435.887617 50.475834 +L 440.621042 51.594283 +L 445.354467 53.724104 +L 450.087893 52.798787 +L 454.821318 50.811139 +L 459.554743 49.897053 +L 464.288168 50.065309 +L 469.021593 48.534289 +L 473.755018 47.796632 +L 478.488444 47.26176 +L 483.221869 47.404133 +L 487.955294 48.057029 +L 492.688719 47.290078 +L 497.422144 47.066808 +L 502.155569 46.750104 +L 506.888994 46.581053 +L 511.62242 46.423558 +L 516.355845 46.833606 +L 521.08927 47.241426 +L 525.822695 47.572449 +L 530.55612 47.746083 +L 535.289545 48.051247 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#p44aca897b4)" d="M 66.680455 105.781758 +L 71.409146 101.714098 +L 76.137838 98.410355 +L 80.86653 95.670604 +L 85.595221 94.057983 +L 90.323913 93.100559 +L 95.052605 92.070175 +L 99.781297 91.086741 +L 104.509988 90.649218 +L 109.23868 90.413924 +L 113.967372 90.244757 +L 118.696064 89.624469 +L 123.424755 88.96244 +L 128.153447 87.962035 +L 132.882139 87.051347 +L 137.610831 85.945682 +L 142.339522 85.015921 +L 147.068214 84.359408 +L 151.796906 83.158536 +L 156.525598 81.785853 +L 161.254289 80.484047 +L 165.982981 79.55654 +L 170.711673 78.724636 +L 175.440364 77.801906 +L 180.169056 76.90652 +L 184.897748 76.16077 +L 189.62644 75.170477 +L 194.355131 73.714659 +L 199.083823 72.047144 +L 203.812515 70.04691 +L 208.541207 68.423095 +L 213.269898 67.725851 +L 217.99859 66.007005 +L 222.727282 64.0037 +L 227.455974 62.584636 +L 232.184665 60.558174 +L 236.913357 58.60031 +L 241.642049 56.901145 +L 246.37074 55.846156 +L 251.099432 54.292367 +L 255.828124 53.060753 +L 260.556816 51.481777 +L 265.285507 50.036066 +L 270.014199 49.090807 +L 274.742891 48.46617 +L 279.471583 47.149558 +L 284.200274 46.021953 +L 288.928966 44.709191 +L 293.657658 44.117336 +L 298.38635 43.845593 +L 303.115041 43.243954 +L 307.843733 42.566515 +L 312.572425 42.378586 +L 317.301117 41.911154 +L 322.029808 41.729067 +L 326.7585 41.61532 +L 331.487192 40.977491 +L 336.215883 39.953193 +L 340.944575 39.194492 +L 345.673267 38.550656 +L 350.401959 38.008276 +L 355.13065 37.580577 +L 359.859342 37.535085 +L 364.588034 37.483832 +L 369.316726 37.735802 +L 374.045417 37.883718 +L 378.774109 37.575311 +L 383.502801 37.90608 +L 388.231493 37.408738 +L 392.960184 37.155648 +L 397.688876 36.809708 +L 402.417568 36.509187 +L 407.14626 36.263267 +L 411.874951 36.322378 +L 416.603643 36.275493 +L 421.332335 36.432055 +L 426.061026 36.401375 +L 430.789718 36.618221 +L 435.51841 36.493937 +L 440.247102 36.623786 +L 444.975793 36.604464 +L 449.704485 36.0596 +L 454.433177 35.734769 +L 459.161869 35.616006 +L 463.89056 35.654636 +L 468.619252 35.452528 +L 473.347944 35.281446 +L 478.076636 35.319347 +L 482.805327 35.171996 +L 487.534019 35.37564 +L 492.262711 35.28674 +L 496.991402 35.225129 +L 501.720094 35.224279 +L 506.448786 35.073077 +L 511.177478 34.673476 +L 515.906169 34.617894 +L 520.634861 34.691838 +L 525.363553 34.401699 +L 530.092245 34.265274 +L 534.820936 34.112114 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 43.25 110.74 +L 43.25 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 43.25 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 43.25 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 300.985, 23.04)" x="300.985" y="23.04">Swimmer</text> + </g> + </g> + </g> + <defs> + <clipPath id="p44aca897b4"> + <rect height="81.7" width="515.47" x="43.25" y="29.04"/> + </clipPath> + </defs> +</svg> + + + <?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.org/) --> +<svg height="144pt" version="1.1" viewBox="0 0 576 144" width="576pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <style type="text/css"> +*{stroke-linecap:butt;stroke-linejoin:round;} + </style> + </defs> + <g id="figure_1"> + <g id="patch_1"> + <path d="M 0 144 +L 576 144 +L 576 0 +L 0 0 +z +" style="fill:#ffffff;"/> + </g> + <g id="axes_1"> + <g id="patch_2"> + <path d="M 50.27 110.74 +L 558.72 110.74 +L 558.72 29.04 +L 50.27 29.04 +z +" style="fill:#eaeaf2;"/> + </g> + <g id="matplotlib.axis_1"> + <g id="xtick_1"> + <g id="line2d_1"> + <path clip-path="url(#p965723664d)" d="M 73.381364 110.74 +L 73.381364 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_1"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 73.381364, 128.598281)" x="73.381364" y="128.598281">0</text> + </g> + </g> + <g id="xtick_2"> + <g id="line2d_2"> + <path clip-path="url(#p965723664d)" d="M 165.833105 110.74 +L 165.833105 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_2"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 165.833105, 128.598281)" x="165.833105" y="128.598281">200000</text> + </g> + </g> + <g id="xtick_3"> + <g id="line2d_3"> + <path clip-path="url(#p965723664d)" d="M 258.284846 110.74 +L 258.284846 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_3"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 258.284846, 128.598281)" x="258.284846" y="128.598281">400000</text> + </g> + </g> + <g id="xtick_4"> + <g id="line2d_4"> + <path clip-path="url(#p965723664d)" d="M 350.736587 110.74 +L 350.736587 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_4"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 350.736587, 128.598281)" x="350.736587" y="128.598281">600000</text> + </g> + </g> + <g id="xtick_5"> + <g id="line2d_5"> + <path clip-path="url(#p965723664d)" d="M 443.188329 110.74 +L 443.188329 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_5"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 443.188329, 128.598281)" x="443.188329" y="128.598281">800000</text> + </g> + </g> + <g id="xtick_6"> + <g id="line2d_6"> + <path clip-path="url(#p965723664d)" d="M 535.64007 110.74 +L 535.64007 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_6"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 535.64007, 128.598281)" x="535.64007" y="128.598281">1000000</text> + </g> + </g> + </g> + <g id="matplotlib.axis_2"> + <g id="ytick_1"> + <g id="line2d_7"> + <path clip-path="url(#p965723664d)" d="M 50.27 107.311004 +L 558.72 107.311004 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_7"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.77, 111.490145)" x="40.77" y="111.490145">0</text> + </g> + </g> + <g id="ytick_2"> + <g id="line2d_8"> + <path clip-path="url(#p965723664d)" d="M 50.27 67.683345 +L 558.72 67.683345 +" style="fill:none;stroke:#ffffff;stroke-linecap:round;"/> + </g> + <g id="text_8"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:11px;font-style:normal;font-weight:normal;text-anchor:end;" transform="rotate(-0, 40.77, 71.862486)" x="40.77" y="71.862486">2000</text> + </g> + </g> + </g> + <g id="PolyCollection_1"> + <defs> + <path d="M 73.381364 -37.054781 +L 73.381364 -37.030907 +L 78.050326 -37.488634 +L 82.719288 -38.604543 +L 87.388251 -39.971238 +L 92.057213 -41.022904 +L 96.726175 -41.605671 +L 101.395138 -42.016084 +L 106.0641 -42.347404 +L 110.733062 -42.665142 +L 115.402025 -42.883163 +L 120.070987 -43.061717 +L 124.739949 -43.237385 +L 129.408912 -43.475693 +L 134.077874 -43.633802 +L 138.746837 -43.855855 +L 143.415799 -44.122508 +L 148.084761 -44.379404 +L 152.753724 -44.739773 +L 157.422686 -45.050287 +L 162.091648 -45.342681 +L 166.760611 -45.622328 +L 171.429573 -45.944588 +L 176.098535 -46.403923 +L 180.767498 -47.020932 +L 185.43646 -47.621015 +L 190.105422 -48.015258 +L 194.774385 -48.470075 +L 199.443347 -49.101289 +L 204.112309 -49.662838 +L 208.781272 -49.932642 +L 213.450234 -50.570252 +L 218.119197 -51.275259 +L 222.788159 -51.683896 +L 227.457121 -52.20841 +L 232.126084 -52.907736 +L 236.795046 -53.298095 +L 241.464008 -53.910714 +L 246.132971 -54.276431 +L 250.801933 -54.948761 +L 255.470895 -55.662197 +L 260.139858 -56.464369 +L 264.80882 -57.374378 +L 269.477782 -58.093984 +L 274.146745 -58.698104 +L 278.815707 -59.580127 +L 283.484669 -60.310617 +L 288.153632 -61.016806 +L 292.822594 -61.235492 +L 297.491556 -60.913944 +L 302.160519 -62.016263 +L 306.829481 -62.597127 +L 311.498444 -63.562613 +L 316.167406 -64.239314 +L 320.836368 -64.934687 +L 325.505331 -65.639856 +L 330.174293 -65.881162 +L 334.843255 -66.311724 +L 339.512218 -66.988476 +L 344.18118 -67.399929 +L 348.850142 -67.714947 +L 353.519105 -68.684509 +L 358.188067 -70.192085 +L 362.857029 -71.284451 +L 367.525992 -71.549257 +L 372.194954 -72.049779 +L 376.863916 -73.322479 +L 381.532879 -73.251244 +L 386.201841 -74.412734 +L 390.870803 -75.280809 +L 395.539766 -76.479644 +L 400.208728 -77.130804 +L 404.877691 -78.549864 +L 409.546653 -79.026834 +L 414.215615 -78.659774 +L 418.884578 -79.798521 +L 423.55354 -79.075392 +L 428.222502 -79.45155 +L 432.891465 -79.54475 +L 437.560427 -81.48242 +L 442.229389 -82.444251 +L 446.898352 -81.513208 +L 451.567314 -80.063014 +L 456.236276 -80.000602 +L 460.905239 -80.712305 +L 465.574201 -81.680707 +L 470.243163 -81.771329 +L 474.912126 -81.301101 +L 479.581088 -82.009461 +L 484.250051 -81.917521 +L 488.919013 -82.603115 +L 493.587975 -82.287169 +L 498.256938 -82.769199 +L 502.9259 -81.85019 +L 507.594862 -79.53992 +L 512.263825 -78.491745 +L 516.932787 -80.422317 +L 521.601749 -81.556888 +L 526.270712 -81.681187 +L 530.939674 -83.274102 +L 535.608636 -86.91686 +L 535.608636 -91.543005 +L 535.608636 -91.543005 +L 530.939674 -87.488488 +L 526.270712 -85.693916 +L 521.601749 -85.111314 +L 516.932787 -84.192966 +L 512.263825 -82.896317 +L 507.594862 -84.403224 +L 502.9259 -87.664889 +L 498.256938 -86.851075 +L 493.587975 -85.244994 +L 488.919013 -86.731843 +L 484.250051 -87.452216 +L 479.581088 -89.412195 +L 474.912126 -88.245886 +L 470.243163 -86.989387 +L 465.574201 -86.918557 +L 460.905239 -85.54912 +L 456.236276 -84.418501 +L 451.567314 -83.8903 +L 446.898352 -85.190673 +L 442.229389 -87.130784 +L 437.560427 -87.109097 +L 432.891465 -85.022137 +L 428.222502 -83.288151 +L 423.55354 -82.361278 +L 418.884578 -83.486581 +L 414.215615 -82.380477 +L 409.546653 -83.053509 +L 404.877691 -82.74346 +L 400.208728 -82.124038 +L 395.539766 -81.207093 +L 390.870803 -80.532144 +L 386.201841 -80.345231 +L 381.532879 -79.803865 +L 376.863916 -81.161859 +L 372.194954 -79.934709 +L 367.525992 -79.052305 +L 362.857029 -78.500849 +L 358.188067 -78.337004 +L 353.519105 -75.900174 +L 348.850142 -74.067441 +L 344.18118 -73.478659 +L 339.512218 -73.747429 +L 334.843255 -73.206876 +L 330.174293 -72.555939 +L 325.505331 -72.480825 +L 320.836368 -71.245933 +L 316.167406 -70.840682 +L 311.498444 -70.294544 +L 306.829481 -68.372887 +L 302.160519 -68.00094 +L 297.491556 -66.970319 +L 292.822594 -68.446539 +L 288.153632 -68.550491 +L 283.484669 -66.787578 +L 278.815707 -65.714123 +L 274.146745 -65.043877 +L 269.477782 -64.600701 +L 264.80882 -64.242406 +L 260.139858 -63.07294 +L 255.470895 -61.501301 +L 250.801933 -60.400925 +L 246.132971 -59.604207 +L 241.464008 -58.950704 +L 236.795046 -57.863408 +L 232.126084 -56.708151 +L 227.457121 -55.245379 +L 222.788159 -54.299034 +L 218.119197 -53.758812 +L 213.450234 -53.131421 +L 208.781272 -52.60803 +L 204.112309 -52.594147 +L 199.443347 -51.93094 +L 194.774385 -50.993419 +L 190.105422 -50.559952 +L 185.43646 -50.225886 +L 180.767498 -49.643025 +L 176.098535 -48.621857 +L 171.429573 -47.92918 +L 166.760611 -47.391789 +L 162.091648 -46.862373 +L 157.422686 -46.25488 +L 152.753724 -45.746406 +L 148.084761 -45.206406 +L 143.415799 -44.834061 +L 138.746837 -44.55631 +L 134.077874 -44.307137 +L 129.408912 -44.10809 +L 124.739949 -43.899242 +L 120.070987 -43.732287 +L 115.402025 -43.513898 +L 110.733062 -43.219206 +L 106.0641 -42.817982 +L 101.395138 -42.423333 +L 96.726175 -41.961105 +L 92.057213 -41.266043 +L 87.388251 -40.091218 +L 82.719288 -38.710058 +L 78.050326 -37.545588 +L 73.381364 -37.054781 +z +" id="m5fc543189e" style="stroke:#66c2a5;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p965723664d)"> + <use style="fill:#66c2a5;fill-opacity:0.3;stroke:#66c2a5;stroke-opacity:0.3;" x="0" xlink:href="#m5fc543189e" y="144"/> + </g> + </g> + <g id="PolyCollection_2"> + <defs> + <path d="M 73.381364 -36.988313 +L 73.381364 -36.973636 +L 78.04709 -37.363848 +L 82.712817 -38.568725 +L 87.378543 -40.138969 +L 92.04427 -41.323802 +L 96.709996 -42.106671 +L 101.375723 -42.702571 +L 106.041449 -43.129033 +L 110.707176 -43.431678 +L 115.372902 -43.656336 +L 120.038629 -43.823266 +L 124.704356 -43.99861 +L 129.370082 -44.208247 +L 134.035809 -44.426919 +L 138.701535 -44.726706 +L 143.367262 -45.088147 +L 148.032988 -45.469197 +L 152.698715 -45.913387 +L 157.364441 -46.427167 +L 162.030168 -46.970515 +L 166.695894 -47.725325 +L 171.361621 -48.532985 +L 176.027348 -49.353131 +L 180.693074 -50.365778 +L 185.358801 -51.587462 +L 190.024527 -52.701985 +L 194.690254 -53.679604 +L 199.35598 -54.600047 +L 204.021707 -55.909497 +L 208.687433 -57.37138 +L 213.35316 -59.324608 +L 218.018886 -60.874265 +L 222.684613 -63.261289 +L 227.350339 -65.326599 +L 232.016066 -67.148548 +L 236.681793 -68.935307 +L 241.347519 -70.959499 +L 246.013246 -72.532383 +L 250.678972 -72.642705 +L 255.344699 -73.672994 +L 260.010425 -75.48347 +L 264.676152 -76.087047 +L 269.341878 -77.719568 +L 274.007605 -80.3677 +L 278.673331 -82.201176 +L 283.339058 -83.110788 +L 288.004784 -83.21683 +L 292.670511 -83.66689 +L 297.336238 -83.378609 +L 302.001964 -82.963198 +L 306.667691 -83.971105 +L 311.333417 -85.899553 +L 315.999144 -85.189167 +L 320.66487 -85.358235 +L 325.330597 -86.403574 +L 329.996323 -87.106953 +L 334.66205 -87.486754 +L 339.327776 -90.063458 +L 343.993503 -88.778162 +L 348.659229 -85.50899 +L 353.324956 -85.980916 +L 357.990683 -90.032788 +L 362.656409 -92.937093 +L 367.322136 -93.079832 +L 371.987862 -93.915991 +L 376.653589 -94.678116 +L 381.319315 -95.228049 +L 385.985042 -95.860035 +L 390.650768 -96.043648 +L 395.316495 -96.477785 +L 399.982221 -97.640971 +L 404.647948 -98.29771 +L 409.313675 -97.183542 +L 413.979401 -98.139002 +L 418.645128 -97.567812 +L 423.310854 -97.205255 +L 427.976581 -98.606158 +L 432.642307 -100.587159 +L 437.308034 -101.70541 +L 441.97376 -104.026367 +L 446.639487 -104.836297 +L 451.305213 -105.40098 +L 455.97094 -104.33555 +L 460.636666 -102.00911 +L 465.302393 -102.035295 +L 469.96812 -101.431513 +L 474.633846 -101.242672 +L 479.299573 -101.177293 +L 483.965299 -101.493144 +L 488.631026 -103.236258 +L 493.296752 -103.079606 +L 497.962479 -103.219828 +L 502.628205 -103.096773 +L 507.293932 -103.257373 +L 511.959658 -100.722879 +L 516.625385 -100.344972 +L 521.291111 -101.586294 +L 525.956838 -101.527559 +L 530.622565 -102.565244 +L 535.288291 -101.108849 +L 535.288291 -110.796625 +L 535.288291 -110.796625 +L 530.622565 -109.323519 +L 525.956838 -107.714623 +L 521.291111 -107.263365 +L 516.625385 -106.169524 +L 511.959658 -106.250412 +L 507.293932 -107.981055 +L 502.628205 -108.639488 +L 497.962479 -110.389671 +L 493.296752 -111.154766 +L 488.631026 -111.246364 +L 483.965299 -107.788597 +L 479.299573 -107.105417 +L 474.633846 -106.431065 +L 469.96812 -107.769537 +L 465.302393 -110.060913 +L 460.636666 -108.409814 +L 455.97094 -108.391141 +L 451.305213 -109.779507 +L 446.639487 -108.935557 +L 441.97376 -109.816372 +L 437.308034 -109.355809 +L 432.642307 -107.027186 +L 427.976581 -104.608764 +L 423.310854 -103.624754 +L 418.645128 -103.522526 +L 413.979401 -104.86955 +L 409.313675 -102.690256 +L 404.647948 -102.785592 +L 399.982221 -103.328456 +L 395.316495 -103.960144 +L 390.650768 -102.925616 +L 385.985042 -102.448852 +L 381.319315 -102.169598 +L 376.653589 -102.714196 +L 371.987862 -102.832847 +L 367.322136 -101.65981 +L 362.656409 -101.107109 +L 357.990683 -98.041889 +L 353.324956 -93.074757 +L 348.659229 -91.689584 +L 343.993503 -95.89108 +L 339.327776 -97.914581 +L 334.66205 -95.005913 +L 329.996323 -95.008312 +L 325.330597 -95.043486 +L 320.66487 -94.251279 +L 315.999144 -93.79066 +L 311.333417 -94.599432 +L 306.667691 -92.283748 +L 302.001964 -92.56939 +L 297.336238 -92.593499 +L 292.670511 -92.442049 +L 288.004784 -92.582495 +L 283.339058 -93.055088 +L 278.673331 -92.273228 +L 274.007605 -91.335271 +L 269.341878 -89.349607 +L 264.676152 -87.999135 +L 260.010425 -86.742148 +L 255.344699 -84.926117 +L 250.678972 -83.685646 +L 246.013246 -83.635119 +L 241.347519 -81.534078 +L 236.681793 -79.020253 +L 232.016066 -76.806367 +L 227.350339 -74.865267 +L 222.684613 -71.780013 +L 218.018886 -68.251666 +L 213.35316 -66.124085 +L 208.687433 -63.234553 +L 204.021707 -61.295322 +L 199.35598 -60.189488 +L 194.690254 -59.193977 +L 190.024527 -57.59314 +L 185.358801 -55.504564 +L 180.693074 -53.836911 +L 176.027348 -52.457639 +L 171.361621 -51.422629 +L 166.695894 -50.395128 +L 162.030168 -49.378601 +L 157.364441 -48.578754 +L 152.698715 -47.718806 +L 148.032988 -46.985187 +L 143.367262 -46.406142 +L 138.701535 -45.870853 +L 134.035809 -45.364808 +L 129.370082 -44.849217 +L 124.704356 -44.435349 +L 120.038629 -44.14166 +L 115.372902 -43.866519 +L 110.707176 -43.582578 +L 106.041449 -43.280953 +L 101.375723 -42.888173 +L 96.709996 -42.398808 +L 92.04427 -41.607887 +L 87.378543 -40.309703 +L 82.712817 -38.685292 +L 78.04709 -37.406582 +L 73.381364 -36.988313 +z +" id="m094f4855c9" style="stroke:#fc8d62;stroke-opacity:0.3;"/> + </defs> + <g clip-path="url(#p965723664d)"> + <use style="fill:#fc8d62;fill-opacity:0.3;stroke:#fc8d62;stroke-opacity:0.3;" x="0" xlink:href="#m094f4855c9" y="144"/> + </g> + </g> + <g id="line2d_9"> + <path clip-path="url(#p965723664d)" d="M 73.381364 106.957156 +L 78.050326 106.482889 +L 82.719288 105.342699 +L 87.388251 103.968772 +L 92.057213 102.855527 +L 96.726175 102.216612 +L 101.395138 101.780292 +L 106.0641 101.417307 +L 110.733062 101.057826 +L 115.402025 100.801469 +L 120.070987 100.602998 +L 124.739949 100.431687 +L 129.408912 100.208109 +L 134.077874 100.02953 +L 138.746837 99.793917 +L 143.415799 99.521716 +L 148.084761 99.207095 +L 152.753724 98.756911 +L 157.422686 98.347417 +L 162.091648 97.897473 +L 166.760611 97.492941 +L 171.429573 97.063116 +L 176.098535 96.48711 +L 180.767498 95.668021 +L 185.43646 95.076549 +L 190.105422 94.712395 +L 194.774385 94.268253 +L 199.443347 93.483886 +L 204.112309 92.871508 +L 208.781272 92.729664 +L 213.450234 92.149163 +L 218.119197 91.482965 +L 222.788159 91.008535 +L 227.457121 90.273105 +L 232.126084 89.192057 +L 236.795046 88.419249 +L 241.464008 87.569291 +L 246.132971 87.059681 +L 250.801933 86.325157 +L 255.470895 85.418251 +L 260.139858 84.231346 +L 264.80882 83.191608 +L 269.477782 82.652657 +L 274.146745 82.129009 +L 278.815707 81.352875 +L 283.484669 80.450903 +L 288.153632 79.216352 +L 292.822594 79.158984 +L 297.491556 80.057868 +L 302.160519 78.991398 +L 306.829481 78.514993 +L 311.498444 77.071421 +L 316.167406 76.460002 +L 320.836368 75.90969 +L 325.505331 74.93966 +L 330.174293 74.781449 +L 334.843255 74.2407 +L 339.512218 73.632047 +L 344.18118 73.560706 +L 348.850142 73.108806 +L 353.519105 71.707659 +L 358.188067 69.735455 +L 362.857029 69.10735 +L 367.525992 68.699219 +L 372.194954 68.007756 +L 376.863916 66.757831 +L 381.532879 67.472445 +L 386.201841 66.621018 +L 390.870803 66.093523 +L 395.539766 65.156631 +L 400.208728 64.372579 +L 404.877691 63.353338 +L 409.546653 62.959829 +L 414.215615 63.479875 +L 418.884578 62.357449 +L 423.55354 63.281665 +L 428.222502 62.630149 +L 432.891465 61.716556 +L 437.560427 59.704242 +L 442.229389 59.212482 +L 446.898352 60.64806 +L 451.567314 62.023343 +L 456.236276 61.790448 +L 460.905239 60.869288 +L 465.574201 59.700368 +L 470.243163 59.619642 +L 474.912126 59.226506 +L 479.581088 58.289172 +L 484.250051 59.315132 +L 488.919013 59.332521 +L 493.587975 60.233918 +L 498.256938 59.189863 +L 502.9259 59.24246 +L 507.594862 62.028428 +L 512.263825 63.305969 +L 516.932787 61.692358 +L 521.601749 60.665899 +L 526.270712 60.312449 +L 530.939674 58.618705 +L 535.608636 54.770068 +" style="fill:none;stroke:#66c2a5;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="line2d_10"> + <path clip-path="url(#p965723664d)" d="M 73.381364 107.019025 +L 78.04709 106.614785 +L 82.712817 105.372992 +L 87.378543 103.775664 +L 92.04427 102.534155 +L 96.709996 101.747261 +L 101.375723 101.204628 +L 106.041449 100.795007 +L 110.707176 100.492872 +L 115.372902 100.238572 +L 120.038629 100.017537 +L 124.704356 99.783021 +L 129.370082 99.471268 +L 134.035809 99.104136 +L 138.701535 98.70122 +L 143.367262 98.252855 +L 148.032988 97.772808 +L 152.698715 97.183904 +L 157.364441 96.497039 +L 162.030168 95.825442 +L 166.695894 94.939774 +L 171.361621 94.022193 +L 176.027348 93.094615 +L 180.693074 91.898656 +L 185.358801 90.453987 +L 190.024527 88.852438 +L 194.690254 87.56321 +L 199.35598 86.605232 +L 204.021707 85.397591 +L 208.687433 83.697034 +L 213.35316 81.275654 +L 218.018886 79.437034 +L 222.684613 76.479349 +L 227.350339 73.904067 +L 232.016066 72.022543 +L 236.681793 70.02222 +L 241.347519 67.753212 +L 246.013246 65.916249 +L 250.678972 65.835824 +L 255.344699 64.700444 +L 260.010425 62.887191 +L 264.676152 61.956909 +L 269.341878 60.465412 +L 274.007605 58.148515 +L 278.673331 56.762798 +L 283.339058 55.917062 +L 288.004784 56.100337 +L 292.670511 55.94553 +L 297.336238 56.013946 +L 302.001964 56.233706 +L 306.667691 55.872574 +L 311.333417 53.750508 +L 315.999144 54.510086 +L 320.66487 54.195243 +L 325.330597 53.27647 +L 329.996323 52.942368 +L 334.66205 52.753666 +L 339.327776 50.01098 +L 343.993503 51.665379 +L 348.659229 55.400713 +L 353.324956 54.472164 +L 357.990683 49.962661 +L 362.656409 46.977899 +L 367.322136 46.630179 +L 371.987862 45.625581 +L 376.653589 45.303844 +L 381.319315 45.301177 +L 385.985042 44.845556 +L 390.650768 44.515368 +L 395.316495 43.781035 +L 399.982221 43.515287 +L 404.647948 43.458349 +L 409.313675 44.063101 +L 413.979401 42.495724 +L 418.645128 43.454831 +L 423.310854 43.584996 +L 427.976581 42.392539 +L 432.642307 40.192828 +L 437.308034 38.46939 +L 441.97376 37.07863 +L 446.639487 37.114073 +L 451.305213 36.409756 +L 455.97094 37.636654 +L 460.636666 38.790538 +L 465.302393 37.951896 +L 469.96812 39.399475 +L 474.633846 40.163131 +L 479.299573 39.858645 +L 483.965299 39.35913 +L 488.631026 36.758689 +L 493.296752 36.882814 +L 497.962479 37.19525 +L 502.628205 38.13187 +L 507.293932 38.380786 +L 511.959658 40.513355 +L 516.625385 40.742752 +L 521.291111 39.575171 +L 525.956838 39.378909 +L 530.622565 38.055619 +L 535.288291 38.047263 +" style="fill:none;stroke:#fc8d62;stroke-linecap:round;stroke-width:1.5;"/> + </g> + <g id="patch_3"> + <path d="M 50.27 110.74 +L 50.27 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_4"> + <path d="M 558.72 110.74 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_5"> + <path d="M 50.27 110.74 +L 558.72 110.74 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="patch_6"> + <path d="M 50.27 29.04 +L 558.72 29.04 +" style="fill:none;stroke:#ffffff;stroke-linecap:square;stroke-linejoin:miter;stroke-width:1.25;"/> + </g> + <g id="text_9"> + <text style="fill:#262626;font-family:DejaVu Sans;font-size:12px;font-style:normal;font-weight:normal;text-anchor:middle;" transform="rotate(-0, 304.495, 23.04)" x="304.495" y="23.04">Walker2d</text> + </g> + </g> + </g> + <defs> + <clipPath id="p965723664d"> + <rect height="81.7" width="508.45" x="50.27" y="29.04"/> + </clipPath> + </defs> +</svg> + + + </div> + +</div><!-- /.container --> + +<script> + $(function () { + $('[data-toggle="tooltip"]').tooltip() + }) +</script> + +</body> +</html> diff --git a/baselines/data/cartpole.gif b/baselines/data/cartpole.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d16dcb3f3e1e11a167580c722e46a91333e213 Binary files /dev/null and b/baselines/data/cartpole.gif differ diff --git a/baselines/data/fetchPickAndPlaceContrast.png b/baselines/data/fetchPickAndPlaceContrast.png new file mode 100644 index 0000000000000000000000000000000000000000..c751881b097ce0200e21fe3150eed2da49919a15 Binary files /dev/null and b/baselines/data/fetchPickAndPlaceContrast.png differ diff --git a/baselines/data/logo.jpg b/baselines/data/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6fa80192182e827d84e6adf7c135ff57510f14b Binary files /dev/null and b/baselines/data/logo.jpg differ diff --git a/baselines/docs/viz/viz.ipynb b/baselines/docs/viz/viz.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f1741c1c7e3b026b88d64c3213fdbc421d8b0d26 --- /dev/null +++ b/baselines/docs/viz/viz.ipynb @@ -0,0 +1,808 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Ynb-laSwmpac" + }, + "source": [ + "# Loading and visualizing results ([open in colab](https://colab.research.google.com/github/openai/baselines/blob/master/docs/viz/viz.ipynb))\n", + "In order to compare performance of algorithms, we often would like to visualize learning curves (reward as a function of time steps), or some other auxiliary information about learning aggregated into a plot. Baselines repo provides tools for doing so in several different ways, depending on the goal." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "yreoV7OClzYG" + }, + "source": [ + "## Preliminaries / TensorBoard\n", + "First, let us install baselines repo from github" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "r4Aul2Qujlg9" + }, + "outputs": [], + "source": [ + "!pip install git+https://github.com/openai/baselines > ~/pip_install_baselines.log" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "1n7XAyVWniRp" + }, + "source": [ + "For all algorithms in baselines summary data is saved into a folder defined by logger. By default, a folder $TMPDIR/openai-<date>-<time> is used; you can see the location of logger directory at the beginning of the training in the message like this:\n", + "\n", + "Logging to /var/folders/mq/tgrn7bs17s1fnhlwt314b2fm0000gn/T/openai-2018-10-29-15-03-13-537078\n", + "The location can be changed by changing OPENAI_LOGDIR environment variable. For instance, " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 32433, + "status": "ok", + "timestamp": 1541626389411, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "xzqFBYiZjtUr", + "outputId": "92dc8be5-c18c-4399-b2d0-0f444b321a13" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n" + ] + } + ], + "source": [ + "!OPENAI_LOGDIR=$HOME/logs/cartpole-ppo OPENAI_LOG_FORMAT=csv python -m baselines.run --alg=ppo2 --env=CartPole-v0 --num_timesteps=30000 --nsteps=128" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "WYwTBFMCn95w" + }, + "source": [ + "Notice also the usage of `OPENAI_LOG_FORMAT` environment variable - this allows us to suppress printing to stdout. \n", + "Permissible values for `OPENAI_LOG_FORMAT` environment variables are `stdout`, `log`, `csv`, and `tensorboard` (multiple values can be comma-separated). \n", + "The latter one (`tensorboard`) dumps values in tensorboard format, which allows for their viewing in [TensorBoard](https://www.tensorflow.org/guide/summaries_and_tensorboard). TensorBoard provides nice visualization and in many cases is the easiest way to look at the summary of the results. However, if tensorboard visualization is not sufficient, read on...\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "QcWDWCfIojHy" + }, + "source": [ + "## Loading results and plotting using matplotlib\n", + "Bаselines provides helper functions to load the summaries of the results as pandas dataframes. \n", + "For instance, the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 71 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 361, + "status": "ok", + "timestamp": 1541626398698, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "cDdZjFR2kFG2", + "outputId": "09d91a7a-f851-459b-903a-f8c1d32ccb8e" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/dist-packages/baselines/bench/monitor.py:164: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " df.headers = headers # HACK to preserve backwards compatibility\n" + ] + } + ], + "source": [ + "from baselines.common import plot_util as pu\n", + "results = pu.load_results('~/logs/cartpole-ppo') " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "sj3jfhbBpGPq" + }, + "source": [ + "will search for all folders with baselines-compatible results in ~/logs/cartpole-ppo and subfolders and return a list of `Result` objects. Each `Result` object is a named tuple with the following fields:\n", + "\n", + " * dirname: str - name of the folder from which data was loaded\n", + " \n", + " * metadata: dict) - dictionary with various metadata (read from metadata.json file)\n", + "\n", + " * progress: pandas.DataFrame - tabular data saved by logger as a pandas dataframe. Available if csv is in logger formats.\n", + "\n", + " * monitor: pandas.DataFrame - raw episode data (length, episode reward, timestamp). Available if environment wrapped with Monitor wrapper\n", + " \n", + "Thus, a learning curve from a single run can be plotted as follows (note the cumulative sum trick to get convert lengths of the episodes into number of time steps taken so far)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 364 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 635, + "status": "ok", + "timestamp": 1541626401733, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "jEBxUzvVsNbP", + "outputId": "7b7016a5-6f94-4384-821d-a9e197211315" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x7f4d4bba0518>]" + ] + }, + "execution_count": 21, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d4bbe1b00>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "r = results[0]\n", + "plt.plot(np.cumsum(r.monitor.l), r.monitor.r)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "lLGJgLFjqLDB" + }, + "source": [ + "The raw learning curve from a single run can be very noisy. To smoothen it and analyze if any learning actually takes place, we can use `plot_util.smooth()` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 364 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 514, + "status": "ok", + "timestamp": 1541626405684, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "Rz4vAnURuURX", + "outputId": "f5e38cd7-c63c-4b9c-aaa0-b24592b636ba" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x7f4d4bb85550>]" + ] + }, + "execution_count": 22, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n1IoAAAAASUVORK5CYII=\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d4bc1be48>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(np.cumsum(r.monitor.l), pu.smooth(r.monitor.r, radius=10))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_e-NRHW8qoMF" + }, + "source": [ + "Similar curve can be obtained by using logger summaries (instead of raw episode data in monitor.csv):\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 364 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 619, + "status": "ok", + "timestamp": 1541626409332, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "E2PawoKEua1N", + "outputId": "02c4b58e-b665-4534-d02c-24c5862e473f" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x7f4d4bc35240>]" + ] + }, + "execution_count": 23, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d513dcbe0>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(r.progress.total_timesteps, r.progress.eprewmean)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "2iI5DRKArEVl" + }, + "source": [ + "Note, however, that raw episode data is stored by the Monitor wrapper, and hence looks similar for all algorithms, whereas progress data is handled by the algorithm itself, and hence can vary (column names, type of data available) between algorithms." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ETICR8zsrKg2" + }, + "source": [ + "## Plotting: many curves\n", + "While the loading and plotting functions described above in principle give you access to any slice of the training summaries, sometimes it is necessary to plot and compare many training runs (multiple algorithms, multiple seeds for random number generator), and usage of the functions above can get tedious and messy. For that case, `baselines.common.plot_util` provides convenience function plot_results that handles multiple `Result` objects that need to be routed in multiple plots. Consider the following bash snippet that runs ppo2 with cartpole with 6 different seeds for 30k time steps, first with rollout batch size 32, and then with batch size 128 (note that the next cell will take a little while to run):" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 629 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 470993, + "status": "ok", + "timestamp": 1541626885128, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "OLEYIE95ue2e", + "outputId": "d1f2760b-1433-4b73-c5ce-ceace66e07cc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 32, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 32, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 32, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 32, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 32, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 32, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n", + "env_type: classic_control\n", + "Training ppo2 on classic_control:CartPole-v0 with arguments \n", + "{'nsteps': 128, 'network': 'mlp'}\n" + ] + } + ], + "source": [ + "!for seed in $(seq 0 5); do OPENAI_LOG_FORMAT=csv OPENAI_LOGDIR=$HOME/logs/cartpole-ppo-hp/b32-$seed python -m baselines.run --alg=ppo2 --env=CartPole-v0 --num_timesteps=3e4 --seed=$seed --nsteps=32; done\n", + "!for seed in $(seq 0 5); do OPENAI_LOG_FORMAT=csv OPENAI_LOGDIR=$HOME/logs/cartpole-ppo-hp/b128-$seed python -m baselines.run --alg=ppo2 --env=CartPole-v0 --num_timesteps=3e4 --seed=$seed --nsteps=128; done" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "XzG8DDNwrwbG" + }, + "source": [ + "The results of 12 runs from the cell above can be loaded just as before, via (we discard first result that is actually from the very first run in the previous section):" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 88 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 319, + "status": "ok", + "timestamp": 1541629440197, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "cNKemLHPv03E", + "outputId": "8ff4813e-23f3-4696-a531-6ef3bd12c569" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/dist-packages/baselines/bench/monitor.py:164: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " df.headers = headers # HACK to preserve backwards compatibility\n" + ] + } + ], + "source": [ + "results = pu.load_results('~/logs/cartpole-ppo-hp'); print(len(results))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "xy388w_tssIL" + }, + "source": [ + "But how do we plot all 12 of them in a sensible manner? `baselines.common.plot_util` module provides plot_results function to do just that:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 937 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 858, + "status": "ok", + "timestamp": 1541629448579, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "1yemaAkKweB2", + "outputId": "612d1da5-e2a1-4836-b223-aebfaa3feac6" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(<matplotlib.figure.Figure at 0x7f4d4bc1bc88>,\n", + " array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f4d4bad9358>],\n", + " [<matplotlib.axes._subplots.AxesSubplot object at 0x7f4d4bab7f28>]],\n", + " dtype=object))" + ] + }, + "execution_count": 26, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d4bc1bc88>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "pu.plot_results(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "uUNu5fEfsvot" + }, + "source": [ + "The results are split into two groups based on batch size and are plotted on a separate graph. More specifically, by default plot_results considers digits after dash at the end of the directory name to be seed id and groups the runs that differ only by those together.\n", + "\n", + "Showing all seeds on the same plot may be somewhat hard to comprehend and analyse. We can instead average over all seeds via the following command:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 937 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 848, + "status": "ok", + "timestamp": 1541629456405, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "7d_aeRYXacFP", + "outputId": "22554c64-b5a5-4892-81d0-8a7d0d3569a4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(<matplotlib.figure.Figure at 0x7f4d4bcd8240>,\n", + " array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f4d4b9f55c0>],\n", + " [<matplotlib.axes._subplots.AxesSubplot object at 0x7f4d4b9bda20>]],\n", + " dtype=object))" + ] + }, + "execution_count": 27, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\niCgl/D/3HGz6UtSjSgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d4bcd8240>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "pu.plot_results(results, average_group=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iA89jxdgtElg" + }, + "source": [ + "The lighter shade shows the standard deviation of data, and darker shade - error in estimate of the mean (that is, standard deviation divided by square root of number of seeds). Note that averaging over seeds requires resampling to a common grid, which, in turn, requires smoothing (using language of signal processing, we need to do low-pass filtering before resampling to avoid aliasing effects). You can change the amount of smoothing by adjusting `resample` and `smooth_step` arguments to achieve desired smoothing effect See the docstring of plot_util function for more info.\n", + "\n", + "To plot both groups on the same graph, we can use the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 488 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 581, + "status": "ok", + "timestamp": 1541629463814, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "_5IMVF3EGBMD", + "outputId": "b29e81b6-8a57-4007-fe31-86652b7ee1e5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(<matplotlib.figure.Figure at 0x7f4d4b919cc0>,\n", + " array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f4d4b95f198>]],\n", + " dtype=object))" + ] + }, + "execution_count": 28, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nRK5CYII=\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d4b919cc0>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "pu.plot_results(results, average_group=True, split_fn=lambda _: '')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ABZmMmCmtQ1X" + }, + "source": [ + "Option `split_fn=labmda _:''` effectively disables splitting, so that all curves end up on the same panel.\n", + "\n", + "Now, with many groups the overlapping shaded regions may start looking messy. We can disable either light shaded region (corresponding to standard deviation of the curves in the group) or darker shaded region (corresponding to the error in mean estimate) by using `shaded_std=False` or `shaded_err=False` options respectively. For instance," + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 488 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 546, + "status": "ok", + "timestamp": 1541629471846, + "user": { + "displayName": "Peter Zhokhov", + "photoUrl": "", + "userId": "10254602425711636265" + }, + "user_tz": 480 + }, + "id": "x4rVG6RGI31B", + "outputId": "a036e51d-b6c6-4855-ce5a-a42c149a59ee" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(<matplotlib.figure.Figure at 0x7f4d4b8577b8>,\n", + " array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f4d4b8bc4e0>]],\n", + " dtype=object))" + ] + }, + "execution_count": 29, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaQAAAGkCAYAAAB+TFE1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzsnXd4ZGd97z/nnOlFo1Evu9pebK/X\nbd3WDdNCAIMhEIxDyQWME+oNBBJ8bwwh1+ECNwkEgwkYYnAwxjTbEAM2Dm644bK9SyutujRF09sp\n948zczSjmZFGu9Lu2nk/z8ODdebMmfeM7PPVr7zfn2QYhoFAIBAIBKcY+VQvQCAQCAQCEIIkEAgE\ngtMEIUgCgUAgOC0QgiQQCASC0wIhSAKBQCA4LRCCJBAIBILTAtvJ+JDp6cSSXCcY9BCNppfkWqc7\n4l5fnoh7fXki7rVx2tv9dV97SUVINptyqpdw0hD3+vJE3OvLE3GvS8NLSpAEAoFA8PJFCJJAIBAI\nTguEIAkEAoHgtEAIkkAgEAhOC4QgCQQCgeC0QAiSQCAQCE4LhCAJBAKB4LRACJJAIBC8BHnggV9w\n661fqTqu6zq33fY13vjGV1ccv+eeH3LDDe/hAx94Dz/72Y8BGBjo56MfvZGPfvRGPv7xDzE2Nlp1\nvXQ6zcc+9hfE43EmJyd45zvfyQ03vIcvf/kfAbj11q/w2GOPLMk9CUESCASClxH/8R930NnZRfns\n1dHRER544Bfcdtt3ue2273DXXd8nmUzy3e/+G+9615/zta/9G294w5v4wQ++V3W97373W1xzzbU0\nNTVx661f4X3vex/f/vb3kWWFiYkJbrjhL/nOd/6NbDZ7wmsXgiQQCAQvUcbHR/nrv/4Y73nPO/jl\nL+8D4G1vewdvfevbK87r7u7hG9+4HZvNht1ux+VykUolCQSaicViACQScQKB5or35XI5HnnkYV75\nyteg6zq7dr3IK1/5SgA++cm/oaurC6fTyWWXXcFDD/36hO/npHjZCQQCwcuZTz34KX60554lveY1\n667lc9v/z7znDA8f47vf/QGpVJI///PrecMb3oTH4606T5ZlPB4PAM8++zSBQDOdnV184AN/wQc+\n8B7uuOPb6LrOt7/9/Yr37d+/l3Xr1qMoCpFIGLfbyxe+8AV27NjFOeecx1/8xUcAOPfc8/nVr37J\nNddce0L3LCIkgUAgeImydeu52Gw2AoFmvF6vFe3UY8+e3Xz961/h5pv/AYB/+7evc+ONH+auu37K\n299+HXfc8e2K80OhadrbOwEwDINQaIr3vOc93Hrrtzh06CBPPvkEAO3tHUxNTZ7w/YgISSAQCE6Q\nL7/2y3z6vJtPwSdLlT9JdU4DDh8+xBe/+A986UtfobOzC4Ddu3fyl3/5UQAuvPBivvjFW6o/oXjR\nQKCZrq5u+vr6mJ5OsG3bhRw92s/27Zcv0b2ICEkgEAhesuzduwtN04hGo2QyGZqaAjXP0zSNL3zh\n89xyy5fo7u6xjvf2rmTfvj0A7N+/jxUrVla8r62tnelpM/Kx2Wz09PQyODgIwMGD++nrWwVAKDRF\ne3vHCd+PiJAEAoHgJUpf32r+7u/+ltHRYT74wQ8hSRL/8i9for//CMlkko985INcfvmVrF27nvHx\nMb70pX+03vuhD32MD3/44/y///cFfvCD7+NwOPj0p/93xfXPOOMsjhw5jKZpKIrCxz72ST7zmc+Q\nz6usXbuOyy67EoAdO17k/PO3nfD9SEZ5b+AysVQD+trb/Ut2rdMdca8vT8S9vnQpaAVkSUaRq+cB\nvdzutZyvfe2fOfPMLbzqVa8Fqu81l8vxwQ/+Od/85ndxu90LXu9lM6BPIBAIThX39f+MfeG9p3oZ\nJ533v/9G7r//58Tj8Zqv3377N3nf+25oSIwWQqTsBAKBYAHCmTAz2RmOxgY4u33rqV7OScXj8fLV\nr95W9/UPf/jjS/ZZIkISCASCBeifOYxDcRDLz5zqpVjk1ByTqRNvtT6dEIIkEAgECzCTjQKQVbPk\ntfwpXo3J7tBOHhv53alexpIiBEkgEAgWIJ6frZ9EM5FTuJJZItkwyXwS3dBP9VKWDCFIAoFAMA+G\nYZAsmF1lDtnBVPb0SJNFMmFUQyWWO33SiCeKaGoQCASCeUjk4+S1Ai6bgiRJJPPJU70ksmqWFx99\nnvhEnO0fuYygq8V67YknHuXOO+/AbrfT3Bzk7/7u8zidTu6554c89NCvMAx4/euvqTJgBbj33p+S\nSiX5sz97L3fddScPPvgrbDYbn/zk39Da2sYXvvB5/v3fv7Ns9yUiJIFAIJiHseQYDsVh/RzJhE/h\nakzGkqPIsimQ8VxlO/aPf3w3//RPX+PWW7+Fx+Ph0Ud/V3f8RDnRaIT77/8573znuxkY6Ofhhx/k\n9tu/z6c+dRNPPvkEHR2dXHLJdr7//UoD1qVECJJAIBDMQygbQpZmH5WhTOiU121CGXNN8VCcf/vH\nr1eMn/jqV2/D5/OhqirhcJj29va64yfKue++n/G6170eWZZ58snHeeUrX43NZmPTps28//03AvCm\nN72Vu+++e9nuS6TsBAKBYB5mspVNDHk9z3Rqik5fl3XsU5+CH/2oeuzDiXDNNSqf+1yu5mvxvOnq\nHZuc4X2f/yCv7H61NX5CkiQeeOAX3H77N7n88is577wLAGqOnyjnhRee48Mf/p8ATEyMI8syn/jE\nR9E0lY985K/YsGEjbreb1tZWhoePsXJl35LeL4gISSAQCOZlbtOAQ3YQyk6fotWYpAspALrWd5M1\nslXjJ17/+mu45577SCQSPPjg7OC8ueMnygmFpunoMA1SDcNA13X+6Z/+lfe970a++MXZuUydnZ1L\nMmqiFiJCEggEgjrohk5Wy2GX7dYxSZJIF9IV5335y/DpT6dO2royanp2LWraSiEWCnmefvpJLrlk\nOzabjcsvv4oXX3ye1772dTXHT1RjjppoaWmlr28VkiRxzjnnMjExdjJuS0RIAoFAUI+0mkbTtarj\nWS17ClYzS0Y1U3mTAxPous6BkX1kMhmCwRa+9KVbCIXMCG7fvj309a2qO36inPJRExdfvJ1nn30a\ngKGhQTo6Oq3zJicnl2TURC1EhCQQCAR1iOdiFQ0NJUops1NBQStQ0E23iOauII9++7/4TeQ/+eAH\nP4TNZuNTn7qJz3zmk9jtDlpaWrjhhr/k+ef/UHP8xJlnbrF+Pv/8bezcuYONGzezZcvZPPPMk9x4\n4/8A4BOf+BsAstksoVDImoO01IjxE6cp4l5fnoh7fWmxP7yXZ8efsaamlvA7mnjLhj+xfj6Z9zqT\njXLPobtxKS7rmNvm5u2brjuh64bDIT796b/i9tu/X3W/Je6554c4HBLXXnv8nyXGTwgEAsFxkFEz\nNR/OmVMYIUWzUeySveJYLDdDPGc2NOS0HKOJkUVft7W1jWuueTM//OGdNV+fmprkyScf573vfe/i\nF90gQpAEAoGgDhk1U/u4lkHV1ZO8GpN4IVE1JNChOHly7AkKWoHhxDGeGX963mvU20d17bVv4/rr\n31PztY6OTr7ylW/gcDhqvr4UCEESCASCOuS0nPX/ByP7rQYH3dArDFdPJsk6nzuZmuR3ww8TzoSI\nZEOk8rWjuKya5d7DP13OJR43QpAEAoGgDhk1Q0bN8P/+8H/59u5v8oMD38cwDOyyg8nU+ClZU6qO\nl54kSQzHjzEwM4BNtnMgsp/fHXu4alzG7umdRLNRnh1/+pQ7TsxFCJJAIBDUIVNI88z4U0RzplvD\nrukdRHNRZEkmcYpMVhOF+p9rV+yk1RSyJPPC1HMMxQfZE9pVcc5MLopdsbM3tIeHBn9DQSss95Ib\nRgiSQCAQ1CGjZdgx9QKKpHD1ylcBMJoYBiA1jzAsJ4n8/N18pU28TsWJLMmMJUcrXi+lGhVZYSw5\nwi8H7uOFyeeWZ7GLRAiSQCAQ1EDTNTKFNBPpCbq83WwIbgJgJGkKUrZOw8NyklEzFPTa/nb1KHXf\ngWkJFC8TNEmSiWaj7Jx6kf7o4SVb5/EiBEkgEAhqkFZThDIhVL1Al7ebFb6VAByNHQUgqy1OGJaC\nmWwUaZGP7ZSatupIyXwCVZ9N0cmSjE22ocg2BuODS7nU40IIkkAgENQgnAkTypgWPF3ebjx2D2ua\n1jIQO0IkGz4lEVI4G6rw1WsEWZKZKDZgjKfH6r5/Kj1xwus7UYQgCQQCQQ1i+bglSJ0e04x0W9dF\nAOwN7T4lfnbpQu2NuvNhl+1WHWkmO1PTCgkgmU9abe6nCiFIAoFAUINMwUzZAbS72wHo9a0AIJwN\no2qFk/4AL7l8L5bB+NFi/aj+3ikDTvl4diFIAoFAUIO0miacDSMhEXS1ANBS/P9wJowBpE6yhdDx\nmrpmChnuPfIzwkWBrYVDcRDJ1n/9ZCAESSAQCGqQUdNEMiGanUFssjkYwW3z4FJcRLJh7IqdSDZ8\nUtd0vI0UiqyQyMer5jiVI0syyVPo0QdCkASClxQjxT0wguVnJjtDLB+j1d1qHZMkiRZ3K5FsBBmZ\n8cTJGVxXojDHdaEW8w1wmOuBN5ds4eQ3apSzoCClUik+8pGP8O53v5vrrruOxx9/nAMHDnDddddx\n3XXX8dnPfvZkrFMgEACPjTxyykw9/7sxljIbAVpcrRXHW1ytFPQ8yUKS0dTiXbVPBNWY31VhMjXB\nzU/exI6pF4/r+unjrFEtFQsK0s9//nPWrFnDnXfeyVe/+lVuueUWbrnlFm666Sbuvvtukskkjz76\n6MlYq0Dw35qMmiGcCdX1MhMsHcl8kpnMDAB+R+X8nlIdKZINk8gnKupII4lhYrmZZWt2yGtq2T9X\nR0t7w7vJqGn+Y/8dNaOp5yf/wPf2fofxVO3ILqud5hFSMBhkZsb8xcTjcZqbmxkdHWXr1q0AXH31\n1Tz11FPLu0qBQMBkehKXzU0kGznVS3nZEM6EiWYjDMYH+dGBuyyz0ZHEMXK62dbttfsq3lOKmCLZ\nMHbZznB8CICd0zv4zeCvuPfwT7lz3x3WBtqlQjd0NMMUpMdGHuHvfv+3PD/5h8r7KatpDSWGqq7x\n68EH2B3axc8O/6TmZyRr2BKdzIh8wRHmb3jDG/jZz37Ga17zGuLxOLfddhuf//znrddbW1uZnp6e\n9xrBoAebbf7cZaPMN23w5Ya415cnx3uvg4Usbc0BFK/6kvm+Tud1qrrKfTt+i6qpOG1OJKdKXJli\nQ+sG9iTTaIoZYbT6m/H7Z6ezrgh2A5DUYwSaPKhOM801rY3QEpi938HcAS5q37pk682qWbxeB7Ik\n85vBB9AMjR8fupsr1m63akOh7JR1/kRuhPP8Z1s/h9IhosU/ZkaTw3h9jqo9SQWtQEurx7rerold\n7Jnaw/Vbr684b7l+rwsK0n333UdPTw/f+c53OHDgAB/+8Ifx+2cX08gE9Gh0afKSL4eRyI0i7vXl\nyYnc6/DkJIlEllFlmj776f99ne6/1+cmniUaSyJLMilM8Xlo/6M8YXuGcCZMJGFmhmyak0RidhOs\n2zCffxOxKRKJLIdyR7ms7zKGpitdEEIzgxxtHsOhOHEoJz7ULpGPE09kODJz2EoJqrrKoYkBVvhX\n8vzkH+iP9uNS3GS1DLvGd3N+y8V47B4Adk3sta6V1/L0Tw7R5e2u+IysluXI6IiVlnxq4DkimQiH\nh4/R7AoCJ/57PaER5i+88AKXX345AJs3byaXyxGNRq3XJycn6ejoOO7FCQSCxii5PI8kh/nt0IOn\n3Syblxr9M0eqIoSMmiaSjSBJEsmim3d1yq64F6m4ZyeSifC7o79DnvM4dchO7j38U3ZMvrAk6y25\nNOyPmMJyafdlAByN9RPPx/npoXuQkHjjujfR4+tlINbPZ5+8yXKbGE+adaPzOy4A4FiNlJ5DdjBR\nPG88OUY0E8WhODgyc3KMVxcUpFWrVrFz504ARkdH8Xq9rFu3jueeM+3KH3zwQa644orlXaVAILDy\n+xk1w9FYP5GMqCUdL4Oxowtuai297rV7K47bFQc+u4+ZnBlBORQHRyJHqlqqJUmiYKh1GwgWS7qQ\nwibZOBw9hMfm4aqVVwOm2euOqefJ63nevP6tXNK9nfdvuRGf3YeBwf7wPgAmil51l/VeCcC+8F5z\n8m2ZG7jpezfBRGqC3x17GLtiRnzT6fnLMkvFgim7d7zjHdx00028613vQlVVPve5z9He3s7NN9+M\nruucc845bN++/WSsVSD4b4thGMXBa+ZDzyE7GUuN0uZpAyCWm6GgqdbPLycORw+xIbhxSa+5Y/pF\na7NrPVJ1IiSAJkfAipDAHIyXRas6T5EUpjNTJPKJqm69xZJWUyCZjt99TatodbXR5AhwND6AgVk6\nOaPlLAACzgAfO/8T/OMzn6d/5jBXrLiKidQ4AWczq5pW0+HpZE9oF59+7K+s971lw5/Q4mplODHE\naHLEuiaYxqupQqpKnJeaBQXJ6/Xy1a9+ter4XXfdtSwLEggE1aTVNAVNxVlsDpIkiUTe/Mu2oBX4\nzeCvUHWV689496lc5pJjGAaPjfyOVlcbLe6WJbnmUGyIcDpk/fVfj1QhhV12VNR/sloWl+KiydnE\nWGqUrJrFZXPNcxVwKE72h/dyUfclJ7Tugq6SzCfQ0Wl2NiNJEmsCa9k5/SK7QztpcjRZ6UQwuwGD\nzhYGYgMcjBwgno+xKbgZgFf3vZZfDNxHouhttz+yF+mIxPu23IAkyRViBObcpP8cuJ8rV1y9rI0q\nCwqSQCA49YQyoaqU0FBsiHTh14SzYXJqjpyeI6NmcNvcp2iVS0cyn2Q6M8XOqR0YwOGZg1zouriu\nU/ViOBjdt6AYASQLSSsi0AyNs1u30unt4sGhX9PkaALMRoOFBAlgOjO14DkLkVOzVpow4GwGYENw\nIzunzU2w65s3VjmB9zWtYuf0i3x7920oksKVK8w03/md29jafi4HIvuYzkzznwP3sz+8l3QhbTVB\nzCWVzRPJhIANJ3wv9RDWQQLBS4BoNlKVYlINlfHUOHktjyRJ2GU7I4ljFeecrNz/UvP0+JP817Hf\nEsmGccgOwpkw9x7+KX8Yf4YnRh8/oWsvNAK8RKqQwldM13V7u9nWfRErm/oIOJvxOwIA87pnlxPP\nNXZe7feakXA0GyE2R5Au7LqYTcHNeLROtsnvrXrvCv9K65/P67iATS2brZ9tso0tbVu5euWreM2q\nP8LAYGieIX2h0QANNFWfEEKQBIKXAKV6xnwoksJIYtbKxjAMftF/LwWtwHR6moI2v+3M6URp02lJ\nhCdTE0SyEXaHdpmziNTjn0WUbOC7zGt5CnreipCCztlU2OW9V+K1mccbFaRUIXlc37+ma/z08I8p\naAXC2VCVICmSwns3fphXRf+DxND6qvev9PVZ/3xJd/1af1txvEY0V79RJps88db1hRApO4HgJUCm\nwQfw0dgAq2ZWoch2FElGMzR+O/QgE+lx7LKNt296J07FucyrPTGyapZ4LoajbJ2SJOGQzQeiLMkM\nzBzhzLYti752Rs2Q13I4lfnTbLMNDV40Q6O1rFmky9tF0G3uySkJxMJIhDLTdPt6FrXeo/EBdF3j\nybHHyao5K2XXXBQkgHTcjU1SSCdsFPIKdsdsc8XqwBou6rqEzS1nsDqwpu7nlAQ3Oo8LSCa1/IIk\nIiSB4CVAo+OybbKN5yef49dH/5PHRx7FqTiZzkyhSAqqrnF0pn+ZV3ri9M8cxjZnzHZ57UiWZKuF\nebGEMyGrU3E+Zlu+fah6gR5vb8Xrm4KbkZB4evz3DVnrOBQH05nFp08jmQh2xcGR6BHsit0aRd7m\nnhXIVMyNYtdRbDqR8aaK99tkG3+66Z1sbT933s8pNUNEs9G65+TSQpAEAgGLG8wWz8dx29wU9MoU\nkSzJTKYml3ppS85EenLB5oXjrY1FspEKN4V6lLd822R7VaF/XfMGLu6+lFAmxMDMEcB0TRhN1nf/\nzswzi6gesZwpEHbFjmEYjCSHCbpaKlrR81kz0SXLBsmZ42toaXIGkCV53pSdml/+hJoQJIHgJUBm\nES7M8z1wI7mTO1DueJhOL9yRFs/PzDtsrh75Bl24S3Umn92Hq0Z6r8nRZO35ORo/ylhijP/77D/w\nL89/md3TO2teczG/wxIzZSnBmVyUVCHFCt/KinPUwqxQpOMLp2OzagZdp6JBQZZkAs7meVN2amFp\n/EjnQwiSQHCak9fySzbOINNg6u9E2Dm9g8FFOl3rhs5g7CjJfNLaGzMfimRjMrX4tF2j32O5S0Ot\nNnqv3Utf0yoABmMD3LHjDks8npt8lqOx/qpU3mIjpLyWr3BRKA1nXOmvFCRNnX2MZ9NO8loeo46t\nVEHLc37nNvY/182ex9dWvNbmaiOej9f9jrTC8suFECSB4DQnWUg2ZGLcCDk1u2TXqoWqq+yYfJ7D\nM4cW9b49od08Mfo4h6IHG0qp2WRbwx1u5ZTPEJrJRvnt0G8sr7dyylN2tSKkFncbDsVBp6eLwzOH\nGIoNsa55Ax2eTvaG9/D1Hf/Kt3bdViFKGW1xnYHHEkMV9a6RpClIcyMkTZt9jOczdgxdYkvbOTV/\nz4ps57z2C0mH2ohHvBVi1u7pBOpHqCJCEggExLIzDT2kG0HV1WUbHgewZ3o3OgaTqYlFCd9QbJCC\nnueFyeca3vzaSCv8XEopu6ya5dYdX+HXgw/wf5/9P9y281YmyiKuWDEyaXIGcNfYKNrkaMLA4IyW\nM61j65s38OZ1b8UmmSm0gdgR/vbxT1obV7OLnMY6kRyv2AxdipB650ZIZZGLrksYyVZWB9aQ16t/\nzwFngIEBGTteJMkgNDbbBNHhMU2ya23izWdt6JqIkASC//Yk1cSCvmuNYrB8Y6rzWp4d08+jSAp5\nLcfRmcbSdrqhE85Oo0jKosY0pI8j/ZjTzQhpX3gPM7kZq5uvf+Yw39r1dasRZHa/T6BmhOSyubDL\nds4qaz0/s/UsNrVs5n9d8ln+etvfWsefHnsSgEwhsyiH9rldeSPJkWJDQ6Wf3IsPb2LkkCkmNptG\nId5B0BXEJlX/EeN3NHHkiIzbbkeWDbKp2ZpTu9u8xlSNCGlm2odsr/bqW2qEIAkEpzk5dekiGrti\nn7dwfSL0Rw8DpnWNTbZzKNRY2u5Y/BiavviHXVptvPOwRL74XZailk9c8CnevvE62txm/WQsOQqY\nzQReuxe7bMdVx4rJY3OzJrCOPz/rA/zvK/43vb4VgPnQ7/J2c/1m01dwNDmCbujoGA3vWypoBSJl\n019VXSVVSNLmqjTPTced7H5sA0//8mxCYwEkCYx0C7Ik0+SsbAE3DAOf3MzEhGTtRStkZ//Q6fJ2\nATBcYyxFasaFLC+zTQNCkASC055csfagGzqFshpIicnUBN/Y8TX+c+D+BdNkiqSQXEQL+WIYS49X\npNsaHY+xa/pF7A1ERoZh8MuB+/n3PbejGzqZ47iPvJ4jq2Y5ENlPt7ebDk8nF3dfyqv6XguY4mEY\npnAEnM0YhoGjju+d22am8ra0nc3KwMqq18/v3Ma2zotIq2kmUxPYZbs1k2g+ptPT/OTQjyrmK1ld\nf3Mcw6OTs6LzzC+3kMsb+DWz2aKUgiuhGirO6FZAwqE4MYBCblaQAs5mery9HI4eqnLCyCQX9utb\nCoQgCQSnOdniX/W/6L+XzzzxqSovtmfGn2IgdoTfDT9c8Vd1PXInYLszH+UdYdCYrc4fxp8hlAkt\neJ5u6Nx75Kc8Mvwwe8O7ORYfInsctbCcVmBveDeaoXFO+3nW8VJ0M5ocMd0c9DzNziCaoVnCM5dG\nTGxX+k3rnpHkCLIkL/idDMaO8pvBByjohYr6UWkWlm/OKIzo5KxAZZIuMpE2jIzpInFW69aKDdUd\n7k4mRj0oStGBQtfI5ypTwWe3n4NmaPxh4mkMw+Bg5ABT6UkyyZPj7iEESSA4zSkV4h8ffRSAvaHd\nPDP+lBUNHYjut86tNQW06no1it1LQWHOdXNqbsEheMPJ4YbqY0+PP8nvx2ZNVXdOv0hByzfkkmCt\nTyug6QUOR81U4pmts/WfTk8XNtnOUHywon6kGVrNeUgArjpCVU7J3HS02CGXXMDYdTh+rGadqX6E\nVDR/XWvWm1LTrRQKBskktLhbeM2q11l1Ma8SZHzcTKl67V4MDPLZyujv0u7LcCku7uv/OTc/+Rm+\nvfs2vrvndjLJpWmqWQghSALBaU5Oy1VERT85/CN+fOhu+meOMJGaYCo9iaf4cCx3az4SPcyR6GFe\nmHyOH+z/Pncf+AHpQqqi9Xkpyc6pdTkUx7x7hcxppfPXVHZO7+CxkUf4r2MP4ZAd/K+LP4vX7uWF\nqefIafmGLZXATH1qhs5QfBCX4qLL2229psgK6wLrmUiNWyPC290dGIaB2147EnLZFo4aerw9yMhW\nh1xqgbpXpI5TQr0IKTJhuo73rDcFaWaqCZtNYmzMFJ5e/wprtlH4WCeyPFvjcyqOihoSgM/h4/oz\n3k2Ptxd/ccRGKDNFSNmz4L0uBcJcVSA4zUkVkgzGB6qO/3LgPuth85YNb+PHB+/mxannec2qP8Kh\nOPnmrlur3rOqaTVrAmurjp8ouqFT0AsV7emKrBDKTLO2eV3N90SzUVRdxaHU3t+S03L8x747rHvc\n0LyRoKuFCzsv5pGR/6J/5jAzuZmqqKEe8XycrJplOjPFpuDmqvbyM1rP5GB0Pw8c/SVgflflpq5z\naWQOkl1x0OZpZ6LYBr+QgNZreph1jpgbIZk/d66KoNg0IlMeFEVjZkYCDByKA7/dR7KQQgp1IJfd\nstvmYSafBs1B1ojhsXvRDZ0zW7dY0eOh6EG+tesbTLgepS119oL3e6KICEkgOI2J5WZIq5mKPTIl\nRpLDjCZHWOlfxdb2c3nt6j8mVUjx88M/4fdzZgaVzEHHkqPk9aUfQ5FVszVTTWPzFPFHkyPY6zzs\ndUPnP/Z9r2JyaSn9tSG4CYDJ9GRV3Wo+Evk4AzHTd25toFokz+/YRqeny/q517cCGbnuHrAmR3ND\nKcMOTydZLUOikCAzT8dkupCu2iM2nhxjT2i3FSH7HJURUiJiRsYubx5PIM1MxIZhQCxmRkLT03Bs\nxyayGZlMtHLirsvmxo6DN6wiOqHbAAAgAElEQVR8B+ua17Ot80I0o7LbcW1gHTYcjNgfZdD5y4Zq\nlCeCECSB4DRmMDaIQ3ZYLs/ntp/Ha1e9znr93Wf+Dz563v9EkRQu7LoIgB3TL/LLgfusc7q9Pbz3\nrPchS7IpSMuQssuomZodfqHMFKl87TRVLDdTNeG0xItTz1upsxItrlZgdnZPODNNdhHuBxk1y/7w\nPgDOaD2r6nWP3cNHzvs4K/2rOLf9fGyyDbtir7vGFlewIUHqLDogTKUnKej5ut9/KDNdEbXphs4/\nPf9F7th7O4eKdcK5EVI26USxq8iyga85Qy4nkUrB2JiMpsELLygkJ7sZfu5snPbKhNi65nVc0HM+\nqYSdV616Lb2+FVUzm2yyjQ62kJXD7PD+M4+NPLLg/Z4IImUnEJzGRLJhJEliIjWOU3HyZ2e8F0mS\n2NxyJgW9wLrm2aFsc4vvV624mmvWXWv93OnpYiw1Sn6RFjaNEM/FakYSdtnB/shethXFspxorvao\ng4KWtx5879h0PT2+Xh4beYTzO7cBEHQFUSSF6UxoUd58OTXLQOwITY4A3d7ac4ncNg8fO++vLBGa\nzyHDY/Pid/gXFPiOMkFa4V9JupCq2ABcGjsfzVU6cpSaLwDGU+P0eHsJuoIV186mHdgdpig2NecZ\nB0IhCbfb4NAhielpiQ5vK0PxBNKc3gxZUpDtEC82/vkc/pr3e0buXSC78Kvref2aa+a91xNFCJJA\ncBqTyMdRdZXpzBQr/X3Wg7Jk7DmXd25+Fy9MPs91m6+3itIl2txtjKfGiDY8VK5xUmqyok25hCRJ\nHIsP1RSkmWztdfzn0V8wmhxhQ/NGLuy6GDDvq4QsybS62whlpi2Ln0ZI5OPE83E2NG+sG/WU1lxi\nPkFSZIXXr30j9xy8G6jfAl6K6EKZaeySnWg2SnOZsNxz4Iec3b61au/PQGx2dpXf0cT1Z7y7qu6V\nz9ixO800W6DVjG7CYYnVqw3+8AeFfF7CZ/fR5++jHrmcWW+SJAmv3VsRdeqahD91LtttW1FVeVFO\nGseDECSB4DQmlo8xnZ5CN/SKrrB6XNB5IRd0XljzNb/D7MiKZCIYhjHvQ3mxzBclRLIRYtkZAq7Z\nKaf90cOoet6y7jkWH6LV3YrX7uNQ9CAyMu856311r9nqamMqPclw/FjDaxwpzipqcbc2/B57nU2x\nJQLOZnxFKx/d0HEodjKFTMVG39IfBsl8AkVWiBdmOyazapacnmPn9I6qDrrJYpr2Exd8mlZ3W81J\nv7mMHbfPrDsFg7OCBKavncMBINHkDNS9h2yZDvocfrKZ2QOZlGnWerIQNSSB4DQlXUiTLWSYSJsP\npi7PwoI0H03FB2MsP1M1vO9EmS915lAc7Antrji2N7y3zEfuCP/64j9z94G7yKgZptKTrG1eN+/G\n00DxARvOTDfsCDGSKAqSq3FBmju5thYll2yv3cfbNl5XJfT+otCUOuViZVNZR5LD2CU7iqRUbZqd\nSI/jsXnp9vbUFKNCXkHXFOxOFcOAllazqSQcNh/rcoNPdzNCKq51TsdiIuLFZlt+D7sSQpAEgtOU\nidQ4Nnl2bHUjEdJ8lAQpnos1PKiuURaq5RyeOUSmYJ6TyCeYKhtB/sDALwDYH9lr7aPq89dOSZYo\nFfezWpbhxMJRkmEYDMVNs9fWRQhSLSGYS7unE93QWelfiUNxEHA2V7xuVxw4FafVKRcu61SbTk9Z\nqc7y9GBeyxPOhOnydteMZDVDRc6ZomxzqOi6THNARpYNK0JqlFzZvwpzW+izaQcNmq8vCSJlJxCc\npsRyMyiysnSCVIwqkoUkqUK64f07jbCQg7iExItTz1PQ8wwnjuFQnByKHmQkMcxQYtA67+FjDwHm\nHqD5KP0lnywkG2pFnkxNWHOPFhMhOeSFBWl9YD07Zp6mr9UU0WZXC7FcDJ/DTyw3g02y4Xf4rQhp\nJhdB0zUUWbHMXOcylhzFwKDHV7v5osXZxha32bBid6r0bj7GWZ51BIOLF6R8fvb8oKsFVVct94x8\n5uQ4NJQQEZJAcJpSMkGdSI3jtfuq0imLpamslpFeYoPVdJ3W7hKSJLE/speB2AC6YWAYBt/a9Q0e\nOGpGR5d2XwbA0Vg/EhJry7oH55LVspaYJvIJZup065UznBy2RLOprNlD07V505f1jFXL8Tq8/OmZ\nf2r9wdDnX4ksybxt459y1cqrcSh2fHY/qXwS3dAxDBhOHCOaiRCp47x+rCjS9SLFVk8ryaQpJIpN\nw9WUZdsWP8GgQSIhVUQ9C1F+boe7A82YbWUXgiQQCABI5RPktBzhbPiEoyOYLa6bGzSXbiaSYRhW\nyu4nh37E9/f+e03Bs8sOlOIE1PIhcFvbz+Xa9X9iFfX7mlbVrR+peoGrVlyNu+iSkCwkiOUWNnFN\nFZJlU2C91rpXBVazte3cqg2hs2tu7IHc19xndcCta97Ama1nIUsyG4ObCLpa8Tn86OikC2lsso2R\nxDGOxI7UTQkei5uehH11IkWvzWttfrU7dDpaZHq7bbS2mnvBIpHGo6R8WT+Kx+7BIc86UOQzZqSU\nTjjp39GL1rh14HEhBEkgOMXsDe2uucEyVRxbANC9BIJUehCnC2kKizAlXYiMmkE1VGK5GE+PP8mu\n0A4ePvbbed8zGDPrOX+8+g28+4w/R5EVrl3/Ni7ovJB3bLq+7vu6vT1satlstYMn8gnUeTablkgV\nkiQLSRyyw+qAy+t5Luy6iAu6tmGX7TWdJhy2xbc5y5LMRd2XWD+3ulvx20spRrOONBQfqvAdLEc3\ndPpj/fjsvpr1Lt3Q8Tl8luh0BQJcsHILNhu0tZmCFI8vRpAkyvc0t5V1IRZypiAfeXEFux/byNEj\nCxvKnghCkASCU8zByAFenHqh4thEcpx4bsbqsCu3tKlFQS8sWBOSJRmX4iKjpinoS+fWkChGKAci\n+6xjx+o8bEsMFhsMNreeaRXtz+04j3dufpe1kXQumqFZPnxX9r7C/Ox8Ah3Dqs/UI5lPkiqk8JZZ\n7zQ7m/E7mpAlmXdsur7KdVwzNFzKwiMmFqLZGbTShNFih51maNb3Vo5u6Pzk0I9I5ONsajmjZkND\nXs/T5m5naqooSK1ezu4wvee6ukxRLUVPjaCqRmXarvj965qEWjAj2kzCjJqaAssbIglBEghOIRk1\nQzgbpn/mkGW9Mxgf5DeDD6DItoYbGmyyjSt6r5q3e07VVNw2jylI2tK1fc/kZ5CReWzkESQk7LLD\nmpJaj8H4UZyKs65jQi10Q7dqS82uIA7ZQSxvuhuE68xUSuTj6IZOKp8ilU9W7PXpcM8Kn12xV5nO\narpGk71yc/Hx0OHpIOgyfeTKU5W1NhLvC+/h2YmnATijpdreCEBGwu9oYnLSFJ2mptnwpqurFCEt\nZoVSxV6kVYE15LU8+awdXTMlwpyHZNDStvQ+iOUIQRIITiFDsaPYZTvpQoajRUfvw5GDSMV6RMlU\ntTReuh5NjgBt7jYcdWoSiqSwpWMrLpurmGJbur0laTXNgcg+JtMTXNR1Cee0n0tezzOZnKx5fqqQ\nYio9yaqm1VXOA/PR4mqxnAIkSaLd00EkE0ZGJl1IYxgGT48/ZZ2vGzr3H7mXHx24i5yWRTVUK22p\nGRrd/u6q65eLqGZoeB3ehtdXjyZHwJreOp2eqnve3tAe7tj7HQCu6L2Kre3n1DzPa/dik21MT5uC\n1FzWZd7TY65/MSk7m63y/HZ3OzbZRjruRCnuQcqmnDg9eWz25R1jLgRJIDiFTKdNQ02bbONI9DCx\n3AxjqTFShRS/HfoNI4lhAs7mulNLSzQ5mpAkqSriKD1g1zWv56Kui/HaveS03JI2NWQLGfYVjVAv\n7r7UcuUeitUeFngwYhqFrqnhuD0fTY5Kt4EeXy9ZLUtGTZNWU+Y02endVqQ5FBskp+Uo6AXLDqfk\n96cZGqubKiOidndnRS1KluS6Ar8YFFmht/idlEdIc3lmwhTTs1q38Ob1b60r1h3FaLnU3t3cPCui\nfX2LFyRFgVRZD4okSQSdQTJJJ7JiYBhmhOTyLs8crXKEIAkEp5DyB9R4cpSfH/4pEvD70cf49eAD\npNWUNV57PkrOBed2nF/xUFUNlbyWt/b1lB7q8WzjHnALkdNzHIjsx2f3scK/khW++QXphannADin\n/dxFfc5ca53S9xLOhtkb3sNgbBADg6mUGZlNpMetulBpcm3pGh6bp8qXLeAMIJfVbGyS0nCX3UK0\nulppdjbXjZAMw2AwdpSgs4X/seWGutdRdZW+orhFo+ZaW1pmo5b16w0UxVhUDUmSIJutPL/F3Uom\naX4/hZwNTVUsi6LlRAiSQHAK0A2dR4d/Ryw/Y3XYSZJs/VV8NGam796+8Tresv5P5r1WXsuzLmDW\nVto97dbguLyW541r38Sa5jVWDaokXLHC0hmszmSiJPJxen3m/pseXy8SEsdi1Q4Kqq5yOHqIHm9v\n3eaFWhiGUTULqGQYGs6EccgOFFnBoTjYX2yuiJbt8UlaLd/mNWo1gNgVO277bCTqsrmXzO/Pa/fR\n7AwSL9a05hLKTJNWU6wOrJn3Ou3udmse1MyMhCQZBMoCx0AAAgGDSKSyc24hsnMM4C/quoR4yKyf\nmfUjcAlBEghenjwx+hhHYwM8PPQQf/v4J/nO7m9Zw9l0Q+dYYogOTycXd19qFcTr4bG7Cbpnzwk6\ngzgVJ5tbzqDL282r+l5rPVhLtjaLccleiMmiDVDAaT7AHIqDDk8nI/GRqhlJE6lxNENjVWB1w9c3\nDB3VUC3PuBLrgxsBc6xDOQOxIwzFhyqikZQ1cdVX8f9z8dpma0auebz0+vslHnpI4cCBxgTL7/DT\n5AxgYFjjyMsZS5mDDEvRZT3Km1vicQmPB5zO2e/YZoOeHoNUSlpUY0O5nx1APuNkhW2r2Q0YMb8T\nb6DxUR/HixAkgeAUMBgbRJZk9hfrKfsje/ndsYcBc+xATsvVnGpaIq/lyGt5erw9/PGaN1a8FnS3\n8Ia1b+LyFVdWva8kbouZtDofhmFYD9PyGk+ru42smq2qVZV85xZ68JazqeUMzu+4gKCzchZQaa/P\nSHK44rhNtvPg4K+sxhAoj5DMh+vcQXclfGUuDm6l9ohyVYUnnrAxPi6zc2ft8etz8Tv81l6kuSaq\ngGVr1F5sfihH083GAt3QCbjM7zifh0RCwus1sM0xgFu1yozAxsZqP94Nw6wZqWUd3HOdHY4elWn3\nN+O1+4hMmt9Zc3u1kC41QpAEgpNMXsuT08yR3xOpcdrcbdhlB89NPotu6NZwuvM6Lqh7jfXBjWh6\ngStXXl0VQW3vubwqvVWitNEyUVhUX3BdQpmQ1XJdPuKgpbimcmucY/EhHhk2RXflPPN5yslpOc5q\n28J5nRdUjYJY5V9NwNnMcHyoKhKb64BQqiF57T40QyPoqjRALVFuK1Sevivn0CEJvZh1SyQqnQ7q\n0eXtttKFtQSpFM21F2cnlWNTbKi6WQssOb5PTEhkMhI+H9jnlLnWrCkJUnX09sILMjff7OSzn3Xx\nr//qsIRoboQUDktIkuk6kQ61ARBon3+v11IgBEkgOMnEc3EMwyCcCVHQ8/T5V3Nm61nM5KJ8+rG/\nYl94Dz2+3qp9MWB2h+W1PBuDmzivc9uiB6Z1e3sBiOVq1zIWy7HEoOURF3BUC1LJ2TqjZvjmzlsJ\nZ8Nc2nOZ1Q1Yz7Kn9Nq57edVDRosocgKK/19JAoJ4vn5Iz4rZefwmY0BdSx5gq5ma02uOhHS8LCM\nUgyMZFlidHThtF3A2UxTMaWZqBMhychVxq8FvcBlPVewrnk9Ntlm1b6ef958dNeKkNavN3+vo6OV\nj/cjR2R++EM7qgq9vTpjYzJPPGHeyNwaUihk3pPP7icy6cPTlMHhWmbfIIQgCQQnnVBmGofisDa9\ndvt6ePO6t1ht0A7ZwY1bP1yz7VfTVXRDp9PTVWFP0yidXrMOky6kFnToboSh2CCx4gTaygjJfLCW\nGgv2hfeQ1/Nc2fsK/mTDn1o1rVJHoGZoVe4RuqFzbsf5835+yVIpnJnf8TuZn21qaHIE6nrIdft6\nrU3DrhoRkq7D+Pjs78VmoyFBkiWZVpcZacyNkDJqhonUOC3u1qrNshKm8/lVK6/mLev/xPp3Ytcu\n87yWFgP7nL1Bvb0GbrdRESFNT0t873t2JAluvDHP+99vftfHjpnXK4+QJiYkq218akoinZZp742j\n6zqdJziTayGEIAkEJ5lkIYEsyVbtpcfbQ5MzwPu3fJBXrHglHzr3Y1atYy59TasJulpq7vJvhFJK\nKKtlmcku7JI9H5OpSaK5qNUgUV5DKqURS7WRkjXSxd2XWucU9AIXdV1MQS/Q6mqtam9vdbUtOLG1\n1Kk3k4uyO7ST3dM7a56XKiRRJAWX4qqbrgOz2aHV3Wqmx9zVXYDJZHWKbmhItlJ481GKGmNlI+QN\nw+AX/feS1bJc2Fk95t1r91q/61LjSqGA5dLQ0mLgntN74XYbdHYahEIy3/62nWQSHnrIRiYj8da3\nqqxebdDUBD7frGjl86AVg9U9e2QrDTgwYErEilU5eny9tHoaH91xPAhBEghOErqhk9fy1l/rE0VB\n6iqmr1w2F29c92ZrY2ktgq4WXrv6j457DaUx4jkt19DYhnrktTz9M4dN255sCJtsrxiP0enpwqk4\nGYj1M5Ga4EBkH6uaVtNZ5jjhtXnY2n4u3d4eXr3qjwg6Z2thuqGzsmnhxodSTWVPaDff2/tdvrfv\nuzVTkalCCq/diyRJVi2nHuubNyFLCu3e6gaDqSmpqmaTTkuEFx7JZLXDTxdFGmB/ZB/PTjxNj6+X\nq1a+suo9vhrpynR6dipsMGjgmRPIOZ2zG2QPHlS46y47O3bIdHXpXHzxbIq0p0cnGpXJZMy9SIOD\nEskkHDs2Gy0NDZmfc8EZwUV1Rh4vQpAEgpOAbujcd+RnPNj/IGNJc5T2eGoMj81Lk6MJTVfnraeA\nuYen3dNRNZF0MTQX35sppK0JroslXUjzg33fY2DmSLEWFqbV1VqRYrTJNja2bmQqPcn9/T8H4BVz\nHrjtnk4UWeH1a9+Ix+6h3dNh7clSZIVz2+dP14GZ7gTYFdphHYvOifx0QyeRj1tC5KkTfZbY0raF\nLm9XzZRpPC5Z9aMSDgeMjy+4VHwOP82uYEWb+u9HHwPguk1/VmXuCtXuFGDuPyo5fQeDOm53ZcrO\n7Ta46iqVt761QCBgcOiQgq5LbNumUb6tqrvbfN/kpITNZkZDu3fL2GyzJ42NSdjtBiu6T85cJCFI\nAsFJ4EB4HzO5GYZmhshqWSZTE4QzYXp8PWiGxvbeKyoiBDBTWuVjKTRdpWsB1++FCDhMQUqrGavz\nrB47pl7kSPRQ1fE9oV0osg0dg7SaJqtlaHW3VZ23pehAfSh6gDZ3O2e1nm29pht61cbYXv8KtOL9\ntrqq6ym16C02aZRTijxLTKUnyet5eny9aLpW0XxRC0VWeN2a19d8LVXjK5MkmGlgn7FTcdLp6SKR\nj5MupMioGQ5FD7LSv4oeX/V9QGXXX4l43OyCUxSDQMCoith8PvB4YPt2jUsvnf3356yzKiPHksND\nyfFheFji4MHZ71zTTLHq6jKQT5JSCEESCE4CkVwERVKwK3YUyca9R36KgcEVvVfhsXvY1LKZXv8K\nK91kGAabW86oiJo8Dq/lwnC8KLJiOX5Ppmubn5Y4Ghvg0ZFHqkRptBjhAVbLd5urWpC2r9xOc3Hv\n0JvXVXqzqbrKhuLG1hJOxWmNh2g0Cmxxt1rD/F658tUAVrNIidLspdVNa8jrecvodD7q+cilUrUb\nGBbahHr0qMSRnd04EqajxmR6gpHEMQwM1teZjpvXcjVto9JpiYkJUyjsdgnnnP4Mv9+w6kGveIXG\nq1+t8qpXqbS3V0ZSwWDlMD+bTaoQnqkpCU2TLMPWk0F1jCgQCJaccmeEP0w8w+GZQ2xuOZMzW7dY\nbc3nd1zAYOwoGTVNXs+zpe1shuJHUYsbI+u1Py8Wn91HRk2TyMeI5WaqHv6qrvLw0INEsmHssp2J\n9KTlipDKpwhnQpbpaKmtu8VdXex2KA4+cu7Hiefj9DVVjuJudbfVFNeAM8B0etpKLS6Ey+big2d/\nCLtix2Vz81/Dv7VmLZUYKo4DX920BptsWzBlNx+ZTG1BWihCmpqSGD3SjMe2EWwwlhyzDF/rjSm3\nyTZa3NUuHf39Eqoq0dur4XBQFb2YxwzATMW97nW127XnRkhzKTVOlEZanAwWFKQf//jH3H///dbP\ne/bs4Yc//CGf+9znANi0aRN///d/v2wLFAheDjw/8SxD8SEuWX0hvxi4F6fi5G3F9ueSjY0iK6xt\nXsve0B68Ng8BZzM+e5PVfOCv4y6wWHwOP6OJYeyyg8HYIOd0VJqc7g3tYTQ5ao0bj5S1VB+MHsAu\nz+59KnXqzU03lmh2BWl2BauO15qECmZKcTw51vDG2YCzmS5vlzUFtsPTyZGZI6i6atVkptNTSEh0\neDpx2ByLGnkxl3qbYONxsyW8XmorHpdwORTcsTMhCP0zRyzLpZVNtQUp4GyuudZDh8zfS0+PgcNR\nLRamIC3cij43QppL6XhpLPrJYMHfzNvf/nbuvPNO7rzzTj760Y9y7bXXcsstt3DTTTdx9913k0wm\nefTRR0/GWgWClySTqUm+sfNr/GLgXr753DfJqBm2dV5kPajLW7w3NG8kkY9bg+hKNQQJmUt7LluS\n9TQ5/OT1PLqh1+y0G0kcwybbrIdhOBsikY9zMLKfw9EDFYajpfc3z9NKXQt/nem2K/x9OG3Oij1N\n899LE1pZV92m4GYKer4iSopkwzS7giiyglM+sXES9SIkVYXoPE2LsZiEItsIsAKb5GBXaAeT6Qku\n7b6sbjTYWWcG1r59xVbsFXpVug7MmlYtoZqL02lurK0nSKXxFqeVIJXz9a9/nRtuuIHR0VG2bt0K\nwNVXX81TTz21wDsFgv++fGvX163a0HDc9F2zxkQburWDH8zNpe/d8n4u6dkOQNDdimEYdHo7Trh+\nVKKUokurqQpH7NJ6ytuSwRzu95ND9/Dk2O/JaZUhgiVIZT5zGXX+7j1N1+rWiPqa+lhRJ4VVC4/d\ni6Nsr1LJ3WI4bnrm5bU88XzcqnE5bMcvSKpqjvuuhdMJ4+O1H+yGUfSds3tBMuiybbBee+O6N1ed\nrxs6EhKbgmfUvNaOHTY8HoO+vupNsSXmNjrUIxAw6s5OKglS+XiL5abhGtKuXbvo7u5GURSammb/\nA2ptbWV6enqed0Iw6MFmO76NfHNpb1+atMVLAXGvLw/2zuwCzNEQ02nzv5XVbSvx+11k1SxnrlxP\n0D17/+3M/vM2/xb2JV5gXVffkn1HfcEVMAKaPUfBnibQ4rQsiIZjw7i9toYtieKFGHbZTmewBUmS\n0A2dK7sv5dnRZwHw+6tFNKtmOWvV+rp+e3/aUf2Qnvd+pnqsGt1mZQPsgwMzezFsKptazVENXU2d\n+P0uOn3B4/4eEwmze23uRtQSiuKjvdqKjni8GI34WzmUsPEq/0d53PgSWwKX0NZsRoLJmIMXH17D\n9jcdQpfyfOD8G/jtbxxsfkPltQ4eNOtVF10EgYCLjg5qfmZbW2NjzINBGBsDu92Fa86vKho1p9G2\ntBTHmeShvd385+X677VhQfrJT37CW97ylqrjc00NaxGNLs10yvZ2P9PTy+84ezog7vXlw5FQP07F\nyVktZ/NI+r8A8NFMIpGloBfIxSWmk/XuX0HPyvi0tiX7jlrtZnQ2EQ3RRCuPHXjGqiMdnBokl9bJ\nkZ3vEhaRTIRmZ5Bk0nTpzGs5unpXY+ReAA8kEtXX0XSN9IxORlqa+1FybhIJs2PQbnjw2r30R/vp\nj/bzwOEHAPAr5vedlfTj/h7HxiQyGVuFS3YJv9/F+Hia6enqvWRHjkjkcub79IIEM7186IqPs++p\nVfRLMTr6Zjj0YhuppMZQv8SZ61vZtzvP88/rrFlTqBCcPXsUwENzc4FEQiOb1Wt+ZjarkEgsnADz\neGyAjbGxXEUXnqpCJOJkzRqDRMKMigsFmJ4u0NFxYv+9zidmDafsnnnmGc477zxaWlqYKWspmZyc\npKNj4TZKgeC/I7qhM54ao83dzmW9V2CX7TQ5mqwNjx6bZ8H9Nn925nstD7qloLTnJZ6PIUsyR2P9\n1mvJRbiAZ9UsqUKqogbS4e3CZXPVjX7A3My6VIPvAJrLOtEkSeLCzourzilNp3XIizOjLScep8rI\ntJy5Ixxm3ze7mdahOEnOuAmP+8llHIweNtUmOulHsRnIyRX88Zo3cPiwjMdjdueVU/rZV/x669WK\n5kY79fAXtSExR1+iUQnDkGhpOXkt39BghDQ5OYnX68XhMH+Za9eu5bnnnmPbtm08+OCDvPvd717W\nRQoEL1VGEsMU9AIdng6Crha+/JovE4nFrQdyPc+65WRFcW9LImeKTyQbZiI1Tpe327I1aoSh+CAw\nO0qioBfY2mY++L12H3mjehdps7OZK1e84gRWX02rq4WClkeRbeaU3HVvZlvXRTQ5mvj92BOs8K2w\nNu6eSB0uk5GYT0fnjgEvkUjMHncpTnJqhoGdKyjkFAxd4sCzfag5O4pNQ0l3EQ6b+5ZsNkgmJWBW\ndEp1qqYmc69Rc3NtQfJ6G6v7NDUZZWucfU+pftTWdvLqR9CgIE1PT9PSMvtXyE033cTNN9+Mruuc\nc845bN++fdkWKBC8lCltKm13dwAGdsVe0UHmWcBXbTnoLkZIsaLrtE22M5IYNgVpAfeGcgaKkVXJ\npdypOFlVbGH22rxEC5Xn64bO+uYNeOrMGTpeWt1t6Og4JIWt7edwKHrQmqz6mlWzvn+GYZyQIM0d\n0dDI6/n8rKM2YJnFFnJmyKTYdKLjfhSbhqprqLEufv1rm2XfYwrSLBMT5rX8fgNVNVi1qrZg1Ktz\nzcXvN98/t7HhVDQ0QK7CuL0AACAASURBVIOCtGXLFm6//Xbr5/Xr13PXXXct26IEgpcL+yL7ANO5\n+ooVr2Bf8kUymEKgG/q8ztPLRWfRfihRNkOo1BSQLCSQWDidNpma4Mmxx1EkhdWBNQB0e2dTcU3O\nAHq+Mt1T0AsN7y9aDG6bG4fipNPbScAZQDf0mvt3VENd0Fh1PtLp+b+XWhHS/v2mE3gpsrLLpiCZ\nG1dNrKVKEPT40bTZ68x1hihFSH6/+b96qblg0EBV508xmtcpj5BmORUt3yCsgwSCZWV/eA8AHd5O\nVjetqdh/IwFnt51z0tfU6m7FLtsZT41b7ejxfJyMmiGv1SmEzOHZiafJqBnevP6tlnVPoCzy6/Z2\nk1Mrr+VUnPidS+M2MReX4qLHu4J2dycFvVDzHE1XF/Sxm4/MAl60qmpUbZyNx6lI85UEqRZO2VFV\nT4zFpIrRFiX3BL/fqLICKqelxajbol5OqWG6vIZUKJgjKGR5/s9YDoQgCQTLyJGZI4CZ1pIkCb9z\nVpBWNq1e9MTXpUCWZC7ovJBQZprD0YOA2eAQykwjSwtvz8iqWZ4efxKbbOfCLrOBQDMq9xb5HP6q\ne6vlXL1UbO+9nC3tZ9PsakauE+FJSLjsDeayalBvU2wJw5CqzFfnRh4um7tiI2/FazXWVijAwMDs\nNUIhCZfLQFGgo6O+WHi9VLh216NWhPTMMwqRiMwVV2gVoy1cLmPeGtpSIARJIFhGhhPHCDgCtBeL\n6qXus4Je4IyW6o2PJ4tX9b0WgF3FgXYFrcChyIF5/4I3z8vz1Rf+iZyWY03TGuv8glawpreCKXpz\nO+3quTMsBaVUoOlVV7tGpcjKCXXZLSRIDgcVU1qhWpA8Nk/d0fGlSLOc0liIEuGwjN9vUCgYrF1b\nvwNOksDjacytweGY3Ryr6/DUUwqKYvCKV1T2t8+du7QcCEESCJYJTdcIZ8IEXS1W7aJU41jVtNqa\n5XMqOKP1DNw2DwejBzAMA4fisKK5+Xhi7HGmM1O0uzt4/dprrOMOxV5Vn2mak55bKnPYhagXiTlt\nruNuN1dVyOfnf8DLcqVRaT5vTpgtx6E4akZwOgZeW+2Oy/FxuegSYabW/H4z1eZdoEGzUQFpajIs\n4fz97xUmJ2XOPVe3WsJLNNq5dyIIQRIIlolwNoyBjt/RhK8YHfQF+siqWdYWO9NOFW6bhw3Bjczk\nokxnpoD6IxfK2Rfei4TER877nxUNCj67v+phXx4h6YZeUWNaTup9zolER+PjUkOGpTMzs+fs3Suj\nKJXvkSWl5r4zTddoqWM4q+tm2u7YMXNvkN9vNNT91kiEBKbAJZOz0ZHdbvDGN1bX4YQgCQQvYUpu\nzj67j7Ziys7v9KPICr3+6jk3JxO7bGdTcDMAByMHALPpYD6yapah+FFW+vuq9k/VSseVp87yWr4i\npbecNDmbazrILHR/83HsmLRgxxpUCtLIiFTT/btW3dChOHCWtaQfOiRbnW6KYm6IfeghU8gaFaS5\nk2Tr4fcbGIbE2JjE1JTMunXV0RGIlJ1A8JJmMlkUJIePoGt2H9+qptUn9HBcCpyKc1aQogeqXo/n\nYvzo4F08PvKIdWwkMWztJZpLrXSc1+G1hMEu209ayq7T00Ver54TcSIR0vR0Y4/KTGa2G6+eaamj\nxu++XNATCfjWtxx84QtOy49uZESmv99cg89nWBta52MxKTuA5583BW/jxuraVKHASem4E4IkECwT\nx4qD4QLO5oqC9VUrrz5FK5rFZXMRcDYTdLUwmhiuev3nR37CHyae4b7+n7MnZJrDjhdHg8+tfRmG\nUTNNFnQFUYst2D6Hb0ntguaj2dVs2mLPwXmcm2I1bf7REuUoisT4uEQ+D+k6Fp5zBckA/PZZsR4e\nnn0s79hhikQqJZHJmMfd7sY2rPb06A21fpfmIj3+uBkCbthQLUiSBN3dQpAEgpcsh4suDW3uSjvm\nUx0dgSmSql6g3d1BopAgq87aDBiGYbkwwGwENZE2R4N3eSpTb3k9Z7k/lNPibrFanH0n0ZHCqThr\njplodArtXEZHJXTdFFPDgHvusXHPPbZamofNZg62C4Xq15zmRmqqrtJaNnF3ZGT2fRMT5j/b7bN7\nhfx+3fKym4/OTmitXZaq4LzzNBTFvBmn06g5ITYQMCw/vuVECJJAsEyMJc2IYu4D/HSgyRlAMzRL\nLP8/e28eHcd1n4l+t5beFwCNxk5i4yaSIimKokQt1mbtsiJrMrHMWEpekslzPM7zcmaesh2fvOMz\nk7yc2Ek89oknGdvJc6KJLdmRFEu2ZEt2tJgiKS4iCa4gsa/dQAO9d1fVve+Pi6rq6gVogA0KIus7\nR0dAo7q6qgHer3+/+/2+L1qQgRTLzSKlpLAtdD1EImJ0oYKaTE5AIALCHquZskCEsgOnHtljpLau\n1kBsJRQr1vJaHm3eUtKsBuPjxMgXOnNGwKFDEg4d4qRUzi5odpZgcpJUzCRySk7QAt84SZDglsz+\nWmGFNDFhfh2N6nY+KBvMVw5dXdQyWFsOgQBw331c4r1rl1Z21uhKedpVHT9hw4aN5UEXNTR7aufU\nXSu4RTcnlwWxRTQTRYd/HQDg0hyvjrqC3ZjPz2E8OYaJ1DiGE0NY7+80SEaHR/KWVY4RQuCRvcip\n2VUdii0Ht+xBWjV7ZiIREfauLJWgkBQOHTLv8/BhCZGIgM9+1rpfNT1NoJQ3iwDA23Ma1SAsvI8u\nyW20Mxnj+0V1dQweD8PIiIDRUYKODoaBAQFOJ0N3d/UO3Fu2ULz3nrBQrTFIEpDLkZJq56Mf1bB7\nt1a28lIULOs1Lwd2hWTDxiogkY9jJhsFAVnxQriaEAURDtGJUFGFpDENPxt+FQIRsD10PboC3dCY\nhq+89/+CgeEjZfa/fIsMvDa6G5GneXT41q3OjVSAT7KurD6HrypZezHm54GZGf61pgH9/QJCIYo/\n+7MsurooBgdNNZyObJYYrbZy8MgeCAVlSOH+4vw8H6bt6KDGXs7f/70DY2MEkYiAri66LLWb02m2\n7bZupfjEJ1Rs3qxBK41QQkMDH+4thsPBsG7dlamQbEKyYWMV0Bc9hWQ+Ab/DX3Hg8YOGU3SiYUH9\np0eRTyTHEc1EcUPTjQh7mrC35Rbj+M31W3B9446S8ywWoRF2N0ESJNS76isesxroDHZbPO1Wuod1\n7JgIh4OTx+goQTZLsGkThSzzvRcAuHDBuow6HIAsVyYkgQjGPiIrurbRUX6udesoHn1UxQMPKEil\nCP7qr/jxW7fSquXcOpqaKPJ5oKeHQhSBW2+l8Hp5fEW5sMFihEKrbxmkwyYkGzZWAePJccTzcfgd\nATjLbLCvBfgcPkMdN5/joZuD8QEAwIa6TQB4mN9H19+Pj3Tchae2/h9lq4zAInLuLQ3XYUvDlium\nsNPRGeiEXzYrt8WquEpgzBodoe/h6GozXR598uTyl1Fd8VcsaNBfr6ODk8Bdd5mlzJYtGvbt06qO\nltCxYQOFLDMUJAhh504NO3dqaGpauhWnq/CuBGxCsmGjxshpOUykRqFQBT7ZD98Vmr9ZLu5ady8c\nghOy4MD8QhTF4DwnpO6FSAkAeLD7ETzW+/GyWUJ5LY/1ga6Kr+GUnNjXdnttL7wKEEJw57q7kdf4\n/o5HWv5U5/Q0LO7dui2QvkCHwwxdXRTnzomYmlreuXWZd9ARtAgaBgcFEMKwfj0nClkG9u7lZcyD\nD6oQBG5yuhw0NQFPPmkthTZvZti9m2LrVrpolaRpQHPzlSMkW9Rgw0aNcTF2ASmFT0f6ZC/qrvCG\nfrXwyl6sC6xH0Bk08pAG4wPwyj6EXI1LPl+jGgRCEC6Sta8VNHtb4BCdoEwr8dWrBsPDgmVPpZiQ\nAOCmmzQMDgo4exbYvbv6c3cFu9Hma7e4NmgaMDJC0NTELFXQ44+ruOcezVC6LbdlB1RW5XV0MGga\nq+gMrqrlZeCrBbtCsmGjxphITyKp8KERvzMAzwcQU14tuoLdCDgCSClJzGSimMvF0BXorqrFJokS\nntzyqSvejlsO6p31UKmK9hWIKsbGrMtjOUJqb+eVzPj48q+tkIyOHRPwzDMuKAopcfF2OEzZtaKY\nGUa1gMOBsjZB5s/JFbEM0mETkg0bNcZ0asLYk6lz1n8gmUfVYr2/09gDOhHlURRdge7FnmIg5Gqs\neRx5rdHia0W9q2HZ1zk8TAx1nY5YjMDjYZZqo7mZgRCGsbGVXyOlwA9+YA4t7dtXRgK3AE2rfaz4\nYufz+dZghLkNGzaqw2hiBGk1g5kMX83W4gxSIRyiA00L13h8+igAoCvYteTzNKahxduympdWE9zU\nshcbghuW9ZxsFvjJT0S4XGblxxg3Ti0OxZNlrkIbGyNgDCtSow0PEyP+/L77VLS1VSYBUcSyRQ1L\nYbEWYDWeebWEXSHZsFFDDM5fgizImM1yQmq5Qg7Xl4PuYA8AYCw5CpGIVc0MhVwh3NB042pfWk1Q\n725Y+qACnD0rGFJvHbkcoCjESFgtREsLQzpdmn1ULfQAvk99Ko8HHjAVBtls6WuFQrW38FmM4K50\nhWQTkg0bNcTcgjhgNjsDAvKhIiQAaPd1QF6ixahSBfd23r+m944uB1NTpbEReoBduYpB39/RZeHV\nYnSU4LXXRMNAtdANgVLg+uuZJRSQUqCjo/aOCR4PK+vLx9iVr5Dslp0NGzVEPM/3jmazMwg4gyuS\nG19p9BS0tDbWb1ry+HpXaNFh2A87imPHAbP6KWeto8cyRCICursr7/8U4vRpAd/+tkn8jY0UwQIx\npqLwuaPhYQmaxpDLAe3tXKpda9TX89crdmnI53FFFXaAXSHZsFEz5LQcUkoaKlUxn5tHyBWCvAac\nvZdC0GW6YN/W/pElj9f9765GUFo+x0h/rFzLLhzmJFGpQrp4keCv/9qBgQHT4+7AAWvf7bbbrEQm\ny0BdHVBXx/DQQyp27KC46y6tbODf5SIYZGUDDQWBX8OVhF0h2bBRI0ylJiEQAbHsLBgYGlwhONew\nwk6HS3TiC7v/b6hMWdR1AeDRFJWitq8GzM9zJVtxOqxeNZUjJL1lF4mUJ6Tnn5cRiQj4xjec2LNH\nw5NPKohGuWLvd34nj+PHRdxyi5WQ/H7u1HDPPRpkGbjxxtUzN3W7YYlaV1XexuvtpVckcqIQNiHZ\nsFEjTKWnLIKGBlfoslJKrxQCziCaPOEl944AIE/zhiHr1YjCqIlCJJOVCcnn49VEuVZfLsfjKHS8\n956Ixx9XMDNDsG4dw/r1DOvXl1oleDwLSbsVIixqCUK4+4Oq8utsbKT42MfKx1CsNuyWnQ0bNYI+\nezSzQEghd2hNzyDpCDgCUFl1ex9gjCeyXqWIxUoFDQCMKPFyQ6SCwEmpnMpucFCAphFcf72G3l7+\nHh88KIJSsmgk+JUcRi1+vYaGK2emWgy7QrJh4zKhUQ0vX/o3pBS+Is1mZwEsVEgfAkJyLWQjFYMy\nCpWqlnuQReeaSLxdLehuDMWYmSEghKGurjyJBAKle0jJJPDDH/Ildu9eDZIEXLwo4t13eR+ssbFy\nG24l9kCXA4+HIR4noPTKmqkWw66QbNi4TByPHMVsdgZZjceHzmSiAHhktvtDoLKTRRmSUNobIiD4\nWM+vQKGmw6h3jTszXC7m5soT0vQ0D80rlxcE8Mopm7UG8/3sZxJmZvgS29VFDcl2JMIf27Jl7RCS\n/nqKwv3tPijYhGTDxmViNDEKgQgQCf/kO5magFtywyW6EXR+ONpbTrGUkBo9YTT7WuAUTZfvtWoV\npFcdl4N0GmUjyTMZvj9U7NJQCL2Vl0qZj+k5SXfcocLt5uIBQvToCq3iwq8oV17dpg/HOhy19cpb\nLmxCsmHjMpDIJxDNTBvf57U8opkIWr1tIAL50MzrOITSNpyelRR0mKtjnfPKBu1VA0UBjhwRjH2e\nlWJykpS4XlMK/NVf8bKoGkLSxQ/ZLI8y7+6m+JVfMUULDz+soquL4pOfrJxxrmnsirfNfD5mtOs+\nyHlnm5Bs2LgMnI6eglygpJtMTYCBodXbBpnIH5r9FkdRiCBjDIGF2AydmPI0j65gdcarVxKpFJdp\nDw8vvZKeP1/5mNlZUiJzPn5cwOwsXyZ7eyu32IoJ6cgREYyVOnfffbeGz342v6jDtiwTeK/w55gN\nGxgcDoZg8INr1wE2IdmwsSJk1Swoo7g03295fDQ5AoAnrTolx4fGXsdZJE/P0xzavO0AgCZvMzSm\nwS26jMeM4/LASy9JZa1nrhRmZwkcDhjEUfk44M03xYrXWjwQSynw059KEASGL3whh23bliYkXfr9\n+usSnE6G226rIiO8CB7Pla9SJAn4+MdV7NxZpdpylWATkg0bK8APLnwf/3zm/0NWy1kevzjHCaon\n2AunWGNb5lWEo6iSkwUHGhZMSTfUbQQB0BnoKiHYiQmCiQmCqakPjngTCV7ZzMwsfg2nTwtgjGB2\ntvzPixV2774rIhIRsGePhvb2xUmiqYn/PxIhSCQ4uW3YQFe0H+P1fjDs7nZf+b2rYtiEZMPGMqFS\nFVk1A8aYIWQAuEy6f+48go4gGt3hspHfaxXF8vR6V4MhBZcECXetuxd7Wm4ueV40SuB2AwMDHxwh\nZXg4L2ZnrZHjhRgdJRgaEuB0AqOjpcteLgfEYtZzvvSSBI+H4f77l65y2tr4/zlB8/O3tq6MWK50\nu24twSYkGzaWiUh6umzbZ3B+ACklhc0NW0AIgUtcW4R04QKp2K4qdpQIua32QF3B7rIEq8uk9UVY\nh6oCQ0OXcbHLgJ4lJAgEly6VEmN/P3fV1jT+s0Si9BwDA1ZBw+CgAFUl2LdPq6pq8Pm4i8PkJK8Y\nAaC1dWV2Px9UhbQWYBOSDRvLxGR6suzA69Hp9wDAyAlySWtH0KCqfP9kerr8zx0FZMMYQ12VcvX5\neb74xmLAHDeqAKXAiy9KePFFYGRk9SsnffZHFMtXPxMTgoVsMpnSa4pErA4NQ0Pm/FC1aGmhiMUE\nDA6uvEKiFBWHb68F2IRkw8YykVHSZR+/ONcPl+hGb91GAOWl1Ithfv6yL60iTp4UIIrEWGiL4ZO9\n0Bbsg/I0jxZP25LnLHTGlmWCo0d5+/IXvxARjxO4XEvv69QChW260VEBWtG+fPHeUCpVek2xmGCc\n64UXJPzsZ9xhobOzekLSk15PnhQhSQyh0PKJRVHYilt9VwNsQrJhY5nIFQkZ9MeimQjafO3G3otj\nmXtIP/qRtGqkNDgoQBAqOxE0uhqharzUEImAetfS80axGK+8zNcg+OUvRQwOmvLpwkHR1UI+b96T\npsEisGDMam4K8AHYQkxOEoO0XntNwttvczK67jptWZ5y69aZ5NXSsrJkV4eDlM1culZgE5ING8tE\nvgwh6fNH7T4ui6aMwrMMQpqa4hvrp0/X/p8kpWZrrVy7CgB8Dj+EhZ6VV/ZBFJZeTUdHBYsbtSQR\nnD1rbY/pczmriUK7Hlm2xkAkk6VCh0wGRhWVzwMvv8xl66pq5hT19FA8/nh5MYOmMQhCaRWzfr35\nWEvLyvaP9NiJaxU2IdmwsUyUq5DGk2MAgFYfb3UpVEFADpYcV4xEghPGiRMiJImUbSddLmZmzEVb\nV6QVQxREw3cv6Fj6ugFgYEAoWTyLc4SuBCGpRbxR6Lo9MUEM/7kf/EDC177mwOwsQZTbDaKvT4Ao\ncsfu/n4BuRzBRz6i4jOfyVdsufl8wO23axYiBLjLQVsbJ6KenpXtH7W3r17u0YcBttu3DRvLxGKE\n1O7tAAAwRuF1Lt57OXVKwDvviHA6uZBAFIF0uvYL+Pi4YCzK2SxX2pX7FO6WPEjk41X578XjQCQC\nOJfYJpub41VIJVPSWiCftwoSCklwbo4sZBUBBw7w5e6NN2TcdZeG5maKgQHBeG5fH/9i27bFh0PD\nYZ5j5PEwKIr5WoQAn/98HrEYWZH1D2OrE1H+YYJdIdmwsUxUIiSBCGj2tgAABCIsKfs+fVqA280/\nneuJnZUqmMtBPG4SkKKwsgaiAOCVPKCMVrV/NDQkwOFYmjxFkaC/f/WqJEqBw4cFyz5RISHpzgkn\nT5otyOFhgmiUYHLSnD2iFOjrE+H1MnR1VSYTSnlkuSAAH/mIapil6hAEIBRiK4oaDwavTCDfWoZN\nSDY+NJhOT2MyOfGBXgNjDHnNuinRFz2JocQgmjzNkAT+KVwUZOPrcpibQ1kz0HS68qzQSmFNMiUl\nFjk6Qp5GKFoeHf51S54zEiFV7XUIAq/QVgvnzhE895wD//2/O0EXiovCtqd+r8PD/Br8foZolGBw\nkOCtt0TIsj5Hxd+X665bPLZbUYDmZv4Lam8Hdu2ixuteLq5lubcOm5BsfGhwKnICPxl6BQNzFz+w\na8hpOUMeDQDxfBz/0PctAMB6f6fxuHOJYL6+vvIVhqqymldJhRWDw8FbbeWwpX4rwp5m+ByLOH8u\noFKQ3eUeu1zoMz8AcO4c/zqXY8gtFLE6IfFocoadOzUwRhCJCEilzOfqw6zr1y/FLsxijLplCwWr\n0SeIDzIYb63AJiQbHxqMp8YgQMDF+Q+OkLhlkLlovTH8UzAwXNewFQ93f8x4fLFgPk3jyaHlQAip\nKM1eCSg1CUnfO5qcLP/P3uvw4tHex5Y8p6aVr+4qIZEoFR7UCnrlA3CRBQd/D5NJTk6qyqXgLS3M\nmBWamhIsbbXpaf5Nc/PihCTLxLJvJssocfReCRRl8XiLawVVEdJLL72Exx57DE888QR+8YtfYGJi\nAk899RT279+Pz33uc8hXMpCyYaNGyKpZYyB1PreKE6RLIJFPIKkkkVZSmM3O4sD4O2hwhfAb234b\nPocpYvAtkoM0OEgqLtCyvLzFfsnrTXA5+f/+3zL+7M8ciMd5tfDaa+UJcbE2o46pKWLY8FQDxkw7\nnVqj0AlCJyS9ChwfJwAIfvhDCZpG0N5OEQpx8iieTdJnl5YihXJJrjt30or7ctWAMYBShnDYJqQl\nCSkWi+Eb3/gGnn32WXzzm9/E66+/jq997WvYv38/nn32WXR2duL555+/Etdq4xrGbHbGGDiN5+dA\n2eqpkbJq5dVlKjWJvzn6VXz9+N/gxwM/gsY0PND1UMlC7lmEkEZGhBJ5tA5CKs8KrQRTUwSHDok4\nckTE7KywMPRJMDxMVryITk6SZanmZNlMT601dA89UWQYGSHI5fh7mEoRjI0JeOMNCYcOSWhro/jo\nR1VDyl3sIDE1ReDxsCWHUt1lDNyDwZWrCPN5Bk3jhqqrqUT8sGDJv5IDBw5g37598Pl8aGpqwpe/\n/GUcPHgQ9957LwDg7rvvxoEDB1b9Qm1c24hmopAX9mVUqmIuN7cqrxNJR/Dsme9iNjNT9ucv9P8A\nGTWN6fQUjk0fQYu31fCuK4RXrryyRaNcuHD4sGD4vxXicj5tF2NujuDNNyWIIl+I339/wcFbIism\niUqiiMUwPCzUbPO/EHpls2+fBlUlOHOG39P58wKGh/n3ksTwn/9zHnV1PJ5bFJmFkDIZIBoV0NpK\nlxRqeDylVQwhQEPDyq6/sZHPHvn9dnUEVDGHNDo6imw2i09/+tOIx+P4/d//fWQyGTgW6DwUCiFS\naZd0AfX1HkjS5WfeA0A4vPSG69UC+15NyCkKv5/LqL3MAc2VQjjcuehzVoKj/b9EfdCHCTqIzeGu\nkp+fmnsfAHBd43WIZWP4vT2fRtBn3S9SNAUb2tYhXF96T5QCjLkxPAx873tAfT3w539uPcbtBsLh\n2txPNMrbdnv38gHZS5cEuN0uSBJvDa7kdQgxA+nGxoCWFlRUpum/M0UB0mkXumscOBuL8Vmoe++V\n8PbbwOHDDtx+O7/G+XlgYgLYuhVobOTXQSkQCvGWnX5tIzxTEZs2ifD7F1+nWlrKv2f19cDc3PLd\n3bdt48/1emv3O78SWK21qarB2Lm5OXz961/H+Pg4nn76aYuqpBqFSSxW3oxyuQiH/YhEynjHX4Ww\n79WKscg0EimzdBiZmkIYS8uTlwPGGM6MXYDGKM7lLmGbt7TyGZ+fgFN04re2/p88rI4BiYS1pMlr\nOUhZX4V78mNuLotf/lIGICIWA06fzmHdOvPf0eQkRSRSm+TOQ4ccAJxoalJAKQFjEoaHcwiHGebm\nGCYm1Irtw0oYG5Ogqrzt97WvObFnj4onnyzdFPP7XZb35tgxDT5fbcuk2VkvPB4Cvz+HzZtlnDsn\n4vjxPDZsoAuDrg50dipIJPj7qWkMnZ0yDh+WMDGRhc8HnDkjApDR0pJHIrH49WWzGiKR0mP8fn/J\n38FSyOeBQEBBYyP/fonP9WsGl7s2LUZmS9bsoVAIN9xwAyRJwvr16+H1euH1epFd6CtMTU2hSY9L\ntGFjlZBUkpbvUxUcty8HE6lxIwF2NjtbMm8EADOZKILOukWjyYPOuorhfMPDfE/l7NlSubKOXK52\ne0jnz/Nzt7ebm+a615uqkmW7cefzpmHqpUv83O+9J5U4bJfDhQsCXn9drGnrLpUihtDgzjv5Rejv\n7cgI/7/VY45hzx5+nD4fdfFi9VETLlf5D+CBAJZ9Xw6HmTRrg2NJQrr99tvx7rvvglKKWCyGdDqN\nW2+9Fa+++ioA4LXXXsMdd9yx6hdq49pGWrXaRqeLCOpyEc1EcXGuH7LAR+UFCBhPjVuOyagZJJTE\nkl5vYTdfZco1Dy5c4K2yVIoYcuELFwRMThJcvMjJoVZ7SPG4KYtua6PGhv6rr0o4eJBbFi03evxn\nPxMN89TJSfO51eQeSRKPvzh/vjaEqyjcCkknpM5OCkFgxmzS6Ch/nUJ/uKYmhl27qPHzEycEXLwo\nor2dLpnUqiioGEne3IwSb7ul4PNd20aq5bBksd7c3IwHHngAv/ZrvwYA+JM/+RNcf/31eOaZZ/C9\n730PbW1tePzxx1f9Qm1cu1CpioySMUQNAJBWazs9emDsbUylJ+EQ+ZCJJEiIpKbQFegyjplYIKjF\nvN5UqqAryDdKJ0HIdwAAIABJREFUzp4lCIWY8Sl4cpKbeuqfzDdt0pDP85mkv/xLEYQw/PEf51BX\nV5tV6uJFARMTAurqGLxeoKODL9xjYwKee07Ali3asiTmlPIZJr3FV+jAMDUloKtr6TJJkvgw65Yt\nl9+S1MUVekSE08kziUZGCBSFV0ihEDV+ns8D3d0mMR8/Lhr3sHHj0uWNqlYeXg0GseAAXv3vrpxA\n4lpHVd3jJ598Ek8++aTlse985zurckE2bBQjno+DwrpgJPK1G9ZRNAWRTMQgIx1zuZjl+4kkJ6TF\n0lTdkhudCyQWjRIkkwRNTfza+/u5XFpvJbW1Maxfr+Lv/s4BQWCglODYMRG3366BUizbD41SPuPU\n08OQSADvvCMikSCGWWhjI8Ott6r45S/5P/v33hOrWoh1zM/zoVhJ4tXA5CQBIQyMkWVVWrVyNNez\nowpng9atoxgdlXD8uIBMhmDrVvP+RJGr4errGdavp0b1GA5T3H135cldfaBYFFlZ2TfA3xOXC1W1\nLnUsJ2vpWoHt1GBjzWM6NQVZsA5p5NQsUkpt0t+OR44ZM06FmMnOWr6fTHEfvYCzcsuu0R029pdm\nZwVLNs/oqABVBQ4dEiHLDF1dFJs2UXz+8zn81//K96vOnRNAKSvJ8KkG0SgnIcaAM2cE49O/7k4A\nAI8/ruILX8hBEBj6+sRlkcPEBDHMPycnCSgluOEGvuAXExKlwPnz5RfoWlkj6cOthSTR3s7vVQ/Z\nK3RR8Hr5zwgBfuM38mhro2hvp/j85/MV23WqCrS1aZBlBoeDLCoAcS1TZFduyPZahx0/YWPNI56f\nLyEMSZQxnhzDxvpNl33+87NnyxJSMh9HXsvDsdAqjKS5DMq3yIxRoGB/KRYjEAQCxjRMTvJqaWiI\nh+XdfrtqfELWW2mBAEM0KoBSPrS63AVubEyAqhIcP87JaHqaL9iFYXGCwBftzk6GwUGC2dlKZytF\nPG7GPIyN8S96eykuXhSM6HBR5KT63HMy5uaAX/1VEbfcYmWlXI6sqAIshk72hQu7nkdUeH06Cltk\nPT0UX/zi0qy/ebOG226j+Pd/J2VnxgrhdLKqCZ4xkyBtmLArJBtrHvF8qcRUJCJi2WWsphUwnZpG\nRi2v2BOJhJHEsHlsegpA5aFXyijq3Ty6gSeV8kpnYoLgvfd4JtHhw/zYvXtLS4fGRob5eX2GZvlt\nrdlZHh1+9Ki4EEJHjPMWY/NmbjJ6+rRY0V282O6n0KRVFzG0t1Ns26YhleJDqO+9J+Dv/95h+PHp\ng6qF0LTSGPGVYGqKn7uwQmptZXA6+Q09/LBiuffCFlk1ZJ/LAZs2cUJrbKRobFy8vVkuGyqfLy9u\nyef5PJQNK2xCsrHmUWm/aD5/+Z52g/FLJXtHOkRBxEwmanw/lZ4EULlCymt5tPl4QN/kJIEs8z2j\nV18VEY3yCuLUKb5n0drKV6nC1lwoRMEYwfw8MaTVy4H+6VyW+Z6GLunWN/EL22fd3XxxHRwUyrbQ\nVBUlfnf6+SkFTp/m2UFtbQz79vETv/KKhH/7NxmyzPDkk/zGykVPiGJtHMAn+a8DHg8z3i9ZBn7/\n9/N45pkc7rnHSvqFFUkl+bbuCC7LDLJskkZ3N1tyv62c9U8oRBc+mDDL+y8IrGIi7bUMm5BsrHnE\nc+UJKX6ZJqsa1XAhdm6J1zZfwyCkCvEMbsltkNXcHDHcC0SRfx2JEOTzfN6FED1J1VyU9AVqdpas\naBapmFhmZgi8XmZUAzffrBrVw7p1DILAMDQkFOUlcfT3c1+4wjhwfdEfHSWGWEIQeFWye7eG6WkB\nqRTBHXdo2LOHYscOTjzzRb8mWUbJYyvB7KxpptrUxIw5oJaWUqNSVbVWiuXECZQC27dr2LmTorOT\nor6eGm1Fj2fpmaHC3yUAEMKwd6+Ghgbg0Uc1ANZqbbkDydcCbEKysaaRyMWRp+UHc+K5+GWZrJ6I\nvg+FLp6LUFiFzWRmIECAWyovtdKTVt99V0B/f+k/rbExvc3FFyZZNisVABbjz5WIGgpNWTWNk4F+\nzg0bNGzdytDRwV/P4eBih/FxLkUvxuwsgcNBMDREjPPp5x8aEhbOaV77I4+YQzg338xLgd5eWI4v\nRC2i2vUqy+nkVZqilK84KGXYuFFDb6/5c6+XlQyy5vPmEO0NN1A89NDypOnFLbueHor2di4kaWlh\naG5mkCR+ftu7rjxsQrKxpjGcGLIo7BQtb9hVqUxFNFNmNa0Cf//6L3Bm5lSJmOH49DG8PfYmNMoX\no0LSm8vF4JE9ZQUQAFDnakA6DZw8KSCfL11wdUcAnRQaGihaWsxWjj7jMjdHyj5/MeRysCzIY2M8\nIqK1lULTzOogHOavpygMLS0UlJKy5JlIcAGD3qZLJk0nAn1vqVC9FwwC/+k/5fHkk3mDBHt6+M8K\nQ/R01IKQdFFDIEARDrOKQ6uNjQx33GFln1CoVMkoy6ZHn9u9fPftwgqJUvP3qVfKDz2kYedODZpW\necD2WodNSDbWNGYyPHaCMYbTM334fw58CS9d/FcAgFN0Yig+uOxznpu+hHf+3WfZpAeAZD6Jfzrz\nD3ih/wd4Y+RnAAAGhv7YeQCckLyyDwpVoBZVVn5HALubbsTYGDGcDAoxOEhw+LCIcNhU1QWDPA5b\nn/DXI6zn5oiReFotEgmeO6RDd/LeuJFCVZnhlbduHd9veeQRDS0t/LFz50oNRfWhU70qKpR8j41x\nB+3ittjmzRR79pgLf1cXjLZgMWohapid5XNQoRC/tnJ5QppmVdrp8Pt5S836GLss5Z/PZwYRKopZ\nCesgBNiyhVdmhe4RNkzYhGRjTWNyYd/mwMQ7+Papv0NWy+CtsX83fh5ZUL5Vi7lsDP/y9hG4XRRT\ng1aZ04nocePr0zN9ALhjQ//cBahURUpJwSf70OxpRpPH3FBQqYqdTbvgkT2G0q0YL78sgzGC3/gN\nc+/A6+X5O/r3gQBfwFdCSLGYNaNIJ5neXu5UoO+ZuN3A7/6ugpYWc5Ne97vTUZgyqxPH3ByvmDTN\nTF+t5PCtQ28Ljo6WBhLqFdLk5MoDCWdnCbxeU6ywdWtp245SZmnV6XA6UfLB4XLbaIEAM+7T4Shf\nBYkib3V2d9stu3KwCcnGmsVYYhSJBUHDsakjlp/pku/ZZUq/z8fOIT3TCCIAyZi5F3T6YhI/7n8N\nIhFR72rAaGLYkINPpScxND8IgFdCAUcQvcEN0JgGlapo93egO8D7U3plcfKkgGeecWJ0lMuvBwYE\nbN6sYeNG/nq8bcM/kesLqiDwqikWI8hml9fSSibNGaHZWW582tND4fejRM2lE9f27bxXODRk3bNK\npwFV5c/RKyRd+DA9TaCqxJj3WQpdXRSaRgxfOR16K/DUKXHFabLz8wSBADPmi1pauEy7kPxCocqt\nt+LB1EDg8kjC79ftg/jvtJJP3Z13apc9g3W1wn5bbKxZDMYHIIsykvkkBuMD6An24mM9jy/8bBAA\nd2wobp8VY3KSZwEdGH8HfZE+xGf4QEpizgPGgBf7/xXfHv1jZNg8Ptb7OHY37QEDw3CczyAxBvzw\nwnMAgIAzAL8zgI0Nm9HkbsLmhutwf+eDhjuDvtA++6wMTSN44w3JcPPevt1cxBWFt+sAqxy5ro4h\nHl++m0FhC6yvj5cuu3eblkHlcPvtGrxehkuXRBw/bi4Fb70l4pVXZCiKeR36XFS5/aPF0NlZvgpT\nFIa+PoKREVJW5bcU5uf5gG0gwCxigjvuoMbeDWOLt8YKCYjnJF0eIcmyOetk+9StDDYh2VizmM3w\n6mcyNQEGhu5gD5o8zQCAmQx3TdCYhmSZwdlCHDwo4Y1/V3EqehKjZ1vBNP5nrykiIqN+vDfGW3W3\n0M/j9vaPoMPPZ4nGkjy5TRIkQ/LtlwMIuUKQBAmP9D6G29pvt0RRpNOcbPRP6ePjBO+9xwli82ZT\ntSVJMOKy/QUq8ro67g1XaDlUDQoVduPj/OuuLop8HpaspULU1wPXX68hkSA4cIBfI6XAb/6mG++8\nI+HQIRGZDJd76zJtfa6otbW6CmnLFgq3m+HttyVLG9LhIHj3XQmiSFbkbTc4qAsamLG3pWP7dg25\nHCBJDDt2VEdIisKMvb3Lgf47XSoK3UZ52IRkY02CMYZYjhNSNMvJp9EdRsjN931mszxiXBYdiGQq\nJ5spCq+Ozo/MIRMLYqy/EYKoq58ojhyjyGAO6/P3oiP1KACgw8eD/0aTo8Z5Eguk53N40eAuP2LP\nGFd+Pf+8bAgMolEBIyMCduzQLDHXHR3mjEtbm9lm0quleBwl+y6LoZCQJiYEiKIuOlh8APO++/iL\nHDnCCenQIdG49nff5VETv/iFCEHgj+lkV22F5HbzSiydJvjSl5z4+tcdhnuDTiTJFSSJXLjArzcQ\n4MOshejtZWhsZPj1X1fLuifoaGgwpd9eb23MTn0+fi12hbQy2IRkY00imokivxCWp0u7G92NqHfx\nVX0mwwlJJGJJeF8hRkYICCHIIoG+tzeWhAOMuriarkm7EUpOhJITUeesh0fyYixhEtJ8jhuZBZx1\n8EjlV67ZWeDrX3cYi/tjj3H5nCwz42uAfxq/4QazWurpMdVd+oKWSAjLykXSW3aUctFBczMXHbjd\niw9g/vqvKxAEhhMnRGSzZuUB8PNQyjOVRJET7tiYgPp6WtH1uhxuvpmTnqYRDA4K+Od/li2uBSup\nkHTrIr+flZCOIPDZn6XQ0cGgqlzlWIvqCOBVF6Xm79HG8mATko01icF509JHb8+F3GHIgoygI2gR\nM6QLXL9zmlWeNj/PVW9pNQ1RpCgcIVKRwUXHi3DSeqxT7gQhDJmUA4QQdPg7MJONGsIGfUC20d1Y\ncQ7prbckzM/znwkCw223afjsZ3P4gz/Ioa4gsSIUAsJh83tR1AdLmeE6ncmYAolqoFdI4+MEimKK\nDpYKnWtoALZtoxgfFzA8TDA6yq+/ro7HYXC3B35sIsHJo1jOvFTkQl0d8MQTCh55RMGNN2rIZolF\nyFBY3VUL/fnBYGnLDkBVwXeBAG+tbdum4frraxMZ39VFkU5bU2ptVA+bkGysSRSmtc5kZuAQHPDL\nfLOlwRXCXC5miBlSCxVSMp/Ajy+9bDmPbneTKRNVMS0dg0oy6FIehAgnRIkiNcc/+rcveNKNJcYA\nmBVSk7u54jXr1cWdd6r44hfzEEWgq4shWJRWUU6hFg5z0YPesstkiEUOPTcHnDxZfpXNZs2h2BMn\neHW2bRt/jWo+qet5SadOCYabhL7fpTuGA+Zgr+7DB/CB3GoygG69VcPdd2vYsIEfPDBgLj26Ce1y\nMD3Nn+/zsYq+dNXgpps03HwzRX39ik9hQWMjF3LYWUcrg01INtYc+mPnDVNTxhiimYglZ6jZ2wIG\nhqkUFxrMLZDFxbmLiKSnkNfM1S2dJsiqmbIWQRPSQQBAq3ozAP6pOp/jH7fbjX0kLmyYycwg4Agu\nmoWkRx709FBj6LQYioKKP9uyhRqLazpNLJXDwYNiWccDgFeB+TzBN78p4403JDidDFu2cEKqJnNH\nV/8NDAhGhaTPKOk5R7kc8IMfyBAEhq1breKMagUOACdowIxWB/hA73LNZHXRh9fLLKKQ5aK3t/Yx\n4g88UJtq61qETUg21hzOx85DEvjGR0JJIE/zCLkbjZ93FJFFIh+HSlWMJUfAYDVjTaUIYrkYRIFX\nDhkSBYWGmHABg/KrcNEQGrTrjOPVPD+uw89fYyw5ApWqmMvF0OhuhFusnFugL96LzbMwVlkQ4PGY\nP0ulYFGl6XES5YQO0Sgnk/5+fu3/4T8okGUuiihur5WD7mQwNMTbdh4PQ0MDf57uFzc4KCCb5cap\nhaq9urrluVaHQryiGRsjGB4m+G//zYGpKWI4k1cLPZzP41l7vnC2aerKYROSjTUFlaqYTE1CVfif\npr5/1FhISH4rIYEBP7r0IqZSU3CIDsxkTX+7dBrIKGkIIIiKJ/GKbz9+5PtVvO77PTCiYk/mv0CA\naTmgZPlqEnKF4BLdGE2MYjY7AwaGRncjnBWMVQGzvRUMll8gNY1h797FFyy9nZdMmo7fyaSuRCO4\ncKF04U6liNECe/rpPHbv5ucgpLLkuxBdXfz4S5cEjI0JqKszqyB9RujSpVJDVcAkpGKj0krQ3cEj\nEYJ/+AcHYjEBb7whldg4LYZ8nleFXi83K12u55yNtQubkGysKQzFB3Hm3U4MnmoFUKiwM1UALd5W\nSIKMS3MXAXDpdzwXhyiIEIhg7Clls5yQcgstvD7nP4IRivxPvwT89M/Qkr0DLdpNltfP5zhbEELQ\n7mtHNBPB2IL8O+QOwy2Vr5AY43EIgsAqzqDs2EGxd+/i99/czGMhOCEtvCdDPFtJFK2tLh3pNCck\nUWS47jqTGRoalrb3AThpiSLDkSMi8nmC9naKnTspJIkZwoqBAQGEMIs7uf4aoZDpx1cN2tt57pN+\n7lSKLGsQeGaGZ0bV1TGIIrEJ6SqCTUg21hTG45NIRILIZfheTiQ9DQAIucwKSRIkbKjbiKn0JEYT\nIyXnSC8o48bHudFpXsshIp5ARDqOcOojwIH/ArzzBwi9882S52bT5urW4V8HBoZXLv0IANDoCleU\nfKdSXHjA7WNKf57Pm64Fi6GujsHj4efT7YN4FDr/+fS0UJJAmkzyPZWmJqviLBSqrmxxOLgIQtP4\n6/X0UDQ3M/h8DIkEAWNc1dbYyCxJq7kcn6fiezjVt822b6cWY9PRUVIxIXdgoPTxc+cEKApBQwNv\n/9V6D8jGBwebkGysKZztzwGMIJfmK6uutmv1tVqO2xbaDgD466N/aQyt6sgq/ON2NMqripyWw4D8\nCgBg3fjvGcdNXbKeEwByKQeUhX2kW1pvhUt0GwO6nYEuYw6qGNPT3AKn0v6Rw1FdZHVLC4PXa62Q\n9DhwgFd9swX2fZQCIyMCcjliWOYAXPnW1FQ9SeiprwD3g/N6uSw6kQBiMa76K1TXAXywtaGB/9/p\nrJ4VNmyg+OIX8/j0p/O4+WYVqkoMBV8hMhng9ddL+5sXL/LXamhgy5qHsrH2YROSjTWDeG4eQxM5\nCCJDLsMrlbHkKOqc9fAWxYbf2HwT1vk7AQBnFpy5daRULtmamSGgjEKheUSk9+GgQZDIDuO4mYkg\n1LyI4TPNOPfeejDG3RtSkTpQpiHsacJjvdw7zyv74JZcCDrrUA4jIzx/KBjkjs+qyqXYughh3Tpa\n1Sf5YJBLmbNZ3tLK5axx306nNfBuaIiLHQBYCKkwcqIa3HUXv9BNmzRs2cKvVZ9F0sUSxXL1UMi8\np3LOBJRWloS3tjJs2GCqEcsR0qVLBJSyEieHkRF+LCektSVosHF5sAnJxprAXDaGnw69hmycT2Gq\neREzySQS+bgxE1QIh+jA/i2fAsBjIwqHYxP5BIaHCd47P454fh5pTCEjRNCoXY94lBNbY0cMjAoY\nPN2KQz/ejpNvbsS5w50QRIY6bQvqnbwS2tOyFw93P4rf3v67kAS5Ylrs8LDpHLBrlwankxOC283d\nAHburE4KLAhmLlIqxU1aVdXKZIWzQYODZgS5/jwAkGWyrOrhnns0fOUrGfzO7yjGefSWn271U6wO\ntEaClxIDY0B9/eJtQ73qGhkpTclNJnlqbbFTuC5/D4XsCulqg01INtYE3p34JVJKEpm4uUlxYpJX\nPp2BrrLPCXuasM7fibOzZ/ClX/4R/sfRv8JwfAjzSQU/eRWI5MZxduY04vIlAEBIuw6zkwGAMGza\nzZ28j7+x2ThfZCQEharwo82QmQtEwD3r78P6QCdckstipFoI3XTU7+dR1fv2abjrLg07d1Ls2kUt\nPnZLQZdcp9O85VgsTND3kSjl+y96BVVYIRU6iFcDQoAbbuB5QrqSTq9eTp7kF1C4B6aq1gHZpiZT\naaeqDI2NFOEwn2cq3vMqREsLNe7pueckvPGGebN6pIZeEfX1CTh2jBiEbFdIVx9sQrLxgSOVT2E0\nMYpMSjZUbpCy+OX0GxCJiD0tlaVpeksNAIYSg/jWqf+JiUE/UnQeOS0LjTFMDdcBiWa4sp2YnQyg\nvjmO5q4ZCCKvWoKNCXh8eWTmgmh0hyAqQTR5m4zoch2VqiOAG5oC3IomGGTo6eFy5K1bqSHDrhb6\nXE8lKbSqAufO8TmefL48Ia3E3LOnh4f26a4F+nAtADQ2UosNkaYxIz4DAHbtMs1iW1oYHn5YwyOP\ncNXgYi4MPh9vUU5PE8PrThcy6B53o6MEJ04QHDwo4OhRyXK/rspjYTY+hLAJycYHjpNTJyELMmKT\nAUgyJ4kLrn9BTJnEza23IuCwRm8q1NQYdwd78Od3fAWP9DwGAEgpKVycHcaF2HkQCDj99gZc+pfP\nAd9+G1PvPARGBTSti0GUGG687yzWb5nAjfefQagpj/i8gG7vdqRSBG2+DovjA1CZkPL5whmk5RmP\nloPeCqvkXiBJ3J27r0+ALJuiB2uFtPzX9XiAu+4ySUgP8AO48q4QxS1BWeaJrapqHut284gLUVyc\nHFtaKGZmhIXICKC/ny9L+v2LIsHhwxIkiUeVz84KxqxXYZvSxocfNiHZ+MAxGh8FIQTpeZexST4t\nHQUBwcPdj1qOVakCh2AdPJEECXevuxe/ue23AQDR/BgACqqK6D++sP8U24Dhw7vhdOfRtZ0r9zq3\nTmLvw6cRbJpDy4JF3fQ0QTpN4BZ8cBXNHLkrSL7Hx82QuVCotMW2XITD5nBsJWgaweQk/+cbixGI\nonX+qRbxB7rND8BTTgtRziNv1y5+3Rs2mD8TxaXJUW8N6k4XY2MEU1NWOyFdzq5pXF7f0MCgactz\nibCx9mET0jWGVGpl+TOLYbE9gqWgUhXTKT5rFJ/lKxcDxZzYjzqhvYQUZMGB3c03QmOlIoFmTwsA\nIEb5IOvUYAiaIsF5y7eAhgsAgFt/5X34661TmE7JhfZmTnIzMzxyIZkEAg6rb52rQoUUjZqE1NS0\nvPZcOehRCEslqeqLdCzGJd96y4zS2lQODQ0Mv/u7OfzWb+Ut7Tmg/B6VJAGPP66UOFEUO1dQakak\nKwpDczN/z/R9OIDg5ZclOByl9x+LETDGZ5AkidgmplcZbEK6hnDokIBXXpHw/e9LOHKkNr/6iQng\n2Welqq1jijEcH+LVUVJGekHQkBTGoJIMQqTXcqxKVewI70J3sLdsbHmDOwSRSIhFZVBKMDXMlQT0\nuu/B89R+3P3Jwwi1xS3PYQDCnrARDzE/TyBJ3Cst4LS2Ct1y+Q2LRIIPdsoyq4lrtN7yqjQsWghF\n4ZVUIQEpCqs6QG8xeDx8X2nr1tJfbqWqp5x4o6mJGR9aKAWam6nhsRcIAPffz3+XfX16dEf54WLA\n9LBraGDweOyh2KsNNiFdI1AU/g8+k+HuBSdOCMu2/C8GY8DhwyJyOVJ2or4azOfmIAoioqP1xv5R\nTDgPAGhgGy3HuiUXdjbtgkf2QBZK/WJEIiIQvQeJv/sR3nlhB2bGghAkFUr7LxDwiQi1xsEAkII8\nI5WqaPa0GJ/i9fykeJwY0m/9uKCj/AxSIsFnhgKB2qi+9PmheHyJA1F+/0iWSU0itAkBnM7ycu7F\nDGSLsWEDRT5vJqned5+24AzBffTuv19DayvFuXOCETS4NCHZEQ9XI2xCukZw8SIpkiwTSzrocjE+\nDvzrv0qIRgVIEo+7zuWWfl4x0gtDrJkED+NLJ5yYnOUttXpqJaQmr+ms4JOtH9H1Fp40+CAAYGqw\nEfNRP3yto4CkGI7eTZ5mdAY6QbEQYCf74JLcFkICFmxx/OuM1FqVqmio4NIQj/MWXzCIsmFxy0Ug\nwBdu/VrefFPEiy9KZd/fcgq75ZDFUigXAZ7Pcz+6ahEIcPm3ojB85CMqJIm3JZ96SsFNN3H13k03\naQtDuIsvSTohhULMjgm/CmET0jWC2Vli+dQpitYBy+Xi0CHu0KzvFygKwdmzApJJ4MCBUr+1ctA0\nYD7JV9lU3A01L+Jn370Zw9/+CyDRDH/eSkjhAoNVbwEhaVRDnbMeClXAxnZbnuPa/CYAoEHbAo1p\nCLlDaPa0QhYcEImIHWHu3ODz8ZRXnQQyGYJGdyMkgTOMLDpK3CIALsGemuKZPoEAg8NRm0UyGOTG\npvE48NJLMt56S8JPflJqo6MTUmEirT7HVAuUIyRRrM4GqRB33EHR28vQ0mI+VrjXtG8fb9tduGD+\nkWoaSuI2Clt2y521srH2YRPSNYJycdiFHmnLwfvvC8bCoEMQgMlJgtOnBZw9K+LVV8VFQ9fOniX4\n8Y9FnHrfA00lyCSc6D/egXxWBqgMx8E/BsmbyWuKlrdEUPgKpOB+ZwCP9jwGAiAzthmQk2i564fY\ncvMAcPM3AAAN2iYIRETQEQQhBLvCN2B7eIdBOILAP8mbhMQdv3XvujpnXdmh2HgcRmx5pTjtlaC+\nntsHvf22uWqXqx6KKyRKzWHTWqAcwRYKKKqFKAJ33VXZreL227m7ReE9fuc7Mr7yFYdlf3JmhisK\nA4GVSdttrG3YhHSNoNwGeTmSqgZnzghlM33GxwnOnBEWqi8Bp05V/vM6c0bE7KyA0UEnzh9phSBQ\njF0wKyB58EGoimhuhoNajE0bXPWgjEKlKm5s3gNZlBF01iMz0wiEz8Bx699i+22XkBAH4KIhOBCA\nU3QZ+0c+jwyXaFXN1dUxxON8v0132m5081JAn4UqrvxmZrhMHOCtsloRkj6LpCfAtrdTTE6WxjSU\nEhJDd/fqVkiNjbUjPB3d3QwdHRSRiIBMBpifB86eFRGJCJic5PfIGH+/ueTbal1k4+qATUjXADSt\n/ExLJkOWrY6bn+cO0OUgitZ9qkotwVgMmJkBGKPIaxomh4LIJJ2ITQWB7tdB6gehznSCagSqwod6\nJMFhGUztCvRAoXn4HX50B3sAAH6lC1SVIPgjGHb8DG95/hAZIYIA7QIAuCVzde3spAiHrQva+vUU\nlBIMDQkv235ZAAAgAElEQVTGwr/e34VWbys6A51Ip4G//VsZ8/Pmc5JJM9cnGKxdy+6RRxQjzvzG\nGzVs3swzhAqNVYHClh1Xsm3dSsuSyEpRfD+aVjmC/fJeB0bW0siIgL4+c5hLN16NxTj5t7TwGaRa\ntiZtrA3YhHQNIJnkrRxF4eIGnYQoZYaqqVpcvChUHTUQjQplCe/gQREOB0FGzUBjGkSJYeLiQjtu\ny78i0JBGLuNAPiNByfGFyVs0lOp1eOGXA2gtEDo00xsBAB4vbw1NSYcBAEGtCwDgKIgfd7tLF1bd\nw+3CBR7XzRiwLrAe93U9iA31m3DunACPx+pMnU6blabPx2qm/NqwgeGZZ3L47d/O45FHVGzcyK/t\n7FnrP9m5OV6ZSRKQzzNs317b6qXYmke3RVoNbN6sExLBxIT5N3biBP8b0JWc3d0UTiexbYOuQtjp\n79cApqcJ3npLxM9/Lhmx2M3NFJ/4hILZWVJ26r4SiveOFoOmAdEo0NRkPjY0RBaC84B4fh4QNBwS\n/gYXLzwDABA2v4rw9BcwDyA170Ym4YTHn4fXUbphcEv7bZAF8084Os37ZS2eNgxRLxSBb2LVa5sA\nAE6Rlw6qyltcbjfD0aMiHA6eM9TTw4PjBgYEqCpDNguLPc7EBBeG6I4CAK8ydULyepdvaloJDgeD\n3w8jAZYvwgxnzgh4fMG+T1H4PuD69eZMTy3k3sXXoUNRGG69Vb1sJ4pKuP56fq/Dw4KRQNvdTTEw\nIOCrX3UYg7Pd3dQWNFylsCukawBzcwRvvGGSEQBMTQn4/vflZRGMfq5q4XAAY2P8T+zMGf68/n4B\nkrQgHFAyOO76a1w4FgYd2QtseAVdni0INvABqXTCjdxCgqtfDpScvyvQZYmm0K10fE4XHpz7Ieq0\nXnTlH8A69S5oTDOUeXq7JxTiSi9VZdi9W4MkAeEww/g4AaWkZI9tZsZMcNWRThOjhVfLCqn4078k\nccKcmRGMlun0NL/O1la+kK+GjU5DA4x5tVAIFpVcrdHZSREMMgwPC4hGCfx+ho99jLcux8cFOBwM\n+/apaG+3Xb6vVtgV0jWAU6dE5PMEt9yi4tFHVeRywIsvyjhxQsT58wS7dlV3nnye7yEtZ+M+FuND\ns2++KaGnRzHEFZH5FJ5/zoUp56cgzuyABoZ77s2jPvs5THq5FDybckBR+J9owBms+Bo69DZPwE8Q\nbsnio9H/afyMMtXYgxJFbjmjZw8JArB7N0Vfn4iODoajRwUkkwSzs0Dzgsfd/DwXOjidvAWayfDq\nKZPhLTu3m+8fOUrndVcEl4vHORSq2drbGc6c4RY7mzdT43711uNyKt1q0djIwBgDQJY1e7QSBAJc\n2MD3jwi6uijWr2f4oz/KIZ0mFhGDPRR7dcKukK4BHD/Of809PRQuFx/g7O3li8vp09X3X86dEyCK\n1qphaIgY5y+HkRGCo0dFOJ3A6dOCUXW8fTCLqXO9wImnoY3tQn1zHA1ePwgIXL4FQko6oeZF5LU8\nmjxNFV9Dh75ANzcRNLTMoyg9wpB4ezymbPmGGzT09moQBL4/oi+6Y2Omeo7fp2CQjSwTjI3xvbhU\nitsGBQIMokhqprKrq4PRttJReG38fvXgPLpwX7V57UI4HPy8uZyZk7RaaG5m6OoyX0Ov+DyeUkWd\n3bK7OmET0jUAXZlV6G+2bl35TfLFMDBgHa5lDPinf5LxT//kwJtvlic2QviCLQjA+++LUFX+vHN9\nfstx7RsjxtcuD+8RZVIOKFkJIEDYvTQhRSJ8oe5okxAIJ6CqZgNAFERIC/tNhb5vnZ0M27aZFYZe\nbXDXb/PciQQM3zRR5IaqySSvlrJZLkWWZdTMW83n0ysTE7r/2+go/yVcuiRAEBhaWxkUZfVk0Dzj\nCTXx6VvqdXbtMmeVFkvZtVt2Vyfslt1VDkrNhbrQXqatjUEQGAYGrERy6hTB9u2l/9j7+gTDJkjH\n0BBBLMYXx5dektHezqfxi6E/RxD4J+4XXxQRHQsALccQ/MT/hX3xv4G3LmYc7/LkAcKQTTmRy8oI\nOoKQxaVLj2iU3+eWdfWIulOQZHPMXyLmhVeSCwcCzIh+iEQEzM4KwILFULHzdizGIxL0ii8UYmV9\n31YKtxsl1Wh9PYPPxzA0JCCV4sF13d08pC6bXT0ZdFPT4qmvtYIg8PbjRz+qIp83BR3FUJTlO0XY\n+HDArpCucszP88XT62WW+RRJ4p+oJyaIsdgMDhIcOVK+0rl0iZQMw+qzInfcwRd+Pep6MUQiBG+/\nI8HhjwO/+gmEvPUItSYtlQUROCllUw7k0nJV1RHA79PlYmisc8MluuDy8UpL0wSs3xgHwPdl9HiH\nYgSD3AFAlnmCaSxmSuSLCWlujld+usAhFKpteqkglFYBhHAz0vl5ggMHRDBGsHkzryJWUwa9bx/F\nrbeubrtOh8/H8OCDKh57TK1YbVLK7GC+qxQ2IV3lGB8nmJsjlupIR1MTt6cZH+ftqZ//XEI+zyXQ\nhUgkzCqrEHrL6L77VMgyw9tvS/hf/0te1LT11VclMEogP/AnQOMFrFfuKXucy5tDNuWEqNahM9Bb\n9phizM8TeDyceAPOALwBPt1a1xzH1p0JfPzjKp5+WqkYzRAOmw4AkQiBovD7prSUkFIp3u7UlXcN\nDbWtkIDy1jh6NMVPf8o/HezYwb9fDUHDB4Fq9sHsHKSrF0sS0sGDB3HLLbfgqaeewlNPPYUvf/nL\nmJiYwFNPPYX9+/fjc5/7HPKXm2NgY9Vw7JgAVS1PSPo+0vvvC+jrEyAI/B/76Ki5+EajwIsvSoZU\nG+BquyNHBAwNCejo4FJnfajx7FkR3/qWo+zAbTzOX8vdMojUtv+BBnULQtr2stft8uahqSJ6PTvQ\nKHZWda+JBF+onE7u4h1qm0c+K6GtZwZO0QG/v3KsAaDP8DCEwwz5PEE2y4USiUSpyafDwSXXhe7T\nta5QyrlZ792r4brrNGgaQUeH6TZxtRBSNWIF2+X76kVVe0h79+7F1772NeP7P/zDP8T+/fvx0EMP\n4atf/Sqef/557N+/f9Uu0sbKMDFhGnIWExJjvLL58Y9lfPe7MiIRAU4nwyOPqBgfF7BhA28FHTki\nglJrdfDKK5Jh+rl7Nz/uP/5HBeEww9mzAiYmBLz7roh77rFuSl+4IIAxArL9+wAB7kj/BTRFBAoW\nckq5u4NLl35nCQYGBKMSYIzvIRTLq7NZIJcjcLspPB4Gr+RFQ+sYNuweRX1zEi5p6bafw8GJRn+v\nYjFORpOTBA4Hr4qOHROxb59mDIdGIgSEsJrvIQHlF16XC/it31LQ369Z5o6uFkLyeLgF0mLiEFth\nd/ViRS27gwcP4t577wUA3H333Thw4EBNL8pGbXD8uIh43CQkQhhaWnhY2o4dFI88osLjYXj9dT6T\ndPiwhH/8R4chn2aMD9AWIpMBDh0SQQjDZz6Tw+23c9LxeoFHHlHxmc/k4XTy9l1xVXH+PF/F073/\nggZ1K2R44KvPQFPM1wiEkli3eRouL6+6k0mzYsvngddeE/Hzn5fuVekDu2433wvyO/0AGNp6Z0AZ\nrZhlVAy32xQHxGJctKCrBL/7XRkvvCDj3XfN149EBNTV8dmsWnrIAVzZppURmhHC84UKRQy1dmj4\noNDYCEtwZDnrKbtdd/WiKkLq7+/Hpz/9aXzyk5/EO++8g0wmA8fCR9RQKIRIJLLEGWx8EIhEBGPT\nvaGBobOT4f77Ndx4o4Zduyjq64FnnsmBEIbmZoq2NorBQb7n9PLLIi5cICWk8t57fMj2wQfVsp5m\nbjdvK8XjPJW2EOPjBLJDBZqP83wilaBj8zT8DRlQSqCqAjbeOIz65gRkJ1+VEgnuHA7wdt/kpIDR\nUVKSdqvfp9vN4PUCrd52qIxfvEIVdAer24dyu2GpkObm+H+UAv39uqcav55cjg/FhsMUlNZeirx9\nO8WGDRqyWQZFqXxu3QrpagAXKxTaFZWSkt9/ddyrjVIs2bLr6urCZz/7WTz00EMYGRnB008/Da3g\nY1vxrEQ51Nd7IEm1McAKh/1LH3SV4HLuNR7nn9qTSf59e7sDXV0OhMPA/febx33pS0B7O69EXniB\nJ8Gm0y5kMsDx46WzJwcPcoXeRz8qw+crL8W++27grbeAgQEH7ryTP0Yp34/yNc0iJjA0iN1wOh1Y\n16PC456ByxPAlr3jkGQZlFL46jnj5HKOheFM3tcLBPgilcvx69Zx/Dj/f329hPXr/RAEP7ZmNmIy\nOYmwVIfOtuaq3reWFqBjwY0omZThdsuYnbU6nF+8KMLnExFbUKq3tYlwu0V0dwPhcOk5i7Gc3+sT\nT/BW4alT/B7LtbIyGWDjRv7erDWs5G+4ccFnl1LgzjuBw4dhtEgVBdiypbr3+UrDXpsuH0sSUnNz\nMx5++GEAwPr169HY2IiTJ08im83C5XJhamoKTU2L9+djsWVaSldAOOxHJFIh++Aqw+Xea18fQS4n\nYXpaBiCCkCxcLgXlitmeHgEHD4poaBAByOjvVxAK8Q8dhYq7SIRgctKJ7ds1MKZUjKHw+QCXy4n+\nfoZEghPL3BygKC6IdaMAADkfAhPSyGTTaF5P4fRHkclSYOH1/A3JhddUkc2q6OtTMTwsIpXiK/KZ\nMxr8fvOj89GjEgA3nE4FMzP8JA1oxdn4Razzh5bxXgqQZRGAC1NTGpJJbpfAHb55VyCRACYmshgc\n5I/V1SmYn9eQz5d/fwux0t9rSwswOyvB4ShlJEVhSKfVFUXIryZW/jcsIZEgyGYZmppUhEIiRkZ4\nVZrPMzid6pLv85WGvTYt7/mVsGTL7qWXXsK3vvUtAEAkEsHMzAyeeOIJvPrqqwCA1157DXfccceK\nL87G6iAe5/se+mwOt18pf+z27RR79qi46Sbe4ipU2RXi3Dn+57Jly+IzKYLAs4UiEcFQ20UiC39q\n9f0AAA9tguhJQmMacmoOomQ9Z1u73rLj80/T0wQXLxL8xV84cPiwUGLyqrtRhELmebqDPaBUQ6O7\n+o/T27dTyDKDx8MsJqq6cWtnJz//1JRgSOHDYb4/V+s9pEJ4PNaY8kI4nVg1B+4PAnpLzu0mcLuB\nPXs0uN1c7BAIlApabFw9WJKQ7rnnHhw+fBj79+/HZz7zGfzpn/4pvvCFL+CFF17A/v37MTc3h8d1\nP3wbawbpNLEkbDqdi8dO79zJ8MQTKhwOhgsXyh/Y16cTUmVLFx368OnEBEEqxTOQAEBtOA0AcKnN\neGz3TvQEe/HEdU9YYiQAYN1CpIJOPMePi3j2WQemp8u7lOt2Og0F2gWH6MCNLXvRW+X+EWDmJNXX\nc0LSO9J65MT11/N7n54mBsmGwwySRFZ9oaw0DHq15QLpikFdTef3Ax//uIrOTop9+5b+27Px4cWS\nLTufz4dvfvObJY9/5zvfWZULslEbZLNYiOMmaGykVS1a9fXApk0Up06JmJ0lFhVXMskl5J2dtOIn\n9UIUWvD86GUBI8MigkEKddPzkJkXm3tduOfmJgBNCAf8+Fjvx/HD888BBKCM4u5tPfh6PTVSZyMR\nYuThMEZw4oSIX/s1FYLA1YC6MlB/XR27mm6o4t2ygt8jw9iYgGSSL4iTk9ztQh9M5YREIEncNaBW\nSbGLIRBgGB8vffxq83Wrq+OOGoXiBUkC7rrLJqOrHbZTw1WKTMb8BN/YyIw47KVw6628bffGG9Ye\n0NtvS2CMWMwvdYgiQ0MDtaih9IHNgQFORgDwsU/1I+u9CC/C2Heb1Q7C5/DhxpY9yGk53NZ+Ozas\nq0dTE0MyyU1M33+fn0Ofe5qcJMYe1syMWUkVx5KvBJs2MYvSLp/nwYQtLRRNTfzxqSlOSI2NzPDo\nW22Ew/9/e3ceHddZH/7/fe+dTaMZbaMZ7ZbkTbZjectqZ49D2ixNQggkNSkNlJSWkxTaAyGFlML3\njwJhOQXaX0MCybdf0jQpJkBa0mwkJsH7EjteZMuSLUvWvu+z3fv8/riekWXJtmxLljT+vM7hRBrd\nGd1nhqOPn+f5PJ+PGpP1CKk3QyovV8Tj0vPoUiQBKUUNDWnJYqN2QJrY8+66K04oZLFtm0F9vUZd\nncaGDQZvv+0gPV1x1VVjA1JBgeKP/sjENEf+gCQCQ6I23tLrD9Pp3klcGyLHHSTTPXaatSSwlFvm\n3MqC7Ao8npHq5C0tenLJLPH7Ozvtkkdg9weyqzSoccvtnCunc6SKRXe3RlubhlIaeXnqRPsOxeHD\nBpGI/RhcnIBUUjI6JToh1SoXuN125YtE8BeXDqn2nYJiMTsbKRGQgkFrwlUEQiHFmjUmv/61kx/9\naGSX3utVPPxwdNyN+0TrhezskTTz9HT7OYmeQnmlXQwa9npTrjeH3LSxGRaapjEva37y+zlz7KBQ\nV6fR2WkvmSUCRUeHRkuLzuLFJn19dhJHZubkLZ0llua6urRkX6JEa4pQyKK31w60ifuZ7CoN43E4\n7CrXiQ61CZMRhGeae+81J62Vh5g9ZIaUggYHwbI06uv1E9UZJj5Dys9XVFbGk0EsJ8dC0xQf+1iM\n8vKxf3QjkZEGccGgNaqyQPnckfWlrOAAA7qd8l2QnTnuDOlUV10Vx+1WbNzooL1dJzfXzmTLylK0\ntek0NOiYpt0EcHjYLvkzWQ3yEs3ouru1ZIZdfr79WGJWBCNZd1OZYXey3NzRe2SxWOocij2ZBKNL\nk8yQUlAiXbm+XqOgQJGWNvE/mF4vJyo4jJRCMM3TpxUbxkg6+bXXWqSn2xUVDEOjYH4L+/eVkJnb\nj6ZBv94AQEFGKNlO/Exyc+2Orlu22P83TdRuKyy0OHDAYGjI7t+U6HpbUDB5LcQTzeFOzrRLzJAS\nnVs1TSWb5k10j+5C+U85wmFZalRNOyFmMwlIKai/X6OlRSMe1ygvN4nH7X2PiQoE1Kh2E2c64+Lz\njaST6zqsWmXR3GwvsQXmH2XlLYPkl3cC0GPUAlDiK0HXzj45T09XLF5ssWWL/X0oZFFebrJ4sc6B\nAwadnRrbtjmSrbwLCia+NHk2RUV2kOnq0ohGNfx+layhdvnlFoFAZNSZmIuVWJCXp4hERv6B4XTa\nZ3WESAWyZJeCwmG7VxFAeblFPM45/Sv6XFphj1dXbNEii3A0Tjg+zLwVjaRnhrEw6TIOkq2VkD3B\nQqceD8ybN7JEdeWVdoXrpUtHUq/dbpLp4Hl5k5PUAPaSUW6uorXVrgeYWK6LxeyU5LlzVfJ9sqyL\nV4E6ELA7/Sb4/UqWt0TKkBlSCkq0bAA7IBnGuVVInjvXYs8efdwyNafKyBj9h3g4NkxuYZywpaEz\n8vxe/QimFibfuQDPBJbrwN4rcjjg05+O4vHYqetz5iiWLEkEJB3TtKiq0vH77VTtyewkGgxayQO3\niX0jj2dsb6Ro9PRt0Sebw2EnMSSKy8pynUglMkNKQUNDUFenEwhYZGbaByfPVKXhVIHA2Qt1KqXI\nzbUoLx+9yf4/R37DB+3bcWZ0Yugja30tjm0AlKRVTDgg5eQoTFNx2WUW8+YpPB4Nnw8qK+1Ei9pa\nnZoancFBjeXLTQxDTery1clJHGVl9jgzMuylwZNp2uTNzCYisfxqWWMPAgsxm0lASkFHjugMD2uU\nlSVqgp37ayQy506noEBxxx0mhYUjjw1GB+mJ9FDff4yopyH5uMKiwfkuunKyJLAU7wQDktcLhqGd\n9L09ntxcRUWFRV2dzsaNdtC77DILp1ObtCw7gKuvHpkKLVhgvx9+vxozK3Q4tIt6ODWRVWeaivnz\nZYYkUocEpBSUqDmXOEtzPgcnS0tV8vzNqeLxkdc+WU1vDU7djghazjHicYM+/Riv+x6mz6gjP3Id\nuQGNdOfEusnp+ujstZNP7l9/vR0sDhwwcDgUZWXWpGe6VVZaZGTYr52YAZ2c3JBwsTLsEgIBxfCw\nnfV3sdLNhbgYZA8pBdXW2rOGxHLa+XTYLCqy92/Go+uMeyapa7gjmT2XmRNF100Ouv6TQb2JNCvI\nqvhf4/A0kOmZQDG8E9LTRw6CnjzTu+46k2eftb8uK7NwOs9vJngmPp/i8ccjySxDy7L3zNxu+/xP\nYjZ2sQ+mzp2ryM+PSXadSDkSkFJMJGI3wtP1kfMp55MBput2Zes9e4wxad95eda4qeA9kW6UUoTN\nMM98+P/RltlDROvDZxbxR4P/F3/OMHErPm6VhtMJBEaqIpw80wuFFHffHaO6Wufuu+3Z0mTXPsvO\ntt+HROCJRu3lQpfLPv/DiaSNi5Vhl2AYY88jCZEKJCClmP5+6O7WycpSGIZ9qPV8Wz6vXGlRU6MT\nDo/s4yhlZ5wppdjbvoelwWXomo6lLD5s381z+35Ksa+Yhv76xN9rFkU/iYaGL2sYp+4k3THxKUVh\noaK62s4uO3lGEAjYJY5uuGGkNMRkL1/5/epER2R7IIah8PvtgOBwjLwniXYJQogLI3tIKcaugq0l\nN77j8dGlbs6FpsHll5uj0pyjUcWCBSa/PfIq21u3sblpEwBtg228WPVzhuNDHO6pBuDytHtYOfwY\npbGPEI8ZhEo78TrT0c7h4Expqd0sLxZTFBeP7FsVFKhRxVyVOn2/oPPl8YCuj9yr220HRk0bma0p\ndf4BXwgxmgSkFJM4EJtYrtN1u6X4+Zo3b6QVg2XZFafrI/toG2rDqTs52HmA7nAX7zS8RXekO/k8\nr8PLzfn3Uh65Fw0Nb0YYry9GYIKHYhMMA264IU5ZmTWq+Z7bPXrZKhodKcY6WU5eroPRM7TErCgW\nm5yWF0IIWbJLOQ0NdkBKBBGv99zOII3nyitNDhzQcTjgxhtNXqk5gONEh1en4eRwdzW/q38LgD+/\n7DN4jDTSHGn4VRgzrqO7TNIzhwHI8mSf8+8vLBw/Db201KK62kDT7BI+E2kceK7cbkUkMnavyOez\n+zC5XKdvDS+EODcSkFLMSCvvRELDhb9mcbGiuNjeqzne30BfpBen4UQpxVB8iMPd1Wxp2oRTd1GR\nvRiXYRd4M80YmnbiLJQ/QsyKkefNv/AbOmHZMov9++2KEicv500ml8tOFIHR72UiOAWDlpTuEWKS\nSEBKMYlW3iMBaXKXk+r66pLB6KVD/8HO1u3cOuc22ofbqMxdlgxGYCcBOF0m8ahBRs4gDs1Bkb94\n0u4lPR1ycqC7W7Fy5dS0t7b7K9nv6clZfpmZ9jktu2meEGIyyB5Sikl0Vp2qgNQx1A7A/s697Gzd\nDsDb9W8CsDJ0+ZjrnZ4YCvDnDBP0hiZU5ftcLFxotxXPObetqQlLZO5Z1uhsutJSRWGhlayrJ4S4\ncBKQUkx7u55MT1ZqcgNS3IrTHbZbSbzf+B4aGhXZiwEoSC9gae4ylFLErZG0PHdaHE96FN0wyU8v\nmLR7SVi61OLOO6dmdgQjnWCjUUa11Ha54PbbzQvenxNCjJAluxSiFHR22infup74Izp5r1/fdwyF\nHZiO9dVR4Cvks5Wfo3HgOBnuzOR5pGJ/Ccf66vA4PKRnDqNQRK0oC7IXTN7NnGQqg0JihqTrSg6j\nCjHFJCClkO5uGBzUTupoem69jc6mabAJh+6grvcocStGecZcFIoCXyGGdqJcUeZcbiy5mb5IL/s6\n99JX1EAknEuOOwe/6ywlxGegRNFUn4/TllISQkwOWXBIIYcOjU75zshQZ+z2eq46hzsAONhVBdjB\nR9d0SjPKsJRF1IyyJLDU/t3uTCqyF+PO6CN/QSM3laydvBu5iPLzLSKRsX2fhBCTTwJSCqmqGp3y\nfS5ty89GKUV3uJu4FWdry2Y8RhqLA5dRkF7IDcU3AfY+UtAbTD4nkBbA50ynPC+bgDcwafdyMQUC\n9nLdZL6XQojxySJECqmrGwlISk1uN9GucBcxK0ptz2H6o31cV3QDLt1FKD0fh+7ggYp142bQLQ4s\nJS89b9Lu42IzDLtCw2SXJRJCjCUBKYU0No4EpGhUsXDh5KUkH+9vwG242d22C4BVoSuIWVGK0osA\nSHOO3wtheWjFpN3DdFm92kw2OxRCTB0JSCkkcSg2O1uRmTm5LQp6It3EzCj7O/eR4wlQ4p+DpSxy\n0qboANAMMl7vJyHE5JM9pBTS2qrjcNjpyYnEhsnSHe6iqusAETPCiuBKNE1LpnoLIcRkkL8mM1hP\nD6xf76CpaWLXd3Zq5OQoNG0ksWEyKKXojfQm20oszV0GgM95kVulCiFSmgSkGWzLFoOhIY2tW8++\nstreDkND9qHYaNTuFzRZBqL9RMwITQON6JpOoc/eN0p3XUBfCyGEOIUEpBnKsqClxf54eno01Fni\nS1WVfeDIzrBTk3ogtmWoBUM3aB5oIs+bn2w9cS6dX4UQ4mwkIM1QtbV2+3Gwm8D195/5+qqqkaKq\nHo+Gy3Xm689FX6SX7nAXUSuanB2ZysTnklo6QojJIwHpIvrD8fc42lN71uuUgk2bRrqVulzQ1HTm\npjvHjo2kfJ9clfpCNQ4cpy/aR9NAIwBFJwJS3IwRSpvEQnlCiEuepH1fJO1D7RzsOsDxgQbKs+ad\n8dojRzQGBka+13Xo7taA0weao0ftJbtQaHID0s6W7bQMtiQDUmG63c/Iabjxu2dfbTohxMwlM6SL\npLbnMC7DTX+0n95Izxmvra7Wk7OjhI6OM8+QGho0NE0RDKpRjeQuRNSM0jHcgcfhoXHgOEByyS7k\nDUrKtxBiUslflIukecDO3XYbbmp7ak5/XfPIAdeTdXbqWGcovNDYqBMIKBwOuzL1ZDjYVZUMOk0D\njWS7c/A6vQAEvbO3HJAQYmaSgDSJ9rZ/SMdQx5jHu4a76DzR2A6gO9x92teorjZwOMYGJMuCjRvH\n/7g6OjQGBzVCITWmkdz5ippRDncdQtd0+qJ99Mf6k7OjaDzC3MwzLzsKIcS5koA0SdqG2tjesoUN\nx3+HOiVH+8OO3biMkbS3njMs2bW0jL8053BATY2RzLw7WXW1/TGGQnbK94UWVVVK8WrtrxiI2RtZ\np06N76sAACAASURBVCY0pLvSCaTNzurdQoiZSwLSJKnuPoRDd9IX6WNfx97k48OxYY71Hh11bV+k\nl5gZ43fH3sK0RiJMT8+Z07vj8fH3kg4csD/GvDyF18sFp3zv79hHf6QfTbN/18j+kZ3QEPLmX9gv\nEEKIcUhAmiQtg/YekUN3sLttJ+/W/w6ATU1/QBtn8/+/qv+TY311VHcdTD5WXa3jctlBoKYGNmww\naG0dCUBu9/jp34mAFApZk7J/dLDrAIY+0tmvoe8YAMW+Yixlzep2EkKImUvSvi+ApSx0TSccD9M9\n3IXbYfe7VsDR3iP0VPfQHe7CYYx+mw3dwLRMHLqDxsFGFudeBoxUZmhr0/jxjyEcdvLb3yrWrYux\ncqWd0dDZOTYgJTrFhkLqgjub9oS76Yn0JJcYlVIc7TtCljubLE82ETPCvKwFF/Q7hBBiPDJDOk+H\nuw7x0sH/IG7Fqes9gtMYvU7m0B30x/qSwShmxdjY+D4ftu8edV3LYHNyz6m1Fd580+D733cRDsOC\nBSZuN6xf70zuHY23ZNfQoOPzKdLS7C6xMTNGzxkSJ844ru7qUftd7cNtDMYGKc+cC0C600uaY/ze\nR0IIcSEkIJ0HpRS72nYSNaN80LaL1qHW057Jqd1TQHjQyX8depFf1aznhQP/PipYRMwIzYNN9PTA\nv/6rmzffdOLxwLp18MgjMZYtM4lEtGQg6u+Hffu0ZKkg04T2drvKdywGubmKrc2bee/4hvMaW+OJ\nBIaEhv56AEozygDwueQwrBBiasiS3XloG2ylP9qPy3BR1XkAU8UxNGPMdV0tflqO5NKpavmg1+60\namGxuXkTt5ffCYBTd1LTU82eX5XR1KSzfLnJxz4WIy/PQ3//SAp3a6tGXp7C6dTYts3+2JSKk5EB\npqmRk2OhlCI/X7Gx9hgDsQGGYkPJc0MT0R/to324DbfhTj6WSGgoOpHQkCEBSQgxRSY0QwqHw9x6\n66288sorNDc382d/9mesW7eOL3zhC0Sj0am+xxnn+GDDSctaatxgBNB+PAvDYbG/dwcA6xb9GQ7N\nQVXX/lHX1XbX8MLLETRNcdddMbwnxZC8vJGABHYZIYfD/l9zsz6qhl1mJsS1IQZiAzh1F0d6T38A\ntz/Sx1BsaNRju9t2jQpGETPCjpbtABSkFwLgd0pBVSHE1JhQQPq3f/s3MjMzAfjRj37EunXrePHF\nFyktLWX9+vVTeoMzUVe4a0LXDfZ5UJgctTbh1F0szV1GaWY5TQONfG/Ht3mj7n8BiEc8HD2cQcmc\nONnZo18jL89OZkgkPJysvV1j27aRgBQIKHs/S3ehazqtQ23j3pdSit/U/ooDnfuSj8XMGEdOKfz6\nas2vGIoPEvAE8Dg8mJZJtif1W5YLIabHWQNSbW0tNTU13HTTTQBs3bqVtWvXAnDzzTezefPmKb3B\nmUYpRcc4f+g3NLzD/9v/PH2RXgAsU2O418Nxx3sM6c0sz7kSl+FiQWYFYCczvHXsdT5sPkTL0QAo\njZy8gTGvm50N6ekqORM62fCwxtatxonr7IDUFe5M7mc1DzRiqbH1hmp7DhM1o7QOtiQf+7Bj95jS\nrYe67ZT0u+fdB0BcxQhJyrcQYoqcNSB95zvf4Yknnkh+Pzw8jOvEyctAIEB7e/vU3d0M1DhwnKH4\n8KjHwvEw/3PkN3zYsZufV/07Sin6u9OwlOKg+0VQOiuc9wJQ6byT8vCfkG7Zh0u31Ryh8XAQAH9u\nb/I1+yP97GnbhaZBWZlFT49GzykFHgwD2tvtjzAQsCgutjjSc4Tf1b9Ff7SfqBmlrm/0odyWgWb+\ncPw9HLqDtuE2YmYMgPq++lGJGT2RHnoi3VwWWMpluUsBe79LmvIJIabKGZMafv3rX7NixQpKSkrG\n/fmpJXJOJzvbi8Mx/j7LuQoGp3cPY3dfIzmZo+9h3/EPkl8f7a3l6FA1WZFbGMjYQ69xlDLzVrKM\n+fj9bbQM5bNG/xJWPM4vnHfRFK/CvctOqfbldePzlWIqk63HdxLTo1jOCBUVHvbvh7ff9vDww6Cd\nlPnd1gZeL8yZ42HeAgdff+XvGYoNMWj28clln6RTNXF1cEXy+i1dG8jMtIOKaZm008Ci7EVEHQP4\n3Z7kdYf67WSGiuBC/H778TRHGqHQ1CQ1TPfnejHJWFOTjPXCnTEgbdiwgYaGBjZs2EBLSwsulwuv\n10s4HMbj8dDa2koodPYmbd3dQ2e9ZiKCQT/t7WdpnTqFlFLsP34I85RlsE3H7GXLzyx9hOf3/ZT1\nB37JvY4bONy3B459hsLy5bQ1OsmfF6a5wUEkbM9KAvpSWh3bOXbYj6ZZ6J4edtfvoz/eD4ZJPGpR\n21bHsmUVvPeeiy1bdK68eoDSEgf9/eDxQHu7mzlzFIYR4Ze7/jeZqLC9aQd3lN5DX181K/zX4DSc\n9Ef72X+8Gqcx0tvi99Wb+LD+IMODcSLayLiqWg8BUOApob8/DIA7bWre/+n+XC8mGWtqkrGe2/NP\n54wB6Z//+Z+TX//4xz+mqKiIDz74gDfeeIN77rmHN998k+uvv/68b2y2aRtqYzgexmW4qOk5jMfw\n4HdlcLi7mtKMMpYElnJ1wWq2NG9id/wP1D/zI4hk0HHFUUJr6qg/GOTtn19FeNDN6rv2EnQtp1Xf\nQV+HD3/OEFk5EQKV22nbUkqa1w4aXeEu5mdZXLe2m1+/HOA3r8VQYS8NDTrLlplYlkZBgUlGhuIX\nh18CIJgWon24jbq+o8zNnMeO1m2sLryWnS3bRwUjsA/sto1zjqqu9yiGZlDsH5kdZ0hDPiHEFDrn\ng7GPPfYYv/71r1m3bh09PT3ce++9U3FfM1LLYDMuw8V7xzfw9J5/4V92/5BXa3+FQrEqdAUAt5X+\nMU7dybbDxyFi/wFvOFSAYVjseGMJrXW59Lb72b1hIbnx5dBTjhVzkxkcICuvj+y8AeYua8KMnzj4\nqkwaBxrxFR/DcJjUH86mocH+2D780F4GraiwyMpSfNC6E0MzuK3sdsAuX6RrOlWdB3jn2Nsc6atF\nKcUvq/+L7+/4DnWnFH0Fu+3EW8fe4PhAAyX+OTj1kQDmd2VO3ZsrhLjkTfhg7GOPPZb8+vnnn5+S\nm5np+qK9xMwobx97E4C4FWNP+wfoms6K0EoAMtyZLM9dxY4DHwPAG2xlqD2P3g4ffR0jCQEtR3MZ\n/n+fQi/yYwF68ADpWfbSWH55N+npbg5/6Cc67KK+vw6lYP6qBg5tK6N0YTcBXwa7dhkYhmLuXIuY\np5H6/mMU+opZkLUQsPezwC5jdHygAYfmoLanhs3NGwH437rf8tfLH8VUJh1D7dT21rCx8X1ah1rw\nOrzcNfee5P1GzAgF6QVT+wYLIS5pUqnhHPRGetnXuZeh+CC3lNyKoTt4p/4t7pz7J6Q7R8psX+67\ng51N14C7nwWVHex5J4+eNj9drfY1ax/cxY63F9DblgFtfw7Ascq/Ieb/KGBn3BXO68Gd2c6utyrQ\nlY7SFBWr95OeMUzRwjYKvWUEg4UUFioMQ7FlcD2mMinNKMXn8hHy5nGsrw5TmcmDu13hLv7z4AuA\nnTFX23OY4/0N/Lrml6Oy8a7Iu4p75n+UNMfICV1D0wl4pAeSEGLqSEA6B33RXvaf6HW0Mu9yCtIL\nWTvnIzj0kbcxPOgk0rAc1TmP3OIeckJ2kkFPm4++tiy8XsWi+R4yC7fQWhdg4yurcAcbiIT2c7h/\nPkVZtyRfy+U2WXZTDXv/UMIfHP+HTsd+1i7/N9yqkDazmsuvd9AX7cN0ZLO3axsAJf45AMzNnMeW\n5k00DTQmH3v72Ov0RLpZU3g9i3OW8LN9P+GFqv9Lx3AHRb5iVoYuZ2VoFZnurDFjz/YERrWkEEKI\nySYBaYKiZpTucDdVXQfI8QTI99rLVycHI4D6g/kc3V0CaGQF+8kMDgCK1vocBno9LFxoMiejFK/T\ny8IVOrpjO86Mdt4BqroOcFPJLWxv2cprm/+b5cGV3DPvPnpC/0tLvx1wqtwvcGX4cQxNp6pjP5qu\n06Uf4viJmnNz/KUAlGWUsaV5E7U9NZT459Af7WdX605y03K5d/59aGgsylnCwa4DAHx0/v2UZZaf\ndvz56dKUTwgxtSQgTVDHcDt72nYRMSPcUHxzspvqyfq70uhozKCvy17qygoN4HBaZIX66WmzExxK\nShSGrpPjysfhUASLq9Fxk2cs5EjPYbY0beKVw7/AwuIPje+xNLCMJrUz+TuOOd9mUXQdfqs4OWPJ\nyDBp6D9GmiONbE82986/j8HoADo6u9t2cVPJLWxu2khcxbmu6MZkRt1nKz9Hd7iL4fgwhSfak48n\nZsYoz5g7ae+lEEKMR9pPTFDjQCO/b9yAoRmsLrx2zM+7Wvzs+8NcdA162+29oqygnaufX96ZvK6w\n0OKaa0xcLtA0Da/Di1Kw3H8TCsX6wy+jazr3L7kfgF9Uv0TV4DbcVg7XDP0DaBaHXb9Mvp5SEEk7\nSsdwB3P8ZQTSgmS4M5mXPZ/FgSUcH2jg/eO/5/3GDaQ5vFyZf/Wo+8725JwxGAE4DRd5MkMSQkwx\nmSFN0Ft1b9Ad7uK6ohvGbcFQX5WHhYWmNHra/Gi6RUZgEIDihW1Uby8jFFKUlZkUFioKCy0aG3XS\nnen0D0W5pqySvtY11PQc5r7593N56Qpae9t5v/H3AMyJr6Uwfh0eK8AR13+TZc4jroUx4n5c2Adz\nryq4htw0O/Eg6M3jI6V/zKGug/ym9hUA7ii/a1Q174kKpQXHnREKIcRkkoA0Qbva7DYMV+RdNeZn\ng71u+rs8lAdKaBtsp7fDR2ZgEN1Q6I44lfMzuPYfIni99qzI54O5cy3q6nTSnT7c6S1kZFrcn/nA\nqNf9k3n3YiqThv4GVvZ+AguD8tgdVLl/zq60kUPLtNozncWBJQS9duWMYl8JQW+Izy77K3a0bCPk\nDXFj8UjCxMnZd2emuKZwzbm/YUIIcY4kIE1QVecBPIZn3OWt1vocDJdFoa+QwY4AZtwgK68PpSBY\n1soNJVdRa1fiIT3drv9XWqoIBi2K0rIZOE2BWl3TuW/BxwGo2aXRNqBYEvkzgpGr6Cv4HzzeCFva\nNwBwQ9GNKGVR7LMz6gJpAZy6g/lZC5iftWDU68atOIsDSzjWW0fUOnM/qxxPLlme7DNeI4QQk0EC\n0gS0DbXRPtxGRfbicVuV97ank+Hy09Xp4Nl/tQ+/Bot7iMcM5s6PsajEQdVecLkgM9MOSLoOd99t\nAk56qvqJju0SMYo3axB3cwHh+ABzMuay4oo7UEpRmlOEacW5Mv9qnIYz2SFW13Sy3Dn0RXtHvY6p\nTHLTcrmmYA1LApfxq8O/RCmLuDLHXc6TDrFCiItFkhomYGvzJgBK/KOrnkfMCPGYzkCvmyx3Dr/4\nxUh8DxR3keaLUpiTQ04OOE9U4EnMkE62IKeCuBU/4z1kFbZzZUklac50skJ23yRN07gy/yquKVyD\noRtkuEeX9skeZ2bj1l3cNe8eNE0j053Fpy77NGtLb+P28juJWbEx15/6mkIIMVUkIE3A5iY7IBX5\nipOPuQwXH1/4AKpjAT6Xl6HmEmpr7T2ZtbdGSfMPk+YPk+3OQtPsBnpKgd8/NiCtCl3B/OwF4zbT\nS8hJ93P/R2Hp/AwK5rWOe03mKbXmsjw5o1qEKKWYmzV/1CxP13TmZJRS7C+h6JTlyKgZJc8rDfmE\nEBeHBKQJSLT6LjwRkCxlsSB7IVmebOao61mSvZLf/MZuWvjFL0a4/Y8tfE4fjrTBZLp0To5FJAKh\n0NiApGka1xSswVTmae8hOy0Hjwf+/O4iXG77urgVJ2pGk1/nn1JrrsRXMmqPSKFYmXf5aX/HFXlX\nj5olaZBMkhBCiKkmAWkCantq8Bhp5HhyADA0g2W5K7AsaGnRefVVB62tOmvWxCkutgOOz5lJWnqE\nPK8dkEIhhaZBTs74v8NluChMLwTsfZ6gN4h+IgvOVCZF6fbsxWk4KfbPIWpGKMssZ2luJUopHLqD\nBdkLR71mtiebNEda8vvSjLIzpn3nenNHzQJ9Lt+YShRCCDFVJCCdRcdQB21DrRT6itA0DdMyWRpc\nhtNwcuCATm2txtatDgoKLO6+e2QfKMMIsXhuVvIP+pw5iooKC8cZ/r5flb8aU8XJdudwz6J7uKnk\nZsAOgBU5i5PXrS68lj+Z91FumXMrl+VWErEizMucPybhQtM0yjPnYSoTU5msCp1+dpSwIHthcpYk\n7SaEEBeT/PP3LH579L9RKIp8RVjKItuTTWXOSn7zG4OuLo3XXrOzFe67LzYq2AQz/Ny3bG3ye48H\nbrjh9EtyAAFvgD8qu4PctCC6plPsL+FTl316zHVepzeZTed3+bmp5GbKM+aN+5qrC9eQ48mmLGMu\nac60ca852dzMeexu3UVPpEeW64QQF5UEpDOwlJXMsCv0FaMBd869m9oana4unf37derqdJYuNSkv\nH703lJNjcT7FDc5Wxmc8C7MXnfZnuqazOHDZhF9L0zQ+VvEJqrsOsiC74pzvRQghzpcEpNOIxCO8\nXf8Gx/rqACjyFVGSUYbTcHL8uL009tprDnRdceedY1O2c3LGJi/MJgtzTh/khBBiKkhAOkXMjGHo\nBq8d/W/6o/00DzTh0BzkeoKU+IuxLGhs1NmyxaCjw05kCAZHgk88rohGNSoqznLSVQghxCgSkE4y\nFBvi5UMvoqMnzwS1DDaTn16ApkFZxlxqajTCYXj7bQdut+IjHxk9OyovVwSDJgFpriqEEOdEAtJJ\ntjRtShYcNTSDY311xFWcIn8xOWkBnIaTxkadAwd0+vs1brwxjt8/8vxoVHHFFeaox4QQQkyMpH2f\nMBwfpq7vyKjHqjr3A7AoZzE5bnvK09OjsXOnHbRWrx6dNVdYqCQYCSHEeZKAdMKx3qPJg6gJ+zv3\nYmgG8zIXkOvNxbKgvV2jtlYnP98iN3dk78g0FVdddea0biGEEKcnS3YndAx3jDpY2jzQRPNgM5cF\nKjE0g9KMMjo6oKZGJx7XqKiwg49pKjIyYNUqk9zc6bp7IYSY/SQgndAd7k5+bSmL147+DwCr8i7H\n7XDjc/mpbdY5csQOWosWWSiluP32OPnS3VsIIS6YLNlhFybtCI80ydvRuo2qrv0syFrI0txlZJwo\nodPXp3HwoI7TqSgvt5g/35JgJIQQk0QCEnbxVE5sB5nK5M2613HoTh5Y9EkMzSDDbTepq6nRaWvT\nmT/fQtcZdf5ICCHEhbmkl+wOdO7neH8DncMdGLqd0LC3/UN6It2sLryWLHcWQPK/27fb11RUWMRi\nKlnZWwghxIW7ZANS51AnW5o24tCdRMwIv294h95IL7vadqCjc13hDQBEzQgl/lK6uuDgQXtCWVFh\n4fWC1zudIxBCiNRyyQakqq59OHS7Uvfmpo28eex1ANKd6TywZF2ysZ7b4SE3LZfdh3QaG3XS0xW5\nuYrsbJkdCSHEZLokA5JSiqN9R6jvO0ahr4idrdsxNIO/Xv4YBb7CUU3sAp5cNE2jrk6ju9tO99Y0\nyMqSgCSEEJPpkgxItb01/HjXP1PXdzT5WGXuMsoyy0ddp5QiPz0fpWD3bnv/qKhIYZqS0CCEEJPt\nksyye/ngi6OCkY7OH5XdMea6qBllftYC2tqgrs5+qwoLLeJxRUmJBCQhhJhMl+QMaWPjewD87eVf\nJmpGMDQH+ekFY64r9BWS4c6kplGnpcUOSMXFCp/P7gArhBBi8lxyASkSj1DVVUWGK4PC9CK007R1\njVsxrsi/CoDubo3GRg23W5GTo2T/SAghpsAlt2T3+4Z3GIwNMD9r4WmDEUCGKzOZadfaqtHerlFY\nqNB1SWgQQoipcMkFpESNuiWBpZjKJG6NbT8OUOwvASAahX37dJTSmDPHIh6HggIJSEIIMdkuuYC0\nuWkjhmawMLuCFaFVVGQvSnaHTYjGI8zPXghATY1Gfb39NpWX2wVVi4okIAkhxGS7pPaQomaU+v5j\nFPtKcBsuKnOXAXab8nSXj47hdixlkenJIjfN7iVx/LjO0aN2QCors8jKAqdz2oYghBAp65IKSEd6\nazGVSX56AVmebBy6PfyPVXwCgA9ad7KrdSerQlcAEItBdbXdkK+oyMLnQyo0CCHEFLmkAtKBEy3J\n89PzyXbnjPn5itAqTGWyNFgJwPbtOvv3O7AsjRUr7L2mnBwJSEIIMRUuqYC0t303ACFvPkFvcMzP\nNU1jVegqNm/WicWgtnakId+SJRaRCJSUWGOeJ4QQ4sJdUgHpYFcVAFmeLMoz5417TXW1RlWVgcMB\nhmFXaPB6FaGQQinIzr6YdyyEEJeOSyrLrr7vGA7NQbFvDl7n+L0jDh60gxFAV5ddULW83ELTwO+3\nzyEJIYSYfJfUn9emwSZy0gLjLteBPTvq6ho5LLt7t/32LF5sL9NlZsr+kRBCTJVLJiD1hLsZjA0Q\n8ATwO/3jXlNfrydnR0rBjh0GDodi+XITkIAkhBBT6ax7SMPDwzzxxBN0dnYSiUT4/Oc/z6JFi3j8\n8ccxTZNgMMh3v/tdXC7Xxbjf85ao7p3jCZDpzhz3mo4ODcuy073b2jTa2nSWLzdJS7MrNsiBWCGE\nmDpnDUjvvvsuS5cu5ZFHHqGxsZHPfOYzrFq1inXr1nH77bfzgx/8gPXr17Nu3bqLcb/nrbq7GrAD\nUqJG3cnCYaiv13j+eRednTqaZgefyy+3Z0cOB+TnS0ASQoipctYluzvuuINHHnkEgObmZvLy8ti6\ndStr164F4Oabb2bz5s1Te5eT4MMTKd953jwy3Vljft7UpLFpk4POTvstUUpjzZp4cv8oELAkoUEI\nIabQhNO+H3zwQVpaWnj66af59Kc/nVyiCwQCtLe3T9kNTpaDXQcAmJNRhq6NjSzV1To7dxpkZioe\nfjiKptm9jwDi8ZHEBiGEEFNjwgHppZdeoqqqii9/+csoNbJ0dfLXp5Od7cXhMM7vDk8RDI6fkHA2\nDQPHcBtuFhXOG/c1XnwRIhG4/35YssQ96meaBtdcY//3Yjrfsc5GMtbUJGNNTVM11rMGpH379hEI\nBCgoKGDx4sWYpkl6ejrhcBiPx0NrayuhUOiMr9HdPTQpNxsM+mlv7z/n55mWSUNvA/m+AsxhY8xr\nxGLw3ns+MjNh+fII/af8ioICi44O80Ju/Zyd71hnIxlrapKxpqYLHeuZgtlZd0V27NjBc889B0BH\nRwdDQ0OsWbOGN954A4A333yT66+//rxv7mKo7z9GXMUJpeWR7kwf8/ONGw2GhjQqK80x+0TxuJQL\nEkKIi+GsM6QHH3yQr33ta6xbt45wOMzXv/51li5dyle+8hVefvllCgsLuffeey/GvZ63qhNFVUPe\nPLzjBKTf/c5eTqyoGBt4vF5FRYVk1wkhxFQ7a0DyeDx8//vfH/P4888/PyU3NBW2NttZgDmeAKG0\nscuLW7fab0NpqR2QYrGRnkeJskFCCCGm1iWRyFzVaWfY5ablEjjReC8hHoeqKp28PAuvF2IxxXXX\nxYnHFbEYXHaZLNcJIcTFkNLVvtuG2qjq3MfhnmocmoPSjFKcxuh2r1VVOpGIRlmZnbRQVGQv0WVk\nmHg8Cp9vOu5cCCEuPSkdkDY2vk9PuJuWwWYK0gvJ8oxtyrd9u71/VFqqsCzFNdfYgamgQPaNhBDi\nYkrZgBQxI3QMt9M13ImpTIp8xfhdY9MNt22zA9KcORYLFlhkjS3iIIQQ4iJIuT2kvkgvAEd7juDQ\nHdT21gBQ7C8hw5Ux5voPP9RxuRRZWRZXXCH7RUIIMV1SKiBFzSi/OPQSR3uOcKS3BkMz2NP2AQAL\nsxeRM05CQ12dTl6eIi8P3O7xXlUIIcTFkFJLdtuat+DQnbzb8DZRM8Zval/haN8RyjPn4XOmk+8d\nXeX72DGNeFwjL8+ioEBmR0IIMZ1SZoZ0rO8YNT2H0TQNh+7kf+v+h52t2ynyFfNgxSdJc3rxODyj\nnnPokL1/lJtrUV4uAUkIIaZTSsyQLGWx8fjvk1W8eyO9bGnaRK4nj0dXfhGn7iRrnJYT1dX29UVF\nFsHxu5oLIYS4SFIiINV0VxM2IyhlEbPi7O3Yg0IxL3IPTt0+dzReynciII1XMkgIIcTFlRIBqWWw\nBUMz+PHuH1Hffyz5eHbPTVhmB+gmuZ7cMc+rrtZxOBQLF0pAEkKI6ZYSAak73MWR3tpkMMpzlVLQ\nfR9pZh49bWEy87qZmzVv1HMsyw5IubmKwkI5BCuEENNt1gckpRRv1L3Oa0dfBeDzy75A17bbiZsO\ncCh6OrwsmefDZbhGPe/4cY1wWCMYtCQgCSHEDDDrA9Ketg/45eGXUSjunf8xjObVRMNOdN0OMsZw\nkLWlq8Y8L7F/VFpq4XKN+bEQQoiLbNYHpGf3Po1C8clFD+Oq+SjH2/wYDntPSKHIU5djxg1OmSBx\n6JAdkObPl/0jIYSYCWb9OaR9HR+io5PVdRO9HT4Mh8VAj4c9v59PvH0ubsPDpk1jh3n4sP3YokUX\ntzW5EEKI8c3qGZKlLI72HiHoDdHdlIeuKyxT4/1frmSw10t/k8n1y2McOaJTXq4oLR3ZKzp0yEDX\nFStWyAxJCCFmglk9Q6rrPULYDFPoLWGoz00sYrD1t8sY7PUC0NJs0N6u4XBo7N2rY52IPUrZM6Sc\nHEVxsSQ0CCHETDCrA9KGhncB8MXm0tvm462fX01jTS7FxRZ33BED4MABe4htbTovv+ygtxdaWzX6\n+jTy85UkNAghxAwxqwPS7vZdADj757P99aUM9aVx400R/uZvoqxaZe8N1dTYQ3Q4IBbTeP11B9u2\n2Y9J/TohhJg5Zm1AiltxjvYeAaB9x40M9KRx3XVx/uQuha5DVpZdNLWmRqemRkedWJmLRDRefdXe\nOps3TwKSEELMFLM2INX3HaNzuAOAlg8uB+C660ZnzF15pUkspvH00y5++lMnR49qANTV2VW+fs8A\nQwAAC1JJREFUly6VDDshhJgpZm2WXdtQK53hTnzRuXQcz6a01CI3d3SCwi23mKSlwbvvOjh0yODQ\nIYPKSpOaGp2sLEVlpcyQhBBippi1Aammu5rucBc5NZ9lQGksWRIfc42mwZo1JldfbXL4sM7rrzvY\nu9eeHVVWxsnLkww7IYSYKWZtQHqn4XcAWLsfAmDxYgvTBF2HeFzhdCau1DAMWLTIYv78KHV1Ov39\n9oFYr3d67l0IIcRYszIgdQy1s6npfYyWK+iprqSsPEZhocLjUdx/f5zOTvB64YMPdI4cMZLPczhG\nSgUFAjI7EkKImWRWJjW8XP2fdIW7yNz2FAC3rjVRyk7j1nUIBiE9HebPV0Sj479GdrYEJCGEmElm\nZUDa2Pg+RHx0776BzNwBKiogGlUsXjw6SSE/X+HzKUwTDEPhdiuiUYVlSVFVIYSYaWblkt3e9j04\nmq4lbhkUze1B03LJzgafb+y1ZWUW9fU6998fR9dhcNBeunO7L/59CyGEOL1ZFZAsC472HKF1qIXc\ntq/SARSUDANQUDD+jOeaayyuvtpCs48gkZ5+kW5WCCHEOZlVAemtt+CfN70DOmjHrwUglG8Si8GC\nBadfgksEIyGEEDPXrApIug5H1XtgaXRXX0Z65hD33+Ui0xknFJruuxNCCHEhZlVAAjiubcXRdiXx\niJvi+S1cuzKYbFcuhBBi9ppVWXaNQzUMDiqMN38IwBUrDPRZNQIhhBCnM6tmSL+rfQ+e3Uqkbw6B\nwl4+frcXkPRtIYRIBbMmIFVX66z/zm3QV0zplXu48QaLUGjBdN+WEEKISTJrFry++U034bZi9NU/\nZOW1LeSkZTNnjuwdCSFEqpg1Aenvvn4cHrmC0C0vousGS8tz8fun+66EEEJMllkTkJoc70PRTnLN\npaTrWVQune47EkIIMZlmTUDa2rwZgIBZSWFuGuXlslwnhBCpZNYEpENdB3FobjJi87h8UXC6b0cI\nIcQkmzVZdv+w+pu89N4BuruyuLwybbpvRwghxCSbNQFpWXAF2z1eOudEJJlBCCFS0KxZsgNQusl1\n18yaGCqEEOIczKqAtOSqZi6fO3e6b0MIIcQUmNB046mnnmLnzp3E43E+97nPUVlZyeOPP45pmgSD\nQb773e/icrmm+l5Znrccd1w66wkhRCo6a0DasmULhw8f5uWXX6a7u5uPfvSjrF69mnXr1nH77bfz\ngx/8gPXr17Nu3bopv9my7DLa2/un/PcIIYS4+M66ZHfllVfywx/a1bUzMjIYHh5m69atrF27FoCb\nb76ZzZs3T+1dCiGESHlnDUiGYeD1egFYv349N9xwA8PDw8klukAgQHt7+9TepRBCiJQ34ZS1t99+\nm/Xr1/Pcc89x2223JR9X6uwVE7KzvTgcxvnd4SmCwUsn51vGmppkrKlJxnrhJhSQ3n//fZ5++ml+\n+tOf4vf78Xq9hMNhPB4Pra2thM7SP7y7e2hSbjYY9F8ye0gy1tQkY01NMtZze/7pnHXJrr+/n6ee\neoqf/OQnZGVlAbBmzRreeOMNAN58802uv/768745IYQQAiYwQ3rttdfo7u7mi1/8YvKxb3/72zz5\n5JO8/PLLFBYWcu+9907pTQohhEh9Zw1IDzzwAA888MCYx59//vkpuSEhhBCXpllVqUEIIUTqkoAk\nhBBiRpCAJIQQYkaQgCSEEGJGkIAkhBBiRpCAJIQQYkaQgCSEEGJGkIAkhBBiRpCAJIQQYkbQ1ETK\ndQshhBBTTGZIQgghZgQJSEIIIWYECUhCCCFmBAlIQgghZgQJSEIIIWYECUhCCCFmhLM26JsJ/umf\n/ok9e/agaRpf/epXWbZs2XTf0nnZunUrX/jCF1iwYAEACxcu5LOf/SyPP/44pmkSDAb57ne/i8vl\n4tVXX+Xf//3f0XWdT3ziE3z84x8nFovxxBNP0NTUhGEYfOtb36KkpGSaRzVadXU1n//853n44Yd5\n6KGHaG5uvuDxHTx4kG984xsAVFRU8M1vfnN6B3nCqWN94okn2L9/P1lZWQD8xV/8BTfddFNKjPWp\np55i586dxONxPve5z1FZWZmyn+upY33nnXdS8nMdHh7miSeeoLOzk0gkwuc//3kWLVo0vZ+rmuG2\nbt2q/vIv/1IppVRNTY36xCc+Mc13dP62bNmiHnvssVGPPfHEE+q1115TSin1/e9/X/3Hf/yHGhwc\nVLfddpvq6+tTw8PD6s4771Td3d3qlVdeUd/4xjeUUkq9//776gtf+MJFH8OZDA4Oqoceekg9+eST\n6uc//7lSanLG99BDD6k9e/YopZT6u7/7O7Vhw4ZpGN1o4431K1/5inrnnXfGXDfbx7p582b12c9+\nVimlVFdXl7rxxhtT9nMdb6yp+rn+9re/Vc8884xSSqnjx4+r2267bdo/1xm/ZLd582ZuvfVWAObN\nm0dvby8DAwPTfFeTZ+vWraxduxaAm2++mc2bN7Nnzx4qKyvx+/14PB5WrVrFrl272Lx5Mx/5yEcA\nWLNmDbt27ZrOWx/D5XLx7LPPEgqFko9d6Pii0SiNjY3JWXHiNabbeGMdTyqM9corr+SHP/whABkZ\nGQwPD6fs5zreWE3THHNdKoz1jjvu4JFHHgGgubmZvLy8af9cZ3xA6ujoIDs7O/l9Tk4O7e3t03hH\nF6ampoa/+qu/4k//9E/ZuHEjw8PDuFwuAAKBAO3t7XR0dJCTk5N8TmLMJz+u6zqaphGNRqdlHONx\nOBx4PJ5Rj13o+Do6OsjIyEhem3iN6TbeWAFeeOEFPvWpT/G3f/u3dHV1pcRYDcPA6/UCsH79em64\n4YaU/VzHG6thGCn5uSY8+OCDfOlLX+KrX/3qtH+us2IP6WRqFlc6Kisr49FHH+X222+noaGBT33q\nU6P+9XW6sZ3r4zPVZIxvJo/5nnvuISsri8WLF/PMM8/wL//yL6xcuXLUNbN5rG+//Tbr16/nueee\n47bbbks+noqf68lj3bdvX0p/ri+99BJVVVV8+ctfHnVv0/G5zvgZUigUoqOjI/l9W1sbwWBwGu/o\n/OXl5XHHHXegaRpz5swhNzeX3t5ewuEwAK2trYRCoXHHnHg88a+NWCyGUir5r5mZyuv1XtD4gsEg\nPT09yWsTrzETrV69msWLFwNwyy23UF1dnTJjff/993n66ad59tln8fv9Kf25njrWVP1c9+3bR3Nz\nMwCLFy/GNE3S09On9XOd8QHp2muv5Y033gBg//79hEIhfD7fNN/V+Xn11Vf52c9+BkB7ezudnZ3c\nd999yfG9+eabXH/99Sxfvpy9e/fS19fH4OAgu3bt4oorruDaa6/l9ddfB+Ddd9/l6quvnraxTNSa\nNWsuaHxOp5O5c+eyY8eOUa8xEz322GM0NDQA9t7ZggULUmKs/f39PPXUU/zkJz9JZpql6uc63lhT\n9XPdsWMHzz33HGBvjQwNDU375zorqn1/73vfY8eOHWiaxj/+4z+yaNGi6b6l8zIwMMCXvvQl+vr6\niMViPProoyxevJivfOUrRCIRCgsL+da3voXT6eT111/nZz/7GZqm8dBDD3H33XdjmiZPPvkkdXV1\nuFwuvv3tb1NQUDDdw0rat28f3/nOd2hsbMThcJCXl8f3vvc9nnjiiQsaX01NDV//+texLIvly5fz\n93//99M91HHH+tBDD/HMM8+QlpaG1+vlW9/6FoFAYNaP9eWXX+bHP/4x5eXlyce+/e1v8+STT6bc\n5zreWO+77z5eeOGFlPtcw+EwX/va12hubiYcDvPoo4+ydOnSC/57dCFjnRUBSQghROqb8Ut2Qggh\nLg0SkIQQQswIEpCEEELMCBKQhBBCzAgSkIQQQswIEpCEEELMCBKQhBBCzAgSkIQQQswI/z8oX3uY\nZ8ECywAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f4d4b8577b8>" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "pu.plot_results(results, average_group=True, split_fn=lambda _: '', shaded_std=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "YMA86VtfI8d5" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "baselines_viz.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/baselines/setup.cfg b/baselines/setup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0cd564a86e6ffa4a29df2e56d44205880d21c9e2 --- /dev/null +++ b/baselines/setup.cfg @@ -0,0 +1,6 @@ +[flake8] +select = F,E999,W291,W293 +exclude = + .git, + __pycache__, + baselines/ppo1, diff --git a/baselines/setup.py b/baselines/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..99a1eff68300c8847ec86d6f18401b7c6aad1b73 --- /dev/null +++ b/baselines/setup.py @@ -0,0 +1,62 @@ +import re +from setuptools import setup, find_packages +import sys + +if sys.version_info.major != 3: + print('This Python is only compatible with Python 3, but you are running ' + 'Python {}. The installation will likely fail.'.format(sys.version_info.major)) + + +extras = { + 'test': [ + 'filelock', + 'pytest', + 'pytest-forked', + 'atari-py~=0.2.0' + ], + 'bullet': [ + 'pybullet' + ], + 'mpi': [ + 'mpi4py' + ] +} + +all_deps = [] +for group_name in extras: + all_deps += extras[group_name] + +extras['all'] = all_deps + +setup(name='baselines', + packages=[package for package in find_packages() + if package.startswith('baselines')], + install_requires=[ + 'gym<=0.14', + 'scipy', + 'tqdm', + 'joblib', + 'dill', + 'progressbar2', + 'cloudpickle', + 'click', + 'opencv-python' + ], + extras_require=extras, + description='OpenAI baselines: high quality implementations of reinforcement learning algorithms', + author='OpenAI', + url='https://github.com/openai/baselines', + author_email='gym@openai.com', + version='0.1.5') + +# ensure there is some tensorflow build with version above 2.0 +import pkg_resources +tf_pkg = None +for tf_pkg_name in ['tensorflow', 'tensorflow-gpu', 'tf-nightly', 'tf-nightly-gpu']: + try: + tf_pkg = pkg_resources.get_distribution(tf_pkg_name) + except pkg_resources.DistributionNotFound: + pass +assert tf_pkg is not None, 'TensorFlow needed, of version above 2.0' +from distutils.version import LooseVersion +assert LooseVersion(re.sub(r'-?rc\d+$', '', tf_pkg.version)) >= LooseVersion('2.0.0') \ No newline at end of file