Showing preview only (394K chars total). Download the full file or copy to clipboard to get everything.
Repository: MediaBrain-SJTU/LED
Branch: main
Commit: aae048a85292
Files: 20
Total size: 382.4 KB
Directory structure:
gitextract_0cqaezcx/
├── .gitignore
├── README.md
├── cfg/
│ └── nba/
│ ├── led_augment.yml
│ └── led_augment_debug.yml
├── main_led_nba.py
├── models/
│ ├── layers.py
│ ├── model_diffusion.py
│ └── model_led_initializer.py
├── requirements.txt
├── trainer/
│ └── train_led_trajectory_augment_input.py
├── utils/
│ ├── config.py
│ └── utils.py
└── visualization/
├── data/
│ ├── future.pt
│ ├── p_mean.pt
│ ├── p_mean_denoise.pt
│ ├── p_sigma.pt
│ ├── p_var.pt
│ ├── past.pt
│ └── prediction.pt
└── draw_mean_variance.ipynb
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
/data/
/results/
**/__pycache__
================================================
FILE: README.md
================================================
# Leapfrog Diffusion Model for Stochastic Trajectory Prediction (LED)
Official **PyTorch** code for CVPR'23 paper "Leapfrog Diffusion Model for Stochastic Trajectory Prediction".
## 1. Overview
<div align="center">
<img src="./results/fig/overview.png" width = "60%" alt="system overview"/>
</div>
**Abstract**: To model the indeterminacy of human behaviors, stochastic trajectory prediction requires a sophisticated multi-modal distribution of future trajectories. Emerging diffusion models have revealed their tremendous representation capacities in numerous generation tasks, showing potential for stochastic trajectory prediction. However, expensive time consumption prevents diffusion models from real-time prediction, since a large number of denoising steps are required to assure sufficient representation ability. To resolve the dilemma, we present **LEapfrog Diffusion model (LED)**, a novel diffusion-based trajectory prediction model, which provides real-time, precise, and diverse predictions. The core of the proposed LED is to leverage a trainable leapfrog initializer to directly learn an expressive multi-modal distribution of future trajectories, which skips a large number of denoising steps, significantly accelerating inference speed. Moreover, the leapfrog initializer is trained to appropriately allocate correlated samples to provide a diversity of predicted future trajectories, significantly improving prediction performances. Extensive experiments on four real-world datasets, including NBA/NFL/SDD/ETH-UCY, show that LED consistently improves performance and achieves **23.7\%/21.9\%** ADE/FDE improvement on NFL. The proposed LED also speeds up the inference **19.3/30.8/24.3/25.1** times compared to the standard diffusion model on NBA/NFL/SDD/ETH-UCY, satisfying real-time inference needs.
<div align="center">
<img src="./results/fig/mean_var_estimation.png" width = "50%" alt="mean and variance estimation"/>
</div>
Here, we present an example (above) to illustrate the mean and variance estimation in the leapfrog initializer under four scenes on the NBA dataset. We see that the variance estimation can well describe the scene complexity for the current agent by the learned variance, showing the rationality of our variance estimation.
## 2. Code Guidance
Overall project structure:
```text
----LED\
|----README.md
|----requirements.txt # packages to install
|----main_led_nba.py # [CORE] main file
|----trainer\ # [CORE] main training files, we define the denoising process HERE!
| |----train_led_trajectory_augment_input.py
|----models\ # [CORE] define models under this file
| |----model_led_initializer.py
| |----model_diffusion.py
| |----layers.py
|----utils\
| |----utils.py
| |----config.py
|----data\ # preprocessed data (~200MB) and dataloader
| |----files\
| | |----nba_test.npy
| | |----nba_train.npy
| |----dataloader_nba.py
|----cfg\ # config files
| |----nba\
| | |----led_augment.yml
|----results\ # store the results and checkpoints (~100MB)
|----visualization\ # some visualization codes
```
Please download the data and results from [Google Drive](https://drive.google.com/drive/folders/1Uy8-WvlCp7n3zJKiEX0uONlEcx2u3Nnx?usp=sharing).
**TODO list**:
- [ ] add training/evaluation for diffusion models (in two weeks).
- [ ] more detailed descripition in trainers (in one month).
- [ ] transfer the parameters in models into yaml.
- [ ] other fast sampling methods (DDIM and PD).
### 2.1. Environment
We train and evaluate our model on `Ubuntu=18.04` with `RTX 3090-24G`.
Create a new python environment (`led`) using `conda`:
```
conda create -n led python=3.7
conda activate led
```
Install required packages using Command 1 or 2:
```bash
# Command 1 (recommend):
pip install -r requirements.txt
# Command 2:
pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install easydict
pip install glob2
```
### 2.2. Training
You can use the following command to start training the initializer.
```bash
python main_led_nba.py --cfg <-config_file_name_here-> --gpu <-gpu_index_here-> --train 1 --info <-experiment_information_here->
# e.g.
python main_led_nba.py --cfg led_augment --gpu 5 --train 1 --info try1
```
And the results are stored under the `./results` folder.
### 2.3. Evaluation
We provide pretrained models under the `./checkpoints` folder.
**Reproduce**. Using the command `python main_led_nba.py --cfg led_augment --gpu 5 --train 0 --info reproduce` and you will get the following results:
```text
[Core Denoising Model] Trainable/Total: 6568720/6568720
[Initialization Model] Trainable/Total: 4634721/4634721
./checkpoints/led_new.p
--ADE(1s): 0.1766 --FDE(1s): 0.2694
--ADE(2s): 0.3693 --FDE(2s): 0.5642
--ADE(3s): 0.5817 --FDE(3s): 0.8366
--ADE(4s): 0.8095 --FDE(4s): 1.0960
```
## 3. Citation
If you find this code useful for your research, please cite our paper:
```bibtex
@inproceedings{mao2023leapfrog,
title={Leapfrog Diffusion Model for Stochastic Trajectory Prediction},
author={Mao, Weibo and Xu, Chenxin and Zhu, Qi and Chen, Siheng and Wang, Yanfeng},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={5517--5526},
year={2023}
}
```
## 4. Acknowledgement
Some code is borrowed from [MID](https://github.com/Gutianpei/MID), [NPSN](https://github.com/InhwanBae/NPSN) and [GroupNet](https://github.com/MediaBrain-SJTU/GroupNet). We thank the authors for releasing their code.
[](https://star-history.com/#MediaBrain-SJTU/LED&Date)
================================================
FILE: cfg/nba/led_augment.yml
================================================
# ------------------- General Options -------------------------
description : LED
results_root_dir : results
dataset : nba
# ------------------- Dataset -------------------------
past_frames : 10
future_frames : 20
min_past_frames : 10
min_future_frames : 20
motion_dim : 2
forecast_dim : 2
traj_mean : [14, 7.5]
traj_scale : 5
# ------------------- Model -------------------------
pretrained_core_denoising_model: './results/checkpoints/base_diffusion_model.p'
debug : False # set to True for early stop in each epoch.
diffusion : {
steps : 100,
beta_start : 1.e-4,
beta_end : 5.e-2,
beta_schedule : 'linear'
}
# ------------------- Training Parameters -------------------------
lr : 1.e-3
train_batch_size : 10
test_batch_size : 500
num_epochs : 100
lr_scheduler : 'step'
decay_step : 8
decay_gamma : 0.5
================================================
FILE: cfg/nba/led_augment_debug.yml
================================================
# ------------------- General Options -------------------------
description : LED
results_root_dir : results
dataset : nba
# ------------------- Dataset -------------------------
past_frames : 10
future_frames : 20
min_past_frames : 10
min_future_frames : 20
motion_dim : 2
forecast_dim : 2
traj_mean : [14, 7.5]
traj_scale : 5
# ------------------- Model -------------------------
pretrained_core_denoising_model: './results/checkpoints/base_diffusion_model.p'
debug : True # set to True for early stop in each epoch.
diffusion : {
steps : 100,
beta_start : 1.e-4,
beta_end : 5.e-2,
beta_schedule : 'linear'
}
# ------------------- Training Parameters -------------------------
lr : 1.e-3
train_batch_size : 2
test_batch_size : 5
num_epochs : 100
test_interval : 2
lr_scheduler : 'step'
decay_step : 8
decay_gamma : 0.5
================================================
FILE: main_led_nba.py
================================================
import argparse
from trainer import train_led_trajectory_augment_input as led
def parse_config():
parser = argparse.ArgumentParser()
parser.add_argument("--cuda", default=True)
parser.add_argument("--learning_rate", type=int, default=0.002)
parser.add_argument("--max_epochs", type=int, default=128)
parser.add_argument('--cfg', default='led_augment')
parser.add_argument('--gpu', type=int, default=0, help='Specify which GPU to use.')
parser.add_argument('--train', type=int, default=1, help='Whether train or evaluate.')
parser.add_argument("--info", type=str, default='', help='Name of the experiment. '
'It will be used in file creation.')
return parser.parse_args()
def main(config):
t = led.Trainer(config)
if config.train==1:
t.fit()
else:
# t.save_data()
t.test_single_model()
if __name__ == "__main__":
config = parse_config()
main(config)
================================================
FILE: models/layers.py
================================================
import math
import torch
import torch.nn as nn
from torch.nn import Module, Linear
class PositionalEncoding(nn.Module):
def __init__(self, d_model, dropout=0.1, max_len=5000):
super().__init__()
self.dropout = nn.Dropout(p=dropout)
pe = torch.zeros(max_len, d_model)
position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
div_term = torch.exp(
torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model)
)
pe[:, 0::2] = torch.sin(position * div_term)
pe[:, 1::2] = torch.cos(position * div_term)
pe = pe.unsqueeze(0).transpose(0, 1)
self.register_buffer("pe", pe)
def forward(self, x):
x = x + self.pe[: x.size(0), :]
return self.dropout(x)
class ConcatSquashLinear(Module):
def __init__(self, dim_in, dim_out, dim_ctx):
super(ConcatSquashLinear, self).__init__()
self._layer = Linear(dim_in, dim_out)
self._hyper_bias = Linear(dim_ctx, dim_out, bias=False)
self._hyper_gate = Linear(dim_ctx, dim_out)
def forward(self, ctx, x):
# ctx: (B, 1, F+3)
# x: (B, T, 2)
gate = torch.sigmoid(self._hyper_gate(ctx))
bias = self._hyper_bias(ctx)
# if x.dim() == 3:
# gate = gate.unsqueeze(1)
# bias = bias.unsqueeze(1)
ret = self._layer(x) * gate + bias
return ret
def batch_generate(self, ctx, x):
# ctx: (B, n, 1, F+3)
# x: (B, n, T, 2)
gate = torch.sigmoid(self._hyper_gate(ctx))
bias = self._hyper_bias(ctx)
# if x.dim() == 3:
# gate = gate.unsqueeze(1)
# bias = bias.unsqueeze(1)
ret = self._layer(x) * gate + bias
return ret
class GAT(nn.Module):
def __init__(self, in_feat=2, out_feat=64, n_head=4, dropout=0.1, skip=True):
super(GAT, self).__init__()
self.in_feat = in_feat
self.out_feat = out_feat
self.n_head = n_head
self.skip = skip
self.w = nn.Parameter(torch.Tensor(n_head, in_feat, out_feat))
self.a_src = nn.Parameter(torch.Tensor(n_head, out_feat, 1))
self.a_dst = nn.Parameter(torch.Tensor(n_head, out_feat, 1))
self.bias = nn.Parameter(torch.Tensor(out_feat))
self.leaky_relu = nn.LeakyReLU(negative_slope=0.2)
self.softmax = nn.Softmax(dim=-1)
self.dropout = nn.Dropout(dropout)
nn.init.xavier_uniform_(self.w, gain=1.414)
nn.init.xavier_uniform_(self.a_src, gain=1.414)
nn.init.xavier_uniform_(self.a_dst, gain=1.414)
nn.init.constant_(self.bias, 0)
def forward(self, h, mask):
h_prime = h.unsqueeze(1) @ self.w
attn_src = h_prime @ self.a_src
attn_dst = h_prime @ self.a_dst
attn = attn_src @ attn_dst.permute(0, 1, 3, 2)
attn = self.leaky_relu(attn)
attn = self.softmax(attn)
attn = self.dropout(attn)
attn = attn * mask if mask is not None else attn
out = (attn @ h_prime).sum(dim=1) + self.bias
if self.skip:
out += h_prime.sum(dim=1)
return out, attn
class MLP(nn.Module):
def __init__(self, in_feat, out_feat, hid_feat=(1024, 512), activation=None, dropout=-1):
super(MLP, self).__init__()
dims = (in_feat, ) + hid_feat + (out_feat, )
self.layers = nn.ModuleList()
for i in range(len(dims) - 1):
self.layers.append(nn.Linear(dims[i], dims[i + 1]))
self.activation = activation if activation is not None else lambda x: x
self.dropout = nn.Dropout(dropout) if dropout != -1 else lambda x: x
def forward(self, x):
for i in range(len(self.layers)):
x = self.activation(x)
x = self.dropout(x)
x = self.layers[i](x)
return x
class social_transformer(nn.Module):
def __init__(self, past_len):
super(social_transformer, self).__init__()
self.encode_past = nn.Linear(past_len*6, 256, bias=False)
self.layer = nn.TransformerEncoderLayer(d_model=256, nhead=2, dim_feedforward=256)
self.transformer_encoder = nn.TransformerEncoder(self.layer, num_layers=2)
def forward(self, h, mask):
'''
h: batch_size, t, 2
'''
h_feat = self.encode_past(h.reshape(h.size(0), -1)).unsqueeze(1)
# print(h_feat.shape)
# n_samples, 1, 64
h_feat_ = self.transformer_encoder(h_feat, mask)
h_feat = h_feat + h_feat_
return h_feat
class st_encoder(nn.Module):
def __init__(self):
super().__init__()
channel_in = 6
channel_out = 32
dim_kernel = 3
self.dim_embedding_key = 256
self.spatial_conv = nn.Conv1d(channel_in, channel_out, dim_kernel, stride=1, padding=1)
self.temporal_encoder = nn.GRU(channel_out, self.dim_embedding_key, 1, batch_first=True)
self.relu = nn.ReLU()
self.reset_parameters()
def reset_parameters(self):
nn.init.kaiming_normal_(self.spatial_conv.weight)
nn.init.kaiming_normal_(self.temporal_encoder.weight_ih_l0)
nn.init.kaiming_normal_(self.temporal_encoder.weight_hh_l0)
nn.init.zeros_(self.spatial_conv.bias)
nn.init.zeros_(self.temporal_encoder.bias_ih_l0)
nn.init.zeros_(self.temporal_encoder.bias_hh_l0)
def forward(self, X):
'''
X: b, T, 2
return: b, F
'''
X_t = torch.transpose(X, 1, 2)
X_after_spatial = self.relu(self.spatial_conv(X_t))
X_embed = torch.transpose(X_after_spatial, 1, 2)
output_x, state_x = self.temporal_encoder(X_embed)
state_x = state_x.squeeze(0)
return state_x
================================================
FILE: models/model_diffusion.py
================================================
import math
import torch
import torch.nn as nn
from torch.nn import Module, Linear
from models.layers import PositionalEncoding, ConcatSquashLinear
class st_encoder(nn.Module):
def __init__(self):
super().__init__()
channel_in = 2
channel_out = 32
dim_kernel = 3
self.dim_embedding_key = 256
self.spatial_conv = nn.Conv1d(channel_in, channel_out, dim_kernel, stride=1, padding=1)
self.temporal_encoder = nn.GRU(channel_out, self.dim_embedding_key, 1, batch_first=True)
self.relu = nn.ReLU()
self.reset_parameters()
def reset_parameters(self):
nn.init.kaiming_normal_(self.spatial_conv.weight)
nn.init.kaiming_normal_(self.temporal_encoder.weight_ih_l0)
nn.init.kaiming_normal_(self.temporal_encoder.weight_hh_l0)
nn.init.zeros_(self.spatial_conv.bias)
nn.init.zeros_(self.temporal_encoder.bias_ih_l0)
nn.init.zeros_(self.temporal_encoder.bias_hh_l0)
def forward(self, X):
'''
X: b, T, 2
return: b, F
'''
X_t = torch.transpose(X, 1, 2)
X_after_spatial = self.relu(self.spatial_conv(X_t))
X_embed = torch.transpose(X_after_spatial, 1, 2)
output_x, state_x = self.temporal_encoder(X_embed)
state_x = state_x.squeeze(0)
return state_x
class social_transformer(nn.Module):
def __init__(self):
super(social_transformer, self).__init__()
self.encode_past = nn.Linear(60, 256, bias=False)
# self.encode_past = nn.Linear(48, 256, bias=False)
self.layer = nn.TransformerEncoderLayer(d_model=256, nhead=2, dim_feedforward=256)
self.transformer_encoder = nn.TransformerEncoder(self.layer, num_layers=2)
def forward(self, h, mask):
'''
h: batch_size, t, 2
'''
# print(h.shape)
h_feat = self.encode_past(h.reshape(h.size(0), -1)).unsqueeze(1)
# print(h_feat.shape)
# n_samples, 1, 64
h_feat_ = self.transformer_encoder(h_feat, mask)
h_feat = h_feat + h_feat_
return h_feat
class TransformerDenoisingModel(Module):
def __init__(self, context_dim=256, tf_layer=2):
super().__init__()
self.encoder_context = social_transformer()
self.pos_emb = PositionalEncoding(d_model=2*context_dim, dropout=0.1, max_len=24)
self.concat1 = ConcatSquashLinear(2, 2*context_dim, context_dim+3)
self.layer = nn.TransformerEncoderLayer(d_model=2*context_dim, nhead=2, dim_feedforward=2*context_dim)
self.transformer_encoder = nn.TransformerEncoder(self.layer, num_layers=tf_layer)
self.concat3 = ConcatSquashLinear(2*context_dim,context_dim,context_dim+3)
self.concat4 = ConcatSquashLinear(context_dim,context_dim//2,context_dim+3)
self.linear = ConcatSquashLinear(context_dim//2, 2, context_dim+3)
def forward(self, x, beta, context, mask):
batch_size = x.size(0)
beta = beta.view(batch_size, 1, 1) # (B, 1, 1)
mask = mask.float().masked_fill(mask == 0, float('-inf')).masked_fill(mask == 1, float(0.0))
context = self.encoder_context(context, mask)
# context = context.view(batch_size, 1, -1) # (B, 1, F)
time_emb = torch.cat([beta, torch.sin(beta), torch.cos(beta)], dim=-1) # (B, 1, 3)
ctx_emb = torch.cat([time_emb, context], dim=-1) # (B, 1, F+3)
x = self.concat1(ctx_emb, x)
final_emb = x.permute(1,0,2)
final_emb = self.pos_emb(final_emb)
trans = self.transformer_encoder(final_emb).permute(1,0,2)
trans = self.concat3(ctx_emb, trans)
trans = self.concat4(ctx_emb, trans)
return self.linear(ctx_emb, trans)
def generate_accelerate(self, x, beta, context, mask):
batch_size = x.size(0)
beta = beta.view(beta.size(0), 1, 1) # (B, 1, 1)
mask = mask.float().masked_fill(mask == 0, float('-inf')).masked_fill(mask == 1, float(0.0))
context = self.encoder_context(context, mask)
# context = context.view(batch_size, 1, -1) # (B, 1, F)
time_emb = torch.cat([beta, torch.sin(beta), torch.cos(beta)], dim=-1) # (B, 1, 3)
# time_emb: [11, 1, 3]
# context: [11, 1, 256]
ctx_emb = torch.cat([time_emb, context], dim=-1).repeat(1, 10, 1).unsqueeze(2)
# x: 11, 10, 20, 2
# ctx_emb: 11, 10, 1, 259
x = self.concat1.batch_generate(ctx_emb, x).contiguous().view(-1, 20, 512)
# x: 110, 20, 512
final_emb = x.permute(1, 0, 2)
final_emb = self.pos_emb(final_emb)
trans = self.transformer_encoder(final_emb).permute(1, 0, 2).contiguous().view(-1, 10, 20, 512)
# trans: 11, 10, 20, 512
trans = self.concat3.batch_generate(ctx_emb, trans)
trans = self.concat4.batch_generate(ctx_emb, trans)
return self.linear.batch_generate(ctx_emb, trans)
================================================
FILE: models/model_led_initializer.py
================================================
import torch
import torch.nn as nn
from models.layers import MLP, social_transformer, st_encoder
class LEDInitializer(nn.Module):
def __init__(self, t_h: int=8, d_h: int=6, t_f: int=40, d_f: int=2, k_pred: int=20):
'''
Parameters
----
t_h: history timestamps,
d_h: dimension of each historical timestamp,
t_f: future timestamps,
d_f: dimension of each future timestamp,
k_pred: number of predictions.
'''
super(LEDInitializer, self).__init__()
self.n = k_pred
self.input_dim = t_h * d_h
self.output_dim = t_f * d_f * k_pred
self.fut_len = t_f
self.social_encoder = social_transformer(t_h)
self.ego_var_encoder = st_encoder()
self.ego_mean_encoder = st_encoder()
self.ego_scale_encoder = st_encoder()
self.scale_encoder = MLP(1, 32, hid_feat=(4, 16), activation=nn.ReLU())
self.var_decoder = MLP(256*2+32, self.output_dim, hid_feat=(1024, 1024), activation=nn.ReLU())
self.mean_decoder = MLP(256*2, t_f * d_f, hid_feat=(256, 128), activation=nn.ReLU())
self.scale_decoder = MLP(256*2, 1, hid_feat=(256, 128), activation=nn.ReLU())
def forward(self, x, mask=None):
'''
x: batch size, t_p, 6
'''
mask = mask.float().masked_fill(mask == 0, float('-inf')).masked_fill(mask == 1, float(0.0))
social_embed = self.social_encoder(x, mask)
social_embed = social_embed.squeeze(1)
# B, 256
ego_var_embed = self.ego_var_encoder(x)
ego_mean_embed = self.ego_mean_encoder(x)
ego_scale_embed = self.ego_scale_encoder(x)
# B, 256
mean_total = torch.cat((ego_mean_embed, social_embed), dim=-1)
guess_mean = self.mean_decoder(mean_total).contiguous().view(-1, self.fut_len, 2)
scale_total = torch.cat((ego_scale_embed, social_embed), dim=-1)
guess_scale = self.scale_decoder(scale_total)
guess_scale_feat = self.scale_encoder(guess_scale)
var_total = torch.cat((ego_var_embed, social_embed, guess_scale_feat), dim=-1)
guess_var = self.var_decoder(var_total).reshape(x.size(0), self.n, self.fut_len, 2)
return guess_var, guess_mean, guess_scale
================================================
FILE: requirements.txt
================================================
absl-py==1.4.0
aiohttp==3.8.4
aiosignal==1.3.1
antlr4-python3-runtime==4.8
async-timeout==4.0.2
asynctest==0.13.0
attrs==23.1.0
cachetools==5.3.0
charset-normalizer==3.1.0
colour==0.1.5
cycler==0.11.0
descartes==1.1.0
easydict==1.10
fonttools==4.38.0
frozenlist==1.3.3
fsspec==2023.1.0
future==0.18.3
glob2==0.7
google-auth==2.18.0
google-auth-oauthlib==0.4.6
googledrivedownloader==0.4
grpcio==1.54.0
h5py==3.8.0
hydra-core==1.1.0
imageio==2.27.0
imgaug==0.4.0
importlib-metadata==4.13.0
importlib-resources==5.12.0
isodate==0.6.1
Jinja2==3.1.2
joblib==1.2.0
kiwisolver==1.4.4
lapsolver==1.1.0
llvmlite==0.39.1
Markdown==3.4.3
MarkupSafe==2.1.2
matplotlib==3.5.3
motmetrics==1.1.3
multidict==6.0.4
networkx==2.6.3
numba==0.56.4
numpy==1.19.0
oauthlib==3.2.2
omegaconf==2.1.0
opencv-python==4.7.0.72
packaging==23.1
pandas==1.3.5
Pillow==9.5.0
polars==0.17.12
protobuf==3.20.3
pyasn1==0.5.0
pyasn1-modules==0.3.0
pyDeprecate==0.3.1
pyntcloud==0.3.1
pyparsing==3.0.9
python-dateutil==2.8.2
python-louvain==0.16
pytorch-lightning==1.5.2
pytz==2023.3
PyWavelets==1.3.0
PyYAML==6.0
rdflib==6.3.2
requests-oauthlib==1.3.1
rsa==4.9
scikit-image==0.19.3
scikit-learn==1.0.2
scipy==1.7.3
shapely==2.0.1
spconv==1.2.1
tensorboard==2.11.2
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorboardX==2.6
threadpoolctl==3.1.0
tifffile==2021.11.2
torch==1.8.0+cu111
torchaudio==0.8.0
torchmetrics==0.11.4
torchvision==0.9.0+cu111
tqdm==4.65.0
typing_extensions==4.5.0
Werkzeug==2.2.3
yarl==1.9.2
zipp==3.15.0
================================================
FILE: trainer/train_led_trajectory_augment_input.py
================================================
import os
import time
import torch
import random
import numpy as np
import torch.nn as nn
from utils.config import Config
from utils.utils import print_log
from torch.utils.data import DataLoader
from data.dataloader_nba import NBADataset, seq_collate
from models.model_led_initializer import LEDInitializer as InitializationModel
from models.model_diffusion import TransformerDenoisingModel as CoreDenoisingModel
import pdb
NUM_Tau = 5
class Trainer:
def __init__(self, config):
if torch.cuda.is_available(): torch.cuda.set_device(config.gpu)
self.device = torch.device('cuda') if config.cuda else torch.device('cpu')
self.cfg = Config(config.cfg, config.info)
# ------------------------- prepare train/test data loader -------------------------
train_dset = NBADataset(
obs_len=self.cfg.past_frames,
pred_len=self.cfg.future_frames,
training=True)
self.train_loader = DataLoader(
train_dset,
batch_size=self.cfg.train_batch_size,
shuffle=True,
num_workers=4,
collate_fn=seq_collate,
pin_memory=True)
test_dset = NBADataset(
obs_len=self.cfg.past_frames,
pred_len=self.cfg.future_frames,
training=False)
self.test_loader = DataLoader(
test_dset,
batch_size=self.cfg.test_batch_size,
shuffle=False,
num_workers=4,
collate_fn=seq_collate,
pin_memory=True)
# data normalization parameters
self.traj_mean = torch.FloatTensor(self.cfg.traj_mean).cuda().unsqueeze(0).unsqueeze(0).unsqueeze(0)
self.traj_scale = self.cfg.traj_scale
# ------------------------- define diffusion parameters -------------------------
self.n_steps = self.cfg.diffusion.steps # define total diffusion steps
# make beta schedule and calculate the parameters used in denoising process.
self.betas = self.make_beta_schedule(
schedule=self.cfg.diffusion.beta_schedule, n_timesteps=self.n_steps,
start=self.cfg.diffusion.beta_start, end=self.cfg.diffusion.beta_end).cuda()
self.alphas = 1 - self.betas
self.alphas_prod = torch.cumprod(self.alphas, 0)
self.alphas_bar_sqrt = torch.sqrt(self.alphas_prod)
self.one_minus_alphas_bar_sqrt = torch.sqrt(1 - self.alphas_prod)
# ------------------------- define models -------------------------
self.model = CoreDenoisingModel().cuda()
# load pretrained models
model_cp = torch.load(self.cfg.pretrained_core_denoising_model, map_location='cpu')
self.model.load_state_dict(model_cp['model_dict'])
self.model_initializer = InitializationModel(t_h=10, d_h=6, t_f=20, d_f=2, k_pred=20).cuda()
self.opt = torch.optim.AdamW(self.model_initializer.parameters(), lr=config.learning_rate)
self.scheduler_model = torch.optim.lr_scheduler.StepLR(self.opt, step_size=self.cfg.decay_step, gamma=self.cfg.decay_gamma)
# ------------------------- prepare logs -------------------------
self.log = open(os.path.join(self.cfg.log_dir, 'log.txt'), 'a+')
self.print_model_param(self.model, name='Core Denoising Model')
self.print_model_param(self.model_initializer, name='Initialization Model')
# temporal reweight in the loss, it is not necessary.
self.temporal_reweight = torch.FloatTensor([21 - i for i in range(1, 21)]).cuda().unsqueeze(0).unsqueeze(0) / 10
def print_model_param(self, model: nn.Module, name: str = 'Model') -> None:
'''
Count the trainable/total parameters in `model`.
'''
total_num = sum(p.numel() for p in model.parameters())
trainable_num = sum(p.numel() for p in model.parameters() if p.requires_grad)
print_log("[{}] Trainable/Total: {}/{}".format(name, trainable_num, total_num), self.log)
return None
def make_beta_schedule(self, schedule: str = 'linear',
n_timesteps: int = 1000,
start: float = 1e-5, end: float = 1e-2) -> torch.Tensor:
'''
Make beta schedule.
Parameters
----
schedule: str, in ['linear', 'quad', 'sigmoid'],
n_timesteps: int, diffusion steps,
start: float, beta start, `start<end`,
end: float, beta end,
Returns
----
betas: Tensor with the shape of (n_timesteps)
'''
if schedule == 'linear':
betas = torch.linspace(start, end, n_timesteps)
elif schedule == "quad":
betas = torch.linspace(start ** 0.5, end ** 0.5, n_timesteps) ** 2
elif schedule == "sigmoid":
betas = torch.linspace(-6, 6, n_timesteps)
betas = torch.sigmoid(betas) * (end - start) + start
return betas
def extract(self, input, t, x):
shape = x.shape
out = torch.gather(input, 0, t.to(input.device))
reshape = [t.shape[0]] + [1] * (len(shape) - 1)
return out.reshape(*reshape)
def noise_estimation_loss(self, x, y_0, mask):
batch_size = x.shape[0]
# Select a random step for each example
t = torch.randint(0, self.n_steps, size=(batch_size // 2 + 1,)).to(x.device)
t = torch.cat([t, self.n_steps - t - 1], dim=0)[:batch_size]
# x0 multiplier
a = self.extract(self.alphas_bar_sqrt, t, y_0)
beta = self.extract(self.betas, t, y_0)
# eps multiplier
am1 = self.extract(self.one_minus_alphas_bar_sqrt, t, y_0)
e = torch.randn_like(y_0)
# model input
y = y_0 * a + e * am1
output = self.model(y, beta, x, mask)
# batch_size, 20, 2
return (e - output).square().mean()
def p_sample(self, x, mask, cur_y, t):
if t==0:
z = torch.zeros_like(cur_y).to(x.device)
else:
z = torch.randn_like(cur_y).to(x.device)
t = torch.tensor([t]).cuda()
# Factor to the model output
eps_factor = ((1 - self.extract(self.alphas, t, cur_y)) / self.extract(self.one_minus_alphas_bar_sqrt, t, cur_y))
# Model output
beta = self.extract(self.betas, t.repeat(x.shape[0]), cur_y)
eps_theta = self.model(cur_y, beta, x, mask)
mean = (1 / self.extract(self.alphas, t, cur_y).sqrt()) * (cur_y - (eps_factor * eps_theta))
# Generate z
z = torch.randn_like(cur_y).to(x.device)
# Fixed sigma
sigma_t = self.extract(self.betas, t, cur_y).sqrt()
sample = mean + sigma_t * z
return (sample)
def p_sample_accelerate(self, x, mask, cur_y, t):
if t==0:
z = torch.zeros_like(cur_y).to(x.device)
else:
z = torch.randn_like(cur_y).to(x.device)
t = torch.tensor([t]).cuda()
# Factor to the model output
eps_factor = ((1 - self.extract(self.alphas, t, cur_y)) / self.extract(self.one_minus_alphas_bar_sqrt, t, cur_y))
# Model output
beta = self.extract(self.betas, t.repeat(x.shape[0]), cur_y)
eps_theta = self.model.generate_accelerate(cur_y, beta, x, mask)
mean = (1 / self.extract(self.alphas, t, cur_y).sqrt()) * (cur_y - (eps_factor * eps_theta))
# Generate z
z = torch.randn_like(cur_y).to(x.device)
# Fixed sigma
sigma_t = self.extract(self.betas, t, cur_y).sqrt()
sample = mean + sigma_t * z * 0.00001
return (sample)
def p_sample_loop(self, x, mask, shape):
self.model.eval()
prediction_total = torch.Tensor().cuda()
for _ in range(20):
cur_y = torch.randn(shape).to(x.device)
for i in reversed(range(self.n_steps)):
cur_y = self.p_sample(x, mask, cur_y, i)
prediction_total = torch.cat((prediction_total, cur_y.unsqueeze(1)), dim=1)
return prediction_total
def p_sample_loop_mean(self, x, mask, loc):
prediction_total = torch.Tensor().cuda()
for loc_i in range(1):
cur_y = loc
for i in reversed(range(NUM_Tau)):
cur_y = self.p_sample(x, mask, cur_y, i)
prediction_total = torch.cat((prediction_total, cur_y.unsqueeze(1)), dim=1)
return prediction_total
def p_sample_loop_accelerate(self, x, mask, loc):
'''
Batch operation to accelerate the denoising process.
x: [11, 10, 6]
mask: [11, 11]
cur_y: [11, 10, 20, 2]
'''
prediction_total = torch.Tensor().cuda()
cur_y = loc[:, :10]
for i in reversed(range(NUM_Tau)):
cur_y = self.p_sample_accelerate(x, mask, cur_y, i)
cur_y_ = loc[:, 10:]
for i in reversed(range(NUM_Tau)):
cur_y_ = self.p_sample_accelerate(x, mask, cur_y_, i)
# shape: B=b*n, K=10, T, 2
prediction_total = torch.cat((cur_y_, cur_y), dim=1)
return prediction_total
def fit(self):
# Training loop
for epoch in range(0, self.cfg.num_epochs):
loss_total, loss_distance, loss_uncertainty = self._train_single_epoch(epoch)
print_log('[{}] Epoch: {}\t\tLoss: {:.6f}\tLoss Dist.: {:.6f}\tLoss Uncertainty: {:.6f}'.format(
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
epoch, loss_total, loss_distance, loss_uncertainty), self.log)
if (epoch + 1) % self.cfg.test_interval == 0:
performance, samples = self._test_single_epoch()
for time_i in range(4):
print_log('--ADE({}s): {:.4f}\t--FDE({}s): {:.4f}'.format(
time_i+1, performance['ADE'][time_i]/samples,
time_i+1, performance['FDE'][time_i]/samples), self.log)
cp_path = self.cfg.model_path % (epoch + 1)
model_cp = {'model_initializer_dict': self.model_initializer.state_dict()}
torch.save(model_cp, cp_path)
self.scheduler_model.step()
def data_preprocess(self, data):
"""
pre_motion_3D: torch.Size([32, 11, 10, 2]), [batch_size, num_agent, past_frame, dimension]
fut_motion_3D: torch.Size([32, 11, 20, 2])
fut_motion_mask: torch.Size([32, 11, 20])
pre_motion_mask: torch.Size([32, 11, 10])
traj_scale: 1
pred_mask: None
seq: nba
"""
batch_size = data['pre_motion_3D'].shape[0]
traj_mask = torch.zeros(batch_size*11, batch_size*11).cuda()
for i in range(batch_size):
traj_mask[i*11:(i+1)*11, i*11:(i+1)*11] = 1.
initial_pos = data['pre_motion_3D'].cuda()[:, :, -1:]
# augment input: absolute position, relative position, velocity
past_traj_abs = ((data['pre_motion_3D'].cuda() - self.traj_mean)/self.traj_scale).contiguous().view(-1, 10, 2)
past_traj_rel = ((data['pre_motion_3D'].cuda() - initial_pos)/self.traj_scale).contiguous().view(-1, 10, 2)
past_traj_vel = torch.cat((past_traj_rel[:, 1:] - past_traj_rel[:, :-1], torch.zeros_like(past_traj_rel[:, -1:])), dim=1)
past_traj = torch.cat((past_traj_abs, past_traj_rel, past_traj_vel), dim=-1)
fut_traj = ((data['fut_motion_3D'].cuda() - initial_pos)/self.traj_scale).contiguous().view(-1, 20, 2)
return batch_size, traj_mask, past_traj, fut_traj
def _train_single_epoch(self, epoch):
self.model.train()
self.model_initializer.train()
loss_total, loss_dt, loss_dc, count = 0, 0, 0, 0
for data in self.train_loader:
batch_size, traj_mask, past_traj, fut_traj = self.data_preprocess(data)
sample_prediction, mean_estimation, variance_estimation = self.model_initializer(past_traj, traj_mask)
sample_prediction = torch.exp(variance_estimation/2)[..., None, None] * sample_prediction / sample_prediction.std(dim=1).mean(dim=(1, 2))[:, None, None, None]
loc = sample_prediction + mean_estimation[:, None]
generated_y = self.p_sample_loop_accelerate(past_traj, traj_mask, loc)
loss_dist = ( (generated_y - fut_traj.unsqueeze(dim=1)).norm(p=2, dim=-1)
*
self.temporal_reweight
).mean(dim=-1).min(dim=1)[0].mean()
loss_uncertainty = (torch.exp(-variance_estimation)
*
(generated_y - fut_traj.unsqueeze(dim=1)).norm(p=2, dim=-1).mean(dim=(1, 2))
+
variance_estimation
).mean()
loss = loss_dist*50 + loss_uncertainty
loss_total += loss.item()
loss_dt += loss_dist.item()*50
loss_dc += loss_uncertainty.item()
self.opt.zero_grad()
loss.backward()
torch.nn.utils.clip_grad_norm_(self.model_initializer.parameters(), 1.)
self.opt.step()
count += 1
if self.cfg.debug and count == 2:
break
return loss_total/count, loss_dt/count, loss_dc/count
def _test_single_epoch(self):
performance = { 'FDE': [0, 0, 0, 0],
'ADE': [0, 0, 0, 0]}
samples = 0
def prepare_seed(rand_seed):
np.random.seed(rand_seed)
random.seed(rand_seed)
torch.manual_seed(rand_seed)
torch.cuda.manual_seed_all(rand_seed)
prepare_seed(0)
count = 0
with torch.no_grad():
for data in self.test_loader:
batch_size, traj_mask, past_traj, fut_traj = self.data_preprocess(data)
sample_prediction, mean_estimation, variance_estimation = self.model_initializer(past_traj, traj_mask)
sample_prediction = torch.exp(variance_estimation/2)[..., None, None] * sample_prediction / sample_prediction.std(dim=1).mean(dim=(1, 2))[:, None, None, None]
loc = sample_prediction + mean_estimation[:, None]
pred_traj = self.p_sample_loop_accelerate(past_traj, traj_mask, loc)
fut_traj = fut_traj.unsqueeze(1).repeat(1, 20, 1, 1)
# b*n, K, T, 2
distances = torch.norm(fut_traj - pred_traj, dim=-1) * self.traj_scale
for time_i in range(1, 5):
ade = (distances[:, :, :5*time_i]).mean(dim=-1).min(dim=-1)[0].sum()
fde = (distances[:, :, 5*time_i-1]).min(dim=-1)[0].sum()
performance['ADE'][time_i-1] += ade.item()
performance['FDE'][time_i-1] += fde.item()
samples += distances.shape[0]
count += 1
# if count==100:
# break
return performance, samples
def save_data(self):
'''
Save the visualization data.
'''
model_path = './results/checkpoints/led_vis.p'
model_dict = torch.load(model_path, map_location=torch.device('cpu'))['model_initializer_dict']
self.model_initializer.load_state_dict(model_dict)
def prepare_seed(rand_seed):
np.random.seed(rand_seed)
random.seed(rand_seed)
torch.manual_seed(rand_seed)
torch.cuda.manual_seed_all(rand_seed)
prepare_seed(0)
root_path = './visualization/data/'
with torch.no_grad():
for data in self.test_loader:
_, traj_mask, past_traj, _ = self.data_preprocess(data)
sample_prediction, mean_estimation, variance_estimation = self.model_initializer(past_traj, traj_mask)
torch.save(sample_prediction, root_path+'p_var.pt')
torch.save(mean_estimation, root_path+'p_mean.pt')
torch.save(variance_estimation, root_path+'p_sigma.pt')
sample_prediction = torch.exp(variance_estimation/2)[..., None, None] * sample_prediction / sample_prediction.std(dim=1).mean(dim=(1, 2))[:, None, None, None]
loc = sample_prediction + mean_estimation[:, None]
pred_traj = self.p_sample_loop_accelerate(past_traj, traj_mask, loc)
pred_mean = self.p_sample_loop_mean(past_traj, traj_mask, mean_estimation)
torch.save(data['pre_motion_3D'], root_path+'past.pt')
torch.save(data['fut_motion_3D'], root_path+'future.pt')
torch.save(pred_traj, root_path+'prediction.pt')
torch.save(pred_mean, root_path+'p_mean_denoise.pt')
raise ValueError
def test_single_model(self):
model_path = './results/checkpoints/led_new.p'
model_dict = torch.load(model_path, map_location=torch.device('cpu'))['model_initializer_dict']
self.model_initializer.load_state_dict(model_dict)
performance = { 'FDE': [0, 0, 0, 0],
'ADE': [0, 0, 0, 0]}
samples = 0
print_log(model_path, log=self.log)
def prepare_seed(rand_seed):
np.random.seed(rand_seed)
random.seed(rand_seed)
torch.manual_seed(rand_seed)
torch.cuda.manual_seed_all(rand_seed)
prepare_seed(0)
count = 0
with torch.no_grad():
for data in self.test_loader:
batch_size, traj_mask, past_traj, fut_traj = self.data_preprocess(data)
sample_prediction, mean_estimation, variance_estimation = self.model_initializer(past_traj, traj_mask)
sample_prediction = torch.exp(variance_estimation/2)[..., None, None] * sample_prediction / sample_prediction.std(dim=1).mean(dim=(1, 2))[:, None, None, None]
loc = sample_prediction + mean_estimation[:, None]
pred_traj = self.p_sample_loop_accelerate(past_traj, traj_mask, loc)
fut_traj = fut_traj.unsqueeze(1).repeat(1, 20, 1, 1)
# b*n, K, T, 2
distances = torch.norm(fut_traj - pred_traj, dim=-1) * self.traj_scale
for time_i in range(1, 5):
ade = (distances[:, :, :5*time_i]).mean(dim=-1).min(dim=-1)[0].sum()
fde = (distances[:, :, 5*time_i-1]).min(dim=-1)[0].sum()
performance['ADE'][time_i-1] += ade.item()
performance['FDE'][time_i-1] += fde.item()
samples += distances.shape[0]
count += 1
# if count==2:
# break
for time_i in range(4):
print_log('--ADE({}s): {:.4f}\t--FDE({}s): {:.4f}'.format(time_i+1, performance['ADE'][time_i]/samples, \
time_i+1, performance['FDE'][time_i]/samples), log=self.log)
================================================
FILE: utils/config.py
================================================
import yaml
import os
import os.path as osp
import glob
import numpy as np
from easydict import EasyDict
from utils.utils import recreate_dirs
class Config:
def __init__(self, cfg_id, info):
self.id = cfg_id
cfg_path = 'cfg/**/%s.yml' % cfg_id
files = glob.glob(cfg_path, recursive=True)
assert (len(files) == 1), 'YAML file [{}] does not exist!'.format(cfg_id)
self.yml_dict = EasyDict(yaml.safe_load(open(files[0], 'r')))
self.results_root_dir = os.path.expanduser(self.yml_dict['results_root_dir'])
# results dirs
self.cfg_dir = '%s/%s/%s' % (self.results_root_dir, cfg_id, info)
self.model_dir = '%s/models' % self.cfg_dir
self.log_dir = '%s/log' % self.cfg_dir
self.model_path = os.path.join(self.model_dir, 'model_%04d.p')
os.makedirs(self.model_dir, exist_ok=True)
os.makedirs(self.log_dir, exist_ok=True)
def get_last_epoch(self):
model_files = glob.glob(os.path.join(self.model_dir, 'model_*.p'))
if len(model_files) == 0:
return None
else:
model_file = osp.basename(model_files[0])
epoch = int(osp.splitext(model_file)[0].split('model_')[-1])
return epoch
def __getattribute__(self, name):
yml_dict = super().__getattribute__('yml_dict')
if name in yml_dict:
return yml_dict[name]
else:
return super().__getattribute__(name)
def __setattr__(self, name, value):
try:
yml_dict = super().__getattribute__('yml_dict')
except AttributeError:
return super().__setattr__(name, value)
if name in yml_dict:
yml_dict[name] = value
else:
return super().__setattr__(name, value)
def get(self, name, default=None):
if hasattr(self, name):
return getattr(self, name)
else:
return default
================================================
FILE: utils/utils.py
================================================
"""
Code borrowed from Xinshuo_PyToolbox: https://github.com/xinshuoweng/Xinshuo_PyToolbox
"""
import os
import shutil
import torch
import numpy as np
import random
import time
import copy
import glob, glob2
from torch import nn
class AverageMeter(object):
"""Computes and stores the average and current value"""
def __init__(self):
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0
self.count = 0
self.list = list()
def update(self, val, n=1):
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
self.list.append(val)
def isnparray(nparray_test):
return isinstance(nparray_test, np.ndarray)
def isinteger(integer_test):
if isnparray(integer_test): return False
try: return isinstance(integer_test, int) or int(integer_test) == integer_test
except ValueError: return False
except TypeError: return False
def isfloat(float_test):
return isinstance(float_test, float)
def isscalar(scalar_test):
try: return isinteger(scalar_test) or isfloat(scalar_test)
except TypeError: return False
def islogical(logical_test):
return isinstance(logical_test, bool)
def isstring(string_test):
return isinstance(string_test, str)
def islist(list_test):
return isinstance(list_test, list)
def convert_secs2time(seconds):
'''
format second to human readable way
'''
assert isscalar(seconds), 'input should be a scalar to represent number of seconds'
m, s = divmod(int(seconds), 60)
h, m = divmod(m, 60)
return '[%d:%02d:%02d]' % (h, m, s)
def get_timestring():
return time.strftime('%Y%m%d_%Hh%Mm%Ss')
def recreate_dirs(*dirs):
for d in dirs:
if os.path.exists(d):
shutil.rmtree(d)
os.makedirs(d)
def is_path_valid(pathname):
try:
if not isstring(pathname) or not pathname: return False
except TypeError: return False
else: return True
def is_path_creatable(pathname):
'''
if any previous level of parent folder exists, returns true
'''
if not is_path_valid(pathname): return False
pathname = os.path.normpath(pathname)
pathname = os.path.dirname(os.path.abspath(pathname))
# recursively to find the previous level of parent folder existing
while not is_path_exists(pathname):
pathname_new = os.path.dirname(os.path.abspath(pathname))
if pathname_new == pathname: return False
pathname = pathname_new
return os.access(pathname, os.W_OK)
def is_path_exists(pathname):
try: return is_path_valid(pathname) and os.path.exists(pathname)
except OSError: return False
def is_path_exists_or_creatable(pathname):
try: return is_path_exists(pathname) or is_path_creatable(pathname)
except OSError: return False
def isfile(pathname):
if is_path_valid(pathname):
pathname = os.path.normpath(pathname)
name = os.path.splitext(os.path.basename(pathname))[0]
ext = os.path.splitext(pathname)[1]
return len(name) > 0 and len(ext) > 0
else: return False
def isfolder(pathname):
'''
if '.' exists in the subfolder, the function still justifies it as a folder. e.g., /mnt/dome/adhoc_0.5x/abc is a folder
if '.' exists after all slashes, the function will not justify is as a folder. e.g., /mnt/dome/adhoc_0.5x is NOT a folder
'''
if is_path_valid(pathname):
pathname = os.path.normpath(pathname)
if pathname == './': return True
name = os.path.splitext(os.path.basename(pathname))[0]
ext = os.path.splitext(pathname)[1]
return len(name) > 0 and len(ext) == 0
else: return False
def mkdir_if_missing(input_path):
folder = input_path if isfolder(input_path) else os.path.dirname(input_path)
os.makedirs(folder, exist_ok=True)
def safe_list(input_data, warning=True, debug=True):
'''
copy a list to the buffer for use
parameters:
input_data: a list
outputs:
safe_data: a copy of input data
'''
if debug: assert islist(input_data), 'the input data is not a list'
safe_data = copy.copy(input_data)
return safe_data
def safe_path(input_path, warning=True, debug=True):
'''
convert path to a valid OS format, e.g., empty string '' to '.', remove redundant '/' at the end from 'aa/' to 'aa'
parameters:
input_path: a string
outputs:
safe_data: a valid path in OS format
'''
if debug: assert isstring(input_path), 'path is not a string: %s' % input_path
safe_data = copy.copy(input_path)
safe_data = os.path.normpath(safe_data)
return safe_data
def prepare_seed(rand_seed):
np.random.seed(rand_seed)
random.seed(rand_seed)
torch.manual_seed(rand_seed)
torch.cuda.manual_seed_all(rand_seed)
def initialize_weights(modules):
for m in modules:
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
if m.bias is not None: nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight, 1)
if m.bias is not None: nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.Linear):
nn.init.normal_(m.weight, 0, 0.01)
if m.bias is not None: nn.init.constant_(m.bias, 0)
def print_log(print_str, log, same_line=False, display=True):
'''
print a string to a log file
parameters:
print_str: a string to print
log: a opened file to save the log
same_line: True if we want to print the string without a new next line
display: False if we want to disable to print the string onto the terminal
'''
if display:
if same_line: print('{}'.format(print_str), end='')
else: print('{}'.format(print_str))
if same_line: log.write('{}'.format(print_str))
else: log.write('{}\n'.format(print_str))
log.flush()
def find_unique_common_from_lists(input_list1, input_list2, warning=True, debug=True):
'''
find common items from 2 lists, the returned elements are unique. repetitive items will be ignored
if the common items in two elements are not in the same order, the outputs follows the order in the first list
parameters:
input_list1, input_list2: two input lists
outputs:
list_common: a list of elements existing both in list_src1 and list_src2
index_list1: a list of index that list 1 has common items
index_list2: a list of index that list 2 has common items
'''
input_list1 = safe_list(input_list1, warning=warning, debug=debug)
input_list2 = safe_list(input_list2, warning=warning, debug=debug)
common_list = list(set(input_list1).intersection(input_list2))
# find index
index_list1 = []
for index in range(len(input_list1)):
item = input_list1[index]
if item in common_list:
index_list1.append(index)
index_list2 = []
for index in range(len(input_list2)):
item = input_list2[index]
if item in common_list:
index_list2.append(index)
return common_list, index_list1, index_list2
def load_txt_file(file_path, debug=True):
'''
load data or string from text file
'''
file_path = safe_path(file_path)
if debug: assert is_path_exists(file_path), 'text file is not existing at path: %s!' % file_path
with open(file_path, 'r') as file: data = file.read().splitlines()
num_lines = len(data)
file.close()
return data, num_lines
def load_list_from_folder(folder_path, ext_filter=None, depth=1, recursive=False, sort=True, save_path=None, debug=True):
'''
load a list of files or folders from a system path
parameters:
folder_path: root to search
ext_filter: a string to represent the extension of files interested
depth: maximum depth of folder to search, when it's None, all levels of folders will be searched
recursive: False: only return current level
True: return all levels till to the input depth
outputs:
fulllist: a list of elements
num_elem: number of the elements
'''
folder_path = safe_path(folder_path)
if debug: assert isfolder(folder_path), 'input folder path is not correct: %s' % folder_path
if not is_path_exists(folder_path):
print('the input folder does not exist\n')
return [], 0
if debug:
assert islogical(recursive), 'recursive should be a logical variable: {}'.format(recursive)
assert depth is None or (isinteger(depth) and depth >= 1), 'input depth is not correct {}'.format(depth)
assert ext_filter is None or (islist(ext_filter) and all(isstring(ext_tmp) for ext_tmp in ext_filter)) or isstring(ext_filter), 'extension filter is not correct'
if isstring(ext_filter): ext_filter = [ext_filter] # convert to a list
# zxc
fulllist = list()
if depth is None: # find all files recursively
recursive = True
wildcard_prefix = '**'
if ext_filter is not None:
for ext_tmp in ext_filter:
# wildcard = os.path.join(wildcard_prefix, '*' + string2ext_filter(ext_tmp))
wildcard = os.path.join(wildcard_prefix, '*' + ext_tmp)
curlist = glob2.glob(os.path.join(folder_path, wildcard))
if sort: curlist = sorted(curlist)
fulllist += curlist
else:
wildcard = wildcard_prefix
curlist = glob2.glob(os.path.join(folder_path, wildcard))
if sort: curlist = sorted(curlist)
fulllist += curlist
else: # find files based on depth and recursive flag
wildcard_prefix = '*'
for index in range(depth-1): wildcard_prefix = os.path.join(wildcard_prefix, '*')
if ext_filter is not None:
for ext_tmp in ext_filter:
# wildcard = wildcard_prefix + string2ext_filter(ext_tmp)
wildcard = wildcard_prefix + ext_tmp
curlist = glob.glob(os.path.join(folder_path, wildcard))
if sort: curlist = sorted(curlist)
fulllist += curlist
# zxc
else:
wildcard = wildcard_prefix
curlist = glob.glob(os.path.join(folder_path, wildcard))
# print(curlist)
if sort: curlist = sorted(curlist)
fulllist += curlist
if recursive and depth > 1:
newlist, _ = load_list_from_folder(folder_path=folder_path, ext_filter=ext_filter, depth=depth-1, recursive=True)
fulllist += newlist
fulllist = [os.path.normpath(path_tmp) for path_tmp in fulllist]
num_elem = len(fulllist)
# save list to a path
if save_path is not None:
save_path = safe_path(save_path)
if debug: assert is_path_exists_or_creatable(save_path), 'the file cannot be created'
with open(save_path, 'w') as file:
for item in fulllist: file.write('%s\n' % item)
file.close()
return fulllist, num_elem
================================================
FILE: visualization/draw_mean_variance.ipynb
================================================
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Done\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import torch\n",
"import numpy as np\n",
"import time\n",
"\n",
"print('Done')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"past_traj = torch.load('data/past.pt', map_location=torch.device('cpu'))\n",
"fut_traj = torch.load('data/future.pt', map_location=torch.device('cpu'))\n",
"\n",
"traj = torch.cat((past_traj, fut_traj), dim=2) * 94 / 28\n",
"\n",
"prediction = torch.load('data/prediction.pt', map_location=torch.device('cpu'))\n",
"prediction = (prediction * 5 + past_traj[:, :, -1:].contiguous().view(-1, 1, 2)[:, None]) * 94 / 28\n",
"\n",
"\n",
"mean = torch.load('data/p_mean_denoise.pt', map_location=torch.device('cpu'))[:, 0]\n",
"mean = (mean * 5 + past_traj[:, :, -1:].contiguous().view(-1, 1, 2)) * 94 / 28\n",
"\n",
"sigma = torch.load('data/p_sigma.pt', map_location=torch.device('cpu'))\n",
"sigma = torch.exp(sigma/2)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"court = plt.imread(\"court.png\")\n",
"mask = np.zeros_like(court)\n",
"\n",
"class Constant:\n",
" \"\"\"A class for handling constants\"\"\"\n",
" NORMALIZATION_COEF = 7\n",
" PLAYER_CIRCLE_SIZE = 12 / NORMALIZATION_COEF\n",
" INTERVAL = 10\n",
" DIFF = 6\n",
" X_MIN = 0\n",
" X_MAX = 100\n",
" Y_MIN = 0\n",
" Y_MAX = 50\n",
" COL_WIDTH = 0.3\n",
" SCALE = 1.65\n",
" FONTSIZE = 6\n",
" X_CENTER = X_MAX / 2 - DIFF / 1.5 + 0.10\n",
" Y_CENTER = Y_MAX - DIFF / 1.5 - 0.35"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAEiCAYAAABkw9FZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADaVUlEQVR4nOydd5xcVf2wn3PbtO3ppIcAaYTee1N676CgoIjttaD+kCpNsGEBFRQRBBXpvTeF0BQIJQkJ6aRvtk+57Zz3jzszO7Mz25JNdrO5D59lJnduObed8z3fKpRSipCQkJCQkJCtFq2/GxASEhISEhLSv4TCQEhISEhIyFZOKAyEhISEhIRs5YTCQEhISEhIyFZOKAyEhISEhIRs5YTCQEhISEhIyFZOKAyEhISEhIRs5YTCQEhISEhIyFZOKAyEhISEhIRs5YTCQEhISEhIyFZOKAyEhAxSbNvmRz/6Edtssw2xWIy99tqL559/vkfbfvzxx5x22mlMmjSJeDzO0KFDOfDAA3n88ceL1nvnnXf45je/yfTp00kkEowbN47TTz+d+fPnd7rvd999l+OPP566ujri8TgzZszgt7/97Uada0hIyMZh9HcDQkJCNg3nn38+DzzwAN/5znfYbrvt+Otf/8rRRx/Nyy+/zP7779/ltkuXLqW1tZXzzjuPbbbZhlQqxYMPPsjxxx/Pbbfdxle/+lUAbrrpJl5//XVOO+00Zs6cyerVq7nlllvYddddefPNN5kxY0bRfp977jmOO+44dtllF6644goqKipYuHAhn3322Sa7DiEhId0jwkJFISGDj7fffpu99tqLn//851xyySUAZDIZZsyYwfDhw5k1a1av9+n7PrvtthuZTIZ58+YBMGvWLHbffXcsy8qvt2DBAnbccUdOPfVU7rnnnvzylpYWtt9+e/bdd18eeOABNC1UTIaEDBTCtzEkZIBw++23s+uuuxKPxxFCFP1NmjQJgHnz5rFs2bJu9/XAAw+g63p+Bg8QjUa54IILeOONN1i+fHmv26frOmPHjqWpqSm/bN999y0SBAC22247pk+fzty5c4uW//3vf2fNmjVcf/31aJpGMplEStnrdoSEhPQ9oTAQEjIA+O53v8tFF13EsGHDuOmmm/jhD3+IaZoAHHvssXzxi18EYOrUqfnvXfHee++x/fbbU1VVVbR8zz33BOD999/vUbuSyST19fUsXLiQm2++maeffprDDjusy22UUqxZs4ahQ4cWLX/hhReoqqpixYoV7LDDDlRUVFBVVcXFF19MJpPpUXtCQkI2DaHPQEhIP/Of//yHX//611x88cX8/ve/zy9PJBJcddVVXHnlleyxxx692ueqVasYNWpUyfLcspUrV/ZoP9///ve57bbbANA0jZNPPplbbrmly23uvfdeVqxYwTXXXFO0fMGCBXiexwknnMAFF1zAT3/6U1555RV+97vf0dTUxD/+8Y8etSkkJKTvCYWBkJB+5uabb6auro6f//znRcsPOuggAObPn58XBnrq4pNOp4lEIiXLo9Fo/vee8J3vfIdTTz2VlStX8q9//Qvf93Ecp9P1582bxze+8Q322WcfzjvvvKLf2traSKVSfO1rX8tHD5x88sk4jsNtt93GNddcw3bbbdejdoWEhPQtoZkgJKQf8TyP559/nqOOOopEIlH0W27Q7ajq7wmxWAzbtkuW59TxsVisR/uZMmUKhx9+OF/84hd54oknaGtr47jjjisrlKxevZpjjjmG6urqvM9CxzYBnHXWWUXLzz77bADeeOONHrUpJCSk7wmFgZCQfmTJkiW0tbWVhOAB/O9//wMCP4HeMmrUKFatWlWyPLdsm2226fU+AU499VTeeeedkjwCzc3NHHXUUTQ1NfHMM8+U3X9u2YgRI4qWDx8+HIDGxsYNalNISMjGEwoDISH9SGtrK0CJR75Sivvvv5/p06czefLkXu935513Zv78+bS0tBQtf+utt/K/bwg580Jzc3N+WSaT4bjjjmP+/Pk88cQTTJs2rey2u+22GwArVqwoWp7zXxg2bNgGtSkkJGTjCYWBkJB+ZNy4cUDgaV/Ir3/9a959910uvfTSouU9DS089dRT8X2f22+/Pb/Mtm3uvPNO9tprL8aOHQtAKpVi3rx51NfXF22/du3akn26rsvdd99NLBbLD/i+73PGGWfwxhtvcP/997PPPvt02qbTTz8dgDvuuKNo+Z///GcMw+Dggw/u9rxCQkI2DaEDYUhIPzJkyBBOPPFEHnnkEc455xz2228/XnvtNf7xj39w4YUXcs455xStP3XqVA466CBeeeWVLve71157cdppp3HppZeydu1aJk+ezF133cWSJUuKBuO3336bQw45hKuuuoqrr746v/yiiy6ipaWFAw88kNGjR7N69Wruvfde5s2bxy9/+UsqKiqAINrgscce47jjjqOhoaEoyRDAueeem/++yy678OUvf5m//OUveJ6XP4/777+fSy+9dINNFyEhIX2ACgkJ6VcaGxvV+eefr2pra1UkElG77LKLuuOOO8quC6iDDjqoR/tNp9PqkksuUSNHjlSRSETtscce6plnnila5+WXX1aAuuqqq4qW/+Mf/1CHH364GjFihDIMQ9XW1qrDDz9cPfroo0XrHXTQQQro9K8jjuOoq6++Wo0fP16ZpqkmT56sbr755h6dT0hIyKYjTEccEhISEhKylRP6DISEhISEhGzlhMJASEhISEjIVk4oDISEhISEhGzlhMJASEhISEjIVk4oDISEhISEhGzlhMJASEhISEjIVk4oDISEhISEhGzl9DgD4b577Yau6xiGgWLTpyYQHf498JIhCFzHwTQNEKLDLwGqw78HL8EZKkBJief5WJbJxl2BvrjjG3rlVZlt++oJ7PunQSmF53lIqTBNA00rOMamPJW+3VXfHLXjTx1fxo1BlN47pRSu56FrGrqul/SNoq+O3UMGSj/pS4mSEtM0y122Yjai0f17vt0dXRSt4kuJ7/vMeuu/m7RVG0ov0hELDMMgErFAqfwNHigP32ahYGxTCDzXwTLN4s53q0SACC6O7wWdQMQyg2Uq+/vW9aRsZgSOJnAcB8sy0TURXvHNhFIgZSD8moZBeNUBBK7nYzs2kYgVCEQb3EWWn2j1BFXw/w2nl9uXrC7yn7bj4Pv+RrZn09H72gS5hIWqw6xPbOkvQfePmcjL/SIrEIkebjnYCQZ9JYqXicLfQzYZKnets5e5vfsJ2eSIQPDSRNA/FFJOKTNYKTxXhULTNERXKqmedAll1Cq97kk60xT1ZGcbcvNKTjl7ZfLnMnD7wl4IAwUnkRv4Ve77YHjke3CTRJk57mA49ZAtGlEw+oePY/8xWHrCjUUgUKrjDLiM+aRkaZeb9A292WfHG9rL9hSdoxr4T0cvNQOFQgAF56a2fMVAF6hO7qFSKuwBChnYgu+gRmX/F17+fkAUfYQQjH1KqXZtiSp/fXp/zXpvKNgo+mAXxRPIgfuU9FgYyKvHB+65bDLab2ZWIZuV8rbCS9E1IhyM+gOV62jDB7J/CB/6Ikp1AGojHs2OF7c3F3sgvhAD92HpsTAwEC/r5iKv4VGiQ6+7NV+VkJCQkJ6x4QrUwdDHbhnq415FExRR7DGy9bA1nWtISEjIRhNoBxRZ/5YtqQ/d2DG8xHQ3cIWC3kcTIBCq3Q6UIx9BttXQ0Xc4JKSfCR/IfmXLmP/1L6qD70CXj2xfXMyNeSc28vhb2rOw4aGFWfKC3pZ25htAs2OwNBkh6ekkDMlw3SUustYD1fF3n/EJm2rL6+9mbz5U/n/kwi/DgPdNz1bw6m0B5DyqtwRXsb6l81Qi3V+PLq9Rf/cbfXn8Amf7gcqGhRaWYdBEGJYjO9DPbqzIy0KOr9HIENb5LgnDx1eClalIfhPH12hyTHaqbSsSCLYOgWHgPvBbA4P5VQwZwOTH/vb3P28aoFQrULjOYKDzc9sy3sbeawYKPMbzCeZyDJa7WoalyUhHpQgADbZJg22W3UYpeL+hgogusTSJENDitF9yx9dotE2m1SQZEnVLCkUMCsFhED8TISEhZWWALB3EUqHyfehgVBiWaMiLFgx8p/MNcCAsyCtXcEcH243tSNLTN3hb29ew/c5rQs1pSgBgahJLV0Q0iQDWFwgZnWkaQkJCQgYC+WCrosQshXnrC4O0i38etJTE/A7ckbJXmgGFQMqBezKbkoTh45QM6IpK02dCpc2i1ihJt1Rg0IRCEwpPdl8g0pUaroQk5QUPpeCDxgRVlk9M94npkqguiRkSVwqW95cWoUTML8g+NBinAAOYwd63hgw8ClXhuaFeSolSCtu2O6y9aTuEXmd/2eQvTLt2xPP9Ad0V9irpkOu6uK5LOUvIQD7JjUcwTPdopC7/79wZb2O1kBCKSRU+HzVVFZkShICZdW1UWz5SwQcNFTQ7pZfc1IJB3ZEajhSozlIeAlIJmmyDpi5uXc78MKkyzdCoS1SXm/aZz437ojg1LqpzO2FIyOBjcPeCQOlYnsu/okAqhZIS1/WQSmGaVhc72TT0+g5sxC3roOOgTGGCkoMM5FR1vUg6JIhGoxjGhqvLt1wEFUAslmZZm0XS00gYkrEVDtWWiee6RGSKKQmfVU4FKT87O6+wqTaDHN0aMLEiU+SECMHgOb02RbUZzOIV4ErBx40JWtzS2yPIl6XplkWtMRa1xhBCEc9qEOKGT9yQxHUfVwo+S/WdNkEp0DQNy7K2in4xJASCZz6gN2/nFkqH91plhQDP9fF8L/v+R9B0veC6DFz6tpvqam8Cz/NItrX16RH7kp4LAwJ0XUfXt05hAKA2pqiNOQXLBKCjazqmaWG4DhVmEwKFaRjouoYqyMtQbXnsVNtW7BRYYecFgdxeLU0xqbK84LBTbZKY4ZPxddK+RtrTWJ6MILvQJiglSHp61u+hvLNjTpswuSrNsKiDqfW+UxNZ+5hpZh8rtQUmGQkJ6SXRaDT7bZALAuSiAwRKKZRSuJ6P5/kITctOFo3g9y0kI13f3q+ugyeFEO2a0wFIL8wEA/umblrKnXvxKK3pOlE9hlISz/NwXQfX8zAME10XaFn9WnXEY2Yns+9C59OqSNeCg6V5VGXH9RZXp7FMRENUl1SYPilPI+1rXZofcnzaEuPTlhiGpojrWS1CVpvgK1idtjrXJORMAoWXa2t+bEIGPVt66rHuw1Db11BZk4AvFZ7n4fsS3TCIxSJoupYv6V6qPt+aKe4My0WkDRQ2IANhSFcIITBNE8MwAqHAcfA8MA0dXdfy71a5Ko9Fk2gVaBI6ExwKGZ+waXLMEi3ClJp284MEMr5GytNJeRpL26JdahM8KWiRBi1u+d9zmoSJWb+E2Kb2SwgJCelzun9nRT5/mCwRAqJo+sA3BYT0jFAY6BMKsu7lvpURClzPxzT04AXKhuF0dLDbkFLQPTE/aEBcl8R1CRFocoyy2oSIHmgCUp7eZThkjsWtMRa3xtCEymsREoZPwpAkDJ+ILmkZDPkSQkK2QhQgJXieh+d6WSEgnhUCQhvgYCIUBvqUji9GYCMyTQvDMPE8FzuTQQhBJGKh9eFUuqdahBydaROmFmgTPCVIe4E2YUFLDL+bKIc2V6etQ3ilJlSRBiLMlxASMrApzB/j+RLHcRFCEI3F0LM+AWGM0OAjFAY2OcFLE2gKLHRNx3EdbNtB1zUMw0ATHV+tTZ9QtifaBEMEeRQqTZ81GbNLv4Skp5P2SjUJ5UwRuXwJQyIeFaZHhelTYfhYWrtkMiiyL4aEbCmIgrIzCnxf4rguQmhEChwDQyFg8BIKA5uM8i+NputEtSjSlNh2hkwmg2mY7R74qOCl2wzat95oE3ril+ArSPs6SVcn6WkkfT1I1VzmXKQSrMuYrMu0CxiRrGBhCsXqdHuMcqhNCAnZhOQEASHyfgGe52OaJpYVQWilRZhCBh+hMNBn9KQER3YdIdA0nWgslvcn8G0by7QoCFkeUO9eTzQJuoAKI5jl5/igMVFWo1COrtI2KwULWmJMqUkRN/ySOg4hISEbQFYQUID0fBzXRdMM4vEEWkkY+QDrlEL6lFAY2KwUq/+F0AJ/At3Admxsx8YwDExDH5DKuN76JUDnGoWZtW2YmqLV1Wnz9Ly/QVd+CUlP53/1lUESpayDYoXhkygwM4TmhZCQnpErLiSlwnacwCQQiaIbZj5MsGDNkEFOKAz0GT19YQpy9mcRmiAaieLpBo7j4HsOlhVoCboVCgZ4bo/uNAqJAi2CAtK+xpymRNk6D/n1lAhMEa7O2oLlhiaLakCE5oWQrZ3OvI9UViPgun6QD0U3iEajWZNA4ZYDtGMJ6XNCYWCgIMAwTXRdx3FsbNvGMHugJdgC3tWeahQEQfjjdpXpkuyLAKPiNn42aiHt6yW/lysGpRR82JhgSNRtD3k0/XxlyJCQwUx546VA+hLbcVCKosyBHdcM2XoIhYGBhFIILauq0w0cx8bzPKKRCJooyFQ0yN/Rnvgn+ApS2RTLOTNDuSJQwbqCtenioimGprLCQXtOBF/Rp7UaQkIGGgqB5/u4roum6UQiYeKgkIBQGBhIiHYHQ8M00A2ddDpNxnawzCCt8UDObd2XdKdN0AX5sMccvXFW9KSg2TE6FSByGRanVKcYFnNCh8WQLZpcUXHXdfE8v0O4YEhIKAwMMAozGQqEEMRiMTzXw7YzmFmzQT4oYZBrCHpLV86KhqZIZp0Vk55G0tNxepBhcV5znPktMeKGzDsr5jQKAy4vQtivh3QgqHciUFLhuG5gFojFMAyD0CdgMzPAL3UoDAxI2t1+hNAwrcCXwLYzgZbAstC0bLnU8H3O0515ocLwGVGwvivbqzkuau28VkNRdsV0+3JLC/wPTKFYmwnzIoQMTGQ2gZCm6VknwVDPFVJKKAwMWAr9gLNVEaMx0pk0tu1gmdkSySqcEBbSm/BHU1PUWB41lsd6u3ytBlOTGJoi7ZVGNzhSw7G7zoswNZsXIbxHIZsbBThuUFjIikSyZgGt4NeQkHZCYWBAU1wASWgasVgcz3UKzAYGqpMqiLk9hANR93RmYpheG2RY9JXImxeSWYfFpKfjya7zIvy3vhI9n9bZy/s5RAqqPA4IE0PIoCH3CLtukEkwGo1imCZhTxDSFaEwsIUhhMC0LBCCTDqDQmAZBuUk/ZzWWxH6F3RHdyYGXSiqTJ8qszgvgiM1PmpMlBRoKsRXgibHoKnAWdHUJJVm4HcQpl4O2WBE8fsdVBlU2I6LrunZTIKhNiCke0JhYIsjeKFNw0TEwHFcHOVhGhqa0Cj7wod9QI/obYZFAUQ0yeQu8iI4UqPVLXVWdKVGQxcmhk9bY/ksjSEhnZETBHIaQKkUGdtB13UiRUmEQvodwYCOBguFgS2CjtnAArtALklRJpMhk3GIRoOiIiK7XqgN2Dz0JC+CnRUK2v+MLk0Mba7OrLXVRPVAg5Cr7lhp+KGAEBJQUO1UCIHvB2mFNU3rkE0wZCAgGNhVH0NhYItBlf0uNC3vWJjO2ESjkXyxo4H72A0+utMqRDRJJCIZGnGB4A5mfI2Pu0m9nPE1Mr5WVN0xJyBUZgUEpWB5W5ykp1Nhy0AQCU0Mg5vs3CDXE0hf4TgOQujEYmHEQEjvCYWBQYDQNGJZgSBj20HGQi10HhzICCDWRerloVEXRwYhjR1DHssJCDkaHZ3GBpPptW0MjYQCwaCjTC0S35dByWErGzGgdWIuDAnpglAY2KIpqICYFwhS7QJBmIRgwNOdiUECaa/dvNCWTZzUWU6EHB83VuTzIFQYPhXZz5gR1mTYolGFXwWu6+F6HpFIFNM0CROPhGwooTCwxVJaYlRoglg0Tjqdxs4KBJ35FIYMHLoyMWiQz3g4MhYskwR1GdpcnQUtsU4Fg1wehML8CZoIajJUmDkBQeIrWB6GNm5BBPfbcz1c1yMSjWJaudDB8GUP2TBCYWCLpbwRIMhFEMvWNMgKBKJzc0FoStjy0AiyKVYYPmszZtlkSYYmAVHipCiVoNU1aHW7rskwozbJkKx/Q8jAIqgxUCAImFbBLyEhG0YoDGzRlHv5VaAhiOWcCh2iUQu9zIgf5C0P8xBsyXSWLGlGbYoq08ORWj6Vclu2wmPG69657KPGBJYui0wMFaZPVA/NDJuT3DsqslK7UkEeAdfziERjmKbRzy9v+SLJIZ0xcK/NViEMmKbJCSecxKOPPozrbh2zncBkkHUqzNjEokE9g3LPYigIbLnkfA6WtFpBNIEpGV/Z7nOQi2IonOV7SuSLNnVVk8HxNRp8jYYCzYMuVIGJIfj0pGBZaGbYJIisAADBp1JB5cHAR8AYAD4CYecxWNgqhIH99j+AL1/4Verr63nllZf6uzmbjbxAkC2DXOhDIHKzjfBd3uKptjymVmWwHYd4LBYIfV1gCEW15VHdRU0GQ1MoFWRPLMRXPSj97JjMrG2jNhQINp5c7REhkFLhOC6maYU+AiF9zlYhDOx/wIEA7HfAAVuVMAC0mwwKfQjCsMOQLJ2bGZJUmR4ZX2s3MWQ/uy39rOCDhgoS2SRJFdl6DAnDK2uuCumafIph20HT9II6AwNdENgS2hiSY9ALA5FIlN133xOAPfbYi0gkim1n+rlVm5d2p8IUjusSscxQEggBug9tjOmSmC4ZRruZwZEiLxwsbevczJB09SChUrbssxCKuCFLBIQ2NyzUlKfD+KlEVhDIOEHl0kgU0e+mgUI6a0vYwWxpDDphYPTo0Vxx1TVEIlEATNPAsgJvW8uyuOPOu3DdoKOx7QzX/uRKVqxY0W/t3VwEGoI4mUwa1/MxDT3UDoQAva/JYGmKOsujzvJocsqbGTShSoQElfVVKBQQOrLVF2rqMK4qCbbtZkuYD7TMgqLgc6AIJyEbyqATBhobm0gmk4wbN77s73V1Q/Lf586dQ0Nj4+ZqWj/SnofAtCzS6aAnNk09fIdDNorOzAwz65JUGD5tXkGypGzZ5+5QCj5sTDAi5uRLPscNf6sTXBXgeX5BrYGBlzRE0wyUkiglKU2ZvrXdsS0boVTHRKjl2Xfv3amoqMQwun+Z+xtN0zjr7HM56+xzAYWmtbfZ932EEPzj7/fwj7/fg5Sy/xq62QleTtdxsO0M0YiFrpePMAjZsnBcr8iBcHN2w82O0WWRpkJ81W5iaHV11mZMVDfZFCGIYsjVY8gJCJGCMMeSNmzhpgYFuJ6H6/pEozEMs9y8rb9n5AJNN1CynDAQ/B52Lu34nk9bWyuvv/nf/m5KWQadZgBASsm999xNMpnkqxddXPSbruvc9sff8+gjD/VT6/qfwBNZ4bgOEWERFjcL2Rh6Y2bQhaLa9PLCgiMTZc0MHfGVoMkxaCqIYjA1SaXlYwnF6rSVX74lmRpK5s8iMKf4UuG6PpFIUG+g8637E4X0vS7a0d/tC+kNg1IYyDFp0rb4fqBmE0KglEJKyaRtt+3vpvU7pmnheR4Z2yYWjYQKvZB+ofNohjYE5Ms9t7o6docoBldqNGTK29CVgkVtUXauaxvQz3bHtikFUqn2XAKWOcDH1AHduJBeMJC8UfoUwzDYb//90XUdz/P43//eAQLNwAEHHNiFtD2Yyb24QX7iaDSGJjRczw9f6ZB+IRfNUBtxsXRJbcRlp7o26iyPWstjXMJmek2SvYe1sPfwFqbXJhlXkaE24mJoXT+1LY7B62uq+aAxwZK2KA2OgdcDk0R/ogDbthFCtJsGxMBuc8jgYNCOiFOnTScWi7N8+TJ+ev21LFmymAsuvIhTTj2NaDTGmWedwz1/u6u/m9l/KIGmgRWJkEqlECIQoERhkfQy5VJDQvqanpoZctkUh2azKSog7WvMaUoEEQpl8JWg0S6u35AwfKosnyrTo8ryiOmSlgHgc6AQeK6HEFmHQRG+gCGbj0HpQAhQVV3NIQcfyjPPPIVt2wDU1tVx6qlnsMsuuzJh4kSWLlnCZT/+EQ0N6/u5tZubgpmGUriug+N0UtQo9AHaIsg7EMZjaGLzOhD2N82OwezGCjr2ZNWWR9rTcGTXClBdqJJMi0KwWX0OFALP97Fth1gsnk0sFPwSMjgY6A6Eg1YY6I4zzjyL886/gDv+dBsPPnh/fzenH8iN8kHy83Q6jZReif+AyqUtDhnQbM3CAHQe0aAA29dodg1aHJ0W1yDp6SWCQzmiumTbqjTVpofZjUli4xBIFWQYNC0rqEIYagUGHQNdGBi0ZoLueO65Z/nc547i80cdzcMPP9hnIYbNtsbSVpM2V8sWjQlUmh2XVUc2Z0hjuY5FtX8KQTQaJZ1uT0gkOq4WEjKA6czUIAgG9ajuMCLIQ4anBK2uTotj0OLqRYWYCsn4Gh83JgCIGz7VWdNCteX1afVGhcJ1PYSmYRSUIw6VciGbk61WMwCwww5TuPk3t/DWW2/w29/cTGNDw0btr9nWeK8+2v0bLKDKlGR8sRmFg666lqBb8z2XdDpNNBJB08KUIVsSW7tmYGP4oLFn4Y2FWLqk2vTzBZ8Shr9BfgdKCDzXx3VdYvEEml7Yv4aiwGAi1AwMYD75ZB6zZr3Ovvvux5e+1MqaNat56qknNlgoWNrawzAgBS1OYMds8HUaMjoTq1yaHI3kJtMedNWw4DddNzAtC9t2iEatrKYyW+Iw7JdCBimdhTdOqEjjSo1mJyjQVJgcyfE11vka6zKBENEx/XLZXAdlFHRSKlzPw4pE0AZUquGQrY2tWhgAuPWW35BIJDj8iM8B8OabszZYGGhzN/xlXtzSPjNp8HUabJ3tqh3WZ/RuTQ49XdYT4cIyLXzPyxc0EqEgEDLI6a5YEwRRCS2uTnPWtNDiGEVOh+WKNSkFi9uizKhNogtVmlMACswDZpkQwtBQELL52OqFgcaGBi790SX8+LIr2H2PvXAdt/uNOqHClDTIPsr3r2BBU3tWtZwGoZAGGQgNhcfrbL3GrHBR30G4KBIQhECIINwwk04jpULTQ5VzyOCnu/BGXShqs7kPACRBVcZm16DZMajPlDczJD2dNmWAAgOFIRR69tPzPXzfJ55IFIQRhoT0D6FeKsutt/wO13U45bTTN3gf4yvdYOAsLOZV+L2vUfTYLKEUzG+yaMjoOL6gIaPzXn2UJS0ms+sjzFoV44N6i2Zbx9ANMiLOh41x3lxbxQeNCZqdrV5uDAnJowGVps+YeJAUqTZSfhJh6Cqf6MhDkFEaSaXT5Ou0ejpYcSQaCsj4sMbWWJ7RWGNr2P7mO5+QkLCHz9Lc3MRf7vgT/+873+fF55/jgw9m93of1RHJzkMzxer5KhdUu8o+oitaHa0osq/fNIEKlnQ0T2R06qJ+kXYhZ/+cXJmm3jYGTTGYkJCNRQE+gm0SDo1OB58hATVxH0dpWMIjF3+gAN9XKKHjaiaeD54HbQXpltMK0o7OKMsnooemgsHAQL+LW3U0QUeEENz0819RU1PDNy7+Kq674SaDrugYfjg06rOg2Qoelv4WEHpJpelhSy0UDvqZMJqgb8gojWbfxFUappBU6y5REZjSJIHvgI/IfxYGGK61LRpTOq4vMHVFTdwnagRmgTFmGgm4SsNVgozroxkWetZpsM0XZVMlRzTFcEuih8k+tng8zyc5gKMJQmGgA2PHjeOWW29j6dIlXHXlZRsdbthTeiQgFH7v7bLN0ZcI2Lm2DaDfU7tubYTCwMaTURprvGjJ8mrdRUPRXWaBpNTxVKnlNSp8RhhBFlQFpDM2hmlhWlE8BZ6CdY5e9hUVQLUhg3ThQmEIMIUKK41ugQx0YaDHZoKt5dlbvmwZ//j7PXzxvC/xhS+cz29/86vNctzqiGRmxC5aljBllyaH3izrjfahXHrWHqFgdmOiJARrSyknOzjYWt7U8nQ1s8+hAIlAquBTZb83yU6cAKVOQitvwNcJZv66UJiapN6PlKxTrbu5RJ94no9SYBommgBLgAVENUValt67nEZAKXCVwAXSCLQOwoGjBE2ehiPB0qDGkEQ2adbEkMFGL3wGOo4eW5Auu5c8++zTzNhxJkcedTQLF37Kk088ttnbYJomF5x6Eo8++jCuWywkdBQaerqso3BRTkAQwLbVbvHyXqA6CbFa0BrD0mSoLQjplp4M6J1tVziz95VOxtOp1R307MxeksvtV0pnFQ19FWhacoN+7lPrsKeIAF1kitpeo3tEsm1XBMJAJBLN5hRof7lqTEnaLtW6VhsSTQRtK9ThSgWOEjjZdhf5G/iQ9nVGRfxQIOhXOiaWGNj3osfCgEJRrHwc2Ce2MTQ2NHD5j3/EV776NS7++jdpamrk9df+s1nbsN/+B/DlC79KfX09r7zyUp/ss6fah2pLFi1PGJIqkWSZXVl2sO8JSVcnSdDZhdqCLYMNHZQ3ZtvOBvShuo0hVDaAJhgYc9+DAR7aZPnurFUanc7sC9GFKisQWEJSpbk90rlEhSRqlArmShFUJNQ0TNMsUeBENMWoiN/F7D7Q1rlZs4JXoEXIlNEoADS4Wuhv0K/kVLDt9tqBfCfCaIIu+POfbqO2ro4f/vBSLmtu5qMPP9hsx97/gAMB2O+AA/pMGChHOQGh3HLXkcRTTax2K0h6OhFN0uoWPz5CBOVh2zopJ1uIUvBxU5yJlRlMTbEyZYVag03EhgzMXQ3KZnZQhsI5j8hrkhyC43XctlJzMcoMTMGSYEBrk+WfnSZpdjugd2baKlyem81rBHZ3jewMX0BESNZ6pWr+Gr1ngkBnKIJMg47rEovFs8mFSq9DRFOMsDo/R10o9FxDsiGLnoRmr3yEuCMFrZ5ACIEhFGbWtBD6G/QXHSfUA4ueCwMKbMdG97IvqwhU2YM5haZSil/98ucMGTKU62+4idv++HueevLxTX7cSCTK7rvvCcAee+xFJBLFtjOb/LidIzBNkyorRW2sFUPXEaiyleICv4HScrLlcKXG/OZ40TLH12jMag1qLK/0GANUUNjQAbfPt1FBpcncrNmWGusK7NiFqnNTqOwMW+RTVuT+Optl92RQTnYyoKeVTkJs/IBeDi2ruu9sZl+peSVq/Y4YwmeEkdlgbUhXuJ6HrhvoRt/NvwyhMHSI6oq03zN/A7L+BmbW38DQFI4M/Q02BVJKPNcjJzr7vk8P/fX7hR5HE+yz1+5ompbPmCmEIB6Po+uDO7oAYNq06fziV78B4OmnnuS2P96K4zh9tv/Ro0dzxVXXEIkEMzHTNKirG5L/vaFhPa4bDIC2neHan1zJihUr+uz4PcX3POxMhkjUKsqn1JGOA7gnRYkWoSfEDJ+0V/x8lasz31OBoTeCRW/W7cwLfbhhE8kOfoXDkAKcDoN0jiG6gylk0Ywbsh06Gk1+qZNbpeaB9PB8iWmaRVltO/NwN4TsclBv8Y2yQ6dAUaV3LYx1tW11ftvyA3OrNMq21xI+ddkZusjO5HODe24/nd2HEUamTwb0DSHQCkDGtolGYxhm3ytjbSlYVcbfYIjpl/U3KMRTxfkNcoT+BhuPkioYJ7IPqO/7OLbDrLe28GgCTQji8RiG3r6J2Er0TatWr+Lee+4mmUpy3nlfZurUadxw/TV89tnyPtl/Y2MTyWSScePGl/29UDCYO3cODY2NfXLc3qLrBkLT8H2JoWtFkYyFdEzt2uwYJdoCIWC7qhQLW2Kdzvo6CgIQDIqzGxJEs7MXIVRRxTnH12i0TUbHbaKGzNuWM77GqlSkZL0hURdTKCRBfnkFOH6x8JLTVmxfkyZh5gZ3yNkAO5sJN/gmiU40Z51t09yFfbvzGbdGtBPRrLczbZEdYA2hcMusYwpJVPgdkmyqfOZNAWSkhq1K2xoRkmqt69wdlpBlB/Ra3c074nVGVMhNNrPfGDzPRdN0jBKtQN84YffE3yBnUghCGXvmbzDS8kvLJYT0GKFpRKJRcvfY8/w+nUT2NWGegV4yfvwELv3xFQwfMZxbfvdbXnrx+T7Zr6ZpnHX2uZx19rkopYo0LkpKEIJ58+Zyw/XXsL6+vk+O2XsEnuvh2On2qoY97MvKmRSqTa/T8rEdq8ANBCotn0k1peaaDZlF9/U2ldh4nkfEstBETkhTNMtgYOxIRPgMNZziwZy+mWVv7Ax9YxwXBxq+VGQyNtFYPChGBLS/NB29zTcPisAB0e1BfgM9Z07ImhQG1hu5JdB+j33Pp7WtlVkDNM9Ajw3+7Yk0t26WLl3C//v2N/jPf/7NJT/4Eb+75Y+MHDlyo/crpeTee+7mz3+6rcT0IjQNIQRTp06jpqZmo4+1YQRPgG7oCE3D8/0e+QXkqLY8ZtYm2WdYCzNrk/mKcOMTdsnsQwiYWZekppN875pQaP3gIZ32BCLrcFb415m3tiEUJrLoz8r+mZ1sYwpJTPjEhU9CeCSER4UW/FmdDIgRIUngEJUZEppX8OdTp5efidToLkY2Rl6juIwGtM+yo8JHR2UT5/RsMN+Ybdu3txljphlh2FukIJDzvXA9D03XA1+BAdJ9CsDUFHFdEe0k1XHumfaVwJaCpC9odjXa/ODfOc2SLQVrHJ3lGZ01jo7diaYhZODTi9BC2NoTmuSw7Qw3//LnrFm9mnO/cB7XXPdTrr7yclau3Hg7/qRJ2+L7ftY/I2cvVixYMJ/tt9+B0aPHsPDTTzf6OL2jXQUgBJimhePYGH3gL9JV+dgJCZhdps78zLpAmPCU4KNOiiglTJ9xiUz+iV2WjJaNcqgyPbavTqOJdjv03KY4TU4Z27zpU62Vzto7U23X6U6nA5kmVK/V4TW6y5oyppNq3YNOzPgbozrvLEyuJ2zMtlsSKqeF6TimCoHvSzzfJxaNZwXejiv1v3RQY0jSfpn3wgjcSjuakzwp8o+arwStYX6DblBF3wbyCDp4QwE2A08//SRPPvEYmqbx29/9nv32P2Cj9mcYBvvtvz+6ruN5Hi+++Dy+7yOEYMyYsSxevIhzv3AetXV1fXQGG4ZuGAghAu1AH+yvM61BTlCojbhYuqQ24rJTXVv+d0MoJlZkymoWtqtKMzzqMiz7N7kyXXa9SVUZEoZPTJdENYmlKSZUlNdWjK8oP7htyEy4b7fp2kN/MMy0tyRy74Tv++iajj6ATas5f4OYHmi4Ynrw7ypDUmkoqg1JQldYWmlIYrmMiRD4G4SiQCkDWRCAMM/ARtHY0MCtt/yWWCzG//vO97ns8qt49JGHuOPPt+N5vQ9/mzptOrFYnOXLl/HT669lyZLFPHj/v/jx5VcyZsxYli5ZwsGHHMrYMeM2W82EcggRCARuH2kHuqK7OvNdaRY2ZL3erptjQ2bCm2ubkE1ImVFPiCC9sS8lESuS1fAN3IytXeU3ENkwxEBPppDZMEVPgd9FfoNmV8PQcrkNCBMfbQGEDoR9yLHHncBXvvo1mpuauPqqy1m0aGGvtq+qruaQgw/lmWeewrbbO/xIJMKRRx7NwoULuPFnv2L2++/xi1/ctBkFgo4dmUD6PqlUEssyMAyd8F3vX9oLFcULHAhDNjXlVL+KQGvm+5JoLJY39w02Vtt62WgEQygqOvgi5IQKmQ1ldNXWl9PA93zaBnChotBM0Ic88fij/ObmXzJ02DCuvf5Gtp08uVfbtzQ38+ijDxcJAgC2bfPoow/z0Ucf8f7777HLrrsxbdr0vmx6L1Fomo5pWvi+HKgTnpCQfsN13SAUd5AKAgC1ZnlzU6VRalJQClK+oN4NBAhfCdJ+kB8hUyZh0oYzeK/3pmYLFwY6BkT1PaZpcuqppwf5xHvAe++/y4MP3s/69fX8/Be/Zr/9Ns6PoCO33vpbGhsb+NrF3+SCr1y0mfwHSryj8hkofSmRMpQGQkKgPfUwiGxegcE7OJX4G2T/XW1IqnRJlSGJ6QpTC5xzO8tpUO9qpHyBKztPjtRzBm5fNHBbFrDFCQO+5xfY43PJHDw8r/tCJOXwPA/f73zbXMGgkkFdget6SL9YOm5saOCOP93GJd/7f7z91ptcdsVVnHHm2RvUtnKsWrGCb3/zYjRN45RTTqOuv5wJVS7kUevy+oWEbG24nothGGja4Dep5vwNxkZ9RhREEfjSx/c8IpoioSuqdUlnbqu+Eji58EVPo8VRpBxJ2hessbNhi7aO3QMNQjAWFPv2eK6Hv4HjQ18zkAWCXuYZ6H883+9wswW+X/oA9Hh/3QgShQWDihBBZjGvk4HQcRxu/Ol13HvP3Zx3/pe55Ac/6rF2oTvWr1/PQw/ej5SSo48+rn+iC0TgKBWxIvmoggGWIygkZJMjOnxRCnxfouvGwOk0+wHpS3yvIE+ICEo8l6Ojc6EjodUP8hekcyYFKVjldC8QlJvceX7XE77Nx0AWBTZIM1DuZmy+p770SJ3lz9p4SgsGxWhPzxL8iW6Od+89d3PjT69j/wMO4qc3/pzq6pouW9vTlj/x+GMkk0mOOvoYhg0d1sOt+or2kja6oQflWX1JuRKdA/vxH0RsxQPPQEGJdkEgKEiUe0/6E1Hyr/axd1M9NNnCVx1OvboTH4OhpiShB2G9ORcLh05SfHsdwxYL+2Po7Jz68y6055sUA9rRulfRBJUVlYFTDKBEwSmqTTArVB3/EXi0O46DlJJoNEjYIoTAtm2kUkQjEfJJ0rvdvwIhyGQyaEJgWRajx/SuYNDll/4fq1atxLSsbg+3ww5TuOKqn+D7Hu+8/Tb33vu3fDSAUCp//co9LJ1d2/32259LL7uSl196gV/+4mfdn3OfE9wT27aRfpAKt6M4MNATbQwWPF+SzmTCaIL+QJAv35zO2JhmBCvSfZ+weSgNaSxeUjxA5fsaVS5Zcrk4ypIvQKAZ9X2fWCxa9FvGD0ouO9logmpDEtWKG5B2HNbKaCept4MIBFNTRDRwZfv+TAExP01UDyKwIEjYlkmn0XSdSJ/fk568Ze1jVxBN0Mbrb77Tx+3oG3qcZ0ASVN7SNS8Y/Aufls0QQ5u7pK7nZQ9l54/pZk0ESgX1olU3pUqL9ue6QVywlKxetZrW1tYeFQz6+OOPWL1mDXb2oe+O2e+/x8VfvZBf/OrXHH3MsQwdNozb//D7fPhhx2zlhY20IlbZUtGvv/4av7n5l3z3+z9g0aKFPPzQg922o28JWm0aJmnXzZfqDAei/qFjSuGQzUT25ZUyKAnd7jg4MKeBvi9xXCcod0250MgNfY7at/I8D6UkmQ7LAarzDQF8RXG1D4HveRi6gSvK1CxB4noeLtCKRrpgCPMVZEScarcNJYO9KiVxHAdd11GbwtG5iwvVUcjypY8cDCWM995rdzRAkznVeHHcudrkD367nGpZEU494wwe/Nd92TC83IvX+xdQdGi7ruucd8EFnH/BhSUFgyAQOP557z388ZZbkLJ3+fkBRowcyfd++CO2nTyZkaNG8e9XXuFvd/6FuXPmoESBlC6CY6EJEpUVXeZ3OP9LF3Lqaadz7TVX8dabb/SuQX2AUop0Oo2ha9mcA1tOCs7BgudLbMcmHo+DCgvKbG4UAsd1kVIRi8cHUEhhaZ/oeT7Jtragf+niSekTcaZwltONRbewJZ4waI1UlbQv6qbyixw9ghSl/aLhO1S6rQNCFMtloVYCpFAIBW9s8SWMFegSNKUozRGhNoMtpP0Ahx1xCF//9rdpWLWGl555tuC3DWlEh208n3t+fzuZ5ja+fsn3StYWQiBtF93x261avThs42erueLb30U3dA476kjO+fKX+dNdd/P2rFn87c938NH7s4NdikAbk8993gV3/fUORo8ezQ9/9GNefulF7r337s2aoVAIDUPXcRwHQy/WYAyULnHwowaGiXorJHfZfc/HzGccHFjkxuLCx0NTAt0P+u5Sk0DPleCdH7HrNbrCxMXwW0haMTzdwPA9Ek4a03dRQuBpOnastLYHgK8ZGF5gfi06iQ1pSk9UzJ2u334NPAHom2PSvOH0XBggEAgMKbLCQKEOpM/b1SUHH35Y9vNwXn3q2fYf+vAdnLzD9vjZimNCCJRSSClpbWnhzPO+yKTJk3n56eDYU2fuyD/vuJOG+vU9P4Dj8+KjT/Ly409zwBGHcc5XLuB3f7mDj9+fzWdLlvHnW29l3fr6TsNxClFK8Yuf38ivf3srRx9zLLPeeG2zpys2DDPrz6HQO2YcCQkZrIhAHSxl0M0HJoKBREd/AZFfLBQYMhAKctqkjevKS50Ve94plx7Z8l0STrnKpYoIHinTwzZL/QA0pbD1KBqKtGnhagam9KjKpLG88pVQNykC0MDV1ICeHfU4mqAwdEwoEEpkP7Nekpvpv1gsxh777wfAngfsRywWy/+G6ps/QzfZ/9BD0Q0Dz/N44oGH8DwPXdexLIs5H3zIPgcdyI9vvJ4f33g9J519JnsfeMAGnY+Sin8/+wIXnX42V37n+1RUVvL5E4/jgm98HcPQezzZs22bn914Pcm2Ni688CJisVjvn4aNQGgamhbmHAjZysi+nEGlUR1RJAgPDC+OnKq64zJRZCYQWU+rjfnrPe1xSb0/XpWdLj0xIOK5eLpOU6wC27CQmoZtWKyrqMIxzI08x95dj+A655b0/7PQFT2PJthrdwwfDF+g56erZd3e+pTR48fxk1//Ih89YJgmQ4YNzf++fl09nhtIe5lMhqu+cwkrli7bqGPO3H1XfnnHbSxbvIRrL/k/lny6kAmTt+XKX97E2Anj+cn3fsj0nXfixSefRmiCy3/2U2qG1PHOf17ntl/cTP3adb06niqwrA8dNpQfXHc1O+2+G3M/+pirr7iM1nQyG6rU+R5yjB8/gV/86jd8/PFHXHP1FUi5OSrUBW13bBvfd4lY5gB/7LcsiqJJOplceL7Eth3iiRibx2wXkkMB6bSNaUUYuv0Mxh1yMomR40iuXsaylx+iZen8/m4i7bN+ged5pFrb0HyF5WUndmW22RL8fWzDoCUSw9UNTN+j0s6ghKApFscvk/Qp4joMS7Zu9nY6OrhG4DcwUH0Gei4M7Lk7hgTTF2hy400xPSVekeCnv/8d03basdt158z+kEsv/hapZHKjjlldW8OhRx3JUw89jJ0pKBgUjXD0ySfx0tPP0NzYlF8ejUW56fZbmTZzJvVr1/Hwvf/gmYcfo7W5eQOOHsRCTNt5JpfeeB3xeJxf/vLnvPP2W11uU8guu+7ONddez9IlS7jqystZv753wsmGIn1JOp0iGrHQtJJmhWxCAmHAJp6IUywMtA8DKvfP3C/h/ekTfKnI2A4jp+7KLl+7OjAdaDoq62D8wZ9+MqAEAs/zi4SBYh+w4AEpdAEuFCSK1xq4rKyqRZaJwBJKYfoenqZj+h5VdprIBias6wmCwPfL1cE1BFLILV8Y2G/P3TF8geEHD09OEbI5+hNN1znnqxdwzlcvKPHwV0qhlOLe2/7MvX/6C7Kf1NR1Q4fwxa9fRKKign0OPhClFLNeeoU1q1bzyN//2a0/QZGDjwg+4zWVXHL1FRx48CFBaeQ7/pTXgnTH6WecxflfuoAPZr/PFZdfitvD7TYGJRXJZFtQyVDXgwQi4YCzSeg4sHu+j207JOLx4miOLnrtUBjYODQrSqSqFhGrwqysZbtjziY+dBtEwSCkpE/jgg/56K839lMr253YcvlgPM8n2dqGntcMBOuVf1RU+X/lnCQH6DNUn6gs609QDtNz8QuEA6vPhIPsxRECRwNvsGgG9ttzd3QZmAm0vK9AsUCwqZ+Lk889i4t/UOrh7zgOSxZ8yt1/+BNvv/Y6nZ2SaVmcdPYZPPz3+3AdZ5O1s7q2hiNPOoFzLvwysUScr59xLp/O+wTo7hopEO1pe3xN4RuCM75wLl+96GKWLF3CjTdcx6pVK7ttQ21dHRdeeBH77Lsf8+d/wjVXX0kqtXEak25RgalGKZ+IFcQID/QZxICnvS8PPjpe0OCRwfVywkCs/ZqLguetjHlBifLLt3aqJkxh3GGnUjFqPG2rlrLsxQdIrl6GVVlLpKoWq7IWq6oWPRL45Xi+jxAa4w8+ASNa6qtjNzfw1o1f39ynkaXAjS/7MLi+R7K1Dc0H01f538qJA93nDhmYT4+jG9RXlIYmdo9iaFsLlt8XAkFWIyfA08DXBVIoZm3pwsC+e+2O7gfhhYGNqf0hUR17rE3Ej665msOPOrLIw19JiVagKVi3Zg1vvz4LIQR/+f0fimbkhx11JJfdcB3XXXpZNiRx03LMySfx/Ssu4+PZH3DDZVewasWKot87s9PlfvE1hdQF0Yo4O+wwhUsvv4La2jo+/HA2t/z2t1n1f9fXftq06Vz1k+tYs2Y1V1x2Kc3NTX1zcmUReJ5LJp0iFotueVWwBhLZgbrs4F+ySOC6Lq7jZGPc6ZE5oKusl1srVROmsPPF1wICoWmorM/N6v++jN1UX7J+oHb3MAyTEbvsT2zIyIGjGVCgFEgpUUqifIlUEk8qPMcJzL2q/SETuclILlqsIESyoxNi/tnpQRv6C1c3SJoxfN1A9z083UCJ7nsl03eoyZTxK+jtuQiVV+FJAVIHySDQDOyz9+5oEgylgRBIVeiY1i4cbCoMw+CJF18kHo/jui5PP/44Rx13HKZp4rouj9x/P++9+y677r47hx5xBHVDhrBwwQLu/NOfeO3VV5FSct3Pf86BBx/Mv19+mct/+MO+a1wXp/6Dyy7juJNOpLmpibv/8hceeeghHMfObpN10cl+5LUs2Q5fCfCFQmgCIQSxeIKrrv4J+x9wIKtXreLPf7qdWa+/ll+3s8ZMmDiR666/ETtj89//vsM//3lvn4YemqbJCSecxKOPPoJj2yRTbUQtC00b6P6zAxtFgTa2sCPOaQmUymZ6C7zZfd8PUmML0DQNXdcCDZ6Wj11p30nuYduKTTmaaWFV1GBW1mBl/8YceDyxoaOKcgUoKUk3rGHtu//OL5Oeg9PSSKa5gdb1a9Fch8SIMcz8yhWIjj4Dt/+ElmWbymeg4AHJhUBni7l5vo/v+VlTqiy61UIJdKFlTZOB1FDoZtLeDwk0IQoy5xU+NFvWw9NqVeLp3ZsOhJLUZBr75JiBECWygWoKKRRvvrmFCwN777U7lqYT0S2EpiGlLHIn2dTJFHbaZWd++bvfsWzpUq694koWL1rE8PHbce3117DthDGccuEP+eyjd6g0PIYMHcpXv34xI0aOZMbMmSTb2pj1+usccuihGGYQD3/y0ceQyWS6P3BP6ehRmX1P6oYM4cxzzqGmtoaDDjmExqYm/nbXX3nk4YdwXRcFaIjgT4hsx63lBwFXesE6WvCG1tXVcf4FFzJmzBh232NP5s2dyx1/up3Z77+HbhgFoU3FL+vIkaO44cafMXLkKJ577hn+cOst2HbfnP/BhxzKD3/0Y3524w28/PJLZNIpDEND17RQGNgo2odvKSWe56Nyn9nU2/lOukMHLsgKEkIhNB1d19B0DV3XyT0ig/nedFT1r3z9aeymdcHAXxEM/Dk1fyFjDjwOIxovWe6m2phz989wWhtxWpvw0oHJzXF9/IKsg1XjtyuOJnjpoU0oCEBw44McKK7n4bouvucFz4cQ6JqOEmTrrwRhdb7v47s+EcNq91XK7kOh8KVESolUCoFCCC0rXAYa2Vy4HGxJogA4QqNe6z7kOqJ8hsiN7xsLY+0U4Csfx3O2fDPBfnvtQdyKYojiELd2BdOmfSyqq6s5+IjDeebxJ7BtmxZP5/2WONGoxZdO/Tz/evJV1je2sHNViirDZ/SYMVx5w3VU19ZQXV2N9P0ic0IymQQFqVSKdCrFNT++nBWffbbJ2i+RDBsxgnPPP48jjjyShoYG1q1ZwwvPPc/sd99j1fLPUCqo/BcQPEIePpqpF7Q9cJj0fZ/pM3bkwq98lRk7zuR//32H2//wBxZ8uiAoGKTn3PnbBYLhw4fz3e//kKlTp9HU2Mhtf7yVN96YtdHndvmVV7Pvvvvz+uuvcf21P8GxM0jpY5nGoB5w+oySCVa26puUuF4wu5O+RMmCbHEySBKiIFBBaoF2SEgwlEBIlU+dkRcUNEAT6IaOYejohl4QET040EyLuim7Me3c7wfaNtG9qr8dxbCZ+xEfPrpY1e/7NCyYzUd3XNdhbbBtF80w8sXNcuJboRF1UyL9IPd+roCb0IJsoKZp5gfwnCdvTtvheT5OyiZmWJS7+4G2IBAIfOUHGgap0ITAMAxM3UDfQo2ANhpNQsdFoKNwypzHSOUQ6dP71t6Xp+w0r781MAsV9UoYSFgxdKHTefex+eTED1tjNLilsfeGUMyoTDOqOsp1v7iJqdOnd7uvFcuXc8m3vkNTr1Tn3bnUBOKRROJ4Hp4fFFjSNI2JEyfylYu/xn4HHpjfJpVKsXrlSn73i5uZN2dudqnCUz56xEAzyr98Sin23Gsfzj//y0ycNIlXX36Z22/7I6tWrSQSsQo6tfZ7M3LUKL528TfZc8+9ePvtt/jj729h9epVvTj3diKRKPfd/xCWZeE4DmecdjLJZBuZdJpYNEKYjLCdnGiWp8DBr32mJZBSBTM810Nl08XmBv/AeVcEXVjOO1wDTw8Gf10GET+6pF0YyD2LIvhTWcFBM3TMwsgPgnEjL0IOZOdCoWHGK7GqarKq/mqsimC2P3zXAwPbfReqfuk5OK3NuK2NOG3NOK1NuG3NVI7bjp2+dm0gJOk6yvdRwOw/XE7z0k+KnDOlDKoURqMxDNPcTBdM5M/HcZxsxVaJrgUCgGUF77zICQBKFFSYDfA8HzdlE80LAx3VmhT9W2a1BZ7n4UuJEALTMDB0A61o8rLlYSPywoGJokb5fSwI5EQBha98Uk6a1wajMNCfmZbfaErgyPIDpAB2rkpRE1Gc/cUvctZ5XygJSQwyhmk0rG9gyNAhpFNp3nz9dV554UXefee/eD0KL+nqBVC4vovjB8VLDE3HNAx0TUcgqB1Sx9HHH8crL7zE0GFD2e+gAznupBPxPZ/nnnqaf9x9D+vWribjO5ixSJeFiiAQMg46+BDO/cL5DB8+nCWLF/OXP9/O22+9hWmZZZu6z777c/HXv0lNTQ0PPvAv7r3n7m7Pe/TonpV5Vkri2DbXXPljVqzYdBqXLYmO3vtZ3yIgEAakAscJVL34QQ0QTeZCebNpwLPmgcJ9egJcIysM+ALTB13lZqjtNgGVXV+i8AUoTYAGmqFhWkaJpqA/HQwL1fzJNctZ9ebzOC0NWTV/NWZFNaITZ7DOVP1OWzPv3/pjnLZm/EyqR8duW7WUZS/cT/PST/J+PblOL5dfIJFIFGkSNh2BScDzPDKZTD4raiQawTTMQADowZjcnWag5Jh5bUcgFDieiy+D/jNiWBhFyX1EfvALCcgVw/OUTzoUBvqezjQDOepMjx0r0wCceNqpXPStb5Sss+jThVz+gx8SsSIcdNihHHz4YUyYNJHWlhaaGht5+403mfPhRyxeuIjVq1Z1GrII7a8AgK8kGc/F9z10oWGZJrqm59cK1i9WJdYOqcsLA8edfCLxeJynH3+Cu+66k9ZUW7fCQA7DtPjCuedx2hlnALB8+TKefvJJXnnlJZqaSp1ipk6dwS9v/jW+77N82TJ+99ubmTt3Tqf7j8cTXHv9T5k6dVq3bZnz8UdcceklpFKdd7xbEyWagdxyFSQNchwX6fpoMlcUrN3+n9tByRyup8IAxYN8oGxQeS9npYEwdaIRCz2bMSq3Xmlhsk2D0A3Mimpqt9uJHU77eruaX0lQ3av5pevgtDUxet+jqBg9qUeq/p6Su9Yi5/OrwHU9fKWIxRKFjvebDCUVtuNgZzKAIGJZQXlzvXeCSLswEOnB2qWmDonC8z1cz0MqhWUaWLpJ6C5cnlAY2MTkfAa6On6d6TE+5vCTK3/AIUccjpZVn+WcawA+mv0BD/7zPpYvW05DfT0jRo3khFNP4chjj6G1pYXKqiogUOMvX7oMJSUP3ncfs/7zGtJvj6jI+9caGseddCL3/+tfIGXJS9LxdenYfgFEYjFOOOVkTjnrDCzLYvnyZfztb3/lnbe6ykLY3orauiEcfdQxLFq4kL323oeDDj4Y3TB45+23eP65Z3nnnbfyNQRq6+o4+uhj+fijDznvSxew3Xbb8/RTT/LXO/8c+FWUQdM0zjr7XM46+9zAoaigJ/R9HyEEf7v7r/zt7r9ibpmmxT4jP/vvqEHOLpMK7IyD53qIrBCgS4HeUYNQtMeCuIAeCgNlnzsRzOCkAF8L/oSuYUUsTFNHCFUqwPTihS8Xr9+yZB5C0zETVZgV1flZvpmowoglALJq/hFFM/8iNb+SuKnWQM3f1oTTGvz5djp/3M5U/S1LP+n5CZS5Xu0lxgW27SJ0nUikJ4PqhhI8KFJK0qk0rutiGAaxWCzrD9C+Tk/pnTBAwRNU3N/7SuJ4Dq70MTSdqGmho4U6gQ6EwsBmoMXT+bA1htdFmjXLMFg56558SOLzTz/D544+CsMwkFKiFc4elOKzZctZ8MknxOJxHvznP1m5YiUTJ23LpMnbMnOXndlj772CYzc38/YbbzLr3//h3Xf+S8a2cX2XAw87hKuuuZYbfvIT/vPiK3QyF+y0vVlLHwCJijhnf/l8Tj71VACWLFnMM08/yUsvvkhbW+f5tYNQv5N59NGHcR0Xy4qw/wEHcOxxxzFl6jQaGhp48YXneO7Zp1lRkPtA0zSOOfZ4zjv/y2Qyaf74h1t57T//7vQ4p51+Jl/68oUly2/74++5/75/4roOsai11c8XOg6oOXOBlArHdvAcieYrDAV6tgAYFNjtC3wLCp8cQfdmAtswaYnGgsptHTOsFTRKEezH10EaAtPSiZgmWt7voGD1Hrz0+QFZkA2zCwTnFa89iZdJUv69COhUzd/axP9u/j5Osjkw2Hdz/I6q/g0VBKBUGFBAKm1jRSJYVs8y3W0YAun7pFIpPM8jEokQjUazJoHeCQE5eisMlGtTgEKhsH0Xx3PRhUbMjORDFkMCthRhYKDV2+wVVYbPjpXpLjUEe+0yhXg8zvKly7jhqqtZsmgxjz/0MJddczVjxo3j1Rde4olHHmGbMWP47v/9kKVLljBx20mMnziRffbfj/p167jjD7fxwD/+yYvPPcfRxx/HvI8+ZvpOM9n3gAM4/MjPk8lk+O9bb/HKyy9z2BFHAHDQIYdkhYENJ9nWxj133UUylWTFiuXst/8BXPiVr/HlC77KihWfcd8//85r//l3STGi/fY/gC9f+BXq69fxyisv4zg2Lzz/LI89+giTJk7ihJNP5sijjuG0089k7dq1PPrIQzz7zNOkUkkef+wRZs16jYsv/iY/vuxKVqz4jL/c8SfemPV6SfvGjh2H7/slvhiTtp2cFbbCCoZQzj1LBGFgGQflKQwJugo0Avl1Chz5yg17PRGwbMNkXUEWNluzWGeaDGtrCQSCgpdGQ2CqQMD3kLhSUj1+B7Y/+uz8gLr0xQdoWTqveAzSNMxYBUa8AjNemf8ce8jJBY5s5BP41E3bvSheP4f0XNy2Zty2ZpKrl1M1bjKiwBatfJ/WFYtwWktNXeVoWTJvg00CZekw7uYK/hn6puhC2w9WKAhEo1EiOUGg3xBF3zUgqptoCGzPJe3YxKwIWg+S+4QMLLZozUCOFk9nadoq60MwtLaKM445kIcefZr1SZcKXTI+5jAsYXDkccfyyvMv0NzcnHfoe+qxx2lc30A8keBzRx+V9zWY9/Ec7v3rXbz/v3eLnOy2GTuaPffdl/0OPIAZO+6YN0H4vs+l3/kecz78CF8GwTo9UecVagZAkvYcrHi7A2FNTQ1nnHk2J5x4MgD169bx0ksv8uILz7F8eVCtsT3U7z9cf+1P8vtWviKVTuG5HpXVVZx55tmc/+ULghhl1+WNWa/z/PPPMvv995BSctJJp/CViy4GAq3Ek088zksvPk86ncYwDO67/yFisfYZXE7TkkqlOP3Uk2hpaSJqWehhSEEelRUEnLSD8FWQ4luKvGOaIqsKaN+g5LHpqGUopxnQgHWJXMnWYiKuw/Bkaz4aobh9QebLyu2nsdcPfgYIND1IoAMw/6HbsVsasOKVGLEKjFiccqJJZ7N7L5Ni0RN34WQHfjfZUuLQtynU/BtD3jJQsMyXkHEc4vF4kXaxL5G+JJVK4fuSWCyKaVn5KIGNoW80A8GDmRNfFQpHetiuiyYEMTMUCHJsKZqBQSEM5OjOqTCHgHw+gq7ICQifLV3GCaeewtQZ0/F9P2tKmE9bWyuHf/5zpNNpfN8nnkhQlfUxyBHEAdskk0muv/Iq5n7UuXNerm1dCQPQbuf/ZN5c9txrbw46+BAqK6v45JN5vPrKy3zpyxdiZpMrnXHayfnkQgKBlJJUKo3nuoweM4YTTjyJN96axW677s5hhx/BuHHj8wLGO++8xc4778LSJYs56OBD2XuffbEzGV588Xnmz/+E71/yI9LpNLFYkMjjt7/5FSefchpjxozlh5d8jzffeB3T0DG38nwDKq9eFni+JJPKgK+CcuCqewe9zhwPc/vOCQO+JhDKAHSk0GiNxFBlZpGalGzTUjzDFlYEM1GJmajAiMfZ7uyvUTlu2w6pdbN2+/f+3e14NHzn/YkNG9XB7u/TML9nTnx9rebfGMoJA7brI5UiFov3yQBdckypSKaSeK5HPB7HsiIF5qL+FgYKKRwLFI7vkXEdDE0nZkVCp0JCYaBf6IlTYY7CaIOecujnPscPLr+U1179N0OHDmXi5G177Ty0ZOEi0uk0Tz/+OG++/gZtLS2lduBuhIFCRo8ezZVXX0tVZRXRWDTbabS/gLlQPwDbznDtT67is2XLA9Wj75OIxzFMI9/Tbb/9Dhx+xOfaBYx5c3nhhed59ZWXiUQjHHXUMRx51DHU1dXR1NRITU0tCxbM54MPZvPQg/eTSqY48sijefmVF1m7ZjVkvY231i6h3d4e5A/IpB2k47VrBAr8A3pKYQ13Q/pEPCeoY6FpQShitsR4YocdmX7kydSMGkvTqs+Y95/naK1fQ4VlMVRoGPFEMPgnKhFZU09uWBv3+ZOzs/5ivEyKz/7zOBB473upNtxUa/Yz972VitGTBtTsvi9RBJkHEYJoNNpHe22fbaMU6XQa27Y7mAY2rrfN7aE3wkB5J9bO18gJBK7rYBgGESPSwYV1II0YPWHj2x0KAz05OH3/aORMBm2+RoUuafZ0/DIOhpYm2aem51X8BFAzZEjWlPAY69evo6K6mvMvuICxY8ex0667BOsVJjrJmgzS6TQ/+b/LqBs6hIOPOIw99947v87iRYv4aPYHfDT7Az6cPZum9Q29EgZ6E+o3d+4cLr/sUtLJFEpK2pJtACQSiZLwJMM02WuvvTn88M+x+x57In2f1WvW8OILz/LmG7M459wvcsCBBwNB1cj/vvM2b7zxOm+/9Ratra2Aws4EmQgjlrnVCwNKBlEDvuOj+WDkQwe7mveXkjHMbDW2YiJeBtOyiMQqiEYrGDZ5KjuecQFkoz1y4Xmfvv1vWLsSoxsHvBH7HEJseMeZvaR56SfM/fuvcFNtSMfusuUDaXbflygEGdtGN8w+jSQQ2YfFdmzSqTSmZRKLxbLamY3vKTdEGOj5ntvjDRQK23VwfY+oaWHqJuXHjE0xAvQt7RU9yrWzZ+0PhYEBQmemg7gu2aO6tyV92y1kGTeD7/tErAiGZnBSJ7kMcnieh2PbxBMJWlpaeORf97N2zVqmz9yRHXeayZhx4wBYtXIlqWSKt2a9wYJP5rFw8SLqG+vp6qErDPXL/TtH7vYKIZg//xNmvf4adbV13HffP1m3Zg3JVArDMIgnCtWdxQ95TU0Np552Biefclq2Qlv79Vy3di1vv/0mEydOYsrUaSil+OijD3lz1uu8+u+XWbZ0KYl4bAtNXto3BDPJwE9A94MMge2CAOQd/Ayj3fNfelRl0gybuD0Tjj+LijETaF6xjI///RxN69cQiVdgxRNE4gmseAWRWIyIUGhSYUjFNnsfXHYwT61bzdo3Xipa5qWSuMlgdu8lk7ipNmLDR7Hjt64AQNN1ZDYU9d3fX0ayINd+70SZwYEE0mk7CO8z+saBUCCyFQZ92tqSCFFeSN+4Y2wqYSDYe2GMgY9PxrYBiEai2fTFYosTBvqijaEwUHqo7OfmvfldmQ5GRx0mx4MH1rRMTjjlFB598EFcxy27r9xj4fgetmtjGQaWYSEQfP/H/1eSy0BKSWNDA4ZhUFNbi5SSTCZDPB6oXzOZDG+/8Qb/eekVFi5YyLbbT2b/gw7koMMOLbLF+77P6tWrWLFiBSs+W86Kzz7js8+Ws2LFZ6xf316i+cSTTuGrWYe/Qv58e5Ce+PDPHcmee+6Fruu0trYyd87HfPTRR3ww+z0WL16M6zqdXsecn8JLL73AddffyKhR25BMJkkkEkgpWbjwU+bOmYPneYwbP56dZu6EaVnM/2Qes99/l0Sigvv+/jfWrl3Tsxu3pZN93KvGT2HcoacSHzmO1s8Ws+Txf9A2f27BisFwahsG66trMaNxzGgcKxpj2MTt2PPkLwYhbQU59j99+9+kmjqkzlaKqJfOZy0c34ma32lt5v2fXZoVANo6zcSngOrJ05h4/Jkkxk6k9bPFzH/y77SumE80GsnXRWj3h9h6kAoytk083peZBwOHgFQqhes6xBMJTNNo/21AawZy+y9wJxTg+R6246DrOlEzkh8Bik2hg//hCYWB0kNlP4u3EWx6+bDQdKABmYI0xoZQCKH44rEH8rsbfshN11zHKy+8WHY/QZiXIpV1yItGIuhoGIbBv554lFhBLoMjjjoS0zRJJVNcdP6XOOHkk9CNQIOQG0SB/Ezb8zyefuxxHn3gQQ4+4gieeuxxQDJs1EgmbrctY8eOZcyYsYweM4ZRo7bJh/O5rsvy5ctYtmwp48aOZ8LEiXnNQE4geemlF7j5lz8HYMyYsZx51jk0NjYwfvwEdpgylcrKSqSULF+2jMWLFxOLRXnssYf58IMPStIT19bVce/f/wXALb/7DW+99Qa77LIru+yyGzvvsiu1tbVkMhkWLFhAVWUlqXSKiRMnEo3G8H2Pz5YvZ8niRSxetDD/OagEhJxZQAVq8p2/di0QzK5VdnY9787fkFm3Gi0WQ4/FMWIJ7Oo6iBTbnyfuti+VQ0eU5NhvXb+Wxf9rLzCllMRra0FrrcdvbUO1trLdaV+mZvK0vC8ABOF5DR+/y+xfXdntaXR8R32hcHWQBkSiESwz2O/WJgwognubsYNIgr4UBjzXJZlMYloW8Visz1Uum1oYCI6RMxYEx8p4Np7nE7Mi+bTF7aMHDGRhINe+XHs3dJzaUoSBzZZnoP0RAcd18Hwvq2LvWZrdjSGXjyDHattkfjIavBjZai5HHBYUDdr7wIM6FQYU4HouSikiViAICGDajOnEushlMGrUKO74w23UDqkj2dbGU489TnVNDWeeew6tra3M3Hknxk2YwHEnn8RxJ59EOpVi7/32Yd6cucyf/wnLly/nrTffoLm5CQBd1xk5ciS777EnF33tG6xauZKhQ4YycdKkooFDCIGu6xx++OcYO3YcFYkK7vjLn/j1r3+Jl3UqFMDwESPYdtJkZu68E7vsuhtjx45jr733wXUcFi1exKcLFrBgwScsmD+fHaZMBYIZjKZrNDY08MLzz/HC888hhGDChInssutu7Lvf/oyfMKHo+mUyGRKJBDNm7sTe++6Xr2+QTLaxZPFilixeyOLFi1hfX8/MnXbmoQfuo37duo29/X1CZ9n00DSMSAy94M+IxNCjUcYffkaQoTE7YAg9SL4z5vizWPXmKwgUUmhIIaBMvHq0srokplxoGlYswWcfv4edasNJJXEyKarSTejKy4cWLrr/Tna59Gfg+0UOfIsf+0ePzrfQYASgKYEhFa4PjuOiGzq6tnUJAhBcD8/3s7k9+mK0bpcebdtGCEE0EmFDEwr1P8VGAEMPJjqu56JbWnZI3TK0Ap7v4XgOph5ogAd2azeezewzEDzgGdfGzQoDphYMqZv7Qr/bEqfVCwSReCzCitfvJWJZ2I7DGceekM3/Xdx2iU/azqBpGlEzmpcVO5ZXzhGJRIpyGXRG7ZA6jj3xREaMGMFhR36OTCZDNBotsvcDtLW2snLVSioqKli3di1SKYYNG8aaNauJRqJMn7Ej6XSKVStXMWzYMJKpFCNHjgQoSsEspaS+vp5Vq1ayamXwt2TxYpYvX44QgiM+/3nmzpvDyBEj2W677Zm83XaMHTsOXddxXRfTbI9dd12XT+bNY87HH5GoqOChhx9g9cqV1NTWctRRx/DUU09QU1XFhAkTGDN2HKPH5DQcY/Oe2L7vk8lkEIKCUK1gFtzS2kLD+vWsWbOatWtWU79uHfX12b9161hfvw7H6dy80ZE9hu7NyePPZFR8NGvTa7h/yT28U/9mp+sL3aBuh12Zft4Pg39r7er6lW8+h9tW5r5m+/FOM+ll0sx95WlM30MohfJ9Uq6D7di4mTRuJo2TSbP7CWczbOJ2aB2S79TPeZ+Xbrsp71sQt9MI4ZZkIKyePI0Jx59FYsxEkp8tZvFj/6Dl07kl7ekMRXFRJCnAEQppghWLZKNEBnsX2QEhcBwXXxKY+zZ60A6ub04rkMswuCkcMTaHZqDwOEDemdDzPaKRCIYwGEjCQFd3z/YdbNfB0k2ippWd4fe+7VuKZmAzmwkUCEXaCYSBaCSCqRloavN2KaPHjOEH111PLNpeeW/UsLr87w3163G9wG/AsR1+cd0NzP/kE2zfwXEdYlYUQ8s91H3VcsHEyRP52re+xR9/dwuZVIYZO81gnwP2Z5/99weCQTydTpNIJFi3bh3JZBsoqKioYH3DeuKxOOvq15GIx9lhytSSgVtKP6igaBi42c7Hc13iiUTejwGguamJVatWsWrVSpqamhg3bhwffPA+um6wzTajmTFjRyoqK4jHE2UTruR8I9ra2mhra8XOZKisrGTRooU01NfT2tZKW2srCIjFYlRUVFFTU8OYsWOZMnU6bW2tZfedy7TYcbk9xyb9ahrVKFHVCme6jVPt4LdIVKuCJIikwGqOEG+Lt7tIZgWkmz/+Kf9rfhczUR3E2mdz5ZuJSoxookclccsxfJcDgu0K2iulpH7pQmb943b8VBtWSxPKzqCA5mxu/hzDJm7H5795OR3D89796Q/yg3pPqhb21biiRGAu8HTA1IjGo+hbmfegQuC4LkLoRPJhhRspDChIJpP4nkdFZQWarm/kPjs90iYQBgofgPJt9qVP2s2gazoxM0rf9psbR1dDu+27ZNwMEcMimr9WoTDQh8IApJ1MIAxYESytNEPapiaeSPDjm37ObjOndruu53lomsY7b73NA/+6j3feeoto1mkwdx0i0Qi1tbWMGTeWPffdhycefiQoatSzS5ul3a2mMLQwVl3JSaedwv/++1/GT5jAwYccwi677Mb69euJRCJUVFQU7aWhoYH16+sxTZN5c+cybPhwPvpgNulMmlgszoiRI9lxx5mMHj2mSFuQQylV1O6OhYjKoZTKl4SWUqLrOkIECY5yx8j91tGM0dn+oH3wL7mOtkI1g2ySuPNd3A/LO3z2BAmsoIXfW090uk6n2fTSSRY+fieZjE1z2iWTsZF2CsNtw7czRIaO4cBvBPb5Qo/8Z393HeuWLEBTkpEtTWj5OgLt+QNy0QTDJ2zPhOPPLJrdN386NzuGKKQQ2SJDgTCgSREUO1Iqm8wo+64WXMINjQDIOQy6msI3IJqIYvaht/uWQCAMeAghiERj+aUbTlB7oLW1DdM0icdjtGeg7NsBc9MKA121NZgAekoSt6LoAywzYUGPVDSi2b5D2rOJ6NZGXatQGCg+TPYzWDvt2rjSIWpG88JAsazYvbS5sSSVyZFnf4n/u+gMlFJF+fVzl0QpxRuvvcZ+Bx7IZ8uXM2bsWJQK4udt28bzPKqrqzHMUoHG93xaWppBCBrq6/MVxwCGDhvKis9WkMlmLvR9H8MwGTNuLEsXLSKdziClREofx3OJJeJsO3kyny6YjwImbzuZ+Qvmk06liMVi7LjjTpimycpVKzAMk4pEgsqqKmpra6msbI9Jd12X+vp1rK+vJxZPYNsZ2tpa2XPPvWlqaqKmpoa1a9di27njBwN74X7S6TS6rqNpWj5yYlPkSpdpif0/G/u/NqpNgQVaXENlFCrdt8+Eg+Iqq9SWLj0Ht62FbfY9koptJpYtifvOn25grV+aeCYuXJTrMnTCFLY/+nRqthlH06rlfPDsI6xbsgCAiOcwrIuCU4UUBnwqEQz+UoASAikESmQzDWULHQVRBSpfBlmXBduzocJAsAdPU7gGGBGD6FZUiCqQrQSO4yGEltUMbGTYmQpyFqTTKRIVFR0iCPJH7RM2l5mg3HFtzyXjO0QNEyufd2AgaQjaIyFy2L5DxrWxjM6EgZ61f0sRBgZMoaLygsCmIyFcnvzbHTjJVq6+5KtFv+UGt/O/dwNvzp7HV09fznOPPsB+e87kyp/8hCceeYzWlhZGjBrJ0ccfx19v/zOfzJmLAg454jDmfPghhmEyabvJHHPC8cz54EPS6QymZVJbW8vY8eNpa2sjGo0GA6uuE08kmDhpIrFYDM9zEULLxxhHYzGGDx/OqFGj8D0foQlGjdoGoQUDsWGYVFVVMXLUKCzLKhJsCjFNk1GjtmHUqG3yy3KCT01NDQDDhw/v9JoppfK+DB2TKxVet55iz7XJvJJBNkhEXKAP18EHv95HJTtqA0DaXSfK2RAksEQTZBrW4CZbcNtagnz5yRakE/iNpNatYKevXVvijPfJ8w/SIMtXrLOVRlRK2j75kHc/+YjGRCUdhdyqTM8zYGbH+cAsoIMnRDahkchpmgMbf7aana9UUJJYgiEVaLlCSApENtVRr/vhYANNgZAK6fv5qopbBdnLFwjJfTO7VQRCuqbrGJ28t4MBXdcQvsDz/awwMLDoOK1VW5tnLANIGAgQBf/f9AmNqgyf/WeMz6u4c/kBfCn5eMFS/vPefFbXN3PFLfcF7VEf8Lc7/8rT2WJGdUPqaFzfwHNPP03j+iDue/a775IaMoN1U87FlZP51S0rkHPmsKZ2T9zq8Qzx1/GVFe+yfaKV11/9dz5bX2VlFXvssxfvzHqDltY2Kisr2Xv/fXjr7beJVcTZc489mTvn48APwLIwTRMr+zlkyFBm7DiTefPmkEom0TQdwzQwdANdNzAMnYrKCqZMmcbSJYupqKzCcRwqKyvxfR/TMPL77AopfTzPzwsFAK2tLbiuh5ISqSS6blBXV0dzczPGUh3ndRcaQavR0LfTEVGBWq/wP/ORje2Du2pTeG1eZ4feIBqEYJ3QWKNprBWChJIc5XlIgkI+uc87MytZ879XSrbPKI1m3+SzBUtpuPUadjziRKpGjaN51XI+eeFBGpd8iq/Kv0JKCaJuBjNbf8Boa2k3AWRLCUe8np9vob3ezxZ+0g0D0zDRNI2MnUJKGUS5aDq+7+G6HlKT+CI4WYFCk5AbwXujIci9iyJ7zXQl8PzgXenLxDgDHYXC9zz0PqpWKGWgGbQsEzGIC3ppQsPQdaQX1HTQBrQEufUJAjCAzAS59UTBepv6lnSVH6A1mWLMfufi5jtsRbXhslNVBoHANAwqq6uoqq7GHr4znww7imZrG0ZVwPy2nH25UI1U/PDXRmHmCDhiEjy/CObVw6is+X9VG0wZCt/aE3Yfrvj0BZufpiJ81ADb10q+slOGGbWB2cFxHITQGDt2LIsXLyadSiKz+QVUVtXvS4mh6wwdNoyWlhamTZvOm2/MYu3atWQyadLpNJl0BqFr7LD9FF595WVAsceee/H2O28xfdoMHnv0YXYwp3DSmFMZZg1HVkn0fXQWi0VEI1GGNA8h9mEcmkCr1GiLaMTXeBusku4OCawRgqQQTJayZID/P13yWtsCoi3ziTYvINo8HzcyhG33/CUXOQ4TpGSJpvFHy2Lx298n3vhR0f4zSmONV6r+T2geRsGsISl1PFU6GJrSpTrZjCkDYSBH+aehc3JmASnA0xW+DggtsL2igdCQQpGxU/jSJxaJows97yAZhEe5KCkxpMpnP+ztXVHtLj+BylMD18hGFVj6VmEqUCKQo4Lsg/Fs9sGN66VcxyOVTBJPxDEti9InZHCYCRQEVQ2zJY773gF7Q9vW+dTT8R3SW5GZYGAJAz18NnqSLbAn7LjzTvzst78uyg8wYdJEvn/1tUyeMJrLf/VXUhmbyeO3YcqksewwaQy6dKmsrCSRddx7ZyWc8UDQbNnT5zqnW1W5WGUJQg+WQ/Y3hRBwxvqP+D9zDJdG4zxtRUD5oBQT3/o+8aaPgfbsgE899QSNDQ2dHrbjuq2trVRWVDB02HCGDx3O0GFDqa6pZciQIUyZOhXHcahYU4k124KGoJmFtmsBiHj2ZUr1/UvdUZCQwEqh8Y14BSs1DTc7uzjUdbjIzjBB+qzIrOHBpffz3urny+4zVTuDddufh105iUjrIobNv6tIEJCApzTqfQu3zCBvCEmF5mMgsYTER5QVGiozzcQcF1OJEuc96NlQnBuzfQG+LvCEwrRMLCOoHx/kshdIAWknhSc9YpE4RlYYECowJXjZkFjhS0w/EAiEosf6/bzsoNrvva8pHB20iE48FtmqhIFMxinIPrhxz30mbWPbQbRNcRTBphUG3LRNVN8cwkD7eXjKJ2NnMA2TiGHR/8KAKLnKhXFtju+ScjNYhkXciOR9Zgq3H0zCQL+ZCYJxLzf4BZJZoVgiRGFFt2KxY/+DDuKCiy+ift26ThME9YRli5dw521/YtXKlRx30knsvNuuVFZVEosHIV7Xfe98bMdl0fJVNDS1MnrEUP756POsX74Iu6WJluZmnqo6Bz8xFXrjIZvrhPPb6MXLs98VsGdsInguh3tuIAyIoMNYvvNljFhwJ8K3WTLmSN5cMZHIpCkMl/fmhQSAESNHMX36dPYati/bNW2PlbQQywRHTz8ObYiGPkrHW+qhWhUiJSANarFCzBNoVRr+8uIyz6LDZ18KAQqoF4IbonFGSMn/2en2GX9WtXh74zusUtviVo7LX7eXTIuXdJ1E/X8Z/9YPujxGvPEjRrz5I5p9E1dptAqJ0nR0Aa4S+Nkz88oUtwKQSlClufnzN1GMMDL5/ZlCEpcZkNl1Olye3qrlFaC0wEQgNI2IZqIpLes/0O4sKJQqeJ1E8G+CQV8XGoZu4EoHXwvW12X7/nvUJlWwniB/XGROti3oGPu7j9+C8H0PTWibpAzyQCNwcRFI1fe+PxuGKhngs29N+9KtQcrN0m/CgMg5P5FVZ0ofx3VRSuad4izDLOvktP9BQbbA/Q8+sKwwEI1FmTJ1GtN2nMHMXXZm9NgxNKxfj52x8X0/Hy44cdtJ1NYF+QXWr6tnyLChADz+2FP88dFZfLpsFSvWrEdKycihtVxw+pHc8a9nWF3fSHzkDli7nImRmFpUDKYsG+hldaRjc3A238GhnsvRdgZTCL5hpxmqTJjwVZIEs9kKB/zIdojpV5OxIGoKjIzCiwicjCKxvMxMe51Eriuw2xcM7KpZ4TcXCwIbiwLSwJOmhaHgJM8pUe/fEI3zsmkFWhOjmXPq1zDCGsGq9Gc8uOQ+Pl3/JtvUzmDJvr8NtCSaDtIHFMPm39VtGzqq/32lk/H1EvW/LlRZgcASEgE0OwZLkxGSnk7C8BlfkWG45SGkIOm2n5dA0awiLFcVpJRBQniMFW1UCad7LYEIHJl8IVBCEIlE0PIln4IBXyDwRRBWmPUlLJjdBHdcUxAxzCDPhPIDwUJkBYge9HaFAmAgw2fDRRX4vkT6Ei1XVXPwj2l9R9YZUdO1XjvfbikUahGzDw+yVyHXmw4F+MrDl+39nJYVnLfGZ7j/HAizD4ZCkXYyeNIHRH4WaLs2UslsTH87kWiU3ffeC4A99t6bSDSKncmw5777cNYXv4BlWYyfMAHd0GltaWHJ4iUMHTaMBfPmk0wmMQwdwzCC0Lu6Ou6+4y+8+MxzuJ7Ljb/+FePGj6eupoLGuW+STFsYaER1F6t1GTffdi8pX8MYMZX4MTeA6OQlLlL3+4AWDFiaXioYFPx7nO/z63QbUQWVSlJZsEsB3GCXep8XrpPzRTYdwAnaYKYUOUPM5uxuch1Ax8F+1QFx9pkWYXgCYktNnNcyuPU+C5TGbZFoIAhkB/c33/gJH3Sw5UMwu58w69tdqvvLtcdVGg1+597/hvDRUJhCYWqSer9UjVqtuzQ7Bu83tOd3cHyNRttkQkWamC7JOALpKXQpyEidlapgXaXTqCJMFC1UCQdDSAwUBjJ/f1qUxTJVQQqDmPAYobVRqfsYmpY11eTMdDkNU1aF3cm5CwQ6YBomtu8jtcBRdsMdpkV7596xYx/snWgfnl+Q04NgMlGiGdhU3jb9gwJ0TUPXdXxf5ufkm5f2Iyokjufi+G6R+UsBEUuVRDxsHi+2/mUzCQPlH2xFUAHQkz5CiCCzn9DwlSLtZnA9l3Fjx3HdTTcRiQYds2kEXvQAlmVx/5OP4ToOsXiQxvb9/73LLb+6mTkffsTyZcuoqavl6OOP46lsBECO2iF1wfKnnmNh7SGM+uxJRo4aBQRCxvAKixojg0SStNO4w3dGm/FlWiu3BT1aIgjkw+2yUma0cR5efATV9gomy4Wsrd2VtWIUSays0UOgCYUsUEk1aBqtQjBJ9u2MvC/pOMg/OSTC4eM9Iu+2t1mi0BDcaVns6/lMkD5LNI3qQ2LsurfBwk8/YcXyFv70+KPM2GlnUokk2x1yHv7bMHydZFKVy1kT17L7aZeSSCRYtmwpa1evJpVKMWqbbXji0Yd4793/Ee9gEsh5/+fU9dW6iw44SuChBfbSLtT/ylMsKZjtj0o4SE3DURoohecKFrTFaHTKvzZL2mJll5djsaoq6Vs0FBoKr6Dgs6N0mu0IY0WSEYYiLrKKTZVTcgamAiklvu+XedWyC7LmAoSGoj2vfk99F3KOg8VbFJj5ROHsr2CNrEkhpJRcOZ9BqhTI0vGZEbiawVpMXKFhoqhRPhE2jemgfNHkQBNtey66phGxLDQEPpKMY2M7Dpo5qG9KWTaTMFBGEBCBBkB6HgJB3IxiCD3baQWCQcbO5NPujpswvuyeTdPMh8StW7uW3/3yV6z8bEX+98b1Ddx7Z6n6OB6Lc+Ahh3D4cSfhWdVE5dlFQsZf/v639pTEUuOLzw9lTZPIliYqFW4CQUAyzF7EiSOW8vlDtmHmtGoi1lBgJ1zHYdWqVbw8r5V/LR/FOoZQba9kZMv7fKpNpkEfge6s5//5Pucaw7jA2zzzgq7mH+Uc+DTABRZpGn+Kxrj4RIu19bOZ/9E8dmiZyghrJJlYhsa9hvBeQ4x/rteYMhRO2WYZe+9ZzQ+++y0++nB2fp+vvf5v6mqHcLQvGfbfdzj/+BM59PDPMeu1Jcz/JMOhh32OJYsXM3rMWIYPH8HQYcPYc699cBybTxcsYO6cj5k35yPenzOXpavb8vv1lU7G67n63/fgw5aK/EQ3N9sXQqE6ESD6Goko0A8UszyTYHkmmEBGNUlMk0R1RVyTRAxJ0otR70RxHIuELhkfc6g2Am1bQFAwSWgC/GKfhA05u9wsKmTDyWX77LuE0QMfVxi0mO3ZPH0Eq4XGSOVuEoFAlfwrMKI5rosuBFEzgiECg56GBlZQntrxXHRj6wmZhc1etbAY13NACoSuBclcctMLAToamtBIJpN8/1vf5pwvfJGzzvtCSbbAHE899ji33vxrpN+zB6qxsbGDkFFZ9Hvd0CH57582QH1aFXTUpS+vJuCAiRp3n7gdn62u4Y335vKfd+fyvS+fwklfu5r6j2ZRoQXCRe2QOs46/jieeuFxmppb2HH0NkybMYMjTzyWisoKxoytpfHnjdCxVlIfUViApnCWX0hu2doxaxmWHoZoErjVGvdUxLjPNqhTa5m89l/MfznKk08+Tjwep/LUSqYcNhWlFCOU4i4Tli1bzC2/+zX/XLaM1uOOZ8WKz0ra09iwnnvvvhOAVatXsXLlCp564jEAVq4Ivjc2rKe2bgjHHn8icz/+iG1Gj2HqtOnsf8CBnHLaGQCsqV9Pa1sbz778b2b99z3mzP8U25UYwkegMFFUxEwaZIR0xi5qw6o2s0TjDZQVBHKanY7EDJ9tYg6u6yI8iaFglUyQUqX5G6J41AobDw2PQHPho5FS7dE65VAK0r5G2tcCqaz96PlvjtRodA3GxxyGWh4JTSKyGoUNcIYO2UT0Ll35loGNRpPQcRHB+6Z8dIJB30fQ0klOiiahM2ITOxbmtQRZh3VNE+hCK+oNdS1Ipe6pIKfK1sRmCy1sVzMGoYWOdIIbIRUIjUQ0hp4N5VIolFCkbRulFPFoDKHgxNNO5aJvfaNk77PffY+brr2uyAzQE9IjdufE7/+Mb+8V2FD1gqQfOTXsH9/2uPltE6fcc5qz92fNHA+ervHRm8/znev+iO24RU6HTY3r2T5uU2X4mLrgvK9cwJHHHUsinkA32oWb11/9N6++9DJHuccxITYxb34oV0egpDl0PcvLq/i1YKDXhmosq3RILraYICX1IgiVGqoUfjUM+1wCa4qF7/vous7f7v4rzzz9JI2Njfl9brfd9px2+pnsu9/+2LZNJBLBtm2ee/ZpHnn4IVavWkkqlSIasRBaqSp5Y9TIksAPoLJ2KOOn7Mih++/LiUceQca2iUYiuJ7H0uUrGFpbhS8VFRWVRKxgYG5qaWXl6jWsWLOOxSvqWbpiPS3JFDtuP4Eb/3gfq+uDcxRCMTTikTB8EqZPheFjRCvZ/bAT+eFXTueBZ17jp3/4J2vWN7JTXRvVpkcqnUFlJIYvSCqLj/y6vJdyzuK/o7aeKlEaFvuRrKNJ5cKu2olokkrDJ+NrpKWG30ttRUyXxHUfE4c4LhXSRUqNz7K+CXE8xmUdGzvS/ly1z6yCAknZGgUVQSZNRKkfwmAyEygR+LVm7L4JLfQ9n7a2NiJWhGg8VmZffSut5fa2KUILfQRpNNaL0vllQvnZWaeiGb2sM7WOYozqefXRntN+DXOjlhSSZCaNpgliZozCAEOFImWn8ZVE6BpS+lid1ibo2f0JQwt7gGmYSF/h+i626xDLxp4qoXA9F18G2fFyncm2200uyRYopWTtmjU9EgTsijEs3+c6lB5BaiZ+tI6b3xK0OHDlgR3V/nDNq/CX98tn5VPSR9ltCOkSbVnE9qseIbXzkZx38hG8/OZs/vXUv1ld38j1v8/lvNf4oDVGXXUld9/4PQ7eZxc0TePXf/onz896HyfZypmf34uXnniU5oZWzj/4K/lj+dJHy0YsONLBqrYgm9JexAWe8BCprGimwLNcIpEopMCNaTTbiipXsTaisXZSA4edOpEbb7iOWY+/hud56OP2pXX6l2m2tmHGSJNv76nYY3RwvLlzPubWW3/LPvvsxzPPPJUXBHbaeRdOP+MsdtllV1avXsW6dWupra1D0zSuvvJyPiwwBWwsHX0BKrQgEZSb1WekGxpZ/NrrvP/xJ6xYtYYHn3yG2ppqZk6bwn677cTkiQdy+z+fYt7C5VRWxPjJ//si/3j8VQxDZ+yooey7646ceexwqioC9eWE0SP4+lW/Y+XaBmosj2k1SUzTZI899+bgQw9nr332xTBMPM/nK2ccxXMvvcKKecupMoN2qawOXQioUjY7ag15h8Bg0G0tKwgAjBNtNKu6Avt88PBPrkhSZxIkMFICW0FaBhqCT1ORboWDvDaB8s+zg06TsthRa6C6jEDQGYNknN+MFAxO2XTimz7X6sZRONs3UFTmZ/uBaSuYPwuSnURV2ULDUIFeVUfiU6rZNTfZNehoKMj62QCe7+Nqbr5WggJsz0FKiWkYaLpGpo/9twbynd7MDoTtc4zcAG+ZJlJJXM8NZudCQymF6weVwcxs2k/DMNjvwAPQdb0kW+B+Bx7Ib3/+S7xu0rsamUZ0t410VbH/wbSh4EnQBbl8P/gKpg3r4PUP7ZoAFBPfvIxEw8coBD4KXTsKgJM+tx//eqq4tG08FuGC047k+xecTCIe49vX/oFRw+ryoYoAr89ZzpREhoNH7kDMiLEi+Rl3rfwL37r2O0RTMYzndaxmi4oTKzAnBJ2653kYhoFt25hmkJrWc10M08T3fdavX8/7r77M6//5N59+uoDq92tYnTmWNWtWc/wJJ7Hvfvszbdp0PM9j9uz3mfX6a/zx0XdZe8qpHHPc8UydNh0hBPfeczeaprH/AQdy5plnM2nbySxevIh7/nYXxx53Arad4eqrLmf69Bl8tmJ5L5+PzulpKGBM+NQ3NHDrX+8BYPW6euYuWMh/Xn2Ntz/+jD//61lW1zcycmgtlmnmr3uF6VNnuVi6QtRty3XfO5+9d57K+0/8gZ/ffj8NS2ZzzOcOYf8DD6KiopJPF8zn7jvv4NWXX2TY8BFcf9MvuemHX+GS784mlQqeP00TRdbPKuEwQ/RMa1UlHGZo61muKtujCcw2EkKBiKCUQAiwBFiaT7UhWesYNLql5oWYLqkyfJK+RsrXkN1qEwQfyiFUCYcqnOBTuOg9seWKjkcPKU+hM1tgE92c1oKMFDR6Jq5uYglFjZIltno/OzD6BIJAY8Fs30dgC61gtl+4XXkkUIkfPEeeR5NZUbJOjerbVOTlCEafYBIZMSNkXJuM6yClQmgCX/p4vgdCYBkm/oDJh7B52IwljCF3OzKug+M7RE0Ly4jgKx/bsfELwp10XccyjPzxdtx5ZtlsgZddczVjxo3jh9/+Dh++3/1sVAmNdVO+SP3UL4IQmBrMvggSFjg+3D8HTpsGlg5tDux8G7jZZ0L4DrrTTKR5EcPm/i0rCARXIhKN8K8nHsWyLGzbYfT+55BK2xx50O5c+c1z2G78KKLRKK++8R6H7rcb+572Hd6fu6hsG4dHKzhjwl4899kLVMU9/nDLL5g2bTrKVdjv2lgzLLREeSm8oaGBN994nf/977/Mfv99Uqlk0e8zZ+7EWed8gZ122hnbtvnff99h1qzXefutN2hrCxzwkm0pjjrqaP7vsst58onHuP9f/2TX3fbglFNPY/ToMXwyby47TJnKA/ffx0knn8qHH8zmxp9eR0tLS+n1lnKDzQQKWONFsFXpTMLIaggsobCEREexzjFZ2hYl42mY2RzAGbdzJyBTk+w7vL3NudwBerSSyy4+gwvOPAHDMFizZjUvvfAcL7/4PMuXLS3ax6RtJ3PTL3/DooWfcvmlP8B1HFJpG1PqnHbGmTx67z/xepklMzd7UShcIyhRrDSNWCSKEeQeLAh1EjT5GrObcz4D7b4gO1elqDL8/JrNjk+Lq7B9g1VeRVm/h3LEhJcXDjQUa1Q8EFTwGGm1MqRSwzD1oFVbmJmgXARKVJQfBBTBnKCvzAQoaG1tRdM0EolEGWmqb80Eti9Y5ZS+SzXKQycYtDs6sCZF4NPSEQNFQkkECp0gEqZZ6Dgl3kcQRTJCuYAi6WRwNR3bjOOSiybwiGyiOXPxFSw2CHjSx3aDcSc3khmahqmbmLqJ67ukvUyfmglSTprXB6iZYDMKA+0XLhAG7CAdsW5mf+q4r5zcHGxVXV3NwUcczjOPP4Fttzt/RSIRjjzuWF55/gWam5t73JpPj/grTtV49h4N950aOAl+/Sn4ZD3sMAT+cAxsWxukGn5zBSB94mv+y8RZl6KA0WNGc+UN12VDHoNaBYVOh+vWNxKPxUjEg1ntf99+m9333JMff/8SpkzfkWv/9iIr1jV12cbdZ27P/zvvRNbWN3LkgbsxYcyosn4DSinmz/+EHXaYwre++TUWfvpp0e+aprHPPvtx6ulnsMMOU1i+fDljx47lku/9P+bM+bh4X1Lhui6//u2tzNhxR5595in22HNvampqeP31//DA/f+iubmJK6+8hknbbsvDDz3AHX++HSk76UDzwkAEoZU6sZUbLBTgKA1baTT5ZtlBS0Mxxkznf+kY+98TaiMuM2uTnf6+1977cvV1N/LNr13Iwk/nd7retBk7cv2Nv+T9d//HtT+5nLZkmsMOPoIrr7uWG/7vcl5++tmiMyjM898VCvA1ssWJwDQtooaJUKLgDQx8QNamXFbaMWwVRBNMKIgmUCh8JCk7g1IKw1cscMr7JgSBh72Z4yt2rGmlLtr7WVRvBuJNsY/O6k+MMDKd7kPmhYE4QtPJSGj2NBwJlgY1hiSi9bxXTLYlkVJSUVFRplBR14ONLQVNXRxbKvCVwFfBQN/oarhltEO5gb0cLVkHu45oKEYrNxuwm20PGqtFqRkqiBRQqGyYtqZpxM1ot+fX9xQLAwBKSVyZLZ6kCQxNzyf2ckqEgY7tHVzCQP+EFor8rSAXA128VsdbBs3NzTz6wIMle7Ztu+zy7jBTq3EqxzF/PVz9quAfHyoyfnDcT9bD0fcqzpoB8xtEPgnO0Hl35dtTGo1QzLAhtfnv69au5e9/vYt5H89hyaLFvPfO/0i3xii8/GNGDmW3Gdux+/Rt2WX6duw8fTJ11UGEw9r6RpasWINlWYweMbTkWNfd+neeefpJzjv1KJauaiLtCSwNohGDQw87glNPPZ3RY8bwv3ff59xvXck7c5Zw0RmfZ/7SNQV7ybqIKcnRRx/LjB13BOCIzx3JKy+/xD/+/jdWrFjB0KHDuOLKqxk9Zgw/u+kGXnn5pd5d+A7vji3bO3NDSOJaUB441wF1lwkQIONrzGmOl6wDwex/fIXNwtZYh3TXML7CLrtNjvnzP+Geu++koWF9l6fz8ccfcv1PruCqa3/Kdy/5ETf99HoOPvwwAA484jBefvrZ4JiKfHIgreDfnSHI+gjIYD3Xc4OkWULL1iVof38qdIdto2nikThm1iabe8eUAMfzUEqiS0j5Zna2VySiIIAZ2nqiwqdFWcEfFklldKFFEHzYVEVdxGVEzKHG8jA1VXQPVfsh8ssdpbG+IAFULhS0VncwC6RDVbSD4sfHJXh2Ou6jUnPz++isq1ZAmyzf/TX4FtXZlNNCBOJU/mqpQFjylcD1YU3BTDvtQ9rXGRXxeywQ+LpFi9BpcgwsAdWmJKp15woMGV+wusyxawyJJsrXSeksx0ZOvR/kuSj+zCCwy7TFQhUJAgARJCOVWxRNEMz6A1R2Bq5p/RWyVzp5FULD6iTCoeMb0hcMZFNavxQqyng2tu8QNSNEtAg9ka76EiUM5h33KMqMg5JEhct5u1r8dbbA9umQOGg4ZtNCKj/4E7WtCwrOX6HrGmd9sXzIY877v1zIo6ZpDJ+wHSOm7cHh++3CPrtMy2sQ1q5dx8L581m1Zh1mNM7ee+2ObpjU1VTS2pYiEY8GdRty5ZZ9yT+eeIWLLv9Nfv+jRw7lK6cfxdfPOZZ4LMJTL73BrXc/wKvvLiy+EAKm1jrURXwMDcaMGc3Jp5zK5488uuiF/dJXv87z7y7lsIMP4A/XfofW1hau/cmVLFpYrIEoh5SSdDJJNBopMRP0pDKgUtAii2cbGU+QzghSroYmwPFFp4OVpUv2GdZSJn2wTbXZN3bKnHbjwEMO5UeXXskTjz/CkUcdi2VZOI7DKQcehp0O4kQVBPZ11R7W2a2GQASaAceAVhVhnVdJytfz+QSqTEnSSeJLn3gkjoEeuLYQ+L6kPQfH9VFSkPZMFvs1JceI4FMrMlhCIpXI5zyQgI+Gg0arMnvQWogZkgrLp9IKIjDSrsaalEXa04gZkhFxBwxRttqjISQJrWdOW51VjOzpPlr88kKOQFGll382lMr56ZiklF52gDWEosroqOfs+O+gFkazV9r+KkNits+RSnpHpaDNF50eu0Iv3592tk1uEC9H57N9p9eqfdf3yLg2USuCOUCqFnZFzkxg9qFmIIwm6IAq+rL5H4bUkOkoM47Vsowxb13NUXttyw8PuIzVLQ6PfmoRbfqEkbN/T7whUKF7Kqj65ptWEAaYlZ+kL7nnzr/S1tZWEvIohOC/b73NPXf+FelLdtp1V047+0wEsP3UqVRUVmDbNvM+XUoiHuWpF1/HUg4Tx41h9z33yJYzDXjuuWd5/PEnuOmmn6FpGo7r8beHX+ALJx2OZRqceMQ+XPXruzj20L057agDOWCPGWRsh2jE4oxvX8/jL71V/kIomNtgccAeM/jV5V9jh4ljWNfQjJSKQuHdHLED3/naoXzvyyejaRqnfPNaGhYupi5SNkqoCM/zaPEMPm1KtA/ECZtKy6PRL+/ZbiuNuHCxtCBVb0zz89oDz4PVLVaPH5tE1mZebXnMtDaNk9KYbcZw5TU3EIlGaWtr4/gTTs7/ZlkWf338YTzXRSJozTic9a1rWb1sGWNFG5WaE0SodtinAjw0XDRcKYJMhNJktVeQ2jibT6DC8FEqgq+AjB6ohZXoVfihjc5qleiT1zHtaaQ9jXWp0qRNrY5OqxtjVJVLxCg9WG/a3Nm6hcvbv6kO/+5c66R34+QghAgyPnbSffpKlMm/X3qcpF++/SlfdDqgFx6j8+UKXSg0EaQo10TgHB3VVJE2IUdtF857nc/2e28gdrMh2EZvirqFbDb6NbSwv4i0LGHE7FuoXfwEmm+z/0FfAuD0ynd4c/Z7VC97AcNp9z/QhYYmBJ7vY+hGNgthTg2qOg15FAJOP+ds9tlvP0aMGgnAvDlzePWllxi1zTZsP2UKO03fHoDDD9iDJQsXseCTT3jmyadYtOBTmpoaOOCwQ3nm2acYP2EC8XiMT5cs56zv/YyP5y/lroee54Fbr2D4kBrmv3AnALPeeZfvXvUL3v5gHid8/lDe/eiTTq/D6JFD+fmPLuSEw/dBCEFzaxKlwDCKO4zbrvk2AOubWrj/qf/wycLPWF0fKP90TWEIMDSFqQWfhqYwhMLQwHY1VqXbZ/+Or9HomEyoyiCM8h2aUoJ4wczOdjXWJA2Snh6oP8v0Q5YucaXWqSmgRDOQsKnuhXDQ1faNTY0kk0nGjZ9QdttcASyAZbPn8Vl9C60qQqOKMFSl0VHBoI8WCABKK0pJ3B1tng5lwrU2N5pQRHRFumC2WzZ7o4KmlM6IqtLrbwlJQmRd1go2LdxLbpZtS41MGefSiJDUaN07bVpCltVMDdGdQEOSNcHkTBtZiw0Z6aIbJgaqrA1eF+VTDHeUD7oa0EUHgUTkP7OObqL8sSOaosYsb/83dBgZ8Wl0BK4kG03gdzuwR5AbnRBIKYlUEk0EyeS6NuIMDEq7moHd3o2lX8wEac8OogmMCBG9fOGYzUUkGs1HATiOw+nHnoBj29mogHabcsa18XyfiGUF4Y5Zfa9pmtz3xCPEYjF832fRp58yefvt845+69au5Y3XXufTeZ9wwKGHMHzECMZPnMD6+nqGDB3KXX+6g1n/eY3Pli9H+n5WvMhdL0nac7DiEeqG1HHIwYfy0FMvUj1xN0476gCOOXgv4rFgUL7vgYd5+P57aCnjRKkUzK6P0GQHHWdNVYJLLjyNr59zLG2pVBD9MHJ4t9fqrdnzOP6rV9GaLC2YtCEMr3KJmcWKWgW4niCdCWYzUkGDXV6DUIguFNvEbdbbJo7UiOiSYRGHuCFJ+xqLW0vrBoyvyBDTZf6lV0oUfG9flvE1VqdLn9MqKxiyfQVC1/nehWdxyVfPRCqFUWAy8nwfTQh++sf7uPG2+/B7mCWztwih8vUNdBSaCD51FURb6AQVFO0ygkNcuIwTbfnttez2GqCp7P5QtGIyT9aWFVZyDpmOFDQ6Jk22Ufa6BY2F8XVO7muerpz3OrIhDoDl9tEbB0QF2LaDphsoK8Zqu/Ra9tRnYLWtk5GlA3pMU4yIdG3msKVgVS+PnZuhe56Pk7I78ZDva4KjetIj5dhETYuIvumyCvQljnRJu30bTTCQzQT96zPQD8LA6DFjCqIAgsRHhVEADfXriSfiRKJRMuk0f/79H3j2yaexXQcfyT777svJp51GJpVhwrYTGTlqVJGvQCadIRoL1MUVFRX87pe/YvspUzjo0EMwTYu3Zs3i6cefYPHCRRx53DEFBZTaxYBywsBOO+3ERRd/g5EjR1FRUcHHnyzivqde5b/vvs8ph+/OS88+TmND57HszbbGvNYqLjrrGH5w4WmYps5v/voIrzz5TyIqzVlnn8tZZ59b1vcB4Ld3PcLlN9+VH8gMTRE3FJ4CVwo82ft46YgpGVnp5WPUc1aj1a0GdhchgQOZb37heH72owtLlv/gxj9z6z2Pdbu9jsTMVjI08bOfwbJ1MkqqJGmQolJz2Da6PphN+gKdoLyxpsj/iazw2qwsPpI9z4jYESWgAZO53hCKXH4F+QyMhXzQmKCxE2EuYkqqYz6WHoT1uo6g2vAYEnXxpeiRJqcvIhK6paDPV4Dr+iBE0EdIscHRBJ2F+o2yfCLdmAmg+2iCzk5j8wkDBf2Y6wQ+LVY0mwJ4YGGj8f/be/M4SbKyUPs558SSmbX1Nsz0bD0LDAyzAsMiMIArCCp68fO6gAsoijoKgrKIyCZcQFxQBLy4XAVBFHEEB/ReryAXlUWGGdYBZnp6erae7q49KzOWc873R0RkRmZGZmVWZVVlVcfz+3VXVWREZKznfc+7LqKIROIKmbMx0oRnlDJwxrkJ1ssCyCsGUilueMmLec7znksURczt29dqZnT7N77JN772dc47/3w+9Yl/4wN/9X7uPX4c1/f4/h98Fgh4xjOfyQ0v/hVO3H8/f/3ev+J/3/QxTp861dp/UQOlIp76tO/mF2/4JXy/wkdv+kf+/kMf5Pjxu1qff/B9Xx6wdRKw+Kzv+Q5+9Nk/ycGDB/jzv/0n/ujP3kcteoA5z2CA9/zlXzA/P88Nv/TCjm2FED2CTAi46lDAnNc56Jo0wvpkQ3HHsjuwyI0rk8yBlYbA9xLlItKCxYbalYqAFImf9hGXX0wca5SSHUGej3jYRYXbTYuQh4ilVAEwfZ0DApiTIV8sEOTnq9WWsJdIlE6yEESuCU4Sny6YExFXynmO22nWrMOUiLlgQEXEbNss6NEAUyrioc48J8xsEsg4ICDzyFTAYtjb9+GAH7ESKR5Y7lQUFnC4c7Vzth9qyWLocs3+1R6FoCIMFWdwVsh4yTpTJNe1Ii0Vb2NV6nxlOexpFmNJoC3Kag54Al9lcezrmO+l5ewNfvd2YmxiGXCkSl0EkxU42B0kqRE0hcfBvmWU9ibbWIGwkyQ1avsTLdbqdV7yi7/Ej/bJAsi445vf5FUvfTmzs3P84I/8d77tu76T97/3vXz6P/6DRz7qUXz0Hz4CwN3Hj3PTP3yYxfl5rn7EtTz1GU/n8U+6Hkc5KEfxjt9/Gx/50I198/AHUavV+JUXvZzvfOpT+dd//RdO3H+CD3/47wdaALo5dOgsXvmqV3PZZQ/lP//zP3jly3+Ve++9h8MCSI0yAsHpNcNZF13RK8iM4eqHXdzanxCWa89qKwJLgeTYistqJHGkJTaCsE9gVHsfcMX+tUR4dI8LtbT4SRoA99XFGksFLYMzv6yvDIf8iEqBuR8Sc/99DY9GXGAadzTn1sJWE5/Wv+zv1GJx52qF1aigWIsXc8X+ehJwJsBVDt//Hd+C4yRVMv/pYzfx1Kc9Hdd1eeZ3fgs//+q3E8YxeUF+iVhhSgwRu2Cz6oSpIE9LG18gV6kSEqfn3rYIZIWL8lHpyXfOiZBZMT/y22cBIyxWwqyvObtSX3cfc17MNftXCzM5LLASOZxuOpwOXeoF17j13Ra+sVzl6gOreCPk8Y+FjgDy5I/idtGj4yvL2UoTRzH11TpC+OBUk0qom9s10Pl6dcfBj5N2q+C8bTNZEunkXjuOm647WQWYF0Xxc7cqPWqsdSzrHK6GOwvb5/dJY2csA7kRyorEjLmdF2lQFkDGu9/xTk6fPMXpk6f4k3e8k3vvuYeP/MON3HPvvfzXZz9L1asgheSfPvKPPPUZT+e7vvupHD7vPO4+fpz3/tmf87nPfIbHX389n/z4JzakCFz32MfwCy/6ZQ4cOsjv//7v8k8f/cfR9/Hox/CSX30ZcZTM+t77nv/Fvfe22ztngnw5lAjp8j3f/kQcR2Gt5W8/9km+79u/pZWt8IuvfjuRjtnvmw5F4OZTldbNW08JAHCk4cpMEYDCGy9JZtqOsFw83eSWhemewMCrDtSHTg2cdXXhPi6bawy1D0fYwu0vmml2lES+/IorqdZqHL/rGG943W9y9OgdfPADf81rXv9GLjxyhB951Hnc+Jlv5GbkxY2BisiMLHMiZC5X2tgKiPpcdtsxh+1k0J2yHeukSoUFIwUmCSLA9YYfOvplcghg1o2ZdWMupklTS04HLrevVAoDD+ux4j8emGPOiznoRxz0I2rONpeMtSCFSASctQixySqEKY7joByHMIrwfB8pRZqqM8nio5vee2ZsUuLXEQol1USeTtTnbYiQLVnV1vs6Xd57iW1UBtq6o6scpJRIqXa0VGm/LIA77zjKnXccba03f3o+MekLcB0HYy2Pu/4JfM/3fR+PfPSjicKQT378E7z1jW/iy7d+sbXd0W8WlxsexEWXXMJP/8ILeOSjr+MbX7uNc849zG1f/epI+1BK8Zwf/yl+6L//MP/5n//On7773Tz5KU9hPmdRWAokXzhVaQm46x/1MKanqsSx5qOf+Aw//pK3cMVDjvDe33kpl118Po97xMP45Ge/xEooueWUz6xruKfuFL4TjrQcmYm4Y9lLYw7S10jQqQgMwaCZ5XbtY6jtLdx151He+fa38bGbPkwQJqbru++5i596zo/xzO/7fk7ccRtXysXW7CL7t/32sf50z2Kyt9YKgRYWIy3KdXC2oHBMRRnOqwWcDpy+cQaQZHYshQ53rFSpOqalGADctYmMkWEQJO+XHLIWwvA7FlQqPvV6nSBoUq32BrxOMt2z5eTZtoSp0uS77sSWpXax6IK30MXgux5KqFyU3N5lW8sR501H3cu323DkOA4f+MiNVGu1nsZHa/U1/vv3PrOj8dGDzj6b6x77GB712Edz7aMeRa1W4xtf/zofvfHDfOJf/i9ra2sDvq2YB519Ns97wc/ywIkTnH3OYS5+yKWcd9553HfPvfzPP3oHt331K3zX9zyDj/3TTSwv92YJFHHw0CFe9vJX8rCHXc6f/em7+bsP/k3H55k1YCGQHbOvQ/tnecfrfonvfMIjuPoZL+Cuex8AoFrxeO4PPpW//sdPcGqht/dAEZ6yPP5wg8Wm4OiSoqEdptzxFvrZFYjEvN1ohuggxonBNRJpbasSYbrahrECIgmxSvaptMDVoGw2KBdbBnr2U3z4rc+0tEQKrCOoVH3crGrbFkxel0KnxxID8KBKyGqsWCtw+RQhBIVxBpslKUkcUKtNb74/QYvkYVlrNIjCkKmpaRzX2fS+i25PHGuitYDKFgQQtr5PpEWGwgBXOVTc7chcGJ0AyXyfngqdhZW6c55GIc2oKMsRt8lmQd0P6E5oW5dfeUVi0s01Pvrw332o1fjoqkdcAxaue+xjue5xj+HCI0fQseYrX/4S/3zTR/n+H3wWb3nDG7nrjqNDDre9PO8FP8eTvu0pLC8tccftd/DNr32d888/nze99vV8/Wu3AYY//5M/wav5Pbn/RVx33aN58a++jDAM+LWXvIivfvUrrc+WAsltix5rfYLzHKV4wiOv4NavHSXMNdZpNEP++K/+gaggBaoQAdNpnvOcq7lsaoWK79FTdv0MICsm5PseDW3QNi3hatrvwUSRvpjdx2WERQuwEjw/KbxlSZuKbcHLu54lZk1LTjddTgduYTxJhrXw9eUqVx2oU5HjdSdkVkQ1tgfbJtYB3yeOIprNBlNyCqHGpWxsL9oawihKOs+6bqFxfaedIP2qK4LlQFp/Qexxa0CebVQGbO7/3uXbzV1H7+Sdb/vDjsZHd95xlPf/5Xv46Z9/Aa96/euoVKuceuAkn/30p/mLd/8pN3/uv1ir19l/cD+Li4ucOHGCWOtWm2UA13N55rOexY0f/CDRgG5109PTPOZbHsstN9/Mm177ehZOL7D/4H7uOX4XJ0+eHOlcDh48xEtf/utceeVVfOYzn+atb3kTKyu5bnyB5OaTvfnYed7x2huIdcx1V13GOWftb7VVBvoqAo606CxYL9X0BHAkLSYTt/yqI53OniE7bSXA810CExLbJLhKWjExZtNsJpf9yA/SmSJgFChX4ThqW4bHQRUja8pQmwq4YCogMoL5wOXry9XC7JW1WPHpB2aZdnXLnTDtFhmFhyd7nuM4TiqSbpq240gqSaVSobHWIAgCKtXKBGqN/cncA1EUYazB9/xW459Jo1/gIAjmhYNnLZWe3IcJeWm3gDMutTCju/GREIIf+Ynn8GM/+RNIKfnQB/6Wf77ppo7YgYyF0wv81V/8Bc0gIHuBVfrAP/HJT+Z5L/hZTp08ycf/z7/0bCuE4LKHPYxn/fAP4Xoe7/z9P2zVGVhIYxOGbS0LcODAQV716tfykIdcxo1//3f88bveQd7zc/uiy/HVwUV7fvqHnsZTn3Qdz33pW7n0yLncf3Jh4PrJicCsZzgyE7WyCaZdw5GZmLk03ckYk1o0dnoOsPO4joP1IbQBMaCMRSEKZ+I7hm3/sCSWgBjQCoQjqVSSNtSTFOjgSsvZ1ZATTXdgnMFqpFiNFMdWK/gqjTOoJKFjx0eNMxCJm3E816B3J57noXXS1l0qiefvbGG2UciyB2Id4zoOrizyt/ebGG4v4To3cFGotPXymcG2KQOTLA6mp6d5yStfwaMf91j+9n3vJwoj/vEf/iEV0m3ykRIKie+6NKKAZhhQdX2kkDzxyU8C4IlPeRIf/z//gu/7/NZb38K5559HfbXOobMOUalWqa+uopTKzSxGvzrXPuKR/NpLX47Whn/+p4/xgQ+8v0MR+Oaiy93rKAKXXHCYN77kufzJBz7G+//xE4O/MLuJLQtAxJxnuNoPulZKo0BawYOTeue3GNEe9oQF11VordBWt5QAadvXZ8l6HLMzNFHUiLlwhGyDTR5mj3/eCIsmaZ+MkvieixRpEET7xApbUO8EhfUMBJyTxhnkU0MDLbl3zefetU4/9qB6BkXoWGM9xm/5EoKKX0FrQ6PRAAGem33RBFzsLrLTNySKQBBFKCnxHLcrUkzkttjZ8wiHcO72yzJI2HtZBWesZSDj8Lnn8lu/8xYOHDzIm1/3W3ziXwa35M0HOirp4DuWIAoJ4pDZmVmue9xjAXj04x6HX6ly1TVXccXVSTvgO775Tc6/8AJ+93+8if/67Od42vc8g/nT69cM6H4kpZStioE33/x5fvvN/4OlgjLE99QHKwJKSd79xhdy/6kFXvaWPx14ADOuwZW2bQFIFYF+WGOJ4xjPdSZlErn9tMa/5ArINGK8SYAJNbG2KAnKwLJ1+aJpF7wKUSxajyvlPPtEyLL1uKujUFBOUcinPDJ4wprVGugm7xu1ArRIFAHrCCq+i+OmwnRcCfBjZr04g8BITjVdTgcOi6FT3DOBRNe5bbnKVfvrVFXv853pblIKojhOA0M2FQJauEwoSa1WZW1tjcZaE1FLfO/FCkG/7x9wo4Y+5OEC5ywWbTRBHCKlaLkHJsnEHiBZFIoQgSRRXgYxuGjyBL4Em2TblIFJvHQPvuwyXvvmNxIGAb7vc/fx4wPX7z6H83Olja21uK7bqlDoeR5/97GPIKXEGMPqygof/tDf89Uvf4XPfvozLZdAcUhlf/bt28evvvQVXH31Nbz3Pf+Lv37/+zBFzcvpne1189aXP5/HXP1QfuiX3kA9bbHbQ2oFePC+cKDwz30rmUlQCMbkU93FdJjULUKCX/EJCDCBBpMsuzOeLdhY8CVzEB/d0U8gtJJFe4Cr5DzTIuozNS8e7XuXdj57RkAsLFoBjsCveLj5e9j1VZNgFcgYFGfgyyRt8bxaQGwFC4HD15ZqhXEGjVjxmZOz1Jw0zqCS1EJorSmS9EJHdSeHjnPGm7gfa7Uaa/U11tYa1Gr0UQiG+c6NimXbEqJZ18KaNawJSYRApXuKLSg0U9JQdVTLbTquq9F9DEmDpcE9JNqlj6CJ4FQuWHCYkWzfgG6Oe5Ez1jLwyEc/mle+7jUcO3qU333Tm7n+W5/C/OnTI+1jvdLGMs3FllJy+tRpvnjzrXz6U//Rtdbwr8vjHvd4XvJrLyMIAl75ipdyyy1f6LNm6tAQ/RWCX3nuf+P5P/x0AJy1+zlQ0a1Z/6GK5lRTDW0FKMIYnXz3FvmXb1+pcs+ah007vJ1XC7l0ZjwNlMaJgF4BmioEIQE61DRjwYrtb8XpbSyUKFu321musp3PbHeAf7Hw7yQLIDQkKYSxBFSSBeE5m09vmzQcYTmrEnFfIx4YZ7CWpjEeryflsw/6MRVHsxg4rGlFVcYcIeJArR0AOG6kVNSmaqytrbG2toZfqeB7XprSyIa/c9hXMkAUlOqVHX9nOzRKsqhcKjbEGcO1MAhMegynuo7hfiGZtbr1PfmrX2T7qo/YNtnDjNSmeS+wjXUGJoNqtcr13/at3PDiF/Ffn/ksb3z1awmafWbFQyCV7FvaWOukf/eXbrmVN7/+DZw+mfUl6H/VkmGl7YVrxCF+zecHf+iHeO7zno9Sil9/xUu5+fP/NeCoku1vX3QKgwd/7Pu+jf/5hhdy0z9+hIWFeW666SMjlTgehiAIMDrG99yx6wK3r1S5u96bt3z+VDCRCkE3WY0BayAMI25bnmFJ98v2WF+bElhcoVHCElvJVJ94g96nLnH4W8CQKAFGgXAVvuekmQOdq++6F34AhfUMBByuBtRjxfKAtMU8jziryZy/RXmWJBq9MUn8QBzFOK5LtVpBSjWCaaZ98+JIEzUDKmpw7r8ATuDQ6Bt1X4xnDYdJAu/6zegzQZ88e8nvyd/Z7+0nry4kccE74GCZGrK18nKrJ8JwdNYY2CzJtS/rDOwQ55x7mJ96/s9w7z33cODAQc49/zzOPf88DhxM/LLf/Po3+IO3/s6mFAHIlzau87M3/HzHZ0op3vkHf8iNf/PBPluvT7VW4+W/8Uqe9OSn8JEP38jy8jJ33tmb4dAmfeCt5eLpgCiOub9ZIS9QnvmUawH46Ec/wu3f/OaGj63zOztfnHap1vFzz1pxdPU9a95EKgPd4lxYy3LkcmzVZyl0BjZ0GmYOZxGEtl0NcjGNN7g67UTYijfI9TOYESFgMViMSDIGrATlOviVdl2IjgDBPaQIwPpxBqERnA6SegYLQf/7dOspn/OmYw5WNLOeGXNAYRJpKpWkNlUjaAYEQcDqqsb3fTzPRWyk1sEQ99IC4Qbe4VAkZXyLrAr3C8mU1SMJnn61HjXtHIV8rIwoWO4i1s0egMQicMDGZ5xVAPawMvArL3spV117DfV6nbvvuot7776HL3z+89x79z1Ya3npq17Jvv37c7P1zXHpQy7tKW2stebIxRcTmRhX9l7q9UJzLjxyhF9//Ws5eOgQr3/dq/n3T/2/dY4i9ZEZSxA0CcOIw8pw4X6XaqWaDBpCcM7+Gvfcc3dHeeJxYo0ljiK8EerXj7T/vsFfkxeq2Mrhz93gfhX2xovgVnMIhUHn8rxDFIvapyYiLlDLzKoAI0E4Cs93WTMe31zsFY79WgUPaiG8Le2FN8mgOANPWs6phRyuhmgr+M+Ts8QFNTe0Fdy14nLXiosjLQcqmoMVwwFfsxaLrtTbiDl/Y9dACEGlUsFxHJrNJs1GgygKqVQqKMdJlZD1o9yHeUuyGf1GKzI0kZwWxe9/ICRO3xm9TXqTkAh0SX9B7mOZG9BZMG+VGEQFc0alEPZjVyoD6xX2ueLqq7jq2mv41Cf+jbf/3u/3pAjuP3iA9/zZn48cI9APx3F4wpOuRynVU9r4Sd/6FN70ht8ijmNc10WJRFnADlbOn/xt38ov/9pLuO++e/nFn/85Tpy4b8DaycNutCaOY8IwbHUfrE7VuoKOLPv3H+ALN988dtdAhiWJsFZSbXAo2TtkaXsWWA4djtX9NJp9e75f9yn4smZdbosPIrWhIg1TwiKbcCLnVspS7S7fX2ctP8Ozimas2K9CFrTXs/yACrFQ+NnZTnPiFIJhUMIy4w6OMQCIjeCBNYcHCqqTzxvFQqC49lBzwwoBQuC4LlPKIQwDgiCkvlrHcR1c18V1EkuBEG2loPtRs7TjmYroX5lvOBSWJnLgjN5L23WLnPDP/u5GWri/wEIxKMBvlHM40wIF+7ErlYHuwj4Pv/JKnvXDP8TM7CwfeO9f8cPPeTbfuO3r/NarXk1RSEQ7kn88dJY2fk1a2vjv+fXX/ibnX3ghj3jEI/nc5z5LHDRRUuE6DkpIZB8T3M/e8At8///3LD71iU/w+te8Bi1tYTniJEDPonVMHMWEUYQxGikVlYqP53lIpciH1yilOOfwYVZWltl/4AAL8wuM2/4bR1nK1Vh3OxSfPz3NpTPNsdej3wyC0a0BjjDEtvf5mEpn9Mf1LPUBQYfDYqxES6hVYk6s9A4H1iYxGufM9nptF7RLMxYsrikiLXCVZV9Ns9xnRgiwpF0qTtD380mmsJYBlsvn6ljpcbqpmA8kul/p7lQp/Pqix7VnBbhDtWIuzhzIglBd1yUMQ8IwIorWkFLhug6O4+IoCUKkbgTb2lwIQSRdFoTb8uVPp6Z7DSz0jREYLhq4ms76FUnRqm58LLWh4vmz9Q3n2Kgr9mCwKb9fdcFMCRl2P2cSIykDhqS2evuRyH7P/7X1ZIV9vuvp382Tv/1bedwTnsD9993HOYcPc9W11wDwxle/BjNkcMlmOXb0KO942x+kpY2ToK2jd9zBLzzv+Tzte5/BPXcdT2qOa42Ok+YdgkQ7V0rhSIUUiTb/8y98Id/zA98PwPv+8j00m03cqk92KlprrDVYC1EUYa0hjmMEIillWq3iuS5SFUcbP/0Z30u1WuXaRzySAwcOjMk6kH1H+hxY0xt8tk2sRInQ3YoGNaOwlFoBMnN7oOXQisB+P+LIVNClPCS/nO8tURMh58slbguzugTdVzpZ9yHuPMfjWZrrKA1zVQ0Coj4tqCNdXKClGUnuX3Fbt18bwf3LksOzUOnTWjgqUHAmmXx8XlGMwfnVBjOuwfMl50zFWAtLoeR0U3H3arfikFCPJJ+6t8qsZzhQ0RyoaGbcfrEGgx+a5J2v4HkeURQRRRFrsaVhJTp2cNDMiAhPWBASg6BhYEW0gwezDIGajZHWJMF6BcciSGb9RcF82bFOWYOHwcXiW80Doje+Z87GLVkx7Bjhoznb6qESKjWCoM+eNYJzbGeRtK2SWqIlKZPJmDZ6okPuh1YGDJZmFKKSVitt+6dIaqxbtmcmWKlUWoV9HnHdo7DW8tY3v4n/98lP8swf+AFWVla44ZdfyO1H72At2lxw4LCsnWryvve9t3d51EiWZxdMgE01dWMM2mgikwhy13F5xat+g+/4rqfyR297G1NT09z/wAkio4nW1hKzXhqH0BK9qQLheR6u5+IoZ2Aw0czMLM9+zo/z8X/9v9x3371jixnIz12sMURRhJ/FC+xABLq18KXFGlfuW9sRhaDbChDq4QWgELT89N2C54JakyklMNplzloequa5J5qhYVxUOsvUJpmhn+OtUnEF55qAO5YHKwOeSoOslC2c1VoLzUhQcTvz1BcbBf3pLSysKc6ZMYXjQRzDratTW9pmeCvpjjGItSGMEhegkBIhLPt8wz7fUI8k883+kfjLoWQ5lNy5nMUaGCrKsBxK1uLOGIPACBZjSWjAk7DPMfg5y4KQEsevEDkVVnLVFiMk87h4cROZzihC5RfemzUUntFIZTA96awgrMGxmlgWB/AKa6mEdSS2Ne/fJ0PqykcLhbKaKR2gjSbzooxTZFgglopQOAhlsAXWAWliGvH2WqaUVFhjCE08gj1k+xlaGbBYjNWI1AGaCf+WZWCLnKAXXHghb/zt36ZSSVKvnFxhH0gE4k8893n82HN+nGazyZte/3r+9I//mJMnTmDiMfcc3zCiLRNbablZoovA9Txe+1tv4HGPfzyv/vVf51/TngZGJG1pBaSFhQTKcVoWhexfhxlwAD/xU8+l4lf42795P3feeefYzi6v42ear9yieIFBXeryxEbyhflpHGmYcUcXOt0z+/W2z69v7GivgxIWIWxynLlo9jkv5jLXtILwQuFQVeA6BmMFc14SJ1IU+qTwEFIxLeCwiDhdV4Rxr1IisIQalIR9Nc39y7LnUbJWcP+yyzmzERU3vcMWgrj4DjdjyX0rLufMxK2iVRYIIsH9y+13d9Tyv5OITFsYF1V2PDITsRCo1vXKVnhQNaYeSeq5DqJJrIGCnBCe14r5puLygwGN3N4bGhpasc8xKGExCCIDTSOI+wTRauXhCQ028ecXIgSh4+PGIabALenFMdJqpKswBYLW1TEqaj+NFnCJ2MfWTcoi6bLmVYmUg7QGR8coY3BtROB2H6NlKlgDnR3j1s9eLaCJk9svLQNCNXacoZWBJLgDpDZIQ8uklTzj60TDbYLVB05RX1nhoosv7rvOoUOHAPjyrbdy/LZvctvnbwFgctp79Pe1VWs1Xvc7v83Dr7qKV77oxXzm3/8dx4pECVBJWdhqrYbrOIkVBnLBgEX77K8YXHjhEVzPQzlbESqSHE/iskgPUYw/dOD2lcHdF7uJjWQhkCwE7tCKQdHMfpDQ2mx2gEZwZCbknEpARZhWhEfDKE7pnDk3DcKbkjFOYo4j7jOwG0TrHZ1yNf6c7fHvnz0Vcb7f5ETTI0LhO5ZzZiMeWC5Oo1tqKGpuhCcMUzLmtCNZjQqeJQtBJLl/xWGuqvEUhBpO9olJ+NLCFPv8GF8ZPGnwpE1/T37WIzWSYtY63hEVuo1sIwSsxC7fOOWzpp2O2fycb7j2ULMzm2A2ouJYFmNJoAErqAeS0w1VmKkAcPuSy+G5XuP8qhZMq6T63+o61ieDJHtUlO6frgdgpKIWNgkcFyMk0hhqUYAfRyhjqEYxp6dm6M6Hmm02cPX2mQED5bJYm20dhxYSLR1qYZPpMGQmCFipVImkg2tiZppr+Dp/L8d/rEV7tCQW4WjCo6lHkAoCrEBYi2NFUkaVtmVgq3whzeU6v/KTP8Ozn/88fuz5P923sM973vVu3vs//wSjdYGBa6cpfgouvPgi/se73s7U1BSveMENfPnmm3FJC3FIyKoMSym7zP+26yc9n7muyzOf+QPceOOHiFJt/didR3nYwy7HmK0wVqUZDcagsniBLfAcrcYbv7t5xWDGjQmM7BjwlwZE+1sLtyxMsc+LW+tnqXPHVvyhFIEZN6ahJbHpGrgtnFhzEY5gRkatHP+6KT7XppVMi8TPnxQa6r3KnjDJvoCK0JyIK1Qcyzmz7cHwbCfAEZbzqgFNK1mIXVD9r28jktxx2sdThlnXYdbVvcqAgEumk1oPa1qx1pTMx/0FHUBsBaeawwVDhjq5fzVH4+TN5AX7rOfM5dl2B/yIijJIAVJYpLCo9PdAS+5arfRsc+lMg5pbLD7XIsXtq9XW3/M6yRi44mDAjGfwXctlB8JW8GBoBfcFuWssoFoxPHQq5mun/EI3TWyKYzYiI1gxglSnGPiuqfQ8BeALw5rtf5+NEEwHAXPNBtLYHq+6YzSHVpfbglbHzAYNvDhmu6KGtZQsVacKvy+Wiko65vmrK12fbu3xiY7fk+tmU/kobXtMn0RGmiLaLI/VtoMGs5MXrfIO48dqy1++493UV+r83K++qOMzpRTvePPv8KH3vj89jkmzwxTf/dr0FK9665s46+wH8caXvZIvf/4LyQfZ7L8zJm9knvDE63nuTz+fU6dO8fGPJ82XVlZWcFI3w/ixrfoCvufmlo7ZLzimWgIrqRDLBvxDlWhdgWStYCFwW+l289pjcU3RjIa4ngLOnoq4c7nYspEF7zWsYkokgkf3OVdjBb4wSCyuNB3Wg4z9KmopxRVhONtpduT871MRfi7FryIMh93El7rsTQ1MoQu15FTXTFQIiycth6sBZ1UjKjLZd6ZgrUYKY0XfcxqVtQ0qhfPrpAYWcftKdf2VclgLx1ZcLt3X23FytU+QZmAENdeyEnR+7ruG/TXd8x5ZEiXhVEOyv6Zx1rmsFWkTBQhLVRpoNmk4VWxBRpMXx7g66hrh298sgEocUVmNCj4fL4HjsuxXiJSDazSVKARE0kNDFj8D8cSkNIuu3ydYE2AEZUDYTBkoLmshepaMn0sf+hB0HCOVahX2MVpz6UMv2/LvHieVaoXX/cHvcvBBZ/HhD3yQL3z2c6lmL3p1gA3Orp94fZJx8YTrr28pA0GQDPZbUxlQoE0y69waZSP9FmG3pLjQsDNTSNPtlqsEBT74PFJYhKCVcqel7DtDdlUaAGgFEosCXGEJC87VF4ZqqjD4AhwRsBArIivxpGWfijsEPSTCftiUvuIUOji7GhIYyUqoeoS6tYJAC+5crXLnahVPGarKrBvjIQRctX+VqjIERhJq0fHzZNOdyGJS69HoYxPupwzFVnBwOqbmCxYbiiCS+K7hnJm4J8sguy3NWBDEklAblLQ9ygJp7IprwRGCmjK4CubXBHfXa2ipODRrusYXy0zQaO1DdKgh2zvGBsrh5HS7gVcgJYHjUgsDlNFIa9B9YhcmgZb9ViQNwKxoy9BJZNPO4/a5be2D4jgOT/j2b0M5DlEU8c83fpjveub34rouT/yOb+X3Xvt64ngyHoJuLG0z39z+ffzm7/02D73i4bzmRS/h05/8VNsa0LHNxvH9Ctdd9xgAHv3ox+L7FYKgyeHD5ybHMFvUIW+T2KRlsVJpUaXsDMasEE87ujWrz1NzNJfNNjhW91mJVK8pfswE62UICHhQapJfXFOcXHFaAr9o3X21TLgbZmWynRKGE3GvJWFOdYYM+kJzSEYEYUjNryZBvilFM8qur+7d/zplei0ktfujpH7/cqRodM3UQy37ZlEIkc4uleHsaogrLUrYpDNgqpNlFoV+7PcjrtpfLzwnLHxpcbB1I8+R6Sa+Mtxd9wstDtlxAjS1ZCl0iIzAlRZjIex+1gRMu4Zaer9DCyuxJLKkBuP+EqHqWipuzKk03qIo3VAAVWlxPcNCXbHUUFSduOUqyBSB+1ccgi6rlSNtWyHVEC8b5qqaKaXxWub+ds2+dutsN6la2dPzYmMvd+i4LPtJ4F/mZnB1nPr9k3/Lfq1w28BxmG2EzDbWWJiapid2IWhA3+vcebxbKZtFS5XK/za5k9bhswlEmnMr2r936otbd1kF8PBrr6E2VeOuo3fyupe8lGPfvIO/f99f86q3vpkLLjrCw6+9hls+9/kRj6JX9x1ty86/Bx0/wMOvuZpff8sbqFSquK7L/MnTyeNhu/YxogZ53nnn8Ru/+Vp8PxEcrut0tFL+kz/7XxhjOHAgyUvff+Bg331tDJHUO2iVIN66B/7SmSZfmJ/uWX7ZXIM5t532lQmTYRUDJexoJuwBp1hzDbOpcL9/uTMPHxLh4ivDaqxaVoOKk6yUF/RF5v2ikr492X3p+9nKXsmtMOwZDirTK0iUsmlHc24qJCMjWI6cloKwEvVaD1rHZ5N3bi1WHF2pcjR16yphqaQR8gObBAk4rxagrUAJ23IM5oP/vKEK+iQcW63gyv5xNBVlaGqJ7opt0H1M/gK4YCYJ7QwsnApHc2kI4PBshLbFokMJy9l+8nzNrynmA9UTrLmcWhe66bZMBZHkgSgp+uuhqQgPH02FGIvgbjvVOqrQSpasz5XydE8TLOgS8CZmtpkoFvkzsyIx/Z+eys/4PU66HrWwicrFM5k+FkaLoBYlVi5n1fQoFV4ctbz13de1510p/IbxkDnObRpFLaydqJbf3YxkGRCAsRYtROKPtJB1PdtKLHD0jtt5+5t/m5v+7kMEzQAEHL39dn7uh3+Up/+3/8bRO25vdYPrv5f+y0c/hyxocv2prwWe9ewf42d++Qa+9qUv8YdveguPf8qTOXX6JEZ0f7/oMCcNM3gvLCxSr9e58MIjhZ8fyAn/06dO8ZWvfGmIvY6G1hqwW16CeM6LufZA/1lrfr1uxaAeK3xpeiwLQsAlM02+sTyab7jf8V0022TJety/7BQ+GhVHc83++lC1+4cx7/dc75xRZrsmIq60HPQjDvpR6xC+cHqa5aJsgz7orqC/vlj40kJbIRSpQpBXPsIRs4qjAQrj4jqujpqrUQIasUiCNKc1SllWtegbIwCDRw5tE8tDWOBW8nKHmqUvBrHkgWXZSuW89qwmU46lHknWYsFqJKhHksWg//UNUYQDAguzidNRMcclldXUhZm6t6RkNTeTD6THyWmPWtBAWdMxS294xRafwHGphu1nXRqDLghodU3cGh9dHXFwrdNS1k+n3245bDL5IJK6C4Pl084zdAvjb3nsdUiSAkN5JXoifSDDTvXTokmbCnNbZ9Nzzj2Xt/ze73HRxRfzvr/8S9719rengrOXttYokhoDMrm+09PTheWI80gp+ZEffTY/8qPP7sm4yPjcZz/Dq3/zlVuQTSBoNhtYEye91nOfdHS9mxB60sdSZeJTD8wWWhEcmfi/i9wT3WQxDb5riGJRmKLnKcO3nLU8lnPJiLQmDCNqtSrYUZq1bh1FKZdCwOVzdVxpaWpJoCXN7J+RBFpse4yATIMftU2CMw2jBao60nLFwTVibRAiqQWSbb0Uy0IBIIA5x7Cqi2sDVJVln2M6Mw9SDvu6o+DQUiB70hfnvOwdT8a3bJS79ZRfWAhJiSR2oKgEds/5CsNl053Pb9PxMQUBfdJoKl1FftbcKkX+D2ENs81VpNUoa4ilw2K1nTqYYNnXWCqOC5iEGL0ic3GqBGgBVsK/f/pzO3Bg6zN6NoEUaDWsgXzcCKwxSZqGkK0Lb63F2s5lw+wri4BH5Bt7jHYsybb91/rJn/lpLrr4Yn7/93+XD7z/fcnX9g39zU4IEKl3UYqhzskYw3vf8xfU63We/7MvKFznX/7lf29JWmGni2Dy6WcCn3E1C0HvYGitGEoRyNYFCk20GVPO+Ith2SxnaacHwxzrxR4UYYFb5qcLAw99ZdjvxYnQRqCNwNikTkM9LqiGSGJSv3xfnZpjCLTk1gLl5OoD9Z5jMqSKQaogaCv4+lK10NIx5WqqUmOEJYo0npStKKG1vrN7y5xjqEjB/QVuhKzC4GFfD6w8CDDnG672hwwOzQoh2U6r5oMrC0ypCGMFoVUERnFPOEPTFN0H3apZkLmITZ+gZCOy+gZJgp2woNAUNTF2rEbJOOn4CkihmY1WaKgqsVA4VlPVDaQ06H4uhPTm5sfzomXbhcgpBGAx29WhbAOMVHSoWq3iOA42d1FFFq2yLQjCMCCOY6rVanpzBUEQoHV+Wf/tO7E0gwCZlvQd5vuz7QAazSaOUklXwAKOXHQRT33ad/OFm2/m0//+KWame33drSMRyf7bpt2c42CE6PxLLulspQyJorC4uMhddx0bej+joNNKj7u9S2G/KPqRYgkEHPIjZtzEZ3zHarVH+ByZHn851EkdYgbFHhQhgIunm8UWhX1rfRWJWxeKAwZnvZiDfrJNVZmhlRNJYjHI+1oumSk+rounm/jSkOjZMa6NcZykYshBUTy7P5D2IqiowQLfl5azvc0oj3kHZKI4XHOoybFlh3osmXIsR6ZDZj0f6DTfT4cRt8477eEonZc8eC5mLqf4W+BkbGkWKD0VZTnkd4qZwFpOFJTNPOCDX5lO+7tYfD85nn1JImX6XZ0Btd3T0qBgPG82A6RMKr1uLx2aAHEcs9YoaGc5IQyfWgit8re9XvatFgFtU76UEsdxOqroSSUQ0kWtY0rv2J+1IGRLaLYb+wxDUoJUyWT7om2FENzwyy/ivvvu5VWvegVxFA38jl4L1+jX1HEcnvDEJ7ZaKf/bv32cpzzl21BKUalUOH7XXSPvcxi0zrII6D2RSZVSBWQz2aIAxWHZ70Vcsa/e+nvG1SPNjDeFLS6Lu9vYiEWhSJErUrxGVU6GPq7U4yilJAxDHJVUDB1mdr95gb8++ddwn2+YOyvsek56x6b9VdtbQXEmYs63Pevvx3Jfb0wh+x3bM+5VgcMivSYWPJFeE5WMq1IlrqJ2x9XhkUJ0jskWpBRpCfesju5G2dxgZo1khLjWbWf4RkWp36M7XLBzrrxVtB3zVpDz8+ePYpQjyGIFcpuPfDzJtej3rd/xnU/lyiuv4mW/9mLiqKh6/Pi5/OFXUK3WOH78Lt74W6/jzjuP8sG/+QCveOWrOP/8C7j84VfwxVtvGet3GpN0TfQ9bzJ8dptkzos3VctgnMJnFHa7AtDNqNdtIwrEOI6rexRylKIZhhhrkGkO/HYI+1EZ9nkZ1gXhK8s5vmYpVXocDFM2wFfFs3FfWc5WA67JRqNfu4L0bDZBaZ3wLh+gtpARGhXlXAOtZdt5aVPLAKSdn9pHkVjYRcvX3g4MzG9bjCjI8R+W7m2vuPIqnvnMH+DUqZM87bufwSf/7RPcOqTwHXCEAz/Nc+zYnbzrHW/nYx+7qVVg6M47j3LDL/wcT3va0zl27M6h9jMKcZz4+LakjtEO0a/E7zDbbdmsfwjO9GFuuxSvQWSz0CiK8P3JK4wOWzeBq0iopIGLURimzdV6CbQosArk3Rkbn1UIRM88b+Mj/ObYbXOjkdwEGTtxgmm4H46b5W0npXwstHz2Ig26G06rTLb3+vj7h8H3fIRI8vx//Cefy/XXPxmARmONSqXCTTd9ZMP7zh/nsCwvLXHjjR/qWR4EQeHy4Sm2xFhr0XGM57ntS9616m6csU47hsVwdO1GW8FS6OzaDnwlo9P9fCfWAUkYRXiu36enyM6ydUfR3rPruhQlqgVacF8uYLJhoREqDnu6pRC43sbHZM/3OlJrLUmtlYFR3ltE0XWejCegmBHCv3f2NFqhGKIdXZ8Z6bMXbtSKB61o/Q1y8NAhfvTZz+GpT/1uTp8+zbve+Xb27z/AJz7xrzz+8U/csoC9naFXIdBxjNYaz22nUk300z4kziYce8fq/o7NTnej4rUXUVIhhUFrjSN3R4bN2BFd0ftp1sfpPiW8F2PZchtsJuq/Uz6kyzYxxp9JnKFP6mgUdQB86EMfxpt/+3dpNpv86Z/8MR/58D+0PgM4escdO3W424BNXu4scFCmrpk9wFLoFPYpUMIihGXG1cy6mmOrxQ2H6pvoqliyN0gCCZPMJ+WoHUlpmxSsTTo1hiaxnEV9enOEe2P42NWUysAQFHUAfMQjH4XruvzGb7ycW7/whZ09wG2h8221WeCg7+0ZRQDoWw8/K5W7HDoDa95vRQ2Bkl2GSDKv4jhEx3Hi2twLJrMRiK0gMPQI/74tt/dQzNFupVQGhiDfAfCee+/h+c9/ARceuZAgCFhZHm8lucnE9vwZRlESLCUmu/nGqPSb2YdGEq4TR7BVNQRKdhGplVpJgVIycRW4e3OYDYzoSJmcVUkVwzAt1tSNEpZ9juVUQcnpfc74i6GVjMbefErHSL4D4OMf/0Qe85jH4boun/vsZ7ju0Y/Z0na9k0NnvIC1higK8b29N+OZcnTfbnvdzLgxjrTbU0OgZFfQKuwHuI5DEMW4xi0YJ7YnKXurCIzoKKbU0NDQimllOgqsCgGesHgyUQYAXLl+VcWS7adUBroY1AFQCIG1lnq9zsWXXMrS0iJen6Ybe4vOFzUMkxanScGmno93Nf2qEBYRGMkjD54JlqGS9Wg9LmlajRCiZTlL0gzz48TujyFY6FNuu2kE08riSIsvkgZW3Uxi3YWSUhnoYb0OgJ7n4XkeU1NTfPWrX+HOO49u8xHuLMYkVgHPdZPAqD0ULwDFxWtiU9yboIwPKClC5H46jkMYRbhukXVgd2FJYgACk1gGijAkDZjO4JjJXctIT+eZcH/X1ur86otfyHvf8xcYY3o6DGqtW02BfvXFL6SxNrm1psdLUr4jSq0CypGIkZM5dwdzXszV++t8y1nLXL2/zqUzzZ7BrYwPKMnTKnRn07/SF0PJpERuHMW5cnjbW65ts2grWNOC5ViyppOmTapPK1Jf7khK/65hkq/NSJYBYwwy1+I1n9O5lxjUAVApxbve+Ufc+Pd/t0NHtxOkdRwyq4DntAs97vCRbQfbVeq2ZI/QJSdd1yEIIlzX2zVpht0pgd3UlGU57l1eBgK2scYSxWm6uU0mkpNsSB1eGbDQDJrIUKYRs4JKpTJig5/dRXcHQGstxhguufTSnT60bSZ5gsMwTCusOXsqg2AYJqHUbcnuQ4i0A6IUiSLtZ7X6c+XTd/Bd6sgIEEn1TehNCYTkUF1h8dNgwClly0DAAWijCZpBUolR0G4zPqGMJMkrfoVarUa1WqVSraQ+sN2h6Y5KvgNgHMfcdNNHiOMYpRRPeML1OM6ZFW6RxQq4rkNWdKikpGQwWXaB6zhEUYjRhmzM3GkjQZYR0EhN/w0jOBkmf+dxhKWmLLOOoaZsy0WQBQJeUNGc7elSEehCKYepqSmmp6eZnpqmWqtOtLgcXhkQafR42ohDSrnxzlK7gHwHwF++4ef5w7f9Hr98w89z993HqdVqXP7wK3b6ELeVKIoQgrSi2k4fTUnJ7iAbIqVMrANB0GwF3e70yDk/ICNAiETYzziWacfiyd3fGnu7EQKkku1/E97N7cya3o7ATnQAnFSsMcRRhO97O23VLCnZdQiS2EHXUTSDMCnj7WRVLLf3ZdJpHEASDzA4I6DkzKJUBvqwdR0AdxfWQrMZoKREliaBkpIRSbVnm1hWlVKEYUhVOdtmMu4XDNivNLA/2RPYki2ivO0lA9E6Jo7jJEZCcMYFDpaUjAMh0gA8102izHNNzbaKyAjqWrAUy1ZcQJ5pVfwulxkBW8gED58jWQYm+DxKNkVRaVSBNYYwCPBch1aISOk5LCkZAdvxQwmB4yiCIOlomBUi2qj3rbs/wEyuP0BRGptKSwNnMQDVMiOgJKV0E5QUY5NUQmMMvu/u5VjRkpItI9eqoLVEKYmIIY4iPN+HDZbvGrU/gC8tskuXL0sDl2SUykAJvVJepM2IolaBoVIRKCkZD0KA57kEQYhSDspxGNU2YBmcDTCtLK60eH36A5SUdFMqAyVdJKUFm80GSiUmzVIRKCkZI4LWuxWGARUpER01W/q/cJERRBaiIbIBynjfklEoAwhLOrFJTQFjDK6bpD+VY8ouobxRk0/OAOA6Cq01YRTRHa/TwiYZAI00ELCuEyXAWsr+ACVjpbQMlORI3ANhEOB6CikprQIlJWOm1dVQCDzXIQiaKCVxWrUHwFgIjSC0gqIqtkLAjGNZiMr+ACXjoVQGSlIy90ATqQSOUuVEs6Rks2QNDLOmXplgtxBYySI+oStYCQ37sEkPA9ObBpjRHQdQkWU2QMl4KJWBkgRrieIYYzS+720816mkpKSXri6fgZXcH1daH4dC8kBETyYAgJNTALpVhDIboGRclMrA2OgnPSdFqg4+DmMNYdDEdRxUtmrWWG0SDr+kZBdS9O5YYEG7vR+QpAfOOKDSdEBP2tL/X7ItlMrAtrDTCsHg0cQaS7PRREmZZA/kC6WUA1FJyaaxQGwFoZXESEJbHLttgGmpcVT54pVsL6UyMDb6CftJmFb3s1gkn0VRiLUa1/N71i2tAiUlG8OSNgaykghB3sjfry+AazVh0EBVqmm6YbankpKtpVQG+rAUSI6tuKxGkmnXcGQmYs43I68zmSSDkLWWOIqSXGffT+qn7/CRlWyG8u7tNBbQCCIriazAFNwTAUzLmEXt9Xw258SYUKcFv/zylpZsG2e0MtBPmC8Fki+cqrSigOeNYiFQXHuo2RL2g9exTL42b8FagjDAdR2kFOW4U1KyQTIFIOyjAAC4GDxhcUSyhi8MS9olshJXGOZUhC8t2vMIggApJY57Rg/RJdvIGfGkFQn9yAi+dNpvrTOvFfNNxZRraMZdTT6SDqTcfLLSCubpaQKSrnPbosfD9kXUXIMjYSkQE2Q9aLsGrDE0m01cpXAdVZYc3hOUN3A7aFrJknYJrcQRBl+Ynpr/GS4WVxhc0asiVISh4gSdCy0omVYnDJooVcu5C0pKto49oQwsBZLbFj3WcrW6pUiaclQdy0rYXp4J/X7U+9T7zijqBJZnLZJ8/mSiZLjSEuVKhs5rxXyguPJAwMGK7okS3nq3QxIRaI2l0WhgrcGv+IVNiPrUQyuZaMo7tdU0rOKBuD2JCK0itIopGeOkATZOTgFYT4wXxegKwHMdImKazYBKxS8VgpItZ9crA0uB5OaTlZ7lJq3ctRKOb4BUwlJzk/5ijah/YZCMqKh2uCWxSIikjagnLX7aV/x0TkmZ172uic2TTP+zcsPVTBHoPsTuheWEs+QMJnEBJG6AZVM8ZIZWMiPDoRSAbvopBI6jaAQhjaalWqki+pkfSkrGwK5XBo6tFOfrbggB+33NRTNRRzwAaWDd1WcFzHnFMQPZ23z+VIy2sBZLloIBw4KFUAtCLViN+qxiE9dEzTX4ylJRieLQ+t0xBLHk+KozhDUhOcA47AwYLLwMti3/y+Gn5EzDAiYXBKhzb0G/CYCxAl+MrrQPer+kEFR8nyAIkoBC3yPv6ispGSe7XhlYXcesX4iAGdewGskegX/RbMScZ7j2ULPTZJ8uz5jz11/n1lN+oUvClZaKYwl0Unp0GNfDWh+FIU/mAjm7FjPjGjwFXtbKVFmIQ5rNBp7romRiJVgKHY7VfeqxYsrRHJkKmPPiUgko2RSZXz0fHFfZgLDcLobJAoABKYFbdG5SgO/7hGGIkAI3619QvqAlY2bXKwPTrmFe948B6CEV+g/eF4KlrzCf8w1X+8HAXa23zpGZiIVA9SgcVx5qWxispRXMuBz2KjYy9UOadVwSeU6sOZwoWC5EBVfM4CuLqwzCwumgbVkJtWQxdLl6/yr7vHjo7yvZ3fRTCDdK00pO5ErtaqtoxoqzneZEKQRDKwCtGABLReiOc8uYU0No6xtAiKS1rFKKoNkEH1zPo7QM9CcwouzXsAF2vTJwZCYaGBAIgIBZ19DUokforyfwN8Mw1gMhktn7pXNhoWvimtQ1ERlBoAVBLGjq5Pe7V52RlARrky5ooQGi4mtmLdwyP42vDJ5M3BPJz+SF8pXBS39Xor9loWTrKLrmFREnBW60RKdtbzv/gTady2IDgZYsR+1hINSShdDlIfsaTLvFNe+Lh9X2c7hqip+tee2xT0ZpPYukBE/yz6ZCr12Wp/up3qylIb+9IwxVqdNzKX5/+gUBKmE522lun9XDJmOE66ikuVHQBDKFIF2hpEVTC+4P289fQ0NDKw77ulQI1mHXKwNzvuERZzULswmUgBmvVwBv9/ENo3Cspzi4MjH3T+dCJFYjyXygesaDGc9w/nScxiRAIzJEJi2DqgWRWd+1EmhJoCUrAyY8UtgOZSTUkoXA5YKpJrOexhUWVxpcaXEKmqxkTKJCMc5jGrSvrEpdIpwFsRVok5SuzS+LU0He1JKlsEt4By4wPYazTrFwf93jkn3NDW3ez68eW0GILJZfXctkTlmIESzlavlnloYHqYCK1OtazLszALRVBLozAwCGzwIoTAncStIGR66bCLlmswGCxGVwhrsLLKTvCMQWluLiO7cYyx1v6DTpqsiuVwYgEaSPOXtjA9ckMazikNFyQ+QaCwngwXMRc75Oeg40G8iKwHUcSGdgJnVNfGVhqmNWmKGERQq7rtLQzypxvF6Beu/yTDHI/zMWTjTaldgy4faQ2TVmPd1KEZUkyp0UW69ULIUOtyxMt2I5MvfJlftWmXINJp15m3TG3flTtD7PhPepZqcrZiFwcaXBkgj5SaQRC0Q6fI16hP386mqE2tZ5k329n6XBuEwhEVgkiTk9+d1iERgSN8BKnwyAppFIkdwrTxgqKtpQEOB20aEQNBqIKjjuGAOoJ4wic78nbYfw71Y8+ymi4eTe1olhTygDZyqF1oSZmDnfpEWFGhht8Fy/NbBjk0HTl5ZLZpvcMj/dEcAoBFx1oM6cG2NIhFdgEotCYGRqMRCERrIUOSOpu5GRREO+lN9YrvX9TIh08BdtBcECjbgtNDKhO+VqlLDpOSZXodVSvnVJRMs9Y4GwIKjTWvjiwvhm38NYZ0ZBCMuMCnEdiRIWRyRuHCVApS6domVfX6qxGPYOAzOuZk5uzBLiCVPoVz+gIjxhsJaWsE7uh0iXte9FFtEP/Qf4bLklEQ4m3aexouOxjPs0BdIkLhWA5gTHNQAd7pNEIbA0Gw18wN2DCkFgBPcFveb+ohbPeRxhiQqeF68s07AupTKwy+m0JqSDozE0mk2sNvgVDylppz/mRslZL+aaA6scW83NpqcD5txECEigogwVZaBgvLl1YSo1UXdSczQPqoap8Bfpv/bvo8Q5FGGtQJMIg/XCtup9YiMmgapjWkLayQS2bAvt1u/S4ohkZv2N5WqHmyBjzol4cG2BarXSMq8Pw0XTzQ4rCCQK4ZHpjZvBK8IM9qsXVbnqc8CWZAYf2N776KRKXszgmh8S2zc4sJvT2mNaJtk0maVBQEdMQxbjINJ9AwRjzJ7ojY+IqYi2iTtRCJJnoNlMYwgmVCEYJpjPpopcYl0DDSz2yRJrGsG0am+fvD+k/yxV1alEZOxzJkfBm1RKZWBP0JbybYuAplLxkFLkpsJdW1mYc2Ou3r+xGeCRqYDF0O0RJJfNNVoKRRHakkRwa8HXl2usFghsXxkO+HHL/G5yPzWdf2fm+WEQotP0nQ300PZRR1ZgC/bnSMOcp1M3SupOybkv2j9t6++jK5VCV8x+P+Lq/QW+lHW4uI/wPr+2NvK+AOa8mGv2r3a6V3IK4UYZh189LxSL8IRJguuwuNic1Uck7qXUfRBZw7IZTlhqK1rWCZPuC+i1gOX+jq2gnnNFZDEN+1TUKkOc71nYVtZsR3MwgSUcMhOjrRAIgmYjLVLkZg8zTQ1Lemcj6vvN7g+6GiVovctFqdVFbiZI7o8vTUv4d9dK8YXlsK/LbIINUCoDu5VWoaN2wEBLETCaSsVHdlkCxs1GBYkSoIShIuHBM41C4Xb5vrWRBFI/K8V+P+KqVOgOO1vujhnIjunK/aMdE8AlM+Odefe75lViog3K7zkv5uoJywDpTk9sk1hLfGE6gv9kamFxSZZ33+uq1B3ZBFlRoW4yBW9YSwIkVoEiVo1iaph6xDn6xUec1h4zsrP+hwBQDhqHpUDjWoWjFJERLOQC6fJC2Jc55aNLEcmGk/x3dM/s59JMosyN03bv0Po9c/8s9ZndL8WyY3ZfRL+4k4qyVNfZ1pd2x4MFdyOlMrBb6egsJIijkCiKkFLge37vKlvEZgXJuGam/awUR6aDkQPgxjlb3oqZd9E1D7cmzX1byfL+tRXMF7T3hWQ2OJWmBWbR/04qwAfd525LRT9l46AKWzPwfOxCFueQxTUYaC1bL6ZhFAbtq5+CYqWDRdKINI6VNPooJ4OFcOe+hYDYwIruVSrW89tnDJrdt2w4LQtbMklIfloqsjNFMKM0928dpTKwK8kbHJNeA0Gjies6ST5y9q7tEsvYOGam4xa645wtT+LMexLI0ipjBLGVick4/ayfIDFWMCV0qw3wRlk3roG2OV9muX194hzqRtEsiGnwhGFaxq3AVJs7v46/bdu90S8ATqXWjqJXWgiQaSOjOI7Qsti6kBfC62EtNPpkunT77fvRb3bvScuMYwdmBlVUae7fbkplYNeRf30yRaCB67q4rpP4xK0tWHfvUwrdycaQCX+Z1FEY8Hz2FSRpHYBxMK56AXMqohkXzGJVhNNSJKCvIM6dpuqTiZG3WOT3lN+jlYIojomtJhK9Q7sn2yb2diZN57zB5j7TfSwMxgo8aVrKUuZuECTlk7MAy36z+wOuGSrNtDT3by+lMrBrSRWBZlsRaE8xziwloGRy6K70Ny2TWhHxADN3hsSi0pgATxpOar9nna0q+7sZhrEyjHtfoutn8odFuop9JuakLghaHXFmvWYsDd17z3xlqQ1hGShn97uLUhnYhVhjCMMAozW+56GUROwWn0DJnsQCa0ZxSq9f6S9DYnFo10Do8PsLOFtsY9nfTTLOqoSj7KuoDkFNWc6yTRa1QguVCuGk0+ko7HMMjYK+L6P47cvZ/e6hVAZ2DWkykjU00tTBasVHrhcluA1BhCVnFvlAv8zcbxB9I+EDK3GEbs36k5+DS/7CDpT93ZUUveCJO8AXmiCMEFbiKI9Rh3tfWg57msUdTlEs2R5KZWBXkMz7dRwRBkGSMdAqJrTOi1m+tyWboJ/gL6JfJLyxgjkZlc6rLaDQIpiGKSgpqFQ8oiii2VijUqmltQhyKw7YMyQugbNVObM/EyiVgV2AtYY4jgmCJr7rpm4BCqsKlpyZbPQR6K52N52a9NcT/N1ks/7CUrCbjPwv2ThCgOe6KKkIwwCtNZ7nIWR5R0o6KZWBiaJXsmfNhoxJ4wNkGh+QFUazZbhgyWgYktz5plGczuXza6toDvDxZ6g00E9lvQ5SX7/bJxJ+EoP+zhSy26iURAhBGEU0mxrX83CcpIJhJ33KlZbseUplYCLoriuWvIhxFBOGIdYaKr6PEO1OcuW7euZS1J2xIjpTKjPzvrGildKXNfLJwvTW8/FDf8FfxDij6kvGj1QCX3pEUUyz0aBSqaAcByHy0RulqfFMpVQGJg6bZguEhGGYpg16abBV8Uvaqkxcsufp1175slmLLwTGOB0CfxCDfPzTMh4o+PtRBv1NJq0a/gI810FJSdBsopSD5/tIJdsrlArBFjHZ17RUBiaCVJxbSxxHSdqgsVQqHkqqgWmDpRKwt7FAU0saWtKIFcfrfmF75XvWqlw4bcCKnuYtebLmPVIkpXzDPpXznAkfuEpGJL2d2aPhKIX0JVEcs7ZWx69UcBx34LNTsrcplYEJwVpDHEU0m01cx8GvOGllr3JQ3gsUmfbn0mqJ3QI/+Zn83dSysINiN81cDXmRCnyFTbv3pd0Uu2b6UllOFFTOK338ewebNR7qGUYsUoLnOSgtCYMmcRzj+36rtHHJmUWpDOwY3bEBiWm14idFhLI1sl9a73KXhl8y+RSZ9hcCl1k3JrJiaIE/iJrSVExATdq0JOz6lD7+M4NWUdKCYGMBOI5CSEkUxazV6/iVarKsNBOcUZTKwNjIXpz1ZvJZGgAYYwijCB2HOEqlJYU795atW76Wk40FQiNpxslsPv9vOVKF5SCWo8GvnxSWqmOoKkNVaaqOwVjB7SvVnu6MF9bqSMzIZt7Sx7+3GaIFAFibdAz0HGItCZoNIinx/QrKUfTPOBj4zSOse6Yw2aN4qQyMjfUKeLSLAlhriaOkboAQIk0ZnOwH5Uyk27R/Xi3ElZamFl0CX9HUYkOz+yKBX1WGqmNazWC6mXZ0T3fGKjFR2aOpZDMIcByJlD5xFNNsNnAcF9d10wDDzm6pgynDmncbpTKwpXSmDCZKQEQUhYDF9xykUsgyeHdHMUBkJIEWhEYSGsFy6HCi0c7Bz0z7G0FgC+Py57yYaw6sjjxkFnVnDEs3f8kmyYYhKQWe52KMTQMMQ1zXS4sV5bMOirB9fi+ZdEplYDuwNqkgGAZYY3AdB9dVkAvusSTm3rKI0Obons0frob4yiRCXksCkwr8VPAHWhCZzQVMSWGpKFP4r+oY6pHqiBmA5F5fPNMs73XJ5NAae5IHVUmRug4EURRijMZ1XZTjDognKGc2/Zns61IqA1uKxWhDFIXEcYSSCqfik3kE8v68TCnYa8JhWGPhoGj7on1mAj1IZ/KhlqxEivnc7H0zs/l+SGE5Mt1Mhb2lojSuHJyPP+fFXLN/tce0P+eWdv2SSSZ5rh2lUEqhdVL/REQRruulBYuydYsLp5XsHkplYGx0vgBtJSBGSYHve8hMC9iDQr/j9HO/D6sIFEXbXzDVRAoITSr0dXtGP5ZDFuDKpAubpxIfvSctvjLcu+azGhWk3XkxF06NHnBXZNovKdkNtGsTSJSU6LSFuoiSomiO46QrlUGDu5lSGRgLWXthiOOIOIqwxiClTJSAXJvhoaJ7dxmDZvXaCkKTmOKTn7m/UxP9Sp9o++P13jr3G0EKy4VTQSrwE2HvSTNwRl9TptC0f2S6jLwv2ft0W/RaQ5gER6gOpSCKkpgCpRRCZtkHe3Cg2+PsCWVgKZAcW3FZjSTTruHITBJN1b1szt+a/Omkq6AmTGMCHKVwUyUg74PLz5zzr8pOKwijmugzAR9qyVLocOdqW2hns3pXmqQe/ibz57vJBLqnDL7MC3fLXat+YbrenBdzZLo50veUpv2SYckbxHY7raEoHaNaY1OHpc8mBdGURCkPrTVBEGCtxXU9XM9tBRruhWtypjC8MmDBaI2Gzmo4O8hyqLhj2WMlZ86d14r5Zqd5d14rFgLF1QcaANy16lKPJVOO4cLpiFlPd+yz/+e9r30chWitwRqUVLiVfEMh21fQDrpyowjnjW5j039LocMX+5joVWqizyLsMz/9MAJ+s0F5ADVHc/FMMxH6yvZNtctwhB3rbL407ZeshwUajSae7+F0Ve7bjcl1rePtN0HpinMSgGjFFGjiND5KSDXk+Xd+kejawnZOm3bd9cyjtV5/pR1kJMtAo7HGpBSvPhXWOB5MD72+tXDr6UpHilci+BwOumtUZExkFA9E1a7PFZdWF5hVQevUV7XH/eE0De1QVS5HpgP2+wYhRJqmJoiNYDF0+MZyrWt/LudPBVRUYqXofucaseTeNb9nm0OVCFdajKXViS77PTKCtVxZ2WwbR2YiX2BtWwEYJh9+HCb6mpME13nS4qazeFcZXGHxVHtZv2j7y+YaI83Ey9l8yU5gs5frDCXf78BRCmMgjGKiKOoopAYUaEi25+NB7PhlHngABcWZssqPIkktn2RGUgZcz8NzXXb6lixHDsdXhlcEMvp5iE9HtcLlCYLbGwcQApQwKAFBrg58FCu+uOjjyqQ6XL9OcHnurvvrrtPNqeboUfGxyXT38eBI2wqyy8z1pwOHRk99e8t+P+bq/fWh9jtOIV7O5ktKtpes3HHmUpBS4LgKrWMqFb9Pb4SU7fSRbttX5QMp291lgiAg1pM7Ng2tDGRlU2S/SnnbeE+Pb0CYbhZrIbaSfrdyHGbxraDimNScl/r50uXZ32uxSpWGTjITvZcqAK5MFKFuDvlOz6weRjfNl0K8pGQX0+E+sC0ZL/rOhrviqCaV/Jg31LF2B09mU9D8/5PJ0MpA+yQSY/NOBr2tFKR8rYcQMO3ErBQEmE27mgummty1WqFe0MXNkUlOeWxER3e4bmqOxpEWR1gcmcQLBAXrTzma86eCntALgeWueoV6wfnNuDGXzTWSFrQCRK4b3ZcXpwrz6ff70bqz8+60PhjNRN89q68pzTnuMrPd5sGSkpK9ycDkAdtapXfpZAtHYAPKyiC3x2RrPhsasXc6+n0QvjJcvq8OFo7VKzmzcxMs3LIw0yP4Hjy7xpyr8aUp/PzK/WstwXjrwvCCt5+gfcgAQevL4iC4S2ebTDvFAShHpgIWQ3dDgXPjMNG3Z/WCWGuCIGSPJKqUlJSsR5E8WEfKT7wSMDS7MUy0mE2P2N3+op0m0BKsSAVU76y4WPAlQnbO0+sKxlEE70YE7XZt0719aaIvKSnZCL2Gge4KZPSssXcYRREYbwzXuBlBGWhXz+tdvL1FJmZczULQ31x/rO73FW7rCb6hPt+/yl31CquhYMo1XDTTX/BuRNBu1zYle5PJHW72Mr3j35l6H4okgSVLt+5cZ9dfo/V0HQGMudbKVrErbblHpoKBNeeL/P7jZM7TXOnVqdfXqFR8HLW131dSUlIy0eSEosg6r7XYu4pSvkhTXzrmypNrIdm8MmBb/20bc17MQ2YbfGO5Wvj5VB/f+paRdhs8U+mnHOdnA2fw5dlSsnGmM365a0IywRd/NwiFYS9fh2CwbaPppi7/Lrh3Nmc0FkVjYVrLuGUNmOBzGpVB55K50HNv5HYc0oYZQRnI1aPsqkK1E5xbS3z03QrBltWPLzjvdat1nSEM0o7P8Euz5ez267vbj7+Drud/LOc2jAzZoUF4mHbrReF1NndOu0EZ3Cj5W7cbnvMRLQPpLG9CAgbPrQVMObo3cK7bd77JY800334P7l5+oEeia0ogdsUrsDfIX+tWLYny8m85ebtX4eTAdnyyob2Pa7WtQthOK1SrfwEDznzyJ8pjQdjdk2+wQTdBThvIRYKM9d7mdzbgSs76MVf5ncK/5zhEgXa6kWPqeIAFQgrEhJRnnhzSOhRnwps+YXQOvrtlCNpDrJNrv5fpqTIocgsHWJJ3SWzdxhgqoGByGFEZaA83vY/3mB/4ka/f4A02d7zd55yIOmNs61nfHbd767HpTKg7erhkK8m9lzZ10e6iJ7IwQWlXkUwKzuRxwNp+73tn4MqeGxHWnbTmZcdkPx0jpRZamw32Bbd04F2exIsw2jG1XvT0/LMik7HWk3l6O4Q2BmMtsdal1WTbsGiT/Iu16V8yfCyIAX9t+ddNHjaxgxlD4bFO+uGPBZFzDKTaqEllRdKcp8thkL8og7rK74qLZwt/bS9LrocluRb9+uNMAiNZBqIwJIrCrTqWXUbShSoIAsJgcm/wdpEPCrLAWqMJFJgPS8ZOPkip0Wz2DjejG8FG2z6/zaDJYfr5yI/DoNdrmJ2N+HqOtnoyDqw1c897SSr8YLW+ttOHsmN0J/NMesaZsJPeV7GkpKSkpKRkS5nMVnslJSUlJSUl20apDJSUlJSUlJzhlMpASUlJSUnJGU6pDJSUlJSUlJzhlMpASUlJSUnJGU6pDJSUlJSUlJzhlMpASUlJSUnJGU6pDJSUlJSUlJzhlMpASUlJSUnJGc7/DzD6uHhrTuLCAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
gitextract_0cqaezcx/
├── .gitignore
├── README.md
├── cfg/
│ └── nba/
│ ├── led_augment.yml
│ └── led_augment_debug.yml
├── main_led_nba.py
├── models/
│ ├── layers.py
│ ├── model_diffusion.py
│ └── model_led_initializer.py
├── requirements.txt
├── trainer/
│ └── train_led_trajectory_augment_input.py
├── utils/
│ ├── config.py
│ └── utils.py
└── visualization/
├── data/
│ ├── future.pt
│ ├── p_mean.pt
│ ├── p_mean_denoise.pt
│ ├── p_sigma.pt
│ ├── p_var.pt
│ ├── past.pt
│ └── prediction.pt
└── draw_mean_variance.ipynb
SYMBOL INDEX (88 symbols across 7 files)
FILE: main_led_nba.py
function parse_config (line 5) | def parse_config():
function main (line 20) | def main(config):
FILE: models/layers.py
class PositionalEncoding (line 7) | class PositionalEncoding(nn.Module):
method __init__ (line 8) | def __init__(self, d_model, dropout=0.1, max_len=5000):
method forward (line 22) | def forward(self, x):
class ConcatSquashLinear (line 27) | class ConcatSquashLinear(Module):
method __init__ (line 28) | def __init__(self, dim_in, dim_out, dim_ctx):
method forward (line 34) | def forward(self, ctx, x):
method batch_generate (line 45) | def batch_generate(self, ctx, x):
class GAT (line 57) | class GAT(nn.Module):
method __init__ (line 58) | def __init__(self, in_feat=2, out_feat=64, n_head=4, dropout=0.1, skip...
method forward (line 78) | def forward(self, h, mask):
class MLP (line 93) | class MLP(nn.Module):
method __init__ (line 94) | def __init__(self, in_feat, out_feat, hid_feat=(1024, 512), activation...
method forward (line 105) | def forward(self, x):
class social_transformer (line 113) | class social_transformer(nn.Module):
method __init__ (line 114) | def __init__(self, past_len):
method forward (line 120) | def forward(self, h, mask):
class st_encoder (line 133) | class st_encoder(nn.Module):
method __init__ (line 134) | def __init__(self):
method reset_parameters (line 147) | def reset_parameters(self):
method forward (line 155) | def forward(self, X):
FILE: models/model_diffusion.py
class st_encoder (line 8) | class st_encoder(nn.Module):
method __init__ (line 9) | def __init__(self):
method reset_parameters (line 22) | def reset_parameters(self):
method forward (line 30) | def forward(self, X):
class social_transformer (line 46) | class social_transformer(nn.Module):
method __init__ (line 47) | def __init__(self):
method forward (line 54) | def forward(self, h, mask):
class TransformerDenoisingModel (line 68) | class TransformerDenoisingModel(Module):
method __init__ (line 70) | def __init__(self, context_dim=256, tf_layer=2):
method forward (line 82) | def forward(self, x, beta, context, mask):
method generate_accelerate (line 102) | def generate_accelerate(self, x, beta, context, mask):
FILE: models/model_led_initializer.py
class LEDInitializer (line 5) | class LEDInitializer(nn.Module):
method __init__ (line 6) | def __init__(self, t_h: int=8, d_h: int=6, t_f: int=40, d_f: int=2, k_...
method forward (line 35) | def forward(self, x, mask=None):
FILE: trainer/train_led_trajectory_augment_input.py
class Trainer (line 23) | class Trainer:
method __init__ (line 24) | def __init__(self, config):
method print_model_param (line 95) | def print_model_param(self, model: nn.Module, name: str = 'Model') -> ...
method make_beta_schedule (line 105) | def make_beta_schedule(self, schedule: str = 'linear',
method extract (line 133) | def extract(self, input, t, x):
method noise_estimation_loss (line 139) | def noise_estimation_loss(self, x, y_0, mask):
method p_sample (line 158) | def p_sample(self, x, mask, cur_y, t):
method p_sample_accelerate (line 177) | def p_sample_accelerate(self, x, mask, cur_y, t):
method p_sample_loop (line 198) | def p_sample_loop(self, x, mask, shape):
method p_sample_loop_mean (line 208) | def p_sample_loop_mean(self, x, mask, loc):
method p_sample_loop_accelerate (line 217) | def p_sample_loop_accelerate(self, x, mask, loc):
method fit (line 238) | def fit(self):
method data_preprocess (line 258) | def data_preprocess(self, data):
method _train_single_epoch (line 285) | def _train_single_epoch(self, epoch):
method _test_single_epoch (line 327) | def _test_single_epoch(self):
method save_data (line 363) | def save_data(self):
method test_single_model (line 402) | def test_single_model(self):
FILE: utils/config.py
class Config (line 10) | class Config:
method __init__ (line 12) | def __init__(self, cfg_id, info):
method get_last_epoch (line 29) | def get_last_epoch(self):
method __getattribute__ (line 38) | def __getattribute__(self, name):
method __setattr__ (line 45) | def __setattr__(self, name, value):
method get (line 55) | def get(self, name, default=None):
FILE: utils/utils.py
class AverageMeter (line 15) | class AverageMeter(object):
method __init__ (line 17) | def __init__(self):
method reset (line 20) | def reset(self):
method update (line 27) | def update(self, val, n=1):
function isnparray (line 35) | def isnparray(nparray_test):
function isinteger (line 39) | def isinteger(integer_test):
function isfloat (line 46) | def isfloat(float_test):
function isscalar (line 50) | def isscalar(scalar_test):
function islogical (line 55) | def islogical(logical_test):
function isstring (line 59) | def isstring(string_test):
function islist (line 63) | def islist(list_test):
function convert_secs2time (line 67) | def convert_secs2time(seconds):
function get_timestring (line 77) | def get_timestring():
function recreate_dirs (line 81) | def recreate_dirs(*dirs):
function is_path_valid (line 88) | def is_path_valid(pathname):
function is_path_creatable (line 95) | def is_path_creatable(pathname):
function is_path_exists (line 111) | def is_path_exists(pathname):
function is_path_exists_or_creatable (line 116) | def is_path_exists_or_creatable(pathname):
function isfile (line 121) | def isfile(pathname):
function isfolder (line 130) | def isfolder(pathname):
function mkdir_if_missing (line 144) | def mkdir_if_missing(input_path):
function safe_list (line 149) | def safe_list(input_data, warning=True, debug=True):
function safe_path (line 162) | def safe_path(input_path, warning=True, debug=True):
function prepare_seed (line 176) | def prepare_seed(rand_seed):
function initialize_weights (line 183) | def initialize_weights(modules):
function print_log (line 196) | def print_log(print_str, log, same_line=False, display=True):
function find_unique_common_from_lists (line 215) | def find_unique_common_from_lists(input_list1, input_list2, warning=True...
function load_txt_file (line 249) | def load_txt_file(file_path, debug=True):
function load_list_from_folder (line 261) | def load_list_from_folder(folder_path, ext_filter=None, depth=1, recursi...
Condensed preview — 20 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (396K chars).
[
{
"path": ".gitignore",
"chars": 31,
"preview": "/data/\n/results/\n**/__pycache__"
},
{
"path": "README.md",
"chars": 5895,
"preview": "# Leapfrog Diffusion Model for Stochastic Trajectory Prediction (LED)\n\nOfficial **PyTorch** code for CVPR'23 paper \"Leap"
},
{
"path": "cfg/nba/led_augment.yml",
"chars": 1230,
"preview": "# ------------------- General Options -------------------------\ndescription : LED\nresults_root_dir "
},
{
"path": "cfg/nba/led_augment_debug.yml",
"chars": 1258,
"preview": "# ------------------- General Options -------------------------\ndescription : LED\nresults_root_dir "
},
{
"path": "main_led_nba.py",
"chars": 894,
"preview": "import argparse\nfrom trainer import train_led_trajectory_augment_input as led\n\n\ndef parse_config():\n\tparser = argparse.A"
},
{
"path": "models/layers.py",
"chars": 5014,
"preview": "import math\nimport torch\nimport torch.nn as nn\nfrom torch.nn import Module, Linear\n\n\nclass PositionalEncoding(nn.Module)"
},
{
"path": "models/model_diffusion.py",
"chars": 4424,
"preview": "import math\nimport torch\nimport torch.nn as nn\nfrom torch.nn import Module, Linear\n\nfrom models.layers import Positional"
},
{
"path": "models/model_led_initializer.py",
"chars": 2030,
"preview": "import torch\nimport torch.nn as nn\nfrom models.layers import MLP, social_transformer, st_encoder\n\nclass LEDInitializer(n"
},
{
"path": "requirements.txt",
"chars": 1511,
"preview": "absl-py==1.4.0\naiohttp==3.8.4\naiosignal==1.3.1\nantlr4-python3-runtime==4.8\nasync-timeout==4.0.2\nasynctest==0.13.0\nattrs="
},
{
"path": "trainer/train_led_trajectory_augment_input.py",
"chars": 16098,
"preview": "\nimport os\nimport time\nimport torch\nimport random\nimport numpy as np\nimport torch.nn as nn\n\nfrom utils.config import Con"
},
{
"path": "utils/config.py",
"chars": 1981,
"preview": "import yaml\nimport os\nimport os.path as osp\nimport glob\nimport numpy as np\nfrom easydict import EasyDict\nfrom utils.util"
},
{
"path": "utils/utils.py",
"chars": 10894,
"preview": "\"\"\"\nCode borrowed from Xinshuo_PyToolbox: https://github.com/xinshuoweng/Xinshuo_PyToolbox\n\"\"\"\n\nimport os\nimport shutil\n"
},
{
"path": "visualization/draw_mean_variance.ipynb",
"chars": 340309,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\":"
}
]
// ... and 7 more files (download for full content)
About this extraction
This page contains the full source code of the MediaBrain-SJTU/LED GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 20 files (382.4 KB), approximately 242.0k tokens, and a symbol index with 88 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.