mirror of
https://github.com/rasbt/LLMs-from-scratch.git
synced 2025-06-26 23:50:03 +00:00

* fixed typo * removed remaining nbviewer links * Update mha-implementations.ipynb --------- Co-authored-by: Sebastian Raschka <mail@sebastianraschka.com>
2010 lines
340 KiB
Plaintext
2010 lines
340 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "e2e65c03-36d4-413f-9b23-5cdd816729ab",
|
|
"metadata": {
|
|
"id": "e2e65c03-36d4-413f-9b23-5cdd816729ab"
|
|
},
|
|
"source": [
|
|
"<table style=\"width:100%\">\n",
|
|
"<tr>\n",
|
|
"<td style=\"vertical-align:middle; text-align:left;\">\n",
|
|
"<font size=\"2\">\n",
|
|
"Supplementary code for the <a href=\"http://mng.bz/orYv\">Build a Large Language Model From Scratch</a> book by <a href=\"https://sebastianraschka.com\">Sebastian Raschka</a><br>\n",
|
|
"<br>Code repository: <a href=\"https://github.com/rasbt/LLMs-from-scratch\">https://github.com/rasbt/LLMs-from-scratch</a>\n",
|
|
"</font>\n",
|
|
"</td>\n",
|
|
"<td style=\"vertical-align:middle; text-align:left;\">\n",
|
|
"<a href=\"http://mng.bz/orYv\"><img src=\"https://sebastianraschka.com/images/LLMs-from-scratch-images/cover-small.webp\" width=\"100px\"></a>\n",
|
|
"</td>\n",
|
|
"</tr>\n",
|
|
"</table>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "1HABx0Hr3PDD",
|
|
"metadata": {
|
|
"id": "1HABx0Hr3PDD"
|
|
},
|
|
"source": [
|
|
"Uncomment and execute the following code cell to install the dependencies:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "qPnVNAOxwy5s",
|
|
"metadata": {
|
|
"id": "qPnVNAOxwy5s"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# pip install -r https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/main/requirements.txt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "LYLcq3403Yq6",
|
|
"metadata": {
|
|
"id": "LYLcq3403Yq6"
|
|
},
|
|
"source": [
|
|
"Uncomment and execute the following code cell to install the PyTorch nightly dependency if you want to run the FlexAttention benchmarks (this is required because FlexAttention is not yet included in the latest PyTorch release):"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "gAgYvxm_xVct",
|
|
"metadata": {
|
|
"id": "gAgYvxm_xVct"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121 -U"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "6f678e62-7bcb-4405-86ae-dce94f494303",
|
|
"metadata": {
|
|
"id": "6f678e62-7bcb-4405-86ae-dce94f494303"
|
|
},
|
|
"source": [
|
|
"# Comparing Efficient Multi-Head Attention Implementations"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b742938a-4bfc-4527-a1f1-d5963508967d",
|
|
"metadata": {
|
|
"id": "b742938a-4bfc-4527-a1f1-d5963508967d"
|
|
},
|
|
"source": [
|
|
"This code notebook compares different ways to implement causal multi-head attention used in decoder-style LLMs like GPT, Llama, etc."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "7898551e-f582-48ac-9f66-3632abe2a93f",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "7898551e-f582-48ac-9f66-3632abe2a93f",
|
|
"outputId": "1a7d22c1-96d8-4a42-e3ec-ce78abaf18eb"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"PyTorch version: 2.5.0.dev20240905+cu121\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import torch\n",
|
|
"\n",
|
|
"torch.manual_seed(123)\n",
|
|
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
|
"print(f\"PyTorch version: {torch.__version__}\")\n",
|
|
"\n",
|
|
"batch_size = 8\n",
|
|
"context_len = 1024\n",
|
|
"embed_dim = 768\n",
|
|
"embeddings = torch.randn((batch_size, context_len, embed_dim), device=device)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2f9bb1b6-a1e5-4e0a-884d-0f31b374a8d6",
|
|
"metadata": {
|
|
"id": "2f9bb1b6-a1e5-4e0a-884d-0f31b374a8d6"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 1) CausalAttention MHA wrapper class from chapter 3"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "297c93ed-aec0-4896-bb89-42c4b294d3d1",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "297c93ed-aec0-4896-bb89-42c4b294d3d1",
|
|
"outputId": "b6f596e4-b778-496c-bea8-3fe83d873c5b"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import torch.nn as nn\n",
|
|
"\n",
|
|
"class CausalAttention(nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self, d_in, d_out, context_length, dropout, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
" self.d_out = d_out\n",
|
|
" self.W_query = nn.Linear(d_in, d_out, bias=qkv_bias)\n",
|
|
" self.W_key = nn.Linear(d_in, d_out, bias=qkv_bias)\n",
|
|
" self.W_value = nn.Linear(d_in, d_out, bias=qkv_bias)\n",
|
|
" self.dropout = nn.Dropout(dropout) # New\n",
|
|
" self.register_buffer(\"mask\", torch.triu(torch.ones(context_length, context_length), diagonal=1)) # New\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" b, num_tokens, d_in = x.shape # New batch dimension b\n",
|
|
" keys = self.W_key(x)\n",
|
|
" queries = self.W_query(x)\n",
|
|
" values = self.W_value(x)\n",
|
|
"\n",
|
|
" attn_scores = queries @ keys.transpose(1, 2) # Changed transpose\n",
|
|
" attn_scores.masked_fill_( # New, _ ops are in-place\n",
|
|
" self.mask.bool()[:num_tokens, :num_tokens], -torch.inf)\n",
|
|
" attn_weights = torch.softmax(attn_scores / keys.shape[-1]**0.5, dim=-1)\n",
|
|
" attn_weights = self.dropout(attn_weights) # New\n",
|
|
"\n",
|
|
" context_vec = attn_weights @ values\n",
|
|
" return context_vec\n",
|
|
"\n",
|
|
"\n",
|
|
"class Ch03_MHA_Wrapper(nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
" self.heads = nn.ModuleList(\n",
|
|
" [CausalAttention(d_in, d_out, context_length, dropout, qkv_bias)\n",
|
|
" for _ in range(num_heads)]\n",
|
|
" )\n",
|
|
" self.out_proj = nn.Linear(d_out*num_heads, d_out*num_heads)\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" context_vec = torch.cat([head(x) for head in self.heads], dim=-1)\n",
|
|
" return self.out_proj(context_vec)\n",
|
|
"\n",
|
|
"\n",
|
|
"mha_ch03_wrapper = Ch03_MHA_Wrapper(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim//12,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_ch03_wrapper(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "21930804-b327-40b1-8e63-94dcad39ce7b",
|
|
"metadata": {
|
|
"id": "21930804-b327-40b1-8e63-94dcad39ce7b"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 2) The multi-head attention class from chapter 3"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "4ee6a61b-d25c-4a0c-8a59-f285544e3710",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "4ee6a61b-d25c-4a0c-8a59-f285544e3710",
|
|
"outputId": "4d9ade55-4710-4ae6-9f00-aa87811bfb04"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"class Ch03_MHA(nn.Module):\n",
|
|
" def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
" assert d_out % num_heads == 0, \"d_out must be divisible by num_heads\"\n",
|
|
"\n",
|
|
" self.d_out = d_out\n",
|
|
" self.num_heads = num_heads\n",
|
|
" self.head_dim = d_out // num_heads # Reduce the projection dim to match desired output dim\n",
|
|
"\n",
|
|
" self.W_query = nn.Linear(d_in, d_out, bias=qkv_bias)\n",
|
|
" self.W_key = nn.Linear(d_in, d_out, bias=qkv_bias)\n",
|
|
" self.W_value = nn.Linear(d_in, d_out, bias=qkv_bias)\n",
|
|
" self.out_proj = nn.Linear(d_out, d_out) # Linear layer to combine head outputs\n",
|
|
" self.dropout = nn.Dropout(dropout)\n",
|
|
" self.register_buffer(\"mask\", torch.triu(torch.ones(context_length, context_length), diagonal=1))\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" b, num_tokens, d_in = x.shape\n",
|
|
"\n",
|
|
" keys = self.W_key(x) # Shape: (b, num_tokens, d_out)\n",
|
|
" queries = self.W_query(x)\n",
|
|
" values = self.W_value(x)\n",
|
|
"\n",
|
|
" # We implicitly split the matrix by adding a `num_heads` dimension\n",
|
|
" # Unroll last dim: (b, num_tokens, d_out) -> (b, num_tokens, num_heads, head_dim)\n",
|
|
" keys = keys.view(b, num_tokens, self.num_heads, self.head_dim)\n",
|
|
" values = values.view(b, num_tokens, self.num_heads, self.head_dim)\n",
|
|
" queries = queries.view(b, num_tokens, self.num_heads, self.head_dim)\n",
|
|
"\n",
|
|
" # Transpose: (b, num_tokens, num_heads, head_dim) -> (b, num_heads, num_tokens, head_dim)\n",
|
|
" keys = keys.transpose(1, 2)\n",
|
|
" queries = queries.transpose(1, 2)\n",
|
|
" values = values.transpose(1, 2)\n",
|
|
"\n",
|
|
" # Compute scaled dot-product attention (aka self-attention) with a causal mask\n",
|
|
" attn_scores = queries @ keys.transpose(2, 3) # Dot product for each head\n",
|
|
"\n",
|
|
" # Original mask truncated to the number of tokens and converted to boolean\n",
|
|
" mask_bool = self.mask.bool()[:num_tokens, :num_tokens]\n",
|
|
"\n",
|
|
" # Use the mask to fill attention scores\n",
|
|
" attn_scores.masked_fill_(mask_bool, -torch.inf)\n",
|
|
"\n",
|
|
" attn_weights = torch.softmax(attn_scores / keys.shape[-1]**0.5, dim=-1)\n",
|
|
" attn_weights = self.dropout(attn_weights)\n",
|
|
"\n",
|
|
" # Shape: (b, num_tokens, num_heads, head_dim)\n",
|
|
" context_vec = (attn_weights @ values).transpose(1, 2)\n",
|
|
"\n",
|
|
" # Combine heads, where self.d_out = self.num_heads * self.head_dim\n",
|
|
" context_vec = context_vec.contiguous().view(b, num_tokens, self.d_out)\n",
|
|
" context_vec = self.out_proj(context_vec) # optional projection\n",
|
|
"\n",
|
|
" return context_vec\n",
|
|
"\n",
|
|
"\n",
|
|
"mha_ch03 = Ch03_MHA(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_ch03(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "73cd11da-ea3b-4081-b483-c4965dfefbc4",
|
|
"metadata": {
|
|
"id": "73cd11da-ea3b-4081-b483-c4965dfefbc4"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 3) An alternative multi-head attention with combined weights"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "1fa1a5ea-eaff-4d2d-aaf0-b34cdb6fd4dd",
|
|
"metadata": {
|
|
"id": "1fa1a5ea-eaff-4d2d-aaf0-b34cdb6fd4dd"
|
|
},
|
|
"source": [
|
|
"- The code for the `MultiHeadAttentionCombinedQKV` class below is based on code that was kindly shared by [Rayed Bin Wahed](https://github.com/rasbt/LLMs-from-scratch/discussions/51)\n",
|
|
"- The main difference between the `MultiHeadAttentionCombinedQKV` class and the `MultiHeadAttention` class used in chapter 3 is that `MultiHeadAttentionCombinedQKV` uses a single weight matrix, `self.qkv = nn.Linear(d_in, 3 * d_out, bias=qkv_bias)` instead of separate weight matrices:\n",
|
|
"\n",
|
|
" - `self.W_query = nn.Linear(d_in, d_out, bias=qkv_bias)`\n",
|
|
" - `self.W_key = nn.Linear(d_in, d_out, bias=qkv_bias)`\n",
|
|
" - `self.W_value = nn.Linear(d_in, d_out, bias=qkv_bias)`\n",
|
|
"\n",
|
|
"- Here, `self.qkv` combines all three weight matrices `self.W_query`, `self.W_key`, and `self.W_value` to carry out the query, key, and value computation in a single step\n",
|
|
"- Using `q, k, v = qkv.unbind(0)`, we obtain the individual query, key, and value tensors, which are then used similarly to the query, key, and value tensors in the `MultiHeadAttention` class in chapter 3"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "9a6bd0a2-f27c-4602-afa0-c96cd295c1a6",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "9a6bd0a2-f27c-4602-afa0-c96cd295c1a6",
|
|
"outputId": "a0a023ee-3bc7-4a89-cdba-7c97921160ee"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import torch.nn as nn\n",
|
|
"\n",
|
|
"\n",
|
|
"class MultiHeadAttentionCombinedQKV(nn.Module):\n",
|
|
" def __init__(self, d_in, d_out, num_heads, context_length, dropout=0.0, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" assert d_out % num_heads == 0, \"embed_dim is indivisible by num_heads\"\n",
|
|
"\n",
|
|
" self.num_heads = num_heads\n",
|
|
" self.context_length = context_length\n",
|
|
" self.head_dim = d_out // num_heads\n",
|
|
"\n",
|
|
" self.qkv = nn.Linear(d_in, 3 * d_out, bias=qkv_bias)\n",
|
|
" self.proj = nn.Linear(d_out, d_out)\n",
|
|
" self.dropout = nn.Dropout(dropout)\n",
|
|
"\n",
|
|
" self.register_buffer(\n",
|
|
" \"mask\", torch.triu(torch.ones(context_length, context_length), diagonal=1)\n",
|
|
" )\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" batch_size, num_tokens, embed_dim = x.shape\n",
|
|
"\n",
|
|
" # (b, num_tokens, embed_dim) --> (b, num_tokens, 3 * embed_dim)\n",
|
|
" qkv = self.qkv(x)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3 * embed_dim) --> (b, num_tokens, 3, num_heads, head_dim)\n",
|
|
" qkv = qkv.view(batch_size, num_tokens, 3, self.num_heads, self.head_dim)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3, num_heads, head_dim) --> (3, b, num_heads, num_tokens, head_dim)\n",
|
|
" qkv = qkv.permute(2, 0, 3, 1, 4)\n",
|
|
"\n",
|
|
" # (3, b, num_heads, num_tokens, head_dim) -> 3 times (b, num_head, num_tokens, head_dim)\n",
|
|
" queries, keys, values = qkv.unbind(0)\n",
|
|
"\n",
|
|
" # (b, num_heads, num_tokens, head_dim) --> (b, num_heads, num_tokens, num_tokens)\n",
|
|
" attn_scores = queries @ keys.transpose(-2, -1)\n",
|
|
" attn_scores = attn_scores.masked_fill(\n",
|
|
" self.mask.bool()[:num_tokens, :num_tokens], -torch.inf\n",
|
|
" )\n",
|
|
"\n",
|
|
" attn_weights = torch.softmax(attn_scores / keys.shape[-1]**-0.5, dim=-1)\n",
|
|
" attn_weights = self.dropout(attn_weights)\n",
|
|
"\n",
|
|
" # (b, num_heads, num_tokens, num_tokens) --> (b, num_heads, num_tokens, head_dim)\n",
|
|
" context_vec = attn_weights @ values\n",
|
|
"\n",
|
|
" # (b, num_heads, num_tokens, head_dim) --> (b, num_tokens, num_heads, head_dim)\n",
|
|
" context_vec = context_vec.transpose(1, 2)\n",
|
|
"\n",
|
|
" # (b, num_tokens, num_heads, head_dim) --> (b, num_tokens, embed_dim)\n",
|
|
" context_vec = context_vec.contiguous().view(batch_size, num_tokens, embed_dim)\n",
|
|
"\n",
|
|
" context_vec = self.proj(context_vec)\n",
|
|
"\n",
|
|
" return context_vec\n",
|
|
"\n",
|
|
"\n",
|
|
"mha_combined_qkv = MultiHeadAttentionCombinedQKV(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_combined_qkv(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "9b14390d-3e21-43fd-87be-43e7029163ee",
|
|
"metadata": {
|
|
"id": "9b14390d-3e21-43fd-87be-43e7029163ee"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 4) Multi-head attention with Einsum\n",
|
|
"\n",
|
|
"- Implementing multi-head attention using Einstein summation via [`torch.einsum`](https://pytorch.org/docs/stable/generated/torch.einsum.html)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "92481814-068d-439b-a65c-b1310ebbe0aa",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "92481814-068d-439b-a65c-b1310ebbe0aa",
|
|
"outputId": "59a75f6e-ef06-418f-8e54-d3b368fbed13"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import math\n",
|
|
"\n",
|
|
"\n",
|
|
"class MHAEinsum(nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
" assert d_out % num_heads == 0, \"d_out must be divisible by num_heads\"\n",
|
|
"\n",
|
|
" self.d_out = d_out\n",
|
|
" self.num_heads = num_heads\n",
|
|
" self.head_dim = d_out // num_heads\n",
|
|
"\n",
|
|
" # Initialize parameters for Q, K, V\n",
|
|
" self.W_query = nn.Parameter(torch.randn(d_out, d_in))\n",
|
|
" self.W_key = nn.Parameter(torch.randn(d_out, d_in))\n",
|
|
" self.W_value = nn.Parameter(torch.randn(d_out, d_in))\n",
|
|
"\n",
|
|
" if qkv_bias:\n",
|
|
" self.bias_q = nn.Parameter(torch.zeros(d_out))\n",
|
|
" self.bias_k = nn.Parameter(torch.zeros(d_out))\n",
|
|
" self.bias_v = nn.Parameter(torch.zeros(d_out))\n",
|
|
" else:\n",
|
|
" self.register_parameter(\"bias_q\", None)\n",
|
|
" self.register_parameter(\"bias_k\", None)\n",
|
|
" self.register_parameter(\"bias_v\", None)\n",
|
|
"\n",
|
|
" self.out_proj = nn.Linear(d_out, d_out)\n",
|
|
" self.dropout = nn.Dropout(dropout)\n",
|
|
" self.register_buffer(\"mask\", torch.triu(torch.ones(context_length, context_length), diagonal=1))\n",
|
|
"\n",
|
|
" # Initialize parameters\n",
|
|
" self.reset_parameters()\n",
|
|
"\n",
|
|
"\n",
|
|
" def reset_parameters(self):\n",
|
|
" nn.init.kaiming_uniform_(self.W_query, a=math.sqrt(5))\n",
|
|
" nn.init.kaiming_uniform_(self.W_key, a=math.sqrt(5))\n",
|
|
" nn.init.kaiming_uniform_(self.W_value, a=math.sqrt(5))\n",
|
|
" if self.bias_q is not None:\n",
|
|
" fan_in, _ = nn.init._calculate_fan_in_and_fan_out(self.W_query)\n",
|
|
" bound = 1 / math.sqrt(fan_in)\n",
|
|
" nn.init.uniform_(self.bias_q, -bound, bound)\n",
|
|
" nn.init.uniform_(self.bias_k, -bound, bound)\n",
|
|
" nn.init.uniform_(self.bias_v, -bound, bound)\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" b, n, _ = x.shape\n",
|
|
"\n",
|
|
" # Calculate Q, K, V using einsum, first perform linear transformations\n",
|
|
" Q = torch.einsum(\"bnd,di->bni\", x, self.W_query)\n",
|
|
" K = torch.einsum(\"bnd,di->bni\", x, self.W_key)\n",
|
|
" V = torch.einsum(\"bnd,di->bni\", x, self.W_value)\n",
|
|
"\n",
|
|
" # Add biases if they are used\n",
|
|
" if self.bias_q is not None:\n",
|
|
" Q += self.bias_q\n",
|
|
" K += self.bias_k\n",
|
|
" V += self.bias_v\n",
|
|
"\n",
|
|
" # Reshape for multi-head attention\n",
|
|
" Q = Q.view(b, n, self.num_heads, self.head_dim).transpose(1, 2)\n",
|
|
" K = K.view(b, n, self.num_heads, self.head_dim).transpose(1, 2)\n",
|
|
" V = V.view(b, n, self.num_heads, self.head_dim).transpose(1, 2)\n",
|
|
"\n",
|
|
" # Scaled dot-product attention\n",
|
|
" scores = torch.einsum(\"bhnd,bhmd->bhnm\", Q, K) / (self.head_dim ** 0.5)\n",
|
|
"\n",
|
|
" # Apply mask\n",
|
|
" mask = self.mask[:n, :n].unsqueeze(0).unsqueeze(1).expand(b, self.num_heads, n, n)\n",
|
|
" scores = scores.masked_fill(mask.bool(), -torch.inf)\n",
|
|
"\n",
|
|
" # Softmax and dropout\n",
|
|
" attn_weights = torch.softmax(scores, dim=-1)\n",
|
|
" attn_weights = self.dropout(attn_weights)\n",
|
|
"\n",
|
|
" # Aggregate the attended context vectors\n",
|
|
" context_vec = torch.einsum(\"bhnm,bhmd->bhnd\", attn_weights, V)\n",
|
|
"\n",
|
|
" # Combine heads and project the output\n",
|
|
" context_vec = context_vec.transpose(1, 2).reshape(b, n, self.d_out)\n",
|
|
" context_vec = self.out_proj(context_vec)\n",
|
|
"\n",
|
|
" return context_vec\n",
|
|
"\n",
|
|
"\n",
|
|
"mha_einsum = MHAEinsum(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_einsum(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "48a042d3-ee78-4c29-bf63-d92fe6706632",
|
|
"metadata": {
|
|
"id": "48a042d3-ee78-4c29-bf63-d92fe6706632"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 5) Multi-head attention with PyTorch's scaled dot product attention and FlashAttention"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "f78e346f-3b85-44e6-9feb-f01131381148",
|
|
"metadata": {
|
|
"id": "f78e346f-3b85-44e6-9feb-f01131381148"
|
|
},
|
|
"source": [
|
|
"- The implementation below uses PyTorch's [`scaled_dot_product_attention`](https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) function, which implements a memory-optimized version of self-attention called [FlashAttention](https://arxiv.org/abs/2205.14135)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "1b8e5a0d-1f65-4a03-bf6e-723f0cc428f5",
|
|
"metadata": {
|
|
"id": "1b8e5a0d-1f65-4a03-bf6e-723f0cc428f5"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class MHAPyTorchScaledDotProduct(nn.Module):\n",
|
|
" def __init__(self, d_in, d_out, num_heads, context_length, dropout=0.0, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" assert d_out % num_heads == 0, \"embed_dim is indivisible by num_heads\"\n",
|
|
"\n",
|
|
" self.num_heads = num_heads\n",
|
|
" self.context_length = context_length\n",
|
|
" self.head_dim = d_out // num_heads\n",
|
|
" self.d_out = d_out\n",
|
|
"\n",
|
|
" self.qkv = nn.Linear(d_in, 3 * d_out, bias=qkv_bias)\n",
|
|
" self.proj = nn.Linear(d_out, d_out)\n",
|
|
" self.dropout = dropout\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" batch_size, num_tokens, embed_dim = x.shape\n",
|
|
"\n",
|
|
" # (b, num_tokens, embed_dim) --> (b, num_tokens, 3 * embed_dim)\n",
|
|
" qkv = self.qkv(x)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3 * embed_dim) --> (b, num_tokens, 3, num_heads, head_dim)\n",
|
|
" qkv = qkv.view(batch_size, num_tokens, 3, self.num_heads, self.head_dim)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3, num_heads, head_dim) --> (3, b, num_heads, num_tokens, head_dim)\n",
|
|
" qkv = qkv.permute(2, 0, 3, 1, 4)\n",
|
|
"\n",
|
|
" # (3, b, num_heads, num_tokens, head_dim) -> 3 times (b, num_heads, num_tokens, head_dim)\n",
|
|
" queries, keys, values = qkv\n",
|
|
"\n",
|
|
" use_dropout = 0. if not self.training else self.dropout\n",
|
|
"\n",
|
|
" context_vec = nn.functional.scaled_dot_product_attention(\n",
|
|
" queries, keys, values, attn_mask=None, dropout_p=use_dropout, is_causal=True)\n",
|
|
"\n",
|
|
" # Combine heads, where self.d_out = self.num_heads * self.head_dim\n",
|
|
" context_vec = context_vec.transpose(1, 2).contiguous().view(batch_size, num_tokens, self.d_out)\n",
|
|
"\n",
|
|
" context_vec = self.proj(context_vec)\n",
|
|
"\n",
|
|
" return context_vec"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "fbc8ba92-3471-41cb-b1b2-4c0ef5be392b",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "fbc8ba92-3471-41cb-b1b2-4c0ef5be392b",
|
|
"outputId": "087a53e7-86d8-48dc-bf2e-023f0f2104cb"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"mha_pytorch_scaled = MHAPyTorchScaledDotProduct(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_pytorch_scaled(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "51492724-6018-49f6-8bf6-ae9e585229c3",
|
|
"metadata": {
|
|
"id": "51492724-6018-49f6-8bf6-ae9e585229c3"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 6) PyTorch's scaled dot product attention without FlashAttention\n",
|
|
"\n",
|
|
"- This is similar to above, except that we disable FlashAttention by passing an explicit causal mask"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "bad53538-e905-4065-ba0c-caacdfec5a0b",
|
|
"metadata": {
|
|
"id": "bad53538-e905-4065-ba0c-caacdfec5a0b"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class MHAPyTorchSDPAWithoutFlash(nn.Module):\n",
|
|
" def __init__(self, d_in, d_out, num_heads, context_length, dropout=0.0, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" assert d_out % num_heads == 0, \"embed_dim is indivisible by num_heads\"\n",
|
|
"\n",
|
|
" self.num_heads = num_heads\n",
|
|
" self.context_length = context_length\n",
|
|
" self.head_dim = d_out // num_heads\n",
|
|
" self.d_out = d_out\n",
|
|
"\n",
|
|
" self.qkv = nn.Linear(d_in, 3 * d_out, bias=qkv_bias)\n",
|
|
" self.proj = nn.Linear(d_out, d_out)\n",
|
|
" self.dropout = dropout\n",
|
|
" self.register_buffer(\"mask\", torch.triu(torch.ones(context_length, context_length), diagonal=1).bool())\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" batch_size, num_tokens, embed_dim = x.shape\n",
|
|
"\n",
|
|
" # (b, num_tokens, embed_dim) --> (b, num_tokens, 3 * embed_dim)\n",
|
|
" qkv = self.qkv(x)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3 * embed_dim) --> (b, num_tokens, 3, num_heads, head_dim)\n",
|
|
" qkv = qkv.view(batch_size, num_tokens, 3, self.num_heads, self.head_dim)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3, num_heads, head_dim) --> (3, b, num_heads, num_tokens, head_dim)\n",
|
|
" qkv = qkv.permute(2, 0, 3, 1, 4)\n",
|
|
"\n",
|
|
" # (3, b, num_heads, num_tokens, head_dim) -> 3 times (b, num_heads, num_tokens, head_dim)\n",
|
|
" queries, keys, values = qkv\n",
|
|
"\n",
|
|
" use_dropout = 0. if not self.training else self.dropout\n",
|
|
"\n",
|
|
" # Ensure attn_mask is compatible with expected shape and `batch_first=True`\n",
|
|
" # No need to manually adjust for num_heads; ensure it's right for the sequence\n",
|
|
" if self.context_length >= num_tokens:\n",
|
|
" attn_mask = self.mask[:num_tokens, :num_tokens]\n",
|
|
" else:\n",
|
|
" attn_mask = self.mask[:self.context_length, :self.context_length]\n",
|
|
"\n",
|
|
" context_vec = nn.functional.scaled_dot_product_attention(\n",
|
|
" queries, keys, values, attn_mask=attn_mask, dropout_p=use_dropout, is_causal=False)\n",
|
|
"\n",
|
|
" # Combine heads, where self.d_out = self.num_heads * self.head_dim\n",
|
|
" context_vec = context_vec.transpose(1, 2).contiguous().view(batch_size, num_tokens, self.d_out)\n",
|
|
"\n",
|
|
" context_vec = self.proj(context_vec)\n",
|
|
"\n",
|
|
" return context_vec"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"id": "f3da7850-e772-47d3-bd51-22d077b01412",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "f3da7850-e772-47d3-bd51-22d077b01412",
|
|
"outputId": "cc8fc837-8e06-42fc-bad5-b17816f47fcd"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"mha_pytorch_sdpa_no_flash = MHAPyTorchSDPAWithoutFlash(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_pytorch_sdpa_no_flash(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "351c318f-4835-4d74-8d58-a070222447c4",
|
|
"metadata": {
|
|
"id": "351c318f-4835-4d74-8d58-a070222447c4"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 7) Using PyTorch's torch.nn.MultiheadAttention"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "74a6d060-6324-48fa-a35c-cb09f2a48965",
|
|
"metadata": {
|
|
"id": "74a6d060-6324-48fa-a35c-cb09f2a48965"
|
|
},
|
|
"source": [
|
|
"- Below, we use PyTorch's [torch.nn.MultiheadAttention](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) implementation"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "3799c7ef-3155-42c6-a829-f95656453ae0",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "3799c7ef-3155-42c6-a829-f95656453ae0",
|
|
"outputId": "78236eea-a0f4-47e4-c846-606e7f8f8768"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import torch.nn as nn\n",
|
|
"\n",
|
|
"\n",
|
|
"class MHAPyTorchClass(nn.Module):\n",
|
|
" def __init__(self, d_in, d_out, num_heads, context_length, dropout=0.0, qkv_bias=False, need_weights=True):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" self.context_length = context_length\n",
|
|
" self.multihead_attn = nn.MultiheadAttention(\n",
|
|
" embed_dim=d_out,\n",
|
|
" num_heads=num_heads,\n",
|
|
" dropout=dropout,\n",
|
|
" bias=qkv_bias,\n",
|
|
" add_bias_kv=qkv_bias,\n",
|
|
" batch_first=True,\n",
|
|
" )\n",
|
|
"\n",
|
|
" self.need_weights = need_weights\n",
|
|
" self.proj = nn.Linear(d_out, d_out)\n",
|
|
" self.register_buffer(\"mask\", torch.triu(torch.ones(context_length, context_length), diagonal=1).bool())\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" batch_size, num_tokens, _ = x.shape\n",
|
|
"\n",
|
|
" # Ensure attn_mask is compatible with expected shape and `batch_first=True`\n",
|
|
" # No need to manually adjust for num_heads; ensure it's right for the sequence\n",
|
|
" if self.context_length >= num_tokens:\n",
|
|
" attn_mask = self.mask[:num_tokens, :num_tokens]\n",
|
|
" else:\n",
|
|
" attn_mask = self.mask[:self.context_length, :self.context_length]\n",
|
|
"\n",
|
|
" # attn_mask broadcasting will handle batch_size dimension implicitly\n",
|
|
" attn_output, _ = self.multihead_attn(\n",
|
|
" x, x, x, attn_mask=attn_mask, need_weights=self.need_weights\n",
|
|
" )\n",
|
|
"\n",
|
|
" output = self.proj(attn_output)\n",
|
|
"\n",
|
|
" return output\n",
|
|
"\n",
|
|
"\n",
|
|
"mha_pytorch_class_default = MHAPyTorchClass(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_pytorch_class_default(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a3953bff-1056-4de2-bfd1-dfccf659eee4",
|
|
"metadata": {
|
|
"id": "a3953bff-1056-4de2-bfd1-dfccf659eee4"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 8) Using PyTorch's torch.nn.MultiheadAttention with `scaled_dot_product_attention`"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "d2164859-31a0-4537-b4fb-27d57675ba77",
|
|
"metadata": {
|
|
"id": "d2164859-31a0-4537-b4fb-27d57675ba77"
|
|
},
|
|
"source": [
|
|
"- Set `need_weights` (default `True`) to need_weights=False so that `MultiheadAttention` uses `scaled_dot_product_attention` [according to the documentation](https://github.com/pytorch/pytorch/blob/71d020262793542974cf13b30f2a9099773f015c/torch/nn/modules/activation.py#L1096)\n",
|
|
"\n",
|
|
"> need_weights: If specified, returns ``attn_output_weights`` in addition to ``attn_outputs``.\n",
|
|
" Set ``need_weights=False`` to use the optimized ``scaled_dot_product_attention``\n",
|
|
" and achieve the best performance for MHA.\n",
|
|
" Default: ``True``."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "4a4c2afe-5e1f-4bd7-a118-67031176f147",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "4a4c2afe-5e1f-4bd7-a118-67031176f147",
|
|
"outputId": "6359dcff-ddcf-4cf9-eada-c3f0685cced2"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"mha_pytorch_class_noweights = MHAPyTorchClass(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False,\n",
|
|
" need_weights=False # NEW!\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"out = mha_pytorch_class_noweights(embeddings)\n",
|
|
"print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "21f4ff35-651c-4e47-bfa1-016f3de01ecc",
|
|
"metadata": {
|
|
"id": "21f4ff35-651c-4e47-bfa1-016f3de01ecc"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## 9) Using PyTorch's FlexAttention\n",
|
|
"\n",
|
|
"- See [FlexAttention: The Flexibility of PyTorch with the Performance of FlashAttention](https://pytorch.org/blog/flexattention/) to learn more about FlexAttention\n",
|
|
"- This is currently only supported in PyTorch 2.5 (nightly), which you can install on a CPU machine via\n",
|
|
"\n",
|
|
" ```bash\n",
|
|
" pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu -U\n",
|
|
" ```\n",
|
|
"\n",
|
|
"- To install PyTorch nighly on a GPU machine, use the following (for more information, also see the installation menu on [pytorch.org](https://pytorch.org/))\n",
|
|
"\n",
|
|
" ```bash\n",
|
|
" pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121 -U\n",
|
|
" ```"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "834318c8-4748-4902-99f0-70ee02bef63e",
|
|
"metadata": {
|
|
"id": "834318c8-4748-4902-99f0-70ee02bef63e"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from packaging.version import parse as parse_version\n",
|
|
"\n",
|
|
"def normalize_version(version):\n",
|
|
" parsed_version = parse_version(version)\n",
|
|
" return parse_version(f\"{parsed_version.major}.{parsed_version.minor}.{parsed_version.micro}\")\n",
|
|
"\n",
|
|
"current_version = normalize_version(torch.__version__)\n",
|
|
"MIN_TORCH_VERSION = \"2.5.0\"\n",
|
|
"required_version = parse_version(MIN_TORCH_VERSION)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"id": "WYyFRCXndVH9",
|
|
"metadata": {
|
|
"id": "WYyFRCXndVH9"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"if current_version >= required_version:\n",
|
|
" from torch.nn.attention.flex_attention import flex_attention, create_block_mask\n",
|
|
"\n",
|
|
"\n",
|
|
"def causal(b, h, q_idx, kv_idx):\n",
|
|
" return q_idx >= kv_idx\n",
|
|
"\n",
|
|
"\n",
|
|
"class MHAPyTorchFlexAttention(nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self, d_in, d_out, num_heads, context_length, dropout=0.0, qkv_bias=False):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" assert d_out % num_heads == 0, \"embed_dim is indivisible by num_heads\"\n",
|
|
"\n",
|
|
" self.num_heads = num_heads\n",
|
|
" self.context_length = context_length\n",
|
|
" self.head_dim = d_out // num_heads\n",
|
|
" self.d_out = d_out\n",
|
|
"\n",
|
|
" self.qkv = nn.Linear(d_in, 3 * d_out, bias=qkv_bias)\n",
|
|
" self.proj = nn.Linear(d_out, d_out)\n",
|
|
" self.dropout = dropout\n",
|
|
" # self.register_buffer(\"block_mask\", create_block_mask(causal, B=None, H=None, Q_LEN=context_length, KV_LEN=context_length))\n",
|
|
" # `create_block_mask` function does not support buffers, yet\n",
|
|
" self.block_mask = create_block_mask(causal, B=None, H=None, Q_LEN=context_length, KV_LEN=context_length)\n",
|
|
"\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" batch_size, num_tokens, embed_dim = x.shape\n",
|
|
"\n",
|
|
" # (b, num_tokens, embed_dim) --> (b, num_tokens, 3 * embed_dim)\n",
|
|
" qkv = self.qkv(x)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3 * embed_dim) --> (b, num_tokens, 3, num_heads, head_dim)\n",
|
|
" qkv = qkv.view(batch_size, num_tokens, 3, self.num_heads, self.head_dim)\n",
|
|
"\n",
|
|
" # (b, num_tokens, 3, num_heads, head_dim) --> (3, b, num_heads, num_tokens, head_dim)\n",
|
|
" qkv = qkv.permute(2, 0, 3, 1, 4)\n",
|
|
"\n",
|
|
" # (3, b, num_heads, num_tokens, head_dim) -> 3 times (b, num_heads, num_tokens, head_dim)\n",
|
|
" queries, keys, values = qkv\n",
|
|
"\n",
|
|
" use_dropout = 0. if not self.training else self.dropout\n",
|
|
"\n",
|
|
" # Ensure attn_mask is compatible with expected shape and `batch_first=True`\n",
|
|
" # No need to manually adjust for num_heads; ensure it's right for the sequence\n",
|
|
" if self.context_length >= num_tokens:\n",
|
|
" attn_mask = self.block_mask[:num_tokens, :num_tokens]\n",
|
|
" else:\n",
|
|
" attn_mask = self.block_mask[:self.context_length, :self.context_length]\n",
|
|
"\n",
|
|
" context_vec = flex_attention(queries, keys, values, block_mask=attn_mask)\n",
|
|
"\n",
|
|
" # Combine heads, where self.d_out = self.num_heads * self.head_dim\n",
|
|
" context_vec = context_vec.transpose(1, 2).contiguous().view(batch_size, num_tokens, self.d_out)\n",
|
|
"\n",
|
|
" context_vec = self.proj(context_vec)\n",
|
|
"\n",
|
|
" return context_vec"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"id": "9cdaaf8a-f956-44bc-932f-4d33448e8aaf",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "9cdaaf8a-f956-44bc-932f-4d33448e8aaf",
|
|
"outputId": "a88a7398-159e-401f-d96c-2fc928908e3e"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"torch.Size([8, 1024, 768])\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"if current_version >= required_version and torch.cuda.is_available():\n",
|
|
"\n",
|
|
" mha_pytorch_flex = MHAPyTorchFlexAttention(\n",
|
|
" d_in=embed_dim,\n",
|
|
" d_out=embed_dim,\n",
|
|
" context_length=context_len,\n",
|
|
" dropout=0.0,\n",
|
|
" num_heads=12,\n",
|
|
" qkv_bias=False\n",
|
|
" ).to(device)\n",
|
|
"\n",
|
|
" out = mha_pytorch_flex(embeddings)\n",
|
|
" print(out.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8877de71-f84f-4f6d-bc87-7552013b6301",
|
|
"metadata": {
|
|
"id": "8877de71-f84f-4f6d-bc87-7552013b6301"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## Quick speed comparison (M3 Macbook Air CPU)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "219cf93a-078f-434d-888c-2458d0731285",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "219cf93a-078f-434d-888c-2458d0731285",
|
|
"outputId": "a10b52d4-b4e6-43c2-9677-113c41edd3b7"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"PyTorch version: 2.4.0\n",
|
|
"Running on cpu\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"torch.manual_seed(123)\n",
|
|
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
|
"print(f\"PyTorch version: {torch.__version__}\")\n",
|
|
"print(f\"Running on {device}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "a97c0b2e-6593-49d8-98bc-2267b3aa610f",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "a97c0b2e-6593-49d8-98bc-2267b3aa610f",
|
|
"outputId": "7bcd7da4-d115-4ba6-efba-377a0bd7d3a8"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"179 ms ± 7.39 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 1) CausalAttention MHA wrapper class from chapter 3\n",
|
|
"%timeit mha_ch03_wrapper(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "19db9c2c-8e75-431a-8eef-0b4d8284e6e6",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "19db9c2c-8e75-431a-8eef-0b4d8284e6e6",
|
|
"outputId": "b04b4d0d-71aa-4944-f02b-131bf5a50202"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"166 ms ± 2.62 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 2) The multi-head attention class from chapter 3\n",
|
|
"%timeit mha_ch03(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "aa526ee0-7a88-4f34-a49a-f8f97da83779",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "aa526ee0-7a88-4f34-a49a-f8f97da83779",
|
|
"outputId": "5436928a-7b98-4c40-bf51-97973f13327e"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"190 ms ± 2.03 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 3) An alternative multi-head attention with combined weights\n",
|
|
"%timeit mha_combined_qkv(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "131ca826-35bf-47e5-b497-540aba439ef9",
|
|
"metadata": {
|
|
"id": "131ca826-35bf-47e5-b497-540aba439ef9",
|
|
"outputId": "f5848852-f81b-4e5f-a7ff-e37a8445ad91"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"196 ms ± 1.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 4) Multi-head attention using Einstein summation\n",
|
|
"%timeit mha_einsum(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "cc2b4256-16d8-4c34-9fd0-d4b4af0e60fa",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "cc2b4256-16d8-4c34-9fd0-d4b4af0e60fa",
|
|
"outputId": "9e07ce73-a2de-4e2c-8276-64626df9450e"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"110 ms ± 423 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 5) Multi-head attention with PyTorch's scaled dot product attention\n",
|
|
"%timeit mha_pytorch_scaled(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "c44305ce-9f61-451a-b9ef-30caba222357",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "c44305ce-9f61-451a-b9ef-30caba222357",
|
|
"outputId": "6bab4a24-5bb4-4ad6-b260-3b442f598950"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"99.5 ms ± 790 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 6) PyTorch's scaled dot product attention without FlashAttention\n",
|
|
"%timeit mha_pytorch_sdpa_no_flash(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "0f209e70-ebb6-4a1a-b608-1ff42e41c01d",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "0f209e70-ebb6-4a1a-b608-1ff42e41c01d",
|
|
"outputId": "630c49d1-8a06-4148-cd96-a7b2467310a0"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"198 ms ± 3.52 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 7) Using PyTorch's torch.nn.MultiheadAttention\n",
|
|
"%timeit mha_pytorch_class_default(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "3f4968c2-8d40-4ab9-8dba-052b4f77d756",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "3f4968c2-8d40-4ab9-8dba-052b4f77d756",
|
|
"outputId": "10f6a268-f9cf-446c-aa83-e87b6a0b4f5c"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"168 ms ± 2.63 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 8) Using PyTorch's torch.nn.MultiheadAttention disabling `need_weights`\n",
|
|
"%timeit mha_pytorch_class_noweights(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "bdd8e0fc-ef24-424c-bccf-c381e73da228",
|
|
"metadata": {
|
|
"id": "bdd8e0fc-ef24-424c-bccf-c381e73da228"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"## 9) Using PyTorch's FlexAttention\n",
|
|
"\n",
|
|
"# Requires PyTorch 2.5.0 or newer and currently only supports CUDA PyTorch\n",
|
|
"%timeit mha_pytorch_flex(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a78ff594-6cc2-496d-a302-789fa104c3c9",
|
|
"metadata": {
|
|
"id": "a78ff594-6cc2-496d-a302-789fa104c3c9"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"## Quick speed comparison (Nvidia A100 GPU)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"id": "RStnI1pEi6Eo",
|
|
"metadata": {
|
|
"id": "RStnI1pEi6Eo"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Enable tensor cores\n",
|
|
"torch.set_float32_matmul_precision(\"high\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"id": "e8431d75-e1c9-4d9a-b7da-9a1ff391f2bf",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "e8431d75-e1c9-4d9a-b7da-9a1ff391f2bf",
|
|
"outputId": "f6356d4c-7a3f-47f5-cf51-5507db3f5748"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"PyTorch version: 2.5.0.dev20240905+cu121\n",
|
|
"Running on cuda\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"torch.manual_seed(123)\n",
|
|
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
|
"print(f\"PyTorch version: {torch.__version__}\")\n",
|
|
"print(f\"Running on {device}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"id": "707a2a14-a089-48a8-88aa-d328e1e0a9d0",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "707a2a14-a089-48a8-88aa-d328e1e0a9d0",
|
|
"outputId": "4ea5798b-a590-401b-d049-3fed0716db34"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"4.33 ms ± 51.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 1) CausalAttention MHA wrapper class from chapter 3\n",
|
|
"%timeit mha_ch03_wrapper(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"id": "8686dd69-3655-40e4-a57b-a2c55532a010",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "8686dd69-3655-40e4-a57b-a2c55532a010",
|
|
"outputId": "88094b61-4d87-47bd-8c8b-c9344ab57062"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"3.09 ms ± 363 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 2) The multi-head attention class from chapter 3\n",
|
|
"%timeit mha_ch03(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"id": "2209d7df-e54b-4910-ae2b-c78cf684d9bf",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "2209d7df-e54b-4910-ae2b-c78cf684d9bf",
|
|
"outputId": "e3d82c53-f75b-425a-ed3e-5e48ea9ef768"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"3.81 ms ± 656 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 3) An alternative multi-head attention with combined weights\n",
|
|
"%timeit mha_combined_qkv(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"id": "abee5edf-2585-4f0e-846c-b1c7ca88f545",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "abee5edf-2585-4f0e-846c-b1c7ca88f545",
|
|
"outputId": "c9bf17f5-de62-4c39-a328-fe430812b156"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"4.12 ms ± 1.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 4) Multi-head attention using Einstein summation\n",
|
|
"%timeit mha_einsum(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"id": "1075abe2-4839-4fd6-af3e-c09bb3651e26",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "1075abe2-4839-4fd6-af3e-c09bb3651e26",
|
|
"outputId": "b63f4769-3be5-44df-b8f2-2ac379be1ff4"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1.25 ms ± 1.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 5) Multi-head attention with PyTorch's scaled dot product attention\n",
|
|
"%timeit mha_pytorch_scaled(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"id": "218adbaf-f17f-47d9-81d5-41c758218df7",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "218adbaf-f17f-47d9-81d5-41c758218df7",
|
|
"outputId": "a30ab365-865d-4175-f148-dc15abc4e07a"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2.03 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 6) PyTorch's scaled dot product attention without FlashAttention\n",
|
|
"%timeit mha_pytorch_sdpa_no_flash(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"id": "868e3670-8edc-47bc-9e06-eb505e44dc9d",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "868e3670-8edc-47bc-9e06-eb505e44dc9d",
|
|
"outputId": "e20e77ac-6573-4830-82c7-795bd139af4f"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"3.05 ms ± 388 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 7) Using PyTorch's torch.nn.MultiheadAttention\n",
|
|
"%timeit mha_pytorch_class_default(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"id": "944870e6-de54-4e3b-a455-b8f21f6f92c8",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "944870e6-de54-4e3b-a455-b8f21f6f92c8",
|
|
"outputId": "26df6295-fa5c-4b3f-89be-c7183f079fce"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2.37 ms ± 6.53 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 8) Using PyTorch's torch.nn.MultiheadAttention disabling `need_weights`\n",
|
|
"%timeit mha_pytorch_class_noweights(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"id": "evKtpb5QN_2A",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "evKtpb5QN_2A",
|
|
"outputId": "23bf5398-c8ec-4463-8af9-17de8f920a33"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"14.6 ms ± 1.34 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"## 9) Using PyTorch's FlexAttention\n",
|
|
"\n",
|
|
"# Requires PyTorch 2.5.0 or newer\n",
|
|
"%timeit mha_pytorch_flex(embeddings)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "dabc6575-0316-4640-a729-e616d5c17b73",
|
|
"metadata": {
|
|
"id": "dabc6575-0316-4640-a729-e616d5c17b73"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"\n",
|
|
"# Visualizations"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 35,
|
|
"id": "bbb2f729-d3d8-46d0-b249-9249197ea574",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "bbb2f729-d3d8-46d0-b249-9249197ea574",
|
|
"outputId": "a45fe256-6416-4f43-87d2-27bbf97239e3"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"PyTorch version: 2.5.0.dev20240905+cu121\n",
|
|
"Running on cuda\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"torch.manual_seed(123)\n",
|
|
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
|
"print(f\"PyTorch version: {torch.__version__}\")\n",
|
|
"print(f\"Running on {device}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 36,
|
|
"id": "b0620bf5",
|
|
"metadata": {
|
|
"id": "b0620bf5"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"functions = {\n",
|
|
" \"1) MHA wrapper class\": mha_ch03_wrapper,\n",
|
|
" \"2) MHA Ch03\": mha_ch03,\n",
|
|
" \"3) MHA with combined QKV weights\": mha_combined_qkv,\n",
|
|
" \"4) MHA with Einsum\": mha_einsum,\n",
|
|
" \"5) MHA with PyTorch scaled_dot_product_attention\": mha_pytorch_scaled,\n",
|
|
" \"6) PyTorch's SDPA, no FlashAttention\": mha_pytorch_sdpa_no_flash,\n",
|
|
" \"7) PyTorch MHA class defaults\": mha_pytorch_class_default,\n",
|
|
" \"8) PyTorch MHA with need_weights=False\": mha_pytorch_class_noweights\n",
|
|
" }\n",
|
|
"\n",
|
|
"if current_version >= required_version:\n",
|
|
" functions[\"8) PyTorch's FlexAttention\"] = mha_pytorch_flex"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 37,
|
|
"id": "CDJAPZaszaqx",
|
|
"metadata": {
|
|
"id": "CDJAPZaszaqx"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"# Customize further for dark mode aesthetics\n",
|
|
"plt.rcParams[\"figure.facecolor\"] = \"#121212\"\n",
|
|
"plt.rcParams[\"axes.facecolor\"] = \"#121212\"\n",
|
|
"plt.rcParams[\"axes.edgecolor\"] = \"white\"\n",
|
|
"plt.rcParams[\"axes.labelcolor\"] = \"white\"\n",
|
|
"plt.rcParams[\"text.color\"] = \"white\"\n",
|
|
"plt.rcParams[\"xtick.color\"] = \"white\"\n",
|
|
"plt.rcParams[\"ytick.color\"] = \"white\"\n",
|
|
"plt.rcParams[\"grid.color\"] = \"#444444\"\n",
|
|
"plt.rcParams[\"lines.linewidth\"] = 2\n",
|
|
"plt.rcParams[\"lines.markersize\"] = 8\n",
|
|
"\n",
|
|
"def plot_execution_times(functions, execution_means, execution_stds, filename):\n",
|
|
"\n",
|
|
" # Create plot\n",
|
|
" fig, ax = plt.subplots()\n",
|
|
" bars = ax.bar(functions.keys(), execution_means, yerr=execution_stds, capsize=5, error_kw={'ecolor': 'grey'})\n",
|
|
"\n",
|
|
" plt.ylabel(\"Execution time (ms)\")\n",
|
|
" plt.xticks(rotation=45, ha=\"right\")\n",
|
|
"\n",
|
|
" # Calculate new ylim with a margin\n",
|
|
" max_execution_time = max(execution_means)\n",
|
|
" upper_ylim = max_execution_time + 0.4 * max_execution_time # Adding a 40% margin\n",
|
|
" plt.ylim(0, upper_ylim)\n",
|
|
"\n",
|
|
" # Annotate bars with execution times\n",
|
|
" for bar in bars:\n",
|
|
" yval = bar.get_height()\n",
|
|
" plt.text(bar.get_x() + bar.get_width()/2, yval + (0.05 * upper_ylim), round(yval, 2), ha=\"center\", va=\"bottom\")\n",
|
|
"\n",
|
|
" plt.tight_layout()\n",
|
|
" plt.savefig(filename)\n",
|
|
" plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "4df834dc",
|
|
"metadata": {
|
|
"id": "4df834dc"
|
|
},
|
|
"source": [
|
|
"## Speed comparison (Nvidia A100 GPU) with warmup (forward pass only)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 38,
|
|
"id": "29b63d3d-6d0b-43bb-9c68-d5514dc81000",
|
|
"metadata": {
|
|
"id": "29b63d3d-6d0b-43bb-9c68-d5514dc81000"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# CUDA benchmark code shared by Andrei Aksionov\n",
|
|
"# and based on code from\n",
|
|
"# https://github.com/cuda-mode/lectures/blob/main/lecture1/pytorch_square.py\n",
|
|
"\n",
|
|
"import numpy as np\n",
|
|
"\n",
|
|
"def time_pytorch_function(func, *input, num_repeats=1_000):\n",
|
|
" start = torch.cuda.Event(enable_timing=True)\n",
|
|
" end = torch.cuda.Event(enable_timing=True)\n",
|
|
"\n",
|
|
" # Warmup\n",
|
|
" for _ in range(5):\n",
|
|
" func(*input)\n",
|
|
" torch.cuda.synchronize()\n",
|
|
"\n",
|
|
" times = []\n",
|
|
" for _ in range(num_repeats):\n",
|
|
" start.record()\n",
|
|
" func(*input)\n",
|
|
" end.record()\n",
|
|
" torch.cuda.synchronize()\n",
|
|
" times.append(start.elapsed_time(end))\n",
|
|
"\n",
|
|
" return np.mean(times), np.std(times)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"id": "9dd07a09",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 488
|
|
},
|
|
"id": "9dd07a09",
|
|
"outputId": "491d06f4-a6bc-431a-a1ca-4db38df57e0c"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"execution_stats = [time_pytorch_function(fn, embeddings) for fn in functions.values()]\n",
|
|
"execution_means = [stat[0] for stat in execution_stats]\n",
|
|
"execution_stds = [stat[1] for stat in execution_stats]\n",
|
|
"\n",
|
|
"\n",
|
|
"plot_execution_times(functions, execution_means, execution_stds, filename=\"1_forward-only.pdf\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "VQaSerWCOnYB",
|
|
"metadata": {
|
|
"id": "VQaSerWCOnYB"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"\n",
|
|
"## Speed comparison (Nvidia A100 GPU) with warmup (forward and backward pass)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 40,
|
|
"id": "69e6377b",
|
|
"metadata": {
|
|
"id": "69e6377b"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def forward_backward(func, embeddings):\n",
|
|
" if embeddings.grad is not None:\n",
|
|
" embeddings.grad.zero_()\n",
|
|
"\n",
|
|
" output = func(embeddings)\n",
|
|
" loss = output.sum()\n",
|
|
" loss.backward()\n",
|
|
"\n",
|
|
"\n",
|
|
"def time_pytorch_function_forward_backward(func, *input, num_repeats = 1_000):\n",
|
|
" # CUDA IS ASYNC so can't use python time module\n",
|
|
" start = torch.cuda.Event(enable_timing=True)\n",
|
|
" end = torch.cuda.Event(enable_timing=True)\n",
|
|
"\n",
|
|
" # Warmup\n",
|
|
" for _ in range(5):\n",
|
|
" forward_backward(func, *input)\n",
|
|
" torch.cuda.synchronize()\n",
|
|
"\n",
|
|
" times = []\n",
|
|
" for _ in range(num_repeats):\n",
|
|
" start.record()\n",
|
|
" forward_backward(func, *input)\n",
|
|
" end.record()\n",
|
|
" torch.cuda.synchronize()\n",
|
|
" times.append(start.elapsed_time(end))\n",
|
|
"\n",
|
|
" return np.mean(times), np.std(times)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 41,
|
|
"id": "ReCmeRhCOpm8",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 488
|
|
},
|
|
"id": "ReCmeRhCOpm8",
|
|
"outputId": "2bcfa909-ba87-4d31-b926-bc66e63736cc"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAHWCAYAAADzS2TwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzddVQU6xvA8e+SkgJigGJ77bx2d4MotthXFMUEbMVWxE7s7r52Xbv7WtiF2KKiqAjs7w8O82PFvurO6vM5xyM7OzM8LzM78+w7b2gcHBy0CCGEEEIIg2Ok7wCEEEIIIcS3kUROCCGEEMJASSInhBBCCGGgJJETQgghhDBQksgJIYQQQhgoSeSEEEIIIQyUJHJCCCGEEAZKEjkhhBBCCANlou8ADJ2TkxMvX77UdxhCCCGE+MVYW1tz7969T64jidx/4OTkxLlz5/QdhhBCCCF+Ubly5fpkMieJ3H8QXxOXK1cuqZUTQgghxHdjbW3NuXPnPptfSCL3Hbx8+ZKIiAh9hyGEEEKI34x0dhBCCCGEMFCSyAkhhBBCGChJ5IQQQgghDJQkckIIIYQQBkoSOSGEEEIIAyWJnBBCCCGEgZJETgghhBDCQEkiJ4QQQghhoCSRE0IIIYQwUJLICSGEEEIYKEnkhBBCCCEMlCRyQgghhBAGShI5IYQQQggDJYmcEEIIIYSBkkROCCGEEMJA/bKJXMuWLdm7dy83b97k5s2bbNmyhQoVKijvm5ubM3LkSK5cucKtW7eYO3cuyZMn12PEQgghhBBf55dN5MLCwhg0aBDly5enQoUK7Nu3j4ULF5I1a1YAhg4dSpUqVWjVqhVubm6kSpWKefPm6TlqIYQQQogvp3FwcNDqO4if5erVqwQEBPD3339z+fJlvLy8WL9+PQBZsmTh8OHDVKlShePHj3/R/mxsbLh58ybp06cnIiLiR4YuhBBCiN/Il+YYv2yNXEJGRkbUrl0bS0tLjh8/Tr58+TAzM2PPnj3KOleuXOHOnTsULFjwo/sxMzPDxsZG+Wdtbf0zwhdCCCGE+CATfQfwI2XPnp0tW7aQJEkSXr16RbNmzbh06RK5cuXi7du3vHjxQmf9R48ekTJlyo/ur0uXLvTo0eNHhy2EEEII8UVUl8ilTZuWYsWKkSZNGiwtLXn8+DFnz57l2LFjvH379qv2dfXqVcqWLYutrS1ubm5MnjwZNze3b45t3LhxTJ06VXltbW3NuXPnvnl/QgghhBD/hWoSubp169K2bVvy5cvHw4cPuX//Pm/evMHe3p706dPz9u1bVq5cyfjx4wkNDf2ifb57944bN24AcObMGfLnz4+Xlxdr167F3NwcW1tbnVq55MmT8+DBg4/uLyoqiqioqP9WUCGEEEKI70QVidyuXbt49+4dS5YsoXnz5oSFhem8b2ZmRqFChahduzY7d+7E39+fv//++6t/j5GREebm5pw+fZqoqCjKlCmjdHbInDkzLi4uX9zRQQghhBDqYGlpiZWV1Vdv9+rVKyIjI39ARD+PKhK5QYMGsWvXro++HxUVxYEDBzhw4ABDhw4lbdq0n91nv3792LFjB6GhoVhbW1O3bl1KlChBvXr1iIiIYNGiRQwePJjw8HAiIiIYMWIER48elUROCCGEMDC5c+emSJEiX73dkSNHOHLkyA+I6OdRRSL3qSTufeHh4YSHh392PUdHR6ZMmULKlCl58eIFFy5coF69euzevRuAPn36EBsby9y5czEzM2PXrl34+/t/axGEEEIIoSdnz57l+vXriZbXqlULS0tLIiMjWbduXaL3X7169TPC+6FUkcgllCdPHt69e8fFixcBqFatGo0bN+bSpUsEBgby7t27L9pP586dP/n+27dv6d69O927d//PMQshhBBCfyIjIz/4iDQ2Nlb5/9GjRz87rJ9CdePIjRkzhsyZMwOQLl06ZsyYQWRkJG5ubgwYMEC/wQkhhBBCqIjqErlMmTJx9uxZIK5K9NChQ7Rt2xYfHx9cXV31HJ0QQgghfrQuXbqwY8cObt26RUhICAsWLFAqeT5k2bJlPHnyhOrVq3/x7xg1ahRPnjyhbdu2yjIXFxfGjx/PyZMnCQ0N5fjx4/To0QNTU9P/VJ4fSXWJnEajwcgoLqwyZcqwfft2AO7evYuDg4M+QxNCCCHET1C8eHFmzZpF5cqV8fDwwMTEhJUrV2JpaZlo3Xbt2qHVft1sozVq1KBgwYLcu3dPZ3mWLFkwMjKiW7dulChRgr59+9KiRQv69u37n8rzI6mujdzp06fx9fVlz549FC9eHD8/PyDuMeuv+nxbCCGEEP9Xv359ndc+Pj5cvnyZvHnzcujQIWV5rly56NChAxUqVFDa1n+Ok5MTI0aMoG7duixdulTnvX/++Yd//vlHeX3r1i0yZ85My5YtCQgI+A8l+nFUVyPXu3dv8uTJQ2BgIGPGjFEG9HVzc+Po0aN6jk4IIYQQP5utrS2AzqgVFhYWTJ8+ne7du/Pw4cMv2o9Go2Hq1KlMnDiRS5cuffHvfvbs2VfH/LOorkbuwoULlCpVKtHygIAAYmJi9BCREEIIIfRFo9EwdOhQDh8+TEhIiLJ8yJAhHD16lM2bN3/xvjp37kx0dDTTp0//ovUzZMhAmzZt6N+//1fH/bOoLpFLyMrKSmkvFy8iIkJP0QghhBDiZwsKCiJ79uzUqFFDWVa1alVKlSpFuXLlvng/efPmxcvLi/Lly3/R+k5OTixfvpx169axYMGCr477Z1FdIpc2bVoCAwMpUaIESZIkUZZrNBq0Wi0pUqTQY3RCCCGE+FkCAwOpXLkyNWvW1Jm+s1SpUmTIkCHRIMBz587l0KFD1KpVK9G+ihYtSvLkyTlz5oyyzMTEhMGDB9OuXTvy58+vLE+VKhVr167l2LFjdO3a9QeU7PtRXSIXHByMRqOhU6dOPHr06Kt7ogghhBDC8AUGBlKjRg3c3Ny4ffu2znvjx49PVEt24MAB+vbty5YtWz64v+XLl7Nnzx6dZStXrmT58uUsXrxYWebk5MTatWs5c+YMPj4+qs9DVJfI5cyZkwoVKnD16lV9hyKEEEIIPQgKCsLDwwNPT09evnypPI178eIFb9684eHDhx/s4BAaGqqT9Pn7+7Nr1y6OHz/+wSk+3717x4MHD5Scw8nJiXXr1hEaGkpAQACOjo7Kul/aoeJnU10id+rUKVKnTi2JnBBCCPGbatWqFQDr16/XWe7j48OSJUu+eD8pUqTA3Nz8i9cvW7YsmTJlIlOmTJw7d07nvWTJkn3xfn4m1SVyXbp0YfTo0Tg5OXHx4sVEc6teuHBBT5EJIYQQ4mf4lqTpQ9v4+/tjbW390W0StosDWLJkyVclimqgukTO0dGR9OnTM3HiRGWZVquVzg5CCCGEEO9RXSI3YcIEzp49i5eXFw8fPlR9I0MhhBBCCH1RXSKXJk0amjRposzoIIQQQgghPkx1U3Tt27ePXLly6TsMIYQQQgjVU12N3NatWxkyZAjZs2f/YGeHj40PI4QQQgjxu1FdIjd69GggrqfJ+6SzgxBCCCHE/6kukUuePLm+QxBCCCGEMAiqayMnhBBCCCG+jCoSudq1a3/xus7OzhQuXPgHRiOEEEIIYRhUkci1bNmSQ4cO0bFjR/74449E79vY2FCxYkWmTZvGrl27cHBw0EOUQgghhBDqooo2cm5ublStWpU2bdrQr18/IiMjefjwIW/fvsXOzo4UKVLw5MkTli5dSsmSJXn06JG+QxZCCCGE0DtVJHIQN6zIli1bcHBwoGjRoqRJkwYLCwuePHnC2bNn+ffff2WWByGEEOIXZdNm/nffpybJGeAdGiv7777/iBnNvuv+vpVqErl4T58+ZdOmTfoOQwghhBBC9VTRRk4IIYQQQnw9SeSEEEIIIQyUJHJCCCGEEAZKEjkhhBBCCAOl2kTO1NSUzJkzY2xsrO9QhBBCCCFUSXWJnIWFBePHjyc0NJQDBw6QJk0aAEaMGEHnzp31HJ0QQgghhHqoLpHr168fuXLlws3NjTdv3ijL9+zZg7u7u/4CE0IIIYRQGdWNI1e9enX++usvjh8/rrM8JCSEDBky6CkqIYQQQgj1UV2NXLJkyT44BZelpaXM7CCEEEIIkYDqErnTp09TuXJl5XV88ta0aVOOHTumr7CEEEIIIVRHdY9WhwwZwvLly8maNSvGxsa0bduWrFmzUqhQIdzc3PQdnhBCCCGEaqiuRu7IkSOUKVMGY2NjLl68SLly5Xj8+DFVq1blzJkz+g5PCCGEEEI1VFcjB3Dz5k26du2q7zCEEEIIIVRNlYkcgKOjI46OjhgZ6VYaXrhwQU8RCSGEEEKoi+oSubx58zJ58mT++OMPNBqNzntarZYUKVLoKTIhhBBCCHVRXSI3YcIErl27RufOnXn48KEMOSKEEEII8RGqS+TSp09PixYtuHHjhr5DEUIIIYRQNdX1Wt27dy+5cuX6z/vp0qULO3bs4NatW4SEhLBgwQIyZ86ss465uTkjR47kypUr3Lp1i7lz55I8efL//LuFEEIIIX4G1dXIde7cmcmTJ5MtWzZCQkJ49+6dzvtbtmz5ov0UL16cWbNmcfLkSUxMTOjbty8rV66kePHiREZGAjB06FAqVapEq1atePHiBYGBgcybN4/q1at/93IJIYQQQnxvqkvkChUqRJEiRahYsWKi976ms0P9+vV1Xvv4+HD58mXy5s3LoUOHsLGxoUmTJnh5ebFv3z4AOnbsyOHDhylYsGCiuV6FEEIIIdRGdY9WR4wYwYoVK8iRIwfJkyfX+fdfeqza2toCEB4eDkC+fPkwMzNjz549yjpXrlzhzp07FCxY8IP7MDMzw8bGRvlnbW39zfEIIYQQQvxXqquRc3BwYOrUqTx69Oi77VOj0TB06FAOHz5MSEgIAClSpODt27e8ePFCZ91Hjx6RMmXKD+6nS5cu9OjR47vFJYQQQgjxX6iuRm7Dhg2ULFnyu+4zKCiI7Nmz06ZNm/+0n3HjxpE+fXrl3/folCGEEEII8a1UVyN37do1+vXrR9GiRblw4QLR0dE670+fPv2r9hcYGEjlypWpWbMmYWFhyvKHDx9ibm6Ora2tTq1c8uTJefDgwQf3FRUVRVRU1Ff9fiGEEEL8WBZEYal5l2i5EVrl/2SaV4nej9Sa8hqzHx7fj6S6RM7T05NXr15RvHhxihcvrvOeVqv9qkQuMDCQGjVq4Obmxu3bt3XeO336NFFRUZQpU4b169cDkDlzZlxcXKSjgxBCCGFAspo8Ir/pvY++b6GJxi3JxUTLT71z4nR06h8Z2g+nukSuQIEC32U/QUFBeHh44OnpycuXL5WOEi9evODNmzdERESwaNEiBg8eTHh4OBEREYwYMYKjR49KIieEEEIYkEvRybkTY/fV20VqTb9/MD+Z6hK576VVq1YASm1bPB8fH5YsWQJAnz59iI2NZe7cuZiZmbFr1y78/f1/eqxCCCGE+HavMeO11rAfkX4rVSRygwcPZvjw4URGRjJ48OBPrtuvX78v2meyZMk+u87bt2/p3r073bt3/6J9CiGEEEKoiSoSudy5c2NiYqL8LIQQQgghPk8ViZy7u/sHfxZCCCGEEB+nunHkJkyY8MEZEywtLZkwYYIeIhJCCCGEUCfVJXINGzYkSZIkiZYnSZKEBg0a6CEiIYQQQgh1UsWjVQAbGxsgbjota2tr3r59q7xnZGREpUqVePz4sb7CE0IIIYRQHdUkctevX0er1aLVajl69Gii97VaLYGBgXqITAghhBBCnVSTyNWqVQuNRsPatWtp0aIF4eHhyntRUVGEhoZy//59PUYohBBCCKEuqknkDh48CED+/PkJDQ3VczRCCCGEEOqnus4OksQJIYQQQnwZ1SVyQgghhBDiy0giJ4QQQghhoCSRE0IIIYQwUJLICSGEEEIYKNX0Wo2XPHlyBg0aROnSpXF0dESj0ei8nyJFCj1FJoQQQgihLqpL5CZNmkSaNGkYNWoUDx48QKvV6jskIYQQQghVUl0iV7RoUWrUqMG5c+f0HYoQQgghhKqpro3c3bt3Ez1OFbqKFSvGokWLOH/+PE+ePKF69eo679esWZOVK1dy5coVnjx5Qq5cuT67z0aNGvHkyROdf3fv3tVZZ9KkSYnWWb58+XctmxBCCCG+nOoSud69e9O/f39cXFz0HYpqWVpacv78ebp37/7R9w8fPszAgQO/ar8vXrwge/bsyr98+fIlWmfHjh0667Rp0+ZbiiCEEEKI70B1j1ZnzZqFhYUFJ06c4PXr17x7907n/cyZM+spMvXYuXMnO3fu/Oj78bVkX5sMa7VaHj58+Ml1oqKiPruOEEIIIX4O1SVyffr00XcIvy0rKytOnz6NkZER//77L4MHD+bSpUs665QoUYKQkBCeP3/Ovn37GDp0KOHh4XqKWAghhPi9qS6RW7p0qb5D+C1duXKFTp06cf78eWxtbenQoQNbtmyhRIkShIWFAXE1gRs2bODWrVtkyJCBvn37snz5cqpUqUJsbKyeSyCEEEL8flSXyAEYGRlRo0YN/vjjDwBCQkLYvHmzJAs/0PHjxzl+/Ljy+ujRoxw6dIjmzZszfPhwANasWaO8f/HiRc6fP8/JkycpWbIke/fu/ekxCyGEEL871SVyGTJkYOnSpTg5OXH16lUAOnfuTFhYGA0bNuTmzZv6DfA3ER0dzdmzZ8mQIcNH17l16xaPHz8mQ4YMksgJIYQQeqC6XqvDhw/n5s2b5MmTh/Lly1O+fHny5s3LrVu3lJoh8eMZGRmRI0cOHjx48NF1nJ2dcXBw+OQ6QgghhPhxVJfIFS9enAEDBvDs2TNlWXh4OIMGDaJ48eL6C0xFrKysyJUrlzI+XNq0acmVKxepU6cGwM7Ojly5cpE1a1Ygrqdvrly5dKY3mzJlCv369VNe+/n5UbZsWdKlS0eePHkIDg4mTZo0LFy4UPmdAwYMoGDBgri4uFC6dGkWLFjA9evX+eeff35W0YWKfW58Q4CePXty/vx5QkNDWb16NRkzZvxP+zQxMSEgIIB9+/Zx+/Ztzp8/z5QpU0iVKtV3LZsQQqiV6hK5qKgorK2tEy23srJKNBTJ7ypfvnzs2bOHPXv2ADB06FD27NlDr169AKhWrRp79uxh2bJlQNyQLnv27KFFixbKPlKnTk3KlCmV13Z2dowbN45Dhw6xdOlSbGxsqFatmtJrNSYmhpw5c7Jw4UKOHj3K+PHjOXPmDDVr1iQqKuonlVyo2efGN+zUqRNeXl74+flRuXJlIiMjWbFiBebm5t+8TwsLC/LkycOoUaMoX748zZs3J3PmzCxatOi7lEkIIdRO4+DgoKrJTKdMmUKePHno3LkzJ06cAKBgwYKMHTuWM2fO4OPjo+cI/8/GxoabN2+SPn16IiIi9B2OMEDW1tb06tWLGjVq4OjoyNmzZ+nduzenTp364PqTJk2iUaNGiZaHhIRQokQJALp06ULNmjXJkiULr1+/5tixYwwcOFBpc/ozPHnyhKZNm7Jp0yZlWXxt2eTJk4G4z09ISAg+Pj46HWm+Zp8fkj9/fnbs2EGePHkSzU4ihFAvmzbz9R3CV4mY0eyH7v9LcwzV1cj17NmTmzdvsmXLFsLCwggLC2PTpk3cuHFDqXES4lcxbtw4ypYti7e3N6VKlWLXrl2sXr0aJyenD67fq1cvnZk1cufOzdOnT1m3bp2yTvHixZk1axaVK1fGw8MDExMTVq5ciaWl5c8qViLp0qUjVapUSi0yQEREBCdOnKBQoULf9XfZ2toSGxvLixcvvut+hRBCjVTXa/XFixd4enqSMWNGsmTJAsDly5e5ceOGniMT4vtKkiQJrq6ueHp6cujQIQBGjhxJlSpVaNmyJcOGDUu0TUREhM43s+rVq2NnZ8fixYuVZfXr19fZxsfHh8uXL5M3b17l9/xs8e0zHz16pLP80aNHOm03/ytzc3P69+/PqlWrpJZcCPFbUF0iF+/69etcv35d32EI8cOYmJhgYmLC27dvdZa/efOGIkWKfNE+mjRpwp49ewgNDf3oOra2tgC//AwcJiYmzJo1C41Gg7+/v77DEUKIn0IVidzgwYMZPnw4kZGRDB48+JPrJuxpKX59RkZG9OjRg3r16pEiRQru37/PkiVLGD169Ce3a926NX/99RcuLi7cvXuXMWPGKJ0/IO6m36VLFxo2bKiMWThw4MCf2gP35cuXHD16FF9fXy5fvszDhw/x8PCgUKFCX1QDnSpVKipWrIiXl9dH19FoNAwdOpTDhw8TEhLyPcP/KvHz8yZPnlxnuJrkyZNz7ty5/7x/ExMTZs+ejYuLC+7u7lIbJ4T4bagikcudOzcmJibKz0LE69y5My1btqRDhw6EhISQL18+Jk2aREREBNOnT//gNi1btqRfv3506dKFU6dOUaBAAcaNG8ezZ8/YunUrEDenb7169ejSpQtXrlyhfPnyzJ8/n2rVqnH27NmfVj5vb28mTJjA+fPniY6O5t9//2X16tXkzZv3s9s2bNiQ58+ff7Lxf1BQENmzZ6dGjRrfM+yvduvWLe7fv0/p0qWVxM3GxoY///yTOXPm/Kd9xydxGTNmpFatWr98zaMQQiSkikTO3d39gz8LUahQITZv3sz27dsBuHPnDh4eHhQoUOCj29SvX5+5c+eydu1aIC6JyJ8/P506dVISufr16zNmzBh27NgBwJw5cyhTpgwdOnSgXbt2P7ZQCdy8eRM3NzcsLS2xsbHhwYMHzJw584tmMGncuDHLly//6LA8gYGBVK5cmZo1ayrz5f5IVlZWOjOBxI9vGB4ezt27d5k2bRq+vr5cv36dW7du0bt3b+7fv6+TiK5Zs4aNGzcyc+bML9qniYkJc+fOJU+ePDRq1AhjY2OlzV14eLgMWSSE+OWprtfqhAkTPjiOnKWlJRMmTNBDREKfjh07RunSpcmUKRMAOXPmpEiRIkoC9iFmZmYfbHdWoEABpebXzMyMN2/eJFrnS9umfW+RkZE8ePCApEmTUr58eTZv3vzJ9UuUKEGmTJmUAZvfFxgYSI0aNXB3d+f27ds/IuREPje+4YQJE5gxY4aSQFtZWVG/fn2dY5U+fXocHBy+eJ9OTk5Uq1aN1KlTs3fvXi5evKj8K1y48E8ptxBC6JPqxpF7+PAhOXLk4PHjxzrLHRwcuHjxos4gtvom48j9eBqNhn79+tGxY0diYmIwNjZm6NChjBs37qPb9O3bl0aNGtG4cWPOnDlDvnz5WLx4MSlTplSmHZs2bRq5cuWiadOm3LhxgzJlyrBgwQKMjY1xdnb+aeUrV64cGo2Gq1evkjFjRgYMGMDbt2+pUaMG0dHR9OvXDycnJ9q3b6+z3dSpU8mYMSNVqlRJtM+goCA8PDzw9PTUGTvuxYsXiZJXIYRQCxlHTteX5hiqeLQKcQFD3I3b2tpa51u6kZERlSpVSpTcic+ztLTEysrqq7d79eoVkZGRPyCir+Pu7k7dunXx8vIiJCSE3LlzM3ToUO7fv8/SpUs/uM2oUaNIkSIFW7duRaPR8OjRI5YtW0anTp2IjY0FoHfv3owbN47Dhw+j1Wq5efMmS5YsoXHjxj+zeNja2tKvXz+cnZ0JDw9nw4YNDBkyhOjoaABSpkypTL0Wz8bGhpo1a9K7d+8P7rNVq1YArF+/Xme5j48PS5Ys+QGlEMJwfGsHqhIlSjB48GCyZcumdKBK+Hn61v0K8V+pJpG7fv06Wq0WrVbL0aNHE72v1WoJDAzUQ2SGLXfu3N/0uPDIkSMcOXLkB0T0dQYOHMj48eOVkf8vXryIi4sLXbp0+Wgi9+bNGzp16kS3bt2UC2rz5s2JiIhQvgzEzxJgbm6Og4MD9+7dIyAggFu3bv20sgGsW7dOZzDf931oJpOIiAhcXFw+uk2yZMm+S2xC/Iq+pQNV2rRpWbJkCXPnzqVdu3aULl2acePGcf/+fXbt2vXN+/3eTp06Rdq0aRMtnzVr1kenuWvbti2tWrUiderUPH36lL///pvBgwcrlSktW7akZcuWyn5DQkIICgpi586dP64g4quoJpGrVasWGo2GtWvX0qJFC52eZ1FRUYSGhnL//n09RmiYzp49+8Hx+GrVqoWlpSWRkZEfTCRevXr1M8L7LAsLC6UWLV5MTAwajeaz20ZHRyuN/GvXrs3WrVvRanVbErx9+5Z79+5hYmJCzZo1P5lUCSEM37d0oGrZsiW3b9+mf//+QNwg9UWKFMHb21tJ5L5lv99bxYoVMTY2Vl5nz56d1atXf/S65uHhQf/+/enUqRNHjx4lU6ZMTJ48Ga1Wqwz1FRYWxqBBg7h+/ToajYaGDRuycOFCypYtq8zFLfRLNYncwYMHgbh5Ej81uOnv6L+2G/hQqyhtkjPAO7QWSXnjnrjq3xiw+cbf9z3bDWzdupVu3boRGhpKSEgIefLkwdvbW2cmg/fbkWXKlIkCBQpw4sQJ7Ozs8Pb2Jnv27HTo0EHZ5s8//8TJyYmzZ8/i5OREjx49MDIykg41Qvzijh07RrNmzciUKRPXrl1TOlB9aozSggUL6kwvB7Br1y6GDh36n/b7vT158kTndefOnbl+/ToHDhz44PqFCxfm6NGjrFq1CohLPletWsWff/6prBPf0z/e0KFDadmyJQULFpRETiVUk8jFc3Fx+eRjI31NMWSoLIjCUpN4CAYjtMr/yTSJa98itaa8xuyHx/c5PXv2pFevXgQFBeHo6Mj9+/eZN28eQUFByjrvtyMzNjamffv2ZM6cmejoaPbv30+1atW4c+eOso65uTm9e/cmXbp0vHr1ih07duDt7S3zcwrxixs3bhw2NjYcPnxYpwPVypUrP7pNihQpEk0v9/DhQ2xtbUmSJAlv3rz5pv3+SKamptSrV4+pU6d+dJ2jR49Sr149ChQowMmTJ0mXLh2VKlVi+fLlH1zfyMhIeZpz/PjxHxW6+EqqS+T+/vvvRMsSPg77nvMy/g6ymjwiv+m9j75voYnGLcnFRMtPvXPidHTqD2zxc718+ZI+ffrQp0+fj67zfjuyy5cvU65cuU/u9+DBgxQvXvy7xCiEMBzf0oFKn/v9VtWrVydp0qSf7OC0atUqkiVLxsaNG9FoNJiamjJnzhzGjh2rs1727NnZsmULSZIk4dWrVzRr1kxq41REdYlcxowZdV6bmpqSJ08eevXqpVONLb7Mpejk3Imx++rtIrWm3z8YIYTQs2/pQPXw4UOSJ0+usyxFihQ6Q/p8y35/JE9PT3bs2PHJtuUlSpSgS5cu+Pv7c+LECTJmzMiwYcPw9fXV6W179epVypYti62tLW5ubkyePBk3NzdJ5lRCdYnch8ZK2b17N1FRUQwePJgKFSp88b6KFSuGj48P+fLlI1WqVDRt2jTRdEY9e/akadOmJE2alKNHj+Ln5/fBzgGG6jVmvNbq/xGpEEKowbd0oDp+/DgVK1bUWVamTBmOHTv2n/b7o6RJk4YyZcrQvHnzT67Xq1cvli9frgwsfvHiRSwtLRkzZgxjxoxRnoa9e/dOmf/5zJkz5M+fHy8vL3x9fX9sQcQXUd3MDh/z6NEjMmfO/FXbWFpacv78+Y92u+7UqRNeXl74+flRuXJlIiMjWbFiBebm5t8jZCGEECoT34GqUqVKuLi4UKNGDby9vXW+5Pfr148pU6Yor+fMmUO6dOkICAggS5YstGrVCnd3d532Z1+y35+lcePGPHr0iG3btn1yPQsLi0Q9+WNiYgA+mYAaGRnJfVJFVFcjlyNHDp3XGo2GlClT0rlzZ2Wy7S+1c+fOT45107ZtW0aPHq1Mh+Tt7U1ISAjVq1dXqseFEOJ34+TkREBAABUqVMDCwoIbN27QsWNHTp8+/cH1ixQpoiQ5FhYWhIaGMnfuXIKDg5V1rK2t6dWrFzVq1MDR0ZGzZ8/Su3dvTp069ZNKFedbOlDdvn2bRo0aMWTIENq2bUtYWBhdunRRhh750v3+DBqNhsaNG7Ns2TIlKYs3ZcoU7t27x+DBg4G45LN9+/b8+++/yqPVXr16sXXrVqV2sV+/fuzYsYPQ0FCsra2pW7cuJUqUoF69ej+1XOLjVJfI7dmzB61Wm+jbwPHjx+nUqdN3+z3p0qUjVapUOl3KIyIiOHHiBIUKFfpgImdmZqbzLeRDc8IKIT4vWbJk3zRw8ZMnTxINsSC+r6RJk7Jp0yb2799PgwYNePz4MRkzZuTZs2cf3SYyMpKZM2dy/vx5IiMjKVq0KKNHjyYyMpL58+OGTxo3bhzZs2fH29ub+/fvU69ePVavXk3x4sW5d+/jHbK+t2/pQAVw4MCBT3ai+pL9/gxlypTBxcWFRYsWJXovderUOo9/R48ejVarpXfv3jg5OfHkyRO2bt3KkCFDlHUcHR2ZMmUKKVOm5MWLF1y4cIF69eqxe/fun1Ec8QVUl8jlz59f53VsbCxPnjxJNAn6fxXf+/X9LuWPHj36aM/YLl260KNHj+8ahxCG6r+Mb1jeLAQn45dfvd29GGu2RGX7pt/5o+dF/FV07tyZu3fv0rFjR2XZ7du3P7nN2bNnOXv2rPL6zp071KxZk2LFijF//nySJEmCq6srnp6eyhBSI0eOpEqVKrRs2ZJhw4b9mML8hnbv3v3RL0m1atXSeR0TE0NQUNAnaw07d+78XeMT35/qEjk1DwY8btw4nTYR1tbWX/24V4gv9SvXWh2JcsHe6PVXbxcea/EDohEJVa1alX/++YfZs2crtWWzZ89mwYIFX7yP3LlzU6hQISVBMzExwcTEJNEX8jdv3nzTFIJCiP9TXSI3fPhwbty4kWhuur/++osMGTJ8t2rrhw8fApA8eXIePHigLE+ePPlHk7OoqCiioqK+y+8XvweptfqwcKwIj7X6Kb9LfJ106dLRsmVLpk6dytixY8mfPz/Dhw/n3bt3nx1G4+zZsyRLlgwTExMCAwOV3pAvX77k6NGj+Pr6cvnyZR4+fIiHhweFChVSekMKIb6N6hI5V1dXmjRpkmj50aNH6dy583dL5G7dusX9+/cpXbq0krjZ2Njw559/MmfOnO/yO4T4L6TWSuiDkZERp0+fVtpJnT17luzZs9OiRYvPJnI1atTAysqKggUL0r9/f27cuMHq1auBuM5kEyZM4Pz580RHR/Pvv/+yevVq8ubN+8PLJMSvTHWJnL29/QenSYqIiMDBweGr9mVlZUWGDBmU12nTpiVXrlyEh4dz9+5dpk2bhq+vL9evX+fWrVv07t2b+/fv66W7uBDvk1oroQ8PHjxINNDr5cuXcXV1/ey28W3pLl68SIoUKejRo4eSyN28eRM3NzcsLS2xsbHhwYMHzJw5k5s3b373MgjxO1FdInfjxg0qVKjAzJkzdZZXrFiRW7dufdW+8uXLpzPlV/zMEEuWLMHHx4cJEyYogx8mTZqUI0eOUL9+/e/esUL8GL9yGzIh9OXIkSOJxuzMlCmTzlzFX0Kj0WBmlngw8sjISCIjI0maNCnly5dnwIAB/yVcIX57qkvkpkyZQmBgIMmSJWPfvn0AlC5dmvbt23/1Y9UDBw589kY/YsQIRowY8c3xiv9G2pAJoS7BwcFs3ryZrl27snbtWgoUKECzZs3o1q2bsk6/fv1wcnKiffv2ALRu3ZrQ0FCuXLkC/H9WnYRtncuVK4dGo+Hq1atkzJiRAQMGcOXKFRYvXvxzCyjEL0Z1idzixYsxNzenW7du+Pn5AXHV9f7+/ixbtkzP0Qk1kTZkQnx/p06dolmzZvTr1w8/Pz9u375Nnz59WLlypbLO+wPmGhkZ0a9fP9KmTUtMTAw3btxg4MCBzJ07V1nH1taWfv364ezsTHh4OBs2bGDIkCFER0f/zOIJ8ctRXSIHcdOhzJkzh2TJkvHmzRtevXql75CECkkbMiF+jG3btn1yeqf3B8ydMWMGM2bM+OQ+161bx7p1675LfEKI/1NlImdsbEzJkiVJnz49q1atAiBVqlRERERIUieEEOKHsLS0xMrq678cvnr1isjIyB8QkRCfp7pELk2aNKxYsYLUqVNjbm7O7t27efnyJZ06dcLMzEx53CqEEGrVuXNn+vfvT3Bw8Efb9mbNmpVevXqRN29e0qZNS+/evZk2bdpPjlQkVKBAAQoUKPDV2508eZL9+/f/gIiE+DzVJXLDhw/n9OnTlC5dmqtXryrLN27cyNixY/UYmRBCfF7+/Plp3rz5Z2d9sbS05ObNm6xbt05nbkvx3/yXDlSmJreBh1+/Xe6q2GT3+qbf+TM7UElP/1+T6hK5okWLUq1aNd69e6ez/Pbt2zg5OekpKiGE+DwrKyuCg4Pp2rWrTi/PDzl16hSnTp0CoH///j8jPPEZ56NTcSPm6xOdSK3pD4gmsf+SpIL09P9VqS6RMzIywtjYONFyZ2dnXr78+hNQCCF+lpEjR7J9+3b27Nnz2UROqM9rzHitTTz23a9Cevr/mlSXyO3atYu2bdsqF0GtVouVlRU9e/Zkx44deo5OCCE+rHbt2uTJk4eKFSvqOxQhPkh6+v+aVJfI9e/fnxUrVnDw4EHMzc2ZPn06GTNm5OnTp7Rp00bf4QkhRCLOzs4MGzYMDw8PmRlGCPFTqS6RCwsLo3Tp0tSuXZucOXNibW3NwoULWblyJW/evNF3eEIIkUi+fPlIkSIFu3btUpaZmJhQvHhx/vrrL5ycnIiNjdVjhEKIX5XqErlkyZLx5MkTVq5cqTOSOED27Nm5ePGiniITQogP27t3LyVKlNBZNmnSJK5cucL48eMliRNC/DCqS+T27dtH586d2b59u87yDh060KtXL9KkSaOnyIQQ4sNevnxJSEiIzrJXr17x9OlTZfmUKVO4d+8egwcPBsDU1JSsWbMCYGZmhpOTE7ly5eLVq1fcuHHj5xbgK8iguUKoi+oSualTpzJ37lyWLFlC3759sbe3Z8qUKWTPnp22bdvqOzwhhPgmqVOn1qmZS5UqFXv27FFed+zYkY4dO7J//35q1aqljxC/iAyaK4S6qC6RmzhxIrt372bq1Kns3bsXe3t7Tpw4QenSpXn48OsHahRCCH14Pxl7//WdO3e+aXDW70EGzRXi16G6RA7gxo0bXLx4EVdXVwDWrl0rSZwQQqiA2gfNFeJ3o7pErnDhwgQHBxMeHk7p0qUpXLgwI0aMoGLFivj6+vL8+XN9hyiEEL+tX33QXCEMjZG+A3jf2rVrWbt2LVWqVOHy5cssXLiQsmXLkiZNGmlfIYQQQgiRgOpq5OrWrcvBgwd1lt28eZNq1arJlDdCCCGEEAmorkbu/SQunlarZfTo0T85GiGEEEII9VJNIrd06VJsbGyU1507d8bW1lZ5bW9v/9EkTwghhBDid6SaRK58+fKYm5srr7t27Yq9vb3y2sTEhMyZM+sjNCGEEEIIVVJNIqfRaD75WgghhBBC6FJNIieEEEIIIb6OahI5rVaLVqtNtEwIIYQQQnyYaoYf0Wg0TJo0iaioKADMzc0ZPXq0MsmymZkMQCmEUL9kyZJ909RbT5484cmTJz8gIiHEr0w1idzSpUt1Xq9YsSLROsuWLftZ4QghfmP/ZS7S8mYhOBm//Ort7sVYsyUq2zf/XpmPVIjfk2oSuY4dO+o7BCGE+M+ORLlgb/T6q7cLj7X4AdEIIX51qknkhBDiVxCOFeGxVvoOQwjxm1BNZwchhBBCCPF1JJETQgghhDBQksgJIYQQQhgoSeSEEEIIIQyUJHJCCCGEEAZKEjkhhBBCCAMliZwQQgghhIGSRE4IIYQQwkBJIieEEEIIYaAkkRNCCCGEMFCSyAkhhBBCGChJ5IQQQgghDJQkckIIIYQQBkoSOSGEEEIIAyWJHNC6dWtOnTrF3bt32bZtGwUKFNB3SEIIIYQQn/XbJ3Lu7u4MHjyYoKAgypcvz7lz51ixYgWOjo76Dk0IIYQQ4pN++0Suffv2LFiwgMWLF3Pp0iV8fX15/fo1TZo00XdoQgghhBCf9FsncqampuTNm5c9e/Yoy7RaLXv27KFQoUJ6jEwIIYQQ4vNM9B2APiVLlgwTExMePnyos/zhw4dkyZIl0fpmZmaYm5srr62trXX+/1GszQ3sMNnYfPGqv3LZ4Ncun5RNZX7l8knZAAMsG/za5fvK+8HX+tLcQuPg4KD9oZGoWKpUqTh//jxVqlTh+PHjyvKAgABKlChB5cqVddbv3r07PXr0+NlhCiGEEOI3lStXLu7du/fR9w0s/f2+njx5QnR0NClSpNBZniJFikS1dADjxo1j6tSpOsvs7e0JDw//oXH+CNbW1pw7d45cuXLx8uVLfYfzXf3KZYNfu3xSNsP1K5fvVy4b/NrlM/SyWVtbfzKJg988kXv37h1nzpyhdOnSbNq0CQCNRkPp0qWZOXNmovWjoqKIiorSWRYREfFTYv1RXr58afBl+JhfuWzwa5dPyma4fuXy/cplg1+7fIZati+J+bdO5ACmTJnC5MmTOX36NCdPnqRt27ZYWlqyePFifYcmhBBCCPFJv30it3btWhwdHenZsycpUqTg3Llz1K9fn0ePHuk7NCGEEEKIT/rtEzmAmTNnfvBR6q/s7du3BAYG8vbtW32H8t39ymWDX7t8UjbD9SuX71cuG/za5fuVyxbvt+61KoQQQghhyH7rAYGFEEIIIQyZJHJCCCGEEAZKEjkhhBBCCAMliZwQQgghhIGSRO4XotFo9B2C+AZy3IQQQnwrGX7kF6HRaNBq4zogV6hQgdDQUK5evUpMTIyeI/s+XF1dyZgxI8bGxqxfv54rV67oO6TvIuFxa9asGY8fP+aff/7hzZs3eo5MfImEx+9X8yuXDXTLZ2NjY5Cj/n/Mr3zsfuWyfStJ5H4R8Sd23759qVevHoMGDSIsLOyXuDj179+fevXqcfr0aUqWLEmhQoXw9PT8JZLU+OMWEBBA/fr1GT9+PEmSJPllEjkjIyNiY2P1HcYPkfCGUqxYMSwtLbl48SL37t37JW408WWoU6cOzs7OhIWFsX79et69e6fnyP67hMeua9euZMyYkZEjR3Lnzh09R/bfJSxbrVq1cHZ2xtzcnF27dnHmzBk9R/ffxZetQYMG/PHHH1y/fp0dO3bw4MEDPUemP5LI/UJ8fX1p3LgxLVq04OzZs7x+/VrfIf1nvr6+NGjQgEaNGvHvv/+SLVs2tm3bRqpUqbh7966+w/suvLy8aNSoER4eHpw/fx74db51xidxffr0wcbGhtevXzNw4EA9R/V9xB+fgQMH4uHhgY2NDZcuXWLlypXMnj2b6OhoPUf43/Xp04d27dpx5swZihQpQuXKlRkzZgyXL1/Wd2j/yftfoIYPH/5LJKiQuGx79uwhU6ZM1K5dmyVLlhAcHKznCP+7nj174u3tzdGjR/Hx8WHDhg3MmjWLgwcP6js0vZBE7heRNGlSypQpQ2BgIEePHiVVqlTkyZOHevXqcfnyZdauXcvDhw/1HeZXyZEjB4UKFcLf359///0XgOfPn3P58mXatm2LkZERp06dYtWqVXqO9Ou8n6TlypWLefPmcf78edKlS0f+/Pnx8vLi8uXLbNu2jU2bNukx2v9uypQpFCtWjOPHj1OqVCmKFi3KX3/99Usk4sWLF6d48eK0bNmS8PBwfHx8qF27NtbW1kyYMMGgk7lMmTJRoEABXF1dOX36NHnz5mXZsmWYmJgQFBTEpUuX9B3if1K1alXq169P48aNlZoqa2trHB0dCQ8P5/nz53qO8Nu5ublRp04dpWweHh5MmjSJ0NBQfYf2n2XPnp2cOXPi4eHB8ePHyZMnD+PGjaNdu3ZoNBoOHDig7xB/OknkDNT7yYCxsTEODg44ODjg6uqKq6srzs7OWFpakj9/fpInT86wYcMMqpbn7t27zJ8/n8OHDwNxZV61ahVarRYjIyOyZctGiRIlAAwmmTM3N1emiilXrhy7du3C0dGRPHnycOfOHerWrUtUVBTXrl3jjz/+wM7Ojp07dxrU9DIJH6eamJgQHR2Nm5sboaGhODk5sXz5cubNm0fz5s0NOpmrUaMGlSpVYv/+/Rw7dgyIq8Hq27cvlStXRqvVMnHiRINM5rp06UKxYsV48eKFUvt25swZGjVqxOLFiwEMLpl7/5rp4ODAlStXOHPmDDlz5qRKlSo0bNgQU1NTdu7cSWBgoMHOue3i4sKpU6c4c+YMtWrVYtSoUfTq1YsNGzZgYWFB2rRpDerYxWvdujVVqlQBUOL/999/8fPzY9SoUXh5eaHVan+7mjnptWqAEl6Qypcvj5OTE0+fPmXNmjW0aNGCSZMmcefOHUaMGEH58uW5fv06dnZ2BpXEQVzt2/bt23n69CkADRs25MGDB7i6utK3b1/q1q1LdHQ0ZcqU0XOkX6ZatWrMnTsXgCFDhjBq1CjMzMzo1KkTr169wsfHhz179jB8+HA6duzIwoULcXBwwMjIcD6mCZO4IkWKUK1aNSwsLHj37h1arZawsDDq1atHkiRJmDNnDqlTp9ZzxN/G0tKSli1b4uHhQdasWZXlr169YsiQIZw8eZKKFSvSu3dvgzp+8UJCQihfvjyFCxfGyclJWX7q1CkaNWpE0aJFGTZsGC4uLnqM8sulT59euf61b9+e/PnzExoaSokSJQgODmbp0qVkyZKFiRMnMnXqVKpVq4aDg4Oeo/4yH+r1bmVlRWhoKAULFmTChAkMGjRIufbUqlWLKlWqYGlp+ZMj/e/CwsLInTs3uXPnJlu2bMrykydP4uvri7OzMz179iR37tx6jPLnk7lWDVh8x4bhw4ezevVqoqKiyJo1K+/eveP69evKeitXruTs2bMG0TYpf/782Nvbc/fuXaWzRnxyYGpqilarJTo6Wlk2efJkXrx4Qa9evfQd+mflzp2b9evXExoaSurUqalevToXL14E4i7GdnZ2hIeHA3E1rIsXL+bp06d4e3vrM+xvsnDhQgoUKIBWq8XOzo4WLVqwc+dOJclLmTIlK1asIGnSpJQtW1YptyFxdHRkyJAh5M+fnylTpjBv3jzlPSsrK4KCgnj9+jW+vr56jPLzPtYes3Tp0qxcuZKFCxcyYsQInaYZhQoVokuXLnh6eqr+C2LOnDnZvXs3f/31F4ULF6ZBgwZUrVqVq1evUqtWLSpWrMi+ffvYu3cv9+/fx8HBgZUrV+Lv78+JEyf0Hf4nJTx2xYsXJyQkhKdPn1KsWDH+/vtvIK4WK/5nCwsL5s2bx7Vr11R/zfzYeVmmTBkmTJjAgQMHmDhxonINBShcuDCenp507txZ9efl9ySJnIHy9/enVatWNGvWjJCQkES9U5MmTUqmTJnw8/PDxcWFsmXLqr6XZ0BAAO7u7lhaWvLs2TPu379Pt27duHbt2gc/1M7OzixYsIAFCxYo3zbVbvbs2bi6urJv3z7q1q2bqEentbU1lStXpm7duri4uFCuXDmDeDSX8Pg0bNiQhg0bKl8cRo0aRZIkSejYsSOnTp1S1nN2dqZVq1YMGTJEb3F/iYRlS5UqFa9evcLU1JSnT5+SIkUKAgMDcXR0ZOnSpSxatEjZLkmSJLx9+1bVN5SEZcuRIwd2dnbcvn2b8PBwXr16RZUqVViwYAHz58//6KNGtXbMcXJy4t69ewB06tQJf39/YmJiqF69OhcuXFDijv9SaGRkhLm5OXPnzsXS0hI3NzdVlutD+vTpQ6VKlZg3bx6LFy/m7du3dOjQgd69e9O3b192796Nra0tffr0IXny5FSsWFHV94OE59Sff/6Jra0tz549IyQkhNevX1O1alVGjBjB3r17mTJlCiEhIZ/cx69O2sgZIHt7e8qUKUNAQADHjh0jRYoU/PHHH9StW5dTp06xe/du0qdPz9ChQ3n69CnlypUjJiZG1UNBeHh44OnpSdOmTblx4waFCxemSZMmbN++nTp16nD69Gkl/vgGyQsWLODq1asGk8QBrF+/nk2bNjF48GDmzZtHhw4dePHihfK+nZ0dRYoUISoqSkm+jY2NVX3Rhf/3lGvXrh05c+Zky5YtnDp1CoDKlSvzzz//MHHiRJ1kLiwsTEni1HzRjY/L39+fypUrkzRpUl68eEFQUBBbt26lR48eBAYG0rBhQ7RardKGLH4IGUMoW//+/XF1dcXR0ZGwsDBu3ryJr68vW7dupWnTpsyfP5+YmBjGjh3L/fv3P7gPNZkwYQL58uWjdevWXLlyhfv375MkSRJiY2PJli0bFy5cUOKOjY3FzMyMVq1aUaNGDSwtLalSpQparVbVxy5er169aN68Oc2aNePChQtKe9p58+Zhbm7OgAEDePnyJY8ePeLx48dUqlRJ9feDhD1vXV1dsbGx4enTp7x8+ZJGjRqxZcsWtFotI0aMIDY2ltmzZysd4t7fx+9AauQMUMqUKdm9ezdjxozh2rVr1KtXj4wZM2JtbY2RkRGzZ89mxowZFCxYkBMnTqDValWfDHTq1ImCBQvSrFkzZZmLiwsDBgygfPnyVK5cmStXrmBubk6nTp2oWrUqN27c4K+//gLUebNM+De3s7Pj5cuXSu1a/vz5Wbp0KUePHqV9+/ZKjWrt2rXZsWOH8lrNF1vQ/bubm5uzdetWcubMyeLFi+ncubOynpGRETt27MDMzAxfX1+OHDmir5C/iZ+fH23btsXf3x87Ozty585N06ZN6datGwsXLiRVqlQMHTqUHDlyEBAQwLZt2/Qd8hdr06YN3bt3p1WrVoSGhlKsWDHq16+PjY0NjRs35sGDB5QvX55ly5YxYMAAJk+erO+QPytNmjRs3bqVS5cu0blzZ+7cuUOKFClo1KgRvXv3pmvXrkrCDWBmZkbRokUpV64cQ4YMUe0XqHLlynHy5EmlR22mTJmYMWMGAQEB7Nu3j2TJkuHs7Ez16tXZs2cPhw8fJkOGDCRLloyIiAguX75sEPcDgJYtW9K7d2+aNGnCvXv3yJIlC926dSN16tSUL1+e8PBwKlSowIIFCwgKCmLs2LH6DllvJJFTuY8lKD169MDLywsTExNmz57N7t272bNnD4sWLeLu3bt07979s/tQEz8/P1q0aEHevHl1LjCpU6dm5MiRJE+enAYNGhAeHk7atGkpUqQIK1asANRXvgoVKnDq1Cmlk4avry8lSpTAzs6OcePGcfjwYR4+fEi+fPlYunQpp0+fZsqUKXTo0AF7e3ulNsCQpE6dmrt372JpacnMmTPJkCEDQ4cOZfPmzcrxNDIy4uzZsyxdupTBgwfrOeKPe39AZltbW5YsWcKSJUtYuHAhEHfOde3alV69elGjRg1lyJ9WrVoptQRqVKRIEZ0k2sTEhEmTJhEWFsagQYOU5SVLlqR3794cP36cQYMGER0dzZ9//snp06dVnwDE95R2cnLin3/+4erVq3Tp0oVr164BcdfObt260alTJ5YtWwbA0KFDWblypVKLrMYvUM2aNWPw4MEEBASwatUqIiIicHZ2Ztu2bQwbNox///2XNm3a8OeffwKQNWtW6tevz65du3T2o7brJUCpUqXYt2+fzrKgoCCio6N12vJlyZKFSZMmcevWLdq3b6+cl6dOnVLd8fqZDK871W8k4QcuV65cFC1alMyZMwMQGBiIh4cHlSpVYuDAgezZsweIuwk9efJEZz9q+9B+yK5du3j06BHt2rUjSZIkyvK7d+8ye/ZsrK2tyZgxIwC3b99WbRLn6enJnDlzqF27NqampjRr1ox27dqxc+dO5WbZqlUrnJ2dOX36NLVq1SJbtmwMGTIEW1tbqlevrqryfImuXbsyevRo8uTJQ2RkJG3atOHBgwd06tSJKlWqYGxsDMQ9wsqZM6eqk7hVq1Yl6pxgaWlJtmzZiIqKUpZptVqmTJnC7t27cXNzw8TEhPv37zNs2DClvZXadOjQgYCAAOD/PR2jo6OxsLDgjz/+0Fl3//79nDlzhsKFCyvLTpw4odRUqZVGo1Fqve/du0eFChXInDkzo0aNIkuWLEDctXP06NFMmjSJoKAgNm/eTPny5XUezakxKZg/fz7Lly/H29ubunXrkjRpUh4+fMiGDRvo0aMHW7duVXpNlyxZkoMHD1KyZMlE+1Hb9aV169Y6XyLiJU2alDx58ugsu3LlClu3biVTpkzKfeLEiROq/cz9LL9vyQ1Awmm3pk2bxqJFixg1ahRDhgxBo9Fw+vRpLl++jLW1Nfny5WPRokWkSJGCUaNG6Tnyz3u/y3z8mEd16tShZs2amJubK+8dOXIEe3t75UKckNouSgsXLmTRokV4e3vToEEDsmfPjre3N5MnT8bT05N58+ZRq1YtWrRoQerUqbl06RLFihWjTZs2VK9enejoaFXfKD/k6dOn2NjY4O3tTZ48eXj16hWenp5ERkbSqVMnKleunKhMHxoyQQ0GDhxIUFAQEFezA3D//n327NmDu7s7KVKkUNZ98+YNr169ws7OLlGHFDUmAqtWraJmzZoAZMiQAYg7DmfOnMHJyYkiRYroHKf4xMbCwkJnP2qukYu/HhQpUoQ0adIQFhZGhQoVyJYtG0FBQco1ZOTIkXTv3p00adJw9epVSpUqpbQbU6P4uPz9/dm3bx8dOnSgTp06aDQahg4dSosWLahZsya9e/dmy5YtmJiYYGpqqnT2ULPFixdToUIFAJ0vFLt27SJJkiS4ubnpnJdXr15VOqYkpMbP3M+izrNWKLp27Urjxo3p0aMHefPm5caNGzRt2pTx48crN8MiRYowePBgzMzMdDo2qJWJiYlywbW2tsbBwYHY2Fj8/f158OABHTp0oHnz5koZ7OzseP78ueoH54y/2PTq1Yvdu3fTtWtXXF1dddYZO3Ysy5cvx9XVlaZNm5I+fXpev37NpUuXlMbVar5Rfui8mjdvHnPnziVt2rS0b9+ePHny8PLlSzw9PXnz5g1DhgwhZ86cOtuoLQGHuKTm33//JSoqCh8fH+bOnYu1tTUAO3bswMHBAW9vb+zs7IC4dlX29vYGM8fj/fv3iY2NpXLlyhw5coQaNWqg1WqZOXMmJiYm9OvXj7Jly2JjY4OtrS316tXj7t27Bjdfc7FixZgzZw6NGzdW5oitUKECWbNmJSgoSEkW5syZQ5s2bejYsaPyBUqtyUDCGic/Pz92796Nj48Pnp6eaDQaTp06xalTp7CwsCBbtmzMnz8fCwsL5syZo+fIP02j0fD69WtiY2MpU6YMBw4coHbt2gBs3bqVJ0+e0LJlSxo2bIi1tTXJkyenadOmhIaGJnry9DuTNnIqUrp0afbu3au8zpo1K+PHjycwMJBdu3ZRtmxZ5s2bx5YtW8iXLx8HDhzA19cXrVZLkSJFOHbsGLGxsapsyGppaUmZMmXYvHmzsmzChAlkz54dU1NT5syZw7x58zA1NWXMmDHkypULc3Nzjhw5QsmSJbl8+TJNmjTRYwk+7UOPeAMCApTauIkTJ/Ls2TPlvc6dO9OxY0cGDhzIggULfnK0/13t2rU5efIkt27dUpbVr1+fFi1acOfOHcaOHUtISAg2Nja0bt2acePG6S/Yr2RkZETx4sVZsmQJ69evx8fHh9jYWLp27Ur16tWxtbXl1KlTZMyYESsrK0qXLq26z1tCCWcTsbGxAeJqHmvWrImvry/r16/H3t6eJUuWYGlpSfLkyQkLC8PExIQKFSoYxPA37+vbty9VqlRh7dq1LFmyhLCwMJydndmxYwcXLlygf//+XLhwQd9hftanmo6MHj2aMmXKMHnyZFatWsWLFy+oV68e7u7uWFtb4+HhoTPmptpYWFgo84HHD2rfp08f/vrrL3x8fFi9ejUpUqQgKCiITJky4eLiooyPWqlSJaKjo1XXtEZfJJFTiVq1ajFz5kw6d+6s05uqcePGbNu2jcyZMzNr1iyGDx/OwoULmTdvHlWqVGHHjh00bdpUOZnVemI3a9aM0aNHK+ULCgqiaNGiLFiwgEyZMtGqVSvGjBnD8OHDMTIyonTp0lSoUAFjY2MePnyoJAJqLV+8+Mej8b0Whw8fTpUqVZg8eTIrVqzQGWqkfv36rFy5UpUX2U+pWLEiY8eOZe3atQQHB+tMs9W8eXMGDRrE5s2bmTlzJsePH9djpF+mePHiyhyNgwcP5s6dO0yfPp2iRYuyZMkStm3bRrt27dBqtZQqVYoSJUqQJk0a7t69y8iRI1U9lEOlSpVInz49M2bMYPTo0RQuXJhSpUqRLl06fHx88PDwoHPnzqxfvx4rKyv+/PNPMmfOTHh4OOvWrVPtF8MPMTU11Zn4vlevXri6urJq1SoWL17MvXv3cHZ25syZM8ycOdOgBsQtXbo0KVKk4P79+4SEhPD48WMgLpkrXbo0U6ZMYdGiRTg4OJAzZ0527dql6mNXtmxZSpcuzaBBgwgKCqJgwYJUqVJF6dXeoUMH2rVrx+rVq7GxscHJyYk///yTx48fKwOLq7Vs+iDjyKnEunXryJw5M6NHj0aj0SgDi8Yndb6+vmzevFnpZXXp0iVsbW25c+eOzn7UmuSsWrWKFClSMG7cOGUMMW9vb86dOwfEzeM4ZswYIC752b17N7t379bZhxqTuIQx5cmTh4CAAK5cuUJERASHDh2iV69emJiYKLMzJEzmli9fDqizh1xC78e3Y8cOpk2bpjwCmTZtmjIZ95o1a/D29qZgwYIcPnxY9YlcypQplc4NzZs3x9XVVWmvc/jwYRo1asSSJUsIDg7Gx8eHffv2Jepdp+YbSpUqVahSpQrVqlUjZ86cuLu7A3Dr1i0mTpwIwPjx49FqtWzYsIG9e/fqPBUwMjJSbdkSatGiBaampixZsoSXL18CcdcRjUZDq1atgLhraVhYGNmzZ1d6lKtZwjH+GjRowP3790mdOjVbtmxh6dKlHD58GF9fX0aNGkW7du2UHuM7d+4EUHUzjZIlS1KhQgWKFStGpkyZqFGjBlFRUURFRTF69GgAgoOD0Wq1rFmzRhk6JZ6hnJc/iyRyKjJ69GiMjIyUhCbhKPEuLi6Ym5vz7t07NBoNmTNnZs2aNcyfPx9QZ5KTUGRkJKNGjcLY2Jjx48fz6tUrnUQtPmEdNWoUMTExjBw5MtE+1Fi++Jh69uyJo6MjEDf8iJmZGaampuzduxd/f39GjhyJl5cXlpaWzJ49m1evXin7MJQkbtCgQYSGhjJ9+nQmTZoEQJ06dQCYOnUqYWFhODk5sX//frZt22YQY6k9ePCAwMBAgoODKVmyJF27dlUeuWk0GiWZW7x4MePGjaNnz56J2oyp+Ybi5+dH7ty5KVWqFOPHj9eZKP327dtMnDgRrVbL2LFjMTExYe3atTrbq/ncTKh06dLkzZuXyMhI1q1bpyRzw4YNI3v27Hh6emJjY8PkyZOVtrZq/QKVLl06pclChw4dqFevHi1atODYsWP4+fnRpUsX7OzsMDY25sCBA/j5+TFz5kz+/PNPnTH+1Hi9jBc/tV3p0qVZsGCBToXEy5cvlWRu8uTJmJubs3TpUp3t1Xjc9EkSOT17PwELCgpCo9EkSub++ecfmjZtyrp16zA1NSVp0qTKYLig3g9tnTp1yJIlC/b29vTv35/JkycTERFBQEAAhQoVUsZtgv8nc+PHj+f8+fNs3LhRX2F/FS8vL9q2bUvDhg2ZMGECOXLkUNp6xMbGsn//frp3705wcDD58uXTSeLULv6COX/+fDJkyEBwcDB2dnY8e/ZMSeZq1apF7ty52b9/Px4eHhw+fNggkrh4L1++5O7du9y7dw83Nzfu3LnDvn37lOmbDh8+TOPGjVm/fj03btwwiF7hgPJl4vr169y+fRs3NzcePHjAsmXLlFrh27dvM2nSJBwcHGjSpEmiRM5QtGrVivHjx9OpUyeMjIxYu3atknDfvHmTTJkykSxZMp0OU2pMBpo3b07jxo1p3rw50dHR5M6dm+HDh3Ps2DGqV6+Ot7e30svTx8cHrVbLwYMH+euvv1TbE/x9pqammJmZcf78eW7cuEHevHnx8/MjODiYx48fo9FolGTO1tYWT0/PRImc0CVt5PQoYRJXr149TExMWLZsGbGxsfj5+eHv74+vry8LFy7E3t4ed3d3ChQoQGRkJL1791Z12xyAfv36UblyZdavX8/p06eVm7uVlRXt2rWjZ8+eidoEQlyvs0OHDukj5M9q3LhxoninT59OdHQ07du3V5aVLVtWmdB5woQJ7N+/H1BvLcCn9OnTBzc3N6pWrapMbm9vb6/8XLVqVdzd3UmbNi3//vsvPXv21Ge4n/X+l6f416VLl8bb2xtTU1PGjRunHLN4OXLk4NKlS6qugUtYtvcf+Y4aNYqyZcsSHBzM8uXLlWTOxsaG169fExMTo9ovhPESli9p0qQYGRnx/Plz5TM1adIkChUqxJQpU9iyZQsPHjwgODiYhQsXJjqeahPfjrh58+Zs2rQJY2NjChYsyOXLl3FxcWHevHlMnTqV6dOn0759e/z9/Tl16hSDBw9WvhCr9cnMp87Lfv36Ua5cOf755x8lmQNImzYtd+/eVfXnTS2kRk6P4k/sAQMGULt2bSZPnkyqVKkICwtTvvXHt5lbsGABc+bM0elOrua2OV27dsXT05OGDRty5swZneTl1atXTJkyBY1Gw/jx4wF0kqP4JE5tF6X4UdOXLFmi07nkzZs3Sm/A+Jh3797N1KlT6dmzJ8+fPycqKoqjR48SGxurunJ9iqmpKS4uLixZsoTw8HAKFy5M8eLFadOmDTdu3GDy5Mls3ryZLVu2YGlpSWRkJKC+Y5dQfFzu7u7Y2try8uVLVq9ezd69ezE3N6dVq1b4+PhgZGTE3r17WbhwIVu2bFFmdVDz5y6+bK1bt6Zo0aLcvHmTgwcPsmvXLvz8/Bg1ahRt2rTBzMyMrVu3KteXWrVqAeo+bgn/7r6+vpQsWZIcOXKwZMkS9uzZw65du/Dx8WHMmDH89ddftGvXjtevX2NhYaF8yVJr+Tw9PRk5ciTNmjVTevbHxMRw7tw5Xr16RfPmzbl8+bLSlCY6OpozZ85w6dIlTp8+rexHjWUD3bmYS5Ysyf3799m7dy9///03gwcPRqvVUrZsWczMzFi8eDHDhw8HUNrhik+TRE7PGjVqRP369WnatCknTpzQeS8+mQsMDMTCwoLp06frvK/Wm0m6dOmoWbMmAQEBOo9OE3r9+jVTpkwBYNy4cUpD3YTUdlFaunQps2bNQqvVUrRoUQ4fPoxWq+Xo0aOMGTOGMmXKKDNsAERERHD48GEyZcqEu7s7R48eBdRXroTev9G9e/eOmJgYfHx8SJo0KWXLluXGjRsEBgZSt25d2rdvz9atW4mNjVWSOFB3GSGuvV+jRo14/PgxlpaW1K5dm6ZNm7J9+3YgrnZkwoQJPHv2DFtbW1q0aKFsq9bPXTxfX1+8vb3Ztm0bVatWpXjx4qRNm5Z58+bh5+fHsGHDaN68Oa1ateLp06fUqFFD2VaNxy1v3rycOXNG+bv37t2b5s2b07dvX2JjY/Hy8qJgwYJYWVmxYcMGunXrhoeHBy4uLspwRvHjsKmxNrxs2bKMHTuWDh066AzPNHv2bDZs2MDq1auxtLTE2toaFxcXrly5QqlSpVi+fLnyBVitCWrCuLp164a3tzd///03mTNnplSpUjg7OxMcHMyQIUN4+/YtVatWpVatWty7dy/RGJzi4ySR07MCBQqwbds2nSQu4ck/atQokiZNiqura6JETq2cnJxInz59osT0fW/fvmXUqFHY2tqSP3/+nxTdt4tvc1OmTBlGjhzJ2rVrleFgChYsyPz58/H29ub06dO8ePGCKlWqsGLFCoyNjZk4cSLBwcHcvn1bz6X4uIQ3Ojs7O96+fcvr16/p3r070dHRFCxYkPHjx3Pq1Clu3brFixcvaNSoEVZWVgY1aKyDgwNZs2bF1dWVp0+fki9fPsaMGcOqVavw8PBg+/btPHnyhD/++IPUqVMzbtw41U6i/r58+fKRLFkymjZtyqFDh8iaNStt27alWbNmaDQa5s6dS+/evSlWrBimpqbs379f1UM5/P3335w7d46zZ88SGxtLuXLlcHNzo0mTJhw/fpyiRYuSJ08eLly4QIcOHYiKimLbtm2sWrVKZz9qTeIgbiqx+IR6w4YNREZGMnPmTPLmzUv//v0BOH78OLVr12bmzJkkSZKEmJgYZQQDUGcCDv+PK0+ePJiYmNC8eXMOHjxI2rRpadq0KR06dECj0TB16lRlujQrKytVj4mqRpLI6ZmDg4PO2EcQd/KbmppSokQJ9u7dS79+/fQU3bextLT87MwSuXPnxtPTkz59+jBkyBCdeSzV7vz58+zYsUMZCHbkyJF06dKFN2/eEBwcrDSofvfuHWvWrCFfvnxcv35dGZRVreJvdGPGjOHPP//k0aNH7Ny5k6lTp9K5c2edyeSTJUuGn58fe/fuNagkzsvLi3r16nH79m3u3LnDq1ev2LlzJz4+PkyePJmVK1dSt25dTp48ycmTJ5XtDGG4gxo1auDv749Go1E6oly6dIng4GDatm1L06ZNiY2NZf78+TptUNVaNi8vLzJkyICHhwexsbGYmpoSGhrK8uXLOX78OBUrVmTq1Kn4+voSEhLCkiVL6NatG9bW1qxevVpnX2pN4iDuGLm5ubF69WqmT5+OVqslXbp0uLm5KWM0btu2jZiYGDJnzkySJEmYNGmS6ttIxytfvjyTJk3i9evXrFmzBojrZDN37ly0Wi3e3t7ExsYybdo0ZTgqUO95qUbqncfpN3Hjxg3KlClD6tSpdZbb29vTuHFjihUrpqfIvl14eDjW1tYUL178o+sULlyY6OhooqOjVZ3Evd8TzMzMjMePHxMUFMSRI0eoXLkyfn5+QNwQJJ6engwaNIhhw4ZRvHhxoqOjcXd3JyIiQkmC1CZh0j1o0CCKFi3K/PnzefDgAc2aNVOGgnnz5g2pUqWiTZs2rFq1ips3b9K7d299hf3VTExMePPmDQ4ODuTIkUPpPRwTE8O+ffto3749WbJkUcbhSkjtN0uAFy9eEBYWRvr06XUmu798+TLTpk3j1KlT+Pn5UaVKFZ3t1Fo2Gxsbbt26xbt37xg8eDCenp7cuHGDGTNmkCRJEtq2bUtwcDCLFy/m5MmThISEYG9vz59//qnv0L+KRqPh0qVLeHh4kCVLFqpWrUr79u2VJC7+87lz506mTZvG+PHjDSaJg7i5mLdt20bKlCl1js3du3eZO3cuixcvZtCgQbi5uelsZwhlUwvptapnpqambNq0CQsLC7y8vHjy5InSCcDGxoaaNWsa5Ak9depUatasScOGDTlw4IDOeylSpGDWrFls2bJFZ9wjtUn4iLt169bkypWLTJkysXTpUtatW4dGo8Hf359ixYqxY8eORGPfZcmSBR8fH6pXr06tWrVUOSVQwptBzZo1yZMnD5s2beL06dPY2tpSv359vL292b59Oz179sTZ2ZmWLVtibGzMoEGDAMNonxPPxsaGqlWrEhQUxIYNG/Dx8VHeMzIyomLFijRr1kxnthQ1+tjfPG/evHTv3h07OzsmTpzIli1blPeyZ89OxYoVmTx5skFcU7Jmzco///zDxYsXyZs3L6VLl+bixYsA2Nrasn37dqZPn86sWbOwtbVl5MiRbN26lbVr16r62MX7UCKWNWtWVqxYwblz5/Dx8TGIgYsT+th5mSlTJrp160bhwoUZNmyYUjMHcWOklitXjoULFxrEealGksj9YAlP7JQpU35wgm0XFxcmTpxI9uzZiYqK4vHjx8TExFC1alWDnU/uzz//ZPDgweTOnRtfX1/2799PZGQk+fLlY8iQIVy/fp1mzZrpO8wvEhAQQL169Vi6dCkRERH07dtXmeLH3t6eLl26ULhwYY4dO6a0abG0tKRw4cI0b96coKAgVSVxlpaWzJ8/n6ZNmypzHdasWZNRo0YRGxtL1apVlbZ8SZMmpV69enh5ebFt2zb69u2LiYmJMv+mWs/NhHEVLFiQ5MmTc//+fa5du8aLFy9o0KABAQEBbN++nc6dO39wO0MoW926dXF2dsbFxYVp06Zx9epV8uTJg6+vL3Z2dkyZMoWtW7cm2ofaa3Piy7h48WIqVarExo0bad26tfKoLXny5IwfP553795x6NAhypcvj7W1NTVq1ECr1ar22MWL//vnzp2bgQMHUr9+feUzlS1bNlauXMnZs2dp3769MsyP2iX8mzdu3BgXFxcyZMjAzJkzOXv2LClTpqRr164ULVqUwMDAD45ZqPbzUq3k0eoPFn9i9+vXjwEDBmBra5tonTt37uDu7k6nTp0ICAggKCiIypUrEx0djbGxsaovSB9z4sQJAgIC2Lp1K5MnT+aff/7h+PHjDBo0iNOnTytJnNoHsSxatChubm40bdqUIUOG8M8//wAo7afCw8MZO3Ysly5dUoYggbiZLPbt24e3t7eqkjiIq5k5d+6cksQBXLx4kfnz52NlZUXjxo2V5c+fP2fFihVMmzaN5s2b69xwQP2NrPv378/06dPp0aMHU6ZMYdq0aeTPn59Vq1YxYMAAKlSooMzjm3C7939Wk4TDFgUEBJAjRw7SpUvHzp07ad68Of/++y+TJk0iPDycdu3aKUOLJKT2m6VWq1UG8PX396dixYqMHj0aOzs7AB49esSCBQswNTWlcePGxMbG4ubmZlBJXLZs2Vi6dCm3b9/W+UyFhITg4eFBjhw5WLZsmc51Rc3i/+YBAQH06dMHe3t7rK2tmTdvHh07duT27dvMmDGDgwcP4ufnR6NGjRLtQ+3npVpJZ4efoGTJklSqVIlOnTrpTJoeL/7C8/43Z7U39vzcBfPYsWMcO3aMuXPnkjp1amJiYrhy5Qpnzpz5ou3VwMLCgjt37nDq1Cnc3d0ZP3483bt3Z8WKFdjY2JAlSxZOnjxJv379lEb/8eWKiYlR5fE7ceKE0qO4V69eBAcHc+3aNebNm4dGo6F27dq8efNGSXCeP3/O6tWruXr1qs7wKmrXokULGjRoQKtWrThy5Ah9+vTBy8sLOzs7oqOjWb9+PVqtlilTpnDr1i3Gjh2r75C/mKurKx4eHjRo0IALFy5QsGBBNm/ezJMnT4C4z96kSZPo168fxYsXZ926dXqO+PPevx48efKErl27Ehsby82bN1m0aBEajYZBgwbx5MkTNm/ezIEDB9BqtcpnT+29HOOTuOzZs7N27VqWLVtG//79MTIyYvLkyXTq1Il3795x6dIlmjRpQs+ePZXpxgxB5cqVqV27NvXr1+f8+fMULVqU9evXc+XKFQAuXLjAtGnTsLe3p2zZsixZskTPEf8aJJH7werXr0+BAgU4ePAgp0+f/mDV8ceSGbV+O8mRIwc3b97UGTfsUz42orrakziAJEmS4OTkRP369RkxYgQDBgxQBmUuUaIEjRo1onfv3krDZLUnp66urpw9e1aZtsjDw4OqVavi6urK3bt3WbBgAVqtloYNGxIbG8uECROAuJrH+CRO7WWMj69AgQIsXryYI0eOUL16df766y/69+/Prl27sLCwwMTEhL///pvHjx+rPkF9/2/u6OjIgQMHuHDhAh4eHowePZru3buzYcMGbGxssLCw4Pjx4/Tq1UtpV6ZmCcvXokULMmXKRNq0aVm2bBknT55k9+7dNGzYUBmMe9CgQTx9+lTni7GaJ4mHxEnc8uXL6d+/PxqNhi1btmBkZISpqakyisG5c+fw9PQE1PuZez8uBwcHLl68yPnz53XOy3Xr1mFtbY2zszOXL19m0KBBynyy4r+TR6s/mIeHh9JQ3szMTLXJ2Zfq0KEDO3fuZPPmzVSoUIHMmTPrvK/2R6VfonHjxkr7jV27dnH9+nUmT57M5MmTlSTO3NwcT09P3rx5oyRxoO7kNDAwkIkTJyq9Z69fv46Pjw+RkZGsX7+epEmTcvv2bRYuXMi6deto1KgRffr0SbQfNZcR4pJviKtNPXXqFEWLFmXq1KkMGDCAefPmYWxsTL169ShXrhxv375l165dyoCxahX/N7e3twfixmpMmjQpRYsWZfTo0QwcOFA5Nz08POjYsSNmZmZcuHBBedyoZgkfy/Xo0YOXL1/y6tUrBgwYgJ+fH5aWluzbt48GDRpQu3ZtxowZk+iRo5rPS41GoyRxq1evZvny5fTr1w+NRsOOHTsIDw/H3d39o1+O1Vq2+LjSpk0LxCVypqamFCpUiNGjRzNo0CDlvKxevTpNmzbFxsaGmzdvGsR5aSjUe+UyQB86KRs0aMDixYvJlCkTjRo1wtLSUg+RfR/x5Vu2bBmrV6/G29ubCRMm4OfnR5o0aQD1XnC+RkREBCYmJlSrVo03b96wbNkyjh8/TpkyZahUqRINGjRgwYIFpEuXTmfqHzUbMmQItWvXpmbNmty/fx+IO1ZHjhxh0KBBvHnzhr///ltJ5hYtWsTu3bsxMVF/pX2pUqWUn319fWnYsCEAoaGhBAcHs2LFCrp168a8efOAuJ6rtWvXJn369Dr7UeOXrDJlytCmTRsARo4cqYwpuWrVKlxcXFi/fj0BAQHKzTJJkiRUqlQJCwsLnWF9DOFzWaZMGVxdXWnYsCGBgYEsW7aMtGnTcvDgQSIjIzEyMuLAgQO0atUKOzs7g3rkqNVqyZQpExs2bGDVqlU6SdyTJ09o3bq1QZWnQoUK+Pr6AjB8+HBlGKI1a9aQIUMGNm3aRO/evZk9ezYQ98XX3d0dGxsbnXEnDeG8NATSa/U7SVjFnDNnTrRaLUmSJFEaxc+YMYMcOXIwfvx41q9fr9PQ3JAUKlSI+fPn4+rqyuPHjylZsiQ+Pj68efOGq1evMn78eJ48efLFj13VxM7OjmfPnpE0aVImTJiAsbGx8mgjPgmqUKEC58+f5+7du7Rv357o6GjV97QKCAigWbNm1KxZU3nMptFoqFmzJuvXrwfiOnUMGDCAJEmSUKtWLZ4/f46Dg4Pqhz9ImTIlf//9N0+fPuXUqVM0b96cSpUqceHCBWxsbJg0aRJFihShZMmSvH37FisrK8aPH4+dnR3Vq1dX9aM4KysrAgMD+eOPP3j27BmFCxemSpUqXLp0CWtra7y9vXF3d2fHjh1MmTKFjBkz0rlzZ1KlSkWFChVUXbbWrVtz/Phxpb0sxD32b9euHTVq1MDd3Z1x48YpNY2Wlpbkzp2bM2fO6IzHaCiPHCGuzDY2NowbNw6NRsP27dt5+vQprVq1MqgkzsLCAl9fX2rVqsXdu3fJly+fcl6amprSqFEjfHx8OHjwIBMmTCBt2rR4e3vj5OREuXLlVH1eGipJ5L6z3r17U61aNczMzLCwsGDjxo306tULgJkzZ5ItWzbGjx/Pxo0bDSrZSXhhCggIIEWKFPTp04dnz56RP39+tm7dysOHD3n9+jUnTpxgy5YtH+xerlbdunWjQYMGylApzs7O7Nu3j6lTpypz3gI4Ozvz6NEjpR2L2htXd+3ald69e+Pu7q6M52dsbMzevXu5f/8+DRs2VMpSpEgRBgwYQLp06ShYsKBBnJ9GRkYUKFCAlStXYmRkRM2aNfn333+VIVIKFSrEgAEDyJEjBw8ePODly5fExMRQo0YNVSfh8Z+35MmTs3z5cnLlysW4ceMYOnSosk6KFClo2rQp9evXx8nJiWvXrvHw4UOaNGmi6rIVK1aM4OBgdu/eTXBwsPLlolGjRtSrV4+xY8eyYMECBg0apNTouLq6UqxYMcaOHavMnKJWCa+VVapUISwsjLNnz+q8v2vXLh49ekTLli0NKomLL5udnR3Lli2jQIECylBM8RwcHKhWrRqdO3fGwcGBO3fucPfuXVq0aKHq89KQSSL3HXXq1AkfHx+aNGnC+fPn8ff3x8fHh8qVKyuTx8+YMYPSpUvj7e2tDGWhZkWKFOHy5cuEh4crH8CqVavi7+9P5cqVsbe3Z+/evWzZsoVu3brRpEkTqlWrRkREBN7e3voO/4tNmzaNOnXqcPfuXRYvXsy+fftIkSIFHTt2ZNCgQezduxdQbw3Ax1SuXJlFixYxadIkhg8fTlRUFDt37uTBgwe0bduWiIgInTKVKFGCEiVKJBrcWG0Sxpw1a1bmz5+PiYkJoaGh1K1bV2faO41GQ506dTAzM+Pp06ds375d1fM4JrzRlS1blsqVK5M6dWqSJUvG2rVrmTlzprKuiYkJJiYm5MqViwcPHhAaGopWq1Vt2eLVrVsXb29vzp07x4wZMzh37hy2trYcOHCAVKlS4e3tzcqVK4G4x3Jz587l6dOndOjQQc+Rf7n+/ftTvXp15s2bx6JFi4iIiECr1VK/fn1KlixJnz59DGp6O3Nzc2WawZIlS1KoUCFcXFwoXLgwa9asYfTo0TrrGxkZKbXJ8c051H5eGipJ5L4TIyMjpk+fzrZt21i+fDk1atRgwoQJDBo0iHnz5mFpaanUcPTq1YvAwEDVfyspVaoU48aNY8WKFUydOpXnz58r761YsQJTU1P++OMPdu3aRffu3ZUpj6ysrJSfDUXKlCnp2bMnZmZmhIeHkzFjRszMzHj+/DnXr18nMDBQZ6wnQxCf7FStWpUFCxYwa9YsChUqxOPHj2nVqpXOMbK2tiZt2rQ6Y96pNWmNn7bu0KFDjB07ljdv3jB8+HBy5MhBUFAQz58/x93dXed4vX8DUWutgJubG6lTp2bq1KkMGjSIvHnz0qhRI5ImTUqPHj2UwWITJnP29vY6g8aq9bgBOr0yW7ZsSaNGjQgJCWHKlCmEhIRQpUoVxowZw5EjR5g+fToODg60aNGCVKlSGdRjOV9fX9q2bUvjxo05c+ZMovm0DS2hqVWrFrly5WLo0KEMGTKEKlWqUK5cOczNzfHy8sLNzY2VK1fqJHPp06fn5s2byms1n5eGThK578TKyopDhw7h7+/Py5cvWbx4MQEBAcydOxcTExP8/f05dOgQu3fvVrZR680koUGDBlGsWDG2bdvGjBkzePbsGQDlypVj1qxZrF+/Hn9/f1XPl/ox3bp1Iyoqii1btnD16lU6dOhAypQpmT9/Pra2tgQGBpIvXz4griG22gb2/RrVqlVj/vz5PHnyhKpVq+pcYJMmTcqWLVtYvXo1QUFB+gvyC9jY2LBz505u3LjB8+fPqVixIm5ubpw7dw5jY2NKlSrFoEGDePbsGXXq1CE6OpoxY8Zw7Ngxgxizytvbm0GDBrFv3z7+/PNPqlWrppx3adOmpWvXrvzxxx9s2LCB4OBgZQaAAQMG6Dfwr9SlSxdSpUpF9erVSZUqFatWrWLMmDFcuXKF8uXLM3jwYGxsbHj06BG3bt3Cy8tL1Y/lEiYpjo6OzJs3j6lTp7JhwwacnZ3JmDEj9erV4/z588yZMydRYqd2np6ejB07lmPHjpEtWzaqV69OSEgIENeDunnz5ri6urJ+/XqCgoJYunQp169fp0ePHnqO/Pcgidw3+Ng3iwEDBpA1a1ZKlChB7969WbhwIRDXlmXixIls2LCBBQsW/Oxwv0nCb4w9evSgcuXKbN68mRkzZvD8+XNSpkzJ6tWr2b59u8HdROJ17NiRZs2acenSJf7++282bNjAtm3bWLRoEVOnTsXIyIiuXbuSPXt2vLy8VHkD+RrlypVj+fLlTJ8+nfHjx/Pw4UNsbW3ZuHEjjx8/pnbt2voO8YskS5aMvXv3kixZMrp168bixYuV9xImc/b29ty4cYO0adPy559/GkwNyM6dO8mdOzeTJ09m4MCBOu+lTZuWDh06UKlSJbRaLZGRkZQrV86gaos7dOiAn58fLVu25MmTJ5QsWZIWLVpw7Ngxxo0bx9WrVzE2NiZdunQ8e/ZM6XBjCLVYzs7OPH36lI0bN3Ly5ElWrVqFl5cXLi4uPHv2jLJlyzJkyBDGjx+v71C/2sqVKyldujTz58+nR48eOsfCycmJRo0a4eXlxatXr3j16hXly5c3qPPSkEki95USJnFOTk4YGRkp44hVq1aNUaNGcfbsWbp160ZYWBiOjo5MnDgRW1tbXF1dDSoZSNgm4urVqzx9+pQVK1Ywa9Ysnj59Sp06dRg+fDiNGjVSeucamnz58lGjRg1atGjBihUruHXrFp06daJ169YcPnxYZ11DuJF8TnzN3OTJk1mwYAHz5s3j3r171KtXD1D/4w8TExPSp0/PjBkzsLKy4vLly0ydOlXpyAFxNd2ZMmWicePGxMTEMHz4cGJiYlRbmxMv/m8/atQo3r59S5s2bejfvz/BwcHA/2vwkydPToYMGciYMSPLly9XdXu/9xkbG7Nw4UKuXbtG3759leWNGzcmICCAnTt3MmnSpES132o9LytUqECBAgUICgpi+PDhODg44O/vT8OGDWnSpAmZM2dm+vTp7Nq1i7179xIUFIS5uTmdOnXSd+hfLL7j0IABA4iMjMTf358xY8YwZcoUneY2NjY2pE6dmuzZs7Nu3TqDOi8NnfoHiVKZ+ItJnz59qF27NlZWVoSFhTFhwgTWrVunTKK+dOlSnj9/jpmZGSYmJlSpUkUZdFStN5MuXbqg1WoZP348RkZGvH37FjMzM9avX8+JEye4du0aVatWRaPRMH36dPbv349WqyVz5syqTuTKlCmDRqPReawd7/Tp04SEhLBmzRqCg4PJmzcvlpaWytRHCUeO/xUuSJs3b6Zp06bMnz+fDh06sG3bNpo0aQKo92aZMK7o6GiuXr1KuXLlcHZ2Zvny5XTs2BGtVsvBgweBuPHgrly5olObpdbPXaFChbh06RIxMTFKm0U/Pz8gbhy8QYMGodVqmTZtmhK/k5MTR48e5ejRo4D6p/JLKCYmhjdv3ijjacYfl8WLF5MnTx7q1q2LpaUlgwYN4vr168p2ajwvLSwsKFq0KO7u7pQsWZK8efNSpUoVXrx4wcKFC1m9ejV2dnZcvXpV2SZr1qyJviCqUbFixXj06BEPHjxQOmTEP3kJCwtj7NixyvR28dfIrFmzcvz4ceWRqyGdl4ZOErkvlPBm0qBBA5o1a0afPn14+PAhLVq0wN/fHycnJ2XeymzZsuHi4sKVK1dYsWKFQXw7MTY2pmfPnrx584Zp06ah0WjYvHkzT58+pWHDhmi1WgICAqhcuTIxMTGMGTOGtm3bqnZ6I41Gg7W1NZMnT2blypUfTOQA3rx5w4ULF6hSpQotW7bE0dGRdOnSfXBeXDX6WJLyseVbtmxR2rQkHNBYjTfLhHFlyZIFOzs7Lly4QExMDGFhYbRs2ZLZs2fToUMHTE1N2bNnD+vXr2fPnj06w8aoMYkrXbo0q1atYtmyZZiYmDB9+nTOnDmjXCOmTp0KxLVTNTc3Z8OGDQwcOBATExOdCcfVWLZPOXfuHO3bt2fq1KnKHJwAjx494saNGzx48IAbN27oMcIv8/r1ayZMmEDJkiUpXrw4s2bN4tKlSwC8ffuWyMhIHj9+jIWFBTlz5sTf35+kSZMSGBio58g/rWDBgvz9998sW7YMFxcXhgwZwvXr15V5fBcuXIhGo2HMmDGYmpqyceNGunXrRqpUqahYsaKyH0M7Lw2ZPFr9StWrV8fR0RGA+fPnK8vje/J4e3tz/PjxRNuptUYAdG+Wbdu2ZfDgwfTv35/atWvz7NmzRKOOBwQEUL9+fbp168bWrVsT7UNtOnTogI+PD7Vq1eLy5csfXCf++Gg0GlKnTs3du3dVWx6IG8HfxMQk0XFxcHBAq9XSr1+/jw5t8P6xUvOxi9e7d29q1aqFg4MDoaGhLFmyhDVr1vDo0SOyZMlCcHAwxsbGmJubExMTQ7ly5VTfoDx+uqa5c+cSGxvLX3/9xbp16zh//rwyCwWAl5cXQ4cO5cqVK7x7944KFSoYfNuj5cuXkyVLFlq0aMGdO3eIiIhg1qxZbNy4kWXLlgGGcV7a29vj5+dHkiRJKFq0KGvWrFG+QMQ/kqxRowaurq44OjrSsGFDVXfagLjzcuvWrQwcOBArKysaNmxISEgIR44cYdasWcTGxhIbG4unpyf9+/fn8ePHREZGUrVqVYM/Lw2VJHJfIXXq1Bw+fJgkSZIwcuRIgoKCdGrZtm/fzs2bN5UpdQxBv379cHBwoHv37sqNL77n3J07dyhTpoySECQsq7u7u8EM+JsjRw6mTp3KwoULmTFjxhdfRNV8I5k+fTqlSpWicOHCREREMHv2bHLlysXJkyfJmzcvVlZW1KtXT6khMGS+vr60atWKTp06sXPnThYuXEiOHDmU9poPHz4kbdq0lClTBgsLC2bNmkVMTIyqa8Djz61+/frx/PlzJkyYQMWKFUmTJg09evTg9OnT7N27l0WLFvHixQsyZsyIs7MzBw8eNIja/c9JkSIFY8aMoXjx4jx48ACNRoNGo6F48eLExMSo9rP3sbhSpEhB69atqVWrFitWrNAZhqNw4cLExMRw8uRJgxjjD+I+c46OjvTq1YvixYuTLFkyxowZw4ULFzh9+jSjR4/mxYsXODk54eTkxOnTp3+J89JQSSL3FYyNjSlevDiBgYE8ffoUDw8P3r59q3y4hw8fTsqUKWnVqpW+Q/0iWbNmZf/+/UBc7WL37t2VD2GLFi0ICgqiV69eOmNWvf9BVesF930TJ06kcOHCFClSRN+hfBfZs2dnwoQJJEmShIYNG+Ln58fw4cN5+PAhjo6OTJ48mZw5c+Lh4WHQyVzWrFkZM2YMEyZMYOvWrZQtW5a5c+dy4sQJMmXKxJIlS5g9e3ai0f7VXOORUPPmzenSpQuVK1fm0aNHGBsbc+zYMSIjI3n+/DkZMmRg2bJlzJ49mzt37gDqLlvC60G6dOkICwv7ZM2oq6srdnZ2mJubM2fOHNV2SkmaNKlOw/42bdqQOXNmNBoNQUFBPHr0CGdnZ5o1a4arqysbNmxQhuG4fPmyMhepoVwv3dzc8PPzo2HDhoSFhQFw7Ngxnj59ikajIV26dPzzzz/KkDGg7vPyV2ek7wDUKuEk6EZGRkoCs2/fPrp3707mzJmZPXs29vb2mJubY2xszJ9//mlQI3VfunSJJUuWsGHDBtzc3Jg+fTpGRnGnxNy5c+nfvz/Dhg3Dy8tL2eb9b1tquyilS5dO57WpqSkA48aNw9jY2GCS7M+5ePEiHTp0ICYmhh07dpAjRw7lWDx+/Bhvb2/Onz/P8uXLyZo1q56j/Xb37t1j2rRp7Nu3j6JFizJlyhT69++Ph4cHV69epWHDhnTr1o2kSZPqbGcoN5R58+Zx9epVmjZtiomJCTt37uTWrVt4eHjQtGlTVq9eTbp06QgNDVW2UWvZEiYp/v7+DBgwgJIlS+pcSxOuC7B+/XoWLFjAzJkzVZvE9enTh7Nnz5IyZUoA+vbtq7SJLlmyJAcOHCBfvnyEhYUxf/58Vq5cSfPmzTl69CgpUqSgf//+yr7Udr0EPnh8/v77bx4/fkynTp3QaDTs2bOHu3fv4unpSeXKlZk9ezavX7/m2rVryjZqO26/E6mR+4xOnTqRL18+UqdOzYIFCzhy5AhXrlyhZMmSTJ8+nVevXnHz5k3Cw8PJmTMnZcqUMah2At27d6dkyZLKDBQHDx6kbdu2yoeyXbt2DBw4kBEjRjB27Fg9R/tpOXPmZPfu3WzZsoXdu3cza9Ys5T0bGxumT59OdHQ0TZs21WOU/03Cm6WZmRnp0qVj6NChFCpUiFKlShEaGqqsY29vT3BwMOXKlSNv3rzcu3dPz9F/G2tra16+fMm4ceN49+4dPXr0IDY2ljFjxlC0aFH2799P9+7d9R3mJ32oJiZ+loM2bdpQsWJFMmfOTGhoKG3atOHhw4dftA816t+/P02aNKFLly4cPXpUaSQPhllrkzlzZsaOHUuqVKmoXbs2HTt2ZMmSJZw+fZpkyZIxevRoSpQoQYMGDTh58iS2trY4OTmRLVs21q9fbzCPHMuWLcuJEyd4/fo10dHRVKtWjZYtW5IjRw6uX7/OX3/9ZdDn5a9MErn3JDwp/fz8aNeuHQsXLsTZ2Zn8+fNz7tw5Jk2axIkTJyhZsiQjRowgadKkeHh4KA3pDeFDG8/Y2Fhpd3T+/HkWLlzIjh078Pb2Vi64fn5+ZMiQQdXzHLq6uuLk5MStW7do0aIFOXLk4OXLl8yZM4ddu3Zx7do1ChYsyOrVq2nfvj0bNmzQd8hfrV69esTExLB69Wo2btzI/v37GT58OFmzZmXKlCkkSZKEatWq6fS2dXR0pEGDBkyePFmPkX8f8+bNIyIiQpmRY8aMGSxZssQg5iyOlzVrVkxNTTl37pyyLFmyZGzbto3Y2FiKFy+uPIo0xBtk6dKlGT9+PM2bN+fff//F1NSUZMmSkSNHDk6cOMHz588NMplLnz49U6dOVR4Xt2vXThlWxMbGhgkTJijJXPy82vEMobzlypVj2rRp5M6dWxk71NHRkbVr15IkSRIKFiyorGuI5+WvTh6tvif+BHV2dsbJyYlWrVoxYMAAvLy86N+/P9bW1rRp0wZHR0cOHTpEz549MTEx0RncUq1J3IABA5g7dy516tTB3t4eiIt17dq1ZM+enUOHDtGiRQsqVarElClTlMeso0aNUm0Sp9FosLe3Z/jw4dy9e5etW7fi5eVFnTp1OHv2LJ6enmzbtg1fX18cHBxYu3YtpUqVwtjYWN+hf5VkyZLh6elJ06ZN2b59O46OjkyaNAmIe0Tu7e3N27dv2bRpE7a2tkDc3+bx48dKEvehRyiG5MaNG+TJk4fp06ezZcsWpQYW1Fm2oUOH8scffyiv+/fvz5o1a1i+fDl79uwhZ86cGBsb8+TJE8aPH8+9e/dwcXFR1jfEm6VWq+XVq1e8ePGCrFmz0rNnTzZt2sSYMWP4559/cHBwUH1SEy/hOXXz5k3at2/PiRMnyJUrF+bm5so6ERERdOrUib1797Jt2zayZMmisx9DKG9ISAhv374lbdq0aDQajIyMePz4MYGBgURFRZEnTx5lXUM8L391ksh9gKurK2fOnEnUnXrz5s3Mnz+fChUq4OLiQkxMDAcOHKBNmzbkz5+fNWvW6DHqT8uaNSsdOnSgRo0a1KlThx07dtCwYUMyZszI4sWLqVOnDmXLlmXfvn00bdqUChUqsHTpUn2H/VlarZaXL18SGxurDKgaERHBtWvXaNeuHe3atWPcuHHUr1+f3r1706hRIxo3bkyKFCn0HPnnWVpaMnToUOzt7Xny5AleXl5kzpyZHDlyMGnSJJ32mJcvX6Zdu3a8ffuWjRs3Ymdnl+iCq8YL8NckYAMGDGD79u28ePGCkJAQSpUqpQyyrbayWVtbU716dWbNmkX69OmpUKECrq6udOrUCS8vLx4+fMiyZcsoVKgQAGfPniV9+vQ6NR9ql/DYOTs7Y2pqSkREBO/evWPSpEls3LiRZMmSMWrUKKVtatGiRfUV7leLP6cKFy4MxH2RCAgI4NixYyxYsICUKVMq60RERODr68vYsWN12o2pXfwxfPHiBUmSJCFz5sxotVol+bx69SqvX7+mePHi+gxTfIYkch+wdetWFi1aRIoUKciYMaPOe+vXryc8PJzSpUsDcR/2/fv307FjR5ydnXF2dtZHyJ916dIlOnXqRHR0NBcvXmTGjBm4u7szb948mjVrxv79+6lTpw4WFhZKcnr79m19h/1FNBoNMTExREZG6iyDuG+aEydOxNPTk1GjRvHvv/9y/fp1Hjx4oK9wv5ibmxtv3rwhPDwciBs77ujRoxw+fBh3d3c8PDx01r98+TLe3t7Y2dnRsWNHfYT8VYyNjZUb4edqSONrhwcPHkynTp3o0qWLMsSIGms8Xr58SYUKFYiMjGT27NmkTZuWOXPmsGPHDvbv30+9evX4999/mTVrFkWKFOHUqVMcOXKEunXr6jv0L/Khjg158+bl9OnTDB48mHXr1tGhQwf69evH4sWLuX79Oi9evND5jKpVwgQ1e/bsbNy4Uenwdf36dTp27Mj9+/fZtGmT0gFCo9Hw/Plzhg0bprSJU7t27dqxceNG+vbtS5s2bThz5gxp06ZVntZAXKeqkydPUrVqVT1GKj7nt28j97Hn/ebm5kyaNIly5crRqlUr9u3bh1arxc7Ojq1btzJx4kQWLlyos42FhQWvX7/+WaF/k1atWjFixAi6dOnCrl27SJ8+PT169CBXrlycO3eOunXrGkRnjerVq3Pr1i3Onz9PmjRp2L17N+7u7jptj+DDxzd+mSG0XYnn6enJpk2bePr0KWnSpGHUqFEkSZKEBQsWsGrVKiCu84NGoyFp0qQfbJSsJpUqVeL58+ccPXqUYcOG4ejoqNM7+mMMrX2Og4MDS5cuJX/+/MycOZNevXrpvL9o0SLy5cuHt7c3oaGh3Lx502DOSYh7XNyoUSN69OjB4cOHE513pqamJE2alAkTJmBvb0+NGjUMpnwdO3bExMQEf39/AIYNG6Y0Z0ifPj2TJ0/G0dGR2rVrK0N0GJKuXbtiY2ND2rRpyZIlC2nTpsXCwoLz589z7do1Hj9+zI0bN9i3bx+XLl0yqM/d7+a3TuQS3hQKFiyImZkZr1694syZM0BcLcGsWbMoW7YsS5cu5ebNm5QqVYq0adNStmxZ1baF+5w2bdowdOhQBg8ezMSJEzEzMyNbtmzcvn2bZ8+e6Tu8zzI3N2f+/PmULFmS8uXLExoayoULF6hcufIXj5mm9oQgYYeZ4sWLM2HCBI4ePcrQoUO5e/cuGTNmZOjQoZiYmLB27Vo2b97M7t27mTx5MtOmTQPUXcZ//vmH5MmTc/jwYcqVK0fNmjWVORq/RMaMGXnw4IHyOF0tEv7NbW1tefHiBQ4ODsyePRsXFxcaNWqUaHaRbdu2ce/ePZo3b55oH2pWtmxZJkyYQJMmTTh79ixGRkbK9HY3b97k0aNH+Pj4ULp0aezs7KhevbrqZzWI5+/vz19//UWnTp2wsrIid+7cdOjQgaFDhzJ+/Hggbqij5cuXc/78edUPa/Spc8rY2BgTExOGDRtGsWLFGDx4MGXLliVXrlw8efKEFi1aKLPeGMJ5+Tv6rRO5eH369KFevXq8fv2aDBkyMGrUKBYuXMj9+/cxNjZm0qRJ1K1bl1WrVnHs2DHmzp2r+pHjP6d169aMGDGCIUOGKBcmMJybiLOzs3LhadeuHT169GDLli0cP34ca2trpb2ORqMhW7ZsrFu3ziC/NWfMmJHr168ro8aHhobqJHP9+/fnjz/+IGnSpJw5c4bGjRvrO+Qvdv78eRwcHOjWrRtLliz54u3atGlDo0aN8PT0VNUxTfjZ8fLyws7OjtWrV3P16lUcHBxYtmwZFhYWNGvWTGdC+Pe3NRQVKlSgZ8+eNGvWDFtbWzw8PJQa/fDwcOrXr0/evHnJkSMH06dPV+0wHGnTptVpRmJlZcXKlSvZsGGDTm/v+OkLAwICCA4ORqvV4uTkxIMHD1SdmCY8txo1akSWLFmwsrLiwIED/P3338p6VatWpX///h9sD2eI5+fvxETfAehb165dady4Ma1bt+bw4cP069ePHj16YG9vz4QJE3jw4IEyKGKpUqWYPXu2MnCl2i5IX/Nhix9jbejQocTExCiPDAzlwxoWFkbPnj0ZNWoUy5cvB+LmPfzrr78wNTXF2NiY169fo9FoePDggVJLZUg6d+5M1apVqVatGrNmzcLIyAh3d3f69OnD0KFDuX79Oj179iRjxozY2dmxadMmQL0X3fi4NBoN1tbWPHjwgKdPn9K1a1du3rzJ4cOHlffj43+/LM2bN6dnz574+fmpKomD/392AgICaNy4Mb1791bahD19+pT69euzatUqpV1qwonh3y+3IYiOjiZVqlSMGzeO/Pnzs2XLFkaNGsWjR48YNmwYuXLlYu/evezduxdAldfM+fPn8+LFC3x8fJRlZmZmpEmTRic502g0zJo1i1KlSjFw4EBiYmKYPn26MjajmmsZE56XDRo0YOXKlTg6OtKvXz+KFClCnz59AHj+/DkuLi6kS5eOW7dufXAfQp1+uxq596eQGTJkCEuXLmXjxo3UqFGD8ePHs27dOpo2bcqMGTOYPHkyYWFhGBsbM3PmTAoXLoyXlxcHDhzQc0l0mZiYsGzZMkJCQrh16xYzZ85ULiyfusi0atWKwMBAGjVqxI4dO35myF8lY8aMODk5kTx5ch4/fqxMLebo6Ejfvn1p1KgR7u7uHD58GFtbWyXZjm+EDOpNcOK9f5wyZMjA7t27GTt2LOPGjQPgr7/+onbt2ty4cYNhw4YlSmbUWsaEcbm6unLx4kVlHK7NmzeTPHlyOnbsyJEjR5S/QfyAufGaN2/OgAED6Nixo2rHAWzQoAF9+/alYcOGnD9/HohLDFKlSsXt27dJmjQpq1atIk2aNJQvX151yeiHJDx21tbWREVFERUVBUDNmjXJnDkzV69eZf/+/Tx79oykSZOybt06BgwYoAwPo1ZJkyYlMjKSd+/e4eDgwNOnTwEIDAykRIkStGjRQjlPIa6zTe7cuSlRogQtW7ZU7XkIusetXLlyjBo1ijZt2nDy5ElcXV2ZOnUqXbt2ZcWKFUDc5+306dO0adOGgwcP6jN08ZV+u16r8Sd2rly5uHXrFmvXrmXXrl0ULFiQYcOGERgYiK+vL9OmTaN169b07NkTBwcHYmJiaNOmDRcvXmTs2LEkSZJEzyXRFR0dzdy5c7lw4QKdO3dm6dKldOzYETMzM2WIhg+ZPXs2Hh4eqk7iGjZsyIIFCxgzZgyjR49mzZo1rFq1iurVq/P48WOGDBnCjh07lInjnz9/zsuXL4mIiDCYJA7+P95UhgwZsLa2VoY7qFOnDqVKlQJg5syZrFq1ivTp0xMUFJRoaiq1ljFhrUD//v1xd3dXhoCpVq0ajx49Yty4cZQqVQobGxsWLlzIiBEjlO3jk7hOnTqp+uaZOnVqzp8/z/nz58mYMSOtW7dm9+7drFixgh49evD8+XMaNGjAli1buH//vr7D/ayEnxtvb2/mz5/P8uXLlRr8DRs2MGnSJDZs2MDLly9JmjQpwcHBREZGKjVxamVkZMTz58959+4dXl5e/P333+TIkQOANWvW8ODBA/r370/69OmBuLa58Z0c5s2bR5cuXZQxG9XEy8uLNGnSKLW8AE5OTty9e1dJ4iZOnEjfvn1ZsWIFlpaWFClSBFNTUzZv3szhw4f1XALxtX6bGrmEF6RBgwbRrl07MmXKRHR0NK9fvyYgIAAXFxd8fHx48+YN3bt3p2DBglhaWuLq6qozTELKlClV/U3a3t6erl27UrBgQZ49e0br1q15/fr1Z6v/1Zjs1K9fnzFjxuDv78+BAweIiYkhb968jBo1ioiICAYNGsTGjRtJkSIFo0aNonDhwtSrV4+zZ8/qO/RvMmDAAFq1akVwcDArVqwgLCyMadOmcenSJUaPHq08qotP0kePHq3niL+cl5cXfn5+NGjQgHPnzvHu3TudNlPr1q0jY8aMvHr1infv3lGuXDmio6Nxc3NjypQptGvXTrVJXPxnp3379tSvX59z586RO3duLl++zK1bt4iIiKBdu3a4urrq1PCo+ZFcQv369aNhw4ZMmjSJ58+f06dPHy5evEjTpk15/fo1FhYWtG/fnuLFi2Nra0u1atUMpmMDQPLkydmzZw/Xrl2jS5cuXLt2DVdXV1q0aEHevHk5fvw4Li4uxMbGUqpUKbp160bVqlWpXLmyvkPXUa5cOUaMGMGJEycYMmSIcp9q0KAB5cqVY8WKFcyePZuAgADmzp0LxI0AULhwYUaPHq2MTWkox03E+W1q5OITlMyZM2NpaUmtWrWIiIhQ2lFlzpwZIyMjoqOj0Wg05MmTh/Hjx1OzZk2dbzYxMTGqTuKMjIwIDw9n6NChBAcHkzx5clasWEGSJEmUnkcfo7YkLk2aNLRt25ZevXqxZMkSbt++zd27d9m0aRPu7u5YWlrSqVMn7O3tefjwId27d+fy5cs6s2yoXcLjYWpqyuPHj3n58iWpU6dm5cqVFClShF27dtGkSROyZs2qrDtx4kSDSuLMzMwoVKgQwcHBnDp1ShniJuHNolatWgwdOpSxY//H3pnH5ZS+f/zdvqOyJPuabSzDWAfJki0l2kslKYRsFUUoVAhpFEUiO0P27OvYd2PJLrKFKEpafn/0e86UZcZ8Z8Zz4rz/mXGe+3le1+k+59yfc93XMgdjY2NhzOXLl3FwcBCViPvcfbRhwwZ2796Nvr4+S5YsYcaMGQQHB3Pq1Cnu3btHZmZmsfFiXCzLlStX7N/dunXD1NQUZ2dnoqKieP78Odra2jRv3pzNmzcLZZcuXrzIb7/9JhRSF2uNv0/N3bNnz+jYsSM1atTgl19+oWbNmmzZsoUxY8Ywffp07t+/z6ZNmzAxMQEKn00PHjwQ3c7M/v37+eWXX6hSpQoTJ04U6pqeP3+ePn36sHr1avz8/AQRp66ujouLC7q6usUKjItx3iQ+z3fjkQOwsLAgMDCQ169fY21tzdOnTwXx0r9/f6Kiojh8+LCw5dOxY0fRBed+SPv27dHT00NZWZktW7YIsStQKOo6duyIn58fly5dwtfXV/TnU5SmTZuSkJCAvb09Fy9eFI7L3habN2/Ozp078fLyYs2aNUChNzI9PV10ovSvkMXnVKxYkdWrV7Njxw6OHTtGWFgYa9euxdPTkzt37mBlZSVsF4uZD727ysrKJCUl8dtvvzFx4sRiY9XU1Khdu7YQUyZDJgTENpdFz83BwYFGjRqhra3N2rVrOXz4MAoKCqioqAj3ooaGBjExMSgrK2NnZye68ynKnDlzUFRUJDw8XAh479mzJ/Xq1SM8PJwuXbqwYMECQkJCuHz5Mhs2bBBa+xUt9itWj07Ruevduzc1a9bk/fv3nD17lhMnTlCuXDn27t3Lw4cPGTFiBDdu3Cj2/bJlyzJy5Ejs7e3p2bPnF5c7+hq0b9+e5ORknjx5gqurK/369SMlJYXp06eTkpKCubk5kZGRxMbGsnfvXhQUFBg5ciTlypXDxMSkRK0NEsX5bjxyAFlZWdy9e5fq1aujo6NDQUGBUIF7/fr1uLm5cfv2bZKSkgQR97nYMjEQEBDAnDlzGD16NFFRUSxcuBBl5cJEZNmD9PDhw2zYsIG6desK7X/E2JfyUxgYGKCurl7M3Q8IZQzOnDnD2bNnqVWrlvCdly9fFvOglgSGDBnCunXraNGiBY8ePWLMmDFYW1uTlpaGg4MDSkpKPHr0iGbNmgmxcmJHtljKqsSrqqqSkpJCnTp10NXVLTY/VapUYeTIkcX6kkKh91uMokdm06RJk4QM9/z8fH799VdsbGwoKCggJycHLS0tbG1tiY+Pp3Llyjg6Oor+2rx8+bJQBL1GjRoAbN++nTVr1qCpqcmoUaNYtGgRS5Ys4fbt29y9e5dOnToxc+bMYr8jRhEHxWM1g4KCaNOmDU2bNmXr1q306dOHZ8+eYWxsTMWKFQkPDy/WY1RfXx8XFxeaNWuGubm5qEScq6srv/76KxUrVgQgLi6ODRs2UKVKFSZMmIChoSGJiYmMGjVKcFpMnjyZ7OxsOnfuLPq1TuLP+S5mrl+/fpiZmZGUlERkZCTJycksXLiQGjVqFLuAN2/ezNixYwkKChJ1+x8ojJGyt7fH3d2d3r1706pVKzp37oyDgwPwx4M0NzeXhIQElJSUsLOzA8S3hfo5bty4gba2NhYWFgDFtoZlb48KCgqfLGJcUs4RICUlhUuXLrFt2zZ8fHxQUFBg0aJF9O/fn9TUVObPn4+LiwuhoaGi2l78K8zNzTly5Aj16tXj7du3zJ8/n/bt2xMQEIChoSFKSkro6uoydepUdHV1P/J+iBk7OzssLS0ZMGAAnp6ebNq0CYC5c+fi5uYGFL541KxZk1u3btG5c2dhu1HM1+bixYuZPn06lpaWDBw4UGhR+PDhQwwMDKhYsSL79u0DCu+x33//na5du5aIlnAyzMzMsLKyYtCgQdjZ2bFr1y6gsLcxFJaK6dy5Mz/99BMDBgwQvvf8+XMSEhIYMGDARx1k5ImzszPTpk3DxcWF8+fPC8fj4uLYuHEjVatWFbZZ169fj4mJCebm5jg5OeHo6CjqbXCJL+ObryOnrq4uBORu2bKFvXv3oqKigru7OxEREQwfPpy7d+9+slClWF3NRkZGdO3alfHjx3Pu3DmUlJS4c+cOSUlJ1KlTp9hYRUVF3r59y/jx44mMjKRu3bofVZYXKw8fPmTjxo14eHhw9+5dNm7cWGwR1NXVRVVVlVatWqGpqcmePXu4evUq7969k6PVf5+tW7eydetWjh07hpubG02bNkVNTY23b9/SsGFDTp06xe3bt5k1axYgzqSUT/H8+XMuX77MokWL8PDw4MyZMzg4OBAXFyec45s3b1BTU6NLly6iraXm7+/P8+fPiY6OBgoLxurq6jJ79mzOnz9Pt27dWLhwIaNGjaJChQoEBweTnZ3NihUrmDVrlrDFKsY6ajKK/t1Xr16NiooKPj4+QKG4u3v3rlAzbezYsURHR+Pt7Y2ioiIXLlwoUS3vatSowb59+zhz5gy9e/cmPDyc0aNHs3r1anR0dDAwMODGjRvUrVv3o5hGsWUa29nZERYWho2NTbFSL23btuW3335j8eLF5OXlYWVlxcSJE5k2bRoPHjzg2bNnwlhZr2qJkss355Erum2hrKxMdnY23t7etGvXTnhr3LlzJzExMWRnZzNv3jxq165doi7k58+f8/btW27dugX8ITjT0tKEN+ii25Cyz+7fv4+qqqocLP5rPrXdlJ2dzfLly3n48CGTJ08W3o41NDQoX748kZGRlCtXjgoVKqCvr0+5cuVKnIgrypo1axg9ejS//fYblStXpnv37kRHR6OiolJsnNiEDnx6/o4cOcLs2bN58OABixcvpl69ehw4cIAuXboQFxfH5s2bWbZsmai9Vdra2jRr1ozevXvj5OSEgoICb968Yffu3Rw4cIAqVaoQGBjIjBkzSEhI4MCBAygqKjJ37lzMzc2LxayKVeQUFXGtW7cGYPny5cyYMQMLCwvc3NyoWbMmWVlZjBs3jtq1axMaGoqioiL9+/cXBLhYz0+G7JlYtJ7hL7/8QmBgIMuXLwcKewA7ODhQpkwZXr9+/aelm+RNjRo1GDduHGfOnCkm4pYuXYqvry/a2trCv9etW4ehoSEzZ86kbNmyxX5HbPecxN/nm012GDx4MEpKSuzcuZM7d+4wePBgrK2tmTRpklDssFu3bvj5+XHmzBmhMXJJQVtbW3hblL0JT5gwgVq1aglbO5qamlSvXp0rV64Ahb0Rr127Jqq3yokTJ7J+/XquXr36WW+MsbExw4YNw9jYmOTkZJSVlUlLS0NFRUV06f9/xpd6m2QlbhYsWMDDhw8ZNmzYV7Du36Ffv34cO3asWGZ3q1atGDlyJNWqVWPgwIFcv379o7+FmL05enp6hISEUKlSJdauXcuyZcsE29u0acOMGTNwcXHh7t271K9fHwcHB06fPs2WLVtK1AvihAkTsLCwYOHChULnF1mHik2bNrFgwQJSU1NRV1fH0NBQaDMmxrZbH9K/f380NTVZtmwZZmZmTJw4EQMDA4KCgoiJiQEKn6mxsbEkJyczadIkOVv812hra+Pk5ET//v05d+4cY8eOZeHChTRs2BBbW1sePHhQ7D4bOnQoNWrUwMfHRxJv3xjfpJCrUKECe/fuRVNTkzt37hAUFMSDBw+YNGkSly9fJiIiguzsbABatmzJqVOnSvSFLVsEfXx8MDIyws3NjTJlyrBnzx5WrVol2jIVP/zwA+Hh4bx//56RI0dy48aNz4qdihUrYmRkRMeOHcnKyuLatWts3bpVtP0bi9KgQQPu3r1bLKvvSxD7ecXFxXH37l2mTJkCQN26dVm0aBGvX79m8ODBxV4YjI2NmT9/Pk+fPsXLy4urV6/Ky+wvZsCAAeTk5LB69Wp0dXUJCwvD0NCQNWvWsGzZMgBMTExYs2YNTk5O3Lx5kylTpvDu3TuhibrY51DG2LFjcXd3x8nJifv37xebOzs7OyZMmMDGjRtZvnx5sVhGMW6Ff4iSkhLx8fGULl0aMzMzAMLCwnBwcMDX15dz586hqKjIxIkTKVu2LF27di0RcwaFYs7Ozg4HBwfKli3Ly5cv6dOnDy9fvhTGfGqOSsK8SXw54vQZ/0NevXpFTEwMx44dY8uWLSxatAhTU1PevXuHs7OzUKkb4OTJk6LPJPsrZJ4MVVVVVFVVKVWqFNu2beP+/fuiFXEAly5dYvr06WRkZAjxe5+bi0ePHnHgwAGmTJlCWFgYmzdvFrY9xPzQHTZsGHv37mXHjh107tyZ2rVrF/v8z647MZ+XLGt4yJAhjBo1CoDk5GTmzJlDbm4uUVFRQgYdwOHDh7l79y4VK1bE29tbTlZ/OU5OTsyePVso9fLy5Ut8fHx49OgRNjY2DBgwAAUFBfbt20dcXBzLly9n9erVGBoaMnjwYOF3xDyHMvT19enYsSMTJ07k5MmTgoiTZfSvWrWKGTNm4OHhgbGxcbHvilEMFL2nVFVVycvLw8vLCyMjI+Glw8fHh02bNuHu7s6+ffuYOXOm4OEvSRmcmZmZrFq1ihUrVvD69WuuXbsmiLgPt5KLIsZ5k/jf+aY8clZWViQnJ3PhwgUMDAzYtGkTc+bM4cSJE3h6eqKtrY2NjQ2///47ZmZmxQogfguMGjWKTp06Ubp0adLS0ujXrx8gzrcvZWVloeCrLINKXV2d4cOHc+fOHVHa/HdRUFBg6NCh1KlThzt37tC+fXs0NTXZt28fq1ev5sGDB/I28R+hpKTEgAEDmD59OrNmzRJeGszMzBg0aBB5eXkMGjSIFy9eoKOjQ2hoKBs3bmTPnj2inltnZ2fCwsIYOHAg27ZtK/aZvr4+ISEhGBoasnbtWuLj44E/YstOnjxZIrzERalWrRqHDx/G09OT7du3F/tMVuwXwNTUlN27d4t2C/xDhgwZgra2Ntu2bePKlSvY2tri7u5OWFgYSUlJAFSvXh0DAwOePn3KnTt3hJJUJWXuZBT1zJ07d054uRJzyILEv0fJeO34AipXrkzfvn3ZuXMngwcPJjMzE09PT0aNGoW+vj5Tp05l2bJlXLt2jaysrI+ykb4FVFRUaNOmDVevXhW1iAMEETdy5Ej69u1L+fLladWqFZGRkdSpU6fEe0mh8K335MmTmJqasm3bNgYNGsSCBQvo0qULkZGRzJo1iypVqghlD0oKsjf9vLw8Lly4QFxcHH5+fgwZMgSALVu2EBsbi5KSEnv37mXcuHGsXr2aSpUqCSJOrHPbp08fZs2ahY2NTTERN2LECKpXr87z58/x8fEhNTUVa2trIQHi+PHjHD9+vER4iT9E5skxMjJCTU0N+MOrZWxszIQJEwBISkoSdfB/UfT19XF2dsbLy4uFCxfSt29fjh07xr1792jdurWQCHD37l2OHz/O7du3heuyJM2djKKeuaZNmwovVZKI+z74pjxy6urq2NnZ4eXlxZUrVzh8+DBKSkro6+szb948wQMnEzdiFTn/K0ZGRnh5eQnZuWI/v8GDB+Pv74+zszP37t2jU6dO9O3bF2VlZYYPH87NmzdFfw6fo6jdgYGBlC9fHn9/f9LT02nWrBlJSUk8ffqUrKwszpw5w86dO4VaZCWFSZMm0aVLFy5dusRPP/1EjRo1CAkJERaR5s2b4+joSJ06dXjw4AFeXl5CCzwxzqmOjg6//PIL9erVIzAwkB07dgCFGZwVK1bExsaG58+fA4Wlb0JCQmjatCmTJ08WxpZUZs+ejampKWPHjmXPnj3k5uairq5ObGws79+/x9XVVd4m/i2UlZVxdXWlc+fO7Nmzh9GjRxMXF0e1atXo0aMHtra2nDp1SrTXYlGK2qivry9cg59CW1sbW1tbRo0axcKFC4mIiPhaZkrIkW9KyMlo0aIFPXv2pE+fPpQpU4YnT54wfPhwzp49K4wpCTfwP0Hs56esrMyCBQt48eIFfn5+wvGePXvi5+fHq1evhBp/JYlWrVqRnJzMy5cvhW2N7t27M27cOLp164auri6HDh1i586djB49GgcHB3r06EFGRobg0SoJdOvWjZiYGPr378+pU6cwMDAQalWFhIQQHh4ujNXR0RFeosS+bdW4cWOGDh2KoaEhUVFRWFhYUL9+fZycnISWVbJ7S19fn0GDBjFz5swS6/ko+pyIj4+nUaNGXL58madPn9KwYUN0dHTo1KmT4EEXO3Z2dqSmpnLw4EF0dHTYvHkza9euZd26dYwYMQIdHR0cHR1JSUmhW7dupKWlydvkP6Xo/AwbNowaNWqwZMkSoRLBp9DR0cHY2Jht27aV2OtS4u/xTQo5KHwzqVmzJsHBwbRp04YNGzbg6ekpb7MkihARESF4Ooo+cIKCgvD09OT27dtYWVlx//59OVr55bRv3565c+eybt06oqKiivVEXbduHSoqKtStW5f9+/fj4+PDmzdvgMICs7L/Lyk4ODjg4eFBhw4dhGPa2tqMGDGCUaNG4efnJ5SwKGk0atSIESNG0KZNG5SUlGjbti3p6enFFtUPY49KcixSUdsHDx5M/fr1KVeuHDdu3CA4OFjociNmAQ6Fme1Tp07FwsKCsLAw4uLiKFWqFEuXLmXSpEkcPXqUevXqMX36dFRUVOjRo4eoX3aLEhgYiL29vVA37uHDh1/0vZJ8XUp8OSVKyP0vW6LKyspYWVmxdu1a0T+IvlU+N1+urq54eHgwYcIEjhw5IhRPdXBwwMzMjNOnTxMeHl6iHkRTp06lTZs27Nq1i5iYGKF9WKdOnVi8eDFbtmxh3LhxxQrFlkSMjY2FmlwXLlwQjrdu3ZrExEQUFRUZMWIEq1atkqOV/zsNGjRg9OjRVK1alcjISDZv3gyI39P9IY0bN+batWsA5OTkfNb+Dxf8ouNKgoiToaysTK9evZgwYQJ37tzh1KlTZGRkYGhoyLx584SMzpIUXmNmZkZwcDCOjo5cunQJKAwjql69ujC3JeE8JP47xB+1+v9YWFgwZ84catSogbq6+hd9R1FRkdzcXFatWiW8VUp8XYo+YExNTbGzs8PZ2ZnSpUsTFxfH7du3CQ4OpkePHhgYGKCjo0P37t05c+YMs2bNKjHB1bJra9KkSezZs4fu3bszaNAgSpcuDcCVK1d49OgRL1++LFEi7nNJCVeuXOH06dMMGTKEBg0aCMfT0tJYs2YNAwYMYO3atV/LzH+dK1euMHfuXO7evcvgwYOxtLQESlbZBhMTE/bu3cv06dMJCQmhWrVqn7X/w5elouNKioiDwiSqxMREXFxcOHPmDP369SMgIAAzMzOaNGkijBOziKtVq5aQjAGFdVEfP37MpUuXqF27Nl5eXhw8eJDNmzcTFhYGlKzrUuLfp0R45HR0dDhw4ADa2to8fvyYs2fP8ttvv7Fu3TphjORCFjeBgYFYWVlx4cIFjIyMePXqFcHBwezfv5+EhASqVq2KgYEBz549Q0lJiXbt2pWoBQRATU1NaBF28+ZNXrx4wbp161i8eDEvXrzA0tKSGTNmYGdnVyxeU6wUXehsbGyoUqUKenp6bNiwgbNnz9K1a1dGjRrFq1evWL16NQ8fPmTs2LHk5ubi4OAAlCxvzqdo1KgRw4cPx8DAgDVr1rBy5Up5m/TFtG3blpUrVzJv3jzKlSuHubk5a9eu5ezZs2zZskUY960+O9XV1alUqRJTpkzB1NSU7du34+zsLG+z/hQDAwP2799PdHQ0S5YsISMjAzMzM8aPH8+9e/eoWbMmZ8+e5erVqzx8+JDo6Gi6dOlSzCsu8f2hLG8DvoQ3b96wadMm7t69y6VLl2jfvj2hoaGYmJhw9epVIiMjv8kH0beCjY0NVlZW2NnZcenSJaysrFiwYIFQ6sDR0ZEWLVpQp04d8vLy2LBhg1CUU8zz6u3tTUFBAfPmzUNRUZF3796hqqrKli1bOHPmDLdu3aJ79+4oKCiwaNEijhw5QkFBAbVr1y4RQk4m4qZMmYKdnR1Hjx6lYcOGdO7cme3btzN9+nRycnKwsbFh4cKF3Lp1i4yMDHr16iX8hhhF3N/xxFy+fJn58+cTGBhIs2bNSpSQO378OCtXriQjI4M5c+Zw9uxZDAwMiIiIoGfPnvz2228kJCSI+h4rSp8+fTh8+HCxrgV/RnZ2Nrdu3cLR0RFzc/Ni4lWsPH78mHHjxuHv7w/AggULOHDgALq6urRu3Zrw8HCOHDnCw4cPqVevHufOnfvm6qFK/H1KhEcOCrPkFi5cSPfu3bl+/TqampqMHDmS0aNHc+HCBTZu3MjevXuFmAEJ8eDn50f58uUZPXo0ffv2Zfbs2QQFBREXF4e2tjZqamofpdSLXcQBjBkzBj8/PwICAli4cCEKCgrs2bOHFy9eYG1tTUFBAYGBgbRv354dO3YQHh5Ohw4dOHjwoLxN/2JMTEyYO3cujo6OXLx4ESg8786dO7N3716h1EjlypVRUlLi/v37oi6qWlTE/fDDD+jp6XHjxg0yMzN5/fr1Z79Xs2ZNoWCs2Cl6jiNHjsTKygoTExNycnJQVlbmwoULpKenk52djaamJqtWrWLdunU8evRIzpZ/HltbW8aPH8+yZcuIiYn507kqyofPEbFelx/Su3dvwsPDMTc3F9rZyc5FUVERLS0toqOj0dLSom/fviXiupT47xBt8JHMWyOLj9q1axcbNmwQ6hm9ffuW3r17s2PHDo4dO0anTp04fPgwNjY2crNZojiyuatUqRKPHz/mhx9+YO7cuUydOpW4uDgUFBSwtbWlT58+KCsXdw6LWcTJ4sZmz55NQECAkGW7c+dO0tLScHV1LebNOnz4MAMHDqRbt26CiBNrQdwP4xF1dHTIyckhNTVVOBYeHs6JEyewtrYWihk/ePCAe/fuib6oqmxeJk2axPLly1m4cCG7du1izpw5NG7c+LPfK1owVqy0bdsWQBDSAPPmzePt27cMGDAAgL1793L9+nWsrKxwcnLi4sWLNGvWrFhvVTGyevVqNm7cSM+ePfHw8BBiT/8K2XNENm9ivC4/dU1t3bpV2HGSkZ+fj4aGBlZWVsTHx1OxYkX69+8v+utS4r9HlB659u3b4+TkRGBgII8ePRLeRJycnLC2tsbe3p7ExESysrKwsbEhMzMTQ0ND2rRpw6ZNm0R5s34PfG7LqlevXixcuBA1NTU8PDz49ddfAdDU1CQ+Pp7Lly8LPRDFzsSJE9HT08PHx4f3798Dha2Apk6dSkpKCh07dvxkzTQLC4sSVfDX09OTkydPUrNmTfz9/enduzcPHz4UWquVLl2aK1eu4OzszJ49e+Rt7t/C1dUVPz8/3N3duXLlCl26dMHMzAxtbW3Gjx//pzW6xEqZMmWEDgU9e/YE/miDN3LkSJo1a0bDhg159OgRgwYN4unTpx/9hliD/1VVVYUEoeDgYH788Uf27t3LokWLvnhbsXbt2ty8efO/NPMf07ZtW7S0tLh69Sqpqank5+d/NCdaWlo4ODhQtmxZQkNDS0xpGIn/FlF65Bo0aECtWrXw8/PDwMBAeKtavnw5mpqa3L59m4yMDBwcHIRWW6mpqUJslZSdKh9kD5zOnTtja2tLvXr10NTUZOfOnSxfvpynT5/y/v17tLS0qFu3LnFxcejr6xMcHCxny78MIyMjRowYgaOjIyEhIcJ1FhUVxbhx46hSpUoxj3DRa1Em4sT65lzULkdHR6ZOncrr16+FNlWhoaEoKCgIhWH19fW5e/fuF8criQUFBQVatmzJxo0bOXToEGlpaaxevZrY2FgUFRXp27evvE38n0hPT2fAgAFUqFCBjRs3An+0wdu8eTNt27YlJyeHvn37CiLuQ++rGEUcIIg4Ozs7cnNzqV27NkOGDMHd3Z1SpUr95ffd3Nw4duwYlStX/q9N/WL8/f3x8PAQ/h0UFMSiRYuIjY0lLi4Od3d3VFVVP/K2vXnzhiVLljB9+nQhjlgScRKiTHZYuHAheXl5mJubM3HiRKZMmSI8fGJiYhg2bBgTJ04UanR9iHRhy48pU6YI8WGZmZls3LiRyMhIFixYgIqKCosWLSItLY0XL16Qnp5Ot27dSkRiA8D169dZtWoVOjo6QtcQd3d38vPzWbp0KRoaGkyfPh1FRUUWLVoEfHwtinWxlNllbGxMQUEBw4YNEzwYAwcOJCEhgV9//ZUlS5bw+vVrPD09efPmDefOnZOn2X+bgoIC8vPzMTAwKObt2L9/Px07dsTc3JywsDDB21qSOHPmDAMGDGDZsmUsW7YMFxcX8vPzuXPnDvPmzcPExIQKFSoI2+Riv9+KMm7cODw9PfHx8cHb21tIoJIlEn3OM+fs7Iyvry+DBg3iwYMHX9nqT6Ojo0Pz5s1RUVEhMzOTO3fu0Lp1a1xcXHjx4gVeXl707dsXbW1t5s+f/1H9v6JdNkrSHEr8d4jOIyd7S4yNjWX16tW0a9eOgIAADAwMADh69Cj6+vq0b99enmZK/D9F3xZbtGhBkyZNcHR0pFWrVvz666+YmJjg6+vLq1evGDt2LF27dmXs2LGMGjUKCwsLcnNzUVJSKjEPpAcPHqCvr4+dnR2tW7dm4cKFwjUbFRXFpEmTCAoKYtSoUXK29O9Tu3Zt1q1bx9y5c4t5Os6dO0efPn3Q0NBg0qRJhIaGoqKiQs+ePUVd5+9z3s/bt2/TvHnzYnXFAC5evEhaWtoX16mUN0VrjSkrK5OXl8fvv/9OSkoKPXr0YN26dcLf4OrVq9SuXZv69evLy9z/GV1dXXr06MG0adPYsGGDUEbk0KFDuLi4MGjQIHR0dIDiXkZnZ2cmT57MmDFjSExMlJf5H5GRkcGgQYN4/Pgx5ubmmJubc/ToUU6fPs3t27cJCAjgzJkzdOvWjeHDhwueOQmJzyGKJ3DDhg3R19cHinssOnfujJqaGvXq1WPixIkYGhqSkpJCZGQkI0eOpG7duvIy+bunUaNGwB/zZWFhgZubG7du3eLMmTNkZGQQEhLC9u3badWqFT4+PlSoUIHLly+TlJTE2bNnRR8Y/ylmz55NqVKlaNq0KYMGDcLExISoqChhAYmOjmbmzJnUrl1bzpb+fe7du4ezszOPHz/m559/Fo4rKipy69Ytevbsibm5OVZWVlhZWYlahBf1YHTu3JkuXboI5zR79mzu3btHTEwM7du3p2LFiujo6ODk5ERaWlqJKOfQrl07Fi1ahJGREfCHl2bJkiXo6uri4uJCjRo1hG3Wffv28eDBA5ycnORm8//K27dvycvLE4SrLFzB19eXhw8f4ujoyNixY9HR0RGuRRcXFyZOnMiIESNEV3ZEQUGBFy9eMH78eDIzM7GxsSlWVPvt27cEBwdz6tQpOnfuzPjx4z9KBpOQKIpchZyCggKGhoYcOHCAcePGUb58eeHhu3TpUmrVqkXnzp1ZuXIl1atXZ8KECZQrV47ffvuNffv2cePGDXma/90ydepUXFxcgD+8HqampnTv3p3GjRsXi1GcM2cO27dvp3nz5kycOPGjmBYxv2lOnjyZpUuXYmlpia6uLlC4Vbpp0ybq16/PsWPHcHFxoWvXrixYsEAQc7NmzWLYsGHyNP0v+ZS36v3792zfvp0JEybQuXNnobRIfn6+INhSU1NJSUkRvQgvmjUcHR3NrFmziIqKIiAgACgs75CSksL8+fPZs2cPiYmJ6OrqMnDgQHma/cVUq1YNfX19fH19qVKlClD4zKxTpw52dnZs27aNwYMHU7VqVSE+08vLS/Tn96nrMicnh6dPn2Jqaip4HmX3WnJyMrm5uairqwsCvGPHjsycOZNRo0aJSsTJzq2goABDQ0PS0tIYPXo0O3bsoFq1ari6ugpjsrKymDZtGrdu3aJ06dLFtlMlJD5EFFmr/fr1E+KoQkNDiY6Opk6dOjg5OXH37l0ABg0ahLm5OS9evMDd3V0IgC0JsVXfGj/99BPnzp0jNzeXKlWqkJKSgoKCApMmTcLMzIxVq1Z9FLcSEBCAnp4eY8aMEbV4k2FkZMSRI0cASEpKon79+sycOZOTJ0+SmZnJiRMncHV15cCBA7Rr146lS5dy7tw5rK2t5Wz532PIkCE0bNiQ8uXLs3z5cs6cOUNqaipmZmYsWLCANWvWMHbsWHmb+T9RqVIlli1bxogRIygoKKB169ZMmzaNmJgYJk2aBEDXrl3R1dUlNzeXTZs2CaJVrAK1fPnyQrywlZUVDg4OPHv2DH19fcqUKYOLiwv3798Xxjdv3pwtW7awePFiJk6cCIj3mVnUi9qsWTMUFBRQUlLi1KlTGBoasmvXLk6fPs3w4cPJzs7m/fv3xMTEsHHjRnbs2CG8XMhE7pkzZ+R8Rn9Q9NzGjBlDu3btCAoK4ty5c+jp6REWFiZ0D1m+fLnwPTU1NXJyckrEM1NCfshNyP3444+8fv2aW7duUVBQgIWFBTExMTx69Ij09HRsbW1JTU0t9lAdMWIE1apVY+zYsdKFLQL69u3LkCFDmDZtGgcPHkRBQYGQkBB+/PFHtm3bRmxsrJBVXBSxljn4EDs7O8LDw4mMjOT58+cYGxtTqVIlEhMTadKkCS9fvsTX15esrCyMjY3p3bu36EVP0b+9r68vHh4erF+/npo1a1KtWjVOnTrF3LlzSU5OxszMjIiICPbs2YO7u7ucLf97DB06lB9//JGXL1/i4+NDQUEBGhoa9OvXj5kzZxIbGysIm6KIVeRAYfiCl5cXc+fOZevWrUBh1xQXFxfq1asnvFh8eH8ZGRlx48YN0Z7Xh/j7+9OnTx9ycnKoWLEimzdvZubMmVSuXJmlS5eSnp7Os2fP0NHRQVtbmzZt2gixmmI/x4CAAOzt7fH39+fkyZM8fPgQKMwCDwsLo0KFCqxatYoVK1YU+15JeWZKyAe5bLybmZmxZMkStmzZQlBQEHfu3GHTpk28e/eOZcuWsW/fPsGbUzSjMSIiQvgN6cKWP1lZWbx69YohQ4ZQUFDAoUOH8PPzIzQ0lF69epGfn09cXNxHMUclZd5WrVqFhoYGISEheHt7M2rUKKpXr46vry+NGjXi8uXLQnbjgQMHOHDggHwN/gJkf/sKFSpQvXp1HBwcOHbsGFBYPd/W1hYPDw8mT57M9u3bUVNTw97evkTdbxoaGujq6mJiYsL58+cFu7OystiwYQMFBQWEhISgqanJmDFjin1XrEKgbNmy+Pj4UKlSJfr374+ioiKbN29mzZo15ObmMmDAAAYMGMCjR4+4fv16se/K/l0ShM6QIUMYMGAA9vb2nDlzhrFjx+Lr68uyZcs4deoUrVq1YsiQIWhpaZGXl8f06dNLjIhr2LAhZmZmDB8+nL179wrHlZSUeP78OePGjSMkJIThw4eTlpZGUlKSMKak3HsS8kEuMXIqKipAYaHYGTNmUK1aNQB27NiBm5sbDg4OjBs3TkiAkBVGLIp0YX9dPhW7snPnTqKjo4FCb2mHDh0oKCjA19eXM2fO4OrqSo8ePb62qf8qS5Yswd/fn7lz59K/f3+OHTuGtbU1lpaWuLi4lMjYFRsbG86fP0/z5s15+/atcFxWPb9Hjx6ULVtW6HtraWlZoqrHZ2VlERsbS0REBD///DNDhw4t9tmGDRsICgqiTp06crTy75GWlsbRo0eF8ik2Njb07t0bgA0bNrBy5Ur09PTw8/P7bBKY2IUOFLZNmzlzJmfOnMHMzIwhQ4bg4+PD+fPn0dDQIDMzk5kzZzJ58mSCgoKEWo1iPLcP7xdtbW20tbWFVncy8vLyUFVV5cWLF/j7+7Np0yZ27979NU2VKOHIRcj99ttvrFy5kkmTJlG7dm3mz59P1apVgcLilYMGDWLIkCF4eXlRtmxZQBJu8kb29zc1NcXc3FwonLp3716io6PJy8tj+PDhtG/fnoKCAsaPH09MTAzr16+Xp9n/CjExMYwfP55JkyYxcuRIcnJyuHjxIunp6SVG3BRlx44d7N27lxo1agj3new84uPjKSgowMTEBCh+35Wke/DJkycsX76c0NBQfHx8GDJkiPBZdnY2S5cupU+fPnK08MuRZSzOnTuXgwcPcu3aNZSUlHB1daVXr14ArFmzhlWrVlG6dGnCwsKEBIiShLq6Oi1atODJkyf89NNPREZGCj2ZlZWV8fX1/WTZKbHGM8rul+HDh2NhYUFmZibKysr88MMPwhhZ0oapqSnt2rXj2bNnhISEiLqsj4T4kMvW6uPHj8nPz6d9+/b06NGDnTt3EhERwYgRI7h//z6JiYkUFBSwePFiHj58SGxsrDzM/O6ZMWMGeXl5Qqbf9OnTsba2Jj09HU1NTby9vRk6dKgQlzN48GC8vLxQU1Njz549LFiwABDvls7f2S5cvHgxANOmTSMvL4/IyEigZIkbGa9fv2bIkCHEx8cTFBTE/fv3uXDhAlC4hff27VtevHghZyv/Oc+fPyc+Ph4oLCibn5/PwoULgT+6BYgZfX19nj9/Lnh937x5Q35+Pq9evWLcuHHMmjVL6D29bds21qxZg4aGBvXq1RNN8dvP8al7Lzs7m/Xr1zN8+HAaNmzIuHHjWLlyJVDozfrhhx94/Pgxhw8flofJX0zRc7Ozs8PDwwNHR0fS09O5ffs21tbWpKWlcfHiRUGwubq6cvXqVY4ePSr8jhifmRLi5KskOzRv3pyMjAwePnzImzdvgMLq1omJiUydOpUbN26QlJREcnIy3t7eQtZV+/bt+e2330T7xvUtU6pUKcaOHUvnzp3ZuHEja9euJTY2ltGjR/Ps2TOUlZWJjY2lXLlyWFhY8ODBA7p06YKPjw8nT54UxJ9YUVZWZs2aNVy7do179+4RGxsrPDj/THgOHDiQ0NBQ7OzsSlyP0Q/R0dEhISGB2rVrs2LFCu7fv0+PHj2oWrUqxsbG38x9V7ZsWZycnJgwYQLu7u4louethYUFo0aNYt++fURFRfH27VsyMzMxNjZm0aJF9OjRA3V1dSZOnIiioiJLly5l+/btxX5DrHGNRe0yMjJCX1+fBw8e8PjxYxo1akR4eDivX79mxIgR3L17l3LlyhEREUHp0qXp3bt3iRE4LVq0wMLCguvXrwuZqN26dWPy5Mncu3eP48eP8+TJE2xtbdHT06NTp07fzD0n8XX5z4Wcubk5sbGxXLhwgZcvXzJ9+nRSUlJIS0tj9uzZvHv3jgkTJlCtWjW2bNlCcnIyPj4+3L59W/gNMZcD+JapUKECTk5O9OnTh/v375Ofn4+bm1ux9kUHDhwgLS2N/v37A4WiXVbsV+yYmZlRqlQpJkyYwO+//87hw4dZuHAhOTk5fyrmOnTowKFDh76ytf8NOjo6xMTE0LlzZ1atWsWtW7eIjIz85ppxV6hQARMTE9auXSv6czIwMGDt2rXUqFGDgoIC9u7dS05ODgsXLuTKlStMmTKF69evs2TJElq1asWIESMwMDAgICBASFwpCUycOBFTU1P09PS4efMmz549w8vLCzMzM1xdXalcuTJPnjwRhF/37t3Jzc0VrYe/KA0bNmTXrl0oKioSHBzML7/8Inz2888/Y2lpiampKXfv3uXJkycMHjy4xJybhPj4z4WcsbEx69at4/z589y5c4cffviBS5cusXv3bu7evcuaNWvo378/Z8+epUqVKpw6dYolS5YwYcKE/9IsiS/EwMAAJycnrK2tefv2LR07dgQK6xu9e/eOXr16MXXqVPr16yfU/APxegM+ha6uLqNGjaJFixakp6fj5uZGVlbWXz5UxXqOf3cxKFWqFDExMVSrVg1nZ2euX7/+TS8oJUGgWlpaCi3srly5goKCAoMGDWLt2rV06dKF7OxsTE1NycnJoXXr1vTo0YPJkyeL8nr8FJ6ennh7e+Pq6sqxY8eYOXMm9vb2WFpacuLECRo1akTDhg2pWLEid+/eZfPmzaKv8fchlpaWzJgxg7NnzxIYGEhycnKxz7W0tACEXaqSdG4S4uI/FXKyha5Tp06sXbuWkJAQrl69SpkyZZg4cSInTpygV69eTJ8+nfnz55Obm0v58uVJS0v7ZhcRsfMpcWJoaIiDgwPDhw9n8eLFTJkyRfisc+fOhIWFYWFhQUpKytc2939CFnsEhVusubm5qKmpYWpqyvDhw3n37h39+/cnOztbtGLtcxS1t0KFCjx58uSLvqejo8OKFSsoX748bm5u/P777/+lmRKfoej8WVlZ0a9fP96/f8/o0aOpWLEiP//8My4uLlSoUIF27dp9FAtXEq5XNTU1Fi5cyKFDh1iyZAldunRh8eLFBAQEsHz5clRUVFBSUiI7O7vY98T6clFUgH1oo52dHQEBAWzcuJHY2FjhZVes5yJRMvlqBYF79uxJfHw80dHRTJ06FS0tLXr27Ennzp0JDw/n999/L/YQki70r0/Rv3/9+vV59+4dz549IyMjg4oVK+Lo6IitrS1JSUnMnz+fUqVKERQUhIaGBn369BH9AgIwduxYmjZtyuzZszl37hzwx7WmqKhIx44d8fPz49KlS/j6+paoN+SOHTvSpk0bQkJCCAsLo3z58gwePPgvA/tl866lpUViYiKqqqp07ty52Ba6vOnYsSOvXr3i/PnzwrGSIFr+KZaWljg7O/P69WsCAwO5ffs2pUqVokyZMty/f7/E/g1Wr15NVFQUKioqLF68mMDAQJYuXYqysjK2trY8ffqUXbt2ydvMv8XAgQNp0aIFioqKJCcnEx4eDoCjoyO+vr5s2rSJxYsXF9u5kJD4N/iqnR26d+/O8uXLWbp0KVOmTPlk1X8J+TNx4kQcHR15/fo1GRkZODk58fDhQ0HMjRw5kuzsbHbs2IGmpiYeHh7k5uaKflEpX748u3fvJj09nXPnzhEXFydka8reqpWVlRk4cCC9e/dm2rRpnDhxQvTnBaCqqsrkyZNp2bIlb9++pWHDhnTv3v1v9SNu0aKF4OF5/Pjxf2Xq36ZFixbs2LGDV69esWzZMlJTU4tlssvmp+g86ejofFSIuqTSt29fnJ2dycjIICwsjEuXLgElQ8h+ykZFRUXi4+OpVq0ahoaGBAUFCdnFFStWJDIykk2bNhVrVSVGbG1tMTAwYO7cuQQGBmJvby/ENtauXZvMzEy6du1KQUGBUBv14MGDhISE8OjRI3mbL/EN8VUL1ezcuRMnJydcXFwICAgQasRJiIe2bdvSu3dv3N3dCQ4OJi0tjX379mFkZMSjR49YtmwZc+bM4f3791y5cgU3Nzdyc3NRUlIS/aKSlpbG9evXOX/+PI0aNcLT05PmzZsDf9Siys3NJSEhASUlJezs7ICSUWIkJyeHSZMmkZOTQ5s2bdiwYYMg4r6k1p2rqyvx8fGUK1dOVCIOCjsTrFq1iqioKNLS0nB3dycxMRF3d3cqVqwozI/svyNGjCAwMBB1dXV5mv2vsXHjRuLj49HS0mLMmDFCHTKxX5dFRVzjxo2pUaMGhoaG5Ofn4+fnh5qaGikpKUIHFV1dXebMmYO6uvpHLarEhrOzMxEREVy6dIm6detibm7OoEGDhJdgWRmmxMREAFasWEFERAR6enqiu78kSj7/ipBr3749TZs2LXbsc4vHzp07cXR0xNnZmalTp1K6dOl/wwSJ/5EP5ykvL49Vq1Zx6NAhEhMT8fb25syZM2zevBkjIyOePHnC2rVrCQoKEmpyyb4nZhQUFMjPzyc9PZ01a9Ywffp06tati729PT179hTe/hUVFXn79i3jx4/nxx9//GyVfLGhpKRE6dKluXjxImvXrqVRo0b4+PgAhQu+kpJSsfFF593Z2ZlJkyYJW8piQ1b5XltbmwULFtClSxd2795Nx44dSUpKwtnZmZYtWwrjDQwMaN26teiLNf8d+zZu3MiyZcuoUaMGFhYW/51R/yIyERcYGMiKFSvYsmULkZGRdO3alYcPH+Ln50fVqlXZt28fO3fuJCEhgfLly2Nubi7qgrh2dnaEhobi4uLC3r17MTQ0pFSpUty8eVMYc/bsWSZOnEi5cuUwNjYGCrvEODk5laguKRIlg398p7Rr146xY8cSExNDbGwsZmZmqKiofHLxkJGUlISnpyfVqlXj9evX/9QEiX+A7GHr5eXFvHnzCAkJoVatWsLcpaamMnbsWE6fPs3GjRtp2LAhKSkprFy5UtQP2w+RnefVq1cxNjZm3759TJ8+nZ9++omoqCj09PSAP9rBPXv2jPv376OqqipPs/+UootBXl4ez58/x8/PDz8/P86cOUPXrl0FMScT2lWqVEFRUVH4ezg7OzN58mSGDx/Oli1bvv5JfAFv375l/vz52NnZ0atXLzIyMliwYAH16tUjKyuLvn37Eh0dzapVqyhXrhwTJkzg1atXQtcDsSKbg0aNGtGiRQuhg8Pn2LRpExMnTmTatGlfw7x/hZYtW2Jubo67uztBQUE8fPiQmTNn0rVrV/bv30/Lli1ZtWoV69evJy4uji5duggefjHGSFtbWxMREVGsbt+NGzd49eqVINig8Dny+++/U6ZMGQwNDT/6HbF7UyVKFv9KjJyqqirly5cnKCgIPT09srOzcXV15e3bt59MWvgwbqIkxHp8axT9mw8fPhxvb292795N1apVqV+/Pk5OThw5ckQYX7FiReLi4nj58qWw5VgScXFxoW/fvpibm1OqVCkuXLhATk6OUHi1aB9EY2Njrl27JsqtkA+zG+vWrYuioiJ79uzh2LFjlC5dmtGjR9OyZUuOHj3KvHnziI+PJyUlhZEjRwLg5ubGhAkT8Pb2FpWI69ixIy1atKBixYpC0eaMjAxmzpzJjRs3WLx4Mfv27ePVq1dYWlpiaGhIkyZNsLW1xdXVlZycHAwMDEQ5b35+fpw7d05oiD5lyhQsLCzQ19fn7NmzREdHk5SU9JGH+8NnZElIBrO1taVhw4a8fPlSCPyvV68eHh4emJiYMGHCBLZt2/bR98R6bs7OzoSGhrJ3717at2/P2LFjWbt2LTo6OixYsAAVFRWioqI4ePAgUBinuWnTJubPn18iilBLlFz+FSEne8hoaGjQsWNHRo8eja6uLt27d+f58+eivTEloHr16gwbNowNGzZw/PhxNDU1mT9/Pj///DPOzs4cP35cGKuvr8+LFy9KtOiuXbs2I0eOFB7IW7du5dixY3h4ePD06VP8/PxKTBkVKBQCVlZWXL16FXV1dVq2bMn06dOZM2cOZcqUwcvLi969e6OpqcmzZ8/o3r0779+/p1WrVixevBh/f38hjkcMODk5MWnSJK5fv46RkRGKiopMnjyZ5cuXY29vT1BQEJmZmdy6dQtPT0+ePn0qb5O/mNKlS3PgwAHu3btHeHg46urqTJo0iYCAANLT05k0aRIaGhrExcWxYcMG0Ycr/BmVKlUiPDycVq1aERcXV6xkkZGRER4eHhgbGzN16tQSIXIcHByYO3cuzs7ObN++nYkTJzJ06FC8vb1Zs2YNtWvXJjIykpycHC5cuMD58+dxdHQUOjZI65/Ef8l/krVqZGQkLCQmJiYf1QOSEAeykjCpqal4enoKVeGVlZVZuHAh7dq1w9nZmRMnThT7Xkn2oFauXJmjR4+iqanJ2rVr8fb25v3799ja2lKtWjVCQ0PlbeIX06lTJxYsWICtra2Qfevi4kJoaCj+/v7Exsaio6ND1apVqVq1KklJScKCUqNGDTQ1NUVVL87e3p7w8HAcHR05evQoWVlZrF69mgYNGvDzzz/z+vVrli1bRs2aNbGysiqRmX8GBgbEx8fz7Nkzrly5wps3b5g3bx6A4NkpV64cixcv5tdffy3RYq5t27YMHTqUn376CScnJ06ePCl8ZmRkhK+vL0pKSjg7O8vRyr9GXV2duXPnkpiYyI4dO4TjAQEBeHl54e3tzerVq6lRowbOzs506dKFzMxMnjx5IiSDSc4Mif+S/0nItW7dmtzcXM6cOfPZBb1Ro0bMnj27RNbj+p6YNWsWzs7OjB8/nuXLl/Pu3TugUMxFRUVhYWFBx44duXLlipwt/fcYOXIk2trahIeHk5WVJW9zvogxY8YILexkWFpaMmLECLp37867d++KxTuOHTsWExOTYq3uQLzV41u1asXWrVuZMWOGsA0HhQWnFyxYQP/+/bl06RKenp7069cPe3t7nj17VqJeKmS2Ghoasnz5cho3bsyaNWvw8vISxsjEnJ6eHmvWrCEhIaFEC4CffvoJLy8vqlSpgq+vL6dOnRI+q1q1KikpKaKev7+6vj4Uc1B4j2lpaQnx32K95yS+Hf52pHrfvn3ZsmULM2fOpHHjxp8dd/XqVdavX0/NmjWpVKnSPzJS4p/zuSypsWPHsmHDBgICAujSpYsQ3J+bm8uQIUMIDw/n2rVrX9PU/5yoqChmzJhRYkRcuXLl8PPzY+rUqdSoUUM4npeXh5GREXp6ehQUFAjB8rt27SIjI4Py5ct/9FtiXVBOnDjBhQsXsLS0pG3btsK51K1bl4KCAqETx9KlS4W/B5SMoHHZvVdQUIC+vj6pqanY29tz8uRJmjRpQufOnYWxGRkZDB06lIKCApo0aVKiRRzAqVOniI6O5v79+4SGhtKiRQvhs/v374s+g1N2fdnb2xMYGAgUf5YGBwcTGRlJeHi40G86Ly+vWBKfWO85iW+HvyXk6tWrh5eXF7NmzUJZWZn58+d/VHZEhqyMRYUKFXB1df03bJX4Hyn6VmlmZsaoUaMYOHCg0DfV09OT3bt3C6UBioq5GTNmCD0OvxVycnJKzAIpy6Bt3rw5TZs2JTQ0lDp16gBw8OBBTpw4QWhoKJUrVyY3NxcozPKUJRqJGdmCKBNtXbp04c2bN0RERFCtWjXMzMzw9/fHz8+P1NRUlJWVyc7OZt26dejq6srT9C+m6L3n7e1NZGQktWvX5smTJwwcOJDs7GyGDx9eLOMxIyMDKysrxo4dKyer/12OHTvGwoULuXPnDnFxcdSrV6/Y5yVBjLds2ZIOHToAH9srE3NRUVHF5lFC4mvxt7ZWW7RoQd++fVmwYAGpqakcOXKE3NxcRo4cWax1TlG6deuGra0tI0eO/GYqrZdUJk+ejJ2dHZcuXaJatWrk5eWxY8cOIRB54cKFmJiY4OfnR2JioiAMJORH0dgaIyMjdu3axY4dO5g1axY3b94Uqv4rKSkxe/ZsADw8PNDX16d79+4lQrB+GD+0Z88eatasKSQ6LF26tJggKglbch8yadIkbGxsmDZtGsePHxe2vA0MDEhISCAzM5M5c+YIGY8yxLp1rKKiIrRwK1OmDOnp6cJnn7PZ2NiYdu3aCS+HJQHZuejr63Pw4EHmzZtHTEzMJ8c6OzuTkJAgeeAkvjp/S8ipq6tTvnx57t+/DxQ2P963b99HYk5DQ0PYtmrQoAG2trbMnDlTEnJypGvXrsydOxdXV1dOnjyJgYEBlpaWuLu7s2rVKsLCwgBYtWoVysrKWFlZydliiaJMmjQJZWVlevbsSbVq1di3bx+jR4/m4cOHmJqaYm9vT7du3UhOTub58+dYW1uLOsi6ZcuWtGnThu7du5Obm8u2bds4duyYkLSxbt06WrZsiaWlJWfPnv2oBReIV+R8yE8//UR0dDTe3t4cPnxYOC6LnZIlQGhqajJixAihB7AYsbS0ZNOmTcI1NWrUKLp3705mZiZJSUnEx8fz7t27v7zuxHpdfg51dXWCgoLQ0dHB09PzT8dKMXESX5v/OWtV9kamoqLCgQMHyM3NZfjw4Tx58oTJkyezf/9+1q5dCxRmCsp6OErIB3d3d+zt7encubPwANXX18fDw4O2bdvi7u4uZAGWlAXye8HDw4OxY8dib29PTk4Oenp6xMTEcP78eby9vYV7q1atWmRkZPDs2TOhILcYFxQbGxtGjx7NhQsXKCgoQE1Nje7du3P69GkiIiKEZum7du0SSqicPn26xCz8H94/PXr0ICgoiE6dOn30Mit7jlauXJmxY8cyevRo0Z6ntbU1vr6+rFu3jpCQEGxtbQkKCmLmzJl06NABfX19rl27xvjx48nOzi5xYq0ogwcPpmHDhixYsIDbt2/z/v17OnbsyJo1a7C1teXAgQPyNlFCQuAflR+RLRQqKirs27dPCLhWUlKibdu2olxEvgeKLiSy/zczMyMgIIABAwZw/fp1YWzr1q1JTEyke/fuxTwBkpgTD7/88gt5eXmMGDFCOGZkZMT27ds5evQo06ZNKzanIN75c3Z2Ztq0aYwaNYqdO3cKwsbS0pJRo0bx5s0bpkyZIpTC2bZtG40aNaJHjx4lLnPaxcWF5ORkNDQ0CA8Px97eXij3Ipsfe3t7zp8/X+zcxCqASpcuzciRI2nXrh2HDh1CUVGRs2fPsm3bNpSUlHB3d6dv375cu3YNX1/fEiXmGjduTJUqVQC4cOECnTp1wsvLi/T0dNLT0wkKCuLmzZv4+vpSqVIlxowZI+0wSYiGfxQNnZeXh6KiIu/fv8fGxob69euTnp5Ou3bthM8kvi5FF3Bzc3PatWuHhoYGN2/eREVFBRsbGypUqCCMf/r0KdeuXfsoHk6MIuB7RVdXFx0dHeHfqqqqXL9+nfnz59OjRw9CQ0M/agMkxvnr168fs2bNwsnJiXXr1vHmzRvhs19//ZVZs2ZRu3ZtevbsiYqKCgC9evVi/fr1JSJzumg2o7u7O35+frx48YLU1FQUFBSws7OjYsWKwB/9b62trenbt2+x3xGj8FFWVubVq1fMmzePI0eO8PPPP2NlZcWLFy+AwrUgLi6OjRs3YmRkxIwZM9DQ0BDluXyIvb09q1atIjg4mKVLlzJjxgyOHj1KmzZtmD9/PtnZ2axYsYLo6GiaNWtGlSpVhPtRzBm3Et8P/1hp5efno6+vT3x8PMnJyZiZmYm6V963TtFG1dOnTxcKv169epWQkBAGDhzI2LFj6dOnDz/88AOhoaFkZ2dz+fJlOVsu8TlWrVpF586dhWbpOTk5ALx8+ZINGzaQnZ0t+uK4enp6eHt7c/HiRdLS0oCPBUtiYiIrV66kX79+aGtrC8fHjBlTIvr6Fu2damBgwIQJE7h27RpXr14lKCgIJycn/Pz8sLe3p2vXrqxbt44yZcoQEhIiZ8v/HGVlZeFFz8DAgOnTp3PkyBHU1dWxsbERxMy7d+9YsmQJv/76K+3bt8fDw0OeZn8RDg4OhIeH4+fnh6WlJf3798fExIThw4eTn5/P1q1bcXZ2Zty4cVy4cIF69erRokULoYexGF+YJL4//pUnY5kyZUhOTqZjx47k5eWJNjbne8HZ2RkbGxscHBxYvXq1UINr7dq1jBo1irp16zJnzhwWLFiAmpoavXr1En09p++ZY8eOsXLlSvz9/bGyskJJSUlogXfo0CFsbW1FP38vXrwgMDCQt2/fMnr0aNq0aVPsc1l5m1OnTqGuro6ent5Hv1ESXgxbtGjB/v37GTp0qOBVhMLkjWHDhlGxYkWmTJmCn58f2dnZdOnSRdS7F2ZmZkyfPh1A8FgpKCgQERHBsmXLaNSokVDTDwpfMuLj4wkKCiIiIkJeZn8R5ubmzJ07V+g1fPfuXQ4ePMiyZcto27YtZcqUEcbu2rWLOXPmYGJiQmRkJDVq1PhknUYJCXmg/G/8yK1btxg2bBggZeyIgR9//JHt27cXKwkjm5eNGzeyZ88e9PT0UFdXJzk5WdSB8RKQlpbGkiVLyMrKIiIiAh8fH5SVlcnIyBASikCc3gEjIyN0dHQ4c+YM+/btIz8/Hz8/PwYPHgwgxMLJRFr16tU5f/58iep3W5TTp08zbtw4Zs6cScuWLdm9e7ew/bh161b27dsneBtlfWLFeO/JQjRycnJwdXWladOm1KlTh169epGbm0tGRgbz5s1DUVGRTp06ARASEkJBQQHv3r0T+veKOUZOFuNWp04dDAwMePz4MVDogUxPT/9oThQUFEhNTSUmJobffvsNY2PjYvefhIS8+FeEXFHE9kD63lBRUeGHH34o1uweCudFVVWVevXqcfPmTe7duyd8pqCgIM2bHOjSpQtnzpzh5cuXfzk2OTmZadOmsW7dOpo1a8a7d+/YuHGjqD3g/fr1w8vLi/379/Pq1Stu3LghZPv5+fnh7u4OFIq5goICdHV1ad++PefOnRO2j8XM5/7uS5cuRUNDg6lTp3L37l2WLl0qiAZZsWYZYrz3li1bxpw5czh37hxJSUkcPnyY9u3bs2HDhmJJGRkZGcyZMweADh06UKpUKcaPH1/st8Qq4hQUFNi3bx+Ojo4kJCSgra2Nr68v3bt3x9HRERcXl4+SGWRe79TUVE6dOvVJr7GEhDz414WchHx5//49u3fvxtramhUrVhRril6lShXc3NxYsGBBsSxHMXpyvnXs7e0JDQ1lypQprFu3jlevXv3ld/Ly8rhy5cpHGY5iEwJQeH4zZsxgypQpHDx4kFu3bgmfHThwAAUFBXx8fPDw8CA3N5dTp04RGRmJrq6usJUndmR/d3t7e+rXr4+CggIXLlxg3bp1REVFoaKiwqRJkygoKCA+Pv6TWY5ivPdevHhRLGZ2586d7NmzB39/f9LT05k0aRI5OTkoKSkJYk5TUxNNTU05Wv33kP3dk5KSBDFXq1YtmjRpwrhx40hKSvqkN7GgoABzc3OMjY0/Eq0SEvLiH5UfkRAnLVu2xM/Pj5ycHIKDg7l8+TJly5Zl3rx5lC5dGjMzM1EuIN8bwcHBdO/enYULF7J+/fov8sx9iBjLjDRr1ozY2FimTp0qbLHJ0NbW5s2bNxQUFGBiYsLYsWNJTU2ldu3aaGho0K5dO1EXMgbo06cPmpqarF69msmTJ+Pg4MDOnTtp0KABampq3L59mwEDBgDg5eVFQEAAc+fOZd68eaLu7/vh39zT05MrV65w6NAhAHr27ElMTAzLly8nICBASIBo0aIFp0+flovN/xZdunRh1apVnDhxAgcHhz99sdLQ0MDAwIA7d+58RQslJD6PJOS+UXr37o2trS0dOnTg/v37KCgokJ2djampKbm5uaIUAN8LqqqqwtZhSEgIHTp0IC4ujjVr1hRrtv1n1KtXT7QlOSwtLfHw8MDOzk6ID+vUqRPGxsa0adOGtLQ0hg0bxsuXL+nUqROzZs0iLS1NiL8S61YxFNaGmzlzJubm5kKW5uDBgzlx4gTKysr06dOHESNGcO3aNaEDwNixY+nUqRO9evWSs/V/juyZIPvvwYMHKVeuHO7u7hw/fpy8vDx69OhBTEwMa9euZdmyZYwbN47SpUvTu3dveZv/j5GJudjYWGbPni1kVxdFzC8YEt8vkpArYXxKgH1OlFWsWJEmTZpQrVo1nj59SmJiIvn5+aJeKL8n7O3tKVeuHOPGjePNmzfMmjXri8Sci4sL48ePx9TUlLt3734dY/8GgwYNYsCAAbi5uXHjxg2Cg4Np1qwZAL///jvt27cnLy8PExMTcnJyaNCgAdeuXRP9tWlvb8+sWbPw8PBgy5YtWFhYEBwczM8//yz0GtXQ0MDW1hYnJyc8PT1JTk6Wr9H/A8bGxkIs48aNG6lVqxZDhw7l2LFj5OXlYWxsTHx8PCkpKbx79054ORQj7du3JyMjo1ji15+9xJqamrJ06VI2btzI+PHjvyjkQUJC3khCrgRRtFF1nTp1yM3NJSUl5W952KQ3SnEwbtw4PD09GTNmDEpKSvTo0YP27dv/pZhzdnYmMDCQkSNHsmXLlq9s9ZdRpUoVkpKSyMjIQEdHh+zsbGbNmsXu3bt59uwZxsbGxMbGYmdnx6lTp4TvifnatLKyYsGCBYSEhDB79mygcEtxwYIFjBkzplgP1SpVqnDixAkGDRrE9u3b5WXy/0SNGjU4efIkPj4+xMXFAbBp0yZq1qzJ0KFDOX78OLm5uRgYGGBgYCC0WROjAG/Xrh0+Pj4YGhpy4cIFEhMT2blzJ+/fv/9Te83NzRk8eDC9e/eWdi0kSgTiLF4kUYxp06ahq6sriLiJEyeyadMmfv31V5KSkjAwMPjiB45YF8rviTJlytC7d29mzJjBpk2b2LBhA4MGDWLr1q1MmDABa2trSpcuDRSvHO/s7MzkyZNFLeIUFBRISUmhR48eREdHM3fuXDp06MDKlSt59uwZUBgw/uDBA6G+oQyxXpvOzs788ssvnD59mmHDhgk18B4+fEhWVhYuLi7Url1bGJ+Tk8P169fJzMyUl8lfzIf1654+fUpkZCTt27fHyMgIAAsLC27fvk1kZCStW7dGRUWFx48fc/78eWErVmwiDuDo0aNYWVnRt29flJSUGDRoEAkJCWhqan62dp+CggKJiYlSbU2JEoUk5ESOoaEhffr0ITExER0dHaE1jre3N4GBgWRkZLB7927hoSshfmTbULLFT01NDSjsYHDlyhXc3d1xdXVFR0dHEOiurq5MnDiRESNGiFbEQaFIU1RU5N69e8TFxbFo0aJigkZDQwN3d3fu3btXIoLFXV1dCQ0NxcXFBTMzM3bs2MHatWtp27Ytjx49YuTIkbRt25YpU6YwZMgQOnXqRGRkJPn5+Rw5ckTe5v8lMvFsamqKgoICb968Ydu2bdSrV4+2bdsK4ywsLLh16xbr1q2jfv36xX5DzF6rnJwcHjx4wNChQ4mKikJXV5eDBw+ir6//yW4hH56LmM9NQkKGJORETmpqKv369eP9+/ds3bqVKlWqMH/+fHbv3s3mzZtxc3PjypUrbNiwQRJzIuRTb/SZmZmkpqZib28PFLY2UlYurASUkpKChoYG9evXF8pVdOzYkenTpzNq1ChRizgZn/Ks6ejo8OOPPxIfHy+UwRG7x0NTU5N+/frh7u7O9u3byc3NZeLEiWzevJk1a9bQrl07zp8/j7W1Ne/fv8fNzY3AwEDy8vIwNTUtEW3FoLB7Q0JCAuvXr6dbt26cP3+eyMhIgoODqVmzpjCuX79+LF26VPTt/GrVqkXTpk2pV6+ecCwrK4udO3cyfPhwnj17xpYtW1BXVxetF1hC4u8gxciJmKJxb3Xq1OGXX36hWbNmzJkzp1itLT09PRYsWEC9evVwcHAoVjtOQn4Unb8mTZqgoKCAmpoaJ06coFatWmzYsIGrV69iZ2cnxIfFxMQQGxvLyZMni31XWVmZM2fOyPN0ilH03PT19T/aJv1wbGRkJLVq1eLp06e4urqKupAx/Hm8np6eHkFBQfTp0wdbW1uOHj2KpqYmKioqaGlpkZqaCoizYwN8HOxfuXJlduzYgaqqKlu2bKFUqVIsW7YMCwsL9PT0GDly5Ec18MQaz2hnZ8fw4cMpU6YMT548Yc2aNURHRxcb06hRI2bPns2lS5fw9fUV5RxJSPwdJCEnUqpUqSK0KbKwsCApKYmqVasSGhqKoaEhPXr0KLZ46urqsnbtWh4/foyTk5O8zJb4BP7+/vTs2RNlZWU0NDTYu3cvkydP5scff2TWrFnk5+eTnJxMxYoV0dLSok2bNoI3R4yLZVEhMGzYMGrUqMGSJUuKFSr+kAoVKtCgQQMOHDgg2uD4TyG7l5YvX17MZpmYMzMzw9ra+qNOKiWhvE+lSpV49eoVmZmZ9O7dG2traw4cOICmpiZjx47l6tWrlC5dmilTppCUlCRvc/8Sc3NzIiIiGD16NDdu3MDd3Z3y5ctjY2NTbJySkhIDBw6kR48eeHt7c//+fTlZLCHx7yB+v/93SJs2bYiOjqZbt24EBwcTExODrq4u169fx8fHh4yMDBITEylVqpTwnZcvX2JpaSkUIpUQB15eXjg7OzNy5Eh+/vlnVqxYgaOjI1WqVGH//v107dqVLVu2cOfOHQ4dOkTbtm1FLeLgj7ihwMBARowYwaFDh/60TIOCggJPnjxh//79og6O/xR9+/bF0tISKN5+8MWLF0LS0ZYtW2jQoEGx74ldxPXp04ddu3YxcuRIatSowf79+3n+/Dn5+flERkbi7OxMZmYmderUoUuXLvI29y/R1tbGysqK0NBQNmzYwMWLF1m5ciXp6em0atWK5s2bC2Pz8vJYtWoVFSpUwNXVVY5WS0j8O0geORGhp6fHixcvqFq1KmFhYdSrVw8dHR169epVrPhr3bp1iY6ORkVFhV69en1UqqIkeAO+RZSVlT8qBRMdHc2hQ4dYuXIlvXv3Zt68eUydOpX4+HjU1dXJzs7+6HdKgrfKzMyM4OBgHB0duXTpEgDq6upUr15duFZL8nUoE9INGjRg+fLlTJ48+ZPxiWXLlsXZ2Zm5c+eKfs4+ZPTo0TRt2pSGDRvi7e1N7dq18fDwwMrKipSUFCpVqkTTpk3ZsWOHaF8qirJz507OnDmDv78/AGvXrqV+/fooKiry4sULHj16hLW1tTC+W7du2NrafnLrWEKiJCF55ETCrFmz8PT0RFFRkfv373Py5EnKli3L7du3iwUcQ2EDdU9PT969e8fJkyfR0tIq9nlJXTxLMiEhIZw4cQI1NTXB66Surk6LFi14+/Yt7dq145dffiEoKIj4+HiUlZXx9vb+pLdDjIKgVq1aaGtrC/+uUKECjx8/5tKlS9SuXRsvLy8OHjzI5s2bCQsLA0r2dSgTLk+ePCE5OZnWrVsDHyevpKWlMXv2bCHmryQgS8AIDw9nypQpbNq0iYSEBCpUqICmpibTpk1DS0uLhw8fsm3bNqFQs5hRU1Pj8uXLtGjRgtjYWDZt2kStWrWwsrKia9euBAYGUqlSpWIeuAcPHvDgwQM5Wi0h8e8gCTmRcOTIEcLCwsjPz0dVVZWdO3diZ2fHkydPGDx4sLC9IyM5ORkvLy/27Nkj6v6N3wtr1qzh3bt3JCYmCmIuOzubDRs24ODgwKpVq/D392fp0qVAYS25pk2bUrVqVfka/gUYGBiwdetW3Nzc0NHRAQoFjo6ODqtWrWLFihU0bNiQFStWMH78eFxdXWnSpImcrf7fGDBgABMmTEBHRwdlZWWeP3/OmjVrcHFxoXHjxn8qTsUowD9FUe/arVu3CAoKws3NjVq1apGdnU2PHj2KlR4B8Z/bu3fvCA8PZ9u2bZw7dw41NTX8/f25du0aqampQqKQrD4jwJUrV1i4cKHkjZMo8SjL2wCJQjZt2gQUtgHq1q0bEyZM4MqVK6SmphIcHMyAAQPIy8sTmpC7u7uzbNkyvLy8APFmkX0vnDt3jsGDBxMbG8vmzZvp06cP796948KFC1hZWXHq1CmOHj0KQPny5Zk3bx6lSpUShJ2Yefz4MePGjRO2rBYsWMCBAwfQ1dWldevWhIeHc+TIER4+fEi9evU4d+5ciVkcjYyM0NfXR0FBgWvXrlGtWjUcHBxo27Yt165dY/bs2ezZs4ctW7bQu3dvfv/9d/Lz80u0t/FT7NmzhytXrtCiRQv69OnD3r175W3S3yY1NZWIiAigcOu/qGjLzc3l5cuXvHz5Evhj2//hw4dysVVC4t9EipGTMx/GEQ0ePJj+/fuTnJzMjBkzePjwITVr1iQ4OBhtbW1OnTpFvXr1+Omnn6hXr54k3kRGo0aNiI2NJSMjg169epGTk4OjoyPDhg0jPz+frKwsYatK1qOypIjw3r17Ex4ejrm5OVevXgX+eIFQVFRES0uL6OhotLS06Nu3r+jFjp2dHT4+PqipqVGuXDmhE8W7d+9wcXHBxMSEBg0asHr1atq1a0dWVha2tra8fftW3qb/JS1btuTp06c8ffr0f7a3pFyXH6KqqsqKFSt4+fIlK1as4NmzZ/j7+2NgYEDXrl1L5DlJSPwZkpATCf369ePatWv8/vvvuLm5YWlpyb1795g2bRoPHz6kevXqeHl5UatWLd6+fYuzs/Pf6rEq8e/zqb+9goICjRo1IiYmhszMTHr06MH79+9p1aoV1apVo3r16ty4cYPExERRN4n/3HVVuXLlj+KKNDQ06NOnDzY2NpQpU4Zu3bqJ/tp0cnJi5syZDB06lJSUFOrWrcusWbOYM2eOEOMnG2dkZIS1tTW6urqEhYUxc+ZMOVr+1/z0009s376d1atXU6lSJQIDA0lJSSE9PV3epn01fvjhB5YsWYK2tjYvXrzg8ePH2NjYlKgXJwmJL0USciJAQ0OD3377jRMnTuDp6QkUbp1aWFgUE3NaWloUFBQIb9hiFQHfA0VFSu3atcnNzSUrK4snT56goKBAw4YNiY2N5c2bN/Ts2ZN379599BslYUFp27YtWlpaXL16ldTUVPLz8z8SaFpaWjg4OFC2bFlCQ0NFX+zX3Nyc2NhYnJ2dizW1X7p0KZUrV8bc3Jw3b94IxxUVFalTpw4TJkxAXV0dW1tb0QpUKCwgvX37dsaPH4+BgQEWFhZcuXKFI0eOFNvKLwnX3z+hYsWKVKlShdzcXM6dO1ei6hdKSPwdJCEnB4ouhLL/b9GiBWvXriUgIICVK1cC4ObmRt++fbl79y4hISFShpUIGTduHJaWligpKaGlpcWwYcM4cOAAgCDmXr16Rd++fUWflOLv709aWhoLFy4EICgoiL59+6Kjo0NycjLr168nLi6OnJycj8ScrPQKiF8gODg4MHfuXMaNG0dCQoJgd1RUFGXLlsXR0bGY8Jada61atThy5AgODg7s27dPXuZ/EePHj0dDQ4NJkybRsWNHypYty6xZszhz5gxnzpxhzpw5nyx98y0jZg+xhMQ/QcpalQOyh4mzszM9evSgfPnynD59mvj4eHr27Cn0CFy8eDEbNmygRYsWH1Unl5A/Pj4+QjN7CwsLzp07R1xcnFCr6vfff2fQoEHUrl27WEs1MaKjo0Pz5s3p3bu3EOzfunVrXFxc6NSpE5cuXaJv374MHz4cVVXVj/qkysQQfLrXqphYsWIFPj4+wtYqQM+ePbG0tCQqKuoj72lBQQGKiorcunWLs2fPFguiFys3btygffv2lC1bloMHD7JhwwZevnyJjo4OXbt25dSpU8ybN++j0kbfMpKIk/hWkTxycqJOnTocPHiQp0+fcubMGebPn09mZiaLFi1iyZIlJCQkCGN79+7N9u3bRb9Afk80btyYoKAg5syZw4EDB+jevTuRkZFcvHiRtm3bMnz4cNatWwdAjRo1uHfvnujnT09Pj9DQUEqXLs2dO3fIyspi8uTJQGEDeX9/f1q0aMGuXbuYP38+OTk58jX4H+Lm5saMGTPYuHEjJiYmTJkyhYSEhM96bmSevJ9++om7d+9+fYM/g7GxMbdv3/6o1dS2bds4ffo0gYGBHDx4kJcvXzJ48GCePXvGpEmT0NXVZfTo0aK/LiUkJP4cScjJCR0dHQIDA2nUqBGJiYn4+/szcuRIunbtirGxMSYmJkLzbRli37L6lvlwca9VqxadO3dm0aJF/PzzzyxcuJA5c+YQGxvLxo0b+eGHH5g6dSrLli0TviPm+ZOdX9myZQkLC8PExISTJ08Wq4SvoaGBv78/P/74IydOnGDatGnFPHElEWdnZ2bNmkVSUhKOjo5/OlZLS4vKlStz/fr1r2TdX6Oqqsrhw4cpKCigf//+PHjwQJhLMzMzHB0dadCgAXfv3sXNzY2nT59+9BvSlqOERMlG2lr9ynTr1o06deqQkZFBREQE1atXJyUlhT59+tCvXz9yc3PR19cnNDQUTU3NYt8Vqwj41im60P30009AYSHVNWvWAIWemu3bt7NkyRKgsJ5VWloaVlZWxX5HjPMn2x4tKCjA0NCQtLQ0Ro8ezY4dO6hWrRqurq7CmKysLKZNm8atW7coXbp0iRdxAPHx8YwZMwZTU1OGDRv22XFKSkq8efNGVCIOICcnB3Nzc96+fcvy5cupUqWKcK2eOXOG6tWr8/btW8zMzAQR92F3CknESUiUbCQh9xWpX78+w4cPZ9OmTZibm3P//n1Gjx6Nm5sbz549Y8yYMRw8eJBnz55RunTpElGv6ntAttBNmDCBX375BRcXFwBevXqFpqYm9erV48mTJ0I5EVnSg5mZmRyt/muKCtQxY8YQGRlJs2bNSE9Px9/fn0uXLtGvX79inqqsrCzGjh3LmDFj5GX2F/HDDz9gaGhY7NiHAkbGsmXL8PX1JSAgAD8/v0+OEXOm4+PHjzE3Nyc/P5/58+dTrVo1oPCFYubMmeTl5VG/fn1hvCTcJCS+LaTODl+Rq1evMnLkSPr160dERATt27cnOTmZM2fO0KVLF+Li4li3bh1bt279ZLkKCfkxduxYnJ2dGTBgQLFYpLdv33LkyBFGjBhBmTJlaNWqFSoqKpw7dw4Q97aVzK6AgADs7e3x9/cXvDYvXrzA19eXsLAwbGxsyM/PZ8WKFQDCtSnWc+vWrRtBQUG8evWKy5cvExcXx5UrV8jLy/vs9vaSJUvQ0tLC1NRUDhb/PUqXLs2rV6+AP7KFMzIyePz4Md26dWPJkiW4urpy//59rly5wrt372jTpo1QxFlCQuLbQoqRkxNdunShf//+1KpVi5o1a/LgwQMcHByKlRgRc0zV94S+vj7x8fHEx8cLCQzwRx0/TU1NfHx8qF+/Ps+ePcPb27vEFB5t2LAhS5YsYcKECcXaMsnOTU9Pj5CQEBo3bkxgYCBJSUlytPbLqVixIuXLlyc8PJyMjAxu3rxJQEAA2dnZJWJePkfLli2ZM2cOI0eO5PTp08LxuLg4atSogbe3N3PmzEFBQQFHR0cePHjAokWL0NXV/WirX0JC4ttAEnJypFKlSjRp0oRx48bRqFEjFi1aJPSzlBAPNWrU4ODBg7i7u38kZFRVVYXsTS0tLaGQrFgLj37oRWvVqhVLlizB2NiYZ8+eFRsrO7dy5crh5uZGWFiY6AVQnTp1uHHjhvBvbW1t7O3t6devH9nZ2dja2pKVlVVixZyxsTFDhgxBT0+P4cOHc+3aNZYuXUqtWrWwt7cnJSWF8uXLC/GbLi4upKen8/r1a1F6TyUkJP45Uozcv4wsDkdR8a//tA8fPmT79u2YmZkRHBzMpEmT/mvzJP6ConFUsjlMT0/n+vXr1KtXDzU1tWLjunbtiq+vL0CxbgBiFHHwx3bq8OHDsbCwIDMzE2VlZX744QdhjOy8TU1NadeuHc+ePSMkJEToqSpW+vbty9KlS2nUqBFQuO2YmZnJkiVLmDlzJpqamsTHx6OqqlriRFylSpUAOHDgAJGRkTx69Ij58+ezZcsWqlSpgoODAykpKQA8ffoUa2trypcvz5gxY3j16tVHdf8kJCS+HcT7VC6B9OzZkzFjxlC2bNkvXigUFRXJzMxk3rx5QmsjCflQ1Fvl4eHBoEGD0NHR4eXLl0Jx344dO6KkpERBQQHq6urY2dlhZGQkZ8v/mqKLuJ2dHR4eHty9e5f09HRu376NtbU1jRs3BhAEm6urKz179iz2O2IVQM7OzixatIi6devSo0cPAKHfa25uLvv27WPu3Lloa2vj4eEhZ2v/Hn379mXv3r04OTkBcPjwYRYvXsyjR49o2rQps2fP5v79+8Xm+NmzZ7Rr1w5vb2/hmOSRk5D4NpG2Vv8lDAwMOHDgAJmZmSgoKLB69WrOnj1bLO6opG7nfG8EBgZibW3NvHnzSExM5MmTJwAkJCTQoEEDLly4wNOnT/nhhx/Q0dGhU6dOJaYUR4sWLbCwsOD69essX74cKEwOmDx5Mvfu3eP48eM8efIEW1tb9PT06NSpk2i9izKcnZ0JCwvD0dGRypUr4+npiaOjY7EtVgA1NTUmTpxIgwYNsLOzKxEJRTo6OixZsoS2bdty8eJFfv31V2JiYgDo0KEDgwYNolKlSowbN46zZ89+MgFFeu5ISHzbSB65f4m3b99y9OhRgoOD8fLyonTp0ixatIiZM2fSt29fQLzeDIk/cHR0xM7ODisrKxYtWsSTJ0/Q0NAQPps3bx5v3ryhUqVKnDhxAmNjY3Jzc0uEJ7Vhw4YkJibi5uZGqVKlhOO7du3Cx8eHR48eMXjwYJycnHjx4gUmJiZCpqdYcXV1JTQ0FFdXV3bv3s2NGzfQ09MTym0U9VK9e/eOsLAw6tSpg6urq7xM/ltkZGRw/PhxsrKyOH36NJaWlgwcOBCAQ4cOsXjxYh4+fMjMmTNp1qzZJ71u0nNHQuLbRvLI/YtYW1szdepUoSuDgYEBkydPxszMjHPnzhEdHc3Fixc/aqUjIR78/f3R09NjzJgx1K5dm3bt2jFo0CCeP3/O+vXrhdZpRT0fYk1s+BSWlpbMmDGDs2fPEhgYSHJycrHPtbS0AESftAGF3qrNmzcze/Zstm7dKhxfsGABTZs2xdTUlIyMDOG4zDM1aNAg6tSpI8Q2ihVZaRENDQ1WrlzJpUuX0NTUpHnz5sTHx7N06VKg0DM3cOBAfvzxR/r37//RnEpISHzbiPdVuwSgrFxYhk/msdiwYQMHDhygd+/eQGGhziZNmrB7924ePnzIiBEj+O233+jcubPcbJb4c1RVVbGyssLb25tFixbRpUsXdu7cyfPnz3FxcaFMmTJA8XgjMQqdoh7Coh61X3/9lcmTJ9O4cWMGDBhA9erVi4178+ZNiUjagEJvVa9evQQRJ/O+/frrrygpKdGuXbtix2WeqatXr6KqqiokrogNWSFj2XZ9fn4+58+f5/3794SHh3P27FmcnZ2FwtSHDh1ixYoVrFu3jps3b8rLbAkJCTkheeT+R4yNjWnbti1RUVG8fPlSOD5hwgTatGmDmZkZ+/btIysrCxsbGzIzM2nevDnNmzdn8eLFol4gv3fmzZtHnTp12Lx5M/v37+f69eu0bt2a4OBgHB0defz4sbxN/GIGDhxIixYtUFRUJDk5mfDwcKBwm9jX15dNmzaxePFiUTWB/6coKiqSlJTE06dPcXBw+OSYGjVqcOfOna9s2V9jYWHB7Nmz2bJlC3Fxcdy/f5+XL1/SpEkTNm3ahI2NDffu3WPcuHE0a9aMZcuWER8fX+w3pJg4CYnvC0nI/Y8EBwdjYmLChg0bWLx4Menp6UChJ2T//v3Ur1+f48eP4+zszIsXLz76vpi3rL5Xim6XFq0Jp6yszIoVK3j//v1fNlaXN7a2thgYGDB37lwCAwOxt7dn7dq11KhRg9q1a5OZmUnXrl0pKCjAwcGBcePGcfDgQUJCQnj06JG8zf/HyOawc+fOREREMHz4cPbt2ydvs74IXV1dfvnlF9q3b09OTg7btm2jXr16zJw5k+PHj+Pu7k7p0qUJDAzEyMiIQYMGYWpqip+fH9u3b5e3+RISEnJCatH1PxIQEEBgYCA9e/ZEUVGRRYsW8erVKxQUFNi2bRvKysq4u7t/UsSBuLesvleKbpe+efMGTU1NrKys6NmzJwYGBsKWuFhbUzk7OzNz5kzs7OyoW7cu5ubmDBo0iMOHDwOFGatz5swhMTGRPn36sGLFCtTU1OjUqVOJ8jL+GbJ5SU5OJj09nfbt25cYIffy5UuioqKEjOiLFy9y/vx5goODuXz5MvXq1aOgoIA5c+Zw/fp1Fi9ezL1799i5c6e8TZeQkJAjUozc/4As/mjKlCns2bOH/v374+7ujq6uLrm5uWzatImqVavSsWNHOVsqURQVFRXh/2VB/TI+VSxVTU2N8uXL8+zZM0xMTITsVDGKODs7O0JDQ3FxcWHv3r0YGhpSqlSpYjFTZ8+eZeLEiZQrVw5jY2OgsMeok5PTN1cwNiUlhR07dvDTTz/J25S/xeHDh1m/fj23b9/G0dGR3bt3Y25uTmJiIlDYekxPTw+Aa9euERkZKfpCzRISEv8t0t3/hdSsWVP4/6ILeZ06dahQoQK9evXC3d0dfX19rl+/TmxsLB4eHkLgsoT86NixI4qKirx//x6AYcOGsWTJEmJjYzE1NUVZWfmTQubly5fMnTsXLy8voQyHGD2p1tbWREREsHTpUmGL7caNG7x69UoQbFAYNP/7779TpkyZT16XYhSo/4RffvkFMzMzeZvxtzly5AhLlizh/v37LFu2jEqVKrF582a6detGu3btuH379kfXqhQTJyHx/SIJuS+gVq1anDhxgmHDhqGkpCQ8NOPj46lZsyZt27Zl3759mJqaMnDgQLS0tDh9+jSPHj0iNTVVztZ/3wwbNozQ0FDs7OwAGDRoEGPGjOHs2bPUrFmTUaNGMWLECFRUVD4p5mTiD8S5WDo7OxMREcGuXbuwt7fH2toagNevX3PlyhXMzc2LeYazs7NJTU3l7du38jL5q/Hy5csS62k8duwYUVFR3Lt3j1mzZtGmTRvevHnD48ePRbu1LyEhIR+kZIcvZOTIkfj4+ODv78/SpUuJi4ujdu3aODk5CRl/gYGBtG/fnsOHDzNlyhThu9KDV36UL1+e6dOnY2BgwLp162jUqBHbtm3jwIEDKCsrExQURLNmzdi9ezcRERG8f/++xMyXg4MDc+fOxdnZme3btzNx4kSGDh2Kt7c3a9asoXbt2kRGRpKTk8OFCxc4f/48jo6OQscGMQpTieK0adMGd3d3qlWrxqRJkzh69Ki8TZKQkBAZkpD7Exo2bMiNGzfIyckBYOjQoUyePJnbt2+TlZWFk5MTDx48KJaBOnv2bNTU1PDy8pKn6RL8UYZBX1+fWbNmUbZsWcqXL8/AgQP5/fffgcJYOX9/f0HMyYSP2FFXV2fu3LkkJiayY8cO4XhAQABeXl54e3uzevVqatSogbOzM126dCEzM5MnT57g5uZGbm6uVKZCTvzdF4XWrVvj5+fHgwcPpOeKhITER0hC7jP069eP6Oho4uPj8fPzE4pzurq6EhYWxuzZswkJCRHGS4uiuPhwsSxXrhxBQUH07NmTuXPnCvXUADQ1NZkwYQKmpqaEh4ezatUqeZj8xfyVEPhQzEFhgo6WlhavX78W/i3GeL/vibZt26KlpcXvv//O48ePyc/P/+zcNmzYkCtXrpQIT7GEhMTXRSo/8hlkmWEDBgxAS0uLYcOGkZ+fT1xcHKqqqgQFBfHixQsWLVoE8KcPYYmvS9F56N+/Pw8fPuTYsWOMHz8eRUVFunbtytOnT4V2W2/fvmXGjBmkpKSwZs0aeZr+RcjOzd7enjp16jBlypRi5xwcHAxAeHg4ubm5rF+/nry8PEHEgVT+5mvj7+9PWloaCxcuBCAoKIi+ffuio6NDcnIyGzZsYMmSJeTk5HzyOSLzIEvPGAkJiQ+RhNxnOH78OPv27ePAgQMMHTqUmJgY3N3dyc/PZ+HChSgqKhIUFERBQQExMTHAt5f1V1KRzUNgYCD9+/dn8eLFXL16lZcvXzJ+/HjCwsKE5AeZmHvz5o2wyJYU72rLli354YcfgI+vveDgYPLz84mKiiItLY0DBw7IwUIJKOwJ27x5c1RUVMjMzOTOnTu0bt0aFxcXXrx4gZeXFxYWFmhpaTF//vzPijmQnjESEhIfI22t/gnLli0jLy+PiIgIVq1axaFDh/D09BQWeU9PT4KCgnBzc2Pz5s1ytlaiKAMHDsTX1xcrKyuuXbtWbHHU19cnNDSU8uXLs3XrVsGrWlIoeh4HDx5k3rx5wsvEhzg7O5OQkCB54OSMnp4eoaGhlC5dmjt37pCVlcXkyZOBwq19f39/WrRowa5duwQxJyEhIfElSOVH/p/GjRujpaWFqqqqcGzatGno6elRUFCAm5sbXbp0ISoqSii+GR0dzeDBg9m2bZu8zJb4DE2aNGHVqlVcvHhRiG+U8fz5c3x8fMjNzaVu3bpysvB/R+aVefPmDTt27KB58+afHRsfH09eXp5QxFri66OgoMCLFy8YP348mZmZ2NjY0KBBA+Hzt2/fEhwczKlTp+jcuTPjx49HWVnaLJGQkPgyJCEHmJubs3fvXpYtW0ZISAi1atUC4P79+7x//57OnTtz9OhRnJ2d6dy5MwsWLBDE3MaNG6WFUkQ0a9YMKAwO19fXB/6o/1ZQUICqqip169blxYsXuLq6Mm7cOLnZ+ncZPHgw8+bNw8jICBUVFbKzs9m6dSsWFhbFCv9+Cskj9/WR1a8rKCjA0NCQtLQ0Ro8ezY4dO6hWrRqurq7CmKysLKZNm8atW7coXbr0Ry8fEhISEp9DEnIUbm1AYdNqFRUVtm3bxpQpU/jpp58ICwvD0dGRWrVqcfjwYQYMGEC/fv0YO3Zssd+QFkr5ExAQwIwZMzA0NGTfvn3UqlWLpk2bFhtTvXp1AgICMDIy4tWrV6IuGNu4cWN69epFr169qFy5MllZWbRu3ZqIiAgSEhJo1KgRJ06cICoqCnt7e3R0dORtssT/UzTGbcyYMURGRtKsWTPS09Px9/fn0qVL9OvXD0dHR+E7WVlZjB07ljFjxsjLbAkJiRKI5L8HodxEREQEsbGxbN++nUaNGrF48WLOnz9PhQoVaN68Obdu3eK3337DxMREyCKTEAeNGzemefPmBAQEkJqayv79+7GwsMDZ2Rk1NTVOnDiBgYEBkyZNolSpUty4cUP4rhgDyO3t7fH39ycnJ4fKlSuzc+dOAgMDWbFiBT179sTKyooVK1Zw7tw5ypQpg5qaGjo6OmRkZEiZjSJA9vcPCAgQ5vLp06cAvHjxAl9fX8LCwrCxsSE/P58VK1YA8O7dO0DKTpWQkPhypGSHIri7uzNt2jT8/f2JiYnB0NAQV1dXmjdvjr+/P1evXi02XqrFJQ7c3Nzo0KEDKioquLm5kZWVBYCpqSmjR48WtlgzMzMpKCiga9eu5ObminaxdHBwYPbs2bi7u3P58mWqVq3KypUrWbt2LaNGjRLGdevWjYYNG+Lh4YG+vj4rVqzA29tbfoZLFKNhw4YsWbKECRMmsHfvXuG47Lmhp6dHSEgIjRs3JjAwkKSkJDlaKyEhUVKRPHJFiImJoaCggBkzZqClpcXcuXOZMWMGysrKn8wik0ScOMjLy8PY2Jg3b95Qu3ZtLl26BEBSUhK3b9+mYsWKNGvWjLt377Jlyxby8/NFK8LNzc2ZO3cuw4cPZ8uWLSgoKHDnzh2WLVuGiYkJZcqUIT09HYBdu3axa9cu1qxZg7u7Oz/++CPly5cXPD8SX5cPXwy0tbXR1tbm4sWLxcbl5eWhqqrKixcv8Pf3x83Njd27d39tcyUkJL4RpBi5D4iNjcXPzw9/f3+GDx9Ofn6+VApARHwqnm3p0qWMGjUKRUVFnJ2dqVGjhvDZjRs3OHToEPPmzSMxMZH8/HwUFRVFKeIAMjIyAKhTpw4GBgaCMFBWViY9Pf0juxUUFEhNTSUmJoYmTZr8ZdKDxH+HbK6GDx+OhYUFmZmZKCsrC7X+ACFJytTUlHbt2vHs2TNCQkKE61JCQkLi7/LdeOR++OEHnj9/TmpqqnDsc1trixcvpqCggGnTpqGpqUloaOjXNFXiT5DNV6NGjdDQ0OD169dcv36dX3/9FU1NTfz8/MjKymLx4sXcvXv3k78h1mK/CgoK7Nu3D0dHRxISEtDW1sbX15fu3bvj6OiIi4uLIPRkyJI1UlNTOXXqlNCRROLrUfQ5Ymdnh4eHB46OjqSnp3P79m2sra1JS0vj4sWLgmBzdXXl6tWrHD16VPgdsV6XEhIS4ua7iJHr1q0bQUFBvHr1isuXLxMXF8eVK1fIy8v70yr+w4cPx9TUlN69e39liyU+pEmTJly4cAGASZMm0atXL8qXL8/Dhw95+PAhNjY2QGFLtbFjx7Jx40aWLVvGrVu35Gn2/4ypqSkJCQkcPHiQJk2aMGXKFBISEj57vZqbmxMbG0ubNm24efOmHCyWaNGiBRYWFly/fp3ly5cDhc+eyZMnc+/ePY4fP86TJ0+wtbVFT0+PTp06idYzLCEhUXL4LoQcQPny5alYsSLh4eFkZGRw8+ZNAgICyM7OLjEtmb5XnJ2d8fHxoWvXrvTu3Ztx48bh7OzMq1evqF27Nr6+vmRlZdG5c2egMONzzpw5BAQEfLbjQUmgS5curFq1ihMnTuDg4MCrV68+O1ZDQwMDAwPu3LnzFS2UkNGwYUN27dqFoqIiwcHB/PLLL8JnP//8M5aWlpiamnL37l2ePHnC4MGDyc3NlZ49EhIS/5jvRsjJ0NbWxt7enn79+pGdnY2trS1ZWVnSA1WkDBgwgFmzZuHq6sq2bdtYsGABDx8+ZNq0aUDhtlaTJk2Ijo7m0KFD+Pj4AIUiaN++fSV+TmViLjY2ltmzZ5OWlvbRGOnaFQeWlpbMmDGDs2fPEhgYSHJycrHPtbS0gMKOHCBlvUtISPw7fNPRtaVKlaJ8+fLFjmVmZrJkyRJmzpyJpqYm8fHxqKqqSguhCDE3N2f27NkMGDBAaINmYGBQrL1RQUEB58+fZ8eOHdStWxd1dXUA9uzZI9oA8vbt239UqPhzRYn37NkjxMdNnTqV0qVLfzRGuna/LkW7uBS9vn799VcmT55M48aNGTBgANWrVy827s2bN4KIAynrXUJC4t9BfKvcv4SlpSXx8fHs27eP5cuX06RJE6BwwczNzWXfvn3MnTsXbW1tPDw85GytxIc4OzsTGxv70fGdO3dStmxZOnXqVOz43bt30dLSQkVFpdhxsYmcdu3aMXbsWGJiYoiNjcXMzAwVFRUKCgo+2+YtKSkJT09PqlWrxuvXr7+yxRIfIhNgAwcOJDIykujoaEaPHg0UFhefMWMG5ubmuLm5CWJObNehhITEt8M3KeTs7OwIDw9nz549+Pv707hxY1xcXIA/sh7z8/PZs2cPZ8+epVOnTqipqcnRYomiuLi4CK3RQkJCiIuLo3///kChkMvLy8PNzY3evXujoKCArq4uZmZm3Llz56OsTrFx9OhRrK2t6du3L0pKSgwaNIiEhAQ0NTWF5JsPUVBQIDExkV69eom6pdi3jq2trVBwOTAwEF9fX54/f462tjbW1tbs2bMHBQUFEhISCAkJwczMjFGjRlGxYkX5Gi4hIfFN883FyP38889ERUUxceJENm3aBICrqytVq1Zl8eLFPH/+XKj8D4Xbr0ePHuWXX34hOjpaTlZLyOjQoQPLly9n6NChwnbqxIkTGTp0KCNHjmTt2rXUrVtX6KlaunRpHj9+jJKSEp07dxZ1s3F1dXWys7OFf2toaNCxY0dGjx6Nrq4u3bt35/nz51LMmwhxdnZm5syZ2NnZkZKSwurVqxk5ciSHDx8GCjNW58yZw8uXL+nTpw9Q6LHr1KkTAwYMEGUHEQkJiW+Db0rIKSoqYmNjg76+PkuWLOHt27cAbNq0CUNDQ/T19bl48SJHjhxh9uzZwvcGDRpEnTp18PX1lZfpEv9PmTJlqFq1KhcvXiwWDD5x4kSGDRvGyJEjWbNmDeXKlaNy5cq0atWKR48elYiODTVq1GDlypU8ffq0WO0xIyMj5syZQ5kyZTAxMSkm9iTkj52dHXPmzGHgwIFs374dY2NjYmNjad++PY8ePQIKnz0dOnRgxowZjB8/ngMHDhT7DbG2g5OQkCj5fFNbq/n5+WzdupXExERBxC1btowaNWrg6+tL//79uX79Oj169KBu3brC965evYqqqqq0vSoC0tPTKVeuHDo6OsUEWVBQEL/88gvz5s3DysqKZ8+ece7cOaKjo0XfscHBwYHIyEhycnJ4//49QLFF/fr16/j4+JCRkUFwcPBnY+Ukvj7W1tZERESwdOlStm/fDhR2C3n16lWxLhr5+fn8/vvvlClTBkNDw49+RxJxEhIS/xXflJCDwhZHKSkpAKioqLBt2zZ69+7N/v37OXfunNDKqGgbp6NHjxIREcG7d+/kZbbE/9O8eXNCQkKoVasWUDwrUCbm5syZg6Oj40ffFeN2ZPPmzfHz82PEiBEsWLCAt2/foq+vj66ubrFxV69eZf369dSsWZNKlSrJyVqJojg7OxMREcGuXbuwt7fH2toagNevX3PlyhXMzc3p2LGjMD47O5vU1FThJVJCQkLia/DNOyFgOwAAFllJREFUCbmivH//njVr1gjCDgrjlE6dOsX9+/eLjZUKqYqD8+fP8+7dO9zc3ICPxVlQUBArV64UFlWxU7ZsWS5fvszGjRtp2LAhcXFxbNu2jTVr1jBr1ixhXF5eHqtWraJChQq4urrK0WIJKPSizpo1i4EDB+Lg4EBMTAzz5s3DxsaGjIwMpkyZQpkyZRgzZgxBQUH069ePZcuWoayszObNm+VtvoSExHfENy3kPkRVVZXx48fz+vVrrl27Jm9zvns+zL5UVlYmLy+PoKAgmjRpwo8//vjJ7/n4+AgB5WKnQYMGlCtXDg0NDaKjo7lz5w4zZsxg+/bt/PTTTyQkJAhjMzMzmTJlCtWqVUNHR0eOVn/fqKur0759ewYMGCBspxbd2re1teXmzZsMGTJEyHp3d3fn9evXdO7cWbT1CyUkJL5NlOVtwNdAU1OTDh064OTkRNWqVenUqZNQxkGKXZEfsr99y5YtOXnypJBxeuvWLZSUlGjRogVnz56Vp4n/mEOHDtGtWzeGDRvG3bt3CQsL49WrVygpKXHr1i1Gjx5Nu3bthObpDx484MGDB3K2+vtFQUGB7OxsPD09P/osODgYgLlz5wKwevVqJk+eTFBQEFpaWkKNP7Em3EhISHybfBevjZqamlhYWJCVlYWxsTG5ubkoKSlJIk5OqKurCx6nn376icTERBITExk8eDClS5fm5s2bLF68mJEjR1KzZk05W/vPkG3rDx06lHLlygn9UvPy8jh27BgGBgZUrlxZGH/lyhUWLlwo+np43yqyZ4K9vT2BgYFAcc9xcHAwkZGRhIeHC7UN8/LyihVqlkSchITE1+S7EHJpaWn4+voyaNAgoeiq9LCVD2ZmZsTExLBnzx6mTJmCqqoqLVq04Pbt2/Tp04djx44xcOBAMjIy+O2332jZsiVAid2qevr0Kd7e3uTk5NC8eXNsbW2Fz96+fcvNmzd5+fIl8IdgePjwoVxslfiDli1b0qFDB+DjjFOZmIuKiiqWuSohISEhD76pOnJfgrSdKj+cnZ2ZMmUK69evR1VVFUtLS44dO4aNjQ2KiopoaWnh6elJs2bNqFOnDlWrVuXYsWMlJh7uzzAyMmLFihW8ffuWEydOcPz4cRwcHChdujRdu3YVZcbt94js+aCvr8/BgweZN28eMTExnxzr7OxMQkKC9FIoISEhV747ISchHxwcHAgLC2PgwIEkJSUB0LFjR9avX8+gQYNITEwUxhoaGlKtWjWGDRtGs2bNCA4OZtWqVfIy/V+jevXqODs7Y2JiQnp6Oi9evMDd3Z3c3Fypm4PIUFdXJygoCB0dnU/GyxVFiomTkJCQJ5KQk/jPKVu2LFevXuXo0aPY2Njw7t07FBQU0NHR4cCBA8ycOZNVq1Z95C0tU6YMc+fOJT09Xehx+S2grKyMqqqqUG9MEgLyZ/DgwTRs2JAFCxZw+/Zt3r9/T8eOHVmzZg22trYfdWqQkJCQEAslM/BIokSRlpbGgAEDaNmyJVOmTKFChQoUFBTQsWNHKlWqxPnz54HisUiKioqkp6ezbt06OnbsSPny5eVk/b9Pbm5usaKxkoj7+jRu3JhevXrRq1cvKleuTFZWFq1btyYiIoKEhAQaNWrEiRMniIqKwt7eXioHIyEhIVq+i/IjEvJnx44duLm5sWzZMl69esXdu3cJCQlhxIgRXL169aPxsm3Gli1bkpGRQVZW1tc2WeIbxd7eHn9/f3JycqhcuTI7d+4kMDCQFStW0LNnT6ysrFixYgXnzp2jTJkyqKmpoaOjQ0ZGhhRjKyEhITqkrVWJr0rPnj2Jj48HYNKkSURFRX12rJKSEkuXLmX27NmC105C4p/g4ODA7NmzcXd35/Lly1StWpWVK1eydu1aRo0aJYzr1q0bDRs2xMPDA319fVasWPFNbe9LSEh8O0hCTuKrY2xszLp164iOjmbevHmkpaXJ2ySJ7wBzc3NiY2MZPnw4q1evFrxrM2bMwMTEBFNTU9LT04t9x9DQEHd3d3788Ufc3d15+vSpfIyXkJCQ+AxSjJzEV+fAgQMMGDAADw8PvL29qVChgrxNkvgOkBVZrlOnDgYGBsIWqbKyMunp6R/FKiooKJCamkpMTAxNmjSRasZJSEiIEknISfxrfNg79XPHoDBmTibmLCws/mPLJL53FBQU2LdvH46OjowYMULYRu3evTuOjo6Eh4d/1E1D1sYvNTWVU6dOoaenJw/TJSQkJP4UaWtV4l9BRUWF9+/fA4Uej9zcXFJSUsjNzf3TAPFWrVpx+vRpKXNT4qthampKQkICBw8epEmTJkyZMoWEhITP1vKTbcm2adOGmzdvysFiCQkJic8jCTmJf8S0adOYNWuW0GZq4sSJ2NrakpOTw4sXL3BwcODx48d/+TtSLTWJr0mXLl1YtWoVJ06cwMHBQeiB+yk0NDQwMDDgzp07X9FCCQkJiS9D2lqV+J8xNDSkT58+JCYmoqOjw88//4yVlRXe3t4EBgaSkZHB7t27MTIy+svfkkScxNdkz5492NnZ0apVK/z8/ChbtuwnxykqKpKVlSWJOAkJCdEieeQk/hF169YlKioKZWVloqOj0dbWFnpT6uvrs2DBAho2bEi/fv24fv26nK2V+NZp3749GRkZxcrV/NnWvqmpKUuXLmXjxo2MHz/+Tz1zEhISEmJE8shJ/E/IkhiSk5Px9PTk3bt3REREUK5cOWHM8+fPGTJkCJcvX2bNmjU0bNhQXuZKfAe0a9eOsWPHEhMTQ2xsLGZmZqioqFBQUICSktInv5OUlISnpyfVqlXj9evXX9liCQkJiX+O5JGT+NtUqVKFlJQUACwsLEhKSqJq1aqEhoZiaGhIjx49eP78uTBeV1eXtWvX8vjxY5ycnORltsR3gKqqKuXLlycoKAg9PT2ys7NxdXXl7du3n0xm+NBbJ3VukJCQKGlIQk7ib9GmTRsCAgKYN28eHTp0wMPDgyZNmpCamipss6qpqdGzZ89iHg4dHR0yMzOlRVLiq6ChoUHHjh0ZPXo0urq6dO/enefPn382M1VCQkKipCIJOYkvQk9PjxcvXlC1alXCwsKoV68eOjo69OrVi2vXrgnj6tatS3R0NCoqKvTq1euj7SrJ4yHxb1OrVi10dHTIzs4udi0CGBkZMWfOHMqUKYOJiQnZ2dlyslJCQkLiv0GKkZP4S2bNmoWnpyeKiorcv3+fkydPUrZsWW7fvk3NmjWLjS0aM3fy5Em0tLSKfS6JOIl/Ezs7O5YvX87KlSuJiorC09Oz2OfXr1/Hx8eHjIwMgoODPxsrJyEhIVFSkYScxF9y5MgRwsLCyM/PR1VVlZ07d2JnZ8eTJ08YPHgwlpaWxcYnJyfj5eXFnj17yMrKkpPVEt865ubmhISEMHv2bGxtbbl8+TKdOnX6aNzVq1dZv349NWvWpFKlSnKwVEJCQuK/QxJyEn/Jpk2byM3Nxd7enkWLFpGens7hw4cJDAwkKyuLAQMGYG5uLox3d3fnzp07eHl5kZ+fj6KidJlJ/Ltoa2tjZWVFaGgoGzZs4OLFi6xcuZL09HRatWpF8+bNhbF5ef/X3t3HVF32cRx/8xBMQAlsmoCUoCsRcwurTdtAQVlIakHRjIeSndwUa2XOBTZlpEKthohChyfRGpVTaSqLhQxrMm1qNq2mhk49IEVBCoLWebj/cB4jrft2t3LOgc/rL/Y7v4t9N9jOZ9f3erBQU1PD6NGjefnllx1YtYjInadvWPlHf78n1c/Pj6CgILKzswkODqalpYWcnBx6e3vJzMzk7bff5uOPP2b58uX267oALS6XO66np4f77ruv3wzb66+/zrRp06isrKSwsJDPPvus3/u5ubk88MADDB8+3BEli4jcFQpy8o+ur2dLSkpi0qRJGI1GPv30U8aNG0dOTg7BwcGcPn2a7OxsTp48yaOPPgpAREQEVqv1piAocqd4e3tz/Phxpk6dSnl5ObW1tYSHh/Pcc88xa9YsVq1aRXBwcL8ZOJPJhMlkcmDVIiJ3nnatyr8aNmwYzc3NHDx40L6Q3GAwMH/+fM6ePcuaNWtobW3F19cXm81Gb28voLtT5e4LCgoiOTkZi8VCYmIi69ev54svvgDA39+furo6tm3bRmFhoX1McHAwra2tDqpYROTO04yc9PPXWTQ3Nzf6+vowGAzMnj2bBQsWAFBWVsaOHTsIDQ3lrbfeIiQkhMuXL9tDHOjuVLn72traKCoqYuPGjbi5ueHv72//zGw209XVRVdXF3Dj/1ohTkQGGwU56ed6OzUjI4OnnnqKUaNGcejQIaqrq0lISODhhx8GoKKigu3btzN16lRSUlIcWbIMcV5eXnR3dxMbG0t0dDQREREYjUaGDRvG1q1bAR17IyKDl1qrcpMJEyawb98+fvnlFw4fPsyGDRvo6enBaDRSWVnJRx99ZH83MTGRuro6bWgQh5o8eTKVlZX4+fnR2dlJe3s7KSkpmM1m3eYgIoOagpzcZPjw4axatYrIyEg+//xzcnJyeO2115g1axYxMTHMnDmTtra2fmP0ZSmONmbMGMaOHYvZbObbb7/FZrNpraaIDHpqrYrd7NmzmTBhAt3d3RQVFfHggw9y/vx55s6dS1JSEmazmZEjR1JQUICPj0+/sQpx4mgXLlzgm2++4ciRI9hsNtzc3BTiRGTQU5ATACZOnMjSpUupra1l3rx5nDt3jjfeeIPMzEw6OjpYtmwZ+/bto6OjA39//34bG0SckdbFichQoNaq2IWFhZGUlERWVhbbtm3j5MmTjBo1itbWVqqqqoBrx5FcvXpVM3AiIiJOQEFObhIXF0dycjLh4eGEhYVhMpl48cUX+x2mqjVxIiIijqcgJ7cUHBzMlClTWL58OZGRkRiNRnJychxdloiIiPyFgtwQ4ubmhs1mu63ZND8/PzIzMykuLtbCcRERESejIDdEJCQkEBERwebNm/n111//pzF/D3w6ykFERMS5KMgNAffffz9NTU309PTg5ubGJ598wpEjR9i7d6/9Ha15ExERcT2eji5A7r7e3l7279/Prl27+Pnnn5kzZw5Go5EdO3bQ3NzMzp07FeJERERckM6RGwIuXbpEfX09+fn5nD17lpUrVzJ9+nSGDx9OcXExu3fvJjExkdDQUEeXKiIiIrdBQW6Q8vS8Ntnq7n7tT7x9+3aamppITEwEoL29nSlTpvDll1/S2trKq6++SnNzM7GxsQ6rWURERG6PWquDUExMDNOmTaOkpISuri4ALBYL586d4+mnn8ZoNNLY2EhnZydZWVn09PQQFRVFVFQUTU1Nji1eRERE/meakRuE4uLiSExMZOHChdx777325wUFBfj7+9PR0cHly5dJS0ujp6cHgMOHD2M0GrFYLHh4eDiochEREbkdCnKD0MqVK6mvrychIQGDwYC/vz9w7Ry5PXv2cOrUKQwGA52dnbccryNGREREXIOC3CBzfTYtNzeXhoYGkpOTMRgMBAQEYDabqa2tJTQ0lOjoaAdXKiIiIv8vBblBICwszP6zzXbjWMAJEyYwevRo5syZg8FgYOTIkZw4cYLy8nIWLVpEUFCQI8oVERGRO0RBzsWFh4dz8OBBlixZgoeHh/08uOrqasLCwpg2bRqNjY3Ex8ezcOFCfH19OXToEBcuXKCtrc3B1YuIiMj/Q7tWXVxLSwvvvPMO2dnZXL58mc2bN1NVVUVYWBhpaWm0tbWRl5eHu7s78fHx+Pj4kJuby+7du4Eb96+KiIiI69EVXS5q0qRJnDp1ij/++AOAxYsXs3r1ak6fPk1fXx9paWmYTKZ+96O+//77eHt7k5WV5cjSRURE5A5Ra9UFJSUl0dTUxNq1a+0H/27atIkVK1YQHh5OfX09JpMJuLYD9fqhwMuWLVOIExERGUTUWnVBgYGBAKSnp+Pr68uSJUuwWq1UVVXh5eVFXl4enZ2dGI1GAKxWq1qoIiIig5CCnAs6cOAAjY2NNDU1sXjxYsrKyjAYDFitVj788EPc3d3Jy8vDZrNRVlYGoBAnIiIyCKm16oKOHTvG1atXefzxx0lPT2f69OmUlpbaW6glJSWsWrWKtWvXMnfuXAdXKyIiIneLgpwLeOSRR/D19cXLy8v+bM2aNQQGBmKz2cjMzCQuLo6SkhJ7mCstLeWVV15hz549jipbRERE7jIFOSc3b9489u7dy5YtW8jPzyc8PByAc+fO8eeffxIbG8v+/fvJyMggNjaWTZs22cPczp07dXeqiIjIIKYg5+R8fHwACAgI4J577mHPnj3k5uby2GOP8e6775Kamkp4eDhff/016enpJCUl8eabb/b7Hbo7VUREZHDSZgcnV1NTA0BRURHl5eXU1dURGRlJRUUFR48eZfTo0URFRdHS0kJzczMzZ87k+++/d3DVIiIiMhA0I+cCampqyM7OprCwkJCQEN577z2io6M5evQoBw4c4NixY/Z3jx07htVqVTtVRERkCNCMnIsoKyvDZrOxbt06fH19KSwsZN26dXh6etpvd/grtVNFREQGPwU5F1JeXo7NZiM/Px+LxcKGDRtuGeJERERkaFCQcwKTJ0/mt99+o62tzf7sn25iqKiowGazsWbNGnx8fCgoKBjIUkVERMSJuAUGBurIfweaPXs2eXl5XLx4kePHj1NVVcUPP/xgvyPVarXectzSpUuJj48nMTFxgCsWERERZ6Eg5wRGjRrFmDFj+OCDD+ju7uann35i5cqVXLly5V/DnIiIiAxtCnJOxM/PjwULFpCUlMSVK1d44YUX6OvrU5gTERGRW1KQc5CUlBR6e3vZtWsXcGNNnKenJzExMaxYsYKuri5SU1O1oUFERERuSefIOUB6ejrFxcX09fXZn9lsNtzd3TGbzTQ2NlJYWIifnx+LFi1yYKUiIiLizBTkBlhGRgYFBQUYDAYaGhr6fXa9fWq1WmloaODIkSPMmDEDb29vR5QqIiIiTk6t1QEUFxdHTU0NGRkZ1NXVMX78eJ555hkeeughzp49S11dHYcPH7a/P2LECPbv38/GjRspLS11YOUiIiLijDQjN0A8PDyYOHEi58+fZ+LEiYwfP54tW7bwxBNP4OXlxbPPPsvq1auZP3++/f1Lly6xfv16xo0b59jiRURExCkpyA0Qi8VCdXU1paWlJCcn89VXX1FfX89LL71Eeno6s2bNwmw2k5aWZn8f4Mcff8TLy0vtVREREbmJWqsDbMSIEaSmpjJ27Fg2btyIyWSy71idPn06tbW1PPnkk5w4ccI+Zty4cZw5c8aBVYuIiIgz0hVdA+zSpUts3bqVoKAgTCYTgP0qrsDAQL777jva29v7jVGIExERkVtRa9UBuru7+824AXh5eZGSksKZM2e4ePGigyoTERERV6IZOQfz9fUlOjqatLQ0QkJCiImJAW4cECwiIiLyTzQj52A+Pj48//zzmM1mZsyYgcViwcPDQyFORERE/ittdnACAQEB/P7779hsNjw8POw7VkVERET+jYKcE1E7VURERG6HWqtORCFOREREboeCnIiIiIiLUpATERERcVEKciIiIiIuSkFORERExEUpyImIiIi4KAU5ERERERelICciIiLiohTkRERERFyUgpyIiIiIi1KQExEREXFR/wES4Vef5hDeQgAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"execution_stats = [time_pytorch_function_forward_backward(fn, embeddings) for fn in functions.values()]\n",
|
|
"execution_means = [stat[0] for stat in execution_stats]\n",
|
|
"execution_stds = [stat[1] for stat in execution_stats]\n",
|
|
"\n",
|
|
"\n",
|
|
"plot_execution_times(functions, execution_means, execution_stds, filename=\"2_forward-and-backward.pdf\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "1gWX-Ayqia1k",
|
|
"metadata": {
|
|
"id": "1gWX-Ayqia1k"
|
|
},
|
|
"source": [
|
|
"<br>\n",
|
|
" \n",
|
|
"\n",
|
|
"\n",
|
|
"## Speed comparison (Nvidia A100 GPU) with warmup and compilation (forward and backward pass)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 42,
|
|
"id": "LQDiAPooiYAz",
|
|
"metadata": {
|
|
"id": "LQDiAPooiYAz"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import torch._dynamo\n",
|
|
"torch._dynamo.config.suppress_errors = True\n",
|
|
"\n",
|
|
"def prepare_function(fn):\n",
|
|
" fn = torch.compile(fn)\n",
|
|
" return fn"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 43,
|
|
"id": "aac06ffe",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 489
|
|
},
|
|
"id": "aac06ffe",
|
|
"outputId": "098c66b4-1201-4bdd-af23-e634f5ade806"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"execution_stats = [time_pytorch_function_forward_backward(prepare_function(fn), embeddings) for fn in functions.values()]\n",
|
|
"execution_means = [stat[0] for stat in execution_stats]\n",
|
|
"execution_stds = [stat[1] for stat in execution_stats]\n",
|
|
"\n",
|
|
"\n",
|
|
"plot_execution_times(functions, execution_means, execution_stds, filename=\"3_forward-and-backward-compiled.pdf\")"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"accelerator": "GPU",
|
|
"colab": {
|
|
"gpuType": "A100",
|
|
"provenance": []
|
|
},
|
|
"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.11.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|