From 68dbfbf073a2de97f8c683f81ef48312a2f9123d Mon Sep 17 00:00:00 2001
From: ytreblefan <1814436734@qq.com>
Date: Fri, 13 Oct 2023 00:19:20 +0800
Subject: [PATCH] =?UTF-8?q?yolov5=E8=BE=85=E5=8A=A9=E9=A9=BE=E9=A9=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../YOLOv5driver_assistant_system/.project | 8 +
.../README_CN.md | 87 ++
.../common/__init__.py | 0
.../common/atc_cfg/compression_nms_op.cfg | 7 +
.../common/atc_cfg/compression_nms_script.cfg | 7 +
.../common/atc_cfg/fusion.cfg | 1 +
.../common/atc_cfg/simple_config.cfg | 1 +
.../common/atc_cfg/skip_layers.cfg | 13 +
.../common/patch/v2.0.patch | 78 ++
.../common/patch/v3.1.patch | 74 ++
.../common/patch/v4.0.patch | 87 ++
.../common/patch/v5.0.patch | 73 ++
.../common/patch/v6.0.patch | 29 +
.../common/patch/v6.1.patch | 29 +
.../common/quantify/__init__.py | 0
.../common/quantify/calib_img_list.txt | 16 +
.../common/quantify/gen_calib_data.py | 57 +
.../common/util/__init__.py | 0
.../common/util/add_nms.py | 110 ++
.../common/util/dataset.py | 170 +++
.../common/util/model.py | 105 ++
.../YOLOv5driver_assistant_system/model/.keep | 0
.../model/aipp_nv12.cfg | 28 +
.../model/fusion_result.json | 103 ++
.../task_pid_4815_5026.txt | 14 +
.../task_pid_4815_5027.txt | 7 +
.../task_pid_4815_5028.txt | 6 +
.../task_pid_4815_5029.txt | 7 +
.../task_pid_4815_5030.txt | 7 +
.../task_pid_4815_5031.txt | 3 +
.../task_pid_4815_5032.txt | 5 +
.../task_pid_4815_5033.txt | 16 +
.../scripts/.keep | 0
.../scripts/object_detection.conf | 18 +
.../scripts/sample_run.sh | 24 +
.../YOLOv5driver_assistant_system/src/.keep | 0
.../src/DisAndYolov5.py | 281 +++++
.../src/configure.json | 15 +
.../src/filename.npy | 1 +
.../src/model.yaml | 12 +
.../src/trafficline.py | 156 +++
.../src/yolov5.py | 120 ++
.../src/yolov5detect.py | 128 ++
.../utils/__init__.py | 37 +
.../utils/activations.py | 101 ++
.../utils/augmentations.py | 277 +++++
.../utils/autoanchor.py | 165 +++
.../utils/autobatch.py | 57 +
.../utils/aws/__init__.py | 0
.../utils/aws/mime.sh | 26 +
.../utils/aws/resume.py | 40 +
.../utils/aws/userdata.sh | 27 +
.../utils/benchmarks.py | 92 ++
.../utils/callbacks.py | 78 ++
.../utils/datasets.py | 1037 +++++++++++++++++
.../utils/downloads.py | 153 +++
.../utils/flask_rest_api/README.md | 73 ++
.../utils/flask_rest_api/example_request.py | 13 +
.../utils/flask_rest_api/restapi.py | 37 +
.../utils/general.py | 880 ++++++++++++++
.../utils/google_app_engine/Dockerfile | 25 +
.../additional_requirements.txt | 4 +
.../utils/google_app_engine/app.yaml | 14 +
.../utils/loggers/__init__.py | 168 +++
.../utils/loggers/wandb/README.md | 152 +++
.../utils/loggers/wandb/__init__.py | 0
.../utils/loggers/wandb/log_dataset.py | 27 +
.../utils/loggers/wandb/sweep.py | 41 +
.../utils/loggers/wandb/sweep.yaml | 143 +++
.../utils/loggers/wandb/wandb_utils.py | 562 +++++++++
.../utils/loss.py | 222 ++++
.../utils/metrics.py | 342 ++++++
.../utils/plots.py | 471 ++++++++
.../utils/torch_utils.py | 329 ++++++
74 files changed, 7496 insertions(+)
create mode 100644 python/contrib/YOLOv5driver_assistant_system/.project
create mode 100644 python/contrib/YOLOv5driver_assistant_system/README_CN.md
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_op.cfg
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_script.cfg
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/fusion.cfg
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/simple_config.cfg
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/skip_layers.cfg
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/patch/v2.0.patch
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/patch/v3.1.patch
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/patch/v4.0.patch
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/patch/v5.0.patch
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/patch/v6.0.patch
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/patch/v6.1.patch
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/quantify/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/quantify/calib_img_list.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/quantify/gen_calib_data.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/util/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/util/add_nms.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/util/dataset.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/common/util/model.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/.keep
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/aipp_nv12.cfg
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/fusion_result.json
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5026.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5027.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5028.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5029.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5030.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5031.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5032.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5033.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/scripts/.keep
create mode 100644 python/contrib/YOLOv5driver_assistant_system/scripts/object_detection.conf
create mode 100644 python/contrib/YOLOv5driver_assistant_system/scripts/sample_run.sh
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/.keep
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/DisAndYolov5.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/configure.json
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/filename.npy
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/model.yaml
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/trafficline.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/yolov5.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/src/yolov5detect.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/activations.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/augmentations.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/autoanchor.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/autobatch.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/aws/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/aws/mime.sh
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/aws/resume.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/aws/userdata.sh
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/benchmarks.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/callbacks.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/datasets.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/downloads.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/flask_rest_api/README.md
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/flask_rest_api/example_request.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/flask_rest_api/restapi.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/general.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/google_app_engine/Dockerfile
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/google_app_engine/additional_requirements.txt
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/google_app_engine/app.yaml
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/wandb/README.md
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/wandb/__init__.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/wandb/log_dataset.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/wandb/sweep.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/wandb/sweep.yaml
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loggers/wandb/wandb_utils.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/loss.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/metrics.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/plots.py
create mode 100644 python/contrib/YOLOv5driver_assistant_system/utils/torch_utils.py
diff --git a/python/contrib/YOLOv5driver_assistant_system/.project b/python/contrib/YOLOv5driver_assistant_system/.project
new file mode 100644
index 000000000..ac1f7bac0
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/.project
@@ -0,0 +1,8 @@
+{
+ "type": "Ascend ACL App",
+ "project_type": "Custom",
+ "project_desc": "",
+ "target": "",
+ "target_id": "",
+ "adk_version": "1.73.5.1.B050"
+}
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/README_CN.md b/python/contrib/YOLOv5driver_assistant_system/README_CN.md
new file mode 100644
index 000000000..884c40bcd
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/README_CN.md
@@ -0,0 +1,87 @@
+本样例为大家学习昇腾软件栈提供参考,非商业目的!
+## 目标检测样例
+功能:使用yolov5目标检测搭建辅助驾驶系统,包括车道线识别,测算前车距离,路标、车辆识别功能。
+样例输入:树莓摄像头视频。
+样例输出:presenter界面展现检测结果。
+
+### 前置条件
+请检查以下条件要求是否满足,如不满足请按照备注进行相应处理。如果CANN版本升级,请同步检查第三方依赖是否需要重新安装(5.0.4及以上版本第三方依赖和5.0.4以下版本有差异,需要重新安装)。
+| 条件 | 要求 | 备注 |
+|---|---|---|
+| CANN版本 | >=5.0.4 | 请参考CANN样例仓介绍中的[安装步骤](https://gitee.com/ascend/samples#%E5%AE%89%E8%A3%85)完成CANN安装,如果CANN低于要求版本请根据[版本说明](https://gitee.com/ascend/samples/blob/master/README_CN.md#%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E)切换samples仓到对应CANN版本 |
+| 硬件要求 | Atlas200DK/Atlas300([ai1s](https://support.huaweicloud.com/productdesc-ecs/ecs_01_0047.html#ecs_01_0047__section78423209366)) | 当前已在Atlas200DK和Atlas300测试通过,产品说明请参考[硬件平台](https://ascend.huawei.com/zh/#/hardware/product) ,其他产品可能需要另做适配|
+| 第三方依赖 | python-acllite | 请参考[第三方依赖安装指导(python样例)](../../../environment)选择需要的依赖完成安装 |
+
+### 样例准备
+
+1. 获取源码包。
+
+ 可以使用以下两种方式下载,请选择其中一种进行源码准备。
+ - 命令行方式下载(下载时间较长,但步骤简单)。
+ ```
+ # 开发环境,非root用户命令行中执行以下命令下载源码仓。
+ cd ${HOME}
+ git clone https://gitee.com/ascend/samples.git
+ ```
+ **注:如果需要切换到其它tag版本,以v0.5.0为例,可执行以下命令。**
+ ```
+ git checkout v0.5.0
+ ```
+ - 压缩包方式下载(下载时间较短,但步骤稍微复杂)。
+ **注:如果需要下载其它版本代码,请先请根据前置条件说明进行samples仓分支切换。**
+ ```
+ # 1. samples仓右上角选择 【克隆/下载】 下拉框并选择 【下载ZIP】。
+ # 2. 将ZIP包上传到开发环境中的普通用户家目录中,【例如:${HOME}/ascend-samples-master.zip】。
+ # 3. 开发环境中,执行以下命令,解压zip包。
+ cd ${HOME}
+ unzip ascend-samples-master.zip
+ ```
+
+2. 获取此应用中所需要的原始网络模型。
+ | **模型名称** | **模型说明** | **模型下载路径** |
+ | ------------ | --------------------------------- | ------------------------------------------------------------ |
+ | yolov5s | 是基于pytorch的yolov5目标检测模型。 | 请参考[https://github.com/ultralytics/yolov5](https://github.com/ultralytics/yolov5)。 |
+
+ ```
+ # 为了方便下载,在这里直接给出原始模型下载及模型转换命令,可以直接拷贝执行。也可以参照上表在modelzoo中下载并手工转换,以了解更多细节。
+ cd ${HOME}/samples/python/contrib/YOLOv5_driver_assistant_system/model
+ wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
+ atc --model=yolov5s.onnx
+ --framework=5
+ --output=yolov5
+ --soc_version=Ascend310
+ --insert_op_conf=aipp_nv12.cfg
+ --input_shape="images:1,3,640,640"
+ --output_type=FP16 --input_format=NCHW
+ ```
+
+### 样例运行
+
+1. 执行以下命令,将开发环境的 **object_detection_camera** 目录上传到运行环境中,例如 **/home/HwHiAiUser**,并以HwHiAiUser(运行用户)登录运行环境(Host)。
+ ```
+ # 【xxx.xxx.xxx.xxx】为运行环境ip,200DK在USB连接时一般为192.168.1.2,300(ai1s)为对应的公网ip。
+ scp -r $HOME/samples/python/contribute/YOLOv5_driver_assistant_system HwHiAiUser@xxx.xxx.xxx.xxx:/home/HwHiAiUser
+ ssh HwHiAiUser@xxx.xxx.xxx.xxx
+ cd $HOME/samples/python/contribute/YOLOv5_driver_assistant_system/script
+ ```
+
+2. 运行样例。
+ ```
+ bash sample_run.sh
+ ```
+
+### 查看结果
+
+1. 打开presentserver网页界面。
+ - 使用产品为200DK开发者板。
+ 打开启动Presenter Server服务时提示的URL即可。
+ - 使用产品为300加速卡(ai1s云端推理环境)。
+ **以300加速卡(ai1s)内网ip为192.168.0.194,公网ip为124.70.8.192举例说明。**
+ 启动Presenter Server服务时提示为Please visit [http://192.168.0.194:7009](http://192.168.0.194:7009/) for display server。
+ 只需要将URL中的内网ip:192.168.0.194替换为公网ip:124.70.8.192,则URL为 [http://124.70.8.192:7009。](http://124.70.8.192:7009。/)
+ 然后在windows下的浏览器中打开URL即可。
+2. 等待Presenter Agent传输数据给服务端,单击“Refresh“刷新,当有数据时相应的Channel 的Status变成绿色。
+3. 单击右侧对应的View Name链接,查看结果。
+
+### 常见错误
+请参考[常见问题定位](https://gitee.com/ascend/samples/wikis/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E5%AE%9A%E4%BD%8D/%E4%BB%8B%E7%BB%8D)对遇到的错误进行排查。如果wiki中不包含,请在samples仓提issue反馈。
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/__init__.py b/python/contrib/YOLOv5driver_assistant_system/common/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_op.cfg b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_op.cfg
new file mode 100644
index 000000000..fa2d2d9a6
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_op.cfg
@@ -0,0 +1,7 @@
+calibration:
+{
+ input_data_dir: calib_data/images_bs16.bin,calib_data/img_info_bs16.bin
+ input_shape: images:16,3,640,640;img_info:16,4
+ config_file: common/atc_cfg/simple_config.cfg
+ infer_soc: Ascend310P3
+}
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_script.cfg b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_script.cfg
new file mode 100644
index 000000000..51cdd77d1
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/compression_nms_script.cfg
@@ -0,0 +1,7 @@
+calibration:
+{
+ input_data_dir: calib_data/images_bs16.bin
+ input_shape: images:16,3,640,640
+ config_file: common/atc_cfg/simple_config.cfg
+ infer_soc: Ascend310P3
+}
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/fusion.cfg b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/fusion.cfg
new file mode 100644
index 000000000..0436d5488
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/fusion.cfg
@@ -0,0 +1 @@
+TbeConvDequantSigmoidMulAddFusionPass:on
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/simple_config.cfg b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/simple_config.cfg
new file mode 100644
index 000000000..2c5b8a290
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/simple_config.cfg
@@ -0,0 +1 @@
+skip_layers: []
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/skip_layers.cfg b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/skip_layers.cfg
new file mode 100644
index 000000000..bc4e553d4
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/atc_cfg/skip_layers.cfg
@@ -0,0 +1,13 @@
+##### nms_op
+## yolov5n-6.1
+skip_layers : ["Conv_0","Conv_3","Conv_155","Conv_198","Conv_175","Conv_199","Conv_195","Conv_200"]
+
+## yolov5l-6.1
+skip_layers : ["Conv_0","Conv_3","Conv_277","Conv_344","Conv_309","Conv_345","Conv_341","Conv_346"]
+
+##### nms_script
+## yolov5n-6.1
+skip_layers : ["Conv_0","Conv_3","Conv_155","Conv_198","Conv_175","Conv_297","Conv_195","Conv_396"]
+
+## yolov5l-6.1
+skip_layers : ["Conv_0","Conv_3","Conv_277","Conv_344","Conv_309","Conv_443","Conv_341","Conv_542"]
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/patch/v2.0.patch b/python/contrib/YOLOv5driver_assistant_system/common/patch/v2.0.patch
new file mode 100644
index 000000000..27035452f
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/patch/v2.0.patch
@@ -0,0 +1,78 @@
+diff --git a/models/export.py b/models/export.py
+index 2097df5..a6ccc37 100644
+--- a/models/export.py
++++ b/models/export.py
+@@ -14,6 +14,8 @@ if __name__ == '__main__':
+ parser.add_argument('--weights', type=str, default='./yolov5s.pt', help='weights path')
+ parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size')
+ parser.add_argument('--batch-size', type=int, default=1, help='batch size')
++ parser.add_argument('--opset', type=int, default=11, help='ONNX: opset version')
++ parser.add_argument('--dynamic', action='store_true', help='ONNX: dynamic axes')
+ opt = parser.parse_args()
+ opt.img_size *= 2 if len(opt.img_size) == 1 else 1 # expand
+ print(opt)
+@@ -28,16 +30,6 @@ if __name__ == '__main__':
+ model.model[-1].export = True # set Detect() layer export=True
+ y = model(img) # dry run
+
+- # TorchScript export
+- try:
+- print('\nStarting TorchScript export with torch %s...' % torch.__version__)
+- f = opt.weights.replace('.pt', '.torchscript.pt') # filename
+- ts = torch.jit.trace(model, img)
+- ts.save(f)
+- print('TorchScript export success, saved as %s' % f)
+- except Exception as e:
+- print('TorchScript export failure: %s' % e)
+-
+ # ONNX export
+ try:
+ import onnx
+@@ -45,29 +37,18 @@ if __name__ == '__main__':
+ print('\nStarting ONNX export with onnx %s...' % onnx.__version__)
+ f = opt.weights.replace('.pt', '.onnx') # filename
+ model.fuse() # only for ONNX
+- torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
+- output_names=['classes', 'boxes'] if y is None else ['output'])
++ torch.onnx.export(model, img, f, verbose=False, opset_version=opt.opset, input_names=['images'],
++ output_names=['classes', 'boxes'] if y is None else ['output'],
++ dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # size(1,3,640,640)
++ 'output': {0: 'batch'}} if opt.dynamic else None)
+
+ # Checks
+ onnx_model = onnx.load(f) # load onnx model
+ onnx.checker.check_model(onnx_model) # check onnx model
+- print(onnx.helper.printable_graph(onnx_model.graph)) # print a human readable model
++ # print(onnx.helper.printable_graph(onnx_model.graph)) # print a human readable model
+ print('ONNX export success, saved as %s' % f)
+ except Exception as e:
+ print('ONNX export failure: %s' % e)
+
+- # CoreML export
+- try:
+- import coremltools as ct
+-
+- print('\nStarting CoreML export with coremltools %s...' % ct.__version__)
+- # convert model from torchscript and apply pixel scaling as per detect.py
+- model = ct.convert(ts, inputs=[ct.ImageType(name='images', shape=img.shape, scale=1 / 255.0, bias=[0, 0, 0])])
+- f = opt.weights.replace('.pt', '.mlmodel') # filename
+- model.save(f)
+- print('CoreML export success, saved as %s' % f)
+- except Exception as e:
+- print('CoreML export failure: %s' % e)
+-
+ # Finish
+ print('\nExport complete. Visualize with https://github.com/lutzroeder/netron.')
+diff --git a/models/yolo.py b/models/yolo.py
+index 16638ed..676aa04 100644
+--- a/models/yolo.py
++++ b/models/yolo.py
+@@ -25,6 +25,8 @@ class Detect(nn.Module):
+ self.training |= self.export
+ for i in range(self.nl):
+ x[i] = self.m[i](x[i]) # conv
++ if torch.onnx.is_in_onnx_export():
++ continue
+ bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
+ x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/patch/v3.1.patch b/python/contrib/YOLOv5driver_assistant_system/common/patch/v3.1.patch
new file mode 100644
index 000000000..8d7b12765
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/patch/v3.1.patch
@@ -0,0 +1,74 @@
+diff --git a/models/export.py b/models/export.py
+index c5e96f1..2f7be89 100644
+--- a/models/export.py
++++ b/models/export.py
+@@ -23,6 +23,8 @@ if __name__ == '__main__':
+ parser.add_argument('--weights', type=str, default='./yolov5s.pt', help='weights path') # from yolov5/models/
+ parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width
+ parser.add_argument('--batch-size', type=int, default=1, help='batch size')
++ parser.add_argument('--opset', type=int, default=11, help='ONNX: opset version')
++ parser.add_argument('--dynamic', action='store_true', help='ONNX: dynamic axes')
+ opt = parser.parse_args()
+ opt.img_size *= 2 if len(opt.img_size) == 1 else 1 # expand
+ print(opt)
+@@ -50,24 +52,16 @@ if __name__ == '__main__':
+ model.model[-1].export = True # set Detect() layer export=True
+ y = model(img) # dry run
+
+- # TorchScript export
+- try:
+- print('\nStarting TorchScript export with torch %s...' % torch.__version__)
+- f = opt.weights.replace('.pt', '.torchscript.pt') # filename
+- ts = torch.jit.trace(model, img)
+- ts.save(f)
+- print('TorchScript export success, saved as %s' % f)
+- except Exception as e:
+- print('TorchScript export failure: %s' % e)
+-
+ # ONNX export
+ try:
+ import onnx
+
+ print('\nStarting ONNX export with onnx %s...' % onnx.__version__)
+ f = opt.weights.replace('.pt', '.onnx') # filename
+- torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
+- output_names=['classes', 'boxes'] if y is None else ['output'])
++ torch.onnx.export(model, img, f, verbose=False, opset_version=opt.opset, input_names=['images'],
++ output_names=['classes', 'boxes'] if y is None else ['output'],
++ dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # size(1,3,640,640)
++ 'output': {0: 'batch'}} if opt.dynamic else None)
+
+ # Checks
+ onnx_model = onnx.load(f) # load onnx model
+@@ -77,18 +71,5 @@ if __name__ == '__main__':
+ except Exception as e:
+ print('ONNX export failure: %s' % e)
+
+- # CoreML export
+- try:
+- import coremltools as ct
+-
+- print('\nStarting CoreML export with coremltools %s...' % ct.__version__)
+- # convert model from torchscript and apply pixel scaling as per detect.py
+- model = ct.convert(ts, inputs=[ct.ImageType(name='image', shape=img.shape, scale=1 / 255.0, bias=[0, 0, 0])])
+- f = opt.weights.replace('.pt', '.mlmodel') # filename
+- model.save(f)
+- print('CoreML export success, saved as %s' % f)
+- except Exception as e:
+- print('CoreML export failure: %s' % e)
+-
+ # Finish
+ print('\nExport complete (%.2fs). Visualize with https://github.com/lutzroeder/netron.' % (time.time() - t))
+diff --git a/models/yolo.py b/models/yolo.py
+index e1c30ba..cf35403 100644
+--- a/models/yolo.py
++++ b/models/yolo.py
+@@ -41,6 +41,8 @@ class Detect(nn.Module):
+ self.training |= self.export
+ for i in range(self.nl):
+ x[i] = self.m[i](x[i]) # conv
++ if torch.onnx.is_in_onnx_export():
++ continue
+ bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
+ x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/patch/v4.0.patch b/python/contrib/YOLOv5driver_assistant_system/common/patch/v4.0.patch
new file mode 100644
index 000000000..69aac7671
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/patch/v4.0.patch
@@ -0,0 +1,87 @@
+diff --git a/models/experimental.py b/models/experimental.py
+index 2dbbf7f..941b2dc 100644
+--- a/models/experimental.py
++++ b/models/experimental.py
+@@ -114,7 +114,7 @@ def attempt_load(weights, map_location=None):
+ # Loads an ensemble of models weights=[a,b,c] or a single model weights=[a] or weights=a
+ model = Ensemble()
+ for w in weights if isinstance(weights, list) else [weights]:
+- attempt_download(w)
++ # attempt_download(w)
+ model.append(torch.load(w, map_location=map_location)['model'].float().fuse().eval()) # load FP32 model
+
+ # Compatibility updates
+diff --git a/models/export.py b/models/export.py
+index 057658a..b27436b 100644
+--- a/models/export.py
++++ b/models/export.py
+@@ -23,6 +23,8 @@ if __name__ == '__main__':
+ parser.add_argument('--weights', type=str, default='./yolov5s.pt', help='weights path') # from yolov5/models/
+ parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width
+ parser.add_argument('--batch-size', type=int, default=1, help='batch size')
++ parser.add_argument('--opset', type=int, default=11, help='ONNX: opset version')
++ parser.add_argument('--dynamic', action='store_true', help='ONNX: dynamic axes')
+ opt = parser.parse_args()
+ opt.img_size *= 2 if len(opt.img_size) == 1 else 1 # expand
+ print(opt)
+@@ -53,24 +55,16 @@ if __name__ == '__main__':
+ model.model[-1].export = True # set Detect() layer export=True
+ y = model(img) # dry run
+
+- # TorchScript export
+- try:
+- print('\nStarting TorchScript export with torch %s...' % torch.__version__)
+- f = opt.weights.replace('.pt', '.torchscript.pt') # filename
+- ts = torch.jit.trace(model, img)
+- ts.save(f)
+- print('TorchScript export success, saved as %s' % f)
+- except Exception as e:
+- print('TorchScript export failure: %s' % e)
+-
+ # ONNX export
+ try:
+ import onnx
+
+ print('\nStarting ONNX export with onnx %s...' % onnx.__version__)
+ f = opt.weights.replace('.pt', '.onnx') # filename
+- torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
+- output_names=['classes', 'boxes'] if y is None else ['output'])
++ torch.onnx.export(model, img, f, verbose=False, opset_version=opt.opset, input_names=['images'],
++ output_names=['classes', 'boxes'] if y is None else ['output'],
++ dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # size(1,3,640,640)
++ 'output': {0: 'batch'}} if opt.dynamic else None)
+
+ # Checks
+ onnx_model = onnx.load(f) # load onnx model
+@@ -80,18 +74,5 @@ if __name__ == '__main__':
+ except Exception as e:
+ print('ONNX export failure: %s' % e)
+
+- # CoreML export
+- try:
+- import coremltools as ct
+-
+- print('\nStarting CoreML export with coremltools %s...' % ct.__version__)
+- # convert model from torchscript and apply pixel scaling as per detect.py
+- model = ct.convert(ts, inputs=[ct.ImageType(name='image', shape=img.shape, scale=1 / 255.0, bias=[0, 0, 0])])
+- f = opt.weights.replace('.pt', '.mlmodel') # filename
+- model.save(f)
+- print('CoreML export success, saved as %s' % f)
+- except Exception as e:
+- print('CoreML export failure: %s' % e)
+-
+ # Finish
+ print('\nExport complete (%.2fs). Visualize with https://github.com/lutzroeder/netron.' % (time.time() - t))
+diff --git a/models/yolo.py b/models/yolo.py
+index 5dc8b57..e3cc745 100644
+--- a/models/yolo.py
++++ b/models/yolo.py
+@@ -42,6 +42,8 @@ class Detect(nn.Module):
+ self.training |= self.export
+ for i in range(self.nl):
+ x[i] = self.m[i](x[i]) # conv
++ if torch.onnx.is_in_onnx_export():
++ continue
+ bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
+ x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/patch/v5.0.patch b/python/contrib/YOLOv5driver_assistant_system/common/patch/v5.0.patch
new file mode 100644
index 000000000..378360bd7
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/patch/v5.0.patch
@@ -0,0 +1,73 @@
+diff --git a/models/export.py b/models/export.py
+index 11e60c7..e8e4093 100644
+--- a/models/export.py
++++ b/models/export.py
+@@ -24,6 +24,7 @@ if __name__ == '__main__':
+ parser.add_argument('--weights', type=str, default='./yolov5s.pt', help='weights path') # from yolov5/models/
+ parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width
+ parser.add_argument('--batch-size', type=int, default=1, help='batch size')
++ parser.add_argument('--opset', type=int, default=11, help='ONNX: opset version')
+ parser.add_argument('--dynamic', action='store_true', help='dynamic ONNX axes')
+ parser.add_argument('--grid', action='store_true', help='export Detect() layer grid')
+ parser.add_argument('--device', default='cpu', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
+@@ -58,26 +59,16 @@ if __name__ == '__main__':
+ model.model[-1].export = not opt.grid # set Detect() layer grid export
+ y = model(img) # dry run
+
+- # TorchScript export
+- try:
+- print('\nStarting TorchScript export with torch %s...' % torch.__version__)
+- f = opt.weights.replace('.pt', '.torchscript.pt') # filename
+- ts = torch.jit.trace(model, img)
+- ts.save(f)
+- print('TorchScript export success, saved as %s' % f)
+- except Exception as e:
+- print('TorchScript export failure: %s' % e)
+-
+ # ONNX export
+ try:
+ import onnx
+
+ print('\nStarting ONNX export with onnx %s...' % onnx.__version__)
+ f = opt.weights.replace('.pt', '.onnx') # filename
+- torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
++ torch.onnx.export(model, img, f, verbose=False, opset_version=opt.opset, input_names=['images'],
+ output_names=['classes', 'boxes'] if y is None else ['output'],
+ dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # size(1,3,640,640)
+- 'output': {0: 'batch', 2: 'y', 3: 'x'}} if opt.dynamic else None)
++ 'output': {0: 'batch'}} if opt.dynamic else None)
+
+ # Checks
+ onnx_model = onnx.load(f) # load onnx model
+@@ -87,18 +78,5 @@ if __name__ == '__main__':
+ except Exception as e:
+ print('ONNX export failure: %s' % e)
+
+- # CoreML export
+- try:
+- import coremltools as ct
+-
+- print('\nStarting CoreML export with coremltools %s...' % ct.__version__)
+- # convert model from torchscript and apply pixel scaling as per detect.py
+- model = ct.convert(ts, inputs=[ct.ImageType(name='image', shape=img.shape, scale=1 / 255.0, bias=[0, 0, 0])])
+- f = opt.weights.replace('.pt', '.mlmodel') # filename
+- model.save(f)
+- print('CoreML export success, saved as %s' % f)
+- except Exception as e:
+- print('CoreML export failure: %s' % e)
+-
+ # Finish
+ print('\nExport complete (%.2fs). Visualize with https://github.com/lutzroeder/netron.' % (time.time() - t))
+diff --git a/models/yolo.py b/models/yolo.py
+index f730a1e..0fb19a6 100644
+--- a/models/yolo.py
++++ b/models/yolo.py
+@@ -43,6 +43,8 @@ class Detect(nn.Module):
+ self.training |= self.export
+ for i in range(self.nl):
+ x[i] = self.m[i](x[i]) # conv
++ if torch.onnx.is_in_onnx_export():
++ continue
+ bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
+ x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/patch/v6.0.patch b/python/contrib/YOLOv5driver_assistant_system/common/patch/v6.0.patch
new file mode 100644
index 000000000..cd0ddefc4
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/patch/v6.0.patch
@@ -0,0 +1,29 @@
+diff --git a/export.py b/export.py
+index 2aca0f3..0ebcdf3 100644
+--- a/export.py
++++ b/export.py
+@@ -347,7 +347,7 @@ def parse_opt():
+ parser.add_argument('--iou-thres', type=float, default=0.45, help='TF.js NMS: IoU threshold')
+ parser.add_argument('--conf-thres', type=float, default=0.25, help='TF.js NMS: confidence threshold')
+ parser.add_argument('--include', nargs='+',
+- default=['torchscript', 'onnx'],
++ default=['onnx'],
+ help='available formats are (torchscript, onnx, coreml, saved_model, pb, tflite, tfjs)')
+ opt = parser.parse_args()
+ print_args(FILE.stem, opt)
+diff --git a/models/yolo.py b/models/yolo.py
+index 497a0e9..b1aae56 100644
+--- a/models/yolo.py
++++ b/models/yolo.py
+@@ -51,8 +51,11 @@ class Detect(nn.Module):
+
+ def forward(self, x):
+ z = [] # inference output
++ self.training = True
+ for i in range(self.nl):
+ x[i] = self.m[i](x[i]) # conv
++ if torch.onnx.is_in_onnx_export():
++ continue
+ bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
+ x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/patch/v6.1.patch b/python/contrib/YOLOv5driver_assistant_system/common/patch/v6.1.patch
new file mode 100644
index 000000000..52be400bd
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/patch/v6.1.patch
@@ -0,0 +1,29 @@
+diff --git a/export.py b/export.py
+index 15e92a7..f381e0e 100644
+--- a/export.py
++++ b/export.py
+@@ -542,7 +542,7 @@ def parse_opt():
+ parser.add_argument('--iou-thres', type=float, default=0.45, help='TF.js NMS: IoU threshold')
+ parser.add_argument('--conf-thres', type=float, default=0.25, help='TF.js NMS: confidence threshold')
+ parser.add_argument('--include', nargs='+',
+- default=['torchscript', 'onnx'],
++ default=['onnx'],
+ help='torchscript, onnx, openvino, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs')
+ opt = parser.parse_args()
+ print_args(FILE.stem, opt)
+diff --git a/models/yolo.py b/models/yolo.py
+index f659a04..a2edd82 100644
+--- a/models/yolo.py
++++ b/models/yolo.py
+@@ -48,8 +48,11 @@ class Detect(nn.Module):
+
+ def forward(self, x):
+ z = [] # inference output
++ self.training = True
+ for i in range(self.nl):
+ x[i] = self.m[i](x[i]) # conv
++ if torch.onnx.is_in_onnx_export():
++ continue
+ bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
+ x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/quantify/__init__.py b/python/contrib/YOLOv5driver_assistant_system/common/quantify/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/quantify/calib_img_list.txt b/python/contrib/YOLOv5driver_assistant_system/common/quantify/calib_img_list.txt
new file mode 100644
index 000000000..90d76af61
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/quantify/calib_img_list.txt
@@ -0,0 +1,16 @@
+1 coco/val2017/000000233771.jpg
+2 coco/val2017/000000292082.jpg
+3 coco/val2017/000000360137.jpg
+4 coco/val2017/000000562243.jpg
+5 coco/val2017/000000154947.jpg
+6 coco/val2017/000000162092.jpg
+7 coco/val2017/000000533958.jpg
+8 coco/val2017/000000492878.jpg
+9 coco/val2017/000000080666.jpg
+10 coco/val2017/000000544565.jpg
+11 coco/val2017/000000198510.jpg
+12 coco/val2017/000000110884.jpg
+13 coco/val2017/000000403584.jpg
+14 coco/val2017/000000393282.jpg
+15 coco/val2017/000000426836.jpg
+16 coco/val2017/000000286908.jpg
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/quantify/gen_calib_data.py b/python/contrib/YOLOv5driver_assistant_system/common/quantify/gen_calib_data.py
new file mode 100644
index 000000000..4af578c96
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/quantify/gen_calib_data.py
@@ -0,0 +1,57 @@
+# Copyright 2022 Huawei Technologies Co., Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import cv2
+import numpy as np
+import argparse
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description='YoloV5 offline model inference.')
+ parser.add_argument('--calib_img_list', type=str, default="common/quantify/calib_img_list.txt", help='original data')
+ parser.add_argument('--save_path', type=str, default="./calib_data", help='data for calibration')
+ opt = parser.parse_args()
+
+ images = []
+ img_info = []
+ if not os.path.exists(opt.save_path):
+ os.makedirs(opt.save_path)
+
+ with open(opt.calib_img_list, 'r') as file:
+ calib_imgs = file.read().split('\n')
+
+ for i, calib_img in enumerate(calib_imgs):
+ img_path = calib_img.split()[1]
+ print(img_path)
+ img0 = cv2.imread(img_path)
+ imgh, imgw = img0.shape[:2]
+ img = cv2.resize(img0, (640, 640), interpolation=cv2.INTER_LINEAR)
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
+ img = np.transpose(img, (2, 0, 1)).astype(np.float32)
+ img = np.expand_dims(img, axis=0)
+ img /= 255.0
+
+ images.append(img)
+ img_info.append([640, 640, imgh, imgw])
+
+ images = np.array(images, dtype=np.float16)
+ images_bin_file = f"{opt.save_path}/images_bs{len(calib_imgs)}.bin"
+ print(f"saving images bin file to {images_bin_file}")
+ images.tofile(images_bin_file)
+
+ img_info = np.array(img_info, dtype=np.float16)
+ img_info_bin_file = f"{opt.save_path}/img_info_bs{len(calib_imgs)}.bin"
+ print(f"saving img_info bin file to {img_info_bin_file}")
+ img_info.tofile(img_info_bin_file)
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/util/__init__.py b/python/contrib/YOLOv5driver_assistant_system/common/util/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/util/add_nms.py b/python/contrib/YOLOv5driver_assistant_system/common/util/add_nms.py
new file mode 100644
index 000000000..8f9a912ad
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/util/add_nms.py
@@ -0,0 +1,110 @@
+# Copyright 2022 Huawei Technologies Co., Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sys
+import yaml
+import argparse
+import onnx
+from onnx import helper
+
+from models.experimental import attempt_load
+
+ROOT = './'
+if ROOT not in sys.path:
+ sys.path.append(ROOT) # add ROOT to PATH
+
+
+def ceil_x(value, align_len):
+ return (value + align_len - 1) // align_len * align_len
+
+
+def main(opt, cfg):
+ # load pth to get the anchors
+ pt_model = attempt_load(opt.pt_path, map_location='cpu')
+ m = pt_model.module.model[-1] if hasattr(pt_model, 'module') else pt_model.model[-1]
+ for i in range(m.nl):
+ m.anchors[i] *= m.stride[i]
+
+ # load onnx to modify
+ onnx_model = onnx.load(opt.onnx_path)
+
+ # create yolo pre-detection layer
+ h, w = cfg["img_size"]
+ f_h, f_w = h // 8, w // 8
+ for i in range(m.nl):
+ crd_align_len = ceil_x(f_h * f_w * 2 + 32, 32) // 2
+ obj_align_len = ceil_x(m.na * f_h * f_w * 2 + 32, 32) // 2
+
+ helper.make_tensor_value_info(f"yolo{i}_coord", onnx.TensorProto.FLOAT, ['batch', m.na * 4, crd_align_len])
+ helper.make_tensor_value_info(f"yolo{i}_obj", onnx.TensorProto.FLOAT, ['batch', obj_align_len])
+ helper.make_tensor_value_info(f"yolo{i}_classes", onnx.TensorProto.FLOAT,
+ ['batch', cfg["class_num"], obj_align_len])
+
+ yolo_pre_node = helper.make_node('YoloPreDetection',
+ inputs=[onnx_model.graph.output[i].name],
+ outputs=[f"yolo{i}_coord", f"yolo{i}_obj", f"yolo{i}_classes"],
+ boxes=m.na,
+ coords=4,
+ classes=cfg["class_num"],
+ yolo_version='V5',
+ name=f'yolo_{i}')
+ onnx_model.graph.node.append(yolo_pre_node)
+ f_h, f_w = f_h // 2, f_w // 2
+
+ # create yolo detection output layer
+ img_info = helper.make_tensor_value_info("img_info", onnx.TensorProto.FLOAT, ['batch', 4])
+ box_out = helper.make_tensor_value_info("box_out", onnx.TensorProto.FLOAT, ['batch', 6 * 1024])
+ box_out_num = helper.make_tensor_value_info("box_out_num", onnx.TensorProto.INT32, ['batch', 8])
+
+ yolo_detout_node = helper.make_node('YoloV5DetectionOutput',
+ inputs=[f"yolo{i}_coord" for i in range(m.nl)] +
+ [f"yolo{i}_obj" for i in range(m.nl)] +
+ [f"yolo{i}_classes" for i in range(m.nl)] +
+ ['img_info'],
+ outputs=['box_out', 'box_out_num'],
+ boxes=m.na,
+ coords=4,
+ classes=cfg["class_num"],
+ pre_nms_topn=1024,
+ post_nms_topn=1024,
+ relative=1,
+ out_box_dim=2,
+ obj_threshold=cfg["conf_thres"],
+ score_threshold=cfg["conf_thres"],
+ iou_threshold=cfg["iou_thres"],
+ biases=m.anchors.numpy().flatten().astype('float16').tolist(),
+ name='YoloV5DetectionOutput_1')
+
+ # add input and output
+ onnx_model.graph.node.append(yolo_detout_node)
+ while len(onnx_model.graph.output) > 0:
+ onnx_model.graph.output.remove(onnx_model.graph.output[0])
+
+ onnx_model.graph.input.append(img_info)
+ onnx_model.graph.output.append(box_out)
+ onnx_model.graph.output.append(box_out_num)
+
+ onnx.save(onnx_model, opt.onnx_path.split('.onnx')[0] + "_nms.onnx")
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser("Add NMS operator")
+ parser.add_argument('--pt-path', type=str, default='./yolov5s.pt', help='pt_model path')
+ parser.add_argument('--onnx-path', type=str, default='./yolov5s.onnx', help='onnx_model path')
+ parser.add_argument('--cfg-file', type=str, default='model.yaml', help='model parameters config file')
+ opt = parser.parse_args()
+
+ with open(opt.cfg_file) as f:
+ cfg = yaml.load(f, Loader=yaml.FullLoader)
+ main(opt, cfg)
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/util/dataset.py b/python/contrib/YOLOv5driver_assistant_system/common/util/dataset.py
new file mode 100644
index 000000000..49ba13e4b
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/util/dataset.py
@@ -0,0 +1,170 @@
+# Copyright 2022 Huawei Technologies Co., Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import glob
+
+import cv2
+import yaml
+import numpy as np
+import torch
+from pycocotools.coco import COCO
+from pycocotools.cocoeval import COCOeval
+
+
+class BatchDataLoader:
+ def __init__(self, data_path='coco', img_size=(640, 640), batch_size=4):
+ self.img_path = glob.glob(os.path.join(data_path, 'val2017/*.jpg'))
+ self.img_path.sort()
+ self.img_num = len(self.img_path)
+ self.img_size = img_size
+ self.batch_size = batch_size
+
+ def __len__(self):
+ return self.img_num // self.batch_size + int(self.img_num % self.batch_size > 0)
+
+ @staticmethod
+ def read_data(img_path, img_size):
+ img_name = os.path.basename(img_path)
+ img0 = cv2.imread(img_path)
+ imgh, imgw = img0.shape[:2]
+ img, ratio, pad = letterbox(img0, new_shape=img_size) # padding resize
+ shape = (imgh, imgw), ((img0.shape[0] / imgh, img0.shape[1] / imgw), pad) # for COCO mAP rescaling
+ img_info = np.array([img_size[0], img_size[1], imgh, imgw], dtype=np.float32)
+ return img0, img.astype(np.float32), img_info, img_name, shape
+
+ def __getitem__(self, item):
+ if (item + 1) * self.batch_size <= self.img_num:
+ slice_end = (item + 1) * self.batch_size
+ pad_num = 0
+ else:
+ slice_end = self.img_num
+ pad_num = (item + 1) * self.batch_size - self.img_num
+
+ img0 = []
+ img = []
+ img_info = []
+ img_name = []
+ shapes = []
+ for path in self.img_path[item * self.batch_size:slice_end]:
+ im0, im, info, name, shape = self.read_data(path, self.img_size)
+ im = im.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR tp RGB
+ im /= 255.0
+ im = np.ascontiguousarray(im)
+ img.append(im)
+ img_info.append(info)
+ img0.append(im0)
+ img_name.append(name)
+ shapes.append(shape)
+ valid_num = len(img)
+ for _ in range(pad_num):
+ img.append(img[0])
+ img_info.append(img_info[0])
+ return valid_num, np.stack(img, axis=0), np.stack(img_info, axis=0), img0, img_name, shapes
+
+
+def evaluate(cocoGt_file, cocoDt_file):
+ cocoGt = COCO(cocoGt_file)
+ cocoDt = cocoGt.loadRes(cocoDt_file)
+ cocoEval = COCOeval(cocoGt, cocoDt, 'bbox')
+ cocoEval.evaluate()
+ cocoEval.accumulate()
+ cocoEval.summarize()
+
+
+def coco80_to_coco91_class():
+ # converts 80-index (val2014/val2017) to 91-index (paper)
+ x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90]
+ return x
+
+
+def letterbox(img, new_shape=(640, 640), color=(114, 114, 114), auto=False, scaleFill=False, scaleup=True, stride=32):
+ # Resize image to a 32-pixel-multiple rectangle https://github.com/ultralytics/yolov3/issues/232
+ shape = img.shape[:2] # current shape [height, width]
+ if isinstance(new_shape, int):
+ new_shape = (new_shape, new_shape)
+
+ # Scale ratio (new / old)
+ r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
+ if not scaleup: # only scale down, do not scale up (for better test mAP)
+ r = min(r, 1.0)
+
+ # Compute padding
+ ratio = r, r # width, height ratios
+ new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
+ dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding
+ if auto: # minimum rectangle
+ dw, dh = np.mod(dw, stride), np.mod(dh, stride) # wh padding
+ elif scaleFill: # stretch
+ dw, dh = 0.0, 0.0
+ new_unpad = (new_shape[1], new_shape[0])
+ ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios
+
+ dw /= 2 # divide padding into 2 sides
+ dh /= 2
+
+ if shape[::-1] != new_unpad: # resize
+ img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)
+ top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
+ left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
+ img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # add border
+ return img, ratio, (dw, dh)
+
+
+def make_grid(anchors, nx=20, ny=20):
+ na = len(anchors) // 2 # number of anchors
+
+ yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)])
+ grid = torch.stack((xv, yv), 2).expand((1, na, ny, nx, 2)).float()
+ anchor_grid = anchors.view((1, na, 1, 1, 2)).expand((1, na, ny, nx, 2)).float()
+
+ return grid, anchor_grid
+
+
+def correct_bbox(result, anchors, stride, cls_num, out):
+ result = torch.tensor(result)
+ bs, _, ny, nx, _ = result.shape
+ grid, anchor_grid = make_grid(anchors, nx, ny)
+ y = result.float().sigmoid()
+ y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + grid) * stride # xy
+ y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * anchor_grid # wh
+ out.append(y.view(bs, -1, cls_num+5))
+
+
+def xyxy2xywh(x):
+ # Convert nx4 boxes from [x1, y1, x2, y2] to [x, y, w, h] where xy1=top-left, xy2=bottom-right
+ y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)
+ y[:, 0] = (x[:, 0] + x[:, 2]) / 2 # x center
+ y[:, 1] = (x[:, 1] + x[:, 3]) / 2 # y center
+ y[:, 2] = x[:, 2] - x[:, 0] # width
+ y[:, 3] = x[:, 3] - x[:, 1] # height
+ return y
+
+
+def save_coco_json(predn, pred_dict, image_id, class_map):
+ # Save one JSON result {"image_id": 42, "category_id": 18, "bbox": [258.15, 41.29, 348.26, 243.78], "score": 0.236}
+ box = xyxy2xywh(predn[:, :4]) # xywh
+ print("box",box)
+ print("pre",predn)
+ box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
+ for p, b in zip(predn.tolist(), box.tolist()):
+ print("p",p)
+ print("b",b)
+ print("p[5]",int(p[5]))
+ pred_dict.append({'image_id': image_id,
+ 'category_id': class_map[int(p[5])],
+ 'bbox': [round(x, 3) for x in b],
+ 'score': round(p[4], 5)})
diff --git a/python/contrib/YOLOv5driver_assistant_system/common/util/model.py b/python/contrib/YOLOv5driver_assistant_system/common/util/model.py
new file mode 100644
index 000000000..0dc11f611
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/common/util/model.py
@@ -0,0 +1,105 @@
+# Copyright 2022 Huawei Technologies Co., Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import torch
+from tqdm import tqdm
+import numpy as np
+
+from pathlib import Path
+from common.util.dataset import coco80_to_coco91_class, correct_bbox, save_coco_json
+
+try:
+ from utils.general import non_max_suppression, scale_coords # tag > 2.0
+except:
+ from utils.utils import non_max_suppression, scale_coords # tag = 2.0
+
+
+def forward_nms_op(model, dataloader):
+ pred_results = []
+ for i in tqdm(range(len(dataloader))):
+ # load and preprocess dataset
+ valid_num, img, img_info, img0, img_name, shapes = dataloader[i]
+
+ # om infer
+ result = model.infer([img.astype(np.float16), img_info.astype(np.float16)])
+ box_out = result[0]
+ box_out_num = result[1]
+
+ for idx in range(valid_num):
+ # coordinate change
+ num_det = int(box_out_num[idx][0])
+ boxout = box_out[idx][:num_det * 6].reshape(6, -1).transpose().astype(np.float32) # 6xN -> Nx6
+ # append to COCO-JSON dictionary
+ image_id = int(img_name[idx].split('.')[0])
+ save_coco_json(boxout, pred_results, image_id, coco80_to_coco91_class())
+
+ return pred_results
+
+
+def forward_nms_script(model, dataloader, cfg):
+ pred_results = []
+ for (img, targets, paths, shapes) in tqdm(dataloader):
+ img = img.half()
+ img /= 255.0 # 0 - 255 to 0.0 - 1.0
+ nb, _, height, width = img.shape # batch size, channels, height, width
+
+ padding = False
+ batch_size = model.get_inputs()[0].shape[0]
+ if nb != batch_size:
+ img = np.pad(img, ((0, batch_size - nb), (0,0), (0,0),(0,0)), 'constant', constant_values=0)
+ padding = True
+ else:
+ img = img.numpy()
+ # print("img.numpy",img.type)
+ # om infer
+ result = model.infer([img])
+ print(result)
+ print(len(result))
+ if len(result) == 3: # number of output nodes is 3, each shape is (bs, na, no, ny, nx)
+ out = []
+ for i in range(len(result)):
+ anchors = torch.tensor(cfg['anchors'])
+ stride = torch.tensor(cfg['stride'])
+ cls_num = cfg['class_num']
+ if padding == True:
+ result[i] = result[i][:nb]
+ correct_bbox(result[i], anchors[i], stride[i], cls_num, out)
+ box_out = torch.cat(out, 1)
+ else: # only use the first output node, which shape is (bs, -1, no)
+ if padding == True:
+ result[0] = result[0][:nb]
+ box_out = torch.tensor(result[0])
+ print(box_out)
+ # non_max_suppression
+ boxout = nms(box_out, conf_thres=cfg["conf_thres"], iou_thres=cfg["iou_thres"])
+ for idx, pred in enumerate(boxout):
+ try:
+ scale_coords(img[idx].shape[1:], pred[:, :4], shapes[idx][0], shapes[idx][1]) # native-space pred
+ except:
+ pred = torch.tensor([[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]])
+ # append to COCO-JSON dictionary
+ path = Path(paths[idx])
+ image_id = int(path.stem) if path.stem.isnumeric() else path.stem
+ save_coco_json(pred, pred_results, image_id, coco80_to_coco91_class())
+
+ return pred_results
+
+
+def nms(box_out, conf_thres=0.4, iou_thres=0.5):
+ try:
+ boxout = non_max_suppression(box_out, conf_thres=conf_thres, iou_thres=iou_thres, multi_label=True)
+ except:
+ boxout = non_max_suppression(box_out, conf_thres=conf_thres, iou_thres=iou_thres)
+
+ return boxout
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/.keep b/python/contrib/YOLOv5driver_assistant_system/model/.keep
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/aipp_nv12.cfg b/python/contrib/YOLOv5driver_assistant_system/model/aipp_nv12.cfg
new file mode 100644
index 000000000..c3b846834
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/aipp_nv12.cfg
@@ -0,0 +1,28 @@
+aipp_op{
+ aipp_mode:static
+ crop:true
+ rbuv_swap_switch:true
+ input_format : YUV420SP_U8
+ src_image_size_w : 640
+ src_image_size_h : 640
+
+ csc_switch : true
+
+ matrix_r0c0 : 298
+ matrix_r0c1 : 516
+ matrix_r0c2 : 0
+ matrix_r1c0 : 298
+ matrix_r1c1 : -100
+ matrix_r1c2 : -208
+ matrix_r2c0 : 298
+ matrix_r2c1 : 0
+ matrix_r2c2 : 409
+ input_bias_0 : 16
+ input_bias_1 : 128
+ input_bias_2 : 128
+
+ var_reci_chn_0 :0.003921568627451
+ var_reci_chn_1 :0.003921568627451
+ var_reci_chn_2 :0.003921568627451
+}
+
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/fusion_result.json b/python/contrib/YOLOv5driver_assistant_system/model/fusion_result.json
new file mode 100644
index 000000000..decc07d71
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/fusion_result.json
@@ -0,0 +1,103 @@
+{
+ "graph_fusion": {
+ "AConv2dMulFusion": {
+ "effect_times": "0",
+ "match_times": "57"
+ },
+ "ConstToAttrPass": {
+ "effect_times": "5",
+ "match_times": "5"
+ },
+ "ConstToAttrStridedSliceV2Fusion": {
+ "effect_times": "9",
+ "match_times": "9"
+ },
+ "ConvConcatFusionPass": {
+ "effect_times": "0",
+ "match_times": "17"
+ },
+ "ConvToFullyConnectionFusionPass": {
+ "effect_times": "0",
+ "match_times": "60"
+ },
+ "ConvWeightCompressFusionPass": {
+ "effect_times": "0",
+ "match_times": "60"
+ },
+ "FIXPIPEAPREQUANTFUSIONPASS": {
+ "effect_times": "0",
+ "match_times": "60"
+ },
+ "FIXPIPEFUSIONPASS": {
+ "effect_times": "0",
+ "match_times": "60"
+ },
+ "MulAddFusionPass": {
+ "effect_times": "0",
+ "match_times": "14"
+ },
+ "MulSquareFusionPass": {
+ "effect_times": "0",
+ "match_times": "69"
+ },
+ "Pow2SquareFusionPass": {
+ "effect_times": "3",
+ "match_times": "3"
+ },
+ "RefreshInt64ToInt32FusionPass": {
+ "effect_times": "1",
+ "match_times": "1"
+ },
+ "ReshapeTransposeFusionPass": {
+ "effect_times": "0",
+ "match_times": "3"
+ },
+ "SplitConvConcatFusionPass": {
+ "effect_times": "0",
+ "match_times": "17"
+ },
+ "StridedSliceRemovePass": {
+ "effect_times": "0",
+ "match_times": "9"
+ },
+ "SubFusionPass": {
+ "effect_times": "0",
+ "match_times": "3"
+ },
+ "TransdataCastFusionPass": {
+ "effect_times": "0",
+ "match_times": "63"
+ },
+ "TransposedUpdateFusionPass": {
+ "effect_times": "3",
+ "match_times": "3"
+ },
+ "ZConcatDFusionPass": {
+ "effect_times": "0",
+ "match_times": "17"
+ }
+ },
+ "session_and_graph_id": "0_0",
+ "ub_fusion": {
+ "AutomaticUbFusion": {
+ "effect_times": "4",
+ "match_times": "4",
+ "repository_hit_times": "0"
+ },
+ "TbeAippCommonFusionPass": {
+ "effect_times": "1",
+ "match_times": "1",
+ "repository_hit_times": "0"
+ },
+ "TbeConvSigmoidMulQuantFusionPass": {
+ "effect_times": "56",
+ "match_times": "56",
+ "repository_hit_times": "0"
+ },
+ "TbeEltwiseFusionPass": {
+ "effect_times": "3",
+ "match_times": "3",
+ "repository_hit_times": "0"
+ }
+ }
+}
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5026.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5026.txt
new file mode 100644
index 000000000..f425adb38
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5026.txt
@@ -0,0 +1,14 @@
+281468702005088.9
+281468946315104.12
+281468946315104.15
+281468702005088.10
+281468946315104.19
+281468702005088.25
+281468718790496.32
+281468718790496.34
+281468718790496.38
+281468963100512.46
+281468963100512.67
+281468963100512.75
+281468963100512.95
+281468963100512.97
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5027.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5027.txt
new file mode 100644
index 000000000..408478998
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5027.txt
@@ -0,0 +1,7 @@
+281468946315104.5
+281468702005088.28
+281468718790496.30
+281468963100512.45
+281468963100512.49
+281468963100512.71
+281468963100512.78
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5028.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5028.txt
new file mode 100644
index 000000000..b3a827af4
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5028.txt
@@ -0,0 +1,6 @@
+281468954707808.2
+281468963100512.68
+281468963100512.70
+281468963100512.81
+281468963100512.89
+281468963100512.90
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5029.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5029.txt
new file mode 100644
index 000000000..89ef253a4
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5029.txt
@@ -0,0 +1,7 @@
+281468946315104.6
+281468702005088.18
+281468702005088.23
+281468702005088.26
+281468718790496.35
+281468963100512.43
+281468963100512.69
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5030.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5030.txt
new file mode 100644
index 000000000..49b7f3587
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5030.txt
@@ -0,0 +1,7 @@
+281468702005088.8
+281468718790496.36
+281468718790496.41
+281468963100512.44
+281468963100512.58
+281468963100512.94
+281468963100512.96
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5031.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5031.txt
new file mode 100644
index 000000000..bd1abccea
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5031.txt
@@ -0,0 +1,3 @@
+281468702005088.7
+281468963100512.51
+281468963100512.63
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5032.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5032.txt
new file mode 100644
index 000000000..d5cc53f3f
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5032.txt
@@ -0,0 +1,5 @@
+281468702005088.4
+281468963100512.42
+281468963100512.48
+281468963100512.55
+281468963100512.93
diff --git a/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5033.txt b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5033.txt
new file mode 100644
index 000000000..bbc7a1716
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/model/kernel_meta_temp_deeda1690571e6461e61ca2c86060d3e1f651225b6b384463fbb56b184d95274/task_pid_4815_5033.txt
@@ -0,0 +1,16 @@
+281468946315104.3
+281468946315104.11
+281468946315104.13
+281468946315104.14
+281468946315104.17
+281468702005088.20
+281468946315104.22
+281468718790496.29
+281468718790496.31
+281468718790496.33
+281468718790496.39
+281468963100512.47
+281468963100512.50
+281468963100512.61
+281468963100512.62
+281468963100512.66
diff --git a/python/contrib/YOLOv5driver_assistant_system/scripts/.keep b/python/contrib/YOLOv5driver_assistant_system/scripts/.keep
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/contrib/YOLOv5driver_assistant_system/scripts/object_detection.conf b/python/contrib/YOLOv5driver_assistant_system/scripts/object_detection.conf
new file mode 100644
index 000000000..e0d0ace37
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/scripts/object_detection.conf
@@ -0,0 +1,18 @@
+[baseconf]
+# A socket server address to communicate with presenter agent
+presenter_server_ip=192.168.1.2
+
+# The port of presenter agent and server communicate with
+presenter_server_port=7006
+
+#the ip in presenter server view web url
+presenter_view_ip=192.168.1.2
+
+#the ip of atlas200dk board connect with presenter server
+presenter_agent_ip=127.0.0.1
+
+#view entry label in presenter server view web
+channel_name=video
+
+#the data type that send to presenter server from agent, 0:image, 1:video
+content_type=1
diff --git a/python/contrib/YOLOv5driver_assistant_system/scripts/sample_run.sh b/python/contrib/YOLOv5driver_assistant_system/scripts/sample_run.sh
new file mode 100644
index 000000000..b6dd5e5a2
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/scripts/sample_run.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+ScriptPath="$( cd "$(dirname "$BASH_SOURCE")" ; pwd -P )"
+ModelPath="${ScriptPath}/../model"
+conf_file_name="object_detection.conf"
+common_script_dir=${ScriptPath}/../../../../../common
+. ${common_script_dir}/sample_common.sh
+
+function main()
+{
+ echo "[INFO] The sample starts to run"
+
+ running_command="python3 ../src/DisAndYolov5.py"
+ data_command=""
+ parse_presenter_view_ip
+ if [ $? -ne 0 ];then
+ return 1
+ fi
+
+ running_presenter_python
+ if [ $? -ne 0 ];then
+ return 1
+ fi
+}
+main
diff --git a/python/contrib/YOLOv5driver_assistant_system/src/.keep b/python/contrib/YOLOv5driver_assistant_system/src/.keep
new file mode 100644
index 000000000..e69de29bb
diff --git a/python/contrib/YOLOv5driver_assistant_system/src/DisAndYolov5.py b/python/contrib/YOLOv5driver_assistant_system/src/DisAndYolov5.py
new file mode 100644
index 000000000..f1306770e
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/src/DisAndYolov5.py
@@ -0,0 +1,281 @@
+import sys
+sys.path.append("../../../common")
+sys.path.append("../")
+project_path = sys.path[0] + "/../"
+sys.path.append(project_path)
+import datetime
+import numpy as np
+from cameracapture import CameraCapture
+import presenteragent.presenter_channel as presenter_channel
+from acllite_model import AclLiteModel
+from acllite_resource import AclLiteResource
+from yolov5 import Yolov5
+
+import torch
+from tqdm import tqdm
+import numpy as np
+from pathlib import Path
+from common.util.dataset import coco80_to_coco91_class, correct_bbox, save_coco_json
+try:
+ from utils.general import non_max_suppression, scale_coords # tag > 2.0
+except:
+ from utils.utils import non_max_suppression, scale_coords # tag = 2.0
+
+import yaml
+import json
+import argparse
+from ais_bench.infer.interface import InferSession, MemorySummary
+from ais_bench.infer.summary import summary
+
+from utils.datasets import create_dataloader
+from common.util.dataset import BatchDataLoader, evaluate
+from common.util.model import forward_nms_op, forward_nms_script
+import cv2
+import trafficline
+import time
+from threading import Thread
+import queue
+import threading
+import serial
+MODEL_PATH = project_path + "/model/best.om"
+MODEL_WIDTH = 640
+MODEL_HEIGHT = 640
+OBJECT_DETEC_CONF= project_path + "/scripts/object_detection.conf"
+CAMERA_FRAME_WIDTH = 1280
+CAMERA_FRAME_HEIGHT = 720
+turnflag = 0
+cfg_file = project_path + "/src/model.yaml"
+header = b'\xA5'
+footer = b'\x5A'
+imgQueue = queue.Queue(5)
+disQueue = queue.Queue(5)
+def main():
+ """main"""
+ #Initialize acl
+ acl_resource = AclLiteResource()
+ acl_resource.init()
+ #Create a detection network instance, currently using the vgg_ssd network.
+ # When the detection network is replaced, instantiate a new network here
+ detect = Yolov5(acl_resource, MODEL_WIDTH, MODEL_HEIGHT)
+ #Load offline model
+ model = AclLiteModel(MODEL_PATH)
+ #Connect to the presenter server according to the configuration,
+ # and end the execution of the application if the connection fails
+
+ chan = presenter_channel.open_channel(OBJECT_DETEC_CONF)
+ if chan is None:
+ print("Open presenter channel failed")
+ return
+ #Open the CARAMER0 camera on the development board
+ cap = CameraCapture(1)
+
+ # #保存图片
+ # fourcc = cv2.VideoWriter_fourcc('M','J','P','G') # DIVX, XVID, MJPG, X264, WMV1, WMV2
+ # outVideo = cv2.VideoWriter('testwrite.avi', fourcc, 5, (576, 1024))
+
+ with open(cfg_file) as f:
+ cfg = yaml.load(f, Loader=yaml.FullLoader)
+ while True:
+ pred_results = []
+ #Read a picture from the camera
+ image = cap.read()
+ if image is None:
+ print("Get memory from camera failed")
+ break
+ #The detection network processes images into model input data
+ model_input = detect.pre_process(image)
+ if model_input is None:
+ print("Pre process image failed")
+ break
+ #Send data to offline model inference
+ result = model.execute([model_input])
+ # jpeg_image, detection_list = detect.post_process(result, image)
+
+ padding = True
+ nb = 1
+ if len(result) == 3: # number of output nodes is 3, each shape is (bs, na, no, ny, nx)
+ out = []
+ for i in range(len(result)):
+ anchors = torch.tensor(cfg['anchors'])
+ stride = torch.tensor(cfg['stride'])
+ cls_num = cfg['class_num']
+ if padding == True:
+ result[i] = result[i][:nb]
+ correct_bbox(result[i], anchors[i], stride[i], cls_num, out)
+ box_out = torch.cat(out, 1)
+ else: # only use the first output node, which shape is (bs, -1, no)
+ if padding == True:
+ result[0] = result[0][:nb]
+ box_out = torch.tensor(result[0])
+ # non_max_suppression
+ boxout = nms(box_out, conf_thres=cfg["conf_thres"], iou_thres=cfg["iou_thres"])
+ # print(boxout)
+ for idx, pred in enumerate(boxout):
+ #pred的维度决定了目标个数
+ # save_coco_json(pred, pred_results, image_id, coco80_to_coco91_class())
+ jpeg_image, detection_list,dis = detect.post_process(pred, image,perspective_transform,WARPED_SIZE,pixels_per_meter)
+ #发送距离信息
+
+ chan.send_detection_data(CAMERA_FRAME_WIDTH, CAMERA_FRAME_HEIGHT,
+ jpeg_image, detection_list)
+ #将jpeg图片编码成opencv图像
+ jpeg_image = dvpp.jpege(origin_img)
+ pic_data = jpeg_image.byte_data_to_np_array()
+ pic_data = np.array(pic_data, np.uint8)
+ cv_image = cv2.imdecode(pic_data, cv2.IMREAD_COLOR)
+ # cv2.imwrite("test.jpg",cv_image)
+ #找出车道线返回斜率
+ if ( not imgQueue.full() ):
+ imgQueue.put(cv_image)
+ disQueue
+ if ( not disQueue.full() ):
+ disQueue.put(dis)
+ # print(cv_image.shape)
+ # cv2.imwrite('test.jpg',cv_image)
+ # outVideo.write(frame_with_lane)
+ # print(line,center)
+
+ if len(pred_results)!=0:
+ break
+
+
+
+def nms(box_out, conf_thres=0.4, iou_thres=0.5):
+ try:
+ boxout = non_max_suppression(box_out, conf_thres=conf_thres, iou_thres=iou_thres, multi_label=True)
+ except:
+ boxout = non_max_suppression(box_out, conf_thres=conf_thres, iou_thres=iou_thres)
+
+ return boxout
+class serreadThread(Thread):
+ def __init__(self, name,serread): # 可以通过初始化来传递参数
+ super(serreadThread, self).__init__()
+ self.name = name
+ self.serread = serread
+
+ def run(self): # 必须有的函数
+ while True:
+ readdata = self.serread.read()
+ print(f'Received reply: {readdata}')
+#图像处理线程
+class ImgReporter(threading.Thread):
+ def __init__(self, queue,perspective_transform,serial,disqueue):
+ threading.Thread.__init__(self)
+ self.imgData = queue
+ self.dis = disqueue
+ self.perspective_transform = perspective_transform
+ self.serial = serial
+ def run(self):
+ while True:
+ distance = self.dis.get()
+ print("distance=",distance)
+ if distance < 60 and distance > 0:
+ senddata = header + ('T+').encode() + str(abs(distance)).rjust(4,'0').encode() +footer
+ self.serial.write(senddata)
+ # continue
+ time.sleep(0.2)
+ continue
+ img = self.imgData.get()
+ # print(1)
+ line,center= trafficline.findline(img,self.perspective_transform)
+ # print(line,center)
+ if center == -1:
+ continue
+ data = int(center)
+ print(center)
+ if data < 0:
+ senddata = header + ('C-').encode() + str(abs(data)).rjust(4,'0').encode() +footer
+ else:
+ senddata = header + ('C+').encode() + str(abs(data)).rjust(4,'0').encode() +footer
+ self.serial.write(senddata)
+ # self.imgData.task_done()
+ def stop(self):
+ self._stop_event.set()
+if __name__ == '__main__':
+ DIS_CONF_PATH = './configure.json'
+ config_file = open(DIS_CONF_PATH, "rb")
+ fileJson = json.load(config_file)
+ cam_matrix = fileJson[0]["cam_matrix"]
+ dist_coeffs = fileJson[0]["dist_coeffs"]
+ perspective_transform = fileJson[0]["perspective_transform"]
+ pixels_per_meter = fileJson[0]["pixels_per_meter"]
+ WARPED_SIZE = fileJson[0]["WARPED_SIZE"]
+ ORIGINAL_SIZE = fileJson[0]["ORIGINAL_SIZE"]
+ perspective_transform2 = fileJson[0]["perspective_transform2"]
+
+ cam_matrix = np.array(cam_matrix)
+ dist_coeffs = np.array(dist_coeffs)
+ perspective_transform = np.array(perspective_transform)
+ perspective_transform2 = np.array(perspective_transform2)
+ pixels_per_meter = tuple(pixels_per_meter)
+ WARPED_SIZE = tuple(WARPED_SIZE)
+ ORIGINAL_SIZE = tuple(ORIGINAL_SIZE)
+
+
+ # Open /dev/ttyAMA1 with baudrate 115200
+ ser = serial.Serial("/dev/ttyAMA1", 115200)
+ t1 = serreadThread("串口读取线程",ser) # 创建第一个线程,并传递参数
+ t1.start() # 开启第一个线程
+ #图像处理初始化
+ imgReporter = ImgReporter(queue=imgQueue,perspective_transform = perspective_transform2,serial = ser,disqueue = disQueue)
+ imgReporter.start()
+
+ main()
+
+
+
+# atc --model=yolov5s.onnx --framework=5 --output=yolov5 --soc_version=Ascend310 --insert_op_conf=aipp_nv12.cfg --input_shape="images:1,3,640,640" --output_type=FP16 --input_format=NCHW --optypelist_for_implmode="Sigmoid" --op_select_implmode=high_performance
+
+void USART_GetChar(uint8_t nChar) //串口接收到一个字节
+{
+
+ if(USART_FrameFlag == 1) return; //如果上次的数据帧还没处理过,则返回
+ static uint8_t frameFlexLength = 0;
+ if(nRx2Counter==0 && nChar == FRAME_START)
+ {
+ USART_Rx2Buff[nRx2Counter++]=nChar; //保存到缓冲区
+ }
+ else if(nRx2Counter>0) //接收到帧头以后才继续保存
+ {
+ USART_Rx2Buff[nRx2Counter++]=nChar; //保存到缓冲区
+ if(nRx2Counter==2 && (frameFlexLength+3)<=FRAME_BYTE_LENGTH){
+ frameFlexLength = nChar;
+ }
+
+ if(nRx2Counter>=frameFlexLength+3) //接收到一帧数据
+ {
+ nRx2Counter = 0;
+ if(USART_Rx2Buff[frameFlexLength+2] == FRAME_END) //如果最后一个字节是帧尾,则数据帧完整
+ {
+ for(uint8_t i=0;i 30 && trunSignDis < 40)
+ carTrunTaskFlag = 1;
+ }
+ USART_FrameFlag = 0;
+}
\ No newline at end of file
diff --git a/python/contrib/YOLOv5driver_assistant_system/src/configure.json b/python/contrib/YOLOv5driver_assistant_system/src/configure.json
new file mode 100644
index 000000000..ff9b3dfc1
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/src/configure.json
@@ -0,0 +1,15 @@
+[
+ {
+ "cam_matrix":[[1.15694047e+03,0.00000000e+00,6.65948814e+02],[0.00000000e+00,1.15213881e+03,3.88784788e+02],[0.00000000e+00,0.00000000e+00,1.00000000e+00]],
+ "dist_coeffs":[[-2.37638057e-01,-8.54041989e-02,-7.90999421e-04,-1.15882426e-04,1.05726054e-01]],
+ "perspective_transform":[[-6.55424099e-01 ,-1.76820457e+00 ,7.23865500e+02],
+ [-4.82392786e-02 ,-4.50233267e+00 ,1.00204237e+03],
+ [-6.29738946e-05 ,-5.82573558e-03 ,1.00000000e+00]],
+ "pixels_per_meter":[3.28,3.28],
+ "WARPED_SIZE":[600, 600],
+ "ORIGINAL_SIZE":[1280,720],
+ "perspective_transform2":[[-1.15384615e+00 ,-1.44230769e+00 ,1.03846154e+03],
+ [ 3.55271368e-16 ,-4.61538462e+00 ,1.84615385e+03],
+ [ 1.97372982e-19 ,-4.80769231e-03 ,1.00000000e+00]]
+ }
+]
diff --git a/python/contrib/YOLOv5driver_assistant_system/src/filename.npy b/python/contrib/YOLOv5driver_assistant_system/src/filename.npy
new file mode 100644
index 000000000..da17fe3cf
--- /dev/null
+++ b/python/contrib/YOLOv5driver_assistant_system/src/filename.npy
@@ -0,0 +1 @@
+$*-)%'-0.3--./-.-+*22,1006)1031/242/,1,-1152112441-3/21-7644463227430/2411/6277.20-30570312631333.2602567:<;<6/2+331/210.)%&%%'&)*((+*0/-2.0,14/0143222.(//./*,)4=CFA2.&"&!##% "!#'$#'&%%''$%''(*'()($"$$#$$#(%"$'('+&'$)(*+(%*'&,%&%&'&'%$+(%,*3*6CISQTR\SR[TVQVPPJFJCD4420,+,-24.++0-/0/++0-/585643))'&')&))*%%!)('()/*'&+(((%*(,*+(,*,,-/--,1//011533518.5242/1-*--,/00692767:5<>A?ED?FEIJJNBII:?????EFGIPFCLIJPSRWJPVVRXZVW]ZbbQUdaqru{~ö~v{~yxsutonom`ch\]^\^f]`_hha]ZUPcS[QaPYODBFAGMJKOTVJDHJB=FKMEJPQbmsy}~ytmRQ>9ABEHFFIJDFCH>F:EDBBB;977:>?B>8:878=8:>>?C?9A@>AGSR]YYRVCFB?A;9<<>;8=?=<;;>9==B737;>C8>A5AFD?@=03738=EBBNEEKGFDE@@B;@?=BCDNDFIDLSTOQXUSUVWUZ_OU]`UZ`WaX^how`agPcj_jaep^mkglsdWLTMMLPJMBEFEHKKNFSPHCKLE?MFJIJMLOTNVOSUU\[[\ZdqxdUhYISG^}po[dchgkgialdghmshed`aegfjakontbjonpsik`ilfdcjgljodx~}}sq~zzorwswrkojmhdZcedkthclqgknonhieihpjjekdfhngslvvqmmijhh`jigknmuqnxyvhNTRPKFLGGNW96E6B---0+.//-/..10,,-.,0/002/-/101/--020/0/242102214./02./1143442213/3-2234//041132013/2/202553664122134465477?8;6731.5/0-..-.(#$&$$'&'()*.,/.,/-00-002023001234./015:B=A7-&'$$#$#""#! $$($$&''$%$*))(%(,)$$$&%$"$'$&'$&%'')%%$%$%'&&&%&&$&$#'((('(&-)),+4INOSOTRSRVQVNQMNLGMOC<3/-0,0/,.+0.+,00.0,..1597856-))('('&%'&)&+&&%&*)((()*&'****)()***.*.*.1../0286303-5.4774-..,--10133346679<===;:8:6679865:=>C=<;3567>7645<9<88998471;669=<:8=>;>=BBFE?A><>@?=>CAGDJGDGJLMSVSQZQRX^Y[X^USXZXX[RY^cgxr_R_\\hYf\ookkbdirhTNNNLJKLHGIKHILAIFMDGIKJJHPIIGMOMRUMLOQZX\]Yb`^kqyy\OSO\mjghhjmqgnfkminhnelcieililgeijilnmkkkdphic`geigjint~}|t{wtqwsqvrltlecadfejeefhfhllgllhjfihgklbgigfgelmqszqlikkbkjlie_gpsx|}mYXRMKIFFIEEACE8<,/(-,2,2-.0,----+-/10../1-0/1022.2.0/12//2,0--.0.20.0004/441277032.202311004.2020333244423464721312/04576798:95523..232310,*)&&%#"%#''+**+1/0./20/2.110210350112-06:?BA82)%#""$"#%!$##$&$"#$'#(&+)))'(*%("$%##$$#$%'($%#'%%%&&(%(*&&)%%((%&''&%('(,)**,3KMOSQUTNUOONRULNGIHNE:4.),*/-.0,-+-,0/--,.,1676237))(&&'(&%&)(',)+&+'*(()()'*'(+-))+*.-++.,.+-002.46420*1.3157212+/-/,21/539422<;>G?AGDEJIEMJHCBAD;C<@ACEEHHKSKOMPJFKNKMNTROTTUacfjqpstz||~}{~Ÿ|yuupqqnnhkd``ZaVZ]V\_bcgca_WZPPRSQOPNMHEFPTTY\WZ\XOMMJIJQLNUhnopprlt||}xmc]YLC@DABFEFEHJHIDE@IEE=><;9978?<>>:7;:<:8<>798:9:;B;AD@DERQWW_JQG@@??=8>8;:;>==<<<=@???;;@:<=:9::<7>::68:755898:=89:4:846:776::9;8799BDC>7?7?=:77<=<>@A?=<<>==??;=CAGJKIMKOSPNUQVW[XW\VZWXXYUW\[[]\_s|~{{z~}zzx{y|w}{{}y|x||x{x~y|}y|~}||zx|y|}yw{wqsa]W`Xbb]hajgligfgtgTHLNIIOIFFGKNHGGMIIFIJHJGJJMHIJJLHFMMRQY\Y]^[bclx~}}v|t|q^TSOZqdchjmmmnplmlfiknemegdhjagheifnmpnmomkjlmlblh`gjghqy{vrvswtuumtvtoiiiidge`dfhcghelikkhcegihglkdgchiehhkpupkoekhmkhhmjpsnx{oaVMPNHJGGAJG?:;;21,+,(+/-2,-.1/-./.1--3./00-,00.,//4-3.00/211/1/.0/2/43.320331111222143/611/35/12445711432235651125122076887988?:5/2/3633/./,+&%'&%%%#%%+(((*,.-311-013.3202231323//58==<;.'''$#!%!&$ $&%%$#"#$(#%%)'())))&($#$#$%'$%"%&&&&&)(&'&%%%(&&&&%&&%'((&((++()*.,1DJTTSSVTVMOSPUPSMJIND95/1./---,1001,.-031/+/84961:/)*)(('(&(')))*(&)(+)()*'*.(*'+),**0-(///+001/2/13554043601632..-+*.03334486<:;>=>BGABFEIGLCHEBBC>@?=BEDKHJNLRJFLAGJOISRRU[Vaedhqruqpyvux|z||~zptrqqpghie^aU^WY[XXZ]``abdWQOMLOPMIKLOORPUWZ]`\^ZTSSRMIURN_lspskjmrz||~tk]WSNEFBCB=BDIHFGJFJCHGEDB<=9:5;6;9><<;6;9:7<=9==>@:B@?JAIMDOS^XQUG@D?B@BD;@DBC@B?B?;<@E?@DD><>BCFCAG?AD@@ABB=DCCFDF?@G>C@AFGEECGCFDGBB@DAEB>?GIGLHKLKQNTQTRVYUWQ[\]\[RU\ZX[bdZ[t{zz}zwwz{yx|zy{y}~qxxyywwsyuruwvyztypvstooroolno]^`Z]]abg`daifdehueLQKPIMNIJGGDHGHLHDLMLLLNNNMKLLHPLPNTRRR[]Z`\Xddmv}~z~|{y{rvxlnpoioZLNNMX{ofgeejmqlpqohilkikhbefhggckhimmjllnkkgnlj^jhecjhbjlz{~zztuvsnukoqnjfdkghlgkggfgihejjjmlmfgimqlfbledjjglmns}uvpkhlinljhrpunuz_YZQILI>?GB@BE?>55,/-&,,.+/.-/,.,-/,110.1,/001-620101-/500-,04..20210/./330410321132233212137.32142554420411135:868252/3/61159::=?4723/17323..,)''(#&%&%&''('((+++/..//.-,.-/00313111147:>>7-)%'&!#$$#$$"#$$!%!"%%"&%(($&*((&$# '%$$&"#$&'%&%&(+'&&&%%(&%$%%(%$&&(&(''&,'(.+0DJQMPWRPTRNQSRKQHKKMC;2.-,0*-/,.-+-/,,+-(-.0686658*)$&&%&)))''$#'()')),(*+)),(*)*-,.,-,*-(..../*+002864030-/-153./--.*./-22-0.677>=A@FBCDAHLGAAAF>DD?=>HACHIMPQTMHOGJUMMTQVW]cedgkoplmnsrvovpomku}zxwvtqkmkhea`^c^]\\VWXYY\bb`aUQOMLLLHJPHKKRQQ]Va_bd^W]^WXS\T[jtvvypfiluxuzqb[RQECF@AB@@HEHFFGCFICF@@A@;993:;<<;7<3788:8=<7;;<>;?EDGCDJLRT]WORHD9B=@@@>>@?;A?CACFBC@?CBA==@ADFA>>?>B@A@AD@AA??B?ACDDBDEHBEBHGFCEHBGHECIHFJHHCGE>DMDGGHJKLKOSSTYUZRUQ\[ZV\[^[Y[\ba[^qwyyx}zu}yywvxyvxwwztyyyxuux|vuutnuxuvppnsqqloomqoa[^\^c][ghkoifiddoeSRMIIEJJKEJMJJIDFJEKLDILIHLGGLGJGJKUNPSS^V[Vcb]mx~}z~~|{~{{}}{~}|~|zx{xrxuqrtlnjhgh`bbQJMKPY~lfldjkgmmikgiilmomjhbgigkgljklomoroommrmhohjkhkhikoz}~xxuvvpxnnnqnmhifigfc_aigaihfhjhiejfiijjlhgggbegihtxxslqqmknfillonu{\^TUUEIDDFDCAEIF?941/)*&--/,.0,,/-....23.04400.4.4/12.2,1/03030.,/33.23/,-12111436545241141051300239444432325654856643677633556688<>9444255.,20/-+)'($%$%#&%%%$('))++,--.0003020/051//11,10972/&$&$&%$"#$"$% %%"&%&'#&*('+(''%#"%$"%#$%'#')%$''&'&$')#'&$'%$$(&(%%'$((()(+2CLJTRRQRRLTQRULPIJFMB:403-0+//-,/1/5-.-,-.+0087649/((&%%$&&'$,%(*()(('''**&***(%**)*+***,*++,+///1-03533226.2/0742//.*0.3/613677:<>@A?DBGEGBIAGB@=C<@8@G;A@ACDFCE>FEECAB=;?;?<986:<6::=<:C>AC?A=C>@ACEE>AAAB@AAC@BADDG@@B@=D=>=>E==>A<@@>B@B?DD@C@EB@C=<581+'$000/0,//0/-0.043/01.2010001.-13/1330010/03/1./201/422/30323345333403111/34-13440253163214764754526343266;9@9;:3545110302/,&$(#%###%#'$('%*'*+*1/121/22-2+24652303430001'#!&%#&%"%"&%$$%&$&*%(&(()*''###!$%$##'$&&$%%&%&($('$+&$&$$$((('&'&*)+(+,0CIPSSTTSTTSPSOPINIJHE<3-/-/+-1../1,-+,.,-/-1588;84/&((&()('&)'&(*'()+('(*''()*,*+).*5.0(0,-+-+-+*./0341231232./462./0.--//513564599<>AAEFBHHE?>?@:@:A>BEGFPHLMPNMVQKXVWXabdeimqnnjgehjmclkihhintw}{{x{~xrtqpqokia\`]]]\\[YWV\X]Z^]b[SVOIGKIKIFLKLOWZZ^cebe]bciekhhqz}|v{|~}uih`TNEBBA@>ABADDFCEBBEFBDD?BC@>>D??85669:8;;;;9?@CDEHHIKJIPRYZ\STLDC?@@CECC?>?CG>DADA?ABB?>BE?B?A@@?@??>B>A?>@>FAB>ABCBD@EDCFDFBBFFC?BBBDDDFBFDCEDFHFEGCCCEHFBIJNFNKKKOOQTNPOUUUWTXYXUWXZSUVRXacW_\uysyuwxzvxvxvwxtvtvsyztuussporurtopqrrpsoppsnnknkhoaY]YZ``ciccjjggmho_TRPKNNONLHIMGLJFIJJHQIDHPRMKJJILGJMMLQSVZY_^aaemw}wsstuvtrtprprtsousnurwstuurronqpqssmoqlrpqporknnmohlmnrmnlnnqurlkkphpkmpptsvoqokmoqlpnsnqrppsrtnponpommirimiklpliltomjptrvwuxwwyyx{{x|{|{~~~~{~x}vsxppm]NPNRWhdicdiemjohfojjjlbheee`dgdjdjhoonqfpgghjjccdcfiijjmx{}~yvtyuttwsunnghdjhflbfhfichcflklkieflhjnihhcfeoiglrwpmmgglnrlkpwi_\WVOID<:;?ABDKE>9:0.*0(&%%--,-/,.../-1.0///-0.3302/001112/./21320,.1-21//43.330//45443822413/34.665051436532/52044565755467023568:6;>?;62261120/./++(($#%#%%$&+$&&%%&&*+02.-0.102..//22205121/202*%$'#%%$!#%$!$$#$%&%'%&(&'&%*+(+(&$&""!!$"#$%$##$#"&%%&''&&)%&$$&%'''%(()),*((+2=HIYSUPSQOOMSQSJNJMLI:40,//..--,00,,-.1-2..34766:2+%('''(''%&$((($''**++(')()(*)*)+04/,,(-.+/*/-,,/.0563614431/2431.0/-.2012343378;;BC@CDDIAD?A>B?C>:@AIDOEQNOTTVX[U[bb]eimkqgibcejigkghklknyruvvts|zoppongkcca`b[]_UTSUUT[UXX]aa`]YOIILHOFKIOPWX_ededf]cadmqozy~}yj\UMCDB?@===>>@DDCFD>ECCAA>?B=@A?==9599:88;;=>BEDCIMKKORPTVVWQOJAA@GC@@ADFDDCBCDJ>DFGCFAACEBFGGCFHGEIJFFILACIDHFMKHICQELMLJRMPRPWTXVTRUZT\R[MQ\ZU`Za][]\v}usvwqtqqwsuvuuvrsqrxvstwusruirsqprqsnoonljojmngekk_[YWZ\_fjafgfigefndSPMLFNGGECFHGJLHFEJCMGIDKMLJKIHGPNMLJIOTXYT[]`bjp|tmonoouttnrwsspfoppmponorouplsspmnqnpmnnnoommkphoopqmjrjojklqkkfklqjnoolfojsminjnkmgkgimhmfjklmkqfjieehhgcfbc^hbf_eabaadda`\aaacdZa]WZa`Y^^]`[_]]^dd`ab``cg_^\^_d^a]]\Y]OKJOJY{dbjdggfm`jidlimqjmhdbd_`gfggjgjpmpllglilgeefdffgcggx{zyrqxurtnsspnlgdmfhijghhd_jjhpbhggfhdjkoifghkiihqnuqqlmjglkkqyqbY]SQJGDCG?@HAAAH??>61+/++'&%2+,11-2./--///1/-,2//1.02.121542222,2111/1-402.3124122002153445/13040401005226755403732532465576:5546974;=:?:031427/011*-+)%$%&"%&&$"#&$#%&%'*./,./2/41020-211363121-1.)&$#'+$$%$$##"##%$!%$'($&%$)))+.('%#$#!'#'&&%$"'((%&%%#(%+&+&&'%#('*&((&()*'*),/AIQPPRUSSNUMMQQLPEJHK:7,1,-/.+,.-0./0---./-0489392,*'&''&&(&'*%*'&&))+).'&,(((((+*.*/-*0+..*-,,/1/-,..1846//3+12650-0/4,1+213444139==CIEBCEABB@B?>DFDEB@;::;<6788::??GCGDECECCBBF@AC?B?DJ@CBBAD>B@?CB=>F@BCFAB?CHA@@HA@AABAEC@CCC@DDEBDEICHCGDJDIHEJJGJIDHDDJKGDOIHGCLMKHKLMPPRSRUTTXNVXVZXVVXUWUdba`^]bsuqtstxqqsprtruqortttoowqprrpqqqpljnqpmrprqollljijja[\TY`XbfffhkjhievcPIOOLKGIHKHJIJFGEGOENIFMFHFMMNJMXJJMOPQWUa]_^\cksrotunnruqngmllpnrpoqinoosnmqltomnmlkimqnknlnkirhnhljimommmmkjljongkkgkmjijkkjhkghlnmonljkojhnkifhcfheecedc_aaaaa[`_`eaY`]ZaZ_^_X[[aY]cVV^[]VUSXNYSWPSSONSSTOPNPIOOPWLPLUGFLNKO~|cckejemhfilikfkokjijjcfedigkhohinknhfjkkibdkfdfegjir{~zwtvzupqptsnjljdkhhgfgjjjdghggkljheedighickekgehmqwpolmlgrmvn^_^YXKBB?BD>>EC=JMDDGL;0*(),''+/1,//-.,///-.15.00011/02011017120//-/013211330-21442554202537333243317/0140037536322437726578474834235986<<>:712117100.-1(&$#$%&"%%'&$$$"%#$&'+,*-/1135/./313/3033/231.,('()'&#$"#"&""$$%$"'(&)+)+*('&$%)$%#&'%%%&&$$**&'%'%$&*%'*)%')-*()*+-=HOTQRXQWOTNRQOMLGNGI;40.0.,-,-/)/--/--,0--/4964:.-)''&%(#'&'*+')(%)(,*+),**+*++**+),-*.)*.,,-,/-,/.2045342251157661.1/+,-00212466?:@DCCFCFF@I<@C;CE=AC?=A>@I@DGDE@DDBCGD?CCAC>=><<878<;<>?FCDHEMESKQUXZ_QTSIGGDE?FDBBBB=CBF@@FDADFCBEBDGAEBHDBDEIE>DEA@CB=CDCBBCAB>C?DC@DBGGFGB?DHGGD?BCA:GGBFCEBCEJGEFEDF@EDDJIDFKJKEKGMMOLJLTRRRTNXTUTUWUWWWXXW[bZ^c][cxrqriornsoqqpronponopkttlnqnposoknpmmokomjmkmmhlhif^WYXXb]edcgegkfdipdMNOMIOKMKKDIKOLDECHOJGDJBJHILPIMVUVMJNMTZ\^___dlu|vrnonnonnnopmmqlpoknommsplkplpmlggjgniklmkmlfhnholiqkjlliijhgkcnemmindngiehjiceeiiheceijieknkdjcec^f`g[af^ac^^Y\^Z^^Z[^\`YX\UX\ZW^]ZZXVY\SXVSYXSWRTUVQLONTSMVOPIPOMMKNMJKEBRNQycjibdcfoffeiehionjqhgcghhjhifnmnmggfgdhkifffddgfjfjwz~~x|szwrnptpinkjcbmfibakfefdcffkkgofecikgfgj`jnemm{yttgmontxphc]`_RUC;FA8C=@DC>FMGD9=>*&''**(&00/.0--/1//.-1.-,2001,.00.10220325/04103/250/11222.00012153677144243340223402434523;5836463995658276239:;>>>;61446:130).+($"%$#%##"%&%%($#%$$%+***--0,46/0/-./026126304,/+)+)(&$$$"$ %%$%#&$#'&)((&,'+(*%%#%%$%#$&%%%'$($%&%%'%#'"$'&$'%'&&&&$%&)+)')'-@IPSSPSTTPQNVRMMNKOLG930/-.-,,-.-,,-,/+,/*.34>4576,*'''$(&%'&%(')''''')&(('()*-*(*)*)+*,,)++-/-/01,/*/0/6052403453840/--//.//.1743:6>A=IDCGGCD@>@=A?<@>A?D=?=8;;99?ACIDGGHMKHMNNVY\SXOMJLLGHLJLILFJGJJFBDDHH@GFLHJGBJCGGDEDFICGDHKFG@BF?BFCLCBBDDHCHHAEBFBDHEBFFGBHB?@@HJGIEFBJHICILDJFGDKEHKKGIDFIMEILPMPMTW[XZPTV]XX]SYUVZZbZ`ba[^q{tpxippmqoqppoonlronnjnmpoknnmpnjookmqlqkhnjljliki`\YYYU]abecfajlgfgshNJQNKMMHJLFJIHEIGGIJOKHVJKNJJMCMOQMVOSP[[[X[_]efxrqqjuntloqompkqmlnmkrmqqlnimgliijmjijiqjnggnijkhelighhmkdhkfllgljhngjgjhfdghhghegdigdskrpmpkmhkgca_a__[\eWe`W\a\a^]aZ`VZYYXWYYVYY[[[XYUXTPZPUSTPOJRJPNMQRPKJQEPCFHKJHIFJEEIPIRqegje_hilgchifggkmosfjjdiaifgdhhrnlkffhkgedadfbedgdewxxyuuvzmypwqvosred`kchkcfgekhdijjmlfflfjieheodjmlnn{wytntw{vgb`^UUJEEB>><=A9<@AE?DDD495**.('%%$2,/+../.,.0/-02/03./0/011/216331121/51335.301212/1/533012533783134322656412052224622036535588435815;67998=;;=632/30320-,+)%%!'#$$$$%%#%&&$$+*)((.+/1.11000--/0/52641/,/.+,)&$$# %$#&%#'(##%&&''(&-*$%$$&$%$$#'%%$%&(&%'$&%$#&%$'&%'$%'(&&'%()()),++>ETPKPTPUSOOPPMRJKNFH>2.-,..,-0-..1-+-+,-/-5585529*'%%($()&&$&&()&(&&*%'(-'((((()((*)+)++)+(,3./.+-//.-/52401310237421+1--.1./3;25647>D@FDKFAEAHEBCCCD:FDAAD??;><;;:=AFGCJHGDDGSNRVWUUUUMKMMHLKIJJKHLFFHEHLDMHJLGKLIOLJHFGNIOGHKJHNJLLOOKLKKFMILIKJNJMKLJIJMJKMMGGDFOGIKNPGNPONONMLMFMIOMMOMJNMLMIEHJJLQROMRWSVZWTXWWXUUZU]SYV]_cc\`Zat|mlsomklrptknlommnlloljjknkmmillhmjikkhnoglkjiicicg^\[ZZ^^]jdgfigdfhvaTONKOLGIKGDILDFDCHDFMODAHLGILQEMHKLIJMM[U_\^_[agrnulnmipomqkenipnooljolkmlmbggipfeijimkkegffieghfdgcefdhdfjkickgecffhgbcciegda^fdehddcdjaUSX_`[[Z[ZZ\]^\[aabd\^`\\[Y_WUUZ]WWTTWVUVXWTQVSTWXPPPOSLGMSLMPHJFNIOIKGJGJIJCHDEH@GGNWs|hdd_gcdjaagjikjhp{sljhcg_ibmlmoomhlfkikiblbdjffhl|xzwupswuywvwtwrpgfgdfgijfheicidiejjfmijgihefggfenpt~ymprzvf[[ZZTNGBC>B>C@:?IFD46-+)# &%$$2,.22-///,.//-1/01//0/221.005610101/3-/44220320/2//.5000.2435733551344621/244441547610734566782765467464;>@8?5/211321-/,()&&!$%$&"#$"&%&$$$&$$&''*)*./.1---/.+/024250/0/00.-(&$)"#" $##%%'#"%!)$'((+*%&$#&$$$##$'#%&'%&%##'&$#%%%(&&('$&''&%'%)()(),-9OLOQVTTRSLPPPNUGGKJI<5,.,,0-,.,-+1.+--+./.0377433.)%-(&'$%('+'&(')'&&''$'&)'()*,*(,,.++-*,*+/..*,/-0..17736428334;74-100/-0113044889?ABICBDB@@A<>:B??A@A@@J>GLJTNRLNPLQMNTTX]Ybab``fccffft|u~ppeicgc]\]^_achg`\VUTRWWTOQOLLLLNMGJFIJLOILRX^\_becemlmqoy}{vvgaZWKOEHBB@AGFFCFECDA??AHCGDBC?DAAD@?>;??@?CDEDFHJHLLKIIRRWYQUGKQJLMOJLLJHJIGIJJKFKJKHKKKKNHOJKHFHLKOIFHHLMILNNLKMKPLMKJLOFLOOSMSKLMLMJLNKQOPQRSSROHKNQULPQRLPPSRUNTWPLKGLOMMILMQRRTSTWU[WYVRWSOUS^[ddcdf`^^o{ktfnkllilnjolpqjlnjkkphmglkmikmioimfmkilmilkfmecge]Y^ZW[`^hdjcjffbfy`QQOLEJGIELEHGDGLGEGHKOGGGJGJFFJKKIQMINNST[U`ZYfkryumjnlmkkjifmijkmfigmgmikblogiekejheghgkheadddgg`gicchddg^eecdfcdagcadceddhge`d^`]aZfdc[TJECT\ZPXY[ZW\YZVZ`T__[XWUUVWUSWXTVSTRTYUPTRPSUUPMUKSRNQQNNRKMLFKIGGKEEHHCJCGBFCCAEFCRLo|ja^cbecgfcghiekgr}pkdbkddbegimnljiihfghcie_eheekkvwxzxsvzvuxu|uvmjhkhhfcafcjgiddcinljgihgglgficijjpty~vsw}iX[WXWKIGEAFFE>FD7B@>G>B=DCF9-*((%&%&%%1-///--./.-000.132113110310.22:22401341455211/0/20325/1000211647464544432030202314-34450367467596552666988A9=4611231011,+('(#%%$#"#%$#%"$%$$&%%%&*)(+/-01,0.0-210216010310/-+(%(%%"%&"###'&$$%'(+''((*+)%$##!$%"'$#&&%&$%"'&%'&$#)$&%&%%'&*&)%)%)'((3;MOOLQRTLPMPPOQROFOKI@0-*+/-.,.,.-/0/-/+,/,.3:3870++'*%#$#%&')&&)('%()&)((('*&+*)*,)(+.)-/--.+./-.1/--.0390396/68:5//...,./253570558<>::B??A=A@B@@CHGONRLNJOLMROPQUT^X`b\^]^_]^_kvxy~~|upnddc`_^_c`daiggh_SQSUXRWUPPNGJIJHG@AEEIHOPW[\`fihgdgllvux}}xupi[ZLPNOFFFAKECGD@JCCB>?ECBEDB>EGC?B>=DABA>F@H31)(('$'$$%$+1-./-0,/310.22.1./1/427233230232221104452.225/.4/1020400270355524642321/020620211358334666453443724476:67@<:632//1111-+-'&&%)## "$#!$"&$$#&%&&(%)*(/+*.+-2100/1/-212303/0.+,&%%$$$$&$!$%##"&&&'&((),)*%''#""$"&"&$"&%%)'&%#%"'$$$)&(*)%%'%%&('')),))/9IQMQSVPMONNQQLRJMPME@33/+2+./+--,0//,+--*,0285142-('%!%%$&'$%$%$#&'''$&$)''((&&))))*)+*,..+-/3-1.++.+.,.-274331444442/0-/.,0/21132469:?BB@EA?B>>=;C;?AC@@?GCDJHHIH=CDFDLRUXQRMMDHHNEFHFHJIHKEGGGJMIKJJJJGLCHILHIFLHHLJMFGDIKHJLPIMGLQHQHMNOMLOLNKIMJKKONPOTRRNNSPNSPNPQORNQJMPTRNNROOF@JKKGMKJORQRVSOVUVSVUVUXVPTZ`fjihjd^_t|nzstuqomuwyxyzzyqqikojlpkrurqyqsloipmmjgkielhkjoja[XZRZaZ`ebdggjgbeo[IKLNLDGFGEIEEIFGGDIMCEKIMIHHDJKCQILOJOPYV[^]]YZet{qjkhkhjhfjeahhfjcgjeihkbaegj^hhcbjecf^fc`dbceabbh_d_efaf^aabYeba_``^ZZ]aZX[ZR\TUWPK]_^QLTLIKRKSVTRQPSUSUSXSRWVUURR_[TZTRVTNURUXNNPRONROMHPMOMLJLIGJGKABBGFJFIGCH@FHFIFPOONQPSSOOQSLOJKMHJ=30./.+-0.,+-,+.//.-*.02737950'&'&&&%$(&&$%'&))%'((')'()''*-+,++*0*+.,..*+,+,11+,..5453435011990/..1,//.1443478:;DC?DAC?C>:?<>?C?BB>?ACFEEA@H@BA@B>A=DCDFFMIGBDB@ACMMSVJRIFDE;?A:;@>??B=?ABACGIMIBAACDFD?JFA=?CDFEJAGDAEIFHC@GEDGGJBFFHIICEL?IFGFJJFMLLICHHHKKTOMJOMPQJONUSSQIPOMGGHLRHOKLQRSUM_SQRVYWO^UOSOZRKKJJOMTbgrrV^ZVXWQV^dkmmod`TQ[XWWTTTZddorkk^afliepjqsiolossti\YUW\^^aeekcgiggfwaMLNJJHFIDKDGBEJIGFIMNPbekfeddjhffejhheffecg`hcbcbfhiohilldjbafbh^jacjihhferyuzwvkuosrqpmlkndgg^dbhdffgdg`ihinohkdegijijmgppvoYOJOMHBAFHFIDGJ?KCFIIIVFQ[Q<99*++$#'#$$+##/./-01.1-/,/3002JJJJILMMMJKKJNJMKJJJOJMLKMKLLKKMJNLLJLKIJKKKKLKNMOOLKQJNOIKLJMNJMKKMJLNLNOQLQLOKKMNLMNOQSSSSTQMJJKMJJJJHFCA>>>===>?>>A??=??@=?@?C@??BBBDEEFHJIHJIJIJKILILJJHFIIFF?@>@B>=?<@@?BD>CACDGC@?@>=;?<=<>>>?A@@D>@@?@BC@@BBCCCAAACCCCBDCEFGECQ\_fdbhhfffdgefe_ba_bYIIJEFDGCEFGFGEDDFHFFHJNSPNOKGC@AA?@>A@?CB?@@@C@BCCD+&+'&&)'(*)*++)+,).)-.-...-,/-/1/21531443404751//0),//1320625=<@>=>=B?@EABBD@@CHJIIHHKKLILOLMQPQUVYW[TTTU^ediu|}x~|̽wqgfbce[\[^_]]bhcjlkpjgdfd_^_XTTVQOLADIJEAEHGRY\bdgfca\^bdgs|xxpqigb^X_VRTHMJEDBDCDBG@A@FBBCDA@B>BFA@?A>?>=CEACCDEBDG@BF=LTPXHMHDC=?>B>=DEHODB?@FF@C>@>>9;=;==E>A@B?>=><:=<G?DEBBB9=A@DA@CDBFBCBEaihbfa`lhfgdhkfgghdig`jbccecedmfdhmjideeedfhidjgeldinu}|vurrtqsunphifdddckcfghjgkchfjiklgggglhkoqnou|j\URKJDDEEIIABKCMQQZQWZOQM=;0-%*%&'"&'$$&$-01/11-2./,3230/IGJJJJKLMJJKKJLMIIIJKJMJJMMKJJLIIJLKIJLIJKJJKNMLNOMOLNMLMJOKHKMMONQNKKMLOPRQQPQRTQNMLQSSQXXWRMJLKJGJFJJCEDAA@@>?>?@@>=<@@?@<@CC?BBA@A??CBFFEJKIHKHHJGLJJJLKIJJIDGD@B>?B=>AC?>@?ACDCEECB==>=>A>@?A>>>@?@C?C?A@@CAC@ADCC@BBBCDCCCACDEEGM]acfiffhfeddcff\db^d\QEJHGFGEGFGJGFFDFGFFIIOQQLLLCC@@>@=??>AAAAACCECDCAD+#,''&''*)**,*)),)*,...,0/1./*,-.0037637565045/1/-/./,134292595A@B=<:?=?=8EDCFEC>GF?DGFHIMOJKLKNNXSZYYVYRRP\Zcbdkrru|}Ȼ{{toffedbb^`W]b\^^]biknpoojfd`[XUMVRKMGJCGGHCIJZ[\``iec`Z``ekyv~qnlc[W]U\]VWONHHFDDGBCBBACHFBAA@;C>@A?@B@?A><@B?BFDFKDFFBFFJOTZLKOBABA<;:;>?>?DD9=A=B@>@<:8:==<<>@@B@=???>;;B<>?HADDCD<:;:=@FEFFEBIBDFEGHGFBFFCECDECEEHGDHFDJFEFIFJMDLNPSPSOPWYV]PWVXSOVWRQIKGBIKMVeblhPTRPPOTOOSSVVPMRNNMW]VQOJLOIKKHLJIFKHIHELFNLIEEGMLSUVVT]YdaehhddfdbwdPLKKMLIHGBGJKDHHEEDGMFJELGI@FEI?HLOKKMNU\XYX_Xbko~kfgdghcccd]ffegifjjceedafffcgfbafbkdfhdhfdgaa``g^fd]chb`]c_`bad[\[UQ[WXUQWYWYKHPJPUH_[YUMHLORMOIOHQLUOMOVQPRTORPRLPLPKSSKJJMLNPOPONNMKIJIFIIII@GKBCBBDBBC>D;?EB@>D@AC@?@>ADGII]kk`a_aekdeaffeajcdcabhaeenbefleihiebfbecedccebhfjgjmwyyyuoosslknlmjhgcc`fc`fiahmkcnnefjgggekiehjouwgZZJGJGC@IGGLPT_YYbQXSKJB;6,'$'&&%$%("$ "./+.000--.0,0/..IDFIJJGHJJJJMMLKJMJLNKNKKJLMMKLKKKILJNLJIHJOLPMPNOPLNMMLNIMMKNNPKJNOMNKONLNQONPQPPNOLQSQQVUXTMLJJMHHJLIEDC@A?==@?=>A@@?BBAA?B@@C?CFDIGGEHIJMJIIJJPLMJJJGGGBC>?AA@?@?C???CCBACDHDD@<@>??<<<@>A>??=BA@??BCCA@AC?CDABDCCBDEGDEGGM]cfhfkiefefhfgfc_c_`UQJJFFIGEICFGJHEEFFEJHHORQLOLECA@@A?@?@ABBB@CCCCCADD&(*&((()+*()(.)(.)-+--,-)-,.,-.,+,337523503.3781.,/+-.001141498?AC?BA?>;=>?>?A@DBCBE>FCDEFHLIKJKMJKSNRPTZWUVW\^gfkqloutw}{һvmgifcbc`ca_aX[XV\acfnpllgh_X^TQZWRMHIEGHHGHGVU`bcddc`dYV]eu{qh`ZPPVOVSQUGLFHHHCEBCBFDAAC>C?BBC;EDD>E??<;>A?FADBDDCEEEGMPNRVOKIABB=<=:4;9<@A@@C:355;<094=B?C<<<<<<9<><<>BA??=A>><@=:>B@DBDC;983;C@JBFFDB?>@=FFADDGEFDGGBDGCCCBFGDJGFKEOHNJNPRVPVUUUUUYSXWUSXRSWHCDHKHFT[_cpfQPNPLQMQTRNTQPLMPNLRJIMLMJIHIVOHJJKJDGIKIDFCEEDKGMTS\VP\W\a_cigdhgfk_RQLMJLEMGEDCAFHGECFEHMKFNCIFKEJKKJJQINPQUX`\\[`kt|wTPRSQJNOMMOOHRQRNPRUPUUUT[X\WW_YYY\VU[_`\][VX[Y[Z`\X\X]W]ea^]XX[XYNOXTUSUPUJMIFEIKKV^^NHISLMSGJRLMMRHNNEMYOQWQPLPQMTKMMLNNGLOOKHGIEIIJLJGHJFFEGFH>GAA?CC@AAA==F?@>??====>><>@<@?@?>A>A@@CABAA?>@?CACBEEIIJIIIHJGGHHQKPJJMJIHFH@?A?A???B>>AC@A@CEECC@?>>=?A>>>>=@=>=?>BB?BBA???C@C@BBACDCCCECEDCHFOZb`jfffgficdedeaa_bbYLIJHJEGDEDDHFIGFFCEHIJPPNNNICBB@=@AABCAAAABFEEEFCEH())*))'&)')))$*+.+/)*)),(/,,-//.1/+22741224104820-.+-0125253573;>?F=@A@@?9?@@BFC@AADGBFGCHIKKLDKIMPQSUWXYW\Yblqsqmkonotv|zrfnnhdfe_a\]Z\ZXWdjjjrlihma[USQOSKONNNJLIDGNPW]^beeh`feeglrx|wpbWSVXY\SSOMDKICBEGEBAAFC@BBBBBD@BBDC@CD;=AB=B>CCJBHEIEHLLPZSONJ>:C99=75<;<@<=:@867.37033<>?CBBA8<:9?::=>;:B=<>;?=<=9E>BDBBDHBFD@?A?BCCEFEIEFEJOOOQUVTVWRUWYXVTO[RWV]GFHBGJLPV__ohNONRVSPJPNIRPMTJLPJLIKGHMKIJCMHIGIJIGIIGEGFHHEFGBMQRSNR\W_befflbieim^TJKNJJHHJBD?FDEE@DDFHJDIHCLJHJHGJFLKFMPSUVZX]]aerzySMKGHFHFFEEICGE@@ED>ADGGECCFHBGD>GBDFECFE@HEFFHLBAED@CFAEGC@EHGJEBFEJAHAEGGD=?ADJJMPV\MRPSMRRNKDIJEOCMKIRLJIPPRNLOMWRORPHMOPOLHHBJDOKLFADFEKGIIGKDA?CBG?@@DAA:@>?<>=<>?=>?@A?@=>>?>>@B@BAACFGGJKIGJJIHDJGLJMILJJIFCC@@???>???@@@BABCDBA?>@?<@>?A@=@@?>C????@@?ABB@CCCB@BEDCDCFCEEADICOY`bhbfgjfgfgebd`^`c_ZMIFFJEFCFJIHFGFGECEFJHNQOMPKF@BA@@CA@ACACEAEFEDEDHF'&(,*-)(,*,,*((,+(*((0(-,-0,/.,1-.+1-653116331764./..-.-24520776:>D@@B@BC<>?B=@B???BE?EFBDBGJILNMMPRNPYTWZ\]jerv{yttsspnvwy}xnpkaehc`^VYYXZ]ecclqlfheW\SYPOSTRPSOLJHEGIRW`ac_efch^chnty{th^Z\SWRTPKMLEDDFEBAAD?AEFCCAB;??>@@@?><99<;=?<==B?FFKDOPSWXTMJB:>>==@59:=9<:<;;9866:6474998@;==49:9;;<=>>==@>=:<=998><<@=><:977988>>@A@AB>@>D@CC@GB@A=@<<@<CED@A?JGGIGLUX[QKOMINTJ<;A<;C@?=>FA@?E<<@?A@@BFAJE?@@ECGFHHEBEEFDEEADABDCAFG=?CB==9;>;=::<9;?>;==C>CFGO^h]b^_Ydilhigediehecddgeiea_cflfhlgcbehefdjefddheigkpr|zvttrooooqqlliff_hdf\hge_dcgrnjenolmnnsgX``]e|xtjcWOXX\cY_`]]ZX[XUR=?;8/))'"$'&$##! !#/,03.222/-0-0,.,IFIIIINKMKQMLHMJLJIJJLMMLKLHKMMMQMONQKMNLJLLOJQMMNOOQONPPQNQQQQMOOMO WXQQJIJGKJHMJEH@A>>>=>><<=?>=><==>???=>?>BEEFAJHIHJKKHJHJJNKJMJIHFCCAA?@>=??<@CACBCCC@?@@>?>>?@@AAABA@@AACCCCDCBCCAE?EBDEE$%('ffgifffhff)&%$_`ZNIJEIGHGGEEHGIFHDEFHHHMOEDAB@A@??BBBDGDHC/*&+'%'&))'*.+,,)*))+-)---.--,+/.0,..14623844846100/-+2/241126749>;<>>A?A??@@BA?AA><9><=;?;=AAEFFFLPS\WYPFD?>6<8=:<9<=;;;?=<;98@=988;;;;6=9:<=?=;@==@>:9::89=;;9;:;6:8;?9::7=?:;@9>>?;;=;:>=;?B8=@@:<8;=6:<9D@BGBGDGERLOUOTTUNXZVXSQWOSPX^HIGFJLHGPQW`pcMRPOOLNLLLMLKLQQLNMJIKKMJHMJKKJIGFJFDHECIIHGAFE@CHTQRWXZY^bg`dfccbancOHNJLLDCFHHCCFGFFHFFDEGIKHFJ@JJBQNIMGNOSUV[W][cfpwyROMHFHGG@EEGALFLJJD@DBCBDGAC@E@FDCDADBBDB?@FG@CDD=DB?CABBDA>C@C@C=@5C=CBA?=;>FGAADKT[[RJIQORNMB7=>A??:;;?@=;;;:?88==><8:997:>9:@79:6;<=46747688864665:74534456555277698:;CIFHLYlfi^`[bhcheefhkppedg`dbfdb_`jbfgljbbbeefdf``fgffcnmttxvywuqmvpspqsnlhejficdcjcigigklkknmnvwkaUXYYUautvwu_]a_^]b[`_ZT`YWWVEDD74-*&$%#(##"%$"!"2.-/.-//./1+5../JFGHJJIKILMLMNLNMKJKJIJJJPIJNMIIMNMPQMPKLMPMLQKLMNMPMQNPSMLOOQQQSRPQNLOL QT!!VTQONJJKIKKKG>B>?@>>=?===<>?<<@?>>==@?BABDCFJJHLJKGIIHJOKNJJGJHCB=???>=?@=@?@BCDA@??>??<>=>?>=>?A@B@A?ABBAD@@>ABCCCBCDD%$')cgcgdgfi'*ecca&_XQGJEFIFEFBEGEIFIIGIJGJNOOQCBBBBACC?ECCDCFCF@&(%&%%'&'''*/-/1-.*+)+++,,*,+,02..-2,.3744550456430/,,0/11342544;<>>=?@@;?>CC>;=8=;=BBCFDF@CKJJFNKLQSSXV]ejmt}}xxrnjsqz~»wqqjfhia^]]`W^\`hhiggff_^ZZSUTZVZTYVOKRKLNPS\]acfjgkjkpnu}{ulg^]`ZVOPFFGBFDDEFIDCFDEED>CB=;?<@=?@;><9=:=>;?=D?EJINQUWXWQCDA?::;;;:>89=::<>8<9:>:>8;:=<>:?=;>>9=>@99=>;@=<<:;;<=?9;;@;@@=>=C<=?ABD@@A@=A=:B=BAF=AE?@=C=EC@B@?:@CGHDCEDPMNPUTQTRUW[WZUOWPUNdVGJDEIFKJLM[^qfVSUXVQROOOPROKMOLKPONNQHMKOMIGJHFHGIDHJFDGDDHCHEDMQQTSTZ\_]daefdgdfpbNHNNKOIJBBFGEIGAHFCGJEEJMIGRCMGHNLKNLPKUU[VX_^]ksxyQFQJJH@HCGHEBHBDLCHCD>CBFE@DB@?F@DF@FBGDCCB?A@?CB>?GA?DB@CJ@@>B@@<@??;@CDEEJNV]YOPKPOSTL@?>:A;==?9::=98>;8;<<6:;>;8;<96;8:7:874;794<253734/149/;62263461331642550;<=GDHHVm`d^]_]dklgfhdnkh_gicifc^ddjghgfigcffhhdfieacbccjioryx{x|sstpkonsnfec^b`f`egofhbmhhoqmomut]WZSWTPOZz~vtaaeha_gY][^LUJLHSG78,/+%)&'%%$$$%#!!!2/03/10-..0.-0-0HHHGJIJHIJMMLJJMMNKJLJNLMNMLLLLIKKMQQPRONNMOQLMMMPNMQPNMOKNQPQPPQOQRQNNNTU""SMKMIGJFMIJE>A@?>=>C=@>>=?=<><==@=@@?@?A>@AADDHJHDJJKJKMOOKEJGDCB@@@>AA?@C@A?AA???=?==?@@A@C?EBAB@AACB@BCCCCCACECELLV`_dfkheeehif&*f__b'&ZREHGEJFDGDEFDGJEHFCJEIMPLJBCBC@@C@CBDCDFFED()&('%)')(*+32201031.,,*0/-*,-+/.+./,/2723443.355200//-)-211338887=?:?<>;<9==?AA;=9??B@JDHHIKFHNLKKSOW[Y^aeoqx~zqxwzϼxsunkjhefa\a\`[\gfhefoljc_[XUW[VTZVQQTQRSSMYXZ^_chhkmokqu{zxlee]VSUPHGJDHAA=>?>E>@CLHJUSUSWVQJC@A;=>=>:?9<>==?<:<:9?@;:>;@89=>;99=9;9=@6>;<:;=<<>>>==:@B?A@:>DC>==?DDA@B=C=AAD>DDBB;@BBADA>CEDDEFKFMKONMRTUVUWUYTWSUSWTYF?DCA=?DBFN\^taNPOQPOLJOPJJJLHHCFGGJFKHHFGEJDJGCEGCDCEHDJCBF?FDCHQPTTW_[acedhfdfchlbKKIFGH@GHHFDFFABEB@AKKFJLJCJH@EJKHNIKMKVY\YVZ``goz}|RGMDHDCFBCDGEGD?>?ABCD@AFADBCC?@CCC>@E>B<A@<=@D<>@B<>=;@??C:B;FHRT\INSMJTRL=>:>B:=>>6>=6=8=78;:6=8879?:889:54695;4683/86566852223;:5247/3//473500229478JBAGYnbda]`_bepmmnkhgfcgc\aecce_e`hliklaf`gjigljbadbchiissvx|vxtrllmnlkmfbbahfefklgdmklkqnrrsaZTVPPHBLJ_}zwyjbh`bc[]]b[LYOQU?5<4-*(%$%$%#'$###$!..21031,-/.-22-+HGGJGKKJLMIOOLILMLLJLMLKJMKJLJILKHNOMMMMMQONJMMOMONKNNPRTQONNOTNKNQLQPSV!"RNKKJKKIJFFC=@??@???==<<<=>@>><=?<=@@?=>?@AA@BCCFHGGIGGGJIJJLKJJHIHFCA?@?=@@>E@CBBCA@?@?=>?=?>>CC@??B@CC@CAB@BCABDCCDEDEGPRV_`efdffgfac(&fdab`_%\QJGIHJGFEFHEFFEHGFDHGFMQNKDCAAB=?BBBCCDECEF)*&'&'%())-/265522/11,-+../-+.-,/.0-+./593442345374/.-,,,2122375857=?=:<;8BD?;?>DAB@>@ABCAB??>=?:>;;=;;?@;<:=>:;<8;=<::9=<=<>?99;<==<=::=:<8@<:<=?=><=>>;@=B>=@??=@?B>BA=@B@====DACFJHJIHLKRTKQQWTVSUUTYUTOVQGFDIKDIKOQWZ_qgSSMPLQKMNIIJLGILHHIEHCCHA@=DE>F:>>>?<=<@;?=>=>BFQURSW\abecbhffiacn_NPPKMFIFCHEGGCBCA@ECGFHHHJNLDHHJIKKMIOOVY\WZUZbfozNGOEEF@DIABEEBCA?AAD@EABC?AA=C=BAD@?>A@EEBB>BB?A@CA>C?<<<=>CB@<=>:<>A9<9:;9;>A399CCGHStc__]`ehkvpmrje`_^]`aecfc]h`aibigcdfjgdfabb^ifdfhlrszuzvqvoormkokjfddfhcaedkefljmonw}xc]VNPRKIGIOK[xu|uvlc_`gb\`]Z]OQ[WD?=71+.+'(&$#$% #%""10/00.0---0/1/2-IHGMLJIGJKJPJJJILJMNLKQMMKMLLLLJMLQMNQQMPQNOKMLKMPNPLKPLJMLNOSRQSQMLQQTTY" LIIIJJJJHFC?=<==<>=??===<<=>?>>>=>?>?=?>??>??AACBEJJEHJGIHJJHLLJJJHGIGBAB??>@AE@CACA@>=??><>=?>?@><@??>??>BBAACCCDECDGKPXT_ffeg_gfgdh''fc_ba_NJKDEFFFCEEFHEEDDEILOLNDC@=A??DCDEBEDAFD)*'(((&%(*+/2522.42115-0+,,+--+,.*/,+-.055666533634//.0)*,114433858;<>:6=>AB>>@>9:B<CDIEKKPMIMIOOSRSa`f[daaemt{¹~wxrvpmkohhdbhhac`ac_d]_babebdbaZVWLRSSPVQROTPUUVPTWX^_dckelisrvy}unc]^UVSKGCFCBCBDFAC?CDABG@B>A:C;>CDAAAA>F@?B?@EFCKHKOQTZUTRNFE?B=<==>=>9;<=A;9;A<=;@>?;>@==><:<;<:;?=:B=>:=9><=>>>9>?;A=>?=<;>A>;>@=<@?>>>==@B;ACAC@A>AA?A<>@BA=GDDAEKNKMMNRTQZTUXSW\PSVTRXeOONSQUTQZ\^XXdoh]\]Ya\ZTWWUZNTNOMONJMILCN@MJFFCAEECC?BAD>@HFJCLNIIJ>GCHFLKKJIUUYZZZX^^hqy}|NCFIECA?CBBAB@@?AH?A;BBED@?=D>AC@CCB@B?D>;B?AA=AEA?B@@=@B:A@B@EA>8;4;7:8;47:794<4<697579<878788613674538654744630631214233515.0/.652>7?557?@AGSrdd\Zcev|qql_cdcadgfddccjffhbdcgdkjlfeace`fgfhdgv{}xw{pnrnlonojibgegfgdhjiefijkqybZSWXMNKLLHOFMW~x|vue_de^_]`\YVVQYGG=2/0)+)"'$%#'%&"""%" 30/42//11.010/3.HIGJJKJLJLKKKLJLKJOLLMJLLKPJOLJJKLLJLNLNPOOPONTMNMJNLLLPNLMLPNNPOQNOPRQRQNPQTUW !MKJHJJKIIGC?>><>=?>@>>??@?<>>>@@AC@??AABCDFEFIKIIIJJIHJJIJJJJFEAB>?@A??ACD?C@A>@>=><AAAA?DBCDEDJIM LUU^cafhfhhdhb''eb`a]a%"SJIEGFDEDHDFDDEGDGFMPONQKGFC@BBBBC@CECGBEE'((&)''*%324452/,*/6370--)&,,+/.-+.,,.,/4:86467;<9;50.0/)-//2214987:;;:98C@C@BACCB>=AA<=B==;<=>?>?;<@=A?>A>><:?:9>;8;?;==>@=:B?@>=><=D=<@@@?@B>@A>AC@B?>BHHKFENORMSYOSTOUW]SXTSTSQ[^WVWYX[[\a`__[_sÁkcdbZ]YUVUNTOUSPRQNPIPKOKFJMPNNHMEHFDFFFGABBGCCFMPOTSVW]dddchbiecgoaNHJGGGFHDHHDDCEBBAEEIDGGFMH@CIFHIDILOJLPYRYXY\_dpu}wHCC?<=8<8=7=::::;?=:8<=:9=;;<;8=:::9=?;<:5;@::?@CDBGHOQZOMNTIMPK?:@5>;97:<8?799<99=3;5<56;478:1;78752=467359327879633121032,602142/36-647;DBHGSo^c`a^gvuvtbdbcb`eedc`]blkdhfeg\ajfjfffeccfbehhfqxyzxvoqpqhonnoli]jgdgcghljglrweU[SWRTKPHJHHFKJ\{wvvf\h`g_`]\XaJNT>69/***+(%'#%!##!!##"3-00/,1-/,,/./21GGHHKLJJJLJHMMKNJJONKLKNQKMKLLJJNLLOKNNLRLOPPJSNLLPJLOOLPLMMNMOPPPQNOQQQPOLPSSW"!MMHGJKJIGJC<<=<>=>=><=><=<<===><<<>==@???=?@?@AAA>CBFEFHIJHJINJNIJJJJGGGEC@?@A?CAAC@>=AB@>@?C>B@BCCCBCBCBABACBCFDHMNP!P !%'fehgieegg))fca__`$$QJIEEDFEDHDEHGDGGGIMNNNQGCEB@@@ABCFEBBCC(((+()(-(253686/+/.1052.-*)*+-+,+,.000,/27;47:;<;;9750,-+-3+1330357:9=68:?9=@;FB><=8??>@?DHNQRUVTNONTYS]eigbb]_lmvxyrpnoikfcf_bdacdbdc`]][WZV[\ceegfa]`RTPOOKOLJQPMOWZ\_edgfnkomttu|ynhd\YYQKIFCIEF@CGAAB=@@C@=>==9DAA???ADBCCDACIFMMGTWYSUTMJEDC@D<@?>=>B?@A;?A=@9=@=D?=?B@?>?=A@<@?A@A??>?:A=>;>BD==@?@=BBA>BE>?C?D=ADAA:FCFCD>A@@CD:B===8:98A98C>7=<<:;<:>;=7:9:9;;8;<59;7989=8<=89?99?7;76:5789=7;=B:A=>EAMGILYLOOMKMPO;975691:67899;348457:636=447<7:9486503375654804635-3246.2129200-8/1137453668=@EJRuag]d^gkruox{oab_f`bfcb`aabig_efhhakldghjkhhcdfkffhuywxyzpqosendnmjgagfefhekjlmtn\VYTGMJJKMGKJLEKIWz|txtvcceb``ab^VWTLFB15+,)%*)''&&"!$""!!!!/,/.12/.0.-,30,.KIIIHJJGNJKNMJJKKNKNJMKIKLKKMMLKKMKNJNOOQQQMMNONLKPKMLMPVPUQNQNQQSUW!KIJLJJJHGHC===<:<<<><>==<?<<<===?>@?B?FAEFFGHGCJIJHHMJJKJEKIFFB@A>>@BBCA?@>@AB?>A@A@A>@B>@@BAAAACBBBABCCGJKQQQ QU_'(fffgkffa'&ebc``&%%PJFDFCDFDEFGHEDECGGEDJONJGFFICCA?A@ACECCCCHC)(,+*,*0/560679/,../+01-*+,+,,*+-.1003./5427;>C@><;;:1//.1-00425558685::<:5:A=C>9?<===<>A=GGQQOQSMQMPTX`fdh`b``ccr}}~}ztrmjihef_b_^ggcgebddbZWY]\\cgfdheec`YRLNIGGLJJNPT]X]aacgkkhimqsx}xif[OWVSMJGDDEFCBA>?@@?B@<@@AC>DBBFJONLNTSRWSRNIEE@EDECBG>BB>CB>C?D<@B?ACC@B>@@D=D>>?<@?@>?=B=DB=B?A?E>AABCCB??EEEGA?F9F?CBADB>D?=BC=?>D@>?=@DGABDGIJPTORVOTUTVWVUPOTNQalceechedoluwse`^kwwnoecba__c]`[]XZVYTXUTZWWVSTTOIONNRNKMNQFHMMTZSQOSY_Z__bddfg`eocSKHFIMFFCGHFGEEDACHFHIJFGGFHGDKIKGKGMLJTUXTY[]bhpyzQHJDEEFADDA>B@BAFA><=A>@??@>D?@@BC??A>@=?AA?==C><>9;=:;6:998:>?@=B@@C@FEHKNMSLKOKMK54:35844469343454551633./144131410/302/62202///1+4,.00240/..//-/1-123/45404;=@AFUxe`\dakaqmdpmmh]ad\ad^b`bacgieedfgjchfaljcfgcdbfhgisuyyzxurskmomjmjgfilfhkfooo~kaTSXRNJKEGHJKIIILLIV~~y{utkbca``^[SUMMIC:/+**)#*'%%$##!#!"""" /0///./,-//-3./-FIIHGIJIJIJMLNJMLKLQMJLNMMLNLLKLMKOMKLMNMPOOPNNQNNPPOSMOOPPNPLQPONMONQPRQQMQTWX!!NJJJHJGIEFF><<><>@>>=<><=<9<<<=>=<=<<<<>>A>@??A?C>DEGIFIIHIIJIIIJNLIJJHJECC@ABBAD@???===@?=?=A@AABA@@C=AC@AAAABEFLONMQQWQX]`()fcfhbeef%(a`b$b%$QJIFCFFEFCFGFECDFDFEGGJMNQKOEFDDCCCBABDCCBDC+*,**/-.3494=6:0.0+*),)*,,)-..+/----+-117468@AEDF>?<:/0/-**.12441457679:<7:?@@BAC??>;B:;ABFIOOTVSLPKMQUZ\bheb^^_[hssx~}qvnkohggehbalhchgha__WYY_bbcffdkehdaf[XTJHCGKKLNQWZ`bgehhkonmqux}ufh\WXRTMGFDDDEBAC??@CB?:@<@C>=?CEFRONPGPQVUSVYRTXRUVHUPUefihihiikrruw}i[`s}ynrpnoehgcg^e]^^]YV]W\XV[XX\VSVVOSNRRVRSSNLNRPQPTQWZabcgddd^dncHILGJGHJGEDEFIFGB=DEDGGBGGFEFDBFJJKFNKJNUTV[ZZcemvUPQIHMGEJDCDGA?@?CB?BA@@A>??@=@@7BACIFHEBDEB>@?F;E>ACDEC@ABF>B=?=;>A::>;A>AAADDKNDKMSPJVPMJG=;=>>?=::88687:=;3633181324135152154062/..+1./03/302/,/.2.1-,*(/-./1042-/239?@;EL{d`[a^ddegalilm^_c^`hc]gd`efbgceegdfejbgehghc`cedempzy{}xsopomjlnjkhffofmrnnyr`OUPQTIFGJKMNGNMLHHNOY{|tthc^X^[VXVWTQJ>71+)&(&(&(&%"#" ! ""$.,0.110.,.....-/FFIHHJIJJKIMPJJJILNOMJNJJKJKKJKOLJLKPJOINLMMJPNNMNNJOQNQQNNQMOPLOPNOOOPQQQQPPMMRVV!HKJJJHDHFEE<:<>@<>?@=@>=<<;<<=<===>=<=>?==?A??A@C>CFCEDGGHFEJEJJHJIJIHJHGFDCB?CCC?B>?>>=@?>=><;AA??;>?;;=;=?FDLVQQONQOPNSVY`bb]^YWTblnpy|zywqpohglifihfjkfbeba`_aX`^bhhdegbhc_\\[VJOCJIKLOPXY]aecihkkmlpsv|yji`YVVVNKFAF@>B?D>A?FC;BB=>;D?;C>=>B>>JDCELHNMMROSTPHSMFFJFFHIFDIGGHBKGGFGEIJJDGFAEFGFCIDEJEFHGBDDCCFECDHGIAIFCECGJIIKFGHLJDJJGDJLJIJGJFJMIIICED@CEFBI?AAKJIIJNOMLOSTSOTSXUSUQOTW^leimpmkjnywwwxbX^t{|ywsjoppkijiae^_^a_]^][^^a\YYYUTTZRVRQMMPRVSMRVZ^]\ae__dgbgmeMHPHCHGHBDH???BDADDJEKJHIHHAEHCHJGFHFLPQYTUWZ[dfs|}u[POLMNLFCEEGB@=GEED>EAD>E:=?A>HKJLBI=CEEB=DCFABBB<=>>>@C@E>?;B@C8AA<::FB?AABAEHFGMMMMNPLTOL?A>??B?>>;;?57678557/33111605305/-/4352024/13/201014/.30--0/22-2+02-/1;.,686CC@FN{}bcce_diyebidkebb_cbbeccaa`jgedcfjgglhheollifcfadfqsz~~|vurromljkkkjjgqipo}vgWXTTKNE?HKEEOKFLNMGLM]i}{vsf\]dcU_WUPQIA961,,)%()&%$"%#$!"" # $$/0/24002,/,000.2JKGJKJJMMILLNMOKPILMKLNNONNJKNNLLLKNPLPLOMKTLORNMPOQKLPJMNQMLQMNMOOQOQUPQRRPLQRXV KLJLGJ==<<<==<<<@<<<;><<=?=?=>==?>>?>?>BAACCGFGGGIIHHIHJLKMKJIHGIFDBECCDCB=?>=A?>>>?>>?B>>CB?BAAAA?FFKJNNOQSRRQTWce&(fkhjgfebdgc``a`%%UKIGEFGEFFDFHHDHCEGGIHLQQONLJHIHEFBBCDGEDCEFG./.21,111=84:97/1.+-.(-)/,+.-*+,.+/05<899:>?AAD<@BF>B93/-*,-00541054:6=8>9<;?AACC@@::>?>;>EQOUNRTQUNLOSU\]bZ]^]\W\`gjv}|vuonjjlooijjdhega`bb]]\`dgkmjhkidccc`\ZWTPKFDDKOLT^_`edgfkonmprvv~}qie^ZSPPQPMHEFFEG=C?C>>BA>A>@=?A?@@;;@;8?<CBFMHPJNPUTWOXQPWSVTRRSOST`njklsoopsz{yx}g`]r{wtyttspljkhfefdecb`\]`aX[YY[]YWSPTRTTSPSTWVSTa`bj^ie`daocMMMEIHIAHJGEGAHH?G@HHJJKGBIDDHDGHHLIMIPS[RRYYY^fiy~}[LIIQLMLDBFEBEACDFDEDEHDEDA>@C@>FINKN@CAEB@E?E@B?>A?>?@C@J>CC>BCA@C3GG?ADAC?IACBEEHLNKHOJNNOMODCB?CAB>B87=6;848133443521101/45312533.-104200-312/0./1.+/200+,2*07//0/46643>@D?Kwuefae_atmjo_ped`acc\ddaeb`gd`lffmbkmfiejeiebcceempqxx|zuplnimqmjhijgnny|dTVPWOGJHLEJHGINHVSYebdghq{zxtsf]aYZUVRS`YIB71.'+($((&)(&$$%% !$10/.0/-..-+.2-,.GHHHIHJKGLLJKJJNLLMNMNNMLMKKJLJLJLJKMMMPNRPNNNJOPJMKOLLMQOPQJNPPNQPQRQQMPQURX MLJJJJGGKHLC=<>>>==<<<=;=<><<=<=<<<=><=<<<>=?>>===>?>A>AAAFJHJIEEHEHGJIJJJJJLGHCDCCCDB>==>>?=?A>@B<@CCAA?B?=@@@EEJKOPPNRQTX^_'%jgfgfe_ddcbc[b%%fQJHFHFDCEBEGGHGHDCFEFJKMMKJIJFEJCBCGFDECCCF,/0/1.2227798756841.0-*)++*+)++,--0.5?D===BDFA>@@:=;;75./,.).0/624348696999=<>@C?@=:9<;?IKOOMNNPQNLMPQRRYWXX]Z[Z[aapwskjlkmjgkjkcjdk`cc`_a`ehpljmigfffa`[\TSTQOJNMJMQU\Z`gbihholkoswy{xvkfaUXQQJEKHE@BDCAD=>@@?>=:==>AAB>>=;@<:;<:<7<>7AADCHHHQNMQOLMGEGEFEGBBCAJGGFGHGDGEDGEDFEFHCGDECCIBHDHGDHFHEFFHEHHFEGIEIGDHEJOFJGKHJILJHKCJMJFGNLELIJLEGFCAFECGDCEEBF??GLPNJF@F@@@CBBACA@AE?@C@C@K;E>?IGC?B<<<<>><=<;=<<<><<<;=<>=<<==?A=?@ACCHIJGHJGIJJIKJHIKKGIFFDD@@>@@=??>=?=>=>=@?A?A>>>>?>A?ADCLMONQQNQSW[a('ffgkgccecbc__`#%_PJKFFFCDECBCGFFHDFGFEJMMQOOJHEFEFBACCGFDCFI*3/////439::937;477931+,--,,-/-./0-58C?:730.,+/./1655148;:97:?==@A>=@>D>>@@AGIJHLLMKMPNNPRUUWZY[a[XSS^euƽ{qkieeilhjgid`_d^]XY[Z^]hnlimiijde_b^[\]USRUPNPUPW[`bdbfgjkolptwwzumeb`ZQMMNKCCA@GBAA>DC?FC;>?;>=;<;B@?=<;;9:6=8<==>?DDGGILJPTJMJEICICDBHHFLBFENBICDI@GJEHIEBFAEBFEHEEEEAFCDGEEFFDGIDDGGCFDFJFKGHEEFHIHGHJJIFMJGDHFEJHEKGHCGD>?=EBGFJHIJLMKPLVPTNVSUTQTPQRgjjqouurrvvvw{{j__p|zxxppqpoqljmklmf``_`b_Y_^UVZXSSQURPQTQWY_^af_ee``boaPIOHIFHAEDECDE@<@=CBECHGIEBEEDHGJAMFNGMKURZ[XX_cp{yOLMHMIEKIJAFDDFECCIGIACCAHEGCKLMSRBDEGFEDFIEKIA?@@@A>;=;753434316624014:342136507061.38121.-./0.-//01//+/0.,0/000/-1..202?@DHLp}b^b`_ruqifohdca`\_[_c\e_heg`eeinivsjkfohdagadc_lkrz{~}yvpjojpnooplwlYWUNNMFDED=DDAEJGKac`bbaebjco~xswtaWS_XVVW\^K<7+)*,%$%$&%$'&!"!"#!"!"!/0120.//..2/0./0JIGIGJLIJIHJKJJLKMMMKLNNNMMPMIKKKMNMLJQLPQNQNNQNNNQQRONMOOPOMNMPQORQOSRQNQQZ!"QKKHIKIJJJIEC<<<<<;;;<=>=;;;?==>>?<<=<=<=<<==<<==>==?><=>?>BCGEGGIGMEJJJJMJJJILIJFEHBA=?@>A>==<=><@B>?@@><@?>><ACINOMRQOQQTU[%'fgfdgbacc('b]__$_`TKJHCFGEEDEDFDGEEDKNMNPOKHJJHFECC@CBCGDE./-.///2279=8056889;:84401/0310213-69=:>>>@CBDCDBC?@>>=5/,--.0./4516:7;<;898;9@<@<<<>A?AEDCFKDNLMHLLJLJKTYYaY[]SZ[ZWfwʺunhfddgdfbcedb`b_\XZ^]\iomlkgkfbfac]_]XWQVTSSLQVVX]aadkgllnkoou}}srib[WQNIMJDBD@D;=;=>A=F>?><===::@<=>=;97;89:;>???@ECDJFGRIHCDA8;=?A@@>B?CAMNMLDFBECFDED@BBDA?@B?BCBA?BCBF?CAACGCEGFCIGIFCIIGGHHFCDECCEGEGEKIEHIHFDFHJEFDA@?DBGHGHLMQSOULZUSVVUUQTPSSVmjonrvutsutuwzzyo\[w|xwvrpponljngeje]b```]]\^VWb^WQTURORPRTY_\\ebc`ca`ncGKLGHDCDA@BGEFEB@@ADCFGFEDBEBHGFGJGFJKJQSWSUU^caltzTOTKMLLGHH?IGHGJCDDDICDAEBI@GRRRMIBCFGCEBDECBGDADB?CCAF@F>?DLBLOMRMErWG5DE@@EE@H?CNPMNJLNIKOHOMUYZJMG@>;9;854674443634/56066632623.5325974141/./00/+110/+00-////0323/0/4/3;?BFLr{ab\]`o|qlcelkdbac]_a`d_`cgheccdlmz~nkbhaefadcgcnoxz{}~wvpqrtlrqpt~q[PTTPKIEBAJGD@D@EIO_hh_a]_eakki~|ztqmSZU[UZWSVD@0)'+$$#(#'$&$!##! !!!&!00.11.10211/000.JGFHKLMJOPLPMLNQNMMNPLOKOQLMNOPNNLLJNMNPOQQNNOQMPMQQQVPQRSPNQP! QSKMIJJHJJGGGF<<<<;=<<<=:9<;:<<;=<><<<==>=<;<><<>=>=@?@<=>B??CDCEHHHJIHIEIJFJKJHGIIFFE@@@=?><>=<=?=>@@>=>A=@A>AEILMPQQPSPVV_&&feefdfdgb'(c_[&$_`VLJHDGGCEFHEFDCBDDIMLJKQJHHGJFEDECCEDDDGI20/0-1-2158=<7789<89C>841111110/265574:B=@?DCAHBBDBCEA>7643.,--22538:9:=87;:<@?@??>:@AECFJLPPLIKIKKIONUVXZYg]bbW[Y\]hvzȵzlhgeadeabaa_e_`]WZUYbgjrqoohgdaeda\[ZWYPXUSUROTW^\^`bjfikjnopu|~rtlc[WTNFIDDACA>?<>=>A=@><>>?:>9?:=:9894989<9=;?@BAIJMSHHF@?8::99=@;@@?DQQMMKCB@>A@B9<=?;<=<>;AC?A?B?B@<<7:=@?CAADENJG:?EBB?C@B><=@A@AJE@BA@@CDDCG@DB?A>BFAHGKIKJQPMUUMUUVSSLUNPOPelmrojwy|uqtvszzzr[^o~}zrxqnpijlhcfc[]_]lb]]]^T^_VUVVSVRNUSZZ]ae]ahedinaGHHDIDCCDBFFCCAA@@EGFFHEGHDCA?CFBDHEEKFSXSVXWY\cnx}xXOOILFGCCIJGGDJHTMMOIDGDCG?BBDEBBHBE@BBABAD?BA@DEGLNKQIFhWD>HFADCDCCFHFNPLPOOKKQJJIONHKMB6B<989578.133150225202320477/153549<5001+.1-1.0.0.,,/+-210*/0/02237149CBEIqw[b^]deymg^kfpgg\_]`cb_badbdgddiii{yhljca_bbcgbcjqy|{}xqpslqjqtur^WUPUKGFB>DAJECEICML[idie_acednrvy|yollSUYX^[UV<:5('&)%'$%%+''%%"!'! #!"!5+00./11/012/101HJGKLKJMLNLMMKNQONNPNLMMKQLNMOPOQNOMQSQQSMQORNQNOQPPQTPQTQPVSQMJJIJIJJII<=;<<;<<;<;<<<<<=<><<=<B?>==>?@=BCCEDHJGFJHJGGIHJJINIKJ@>>?>=>@=?@@CA@A@@?=C@CCFJOQQQOUR! !$'ffeghegfdfd(&$$`__`WJLEDECFDHCGEDCEDEJLORQJHFFDCCEGCEFCJH/3/../.2288;<:88;;9:8D?94213443555769;<;BB@IGEFDCEDEFCB@<<<.//.1190989;:8888=<<:9;A?=CDGGGKFIDDIMHHFNXXXY`U\YZYX]\^adr{}ŧ|mkcabddbb\\Z`[Z\\[X^]hmjmomlffe`ba^`^Y`TXTVUPYVUZ]_bghiinjqkvsyyvohd[XQPLKCBB???@>A:=ABB?=9>;9>?AA=>@<@>67576:99>?>?;;7<A?CEEADEQKGA:>>==?<:9?AEDEFEEDBCCF@@EFCCFE?EC?D@FHFKMLMORQSSRTSPSURTSUVmgqnmvtx|zpryz}}i\bs}}yzuwnrmhjjdd_^[_`k\[]Z\\XXXW^\WQOOTYWW^d`bdbdWer_LIJFHDHFDDGCFFBE?EDDEDDCAHHCCBFICGJMGLGLTWPSX[\aowz\PIOJHHNHIDKDAFEAFECASJIGLRRSIMFGGEIIFEKH>DEBB@F>ECC@CBB@EHLIHMKKQHAf[EHCA<>;:795834042.3225322/421862/32634:934.23../.,0.////..*/*0////1,221227>=DKhy\^a_aajdck`jig^Y`_b^^`acefj`dhignbkfmgieddecdeimmsyzzwwwqprvztbX[UWKHFAIECDFJIBHHJM_ggdcccceegjrvwyvuolTVZS`YQQI93)'*+*'%%($%%$#! %$$"$#%"$2//00...*/01///-FHHIIIIHJJFJMMJMMLNLMONLONLNOJNLOMQMINMKLKKKMJKNKMLLMPNQRNNMLPNLNNNONQNQPQLOOSTRSQQQRLQQRUTUQKIIHIIGIEGFD@==;:;:;;:<><;<<:;<<;;<=>=><<<<?<=<<<<==@<>====?>>A@?ABCECFFJHGIJFKJJKIKJGJEDDCBA=>=>>><<><<<>?@BAEC>>A?>??=B@@CAHIQOPQSQRVSX__dgd_fffdcdfeff_^`__TJIFCEDFDFFFFCEECBFGEJKPMMNNQMRNIFICCDCEDBBCDECEEHI.2/-.-..134=9:9<=:<;BADFCFBDHBDGG>@><62-//418495:8<<;:;>:;@:<<=?;?=?@A?>A;?>=;:;:<>;<>;=8:8875<4;:<<<9=DEFHKLHHD=9<99;8???@@CJLQNOGFDBC?=@><:=:9;=>9@?;:ACAA@ADGIHI>::;8;?@;>AE>CCA@AA@@>ACEEB@@AB=BBEEDEIHIIKGTQTQTQTVSQSNSQN^nmkonqtssutty{{i[br~|zxtqqlsnkgh`b_]aa]]^_\Y]\VYWSWVWSSOKUT_`ecb`ie\dqaQLGDFGBE@@HDDHEAC@?FFFCEDGDFE=DIFCIKMLLOPQWWZ[Zcju~uWQJMIKCHGCGHFDDBCHFDDIDJIPQSQGIIEGHFFHCDGEFDAE>GD>CCF<;ADHHHIGIKIJJE`UL;EEAEGAACGIRQWSLLIPMMNIIFC>HEC=<4;86;81/122324344//122513.0062645724.220.,,,.,0.-//-/.*--1/..-2/1/6=:AAHiy^_b_\iifgh]he`b\]\`[a``l]ejbghfehhhinbgdc`ccfidlqzuy{yxsqsttvdPVTTPL@EF@D;<;;;>=;><<?=>B?BCCDEEJJHIHHGHKNJIIGGCFCCA@?>==><<<<=<@AACEDDD@BC>?==>?@A?FKKPNPOSPTSSZaefgefibdfedd_^\^_^XVMGFEEBCBBCCFDCDCCCGEJLOLMLKMKPPMKJCCCDCDADEECDHEID,/0-.-/0/48:979<=@<>>=@B@:585:9<76478<?=873/2-011278:77977:7::::<;A@EJFFDJIEFAHFKJKOTVZ[Z[WS[Y[\`b^epz{~}}ί~sokgbacgc_bec^`_[ZXYVSWcbaiomnijfc]a[\Y[YVQOSSORSUXY`bfciihgilont|~vrhe]XPKKHE>A@A>AB??D<=@;@><;:<<>B@<<>=?=89:395<:9?;<=:9?:>BCAA@:@>>?>BACDA>@EHIDJELMGMNRRPTPVTUQUTPQNTfhlkpotvuurtry}~iWbs|{uwwuxqoqjmigghddb]``a`\\XY\XYTYVRUSMRMOUWX\^c_a`ibcqaJIDIFDEGDDHDHECCCCEFEFDMC@CABAAJEFDKGIHMPPURQUV\hsz}WHILJJCCGEFBBGCEFHKKHHJKMNNKMNAEFCFHHFHJHCJHDCDDDBCB@ADAAGHJEJGJLLL?]XJ=GGFFIAJAENMQTWNEKQFILJFD=EKJE<:<>94352/14343/341027/35441639326456.2//10./,+(0,,-/.0//../-/31.04/1:@DAHfr\_^^Ze}ec`b`i``d_]Z_[b^]abie`gijhhhledjihcfcbddddvwy}~{yvvz~f[UVOLEABD>D>CBFBIFIQY\\`jdgcccdf_fkmlw~vqyrd[PRXXKLG=<,&%&$'%%#"""!#$ #"!!#"$'0/-/.//.-011001/JJHFJHJKGIKGIHJJHGHNOPNNKOPOOJNJOOLMKLNJKQMMLPLMPRKPPPPPQQSOLPQOLOPPQNLRRQQLQQPTPTTQQPQMRYTQQJJKIGJFEHGDC@=<=;<<<<<;<;::;<=;9<<;<;<><<=<<<=<==<<><==<===?>>@@>?>@CCEEGHFDHHGGIIJGJJJHGECC@@=?@<><<>BCCCCCDDCBA>==>?>=B@HKMPQRQSQSUR_`fdifhkfcgccefa`_^__XJFFEECFFBDCECCCCCCEEILPMOOLLOMVRLJFCCDCCBCDCCCCADD++-,0,-1-4;;;77;?>@>=@D@<7695447577>==BEDGDE?6612212-2078:58<:8:8:;8=<@CCHEHBEDBCABFFGFOMUYUVTUU\YTZY`]an{}y}Աwwujifbdhfaecd`ba[XUWWYY^^_hejlfiff`_`Z]UWTSNORPSRWXa^`dcidgeechjo|wupn_]XSMKCCCC>@?>;B<=@A=?;;:=<=;;;;:9<57;5::>8=>ADIDNMGKF?;;8<68B=?>8=HQQOIAE>AACAB;:9<:<=>?>BBDB@=?:?;=>AH@@BGDGMNB@HCB=A?>DC@DEGBCCEA?EAADEBACB?AAAAB@DFHECD>EEHDGHJPLPQUUTXVbip~yTKMFKIGDJHIIHFDACGJHBLKMTOLHHG>EFEIHLHDCFEHEAAEB=;830/101),,.*'$$ ! !! ! !" !"! !% "! "!!!#"$$ #"!" !#"&$#$%&)*-,.-...++00010/2...,*)'$#!$$&%'&'#'))(+,+''&$" !&"%''21159689:=>9ALRNSPPORNPMNNOKLGJJC@3/+)**,**)*+)&')*0*,049524111*4<:.-'('((((*)))*)+,/*.,.11134989988:=?>?<=@8;8:<;>;<;??<=;8879658;@;:?@>EAKLJIH8>>;<9:;;@C:BNMONKFAB@F>>><9<=;>;=AA;CC>A??:;=CECGDGCHLIFDFEB=?>>ACCAB?DDEABBDBDB@@?BCC=DAEDFGGIKNMJKRSYWQTUVUPPQISRbiiomnmlutuvvwutxuygV_uzywrqolnoiighcdbi_`]``a^b_\^UUXXTWTUONNQRPUV``bg_fd`aqbMJPFFEGDCE>BJHCCA>CEDGFBFHCC>@EEHGDANBIIUSVOVU\enuyxRLJFFFHFJLCGLDIF@DNDDQSKPKJECJHJEEHFIFAFPGC@FEF?@AB>BEFMLKMKGEKHKMGLNTE@MMLIGE@CIQRQTSMMJNHIIIDHADKE?;89:766663424.20201.2.510225145526750.,141001.0/,+/*0.-.--+.-04-./152<>>CB`n_a]\abroa_fg\cd]]]`^][]bcececghijkilihddeecbdfflnuv{}m]TRSQHFCAA@DFFBHALN\Zc`ace`kkghcb`a`cmmkgnx}vwrpd\OQLRH@;.1*&()"##$%"# "%## "##"!$## 20/.01,.100/0/.20///501/21//002/40656167365474575234492934373763665378869556456585456659776747:8:<8:7786=;=@951/./-++,+,,$ "!"!!! " " !! !#!!" "#$!#! "##" "%#'$&'*-,,,--,//.0121-1/+-*)#%$##%'''*%$')')(*'%#"$# #!$&)03579=866:<;>LOPUTONROPRQROILKMLJA50-*(+*)*(+)(()().*,/33403010/51982''&'(()()'(%(*+++,*-0330378<<479=89@BECCGD?B?;;:<8@=;EGAJEEDBC@@B@C@CB>;66664510/164988:6:76:99==CBJFEDEDBC?E@CHDFGMNPSTV`__`\[\afl|}ç~xyrqmkgggefdeba\]]XWUTQWVSWachihgcdcb\_\WUQKIINQRPVV\_bbbga`\WNSX_nv~ztni_\SPLGFBEB=@><>?=?:=;?<<=>B8=997866587?:;><@DEHGJIH;?8?7;??>@;9DLNKOGCABDD@>:;6:8;<<>?AB?A>?@;9:>>BBCDAE?CHNDEDGEE@C>DAEBBACECCCCBFCA?A@>B>?@C?CGFHCHFOOOSRTKTMQZRTSVQNU\ggjkjjnjsvvzvyvuywwg`^p}z{vrvrsmmmhmfjhfeagdac_^c_`ca[U\^[XYVUVNTMNNR[\dacb]a`Z]q^QLLFFECEA@?BH@@BA=CDBC@EFCDFEBBCDAGAGDFPQQTQSXajku{|YKMNMHEIEIFJKDGFDHPNSQQNMGHHMMFLICDAKIFKICIFCFH?@ECBDFDHFEGMEIMMKJEHDNE7LGBFGGEFINKPRQKKJMKIQMGEI:75:48:7640031/02/31/.0034205541171-./4../-+-,-.+,+.-..-/,+,,//0.031??A>FXnYc^[\_mpe`nmabd]_\```_[`dbbjfc``gigneidbbe^Zefdfip{{o\RMTKMICC@=ADBDIKKPZ]b`af_bfdhjhadc`dhhmolomxwvrr`RFNUG<7;2,*''&%'$%$%"#!!!! ($"&"$#'$0120/0102///1/2./2..11//31/111/4232382791345235326435744342564766;7766;6769796664664885159687686;A9587859>=::1/1//0.-.+*(& ! "" "!! !"$" !!"!!!!"#!%!"#""$"##"!$$%&+*,,,-...2/2.//141/+,-%$%$%%&(*')#'(%&$%&&$$"#" !%"%.2475499:9>>BKPPRQONPNMQRSLIFIJGF?3/+()*$&+(((&('+*)*.0694231..-215<8-(''&&&))*(&*()))+*,/1/+2487<:57;89=>A?>;:===>6;<8??:>>:?::964<777<;=@BEDMMJJ=?8=7=<@A@?>HONMLEEC@AB>@=:;<99>@FB@=BB>C=8;><;?ACDJF?IKKCHEDDCDCAA>?A@>DADC@DA@F@@BC?F>ABAE?EHGDKJNQRRPTU[NXXRPUTOWV^egigkiintustsrttutj]^l~}}wutswtrljihjhlgedadecea`a^_]_VVZZX\ZWYXQQMPLMUX]`abe``^boUJGGIEGGGAD@?ADCBD;@?=GEB@EDD???DDFHCDJEIROSVSV]jeszYKKPGCKIHDDKGFHKHHLPONNEIKOEIEJBC@HHCKKJMHGL@CIAAEFCEKHBHNFNJDEGHQFFGJEED8<:748;<740202.020,-.2/003512442/55400/0-.//.0.,*,-+3/.-,2..2.1//.-027>CEGXm[\W\V^epebecc^`b[Y``\cbcheefgfgekfkkjplhah_^hggnpxyxaTNKDQFEA=?@EBCBFIS]]a^`Z_gbecfkne]agbdfihmliktyxwmiWKLUIA:41+''&(#'#!#*%%# &&"$%$#$'&%'1.30121/210252//,./112334/020/11181186544245252626322446343015579;766786;567973:47786666322286666<=98673743/,--1)-(+($! !! ! ! !!! ! ! ! # $ "&"!"#""#!"#%&')+,--.-/-..-,//00/,/,*'$$%')&('&$$#%&&&)(%%#!!! %#)02457:8:<8=??MLOORPOOINMQPMLGHLJJA401,)*()&*'+(*%+*++,.353431/,1-044840*(&)(+)+)(('(*),..-(++326667599;698A?B@DJE:=>??BDB@EIELBIKIEFBAF@AA>5359685241101666897889:8;9@DBHGEGFCKFJFGFDHDFJLMSScnpnlicYXakpu|~{ֹ~|}zvrpknkgdfbb`^b^]U^YWWXZZ\YZY]]cahec^^[Y[TRFKDHFRRRT\\]`de\XRNJLDJZgvyqnx{{zmheYVQKJJDD>C===>@?=??=@?A?8<<9>9=;;@:=A96;:3648:>9:=>AADHNHJG@99889?AA?A;:@AADHDE>IMGDDEEAFCF=BCA?@@D@CCD@B@A@?<>@D@EA?FBBFBEIKLONQRPRUSXWROPNNRYhcmhlmlkmmrsppnotrytc\_m|wwvwururspqnkiegfiebdb`b`^aXZ^^[ZVYXUXSVVOOONQUUX[^``fc`^bg]JBCHFAFEAEBBFDD;B>DCDCCBDEGKA?EBID@GFIJNROQTZW[eirywYJNJIDLIKFDAEEDGHKRTMQMOIKKHJNPIFIHHGHIDDBHFABC?BC>EHHIIIJFJHGJDDHEGKIE>PEGOJJD@IQKRTWRePJLKCEEDC:FOF<869425611-1-10312433012/32315655362341,/-0-.+,.++()0+1,+.,.,//3,.-169A<:=>9./0/100,-(*'%" !#!! ! #! ""# !"!"!"""!"!#"#()*)-+..,11.000/01/10-*('%(&'&(%%"%'(+((+'&!" "#$%*/146558;9<<@>OMRNPSQMLLNMNMLELJGEE7,,),,)*)&))'*,+*+(+.64357/1.*(*412:4+'&(&$&&&'+(),+//00,*.2439;74699999:;?@BEKGBBA@@@EBCHAG=?C?DBBADB?C;33567;764002.747;9:=5:<=>BFIHED@EJFHIHIFGHJOMPT\hrwrnsd\Y^innru~{yrvummkhhcad_`^[^`]T]WZ\Y^VZ]hcbdeec^]]YUPOMJHJIQOQQYV\\`\U\WOIJGIT_iw{pfdkuz~yxlkf\XTJJGBA:;@>;:8<;:=:<==A=DLTDGD>=;;;8>?B??@GOOLNCACC?@<;<::;<:>?=C@@@?@<<9;:>@E?BBDHCABBCCB?@>C?@>A?>BJCEFFFJMMMHRVQUSTVRQQLPTM]eekhjjlnotsrpqovyuuuh^_q|~yusrwqpopjpfkjgidgceaa]g^]]\X[]WYZXYYVXWUOMSLQWVW^a`afcc_]XNJBDHDBAD>B@@BAE@?>DCCBE@GDABBAF>DI?EGFJROOSOXXZ^kszvXJHOLGIHFDDIFHDKOKMQKJKGKJLJDLLLEHFKFJPJFIHEBBF?@GFENLGJHHGIIJIDJQKKHPJ>EJDDFMMEFLLRR[FWGCEJMICEG=CGE:9<=948515320011-.21/21404/0043342824//.-/0,,)-/-./030---/*01../,0.238A@BCRvb`Z\]^cpZ]^dgic_Y\]]]^_efafgjdidhldjjmkecabimijncUVUQPHGDG?>F?AHICNTY]e_ac_bc`ac^lctcc`b`aahklgk`jn}yxkfSEL<80),*(+$'&" "&""$%#'!$#&%&%*%$&"121410400342.12//53/20/0.-11010102246588:52436539354154747635642668475;99:968988;685977949579788><;98686;A?>74.0/0..*,,*('#" "!! ! !!"!! "#"!#$ "! ! "#"#"#%'+,-..-///..//200.2//*+%*%%"$$%"$&(-*).()$%!"$%(,1545::79:;:??HPMPSUPNLPLPORHMJJLOF6,,+-**,)*')((*(**)+,5163232-*-)-325:1()*('((('((),-0./,...1537:8579;=5;7???><@E>C=ABF>EAEDFGCFBFEFGIJMJNGGIKPMUVYku{uypj_X`dgikoyźy{wtsvojlhgfece_ca\\[X\UZ\\Z]XY`\daeea_^\WWSKLIOHQNQSWVPZSVWWUUMGGFEJT]my}rfUV^jpxzzwpia`\UIJEIB@A>A>:=?BB?><;>;;9@;;;=>>C<<<>KQRLL?A=?@@>=;:;:;:9;?B>@AA>A:9=>??AA>AHCDMNJFFEECE:=?HCADCBFDBDBCC@DC:AAC@DGBCDCFEIKILNQIXQROUTUTPPOORXfaflkmmonloxossrywqqu_[_q~}y}ytuspqsnjrkmhkmigfdb`_`[YT\`\[WZWTXXZXKYTVRJONRVVVZab^dae[XOIMFCFGDBBCACGDBE>=>DEBEH?HB@AB@D@EH@CEFKKPUVSZSXdnrzwQLKMIJJEDIGJCEFNTHRIKEHLHHNMFPIFGGFEIQHOFEKEHAGD?HJHIKGFAHHKGMHJJJJHOSODMGHHHJ@DFILSTVTHHOFFPICAC?EDC9?98:7523420.,0-1//2.6141044/66654401512/4.10-/+,*..0/,1,1-131*..1--/;=@B?RpbXUTW^_e^\g]ecc^`Y^^Zdebdaecieg`ifdhkghgggejoovl[ZUSPLKEDEDCEE@CEMSUb^]b``abfb`baakiobff_`hjimkkdglmqxsbTHC86-/,*&'%+'"*"#%((*%*'$$&%'""%#0-22113/.1230./.../023202112110153025824566664737847878716232.35568475:8799677965745:5;686;77899::::7=8;FKQPOOTQNKNOPPHMHKJLF3-,+*+('$((((''&)).,1344514161-.+,--:75-'((),**+*,-12/+./..040587188=7655879>99=>A@?>A>FBG@BACEGBA8==;96878676;:>31/00052996687;>A=ACDCEED@BKJFKFHBIHIOMRX_hmsttoka]acddkmtvzȭ|{|ywqspllgeeilkgdg`[_[Z_]\`_]\V^afeeac_^\\WUSPMTNQNQPVPPSSMRNIIGJDEFFIS]jqy|uvneXZ\fkovytogc\RTIHGAFA>?A>?B?=@>>@@=<9;::><=@;<==>=::8;498:;A;B@@HQGKK:97;:8?=@?ACNNPLNFCDA>C@9:9<<=?@>=A?@@>>?;8:6@;DA?ECCEOKFDBDIEC?D?C@>DC>CB@CFEA=?>@<=@BCBACEBCDDFKLJROSOUTUVSPUQNSN]d`giilkolhlomutqyvqrua^_n}|yvxstuquqmonmolihfcefdbaa]b[`\Z`VU\W]XTXRWUTNGMMRRXW]^^a^_f[^RPLGFBG@ICB?AFF>=@B;?BB=?>FAHHECFFFLOQNRTPYajq{}PFNILOJFIEAEGALRTPVDLLFPILJHIFGGFEJJIMGLJIGDEBJCFELHJMJKIILKSIGLOHNLFWM?JGKJKKBAKDLOLLKFEAKCLLEA@EBHC756<43642200.31222/2+10,142./33.4/0///00,0./--/+,+--0.+---+-,,+,+*.2.56?@DUx_`a]Y^_]_\b^bf]\\_\__a_dffciidffhdenlmihcefgun]XQSNPKGO@EA@B?AHKZ^]`bd_c^cccc`\`begmmcbacedjhlmlhjip|xxveRY;57-+(''%#$%"%%$$*)&++((%##$$#! 3021320.2.///1-0/-/133113/31111-334475136995244442358474851652665595775:9477759745688679467588567:;?:;::@>?A>GEBDAAABECB@?>=713766347<86/-20/55:854:88=;@@>>=CD@>GKHDDCFBFBIFSSQP[hstrqhi^`d_ajkqjv{{}ʿɻ|vwrtrpkhgignjii`]aZ[W^^]a`]^_[_bacce_`[UYXQRPOORPPQUMKLGDBEBGBIEEHEGLKOajnh``]YZejhqtxtlfc]RTNLIFBCC??A=A=>A?;?896;?>?B;CFSOKJ8=<=9:E;C=?ENKSLJA=A><@?8<<=<:@?BA>:=8=<@?BF@F@DKRLCGFCIIF=A<C?@>CBBCFCEGHLHRNRSQQTNTSNQQPQTageghlkkpmnqspuusvtomoa\ar|xxuvttnjvqomkllljnigdbc^`^``ZaZZ]UW[T]UOVUTQTRNJMNRVV^`]_^`a[YcSGAC?HCD>C>AEE>GCC>@?C@CABCE?AA>DDELFDCEINKRSMSY\frzyNILFKMIHGEDGFLQOKLKEIJLOGHLGGIEDFIIGILMMDEMLBBGCJMQHKHGIOIIKPLHMMILDCTFADEHKKNIEHKPPNPLBHGMJGHCB@AEEG;54;72211/1235134/.0/1011210104.21/0,-./+12/1,/),)++0,.*.)././00/-1.33:0')&&'%$')%$##%)*'+)&**$%%%#""!22201020/132.4/2,.0/1/01200/3/21/01442414466333428736465764655344645968487:676683577764=8=9:8999;98:999:=B?<54,/0/+/0.-.'$! ! "!! """! "$"# ! ! """""#%#"#''*,*,-/.1/.-+0137/0/,)*)%$%'&"''*''$%% "'$.1577768:7:9=;;BHLPNRSQQTRQPOOJEEKKKE9-,+*)'&'*')(,*)**-,-53154420362,.--1264/,(())*'---./.+,.0.24343958::67348;8878979@@BDB@F;?;<=40-64;8;6>98//.18365;:5;88?:CCC@A?A@BGFBDDDDCCJDCLIPMRemrlnka`eadjmljox}þzzutpllhhgklbbbg]\]]^a`_]Z_[`\Z]`\^__^\Z]RSUPSOQMQRRMFJB>?ELFGJFDBJFFFL[[Z]VRX^_hqpvtxsned^UVLLGE@@@<>>?;;=@<>@9;;;8;:?9:>?==>=@>?>;888:<8;?=>=>DSMOI><9::9A:<CCD@>;=6::><>=@A=BC@?A>BCD@C?CF@@A@@@E=?ACBCCDBJJPTHSQRTPUZSVSSQROP\afgejikkjklpnruvvrtqqra^`p{yzwvqtsrqmpjlnijhgdfeg`aa^`_aX]\Y]YZZYT\SRVWUVXQNLMPNW\Y`_c^b_]`fZGGLFDBGEB?>AC@B@@=?CEDBFCEEABHBDDEDBDAEIUPTTWSW`htywPLNHJKGNIIEJQROPQMNHLNQRDJPIJLJGI?JGHIJCFFLIELMBILMHNHDFOIHOQNKHJJICADE>HHDJHJEGHMJQQIMBJGGFMHDFB>FFE998896350/320/0/2/02.2-//./..40/*125..,---1-0+0+*,-,/-0,/-0.,2224..249;=>1&)&'&+$##$$#$$'+,-+&&&%# "! !5643323//20/-/./0111334///007.2.423354752647849497774965342554355548757564:49455517555388::96688;<<;9;:9:E@:540-.,.-.--,&!!! !! ! !!" "! !" !! !$ ""##! %!!$%'&)*-,.0,..,,.12430+,,,,('(')$'"&&$##""#&*/32665:8;6;:;;:>GJPQOSSQPPOMRPHHLJJGH9-'*)))('&*'))(*)*+)-6642261+0/31/.,0,292+)(')*)..12/-..-,-0222765456:;97;;:782799=@BCCDCGAB??B=D>@4441.,31782/049576865748::A@DBECADDCCCJECB@JDDDFFJOO]_hgikd\geghjhqvƱyvrnnjiigflffkh`\bhgfgd`\XW[TVYZZZ\Y\]XWWTUQSRTOQUSKDGBAAACACCADCFEDHPXZ^\[eoqtw|}z|xsnic_ZTLFKJB>>@@=C>9=>:8>=;;9;<8=>:=><;:9=C?7799;<@F=@DHD@ADED??A=?AAA?BHCFDFDIFMKMUQOSUVUTPTONQLW_cdedjgkkjjlqqwuunlmpsua_^r}wyvvrxrqpnlekiffhagbeba`_^a]`[\^\]YYYXS^TVUYSRWSNQJQNS\^``e`a_^`fTIHGHAGDBCA>IBB@@@>?>DI?FD>CBCD@HGG@CEFFMSPNLNRT`go{rRKJFNMGFHKHSPTLJIDJNKNMNILPJILILKBHKOIKDCHDIEMJBKLIHIKGJIMJIGNGPRJDBFJI>IFIKIPHAGTGHQLJHBKGGIEEBB;@D@:;766313003.112././,,/1./+0211,/2,02///.*+--,+*(*(.((,-+/,+,+-,1../2/9;=ABJv[XY\TZ]]a^c`\]]\[[Zda`eeafffkghgkjimmfmx}iXWOPXMQOQMJRLNJHEM]`\^c[^a_`^c``\b^gdcdgiphce`fdflkmnijejlq}xnO?5*&%')&)&%#$"%"#'$)(&$$$! !$#"!7511431200261330120021112/1.1222521764455674503552255:7763364135288616<;888996<6776796:886::5:<:8><99=8;;=;:300./--,-+,.#$! !! # #"!! !""$!"""#"###$#%##!%*,**-1,..+,./013/12/,+*&)('%$#"$ "!$$(-/3565397:6<::<=?HPPMSQPQNPQPQPIHKKJHF8/)+('&(*%(((''+&)*+.25/145.+..0/.-+./3/35.)(,-+.//2/.,,),./1012273259:;<:;;9::<7;=>>AA==D>@:?;=9?A52/.//05;A<;AA9//0255:894375;8=A@FFAHDFFCDFBAFD@IBDEEGGIPSccggedbdhklow}~ǽڻ}wusqnmhhdeifea^Zaciaac^TUQNMMPRRSSSRT^V[UYYVTTSRPQPRMNJJJGGEHILHEF?CGOVT_lcjry~}{wsol^`UNLIEFE@AA<;<>=>>?=><8:>6=7:<;=><>?<=>@==::96699=;@A@JXONN=7:7;8AB<@?IOQKLBA?@CC<;99;<<@@A?D@=C@=@A;9>8JKLFAGDEDF@ACCBBC==EF?CB@BBC@B?A=D?@BDF@FEEGNINVOMRQRPVTUQMNO\dcagfkhhijkllrsptrpoprtbTZqz~wztvvwqollnjfcjhmeecb`_e]b``\_XYYYWXUTUTTSXXVUTNNMIUSU\\`[_ccdc\TFJHCK@GB@<@=AAE=A<@DBCEECDACDAB;EE?DEF@DISNQQRSYZprx}{sUMLJJKGDIINTRMGFJLLLJNKPNLIIJGDHDIELKKF=BKIHKRFDHQHFGJIJHIJIHIFGNFHDADC>FGILLKFAGMHFPLGEEKHHDDD?DA=FH7=5479322/-01-4././*.+,+///00-.14/-/0/-1)++-.-/,/-,*)//,/*-+++-3-0/./;<>CCPrWT[WVY_bbc\`[_`]\[Z[aahfehhcnhjmnidpmvm\\QXWQVSXMOPOSLQJJXV_`i_`\`b]_^d`_\b]cb_gkhnfc\bbcgonjdhhhikq~vpQ?4***'%%%%#!%$&&%("%%%#%"%#!###$%013652061/11202/-//024/6010.4505465466466555626647565642652322353508:9:9776768666768:88:<6:;88=8>9>;7<69<=73/,-./+.*+)$"#! !" ! $!!!!"!" !!$!!" "&!"""$&&),,,,/-,../+0/.3/00-1('&&"! !"##%&)-24745279896;9;;=;;8=>??=>A:><>@=>:535*--61:ECCGHDDGHH@ABEDE?@F@EGFLUTZ\][[`eepuzɸrpkkfdfbhab`[\W]Y^^cadb]UPNJHOJMLLLMOR[WYWVQUOSQTRSQSKNNKINMQONKH?@A?>OUVdiou~{wrmg_^SPHIHD@>>>=<>=>>8?>7;=;<<;9;;;<>?<=>=;986<;<8>>AJRMLKBD>?B=9=6>:;A>?BA?FB@@>?=:?=9;EADE@HHJHFCFEAFBA>>ADBADDCB@AA?B?@?A=A>??G>EFFGFJHLOOPQPUSPVQSQNPKY]addeefdiimjjqptrvtuqovub\`q|}vusprjmhlcefjfffef^gYa`_aZ[TXX\]YXUSXUXWXSVRROKPNPRUX[]^a_b^XZRGCIEEA>?A=CMOGC?==DCGFDEGDNHSXVR\]lry}~rTNKJNLLIPUTSOGEBENPNMOKMJHILDIFGJ@IIKEIIDLJGJKJJKPLHLDKFDHLFKGHGGIIEBHL6KJMLMJFFDIGOPTDBFBFIGF@BD;=D>5:9677230-/-1---...,.,.++..--5314502/0-,-.*-.++,-.-+,,)*.+1,.,.-11.0.BD??HNuXUTSV^\loe]\Z[[]ZZ`_echbfieklijjmlm{m^V\XOVVYSUSQSQRSN[VY]^c`cegc_[bcdb`Z^adacbbkmof]dgckjllljijcmhpylY@53,)(#(&&'%#(&&$&%! "" !$ "%$%$#416242/23/202113,100.402210032-11237593554:66355269857655464345174668;:978899:8:95:777749:7:779<;;:9:<97;;@=71..30...)+*$$ "! !$ ! !#!"!!!##!#""&!" !##$&()+*0,-/*-,,,/,101,-+(%""$%(,.0/3676666767<8>=<=DLPUUTNNOORKPLKGDJJGQ7.,--&*'&(,'(*((+((+*334423,**)(/+,0,/-015621-+-/,../--..032312124177:;;:<7:><:<8<5:<9A>AB=C<6A<:83,./11757==;=<@;71401558:56589:=>BEAA=FBCBICJOOQUXUY]^gluxµ|uqikmcdacde_`^_][]Y[_d``]YSLLIGGHKJMNNSUVYUXWTRLOOSRUVOIOPQQTVYUOJLDE>>@HLNS[hp{}wuoga[SMIJDB@B???>?==?<>9=?7;<@<9:79<9@>:=;B@A@>6:876::=@AAKRKIG=:8:=:?=A?@NOROFCACBF>?;<=D??GBD?AA>@=<:==8>@DEEAJJICEABFFCEAB>BB@;;@@CB@ACFAJNEMTQOPOWRYYORPKNNX`edecbhfiffhlmmpnnnpvty{eY`n{z~xsspmqkhklfniegiead]a^\^_^\X\[U^^ZYVXUTSVVRQTURKQLIRT[]^ae\ac\aQHFHDFC>BF@?JQGM@C>@CAFBBAFDCI;CBAEBBGEFFPOMVQTOZajs~}xSRMSNKHHVVNHIDIHENSKRMQQQSXTLIKHKGGIGCCAFEJKJLIGOQMGEHGGIJKIIKGHLFDA?HE;IIHCJEGIIJIPMSMGOMJIJGBFCAAE>973347622010/.-..2-*,,-.//-,,,/.053110**+-,+,,,-/-*+-,,+--...+-.2/01/BL@>AMtYVXX]Zbsf^`YV_Z`^[aZc`ghhgbnkokhlqnXSST[[[^XWVRLPPUbf^[]\\d^dd]_`hjijdae^jbaieknka_gbdjlnojeghcikqqQE=0,*&'&$&&&!#%$')&"%#&$#""#%#""!!% 2313420/1/1-/0/.1132220.1/111.12/2255:48687866644866668683555364625:7<=:;599787976676967886<:79::=:?:9=9;?@;5/013,/-0-**&"! !! ! !! " !!"#!!"!# #$"#!"$%)..-.-+/0,-///0142.-,)&!! !""%),,1523343466778=8><>7DIPNQORNROQMPOMFEKMJG8.**+*+&''*'))'*)+()/456120,*+-*.-051-,--1298.*.1,0--,,+--13520032254;@:::8>:8>@<:;:89@@>E>C=9876/0/.//4826@>?BHE<52.347579748:;9=>>JBGJIIIDDAA@<@@AD@BIKBHOJRSUTX[[msyyrtqpmgfcf`eba^c]_]`YaZ[]TWWSRPIFFDGCQMNOTRMYTVXWVSNPRQRXQORTPXX]`_SPN@?<<9;;=>H[em{z~xwrng`ZYHJGEE=@>A=;;<<=<=::=888=79;:9<>:??@A>@AB=::7869<;>A@GPIFE;:74?@?ABMNJQGF>?CA@?=;;<@>>AF@D?@8==8@BCDFAJLJDDDBDDDC>B=@ABDHDADAAAH@B?AABBA:CDD9G@@@7@>DCCABB>B?@BEEEDCDCFNIOOQTXY`hrzyQJINGMIQVSLDBHIINUVPRKOWURSMIHJHEFGHGH>CGLHOIPJINIJGEEDDGIMNKMLKOJGEBHI=NEGEGHDEHMKRLULFHGECIB@?@<@AF3853523/10.0-.0--3.,/+.-1-,1.14/.5///,*-,*-',,,.)0),-,-,+.+*,-/...//18A==CJxX]WX^[`mg\b]_Z__d\]^^ceaefjoojqq~o_]S_VYXYZSSQ[]eceaa^acdb^a`_]dfegeaa]ffbefkpce]a`akmrjfkimlpsyvlUF3+),$(%#!#%"""'%'+'%#$!$""##$'# #15115101101/120-1.41510200161-4/32654767869763=626646557836543648227478;:979985787767878:959797989>=;;9;=@<870/-1,02..*,)"!# ! " "!!# !"#!!"!!""!""!$%'!""$$',,.,1,/.,/-,.-12121-.'%%'%(*,/0222444957796;>8<==<896<=>=@=?;;98.-0//52787;BB?DLC:4/44466798698>@?BAFEJJGIA??=@B=B?AB?DEEDFOORSSRWZ]lu~{z}z|zyxxuwsqmihifd`ba^^]\X^[a[VY[Y\OTKMGIGIHNKKLJNQYSXZTVSRSOPRQROQQOUXZ[QROIE;><><@@?CJY`nmwtwwsqmf`]UUKLHCBA@?@>=?<=<>>9A<=<>=<88<<9<<:9;?;AEA;<>997;=<=A?DQIGD@;7:9EOONOEFC?@?=<=<<9A?@=:>==>;@B@G@FKLGDGAGDGAB>A@D@AB@EEA?@DB>=@?CACC?EFDIKHDNKPNRSNWRXTSSPOOMKZdccdcedfgjhhihlrtnfntuxzw`[Xp{{vtsqmpoikojidgkeghbaa_a`aY\]Z\XX[X[YUWUSTTVXRVWNPMOLNTV[_^db[_[X]RDFEFDC?@=?AE=<>??@BECFEEB@CGFDEHGFCDDKSRQSRVWeetx}}xRJQNLMS[ULDFFFIMOOMPMLJQKKMKBGFCNHGIEEFIHOISKLLNMMIJHIGIILJDFHJMKHKEBHG7OILHNLECECPMLSICICGHFBB?DB@?E962325722/-3--/./-.,2-,.1-0/10-/623**,+--)-,,,*,+0)-+**+-+*,0+,,../.,7F;EBK{UUXTY[b[]Xa^YV^^e_gdiga`fagrrp|ynr]TYQ[ZTZXY`fgcbcbb_a_]d]b^c^^`dac`fdbe_efolegccfdlqplhkpmlsyr\KH?2)('&$##"#"#$#%"))%'##!%!# ##! !"434323120243.2201212513222.3224//,42383768537076257568887276455065286776<;9;687;5886697:89;:797:8;=9>9:>@C?:8//,--,..-)*! ! "! " !!!# !!! !!!"#""!"%##'()(+-+*3-/.--1-11/..1,*''*,--.1/34234597687<9;9=8>EONOSORPONQNSLKHJJONK@/-*)('%'('(())*')&*,233/0-..,+**+,)+1/.-.022:2-2/,,1+-,*-//350374546588;697;8=:<;:::<<>9;==96312-,/-604625A@>DHF>4/372866:;9<;<@?AFIFDF?AA=;@=@=C?>@DFHONHPNSQ[^bryyx{zu{wtwvvuxtrnihigicb`^]ZX[Z]Z[\WWYVVMSLIECFGGHLHLNPSWSYWVRMOILPPSOVKTRMUTRIKGF@<<>=@==?@BMX]`eeghfaa\[UPQKGG?>>>=>A=>=;<>==:;:4:;;:::=<;>::>?@>D:>=B5:89>>?E?CGDDB99:;:;@:AAKPPLIBB>=:9<=;??A@AD??D?@=<898??CAEEDBCBACEGNFLRMOORRVTVQQQQMQZ^_`efacjkehgjjirrou|swy{v_^Znx{wurlljkjjtpkjjhabdcc^a[`a[\][_YZWXVZUWYRUWVVVUUSSMMIIOVW^Y]][c`ZXRAICDD@;BAD@B?ACC?;?:CFF?@B=AEF@CGGFDGCIQNPQURV_bsy|~uWKOJMVZVJCDGEDJLPQFKMHLMONLNFEEECCCG@CFGPLNIJKOMLNHHHHFDMIJJHHNJIIHB>N}^[VT[]^_W^]]b^_]b^bhfccefjgoyx]Sal_\WV]^digheegeadc]``Y_ba^`]ebddd^ceeb^hijkc__chjoopijhpn}}r`Y@A;)*'&$$###"$"$&$"%$"#"# %!$$'#!! #"423245.1/131/.0403011633/.23/1310-53484:684563577768798865565442444597676;8::6:;7774=7899;78;4686<:=::<;?>:?3.///-,10*+-$ ! !! ! "! " !!! """!"""#$"$%(&+,.,+--/-,1.235.//-,+*+-./-0/044451572<:;<<:<;AEIMPRTTTQOOPPNILIJHJIA/+&((%'%*('*('+)*,+-1424121.+*'(**+*.2/,-/1.5;31//./+.,.-2/025264787;683188:99::3:99789=787473-,.-.0.43324=>CCLLC72351978<:98<7><@CEBBE<@==<=?@BA@=@AFEEDEFJMMLORUZdluw~}|wuyxruvsvqqpwqspoljeefddbaaca\]Z]^XXTWSPRKMIHGJJJLIKLONJMRNOTOQLJMLVSUMRNEBHHB@AFA>=9=<=8??8<;=>:AAA;?=;?>7;<:;74=>A@>AGPSHJ>BDC??;;9:<>;?@=@>>A>=;7;>=A@F>CLJDCECCBDD?>A?A?CAAAACCCB@?>?C>AAEEDBEDHHGOJMKQQRPSTJUPTTQLZc_d_beadhckckesnpptnswwx_WYo~zuupsmnljlmjkhicgfcceb]`a]_\_]^YZXWYWYRUXUTSURUUSVLMHLOSUV[```abbXVPCDG>BFCDA@@@?@A@?=@;C?C=@?BE@ABE@CC@?GGLJQPPQUUZbgqu{[LSQU[RPKHF?BBIKIOHNLKQKIIJB@AABCB@DLKKKWHRJGNFNMJDHIEE@EEHEEFIHIHFE>IU=LDIMJMEGIOGRPPJ>DDHEDGH?BBB@=<273102610/0///.+/).,..,++,-/00/1--+)**)(.--)*-(-,)*,+-)-+*0+-0211-24:O;AAPyVXZT^^]Yc`^``b\[bddhikbfglsyaTPQhn\]afxzvthhgd_`cc^_dageb`a\^ebdac_cf`dgmhigefhnpuqrhju|kk]`P8;/++&)%'%#'&!$%$&*%""#!"$%##$""#" ! 513526314.3.33031022334/1052.22030333487766467867677:97<4679265535638769;<:;:699:99698:<:<878;89699?>9;:A>;?30/-.-.-.**)&! !"! ! !!! ! "!! !"#$""!!""$! """#$"$#&&*+--+/....+/013310....*.+-1212556736?7888=;8:=@BLLVTUWOPPSQONJMIIGNJC2,++))'('()('(,,*))-/41711/-,++*,*--,04/+/.-/8920/,+-+,//10/.022447067<3436:6565288<997676922.-.0095015566=?>ADC=DD>=>=@FLQOLF@>AA?>@BB>?8;>49AC:@?<=;9<;<>87:788:;:?=<@=:?BB<>=9<99;<>AC?EAAE?:;<:BADB?ANQPILCCD?@B<=;=;>;@B?@CEBB@BA<===<:;:?=AINGBCGDGBEC>8ABCD?B@E@;BBADDHF@HGNPQSUUXXiww~{XJRYXRNMKFDMEJILLFJNSIKNNEGBBE>E@H@AJMKKTLONMLJMMLFLFDLDGIKKJCIFCLIBCFKDPHLRIKGADLEPRNJBEDDDEIDBGABA=>378241/0..-*)/.,0))-,-++1+-./.01+,.&-***+,*)*))**)**(0/-.+-+.-///1/4>K>=@L~{Y\[WW\^]```b\bbbcggiflgeo~}cPMLPIdjbhq{zwofedba^aaaa^]_]]^_b^hbeaaaccejgnkfhdckonsmmwyhaegZC?31-&%$$"%'$()'((($%#'$"$"#$! # "2206412120212022213236;46/5403210/745:57577428766766497457<7553754647574885886::<989:<<=9848;8:7:::>:;?:?B><51-,/.../+-) ##! %" #"!"!" !"!"!!!#"!%##$'&)),0../-,-.-/,111//2.0+3/21/20344346789<8=::@?BLQNPUNSNNOMPLDJINKJ@1-,*&'&())','(*+).**33//../.2.-,.(,-.,040-,+-/05,-,.-)/./+0-.-00.0/2365643206317646<8563420--...13030-5367?>=GJLK2255999:58:>?;@BE@BB@;;8C:<;89;;A;@CC@ABE@=8796:<8;75<7<:9<>:;=;9:9=;98>=:97?<:>8=<=>A>?<<6:;;9;>A@AIBCCA<78:?=AD;?IIHJA@BEAB@:99?;>=>A>C?==?@?><88::8;69<=FAFBCCEHBCB>@@>C@>CC@ABA;?:@=>9??BBB?GFDFIKKPPOROSTPTRPRXROV^\\_a`c^hbhghikimmnsnsorvwv`X^n~plsonnmjhjjgkfddbdeb`c_`\c``_VYV[QWSYVWWYRPYTUQOMRPKJLUWRY^]_]_aaW\NCJCF@B?C@=>@CA;E=?=?=??@@BB?;?>CBDEDFGJOONQRWQbfqv}~~|zZT\VQJHKIIEGFEFNGGLMIGKFKFDEFB??AIEKEFJKNJGOKHHLJJEIHCHFEGEDGDEFHGGD;@L9CKLJGPLCEKKLSJIJDD@FDF@@?<<:?7734322121.,-,-,-)-**+,)*/--./.01,0.+-*..,,---',++,(,)-,,.--,0./0../26BBACK}ZXZ\\\]\W\]\\cZafa]dfhoz}eQNIKJFHZrmtvvoqldac`Y\^_^b_`abbe^`^bcce^gccbagjieeeblrwxw~vejwldPDA?0+(%'%$&(.)*,+*)+&(%#&"$##$"!!$! 654423131234432313031800514314214233470;388457668857799586696847749274776<66:889;:8587=:>8;74;88;=<;;><9?D@<63-+.--,-+-'& ! !" "#!! "!! #"!!!"#"!!"" """"$##$%&(*+--/0/.-...302000/.+2./011134662898:<:99?@CHUQPUQRVMROTNLHJJNOIB6.,(****),)*)(+)&.*.132201..1/0*+*))..-.1/.,-.2710++-**,,+.++./,2-/0239899437435344476/34.0/---.1320418666AAA@::;9??DEEBHCGHGGHFHJKLILOQPTTRU[YWZW[adlq|umntqttsqronlllkdidb_bc_bdahbff`^XVXQSPSPNNIKFDFHHHC@DAC?A>A?>F@EAAA?EC@;@>>:79:8?9??BA=C>@A8@CMPW\XWZND;896:9:9988::;;@A:?<:=@8<;7:<;<9;<:9<9>A<>>?CAEHFEC==69;?><=:9?C@:6>>GB@<9::<9@DCCABEA?AB=9?:8:<<9<@=@E?CCBB>=>=?;>?BDABDECFLJKMROWTUSPPRUMOMN[^]c^e`d`eedbfbnekqnprtqpsrs^[Wlvnklkjlijjggggnggbfgdddb`^\b^_Z[[ZYVWYWWVWRTUQPSQPSPMHJRLN[YZ\```a[_SCACDEEBA@;>A@>>A=@>9B=A@?C@=>?>B@?BCBA@GKNUQPQWP_imy}y\]`JJFKJGEEFBEBLEGIIHKHEKF@B?=@@?FIIFNOMLNIEEJHFGLICHIDFIGDAGGDHHDFEBEL=EHJGILNFOMPJNOLEAGHDEFC>A>>B>65530/00.1/./.,*-)/.,,,*./.,//+.0/,-//+-+)*)***(/-,++.*+0+-.,**+/0/017??>HM}ZYV[\]_YZY\cZdechbggkxmXSKJJKHDC[uuqspigdbcbb]b_ec_^a`^b`a`bacah_dcgdlkkgjfegqt|ogc^_WJ>540.,&$$&'$#*//,/2-.-*&($ "%"###"%!93377411435440020536563032232332322553568888786:@646778674675974645499767988685<849::7<89:7:98889?=?=>5:>@B;33/+..-****)%" ! $ "!"$ ! # !! !!"""$"%'(%(*,--.,++-1-011012./-/2/0-24344676:::;;::@@@KNQSQRVVMNOPOMGMFGLFC5,+(-****)&))(*(()+-4264140,0-/++*+),+,(/01+,.4141/-,++)+.,--./.1-11115526451--/114155012+--.//34241143327?=:BKKG<77;<:9;;>=;?=B?AAC=:==;>>@@>@AABDBEJEEDFHIMJMPNNMPUTRZ[Z]_^\bipysmtpswrqonminflkkfa\e`cijdec`]W_TUUUQSOMKIEJBDEFCEDDB?=>:=@@@BB@>=<<<;=@<98::985<77:A<==>:<=;@>=?=5<;7;6:>:<;;>>=;A@??==:=:;:@=BDGGBB?=969;?A>4239744;CD?BC<9<<><@C@AB==>?<@;>98:>;BDE86639GCHCBJEC?>BBAFC>=?@@>@>?@D@JECGJKKLNTORNUWURSNMNOS\]]a^dccccciljeghhhkmprqruux_\Yrttpnklhiggfjf_a`db_`c^^\^ZWZYTWVXXYWVUVVSSTURTONOQRQJMKNISZYZ\^__^\[XNFEB>FB>?CE=A98BDHB@>>@@CBBDDBDJJKKQ[RW^jp~~}a[OGEHIJCDBCEHCH@EIEEEFHMF@C=@??DGILHJGKOMJIGFIIJIFDJGHGFIIEIDDJFBDB@CM;HIIMJDUFOIGIONPH?BECGGB=:<;:>@C:420+/.,-*,*%%! ! !" !!! """#" !##$#"!!##&',+/.,0.//.201011/31011.//1324756:9:8;>;=<;;:9;?;=;:;;@D@==;7;;;;<;=?B=???BBBCCCJFJMPNMJMLLUSVWV[\]Z]bbr~qqpssvosvojilfigbd`a`bej]cgd]`[aZZVPQPOENJIHBC@?@BBBA@@A>?<<@?@CA>?<<<9<;;:;97;7<:8965B<=<8;:>@BHRSVQNF?<8867726898<9<;@>@@??>69@AE@?CH@B@:7:87=6542467508<=<><:;;7@=?@><@?AA??>><9;8:?<==38532B>CF>HC=@??<>>@FF7>@@=99:;8;;A>@?C>FFKKLHOPQRNYSPSRPQLTT[b_a`aifcgehglknppnmqqrtvuwzaU]pyqonooojjgigfeeccca\c\]]cZ_ZZ\YZVYWWYVQUQQKQRQROPPMLMGKPMUW^^_^c`aZ]eVE>B=C?C?D=?=A<>@@@>A?A?BCABA@A=?>E>AEBFFUNNVUVWYhnz~{{\POIKGKHDE@DADAB@DBEFE?KCECA>@@EIKOOEODLKGKNJKGEMGHEKDDFGBEDEAHGFFIHBFK;JKPGMDTMMLEPLMKFE=CCGFCBAAC?B87253240./+-,,,-)+/)-(0-,*////2051.1-1./)-*,,++(,)*,)*++*,*),.*..///0:>=?DI`Q^YZ[_dbZ^dcce`bmrZLKHFEDHJFGHJ_tlvnmkgb^a]dbc]^b^c``f[ada[`aaeabeefejhkhqvpkn~zn\\E:6?10+&)%&$&$###$%#$('(()('%!$# #!#!!055474013344//3420365263-0.2331140154375898174936652878645986:3377356587:::=687<883:78=>::;5<937;8@@8;>7?@?<50.+/,,)+*+'## #! !!# "! !! !## "#"#"#! !"$%'(),,.202/-.010/1442401//26365::;9=8=:==;CAGNPPUTUPPPMNMIFIEJKIG5-+*(&))&()'(()*)*+-352711,./1.0.*))-((*+./60-,.0494-..--)(+,(++-020.2/15543,**',+*,*++-,,-./5722250333574;=;EJNGA;=>7=>?;:;999:9<;;83:798<<9>>BB?@DBCCCDDIMOONNRKLKONVW\^W\Y^aep{yuovssppookklghhhkfeb`hh^cli^XX[UVVPTNNLIGHGDAC>AA=CA@==;;9<;=@DAC?D<=<=:<:;8;<:>;8<:7==?I?:4>>8>?:7=>;8>9;87:6::<<8><<7@=>?:9887878;9:688<<;@;>?@@B=?A=A:<>?ACBADB@?8<:9889:;;:>8:79;<7<<;:98<:=?AA@<995:867<9<::;:86<:;>=>?:99<489>889:6;9384552=<A@B?7>@B>ABBA>?D>C?A?C@>FAGILMOPRQ\[itz|~vWFMFGGKIHDADHACCCECDHGAGHA><>BHGGKJKIILKKIKIKKHHGGHFIIDHFGHFD@BDDBHD@CL2CIHEJGGEELFKLKIGGGHD@FB;>ADC>;34/43411.,,-*,(),0-+)+,+)-0,/.01/110/.0,'),,,)+(((.*+,,,,*.+**+,+...6<7B>G_ZXY\\[dfb`gcegeyuZMJJLCCCGLHGIHJ]zixnkkhddb`^`_ba`]a^^^^ea^ca_eeddiifjojmsqhmvujb[BE=8-2/-)&#"&%'%%&"$*(+'($$$%#"#!""!# "73786505761111201232512510316432-15815377553:459697:97676:75663758445489:;8;;67989:7966;68:59:8:9==<;:?B>=420-.--+,,,(%# "" ! # ""! !! " !!!""!#$$&%***,/-.,21-4032232212.052/4658:<999=>=A@JORPMQVKOPPOKJIGEMHKE8/,**)('(((&'('+'(),17432/+.,0..2/.,-*'*,*,.1.0.+013/0.,/+,,**+,-/1023/065535+.*))*)))*+,-,0/2212/15423651@=9GJJGA:758:9;7889297:=9:77;98;:<<>C=DJEEBAE=<<>7>;<:6<8;;8;;=BDJKKA@D@B:=86967;989;673587><::>6=><8;54::886?<<77:7>:=?=?>@B>?=9=?B@BC@IDEB@???BBF@A=C?C@AC?>@@>A>?B???>>AA@>@C?>;A>AA>A@>@<>?BCAC@C;BE=>?A?<>9<<>F>6;A;7:=@A>GEKIPNSKORRSVQTLOQNMRXZ^`^`]_e_dcegffgdhhhimmgnnrmj_Y^mpnlkfjdhb`gdeefc`___]_Y\]YY\V[TUWYTZTRRTTRTTXQRUVQSNINJOOQ\Y^b]a]c\`iVI>AB=>C:>?@<;?989BAIAC?@B@BG@:=EFBC?BLPQTOVP]]dt{}~~}~qUFNGBDHIBC?FB>D=9<;:=?@CELRPTQPMQQMMOIJEBKHOC>1++((&,)'))'('&'*(,271312+++.,--0/--(*+*--*,13/.00540,--****+**,1/0/11554721****)+*****/00004500020004562A?;FKKF==9;:789868635555448:=;;9=;@BDGHGJLHJJLGEHGLHMJPNMHIJNNRQWXX\ahm~ytrqnmropnnlkioijnmgiie[`][`Z][Z[XWQTXSNLIKJGIGFABDILMLLBB:CBFFRKHIKD@?=::799;=9=75<=<;:CMSPPHJBCA<@:9:;6868954679>;;<<=79:><9;9<9::9:788898:<6>:=?>>A>@@EA?A@>CA@@@D@A>?@CA@@CC=ABACD@@@A?A=>;E;D@?CC=@@;@>>9>D;?C?AB?ABB@B@EBBB@EE?C>@>>CA?DDGAIGKIPLSMSPPVVSRRTQOTU`\[a^bb^b_``cffghhgimlpojplrpl_X]i~smmijeeda`dbac_^_XZ^_][Z\UVSSXTPRRU[RPZNPSMNRKPPQMQKGJKLQQZXc][_^d^_iWK@AB@=@==B?;C@B;>7?A?E;C@??>@;@?@E>D@CEKRMPUVRX^gqw{~oSKJJIHJPFGDCFAFDEEBDIEABE@HFDGKKHHKJHHNFCHGMKHCHBGEBCGFHGJFBGKJGIFE@9BL7GNKGHIE@GLLKJOFFCIGCFB><><;A>:6132200-,(.1)(,))&***,&',).+1/./211/40/*-+.**),('(((*+/*),,+,+--/./2EE;@DKe_^befddgkikt~cSJFBC?<:?:@CEJJMT[iwowrphbeba]hba`^[bea`fZd^e_ecefehgkntupruwvpl_dN:=;:@>AA=:///...*,,&&%" #!#! ! !"""%!#&(,+*/.-/0133.342460030//14375;<=<;<>>A@APOIUVVMSQQOPFIJHHJJE92+()*&'&%*)'&(),,*-3704.3-,*,*/)//2-+.**,**,.50..,.23--0+++++)(&)',,+..1./+(&*)(%(*)(+*.//0/2/00353456402:@>CKKG@;:;898566627464463679<>;;;9AAEHKINLJFHHCHJKMOLMLJHJLILMTZ[[]bcm|wtumpmrnspnljheggkljhid`\XWYZWTTPVRMTRPLKGFKJHFCADEJNTSODC:CEKKLKLIFA==<;8;898769558;998ANXURQNJ>EF>;:6;7757335758;;;?;:=:=<;::7978788795565866<8=;:;:?B<@B@>AAAB@@@??B=>AB>:A@B??>@CC;?C=F@>;@;B>@C>@??BB@?B@CAA=?BAB??B@A??B>6D>;A>B<@BBAFAAIDHLPNQSSUPWSULLQOMPT\\\^Z`b]`aaaacigkhebglnoqporqjcU]jlmlfgffeeceaf`ec^]]]\]W[YWZVWVXSVTUUSTRSTQPRQONJPJPKIIGMKR\\`__\]c]_iXFGBBD??=>?B:E=?>@:>;?>=A?@;<>>CJ@AEEBGQQNRQQRZgow~~tQEFEBGFFEHEC@A@>FDECAECFCGIFAIGDFFEFJDGHGJCGEEHHFDGGDGC?CDHGFIFDDCDB9?N9FGLLFMJEFMIJMOHIAGEBFD?<;@;??:352/1+./,-/(*+'()(**(+()**+-,/1422.-,*('(+,*)+,**+*)*%+,(-**.*..-101GB?BDLaa\ecccjm~{jVHIEB:====>@@CDPW_^`mvnomec`dgc^c^_aab`a`efcd`b_cihinqlymlpwmnrmjbHDE635/++&*'*&(%&,&%*,.4477APaYC:-"&%$!#""!""259732131225123345373734436131171563574478:57857;;5;;<8:;87877576955869;7:?<48:=9<8769:7<:97:::<4<;<;??AC;504/,,-+++&'$! !!# !" "!!""!#%"##$&)*)*,+.00/00112342420..2234;48=;=;:?>B@GQPRQPVQPPONMKJEELMIM64,)(+)()*(%)*(+(*,,632920.)'*+,.+-0---+*)*'+).21/.,.14230*--,)(''&'*))'*')&''((*''&-)+,./652423012/114305;@:GHOF?::886;<:85386674637:9@9<766>A?CCHFCEFFCAFEJNRPNMJLMLGIJQU^[[adi|xxrpjlllkkjjikehdijihd`]YXYUSWORSTSQPOLHJJFFFIDFEFORPZXTKHCFGJUQMKHD>7=:=99798776876;<8>?GMPNQLNDAA:;8796755334667=;:=;<8<7=?;>:;<::547464:85<:97=>>=>A@@>A>?B?;AA@D?ACBAA????C?=A?@@AA@<@>@=@><>?><>BBABAC=ACBC@=B?ABCCB;A@B@A>A?<>@C=@@ABD>A?=?B>DFCFKEKOLTQRTTSTSJRPPKP\[Ve_`a]a\adffbddggglhknkqrqjpkVY[nrlnmggbcedf_a]_\a_]^[]\[UY[WZY\X]ZUXXWWUVPQQNQUOQITJNLFILSU[^cb`^eY\jXG@A@ABB?=AC>B@====;@D>B?E>D=@A;@BD@EEECNLPNMUTS[co||~~~xSFHGBDFECCAAB@?B@AAAEACJDNEBHBHDHJJHKCKEIGFFHKGIEHDDGCGEGGEECADDFEE?@@I><:>>944204/.,-,/'+))(,,**'((-.)--,.2042.*)***('',),+(('((()(*++----.--222QC;AALdU_^^g`pjYDAB@:;;87<@G=?FPYZWa^fsmnlgeddf_`a]`f]\faeadedceggighpv|okn|rtzpnpnZQH911.+)*(&$#&&&&%$#(.8OKT\^ke^\?9( $"%! ! !$53875351061211/000241343326430276235494:9886<8698788;?:?:9<=<:589677477:;8=88::8;;677:><:<:8?::=:=<;>=;;CB@:41-0,-+-+-('$ !! " ! " #!! "!!#!#"!"$%&%++.../00010022641.,..2567;89;<9>A@==JNOUSQPQMRONOKFHGKOI<0,*)('*)*)&)*+,-,*-2435120,+++,1./-+.,*)(,)(.*//5-*-0342.,+-,,''&&%&'*&*((('*''%+'()+,/1033/2221632435733=?;;4978269:9;?@DGFKHLSMMNHJKJHKOMVX]\`bg|}~~xrlmmmmmllnkjmjejjcbca^X]YWSTSVRPPPOSHLJIJJNMHFBAFSVWVTSSJGIKKLKHBA:8;78;77;852435@AB>=?B;<9?<<;9<:998996435634554996:<=?==?>;C?@>=?>?AAEDCBCBB?@?:@>@CACCFC@=>@??C@@>:@@ABA>FBC?BB;ECDA=B?F@@BB@AABB??=BDCAC@ACFACBGMILMJMQNTSTTTTSOQMSU`^V`[cc`aabbadedeieeihjkmpnnopjb]\lujiifcbbcccaa^a`\^\^^_aYY_[WVRTWZTRUURXTVPPRRRRRNLNKLNINLMX]\cbcba__f[H?D@D@9@==9=;=>>>AA?AB>D?@DG>BFFCLLPSROVZcbs{~wRIDCBFDGE?FDHCDCEC=A@CDMILIFFFGIFIIFHIKJIMGEDGIFGHEHJCFDHGCEFCCDDDDA>BG@4-3.*&+*)$&!&'$""&*-<@BGLQ`ZLP;2.$#!! 96464064444532422233:4645345437:315568465789:8:899;:;9;?897995::6676558>>;;;<87:=;574:;6;;@:<8>9;:??><;962/.,-,*+1'&$! ! "!" #!! ""#%"""#$$'$)(),+1,/3//3625440120-45899;9>8AA@@BHNOVRSOTQQMMMHEFKKKHA2,)(('((*()()())**.1434103/,+(*//100.2/-)***,*--1/.*-500.,,,*+*()'&&'''((*'&*)&(,(++,.3/31.2211/521433621;=9CIND?=86<96884243/2313438=88<7766:;<:=<@AB?@@ERLMSNOOLILMJMOSRWY^_`_o|y~|wpkjjjmklnnmjjkggffcb`[^]]^VXWRTNRQNPKIGOLTUTVVNNOWZ\^`TPILLHJQRJ>>;47:4=446864569@DGOLCCABHQPH?99:FDD@:344415;=;=>:=<>;=<::8;9<8<:6323417;33576:;?==<===<>;><>?A?AAEBB??@DA>CBDEACCF?BCDCAAD>CB@?A@B@DA?BABBB>?BE?ACB?>BE?A??CDEAI=?ECCC?@?@>@BEC@>@CBH@DGGJJILLTLQTURTORQLSLT_ZZX^]`aa_\``babechhfhjfkmpmmonmaW\lufjfgkedfbcc`_^b[_\__[Y^XZVZYVZ[XXUVVX]VQPNWRRVNPRRIJDJJNQU[_\`[fab`p\E@DDDG?A@??B@A;>:==CC<>?@=?@;@B@ABDABBCNPOPOMPUbdrysNMBFIDCFEC?AB@FD?FEE@CKNKLJCEEFLCIHEFLHIJLIHLJJEHDJNCDEHEDDFIFGBDAJB>BD>GJFQPKGBHIHIJJFDAAACBEF<==:<>7-202/2--'*+.-*++(())/+)'-(+//.32.-,/,*()*+',+&)()((+()'&.*-,,)..1..?cD?AAL|c[`^dwwYQEE==9=:<>7:<:@LTV^da]Xa_g|lkkghcag^fd^aihc_dfeijilghqxuinovtstrqonkgXUC:550/,),&'&(' (%$$&+'(-)34:DLFJ<6.% ##" "!! 7895475422544252437646633746756:466645356579:==7576:;789687:9:8:9988879:::@9?;:69<989989>:<:>=;8;:??@>B??=400/0/.-)+%'% ! $! ""! ! !"! !!"!"###"$$##"$$(&(**.-/012/4011600,/-6358999879:9==>FLPOUNPMQNRMKHJFILK?5*),))(''*+&(())('/55/0-/31/0(*)+.6/10//**)+'(,,/.0+)011,,/,++(&)''%'&&)'(&('*)++(--.2/..0011312502243450>D=FIKNA7=79:76:634536451472::;9879;;?<=;@A=??BBDIKLQQJMJKILIDPNPQUZ^aai|z{~~xrmkljnnmommmkihhhggddacX_\`YXPVOPQQKIFJKLPSZ\[VSTU\^_`QTJNNIIGFBA@>::;5=:8375688;CENZONPFFPM^RPH>?ILPLC>838479<==?899;;=7<:;:9<665612142693:457<:>=::7798==???BEDBGCFFCDGHGJEIEJFFIIJEGGEHDGHHFEJHFHEHEC?DEBFEGHIDIFHGFDFEECGDDDCFBFGHLB@EGE@FCEBDCEE=IFFHHJMKPTPLVUWUNTRQSRK[Z[Y]]^aa]`b_`bdccfeiffhdkmmnkpmi^SWnphifcebbe`_`^X_]Y][[\ZZ[YZYXWV\Y[QSWTUVNQVMTQSRQVPQKOKLLSUY\^]_]a\_^mYCDCDBBB>A==?>A?:;;;?>AA?@=?<@??ABBFFGEBIQPROQQY_isw|tWNIFECAHJFDCF?>GCBCFEHLMOKJEIIKIEKJDDGLIILIGEHDFMBLMHFBFABDBEHGEH@HAhA@CBIub^bqw`MDDB?799@@BB;8?FKZ\^`[a^Z_^hjlgjfe`bc`eZ`gdfdehgeogouwgnuytqpprqpnoa^LPE;/3,*))&'(&(%#'#''%%%%'(((/2433.)(&!#! !!# !>65744153505234023355536372463654769636697778:86::9;78;8:86;9757:<77636:<<=9;<:9:;99687<=>8:7:;:;7==?==BJJD>7:7:84684765022112467:974<79;<9=:;?;=BAEDJMQOTNIIIIKFHNJKVTXW\^gxsw{ywnngedgiilpmlnmjjgfgabcb[_^_QXSSLPKJGIGKMOT^_c_\^]^`a^[\ZPLIDCB;;9::6<5877477HMXVP[QJQ[afba]XTQYYRMJB68.9778:8798?8;56679776431123351479867::>>>84767?;<@==?DCKJFLGIIEHIFJLLJJJJKHDHIGILHLFHKHIJJJHJHIIJLHKMGMPGJMOJJKLJLLKIMONOOLKLLMENIOPKIKDAFIFGIHGKMMSLPQRVOROLSOR\Y[Y][^Y^Z]^_^]b`ee`fabghegjgijhj[WXpifcfdca`ba`e_\bZ\^YZX\Z\UYTWYUQUUVSSTTUPNROOQSRQTMTNNNPPRPVYYZ_[]^_dkWCDCA@@@A=;<;==<;;9<=?8@??>?A=@=@?C=CEDAEPNNHPRZ[bn{}}uVGDGDEFBHBFDCFA>B?BCJIEDMJGEEGLMELFFJMMGHGHGFHDGHCGDCGCCEGHCGNAGJADE=>F7FIFLHLLHDGIFGHHAGCBDBAA;<@8>C552000-1/)+*,&**')))()+)&).+00//1.-+*.*)')**((*)')()*+-)-+)0.2/*1.00FiA=;CJs`e~cTH?A=89:<8::@ABDFRUb[Z]\[Y]\`k~flffcfaaf^__e]cdfbhjhom}uflvtwusrsgtuto^RIC?H:/-)'''$'($&$&%#%%#%$$*(().),'$&%#$ " ! !"857447637947862612557524554897651464867489784989869796:7697989854:8661;7<9:78::<;<:<79=<<<;<>8:987>?B=9=BA>A300/-.-,**)&! ! !! ! !"""!! #!"!#!"$$&((-..01215-0/1/.-+-,+0235778676:89:?CJMNOKOOLHIGJJHIC00,*(&((()(''))(((+352/10-0/-.))((,,10../0.,2*,()+/6..-6/,/,--*+)))&%$&('()&()(-,..1/0//.10/020/05-01.7327??DKHEB796736863444423/14557>7;876>>C:BA@?@AE@EHKORSUKLLGJIHJMNJMSQ\VX_uutwxtvtnobcehghronshggcfeb^aa^^_\ZZVSMPHLJIFFHONQVhfddjg^cb^\ZPKD?BFJJJGEAC@;<357959779>KOYXeXONS\bdldfcfabc]PF==854663667479799859:9889361346488::77>=@@976587;=9;?@@BABEFHHJAMIHFGGKDCKGHLHDHFFHHJLICHFHLKIKJIKMJHMONJKGMMLLOQMKKOKNIIMNNMOKNLJH@HQMTPKGGABHJGJOHMPPSSOSVVNNVNSSUTWUYYXUZ`W^]]\\`_aa_`^aedcjgfjekl[WXokbc_c\Z]_Y^]]\`YZ\Y[Y\[WVZT[WOTVSVURPORRRNNONNNKNIOKOLMLPUUZ]`_\^\[`cWHBDCAA?AA>=>@>>?=:<>>?=;CA@B?>;?CC@CBF?INPPKMUU`jrx~~~~{vOBIEEHHFG?D?@B?CDDGIJJKHIKGGHFHGFIBDFJIFHHGACGDEJIGFFEHHHEHFGDCHCEB@<=E>D?CC@9@>?9=452123.0//)*(&&+)),)''*'***+//..3/+/*.)*)(+(*+++,+(+***)(*&).+/-.*52NgF?>?OqxePFC?A@;796:9<;>ARMVV\^XW^[[W___dgnhbgd^_b_i\`\abdhjllsclvwursrqotskcbQIH8834/-,)*'$&$&$%%'%$$%'$&((((&&$"##""#$#!757376672576032546778385474654614575895377757;87;6:;<57:8:86;98968536198;:>87;8<:=9957::;>=;8;>:9:<==?<=@D?=50--,.,+**'&!! ! ! " """"! #$#'!##"#$'$),-,-/.0.1,,-//.,,-,-39666885658898@GLNNNNLIJGKGKHB3/*(%(*()()('(')*+,232//-,,*0),*((,+/71.12-,,+*(+++-/*.21*+-.+(+)+*)((''&('((*),,*,1031011//41000004535439>;CNIGA626;;8951646214157389<<<<:<;9>:B=?=?ABFIFNMTUQQMLNHNKNLLLMLMV[W[qopx|sqpnkecdfccihiihghhhdfbf``^\]ZXSTRPKPHGIGFEGBLV\_cgh_gfX^VPOJJEEMGKHG@@?:876788::=;?CKMURJGGKSX^hfedfba]VPF>B<45932/5264;7554497769;57886:6449668::>:9:3:48;;@FBCAD??F>EDBJHDGBDGC@EE@BEDGEHGJKLHKHFFKLLIGDKGNKHMKJLNLHEDLRSPTNE7@JKJFFINNRPTRQUPSQMOKNPSUXW\XXXXZ[\\XZ^Z^a][]^^``aibcg`ffYXZlm`cbb`^\\][]\V[YZUXWYTZVYXUYVSWUVUNKSMNNRNOKKONNQOGKJLNLNSVY\]`^^aYdjZC=??A>;<<@>??=?B?;;;?DI@E;B><:@>CBBADDALOKQOLSV[dow|~~uRLNIEDCDCCE@?C=?BFGGHGJGFJBCEGBDIIIDFHJHKGJCCHCIIAJFDBBIJEEIDIEFCF@B=AG>EHGPPNGHMHHEJIE?@?DEAGD=?;<:=8455-0-.+.+,+,'()+),&)&)***./--.0+./***+*)(('*-+++))++*)//++,.0---6/Ua=879;;<>ENQWQ^\`^^_\V^U``]bfggccddc`\dace^bghnrimxstrrqnqtlpd_LKTUJN91.//***()'&%''###%**(*(,,(.&"$ " # "! !$!4459645875:846613638829475677534454665768866488798;899789<8::87786756:88=99<<;;:;;;87;898<;:7:<9;99=@?<@@E@<62.1/,.-+)*(&!!! "# !# ! """"$&$#$%$''*0,003.500//0-,,*)+-.443476:59:99<>=CHKOKKKGGGGPED51'(')()((((()(+)(*56131--&(+-.1*)(),3/-0/2/&+(&+,(*()38=2...,/,-()%)'&&('%)'*+--//1121330001/11300455253:=:AKOEA798;5885293634556948AAD?;@<<;;@@??@@?CFJPQJUSQQHLNPOMNMMMOPRTUYXjiiqvtsqnkgab^\^deiffgece`^_ca^^]^\ZWTTRKJFEKECB@CIQVUaeeafb^^_Z[NMJLOHOMNMLDC@:96762787:;HSNMF>>@GJU\_`fab[URLA><:97:2711554522/2035946689476439:646;;:=<;=8449:==?DB>E@A;;9:98>9=LMKMC;>>?==96967>;>A=;=<>=@>=;:=<;C?BEJLEC?C@?CBC><=?9=@B?DAEBDDFMQRNRNE6EHMHHJMLLQQWTTVTSONMNMRUTTXUWVV[Z\]]\\a^_`^`d_c`ecggcefjfZ[Xnjda`]bbb]^\ZZY\XX[\XUTWUVVUTQXSRRQPPRJMNNPQPOOKOHKHMLKMFRMVY]Z`a]^ZajTE>@BB@BB>>ACA=:>><;>>CB@ABABHE7A:9:>:524-2/..-,*,,'+*-)*(,')*))./001/.,1+-+**')(+(*))((**),++),*++.//046ZlE=ABHtkSOGG>ACEC=99<<:<;5;?<>979:8;:<9:;;=:::=>>>;@CGC;40/++*/.,'((' ! ! "! !" "!%#####"$%)(),-.-314./-+,--),*+.032947568957::>ECEJLDBAHFQFC40()&)(+'(%)('))'**753310.))*,/..*+'*.--..11-'+**((,*).:?:2./)*+*(.'('''%)&)*,+2,...3--1./122120//30353528;:BJJLD:69:6784544320345669>>=A;=879:<>=>A@A@BHLLPMOOQSPLKMKKNQQLNNSOSW`gfnrprqslmda`^]d_bdbac`^b```_ZXYYTZUXTQPKIEDFFEDCINPX[_X]ecga\[XPTULMKKKOEHB??777755;6;;@LOHJL?=<::?CKLQPOKI>895875432431/10030022215168683451477:9::;@<<;967686:;>AHBB@@:<88><=??MJHL?;A=>:9;7797=<;AB?=><>@:;9:;A@;?>><8A====:A?:;:=>CGGFICG>EAHDKLOOPMTPPZWQTTNPNPTWPTVSUTWZ[_a_]Xa]]c^]^abba_abceghi\[Vip\`g`ab_]`]^\ZX\VYYXSUUYUTRUUWSUSQPRNLMRLPOOMNMLGIHLLMIMMOV`Z^^a]ZX_fVB@;E;;C===BD?@>;=<7==<@?C@A?GBEHPOKLMQUZgpu~}~~~~xNDGFDKDBAB?@A=BF@4@7498;2142/1.//,)*.+***')''())-)/.,3-/-*0(*()+(,)*(('(&'))++),**+().-.057`mEC=CKzlXN@E@A@?@F>?9;ANTVWZ\Z[\\^c`Z]^^XY[`^egfehgd`beaceinqngmyurqrrunoml_SNPYjqpeWDD22.+()('($#" #$)$&%%'&+).22/,(($$ "!! " 887366879597754514275<864566:7634437236:7:8877987789;:86388;899:8576:687=<<:;788>:<:76:=9>;;::=;9;;==AAA@FD:4/--,.-+,*,#!" !!!" ! #"!!!!!#"! ""!%&(*--22.3+/,+,..+2--,..262779768:;8>??BHLFDGHJJFE7/*&*''*'*&((')+)+)/64100/*-)(*-/+)'((+..-320.*++)))(',3:=21/,+**)-'%&'(%(('+*,.....1/010/1/00-000//243437<9?KIK7:5:76543447540316358;=;;<;976<9>=<@<@CAGFJONMQPOKLJMJMMPTSOJMPRVZ`[`fgkljgkb]`]]cd^a``_abgda`\YZVXYRSVPKNLMBHFG?@>DBFFGPWVZX^`_]ZRSPKMJOLNEED:=:56947978969<;>BC;A87423/0426421332/0,.-.-/03436741722999;89;@:<;::89858:?DJDF??;6<8;<<;DOKGJB=><;8<:3988><<===?>>?>>99=:<<>?<=:@=>>=7;=8=<<=?>GA@GHHFHMKQLPSTXSSRKMRNQSRSQUUUWSZ\Z[Z[[[]_b^_dh_agdacicfffYXZrpccfa^a]^^ZaZZZYXYWYYVUVTVTUTUTOONOPKQIOKNKOONKLKMLIIGGIKPQZ\_]^_aX]jWBF?BACAA=?B@>@;>;9:FEGHJLFNNIHFDECFDGEHFFIEMJHGIEGFGJGDJDI?FFHDIJKLJFFDDCA@FDHIIHJGEGFGGFKHDBB>@@>D;7<=::>:103//-*+-,*)*)-++,(''&(**)),*0.0,,,+)''+**+(&()(&'(+&*,+-,.*-+1+037bqDA?Fb~n[IGFBEFCBCED@>DNT[X`YYT_]\]_da^_a^ZX[`aj}`lifdbgfghceqkgqttuppxssuoj^[FM]imxjd_O=85.++%&+&$##"!"'%!$&"&%&'+,-.,&(%#"$! ! 88=8:5885:6:4567355666788669488367593447686:98:867:9;:;99;;<888:7968368;>;::8;<;@;8@78::=><=<==;<::<;>BCDDCD@EEFENKE8,)***')((&)(((')*.232.141-.,(+..+)&)*)..-01.-**)(&(,)(,5840-.--/,,*))('%(*+.-,/-.00/0//104/2/2200/3335637B5AJGG:86:738>37724404405487<@<:77:5;:;:9<=>CDHHFOOQMQLKJKIIKPPOPNNPONUQ\\acacnce``]``\a`aacb^baceVb^\YWXXRSWSPUOMICDB>A;?=@76835627657512431/231400/*+++,,/1//21219/120026887;9;:<9>:;:83:8?EIHCC@89<977=;?OMIEB?=:;8:84;8=9>:<<;?;<<=>7::8@>79;<8B9@>=?>=<><;??>?=?>;@89?AF>?@?AA@CA;CD@?@ABHKMLOJQPT^aty~{~~~tJGGIBCG@>DFFEDGHBDGIGLDEIJADFAGEDECFJHJJIKFIEFIJEBDIKACAHFFGGHGEEDFA=?E?D9=:<4;91/20.0/*.-,,))++++&(*)(**,'+-/1./-*+***&&+,*(-((,&2''-+(+*+.,-018;GntI>B[mUJ>@?B>@ABAA=GHGMX\_ZY[Y\ZZXZdf_d[gZ][^a[l~glieeagchcv~{dgnxxwqutruoojaSKO^oxqjtq`XLL>/-,("$'$#$"#""" !%%###%&''(%$"!!!" 98;:9368:996556695574;497385385559639488;689789:7:8;:88>;::8<5;97;:74699;9<;9;;@;<:<987999;;:<99:9>=<>=ACCD:42--/,--,*)'" #! !"#!#! !!!$ #" !!#!%$&'+*-./1+/,)+011+///,0356;::>=>@AACDFCCFCBFHIGG=,,'&&%'&'*)+)((+*,2120.1.0.1+,))+))()&+/20/.'()))'*-+,*1241).++*+--(+((('*+-*-0/+..//1/111133122223244345?:AOIH<968824:45947663533475697665;69:;:89;;?>DDJKNOPNNNGIFEHOOMQPMLQRSUVZc^b]fZ\Y\[`feebdcc\`ab`cZb\TYXXWRRXVRQPNHGED?>=B<@BABDEKQRU^\VPQQKKQPLF@=88967688641689@@CAHIFLK<734332769=@422331131240...+.**,+/,-02/514142157867:<:;=<<<;74<>;<;::7696:<@=>>6A9;=6;;<>>C>EGGC?;DB>AA:=8:9==@>><=<>9?:<>>C@FC=K?AFJJKNJNOVSVUQNNLLMPXVVRTVT\W[Z\_]\_a]a^\_aa`aabg`ddcbdcW^[j~tacbb`fba\aXb`^]XZY]YVXTXUWTWTVXQVRPORLSNOONHPMMLMKJHFEKNPP[WY_Z]Z]^kTB=B@<><@A>@?AD<>CD?E@@>BBJIJPRPPMPYcmv~}~}|tJIBH>>FBBEEJJHNIGMEJFIEIILIDGBJHHFIFJGHIJJGJIGLEHGDGHDEDAGEEFEEEBFJ?;>G>DGHLGEGFBIIKDGDC???BAGA6;:9599..1--0,.-*(*)),,*),'('(,)*+/-.0,.3,*,)*+&)*-%(*'*))*.+-+//-,,.+254MmuLAS|lQKIEFA?;=B??BDHU[WXVZWX`Z]XZ\]`jaebc\YV_Y`j~lkegcdgiqzgipwzyuvsrqpthaQPKbsxspfrcffOC?2//('%#('$!#"$#%#"#"#"%#"($""!#!!! ! # 999:6957748766556068776;987647668887:787<977:7;9889=;;A?::<<;;;95864844><<<=9=:><<:9898;;;:<;=<=;<;;=>@>GBF=80/0/*,,-)*'! ""! #!" !!##"! ##!#$%%%)(-+,.--*.+++1,.--+-+076:<<>@?B@DAFADCFBHHLKG:-,)'%(*&'(''*(&(--31430/-/-0+*()*+,-*())*./+*+)*-+(+'*++//-.--+,3/.)))&.)-,/,-,0-0///11,/1/4002///045262:>:@LHL<768886754879=:9465457552258:78:989;:;=?@EIKJLUNLLADHCFJIPMMNNRPQUU[_aa_][VXZaacfgcc``\\^c^`\^ZY]S^UWWQSSXPNMHFB@BA@@AEBEDEHMQRSTWRNOMMPKEB@;6835854533557:7449FTRKRG6333335586676/535021/.3.--(**+-+,-./-..20.3124756;;;;??>9>:59:>ACDEEE;>>6;8==?KOLKD>>;>=<864679;?>=;:<:@;:6:<==B?IHDA;:=A>=>9<:;8=88>==>>>?=7=<=>@@:=?B=9=7?>?@?>@B?==?>A=E?DBDIPJJJNTR`jmtz~}qKCCDGEBDF@CGJFKIEJHEKGHJKJEBJDHJIEJIHCIKJMFFJIIHJGGHDGFCCEBCEEDHFFGE?@B;CKHIDKCHCEKFFFF?ADADBD?69@79C93472/2.-.-,()(+,*(&'&&()*(+,,10-,0,*'((*('*'*(&'*'%')+,).++.,,0144NstPJvlOJFIFA9C::=9<;FQWYSYZ[^\a`ZZ__`bg`fc^ZVW]WikykifebnrzjdvvtrtsovmooiaJFQfrvlonnml\qdQC=1.,)'(')!$# %"!"%%%%%#$&""##"!$"!$! ! #;=87797:<5746643838:8684788553755:6::48977685:;<95==8>;=9;>:;;9898:3683=;8=?;<99<=;88;8>9;;9<<;::79=;>??>AC?7./1-,/-*)'% "!! ! !"! " !!!# !$ !!"#%#$()(+-/-)*(**.,.0-+-*-12479<;5:;9<9=<;<8>9>:=5+)(&$''%&(''(%&($,11001.,,*+.+*')+00/+(*%+./*()*))++*(*+*/,-0-/.0-.)'()++++/*-.,/-0/,00.-/.12103/.,211437=9@ILK>767955555:6:7=96440440232559:9>588:<;<=BAHLMRNNNIFJHGCFDINGFJKMNNPSZ][VQWRNV][cdbdd``\b`_]`^\]\YW^YY_XTTQMLEB>GBBBEAAIDCD?HDMRSOYXPSMHNJHAB=554844226548743364;NDAIF;34422578=79966360.302.--+,*+-,-,-00-./0012/2242487:;:@;=9:69;;BD@D@B?<<78988;HOME@<@;A:65776<:9>:<:==:=:<99?8<=AA?GKF=@=AA>:?<8><8=8=<=;;>;<<;<:A<@CA?CFGDNIRSRQSRPVQLPPRIQVWTVWXTUYVX[Z\]X\^\^`_]`_a__a`ccba`_a[XYkt`dcc_a^ba`_]Z_W]UVYZWUWWPWVTTOOQRNOQMNONMHLPOPSKLIHFHDGKKVTX\`ccYYZaXA<@F@;?@<:=@8<;;;;;>?=A:=<==?>>>?@ABBJJIQQPMY_bnt}|y~}~}rJC>@=ADDFDELJLGLGIJHGBFAHIFIEEJFKDGGIJKJJOJMMHGHHHHGJGCFD?JCDDHCHBFB9;H;FHHNFGECHGHEBDGB@C@A=A=6;:7?;783322./-,**)+'&)**()(+)('*.++-.--+++(*-+(*)')'(***%*))-,./.0/,-6AHawuWdtQFFCI9?=?<<8>BMMVRXYXY][[Y]X^Z]Yad]_c]UVW[[kjrgefkw~qehsnrsstunqurkdPKVftyuonlmllifoPEF3/,-***()%#$%# &!$)(*)()+*,(&%# ! ! !7;:6:2477677675274878=5897697795875:76>776788>=>77=;:==@:;=>=:=;=9996976;;:=7<:<=<8=<69<<<=<>?==79>=?:;=:66248164644=68:997::=84235666666;75826778AB?BA8321210586576634032321-0/,)/+,()1//100/1/.10433256:7>9<8<787;8?E>;=8<;>9;HLJFC==:<8788:6<<:>8;9:=<=;9989:<;=>:9==><<>>698;8;?BADABFEKNJQQRRUWUWNMROQNSTYWYXWWSUUZZYXY[[^]^a^^_^``_adfcedeb`]XYqule`_dca]a][][]U\RY[RYVXWUUWVUUPRSMQOQPONOPJQNMPPGHGFLNKJPZX]_\\^Z^[gRAE?B=A?<=:?=A;?8=:=B=@?><<=:;E?@>@DBCHLOMHNQR[cpyz{}sJ??@BGDEIHFFHJHIGKBPHFHDGKHIEDCCKGIINJJIOLMLKLJGLFGJGCEFIBDFFEDBBFECA9F8EDGIJMGGEGLJJGDDAACG=BC9?=;?99:121/-1+/.-****,*+*)'+,++/.(--300,(,)/**&*))'+)+'('.-++(-1/103Sz]LKNKF7;?::?>HJRNRWW_VW[YZ\ZY]^__dd^\]]X[[Veidwjkvvfgs|stlxrqvrri^QJSixtoqsonohdodWXI=;0/).-..*)&$#"##!#!%*(+--*-,-)'$$! !$"! !! #::9:74746789776575888:69378:7853586586;9:896:88:;9=<===<:>8:=;=99<:8659=:9>=8;;;:<9:95:9=9;<;A>8:;:;:<789;;==7553465567;8:85241258495635304/282553133201130/0/,(,)-,,..02121/./-0./1.4149:?9=;7:98:<<>@?=@;<:<;;;=<;8617:<:<;=9996>?<<898:<;A>BIE;>B=??@:<=9>>=;;5<9;>?@;=>9>;=?:@A@C@DEMJPNKLQ^epwz||~{~~~rK@EHEJIHJDIEJJMEEGFFKHEHBI?FFDIFHLGGGKKOJPKJFIHIJGFGCGHDJADDCGHGA?6<7947;9699:7:;=<;=89<;=:496578=;:8<<9;9:>>:8:986::76:=:;:>:<<>?@BD>=30..0,--+,('" " "!#!!$" !#!###"!# $%#%'(*((+**)+*,--*,+),,+'&%&'&'(&'&&&%+''%&(%'%&&('&(,')''(*),/12,.)(''&(%*)**'),-,.+'%''&(''(*())(()),.,/2-.-,+)/+0./00-,,*...-.,.1//3.010103/23451:?==ICK<34788:87364655;7242442184;D;:;>:99:96;ABEKHPOLNNKKIMKNKMKFHFKJHIPRTTZVXVVNNOUUadebaa[_^_aY]_XWZ[ZUZZUTTQPQLTVZb]cZTJCEA=AB?DBGKORUTMNMJHECD=<675556878;95661471500724221-2/033443011/2/031/001+,**,+-/-/01//+,(-.-.-11266=9@64:596:=<=???;>6>>;>>FMKLD>:>=:7874898;>:;55>8<;>>;;88>A>CBGHLIPSTRRXWTOPOOOQSV[XXWYVZVVTTRWUXZ]\^][]`c_bb_^b^`\\a`ZYU]oooiggce`_b_`^[Y[\[SVZUYXUUUUUUNTJJQQNPNMPQLIMLLJJIKGDKFHMSR[X\[_]^Z]gVC@?=>==@98=?===8:7<:@;<9>BAB?>@BBFPLMKMNV``nv}{}}~~|~~nF=C@BDDLJJLJIFMIHDIIHEFIEGIHHADEAHJJPIHFILKIEFIFJIJKIFMCIFBCCEGBGFEH9BFGJPQPSVSYWTVZTYT^ZZ`ZYhm][\]Y[Y^]ocasumkwxynrvuppqr^[GI[pwpsoqppmjkh^UFEVadFF;9*'$$)%%& ! !"!!"!$"$&()'.+"!"!"$!# !!" "! :<8<;:7::6644696774978:8687787769568898<9576;9988:<=A8;<::9<<;<:89:88979><@?=;=;A:>::7;;<>;:=?=<=:;>>>A=CF?;3///..1+**(& " !$$ ! ""!!! !# $!!$""!""####%$*(,***+),+++-.,+./,*%'%#'%%&(((&&')%%'(%&%%('&%(()'&*(+5100/+*(&*%%,,//+&,(-0+,)%(')*(()*&)&&'),--/1...),),+/-,-.+*+/.+2...//...022/3000210319?<=KEH>6376535548323321134003146;>?FH>;7:8:8:;@?GILRNNQKJFLHKIJILPJELGLMOTYZ^\VRUJPQX^[]a_Z]_]W_XYTYXYXXT[VPSTOPMMPXdjfc^YMJCHA>@>??HJSQSRMOPMJHGC=;8935532439648442332542/2.1303/3558685615333113.-0,+-+.-,++-./0/)*')(-/,011145769887768><;?<==9:@:8::GOJKA<<>?<:9556:9:<9::6=:=::<86787?8=ED=>9<<=9>?<;;<;88<;:;;<:;<9<8;:<=A>:<:;7=>:?B>>=:=?A@BA@BEHMLLOLPU]fntzy|~~~}}~||rRCDELJKJJHLEIGKNLLOJHIFDHCKJGCCFFGFIIDDJIILMMKLMJLLJMEFCG@GFEFHHJHCA=7=>DFFJBFDDHJFEEEBDB>B@BGC698;5:9;21/11+-.())*(,*)+(*)&*'))*+,00..+-,()('*),()()'(*,(*0-334By_RSRNJF=>>HNQSPRUUUUXYZZUYYQ]][]dhxpla^^VZZ]`ka\qogesutttpvssqtgYHM]ruvqmomnsjhfWSMX[gje\PF71&&%%'#%%% !"#$# !"#"$#('&%%"# !!! ! !:=998;8:7889655954:83875698:::8788889677885;=>=;;:><<:;?798=:::;<98969966;<===<<=;>=7;:>@=:9;=98?::@=@AACFC9201.---)-()"! !! !!!!"%!"%!#%!##"$%&"(&),**.+++,),,./-/..))&$##%(%&')(&%#&$%#&&$%%&&&$)''%'*(+02.10-)'&%),/.-*)',0,-)&+(),'))(&(('()')*-/0,/++.--,**,,+-,01-0,.,00/.-11----.0-04216@;:KGH?677652<33433303//564244579>AB:893;:84::;?EMLOOKMIJCEDIIKLROQJIHLQTYZSZZZRSPSRWXZ\`^[Y\[_]ZY[\\XXWVXVSTTPQKNKX]_a]WQKIBD><@?>=DGQOTVNRPJGECD?;>:4545566677:4:643150210029>A;;C8>;>GHFIA=<89:4857389=8>9:7:8>9;<586:@>CFGEA?B:==>>:?:;74=:;97:;5@?@<@>EAEFIJNPLTRVTUVPROINTRUXTWXXWVWUUWVX[YT\Z_^daZba_aabaaca^^^_[YSSjnkeog^ceq_^Y^]Y[WYTYWTRRVUSPPTQMRLOHMKLJOKOKLOLKIDGICGHNQQZ]_^Z_][\jVB?@<=?>?<=;<:=<9:5===??ACAABCADMOMNPPW^ety~~}~~~pRKDGOHMMJLOEQHKNFHOJIILJGGFKRDGEBIGNGHKKLILJNKMIIJKKKFJFH=GDFIFFHKG@?9?@BGGGELFAFCIFECDF=?=>@@G6:<;7>:8/3/---,(')'(',)()'&&','+-,,/000-*+)+)''((&&(+&(**+*+0-433`wYRXVPHH<=MNPTTVSWUUTSXXXUZ[Yd^Zacn[^ZXZZXeg\cprakvsutuqxusrn`VHS_twrqqtrsnlndZKDNcyrvkfTI70*''$%%###!!!$ $!!!"!&$$"# $" !!! ! 7=:99;8:79:;87787898<::576;:8:83:8;857=;79=78;:87<<;;?;;;;=;==:9;76776=<;;=<=<=<=<;:98:9<=<<<9;:??>@A?AF@941/++.,+-)(% ! !!#!"!#!!!'"""#%###&%&*(+++++)('+,2..-**)*%"($$#''&&%&%&$&&&('''&&,&('%*&+01.021($%&%$%'**--%&(+,++(+*)+*&)+(''%(''')*+*,.+,,),**,,,,-+0/.0-/..-./0./1/1021.+31249:>JIA;757;654464231/3.22234128<>>B>:9949699;=:DEJNOQOIJDEDFFFMNMJJQNLOTMXXV_[ZWTUSTTW]b_\Z[]Y\ZYZYXU[[UVWUUURNLHJKPTXRLJIFDCCDB@E>;?GMOMNRRNLIED??@:;61211547<:73965544122446>GMJFOIF@@A:841-2210/3--0*00..-,,.-/.,)-*)))*-+-//..001447;:59<<<;6=:6<>:>GLJCA99<9?56388:;87:6;889;:;88;8;=:@IGA?A>=A?>8>:8A==<;=9B>>@;A=<==>==FD>C@EGNJLIRKR^ekywz|x~}{~}{~}}nJBGMJMNMMKPLJKILHHIHLJHJGIIIMFEHHKLODLIKILIJQFOGIIKJLHJFJADIFJDHFFF>;==>=9;=8:<;:988;=>7>=>=>;:9;:?><;;:><=<:A=?FD@<60,,-+*)++''"! "!! ! #"!"!""!!%$%'))))*-)*(,*.0...-1+)%%#'$'$)'&%%$%$"#!$%&$&&&%%%&&')&22/0/.*&"$&&+))(,+)('(*+-)+-,+,*)**(*&')&'')/-,+*,*,-(-.+--+.0-/./..10,01/51-/,1//1/434;8;LEE?85666:53230/211/11241437>?=AJQWXWWULIC>>654432//.*-+0////,,-.1*.,--,),+*-+.0///1226676:;<8::;;GJFF=:=<8:774775<=:;698;;:=;58;9@@=?HG<@B??<;@;<==@::<><:<8:97:;A@>?>=C?BELIHTPTUTVYURPSPJPRSUX[Y[W\XWWVVWTXTX[XU\_`dbb_bhbda_ba]\bcWXZl~rnjklhkb]\[\_]\ZTWVUVXWWTUUUVPSORU_SLNLLMQJLJJIJKIHEBBBFMQQXW\_Z`Z[[jO?AB?;?>>>7>=7>9:=?99?7:>=B>?<><;;@?BAB=HMMMMTTS^hnz{|}~{|{}~}~~}}{tQJMKIJMOJPMLKJJNJMHLDJFLEGJJPGFEFIHHJLIOGMOMJDLIEMMPLIIKHF=IGHEFDIFD=:A@@LDKFIEDHHIGDBCK?B?>>BB39:9:<;4.1.,-*-1*%-(()'')(($&''*).)./.-,+,+,+#')*)(,*(',+*.,..027i~[][[WSTUJPQOV\][WUTSXTU[X\^\^^Y_]\`ffW`]ZWZZ_h[]b~k`lvqtsqosmonpdRKQhnwvqqnlpnkm_SIGYetrlfkq\\\B1/.*&"!%##! " !%$#$%%$!# ! !!! " "%! !9;:9;3<8;:;659779689<;7756976:977;278:99887867498@=?;=A>89><<@<::;88<9979;@?::>;=;B;=<:9<<=;=A==A?CA=AFE@:61,+.***,,($!! ! ! !! "" !"!""##"#%()()*.+*)++.1/30.3*+'($&''&$%)$$%#&$$$%'&'$&&&&()),0412-0'$"$%&%&''+-,-*&'&+*)+*+*))*'%('()$'('',..(*+*-*+-,-++//,0-.0+2//10.0/1../0/1/258><>KII?3377655825020///13423367B=?=B;67576689;?;@<:;<:=<=;;<<9<99;BBA=B>BA@DLHOPQVVYVWTRRMQPUXVXXXW[[XYY[VVRRXVWUWS\^]___ddg`bbbaa`_`ZUZUi~qjjkkiifbceb_`]XWXXVUXZWSRSMQQPKNMUMNRKLLNJNNJROIHFGJCKEOQUUYX[^`]V_fSBBC<;;?:;>==9@>>?<@?;?AAB>AC@@HMIKMJSR\gpu{|}}{{}~z|}mTKROOMPNLPLNOOGKIIFHFKFLBAIJKMGEHGBHFJIILIPNNGIKEKIPPQJIMG?ICCFFDHHF8;B@BICHDJEBCEDIDGFHABD>CC?47:5>98611/0..-0.)'('+()(++**)+*,,,.-./0./+)+(&,(+)*+*-,''*,//255g}yr|u\_^iTI`jSJMRVY[]WVVWUU]Z\^VY]b]b^``ffX_YZZ^_ik^licowurotoqpqph^RLViw{nspnpsnlhcWKKZjtqphmniigeI;74+()$&&!%$"! "#$$"%("#"#!" "!! ! !!"5:::<7;9:9;;5598<9;<:>8::8:969859959548<8895:979<:<=====;<:>?;;9@;:8:876;>>>>><=>;>9>:?7;<=?=<==:A==A?ACCBA:7...-*,)**'%" !! "!!"$"! #"#%! "$%&&&'(0*,.,,-..0..-0+*%+&"$%$&$(&$$$$#$&%&($)%%&'&''.-1.0-/)%&&%$$&$%%+--**('()),,,*'(+**($&(#%%##(**))**,-,+,,)+,-.0../..*///0//./-/,../1-3<7>JID=47272111/0/002.321355334?<@@@66766569:9:=46;=;99:;:667<9A=D??;?===?<9889958<:8<;999:9=??=AAA?IFHJGMOPTQWXWULLOQNUXUTUYVSUWVUVTVT[WUZT\Z\]^]^^``m]\aYb^]__]URSi~plkglniebdbb`aXZZYUZZXXTSXTUQRPOQMLLLOIIKNLNLKJIRJIGDFBIMMVZY^\\_ZY]dQ=B@AAC?>?9<:<>:<=;=:<=;=B:???<=>AB>A>DCLJHIOJQV]dpuv||~}~~~|}|qRJONMKSOMMOJKMLKLOJINKCHLJMGMKHGJG@IGGLHFELGOGMHHJHUUOIEGBDIDHHFGL^]QVGD?JHEFHBBCINNED@EE=>=B@>8>===685/2/.0,0+0))')&))''&*,%)*-,+.20/)--**)))()(.***(*.*,./.205cwbdnchfjHHv~YITSV[X]XVRPPU]\Y_WY[bW_][\eb[caY\^]fv}ibnyurwpkqmoik\HM\ssutsokonpjgZQEL[qtioomonbcXXQ>810)%%##$!##%!!!! % $$"""! !!! " "! =;:<<7:9:;::96;646:8775778<:9<96855:97:;7997687;<9>=A?@=;>:=>?=;9<9:8:789=<:==<9<=?=<;9:9==:<@?AA>E?>?EEE73+1/.-,*.*'# ! "#"!!"!""$"&()*-&--+/,.0..---/-))$$%#")%""$#!%"&&$%''(%$&&%*'.1/--,,+#$$#%$#$'&').)-'$'&'*/,*))+*,*%&&%$%#&((+*),*+,+**.-//-.+/,---,1,.11..//..03441696;GGJ76827213000/1.2043316446>@;:665255799;@@FDIIPLGCEC@EDKGEJEJNOHUUTNKJKFOQPXps`Z^_\Z[^\][[ZXUVTQQOPPNHJIFDFDBBJDEBEEA=>::?>>DLPSOQNHDB?98;7;>=A==;298752727637766452-54:=DHJFKFEC@E@:83//12-./+0.+)*(*()+(,)****)(+*(.///034454989:@;<98<>9;7FIJE>;<==:8659798:8=46:;:>::77728=9>FB=<<@<??;<8<9<7;<7;7:69:;=@<>@D@>EIGJLOLNTSYVWTSPOPTSXTTQYWWTZWYVVWVXUSYTVU]Z\___ccjab`_d]````WWZn~oglklgebdgecc`V[UUVZWRUUROKOMKQLOJKLNLLLKOJKLKGHMHIHHEHHMLVXR\a]^ZU]hM?>B>=@;==:;<<>:7999<=>:><:B<8:=?AAC?FECIMONKLQRZgpyz|}}~~~~|}z}~|rYMMPNFNKIOOPIHMJGIHHKGHIIGDFKGLKJJIFHIKEHHJEIJHKIHJHLMELHEBIDAHLDXrlhdG;ADEGKK@BABIJIIJGD@D@@:78:38:2/0,+1-210*+'(%((()'&+%)&)**,/-1-.-**(+)**(++(,,*,).,3/.05asXi{lehqcEl\TQTV[Z[XZXZTV]ZYXY\WgY][Z`eZ\d_V_dv{jbksuxrnulolshWSQ\pwqrssqqpini\MJVeosomjniena_gYKC66+,'&"%$!"" !"!"!!%$%"! " ! !! " "! >=79:::>9;8:<8>::6;;<;6;88;:;97;998798878;9<:7=;;?>=?:<>=<===:>:<;87<6=@B;=:@A;>=<:;>;==;>@@>B=??ABB?CG?;3/2.+-****)%! !!! $!! !!""#!! $##%$""$&(')**../.01011/,0.+*'%%""%%%$$#$$&)$&&(''%&'%%&'+.3..,,(%&%###"$#$$&*,3+&%%',-)))'**)+(''###%''*)**,)**,-,-,,,+-/-*0,2./1.20/0///05/26;<@ILI:5515204513231-4/25475;9>><;>=6465696<:=>;>=C;ACHNMPQMLFCC79;:>A?BAAF@DC>?@=54655684444166145278>>@:=>?>:81..114211.-+0,***)')*-*'(()-++-.,/02255798=;?;A;:>>=>?@@DCBFHHHPNNRSSURVPQPPOTWWZWUZ[YY[XWYVWXXUVWXYU^]__`^cbeca_^b^`_aaSUWj}ytxwvqrpiggibb``\SWV[OWRSONSQNRRLPJLPOLMJJMNJLKLKGNIIHIILQ\\\\_Y_^V]dM@AC>>?::<<>;9>;9:6:9@=>>@A9?==@?CAB@ELNOLSPMNZemq||~|~~}~{{|{~~zzpSPMNLLMJHJHRJMNMJLIIIHFOMJLILKLEGKGIELJGGIHGFEGJIJIINJFFDFKC@CEJ>Stse_H9AJGFFIBCA?FFDFGDB>@;C>=997<7986/20/0*,-*0(((&'%''()(('+((*,02..0,,++-)&)+**(+-.,*))-,-/3MM]|{ijr|`I\SPPUZ[\Y[SXWVZ\ZYWXZa]`]`ai\\b\^p{fenutxoqqqqmmfXLQbkuutlnrolqkf\OJWmrwomkqkghefeYSI76.*,(%'!&""# #""" ! !!"!&!$" !""!"" #;>=6=;<;:>?;798977<=:58:8798698:988:75<=99::::8:6;;?9>=:=@8==>@=<=:97759:@>;??C>=>;<=?=:A=?=>>@=8=@899=:@@KEINMOHFD:89<>??DFEHILMHGMLIG@<44;5304100211.,./062498::54/,-//0.23-.,,)((()*)'),'-*-*-+,--00/22549:@=;>@@;==:>5?>F:;>=<>;;78788:?665989:9897846<67@A=;=??@?CA?:;9;9:7=9;7;;:;9;@=>?=BCDFJEHRQOSWUTXUPRPMVWSNUXYXW]X[[VXWXUWQYWYVWX\Z`^]e`ba\\_`b`\d^[RYklmjllnmppmjlgge_gcbej`a_^`_``_]VY^[]]_WZRTTUUXYYWXQKFDIFKPZW[[[_`XZagOAE;@>=>;9?;>=@<:=?9CB@>CABHJFNOONR_huvz|~z~~y~|}}|~qTQOPLMKHDKJNIINLLJPHMKJHIHHJMJHHNIGFDGFIEJEEHHHDJIHLIKEHICECHFJKDI[TDEB<2;599>7520---,+0--,-)%%&%'(&(&()*+-+..,-+*0**(*(+)*,**)((+)*..0328Xn|tknwX^`STWT^]\XWUW]Z`^aX_]a^^aX\_c`cipyagmuqtqporrokcWQN`qvohoqosnqkfYNIWjqsllekddekib[AB?C2=)/+)'$%# " !!! !! !" !""!!"$!! "!???:@88<==>97;798<<<<789<:9:89;98866998778:;<:<89<<>;A=>>>>>=?@<9?;<:98::>=>@::;>A;<<<==>><=;@?=@=@>>=C?DD<:51.-+,,*).'# ! !! " """"!$ ###%&(),0-../0///.//1-**'$'&$&%%##%&&%$%$$%$$'''+041.-.)'"##%%$#%$#')-(&&'(&),)((+(*(&%$ !$""$"%(**,,*+),-,,+,,-/.,111./////.1*4..///6<:8MCG;6641343212211-.52134:98899366154457<<<8=DCDIHOKFDCACHJDLKKNOPSSSOOPOHJHGKQTSUXTXgtzi_\Z[]^[^YV\aaWYSRQUOQJFJDH@?@=?=><><=8<=;<>?HGMILLMCB><8;>?>GBGJPPRTYWX[]WXNKB:5011230/1/-1,*214146932//)+..-03--.,*,**))+)()+*+,(,,-./.1.35955:>@??AA>C=;8174636;?>??9565;8=<;<8;:98998798;=95978;=?A??C>=9@9;:::@>:9:=8;;??A;??CFEHKIKORRSVLNUQQNTQVWXU\WZ^[[WZZX]ZXW[[[[XXX[\_`]_eef^__^^][X^]YVZogbd`aa^^bfaa``[\a\[[[]]b]`_a\[]Z]]_[Y][Z]`]_^aZYUWPHGBHIMNTV_]Y[\YXf`MA?BB==A;;;?:<9;97<8:?>:?<;@:=;>;@C>AAFBGQLJMOMV[boyvz|}}~||}~}oROSQPRPNMNLNOINGIMNLNLHGKJKNFKJLMKKLIIHJJNJHNLGKSPNJMKIIFFFGFFLGIKMG@A@=AICGHGACDEEJMEBCA@A;:=<494899<520.,+-.0*)+)(()()'%%'$*)+,+/04.,,,*,+)(&)$)''**)),+,/.0.37u|zvzNhfNWVVZ[\YXXZ_[\[_]__a_^`[ac`guve]otsrvqtptrliSLQgsyroqokomqheTGLalrsmnlphlqhcZQDRJ^KE42*/,('%%" """ %$%!!## !"!!#!"#"!! !! A7::9:9?===<;=8899:::;968:;;8:599586;689:8:;;<:987;:;@?>>9;?>==;<=<=76858;?<==>;;=>?=:=;A<=@@9<==<=?CBDF?82.+.*.+('*'" #!#"!"!"$##()*+.,0,/.*,/02-,/+)%%"&"%$$%%%&$$&%$&%(&**/1./-1,*%$!##$"#$'$$%&'(%'(*(())('*''*'%$ !#!!$"%'(**,)++.,)),,.,2,,../-,../*0,,1.,10/8B69IDE=453/4130020-/.30-.006776544/31257587:=>>@BDGECDDF=:@DEEHGFJMJPSUORTLFJKLKVSSX\rxa[\^\\[\ktkd]UUOOOHIKHDA?A<=:;:8;697=:;<9@>@LHMJGEB@>839;5>:@?DJKS[]efjgha^YOC81111///1+,-)+,./1-.1.-+)-(,+-/.-..*-,)-(+&())+**(++.,0--/43589;=?;<@;6;;9401.203=>?;<566;9:A<9:9=:7::86548:=<4.027?>@?===9;?:?;7===::;696<;>A?@??FGHIJLNRQSVNKRPROMPSWT\[[^\`Z\YZUXWVW[ZWcY]Z``[_eaccfc_^`_]^[^[VTYh~h]d_````]]`_\bY\]][_]\[Y[ZZYY\[\YY[XXZX[^][Z[_U[XYSBFJEHHMSYZ[XZ[ZV\gL?>>@<=>98:;<:;><88<<<=>>8<>88<8>@@=ADCGLJMKLTScmxzxv{y}z~}~|z}zy~pWXUTWTTSTNQVPPSRNTULPOQNPOONMKLLOJJMNLLJKMMORUKMIGRKGKHJFJKFIFJIGIJE<:E:ABFIDFCADB@JGECEA?=A9??48896593-.),,-',(.)%((')&)(&'$*'*1*1...*(.)(**''+)+(+((*+,,*+/0/26y|uzFhcLVXX\]XUWWVTZ][`\]]Ya_c]afvtciuusrssspsnlbTLNluvnnkltqppi`UILenonqmijiijjaVXFFLgmZA<,++((&$#" "# &!#"!#! "!! !!G>@::=799A=<;96:::6<8:::8;;797889;8698:::78;=:6:8;<8=>AAA=;?:<>;>=><:8:8:;<<>?:===>=<6;@==<>?@?A?A@DBBBA?:100,*.+)((%&!!! ! !!!#! !#!"#""$(*-+-/*00,./.0/.--,(''&%'$&&$%#'$%$'%#'%(''+/1/.//0)&%#"#%"###!$'&(%'&$'%(')*()'&)&%$"""##!#!$%*-+*+),+*+,00+.,+--/.*-/.-3/.00-/115@6:HHC=3413/12/31./-121020264469677952444597>;9=;<==?<<>8;>;9699;898:67;9@@B=@?@:=?;<;5;89:7897:86;A>BABHGGKJNKSTSWQRUNSOMVYYRZYZ]V`WbY[TYZZV][WY^]`b^\]cbabab^b_^Z^]]]VRWm~k`g^d_eb`^_a__]__]`^^_\a[]Z\[\[YZX[\Y\XZ[\[ZW^W]]WQIFEDIEOSRV_Z^^YU`cPC>?@<@<<9=:@<;=;88:=;=?<;>?:<;6>?@?A;BEJLNLLMOVZemvy{{}}}|~~~~}}~{|zuXYVWTSSUOSNPRJQNORUNRQPQPRQONQLMLNNLMOONNOOPKQMOKMKQLMKKPNKRLLQNLNQNJGKIA?>68675396FFB?>@>A;=;>38667=<80,)0,,,/)-)+**(+$))'('((,.,./00+-,*'.,)(*()+))(*+0+*,-.317tyv}zEhbRXTY[\ZZ[UZX]\^][\`^acdfsodcnrqomrrqsnk_RLSiqqsppsppqmf^NBQgn{rjonnnjlkdZSFNWgi_]L:-%&()'&%"!!!! "!!#"$%#!!! !"" >>>=;@9;::>>;=;7==:;;68:9;;8988:68669999<;><;:6=99=;>?@;==><=>==>8;<98:?>>>@=>=9:<=@>@<>??>==?BA?CBDC:40.-,-+*)('$ ! " "!"! " !&!#&$'(*-,*-/,..-1/2..--')&'%$%#$%$&$%#$%%'&&&'+12///02/)$$!##$#&&%&$$&'&'('&'&*(('&&'%#$#"!""$#%&%&)+*.+-,,,,/.*-+./-.,,,2-./..-0,0103>::KFE>22/32/3033.//145311/2216986:@466096:::;9?=@GEFAB?A;<>DACDJMMLRTSTSSLMONMY[bhiÿnc]gr|~t^SOOKJHKDEAAA@???;<66:998:98;CHLIJHHB>8632344323579ADOV_e{}m_L:00//..,0.+.--011./-,-+,*(+*)),**-&,))+)'()&**)+),,.0.-,/0387<:B><==:>>;=>=<:=@<@>:8?;;;>;:=>=@@>>=?=?=<:?;>;29?>@D@CGKHMORPWSWSUTKNQVZ\XYZZ]^[dY[\_]\\Z]^ZW[`Z\\^^^`]_a]a^cbb]_[\^UWYj|jdfbga`_bd`^_[ac`]c`^^\ab^]_]^\^^[]]]]]Y[VW[\^^[YYWLDFGJKNUX^[[[cX[`bM?>=9>C@<8=:?;;=797:=<>?=C@==99;=?;>=@;2954878:0.*/++,**,((&(*.$,+%"()(*,+.2/0,,*-*))*--+*)()&-)+)+-+*21<9:9;<9<:5969:;8487;7877;9898;99=:7;99><=B@9===>;><9;:>;:::77<:<==@?>???:?>A@A>ABD?:50,--+-(,*($ #!! "" !"! #" #$&&((**0-*-+*1-1/0/.))%$%%$$#%$$&$%%%)'&))*.10-.00530(%!"#""!$&&$%#%&%&&''%(*'+)%'%%$""#"!#"$$"%%**.*.++**(+)+)-,-*-,..../-.-//.21079A?@987:9996:9>EGGNKLE@:33213326551548:ER[itz|si_P=1/1/-0+/+/,/-/.)1,--.,+()**+)*+-))+,*,)('(&*)())+++.+.1.0598;;=;99:6<><9<9=<99;89<=;>9;;8>C?><;<>@=;;>@:=A@B:?>A=>A=B=<@=>@A:@?>>??B:18?@BBDFHJFLQRRQWQQOQKORWVWVUXX^^U^XZ[_Z^[Y\[X[Y^^ZZX^aaacb]_^__^]aW]\XVXj~kcf_baecfhfg``b`bc_``]bba`b\]a\\ZZY]_[`\^]Z[[]YYU]ZIBFBEJORVZXY\]VZZhL=A==@B>7889<@><;789;=?>@;:;<:>;;>><>@A?EGNNMHRUWfruz~x{}|y{~|z|t}}zr\\TOSUVROPRPRMPLPMOPMNMMPLPQLNOOQNOMPIKIKKMOLIQMMKOQNLPKLIKFHJIJJIHKFKHG?55312,41/38A?9@?=:<8>;3465;8942,01--,(,'++()&(%'*(&*&,+(,,10,-+/-++))(++&,+**,*,)'+/0817uyxBhaQWTT_]Y\[V[ZXa\b`Zdduqb`qnpopotksog^SO[kxvrmoomvijeZRJVfupmjpntgofh_WDEUgimlfhZSQ;,+*&&%&(#" !"" "!""$# ! # ! !=>=;==<=@:=:;:9:==;<:?:88==:78:::98689;<;<>;<;:;8<=>==?;>>:=8@>=;>8=;9889;?=;A?=?C?A@A<>?@?=;@@>;@>A<@CCGED:3.+*.)-++(($"# ! "!!!! !""!"##!##""#$&',-.,,//+.*1/0-/--*$%$##$#%"##%$#&$&&&)+-1////555-(""%"$$"$#$$#%"%&$''&()&()'(%%#"!#" ##" ##$&()),,,-++,*,*-,,//--+/..00/../15095<=<996569497939:;7988:8=9<9?8=;:9?=<;==7A;<9;;:@A=>;>?=@>DA>>?92;A@;EDGJLLOQNQSWTYROOQOVUTUUVV]\Za]\[^`aYVUZVXZ]\ZZ\a^_fd^Y\a]]^_\ZZ[WWYn}eacbdc^_`^a`]``d^d^cb\`][]^_``[]_\ZYaVZ^]\\\VYZV\\UDEGBHLNUXXZ]\[ZS[eOA?=B<<;:9;;8>;>:858=:===>=<<99???=<7>:447757;52,,.0)+(,%())'$(%&('&()'--,+4-,/+*)*('(&','&')()(.)*,/,/25vy|FkdU]W]^aY[[ZVV[_ddddqo`glomkmmnljqkVKI[qvoposoopkmcVJIXiqnmolnmjmgiZNDDZjnphf^hhV@E32''%&$&$$ # ! ! !!" !#A??:???@=;9;;;8;<>8;998=:989;;8;98:98::<;:;=>98>=<=><;<><>:<:<;?=B::96<;@>>@<>>B??@???@=A=?@>??>>@@<@?CB?850.+-,,)')&" "! ! ! !"$! "$#"$&&'),+*,+,--.//0,.+*'#"$&"$$$$(""&$''(&)-00-/26673-&"$#""&"#$"#$'(%'%%'(((((%#####!!!##""!!#%%((+))++*-,++.,0//+*.,./+-..0./0;38DBD:3313/13310.0/236200/01/0567:;:867728:9<;==@ABBGEA?>?=BEEBEEDHLQOMKLFLJPSXY``^beb^Z\a_ZSYWUYW[e^^cbfd_cZQLJFGD>AABCD?A:=;:A::968565@CEIEB@>654131-10310.221487>HKPKJ>9120.*-+./-0/-0/-,*-*+/)**)()-(0/-,)+*),,*,(('''))+*+-+.-/0347;9=:<<:<877550956545::79;9686<7897:858:87:8<8:;:8;<9;::;;<<8:=::;;;98;:=:??=<6?>>=:;<:67<<=;<@?=<02-00-/1/.5:8>;?=<<=:<724856994*,-++-*(*(*)(()((('')))-+,.1//,+),&(*((++)*(**%+)*.+,+088vz|HsiX^W][_\Y[[YX\\imuj^fqqpnlnmlpkfVOLansokknnrnnm\YCM\oulmhgoopmhdSJBJ\lnjhjd_fb\C9+**'#$$$$#"!""#""!!# "!"""#&!! ?>A<=>:;=<:>;<=9<<;=;;=?>:8<<=>8;99:<<68;=;9;99<;=?;<>???=;<>>>?:C<898>9=@<=A>>@??==>A@@@CFEB650-.--+)((%&" ! !! !""!""""# ""#''*-,-/-0-.-01.-,-*%%%$$$$$'($$%%$')()/2-,.226352+$$##$"%""#%#%"*"&'+))'))*%%#! " "#"""#$%&'++-),,-,,)*-/.++-0.+/1,./,-//5?7;HBD92-100241/2-10-121/1..001697964204:99<;::=@@DFEF?@?@?@DBDAGBEEGMMLKJEJGLPSV\YZ```c_^^\UVWXWXXVUKQRU`^Y^RRPGDEB@@A@@<:=:9<<<:?<::676=A=GIMDB;422213,22,00-334477:8897312311/2//0/100./-+),(,,',**)*+*,.+.+),*++,)*('+)**)(+*.--21255:9?<:;78;:87<4977:9;68878688<<98857848996:;=89776;968@5:;98;;<8=<7:9:;<<:=<>:6<=?@DEGHNISPRUYRVSTPQUUSVSWVXY]YWX[^X`\^\YYX[_^^]a^]]cd`acce`^_\_\c[XWXUlzgdfebc_\_`_[^\\a^`[^]\aZ\\VW\WYW[YYXXWW[VZX\WY^Y[YTBCHDEFQRT[ZZ_dZWbgIB>@9:<:;8<==;76===>:>>?<8?>>?E?@@BCHJLKHNIS^`lvx~|~z}~~~~}|wmYZVSQSMXQROQOPNSOPROOMONPLMMMJINMKNMLQJLOLMKJKHJJLNMMKMMIKJHLLGIGKFDEEBD@/22420///.7=;8;;;<:>8:375658623/,.-+.**)(*'()'&&)+&*((*.,+.-.+.*()'(+)*))(+().+*(,,,-/59u{}HzfSUXX]^^]YSY\\fwk_dlnooprqpkieZIJiluqjrnkmlle]VLO_qupkkomqmmk`UJCOalrmjffdjed]Q?7+)&$$#'$! $ !!$! ( " !! #! #!!"!" !B?@<99>=>@==9;;;=9><9?::;8:=:;=8=6=:>8;=;;89;<;::>:>?;>?A??<:@<=??<=8;:89;=AA?BA@D@B?B>@>=B>>=D>=@;A?@DBEDB85+,-++,*(&%$ ! ! "#"# !! !!#%$(*-)-+--+*.*1.-+++&%)&$&"%$$$%$#&'&,1/10/13=8350(&$$"!%&$#$"###'%&'())**)'&$!! !$##% !#$$##&'**)*,,-.-.,/.-,,..1-/,./-0311;78EGG;3/344/01/1/.00000--+/03336453253457:9?CEFDCBCAAC=@A8@E;D@EDCCKONMJKEDINVTWZY\a\]ac`\YVUSSSRVTRROPUXUTSXPPKEFA?98444:A@BKG@?95312/5-//123.301161232342121/0/20/.0..-.)++,*))*)*())()*,*+-+**)*())))$)%)(+*++---/0366;==>:::;8:5667;8;:;785789799985:<79<:<:;:8877:=::8698<9==:8;8:79=<=;8@DDFGKNROQR[XXRPNOMXTPWXUZWRVT\SUYVYY[XY^YZZXY_]^__``c`b]a^`^ZZ[^Z\TUWk~gfbf_`_^^]^aea\c]`_Y[_\W_bYV\YY[[[Y]]\]\YZXUYV^YVYMFB>GHMQSX]X]WVUU^aK@A?@@>=@::;:789756<=;><=9B:=:9<?=BBILKLHMQT]emv|z|~}{{}y}x|zqYVSSOWOSPQOSOQMNNPQNNONMOLQMPMILMHLGJLMOPLOFIMJQMGMKIOKIJGJKHKHLLHHGFGGF@63/4/.0/.-8B:<;<==;<;=062827830/+.(+,+-+)'())&)'**)&")).-),/,-,*')+(*(*)&(+)'*')+,--2.65v{EdSVYX]_es\U\euzjbckqmkkkjnlg`WFPdoyjqpommlkk\SGUfplpjnmognjdaRHCRepslfgldhdfbnZ?65&&%##"##""" " ! "" " "#!" "#! !!!# ! !>?>=;><:<<==?;=9::?9;<99=@?=;?=9:<;:<9;<;>::;>@==;=>??@?<=@B;=8=<==:<>AA?;@>==@@=D><;@@@=BDDEC95/-./-***('$ ! !" ! !!!" ##''*'/,/,-,,-.0//0.*')(%'%%$%#%$&%&&-10221028:231-)"$!""!$""#$#$##%%%'&*((''#!"! !!!! """""#%&)*(+,.0-,.,+,.-+.,-,,.5/.00.3986DDC>14442/.1.110,..,-./010,254766403568?@CDFC@HEEBCA>=@<>A@DC@@BBFMHLKIIIKOSTYW[TZ\[__\ZXSOQNQVTROTPPQNPQQSJHGEB@?;@8;::8598?8<<;>:5:8>?>CKG?>663.532220003/1/324/02213323400021./2./----++)('()++,,++*++,+*))'*'())')*%'(&*+-+,.006196;;<;::96865;9745788::;7;6987;6866;9;9;:::879::795<6:?:><<98:;=5=<:;>=@?>@<9@@CEBHHHNPQXW^WTROWQ^^VUSWS[ZU]VXVYZ[ZXZYXYY_Y[a^]`^[]c__^`a]\__^[X[]XXVl}icb`b_^^Z]]]\]][`\a_\[\^a]^[[YR^\Y[[ZZW[XYXXZU[VZYPHBACGNPPUZZWW^WZ_dLC=<==B;;8:9;8<<:47<;==;@A?A<:;;<>>=B=EJJJOMOUXbot{{}{|~~}}|~~|y|}rWSQTTTSSRRQTNSMOMMNORJQLLNMMRLIHLKMLPLPMPLMLJPKKJMIKJKKKHMFHJKFFGLIGHEFH<11312.//2/7B<=<<;=<;>975676<<28-++))*(')+))*''('&''*%(''/+1/-.-+).+(,)(+'*)&))(+,-.../28t}HhXYZY_cqv[gswd_nutnpmlmjjfbXGQfstoknikljiecLKUkttoolknopjl\SDJXmtrjhifgjffcbVOF61.'' #"""##!# " " !!! # #! #! !! !=A9=:>9:>@>;>=::<>;;=:;;;>9;::=:<;99;::;76;<989;B==>>@A??=A=?@?<;?<>;<:=;>A>A==B?D?A?>;<:<:@:>=@;=@?;:869588:;<;855897;:=AC@;:5404333030211/.30100323313/11/0.00//01,.0,--+(+)*)))-*(+),.)-**'')''%%)((('(**+,+.-013;6:?=;<7<7:85:67796878985475777788::9<99:8897;=;8:::989<=;9::;:<7=<;;=>=;@<>A9:B@EECFELORUS]XVRRJRVneWUTXW[[WZZVVVXX`YXZ\ZU_WXWX\_]]Z_]^[d^^]ZZ\_[[UVTWl|__a``]d]X]YWX[[]^__]\^]]]^^^`]Y\YY\YX^YWYVZZ\X[WWYSJECCDBOSRX[X\][Y]eMC=?:<>:;7=::<@::658<@A=A<>>8;;:?A;@A@B>KIHNQPOU[arxwz{{|}~~|}{z}|~|rXWUOPROORSQSPSNJRLNMMIONLLIKKPKMNKMLNLLHKMFJJLLLLHGHHKJMJLHMLMHGIGIHGEBJ<312410031,8@8<9;9:::<6446:87872/,+.,(-'(+'+(&$)+((&)&**&+,.-++(****'))'*'('&),,),,*./30;o~}JhVZ^X`ajpr|ibmpqlllninrjbSJWbutrlljpgjghZKPWmqommilqlljd[KIM]numoiicejfhgh[WM@:40%%'%$ "$#!#"!! !!$!# !#!" !!# !!!@C>>;=;<<>@??9=;:@9>?;=>;>>::;=:>:8:=98=989=8A<9=;?=C??CAAD>B>=>;9>9=A>A@FHHC84//,-++'()'" ! !! ""! "!!"%(),,+..*+,-/.11.-+-&$#&%%%%%%'%'+0/.0.069A=?::5-'"""#!#""#$%#%$&''*()%#" !"""!!#$##$$"#$%'(*()-*--,.0..2*/+2-../-.05775CIDC/121300010/./.-.0-0/041227:=6?:74556>BFHGDECD@@;=<;?A?DDCFGFMKKKJEGJLQVVSXZ[[Y^XZVSPQQQSQSUQPLQNRSSOTOLGD@B@=;8:89774776;;8;58:86=7:>=::53252/31210-./0/0/1104/4421021/1220/.+///.,-.+)++*())*'')),)+*)(()'''&'(((((*+),.*+,/43688;=;:8<877142504447587778999<9<8:9;=769:997:>9969;<6>7:;:9;::<9=?C>==A=@=AA5AF>@GHMKMPRPV[WXTSQTszdUX\Z[_ZX[YZYXY_\V^]\WZZ[\\\_^\fbf[^[YX\]bZZW]][\UYk}H?BCB=DB=B@A?==@?@??BAD@A?=ACD=DCBFGBCIEEIJMPKMKNOI@BDDHHQSWZ\[^YZV\iMB=<=><<<4;66;>:;967@>6=:?;=8<9?@A@?ACDHNNKJNS^hjuy|z~}}}~{|~~|{}tVTVTNOQQTPRQLSNPNNKLLLPIMKKKPNLOOLOEFKKIGJNLGMLLJKEKLJIJIHGIHHEIDGIEHGFM>/00412.1/05;:<<:<<=96:66566497/,//-.)-*(((*)'%((*('&-*(*,,/--+*+*&)$''*)(&'&**.,,-0305p}FjT`ZX`fxufenmmmmijlfle_MJYmtqononiklicWHN]nuvihjkmjmfjXILMftqnimigodejefaSRUND4.% " $#$#$#"#"" " !! !#!%!!! @B@A@;;>>:=;>>?=??;>;<>>;?999::==9;4<<>><;8=:<<:>>?<=?AFA?A=>==C=@>>;9;==>EDB>DA;?<>>?BBAB=84.'$##!"#"$%%#%%$&%(%($!! !""#!###%#$#$&%%))+,+(-+-+1,.0--+/*/,-/1/5789GAG>340724/00/20..++-002322237=?;CA<6627:==8@=A@F?<@A>@@BGEHEBALLGKLJIHIOJMMQ[YZ[\XTTUVOQRNTSTQORKQJTSRLNNLIJED=;;6;4:87665846775416457:4785/34453712100./-/--112756365.12010.*,-++.+..0/**++).*)*((+',)))+)&'&*'$(%(+('')'*,+*.//39:9=?>8;9422,./--..0101.0.107553544749743689654665<:;:==;;;9;7<>;97;79:::9;:<<@@>CHGKNPQWOVWWURSQ`dW^^\[`Z[[d]b^]_`]]Zc_Y]ZW`[ac]c`\]a_Z\Z\]Y]XZ\[ZWYpzMCEE@?><>9893/0//01//1200/.-+-.-/3,/-.,.,+/,0-//;<=>;:879=:8;996=;;=898<;4474563////,,,++))()*&&%&%'%$**))+-0-*((+'&'')()(*()',((,/..147o{FlX_Zbxwehjskimilmolh^UMYgsplgimknim`QEOeotjhkklllkhcTGCRkpolgjfdhhmkjk[\^kxlQ:/#$#$$#$#%(&$#! ! ! ! !#"! $ !$ #!#" ! ! $??<;@>=?@>=;=>?=?@<<=<@?=A:>;<<;=9::=;;<;?;:;::<<=?=@@DBCAC@??>;??@;=<<===?<>CCEB@=B@BA@?C>@<@=<<80,%%###$$$%$$%$%&%%%&$#! !##!"$$$#$#$"#"'&+,(*.)+),*//./--*.-03/-245;FAF@3014421340430.,..103/13/17=?;<8535357788<>9?FABC9@@?AABHCGGEDJMIJNIHIJKJJMMVTTYZYSOSOMNQOXRNPLOJMMPQSQVQKKJC><=97<68957856335446344421/12/14524320010///,0-.01575778521//,1/,/+.+.-+,1-*),*&)',*))'*,*))+('&)(((''(&')&)'++1)03-6648=;>>8965/0/./,),,/--.,-00.230/326431--1/521.10/748758:84642422453345244678;?B@DNGMJPPRRXXWWVQR}b][^b`c__a`ad_dbb[fa__]_^Zba^`eaa^]]\XWZ\U^^\]YXXQYn|SGFABA@>BD?@;99.0211031-11..0-///0//---,-0,+,-,//0>EIKKNNMSZdmsvy}{{{~y~|~|xzt{{{~f=7775654758337754788<5:89:>?>?E=E>FDGJBHDEDCEA@BCCHBGHGEFHEFFFGFF=225210/010:D;;=<<<8<:;924845611-10.**+)+*+(*))''$%%#&(**(*,00+-&)*(+'&('%'(+()/'+)+10//4rLm\gtvgjpokkjmijjif[QP[mnnnomknmkhbQJN_opjjknkjijf\YGNZppsighkhffkhhec\iy}|yc931')%!$# ""#"%%##! "" !""!""""" #! ! !!!! ???;=>>:>A===>A;>>>=:;;:>;<9:=>;9?><>9==@???;=>?=B?>=?AB?A>A==<:=>>@A>=@B=ECBCF>A?C=BJFGD53/,./+-+'*%$! !" ! &"!!#$ "!#"$&')+/*.-,.*-..-,-+**(&#&&&()3/2/-/7@AB;?<;5-)##"##$%#&%#%$&%#%&'#$" "#&%&'&$($&&%$"%%')++),--1./1,,-+-2.1//045;9EED=231/201/104..-,0///3/220/2583875424595687?=?BA>BB;??CDGGHIICIGIEHIGHBKDIILLRVWZSSQSQRPPTRNNNOJMNNMMMOJHILIEA><<88:59687485543242044011-0/224433354221//./2,/0245234411/./,/---++,,,+*--+,-*)(())')'(('%&(')('(%$&')()(()'+*-,//1557;??=::974410020.4//01/.51013365646555745584699398:8779546686:378876133422=9?>>EFHJNPMQRTbUSWTQdg^_c`bfacabgigdebccdbcb^_^`fihedd`b_Y\[Z\U]]YZ[WVWTnPBJ?CFAB?A>A<>;53023022/22.0.0/-.10-.//-+/-/-+/-119>C@?@7:??>;??CRHMMHPMVZcmuz|y{{}|z~|~~}|y|}|zf9-1-10/,-,,*(+)()*'&'))')*$')'','*'))(',&-()+&-(*,,+,*+*).)+/0/-020565364+,()-142/.:C6:9<=<=:20871483-.-.,),+))+&(('&)'''('#''),/.//,*),+))(()*'+)+)+.*+-,..317kKutunmkonkmiloiibZOZ^oolkilmkkkh]KJVdoonjjmmnlpc\MFN^ornplfggjeega^\jq{rQ10,'%""$ "&$&%"! !! #!# ! !"! !"! " ! =?>9><>?@<@?=?=@>??A;>><<<;:=<:=:><>=<<>9<>@?=A;;C@D@C??ACAA?=@9@<;<=???:@?>?CCD?@>AA?>>=>>?>@@>A=?GCE@600+/,+-*)+&% !!!! "#!!$%%),+++-1-),-0,,,*)+('&%&&&(,00/,-.7=BA??@:@=:3.'$"$#!"#%%%%)"$&%#% # !!''))')))('('$((')**',,/)..1/-/,,/.//..1569CFC@61/11/0.0/0.0+-00.//.00..026563023558:6=;>=CACIIIGFGKIHIFKJIEBJFHGKNNTSSTMPNOMSPSUOUNNOLOQMKJHHIHGA9>;98:9@7:7688466/0,43010./106/55643113/42100/.16127646321--+/-.+-/,+*,+,,+++,)*)&('%'$'&%''('%$%)%(&)(%('')*,+,)/-1476:99=<>66553420104212222645663959:8:8=>;<:>><=<>==@>9=@=;9;9?A<;=:=@:<<<;2:8>@@HFHIKNRTTU\ZUTRR~i[_`df`gddhjpiehfjhfda[__baiiffhcdb]Z^\ZZWX[VZ\\SVYl~ZNOPPOIK?NIMGHF:202113401/1.04/+-./-./00.01/.-0.0.9<=?FCMOTWUY]ZX[W_aJ>B?;:;;;98:9<=6::78:;A;=<=;<79?=<@=;BDCNKOLJPLU[dmwzw|{}{~~}}{{|{{}wg>41.--.1+.+)*,.++*,,+()*'**'(*'*)(*)*'++&)*(*('%')&'*((*'&'('(*'036534.)..,((*8BDB<@?B@A?A;==?<9;=<<:;:==>=>9><=?<@>@?>>:??@?A@=@<><=@>CBB?:@C@A>C@A<@AA<@?>?=@A?BCCCFC84.0.--,)*(($ $!"#! !#''+0-.03-.,,/-0,.,+)%'&''&),0/-,./6AC=<>A>=9;53/&"!$%$%$%''$%%$$ " ! #&)+),)(')),++***(+,*--+,-/-,./-.-./.14;99DGC9243010//-/0/0/+--./1-//..110/0414477595;<:=A@>?@A>><=@?DDFBCEGGIEFB@CDBDEHFJOLOLQSMOPTRVSWVMTPLNGLJLKOGEEBACB@=;:>=<;??;=>?<==?=>BC<@>@DCBIEHHQJRRXYYZVUV_k]bhfgcgdmlmmkikirvtce`acggkkjijfdcaX\[X[WXVUVXXUSWp}yfZb\]]JJD^`\Y\M:7612123123/+040/-.2,0.00.-1/-/...-:A>AAGHOUWYYY\\WU_fM=B=<=:;778;7=<69>:6;8=;B>;9<8;;;=;>==>DHHMMILLR\flvxxz{v{{y{{z{||}|zv~zg9520.///+,.+,*)**(((++*-(,+*))'*,'('()(*)*)&'&$'&%,)()&)&'$(&)*)>BG?>C9=9=;=:;:7540332432--.-,*+)*+&*%&'(*%%&%%('*()-.',+((('*&($&&''''-',)-,,-03:oOouvvmlnlllkigbUJU_spfmmggiljgUJMamrrmjnjnrlnfYOIXmpsnkjihjiiik`\_m{sVG=6(###!!#!%"$! ! !""! !!"! !( BA><>?>>=>@?@=@A<@@AB;>@=9;=;??=E@;<>:==9??>?;=>CC=@==:>;<<>BA=@B>@?>@?B>?><@?ACDEE?:2,.-+.*'()'# ! ! "! !$"$'),++/,*+,/,../-**'&'&&(),1-.,13:@?;>:73.'%#$&()*%$&'%$%$""#"""! $"*)))*,*,)*)).*+-)*(-,+/*--,.-+-,*-../956BC?<611-../1/10.0.../.-.0+,.-11/0.205689887;:8=<;;===:?>>@?G?CGBCGIGFHHAABCEIDHKIHLMPQOSQTQQPQPKMJHNIFIIGFDCECBD@<=6;DG:@D@77343322./222.-,../3166532.432302/0/.-./+/-,0-/,/-2/.-..*,))+*,))('')))'(''%&&$'&%'&(&%%%'&&''),%*(+)*.-028579:9;979530//.022/54323235689577;899;8:8:=>8><<:==A=:=>;<=9<;<><@D@??>?A@B?BDELHPMQVYWYYWTRsm]ahhhihllopuwuhe`afjegdhihhgcb]\]WZW`[XYXXYUYm|b\\]\^KJE]__T_S?>521022141.0.010,1/-3020,/2./.0-/17=?B>FKQSUWZXYYYS^dIA@9;<9;98;<::=7<=:;:8?:@<::@98;;?=>=?@CCKONONNV\anwu|{|z}}}{||~yxz{yzzf:33311.4--+,,*-,*),-./-.+(+.-)**,.+&*+),))++++*+.(-'(+')*,*,)&('7E@DEE===>>'1.CDAB?<=?=6:;=8688103414431----+)**+''()%)(''$)#&(())*/,-.)-*(*(&('')))&'*)..,//1038lm|pp}|qllpqmifaUNRfpnnollmggffQIO`lmmnnjmppil^WGJYjswkmkjhiikegbZbp|xnbJ753$##" #!!!! "! !! " #$ ! "!!!!!!;BAA@=<@@B?BA?>?BA@9C;>=>>:=>>>@?<>=?;<9=9<9=>?>>@@@?>>A@A>?>==9;@:???>C?DED@AA?C?@:?C>?>?AA@BEAGD9/+-,++++-(&"! !!! !# # !#$&)+--+-,+-,-.-..,*&''$'-00/3-148>987<<:895374-'$(**.2+('&&%''%$&&+..)$"!%$)*+))+.0//,-,**.+**-1+2//,,).+.0-/.1/7<6CFBB103/0000.0.-0-,1/1311/./0.2014422356688::7;:?;ADAEFDBEGFBDCACCDIFCHJDDKKONKMHKLJNTROLJILHFIEEEGBCEF>=;?:9KH;=IE7624114223322//-..0239763/000/32-0..0/..---..1-+--000/-/+)*+)****(('&%*'*'$&''$$&%&()&''&'&'&&'&'))(,+-/.04498:;<7;874112103401411254366646978=796:889;:=:A;:=9=;>=:<::<:;><<=@B;EDFCDHNOTTWZTXXVWYkdflklllnnqz˴kcbafhce`dbhgjb`Z^[W]W[\Z]XXYSVk~`\ZZZ[PLEY[]Z`QE<:1221431113/11110202510.0-.0.0/-2;>ACB@GIQUWW[[XZU`dI<@;;A>8898:;<<:88378=?9??>;<<:<=>>7>ACCA?=::=:=;<6994143155300+-)/,.),'*(&&(()('&&&()('*.+-*(+)$)'%&'&*((%&)*+**0,-24:ktq}otlomjZOLRekmjnkljeeebNNTeornmjjjnhge]QDN]mropmgkkkjiie][bunofR><5+%! #! !" !!#"! "! # !!"#$" !"" "A@C=>=@@ADC=@A@B>>=>:@:@=<:<<><::>;>>>@@C>?==?DC@@@?AE@<=?A?ACD>@D@CDG@@=@A?@@=CAA@CD?ABGFC=62.-+-.++*)) !! !# $#"!$()-+.+,.)*--/,/3/,'%'+,./-0.*/+.-/10--.-02,0+,***)/.,,+(*,+,'))).031**(*)+,-*,/1122/,//00,-+-/2632.,+-,,--/.029>6BAC>43341-.20.2.,,+.0.1.1.162102112314668768=9>9<<:>:>?==@B?=>B@@A?<<@?CFEFLIJPWUT]YWZSXcpfhnlmnqt{ţkefdeggd`dceaacb_``VZ\W\\[\WXSYl}wc\_Z[YZYIY]Y[`OGE>947334231043434013650/22.13033.49?A@DGKLSRW[YZ\VT]aFA?;<;:>::7>==9:8578:=>9>@>>@>B;AADELQLKOVWclyw}z{|z~}}}|}~zx|y|yc=65230..4*/0.20--1+3-,-.--,,,/*0,-+-*/)-+*+)..*-'.2)'()+')*+'+-'=BBEDDCEBBB*(4@D?E@=:;9@;=>7986/2671592--+.+.*+*)'*)()('**('***+)(--,+))(()(&%(&&)&&&&++-+*-,0/38f~tumpropfR[ktolmiilhffXOKPfsuhjmnkjjleVKDUcpjllpmjfliice^`nzpnZ\R<(()($"$$! ! !""!"# " !"## !!! "!!###"&"!!" !!! D>@@>>ACD@@=AA@>@@?=@?=>?>??;;=@<;>?>;<@@B@>=@<>?<>>?A?@@A>@AA@AAC@??;;<:>ADCAA@A>?CE@@@?@??==@?@=@>?A@CHCA851...-*,+)" " !! !#"&,*,*--0-+,./-0**++(**.2,/-++))(+,,,++)-+,*)*+(+*./+0-*+-,+*,(..-0/,./-/-.+*,,+0../-.//..-,..//012453-0./3/.3277;;8944510(,01/./,..2/11.110.2113/..32565868887888;<;8>=<@?@DCEICDFBBBBDEGEEGDBGGGHHGKLIJDFFJIKMNKLNHDIGFFEGEDC@A?@=8::;=434543360002423/2,.,-//025433000//1/1..1/,,-.,,+,,+,.,-/,-,*,,)'('(,(''''**(&*)()&(%&&'($('&%&%&'''')'),+,..01489;<999755132206/-/4225682788:=;<><==:;;@;