From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boqun Feng Subject: [RFC PATCH v2 00/17] RFC: SGX Virtualization design and draft patches Date: Mon, 4 Dec 2017 08:15:11 +0800 Message-ID: <20171204001528.1342-1-boqun.feng@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Kevin Tian , Stefano Stabellini , Wei Liu , Jun Nakajima , George Dunlap , Andrew Cooper , Ian Jackson , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Tim Deegan , kai.huang@linux.intel.com, Julien Grall , Jan Beulich , David Scott , Boqun Feng List-Id: xen-devel@lists.xenproject.org SGkgYWxsLAoKVGhpcyBpcyB0aGUgdjIgb2YgUkZDIFNHWCBWaXJ0dWFsaXphdGlvbiBkZXNpZ24g YW5kIGRyYWZ0IHBhdGNoZXMsIHlvdQpjYW4gZmluZCB2MSBhdDoKCiAgICBodHRwczovL2xpc3Rz Lmd0Lm5ldC94ZW4vZGV2ZWwvNDgzNDA0CgpJbiB0aGUgbmV3IHZlcnNpb24sIEkgZml4IGEgZmV3 IHRoaW5ncyBhY2NvcmRpbmcgdG8gdGhlIGZlZWRiYWNrcyBmb3IKcHJldmlvdXMgdmVyc2lvbiht b3N0bHkgYXJlIGNsZWFudXBzIGFuZCBjb2RlIG1vdmVtZW50KS4KCkJlc2lkZXMsIEthaSBhbmQg SSByZWRlc2lnbiB0aGUgU0dYIE1TUnMgc2V0dGluZyB1cCBwYXJ0IGFuZCBpbnRyb2R1Y2UKbmV3 IFhMIHBhcmFtZXRlciAnbGVoYXNoJyBhbmQgJ2xld3InLgoKQW5vdGhlciBiaWcgY2hhbmdlIGlz IHRoYXQgSSBtb2RpZnkgdGhlIEVQQyBtYW5hZ2VtZW50IHRvIGZpdCBFUEMgcGFnZXMKaW4gJ3N0 cnVjdCBwYWdlX2luZm8nLCBhbmQgaW4gcGF0Y2ggIzYgYW5kICM3LCB1bnNjcnViYmFibGUgcGFn ZXMsCidQR0NfZXBjJywgJ01FTUZfZXBjJyBhbmQgJ1hFTlpPTkVfRVBDJyBhcmUgaW50cm9kdWNl ZCwgc28gdGhhdCBFUEMKbWFuYWdlbWVudCBpcyBmdWxseSBpbnRlZ3JhdGVkIGludG8gZXhpc3Rp bmcgbWVtb3J5IG1hbmFnZW1lbnQgb2YgeGVuLgpUaGlzIG1pZ2h0IGJlIHRoZSBjb250cm92ZXJz aWFsIGJpdCwgc28gcGF0Y2ggNn44IGFyZSBzaW1wbHkgdG8gc2hvdyB0aGUKaWRlYSBhbmQgZHJp dmUgZGVlcCBkaXNjdXNzaW9uLgoKRGV0YWlsZWQgY2hhbmdlcyBzaW5jZSB2MTogKG1vZGlmaWNh dGlvbnMgd2l0aCB0YWcgIltOZXddIiBpcyB0b3RhbGx5Cm5ldyBpbiB0aGlzIHNlcmllcywgcmV2 aWV3cyBhbmQgY29tbWVudHMgYXJlIGhpZ2hseSB3ZWxjb21lIGZvciB0aG9zZQpwYXJ0cykKCiog ICBNYWtlIFNHWCByZWxhdGVkIG1vc3RseSBjb21tb24gZm9yIHg4NiBieTogMSkgbW92aW5nIHNn eC5bY2hdIHRvCiAgICBhcmNoL3g4Ni8gYW5kIGluY2x1ZGUvYXNtLXg4Ni8gYW5kIDIpIHJlbmFt aW5nIEVQQyByZWxhdGVkIGZ1bmN0aW9ucwogICAgd2l0aCBkb21haW5fKiBwcmVmaXguCgoqICAg UmVuYW1lIGlvcmVtYXBfY2FjaGUoKSB3aXRoIGlvcmVtYXBfd2IoKSBhbmQgbWFrZSBpdCB4ODYt c3BlY2lmaWMgYXMKICAgIHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaC4KCiogICBSZW1vdmUgcGVy Y3B1IHNneF9jcHVkYXRhLCBkdXJpbmcgYm9vdHVwIHNlY29uZGFyeSBDUFVzIG5vdyBjaGVjawog ICAgd2hldGhlciB0aGV5IHJlYWQgZGlmZmVyZW50IHZhbHVlIHRoYW4gYm9vdCBDUFUsIGlmIHNv IFNHWCBpcwogICAgZGlzYWJsZWQuCgoqICAgUmVtb3ZlIGRvbWFpbl9oYXNfc2d4X3ssbGF1bmNo X2NvbnRyb2x9LCBhbmQgbWFrZSBzdXJlIHdlIGNhbgogICAgcmVseSBvbiBkb21haW4ncyBhcmNo LmNwdWlkLT5mZWF0LnNneHtfbGN9IGZvciBzZXR0aW5nIGNoZWNrcy4KCiogICBDbGVhbnVwIHRo ZSBjb2RlIGZvciBDUFVJRCBoYW5kbGluZyBhcyBzdWdnZXN0ZWQgYnkgQW5kcmV3IENvb3Blci4K CiogICBBZGp1c3QgdG8gbXNyX3BvbGljeSBmcmFtZXdvcmsgZm9yIFNHWCBNU1JzIGhhbmRsaW5n LCBhbmQgcmVtb3ZlCiAgICB1bm5lY2Vzc2FyeSBmaWVsZHMgbGlrZSAncmVhZGFibGUnIGFuZCAn d3JpdGFibGUnCgoqICAgVXNlICdwYWdlX2luZm8nIHRvIG1haW50YWluIEVQQyBwYWdlcywgYW5k IFtORVddIGFkZCBhbiBkcmFmdAogICAgaW1wbGVtZW50YXRpb24gZm9yIGVtcGxveWluZyB4ZW5o ZWFwIGZvciBFUEMgcGFnZSBtYW5hZ2VtZW50LiBQbGVhc2UKICAgIHNlZSBwYXRjaCA2fjgKCiog ICBbTmV3XSBNb2RpZnkgdGhlIFhMIHBhcmFtZXRlciBmb3IgU0dYLCBwbGVhc2Ugc2VlIHNlY3Rp b24gMi4xLjEgaW4KICAgIHRoZSB1cGRhdGVkIGRlc2lnbiBkb2MuIAoKKiAgIFtOZXddIFVzZSBf c2V0X3ZjcHVfbXNycyBoeXBlcmNhbGwgaW4gdGhlIHRvb2xzdGFjayB0byBzZXQgdGhlIFNHWAog ICAgcmVsYXRlZC4gUGxlYXNlIHNlZSBwYXRjaCAjMTcuCgoqICAgQUNQSSByZWxhdGVkIHRvb2wg Y2hhbmdlcyBhcmUgdGVtcG9yYXJpbHkgZHJvcHBlZCBpbiB0aGlzIHBhdGNoc2V0LAogICAgYXMg SSBuZWVkIG1vcmUgdGltZSB0byByZXNvbHZlIHRoZSBjb21tZW50cyBhbmQgZG8gcmVsYXRlZCB0 ZXN0cy4KCkFuZCB0aGUgdXBkYXRlIGRlc2lnbiBkb2MgaXMgYXMgZm9sbG93LCBhcyB0aGUgcHJl dmlvdXMgdmVyc2lvbiBpbiB0aGUKZGVzaWduIHRoZXJlIGFyZSBzb21lIHBhcnRpY3VhbHIgcG9p bnRzIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGljaAppbXBsZW1lbnRhdGlvbiBpcyBiZXR0ZXIuIEZv ciB0aG9zZSBhIHF1ZXN0aW9uIG1hcmsgKD8pIGlzIGFkZGVkIGF0IHRoZQpyaWdodCBvZiB0aGUg bWVudS4gQW5kIGZvciBTR1ggbGl2ZSBtaWdyYXRpb24sIHRoYW5rcyB0byBXZWkgTGl1IGZvcgpw cm92aWRpbmcgY29tbWVudHMgdGhhdCBpdCdzIG5pY2UgdG8gc3VwcG9ydCBpZiB3ZSBjYW4gaW4g cHJldmlvdXMKdmVyc2lvbiByZXZpZXcsIGJ1dCB3ZSdkIGxpa2UgaGVhciBtb3JlIGZyb20geW91 IGd1eXMgc28gd2Ugc3RpbGwgcHV0IGEKcXVlc3Rpb24gbWFyayBmb3QgdGhpcyBpdGVtLiBZb3Vy IGNvbW1lbnRzIG9uIHRob3NlICJxdWVzdGlvbiBtYXJrICg/KSIKcGFydHMgKGFuZCBvdGhlciBj b21tZW50cyBhcyB3ZWxsLCBvZiBjb3Vyc2UpIGFyZSBoaWdobHkgYXBwcmVjaWF0ZWQuCgo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CjEuIFNHWCBJbnRyb2R1Y3Rpb24KICAgIDEuMSBPdmVydmlldwogICAgICAgIDEuMS4x IEVuY2xhdmUKICAgICAgICAxLjEuMiBFUEMgKEVuY2xhdmUgUGFhZ2UgQ2FjaGUpCiAgICAgICAg MS4xLjMgRU5DTFMgYW5kIEVOQ0xVCiAgICAxLjIgRGlzY292ZXJpbmcgU0dYIENhcGFiaWxpdHkK ICAgICAgICAxLjIuMSBFbnVtZXJhdGUgU0dYIHZpYSBDUFVJRAogICAgICAgIDEuMi4yIEludGVs IFNHWCBPcHQtaW4gQ29uZmlndXJhdGlvbgogICAgMS4zIEVuY2xhdmUgTGlmZSBDeWNsZQogICAg ICAgIDEuMy4xIENvbnN0cnVjdGluZyAmIERlc3Ryb3lpbmcgRW5jbGF2ZQogICAgICAgIDEuMy4y IEVuY2xhdmUgRW50cnkgYW5kIEV4aXQKICAgICAgICAgICAgMS4zLjIuMSBTeW5jaG9ub3VzIEVu dHJ5IGFuZCBFeGl0CiAgICAgICAgICAgIDEuMy4yLjIgQXN5bmNob3Vub3VzIEVuY2xhdmUgRXhp dAogICAgICAgIDEuMy4zIEVQQyBFdmljdGlvbiBhbmQgUmVsb2FkCiAgICAxLjQgU0dYIExhdW5j aCBDb250cm9sCiAgICAxLjUgU0dYIEludGVyYWN0aW9uIHdpdGggSUEzMiBhbmQgSUE2NCBBcmNo aXRlY3R1cmUKMi4gU0dYIFZpcnR1YWxpemF0aW9uIERlc2lnbgogICAgMi4xIEhpZ2ggTGV2ZWwg VG9vbHN0YWNrIENoYW5nZXMKICAgICAgICAyLjEuMSBOZXcgJ3NneCcgWEwgY29uZmlndXJlIGZp bGUgcGFyYW1ldGVyCiAgICAgICAgMi4xLjIgTmV3IFhMIGNvbW1hbmRzICg/KQogICAgICAgIDIu MS4zIE5vdGlmeSBkb21haW4ncyB2aXJ0dWFsIEVQQyBiYXNlIGFuZCBzaXplIHRvIFhlbgogICAg Mi4yIEhpZ2ggTGV2ZWwgSHlwZXJ2aXNvciBDaGFuZ2VzCiAgICAgICAgMi4yLjEgRVBDIE1hbmFn ZW1lbnQKICAgICAgICAyLjIuMiBFUEMgVmlydHVhbGl6YXRpb24KICAgICAgICAyLjIuMyBQb3B1 bGF0ZSBFUEMgZm9yIEd1ZXN0CiAgICAgICAgMi4yLjQgTGF1bmNoIENvbnRyb2wgU3VwcG9ydAog ICAgICAgIDIuMi41IENQVUlEIEVtdWxhdGlvbgogICAgICAgIDIuMi42IEVQVCBWaW9sYXRpb24g JiBFTkNMUyBUcmFwcGluZyBIYW5kbGluZwogICAgICAgIDIuMi43IEd1ZXN0IFN1c3BlbmQgJiBS ZXN1bWUKICAgICAgICAyLjIuOCBEZXN0cm95aW5nIERvbWFpbgogICAgMi4zIEFkZGl0aW9uYWwg UG9pbnQ6IExpdmUgTWlncmF0aW9uLCBTbmFwc2hvdCBTdXBwb3J0ICg/KQozLiBSZWZlcmVuY2UK CjEuIFNHWCBJbnRyb2R1Y3Rpb24KCjEuMSBPdmVydmlldwoKMS4xLjEgRW5jbGF2ZQoKSW50ZWwg U29mdHdhcmUgR3VhcmQgRXh0ZW5zaW9ucyAoU0dYKSBpcyBhIHNldCBvZiBpbnN0cnVjdGlvbnMg YW5kIG1lY2hhbmlzbXMKZm9yIG1lbW9yeSBhY2Nlc3NlcyBpbiBvcmRlciB0byBwcm92aWRlIHNl Y3VyaXR5IGFjY2Vzc2VzIGZvciBzZW5zaXRpdmUKYXBwbGljYXRpb25zIGFuZCBkYXRhLiBTR1gg YWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHVzZSBpdCdzIHBhcml0aWN1bGFyIGFkZHJlc3MKc3Bh Y2UgYXMgYW4gKmVuY2xhdmUqLCB3aGljaCBpcyBhIHByb3RlY3RlZCBhcmVhIHByb3ZpZGVzIGNv bmZpZGVudGlhbGl0eSBhbmQKaW50ZWdyaXR5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHByaXZp bGVnZWQgbWFsd2FyZS4gQWNjZXNzZXMgdG8gdGhlIGVuY2xhdmUKbWVtb3J5IGFyZWEgZnJvbSBh bnkgc29mdHdhcmUgbm90IHJlc2lkZW50IGluIHRoZSBlbmNsYXZlIGFyZSBwcmV2ZW50ZWQsCmlu Y2x1ZGluZyB0aG9zZSBmcm9tIHByaXZpbGVnZWQgc29mdHdhcmUuIEJlbG93IGRpYWdyYW0gaWxs dXN0cmF0ZXMgdGhlIHByZXNlbmNlCm9mIEVuY2xhdmUgaW4gYXBwbGljYXRpb24uCgogICAgICAg IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICB8CiAgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfAogICAgICAgIHwgICB8ICAgT1Mg a2VybmVsICAgfCAgIHwgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgIHwg ICB8LS0tLS0tLS0tLS0tLS0tfCAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAog ICAgICAgIHwgICB8ICAgICAgICAgICAgICAgfCAgIHwgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0t LS18ICAgfAogICAgICAgIHwgICB8LS0tLS0tLS0tLS0tLS0tfCAgIHwgICAgICAgfCAgIHwgRW50 cnkgdGFibGUgICB8ICAgfAogICAgICAgIHwgICB8ICAgRW5jbGF2ZSAgICAgfC0tLXwtLS0tLT4g fCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfAogICAgICAgIHwgICB8LS0tLS0tLS0tLS0tLS0tfCAg IHwgICAgICAgfCAgIHwgRW5jbGF2ZSBzdGFjayB8ICAgfAogICAgICAgIHwgICB8ICAgQXBwIGNv ZGUgICAgfCAgIHwgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfAogICAgICAgIHwgICB8 LS0tLS0tLS0tLS0tLS0tfCAgIHwgICAgICAgfCAgIHwgRW5jbGF2ZSBoZWFwICB8ICAgfAogICAg ICAgIHwgICB8ICAgRW5jbGF2ZSAgICAgfCAgIHwgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18 ICAgfAogICAgICAgIHwgICB8LS0tLS0tLS0tLS0tLS0tfCAgIHwgICAgICAgfCAgIHwgRW5jbGF2 ZSBjb2RlICB8ICAgfAogICAgICAgIHwgICB8ICAgQXBwIGNvZGUgICAgfCAgIHwgICAgICAgfCAg IHwtLS0tLS0tLS0tLS0tLS18ICAgfAogICAgICAgIHwgICB8LS0tLS0tLS0tLS0tLS0tfCAgIHwg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgIHwgICAgICAgICAgIHwgICAg ICAgICAgIHwgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgIHwtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLXwKClNHWCBzdXBwb3J0cyBTR1gxIGFuZCBTR1gyIGV4dGVuc2lvbnMu IFNHWDEgcHJvdmlkZXMgYmFzaWMgZW5jbGF2ZSBzdXBwb3J0LAphbmQgU0dYMiBhbGxvd3MgYWRk aXRpb25hbCBmbGV4aWJpbGl0eSBpbiBydW50aW1lIG1hbmFnZW1lbnQgb2YgZW5jbGF2ZQpyZXNv dXJjZXMgYW5kIHRocmVhZCBleGVjdXRpb24gd2l0aGluIGFuIGVuY2xhdmUuCgoxLjEuMiBFUEMg KEVuY2xhdmUgUGFnZSBDYWNoZSkKCkp1c3QgbGlrZSBub3JtYWwgYXBwbGljYXRpb24gbWVtb3J5 IG1hbmFnZW1lbnQsIGVuY2xhdmUgbWVtb3J5IG1hbmFnZW1lbnQgY2FuIGJlCmRldmlkZWQgaW50 byB0d28gcGFydHM6IGFkZHJlc3Mgc3BhY2UgYWxsb2NhdGlvbiBhbmQgbWVtb3J5IGNvbW1pdG1l bnQuIEFkZHJlc3MKc3BhY2UgYWxsb2NhdGlvbiBpcyBhbGxvY2F0aW5nIHBhcnRpY3VsYXIgcmFu Z2Ugb2YgbGluZWFyIGFkZHJlc3Mgc3BhY2UgZm9yCmVuY2xhdmUuIE1lbW9yeSBjb21taXRtZW50 IGlzIGFzc2lnbmluZyBhY3R1YWwgcmVzb3VyY2UgZm9yIHRoZSBlbmNsYXZlLgoKRW5jbGF2ZSBQ YWdlIENhY2hlIChFUEMpIGlzIHRoZSBwaHlzaWNhbCByZXNvdXJjZSB1c2VkIHRvIGNvbW1pdCB0 byBlbmNsYXZlLgpFUEMgaXMgZGl2aWRlZCB0byA0SyBwYWdlcy4gQW4gRVBDIHBhZ2UgaXMgNEsg aW4gc2l6ZSBhbmQgYWx3YXlzIGFsaWduZWQgdG8gNEsKYm91bmRhcnkuIEhhcmR3YXJlIHBlcmZv cm1zIGFkZGl0aW9uYWwgYWNjZXNzIGNvbnRyb2wgY2hlY2tzIHRvIHJlc3RyaWN0IGFjY2Vzcwp0 byB0aGUgRVBDIHBhZ2UuIFRoZSBFbmNsYXZlIFBhZ2UgQ2FjaGUgTWFwIChFUENNKSBpcyBhIHNl Y3VyZSBzdHJ1Y3R1cmUgd2hpY2gKaG9sZHMgb25lIGVudHJ5IGZvciBlYWNoIEVQQyBwYWdlLCBh bmQgaXMgdXNlZCBieSBoYXJkd2FyZSB0byB0cmFjayB0aGUgc3RhdHVzCm9mIGVhY2ggRVBDIHBh Z2UgKGludmlzaWJlIHRvIHNvZnR3YXJlKS4gVHlwaWNhbGx5IEVQQyBhbmQgRVBDTSBhcmUgcmVz ZXJ2ZWQKYnkgQklPUyBhcyBQcm9jZXNzb3IgUmVzZXJ2ZWQgTWVtb3J5IGJ1dCB0aGUgYWN0dWFs IGFtb3VudCwgc2l6ZSwgYW5kIGxheW91dApvZiBFUEMgYXJlIG1vZGVsLXNwZWNpZmljLCBhbmQg ZGVwZW5kZW50IG9uIEJJT1Mgc2V0dGluZ3MuIEVQQyBpcyBlbnVtZXJhdGVkCnZpYSBuZXcgU0dY IENQVUlELCBhbmQgaXMgcmVwb3J0ZWQgYXMgcmVzZXJ2ZWQgbWVtb3J5LgoKRVBDIHBhZ2VzIGNh biBlaXRoZXIgYmUgaW52YWxpZCBvciB2YWxpZC4gVGhlcmUgYXJlIDQgdmFsaWQgRVBDIHR5cGVz IGluIFNHWDE6CnJlZ3VsYXIgRVBDIHBhZ2UsIFNHWCBFbmNsYXZlIENvbnRyb2wgU3RydWN0dXJl IChTRUNTKSBwYWdlLCBUaHJlYWQgQ29udHJvbApTdHJ1Y3R1cmUgKFRDUykgcGFnZSwgYW5kIFZl cnNpb24gQXJyYXkgKFZBKSBwYWdlLiBTR1gyIGFkZHMgVHJpbW1lZCBFUEMgcGFnZS4KRWFjaCBl bmNsYXZlIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUgU0VDUyBwYWdlLiBFYWNoIHRocmVhZCBpbiBl bmNsYXZlIGlzCmFzc29jaWF0ZWQgd2l0aCBvbmUgVENTIHBhZ2UuIFZBIHBhZ2UgaXMgdXNlZCBp biBFUEMgcGFnZSBldmljdGlvbiBhbmQgcmVsb2FkLgpUcmltbWVkIEVQQyBwYWdlIGlzIGludHJv ZHVjZWQgaW4gU0dYMiB3aGVuIHBhcnRpY3VsYXIgNEsgcGFnZSBpbiBlbmNsYXZlIGlzCmdvaW5n IHRvIGJlIGZyZWVkICh0cmltbWVkKSBhdCBydW50aW1lIGFmdGVyIGVuY2xhdmUgaXMgaW5pdGlh bGl6ZWQuCgoxLjEuMyBFTkNMUyBhbmQgRU5DTFUKClR3byBuZXcgaW5zdHJ1Y3Rpb25zIEVOQ0xT IGFuZCBFTkNMVSBhcmUgaW50cm9kdWNlZCB0byBtYW5hZ2UgZW5jbGF2ZSBhbmQgRVBDLgpFTkNM UyBjYW4gb25seSBydW4gaW4gcmluZyAwLCB3aGlsZSBFTkNMVSBjYW4gb25seSBydW4gaW4gcmlu ZyAzLiBCb3RoIEVOQ0xTIGFuZApFTkNMVSBoYXZlIG11bHRpcGxlIGxlYWYgZnVuY3Rpb25zLCB3 aXRoIEVBWCBpbmRpY2F0aW5nIHRoZSBzcGVjaWZpYyBsZWFmCmZ1bmN0aW9uLgoKU0dYMSBzdXBw b3J0cyBiZWxvdyBFTkNMUyBhbmQgRU5DTFUgbGVhdmVzOgoKICAgIEVOQ0xTOgogICAgLSBFQ1JF QVRFLCBFQURELCBFRVhURU5ELCBFSU5JVCwgRVJFTU9WRSAoRW5jbGF2ZSBidWlsZCBhbmQgZGVz dHJveSkKICAgIC0gRVBBLCBFQkxPQ0ssIEVUUkFDSywgRVdCLCBFTERVL0VMREIgKEVQQyBldmlj dGlvbiAmIHJlbG9hZCkKCiAgICBFTkNMVToKICAgIC0gRUVOVEVSLCBFRVhJVCwgRVJFU1VNRSAo RW5jbGF2ZSBlbnRyeSwgZXhpdCwgcmUtZW50ZXIpCiAgICAtIEVHRVRLRVksIEVSRVBPUlQgKFNH WCBrZXkgZGVyaXZhdGlvbiwgYXR0ZXN0YXRpb24pCgpBZGRpdGlvbmFsbHksIFNHWDIgc3VwcG9y dHMgYmVsb3cgRU5DTFMgYW5kIEVOQ0xVIGxlYXZlcyBmb3IgcnVudGltZSBhZGQvcmVtb3ZlCkVQ QyBwYWdlIHRvIGVuY2xhdmUgYWZ0ZXIgZW5jbGF2ZSBpcyBpbml0aWFsaXplZCwgYWxvbmcgd2l0 aCBwZXJtaXNzaW9uIGNoYW5nZS4KCiAgICBFTkNMUzoKICAgIC0gRUFVRywgRU1PRFQsIEVNT0RQ UgogICAgCiAgICBFTkNMVToKICAgIC0gRUFDQ0VQVCwgRUFDQ0VQVENPUFksIEVNT0RQRQoKVk1N IGlzIGFibGUgdG8gaW50ZXJmZXJlIHdpdGggRU5DTFMgcnVubmluZyBpbiBndWVzdCAoc2VlIDEu Mi54IFNHWCBpbnRlcmFjdGlvbgp3aXRoIFZNWCkgYnV0IGlzIHVuYWJsZSB0byBpbnRlcmZlcmUg d2l0aCBFTkNMVS4KCjEuMiBEaXNjb3ZlcmluZyBTR1ggQ2FwYWJpbGl0eQoKMS4yLjEgRW51bWVy YXRlIFNHWCB2aWEgQ1BVSUQKCklmIENQVUlELjB4Ny4wOkVCWC5TR1ggKGJpdCAyKSBpcyAxLCB0 aGVuIHByb2Nlc3NvciBzdXBwb3J0cyBTR1ggYW5kIFNHWApjYXBhYmlsaXR5IGFuZCByZXNvdXJj ZSBjYW4gYmUgZW51bWVyYXRlZCB2aWEgbmV3IFNHWCBDUFVJRCAoMHgxMikuCkNQVUlELjB4MTIu MHgwIHJlcG9ydHMgU0dYIGNhcGFiaWxpdHksIHN1Y2ggYXMgdGhlIHByZXNlbmNlIG9mIFNHWDEs IFNHWDIsCmVuY2xhdmUncyBtYXhpbXVtIHNpemUgZm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQg YXBwbGljYXRpb24uIENQVUlELjB4MTIuMHgxCnJlcG9ydHMgdGhlIGF2YWlsYWJpbGl0eSBvZiBi aXRzIHRoYXQgY2FuIGJlIHNldCBmb3IgU0VDUy5BVFRSSUJVVEVTLgpDUFVJRC4weDEyLjB4MiBy ZXBvcnRzIHRoZSBFUEMgcmVzb3VyY2UncyBiYXNlIGFuZCBzaXplLiBQbGF0Zm9ybSBtYXkgc3Vw cG9ydAptdWx0aXBsZSBFUEMgc2VjdGlvbnMsIGFuZCBDUFVJRC4weDEyLjB4MyBhbmQgZnVydGhl ciBzdWItbGVhdmVzIGNhbiBiZSB1c2VkCnRvIGRldGVjdCB0aGUgZXhpc3RlbmNlIG9mIG11bHRp cGxlIEVQQyBzZWN0aW9ucyAodW50aWwgQ1BVSUQgcmVwb3J0cyBpbnZhbGlkCkVQQykuCgpSZWZl ciB0byAzNy43LjIgSW50ZWwgU0dYIFJlc291cmNlIEVudW1lcmF0aW9uIExlYXZlcyBmb3IgZnVs bCBkZXNjcmlwdGlvbiBvZgpTR1ggQ1BVSUQgMHgxMi4KCjEuMi4yIEludGVsIFNHWCBPcHQtaW4g Q29uZmlndXJhdGlvbgoKT24gcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgSW50ZWwgU0dYLCBJQTMy X0ZFQVRVUkVfQ09OVFJPTCBhbHNvIHByb3ZpZGVzIHRoZQpTR1hfRU5BQkxFIGJpdCAoYml0IDE4 KSB0byB0dXJuIG9uL29mZiBTR1guIEJlZm9yZSBzeXN0ZW0gc29mdHdhcmUgY2FuIGVuYWJsZQph bmQgdXNlIFNHWCwgQklPUyBpcyByZXF1aXJlZCB0byBzZXQgSUEzMl9GRUFUVVJFX0NPTlRST0wu U0dYX0VOQUJMRSA9IDEgdG8Kb3B0LWluIFNHWC4KClNldHRpbmcgU0dYX0VOQUJMRSBmb2xsb3dz IHRoZSBydWxlcyBvZiBJQTMyX0ZFQVRVUkVfQ09OVFJPTC5MT0NLIChiaXQgMCkuClNvZnR3YXJl IGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBvcHRlZCBpbnRvIEludGVsIFNHWCBpZiBhbmQgb25seSBp ZgpJQTMyX0ZFQVRVUkVfQ09OVFJPTC5TR1hfRU5BQkxFIGFuZCBJQTMyX0ZFQVRVUkVfQ09OVFJP TC5MT0NLIGFyZSBzZXQgdG8gMS4KClRoZSBzZXR0aW5nIG9mIElBMzJfRkVBVFVSRV9DT05UUk9M LlNHWF9FTkFCTEUgKGJpdCAxOCkgaXMgbm90IHJlZmxlY3RlZCBieQpTR1ggQ1BVSUQuIEVuY2xh dmUgaW5zdHJ1Y3Rpb25zIHdpbGwgYmVoYXZpb3IgZGlmZmVyZW50bHkgYWNjb3JkaW5nIHRvIHZh bHVlCm9mIENQVUlELjB4Ny4weDA6RUJYLlNHWCBhbmQgd2hldGhlciBCSU9TIGhhcyBvcHRlZC1p biBTR1guCgpSZWZlciB0byAzNy43LjEgSW50ZWwgU0dYIE9wdC1pbiBDb25maWd1cmF0aW9uIGZv ciBtb3JlIGluZm9ybWF0aW9uLgoKMS4zIEVuY2xhdmUgTGlmZSBDeWNsZQoKMS4zLjEgQ29uc3Ry dWN0aW5nICYgRGVzdHJveWluZyBFbmNsYXZlCgpFbmNsYXZlIGlzIGNyZWF0ZWQgdmlhIEVOQ0xT W0VDUkVBVEVdIGxlYWYgYnkgcHJldmlsZWdlZCBzb2Z0d2FyZS4gQmFzaWNhbGx5CkVDUkVBVEUg Y29udmVydHMgYW4gaW52YWxpZCBFUEMgcGFnZSBpbnRvIFNFQ1MgcGFnZSwgYWNjb3JkaW5nIHRv IGEgc291cmNlIFNFQ1MKc3RydWN0dXJlIHJlc2lkZXMgaW4gbm9ybWFsIG1lbW9yeS4gVGhlIHNv dXJjZSBTRUNTIGNvbnRhaW5zIGVuY2xhdmUncyBpbmZvCnN1Y2ggYXMgYmFzZSAobGluZWFyKSBh ZGRyZXNzLCBzaXplLCBlbmNsYXZlIGF0dHJpYnV0ZXMsIGVuY2xhdmUncyBtZWFzdXJlbWVudCwK ZXRjLgoKQWZ0ZXIgRUNSRUFURSwgZm9yIGVhY2ggNEsgbGluZWFyIGFkZHJlc3Mgc3BhY2UgcGFn ZSwgcHJpdmlsZWRnZWQgc29mdHdhcmUgdXNlcwpFQUREIGFuZCBFRVhURU5EIHRvIGFkZCBvbmUg RVBDIHBhZ2UgdG8gaXQuIEVuY2xhdmUgY29kZS9kYXRhIChyZXNpZGVzIGluIG5vcm1hbAptZW1v cnkpIGlzIGxvYWRlZCB0byBlbmNsYXZlIGR1cmluZyBFQUREIGZvciBlbmNsYXZlJ3MgZWFjaCA0 SyBwYWdlLiBBZnRlciBhbGwKRVBDIHBhZ2VzIGFyZSBhZGRlZCB0byBlbmNsYXZlLCBwcml2aWxl ZGdlZCBzb2Z0d2FyZSBjYWxscyBFSU5JVCB0byBpbml0aWFsaXplCnRoZSBlbmNsYXZlLCBhbmQg dGhlbiBlbmNsYXZlIGlzIHJlYWR5IHRvIHJ1bi4KCkR1cmluZyBlbmNsYXZlIGlzIGNvbnN0cnVj dGVkLCBlbmNsYXZlIG1lYXN1cmVtZW50LCB3aGljaCBpcyBhIFNIQTI1NiBoYXNoCnZhbHVlLCBp cyBhbHNvIGJ1aWx0IGFjY29yZGluZyB0byBlbmNsYXZlJ3Mgc2l6ZSwgY29kZS9kYXRhIGl0c2Vs ZiBhbmQgaXRzCmxvY2F0aW9uIGluIGVuY2xhdmUsIGV0Yy4gVGhlIG1lYXN1cmVtZW50IGNhbiBi ZSB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZQplbmNsYXZlLiBTSUdTVFJVQ1QgaW4gRUlO SVQgbGVhZiBhbHNvIGNvbnRhaW5zIHRoZSBtZWFzdXJlbWVudCBzcGVjaWZpZWQgYnkKdW50cnVz dGVkIHNvZnR3YXJlLCB2aWEgTVJFTkNMQVZFLiBFSU5JVCB3aWxsIGNoZWNrIHRoZSB0d28gbWVh c3VyZW1lbnRzIGFuZAp3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIHRoZSB0d28gbWF0Y2hlcy4KCkVu Y2xhdmUgaXMgZGVzdHJveWVkIGJ5IHJ1bm5pbmcgRVJFTU9WRSBmb3IgYWxsIEVuY2xhdmUncyBF UEMgcGFnZSwgYW5kIHRoZW4KZm9yIGVuY2xhdmUncyBTRUNTLiBFUkVNT1ZFIHdpbGwgcmVwb3J0 IFNHWF9DSElMRF9QUkVTRU5UIGVycm9yIGlmIGl0IGlzIGNhbGxlZApmb3IgU0VDUyB3aGVuIHRo ZXJlJ3Mgc3RpbGwgcmVndWxhciBFUEMgcGFnZXMgdGhhdCBoYXZlbid0IGJlZW4gcmVtb3ZlZCBm cm9tCmVuY2xhdmUuCgpQbGVhc2UgcmVmZXIgdG8gU0RNIGNoYXB0ZXIgMzkuMSBDb25zdHJ1Y3Rp bmcgYW4gRW5jbGF2ZSBmb3IgbW9yZSBpbmZvbWF0aW9uLgoKMS4zLjIgRW5jbGF2ZSBFbnRyeSBh bmQgRXhpdAoKMS4zLjIuMSBTeW5jaG9ub3VzIEVudHJ5IGFuZCBFeGl0CgpBZnRlciBlbmNsYXZl IGlzIGNvbnN0cnVjdGVkLCBub24tcHJpdmlsZWRnZWQgc29mdHdhcmUgdXNlIEVOQ0xVW0VFTlRF Ul0gdG8KZW50ZXIgZW5jbGF2ZSB0byBydW4uIFdoaWxlIHByb2Nlc3MgcnVucyBpbiBlbmNsYXZl LCBub24tcHJpdmlsZWRnZWQgc29mdHdhcmUKY2FuIHVzZSBFTkNMVVtFRVhJVF0gdG8gZXhpdCBm cm9tIGVuY2xhdmUgYW5kIHJldHVybiB0byBub3JtYWwgbW9kZS4KCjEuMy4yLjIgQXN5bmNob3Vu b3VzIEVuY2xhdmUgRXhpdAoKQXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBldmVudHMsIHN1 Y2ggYXMgZXhjZXB0aW9ucywgaW50ZXJydXB0cywgdHJhcHMsClNNSXMsIGFuZCBWTSBleGl0cyBt YXkgb2NjdXIgd2hpbGUgZXhlY3V0aW5nIGluc2lkZSBhbiBlbmNsYXZlLiBUaGVzZSBldmVudHMK YXJlIHJlZmVycmVkIHRvIGFzIEVuY2xhdmUgRXhpdGluZyBFdmVudHMgKEVFRSkuIFVwb24gYW4g RUVFLCB0aGUgcHJvY2Vzc29yCnN0YXRlIGlzIHNlY3VyZWx5IHNhdmVkIGluc2lkZSB0aGUgZW5j bGF2ZSBhbmQgdGhlbiByZXBsYWNlZCBieSBhIHN5bnRoZXRpYwpzdGF0ZSB0byBwcmV2ZW50IGxl YWthZ2Ugb2Ygc2VjcmV0cy4gVGhlIHByb2Nlc3Mgb2Ygc2VjdXJlbHkgc2F2aW5nIHN0YXRlIGFu ZAplc3RhYmxpc2hpbmcgdGhlIHN5bnRoZXRpYyBzdGF0ZSBpcyBjYWxsZWQgYW4gQXN5bmNocm9u b3VzIEVuY2xhdmUgRXhpdCAoQUVYKS4KCkFmdGVyIEFFWCwgbm9uLXByaXZpbGVkZ2VkIHNvZnR3 YXJlIHVzZXMgRU5DTFVbRVJFU1VNRV0gdG8gcmUtZW50ZXIgZW5jbGF2ZS4KVGhlIFNHWCB1c2Vy c3BhY2Ugc29mdHdhcmUgbWFpbnRhaW5zIGEgc21hbGwgcGllY2Ugb2YgY29kZSAocmVzaWRlcyBp biBub3JtYWwKbWVtb3J5KSB3aGljaCBiYXNpY2FsbHkgY2FsbHMgRVJFU1VNRSB0byByZS1lbnRl ciBlbmNsYXZlLiBUaGUgYWRkcmVzcyBvZiB0aGlzCnBpZWNlIG9mIGNvZGUgaXMgY2FsbGVkIEFz eW5jaHJvbm91cyBFeGl0IFBvaW50ZXIgKEFFUCkuIEFFUCBpcyBzcGVjaWZpZWQgYXMKcGFyYW1l dGVyIGluIEVFTlRFUiBhbmQgd2lsbCBiZSBrZXB0IGludGVybmFsbHkgaW4gZW5jbGF2ZS4gVXBv biBBRVgsIEFFUCB3aWxsCmJlIHB1c2hlZCB0byBzdGFjayBhbmQgdXBvbiByZXR1cm5pbmcgZnJv bSBFRUUgaGFuZGxpbmcsIHN1Y2ggYXMgSVJFVCwgQUVQIHdpbGwKYmUgbG9hZGVkIHRvIFJJUCBh bmQgRVJFU1VNRSB3aWxsIGJlIGNhbGxlZCBzdWJzZXF1ZW50bHkgdG8gcmUtZW50ZXIgZW5jbGF2 ZS4KCkR1cmluZyBBRVggdGhlIHByb2Nlc3NvciB3aWxsIGRvIGNvbnRleHQgc2F2aW5nIGFuZCBy ZXN0b3JlIGF1dG9tYXRpY2FsbHkKdGhlcmVmb3JlIG5vIGNoYW5nZSB0byBpbnRlcnJ1cHQgaGFu ZGxpbmcgb2YgT1Mga2VybmVsIGFuZCBWTU0gaXMgcmVxdWlyZWQuIEl0CmlzIFNHWCB1c2Vyc3Bh Y2Ugc29mdHdhcmUncyByZXNwb25zaWJpbGl0eSB0byBzZXR1cCBBRVAgY29ycmVjdGx5LgoKUGxl YXNlIHJlZmVyIHRvIFNETSBjaGFwdGVyIDM5LjIgRW5jbGF2ZSBFbnRyeSBhbmQgRXhpdCBmb3Ig bW9yZSBpbmZvbWF0aW9uLgoKMS4zLjMgRVBDIEV2aWN0aW9uIGFuZCBSZWxvYWQKClNHWCBhbHNv IGFsbG93cyBwcml2aWxlZGdlZCBzb2Z0d2FyZSB0byBldmljdCBhbnkgRVBDIHBhZ2VzIHRoYXQg YXJlIHVzZWQgYnkKZW5jbGF2ZS4gVGhlIGlkZWEgaXMgdGhlIHNhbWUgYXMgbm9ybWFsIG1lbW9y eSBzd2FwcGluZy4gQmVsb3cgaXMgdGhlIGRldGFpbAppbmZvIG9mIGhvdyB0byBldmljdCBFUEMg cGFnZXMuCgpCZWxvdyBpcyB0aGUgc2VxdWVuY2UgdG8gZXZpY3QgcmVndWxhciBFUEMgcGFnZToK CgkxKSBTZWxlY3Qgb25lIG9yIG11bHRpcGxlIHJlZ3VsYXIgRVBDIHBhZ2VzIGZyb20gb25lIGVu Y2xhdmUKCTIpIFJlbW92ZSBFUFQvUFQgbWFwcGluZyBmb3Igc2VsZWN0ZWQgRVBDIHBhZ2VzCgkz KSBTZW5kIElQSXMgdG8gcmVtb3RlIENQVXMgdG8gZmx1c2ggVExCIG9mIHNlbGVjdGVkIEVQQyBw YWdlcwoJNCkgRUJMT0NLIG9uIHNlbGVjdGVkIEVQQyBwYWdlcwoJNSkgRVRSQUNLIG9uIGVuY2xh dmUncyBTRUNTIHBhZ2UKCTYpIGFsbG9jYXRlIG9uZSBhdmFpbGFibGUgc2xvdCAoOC1ieXRlKSBp biBWQSBwYWdlCgk3KSBFV0Igb24gc2VsZWN0ZWQgRVBDIHBhZ2VzCgpXaXRoIEVXQiB0YWtpbmc6 CgoJLSBWQSBzbG90LCB0byByZXN0b3JlIGV2aWN0aW9uIHZlcnNpb24gaW5mby4KCS0gb25lIG5v cm1hbCA0SyBwYWdlIGluIG1lbW9yeSwgdG8gc3RvcmUgZW5jcnlwdGVkIGNvbnRlbnQgb2YgRVBD IHBhZ2UuCgktIG9uZSBzdHJ1Y3QgUENNRCBpbiBtZW1vcnksIHRvIHN0b3JlIG1ldGEgZGF0YS4K CiAgICAoVkEgc2xvdCBpcyBhIDgtYnl0ZSBzbG90IGluIFZBIHBhZ2UsIHdoaWNoIGlzIGEgcGFy dGljdWFsciBFUEMgcGFnZS4pCgpBbmQgYmVsb3cgaXMgdGhlIHNlcXVlbmNlIHRvIGV2aWN0IGFu IFNFQ1MgcGFnZSBvciBWQSBwYWdlOgoKCTEpIGxvY2F0ZSBTRUNTIChvciBWQSkgcGFnZQoJMikg cmVtb3ZlIEVQVC9QVCBtYXBwaW5nIGZvciBTRUNTIChvciBWQSkgcGFnZQoJMykgU2VuZCBJUElz IHRvIHJlbW90ZSBDUFVzCgk2KSBhbGxvY2F0ZSBvbmUgYXZhaWxhYmxlIHNsb3QgKDgtYnl0ZSkg aW4gVkEgcGFnZQoJNCkgRVdCIG9uIFNFQ1MgKG9yKSBwYWdlCgpBbmQgZm9yIGV2aWN0aW5nIFNF Q1MgcGFnZSwgYWxsIHJlZ3VsYXIgRVBDIHBhZ2VzIHRoYXQgYmVsb25ncyB0byB0aGF0IFNFQ1MK bXVzdCBiZSBldmljdGVkIG91dCBwcmlvciwgb3RoZXJ3aXNlIEVXQiByZXR1cm5zIFNHWF9DSElM RF9QUkVTRU5UIGVycm9yLgoKQW5kIHRvIHJlbG9hZCBhbiBFUEMgcGFnZToKCgkxKSBFTERVL0VM REIgb24gRVBDIHBhZ2UKCTIpIHNldHVwIEVQVC9QVCBtYXBwaW5nCgpXaXRoIEVMRFUvRUxEQiB0 YWtpbmc6CgoJLSBsb2NhdGlvbiBvZiBTRUNTIHBhZ2UKCS0gbGluZWFyIGFkZHJlc3Mgb2YgZW5j bGF2ZSdzIDRLIHBhZ2UgKHRoYXQgd2UgYXJlIGdvaW5nIHRvIHJlbG9hZCB0bykKCS0gVkEgc2xv dCAodXNlZCBpbiBFV0IpCgktIDRLIHBhZ2UgaW4gbWVtb3J5ICh1c2VkIGluIEVXQikKCS0gc3Ry dWN0IFBDTUQgaW4gbWVtb3J5ICh1c2VkIGluIEVXQikKClBsZWFzZSByZWZlciB0byBTRE0gY2hh cHRlciAzOS41IEVQQyBhbmQgTWFuYWdlbWVudCBvZiBFUEMgcGFnZXMgZm9yIG1vcmUKaW5mb3Jt YXRpb24uCgoxLjQgU0dYIExhdW5jaCBDb250cm9sCgpTR1ggcmVxdWlyZXMgcnVubmluZyAiTGF1 bmNoIEVuY2xhdmUiIChMRSkgYmVmb3JlIHJ1bm5pbmcgYW55IG90aGVyIGVuY2xhdmVzLgpUaGlz IGlzIGJlY2F1c2UgTEUgaXMgdGhlIG9ubHkgZW5jbGF2ZSB0aGF0IGRvZXMgbm90IHJlcXVpcmVz IEVJTklUVE9LRU4gaW4KRUlOSVQuIFJ1bm5pbmcgYW55IG90aGVyIGVuY2xhdmUgcmVxdWlyZXMg YSB2YWxpZCBFSU5JVFRPS0VOLCB3aGljaCBjb250YWlucwpNQUMgb2YgdGhlIChmaXJzdCAxOTIg Ynl0ZXMpIEVJTklUVE9LRU4gY2FsY3VsYXRlZCBieSBFSU5JVFRPS0VOIGtleS4gRUlOSVQKd2ls bCB2ZXJpZnkgdGhlIE1BQyB2aWEgaW50ZXJuYWxseSBkZXJpdmluZyB0aGUgRUlOSVRUT0tFTiBr ZXksIGFuZCBvbmx5IHRoZQpFSU5JVFRPS0VOIHRoYXQgaGFzIG1hdGNoZWQgTUFDIHdpbGwgYmUg YWNjZXB0ZWQgYnkgRUlOSVQuIFRoZSBFSU5JVFRPS0VOIGtleQpkZXJpdmF0aW9uIGRlcGVuZHMg b24gc29tZSBpbmZvIGZyb20gTEUuIFRoZSB0eXBpY2FsIHByb2Nlc3MgaXMgTEUgZ2VuZXJhdGVz CkVJTklUVE9LRU4gZm9yIG90aGVyIGVuY2xhdmUgYWNjb3JkaW5nIHRvIExFIGl0c2VsZiBhbmQg dGhlIHRhcmdldCBlbmNsYXZlLAphbmQgY2FsY3VhbHRlcyB0aGUgTUFDIGJ5IHVzaW5nIEVOQ0xV W0VHRVRLRVldIHRvIGdldCB0aGUgRUlOSVRUT0tFTiBrZXkuIE9ubHkKTEUgaXMgYWJsZSB0byBn ZXQgdGhlIEVJTklUVE9LRU4ga2V5LgoKUnVubmluZyBMRSByZXF1aWVzIHRoZSBTSEEyNTYgaGFz aCBvZiBMRSBzaWduZXIncyBSU0EgcHVibGljIGtleSAoU0hBMjU2IG9mCnNpZ3N0cnVjdC0+bW9k dWx1cykgdG8gZXF1YWwgdG8gSUEzMl9TR1hMRVBVQktFWUhBU0hbMC0zXSBNU1JzICh0aGUgNCBN U1JzCnRvZ2V0aGVyIG1ha2VzIHVwIDI1Ni1iaXQgU0hBMjU2IGhhc2ggdmFsdWUpLgoKSWYgQ1BV SUQuMHg3LjB4MDpFQlguU0dYIGFuZCBDUFVJRC4weDcuMHgwOkVDWC5TR1hfTEFVTkNIX0NPTlRS T0xbYml0IDMwXSBpcwpzZXQsIHRoZW4gSUEzMl9GRUFUVVJFX0NPTlRST0wgaXMgYXZhaWxhYmxl LCBhbmQgSUEzMl9GRUFUVVJFX0NPTlRST0wgTVNSIGhhcwpTR1hfTEFVTkNIX0NPTlRST0xfRU5B QkxFIGJpdCAoYml0IDE3KSBhdmFpbGFibGUuIDEtc2V0dGluZyBvZgpTR1hfTEFVTkNIX0NPTlRS T0xfRU5BQkxFIGJpdCBlbmFibGVzIHJ1bnRpbWUgY2hhbmdlIG9mIElBMzJfU0dYTEVQVUJLRVlI QVNIbgphZnRlciBJQTMyX0ZFQVRVUkVfQ09OVFJPTCBpcyBsb2NrZWQuIE90aGVyd2lzZSwgSUEz Ml9TR1hMRVBVQktFWUhBU0huIGFyZQpyZWFkLW9ubHkgYWZ0ZXIgSUEzMl9GRUFUVVJFX0NPTlRS T0wgaXMgbG9ja2VkLiBBZnRlciByZXNldCwKSUEzMl9TR1hMRVBVQktFWUhBU0huIHdpbGwgYmUg c2V0IHRvIGhhc2ggb2YgSW50ZWwncyBkZWZhdWx0IGtleS4gT24gc3lzdGVtCnRoYXQgaGFzIG9u bHkgQ1BVSUQuMHg3LjB4MDpFQlguU0dYIHNldCwgSUEzMl9TR1hMRVBVQktFWUhBU0huIGFyZSBu b3QKYXZhaWxhYmxlLiBPbiBzdWNoIHN5c3RlbSBFSU5JVCB3aWxsIGFsd2F5cyB0cmVhdCBJQTMy X1NHWExFUFVCS0VZSEFTSG4gYXMKSW50ZWwncyBkZWZhdWx0IHZhbHVlIHRodXMgb25seSBJbnRl bCdzIExFIGlzIGFibGUgdG8gcnVuLgoKT24gc3lzdGVtIHdpdGggSUEzMl9TR1hMRVBVQktFWUhB U0huIGF2YWlsYWJsZSwgaXQgaXMgQklPUydzIGltcGxlbWVudGF0aW9uIHRvCmRlY2lkZSB3aGV0 aGVyIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvbnMgdG8gdXNlciB0byBzZXQgSUEzMl9TR1hMRVBV QktFWUhBU0huCmluICpsb2NrZWQqIChJQTMyX1NHWExFUFVCS0VZSEFTSG4gYXJlIHJlYWQtb25s eSBhZnRlciBJQTMyX0ZFQVRVUkVfQ09OVFJPTCBpcwpsb2NrZWQpIG9yICp1bmxvY2tlZCogbW9k ZSAoSUEzMl9TR1hMRVBVQktFWUhBU0huIGFyZSB3cml0YWJsZSB0byBrZXJuZWwgYXQKcnVudGlt ZSkuIEFsc28gQklPUyBtYXkgb3IgbWF5IG5vdCBwcm92aWRlIGNvbmZpZ3VyYXRpb25zIHRvIGFs bG93IHVzZXIgdG8gc2V0CmN1c3RvbSB2YWx1ZSBvZiBJQTMyX1NHWExFUFVCS0VZSEFTSG4uCgox LjUgU0dYIEludGVyYWN0aW9uIHdpdGggSUEzMiBhbmQgSUE2NCBBcmNoaXRlY3R1cmUKClNETSBD aGFwdGVyIDQyIGRlc2NyaWJlcyBTR1ggaW50ZXJhY3Rpb24gd2l0aCB2YXJpb3VzIGZlYXR1cmVz IGluIElBMzIgYW5kIElBNjQKYXJjaGl0ZWN0dXJlLiBCZWxvdyBvdXRsaW5lcyB0aGUgbWFqb3Ig b25lcy4gUmVmZXIgdG8gQ2hhcHRlciA0MiBmb3IgZnVsbApkZXNjcmlwdGlvbiBvZiBTR1ggaW50 ZXJhY3Rpb24gd2l0aCB2YXJpb3VzIElBMzIgYW5kIElBNjQgZmVhdHVyZXMuCgoxLjUuMSBWTVgg Q2hhbmdlcyBmb3IgU3VwcG9ydGluZyBTR1ggVmlydHVhbGl6YXRpb24KCkEgbmV3IDY0LWJpdCBF TkNMUy1leGl0aW5nIGJpdG1hcCBjb250cm9sIGZpZWxkIGlzIGFkZGVkIHRvIFZNQ1MgKGVuY29k aW5nCjAyMDJFSCkgdG8gY29udHJvbCBWTUVYSVQgb24gRU5DTFMgbGVhZiBmdW5jdGlvbnMuIEFu ZCBhIG5ldyAiRW5hYmxlIEVOQ0xTCmV4aXRpbmciIGNvbnRyb2wgYml0IChiaXQgMTUpIGlzIGRl ZmluZWQgaW4gc2Vjb25kYXJ5IHByb2Nlc3NvciBiYXNlZCB2bQpleGVjdXRpb24gY29udHJvbC4g MS1TZXR0aW5nIG9mICJFbmFibGUgRU5DTFMgZXhpdGluZyIgZW5hYmxlcyBFTkNMUy1leGl0aW5n CmJpdG1hcCBjb250cm9sLiBFTkNMUy1leGl0aW5nIGJpdG1hcCBjb250cm9scyB3aGljaCBFTkNM UyBsZWF2ZXMgd2lsbCB0cmlnZ2VyClZNRVhJVC4KCkFkZGl0aW9uYWxseSB0d28gbmV3IGJpdHMg YXJlIGFkZGVkIHRvIGluZGljYXRlIHdoZXRoZXIgVk1FWElUIChhbnkpIGlzIGZyb20KZW5jbGF2 ZS4gQmVsb3cgdHdvIGJpdHMgd2lsbCBiZSBzZXQgaWYgVk1FWElUIGlzIGZyb20gZW5jbGF2ZToK ICAgIC0gQml0IDI3IGluIHRoZSBFeGl0IHJlYXNvbiBmaWxlZCBvZiBCYXNpYyBWTS1leGl0IGlu Zm9ybWF0aW9uLgogICAgLSBCaXQgNCBpbiB0aGUgSW50ZXJydXB0aWJpbGl0eSBTdGF0ZSBvZiBH dWVzdCBOb24tUmVnaXN0ZXIgU3RhdGUgb2YgVk1DUy4KClJlZmVyIHRvIDQyLjUgSW50ZXJhY3Rp b25zIHdpdGggVk1YLCAyNy4yLjEgQmFzaWMgVk0tRXhpdCBJbmZvcm1hdGlvbiwgYW5kCjI3LjMu NCBTYXZpbmcgTm9uLVJlZ2lzdGVyLgoKMS41LjIgSW50ZXJhY3Rpb24gd2l0aCBYU0FWRQoKU0dY IGRlZmluZXMgYSBzdWItZmllbGQgY2FsbGVkIFgtRmVhdHVyZSBSZXF1ZXN0IE1hc2sgKFhGUk0p IGluIHRoZSBhdHRyaWJ1dGVzCmZpZWxkIG9mIFNFQ1MuIE9uIGVuY2xhdmUgZW50cnksIFNHWCBI VyB2ZXJpZmllcyBYRlJNIGluIFNFQ1MuQVRUUklCVVRFUyBhcmUKYWxyZWFkeSBlbmFibGVkIGlu IFhDUjAuCgpVcG9uIEFFWCwgU0dYIHNhdmVzIHRoZSBwcm9jZXNzb3IgZXh0ZW5kZWQgc3RhdGUg YW5kIG1pc2NlbGxhbmVvdXMgc3RhdGUgdG8KZW5jbGF2ZSdzIHN0YXRlLXNhdmUgYXJlYSAoU1NB KSwgYW5kIGNsZWFyIHRoZSBzZWNyZXRzIGZyb20gcHJvY2Vzc29yIGV4dGVuZGVkCnN0YXRlIHRo YXQgaXMgdXNlZCBieSBlbmNsYXZlIChmcm9tIGxlYWtpbmcgc2VjcmV0cykuCgpSZWZlciB0byA0 Mi43IEludGVyYWN0aW9uIHdpdGggUHJvY2Vzc29yIEV4dGVuZGVkIFN0YXRlIGFuZCBNaXNjZWxs YW5lb3VzIFN0YXRlCgoxLjUuMyBJbnRlcmFjdGlvbiB3aXRoIFMgc3RhdGUKCldoZW4gcHJvY2Vz c29yIGdvZXMgaW50byBTMy1TNSBzdGF0ZSwgRVBDIGlzIGRlc3Ryb3llZCwgdGh1cyBhbGwgZW5j bGF2ZXMgYXJlCmRlc3Ryb3llZCBhcyB3ZWxsIGNvbnNlcXVlbnRseS4KClJlZmVyIHRvIDQyLjE0 IEludGVyYWN0aW9uIHdpdGggUyBTdGF0ZXMuCgoyLiBTR1ggVmlydHVhbGl6YXRpb24gRGVzaWdu CgoyLjEgSGlnaCBMZXZlbCBUb29sc3RhY2sgQ2hhbmdlczoKCjIuMS4xIE5ldyAnc2d4JyBYTCBj b25maWd1cmUgZmlsZSBwYXJhbWV0ZXIKCkVQQyBpcyBsaW1pdGVkIHJlc291cmNlLiBJbiBvcmRl ciB0byB1c2UgRVBDIGVmZmljaWVudGx5IGFtb25nIGFsbCBkb21haW5zLAp3aGVuIGNyZWF0aW5n IGd1ZXN0LCBhZG1pbmlzdHJhdG9yIHNob3VsZCBiZSBhYmxlIHRvIHNwZWNpZnkgZG9tYWluJ3Mg dmlydHVhbApFUEMgc2l6ZS4gQW5kIGFkbWluIGFsYW8gc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFs bCBkb21haW4ncyB2aXJ0dWFsIEVQQyBzaXplLgoKRm9yIFNHWCBMYXVuY2ggQ29udHJvbCB2aXJ0 dWFsaXphdGlvbiwgd2Ugc2hvdWxkIGFsbG93IGFkbWluIHRvIGNyZWF0ZSBWTSB3aXRoCmVpdGhl ciBWTSdzIHZpcnR1YWwgSUEzMl9TR1hMRVBVQktFWUhBU0huIGxvY2tlZCBvciB1bmxvY2tlZCwg YW5kIHdlIHNob3VsZAphbHNvIGFsbG93IGFkbWluIHRvIGNyZWF0ZSBWTSB3aXRoIGN1c3RvbSBJ QTMyX1NHWExFUFVCS0VZSEFTSG4gdmFsdWUuCgpGb3IgYWJvdmUgcHVycG9zZXMsIGJlbG93IG5l dyAnc2d4JyBYTCBjb25maWd1cmUgZmlsZSBwYXJhbWV0ZXIgaXMgYWRkZWQ6CgoJc2d4ID0gJ2Vw Yz08c2l6ZT4sbGVoYXNoPTxzaGEyNTYtaGFzaD4sbGV3cj08MHwxPicKCkluIHdoaWNoICdlcGMn IHNwZWNpZmllcyBWTSdzIEVQQyBzaXplIGluIE1CIGFuZCBpdCdzIG1hbmRhdG9yeS4KCldoZW4g cGh5c2ljYWwgbWFjaGluZSBpcyBpbiAqbG9ja2VkKiBtb2RlLCBib3RoICdsZWhhc2gnIGFuZCAn bGV3cicKY2Fubm90IGJlIHNwZWNpZmljZWQsIGFzIHBoeXNpY2FsIG1hY2hpbmUgYXJlIHVuYWJs ZSB0byBjaGFuZ2UKSUEzMl9TR1hMRVBVQktFWUhBU0huIGF0IHJ1bnRpbWUuIEFkZGluZyBlaXRo ZXIgJ2xlaGFzaCcgYW5kICdsZXdyJyB3aWxsCmNhdXNlIGZhaWx1cmUgdG8gY3JlYXRlIFZNIGlu IHRoYXQgY2FzZS4gQW5kIFZNJ3MgaW5pdGlhbApJQTMyX1NHWExFUFVCS0VZSEFTSG4gdmFsdWUg d2lsbCBiZSBzZXQgdG8gdmFsdWUgb2YgcGh5c2ljYWwgTVNScy4KCldoZW4gcGh5c2ljYWwgbWFj aGluZSBpcyBpbiAqdW5sb2NrZWQqIG1vZGUsIHRoZW4gVk0ncyBpbml0aWFsCklBMzJfU0dYTEVQ VUJLRVlIQVNIbiB2YWx1ZSB3aWxsIGJlIHNldCB0byAnbGVoYXNoJyBpZiBzcGVjaWZpZWQsIG9y CkludGVsJ3MgZGVmYXVsdCB2YWx1ZS4gVk0ncyBTR1hfTEFVTkNIX0NPTlRST0xfRU5BQkxFIGJp dCBpbgpJQTMyX0ZFQVRVUkVfQ09OVFJPTCB3aWxsIGJlIHNldCBvciBjbGVhcmVkLCBkZXBlbmRp bmcgb24gd2hldGhlciAnbGV3cicKaXMgc3BlY2lmaWNpZWQgKG9yIHNldCB0byB0cnVlIG9yIGZh bHNlIGV4cGlsaWNpdHkpLgoKUGxlYXNlIGFsc28gcmVmZXIgdG8gMi4yLjQgTGF1bmNoIENvbnRy b2wgU3VwcG9ydC4KCjIuMS4yIE5ldyBYTCBjb21tYW5kcyAoPykKCkFkbWluaXN0cmF0b3Igc2hv dWxkIGJlIGFibGUgdG8gZ2V0IHBoeXNpY2FsIEVQQyBzaXplLCBhbmQgYWxsIGRvbWFpbidzIHZp cnR1YWwKRVBDIHNpemUuIEZvciB0aGlzIHB1cnBvc2UsIHdlIGNhbiBpbnRyb2R1Y2UgMiBhZGRp dGlvbmFsIGNvbW1hbmRzOgoKICAgICMgeGwgc2d4aW5mbwoKV2hpY2ggd2lsbCBwcmludCBvdXQg cGh5c2ljYWwgRVBDIHNpemUsIGFuZCBvdGhlciBTR1ggaW5mbyAoc3VjaCBhcyBTR1gxLCBTR1gy LApldGMpIGlmIG5lY2Vzc2FyeS4KCiAgICAjIHhsIHNneGxpc3QgPGRpZD4KCldoaWNoIHdpbGwg cHJpbnQgb3V0IHBhcnRpY3VsYXIgZG9tYWluJ3MgdmlydHVhbCBFUEMgc2l6ZSwgb3IgbGlzdCBh bGwgdmlydHVhbApFUEMgc2l6ZXMgZm9yIGFsbCBzdXBwb3J0ZWQgZG9tYWlucy4KCkFsdGVybmF0 aXZlbHksIHdlIGNhbiBhbHNvIGV4dGVuZCBleGlzdGluZyBYTCBjb21tYW5kcyBieSBhZGRpbmcg bmV3IG9wdGlvbgoKICAgICMgeGwgaW5mbyAtc2d4CgpXaGljaCB3aWxsIHByaW50IG91dCBwaHlz aWNhbCBFUEMgc2l6ZSBhbG9uZyB3aXRoIG90aGVyIHBoeXNpbmZvLiBBbmQKCiAgICAjIHhsIGxp c3QgPGRpZD4gLXNneAoKV2hpY2ggd2lsbCBwcmludCBvdXQgZG9tYWluJ3MgdmlydHVhbCBFUEMg c2l6ZS4KCkNvbW1lbnRzPwoKSW4gdGhpcyBSRkMgdGhlIHR3byBuZXcgY29tbWFuZHMgYXJlIG5v dCBpbXBsZW1lbnRlZCB5ZXQuCgoyLjEuMyBOb3RpZnkgZG9tYWluJ3MgdmlydHVhbCBFUEMgYmFz ZSBhbmQgc2l6ZSB0byBYZW4KClhlbiBuZWVkcyB0byBrbm93IGd1ZXN0J3MgRVBDIGJhc2UgYW5k IHNpemUgaW4gb3JkZXIgdG8gcG9wdWxhdGUgRVBDIHBhZ2VzIGZvcgppdC4gVG9vbHN0YWNrIG5v dGlmaWVzIEVQQyBiYXNlIGFuZCBzaXplIHRvIFhlbiB2aWEgWEVOX0RPTUNUTF9zZXRfY3B1aWQu CgoyLjIgSGlnaCBMZXZlbCBYZW4gSHlwZXJ2aXNvciBDaGFuZ2VzOgoKMi4yLjEgRVBDIE1hbmFn ZW1lbnQKClhlbiBoeXBlcnZpc29yIG5lZWRzIHRvIGRldGVjdCBTR1gsIGRpc2NvdmVyIEVQQywg YW5kIG1hbmFnZSBFUEMgYmVmb3JlCnN1cHBvcnRpbmcgU0dYIHRvIGd1ZXN0LiBFUEMgaXMgZGV0 ZWN0ZWQgdmlhIFNHWCBDUFVJRCAweDEyLjB4Mi4gSXQncyBwb3NzaWJsZQp0aGF0IHRoZXJlIGFy ZSBtdWx0aXBsZSBFUEMgc2VjdGlvbnMgKGVudW1lcmF0ZWQgdmlhIHN1Yi1sZWF2ZXMgMHgzIGFu ZCBzbyBvbiwKdW50aWwgaW52YWlkIEVQQyBpcyByZXBvcnRlZCksIGJ1dCB0aGlzIGlzIHR5cGlj YWxseSBvbiBNUC1zb2NrZXQgc2VydmVyIG9uCndoaWNoIGVhY2ggcGFja2FnZSB3b3VsZCBoYXZl IGl0cyBvd24gRVBDLgoKRVBDIGlzIHJlcG9ydGVkIGFzIHJlc2VydmVkIG1lbW9yeSAoc28gaXQg aXMgbm90IHJlcG9ydGVkIGFzIG5vcm1hbCBtZW1vcnkpLgpFUEMgbXVzdCBiZSBtYW5hZ2VkIGlu IDRLIHBhZ2VzLiBDUFUgaGFyZHdhcmUgdXNlcyBFUENNIHRvIHRyYWNrIHN0YXR1cyBvZiBlYWNo CkVQQyBwYWdlcy4gWGVuIG5lZWRzIHRvIG1hbmFnZSBFUEMgYW5kIHByb3ZpZGUgZnVuY3Rpb25z IHRvLCBpZSwgYWxsb2MgYW5kIGZyZWUKRVBDIHBhZ2VzIGZvciBndWVzdC4KCkFsdGhvdWdoIHR5 cGljYWxseSBvbiBwaHlzaWNhbCBtYWNoaW5lIChhdCBsZWFzdCBleGlzdGluZyBtYWNoaW5lcyks IEVQQyBpcwp+MTAwTSBpbiBzaXplIGF0IG1heGltdW0sIGJ1dCB3ZSBjYW5ub3QgYXNzdW1lIEVQ QyBzaXplLCB0aHVzIGluIHRlcm1zIG9mIEVQQwptYW5hZ2VtZW50LCBpdCdzIGJldHRlciB0byBp bnRlZ3JhdGUgRVBDIG1hbmFnZW1lbnQgdG8gWGVuJ3MgbWVtbW9yeSBtYW5hZ2VtZW50CmZyYW1l d29yayB0byB0YWtlIGFkdmFudGFnZSBvZiBleGlzdGluZyBYZW4ncyBtZW1vcnkgbWFuYWdlbWVu dCBhbGdvcml0aG1zLgoKU3BlY2lmaWNhbGx5LCBvbmUgJ3N0cnVjdCBwYWdlX2luZm8nIHdpbGwg YmUgY3JlYXRlZCBmb3IgZWFjaCBFUEMgcGFnZSwganVzdApsaWtlIG5vcm1hbCBtZW1vcnksIGFu ZCBhIG5ldyBmbGFnIHdpbGwgYmUgZGVmaW5lZCB0byBpZGVudGlmeSB3aGV0aGVyICdzdHJ1Y3QK cGFnZV9pbmZvJyBpcyBFUEMgb3Igbm9ybWFsIG1lbW9yeS4gRXhpc3RpbmcgbWVtb3J5IGFsbG9j YXRpb24gQVBJCmFsbG9jX2RvbWhlYXBfcGFnZXMgd2lsbCBiZSByZXN1ZWQgdG8gYWxsb2NhdGUg RVBDIHBhZ2UsIGJ5IGFkZGluZyBhIG5ldyBtZW1mbGFnCidNRU1GX2VwYycgdG8gaW5kaWNhdGUg RVBDIGFsbG9jYXRpb24sIHJhdGhlciB0aGFuIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGUgbmV3CidN RU1GX2VwYycgY2FuIGFsc28gYmUgdXNlZCBmb3IgRVBDIGJhbGxvb25pbmcgKGlmIHJlcXVpcmVk IGluIHRoZSBmdXR1cmUpLCBhcwp3aXRoIHRoZSBuZXcgZmxhZywgZXhpc3RpbmcgWEVOTUVNX2lu Y3JlYXNle2RlY3JlYXNlfV9yZXNlcnZhdGlvbiwKWEVOTUVNX3BvcHVsYXRlX3BoeXNtYXAgY2Fu IGJlIHJlc3VlZCBmb3IgRVBDIGFzIHdlbGwuCgoyLjIuMiBFUEMgVmlydHVhbGl6YXRpb24KClRo aXMgcGFydCBpcyBob3cgdG8gcG9wdWxhdGUgRVBDIGZvciBndWVzdHMuIFdlIGhhdmUgMyBjaG9p Y2VzOgogICAgLSBTdGF0aWMgUGFydGl0aW9uaW5nCiAgICAtIE92ZXJzdWJzY3JpcHRpb24KICAg IC0gQmFsbG9vbmluZwoKU3RhdGljIFBhcnRpdGlvbmluZyBtZWFucyBhbGwgRVBDIHBhZ2VzIHdp bGwgYmUgYWxsb2NhdGVkIGFuZCBtYXBwZWQgdG8gZ3Vlc3QKd2hlbiBpdCBpcyBjcmVhdGVkLCBh bmQgdGhlcmUncyBubyBydW50aW1lIGNoYW5nZSBvZiBwYWdlIHRhYmxlIG1hcHBpbmdzIGZvciBF UEMKcGFnZXMuIE92ZXJzdWJzY3JpcHRpb24gbWVhbnMgWGVuIGh5cGVydmlzb3Igc3VwcG9ydHMg RVBDIHBhZ2Ugc3dhcHBpbmcgYmV0d2Vlbgpkb21haW5zLCBtZWFuaW5nIFhlbiBpcyBhYmxlIHRv IGV2aWN0IEVQQyBwYWdlIGZyb20gYW5vdGhlciBkb21haW4gYW5kIGFzc2lnbiBpdAp0byB0aGUg ZG9tYWluIHRoYXQgbmVlZHMgdGhlIEVQQy4gV2l0aCBvdmVyc3Vic2NyaXB0aW9uLCBFUEMgY2Fu IGJlIGFzc2lnbmVkIHRvCmRvbWFpbiBvbiBkZW1hbmQsIHdoZW4gRVBUIHZpb2xhdGlvbiBoYXBw ZW5zLiBCYWxsb29uaW5nIGlzIHNpbWlsYXIgdG8gbWVtb3J5CmJhbGxvb25pbmcuIEl0IGlzIGJh c2ljYWxseSAiU3RhdGljIFBhcnRpdGlvbmluZyIgKyAiQmFsbG9vbiBkcml2ZXIiIGluIGd1ZXN0 LgoKU3RhdGljIFBhcnRpdGlvbmluZyBpcyB0aGUgZWFzaWVzdCB3YXkgaW4gdGVybXMgb2YgaW1w bGVtZW50YXRpb24sIGFuZCB0aGVyZQp3aWxsIGJlIG5vIGh5cGVydmlzb3Igb3ZlcmhlYWQgKGV4 Y2VwdCBFUFQgb3ZlcmhlYWQgb2YgY291cnNlKSwgYmVjYXVzZSBpbgoiU3RhdGljIHBhcnRpdGlv bmluZyIsIHRoZXJlIGlzIG5vIEVQVCB2aW9sYXRpb24gZm9yIEVQQywgYW5kIFhlbiBkb2Vzbid0 IG5lZWQKdG8gdHVybiBvbiBFTkNMUyBWTUVYSVQgZm9yIGd1ZXN0IGFzIEVOQ0xTIHJ1bnMgcGVy ZmVjdGx5IGluIG5vbi1yb290IG1vZGUuCgpCYWxsb29uaW5nIGlzICJTdGF0aWMgUGFydGl0aW9u aW5nIiArICJCYWxsb29uIGRyaXZlciIgaW4gZ3Vlc3QuIExpa2UgIlN0YXRpYwpQYXJhdGl0aW9u aW5nIiwgYmFsbG9vbmluZyBkb2Vzbid0IG5lZWQgdG8gdHVybiBvbiBFTkNMUyBWTUVYSVQsIGFu ZCBkb2Vzbid0CmhhdmUgRVBUIHZpb2xhdGlvbiBmb3IgRVBDIGVpdGhlci4gVG8gc3VwcG9ydCBi YWxsb29uaW5nLCB3ZSBuZWVkIGJhbGxvb25pbmcKZHJpdmVyIGluIGd1ZXN0IHRvIGlzc3VlIGh5 cGVyY2FsbCB0byBnaXZlIHVwIG9yIHJlY2xhaW0gRVBDIHBhZ2VzLiBJbiB0ZXJtcyBvZgpoeXBl cmNhbGwsIHdlIGhhdmUgdHdvIGNob2ljZXM6IDEpIEFkZCBuZXcgaHlwZXJjYWxsIGZvciBFUEMg YmFsbG9vbmluZzsgMikKVXNpbmcgZXhpc3RpbmcgWEVOTUVNX3tpbmNyZWFzZS9kZWNyZWFzZX1f cmVzZXJ2YXRpb24gd2l0aCBuZXcgbWVtb3J5IGZsYWcsIGllLApYRU5NRU1GX2VwYy4gSSdsbCBk aXNjdXNzIG1vcmUgcmVnYXJkaW5nIHRvIGFkZGluZyBkZWRpY2F0ZWQgaHlwZXJjYWxsIG9yIG5v dApsYXRlci4KCk92ZXJzdWJzY3JpcHRpb24gbG9va3MgbmljZSBidXQgaXQgcmVxdWlyZXMgbW9y ZSBjb21wbGljYXRlZCBpbXBsZW1ldGF0aW9uLgpGaXJzdGx5LCBhcyBleHBsYWluZWQgaW4gMS4z LjMgRVBDIEV2aWN0aW9uICYgUmVsb2FkLCB3ZSBuZWVkIHRvIGZvbGxvdyBzcGVjaWZpYwpzdGVw cyB0byBldmljdCBFUEMgcGFnZXMsIGFuZCBpbiBvcmRlciB0byBkbyB0aGF0LCBiYXNpY2FsbHkg WGVuIG5lZWRzIHRvIHRyYXAKRU5DTFMgZnJvbSBndWVzdCBhbmQga2VlcCB0cmFjayBvZiBFUEMg cGFnZSBzdGF0dXMgYW5kIGVuY2xhdmUgaW5mbyBmcm9tIGFsbApndWVzdC4gVGhpcyBpcyBiZWNh dXNlOgogICAgLSBUbyBldmljdCByZWd1bGFyIEVQQyBwYWdlLCBYZW4gbmVlZHMgdG8ga25vdyBT RUNTIGxvY2F0aW9uCiAgICAtIFhlbiBuZWVkcyB0byBrbm93IEVQQyBwYWdlIHR5cGU6IGV2aWN0 aW5nIHJlZ3VsYXIgRVBDIGFuZCBldmljdGluZyBTRUNTLAogICAgICBWQSBwYWdlIGhhdmUgZGlm ZmVyZW50IHN0ZXBzLgogICAgLSBYZW4gbmVlZHMgdG8ga25vdyBFUEMgcGFnZSBzdGF0dXM6IHdo ZXRoZXIgdGhlIHBhZ2UgaXMgYmxvY2tlZCBvciBub3QuCgpUaG9zZSBpbmZvIGNhbiBvbmx5IGJl IGdvdCBieSB0cmFwcGluZyBFTkNMUyBmcm9tIGd1ZXN0LCBhbmQgcGFyc2luZyBpdHMKcGFyYW1l dGVycyAodG8gaWRlbnRpZnkgU0VDUyBwYWdlLCBldGMpLiBQYXJzaW5nIEVOQ0xTIHBhcmFtZXRl cnMgbWVhbnMgd2UgbmVlZAp0byBrbm93IHdoaWNoIEVOQ0xTIGxlYWYgaXMgYmVpbmcgdHJhcHBl ZCwgYW5kIHdlIG5lZWQgdG8gdHJhbnNsYXRlIGd1ZXN0J3MKdmlydHVhbCBhZGRyZXNzIHRvIGdl dCBwaHlzaWNhbCBhZGRyZXNzIGluIG9yZGVyIHRvIGxvY2F0ZSBFUEMgcGFnZS4gQW5kIG9uY2UK RU5DTFMgaXMgdHJhcHBlZCwgd2UgaGF2ZSB0byBlbXVsYXRlIEVOQ0xTIGluIFhlbiwgd2hpY2gg bWVhbnMgd2UgbmVlZCB0bwpyZWNvbnN0cnVjdCBFTkNMUyBwYXJhbWV0ZXJzIGJ5IHJlbWFwcGlu ZyBhbGwgZ3Vlc3QncyB2aXJ0dWFsIGFkZHJlc3MgdG8gWGVuJ3MKdmlydHVhbCBhZGRyZXNzIChn dmEtPmdwYS0+cGEtPnhlbl92YSksIGFzIEVOQ0xTIGFsd2F5cyB1c2UgKmVmZmVjdGl2ZSBhZGRy ZXNzKgp3aGljaCBpcyBhYmxlIHRvIGJlIHRyYXNsYXRlZCBieSBwcm9jZXNzb3Igd2hlbiBydW5u aW5nIEVOQ0xTLgoKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICB8ICAgRU5DTFMgICB8CiAgICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgICAgICAgICAgICAgfCAgICAgICAgICAvfFwKICAgIEVOQ0xTIFZNRVhJVHwgICAg ICAgICAgIHwgVk1FTlRSWQogICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgICAg ICAgICBcfC8gICAgICAgICAgfAoKCQkxKSBwYXJzZSBFTkNMUyBwYXJhbWV0ZXJzCgkJMikgcmVj b25zdHJ1Y3QocmVtYXApIGd1ZXN0J3MgRU5DTFMgcGFyYW1ldGVycwoJCTMpIHJ1biBFTkNMUyBv biBiZWhhbGYgb2YgZ3Vlc3QgKGFuZCBza2lwIEVOQ0xTKQoJCTQpIG9uIHN1Y2Nlc3MsIHVwZGF0 ZSBFUEMvZW5jbGF2ZSBpbmZvLCBvciBpbmplY3QgZXJyb3IKCkFuZCBYZW4gbmVlZHMgdG8gbWFp bnRhaW4gZWFjaCBFUEMgcGFnZSdzIHN0YXR1cyAodHlwZSwgYmxvY2tlZCBvciBub3QsIGluCmVu Y2xhdmUgb3Igbm90LCBldGMpLiBYZW4gYWxzbyBuZWVkcyB0byBtYWludGFpbiBhbGwgRW5jbGF2 ZSdzIGluZm8gZnJvbSBhbGwKZ3Vlc3RzLCBpbiBvcmRlciB0byBmaW5kIHRoZSBjb3JyZWN0IFNF Q1MgZm9yIHJlZ3VsYXIgRVBDIHBhZ2UsIGFuZCBlbmNsYXZlJ3MKbGluZWFyIGFkZHJlc3MgYXMg d2VsbC4KClNvIGluIGdlbmVyYWwsICJTdGF0aWMgUGFydGl0aW9uaW5nIiBoYXMgc2ltcGxlc3Qg aW1wbGVtZW50YXRpb24sIGJ1dCBvYnZpb3VzbHkKbm90IHRoZSBiZXN0IHdheSB0byB1c2UgRVBD IGVmZmljaWVudGx5OyAiQmFsbG9vbmluZyIgaGFzIGFsbCBwcm9zIG9mIFN0YXRpYwpQYXJ0aXRp b25pbmcgYnV0IHJlcXVpZXMgZ3Vlc3QgYmFsbG9vbiBkcml2ZXI7ICJPdmVyc3Vic2NyaXB0aW9u IiBpcyBiZXN0IGluCnRlcm1zIG9mIGZsZXhpYmlsaXR5IGJ1dCByZXF1aXJlcyBjb21wbGljYXRl ZCBoeXBlcnZpc29yIGltcGxlbWV0YXRpb24uCgpXZSB3aWxsIHN0YXJ0IHdpdGggIlN0YXRpYyBQ YXJ0aXRpb25pbmciLiBJZiAiQmFsbG9vbmluZyIgaXMgcmVxdWlyZWQgaW4gdGhlCmZ1dHVyZSwg d2Ugd2lsbCBzdXBwb3J0IGl0LiAiT3ZlcnN1YnNjcmlwdGlvbiIgc2hvdWxkIG5vdCBiZSBuZWVk ZWQgaW4KZm9yc2VlYWJsZSBmdXR1cmUuCgoyLjIuMyBQb3B1bGF0ZSBFUEMgZm9yIEd1ZXN0CgpU b29sc3RhY2sgbm90aWZpZXMgWGVuIGFib3V0IGRvbWFpbidzIEVQQyBiYXNlIGFuZCBzaXplIGJ5 IFhFTl9ET01DVExfc2V0X2NwdWlkLApzbyBjdXJyZW50bHkgWGVuIHBvcHVsYXRlcyBhbGwgRVBD IHBhZ2VzIGZvciBndWVzdCBpbiBYRU5fRE9NQ1RMX3NldF9jcHVpZCwKcGFydGljdWxhcmx5LCBp biBoYW5kbGluZyBYRU5fRE9NQ1RMX3NldF9jcHVpZCBmb3IgQ1BVSUQuMHgxMi4weDIuIE9uY2Ug WGVuCmNoZWNrcyB0aGUgdmFsdWVzIHBhc3NlZCBmcm9tIHRvb2xzdGFjayBpcyB2YWxpZCwgWGVu IHdpbGwgYWxsb2NhdGUgYWxsIEVQQwpwYWdlcyBhbmQgc2V0dXAgRVBUIG1hcHBpbmdzIGZvciBn dWVzdC4KCjIuMi40IExhdW5jaCBDb250cm9sIFN1cHBvcnQKClRvIHN1cHBvcnQgcnVubmluZyBt dWx0aXBsZSBkb21haW5zIHdpdGggZWFjaCBydW5uaW5nIGl0cyBvd24gTEUgc2lnbmVkIGJ5CmRp ZmZlcmVudCBvd25lcnMsIHBoeXNpY2FsIG1hY2hpbmUncyBCSU9TIG11c3QgbGVhdmUgSUEzMl9T R1hMRVBVQktFWUhBU0huCip1bmxvY2tlZCogYmVmb3JlIGhhbmRpbmcgdG8gWGVuLiBYZW4gd2ls bCB0cmFwIGRvbWFpbidzIHdyaXRlIHRvCklBMzJfU0dYTEVQVUJLRVlIQVNIbiBhbmQga2VlcCB0 aGUgdmFsdWUgaW4gdmNwdSBpbnRlcm5hbGx5LCBhbmQgdXBkYXRlIHRoZQp2YWx1ZSB0byBwaHlz aWNhbCBNU1JzIHdoZW4gdmNwdSBpcyBzY2hlZHVsZWQgaW4uIFRoaXMgY2FuIGd1YXJhbnRlZSB0 aGF0CndoZW4gRUlOSVQgcnVucyBpbiBndWVzdCwgZ3Vlc3QncyB2aXJ0dWFsIElBMzJfU0dYTEVQ VUJLRVlIQVNIbiBoYXZlIGJlZW4Kd3JpdHRlbiB0byBwaHlzaWNhbCBNU1JzLgoKU0dYX0xBVU5D SF9DT05UUk9MX0VOQUJMRSBiaXQgaW4gZ3Vlc3QncyBJQTMyX0ZFQVRVUkVfQ09OVFJPTCBpcyBj b250cm9sbGVkCmJ5IG5ldyBhZGRlZCAnbGV3cicgWEwgcGFyYW1ldGVyIChzZWUgMi4xLjEgTmV3 ICdzZ3gnIFhMIGNvbmZpZ3VyZSBmaWxlCnBhcmFtZXRlcikuCgpJZiBwaHlzaWNhbCBJQTMyX1NH WExFUFVCS0VZSEFTSG4gYXJlICpsb2NrZWQqIGluIG1hY2hpbmUncyBCSU9TLCB0aGVuIG9ubHkg TVNSCnJlYWQgaXMgYWxsb3dlZCBmcm9tIGd1ZXN0LCBhbmQgWGVuIHdpbGwgaW5qZWN0IGVycm9y IGZvciBndWVzdCdzIE1TUiB3cml0ZXMuCgpJbiBhZGRpdGlvbiwgaWYgcGh5c2ljYWwgSUEzMl9T R1hMRVBVQktFWUhBU0huIGFyZSAqbG9ja2VkKiwgdGhlbiBjcmVhdGluZyBndWVzdAp3aXRoICds ZWhhc2gnIHBhcmFtZXRlciBvciAnbGV3cicgd2lsbCBmYWlsLCBhcyBpbiBzdWNoIGNhc2UgWGVu IGlzIG5vdCBhYmxlIHRvCnVwZGF0ZSBndWVzdCdzIHZpcnR1YWwgSUEzMl9TR1hMRVBVQktFWUhB U0huIHRvIHBoeXNpY2FsIE1TUnMuCgpJZiBwaHlzaWNhbCBJQTMyX1NHWExFUFVCS0VZSEFTSG4g YXJlIG5vdCBhdmFpbGFibGUKKENQVUlELjB4Ny4weDA6RUNYLlNHWF9MQVVIQ05fQ09OVFJPTCBp cyBub3QgcHJlc2VudCksIHRoZW4gY3JlYXRpbmcgVk0gd2l0aAonbGVoYXNoJyBhbmQgJ2xld3In IHdpbGwgYWxzbyBmYWlsLiBJbiBhZGRpdGlvbiwgYW55IE1TUiByZWFkL3dyaXRlIGZvcgpJQTMy X1NHWExFUFVCS0VZSEFTSG4gZnJvbSBndWVzdCBpcyBpbnZhbGlkIGFuZCBYZW4gd2lsbCBpbmpl Y3QgZXJyb3IgaW4gc3VjaApjYXNlLgoKMi4yLjUgQ1BVSUQgRW11bGF0aW9uCgpNb3N0IG9mIG5h dGl2ZSBTR1ggQ1BVSUQgaW5mbyBjYW4gYmUgZXhwb3NlZCB0byBndWVzdCwgZXhwZWN0IGJlbG93 IHR3byBwYXJ0czoKICAgIC0gU3ViLWxlYWYgMHgyIG5lZWRzIHRvIHJlcG9ydCBkb21haW4ncyB2 aXJ0dWFsIEVQQyBiYXNlIGFuZCBzaXplLCBpbnN0ZWFkCiAgICAgIG9mIHBoeXNpY2FsIEVQQyBp bmZvLgogICAgLSBTdWItbGVhZiAweDEgbmVlZHMgdG8gYmUgY29uc2lzdGVudCB3aXRoIGd1ZXN0 J3MgWENSMC4gRm9yIHRoZSByZWFzb24gb2YKICAgICAgdGhpcyBwYXJ0IHBsZWFzZSByZWZlciB0 byAxLjUuMiBJbnRlcmFjdGlvbiB3aXRoIFhTQVZFLgoKMi4yLjYgRVBUIFZpb2xhdGlvbiAmIEVO Q0xTIFRyYXBwaW5nIEhhbmRsaW5nCgpPbmx5IG5lZWRlZCB3aGVuIFhlbiBzdXBwb3J0cyBFUEMg T3ZlcnN1YnNjcmlwdGlvbiwgYXMgZXhwbGFpbmVkIGFib3ZlLgoKMi4yLjcgR3Vlc3QgU3VzcGVu ZCAmIFJlc3VtZQoKT24gaGFyZHdhcmUsIEVQQyBpcyBkZXN0cm95ZWQgd2hlbiBwb3dlciBnb2Vz IHRvIFMzLVM1LiBTbyBYZW4gd2lsbCBkZXN0cm95Cmd1ZXN0J3MgRVBDIHdoZW4gZ3Vlc3QncyBw b3dlciBnb2VzIGludG8gUzMtUzUuIEN1cnJlbnRseSBYZW4gaXMgbm90aWZpZWQgYnkKUWVtdSBp biB0ZXJtcyBvZiBTIFN0YXRlIGNoYW5nZSB2aWEgSFZNX1BBUkFNX0FDUElfU19TVEFURSwgd2hl cmUgWGVuIHdpbGwKZGVzdHJveSBFUEMgaWYgUyBTdGF0ZSBpcyBTMy1TNS4KClNwZWNpZmljYWxs eSwgWGVuIHdpbGwgcnVuIEVSRU1PVkUgZm9yIGd1ZXN0J3MgZWFjaCBFUEMgcGFnZSwgYXMgZ3Vl c3QgbWF5Cm5vdCBoYW5kbGUgRVBDIHN1c3BlbmQgJiByZXN1bWUgY29ycmVjdGx5LCBpbiB3aGlj aCBjYXNlIHBoeXNpY2FsbHkgZ3Vlc3QncyBFUEMKcGFnZXMgbWF5IHN0aWxsIGJlIHZhbGlkLCBz byBYZW4gbmVlZHMgdG8gcnVuIEVSRU1PVkUgdG8gbWFrZSBzdXJlIGFsbCBFUEMKcGFnZXMgYXJl IGJlY29taW5nIGludmFsaWQuIE90aGVyd2lzZSBmdXJ0aGVyIG9wZXJhdGlvbiBpbiBndWVzdCBv biBFUEMgbWF5CmZhdWx0IGFzIGl0IGFzc3VtZXMgYWxsIEVQQyBwYWdlcyBhcmUgaW52YWxpZCBh ZnRlciBndWVzdCBpcyByZXN1bWVkLgoKRm9yIFNFQ1MgcGFnZSwgRVJFTU9WRSBtYXkgZmF1bHQg d2l0aCBTR1hfQ0hJTERfUFJFU0VOVCwgaW4gd2hpY2ggY2FzZSBYZW4gd2lsbAprZWVwIHRoaXMg U0VDUyBwYWdlIGludG8gYSBsaXN0LCBhbmQgY2FsbCBFUkVNT1ZFIGZvciB0aGVtIGFnYWluIGFm dGVyIGFsbCBFUEMKcGFnZXMgaGF2ZSBiZWVuIGNhbGxlZCB3aXRoIEVSRU1PVkUuIFRoaXMgdGlt ZSB0aGUgRVJFTU9WRSBvbiBTRUNTIHdpbGwgc3VjY2VlZAphcyBhbGwgY2hpbGRyZW4gKHJlZ3Vs YXIgRVBDIHBhZ2VzKSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkLgoKMi4yLjggRGVzdHJveWlu ZyBEb21haW4KCk5vcm1hbGx5IFhlbiBqdXN0IGZyZWVzIGFsbCBFUEMgcGFnZXMgZm9yIGRvbWFp biB3aGVuIGl0IGlzIGRlc3Ryb3llZC4gQnV0IFhlbgp3aWxsIGFsc28gZG8gRVJFTU9WRSBvbiBh bGwgZ3Vlc3QncyBFUEMgcGFnZXMgKGRlc2NyaWJlZCBpbiBhYm92ZSAyLjIuNykgYmVmb3JlCmZy ZWUgdGhlbSwgYXMgZ3Vlc3QgbWF5IHNodXRkb3duIHVuZXhwZWN0ZWQgKGV4LCB1c2VyIGtpbGxz IGd1ZXN0KSwgYW5kIGluIHRoaXMKY2FzZSwgZ3Vlc3QncyBFUEMgbWF5IHN0aWxsIGJlIHZhbGlk LgoKMi4zIEFkZGl0aW9uYWwgUG9pbnQ6IExpdmUgTWlncmF0aW9uLCBTbmFwc2hvdCBTdXBwb3J0 ICg/KQoKQWN0dWFsbHkgZnJvbSBoYXJkd2FyZSdzIHBvaW50IG9mIHZpZXcsIFNHWCBpcyBub3Qg bWlncmF0YWJsZS4gVGhlcmUgYXJlIHR3bwpyZWFzb25zOgoKICAgIC0gU0dYIGtleSBhcmNoaXRl Y3R1cmUgY2Fubm90IGJlIHZpcnR1YWxpemVkLgoKICAgIEZvciBleGFtcGxlLCBzb21lIGtleXMg YXJlIGJvdW5kIHRvIENQVS4gRm9yIGV4YW1wbGUsIFNlYWxpbmcga2V5LCBFUkVQT1JUCiAgICBr ZXksIGV0Yy4gSWYgVk0gaXMgbWlncmF0ZWQgdG8gYW5vdGhlciBtYWNoaW5lLCB0aGUgc2FtZSBl bmNsYXZlIHdpbGwgZGVyaXZlCiAgICB0aGUgZGlmZmVyZW50IGtleXMuIFRha2luZyBTZWFsaW5n IGtleSBhcyBhbiBleGFtcGxlLCBTZWFsaW5nIGtleSBpcwogICAgdHlwaWNhbGx5IHVzZWQgYnkg ZW5jbGF2ZSAoZW5jbGF2ZSBjYW4gZ2V0IHNlYWxpbmcga2V5IGJ5IEVHRVRLRVkpIHRvICpzZWFs KgogICAgaXRzIHNlY3JldHMgdG8gb3V0c2lkZSAoZXgsIHBlcnNpc3RlbnQgc3RvcmFnZSkgZm9y IGZ1cnRoZXIgdXNlLiBJZiBTZWFsaW5nCiAgICBrZXkgY2hhbmdlcyBhZnRlciBWTSBtaWdyYXRp b24sIHRoZW4gdGhlIGVuY2xhdmUgY2FuIG5ldmVyIGdldCB0aGUgc2VhbGVkCiAgICBzZWNyZXRz IGJhY2sgYnkgdXNpbmcgc2VhbGluZyBrZXksIGFzIGl0IGhhcyBjaGFuZ2VkLCBhbmQgb2xkIHNl YWxpbmcga2V5CiAgICBjYW5ub3QgYmUgZ290IGJhY2suCgogICAgLSBUaGVyZSdzIG5vIEVOQ0xT IHRvIGV2aWN0IEVQQyBwYWdlIHRvIG5vcm1hbCBtZW1vcnksIGJ1dCBhdCB0aGUgbWVhbmluZwog ICAgdGltZSwgc3RpbGwga2VlcCBjb250ZW50IGluIEVQQy4gQ3VycmVudGx5IG9uY2UgRVBDIHBh Z2UgaXMgZXZpY3RlZCwgdGhlIEVQQwogICAgcGFnZSBiZWNvbWVzIGludmFsaWQuIFNvIHRlY2hu aWNhbGx5LCB3ZSBhcmUgdW5hYmxlIHRvIGltcGxlbWVudCBsaXZlCiAgICBtaWdyYXRpb24gKG9y IGNoZWNrIHBvaW50aW5nLCBvciBzbmFwc2hvdCkgZm9yIGVuY2xhdmUuCgpCdXQsIHdpdGggc29t ZSB3b3JrYXJvdW5kLCBhbmQgc29tZSBmYWN0cyBvZiBleGlzdGluZyBTR1ggZHJpdmVyLCB0ZWNo bmljYWxseQp3ZSBhcmUgYWJsZSB0byBzdXBwb3J0IExpdmUgbWlncmF0aW9uIChvciBldmVuIGNo ZWNrIHBvaW50aW5nLCBzbmFwc2hvdCkuIFRoaXMKaXMgYmVjYXVzZToKCiAgICAtIENoYW5naW5n IGtleSAod2hpY2ggaXMgYm91bmQgdG8gQ1BVKSBpcyBub3QgYSBwcm9ibGVtIGluIHJlYWxpdHkK CiAgICBUYWtlIFNlYWxpbmcga2V5IGFzIGFuIGV4YW1wbGUuIExvc2luZyBzZWFsZWQgZGF0YSBp cyBub3QgYSBwcm9ibGVtLCBiZWNhdXNlCiAgICBzZWFsaW5nIGtleSBpcyBvbmx5IHN1cHBvc2Vk IHRvIGVuY3J5cHQgc2VjcmV0cyB0aGF0IGNhbiBiZSBwcm92aXNpb25lZAogICAgYWdhaW4uIFRo ZSB0eXBpY2FsIHdvcmsgbW9kZWwgaXMsIGVuY2xhdmUgZ2V0cyBzZWNyZXRzIHByb3Zpc2lvbmVk IGZyb20KICAgIHJlbW90ZSAoc2VydmljZSBwcm92aWRlciksIGFuZCB1c2Ugc2VhbGluZyBrZXkg dG8gc3RvcmUgaXQgZm9yIGZ1cnRoZXIgdXNlLgogICAgV2hlbiBlbmNsYXZlIHRyaWVzIHRvICp1 bnNlYWwqIHVzZSBzZWFsaW5nIGtleSwgaWYgdGhlIHNlYWxpbmcga2V5IGlzCiAgICBjaGFuZ2Vk LCBlbmNsYXZlIHdpbGwgZmluZCB0aGUgZGF0YSBpcyBzb21lIGtpbmQgb2YgY29ycnVwdGVkIChp bnRlZ3JpdHkKICAgIGNoZWNrIGZhaWx1cmUpLCBzbyBpdCB3aWxsIGFzayBzZWNyZXRzIHRvIGJl IHByb3Zpc2lvbmVkIGFnYWluIGZyb20gcmVtb3RlLgogICAgQW5vdGhlciByZWFzb24gaXMsIGlu IGRhdGEgY2VudGVyLCBWTSdzIHR5cGljYWxseSBzaGFyZSBsb3RzIG9mIGRhdGEsIGFuZCBhcwog ICAgc2VhbGluZyBrZXkgaXMgYm91bmQgdG8gQ1BVLCBpdCBtZWFucyB0aGUgZGF0YSBlbmNyeXB0 ZWQgYnkgb25lIGVuY2xhdmUgb24KICAgIG9uZSBtYWNoaW5lIGNhbm5vdCBiZSBzaGFyZWQgYnkg YW5vdGhlciBlbmNsYXZlIG9uIGFub3RoZXIgbWFoY2luZS4gU28gZnJvbQogICAgU0dYIGFwcCB3 cml0ZXIncyBwb2ludCBvZiB2aWV3LCBkZXZlbG9wZXIgc2hvdWxkIHRyZWF0IFNlYWxpbmcga2V5 IGFzIGEKICAgIGNoYW5nZWFibGUga2V5LCBhbmQgc2hvdWxkIGhhbmRsZSBsb3NlIG9mIHNlYWxp bmcgZGF0YSBhbnl3YXkuIFNlYWxpbmcga2V5CiAgICBzaG91bGQgb25seSBiZSB1c2VkIHRvIHNl YWwgc2VjcmV0cyB0aGF0IGNhbiBiZSBlYXNpbHkgcHJvdmlzaW9uZWQgYWdhaW4uCgogICAgRm9y IG90aGVyIGtleXMgc3VjaCBhcyBFUkVQT1JUIGtleSBhbmQgcHJvdmlzaW9uaW5nIGtleSwgd2hp Y2ggYXJlIHVzZWQgZm9yCiAgICBsb2NhbCBhdHRlc3RhdGlvbiBhbmQgcmVtb3RlIGF0dGVzdGF0 aW9uLCBkdWUgdG8gdGhlIHNlY29uZCByZWFzb24gYmVsb3csCiAgICBsb3NpbmcgdGhlbSBpcyBu b3QgYSBwcm9ibGVtIGVpdGhlci4KCiAgICAtIFN1ZGRlbiBsb3NlIG9mIEVQQyBpcyBub3QgYSBw cm9ibGVtLgoKICAgIE9uIGhhcmR3YXJlLCBFUEMgd2lsbCBiZSBsb3N0IGlmIHN5c3RlbSBnb2Vz IHRvIFMzLVM1LCBvciByZXNldCwgb3IKICAgIHNodXRkb3duLCBhbmQgU0dYIGRyaXZlciBuZWVk IHRvIGhhbmRsZSBsb3NlIG9mIEVQQyBkdWUgdG8gcG93ZXIgdHJhbnNpdGlvbi4KICAgIFRoaXMg aXMgZG9uZSBieSBjb29wZXJhdGlvbiBiZXR3ZWVuIFNHWCBkcml2ZXIgYW5kIHVzZXJzcGFjZSBT R1ggU0RLL2FwcHMuCiAgICBIb3dldmVyIGR1cmluZyBsaXZlIG1pZ3JhdGlvbiwgdGhlcmUgbWF5 IG5vdCBiZSBwb3dlciB0cmFuc2l0aW9uIGluIGd1ZXN0LAogICAgc28gdGhlcmUgbWF5IG5vdCBi ZSBFUEMgbG9zZSBkdXJpbmcgbGl2ZSBtaWdyYXRpb24uIEFuZCB0ZWNobmljYWxseSB3ZQogICAg Y2Fubm90ICpyZWFsbHkqIGxpdmUgbWlncmF0ZSBlbmNsYXZlIChleHBsYWluZWQgYWJvdmUpLCBz byBsb29rcyBpdCdzIG5vdAogICAgZmVhc2libGUuIEJ1dCB0aGUgZmFjdCBpcyB0aGF0IGJvdGgg TGludXggU0dYIGRyaXZlciBhbmQgV2luZG93cyBTR1ggZHJpdmVyCiAgICBoYXZlIGFscmVhZHkg c3VwcG9ydGVkICpzdWRkZW4qIGxvc2Ugb2YgRVBDIChub3QgRVBDIGxvc2UgZHVyaW5nIHBvd2Vy CiAgICB0cmFuc2l0aW9uKSwgd2hpY2ggbWVhbnMgYm90aCBkcml2ZXIgYXJlIGFibGUgdG8gcmVj b3ZlciBpbiBjYXNlIEVQQyBpcyBsb3N0CiAgICBhdCBhbnkgcnVudGltZS4gV2l0aCB0aGlzLCB0 ZWNobmljYWxseSB3ZSBhcmUgYWJsZSB0byBzdXBwb3J0IGxpdmUgbWlncmF0aW9uCiAgICBieSBz aW1wbHkgaWdub3JpbmcgRVBDLiBBZnRlciBWTSBpcyBtaWdyYXRlZCwgdGhlIGRlc3RpbmF0aW9u IFZNIHdpbGwgb25seQogICAgc3VmZmVyICpzdWRkZW4qIGxvc2Ugb2YgRVBDLCB3aGljaCBib3Ro IFdpbmRvd3MgU0dYIGRyaXZlciBhbmQgTGludXggU0dYCiAgICBkcml2ZXIgYXJlIGFscmVhZHkg YWJsZSB0byBoYW5kbGUuCgogICAgQnV0IHdlIG11c3QgcG9pbnQgb3V0IHN1Y2ggKnN1ZGRlbiog bG9zZSBvZiBFUEMgaXMgbm90IGhhcmR3YXJlIGJlaGF2aW9yLAogICAgYW5kIG90aGVyIFNHWCBk cml2ZXIgZm9yIG90aGVyIE9TZXMgKHN1Y2ggYXMgRnJlZUJTRCkgbWF5IG5vdCBpbXBsZW1lbnQK ICAgIHRoaXMsIHNvIGZvciB0aG9zZSBndWVzdHMsIGRlc3RpbmF0aW9uIFZNIHdpbGwgYmVoYXZp b3IgaW4gdW5leHBlY3RlZAogICAgbWFubmVyLiBCdXQgSSBhbSBub3Qgc3VyZSB3ZSBuZWVkIHRv IGNhcmUgYWJvdXQgb3RoZXIgT1Nlcy4KCkZvciB0aGUgc2FtZSByZWFzb24sIHdlIGFyZSBhYmxl IHRvIHN1cHBvcnQgY2hlY2sgcG9pbnRpbmcgZm9yIFNHWCBndWVzdCAob25seQpMaW51eCBhbmQg V2luZG93cyk7CgpGb3Igc25hcHNob3QsIHdlIGNhbiBzdXBwb3J0IHNuYXBzaG90IFNHWCBndWVz dCBieSBlaXRoZXI6CgogICAgLSBTdXNwZW5kIGd1ZXN0IGJlZm9yZSBzbmFwc2hvdCAoczMtczUp LiBUaGlzIHdvcmtzIGZvciBhbGwgZ3Vlc3RzIGJ1dAogICAgICByZXF1aXJlcyB1c2VyIHRvIG1h bnVhbGx5IHN1c3BwZW5kIGd1ZXN0LgogICAgLSBJc3N1ZSBhbiBoeXBlcmNhbGwgdG8gZGVzdHJv eSBndWVzdCdzIEVQQyBpbiBzYXZlX3ZtLiBUaGlzIG9ubHkgd29ya3MgZm9yCiAgICAgIExpbnV4 IGFuZCBXaW5kb3dzIGJ1dCBkb2Vzbid0IHJlcXVpcmUgdXNlciBpbnRlcnZlbnRpb24uCgpXaGF0 J3MgeW91ciBjb21tZW50cz8KCjMuIFJlZmVyZW5jZQoKICAgIC0gSW50ZWwgU0dYIEhvbWVwYWdl CiAgICBodHRwczovL3NvZnR3YXJlLmludGVsLmNvbS9lbi11cy9zZ3gKCiAgICAtIExpbnV4IFNH WCBTREsKICAgIGh0dHBzOi8vMDEub3JnL2ludGVsLXNvZnR3YXJlLWd1YXJkLWV4dGVuc2lvbnMK CiAgICAtIExpbnV4IFNHWCBkcml2ZXIgZm9yIHVwc3RyZWFtaW5nCiAgICBodHRwczovL2dpdGh1 Yi5jb20vMDFvcmcvbGludXgtc2d4CgogICAgLSBJbnRlbCBTR1ggU3BlY2lmaWNhdGlvbiAoU0RN IFZvbCAzRCkKICAgIGh0dHBzOi8vc29mdHdhcmUuaW50ZWwuY29tL3NpdGVzL2RlZmF1bHQvZmls ZXMvbWFuYWdlZC83Yy9mMS8zMzI4MzEtc2RtLXZvbC0zZC5wZGYKCiAgICAtIFBhcGVyOiBJbnRl bCBTR1ggRXhwbGFpbmVkCiAgICBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDE2LzA4Ni5wZGYK CiAgICAtIElTQ0EgMjAxNSB0dXRvcmlhbCBzbGlkZXMgZm9yIEludGVswq4gU0dYIC0gSW50ZWzC riBTb2Z0d2FyZQogICAgaHR0cHM6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvZGVmYXVsdC9m aWxlcy8zMzI2ODAtMDAyLnBkZgoKQm9xdW4gRmVuZyAoNSk6CiAgeGVuOiBtbTogaW50cm9kdWNl IG5vbi1zY3J1YmJhYmxlIHBhZ2VzCiAgeGVuOiBtbTogbWFuYWdlIEVQQyBwYWdlcyBpbiBYZW4g aGVhcHMKICB4ZW46IHg4Ni9tbTogYWRkIFNHWCBFUEMgbWFuYWdlbWVudAogIHhlbjogeDg2OiBh ZGQgZnVuY3Rpb25zIHRvIHBvcHVsYXRlIGFuZCBkZXN0cm95IEVQQyBmb3IgZG9tYWluCiAgeGVu OiB0b29sczogYWRkIFNHWCB0byBhcHBseWluZyBNU1IgcG9saWN5CgpLYWkgSHVhbmcgKDEyKToK ICB4ZW46IHg4NjogZXhwb3NlIFNHWCB0byBIVk0gZG9tYWluIGluIENQVSBmZWF0dXJlc2V0CiAg eGVuOiB4ODY6IGFkZCBlYXJseSBzdGFnZSBTR1ggZmVhdHVyZSBkZXRlY3Rpb24KICB4ZW46IHZt eDogZGV0ZWN0IEVOQ0xTIFZNRVhJVAogIHhlbjogeDg2L21tOiBpbnRyb2R1Y2UgaW9yZW1hcF93 YigpCiAgeGVuOiBwMm06IG5ldyAncDJtX2VwYycgdHlwZSBmb3IgRVBDIG1hcHBpbmcKICB4ZW46 IHg4NjogYWRkIFNHWCBjcHVpZCBoYW5kbGluZyBzdXBwb3J0LgogIHhlbjogdm14OiBoYW5kbGUg U0dYIHJlbGF0ZWQgTVNScwogIHhlbjogdm14OiBoYW5kbGUgRU5DTFMgVk1FWElUCiAgeGVuOiB2 bXg6IGhhbmRsZSBWTUVYSVQgZnJvbSBTR1ggZW5jbGF2ZQogIHhlbjogeDg2OiByZXNldCBFUEMg d2hlbiBndWVzdCBnb3Qgc3VzcGVuZGVkLgogIHhlbjogdG9vbHM6IGFkZCBuZXcgJ3NneCcgcGFy YW1ldGVyIHN1cHBvcnQKICB4ZW46IHRvb2xzOiBhZGQgU0dYIHRvIGFwcGx5aW5nIENQVUlEIHBv bGljeQoKIGRvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duICAgICAgICAgfCAgIDgg KwogdG9vbHMvbGlieGMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiB0 b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oICAgICAgICAgICAgICAgIHwgICA0ICsKIHRvb2xz L2xpYnhjL2luY2x1ZGUveGVuY3RybC5oICAgICAgICAgICAgICAgfCAgMTYgKwogdG9vbHMvbGli eGMveGNfY3B1aWRfeDg2LmMgICAgICAgICAgICAgICAgICB8ICA2OCArKy0KIHRvb2xzL2xpYnhj L3hjX21zcl94ODYuaCAgICAgICAgICAgICAgICAgICAgfCAgMTAgKwogdG9vbHMvbGlieGMveGNf c2d4LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA4MiArKysKIHRvb2xzL2xpYnhsL2xpYnhs LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIHRvb2xzL2xpYnhsL2xpYnhsX2Nw dWlkLmMgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0KIHRvb2xzL2xpYnhsL2xpYnhsX2NyZWF0 ZS5jICAgICAgICAgICAgICAgICAgfCAgMTAgKwogdG9vbHMvbGlieGwvbGlieGxfZG9tLmMgICAg ICAgICAgICAgICAgICAgICB8ICA2NSArKy0KIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgg ICAgICAgICAgICAgICAgfCAgIDIgKwogdG9vbHMvbGlieGwvbGlieGxfbm9jcHVpZC5jICAgICAg ICAgICAgICAgICB8ICAgNCArLQogdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsICAgICAgICAg ICAgICAgICB8ICAxMSArCiB0b29scy9saWJ4bC9saWJ4bF94ODYuYyAgICAgICAgICAgICAgICAg ICAgIHwgIDEyICsKIHRvb2xzL29jYW1sL2xpYnMveGMveGVuY3RybF9zdHVicy5jICAgICAgICAg fCAgMTEgKy0KIHRvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYyAgICAgICAgICAgfCAg MTEgKy0KIHRvb2xzL3hsL3hsX3BhcnNlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgODYg KysrCiB0b29scy94bC94bF9wYXJzZS5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHhlbi9hcmNoL3g4Ni9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogeGVu L2FyY2gveDg2L2NwdS9jb21tb24uYyAgICAgICAgICAgICAgICAgICB8ICAxNSArCiB4ZW4vYXJj aC94ODYvY3B1aWQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYyICsrLQogeGVuL2FyY2gv eDg2L2RvbWN0bC5jICAgICAgICAgICAgICAgICAgICAgICB8ICA4NyArKy0KIHhlbi9hcmNoL3g4 Ni9odm0vaHZtLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogeGVuL2FyY2gveDg2L2h2 bS92bXgvdm1jcy5jICAgICAgICAgICAgICAgICB8ICAxNiArLQogeGVuL2FyY2gveDg2L2h2bS92 bXgvdm14LmMgICAgICAgICAgICAgICAgICB8ICA2OCArKysKIHhlbi9hcmNoL3g4Ni9odm0vdm14 L3Z2bXguYyAgICAgICAgICAgICAgICAgfCAgMTEgKwogeGVuL2FyY2gveDg2L21tLmMgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgOSArLQogeGVuL2FyY2gveDg2L21tL3AybS1lcHQuYyAg ICAgICAgICAgICAgICAgICB8ICAgMyArCiB4ZW4vYXJjaC94ODYvbW0vcDJtLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDQxICsrCiB4ZW4vYXJjaC94ODYvbXNyLmMgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA2ICstCiB4ZW4vYXJjaC94ODYvc2d4LmMgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgODE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9jb21tb24vcGFn ZV9hbGxvYy5jICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKy0KIHhlbi9pbmNsdWRlL2FzbS1h cm0vbW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDkgKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9j cHVmZWF0dXJlLmggICAgICAgICAgICB8ICAgNCArCiB4ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlk LmggICAgICAgICAgICAgICAgIHwgIDI5ICstCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9odm0u aCAgICAgICAgICAgICAgIHwgICAzICsKIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC92bWNz LmggICAgICAgICAgfCAgIDggKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZteC5oICAg ICAgICAgICB8ICAgMyArCiB4ZW4vaW5jbHVkZS9hc20teDg2L21tLmggICAgICAgICAgICAgICAg ICAgIHwgIDE5ICstCiB4ZW4vaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oICAgICAgICAgICAg IHwgICA2ICsKIHhlbi9pbmNsdWRlL2FzbS14ODYvbXNyLmggICAgICAgICAgICAgICAgICAgfCAg IDUgKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wMm0uaCAgICAgICAgICAgICAgICAgICB8ICAxMiAr LQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9zZ3guaCAgICAgICAgICAgICAgICAgICB8ICA4NiArKysK IHhlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4Ni9jcHVmZWF0dXJlc2V0LmggfCAgIDMgKy0KIHhl bi9pbmNsdWRlL3hlbi9tbS5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogeGVuL3Rv b2xzL2dlbi1jcHVpZC5weSAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiA0NyBmaWxlcyBj aGFuZ2VkLCAxNzU3IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHRvb2xzL2xpYnhjL3hjX3NneC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gv eDg2L3NneC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLXg4Ni9zZ3guaAoK LS0gCjIuMTUuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=