From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============2972230251078865982==" MIME-Version: 1.0 From: Shahar Salzman Subject: Re: [SPDK] SPDK + user space appliance Date: Sun, 06 May 2018 10:32:01 +0000 Message-ID: In-Reply-To: A5F28D4A728A7E41839CDC5C3B5A01E8B5C95F08@FMSMSX103.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============2972230251078865982== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi, I pushed the code for review, thanks Daniel for the help. In a nutshell: - bdev_user - an API for a user appliance to use spdk as an iSCSI/NVMeF tar= get - bdev_user_example - reference application - The API relies on rings in order to submit/complete IOs - User appliance registers callbacks for submit_io (should we have read/wri= te/other instead?) - User appliance registers its devices so that they may be added to an exis= ting namespace (I am using RPC to do the management) Thanks, Shahar ________________________________ From: SPDK on behalf of Verkamp, Daniel Sent: Thursday, May 3, 2018 8:50 PM To: Storage Performance Development Kit Subject: Re: [SPDK] SPDK + user space appliance Hi Shahar, The target branch for the push should be =E2=80=98refs/for/master=E2=80=99,= not =E2=80=98master=E2=80=99 =E2=80=93 if you configured a remote as speci= fied in http://www.spdk.io/development/ it should look like: [remote "review"] url =3D https://review.gerrithub.io/spdk/spdk push =3D HEAD:refs/for/master From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzman Sent: Thursday, May 3, 2018 1:00 AM To: Storage Performance Development Kit Subject: Re: [SPDK] SPDK + user space appliance Hi Ben, I have the code ready for review (spdk/master on dpdk/18.02), but I do not = have push rights for gerrithub: shahar.salzman(a)shahars-vm:~/Kaminario/git/spdk$ git push spdk-review HEAD:master Password for 'https://ShaharSalzman-K(a)review.gerrithub.io': Counting objects: 109, done. Compressing objects: 100% (22/22), done. Writing objects: 100% (22/22), 8.70 KiB | 0 bytes/s, done. Total 22 (delta 14), reused 0 (delta 0) remote: Resolving deltas: 100% (14/14) remote: Branch refs/heads/master: remote: You are not allowed to perform this operation. remote: To push into this reference you need 'Push' rights. remote: User: ShaharSalzman-K remote: Please read the documentation and contact an administrator remote: if you feel the configuration is incorrect remote: Processing changes: refs: 1, done To https://ShaharSalzman-K(a)review.gerrithub.io/a/spdk/spdk ! [remote rejected] HEAD -> master (prohibited by Gerrit: ref update acces= s denied) error: failed to push some refs to 'https://ShaharSalzman-K(a)review.gerrit= hub.io/a/spdk/spdk' Am I doing something incorrect, or is this just a permission issue? Thanks, Shahar ________________________________ From: SPDK = > on behalf of Shahar Salzman > Sent: Wednesday, April 25, 2018 9:02:38 AM To: Storage Performance Development Kit Subject: Re: [SPDK] SPDK + user space appliance Hi Ben, The code is currently working on v17.07, we are planning on bumping the ver= sion to one of the latest stable versions (18.01?) + master. It will take me (hopefully) a few days to update the code and have our inte= rnal CI start running on this version, not sure it would be useful, but I c= an get our working 17.07 code (+ reference application) for review much fas= ter. What is the best course of action? Shahar ________________________________ From: SPDK = > on behalf of Walker, Benjamin > Sent: Tuesday, April 24, 2018 7:19:12 PM To: Storage Performance Development Kit Subject: Re: [SPDK] SPDK + user space appliance Hi Shahar, Would you be willing to submit your bdev module as a patch on GerritHub? Th= at way everyone can take a look and provide feedback. If you don=E2=80=99t = want it to run the tests, you can put [RFC] and the beginning of the commit= message. Thanks, Ben From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzman Sent: Monday, April 23, 2018 8:45 AM To: spdk(a)lists.01.org Subject: Re: [SPDK] SPDK + user space appliance Hi Ben, Bumping this thread since I've been having some new thoughts on the issue n= ow that we are starting integration with newer spdk versions. Unfortunately the merge isn't as smooth as I'd like it to be since the bdev= module is pretty tightly integrated into spdk, perhaps we made some false = assumptions writing the module, but it seems some of the newer spdk feature= s are complicating the integration. My question is, if this passthrough module is useful, wouldn't it be better= to maintain it as part of spdk so that we can catch issues as soon as they= show up? We would be happy to help with maintaining this module, the module with is = currently part of our CI with our "frozen" spdk version, but once integrate= d into the newer version we choose, I'll add it to the CI our CI as well. Shahar ________________________________ From: SPDK = > on behalf of Walker, Benjamin > Sent: Friday, February 2, 2018 11:43:58 PM To: spdk(a)lists.01.org Subject: Re: [SPDK] SPDK + user space appliance On Thu, 2018-02-01 at 08:29 +0000, Shahar Salzman wrote: > Hi Ben, > > Would you also like to take a look at the bdev_user module? > It still needs some patching (as some of the stuff is still hard coded), = but I > think we can get most of it cleaned up in a couple of days. > > In any case, is it the intention that the user write his own bdev module,= or > would this user appliance glue be a useful generic module? For existing storage stacks that serve block I/O, like the internals of a S= AN, the idea is that you write your own bdev module to forward I/O coming out o= f the SPDK bdev layer. Then you can use the SPDK iSCSI/NVMe-oF/vhost targets most= ly as-is. In some cases, the actual iSCSI/NVMe-oF/vhost target applications won't integrate nicely directly into an existing storage application because they spawn their own threads and allocate their own memory. To support that, the libraries may be consumed directly instead of the applications (lib/iscsi, lib/scsi, lib/nvmf, etc.). The libraries don't spawn any of their own threa= ds, but instead rely on SPDK's abstractions in include/spdk/io_channel.h. See http://www.spdk.io/doc/concurrency.html We don't currently have a way to write a custom bdev module that resides ou= tside of the SPDK source tree, but it's very possible to add support for that. But beyond that inconvenience (just drop your module in lib/bdev for now), writ= ing a bdev module is the recommended way of interacting with the bottom end of the SPDK bdev layer. I think that's what you really want to be doing in your co= de, from what I can tell. I hope that helps! _______________________________________________ SPDK mailing list SPDK(a)lists.01.org https://lists.01.org/mailman/listinfo/spdk --===============2972230251078865982== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD1XaW5kb3dzLTEyNTIiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHN0 eWxlPSJkaXNwbGF5Om5vbmU7Ij48IS0tIFAge21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7 fSAtLT48L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IGRpcj0ibHRyIj4KPGRpdiBpZD0iZGl2dGFnZGVm YXVsdHdyYXBwZXIiIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiByZ2IoMCwgMCwgMCk7 IGZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYsIEVtb2ppRm9udCwg JnF1b3Q7QXBwbGUgQ29sb3IgRW1vamkmcXVvdDssICZxdW90O1NlZ29lIFVJIEVtb2ppJnF1b3Q7 LCBOb3RvQ29sb3JFbW9qaSwgJnF1b3Q7U2Vnb2UgVUkgU3ltYm9sJnF1b3Q7LCAmcXVvdDtBbmRy b2lkIEVtb2ppJnF1b3Q7LCBFbW9qaVN5bWJvbHM7IiBkaXI9Imx0ciI+CjxwIHN0eWxlPSJtYXJn aW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj5IaSw8L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7 bWFyZ2luLWJvdHRvbTowIj48YnI+CjwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4t Ym90dG9tOjAiPkkgcHVzaGVkIHRoZSBjb2RlIGZvciByZXZpZXcsIHRoYW5rcyBEYW5pZWwgZm9y IHRoZSBoZWxwLjwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPjxi cj4KPC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+SW4gYSBudXRz aGVsbDo8L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj4tIGJkZXZf dXNlciAtIGFuIEFQSSBmb3IgYSB1c2VyIGFwcGxpYW5jZSB0byB1c2Ugc3BkayBhcyBhbiBpU0NT SS9OVk1lRiB0YXJnZXQ8L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTow Ij4tIGJkZXZfdXNlcl9leGFtcGxlIC0gcmVmZXJlbmNlIGFwcGxpY2F0aW9uPC9wPgo8cCBzdHls ZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+LSBUaGUgQVBJIHJlbGllcyBvbiByaW5n cyBpbiBvcmRlciB0byBzdWJtaXQvY29tcGxldGUgSU9zPC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRv cDowO21hcmdpbi1ib3R0b206MCI+LSBVc2VyIGFwcGxpYW5jZSByZWdpc3RlcnMgY2FsbGJhY2tz IGZvciBzdWJtaXRfaW8gKHNob3VsZCB3ZSBoYXZlIHJlYWQvd3JpdGUvb3RoZXIgaW5zdGVhZD8p PC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+LSBVc2VyIGFwcGxp YW5jZSByZWdpc3RlcnMgaXRzIGRldmljZXMgc28gdGhhdCB0aGV5IG1heSBiZSBhZGRlZCB0byBh biBleGlzdGluZyBuYW1lc3BhY2UgKEkgYW0gdXNpbmcgUlBDIHRvIGRvIHRoZSBtYW5hZ2VtZW50 KTwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPjxicj4KPC9wPgo8 cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+VGhhbmtzLDwvcD4KPHAgc3R5 bGU9Im1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjAiPlNoYWhhcjwvcD4KPGJyPgo8YnI+Cjxk aXYgc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7Ij4KPGhyIHN0eWxlPSJkaXNwbGF5OmlubGlu ZS1ibG9jazt3aWR0aDo5OCUiIHRhYmluZGV4PSItMSI+CjxkaXYgaWQ9ImRpdlJwbHlGd2RNc2ci IGRpcj0ibHRyIj48Zm9udCBmYWNlPSJDYWxpYnJpLCBzYW5zLXNlcmlmIiBzdHlsZT0iZm9udC1z aXplOjExcHQiIGNvbG9yPSIjMDAwMDAwIj48Yj5Gcm9tOjwvYj4gU1BESyAmbHQ7c3Bkay1ib3Vu Y2VzQGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mIFZlcmthbXAsIERhbmllbCAmbHQ7ZGFu aWVsLnZlcmthbXBAaW50ZWwuY29tJmd0Ozxicj4KPGI+U2VudDo8L2I+IFRodXJzZGF5LCBNYXkg MywgMjAxOCA4OjUwIFBNPGJyPgo8Yj5Ubzo8L2I+IFN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxv cG1lbnQgS2l0PGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtTUERLXSBTUERLICYjNDM7IHVzZXIg c3BhY2UgYXBwbGlhbmNlPC9mb250Pgo8ZGl2PiZuYnNwOzwvZGl2Pgo8L2Rpdj4KPG1ldGEgY29u dGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVdpbmRvd3MtMTI1MiI+CjxtZXRhIG5hbWU9InhfR2Vu ZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQgbWVkaXVtKSI+Cjxk aXYgbGFuZz0iRU4tVVMiIGxpbms9ImJsdWUiIHZsaW5rPSJwdXJwbGUiPgo8ZGl2IGNsYXNzPSJ4 X1dvcmRTZWN0aW9uMSI+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt c2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsg Y29sb3I6IzFGNDk3RCI+SGkgU2hhaGFyLDwvc3Bhbj48L3A+CjxwIGNsYXNzPSJ4X01zb05vcm1h bCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGli cmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4KPHAg Y2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1m YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjojMUY0OTdEIj5UaGUg dGFyZ2V0IGJyYW5jaCBmb3IgdGhlIHB1c2ggc2hvdWxkIGJlIJFyZWZzL2Zvci9tYXN0ZXKSLCBu b3QgkW1hc3RlcpIgliBpZiB5b3UgY29uZmlndXJlZCBhIHJlbW90ZSBhcyBzcGVjaWZpZWQgaW4K PGEgaHJlZj0iaHR0cDovL3d3dy5zcGRrLmlvL2RldmVsb3BtZW50LyIgaWQ9IkxQbG5rMTY1MzAy IiBjbGFzcz0iT1dBQXV0b0xpbmsiIHByZXZpZXdyZW1vdmVkPSJ0cnVlIj4KaHR0cDovL3d3dy5z cGRrLmlvL2RldmVsb3BtZW50LzwvYT4gaXQgc2hvdWxkIGxvb2sgbGlrZTo8L3NwYW4+PC9wPgo8 cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPiZu YnNwOzwvc3Bhbj48L3A+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt c2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsg Y29sb3I6IzFGNDk3RCI+W3JlbW90ZSAmcXVvdDtyZXZpZXcmcXVvdDtdPC9zcGFuPjwvcD4KPHAg Y2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1m YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjojMUY0OTdEIj4mbmJz cDsgdXJsID0gaHR0cHM6Ly9yZXZpZXcuZ2Vycml0aHViLmlvL3NwZGsvc3Bkazwvc3Bhbj48L3A+ CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3RCI+ Jm5ic3A7IHB1c2ggPSBIRUFEOnJlZnMvZm9yL21hc3Rlcgo8L3NwYW4+PC9wPgo8cCBjbGFzcz0i eF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTom cXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bh bj48L3A+CjxkaXYgc3R5bGU9ImJvcmRlcjpub25lOyBib3JkZXItbGVmdDpzb2xpZCBibHVlIDEu NXB0OyBwYWRkaW5nOjBpbiAwaW4gMGluIDQuMHB0Ij4KPGRpdj4KPGRpdiBzdHlsZT0iYm9yZGVy Om5vbmU7IGJvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDsgcGFkZGluZzozLjBwdCAwaW4g MGluIDBpbiI+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PGEgbmFtZT0ieF9fX19fX3JlcGx5c2Vw YXJhdG9yIiBpZD0iTFBsbmsyODIyNDgiIGNsYXNzPSJPV0FBdXRvTGluayIgcHJldmlld3JlbW92 ZWQ9InRydWUiPjwvYT48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1p bHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmIj5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss c2Fucy1zZXJpZiI+CiBTUERLIFttYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gPGI+ T24gQmVoYWxmIE9mIDwvYj5TaGFoYXIgU2Fsem1hbjxicj4KPGI+U2VudDo8L2I+IFRodXJzZGF5 LCBNYXkgMywgMjAxOCAxOjAwIEFNPGJyPgo8Yj5Ubzo8L2I+IFN0b3JhZ2UgUGVyZm9ybWFuY2Ug RGV2ZWxvcG1lbnQgS2l0ICZsdDtzcGRrQGxpc3RzLjAxLm9yZyZndDs8YnI+CjxiPlN1YmplY3Q6 PC9iPiBSZTogW1NQREtdIFNQREsgJiM0MzsgdXNlciBzcGFjZSBhcHBsaWFuY2U8L3NwYW4+PC9w Pgo8L2Rpdj4KPC9kaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+Jm5ic3A7PC9wPgo8ZGl2IGlk PSJ4X2RpdnRhZ2RlZmF1bHR3cmFwcGVyIj4KPGRpdiBpZD0ieF9kaXZ0YWdkZWZhdWx0d3JhcHBl ciI+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMt c2VyaWY7IGNvbG9yOmJsYWNrIj5IaSBCZW4sPC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZu YnNwOzwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5JIGhhdmUgdGhlIGNvZGUgcmVhZHkgZm9y IHJldmlldyAoc3Bkay9tYXN0ZXIgb24gZHBkay8xOC4wMiksIGJ1dCBJIGRvIG5vdCBoYXZlIHB1 c2ggcmlnaHRzIGZvciBnZXJyaXRodWI6PC9zcGFuPjwvcD4KPGRpdj4KPHAgY2xhc3M9InhfTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmOyBjb2xvcjpibGFjayI+PGEgaHJlZj0ibWFpbHRvOnNoYWhhci5zYWx6bWFuQHNoYWhh cnMtdm06fi9LYW1pbmFyaW8vZ2l0L3NwZGskIiBpZD0iTFBsbms5Mjg0MTYiIGNsYXNzPSJPV0FB dXRvTGluayIgcHJldmlld3JlbW92ZWQ9InRydWUiPnNoYWhhci5zYWx6bWFuQHNoYWhhcnMtdm06 fi9LYW1pbmFyaW8vZ2l0L3NwZGskPC9hPgogZ2l0IHB1c2ggc3Bkay1yZXZpZXcgSEVBRDptYXN0 ZXI8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpi bGFjayI+UGFzc3dvcmQgZm9yICdodHRwczovL1NoYWhhclNhbHptYW4tS0ByZXZpZXcuZ2Vycml0 aHViLmlvJzombmJzcDs8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9InhfTXNvTm9y bWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmOyBjb2xvcjpibGFjayI+Q291bnRpbmcgb2JqZWN0czogMTA5LCBkb25lLjwvc3Bhbj48L3A+ CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5Db21wcmVz c2luZyBvYmplY3RzOiAxMDAlICgyMi8yMiksIGRvbmUuPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+ CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0Nh bGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPldyaXRpbmcgb2JqZWN0czogMTAw JSAoMjIvMjIpLCA4LjcwIEtpQiB8IDAgYnl0ZXMvcywgZG9uZS48L3NwYW4+PC9wPgo8L2Rpdj4K PGRpdj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+VG90YWwgMjIgKGRlbHRh IDE0KSwgcmV1c2VkIDAgKGRlbHRhIDApPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNz PSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPnJlbW90ZTogUmVzb2x2aW5nIGRlbHRhczogMTAw JSAoMTQvMTQpPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsg Y29sb3I6YmxhY2siPnJlbW90ZTogQnJhbmNoIHJlZnMvaGVhZHMvbWFzdGVyOjwvc3Bhbj48L3A+ CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5yZW1vdGU6 IFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi48L3NwYW4+PC9w Pgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1m YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+cmVtb3Rl OiBUbyBwdXNoIGludG8gdGhpcyByZWZlcmVuY2UgeW91IG5lZWQgJ1B1c2gnIHJpZ2h0cy48L3Nw YW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+ cmVtb3RlOiBVc2VyOiBTaGFoYXJTYWx6bWFuLUs8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAg Y2xhc3M9InhfTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+cmVtb3RlOiBQbGVhc2UgcmVhZCB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQgY29udGFjdCBhbiBhZG1pbmlzdHJhdG9yPC9zcGFuPjwvcD4KPC9k aXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPnJlbW90ZTogaWYg eW91IGZlZWwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW5jb3JyZWN0PC9zcGFuPjwvcD4KPC9kaXY+ CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPnJlbW90ZTogUHJvY2Vz c2luZyBjaGFuZ2VzOiByZWZzOiAxLCBkb25lJm5ic3A7ICZuYnNwOyZuYnNwOzwvc3Bhbj48L3A+ CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0ieF9Nc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5Ubwo8YSBo cmVmPSJodHRwczovL1NoYWhhclNhbHptYW4tS0ByZXZpZXcuZ2Vycml0aHViLmlvL2Evc3Bkay9z cGRrIiBpZD0iTFBsbms2MTg4OSIgY2xhc3M9Ik9XQUF1dG9MaW5rIiBwcmV2aWV3cmVtb3ZlZD0i dHJ1ZSI+Cmh0dHBzOi8vU2hhaGFyU2Fsem1hbi1LQHJldmlldy5nZXJyaXRodWIuaW8vYS9zcGRr L3NwZGs8L2E+PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsg Y29sb3I6YmxhY2siPiZuYnNwOyEgW3JlbW90ZSByZWplY3RlZF0gSEVBRCAtJmd0OyBtYXN0ZXIg KHByb2hpYml0ZWQgYnkgR2Vycml0OiByZWYgdXBkYXRlIGFjY2VzcyBkZW5pZWQpPC9zcGFuPjwv cD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPmVycm9y OiBmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJ2h0dHBzOi8vU2hhaGFyU2Fsem1hbi1LQHJl dmlldy5nZXJyaXRodWIuaW8vYS9zcGRrL3NwZGsnPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+Cjxw IGNsYXNzPSJ4X01zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGli cmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+CjwvZGl2 Pgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmOyBjb2xvcjpibGFjayI+QW0gSSBkb2luZyBzb21ldGhpbmcgaW5jb3JyZWN0LCBvciBpcyB0 aGlzIGp1c3QgYSBwZXJtaXNzaW9uIGlzc3VlPzwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4m bmJzcDs8L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+VGhhbmtzLDwvc3Bhbj48L3A+CjxwPjxz cGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNv bG9yOmJsYWNrIj5TaGFoYXI8L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ieF9Nc29Ob3Jt YWwiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PHNwYW4gc3R5bGU9 ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2si Pgo8aHIgc2l6ZT0iMyIgd2lkdGg9Ijk4JSIgYWxpZ249ImNlbnRlciI+Cjwvc3Bhbj48L2Rpdj4K PGRpdiBpZD0ieF9kaXZScGx5RndkTXNnIj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48Yj48c3Bh biBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWY7IGNvbG9yOmJsYWNrIj4gU1BESyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0Bs aXN0cy4wMS5vcmciIGlkPSJMUGxuazk3NjQxNCIgY2xhc3M9Ik9XQUF1dG9MaW5rIiBwcmV2aWV3 cmVtb3ZlZD0idHJ1ZSI+c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT4mZ3Q7CiBvbiBiZWhh bGYgb2YgU2hhaGFyIFNhbHptYW4gJmx0OzxhIGhyZWY9Im1haWx0bzpzaGFoYXIuc2Fsem1hbkBr YW1pbmFyaW8uY29tIiBpZD0iTFBsbms2NjA3NzEiIGNsYXNzPSJPV0FBdXRvTGluayIgcHJldmll d3JlbW92ZWQ9InRydWUiPnNoYWhhci5zYWx6bWFuQGthbWluYXJpby5jb208L2E+Jmd0Ozxicj4K PGI+U2VudDo8L2I+IFdlZG5lc2RheSwgQXByaWwgMjUsIDIwMTggOTowMjozOCBBTTxicj4KPGI+ VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdDxicj4KPGI+U3ViamVj dDo8L2I+IFJlOiBbU1BES10gU1BESyAmIzQzOyB1c2VyIHNwYWNlIGFwcGxpYW5jZTwvc3Bhbj48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBj b2xvcjpibGFjayI+Cjwvc3Bhbj48L3A+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29s b3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+CjwvZGl2Pgo8L2Rpdj4KPGRpdj4KPGRpdiBpZD0i eF94X2RpdnRhZ2RlZmF1bHR3cmFwcGVyIj4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPkhpIEJlbiw8L3NwYW4+ PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmOyBjb2xvcjpibGFjayI+Jm5ic3A7PC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPlRo ZSBjb2RlIGlzIGN1cnJlbnRseSB3b3JraW5nIG9uIHYxNy4wNywgd2UgYXJlIHBsYW5uaW5nIG9u IGJ1bXBpbmcgdGhlIHZlcnNpb24gdG8gb25lIG9mIHRoZSBsYXRlc3Qgc3RhYmxlIHZlcnNpb25z ICgxOC4wMT8pICYjNDM7IG1hc3Rlci48L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1m YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+SXQgd2ls bCB0YWtlIG1lIChob3BlZnVsbHkpJm5ic3A7YSBmZXcgZGF5cyB0byB1cGRhdGUgdGhlIGNvZGUg YW5kIGhhdmUgb3VyIGludGVybmFsIENJIHN0YXJ0IHJ1bm5pbmcgb24gdGhpcyB2ZXJzaW9uLCBu b3Qgc3VyZSBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dCBJIGNhbiBnZXQgb3VyIHdvcmtpbmcgMTcu MDcgY29kZSAoJiM0MzsgcmVmZXJlbmNlIGFwcGxpY2F0aW9uKQogZm9yIHJldmlldyBtdWNoIGZh c3Rlci48L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+V2hhdCBpcyB0aGUgYmVzdCBjb3Vyc2Ug b2YgYWN0aW9uPzwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8 cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm OyBjb2xvcjpibGFjayI+U2hhaGFyPC9zcGFuPjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InhfTXNv Tm9ybWFsIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0 eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJs YWNrIj4KPGhyIHNpemU9IjMiIHdpZHRoPSI5OCUiIGFsaWduPSJjZW50ZXIiPgo8L3NwYW4+PC9k aXY+CjxkaXYgaWQ9InhfeF9kaXZScGx5RndkTXNnIj4KPHAgY2xhc3M9InhfTXNvTm9ybWFsIj48 Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNh bnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4gU1BESyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGstYm91 bmNlc0BsaXN0cy4wMS5vcmciIGlkPSJMUGxuazEwNjM3NSIgY2xhc3M9Ik9XQUF1dG9MaW5rIiBw cmV2aWV3cmVtb3ZlZD0idHJ1ZSI+c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT4mZ3Q7CiBv biBiZWhhbGYgb2YgV2Fsa2VyLCBCZW5qYW1pbiAmbHQ7PGEgaHJlZj0ibWFpbHRvOmJlbmphbWlu LndhbGtlckBpbnRlbC5jb20iIGlkPSJMUGxuazU4NTc5MyIgY2xhc3M9Ik9XQUF1dG9MaW5rIiBw cmV2aWV3cmVtb3ZlZD0idHJ1ZSI+YmVuamFtaW4ud2Fsa2VyQGludGVsLmNvbTwvYT4mZ3Q7PGJy Pgo8Yj5TZW50OjwvYj4gVHVlc2RheSwgQXByaWwgMjQsIDIwMTggNzoxOToxMiBQTTxicj4KPGI+ VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdDxicj4KPGI+U3ViamVj dDo8L2I+IFJlOiBbU1BES10gU1BESyAmIzQzOyB1c2VyIHNwYWNlIGFwcGxpYW5jZTwvc3Bhbj48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBj b2xvcjpibGFjayI+Cjwvc3Bhbj48L3A+CjxkaXY+CjxwIGNsYXNzPSJ4X01zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29s b3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+CjwvZGl2Pgo8L2Rpdj4KPGRpdj4KPGRpdj4KPHAg Y2xhc3M9InhfeHhtc29ub3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPkhp IFNoYWhhciw8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrIj48L3NwYW4+PC9wPgo8cCBj bGFzcz0ieF94eG1zb25vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IzFGNDk3RCI+Jm5i c3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+PC9zcGFuPjwvcD4KPHAgY2xhc3M9 InhfeHhtc29ub3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPldvdWxkIHlv dSBiZSB3aWxsaW5nIHRvIHN1Ym1pdCB5b3VyIGJkZXYgbW9kdWxlIGFzIGEgcGF0Y2ggb24gR2Vy cml0SHViPyBUaGF0IHdheSBldmVyeW9uZSBjYW4gdGFrZSBhIGxvb2sgYW5kIHByb3ZpZGUgZmVl ZGJhY2suIElmIHlvdSBkb26SdCB3YW50IGl0IHRvCiBydW4gdGhlIHRlc3RzLCB5b3UgY2FuIHB1 dCBbUkZDXSBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuPC9zcGFuPjxz cGFuIHN0eWxlPSJjb2xvcjpibGFjayI+PC9zcGFuPjwvcD4KPHAgY2xhc3M9InhfeHhtc29ub3Jt YWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtDYWxp YnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48c3BhbiBz dHlsZT0iY29sb3I6YmxhY2siPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJ4X3h4bXNvbm9ybWFsIj48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZx dW90OyxzYW5zLXNlcmlmOyBjb2xvcjojMUY0OTdEIj5UaGFua3MsPC9zcGFuPjxzcGFuIHN0eWxl PSJjb2xvcjpibGFjayI+PC9zcGFuPjwvcD4KPHAgY2xhc3M9InhfeHhtc29ub3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7 LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPkJlbjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 YmxhY2siPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJ4X3h4bXNvbm9ybWFsIj48YSBuYW1lPSJ4X3hf eF9fTWFpbEVuZENvbXBvc2UiIGlkPSJMUGxuazQxNzA4MiIgcHJldmlld3JlbW92ZWQ9InRydWUi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48L2E+PHNwYW4g c3R5bGU9ImNvbG9yOmJsYWNrIj48L3NwYW4+PC9wPgo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTsg Ym9yZGVyLWxlZnQ6c29saWQgYmx1ZSAxLjVwdDsgcGFkZGluZzowaW4gMGluIDBpbiA0LjBwdCI+ CjxkaXY+CjxkaXYgc3R5bGU9ImJvcmRlcjpub25lOyBib3JkZXItdG9wOnNvbGlkICNFMUUxRTEg MS4wcHQ7IHBhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPgo8cCBjbGFzcz0ieF94eG1zb25vcm1h bCI+PGEgbmFtZT0ieF94X3hfX19fX19yZXBseXNlcGFyYXRvciIgaWQ9IkxQbG5rMzYyNjEyIiBw cmV2aWV3cmVtb3ZlZD0idHJ1ZSI+PC9hPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 OyBmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNr Ij5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGZvbnQtZmFt aWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPgogU1BESyBb PGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciIGlkPSJMUGxuazQyMTk3 OCIgY2xhc3M9Ik9XQUF1dG9MaW5rIiBwcmV2aWV3cmVtb3ZlZD0idHJ1ZSI+bWFpbHRvOnNwZGst Ym91bmNlc0BsaXN0cy4wMS5vcmc8L2E+XQo8Yj5PbiBCZWhhbGYgT2YgPC9iPlNoYWhhciBTYWx6 bWFuPGJyPgo8Yj5TZW50OjwvYj4gTW9uZGF5LCBBcHJpbCAyMywgMjAxOCA4OjQ1IEFNPGJyPgo8 Yj5Ubzo8L2I+IDxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyIgaWQ9IkxQbG5rNjg5 NDMyIiBjbGFzcz0iT1dBQXV0b0xpbmsiIHByZXZpZXdyZW1vdmVkPSJ0cnVlIj4Kc3Bka0BsaXN0 cy4wMS5vcmc8L2E+PGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtTUERLXSBTUERLICYjNDM7IHVz ZXIgc3BhY2UgYXBwbGlhbmNlPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+PC9zcGFu PjwvcD4KPC9kaXY+CjwvZGl2Pgo8cCBjbGFzcz0ieF94eG1zb25vcm1hbCI+PHNwYW4gc3R5bGU9 ImNvbG9yOmJsYWNrIj4mbmJzcDs8L3NwYW4+PC9wPgo8ZGl2IGlkPSJ4X3hfeF9kaXZ0YWdkZWZh dWx0d3JhcHBlciI+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1 b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5IaSBCZW4sPC9zcGFuPjwvcD4KPHA+PHNwYW4g c3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6 YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVv dDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj5CdW1waW5nIHRoaXMgdGhy ZWFkIHNpbmNlIEkndmUgYmVlbiBoYXZpbmcgc29tZSBuZXcmbmJzcDt0aG91Z2h0cyBvbiB0aGUg aXNzdWUgbm93IHRoYXQgd2UgYXJlIHN0YXJ0aW5nIGludGVncmF0aW9uIHdpdGggbmV3ZXIgc3Bk ayB2ZXJzaW9ucy48L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+VW5mb3J0dW5hdGVseSB0aGUg bWVyZ2UgaXNuJ3QgYXMgc21vb3RoIGFzIEknZCBsaWtlIGl0IHRvIGJlIHNpbmNlIHRoZSBiZGV2 IG1vZHVsZSBpcyBwcmV0dHkgdGlnaHRseSBpbnRlZ3JhdGVkIGludG8gc3BkaywgcGVyaGFwcyB3 ZSBtYWRlIHNvbWUgZmFsc2UgYXNzdW1wdGlvbnMgd3JpdGluZyB0aGUgbW9kdWxlLCBidXQgaXQg c2VlbXMKIHNvbWUgb2YgdGhlIG5ld2VyIHNwZGsgZmVhdHVyZXMgYXJlIGNvbXBsaWNhdGluZyB0 aGUgaW50ZWdyYXRpb24uPC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6YmxhY2siPk15IHF1ZXN0aW9uIGlz LCBpZiB0aGlzIHBhc3N0aHJvdWdoIG1vZHVsZSBpcyB1c2VmdWwsIHdvdWxkbid0IGl0IGJlIGJl dHRlciB0byBtYWludGFpbiBpdCBhcyBwYXJ0IG9mIHNwZGsgc28gdGhhdCB3ZSBjYW4gY2F0Y2gg aXNzdWVzIGFzIHNvb24gYXMgdGhleSBzaG93IHVwPzwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNr Ij5XZSB3b3VsZCBiZSBoYXBweSB0byBoZWxwIHdpdGggbWFpbnRhaW5pbmcgdGhpcyBtb2R1bGUs IHRoZSBtb2R1bGUgd2l0aCBpcyBjdXJyZW50bHkgcGFydCBvZiBvdXIgQ0kgd2l0aCBvdXIgJnF1 b3Q7ZnJvemVuJnF1b3Q7IHNwZGsgdmVyc2lvbiwgYnV0IG9uY2UgaW50ZWdyYXRlZCBpbnRvIHRo ZSBuZXdlciB2ZXJzaW9uIHdlIGNob29zZSwgSSdsbCBhZGQKIGl0IHRvIHRoZSBDSSBvdXIgQ0kg YXMgd2VsbC48L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2Fs aWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+Jm5ic3A7PC9zcGFuPjwvcD4KPHA+ PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsg Y29sb3I6YmxhY2siPlNoYWhhcjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ4X01zb05v cm1hbCIgYWxpZ249ImNlbnRlciIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj48c3BhbiBzdHls ZT0iY29sb3I6YmxhY2siPgo8aHIgc2l6ZT0iMyIgd2lkdGg9Ijk4JSIgYWxpZ249ImNlbnRlciI+ Cjwvc3Bhbj48L2Rpdj4KPGRpdiBpZD0ieF94X3hfZGl2UnBseUZ3ZE1zZyI+CjxwIGNsYXNzPSJ4 X3h4bXNvbm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDsgZm9udC1mYW1p bHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjpibGFjayI+RnJvbTo8L3Nw YW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0OyBmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOmJsYWNrIj4gU1BESyAmbHQ7PGEgaHJlZj0i bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciIGlkPSJMUGxuazUwNjYxMCIgcHJldmll d3JlbW92ZWQ9InRydWUiPnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+Jmd0Owogb24gYmVo YWxmIG9mIFdhbGtlciwgQmVuamFtaW4gJmx0OzxhIGhyZWY9Im1haWx0bzpiZW5qYW1pbi53YWxr ZXJAaW50ZWwuY29tIiBpZD0iTFBsbmsxNzk2MzEiIHByZXZpZXdyZW1vdmVkPSJ0cnVlIj5iZW5q YW1pbi53YWxrZXJAaW50ZWwuY29tPC9hPiZndDs8YnI+CjxiPlNlbnQ6PC9iPiBGcmlkYXksIEZl YnJ1YXJ5IDIsIDIwMTggMTE6NDM6NTggUE08YnI+CjxiPlRvOjwvYj4gPGEgaHJlZj0ibWFpbHRv OnNwZGtAbGlzdHMuMDEub3JnIiBpZD0iTFBsbmszMTIzMjIiIHByZXZpZXdyZW1vdmVkPSJ0cnVl Ij4Kc3Bka0BsaXN0cy4wMS5vcmc8L2E+PGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtTUERLXSBT UERLICYjNDM7IHVzZXIgc3BhY2UgYXBwbGlhbmNlPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpi bGFjayI+Cjwvc3Bhbj48L3A+CjxkaXY+CjxwIGNsYXNzPSJ4X3h4bXNvbm9ybWFsIj48c3BhbiBz dHlsZT0iY29sb3I6YmxhY2siPiZuYnNwOzwvc3Bhbj48L3A+CjwvZGl2Pgo8L2Rpdj4KPGRpdj4K PGRpdj4KPHAgY2xhc3M9InhfeHhtc29ub3JtYWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEyLjBw dCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7IGNvbG9yOmJsYWNrIj5PbiBUaHUsIDIw MTgtMDItMDEgYXQgMDg6MjkgJiM0MzswMDAwLCBTaGFoYXIgU2Fsem1hbiB3cm90ZTo8YnI+CiZn dDsgSGkgQmVuLDxicj4KJmd0OyA8YnI+CiZndDsgV291bGQgeW91IGFsc28gbGlrZSB0byB0YWtl IGEgbG9vayBhdCB0aGUgYmRldl91c2VyIG1vZHVsZT88YnI+CiZndDsgSXQgc3RpbGwgbmVlZHMg c29tZSBwYXRjaGluZyAoYXMgc29tZSBvZiB0aGUgc3R1ZmYgaXMgc3RpbGwgaGFyZCBjb2RlZCks IGJ1dCBJPGJyPgomZ3Q7IHRoaW5rIHdlIGNhbiBnZXQgbW9zdCBvZiBpdCBjbGVhbmVkIHVwIGlu IGEgY291cGxlIG9mIGRheXMuPGJyPgomZ3Q7IDxicj4KJmd0OyBJbiBhbnkgY2FzZSwgaXMgaXQg dGhlIGludGVudGlvbiB0aGF0IHRoZSB1c2VyIHdyaXRlIGhpcyBvd24gYmRldiBtb2R1bGUsIG9y PGJyPgomZ3Q7IHdvdWxkIHRoaXMgdXNlciBhcHBsaWFuY2UgZ2x1ZSBiZSBhIHVzZWZ1bCBnZW5l cmljIG1vZHVsZT88YnI+Cjxicj4KRm9yIGV4aXN0aW5nIHN0b3JhZ2Ugc3RhY2tzIHRoYXQgc2Vy dmUgYmxvY2sgSS9PLCBsaWtlIHRoZSBpbnRlcm5hbHMgb2YgYSBTQU4sPGJyPgp0aGUgaWRlYSBp cyB0aGF0IHlvdSB3cml0ZSB5b3VyIG93biBiZGV2IG1vZHVsZSB0byBmb3J3YXJkIEkvTyBjb21p bmcgb3V0IG9mIHRoZTxicj4KU1BESyBiZGV2IGxheWVyLiBUaGVuIHlvdSBjYW4gdXNlIHRoZSBT UERLIGlTQ1NJL05WTWUtb0Yvdmhvc3QgdGFyZ2V0cyBtb3N0bHk8YnI+CmFzLWlzLjxicj4KPGJy PgpJbiBzb21lIGNhc2VzLCB0aGUgYWN0dWFsIGlTQ1NJL05WTWUtb0Yvdmhvc3QgdGFyZ2V0IGFw cGxpY2F0aW9ucyB3b24ndDxicj4KaW50ZWdyYXRlIG5pY2VseSBkaXJlY3RseSBpbnRvIGFuIGV4 aXN0aW5nIHN0b3JhZ2UgYXBwbGljYXRpb24gYmVjYXVzZSB0aGV5PGJyPgpzcGF3biB0aGVpciBv d24gdGhyZWFkcyBhbmQgYWxsb2NhdGUgdGhlaXIgb3duIG1lbW9yeS4gVG8gc3VwcG9ydCB0aGF0 LCB0aGU8YnI+CmxpYnJhcmllcyBtYXkgYmUgY29uc3VtZWQgZGlyZWN0bHkgaW5zdGVhZCBvZiB0 aGUgYXBwbGljYXRpb25zIChsaWIvaXNjc2ksPGJyPgpsaWIvc2NzaSwgbGliL252bWYsIGV0Yy4p LiBUaGUgbGlicmFyaWVzIGRvbid0IHNwYXduIGFueSBvZiB0aGVpciBvd24gdGhyZWFkcyw8YnI+ CmJ1dCBpbnN0ZWFkIHJlbHkgb24gU1BESydzIGFic3RyYWN0aW9ucyBpbiBpbmNsdWRlL3NwZGsv aW9fY2hhbm5lbC5oLiBTZWU8YnI+Cjxicj4KPGEgaHJlZj0iaHR0cDovL3d3dy5zcGRrLmlvL2Rv Yy9jb25jdXJyZW5jeS5odG1sIiBpZD0iTFBsbmszNzYyMDciIHByZXZpZXdyZW1vdmVkPSJ0cnVl Ij5odHRwOi8vd3d3LnNwZGsuaW8vZG9jL2NvbmN1cnJlbmN5Lmh0bWw8L2E+PGJyPgo8YnI+Cldl IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIHdyaXRlIGEgY3VzdG9tIGJkZXYgbW9kdWxl IHRoYXQgcmVzaWRlcyBvdXRzaWRlPGJyPgpvZiB0aGUgU1BESyBzb3VyY2UgdHJlZSwgYnV0IGl0 J3MgdmVyeSBwb3NzaWJsZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhhdC4gQnV0PGJyPgpiZXlvbmQg dGhhdCBpbmNvbnZlbmllbmNlIChqdXN0IGRyb3AgeW91ciBtb2R1bGUgaW4gbGliL2JkZXYgZm9y IG5vdyksIHdyaXRpbmcgYTxicj4KYmRldiBtb2R1bGUgaXMgdGhlIHJlY29tbWVuZGVkIHdheSBv ZiBpbnRlcmFjdGluZyB3aXRoIHRoZSBib3R0b20gZW5kIG9mIHRoZTxicj4KU1BESyBiZGV2IGxh eWVyLiBJIHRoaW5rIHRoYXQncyB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBiZSBkb2luZyBpbiB5 b3VyIGNvZGUsPGJyPgpmcm9tIHdoYXQgSSBjYW4gdGVsbC48YnI+Cjxicj4KSSBob3BlIHRoYXQg aGVscHMhPGJyPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xzxicj4KU1BESyBtYWlsaW5nIGxpc3Q8YnI+CjxhIGhyZWY9Im1haWx0bzpTUERLQGxpc3RzLjAx Lm9yZyIgaWQ9IkxQbG5rMTU1OTEyIiBwcmV2aWV3cmVtb3ZlZD0idHJ1ZSI+U1BES0BsaXN0cy4w MS5vcmc8L2E+PGJyPgo8YSBocmVmPSJodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3NwZGsiIGlkPSJMUGxuazgwNzcxMyIgcHJldmlld3JlbW92ZWQ9InRydWUiPmh0dHBzOi8v bGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vc3BkazwvYT48L3NwYW4+PHNwYW4gc3R5bGU9 ImNvbG9yOmJsYWNrIj48L3NwYW4+PC9wPgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9k aXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2Jv ZHk+CjwvaHRtbD4K --===============2972230251078865982==--