# 架构

Source: [https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html](https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html)

TensorFlow Lite 框架通过对延迟、模型大小和功耗进行优化，在移动、嵌入式和边缘平台等低功耗需求的设备上运行模型。

该框架借助于 delegate 来运行模型。Delegate 是一些软件层，它们使用特定硬件上高效执行神经网络模型的库。

Figure : TensorFlow Lite Runtime 架构
            <?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export qualcomm-tensorflow-lite-sdk-architecture.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="8.88542in" height="4.63542in" viewbox="0 0 639.75 333.75" xml:space="preserve" color-interpolation-filters="sRGB" class="st10"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #f7f8fa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st2 { fill: none; stroke: #3253dc; stroke-width: 1 }
.svg-1 .st3 { fill: none; stroke: #3253dc; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st4 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st5 { font-size: 1em }
.svg-1 .st6 { marker-end: url("#mrkr5-38"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st7 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-1 .st8 { marker-end: url("#mrkr5-64"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st9 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st10 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend5">		<path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"></path>	</g>	<marker id="mrkr5-38" class="st7" v:arrowtype="5" v:arrowsize="2" v:setback="6.16" refx="-6.16" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-3.52,-3.52) "></use>	</marker>	<marker id="mrkr5-64" class="st7" v:arrowtype="5" v:arrowsize="2" v:setback="0" refx="-0" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend5" transform="scale(-3.52,-3.52) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape19-1" v:mid="19" v:groupcontext="shape" transform="translate(18.375,-18.375)">		<title></title>		<rect x="0" y="36.75" width="603" height="297" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(140,-87.478)">		<title></title>		<rect x="0" y="171.75" width="360" height="162" class="st2"></rect>	</g>	<g id="shape2-5" v:mid="2" v:groupcontext="shape" transform="translate(203,-195.478)">		<title></title>		<desc>TensorFlow Lite Runtime</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="117" cy="315.75" width="234" height="36"></v:textrect>		<rect x="0" y="297.75" width="234" height="36" class="st3"></rect>		<text x="50.31" y="319.35" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TensorFlow Lite Runtime</text>		</g>	<g id="shape3-8" v:mid="3" v:groupcontext="shape" transform="translate(243.5,-278.728)">		<title></title>		<desc>TensorFlow Lite model</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="76.5" cy="318" width="153.01" height="31.5"></v:textrect>		<rect x="0" y="302.25" width="153" height="31.5" class="st3"></rect>		<text x="15.81" y="321.6" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TensorFlow Lite 模型</text>		</g>	<g id="shape4-11" v:mid="4" v:groupcontext="shape" transform="translate(23,-195.478)">		<title></title>		<desc>Input data</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="315.75" width="81" height="36"></v:textrect>		<rect x="0" y="297.75" width="81" height="36" class="st3"></rect>		<text x="13.81" y="319.35" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>输入数据</text>		</g>	<g id="shape5-14" v:mid="5" v:groupcontext="shape" transform="translate(536,-195.478)">		<title></title>		<desc>Output result</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="315.75" width="81" height="36"></v:textrect>		<rect x="0" y="297.75" width="81" height="36" class="st3"></rect>		<text x="15.95" y="319.35" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>输出结果</text>		</g>	<g id="shape6-17" v:mid="6" v:groupcontext="shape" transform="translate(156.875,-96.478)">		<title></title>		<desc>Delegates</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="163.125" cy="296.625" width="326.26" height="74.25"></v:textrect>		<rect x="0" y="259.5" width="326.25" height="74.25" class="st3"></rect>		<text x="136.11" y="274.3" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Delegate</text>		</g>	<g id="shape7-20" v:mid="7" v:groupcontext="shape" transform="translate(167,-100.875)">		<title></title>		<desc>XNNPACK delegate for CPU</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="309.562" width="81" height="48.375"></v:textrect>		<rect x="0" y="285.375" width="81" height="48.375" class="st3"></rect>		<text x="11.49" y="298.76" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>使用CPU <tspan x="3.49" dy="1.2em" class="st5">的XNNPACK </tspan><tspan x="8.81" dy="1.2em" class="st5">delegate</tspan></text>		</g>	<g id="shape8-25" v:mid="8" v:groupcontext="shape" transform="translate(279.375,-100.875)">		<title></title>		<desc>GPU delegate</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="309.562" width="81" height="48.375"></v:textrect>		<rect x="0" y="285.375" width="81" height="48.375" class="st3"></rect>		<text x="27.5" y="305.96" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>GPU <tspan x="17.48" dy="1.2em" class="st5">delegate</tspan></text>		</g>	<g id="shape9-29" v:mid="9" v:groupcontext="shape" transform="translate(392,-100.875)">		<title></title>		<desc>QNN delegate</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="40.5" cy="309.562" width="81" height="48.375"></v:textrect>		<rect x="0" y="285.375" width="81" height="48.375" class="st3"></rect>		<text x="27.17" y="305.96" class="st4" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>QNN <tspan x="17.48" dy="1.2em" class="st5">delegate</tspan></text>		</g>	<g id="shape12-33" v:mid="12" v:groupcontext="shape" transform="translate(649.25,55.022) rotate(90)">		<title></title>		<path d="M0 333.75 L41.09 333.75" class="st6"></path>	</g>	<g id="shape13-39" v:mid="13" v:groupcontext="shape" transform="translate(550.25,138.272) rotate(90)">		<title></title>		<path d="M0 333.75 L18.59 333.75" class="st6"></path>	</g>	<g id="shape14-44" v:mid="14" v:groupcontext="shape" transform="translate(649.25,138.272) rotate(90)">		<title></title>		<path d="M0 333.75 L18.59 333.75" class="st6"></path>	</g>	<g id="shape15-49" v:mid="15" v:groupcontext="shape" transform="translate(757.25,138.272) rotate(90)">		<title></title>		<path d="M0 333.75 L18.59 333.75" class="st6"></path>	</g>	<g id="shape16-54" v:mid="16" v:groupcontext="shape" transform="translate(104,-213.478)">		<title></title>		<path d="M0 333.75 L29.84 333.75" class="st6"></path>	</g>	<g id="shape17-59" v:mid="17" v:groupcontext="shape" transform="translate(500,-211.228)">		<title></title>		<path d="M0 333.75 L31.5 333.75 L36 333.75" class="st8"></path>	</g>	<g id="shape20-65" v:mid="20" v:groupcontext="shape" transform="translate(171,-23.3126)">		<title></title>		<rect v:rectcontext="foreign" x="0" y="273.813" width="289.11" height="59.9374" class="st9"></rect>		<image x="0" y="273.813" width="289.11" height="59.9374" preserveaspectratio="none" xlink:href="data:image/png;base64,					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"></image>		<rect v:rectcontext="foreign" x="0" y="273.813" width="289.11" height="59.9374" class="st9"></rect>	</g></g>
</svg>

## TensorFlow Lite Runtime

Source: [https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html](https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html)

TensorFlow Lite 设备推理将模型加载到解析器中，解析器解析模型并使用 delegate 来运行它。

TensorFlow Lite 设备推理执行以下操作：

1. 推理将 TensorFlow Lite 模型加载到 TensorFlow Lite 解析器接口中，该接口会解析模型以识别模型中存在的神经网络算子。
2. 对解析器接口进一步配置，以使用 delegate 来运行模型。
3. 解析器根据提供的输入调用模型推理，并将模型推理的相应输出保存到为解析器接口提供的缓冲区中。

Qualcomm 支持使用 delegate 在以下加速器上执行 TensorFlow Lite 模型：

- CPU
- Adreno GPU
- Hexagon 张量处理器

下表列出了 delegate 及其加速器：

Table : 支持的 delegate 和加速器

| Delegate | 加速 |
| --- | --- |
| XNNPACK delegate | CPU |
| GPU delegate | GPU |
| Qualcomm^®^ AI Engine direct delegate (Qualcomm^®^ Neural Network (QNN) delegate) | CPU、GPU 和 Hexagon Tensor 处理器 |

## TensorFlow Lite 的 Delegate

Source: [https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html](https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html)

Delegate 帮助您将 TensorFlow Lite 图处理分配到 CPU、GPU 和 Hexagon Tensor Processor 硬件加速器。

目前支持以下 delegate。

### 使用 CPU 的 XNNPACK delegate

Source: [https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html](https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html)

XNNPACK delegate 使用 XNNPACK 库来高效地加速 CPU 上的 TensorFlow Lite 模型。

XNNPACK 是 Google 的开源库，它的作用如下：

- 提供可在 Arm CPU 上运行且优化的神经网络算子
- 使用 low-level CPU 指令（如 Arm^®^ Neon™ 指令集）来优化算子，以实现高效执行

XNNPACK delegate 可以运行 32 位浮点和 INT8 格式的模型。有关详细信息，参见 [TensorFlow Lite 的 XNNPACK 后端](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/xnnpack/README.md)。

### GPU delegate

Source: [https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html](https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html)

GPU 开源 Delegate 为包括 Adreno GPU 在内的各种特定厂商的 GPU 提供加速。

TensorFlow Lite 可以使用 GPU delegate 来提高 GPU 的并行处理能力，从而加快推理速度。GPU Delegate 使用 OpenCL 内核在 GPU 的 TensorFlow Lite 模型执行图中运行神经网络。

GPU delegate 默认与 TensorFlow Lite 库一起交叉编译，并针对在 Adreno GPU 上运行以下 TensorFlow Lite 模型进行了优化：

- 16 位浮点
- 32 位浮点

有关详细信息，参见 [TensorFlow Lite 的 GPU delegate](https://www.tensorflow.org/lite/performance/gpu)。

### QNN delegate

Source: [https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html](https://docs.qualcomm.com/doc/80-70015-54SC/topic/arch.html)

QNN delegate 是针对特定厂商硬件加速的专有 delegate，用于加速 TensorFlow Lite 模型。QNN delegate 是基于 TensorFlow Lite [的外部 delegate 接口](https://ai.google.dev/edge/litert/performance/implementing_delegate#option_2_leverage_external_delegate) 设计的。

可以使用 QNN delegate 将部分或整个 TensorFlow Lite 模型分配到专用的 Qualcomm 硬件，例如 Adreno GPU 和 Hexagon Tensor Processor。

QNN delegate 通过减少 CPU 工作负载来提高模型执行性能和电源效率。QNN delegate 还使用现有的 Qualcomm AI Engine Direct API 和可用的后端来加速模型。更多信息，参见 [Qualcomm AI Engine Direct](bundle/publicresource/topics/80-63442-50)。

QNN delegate 在可用的硬件上以 32 位浮点精度和 INT8 精度执行模型。

可使用以下接口编译应用程序：

- Qualcomm AI Engine direct delegate 接口
- TensorFlow Lite 外部 delegate 接口

使用独立的 TensorFlow Lite 应用程序时，可访问这两种接口。但如果使用 IM SDK 部署 TensorFlow Lite 模型，适用于 Qualcomm TensorFlow Lite Runtime 的 qtimltflite GStreamer 插件将使用 TensorFlow Lite 外部 delegate 接口。有关详细信息，参见 [利用外部 delegate](https://www.tensorflow.org/lite/performance/implementing_delegate#option_2_leverage_external_delegate)。

下图显示了 Qualcomm AI Engine direct SDK 中的 QNN delegate 库的目录结构：

Figure : QNN delegate 库目录结构
            ![](data:image/png;base64,UklGRtRcAABXRUJQVlA4WAoAAAAQAAAA5AEACAMAQUxQSD4AAAABF9D/iAgoaiMFAjziX9H1a0T/JyDmTv7jP/7jP/7jP/7jP/7jP/7jP/7jP/7jP/7jP/7jP/7jv2fjv567AFZQOCBwXAAAsMUBnQEq5QEJAz8BeLNUKyclJCdz6nFgIAljbvw8nDNTYBXd+r9cHde9v/9/v/SNz//+5n5zf/+nP//9P/bXfS/0Jf/t/////+G7+x+p3/J/TS9br/cetR5gH//4ELyZ/h/6z9f/2L+O/rv+C/vH5B/vz7W/j30r+p/vH7v/4325ck/p397+0Xqj/KPu7/F/uH7/eyH++/wv+K8sfjP/n/4f2CPzH+g/9D+7/v/6LOyk1P/l+gL67/aPID+T/+P+l9Uf1X/N+wD/RuGnoGeSv/k/t56pfzf/i/t18Cv9G/x5P7BKMqxHiyBUAuMJuLzuPNcnMhEAhZv/WfjIa2fS9yqsTis5eHDN4KKo+B0tHq0TuSotXsEILVcnSw3YLMvilPAHPkNmbb1D0HvdSV8+HG0ezqwIu0h4aGQGC8CbF4g8fHSSjOBMDFmYQ8r+i0BU1jKzrMHd03ghYCyAX9wmZdcvPTi2v8PMi0E56c9OenPTnqRzpWXMsSM2y0tPzCfs7dtRg7D0weVKFTNP+AwgYQMIINALax/S2oRkRLJWSxDc2or/mJM5fsIKzr36tJPE/qS47UWVIEbFPWjbI9rdsscijzh0Q8UCvr5VOnYuWeaoWKdWj0Wh+CLjzM0mAan6whknlEiyWkHY4ZWmTnpz1I5Jn/9cu7Ynl9CgZOCJlf+8h/B7voOgvrRJJ/3vgdGieStCb0zJ7w8NCmMt/Nkg6DTpIdGmrTVpq1J1/BKieLGUFaHpAHB1NLo9xo4vkRMcr79WepmDRspDqReBCpB9qIk9GO1PUBEG96+lHZFwqQYQMIGEEGgFtafInjmS1h2JWCYzVO51aOhNKXQM/ha68PbCPTbwwVpULG1xBBH8SbKlfErTEYSSEQTkbvZ6fv9EOQx2IlxsI4XZ0CiW99O6kAQarNgDGswPp0Aqidq3hWmTlSWKE+BottNWmrtAdfSrDQz8kABsZCymJzD04AQ7O0+oLDycqSGoxuzzbBrCEvZp8s1M88d0k1M5zfgMIIMvYIXhoRspBavnv10NEUgrMgtV9JWMRtJT9XEwTItAk9zrQmTnmHRfpPt38gEsDbxhgXBrg1wbENP9ke8dqfBKaXHKgxEe1fCZsDGeHO3FRdJUIVIyuMOs15mMkU37k6SHKRPijuTm6ypVe0RNa2azGZbbBNU6YvT0h4IARP2BaDWWRy/hd9nDspylP9qO4/x9BIspjgNnycdnCmTqmrhnKc5F6uZ2Q2jyWaQ8lOUPcefVc1EcIDdsAiNoZyRWRXSnnGXc/vYYrZ4QMIws6wpaUhkTMKlWnKx30Lxb9170fY2Ym3UcUKORf2xbjdn1UShylNbWlgPwAUs1mg0Abq6o/0Pp4/bPCBhAwjC53tBQ5+HRHuWlYTCkIxv5wxitIuPakmbdCCU2PmsunHAqod2foURRr8CqT8GnXrB8xFce97Q1by6NSqpqUeLwtMQShT9drEjwM+/ukOHg5zulBrXwGqB+WSbz3s1hqGlfVvq37n/ARNT3wPKIFEgEore7ba7fIuAponLhzbZi0EJEyEBDyxY7seH6Gq5jn+aSfmXT9lCZz3edETMOWrTVps20ic9dwKlm+oDnGcs2VqWGT+pUxa/8DIRDfYJcZeT7X/8sgq7dUeffFk8mrQRaiPQGeKgqIRe5d4GMTbbz/Vx6XVthfomrTVps26OXN2KSDHTwxVyoEyJwa+OP7sVXG0fAYScMzCBhAwgYrEa6z9K+EnHPe5th+wOil0AE/Pj5snPTnpz056c9Oqb1dDsUkUV//9rD9BnGwZ+1+WtOVpat4vWjiD5CHNa/UGtUjXVWPkDK0yc9OenPTnqR0DNcODxEO4Qj19awCsxXRz3Enf89/7kXQogZ3LHb6t9W+rfVvq31vT8Clr+VWFtZi1OH4Urr6/Cz6ZCIIS7Gw4Uyc9OenPTnpz5qgThBokvu7qKXFJ5WhKDqmaOW1b76AFV0tceIbENiGxDYhsU02gGxK90gyN5Okr9l/0gTh9VbTW9Y91dQdUvZqoZNaWZ+1ekB8DkHyg4f9VwRdhGgRC3wkYW+XxlFxWmTnp1TdWETRAUlUSxagpAcCqu2jlkYd5APtf8wHgbdPaD8Ave/3og+mGRDSc7HPVkZzDtTWWvFM6GhRkgXQxLq31vWdyBcGs8lfanhVaoBMkL/TOvQ9vl3xAecAAvuX+jd0NubGDl5yaRBe2icoywYCHAAEKugsYp5HfjDlOTQ2gx9Nm+OmzL7sh2Hs7ftMBmyonvntN5Qzo737H/B5iRhRmKftIsZpGBvS0inSnPmmgWl9o4KAde2/CtlLshLinbMfXGlvSOQrbvSosl+AxWJcaYZStlQsourQZGNR0FdAh4mJTVpq1A0nN+AwggywJUtv154mFGGoY4tss/uunLg+GsaordIv2byZ+isrRRpyhP+8V7l/iWWW0LyciZVW4gMNwBcrCbx9QN9g+MJrlXEXydFB6XzTvG/AYQMIGKxONNadXRY0/UAvuiUNzqPUl/+Ge8zuZdr6OiTRcC5F2pcgIoOQIhKu9nkf1Uw3RoNeLhZEwUbFg9QCf+1zywkuEppk6puqevblSnBY33wtLKChfwg5gCszDehXTBxyg3x67QTRvz7LFlouSistJqTZTvEpTEwh6j+3yyKo8PgburHLJFS2hOpZ5IMwPZ1lwrM2R1NiZRzdrzaOQXxEuxKnGd7iVeS1tuqaW7uJ4p6LhOdlVnarIY546MsuPiwtSvg9RjU2bM9KhzOyUNCKPObHFt3auucRYOqmu3SI1zjLTflH1OXQt+EmPv9E/FlWBCOvo8LAhD+ItBOqbt4Pa4+o2VLqcOfCveTkIzIZbyHsHUF01Ioxyi3TFRpxpG4+pfh4pXtxnHbMxogmaJC/XybfHYtvoTB1s9BPVey8zFQtcE0w2LOSmrtCX8NlVWWYrtcTkcQqubgVqaYqVG09zm34h74A+Jv3wgR2zo0YDkGBqyQ7Hp5cPfjjZWvnQ8Vnb09HB+WSD8mwzAQZwOKTphHSKGQBQT2glwiV0gqoK1MmwMsORNLfN3H7Ac8zIArPWNbc9/zlskT+wLD5mEfYahaglXqbkH/FeEATw+2ENkvV9TwUsoB6L1oI6mLl6ZEVSOXGSh9tdWs8QV2wA/wrzPln0cXt6vF07i2xn0c2dwK5WVFKKCfP+qL4ZOZhGFosYfMeb6WZwA7gioWsRuXRn+fChGsPUrE0lymYofQOpglzLp9ynkeQGQdc/B6w9YEdrhQQe++ByB1USH4l4FtrBGjxDLpACLaiWMAYUgnejIKbMIIMuDAK6iwWZZbCDevr9+p4mMTHsIwOsncFFOzHnftwF/x/JAEaF++GMFQHwz+v6/wvd1h+ro+fqId09N+KJuRjHTVHkzbw4q7lTICaQQNLdG7IBcbh9tnHxN/IF84fQ8oHygBi0FJZCRte+BlhyAWL+gbFY2NlR5u/GJDt3fICuKmitHHDEjqG+RpwnS+plRLUTGscUNd8rOHCgPYGZuvM0k+/xSi7bF6QkpKvazbfKx+lYYQWwYM2HiG2FgagAy0KCSj6csnZFigspGkdpgd3XlJi2iNgcD0BTYHRsCcmDPGJlXE2Ctk31AemHiuKSwITo8plqk4hsRC19Hqm1zCRgaBz87nY3nSQ71oBUMc784Mq3AIXWxjSIPZpjBSJZsOz6zjAMVxMXTiyclpP99k1bhE6jtGbm3wwdPeiXXGSFcabTl+AbVhqW3izCzDZ/ZRTmrz2jz3UpTnzTSLaTq3Ms+tz5sOkkKehDV0qTIT6MERpVgwaykfk+CL2g+27lOHIjBis8Iws7puMThytp+YXZ4RAEBTbResbCI0ZWXSJuGa9CQZYQI9IkVv3nmEDCMMrqNLdz3mGO8ogkbbEAdOydo5e/1KGW2BSyC/Wst7dn5z+rBmZqT5YajmQe4OXVD9P+TvswchrbrVr3QStq19KegGqfbg0o7L9SZOenPTqmv0VleDGBi3uDq4zW/R+GskUTaubpeknCBtXbypCLDMI9pk2oqF8UACy3mrURnwoU9W+rfW9Pq4KJkhpJ1WugwDf+TVVoCnajjh7vwE01FNS4s59NK8LHEnBBNxeEbAr0vqowjzfqGslNt105frk6Qscm4qarSBpz06pssxc2ePpJMu9bLEYwyqrlLetCtIu9aYJA+bM9fwLPtOzhKCd8zMEBSjlHOpZ38x5CET1SdA+909YGu+M2KDVna9zUfiA7mXLENk/ux53hnErBCHqmaFSwwQxZT6sXnG75DSXj7dg0GR9WeuHuhhRwwu9XTYEt2j3RPJdvKFXzUvq8Lp3CLYG99VaM4FKVxwfSTmYrFMTJDV/nQjHHqUBJQiPgn0ZM7/VyBL8Rfif54E939WtpPrK4VBoro4ogS8HvZKpZCB0Zbl1O6P66Tz1viv0mKbV90/TrlWPNbXP3LzVGmtOfIjB9p7LR7MWAgyxp+tSiTMwjC058X/PcHoJBTzxPT86pM/aA0fbGIYoqHYBPeY172m/uVIg0ohBEKH62LxvB1RHKbHqiHHG1hwvTf71dhlHnKVrsDZYcQM7GDfeBkQ/ov6hQ/OcHmRdo6uaYlcbZig1QbZhBBlicWRmjT+q4pElJDSVD9zBJ52vrdanqX+rx50MoahRYvCIdnb6fcXAhCuAU3uvOpNIvjd2zzLfviikX+K+fIGVTkIa19gZ8Wgn7Db1j13D/D/Zdcib5bqdYRlP5rGYhuigi6mcOzR8d72NaYeNzLBDWqY7gW7V7yLNaFg5x26GsRrEULFl5mrnnF24xUF0hVUnRVYAqW3un2WtbPBJl884jJPeYDEW9CZ2LortONj5mAA/v12abXgOTpY1Bu5AlOuKaMF1oX2onvK1e33jEV4EpZ/iQwJBSetHmz2jdPn3Hyr3SL31Kwi8VHpPyqwT3fTGF4giZdGT8NlvOLGfKo1BJ4r+eUkcN7mGLE9dE+BsVaKRbwOphml0rhuoKp195XL0ol/fhk3Qbqe1yt+xUUu0ONnfySFEqJLSFW1o+fZub2Kil2ibHm6vGO57Y7scWJ4GShdsMlsTT4f9KPX5+TtGwzRUfqUUWLzmmRN8MJBXwYyJerAGtwBp6c7iYeJrKbjZFncleed3Sl6EgLIKJXtjTgtSUi7evcFVEjU23w+leOIfhiEZ9xC9A2u+FVLXhe12W7I2qw6a7jf3NvSz+CirgYfEl6UosGuONH5yerMIeZ7pdHZTUq7cGP7mrLpt5AUevv/LrTyt8YEKNMyMsNIKHlmL+dhJDMFVWMRCBgaDRUiGW3eBClNeH+TaJIFYlYSgaTYW199RTmIdvCGgH5vVdOUd7n6vlWUHenqRPpU7tNMfh+Qd+aFQXYztQe4v8/gzEuegI3eoIH24S98cKBU8JY1f5s3ZBq6juj5CfoS39qdQ6+L2d4Wa05qq7EF3h+7CMOTAL6jMlsugNRa3AvNPu5QZUKflrCt4oH0cFjwkWFh5zvYqz2lMiGaHIJDHvjwuyvujw0jt4wGjUztagW8uMywyYShpryZdgpa7zaqYTHtmI9V1HKza1q9i9IyVHutV/iCp1JmthBM1IriA2Qkg+tA4X8RUCMajkbbiAzZEsAAAAJfogf6KVen4Q8l41Pe86Pfo6vroCqVddUVwg0lMpNvOqAb0C1manBQX+MpS/7ATig4zp202GFeEpYcZCCkYV/HWNpK/Eb8HwNb3Y1W1PJfHjRwOcoHivcNdnb8VizJOFbKMJp72Zn/UHF13nn7Elbn/n3nKyw0AAcXO4/rTu3k3HF7dNGGVCIUwQ6eIQg1XLwLp3wxfTS0rtZsrxOBt25srorrbebaYvlPjuWu25eAQS80Yt53FFNoITE6equFOBbxVTFKH4EgNrzQaqoCl8xNK7yn5ysgYN8fb8XCwAAzhT3vD2VFyg6z9MihWfO8AGl/B0Nv8fhzVZobZZuFJr2oye8U2zZOgkTrIMu99HS1CflqkY9StAULUK5DQLGRJnGn7GzDakGvyNtBrEa2Da4MxOpzcrpTXNkENgX+MuZEg7m88ofWE7vdoTlkxuXY9P35nk9wtM8Xz0rwpnIFb63kS19MhBVgTJRygngNfxxmzCXFHVE2Zkga2TbdE3+B7myMyn8/oVcSL/+n3JY/oUy2UTlnNRE9Cd1DmpybupxEzhv93AORd7ZSpgeahF8gqvdOoJOMKJZmiHvlSomTTG+uM4y5AISyJWzzFo5u6nlq9Dhk+5Wn+bWtFZwjwIL25E3k/XteO2iJJ5uV9SnU/1e6vadzPyW5hlhmhg15epcVpxhWN8zSoiM4vGQSmEun0XGwoh2qbqiIB15P2YIVhl/NuD47Y9/Cka0SZu/aT2VV2Yq3l9g9GVqqmW0Y7acea0LpLDa5iRgQdjQPqdR7fTIRViSDoFpI7amEs9D1RjV/w/tO5gHiSoBrk1IZnTKN9p5UDT+Hl+YLy4Pl/BwDzzBR98t9yopnfx9H+bg1qkiLa8AwvOaByoGPSxvN9U82RbnHfnL5DGysyo773EP47KSRWC+eonAzpk2SPvYz34DKtELDuArQm5lmtvSH9U1loqjziNiSyshhUdVRBkk4vOHRnJywADiUCANSyV3dAoVcu+73XAfph7mQ0EQiSFbic//+Tu/P96vQTP22T9dbioch2tfzBXDCSrnbf2ZAmzeqMgCn5mQ3vlbTaNQYRTH9IbeJyWArMW4cDGXo1zmUQQQjCPzoap9cmcw3cpS/sKODo0Vv5s89NJ50p9BHrdzbyZoLTDxK5DLcuu0EMUE1Ouu8dF0LQn18PbSxlKT1kIIYaptt47C5WScDA/nHlsdwJFA9LzXvxRzeCttSdNmtpXkTE5p5lXkx8GC3kbnPdYqiNh8IyIlf2JOiuoQlzWsoL5R3U10mUgq3qAra4dhl2/AzHf0GLIn26yHnqJWhR6IVlF63ndMu//43M+VJ0LtuPzId/25ltTIsapnEtqP7t73VLIqSPCznJ1rYyJZE5cFC+zmxDrLZb65YLOmRRNBIZmzYE9nMADvIp0XtYmm8jwLmnhTLGScRpzW7QNNqT01DsCYdV2GAIb3cKXiEutYaQLErPpd9DHOQa1tHKpRsUS7vTrFKk90aZwYEQmQYoi9vmoliokn1E4lsmie9XxGAKiVc/imqitL8SPGyQi7vWrP0OLEF838beLzFq/eIdDNa8f9AStWwUW/WSPXIGSP8aZa6Cb6Zlb+DJ5R5LI2v4XlQmfCBXNMO2tXAS+fu/YvljqNqJV29jrGFrdfQyGvCU6juIcKiIGmOZiSoXX4ebwXWyeypraVuc2BF/EE2gFC+jRgWF0QP6aGsFkmCQ8gQe7Jj+dob5o7Pj5G/X1HQSzeWt2rFBx9sJOl/6ta4g2viABpXS8SkRsZq3FdQeONYjxqG4QF5ISKsWYd28ECdtB1raVFf8vR4YOtxnzinTULrVWuA2I44/fWulhWyn36iN4XzP+1J77H2DsJVIH48IA8eD380yTyXZSbl8iep6+PY2eRUdQ2nRvAzLOVyu7BeZNhXHImGp+S5CvR5Z6aB7ZadwSBAUjxu/bEYcw6DY5Nv55TfrNnYaSPSzVXgBdQ38vjufiQ7dTu7X9AnvP5WIfpqhLXxIpFvp8zDIxchfeqQRIqzonlK/OIZOQILe/j/LTPme9jbmtyO4DCgjiLvkwH5sHW6ONkBX7dfpqa2+7pfXQJRgvBX/ecDLAbO2wEprcu5KWAbjIUrDaHm3sRSrHW5mC/Vj6kYW6M0rq6beSsLuTedJtGot2SPX936PkWLXtR88Aa29aurhdGs9/w/nL6/L7dytBuqP7HsRyk/NoC5Aay96WT383pQiZG3safCJmfI6DPNHyhM3nXmVUpikonMXbpHIFRWMMlmAmpaKOlG/FT4qN6cwzMGEflEybXseUFOAQMnEn7huFhuCPYhu8uxkK00Z90HQV/gGbHmCJah05wP414kbMYZABbCUo1gjs5NYiPOHtBWuAEf2WMfoC5FXWzHyZIxqFVMmvNCJTvUIlSPtlO2QYARR+cuZ2HordSBX4JQY5L3v75qUzbwchGDGnJtyWt4WjWdOBEc55yucSnc9UhfByY3T9xlsZ0pd6hOSNsmOPUZEUR29OMZDwh8T0+3VyBv43mEXo1QnSOqImRZKPtLQVcgcrPuRUeQ1C2dtBjzGTPKsPyUiyABJLgttcBrIXSkVqyiAv+mS4a2T0841VT1YkQFfZnrqiQanQ6JhIQMBI/YZnHZFtIQCQd7MJ90zTWPNtw9CVEJHlunGjQkm9POp9LznHrIuS73WlzP9/CkdXHRjT8b1ckuXc1Nwue9B0jgp8XyrPa1L7EslHeFy/4r3j8hgeLFVFwKNTRX1fE+ENWrUsd7fKszoY3NJAdei2JMy1y935na3CQlAbwUOGLYIAv1ebIFc+sp/jpZ/Hdr30LS2rJ8VkhPgTanBiZJK8RXkuqnhu/OCxxJRO7uZKczwiAcyKBC/OIUaTwaBeRlxANHP/hXz2mS2jpsgED5ioG1/lg4o6it6aWDptJql7bA1yDPXQbq0LFZj4D2zPldg/ISXvu35q7Dr9LZJLTpARYpIRFpfvg1LXNVK2RhhtBSgOcuTVlpmz6vnNzDmJCSRRHiQ5KqtoE7mffTI/6iX2+dC/83zaOmyHnS82Bb1E+C/lIGhClcrBqL/ASVseuy+YdCOj5PiBnHE6oRk2ojydhADHlg5ffv4LEHKNzoZ0tVRWmyjTYwPxwiKbUr/r/mrcYdzFinFeiaPjMK1jGNrxGOS/5QxAr0g8GZAjWRNXEhQABBnlAAFrD4ImO0F6fuRz38/YdwbW0Yyrz/HzAufgiSKvpJilYkxP0VADgn4kH1gme/rfbuKB/0ud4JkM6ZR/hzNpq4EKwPkMBdiMqTe3bowvjgNPOBKUbP3m9P5EoFukGDS2B7klkpROclbjBo/Qh+NYAs9O18YxZTOzcCfP0OaMsx85YiBh0ogqabLKv1AAbaPqAS57IOW/rwM6beHeRQdUgomKZXmlhb4PZcfPu2dBI4j2Au0Uq4mlqkI/VisorNEDcCLqvM5jiyCh7Eh/l2IaBXpcqnFARH9JN1xDeskmgfAJY/DsxocpKZkWuklJXDgIhXJorCYrKs1N2HKgNhDQAdcbhhPmvxWNfdWd6inGE8f4cezgCGeVvxilBfUe/M3WIBgpGN7hVTgNEKVSBZFrlIzR71ChKIPsIaXiPgBeKAZaNsYbT4E9mNCE769UKnRDpb1LGzWEdDLuzhKJDCSvPTm9is9wQr3a65UYX3aQ9Op4doMUcr4H1F0dJ7z7i7zs3wTQu4j09slURIdvlyRVfR4QD0kZeW3QN+5pCdIfBe9HfNgc9Aqjd+E82rfQUAI7u2Jx8cbWrtTC312kCAf1XplrHQTfuiZVm8Dz0a9WVJNxhBbmFks153z1zb8ugHThXp916g7i3nET9ATrAWjyXmRTHYXbdQ+sRsX2TIyVIxshWYuDtIwBurils+9RlwfnemMRQgD9GpJdr7nLWN1pchfPiCyLHtMaRoT5lf01mIrdXGbdDSQdDsGFL+XodzvVo13PvHzLC7RkWGboG5w7UZ2RGDAEGmvln4PAYC0O/4aZNOlcGxgxPG3GqMESrtIxWi1lj/Kbm48BegxDEOWWaf0SJfVwkkV2PubMlrjiO0DzCXSz/2gpfB6a8FEPek0/C2tMX73kItnhytabJFYf1xRshlMx90Bch8ynVf2IhfY1jFhZBX9QD3MNbuiCXulan3mAcMpxTDCVRR5SO7kbZ4jeFvrHiFfF/NCNP8PmJhurhMdc+Zg2GEF41HONZI9QxoJ6UrjpKrPxIdQvgt89uLgeC62uh5df30HgqPowzD24+RTmsWZs3/fvvQQbsqLj4pOmZADx+gFPvJ4LrbCAd6hhrbppMTiK7C56N3hSBHho33t+vWfS6KFxndzEgPil1r1BJLgdmlCP/Tp8HwE6C5X44T3I9vCE8Ri6xmkt2X/k4D3SMHSMi6SDnkluUqKjTWOA+1zmreY5QJksgJtAsXdxmoyPLr63Z9zBaRj0ax9R7QOxSKkUvYV4TdVDRtIEuj4Xbu/oktLsVWYfr5ao2Xco9wDsjj+AFEggXFJUkR+zv90xrY68ZO7YnpWfdRsIHmIPg2Zl/+hNq1wX9Qf+uf3bFWUY73WcXNKaD9H3j3zPLTA9TK3MTYRSKEgPvns8Z1Aiiw3CtGJztVkOe9ycTMBbqxasozgnkwyl3b0VNYNMYXieBsh8qfTaNhag4YFm5YS1EoM+ot/anSohdOaKHGAEg9gb/cgmeGjZhWzsrVOS7ulAnC4SYSnb+V4ZU1RE4iX9eLqEg5cy2KxSn3iGf1QNXRcR3ov0XyNGILNAh4Z1jYbniWOJF9JMyHzY2gkf+oWcdz5tX45MoUXWYzAEHoe4Tm/Wgv0Z/+uxmvecr/y8ZtyRKCBuQ5GdgI9u2FeEgiNCacVdl8gwTTIcD7fPkDyqLRDfKOlCkSMRczNeqGRwFlJPzciYW7ZKHLLTegbzdhCucIQewAAGz8rip3pSEe1RTuC8av2ndhC+YZLGlc9YBlO1aWSB1S4cLQLG18qmdEQXR0RrYCsZxzuEh7YJ4yn9ApbPpw9x0cEBzn6lbzkhOB/F9PrINIfultHxw7N5BaATScmxUmiGSynJgfxA9TyizMP/17gWHkBRTBzVR9Vqufze93GcfsHsnJazrIPYKESjuXgZP4yrMwiUFm4zWec2zipaXhezJMmC9uuGtlUzerziBaioMQWc2IeZtWlLwjW6RwB1kKuHC7sMZBcsSbUnIozSYYgKmaD9P1kYZhrnSYgJht4LIqPK7sdLvkpzpeOHp/vooegRTEwzKUyeu6t39LAT+yKzAVe0oW50oMHZc1ZhtAIUjq9PbnazG7+4GHsBeRHEDqYcLNBgaA9uz73FaAC5Q5yuA5qBijybg0qmYKwrdBMunXMkQAPjyNsk+xMMGiGvst3BaKgdQC+VDT3WomNNaI060mLNKkV7MHTmmdrvS1GPB5RmIWxARfFU0bUlae9+a1OG5cZQghv9HcLxnLFKrpEIUmZJlmxRGWs6JAaHmZtGDGes/RySQcOeOAoHZHLNgK+dI7V0atEeEA9BVmTVB6P1MrLBV9BkvCVUpNjjcPl2mC36xc474ymKR77cI6YEk2LZQqRR+7af/AsyV8EoKxdLiIA3Ly51rm7Syco4fBYJqas2CYT4F4DojDcrLD98C+Oio8540HmCsurjPCcL1beXVqfdd5UuLgfIm25nO8aBqbUHikrriHCvPOuiAJYWBCSygOcK1ek+JIcLEJ4irC2n1RWtMHVhvcHV2TvecrcmlmeEOkTSERhlkm/K/dJgAWtHDF58mKSOytROU5T1s378uI73K0cC+enryM5BxW+oUucOto62udrNXfiaPJhLAe+qU3yHFz6I5/OrsAjmJo3Gop2SjyrSgmiw3fRFcBBYMj9fd2FIhaJyxZI9xGM5kc5OAYfHlpNnCJ4UmQ/CQOM9V9baIJs5vVuqMq/KthVIUId8njKyZuLem42U7649GvOZCuNeNEoEtzHqHq4GdT/dUvIFVWjtBtKvI3vXgwionhOfKRgRbsTKspUmDsfZbSt0diqWwMX5O7m1r6bU00PDb4CM/YPOtOpCAN91Hn7qqXfPndAAVIAjtY5OCicorj2TWmdUJdGlbktLj91jLlo3/5KZQd5plSGkvmYuXCyInDAB83fwJkAVuEFsSRoeLlGbnQfrd3ZVjA8ULZEIr7c591p5OaM/eZ5JtLDUXOSER89C1MnLTFOYeLyYS736qD3EjdSNsBCcDQTkANHF8seI656cWWQDMT7r4o+wPxtYkPfDvM1vm7EGgj0guVjwgtoXaEhTYxp652a4+z0uyJKiUEqQHNexNRpp8W6ai5PXafkYQCAR5FrhD1c641iMhM36GPw3HdUrHWnuRN2tz7H69SCJRReJrwqD1lfRATfsmQfCAB70n0rCO/5vO2JJfmpckkHvWsqAzrx3L4tZlYnx7Cwkg/doOAxpgOtw4d5tVe1g1zjZbozIp1CCBVjI0HN0x9A8vm1Cx/F5zyl3Ms6ISJ4AE3wzLtR/IKRn7YxBJrwpFZ5Imh6Wjvp87i77cclPoIZ6xXdQIb1hor40mX+kpDD6luEfFDatVuyPabo31ywFJe6CFzU6wOjZBg6d1l+lSShGCkeQ3Fin8f1zko+OB+ZdWtcTHOf+YvGKEPUmuuZ3b52abEA2E6i07yKwtXVdZi7mQy3cJzf69XJrIXXWCVBxpMzTPOZWsWTumiXGneCvJrB9JZjKe7OCGgYGwYEOyZhVwKBungiiKkmEWsJPx5CBlF3j38hiSZsHzw4rOQl/9lm3/XMtfu4LUFW6m3PQWDh9nEYoBdkNBtR1CC6i0iEhMamfpTdMTeyTbNUMgcuHhSrpB4yPZOxnd02g3kd5kGyjCzW/8DKF2WefRLPLgZ/wwjvQjmeTyqz23oq+UrYZBFlgXfJu7WPnGCZ0hYV21dmiIVrrLlMydGGbJOj82BWl5kSAAPGqBusydpqJUzNIXQMPlFUStT51Z0IUbXaPpWlzyeyQyNZdQRDN4/EHnXoxXK5Y7LKw3BBxAwWEDHX/eY8jtBS8so+qNveYr4Ou5PDDhbzuNhFA039EaCxqfFdQoYxHAdvWt1oQU2r90i6CoYv7X7Czbc1eX5T4I0WsGZ6TYoaKlJCoV4s1ba4AusF0C8O53akuNmgN8va8PjHzG6Kt7WM7Q1VDhy/ii3wGqIprUtf6oAAAexzWTx9yK2BtV9DSL5r6lk5nC/hhgsyExrviTe8AvR0eHKTddX2IAuTGm9g0gDIQZ/qYXFwJx10cAOCyZJVrIj/BVezkAABgJ//p66o9dCVx+vEuTyaw08eO3/BUYjpElzM/UW0fznt/C7n3LHAIbW57ifr8McA5RUSkP0UO9NCM4YAHHzvx3a+HrNnAEOMtb+O7CXsN8Q6ghbyUrwZjDckVfIC1JPsRofZHJQMaZ8RZdnp6m7Ahy/k+5E35Ebw69epW3dCprfB/dYN0C6io+kMEeBW62wLttJ4e+AQlY/6iAXpP/LbhmIEM7cYslAff/nIQSmU0DZxqQmZn0XPYDw3gi/L4O1uxDLH2bu02VtagVjgDdlTSSro0qzGSGZVYaMv+OpFSDsjH481AYzQcYQgmE3g3uD77KzhtMHLTR2Q0qvRl9ISx5MJaNQ9/LNVMsxMq3lewm2RNzaucrZ3R0NrepXQmyKKyOJzrDkNYNjjF3daXxIgaZl4dPw+W+/hy3Krhu6FhAAApxPbhnDUf8uXSsINyKRETl4oKzkKRGhPXoUawzgcQqpVhuOo5Or6lXA+qOkhZSHrN3ll8D1TAFDJmSv1exf/MI/ySr3SJGKd2lexZRqNqzuWyjZ7wz4IJU2w7G7JydJKUd/3p9hVrYSG6P1ABiUVp4iG51++tIjgMkfpLBffS6pJULRh5nQunwsNukrp3jGyaluR9WCNf1ypWH11WHWvKbgdqcQFd7twAAWoMZQu7AvOyb936TjAKNvY07ibXfVuLC+ldi2E2UAAAIwUF7AE7lX9727CbrL6pg1oZjLm97MY7xRAj9feLPhrQo3LIkJYIvo2gjXaTSVcVJmgVoE4oBZV4V8tQibCHtV7X06USGu0g26rh25IjVrMjDNLuW2I+T/uGdJoqHtHhvP18hAFXyJgGT+7WjfJPfAcmzTh+DoLGWUPjDFWb8F7GKH4EKtrS0yD+QS/vUE0UVM/qIQAADSumB86o8M5xuxpwR7K0hHxx1Wb4adK6RoAz1nxbwlqTa9KQ+QGhL70VSKUk6yUEAOWUflOwhLtActqTWHdpK8zeAtUdX29A6icJTuJ1OPsr3CsJgvUqnblKeCbXHrQ74bEW+EKlDNOA83A4SLaon1MvCQHNQrqtm4V/cM6lR/yQVsOxa1S9UyAAAAV171a97lzrv3viCWVb/FINLa4ogKZL0Bgqy8IUMkFJ1xSAEFT9kdLPdikI5+/NWsllQUuXwPAHdKEQkkZyz1qZ5gwc02hzEdQTUy17g+UO8akI9Jn/NQNh3+rS+/BlFMKDk5rpBQ/K3NoGe+Juj66DRdu7HEj1CYkh/UQtTiL5Aze5GN47Tg2umyKLOstib5IZ9Z2bSWkMtXz4b93/b/ClgBWMciIk1OeBgqfJNRWpUmrsAMhWTQCGJHsLlwm/JvigqV176WnWpiufR1O4v026tH1facWiSgOhmyjChBGSv+14r2Q7F51d0sDf/xyd4lcHvk15SrYFqImnEdcSOTdy+CTlcq8Gu2dBFtfNeEawRb7dknnWcX6yrAwaN/TNZg6Rkk9z0RSrFD5FcYZ/zRQwT1183TmIHGyDcxHYHvpv2M1JWTBoLZSG220oetBlJtFy4aW3Dh5VN/ypo2G0BWQhIW9J4Qscae90nFxIiqGk0Pr2DZdzx7zCZIifb8VYIubJOHa6ISbr46EGAY/J1NPdgAF0cnK7vSUPO16sqz+aXXgH78FhwqWrCrx4CibUGiSuGvPqyFs8Q+dnJQ7wTQzoYODhs8Y0AVOA7zPRHxv/pt49UgST7/15wFrXAE2KZ2OqTSRYsjdDuUCA2xgrkOVOu2FbPpRsb7B6bA4YSVgEHuSFoTfhf6aXrahwJjBa4yeJSBIwhgfAl0NKovyrU9msKwR1WkN40EQXWNulpleNMRbPNurYUv0ii2Yyg5HrsSMIHhTLrNWyb0A8TLyT78j25rqlQA5DytBxYwaKBGQgVb3dZhmmqpiSLqUVdEZPH41UagmHEc7Mg7/FHWgEkeXM3DX1B1Drrwh0lEubSgBpovnqIKfpKcyM0HRjkFGYP1XO8c4GRQGEWfcDggTvB0UJ7MJmL5AaFukT5p0SapgPW8a3HrRvSpJxrOgB1B0HZuKBGuWZr5/G5FNhHYF86nkJDiA1jqFPyXwkveNHslklEcgE/SPd0l52IOhoqj3X17NT1DjigxqIkDYJW7DDcw6gHXoav6C1Pz22aWLQTyXL8rrFHxmUa9u3u1OgSggLmGPgoqtfG8zvx6xAy/uILLkY2WSjWUbdjf+77jOwKhL4jArhZn0NpujCFzTi4VVGouJ+p5nTAGtVpwu7o5YbidJrjmPVeHCq/UXamUDissb+wIEP/7UUj1B47PSVo6H/JFyk//eKkN2naRJSorDv0IeJzqrpycXfpWDAbN25wyg+HYibSOb93I5POwqCXC7Fhw0iCHYS2s4TjSYx4CtBgqnVDRLH89BD2W8xLON6fsoSNImAsS3X6S335oaavwJ+MVMhsVXI5+tQA51rKiUgyZDp7X1SrbViSIjaDdvoHxf6dPBVJR0Tk/nHFT3lZMvguVWhyOx8RHCDDyH6UP1LbF4FDWeamkAR5SOjqx8JKJfcHxSGXU+uyZaZiczBGm2apGlSsbAJO0+lnD2B+LNJAA7rqcndSK8N0Eu6+lQ5bK6ySwyyAogsu2/yRcME6VENUDMdoggo4axgMPN39Vox7E03ItDYq4hMRIHk54lylfjMG2lXUnOg5BxvirrB6V0xYKVcI3ukfBcZqOuAxZT+PYeAfwWnhWv+ddAG3h3Rpg9Atk/mrOkahcLprnhTVrbYZzWUjiH18/X1jSBF9oASPR/Ltk+iX6xslX6pr3aHVnJJbDoKlsYf5Mc8MGjM5ZsJ/AWwoA40cd2ympj4iHiujDqktzPZ4o2JTZ1Wb0cFKrLGq2xvW/yqd7vgygHa10v8xQOPLUbWGgQVFICZ3Sqpu4++kQyOfP4xZu2RXizf4sx2ERfUIrxm2uhZaBn7q0M5IAHpX2JAALVP+/Ohpr0R1B76qq7WsSnAwHSKRnSVm0+OMKu3IK2Xo+euqhiDY+MQsPmWb7xBLD6wrnDg++c16kcVdwV0WdpACp03OjIbPBH301VaoFjBQjIXI5gcVus92oAAAABjkFKSF6qAoJKIeBYYHyelpci/mpXjd41gS2RUGdYZWRTXwWGHpgWlE6oUgwE1lSFCSBh2nnIaQFeb+2l/Uw/8/9Ud0u0WS7IGJt3qr8RydL6gsL5zTnk7OG2gPY4WZKrxv68fdjMm8VnbgHUS+XXQavA/W7HI0uWMrXXzMqaHWMauEAy2eVVJL/oZ4OFLx2XubkGjcr/bkwxbXqTw3p8i8BMLIPtVF6oQBm1CTfDlpJB3wfX9zooYWDEqLHDqYSwxIoBBbBFvNHG+6voN1zLyjcVhiVt9QIAUgKoPvTaqH9ZCQVGBQj/tTry4r7kp7PzpOtDLX1laYqu91V4K/7zgZV9DVvwZgoDp85FGunRZ5+Dlv2oqgxFKsWbYPfY9IY3BRuCrSqzErVYQBsG1DyU/2kTI2X/ZDUFkeiHaxI+ES0Aowh1yNgw464cBUppS+taY0WlyYap5gKm7OMPnnE4jXFyhy+1IhI6wQ5Abfj7hSpYDpetEyCUdESiW6Q1Kqz1GSLNtsm9aWk3yg7XShc0ytBemyzGJvD3yJvc0wz10Rv2SMJlvVdIfIJURb1gQ3qqJGzqhDkfqBmDLemhE0V0CZi6HesF1aqvv1s3k4ZX0ynEyA9wIZDhZKlH9FrZEYfmLzSioa7/ado3FlP0A7jtJZSoMHOrOujUf3Nwb+MuLu7rF0n+iGSuzhy58zzo8CJktQ/fNf928dfk+yW98pd0wAAOlU4nPlaPR7FpHTU9zjAHUB2pNf/gINYeazlY0kwl1Sj5vTRdtiu7iUWcTyswv/AqaYGIqfz2uzQsxwFV2SSDC6RFAPeJwCXcTfYCEOUYk/uHn54v5+ZFDNyfb0WKJvRFVCjS5H5P7V62LLVjq3yj4m2SNRW05BMd6fGdH2Up/1ira9uKQTCbzWJfjfzh6zlMdHAL/VEMEc/ZyE76uM0l/04NwkUQ0+jF5mnAkumxf4Sq2tm+1H7pUtjZ58ujx0E93pSk8QbamvMtuf+iZI6+iJ1qCXvCN33+ISbcprT2k0qRBSjpwRR3Nf45LOp+hZ11PzBwVzmSMV1dhkEN9XVwTCXeF07hvWoIGKYANn2hj9KjROZw/kI/Ud4U5+IDaxFHp61MMR1GX9RmE/ygMlF2OiPi4MgYQYpqPEP7UCkYIXI0PnGtrjjGCRUYmCyqo9Q5oQNBpFLV60KdB3P+3xYKghdtw5CvK0HHBlcwF4Sa5MzLn9b8j+aTjUTvMzf5KbCVHyj4UzS8gAqGguMTSTlycv5gIZxctdO69D/HKC431mEyha2b4hmWuAoyMJKO1YiLA4oD4JCrUSWkaPbiGGbYpKpqV2B270So3UMKNME01vQ02xGC5RBPBmT/xCBW+Mz823WGvEn/w6EKUxY0+k4ogI+tf5o0m9Gr18n5/QzI4tkj6VzSqNZHsDpThQvrEu4B4D9SmU34wDdkiv0akvXenENq+j/eGN87cUXZ0GA+sFLh4iIW7S1wx/VJwwPS9u3QFxMiB67aMy11guHRLMHms1WfXwUIfPzZSA+NcpUPFkbTziZhcd9v+msGiUG7WZyEYrn19+jZYDtByTX+bGeF4pY3hjLus04vQJfYIfTQI+Ham+sD0v5lPHhGwUPbsEGAuD5qow4JWVcmbtp9Ul1cIXS5ne+OL8eRckEvWRyiJHdVWPQYyzHXgaHBwoS/4OQ7eiVE9Wf7e8lbpprzTvYgjpROPlx0l7S7Al43kB15qT628+FVgJcDq7slv9pbP/WK6Lb86pWKL9ROyI6itpTU/66+N/t7kYrj/RniC/4lppuN2IJFjaUW5kiF/9izrsXuttClkYRkuMzeSgR9w16xOm1XJ5PH90aV1uUBAYcxS5k+qRmThawAa8SzIPbDQcvkAcb35F7JvDiQETCUzbvsCDPKGNzZg1ToXbgAx06qjlfM35Br6OtgHJuUs8UrWbUw8PCOIhGgtuiB2Y/FfMEAsVBYBssRoGA02RkXBX8rBw2tbNrMfNa7cJlUFJhEuYhvWI2uaS298KPqi3jGdGD28OwHlOCLyMS9DvBUilXENY1PLtrJdOE195gnXk4fmX434WAhdYPVl0dlGE4GLtLCEF/ThDqRwN1ynY1uYsNlHpCks/Cs/uxHZof4pdrpi3ezH9ZLMXZ9werEy5yfuuBJDQHWazihjrcKk0v0WWQD5ZRxEC5apIEaXu/jPkf9VtZpbdPRrv1OKbgZ6bx8YgBGLgtT8US4ufk2xbGmyxWH7kMlfMiIpE/urOV2TF1GsF5xnycDUGP9mWix+6F3uMP7De7FUlPlR4RWHWe055eDvfVDF558ic0B4RtNyiHhluZ33RfiHrSuSUefSYGrU2oTyJgrxXrhwA3dSck9ewANmKORgKFQPMqDrnPrFlfMgxyZOwNQd/r//oYhatjlmN4Yc5qaoCx0VQ0kHG7F1oMNVvPnx18zmlu4cRu6oLTYbmBbWFeH0B/ztZcztJnJhsbFx4aKM5tSelex4A3eypdkfmDi/aXdSGQ1TrQ1LF36uLN57SS+bVLVxkaZfR2WgekIbDDr5nXlCwIKQxl12wjVM1UPVYIY6qX9bRZ3dQCiTN0kyOM6xteiQFnUoCm8u13a4Zos0ioo5uX/vVdpF7kEr/JDTnzh4Sv4Us90aV+kNkoxH4RNJG+uSb5izfdYbGDwudGtgW7j+WxxWISVfrxcOEYSBL4BpOX1ZWRGikNoToxyP8QyNFPLrGusxRRD8INw3YI1Ej63QFOiJPr0Th6UoekqpMG6AhgnDunkJNhA72hK+Qw7EF2y9hUsaf+Yy0wa4caAOF40tfmXgi8igcVYkaGanVPZ+m46lxe5uS3A0udB3pvArufGJ08o+xNHU2o0p49J0jyw3FCmynxpSNZtE3JqtU+i3nG5LAjK+jS4/i/wFBSD6Z5jIJLULx/vNgbvBujPzI5gugSk2XH1nAd/SU13o3jivbuDk9wHxS3kiMtgbLoK35pvPEr0g3xmE+MP43xPzr1N7wkI9Mq0V14iKTd9BtJJKVFqX5EJQ45+FCawgVESdYvpiMpIZro4WDiYw5cag7BgXYcdHuLor0XmGDQQN8RigK4mzkqf81deHnB2zu5R4YKHEJGLqL+o/GQN4Et8bhLbVAWiZfpNI9kbAXUntI5NJu86w07ePEz+ZgOwopybKgQiZdk25dgVyV5kkOUShUp2bww47WL0VoIiLsKUPvsGDieQhAtczJ6oG7wS8gi5NoAf5y9z6AvOwLeGEaNUDdjxiu2gC5aMqI7rNKbml5Q9LSr2U4Jk5dNrFj3Sp0RJJou4NcFUjt59Lek84P7iTg82yxI3jvE+M7SoCyJirr2TJDlO5PDJkxuvHuGMhboJJcWQ0kdjwKI684XdqdGKhKA7hslG9ZiE0vjLERAGBvoBsbYvxifzWFzK+hfPvKR5y4d34osP+RDqNwIwze8A/Lycq1Dj2AIheMdOga0872CgTFZqgp0Da0WQImlS47FSoA0hwqCxTKnwH9OE6IH0t0jZ8yXcQ2mYaJCL49aWng9WsxK2/uY90PXwpbapB0/Ak23zsV0sFnJpSBfLwjdDgn8icF08o7gI9SYjIPg0J7DuM6gdcagoAyAoyqO4ZoPUURMDpvkgpBX5ZxwlaaD7mA4AdNYQHxjz0BLUTYrScYZ0OvuLqDVQfuJioQsS76kEZ4bFgEY3QDr5CsEonlTJ8HgyJ3Ag33oagl9hAoHig2hhEvYJXuyktVMhfhmxK8Rv6wh4OlBsj6XuTUK/Ob+NDiJo/X83xBDqI1QKJAfQNqiAb18fScxnyogneg4WSY2JY2OG3BUX/CY3EYDm612A7eJiO8ud0gmFaRAPfT0v4/Z6e+O3S3POOkK+XAvadct5XkRBXOeTaV67mgkupLuh8JJITU0xsAdY/8NDMKEPCrww7zPk8Xm2ZalVMZvnNmf/omQcq6uZhAOXytkFAsOGb/igrE8PrN8Skqx5xKZjBE74fj/gNA3gySCaSMNX7AUMKk1BxlgWJP60ikM89FaMUBKQSAZOeIp3eI98ZS6rsjCwloC/jqeC3ojpmYpErvEng7nZXIzMad0QUDfUP3I1XTb8xKxOAMwF6EntpSBVAS8gc6RP5fif74WLJkklt5htXeLJcMw/7AOCzTKdhcDek0AtLmxK0Ip6pPl2OKJxp85hhdBXjXJ7icWqYxdidEk2CkbD1XStZiVNEdSdeBbNQxfXTp179lnt1wfYTEQQIUrJdlpmCzsjo+XfajUqUmWXSssMLXSklbbcWCzgxE7Lsa47AqHstb+9hUHTLj7ZkF6FhI+Zrotp1nP6A7XkTP5emnhaRVDM7HIvZHQu2cIHugw2IIOwgNqaWU9LJWFWo8SF+fttJ8M/0XyTu28LgmZLBLry43kPcfCxtMCzlfeZ19w8OJKRcThUAy+dnE2Lxn8aB2pgriFxmd9mzGUwBlG6IDLm5s4ZmyDiwHVIG/SqKErm00ymm+JQtuMv3XmcvAQDgGVjCID66u1XL0knxu+bMyuot48/LNUo8dXO+KA6kL5SrThYCrU3X4l3HEXBC88AoImuSrcbwy3BgDUpej0P8+zzGjDX2RNeTzXMLuJCtXi2Suy4u2OoIJ6l1S+DWFEBeq8cVbZamoX6XoynND0Vw+pX0pe/EO2U7uL2kcBsR5v4PvyPcuV9P8WZGd+Oa2kvKDsQEY1G253wSsmKCOPXuAYGoY7zaU25Mb2RzrnsnIYW0R4QD0PA8ejRTwMpt+DEKBL16W/TksCDzkZxqQCx8L0Yw+4pTskFM1P2DqVtSzLF87dUMo+oKwQoQ2yBH/nC1boSTQzQ5vNme385h+Jp36wG62ufwi3shfihDiaN75mzr/aUmT8q5rDiZVvPMq57XhLkkrltJB1E6BBrDcbWrS4ne3armjUHerjUB6oqdu4Ncoxjq0nB+awe11MwJDLuPdl2bSx8uil+Ikh361tnVXiCtj+9q1S2puhq1BOvmp0ZS43+Lw30nRTcLoTmQ/MYEXACMHF9crJA4mcHfQIuKa9viuxaIbGyrejV35ansY0SQo5MllIU+cOrCYIgHdcKLue/GOoGyPS3P/VQRUbmfkHQMpUhiSP82CXxHT8qEvtw3ZOgmrperv5GuRUaJMGCosjQ7RbmUJKXqPJrs0Ao5arzRMuoVgBH2Gnh19bcgeleUjAwIlu0CHtErAtWKIo+kJ0489TNVNPwqGcyzp91hmvIBjJ4PVioxatX1sNrx6G8mIVoj5vVHPofjt1etXnMlqaILlGTHoOjif33cDvAwTWJ2EgoXtjQROK+j3BHLt4lCLXuT1yu9IFXq65qSQsb4M5gB60+n6rYYdWP0Cs96UixhR9KEfL1h4Mjo0lmvDI+CPf+kAMw75awln/W5RIOBKBrj7zrLfTA4t79z7gPJu7mD+SHm91t/bskCSX2NuP5tEv0YNDno9En0dY5U18Cg5LFrUBwpR7RtscjAO8JzPrKOW8mFRQHjlA0UYYo4igXnmHkxrg+D6OOEZnT2Ew3HZ91t63BqJu/31OcfmJXAQPkvJ7wSU10ag5iGtv8fGpVib0Ez7WYwvaAxYct9WemAGNZ3QgPTzzGbslIAc0YlgFGn61iO7gd9KmKbrt+TXnZ01fW7xVXdis/EFMnp31CTyy7KSd/v6S6G3vjYnYVFFLKegC5f3rx3CfDGScsu2DmNN0Jj/rMw1BzmAFHKhSNTUdoOlPRN2umaq6QudKCfyL5kWy/nWzOesLtYZ0765RSQKX81jqyAdiWE0qPXQhS3cmISYSOxl9E03PAWnuKHl73rtczGcJV6fD5IxiEumvZ9HisJYyixlGDAe6tTtwCNMoFvKnPSkwWJeYFup5mFuFm7AfgI1d62cLMLakzj+DkRCT+ogYUMlickGzI37eC8a+qtSIIRtY4PXMmZARH0xqXc8g+Dy910/2f3bOMAFohd2jkDLmaBuZKLX/dVvhSaz7D4bA6QhqMpjhDAJoL1CQeW59T5r6nRCFBp6XiYIShftB1qvmoB1n5dz2AmeGZdqP4v3+oQFJ8tGrosc4snVysihp932D8XM/C42XZKScS92RgRRqu49A2Aplsufkqgbnna/Rb8UT8oZXCwHIlEupkPArBZ4GGbPj8IHNzFRzLjjdH6BQzHRHTCCTt/G3ApkYFPrAPWsVgPsT7cVZQSwENY19B8m4puYm0N0VYsvhp+utXsGg6TJby/Y7A1JoSGMgqtSPqZJdLY0GygUJiNkjtAckiFokCZliC/o2TKFH7nCsjdRAl6Iy22zsx7+PgUzSAMTvc7MiJWmZ5GOR5848QJIuBUC7BTVWHDKSN1ij/LAJVqD6R2noZVZ07X9bLSlbgLm/84pTtvahShWjiqOwwRG+k7Y8vMwxFaWEG6TagLhPY4chfMJeKO+eKp+4H5eXEifziaPP8f5a8aWaksqfsqCDhzy9J3/SwZRjhpPqw9ciAD9xoj6ibMbDb6rKtQc4f1w1U+ijK37LeropQBmPAzYVcwoVmovWtc+U4YCzcpZnGgpx8du+ksBTYcofusRsh9EYNiBYL3kvUDuhgRbto0aKGB/eeHuQ3GJ2B/zCs196XhZkXLsFHW8tqRbl69gNFK3jlLJMaCLaJkfEarc6dVlxkTJOsyg9DtzHtY5/3cMicw9iqsknNffu72HmzBorMouqU16TbXeP69UNcBTrGHAeQS63LZZCHfXSxJPYGMl/WGJaFT2LzPPeZRfS0Hxun0b1XYhYSRfvnzgfxUCHCSBIo6JXj1MuesZH7aMKczTza9trD2nvAViDQqlfTYtlNm44D+bUB/hrT4vbaPHht0lheSaABOQmqFbma+4qYs+vgUOeGC9TfRckLmWBdDAn7vz++Lk1dq5b5UuVaBzNx1XJS8NyJv8X4VjizgPves77HqW3dT5I48yH/jErJuNSUpyT+iRf1ELLu8MJyhn8lPalH12eBiOl0bzLw/8bkoEHp+e5v0ra1JTYe1E60jAwXFEQB44kZj3nitUDDE64PKdn3kB9ziIizXCXkciHRL2EqRIP8T+8/4W7Lm12lCuNnBX79LpQRw4mChFot9A7+IC5ua/X/syVx3DQwPZsZn7t+JvD/DnbdLDn+qko+F23All5wsm0WZ3wDcq3/yoQ+QqbYG/U087LrLWia765tAV6VFm3PohxFdXcOqIiK8v1hbG0cj+AxZDcEwhLFyXizJWvwcCHm7aNsclAkLfjDfU/ve4vUgAJcGrdAUeq5YnBejpeQS7puqk+wN1ird7EmuKE0cCXoubTyCeaUEfvjhCClYMlYZJnhHC14yPGclvdfZKxMznOw24ApaJ64cs90EpnyFpzeDOJ3Zp9WOMGOyQFBz4KCSQO3dNqoIoRovdLvVa1Uqc+mfMKle6sATzs/+cuWdmj80HJYJ+Jf7fiywSfjuxH0wojQsryIn7EYqdl6ZJmFYogwxKBa7CXa8+0eFdaMv6QtMBvx0gLyFjOFLP14B29PmfZN8QFJ2DbgMtYi4vHRbZeH9AIr7NV51sOyWLi95Afr7RfQwRIjJ8AjOQFqldB4w1MBf1QrvPNj4St+VH6P3H0/ehO1AsMm7u/QEnOCzRWPfqddAve8Mq5mB3//nBtlIHQsOlx52PsNoCTCtyVSGOCYNgXXmehyQ4HKe6nnFl40vmjwmnYnyVATLi5T9iRBuvZGJOVqtlo3DK013cdR4LobI3S5lZM6pF6BE9QYndQ5AvDMnnF6nJD3K0Jqt2bwCTS/AdrZy/t3gONEZbp0nBenybd92zgctZfoZUmIrFBgedwld6kD+YwUvYB0VIcLIPvN9+i44kO8NSuCcIOhnKM44maUxS+B8aVT/NXvwYq5MrbyZJ+VE/aDgoNV2VkbNSP1AMd7EoWeZuCgKlXox+QOxfjbWRzv6IXt1qXjBscZWJFoG0p0oTV32YL2KjAY5/6EKWUyjQ07lG5Sx5x0DHmrElDlMHHCa/s2vZo+7ayqaQ0prH3/vw6u5fBOlC6KE9a7R0gI73z0eycIJDUwu4CDYPs4i7HB7YkYZwncCpVPELz/o0o/o33tY3r8nZPUXIIHjKmyB0j2PUjLQPHm8tw37yIEvlXxNOsB0tew/7a8+2wCVcB0rHxlJ64v7j6RHU7JcPUHnEeU2FGivDMlCmlJCbkZa5Zpd6x9XoNbHmFuazo+lrii95cSV3MzTECwW63YJ18rhFe4q4CSDkxwIrNnxZ3I0hP/q4YbcZuRorQKIHozCXSXSH2UYc9RJrCc3v3zld59/qLZ/Knc+ppJk9h5GNkofN6DGf5ifXLQwsaHnHYIcBWK7T94w/IujGgwLmFs8fBTCNpzbwUUzM8K+LIg6ImXzv+oXvXKCdYJWTbSphJKBOTEjSoAte1p6cMybqvzLd57iylxvaQm1wNI0MDXDkSpMprX03LYXs2r+JaTiMiykMJw2p/dnOPKeSi9r/b2EfV2KGjesmPzGXKxZWLq+yg/6/QOGwfY8Z1ZJHAiShWKdkrf9jGD1CK6PHAL7c1jjP0ahFE7UkvSBunQ0/z5c58xODbnG2AQw31USl5yzSZT4VvCvColJ1xSqgjB603zuv3gmUcSHn1FhvMh4VeiAp0j/ju2PgXF4Sr+j/ajrhY5kkfiO/wsmLVQhgiSc4lC56yjbUywEGxQ7qxFqK8X9UwYKe0cuQUlhDbPA1MZtlerUMM+W9TUSvONjfkMs5y3auDyQwSbjMN9Bier79lMPQEsmGcp6b24DLpNX+kgCjvdlr27HQ3KwW0q+ngRlFPFJjZc+t9a8CQYzglzG7t/Pied2urwyFF5+3ugh+WzLliKggqhIG84/ewYdvWIYjqmhspKbT2zhX92SF7YL42oGQD7RIuOHU5jI52wxPm4aw5kdB74H2YUMpP9XHf8BGILK5pww1bttf7jYW45DlyqKoGIIIfBhpg4gVTTzwZqqTWET5PG3cxtrIjMBzRqQImYDaZ6w49/EtG8pqCMOj9f0Y+drbj/Slv6c/Vk17Fy+lx+m+sSAVgy3qBlM2etuXFaTQG7dnXHWhdDIBejmFCmSiaANhykIlfAYHzx0d9beQ813+7DQ34SaSGWg8kKK4zldug3mYSAvx79oCmLIWEZ2drMMeHspIRGpHJz6DlrCapqhBeiCuHsfP4wZqOBt6QJwfr6tXvjJPd3FgfaxhJ1v/xCmg1QU6Z2Sh/5uSxjO0liRynUQER2n2N8Qqn8ntoHxgdZc8TTRKgqC6vSjQecEo/PazP87JFaCFIsxzfXACpyFKlOskwE2YN1HEzK/KOqBx1dJ5sv0WacyS7XRKcUa9NCUqGh+PxIUIRUsO/CPz1cLk4kObPoiD68GGjnWxLa6VBj/I9jNr5rBN+EDihsHQwqiHNG40C/cLMRA+y+uqHfiBYFqT81TVkFNUv5V9/2paa/cnmaj6chLcaJOgA3CYDQ+EfJjW89sxRhmDUmkMPNuXZDZdIKNhZTTPLwjxc1966M6HYnldWZq7nKlkAGn1DlC+4Otht46JgpVt6e1Y5lctH70uNuuD6eB/UtBk/m4VP0CnAAUY7EFb/Lec3Ef7TnPtiTplBi98VNRlQU9gQk8IVuAoCfHo32VwAH+nZPGuVEY8MCwgDjLiGJT5ZumLLRdlYOr0Zcvp1FiwB81GnxiiN2bwPLhbbbMR7qXtO/Xn9TcMo8yxMPwABDvPtMIeNV6UhhAwfVBzLshfULIQMuXotTE8NGYKFzCZaw1R6G+1508eeDA60l+t2mU5dgh0u9hYjNHZIX6H08nQ49LWUGda5qMDWODMJ8BBrZCd4PJLitxuIAPmil2m5jRauB7YOaCVTnGfuGBieLo4MJfU5wkdRCQhhAMANmWNvtKcNq4DUHC7IY4s+rk1nSQ5YA0jVX0GTSOgetDtvn46+q5UKZsC7CsC2KEEFzg4Cc7nENKJRqD+p7Q/bgCMq/bhZgauxEBhs65Vkx3sVOmPYKmffrDdfGDKcHzSytcZuYxoo95cpfr2ke8df7ryWyJEQrKvADPkaReuYvlGGMwe+axtumwauOZFN7Fxyv3MzK0Ty/iocXJMIv9S+NMoMVY2ccdR//RoHx8NwtRsbaXoiBMJSEnWyDrYIESsaH4igWp2A3JV/ptBtC46QdRuqqeV8DIDcEhwmCCJI4cBMn+sTC0CcncLg26B8pj5cGCn/HuGsPdsqEqHMaLF9SRKY+T6wbpUZTYEKS/QNkvYoV/hwTsV0Oc+ykEYTUNpcq5zzxC7Iy2MXKF8nqwUoZVGqh3iSrgLJvjKXQ4l7PH3l74oZuoN58RLvihjMO2LqKofwkEuQorsizwYS0dt8KztMBzawGYBMKExSE61yfkCh/qOtg4XflCLarrzW+lH7DIS9X31VaErCA0K+bXvQk41nUrqAAC+VkdXMClKnHr7Bi/FVeCQ07135NkuQyl71Pjnx7eRNcwc1APnbNmMzvU4QNyhKeq5WcTBIwq8GGPNpqlamPzutinKZdO3aBtVhXxhH4MmL3s0BLwe+YMBE3R/4ssBf/9rCPMk2hkpXRLs2R9l/OL+6UGLM5dv/jEK65pacG2JSmSEelOveEwYt5Pt2XA1CEdV7nBq+uzfOsNUsBjkY0uR2zmL4T2N7V+o3DO1nTD5dpYZK5DWewUOIefggCLkQvj3v+3NxT3TYNiS4/NCjYQ+qpQWH/PR9ysr7rkLewrRPiri4bzqWlWRjG4WWL5bpNtuhuRacVN94MjHc6/dGdPCAOeVWlJ/I+ejN/XYr9oSmuweoZGS208mOi3bSz5z2gf8gAzFERcZM3g8r2otNPIRXuZ68ND6wAAAahExXKilOEPI1my4jAEYheuPgYYP2Cth7/uVCZZm32xtVmEZxbjVHuEhF2vIN4TH3TgOwd6/JimRY3IbXJYrmvO5ywBuXI345ihywdW6+bEY62q26Rtd2+6qs9XPc5hJdAophcQYHeG2ZGOBLgjVJqqbLC03anOwySl00xfrL38WGx2CzKTqTrkQ/XszIim4WX4h7DNa0269z2Rxcq3PxDjkpBITEMvq+dpUUAL+urzGHmV2PaR7kk6kZgETAfMiGoPsaU/OUNE0QjCs4ukJiAZ+AkM+rL+ncyqc9OdMdpa8bEfcyHTerZUjuDo9B3pdbotDixUQGN5X3R7K+otWPFxfPfw0G+wuISg2Ue/ez8BHZUsxeeJ46bApYhWD2V9RbSISleEYraKkpktL4vG5Tx8OIm+RES6zautwlG93gAm/QicsMtj5PIhXnqkF7T6VtFSXKOEyANxeBWurRoeT8ccX5MoLOydCxsTb/fOl9Tnc4E8Uc9JNkgpxDoSU+b/Sx/5Z5U3BLtWExEm/Pd2lAMWkMhpdtL7J/046yyMMT9QoYCZSisgtFbVgAB4fQbUf9lxK6tMTUxeHODzvUYUYl/CdY8+khjbbth3EEUec9R7buma2f6x4O8XPGYDhYHs3/dLLR8r/qrGSwUfpE5xKBjpQQR25dJMsvjScrP8Xv5we2u1URxEuhgUZPoSSbsLz5FXKyzeBXWO3fW9mMEHUR6IbIdDtVnuw8RGTAp9HFFBmPVDed2mdOEt1lzUl6JA37JESByFhFwi1JiC4DQYcXyS9Wxp3bSxo/HK2GiXzJAGTtlqXdC4/CODwhTCuIL1MMpSoEkwDSz2/DiZVekSru+Weftz2qv75zTF6LHcwOVo73y2bsWr0zyXo3Cpe9MVCxfcHVOSe01TRAMgrVwGYjIKU/vYFNrPhVRUecZkndY5yPj/pXy5r1ZR4IxWl/blgUF03XW0/EbPEMGAU2Lq2BVtSluPuz1mPrWqi7MeXT4q7pEnElNdpGDoKdkpSqO37W39SqStZA1+NK8qcma+YjKNpoIE1Rp+tOlf7d8fxAN83BlyQQhr4PHpCbKuY8/mtHAMptJV32zbjvXSKRuSLUlq2fHS7sb9slwrDST2dYvCLCiZVnN96SpkJLtKab2sB+y6e5AP+oT2m1Nc51rHGAhfJdytpI3m4l/YcFZ/UYYxW9Eu3LZL7d5VJtruT+4HeJB/jEczywpgvjjjme4Brhq5N5e3NYeHXGGL70IqTy+laMxfHCbK3+483XwquORI/5IjCGcPJHZHE02/PANYKAyqi8szYXgHikc8WYsniYS8RtgV6rBJ27AvN1Ws/AielP0JHDRWukeePKGG6OzbVUq0DNxqkD1ZOEg9mpeG48OFMy21Ztf4t8Q2QDxBnScL8d7v5raK+KYRo9BjYjNP4XqPmg/JxJqhaLfIRpVvknIcJty0co/D6hYGxpSbBYv66X71t80mni3hFuFfUfapV/qIbXaNvhpJVKUWXzE+TP7gIuQF5Yef8rMLwViOxb4wH5RuVQMtGouamCdEDhXFsf0qWqmbvp6T82IG7unNjLxaxynYd4GG+LInOiL84b5m9PxNvnf4tnO93jtW0lEny9CXvuXLqiEmloJ6o5eczuOoAMt9pOY1CYortJvd9JXWlqHHvelFK2eeOPBf/4Jzz+FjdkiGxsfcrvFVP4zDpwC6goqD0ngwN0hoU7qoChUiD0UDc19ocw+cFWZIH1YlB4HdG1Uzrt0IgTeAvdpS0C/zk2IRD6kWb9Frd2xPHjtebxGWtYOpV9CFrlqKViiivpb7nf2Huom22B4zGKLgARxaEdwG83pDcPrcKd4nlB0z2BgywXnpgiHWQSFVlIyYEx5o5Gzj7GYkp5XwG8f2eriO5jr4Ke1Jrseh9sBdMR42MII7di87FgOuomgCu5xpxV7lD+uApGWQ6u7iLgyfo4gfTletbA/o/uQscwQ+Bljah9q4DqzsiNIDSGh1zcri+ivH2JRyDxAczVjMtt1sez6/K5Kp054vGsdLiObMxqg+RFJxyytIrgeyAasEGNx3CqB0hyVRuPwgMnJE0vxk99G7kwGpsGnAzQMgI1pTGZTsnTq7g8MpizulvcQeNVc2LXSmpUdVtCceQQyuzKPX8mnFoiqLUn/Mqsn4T1DGqJ2m2lwkct/kEsURKJ70tV04iCjb3JDAr1BkvyzC5tea+ZLjB+/GiUOg9BGVSIYxSEvTQ9VeU2Qh8ZvdvWTmfG84YbbdHchfWB1M0HJ9nGXv6x1AYCRGc3evWgdkL/PIwhSZ+vRAWCcolYZZynhDSd4PQc4HdYRgZKGlK/8HJCE0bbmCf7mXRj7zVWMKil6Sm/1sZm+yG1Y9QjRg+GIk+wFDZaGlROVE0dFu3BlDoN8wv0lTqfG74snXSZDYUWU3M8zMpOVEVQf2xSbyjacvVtdFHH7B8wUoeFqn/fnQ015TuOKk0EFm6gT5hzMPBtuC6S659ypliYuYuk6BcmRZPPeq7gakNe8+dR4wLND3PosbUAQkFLPApQ/jyzkTZwOpFkSHbft8LCF9NDEKkOXPrhhUpEYV/QkMwQIxmZM56j0wIWxJbOqK6M42uv35HUr16R7mfXFBINL3Hb0JWcvcdW+MxlBiXmdZik9R0OoUtF2TsyCt2n9q47cksQWw5o10BZqVNmne3LGkNghLeJJ35fy0eO9Q5Z7mgKQgttecylb4JJUVfqADGkx3KATsoq7o6gWkKkgPncC/5VBdz1q9l3V7b4wXrZTMTls9WGhHzpRr1Qk/M9XlqvdkiIZNViAWyUAitD7Pva2D6tOD6OFF4TauhJ7x/w/9C9hHCLr+t4yom6Q+RRVJLSfGEbiTM2Mq6umeQYvVExGhe7gT07PRoFRHXysMBQQkt22P+3KSkxaugIQ5Z3mO8Lr5VCvjS2RM/o59hmZF3XFOeTZUpGm5uz89QksdtzBHl6mt0PLsMnijWsZ8VnBbgAWgNEuU0R70KzzdpAOBh7OIpD97pcuzsDZ2XNrwcODzrQoRl4Lvp0jey9GbS2U6Iyixchmu1QiKZKh1/d3q085A45fhhGySQsqyjT43X+JLqMMQZBbBrMiUQSyIwIUUbFAhfiLagK3a8v5gyWPRKHQ+jNrbIWcDmWvlgAeA0wUcuavSCciqzc9LZj3TC9VPqypGoq3wpMLi8zD8iEIK0EfuurY0oLIxFLoC6QW4UP0P0BPoHtu38uWdFqLR2rzA9LnBPOP4qVU0dTzHGKLDTTc6EO7j7ru/lhXNqGh8qhtsxMu7yt0I1gq732rNv8Zn7o1ktCYdTpAzFdiVsoD0ke8pQuaYz/uiFYHqifTq5j8OM8XyPtZ4jLZr1dVIg2WhEkjSl7qmASG5JbLSMQ4iv4tXH3uwQjxQxRp6KZ+OhgmCyAZTj0UKEkWoHL/aWOl1okqoYQsvJd4/m80hC1t0cfMaY21vvnVDM8EQ90kl7UJ2CA0xFCr/MIFSvb9tG+uB7TiDRbcuges6Pbo0/krlRQix1jwNbC5p5jrSpr+hkKDsfJJSl3rBvYnjMeg09i03fJxfN3ZAhiW5JO6h8YACIpJSA5CJgG6KkfugcfV/2uDXY76cVoX9u1/aFRsvsXQL5bPmSGV/Z35mTH7p7LmRNXQfbU6z525CeLq2J9LkQPD70v7UK5TZ0UunGpl5DibaelwsTr1CP9v1fJm6wwrp1fWEHcVYhfwTd4NlPcK73Mt35C0RR6CwyDRKbZfDdK8RYTEYQXkrnl1kM6dnAwnRZE/KOfdoRP+z7oD6ER8xIz7tiaCzM3nmRAIztAbNBEHHXYkleRViYFZJthsL4cmYV4mIrfQCgsiqFjybm1GWN8BTLzjjG3o4tXXbvxTNen6oSOr0gnQ6bnbc0ut03pwtHukv7t/FlFCB5vrEmPERHC7NjcYgYRrRVkZbiU73nXMkWABBOvCmz877nBpD9bBJ/D/H+6kJno/70Lziur6xJwAn289SFrRm5+HiE5vGEG9Nq4GBLCd9iniDX483aor9IgSOVFSaUiLVa1eIGdHoJWYz4rA5XGA7kRWBwuE1eFX5vJGbmTlVq2E9TbZhp6OX7lzpX5i73ecxWS20oSDOaSdT1H3SxQCOQW3fwPPYS/JtfKoaWDN3Xrl/gCODqqsqwx8f7pGLX7F0FbwomU5ezBHuAG/NN0sG4GJjnNISWWfzyXnhEFs9CqVlSqz7Vnlk2bCtWA9R2h8yLpjTaC0LV2sS/j43nrN1ypiEg8Wi9klzpbH1dJebFdgxe+oO/z34FRLeU7LOIJEvxuzColxp19maX7uomX8xA0KMVJKERxHQ8WqKfFTO+E2RlkKfy4DRx8G2pmtBiW4L4HlrlBiiKtmopYZFJDiFotN6/NAP6GWse0L30BwR33pogv38xo2u2rjWHUWBdIi96NPmc6wFiwsB9QsisAQuIsf/S1VjPpv7p7lMJhCdDvNpPd011ekFbrTN4IqwKMMXo7LkI/3VgNeavinkDSGdi44mwXIX71Pr2bJC7MkE648JGMSqUONZNe9YTYjTa/KP+EiAhWnEUI05JzZetbwXajP80gjUuXwxfSWVyR++AlCRzLlvU7mZzxRBzoNmnOPBWGfmaXJonaG9GryHLnP9mnIOsVto8xuoPu+ejqEPPkp9HvdFX5pkmg2dNXrDK9jXzbad4J9t601gFFoG8o1FKr5QTeDKjU/8zGO5O+2+dHvGCfjp8RY6mvU7tAEUsAAAB6zQAiOST6bg6jXQ3UgAAA)

### Qualcomm AI Engine Direct delegate 接口

Qualcomm AI Engine direct delegate 接口（也称为 QNN delegate）提供了 `QnnTFLiteDelegate.h` 头文件作为接口。可将这个头文件作为应用程序的一部分，然后将其链接到 QNN delegate 库。

可以在 `aarch64-oe-linux-gcc11.2 cross-compiler` 工具链三元组目录中找到兼容的 QNN delegate 库和 QNN 库。

Table : QNN delegate 加速支持

| 后端名称 | 后端说明 | 目标和库名称 | 库描述 |
| --- | --- | --- | --- |
| CPU | Arm CPU 加速的后端 | <ul class="ul" id="qnn-delegate__ul_syy_45m_tbc"><br>                                    <li class="li"><code class="ph codeph">aarch64-oe-linux-gcc11.2</code><ul class="ul" id="qnn-delegate__ul_tyy_45m_tbc"><br>                                            <li class="li"><code class="ph codeph">libQnnCpu.so</code></li><br><br>                                        </ul><br></li><br><br>                                </ul> | `libQnnCpu.so`：CPU 后端库 |
| GPU | Adreno GPU 硬件加速器的后端 | <ul class="ul" id="qnn-delegate__ul_uyy_45m_tbc"><br>                                    <li class="li"><code class="ph codeph">aarch64-oe-linux-gcc11.2</code><ul class="ul" id="qnn-delegate__ul_vyy_45m_tbc"><br>                                            <li class="li"><code class="ph codeph">libQnnGpu.so</code></li><br><br>                                        </ul><br></li><br><br>                                </ul> | `libQnnGpu.so`：GPU 后端库 |
| Hexagon 张量处理器 | Hexagon Tensor Processor 硬件加速器的后端 | <ul class="ul" id="qnn-delegate__ul_wyy_45m_tbc"><br>                                    <li class="li"><code class="ph codeph">aarch64-oe-linux-gcc11.2</code><ul class="ul" id="qnn-delegate__ul_xyy_45m_tbc"><br>                                            <li class="li"><code class="ph codeph">libQnnHtp.so</code></li><br><br>                                            <li class="li"><code class="ph codeph">libQnnHtpPrepare.so</code></li><br><br>                                            <li class="li"><code class="ph codeph">libQnnHtpV68Stub.so</code></li><br><br>                                        </ul><br></li><br><br>                                    <li class="li"><code class="ph codeph">hexagon-v68</code><ul class="ul" id="qnn-delegate__ul_yyy_45m_tbc"><br>                                            <li class="li"><code class="ph codeph">libQnnHtpV68Skel.so</code></li><br><br>                                        </ul><br></li><br><br>                                </ul> | <ul class="ul" id="qnn-delegate__ul_zyy_45m_tbc"><br>                                    <li class="li"><code class="ph codeph">libQnnHtp.so</code>：用于 Arm CPU 和 Hexagon Tensor Processor 之间通信的库。</li><br><br>                                    <li class="li"><code class="ph codeph">libQnnHtpPrepare.so</code>：在 CPU 端运行的 Hexagon Tensor Processor 库。加载此库是为了准备图并在运行时优化执行图。</li><br><br>                                    <li class="li"><code class="ph codeph">libQnnHtpV68Stub.so</code>：CPU 端的 Hexagon Tensor Processor 代理库，与 Hexagon Tensor Processor 上加载的 Skel 库进行通信。</li><br><br>                                    <li class="li"><code class="ph codeph">libQnnHtpV68Skel.so</code>：Hexagon Tensor Processor 原生库，包含针对 Hexagon Tensor Processor 优化的内核/算子。</li><br><br>                                </ul> |

Note:根据 Qualcomm Linux 开发套件的 Hexagon Tensor Processor 版本选择适当的库。版本如下：
- QCS6490/QCS5430：Hexagon 张量处理器 v68
- QCS9075：Hexagon 张量处理器 v73

### TensorFlow Lite 外部 delegate 接口

在外部 delegate 接口中，运行 TensorFlow Lite 模型的应用程序必须加载 `libQnnTFLiteDelegate.so` QNN delegate 库。C/C++ 应用程序和 `libQnnTFLiteDelegate.so` delegate 库彼此之间没有依赖项关系。因此，如果 delegate 发生变化，不必重新编译应用程序。

除了 TensorFlow Lite Android C API 之外，还可以按照与 TensorFlow Lite Android C API 相同的方式将以下内容集成到 C/C++ Android 应用程序中：

- External\_delegate.h 头文件
- Libexternal\_delegate.so 共享库

QNN delegate 在 Hexagon Tensor Processor、GPU 和 CPU 上提供加速。要在使用外部 delegate 接口时通过 QNN delegate 定制模型运行的场景和方式，必须提供额外的外部 delegate 选项。相关说明，可参见 [QNN delegate 的外部 delegate 选项](https://docs.qualcomm.com/doc/80-70015-54SC/topic/sample-applications.html#external-delegate-options-for-qnn-delegate)。

Last Published: Dec 04, 2024

[Previous Topic
入门](https://docs.qualcomm.com/bundle/publicresource/80-70015-54SC/topics/getting-started.md) [Next Topic
TensorFlow Lite 开发者工作流程](https://docs.qualcomm.com/bundle/publicresource/80-70015-54SC/topics/tensorflow-lite-developer-workflow.md)