From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4105042752098233804==" MIME-Version: 1.0 From: Sreeni (Sreenivasa) Busam (Stellus) Subject: Re: [SPDK] Regarding collection of iostat information for application with SPDK driver. Date: Tue, 07 Nov 2017 01:40:38 +0000 Message-ID: In-Reply-To: F009CE4E1CB4E047B169243B6A318927314BDC95@SHSMSX101.ccr.corp.intel.com List-ID: To: spdk@lists.01.org --===============4105042752098233804== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Thanks Gang. I will take a look at it. Currently I am going to implement a shared memory interface using the appli= cation where all the statistics would be written, and another program would= read from the shared memory to display the IOPS and latency data like the = iostat tool for Linux does today. I need an RPC interface from the SPDK Storage application to be exposed whi= ch can use the patch you have given. It will be helpful. If any of you see problems in the first approach, please do let me know. From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Cao, Gang Sent: Monday, November 6, 2017 5:23 PM To: Storage Performance Development Kit Subject: Re: [SPDK] Regarding collection of iostat information for applicat= ion with SPDK driver. Hi Sreeni, We have some similar work on going and you may refer to patch https://revie= w.gerrithub.io/#/c/375075/ to take a quick look. This is based on bdev and = through existing RPC method on our applications. Once having more ideas, it may help your work on the tool. Thanks, Gang From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Sreeni (Sreeni= vasa) Busam (Stellus) Sent: Tuesday, November 7, 2017 4:56 AM To: spdk(a)lists.01.org Subject: [SPDK] Regarding collection of iostat information for application = with SPDK driver. Hello, I am working on a tool to collect IO statistics like 1. Read IOPS 2. Write IOPS and other metrics on a per process basis for SSD device and given namespace= . The assumption is all the Read and Write I/O statistics and latency shoul= d be collected for a given process which may do I/O on one or more NVMe SSD= devices based on a configuration file. I am going through the lib/bdev code and trying to see where I can add the = code to collect the statistics. I have spent only a few days looking into t= he SPDK code and new to the code. Is this the right function, spdk_bdev_io_complete() for me to start looking= into? Please give any suggestions you have or what are the functions I should loo= k into? Where should I investigate more to collect the I/O statistics? I appreciate your ideas and any help in this regard. Thanks a lot, Sreeni --===============4105042752098233804== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNv bnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPgo8c3R5bGU+ PCEtLQovKiBGb250IERlZmluaXRpb25zICovCkBmb250LWZhY2UKCXtmb250LWZhbWlseToiQ2Ft YnJpYSBNYXRoIjsKCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYgMyAyIDQ7fQpAZm9udC1mYWNlCgl7 Zm9udC1mYW1pbHk6Ik1hbGd1biBHb3RoaWMiOwoJcGFub3NlLTE6MiAxMSA1IDMgMiAwIDAgMiAw IDQ7fQpAZm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsKCXBhbm9zZS0xOjIgMTUgNSAy IDIgMiA0IDMgMiA0O30KQGZvbnQtZmFjZQoJe2ZvbnQtZmFtaWx5OiJcQE1hbGd1biBHb3RoaWMi OwoJcGFub3NlLTE6MiAxMSA1IDMgMiAwIDAgMiAwIDQ7fQovKiBTdHlsZSBEZWZpbml0aW9ucyAq LwpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCgl7bWFyZ2luOjBpbjsK CW1hcmdpbi1ib3R0b206LjAwMDFwdDsKCWZvbnQtc2l6ZToxMS4wcHQ7Cglmb250LWZhbWlseToi Q2FsaWJyaSIsc2Fucy1zZXJpZjt9CmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsKCXttc28tc3R5 bGUtcHJpb3JpdHk6OTk7Cgljb2xvcjojMDU2M0MxOwoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGlu ZTt9CmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZAoJe21zby1zdHlsZS1wcmlv cml0eTo5OTsKCWNvbG9yOiM5NTRGNzI7Cgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KcC5N c29MaXN0UGFyYWdyYXBoLCBsaS5Nc29MaXN0UGFyYWdyYXBoLCBkaXYuTXNvTGlzdFBhcmFncmFw aAoJe21zby1zdHlsZS1wcmlvcml0eTozNDsKCW1hcmdpbi10b3A6MGluOwoJbWFyZ2luLXJpZ2h0 OjBpbjsKCW1hcmdpbi1ib3R0b206MGluOwoJbWFyZ2luLWxlZnQ6LjVpbjsKCW1hcmdpbi1ib3R0 b206LjAwMDFwdDsKCWZvbnQtc2l6ZToxMS4wcHQ7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fu cy1zZXJpZjt9CnNwYW4uRW1haWxTdHlsZTE4Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7Cglm b250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsKCWNvbG9yOndpbmRvd3RleHQ7fQpzcGFu LkVtYWlsU3R5bGUxOQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOwoJZm9udC1mYW1pbHk6IkNh bGlicmkiLHNhbnMtc2VyaWY7Cgljb2xvcjojMUY0OTdEO30Kc3Bhbi5FbWFpbFN0eWxlMjAKCXtt c28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBseTsKCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5z LXNlcmlmOwoJY29sb3I6IzFGNDk3RDt9Ci5Nc29DaHBEZWZhdWx0Cgl7bXNvLXN0eWxlLXR5cGU6 ZXhwb3J0LW9ubHk7Cglmb250LXNpemU6MTAuMHB0O30KQHBhZ2UgV29yZFNlY3Rpb24xCgl7c2l6 ZTo4LjVpbiAxMS4waW47CgltYXJnaW46MS4waW4gMS4waW4gMS4waW4gMS4waW47fQpkaXYuV29y ZFNlY3Rpb24xCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQovKiBMaXN0IERlZmluaXRpb25zICovCkBs aXN0IGwwCgl7bXNvLWxpc3QtaWQ6MTE2Mjg5MTIxODsKCW1zby1saXN0LXR5cGU6aHlicmlkOwoJ bXNvLWxpc3QtdGVtcGxhdGUtaWRzOi03Mjg0NDI3NzIgNjc2OTg3MDMgNjc2OTg3MTMgNjc2OTg3 MTUgNjc2OTg3MDMgNjc2OTg3MTMgNjc2OTg3MTUgNjc2OTg3MDMgNjc2OTg3MTMgNjc2OTg3MTU7 fQpAbGlzdCBsMDpsZXZlbDEKCXttc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsKCW1zby1sZXZlbC1u dW1iZXItcG9zaXRpb246bGVmdDsKCXRleHQtaW5kZW50Oi0uMjVpbjt9CkBsaXN0IGwwOmxldmVs MgoJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmFscGhhLWxvd2VyOwoJbXNvLWxldmVsLXRhYi1z dG9wOm5vbmU7Cgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7Cgl0ZXh0LWluZGVudDot LjI1aW47fQpAbGlzdCBsMDpsZXZlbDMKCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpyb21hbi1s b3dlcjsKCW1zby1sZXZlbC10YWItc3RvcDpub25lOwoJbXNvLWxldmVsLW51bWJlci1wb3NpdGlv bjpyaWdodDsKCXRleHQtaW5kZW50Oi05LjBwdDt9CkBsaXN0IGwwOmxldmVsNAoJe21zby1sZXZl bC10YWItc3RvcDpub25lOwoJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0OwoJdGV4dC1p bmRlbnQ6LS4yNWluO30KQGxpc3QgbDA6bGV2ZWw1Cgl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6 YWxwaGEtbG93ZXI7Cgltc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsKCW1zby1sZXZlbC1udW1iZXIt cG9zaXRpb246bGVmdDsKCXRleHQtaW5kZW50Oi0uMjVpbjt9CkBsaXN0IGwwOmxldmVsNgoJe21z by1sZXZlbC1udW1iZXItZm9ybWF0OnJvbWFuLWxvd2VyOwoJbXNvLWxldmVsLXRhYi1zdG9wOm5v bmU7Cgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOnJpZ2h0OwoJdGV4dC1pbmRlbnQ6LTkuMHB0 O30KQGxpc3QgbDA6bGV2ZWw3Cgl7bXNvLWxldmVsLXRhYi1zdG9wOm5vbmU7Cgltc28tbGV2ZWwt bnVtYmVyLXBvc2l0aW9uOmxlZnQ7Cgl0ZXh0LWluZGVudDotLjI1aW47fQpAbGlzdCBsMDpsZXZl bDgKCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDphbHBoYS1sb3dlcjsKCW1zby1sZXZlbC10YWIt c3RvcDpub25lOwoJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0OwoJdGV4dC1pbmRlbnQ6 LS4yNWluO30KQGxpc3QgbDA6bGV2ZWw5Cgl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6cm9tYW4t bG93ZXI7Cgltc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsKCW1zby1sZXZlbC1udW1iZXItcG9zaXRp b246cmlnaHQ7Cgl0ZXh0LWluZGVudDotOS4wcHQ7fQpvbAoJe21hcmdpbi1ib3R0b206MGluO30K dWwKCXttYXJnaW4tYm90dG9tOjBpbjt9Ci0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4 bWw+CjxvOnNoYXBlZGVmYXVsdHMgdjpleHQ9ImVkaXQiIHNwaWRtYXg9IjEwMjYiIC8+CjwveG1s PjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgo8bzpzaGFwZWxheW91dCB2OmV4 dD0iZWRpdCI+CjxvOmlkbWFwIHY6ZXh0PSJlZGl0IiBkYXRhPSIxIiAvPgo8L286c2hhcGVsYXlv dXQ+PC94bWw+PCFbZW5kaWZdLS0+CjwvaGVhZD4KPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9IiMw NTYzQzEiIHZsaW5rPSIjOTU0RjcyIj4KPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPlRoYW5rcyBHYW5nLiBJ IHdpbGwgdGFrZSBhIGxvb2sgYXQgaXQuPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Q3VycmVudGx5IEkgYW0gZ29p bmcgdG8gaW1wbGVtZW50IGEgc2hhcmVkIG1lbW9yeSBpbnRlcmZhY2UgdXNpbmcgdGhlIGFwcGxp Y2F0aW9uIHdoZXJlIGFsbCB0aGUgc3RhdGlzdGljcyB3b3VsZCBiZSB3cml0dGVuLCBhbmQgYW5v dGhlciBwcm9ncmFtIHdvdWxkIHJlYWQgZnJvbSB0aGUgc2hhcmVkIG1lbW9yeSB0byBkaXNwbGF5 IHRoZSBJT1BTIGFuZCBsYXRlbmN5CiBkYXRhIGxpa2UgdGhlIGlvc3RhdCB0b29sIGZvciBMaW51 eCBkb2VzIHRvZGF5LjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPkkgbmVlZCBhbiBSUEMgaW50ZXJmYWNlIGZyb20g dGhlIFNQREsgU3RvcmFnZSBhcHBsaWNhdGlvbiB0byBiZSBleHBvc2VkIHdoaWNoIGNhbiB1c2Ug dGhlIHBhdGNoIHlvdSBoYXZlIGdpdmVuLiBJdCB3aWxsIGJlIGhlbHBmdWwuPG86cD48L286cD48 L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3 RCI+SWYgYW55IG9mIHlvdSBzZWUgcHJvYmxlbXMgaW4gdGhlIGZpcnN0IGFwcHJvYWNoLCBwbGVh c2UgZG8gbGV0IG1lIGtub3cuCjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PGEgbmFtZT0iX01haWxFbmRDb21wb3NlIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3 RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9hPjwvcD4KPGRpdj4KPGRpdiBzdHlsZT0iYm9y ZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEuMHB0O3BhZGRpbmc6My4wcHQgMGlu IDBpbiAwaW4iPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj5Gcm9tOjwvYj4gU1BESyBbbWFpbHRv OnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmddIDxiPk9uIEJlaGFsZiBPZgo8L2I+Q2FvLCBHYW5n PGJyPgo8Yj5TZW50OjwvYj4gTW9uZGF5LCBOb3ZlbWJlciA2LCAyMDE3IDU6MjMgUE08YnI+Cjxi PlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0O3NwZGtAbGlz dHMuMDEub3JnJmd0Ozxicj4KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10gUmVnYXJkaW5nIGNv bGxlY3Rpb24gb2YgaW9zdGF0IGluZm9ybWF0aW9uIGZvciBhcHBsaWNhdGlvbiB3aXRoIFNQREsg ZHJpdmVyLjxvOnA+PC9vOnA+PC9wPgo8L2Rpdj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjEwLjVwdDtjb2xvcjojMUY0OTdEO21zby1mYXJlYXN0LWxhbmd1YWdlOlpILUNO Ij5IaSBTcmVlbmksPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjVwdDtjb2xvcjojMUY0OTdEO21zby1mYXJlYXN0LWxh bmd1YWdlOlpILUNOIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2NvbG9yOiMxRjQ5N0Q7bXNvLWZh cmVhc3QtbGFuZ3VhZ2U6WkgtQ04iPldlIGhhdmUgc29tZSBzaW1pbGFyIHdvcmsgb24gZ29pbmcg YW5kIHlvdSBtYXkgcmVmZXIgdG8gcGF0Y2gKPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuZ2Vycml0 aHViLmlvLyMvYy8zNzUwNzUvIj5odHRwczovL3Jldmlldy5nZXJyaXRodWIuaW8vIy9jLzM3NTA3 NS88L2E+IHRvIHRha2UgYSBxdWljayBsb29rLiBUaGlzIGlzIGJhc2VkIG9uIGJkZXYgYW5kIHRo cm91Z2ggZXhpc3RpbmcgUlBDIG1ldGhvZCBvbiBvdXIgYXBwbGljYXRpb25zLjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox MC41cHQ7Y29sb3I6IzFGNDk3RDttc28tZmFyZWFzdC1sYW5ndWFnZTpaSC1DTiI+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjEwLjVwdDtjb2xvcjojMUY0OTdEO21zby1mYXJlYXN0LWxhbmd1YWdlOlpILUNOIj5P bmNlIGhhdmluZyBtb3JlIGlkZWFzLCBpdCBtYXkgaGVscCB5b3VyIHdvcmsgb24gdGhlIHRvb2wu PG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjEwLjVwdDtjb2xvcjojMUY0OTdEO21zby1mYXJlYXN0LWxhbmd1YWdlOlpILUNO Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2NvbG9yOiMxRjQ5N0Q7bXNvLWZhcmVhc3QtbGFuZ3Vh Z2U6WkgtQ04iPlRoYW5rcyw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2NvbG9yOiMxRjQ5N0Q7bXNvLWZhcmVh c3QtbGFuZ3VhZ2U6WkgtQ04iPkdhbmc8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2NvbG9yOiMxRjQ5N0Q7bXNv LWZhcmVhc3QtbGFuZ3VhZ2U6WkgtQ04iPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KPGRp dj4KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEuMHB0 O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48YSBuYW1l PSJfX19fX3JlcGx5c2VwYXJhdG9yIj48L2E+PGI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxh bmd1YWdlOlpILUNOIj5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxh bmd1YWdlOlpILUNOIj4gU1BESyBbPGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4w MS5vcmciPm1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnPC9hPl0KPGI+T24gQmVoYWxm IE9mIDwvYj5TcmVlbmkgKFNyZWVuaXZhc2EpIEJ1c2FtIChTdGVsbHVzKTxicj4KPGI+U2VudDo8 L2I+IFR1ZXNkYXksIE5vdmVtYmVyIDcsIDIwMTcgNDo1NiBBTTxicj4KPGI+VG86PC9iPiA8YSBo cmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5vcmciPnNwZGtAbGlzdHMuMDEub3JnPC9hPjxicj4K PGI+U3ViamVjdDo8L2I+IFtTUERLXSBSZWdhcmRpbmcgY29sbGVjdGlvbiBvZiBpb3N0YXQgaW5m b3JtYXRpb24gZm9yIGFwcGxpY2F0aW9uIHdpdGggU1BESyBkcml2ZXIuPG86cD48L286cD48L3Nw YW4+PC9wPgo8L2Rpdj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJt c28tZmFyZWFzdC1sYW5ndWFnZTpaSC1DTiI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6Wkgt Q04iPkhlbGxvLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOlpILUNOIj48bzpwPiZuYnNwOzwvbzpwPjwv c3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1s YW5ndWFnZTpaSC1DTiI+SSBhbSB3b3JraW5nIG9uIGEgdG9vbCB0byBjb2xsZWN0IElPIHN0YXRp c3RpY3MgbGlrZTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb0xpc3RQYXJhZ3Jh cGgiIHN0eWxlPSJ0ZXh0LWluZGVudDotLjI1aW47bXNvLWxpc3Q6bDAgbGV2ZWwxIGxmbzIiPjwh W2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFnZTpaSC1D TiI+PHNwYW4gc3R5bGU9Im1zby1saXN0Oklnbm9yZSI+MS48c3BhbiBzdHlsZT0iZm9udDo3LjBw dCAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOwo8L3NwYW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+PHNwYW4gc3R5bGU9Im1zby1mYXJl YXN0LWxhbmd1YWdlOlpILUNOIj5SZWFkIElPUFM8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNs YXNzPSJNc29MaXN0UGFyYWdyYXBoIiBzdHlsZT0idGV4dC1pbmRlbnQ6LS4yNWluO21zby1saXN0 OmwwIGxldmVsMSBsZm8yIj48IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBzdHlsZT0ibXNvLWZh cmVhc3QtbGFuZ3VhZ2U6WkgtQ04iPjxzcGFuIHN0eWxlPSJtc28tbGlzdDpJZ25vcmUiPjIuPHNw YW4gc3R5bGU9ImZvbnQ6Ny4wcHQgJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij4mbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKPC9zcGFuPjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPjxz cGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFnZTpaSC1DTiI+V3JpdGUgSU9QUzxvOnA+PC9v OnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1mYXJl YXN0LWxhbmd1YWdlOlpILUNOIj5hbmQgb3RoZXIgbWV0cmljcyBvbiBhIHBlciBwcm9jZXNzIGJh c2lzIGZvciBTU0QgZGV2aWNlIGFuZCBnaXZlbiBuYW1lc3BhY2UuIFRoZSBhc3N1bXB0aW9uIGlz IGFsbCB0aGUgUmVhZCBhbmQgV3JpdGUgSS9PIHN0YXRpc3RpY3MgYW5kIGxhdGVuY3kgc2hvdWxk IGJlIGNvbGxlY3RlZCBmb3IgYSBnaXZlbiBwcm9jZXNzIHdoaWNoIG1heQogZG8gSS9PIG9uIG9u ZSBvciBtb3JlIE5WTWUgU1NEIGRldmljZXMgYmFzZWQgb24gYSBjb25maWd1cmF0aW9uIGZpbGUu PG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6WkgtQ04iPkkgYW0gZ29pbmcgdGhyb3VnaCB0aGUgbGliL2Jk ZXYgY29kZSBhbmQgdHJ5aW5nIHRvIHNlZSB3aGVyZSBJIGNhbiBhZGQgdGhlIGNvZGUgdG8gY29s bGVjdCB0aGUgc3RhdGlzdGljcy4gSSBoYXZlIHNwZW50IG9ubHkgYSBmZXcgZGF5cyBsb29raW5n IGludG8gdGhlIFNQREsgY29kZSBhbmQgbmV3IHRvIHRoZSBjb2RlLjxvOnA+PC9vOnA+PC9zcGFu PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1 YWdlOlpILUNOIj5JcyB0aGlzIHRoZSByaWdodCBmdW5jdGlvbiwgc3Bka19iZGV2X2lvX2NvbXBs ZXRlKCkgZm9yIG1lIHRvIHN0YXJ0IGxvb2tpbmcgaW50bz8KPG86cD48L286cD48L3NwYW4+PC9w Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6 WkgtQ04iPlBsZWFzZSBnaXZlIGFueSBzdWdnZXN0aW9ucyB5b3UgaGF2ZSBvciB3aGF0IGFyZSB0 aGUgZnVuY3Rpb25zIEkgc2hvdWxkIGxvb2sgaW50bz8gV2hlcmUgc2hvdWxkIEkgaW52ZXN0aWdh dGUgbW9yZSB0byBjb2xsZWN0IHRoZSBJL08gc3RhdGlzdGljcz88bzpwPjwvbzpwPjwvc3Bhbj48 L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFn ZTpaSC1DTiI+SSBhcHByZWNpYXRlIHlvdXIgaWRlYXMgYW5kIGFueSBoZWxwIGluIHRoaXMgcmVn YXJkLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5 bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOlpILUNOIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48 L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFn ZTpaSC1DTiI+VGhhbmtzIGEgbG90LDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOlpILUNOIj5TcmVlbmk8 bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K --===============4105042752098233804==--