From 8d228ab22ae8193611e6cfa79c9b0da6f430b1b7 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Tue, 26 Apr 2022 06:47:46 -0300 Subject: [PATCH 01/37] Trick to Upsampling to High sampling rates using VITS model (#1456) * Add upsample VITS support * Fix the bug in inference * Fix lint checks * Add RMS based norm in save_wav method * Style fix * Add the period for VITS multi-period discriminator in model_args * Bug fix in speaker encoder load in inference time * Add unit tests * Remove useless detach_z_vocoder parameter * Add docs for VITS upsampling * Fix the docs * Rename TTS_part_sample_rate to encoder_sample_rate * Add upsampling_init and upsampling_z methods * Add asserts for encoder_sample_rate part * Move upsampling tests to test_vits.py --- TTS/server/server.py | 5 +- TTS/tts/layers/vits/discriminator.py | 4 +- TTS/tts/models/vits.py | 120 ++++++++++++++++++++++++--- TTS/utils/audio.py | 6 +- TTS/utils/synthesizer.py | 1 + tests/tts_tests/test_vits.py | 70 ++++++++++++++++ 6 files changed, 188 insertions(+), 18 deletions(-) diff --git a/TTS/server/server.py b/TTS/server/server.py index fd53e76d..89fce493 100644 --- a/TTS/server/server.py +++ b/TTS/server/server.py @@ -111,7 +111,10 @@ synthesizer = Synthesizer( use_cuda=args.use_cuda, ) -use_multi_speaker = hasattr(synthesizer.tts_model, "num_speakers") and synthesizer.tts_model.num_speakers > 1 +use_multi_speaker = hasattr(synthesizer.tts_model, "num_speakers") and ( + synthesizer.tts_model.num_speakers > 1 or synthesizer.tts_speakers_file is not None +) + speaker_manager = getattr(synthesizer.tts_model, "speaker_manager", None) # TODO: set this from SpeakerManager use_gst = synthesizer.tts_config.get("use_gst", False) diff --git a/TTS/tts/layers/vits/discriminator.py b/TTS/tts/layers/vits/discriminator.py index e9d54713..148f283c 100644 --- a/TTS/tts/layers/vits/discriminator.py +++ b/TTS/tts/layers/vits/discriminator.py @@ -58,10 +58,8 @@ class VitsDiscriminator(nn.Module): use_spectral_norm (bool): if `True` swith to spectral norm instead of weight norm. """ - def __init__(self, use_spectral_norm=False): + def __init__(self, periods=(2, 3, 5, 7, 11), use_spectral_norm=False): super().__init__() - periods = [2, 3, 5, 7, 11] - self.nets = nn.ModuleList() self.nets.append(DiscriminatorS(use_spectral_norm=use_spectral_norm)) self.nets.extend([DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods]) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 943b9eae..7807efc1 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -362,6 +362,9 @@ class VitsArgs(Coqpit): upsample_kernel_sizes_decoder (List[int]): Kernel sizes for each upsampling layer of the decoder network. Defaults to `[16, 16, 4, 4]`. + periods_multi_period_discriminator (List[int]): + Periods values for Vits Multi-Period Discriminator. Defaults to `[2, 3, 5, 7, 11]`. + use_sdp (bool): Use Stochastic Duration Predictor. Defaults to True. @@ -451,6 +454,18 @@ class VitsArgs(Coqpit): freeze_waveform_decoder (bool): Freeze the waveform decoder weigths during training. Defaults to False. + + encoder_sample_rate (int): + If not None this sample rate will be used for training the Posterior Encoder, + flow, text_encoder and duration predictor. The decoder part (vocoder) will be + trained with the `config.audio.sample_rate`. Defaults to None. + + interpolate_z (bool): + If `encoder_sample_rate` not None and this parameter True the nearest interpolation + will be used to upsampling the latent variable z with the sampling rate `encoder_sample_rate` + to the `config.audio.sample_rate`. If it is False you will need to add extra + `upsample_rates_decoder` to match the shape. Defaults to True. + """ num_chars: int = 100 @@ -475,6 +490,7 @@ class VitsArgs(Coqpit): upsample_rates_decoder: List[int] = field(default_factory=lambda: [8, 8, 2, 2]) upsample_initial_channel_decoder: int = 512 upsample_kernel_sizes_decoder: List[int] = field(default_factory=lambda: [16, 16, 4, 4]) + periods_multi_period_discriminator: List[int] = field(default_factory=lambda: [2, 3, 5, 7, 11]) use_sdp: bool = True noise_scale: float = 1.0 inference_noise_scale: float = 0.667 @@ -505,6 +521,8 @@ class VitsArgs(Coqpit): freeze_PE: bool = False freeze_flow_decoder: bool = False freeze_waveform_decoder: bool = False + encoder_sample_rate: int = None + interpolate_z: bool = True class Vits(BaseTTS): @@ -548,6 +566,7 @@ class Vits(BaseTTS): self.init_multispeaker(config) self.init_multilingual(config) + self.init_upsampling() self.length_scale = self.args.length_scale self.noise_scale = self.args.noise_scale @@ -625,7 +644,10 @@ class Vits(BaseTTS): ) if self.args.init_discriminator: - self.disc = VitsDiscriminator(use_spectral_norm=self.args.use_spectral_norm_disriminator) + self.disc = VitsDiscriminator( + periods=self.args.periods_multi_period_discriminator, + use_spectral_norm=self.args.use_spectral_norm_disriminator, + ) def init_multispeaker(self, config: Coqpit): """Initialize multi-speaker modules of a model. A model can be trained either with a speaker embedding layer @@ -707,6 +729,16 @@ class Vits(BaseTTS): else: self.embedded_language_dim = 0 + def init_upsampling(self): + """ + Initialize upsampling modules of a model. + """ + if self.args.encoder_sample_rate: + self.interpolate_factor = self.config.audio["sample_rate"] / self.args.encoder_sample_rate + self.audio_resampler = torchaudio.transforms.Resample( + orig_freq=self.config.audio["sample_rate"], new_freq=self.args.encoder_sample_rate + ) # pylint: disable=W0201 + def get_aux_input(self, aux_input: Dict): sid, g, lid = self._set_cond_input(aux_input) return {"speaker_ids": sid, "style_wav": None, "d_vectors": g, "language_ids": lid} @@ -804,6 +836,25 @@ class Vits(BaseTTS): outputs["loss_duration"] = loss_duration return outputs, attn + def upsampling_z(self, z, slice_ids=None, y_lengths=None, y_mask=None): + spec_segment_size = self.spec_segment_size + if self.args.encoder_sample_rate: + # recompute the slices and spec_segment_size if needed + slice_ids = slice_ids * int(self.interpolate_factor) if slice_ids is not None else slice_ids + spec_segment_size = spec_segment_size * int(self.interpolate_factor) + # interpolate z if needed + if self.args.interpolate_z: + z = torch.nn.functional.interpolate( + z.unsqueeze(0), scale_factor=[1, self.interpolate_factor], mode="nearest" + ).squeeze(0) + # recompute the mask if needed + if y_lengths is not None and y_mask is not None: + y_mask = ( + sequence_mask(y_lengths * self.interpolate_factor, None).to(y_mask.dtype).unsqueeze(1) + ) # [B, 1, T_dec_resampled] + + return z, spec_segment_size, slice_ids, y_mask + def forward( # pylint: disable=dangerous-default-value self, x: torch.tensor, @@ -878,12 +929,16 @@ class Vits(BaseTTS): # select a random feature segment for the waveform decoder z_slice, slice_ids = rand_segments(z, y_lengths, self.spec_segment_size, let_short_samples=True, pad_short=True) + + # interpolate z if needed + z_slice, spec_segment_size, slice_ids, _ = self.upsampling_z(z_slice, slice_ids=slice_ids) + o = self.waveform_decoder(z_slice, g=g) wav_seg = segment( waveform, slice_ids * self.config.audio.hop_length, - self.args.spec_segment_size * self.config.audio.hop_length, + spec_segment_size * self.config.audio.hop_length, pad_short=True, ) @@ -989,6 +1044,10 @@ class Vits(BaseTTS): z_p = m_p + torch.randn_like(m_p) * torch.exp(logs_p) * self.inference_noise_scale z = self.flow(z_p, y_mask, g=g, reverse=True) + + # upsampling if needed + z, _, _, y_mask = self.upsampling_z(z, y_lengths=y_lengths, y_mask=y_mask) + o = self.waveform_decoder((z * y_mask)[:, :, : self.max_inference_len], g=g) outputs = {"model_outputs": o, "alignments": attn.squeeze(1), "z": z, "z_p": z_p, "m_p": m_p, "logs_p": logs_p} @@ -1064,13 +1123,12 @@ class Vits(BaseTTS): self._freeze_layers() - mel_lens = batch["mel_lens"] + spec_lens = batch["spec_lens"] if optimizer_idx == 0: tokens = batch["tokens"] token_lenghts = batch["token_lens"] spec = batch["spec"] - spec_lens = batch["spec_lens"] d_vectors = batch["d_vectors"] speaker_ids = batch["speaker_ids"] @@ -1108,8 +1166,14 @@ class Vits(BaseTTS): # compute melspec segment with autocast(enabled=False): + + if self.args.encoder_sample_rate: + spec_segment_size = self.spec_segment_size * int(self.interpolate_factor) + else: + spec_segment_size = self.spec_segment_size + mel_slice = segment( - mel.float(), self.model_outputs_cache["slice_ids"], self.spec_segment_size, pad_short=True + mel.float(), self.model_outputs_cache["slice_ids"], spec_segment_size, pad_short=True ) mel_slice_hat = wav_to_mel( y=self.model_outputs_cache["model_outputs"].float(), @@ -1137,7 +1201,7 @@ class Vits(BaseTTS): logs_q=self.model_outputs_cache["logs_q"].float(), m_p=self.model_outputs_cache["m_p"].float(), logs_p=self.model_outputs_cache["logs_p"].float(), - z_len=mel_lens, + z_len=spec_lens, scores_disc_fake=scores_disc_fake, feats_disc_fake=feats_disc_fake, feats_disc_real=feats_disc_real, @@ -1318,22 +1382,46 @@ class Vits(BaseTTS): """Compute spectrograms on the device.""" ac = self.config.audio + if self.args.encoder_sample_rate: + wav = self.audio_resampler(batch["waveform"]) + else: + wav = batch["waveform"] + # compute spectrograms - batch["spec"] = wav_to_spec(batch["waveform"], ac.fft_size, ac.hop_length, ac.win_length, center=False) + batch["spec"] = wav_to_spec(wav, ac.fft_size, ac.hop_length, ac.win_length, center=False) + + if self.args.encoder_sample_rate: + # recompute spec with high sampling rate to the loss + spec_mel = wav_to_spec(batch["waveform"], ac.fft_size, ac.hop_length, ac.win_length, center=False) + # remove extra stft frame + spec_mel = spec_mel[:, :, : int(batch["spec"].size(2) * self.interpolate_factor)] + else: + spec_mel = batch["spec"] + batch["mel"] = spec_to_mel( - spec=batch["spec"], + spec=spec_mel, n_fft=ac.fft_size, num_mels=ac.num_mels, sample_rate=ac.sample_rate, fmin=ac.mel_fmin, fmax=ac.mel_fmax, ) - assert batch["spec"].shape[2] == batch["mel"].shape[2], f"{batch['spec'].shape[2]}, {batch['mel'].shape[2]}" + + if self.args.encoder_sample_rate: + assert batch["spec"].shape[2] == int( + batch["mel"].shape[2] / self.interpolate_factor + ), f"{batch['spec'].shape[2]}, {batch['mel'].shape[2]}" + else: + assert batch["spec"].shape[2] == batch["mel"].shape[2], f"{batch['spec'].shape[2]}, {batch['mel'].shape[2]}" # compute spectrogram frame lengths batch["spec_lens"] = (batch["spec"].shape[2] * batch["waveform_rel_lens"]).int() batch["mel_lens"] = (batch["mel"].shape[2] * batch["waveform_rel_lens"]).int() - assert (batch["spec_lens"] - batch["mel_lens"]).sum() == 0 + + if self.args.encoder_sample_rate: + assert (batch["spec_lens"] - (batch["mel_lens"] / self.interpolate_factor).int()).sum() == 0 + else: + assert (batch["spec_lens"] - batch["mel_lens"]).sum() == 0 # zero the padding frames batch["spec"] = batch["spec"] * sequence_mask(batch["spec_lens"]).unsqueeze(1) @@ -1449,6 +1537,11 @@ class Vits(BaseTTS): # TODO: consider baking the speaker encoder into the model and call it from there. # as it is probably easier for model distribution. state["model"] = {k: v for k, v in state["model"].items() if "speaker_encoder" not in k} + + if self.args.encoder_sample_rate is not None and eval: + # audio resampler is not used in inference time + self.audio_resampler = None + # handle fine-tuning from a checkpoint with additional speakers if hasattr(self, "emb_g") and state["model"]["emb_g.weight"].shape != self.emb_g.weight.shape: num_new_speakers = self.emb_g.weight.shape[0] - state["model"]["emb_g.weight"].shape[0] @@ -1476,9 +1569,10 @@ class Vits(BaseTTS): from TTS.utils.audio import AudioProcessor upsample_rate = torch.prod(torch.as_tensor(config.model_args.upsample_rates_decoder)).item() - assert ( - upsample_rate == config.audio.hop_length - ), f" [!] Product of upsample rates must be equal to the hop length - {upsample_rate} vs {config.audio.hop_length}" + if not config.model_args.encoder_sample_rate: + assert ( + upsample_rate == config.audio.hop_length + ), f" [!] Product of upsample rates must be equal to the hop length - {upsample_rate} vs {config.audio.hop_length}" ap = AudioProcessor.init_from_config(config, verbose=verbose) tokenizer, new_config = TTSTokenizer.init_from_config(config) diff --git a/TTS/utils/audio.py b/TTS/utils/audio.py index 4d435162..fc9d1942 100644 --- a/TTS/utils/audio.py +++ b/TTS/utils/audio.py @@ -859,7 +859,11 @@ class AudioProcessor(object): path (str): Path to a output file. sr (int, optional): Sampling rate used for saving to the file. Defaults to None. """ - wav_norm = wav * (32767 / max(0.01, np.max(np.abs(wav)))) + if self.do_rms_norm: + wav_norm = self.rms_volume_norm(wav, self.db_level) * 32767 + else: + wav_norm = wav * (32767 / max(0.01, np.max(np.abs(wav)))) + scipy.io.wavfile.write(path, sr if sr else self.sample_rate, wav_norm.astype(np.int16)) def get_duration(self, filename: str) -> float: diff --git a/TTS/utils/synthesizer.py b/TTS/utils/synthesizer.py index 1a49f0b0..05161a66 100644 --- a/TTS/utils/synthesizer.py +++ b/TTS/utils/synthesizer.py @@ -122,6 +122,7 @@ class Synthesizer(object): self.tts_model.cuda() if self.encoder_checkpoint and hasattr(self.tts_model, "speaker_manager"): + self.tts_model.speaker_manager.use_cuda = use_cuda self.tts_model.speaker_manager.init_encoder(self.encoder_checkpoint, self.encoder_config) def _set_speaker_encoder_paths_from_tts_config(self): diff --git a/tests/tts_tests/test_vits.py b/tests/tts_tests/test_vits.py index de683c81..5694fe4d 100644 --- a/tests/tts_tests/test_vits.py +++ b/tests/tts_tests/test_vits.py @@ -420,6 +420,76 @@ class TestVits(unittest.TestCase): # check parameter changes self._check_parameter_changes(model, model_ref) + def test_train_step_upsampling(self): + # setup the model + with torch.autograd.set_detect_anomaly(True): + model_args = VitsArgs( + num_chars=32, + spec_segment_size=10, + encoder_sample_rate=11025, + interpolate_z=False, + upsample_rates_decoder=[8, 8, 4, 2], + ) + config = VitsConfig(model_args=model_args) + model = Vits(config).to(device) + model.train() + # model to train + optimizers = model.get_optimizer() + criterions = model.get_criterion() + criterions = [criterions[0].to(device), criterions[1].to(device)] + # reference model to compare model weights + model_ref = Vits(config).to(device) + # # pass the state to ref model + model_ref.load_state_dict(copy.deepcopy(model.state_dict())) + count = 0 + for param, param_ref in zip(model.parameters(), model_ref.parameters()): + assert (param - param_ref).sum() == 0, param + count = count + 1 + for _ in range(5): + batch = self._create_batch(config, 2) + for idx in [0, 1]: + outputs, loss_dict = model.train_step(batch, criterions, idx) + self.assertFalse(not outputs) + self.assertFalse(not loss_dict) + loss_dict["loss"].backward() + optimizers[idx].step() + optimizers[idx].zero_grad() + + # check parameter changes + self._check_parameter_changes(model, model_ref) + + def test_train_step_upsampling_interpolation(self): + # setup the model + with torch.autograd.set_detect_anomaly(True): + model_args = VitsArgs(num_chars=32, spec_segment_size=10, encoder_sample_rate=11025, interpolate_z=True) + config = VitsConfig(model_args=model_args) + model = Vits(config).to(device) + model.train() + # model to train + optimizers = model.get_optimizer() + criterions = model.get_criterion() + criterions = [criterions[0].to(device), criterions[1].to(device)] + # reference model to compare model weights + model_ref = Vits(config).to(device) + # # pass the state to ref model + model_ref.load_state_dict(copy.deepcopy(model.state_dict())) + count = 0 + for param, param_ref in zip(model.parameters(), model_ref.parameters()): + assert (param - param_ref).sum() == 0, param + count = count + 1 + for _ in range(5): + batch = self._create_batch(config, 2) + for idx in [0, 1]: + outputs, loss_dict = model.train_step(batch, criterions, idx) + self.assertFalse(not outputs) + self.assertFalse(not loss_dict) + loss_dict["loss"].backward() + optimizers[idx].step() + optimizers[idx].zero_grad() + + # check parameter changes + self._check_parameter_changes(model, model_ref) + def test_train_eval_log(self): batch_size = 2 config = VitsConfig(model_args=VitsArgs(num_chars=32, spec_segment_size=10)) From a41e860a661bda590fed5a70085225978b4a5e70 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Tue, 26 Apr 2022 12:39:36 -0300 Subject: [PATCH 02/37] Update Coqpit requirement (#1539) --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 50c0d2ac..098f5eee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,8 @@ tensorboardX pyworld # coqui stack trainer -coqpit # config management +# config management +coqpit>=0.0.16 # chinese g2p deps jieba pypinyin From 6233f4fcd739958e6f7ed25a99ba2dbc6fd821e2 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Tue, 26 Apr 2022 13:54:09 -0300 Subject: [PATCH 03/37] Bug fix in compute embedding without eval partition --- TTS/bin/compute_embeddings.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/TTS/bin/compute_embeddings.py b/TTS/bin/compute_embeddings.py index b62d603a..c58123df 100644 --- a/TTS/bin/compute_embeddings.py +++ b/TTS/bin/compute_embeddings.py @@ -32,15 +32,19 @@ parser.add_argument("output_path", type=str, help="path for output speakers.json parser.add_argument( "--old_file", type=str, help="Previous speakers.json file, only compute for new audios.", default=None ) -parser.add_argument("--use_cuda", type=bool, help="flag to set cuda.", default=True) -parser.add_argument("--eval", type=bool, help="compute eval.", default=True) +parser.add_argument("--use_cuda", type=bool, help="flag to set cuda. Default False", default=False) +parser.add_argument("--no_eval", type=bool, help="Do not compute eval?. Default False", default=False) args = parser.parse_args() c_dataset = load_config(args.config_dataset_path) -meta_data_train, meta_data_eval = load_tts_samples(c_dataset.datasets, eval_split=args.eval) -wav_files = meta_data_train + meta_data_eval +meta_data_train, meta_data_eval = load_tts_samples(c_dataset.datasets, eval_split=not args.no_eval) + +if meta_data_eval is None: + wav_files = meta_data_train +else: + wav_files = meta_data_train + meta_data_eval encoder_manager = SpeakerManager( encoder_model_path=args.model_path, From fbdf76b2fc9c91baefca2d3b1d8a3cd8e2cdd85d Mon Sep 17 00:00:00 2001 From: WeberJulian Date: Wed, 27 Apr 2022 10:42:26 +0200 Subject: [PATCH 04/37] returns y_mask in VITS inference (#1540) * returns y_mask * make style --- TTS/tts/models/vits.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 7807efc1..613e4eae 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -1050,7 +1050,15 @@ class Vits(BaseTTS): o = self.waveform_decoder((z * y_mask)[:, :, : self.max_inference_len], g=g) - outputs = {"model_outputs": o, "alignments": attn.squeeze(1), "z": z, "z_p": z_p, "m_p": m_p, "logs_p": logs_p} + outputs = { + "model_outputs": o, + "alignments": attn.squeeze(1), + "z": z, + "z_p": z_p, + "m_p": m_p, + "logs_p": logs_p, + "y_mask": y_mask, + } return outputs @torch.no_grad() From 60034674f9696d79e1683b958b3f1fdb43412b1c Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Thu, 28 Apr 2022 15:40:16 -0300 Subject: [PATCH 05/37] Remove audio padding before mel spec extraction --- TTS/vocoder/datasets/gan_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTS/vocoder/datasets/gan_dataset.py b/TTS/vocoder/datasets/gan_dataset.py index 08fdb0a3..a782067e 100644 --- a/TTS/vocoder/datasets/gan_dataset.py +++ b/TTS/vocoder/datasets/gan_dataset.py @@ -115,8 +115,8 @@ class GANDataset(Dataset): audio, mel = self.cache[idx] else: audio = self.ap.load_wav(wavpath) - audio, _ = self._pad_short_samples(audio) mel = self.ap.melspectrogram(audio) + audio, mel = self._pad_short_samples(audio, mel) else: # load precomputed features From a0a9279e4b8c306875b6437f853bdcc31ee5f1cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Sat, 7 May 2022 13:28:22 +0200 Subject: [PATCH 06/37] Fix GAN optimizer order commit 212d330929c22d0cd970be2023770dc1e39449ab Author: Edresson Casanova Date: Fri Apr 29 16:29:44 2022 -0300 Fix unit test commit 44456b0483bf42b1337a8e408ac17af38b26b1fa Author: Edresson Casanova Date: Fri Apr 29 07:28:39 2022 -0300 Fix style commit d545beadb932758eb7d1c632778fe317d467a6a4 Author: Edresson Casanova Date: Thu Apr 28 17:08:04 2022 -0300 Change order of HIFI-GAN optimizers to be equal than the original repository commit 657c5442e5339581e5c09168f5212112a342d97a Author: Edresson Casanova Date: Thu Apr 28 15:40:16 2022 -0300 Remove audio padding before mel spec extraction commit 76b274e6901495ffe62ec745fd8ca9fd010f4857 Merge: 379ccd7b 6233f4fc Author: Edresson Casanova Date: Wed Apr 27 07:28:48 2022 -0300 Merge pull request #1541 from coqui-ai/comp_emb_fix Bug fix in compute embedding without eval partition commit 379ccd7ba6b7e7b550e7d6acf55760c6d0623ba8 Author: WeberJulian Date: Wed Apr 27 10:42:26 2022 +0200 returns y_mask in VITS inference (#1540) * returns y_mask * make style --- TTS/vocoder/models/gan.py | 85 +++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/TTS/vocoder/models/gan.py b/TTS/vocoder/models/gan.py index 3b8a3fbe..ed5b26dd 100644 --- a/TTS/vocoder/models/gan.py +++ b/TTS/vocoder/models/gan.py @@ -90,50 +90,26 @@ class GAN(BaseVocoder): raise ValueError(" [!] Unexpected `optimizer_idx`.") if optimizer_idx == 0: - # GENERATOR + # DISCRIMINATOR optimization + # generator pass y_hat = self.model_g(x)[:, :, : y.size(2)] - self.y_hat_g = y_hat # save for discriminator - y_hat_sub = None - y_sub = None + + # cache for generator loss + # pylint: disable=W0201 + self.y_hat_g = y_hat + self.y_hat_sub = None + self.y_sub_g = None # PQMF formatting if y_hat.shape[1] > 1: - y_hat_sub = y_hat + self.y_hat_sub = y_hat y_hat = self.model_g.pqmf_synthesis(y_hat) - self.y_hat_g = y_hat # save for discriminator - y_sub = self.model_g.pqmf_analysis(y) + self.y_hat_g = y_hat # save for generator loss + self.y_sub_g = self.model_g.pqmf_analysis(y) scores_fake, feats_fake, feats_real = None, None, None - if self.train_disc: - if len(signature(self.model_d.forward).parameters) == 2: - D_out_fake = self.model_d(y_hat, x) - else: - D_out_fake = self.model_d(y_hat) - D_out_real = None - - if self.config.use_feat_match_loss: - with torch.no_grad(): - D_out_real = self.model_d(y) - - # format D outputs - if isinstance(D_out_fake, tuple): - scores_fake, feats_fake = D_out_fake - if D_out_real is None: - feats_real = None - else: - _, feats_real = D_out_real - else: - scores_fake = D_out_fake - feats_fake, feats_real = None, None - - # compute losses - loss_dict = criterion[optimizer_idx](y_hat, y, scores_fake, feats_fake, feats_real, y_hat_sub, y_sub) - outputs = {"model_outputs": y_hat} - - if optimizer_idx == 1: - # DISCRIMINATOR if self.train_disc: # use different samples for G and D trainings if self.config.diff_samples_for_G_and_D: @@ -177,6 +153,36 @@ class GAN(BaseVocoder): loss_dict = criterion[optimizer_idx](scores_fake, scores_real) outputs = {"model_outputs": y_hat} + if optimizer_idx == 1: + # GENERATOR loss + scores_fake, feats_fake, feats_real = None, None, None + if self.train_disc: + if len(signature(self.model_d.forward).parameters) == 2: + D_out_fake = self.model_d(self.y_hat_g, x) + else: + D_out_fake = self.model_d(self.y_hat_g) + D_out_real = None + + if self.config.use_feat_match_loss: + with torch.no_grad(): + D_out_real = self.model_d(y) + + # format D outputs + if isinstance(D_out_fake, tuple): + scores_fake, feats_fake = D_out_fake + if D_out_real is None: + feats_real = None + else: + _, feats_real = D_out_real + else: + scores_fake = D_out_fake + feats_fake, feats_real = None, None + + # compute losses + loss_dict = criterion[optimizer_idx]( + self.y_hat_g, y, scores_fake, feats_fake, feats_real, self.y_hat_sub, self.y_sub_g + ) + outputs = {"model_outputs": self.y_hat_g} return outputs, loss_dict @staticmethod @@ -210,6 +216,7 @@ class GAN(BaseVocoder): @torch.no_grad() def eval_step(self, batch: Dict, criterion: nn.Module, optimizer_idx: int) -> Tuple[Dict, Dict]: """Call `train_step()` with `no_grad()`""" + self.train_disc = True # Avoid a bug in the Training with the missing discriminator loss return self.train_step(batch, criterion, optimizer_idx) def eval_log( @@ -266,7 +273,7 @@ class GAN(BaseVocoder): optimizer2 = get_optimizer( self.config.optimizer, self.config.optimizer_params, self.config.lr_disc, self.model_d ) - return [optimizer1, optimizer2] + return [optimizer2, optimizer1] def get_lr(self) -> List: """Set the initial learning rates for each optimizer. @@ -274,7 +281,7 @@ class GAN(BaseVocoder): Returns: List: learning rates for each optimizer. """ - return [self.config.lr_gen, self.config.lr_disc] + return [self.config.lr_disc, self.config.lr_gen] def get_scheduler(self, optimizer) -> List: """Set the schedulers for each optimizer. @@ -287,7 +294,7 @@ class GAN(BaseVocoder): """ scheduler1 = get_scheduler(self.config.lr_scheduler_gen, self.config.lr_scheduler_gen_params, optimizer[0]) scheduler2 = get_scheduler(self.config.lr_scheduler_disc, self.config.lr_scheduler_disc_params, optimizer[1]) - return [scheduler1, scheduler2] + return [scheduler2, scheduler1] @staticmethod def format_batch(batch: List) -> Dict: @@ -359,7 +366,7 @@ class GAN(BaseVocoder): def get_criterion(self): """Return criterions for the optimizers""" - return [GeneratorLoss(self.config), DiscriminatorLoss(self.config)] + return [DiscriminatorLoss(self.config), GeneratorLoss(self.config)] @staticmethod def init_from_config(config: Coqpit, verbose=True) -> "GAN": From a34076af3587ddc2de1c82a73230f6bdfb859a49 Mon Sep 17 00:00:00 2001 From: Arvind Suresh Date: Tue, 3 May 2022 08:01:10 -0400 Subject: [PATCH 07/37] Update documentation for multi-gpu training --- docs/source/faq.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/source/faq.md b/docs/source/faq.md index 3de6663d..2157082c 100644 --- a/docs/source/faq.md +++ b/docs/source/faq.md @@ -59,8 +59,7 @@ We tried to collect common issues and questions we receive about ๐ŸธTTS. It is 6. Train your model. - SingleGPU training: ```CUDA_VISIBLE_DEVICES="0" python train_tts.py --config_path config.json``` - - MultiGPU training: ```CUDA_VISIBLE_DEVICES="0,1,2" python distribute.py --script train_tts.py --config_path config.json``` - - This command uses all the GPUs given in ```CUDA_VISIBLE_DEVICES```. If you don't specify, it uses all the GPUs available. + - MultiGPU training: ```python3 -m trainer.distribute --gpus "0,1" --script TTS/bin/train_tts.py --config_path config.json``` **Note:** You can also train your model using pure ๐Ÿ python. Check ```{eval-rst} :ref: 'tutorial_for_nervous_beginners'```. @@ -111,4 +110,4 @@ The best approach is to pick a set of promising models and run a Mean-Opinion-Sc ## My Tacotron model does not stop - I see "Decoder stopped with 'max_decoder_steps" - Stopnet does not work. - In general, all of the above relates to the `stopnet`. It is the part of the model telling the `decoder` when to stop. - In general, a poor `stopnet` relates to something else that is broken in your model or dataset. Especially the attention module. -- One common reason is the silent parts in the audio clips at the beginning and the ending. Check ```trim_db``` value in the config. You can find a better value for your dataset by using ```CheckSpectrogram``` notebook. If this value is too small, too much of the audio will be trimmed. If too big, then too much silence will remain. Both will curtail the `stopnet` performance. \ No newline at end of file +- One common reason is the silent parts in the audio clips at the beginning and the ending. Check ```trim_db``` value in the config. You can find a better value for your dataset by using ```CheckSpectrogram``` notebook. If this value is too small, too much of the audio will be trimmed. If too big, then too much silence will remain. Both will curtail the `stopnet` performance. From fa887ef5f9be092c57cf31e3e3ed97c191a11258 Mon Sep 17 00:00:00 2001 From: code-review-doctor <72647856+code-review-doctor@users.noreply.github.com> Date: Sat, 7 May 2022 12:33:40 +0100 Subject: [PATCH 08/37] Fix issue probably-meant-fstring found at https://codereview.doctor (#1532) --- TTS/tts/layers/tacotron/attentions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTS/tts/layers/tacotron/attentions.py b/TTS/tts/layers/tacotron/attentions.py index 8c30a00a..d8a90d72 100644 --- a/TTS/tts/layers/tacotron/attentions.py +++ b/TTS/tts/layers/tacotron/attentions.py @@ -484,4 +484,4 @@ def init_attn( beta=0.9, ) - raise RuntimeError(" [!] Given Attention Type '{attn_type}' is not exist.") + raise RuntimeError(f" [!] Given Attention Type '{attn_type}' is not exist.") From 3f03e3012c22e8f86a7e9c0b6d52ccde36d1b15e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Sat, 7 May 2022 13:40:34 +0200 Subject: [PATCH 09/37] Fix batch_group_size in VITS --- TTS/tts/models/vits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 613e4eae..3bcd59a1 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -1452,7 +1452,7 @@ class Vits(BaseTTS): # init dataloader dataset = VitsDataset( samples=samples, - # batch_group_size=0 if is_eval else config.batch_group_size * config.batch_size, + batch_group_size=0 if is_eval else config.batch_group_size * config.batch_size, min_text_len=config.min_text_len, max_text_len=config.max_text_len, min_audio_len=config.min_audio_len, From 5021a03de07dff3be6e89b57316984859aecbc5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Wed, 11 May 2022 11:29:36 +0200 Subject: [PATCH 10/37] Use torch.no_grad for VITS inference --- TTS/tts/models/vits.py | 1 + 1 file changed, 1 insertion(+) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 3bcd59a1..1c623f50 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -982,6 +982,7 @@ class Vits(BaseTTS): return aux_input["x_lengths"] return torch.tensor(x.shape[1:2]).to(x.device) + @torch.no_grad() def inference( self, x, aux_input={"x_lengths": None, "d_vectors": None, "speaker_ids": None, "language_ids": None} ): # pylint: disable=dangerous-default-value From c18bd21b3f4fdd4c9686fa124a3e289998a6445e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Wed, 11 May 2022 11:30:05 +0200 Subject: [PATCH 11/37] Return durations at VITS inference --- TTS/tts/models/vits.py | 1 + 1 file changed, 1 insertion(+) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 1c623f50..d0ee214f 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -1054,6 +1054,7 @@ class Vits(BaseTTS): outputs = { "model_outputs": o, "alignments": attn.squeeze(1), + "durations": w_ceil, "z": z, "z_p": z_p, "m_p": m_p, From 121e9ed6851d4d69b5e8f144dd2419d15b5cf8e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Wed, 11 May 2022 11:31:17 +0200 Subject: [PATCH 12/37] Pass use_cuda to init_encoder --- TTS/tts/utils/managers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TTS/tts/utils/managers.py b/TTS/tts/utils/managers.py index 85ed53cc..7c22ac88 100644 --- a/TTS/tts/utils/managers.py +++ b/TTS/tts/utils/managers.py @@ -216,17 +216,19 @@ class EmbeddingManager(BaseIDManager): def get_clips(self) -> List: return sorted(self.embeddings.keys()) - def init_encoder(self, model_path: str, config_path: str) -> None: + def init_encoder(self, model_path: str, config_path: str, use_cuda=False) -> None: """Initialize a speaker encoder model. Args: model_path (str): Model file path. config_path (str): Model config file path. + use_cuda (bool, optional): Use CUDA. Defaults to False. """ + self.use_cuda = use_cuda self.encoder_config = load_config(config_path) self.encoder = setup_encoder_model(self.encoder_config) self.encoder_criterion = self.encoder.load_checkpoint( - self.encoder_config, model_path, eval=True, use_cuda=self.use_cuda + self.encoder_config, model_path, eval=True, use_cuda=use_cuda ) self.encoder_ap = AudioProcessor(**self.encoder_config.audio) From c3f8c4d5ebc11236e17bfab222beb8458f374dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Wed, 11 May 2022 11:31:45 +0200 Subject: [PATCH 13/37] Return default SpeakerManager if no d_vector_file --- TTS/tts/utils/speakers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/TTS/tts/utils/speakers.py b/TTS/tts/utils/speakers.py index 284d0179..77b61a8d 100644 --- a/TTS/tts/utils/speakers.py +++ b/TTS/tts/utils/speakers.py @@ -108,6 +108,7 @@ class SpeakerManager(EmbeddingManager): ) if get_from_config_or_model_args_with_default(config, "use_d_vector_file", False): + speaker_manager = SpeakerManager() if get_from_config_or_model_args_with_default(config, "speakers_file", None): speaker_manager = SpeakerManager( d_vectors_file_path=get_from_config_or_model_args_with_default(config, "speaker_file", None) From 2fc38f67d2a8e45e4f9ea6fad2194dc5d8f3597f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Wed, 11 May 2022 11:32:27 +0200 Subject: [PATCH 14/37] Update SpeakerManager init in Synthesizer --- TTS/utils/synthesizer.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/TTS/utils/synthesizer.py b/TTS/utils/synthesizer.py index 05161a66..1f33b53e 100644 --- a/TTS/utils/synthesizer.py +++ b/TTS/utils/synthesizer.py @@ -97,10 +97,10 @@ class Synthesizer(object): """Load the TTS model. 1. Load the model config. - 2. Init the AudioProcessor. - 3. Init the model from the config. + 2. Init the model from the config. + 3. Load the model weights. 4. Move the model to the GPU if CUDA is enabled. - 5. Init the speaker manager for the model. + 5. Init the speaker manager in the model. Args: tts_checkpoint (str): path to the model checkpoint. @@ -122,8 +122,7 @@ class Synthesizer(object): self.tts_model.cuda() if self.encoder_checkpoint and hasattr(self.tts_model, "speaker_manager"): - self.tts_model.speaker_manager.use_cuda = use_cuda - self.tts_model.speaker_manager.init_encoder(self.encoder_checkpoint, self.encoder_config) + self.tts_model.speaker_manager.init_encoder(self.encoder_checkpoint, self.encoder_config, use_cuda) def _set_speaker_encoder_paths_from_tts_config(self): """Set the encoder paths from the tts model config for models with speaker encoders.""" From f9d91a55f2008f9c687ec058e32ed86c5eddb1fa Mon Sep 17 00:00:00 2001 From: Taras Sereda Date: Thu, 12 May 2022 14:10:35 +0300 Subject: [PATCH 15/37] Improve data_path resolvement (#1567) --- tests/data_tests/test_loader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/data_tests/test_loader.py b/tests/data_tests/test_loader.py index 0562fbf7..6790fd54 100644 --- a/tests/data_tests/test_loader.py +++ b/tests/data_tests/test_loader.py @@ -6,7 +6,7 @@ import numpy as np import torch from torch.utils.data import DataLoader -from tests import get_tests_output_path +from tests import get_tests_data_path, get_tests_output_path from TTS.tts.configs.shared_configs import BaseDatasetConfig, BaseTTSConfig from TTS.tts.datasets import TTSDataset, load_tts_samples from TTS.tts.utils.text.tokenizer import TTSTokenizer @@ -20,7 +20,7 @@ os.makedirs(OUTPATH, exist_ok=True) # create a dummy config for testing data loaders. c = BaseTTSConfig(text_cleaner="english_cleaners", num_loader_workers=0, batch_size=2, use_noise_augment=False) c.r = 5 -c.data_path = "tests/data/ljspeech/" +c.data_path = os.path.join(get_tests_data_path(), "ljspeech/") ok_ljspeech = os.path.exists(c.data_path) dataset_config = BaseDatasetConfig( From 182711043c4ab5aef71ca81e6426486e560ae200 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Sat, 7 May 2022 14:13:05 -0300 Subject: [PATCH 16/37] Fix the VITS upsampling asserts Fix style --- TTS/tts/models/vits.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 3bcd59a1..34e9fbcf 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -189,15 +189,20 @@ def wav_to_mel(y, n_fft, num_mels, sample_rate, hop_length, win_length, fmin, fm class VitsDataset(TTSDataset): - def __init__(self, *args, **kwargs): + def __init__(self, model_args, *args, **kwargs): super().__init__(*args, **kwargs) self.pad_id = self.tokenizer.characters.pad_id + self.model_args = model_args def __getitem__(self, idx): item = self.samples[idx] raw_text = item["text"] wav, _ = load_audio(item["audio_file"]) + if self.model_args.encoder_sample_rate is not None: + if wav.size(1) % self.model_args.encoder_sample_rate != 0: + wav = wav[:, : -int(wav.size(1) % self.model_args.encoder_sample_rate)] + wav_filename = os.path.basename(item["audio_file"]) token_ids = self.get_token_ids(idx, item["text"]) @@ -1401,8 +1406,11 @@ class Vits(BaseTTS): if self.args.encoder_sample_rate: # recompute spec with high sampling rate to the loss spec_mel = wav_to_spec(batch["waveform"], ac.fft_size, ac.hop_length, ac.win_length, center=False) - # remove extra stft frame - spec_mel = spec_mel[:, :, : int(batch["spec"].size(2) * self.interpolate_factor)] + # remove extra stft frames if needed + if spec_mel.size(2) > int(batch["spec"].size(2) * self.interpolate_factor): + spec_mel = spec_mel[:, :, : int(batch["spec"].size(2) * self.interpolate_factor)] + else: + batch["spec"] = batch["spec"][:, :, : int(spec_mel.size(2) / self.interpolate_factor)] else: spec_mel = batch["spec"] @@ -1451,6 +1459,7 @@ class Vits(BaseTTS): else: # init dataloader dataset = VitsDataset( + model_args=self.args, samples=samples, batch_group_size=0 if is_eval else config.batch_group_size * config.batch_size, min_text_len=config.min_text_len, From 175ca063884a145fbf2094b6a9dd339f7953b1f4 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Mon, 9 May 2022 14:28:37 -0300 Subject: [PATCH 17/37] Add reinit text encoder and duration predictor parameter (#1562) * Add reinit encoder and duration predictor option * Add .data to prevent any overlooked autograd hook --- TTS/tts/models/vits.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 34e9fbcf..af995bda 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -41,6 +41,23 @@ hann_window = {} mel_basis = {} +@torch.no_grad() +def weights_reset(m: nn.Module): + # check if the current module has reset_parameters and if it is reset the weight + reset_parameters = getattr(m, "reset_parameters", None) + if callable(reset_parameters): + m.reset_parameters() + + +def get_module_weights_sum(mdl: nn.Module): + dict_sums = {} + for name, w in mdl.named_parameters(): + if "weight" in name: + value = w.data.sum().item() + dict_sums[name] = value + return dict_sums + + def load_audio(file_path): """Load the audio file normalized in [-1, 1] @@ -528,6 +545,8 @@ class VitsArgs(Coqpit): freeze_waveform_decoder: bool = False encoder_sample_rate: int = None interpolate_z: bool = True + reinit_DP: bool = False + reinit_text_encoder: bool = False class Vits(BaseTTS): @@ -744,6 +763,28 @@ class Vits(BaseTTS): orig_freq=self.config.audio["sample_rate"], new_freq=self.args.encoder_sample_rate ) # pylint: disable=W0201 + def on_init_end(self, trainer): # pylint: disable=W0613 + """Reinit layes if needed""" + if self.args.reinit_DP: + before_dict = get_module_weights_sum(self.duration_predictor) + # Applies weights_reset recursively to every submodule of the duration predictor + self.duration_predictor.apply(fn=weights_reset) + after_dict = get_module_weights_sum(self.duration_predictor) + for key, value in after_dict.items(): + if value == before_dict[key]: + raise RuntimeError(" [!] The weights of Duration Predictor was not reinit check it !") + print(" > Duration Predictor was reinit.") + + if self.args.reinit_text_encoder: + before_dict = get_module_weights_sum(self.text_encoder) + # Applies weights_reset recursively to every submodule of the duration predictor + self.text_encoder.apply(fn=weights_reset) + after_dict = get_module_weights_sum(self.text_encoder) + for key, value in after_dict.items(): + if value == before_dict[key]: + raise RuntimeError(" [!] The weights of Text Encoder was not reinit check it !") + print(" > Text Encoder was reinit.") + def get_aux_input(self, aux_input: Dict): sid, g, lid = self._set_cond_input(aux_input) return {"speaker_ids": sid, "style_wav": None, "d_vectors": g, "language_ids": lid} From a97eed696a1974e26b8881f9b3abfd103255c4b3 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Thu, 12 May 2022 10:15:18 -0300 Subject: [PATCH 18/37] Fix the bug in eSpeak wrapper for eSpeak version 1.48.15 (#1560) --- .../utils/text/phonemizers/espeak_wrapper.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/TTS/tts/utils/text/phonemizers/espeak_wrapper.py b/TTS/tts/utils/text/phonemizers/espeak_wrapper.py index 442dcef2..024f79c6 100644 --- a/TTS/tts/utils/text/phonemizers/espeak_wrapper.py +++ b/TTS/tts/utils/text/phonemizers/espeak_wrapper.py @@ -107,15 +107,6 @@ class ESpeak(BasePhonemizer): if backend not in ["espeak", "espeak-ng"]: raise Exception("Unknown backend: %s" % backend) self._ESPEAK_LIB = backend - # skip first two characters of the retuned text - # "_ p_ษน_หˆaษช_ษš t_ษ™ n_oสŠ_v_หˆษ›_m_b_ษš t_w_หˆษ›_n_t_i t_หˆuห\n" - # ^^ - self.num_skip_chars = 2 - if backend == "espeak-ng": - # skip the first character of the retuned text - # "_p_ษน_หˆaษช_ษš t_ษ™ n_oสŠ_v_หˆษ›_m_b_ษš t_w_หˆษ›_n_t_i t_หˆuห\n" - # ^ - self.num_skip_chars = 1 def auto_set_espeak_lib(self) -> None: if is_tool("espeak-ng"): @@ -163,7 +154,16 @@ class ESpeak(BasePhonemizer): phonemes = "" for line in _espeak_exe(self._ESPEAK_LIB, args, sync=True): logging.debug("line: %s", repr(line)) - phonemes += line.decode("utf8").strip()[self.num_skip_chars :] # skip initial redundant characters + ph_decoded = line.decode("utf8").strip() + # espeak need to skip first two characters of the retuned text: + # version 1.48.03: "_ p_ษน_หˆaษช_ษš t_ษ™ n_oสŠ_v_หˆษ›_m_b_ษš t_w_หˆษ›_n_t_i t_หˆuห\n" + # version 1.48.15: " p_ษน_หˆaษช_ษš t_ษ™ n_oสŠ_v_หˆษ›_m_b_ษš t_w_หˆษ›_n_t_i t_หˆuห\n" + # espeak-ng need to skip the first character of the retuned text: + # "_p_ษน_หˆaษช_ษš t_ษ™ n_oสŠ_v_หˆษ›_m_b_ษš t_w_หˆษ›_n_t_i t_หˆuห\n" + + # dealing with the conditions descrived above + ph_decoded = ph_decoded[:1].replace("_", "") + ph_decoded[1:] + phonemes += ph_decoded.strip() return phonemes.replace("_", separator) def _phonemize(self, text, separator=None): From 4857967063924138d5d358ae42b223ee7700d57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Thu, 12 May 2022 15:50:25 +0200 Subject: [PATCH 19/37] =?UTF-8?q?=F0=9F=90=8D=20Python=203.10.x=20support?= =?UTF-8?q?=20and=20drop=20Python=203.6=20support=20(#1565)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update requirements * Update CI for p3.10 * Update numpy requirement * Drop ๐Ÿp3.6 support Numpy also dropped support for p3.6 * Bind cython v0.29.28 * Bind pyworld to v0.2.10 > 0.2.10 is not p3.10.x compatible * Update Dockerfile --- .github/workflows/aux_tests.yml | 2 +- .github/workflows/data_tests.yml | 2 +- .github/workflows/inference_tests.yml | 2 +- .github/workflows/pypi-release.yml | 10 +++++----- .github/workflows/text_tests.yml | 2 +- .github/workflows/tts_tests.yml | 2 +- .github/workflows/vocoder_tests.yml | 2 +- .github/workflows/zoo_tests.yml | 2 +- Dockerfile | 5 +++-- Makefile | 20 ++++++++++---------- README.md | 2 +- TTS/server/README.md | 6 ------ docs/source/installation.md | 2 +- pyproject.toml | 2 +- requirements.dev.txt | 2 +- requirements.txt | 10 +++++----- setup.py | 8 ++++---- 17 files changed, 38 insertions(+), 43 deletions(-) diff --git a/.github/workflows/aux_tests.yml b/.github/workflows/aux_tests.yml index 59ba572d..d3970742 100644 --- a/.github/workflows/aux_tests.yml +++ b/.github/workflows/aux_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/data_tests.yml b/.github/workflows/data_tests.yml index 296aa570..cb94ef7f 100644 --- a/.github/workflows/data_tests.yml +++ b/.github/workflows/data_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/inference_tests.yml b/.github/workflows/inference_tests.yml index 3f08b904..e4832db7 100644 --- a/.github/workflows/inference_tests.yml +++ b/.github/workflows/inference_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 02faa7f6..83797be1 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -36,7 +36,7 @@ jobs: runs-on: ubuntu-20.04 strategy: matrix: - python-version: ["3.6", "3.7", "3.8", "3.9"] + python-version: ["3.7", "3.8", "3.9", "3.10"] steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 @@ -62,10 +62,6 @@ jobs: with: name: "sdist" path: "dist/" - - uses: actions/download-artifact@v2 - with: - name: "wheel-3.6" - path: "dist/" - uses: actions/download-artifact@v2 with: name: "wheel-3.7" @@ -78,6 +74,10 @@ jobs: with: name: "wheel-3.9" path: "dist/" + - uses: actions/download-artifact@v2 + with: + name: "wheel-3.10" + path: "dist/" - run: | ls -lh dist/ - name: Setup PyPI config diff --git a/.github/workflows/text_tests.yml b/.github/workflows/text_tests.yml index 66197e0b..87a0658d 100644 --- a/.github/workflows/text_tests.yml +++ b/.github/workflows/text_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/tts_tests.yml b/.github/workflows/tts_tests.yml index 0a5891ee..21a5b989 100644 --- a/.github/workflows/tts_tests.yml +++ b/.github/workflows/tts_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/vocoder_tests.yml b/.github/workflows/vocoder_tests.yml index 24ae9e3f..e1e619b6 100644 --- a/.github/workflows/vocoder_tests.yml +++ b/.github/workflows/vocoder_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/zoo_tests.yml b/.github/workflows/zoo_tests.yml index 94d54200..10c192e4 100644 --- a/.github/workflows/zoo_tests.yml +++ b/.github/workflows/zoo_tests.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, "3.10"] experimental: [false] steps: - uses: actions/checkout@v2 diff --git a/Dockerfile b/Dockerfile index 8dab3b30..3cc41d6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,11 @@ FROM nvcr.io/nvidia/pytorch:22.03-py3 -RUN apt-get update && apt-get install -y --no-install-recommends espeak && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install -y --no-install-recommends espeak espeak-ng && rm -rf /var/lib/apt/lists/* +RUN pip install llvmlite --ignore-installed WORKDIR /root COPY requirements.txt /root COPY requirements.dev.txt /root COPY requirements.notebooks.txt /root -RUN pip install -r <(cat requirements.txt requirements.dev.txt requirements.notebooks.txt) +RUN ["/bin/bash", "-c", "pip install -r <(cat requirements.txt requirements.dev.txt requirements.notebooks.txt)"] COPY . /root RUN make install ENTRYPOINT ["tts"] diff --git a/Makefile b/Makefile index 69f34c79..7adea3a1 100644 --- a/Makefile +++ b/Makefile @@ -7,36 +7,36 @@ help: target_dirs := tests TTS notebooks recipes test_all: ## run tests and don't stop on an error. - nosetests --with-cov -cov --cover-erase --cover-package TTS tests --nologcapture --with-id + nose2 --with-coverage --coverage TTS tests ./run_bash_tests.sh test: ## run tests. - nosetests -x --with-cov -cov --cover-erase --cover-package TTS tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests test_vocoder: ## run vocoder tests. - nosetests tests.vocoder_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.vocoder_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.vocoder_tests test_tts: ## run tts tests. - nosetests tests.tts_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.tts_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.tts_tests test_aux: ## run aux tests. - nosetests tests.aux_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.aux_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.aux_tests ./run_bash_tests.sh test_zoo: ## run zoo tests. - nosetests tests.zoo_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.zoo_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.zoo_tests inference_tests: ## run inference tests. - nosetests tests.inference_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.inference_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.inference_tests data_tests: ## run data tests. - nosetests tests.data_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.data_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.data_tests test_text: ## run text tests. - nosetests tests.text_tests -x --with-cov -cov --cover-erase --cover-package TTS tests.text_tests --nologcapture --with-id + nose2 -F -v -B --with-coverage --coverage TTS tests.text_tests test_failed: ## only run tests failed the last time. - nosetests -x --with-cov -cov --cover-erase --cover-package TTS tests --nologcapture --failed + nose2 -F -v -B --with-coverage --coverage TTS tests style: ## update code style. black ${target_dirs} diff --git a/README.md b/README.md index 97a7cc66..5be1622b 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ Underlined "TTS*" and "Judy*" are ๐ŸธTTS models You can also help us implement more models. ## Install TTS -๐ŸธTTS is tested on Ubuntu 18.04 with **python >= 3.6, < 3.9**. +๐ŸธTTS is tested on Ubuntu 18.04 with **python >= 3.7, < 3.11.**. If you are only interested in [synthesizing speech](https://tts.readthedocs.io/en/latest/inference.html) with the released ๐ŸธTTS models, installing from PyPI is the easiest option. diff --git a/TTS/server/README.md b/TTS/server/README.md index 5458e398..270656c4 100644 --- a/TTS/server/README.md +++ b/TTS/server/README.md @@ -1,9 +1,3 @@ - - # :frog: TTS demo server Before you use the server, make sure you [install](https://github.com/coqui-ai/TTS/tree/dev#install-tts)) :frog: TTS properly. Then, you can follow the steps below. diff --git a/docs/source/installation.md b/docs/source/installation.md index 0122271d..c4d05361 100644 --- a/docs/source/installation.md +++ b/docs/source/installation.md @@ -1,6 +1,6 @@ # Installation -๐ŸธTTS supports python >=3.6 <=3.9 and tested on Ubuntu 18.10, 19.10, 20.10. +๐ŸธTTS supports python >=3.7 <3.11.0 and tested on Ubuntu 18.10, 19.10, 20.10. ## Using `pip` diff --git a/pyproject.toml b/pyproject.toml index b775f12a..b790159d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools", "wheel", "Cython", "numpy==1.19.5"] +requires = ["setuptools", "wheel", "cython==0.29.28", "numpy==1.21.6"] [flake8] max-line-length=120 diff --git a/requirements.dev.txt b/requirements.dev.txt index c995f9e6..8c674727 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -1,5 +1,5 @@ black coverage isort -nose +nose2 pylint==2.10.2 diff --git a/requirements.txt b/requirements.txt index 098f5eee..e6eaf885 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,12 +1,12 @@ # core deps -numpy==1.19.5 -cython +numpy==1.21.6 +cython==0.29.28 scipy>=1.4.0 torch>=1.7 torchaudio soundfile librosa==0.8.0 -numba==0.53 +numba==0.55.1 inflect tqdm anyascii @@ -22,7 +22,7 @@ pandas # deps for training matplotlib tensorboardX -pyworld +pyworld==0.2.10 # > 0.2.10 is not p3.10.x compatible # coqui stack trainer # config management @@ -31,7 +31,7 @@ coqpit>=0.0.16 jieba pypinyin # japanese g2p deps -mecab-python3==1.0.3 +mecab-python3==1.0.5 unidic-lite==1.0.8 # gruut+supported langs gruut[cs,de,es,fr,it,nl,pt,ru,sv]==2.2.3 diff --git a/setup.py b/setup.py index 96173fec..3c860949 100644 --- a/setup.py +++ b/setup.py @@ -31,8 +31,8 @@ import setuptools.command.develop from Cython.Build import cythonize from setuptools import Extension, find_packages, setup -if LooseVersion(sys.version) < LooseVersion("3.6") or LooseVersion(sys.version) > LooseVersion("3.10"): - raise RuntimeError("TTS requires python >= 3.6 and <=3.10 " "but your Python version is {}".format(sys.version)) +if LooseVersion(sys.version) < LooseVersion("3.7") or LooseVersion(sys.version) >= LooseVersion("3.11"): + raise RuntimeError("TTS requires python >= 3.7 and < 3.11 " "but your Python version is {}".format(sys.version)) cwd = os.path.dirname(os.path.abspath(__file__)) @@ -113,15 +113,15 @@ setup( "dev": requirements_dev, "notebooks": requirements_notebooks, }, - python_requires=">=3.6.0, <3.10", + python_requires=">=3.7.0, <3.11", entry_points={"console_scripts": ["tts=TTS.bin.synthesize:main", "tts-server = TTS.server.server:main"]}, classifiers=[ "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "Intended Audience :: Developers", From 27cf388a79a719998f75cd14511b7a3cd20eed40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Thu, 12 May 2022 18:41:01 +0200 Subject: [PATCH 20/37] Update CI tests (#1572) * Use direct model URLs in CI * Fixup * Fixup --- .github/workflows/aux_tests.yml | 3 +++ .github/workflows/data_tests.yml | 3 +++ .github/workflows/inference_tests.yml | 3 +++ .github/workflows/tts_tests.yml | 3 +++ .github/workflows/zoo_tests.yml | 3 +++ 5 files changed, 15 insertions(+) diff --git a/.github/workflows/aux_tests.yml b/.github/workflows/aux_tests.yml index d3970742..d7eaf5c1 100644 --- a/.github/workflows/aux_tests.yml +++ b/.github/workflows/aux_tests.yml @@ -38,6 +38,9 @@ jobs: make system-deps - name: Install/upgrade Python setup deps run: python3 -m pip install --upgrade pip setuptools wheel + - name: Replace scarf urls + run: | + sed -i 's/https:\/\/coqui.gateway.scarf.sh\//https:\/\/github.com\/coqui-ai\/TTS\/releases\/download\//g' TTS/.models.json - name: Install TTS run: | python3 -m pip install .[all] diff --git a/.github/workflows/data_tests.yml b/.github/workflows/data_tests.yml index cb94ef7f..22fdf98c 100644 --- a/.github/workflows/data_tests.yml +++ b/.github/workflows/data_tests.yml @@ -38,6 +38,9 @@ jobs: make system-deps - name: Install/upgrade Python setup deps run: python3 -m pip install --upgrade pip setuptools wheel + - name: Replace scarf urls + run: | + sed -i 's/https:\/\/coqui.gateway.scarf.sh\//https:\/\/github.com\/coqui-ai\/TTS\/releases\/download\//g' TTS/.models.json - name: Install TTS run: | python3 -m pip install .[all] diff --git a/.github/workflows/inference_tests.yml b/.github/workflows/inference_tests.yml index e4832db7..8e216f50 100644 --- a/.github/workflows/inference_tests.yml +++ b/.github/workflows/inference_tests.yml @@ -38,6 +38,9 @@ jobs: make system-deps - name: Install/upgrade Python setup deps run: python3 -m pip install --upgrade pip setuptools wheel + - name: Replace scarf urls + run: | + sed -i 's/https:\/\/coqui.gateway.scarf.sh\//https:\/\/github.com\/coqui-ai\/TTS\/releases\/download\//g' TTS/.models.json - name: Install TTS run: | python3 -m pip install .[all] diff --git a/.github/workflows/tts_tests.yml b/.github/workflows/tts_tests.yml index 21a5b989..69ec955a 100644 --- a/.github/workflows/tts_tests.yml +++ b/.github/workflows/tts_tests.yml @@ -40,6 +40,9 @@ jobs: make system-deps - name: Install/upgrade Python setup deps run: python3 -m pip install --upgrade pip setuptools wheel + - name: Replace scarf urls + run: | + sed -i 's/https:\/\/coqui.gateway.scarf.sh\//https:\/\/github.com\/coqui-ai\/TTS\/releases\/download\//g' TTS/.models.json - name: Install TTS run: | python3 -m pip install .[all] diff --git a/.github/workflows/zoo_tests.yml b/.github/workflows/zoo_tests.yml index 10c192e4..eaa12fe3 100644 --- a/.github/workflows/zoo_tests.yml +++ b/.github/workflows/zoo_tests.yml @@ -39,6 +39,9 @@ jobs: make system-deps - name: Install/upgrade Python setup deps run: python3 -m pip install --upgrade pip setuptools wheel + - name: Replace scarf urls + run: | + sed -i 's/https:\/\/coqui.gateway.scarf.sh\//https:\/\/github.com\/coqui-ai\/TTS\/releases\/download\//g' TTS/.models.json - name: Install TTS run: | python3 -m pip install .[all] From 6048959e24fe41cb63def7c7332d381718b0828c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Thu, 12 May 2022 19:33:27 +0200 Subject: [PATCH 21/37] Add CPU only Docker image (#1573) Co-authored-by: Reuben Morais --- .github/workflows/docker.yaml | 11 ++++++++++- Dockerfile | 14 +++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 457649a2..9d2d8d8f 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -14,6 +14,9 @@ jobs: strategy: matrix: arch: ["amd64"] + base: + - "nvcr.io/nvidia/pytorch:22.03-py3" # GPU enabled + - "ubuntu:20.04" # CPU only steps: - uses: actions/checkout@v2 - name: Log in to the Container registry @@ -28,6 +31,11 @@ jobs: set -ex base="ghcr.io/coqui-ai/tts" tags="" # PR build + + if [[ ${{ matrix.base }} = "ubuntu:20.04" ]]; then + base="ghcr.io/coqui-ai/tts-cpu" + fi + if [[ "${{ startsWith(github.ref, 'refs/heads/') }}" = "true" ]]; then # Push to branch github_ref="${{ github.ref }}" @@ -53,4 +61,5 @@ jobs: context: . platforms: linux/${{ matrix.arch }} push: ${{ github.event_name == 'push' }} - tags: ${{ steps.compute-tag.outputs.tags }} + build-args: "BASE=${{ matrix.base }}" + tags: ${{ steps.compute-tag.outputs.tags }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 3cc41d6f..f055cba4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,14 @@ -FROM nvcr.io/nvidia/pytorch:22.03-py3 -RUN apt-get update && apt-get install -y --no-install-recommends espeak espeak-ng && rm -rf /var/lib/apt/lists/* +ARG BASE=nvcr.io/nvidia/pytorch:22.03-py3 +FROM ${BASE} +RUN apt-get update && apt-get install -y --no-install-recommends gcc g++ make python3 python3-dev python3-pip python3-venv python3-wheel espeak espeak-ng libsndfile1-dev && rm -rf /var/lib/apt/lists/* RUN pip install llvmlite --ignore-installed + +# Create and activate virtual env +ENV VIRTUAL_ENV=/venv +RUN python3 -m venv $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" +RUN pip install -U pip setuptools wheel + WORKDIR /root COPY requirements.txt /root COPY requirements.dev.txt /root @@ -9,4 +17,4 @@ RUN ["/bin/bash", "-c", "pip install -r <(cat requirements.txt requirements.dev. COPY . /root RUN make install ENTRYPOINT ["tts"] -CMD ["--help"] +CMD ["--help"] \ No newline at end of file From 6e460b7e42d13df375f1cf52ec10883cfe3ff77f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Thu, 12 May 2022 19:55:24 +0200 Subject: [PATCH 22/37] Add an assert for the upsampling trick (#1538) --- TTS/tts/models/vits.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index b04913e4..4add9fbf 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -1629,10 +1629,17 @@ class Vits(BaseTTS): from TTS.utils.audio import AudioProcessor upsample_rate = torch.prod(torch.as_tensor(config.model_args.upsample_rates_decoder)).item() + if not config.model_args.encoder_sample_rate: assert ( upsample_rate == config.audio.hop_length ), f" [!] Product of upsample rates must be equal to the hop length - {upsample_rate} vs {config.audio.hop_length}" + else: + encoder_to_vocoder_upsampling_factor = config.audio.sample_rate / config.model_args.encoder_sample_rate + effective_hop_length = config.audio.hop_length * encoder_to_vocoder_upsampling_factor + assert ( + upsample_rate == effective_hop_length + ), f" [!] Product of upsample rates must be equal to the hop length - {upsample_rate} vs {effective_hop_length}" ap = AudioProcessor.init_from_config(config, verbose=verbose) tokenizer, new_config = TTSTokenizer.init_from_config(config) From c6008e52356b46f556e70959d07bb8fb2af8084f Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Thu, 12 May 2022 14:59:19 -0300 Subject: [PATCH 23/37] Add audio length sampler balancer (#1561) * Add audio length sampler balancer * Add unit tests --- TTS/tts/configs/shared_configs.py | 10 ++++++++++ TTS/tts/models/base_tts.py | 9 +++++++++ TTS/tts/utils/data.py | 26 ++++++++++++++++++++++++++ tests/data_tests/test_samplers.py | 27 +++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) diff --git a/TTS/tts/configs/shared_configs.py b/TTS/tts/configs/shared_configs.py index dcc862e8..b782117c 100644 --- a/TTS/tts/configs/shared_configs.py +++ b/TTS/tts/configs/shared_configs.py @@ -232,6 +232,14 @@ class BaseTTSConfig(BaseTrainingConfig): language_weighted_sampler_alpha (float): Number that control the influence of the language sampler weights. Defaults to ```1.0```. + + use_length_weighted_sampler (bool): + Enable / Disable the batch balancer by audio length. If enabled the dataset will be divided + into 10 buckets considering the min and max audio of the dataset. The sampler weights will be + computed forcing to have the same quantity of data for each bucket in each training batch. Defaults to ```False```. + + length_weighted_sampler_alpha (float): + Number that control the influence of the length sampler weights. Defaults to ```1.0```. """ audio: BaseAudioConfig = field(default_factory=BaseAudioConfig) @@ -279,3 +287,5 @@ class BaseTTSConfig(BaseTrainingConfig): speaker_weighted_sampler_alpha: float = 1.0 use_language_weighted_sampler: bool = False language_weighted_sampler_alpha: float = 1.0 + use_length_weighted_sampler: bool = False + length_weighted_sampler_alpha: float = 1.0 diff --git a/TTS/tts/models/base_tts.py b/TTS/tts/models/base_tts.py index 652b77dd..c71872d3 100644 --- a/TTS/tts/models/base_tts.py +++ b/TTS/tts/models/base_tts.py @@ -12,6 +12,7 @@ from trainer.torch import DistributedSampler, DistributedSamplerWrapper from TTS.model import BaseTrainerModel from TTS.tts.datasets.dataset import TTSDataset +from TTS.tts.utils.data import get_length_balancer_weights from TTS.tts.utils.languages import LanguageManager, get_language_balancer_weights from TTS.tts.utils.speakers import SpeakerManager, get_speaker_balancer_weights, get_speaker_manager from TTS.tts.utils.synthesis import synthesis @@ -250,6 +251,14 @@ class BaseTTS(BaseTrainerModel): else: weights = get_speaker_balancer_weights(data_items) * alpha + if getattr(config, "use_length_weighted_sampler", False): + alpha = getattr(config, "length_weighted_sampler_alpha", 1.0) + print(" > Using Length weighted sampler with alpha:", alpha) + if weights is not None: + weights += get_length_balancer_weights(data_items) * alpha + else: + weights = get_length_balancer_weights(data_items) * alpha + if weights is not None: sampler = WeightedRandomSampler(weights, len(weights)) else: diff --git a/TTS/tts/utils/data.py b/TTS/tts/utils/data.py index b0d88740..22e46b68 100644 --- a/TTS/tts/utils/data.py +++ b/TTS/tts/utils/data.py @@ -1,4 +1,7 @@ +import bisect + import numpy as np +import torch def _pad_data(x, length): @@ -51,3 +54,26 @@ def prepare_stop_target(inputs, out_steps): def pad_per_step(inputs, pad_len): return np.pad(inputs, [[0, 0], [0, 0], [0, pad_len]], mode="constant", constant_values=0.0) + + +def get_length_balancer_weights(items: list, num_buckets=10): + # get all durations + audio_lengths = np.array([item["audio_length"] for item in items]) + # create the $num_buckets buckets classes based in the dataset max and min length + max_length = int(max(audio_lengths)) + min_length = int(min(audio_lengths)) + step = int((max_length - min_length) / num_buckets) + 1 + buckets_classes = [i + step for i in range(min_length, (max_length - step) + num_buckets + 1, step)] + # add each sample in their respective length bucket + buckets_names = np.array( + [buckets_classes[bisect.bisect_left(buckets_classes, item["audio_length"])] for item in items] + ) + # count and compute the weights_bucket for each sample + unique_buckets_names = np.unique(buckets_names).tolist() + bucket_ids = [unique_buckets_names.index(l) for l in buckets_names] + bucket_count = np.array([len(np.where(buckets_names == l)[0]) for l in unique_buckets_names]) + weight_bucket = 1.0 / bucket_count + dataset_samples_weight = np.array([weight_bucket[l] for l in bucket_ids]) + # normalize + dataset_samples_weight = dataset_samples_weight / np.linalg.norm(dataset_samples_weight) + return torch.from_numpy(dataset_samples_weight).float() diff --git a/tests/data_tests/test_samplers.py b/tests/data_tests/test_samplers.py index 42f1bfd5..b85e0ec4 100644 --- a/tests/data_tests/test_samplers.py +++ b/tests/data_tests/test_samplers.py @@ -1,4 +1,5 @@ import functools +import random import unittest import torch @@ -6,6 +7,7 @@ import torch from TTS.config.shared_configs import BaseDatasetConfig from TTS.encoder.utils.samplers import PerfectBatchSampler from TTS.tts.datasets import load_tts_samples +from TTS.tts.utils.data import get_length_balancer_weights from TTS.tts.utils.languages import get_language_balancer_weights from TTS.tts.utils.speakers import get_speaker_balancer_weights @@ -136,3 +138,28 @@ class TestSamplers(unittest.TestCase): else: spk2 += 1 assert spk1 == spk2, "PerfectBatchSampler is supposed to be perfectly balanced" + + def test_length_weighted_random_sampler(self): # pylint: disable=no-self-use + for _ in range(1000): + # gerenate a lenght unbalanced dataset with random max/min audio lenght + min_audio = random.randrange(1, 22050) + max_audio = random.randrange(44100, 220500) + for idx, item in enumerate(train_samples): + # increase the diversity of durations + random_increase = random.randrange(100, 1000) + if idx < 5: + item["audio_length"] = min_audio + random_increase + else: + item["audio_length"] = max_audio + random_increase + + weighted_sampler = torch.utils.data.sampler.WeightedRandomSampler( + get_length_balancer_weights(train_samples, num_buckets=2), len(train_samples) + ) + ids = functools.reduce(lambda a, b: a + b, [list(weighted_sampler) for i in range(100)]) + len1, len2 = 0, 0 + for index in ids: + if train_samples[index]["audio_length"] < max_audio: + len1 += 1 + else: + len2 += 1 + assert is_balanced(len1, len2), "Length Weighted sampler is supposed to be balanced" From e5d8ec24025eeb50b0570468743ca376a778c145 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Fri, 13 May 2022 05:52:39 -0300 Subject: [PATCH 24/37] Change the VITS upsampling interpolation trick to linear (#1564) --- TTS/tts/models/vits.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 4add9fbf..2c1c2bc6 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -890,9 +890,7 @@ class Vits(BaseTTS): spec_segment_size = spec_segment_size * int(self.interpolate_factor) # interpolate z if needed if self.args.interpolate_z: - z = torch.nn.functional.interpolate( - z.unsqueeze(0), scale_factor=[1, self.interpolate_factor], mode="nearest" - ).squeeze(0) + z = torch.nn.functional.interpolate(z, scale_factor=[self.interpolate_factor], mode="linear").squeeze(0) # recompute the mask if needed if y_lengths is not None and y_mask is not None: y_mask = ( From e282da5161fff4bbb0a05039784edcb0d560eff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Fri, 13 May 2022 14:56:49 +0200 Subject: [PATCH 25/37] Update CI badges --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5be1622b..8ed67c30 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,23 @@ ๐ŸธTTS is a library for advanced Text-to-Speech generation. It's built on the latest research, was designed to achieve the best trade-off among ease-of-training, speed and quality. ๐ŸธTTS comes with pretrained models, tools for measuring dataset quality and already used in **20+ languages** for products and research projects. -[![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/main.yml/badge.svg)](https://github.com/coqui-ai/TTS/actions) +[![Gitter](https://badges.gitter.im/coqui-ai/TTS.svg)](https://gitter.im/coqui-ai/TTS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![License]()](https://opensource.org/licenses/MPL-2.0) [![PyPI version](https://badge.fury.io/py/TTS.svg)](https://badge.fury.io/py/TTS) [![Covenant](https://camo.githubusercontent.com/7d620efaa3eac1c5b060ece5d6aacfcc8b81a74a04d05cd0398689c01c4463bb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e7472696275746f72253230436f76656e616e742d76322e3025323061646f707465642d6666363962342e737667)](https://github.com/coqui-ai/TTS/blob/master/CODE_OF_CONDUCT.md) [![Downloads](https://pepy.tech/badge/tts)](https://pepy.tech/project/tts) [![DOI](https://zenodo.org/badge/265612440.svg)](https://zenodo.org/badge/latestdoi/265612440) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/aux_tests.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/data_tests.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/docker.yaml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/inference_tests.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/style_check.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/text_tests.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/tts_tests.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/vocoder_tests.yml/badge.svg) +![GithubActions](https://github.com/coqui-ai/TTS/actions/workflows/zoo_tests.yml/badge.svg) [![Docs]()](https://tts.readthedocs.io/en/latest/) -[![Gitter](https://badges.gitter.im/coqui-ai/TTS.svg)](https://gitter.im/coqui-ai/TTS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -[![License]()](https://opensource.org/licenses/MPL-2.0) ๐Ÿ“ฐ [**Subscribe to ๐ŸธCoqui.ai Newsletter**](https://coqui.ai/?subscription=true) From ee99a6c1e270a78d6fb755f2478ede73399b4fd6 Mon Sep 17 00:00:00 2001 From: Edresson Casanova Date: Fri, 20 May 2022 08:16:01 -0300 Subject: [PATCH 26/37] Fix voice conversion inference (#1583) * Add voice conversion zoo test * Fix style * Fix unit test --- TTS/bin/synthesize.py | 2 +- TTS/tts/models/vits.py | 4 ++-- TTS/utils/synthesizer.py | 2 +- tests/tts_tests/test_vits.py | 2 +- tests/zoo_tests/test_models.py | 15 ++++++++++++++- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/TTS/bin/synthesize.py b/TTS/bin/synthesize.py index 6247b2a4..dc6e30b4 100755 --- a/TTS/bin/synthesize.py +++ b/TTS/bin/synthesize.py @@ -171,7 +171,7 @@ If you don't specify any models, then it uses LJSpeech based English model. help="wav file(s) to condition a multi-speaker TTS model with a Speaker Encoder. You can give multiple file paths. The d_vectors is computed as their average.", default=None, ) - parser.add_argument("--gst_style", help="Wav path file for GST stylereference.", default=None) + parser.add_argument("--gst_style", help="Wav path file for GST style reference.", default=None) parser.add_argument( "--list_speaker_idxs", help="List available speaker ids for the defined multi-speaker model.", diff --git a/TTS/tts/models/vits.py b/TTS/tts/models/vits.py index 2c1c2bc6..a6b1c743 100644 --- a/TTS/tts/models/vits.py +++ b/TTS/tts/models/vits.py @@ -1127,7 +1127,7 @@ class Vits(BaseTTS): self.config.audio.hop_length, self.config.audio.win_length, center=False, - ).transpose(1, 2) + ) y_lengths = torch.tensor([y.size(-1)]).to(y.device) speaker_cond_src = reference_speaker_id if reference_speaker_id is not None else reference_d_vector speaker_cond_tgt = speaker_id if speaker_id is not None else d_vector @@ -1157,7 +1157,7 @@ class Vits(BaseTTS): else: raise RuntimeError(" [!] Voice conversion is only supported on multi-speaker models.") - z, _, _, y_mask = self.posterior_encoder(y.transpose(1, 2), y_lengths, g=g_src) + z, _, _, y_mask = self.posterior_encoder(y, y_lengths, g=g_src) z_p = self.flow(z, y_mask, g=g_src) z_hat = self.flow(z_p, y_mask, g=g_tgt, reverse=True) o_hat = self.waveform_decoder(z_hat * y_mask, g=g_tgt) diff --git a/TTS/utils/synthesizer.py b/TTS/utils/synthesizer.py index 1f33b53e..2c288613 100644 --- a/TTS/utils/synthesizer.py +++ b/TTS/utils/synthesizer.py @@ -315,7 +315,7 @@ class Synthesizer(object): # get the speaker embedding or speaker id for the reference wav file reference_speaker_embedding = None reference_speaker_id = None - if self.tts_speakers_file or hasattr(self.tts_model.speaker_manager, "speaker_ids"): + if self.tts_speakers_file or hasattr(self.tts_model.speaker_manager, "ids"): if reference_speaker_name and isinstance(reference_speaker_name, str): if self.tts_config.use_d_vector_file: # get the speaker embedding from the saved d_vectors. diff --git a/tests/tts_tests/test_vits.py b/tests/tts_tests/test_vits.py index 5694fe4d..b9cebb5a 100644 --- a/tests/tts_tests/test_vits.py +++ b/tests/tts_tests/test_vits.py @@ -122,7 +122,7 @@ class TestVits(unittest.TestCase): args = VitsArgs(num_speakers=num_speakers, use_speaker_embedding=True) model = Vits(args) - ref_inp = torch.randn(1, spec_len, 513) + ref_inp = torch.randn(1, 513, spec_len) ref_inp_len = torch.randint(1, spec_effective_len, (1,)) ref_spk_id = torch.randint(1, num_speakers, (1,)) tgt_spk_id = torch.randint(1, num_speakers, (1,)) diff --git a/tests/zoo_tests/test_models.py b/tests/zoo_tests/test_models.py index e614ce74..8c32895f 100644 --- a/tests/zoo_tests/test_models.py +++ b/tests/zoo_tests/test_models.py @@ -3,7 +3,7 @@ import glob import os import shutil -from tests import get_tests_output_path, run_cli +from tests import get_tests_data_path, get_tests_output_path, run_cli from TTS.tts.utils.languages import LanguageManager from TTS.tts.utils.speakers import SpeakerManager from TTS.utils.generic_utils import get_user_data_dir @@ -56,3 +56,16 @@ def test_run_all_models(): folders = glob.glob(os.path.join(manager.output_prefix, "*")) assert len(folders) == len(model_names) shutil.rmtree(manager.output_prefix) + + +def test_voice_conversion(): + print(" > Run voice conversion inference using YourTTS model.") + model_name = "tts_models/multilingual/multi-dataset/your_tts" + language_id = "en" + speaker_wav = os.path.join(get_tests_data_path(), "ljspeech", "wavs", "LJ001-0001.wav") + reference_wav = os.path.join(get_tests_data_path(), "ljspeech", "wavs", "LJ001-0032.wav") + output_path = os.path.join(get_tests_output_path(), "output.wav") + run_cli( + f"tts --model_name {model_name}" + f" --out_path {output_path} --speaker_wav {speaker_wav} --reference_wav {reference_wav} --language_idx {language_id} " + ) From 8be21ec38734e780e787d07d7e979392d7d63f24 Mon Sep 17 00:00:00 2001 From: a-froghyar Date: Fri, 20 May 2022 16:17:11 +0200 Subject: [PATCH 27/37] Capacitron (#977) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * new CI config * initial Capacitron implementation * delete old unused file * fix empty formatting changes * update losses and training script * fix previous commit * fix commit * Add Capacitron test and first round of test fixes * revert formatter change * add changes to the synthesizer * add stepwise gradual lr scheduler and changes to the recipe * add inference script for dev use * feat: add posterior inference arguments to synth methods - added reference wav and text args for posterior inference - some formatting * fix: add espeak flag to base_tts and dataset APIs - use_espeak_phonemes flag was not implemented in those APIs - espeak is now able to be utilised for phoneme generation - necessary phonemizer for the Capacitron model * chore: update training script and style - training script includes the espeak flag and other hyperparams - made style * chore: fix linting * feat: add Tacotron 2 support * leftover from dev * chore:rename parser args * feat: extract optimizers - created a separate optimizer class to merge the two optimizers * chore: revert arbitrary trainer changes * fmt: revert formatting bug * formatting again * formatting fixed * fix: log func * fix: update optimizer - Implemented load_state_dict for continuing training * fix: clean optimizer init for standard models * improvement: purge espeak flags and add training scripts * Delete capacitronT2.py delete old training script, new one is pushed * feat: capacitron trainer methods - extracted capacitron specific training operations from the trainer into custom methods in taco1 and taco2 models * chore: renaming and merging capacitron and gst style args * fix: bug fixes from the previous commit * fix: implement state_dict method on CapacitronOptimizer * fix: call method * fix: inference naming * Delete train_capacitron.py * fix: synthesize * feat: update tests * chore: fix style * Delete capacitron_inference.py * fix: fix train tts t2 capacitron tests * fix: double forward in T2 train step * fix: double forward in T1 train step * fix: run make style * fix: remove unused import * fix: test for T1 capacitron * fix: make lint * feat: add blizzard2013 recipes * make style * fix: update recipes * chore: make style * Plot test sentences in Tacotron * chore: make style and fix import * fix: call forward first before problematic floordiv op * fix: update recipes * feat: add min_audio_len to recipes * aux_input["style_mel"] * chore: make style * Make capacitron T2 recipe more stable * Remove T1 capacitron Ljspeech * feat: implement new grad clipping routine and update configs * make style * Add pretrained checkpoints * Add default vocoder * Change trainer package * Fix grad clip issue for tacotron * Fix scheduler issue with tacotron Co-authored-by: Eren Gรถlge Co-authored-by: WeberJulian Co-authored-by: Eren Gรถlge --- TTS/.models.json | 30 +++ TTS/bin/synthesize.py | 6 + TTS/tts/configs/shared_configs.py | 44 ++++ TTS/tts/configs/tacotron_config.py | 9 +- TTS/tts/layers/losses.py | 57 +++++ TTS/tts/layers/tacotron/capacitron_layers.py | 205 ++++++++++++++++++ TTS/tts/layers/tacotron/gst_layers.py | 2 +- TTS/tts/models/base_tacotron.py | 79 ++++++- TTS/tts/models/tacotron.py | 106 +++++++-- TTS/tts/models/tacotron2.py | 98 ++++++++- TTS/tts/utils/synthesis.py | 37 +++- TTS/utils/capacitron_optimizer.py | 65 ++++++ TTS/utils/io.py | 2 + TTS/utils/synthesizer.py | 9 +- recipes/blizzard2013/README.md | 12 + .../train_capacitron_t1.py | 101 +++++++++ .../train_capacitron_t2.py | 117 ++++++++++ .../train_capacitron_t2.py | 115 ++++++++++ tests/tts_tests/test_tacotron2_model.py | 69 +++++- tests/tts_tests/test_tacotron_model.py | 70 +++++- 20 files changed, 1194 insertions(+), 39 deletions(-) create mode 100644 TTS/tts/layers/tacotron/capacitron_layers.py create mode 100644 TTS/utils/capacitron_optimizer.py create mode 100644 recipes/blizzard2013/README.md create mode 100644 recipes/blizzard2013/tacotron1-Capacitron/train_capacitron_t1.py create mode 100644 recipes/blizzard2013/tacotron2-Capacitron/train_capacitron_t2.py create mode 100644 recipes/ljspeech/tacotron2-Capacitron/train_capacitron_t2.py diff --git a/TTS/.models.json b/TTS/.models.json index 4870bc1f..660d479c 100644 --- a/TTS/.models.json +++ b/TTS/.models.json @@ -119,6 +119,26 @@ "license": "apache 2.0", "contact": "egolge@coqui.com" } + }, + "blizzard2013": { + "capacitron-t2-c50": { + "description": "Capacitron additions to Tacotron 2 with Capacity at 50 as in https://arxiv.org/pdf/1906.03402.pdf", + "github_rls_url": "https://coqui.gateway.scarf.sh/v0.7.0_models/tts_models--en--blizzard2013--capacitron-t2-c50.zip", + "commit": "d6284e7", + "default_vocoder": "vocoder_models/en/blizzard2013/hifigan_v2", + "author": "Adam Froghyar @a-froghyar", + "license": "apache 2.0", + "contact": "adamfroghyar@gmail.com" + }, + "capacitron-t2-c150": { + "description": "Capacitron additions to Tacotron 2 with Capacity at 150 as in https://arxiv.org/pdf/1906.03402.pdf", + "github_rls_url": "https://coqui.gateway.scarf.sh/v0.7.0_models/tts_models--en--blizzard2013--capacitron-t2-c150.zip", + "commit": "d6284e7", + "default_vocoder": "vocoder_models/en/blizzard2013/hifigan_v2", + "author": "Adam Froghyar @a-froghyar", + "license": "apache 2.0", + "contact": "adamfroghyar@gmail.com" + } } }, "es": { @@ -379,6 +399,16 @@ "contact": "egolge@coqui.ai" } }, + "blizzard2013": { + "hifigan_v2": { + "description": "HiFiGAN_v2 LJSpeech vocoder from https://arxiv.org/abs/2010.05646.", + "github_rls_url": "https://coqui.gateway.scarf.sh/v0.7.0_models/vocoder_models--en--blizzard2013--hifigan_v2.zip", + "commit": "d6284e7", + "author": "Adam Froghyar @a-froghyar", + "license": "apache 2.0", + "contact": "adamfroghyar@gmail.com" + } + }, "vctk": { "hifigan_v2": { "description": "Finetuned and intended to be used with tts_models/en/vctk/sc-glow-tts", diff --git a/TTS/bin/synthesize.py b/TTS/bin/synthesize.py index dc6e30b4..4e93535a 100755 --- a/TTS/bin/synthesize.py +++ b/TTS/bin/synthesize.py @@ -172,6 +172,10 @@ If you don't specify any models, then it uses LJSpeech based English model. default=None, ) parser.add_argument("--gst_style", help="Wav path file for GST style reference.", default=None) + parser.add_argument( + "--capacitron_style_wav", type=str, help="Wav path file for Capacitron prosody reference.", default=None + ) + parser.add_argument("--capacitron_style_text", type=str, help="Transcription of the reference.", default=None) parser.add_argument( "--list_speaker_idxs", help="List available speaker ids for the defined multi-speaker model.", @@ -308,6 +312,8 @@ If you don't specify any models, then it uses LJSpeech based English model. args.language_idx, args.speaker_wav, reference_wav=args.reference_wav, + style_wav=args.capacitron_style_wav, + style_text=args.capacitron_style_text, reference_speaker_name=args.reference_speaker_idx, ) diff --git a/TTS/tts/configs/shared_configs.py b/TTS/tts/configs/shared_configs.py index b782117c..4704687c 100644 --- a/TTS/tts/configs/shared_configs.py +++ b/TTS/tts/configs/shared_configs.py @@ -48,6 +48,50 @@ class GSTConfig(Coqpit): check_argument("gst_num_style_tokens", c, restricted=True, min_val=1, max_val=1000) +@dataclass +class CapacitronVAEConfig(Coqpit): + """Defines the capacitron VAE Module + Args: + capacitron_capacity (int): + Defines the variational capacity limit of the prosody embeddings. Defaults to 150. + capacitron_VAE_embedding_dim (int): + Defines the size of the Capacitron embedding vector dimension. Defaults to 128. + capacitron_use_text_summary_embeddings (bool): + If True, use a text summary embedding in Capacitron. Defaults to True. + capacitron_text_summary_embedding_dim (int): + Defines the size of the capacitron text embedding vector dimension. Defaults to 128. + capacitron_use_speaker_embedding (bool): + if True use speaker embeddings in Capacitron. Defaults to False. + capacitron_VAE_loss_alpha (float): + Weight for the VAE loss of the Tacotron model. If set less than or equal to zero, it disables the + corresponding loss function. Defaults to 0.25 + capacitron_grad_clip (float): + Gradient clipping value for all gradients except beta. Defaults to 5.0 + """ + + capacitron_loss_alpha: int = 1 + capacitron_capacity: int = 150 + capacitron_VAE_embedding_dim: int = 128 + capacitron_use_text_summary_embeddings: bool = True + capacitron_text_summary_embedding_dim: int = 128 + capacitron_use_speaker_embedding: bool = False + capacitron_VAE_loss_alpha: float = 0.25 + capacitron_grad_clip: float = 5.0 + + def check_values( + self, + ): + """Check config fields""" + c = asdict(self) + super().check_values() + check_argument("capacitron_capacity", c, restricted=True, min_val=10, max_val=500) + check_argument("capacitron_VAE_embedding_dim", c, restricted=True, min_val=16, max_val=1024) + check_argument("capacitron_use_speaker_embedding", c, restricted=False) + check_argument("capacitron_text_summary_embedding_dim", c, restricted=False, min_val=16, max_val=512) + check_argument("capacitron_VAE_loss_alpha", c, restricted=False) + check_argument("capacitron_grad_clip", c, restricted=False) + + @dataclass class CharactersConfig(Coqpit): """Defines arguments for the `BaseCharacters` or `BaseVocabulary` and their subclasses. diff --git a/TTS/tts/configs/tacotron_config.py b/TTS/tts/configs/tacotron_config.py index 5193c224..e25609ff 100644 --- a/TTS/tts/configs/tacotron_config.py +++ b/TTS/tts/configs/tacotron_config.py @@ -1,7 +1,7 @@ from dataclasses import dataclass, field from typing import List -from TTS.tts.configs.shared_configs import BaseTTSConfig, GSTConfig +from TTS.tts.configs.shared_configs import BaseTTSConfig, CapacitronVAEConfig, GSTConfig @dataclass @@ -23,6 +23,10 @@ class TacotronConfig(BaseTTSConfig): gst_style_input (str): Path to the wav file used at inference to set the speech style through GST. If `GST` is enabled and this is not defined, the model uses a zero vector as an input. Defaults to None. + use_capacitron_vae (bool): + enable / disable the use of Capacitron modules. Defaults to False. + capacitron_vae (CapacitronConfig): + Instance of `CapacitronConfig` class. num_chars (int): Number of characters used by the model. It must be defined before initializing the model. Defaults to None. num_speakers (int): @@ -143,6 +147,9 @@ class TacotronConfig(BaseTTSConfig): gst: GSTConfig = None gst_style_input: str = None + use_capacitron_vae: bool = False + capacitron_vae: CapacitronVAEConfig = None + # model specific params num_speakers: int = 1 num_chars: int = 0 diff --git a/TTS/tts/layers/losses.py b/TTS/tts/layers/losses.py index e03cf084..1f0961b3 100644 --- a/TTS/tts/layers/losses.py +++ b/TTS/tts/layers/losses.py @@ -281,6 +281,10 @@ class TacotronLoss(torch.nn.Module): def __init__(self, c, ga_sigma=0.4): super().__init__() self.stopnet_pos_weight = c.stopnet_pos_weight + self.use_capacitron_vae = c.use_capacitron_vae + if self.use_capacitron_vae: + self.capacitron_capacity = c.capacitron_vae.capacitron_capacity + self.capacitron_vae_loss_alpha = c.capacitron_vae.capacitron_VAE_loss_alpha self.ga_alpha = c.ga_alpha self.decoder_diff_spec_alpha = c.decoder_diff_spec_alpha self.postnet_diff_spec_alpha = c.postnet_diff_spec_alpha @@ -308,6 +312,9 @@ class TacotronLoss(torch.nn.Module): # pylint: disable=not-callable self.criterion_st = BCELossMasked(pos_weight=torch.tensor(self.stopnet_pos_weight)) if c.stopnet else None + # For dev pruposes only + self.criterion_capacitron_reconstruction_loss = nn.L1Loss(reduction="sum") + def forward( self, postnet_output, @@ -317,6 +324,7 @@ class TacotronLoss(torch.nn.Module): stopnet_output, stopnet_target, stop_target_length, + capacitron_vae_outputs, output_lens, decoder_b_output, alignments, @@ -348,6 +356,55 @@ class TacotronLoss(torch.nn.Module): return_dict["decoder_loss"] = decoder_loss return_dict["postnet_loss"] = postnet_loss + if self.use_capacitron_vae: + # extract capacitron vae infos + posterior_distribution, prior_distribution, beta = capacitron_vae_outputs + + # KL divergence term between the posterior and the prior + kl_term = torch.mean(torch.distributions.kl_divergence(posterior_distribution, prior_distribution)) + + # Limit the mutual information between the data and latent space by the variational capacity limit + kl_capacity = kl_term - self.capacitron_capacity + + # pass beta through softplus to keep it positive + beta = torch.nn.functional.softplus(beta)[0] + + # This is the term going to the main ADAM optimiser, we detach beta because + # beta is optimised by a separate, SGD optimiser below + capacitron_vae_loss = beta.detach() * kl_capacity + + # normalize the capacitron_vae_loss as in L1Loss or MSELoss. + # After this, both the standard loss and capacitron_vae_loss will be in the same scale. + # For this reason we don't need use L1Loss and MSELoss in "sum" reduction mode. + # Note: the batch is not considered because the L1Loss was calculated in "sum" mode + # divided by the batch size, So not dividing the capacitron_vae_loss by B is legitimate. + + # get B T D dimension from input + B, T, D = mel_input.size() + # normalize + if self.config.loss_masking: + # if mask loss get T using the mask + T = output_lens.sum() / B + + # Only for dev purposes to be able to compare the reconstruction loss with the values in the + # original Capacitron paper + return_dict["capaciton_reconstruction_loss"] = ( + self.criterion_capacitron_reconstruction_loss(decoder_output, mel_input) / decoder_output.size(0) + ) + kl_capacity + + capacitron_vae_loss = capacitron_vae_loss / (T * D) + capacitron_vae_loss = capacitron_vae_loss * self.capacitron_vae_loss_alpha + + # This is the term to purely optimise beta and to pass into the SGD optimizer + beta_loss = torch.negative(beta) * kl_capacity.detach() + + loss += capacitron_vae_loss + + return_dict["capacitron_vae_loss"] = capacitron_vae_loss + return_dict["capacitron_vae_beta_loss"] = beta_loss + return_dict["capacitron_vae_kl_term"] = kl_term + return_dict["capacitron_beta"] = beta + stop_loss = ( self.criterion_st(stopnet_output, stopnet_target, stop_target_length) if self.config.stopnet diff --git a/TTS/tts/layers/tacotron/capacitron_layers.py b/TTS/tts/layers/tacotron/capacitron_layers.py new file mode 100644 index 00000000..56fe44bc --- /dev/null +++ b/TTS/tts/layers/tacotron/capacitron_layers.py @@ -0,0 +1,205 @@ +import torch +from torch import nn +from torch.distributions.multivariate_normal import MultivariateNormal as MVN +from torch.nn import functional as F + + +class CapacitronVAE(nn.Module): + """Effective Use of Variational Embedding Capacity for prosody transfer. + + See https://arxiv.org/abs/1906.03402""" + + def __init__( + self, + num_mel, + capacitron_VAE_embedding_dim, + encoder_output_dim=256, + reference_encoder_out_dim=128, + speaker_embedding_dim=None, + text_summary_embedding_dim=None, + ): + super().__init__() + # Init distributions + self.prior_distribution = MVN( + torch.zeros(capacitron_VAE_embedding_dim), torch.eye(capacitron_VAE_embedding_dim) + ) + self.approximate_posterior_distribution = None + # define output ReferenceEncoder dim to the capacitron_VAE_embedding_dim + self.encoder = ReferenceEncoder(num_mel, out_dim=reference_encoder_out_dim) + + # Init beta, the lagrange-like term for the KL distribution + self.beta = torch.nn.Parameter(torch.log(torch.exp(torch.Tensor([1.0])) - 1), requires_grad=True) + mlp_input_dimension = reference_encoder_out_dim + + if text_summary_embedding_dim is not None: + self.text_summary_net = TextSummary(text_summary_embedding_dim, encoder_output_dim=encoder_output_dim) + mlp_input_dimension += text_summary_embedding_dim + if speaker_embedding_dim is not None: + # TODO: Test a multispeaker model! + mlp_input_dimension += speaker_embedding_dim + self.post_encoder_mlp = PostEncoderMLP(mlp_input_dimension, capacitron_VAE_embedding_dim) + + def forward(self, reference_mel_info=None, text_info=None, speaker_embedding=None): + # Use reference + if reference_mel_info is not None: + reference_mels = reference_mel_info[0] # [batch_size, num_frames, num_mels] + mel_lengths = reference_mel_info[1] # [batch_size] + enc_out = self.encoder(reference_mels, mel_lengths) + + # concat speaker_embedding and/or text summary embedding + if text_info is not None: + text_inputs = text_info[0] # [batch_size, num_characters, num_embedding] + input_lengths = text_info[1] + text_summary_out = self.text_summary_net(text_inputs, input_lengths).to(reference_mels.device) + enc_out = torch.cat([enc_out, text_summary_out], dim=-1) + if speaker_embedding is not None: + enc_out = torch.cat([enc_out, speaker_embedding], dim=-1) + + # Feed the output of the ref encoder and information about text/speaker into + # an MLP to produce the parameteres for the approximate poterior distributions + mu, sigma = self.post_encoder_mlp(enc_out) + # convert to cpu because prior_distribution was created on cpu + mu = mu.cpu() + sigma = sigma.cpu() + + # Sample from the posterior: z ~ q(z|x) + self.approximate_posterior_distribution = MVN(mu, torch.diag_embed(sigma)) + VAE_embedding = self.approximate_posterior_distribution.rsample() + # Infer from the model, bypasses encoding + else: + # Sample from the prior: z ~ p(z) + VAE_embedding = self.prior_distribution.sample().unsqueeze(0) + + # reshape to [batch_size, 1, capacitron_VAE_embedding_dim] + return VAE_embedding.unsqueeze(1), self.approximate_posterior_distribution, self.prior_distribution, self.beta + + +class ReferenceEncoder(nn.Module): + """NN module creating a fixed size prosody embedding from a spectrogram. + + inputs: mel spectrograms [batch_size, num_spec_frames, num_mel] + outputs: [batch_size, embedding_dim] + """ + + def __init__(self, num_mel, out_dim): + + super().__init__() + self.num_mel = num_mel + filters = [1] + [32, 32, 64, 64, 128, 128] + num_layers = len(filters) - 1 + convs = [ + nn.Conv2d( + in_channels=filters[i], out_channels=filters[i + 1], kernel_size=(3, 3), stride=(2, 2), padding=(2, 2) + ) + for i in range(num_layers) + ] + self.convs = nn.ModuleList(convs) + self.training = False + self.bns = nn.ModuleList([nn.BatchNorm2d(num_features=filter_size) for filter_size in filters[1:]]) + + post_conv_height = self.calculate_post_conv_height(num_mel, 3, 2, 2, num_layers) + self.recurrence = nn.LSTM( + input_size=filters[-1] * post_conv_height, hidden_size=out_dim, batch_first=True, bidirectional=False + ) + + def forward(self, inputs, input_lengths): + batch_size = inputs.size(0) + x = inputs.view(batch_size, 1, -1, self.num_mel) # [batch_size, num_channels==1, num_frames, num_mel] + valid_lengths = input_lengths.float() # [batch_size] + for conv, bn in zip(self.convs, self.bns): + x = conv(x) + x = bn(x) + x = F.relu(x) + + # Create the post conv width mask based on the valid lengths of the output of the convolution. + # The valid lengths for the output of a convolution on varying length inputs is + # ceil(input_length/stride) + 1 for stride=3 and padding=2 + # For example (kernel_size=3, stride=2, padding=2): + # 0 0 x x x x x 0 0 -> Input = 5, 0 is zero padding, x is valid values coming from padding=2 in conv2d + # _____ + # x _____ + # x _____ + # x ____ + # x + # x x x x -> Output valid length = 4 + # Since every example in te batch is zero padded and therefore have separate valid_lengths, + # we need to mask off all the values AFTER the valid length for each example in the batch. + # Otherwise, the convolutions create noise and a lot of not real information + valid_lengths = (valid_lengths / 2).float() + valid_lengths = torch.ceil(valid_lengths).to(dtype=torch.int64) + 1 # 2 is stride -- size: [batch_size] + post_conv_max_width = x.size(2) + + mask = torch.arange(post_conv_max_width).to(inputs.device).expand( + len(valid_lengths), post_conv_max_width + ) < valid_lengths.unsqueeze(1) + mask = mask.expand(1, 1, -1, -1).transpose(2, 0).transpose(-1, 2) # [batch_size, 1, post_conv_max_width, 1] + x = x * mask + + x = x.transpose(1, 2) + # x: 4D tensor [batch_size, post_conv_width, + # num_channels==128, post_conv_height] + + post_conv_width = x.size(1) + x = x.contiguous().view(batch_size, post_conv_width, -1) + # x: 3D tensor [batch_size, post_conv_width, + # num_channels*post_conv_height] + + # Routine for fetching the last valid output of a dynamic LSTM with varying input lengths and padding + post_conv_input_lengths = valid_lengths + packed_seqs = nn.utils.rnn.pack_padded_sequence( + x, post_conv_input_lengths.tolist(), batch_first=True, enforce_sorted=False + ) # dynamic rnn sequence padding + self.recurrence.flatten_parameters() + _, (ht, _) = self.recurrence(packed_seqs) + last_output = ht[-1] + + return last_output.to(inputs.device) # [B, 128] + + @staticmethod + def calculate_post_conv_height(height, kernel_size, stride, pad, n_convs): + """Height of spec after n convolutions with fixed kernel/stride/pad.""" + for _ in range(n_convs): + height = (height - kernel_size + 2 * pad) // stride + 1 + return height + + +class TextSummary(nn.Module): + def __init__(self, embedding_dim, encoder_output_dim): + super().__init__() + self.lstm = nn.LSTM( + encoder_output_dim, # text embedding dimension from the text encoder + embedding_dim, # fixed length output summary the lstm creates from the input + batch_first=True, + bidirectional=False, + ) + + def forward(self, inputs, input_lengths): + # Routine for fetching the last valid output of a dynamic LSTM with varying input lengths and padding + packed_seqs = nn.utils.rnn.pack_padded_sequence( + inputs, input_lengths.tolist(), batch_first=True, enforce_sorted=False + ) # dynamic rnn sequence padding + self.lstm.flatten_parameters() + _, (ht, _) = self.lstm(packed_seqs) + last_output = ht[-1] + return last_output + + +class PostEncoderMLP(nn.Module): + def __init__(self, input_size, hidden_size): + super().__init__() + self.hidden_size = hidden_size + modules = [ + nn.Linear(input_size, hidden_size), # Hidden Layer + nn.Tanh(), + nn.Linear(hidden_size, hidden_size * 2), + ] # Output layer twice the size for mean and variance + self.net = nn.Sequential(*modules) + self.softplus = nn.Softplus() + + def forward(self, _input): + mlp_output = self.net(_input) + # The mean parameter is unconstrained + mu = mlp_output[:, : self.hidden_size] + # The standard deviation must be positive. Parameterise with a softplus + sigma = self.softplus(mlp_output[:, self.hidden_size :]) + return mu, sigma diff --git a/TTS/tts/layers/tacotron/gst_layers.py b/TTS/tts/layers/tacotron/gst_layers.py index 7d751bc0..ec622e4d 100644 --- a/TTS/tts/layers/tacotron/gst_layers.py +++ b/TTS/tts/layers/tacotron/gst_layers.py @@ -139,7 +139,7 @@ class MultiHeadAttention(nn.Module): keys = torch.stack(torch.split(keys, split_size, dim=2), dim=0) # [h, N, T_k, num_units/h] values = torch.stack(torch.split(values, split_size, dim=2), dim=0) # [h, N, T_k, num_units/h] - # score = softmax(QK^T / (d_k ** 0.5)) + # score = softmax(QK^T / (d_k**0.5)) scores = torch.matmul(queries, keys.transpose(2, 3)) # [h, N, T_q, T_k] scores = scores / (self.key_dim**0.5) scores = F.softmax(scores, dim=3) diff --git a/TTS/tts/models/base_tacotron.py b/TTS/tts/models/base_tacotron.py index 54939c61..c0f4c339 100644 --- a/TTS/tts/models/base_tacotron.py +++ b/TTS/tts/models/base_tacotron.py @@ -1,6 +1,6 @@ import copy from abc import abstractmethod -from typing import Dict +from typing import Dict, Tuple import torch from coqpit import Coqpit @@ -10,7 +10,9 @@ from TTS.tts.layers.losses import TacotronLoss from TTS.tts.models.base_tts import BaseTTS from TTS.tts.utils.helpers import sequence_mask from TTS.tts.utils.speakers import SpeakerManager +from TTS.tts.utils.synthesis import synthesis from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.tts.utils.visual import plot_alignment, plot_spectrogram from TTS.utils.generic_utils import format_aux_input from TTS.utils.io import load_fsspec from TTS.utils.training import gradual_training_scheduler @@ -47,6 +49,11 @@ class BaseTacotron(BaseTTS): self.decoder_in_features += self.gst.gst_embedding_dim # add gst embedding dim self.gst_layer = None + # Capacitron + if self.capacitron_vae and self.use_capacitron_vae: + self.decoder_in_features += self.capacitron_vae.capacitron_VAE_embedding_dim # add capacitron embedding dim + self.capacitron_vae_layer = None + # additional layers self.decoder_backward = None self.coarse_decoder = None @@ -125,6 +132,53 @@ class BaseTacotron(BaseTTS): speaker_manager = SpeakerManager.init_from_config(config) return BaseTacotron(config, ap, tokenizer, speaker_manager) + ########################## + # TEST AND LOG FUNCTIONS # + ########################## + + def test_run(self, assets: Dict) -> Tuple[Dict, Dict]: + """Generic test run for `tts` models used by `Trainer`. + + You can override this for a different behaviour. + + Args: + assets (dict): A dict of training assets. For `tts` models, it must include `{'audio_processor': ap}`. + + Returns: + Tuple[Dict, Dict]: Test figures and audios to be projected to Tensorboard. + """ + print(" | > Synthesizing test sentences.") + test_audios = {} + test_figures = {} + test_sentences = self.config.test_sentences + aux_inputs = self._get_test_aux_input() + for idx, sen in enumerate(test_sentences): + outputs_dict = synthesis( + self, + sen, + self.config, + "cuda" in str(next(self.parameters()).device), + speaker_id=aux_inputs["speaker_id"], + d_vector=aux_inputs["d_vector"], + style_wav=aux_inputs["style_wav"], + use_griffin_lim=True, + do_trim_silence=False, + ) + test_audios["{}-audio".format(idx)] = outputs_dict["wav"] + test_figures["{}-prediction".format(idx)] = plot_spectrogram( + outputs_dict["outputs"]["model_outputs"], self.ap, output_fig=False + ) + test_figures["{}-alignment".format(idx)] = plot_alignment( + outputs_dict["outputs"]["alignments"], output_fig=False + ) + return {"figures": test_figures, "audios": test_audios} + + def test_log( + self, outputs: dict, logger: "Logger", assets: dict, steps: int # pylint: disable=unused-argument + ) -> None: + logger.test_audios(steps, outputs["audios"], self.ap.sample_rate) + logger.test_figures(steps, outputs["figures"]) + ############################# # COMMON COMPUTE FUNCTIONS ############################# @@ -160,7 +214,9 @@ class BaseTacotron(BaseTTS): ) # scale_factor = self.decoder.r_init / self.decoder.r alignments_backward = torch.nn.functional.interpolate( - alignments_backward.transpose(1, 2), size=alignments.shape[1], mode="nearest" + alignments_backward.transpose(1, 2), + size=alignments.shape[1], + mode="nearest", ).transpose(1, 2) decoder_outputs_backward = decoder_outputs_backward.transpose(1, 2) decoder_outputs_backward = decoder_outputs_backward[:, :T, :] @@ -193,6 +249,25 @@ class BaseTacotron(BaseTTS): inputs = self._concat_speaker_embedding(inputs, gst_outputs) return inputs + def compute_capacitron_VAE_embedding(self, inputs, reference_mel_info, text_info=None, speaker_embedding=None): + """Capacitron Variational Autoencoder""" + (VAE_outputs, posterior_distribution, prior_distribution, capacitron_beta,) = self.capacitron_vae_layer( + reference_mel_info, + text_info, + speaker_embedding, # pylint: disable=not-callable + ) + + VAE_outputs = VAE_outputs.to(inputs.device) + encoder_output = self._concat_speaker_embedding( + inputs, VAE_outputs + ) # concatenate to the output of the basic tacotron encoder + return ( + encoder_output, + posterior_distribution, + prior_distribution, + capacitron_beta, + ) + @staticmethod def _add_speaker_embedding(outputs, embedded_speakers): embedded_speakers_ = embedded_speakers.expand(outputs.size(0), outputs.size(1), -1) diff --git a/TTS/tts/models/tacotron.py b/TTS/tts/models/tacotron.py index 8341f5bb..7bfa6ba5 100644 --- a/TTS/tts/models/tacotron.py +++ b/TTS/tts/models/tacotron.py @@ -1,11 +1,13 @@ # coding: utf-8 -from typing import Dict, List, Union +from typing import Dict, List, Tuple, Union import torch from torch import nn from torch.cuda.amp.autocast_mode import autocast +from trainer.trainer_utils import get_optimizer, get_scheduler +from TTS.tts.layers.tacotron.capacitron_layers import CapacitronVAE from TTS.tts.layers.tacotron.gst_layers import GST from TTS.tts.layers.tacotron.tacotron import Decoder, Encoder, PostCBHG from TTS.tts.models.base_tacotron import BaseTacotron @@ -13,6 +15,7 @@ from TTS.tts.utils.measures import alignment_diagonal_score from TTS.tts.utils.speakers import SpeakerManager from TTS.tts.utils.text.tokenizer import TTSTokenizer from TTS.tts.utils.visual import plot_alignment, plot_spectrogram +from TTS.utils.capacitron_optimizer import CapacitronOptimizer class Tacotron(BaseTacotron): @@ -51,6 +54,9 @@ class Tacotron(BaseTacotron): if self.use_gst: self.decoder_in_features += self.gst.gst_embedding_dim + if self.use_capacitron_vae: + self.decoder_in_features += self.capacitron_vae.capacitron_VAE_embedding_dim + # embedding layer self.embedding = nn.Embedding(self.num_chars, 256, padding_idx=0) self.embedding.weight.data.normal_(0, 0.3) @@ -90,6 +96,20 @@ class Tacotron(BaseTacotron): gst_embedding_dim=self.gst.gst_embedding_dim, ) + # Capacitron layers + if self.capacitron_vae and self.use_capacitron_vae: + self.capacitron_vae_layer = CapacitronVAE( + num_mel=self.decoder_output_dim, + encoder_output_dim=self.encoder_in_features, + capacitron_VAE_embedding_dim=self.capacitron_vae.capacitron_VAE_embedding_dim, + speaker_embedding_dim=self.embedded_speaker_dim + if self.use_speaker_embedding and self.capacitron_vae.capacitron_use_speaker_embedding + else None, + text_summary_embedding_dim=self.capacitron_vae.capacitron_text_summary_embedding_dim + if self.capacitron_vae.capacitron_use_text_summary_embeddings + else None, + ) + # backward pass decoder if self.bidirectional_decoder: self._init_backward_decoder() @@ -146,6 +166,19 @@ class Tacotron(BaseTacotron): # B x 1 x speaker_embed_dim embedded_speakers = torch.unsqueeze(aux_input["d_vectors"], 1) encoder_outputs = self._concat_speaker_embedding(encoder_outputs, embedded_speakers) + # Capacitron + if self.capacitron_vae and self.use_capacitron_vae: + # B x capacitron_VAE_embedding_dim + encoder_outputs, *capacitron_vae_outputs = self.compute_capacitron_VAE_embedding( + encoder_outputs, + reference_mel_info=[mel_specs, mel_lengths], + text_info=[inputs, text_lengths] + if self.capacitron_vae.capacitron_use_text_summary_embeddings + else None, + speaker_embedding=embedded_speakers if self.capacitron_vae.capacitron_use_speaker_embedding else None, + ) + else: + capacitron_vae_outputs = None # decoder_outputs: B x decoder_in_features x T_out # alignments: B x T_in x encoder_in_features # stop_tokens: B x T_in @@ -178,6 +211,7 @@ class Tacotron(BaseTacotron): "decoder_outputs": decoder_outputs, "alignments": alignments, "stop_tokens": stop_tokens, + "capacitron_vae_outputs": capacitron_vae_outputs, } ) return outputs @@ -190,6 +224,28 @@ class Tacotron(BaseTacotron): if self.gst and self.use_gst: # B x gst_dim encoder_outputs = self.compute_gst(encoder_outputs, aux_input["style_mel"], aux_input["d_vectors"]) + if self.capacitron_vae and self.use_capacitron_vae: + if aux_input["style_text"] is not None: + style_text_embedding = self.embedding(aux_input["style_text"]) + style_text_length = torch.tensor([style_text_embedding.size(1)], dtype=torch.int64).to( + encoder_outputs.device + ) # pylint: disable=not-callable + reference_mel_length = ( + torch.tensor([aux_input["style_mel"].size(1)], dtype=torch.int64).to(encoder_outputs.device) + if aux_input["style_mel"] is not None + else None + ) # pylint: disable=not-callable + # B x capacitron_VAE_embedding_dim + encoder_outputs, *_ = self.compute_capacitron_VAE_embedding( + encoder_outputs, + reference_mel_info=[aux_input["style_mel"], reference_mel_length] + if aux_input["style_mel"] is not None + else None, + text_info=[style_text_embedding, style_text_length] if aux_input["style_text"] is not None else None, + speaker_embedding=aux_input["d_vectors"] + if self.capacitron_vae.capacitron_use_speaker_embedding + else None, + ) if self.num_speakers > 1: if not self.use_d_vector_file: # B x 1 x speaker_embed_dim @@ -215,12 +271,19 @@ class Tacotron(BaseTacotron): } return outputs - def train_step(self, batch, criterion): - """Perform a single training step by fetching the right set if samples from the batch. + def before_backward_pass(self, loss_dict, optimizer) -> None: + # Extracting custom training specific operations for capacitron + # from the trainer + if self.use_capacitron_vae: + loss_dict["capacitron_vae_beta_loss"].backward() + optimizer.first_step() + + def train_step(self, batch: Dict, criterion: torch.nn.Module) -> Tuple[Dict, Dict]: + """Perform a single training step by fetching the right set of samples from the batch. Args: - batch ([type]): [description] - criterion ([type]): [description] + batch ([Dict]): A dictionary of input tensors. + criterion ([torch.nn.Module]): Callable criterion to compute model loss. """ text_input = batch["text_input"] text_lengths = batch["text_lengths"] @@ -232,14 +295,8 @@ class Tacotron(BaseTacotron): speaker_ids = batch["speaker_ids"] d_vectors = batch["d_vectors"] - # forward pass model - outputs = self.forward( - text_input, - text_lengths, - mel_input, - mel_lengths, - aux_input={"speaker_ids": speaker_ids, "d_vectors": d_vectors}, - ) + aux_input = {"speaker_ids": speaker_ids, "d_vectors": d_vectors} + outputs = self.forward(text_input, text_lengths, mel_input, mel_lengths, aux_input) # set the [alignment] lengths wrt reduction factor for guided attention if mel_lengths.max() % self.decoder.r != 0: @@ -249,9 +306,6 @@ class Tacotron(BaseTacotron): else: alignment_lengths = mel_lengths // self.decoder.r - aux_input = {"speaker_ids": speaker_ids, "d_vectors": d_vectors} - outputs = self.forward(text_input, text_lengths, mel_input, mel_lengths, aux_input) - # compute loss with autocast(enabled=False): # use float32 for the criterion loss_dict = criterion( @@ -262,6 +316,7 @@ class Tacotron(BaseTacotron): outputs["stop_tokens"].float(), stop_targets.float(), stop_target_lengths, + outputs["capacitron_vae_outputs"] if self.capacitron_vae else None, mel_lengths, None if outputs["decoder_outputs_backward"] is None else outputs["decoder_outputs_backward"].float(), outputs["alignments"].float(), @@ -275,6 +330,25 @@ class Tacotron(BaseTacotron): loss_dict["align_error"] = align_error return outputs, loss_dict + def get_optimizer(self) -> List: + if self.use_capacitron_vae: + return CapacitronOptimizer(self.config, self.named_parameters()) + return get_optimizer(self.config.optimizer, self.config.optimizer_params, self.config.lr, self) + + def get_scheduler(self, optimizer: object): + opt = optimizer.primary_optimizer if self.use_capacitron_vae else optimizer + return get_scheduler(self.config.lr_scheduler, self.config.lr_scheduler_params, opt) + + def before_gradient_clipping(self): + if self.use_capacitron_vae: + # Capacitron model specific gradient clipping + model_params_to_clip = [] + for name, param in self.named_parameters(): + if param.requires_grad: + if name != "capacitron_vae_layer.beta": + model_params_to_clip.append(param) + torch.nn.utils.clip_grad_norm_(model_params_to_clip, self.capacitron_vae.capacitron_grad_clip) + def _create_logs(self, batch, outputs, ap): postnet_outputs = outputs["model_outputs"] decoder_outputs = outputs["decoder_outputs"] diff --git a/TTS/tts/models/tacotron2.py b/TTS/tts/models/tacotron2.py index d4e665e3..95d339f1 100644 --- a/TTS/tts/models/tacotron2.py +++ b/TTS/tts/models/tacotron2.py @@ -5,7 +5,9 @@ from typing import Dict, List, Union import torch from torch import nn from torch.cuda.amp.autocast_mode import autocast +from trainer.trainer_utils import get_optimizer, get_scheduler +from TTS.tts.layers.tacotron.capacitron_layers import CapacitronVAE from TTS.tts.layers.tacotron.gst_layers import GST from TTS.tts.layers.tacotron.tacotron2 import Decoder, Encoder, Postnet from TTS.tts.models.base_tacotron import BaseTacotron @@ -13,6 +15,7 @@ from TTS.tts.utils.measures import alignment_diagonal_score from TTS.tts.utils.speakers import SpeakerManager from TTS.tts.utils.text.tokenizer import TTSTokenizer from TTS.tts.utils.visual import plot_alignment, plot_spectrogram +from TTS.utils.capacitron_optimizer import CapacitronOptimizer class Tacotron2(BaseTacotron): @@ -65,6 +68,9 @@ class Tacotron2(BaseTacotron): if self.use_gst: self.decoder_in_features += self.gst.gst_embedding_dim + if self.use_capacitron_vae: + self.decoder_in_features += self.capacitron_vae.capacitron_VAE_embedding_dim + # embedding layer self.embedding = nn.Embedding(self.num_chars, 512, padding_idx=0) @@ -102,6 +108,20 @@ class Tacotron2(BaseTacotron): gst_embedding_dim=self.gst.gst_embedding_dim, ) + # Capacitron VAE Layers + if self.capacitron_vae and self.use_capacitron_vae: + self.capacitron_vae_layer = CapacitronVAE( + num_mel=self.decoder_output_dim, + encoder_output_dim=self.encoder_in_features, + capacitron_VAE_embedding_dim=self.capacitron_vae.capacitron_VAE_embedding_dim, + speaker_embedding_dim=self.embedded_speaker_dim + if self.capacitron_vae.capacitron_use_speaker_embedding + else None, + text_summary_embedding_dim=self.capacitron_vae.capacitron_text_summary_embedding_dim + if self.capacitron_vae.capacitron_use_text_summary_embeddings + else None, + ) + # backward pass decoder if self.bidirectional_decoder: self._init_backward_decoder() @@ -166,6 +186,20 @@ class Tacotron2(BaseTacotron): embedded_speakers = torch.unsqueeze(aux_input["d_vectors"], 1) encoder_outputs = self._concat_speaker_embedding(encoder_outputs, embedded_speakers) + # capacitron + if self.capacitron_vae and self.use_capacitron_vae: + # B x capacitron_VAE_embedding_dim + encoder_outputs, *capacitron_vae_outputs = self.compute_capacitron_VAE_embedding( + encoder_outputs, + reference_mel_info=[mel_specs, mel_lengths], + text_info=[embedded_inputs.transpose(1, 2), text_lengths] + if self.capacitron_vae.capacitron_use_text_summary_embeddings + else None, + speaker_embedding=embedded_speakers if self.capacitron_vae.capacitron_use_speaker_embedding else None, + ) + else: + capacitron_vae_outputs = None + encoder_outputs = encoder_outputs * input_mask.unsqueeze(2).expand_as(encoder_outputs) # B x mel_dim x T_out -- B x T_out//r x T_in -- B x T_out//r @@ -197,6 +231,7 @@ class Tacotron2(BaseTacotron): "decoder_outputs": decoder_outputs, "alignments": alignments, "stop_tokens": stop_tokens, + "capacitron_vae_outputs": capacitron_vae_outputs, } ) return outputs @@ -217,6 +252,29 @@ class Tacotron2(BaseTacotron): # B x gst_dim encoder_outputs = self.compute_gst(encoder_outputs, aux_input["style_mel"], aux_input["d_vectors"]) + if self.capacitron_vae and self.use_capacitron_vae: + if aux_input["style_text"] is not None: + style_text_embedding = self.embedding(aux_input["style_text"]) + style_text_length = torch.tensor([style_text_embedding.size(1)], dtype=torch.int64).to( + encoder_outputs.device + ) # pylint: disable=not-callable + reference_mel_length = ( + torch.tensor([aux_input["style_mel"].size(1)], dtype=torch.int64).to(encoder_outputs.device) + if aux_input["style_mel"] is not None + else None + ) # pylint: disable=not-callable + # B x capacitron_VAE_embedding_dim + encoder_outputs, *_ = self.compute_capacitron_VAE_embedding( + encoder_outputs, + reference_mel_info=[aux_input["style_mel"], reference_mel_length] + if aux_input["style_mel"] is not None + else None, + text_info=[style_text_embedding, style_text_length] if aux_input["style_text"] is not None else None, + speaker_embedding=aux_input["d_vectors"] + if self.capacitron_vae.capacitron_use_speaker_embedding + else None, + ) + if self.num_speakers > 1: if not self.use_d_vector_file: embedded_speakers = self.speaker_embedding(aux_input["speaker_ids"])[None] @@ -242,6 +300,13 @@ class Tacotron2(BaseTacotron): } return outputs + def before_backward_pass(self, loss_dict, optimizer) -> None: + # Extracting custom training specific operations for capacitron + # from the trainer + if self.use_capacitron_vae: + loss_dict["capacitron_vae_beta_loss"].backward() + optimizer.first_step() + def train_step(self, batch: Dict, criterion: torch.nn.Module): """A single training step. Forward pass and loss computation. @@ -258,14 +323,8 @@ class Tacotron2(BaseTacotron): speaker_ids = batch["speaker_ids"] d_vectors = batch["d_vectors"] - # forward pass model - outputs = self.forward( - text_input, - text_lengths, - mel_input, - mel_lengths, - aux_input={"speaker_ids": speaker_ids, "d_vectors": d_vectors}, - ) + aux_input = {"speaker_ids": speaker_ids, "d_vectors": d_vectors} + outputs = self.forward(text_input, text_lengths, mel_input, mel_lengths, aux_input) # set the [alignment] lengths wrt reduction factor for guided attention if mel_lengths.max() % self.decoder.r != 0: @@ -275,9 +334,6 @@ class Tacotron2(BaseTacotron): else: alignment_lengths = mel_lengths // self.decoder.r - aux_input = {"speaker_ids": speaker_ids, "d_vectors": d_vectors} - outputs = self.forward(text_input, text_lengths, mel_input, mel_lengths, aux_input) - # compute loss with autocast(enabled=False): # use float32 for the criterion loss_dict = criterion( @@ -288,6 +344,7 @@ class Tacotron2(BaseTacotron): outputs["stop_tokens"].float(), stop_targets.float(), stop_target_lengths, + outputs["capacitron_vae_outputs"] if self.capacitron_vae else None, mel_lengths, None if outputs["decoder_outputs_backward"] is None else outputs["decoder_outputs_backward"].float(), outputs["alignments"].float(), @@ -301,6 +358,25 @@ class Tacotron2(BaseTacotron): loss_dict["align_error"] = align_error return outputs, loss_dict + def get_optimizer(self) -> List: + if self.use_capacitron_vae: + return CapacitronOptimizer(self.config, self.named_parameters()) + return get_optimizer(self.config.optimizer, self.config.optimizer_params, self.config.lr, self) + + def get_scheduler(self, optimizer: object): + opt = optimizer.primary_optimizer if self.use_capacitron_vae else optimizer + return get_scheduler(self.config.lr_scheduler, self.config.lr_scheduler_params, opt) + + def before_gradient_clipping(self): + if self.use_capacitron_vae: + # Capacitron model specific gradient clipping + model_params_to_clip = [] + for name, param in self.named_parameters(): + if param.requires_grad: + if name != "capacitron_vae_layer.beta": + model_params_to_clip.append(param) + torch.nn.utils.clip_grad_norm_(model_params_to_clip, self.capacitron_vae.capacitron_grad_clip) + def _create_logs(self, batch, outputs, ap): """Create dashboard log information.""" postnet_outputs = outputs["model_outputs"] diff --git a/TTS/tts/utils/synthesis.py b/TTS/tts/utils/synthesis.py index f9e13251..a74300dc 100644 --- a/TTS/tts/utils/synthesis.py +++ b/TTS/tts/utils/synthesis.py @@ -26,6 +26,7 @@ def run_model_torch( inputs: torch.Tensor, speaker_id: int = None, style_mel: torch.Tensor = None, + style_text: str = None, d_vector: torch.Tensor = None, language_id: torch.Tensor = None, ) -> Dict: @@ -53,6 +54,7 @@ def run_model_torch( "speaker_ids": speaker_id, "d_vectors": d_vector, "style_mel": style_mel, + "style_text": style_text, "language_ids": language_id, }, ) @@ -115,6 +117,7 @@ def synthesis( use_cuda, speaker_id=None, style_wav=None, + style_text=None, use_griffin_lim=False, do_trim_silence=False, d_vector=None, @@ -140,7 +143,12 @@ def synthesis( Speaker ID passed to the speaker embedding layer in multi-speaker model. Defaults to None. style_wav (str | Dict[str, float]): - Path or tensor to/of a waveform used for computing the style embedding. Defaults to None. + Path or tensor to/of a waveform used for computing the style embedding based on GST or Capacitron. + Defaults to None, meaning that Capacitron models will sample from the prior distribution to + generate random but realistic prosody. + + style_text (str): + Transcription of style_wav for Capacitron models. Defaults to None. enable_eos_bos_chars (bool): enable special chars for end of sentence and start of sentence. Defaults to False. @@ -154,13 +162,19 @@ def synthesis( language_id (int): Language ID passed to the language embedding layer in multi-langual model. Defaults to None. """ - # GST processing + # GST or Capacitron processing + # TODO: need to handle the case of setting both gst and capacitron to true somewhere style_mel = None if CONFIG.has("gst") and CONFIG.gst and style_wav is not None: if isinstance(style_wav, dict): style_mel = style_wav else: style_mel = compute_style_mel(style_wav, model.ap, cuda=use_cuda) + + if CONFIG.has("capacitron_vae") and CONFIG.use_capacitron_vae and style_wav is not None: + style_mel = compute_style_mel(style_wav, model.ap, cuda=use_cuda) + style_mel = style_mel.transpose(1, 2) # [1, time, depth] + # convert text to sequence of token IDs text_inputs = np.asarray( model.tokenizer.text_to_ids(text, language=language_id), @@ -177,11 +191,28 @@ def synthesis( language_id = id_to_torch(language_id, cuda=use_cuda) if not isinstance(style_mel, dict): + # GST or Capacitron style mel style_mel = numpy_to_torch(style_mel, torch.float, cuda=use_cuda) + if style_text is not None: + style_text = np.asarray( + model.tokenizer.text_to_ids(style_text, language=language_id), + dtype=np.int32, + ) + style_text = numpy_to_torch(style_text, torch.long, cuda=use_cuda) + style_text = style_text.unsqueeze(0) + text_inputs = numpy_to_torch(text_inputs, torch.long, cuda=use_cuda) text_inputs = text_inputs.unsqueeze(0) # synthesize voice - outputs = run_model_torch(model, text_inputs, speaker_id, style_mel, d_vector=d_vector, language_id=language_id) + outputs = run_model_torch( + model, + text_inputs, + speaker_id, + style_mel, + style_text, + d_vector=d_vector, + language_id=language_id, + ) model_outputs = outputs["model_outputs"] model_outputs = model_outputs[0].data.cpu().numpy() alignments = outputs["alignments"] diff --git a/TTS/utils/capacitron_optimizer.py b/TTS/utils/capacitron_optimizer.py new file mode 100644 index 00000000..c9f075af --- /dev/null +++ b/TTS/utils/capacitron_optimizer.py @@ -0,0 +1,65 @@ +from typing import Generator + +from trainer.trainer_utils import get_optimizer + + +class CapacitronOptimizer: + """Double optimizer class for the Capacitron model.""" + + def __init__(self, config: dict, model_params: Generator) -> None: + self.primary_params, self.secondary_params = self.split_model_parameters(model_params) + + optimizer_names = list(config.optimizer_params.keys()) + optimizer_parameters = list(config.optimizer_params.values()) + + self.primary_optimizer = get_optimizer( + optimizer_names[0], + optimizer_parameters[0], + config.lr, + parameters=self.primary_params, + ) + + self.secondary_optimizer = get_optimizer( + optimizer_names[1], + self.extract_optimizer_parameters(optimizer_parameters[1]), + optimizer_parameters[1]["lr"], + parameters=self.secondary_params, + ) + + self.param_groups = self.primary_optimizer.param_groups + + def first_step(self): + self.secondary_optimizer.step() + self.secondary_optimizer.zero_grad() + self.primary_optimizer.zero_grad() + + def step(self): + self.primary_optimizer.step() + + def zero_grad(self): + self.primary_optimizer.zero_grad() + self.secondary_optimizer.zero_grad() + + def load_state_dict(self, state_dict): + self.primary_optimizer.load_state_dict(state_dict[0]) + self.secondary_optimizer.load_state_dict(state_dict[1]) + + def state_dict(self): + return [self.primary_optimizer.state_dict(), self.secondary_optimizer.state_dict()] + + @staticmethod + def split_model_parameters(model_params: Generator) -> list: + primary_params = [] + secondary_params = [] + for name, param in model_params: + if param.requires_grad: + if name == "capacitron_vae_layer.beta": + secondary_params.append(param) + else: + primary_params.append(param) + return [iter(primary_params), iter(secondary_params)] + + @staticmethod + def extract_optimizer_parameters(params: dict) -> dict: + """Extract parameters that are not the learning rate""" + return {k: v for k, v in params.items() if k != "lr"} diff --git a/TTS/utils/io.py b/TTS/utils/io.py index 304df5ed..0b32f77a 100644 --- a/TTS/utils/io.py +++ b/TTS/utils/io.py @@ -106,6 +106,8 @@ def save_model(config, model, optimizer, scaler, current_step, epoch, output_pat model_state = model.state_dict() if isinstance(optimizer, list): optimizer_state = [optim.state_dict() for optim in optimizer] + elif optimizer.__class__.__name__ == "CapacitronOptimizer": + optimizer_state = [optimizer.primary_optimizer.state_dict(), optimizer.secondary_optimizer.state_dict()] else: optimizer_state = optimizer.state_dict() if optimizer is not None else None diff --git a/TTS/utils/synthesizer.py b/TTS/utils/synthesizer.py index 2c288613..9ce528a3 100644 --- a/TTS/utils/synthesizer.py +++ b/TTS/utils/synthesizer.py @@ -1,5 +1,5 @@ import time -from typing import List, Union +from typing import List import numpy as np import pysbd @@ -178,8 +178,9 @@ class Synthesizer(object): text: str = "", speaker_name: str = "", language_name: str = "", - speaker_wav: Union[str, List[str]] = None, + speaker_wav=None, style_wav=None, + style_text=None, reference_wav=None, reference_speaker_name=None, ) -> List[int]: @@ -191,6 +192,7 @@ class Synthesizer(object): language_name (str, optional): language id for multi-language models. Defaults to "". speaker_wav (Union[str, List[str]], optional): path to the speaker wav. Defaults to None. style_wav ([type], optional): style waveform for GST. Defaults to None. + style_text ([type], optional): transcription of style_wav for Capacitron. Defaults to None. reference_wav ([type], optional): reference waveform for voice conversion. Defaults to None. reference_speaker_name ([type], optional): spekaer id of reference waveform. Defaults to None. Returns: @@ -273,10 +275,11 @@ class Synthesizer(object): CONFIG=self.tts_config, use_cuda=self.use_cuda, speaker_id=speaker_id, - language_id=language_id, style_wav=style_wav, + style_text=style_text, use_griffin_lim=use_gl, d_vector=speaker_embedding, + language_id=language_id, ) waveform = outputs["wav"] mel_postnet_spec = outputs["outputs"]["model_outputs"][0].detach().cpu().numpy() diff --git a/recipes/blizzard2013/README.md b/recipes/blizzard2013/README.md new file mode 100644 index 00000000..9dcb7397 --- /dev/null +++ b/recipes/blizzard2013/README.md @@ -0,0 +1,12 @@ +# How to get the Blizzard 2013 Dataset + +The Capacitron model is a variational encoder extension of standard Tacotron based models to model prosody. + +To take full advantage of the model, it is advised to train the model with a dataset that contains a significant amount of prosodic information in the utterances. A tested candidate for such applications is the blizzard2013 dataset from the Blizzard Challenge, containing many hours of high quality audio book recordings. + +To get a license and download link for this dataset, you need to visit the [website](https://www.cstr.ed.ac.uk/projects/blizzard/2013/lessac_blizzard2013/license.html) of the Centre for Speech Technology Research of the University of Edinburgh. + +You get access to the raw dataset in a couple of days. There are a few preprocessing steps you need to do to be able to use the high fidelity dataset. + +1. Get the forced time alignments for the blizzard dataset from [here](https://github.com/mueller91/tts_alignments). +2. Segment the high fidelity audio-book files based on the instructions [here](https://github.com/Tomiinek/Blizzard2013_Segmentation). \ No newline at end of file diff --git a/recipes/blizzard2013/tacotron1-Capacitron/train_capacitron_t1.py b/recipes/blizzard2013/tacotron1-Capacitron/train_capacitron_t1.py new file mode 100644 index 00000000..52c6098f --- /dev/null +++ b/recipes/blizzard2013/tacotron1-Capacitron/train_capacitron_t1.py @@ -0,0 +1,101 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.config.shared_configs import BaseAudioConfig +from TTS.tts.configs.shared_configs import BaseDatasetConfig, CapacitronVAEConfig +from TTS.tts.configs.tacotron_config import TacotronConfig +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.tacotron import Tacotron +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor + +output_path = os.path.dirname(os.path.abspath(__file__)) + +data_path = "/srv/data/" + +# Using LJSpeech like dataset processing for the blizzard dataset +dataset_config = BaseDatasetConfig(name="ljspeech", meta_file_train="metadata.csv", path=data_path) + +audio_config = BaseAudioConfig( + sample_rate=24000, + do_trim_silence=True, + trim_db=60.0, + signal_norm=True, + mel_fmin=80.0, + mel_fmax=12000, + spec_gain=20.0, + log_func="np.log10", + ref_level_db=20, + preemphasis=0.0, + min_level_db=-100, +) + +# Using the standard Capacitron config +capacitron_config = CapacitronVAEConfig(capacitron_VAE_loss_alpha=1.0) + +config = TacotronConfig( + run_name="Blizzard-Capacitron-T1", + audio=audio_config, + capacitron_vae=capacitron_config, + use_capacitron_vae=True, + batch_size=128, # Tune this to your gpu + max_audio_len=6 * 24000, # Tune this to your gpu + min_audio_len=0.5 * 24000, + eval_batch_size=16, + num_loader_workers=12, + num_eval_loader_workers=8, + precompute_num_workers=24, + run_eval=True, + test_delay_epochs=5, + ga_alpha=0.0, + r=2, + optimizer="CapacitronOptimizer", + optimizer_params={"RAdam": {"betas": [0.9, 0.998], "weight_decay": 1e-6}, "SGD": {"lr": 1e-5, "momentum": 0.9}}, + attention_type="graves", + attention_heads=5, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="en-us", + phonemizer="espeak", + phoneme_cache_path=os.path.join(data_path, "phoneme_cache"), + stopnet_pos_weight=15, + print_step=50, + print_eval=True, + mixed_precision=False, + output_path=output_path, + datasets=[dataset_config], + lr=1e-3, + lr_scheduler="StepwiseGradualLR", + lr_scheduler_params={"gradual_learning_rates": [[0, 1e-3], [2e4, 5e-4], [4e5, 3e-4], [6e4, 1e-4], [8e4, 5e-5]]}, + scheduler_after_epoch=False, # scheduler doesn't work without this flag + # Need to experiment with these below for capacitron + loss_masking=False, + decoder_loss_alpha=1.0, + postnet_loss_alpha=1.0, + postnet_diff_spec_alpha=0.0, + decoder_diff_spec_alpha=0.0, + decoder_ssim_alpha=0.0, + postnet_ssim_alpha=0.0, +) + +ap = AudioProcessor(**config.audio.to_dict()) + +tokenizer, config = TTSTokenizer.init_from_config(config) + +train_samples, eval_samples = load_tts_samples(dataset_config, eval_split=True) + +model = Tacotron(config, ap, tokenizer, speaker_manager=None) + +trainer = Trainer( + TrainerArgs(), + config, + output_path, + model=model, + train_samples=train_samples, + eval_samples=eval_samples, +) + +# ๐Ÿš€ +trainer.fit() diff --git a/recipes/blizzard2013/tacotron2-Capacitron/train_capacitron_t2.py b/recipes/blizzard2013/tacotron2-Capacitron/train_capacitron_t2.py new file mode 100644 index 00000000..cf27b9df --- /dev/null +++ b/recipes/blizzard2013/tacotron2-Capacitron/train_capacitron_t2.py @@ -0,0 +1,117 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.config.shared_configs import BaseAudioConfig +from TTS.tts.configs.shared_configs import BaseDatasetConfig, CapacitronVAEConfig +from TTS.tts.configs.tacotron2_config import Tacotron2Config +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.tacotron2 import Tacotron2 +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor + +output_path = os.path.dirname(os.path.abspath(__file__)) + +data_path = "/srv/data/blizzard2013/segmented" + +# Using LJSpeech like dataset processing for the blizzard dataset +dataset_config = BaseDatasetConfig( + name="ljspeech", + meta_file_train="metadata.csv", + path=data_path, +) + +audio_config = BaseAudioConfig( + sample_rate=24000, + do_trim_silence=True, + trim_db=60.0, + signal_norm=True, + mel_fmin=80.0, + mel_fmax=12000, + spec_gain=25.0, + log_func="np.log10", + ref_level_db=20, + preemphasis=0.0, + min_level_db=-100, +) + +# Using the standard Capacitron config +capacitron_config = CapacitronVAEConfig(capacitron_VAE_loss_alpha=1.0) + +config = Tacotron2Config( + run_name="Blizzard-Capacitron-T2", + audio=audio_config, + capacitron_vae=capacitron_config, + use_capacitron_vae=True, + batch_size=246, # Tune this to your gpu + max_audio_len=6 * 24000, # Tune this to your gpu + min_audio_len=1 * 24000, + eval_batch_size=16, + num_loader_workers=12, + num_eval_loader_workers=8, + precompute_num_workers=24, + run_eval=True, + test_delay_epochs=5, + ga_alpha=0.0, + r=2, + optimizer="CapacitronOptimizer", + optimizer_params={"RAdam": {"betas": [0.9, 0.998], "weight_decay": 1e-6}, "SGD": {"lr": 1e-5, "momentum": 0.9}}, + attention_type="dynamic_convolution", + grad_clip=0.0, # Important! We overwrite the standard grad_clip with capacitron_grad_clip + double_decoder_consistency=False, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="en-us", + phonemizer="espeak", + phoneme_cache_path=os.path.join(data_path, "phoneme_cache"), + stopnet_pos_weight=15, + print_step=25, + print_eval=True, + mixed_precision=False, + output_path=output_path, + datasets=[dataset_config], + lr=1e-3, + lr_scheduler="StepwiseGradualLR", + lr_scheduler_params={ + "gradual_learning_rates": [ + [0, 1e-3], + [2e4, 5e-4], + [4e5, 3e-4], + [6e4, 1e-4], + [8e4, 5e-5], + ] + }, + scheduler_after_epoch=False, # scheduler doesn't work without this flag + # dashboard_logger='wandb', + # sort_by_audio_len=True, + seq_len_norm=True, + # Need to experiment with these below for capacitron + loss_masking=False, + decoder_loss_alpha=1.0, + postnet_loss_alpha=1.0, + postnet_diff_spec_alpha=0.0, + decoder_diff_spec_alpha=0.0, + decoder_ssim_alpha=0.0, + postnet_ssim_alpha=0.0, +) + +ap = AudioProcessor(**config.audio.to_dict()) + +tokenizer, config = TTSTokenizer.init_from_config(config) + +train_samples, eval_samples = load_tts_samples(dataset_config, eval_split=True) + +model = Tacotron2(config, ap, tokenizer, speaker_manager=None) + +trainer = Trainer( + TrainerArgs(), + config, + output_path, + model=model, + train_samples=train_samples, + eval_samples=eval_samples, + training_assets={"audio_processor": ap}, +) + +trainer.fit() diff --git a/recipes/ljspeech/tacotron2-Capacitron/train_capacitron_t2.py b/recipes/ljspeech/tacotron2-Capacitron/train_capacitron_t2.py new file mode 100644 index 00000000..6bb0aed7 --- /dev/null +++ b/recipes/ljspeech/tacotron2-Capacitron/train_capacitron_t2.py @@ -0,0 +1,115 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.config.shared_configs import BaseAudioConfig +from TTS.tts.configs.shared_configs import BaseDatasetConfig, CapacitronVAEConfig +from TTS.tts.configs.tacotron2_config import Tacotron2Config +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.tacotron2 import Tacotron2 +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor + +output_path = os.path.dirname(os.path.abspath(__file__)) + +data_path = "/srv/data/" + +# Using LJSpeech like dataset processing for the blizzard dataset +dataset_config = BaseDatasetConfig( + name="ljspeech", + meta_file_train="metadata.csv", + path=data_path, +) + +audio_config = BaseAudioConfig( + sample_rate=22050, + do_trim_silence=True, + trim_db=60.0, + signal_norm=False, + mel_fmin=0.0, + mel_fmax=11025, + spec_gain=1.0, + log_func="np.log", + ref_level_db=20, + preemphasis=0.0, +) + +# Using the standard Capacitron config +capacitron_config = CapacitronVAEConfig(capacitron_VAE_loss_alpha=1.0, capacitron_capacity=50) + +config = Tacotron2Config( + run_name="Capacitron-Tacotron2", + audio=audio_config, + capacitron_vae=capacitron_config, + use_capacitron_vae=True, + batch_size=128, # Tune this to your gpu + max_audio_len=8 * 22050, # Tune this to your gpu + min_audio_len=1 * 22050, + eval_batch_size=16, + num_loader_workers=8, + num_eval_loader_workers=8, + precompute_num_workers=24, + run_eval=True, + test_delay_epochs=25, + ga_alpha=0.0, + r=2, + optimizer="CapacitronOptimizer", + optimizer_params={"RAdam": {"betas": [0.9, 0.998], "weight_decay": 1e-6}, "SGD": {"lr": 1e-5, "momentum": 0.9}}, + attention_type="dynamic_convolution", + grad_clip=0.0, # Important! We overwrite the standard grad_clip with capacitron_grad_clip + double_decoder_consistency=False, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="en-us", + phonemizer="espeak", + phoneme_cache_path=os.path.join(data_path, "phoneme_cache"), + stopnet_pos_weight=15, + print_step=25, + print_eval=True, + mixed_precision=False, + sort_by_audio_len=True, + seq_len_norm=True, + output_path=output_path, + datasets=[dataset_config], + lr=1e-3, + lr_scheduler="StepwiseGradualLR", + lr_scheduler_params={ + "gradual_learning_rates": [ + [0, 1e-3], + [2e4, 5e-4], + [4e5, 3e-4], + [6e4, 1e-4], + [8e4, 5e-5], + ] + }, + scheduler_after_epoch=False, # scheduler doesn't work without this flag + # Need to experiment with these below for capacitron + loss_masking=False, + decoder_loss_alpha=1.0, + postnet_loss_alpha=1.0, + postnet_diff_spec_alpha=0.0, + decoder_diff_spec_alpha=0.0, + decoder_ssim_alpha=0.0, + postnet_ssim_alpha=0.0, +) + +ap = AudioProcessor(**config.audio.to_dict()) + +tokenizer, config = TTSTokenizer.init_from_config(config) + +train_samples, eval_samples = load_tts_samples(dataset_config, eval_split=True) + +model = Tacotron2(config, ap, tokenizer, speaker_manager=None) + +trainer = Trainer( + TrainerArgs(), + config, + output_path, + model=model, + train_samples=train_samples, + eval_samples=eval_samples, + training_assets={"audio_processor": ap}, +) + +trainer.fit() diff --git a/tests/tts_tests/test_tacotron2_model.py b/tests/tts_tests/test_tacotron2_model.py index df184a6a..77c291f7 100644 --- a/tests/tts_tests/test_tacotron2_model.py +++ b/tests/tts_tests/test_tacotron2_model.py @@ -6,7 +6,7 @@ import torch from torch import nn, optim from tests import get_tests_input_path -from TTS.tts.configs.shared_configs import GSTConfig +from TTS.tts.configs.shared_configs import CapacitronVAEConfig, GSTConfig from TTS.tts.configs.tacotron2_config import Tacotron2Config from TTS.tts.layers.losses import MSELossMasked from TTS.tts.models.tacotron2 import Tacotron2 @@ -260,6 +260,73 @@ class TacotronGSTTrainTest(unittest.TestCase): count += 1 +class TacotronCapacitronTrainTest(unittest.TestCase): + @staticmethod + def test_train_step(): + config = Tacotron2Config( + num_chars=32, + num_speakers=10, + use_speaker_embedding=True, + out_channels=80, + decoder_output_dim=80, + use_capacitron_vae=True, + capacitron_vae=CapacitronVAEConfig(), + optimizer="CapacitronOptimizer", + optimizer_params={ + "RAdam": {"betas": [0.9, 0.998], "weight_decay": 1e-6}, + "SGD": {"lr": 1e-5, "momentum": 0.9}, + }, + ) + + batch = dict({}) + batch["text_input"] = torch.randint(0, 24, (8, 128)).long().to(device) + batch["text_lengths"] = torch.randint(100, 129, (8,)).long().to(device) + batch["text_lengths"] = torch.sort(batch["text_lengths"], descending=True)[0] + batch["text_lengths"][0] = 128 + batch["mel_input"] = torch.rand(8, 120, config.audio["num_mels"]).to(device) + batch["mel_lengths"] = torch.randint(20, 120, (8,)).long().to(device) + batch["mel_lengths"] = torch.sort(batch["mel_lengths"], descending=True)[0] + batch["mel_lengths"][0] = 120 + batch["stop_targets"] = torch.zeros(8, 120, 1).float().to(device) + batch["stop_target_lengths"] = torch.randint(0, 120, (8,)).to(device) + batch["speaker_ids"] = torch.randint(0, 5, (8,)).long().to(device) + batch["d_vectors"] = None + + for idx in batch["mel_lengths"]: + batch["stop_targets"][:, int(idx.item()) :, 0] = 1.0 + + batch["stop_targets"] = batch["stop_targets"].view( + batch["text_input"].shape[0], batch["stop_targets"].size(1) // config.r, -1 + ) + batch["stop_targets"] = (batch["stop_targets"].sum(2) > 0.0).unsqueeze(2).float().squeeze() + + model = Tacotron2(config).to(device) + criterion = model.get_criterion() + optimizer = model.get_optimizer() + + model.train() + model_ref = copy.deepcopy(model) + count = 0 + for param, param_ref in zip(model.parameters(), model_ref.parameters()): + assert (param - param_ref).sum() == 0, param + count += 1 + for _ in range(10): + _, loss_dict = model.train_step(batch, criterion) + optimizer.zero_grad() + loss_dict["capacitron_vae_beta_loss"].backward() + optimizer.first_step() + loss_dict["loss"].backward() + optimizer.step() + # check parameter changes + count = 0 + for param, param_ref in zip(model.parameters(), model_ref.parameters()): + # ignore pre-higway layer since it works conditional + assert (param != param_ref).any(), "param {} with shape {} not updated!! \n{}\n{}".format( + count, param.shape, param, param_ref + ) + count += 1 + + class SCGSTMultiSpeakeTacotronTrainTest(unittest.TestCase): """Test multi-speaker Tacotron2 with Global Style Tokens and d-vector inputs.""" diff --git a/tests/tts_tests/test_tacotron_model.py b/tests/tts_tests/test_tacotron_model.py index 6e0e712b..07351a6a 100644 --- a/tests/tts_tests/test_tacotron_model.py +++ b/tests/tts_tests/test_tacotron_model.py @@ -6,7 +6,7 @@ import torch from torch import nn, optim from tests import get_tests_input_path -from TTS.tts.configs.shared_configs import GSTConfig +from TTS.tts.configs.shared_configs import CapacitronVAEConfig, GSTConfig from TTS.tts.configs.tacotron_config import TacotronConfig from TTS.tts.layers.losses import L1LossMasked from TTS.tts.models.tacotron import Tacotron @@ -248,6 +248,74 @@ class TacotronGSTTrainTest(unittest.TestCase): count += 1 +class TacotronCapacitronTrainTest(unittest.TestCase): + @staticmethod + def test_train_step(): + config = TacotronConfig( + num_chars=32, + num_speakers=10, + use_speaker_embedding=True, + out_channels=513, + decoder_output_dim=80, + use_capacitron_vae=True, + capacitron_vae=CapacitronVAEConfig(), + optimizer="CapacitronOptimizer", + optimizer_params={ + "RAdam": {"betas": [0.9, 0.998], "weight_decay": 1e-6}, + "SGD": {"lr": 1e-5, "momentum": 0.9}, + }, + ) + + batch = dict({}) + batch["text_input"] = torch.randint(0, 24, (8, 128)).long().to(device) + batch["text_lengths"] = torch.randint(100, 129, (8,)).long().to(device) + batch["text_lengths"] = torch.sort(batch["text_lengths"], descending=True)[0] + batch["text_lengths"][0] = 128 + batch["linear_input"] = torch.rand(8, 120, config.audio["fft_size"] // 2 + 1).to(device) + batch["mel_input"] = torch.rand(8, 120, config.audio["num_mels"]).to(device) + batch["mel_lengths"] = torch.randint(20, 120, (8,)).long().to(device) + batch["mel_lengths"] = torch.sort(batch["mel_lengths"], descending=True)[0] + batch["mel_lengths"][0] = 120 + batch["stop_targets"] = torch.zeros(8, 120, 1).float().to(device) + batch["stop_target_lengths"] = torch.randint(0, 120, (8,)).to(device) + batch["speaker_ids"] = torch.randint(0, 5, (8,)).long().to(device) + batch["d_vectors"] = None + + for idx in batch["mel_lengths"]: + batch["stop_targets"][:, int(idx.item()) :, 0] = 1.0 + + batch["stop_targets"] = batch["stop_targets"].view( + batch["text_input"].shape[0], batch["stop_targets"].size(1) // config.r, -1 + ) + batch["stop_targets"] = (batch["stop_targets"].sum(2) > 0.0).unsqueeze(2).float().squeeze() + + model = Tacotron(config).to(device) + criterion = model.get_criterion() + optimizer = model.get_optimizer() + model.train() + print(" > Num parameters for Tacotron with Capacitron VAE model:%s" % (count_parameters(model))) + model_ref = copy.deepcopy(model) + count = 0 + for param, param_ref in zip(model.parameters(), model_ref.parameters()): + assert (param - param_ref).sum() == 0, param + count += 1 + for _ in range(10): + _, loss_dict = model.train_step(batch, criterion) + optimizer.zero_grad() + loss_dict["capacitron_vae_beta_loss"].backward() + optimizer.first_step() + loss_dict["loss"].backward() + optimizer.step() + # check parameter changes + count = 0 + for param, param_ref in zip(model.parameters(), model_ref.parameters()): + # ignore pre-higway layer since it works conditional + assert (param != param_ref).any(), "param {} with shape {} not updated!! \n{}\n{}".format( + count, param.shape, param, param_ref + ) + count += 1 + + class SCGSTMultiSpeakeTacotronTrainTest(unittest.TestCase): @staticmethod def test_train_step(): From 3b84ef95241f0e47880d02c6b879f25151f662b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20R=2E=20de=20Miranda?= Date: Fri, 20 May 2022 12:46:46 -0300 Subject: [PATCH 28/37] Fixed use_cuda issue in compute_embeddings.py Added use_cuda argument in self.init_encoder method --- TTS/tts/utils/managers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTS/tts/utils/managers.py b/TTS/tts/utils/managers.py index 7c22ac88..5415d52c 100644 --- a/TTS/tts/utils/managers.py +++ b/TTS/tts/utils/managers.py @@ -110,7 +110,7 @@ class EmbeddingManager(BaseIDManager): self.load_embeddings_from_file(embedding_file_path) if encoder_model_path and encoder_config_path: - self.init_encoder(encoder_model_path, encoder_config_path) + self.init_encoder(encoder_model_path, encoder_config_path, use_cuda) @property def embedding_dim(self): From a790df4e944fb035179e99423e828cf37658d9f0 Mon Sep 17 00:00:00 2001 From: Noran Raskin <49494199+noranraskin@users.noreply.github.com> Date: Mon, 30 May 2022 12:07:31 +0200 Subject: [PATCH 29/37] Training recipes for thorsten dataset (#1020) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix style * Fix isort * Remove tensorboardX from requirements Co-authored-by: logan hart <72301874+loganhart420@users.noreply.github.com> Co-authored-by: Eren Gรถlge --- .github/workflows/docker.yaml | 2 +- .gitignore | 2 +- Dockerfile | 2 +- TTS/tts/datasets/formatters.py | 15 +++ recipes/thorsten_DE/README.md | 15 +++ .../thorsten_DE/align_tts/train_aligntts.py | 84 ++++++++++++++ recipes/thorsten_DE/download_thorsten_DE.sh | 21 ++++ recipes/thorsten_DE/glow_tts/train_glowtts.py | 97 ++++++++++++++++ recipes/thorsten_DE/hifigan/train_hifigan.py | 53 +++++++++ .../train_multiband_melgan.py | 53 +++++++++ .../speedy_speech/train_speedy_speech.py | 102 +++++++++++++++++ .../tacotron2-DDC/train_tacotron_ddc.py | 108 ++++++++++++++++++ recipes/thorsten_DE/univnet/train_univnet.py | 52 +++++++++ recipes/thorsten_DE/vits_tts/train_vits.py | 105 +++++++++++++++++ .../thorsten_DE/wavegrad/train_wavegrad.py | 56 +++++++++ recipes/thorsten_DE/wavernn/train_wavernn.py | 58 ++++++++++ requirements.txt | 1 - 17 files changed, 822 insertions(+), 4 deletions(-) create mode 100644 recipes/thorsten_DE/README.md create mode 100644 recipes/thorsten_DE/align_tts/train_aligntts.py create mode 100755 recipes/thorsten_DE/download_thorsten_DE.sh create mode 100644 recipes/thorsten_DE/glow_tts/train_glowtts.py create mode 100644 recipes/thorsten_DE/hifigan/train_hifigan.py create mode 100644 recipes/thorsten_DE/multiband_melgan/train_multiband_melgan.py create mode 100644 recipes/thorsten_DE/speedy_speech/train_speedy_speech.py create mode 100644 recipes/thorsten_DE/tacotron2-DDC/train_tacotron_ddc.py create mode 100644 recipes/thorsten_DE/univnet/train_univnet.py create mode 100644 recipes/thorsten_DE/vits_tts/train_vits.py create mode 100644 recipes/thorsten_DE/wavegrad/train_wavegrad.py create mode 100644 recipes/thorsten_DE/wavernn/train_wavernn.py diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 9d2d8d8f..7d383f3f 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -62,4 +62,4 @@ jobs: platforms: linux/${{ matrix.arch }} push: ${{ github.event_name == 'push' }} build-args: "BASE=${{ matrix.base }}" - tags: ${{ steps.compute-tag.outputs.tags }} \ No newline at end of file + tags: ${{ steps.compute-tag.outputs.tags }} diff --git a/.gitignore b/.gitignore index 2a3cbad4..9425a0aa 100644 --- a/.gitignore +++ b/.gitignore @@ -166,4 +166,4 @@ internal/* *_phoneme.npy wandb depot/* -coqui_recipes/* \ No newline at end of file +coqui_recipes/* diff --git a/Dockerfile b/Dockerfile index f055cba4..2b70e8c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,4 +17,4 @@ RUN ["/bin/bash", "-c", "pip install -r <(cat requirements.txt requirements.dev. COPY . /root RUN make install ENTRYPOINT ["tts"] -CMD ["--help"] \ No newline at end of file +CMD ["--help"] diff --git a/TTS/tts/datasets/formatters.py b/TTS/tts/datasets/formatters.py index c13fcdb8..ac9e87dc 100644 --- a/TTS/tts/datasets/formatters.py +++ b/TTS/tts/datasets/formatters.py @@ -141,6 +141,21 @@ def ljspeech_test(root_path, meta_file, **kwargs): # pylint: disable=unused-arg return items +def thorsten(root_path, meta_file, **kwargs): # pylint: disable=unused-argument + """Normalizes the thorsten meta data file to TTS format + https://github.com/thorstenMueller/deep-learning-german-tts/""" + txt_file = os.path.join(root_path, meta_file) + items = [] + speaker_name = "thorsten" + with open(txt_file, "r", encoding="utf-8") as ttf: + for line in ttf: + cols = line.split("|") + wav_file = os.path.join(root_path, "wavs", cols[0] + ".wav") + text = cols[1] + items.append({"text": text, "audio_file": wav_file, "speaker_name": speaker_name}) + return items + + def sam_accenture(root_path, meta_file, **kwargs): # pylint: disable=unused-argument """Normalizes the sam-accenture meta data file to TTS format https://github.com/Sam-Accenture-Non-Binary-Voice/non-binary-voice-files""" diff --git a/recipes/thorsten_DE/README.md b/recipes/thorsten_DE/README.md new file mode 100644 index 00000000..3ef0dbaa --- /dev/null +++ b/recipes/thorsten_DE/README.md @@ -0,0 +1,15 @@ +# ๐Ÿธ๐Ÿ’ฌ TTS Thorsten Recipes + +For running the recipes you need the [Thorsten-Voice](https://github.com/thorstenMueller/Thorsten-Voice) dataset. + +You can download it manually from [the official website](https://www.thorsten-voice.de/) or use ```download_thorsten_de.sh``` alternatively running any of the **train_modelX.py**scripts will download the dataset if not already present. + +Then, go to your desired model folder and run the training. + + Running Python files. (Choose the desired GPU ID for your run and set ```CUDA_VISIBLE_DEVICES```) + ```terminal + CUDA_VISIBLE_DEVICES="0" python train_modelX.py + ``` + +๐Ÿ’ก Note that these runs are just templates to help you start training your first model. They are not optimized for the best +result. Double-check the configurations and feel free to share your experiments to find better parameters together ๐Ÿ’ช. diff --git a/recipes/thorsten_DE/align_tts/train_aligntts.py b/recipes/thorsten_DE/align_tts/train_aligntts.py new file mode 100644 index 00000000..fbfe6de5 --- /dev/null +++ b/recipes/thorsten_DE/align_tts/train_aligntts.py @@ -0,0 +1,84 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.tts.configs.align_tts_config import AlignTTSConfig +from TTS.tts.configs.shared_configs import BaseDatasetConfig +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.align_tts import AlignTTS +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de + +output_path = os.path.dirname(os.path.abspath(__file__)) + +# init configs +dataset_config = BaseDatasetConfig( + name="thorsten", meta_file_train="metadata.csv", path=os.path.join(output_path, "../thorsten-de/") +) + +# download dataset if not already present +if not os.path.exists(dataset_config.path): + print("Downloading dataset") + download_thorsten_de(os.path.split(os.path.abspath(dataset_config.path))[0]) + +config = AlignTTSConfig( + batch_size=32, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=False, + phoneme_language="de", + phoneme_cache_path=os.path.join(output_path, "phoneme_cache"), + print_step=25, + print_eval=True, + mixed_precision=False, + test_sentences=[ + "Es hat mich viel Zeit gekostet ein Stimme zu entwickeln, jetzt wo ich sie habe werde ich nicht mehr schweigen.", + "Sei eine Stimme, kein Echo.", + "Es tut mir Leid David. Das kann ich leider nicht machen.", + "Dieser Kuchen ist groรŸartig. Er ist so lecker und feucht.", + "Vor dem 22. November 1963.", + ], + output_path=output_path, + datasets=[dataset_config], +) + +# INITIALIZE THE AUDIO PROCESSOR +# Audio processor is used for feature extraction and audio I/O. +# It mainly serves to the dataloader and the training loggers. +ap = AudioProcessor.init_from_config(config) + +# INITIALIZE THE TOKENIZER +# Tokenizer is used to convert text to sequences of token IDs. +# If characters are not defined in the config, default characters are passed to the config +tokenizer, config = TTSTokenizer.init_from_config(config) + +# LOAD DATA SAMPLES +# Each sample is a list of ```[text, audio_file_path, speaker_name]``` +# You can define your custom sample loader returning the list of samples. +# Or define your custom formatter and pass it to the `load_tts_samples`. +# Check `TTS.tts.datasets.load_tts_samples` for more details. +train_samples, eval_samples = load_tts_samples( + dataset_config, + eval_split=True, + eval_split_max_size=config.eval_split_max_size, + eval_split_size=config.eval_split_size, +) + +# init model +model = AlignTTS(config, ap, tokenizer) + +# INITIALIZE THE TRAINER +# Trainer provides a generic API to train all the ๐ŸธTTS models with all its perks like mixed-precision training, +# distributed training, etc. +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) + +# AND... 3,2,1... ๐Ÿš€ +trainer.fit() diff --git a/recipes/thorsten_DE/download_thorsten_DE.sh b/recipes/thorsten_DE/download_thorsten_DE.sh new file mode 100755 index 00000000..27809ce5 --- /dev/null +++ b/recipes/thorsten_DE/download_thorsten_DE.sh @@ -0,0 +1,21 @@ +# create venv +python3 -m venv env +source .env/bin/activate +pip install pip --upgrade + +# download Thorsten_DE dataset +pip install gdown +gdown --id 1yKJM1LAOQpRVojKunD9r8WN_p5KzBxjc -O dataset.tgz +tar -xzf dataset.tgz + +# create train-val splits +shuf LJSpeech-1.1/metadata.csv > LJSpeech-1.1/metadata_shuf.csv +head -n 20668 LJSpeech-1.1/metadata_shuf.csv > LJSpeech-1.1/metadata_train.csv +tail -n 2000 LJSpeech-1.1/metadata_shuf.csv > LJSpeech-1.1/metadata_val.csv + +# rename dataset and remove archive +mv LJSpeech-1.1 thorsten-de +rm dataset.tgz + +# destry venv +rm -rf env diff --git a/recipes/thorsten_DE/glow_tts/train_glowtts.py b/recipes/thorsten_DE/glow_tts/train_glowtts.py new file mode 100644 index 00000000..cb8422d4 --- /dev/null +++ b/recipes/thorsten_DE/glow_tts/train_glowtts.py @@ -0,0 +1,97 @@ +import os + +# Trainer: Where the โœจ๏ธ happens. +# TrainingArgs: Defines the set of arguments of the Trainer. +from trainer import Trainer, TrainerArgs + +# GlowTTSConfig: all model related values for training, validating and testing. +from TTS.tts.configs.glow_tts_config import GlowTTSConfig + +# BaseDatasetConfig: defines name, formatter and path of the dataset. +from TTS.tts.configs.shared_configs import BaseDatasetConfig +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.glow_tts import GlowTTS +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de + +# we use the same path as this script as our training folder. +output_path = os.path.dirname(os.path.abspath(__file__)) + +# DEFINE DATASET CONFIG +# Set LJSpeech as our target dataset and define its path. +# You can also use a simple Dict to define the dataset and pass it to your custom formatter. +dataset_config = BaseDatasetConfig( + name="thorsten", meta_file_train="metadata.csv", path=os.path.join(output_path, "../thorsten-de/") +) + +# download dataset if not already present +if not os.path.exists(dataset_config.path): + print("Downloading dataset") + download_thorsten_de(os.path.split(os.path.abspath(dataset_config.path))[0]) + +# INITIALIZE THE TRAINING CONFIGURATION +# Configure the model. Every config class inherits the BaseTTSConfig. +config = GlowTTSConfig( + batch_size=32, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="de", + phoneme_cache_path=os.path.join(output_path, "phoneme_cache"), + print_step=25, + print_eval=False, + mixed_precision=True, + test_sentences=[ + "Es hat mich viel Zeit gekostet ein Stimme zu entwickeln, jetzt wo ich sie habe werde ich nicht mehr schweigen.", + "Sei eine Stimme, kein Echo.", + "Es tut mir Leid David. Das kann ich leider nicht machen.", + "Dieser Kuchen ist groรŸartig. Er ist so lecker und feucht.", + "Vor dem 22. November 1963.", + ], + output_path=output_path, + datasets=[dataset_config], +) + +# INITIALIZE THE AUDIO PROCESSOR +# Audio processor is used for feature extraction and audio I/O. +# It mainly serves to the dataloader and the training loggers. +ap = AudioProcessor.init_from_config(config) + +# INITIALIZE THE TOKENIZER +# Tokenizer is used to convert text to sequences of token IDs. +# If characters are not defined in the config, default characters are passed to the config +tokenizer, config = TTSTokenizer.init_from_config(config) + +# LOAD DATA SAMPLES +# Each sample is a list of ```[text, audio_file_path, speaker_name]``` +# You can define your custom sample loader returning the list of samples. +# Or define your custom formatter and pass it to the `load_tts_samples`. +# Check `TTS.tts.datasets.load_tts_samples` for more details. +train_samples, eval_samples = load_tts_samples( + dataset_config, + eval_split=True, + eval_split_max_size=config.eval_split_max_size, + eval_split_size=config.eval_split_size, +) + +# INITIALIZE THE MODEL +# Models take a config object and a speaker manager as input +# Config defines the details of the model like the number of layers, the size of the embedding, etc. +# Speaker manager is used by multi-speaker models. +model = GlowTTS(config, ap, tokenizer, speaker_manager=None) + +# INITIALIZE THE TRAINER +# Trainer provides a generic API to train all the ๐ŸธTTS models with all its perks like mixed-precision training, +# distributed training, etc. +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) + +# AND... 3,2,1... ๐Ÿš€ +trainer.fit() diff --git a/recipes/thorsten_DE/hifigan/train_hifigan.py b/recipes/thorsten_DE/hifigan/train_hifigan.py new file mode 100644 index 00000000..b4767802 --- /dev/null +++ b/recipes/thorsten_DE/hifigan/train_hifigan.py @@ -0,0 +1,53 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de +from TTS.vocoder.configs import HifiganConfig +from TTS.vocoder.datasets.preprocess import load_wav_data +from TTS.vocoder.models.gan import GAN + +output_path = os.path.dirname(os.path.abspath(__file__)) + +config = HifiganConfig( + batch_size=32, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=5, + epochs=1000, + seq_len=8192, + pad_short=2000, + use_noise_augment=True, + eval_split_size=10, + print_step=25, + print_eval=False, + mixed_precision=False, + lr_gen=1e-4, + lr_disc=1e-4, + data_path=os.path.join(output_path, "../thorsten-de/wavs/"), + output_path=output_path, +) + +# download dataset if not already present +if not os.path.exists(config.data_path): + print("Downloading dataset") + download_path = os.path.abspath(os.path.join(os.path.abspath(config.data_path), "../../")) + download_thorsten_de(download_path) + +# init audio processor +ap = AudioProcessor(**config.audio.to_dict()) + +# load training samples +eval_samples, train_samples = load_wav_data(config.data_path, config.eval_split_size) + +# init model +model = GAN(config, ap) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) +trainer.fit() diff --git a/recipes/thorsten_DE/multiband_melgan/train_multiband_melgan.py b/recipes/thorsten_DE/multiband_melgan/train_multiband_melgan.py new file mode 100644 index 00000000..2951b149 --- /dev/null +++ b/recipes/thorsten_DE/multiband_melgan/train_multiband_melgan.py @@ -0,0 +1,53 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de +from TTS.vocoder.configs import MultibandMelganConfig +from TTS.vocoder.datasets.preprocess import load_wav_data +from TTS.vocoder.models.gan import GAN + +output_path = os.path.dirname(os.path.abspath(__file__)) + +config = MultibandMelganConfig( + batch_size=32, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=5, + epochs=1000, + seq_len=8192, + pad_short=2000, + use_noise_augment=True, + eval_split_size=10, + print_step=25, + print_eval=False, + mixed_precision=False, + lr_gen=1e-4, + lr_disc=1e-4, + data_path=os.path.join(output_path, "../thorsten-de/wavs/"), + output_path=output_path, +) + +# download dataset if not already present +if not os.path.exists(config.data_path): + print("Downloading dataset") + download_path = os.path.abspath(os.path.join(os.path.abspath(config.data_path), "../../")) + download_thorsten_de(download_path) + +# init audio processor +ap = AudioProcessor(**config.audio.to_dict()) + +# load training samples +eval_samples, train_samples = load_wav_data(config.data_path, config.eval_split_size) + +# init model +model = GAN(config, ap) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) +trainer.fit() diff --git a/recipes/thorsten_DE/speedy_speech/train_speedy_speech.py b/recipes/thorsten_DE/speedy_speech/train_speedy_speech.py new file mode 100644 index 00000000..1a4c8ec8 --- /dev/null +++ b/recipes/thorsten_DE/speedy_speech/train_speedy_speech.py @@ -0,0 +1,102 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.config import BaseAudioConfig, BaseDatasetConfig +from TTS.tts.configs.speedy_speech_config import SpeedySpeechConfig +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.forward_tts import ForwardTTS +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de + +output_path = os.path.dirname(os.path.abspath(__file__)) +dataset_config = BaseDatasetConfig( + name="thorsten", meta_file_train="metadata.csv", path=os.path.join(output_path, "../thorsten-de/") +) + +# download dataset if not already present +if not os.path.exists(dataset_config.path): + print("Downloading dataset") + download_thorsten_de(os.path.split(os.path.abspath(dataset_config.path))[0]) + +audio_config = BaseAudioConfig( + sample_rate=22050, + do_trim_silence=True, + trim_db=60.0, + signal_norm=False, + mel_fmin=0.0, + mel_fmax=8000, + spec_gain=1.0, + log_func="np.log", + ref_level_db=20, + preemphasis=0.0, +) + +config = SpeedySpeechConfig( + run_name="speedy_speech_thorsten-de", + audio=audio_config, + batch_size=32, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + compute_input_seq_cache=True, + run_eval=True, + test_delay_epochs=-1, + epochs=1000, + min_audio_len=11050, # need to up min_audio_len to avois speedy speech error + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="de", + phoneme_cache_path=os.path.join(output_path, "phoneme_cache"), + precompute_num_workers=4, + print_step=50, + print_eval=False, + mixed_precision=False, + test_sentences=[ + "Es hat mich viel Zeit gekostet ein Stimme zu entwickeln, jetzt wo ich sie habe werde ich nicht mehr schweigen.", + "Sei eine Stimme, kein Echo.", + "Es tut mir Leid David. Das kann ich leider nicht machen.", + "Dieser Kuchen ist groรŸartig. Er ist so lecker und feucht.", + "Vor dem 22. November 1963.", + ], + sort_by_audio_len=True, + max_seq_len=500000, + output_path=output_path, + datasets=[dataset_config], +) + +# INITIALIZE THE AUDIO PROCESSOR +# Audio processor is used for feature extraction and audio I/O. +# It mainly serves to the dataloader and the training loggers. +ap = AudioProcessor.init_from_config(config) + +# INITIALIZE THE TOKENIZER +# Tokenizer is used to convert text to sequences of token IDs. +# If characters are not defined in the config, default characters are passed to the config +tokenizer, config = TTSTokenizer.init_from_config(config) + +# LOAD DATA SAMPLES +# Each sample is a list of ```[text, audio_file_path, speaker_name]``` +# You can define your custom sample loader returning the list of samples. +# Or define your custom formatter and pass it to the `load_tts_samples`. +# Check `TTS.tts.datasets.load_tts_samples` for more details. +train_samples, eval_samples = load_tts_samples( + dataset_config, + eval_split=True, + eval_split_max_size=config.eval_split_max_size, + eval_split_size=config.eval_split_size, +) + +# init model +model = ForwardTTS(config, ap, tokenizer) + +# INITIALIZE THE TRAINER +# Trainer provides a generic API to train all the ๐ŸธTTS models with all its perks like mixed-precision training, +# distributed training, etc. +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) + +# AND... 3,2,1... ๐Ÿš€ +trainer.fit() diff --git a/recipes/thorsten_DE/tacotron2-DDC/train_tacotron_ddc.py b/recipes/thorsten_DE/tacotron2-DDC/train_tacotron_ddc.py new file mode 100644 index 00000000..dac40ec8 --- /dev/null +++ b/recipes/thorsten_DE/tacotron2-DDC/train_tacotron_ddc.py @@ -0,0 +1,108 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.config.shared_configs import BaseAudioConfig +from TTS.tts.configs.shared_configs import BaseDatasetConfig +from TTS.tts.configs.tacotron2_config import Tacotron2Config +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.tacotron2 import Tacotron2 +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de + +# from TTS.tts.datasets.tokenizer import Tokenizer +output_path = os.path.dirname(os.path.abspath(__file__)) + +# init configs +dataset_config = BaseDatasetConfig( + name="thorsten", meta_file_train="metadata.csv", path=os.path.join(output_path, "../thorsten-de/") +) + +# download dataset if not already present +if not os.path.exists(dataset_config.path): + print("Downloading dataset") + download_thorsten_de(os.path.split(os.path.abspath(dataset_config.path))[0]) + +audio_config = BaseAudioConfig( + sample_rate=22050, + do_trim_silence=True, + trim_db=60.0, + signal_norm=False, + mel_fmin=0.0, + mel_fmax=8000, + spec_gain=1.0, + log_func="np.log", + ref_level_db=20, + preemphasis=0.0, +) + +config = Tacotron2Config( # This is the config that is saved for the future use + audio=audio_config, + batch_size=40, # BS of 40 and max length of 10s will use about 20GB of GPU memory + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + r=6, + gradual_training=[[0, 6, 64], [10000, 4, 32], [50000, 3, 32], [100000, 2, 32]], + double_decoder_consistency=True, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="de", + phoneme_cache_path=os.path.join(output_path, "phoneme_cache"), + precompute_num_workers=8, + print_step=25, + print_eval=True, + mixed_precision=False, + test_sentences=[ + "Es hat mich viel Zeit gekostet ein Stimme zu entwickeln, jetzt wo ich sie habe werde ich nicht mehr schweigen.", + "Sei eine Stimme, kein Echo.", + "Es tut mir Leid David. Das kann ich leider nicht machen.", + "Dieser Kuchen ist groรŸartig. Er ist so lecker und feucht.", + "Vor dem 22. November 1963.", + ], + # max audio length of 10 seconds, feel free to increase if you got more than 20GB GPU memory + max_audio_len=22050 * 10, + output_path=output_path, + datasets=[dataset_config], +) + +# init audio processor +ap = AudioProcessor(**config.audio.to_dict()) + +# INITIALIZE THE AUDIO PROCESSOR +# Audio processor is used for feature extraction and audio I/O. +# It mainly serves to the dataloader and the training loggers. +ap = AudioProcessor.init_from_config(config) + +# INITIALIZE THE TOKENIZER +# Tokenizer is used to convert text to sequences of token IDs. +# If characters are not defined in the config, default characters are passed to the config +tokenizer, config = TTSTokenizer.init_from_config(config) + +# LOAD DATA SAMPLES +# Each sample is a list of ```[text, audio_file_path, speaker_name]``` +# You can define your custom sample loader returning the list of samples. +# Or define your custom formatter and pass it to the `load_tts_samples`. +# Check `TTS.tts.datasets.load_tts_samples` for more details. +train_samples, eval_samples = load_tts_samples( + dataset_config, + eval_split=True, + eval_split_max_size=config.eval_split_max_size, + eval_split_size=config.eval_split_size, +) + +# INITIALIZE THE MODEL +# Models take a config object and a speaker manager as input +# Config defines the details of the model like the number of layers, the size of the embedding, etc. +# Speaker manager is used by multi-speaker models. +model = Tacotron2(config, ap, tokenizer, speaker_manager=None) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) +trainer.fit() diff --git a/recipes/thorsten_DE/univnet/train_univnet.py b/recipes/thorsten_DE/univnet/train_univnet.py new file mode 100644 index 00000000..7d82093d --- /dev/null +++ b/recipes/thorsten_DE/univnet/train_univnet.py @@ -0,0 +1,52 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de +from TTS.vocoder.configs import UnivnetConfig +from TTS.vocoder.datasets.preprocess import load_wav_data +from TTS.vocoder.models.gan import GAN + +output_path = os.path.dirname(os.path.abspath(__file__)) +config = UnivnetConfig( + batch_size=64, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + epochs=1000, + seq_len=8192, + pad_short=2000, + use_noise_augment=True, + eval_split_size=10, + print_step=25, + print_eval=False, + mixed_precision=False, + lr_gen=1e-4, + lr_disc=1e-4, + data_path=os.path.join(output_path, "../thorsten-de/wavs/"), + output_path=output_path, +) + +# download dataset if not already present +if not os.path.exists(config.data_path): + print("Downloading dataset") + download_path = os.path.abspath(os.path.join(os.path.abspath(config.data_path), "../../")) + download_thorsten_de(download_path) + +# init audio processor +ap = AudioProcessor(**config.audio.to_dict()) + +# load training samples +eval_samples, train_samples = load_wav_data(config.data_path, config.eval_split_size) + +# init model +model = GAN(config, ap) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples +) +trainer.fit() diff --git a/recipes/thorsten_DE/vits_tts/train_vits.py b/recipes/thorsten_DE/vits_tts/train_vits.py new file mode 100644 index 00000000..86a7dfe6 --- /dev/null +++ b/recipes/thorsten_DE/vits_tts/train_vits.py @@ -0,0 +1,105 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.config.shared_configs import BaseAudioConfig +from TTS.tts.configs.shared_configs import BaseDatasetConfig +from TTS.tts.configs.vits_config import VitsConfig +from TTS.tts.datasets import load_tts_samples +from TTS.tts.models.vits import Vits +from TTS.tts.utils.text.tokenizer import TTSTokenizer +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de + +output_path = os.path.dirname(os.path.abspath(__file__)) +dataset_config = BaseDatasetConfig( + name="thorsten", meta_file_train="metadata.csv", path=os.path.join(output_path, "../thorsten-de/") +) + +# download dataset if not already present +if not os.path.exists(dataset_config.path): + print("Downloading dataset") + download_thorsten_de(os.path.split(os.path.abspath(dataset_config.path))[0]) + +audio_config = BaseAudioConfig( + sample_rate=22050, + win_length=1024, + hop_length=256, + num_mels=80, + preemphasis=0.0, + ref_level_db=20, + log_func="np.log", + do_trim_silence=True, + trim_db=45, + mel_fmin=0, + mel_fmax=None, + spec_gain=1.0, + signal_norm=False, + do_amp_to_db_linear=False, +) + +config = VitsConfig( + audio=audio_config, + run_name="vits_thorsten-de", + batch_size=32, + eval_batch_size=16, + batch_group_size=5, + num_loader_workers=0, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + epochs=1000, + text_cleaner="phoneme_cleaners", + use_phonemes=True, + phoneme_language="de", + phoneme_cache_path=os.path.join(output_path, "phoneme_cache"), + compute_input_seq_cache=True, + print_step=25, + print_eval=True, + mixed_precision=True, + test_sentences=[ + "Es hat mich viel Zeit gekostet ein Stimme zu entwickeln, jetzt wo ich sie habe werde ich nicht mehr schweigen.", + "Sei eine Stimme, kein Echo.", + "Es tut mir Leid David. Das kann ich leider nicht machen.", + "Dieser Kuchen ist groรŸartig. Er ist so lecker und feucht.", + "Vor dem 22. November 1963.", + ], + output_path=output_path, + datasets=[dataset_config], +) + +# INITIALIZE THE AUDIO PROCESSOR +# Audio processor is used for feature extraction and audio I/O. +# It mainly serves to the dataloader and the training loggers. +ap = AudioProcessor.init_from_config(config) + +# INITIALIZE THE TOKENIZER +# Tokenizer is used to convert text to sequences of token IDs. +# config is updated with the default characters if not defined in the config. +tokenizer, config = TTSTokenizer.init_from_config(config) + +# LOAD DATA SAMPLES +# Each sample is a list of ```[text, audio_file_path, speaker_name]``` +# You can define your custom sample loader returning the list of samples. +# Or define your custom formatter and pass it to the `load_tts_samples`. +# Check `TTS.tts.datasets.load_tts_samples` for more details. +train_samples, eval_samples = load_tts_samples( + dataset_config, + eval_split=True, + eval_split_max_size=config.eval_split_max_size, + eval_split_size=config.eval_split_size, +) + +# init model +model = Vits(config, ap, tokenizer, speaker_manager=None) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), + config, + output_path, + model=model, + train_samples=train_samples, + eval_samples=eval_samples, +) +trainer.fit() diff --git a/recipes/thorsten_DE/wavegrad/train_wavegrad.py b/recipes/thorsten_DE/wavegrad/train_wavegrad.py new file mode 100644 index 00000000..e9d2c95c --- /dev/null +++ b/recipes/thorsten_DE/wavegrad/train_wavegrad.py @@ -0,0 +1,56 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de +from TTS.vocoder.configs import WavegradConfig +from TTS.vocoder.datasets.preprocess import load_wav_data +from TTS.vocoder.models.wavegrad import Wavegrad + +output_path = os.path.dirname(os.path.abspath(__file__)) +config = WavegradConfig( + batch_size=32, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + epochs=1000, + seq_len=6144, + pad_short=2000, + use_noise_augment=True, + eval_split_size=50, + print_step=50, + print_eval=True, + mixed_precision=False, + data_path=os.path.join(output_path, "../thorsten-de/wavs/"), + output_path=output_path, +) + +# download dataset if not already present +if not os.path.exists(config.data_path): + print("Downloading dataset") + download_path = os.path.abspath(os.path.join(os.path.abspath(config.data_path), "../../")) + download_thorsten_de(download_path) + +# init audio processor +ap = AudioProcessor(**config.audio.to_dict()) + +# load training samples +eval_samples, train_samples = load_wav_data(config.data_path, config.eval_split_size) + +# init model +model = Wavegrad(config) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), + config, + output_path, + model=model, + train_samples=train_samples, + eval_samples=eval_samples, + training_assets={"audio_processor": ap}, +) +trainer.fit() diff --git a/recipes/thorsten_DE/wavernn/train_wavernn.py b/recipes/thorsten_DE/wavernn/train_wavernn.py new file mode 100644 index 00000000..f2a283f7 --- /dev/null +++ b/recipes/thorsten_DE/wavernn/train_wavernn.py @@ -0,0 +1,58 @@ +import os + +from trainer import Trainer, TrainerArgs + +from TTS.utils.audio import AudioProcessor +from TTS.utils.downloaders import download_thorsten_de +from TTS.vocoder.configs import WavernnConfig +from TTS.vocoder.datasets.preprocess import load_wav_data +from TTS.vocoder.models.wavernn import Wavernn + +output_path = os.path.dirname(os.path.abspath(__file__)) +config = WavernnConfig( + batch_size=64, + eval_batch_size=16, + num_loader_workers=4, + num_eval_loader_workers=4, + run_eval=True, + test_delay_epochs=-1, + epochs=10000, + seq_len=1280, + pad_short=2000, + use_noise_augment=False, + eval_split_size=10, + print_step=25, + print_eval=True, + mixed_precision=False, + lr=1e-4, + grad_clip=4, + data_path=os.path.join(output_path, "../thorsten-de/wavs/"), + output_path=output_path, +) + +# download dataset if not already present +if not os.path.exists(config.data_path): + print("Downloading dataset") + download_path = os.path.abspath(os.path.join(os.path.abspath(config.data_path), "../../")) + download_thorsten_de(download_path) + +# init audio processor +ap = AudioProcessor(**config.audio.to_dict()) + +# load training samples +eval_samples, train_samples = load_wav_data(config.data_path, config.eval_split_size) + +# init model +model = Wavernn(config) + +# init the trainer and ๐Ÿš€ +trainer = Trainer( + TrainerArgs(), + config, + output_path, + model=model, + train_samples=train_samples, + eval_samples=eval_samples, + training_assets={"audio_processor": ap}, +) +trainer.fit() diff --git a/requirements.txt b/requirements.txt index e6eaf885..b3acfeca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,6 @@ umap-learn==0.5.1 pandas # deps for training matplotlib -tensorboardX pyworld==0.2.10 # > 0.2.10 is not p3.10.x compatible # coqui stack trainer From b6bd74a9a953c18e83bcd58b78ab9dbc2211657f Mon Sep 17 00:00:00 2001 From: Ryan Le-Nguyen <63024511+s3781009@users.noreply.github.com> Date: Tue, 31 May 2022 18:20:10 +1000 Subject: [PATCH 30/37] fix invalid json (#1599) --- notebooks/TestAttention.ipynb | 377 +++++++++++++++++----------------- 1 file changed, 187 insertions(+), 190 deletions(-) diff --git a/notebooks/TestAttention.ipynb b/notebooks/TestAttention.ipynb index b257ff70..65edf98c 100644 --- a/notebooks/TestAttention.ipynb +++ b/notebooks/TestAttention.ipynb @@ -1,191 +1,188 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "Collapsed": "false" - }, - "source": [ - "This notebook is to test attention performance of a TTS model on a list of sentences taken from DeepVoice paper.\n", - "### Features of this notebook\n", - "- You can see visually how your model performs on each sentence and try to dicern common problems.\n", - "- At the end, final attention score would be printed showing the ultimate performace of your model. You can use this value to perform model selection.\n", - "- You can change the list of sentences byt providing a different sentence file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "Collapsed": "false", - "scrolled": true - }, - "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2\n", - "import os, sys\n", - "import torch \n", - "import time\n", - "import numpy as np\n", - "from matplotlib import pylab as plt\n", - "\n", - "%pylab inline\n", - "plt.rcParams[\"figure.figsize\"] = (16,5)\n", - "\n", - "import librosa\n", - "import librosa.display\n", - "\n", - "from TTS.tts.layers import *\n", - "from TTS.utils.audio import AudioProcessor - -\n", - "from TTS.tts.utils.generic_utils import setup_model\n", - "from TTS.tts.utils.io import load_config\n", - "from TTS.tts.utils.text import text_to_sequence\n", - "from TTS.tts.utils.synthesis import synthesis\n", - "from TTS.tts.utils.visual import plot_alignment\n", - "from TTS.tts.utils.measures import alignment_diagonal_score\n", - "\n", - "import IPython\n", - "from IPython.display import Audio\n", - "\n", - "os.environ['CUDA_VISIBLE_DEVICES']='1'\n", - "\n", - "def tts(model, text, CONFIG, use_cuda, ap):\n", - " t_1 = time.time()\n", - " # run the model\n", - " waveform, alignment, mel_spec, mel_postnet_spec, stop_tokens, inputs = synthesis(model, text, CONFIG, use_cuda, ap, speaker_id, None, False, CONFIG.enable_eos_bos_chars, True)\n", - " if CONFIG.model == \"Tacotron\" and not use_gl:\n", - " mel_postnet_spec = ap.out_linear_to_mel(mel_postnet_spec.T).T\n", - " # plotting\n", - " attn_score = alignment_diagonal_score(torch.FloatTensor(alignment).unsqueeze(0))\n", - " print(f\" > {text}\")\n", - " IPython.display.display(IPython.display.Audio(waveform, rate=ap.sample_rate))\n", - " fig = plot_alignment(alignment, fig_size=(8, 5))\n", - " IPython.display.display(fig)\n", - " #saving results\n", - " os.makedirs(OUT_FOLDER, exist_ok=True)\n", - " file_name = text[:200].replace(\" \", \"_\").replace(\".\",\"\") + \".wav\"\n", - " out_path = os.path.join(OUT_FOLDER, file_name)\n", - " ap.save_wav(waveform, out_path)\n", - " return attn_score\n", - "\n", - "# Set constants\n", - "ROOT_PATH = '/home/erogol/Models/LJSpeech/ljspeech-May-20-2020_12+29PM-1835628/'\n", - "MODEL_PATH = ROOT_PATH + '/best_model.pth'\n", - "CONFIG_PATH = ROOT_PATH + '/config.json'\n", - "OUT_FOLDER = './hard_sentences/'\n", - "CONFIG = load_config(CONFIG_PATH)\n", - "SENTENCES_PATH = 'sentences.txt'\n", - "use_cuda = True\n", - "\n", - "# Set some config fields manually for testing\n", - "# CONFIG.windowing = False\n", - "# CONFIG.prenet_dropout = False\n", - "# CONFIG.separate_stopnet = True\n", - "CONFIG.use_forward_attn = False\n", - "# CONFIG.forward_attn_mask = True\n", - "# CONFIG.stopnet = True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "Collapsed": "false" - }, - "outputs": [], - "source": [ - "# LOAD TTS MODEL\n", - "from TTS.tts.utils.text.symbols import make_symbols, symbols, phonemes\n", - "\n", - "# multi speaker \n", - "if CONFIG.use_speaker_embedding:\n", - " speakers = json.load(open(f\"{ROOT_PATH}/speakers.json\", 'r'))\n", - " speakers_idx_to_id = {v: k for k, v in speakers.items()}\n", - "else:\n", - " speakers = []\n", - " speaker_id = None\n", - "\n", - "# if the vocabulary was passed, replace the default\n", - "if 'characters' in CONFIG.keys():\n", - " symbols, phonemes = make_symbols(**CONFIG.characters)\n", - "\n", - "# load the model\n", - "num_chars = len(phonemes) if CONFIG.use_phonemes else len(symbols)\n", - "model = setup_model(num_chars, len(speakers), CONFIG)\n", - "\n", - "# load the audio processor\n", - "ap = AudioProcessor(**CONFIG.audio) \n", - "\n", - "\n", - "# load model state\n", - "if use_cuda:\n", - " cp = torch.load(MODEL_PATH)\n", - "else:\n", - " cp = torch.load(MODEL_PATH, map_location=lambda storage, loc: storage)\n", - "\n", - "# load the model\n", - "model.load_state_dict(cp['model'])\n", - "if use_cuda:\n", - " model.cuda()\n", - "model.eval()\n", - "print(cp['step'])\n", - "print(cp['r'])\n", - "\n", - "# set model stepsize\n", - "if 'r' in cp:\n", - " model.decoder.set_r(cp['r'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "Collapsed": "false" - }, - "outputs": [], - "source": [ - "model.decoder.max_decoder_steps=3000\n", - "attn_scores = []\n", - "with open(SENTENCES_PATH, 'r') as f:\n", - " for text in f:\n", - " attn_score = tts(model, text, CONFIG, use_cuda, ap)\n", - " attn_scores.append(attn_score)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "Collapsed": "false" - }, - "outputs": [], - "source": [ - "np.mean(attn_scores)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.5" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} + "cells": [{ + "cell_type": "markdown", + "metadata": { + "Collapsed": "false" + }, + "source": [ + "This notebook is to test attention performance of a TTS model on a list of sentences taken from DeepVoice paper.\n", + "### Features of this notebook\n", + "- You can see visually how your model performs on each sentence and try to dicern common problems.\n", + "- At the end, final attention score would be printed showing the ultimate performace of your model. You can use this value to perform model selection.\n", + "- You can change the list of sentences byt providing a different sentence file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "Collapsed": "false", + "scrolled": true + }, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "import os, sys\n", + "import torch \n", + "import time\n", + "import numpy as np\n", + "from matplotlib import pylab as plt\n", + "\n", + "%pylab inline\n", + "plt.rcParams[\"figure.figsize\"] = (16,5)\n", + "\n", + "import librosa\n", + "import librosa.display\n", + "\n", + "from TTS.tts.layers import *\n", + "from TTS.utils.audio import AudioProcessor\n", + "from TTS.tts.utils.generic_utils import setup_model\n", + "from TTS.tts.utils.io import load_config\n", + "from TTS.tts.utils.text import text_to_sequence\n", + "from TTS.tts.utils.synthesis import synthesis\n", + "from TTS.tts.utils.visual import plot_alignment\n", + "from TTS.tts.utils.measures import alignment_diagonal_score\n", + "\n", + "import IPython\n", + "from IPython.display import Audio\n", + "\n", + "os.environ['CUDA_VISIBLE_DEVICES']='1'\n", + "\n", + "def tts(model, text, CONFIG, use_cuda, ap):\n", + " t_1 = time.time()\n", + " # run the model\n", + " waveform, alignment, mel_spec, mel_postnet_spec, stop_tokens, inputs = synthesis(model, text, CONFIG, use_cuda, ap, speaker_id, None, False, CONFIG.enable_eos_bos_chars, True)\n", + " if CONFIG.model == \"Tacotron\" and not use_gl:\n", + " mel_postnet_spec = ap.out_linear_to_mel(mel_postnet_spec.T).T\n", + " # plotting\n", + " attn_score = alignment_diagonal_score(torch.FloatTensor(alignment).unsqueeze(0))\n", + " print(f\" > {text}\")\n", + " IPython.display.display(IPython.display.Audio(waveform, rate=ap.sample_rate))\n", + " fig = plot_alignment(alignment, fig_size=(8, 5))\n", + " IPython.display.display(fig)\n", + " #saving results\n", + " os.makedirs(OUT_FOLDER, exist_ok=True)\n", + " file_name = text[:200].replace(\" \", \"_\").replace(\".\",\"\") + \".wav\"\n", + " out_path = os.path.join(OUT_FOLDER, file_name)\n", + " ap.save_wav(waveform, out_path)\n", + " return attn_score\n", + "\n", + "# Set constants\n", + "ROOT_PATH = '/home/erogol/Models/LJSpeech/ljspeech-May-20-2020_12+29PM-1835628/'\n", + "MODEL_PATH = ROOT_PATH + '/best_model.pth'\n", + "CONFIG_PATH = ROOT_PATH + '/config.json'\n", + "OUT_FOLDER = './hard_sentences/'\n", + "CONFIG = load_config(CONFIG_PATH)\n", + "SENTENCES_PATH = 'sentences.txt'\n", + "use_cuda = True\n", + "\n", + "# Set some config fields manually for testing\n", + "# CONFIG.windowing = False\n", + "# CONFIG.prenet_dropout = False\n", + "# CONFIG.separate_stopnet = True\n", + "CONFIG.use_forward_attn = False\n", + "# CONFIG.forward_attn_mask = True\n", + "# CONFIG.stopnet = True" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "Collapsed": "false" + }, + "outputs": [], + "source": [ + "# LOAD TTS MODEL\n", + "from TTS.tts.utils.text.symbols import make_symbols, symbols, phonemes\n", + "\n", + "# multi speaker \n", + "if CONFIG.use_speaker_embedding:\n", + " speakers = json.load(open(f\"{ROOT_PATH}/speakers.json\", 'r'))\n", + " speakers_idx_to_id = {v: k for k, v in speakers.items()}\n", + "else:\n", + " speakers = []\n", + " speaker_id = None\n", + "\n", + "# if the vocabulary was passed, replace the default\n", + "if 'characters' in CONFIG.keys():\n", + " symbols, phonemes = make_symbols(**CONFIG.characters)\n", + "\n", + "# load the model\n", + "num_chars = len(phonemes) if CONFIG.use_phonemes else len(symbols)\n", + "model = setup_model(num_chars, len(speakers), CONFIG)\n", + "\n", + "# load the audio processor\n", + "ap = AudioProcessor(**CONFIG.audio) \n", + "\n", + "\n", + "# load model state\n", + "if use_cuda:\n", + " cp = torch.load(MODEL_PATH)\n", + "else:\n", + " cp = torch.load(MODEL_PATH, map_location=lambda storage, loc: storage)\n", + "\n", + "# load the model\n", + "model.load_state_dict(cp['model'])\n", + "if use_cuda:\n", + " model.cuda()\n", + "model.eval()\n", + "print(cp['step'])\n", + "print(cp['r'])\n", + "\n", + "# set model stepsize\n", + "if 'r' in cp:\n", + " model.decoder.set_r(cp['r'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "Collapsed": "false" + }, + "outputs": [], + "source": [ + "model.decoder.max_decoder_steps=3000\n", + "attn_scores = []\n", + "with open(SENTENCES_PATH, 'r') as f:\n", + " for text in f:\n", + " attn_score = tts(model, text, CONFIG, use_cuda, ap)\n", + " attn_scores.append(attn_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "Collapsed": "false" + }, + "outputs": [], + "source": [ + "np.mean(attn_scores)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file From f70e82cd1953c2d1e03c54add7d5dfbdecc8d0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eren=20G=C3=B6lge?= Date: Wed, 1 Jun 2022 13:49:42 +0200 Subject: [PATCH 31/37] Use fsspec and torch for embedding file IO (#1581) * Use fsspec and torch for embedding file * Fixup * Fix load and save files * Fix compute embedding script * Set use_cuda to true if available * Add dummy speakers.pth file * Make style * Change default speakers file extension Co-authored-by: WeberJulian --- .gitignore | 1 + TTS/bin/compute_embeddings.py | 39 ++++++++++-------------- TTS/tts/models/base_tts.py | 6 ++-- TTS/tts/utils/managers.py | 30 +++++++++++++++--- tests/aux_tests/test_speaker_manager.py | 12 +++++--- tests/data/dummy_speakers.pth | Bin 0 -> 905903 bytes 6 files changed, 53 insertions(+), 35 deletions(-) create mode 100644 tests/data/dummy_speakers.pth diff --git a/.gitignore b/.gitignore index 9425a0aa..7ce70e40 100644 --- a/.gitignore +++ b/.gitignore @@ -117,6 +117,7 @@ venv.bak/ # pytorch models *.pth *.pth.tar +!dummy_speakers.pth result/ # setup.py diff --git a/TTS/bin/compute_embeddings.py b/TTS/bin/compute_embeddings.py index c58123df..d7fe3c4b 100644 --- a/TTS/bin/compute_embeddings.py +++ b/TTS/bin/compute_embeddings.py @@ -2,41 +2,34 @@ import argparse import os from argparse import RawTextHelpFormatter +import torch from tqdm import tqdm from TTS.config import load_config from TTS.tts.datasets import load_tts_samples +from TTS.tts.utils.managers import save_file from TTS.tts.utils.speakers import SpeakerManager parser = argparse.ArgumentParser( description="""Compute embedding vectors for each wav file in a dataset.\n\n""" """ Example runs: - python TTS/bin/compute_embeddings.py speaker_encoder_model.pth speaker_encoder_config.json dataset_config.json embeddings_output_path/ + python TTS/bin/compute_embeddings.py speaker_encoder_model.pth speaker_encoder_config.json dataset_config.json """, formatter_class=RawTextHelpFormatter, ) parser.add_argument("model_path", type=str, help="Path to model checkpoint file.") -parser.add_argument( - "config_path", - type=str, - help="Path to model config file.", -) - -parser.add_argument( - "config_dataset_path", - type=str, - help="Path to dataset config file.", -) -parser.add_argument("output_path", type=str, help="path for output speakers.json and/or speakers.npy.") -parser.add_argument( - "--old_file", type=str, help="Previous speakers.json file, only compute for new audios.", default=None -) -parser.add_argument("--use_cuda", type=bool, help="flag to set cuda. Default False", default=False) +parser.add_argument("config_path", type=str, help="Path to model config file.") +parser.add_argument("config_dataset_path", type=str, help="Path to dataset config file.") +parser.add_argument("--output_path", type=str, help="Path for output `pth` or `json` file.", default="speakers.pth") +parser.add_argument("--old_file", type=str, help="Previous embedding file to only compute new audios.", default=None) +parser.add_argument("--disable_cuda", type=bool, help="Flag to disable cuda.", default=False) parser.add_argument("--no_eval", type=bool, help="Do not compute eval?. Default False", default=False) args = parser.parse_args() +use_cuda = torch.cuda.is_available() and not args.disable_cuda + c_dataset = load_config(args.config_dataset_path) meta_data_train, meta_data_eval = load_tts_samples(c_dataset.datasets, eval_split=not args.no_eval) @@ -50,7 +43,7 @@ encoder_manager = SpeakerManager( encoder_model_path=args.model_path, encoder_config_path=args.config_path, d_vectors_file_path=args.old_file, - use_cuda=args.use_cuda, + use_cuda=use_cuda, ) class_name_key = encoder_manager.encoder_config.class_name_key @@ -79,13 +72,13 @@ for idx, wav_file in enumerate(tqdm(wav_files)): if speaker_mapping: # save speaker_mapping if target dataset is defined - if ".json" not in args.output_path: - mapping_file_path = os.path.join(args.output_path, "speakers.json") + if os.path.isdir(args.output_path): + mapping_file_path = os.path.join(args.output_path, "speakers.pth") else: mapping_file_path = args.output_path - os.makedirs(os.path.dirname(mapping_file_path), exist_ok=True) + if os.path.dirname(mapping_file_path) != "": + os.makedirs(os.path.dirname(mapping_file_path), exist_ok=True) - # pylint: disable=W0212 - encoder_manager._save_json(mapping_file_path, speaker_mapping) + save_file(speaker_mapping, mapping_file_path) print("Speaker embeddings saved at:", mapping_file_path) diff --git a/TTS/tts/models/base_tts.py b/TTS/tts/models/base_tts.py index c71872d3..c86bd391 100644 --- a/TTS/tts/models/base_tts.py +++ b/TTS/tts/models/base_tts.py @@ -407,16 +407,16 @@ class BaseTTS(BaseTrainerModel): return test_figures, test_audios def on_init_start(self, trainer): - """Save the speaker.json and language_ids.json at the beginning of the training. Also update both paths.""" + """Save the speaker.pth and language_ids.json at the beginning of the training. Also update both paths.""" if self.speaker_manager is not None: - output_path = os.path.join(trainer.output_path, "speakers.json") + output_path = os.path.join(trainer.output_path, "speakers.pth") self.speaker_manager.save_ids_to_file(output_path) trainer.config.speakers_file = output_path # some models don't have `model_args` set if hasattr(trainer.config, "model_args"): trainer.config.model_args.speakers_file = output_path trainer.config.save_json(os.path.join(trainer.output_path, "config.json")) - print(f" > `speakers.json` is saved to {output_path}.") + print(f" > `speakers.pth` is saved to {output_path}.") print(" > `speakers_file` is updated in the config.json.") if hasattr(self, "language_manager") and self.language_manager is not None: diff --git a/TTS/tts/utils/managers.py b/TTS/tts/utils/managers.py index 5415d52c..0243d3b4 100644 --- a/TTS/tts/utils/managers.py +++ b/TTS/tts/utils/managers.py @@ -11,6 +11,28 @@ from TTS.encoder.utils.generic_utils import setup_encoder_model from TTS.utils.audio import AudioProcessor +def load_file(path: str): + if path.endswith(".json"): + with fsspec.open(path, "r") as f: + return json.load(f) + elif path.endswith(".pth"): + with fsspec.open(path, "rb") as f: + return torch.load(f, map_location="cpu") + else: + raise ValueError("Unsupported file type") + + +def save_file(obj: Any, path: str): + if path.endswith(".json"): + with fsspec.open(path, "w") as f: + json.dump(obj, f, indent=4) + elif path.endswith(".pth"): + with fsspec.open(path, "wb") as f: + torch.save(obj, f) + else: + raise ValueError("Unsupported file type") + + class BaseIDManager: """Base `ID` Manager class. Every new `ID` manager must inherit this. It defines common `ID` manager specific functions. @@ -46,7 +68,7 @@ class BaseIDManager: Args: file_path (str): Path to the file. """ - self.ids = self._load_json(file_path) + self.ids = load_file(file_path) def save_ids_to_file(self, file_path: str) -> None: """Save IDs to a json file. @@ -54,7 +76,7 @@ class BaseIDManager: Args: file_path (str): Path to the output file. """ - self._save_json(file_path, self.ids) + save_file(self.ids, file_path) def get_random_id(self) -> Any: """Get a random embedding. @@ -125,7 +147,7 @@ class EmbeddingManager(BaseIDManager): Args: file_path (str): Path to the output file. """ - self._save_json(file_path, self.embeddings) + save_file(self.embeddings, file_path) def load_embeddings_from_file(self, file_path: str) -> None: """Load embeddings from a json file. @@ -133,7 +155,7 @@ class EmbeddingManager(BaseIDManager): Args: file_path (str): Path to the target json file. """ - self.embeddings = self._load_json(file_path) + self.embeddings = load_file(file_path) speakers = sorted({x["name"] for x in self.embeddings.values()}) self.ids = {name: i for i, name in enumerate(speakers)} diff --git a/tests/aux_tests/test_speaker_manager.py b/tests/aux_tests/test_speaker_manager.py index 7552e0a5..890cc023 100644 --- a/tests/aux_tests/test_speaker_manager.py +++ b/tests/aux_tests/test_speaker_manager.py @@ -16,6 +16,7 @@ encoder_model_path = os.path.join(get_tests_input_path(), "checkpoint_0.pth") sample_wav_path = os.path.join(get_tests_input_path(), "../data/ljspeech/wavs/LJ001-0001.wav") sample_wav_path2 = os.path.join(get_tests_input_path(), "../data/ljspeech/wavs/LJ001-0002.wav") d_vectors_file_path = os.path.join(get_tests_input_path(), "../data/dummy_speakers.json") +d_vectors_file_pth_path = os.path.join(get_tests_input_path(), "../data/dummy_speakers.pth") class SpeakerManagerTest(unittest.TestCase): @@ -58,12 +59,13 @@ class SpeakerManagerTest(unittest.TestCase): # remove dummy model os.remove(encoder_model_path) - @staticmethod - def test_speakers_file_processing(): + def test_speakers_file_processing(self): manager = SpeakerManager(d_vectors_file_path=d_vectors_file_path) - print(manager.num_speakers) - print(manager.embedding_dim) - print(manager.clip_ids) + self.assertEqual(manager.num_speakers, 1) + self.assertEqual(manager.embedding_dim, 256) + manager = SpeakerManager(d_vectors_file_path=d_vectors_file_pth_path) + self.assertEqual(manager.num_speakers, 1) + self.assertEqual(manager.embedding_dim, 256) d_vector = manager.get_embedding_by_clip(manager.clip_ids[0]) assert len(d_vector) == 256 d_vectors = manager.get_embeddings_by_name(manager.speaker_names[0]) diff --git a/tests/data/dummy_speakers.pth b/tests/data/dummy_speakers.pth new file mode 100644 index 0000000000000000000000000000000000000000..4ba7f7bc822bee93df7d7bce9a80c49871534559 GIT binary patch literal 905903 zcmZVGcX$-l_xSP9L1|JIK?hKZ(mNvDp-2Y-LFo*=m(W|_CJ+drr1v%{n_jl1lH}gd zQNap`3XY%@Q2{|e0s_Bt&fV|x==1ZR^YVS}Y(lcTj1(u0t5MU-t8QJd|L>p1UQN8_ zuV1)q`R2vl7tP-|zuUT%t40oM=r!{{|M2QQ-d>%i*N4m3_3G1SUhf{gx^0=i*}IyL zclA!w;i0|O%wN6Oy9N59;F83l=Y0w0zA{?^<)bYj+yOa_2PU&_}Vt${IRC z?DaiGVCnO!NhA)E=}3TZv|Ni3{l{C5NqK4g}L zMa=lKGfY^Sdn+ZCr6D!~+qSipMx{8sqfUt4Gzcaf4hsq=h$!)zLB*BXSQ0W`xkC^M zqt(Y^aovV-T#4Aby);6~=IIJqp}jbjqc;cY2zGMM4U>@9>WM`N?Y*3eaG6JREW(}i zxq)Eik9HHp#1WYgU{#qn(VSqTwtRVgRTA5&t3+~|spCpiy2jB;Y~Sr? zVPP>-HWI}AUze+5zt};+HeUCFe@2P)@JkZGj((X(g%vb-YGM&Q-(N$p#6IZ~Aqs1D zu@J1}i!hjgvblW>!mjW_PRN_S+(d}9UC%Wtt`3Vi!9Ayrju2JPPfCJwcV7Za+AzwZ zvj6^N4Z(uO{Gt=eS}&J`g}VY_!s^h6UaAx&Eu$ie_Kh@fC2|hjS0#4muND^O?C@Ae zi0qT827<+`jW!867glqG$TYWT1pgQRp~5o0K5bE1dHpy{xN7Y$>p8)8yi!Mq?6but z75mG978To|S|(vZ^DYL0IcLTz9`2F2UVNv%= zNhQ5W989<>k!2ECdGb(>h1tA|6b|0-{0y?^r(HU(g!A4uT8ZS$UR0Rlqpb$6n7!Fv zn1IdwJx|)Si(i^lGP@thH82qtO|RwcV_O&yDf>3x(F90@Zl1dHz)trMJIOg9Os5nBnu??GRK z%E5oiM56aSH-tDNMMnMdM1c~gj1YW1*==@ z2)1{c6DA%&W$mtWNm8(6V5oVjN??w=btsGh^4h) z!d1EP*K`Cs7U21w6ep{11uK7HiH0kY^1*33BTm{@ODb8RHBAJ|d53W-ncKdVg!n3( zK}c$JDY^WkDE(E!G?7lA!dD03===rYMV)j z3Yi5HR$0fJbAs*T76c}D`~d-08F>>4Ec(r65(~?09&8Zy)PGASZ0LH8BZU3nK9dl3 zc_d6IzKdsRgv^{fI)XWu6)6M_n8UG%ft8(L!YcW0wn^Z>uh9@9ru3*JWS?K56N>q6 z4Z)88GKdoj)_SmgWJfB(mAwHraJehsJQY^vv`i{{Tdt-eD#qV{0B2G@_q=qRIUOVx zb~0`lOjw0}e?}vif1l%Xr|@XU2TdTCt2BlO(O88}3%CpxcW$73X!&Ep}EyBa@2v z=jAZraq>>h(GkK`_iu&Li$w+&7O4Hj3G4Q*(h1S~Ur@#U!v>8?@`Qd8A;Ny#L11MY z_vu(zs;iGG+bb&-;=7!M4IDoD0# zQdbx`LL$VmuyRgt7Jg4)<}2?j_%zyJ;EK(i>iNo-oYQnHBBa6F7Of6u=$ue|Xg*9> z6;*4j6LQXV)d-0{6-fk3Uw#KBoN@R5M5mG&_CO)Ub0;F+-(70qN(4A}a0GMtd)_Yi zltWa+>YH_RTE*OIX(2@Ry5o|Hd1IhKCDrcvBCOqR(`l6*TEPjnhU!VevL2S0RAv>Q z)DR-_t9~#6r3;2rVF%fADl9kuFAuu?BSE9Y;g(q@A@=p(bVB+omV*7G?+h#~B|FDL zh>_JkgbAhat?D{q$;J8x;X~`OLixGZOe%*{7(w`)Z*5@_xyL`!2=P%#9Knu^UZhZv z>#t)GMYH}g2(I`06Ijsc6C4XW&}tb>I1{nKUzOxzut91jUX4Eor@BJ2-zgAn%PHzpzRWEdyRdH11#VD8&r!UTk@AEXhYKdGn6+Sb)M z7Eu>P`BA7E)n_AJ3w~3ZqLDLaIGe$g}5q!9Vbh{iGd1m|uUZsq*RoNw7D#$_W*( z7*s@TSxt*d(Ar5FLO8FtQ^omYEXTrJxg8`zR3y*jgtD49bwZS@8BADZ>(!{Rj8}p< zmDoG8V8Z45ZhBh;v-cGpA(CdAoKTv21tyf@YyAkUEWTYb+IJOZC+tjbgKE7jT3q zp54fz63{luq~ge#r&B3@xhq%2%_Nl*Psi(2qWnLG370!+hNiAAJ- zeVfxNBj<>ua_p}3hWeeL+E0Ozjr9#?CNnqKNcX|-$dGa2rdCc&_#|bTp;)InC$14;( ze9fQ|{(Ci(kefUeCLE4_b&5m?_mdh_M8vdH78X`C?RSX~@yGupu&`>A6*4aUsM9L8 zPB)lvIH^w)i%Ry;w{$|X%$Eq3^3vO?q&{f?0g8Lb8k4YVv*#JQJN5^IN>0=WPDsqF zE)gQQ_j8Tl47djqO7Wnb9KlWw7+?{~iu?#7yjhOKBGTVKt`nS#7jXnDs@*{%M7FqM z5RL|6fRgjd7Z!rq{l3)+GUNb92wPAsgOE9Ut&U(>AAQIPa^{B?Ax(Oz;{1G`q~e}8 zUlo_n1RaY=|80asu$2vuDwu!FR&f3F3v6JOkriVQHl`L!Li)XnIw4|njD-+8{#VSY zG=D8nQVCz^RwewO{t)1d|FJhL1WVDP3@Q`-0#Qu-hs8w!$ zDr{gC`cYF8A>w+5=v1o4cwWj`1BwhzWS_oFw z<3oeW=54)oD(15_8sX@Q(GnqYzn-oWY(I~K2_>|C5P{`=>ylK8_h|-#^+8)nCHkLLFyTzhk;?{x**|F|RoVEQz@mm25MWhuuODg@3kds7 zmDSsy5Ja+ko8wBvZg|NctXTd~N3hJ5pGhj2)eVE-I1`~G*w$%zRG95)T~z{3UWE;; z@=I)zka{UhA#ivvOO@AaQ4uAj{t)1>*?Ops5T&O=EQ0-88%!u+hI)C5MQ&eJg7dCe zxMKFnKX8QLvFZiOGJmOQP}%EK3KJhNTYajcrD{extA;|$@|-LgvighW>B$zJ6b1X?L1FK z6dt@_VG+(#nojT!+R9bgw9`Pal)2L+l@*Q7SX2)9Trvphah~tsu1kk#C5rZM)o~?q zueBmD*V?TRpt$bNR0s%~E2-oeH#mZ&cn^XJs61O>5gd)j7zh#C=ZYkx-<(Zg=>bm+ zDv8<6VZv1#2Yss(;y$aAgru2`V8Z1`jUlQec#q^%iidouiml_T1d(&AC#~4g?Tz6G zJm6mcQ&fcg^?e2wQM`O5OjyOWK0pwu<^zjL{>3j0!UqGVNJ85FEu7#edYK^X-#H+_ z8`f@M?DC=Un6Ik-O0|piraXivO zh>cZaVPg4qAr+R^rH#ZQc(v6Ag5^%Cpu+O6%(AG&Joda6H?RE0z#_svY^xDc_AlZH zc5v$h9U;;~rdU*RKWYXOR&lur93j$1?v_-tUMW(@IBptPL~vd&oe(;0qe9uO2n!1n z3z`}P|EAw7nBUZc09U!oyXk~jxrhoYj?y`m>=zp-l=L5KQHej+fWTZEhtY}^7mt#( zir)7%6=BH2`Y#O18qk;OI+0K{Lo2c+k9w70I*fwhufel%aq7ZiIghngBvq_w=ae9tU zh@X2!75>XGlgiTP>W9pXWvkUHI^}(dD`w^g!2~4zdetEKzIj;{d-L%+701gRB|?O3 z`jx;kjvP@XWlDXER<4igbAq|&bDa>;+*cx4%ETZK7A?}LB;Siui29|EL8b6!wj{*X z59J84+Ii5Rvf_k#s}o1h6w->hpU#l9$_;s7Aw>MpQxd_#r@qG#A|+GmR5Htdg9$6w z@;@wu$nm}-38@?Z(h)5B@z*f%Q?*^^1oN5a?Z=hi*0G5Fv9C&6g>=6~g;g%OYGD!1 zxt>>Uw7so?g>AmR8YW;*s~0#zBo9hZB`;&CLc(8tB(7LO>2QOvF7O{oa2$8(gbfic zRrW+bGqH%2!|LfLf?LE}SXiWO89_u8D6mmI2O6|;Ogg0#3cMG?gu}M#)fDWfmYP^Z zp7%mYDE$1mj$i@%j~RsQ;(n@Ru2$~=!l!c;twc)fYZA|hj12{xuzPzN6_&OB3_&dF zbr3f2fH^+>4TSh8egqZacdfC+!V1T4;sozuyI{f@zX^A#2={c)`&j;7&o?f1KzCZP z=s$46;nF|LEkcg-zCu*?8wM7Zy4YJsh($I_m8eO&#KLmN_;ZBV>R$vCN$2oqOTqBSlGZS{IbCjY-#Uz zRSD_+jl$NYy(O(eUw=jrp?NDUETW*p*9wK}_83^$VdHy=5a#P)ssy%bqe|Xf&nqQm z%v35YHt{v?g@?l@w9*M{^xg)7MRsaN5DSvw-|4-&I&uf-fG}VM9x*0v*Hu!R9JSR=XGKGsRtZ^GnsY1q?O1#9juV^ z=#;|YdlAwL&m`SAqLA}jBCXhxef41jtAl}uID&<)94iT#heK4U^xvdYNh|725H7zD z5&yYY8rXyGm74l^H~Y`MQggglY6163slQ&6a1q=qHP$&o92h^vpt5k@a7iWO2tkx} zeyotT{e6p8u09)K!r>G9XHgN!Uel?F^t(OPDxzq!1dU>{XRb*|k3SC+O38!glHhzp zJxN&cOXsPG{j1*QxDtLt#%l=XntIY8IR9{3goOR`HH3)h-HO0$z2V>Su+Prc5+Nc( zaxE%Z$NK410xsU*goDe6NvJsx%ZNCj;Qz3Q zV-d6ZCBlT2d-Oa>NNx1HDzQ1k6bgN38MqRzJ)W0?dv$jW3(NW;Tfz5~=S?d)^?Qp} zMeD~&Lb~-3CR`q!<@wT;{jax1tK7s993i$R{Hh~ZeE7=*aWuOx1Spk9-!%yCH{aJ0 zBJKWDP9^NZHG_)n>X(pju6MZ?UGO!v5&xVW2!6IZft-JoHvk8AyeNJ#4JgYQ@n{ zsfd&>CaGe3c`<=SH@jqb;fKiVybdNjpgXvlf;~P#qcS1aj|xi(8!o8?RX;;u2`^e2 z7M9m_11E$I3@{0)qjqTsQMCFwfu;AVG^vQS1q$|)>Z>8lMWH&a{O1gk2)3wCwt}-x zxP?V*+!}8pSlZ{KRf)_U%CQLdh@}el*q%BT=6qo{OhDPH<&qHSyjlj96>7)|Mwn?%7KtZ3afg2s#crN?bmT7%6^JfD15wC!@^vf zsyIRvOsS&~7*}afDW3U(j$pZyf7J+O^IF4%lDepwM2MtGhd7ljvxn#ev+5-cA!5Ee zZ4tbe7fJ+6ih2SQ5S&nGAVlTYmozFJeS5)#QhZ{rq~e;J$f?+;t|G7#fjcFY@V&FC zi0tMms<>~wM};NCt8a=39WdJT!jF|+bCyL&8`)kb6coRruxE8!iACi6kbb@o}I!V~f_rio#(BoIBu=Fb~h2WKK3|hI?zo!!tC-`s#OHK{2sDxkc zt5dN*@VxU^eYZ>%hhrN-$i}e-ocZ^?Qty81_uyLkc)$Fgd!<+KUa1w_E5%!*;2QW) zM>oex!kCHTmN!uI>6Rrv$RIX6)LbgKcCvR{NT>juEN!W9Jy^dg2^R{SI z!e$3qR8k&pGzs>UJqmkfj#Th%_(;cr zn*_)8?K*;$x4S8+>?_(~5Xzcu*9gh&D>;IdZwrA5IMw>Li4bvL{%sLb7gp*B7TNxm zNjUa#Plbe9$22O%2XZ+f_gn@{I9xVzw<=5fZd2e{W7VqQhb|HX@7&2wg@oo$O)SE; zIkv#QEQm6N=s=*5DD)ukyymOR~A}?Jrf6V1PlMH5GJf5=XNrw z1T-9=O6-(|I+g5;b0r~a?QxC}JMMUX6wc`TYE@t@rxi=6aIADlVT5RG52lvV}!dtzRJtuKJlU z;i~MxoD*z4IuS(Vkf}PAa^Ig+32+MtaQPC=(h;nr{rjre_f5302uH?ElaMv_D~Vtk z`RWZ)6xKV!so0<1(Ft)Kd=>g#?<}#1(ABSN2v&4uf=(suwd0ZsU-BM7Y?<9v$08CZ zouk6C_8d{G%x5iV#ln95L#=#QZS$OoZtn&Ez+J}B1)LDuvrHmHX1wQ-%bam0m2r;` z!NgDgc25O&^mCoct}tdIM2fYUib&t|g+V3rt#%T@cCT+s5W#=!F{!w>2O5Mm-s)!w zvE!u~oJvWjOdTPn)%%l*cx}a12vF?(mso_u>)+H7Y~PokXoUF6MG_$jdk^CTd-zr= zZ2yC`5a6&GbYDk^1Fv0BC0>l@SXk2jFLXkv?{Jt<(sDOY5rvQ9REddGFAxELOTfT0 z!o6{zNr>usRTAdE*WW_0X+QkI3HBamb;6v7SukN0`lEVEu;3e)BouL>)+-toQF!rFPB=KOE=(xdH!^eti@2%2xgzBFBS|H! z!FOu4J7EDq9J+X1^TMl2-x4DF37=1i^*w<_ zPp>7Z6n#0Hz;a6dq?K?D_tik~XN?b(=m@d=!752`e|uEHHKsiTI1}~3P*uW)Jte@M zbsLRV33o=Ql2aPMsRWO01rr`HHzQwCkvm`42x%SCsEEYQ;|(mr{zpHPkhbtGt}tM> zj$n}ybqzx7+dE*w;o{M|Bq8m5BOSq_cLoteLgY@1itDOd5~>>i4q@Wsc(?w~y;2*zS9%TZl`_7Gm2eTfMSbDN5n^GiVNmh@B3u>Q*#;&R zdtMzKA&zafb1KKeKY zc$}lV`VvIII9;a_^U^&@u)lOnA$QnXPgw{H{CraD_238=nWNs%*#3scbSxsea3e>s z;Cp!{6|?pdgRuW#1Hn(;so#1!a&qRpu-VHgG?5D%1u#|+I8Wu6} z>H`D8oSDlwA+*1xA;i-9HdUO1KbKUBCfw2p?l$u{f<<2*3=<9q?4L|Uy#4caiG>w! z8n2MEJWRtP_Wy4-fr*GS1{Rj_SCEMidPECOCAn9Sq*D59o=!#1xNi_#m)4mGk!2eI z6E3&)dRR4F%_-U%RZ$xn__N^~bVHxKZnOMZE z#lOIW!w1jrl!UTDB^)8*9uF}H5d#)+1l#;;FAE`3`mfNbL=HTtsj{ICr?R`V=Zz@( z;}0Yi+t=N6Lh>u=Cc*c~CMqJeX%z%`z_K%2h=_H&AwY3GpUM#;KCr${#b?ZTDy(SmOofy=qYPY$RdxI= zg3B>M64L7SfeDY}vwW38=DJvdD10_q;z~H%^-|^V+23?5EcK6#5+On!4z;Lc2hO6x zQq74vmDr(ERf!pRh9C+XxKugv=sP$9msh$xZw2mUeN8H1bKX{~gQL%CRJiNd*nnNA@XODy9=3Z0CYCc7+GU^M>3(w4$QEVXCrupBSRF2+yM-mc3S`%3KD@!22;b6aW z9KmvbRzIz?V;j^PBP%$vi&jFmy8bv_((69n+JEkq+Ty)ZJGfWMYgz!; zzylYos&5cdJ}Zz2VZQg2z?Owih5%IEsTXZq8u*}Al1d;r)`j)a-_9txMaAwc>Y8CvTOqH04 znaTCq^v1J)R~wIk91n)F8Ng{<1}1}!$x0)fG^t; zn5*q=*uX07&dUmB#918+vq$f?5Mo{LY*jLX51Ujose|n2a6CLdmkp839NBgBdp&OOb}URp65vM;&(W$jy0MN6Ap(@++h(C zAADgTL}6x_BrLh^f(d7`68mvN$FG}E5ot9CSy)7<_ZIB!(B#97X!`H!tRov?43Wb-eb1KE7Vk9BlT4fLt*7?E2&*%CA4I%cO zPvTSp+s%gwC8F9QjY@KK070b9_yPi~4maH;2}f2G>V%2(9Kov=Rv1{AUpD)m2D8U&Ouek&_n%sItzS2m!8& z`TR5|xD!3ky0Fxd78VwNHBTo@oEZ)iN{{yqh2YI^Sy)8MTfY%l@t;#U7RGCwmk6=R zJZ4bYH?I|^QsBNOspPL(s}pPk_Nx*Y)Dr?+Znsx65F%0=OkfdT-jP_~NjpPBh{8r4 zOhV|H0S1C4e0ByVAe3LX2w5M*XoSkQKT{>>)$de^h-j-y%8TK;7e1hKWhYvRu!Iv- zSmvMs3bPOV0!QGH!$!YM5Ycr*)hcn{50X~F{mMB)xLThlu#_#|Lx8IidwgLLqAk0Q z5IKAvOjy}|dEZpHH_t$b`TAu}h)rx@B3Mj$ON)@_^9~iUC+Jn3itXLk4TQ+vzmOA( z7v#XiGDW@gMCkj=bu27B&d;P(#2XK(i1-0j1{KGM-z0)X_X>jvmw&LJz5;*yfyBbn z=6BNxC6D7dLO5;=S0#JhZi`Ap?^jeYLp(or&6kUR_RrzAi$Y~!A(qrNdEDmLPFR$4GXjV z&-1O!oYCK)k}}Q5LWnt=uET^g@#7*nmF=x|QxW6p8B|#6+0h!VSn88ok`S@5lYtPa zJtk8TsgtWgfHRTTuW~}+hPQNt*#7-%FacS&hASkF9;Rb~KVngAA>j9zmcoQGulh5C zO8ZJ3CX|@3XPJbQQL7|EBu`xn6Oei9M^12coo^sm^wL?9iZjgf!wEY-fKy4X{%UgdF~NggwWx&rFb*c137_lvk(>fA_ z+dsvi5_;9f5h8ovbe)QQXa|cBY<#HTnx72;F3&%FPeX|CtKkavYJVwgc;P0el}|4} zm~c40t@`8zKUmMA;=9f%3E88Y5Jbf7pG_+Hn&zg0OX` zug|~lm3s72|IdK-KHhKq=U(YeyjSV~_ewd#;w*Z+f`v6qgxDA{NT(8TSiLKYym4by zu_cW+a3zk)Tmq|#tD{QH;Ac9nSn;i2EQD|_ev`l|N2<3dk$8KOS{-Y4()7YJA*0&p z2$q`{u1akG8U_{-{eq@oTi?f`5;Nff6?Sk@CKVRvmjN5NJZZZi=gb$$*^K-iS6Is*Ro%0r7v&bvRtgyPfcutCU4{@6r_ zO;RZM4N8|(3Ld;>5aQlf-#4*x+Mha=oQlV^Vy?V23k!?=aT-i`oX}@`4Js)Ew_Aje ze-^=n)&8*wIw58Hb&F70uz?DzYA~H+fuA>q!vy%&e^*0@(oa9L2x(_7QelPl=9^Sf zgG*q-nZl=U>4eN?9SAJH#S9Azt87-oK#0)U?O_5EZdVc5zRxZhSeV=Xf=;avSJz_t!UIM$Y-b@vXpIn^igWZ_ zg@mPzEh_7-4phbNUT#oH{(cZa#J@1vq>?#og^m!;dY%`qWB6!J#mBZpt&Y@u)5OA3 zQ-d`^-lcR^q7R2EOuaqFpjCPCH3eI7tWIUI{|%UM`Jry=OD9}w168Tm)KaHa;iuyW zBJ}=HP9^oJ`cVkmQ}q;OnJ)DlV|lgf!4deJ%bFHggv@ELY6#~0%5;O^opA^zl$Bc_ znS`=Pe+wb@R?Om5((3q8VI>D@QW5Se=M>WHZo>;N5B}v9g=p~^0sgKWw`i4i(?=(y zdkumKhyA}+Kija-+5;>qh0j_U2(fs4rA}qmr6W|B{|7!M77>5%yoF%lg@5W)g0E~a z2#51_mr+g@WBg}27;weD76TVaWD)7qzznNHs!?D;PtZ7!Az>?$D(^$lP z@A)(`>&}ED_~Y93r#iFI_&}#}=-x{(@o|>z;#6YBR5Pd)wun*4yEp>^Tpm1Wv?@Vt zr^1mhFIu!JD0y8W>cntP#XhsbM2LX#|0opIm|{?IZ2t)+JYbH#$RgP4H8Kz)sF~+G zn6arj6_$0?+oV<6F7*s&IeWjO!mB1FW9Iyzx>u@`}5>cF2}O+rbZ z`;y>#S^*P3=&3A%$P4LdQ3*``K@~?yU6V@O=L;-?v&$@l5LxvN6|u(8uHf@-R|1P3 zxI_2C4{Dm{OhRON9Rkbv-*^b{K~2x!;uQAvp7-$Jk@YyPM8Wz*gU)2W{L=fq#ZtJ)b_F>-|2sW~|2@^_U{o5$`4a9{FErPB7Gni1)A1*Kmi6H|_ zgh+p9v_+*dzKu@E$||QK^6NB&0B5pBh8YA~YllWi>Do{t*r8vy8dTn!H&Vel*$)D& zw*Rt4VdbLJ1QAucvnshQ8|WbT8SS(Gsp4w=QgJRnt%~pZE*2J16+Vp@ z__j!e2_H21tF2U6%1tj$#kTw<6Cn!fdA?owjeDq7>iQ2Aa=J#+8RqzWobH8>Q_$_S zfe`sCZ*W5R%@hJF%Q>h@Or1UwS1e>+Q-hFF|Ex(^aIZN`SY^gf(-5LyMzADAeElUA z=BSy>sRVx5R7bF)rSo9|;;KejguU+X48op{4#1Pt{#d7ydFCsV z5OZfHCpc1D=m-&1@rS~Gu^s|^h{T#7sS@?_bA{}wWs+70mNX`a-P>zeSj3XK?O?)H zK`Ay#rH7^7HiR*Q4v`IKdN#xx}K$0 ztEW&AvH$n`*YVz4R4M7zUZ*pa?H^NNj?2x|%I9<)gI3Y48dwOC5fZ10y~}wB@M)x< zujB}E?891;;JE&yj$pZtXo5(r^8^AE-_f3%6vv@m78bGcWK&KEjrqqwFsE(3NyXk` zJ11oP?ox;>ml_u4c=x7>5ZR}zNh+JJe#i-?cf5`eDgXDkK|>F9q{7^d?r~hP!%OdI zgxJ1+DMY+Hkz)}D(qbfn6)dZH<=`|e-%bdU8BDkN`GYHvRb9KTlzbXwO zoE@B;;NJBOOt@;>V$b1_>FQ@BmRUH1RwB%upm6A~Avzuwj%E)vLSA_}6&B^w4+1<+ z=T+APBR=RGn6G(QyqSlBDOS6z`kUXeE5VIRhJ5?alpNBA6|>EhlU} ze1sstiFz5j{K<>!F_p!B!o_h;e?bm!!1HqUkREG}yttK({XpLd4&rB*E!ZT}QCs z<~1Zj?7psE4lLo?WhyLWP=QV>|6P4GLeYYICc$~8rjB3*b9Tdo%Zo=Hm4vK$eH0QK z&9|_y%<=aN$_spj=<7(FbxZf2$%{JAF!%O61pXqP+_UFOF5O~|9wng1$UcDEUaRFW0(NP zx&{V96n#5J2mJe9saNkl^yih{_VMoWpL?aQc(2qA?v+xH_uzOnvmafLSHmxK5A3f> zX3=O##nrweOgNJ~=dMPj;&q2At}puPRAQzS64=qot|k@xi5D#dE4h1@Q%P;2o@?U7 zEze6iYT8QJz?p;#T&FXUtDNf^+a)nD~jUsb?ZsDu167GBP_Wqz<@XU=gVo zKG6{@W^af|aK&7J39G4mEvFLxNk3I~P26B$f&Wl66_SSp(u#>%U36OI^y#P&vnN5V zBKO~wwAy!LhDnI){h>~8bU;0{K!+5 zU6HEzf2t8u{}{&!X1B(YP|>uRj$p?pUC{{ks8KMXY`pg#72yh5q+=1u$8Hc<#h>vC zZR|Z@1FN#wohBjw)1f+oWjCqC303d+)e!J!e7l(h|3f8ISjL9esj$M9FT)0}8uP>; z_uBe{kNQ;+oY>5^Q<#1QBt6kwztcWdKb05cVOZ3Xb+)Xjs@zW+(*p{DB}A z9QcLP$~mx`f^9{2f;hNkpemIkis1-co-<*Bg%GWeeXdGyOgB|>TRq~qVigN!>V(o4 zeGG(%$XlpNhO4_pCHDPg9KkX#RD%gfZT`AMh|-tq8id@_o_DX1j@xu9!|whJ6V3!% z(=7y(-L^|A(E|^vl5pcW$HGc&>N_ahEjk!jM8;!pT8Y@Ci6$17_2?!+WZzq2P)Q!* z`R3Z&Pt~yq|C|()R(pT*JdvEwuWGbfvDfqJ-d8-ypfiytFI%)qe7;X2nEm0W93l1` zJFOFrM7pT3LjMm8EX*9@`SQAUAJegjh;2_y1l#p%3yq4q04Egqk2YOF@2-l|Ff}Y9 zvW{U9jJ)&M##yUq7%~k z4Ym;MXop*zkkGZJDxrtMbS%Qx`+!2x;gOt5PFa|NU|9ni!o<(e9;hQkN>o!x#g^5} zB-sDhpd&V*84M=Iph*=SL5HaHCvt}-vaql)i@Y*qICRcO#E?U!k4751lEiSqt&bVigM zY;4k*qAS00gvcuG2@@W0{QWbk6t2zJsqA+jFbJ-y29l6er<@?dTCe3)Ry9>m2^O~} z5&}G6YOinAD%QI>73OIFr;aO@)Hi}4it09^l?bj1wQwbzQ40vH#4A&+GB%GVu&Q33 z_vfV0y&Mw!;!&ph425IP%T!q5rRFBBQcG%E2xgCYAPMfeA*L$dl){8n^y^Us;oSS7 zDrMOx6*31L*Fo^@o`(}ZG2h!7A^hhmoeQ- z(x#^tTm(Pj($+BHvxv@$G^p6Fs5cu?@cRy0vD`m*N?eJfN&9pJtGGDRqLTh&u0f^h z+wlbWo{WG1XDaKj;s_D;zex(GR!=vmm{0aoVL2nhBo)Vd$uQw?=7EKlDs^WV1an_H zN3hg3mvln*#95M%{7*+t2+!zd5Dt4aQgGIdlvqUI=(Pl9?tah0!h*JY5rlJkTOEtY z96riGu##F?7L~M_elVc~Ozy!6=KuZm;w(>Vn;aM(X`o=!;fy~7Dv0l!E>*>`yab|U<`frXXy z+0F@@t%FoVe%VePi*QWO;|O*%x1K>I^pm?(MAZvJBo%X76@l4nsc#B9k^F~RrTkrD z(3wcSgaH3HzxFy7CYrvfiesv!iaYCsMyrxVZ7f3BCl_GCrxA5-E~gS66eJ1GD+^)5 z4@TLj1KsS+U^ zPhu3DohKMrnD?yBR9Iv~KL~IpdgBrTOS`S!Nm%@yAJv(F!uo0zS-r{t!5}p z-+-?q6%qHjLjE7KI2NX@ons(`t*z&^voj)6tsE=W&*3aM{wE#Ju!NGU1QFFf*1#f4 zoA;LlcRlr$XU=+d4GXicT%+Ls-FivIR`0P+aGsb(1^&!NOI6bEN`)7Ef=*j(;;obvF;7L~%GNd|&dT%M~_$?N2K+8hxlXeA1Zmca(j zq&Q+MLg{eNvp4zko;ns0)_(*?u!#2u>xA4|9bv*Mz5Q5=ux{}&DlD^MTPiI4J)Cex zyb-PwLc2`Y2#)Li7J?PbtZz`s-g8u^QkC?WQ(0UzR3UA9U5kqQ*hT}v3Wg7b36H$# z^QjgU`(}SCEc5^VBfwd=qd}|W5l<|Ha9>($QmF_u3_|Aer7&TY_VZyXBCp>$RZ>5B zL8DdjnnVl1c72;72`xj%5`^=WFb#|NNF3J@YzzBUQc2#W8C3E5YRD+8D z#ywQvr_;-l%CU~GaRe)ycL*k2Wk1`|La<7{Q6hxvRtud{L7I&dNL4j!A?&4V9KkXczCeYAetAZfZ7(*54IJKjDVo6c z^**LyVaaFDD40K|N-C+Z^|ugW!)eb`H7;NX1UMYg_LfdKy1ken4ka$&Ka~i!@7*h$%A5x23Nai1Hn1>f;252dGroZ&Bpn}Q5rWTo zULR8@ghPNwK5+P&g5CGDLQ(Q=jw^Pexup{_{_hV%$ApAySVY-_KWHV=A4hO3tb+G| zi9h7d-znIa-dD)IGmYbl<$QJ2B%HjqTOvewP>x2hg%2S&CgVcSo1ljRSfT?6Vh%DlZ3VBK7|P%H20cGUGmaT9m~hp){=Fq(i?`<;#WrE5PNk$^F-&;C;Lp{Ujt#ur zg^KX|x`#$9$FL)u5cx)ojt~oz8^eUFoR20*LUNll6CuJoG%yH3w}LpKFle5MU?sk# z3Z*++SXjitnzLZSYR`d&29<(SZA>b$@vU@%E5Dp0M8&7~U;^B?-qH}vQTJ1Wke72v z63jj}olp|Ik|V_KsXrQosJC)p!d3Y`8bM_Je3D}k_FtM~0vu~15iIS-Se=Tk$5oR` zbk<*zki4z2PKX&AWFbUuhc28-LB%11u8VNBTcutXEN;k`8W!e^f7zf_ zX!6`dqXdRND-yTC>;R-#fHl7oOAd0Jg@IR=kt8eo!ywSnU@j>u~TO#tXQ!f0<01| z8Is_=d{QUmmSrNtkfBc-9A!;Hg-v5OyI} zqmsI25==PLB8Mx){CFD$e;(u7Y)ObJtEVGG`jn#zJds7rPUaSrqe2TTpIl(dSxJ9rP zzM&!5hAq2IDupA2q!PO|k5h56v8oi;>TXi;Z23_~u+r~$!GuR%*RH)no;+(&anEio z2@x^t6hdd7G_bJD20b_-HvBt{kos?wfq)-e7{v+M5vOznD{>^k1h@}Xry|1t>>;rT zukRPrMOc?LCY6~r0yu)jecV8!vgE5FFyXLiTOko_`CAh?A^Q4eDk8P@Z#tE{^5zO9 z(Gd{faL)N(EQBb%-Gu}GbFb9BJ^i{;SO2Bm{&TO?9q*NTz`asrzIv}PPt$=KJxttR zO(lXQUQe?SB3pYvVD8!K1zQ~KtG=_blB8vv&e;1mBCv`!PE|4jI!auz(taXteA8z6YZ|iX?@!kIa zb@8sBT7^9>HE|`9Th`PF&U=S+Lh&DG3u}L|mmrosjzH9gC24_K|^L zB~^NBgtcM5_jAR-GbR?1`|%02DxFxsv9LpR{~(CC1Hl-Fqb2Qt=Aox0DGEgAlR<*%O=4-PknSmY4HdPi?E%XBxz-=o<@bGI+yBL zg#V>ziD33RwWzSHMfW(BZK2TyAz{o4m~hyAZKg>jq(cU$QZT=^LeBI^lggeI>b6Bh zR@tXf*;Oq_N3epr2MJu>?5ss4!=Gz}tT}sBk;#t^ z8X>33dL1DOhA)5#$l2?AuA!}08&sUPPiqJk|F93Il773~pt3sl2bi!*%0Ht@KtMV{ zluTGhEBHxLEjb8&z3lB23n9GbQe<#nu=JsmC84z4B$!ZaS5I?<$Y?N+ zir@t`sIatmdYH6Id8xUEV4u`C6;fXKM#292X^AT#oA1#H$#eP`guOVgYXU}axFP$#&b1V{wilKV1DyvnuAqLLm~py0@9DzS*Nvd$VI z^6&msnDd5{Q%N414-+0IJN~dvsA&0yL2&mNY#~H(RC5#XzxPU=+I6FQrH}lVe*B+% zrJi`N)C+$PE~_!etC@Edmk5y%5vEGohdVSXnfvVn0Pq}f&hmz0(|ewu~Vw3ReF=nI<3ObP1g{j z$g_nL(p=pMtbD&yqmmMJj=&NYy<}ivwqHJz2(esSL|~hrY}2XaCCuT3xJBa(1pJ+a zWJ$#q)&(XMuQpP_3`*3n2>*$9O$1B*_7hcB)Obh7B9gYPf(dXgS|tfZ&Fh;8c68KK zDlB`&n;eUnwY69${_XMrXbA?uAX2&v{x9l>%REP@F*G{X1Q zxvt$51Bhm6Pp+XN(qC&Vsn}N?)(LSve>D*zTFtFfBoWM6eUd>X=Y8LYvM{HHTDk5# zf(<7&r;ZS@e{WIPIp{M8u=0F9*FcDn zq*$Fw?1eR)FwPk)5h8W$yD;IfW91c%N=nl?oXV!w)2T4$`m2&kh~s0Ja5(d~dmJHR zUOG!f*q5$VMK-HJ1^$M22P!P-;2Iqgyh4sRYav9ica1^V9rmJ5NU43@BINHoB@xV7 zqCT~Rxn#FV#apk3T7{+j1pyvs<6G|#Sm{aM7swh>N5d7H-rxbPgxP1NiAC7Uc1Q$^ zTx@EDtm+9SLKKeMZ4k0r!oV{d>#NJzutSd}7O~^TF#?OPuU=PKcCQ9Hu2{r-zbmBv zUP2J=YEBJTV#5yuC86|sWs8vG|1Kwl+}>vrY)x-igwTRADy-yLTZx5*{+_82e*Gnm zMVQlk-!pR;gzHpX?KGHh*p=tI%C)*Jr?TzcRE?1G;x91aOiK1V9U*qU+MmEO=J(UE zu&l`)VFHTBG?NIiRr`s+wrBhU0g5LgiX)hK;RA(&$A4K^gtzJI8liCC2$)bJ`rNk& z-gEn?u#}e3l8XI#KLQ)~dZ|L{gh^_(@yq^}A6{O*t0qi9LE0*gV1;`|nN;$|cB3L< zs=sGZ$>;eJ!P5Hfgo%gWo2ZKOtrI2|k>X9Z2;-`&&mWdIexIb0b88W;*p%_n8WxtG zw~-SqA|^U8%nh4}9-c z_lTVaBzTRglFSh-CG3n3bFL|5d*3o>m6bElLWqK~-LC%z5u9?AS3=t@2kL^n?GwU&iQBp%YTxDbo;QYjRTp%bMtWm8iJk zGH}H*e)GLO<%472`hV_~dgHxPAG}v8UTx9Clm;Z4gox1l1TkWM zO%01kom5JN<=eiqs2o1HL_@%zFiw|L?2of8RZ3@ZD$X@qVZxb`?e{b)v)|}s5{_NA zE2MAt*Rimy?j0=cbkdc+b=W&4JI3_|LV z-4;Sb*8W1L60qu$q~hM;`+5y&besy?>&#HAo!6dec!m|OJ-`VWEgma`^=zuJr*xF% zhi4M~?ivWO?5|6lko)aTRmxZ2l~~x3Z)bBtR?!qy0)OdjViB%TsS&)*JTT#KN!DG9 zO7MZBl2H23B$E)o?q40jyyvP*!r>^5BSd25z9u23PGc&}KDdAit4RGpA?i|hI0BdF zANPH@^OI9`Dn+~I8wjy``!ZEFw#!vWzS4+REc3%+%MULPjH;(0M8t-TFrkE2E#_3h z7q60ph=K%|aAw-f7dc^fhfb>O_WN3+vcWw1 zXJ*g}n?Ys9AICVMxOurk_|y!A)KhB|a*AJrBk*SA-ApnFuI#TY1ao|qY7#rfHi=dT-BM0)Vs8ew;69gbjmYlj$A3SF8`C3XA_ zjo|)mJVDs6%}^yc`g?;`u3bSoLhvGoDr>yAG%RehR7Ipd&rz%RRZnOoVoxlCBXB0V z$wakU`*|Ooiet9hB&2?D(jsi0Pz5GDMebB}w<5}1Q>n0#Pm45Mv4|I)oRH^DHxMHD zMyy3h`Ma?sq((jBsx;|tB3OvgP$R6I@CPS&CiTz}VnL32Q5VB`wpta>@2KI5Wn|pa z5n^&|v`I+$ai&JFKj}tbdv+BXSXlDbwh|${`}@HJWTY=P5Nvgi`#K?Y=UFNuqFc5q z&Idy|tsG_ZEJF0R%T=-2rW;s9<{YLnAA!mq)eV; zAz19?S~>#$LggL;TN!lL!oo7!4N@hc%`lEdl)s*5B3Rhne>Exv>D;2?e7s7Pv=8D8 zDu-YHjT0hH@6r&$)oZ9u$j{zwB3O8xGF4Kqv?Z|AD3jAFvY@6$aC|gDmF%DYq$0A% z)YoZMSUph^%%vZ41pM^rUo?U@`8-T0_8OlXgs2~$>j-9VYd5LPJbc0+6pnj^6B57i zeSz4|1?X7V@;SdrLcz`E7D0aMRK+=`4+MCM11(z^fd9Q$>ex~Jd8NMoOZ)xjUa3Fc zD-D2qC5NB-gkpLB{A%IDu+AfP!-U669d(xzg0ChT2o}530~1yi2k&qyMFC&vRF?Jd zy~7U9ln~&I^E+Kfu%e#TC6$<3rxXgMdiSu%dIcO;EaH3zf`}_iqBHDG@2jwZ#~F09 zxkAB_0JYkBbb>-~?~@8~J0_TZcsRS}P7A^IzMjSj-urc7!pc8eeMf@-zpCDsV(*|? z8m&CH1L+KlzWSSvh2>3OOMoAW{FjAAY<~4JfhFD9E~)IO70w9}`NwraRM1)t!6Fjw z8-(oH*CawXN=9)i1z)W<2)2qMov`%r22M!6INCyp@GkvzLPE+R0*h#$z^SAU`q@OV zvd~$Qke#}eBgBN_pI`!VKYT6`Y-iDAPRKcR%p}Y%oeC4q6#V|VMp$~|U5;R3?^jds zH0>d=2>aZ>U;;dE46zXK?>G9H1XtV{ju5LGTqCgbl@BBqR(Q9rLGX5%ZXtxNxPZV$ zZ!d!YXJU-0lHggItV&LL1A>U{{mh_MW(%)G2=n$hjj+7;00n2Ozd4n@xi7$kGdXLf ztCBI{T}dVK#9%5cB4Y>ycv5%NJp&=CjM8BOw(P8df)97l5=kW`dV(sBQ;AeqPe5#HHv6PWGC4>+#aqDL1LBC3vp0EZp+Hx$gz&Y4(P@F3r3g7;OMjzt7dRx7dk zm0u+mmS=mH6IN9EOGk*cZ7&g6>GPKroYz7)uGklsM^X{<`$j>4!+YkP_+EP`v`kE%rE*fcCG`OFiA$nMEHmDFd8VZy3dKSU5=wf|Jbp6{?|6_s*I z5*F@OFYh9wbhM5|>Km5gUceR+$f`sZx|V zn2PXZH8N=xv#CTwh`iB%tK#~%g^q=}TUQ~7@ICh-z?rN%%PoQ{ca18U?kW-sbC};* z2oX2?xo9l@n5~p3w=J^Iw7qm#4P!6|?5Q7L|w-J4}Rdl`PX$ zS*t6Aby4?a%>D7399JT3%{Yl*nQ#6E6A=1Krj8KN;})7!k|L8OA^e^PCY;HLxk3=h ztuiGRkvDdiNpPoG9KjL`0wfiCI0h)`Kg==-u?ad%xGL#!E3S~7qY$&CiAKft=WYUv z$#_@6+bvzk70X)kvPDS0FhU|k)FJf^nz?^EZ_vut@Mf06ul1TjO2p?9i|{^d z#{vI)uhgNFx>x$df9a?HxmOy9_ez7{UMcr#4-2nmdATOyGU`QzPuI`XX>}-MAAxP2ep+H- z2{o#l2r;$Ww=kguy6Wmw{{PRS3A3z1!@?4_T;l{=(GH!EwJjMYT<$vBL8FrVmHL8% zf6sUt6|r&QQOgf6cZ{EBAjGmUaXP^>dWlKc)1sw;UIhM`x|v0=c|U^*hh1e`ITgo| zJ{qAQ=nhOcoH|LppIQ2|SX!}i-w!|)DG9SUopH`t0uvr5b*;LbxlWJLsg!*P0^l71ep`QhUPv|V8kyc14Jf@{G#n6Qc%aMd70eOgH(MDKTW zRc4g?KDAum&{sEn`)b+(j=-7qEAA0k%(Evt7M9TdIVa@w8K#Q!!Vrl?WOqw75zO7S z4Oa;MQ%4AMYzcv-*BiyLu-&)6kq9wp^bnX(vc^@_sZ`AGq7e!%U6u$IS^0!Tg@4uB zpt52`L@-hLib2S_7^WkHUA(4BN@P!qO6G)pF!AvDk0qh# zY!e+JqFx+NV9toIRq>8aQzdniO(FVw^};5~J{TnZ@G94o2?m12o~UP1;q5jm?5x~L z$HETO@wX6Se10;g;$G5K6810CsEFe6i*zi)T$gGh*!tR+U;;9qPT~moL7H<-D(U5` zsIY|DLv3TqH2eD+c|i4dVnG?;LedAp5)5X-8z zkpz3Y=Tw+uVpA&c^&ZG^#oPy?bc6`)A7K$9-FG-aOvedlBDLQr1 z%5d~lC`x+6pc0<^+#(bimvsbNlW>6`;@8g}Z`bfjV z5*Iw7BH|8|ODrO1>suOvIritmgpx4ePgUISCQ)JG*H-JeVy+M3IU(oW!4^Vz$1i{h ztJ2z4bV5p_Nd`jX+?k_La6Db3QqZcoPDneb-ciha?KZ98ALaa*0C&W_3_4>xxd{^< zIp*L=f(Y)j)u0k?y+ehS=lQ;EWjs<}gQE0kPY%2Py;o}Au^s(+rNRD7hy3SWX(-++ z4TF27^uzuZTm&y9jSonK2y1_aQ%M=tU8j=U-! zI8%JMfFRQTxo%K7IC=#^Oo^E*!SCr);9a+yQMMz#}i){LmuUl5bHFeFqMb zScL1-%?1JfE*BM+z5lQ(IbjoE17|)v-AAo#m3pgH+G`i6h~#jW>4#_1w|7@1^3RVU zz?1Hrv6mx+{oZL++%8jMfq#T>p@k56D^KWD(h6faA?gOBBG&(Cv#^M51CDWm*!B!2 zTwak}M0@^2 zSXgPFUNB)5F|nQ`r1f8CAegJ&2nEla3lN}q)@{@YX$>AqLTT$?4MN!`_c%giYOP?x z;k83LTZHY4vJFCMJG&$}ew$zs);{$+vYwBQG>T~KYR-F zzWU&bfg5K)z~`!YUnkfz&MKs(K865??cb~SD%|nakyzlSDbS)-hk-3s$!d6&Q`z?Q z9s|MnpW~=7Pvm|G@HpbR@2fMfabLBv@99VoeY3i$k~Z>7I187T)c(aF*5u?;9s_`BOaMhBFr!0hU)_z8SKNV7-P}b%IY+z+OpKc(S>+8*uio2u< zr;_U`Qi$8;Hn52Oslz3~wf1iU3r?M9VPWB)6sj^Od6y~&O7c0aRW$oN{1QGvr3$+T%Jx^eXA7?6ros9K^|G}MpYd-@a z_RROa)&<&cN-7899&iLR|7oZbk~^MLCHLVZ1B*yn^cPHkEA~~3kdm`kSLKTO91|

;VBDXZcazw~NI2lPx-9b_+LXmDD3p!S$2+GH1@`w>Yju$0^MvVMoMVRorX;vaqlr zAM`Z{j<2Ukgvk3gofC?dbkhkrul-G6QPsz*l2q@x#1(VpW?6)cpq>UHZl{!lZIdKN zh@4!H!W)Aw7*z6Sg;|86_Y9p7`h6Tnu&{>f2_o{9a7o4eZ&fPr!@RzO0B1@*8Y>aP z_PzQJDFUm{GO6U-x>^XfeMTDv+xiI{i`d!yR|CP)&sT*B$cy+;M~LKSODrmxD|Q-$ z?Aljg!kL`7!xAC(etg!T5)>YM7ux`C(tF{E9)V zl1;A>Sklqas;p{u5jJr7t{?hagoG{wRSDVQ`@j|6@=9EZf|TiMmHl07gNkkAPdb9F zP8e!YDe~)WP_dQ$M1_@4RbLk@cGAnVf}d}3gZtqFI{WW|374BSC!2)e$hE4(-&3!U z%>6}_PAl)S2NEHQmrbA|cKuz$qLMjj9D$i@he|4G^%7yiBbOZxS4hrXN)V2zH6^Y@ z;gm`Qmd#$E6$_d6hJh=V@y8`j2)ySp3F(`jsgm^jDGQ4zjc6(nthilOi;#NdXPB_c z=vrUFGk2IpCG%Vtoe+6xn?$hG;@X@LR=Ze7z|RpM1QTG^UPFaNz5Shmg@vsy;Dp4V zHc7&PzmF*-RBA>LvRS+itN*=M>exa3e5K+3OGo_YUTGxWD~*DCrCl$5Yr;kF>9b@J zUJd^bEv^}XW%TK;N@h}~#1)&qWiL!Pll8?ns^r|ASP4%)D3!HgI{)<{CO-b<8!6U@3E3 zsIo6;lu2dn%f&EZ72C9(MHuefJm zitC+Q1i`O{ODZXwwkTx94c4ioUHDi-i16T0lS=B%aZ+JwWti|3i7#Ez3An1|PJ}uU$L>>EA5>_mEzzHtz0+?_nb^Aj}2y33I6Jie@;|LacvD_jo*}s>7zvgIS z5os^oQX#M8*AR5h6D?Gzn(TWll(M*V{sfi9_1K1jN;=A|ify~wqE*glw?-%)vPL3A-uP=4A*C?GM6hic zf9iyc0QFxXB4fuxfK^WAC$tiw9S#{(!UxvX2&vWHRb}_MRve2+4o;yW;^swKRMtM8 z1QS-FFW)l}%u#)ULU_Pk2(XHrIFJ*vw>F}}T#fT2mAykJazf0f?FlThqk`yLY{3RD zchujYA(*pCf1OIo|Nq;$v950=tz0Mfs#Wap78;eI6K=wUtCo(-

dVZL>ke?$=Zy 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 gs8oLDg9&e8}$?zqm<-<@TRrVPWoC=^EkPBY_`t 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 &@G8>c*BA&^ z(zLlG*mu3ABgFdd$5ct0Gl&YydAN>>7;`oVw!j`ozkRAyM1DeG`%k2E9I?D15wOCZ z71nAhqNu}Qg{%;D9#;0(3h9S?>|>j&QOWuOLzOuzV1@G(Ubv}Hy~rd8N1)w@hYi(e zSMB2#2>#{shc9(PQIj84DUKV#sdz@`>I8XPGZ4a={|A9>+4;o6!V1Pc<^*^0w>lwv zPcf{pIdH%L0*m2oW;;DFeaMZmp4o;+XLS_z97fIu?<8 zYm7k%T3(w9b1YSFvnc3MVBv_lYXopYj(AxoY&+c9AS`#akc84MS2-c%yzj;gh&irN ziT>^b9U&Z%2USV_`i?3qXRK0X)y$V+3%ss~9~)Q%r){`F$l8>m6Q=&;`-HrxP~GyP zYM}b8!aj5Cu+-+k%_O0C%rzY$0(&MXq@3Xf6*ILZC!__gQP_R=9i7U671s;|^Spcv zRyaIm`gl%d{n(2NRrMkjLM~bcjn+iepdxa#)l`K4rJXvBc71hSA+O>F1UR85@Ks4D z8WL_G*vMxC6zow8bu1z-bc}^y1<}=#;AoMn5ME=jLX2k&#}WK_^N%b9i=CRKN@<6I z5)1qZ*#Mmod-JM6STLxAB&5{vT{q>;s09HIcQ$Bj5egH2;e@#r>RC&8YxwC{L{WCA zL8H9dF&3d+>83fNNbz_S7S3)EeS7jk5Xm-Qx&R|Zg`jDi0vCVfFO$Af2>of>JqPtr+pX%IDG&AezxE7 zKz%A>1+RzbG%^GBn}nS?`xH`#e5Ye!Gx8;@fcTbwq2M#ml64lrIhdJ*4Taxogp3+r z>xA6m0!}a{4uTbqN|#SbLIQ7NB1G1%6R-j@vH}RK^7tH6m6VGFwtP`3$HMY%{;Ck* z`bc6C+a8{!B0SfAQ)NxwVS`3V_aDFtd(!*&kqG8)>wBI^dT$~X5mcrgYAo*UuMONI z0%j#}LNY%NE0m-c4TDe_R*xgt{;TyBQWA@FD*l(2zzUm-F7~D(iuw=YSeOh7mk6=A zt9l1Tl{Lenl6L5M8nJ@BUm(Ed!>^Ac2ww9U4T~7-Y`_WA?yQFu_LTSZ-AU3;e=4a| zbRDP@GJdHr38nsls@P_(<5aRr|5C+0{F+83)7_I3rq`$sE4;4IZo8IuMvMvzw$6^-m2dB5l;4syLG0(Q(AK`~JO&g(Uo=_H5g?SnY|Gw+O6Y@*ah8 zzgvFrAN=&>b1?+w9a2}poH5*_k@LCcI)Y{A_LEdH``=)e2VFQx*0^ z65OVG;$bUij8&tofSUvn(o1mKQ+&&JRZ{$R1Qk*J{Obmegl9?$6}DqpZwOE}1$}D~ zmcDh1BUtIgEJCZo zi_i#JKYl_**yGeq$2P|QsnaNba}hzT3mFXo&NF`CHH+YF9K;dA+e}@xFq)K6YZBAwBH(wK&C+=et3(Kna zi-r(kbC()~q=Dlk!Dj0PD~t-OI}%vxOBoys+jf45D*J@*nJwP=x}?$S%V!jdv%)nh zDg95H2oc`G&ma^Z=%5qqk%mesgzWBIl-(y5LVdp*}GK+A?@Ei z8o~DFXF7s;XRD_amNuucMJ4IrQ3d-6-_uUv>827#B6EtNMg_-y;8>XR(&q|MtJ>>S z+`D#IguDsK5+Upbl?0agS}6oLsvxhvD&DMbbSxsiGL#cy>)lf*=zSdmY|hImvj|01 z+c`qWkM9|T65d-O`^yJ96<3cLu;Nk6D+t1|_g{rsLq6g(3i&ZuM+oP%Y*+ym@F$xH z<%KUu1gkolZBTL7U1Jd6nl zvyo#Fg>DBGv3u?!6AQ~{u;6I-+T$9*eeAeIu*7|B4CA5GQm(KqbN(Ga_nrW zLv z0*GK4t zz&~0LMCW=PAi&7mtb-)TUq@=HG%3{)qHybO3-F)oCg1P998(joo5sS+|6DhH2m!B~ z#^C_|xol|w$1^eS+`h2FDg8fMXHf}vW=ksek?Ov{(sujqLDfrYa@w=6x}(|?7hH?L zM30j&f%9a9eXb)|`Hv?#75|~t3Wt`37*yOhcTi#JFFdiRc>L7OAfom(hXChsyB8XS zfQFZ;FnbH3V`16-;tWDg$QFV~yxmTx;uzeK3QND*TT+R;;JXzI7pwa(bG7@2<46?! zTWt|`6#gm^thj%7f^ha|Vo;fPW3WQz{2~jBnEgq6iC~e}>vM$2T;(wcruPu6Fml9k zg0NrSY*8t$Qx6mTZxQx8lJHKaDua-_^_)(K{cHmj5o7r7cb;l>w-psf>T=q1@N9@e zhWx~$5_NYjtoZKyxI)2mN4*!UsA7VoQGU0kYE<5!u|Xy6x2*)0@xJdKeIPnk(#V!| zgGM5zS-g&gx%TK(SlO0OAwcn*s-a5e(hZVIN&Ib93M16Voqcxt2~1#fO4mASWV?Gv zr&8b^VG(R|+L?r~GxH=N{+>;Nk2_;w5ea=}DugsxZ%~Oo@Ht1Y2<?4B^TK0>AGcZ%b zBCes%90GsnV{6-MDqkpleWOSRRVB0oLjW+F!FmNQoy7+E{(*AF$(aK911Qs}K zgrq$!c0?Nl^V@+If~7WQs$?YBlUPJ-jVvmxXq@kjFSzywOki``vsVX{un z7GY1TFA1IlqYVVxHT*M+ka*x9SYgkmU(}t1W$-OJja=hiu?U;iH{%5Rg(4~lBtn#GH59TZEQ0{AV&bj31hJ>BdWsV{M}AeK!oM$Dv?qGde1nj7Wv)bsh->O$ zB}(^?gaE~JMSb9y`z7D~*|Q{&pZ&Bgt8D`adk2*TTg>mYc0`b@$EKgZg+&>|Eqx=w|~ zEpElB1p04+70#2|+cXI7makJ0%MT5)u!!<~Jq<$f^ek9mbHTUm38J*|83T(*+W0*u z#D0?|5p3_gM>?Ub`6+`Cow|w>A~)C95hDDlmIjryZFYhvNO=hYjFPXaPZP}PxJHG| zYExU%$h-P?1Hnvpuui4Gn@nIClbUlX=`|auA_fnK04EH2`x%Rn)-Z+>iq5EyJBvI2 zhEAnm&_^_41uGUvEG+gd-6CWb*kOf|H}72oAv_M3D&j<6DlF^q0yWC%{j!7^TndFW zS18EtrAFqix2V7$F^tyz@Pr{Bk5Z$o;ESqsD~+bY0=(*d7pc`Ds<@Uu&;9VIec|VI zf~~gtn2M?;g*f{E*G*mD?n}RiV0=xyZkhlu|8w0m5dvN}O~L^@mw0QdQ|7<5Uc#B+ zYOnm3hG26Y9!@2)_BL3d1iiyeD&_qSXjCfC)#Oy{qvsh^$|m0=2>0ENl8Wp#jw3`` z?pZ40;I|7QK-rek#ze4`O|v<{wf>ZX?cd1|U=%a)DT81 zR1=HHA9n~=z&zJAj$k<}xIx%kebyql#>Y#9m_25a!qSrA91DxylW7o27wQ^9_zxJv zsYK3CvIsft4st?h=}Lky`?k}ti0t$^lJMC>k4e}rxGJ{ZBdM^o%U**$UX zO?z1JYuh=Eq9gBGgoIA1IwAJ0<_g}~{t)0zEqm#*L9ln~tBU8ZXbX#|_-Z64WbWv$ zAz0COuS-JMl+US%v~?3qEF!V`Cakc>IWONJ93JQ5gvgPtV1+$l8xHDJV&m6PVS6Uq z6}HAKQt(#P)Is>8Pop@&zW1O>Nc*#qD$W2&5Fxeyf(dM{SiOKCVwSEju!yYNpQxhy zaRQ59ep?l9lQkL$KD``pDJ(ai<5)yw|Aq>?pZX92lr{a2Nd&V8_T*GneDj+|NS``b zN3c2VM#Bn7n&UJP!Z!A#PQ@HjAqm0H`EJaZuM*TKF}FWl$*`vY!*epXx3V!vEvpI+cR8zK@{e)o_bOtE!6CC?z&nqmt)RPhc!_ zUKABp{8kz55g|9yP29r@S85U=+)Mm9m53&BR9J@50|JanMjg`$uJh>tpOH7n71cND)CeP)Tk8u z^)(5B-TUeYmg@|o!tC!pQgH20lr*wEUq?rX#D`p=;LOt|mDnpOu)^V`9ac$#eaIRU zA?zdHwFs_G^En~oP?%2e4(_NCKCQi#6XKSry96u#X#fN`VQ~B9Iw5z9uXrDSN+S_7 zv8hF)*^v!&gmAXFtPw&VcaemhxwQ=hONw1$Q7Kru*d!F5e^w{t-~5{jTa@$=0-Pt^ z|7)GFs0b48wO$1*#)q|o^@lU=m?QNG=)d zyr>bXlK)l3bD$T;!c4#W1|h1)i#kF?WU70naEGYR1uSt=Q? z`O<8iP@ejmL@-auHBM#Q;8O;bu;~q8g~RioD>VtOcB>Vl*0q2DN0~z=sgm<)TZu)) zKlD9L=jV!yz&;C0i-IDqS>R$C;ViRC`MS0l{LQ$+-q?&Vm-u1?{w!k(m{-*Z4=_ES_?lHYvkhi^|ryvYgam*0mK&YZg0VG<(V^nK>Z%YV_p!no%* zPKfOMji%uHx?1EGjgnNtHlH>K1>Vn0gfR2xX#{`YFIr~y!>>Ys6UOWxqDID`4muVQ z+ITpD1sthmVPWYr-qjHBce3l7R7$%n(Fx%ji>Zh$Qx_1J8Pgdiu-Wbnkc9N%&r)Ie z3trNx*#C~U5UgyL?~dc`{~@Q*`er#M!S%WgRyfa+CN&7G@Tm_}34Zb#r%`3`Mw77l zNSp@IZ?gqiu)}u;B;~pB7;=U7gLSexV zR7CLdu@K-@1gwl9u$(W1#KH<6*>ysmTRo+Th`)Vzo1DTfG!iix87A%#%eJ?N6%bSL zv`z?Hbe9uSpB*m=Io;2is)P>H5Nt(K04L>!O0xBPi3!kIP_0-PuH+!Td?L(yuK@Z%K%%PC9IVFr({8SiL> z=y6S9g_7F1jZVl3X)Ou4I|gxti0r;qC-@)gs7i6hc>@b8l8+>z^!26$k=L-ZDzn!- zQAn7!Tld4wSwTOTgzfu%k1y}VRT>syA6ApoDD=8%5(+1^gcXi*EFB~XC9QAigpqC3 z`^930HGu$o3iq7i1anDug0R&HR>;2lg+`;u!$S$8=!AL}XZgoZ!vqcwjo+`3d9eXO z1c!~+X;g8x+9WKUWakKxlyykK9$sl-VRQET-c;9j_aQ*}?E8nDkW+uCLjIm*7L}lx zGj&3#ysb)RjgAHt|CzNlgz#SQ9d7EYIE`#8ju?dSp7}aL*nj#(Bc!bh;Rt5z*$69) zTr=LbsKgweBdMf++b@%8JF{GkHm&}$C} z#n!h#Qb`;0(4w+s_DN1Cu2Rn=qTs1tBo=1-V2nv{=GU+c^?KA}Zyg@5fvUVgGRGeQ#!U{)i zo_SWm-sCTx3co%=5@K=&E2I{M7+6?z_vJdFqSmtt-lOkHEFz}H8&pJW=5GcTR(RyH zf-{h5RKi=Y(Gl=Fo(@PV_Qdg=O7h`DCW7th^MDg_TkkLsqF`bbtT4(-@;!FuZtB)cT{lgwiPufj;N^d=n?8Yn*GX*4Z-Z4ns6#{N7E%?o9(Ja$bOg&D;%}!)cXd4 zMHf!g39daSC1L(rb;l901rZQnPsG3kosbm~tIEpYHU^d03pXr;SeKqB3A@jRa|Gj~ znp%Y7!~;}>{m-osVDpYcs=x(iJzbSa{VW8V7Gz2)g|UqkVroSb;HQ({RVA-OO;rk4 z)=?;!c!m4n;bG5RQb-b?C?tesN*aZHS4I%-uD2k-n^EQ+Ya!U7CBIQ&N$*B7;l`IbmB7y)aY9O2k|e}@S4D+IeEW-mg(Z%>u1d`K zwh*AWZ+}TeWVbu2N`}q1Iib%;Dq@u(br5X+@Fpi@onw-a*kdxRFbco(4Hc0e{J_E@ zio1pC2o`bWkU<#I;3rjrmrs{eYzs>)Lh9lzIzmK;*5g#l_OGGBjGH?REMjNv_h5w+ zwtHcOq*7SuyIIOJ%Q=mTo=jDv5XWl<6-URVIzqVRUy@4X*(nAgV_rF|Fsj&h$0Fn& z^nJKJpS-DIVMzs@B_VlaYgnOF2hHPzpm}i?A>kdDL2yUhF%hDuW*)2n$NdzEVAC(h zQDLUjV+=ODd;Q7(Z2EQHz$6O2F-ZOoYgsK1>yJ z{)<$Y=l6*Un>WN5ez+&{>1!Op0v&%-VL5xYD#WjKNE*fGOoJ6R=k*WJ36)XfREc6A zP+_SzS{OKDg)MxaUThs(a4aHj*F0G9@atW5LiFk0s>D>zSJ=DzMFRXdWWEH!Bc=E# zM~LtZ$prX++?q)$fhXD-2xi+Ep;HOFdIVP3Jfr4NiC`f;HtPgiP?UiXiJ$x~37$H? zal*Ru8i9=u`&Cle@sD~oWSQ%cI_OevS!~5gAf`qNFk`pmz;`i%zR03FPW~8{Y6^{aJZS@N+YC> z?aT>rlMh)42LF$@L5M9pMG)B+NBL04Wzi_?T&{)?uIf6l0yY*!7=&$6b{)Y?{Ub?8 zTe$>Q*t6|MwMD3?2vx}bzPpZvnbGQ#lqeqd6$B`&cK^WXwd;LjHBX_MeCLwdlVvAr)Z>}Sl{rXiZEbGL}oJ!=GI|>V~|DX^RFiE44 zcidkRA+|3(txEi$CJ^8}6Te6;Bz7I-;fTX1by z;e=6}e0S3H;B1RZrL&`sUWZ! zi|<*p@_)akB>d0~*aEL>h)1oJL*_%KF2J+Q1^do3J^-G;h(neD4c2(UT2wtAq8 zy));kJ>gG%FL5M-F2xeqs*96!ENpGYM1^gW=BQEJ$L}bl90-CfaFqEr{%jJR=b-xBX~~ zklD&+AjGb>17L+w%y&OgVMQ79B^D9i(GDwM>sP*e-K?i38&s0^lu86M$L%DDpbuv2 zSVZuJ7YqdRa35mgf+Q73$89=7#4oC{2q|Y%B%ylbH50+irKUv)dvs9}N){aC2oaDT zViDG!y{t;^c?Sd-l??1+AlTmb?^{%MHTONJy@|siz#d!uEQO6@T5~L{sPR%sFhzhx z*ckG>fe_|^*$S@ES{4?@zwV?Fa`NBh2vKmMw^Z0O+8{)wXHsF#&80e(zylKu1k3!f zJtw5C|5TN@hUE%Tk?I~Uil%Ck_Qa35Xdy&t?V+#&@`u_aA*9K0gAjSFB`3r-90n`A z3h$tI4MI@Qr&Mu`_>~}>uMOrPc*r!pr%K_^cXcc*>&G4n?(SVJEMm{8e>noal+T0} z;68UsB1FQuj|j}s#HEmx9Ao+6o{Eeau)?0m&4Udp(JO^c#dW2TDwVMdsldM$)K{Z| zC9he2cvN18VFn?hO?RE(dF2#=rE4oVm4xqCTL`vw_!L+HF$ecbLX>L^M~Je|-?Ios z%^w>GR?wlXPQ`uRtr2$4TwoDOZVZGK_BixzI-%n4SAC@-kRXzOYGmOEej&k0HF7o` zp;L*>5fZ@?$N6q~&+kJZKuJ$}NFz~o?F}7^Nco(rQaGgbu z7LpdMM&`*a7R=yh5+0vXqs)1RPG!aJR;qZ$p5<7W>x;7%p`iSpPRMWc&_IZcF?TqX zs%fiXh0WP_x)6lZ`J;tJT`8@@Y$r&co>iOSDS38Vji-PEl|Px?OH?3#GpGzVV(=elVw z1iWsVhXeQt{I74Aa02*WuAa1)2$8785}0#zZ%!r8eoU2uX- zoOfRmoM(R}u+Z=a5MXoJG4&{9-tc^lisycYB$R}e>4b{Yx2TAOH{Um@*t##G!m`ra zK!EcU{9LY3Sbu?uMMQoTp~|)qcL*Y+=@~WJTHKgJf}h#FFkeRqd!wgd1*CV2Rwcfr zKgYsiYwVJQ&!)Yv5yD$f;Run@EZ(A0JY=pUI2spH5w33cbSmzG-U?Yyf5fqfnEf?< z<()Yum5SyEIiaM@WCF9FJuImtPfs-v%=rz26;RY+y(DDb|5+!jKQ~L2^1Z`2mBMDt z3_@sN7OZeos%HT~6usVoQ`tYl_uN+T@f#)OE$5HfNKr|!P45k#R*v{X$rZO+ZBSwe60{Q|Cr&2 zN0n6MzzRog>9SR!Ao)J0k{en_M~J9q<19k@+II|sy`mAU`1ZWCMn|xeaW+XXC+M6| z@P2`T5b>Y1gcbK3{fQGQLtfGe5gT685Mu4iHj|M1dVxf+wX6DY!j6ecEJDun!LY*S z{H1X^p<-cQh0n64L4cz|CiEi+m$6Wl!msZuWd1ovVO{(k4uVhG{dyP(VfIe8sC+ag z7FHT8T^W47$0nQxz z&C@zzd-+X;T*q>Wh2_Q;b3)OlfjUA|-rH{wM6cG8kUu0$A?vL$4Ga90gEAc<;+?HH z7275U6_$R*ci%|NoJk{5w0ISbMCI*G(hm zp`hXw10jO^d^c2zUEOpnxPkA3>*zayHVfzX_f6WIugrj?rLFI5xcZ&*d`zjUT%)Mt)@x;bZVXmlA5a1|hAY4J< z>vG)oy^6Fxujo|rZwC{^?xn z%?Jsj|6Vt#zfU(G-mNVw7r@K^TsJL*fY(i*;sBpr{=^f&J2ZYjM~G>Sj~i4X5}r4y zWF9mEwoD05^R5HX{s>~dG)TEMky_beyn^(RLDRuKW5megUK(LrG z*Eu2W!*m7PL_<<>Kifo=w2l)kEF$OSF;s-(d7)!r`;U*62$9mIk4D8|gux0UZ>_lo zA;|Y@LB!;zUeK@z&$1Sr5PmmaA*TGgMI|~RfC@|BH-HLTk@LAhqktd0s@PsTrVx9- zH>Z&!I>%7x_(&rZWRA2DOunuTXPF)5LV&VrXAK&OqMTHYMHI=CRG57Bwm~IuWq?Mg z{HdoTq%O_S5zKq@U4wA6_d;0V@YrQ7IbnBOO(V<*ZD}D`dBPln5WV*$jZn2?kWMJ< zKT5${>Zg#txFJ`gwHHl7cJ{NXMblL(P?{7a3BQXju0^m^A!?zWNKJgzAZpUh;2^{PKYT= zmI#);zQ~8#UvVsAd*v2YoMYRXR6L7HHA40G=?c5H)-b7rt^S+90)J?%V}Wn?{Gf_G zF~PzjqB>;j2v*dUYXoyP zgi}dPx~WsC7?Vkbl^SIbVDtX(UXz5P!!fGN%`fFt5(ed)gb)AsH$ptVYc!G6qCZUF zaGpL%L$H#1^DHW!{*9=J{9@ldDlNSY#}P9dtuhfJeb5O>C2MqLg2*!jL(tL>_nPGzvPbZeEt{D5pK5;N-6+j#ygpP6Ht_W791J^PjL*CuHS5XAp|# zea}@H|B@ukpK7xZBBFGNMo4S61Xd_JmZeAp{ITv!8o||avQF5wxFtb^-I*w{z>k&Z zE98GQkVedW(2dh5`13>>v9fj#sIVE=dZ-f9^>4!uUqz|jf{Ix4uJ1z`Hr-#xk?{7d zYZ4Y7b`e;{jP@25mi54QRKb(&Iu?;r=1*YpdN8LlD|fs>$naYMD;yR2eJza;=RK*) z_M8ix@)n;^aP%(HXp~pIniH~KXlx+F?k6}pV`Z+41s>OK|i>P`&+aNd| z9N>h^4Rfim^xvjRDz;BQG6?~H50wa(x_Sjihy?u=g|bh&nN$kiTWlfVA0!s5QuwmE z!9~)wKQtVPtT&r;1dIMO%_4XcS{j7#Woa5hB!8H%Q?VV~LRjf&$(-`kT^bFzVj<>s}}3EuLzEQE+S`GG=dqcs{9wtxF{SOKfkToyva zwtHG5cmll!A>-mYPRL*TND|^+YHAU-uN`L+JXO041l#!YYKyRJM?EScu}Qiro+BGz zg0ED2#~>7n0FDra(|#}k|G94JuKs_zMK$rdX)(O~&vnxh2zcGJ6bJD6A*mOgi4`^& zuEUw&^TT@IP#K9KBU-l(HpL5TcbI#29iW!B_ z>Gd^UiG`ngEr#?isX>vIGdR%dqtIhE5Z>mT1GtR+7DMh`y4(ibW*w6us=H1Cq;;p< z<|2#sKdMT^xke5bk@!N94IJ_ts4-+rO$bdwLXWX1BGj6%a}kx#&NqShk{uS19X!YZ zs;n<{z%y#O2}GQ(Wdp9NAcd^&TPPGH+)-Hl*Hl2d`aWmW;y1DRjRiF6td-#i0E~KCLK=PSZpvv^2A~kG4=0g8zsJct;LWzPqn8>XYv{f9c9lq zxhCN9KVUON?#+V=MeUdCTx4KV-xr)+vxj3P^LG8BP_wH;r?l=6z4voP%vSKhSiEkcdN3w{#ihlcbH+;;tLknTc}V~JHX%~ zLwirL86xaK^^B9QIXiWf+!YU-KuO3+jUnw3Ep)&;s*TAI#m`2dh|~m^DtW0<23F-a z+Sm-a`W;8m-qIPe@Jy}+d3>o&?S2PK+@A{hz zk@o5wg|cej(<-j`K@F?i@>q)@Gym;m0!0VEGJtI}PXVIrCF;WiHbaPz12hSN<&9M-TiwOrB8|z5b%wBhuSb(m{q~CheS_J5Y%bF5 zKhR)^*<+^AB&0vNUm?ETVhbfE_#Z%~PI*)3B8v~W6sF}ba!}r1_&ZHnrH=dFW(fV% zNEET<>>!hid@pOKDw!jX0J3~(n8qs+{p3=cArB;~yIcA%8LG;j<)aO(vfJOafVDq& z)fmFttOZSepHDvF0Ff)UYru}Gp(wKE&UBrNjQQ(9n;|^Q8_*)+CYIW7#+Dl2g<95n+&kxoh%D=6(1*Af~qWy<>h~R%lplEO-kmxvN24b!PLuYTD4P zW>!r!fb3r1*bGsS>Q9qU)#jQ3~FIQ2ZvU|Mmi9T-b_ZEu#$TKDo_U%%gA-4S1 z+Cg#kj?z#{FAXt)xC7k`hKx<z|2K|Kk(H2U{=(7%xvTu?J>|E!2Y!pqL zNr4Vm{TgHedGijN43Rx=A5Fr<9kv5R+*)b@o{3uxAg9|QharRSjkQtsbsC2vT;K20 zxJa{6y3P>0pWCZSN&WUV%D$I-SwOMX!(_kCeOI7x#J_Sg><2P(x3D;k>EugZrQfJ7rz#9(W zZlE3#a@XyC6zFjFwjXqcET6wmV+iknUNi}wBbLdKJKwydp~PJL1w|Ckze<5tOYi!t zvT1ITDoa|QM3G6KHZ>^Ge~;*}&t}N!9a43`FE_(xh}4`a4Tx$#(g6x0?&}P>B<-RN zM1K2+2JA0t;V?w_&c9GZ(jTz~O36=o<=DJgM<0GW+4#1{YbdGuHx2 zK952XDH~?mTtt4qb|^B=FjR@yw^+j}@5FA0A;TkE+9=tNN)+MF37|kXFS|0tX2`VH zR{|pX!jBZF)t>V zQU38-h4fVQkdQIo?m&_8-_2C3l)4wRT71DRJF5W^Gw71TMR+g!p36CASA&bJI?~nx zLh_c`fHz~B&JcyOn`sQ0Hn0;Q4m7!|a}n_e8(IwM3cq6lWyely3=x0T50DWl!*mq) z!QW7XRo&M{DcYT;1G!%ZI1HI*Bmtr_CQIic+>5`_7&0y5Q5*1nxK@?i+oueal&l3d zLu7yYD@{W14<~enEKdu!fRH=t-VtfD^Gq(neDNom1kb`x9bn%ZlXal*jhO&_+vjf$ zD*t)i)K&eQmF2bhb<+y^^*^thR#M>CO{;i8_gIS;HM#&jrb=D_WZdcI4ob?n_Bulr ze|w%LovCiJ#X+fwpKYO3JwD1ragVD}W&gS<21>>i^&uBEY3Ci3kcd7yaOieZnsnvV zUgI=|aR0qnM@jK-h$7d#HI@RMaqSxB03){=HbaCSuhfC4Nt0+&$#|%d&5+rTkFij^ z9cmdsjx$5SOpLTqTm$YaOnvz=jSKxSY!6L>r-5!VM9nk3bd&EzpCPU7?JK07Fe4()g zgm_zM47u{1{W_3UuYm@Xt#0Ws#KEZbC?aM|EkMSdH)%t+@_u|pm9lmb78gccs5<ECV zQDk_jZE_JIuXj;p!;tqBqCcx+*22x3y$^^r0TC4FaNOIAY=+#@$_10qRU!p zK=>l{7!!rV`#UI+uZ;j?Xwz#JO6ji06+F35VI_9;?`dL{^l5#AL4PmvDVp>q_Bqpa zpysSY&M>KXds&Ly5UjO_Odu)>O}BQTl$6gHkc+fC1zUxl5DIg!FHsGemNX?^8i>(MMQ` zl(p9_tg`Nnvl%k$@Ph_J>@rgpdA9)mz=}$JMKxg7xz6#Jk zUeB{pV$-rvg!k40g;eWFg`(eDnI!suDpS7JfnCi~RVlxC2N2V@UZ)LR+4a=7j>40j zEQX94d|m^#U)ipZ_V^wOw5l8yV>3j~mG2#3-Sum#RChg~O30517FKIEkEBV5tNsa6 z$eNs>bCJQR`3~SsK5PRq^TKq7NbC27rm*8ziy_M!=IcP_`Q8RYY}Oq z!!(A-%3NUrp6|Zbfuu*)sNzo8ZgY`2@4cnUwjOmX6nBF9Ajs%pQyi3(hnmu-SB`vry8|RgFE)Vm{?{}H{lnEu4v;qV4TUwO4;m<` zF?Vzzar6d_A*1X087PH=11z9y>Mu0uI>k@SHW|`7z1=|BF?F64wRLLrCpitQ2Dj>4Q-l8LPIQs$L^L=U8^%@ru8{5>vYR|OcI#9go z2Mwrd_b-YlpZ>aqQt(P&6dC%F?>hO*p2SLI{S`n*_@nXF8BL+*8iye>`nYM*YUA9V z7T}%tuEUUp_g1SCG&IHLBHX)Kj zb!#k2^vR*-Yqbjfu^x)dOL#*eBj7o;%JTheSyA}j-zFvcukfcjX$)D@ZmNY6{=h_< zw94^YtFZl%S{jPC^%@J<@9%p+mUgpHWO3~!I<5Zmy6H9bb5>T@=GRSY=-2Ca*;C**5CT!2uPjRPFr$pl|s& z*r~;5_B-n4^z*8o&`?T`&9@kG%VXg*37@t5)dZrKjRAzG+iX=_yXQD@D=s;|P zo*F~MZC$EhH63T8?C3K^mB78XbS^UBb=_u&_ygk|Ap40QOoohX^_z{7mav#6l_lO0 z4iI>Kx&efaZ>cfFzIWp+6wl5zI?DU4t~x;R>tj_}v{|A^*X>VDUdf!~4i-ba|M81} zjQOym%|&`^tG6YJj+Sd&L{fRC0R*hxZ3C|Nj_JUj+;=U84E$;?icIY{Q=!z{rSVGa zt<#hyA>SUL%8InkHW%ssrqEQ#@^=`bwBZLDuqXB}iy^E3%vEq7UTAO;Wx*F{5)MB4 zHj0eC`I*HrKojzEiy;y|U1c-mE4Ql+AnDj(npBq6#9Ba5#S#-}{cB$v z7(LRTCY^~XXb6b+XKt{#h_uD)0lE9OW1yIS`F`((%PSo&GHU!M8dmPVM%jR8-Nz2F zLlh~v|Mw53OJ5H*cqL22?ph3CJ*nOwv3A-s4od%Pf7(EP{~oHi+I@i{SMJ}ZRwdKc zDJ1>a(5l7PSyBCt17!UYt21Qv6Ax=Bd!ug9q%&C?Y!n%0{AQzAt8N$!nVqj5Ho}u~ z+QF*2<$W8geP7hKfUKl@H0e4yGb?qJ*i{P@Qqp^AT*Us9XAEF!Y&R4c(&LVfQo8c2 z$&h9HIvIe+{i6lMjSRLKB7M~y2c`PvHXWtlbh!;go_@t*NV7Cj2O_(?PLpm`9ueZ8 z1YiEj0=8#%(t&kJ_cb8A-QN~Ncv^j{qogjh9Te+maZdBtSNnm-1j$n+P#vABrkcUqW$U;Yt?A!nUEp`iqN1Wh`VJ10#CqQ5$=0bxNJ zAd6@JsG|hwWvWySu48kNMKLZ5NPoPk3AoBV3WMAJLxHYb+$qmy&}Xe?s?6IOYM`V} z?14hxCj1qJl6LBiio&R8Z9XHszihP_GWf>-?!o8P2UA1`^jE9wL-jR2BO-=9qTm{2 z+bH`U)D4Doy*|)FiCOWkhEjC(SDJLIs)mDgpgQL+iY(dwn8rmGclZMkaUp&NO6HD> z4nxFLBv~kh&Am1dW&D65Vgm;oDCxfM<}OQLbE{HWINs!yC_Ruzlioy0&O{rCzHvqe zO5c0YWQg>2>uC})${u!r76!!e<(zuBHcHK>e zT(k6R9oSob%K;K|EdwYJ+iZp?{_{DSbhzmF2p#34VPz&t%EY4%Q260$RXhu)0b^Kldw#A=56lqDiajbrThKw^EN@5npn~;FZix znyCR{Z`U|LcC$MuA~EwJRW`+in^@W1hts4BhE3jvB3zFRvAD>H#JG5*G-#vK_BU=;|?xaTJea% zkm1XsY?Qcf8q=iW(Oc;#?smT!D0^SQU8PB9GS4=&RhhB_kVQk^r$Fzl?XRBA zGBR|J!9^aLGg=|##?KV!OwOB6tCBaeuFXZJZb~o#*MJ0?RFdz11Bld39Tn2&23WkJ zf1(m$0OrNvG^r%lzoP@iP5n)V92YPb5b5z(bS`51+DkS=dhXswk*>PGnOsC!)t@wJ zmDgf`jp83P+yY!X{AtoEF!Yp-GV9JsKo-Uop(zW@70GWP$|m))nv%^ zJNw!wNk`&oQW>tjfg*!CePN(1`|F$o#Lf8F26nu0#{dGOk2(yoWn{VzME*8_CY3$g zdpisnyZo+!QZ)K69Z2r_jKh#ST3ogn!riBj0mKd7L6gdaFWT6E=iP4%hAjCdpC+Tr z0G%PM(7k|sr*#AcDv1rk4Z!nHBL{F( zl(J2cG^yCBe=3w0Y}2{ObjrK4W3fx>rVP~?95JrwDEM7{GO zBK187XVwP&Vld>MB|$n$)%lh*sl?S?1BmqZ?rB^^_2LmIviKjD$wj6oZBr%Ut%(j7 zk&!!5XUNi6-A2hP?`s0t2fhcS-^Ot|O4zR(QAFvtk2qXpXun1%GVI__Iu{XsV5rTI z8QvKVO2CXu8p@u^Kpj}Ke!amEuI{H%MCK=-QJ|9Ed5F!B=Ch*>ASv{?!rtQR4i}NQ z!fOKwqc`b5QG#tUq&Zeo*t5BTjgtCNkq)>|HKj>6-_!I@RfhjP(?IdK;%$aZ`s+1S zHp=BD7g2sU%K=jMl>jfIh z=KbRwAfeMh1BjUr3y7isb$^NQ?!#kJvu2Y0U3E}lqxZi7gZ^IKFz4b zw<@(hq)G66ramXg(z^9gWXU7D4PMEV+&BgIcb%{jS^Z}LGQ8jcokTzBckvMuNUU|( z05&zxLXl-N{V33NN^%<*3{m<;u#V#He4Hk&Ry^l>UX&bN<8TqKfRhGL)x=K+QqTJ? z7`p3qlZ)(m{ZkvOtcZ;UiWRWaL0NWpwFbC69ca=8Q!e(^8L~35E{a^f^cM}q`%fzr zkvpZafs%fG2OvJW_pZf7tX|d7VaUwY^$fr}Gs|X(>=7pc8NdBI3RH66e98c_{yJm> z?$Sz{w8|L&hR%?l{9`uC-k=sJB4gw{6q&tgsDk^7+gHl&Dx`n)re2G$6aM8!4G3xa zoXwD>t+vr5L_BuYWQd6DvpUM|XVk}8xQ9JpW3|8UXAa<&&zKBZ)n^sW|GsYOq5gi; z=Gy$a$)sQZ^Sa580>5tZ=LLPOKHA^rD~XazfAf{-<@L`CR0$9I+u$M>p4?B9u%+rR z6G-%Z!)B4S%6D^5?Vb*=M9i^t4QEPMC#vGA`rbgvJ2VqTRv+7?aS<{3hbStrklB)IK^8 z@I`A4$fy-*1MbKP218`cdr?Cv9df}$u|6KAkd@oO<|0ehHnA9@_}*X>*mJHqK;NBm zh=#H`a*ryN=9@N3$qNN2BDP+XjuKdX(PBu~)=f0&f>z2!1<$g&Iu{ub-PHyPPQ7da z$twa;MAoru3Oi=cGUuC|=x6A*t$3wJKPA%dW*| zs^WdmgY*GUt5wX!mKIjIsXYva4E^*mnshj=&0-rRSnpr}oBCAKq}9mBeD~?@ysjoz ziO1goM8v{9HpxM|Yi(syR4k~8;Tn~N;!TF(M3KXot5s9y>Ul()Jpp-Hz& z{c)zIu<9I&41e!!9i^=9QJW!mTqvYThnKZpg(4!;nrU2Q&H?q*6G0cBH@S#x(Zj|n zamzn6sYKqJfg;lSjMh=SrQs%!|MZtAGH`dGDj8SR2TJT%`I3b*kzF4H{j1G{fM zpflvq=c8!SDroyW3y6EVgAGJ977B0d>_veN7k%UVY-3K(akz-&DX&{tt(%-<0_Oc8 zG->79Im!XDMkS!ganpUji}Zt)~Z=L|8 z8NS@+B0Wdc+me2tHK#x~FFG^F!78icXR741>8x`Rah-1144F3f7ELM{jb1W=*nW#N zAYj$gIzy&q2iZXNr;#+Ngbh-k0YqwkPZOo=*}e*ihe~u5cfZ;O5H@Cx#SlB&rDzPf z=YKyy+taViM2QS|nPwlE z9MFN>d+Pp@X>FIINWa{0n^!W+?-!Z`cR+uKA;Mi}Z6K}I*E&O*eQRsLj@^Hl43YPC zErr4}j{`D4@aDYdW4IpgHP#LjXif(t-^M7 zMUjT)U7&4~A+ZsyHt+OUj(0mw8x^iT#cTr@){oi#iGCTQ>%@Fw)9yNjV zh9?!=;wOcC`zH&l*s(ik(yfBJM42ebRSQ(vedSXNCH}h?bs)UUVjHlgHZ_3E7t(cx z^zV7XK`C0Y&jwNlEkKd;AGo1&k?-H$Mw8yL@E2ACvTR~Uor}yWx~DNj*gJ!5Rr=jB zQC9k`M-jn?C#sTt=CqF0;)Ho>RWxLhLPq!xfLy$W=YL-}`TkybKy7~Aw1s~C&+DeG z6!>)$fA1{OC6}R-WINm<$oTBFq4CUq4_oWaMYT3d#4P9hA)AY@H#D zZNAUqk*ns~SY?knU|{7P_=y9A>b?g>V8kmniWT^x2_!t#gC@O+EnA*Zi1Xx`D3u!q zqX_$w`l2mzzbZ0#CAP$Ujg>5G)dEFk|FKf7O85Nc(2l-A%<48aP=0%>4rCg>JFcjA zcZ-YIcT{~;W!%n(4V+1v`8gmWy7aNRh>8gHp%X>xr>Rmh+V@;3e!7_|@~aAi56ke~ zUs?0Hj1aua1^O;8=y)+#KuyuP|n)D_DTYlgGkvl^aQiqPDKo<<|6k{?(Zu7XH1D?N^n?Q!|KLE)I z7dsm$^69w>*22Li%EpE3Rf%cvE(LlMCAB8#46*O`P!!?aJ=ozQQ(S9I2K}hat~N?e zqyB~}8ILLCjroZJ9k$;uRB)g0{RTJQJ#X?#Olmtxty0&2WT4n>-6pWi7)z7RxI~Zx zRQ0-wBCEPJ)Vav~;@zsOPG4Yf5gES+m<;JXQemOEcif{%tK2L50l9wtFayQf@H>j| ze)5fjGPA}~Fq@CJQ9}1OK#}Pe`ca_k1bo}xX2{41Hw<8TU|o|TqI&+L1JUnvRHbOl z7br6P{edWQLe;ai=zsK|K?C2@8N%;=sY2$ljufaAtvlo}Wa8g5O&}s?nGGZj9qIs{ ziIZv4VgHe-Cd$JY)kY zi{@HDj~(ibiu}v>O_Z{ZZ4IC(^HZ91tB|xSHbW#%oamsWj@oUYc(;FwB68zGRZ0C} zt%+4ogSIw9X3cE{h^>RJtKzj6(uP)ESD7k{?-uGPA@|h1EYnQ&ETDgp-4-j6G)lu^ z;Td$u#Nqh;@hCET&BG2#+2HR1`r+!!DbV|z{DTXSDW|e@l(ZFj8j#P|aqXR{`A1IXnqJHl(wWsgl7x71)#b=~<*ae#*${u)|CZYPhD+WV)e|z5qN?ZP> zO8U#^bQE{?S&Jd!%deX#>G~c(EWiGiLh^WFW3^?%1_LNRGu=_x>Tfedapq+W#d{&a zL0Pls79h*d)zVS2&2uK;IW^V-l7>z-7&2wYr#29JJ3wcM{L~|kD#Nz{^f%z&v$+WG zz4r|ubABm`EQ^~@fvyu&&v(JxhfEau1K9^1tgJdKIMKf~I^7CI1lHYPbCDUhx+!?G z+nZcOT8oz*hMbkOk0zC@zvFcvD%WKIp7UdDATu=4WXQZ3LsXG9XACYPB~v}|W$M#` zSjoa2zSjUnBY#jO|CKyIB>djjsKwVA^Iot6R5m_p1ABV-9&Geu7Ey%XKPe8cM9v4h zRIww{6$$9RtN4 zlcb|WZn13O(A0S*koso>iy^Z9xTQ+=Tt^|YxmV+r%N?g& zNnV^}Fl78wD|D2kHP=iaudppmy4Ci8UmPH_vX%}+CQY^(vb_1b7LZfy`+8oLaZHtr zWAkW3H;?%%N&{R^CMvA^ELlg{e0Ky*x{mwYE(b{ZK>bd|?)v+6l+3&t0R0D`Cv7ew zY{e{xAw%Ey(4><3XD=IAmAuDc$oNiI71Ceuqd=vs@lKN=4j%8L0oj)dZHAnEF53V+ zZE`H2;mo z&rL3(s`XqANaivH|amV>(ctvX&+t4(oPG15(#aSEbxhk#H>{CDR<4@@oeABX=>P?J6Lf|w+VeO~ zg8ZsCiU^_oo9EJ?uv=>FD{`(vSDm9l6 zIt&rH=OKl(wWSt{t95^yA-8QGh$2Jos4p)v>5U$$6d!uu;WPA~N!P$`>K zg(3!DzoVnf?EDE$T9yB?!2lvUeTO2q{r(AxbiF^);+4$4d);J+kbfJZh^&;aP-J<} zjvB9|XX6Vr32RPX)fr;tvm-Q=sNoq7N=iU$9mv^#QB?% z$wUbe>M0|=lcqZ;dt2ADffDydjUl~TA8~-nhufP#`d1TepvbO^A_})0b5PRqUR9X) z&;^T&h)X|ZFyw-24^2X4S`QN_+B92dh>H0ytCCy0wZlawIld1|$uB!KE+V7%6Eyj7 zpI$nU`RbQ8Lt4wj9h9((Qxu9SZ`)j?r`0TzA)Z@3!U57>o}~dBh9;rVH!6AuMUHAR z*x;4)e!9?Ri0or^ePzgDKpg1euS$e}BRWEd-CYhV6#bxETtx9>=QV~5|0CC7i1Z%8 zH2H!j8mUrr>WG1owyQIWEOkk>s#!bS#wxk$YnpVO*w==eKwgL28sK_fy#kWylg3+I zM8v>l23CvCU9bV~naesuEPL`9h3HAm9h7m6yDQ|@onoTcmrD&Guh&7E^hPUM;GO^f zubaBProMmEuG;*%DTsdk&+De$6!>*hFfZuk(s%FMxMco`zttsoJ`!W1Y@6tNP{i+Z z92D35Sv2X*%Hst#N`*dD2X@c$-E|e`k5QmA9@ zjs=MdTh{fkc_mAS^mc%-Lm%l3k??OV8zpgmJ5@@w=@e*H@V_4x5_QUVuZA{RVPa){ za?NJQX{EUakk|66LPgjY6zJxMdu~+7emoB=5#V?Uuztr%Rjgp$OP6I+W zH+6u(CN~Vg^LA5((8|UN@gIz#4ZVq^D-IytNB7$#dKNBzR%eJzDGZbq!=D92R=v?S z7vXYRtCHc3)VavGu3noVDqNNUSQY6sX%)3<4ItM1d(l8~hfM>--bK@OF2Wu(fhHZE z@lBzD64h<1jZ!de98Eft^V<>~NKFwML+-8p8j8$bJ;&xEtjFe{i1g#FRY}Q6v#_d~ zp*}1!xVn%69ZtIWxdC`w$8Co6?%Af0{Ic&e;=2#Oj3Rb#ovBvtlb@Tl_~yIpV+N2o z>mQvVw-lj+lUZV5z~7OO7>Ehh1U(hN*ZeeDGeuT44LWwgaO#!_A?nGeDL=+kTUWK9mrkz08Kian%~_7 zvWNOU<>xl}-chB0H6RiLN_3Rf@{B5JnH~ysWy>CEGi2fsKL@3}pfgP>=B%~~4d!Q)R9-!QdjJ{`f%$w(Co1 z(wWr0eN2?F-)sjZabkBHr95qmD*g=~1Z0i-OWN?;x?bO4h@jq(u14W%bqDeR3khfHo)M$Sc z;d-l`LU{TNjYNOy@oO^&a36k*CY934A5mo3?g4n0p0~ zdA>i7lljZk(^G~#d&;+}uf9Z!$T!sI1i4I$w{i2x6}KE9;r(|EVD+UJZH6rQMm<4f zeyyD-B4z9~+R!Tf=`s|#rD>>v;B`Y#?lNH=6VtOo~cA@Z}KX2;#dN2IF@IAHpbyEoa`k&WL zp%nOaQy4Gk<>RBiJ1X<`8H27wpB{Q%2Sjx1Y!fA5#_IrmIOkHJGy8WQ)fl3@+Yf-; z*87wy75%?grTF{dbcD_nH-1G2)(msACZitwRp%lXtgA7xN@>{8hx2_jE;8(u3Ja*H4prDN`FjH; zY}qjr$bNdN&7kjp7_0#WovKh|)VSvyl(;W$>I}Koc#|d}vTXwew{}vY`p142uf(BO z_o0Yw;z=8&aQ-@-A!X%{7O?ZnIw+!`?KV~BZGMk7bS8Dg%c^+$-L|=i4ByXl79Uyf zpvbPRU!x5j&Z>PI5XpmmPpq=#^>IdIzdXw1Ga}>OeO0P{e9Ay6&l;!!0WTg?C8Ond z9VMg4_oz#ACzvR4ADyrm^xa$T(4-4So}8tjgf1MX1DVf+p@_97$C@Y+H-9vM{AOn? zhS)ZBl#Q}{O94$PQIDw)ohVw zPjxc5h@#hGY0}}cvf2)i^RUNch`g@-4Ip6RCpwVvW`Bj6aU(61^yed0+4*y&jp8|@ zo++~8lg%j7GbqC3m0a~*dz~R-|2Sf!6t?_XLrJLFV*-VL@1jX()_r}}X2{IKDjg+% zg749RNhqln+#idcK9u zE3tasGL0ci-!5@bVur++C^b!{+rW-~$$&`tydwoVoHore8T60%LKMnxYYNF)rG{0! zw;V;LiAg#aS@o%UR?5_|{WUJ4z}jyCrN(HTA+z65za6(BZhdUs?HT>^a{!{lklER^(VQEFB3+vggJ>tGX_ zba-3;34qvhWtNWOb%$vTQQtCX^1D&_LAzDAliSwgJD%U+WC%esZ!2 zl>hLu4TQFTRRcm6es3^@`@`7|;0hgK0+DeMHjwy7I}};kbrc}nDVq$eidM9wNpC{m z@r6S1lxsFhO3NV{5IOiShe1DYafXf(I>=)HoBFE9p|JY+KAFdLpJZbdU-xI7A#zjW zQG};rtSV`}?`ph~Wjh*j`Tu|3^lA_F@9Dy8^XsMv`t?7rn<6Rj>!v7P&@(LH5sR-R ziY}k0NtX=yeU6C|n0VSo$>_hs03wG@P^f7=&E_IJhc9aknHn*LCYAClZA_GWxf&1^ z6Y4ms#AKkz>IY(Nl;~N{>I{)ueu^etCwJ0R8;F0;_lOR9yqPM6d7A){{*-zEipZ|( z3_dJ8$Byd^Sx`5DCSl9qd=&aO6kno<&+4Y`Um0f&HLy7(STNBtfY=kN)o!>zb)_2u5uSCVEbe$pNr1~w(=wE|T zMEsTw8n1+FW~c+iZ`fi2nJ3q2K=pzl29WV@8&%@#d|-2tp^v?4FzBCU)z*R1`a?}% z^A|BRX|-hZejSJkD>E1}_ht(RSl&o80ju>H9q`+*(+2Y6?wUZ^h(Q_n7eJ59Z*?xh6Q-W%B6i_tCQ96cGc2HJTPaOGGpVf(WcS=;0rT}KC^By0 zFon`y#k8Tr1tIMXpdz57$&iWWKpiFh`WS%zo=Y_h> z0K(7yL6fe$t8r%?2+8WCiuYp z%&ap8N>0@g2gS2UM-kq}zAt5o-mi76(sC9!K+%vX6b*H(JmrJ2lFauNU`Z^1cS<8M@C`nQ8p-8DW z$*RTge0Xo)gQRRkDGI$7{#3&%<)069Ahz|}fCxOjm;&7@?ecA#Au3|Tm?zJpTSZL$tzFRrl}a{f05XcDqJ-_Qa70n0TYt++K!dK24QbTd(Q z-TDGW7B0DIa}hc3JPydL7t~`+q)mH7$Es-XJPYt1U#?1CmG8Hc`E8Mj^4?TmaqW4*z-sfJ zmrS5$-5NmbeYKm7vbM3%8N!}ZZKC8gjHb!u4c~Lc3UaGe`G6!HtDrm&O*)hIZH~>5 zamSuCfv6{vP(<9p4^>HN`95vvaONNMIAvI~s!SkbRX3Xa&NsNDq3r&Ap$!xtJD@Y< zns2|MN!W7LvKZpSMVAbejCaNZV(pPM3be|LZfY@P(tvV6gl0c$a1qu|zV~o#pMEA6 znbhH94Y2N18VoV3?cXM_{hP@&=}caOIwnJS`!%qEt>0LHbf0-pLrLAWO_hkny-hAM zYUEXoAtHJ_M3b+ReO^b|_p(PJV~g*N=6*fS+y*K? zc$FrdDL($7&XCKW`dpRZS|6KSMCy6pnX>kiRLQRAdxlMKc0-kobtdV2SSEe`8BIcb zy*>_*S$WR@reBgYX;tuMl@1gq%&>uoVc!}IvFoh|6;dN>bQJ%L*J#qp@9P&7iXZ#J z;UcpOuc?wfq{`$XQU(Uw47vNO(+-M%{#lw-%68SUfb8@hHn95DsWfR7bbYV9{}iwXP%%y7c3SHbcT?{zFSqeUNo_C zpIZzFYeA)jVwHE)7-IdezV~O@8(*4Od3zkwfy})FO<-%l9h!7F^8NW55H+cr0aP7m z<^a|rFHJg=Q`OQ2%ANiwviN?Y$wii)S*Zb;uWv#T>64-;(5n2xDnOLigj!sLcXpf! zBu9HyN&O~8L-EF4r%7khH)UHuO2JbGL%M$KU;|5DIZBhxtQ)24CVqJP z9{ABgi5PW2ttv}r>nLdr!cD+GuD;EXyfDxPYI^piNhNZ?TRKCo z{P=`|)x3#;64B$Z!Y)7GlREFUYTD4@n$rt3pmNF{Ra`?pH@S$!+-!wqzwE+FMD>8trU)85LnbCc* z#zmBf<2qL6kA{U(bZ?k}5|bE6lisMOMQsIo;cRdbsk62!gtYoot=v5xP-WGPBPb%T z*B+BZp8;ySbs$V;S_~1KG+P5I{_bWnWXaD_IuP74k0urGm^2holr#fHR5m>1U{&Nv zMUlDxKBu9S#B9)kyiYHqh=4W&OcX1@ROtSt@1weV)l~zl4Er2Se(UXa+Ca^uBPK(n z-kd~}R%xSpYA7>~T>zvfb)JP1b!Q!l2R%QQ0gCSEd2bd_aet$bC!Q&o7kx|`h zYh1*((M=p6cW^5MDC(v@kI6kXCIz}qVY9jlCA~*+qA#OYCIiw{XE;`(D(es+!cuxrth^ad_|RjKf-Czo+R&RQjlm~}|NpwFOShhQ-4suc(2dIy=-25jt%7eJKSN2?AudxlzrP9n!)+CeZI4ohH54A3Zw426D8=O@@eH>ibZ6E~Ked#QViq$e}KG6~o ziK%4@sZ~QXUWvkhtvW*%|E4~Q!nODV3be|tj=)Ncnc3Y$NsTy1lMb(P`<{i~63s#} z>wJloD0*SLiQ;|fAr!f1`#gt>u+CT547p|d2onfCGR*+I)3YpK$DvCoBKy&1HcHgV zPXSTUaih+Kz94T!ky)DxR0&V+rO>zLC9@Wvd1vrjH0f<+ejnigWi#iahyyPT)47Q4 zjUTgt1pSu9kQLi5nLyr$#!*-$$$n4gi zXk29G;Q|zqwecAgk-I^?b`ZrEy*8f_3FkLDfUR{lfQl_AErwh>*w#?e(}ERpeyuQ3 zJb{1Fq?;#Rt78J|^l>_n5j+S*M(^B?A_IT+-CtSn^>_G;jLBO_lMwsNdVqd{-en(N z+w1U3WVNhs0Xat_XwqT#mgh{A^tW!H(9aQf0n+uyw+2>)x0{)OyL7(}#LRz{CS5RN zS{NY9Ca=`F$ckNVn;~{~>VYD*j!RM{Is8G|&??L-vw)11ZES{2YB)n~j$Ie@og zh|ZAFYaX^x!iW1lRlCo>gq5h-TV`WbU2iua6Q6j&KnZb2Sqz!I@r;R*vOG;8@5Q$% z(5m#e-xbQN?tn;ZzEH<1=&Z+Kh)A=!2H4v|Y=-oE@)4S}iXFex1WIqs&>7Nmc#cBc zsg4F0v8Zyp1*FXhq)BHoj@H&0^i8jqnn2!wc?v7@T2Y{t-?_RvP!+PBdv%_;XvGAu<;|YXBP` zzDbix@gMswV8gF%Y=(@B|H)todAb6SBX>Pafl6%Q^A@oDk7lYE^L(GjLQdAwuqr65 zz)EHxyQq-AtB%eqnYj15!w^Bg-M3M;bTKRxcl~h+rS;2AE^_Jbvs6i{eM>`ehqs|g zHxFBS)kg7*s4{@%yI!VAtH4KtO_ZXX8-BjhyXqzFn z%rIyYidOH@0juqB6uF`F85?EQqCu+c?B5ARW?oxnVzoPYB#Ou!z1l(v52@!cWNx*i z14%c1??%y)4-GED(`ko^Rl==%Hp<5-EJ z#1s@!X4EKnUQ{0hku`CVMv4D_ZAagk$48=w{L(EZCAxPC)kjs9lwG30@AJr?6k-=V zV{j3v?S40b_(vP*44Jhq)oznS^9A86hN8@@7nxg!s9GG=jHYDo3#V z$~P=R#2s!BikAMMBSg~eb{3V=EgwrN=4{`S2wAPSTCLCdj^m20Dd?pT`@=>EP{QUl z)d}I9HWNhLpRXvyPH?~m&Ww4}B#6ug7j!EAuQ@nEguPJ-6VCYkQ%_RKXj!3Ai8^zg zQ;Ba;W)WihjnD}Tro_R7tCGL?gHtg(UDpXAWtR*D+fX)vQ}J8yL?=XSyRAxeoL!a7 z!t)C0)e;pvD`r-K|H12X`v50oj=N+cME=3nIu%>}TuF$TXCsJ|Wj`pyzqo+oN~8}j z)DX;_u*o3A@Bc&+irNI~2$30bl!}NQ^oD_j?OBm+5~6>fsu5;vH(1k?*}6-eRGKXW(m~+Hyk1s5%PKp)N@!-Tjs-c{OgUk{fZ6iU_Uk(5v9( zNd;@Du)>>rr7G@MOoZ6lV~jy%iQEVi%8q6eC6(+x4>c+i>sv74b{y{e1o+W@OH~;# z+*0WBb$x}XE88%^9Vw|6M+nFL!3sHbl65M{JCjTVbN5tlIu?KJET9aGq0o1#&P znf?JxI2`D0CK2#641Tf*_Tk+)f(4gPGpX#De-0)T`>HKe*w(YY2cAvuMbJuoG<>Hz zlRdeQDv>cia}Zn=|AIk?D1K2QM7E!kiio`Brov*LT!IZ8j#xchC*;5A`z^21C#Y54 zs6!g9yswAo2$6lq-y%fLUrdGBqnc}2SYE9J10hmhQjcV8_sSnFDoY<<)DiGqtD~u~ zg5nhltJZ%88@S5$S1c!NKhfDjuwCp=lS-s}hfbxiwUZOVUu{Sb5f7>=q(}GGX_Yl| z5<$fIe+U6?IpMiR3TrgqgNzyV$e@+E^}2;%d7=F{mHY-@SqK(>L;aRnZvE#qEFx~x z*Cwr|Uho(M-Z`Hm1pLz*i%ROTAE~hIK_?*K?KB*qir4)qLFBnd(@KzSM90En8-*JP5x#9c z6=9G0-lXFAdx$EbA1#nr*wWcMIbltn?*nA&mp7=0oyJR&R+HNHfQh%<<$}V74D}mi zL9afRv?@&7$`K;!$$g#5mZ0YpGB!7sRQ7BXFyVIWpI)&LqG)Li1y5)m$HI2{zN$`S zKP@q+*alR^Of!@?q)Hk1k@OD%#c zxT-<0+n?hI;rGLQg{jrgODeG|7ikD)TUN&+tgpHSCX|f837io4{CgTgY`?vpitrTe z*0I1JNF0!a=!dbUD&Mr$5hA7C07)hMY$zv~?JmQFRphQYI+co1zTZV!=|huNVY$a> zCAR<2R-@uSd-;`J)ON8K5ufsum5@8lnw!(H)Y@gK8(KqPN!Qc z9ykytyt3wiHWn4zWT#0b^U6h?iude5PUYZ;XjLkkwUtyH%O|KJT^l%+^z=NK@cVGB z`Oct{*}b1hIM}pU5=Lk%VB(n)8>f=|`!tP^eJx6r^k$P4Hni(&;EM6{gCxNg-_b;f z?VGbWA!6b<0!z1jtdRTq4cNe$u*Lo+f+gIk%c;b+s}2)ZnIA_gtovdM$HGc4&o>aF zpihiWSQ1~$L@>wF0}6}(nhXKX%-Q+@72zIJn`2>v{QJU$)fa2xBq969A2kFk{rnRu zEc@WQoXV~r3RDSR*h8n1u&TC+5XLV}B%$#2{u-e?ra4TwokKPLF$je{s&jHStbeo?{+r{5l0`YV$YjNh4H6@con=IbK2K10pVY& zk3v>Bs5cc6{96OHN;sP>=}hL3Ed-G^eTYS+Wcf`h%s)<7<;$a^RLKsv6GZWHe_jP& z!@MWebOg)(()U>2De6?EpL#&2HtZrLL zV2M*&^D0=pm+R>Wwm)#ALh{xZAi&ChVH;I)H!tK=a#BXAvTNRLDl9WNNUipL&_}`B z=UcVPz3;mp##gvy6}-WmH+O0Xwm<4`1>4C2g~X8sI;|?g$HIied&gXr1lM0fID+|Y zTnrQ7+^1d*;rhIfK_$7_RGm8WO6JqoEh=I4_nU+*(}Q8c<)I_?8idGpGc|&9cs56f%~g6$s|SmdeR zIw3T@frVi4%a?FMS!hElA}RC*lghHRtp)%q$qplrDPnobD(XB!o^yKYN` z=fC=!AVTe*nIQNQ|GJ$y!CrNqP6&HAKq5rWyE~|en5CS+!rwWqkh!=juYzZs6Z)8h z+zit|u#bX=zyxIeK3yWjmV_Gw=44?y7G~QsTp{z$6obm@ag(Ts+~_D(VjHgIxDpvd zBP~K&@?)5AdEmlElCUJTEk_9Vto{U6zPz8r!jhXDgb8q7isT3pf8q)ikyUM(D$b%j z0?W!jC}9VmkdLT0ugJOKGO0wK_()ePZyPG`bA8`5sBHP-eVA~S$N!Ebl>9J6M~HZ> ziNcb94=T7`jN!OqWxrLC1lN7_7%se#8MG3P^8U0EYZ|DJFZiCrQ*=5UknB=t(&zka zQb`(slpvBk>Ws*&WvVmTiypxdxIuePCY@pFQ*?zA$6*6kEUR;tM2Ov2<`GzM z{wh^mVV`KYV!0pP;Rs>Bt=^Svzb#GD%6_s~rCcA;Mdql7yU-?{I>%c&94a(|r#q z`5XLoT(RZDe=`uGqOrQ$h~Pg?N?PTn7IMO_kl###JE&AANGn*ub7&~XBKB-FCW3kD9HGLtZ1vqGi!Ohw<4WYLj*%@}c@5X5&u|FzC#e*E(7VQC#U&#eB6h1h_o?%>;$rcm5@a%%0B-T#0SdeD{Uo z&%TpbSmYnqXvOT_lRB04TZeOmaJ8PI5FU{N0S;$ANjDI}*6>fMu(%COScR{z!l|U@ zcF_qD-4h5bu6lx`vT~4z!0bal)2KL4$H9cl3%4!^S+rUgSO^o&pMqleC z32{eHD};YPTcctdx*R5)N!&JB5;7P09*Ux}-?OO1iY5kOMW4O|mXH(+0e)Y3Yip{q zu6A`v#h$hUCjOQ`8cIdP|9nrCf}^P%S0Z=7S%a{=>S3Lbf`3(Jb(l8{&O z4NNF$txbYh_0V_kEvb6XpjF-_!$OD|&!wxfp?$8TQat!ARSL26s_*+~_VP#_ zSMXCPx~j7CTAqQ0#l>43A@9`V( zTiZ-R*zgG=DbD)9`F})T#2OLRw}rM&(f*Hy>(k6Sni5t1hK8t z4nq}BoQ@FbUO!H7x;|F$CN?mzu<*oV7GYDnwp2vmz~+*Q>$OLm;Aua_LWrX7uc=a$ z+(RL}^G~#5-UfNH3Z5wrv%|z&9+|CEaV`(xstoR;P#Mz8#3Hh{A2A4??;2VJ_qtUu zVddF!kid$Qh8k3&`d^_UvX(5R!fbC`=D1?>`!`Ul9RFzwrOyr2v!(T5iD0>n(hS0vQ%b3b(7hQPi%4BP z8YY~{sd3t(vNNN*q>@?Oj1x-NI8`aQ_74QOYRxvB08f`^1XfnmK_OxJ7)dKL^@c*0 z_7;H!xo#M=N?(7R6GA2*f(b7@xn80{rMPksfyG@uX;JZesemKc%6;li%T^uEgaE~J zez-wMOZiYoi1c^cOThnq-qfk1`tzpTYWTb<4}Sg6^QL?V_`InA7w{S5>Uxg1#EL%g z!i1Y#^6Ou!Ov#Q?CHsxu5?9Rr`#B9E4&FQq6Uu?s!laUvI-XOhth+>~l2ffef$bUY zd)S-Swv5y2$jF~z!tDgQ3JEOd4g-z9f4G6=6HG&%%|kt^7eESV^A< zm{9D(K}7_A(b2-f(u3+72>8J*eNDpVi=ALX@jSOlA;s8bVPU~ZKXQa{SUpuKiv0`% ztZdzUtEG22r&1UgAPH+f^D_`4V*fl&$nq|O31!dLTm!-OPh83gMYmtE2!65QCPH|w zwt@-BsCa52Sb60NP9?P08iP<8^|pd7?>q!J;|#y6ua2wj z32QFvgjH7(2rPQe2No8V`r}B0VD{=E38Ol{Vg=d)8`b;83?7-Rv zm8|w1xk7HDM2M6scL^*re!GQ*4Fim~C{jDzld+aVnt|iw#2Z&4#KBD{mpOi1JCf z2BEn7HVeU=$Dim_3fjyv2o0SQCLAtacb>p;8>WWPLM$`2JDas;hp4r z^h?|6;fAwn-^;>k_`Jyp zzy9ZWlM4bqZ*t=T{vhM6!*ok*&$$=zmf%ln7P=&YB|IAp6N;#?bZqQ_iso9bMLlsDvoU_I$`=K z_>_#doch}D3Y(su(6F#=lM<+~O~b!4s5q;?Ll8TA9^zCAw$|4bUan#ilGd+K#hp=G zm9#hifDOL#nq4Dg&g(;kmA%rOATrk7P$jbUTnU0#HTrFWnBMi8L1kT6sUw8zpDCQ+ zx3G)~Tl0IoMJ4c$NgTn7-)y6h>wgdeT$Rw$B(TJKfhhQojb59mh^3#7l2}C6yKm}* zJ=Yx^!45P^m4wucN`tUsM_Vew`)rF3(`K8r+TC~zM~E>0V=w```@F1>F5i_{nCI8; z6!woiYhe+w5wB^4=okNx2sVFfE0a(ekqHw@rpu#B`HcyjN?yHuov`QLITInaEgA+B z4rl!`LnGwhjgtiTm}wTl??#Ej&OG0%v5VE0xDtu6ztTzs?)n7++)nJv^)-apQDZR` zkuXb2Dye7I5Ljr}{u~S2Hodn+*#2l1K_u>4%c*#VKc^D{mToW+Vr1txVZv3;oNuYH z?8wa=i|}9BP9j+D%zLWjzCFXhB6fG2tRt9z^TQUEHLp+PR5F5IH3-f>CM(1S)_?$4 zt?2Lj^iuYo?_F8?MVd~lEw0TPf;onb=2To`BXuhB+Db`q{dq){sh7ey73W7gO@zpL zYmP?69bc0ZybZG@LR8j%OhtGv?$EKY$SbETLe#XMB?5k+cm}6Z_FE%@h&ZxRr;_x? z&k7~CVk8z(G;9_pICJ+KgdNrij)0#z*xI7v9R8b*U`fVxi%|Gp6DlI@XODqJ_}6%k zBbc}Lb&U}ISzT2^TUT0CoXyU_gu|H?R|xQ3{C#(T&?ECyi5~o-foI?^iPr0c{Qkov z!4db4!rc6W78a3`ukQR}&+Qc^76#vdSSRG)t*PK0d!J(w(bXnW5sm@tB$dSN^$ddZ z-e>}g`}nfN!lD=Mfe9#{seWG~ajAO6#CCfZomM4xUp5F4T`$9g7qO&xs!qsDm>~)A zcNP%f`yzCP05_QW=skic>Dr8A5zgzqB!cnN17QMoJZr!a@a3}y4JtM*!X%{KzQ_s7 zmVYG)d7s3?gv0hP`x4lk)jvoo<(uXz-4n{BKq6O z8kK@)ZA^meR;8iJx0M_r%)!3Lx~-jim{h#ax7HBMeYv|uC~0`sL1n6J zvZ|I_SXj)(rc^}fhw&N}bK+79AqvJFlT`AXIysf>>RVvKRfnJ7XA#!ipCJ(|P)R#;SQ08v+>ZU`Gn2qm9!LZW z?ewum*qGKHCY12bA4vlL>PJuxIq7w?f_v3`1)srP*OrMr8;fy0= zn1x`T+M_rjrK~qhSj8N>VNkKxVLBmWj6Y0R`CoXB6YTFlP^Ij(Lj+d&hwqWzG3=s- zXIMbn;{;K5|D=IMB>#O5Caj$2kLXkq28VEhcXWkGaNOD=5zO6uyF%Gdr5Y9yb$^{s za9sG_A}pPa6Al+Io2U^S^V}w(;Oz+p!L#fGoggPCQxUddO&>Rzwcgskr`{B?;Nh)hjRj#(xa~ZYQfeNJog` z_r9beO2lP}h3!0-U?POAzkmrP(s!mQI2P2@X|=i9Zw8^P=slB=@;J~!h&8v* z8VDBHXsD!8(x!<;MUGF_2%eytCPJ7QzDJJWOAbjTd)jX>;c`dcFD*jhwAKrrxbKYq%1&{Vx+3 z|F9eaTpls=9Rnfqj=jaHr2q7z5C5*zs6<`}kp#YWv4VHbW{XO2d4+)xr~25Mp%TMofl|?PiCBi31^&35)DFpU=tm|7Wx0h3HdMfkO)!!_N!Dx zVUMR475=QJM6m7Oo#0d=)xXq&x5kA)waV${RV&^=ha+%!*TMHx$#w3rsBD=vz(k0$ ziH$g+=(uJfSkP|`C6&+>E>2}@(`1;iavq%|5n^D=bX9WttmIVU_nwx7qWyzm!kL^5 z-v_?u?j|ZMOMB0tmDy*KgYnQ`VU=uNF$uZbepe`8J43@F3R*Vg z2o`DIs!Cq)K9fq(?gUHWy@wnjJX35sq3BAILYm_Ti%QgyYE;;YZNZX??NLpIO#`M8 zSmN$3I<1mM{Hfr&bWNk;eXQOoEZx(FQ^^h6Lts%i;~?NmPdQ*9n4|ohNyvU2qRI}l zhQuP$ruaT8gHPBYz~SK7VFdWH>B$m{$oT3t6Tt$C9>N49t{+d>nINRND76^G}NDpBA5s?#cF`(6#f9L*y*A+2wM zu1bE4LhP-}8Wv$LQ;!mC&x9x{%wFD`(<-riw?fv)nFf`tUh2Lo($@!BSlEDFwP3>S zg!K>637+f#1HnT2ZKA?f%+*)s#aHed14Gr*rpEq^v zr2f3Aq#8bNDurMF^Sr4H0zPjl#|3=0WYrD00l1g#8g3GTA8say!1(hJ;DrQ_|BJvf zYN!ulQIYyP#}zAy>Y^b;PRbyiN@1597M0=$>QR$&m)ix_pbE=)l7>FTP)WsT%mSnRxTNhp{)-6W*`R74Qle)dQz{E+%MU19+z+F|uzzyeo4 zFz}49eY04>d}ok_g@vBIte#n%3~smeD! zErhVYS`HJ=6xSN1QQ6qu_r_dSqp?9Hyyt0{aM(5ZqJ@C(LGy}6s5qqFykbedms5%D zQ)wYY)^gwHhwX>kNm>=W*^tw!=Cc;d5tvYt|9PFj9PgA$EG+wl91S6o-dYC}kjvc$!4r5| zBG}5iTVcW~;L2%>%ErV`I03$(OcFAF^=JsOJ?A-?aFy$EoKD5|ppQi*Y0}RImB7G! zm~bXwUJHv5HD1>V2_5fCLfH9lGz5HQ_7Rf`5Bz~3M*q_p0<6N{`9veEs>BI581`rx z0e;T;Fiic$+yPTnsn}X(Vqvy11AOH?+%=Z<%PZpR|Rxing35V^&10})r)0;X%Y|KrC39D_(g9&29usl^_ zq95wC%D-CMP`h{HqS$V+X?8{ToTHUOy>x({lqAkfP(#h>V%v% zYY8lB?L&=9x)sL}EF`$VRH&b;koL_B8kO98tvNyjy>`JO>}@>BB-qaOFc9$Vh_Awg zGwwMq1;1GVl1kpJxdwv8pZJ>-Dmq=!5Mo4U1`}6zOi9J|ZzdIy5;2)mDf0VSC*;rT zt4eBzgBBK+^pjnc>?xZhl@(9bTUEFVMnixz1=ZRb2x02SOe&s`>M&uIaK8aZ2nL2`vcu9Q_iSSzA8&vYgZmY9a)!kLPU*e5&>TycMK+6Ui8GJ5eoai zNktT#%i~yt+v8LvYE(-C+cEQZ3s)@3+NV}yUtgeBOWzrz5WS{@LSl?g5P@e;8X)+i z%V-8vg;pCaJ5lqg#Y6TwXy|#rB>T7L{ky&%?->dczNN9I0M0UU+4xC ziu0;^HQ4HaVUku(UPY&seMohfa3=ow4>f{wUXeveI&nfruw~gcNyYZ}hn$M5U6f9+ zrBo0^>~H5ZD*0_snuO3JZ@`3G-X?qx23ftfSyYODQ6DR8U){YD3v)WWoK_(hV_?En z?$KLS$ru(vV7n)b)@c>d*7v}?_vhLW;Be~yzO>OZw}ZsO_RU{y(8}@rY)(jSw^>K9 zL`7_Sc)+4n-q}AT!M@LT_jiT&)~RIG zeaS+I)XN7{vE9DFsciW?T@vDtFNO(cLceiyLb833Bur|yP+{SM-*hZ&ZLrrOILaa< zVST?m6CpB|`f~(xJ$N7qNtc^Z5vzy2p-N8idMYe+Xe%mWgVoHef>-5D_)tfP(vsIW zq5Q{an6NUN)Yb`W8>zdWnAN(KS{1#0RIM@^|0?l}*tz7MhF}$C7fphzcNdtj3g~`b zm5fJobt>NJg9%J-7|yYFCaeBqQi&a7SO{i6$rZ|L`EIAUmU<`i$ct%9t z`%_1-tZ#h9`xO2^7H3=avBPZ6NfL{Q?DVltt61Mx)-vznOtp&o{3C@OzJKV<(zHPq z9u|%_uF#5w4VY_EiT=A6N3iKZCt(5{^D8AG?e%{YvSzi00GCHy?5GpAw`{CR@zll| z78Z7?ze$LFf0Rz}#9SeW>4X1(0GDrA<)=#e>1c~e$@iNy1Pj`v?g=95zy=6VT)#BY z5h8Mux<9kHhaXE?d4GD56Y`ooh6#sPOsSwET=Uhv1-_zZlt!!Y)cXpBb@!<=Mc3Yy zxDw8vds&2?14~T=^LyhJNyYK@Mx9FbyYmb}X1IEvvebF+Nh%o!I&y?4@rIdH{BJat zR4NX(SFsX8H|NZmI?d~uGXVqO{n6JDt2^XUd5;!250NblUrLWszSCX$dd_?b>{ z-}s0lSnj-k3_{*ICJ`cN;sl*a`YVqWvK}n8u!yv*DjdP`&kUo&Jl*a>fKuFc0!N6D z!);WFT@)axIA?ne1S@Cn>V(qm9bv-Z;{H`6p}gKAgOEJ?b5-0YI2Gm?@uE(vq=5_7 zDyn8f6AMc$8>kcf*F;c(@82|$iYO{pkJzlF^CdU}FU#GBJ`CWa`|MGRiuXY!tyreD zT*t!7UyM;D{OhqM7UB5upd>^t{ZT`(ydm*A727Enr?TtB7D-5--V!F9afES>5W8m& zAh7LeLnW20XXgnlV|q{s@1&K4jqfg`YVizaMgW}3Uj}(z@(M`$q@#E znQ`B6LgwCIU_x>CJ|qcgLmC?hQG8{wNu^?rp%cRX_eFxX>!Gv~&cD8sxDwg>cPM1B zZUz<>6n|VHwpE;tMU*evp%7i`L$yjMjghnpS{XuM&L^iJz~z;3vpB)&@xAFP-f1PF z{NLwI9lEH$rxVrid6R@+|MR@55&}MN+J_5x&v#s+Zn7eFDnW$tqbA%WeC7O5Cro%9 z^M8A&O8D6ms>F_JByq(uTQi-Ipv|=io)5=Mgh+q82TVBQd2&RRoc@1P5v2{Uo4693 zHK!Ge^7~z97!Nb8uIk ziv96YPG#4_i7@eSjaxb)_q*;2VLkHsK+cw#zO6DcY!XgqAAHxJ>*7({) zFjv+!ov^Zg7f#5UISMAMmhtBlay#lKmCU>}i4cxmqZRV{EjO^R#C5Yw!u-8Ia6+~j zqDsp4F{-S-c?mXfc*%|03Yi1ct0BTurfalvO^xFS5qc^XCLsUd>#C&QZAS&3mE1CM z#UclFmjqj_kvbvk=#QL`zr3L;CC-*qguP_9#FfbJp&nhth7Rge2QwRWFlpuJ+uuSk zZ$@2-5NpQX)TlW0>zt66+m0YozE}$Z&O~m#DiJK~!8MJ_mIt33g#4V762bBx=9z@l zUk~UAVcYn(MacTcOJF%aFPBte+Lm)dWY20EA^37bNm%moKA3QMQj;GH1heI7$m|pe6H4?I--k@j`)fIsjD!Re!90zdE9C!GTcZ-~{m~$}w@o65xV0xW zEMje+iK;}FwuAs>_vB28U}3ukTZDwAmraC-o|Fd@V7_!xA*%eiP9?tPT!q=qe4ol< zzHv)j!FQyH;Rvzi%@rDz?0_#|LMd9?*(9v^GoKT7MtgNaj>Gp>HPa?QfWuKw9h|Tw zahZ-_=7Ty4v9)(wScH8}nu7CAfJViA+pZ(n#e$fb<{k}2~A~>Oj zDvqjSITn^PFiIzc$B%^xg*TYY3GNp4EriHAcSwOm{zKHUboKRBsKq1TQu457I zRbi5_o2MHD+ZUg~gjL?cRThG|(zY2?QVVbCRHBahTZHH#zWd>(W*HFR@an#Hf{?C_ z7L~%p!6w06{U%Jf<+Mvz6*gAeMPTbfU*)t~zV|4Bq@#c4Rgh*?nYpjrd@Rn8uuL@{A2PR<6LEi^# zTFxXYEd9^c7Ot2#THXDar&=4e%3EBi(JD#rqyzr%^QI3!QvaTAe>HsGbO3(+&-12( z5b$}^AzZ-YP3j>DHvs=BIJgB&ctw)l>}FEQ9lnxNDJX3rsd!%sGO6qzrV}d6FQ)n*9j@F3%0WOoc78 zHP^8SmlZAv2{VUt1S^jCo*?r5FGGNmRNeQ$llz^&PG$8Z7e|PtSC~b}n))kDC@WS? zl?Y~>yQxb0!egqGj##Xa`EG&%JGcvEXAxLN^-&Pus$IYT%n>5;v&)i@am4o)+dJt6 zTCsiK{;uPSB|i+22odu6ID_DQ^N~q#H{Ade&Xly7&8Z|V?4q#yxpR_AQ9^)@VBW0) zCSd;x-9W%MM9-umA~NDEENtpudrd+`zg9ZI8Sny3dJ%OEg1v2PPLM@=V8UwLw_Ox? zxB4cP=nqzLLgCpYNeHdl6DAyv_-mL!2)sT`M~ILj-)Do3mv5LN}BA!35#pjg9$gdspIde z?Dc)Kd}ii+q0=fn!}l?m)pL+V#kF9+hG3N^$G`;SurP&$O7$VboZZK2xDt7;VQOWr z_*TclTuqm7gphut3_`(Cn}%Rf(-KUC*iaS&6OdLqkig`|I~EqU<4J`{h*>>eq5KzJ zViDy%Tk3@Td!tMQi#k?I60&MpYbG8Go~zkfpW<%T=75>EGZtqNWh{nJHB2M%T2+@xhaYEMPAegX9&$3imkkvw?;#a*DOjzY?yJ#R->4P*$$SUZkkaPS1K}5Fr z%c??$dl%@0vY+pB1k3&DDNMkMv`7;nlBUkEsH9z3ONC_=s52t(tyVg%vVZX7gyOd9 zKE?`$N)3xh{M6r|Rm|pUoQkJvJ)O$leH|1;eu=~)yc4cc5$+csaVk;$Z)pV2wv#a7 z6-(NlYEj9Jo=HV4kI2)ou&mXuaD<2qeP|MP2h~<6|KTGDaK?FJqlOTrukX~UjOy0H zppy0Cx137KXCq<4;lf`h8HBv>+7cl`?lq+%!u`8YVcv7!!3I{&E(=wOy8EL-*&5%Q zB_uS%q%$SKT{&U%5I0P?DzEui0&~ndtW${{J4qtg!N_Nv5R-C{ib%hF2LfD`eNu7+ z3;toHK_zFE?-40?^mqucinyvCzL;y`0ga0DMW=-j!Dr_gRAk9cNyujnsR;Y96$*K& zzK=@h$JObK$bHcRXW^D}n>FKv$WZml3(;&1t;C4&KdDvri0cy1h^UA<1eRq_R;zvU z?!=fA=iW02%SRv82;o{!6T$Ku1RGTR>bF#g z?&bTe8}?%_RieT>!x6Z_)JGrag!Gs%O@en{Jqy7O%!<|t&JM+r5dN0kLcotbI;l`x zGXeq}-rM@Pi4cn(3X8BOtkNK?ZupgnU^!RYal+RdpIQj9b6Su>a^qDx7M4D%8z+>t zX=M?1yj4>tl#a5)gfqp2%TI*C-5ada|GM4_ct9Omc{32 z1be4kiC}3(nHEAME&Sae#66u!VD88xCKi^mx|TxXgh>{a^k!)iA+na$hY8sGf_hwM z(UTk;3o{#BGYAt#9R=q+6o~;W53rn9+q9H`#chVv_|Gc9kSZLJ> zjWDlYB0(g+@}Ws3rTJTukn{OOixAQ5GE97(2X8SE!u4U6MkVfMTbNKPa$*#+>-v7D zVXM`hMC6pIM?c~JyPVZPTe<5*1yaFxfNV!_yU{JNq8@Y9O(r*)ufa{iZ|Ji?m;mRpD2`yx2@43K zBG9Xf@cn=aQ8?tdD)Q3HvI<`1d7(^|l7KRUO78V2n6TR4s0Jt4pQV@xme?a$qmrI` zLMOzme`FAf{c|ir`hYbW0)7fbr9t35wsVAtKYC3g_|i=2?t@Ty7BYj1=J ztJJ%>7Ge6`s~jN$muos99R{Em7S|L&`KnXYH45* z>3arq1pBgw8zvy}!y*kK+|%6_71yyAk`VLFs~jPww#kGEht0M^S2){F5~jU=6(*c< zuJhLk#Y=W`1go@jD$Kb@y@n#`Y)vY{Idh7{GorAIQ$sKju-u}O-hHS^kROaT2wB@! z!Gtr;SoOPLl}TGUt(ggE7NJkva+q*c+^@wP zA<~xY)Cd8ydP+ia%^e)U;(J^)5W?@+Rsx%r6wRr`zIBkmoFO+991p8nvNcBB@7S32rMVK9ag(Gm-|AT)C%<*0$NyW^4!VxU~?>aC6>7i8(!p>_?bV5|u za~fgq%L^o7X3dT;;RcueG0mj1yy|&^2;7$=sW{$AFbM1Gs<)4bx;9j&;#qr%6TIhs zhKVn9_AG^vfIS8l;h6D06;b@-JRJ)QS{Gmu@(x8wg6C|Jju5s3{VXcs3kqRE$=R+R zJcajF-$&*8yC0gg+S;s+M6fdd2?mwyK5IE4B;++JY)`>>3kzEkFpndI-`l|oIXxF> zR3gI`Ny5717YQtXN0dRu`So^%qL+(JDpQS29l;!*q)Wo0*27fEzyF3pW~(h6S7LE# zeF94hYpP1o(MGC79B-vn!82mWOFALBV-HCPJn#Elo!caX3R^q9QpXi@>$@z32#@Gw zQc2jbj}wB9mq>)DoZ@E@3U0opBjBe=JT?eLRlnB|BK-LTlS<}m*p9(ASZ=zG#JE9vwm`zWcRN@0ZR3-1}aY@A+>w`H?Jpzc*^Xios?lTwY415Fo z=IW|2{TEJGefoF_OnAj?HC`vM*zuz!78WzLnTZfnTQ$=No_^D~!acV{u-q(@AUwJ2 zIhC+W=U~EB&V#iH@Xd8UmsnWo=BGL#uYOaQaK)(zdPC2?0Hq zN(76HY-|!Xe=vuNaP6wWsVwsRt%@gc1q3);)T{wVh?H-S=~ODedS4YDrfx@M&upaO zO1PUeg9%sh{GK`$v-ZmxmE2*!P+=MCu5&6yLqcG};l#U-B|^lsn6AqHF6kT#%h>+| z6_K&W_dCr>xuHsazuP9B5t(*}Bm{IHWFT17@gp!{Q`xn`cYmH||5mMXmafuh zDfF;G-29 z754`}!Gtr#PrN#nxT|MO!r@~-7zF#oaRiokJV2-7npBe$w)=Z5g8SX^Iw5S8ln9pl z#N-4=^IkBa?0Q&fAVlK8J0_Kg+yfdR`)A?l+us^oQV%Bdu*ziA;vkvmMm)*_i> zVY}aQ!i1Ii%6F2A?Yg@AGiQ|-)N0M4*9}^QFWSQqB7KE=XNrgu%hf7%Z3}{M%-^qy zbI+_Q@IUy2jHi7hA*SS0h5UdX8kLmhz7MSE1;eQbSMQrTu7tB`L@FTymmURqJGL%NW6B? z#KMC8dl&@SVY!A7J0j|ED!c0zTZD|6-3@~4XU<*K)hb}| zB7%sTU(c$7FDvWLs~Ta^&n8TGS&0?F7J|h`JT<7qesfBv68V*{#9V2jQHfvi0zm}+ z^gzcVqDJgh*frSqKF!{lBxx1belvju|NFUtg*gj1uT|SvPMnN31P`YOa$Du`V!dQ>F+4m50&Uua23&` zzCXRQCMgZxP)6$0%&sH-%Hl$jF8Xmpkih)~S><{?#P7FC5hnV&8>( zoZz{%Rw7vH;4FhMeQvgefM-cVG%6JlA*%TG^*vk#coo>5$KUCAMwG1D1QU?=;CX`( zzvP)ju&lICH7edYWt@tATzf+ybs9{#Dy@CCMkTuBltn0;)mS1#+;6_Cl0<8hRv{Zt zz=Ty!#zIwMADmLfwP=OJ6$^fpYY_4taGl^BHAE6JOCNEBSoXzWi%^shqDuM42NmXg z@&;_+c7ke8)d=~AUNR6uyWdMkuzokc;RxX{vJFB}$_@exXz_tb#a1(zBjBfx+|#IR z{nGc;b+)IQZ`Jf|*ua_4T~i4n>ig$REW-0rb&ZfUVk1mAvnA)eNk}af7D9N_Kc*ra zgXd6TaaCWU!jkG9l~wSnkf;uvVBY-HAUHO8HA2wO>tMo}oQkDXMDe2yoJ#nv(*{E9 zIf((_eC{QS5MFvlBiLK0HAs#WI9Z*?s2jmdf%2!h&bUsh2N2=<$;Pq3H-^1u5Hd#Qz=SjD zuE|tbMXRc+6n(Us<4Ww9+>DA?cj%Z}x!XV0XytsO-lxL<GoBeB0**CbhD!YQ$Q4yX+pPRT6MdzGUSY{_bjY`)4 z z5{e**sE8o#(gj2W=?MJJIkP^`*PnlIUeEi?-h|C&SuljjMFbW#>#D%Q64LjXgskOL z41#mYbcK*PzilEg+4oZm3ybsn-G-3<%_0;b<<@g1A@!2KMoPO$78bVo{m%r!=ZEiL z!mY~BM`~=?MJzpVv*lK)}~cM{xoF+h}t(T?syW4iIGU>xT>w{H7&ZKX1u2|MwJ?fLBKe zgxu9Kk-(}#|4>v`Hy*8vJn1CJyt~Udu2|(IZ(Y0=Z8fpTz4`ZH0_LCT&k-zlgAxcC zd1sGBNPavLCYIJm1R>?s1`5HFo6Iu_uAWU`LP`0lp^ea{!$e(7#|Ta(&sK{deFKiD z8hF_BtE0<=2cK!UhMuRD-2Q8xtp=WPXZGg^X&>@FOu!o3L4{y3Kg>6%Y~KBWNo7Ir z7P=HQZf?UOvo|~=5NwF^I7}!xR|+{5mt%vC5O?egDl+ZjXb5mPbMV`W;JxaSK*+e( z!!Zu3?jsu*K_V26wGM~N>;Bfi1 zF0_)ta{~kxx$Ib98-h8y*U>18`%qBHE^b1QAKyF#0nSXjV%M-w{g5CXsa)VnCVxKC zASBhv=Y*ht|FOT7E9+5V;>S;5gKsPAH(gSu-Y3Y^XSQ0j$|_i-k+y!4z#`2I(?r1E zVeLeaUSCxjSmYR6r47OImK7)}#hb1Og8Q2!n6L^v)QxK#+h-$e{@W!8uCLZ=Wc$6v zvB>27+PYMq>Sn{jlJ*R+5OVWtT{#v1ig_@hjV?vb~WJ$mgM(|AcQ=)Ya=XsZHdON4Xp$fzl}2# zq44x0m~gAg0sjbuEW7x*Mh?$`0A<@p6$IwadaS4vjrx)!SbpjtjjZaY1Q|ZZ0UKC_ z-#e=a>4Wv-M}{uwt;>WrzBX|sqh0lFgtVHQsj#rrTY^gRs60imH_bH=EUja2laTbm z14T&b*w8@8#p|b2k!inAFsW3Bje!Zb3OTDEBrNFM1A|J**JlJmuKlsUBE&z9F$p=n zTM9zn%*G1AR^I7kqY}E}4yWQib=9O2^rl5%@e89A7FO8nfgnVgOqb;^zieWWz6;uO zfG*w>pi*}2x(&h7Q|}mrZD$vn1o*3MoRILt27(kD#u!*+<&WVSu3b+}EX+Y>VPW<)%U}X3XPq+%X2MKP2)z%3I`90c5G*D5Ym-XU@}+``%smPdRtcf{Au3Z& zTvS+OY1ws7D|@qeT_!#4D5w;y$~Fi=bwg|f=V1M+fVl?$!m-GLKp#b`;+L*!WVb1{ zVS#UjI*W>QdR;fE9s9!sEP1B8 zB4jn3s7qz^1znPNdOn+E-mAF!&+Dd+UFdbwueI=X(=qt*Kd+mPL%`Qfzu^M@?52-? zwqxn5Z5CV!zSZ9R7YqbE77i&w)ZEilnDgO}5b$1nX_rE<;<=YNVadT?ErPT2R)LVN z#6gORyVOC24bNI`V3E~-RT9|RCLI+PmYn;dK*%WbS&hXj#u-%Nnl`Zr_A|vW;js7L zcNHPE>1P@lpXkpg8FjE+m!!?x1f9tnT$doHec3~={F{xna0P$QYc?ljta1xN!kL;D z0{$FCKTKr$FkeNhNTU}_SS5LVY*E>^cbuXUS6!h?{-;e1EHdi$et}?)iUyoY?&`J% zg5?LiZV^(VE>e+;e2*$BvFrb)!ZtsgZ^I&2cj+z&$>XQNgi^Y2yn$f5LZ3AWX;ZTW zAvp1*fq*}AE-(pk9Y!bw%Urox5X7qeRAlC%9T4E~)-`Jdf~9x5Zx9L{4K;$l-ovrT zgoU$V;&tB4&~SfK$f;~w-%=4`-U`;GQW%ovCB!Ae&q>{4Z z1SjP57-=A6K;k)=a5(;xu>=_u)53;DM*eeOmzcJFG(wLb610koYD0x(wEW4y!o0e+ z`a z3;eN8s7c6HZKyEE?=>{cUc)tl>Qz}a@aAbVW@$K%3ywwFZw<8}Sb6RNn1D?^ClTbL zCi4Xrxy0OT5^_I2Y#>yu=`EX@6Unw7IPn6<6HHFyT7IE5Fxpd{~RX zB10_;S1fq-c!7`(ukDITXs0&}Lh?WDblI{mU0{)M=if09%wD|IBFx>|LJ<=GY)_DB zyB`WFftTMm2q8gZI6`j!Fi8>2HSY-oi+wr{CSEXqs7cuR@RmUcK6ncz+$!})ixX6v z^)`an?$=<#t;PiVY9#kR#IeYT*2}2Klt!a$RC1q-SA?LSiwLa$o6R7=VebQPaRiIn zd4USc$oflRk;(O1aRhUA=pYE&>t2BgW%<9Ek%hbKTUc1& zx4#$&nRWJm8qRT32rS*l1{*jN(5kaS$Z+<^pi=zQ^B{?HETk1n$y`h;ndeoi5jprF zoP}HY-WjhD%;9s>B-ls3AP{ns>c^>=e=VcJ!ar+aV3EO{GIhxud4dXayxRdbaGk6= z$7ltA3fx=c>ye%h%Hn?-Dmqh=-h@^xY532rix6MAH2oq~@m{7cCWDCNkhxHVKMW0!35OTs} z1VR=Dy`l)qv*Tbwacyoyg{8EqVNltA@m-F9KcHD82$?+(D1=PtQb3zs)4ruO3%~jo*!c39H~QSL%`;)QgIAw)Qh<<^JLv6_&KFmR_ZQeAmL2%=)~a zM&RiJMaB27VIWxi;*%B?|J28vkoEZ)fnZyBkwLJ3@F^#xtZEJuRw4g>xkBOX35rTY z(tVDQ`5pQq{_pFiPF?laH=Tg@YyFaw@Z*18H=TljubWQe0zP*SFQh9m_p|FX0`EN% za7p-px7}nz$c@7`z=YDX+fIV4xNC4KxhGzu!g3!p)+jnuhah)unr(pKO}zdpN5KDi z)^AJh3>ab3%IEl3g0R%m4^kO^V73j540SZH2!Yv&ieNuE%Z6Yk?;;5C;hrah%-|Ci z7MVFS%SQ0-)>$B!{dirI%H|1|G-3wjL4ehoNj8p<8_%87C3j>i6ASa1dX0))y7MJP zCFPX_laO3XKRGe`ohK0B=22bjf-rCIv%2g!{0YaxayAUqC8OgAMJ2zn=cT|{@PzAA$sTq zm{5||#cCAv8=_G@p&`eWOlrB2z(NALXtO18 zlb+qF5ud%$pd!BAC=e`Zbq|7!+FtoPY^uHqSq(2#&0DfsmQ`o`+~y zj)Mv-2p#|%SovDv3c<1xI#OYI-RcP{YmfhG5OxGiBFMCbKXNSah4@DVA!O!CMTi}H zfFoGm3sWpY^4!mLNxkJ~P>H|NToGKhU_l5PbA})z&l@Hd_*Xqg8-)Cnc#dGjYd)vK zN+x9xq&+emHn0-zt_mSTeSQ^Ge7oyUE0)ysl#N#Ax)OsBy`rT+upRw>QUvFf-*w4Q zT%#=NAg5JgyPCTA-+j}dQn9?5Ldfj-;Z&skQJO_1Z1hzV!DjaL{KD=II0FHS^WX3F znpXTsP}$atE5eNOS8as!{`yhJmJWSKuOdGD88+~?3c|fPf<^o876j+q{WgSL;yT8u zgwJS1g}Ixyg8+w@^_{9wc**m~%>O*v!j%kpWx9<}d^e52lG{&HSXioGASd_~mJ?*g zoT~zhOo>@#5t4QW!Gx0W_^v{*{QFA?@I9Dk3M$!!-v{JD6~_l}Yvi3Q)<}qsCb0N{&2`y5R`MEn^PICCU;>=a?Io~~J!b_L7Jk2( zg^-)`Z*nT`uCXwoBpkgYsD$))8B}I@SHgr_t*pIOP)T;|Gzn$f*KmSZ)Wt@y|52L? z^J}c%L*}0E`Gk$Rbxq+J7WGDufsipFoitqcET~P_EngbIK_daS8SkVIgSs?SjsAJ)ZZ7gfA5Hj{bDW{S%NZ-Az z#CI1JnYdp+BxLse$pX*FqQ_A%0Xz8j8moIJYdG$Tf5UF70~kk2QY2sZcY4`Bj=mUdJKS?D_KDKkGesn~-ba0CnPv&Tjy@s*B(N^0~B zMJ1;DY>SZeyMzhXF`w2q5G?+y?>Hgz#7i18y4{8VXIwdh1R?jgIUK>VD^BVX^3pUz zmzk3-f@pA2AY|0tdNARz&v!cr(lO&(8x|Qez@NZ^&rP(jubTpyKz&OqfvYbvjUCUe_IpO8)tDUCd#xax5~l)@}j#&+Ddc`tQ@7sfDkbEco$1 zuba+7z}HRZZ~;HpyY27-@SEO7H(&z7`UaVVpg{fdLp0>l~s*`A;5JKs@EC_=4f)uq~Z+i%?Sa= z{RAPlm7gvVYnKw(mWg9+xMCsBs|F!;_B4TzTi@CT6IS1>yrYqJ;0+Ut^l$UCfnXs` z$~a-c?@?4_PK^Eu$}LY?Dq1;fwuK3|iXC3dq!JPIvPSa9o(J;e2HRi*XT~4+SR?zr z4=pN5j>iJQVvc)0&MCF;Lx7SuVy#Jt&;Iw(aV)|{B{^7sRN3Y>z3GfhT6|mKN``mz zd|sBd*h(u_-O_F0ilw`{8-#5uw+V#Iy(le0%35D4taxWTgUYtVZ>h+#;s%OJ=nvl+ z2$tEerb#ICnq))B!0*0>2}mj)r!hD;iogn9ylmi#r3`E#2+p<{8t#RjM{DuKnij5P z#Lb}`!Q#GOtq3`{zSPAm$VLbLkM!m zXXy~&R;4pm34%HPO&ej|mx~ob&RFkxVlHkz00JB?2#(|gckFfpA;T80BCz& zaqpT`SoXa;5MZ@nj{a3e&WwH{s00o#<%EQOYX~g*@eT-ZIN`Mkx_IyTL1AIZ2ObJS zs-KT8aYJ8*0ITo`j3CoGZ`N?T<|$f5`hH>(9G$=B8t?rm5OVr=Lp4&i={rG2S9>0Q zF}J6|5x8>J=AQ{N=Hoa{B`>VZBy2u&$U;cpSq~MJqFOf$Le$=V7D8^TuF}Y?Hvs|^ z=ePkJ!ItLj*GT<+xxfN{N9hZVtn<%mge^a+aK%14unZ=gS=PCwpc47-KL?S0sI^I} zb$?dCgu~k&w$vph_zfGCpb`EYA@eIPDME2X0|Noy{`Z)m60>i!NoC8zbPadEw*?mI zzxj$Tk!$@F74yyOoZuQzM-a>&(+JGD_%8@>WwZA%PVm~WUlHtgdRv6Nj5{Vm#yokA z0RMn?Pa75%&|#Gz6rWoM6V7D4luuxx(}j&nl1~GHU|B6fEJD8Zy@`;{@_LF;!dhu0 zZ#~MXq|YB@AegysHB5Z#zrUifb^8qh3&|U7(JJIffgrf+m)4zdWT?neefMr`aXs5m~DXA$B?7s7;9LbtVo5YhTu zgX?$6O6B3HM83>s=ub-e&+_?@Xm!u6v<9}W^U4($In=au3zOZQh8UwGy zN*c|=E5RSW{Qj+lV2&t%fsl!(^+S>sZ0kcSsg8}b;fkr4Dvppz6H^GRsyqz>l)~QY z3*mLq9m~bYgYfX+|8L!VWs07~jJjT7>y{V{d>YYVkThi`nWVjn} zT(OkuYq})g`-uQgSASTvvisKO8q1SSLQupiL2y+aSA>LTelif!+59q0fW3i!$5>VD zHC>YY>R7m9NuR6}1lMD4T>|cPG_c5R8=^GaiCt+Wr$nDtvv-7ym;Af^5` z0*mMw!?Cb(-zkb`$8;gz#>Wg5aK;tO%*A z0}X@>IG8V}1pWFR6}Gfh5EYqJ>lmk1REp5L5OyjW8VB$bUa9tOiV7DC=2x+#6R8&gS9~uPv%}oL!S1iu- z6z5q*r8wi3F6AqOEG(>eQIampCjD)rl3V8*75IzSA3%UJ1tqIJ=oVnZB6k%Gry}#` z4YjbaZtfC4J=~C=F#=;`YUu>f*M_=nTvH?iVU7s;@5ad$I$n23{xfqh|$z7mP0=k$er>e1Sr8B zyD0?A9q8hOywYD`!YaJ}8Y(h5@VG`&_+Eonxo@9>3Af5@ww_b*^Qk4MxT5cvgzdp! zbHb|V+k#Md#PeA>?tTyicoW0(nL)^zr0;NPMp!m1EV^Z9PH?<(ksymYtWa2F&dwPI zg01W8#R=1gI2A&suiUIl=-Yd!Fvn+YVFQOFXCKtaTH1yn?MF8&T*=sX{4}b1hG@8c zylc?PI5f&e813HWXPrR6zpL~b6_!+7pHoTw^ss@DUa?6gA+6R{PH?rm4ij$W z?A6)OXtY!i5~sY*3E3y~6B-LGc%N1>IOC{6D_7H#HbOzS4H|{FpFn`OHFoheMOggv zOS+UanqgsKWuJQ1#bytqvfmZr4g z2o`nAb0;MB7zzQ->}(z_2t{sv9aa$9NUw6Q{%+AK{MPrJ;O_B>La?m6dtd?zk95{$ zTQQ>|!xp|Ra3y`y#!_LqtMU|;;=vypgy@4VfneclCn>_xn6)tBR;ATjEGkJ;>I*7a z3*Y5bGGE$gQOWl?EU4@r{|~3K!yZXRx@MO`fa|ypzhNL)TJ1xMO7Q*_xc|KK)vk)MsB)SXlVJ zN4kV~|7l^7?pt97A;^A(BUsGhcVGg(p4w6olD=ui303F57lec>ufT+xSM)q!0RHdm zrcRyp_Y1#V3tu<=4nO|qb<-6H_`2yTF5u-r_IZU@VmmK*9-FJjuMt$1^cctyGX2-q zFyTz9`bwATA>NA0p2l4)gv`3XRF_KME}TlC3>66YerQ_=GUMjA5a96M#19oASrpk2 z%vE{bq>@qlsYOT~IE53E|9n>vqK?gm35SDjdme5}I{aeLYLl~4&?+a{+a!d4f6PX3 zHJro|a^cLC1eVq<1_E3s`1U^rVPjd6LdY$z{zYIVuWW<>CBEvUE`Hxlvam4srw2Jg zcIvxFQ1PAY4--miyC)ivp9fl4*z&F~a0GmJn{|pxe#8ci)DOoBDjzoT{JiWZXPZ=V z{qhZjoZW7qjgY;*J13O=pnu(C)yH-UEUeHmRIkGR41)l-ay<$)2-%S-0>R4LCBTH0 zqseSesOaag2wAdPAXsUOp)div`WBlA_|CgNiV*hoWGZaSl>r`X1QA!J(WRzc;Pf4}c#QT#Xva3-b23{FVZ#ueEYar!2(WTIS7IQT*A;0}Srhh*qT;&$ zgbGW&_K1qy(&}YStNaCxY#P0PhY2^|YQ10)Tt5sD2>9lNAK3_bt6zl)XMA64qf2D> zF1o}w(;qnIY@21$8M8;4UTw(S&Z$&LoN)7;R(AwKep$3sm!yBcaY^}Q&(Ev+(mMv8 zVOft3bA(K-%@vh|8VxNf0RxuklF}zt!`&=h)WE})-Ir34&IzCEm3d(!t(g6OGqVPs zaXitVo~&rXaylcu?s5ZHY{%@nf>74=E)|)v=Od0qI@>>QBZSu7N`He9i+MlkSt16xJC^h3%N@(8#L& z7N^zhbEg!7xnEmBg+-npM@7!;x>>J+#!okD;04_q-hv5-Q+$spDkX2^aYAl#Uybk? zgET^l&uawTeU1Qsv&hg0`Qxstf!E3WDceSf@wvkhvSM2|Dzd2WXn}>fUUpf8!uO_` z2pM)_mO&+VdnLvVcE-y8y z*lU%*gg2V?@i$zfaK5oxBk}#t8sQhta9puBzq+kWJP(9X9AET#8x6AO!N8ek!0>EF*PDw`iQ=Tr*3P6{f8 z%lg5DGiJxby6hf#%D}>cy4*DpGHc-+8=*KjniGPD|D;Qj^9%$yoDpUm5X?sU&*0>SLZo`VV4@nDWd=z>B)C4SBbjWr)TIhDeTV=aXA`zFVv zlDO?5Ot`uJe1KJE11A-k*=dxZRe7Cm3L$f9y$%x&d*AOug{9BZk3{M9*JCPj)35}A zXW-Y63orpbyB}zTJfrVk_}|MLsW8|5>l$;~x;bbFYjrtQ5E8Er)n!>9lOPk4^kEtE zxUGd};NOs{76_&WpX7wXslr4^b82gijK?z#D$Z7OIfCsRu~AS7cyQJrR83Fe1lOi> z3c-pa9~gwH@(7NQ=B9dz5I)UwudckQpDbC$%89UnTP6QclN031Uj!keyXQ=K>!Ah~ z8M*619sH^l1(g4(|x5BCwd5&kHJ39W!i%wf$BY2xh+cGEBVk zn;rzk4&YSGXMGJqpe;)yVobaTJ>Ii$#TL9c$wtVoU0V?{Nz^S-rdL95dS6`>Xyg%$=;);D!uZ2bM`RiL<3e(<$0IQ^tEjU8X zpQxW=+0MLJ8><_KvYeg`HTHV3{# zka1%@AFpCZ8%3*v`J?qp`rPDLWOhlGN$~0SwME!*a+@Ng|1^*zSgD^|P>HXMFsZCu zUae6P?|G28t7mXr$($$CG&WoM6Bhn%T7aTeak@WDxL^i;RVBh+@Wdc&m=>>#F zqI^krjw=~A-OC_s37ld>uoP($q$__or?TOW=b6O(B^Uyn2^yGV65PLfo;8!#4z;M{ z4gH=YWR!81z&>03ok^wG^M%VSJ_ax;WV+lyq4k2x*g>!GsHL-!ny{Z0R_Snk2xf)~(Le!-J ziV%IGiXijrc+LE9VrZ5!x?SBl)uaDa+Z5>r!EPW?#J$7i$_d@NGr@ zc}SQ36$}DguvlesLg|7HCW5)5j|xIo`BZ{j_`z@+6=!lX73RwCX<>oi5mqP!ORs*L z6H>hWHLCm<3M?{X@M;1}`6rN8(mm--8?IQ!+Rg@{FsF`*kmc`eRfPP}DJH=_Cr%KO z_unQkXa7kM;Bac2JBna08*Cw1^oKbxVHGt0MNTOCet<^)g*OEjR{H2Am~h7F7pO7q z_WL#}CA%M+2$uTlF^#O|fr?7z)|~{I_Ou%WIAhL#TM*pgJxqj*S>Oi~R{qbO)o_Mf z*eu2P}rxn2lZsmGb zUzw#%w3$@azS}|(qRu*D;?HZUv=DNu`wd;p%jXmp=5zEcN66CnqZ&C)&Iv56;8L(c z$jpZN{b5^A41xfwz%~!`D&)~uCY69wa|A->Tq~m@?UkQFfWwI)ZxLi_|0xy~_w@#X z5OR6DLP-1EV+8m{Az7TtyeB`vgjLKMKSfBJo+}9DSAKyBSKhm&p-CwCVJ}C>O&^@J z5pw?2XQZ>Zroh6A+j=X6jQ-;&On~gaU&FqCAc19%wwt(ORjWb;LdKuj!U^et?->Y| zwxA&uChIK;sU*HqPZ5@1{>wth&A;Yqm?OV3sDw@)&Izkl)X-(}x1CKY(^Ga>2)5Jfsdt(ibSCxcFE)e>ySxh~ z+{$lu2|*T&kJF`6^$@hGXfc^1Wb6b7OgNnN%{E=qKBz6I6g+s&B4nSKq7bsG{nu2a zyTu(UEb_@2y%O^x^=e&gnpp!cSpIDvm~gArdlMBEXM;l~p**xcOjs4Zcux?L8$YrL zi5DFPf@MzgRtUMX=~IDVd8u<@0@6peC&*QDr9owN-ef^293^ZB8C~;zn1DG8o>zn~ z;uqQoX?OckVQb&>yocL+cyU?<%^Im!xu-s`VPT<1T5&@1?@0t1Y0gksWOVQgFacHR zwFCmbA?FMmVaG2LCKOlE8jg_b+6tI};KBq&NL_wU!(ILbftfvj6toK1QcPgE+xyc> zCRXTAE4G@Y!V$P~sn6%Mg6}vw&B7uF?(E13p^vsHLPGti0>PGrpVP>>G8_UN&iAj$ z35B0rR|LP=&%%VmaYGIg3NcYdL(@L%=+h*ZP z7XJF1F0Qb{f{Jhd43l85?5Rt5jbbXSAgzuKS1kI{ZCbI6>Qn=ZOdsocth#ddLcl9O zYM>A-t@mtB$n165A}s812_~#!0w!oUN9Gz>;Gc~4(#5qppJQP;3oR99Uz1AizA#RueAWV(uqw*YcZ+m=ahQrM{Q0g8SMVioKPy5}`6!NHX=;QnvELli zWy{_iL92|dy>wZ&ZUz-uy4UkeQaXL0L1)S~meLuSy=ae#Mfx$(g@7{bv4Jr zN**v9A?>5q`}3-qPh%So-X0f{gg#MUE@@AK8@}uJ=O~m9#dks7UD*ZeWp- z3wG*~zo9h*xK+mSFoBR6IpYl~RX+1fLiDdG0wGg=ZVD4n@MI-NFxT|jic0j-y{0bV zjRhfjh@}Y5{t3Edt=UgS7EXIsuS(xqs#oqq-{@7^g1@N1x6kQU1O9{e=llY_N?f_X z#KIgGVqgN|4v#0ug2kInEOM!>k3g`<-78^2@r_?$P;s_9ZV{@#Is+5VI43z2LRK`q z!U6yJ^QI5=_r3hP7QSw}4L|T zFpH+Zgj;1yO()3s;`$1U+}^?S08H;w?kVHva9lA{?lB12(O)S-NUP}_0sp*u459MD zEBf)mvP6!;74v#y5v`cxKt~8rHaF6bAQ^nxvkKguYtX9rInP5oCTo_W^2vpLF!5dO zRb&yuyDhdMfIm7?dtEeZ* z8gaLOv})k3HofS%>zwP4>QWlN95!&}J?nom2yZ#aUPADyMbN|y;;wx{R9 z23C1x7X+d7kLL_RN!D>H(tA$2F5%BdYNXd{sA}M?vd*sNgyg-y34{!I>mOb0C-n0T z`z%%8^U}WH6}<{{6&rLo>Efq?;8-6D6D}CuC{hvn6&C2?`)L)YlD@UXK*-dG8)3rX zq_8w9Ed0_^jeb>c3R=1N2o3Xi0;iH#?s>9|t{P-uk(nz4X(fwKzi(k-BI&V#kkjA) z$)plBaA5Qu78&SF)tDn1LV!~6*&hT}V!q9> zu+jyCsK}shDK;wp-~OtLt8|~B;%GF}AmqffvJkQ&`II7LH+n>1nI%337M66dLL+wU zaZW}3G+)DeY-2?w{FNhuP!M;DAoF8SnpkAU)Mf^P4aiA{35W9 z`O{|>!F%;b3LzudXoE^&-%^W;cbD1*f`!FJ3WQAke5FOD(=HPxta2}mwh%Hr@(Y8o zY4J-O!J;mYR0OAyY7pX2R#=3XjzbC3{mZ8Y7FjvzQ<#8_7m}zj$CUk4n5(6~Ud7nM z6$pN#^NQ!r%t~*iOU#PP2CWt*dwx0z4Lx^M&ep$Z#lj<7!V$Q6$R|}6g27+nGpIyg z=tN-KzkEiQ*o)tBT18~+g9(R&i(NK?x%n_brVQT-0WO&P`BMV(D?g{Ou)y2z3xo`a zK5q~{{kd8pSm+S_9L1J+>Bk}4e!hpGGo_A+7M%(7T>=wsUQv{w2&p}fSO}I-bsZ+G zx}E8-sH|!JJ}2aN_1rBB+uhM6G5x85D`}oTOhp!cHXj0%)|^$2oP z?nyxz;=u2Qx0f!Y9mid~OAQV*k5@cfKG6--uY}pqUA<3)0fnYmp zd7hdai>5(kE302tgyi9qO$0N$^|q)u>+KbU8GpP76Art%=Z)H{Jx?HIZE_W^m}6p@pfdqi zM_B}O)Mk!gvwDw!2{(7`zCcCVbCsatb?^>MIAg!*d3w)xr*K-$?6uAyxV-mJVHwj( zA;5Jqde$@$thnJ7jfg4wjC6hz%W)+O*4MNMM$f5=Fn7WTfneF*Q(yudDWQrGa%_!8 z>i%*Ai*z^8cQ`A*_XfwpQm@$cD%Lg;0-VV)FKfj9zDKWuK0m5(#Z1Rdfso5b#=rz5 zk9wCA=1%c45G?$aDS}GGoOv*zWK0`s5K4}(RRl-h7db+fg}DsCe_l6r)&HOFUM+mx zbRT~F&+DcK5b$-=LtMb`uYR2bw}&_4w)zuf%I2>Gm5inOu_+5G^ap|EeX&L1N><#s zO<+~s9&#%7z%v9^d3e8|l6G|vOt^A&{l*rdb=GVua__#@1{N9DWt~8< zu*jf4JwHYFmy>K%q6gOE2>1?-XEmaGI5aXU?_0Q%sqQwqtUh=`U}2di*Vr^QQLoZp z^4u!CXSu>NGUw<)n1E#OR|#zAyR`(B%$()AY??U2#KJO%^`#|PHdQM=GTi&kX1T*qem{8JQ z`PN1Vt@@uq2;S&Y2o^HKW+T|A+BJN04iIEU%PQEw8TZSJ6~SEi0~Hzd&s~#>&nMc# z^K})Kk~?{V;Ck%&aEE)Z(5uA8xPiBoH~(E-DsDBP!b*2_Gimir#pecsWh|=_RB}J% zx)fCOvSDGVJDXVuSr+&u73uCZlVf44+uc?Ox%`_bjmV$M1Qu4s%3;E4-7+tWO7`jr z2BEy`FB~BYUim-~Qhy7z2odcE8wi#?^bJlW{rhABbJiRU0am7akU&VkQ+c`swZ5US zF!%BS0wJSEkF}@-w;sU>8Sm|d2`l&NXLLzfF)i2Cz^BDlWmWFg?;*M}4QY97&uFL~ESrC^Kx zWs}8-jd~ULPBYlR1q-)yv>{~d7Yg8=)Kl-x+v_Mt1Xiib_z;#xP-( zw5KjXx|jXNsRVY`ZwtPPWU7fprY3M3A>_L;ijbDt!XhLmmcoSVxF6OM1T(XdBBVIm z6Xb&0!4Tj&Ip0tzt;b*-fcB@4gj2v$1U1rx9{Z4p5hK8VmL4zI&;CGEG@T7-he zO<=;|Jf5C=eWuCv$AxqvWg8*ef z|7`@B7yj5rCFJFu8f7yNSyVkWA`r6h`a_d2Zg;sw$oR6DBUr@4hL{+a(BTHzspJ{wO<4I2<|M^AIf`@`Wx{0~c^wg}*(}LddkaV_*V` zyVd1{xNqv|lGavPSXhMj&x(*xte+}nev6A#WXMT}K`ZZT3rvIzI@DcIaqYSe6K*a$ zd49_7BQq5iS+s+mY5()Osf+%;myc@U>!yF;$N#);dJF+yH$A}xJh#2)xu;WXC3Hy^ zKfrC!wIgN@pdz=tQ^v8dlE(LRaV@)LqmqBq^AX!NF4&?HQFTKgr2C6ACY8*QeGMw3 z&dh}gtE%1SOoH$$5D1p_!&61Y{(Lfl1-$kRr;@i|vq=bR6`@OD!8V13ZC$(0AmoKq za)b=?|Jb6EGGdw{n0rD5;hUERaY9Tt%OXtMrJwC&Q091nMQ*zJIj2=_vl|5INY=1^P<8crLRU*`(6eJK3Agpal+bq zhCr~)n)+cY*XEp5w906F-z3Cjp0XiWrfmgGfOCHfgOEOM21m%nzudM_37Ziu2+qH& z4Z^0K9bm$(LTY?(5lVi3Lzj}6$DE4q#9k&LuKSlT;c)gi$q8$lzNkxJ_gMmqoL8iD ziLP2qfZssELlsxsu8z=%{{DZ0%Is$&Il+rJH4rRsV~ir0JKh(B;PB^6LPqI!10hpq zPKODHllmSJRQ!7t>QYwwfWiXb0xrZxNIqSr%hor9pfYmUD=^_Yalb@s6h8V#QSth- z8xjaF;z=h2Va@pE1hzKk16|B+}g5Vbi8-3c(`B zd}0xnrbpWdski>*gv#tb8uJH^P*lv1Jojqar$?wrSC`=yuH^Qy!v%un{drj9%TupH zfD-*tJV(gbL%*3+BHKQ%2vPmtv>{|>Mpu|{IOY2YL5Q2~`JhA}JVGm(Jt)VbRnq<0 zf{@&Qg+Unp*Zp$umAt@V7NOX&gA*L-=LI4B zR!bv6kZ=RTprHbjmQSXkmI{o$4y4(iVxnKI@A zr$<4zit&9%qV8YFlCsYcAT-kh_hW(@A5TF!{-$-D7KSpsXNn7e^ znD>s`u&{#Vp#~u>>KI4J&~uLotcZW1k(@peHgGt>FUmwnNBypfkkY@Bz@m=!5?EN4 zYNU&Oqvv^k<==H+1FMwi^@6a1-yq1~S6AthdgUo>;7rsz&vQcL@x=-u(}Vh%gxKTT zECh?}n+Ow7IBAA1b4To@BGVcjQ@E1h6<-MivxnY*2_-Th&!V!TOQb<%U}MjH=o9&} zUZo!!%4ro_c|Z}emi%E5oOfR#uR-fJ#)Gb$4#%_|so}i!yFta(aRNbZs`&z~WY*syidKv3OcDsW(d!<8**|D+qoThQ z1>X7^^(O>CZrMhH3|%+NqLSafmm(y7bQLCC$KCC+Nw7y{+Yl_gSG=MU$YXU0@#`R{ zgja5W3AakV;HJW2ih~R+EcuV;I3c8{k07k={{u`|rDv@%2=T#fIYP#bNLPUW`?{%f zcm2BQDcsHLm(-~J|GjRi2?1X>)xyOPHp4kz;FVa$p#cP$@KrO8MJD}F*G7n(<7*W6Gc^Q!>$%W<~4rS zpc0pO%tr9ue+VWVj)}d)5i)Q}Q$Z-ZT?G@0xhcU!Fz+q91tE9RCXSGSHG&NUlhsQs zLiq3|Cc%Drij9!xdYOvcGPWTExK(;RKN}(MpX&yKrJYCZTp zU3Ha;Tsq@BPOFmq5gPFy-J}&0`)*T_h56E|f$vYqspnxL4z1KB`G?CU7MYavrHx<@ zZA@URZncI0E7!F8f{?M@-~_YYWSDTBBHtZ~;B%ujN67e1O<=;R#4Y_&u zB)y96wZy=cjETxO3DJ}5+YrooYP6uTtNsW@$hox3MhF?1&(Qg?VnC(T?k~tX&{%;7q|9 zyT*n-;|Vh1r$&NS<~v&qLP5cFm~ds+GS9D8;p48+O6Jxq6S!i9-z_i++0*s?ETfMU z7+9n^P(RdVQc8VJCB^Bv>#`z?1eNqF?`n)${wD;uRp7h@8WHdNDJrh!`r#+D?Eg?< znSD(w46AiDcai{P5-O@M!(>$sqjImu0hnX|U*Rl-jX zIjvIGOb~>$W%o6b8$7mQk?E%fD1vK-=UF}fo_=m&j@c!GR%u%g5m;`tw~2)%-)amK zZk{n)YQ%p&OHm0Q?ynJW!s1w1$LkWSI@=Kmaba3`91B=`<@t`0?2TfE6=G@WNK*-pQjRe75dPNcDjb5hV^;f733!D2S z5hlP<{f;1HyuMW-WO%PA0&{j71p(jZ12Y97VDws(;CwL7hLBrZ*%To&=67BEhq(n7 zR+RiRN64)6rb%V>|5{ODX?GVIRALwHg9(Sj!r{Ke!-e}B2tx3RhPo{GFVH0}Xc&Q& z@}{(6jy;hU2%by6x?v*N2LDJwNUxJ?5yHMaM+Lqs^Vb?x(E~ZHc8yJg3Aft5uZfM2 z`A0BE$f76r1)=1~Fbly7mt`m_-%Km!guEjgHO$NRY*?6c&jgdOr#u@bTqka$w?^vSqW%*Ti<~(8G)zFy%`^+avQB&j6X4!d zlM~X;uM>p8&1@)k?sQ9E#HxMj%${>xH z6%Qcb8{N23AY}B~^#+y9C1o0E|9;D=q!O2nR{4J|gbB9_a`xp2x!%8rppx9uG^mt} z-VGC0u74id5G?NWO-|T&_o77zE?6rF?vdv;(t;cui;S~Z5}2wdO)ShYe~>O~ey9>u ze4aaNA*AcfJd?`K=`{>OK@G+c(%aA1q>}a91w|$G(EkLL;9q<#LV?dvDzdt#{@jt} zZ!e(2QW_tDBk z++T4*-lQ^ubS)a9sHAQh3=__{?0swq8D28MA_P}07YLTq{w0GD+x0b0@H!M|BINo@ zmlYwZGJqpkt5%Tgr^ps~^1QwlmNh9F&6IBDRQ_y}aN5~~l zO#++QtG|VX?YuNh5mvujW)c=I-A6?RKN@afkwGKV32al=BohmZx7I0y%xTm^qhxRk z2v7nVF&lz~y}4gdiK=@*Q7LTw)F7B;@wz0`J*p90{ltbVne;#XFqWZPELzDzhmW9D z-twCSHhicz1b7oG##UGeX|KP`q*7YDqab8|Je?CtCapFQ(yUPc6Oi^*rXslSU$P-s za?UH9kULD@b#lez5rRr+YtN@=YF(kI_;!Lz;jMDsAI1s!{!<0PX})hm$Q@mt=Y(;S zBVa=Le^lLfcofyw!0||L0@4+Pp(7nciU@b4R{=qK8G4c4I|HF6Kza|!WH-Cn^lj-0 z_lD3FL6D-T3`MGfh=_vXd(OH0KF?48$o=>|cV?69W-~yFYl!dRSLC@Yu(14hj_U~S zecoQeS$5K(5?B5KtT4(M>AS7Sq;!+Yj(f`lf+b%Vs}sVSwxhyh1B*;7Ja2;h5azsk z4HXMZpWR&0C?o4%ov>F6gcUYtd6p2EkuXSLVV=$D3Lzuj_mBvG;rjrIe(h(_$nwnq zf#8lQcc^gnMwE($<)&CvZVZ7l?qS$;urz` zP@Zl2;Zcr3@|lENUi?BM?wNSTz!A^u{kB3#D&s1GrChD8QP~q7Y!aNwD|EubVUu8m zJxNU}XoQVNH|PW#`&ST-Y0k5ZubZmC%l}+ARfT}p zP1SG!ul|Yta6H_s`^iNe!GqXf1Ho2}9Y)}h{R;&ZyUKI~KQTjv74{UJUZ^8@Xoon1 zirCX!rIOqBDuLyT0tm3@NYFhh{6yJ#9ShUHsZIs{(LsL5vf1a3(1?E?6$o44sDwp( zWC>q>OvA$L;SPmhF{{a9@l-dkaQ8c1R0InxGIWCb(_dxz{L4!aV3gjgnu6f#e{5kA zEF(YE2?71D!U}r|hK*6EBwH^^BvkuY#lnt^iG~#ppL*?@M1oKR6>sVt0{nc)(Xy;x za$2KN%78g4g1KuQg%uE9_N#{ANvWYa6{Ew43L!ZCfgr3NvyuScUD!dz!i(NNsvua| zwFsS%@$YUyh-qA4Ah>t?S2`hfd9pyToKJ5ngviw^H3ZMLM41HFopgaYtazR&TTEH(Kj{d*VC7r_i)e6Gr4qfcvPQ6Wb{hz`F5_*JO8kRIIw37G5>^;l zN)(gI$~sJ=687yo1|fOPkFdf`I7;RVDo39Co~0Z$s%kV!y7rAhqr3(^bSe?e`ojum z-apoqFdjb9u<(MfhNy(RI^%Q%bM*6lq#l|!lnP&1Z5vEr>YvNJoci5YvYFmW}W?7#}SKgRv_^G#Vb@QrIEuWwtU$O0_+L9W}1Yf zb_{UB;*a|ZLhj!mD}>$e`3}#Va?_;Z9+ILVSXR$hDj|3BH4_29=|p~Xv#_^)Px;Pi z*Jux4KdVgO9v0d74+0PO6ABg{a_tqYFtXO2O5iDvN19l;ajce(V8Q*jzzVQ8I4uYn z`Ff#r%5Ip5cOPydlIiJAd z?*&T)wU+lOcP(5X_hdhQ0DIvm`#_bzqHiqIsKj3kl_mL)?K&1_|8A%t*gpJLC2aky z39N9qJ9(Zg){iVY6{p(FAS5-~PGHepd`~<38~1<-9A&h-sUTQE=Zz|1Z_Q+bV9l}vDv2Af7=)Zw zUlLeEaT8g>)=kuDwD;Z3u)+xwCUjG&grAzM6AJH!8H8NpEESe``U?WjuJpM|qmAp+ zBns14DOgzcw!u_bL9g);phTV7Wg@t-)Gm>6@Dm6y+7lRRAh`YZeL*EDP2LyGUMY@7 zEMra^6-T^q#<#LWS1%G&JZYJ*!g-R&x7zYtNW`oiYwPdAtZcPW)R$=GpX>RO3w)_@8#bbjjVBZV1@HU%&9Js z|K5Fx)T3cKjjW+}1cD_$`$eVl`A64ag`+&hRRkfqqRT`u$L)DK!T)A2L2y*ADUtuS z@1Y(Uo&^&)JonWa6Y#&+P2GFBiBfnb>z<-3!+7d)fFGZsebIKtmttP!Gu#;6G9Xq2xL(l>V1 z2#H}gCwl))+4au{_=Ag z5AW=eCFI{he()b0RbjhEIK1MvNr?N$qawI7W&^B%BLxo#Z2#41vZVDMs^f^cmVKfU zELEFm2);Kqn!qf>EdmSMJbRmt;10hmiHwzxG%7{W1{HRyO<#$e(hwC#Y+}cT8iJ=z zdM*g=?&n~IQAw2mjmqABZ|DRbA1h17*S_Zf@7;@3*vYgbg7!ogY&QvE)g~$k7JIXu zAe8apDj_}Bq7gh}V+Fw#GEyZJSNIiHIBMbHZW>|3Zm)zVF-N81ov~1sRQE~(Kj54x z%aM`og&!V1XxRV)5C1vPq_VEvQdyGQKa@E5Q7;uoJml(04Z)Uv*HsW!4D~(6))&`; z0DBT=&(~;_8F$MhSl;iTBY51gzOtnMbWLDkDM>wH1^9<-HwdXae$WuyzT=)CSe0dJy=!?e}F#v|cf3RMg`%fqQP()v@r@*V8mYQr80} zf+e>eq*BT0zCaf1gbO+rW?yklL+~AG-wDD7?)&`dEjkDRMj;h$$>_mo7-pz7O}6rL~^I;Di-+S_(mqd*{GR< zU|}md3PRGheJX;7%p7e}u|D3Y5fW1D@qZ>McfBsodjgUWih# zpKdIrqZKS%uUA(i9PL|6BB${y6$>kvQ@Og*}lKF9<3j<16We^d)~%;qHRJA;6w>eq&4ov)?JN5yGn1HW9q&U=2aoSz1n( zyu`l=EMs4pPNQ@o?^AZ{fi6e>o8>13Zr^#E3in?6UEpSxarPLjaAs@jBw1XQR_a(- z`hfRg1!OnGcnXYC>y@!V5+IQrk~rfxkx zpzEeu-!w4^?k7zY z1drWbsuT7+9HJ5&!#Wy-UE8iJgtS3pH3TcD_mfV=X%m8Af4{DQU@7lUCh(B?hK7a5 zU0tOR4%PmQ3S0kf3wlTTT}lgjF}ZD#3`KqY$?Jc|exH zu8VXk^X4}b1l!Dq8iLJvc~T&F+LcoZVbQ>rDq-!CKVgMY-?t0`+t>AX31J(dg5YQL zFZo`UlBaWZDu z-rDFDf$MY6%Tl_m#KaLV`p^)Bf?j?)f^EEEp~4~uZ=%9^!$q=$A1+Y+aF2J{PFMlu zeySpoakG<3CBIUNPT2G723g`(-k`!mhF+0~I3ypv>_Ge@#ShQ3e_bP$uykujK}a7E zD-m_@HU!v{vulEm;IVBRX;k9>U2IaxKU$T*;`QAs7M3vFBTKT&U&q4Zi%VgJQE2)~ zS?n!a8CZB>wY#vwC~?Coov?rSK|#pu^wL0Zo0=jKSQ-8wHy@iZUc%L+tDrKqVk{Nz z;e!+`+)>{54&NJo!N9`O%yoiBN3Wbv32r}mTRgL)Rl&k+pG24h|BA0<$w-;6Q^_3W zdt@3n>X=kMEnTi5cyjq+vLrX&OyJWtZ-ohthS!xyaa0gg;uh962=&&`aT!~ zzdtFc#Ec)QBY5(uswyF)@Ecg6@1UM?U z(<&3eri*q|SmqBMBzQq@0#E(Aw*i7D*e&v-fTs`7)~GluG&BjGdg~Pg&$RcH$Z!M* zDp}>G%VPN{M#aKnkMGeCJZ8nGRQRDo4FwjqexXYzO!>)8g(swZMuivrxnGXl5tU>K z|Jo1#gYOwQSyLkvw!UK^SW3G)Di!UGMX*9ipE_HXl%4WgkFTyEKZKdR<8wiKc0DVj zJc#1Gg0{Ajb>JGD}HQDn@29I<9 z;E3fZk97o33%_p=%5GPL70UKyT}%XX)+*7d#I<;#62hCG6a>R@#z3$=!~5!ls2!$4 zNLnsGE?MxcK{^(0_baC&SlGmA67Ft+5MVU-yX`uH*`L)ER1Rj;H3@OH9F=e+CRjtT zf(>n8#n<_19D(gEmTx<=ZhmIqh()e3bOev8x4|T2Y~Do$zEor$1Q-R)Z>tj0M}Djz znCn~{K?sjNZzAB=-ufPZmL~tm(Zp{q!2~uBJUmH9aLbbof>7{*g}_eq3WET9^4n~Y zWm)Yw9Sctzp-|!JA1{<6&xji^fz9#y77f7*HeS~W?(fzr2$rKZG6`kt4haMgJUfR9 zk6fBTg;~xO!vr=LM>}On3@tXP#__VAQ65hSYYAvf6CSn%>KuHmEbsb zStnQm$_YZh0e4`9J>gH=s0f~PK?)Xr^o8%k z)4jC2hJ~e6D1#LcI(NQ_;72OYG^iYnKBp6`2Y-SU_8cBqStS&oIiMhTNxN}^kTPu_#8TmgU$#NT7{61N?6&;`l{LA+Dj}(P9|gg3 zQ{{V%A0BtapwaFNb95S&80jiu)|f`H!c7c3bWy@N{gzH8IDCLWu$aeHG=h=vnhN(` zucKn&UiF@Yeo>x>MW5bn;E1hBxg!Y9LB1PJORg@9<()JgM|^Ze`5xnGhbJ0X*w*dK zRT{bLZiW^1IO;8x2%b1XBC(!Jr%~)uCJ?NkQ9CLuvQit9imi4YtZ;a&)=DB}Mw+1F zZT^*sU>W*CgW&o7l|aDPd%mMmu>?NU3270vH3YZxcn4NEYP)@?gtKt3K_ze892LRC zd;1;|G0!JMfRa-yR6#J;X@8ASbWw#BM)@}nNF+~qLn5i=Foj0h8}8@`ruU0B5#0IS z7b=yIoHMY(D6(4<1;Gr)%f^*$USmA`pZFi{%UfiiG ztWcuA^xa>s+qY%$emGL#h&y*q)e)?0a9x!Uklc{KE$2GvSa|XGSp;S&C{n1z4$F`w zsp>To3u6zb!wN|KD^d_rj_uVDJiEgjSYcGs_O3xNE^e0CHdEe}+qbGVsLlX;k)hQ4J`>sR{!Sb(oOe%ZI zwoBv`U6wE&y{Y1er4CMo6;PUH7YO*bhCVtW`S&+91haXDs)XWu@-fb`4mXgav=-MT zydMlRXis7H5P{&q)rV_@J?~_y2$sRi!3xOF-7jSEPm|cwRo*FVlVuxBU{8z0Uo-?y zJZ``W*n2lfBSai~A_ysOe612}AOB?%b`A~E5iBy5YlN`PeN+VBl(JY*u}`_76P*A5 zNx*jVBU#e#byjHQegoTeaHK;R6G5H|FtAfz_)y<0LS z{U%5D%NJk*hfg2(CxI1CPZn5MT*D+;cGg{NV&NO@rcQ8Q{fEFx%KPs3{Dj#ijgp3p z5eQ}r2_taZmB|pGSj`xXV0+%qMDU{hh9Gzb4^j|pqw9o92(R>pf#5Y&-+fUK_FT|t zTh9`ckWsOZM8U3&8Wx^=Zj6L$%TFqmBTJT>2$o)$2`lVzg#-&(cFRws%-ySpN@Yj$ zOp_4!-st&;?sr%wyAe>4Ga99r`oW>W^dEsDj~0bwjhMfUu7bg{h_~3W#7eVf=a4+3|1If z$7vd2PnqwDXzQ8wG~!9$F`Y&SD{dyhk0f6zuyB`gPhxrQZU|69s&7#ViB(Pr1pHg@ z9F>qXf2vOKbgf__c+8M^L2zcAgcXYCeiaqL9I3wNDC?AIRCvUrMjDNh8u!)-DZcN4 z;o*9OEJySaDvgrEo5Bj`$$g_#NAMKiZ$9T6mRD7&IBP7`5X>{Nx=zSzb(z3(hnzLB z@Kn3560%Oe&?Oc=rNWN<^1`GN+u*n?{<)v%Sl~CMHiH!o5AwXw2qhiAF$o0?X2A-3 zvg4i;cB~ z3T;k5;=8-OcZI;h4o3_%5j={W6bR;g@d2!W#0z$nVEsE$7Hf=rdgsncX9SIkzG^N< zPPIhG!Y!2r74Dum4+Zx{fqbm;q(=KREbwz0R?E@shYcjs%XNndjON$XsIZ;WO`Xcz z_ol-NBhOdURYJ+FF($#a9J&fQt>c-PR~;Y_JYj5Cjmo+$->6hP9}hRE#O48ANS5CFj2&cYisUujd`zRHbtQ13l64|qhg5V*8UQ5^`@h+LOoHXrIfF1SG6YsQDx%Lj1ZF+hO2YfZ_b!kA11O z=jp)(59DFH6dJ|;zDFgv6Dw(i?6CGGA-CT92EnuN7g>sOuW49#a&|)%!J-3~Dg--s z8wBgGOcqDauOPtY^o#L2f(88iQVg$mB{oR3L!q))DXdng|}~QVc3dC5IJ>Di<_DPVQ$af=A`v)2ReM z^F5IA&-R4?=Sd#+sT{>vMypg@>kd%i!4GShSonm2^7#k;?c-}X%I$herBOr`-}Bgt zEAqk5a{m2Up;5}Nw+#fdwT_e!J)7xNycOeBLh}|46a>$xdXfsy{QHEUVl*E|V6J~0 za^x*|BuCzI4NN~gD&=BJ0<(_zO{cQ0Ukd^&9NAvO!m`@*mL^Hh% z^25DUc)|*KUoh8=5(W40)IC4bh!y_1UB$xOd-F8}_l&!t5OUJw(;&BOtY*kj+}p6i z=9K^cVMYO`8w)BM$JUUegm!yXD#4xG8wj2~`?yYUP1>R%m~)!%zDS+)kx6B}yOn|9 zg)dgARFc{*kjVMzwNAx8VlRPPK5Zhf@YK!oV1*Mp#(ZTGqSpT;2-aTv6@vStN-81q z#&8Y6J^7cZ@c5BaAVA4n6s#dw&b%)bDwfCnWZ|*11r`?h(;oz$xa_8Zg?sDw)DbMT z`&Eq)($|!*v3n9mg`O~hJ+2?qWJymeXJX+g6)XgHG%i$*j6bHxQPRn}h9B;+e>0Ot zJnOprRLkv)?@(cfuD2Grho$cFjrd4knKO01N~5r_G6MJi@H>Nwt8KPM;32*TzxRjN z3Km}4XP622-|MEXy}QxZH#IAd*G&q%{Lgh$a|n3d)B*=^4YKAN70<*9>R&Yw{J^EU z3Kd7}C|IFnoE)c9@wVA2sE7}I?;#O3j7B`=pIZdRA0IYpk0Rp=A?yFY3ViSMKXodpaaBwNFW7!op;Fpa z7Un#98v-1@Z_!GPkOqI5gy8m8NrFo5rokq`b6`G!iycmZg{QuFq#>BSVlSN#YkZ*~ zc+7L(M}cT{T~OK4sS~U)n!QDSdSOK;(+w(lHDct*+4H_iCEk9}Kro}*SXkkxoMD9o zW;ts!v9QEV7+_?)%FqeB;(sKtoPtw=%FYj7DF_xZY>R{?cprhM?mK1r;V3mS$3XCe znT-hWtJx}RSXjmfHl1Kk{Z^K&C8MbDl`R{?1aCcP7L9n3D~Af3+w;0a8k?Yk;FCb* z6#~KcEs_sE9^T|IjkqQAib*4{q^L|PEJtSs z78W?EqC(i}u0e%+gWUoPPkr>Oj$q+ihZ=;W@^4b%CB1H#Sh)RGp+K;J=0{)!9BGnh zBH+i*RU)u``3eLWWke^bgk81P7=-jo@;%1Ws;3Jo0j;WQ2wv=0!z8%6tTG5;*csh3ZINO5j^QZ16X0toIB-Z$=!EWP;vGD zLm}klpD+--xZ4>)$XA-m5?DV$!tv~ch9j0d^O!*J)O*XQ@X#E&hZ)m+4@m!hJx$t^ zKdmCHusQ$y4S`^8i|-xf_55YfC@^E6N$_<4N=LA?zuUnI$Xz|bAnZS$s3UmVcmKi) z7~Adt-{f(3Oe&sc*$N@NK{Erv5=R}=2w{H16$H;$E0|Ok)|jJH@g$zssAL?Q3@hx( z_~NQc<>Y(4O)7il|0$92Dqf+IcC!>#xQWzj9*s&glMe}&&@w@e(kosSIAZQ5wPXp3 zn5<&q8OwSY2v)i?Q6p>~G@igM9T)`IlO5OJAk6&fPmSRG|KG-RWaeB23yXd|(V$Vu z!OMbhgV$4x5E$Kz!=zN4xvuBb>2N33{CI|2{gxW@2I6ue}fmz9wa+LeToZsUcX%ifomTQKh>n%hBzEkfq7b zs4T)AsbJyRUuGJFcyC`5!H#we(x{}as6${$-|aK7u-xcH3W6t|eV|jBvpGUgN!1LE zuyA#bfnd8AM930+IUE9%oSpSlLgKflbVB@#bdzx8<#({cp3K*cG{U~N2_}NOg8ET` zAJ6<1fgPXTLBSF8B!&=p;-Ul{3w&?mWP{+IzF9-SckVov#n|@|6@K*d1c{6=q4?pR z+{%w(1(YrLnZWH9Ltx?78L>Ko?R`3m3KKKrd01$NC9;%!x<$hEPo(OHn{y(+An@h> z<1{MC^9Gv)>x~J5;E0?HD{Qt8{98r9j~~9MQOPWR1}l`1_WlZC-8$a~#KFIN%27>)eqgv_Xo7h3~#t!$7dC>C0h-5F4I(hxm_%7z zQL!41SY8jCL}t_15MXmzkKYYKe%Lw{!K^{sU{6jE-?|Iry#lnLhtTPbo$i)u{JZ^XmjY?9BMJ9q<{C`xb#3s$qsVwd_#-Nh! z`({#R`=*IXWl8f@CW6~%T$k|n@2O&8L%QEK2;po0mc`Y%5CUx8*71_W{(M0rZrRq| zpi$bldo@DfvcWnbXy{-C!93*}$};|Ic~`;}&}KoS!mY0iLc)6)vJCs@PXhP+|1ZT0 znG^$C;5-o{KahJe<}6ULa8J)bSOFB4FvaANfuNhPjAzx6hDbE2-#gK>x3hz=T$;z+zwdbD5FQ3j$qC^zZq19 z_Is#NNga1xrLuHanL=@nYr7Yg6@A_|{L_2x&Qb|p_1SB zro{F!wIw`$P6Eq{U#R)v=A&&-3PQ$!sv3e@9zReBaX;3k!qR$A(5YD7swOe@wC~S< z`}dqMaKs{J%BMJ9kdP*eE#|g{BktZi-#{>1)Noj#IR6@@QaRpeGJ%Km>~CV>?vDFq zamT+_u&|^h@`1#y&Pjrb@l_P8Fp4o=sD$kNuVt~tSJtrb%zGDrdZ>!x<_@;}#2??J%pruI01cV3VE@|3P0 z-__wv@QG{NKv>~slgsTCRP5_+X;hpAb#y96tIvWJ_T)9-8Wq>TlR6bXW`Qcpf(rz= z+G;IJ@GW`e!cTTzFKACjjRIKVJT_sG#d%^66>c1As^f^e8-A@4)~;wkV74Fom{?fy z?j)U%)UtztfX}+~RavTBf)&qPX|%*Td#Wx=<~j-E$zlx)w{MisWIXz(qbe3w{Cq5| zFp8YDjtbv4>P;%lT98781$V7Og)cwgdz$h5QzRh4g~s8H8iMU?ARkja04(>gtZxK;E3m( z??#0??{WyRxnzDX4Z#DS_Y#DotM^LSzmHI{u>cB~JAW*0J!2cbAw5wqi#ojS$OU zs)T|+vjxF%;aiQ6JNg=|usNqhenw@v2Qvkg_)mY4FrLiQsJNUjB+^E!5|J0C2^{gn z6Y@C{zN}yd1UTW0MTh0c{`*9Y%91PPOazbGzMBf4_k%8|tUmM+tZ>xk%kNNOk(2Ms z64R|66`p?lga!#78|mYzuq{8oMTN(g9+snw&pwtT+g`84u=wi|@$JtMxYa(&5B`HM z8VZlr2)lO-A+UolYK7k+zzKsp+*1)O zY4Qj`rNGkHq>?w@cNgR}Y^70|)A&2a7 zgd??H5m@%!H&iOwuLkJ|W^Zgr7~NMAcvw?E6-PW~>I#8i?)F;=eDBdG8Wz4}t$c^W zmoVJWsU%+b*+jtKJDh+O_So1GiNgom=vbKRuXKsDI zJvxq9r%snOLh?I}V1?pwKGqT3zxE+PW#32N!3xFIucs;zc3L2q@gPbT z2ph|e5%}hqTPl_O%?|~FN1p3oQknSU_pm|F_h$|@EfF(pYL*zBewVFko4eIU!O;qtw~l8d?;IO5*8<0gW|os{nl zUVL;e6&@b5J$&U0rvsvCWWeLBNso)5H z(D7-5khFM%Kyc%u=Nh57{A`m@@c)-WMQN|)$oZW-oF~2YSe7i~yo#Gy@Ed)pu$(Pl zn^Yn)e})y#ysz<1L1oXufhr-fz5F2JxpnL&79P7hM~;kgEd-SV&3%ub;%(s&;3h)s zzPrHV^t}`E?J+chZ>ot`Y0t67Oh@pYWiE~2s4^Z_DBeBasR))5)0)5&K8V(-WUPM! zRv4vj^S!Fx6Qfir)`%Je?ku-nqmtkKrAbKIZ3qO9obn+R?!0x~Ve`;HT0IX-{WjIiLKb!I|K1D{l0XC1LH)CY8*Y zL9!&jXrWRmbqy!5+*4HyDkBB<;;)?Q*_6J#G+oG;XUSc*2Z%3YC(h_f0C%lT$P*TeD&nf}_JES&Va? zRVs-czk(GGw>6KW!uNIZXjqtK@G=5-uc<{N=KeNDBFWiF@xwiP{%mFvQtx&UgqZ4u zu)+xwtsb3_sx+6S$oEww>|{InZeiYY@2a%t@Yf!>Cv}1k?&b$+#ER0-%RM_guhn1^ z{Qbr4l?oxdaT^uE^1lr*2xSW^3Iq?m8zd2Xr<{R>1$z%l9D8|Hp^}pOgG%uHu~Nb@ zZmR^}R7uAX_rGyN5aQY_C$OW>b|_ew`&b^VfarE_s|cR5;D|{jx!faz5b;A|jZ0RvhA?)hYSVyqno=l~ZbbJ$mg;W}6Qi(n%-$3S?(MZDrKj&zy zN~3+QF|b0(s_?x@$WIN|2;t^niS$3BAi(S6dc!LSxlh7O1WPJ@OCjh_eQ#H2%;&N= z$GlW&lr%by3J;091p$sKToWJ&)_%2h1V5DVmPrMEe7;7di0#p-h$+6?%3nKDp;6?X zT$7+LzN-_$OSV&Cu5Wi5SeWPA<0^s|=^29HT`-FPzv8I6M0A&@auo5jy6T5V@r4rz zT>t;8;{_AG)M!+)_#*|uUG*#Z@cwpv;a?W1goDE@ zf{=QSz?X~lxd`um4fg5#|`6Tu2^w$iACeKb-hY^hp9 zme|g}8&oVSTd4>Z@KsYP%wqA=vG9VaE?5CM8TT~8>IvWJ2o^P?*dT1J{G-z30coz1=!yEO=5AicTFtJ z`@kj;d}mX;LS@zHlO~mY-F$akk+#BqFv_%!R_$f7wNbB z6fAse?0thqwi&)x-eyUF0Ot`!TNDI8GVxsk+uPdrP;Dzq` zIw9lYUV{*D;(I|z>L~9@W<;0x%F7@VM=UN#@nOSljmp^dT@(aAdZ@Wd$jN>PD{M}i zvc{y6y?qrGzUzFbpyIi?TSG7desU6_s9{Z&kX&nlf#4a}_YjzW;sp&0vtC$9;Az7y z2`v1;fEZmV%U?5oO!0)KA zjHh=LEZiC(->cmD`)xsG`|V8u>34HLnRDB}s- z`q5xnvdZs(35>-4-xY%E)&m2<^A-oGfd9R2>fTL$KV6sdc-_<$UjFC0sT%~mZt9K$ zxXQ2Zd!zFlTj4}-%9KZq32ejiJe`Vd!chgmBCI=9Dy8k#$dVs?#lXUL-DoNZqFGM` z!CeXUWXWk&5dswZs5?5L$a_mgu-&z)YlNh}cV+37UjzX*?{Dd664KJ9s)UpQH4Ov{ z`eQe&fUK#dI>AVoBoI7ja4Eglbg?JhE6m?s)dx&N_|!-S11pZQ3UHq`q+w zCUCg-=^rM+`gE#>fZy3v1}ltWw?9<~@eySzVRzDT9l?{6PYFWKxb7-~oyxCa5>lV1 z>Ilv@pe&;Nk*a%o*WHYXqguLt9HG-Jg1y(pu;!mbZm}tFEVAh5G1QzD( zJ=`Q%lYE~sW}i(^sl<-xZyuZF_up*rh@ZJ}KkXZc-Sm6~b zsMk^@WGwp3K(M4M=LmfBlTT!c**8w5k<*o?5o`z>W_-se|As-xp}|q~BJ_(V<`Jt2pA0F%tIhyu zV6{Q;Ozf>9SjYuk5R3~;34G+TDiB~)RJoE$I9Rnnmi@n-kwu)oqT`6?71x$OJe)nArcAUMG~HAw@p7heBz}RI)d+?c!R())8zfd zBTpU>Gz$G>fr4OV^}p5$aXC@4L>zB#VBrzhU+RS5$hQdWP-d`(g~eVzBM|T{E5$k? zuWzwRNGUsDB3S4h8x^)CK;EY;eS2d;Bd6a^iA{W-P9?1C6E*^LvOLHZR2;j0 z&R4D_!uznoo>gso%VL`~Nu`qVXJ3Qh+B-@RGM5}A zu=tzDH7qRqP7;Af7w)6;V5^989Kq^?yVrWrDb_R z2>Co-BJFhp2(Y=Z@-d0*1Iu+R+#AtC5RyJlk;Q%HsY)gFJDfEUeA3Rru;K|rIO-P98Y@TW3ItURT0u>+n7e)#CXEh>VAgm8^Yuo*3=r0~TC zmE64Zu;M!=eW6Yz>fQYY6?d^4Rya?|&lVNIBCFLi5PW6rhOh$irVb~txmEraSlFSS zJ5<7)sy$$Zvj3|Z8iMDyexVW$YIO;$$3+JO*prm!5QLCt0R)~E(O<>FXLovTAeimJ zMnTwHZ>UCCKVqmXt2Um}vG4``@4^b$-L^UvRvfsRz*7RQYBUO;Udcc(>mOTmg3U5a zVn<9lfdzj2-9eKO_JhqpuoW$Qk8$^=uOUEjo(z=8*wIkI!h>!k>Ik-@^CpS?rR^lP zy@-Jc>U4Du@2aR;grkDS#D5 z1v{DuLh*u?I$>?=L|I~fS!+^p-N;i3M_ls-!T#@MSmCxZDle49c$hLyQ1Q-~XHbbL3sR}<{QuuAw7a+O@nfm|mrf&h=Np1h{G=wV zc*6Y7CSl)%Njiet-p*I3*wYIo(l(7Yv2f4D0fLY=;9C{J;ywEnf^}JMo#3=y)(8d7 zUn&Tm>}{zLBF^4|6^_dM^`cJ2bv@i5tp4K|6_!%8TcxtC_4`!#whL1rzJun239ERTX6-HkFOA?#XLkQfpDB7fv zW9N@@lo2*r!V)@DVqe8`0tD}uz9JYP!8zZtJ%;k%Q!!-{*}YH1)? z(gXP(<9kBS(1?YW)Y5UpOCx?Fu<+#`lZt3%hZRN%6?Fm}?t7v>xVNo>Bj)&Fg@kuu zeH9B2T)fFZu+{7fjf&mnuM)WZO#<8Uupb22(~bpsl_)T zK=E(*uPkxTeD7XQg?<{1yqgEX3Wx7GQB4rSS1vOUY-5|2umXy^$p<8hA909AJkwfV z;E3DmT+t9L?Dh$jig9F{PQ^0tS3%h2ysr@g-}pe5xbiU&;PAtIw}ki7AeBn+hTjP+ z(Kg?pvVW%Uz6ftThDPvJt0QT|Lh{lD?qR8?=V=7nYC(lZmn}B2@aWNTu)>~At#9j8 za)y7X5j@e&WQo4+f&hDVbr`51;4g8e7*uQl#|Yffql!YsyYUKv$Bt|!Wch5oN|^fB zZCK&(j4!W9*uQvcU}5PzL`Cp@^?!pEN=lwhA$X^3)ete@$sKV7f#c-_<+UjFC0sSgCa zZu$@h@D&HOXVICMdtGfj6FlmhXPF2V+OCVBk{x_bqvD)Zhrq@4B`TF;{v`szQ|?|R zu+riR5TMxCwbKwx__dZLpwstM`023TI*#~}ahX(D`lT`mP%`^mrUHKt>{O|wFCPXg zjH3S-Wg?i(Xsrp@y zSz4He;I`#2B#cRg1{V0k;U6lYxJjBIxH`V85OPo5lO@l3OQTX)?kTKro`3-@R0Ip- z^GrfU=v9s2=^r5BI5JMh!bd#&R~D=9a5m}2Q!0GOoX3LpL|pvDBt%zyLnAD?)=Xl> z?T!%OwxY)$q{2d{ejL z6gc9mS3i`aVDCEwZtt8*BNnyNL*TJHmifVdL;1qzf5}m*9-(4^?^z!pk;a1vJmk3- zCa~FBX}?K0>N!t^1<(6i$HKxVot5w&wyIe8VaGSH0yZD|LL(#xTLi&XF3>cU)o5rymT~2!+*tmPojCN~N-^;h(U=O(aL|*9ewo7pbtt&2WXo z|BtHs4v(tZ8aNz8lp@kWLEr!u6hx$op!-lnl-`@*p?9RW1lWWWT1fBhq|KyfS{e!2 zn<^rRNEgt9sDOY1qICGyT6^yEeBM7;@AF%GPLj!F7$7$mT#DxiQJkkqLcuFPC@i&Y zA~2ixkM|<*@8)m>Zk5019Ztv{GTk7={8C{Nl5@NdB^k3c0)!twijRDI8bAv%3$iM9H&uv|(gTGk0*25rF7Qd_`gxPbPNhK+6p`_w^ z^#G?*`qmHyPq!-s;rV8@jw|>%`oRjDwjNM$p8Zhbie;X>V<1FQz&`{wrB|H9!fdaq z&llU)yPQ^{eC{Gz3HQ6na0Jd2ztT^Y;a?;4$65r(Un5|`;mp9roRD5;HG#z*8wUZd z95N%=K!{RL8%_vYAEO~y{G3o#qWk|YsT92QgF%pQT;+tqmktp`)vRX*l>h&_>HTiK z=;sjhu8yyp`oORMdEN981bp4}F)rXW{oq=3C04w8w1g{t$`=2+(IkYosAC~S?C1-e zN>~O#a4sW#$;DqcC zKCuV^-CHXZp7;v_-qT;4C5W_P{R}K(`iQrvu-(Jo<5X;2o)`$0viDP%0N1>_5+OF9 zQFn`ovrd^*a^4;c6IPMUe>4c|KWxMadAEMB5Ul9s8{1VLhjQNPAKTM z%|M9tMutWxZ1V*tl#QyA2)6%GKPs&7)_7HB|1(0zm2hy6N$|Ylt07p~YfW@20Y_hh z31@bSlQ+pUF?R_4s}Izeu8m;~F{8>*BxX=PC< zo^V_eDjPK=h-sS>Oe%hxKhz27y&o&&P4MAV(%RRcB7!Ragn)O;(z6PQ=g)C0B5=Yy ziD2sw_*zuV{?`a>+(IX(vU<1;CY(vT8m|*(m+Vu>7}gj9TxaL-3{?u7d~IT3JEFdY z2?&~0(;#?icT{D2{APue{y%V9ITq&=glF;VCKlldjnfb;V%RW?%Cah7oyyKyA5meh zy3GtK$>vp?m2|jdQ7IUnMTKR) zbB1FPiHCJnR=t}*g_Y*0uL7}t?K%r~@Dlhf_53G7L;dNnNdKz7MyrhCKP3X5m^WBd zmK4u}3B~VmFP(}#WH=RO^F6Ln;X^N42;s6_FbOjLkVfz?m}VhZ%r|f8gpz^=8bbKr zn`;r0TBt|3Nc&BFT?l(8^&yMEf`**VL`-aBAegi9T2=VSP>DsX*!z=-V5Qf7<%G~? z*G+=|fwNRZ-ri~&7Ge8aJu=0bCtW2LmbGRpLAX+qbSxt8!AT9l<`97zTFI%)K_v@=xQ-d@e3rnt7 zjUfCR*5OoKKkcT%w(s!1iGt^IRhc#M9znRK#VC{w_{H?W>l7{%Fae&A8d(St-e2le z^0$rT1Y4vo5u&ihBArU^*Xk*bW%rFYsgyl#PY_|!`*@Bh{2VrLEBE7Ij$p-sH>EHCO2mMpk`V5i4HH&NM)%YSyF?>N zaOAHiu-uP!=~POB1Sc%&^@k+5`y7V}Zz3-|Oecsstraq|zJmZ)-m>PNMJULM;Ru!$ z5-6!;e^a3oHs5Xl6IK~-=@ucq>m3at$``iRsf4Zkg&^F+e}w>t)7p-a2;n%kkyDXk zEfqF*MI#8Xa@}TBMDaTdI2N}3$}^a-nz!iyf!UvHtzlsc#?DfuptL}zlJjUaLF8Gj z3@UQMY?F|F`!q+0v=&zkLf*Y48lj-^b(pZq8aS3C*bXsQ5;mJ9K+5AZ!4>5oQYtCy8~cC$v*cNC!|j3CkaJE zdMd<>t<X%k(gRz%adtXlOUKv^|xkxt0@s*@xH&Hq;;#P;iKAcV81kQ3q$owpDy z=F)6c(x!P2m%L`e23A>HodzMUXon<3PFrFUVxFAf2(h5nEJ<**RF7y;I$V9EZ2!Gi zbX>8t^G`KGRA2{~a4T2bADmFycD6*Y-8WAV;J=lsK24%>)*S;^BCGlcm~h7Z(+3*i zn|`K=5b1?~P!TrkA1W;Vl>~_^wrgY+C!`t2R4MhO8&q72GGW4*GM{@oA^zb~ju3te z$|V&?c2k{@+oO*~$Qd6j5yH0ZFPL!ijM$Gg!oq(4yAQiYTUf;MC3_?xF~o~C&#RlW zmFthwitVUzSI09fF-JXbu~;AP{bSqrlSQkDbHA7bvwoC@5UHd0a4N+u!ePSAbK=)( zgp|_Vs^pE@&9Mmg|Gs&xc+ep#ENAL79ak*%gQHZ$=KKB-pk!{UM}^t1hU-{FiqqFZ zu*#4ym;ke@pF!BN!etVYev8l$qH0E40;@b!M`B^FW3^3$i0V5-qf#&^Pp6VnF+r+w z>?TY&?DG>x?l%4Xka3$=UFX#k*qA^T3oIB!lHEbun|!gM`&1tzxG6}vUb0!Q;FQ#!XV7>_gDy)dC?;YS)X3ygzQr9 zV{DYX4gs!{^TG{aoCjSn z;c&)9OQ#as^*Vv=c6U-pzk5L9icNm}2TXu?UtNc7?>Jtq=Dq%jhAUzBdB6!9&xBbB z7UKPha?F<7Ued~0s|+R_F03|-BiNkf_bfv6hBy-;{2E@ARPt)?*9mENewT!}Pkk&x zl6@pWIF1i8sl?RT#Sx;ke2zuPdVM~D89!H3C1d;&saApG)v7YJr-C_PfQc&>v*$C8 z5VjEYc^B?>M|CQN3r@p?Gx_hiT1gq+%zH(V!jyfZp&-v0yl+0ZRN8oViF<(w_ ze)u63mNlxoK_#?NcU9sX(R0VG$+Y#+!s(WV)qvWQPiN5LQK6U zCa#2Q$Z(i&Cb!!+I>B=yPL-Uqn|E85r zW$Ka*8bXu>UE@@?@9zy0-@{ga6IgNQwUSEC#v&cT_NBGvRHkLG(+G~~Ws=|uIR+EX zB>3#nshC}Z2`t}dGXz+rzF$oeJeQ9uxb6Kcan{q!Qk1mPOe1d0m)rtAcf%Ibr?#Z6$(5Hk$(zkmbL^ zM2H3Rz4x^3hgh9fnZ0{)f<5^hOgOX1v)mwzIq|$I&9e3?g!Dd4V6%fu6-q1eI0*h6 z+b&2)u#~jh3bxQr7L^@+>roMN8hY<2_xKH}EN$w~>C6`mKY{gm6R_c7tcehn zjiwre)H+i%1bp}8e3MG>+E{~-on4O;oSCr%7E`obVqr4mDM9$pDKxPNN2_?4u-d%s znNBD_+1Di42OU-=ZA_6tr6l{lMc6fKqK*(DKL1K8Sxe?wgxtb-Rf=kM=Tx%8$9$g4_+r`l}$%5?QIPvl!Oysa)P7#QjM_l*#?+!X3Or66(T2w=~P@D zo+F4{zY7rHjA{Q@BNWycq$5PZ{L2L9dSSeRySSOe6^lHkn}mQwKaLQdiEqOMl>KqV zLcqV_UXlnAF{THnlAFHBBxF50029unb~vIF!o>hiaKCq4CxrhTWD+L4`3)5jQ(Ij} zICh;iXtnR0_ft^y&OwPqM4Y&5BG{&&Ih;zy_fH5ctib>U``cl#fy29({6R&Owb(DQ zu=v;a7=*w{O<_XWQn%bBl=(!dk{Da1Qwh6%+8`A8rfLXLHta*4;4q)6;+yhBVqpQ_ z&*uo?;jK(6Swm`T1b4)Kju3%+7Aq{&JRbgqZbrHcUWy&LN3lu?u3U zF!x!zP9^ip`zAsZ`n7`zNNg2h5H{EsTZF>64U({AvkN9%$M;ryli>cQuOvin8DSCT zd_P+w>jBDvW&l1kQq&#ADqAJiv~6)yRnRwC!44HljeWq%#w z2(~n;z$66rsYOME-2B|2Vz&BCp|H-I78dwdC-t?%>~)?%fZ}d&nj=``bak(a%Asz9 zR@=L;qLuJ_YnwvR&=}ajtx~GaP+=vjR#Acf)M}}TE0*_jEej!%-&`gMrNg%CgtRkl zECeguev%4v9hoh$h`h5~G{Q354k|3S`vZ=JrJsG9iiqf^sp2S`rqil;%v!a|&SVha zI_VY76beszpK?X5B91GT)6)9^?phXMVG+4;w`nD^uB=zZ?A9ALu!_n(sF2unrNqKg z{=P?rBlgkl<&UI5%4WbPE}lMovOq&|J%ZqaHO866-%EMp;iUc zKa#j&_Fbb1!WQwPhDAia(840bwVnVIO3|Rkl8|yRN0m)q-lxLM+C5BKIbMH*BiPyz z<0X~+zQ;8xg(3MmmAu_UIF&u;F2IB*B&08< z!t#4b6AKHwy-r66bI%D*C1v3?NeKU}iG~odZtqut=R!+PEBEd)g@W`)5{oF`pAGXr zubaAh|NnHKR>#*(gW%Wyyl(mo0={ng92fAhHg0F(l~~1HQzAr+BbC5{bN8539L}{m zg5`=f1hJ=QEeKHdoZD<7gc&zUsxs62MCk1EP^VHk>ZXMdwy*tR0`@fzSJ*k#`xH`` z|D7ti1KV;sV{7VtBs#v|Wl*v2+)7{(54$SFttmHg#S*JpsuD82k47c^xmK#UN9kPRO~og(Fz$nm<%Y?|0tBBFYaW za6;ip4}rPbBq>x4&M;|}9sVm!IGlOXmkNu{yTY+BS^BC@a8J(H2(F4?RUDhgaw@wM zKcxcyf|I0HbNsg|IBa2-4_+s)W)&wC{pF_+uyBq^CFcAW8bXAx9n7f&G+3_6l8&)d zMC^72Ni#M?_yGPxb z%$)bPjzz3kG@8J~$3YScEBN*<6~WD+7M0{9TO~r2d_2~mvVWOHg%!8>1_G?I%Y`bo z#?h)oXf7RBEWOPmjgTq&!-T`TtRP7!X@5vZutEKPfeBc9$=5)LoJpGrthmmnoXYgn zaRiomI$L64Rb%@R;2%NM$0hQb&$MW@eyI1U+CE6VtHSep6>Q*E8I9YkGbJ@&kyMQ1 z)nURa>-0*4P#Kb{5ZEDIr?TMlPc_1hmpfAt8GVmJfLjGjxTEmJw+$o~5zyv}fnb@d z*T4jrf4<8Jd5=SNgxL13DK$pfMwG;p&@h5K6vl0TW7)W0HnoId>oGR8|f7ic={+IM*N) z-2Y2Qh!F?Al~lq8tmjm+=l%#2Zl0D_!=jSkte>tBeMMn|-&BiA%n#p5f_-UYm~bn1 zovS(_;J2?dg0u4=6Co1fAHW2ZEZZOzg7L{LG?Nj@C~ncnY3M zgh-ljo>R%3(9a?`MxIuvTycURGG{jCw2Iv@P8D~u`m$m<{J2i5{29IkQ4wClz#^P? zlO-WzQ$tnkAGOl4z<(WTrHK%+eSasgME7kC3(J3D08GG)5wj&ixcB5(gvv3OV8W_o z)%yhDUhSh(i418e5yDmdx+->kf`a>}Knqtazq5Mkh93)AL@TlL$3v1<8OhTPLf1`U zszhDts!_?WH_RmD?x?U3qU^aWgD`Tt`sBj@4bywrvFwaatB~ErFyW2v3mt3_l0GYt z2$A-<8BDy+rVpvGn4mP1itSzXaj}9MeK;2Q-Ju>#KyI&cjgVK6$Pps5=Z`v-s_IQ) z!kL`dN{JAKEsjzV?iIrfD)u4WbcGjRmI#*J`(up|{o|J~;Z`NyzrYf)&nBx?(AAMT ztrBh<7J?Ob`B4(&x6L#{N$z1PV%POx2>*HA)VXs{`u?WD@PxE}*%0{kKd+mHLcrHe z!*Bsl=Pl1zZ~^!W&t9Q;C3rfYm!(Qb;IEuY=HKNeg4x3tSycAKcZCUMZ$I_u5Xsv2 z-jaV`$CcPMd7dg2S6;BFq;C&4315HGMG}JMo`MP2$yw1*rxNkcdV>(2d|XrISX+w_ zlap;ASnios3K_rsZBhv?T453Tx~EG5&p)S1;jwlG7BQo*_cNC6KadLB+`)TKCl#q% ziR5E#I38xZ-#kEPMApMu7M1XO*)U<1->V5hOh4=WB!nJx7`PIJ3y!JP!evPc5x<<4 zw936ulOtH}@I^WyqNk>hPzm{iU5!v=7l28_Mf+N`8@2cqp z*RBq#j10?#fbYhA42VA8NCYd5nPE{`db~bNSe4hPtrIfNG_Vk??5ihK*uDV<$0E{C z{V56A^ZLMqGb#PP(Fs*=_BRM-Srdiw&X+AJ?(=7LLIsb63D*gmvx&eK2T#CYETpm?yPrVN$`=a)6Be>3V|Kry@aH)=Y^h}P|_{MK#0scZ%8Vc5eo>SXv<{?_^v+Kq!FA``CCJ6o- zZrVKq!GcHqB?(z)gidf;;V|LM+7X2csUNJ9R5JGcu8@CLed5@vBexA&g|`_66F=m_ zWvWE)ZbM+3drjrEDh-W+31`wj3D*%~)U;58;B4O%CY0PgFG~dTed#I{mcHaVL6rP( zSi!Z?tq`2nTL;01{DwbAh=ldyVM58PUuF@qh96Ui-Sfnt5_j_kLAV0FzcYt6_1>!$ zfdzC}lnkp>XO=H5A+QA*oum)GiF!ZlFyT!&hxO$MvCt>qpknWQpCH2hd~__r(eoWi zC{1{szzRq22hRgz#&oMs?ILFb1s;jq24_e(hUruR#D_f_>7 z6cJ4xS#&1#k@vIgoPScI;wo<;38gbEm~cTimz+@YQV&T;U%5^v6m76c1j`&BtRqBZ zz;gy+?SLT`f~{W}EU5(6zDz}w$z?hfr{`+|D|~B=L8a)oSuo)`0lQySD7*2wj)gfk zJyj?jKT{#2_Zu8nBBg$np8r-yI^+jCXjd7|*)IfKf+6-Q_#O6Fg+s8kH~e$AQdhC+aw zA3XiMLhkHE1{UV{-@lgUcCf2e^xXrr5z5fu)0O7 zl(AePwt2ida!V$d~I>V!qDfg!Dl}B!W5He{2x8fBu3*h#9Mf z=?E58cH1J@7MxH;KYrK1B68N=kc83`=Lu}@nCBqCt@1mBtFl!V5QJ-|kB%!*Tu}-W z&g@$CvPC8FbPOj{&icY2B=lMW6V4Pr?jQ*VD^3xFJx=`=ByvuA-}&Sl>Un~R%Rh2D zoVK>7MX2cahCy&|e<}%OonO}xBC!9L1jf^cSy)*1lQRm1)m;#vIIf~ za9k4B4th~Xh{QXIs>J_1pCICzwKIHh6?gj`n1I-ZLv+HlmSqMZ_+B$AEb5(o5a3K` zZWw`OzM?)r7T(RKR*}YI9nUb&eFx!gL z1{StvZheaozIB!)xc2@86IQmWh6X~!zW=*LrSfo3n6S!Pnqd(9Q*tdrSl5;?;qdN+ zpA9Nv%%76rN)j9)vWFZqsF->CBo$lcE{lq5$|9Xm{^FYwA@;?%6-xcLb1W>g;IK}J zKNVyk#EM_)5ZJDR$(+j0dDSF>1s7el2xUG82*P#eh{Pfa-;aX{h>3ldz%pBBODd&z z4_gT4_+ytw$mz965@wGWV<1Gt@P9a!(x1HVVc5DYrdqWz6!^D)=u|R~BobKomUEnn zZDe}`!M42ltt8BtnP?GgOT70_LfgA)6}q8?jw_KL*Nlp&yg%BYGWFNy9KrJX{B02& z7kZiqvB=tM5HdeGCJE*b#V}!&c(e^iu$bU6l1j`={xG4q8v2@qmFJUmg5TPC7NMfv z8BPcpxZEHFZwb&5!VwZ`5u#piVj`G%wuvNUU28~yZ?9ALm~hQdw_*#~2kK1PuZ8MN zNaj}VgEzPP7FvXiwMSt>33+3lBqa3dPY?y)Md(y^F3dF$Vt4Fwl29^lJtu664A%%j zhr%R+Ej~R#!PzxgVdot6vWumk78afnsaLP+1kdB8l28(<9xcof-HKyjrT#fOVeQ7I zl91tOt&n!^76iCX^aoQ_an#*sU}3q7Vil@ter#b8NpqP*u$boC3@Xm^n_)t6{C#kHSJwqY%qh|&dVa8t83FU(a zNrGqZO%1_HM<24NIGU-C6n*l7uC$ zGgMf{)J+8V{{ytuLGV8Raf-mwX3f>Gu&}R38VIq=Gg(pz_x)0%QW~>Xr{eOvMG&rU ziY1l(&L=S8R?!J_EP`uqCQK-v#8Mr>HoxvsCCWHUVD_GUIjxe<{;o>?JKyS56253- zA%t_HO_g1}J3)Z!WW20C%OZR=qm^*YmmF83&~wlr*fJ6cEOzKSI+dsg7dfG8-9i-DGOIDZQmEe0W^B!na)_P7#Dg|fT5?Fpout{Zqhu2`j zJG(DET&H5|cvYh!Qxm;qj(VDb*H(EJuBuKxA3_j^zWab<5gGHZ=m=I2{SrYG_$)QB zi0td@RoUEWqe&$-{sI-2)u)4kZRen$-|&bhZN zLdyIZI)a5?|JtOI_DxStrL5~MgOIlP4orCKVUyELDzTx(7QyUStRcjNS_i3!oXig; zmC9A0Xb86VTn0@10Hdc6#O#WH4J^XZcZWsDe{h#0SVgTK29>b5b2?$yS3?!j9@nz4 zFz5ZxIAL#}I1?c<pA1kap0!x_!7Im?y9|WbG~tLzC1JzIoQnUA7F0w?w!ULgAxhdt7zB66MpRgKMJPs$mIQaiLRDQWn{*(XRg`B1gBN z!b%GxITrZc;5$j!6zctI+P-fG1X!8P@^u6YyBWi�9H%Eqt|3k!>$vqqJ~Arnn1 znX?X45nt^6l8VS`T&{|I_zo2o{^bXn58iz9$+rwbvF8&VAx5YEpX31unprLnFL30xP}nP&s{gDY!6ss5sJsQHVO8MH+4d2vlbRYq}))?S|aVO z-c(pr)m??WflnlzaXvn$D|F4V2*LdVO$4*axiH~6QAeNC5iIXqFO871e1k&r2QL{^ z;zwST2;rW+K%-)--g}g!5Kwn1IkePfY|1I@w#Nl0CQ_CKSiP`;rhfxtU3D zU-`~Lh{V?48H7TgN|;bQ3!DMMq2$5g&3yX?t#;+Q|(f4_d5T$*;Q*cbGR0xmw$fT7s zxDHHs4>MmMZ%|np@S;W~ysU>p+=y2UDx1m{5JW|zLJNy1UgkaHy3xc`Wxx`caKY8d zjX9N)?8_FF+`z2{K}=7RgyaQ=jt~iR2Eznog|@X2EU8YpPG!@ew>g!VKF>=+!SDu# z!rLF{2vM~-UzG)&r*SI9RcQp4SgO`W@_pF=RdI=*h20Kfj{b<;!$__}ElF5s=L@&4xTOsQ?sC1X1M zX(3p8L-kpOAFA3E0+fulM` z;;cnDwBr&?I2^WcvQBXAw`m9wuyl+LrZG=s1*CBCp9~3sj%P$b^JN5PT=z4nI6w5>&+f`Xj)iUQW59&N z+jrcP2$qq1(INyFaE=i1nk5M_f8MtURlg_b2qrIj?+wS~9-LOeJC93(Gjx(hC>Z#X zj$ox#dkKO^zGq<(Ws7X8xQFbA0B1ab6D>m3_ND}p*!(&KIGizMt&U)ETVtuPvN}^G z73Z;o8ll90kU_{h%2cWB-%?@`=_l%Q!iK9os4!>ULK6$i|8N0JK&JO6XTg7B_q0wW z;QEi8z$d*xMa;W7Oj6l&HXkNjc~)j!oe;C+N0YF%{RBx!T=kYk2=@M1HZf!FuR4{O zdG8UJtw)%Jg%#V{Q4z+nfl?Lcc#V+MZXQf{TZu09FlO$XOF5O2;0rn-c}XHnxK4V5 zbV*p3vd1JWbcN{z_aX1+BExTz#3I7OiwI0^lN<}ny3kc4`1Wcd3F!rzj)4C@)Fgw7 z{HNR`xGvK>OTjMnXE6$jtQ?X@UHxX?0rH+zN z?%Q7>CwD3YxYe4MixeCS5)3Lii#F;A_WJiGOhCc({yGBwHhGgIIE#v5LP@N1*g~+v zE=@Hm+c(uP5zOVjrV|{8vp6APe^Z#ST7GW=72$s4caw_QbGwERS)ZuSmniHJr%GJi zwg#=Dp4O8Dv*%(0^JKN)SlG6-Efyi`t2-J(WPDa;5M1M0n1u2RzrlpV8FSMl!T$Rv z212BCe2&1f_X`~hb2exL6IRaWmRVG?me1w{`_)vKaHit!ARQs>KeQyUtj{N^V%w8r z;EK7D$Ea0FvkfK|;d#HCg43s5QnA(U025ZOu4}0fDaxTR|K0<&O8cU#4hjAM z*GGMtL}~3mIhFFW3t_?=b$84(sboZYKZ>>5C5=kij!KST8QF`euvkeZ|?Z`vPrAtuIgbUg2t?qRPqOgE7-S(SX3PS zx^jYj{R|T!Qr6FvRCcepqfj{P89|s$X2S-~6!29F(PzCc)^g0Q7Oq&9-=8`m=HcfA zQ6;WhR92om4inCpx55ZwJ5T0R9OGtCVSDyuODZLMk8*@4b-at^|G#eP=KcPr$<^_7 z(--jTe_l6Dfq<`@rs4vA3d7=W;P&ul?Pr$|gt^mKqvHEPUycxkZ^glcGqJffO)AB6 zj%id1o~<&dn76)GMU)0XfLo=l`$U!UigZb3r>8_Gcw{FN!D64Zr@{)>v?Pe&SB&7k@Zqzg=qVB2yo@xp>~}RxmlM8QU1$)n1J~APIAI~ z4GfrY*!Axdju85~=2S#lw|*KHmUiqmCzM|O8zz*ZgD*=$mRZvvX=?e?K z9A95-VG$uOsrL~6(k)1p;)pf`wkfW$j%Qey+hZU^)Z|90u`t)kz6u)`omQ)e zHZiIcx5+bn@Jw>)Qj-vMN3F!%DQh6W1znr`3|dv{U+V<-#G0Es6=tL#gblvY`~?PK zyJw$QdTK}1jVCIi6E7)7yvZ&;JRZW$WgGDA5_!)DDR7vC? zYgD2RcwoZK<5K>RRPuU^r6O{^y>C&;uG>hVgtbzvr%Gnbc2(@XayYI; za`jxD;QH}LNhnSq0TXT&zBh&w(rle{ghJ=Tql51Wi2mpY#+0+^T5w8H3=QqwYgt z=G8N?u#$k6ELz!Sd*8$GNzZGvO8ji7S|!!04FRuHF;Nl<4xiBwth6M?pi*c%sj%$@ z^{g(O)6_$P`G29lghkjpQ5+95cSV*&2=|FMbt?Jo)nkn1rwp@b75?5UoL0Gc-4#4L zwwqMUydye7*q-}R5?s@d!i3`ZTs;FY+oQ$?mBd;5bp*@FJEjp5Uwe}yMB+!G3ibI%qOXxK3F78x|G!i;WeM&i7N;aOs4^ zm56)Wp#YrWWcZgdEGP(0={mVjtls0d|N(UiJ6nP z=x`A?8QwS3(Fo9Wgx_^fBvwjl<(Lhsbn|J*Qq%F*rrkOYzyL4 zN-7#CM7(-TViDrKA7BC;m(at=g}zio%*OXsnfml3ffc{p zMy(?MDK;U&z2R6yh1tKn1p&%uw}J>Pwek~MiPEVywK7LnqryzH*nkADWs1EI0oTu2 zYUOCq1U9f*K0v*MVViGM=~!6U#GfpJzkQlS2v1m+PN;l)2Z0@|3gB4S%4Z!FY-htD zz~SBN1F48@y`!lxk2zbTRqU+#Iw4J~YZB5k%Orxu4~WwVdutEU5W@KV6ih&7&qY*N z<}wGz!aRM76oPvCn^dAJr9qJ2*Hmzx{8q;zM#nyb3AZYY9I9aR{znm5cJf%AR;gLu z$42zs>4qwu6KEx3;?x(qun(WaY32LPNyjsS`=t_C^cm&RD zUD?b+i0C1d;NQ;v7-iBbedT?FknnM+ju7^7H3`h|PpW~1E$Z|FM~G!F{3Qt)_a~VM zmQj#Eg*mRw;#9`@u7(MR&0!@vm7EUh5yeWI57VeD-R8Zc^4|X$0vs+nIz*u?U<#)a z88gm8FuQHNLU!wNiAAK>{#7CK+$@ud^*9l2W>@eYi0loeqh~k$X zNGeOawjhYmhq!@vEOF^IRb~y2qr!sxztL$GSJ9tV%Z4#8FMg-a>^@l2 zf*pJl(+L-yfgjYZX;_54=I@e_(7HfJu+rBSDx}nk;Z)LJ=n4}KM{oUFBb4k}M};le z>r}8uN{%b$+@PMU#A^EioywQbw}c5dU$*2vr($cCZxHfL@7?RzxJRRsvEngIIGpzD zSWa+W>ZK!?|Ns8&zT(xRl2#k)j)4h>o$v2e$S>NhFn#p|g^W01f#7=;|Ek3a;Tbz5 zA!E{Ii;&l&gd@a`F1010qG1h~Q0$M+SO}K+Y@|k|s7DWz5YWZ@9%gN*)UmLHYh5ft z`SArXp{#zpy@L7rD1t~x^WHyc<*Ri(BTCjxKD)GY> z5riY4$f8ozy_Jp-smGdgDy0Y7!GxP{|FnUL5RT_+N5C5VC%;~>BpXUadEkkPK6hG1(e zeW|d-sXr3Lw!jietDWv3m~bYs+X+>|R{l*8I|7$lv~o6VpisPrLx96se^;X-+&2aq zQ2zhlH@)9OeSg!8>iD{8Cj9!J*G;n^;OnN@xPX^J<&kiExTH&uvk1Abr%J-klFq95 z)jtXWJ~GqUfr{`{cBaA{BZq3ZVp+dmr4{^KWObj3z22W^#a!=q<9J3C|L?zlTe0qe zPG!`rKVZVmmtQ^1sU(#3)u}8A3{dFj*9rpMJaznQ62amJ`BGss-x#joc*lF6rJwkg z&WPyu_UN#K&(F{Y8X@d+T@oUPy#*6i5i`Hw2oZAsOH~T^UW>}o-rhI5{L>h zO*x>DUcZ|U{10BHUwh060S^x9go;|1sW6u#T$Qi-dVlLE7~Ygt!WHC#v+&ma>-Sf1 z7HlDi#M12&SEA@;?;Sp4W+QdR@nE8cE0+J-B?}=6<}KlbtasJtLhL;C5(HRn{&%U4 zU{M3VG6?y7hANZ?g>owHl(rHfrkpqf6Ao{!7^V?y&t5bLDaSAB1b3skoG@=h071n6 zy~@HOq86)LiO6OXB^DMl?01-elnJABgvgk>N)p!0%~!}T9ZF!SE#I(c6T`D=QL~d0IfrU>tB^BGmSOrH|utMSQ$ri1$ zsy(M8Sb=k-MacX%U!idDOi3l(Q%#|yW|U54>!vmeVM*0BEMmjM08ViCvNQy<5B(k{ z!1IMp5a}QOB&mel7{d`FZe(p$BAVqvfWtX@CPA1}Cu>ytt}at0;Nen>iv71BgJ5p> zOch7rISq^0W{rjk*9lqOStslb+aeLdefmXCi2gQ5Cxo4ECkb=Mbyu)|oWrp&PxHG9 zv8_Ib03|)KNR{M-XF3)8w&fb4>Re|ScxL^KS9OGN-q>al)_&cBBUswRV1r7|I=duv zesUEitcrVjA6m9^XDlkNp`#?Bq~&B2A<~Y$Xb}qQy~Gjl!%^RW3CO*$OebuA|B-=Xm9%3vi%MdrHzdJT_b-!>J!+_dV9rxBVZyDEqd)}ZjA!z^=R{YP; z5{n2Atx|AZ>!RR^djK0)#fMl1g4qtuQzh*FEe(rEZ{<`a?X^suO8h%r6e7;Il~kOo z-%&_C6b%8clf3nF9U->fx}i|A_Nax0rM~kIOjwzX<2hk-{SE{c{`_2th1r++SqKr+ zvkxcao!g}oY)w9-!qUqQDHQenP{S3={^uKlaQ->a#3DS;23iP~@}0jV1dSc9kayuc z$09cV^bt%z)QfJ3U>WNsaVoj>>nOx*8lz!hiCw2lg8k409U9u+om)L4ltR`$>LoDh&P+(3w}?eD_;@9Uie7KRL9p%bK%$jyl$EY z0be)G#|3=GhIOPX!A~qYM-X9A7bIK~R;T=7!W$_V9YJ8O$Jqvz(q`Uwt^C*ioJvvC zVu@gT7Jf(&<*gP&fFfQVqa%d<+I2}daOgdQkom))%{qvS8;ae{#xMsF9d~o%C)`y#03+f{tWyEMi_Q?}I&i{Z0r_7QXGY z2*FF#-79Q~p&Sd#?YIagoLN`n6@|EIuMt@8kvRsgSV-n%wMt&rQO6>Z7OJN`QC9CF zt>E8mt0@%NV+=a8W8I%R!8w7!gj;#?M-tes%b!_P!sE_Kf(VIK$Qt}Qfq4dHYPe$i za=uclq`vJTz;)6pKGG3v`;m#9P`YA`MTm%EXi$2VCI1k z2ymS&-vK(Iq;Vi8xNJ8ygjhfF6N8G`{GLu_^tx$O;3xH+C9s4A@52TT+p3zWRqEw7 z7L~|xH8es{ld)7-6#pCo9L@~*l8T6sAsQBzze0xzus7^(AVlc7H&w~~Gmc|{|JwH; z10fOy-I7%D{T{30eAW*FtV(OD2Q~|NHI-H@Y(O`)8t1c`;~7@8WV~9LeZ0>BVP`wh z8CE_=JxeirwKnQZXyIN9cJQ)dUm{0{l2`k}gi)DLJQk%@yaV0Wd zo}x-|m4jnpWs!jfLdYxLJHa*IrBg|oa7wMxu3ogLgii^U2v%HsfCovX9NSsJLIg z0TXWJ2tKP5%4I1>i1-EXN-Bw23oI(G&VRy$!=5qe3cCW%aV)~qxymAxKRd08eaJdV zr7%3pKrqj%w>g#UpChS=w8;B97M7Wv028hgb7nIYQMS2K!E>Xg#1-3RHM0=HCPr~W z?045-LUFv@T1T*~+ZQ+?uU$)vklODT10mAx-QrX-YAmF}+^f5pScGGip%X?=ER+bA zb!?+S*mj^TK@`mx0s#)MY%s6%)wu=s3flNQzfPIM1|bW{a}M^8_ZmiKObg z4MM@go~q<$zoJUvQ1y9dL#G~9#sBp03gx34N*{b%E4p{3!ZyG2n!?DL*=l94NLG+f z9J&v^V|Sj132)TBy(tI$=kJ@ktDi%#0A3iaU$zim9?h*j0nab#(yiOFMG)|H(_&n} ztAH^l@B;7;s!lsW?A-pVq!Q6}oQ4n%AN8PM?iU;ARQ3$CaRig?|CUtjk^Km4-?xn* zz^(G;f21Q=#mXL%O3KxrHNv3}XX%8%SB_C(js)-Lr(kA#wMy6eC^#RzW%=L*ll-28 z2^UNVswWBA3l8aoh&|r>!@tXZwKByOwQ?;xZ{ZmcS@^ap2_FPQfD*mK`-N3{X$q}G zX7fMQnbI>hlg{La4pzlKca1{kn`b4h0xMoqnA4{}1h}BBxR?{-)4iXusQO_VmCVcU z(Tcej4p0d1r9Qo4;LZo84}M(s-;Tiq?ASGwAmWzZ;8;Y#4z3f*4@e8a4tzI+6Pzpj z2x4KxaR_j@@Iik`@C;f^U}eG0bSmbMU{2W6`HDjRm1P9x>evr9aOHg?o9hUX)%GG4 zkv-ydiG?M7I@2VSH}9!RPT)ZZuqyj^nJUh&vlL3%SdJ?Z#g@W^GrqGb6pEI)3@QaJ zqa>lYY6K_rS=ABX7Zq&JCMv{x8o&l_9vS_yD!WIYu&}UkWxIPBQ8TBFsTX-laH z_q_^^g+(vtIzlXMbVecS&?N#Bn}=w$8u)x$m~c4x|ERj}@TiKff#X3GrHCL+K=4Wj z>7a-Lb3uxL^rkc~z4zWHfj~$gz1O?RrnfEW3Cx5p{1iosg5VWIiiijZ(%*B=tk3i6 zADqwgJ+r$hyUQ9NDZV2K;;83ouOeU_t%QB~2!mGZO(qFxi~rIQqI^=6MJ3Z2zzNwu zjWrR%xBX=TGtUjOu&~l4KT3oM4)Envwm5sjgtBVfAcf>NTANtd)6%JAtH78Wyql|hIe`z=f;j@14-LWKUR z?uTsmq;0ekDd)CHS`{=5(h)52)2A@uaBx+pM#a52gdjrAUm?J1LW6jTVC4l4DlBz= zo=#=u&|-qf^UqO8yPBd_n?g^RUU;e8oPIFjdWyW}m;^`mp9-57dOqFuw>rTF&dlvG ziNKsKN;NFZkvEVNqPq>!2vH-8sEC{?>b}8ZvYtp>iNb+-8lm7P%OVWg+#4pW?90AvQLm|0 z!f$VLT4i<`tRqCSTuoqkV=F8y@N<3Jb3)~uW;#Md@10~&N$2XBMC4z+tWzmo`Vb~u z%6+UVM+nE%Z*)T8k$M&(Vn$t);Jh+}BUtu`TB?|P$LUnQ?EQ@-q&_fB!i+u*2%?y+ zQz&p(mb0-X5XS=5j&gKS15QVgTQh>KP_>^TuI>yIhRK0ScEM>eN@GQ{)a3q zEMwLTn6OH2=dB@FtmhvlF-Mh;Eh87QOhD1$#uCA@r+3t-*!w(G z<)FXNsrW`7gb9c3O}xw&k#c?~M13 zkHYf%*A>EsMrgDu-?^y4Y+IYl zoUkc+4nZWw^)RTo-}JKx>3*L}gxG!TBBv6(W2Z%B(dZDEunNrlm=iLyt4Koe9(8wP zhbP^p70VlX12%A@NfiSnLX^~Za>9*! zgn;BG8e#5&o-pBXPRQ?6#J&~lsW4luraG-QcW%NFEHb#cMacg%T$Sv!Xb7;{wW7I3 za2IV-h-^{c#3CY(7Qh6=d^%Ynt9Gfx!uEZ;K%t`BDjkc6TUyBxEasgxL4;X_x?Kb_ho>TTT}$Ea7}LNhRd(_jE$(?Pi>?{?r1Pa5&_0Q|>@Ap3cD@yBA=r)yOqK92eGDr8eP-%}&??h3gxK7mtE3Wrc#uKG z-6RSotbDKE;{^HdSFRI6)SX0x_xi!2RoaE=8evDvXdS_v4gDk``O&K|p`_MoKt%)$ z?@mQH+l)}iIC_u39E%##8CLSqR)Pp~A5yD1g_9KGo?X>Ia9?d4VG{gDg-SyHixdTi zyTrgEZ2z2r3COAQl_cc-^%j8@r*5&Zu)@mbFyTz8cq|F|0qHuy+`P#oIC^;=P1Anz zd{~k{*-dBI-hH`n1g;GpelJSR_jz;2Uik=yTw?OO2v$`8bTPgFY5$Hc7Q=BDRgrL3q5(1Aoe_5 z0Rc)Dw@X4|y;df{T=0rcn9}bOL6m)e*`QJ~e7+<&hj|`N?cBi-;6}?XRB%GlkE;yA zjw)$r?oUN^0QfUld@;sQRa3y*QUCRXwyQzAt6fWa`K z1WfO#5&GAcFrlQ)`GOKi3c=?$MNu_B25>A-oTL&gw&n9OJ zi;&cRfP(q!dV;W3QSYh9E^VvRndtl5G=wl}u7wFmdDm$oSXyGBMwt8c3z)Eqjfj*~ za)vjts5sU%hY72M-tm$U5Ggpp;jS0Q%8u%k3N=Ewtshz3d`MJ7Xn;!-pQ#JLh#l#bt<;a zCt*S{%RRq8BsTcO#M1Ad2n!~xB3@r<5DEtmQAl1f2Li0N@2#my*rA0~SWZ@ZjaDJ; zkEoT;!k;A;mK!(}CS1zBaE&U-qZe^3EWP73g-HGp1SoMe1E`1`pF0XAJ+G@(=1TX)GfbZT=NPk#Qr}sjVLw2$uWG z2a=E-{GlpQ4{*Y&^yV5)$g2N~DsjWxC=~ymW#LNX-G0X;6n!~UBe>eNk_hHnJ&aSy zjk%|*(lk!Nv1o}!CH~((FW!~4Ta_%&x2IvDLCYnb**rFyBZTee#s(q!E6>{;GOQH@ zSY^$sYav)@^#Dm&ojeyNlvVRQ*OM_onp9%0v@!_WfBKXlN)o1;SVY7o9VT3=pxPvZ zkiPIGDk705P!Vb2^>thczhw_JLfYicCLz4~JcHoA@wtXzg~RWtvOMfBlS;(*zf)la z-YqOFBB|?kj({HpbV{R=@br>JC9;X=ZoB8obU*Qi7}Y#hPN z)9p;c^523~NqsWSgY++ST!}SJPe=sYIL{)8sf@5I=X9mIqxR(a#gt*D~70icsA;9&d=cp$lkx{XkR>FOLFUJ+jsuyMu-2V9z zA>zig(W!*ZIj9kA&)P}Csv$uN{+R)lsE5u>} zOgPiq-cuoR${`brh@UZ1mEHY4k1y}jw>Yj?=7Ui>Ldc*)Frn;e?=-16%f@L`+-H8& zsklexaViztM<_%s(sV2$VUL$ZD6Myrz-%p_C)L4uv7$*^P9=L|SDg^r zXpM$|9}|^qQE~k}+#sYqog)c;6Qf|lnbP^58%@l9iBn0w(a1uu%#5E@3IC>#iA5w= z1{(x3zk@~?+jIs@I2`-VZwh$>&vGh74Kh`UZ}iZ@BFf*R$LW7wH}&dD|DJALReasF z9)A7L>!uA5@O9HhT)<~+$jb&^6U)kONf5S%@v21sc|>~QjU@KJqa#?_yRTXZAyQ_+ zgi`wUMuLdHd4sDm;%$i#&d;wBSn07SoyziRD`CQ_a``ipkbK##Ay{TVb)zEjqmGZ_1h|Fl6RCgDvBA%b_ksZ&|F;HE*ybj+{_%LA(_#H378 z*im+p<4O!2;A;@JcbO#-tTg^Di%NKw(5QI(cwS(puGpYcfp29Z5n}DL=P&`que`7b z+uQzQ5EiYxuaNb+VPRqU&h}JT`pEkb;8KYn z30Zx*DXg4SrcoKU@dqkwk6Bg6!m|2%TL}1}HJwzkHz_f(u=F6$-Ou(%PlHPC$W1U| zl{+F|6~Dn>D>2CS0mKsJ%ppkdwny*|qL}29?|o zx2ux;#sH3mxyGduL}|OPbu1#c-M1EkWnTW-AOw#)V-jNATXe#{-JZ`*bnZQaO1$nX z2?fEw>j+Vt-Buy@+C>OZLW6y&u(&=`)GDK>$ifv%z1&Q#GWw1+sBC}J^LxG-{)0uu zv9`WMh*d3qBd~xEk|98eeQSfl;_Imf7Um4F=?D?l&@Bn!&x>K=ZIzu?$b8;FAz|`1 zi&mlK=QslXC6PKKDyHwDmC&!QhYeiZy)nWdBGXU#9F z1P)gBC{bkJtxD*f0!e4Y>y|>or0yIGe8;`Isw7vQGpP9f`V&l871c~o2u<52shBAT z4TOllTdGia>##!VpEEhGSl$nDFahpe%_TzYTG~*RxVpOyEG&GC=eOw4KZcuB0!B=b z1bgq}7NKBQu8t7)3yT#pC*@jHa))d)5UlLc6_^0$f>@3a1yeI6!QuITO%Z%`s!k!z-~d(!KsO;z!A(`NYfKd+m%K)}~cTX6wjK{)>fTpn)3<^K*x z2=ngiRK)y8O%&4B)-`Fhd2GBYvYO{nSp3%`Dr`(f8-@KtJkLp~qZL@izAGGd@IS`Z z0-aD=QB^~*MVmKqf;nU?OgLlzc8MgwPj;ii{GU{EDp~i{^{|ARz7h+Id9cnPWL!9G zAw)+0T!~IRj9c_vIa6BAdP zBSc!`1savq`X5Ou*{=^Y2{DJ7TL>0YxRO(GRyQS;%2kF!dJSKLN=CaD93kAleNSL3 z<{g6o7k7;1s%$tFpkomtr@|z}X8d3vSn`7ToKW%_PB_Eo2}wwQZG(yzT+cUI zRD7G>bWemoNUD6QO3BWJuz^dhl%883)bF8M#SNOT(W>yrr#c}v@2M&~j|_tV zm-0Ea(n1KQ|3Zzh@SZPBDCyn%=?Jzo{3TTiW*_8OM9~)?7=)1Y(GtOSJ$SBQU+v&j zf>-(IgoXD~VZxcbXFW}X$nF{?siapH=!DE*yM+)jy>^*|4QIQ;gpxaPw?#-jF;bOq z)<9A*mZT9_q1O=u3(H!5ofFblPSOdEe&rUSVE!_VkUV}QL43aTABDUd+e};u=h>MA zR=RRF1h~TTFU}A|cJVq%CH>VXju1BcO`WiE%}|(7_I|E<2GO1zX592(a4Xt3Jyt zrOOj4EGfT=hAURi-;jjl{=p_8{af|eVI_mgITrXfA<0r9#;M@gcE`lRvcFi!5yCO> zlB80Q*3crj7I+>GQB}N6Dk+CL7=*O;@tlxe+#e=fPx@z141~z2`-&v&Xwg?ku-#8u z!i3eD&xUa-Aqf*TLc#IrIw7{>N|6~jie)?< zODh(%vBJV4TwVuZ0F$#{LL~W5q9Rrtjg?qf;x6^!g};Aa+r%QuP8Ar0_1o5P zg8Mzs2R!$dWnp1ucYDEv!+AqG=!Enk4;4zAEaz0RKC7=G*skb1I+cv0EiHoIsjV7< zjoIB8CR|VIIWLP)_-;Q=*mqQYpjb-RpVca+%WWN3ETn!56CoT+8fsM1Ud^P!lCDiP zsKmV9n!FoECjGwQX2(g8Agb9er8YU4evDs@TAua2$f?M>30B86@ixZsYTm{#x zHwi3pS*%4X`@vcof|WL`0TZyZY%M`#JgU^Nh~zGoLhPHnA>ge)4lofcW$ag+kllNa zRJhnnA%2<5#3C|66Jf$(_lOrd!P&2dMOfeC7npD+mmQUah=gK|5IXA|fu)SBYf=fS z-IJ$!r{t_ZHXxSi*&y)9#lDp5B=2qK+rvgnNSL>@QjvbfpyEHRp2D%XP70~-WJ+AI+>rG!@g3r? zD5TDbFsOw7`_CCdSRX1Zt;ZvUlxNc7XGz7? z)$@P|j7;EI*xLCoELzzg9Mh;2zTZ?Q*sgRm5n{&2Sq7EFt*^s`OGT`Yu@J&PbR!j! zCDi*R%JjrF-SVXzgUlsWG zBLr5k`W1ykW#>&VJQExCtt6yuTwowrQt4@!fCI1ps$dWH+&7AMPf*1b-d(3N<-@KM zMC9&YR9QQzzeTI8xhFUQ{yB_6Na=BzirA4>lfdEvLUmk;o`+OgIyIZUcdd%b%(;{DrT9E0*+S zZH3a;#u0?8PJa_uBInjDRg$a(2yi&_P7PIx+Ic<**`HMLtR5w+mEZmC91{F(Ca)$I zf)!K`BM6^|LpT<(XiOD}V16zBHmKNFeWz0~(`pe!;?C6u6~D~Jk`UWrnMJU@;kid8 z{qQmbxSlBvyMYj?fBd1af5|%>3)_;US%l=24^?r$h|#eK-%O+9TMV)&agrEVBRTDqM( zg0H!}>Cy=)Kepir_zn>LU;^@|jFW_pmvxwM*w*@)i4Y+#{Y_x@7L7G5EcNAY6@o`> z(y7G9egzW_JHPeZ!}omhmO-U#b%BDj<6jn)z(%E#u&U7ruF4PII)b@3MOuWAoOet@ zR;#~Z!ZioqdMF8wdGi%q&&xF|EayoBPAD9|R$;}LzZz6B4h>Kxv)Vo?A}ar?Dp_m) z{k^*35#0-~r#x{Ntwi*vxe%ZPZCNN0!aaB~r&74885LIWJR1V6imQ9>hwg$#oJvIP zBn3z7uO${{26~>y5?1`BQ}G$r#vnw^jN=Hgz4Ez2S?2~8mE!AlB!amweqm5?*Lgri zy#HxURSH%XQel~gJdeTBua2o=e_F>2{)4Y%z5ON?5!TZ4N+I=s%?w)E4oA|8dA)=a zZp+>@SSKWj&kTeRp@SuYt&8UdLKJu>s*;=7ic@ja{MACRgZ57h!p`#Z7DD8#83Pkg zc&w_9V2NM)aw-v9ZV^~Uvs4JMig7fx2)T_razes@YB1sA&i5`FRQ9zyAPH%C4PnB{ zHXx3QaDVx&p~{uP8X!uy>>wjK1`9i?gO*?S`52G_}C0-MA zw5y>bM0B$Q7M0l>?@21T+t2D$W^OqI6V6n0d|gs;8v#0%!y;^78CkEW(!gNUb7MZtGOslR8)k<`_6k z5<16XfWxly(>a1gHSs*Ky1wzNTFrUow8WLzlTus3wd++A3p+4$jz)0hNJ)tK!1E#^ zE$D9xi%9vhwMMI=#hy=POs|_dt%^j6MQ}X5DG@9zi5tp)cLPGdMju5Hh4VZwq`TtXheC2h8;OKBptMxzcS7q8doeE1>8L3vG z-c=0P!Jp}je6Azl8(OG)FU$U|9;cQ4vt1T~<$v&k6IM0JkqEKt^Da7-wDIR*LMbqx zE7+p%T3A>}craHOT~kMh-P>zxRC3?04HM3o8SfLs!qcAnPw89?c=3R}8iBXo%n@Q$ zz#WBx*Sncmn3x)*P?YLsMtEHhZRfzvxiz0pDg9L5=G0) zVFEVQ@YV=nQ(q#mi47-1fGaF%yhA4#-+aLd>ErV(f_&ItM~K3Ya}0vZdjlto|DTVB zV9{6inN&)C{!SH_+f;Bqa?y&d9#vg>;o%IQn`%|k_Zk%uJTlS1l^9zcH-OkKKXF3L z|GHa*(A^hQNo?||P9-L|fq`I!LvO(Z*!&!-WOpi+Sj3vkXLUl*fm^D`S?f(KEaiut z7Qz0}My_z~kckjsu{A6z+v5juDt7ZnNpOY#ZV-GLs`pEz`1IDXF!xx`ebx5E4o)St z-b*H-?CDsI5SHMU2+?EkX_$blzaHv@$hXI91n*P*B!XqM8x9lBWK=YwB8q>WuaGX+ zYq(-5mAzmBLho(T2`+uFNw5$5-XJX6lg$bIq32o4UA4WWV(afDh&*Q>2yk23r@k=> zK0Q}+LRN>#k`RA4N=Gnf({D8@eD4BIC9QA^Ong&cS*%dHSeR5Q#to7Pw)%r%@hePp1&qpj}=2e|me%~~M3AY}V zyq{BX&+^=Ro$U{+RZdh-T8ZR`qjWqYTvabBIA16*b6`GfU^Q;(APvF1f8Wgsp-Gn{ zLTq&|g9&i1{L>=1+o(q_%N>5(q>|d?QlDP1^R0lZ!x(?COrfG2Y;Dw)fl!^C&Ge?v~ik9E(`H_H`4%qM|)Fy6dY;7M0A~`!qtZo?sI4S`LwRJB75@UWFrY@qqakEQBchzj9->|;uzi<5)UmLo%l_cBa!v0l z3AC{>4dngX&fQ^ z<0@6jk8WpRVZNUgS_lzS^&3egdxhsMbVaHAm?)dtTCHMhmT){HW*cJ+1dGXjT_+TM zcS0j%Xp;#dV(1%^%D%Pg$q8O*j<&rB-&OVlTq6%X#EV-d^a zgA7`^ej9C4$!r;CQOP@ZO%n3$@4$q^`yb4sB3x}2b1W>d`EHAl+Tn~&n7eKvCzMqh zRD_TF7J=EHt+!}Zl+YI@Tw(EVuPGFCUMH#8tF0g~JN(H!m9$TDbp*?)-H#J;9}g!8 zpB85!!1V;ib=D9p-FF_RvUUAGFrn-@pQaHU*-nlS&bS{fDn7LbnFx{c%_5j^*k|r% zoRFnAR7f4&!J=Y6^EOO46Z+r=N5J=WGz~(<_?*vBSd`Tss!dgDaFLXvVx~8#H_BbVG-Wb zxq@r$pE{M4mm*-o;qX<{HNvjG1v)}FjxU!4*UwEjA>v{tOgNnM*I|Q-!+V!1DXU)6 zvB0-l&yj@4`|UU(`Onob;R;ix)HMk6`~9dBN($eVgsh!yEW(cYlMMtjKdw+EVXcow z#p!#C3d_%WO~HAjom%;@*9c;BheYm$x8V?ua5%L2Tar-z(gaQ@oqRz@ zFxRv_FyTyY&IU;s7TjEwJoh~v3rlZ0L=sAZf9D7hd|@O^K;lQwR7t4k(y_4Y%jzyF z@|L`-R^Drtn6ygcwJbvN=3^2e%8%VAFkAH(U3 zU-wicuHum@sWS`>SK{5zMyr+2oI4g4mi}T7C#1Q9X5p2<`s_Cf-DoAr_&~ z-Axj{}|# z?%NhNaH$28Z*xNbyW^>digEW1D(MSnXoQl5S7GAyd~iWhSsP(+Dm!OvC$QqvFPm7H zdsr`t5YFTKEkfk84F-Zmb~*$T;N0KWBDmWh)CdJ%C71}YeduC~VC&&|n=9wUaVlBA zHP;E7KY9cc4jb9exx)S(s`x&xO<>_et|>&!9HcNJ_HA`0Zt_JP1YZH)eo~c<9Y2y( zW;`6FO2(9P1h(-?eNHRqSAXjW5tH3amBnk)sIbCyYhZ)#`GYjTL|IoeMFUv za}k_M!O29JuyP#lU?SLtPrGm`DUYA)RFa3@qrzNY|01!7Dn!k5(D)xHS6f(vxmsmv3&Hg5#Xm6G(`Li#p68rDJn2*1t9?K$e zOu9N_#?RHg@Fv#3bO0t?Pl)#*PRJTDK^0fs7CIIdR{Who*zw>i4Iwr)pAQp|)?YnR zSj6%TIufiLin#wkyIR4kLgsl4LoNMwy(ag%KX9WAi!Z`K`Vu{ z=rbG(OUm@I2(BTK24Umi%`oBcoYsvM!UKP@u&|>2qjf^uju!;6d$7O6BEnsL2`sbR zms81qTpcE?(!cvq!T04%lS<~_p&Y@?F^x4U5w{W~VSA$u1Qs~_B*(&>(Ni@-qE|rLHzsGqYER25%01;elZdEFEO0be(T;sV}jSGI=N1V54OD;*(XPZSfF zExHG%k~3|fM6kStKdW-EV`r1f!O`jg3jZh2msU*NUke+!p1fZYC4yBPuBA%c+n;hQ z;^<`c4vEOa<18#JUmVeCWga=e3E4fJl8_KGL?d|rzSlsoxWTb70g=Hri4d$`J5`bw zG}5uK(4RbSVeV%x1B>t(9&gbqecCH9;Y@gs0uvzux=!PSgl2nn1pFI7AA-nR8Z4=J zH+#kjj&W~l2(jn$!7u@VgN{o=UY#MF5O$@tDqEu0=u{kgwsHh38h2C@(%K(ZW#s!= z5MY%$C{81oNA~Lov3*@Xn1GBHA9F&5`(+KmDyO%j!V0<-LVz;?*VKnaI9D&Hl}K&W zNaBi>9?aAcBKT=fDx%DJOd)5*dD!3^RxME{9GKWmB1Ce2OPGMzU5vm&m$uQdu*#aA z`*`8k1(Hfp);tC0MbC>hnOEPyl}K3l6DLeNQBGjaYo5nk?uWiQu9!V_Jxn;f=I3q} zmGHH_6n2I!gaE6xM+Jec-}$paCE>=WI$`DGK?))DJdewm5h0vbD{9ry5G-Tt8JKWA zA--266=$%ikd?TSV-X>r8ybSSUK0pv9S1( zD>_2>9#U@@3#(PA(aQDmuQ1_E(z&}5A-)VBY*CRV8#p0tvqcc0UV9+G;q=cuS6DpA zN2gMGbucI7o2{y(B_pF32&d7=n4mR30={mwRVQS(+@j!~4erwhCcxHYj4BC!84B60UX!>Io39jb!tM`}Ov3)7H>t3diCI)w($N+c zu2{wCMG_$bt{+hdN!o8w$$cpfjmzT37JhaDofZW2BBz3 zqDctF2q(xT#A`ne>;cB`qYa^|c?SovCW10me$|8PR#;J;wP_2m5)p%a`tURVeb zJ9&>uCCf3I3Orp*qau=5s2hdvaoz!rz{MS*$(&Hy(;wNu~JBa*lvMU>IdkDeHMp6~8+#>r{$<%Y+GM%ui}lVf%XDFsa0Ey#W)h zIc3alPDmO*p1^WGy{O9WE4MUUG4IjpZDx+)o{x|Ht^TwUa)gcJ88K=_J(z$zUqeSQ zXZUmid`t2mRSvcoqR}eihm9N|Qbwgv5d{m~5(^9Mb^#`=mVe!qQ_1-vOe5?abV?Fj zo9#Lwqq9yB=2UfCtnzVZwaU!t!tspA>bSxrI0m)S2&tpCDcB3Wbu27pW=(@&oBl*1 zMCpX1oRHLOgN|Ua8R{M-?8EP9R2;$4CgH$~!IDrk*U1q=Y+a%Q{{QQy9v^-{UvCPl zim#i(;n)AXZi;|_ubU!q0iUs+Q}GJmt`z!0L%^48)bAlIt7w@?WqY8PM6lfI&2=gj zy}ySEC39Vhfe>a+9TUMS*Hq|K+?6>5=H4(;qhg+R8iYfKKQ;;Wq3`Ml_+g%xI2EVo zd%g?X#xtt8Iwrve&a9{|B_ZN^ZB^1=k5$Mx(1Rcn+Sk=V@UZUxP{GxGw8EOmVos~< zxsPGOnXs)LEQAOgnodQ8>{K6nwtweQPOI3l-UPPmN|b?x?QT*JCLlB8O@*=VgcC&e z;@314zIhgos=Fxk7ID;}D>v zY6lHM+0t;1U`Ll<)d?jV8>%vQW>1MlI2x#17tUpKEi9}syEU!Y+V&iu&!ez(N=vnJtZpx9RXh{} zTu;o7Pc_1B@5P)@{7WN?khS%xPRPEw)uMSyV_hyxSS1HFQ6LO5W5Zxfe9t3^Db3NqRS+el7X=brS5zki`ZFs!XV76eU=mE z7kED4IV+!;SXk-aWfraW{drar(pP-L5iEK1RGmt=d*_AuqteQjuXNU{6t0U z_{Z0vQvO35ju5WvEnot2S1|>9F4wTIvAw`Fhye2aoEk`TIW zzC}oV>Un&1|6c(FI2_OaFbPHb+HnL6dH<+RaO^s*5t6e%B8X7`7z>N=@92UF$n50O z367uxCW00COM*z5vENf7JXbjS;Q!zVTq@75-eo2)&y!TLkMvWkHIt^9RLrx3HA29> z102EZZ-1a*PWQa0B{Lf8xDxq~)$2GGUAxT0!nO>!0~4@os3r-k{^z+LroC=ySj48` zJq*I~(>9He?u>>BtL^h1E0lP?XOKv9CYrSJyAY`poJ%}!Sol-VJ6JTfFRj?F;=c_# z6E)5AunIp{X;Rr2lBpB&Gv6by;vRK1EUYYQA}4HK@R>o#Zna%k7=D5yL|ocw0t@+d zqKSp2IQvM#K3h0UIAg21i4*pOY_JGLb-t7c=03IEP*^*UAd2UG$+3w17j8+2C}^V- zGTzDN2$nrzoJJ*c{s#tOWa1T$V7cB~C6zSiJeY7j<%g=MvcF_D$HI!wMX6%u^wqEk z`%70XLiY1+FyTy!>s?8R`E-J&%7NBYgnfX^qT>8>J{6YS<`*4{a1E?(5>l2=F%T^D zk8T9`e|pcOvV6`t*uddLIfD}l7B-d$RxxCsD$c7HH7fgRuaF24HF~Wo%;^5hC};Bu*vaU{8Y(*(Om(h_vsDVZxV(-BUzUXA#28f^!vi=Lv1CoDfnX_VdnJ|rcRx^YjGL=dvD?)X1}nY2&7czh$qSfp zsR3W-SOk08VG|*i<@{(MnC}~%38LVw8xo61==rrpSl{V&g~T)J34`Td`UEy`sjv?# zB|=0GJ5FG!KfI$5Y|k}m6`9dNCuGh06eb+5kRKA*p~X8S7MAx?XH`P$?lZ860(%p# z5Evv8tRnaggG%`C9W_G5q%Nu?+P{YYX9~Xbd@hcpuaQ`U>E1{yk&;(Ig(aVi;J9Mt zU6$yCi1_+2p%nMLBnhq^o)47!**^vrv1R5oi&l|4*6V~c-b@l4CEHCx%I3=&LPYzk zXFKM-`aY-9>yM3+VDGX^N3bpL9VLi(zpo*{r6TJ#REQ2Pj5+I2C1*%BLF9EhWZ_B_UgHu0 zKjm1x%Pef*Nma&QSgYWC^^8ep(uPlm374`zY0asKWtKwD>8B9jdi+9*6oSi}>R90U z_&$M^*IA%YX7p35(7&8;1TK~9quw21d)-eJ=c5;Nh85R{Ht>u%_}*4daDIGTN3b;? zJckKbwJqBqtek7(gtE4tkG%K2#%h)H?~mdr-}HnE{2660iHC)=qxzhRu&eVlEG%PY zPfn}ii1QYeEWcqeVddQ5c{&fS%rvO%eSS|TIQlfFBKC~i3jq!fy7HPN1hz;bh}=bA zK!DZCKRW3MVXr(wMfiW4NQLD*nk8|?a*mHvCGpxigNpal+8iM=-c_G&QNDhWMXPB^ zyA6W9Xbwc>yvz%a$y`zd_+&(HSyh@Iw)#ms25?H~tArRo=!6VBI z1l#4W!330i`MxCB=e6Pp5mcfcj3Uo(69g!>ep7S=i%#Fb3GjCeB|;QT+XfThSencU zEC2q9z-;yESyU3AA5$g6dC$PYl8f9h0ijJ+NrL&F$q~Z2w4b5M^PdQ!bWt~sMY!s< zBQW3Arlb-%InW>kA0I@8xzh*eSXfw4B}_n4U0(wsZ2PY%xUPEZRNUQm6IkBr))EWL zy*t$)Z2m4BCKUVTyONML=p8EX74X>x6=$$|;KTRJT|z5XcER&XA#__!NoT?~EjJOu zvFeIW#oh1+PAL5KJV6vzK7s&eO4^UL2pM}l@0Vj!Zxai1PMu9F*55l20+eChj~ax~ zX2lXAVuqbiC>gQFpi=nR8Y=K-R?Qc~gjKq{qe}70R09jMWvXX3k#Mb=D(NSy(ivudyhN3p zgdY@A>U^Vl;q^FEt62zEQmcwiNbGf0BH({j&r%WD!(UTKw>+!VTJ@-~=||g2FFb5M zHPxA-{I6B7}w5f^Z$nD-A|6LVfRBwQ1G4ZQj&j$qqA3ACuhiz5VJ5v-s_N0@M_m`k2#-vdowrIjeSG?Bmx7c{r%OvvE#itg7GXvC&a(nMiNqM`ErEV zQNITj;ht!N0A)@}GJ(Z6`pu$}mO4)&n7hCFh_Rd*htw)j|I?sVz^eM55^@>>Tu)^7 zF@uos#=DYGG=KBPr;J5m( z+ekvrbSF$$*&oMn!h!Yb?Gecnu2T^?FZ#g-&IG=)#~>81_Z*Hol*OrJbM;ij$|kC( zd{!3rmW3;^Ds3rDxOmqg5eC84Oos_2KTI>%rLL_yZ$f?BDYa*${Oh{CS`(KKI zg#~=x2__s~y(mf&@-}rc2%*k!oe=f@M;3zlf^!Wo`5#UK=Y_sl}D^1W+0VgK&x zFyTyc`E-j);>CDfm5we|lKvQAU|~7e{(uRG%de>Wp~$)Rp+zfu(mI2XVc!fB4%-IK zR@lFxQm3-1+ZajMI5Y$%oGBgKR7VI$^a?5>=iUR0ifvyI6_z;uFI5~}4Fgxq?p!Ac zIc%819RG0;;ClRi-pLUxf6Y{jure-1;q%FxB^Hq}f180|FQ>q@9;Z$}l z`$1t+;4lbqCb7Qf)~D8eWME+U=o~#!}-av z7J@Bl{4dbu&PW6+44upg z?mAx>2;u6^U;>;q(>cLWyPhgJjUsg{ENIq2ju3XQeFV1c$rOo&Z9ZMkK)`nfo~%$T zr9#=#k1brWtWFywLPQ)}9g@uJ({DKqWL)9l2zv}=M5$}~FaV3hDb~6yHsO?>tP_m+u zEGiWZKH!9vw!J1oBp-Qd5geP+VM1AbV7??I6um`YIi=FV!W`X-IU%D~2bfUe-+yi) zM0TM1yu;sqU8PnI@9mscLvIg|1c&bngRpM;J22r=5qoR|_zt?SNGiK_6>&n^*8fpq zF*kcF>^hlh;EK)i8?Q>*tFNk3u#{W0${(_cR-)+bBnba`-PEm@`g`F?Rq=I`3BUg5 zb(0MOzHUm!1-$6|axPsHD`~KoAa)I21lI_+zvG)?f(YK)#iWvx`6f|C^lG{jq##rg`yR;IUn})y!FMj%MPFNS!OCnfCKwF(kRJSS?A=vLr zld${lFEHU!yOL__2o_iVLJ}MU7b?Vu943hLgJG&|6Sngs@q54I$iqx%n?CRZ_APU+vhJbHa->-B8 zb4=GcK~~9w39I1Mo;$KL?~GdIq)s<*#ftUzs+hy`bt=x+nL>ffsaAzeH(R(8d*5h7 zMXZYbkP3@B6QtpaIaYR8#pySWAi~!#gAJ@A?G6(m;-`Pa3CZi!n;~M~e_&7vIx|Zr zq}BKUCS1z5Pi>7#^!SB3l}&ZpoBv1EeaA;tbqgPlponw<8wealK&697XCFF>QWa^! zq4(bVPC`jSfb?F@WRgsJW-`g70egqui-1(+&{YJbhzcn0T5Heqey;Zq*7yF_o=KU) zJTWAMjMv|T30G(ysm2MP{H(*occafW6#Nh4<{uH5XTo-lg_(^i6f)XO)2KLJyCo5# zbnazN$cp}nzzQ$lFtMfj1{UFIU7rfu9iJ|-u+l&4Q4!{}tvZ#w@mFBN;oRD*G%EHE_jN*k;yR8H6~g;D zbl>Z5(JI9I&%4Cp*Znm*(|^#vFyT$ew{sLCRxX!RlC*s~p>W~PCPM6fRLvr|Uv93- zw#w?$!qR%iXtb)RvW6pAVUH>n!5!;I5b?*<6Cn#dS5>D~_Lid(AvQd^W>B&9oNiJ{ ztMNBXSS@Wk-$Jl&DxKj}O!I(7*z)v&B=8T;=?G^0Q3oa<4Sr zcyCkN!$=(q8~sZmOhDHt3;=h(5>9Y6{n8>tTvJcNY+=K?v=RjaJvyy+{Fq=MM8S-v zFaho-D>z}~mQV$|^gjDVZ$Bw<#deNwYZ3yw9#=^A$u_Wv;*si(EzGSyaw_i2%OrxC zf85jvuDz8wLL`_cb;9z2Ltx^WhOclcfu9dFsHA`Y5*3!;{0p5*d0+2Gk$mk>RYF&K zpT060G*hK?|6)mpOYT&_gtwL6^(rU0CK(FxzyF|6JmR#(6^kj^4-*atpZ$cuHchH0 zv9JWQt%VTr?`$^+CBIIWgz_GX4Fq#7SGTgTZK!9`YV+?O!-Pu}J3f*KR=~dCgxrnQ zRLTGC3_&D~-AOAE8Q^{951W10^udeA1Zz5iMYL;0h2?ZwtxEcs3W6wmtG?xfXTJKj z5l4uENTE}4R_SR`$zum46*=3Y!Xn=O83G*68CzWvN}CPl2HmBk{sUtxYyfRF~BAgZP=!Arihj0YT zYw@|HvTbENOgK|?sIg9%S}UF-SlXQDCLw+GW=Y6CH3KHBb}!>PA^4wrRD?{LBtifA zdQ*G#ec|@X__`?-{`}ADrZfonx+xtO@Or(=eY^troABOmFyTE)N<6Ac+9RhyrJ&n2 z3&HZgOwg%_F7;tT*|TO6rxO3B_X$-b?$N0@#|0Y*R`I{*lFc0+N?IM5++4vgsK1Vd zWlif36W)4q&HD=R_or!8!fLd!2(f&fj$n?DvP?qU@r@QC?T-NlLX5b*5hk38?mkw* zwJ1TuBDklyfnc_gV_b{=2v*R+`zBH@t7kI!;U-7bD)rpwI-U8p z_qQ5B?Okbu#{tAVr4yzkP|Uf6;B6s z&8#Rg6E=9}SVM^rv8_rCDk%lODP%0jl~jsK7H~q!XA^XU2ws;)U?DryjVr>wdqtyF z^!RrSLO`XtI>EgB15CJ7+PLpE!nPI{6ed+I;823xg(YPuR!WNjUQ*n;G2oug^ zpHla5vEBR45iB=up`=yxp*b4i3+;+R-s69DETZ^fk{62}LV)YBmsD`V##yaRRaOS8 zQsVs$nJnX62U>}cZ$flBv-9MAD$E&~DzON^)F=bNV*7U{h=Nstl1fE=^*qW-*Srb= z4kwN;QLDVQ^*NQ?e=e1=bzPMm4-cETVqtB&!GtsEGnWup z#>&SE>8I7r#G-$k%kd104)92Xa90_qQ`x>Emmo?9z9F#)=S$~c0)l5@0Bjx`rVt(R zD#yYKPS6hi)%XX|l1jcl5+)oD@@>fp=HQ7I!Tr)v9l_G4c2~%lZX-lET`W) z91F{T5<-BNUEUAJUhlS~RZgGB3Z4e+p zzL>y@b5m7u|2fL)VanmVKp?ZE`hmfmn!US*p%anIj8($Aw*f|^Qc-xvLWqpDtt5gKk39?%ko(ad10i+?^iYUzR1*S}*?GM=VSe6RRkp8sRTbOK zu^O#X$A4}jSlI4gIH4eWnWf4PSybTf5Cs5LaAe4O4Pe+Kwt$2%5ah|gz!F=gs6T$L3 z4>733FI687D+<}E)2g8CGE97<>(sqNgnZ_GsIB|-Yg&nrN=X`?5$WAOvk2}MeM|&9 z@T1Eh+RvRiuk!)Bc$E@*CLqLmv97&>C!|JcCB&3 zgzMRSu&qVN*Uw7?OQ}Clp|sn1P9^Rbg9(SfNbf~p<$)Oz3oCxFkN_|Go~u>Yz6%xN zZ{;XB{{57L;FHj!xq%S5x${gaj^gtQp*ON57BQpoMVJ8pE3b2c?X8mrA?e-$0!uuk zZWOWh>^zPuwrx^PjZnUGEkTGjgH;*UwH9pPOk&n8f=FGd=~VK^9;3q2W_j=GSsOnx zXf@KamR2I|MiIv%(uOUd!qP5!-`3~^bqlh1dm{tSu$0U6JOkgJ@LsrvMZ~mKHxnzK zQlAP7Y$$YErPc6<31`eY@2ZmfTQzy0 zqT3V>6JUE!L%}!c1RT&2EHQGoM#X*WFsG8le^tnA+Yi@S?SXvDxtY#;7)(L*qOBHfj{$^0gd8Mt1 z5ZRB)b;6!X137}(uC}lU$t{u%Lgw0a5+R(nLQcq-GSDJq=RAW6s~P8U!o^o~TEh_{ zY}+mZ%h+%j0$#IgxkQN66%z=oeBL~ZO8)u3IAO`(opc1e*dL@3vh4?{2*2LrO)9p` zREZEN=lgR)M$R%5!9qOeU;xDp||4p0$ABbO><-Tv0X729&Hw<@l8Kap5^JsGB}lHu3G z!otGSUtq#-^6IOQfA^V%MHnxl6q=7jt|J|l>jKK(2zp_!3XSjv?NIu?=p*3YWgAMeqyuiw#JY2vRdU^)wbltnUJ2*nbHF{r1 zu(+}=93gx+s3#2O93LmC>?+IG5X^JyV@@Tj-z@?Y2ev_gOBILTRi*fLADv42P9KHc zju3^Eu47>X*JHmoksxAw?J}_l|NYNZiBGT3v9PV1)kBtT@tGv4q>j0&6XK8jV;ZmxhHoo1{y^wzeA#gh+e6n<`8G z_v;5^iw~(18<|EBSx4(~A3R)KFjlQ9Zmy-m*7ZtMNNUnh_rWuTt5OX@QN58=n5W$X z2=LbZqDM=FaIId<2}w7*TL_k0sW(i(zL!2V5hC*V*OHJ@OTBd#`LH9$0>AaNwnlIb zQqL3cU&~KHfK|bUxeA_5TO<{eowEpmhrI8qv;G`TB`Yph64FPGrXnI{T%{sv1eB;YN3Y_%^bijzwfuS_l&`qux=DV2kb#)d-`Xt%M0BF{oTei1^$; zH7fSe-@=4d#;BPDk(K<3q~e~i#Uz*|lXQgG_;j+R%JE?a71xu#l2CNcsUevE^c^OZ zQQJo%&gxFB7}B5ZzdOTzAsIO=>D9|DxMSJgvCqz;(CsZ7gntyYn#-`#S~&9x!GD*gKvCLy9?w?Qz2 zCUU~&;E_6lmAw2qOn@!+6^&r}w$c$|WYd~30R@xSD&&3Kh`{o;Pu6h7T*cq1@=lkx z6~c!4>a@xj8%#w^oASF_#q`b4XjL$`i7IY)q=`iYzH*!s%mr^qLS8*}E3=|r%}gvT zxA;CxIJ|S)GET^^#S~JkatN@>YAGdxh5XWnAfg^c=~S{NSO#JK#oZDiG6HYvgu71$(+i#AAf-fX9`~Vn!qBfzvnG8#&KM+@-J_y;yUephTJ>0 zoq;P6wzisD6*M(fDI4EY;);bHs%;{K?M`z7v&kn4k*50CnIn3-^ufbX-FjFE;c%(X zDl1)bh11IZeX&|Cx)Pyd5zf1FRPk5^CYAJaPjv*d)wnFFEZ^IT6S7t|Be3AakqRM4 zT3NVa8@t}u32ABPU_uemV>luI?HvSB(zt;R<^R5JYTrTq9D@AH_`1mnfBxrnlM4dA zZYsb9{FlQkeg<3td=`0yBt!=_g9#r;WZ-VD@c3PcVD1ll5rpfjQJhNYhMEL1f6M?$ zCGS`}m~ipZlYen4MO#Y=Votjj3Kh4WD8#SsX!+nZo7Pl`5UH*SyWav8 z($DoaXjL%P7bd(v_IJGR^U5>*sjzI{GX||9Z_T$5EHmPWPNk^kVo7ksRWT6E*0h5v zX}5z_alUv{r&aQ}B#scPyFF9Ithd_2!ZOE9;s`OkY`;NB4_&KJ*s3lBI3sg+=>*%R zR8>N@9iSqd^!x=EPu{yutqRWt5=3IppDYl(SX9><0<{dAWSVUCg;|5{Xyi8TX-BA!=wfe+SD$F)~iH3zG z{2Z*x>iEVGplqIhg^I}7(?^xeI^S|!iI6+ds<`7WC=_JQ)N#e))7Kk>kX5ZDA!$e` zLF6nQYhV#YkCQC~GmY;}Ldez$Izns;zbC1rv^}BVnAAbXBFvU83RlD?RX1tHobzhyv?|#43KbFBH`bt%c}_iqMaYqtEh^5mdobZmI9re4 z2vO$$iB8Bm>3u?7dUA-w!oqv1M-n!lh~4f2n|27Ezm6s4$O!O}h;0mKtf3^_tJGwWSgsgv0aRl43rIL;iv+kdS z30S(SwnVVF{R0#n9b5($5i#ILj$lrGmBRFSZ6uWqvxXT65&e9uMR3&mhzbj{?c-RO zS<6Ncn?~6oz~REB9TZjv|6ozERhy|3f~z#6!fgB0=Z9sTs!v5MTl`#|S@)ItNJT+O zU+#l%V)ne|5+PhK25SUohWC>YxB5FB3rk&p877s}j@NM| z%th*9CDMD{;#8KjRE1^w)Pn$5n0up#K?sYhr;v7J76e!&pLl8^#Kz_78GyOANlB~B z>y;H8-)%Oq2tTJUOt{p>*2y{{;M_rj;Pi}=gzevl6NF1w&o(0Or7IS$#EPr`7=*N; ze^Ft{7rbxO{Q829E0#3$8B9Q2QGJOJ+)>#gr2YIzClo9mM+N??<=c`XY_{vtAg3z zN`k9FOI0>@?Wd6RleBQfW|-(pZAX{d5B2|GsYO_=)V-BbvF{^xa55d?hQU(c6^8m3>xB6FMUr5@6aW)09x7H_1V{X2ju7edn(9kv+>u~J=JYaROtJkJwJO}QjUcw2@jlJ?O^!Ew@ZzcOMXEENh@p~7*4Bp> zLPP|0QpM3blv7Ere9<5TWDbD|XYxL}sj#_Wdr2j?)^dxGy_TyI_iT}Y1-@;^`?sa% z)Y}}3h>pmil}MQ6eGun+e?WrB9@#<1Gc394C76JW=6xk$927+aGb9hmuzD^~1S#wp^Z>XwDVUr`Ufy2%btu;cQdWlp-{5V6$ zBAi`ong~|%TL2Zdv&I+*u*#hMg1}O*=#ok|AJbdDSZq-VE;ykR%2T~pnA{~50$gFg zkLoLAHGIvWl5A{OC?655R*8F3OZ!&JYWWNciD9h0JF!bSgO?@6!;>c6u31 zI8$<_xjV>4emA{0T-q7$YSnR+e|9%ck-x+C6Agbgq0mKaK-Xd?&yTAYwt>g2wC02 zLNHHVb#b=i{$mKRT4%4!X%#;4Q;W*76LqPGiA`f5z@-YzCj=p{Y*BE|{gUHKO!@H* z0t+}aTp{6;g9=GQ5~UAbd}sAz1Yy4Vg-Ipt>|Yi_Y{{0AFuzxCm{9VvDjS5X#(%+t z66IS*CwR8*(g?X{hnooIuAjuI#Le!lAy{UU?IuEG*ZK}7zzj@MC2zxF0*ej`HgLt_ zQ>2a%ne8`9LXchE$5>g3$+57Q;UzHPOyr2E7M1i}!>O>s@vU_%!hPWl3&BSBZU7TX zK_~A+&vQ$?308c&nn|nJdw*yI=hIMC3fc-wl`+jFf;oJS!-VU}n6ilzLT3z-2xi{+ zTccu+$}kDJiQWfV;jj-R7FKxUo<^&zi{Gd+=g=ewaD`d7PU{F3^2umPi0s)ICY1bf zKT;9y=rJ0Vtnp`H!phdMx!uR;^FObfN+ICurZQZ>r|NZXz!kvbY2s+SCMeBpR7BnS8U!edSE&amiwmu3 zViBopj&oWSt)FQSa{9ED1oM8ei4dh#E@)J8cI=i^@@J^05K(@xiYnR?obV=+M=v!I z!WQbi<%3&zABB$APYqg4edR-q5ZiUIPKaMIkRw>!pbr&-CftGm*AqGEcN4(^4t7?> z3~ono% z3tFmsG<+rhdrm87y-*FoQV+jD5ShRDaVnYp`j~{&8~<1ck^YyRQz@)bUlP)K?12fZ z+|$RYh-GzrRVk}_g}{nGOjFo0t}C5k0gl=RBzUZpe!&rJ>pkz&r)$?ajaI3yVUpme z_68>;_Bm=ISo-;z79n<)`T$u(i{%jD3M1E#GYQdGym$Zjo@aF|@Pl|(aYDpB^*qX4 z#}{Z+O54=e5hDA|ZYGt)8h=^@Gvzam5a!=kC6z2Of(kPnK{^((acFmg5YluEOn6&S zK5psVeZi_|JUFj2>qusu)b1plvg!-Pxa z1g?~X{FfaHPPYpJtg<6N<_Iyh&dVkh_ZM3wmE0eaV8W`f&19VroZZ$W#GE-tg>8DC zYGGkPy?b&(Xn>E75Yy9+5LnUiH40NMSA`86p7lmMP6*j>MXEeKsl- zzx}U8rPatqoM5&e2@|exXL=k#WL8L%ip`Inir@Er9c1SBnNuOr0RGZ#3)>ARo6f~%Y|v9OT2j}?0E>jD7| z&$!viLa@-N?wpWaeHcObw{5CZ$v9ad5hBAe)g+itzS9vb!7qg%R-6b_B{DpN``{|o z3XupAGAqm^x?2p08vOO24*H`qjoh|tcQN>=DdgOK?+K}U#f4X0XEvaftgg>Cz4 zxIrbkZ(oiO*)IYm!E?L4MTjn}q$61BZ=Xtpa9wzl3j8~-cPuKgA=^}m_Q@x(@F{0F zuGoO`VK4#iX4?rO`AzS|H~;VJ4w;VIoX*5n-6RoW<*RO(fSvPa5?EHR9vlmc*;-4L zgukwuR5I3m#1Uf7;y(y1C~p-6DE1idr^RX2R;!Jt)MJNbSeGn3!*&$(F%e?psq3ob zR?5<`Fh`dyFkzM1&ie_^Su{kW;&=XcTCtoTk4Y*yr`Hl#*n2w^5}NzN2CgS@|2BoJ zlgkV&@biS9DeSHk#HmD@eRKu?N(9zta32V8xOdbi1U4_iu&}U9}nRhG%i@N(* zVO)(82vCBvzR(aN)4q<1SoYmHj)ggP|DY4r7JUg5&LsZPn~KQJdP0TeG}&U{ia8dn zu?R&MmMEBSRfhnp?Fs7sBVv2^l2iiM)YcHfTsvN;l4Q#B&cEnG48_GDF} zz8g(o6_V3j+{`5Yl)si}^74j>eBd|?7Z3@MQb95iP=7lr2SOjrA#U!k#+lM1qN=MTo zl-EkTa{o!nfSYUfU?-%R_U~gtQ4qLX4l;k z3;bG(JDjj6zffWPRP}d=NK5v9qFik(iD$&RVf$eMqDCLq5zJLJSrSrwZ<~bFYKJ%> zdBA9c;A)s>5eho0yM&1O#>26Q&0QZV6xJ@)v9KaDiV7=Vr*36o-`7#nD$!_2D-oGc zrp`E`>Y2C_O}a^#08gzT6ntTK;R-77OKvYvVFj;O({aVZa@VL*dU3ESzFLq)tB~?# zs(7~6gaFqwZCoFPw7=fqRNQ;Kw{n`hx>^-9^?vGd&yLmc3`SJXY6 zxf`#i!lDZo!v+p_%@}7Q;NKR_(WtDPn++3I`Ogz{gjiFpR8q;bjWr3m_XcW&hybTf zD0ck~6E2nQd*4I|zD4~VEAoChuU1iquIRXeUxFE|N@UgFEiA%zud*aKuBiKl@H-W) zQ*q7wK_h(jgD*@tY=4bD zpA>Tae&keAYmYP#Eak!jNhPz_1DJ3)-VtUY*qnk4P9?fQbxFt%Z>14DAI>un@a3vY zoJyvDSD5%wTo|N~YIA5<;C~_v(h0U9gE%4i<4_ABa(f&nuj-9lE0YRyAIeb3IzN=tiW}-qD^eWlX_*y2YG%^P-YNqo zTs(AAiA0FZjWtzC{@wd%vd90ZO2Bt(bv(mtHyaQ{!MUZJN|J3RLF_243IVQX-L&Nd zmiqH9iG}4aQMW0xhb+^vh@7k6;p+dsZtBoc{d+o58DBR^`13!nn<^mS>!v-pfUErH zJ-h<=qH)l5ju7#g<*KC2ZKhLkI|p+Fb1t}{im2N}mAyANsbc?hu<3(mcAsphN_P5v zNoDWIjsy|Vu`UF76Z>0#suBFoUz7-zQ)3-WSefSX`c*{hvey2}xLhj7*5+Q8-5llenw0Mh9u(_c@h`ByM5|&Nrt`QP`?q(oZ z!7UCG5G%ZQNk@5iNhN(zmQL7Q`CAJi0&czo6A+mjXApLFRd;q)@#dEn7UnwXy_-zm zT$|IGqWT>bGR$cj7FKrRvW^g2ANG@k@>iFtlJsvX0lp1nEXNhA_|yB+BPG}l0WKAP zYJ@>6Ga%3;l&<-g6WkNdXarBy_q_OR3WTBRQmlFk(VdtH^x zH}2_JMC-O|Rf(GzWKr4r@+h6Kz0q@3!kynifWt|2KLVKJC#tgLwDzF zFkw}EdYFM=X%E6p!WW%4!i181BTf?BbzfH{{r-mp!8es@wAxj&MJE*YtZyNNf9@7e z#rz|PAY9ka8B{8!Ch3Hd4NVBbR{IN!O6~~nCn~R@_u*OSX0U;GBe&^gju3KIfI%o2 zyFf>j z+lbe7D&ZZtK`8vh!wHVuH9Eof=s}q9wsOQ&NwAgsnFy8`x0Vy~(*Lm#!oAX0BNVn$ z&xa!Vt1&tj7C9(a(#m0cz!5AzFGUg@t}Z$u@<|6yhz)TOgfn`%P9^Nj1BnnN@#!!D zc|FH#1pohi|4!KJLal5~KQeK}oKZg;1l!|vI>8N2tha|f zEnJDT!Rp>Cwxzr$vA`$leS+}+&Y@F@yl{jH%f9b@lF1ppjpIt}yym@c%)53)mCO-Q z1eVt16`ju5m)|iFY=4IyR9Ikg1r=eQ&6KzjMTK8$2$nnJcbHH%uRg0&$=vvlB&5CX z#|Z^roizzji@t#ghl}5JYgBee?Y0QXSIZ?rWHtCjq3~#bgNoy|d#X6HydR)B+57nk z`R0&X71ynz5ckzl0t80`050HvdR==>(p8px^@ENOq4IN>@J9L!zd#Uc#+;B; z(wipe2(fS3UX9A$mDeO8qzwkRlzgi09U{}`S5-%U&y@BKG8*lvFa#6=(>y zWx<;|mE;v&RoT`voKwkq@0>*ldon>oFvok}>je9$1`4*ey)-Ps`Nd!Z!D7#Q4=4T_ zDyf9tYHJc)eFmu#{ZQR3@D=ZF8m(f!^Bykwx{-xNWF@2;w6eWIFL>Z}%AYMXS_LmW zO)C-e*B+fp#@){q0%sIJfOjKl={SiHvER%ws1y#pPlbiVmFif;imoXJf@Qbgpb>1> z7r}($KRU!fh}=dgI>A$v1`}5MZ|;?Zv?nJtLRiBl7DAN!_T+@Tao1tOVdqy1Rmpfi z%EBVtuY9IppK!v!!qO_QP}rS52LhZ)Y#J>InJ<fO|q@G=vYv5*+Rw>^%&t1p<`R9WfeV?!$D6U}54lPDnpDT9v6w{VXc^eus4g{07Fcs$^yjg8-LW zkW-Z)?C*YLQps(1MI+dbq`-tTse9g%goHsa2*TrELt$6H44qbk(%*y$Zz6ndH3D1k zp+CpM?5jUE2?;+9h6!hazCNl^DWBKPBBXXdYam4ClNlP7puFii6?e>iRm$#v4gs#v zU3-s?5P{b;3jsfv>|IHvWYYy4X6;oAA@ZBl!@HMcSI3YL)PQXAM{E8{bTY-j#oFrkEw zct~JTYx){gR-fO<5p3Ys-g{=)Uk6n&r@M4qiR_p5zy!Dl43Px?FNSagn_lA;f(Usl z$D)#bHdZI3xFZz83v^SJ+d))Bc87N@EW*6>l0w<(osvrKmNqb9<@afzLFl`_pDK>_ z1r`=o(7K*Z2>)h2OeneAw@8Et8&XFnIImAO2?c+Qroz&0Kjm1Mt3?q^I2`ETRZuVZ1m>u*+YKaeIC z;p*K$BY5^+*9pztA1inoeP&Tf-gAx<;x4Y!5iIsWf0%%*fWIw-2&wrh72yfEs#9_Q z8?7N&=21&hDe=wc1izOTtKt~nQ^&$0m&~^aDt5+D0!zLBNW;RSkGy6eMD{EjOu(}D_E2E~ z&*O9|=52L1W+|N}ODs&jI@2VW$11^uOG%?2;yV0K%^cgy)ZRMIN4Y9E+zJsX3|RLLFsfq_Lt?r*LWR#)#V z3HHms!Gyy_x0f1(#NVqBMB3XG5MY(LVWCB^-PxieL{L<7gJ5z=SlWKJh7g`5!*zn=fn^|AY3F&8N|sNoPAIxCR>9F>zr?}{IzKQ771O@-Z$D&g=GP7rq&D-<36OHwHq^sg%JHx4Q6s@57daPiCr%s{ZvHg-wKYSCR4 zPZ#f9JE~DUr`3v)ZPaSf(4G+BQUkBDPB!RF%D_Ki!lj}!dRkPR z^J+;dp6M|L!PT;hg6# zzDW?9Uve05!*d(1$w0IyD5!pn2Tr789I&9#uEoOy>Dc3&*PB?pR-=lHYETL2zC_U=b!X+6NO3`!5udP_(d~PFP$k+C&K7 zj<*adj+cIyRPu+;v8edH(ZrK_3!Kb)TLMQ<+y@h<^GC6NRR8MuulF?V3DKl zD7cJ|bRRsN|MZbWFyFeHIKeYfJqF?DJ-@70{F=JAh_of4I-U`cl`aw3YIB%E*5G{D zz$)+IaD(8fwpNwEn(D)0jw?5GTBUUAXCauY(5;Xj8fs7p>Za?2$PH~^!WHHguT&*w z^LGT{4pYyoB4^jHlFmerh#|0`hTfYy^@~0lu2_!uIf`Xox}?r{MyW>%8!@6G6;bf| z4+b6 zok=*dfL5ZLRuwJ;mvXjTNh_ASd>5@)@zt9;t#(DXGYIaM3p7INO7AMSc8QNJRByR zNj&7E6H4AV#|a<#R5B1EdU$h~fTVX{(GkpctqrFV^6qa6!*9L`0ap3jRv3h|CY=eQ zd}y>z#kY8}D$dZ_s<;k#Z`_#48XSR(@1N;02$7fSS_ol=zt0K9)qkSGLTh@T)orsi zS}~_J4UWLYQxexpLe5)01|i_H+XUg9dcmS1uU6xPoaa|`gea^$RuVjo4k@H~fAy+x zd|1SB#nLjGSPGk7)e)lj!^;Y`yK4+A%-{E4Z#nn{ffe>V#c8!?)peL~raFZ5LE92{?WANvHUN;?wfUlcQ-~wJTr|1@30X(o8J~I#^s~9H~zlg6T zLijI!Uq`U;?lmMr2x~Wixt|^}sN|ggmLr%vnWu`o$pe#0VcAOr_+H7?5a8mntO+M% z|8iJEFmpkDNhQsp9%>?@wm+v*II2h^#Gbh!5zO}Bv`)y4>#qLe<{Hq(2z-FU1_r&WMV zRQUhjn%3iFE7-vGxF+}J2(~d)z4I)z{V_?awC&$pw90nA-~{^-w}B8*2{j2U8=IK$uWc zziep|b~boL5^}^l3gJI)GO5J&sL%+hzj-7ft8$Vm$;qWU7X0mws^n~2X;6vOV@yKY zzxO4AjraW#CLE3*^d~12EWNA|HjIC!BiQ!4nFe9afijB_c`MXJ2&bo`q>}XZJ5*Tw zh^-~uKLQv0$)13t>DN%&8ZZoEFrMyspl;$Y)$zLi4Y-Y z*T965w8wih*@kx4X%%;BkVUJ)(KQv4+Ejx8mx`#HrjXD$T)}zE$HEocxjamv;+pqn zT5~0o(`wrC-7w+e=FVO^l}(Nf2Eo;KuZ0l1x?hrnf|?~dg5|u^g9`l1;3x=Ck{A4> z6AD-7sS?q%Jwf=toGWQnbfc?|5QP_YPH-Ri877pxXHN+%{q0p66?coCI)bIn>?H|> zRaa6Gt42jxScJVtKNG?73xA|4Z=l<>?#u-G~ibwd8t847WY$4D%~ ze!#~hL?1eD5R$9a*9j?)p237OJLZh$gp7sDEd=}|xY{rQ-1}?ASmG~33@W?776g&C zp}&PiOmCtNi)F(LI2M-r{DnrytZi2%xOx@@IGmC_(;&DH1yf<`Z9i}wX$F`DG+y`GasDvH8sZ-g#Z$C^pGi&Eng4i&>0mmW= zTaGmlY+coXRG8;^XNB;Fdo)^YEx9BS!m;2jov`ckZ3ZDN^}IwdPh=xbDEldn3jEyE z=@8&jTf`y)i=8`|V`29CZ6reYzB*K=;#}RtBDfCCfC(#Z)s}<;-jWkiC)I$7Z)?Tx z8XZ&XCd#cmvnuw_{mAt%WN6H3-JlL`y;-(^yX{y0QKu$UzaEkf#o$}r)u{jYx& zcK>`vQYp!QiNKuQ)x$xgo?Xak<<~9_CR{50vn(piRxv?hVXlv^7zE$<0(6Af`0+$e z*jCZlB1HKgg9$6w!jU>5_HuoLkl4cw6Rs!CryZx_nOIM!Vt)7%K@{-eoQh{+9znR) z)v%}(?i)ab8Hc}s0B<7x>0^amEy5)hmQ?ksh7e&(CYV$THdg0^%xw=J8zz%QDP(+LIrxI$F&Lk$c3nsg}v|MzuM`!4F|H=Tr=blu`p z@aKPCH=TxnubaNZ1$>QT?M05)#7c&DH4!3UX{=5q&TqOz2z&Ln2`on%oQnK&5`k6B z?xaez-$K~H^;Cohs*>MqfkmaHvuPki$dhs^VsG{)PQ^ZL41uLxc?1E@AX z1|fCwGMKQM)3>EWu+-0Y>V))d>lGr`9Dx95Qe?D+VCgS%sIZLZ7dVxOf(1GuchIjI z!JH&v!lknA{J{x3dhOB>Y**k#i%NQ}FJVFnzkg4`cB#9LMRclLNJVUH^`$|jV5zr6 zOmk^iSm=!pELz#0WOFKo`)Zqn6#rO)@Qu#Zsl-ib%L&29yHOEqS{Ez0*1x1s-rmxD z@R|?)dek7~HeM+S>xX*(E-HHRGX!`K3+jGj(5i5MrcPzyjx{i0RqE`{3AS!E2`vA# zzr@1!so!}BU(K2JA+3b@qOw7&@IGf@!kOKrizOj<#6^SPdZw15m3n5}`{Uw#`6=g7CHMRK(f{1%{wnfFg z%;JQIv!f(oYftZIKC3~QiA5CZrbgHqvO^-6|F1VpD(n9D-}@Z#Pa(j{HEWF|q;|cm zBSieib^_a(nX6%eUwiwzM2M*82MBE2iFFng&ui~;1l#rD1xfI14221YLw@w$7Mb;b z*Qw+kzG@+utE?#%=4drqVi6T{dn>pXH{)1XhU;yU5Or~%M2IC-7Q%#;oc*4{ihE}b zDrV)@s(8++X9-a+@-?Iml|*? zSudg#GLHC4DodsoYY34sqXs9GH~5zdTby!~3UdU+8@OW5maVA3)8KK1q(et&B^+ff zO&`3Ttj;}k1lxXV78SP8-@~c6j(n;k#Jpqs6awyiV_{*k_i%%-dB>X^AwFLe1QTGM zxFQL$&jUGv?P%q_39?^%p;qpZkvgt~^P8Vc1Y6V8`y}K0Vh#jYMTRXlXqC{Ww?#-< zAXJI#AIGWK*F_LSo;a(@#^b|a0~grta#>P zDl9NI%Ak@xvxtfqx4W8x%ek22N;rllNd$A=8>juqg?i zmDLPFsBNc3D9AY@5iH{63{_$sKj~EBDh_Cb_#N9NLWI5e#Ukt+*bF8VPoLE~g1MGV z=TuyG&MO4=@ZS9j*RH3+947`!Jj2Sm^w0^J+g^eR*Ryr`$0i|i!%~T0DV^66MDE6D zjs^ZLstyxY2@9WCgiY^Op(08?a}roW+$D)Ck^5z_iD3D&XTXG#UrRkXu)U)%QDN(H zES**bU#dHaC>b(eVqvNASr)Bq<3HdC_)$jQr%Id6-%uq*JucwCpj72pMB$+eFyZj7 zR&QH`_$ymAgotVrBMGhAd14E__Z3I0}@7bdCrXYRA8q&Pp~RAMhrGpJPjQ$>{uJzG)<`$XLc zOg`zQifh0Tbw*YXgClUw%bU+qIQaN$g$2iB2rRMafCRxmB@2n+tt}1Y&rhBju6qio>37Y!&6Nx%=Oj;i?Bf)HV7$|+N~nZ5fBBWDIEp~y@%dp zNJ0`40_nX>Hp!+ZyPHifXF``EABqAhG9XA1K@m`@zx%$=`dnWh|KPl?_kCtIWp^{C zvVz+)W%2!zLx4TSzZYqQ*ux7sg4t@1lQ8rm2(TwPImjSb<^)n*Dk6I80Xg#A)?RVL!}aRl%TicA3j&n9ywwH*{x|qMfu)|2 z*QZPmmz#yYj)b~t+h^~FbpklGKB#44j4LOyP zTkld~rGcM7fLl-A7pEau#*pbMl|t`_CYAhue^*}mBwsl)=A6`VByw;083>ls;BA!< z-TGrHV#~^F1a`PlADF-%kE(o?kX9vM9#-*fT@8yU`e{5T*c;t42$o0kIh*D9$TyuR zunwX|lxOgh?&sM?w}8cw5CiY{6Tt<>s_iLc;j77N=22{RJi= z>EB;8nt!C1hDG>p{gD$A?ktu_y>|ryjO-p&I>FDc7bm1Q=&d4H+WV!j!k&nl#Tu26 zXFo|ebD|}JPINbDw4w2G6Ct7pSg61+qV7Uq<9<(v37+utKU4(#f!0%;PQXK3zkIvKJ2wDt;Gd!3w3SojVm#_?d@F zCG6i{7(eIyJ{mEvFLe_~%zkMR6*0YEJ6Wt{g#?k9VV9%an(f`-Ke()DD<8QmquLu( zSYgfoaTo+Snr zVe|V6R@hv+;gv*Dz-R-D$hsom-J-w|Yr|5G5U|8(83P0)-M-W`j<$Wcu&WXtZzcO_flXcNkWDEzZ0&2$i)ONhJ4m zJ*<+QRuxAg)qe{|u%tD+2_j~}P6$x;Z+p`qggx4!60(P!h82z~Z+gt65;Vj0tYy19 zN~Mz8_=bTHj;?!UDeYA(;rqHiLFBIRGTd-a(HZ&pVi|vRqr#&8w-P4!@?2Xa;Wgb= zvgfapdo0(ds<=m#cP=Eb;yyi0EG+TaKO7;#9!{hp>?zMxD%o}WzzU;?hpy-6$iXK~ zEG)>sjY=a&$G@luJ^iAFh53B@Qbh>AFa=g9saG#>LY0_m5TaK%*AU{+t{1TW=entP z-vRV>x=YpZy6H0f`=9HkD-iIy>3bZ&|7{L%y%~xYG?S-{o!&%&Q^I@0I7)zTo6a++ z%z9Ja$3@;0*E_20#~Lt!7bN)ic{=SWd%vbhrTFqWg-Ye8f5QrU@>=cE2>CDl6vDxA z6*_{2wE0fLv(Y1tMFhRKl!~xi_!t6|fX~lp2$puTk`q!!Rmq}X=}1LHcrTP?V`>)( z$0yBnH#}(t6Z| z0DJUWjZB0{-tYz$5qvLJqq6VBNdv(~ezQ=aVtd_Gr;^qwiwg6!**F$asE$z)OrI;C zuGnWyA47oAiZ;VJ;nRCZWXXR}UBkkvMlYZOf5CXDN+qN17Am6Pi~16w6I^eE;!U$P z+#}*Q708io{5vL<{EwzkVPQGB8W!fP_60}4U(w9b2^qUx@12ktJ*cphMa3||mpOEU zMCz`4CY6E#tu#X6_>lw=*=4INscCZ+8resO8H9qlBQ%2b_m3*UvNi2tQ5&OS0;B3}RSCUak%Z;$JPv}NLY~)AMKG@?g&IPn@?Ee3lKiW41hW|{ zB(gIQ;s%#t0GwV)mpOT-RY)b5sv&siNx@4XV#S^T@g)Q(i4WIMVF}md(>Y6hEI+u3?6El-?QxFZ3oC36Px)FWEb^$MAy`bS z-YUWIL_Xh$RVQ9RfXxGz;RIidu`?BfC~m+xq3~NTiST#3s#L;1ZfFqlWBY0dW`EUP zBCp*sgNpC+qnwby8^Q{Eil^if#Qe{GlO^uo??UoPo1)%&4xLU)}?Y|>zru(xnHtZ>3Y@7@NLh)1JzLRn0%f)G2e@6!m$ ziD^0^=}ZGyVYL5TxA|n#AL{$Sk4kZPNU#oAE`7->vdA0VtsLlBUom;JPje7jZZ0r438{Wp`^$E&I$G= z%Lr_t;d%zJy}Bt!AwKmq+{5B0?2~(9hN%h`QRev*tbpQ|KN<)YQ*~b>=)d+;5F*&S zhEB!$<{DUGPj*cYf=C-9pJ`dd{`Yhm`3(Ps6G}cEU?AWp)T=bY`rSt)lE1F0Vquxr zpHN}>9#bLU%d^y*ipYJkQ9|_oTOwh^A~*OCF74+$lZboo0gc#}(?6*=V*cYt>Ie~j z-A5tVY9z{1`0Ypt_zG@+UzWi3eKjhxgI(`#d#m>qDn1)dnF!I}_189-KHZ{H@tc*R zAy~+z5Q6a8ze^(f*at9yqayrrO$5sf`GgZpAkgl zo4p{w2^|q}8iG{}cEQH$a~gRiMW}?lXP+p9taVpqv3W$vvR?fLCUE$&{MH&mWG!-i zXiNL;TUnxpOfqo926vBx6;QCSzey;aI!+-tp8FXHkw5zd2mI&rO?~C(n|`Q{*G)gd zzyG;zx(WfWn|{Ipd=9AKsfK4_dF9<;1$ex4y@kRPe&kq$HFJQ3-ZWgIc)>3kj+j#^ zP!S^j+;~o<_g0?QAVd*H{HlE`3062Np=ugIY$({xv554{GAb-@WNi}*3vT{4L2TbpqEZPuyPP0w z)%zG!3X-pDguE&3R6@w((K}gypUJI*x>|qoG8~ z=$&$u<3ElHbG+WDxZ#;?Gha~=A$6O`60qk>n83(#XuF9JDMK6R1kV`@Rl?q>VO(PH z23Zn|LS+f?7BGRMdj2_4jqxsEn)E0#+F14(g{9Vym@K z5h5`DxQT#267!dW5INbcbt;-?4_Kijdd!m8`}P(M3kzpINaXkX_uVwHsVs?Gn!*;? z<7_a@M2KC@zt^e6WXMMWTjxCt0*uOjJI85MtSvAJ_KS5Cgh;uvSEaHl;w?@kHYFEU zICEU1Se=lb?fMX%xj2?a@b^)AN*tW&x=W~jQ6_E{JF_^ASaEzV6?V|F7!!O>bGwg3 zRlj2dQB=I&#E~c){hm$;$#C7-b_}1(Ux_DhKz-{zc3dEgLP zc7AX{r4sdb4-FxbmiEyJsnK1yEOqP}L0=s}h1IjZr($7F_h6HdvVMewV`IL=w#8Nz zM`CTuTRNen)gK(e4jg=L67u89V1?q*-$@Wr_g83GM6|oSi;Cn$4>^^rp05aOQ#Gqe zCAH6R9l`S6Y@kxH-k1+7l+d~@O+v-QEd(*Q`!J40#5Fsk5*(-7$dYK>mI$tMkw#4C zTyw+CCDnpp1r)FD%?S?WxQSqSN6zVl#FnYA}fMQZf_A1lmXkAy15YB6ECY8k7J}M#LseHt- z!acpHh}?-E%2CqL7#;VBped(J1oI1Vy-%GBheCi+)+N_NFL}1SQDG~)rPC;Fcs8tX zRA$sq1hKWHu3{1UAIoP6vGrvwj)kq=utTR&c7_2f?6J{{45O6rER{<12hZf_z;`Q5 zD$b|%bi(@L5u6aX^$~$NPW+`}VJqs%=T)(0=M-5Iig%bef*#f<_rsif_EFA;i+bl~hDo zi(L?)Bu^d95zO*wFN4Yg-UC)BUw#%z5UD*}&p=-NEC!AAYw{t&lBz$G#oyCP5UI2F znQnM^%)WU#A>o$1x3c{Y#%fd|Yd(`$)8==H34d;d3A{Yhp2+tYD>SzmR1$1%9Kj;m z-`5D%_;Lx~fu0cHs9@2^BozGhE)}*ndbKQ*&E6V~_U`$F0Kd1;^-<2zaflpkTtC~u zJrrv(lf_D0KKJolu%%ffbHQ znK*+>Jbzy&l=aynOHr#167HEr8jYeg*Ig^F+I0wUc@ldUp7W_mh@JTX zM+nQTEQ1iSbhn0J;W_d#Cw31xLq+8JrkXes{@)}U2p0Kul0=;4HK$_FPoW|*et1)k z;vYRGmsh^((Thsq78`_BckqZxCY3r&1AnwuMs>+e-hG#kwX`1;OuB zYI2uGtfZ{2Mr8)ihZROiDZ>Z7W->?=2l})S8$&z)XIYBu8@zQZ5?9GHi2+t~`!jiAm)TkuQI;$X9 zbjR@qAxB(=6^;tB?39Q<^eKU5dY5n zCRa!VH1O4E6gSdKB6Da71lXJ!7^M(GzF9{_gnoFyz#=M|_R$D?{!nxTb5?(c3d@=| z5d!SVzPVK=Bn`YT5%V46rA8FgFMe_N7Mft~WwOu;2!rG=zvx zS;`6PC%31<5*OZr03**wy$u9QU-Pqy5RTohSK0569)Vu1ok94 zRE}Wd;_p*oA;HZg(#CDnXyh^Jl`M`wA~}_m&=@KrzHzFCMcDL(Dj`kPbp$K9^^_Cx z51mpGqBtx`CuD!?y06Byf0xVh;W3pE-uWD?usQRA8%MBx`d)=#4PI&>MEuX&H9}Qw zABoauZyQ*c#piz`AWGS)%xj2#K(}Ul}+Ok$cB$1YNH$ zOJIthERNO}U;=xB77HqD@bke`SmgcBsEFc$Jq<|kR= zJl!u#=X^#d11amgKxw1g4(|kmYbQPt6UFGBS=5 z#AGLjfMr9Ri4due9_m!e9{$3qY|(y`IF|L$#KM;L>!1@d_qnd26Z@~EA~K%1ULK!C zqh$$NH_3FvqtfOsRtb4EPRSB@|8Ig=|LPZ4*|L_q;bz+pA#&t(vMU5AdgO6V(7Jau z5h5dN4Xl9Jx^1Yif}vpq`2NM|G-7*-BIL+Y=bQlv-m7&Ibi%=9qd6h>W;a<9ymwGx zUSC^e$ql?pV9t_{B~nIyue#xRl5Q;K2xd_`O8EIbBZz$ihw3;I)_yLO&7Y`ZVMmk~ z2BBd15?OZLy{uyqIfE8UWQ_chV`0v$rmzC`oGQ@~qPX%OgOKe05>^;FdVZi1sun({ zB0}|cR7AY*MmfrA{vM53rKLo|F22w~aQ~V8@0)J$cM6sAP}gHF)YwFO#Pa*oOd6%{ zd8!c#N4z0Rs)uf15pBEVa|8<#znKKj7OAkpD1L@65!U7{6g**cd*DJZUBSZEZSExD z`EeJ6O5mQ?Dj~NUEO=B*w|+W;rM0b42|4v!aD<3(hRTu~G2Fz${6>1n54f~lIT}L59^1^RR)y(^sxi{CCE_#$|sn@OX?o7-uG=pPru3Y#-WI!r=YufJ7j*6H(Jf8}4UjEX+5exhGJHmVp`RZ6iOoNpsA-QTgN3h+m-_!|d z@rP7|$ZxVrk(kxiARL(Y1FWz)YT_+UB_!plK_y)uM}=Ab@=>THpQx0@r@KZ)6fE5( zN87!>hb?duCF?Jm1ZUhT3Gby_2`u13j7p=hChc_uE4WwBB!sklTP5U_9Ht`T-l|3g zzLP#3CUEA0IM=OPQajNemV3OTPNUFTX|Tcxll@*&VOeFrQxP%0wv{C!_J#oou7x9_ zX~asF{H9_NKF7Y3#pC^I2KWGYl4bkSplIsmHZlc24T?;m9i9_ zX-QzIL*-4dvhJH@Nt?9*_QHAM=a!lTOV(*B%=&?!P9?%_Q4lQF-}NNpSh!E6lEX}b z5EeI%MeOP$-zmaYH<3mxS=?7>l=ol5DBQLw@&EABW)h|uyb8o}Pm-y~!x zu3L|8utUef(l51B2odA1m zf-p|5P@(+a>!yCL-xq$nI$k&3fq(yV-E1MzQ;CiR+1qu7ZYbF+P z@B?pHVHA7nkwMUls%r>gyQ_05wk!K|LRRlMSYdNfr{@Yn6wjQ^saQHG1d;Oin1V%= zuliUc1RtA5U?C0Ka4PxVA0;rKgbNU0bJF13rbO;VgK!{d6|68?KH@5YIi~H=sic=I zmBoEeSBaFFZ8?n&ZVHw7Xv-8D39op637cqdfZ+d!XBJRlkpnl$vb9lLjYgKem7I|9 z*A;`Xi*L~gt4=*4h=k#@CF1YT)M=Fe%yj)g^eI0zzpWtdJSH*cMltl04cmVMzZjYd(6 zlXODCDIWvDRwm7X6=3Q6vqFek^Qndq!4{`ZND4Tj5TX@#SYdN?Y=2JpY(X`RU@@Xi zg1x@$zLDK-4Fot(?5_tojnZrE&vZzkgBQ_D)@uMlF{ru)<9Q_vns-S7+x0 zP6&PaP?qpFKGd+V=&(3~u!KB;043qrKO7-+*LO3qxG6;{jY8dCD{{1iYlNr~FCCIU(<_9}Ggq`EZS3$!*99+4o%c%;eVIDi%?cl_=q#_QIf&^h+E^u#A6y zM^A7}42_tz_a+TTV*KtEu)>~v=Q%1YvCAeZV*jmt14knIyRT)je?F39VM&*VNfdlO z$iO0emoI@8Mv*5Pm{i85e=Ljr_-KxW0y#4tBbuy($w5gZSOa>Cww9#ojVXn;!PNJbk@h-g%)5t7@zRtc6_znBQN z_1F-FuwS{O5gd(kIYPvBysA>s`aDtyUoMV<6^`=V`YRO?KkpI8A}X#7G!QK8r;{d? z^tCA(f*m~BS;CQaTfri%VevYGZMZ!{mh_iXI2Ms!%ST19gB>nvg#1n)8HC_l%S}Y( z)7f`m#oKzcloOJCf`GXr&vh5`_65b!of&iPH=bLBSYdRaQAdSfZLnS=1TXl43e#s->R6cH+GGPEEFZe=8`<+*Z^QJ> z)oH|bZ*;w2&W(39+|2YX?M#I5&DkPLQ0vPa3tN2FA66LUIps^pRvq4|(nx>UTp?^} zdR8N(%q-UtBI@Qsj$oGF7FYqX*|QBoP@te9c873@z!$ng?|-hFeuIG5O%HGY*G+kg;dr=_GLORsLd1M`U6$BBA8J%Abz7MTW z)tXZg_jQ7ZJAX~1awMsnEV;{q6e>o&RaBUJKcQg}NBmd8inrCXm5yL34Nq%StOs^0 zgynmC$&&7!M1?K)*lD=o=Co};nFQ;#4hkXdWBG^|8B-mcO8hU)G(z^<9}vVBzchpZ zho@^-bb@c4ViO_Cd>pU>taGXv2v*+qHm8z$^*aJfx!B&o!ZIffA&8JJO=tvv;~`bW zk+3I@m!p7f-83w0%g1e0goq4S0xJ~zu+KSRPv}w|AuJnf5t!vh3k3_?@bd`+A;Q+j zaYEWedDj;Cbx&wm*wMl#2Em@VLKdGtN(sV#^&bi6$K$yhZg#f+%s_~_1AR0?MfHE5 zK4UzoFl*il9Y^eNiwuJBsgcgHi1_+PVTDohmf=)b#ff_wm6U^94MO4mOjBa42duEU zur!+!wufVYlKp#}Nr<2ENGBBJo`)4iHec5hn9pR_9a2Aj;s4qlt=O z>4}|T1te$u&Lz%%pb}CKEhUJ86NwPusEW%A2rT~T0}TrcyuC;v1g{!m5}d!C=7fx` z6|lllasC?&D#f+?b3$_DMuG?^eov<|YQ$?;VRQcDe-tX^8Gmy^$<_K)M9|q7ol08V z6ItwwR&y!^Gn=XeyXtz=9r`Ok!6FJ&`8H&sKc12$`arRXBeuIv6%|$zdKChcupc*Q zgw!C{1ElcUr&L5~zU!Wu*Swp7dqnE9_Bw)P#|@LED8U^9l>8rKI3cO;n<_$tc0McN zJ7%?sh1sWF>fkZ$jcY{h$t$%bvWuWT~z9%3}!y@J@H#x!bGEO0c z{t==gm|icR6LMRAU?47e08u6D#h-BZu3O7-7{X7*GRjr;Z ziJRA{I1&k~BRC=bbg)5iEE%98SWdU^HG+NlA%pPgl|YF|zb_YUa z5a2xFw_LZLKm3}Cg;}e8A(4M!xlScRDTfs{r+&JSz_z!Us9|BYZOu4BWb~XZ%kr)L zAmDl8!c{`#?H(FJl)RHiU?K1SCQJJ5h6;|Db!MFoB~sHR`PpoU;Nn zLQzB_M=;0uT{@NE!aFLJ=_7!x~cC#dENA|I$k&Z4*&k=y6F!Hc-`~}2k=g4SX09@ zvC?C;@Jw*O8?}qTQs;~^spLiv<_K00{9LC}(POkMm6L};fTQf28xdI5o&*|++^zCK z%qo3OYP2W**W(7^aEN>}i0nPLXvDJbKY}4LCf4bu(WtP&Pc#x47lTbK ztoZ5zS*&#yYg9r%T1JH>W&g~vh*hH^bp#9ft~RVt^3Pl`2#K|yNvu(x>r~==ZfFQr zP=BF92=Bj#Ad-TMA;2i&RacIH-`?_zMD%C%CE{|1C^Rao{fmKMhh4u%mf7C;L!si? zXuF9J1ryqELVirPfnXJvA1YMhM(4r`dyL|6POy|-HxMjq$!nEx?2>$>ii4>iaV)}f zi+qH!=#N)ZVM2RT!x76r6XL?!dva7bdA%$po$JFEIDGkA`{l^e?t+emWfr%W#qJ&= zp*wFFI1*coIkJS*TLb}0MC;KeA>q_TS$52STcHxRJIWyFHR3oSC9I2vU=#k%gB7rH z?|p+1)kaeg!qPPWRv2aP{8b}p#)ljslJ88CCGT~iiiKsrUI!~+N6F_JA-z)_g2-;X z83G*TjBpazy!-OCU_M`UH*m!E6?M}Ij^{sUgj8n-SmCJ9uNN3p$_HK42)60T5?gkB zXiy1!_a9hcb74|71;NVgt_Ne`rH536Ut>E=V3akdwT=)0+DQVlecnpN!kpiBF%ZHy zJ6$I@BUeyiQKy>|g#VHxjw2TEZIVtXc&9*?*&psRsOUfUk;QSPzludTcJ9*%8J3d< zA+%Fpj$pRuTL~i1+F7HL*5a^2NIl~VD;yqF_`XgEJ$RG~v&Xm5sBHW>j*9RseL@BP z66pp`Bm2iG27)Ci?8FbJ9Xe<%d|nSNBn-sHC-z~*3&%bbw1qf8}aUH{HNz>m&fG^zMbJ*rYE zSvr*fKb9VCQ1Lm@nhGob>WW6?t9hjgLU>P4r6Mwx9V4)HPvoo2!q;^%-S8%IeP6)} zo3k%%Q3>|@Ohd5n|M^g1A-}ezB0`ehlq1_Pp}XOp^k>nsY<9HZR4lEYstA#tR1Pcb zIoM*DMx`Jsh!c_r6q$s8Fn5EH)*z7+VsiH@2v(T6*&x{FT-6Av?OY$zwj@r~v53N( zj}?Mr?P-o+c|Ff)gtVA%V1=@^>O+;FuQ_iL^1te*A%u7EZG%eA601(g@A!eM@Jk$v zi2uo<5&Uxwae^}|FcR(XppLok+3kasdlD9uJXcXOU zJ4djPbwv_cGisYyM3VCgtbo#X&s2iZe5`_Chpy?c!YIFJx+`sX(Vv;JE-+*pqSSxk2UFatu(svWpEuM#o#S6plSdg;`(cX*9}O){I6h zYv@`kEcMA*S@P?IC?L2)+T3U)>~2w{&_>AVtL&j zRw$82QaB;-pNATPjos;CP_Ye>uMYgi(Hfja$*X^Y74}3Go-`1mz-tyKSQ@6m3L{&P zyFm!`8>}Hj*%)CGa_cOC74}#yt}FQRVSNo6d9)p55>h<2aRdu@T3`h@$G`%pZvE((hLRx4o}T+y%zcLuB)xg{v|4oL_lqM|6xAC`wc4b z*S?Y?JvmPzxXoRYMnU6$RtVW)&1A8<`x#UcjuvwS3z=9~V&9sc8W!P~zX(A325-a?0+j2vPLaPbML!_gRCmH*~K==uvs)BE}ZZ zqQWZj4ska;b4d zh{NMlLjK*q6hg?J4@^SABi9{r@T+cu0 z-hCjz=E%+QCc*O`dB+w-r~al9i`n*tL8EAWsfl2Yds8_<`&d30g;(CEvQ+h4r_#tj z{%eDiszHrgNA{=L$$l|fAAwlGOy@CmBF3bAd zBvj;1R}sSDl}trAhF_K?zhJQ}mUe~Q4UgJ)X_G9rmhl=E5toq%D~zH(IZqH7uYWVK zzz?|3<%G(BxhjI?9bc+Zv7G$Ur1Dk6{;=X^v5&y?y+7(yR`eXMB3O!VC9JT=_V2F( zw1&9JQBt#ZoJPrS4N(xx|KMelkaI#a2r)0KsR*IZ@PHMNS+cAw+I| z9hHjFYotLXwpmMwyr)l8Dz>XbB^K8Tf&hnmO?}A;0f~bRg6(mnNwAxZ6hiPn^3Epm zeqAU>C5Izn0*7aYKQai(J6mvs$gZjlDI#+0hKS#8iLsl zo}(jfpi|~LhTxgt=Z2y*ol4lHfv`deTO>G@tQx&#DSsYlP{|daaD=dY z5~NT$`rZYDO3Be~Zw3lCYefrcqf`&-KCw z4Sp(%SHf=+g$HvbO2_L25k9Ab>4xV?ePxFg5Rh&oh_oYx8Wq3S-w=d#$_Y8z9NL}J z$R{_&KnQ)=NR>*U+jUr>BzgWOk=%bOfqD1tXyS-jI(w@KaiDj1SfONA_tgnun`&@E z(%i=y!7}V4ju4rv_NxTj>J}P;<-Gh;BKP2S2(Txl^=%cw(huII!qS3oP!WzhCp8+C zPS|B2#O8DE8iEBrI%6Wl*5-Z&p)_zJ73RDj1p)RPYBHE0)Wq*KDwfUlIYML?jx(qf z3>~5ooZU?wA*!C;pdxIy?XqlNHrb$2Xy1!8V&O-#HgucZ-b^{Fjx&3VXt4Iy5R(e&+}*cVA5iFiQ7Kw2^ptu8nQHBst}yp7s-+u-9y8|a(Zvl2??yRES5)K5Jbq* zy%L3k9~y3W=Bg*l2`n&vl8J@I6bOajcivA$h()*8YXr}N0ELjUD2o%EccKjhvtMqb zQOUVEnNvymT$5No?S;hH+@&yq&4tm^B*JIZ(Xfcvmt71(&U?osGM=RnSVX*2BCOZD zZtx#`mh;Ye342%h1{cBWkEu9fp)YTk1Yh^DvSjK*H7fbf-C@N&ITsDWj!{ibgs@#y zG%7>m4=GeiKOam*6s>jLH}j zR3i7f9;env8x0!iv+61|+7mmT6Uw$PGYC0BXJLiIokN>&f~SA6i4fKg&%p|?Eq|gS znC)p16_$DKBTglEz95K@Bg~)@J^C;emiAzZ964vdP-x`8&aw=t>Z|eva`M-f06-WIputF&d5d?7{yOn`OWX)N}3ARBM3W62xuF|Mj zVwRc+7MHvaRzSw-9TNKYiwr6SUZV-3a!iCtCF}fTg^*dY#31Y`3O5lV{Wp1+5cZsv zG!j|wPUbY)6u$*l*c1P*yxI~4cT5cn3rlXL5&}Owq7hQPPIH1@wi;I0Q*v%I72&nG zK*u6PAAcJ=`{}Ef6x9F8lH)j_sYgI!H-%0 za!;WW|HW4X_^`Q0rIL|x(L@Mi%raQvs6#*hNDwJ0@~+LwJNJ_%|M3x%_6XPiNs7Gx zbycy56ZP!|A@cVjI)W9{O_SL3WnTr0@Yvx)MR?qLC5vCpW+skUAP<&h!_kWxmBfoV z24T;s209__&Rej;=Df+*48p#~mvn+{_Be&G?!HZ8^ZBtR77_bh46JZeS#xgj)Np{}8MI=iMMq@N2M;ia0noMaLqNW*QoTdG-9vpb|Y|AgnM-JKR)9Fvq+@Dj|A% zfVP{gea|? zFOmQ4aRm!2^P3MVjKa+ViQ>Y6CY9V_kpx!y`7r|vJA9=9M~IkfJteH`_UKfiJ*OB5 zR&E@l!cu)EN|YLnIE~WUKGXtA(1G{lDE!tGn84vVo8D0g8SWoR#9E#cgzu+; z97jSObqiL2=Z9YtSm59#Di)Ti_?ZY1n|g_gu$Z@XD%LezL$G}ZKjH|n!9;H=EHk5!AhMfW;xw|48ml2hvG-7eVE^9? z1;IRh`kPe3=8RCOSi0Ya6-JK0I0^rKvrH=c8#mJlrEMC+3VZVA&M*nVMXzK@Z81l~ zA`15IRS?Wb^P|G@?hG=q2)~HW6$DFv=WByX((W`>mc!RMA%FD^1tH4(eW(a$?IW`6 z|73%TBNnuz0|9=jW*d!IdF?-S90^NCmMrm>c_tQCQ80#zC^|7&#UdQd4x5A>#fvor z3)%CnN+mCI7^h-c+CeAeb$(kRO#I&U_KEQvz^N2;`B5U`?GqZ6$lq-$A?58B93kw3 zLt%xR`0A-b5CJ>nQzP?e_JJHZuXWKt@Rim~*KOt3?Jh_Ae!OMiNN9s6n1u3Xqh$$d z*9-z2BPDom`UqOh3=-~vm_1B4e^J|~Ev$1Q0j3MT)+aU@FqtW97!&3tt#c|VMV6;9|m=1)$=7TCz3V(lbf9%eUc zYg9r4vvq_BF>e|Kt@0?WaJcR0|4b^@7RNau?1wiE1j}{in}nEvegu*B_d^J9o;|fX zDFpl8B935=cFd#_awY>-D98IgQK@Xc{yi0u(eG!4N_NjF8ex5^>t2`eFxSMwQiAvB zgxFO+3c=Cy6Nwo!vQ#W0w6DCku%oHf4J<5X@nu+HlyhdSPRJ}?$_eR*;v{k$x`u^C z%zrM+#*OkuMde1W<4A;_+N2>^Si>eJ6~9}zVTEG7mZ1|4MRnwag0IR{gmBh%hxI?# zO}+cbuhacg9j}|*YW)AMo2o&;>!vqw0N?gHrj~|hVnu5w>j-h6;zL>D7v-r`(%;?3 z5iB(}M5A&j$o0H+=sL`>`lR&=j+k|GYl-N^#d4G?uE7LGo?^8` z{%O~pbl>+UG#Xhtt>J_NLCXz-1KX&SbSnU86v43(Jfu;6xy){C* z<|w#FM7ph%ds61j)v1)fo5B(7&<@kQWaXDiQuaYlImmmuOI`3CM`*}b3Z zgsio$XBXeV<|-A(FGnO&s{bhw`Eedh;3!AVK!R}8KB{05nU8~11dF&(-Jr7h_5)a< z#LRwV5*%fNG(yI;u^b`%9&|OR80T6^BtJi=Vi5=1pOht{s*6IUH2O;&!HmLYR9OD4 zAu1M;I;aJ#FtUzp&8b)pasqsFpPzySz6q|3iVz7MAiz->$=L*!()NXfJ~~{E5}H=% zAo#iD9>1!Dt;zj4!P@_(PAHpjNBE`r5jR9WsM%uI-S7-P+g|sSM6_*)9BusA!rkzw67vV0 zP*inZL9l{dUIbAvvB;p}6H<#H3WsessaS7)N`)1c&sM1<)D9pB-G7OJMeLhj!$iRU zH7?bt_-s5$U_NJlHL$R}L&-WJef$cJ5XPWzjS$%;8&)Ul^+FgLR$206Ctc+y$ph5`bM3Q*nXr*NI71OBUt>Zk2FGbc0YnB?p49Dh~%`@ z1Qz&vlu9LL#XMNysQkNu3ZW`#yhd=Wo^2vTW%wsp{_p3T`V5j^r>kBAubXPXzyJAs zQ%wkX-Bb$)@V_5V59oL%R+iArK!^j6TbfjSLvL^d{FyV?(_UWSevOJzZ?S=3RrP1X ziZA|`JzV8RsYb<-KZzq))#2SLmEdG~Hxb8vx@J(Zo%|hE*poWAvn-i)>v1e1cBH&h z2ut<05TNY++cXd?x3ZKI^bcI`pO}TwI+Z=QcEAdIJQ{zZ5bT=&3B%?D5@9LdutW2&^Ke52uot5~3qm@}IX&LUwvJ4IwuDv;bBZ1vmSKAkr@PQ>knW zb2kY-clRm?5p{QnK_!3nR89ynqZNc$`Suc%O7iSw1|cQ6f{F-`zjFvaUm8=a;Ybvo zFI5rjX!B!Kn4`44f<=V9-Yt=JrMp4JK63!9u(@z&t}JnFE>jT|zq{VfX_XjYkMrnD zPB;{MpNfd}?_gjN);6w3eB@@=TmJB@#vDg1J=`Wyn7$PP-d16`MkxQ}hJp}bL5*bz zZkK0bVVN7(8if3512`f5Rwr0t^R$K-U{BhMIx0d0bvUC@32aguRu}~jo2?>5+{j59 zA!OlFgAhFJ5=XGemPZL9;-?WNmDt+LHH3)&_lq+5Q`;Cc3cVO0N8VR^LV&|_M!#sr=6}>s3xK=k3W1tDUe{s}9Lif+1|oDOcDrc%-8-I1f> zx!+R}dCFuRMKR=AOsls`lM?Jk+!_1EKx)5D^$Wm|CYt?Bd0{fGS>qwJPAh z;hU$>h^5wSC-)TS^6ew+?{AW$#ktp15Pa89Penn9;2#cXRI)qQGzhlgn>bCOv5ccy(g%Dct&>#f3cZC&S)06?6uxAxLhT+NK zNFOOy=T1_6$8CUnpV;X%tJ zaz4n`u&{`}@Ss_0+^7GM;C1LO@wQfmwqyWwH8ljYggm2IvU3dD1E> z%yN4j1US5Od6q0eof|4t3JZNXg6RW$5a8=#VFs1MUHue-Pog&!k++_6EW-IBkib&6 zwAZOv{v4noSbF&}PDrUa)+A*2TFwc9HKPrLDE2AVsTi>zX@t!6>9E2mJz*jzl=OYe zBqY5N1}lt`HtZy@tm@eY7M5~r9~Dv1Zxm@r>k89ubb+?zyG;zstW5EV`U_xefS z!HTcPcO7*q)AU~rDz=mLR4UeOUYv@!8LUt#t=&%+-++9RN|pZ|1tC%>e{hBOHA{*(CUk9IGH$_&GmW;)eQ2Y^{hga3q{t>cfgJ*qJ5@f?4YBqQb1(=IK=Q zT8}tF6e)FNNxgMS#lkXX--H$5{r{-C@9?OKuYu!1nlwcbPy|_u^j@XTrHWFdDM-Dv zfb`zWBoGn^3F*DuWH-sC?`}3dFcX@9f^-2XS5QC{0Tl%ldCxhszvp@759afH&)mDo zW_P)SBn)k#5mGOlGZA9v$6lu^iSam)+@EuXnW(s1eP|m*b9Ea--4`f=m_Sn&LqLuca$SULQyA^O7@j0R9Hlx zQ3MeXtX|th*3oXT1vVG{G2Mb-M_yaa2`P0R5yTg{YaqZL_nFBG&flVF#0oqApwq}` zR%RiTo9am{vTqNSSeSitO^tAHT~8_^rFgH2MPxL(N`ODchj1*+H6ceKciLo)igWm< zl2EixJ#1K6i>Dlm@Y`mw&?t4OdOEVy2c@bM`Hs+NWc28(BgBSBKbcgl)85yp1iZhR zirC*R1On_y+4Y1Il0)~YvgNf-RM@83p1U_@&{s5KnKQPk(Y~VR8YFlrN$#ZXPPJJM$WK7O65TevO)Iun^JVz4NPMiiSj23OK$`Ndx zkLT`9pW%7V;W^zRe|-l=jPXgeb^~=2UWDEPxe`N?Wl}Lx{4y4LPB(#U+Vgk=1=oDto=-V1+%2 zH5XYBtkS%o%GPSF2rO#(VuMCvC{v@-#Vt%MB7Ie~M)2L<*g!Dby)P|P93OrzRq_8t z!CF*iU=cxoK7$oDr`+;YDC*=Rv4{!3Jy*q=J50yIcB~HI2oY7QpGL(xrbMT*KX8Nx zj}H)-`?D~Zz)_B)1scI!wH-%@;Gyrr3dmUejY9cLmxhJK>aEAKTEMIf4hY9Ri)8x59D3opuA$Hb?(+R64j-LRE)1L8HC_3+G+@vb4Pt}MbW!YA;3|NE18lIGjOGjVEc~j(5M9Y zy$&lBN9h>_=a+X4DlsMX71Dzjb1cF&WV}WQ_U1aFDCepqqbqOqT z-b@HMy85dHA(H3+MPSArmqKBDHHjnU{5~00*b}?GJAv`mL6S;-^=~+WRoXkiikokA zwje~ofH@|?nciK&h)v|G>^(wYyS^-ffM*`}tBGK{%YIZyXy$oHgv#j_9Esu$O*p|7 zXOjq)z2mA*#TmYY6L|M-7J_3%EUd66=$IcT6umOTLdb2o&O`{Ge;-g0J{@v(EG+j6 zE37cejIeSl*18j^u$*gGR7q+2!h$1_Hq@;X0^VLO3HJO_0!zqvMHSoUvkV-u$_D36 zLeQLA1d)5y^I*#@NQVjR$(rzqh7cKD{!t~}JB?$3Z?#*i5u6)*RLQwgOJWhOkMd0f zJ8=4hg^)H}gB3=x@ncPbqsz~#xc+FNQL&wQBoQn*BhEswn)`KxaD{g>sl=@9A_*yr z9>NNv?W+b`RGG7d6T}~$2V~)nj|?oLwCz;Hf3BOltIs#psfO20b>a8_TsPH&fY(j0 z;Q;=$togkKP5^(mT;{DK#QqgO5m@lSh8mUZg^OT?J+ZULsB$pD^DLCt?rN#JGvLX&9*JGEC?38;|V9&hK^Ka&Z*@ll{q=h41~yDJy$2h9Un@CZTSsX z7-iLuBQSUCNgNA{s?&ptNQwVjmH0(l3>xj6{ezAWfp=bo6%b+$P$=~ttzlt@?kAdr z+@AGd#kX*ox?4nHt7$Y6)>k_cSZR*hBjQ%BQlrwR@bSkpC(n7LBUoO-MU5cKEG9xE zz80mBF^3yiSacXY+TpX4XWG(;<+iM)(J0gJTZ2$CYK%!JA5?`PQnq>?8v(<5=rqdT z`wOgaLie_f3TchG#3FV%PFfIbWo5ESW!rEcg}_~$z*d#a(rFa>=14V495Y&#%!h4N zS=fIN_renff7u;YI3fI_9zpo+IIc=o@?Q$6zQZ{P{y>h+HW19Q^|B;n*K1+v!+D-g`4tnK(;5FW_ebbfFPTPkd(L9#%N~ib961*g|Dr#RH8{arBr@ z$khIY6;8PM?^`BeZ|VwFO6H#BSeVE=q7#a3XDkSj_N$+ylHBXOK_zkGLKDH#Dso^2 z*hjR`5b%AJ>g^GZ4ebpYMSkH$BW6uBbt=2A<(q`EmhZy~N9_pqJTKBd&5<-JL> zH+Y7QMdUr$s1RSiSHr?mUzVE);cU{Fz+Cm!N15d|iB)Cqj;b2&VSyYLsIpYB*x)gFG(<&Q>$jo_LGr z@e}#U>$FFdPw_nXqw3AD&{0{>yBmc3WhV(Dw)Hj$aO;_kiWL%)HfdCBgC|SEvbeE2 zg83cpsNmZFHOC^7W)x@$wl=O*CzQSCdCCOvpA9U+=X`C2G`Hur!UNmF1V;Y%dg=&f zPnRZ@qFJ6tOVO4C8kLZMOBMvP9f>!n_?(-gQ^`HxrzxEL3062Ew{O*{gw^Rp5ZOa3 zREh8LrG_I>T&IUgaJ8rfE0lfR8Yx7i9M`G%cc^7SFlT;0jSx0)wn=cT;5uRA;6e={ zN?55uD4f}l3d{1Erek4Q*Ip7tM63Y;N?I*%6nx^q9>@_Q@ws}JS$d0m78<2A-eMAp zFFRm`J+20|RM}C|%Ak_FEDu(^iGxe1z<=^#wO|otJJ;(3XV!g%+%u6H75nP-9Kj;% zd(IPVyQEXu*GKJPvBP{dEF$iLdeDmE^PZ1I=|Xj8=BN>F(w@8rmk7+K-9S#IVA4KV z;U2526h(JfVG-=iSN4n59O3Pj(YTwzse5g?kQ6{|Z)sBSqb)NZ**LV-YU<-x|Sq z`jv%{@FK@Ru&CQ_n1t};IT`{!N7h9WX1t=q3S~p@B?=+q7ZRAeX}*agb};xejZo0< z8yz9a9&|AQ|NpwFdr$TCO|QcrjN4Y%hu{Bm-Sh?oyl#3E2XN;-PL+5jX8q(Fju4xA zmBR|~edTopzeY^M!tz_*Ql(7Jv{1?QT)Dsx-}Ahny8pSN_7rA1)SiNAy)@eF_f3pM zh>9_AYA&MN$O~UAg9btvd_MO!%RH7%eHmNutKjeh$KBHlU zJ^n%E8ba(oAUTyi-&`h$h}#<_7Lm#SR;9G{5(seA(XBpISW4TY8Wy4VR8JaFc8i-- z!g|z~2QO&XP8TQgW;WN0S{%)0cfq!QMq2Pfn#&oB`zZhs4j5PN-Qslxx1RG2$i7&LNs zEK#F0J&|KM_;-{6D;yr$_ys5A+kTM*N9i?%M9U&hW!2qtu)5tYe<% zV9CIqY9vNZHfaxk`keN#`FGTxDk8H=UxP*&9XnVEsWv+S{$b)S$0Bm7t|73zKZi*y zaO)E_LVlnhC%7-YMGy;rQ$=+Dqyi?eIsN4k3qoW$CP_j@{rftCtsA%!R=|>qN`)35 zngp?N={ydC$NZG948pqEV=BQc@1HO+d8nU z9u*cYR+?CZD=JVDG77(g6-sEg`5GbXNGX9uJ&M<b!K(Mg#IH5SXOeduK)i4n(IR9Ts#a&`kW$$O%Iu(0a6Ai)KbwUUtug^eF z`BA+>vZzy!B<>MeeqZW@+--lr3MK4ePfoDcdLj`lKP*bYxj{X!MIb)~6BzBdeVInW zS?9h+rQGM9PDuN{)If-Yl^6h}!*3Y~7W89hor<4)qEX2iYNNu!X4a=7*8KJ=Oki_T zXe1}>p7~NDME37R1Qz{k8U)zmO6q42vMW1T5W;zNmj?LHbyE-Z`KAWd@Vedwk&20p+?O1|>t-9xKIhcGC zw!nD~na?F5r??6ytn8epAw=<^msEtiK@9>csis~dMb`ZQwWp$O4e5oOQwOU%f#ug7 z#<8$NUwo#~D0arDCL!xOGY~9glaEF?5MC$=u5a2XIKQ~6QE@-5VfUc8kPO$s}m01PqRRP^Q@@+R40Vr`(7i2zW7-Z zg1%UwO3K?0AixRZ^Lwf?EoQGO$y1t}I1>I7o~q&s>1beKq2|X_gx|?*HF9oVreJk1 z*Ff;?W^d(6f>VFN5u(`ts6oj6x48wuqFwtnD$7rGA;AAw5Uyikj;zJ1#BUDeSj3LI zqa}jL9WP-8I9mo92(j^2Ca1D8xPwNecwdMrV(>#93v=$g3@dC7+p6wo=4|?#NhR(3 zAsT|^KL1H4WcfGd2qFKuuTau#myU()U3OC;B(4<%*b{U^1i$E{r& z7FPW0WP&J~B6Tdn?uy|EwlsdaM#$N|238mqCwSf+*ErAN`N8T&McB0CoHi$HuWJyB z&icU$=b6}QyG{sP6K5erRj7Ma(~OOMUdFNifbWw-9n` zdLGz5Taz^`!q`&FAjq`p62a#7euop1&-6D4t`(Q4h=6H{8Wv$4K29MnYXt--wxE`h zuyn-@0`rY`X;_%^VmE?F{lbS+2^sYmRv1;(IV=hG@ljO7%E)sZi%3shrAoq_<2n`J zK7%EK<;SRxg>YSJZP3Vd{hUr%cm9xuU>OeeTo#+FpOI9Ge%@#h@*H(wg*_4N&R7UB z1E0UiG;l*dh3`4MeEVRebKT0QL|9+Q>ut)S#rK0;th1?PAr5CA&P$~e8~BI;Hz=I}T@puiLMg zt0CB)HIsBIwzwW9m7=ZfVTC=1%ps~2m&{P5sO=d7J90Eh2f^Q7J~(PYu+m5$Rjhw3 zHnE6fmAx#4+!-z%!R%K?8&tAt`Ef$F?+{fo{?1fb9P7FB@((UBaSuzq*GwZ!*_Z$; z6u-_@O+v`5@tlz5_qjxf6~2ikm5eh(71n=ag8-wvm4g&QgT`?z@Lm4%BtoQLuBuVl z6Fo~IynHnT*b}*MpGk;)rL#l`N8TS)gwL=*3zgY}pDEZ@?K7~jylo?4h0Pm0*Iz6# zvD88%|9xW(0v~o%M~IXW$0Z??zoHR}nE2{D_G>B!cI)7Zowi_wx>%%=I;Ikmb|&MfrS;X z`vX>h{pCM8q2%2=QenUili+^r`RGJOdG5@ZsPz^axt8CMguFXdIKeq-hk+3BIwvqY ztFB>T;p@j!5nJBhtVXG?`l@1-p47eYsG#)b8o_7fhX#V}+B3?e;%|8ARQ60M(x_O^ z6_`|#Ui@nzB$SPU70wgh_c^ChxVVEtdgC!V6~kwXf^$zZ3l>pu{Tr^}e~ZAfHeG=L zx1RLjF9yN;&9fFlZp6Qwko;+~fe=Q=mL`?*b)UitM@2Wt(FuEM-L()xJHAIn96aKA zejQw$PK6cvji)^#ZGT(C3lEPBX~q#E$e~`_Se{|mX;iRmsz#&AX1^JP^4~g8Vb+Fk zS+KB}K^r(iL|N}@R4OjLqe{ffs}?Go(ozgU$+QP1Lb(66S_qlt@52gZ;oqL;V2W>v zDy|D>C5~7|%WQ?zkiMKsRQvH7LhNsQ*q~BcZzDlOg{N7lY%ZQi5c~Rmr;u*(TuIqH zKaEHj=RB7uiC#ZybX4wK&oeF~JI0`rf5Y>v^o|)Wv51VBs}$t@LK6$~o!1*yKxXo6 zoshlf9TOpT{rr!Guwb_5&B)8K>Qr*i4(0Yz}J%SQS)aeA+pL?ju3g{e$%O>*s4k@#nqN@f+HmoRyfb< z$?vI>K0`gQ#k@no28{{_9oGnf*B`(No5P3oGY}#r(bpuv*ETDZPF62g%#rb#h9l-a z`G<}W(?6SNQc1lq&O*o=6U`CuztMfDQ*kstrr?ULZ&HzRtOX&gZQoKQe8~k#C1-y% z0&`E(bu27r=>iKv6s-MN!8!MqM#XRbZ?MA1_5B?x@V(wo2qN-SSB@hVe#7(ZwkPy} z0GpFHI3?l0@Y5DT!Tt@f!scQdGpXe1VUiG0`y+!;bhjG;J^>J{VPWn*Q(*<9KUuCL zM974V8kOBc-JFo2_tX(0|1)oe)p1h|EG%ncKS|(Xwgn-IC)TDSHZ|>UP?5ElP+_^D zRdp(k!0rTgXz3bBCA4M;CuD!}g+VBKt`C8_vzor*K|u1QFcr&tVcObCxEg1$DmUDIsK_ngKIu=oIz-b|**Q+iGY2QRpVIi*Z1QDJ)!=O>Y z!!EGGd3^n%bVB^xL{1p3byslgXbb`N97yxLeC5sm(!?STZfa`){{MATw{HFD=U%>B z4X>M;!tejNZfXVrubbY(0en&Yl{fGN@bwp;PUZ*^w5g#+#VXrcsO0t=U{G1JtsbXR z_J=pDaFm?%LZh;pC2%TbuD!6rdE6_Ss3Ptr8dP$BGIYYBz#vuj-8umQ&g1xClSByr zmD?-|TQgyW(U!Px2qO89O9qwHz>5kQXKK=jIUf0P9EoZ11*-6`Jnw}&sijGyxoZzg z1WTUO9ag~Zs|yIiTJwU!_EqJaM)^aUsn<1QB~wy`+ia8)H>T+ZHHk zPeGS3jZit`Zz>|By{~~qq$Lca!jdm0=vY|k^4Bbcl-;#e$v(KnTRyjiMx&^7&(&zrfxj$N>H?fF;)CRS=#*ix;TPNRs* z+meu3wYx#E7kZA0KO7AK4)-prYZ5~4FEy=Pp>CHx4u&}(2k2ykw-B-88@=iR_ zXq4LcXPrh-m7l4S9{(mm)eg1_O!d!PBj$j#ULN$Wp)N~6WwexsR z;IEI?2;~zV!U~(?5?3j#axRlt#DbxFIHCAKHCSO!#TySTgmT9cju0^~rx932nCH*5 zl&B;VM=YYnO*OKAzfWQjMa9n*>^)yVfD%#sh6TYwnx=AvE1MKbJI|9;LXRa_2-a4u z41x%5rXfVBEs+z7OKYlPbSXBlFk{$Ii4esjQ%x$4`oC%fSMF(8VUO?BcXUEhN(Y6! z>EBtX_)jTUNIh}Vz#`Tpwt*FpKR8n-gsuKpBV_LV5>^=P_x)n|Byz^aetD6aVSW~k%*}g3@ae3_gGDp*@p~5?on}-goZqh@;7h%|bi$H_+hBz~<*g2zgkbkJ4IzR)U#}B#J3f&F>+O3c z!T;kVDl8&rsYaz@!4ZYx2WlkJ{(YhLt(a4cfpmF=(s zKDky^mB_{=5)1SH>q}J}H~cMF;N@bNDzn}wga9RKLY~5oF*__+m~&opPKZeLykA+X zF3?CsRW_lKa2{44Q&IX@y+$$XUn6xoDzf@zi4Z=cR}xrGoA(VY%>HVg1tHw?J&&LK z4mTjcC~4PHlTdox^N`5@d4on}hkZ6jh=TGe1ZHm+2?36h%`zlH6wYjE5DG4Q>M7>C zoQm_E@l;rb?@p6S;=^08!cl&|_m>D}1PxXtw#=?$5v6BWazgps00R8{rY@37a?f~; zuy*lSRq|)Qgn;j0uYYxdt^boF$5UdlNT#E zBRwC}UDpaEjY2Xv>j;+ZzfL2h?{r8)n%)*x80{Ukfr@Z0sWhonR69w9<%FrHj4&#` zG;k!GO@F76u!o-ERO}mf5!k*UA5|g;&y`-dxv=qWg=Llp5TLA$aZzDmy^0m`EiV-g z^gL*K;oD=2YC{kOO(%0G|NpwFdyl?!-PF7qUN>3b_y1fswSa)vO)YT%&!?;ESqNXg z_LDm0rpk^woD%;2`PFlRhf{@h%ZqJ93H z%7KsD>IkuXmU=xFhrJijNJP{YG-Ae({;&o1bnkylB3SUsaRjk#*Ag9z*gdTQfjPfC zM3?7CGRE9J{05XsXIXg%w7ZmO3r>=5-M7b(h=-fjr9sKi3tj^ z0a+49!rgH@72)W))5O9G^&1*tNAg#&!XC$bb#K6TV;z??a=d#>BOFQkO-G2`UzEcN z$g5wE3UhQ)?>lpJ7^cx^-I)n$9&vHm6+soD(J*sS+WAGIkJ{BdN88O6bn2CW1xwSOqJmqXYJS+NpPRqsv|`4z=5jdR#Z_)+0j>{QDvQ; z2EiSm9%C%zV0Q>`o}}3yNJ8|`WhOy(9IX+SA33NKQX?jDLecr&CPExMd{ZZ6)&2rj zC^7A?n+Rsxd`=bDxE~~yycKymA@hr`sED}HjR|bpgMJFBH`i!hcpf8TmVscYqml?> z_podoi^!Pum?PkO#JieQ9P#rdAu4z+N5KE3ct|1Z;8=z9ieWH;(cJQ1B|^9|8yf`K zx;Cs(RyF*XBUnlk7Zqk*rQT+dIA@c@k+4niJacnv`>EpGIn=}vOPN-tAw=T%=c+hX z?We;0e_sd_*b_1OfKG6&UZN4gx2-S{f=3O66>s9?w+6xf*Bu?fc;qln*!|u!g0OEn z0|7SYUR$RSH*gS*SV+uif=KJ?FkuE?-5EX_RzO;(E(XCm+w<@<*1c+Cfp2+taKi4` zE2@+}cnt!K904C_2o^fcrQmb7E5{!SgFMf#(6eJ8 zKye10(-16e95)ELr}s)i@X28cX$7Skm3)VsTCGsy#(JaRQ^1 z<|R5pIMy^(CHmv*QkBP>OaznF|J4cM4M$0Y$P5eB2n98~3Cz8HmMVJ+uIo5ru@}_y zf<=VK8&pC|H*nWjx~Vn%{-5in_aWeQQyUz>g{f}?6HWmCl(TD)ju4@z`*13Jaa9YI>{0(p zDsEm0E9^PcELfFFc~zDCI`d5&vC1}{S48*M{u&i=;V+3036b|r!qIKN>I7@@IEi36 zIgd;#@vpan6*fm^_R|PS`zNUqwno#ju(*4TBw^Z|NvZ@jU9VBm|ICFI_GBzuBnf## zCaU6{Jx-@$ot$eT#AKI~iirEMu0q;_x)MjM{Kz3#VNd4ie^gnw_K1S>E6>AZ<@z@@ z+`~S5Yc;H}xv*|Sov=lFrV#M=`;tn+rg5;sX4hBh-C+@}U1}7&V}?$nnABFBU=4W= zD{S`tW4VbC87DmVd}+N0Y9x={S4a;SA#o4$KQw@fC|=uM$08i-icJKoNSZ6D1TDMI z32xp-CnP*d&=AZ~>{2)~Zh*uhY;!&|2x-^4=?E5d;}2K?WtU47?8^r!lpH##;QDQc z4uboz^GkvV*5;U0BI1ImFh`e57AlTZ&mEq<=N^rO(fM0RqokLOVTCutr^ikzBH@4k zNFLF7fJURVwSU5jZ|a%PI3f0CwvJ%C|HzYsfWbR;LRf99i4e()K7keX$Qp7ARv7XA%_WuG{y%am<*(e4gyL^{5m@$wFF2Kzi++U_Zo>az zs!4De&pE-~cPy-MLZ34?bte7Ah32?4d^PCN)h+@M=9=gq8Disfgfn@j8{b@mC2VewgR3i?gW@rPw-vtI^I* zAHrTZPeQ}T3YlduC6#n%eTAJ@ZfI0ieejck5T(x>m{dkgPt*yH2HBk8_O6r&v9Dyh zPKfuv2rCrZXP&nw@5~k&u}L#)OB$_uZy|vd%^F1`F_SG)CCVpLq5M0~O(Zm(r1lKE zYIwmf_;-yTixrk!^*ljR|BW(n#Bye};RxZ_HeVwYPyAUD_Ux|75iH>4&jgX$EJT&O zoOzN)ssH?>O2}ISHC0ZnHW0#jraFN|jjO3ssc1a}Rv1~gjk zQSx&uRgC7#Od4g>>_CM@e~Bw>jxM^TBUt!njTGYU{0sp`@y**(5ydTTE0j*XOJGHp zJ$I&azHWNq;j_m?afEQSx-F@s^XfXG@c9u{Lf+&Akvd@^jRc?8Li57IGul5_#a5Xi zv52kl>QTpxYd@M;Sag!Q0urTndumjS$F(^^#)LRSIv1Q;m`$X5DLO~Y6wyG%eNfx|F4^R^yo&PZ)#f&ubbMz@Bg`OY7YUgn>yeC z{_=c%5S{=YQ(fXELIeixh80Rw;CzC}9l2bi;=a+2BZSa)=~OBz7QqT7@9FC%l|w6- zDy|IA!=&O#zJ?bIR12&Dj5@tOe`$x@Npd>a_9d^MZ}M4Dydi--LMeiR<_j< zEaQ{yumUoRr>T;-zmCG8+Y3Vg0|gB|?n&q8qG$_;#N6G_BuS4GRlMxJ4tjdP#^$#W`w+PDl^xtPy-Z%7PU( z=YOj11o&36a1)CtF4H89qFjF{L=1nxsq8-8LMOQE#j9eis15;+ikt4EBUnYZTq-QP zwtBT=i+{hOO3c3lG~6S~7k{Tp`4rDXw77hO8ts~pO<-A8&+{vzldmdepP%)DU+~=s z{XGx$!)xYH5e4IIl13@Dqjf^m_Hu%loAb9prGgik2(d4C9f9p_(_hEJN{hWXLKGiv zXcDr|Ch7#^Np%gu(#!@X75A1sI+gU-)FX=7Mmb8sWfmb=R@IS+CKErTLA63EZgT*b*v&-^@0#i0JEwbV6$8C{8GBG*Tj1+AFJp+*cN@)M!)~UQH5`9t|Rhxc0{(z~MQ|8t8gfPpOE4 z_1+L*^UlxJqgROMy>u+X*}t14g!$bx2`O_UVTIA>nYDBTD{j4%6MP$1u@EA^cXNaY zG^=U^$CM9sg@c!2g`=Dg%QS*xPr52`HTo!IclVPt%4z?Qib(nDHBQBOtd34_GzifM z6`fX^2oXK9txhGyW^yX|V>+o)crZa?VXguoBcr1mV6ig9_WM#vB7q9a)D zoNr-;%}E;%Doid~p<`h@{_}@d2feM5nKAI6EgegBUIS_ zkQ7OKN^FA(jQjg?Dupl3sNx)9AqdBxcWA_p{BX_m!ZQcB--i|896p&7TuZ+pu)J!S zI+cVfR*7K7ZuM%+Y~2p1;vBP7r&03DRRod$pq3hyuV27vWMr$yp-5@-wuVJy-WUig zz!>t8Dyd)HUP^O?L$zEQ6~~>^ z93jNOQ&|50byLs2z395BV>P^P>IA?4=ensg1iWtQf&=*5X4QT=o{5#@f6o!Z*x8c6 z)_v`HLqZnyQ6;NtCzJM6&RH!HtYp%+s^r$@svO!aRY|#ip1_LV-=llcnQMkfLglq@ zHA2G7=^Vkb(ymG>Srbnx#62wMRP-@RVTCs=Js_OGGQNCI$HI)>ze$4sH{+>@q{SCa zDywD;r^4L9!K!TNa{wlARM2;82;zg!Llm5&HcK3dl=NZ?f|blk(5OU}-G&uLJ`DyC zSc2aaiG}UV=%LE!McZ^NBD3hRDnnlhlUP{X>Zw#jc0JGI&UI_IPNV2J&(m?;hx<5{ z+}R1R!g;c5+f72kcb-@J&~K}8Dvl}h2}~yEDU^NU2NO7o541~yb!j^f2E3_ZVMQAa zoe*{JPl7o3*z+Wgz0{7=D09?Lu)^lURi~K<5zyfUC&c%_0Hc)JJ5cb~2FDbQuxI%y zSfRL=yut}Z7jH>I=IwDNAwn!7h>(=|8Wn5kK%G!HHeZ#LkN%ceL`1SsCADL3gNpHI zD@jOs$Mc@X6n539_`j8|knw|^Q^`EN!6ft_7o;QD!d`z-VYVidAV8U7Dbxvp*19Gk z;e;DjxOMBn+Zq+Cn4}X@#+j-lJbecO9G>u0jYL*8x5OeG{*`JJ7dF7e!gkJjMgb9}Jpv1)B=p~8|EXp%;9#Z8lt9-9O!+PibkR|j7doFQFi>G6O5_d6!MGJO^B4|bEzgjI_h7=*AlcB+zF zUW-%N((^r4c0TQ^Q%PGr9#%NK%sQ5eh`Rk$qcT6?0<3VOg{PMjSa$9q4GSv{ES3o2 zoEoO!_~EfmCH2TUjZjc+BuB7}#lobL>G=sgtoz)zA;97MVrw-DygXb|DSK-*Clt-u zNre^P9%WL=c=G@iv9H-EP9;CP$V9O8OEYzXGdPSBa>qZD2$Acf&dlP!ZKu=7-mDT< z7^OY;R>e3tTVi3cfA&$xNH|3hrJs(|a3rSP?XQY+MpX!~IV)5>{Df=2k1C~u>XPQ6If=_Fjag8uhzWqJV}=SJ;waH>Qo9?Yc)y^&!ZxoTcs+lgP(FQ zJSs8D7gj*%z*AI&JvWDn*kw7Y<471WEoj8j>WtK|u#JBo))B(#{zMWs{uXQ^So@_< zbVB6f5uD&0t4l)Bi6IJ!Kh@T;h!Xu1SpR$7^nto=>RJu2o4Ud8|G94J4gs&5df)&) zO}b;NiDzO5I*pQqkeEL`xOh&(B4Q%m)DbNE2Y-Ta{C?I#r6^Jr7U9rn#0t7vOdN^A zx85}n%+;_TLD(M5Q;^?1212CF43r4A?b;ZEFp4}+*~GvVCXU2D zTNfR{{9b=wBN#qoC1G_!J6Q3|n@R{Q{>})EO47ZN1QuxY*Qsos6$vYB&g@rLAv(p6 zV_^j)jU+o~qGk*Y5=!AspAgr6Mxsp473hm_sg!5a}Cc zaw=Kl{53+H*KZOb(w?kV#a3rJ$HM0N=1YXg9I#a77Rqpe(f%=!Cp^jTLrHSO)=4n3kvhM1`MolweW`IkJ*Q zB68bxol4Am!z7`gk>~DB_s-F%WN3X93dVKhRLYWdSm8!fn!bU8uUtPm#w4VSXbCHn zfLFfL32DXGOoZ55e-NyI)w_pjgi!l_lc4W)!wRFFGr|;tbI0mb(rWBB5iF`^D_CJq z)LG91X~q7*l12dyKG$hv`zp#L>}qd^6^_asxJW0!S5I<+%jX=dFiQFJiX_CZJ*iO8 zXcz>z3CH*6slZPs`B}rlg1R*%h}Bzv|x(1Se@Y-77_YJRgPe#_dkRc zu=8>oNr;a+&I!v8mgxxLn6|;Bl6Ix9BsfBCIzsIIVz{ZwwpTQQU*&a4aNe|-3jUpR zgeVx@)gT1*dalZf<*OmUts4{jC`_&~RZ=Ond+zWh!69mtTGB_2if-1UBJ$$)n4k~Y zM?Z|G!jgyX(5S5WsH%<-sjKE%5G-TI=aLW;*OMT^doI_ph_IWla0E+B-2p4W_v?uo zLd>l{L?^^_?=18msZn?9&6tbk?hFG<2%0~RYJG<*&LM)nmwbi$s^V-z+!<`9G} z^h1dw;V9w+7Q5q_iG^*s=zMN6w8qh@}1bQ!*2w{5>11rE?YrjTV^>b^9U}@Lu z5QMAaSq+OwN$$!Cd$!voA*Likm5^QP9%G?_9btlRVO%v0AwuT2lT`M`?$)Wenl|KA zg1>o65b06sAt8z;_B3gf`o=#xVbi_QlCX1Gdj;3IXBw6L_rHS`Zfi@OLj;lP^Qpul zvNpBW2&?~mp(9vY&J9k8JKczin45VI0*q|0y->*Q*PCMzA;E(U1WRjIA67u*Wv51P zeUL5@B7IIUfrVt;fdFOggWVG(y>hUpOJXyiAq!%2%l{qj{t% zz9*l;7P!$5?vKz3$y4T25n)?O6l`lEIgZ4En%$_dtiI1w30>P%rx72qUm<($EQy6B zUHOsdEA-$u{3?1{)GVK9O7B=2e^38~eWX$X-v zNScKBv@<#(*J}!_usLsn;Do)GHc3Kx#dB4RwpVp5B7F5}1=lcjLY7rFP?fm$R@egP zNn87-0)Nt%Q!$oTsAAs|Cb5Y0-EV6M<_ddc65>91P7sNqCdVRDXAUQ@iIICHm7I{C zI)bh2e4Gl?1`gy{M9u)u8y1#)MZ>~k8+krnX)pd!B_}FI(x_rN?UpPw# z{O9vco}U-qvl?DE^@893bKTS%0$w-u!2w)!j^3x?nOM<#oFhc^`344+sEZC&96oai z%(ZO^Okhvt?9&>8Rn|YRQ%V1*pGoC#N2jEc-KwKT<>1151mWLyg^ooWyY_~KkoM=_ zR9H%@w+O=4Vkt~uk4^uYEBx`7DydGJhJ~f(ekOXSn|mllCVCq6|68SDCw&ctpEGw(Gu4qHF8w#V8IbfJn@mC;N6EKgrCnL zRs0&LdqX&`6~Y8YDUEU^0zNsl#6rb3>@ciQ3g=bj1nZ)<8bWv<{lTD;H0V_-Y!kbw zV-X`OJhzp7;B8K&i7Q|N??_--m7e#apyMHqBbN2gVhch<+Un|5Vj6Xlghk<=M^w;``WhCo zYW*dX5cAeuN!a4!c|?VrX-y**a_tUG;LN*%x=Df&@{Ay?ar<>D_L}Wsg*^$*TNZ=} zyZ%HK=V{N2ihW$Hh9ef;Hr*iPckN3>6mGht;9haqLZj4)UYx*t^;9Kl#8FA5;I>_r z^d+M-EF#dT&k;<#y@Lw;wR3{RBKG*7Rb{*DT?kN0hWyGA?7%DIHA2b1?@|#FbB{rQ zQU2z>1d;PkZHOKJ4}QqoH(3{NV&Spppx)$Lnn zxeC^tPar_aY5oosvFZ3^6N|7m$V&*)Q z1Y6R21($0B0sdFSQ5G64yS0ELSaH7kP>S8D4>T&f7hTW^<)5~N751dB+DAnMw+@t8 zL_+gaSOH1yyBZ;^S4WOu`P2JJDh1b9>jc--&KAOsDe5E0;s%CtD#5WMGz5IDM`KB_ z=eN)ap-ropgtX!6eHR6`BM@No^vcBqQPK8G1B=N2GeINx_Nm~6s0Z6ri9VJA0gftp z?IabJ{LOtyCA(mafe?{nf6@qf$9L)k$5uaB;i&AuU!}rA&;7h*y0=CpVQoD%avt{P zSVUOIWvV#7d&R)Q+`jc-1r#NBrXrHV)#H$*uWLyok$+&iq&*eyzorqKJ14;kCxm}Z zlZ28HI;>Dq-?3N-1&4o;2>4v>B~>C1R&pxwU#!yz;k}lago#~eN`xqVd!Itl)>;-U ztZ;&+Aw=$!4`BtgexppGc(TT^u#DPQB;nwg1{xu|OuV z#MJrGLS@6ICY+F8XOm8dTijV9MES?373O{W$e`k!G~9w<&Q3L9g*};;bp&?!(=?8S zg{Xf@D{UG3V zQ-2)5CssVyZ7i<-PIbzUTYB#MQ4M0?)Nms~QH@Q)tQl|+mLoU&O9T@mTAEa*&w53b zf{%w2MAm0-=s04f-Xk?a;Cn%^!r_OLf^Qs_nwl)zW++G7#*c1CQiwes*u}PKv^)Bi(N;!O5Lx?>!hDw6( z>R(`mqr%IYDdZpMsACa{9WH7F!M?9g|EdMPnzcQEJ=E8Wy&{ z-A)}L97Dokh2q}1+9YJHszMMcoBo6VqZGDKBgEA`q~QOcrs+k8Z~BsosO%P?V_}Cs zZ!HPIj&N1-3l9)Pg|B)Zi0}rS(;nB?->Xqn>;i@8;_#g{<&uFo8Xe8n01du8%?$993g<8inNb(Fk(X2}vkQtVTsd9(tt8<~FT$8YT8= zpy2qyn^TEe`yoMWAJRgV!1W)PGzuT4p3NdPJ5<9WqNf*2Lgbh26k`kL|f;BXciiqp|gj31q|LTNZiPtmB@x_TQ3kvQ^mRSrB;CuFe~|CKZf z8TlcBeHvAyN>2P1jw4oB{<}^ni47r$=+iAUDjC)5aD>S1FdbGvz;@3&XfOF*QYkeG zbb_PDMFRo5qOkW+4U5QWXzB>I zdVM=8%--5cfd4nUvnq~DKN()QCtEwq30tO&(-H72|j(t>Ijzh##&A&yn0JRz`q()DA?sSlZv~=W=@C>8KIEW<2(e|tk3z23jExW z+8P$-+gsNOq36Fh2?bF-VTH}1$$eBw?>kS&!uG%RJ}1myu@qJ)-1fvmNSybZju5Lt z)SD`b61uBmeRGsUm5{9#yO$|1m>T@5_hdb?tsm#qq=I8iF}kS4kzJePaSEtlgVqfiD5Rp(8|gyIE93S+%w%mB=?b!3rb) zS-mv`bJy!{5+XNTP{r2B3IWgat!6<8m)8x0ievw4u)?Sy*YnZI`0fLa1^!pfcXUGb z^D&aJ^oK^U!sb+4Uz5t3(h>!KpXCtXsMXc35m>yur&IAc@|A&L>C<3AluQ|@5rY4E zMi3S4r$hM9byN55>gP8NfIsWDtsV%!|L3}C5Cpt#8jJ&Yd3Yt#0w;jK$Nrs<#*J9I=v~0}X^I|HNjYBBrm_s1%N?v>@1_eSb)VDE&XG?mIk+ste#S zAR+<^NEJ{AL5lP$O1UGwH>C@V^xmY`OA4U{(lNI-{*Jk%%<#a#y~d1M;la1_Fm>xa;m-oD~t}bnygB$H{Zmj4<4~wZhQ z*AT+ZvN&PctwkmwGO>e3$S9gXg}LV4v9Pe^SL#cISTd}hMkOIFL?^5Yx+oDMV*GK1 z^uFqXMHD?=0TVd z)d;N&?(r^&Rycgh_jroFaStYN<{j;ya|GKoEKCyi-uXl!y-XK_%I-?%IKlP1?`~U| z+d`GlElC=U%y(Mq1n=|{l8{<9iW73%zM>;U)Q7%@wb_3W1Snw@gEWQx{d5E~cg;1a z#C&?46OuER!U~%cfBu`m_(I?4t1EvSIASXnEz}Vr@=SG;N|s}`Meu*`0YOBK8D&uM zB<Is8|#e{Jx(HER1LhOF3Nh-2Qq=NUA1|}8}b?yrSOBi@s zmBnL&tTK3J&*h^UVb{@iIzsI4^arc}PxlN1!EA3#HmR%|eLyGhRCS}wGbKiqd4Kz! z2-y_h#PYfrU~}oq_BvtN*0Tf=urxwq5uQ=? zR9Uqt1p;hNS^bGgaNgc&A%uI_6P=LXs-=NoQ5`O61Y5{{SYc22o=+r|^s`QdR2yAE z!R2jyrbVNq)7>~i$J^P;y>9WQ48h#}Hui%KpU)o+}?2Sl|Vrs#9T}q8TO@v1h>#l2Dk{ zUnAJx`@|xo)%*)qI4XVcJXMlQqd1jqO+s`+azGCQAyUF#a6)0pEuB#M#YF?b#OnDL z75BNLu)^l3lT$Q8-qXznf~BtY>IB!M7YfOrZsu5oS#}hGIi@|-u)s?Vub?8_(>w|h z-MQzjUJrJ;eJ2q2$9%WJx)bN zr0*sQ(tOWjsbR0FJ@)N$EZofOhYxc?O5Ka9c%Gh8#ec&cg2@u$=Mc_oQL-f1Pk2t3#_omuT3|dP*h!g;@F&kR#e!Q3wt?@cGm2n zinn5-!oG3WXvFe68B|1Zvo$L2kSd%|y83ql+qgf$!ouv8CKw1||KlA=Si4}cDv@IgbSi0)hgAvRp24xO z;J@F36%bvIS%i3AOGk*QtxQ;9l;c&8OJS?KOj4OT>^eaNRBmEn5t-IFP6!>JLj_)q z?HU9aC6|O#5nHbRBB{LIfx`+Tb61*1)6Wn_Yhn(Gko! z#P^t6`fHd}qkx96!YJuVGlj^bUm93M{3eYP{A*uVW%uwH0xKP7D5U=Uw=9E)hxO@U zB1G=m$vPn>F;5~`;e_!7F{OMZ1xJI;97iJJ$PQRxPr{iI79s7o@djb)Yh?+-z9?5x zN#yaI;Qs7wi{SF#XA%-t%r^+`)mf5IXvPtQ``G}4%EY-JQel||{S+eKo2^FfE7SEd z_+~6UznMlN@~sd~WkCH@gW%`&=m_EO@qH@&JC>-D*83#K5exnI@BAZvTxwwvVPAbL zX=L1Z3M-Vz22TiVRl|G(3(LQH$|5*IcW^?%Vs&3-@dHC7l`UT$RoGSL9RrKV-&=-? zNZHUx$HG>>eM^;?G7JKgbn8uvkXyE$Le}X(iAC^wk2!*sw!Cc-b}lYeFn>6vVG%3O z_&!Z8&jpSJ{(ZrZumW82J1QbI)K8W4C$IZZ;hGMDTle;q1Q$C*fbX@Ph5%>Y_QMNR z!tVs>SXlD&u>`T)5C)aP{T)=6|w?|>E z{jx&b_$36kk=NAA;O33%eNX46vm+Ij^-VbgM{LsvClqY%OAuglT)F!ep|HGqe6ftC zr8*Y2)5w>E$n=v2At}6+BSh+|y;R_5#Gfc^um4Emh$XW693d9JF$PvB*_%UE8JKEO z5ucA5VSwOXw^=<-S=#7xG-5mYEz@x%k|um$5DMoWkOcp3*I^mD+R9sOGo#2TN z(FpbmzAtwHjanL5*w%_|6w-U;>QwS{^_(E$2BtxP+nQcw42?wImmZ0Q#SGqRAVm1- zOp8$b>PI?)g%u_$d{%y+L1n>N^+e5_S7%sQ#H`}>l1A~_mtlpH5?*W&a%@{v*-@>Y z#KI!m#ajg1$YWH*h|fAhfRWj#vV!-mAsmYc|0kcoQnp9ySXfYvKCl7`A{!bA;e0qu zQn5ugvk0O6N2=mDGeM`4S^g7PVYBCp`&5MYgZmnlJn^9)hy!azR)OP(-Em4w>oC5~9;`|2HJ zD^jPZ5~r(=A0^#7L{v2mENtuHu?m@TnnKQkzjPWE%~wx)EaTms5{pQmKOgb`*G=u) zccSa2Ughz+sW<%jpX;VR5b(OGFAm^oxX(BX&%_EQ(wX3&$;{hqP>Bib1}nb#pM(=w z&hr;{!ps~E)K47wv8yDc27OOp*|zNv z@V4H3VGtZ;K2s&-(K($;^eNv5FXLpX#KO{JJ92_;(<4LSvhULyvSEl$#ockM8m;Y7 zOHy%GKBEvjc^t6%5ow<$t5NBjS6~98#GG#}1lu~WAr+Q=c9o7rY)pDzl?^ld zsN$*DOw!2FK9m5ju*V_5=JeQI1m-^Okyu!AfO>aCuMgD|7)vixV$dkAiXB!sDr#?Q zi;(wykSZnLKA^%5PVY{Id9&Y>pnj}h;VlCpvR_=H0{`A>DiyZduMj3MiXLN85qpnT zkW|e4aRgQ{#rGB->c0mju-P$cnu3{rNbO13aE}U;ep4(E{GU?q7?V)+TW?7y@OFX~ zM#aV%ju6{3j!G(#Z%$Uot9ePM0zY}7O6JK|2x3#}SDZ!(@r&|E5 zFtR@=kq8l8@v%ikq`nO+j52=eN)Uk`Ox39*U#w#wL}`WTlFHuBO{lQKG<91dI_bz3Wo=jF43s$7{AM);$C@ok4DT{X`0&OepJbV8GI_+-6k;q1mAN)V($i$M)805hZSxs`DH&U zEa~U>3@Q;Vufhr=`{1@5A>6s@fzP6j_0_4!2z56W?oG8VDq~y3a>ByDZz*ip{sRO! zk84~HDlG6X^i4nd=<5lMxwx7ULk+{cX}B-${prA+YUKR&tiqm)y2O$2Z=9t{`2E&86?exg62bDXUxpQLw6#AKQMBm` zDxz>~IgTS?oB4)9?t;cT7Uo=fMU^cL+Da^<*SK5)i|w3kU}45EOGk*}OCc7)T|W?3 z7!`Cixhn0qDg@knU{UctsYqZM3A<>-_SX5$z!8fdS4u^MN|(ZxRq8EdnS;OAagT6* zI!hAP+s+YKQnv3sjS1<`X;gBoGpumJKz)ox#XC04pyHgkmLM|gykk+>?>eN);_sGe zSVZQ(FC6YoI&EQLX&?R|X|(f;shmnypD>G%;vcOMa=W=;h0TtjqXt6cmmi_Z-t8|H zlBcQH-YUO|F%IR zvrc~#!8`#4I$>X@`LIIC89Bp1!0%ZZj^+Qao7#0zzn`vOdAx4w4}bpWx@iCeylxtZ z19+-FpQ_=Rn8&(+XX+ z^I;E8#rwfwlaR7*poS2i2XB%Hmiz5-PH>%gp&`WTJDEBmZ{G})P;w@S3fs>oQ(>NX z-)C@U_lp+oaex1nf-9%4frXV`s-Yu9{D?^kMg3Y!Dw+MpYY0~GvHEDR{X^I2G)ifq zo}5H#%Li0g^5AriBUXA~f+}g#-4LMc8q(Mx6qJjWs#p;^LTqj_7gpF~Pa0wn%*B}s zg{j>+75j-VcTCGB8ZSt>gy-lR5jSZJk2tVYb>eb%OKVX{uzs|6HTu|JqywA<|O< zC1FoSOAW#J@gjxwe+@OM?CSpstT0;AYp+Cz_|q{KA$_iTFbdavKZ8o*hq;`r$q<~Dz76%%KhI=LTc-Cs;vC>5EYhr$f1?N zJ^535a)PVH2Nq#lY$>d8=HzVOb5vB~7dn;H!ZIcyCVaL+YX4OR6-V~l76N`B_^T#@ zMHGI@5n^xGtrnr+T$Ut6{h{7MwrJQK2(ZU7;02ACv&t(57Pd60I;;TK&Uk{D^@U+# zfuBb|rV(~MoogXj=BqUn@&_I?u!!&*HXXszPoI_w`)_Fok@03*0?Y2XOUJ@;Z>_fo z#by3cs1;V%pkkgFX(B{cqk0yV(o+{Xq2Ov49U;732Wkq}wweULGF1&#Vs>%_i+isj ztgv}{h5H1yFegZ2VKLVtRf+ws2SF6Q6K~*1q*n?x5iDa7POIF&rV>#)M+Z2M&sA@XJ{(x~j~b4w?r41Sv+(#C~DfIV5+R}^wb zsRxK~w7E%p*yd)b68A7$+ei%|ychd(LhA657J}J=4iiMon&S|lxW-2tgnfY%G(y_B z1RWvv&8lDl{&U^bR{frpLFMtfX)yfxpX;U}5b(NbC=TF%<`*}G7>vF|a~$(br=r2U=X!RSABDBUpZnx*QPE1+PJX z%}1&xNP;)8B1bUCoXxPpsNkb(3eJJ|IhD;f160{GSsGYa{*yZjuCyB#mB8;V!V05p zb<`(QbbU6@ppsfn-ECPw?gCYuulXLSArD_j+#|g2^w9~4J)gr0=h-_aks#7u_uZ#5 zRyib%f`0ghM$F;wdumKP;H8mB$x&w(Nfp0Tdmg^h8q=vY|ciAYX3bma|;u&P{+ju6iKeF-dT=PiZe+GAk? zM}72swIt-ne#r^0>bgP5jf%GjyzSSp!g=hnwWN|&{X+$JPDf6~Ui}%YuqSo2Nnq)< zuW>9aae@~T=x+cfMf;vrA#rA$Z zNoCW@bFjiun-d4CGIP!+Iu_;$s-cRfdnHw}pSLn-l-K?jDk5ddISq@*t2KxtSn>h& zk!SW7Z(CGCmX@fI_s6pkV2|B1PDhBu=BrfMHTpe{g@xUHM?;9OKJ0xT4IjAI zNzxu~xg)T`=7RJM214xE*g&VUV`jFblG0;1tgxqa!6uzh^x;8**mv%jiA5B4IAI}J zYV)43B1W9$goxD7RM~U;u7yPezd1k>cHHPp1zxVO3j`Q>s%Zuxc~Uwjq%6IsAz0dr zBNjpwrse4fmeRhqB&`3rn}HCEmoC%^(SdKm3VU+*P9zA&Qs1-hX2%qXBQc|TFP)GY zT}ogv3w&=_#+e`kM=W@NE(v)bF474pXMVB>&O_y?hy`zV<5)y~=$Ehp_8jdl5o`rp zV-T_?uZI;%LaiDE5jLcWfkmXe;nfIf^?bMP?dzn%JRko86W9}a=Y5G_#Z8`5VF?#{ zSy)8mZ@!x-`m9uqf{w-!gk#+nPJ0}!R;ZGp&5=}w&iB28(d)+9Oa=q z3*xucswAKKh0`cIc!nh8O@FK-L`r*UP$|4oA67UjYvTb<*tckufe<Ihae>oZ9uJ|+`Z*z6eEoD)3HyAqgFoPYqE3r1{Ia2=l^ zv53IrV>*H*@VQi2#)V=7i^zUdm5PXet)&{->I{GhjKaTpSB;9kQqLPAw8|ihMkT*| zLSR`n??8af1#cy)A{XA(so00Bd!{II&sD|ww@zRgJ$&bh{9_@<&CGuAfh45V9cvNX zHE+WTqlhybI6|cU`&SO$WlIbiWtB35uw|aGu)vjOyefeQ`cq*G^M_Mm@vIQGz@BBd zj#3fc2ZwYlZ2O=HixBsuI;^l~R-2s!xQg7yv9R6S-jjsPqb0Dyo_+6{9Pt0wP3_yO z*KZnD9?|1 zfk*9s*QnL>Nmrlf^xl)1zA?7L~`T>}!n z$l*!aBV2J0X^%*lIz-2j@Uz9J;v6!Cz+6vTDTJ0EEJ5(Cx@(P9acsHCv9Q>2)d?bM z>`e=cus6S_6ZW)wog>)(7Zw#(U~@_=V$s!VRD`R}*A^95g%DU_^X?Z1Bo$liI4Yu4 zzO<;sHhF`r-y4sU4$ju?aKX%j-6mnAX3@U{${9uJq!Ph4w zq4bt|b`kdUa5aip$vBPj0*6aNVdEAGuEeDV7O^N{4S@yiC{Uvn)jrl~6uD{+f%)Bg z9Rh521nj3G5-#1fs3iBWID+--xlIz5R~ZW{l;M@98we3HawezZjjk>UiB}fD3Zr$l zZwxBAXL~3_#5df?)+1;VX1P)RkOGD7@57 zAuZyHg+*+2pM(`Q%Wjo*LhjeE8ib+qrojrMsFBU6h$1aQQjrtp!wRF~u$u&7_g`yK zNoB%72>bjgsuZmFL&w5Ads=(p-SFczgk$}r_TrJ zgf(S@3_@tn7MxHpe4j*!7^@DffQT7?Q(>u7_i!risf}QT(eMgRg`~l+C~TPdE`d28 z{H2gl{k#Q&tG0yg1hI0!0~(2K=YG*~BuWn-HV`cG!%dQqTJ~d3$Zwu+5k`Ogseuso z&Eq)1Wc_tQ_R1ny;qb2tI&mrke|}Y`;vQSkqLOvMk%SOS9w>5sNL@<8lb56(%F%1O#mV<>Bp>VSA*=CO03jsE#T$`>&=I0$WDz4Lw z4MOs>XoJiD?r;U~QZBmRR7mD2pwGnBBXABox;?3M-TX zM-KzRiu>MD#WgQT$0BBbn$8LNkz*x-rEGei3fuMIv??*4_YEA0s5eIu*ph#L0dmHq zVK9MFlC7h{jDKI8D{EI(D$L<&#A#2-$s-0~#-K!LV(}SzRaSM z+35@?L?>>86*ezEZYcOS`jb;}wyLJe;#l9OC2?jSNh3$yi8K;(hg~wLB)l_961Fw1 zXCXvVYY!C>zhjMoh2@W$MG*EqgLNwFw?E{Byw92%2oVuHM5AJpNs>x_z!-yIztEWq zOWc_X0XC;>yJ{hrr}{+&r+!3Y5h1S>aRkfyvREN`U>pH{MEG?LMr=A zfc(f)8X+>%_kP*N*bFMRK1VshtF@Pe*l871vF}rFGuu_A4@}@ZC4JW#2oXE@iYm$9 zhwE5aO5%^45St$*38{yFBM83(XH^OB_nVF*5fxtqD`0KlO^Xm_8ag4me2~Jbl6;AU zMW5Wl2{FAtRb@*X--FNm>lXt@BE5SHSYdO9$vI)=#wV1v61&b`CBV0|ni#aFSKx<|uw>gsh4`Z}I+eK4;TA&dc*0dFt*P$n zEYNIeQf?9$l~V9(Y*zBfK(z+zR*=%p5oihjOqAjHN)V(pksCl4|YbgwPtQ2y^&#i%QGEYS>MK;0?N<6Z{T;p%Hp~2@4*cz9~mx^ZjZPi%7h`PbWA}|7jrDw0C}o74X#` z>WN5fsPUs3nFGJqY2kX3%JpYo$c6iKFMM z;yvLj8{ZAqaU?unzN6r-^1#9ZzooVqRzO^lKSzi~-~V7xam!9R!5;LULRxwH>I9#- zg#!#6iHtd|Eka;*2`ii@t4UWBTxC~H)(MLOD=Ih}{{;a?32i?h2-`EeLB*YNUniuL z`#};?TbJPokvg-6L4{2pMG)&AuTsVJy{^+J?V6Jy+-v+4@;hyW3EbA0a=#h~VJ`ep zr?UR~DM_W~w`UA0tNQ&-g=MrqYhe*v$NQeXvZmjH0HvVjc^$!0#=ovn$?le_%B=Ta zLV!K?&R$hgj^!&96nWK!}ZxW^+Qy%5OEo>VtPB zf~B48XCZ_)yOu<-;BObIl6fKt0u*O%p~BoYgB41DykgNP#d%Igh=dB23_^D2XRyLi zu^*l#h{%~QbSh@3?=!e))nAfI?9yadVRN!E%0h_DQ(tf@-bn)_A@0xfRD^pR2H4|V z_LC}`o*q-he!8)aBeo$cSe4e%QXwaJg#qd(7ItVrg+)idr?C0N78NyZH;siq|8w0m4gy{`jmH6ebN=xd6VJp7?xn*D zr`$R0eT|C!)B#Q=-dM+RBvOxGrxDwCueVO6=+<{8f|btg zBdH`m&D04;f12+r_rHYzdtAdFbA-qnw$C7#i_{%iI2T>ls07En0V`}y>v&Bn?73wS zB46zSD~z^;1gf&-hj5LG`?aG(rmZ?5v)yc1p_I)3p1=-H(R3`#`!L)jgx^>9U*T!i zP{ShfXTD(~*zT7$i^}GQ4;93S*#?!ANn0d>d9#9G1swjVf{qZ$L-Q;`(na-&V==$` zzCOqf?{OS4=kz)XC5`eRK*|61j7})&;G_b-&Ehbp5_N99MeugKE(xCR)V+>*o-Kd? zH)@;f8$~v%XwaUh$y3zGJfPlGp>J&BE5DQ|to+TZ5HhN*0fN7ktJY2u0%A)og>vgT zLPWgXUZau`*T^8GJ`dIr!Zvv%r;>Miq(MmOHdZ5i^=d0v;mmm{^K^vpq&=k~c3oIt zU|}1d+BCwv@2gmZsEQGi;OaBOB&5II3syKhvb2FkW%okgJu1202~Hz@bXQp6gz+_w z=v4M}$&pk_Y{OxNQPH&k0=(ev2%U<(dzgk0$*(pxsTAa#)d@vq>3IVFebaIWjfA^l zwnn4)L&J4~-%ocqLIge;M__wH9!ph9x2ckJ>Z*l>mHzZDtgyN0Ms0(TIiRsB(JkCM z7MAwaD;y!bXFae&$*nQmAUMkQAc&4TmqLI&<4!mT%p3EHP92Vyv zHuv476C97eQzgI0c@v9R$XZzhzudm6Bs+i7skowi&n?O0s&Fc?RmvC$=DDOkal-$D zL`kEszP_c?sN~d3jj(e6B#saP<$VwH%wNBeRLse~`_GbS-{&hk=c*bNja#qN9(VjO z6T$d?brf7^*df3PH$@#(BfFJrVPW=0dte2GzkA+?HK#ci;p!5oBba}{Y=esQd;}|u zypIlRghhW|Hwk9X+MLkg?+gO-j2Xhl^D{(X_>f^F(XMPcE$95;)i>epZe#8j(n5VDWF&=D-N*3TxD$UAY8%7UQZ z6%wv`I2N(BvhQwOT75nQDDEK}Ed(oEJzbT&JK++G2&ueY!P{jOfu+3u5yufLj2)^< zOw$Mm`1Z{EMnka8!``z9*{h2sLS#MjeN-cdmeaAY)JiUk5R%fyM2KA#5?}>v%Ra>k z`5n&~2)Q;{;i?R3W#j@63A&hMF+?&vjF0 z_3xV|l*j8Pe5K0&TsKXGfY(ivZ~*77cgBJf;9svi)Cr*%UX=(D5aEFp5I@G!5v*v^ zj|P?e(tVst>52xDitXBYi;6ot4punIGvEfNQc(UEf(YtZMnTm5(ZZ1!o6sLtICFN> zCOVbG9+xDQ85tW5DybJjEJE;M7bo}!2?N2_1{{YKko(4aR77N_nyNTtzDc9ZpH^B3 z(eBswl1kjkF0jH;T~jI&L>h0#u?R<#+a`kLceD&DIptD0f&YDhz?{BU?h@OM6zY>AE| zF)!#Atbpi-H4H*Q!wMRL$sSh~90MDeRKlOOq9XD?ZLW~W1WfSVx$wJ%5MejplLXiM zBURZlWHuF+a&an5U~^&9tp*|HSUD=fcJEJ4B{HTZ6?m=LfhHB3_o+e1+PDQ)Jbdy% zRSJI{Ohv5DP!ACn|9U00C*xqI+G9@+P$g#AEeV1z+W8GsiGOj_pb|2mmL!;C#={DG zHm>o#@u5o!)F|}Uw>plPZCQ~Ib!Qq>{I~Dmg!maPErdwucR-btTX!Hpnbm%QL@-xC zN1agE{iH>Romfv2b|fr@74{^ro6Qj-_v}1_;JzJiB3Q& zi~|n|A~srNYuDkD(&s+x0L&aDi~*2q$=ZR)Q7Y3)jS| zl1f&cwww^qv86>wJ9^nbu(WzxsW9)yKXWPz1~?3a2wZ6+uw^@Z?|bCGznJ%{o|v&&RG6buD~m>+k2MX!b{?K2siZ&fJ=?ghd#Erz?Sw+frN0f_!{Tl)q9T&Y zG~-x=$9u&=#d{vDj7R(>ImT+d)uH=SSObXi=A_k zAaZ*rOB{*xveym5#)dCcF^d*aVNpY>>ol^3O|b~>S)Ws3;TzPal0~|40&ii^eh>6db_UnYB~# z1n}>ha@?@ODW`8pRK@SqBUPe)J8aQtM*8Qfl#JPEU}4^VZ8<{3?D>(v_V&7IQ7P%( z7*^O*_-lPhC4XT66;YaU)SwbQbH9dQ_RW(CV$GjtB$ZXI&T)i@>+4c*9oVm9VQC8{ zQDL^77gWi4V=xurOsGXgBrN2b(w&_5nL2f{ov& z!3szYx^5yw_@oPx%8ovlErMg;6pfH}IY~!|RP8lb;ixe8Ym%@%<$y*=kfSVwaDO{O zQgIff6U5?_=NcAaZ&DdnIK1HTIh{&uk9kzYmTqe;EX?oVPpY_54Nhg(J>Qd4UZ?MA z#CGmIL?e-NB0yntjdlc9^6;@)25&2V(|51}N`fEis{9zEAy~%yx=ARi(i2wLs$?tz<(#W>1nMUy3>?RQ+_IMGelKv!_3d?BqCP73z-mB9nY@$p~?FmhELq$!LFwFoJLe52N- zMGbK8K;t*S5qRGy+b2~gy>li;Dl*U zk5Lh+f3?u5*ltaN6*k8{-c5x?{iJT4xf5EOI1($Oo6txEXOHGs*xtJrEQD~4ts@Ef z8E=^i%MTKmt@|GkV2}6H-wDh!u!n(#Wt<+MVDBElsYFbAWD;EaOB4crW*U`;# zUB;;d1g01S_rMEOM0nUsh19sKFoDh4qdw9JiT-mq!M%B=M6i%EdsNBcy>%*{4NFvs zYrIF5;JmFcfz9&TC>pWwaF@g)Qj05?gzVr>oRG40mO-#rJqIfs75(-HCPExiKNAFh zCA4UzPQ?>D5mwlfk~T&otQc+A3FdFlIU(nb5Ln^x^&cp(nA?|3Dt^QESO^wf)K{b8 zx>rjl6ztEE1V`1TzEV~ru-Oy+XvAE<>?4Ty<}0)^c%DR$KSzk*y5n?0;Y&@GqKJF~ z%d;;qaKvI8J%bfCe^sZaj$jFUjwocz{D@-_g_nMn2$s5FvO$Q_jwlp;y&nSXaV3wj z5G>`vT%AgKvP~79HI`#xC0{%w2+#IB1@~m%$FShyR1^1zv}L}#pIPS^1U&QTB!ghv z$aF$*$EC2sXv6l|Cc$&sBMF5S4ii|`FRdWJo@qUwD6DUgsgT`!62}osx$sO!h~*J` zVa0dw7q>+v`R;9199MtfSlFhT>On1%^WRdV;8T0mDE*3471zfTbP!xF@skoE94l5S z6r8V4U|FryomRwFJ`7u6bHU7wY7am7oqgz7OWcadWAN+@E`>QQ?{ClJ?kZ*3bz^%Wi z*poMLx1@5Q;S5gYP=%JNWHnj<0rtqp^DKnO4%=#|QhALk+aA9L0Y--|-;sojD5rs7 z8CxdlR9r!)Ekf#-ePM;o>F>PjD`(~#SePxkKCFP)C#_ZSA9Gr#5>c<%B&40FW)R%R zCrHAOYd2tpqZ0k9s4}$@T&tWY%Wf^tRqC~i9$&w_)%Yj;QC+{C%8K$!wQ?T>UFmeB79{9iD0pVN9YK# zWT8K-fZ)@(0zzN+Jp)B;pDU?^1st#l(IJzmu=vVPITp6KOIeFxpS0FMh^X~8NyWAH zITe<8r~(8SB{jURif6(gDlB_uxI*%b932Fgc$;ragebaQOTlxyl7WR~6i(0)!f(Y= z0*h?%y~F~)qNbch$nJcDBgD$rPe>|z&)kL;_T=|Zvk+qA!yi=Hn9PkO;PCT?Rq;w;p6rNiX<>6ADj!B@rUm3{Y?$Hw`M0?R8k;@Z8G%Btm%3`*SM! z=b{umW~zZjeDQD#fkj+?MWLvdx{I>DzF+Pxf;*g0qiOecl!5=?FCEq|kO+7gM)hTi z4c~dypfb4X7qG%;%ezMu(so5lD)vn_PFQ!r_l8A%7GYr#r6OC>C~Cq$PDs*^8wBqk z=OjV|46e%w5#RZqnqtWPgB2wq>gsI;eWnuvycynTK@f2l42w!s>`^LgPg$u*N60dG>#>urDa^|M3j)4_ z&$>_%MRS%?VFkT2IE@PD#_I^S?aiAO6_0C&DygsU(6F%GZOTc4z3Z=31TQJ05Ywf^ zqESTszjTE7^w!%3l{J;mDx^347y_IprA;zNh!WAvpt7@58m#!9_Bp0X{(F~Hu`e&w zal{T}Wm<%gb6i7++^%DFLTS$+3&Db;B6WnYuM07$xGN1;hz@w9tJ3IajbLxCz9@*) zBlis|#d|k!LPqPwIznWPKT1V-+wOw^CGYwRNr+xvjlj&6pXgXv*wNYq;VGzVVi8f9 zha`dp_1eg(>?|p=sO)O8N?~7{4jPsGSMzm*khdpTfd5=KeXOpVX2ONhx+Syl@@Up8 z_|KfmENb7e^ zX@G*Oq?T`6R8pVzs?^q*=5A#L_N9l=t|CuvkX zQ4=^Jv7h=fCGxfpkyzNIKb~rYjAr=WKuPPhRwpD~577|ftvgi-Z2iCvCKl!#cnwxS zjlC}=A^YZhjgWklnF!&wZBwvkM_O2zs5eMQh}73UBCxoxeun^~>?K?xMB+H#jjlVo zLZ_1P-4unyxK}kSEOgpsi4f_{8mrD5eOe?Xy0 zCF`tRM=y^Q4qN9&mc5pn9iNhQ;@(;&?GxJW~Y@ZAGp1q7VD zYY?|1IhTt#mE;oc33BLP|^DCoZ*BmMVEp7ffKYvqQ8-D6Tl23Ja+=nqy&snWa=jwWA$X$sN|- zq>AT4Uw)dTzybO+9F*x<=HTS zqr!V`d%SeRC zEb`q~!;7xzGz!g|1S=esH*hjRcyFGwu!wY{l|-HRKK?tCUC-{&<7f!aOW8V z!HSQ4EvXc(3WgQ-gctm35IoE7O9V>`9cU4X?1v3P`XJxk#*uxDV}YN|*kRHrYkxyk z(u6-1!TZm(Xq3{uyg>->^^=Ye^6q*9}-X`yMVPh;^4t z4U2Fme4rBwde|)l%gl195_05sgG%Zx-;+af(l}LItNKYArFSc%A%uIyIZmbILK3WS zo}@cY3jwdDw}OhuzhbHq_rXY2Qc?~YAozc~y&rKxY*Ds}5GDKD>jeMCe{uv%Fx8EU z^u1X$V(tqYOd9Q5d(}q&4WMxbKNu_0$w*Q zzyVyZ|5+PP0Pn{?H7r6(?g$+rvWIjxsl?1nw+Q+57D$8;?bQQ|90wGt+a!I5c%&QqwORHY(HUYHz<*!sgj9l_G7Y*uA+M@wQ6amP<;g!SWZ83^Xco&qbNIB2;> zu+=S1ygw&ocL}f%BKG@M8kHRzpHg9ayDoqL=W%^ASix^{l13%gy;u@b zKHH!ZcD($N6Y}yH6_GZvr=*g0#NY@KAO5#RNX>5|2_d5uHJhL zLioT@3Sm`$hJd3gkpz+R=U|;m*tuka2%nKfBlukr-4*gjXdDFJLV8@qBBYOhPa?$1 z3iUW4E#LRp&A+SDh}p|{O&qcK^364b*ivSiPG!AqGORFiNu+;fXqvE*!kEFs6FV+dU zH;2Fqn|FQxr9x`O4ki|s+`K9$Y(Cph!Smp%MrBX;UoC`~u&xxdgv2-nhyl1kRAonVE{ zn`Zc)ECZJBpdyM7{iM;z6PQDVrN80Uv51lKDix7xk1??@-eiY@yRfzz1%Eb5(#T!1 zNR@&ijdd(y_Xl${g5yGGSmE%IdYD2=)h8T_u-87IkRbn*RJ>!G5SSUb*q{=0_cEflr5>HmA!itCYG0Wh2(i3;W3OA8o{Y_5A(J4k!u{CZ$5PoZ`Ygoj(G0_ATzpf?6 z!oprJtID#?z7LDLQ4Ebl&mnpl_z%8Kurg30*z(Q86!^$n5THaZ_*+AWExU6hA-T~_ zRdx>@XkuZJ7k*bIe@`WeMZixizzQSJkye~AYIp@IBBsY^0xKCeSs}b(H3@<@b?S#Y zLU{Y#zP?A%YBSh5cp;ScB+iMLfj)_Bc1WR4HTT)5R zSw~m$P<_H!xWs#(kc{y4qBsput z3P+_+e`Fw7_UG!09ozL*fTYoyU%ufq3Mnap6*k+N`kpsZDjYVcq}8~<30a9-G=e>P z9TgV0?k+)i{G@>+W~HDpR9ygvL6B|%L=aR)dXbJ&6z(8RihzK0VF2k>dS@V& z1k!t*Eh(G2C56;`6M9hur3iw9AfQqNMHE54bIx6#=hHuO-{*JkOhU4|86nx-ZxCW0 z-=M;K|Ii--j2x$56$qa5#~zbPM%$AThIvTA!qa!1pu%&{$=e1`{4hhs5%c@7+8{*# zv75kC2hUNk@Yta?SYeNCMVcuwF2W$BdVh|LMf*j_QP$Ln5)+5qhb?e;!SgREfd5=K zdH$J^7@LXJUoH17HON4XH2*en&?M!mb$(SYedB zy^Vt42U^AHRI1_U+NrF5<298^<*9*!iYM)&K_#oj6jg3ae!DlEYj z3<367cFIcz9{)`kjriuSa}^qGF;43UW}DMlB}8s-tswY#&jnavv~TNKonV`kuM&dl zkCr8D>(?5U{4HO?3Y+7vG&2x9xaM|+ijjGS3afOTh5#eytNp2PpRf;gEG+X@jv(w@ zGgU?Kr0KJ$aN{-a16bax-rHuvo#wCw_M|&sp*_rTXRbu}!WR@Av58AZ=>%I$Gg)Fc zZZom)Ir)!tg5^jng-{eZPem|MR;&}8-@PCRL9K6V2wrrmr%EUuJ{(rq?CQTw5O%gb zry{s}{uu(B`!Em!>~WSA>4fTv0V;y;SoSj&zUQM54GW8$*j*tMJnySZG-+uNGP)g+ zCG+7I5{0?`FoB~|YF;x5$yeXe2zjHqPKZvi34+f#Lq))AS0tEJQd=~k!mO)T2rN8l znx8Cd`cy%HGw&T;q7l~i8z_r)#@hl*<*zU4RCw^YE(R9nvZi5zi|bw=3My%P+QSNE zbBm0+a!cd_Ws$+ zw9n-z_1JM8M?5V41z8Gu?^UT3HNGX0v%~wzv~)jY;)s>jeIyXP=;zxym84JCtAzMr zz6OHt+w%t%p3&z^9Sd_`T?8xOy*{rHc)P=2NhJOCzDlF;TaR@@(SfBVg2!|_p-@RZ zSw|;CEmloJTI)*&AtAVfPKZ47KtpiH$SRXiFgI7iXVPW^3v=yh1S{h0YAW2(?qe!E zbX=Iq(o**6gu>7cf{<}^kcQyN&RI zJ*gsiRN*aHVNb%^P@Ul0`Yl073reQKoqb&z7VddVehFC2IqxlDq~^V3h_OC1aSu!B zkfPA$NgwTo6^t*jh05NZ^JFQC*dkF-x2?qXz;gx&zD+#-Nk{Og z9>p3J&&E#$m2IC~*AXmpYrH~8nzV!pFaABvzyd$ZF2A_UHR(ka3(G240V|C5>|IA- z_J7)|SeUEu4T0d6g`b;LV$Xf26Y>uv3xa#{AOg?rS*c>-dm0Rrr7*CR3M>9DP{$F= z+0@ogukUe>jL9hkMyD+!6jg-Yw zu|mZWcNoJ=g1f4Yf`Gq$^H-@PjvlHLN{$&4;RRo5R2<2(R0J!&TrQ~O`_wk6l%@95 zsqAeq%^(yEl8+?Z{pqiQN0J6Hh`e!&DjcJ?ue{h#@oG|Ct<*B~r= z=T{xU?U&z{B{XFw1US5?B1j=*O*yI|cy&dD0r<~#Q&0K)O>1l8b<;X{`=9Hk^$_s7 zX#)=6O1J-770<-V3trO^JRl)PPzj$q(x8$S_K`xxIpvf}bmz9q0CM*~44SNER@EN(?piJazbbsFs*93;!~C5Kfi*+;V_{6nhX+Yl~DSQk04n1WCC;hFH^Cw>Uwz^f*ajR zURj0fU)diUsRoufoW*ePQu>Lzi;ID`HESV} zS1&@Rk}-I-O4yy^y>1FT`lNSvSz6l6?BKfndRL z&%+9b2ab6lOWu*0LYBYfSCHl2s;6OLmMdFL8byw2E2wx*$#03wai$3b*b^O@rxRRV zvlRp{p7o1K$eB4%M=<-+EQ5;vC|(v@z(awBx!V*=qz&X67CvEHZv(;j&@(#0x%(Sf zVYJsgAxoI$Q$eNhudOPARr!5O1+H^_sBlY`uPixRmYOy2aC=ZI4Z+fftkns5zg>qF zM%?>+7;r7)HffX*@PioWs^z8b!afGQ2u>R5$4>|L15v*ZK72K^Xu}VK`8q7clQGBM99)7 zd4^7-`0WQ_g`=!rlxbA<9S&5f%*jY4u%Ow02`ntEoxdzG^`j&*hJFSU7;Wq_g$j@V zU=bBAs#lpbTB=xdLiW1}DxqlpAp(z!X)a;E`yNc-!$`G$t`KaWzoQ}8gnoBn1#Hgq z)d|k8J|S>xn}-?}?o%FZB3Rkb7X%@-k)aco1pc5RxIM0pMEJno5McB4%u^;IvtLUc z!3*166$JNBrLwGDa0miyPD_p>@I5LQREiGB6SCZf|L9c0+gBQdn8TN-@JwTjN+n=s zwTa-K_5%dL9o(il^B7$d-4`gaD($pF;?|8t&owGhb8@Y+Iul zIu+x5rAa0E^!qBo811hh`1&`#h80k>tG-U)?E%C9%Xy9Rt3RT_O}&+5c$e}9lLclz`eR9q{b!V1OuzD<^ckIFSHET)nC;Cc3+OKHRlN7)q`tvZw8km&U;g?;@@96j>^_zo}qhjx|FGJm>I52(YIpM+ibjOZn)> zQ`>hiurTLFT@$D_~(!dqK#I zDNqpH{@QR^Twgy>sT62WWhwfmtxhFxPzPD6?~Wtz@+*(^8hFC;`#)<49#eC)K{(_- zEC{x2?;hv&Sd~hWW2J^*safY_NgaOx0+hspArcv_ymy-PlmQBj+}$q;1kajRQ>BuB ze4|Q64qMTQ#6h=kD3MWi^nxP`#XJl7MWc}J#$HJ;osucvcepOdcN$gciCpe}> z$r8}{V~HUTPpCNJ`Tm!61RK$9te_H6Gyql@Mch0}h2_2|?}cnr+C`H_eq-e07W}{E zc>@cJ{z={dd3wenmG)%5z!gGq_W*%l)%(AYh>9L#P>HdPByi7{BLo({e_3r ztAyY5%_4J#Di13fiDK-2e3!kQ!B%d)Roe;o_6bbn7paQon{RJdiv1c8Ma zk;4oG_gi~bCHU08PldTIEmp9wsL^$F1dqwCqf$xAsFo$S(FTcXU(9tNuKJ;E4_{5zww&$HMl9dOs}{@xBHY?q0%S1sIio>j)N~;-^t5?D3VL;^_FC z#NKyW8d$i!%Wa(y+5BwNFA-&!n1Hs*)Ora8QPuHjv50-x% z7Iyj{2ymX_;T1X|Jy_n&S>A6=Oe}m^8}DO(`r2)@hZhcY0F4FuR+Fyt12Pn@+#rBe8)r9_JGmWX4EX%8#59+24f z!Bzo+-w(}euM-Mu2dRY2#v?TZ{90BASOEr`A`rYZ^c)p#+xX5s zP9->#8xnZs*p(3A%+?|OOa%OTRiG@%eOl;Pc>3erRN$ZE`^%B*&#N?I`E!>ENN@rE zP<}k@uy$Udl2sBQN6rBgbSkbT2MEmb+D(m$ZG3YT0na@<09Jr|cWYU!U4JsESdX=$ z!pqK|QmB-7*kT~~tmm=?mEALPbt>rtHhJMXuTpU?sD>5JJUQcmNyUg$RYKvKcXb4d zoBFLnfbWAQVZmeh=VEDx_vutBI|rx)%L@k$1b6j*T?hRCbyM#?{pq@CYi+!4+6Hg` zbKSHZ0$w-mzyW-wb20>;i51?>GY~v}Zg*KMKVFr^`S42{riFt z_r#$QQX1!~2$r+Er!L`h239DR8eLVwyWh-}C89m9Fmk88Y9jcup*;x9+HQc3g{^)l zA6dEQNOu(r&;DdHf$dK!)2TRqjw7&$+ov@w%;?|PK=9ZV@|MVk4sb)j!#CDe2+^FnERcVbwYHj$5W+{DHxNA8;gYcb`_jSXmR|*q z*r5k$CZX`(zyDgex+aZyUXK+jj<_qcfsSCsjj99{-xfB7P?lIGOCr}aEX=trP$g6s z7Mchi)!F-Ckh7)r=c|Au}FmEijQbp$US--^I^+*Jb$D<2r3A$a1Q4X{GVQVpF-uJ@;Y zSkb-OrX01|Cumev5v&qCU;hCs92IJxCI}(l9Z?ZHe3!h#G9D`LaeQv|4H_}$qKO*r zVdb6jsqoSoHVAN(2uBqAdLc z!KMGCA$atY3py2_ua;3^`>q`oSa{ByC$Pd%^DZ8fCH43r9SaXQX{ZQhsorZ45-;_Z z$harp1&>sRzyvlYKPZ~MJIVziz_k`uC}C$WNksShQ^mqOOPUKpQ1%do;2gGH zMQ~g0m#_lT*2>3TUbwtIjo?Rh>nJ#4d3AgRVQX3gjgYl4MJ42ZI@&<+l#$^C=B#+4 zV_~^bEd`;h&O<6Zu4joX$>C8dj=1akOD2Nt&zVSt?Vn^Pa94Sdjw4=_`xmSL>#g<@ z1=V(eg=L<$st9fzdPOHpyB<(o;~0FFi$I;nPhBaGngG z1+wH;mFZY`*)T;R%*mZC;d(Mh#lno)uNVlP9rm{@)nj)GEX?nVX#}1Td5T87@XL-G zja;$C3WDpKt4%7I-3JRo+&Qa4$Qp1ORya@k`fm&b-#_)FN~N+!f=)=YOi&O!g_*)d+>BrxVz$&ME{rD$XZHmfZW>WGU%v zBk+o#g9Zrx8n9x5M#!&o*CZHij|f8EKZ;J+ymXC*;6*#qOhWwaFJOhk-CN}sfv4B@ zm!q`b`)D}gTN}^T2@xx9n+Ue$nCEeN-RwyBTDs+OUxmzMIl0kq`)w5Is!K!bx(Fs#RzS9Wy_s1Cs?s;h> z6<%uYq{51FZomYNGHT2a2=1O4st`PPpVJU5GGhd+c;@8p5>aoR*Qgkuv{MLq=eNj` z_SQIA$~yEDG>S=o+azRUJyZ$%w-1CBPG}2iBM50PTXaI!)U&db?JUu-aO>ojDuNji z-w^oB#oiBW)OVk0IO1vh$Lj>g#m5pmE>AM3L|48q5G-YT50#3aI?tq1IDVi`*fl^t z+VO&EnnERKerGu1tVgG%;N?}xE}JQq}K zd%TA`ynmm}tYL5IIAZbV8f%1rAE&7Zo;j%-fffIB+Qh<=mtWBke16|%vh4K?*0HdF z?!zRU@qrqZ^2pCkLeid3Rf28K1`WYC4y=Y1j*1?BS|aJYP6`(8Nw!NAI9|}Ou!R+u z4Fpf`{*x@zDyIr8jQjsCu_yOklS;;g$vUB8^=t#d#V5XkU@Pr!B3N*P^C}_t(_XN` zp1tMEu1G%E8Noq!ciSkU|ngOK)Kx{BagNskGv z{7e-DD2`3n6hiuhSQWvJj3^a^`0hJ&Lg8`m`|_-lXXXi`)|oisA|X-Go~)Qem5}(` zL|O72*%}sZJ%2$b?EUhfL{S4jlS<_WzYtjQtglooEb+Ng3HY&nfrW>4EQb}ac5pil z!QAaGs8qtQJ}?PU_gfO!z@lFTmAuW~Pk6%1E2%K!^=BH5>^Fj8g%hTA`%J>Im3))4Sd(mPZtj*p&7B>b~mr;_%xkwM64I#ok3cgRJZ;Ot*u z5|TzIO6;APtx|CudP_m@ywC6G2$r2Hzx}bQ>rR78Z2UJg;z_T}Rk85&_()mO`x*uo zmVR-eir{%OuIf}O7q1e8#3g=IxHkDV1lZ##J5Gi1Io_|AtEx4PSV@gT0{6fxMYNU3 z94T)|EcaTtf+N1aLv2`Lk7!Y-5z>9)Oa!+y8LJZ9`JYLoFAfz{tPdoZvtfG^3(Ict zgF&N|H(pk#WbOV@5OO}+PT)QhZm3ieB0n?;+@AmD`{&msQ*x~ca&^7+Dj z;3M6>#uwiH=eo%c0$w-y;{ZO8>gjYQ=33W7fiuB(xmq8<3g`B_>Tgg9x&8$emhk0| z1b#50rADKo_KHC8#H=w2m8#&sbttraSj z^t~etLOZ`{u)>+`ZAQzY4^7svu!!bg2|}K=u0rtZARknC>b@Fs0z`|oXpVkm8UYny5QXd>N2?4wW=Z&ND1!i-?H_zc;D-M{8kM~5Z>xm#866Em@U0(ZiLw3y0gf_GUlW9#>tCb7 z3+ly6l%0D{r_sSW8WyP~omp@9j7HvkF0@c?A>XD0f4wLd7zz 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 z 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ϐ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�*7#$UMU3FUtlIEwTDiPXY_O)7J}r!51PGCCC!hzmkT9C)L=a zB3Slczfxggds1~Q@Kat65tyU*RtT`ia^EFOc#?cAVJVkx3LJ6w*k>A{D5_9JFk_lk zVrXe01lY5_hp&cU=>zvl*#2w_0Y<_9e1>j`kLNwiX!*HGBmd^|)?n5jhUruazRgh) zjJJ`mnk=uvPKC$2`@jT7$<^DN2ySmP4pu0Rg`ZGi&OhE#u<(lI?KFbB@GB}TX_fr* zoX_958z!(PFzqaXm2~f5QrU9zia@ZK&`&f%;gqWcp1XLciG^psF;}r*OIrR{1h(o?xk-CsP9267&f^}rL6)6UdK1_N=Qcs3 z(!u*+g*}72%a4og+C7LyJiWmO61(eUnY1U-4_DZnzTtq5;Ld8fn#7t127)Q9mLSBK zo?Biw8>v)Me`_g6sk3V8RCf004=WrM-@gMD?&hf~m8b{R1cH}NTLmj1>r#|S2zwDH z2*$|U3L)}JZ4<#2WJ5fwh``B4b4d8p5y63%fgG%U>h zWmlcx8sH-kJbyy0M#!CJO6We4n!*aBl)Y&tf^Tp9 zo`%g`hnVJLMyRrJhT@bA?B_xQM=a!J2&{O* zSLGUEccb1qf(5Shl!#@EXvCZie^zNE>J*y62oQ!n{>;eS`f>n5*i z|L3}?5(K<%s*D48c~~|Tj)yl}_}(auu;b)riJhbJOe{QJd?OIdG1v1U9(w4OMGP%~ z3G8t^xT+&qdFy&AmE6Op1eN^MQyP`1F@H;ZvrOL7@NFFi7&v0ttE$5a=SdnMbV6+B z5DDLpS3rQ#rq7cI%(_o8v9R4;E^35`I)y61^4>**5ZPGK3904tV1>>5Ry~m=+rPCe z0a=Tv@YOq}QQ^A|g=ir7(`oxM0yicf*0FGXV+?`0dOy~%u$3pS!U|Y1*K>zEY$K>} z?^;()9Pxen4M9k6Iucgc><+5065=D?(FkGH{wraRh?R(c7z_S_MG7Y!Af6@SE~nBUZYjR2G}B=hdaiZVQi+e zu|!~}i4r;epXoHRUY%kPg6pj$@TB;uf=Y}r7gjhtXhmNQ!J|KGW>Se4o)@{$kvW1! zi;E}dgs}6?H3ZwN#hFxsynDb3C2-KcL%8#Y~~VjQcbQz`w-p;0M&yFIM1**RvBK=7d4<|>t>znrqf zk7*)H>gy#Yjq)RXy1>CcFUPdD2fD)d9x!0j#hm`pOp?f~CAHF{!xbE>ozaHW&gcj*@z)gk6iz3ItE= z^Cf}h=WUdw@;ARqg!JpCdErqTf|kJwo5SAwQl*lX|Gq2<^_%NdmY+DI5{&wu2Y>2; zk0HR}#*_?&5LGuqAb8xBdK#fHWe}`TB464x1j}l0K_a*6B^?Xj&t9p7XwTPw^PJt` z8kLkWHWR`8Eb{Tg^%KKoDVpxNzqa@C)@aWruNXNhZ1jbWg|FOiffWwlzi2Fhr_KG3 zEMFuI)@T%UVxb_Uy|q+D@GR?3RJfz#0uu{c-r*Rm0Bep3WulUwiHx~a{r?fQm!|aC47)B%Z^6b8jbe(OoSDVa?Qw) zNF02_q!PdBFP*To*FU#&NTk5R9k!!#FKD-`=j@)qMU zUvHD6oVHtZ8oBCv?&Z9L%>)*1+}Qq{6d5 z?I@8KUsup*Zc#mzaNzS98iJ+G-3BWlVfK1i91RcZRQ6BJr^1ci157F<9b#32rEhfw z!L8m4b%Lw@5{bCa220p0UZ`Gp=8(UhzzUn!zqLmr6#Up!C2Ss(3M=f19QI73V#%vy zQgKyF5CmTPl0;fmHi7e6ml5;UuI(~*Wc3;rztj6VoUQAH|37wQl{dV+YSe)7|M^wl z>s_x|-g6c%S~sujx_REK7p+)6bYK&&DgXb!de*`-pG{aWu`-+o|9|YrO1S*LbN}yK zeG>=&`t{FSnmcRFtS&2;Ed9Sn|L>XW|Le#N@KOA8wCDXCJF;4}4?UY&R_Xlzw$u9q l|LdQ1lV@@cPJzGRxazo$J}3WoC2CcxVXF-Phx_H;{|`;^Lt+2` literal 0 HcmV?d00001 From 68cef28a88a74cbd8118d8db1c14280abec3c171 Mon Sep 17 00:00:00 2001 From: Aya-AlJafari Date: Thu, 2 Jun 2022 13:23:00 +0300 Subject: [PATCH 32/37] Adding TTS Tutorials (#1584) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adding inferencing notebook * added multispeaker explanation and usecase and renamed the file * Adding training tutorial * fixed dummy paths * fixed review comments * fixed metadata extension Co-authored-by: Eren Gรถlge --- notebooks/Tutorial_1_use-pretrained-TTS.ipynb | 272 +++++++++++ ...utorial_2_train_your_first_TTS_model.ipynb | 454 ++++++++++++++++++ 2 files changed, 726 insertions(+) create mode 100644 notebooks/Tutorial_1_use-pretrained-TTS.ipynb create mode 100644 notebooks/Tutorial_2_train_your_first_TTS_model.ipynb diff --git a/notebooks/Tutorial_1_use-pretrained-TTS.ipynb b/notebooks/Tutorial_1_use-pretrained-TTS.ipynb new file mode 100644 index 00000000..87d04c49 --- /dev/null +++ b/notebooks/Tutorial_1_use-pretrained-TTS.ipynb @@ -0,0 +1,272 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "45ea3ef5", + "metadata": { + "tags": [] + }, + "source": [ + "# Easy Inferencing with ๐Ÿธ TTS โšก\n", + "\n", + "#### You want to quicly synthesize speech using Coqui ๐Ÿธ TTS model?\n", + "\n", + "๐Ÿ’ก: Grab a pre-trained model and use it to synthesize speech using any speaker voice, including yours! โšก\n", + "\n", + "๐Ÿธ TTS comes with a list of pretrained models and speaker voices. You can even start a local demo server that you can open it on your favorite web browser and ๐Ÿ—ฃ๏ธ .\n", + "\n", + "In this notebook, we will: \n", + "```\n", + "1. List available pre-trained ๐Ÿธ TTS models\n", + "2. Run a ๐Ÿธ TTS model\n", + "3. Listen to the synthesized wave ๐Ÿ“ฃ\n", + "4. Run multispeaker ๐Ÿธ TTS model \n", + "```\n", + "So, let's jump right in!\n" + ] + }, + { + "cell_type": "markdown", + "id": "a1e5c2a5-46eb-42fd-b550-2a052546857e", + "metadata": {}, + "source": [ + "## Install ๐Ÿธ TTS โฌ‡๏ธ" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa2aec77", + "metadata": {}, + "outputs": [], + "source": [ + "! pip install -U pip\n", + "! pip install TTS" + ] + }, + { + "cell_type": "markdown", + "id": "8c07a273", + "metadata": {}, + "source": [ + "## โœ… List available pre-trained ๐Ÿธ TTS models\n", + "\n", + "Coqui ๐ŸธTTS comes with a list of pretrained models for different model types (ex: TTS, vocoder), languages, datasets used for training and architectures. \n", + "\n", + "You can either use your own model or the release models under ๐ŸธTTS.\n", + "\n", + "Use `tts --list_models` to find out the availble models.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "608d203f", + "metadata": {}, + "outputs": [], + "source": [ + "! tts --list_models" + ] + }, + { + "cell_type": "markdown", + "id": "ed9dd7ab", + "metadata": {}, + "source": [ + "## โœ… Run a ๐Ÿธ TTS model\n", + "\n", + "#### **First things first**: Using a release model and default vocoder:\n", + "\n", + "You can simply copy the full model name from the list above and use it \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc9e4608-16ec-4dcd-bd6b-bd10d62286f8", + "metadata": {}, + "outputs": [], + "source": [ + "!tts --text \"hello world\" \\\n", + "--model_name \"tts_models/en/ljspeech/glow-tts\" \\\n", + "--out_path output.wav\n" + ] + }, + { + "cell_type": "markdown", + "id": "0ca2cb14-1aba-400e-a219-8ce44d9410be", + "metadata": {}, + "source": [ + "## ๐Ÿ“ฃ Listen to the synthesized wave ๐Ÿ“ฃ" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fe63ef4-9284-4461-9dda-1ca7483a8f9b", + "metadata": {}, + "outputs": [], + "source": [ + "import IPython\n", + "IPython.display.Audio(\"output.wav\")" + ] + }, + { + "cell_type": "markdown", + "id": "5e67d178-1ebe-49c7-9a47-0593251bdb96", + "metadata": {}, + "source": [ + "### **Second things second**:\n", + "\n", + "๐Ÿ”ถ A TTS model can be either trained on a single speaker voice or multispeaker voices. This training choice is directly reflected on the inference ability and the available speaker voices that can be used to synthesize speech. \n", + "\n", + "๐Ÿ”ถ If you want to run a multispeaker model from the released models list, you can first check the speaker ids using `--list_speaker_idx` flag and use this speaker voice to synthesize speech." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87b18839-f750-4a61-bbb0-c964acaecab2", + "metadata": {}, + "outputs": [], + "source": [ + "# list the possible speaker IDs.\n", + "!tts --model_name \"tts_models/en/vctk/vits\" \\\n", + "--list_speaker_idxs \n" + ] + }, + { + "cell_type": "markdown", + "id": "c4365a9d-f922-4b14-88b0-d2b22a245b2e", + "metadata": {}, + "source": [ + "## ๐Ÿ’ฌ Synthesize speech using speaker ID ๐Ÿ’ฌ" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52be0403-d13e-4d9b-99c2-c10b85154063", + "metadata": {}, + "outputs": [], + "source": [ + "!tts --text \"Trying out specific speaker voice\"\\\n", + "--out_path spkr-out.wav --model_name \"tts_models/en/vctk/vits\" \\\n", + "--speaker_idx \"p341\"" + ] + }, + { + "cell_type": "markdown", + "id": "894a560a-f9c8-48ce-aaa6-afdf516c01f6", + "metadata": {}, + "source": [ + "## ๐Ÿ“ฃ Listen to the synthesized speaker specific wave ๐Ÿ“ฃ" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ed485b0a-dfd5-4a7e-a571-ebf74bdfc41d", + "metadata": {}, + "outputs": [], + "source": [ + "import IPython\n", + "IPython.display.Audio(\"spkr-out.wav\")" + ] + }, + { + "cell_type": "markdown", + "id": "84636a38-097e-4dad-933b-0aeaee650e92", + "metadata": {}, + "source": [ + "๐Ÿ”ถ If you want to use an external speaker to synthesize speech, you need to supply `--speaker_wav` flag along with an external speaker encoder path and config file, as follows:" + ] + }, + { + "cell_type": "markdown", + "id": "cbdb15fa-123a-4282-a127-87b50dc70365", + "metadata": {}, + "source": [ + "First we need to get the speaker encoder model, its config and a referece `speaker_wav`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e54f1b13-560c-4fed-bafd-e38ec9712359", + "metadata": {}, + "outputs": [], + "source": [ + "!wget https://github.com/coqui-ai/TTS/releases/download/speaker_encoder_model/config_se.json\n", + "!wget https://github.com/coqui-ai/TTS/releases/download/speaker_encoder_model/model_se.pth.tar\n", + "!wget https://github.com/coqui-ai/TTS/raw/speaker_encoder_model/tests/data/ljspeech/wavs/LJ001-0001.wav" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6dac1912-5054-4a68-8357-6d20fd99cb10", + "metadata": {}, + "outputs": [], + "source": [ + "!tts --model_name tts_models/multilingual/multi-dataset/your_tts \\\n", + "--encoder_path model_se.pth.tar \\\n", + "--encoder_config config_se.json \\\n", + "--speaker_wav LJ001-0001.wav \\\n", + "--text \"Are we not allowed to dim the lights so people can see that a bit better?\"\\\n", + "--out_path spkr-out.wav \\\n", + "--language_idx \"en\"" + ] + }, + { + "cell_type": "markdown", + "id": "92ddce58-8aca-4f69-84c3-645ae1b12e7d", + "metadata": {}, + "source": [ + "## ๐Ÿ“ฃ Listen to the synthesized speaker specific wave ๐Ÿ“ฃ" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc889adc-9c71-4232-8e85-bfc8f76476f4", + "metadata": {}, + "outputs": [], + "source": [ + "import IPython\n", + "IPython.display.Audio(\"spkr-out.wav\")" + ] + }, + { + "cell_type": "markdown", + "id": "29101d01-0b01-4153-a216-5dae415a5dd6", + "metadata": {}, + "source": [ + "## ๐ŸŽ‰ Congratulations! ๐ŸŽ‰ You now know how to use a TTS model to synthesize speech! \n", + "Follow up with the next tutorials to learn more adnavced material." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Tutorial_2_train_your_first_TTS_model.ipynb b/notebooks/Tutorial_2_train_your_first_TTS_model.ipynb new file mode 100644 index 00000000..7f324bec --- /dev/null +++ b/notebooks/Tutorial_2_train_your_first_TTS_model.ipynb @@ -0,0 +1,454 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f79d99ef", + "metadata": {}, + "source": [ + "# Train your first ๐Ÿธ TTS model ๐Ÿ’ซ\n", + "\n", + "### ๐Ÿ‘‹ Hello and welcome to Coqui (๐Ÿธ) TTS\n", + "\n", + "The goal of this notebook is to show you a **typical workflow** for **training** and **testing** a TTS model with ๐Ÿธ.\n", + "\n", + "Let's train a very small model on a very small amount of data so we can iterate quickly.\n", + "\n", + "In this notebook, we will:\n", + "\n", + "1. Download data and format it for ๐Ÿธ TTS.\n", + "2. Configure the training and testing runs.\n", + "3. Train a new model.\n", + "4. Test the model and display its performance.\n", + "\n", + "So, let's jump right in!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa2aec78", + "metadata": {}, + "outputs": [], + "source": [ + "## Install Coqui TTS\n", + "! pip install -U pip\n", + "! pip install TTS" + ] + }, + { + "cell_type": "markdown", + "id": "be5fe49c", + "metadata": {}, + "source": [ + "## โœ… Data Preparation\n", + "\n", + "### **First things first**: we need some data.\n", + "\n", + "We're training a Text-to-Speech model, so we need some _text_ and we need some _speech_. Specificially, we want _transcribed speech_. The speech must be divided into audio clips and each clip needs transcription. More details about data requirements such as recording characteristics, background noise abd vocabulary coverage can be found in the [๐ŸธTTS documentation](https://tts.readthedocs.io/en/latest/formatting_your_dataset.html).\n", + "\n", + "If you have a single audio file and you need to **split** it into clips. It is also important to use a lossless audio file format to prevent compression artifacts. We recommend using **wav** file format.\n", + "\n", + "The data format we will be adopting for this tutorial is taken from the widely-used **LJSpeech** dataset, where **waves** are collected under a folder:\n", + "\n", + "\n", + "/wavs
\n", + "  | - audio1.wav
\n", + "  | - audio2.wav
\n", + "  | - audio3.wav
\n", + " ...
\n", + "
\n", + "\n", + "and a **metadata.csv** file will have the audio file name in parallel to the transcript, delimited by `|`: \n", + " \n", + "\n", + "# metadata.csv
\n", + "audio1|This is my sentence.
\n", + "audio2|This is maybe my sentence.
\n", + "audio3|This is certainly my sentence.
\n", + "audio4|Let this be your sentence.
\n", + "...\n", + "
\n", + "\n", + "In the end, we should have the following **folder structure**:\n", + "\n", + "\n", + "/MyTTSDataset
\n", + " |
\n", + " | -> metadata.txt
\n", + " | -> /wavs
\n", + "  | -> audio1.wav
\n", + "  | -> audio2.wav
\n", + "  | ...
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "69501a10-3b53-4e75-ae66-90221d6f2271", + "metadata": {}, + "source": [ + "๐ŸธTTS already provides tooling for the _LJSpeech_. if you use the same format, you can start training your models right away.
\n", + "\n", + "After you collect and format your dataset, you need to check two things. Whether you need a **_formatter_** and a **_text_cleaner_**.
The **_formatter_** loads the text file (created above) as a list and the **_text_cleaner_** performs a sequence of text normalization operations that converts the raw text into the spoken representation (e.g. converting numbers to text, acronyms, and symbols to the spoken format).\n", + "\n", + "If you use a different dataset format then the LJSpeech or the other public datasets that ๐ŸธTTS supports, then you need to write your own **_formatter_** and **_text_cleaner_**." + ] + }, + { + "cell_type": "markdown", + "id": "e7f226c8-4e55-48fa-937b-8415d539b17c", + "metadata": {}, + "source": [ + "## โณ๏ธ Loading your dataset\n", + "Load one of the dataset supported by ๐ŸธTTS.\n", + "\n", + "We will start by defining dataset config and setting LJSpeech as our target dataset and define its path.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "b3cb0191-b8fc-4158-bd26-8423c2a8ba66", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# BaseDatasetConfig: defines name, formatter and path of the dataset.\n", + "from TTS.tts.configs.shared_configs import BaseDatasetConfig\n", + "\n", + "output_path = \"tts_train_dir\"\n", + "if not os.path.exists(output_path):\n", + " os.makedirs(output_path)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae6b7019-3685-4b48-8917-c152e288d7e3", + "metadata": {}, + "outputs": [], + "source": [ + "# Download and extract LJSpeech dataset.\n", + "\n", + "!wget -O $output_path/LJSpeech-1.1.tar.bz2 https://data.keithito.com/data/speech/LJSpeech-1.1.tar.bz2 \n", + "!tar -xf $output_path/LJSpeech-1.1.tar.bz2 -C $output_path" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "76cd3ab5-6387-45f1-b488-24734cc1beb5", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_config = BaseDatasetConfig(\n", + " name=\"ljspeech\", meta_file_train=\"metadata.csv\", path=os.path.join(output_path, \"LJSpeech-1.1/\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ae82fd75", + "metadata": {}, + "source": [ + "## โœ… Train a new model\n", + "\n", + "Let's kick off a training run ๐Ÿš€๐Ÿš€๐Ÿš€.\n", + "\n", + "Deciding on the model architecture you'd want to use is based on your needs and available resources. Each model architecture has it's pros and cons that define the run-time efficiency and the voice quality.\n", + "We have many recipes under `TTS/recipes/` that provide a good starting point. For this tutorial, we will be using `GlowTTS`." + ] + }, + { + "cell_type": "markdown", + "id": "f5876e46-2aee-4bcf-b6b3-9e3c535c553f", + "metadata": {}, + "source": [ + "We will begin by initializing the model training configuration." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5483ca28-39d6-49f8-a18e-4fb53c50ad84", + "metadata": {}, + "outputs": [], + "source": [ + "# GlowTTSConfig: all model related values for training, validating and testing.\n", + "from TTS.tts.configs.glow_tts_config import GlowTTSConfig\n", + "config = GlowTTSConfig(\n", + " batch_size=32,\n", + " eval_batch_size=16,\n", + " num_loader_workers=4,\n", + " num_eval_loader_workers=4,\n", + " run_eval=True,\n", + " test_delay_epochs=-1,\n", + " epochs=100,\n", + " text_cleaner=\"phoneme_cleaners\",\n", + " use_phonemes=True,\n", + " phoneme_language=\"en-us\",\n", + " phoneme_cache_path=os.path.join(output_path, \"phoneme_cache\"),\n", + " print_step=25,\n", + " print_eval=False,\n", + " mixed_precision=True,\n", + " output_path=output_path,\n", + " datasets=[dataset_config],\n", + " save_step=1000,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b93ed377-80b7-447b-bd92-106bffa777ee", + "metadata": {}, + "source": [ + "Next we will initialize the audio processor which is used for feature extraction and audio I/O." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1b12f61-f851-4565-84dd-7640947e04ab", + "metadata": {}, + "outputs": [], + "source": [ + "from TTS.utils.audio import AudioProcessor\n", + "ap = AudioProcessor.init_from_config(config)" + ] + }, + { + "cell_type": "markdown", + "id": "1d461683-b05e-403f-815f-8007bda08c38", + "metadata": {}, + "source": [ + "Next we will initialize the tokenizer which is used to convert text to sequences of token IDs. If characters are not defined in the config, default characters are passed to the config." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "014879b7-f18d-44c0-b24a-e10f8002113a", + "metadata": {}, + "outputs": [], + "source": [ + "from TTS.tts.utils.text.tokenizer import TTSTokenizer\n", + "tokenizer, config = TTSTokenizer.init_from_config(config)" + ] + }, + { + "cell_type": "markdown", + "id": "df3016e1-9e99-4c4f-94e3-fa89231fd978", + "metadata": {}, + "source": [ + "Next we will load data samples. Each sample is a list of ```[text, audio_file_path, speaker_name]```. You can define your custom sample loader returning the list of samples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cadd6ada-c8eb-4f79-b8fe-6d72850af5a7", + "metadata": {}, + "outputs": [], + "source": [ + "from TTS.tts.datasets import load_tts_samples\n", + "train_samples, eval_samples = load_tts_samples(\n", + " dataset_config,\n", + " eval_split=True,\n", + " eval_split_max_size=config.eval_split_max_size,\n", + " eval_split_size=config.eval_split_size,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "db8b451e-1fe1-4aa3-b69e-ab22b925bd19", + "metadata": {}, + "source": [ + "Now we're ready to initialize the model.\n", + "\n", + "Models take a config object and a speaker manager as input. Config defines the details of the model like the number of layers, the size of the embedding, etc. Speaker manager is used by multi-speaker models." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac2ffe3e-ad0c-443e-800c-9b076ee811b4", + "metadata": {}, + "outputs": [], + "source": [ + "from TTS.tts.models.glow_tts import GlowTTS\n", + "model = GlowTTS(config, ap, tokenizer, speaker_manager=None)" + ] + }, + { + "cell_type": "markdown", + "id": "e2832c56-889d-49a6-95b6-eb231892ecc6", + "metadata": {}, + "source": [ + "Trainer provides a generic API to train all the ๐ŸธTTS models with all its perks like mixed-precision training, distributed training, etc." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f609945-4fe0-4d0d-b95e-11d7bfb63ebe", + "metadata": {}, + "outputs": [], + "source": [ + "from trainer import Trainer, TrainerArgs\n", + "trainer = Trainer(\n", + " TrainerArgs(), config, output_path, model=model, train_samples=train_samples, eval_samples=eval_samples\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "5b320831-dd83-429b-bb6a-473f9d49d321", + "metadata": {}, + "source": [ + "### AND... 3,2,1... START TRAINING ๐Ÿš€๐Ÿš€๐Ÿš€" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4c07f99-3d1d-4bea-801e-9f33bbff0e9f", + "metadata": {}, + "outputs": [], + "source": [ + "trainer.fit()" + ] + }, + { + "cell_type": "markdown", + "id": "4cff0c40-2734-40a6-a905-e945a9fb3e98", + "metadata": {}, + "source": [ + "#### ๐Ÿš€ Run the Tensorboard. ๐Ÿš€\n", + "On the notebook and Tensorboard, you can monitor the progress of your model. Also Tensorboard provides certain figures and sample outputs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a85cd3b-1646-40ad-a6c2-49323e08eeec", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install tensorboard\n", + "!tensorboard --logdir=tts_train_dir" + ] + }, + { + "cell_type": "markdown", + "id": "9f6dc959", + "metadata": {}, + "source": [ + "## โœ… Test the model\n", + "\n", + "We made it! ๐Ÿ™Œ\n", + "\n", + "Let's kick off the testing run, which displays performance metrics.\n", + "\n", + "We're committing the cardinal sin of ML ๐Ÿ˜ˆ (aka - testing on our training data) so you don't want to deploy this model into production. In this notebook we're focusing on the workflow itself, so it's forgivable ๐Ÿ˜‡\n", + "\n", + "You can see from the test output that our tiny model has overfit to the data, and basically memorized this one sentence.\n", + "\n", + "When you start training your own models, make sure your testing data doesn't include your training data ๐Ÿ˜…" + ] + }, + { + "cell_type": "markdown", + "id": "99fada7a-592f-4a09-9369-e6f3d82de3a0", + "metadata": {}, + "source": [ + "Let's get the latest saved checkpoint. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6dd47ed5-da8e-4bf9-b524-d686630d6961", + "metadata": {}, + "outputs": [], + "source": [ + "import glob, os\n", + "output_path = \"tts_train_dir\"\n", + "ckpts = sorted([f for f in glob.glob(output_path+\"/*/*.pth\")])\n", + "configs = sorted([f for f in glob.glob(output_path+\"/*/*.json\")])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd42bc7a", + "metadata": {}, + "outputs": [], + "source": [ + " !tts --text \"Text for TTS\" \\\n", + " --model_path $test_ckpt \\\n", + " --config_path $test_config \\\n", + " --out_path out.wav" + ] + }, + { + "cell_type": "markdown", + "id": "81cbcb3f-d952-469b-a0d8-8941cd7af670", + "metadata": {}, + "source": [ + "## ๐Ÿ“ฃ Listen to the synthesized wave ๐Ÿ“ฃ" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0000bd6-6763-4a10-a74d-911dd08ebcff", + "metadata": {}, + "outputs": [], + "source": [ + "import IPython\n", + "IPython.display.Audio(\"out.wav\")" + ] + }, + { + "cell_type": "markdown", + "id": "13914401-cad1-494a-b701-474e52829138", + "metadata": {}, + "source": [ + "## ๐ŸŽ‰ Congratulations! ๐ŸŽ‰ You now have trained your first TTS model! \n", + "Follow up with the next tutorials to learn more advanced material." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "950d9fc6-896f-4a2c-86fd-8fd1fcbbb3f7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From f09ea11c71e70eded15bc637786048095a71d096 Mon Sep 17 00:00:00 2001 From: WeberJulian Date: Wed, 8 Jun 2022 14:31:03 +0200 Subject: [PATCH 33/37] Internal formatter (#1629) * Add coqui formatter * Make style --- TTS/tts/datasets/formatters.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/TTS/tts/datasets/formatters.py b/TTS/tts/datasets/formatters.py index ac9e87dc..1e95c60f 100644 --- a/TTS/tts/datasets/formatters.py +++ b/TTS/tts/datasets/formatters.py @@ -5,6 +5,7 @@ from glob import glob from pathlib import Path from typing import List +import pandas as pd from tqdm import tqdm ######################## @@ -12,6 +13,34 @@ from tqdm import tqdm ######################## +def coqui(root_path, meta_file, ignored_speakers=None): + """Interal dataset formatter.""" + metadata = pd.read_csv(os.path.join(root_path, meta_file), sep="|") + assert all(x in metadata.columns for x in ["audio_file", "text"]) + speaker_name = None if "speaker_name" in metadata.columns else "coqui" + emotion_name = None if "emotion_name" in metadata.columns else "neutral" + items = [] + not_found_counter = 0 + for row in metadata.itertuples(): + if speaker_name is None and ignored_speakers is not None and row.speaker_name in ignored_speakers: + continue + audio_path = os.path.join(root_path, row.audio_file) + if not os.path.exists(audio_path): + not_found_counter += 1 + continue + items.append( + { + "text": row.text, + "audio_file": audio_path, + "speaker_name": speaker_name if speaker_name is not None else row.speaker_name, + "emotion_name": emotion_name if emotion_name is not None else row.emotion_name, + } + ) + if not_found_counter > 0: + print(f" | > [!] {not_found_counter} files not found") + return items + + def tweb(root_path, meta_file, **kwargs): # pylint: disable=unused-argument """Normalize TWEB dataset. https://www.kaggle.com/bryanpark/the-world-english-bible-speech-dataset From c44e39d9d6bfeea15c6e600c6167663c0f9196ea Mon Sep 17 00:00:00 2001 From: klotlabs <51651746+klotlabs@users.noreply.github.com> Date: Thu, 9 Jun 2022 00:40:05 +0300 Subject: [PATCH 34/37] Update training_a_model.md (#1620) edited `...servers our needs.` to `...serves your needs.` --- docs/source/training_a_model.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/training_a_model.md b/docs/source/training_a_model.md index 22090f6e..989a5704 100644 --- a/docs/source/training_a_model.md +++ b/docs/source/training_a_model.md @@ -2,7 +2,7 @@ 1. Decide the model you want to use. - Each model has a different set of pros and cons that define the run-time efficiency and the voice quality. It is up to you to decide what model servers your needs. Other than referring to the papers, one easy way is to test the ๐ŸธTTS + Each model has a different set of pros and cons that define the run-time efficiency and the voice quality. It is up to you to decide what model serves your needs. Other than referring to the papers, one easy way is to test the ๐ŸธTTS community models and see how fast and good each of the models. Or you can start a discussion on our communication channels. 2. Understand the configuration, its fields and values. @@ -143,4 +143,4 @@ d-vectors. For using d-vectors, you first need to compute the d-vectors using th The same Glow-TTS model above can be trained on a multi-speaker VCTK dataset with the script below. ```{literalinclude} ../../recipes/vctk/glow_tts/train_glow_tts.py -``` \ No newline at end of file +``` From 6126c23498f7d206fe944c51f66baa4a09dca981 Mon Sep 17 00:00:00 2001 From: WeberJulian Date: Mon, 20 Jun 2022 13:36:26 +0200 Subject: [PATCH 35/37] Add synpaflex formatter (#1616) * Add synpaflex formatter * Fix formatter * Make style --- TTS/tts/datasets/formatters.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/TTS/tts/datasets/formatters.py b/TTS/tts/datasets/formatters.py index 1e95c60f..ef05ea7c 100644 --- a/TTS/tts/datasets/formatters.py +++ b/TTS/tts/datasets/formatters.py @@ -396,6 +396,25 @@ def vctk_old(root_path, meta_files=None, wavs_path="wav48", ignored_speakers=Non return items +def synpaflex(root_path, metafiles=None, **kwargs): # pylint: disable=unused-argument + items = [] + speaker_name = "synpaflex" + root_path = os.path.join(root_path, "") + wav_files = glob(f"{root_path}**/*.wav", recursive=True) + for wav_file in wav_files: + if os.sep + "wav" + os.sep in wav_file: + txt_file = wav_file.replace("wav", "txt") + else: + txt_file = os.path.join( + os.path.dirname(wav_file), "txt", os.path.basename(wav_file).replace(".wav", ".txt") + ) + if os.path.exists(txt_file) and os.path.exists(wav_file): + with open(txt_file, "r", encoding="utf-8") as file_text: + text = file_text.readlines()[0] + items.append({"text": text, "audio_file": wav_file, "speaker_name": speaker_name}) + return items + + def open_bible(root_path, meta_files="train", ignore_digits_sentences=True, ignored_speakers=None): """ToDo: Refer the paper when available""" items = [] From 8b75e8be9c269d4aa0d984b4a80fb0b2427f8a09 Mon Sep 17 00:00:00 2001 From: Eren G??lge Date: Mon, 20 Jun 2022 13:50:09 +0200 Subject: [PATCH 36/37] Bump up to v0.7.0 --- TTS/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TTS/VERSION b/TTS/VERSION index b1d7abc0..bcaffe19 100644 --- a/TTS/VERSION +++ b/TTS/VERSION @@ -1 +1 @@ -0.6.2 \ No newline at end of file +0.7.0 \ No newline at end of file From 71281ff1e43f25a50e28fc2c744fb238de5ba2a2 Mon Sep 17 00:00:00 2001 From: p0p4k Date: Tue, 21 Jun 2022 06:28:17 +0900 Subject: [PATCH 37/37] Add support for model_info in CLI (#1623) * model_info * model_info * model_info_by_idx and name * model_info_by_idx and name * model_info * Update manage.py * fixed linter * fixed linter * fixed linter * fixed linter * fixed return style checks * fixed linter * fixed linter * fixed idx always positive * added comments * fix parser.args check * fix parser.args check * Make style Co-authored-by: Eren G??lge --- TTS/bin/synthesize.py | 63 +++++++++++++++++++++++++++++------- TTS/utils/manage.py | 75 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 11 deletions(-) diff --git a/TTS/bin/synthesize.py b/TTS/bin/synthesize.py index 4e93535a..7c609890 100755 --- a/TTS/bin/synthesize.py +++ b/TTS/bin/synthesize.py @@ -39,6 +39,18 @@ If you don't specify any models, then it uses LJSpeech based English model. $ tts --list_models ``` +- Query info for model info by idx: + + ``` + $ tts --model_info_by_idx "/" + ``` + +- Query info for model info by full name: + + ``` + $ tts --model_info_by_name "///" + ``` + - Run TTS with default models: ``` @@ -48,7 +60,7 @@ If you don't specify any models, then it uses LJSpeech based English model. - Run a TTS model with its default vocoder model: ``` - $ tts --text "Text for TTS" --model_name "// + $ tts --text "Text for TTS" --model_name "//" ``` - Run with specific TTS and vocoder models from the list: @@ -104,6 +116,21 @@ If you don't specify any models, then it uses LJSpeech based English model. default=False, help="list available pre-trained TTS and vocoder models.", ) + + parser.add_argument( + "--model_info_by_idx", + type=str, + default=None, + help="model info using query format: /", + ) + + parser.add_argument( + "--model_info_by_name", + type=str, + default=None, + help="model info using query format: ///", + ) + parser.add_argument("--text", type=str, default=None, help="Text to generate speech.") # Args for running pre-trained TTS models. @@ -214,13 +241,16 @@ If you don't specify any models, then it uses LJSpeech based English model. args = parser.parse_args() # print the description if either text or list_models is not set - if ( - not args.text - and not args.list_models - and not args.list_speaker_idxs - and not args.list_language_idxs - and not args.reference_wav - ): + check_args = [ + args.text, + args.list_models, + args.list_speaker_idxs, + args.list_language_idxs, + args.reference_wav, + args.model_info_by_idx, + args.model_info_by_name, + ] + if not any(check_args): parser.parse_args(["-h"]) # load model manager @@ -236,12 +266,23 @@ If you don't specify any models, then it uses LJSpeech based English model. encoder_path = None encoder_config_path = None - # CASE1: list pre-trained TTS models + # CASE1 #list : list pre-trained TTS models if args.list_models: manager.list_models() sys.exit() - # CASE2: load pre-trained model paths + # CASE2 #info : model info of pre-trained TTS models + if args.model_info_by_idx: + model_query = args.model_info_by_idx + manager.model_info_by_idx(model_query) + sys.exit() + + if args.model_info_by_name: + model_query_full_name = args.model_info_by_name + manager.model_info_by_full_name(model_query_full_name) + sys.exit() + + # CASE3: load pre-trained model paths if args.model_name is not None and not args.model_path: model_path, config_path, model_item = manager.download_model(args.model_name) args.vocoder_name = model_item["default_vocoder"] if args.vocoder_name is None else args.vocoder_name @@ -249,7 +290,7 @@ If you don't specify any models, then it uses LJSpeech based English model. if args.vocoder_name is not None and not args.vocoder_path: vocoder_path, vocoder_config_path, _ = manager.download_model(args.vocoder_name) - # CASE3: set custom model paths + # CASE4: set custom model paths if args.model_path is not None: model_path = args.model_path config_path = args.config_path diff --git a/TTS/utils/manage.py b/TTS/utils/manage.py index 87cb5592..281e5af0 100644 --- a/TTS/utils/manage.py +++ b/TTS/utils/manage.py @@ -90,6 +90,81 @@ class ModelManager(object): models_name_list.extend(model_list) return models_name_list + def model_info_by_idx(self, model_query): + """Print the description of the model from .models.json file using model_idx + + Args: + model_query (str): / + """ + model_name_list = [] + model_type, model_query_idx = model_query.split("/") + try: + model_query_idx = int(model_query_idx) + if model_query_idx <= 0: + print("> model_query_idx should be a positive integer!") + return + except: + print("> model_query_idx should be an integer!") + return + model_count = 0 + if model_type in self.models_dict: + for lang in self.models_dict[model_type]: + for dataset in self.models_dict[model_type][lang]: + for model in self.models_dict[model_type][lang][dataset]: + model_name_list.append(f"{model_type}/{lang}/{dataset}/{model}") + model_count += 1 + else: + print(f"> model_type {model_type} does not exist in the list.") + return + if model_query_idx > model_count: + print(f"model query idx exceeds the number of available models [{model_count}] ") + else: + model_type, lang, dataset, model = model_name_list[model_query_idx - 1].split("/") + print(f"> model type : {model_type}") + print(f"> language supported : {lang}") + print(f"> dataset used : {dataset}") + print(f"> model name : {model}") + if "description" in self.models_dict[model_type][lang][dataset][model]: + print(f"> description : {self.models_dict[model_type][lang][dataset][model]['description']}") + else: + print("> description : coming soon") + if "default_vocoder" in self.models_dict[model_type][lang][dataset][model]: + print(f"> default_vocoder : {self.models_dict[model_type][lang][dataset][model]['default_vocoder']}") + + def model_info_by_full_name(self, model_query_name): + """Print the description of the model from .models.json file using model_full_name + + Args: + model_query_name (str): Format is /// + """ + model_type, lang, dataset, model = model_query_name.split("/") + if model_type in self.models_dict: + if lang in self.models_dict[model_type]: + if dataset in self.models_dict[model_type][lang]: + if model in self.models_dict[model_type][lang][dataset]: + print(f"> model type : {model_type}") + print(f"> language supported : {lang}") + print(f"> dataset used : {dataset}") + print(f"> model name : {model}") + if "description" in self.models_dict[model_type][lang][dataset][model]: + print( + f"> description : {self.models_dict[model_type][lang][dataset][model]['description']}" + ) + else: + print("> description : coming soon") + if "default_vocoder" in self.models_dict[model_type][lang][dataset][model]: + print( + f"> default_vocoder : {self.models_dict[model_type][lang][dataset][model]['default_vocoder']}" + ) + else: + print(f"> model {model} does not exist for {model_type}/{lang}/{dataset}.") + else: + print(f"> dataset {dataset} does not exist for {model_type}/{lang}.") + else: + print(f"> lang {lang} does not exist for {model_type}.") + else: + print(f"> model_type {model_type} does not exist in the list.") + def list_tts_models(self): """Print all `TTS` models and return a list of model names