From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhishek Lekshmanan Subject: v14.2.0 Nautilus released Date: Tue, 19 Mar 2019 14:58:41 +0100 Message-ID: <87k1gvvucu.fsf@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ceph-announce-bounces-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org Sender: "Ceph-announce" To: ceph-announce-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org, ceph-users-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org, ceph-maintainers-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org, ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ceph-devel-a8pt6IJUokc@public.gmane.org List-Id: ceph-devel.vger.kernel.org CldlJ3JlIGdsYWQgdG8gYW5ub3VuY2UgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgTmF1dGlsdXMgdjE0 LjIuMCBzdGFibGUKc2VyaWVzLiBUaGVyZSBoYXZlIGJlZW4gYSBsb3Qgb2YgY2hhbmdlcyBhY3Jv c3MgY29tcG9uZW50cyBmcm9tIHRoZQpwcmV2aW91cyBDZXBoIHJlbGVhc2VzLCBhbmQgd2UgYWR2 aXNlIGV2ZXJ5b25lIHRvIGdvIHRocm91Z2ggdGhlIHJlbGVhc2UKYW5kIHVwZ3JhZGUgbm90ZXMg Y2FyZWZ1bGx5LgoKVGhlIHJlbGVhc2UgYWxzbyBzYXcgY29tbWl0cyBmcm9tIG92ZXIgMzAwIGNv bnRyaWJ1dG9ycyBhbmQgd2UnZCBsaWtlIHRvCnRoYW5rIGV2ZXJ5b25lIGZyb20gdGhlIGNvbW11 bml0eSBmb3IgbWFraW5nIHRoaXMgcmVsZWFzZSBoYXBwZW4uIFRoZQpuZXh0IG1ham9yIHJlbGVh c2Ugb2YgQ2VwaCB3aWxsIGJlIGNhbGxlZCBPY3RvcHVzLiBDb25zaWRlciBqb2luaW5nCnVzIGlu IHRoZSBzZWNvbmQgZWRpdGlvbiBvZiBDZXBoYWxvY29uLCBhdCBCYXJjZWxvbmEgdGhpcyB5ZWFy Cmh0dHBzOi8vY2VwaC5jb20vY2VwaGFsb2Nvbi9iYXJjZWxvbmEtMjAxOS8KCkZvciBhIGRldGFp bGVkIGNoYW5nZWxvZyBwbGVhc2UgcmVmZXIgdG8gdGhlIG9mZmljaWFsIGJsb2cgZW50cnkgYXQK aHR0cDovL2NlcGguY29tL3JlbGVhc2VzL3YxNC0yLTAtbmF1dGlsdXMtcmVsZWFzZWQvCgpNYWpv ciBDaGFuZ2VzIGZyb20gTWltaWMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotICpEYXNoYm9h cmQqOgoKICBUaGUgQ2VwaCBEYXNoYm9hcmQgaGFzIGdhaW5lZCBhIGxvdCBvZiBuZXcgZnVuY3Rp b25hbGl0eToKCiAgKiBTdXBwb3J0IGZvciBtdWx0aXBsZSB1c2VycyAvIHJvbGVzCiAgKiBTU08g KFNBTUx2MikgZm9yIHVzZXIgYXV0aGVudGljYXRpb24KICAqIEF1ZGl0aW5nIHN1cHBvcnQKICAq IE5ldyBsYW5kaW5nIHBhZ2UsIHNob3dpbmcgbW9yZSBtZXRyaWNzIGFuZCBoZWFsdGggaW5mbwog ICogSTE4TiBzdXBwb3J0CiAgKiBSRVNUIEFQSSBkb2N1bWVudGF0aW9uIHdpdGggU3dhZ2dlciBB UEkKCiAgTmV3IENlcGggbWFuYWdlbWVudCBmZWF0dXJlcyBpbmNsdWRlOgoKICAqIE9TRCBtYW5h Z2VtZW50IChtYXJrIGFzIGRvd24vb3V0LCBjaGFuZ2UgT1NEIHNldHRpbmdzLCByZWNvdmVyeSBw cm9maWxlcykKICAqIENsdXN0ZXIgY29uZmlnIHNldHRpbmdzIGVkaXRvcgogICogQ2VwaCBQb29s IG1hbmFnZW1lbnQgKGNyZWF0ZS9tb2RpZnkvZGVsZXRlKQogICogRUNQIG1hbmFnZW1lbnQKICAq IFJCRCBtaXJyb3JpbmcgY29uZmlndXJhdGlvbgogICogRW1iZWRkZWQgR3JhZmFuYSBEYXNoYm9h cmRzIChkZXJpdmVkIGZyb20gQ2VwaCBNZXRyaWNzKQogICogQ1JVU0ggbWFwIHZpZXdlcgogICog TkZTIEdhbmVzaGEgbWFuYWdlbWVudAogICogaVNDU0kgdGFyZ2V0IG1hbmFnZW1lbnQgKHZpYSBj ZXBoLWlzY3NpKQogICogUkJEIFFvUyBjb25maWd1cmF0aW9uCiAgKiBDZXBoIE1hbmFnZXIgKGNl cGgtbWdyKSBtb2R1bGUgbWFuYWdlbWVudAogICogUHJvbWV0aGV1cyBhbGVydCBNYW5hZ2VtZW50 CgogIEFsc28sIHRoZSBDZXBoIERhc2hib2FyZCBpcyBub3cgc3BsaXQgaW50byBpdHMgb3duIHBh Y2thZ2UgbmFtZWQKICBgYGNlcGgtbWdyLWRhc2hib2FyZGBgLiBZb3UgbWlnaHQgd2FudCB0byBp bnN0YWxsIGl0IHNlcGFyYXRlbHksCiAgaWYgeW91ciBwYWNrYWdlIG1hbmFnZW1lbnQgc29mdHdh cmUgZmFpbHMgdG8gZG8gc28gd2hlbiBpdCBpbnN0YWxscwogIGBgY2VwaC1tZ3JgYC4KCi0gKlJB RE9TKjoKCiAgKiBUaGUgbnVtYmVyIG9mIHBsYWNlbWVudCBncm91cHMgKFBHcykgcGVyIHBvb2wg Y2FuIG5vdyBiZSBkZWNyZWFzZWQKICAgIGF0IGFueSB0aW1lLCBhbmQgdGhlIGNsdXN0ZXIgY2Fu IGBhdXRvbWF0aWNhbGx5IHR1bmUgdGhlIFBHIGNvdW50IDxwZy1hdXRvc2NhbGVyPmBfCiAgICBi YXNlZCBvbiBjbHVzdGVyIHV0aWxpemF0aW9uIG9yIGFkbWluaXN0cmF0b3IgaGludHMuCiAgKiBU aGUgbmV3IDpyZWY6YHYyIHdpcmUgcHJvdG9jb2wgPG1zZ3IyPmAgYnJpbmdzIHN1cHBvcnQgZm9y IGVuY3J5cHRpb24gb24gdGhlIHdpcmUuCiAgKiBQaHlzaWNhbCBgc3RvcmFnZSBkZXZpY2VzIDxk ZXZpY2VzPmBfIGNvbnN1bWVkIGJ5IE9TRCBhbmQgTW9uaXRvciBkYWVtb25zIGFyZQogICAgbm93 IHRyYWNrZWQgYnkgdGhlIGNsdXN0ZXIgYWxvbmcgd2l0aCBoZWFsdGggbWV0cmljcyAoaS5lLiwK ICAgIFNNQVJUKSwgYW5kIHRoZSBjbHVzdGVyIGNhbiBhcHBseSBhIHByZS10cmFpbmVkIHByZWRp Y3Rpb24gbW9kZWwKICAgIG9yIGEgY2xvdWQtYmFzZWQgcHJlZGljdGlvbiBzZXJ2aWNlIHRvIGB3 YXJuIGFib3V0IGV4cGVjdGVkCiAgICBIREQgb3IgU1NEIGZhaWx1cmVzIDxkaXNrcHJlZGljdGlv bj5gXy4KICAqIFRoZSBOVU1BIG5vZGUgZm9yIE9TRCBkYWVtb25zIGNhbiBlYXNpbHkgYmUgbW9u aXRvcmVkIHZpYSB0aGUKICAgIGBgY2VwaCBvc2QgbnVtYS1zdGF0dXNgYCBjb21tYW5kLCBhbmQg Y29uZmlndXJlZCB2aWEgdGhlCiAgICBgYG9zZF9udW1hX25vZGVgYCBjb25maWcgb3B0aW9uLgog ICogV2hlbiBCbHVlU3RvcmUgT1NEcyBhcmUgdXNlZCwgc3BhY2UgdXRpbGl6YXRpb24gaXMgbm93 IGJyb2tlbiBkb3duCiAgICBieSBvYmplY3QgZGF0YSwgb21hcCBkYXRhLCBhbmQgaW50ZXJuYWwg bWV0YWRhdGEsIGJ5IHBvb2wsIGFuZCBieQogICAgcHJlLSBhbmQgcG9zdC0gY29tcHJlc3Npb24g c2l6ZXMuCiAgKiBPU0RzIG1vcmUgZWZmZWN0aXZlbHkgcHJpb3JpdGl6ZSB0aGUgbW9zdCBpbXBv cnRhbnQgUEdzIGFuZAogICAgb2JqZWN0cyB3aGVuIHBlcmZvcm1pbmcgcmVjb3ZlcnkgYW5kIGJh Y2tmaWxsLgogICogUHJvZ3Jlc3MgZm9yIGxvbmctcnVubmluZyBiYWNrZ3JvdW5kIHByb2Nlc3Nl cy0tbGlrZSByZWNvdmVyeQogICAgYWZ0ZXIgYSBkZXZpY2UgZmFpbHVyZS0taXMgbm93IHJlcG9y dGVkIGFzIHBhcnQgb2YgYGBjZXBoCiAgICBzdGF0dXNgYC4KICAqIEFuIGV4cGVyaW1lbnRhbCBg Q291cGxlZC1MYXllciAiQ2xheSIgZXJhc3VyZSBjb2RlCiAgICA8aHR0cHM6Ly93d3cudXNlbml4 Lm9yZy9jb25mZXJlbmNlL2Zhc3QxOC9wcmVzZW50YXRpb24vdmFqaGE+YF8KICAgIHBsdWdpbiBo YXMgYmVlbiBhZGRlZCB0aGF0IHJlZHVjZXMgbmV0d29yayBiYW5kd2lkdGggYW5kIElPIG5lZWRl ZAogICAgZm9yIG1vc3QgcmVjb3Zlcnkgb3BlcmF0aW9ucy4KCi0gKlJHVyo6CgogICogUzMgbGlm ZWN5Y2xlIHRyYW5zaXRpb24gZm9yIHRpZXJpbmcgYmV0d2VlbiBzdG9yYWdlIGNsYXNzZXMuCiAg KiBBIG5ldyB3ZWIgZnJvbnRlbmQgKEJlYXN0KSBoYXMgcmVwbGFjZWQgY2l2ZXR3ZWIgYXMgdGhl IGRlZmF1bHQsCiAgICBpbXByb3Zpbmcgb3ZlcmFsbCBwZXJmb3JtYW5jZS4KICAqIEEgbmV3IHB1 Ymxpc2gvc3Vic2NyaWJlIGluZnJhc3RydWN0dXJlIGFsbG93cyBSR1cgdG8gZmVlZCBldmVudHMK ICAgIHRvIHNlcnZlcmxlc3MgZnJhbWV3b3JrcyBsaWtlIGtuYXRpdmUgb3IgZGF0YSBwaXBlbGll cyBsaWtlIEthZmthLgogICogQSByYW5nZSBvZiBhdXRoZW50aWNhdGlvbiBmZWF0dXJlcywgaW5j bHVkaW5nIFNUUyBmZWRlcmF0aW9uIHVzaW5nCiAgICBPQXV0aDIgYW5kIE9wZW5JRDo6Y29ubmVj dCBhbmQgYW4gT1BBIChPcGVuIFBvbGljeSBBZ2VudCkKICAgIGF1dGhlbnRpY2F0aW9uIGRlbGVn YXRpb24gcHJvdG90eXBlLgogICogVGhlIG5ldyBhcmNoaXZlIHpvbmUgZmVkZXJhdGlvbiBmZWF0 dXJlIGVuYWJsZXMgZnVsbCBwcmVzZXJ2YXRpb24KICAgIG9mIGFsbCBvYmplY3RzIChpbmNsdWRp bmcgaGlzdG9yeSkgaW4gYSBzZXBhcmF0ZSB6b25lLgoKLSAqQ2VwaEZTKjoKCiAgKiBNRFMgc3Rh YmlsaXR5IGhhcyBiZWVuIGdyZWF0bHkgaW1wcm92ZWQgZm9yIGxhcmdlIGNhY2hlcyBhbmQKICAg IGxvbmctcnVubmluZyBjbGllbnRzIHdpdGggYSBsb3Qgb2YgUkFNLiBDYWNoZSB0cmltbWluZyBh bmQgY2xpZW50CiAgICBjYXBhYmlsaXR5IHJlY2FsbCBpcyBub3cgdGhyb3R0bGVkIHRvIHByZXZl bnQgb3ZlcmxvYWRpbmcgdGhlIE1EUy4KICAqIENlcGhGUyBtYXkgbm93IGJlIGV4cG9ydGVkIHZp YSBORlMtR2FuZXNoYSBjbHVzdGVycyBpbiBlbnZpcm9ubWVudHMgbWFuYWdlZAogICAgYnkgUm9v ay4gQ2VwaCBtYW5hZ2VzIHRoZSBjbHVzdGVycyBhbmQgZW5zdXJlcyBoaWdoLWF2YWlsYWJpbGl0 eSBhbmQKICAgIHNjYWxhYmlsaXR5LiBBbiBgaW50cm9kdWN0b3J5IGRlbW8KICAgIDxodHRwczov L2NlcGguY29tL2NvbW11bml0eS9kZXBsb3lpbmctYS1jZXBobmZzLXNlcnZlci1jbHVzdGVyLXdp dGgtcm9vay8+YF8KICAgIGlzIGF2YWlsYWJsZS4gTW9yZSBhdXRvbWF0aW9uIG9mIHRoaXMgZmVh dHVyZSBpcyBleHBlY3RlZCB0byBiZSBmb3J0aGNvbWluZwogICAgaW4gZnV0dXJlIG1pbm9yIHJl bGVhc2VzIG9mIE5hdXRpbHVzLgogICogVGhlIE1EUyBgYG1kc19zdGFuZGJ5X2Zvcl8qYGAsIGBg bW9uX2ZvcmNlX3N0YW5kYnlfYWN0aXZlYGAsIGFuZAogICAgYGBtZHNfc3RhbmRieV9yZXBsYXlg YCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGF2ZSBiZWVuIG9ic29sZXRlZC4gSW5zdGVhZCwKICAg IHRoZSBvcGVyYXRvciA6cmVmOmBtYXkgbm93IHNldCA8bWRzLXN0YW5kYnktcmVwbGF5PmAgdGhl IG5ldwogICAgYGBhbGxvd19zdGFuZGJ5X3JlcGxheWBgIGZsYWcgb24gdGhlIENlcGhGUyBmaWxl IHN5c3RlbS4gVGhpcyBzZXR0aW5nCiAgICBjYXVzZXMgc3RhbmRieXMgdG8gYmVjb21lIHN0YW5k YnktcmVwbGF5IGZvciBhbnkgYXZhaWxhYmxlIHJhbmsgaW4gdGhlIGZpbGUKICAgIHN5c3RlbS4K ICAqIE1EUyBub3cgc3VwcG9ydHMgZHJvcHBpbmcgaXRzIGNhY2hlIHdoaWNoIGNvbmN1cnJlbnRs eSBhc2tzIGNsaWVudHMKICAgIHRvIHRyaW0gdGhlaXIgY2FjaGVzLiBUaGlzIGlzIGRvbmUgdXNp bmcgTURTIGFkbWluIHNvY2tldCBgYGNhY2hlIGRyb3BgYAogICAgY29tbWFuZC4KICAqIEl0IGlz IG5vdyBwb3NzaWJsZSB0byBjaGVjayB0aGUgcHJvZ3Jlc3Mgb2YgYW4gb24tZ29pbmcgc2NydWIg aW4gdGhlIE1EUy4KICAgIEFkZGl0aW9uYWxseSwgYSBzY3J1YiBtYXkgYmUgcGF1c2VkIG9yIGFi b3J0ZWQuIFNlZSA6cmVmOmB0aGUgc2NydWIKICAgIGRvY3VtZW50YXRpb24gPG1kcy1zY3J1Yj5g IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICogQSBuZXcgaW50ZXJmYWNlIGZvciBjcmVhdGluZyB2 b2x1bWVzIGlzIHByb3ZpZGVkIHZpYSB0aGUgYGBjZXBoIHZvbHVtZWBgCiAgICBjb21tYW5kLWxp bmUtaW50ZXJmYWNlLgogICogQSBuZXcgY2VwaGZzLXNoZWxsIHRvb2wgaXMgYXZhaWxhYmxlIGZv ciBtYW5pcHVsYXRpbmcgYSBDZXBoRlMgZmlsZQogICAgc3lzdGVtIHdpdGhvdXQgbW91bnRpbmcu CiAgKiBDZXBoRlMtcmVsYXRlZCBvdXRwdXQgZnJvbSBgYGNlcGggc3RhdHVzYGAgaGFzIGJlZW4g cmVmb3JtYXR0ZWQgZm9yIGJyZXZpdHksCiAgICBjbGFyaXR5LCBhbmQgdXNlZnVsbmVzcy4KICAq IExhenkgSU8gaGFzIGJlZW4gcmV2YW1wZWQuIEl0IGNhbiBiZSB0dXJuZWQgb24gYnkgdGhlIGNs aWVudCB1c2luZyB0aGUgbmV3CiAgICBDRVBIX09fTEFaWSBmbGFnIHRvIHRoZSBgYGNlcGhfb3Bl bmBgIEMvQysrIEFQSSBvciB2aWEgdGhlIGNvbmZpZyBvcHRpb24KICAgIGBgY2xpZW50X2ZvcmNl X2xhenlpb2BgLgogICogQ2VwaEZTIGZpbGUgc3lzdGVtIGNhbiBub3cgYmUgYnJvdWdodCBkb3du IHJhcGlkbHkgdmlhIHRoZSBgYGNlcGggZnMgZmFpbGBgCiAgICBjb21tYW5kLiBTZWUgOnJlZjpg dGhlIGFkbWluaXN0cmF0aW9uIHBhZ2UgPGNlcGhmcy1hZG1pbmlzdHJhdGlvbj5gIGZvcgogICAg bW9yZSBpbmZvcm1hdGlvbi4KCi0gKlJCRCo6CgogICogSW1hZ2VzIGNhbiBiZSBsaXZlLW1pZ3Jh dGVkIHdpdGggbWluaW1hbCBkb3dudGltZSB0byBhc3Npc3Qgd2l0aCBtb3ZpbmcKICAgIGltYWdl cyBiZXR3ZWVuIHBvb2xzIG9yIHRvIG5ldyBsYXlvdXRzLgogICogTmV3IGBgcmJkIHBlcmYgaW1h Z2UgaW90b3BgYCBhbmQgYGByYmQgcGVyZiBpbWFnZSBpb3N0YXRgYCBjb21tYW5kcyBwcm92aWRl CiAgICBhbiBpb3RvcC0gYW5kIGlvc3RhdC1saWtlIElPIG1vbml0b3IgZm9yIGFsbCBSQkQgaW1h Z2VzLgogICogVGhlICpjZXBoLW1nciogUHJvbWV0aGV1cyBleHBvcnRlciBub3cgb3B0aW9uYWxs eSBpbmNsdWRlcyBhbiBJTyBtb25pdG9yCiAgICBmb3IgYWxsIFJCRCBpbWFnZXMuCiAgKiBTdXBw b3J0IGZvciBzZXBhcmF0ZSBpbWFnZSBuYW1lc3BhY2VzIHdpdGhpbiBhIHBvb2wgZm9yIHRlbmFu dCBpc29sYXRpb24uCgotICpNaXNjKjoKCiAgKiBDZXBoIGhhcyBhIG5ldyBzZXQgb2YgOnJlZjpg b3JjaGVzdHJhdG9yIG1vZHVsZXMKICAgIDxvcmNoZXN0cmF0b3ItY2xpLW1vZHVsZT5gIHRvIGRp cmVjdGx5IGludGVyYWN0IHdpdGggZXh0ZXJuYWwKICAgIG9yY2hlc3RyYXRvcnMgbGlrZSBjZXBo LWFuc2libGUsIERlZXBTZWEsIFJvb2ssIG9yIHNpbXBseSBzc2ggdmlhCiAgICBhIGNvbnNpc3Rl bnQgQ0xJIChhbmQsIGV2ZW50dWFsbHksIERhc2hib2FyZCkgaW50ZXJmYWNlLgoKClVwZ3JhZGlu ZyBmcm9tIE1pbWljIG9yIEx1bWlub3VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgpOb3Rlcwp+fn5+fgoKKiBEdXJpbmcgdGhlIHVwZ3JhZGUgZnJvbSBMdW1pbm91cyB0byBOYXV0 aWx1cywgaXQgd2lsbCBub3QgYmUKICBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgT1NEIHVzaW5n IGEgTHVtaW5vdXMgY2VwaC1vc2QgZGFlbW9uIGFmdGVyCiAgdGhlIG1vbml0b3JzIGhhdmUgYmVl biB1cGdyYWRlZCB0byBOYXV0aWx1cy4gIFdlIHJlY29tbWVuZCB5b3UgYXZvaWQgYWRkaW5nCiAg b3IgcmVwbGFjaW5nIGFueSBPU0RzIHdoaWxlIHRoZSB1cGdyYWRlIGlzIGluIHByb2dyZXNzLgoK KiBXZSByZWNvbW1lbmQgeW91IGF2b2lkIGNyZWF0aW5nIGFueSBSQURPUyBwb29scyB3aGlsZSB0 aGUgdXBncmFkZSBpcwogIGluIHByb2dyZXNzLgoKKiBZb3UgY2FuIG1vbml0b3IgdGhlIHByb2dy ZXNzIG9mIHlvdXIgdXBncmFkZSBhdCBlYWNoIHN0YWdlIHdpdGggdGhlCiAgYGBjZXBoIHZlcnNp b25zYGAgY29tbWFuZCwgd2hpY2ggd2lsbCB0ZWxsIHlvdSB3aGF0IGNlcGggdmVyc2lvbihzKSBh cmUKICBydW5uaW5nIGZvciBlYWNoIHR5cGUgb2YgZGFlbW9uLgoKSW5zdHJ1Y3Rpb25zCn5+fn5+ fn5+fn5+fgoKIy4gSWYgeW91ciBjbHVzdGVyIHdhcyBvcmlnaW5hbGx5IGluc3RhbGxlZCB3aXRo IGEgdmVyc2lvbiBwcmlvciB0bwogICBMdW1pbm91cywgZW5zdXJlIHRoYXQgaXQgaGFzIGNvbXBs ZXRlZCBhdCBsZWFzdCBvbmUgZnVsbCBzY3J1YiBvZgogICBhbGwgUEdzIHdoaWxlIHJ1bm5pbmcg THVtaW5vdXMuICBGYWlsdXJlIHRvIGRvIHNvIHdpbGwgY2F1c2UgeW91cgogICBtb25pdG9yIGRh ZW1vbnMgdG8gcmVmdXNlIHRvIGpvaW4gdGhlIHF1b3J1bSBvbiBzdGFydCwgbGVhdmluZyB0aGVt CiAgIG5vbi1mdW5jdGlvbmFsLgoKICAgSWYgeW91IGFyZSB1bnN1cmUgd2hldGhlciBvciBub3Qg eW91ciBMdW1pbm91cyBjbHVzdGVyIGhhcwogICBjb21wbGV0ZWQgYSBmdWxsIHNjcnViIG9mIGFs bCBQR3MsIHlvdSBjYW4gY2hlY2sgeW91ciBjbHVzdGVyJ3MKICAgc3RhdGUgYnkgcnVubmluZzo6 CgogICAgICMgY2VwaCBvc2QgZHVtcCB8IGdyZXAgXmZsYWdzCgogICBJbiBvcmRlciB0byBiZSBh YmxlIHRvIHByb2NlZWQgdG8gTmF1dGlsdXMsIHlvdXIgT1NEIG1hcCBtdXN0IGluY2x1ZGUKICAg dGhlIGBgcmVjb3ZlcnlfZGVsZXRlc2BgIGFuZCBgYHB1cmdlZF9zbmFwZGlyc2BgIGZsYWdzLgoK ICAgSWYgeW91ciBPU0QgbWFwIGRvZXMgbm90IGNvbnRhaW4gYm90aCB0aGVzZSBmbGFncywgeW91 IGNhbiBzaW1wbHkKICAgd2FpdCBmb3IgYXBwcm94aW1hdGVseSAyNC00OCBob3Vycywgd2hpY2gg aW4gYSBzdGFuZGFyZCBjbHVzdGVyCiAgIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGFtcGxlIHRp bWUgZm9yIGFsbCB5b3VyIHBsYWNlbWVudCBncm91cHMgdG8KICAgYmUgc2NydWJiZWQgYXQgbGVh c3Qgb25jZSwgYW5kIHRoZW4gcmVwZWF0IHRoZSBhYm92ZSBwcm9jZXNzIHRvCiAgIHJlY2hlY2su CgogICBIb3dldmVyLCBpZiB5b3UgaGF2ZSBqdXN0IGNvbXBsZXRlZCBhbiB1cGdyYWRlIHRvIEx1 bWlub3VzIGFuZCB3YW50CiAgIHRvIHByb2NlZWQgdG8gTWltaWMgaW4gc2hvcnQgb3JkZXIsIHlv dSBjYW4gZm9yY2UgYSBzY3J1YiBvbiBhbGwKICAgcGxhY2VtZW50IGdyb3VwcyB3aXRoIGEgb25l LWxpbmUgc2hlbGwgY29tbWFuZCwgbGlrZTo6CgogICAgICMgY2VwaCBwZyBkdW1wIHBnc19icmll ZiB8IGN1dCAtZCAiICIgLWYgMSB8IHhhcmdzIC1uMSBjZXBoIHBnIHNjcnViCgogICBZb3Ugc2hv dWxkIHRha2UgaW50byBjb25zaWRlcmF0aW9uIHRoYXQgdGhpcyBmb3JjZWQgc2NydWIgbWF5CiAg IHBvc3NpYmx5IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24geW91ciBDZXBoIGNsaWVudHMnIHBl cmZvcm1hbmNlLgoKIy4gTWFrZSBzdXJlIHlvdXIgY2x1c3RlciBpcyBzdGFibGUgYW5kIGhlYWx0 aHkgKG5vIGRvd24gb3IKICAgcmVjb3ZlcmluZyBPU0RzKS4gIChPcHRpb25hbCwgYnV0IHJlY29t bWVuZGVkLikKCiMuIFNldCB0aGUgYGBub291dGBgIGZsYWcgZm9yIHRoZSBkdXJhdGlvbiBvZiB0 aGUgdXBncmFkZS4gKE9wdGlvbmFsLAogICBidXQgcmVjb21tZW5kZWQuKTo6CgogICAgICMgY2Vw aCBvc2Qgc2V0IG5vb3V0CgojLiBVcGdyYWRlIG1vbml0b3JzIGJ5IGluc3RhbGxpbmcgdGhlIG5l dyBwYWNrYWdlcyBhbmQgcmVzdGFydGluZyB0aGUKICAgbW9uaXRvciBkYWVtb25zLiAgRm9yIGV4 YW1wbGUsIG9uIGVhY2ggbW9uaXRvciBob3N0LDo6CgogICAgICMgc3lzdGVtY3RsIHJlc3RhcnQg Y2VwaC1tb24udGFyZ2V0CgogICBPbmNlIGFsbCBtb25pdG9ycyBhcmUgdXAsIHZlcmlmeSB0aGF0 IHRoZSBtb25pdG9yIHVwZ3JhZGUgaXMKICAgY29tcGxldGUgYnkgbG9va2luZyBmb3IgdGhlIGBg bmF1dGlsdXNgYCBzdHJpbmcgaW4gdGhlIG1vbgogICBtYXAuICBUaGUgY29tbWFuZDo6CgogICAg ICMgY2VwaCBtb24gZHVtcCB8IGdyZXAgbWluX21vbl9yZWxlYXNlCgogICBzaG91bGQgcmVwb3J0 OjoKCiAgICAgbWluX21vbl9yZWxlYXNlIDE0IChuYXV0aWx1cykKCiAgIElmIGl0IGRvZXNuJ3Qs IHRoYXQgaW1wbGllcyB0aGF0IG9uZSBvciBtb3JlIG1vbml0b3JzIGhhc24ndCBiZWVuCiAgIHVw Z3JhZGVkIGFuZCByZXN0YXJ0ZWQgYW5kL29yIHRoZSBxdW9ydW0gZG9lcyBub3QgaW5jbHVkZSBh bGwgbW9uaXRvcnMuCgojLiBVcGdyYWRlIGBgY2VwaC1tZ3JgYCBkYWVtb25zIGJ5IGluc3RhbGxp bmcgdGhlIG5ldyBwYWNrYWdlcyBhbmQKICAgcmVzdGFydGluZyBhbGwgbWFuYWdlciBkYWVtb25z LiAgRm9yIGV4YW1wbGUsIG9uIGVhY2ggbWFuYWdlciBob3N0LDo6CgogICAgICMgc3lzdGVtY3Rs IHJlc3RhcnQgY2VwaC1tZ3IudGFyZ2V0CgogICBQbGVhc2Ugbm90ZSwgaWYgeW91IGFyZSB1c2lu ZyBDZXBoIERhc2hib2FyZCwgeW91IHdpbGwgcHJvYmFibHkgbmVlZCB0bwogICBpbnN0YWxsIGBg Y2VwaC1tZ3ItZGFzaGJvYXJkYGAgc2VwYXJhdGVseSBhZnRlciB1cGdyYWRpbmcgYGBjZXBoLW1n cmBgCiAgIHBhY2thZ2UuIFRoZSBpbnN0YWxsIHNjcmlwdCBvZiBgYGNlcGgtbWdyLWRhc2hib2Fy ZGBgIHdpbGwgcmVzdGFydCB0aGUKICAgbWFuYWdlciBkYWVtb25zIGF1dG9tYXRpY2FsbHkgZm9y IHlvdS4gU28gaW4gdGhpcyBjYXNlLCB5b3UgY2FuIGp1c3Qgc2tpcAogICB0aGUgc3RlcCB0byBy ZXN0YXJ0IHRoZSBkYWVtb25zLgoKICAgVmVyaWZ5IHRoZSBgYGNlcGgtbWdyYGAgZGFlbW9ucyBh cmUgcnVubmluZyBieSBjaGVja2luZyBgYGNlcGgKICAgLXNgYDo6CgogICAgICMgY2VwaCAtcwoK ICAgICAuLi4KICAgICAgIHNlcnZpY2VzOgogICAgICAgIG1vbjogMyBkYWVtb25zLCBxdW9ydW0g Zm9vLGJhcixiYXoKICAgICAgICBtZ3I6IGZvbyhhY3RpdmUpLCBzdGFuZGJ5czogYmFyLCBiYXoK ICAgICAuLi4KICAKIy4gVXBncmFkZSBhbGwgT1NEcyBieSBpbnN0YWxsaW5nIHRoZSBuZXcgcGFj a2FnZXMgYW5kIHJlc3RhcnRpbmcgdGhlCiAgIGNlcGgtb3NkIGRhZW1vbnMgb24gYWxsIE9TRCBo b3N0czo6CgogICAgICMgc3lzdGVtY3RsIHJlc3RhcnQgY2VwaC1vc2QudGFyZ2V0CgogICBZb3Ug Y2FuIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIHRoZSBPU0QgdXBncmFkZXMgd2l0aCB0aGUKICAg YGBjZXBoIHZlcnNpb25zYGAgb3IgYGBjZXBoIG9zZCB2ZXJzaW9uc2BgIGNvbW1hbmRzOjoKCiAg ICAgIyBjZXBoIG9zZCB2ZXJzaW9ucwogICAgIHsKICAgICAgICAiY2VwaCB2ZXJzaW9uIDEzLjIu NSAoLi4uKSBtaW1pYyAoc3RhYmxlKSI6IDEyLAogICAgICAgICJjZXBoIHZlcnNpb24gMTQuMi4w ICguLi4pIG5hdXRpbHVzIChzdGFibGUpIjogMjIsCiAgICAgfQoKIy4gSWYgdGhlcmUgYXJlIGFu eSBPU0RzIGluIHRoZSBjbHVzdGVyIGRlcGxveWVkIHdpdGggY2VwaC1kaXNrIChlLmcuLAogICBh bG1vc3QgYW55IE9TRHMgdGhhdCB3ZXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBNaW1pYyByZWxlYXNl KSwgeW91CiAgIG5lZWQgdG8gdGVsbCBjZXBoLXZvbHVtZSB0byBhZG9wdCByZXNwb25zaWJpbGl0 eSBmb3Igc3RhcnRpbmcgdGhlCiAgIGRhZW1vbnMuICBPbiBlYWNoIGhvc3QgY29udGFpbmluZyBP U0RzLCBlbnN1cmUgdGhlIE9TRHMgYXJlCiAgIGN1cnJlbnRseSBydW5uaW5nLCBhbmQgdGhlbjo6 CgogICAgICMgY2VwaC12b2x1bWUgc2ltcGxlIHNjYW4KICAgICAjIGNlcGgtdm9sdW1lIHNpbXBs ZSBhY3RpdmF0ZSAtLWFsbAoKICAgV2UgcmVjb21tZW5kIHRoYXQgZWFjaCBPU0QgaG9zdCBiZSBy ZWJvb3RlZCBmb2xsb3dpbmcgdGhpcyBzdGVwIHRvCiAgIHZlcmlmeSB0aGF0IHRoZSBPU0RzIHN0 YXJ0IHVwIGF1dG9tYXRpY2FsbHkuCgogICBOb3RlIHRoYXQgY2VwaC12b2x1bWUgZG9lc24ndCBo YXZlIHRoZSBzYW1lIGhvdC1wbHVnIGNhcGFiaWxpdHkKICAgdGhhdCBjZXBoLWRpc2sgZGlkLCB3 aGVyZSBhIG5ld2x5IGF0dGFjaGVkIGRpc2sgaXMgYXV0b21hdGljYWxseQogICBkZXRlY3RlZCB2 aWEgdWRldiBldmVudHMuICBJZiB0aGUgT1NEIGlzbid0IGN1cnJlbnRseSBydW5uaW5nIHdoZW4g dGhlCiAgIGFib3ZlIGBgc2NhbmBgIGNvbW1hbmQgaXMgcnVuLCBvciBhIGNlcGgtZGlzay1iYXNl ZCBPU0QgaXMgbW92ZWQgdG8KICAgYSBuZXcgaG9zdCwgb3IgdGhlIGhvc3QgT1NEIGlzIHJlaW5z dGFsbGVkLCBvciB0aGUKICAgYGAvZXRjL2NlcGgvb3NkYGAgZGlyZWN0b3J5IGlzIGxvc3QsIHlv dSB3aWxsIG5lZWQgdG8gc2NhbiB0aGUgbWFpbgogICBkYXRhIHBhcnRpdGlvbiBmb3IgZWFjaCBj ZXBoLWRpc2sgT1NEIGV4cGxpY2l0bHkuICBGb3IgZXhhbXBsZSw6OgoKICAgICAjIGNlcGgtdm9s dW1lIHNpbXBsZSBzY2FuIC9kZXYvc2RiMQoKICAgVGhlIG91dHB1dCB3aWxsIGluY2x1ZGUgdGhl IGFwcG9wcmlhdGUgYGBjZXBoLXZvbHVtZSBzaW1wbGUKICAgYWN0aXZhdGVgYCBjb21tYW5kIHRv IGVuYWJsZSB0aGUgT1NELgoKIy4gVXBncmFkZSBhbGwgQ2VwaEZTIE1EUyBkYWVtb25zLiAgRm9y IGVhY2ggQ2VwaEZTIGZpbGUgc3lzdGVtLAoKICAgIy4gUmVkdWNlIHRoZSBudW1iZXIgb2YgcmFu a3MgdG8gMS4gIChNYWtlIG5vdGUgb2YgdGhlIG9yaWdpbmFsCiAgICAgIG51bWJlciBvZiBNRFMg ZGFlbW9ucyBmaXJzdCBpZiB5b3UgcGxhbiB0byByZXN0b3JlIGl0IGxhdGVyLik6OgoKCSMgY2Vw aCBzdGF0dXMKCSMgY2VwaCBmcyBzZXQgPGZzX25hbWU+IG1heF9tZHMgMQoKICAgIy4gV2FpdCBm b3IgdGhlIGNsdXN0ZXIgdG8gZGVhY3RpdmF0ZSBhbnkgbm9uLXplcm8gcmFua3MgYnkKICAgICAg cGVyaW9kaWNhbGx5IGNoZWNraW5nIHRoZSBzdGF0dXM6OgoKCSMgY2VwaCBzdGF0dXMKCiAgICMu IFRha2UgYWxsIHN0YW5kYnkgTURTIGRhZW1vbnMgb2ZmbGluZSBvbiB0aGUgYXBwcm9wcmlhdGUg aG9zdHMgd2l0aDo6CgoJIyBzeXN0ZW1jdGwgc3RvcCBjZXBoLW1kc0A8ZGFlbW9uX25hbWU+Cgog ICAjLiBDb25maXJtIHRoYXQgb25seSBvbmUgTURTIGlzIG9ubGluZSBhbmQgaXMgcmFuayAwIGZv ciB5b3VyIEZTOjoKCgkjIGNlcGggc3RhdHVzCgogICAjLiBVcGdyYWRlIHRoZSBsYXN0IHJlbWFp bmluZyBNRFMgZGFlbW9uIGJ5IGluc3RhbGxpbmcgdGhlIG5ldwogICAgICBwYWNrYWdlcyBhbmQg cmVzdGFydGluZyB0aGUgZGFlbW9uOjoKCiAgICAgICAgIyBzeXN0ZW1jdGwgcmVzdGFydCBjZXBo LW1kcy50YXJnZXQKCiAgICMuIFJlc3RhcnQgYWxsIHN0YW5kYnkgTURTIGRhZW1vbnMgdGhhdCB3 ZXJlIHRha2VuIG9mZmxpbmU6OgoKCSMgc3lzdGVtY3RsIHN0YXJ0IGNlcGgtbWRzLnRhcmdldAoK ICAgIy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYGBtYXhfbWRzYGAgZm9yIHRoZSB2 b2x1bWU6OgoKCSMgY2VwaCBmcyBzZXQgPGZzX25hbWU+IG1heF9tZHMgPG9yaWdpbmFsX21heF9t ZHM+CgojLiBVcGdyYWRlIGFsbCByYWRvc2d3IGRhZW1vbnMgYnkgdXBncmFkaW5nIHBhY2thZ2Vz IGFuZCByZXN0YXJ0aW5nCiAgIGRhZW1vbnMgb24gYWxsIGhvc3RzOjoKCiAgICAgIyBzeXN0ZW1j dGwgcmVzdGFydCByYWRvc2d3LnRhcmdldAoKIy4gQ29tcGxldGUgdGhlIHVwZ3JhZGUgYnkgZGlz YWxsb3dpbmcgcHJlLU5hdXRpbHVzIE9TRHMgYW5kIGVuYWJsaW5nCiAgIGFsbCBuZXcgTmF1dGls dXMtb25seSBmdW5jdGlvbmFsaXR5OjoKCiAgICAgIyBjZXBoIG9zZCByZXF1aXJlLW9zZC1yZWxl YXNlIG5hdXRpbHVzCgojLiBJZiB5b3Ugc2V0IGBgbm9vdXRgYCBhdCB0aGUgYmVnaW5uaW5nLCBi ZSBzdXJlIHRvIGNsZWFyIGl0IHdpdGg6OgoKICAgICAjIGNlcGggb3NkIHVuc2V0IG5vb3V0Cgoj LiBWZXJpZnkgdGhlIGNsdXN0ZXIgaXMgaGVhbHRoeSB3aXRoIGBgY2VwaCBoZWFsdGhgYC4KCiMu IFRvIGVuYWJsZSB0aGUgbmV3IDpyZWY6YHYyIG5ldHdvcmsgcHJvdG9jb2wgPG1zZ3IyPmAsIGlz c3VlIHRoZQogICBmb2xsb3dpbmcgY29tbWFuZDo6CgogICAgIGNlcGggbW9uIGVuYWJsZS1tc2dy MgoKICAgVGhpcyB3aWxsIGluc3RydWN0IGFsbCBtb25pdG9ycyB0aGF0IGJpbmQgdG8gdGhlIG9s ZCBkZWZhdWx0IHBvcnQKICAgNjc4OSBmb3IgdGhlIGxlZ2FjeSB2MSBwcm90b2NvbCB0byBhbHNv IGJpbmQgdG8gdGhlIG5ldyAzMzAwIHYyCiAgIHByb3RvY29sIHBvcnQuICBUbyBzZWUgaWYgYWxs IG1vbml0b3JzIGhhdmUgYmVlbiB1cGRhdGVkLDo6CgogICAgIGNlcGggbW9uIGR1bXAKCiAgIGFu ZCB2ZXJpZnkgdGhhdCBlYWNoIG1vbml0b3IgaGFzIGJvdGggYSBgYHYyOmBgIGFuZCBgYHYxOmBg IGFkZHJlc3MKICAgbGlzdGVkLgoKIy4gRm9yIGVhY2ggaG9zdCB0aGF0IGhhcyBiZWVuIHVwZ3Jh ZGVkLCB5b3Ugc2hvdWxkIHVwZGF0ZSB5b3VyCiAgIGBgY2VwaC5jb25mYGAgZmlsZSBzbyB0aGF0 IGl0IGVpdGhlciBzcGVjaWZpZXMgbm8gbW9uaXRvciBwb3J0IChpZgogICB5b3UgYXJlIHJ1bm5p bmcgdGhlIG1vbml0b3JzIG9uIHRoZSBkZWZhdWx0IHBvcnRzKSBvciByZWZlcmVuY2VzCiAgIGJv dGggdGhlIHYyIGFuZCB2MSBhZGRyZXNzZXMgYW5kIHBvcnRzIGV4cGxpY2l0bHkuICBUaGluZ3Mg d2lsbAogICBzdGlsbCB3b3JrIGlmIG9ubHkgdGhlIHYxIElQIGFuZCBwb3J0IGFyZSBsaXN0ZWQs IGJ1dCBlYWNoIENMSQogICBpbnN0YW50aWF0aW9uIG9yIGRhZW1vbiB3aWxsIG5lZWQgdG8gcmVj b25uZWN0IGFmdGVyIGxlYXJuaW5nIHRoZQogICBtb25pdG9ycyBhbHNvIHNwZWFrIHRoZSB2MiBw cm90b2NvbCwgc2xvd2luZyB0aGluZ3MgZG93biBhIGJpdCBhbmQKICAgcHJldmVudGluZyBhIGZ1 bGwgdHJhbnNpdGlvbiB0byB0aGUgdjIgcHJvdG9jb2wuCgogICBUaGlzIGlzIGFsc28gYSBnb29k IHRpbWUgdG8gZnVsbHkgdHJhbnNpdGlvbiBhbnkgY29uZmlnIG9wdGlvbnMgaW4KICAgYGBjZXBo LmNvbmZgYCBpbnRvIHRoZSBjbHVzdGVyJ3MgY29uZmlndXJhdGlvbiBkYXRhYmFzZS4gIE9uIGVh Y2ggaG9zdCwKICAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGltcG9ydCBh bnkgb3B0aW9ucyBpbnRvIHRoZQogICBtb25pdG9ycyB3aXRoOjoKCiAgICAgY2VwaCBjb25maWcg YXNzaW1pbGF0ZS1jb25mIC1pIC9ldGMvY2VwaC9jZXBoLmNvbmYKCiAgIFlvdSBjYW4gc2VlIHRo ZSBjbHVzdGVyJ3MgY29uZmlndXJhdGlvbiBkYXRhYmFzZSB3aXRoOjoKCiAgICAgY2VwaCBjb25m aWcgZHVtcAogICAgIAogICBUbyBjcmVhdGUgYSBtaW5pbWFsIGJ1dCBzdWZmaWNpZW50IGBgY2Vw aC5jb25mYGAgZm9yIGVhY2ggaG9zdCw6OgoKICAgICBjZXBoIGNvbmZpZyBnZW5lcmF0ZS1taW5p bWFsLWNvbmYgPiAvZXRjL2NlcGgvY2VwaC5jb25mCgogICBCZSBzdXJlIHRvIHVzZSB0aGlzIG5l dyBjb25maWcgb25seSBvbiBob3N0cyB0aGF0IGhhdmUgYmVlbgogICB1cGdyYWRlZCB0byBOYXV0 aWx1cywgYXMgaXQgbWF5IGNvbnRhaW4gYSBgYG1vbl9ob3N0YGAgdmFsdWUgdGhhdAogICBpbmNs dWRlcyB0aGUgbmV3IGBgdjI6YGAgYW5kIGBgdjE6YGAgcHJlZml4ZXMgZm9yIElQIGFkZHJlc3Nl cyB0aGF0CiAgIGlzIG9ubHkgdW5kZXJzdG9vZCBieSBOYXV0aWx1cy4KCiAgIEZvciBtb3JlIGlu Zm9ybWF0aW9uLCBzZWUgOnJlZjpgbXNncjJfY2VwaF9jb25mYC4KCiMuIENvbnNpZGVyIGVuYWJs aW5nIHRoZSA6cmVmOmB0ZWxlbWV0cnkgbW9kdWxlIDx0ZWxlbWV0cnk+YCB0byBzZW5kCiAgIGFu b255bWl6ZWQgdXNhZ2Ugc3RhdGlzdGljcyBhbmQgY3Jhc2ggaW5mb3JtYXRpb24gdG8gdGhlIENl cGgKICAgdXBzdHJlYW0gZGV2ZWxvcGVycy4gIFRvIHNlZSB3aGF0IHdvdWxkIGJlIHJlcG9ydGVk ICh3aXRob3V0IGFjdHVhbGx5CiAgIHNlbmRpbmcgYW55IGluZm9ybWF0aW9uIHRvIGFueW9uZSks OjoKCiAgICAgY2VwaCBtZ3IgbW9kdWxlIGVuYWJsZSB0ZWxlbWV0cnkKICAgICBjZXBoIHRlbGVt ZXRyeSBzaG93CgogICBJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggdGhlIGRhdGEgdGhhdCBp cyByZXBvcnRlZCwgeW91IGNhbiBvcHQtaW4gdG8KICAgYXV0b21hdGljYWxseSByZXBvcnQgdGhl IGhpZ2gtbGV2ZWwgY2x1c3RlciBtZXRhZGF0YSB3aXRoOjoKCiAgICAgY2VwaCB0ZWxlbWV0cnkg b24KCiAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZWxlbWV0cnkgbW9kdWxlLCBz ZWUgYHRoZQogICBkb2N1bWVudGF0aW9uIDx0ZWxlbWV0cnk+YF8uCgoKVXBncmFkaW5nIGZyb20g cHJlLUx1bWlub3VzIHJlbGVhc2VzIChsaWtlIEpld2VsKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpZb3UgKm11c3QqIGZpcnN0IHVwZ3JhZGUgdG8g THVtaW5vdXMgKDEyLjIueikgYmVmb3JlIGF0dGVtcHRpbmcgYW4KdXBncmFkZSB0byBOYXV0aWx1 cy4gIEluIGFkZGl0aW9uLCB5b3VyIGNsdXN0ZXIgbXVzdCBoYXZlIGNvbXBsZXRlZCBhdApsZWFz dCBvbmUgc2NydWIgb2YgYWxsIFBHcyB3aGlsZSBydW5uaW5nIEx1bWlub3VzLCBzZXR0aW5nIHRo ZQpgYHJlY292ZXJ5X2RlbGV0ZXNgYCBhbmQgYGBwdXJnZWRfc25hcGRpcnNgYCBmbGFncyBpbiB0 aGUgT1NEIG1hcC4KCgpVcGdyYWRlIGNvbXBhdGliaWxpdHkgbm90ZXMKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCgpUaGVzZSBjaGFuZ2VzIG9jY3VycmVkIGJldHdlZW4gdGhlIE1pbWljIGFu ZCBOYXV0aWx1cyByZWxlYXNlcy4KCiogYGBjZXBoIHBnIHN0YXRgYCBvdXRwdXQgaGFzIGJlZW4g bW9kaWZpZWQgaW4ganNvbgogIGZvcm1hdCB0byBtYXRjaCBgYGNlcGggZGZgYCBvdXRwdXQ6Cgog IC0gInJhd19ieXRlcyIgZmllbGQgcmVuYW1lZCB0byAidG90YWxfYnl0ZXMiCiAgLSAicmF3X2J5 dGVzX2F2YWlsIiBmaWVsZCByZW5hbWVkIHRvICJ0b3RhbF9ieXRlc19hdmFpbCIKICAtICJyYXdf Ynl0ZXNfYXZhaWwiIGZpZWxkIHJlbmFtZWQgdG8gInRvdGFsX2J5dGVzX2F2YWlsIgogIC0gInJh d19ieXRlc191c2VkIiBmaWVsZCByZW5hbWVkIHRvICJ0b3RhbF9ieXRlc19yYXdfdXNlZCIKICAt ICJ0b3RhbF9ieXRlc191c2VkIiBmaWVsZCBhZGRlZCB0byByZXByZXNlbnQgdGhlIHNwYWNlIChh Y2N1bXVsYXRlZCBvdmVyCiAgICAgYWxsIE9TRHMpIGFsbG9jYXRlZCBwdXJlbHkgZm9yIGRhdGEg b2JqZWN0cyBrZXB0IGF0IGJsb2NrKHNsb3cpIGRldmljZQogIAoqIGBgY2VwaCBkZiBbZGV0YWls XWBgIG91dHB1dCAoR0xPQkFMIHNlY3Rpb24pIGhhcyBiZWVuIG1vZGlmaWVkIGluIHBsYWluCiAg Zm9ybWF0OgoKICAtIG5ldyAnVVNFRCcgY29sdW1uIHNob3dzIHRoZSBzcGFjZSAoYWNjdW11bGF0 ZWQgb3ZlciBhbGwgT1NEcykgYWxsb2NhdGVkCiAgICBwdXJlbHkgZm9yIGRhdGEgb2JqZWN0cyBr ZXB0IGF0IGJsb2NrKHNsb3cpIGRldmljZS4KICAtICdSQVcgVVNFRCcgaXMgbm93IGEgc3VtIG9m ICdVU0VEJyBzcGFjZSBhbmQgc3BhY2UgYWxsb2NhdGVkL3Jlc2VydmVkIGF0CiAgICAgYmxvY2sg ZGV2aWNlIGZvciBDZXBoIHB1cnBvc2VzLCBlLmcuIEJsdWVGUyBwYXJ0IGZvciBCbHVlU3RvcmUu CgoqIGBgY2VwaCBkZiBbZGV0YWlsXWBgIG91dHB1dCAoR0xPQkFMIHNlY3Rpb24pIGhhcyBiZWVu IG1vZGlmaWVkIGluIGpzb24KICBmb3JtYXQ6CiAgCiAgLSAndG90YWxfdXNlZF9ieXRlcycgY29s dW1uIG5vdyBzaG93cyB0aGUgc3BhY2UgKGFjY3VtdWxhdGVkIG92ZXIgYWxsIE9TRHMpCiAgICBh bGxvY2F0ZWQgcHVyZWx5IGZvciBkYXRhIG9iamVjdHMga2VwdCBhdCBibG9jayhzbG93KSBkZXZp Y2UKICAtIG5ldyAndG90YWxfdXNlZF9yYXdfYnl0ZXMnIGNvbHVtbiBzaG93cyBhIHN1bSBvZiAn VVNFRCcgc3BhY2UgYW5kIHNwYWNlCiAgICBhbGxvY2F0ZWQvcmVzZXJ2ZWQgYXQgYmxvY2sgZGV2 aWNlIGZvciBDZXBoIHB1cnBvc2VzLCBlLmcuIEJsdWVGUyBwYXJ0IGZvcgogICAgQmx1ZVN0b3Jl LgoKKiBgYGNlcGggZGYgW2RldGFpbF1gYCBvdXRwdXQgKFBPT0xTIHNlY3Rpb24pIGhhcyBiZWVu IG1vZGlmaWVkIGluIHBsYWluCiAgZm9ybWF0OgogIAogIC0gJ0JZVEVTIFVTRUQnIGNvbHVtbiBy ZW5hbWVkIHRvICdTVE9SRUQnLiBSZXByZXNlbnRzIGFtb3VudCBvZiBkYXRhCiAgICBzdG9yZWQg YnkgdGhlIHVzZXIuCiAgLSAnVVNFRCcgY29sdW1uIG5vdyByZXByZXNlbnQgYW1vdW50IG9mIHNw YWNlIGFsbG9jYXRlZCBwdXJlbHkgZm9yIGRhdGEKICAgIGJ5IGFsbCBPU0Qgbm9kZXMgaW4gS0Iu CiAgLSAnUVVPVEEgQllURVMnLCAnUVVPVEEgT0JKRUNUUycgYXJlbid0IHNob3dlZCBhbnltb3Jl IGluIG5vbi1kZXRhaWxlZCBtb2RlLgogIC0gbmV3IGNvbHVtbiAnVVNFRCBDT01QUicgLSBhbW91 bnQgb2Ygc3BhY2UgYWxsb2NhdGVkIGZvciBjb21wcmVzc2VkCiAgICBkYXRhLiBpLmUuLCBjb21w cmVzc2VkIGRhdGEgcGx1cyBhbGwgdGhlIGFsbG9jYXRpb24sIHJlcGxpY2F0aW9uIGFuZCBlcmFz dXJlCiAgICBjb2Rpbmcgb3ZlcmhlYWQuCiAgLSBuZXcgY29sdW1uICdVTkRFUiBDT01QUicgLSBh bW91bnQgb2YgZGF0YSBwYXNzZWQgdGhyb3VnaCBjb21wcmVzc2lvbgogICAgKHN1bW1lZCBvdmVy IGFsbCByZXBsaWNhcykgYW5kIGJlbmVmaWNpYWwgZW5vdWdoIHRvIGJlIHN0b3JlZCBpbiBhCiAg ICBjb21wcmVzc2VkIGZvcm0uCiAgLSBTb21lIGNvbHVtbnMgcmVvcmRlcmluZwoKKiBgYGNlcGgg ZGYgW2RldGFpbF1gYCBvdXRwdXQgKFBPT0xTIHNlY3Rpb24pIGhhcyBiZWVuIG1vZGlmaWVkIGlu IGpzb24KICBmb3JtYXQ6CiAgCiAgLSAnYnl0ZXMgdXNlZCcgY29sdW1uIHJlbmFtZWQgdG8gJ3N0 b3JlZCcuIFJlcHJlc2VudHMgYW1vdW50IG9mIGRhdGEKICAgIHN0b3JlZCBieSB0aGUgdXNlci4K ICAtICdyYXcgYnl0ZXMgdXNlZCcgY29sdW1uIHJlbmFtZWQgdG8gInN0b3JlZF9yYXciLiBUb3Rh bHMgb2YgdXNlciBkYXRhCiAgICAgb3ZlciBhbGwgT1NEIGV4Y2x1ZGluZyBkZWdyYWRlZC4KICAt IG5ldyAnYnl0ZXNfdXNlZCcgY29sdW1uIG5vdyByZXByZXNlbnQgYW1vdW50IG9mIHNwYWNlIGFs bG9jYXRlZCBieSAKICAgIGFsbCBPU0Qgbm9kZXMuCiAgLSAna2JfdXNlZCcgY29sdW1uIC0gdGhl IHNhbWUgYXMgJ2J5dGVzX3VzZWQnIGJ1dCBpbiBLQi4KICAtIG5ldyBjb2x1bW4gJ2NvbXByZXNz X2J5dGVzX3VzZWQnIC0gYW1vdW50IG9mIHNwYWNlIGFsbG9jYXRlZCBmb3IgY29tcHJlc3NlZAog ICAgZGF0YS4gaS5lLiwgY29tcHJlc3NlZCBkYXRhIHBsdXMgYWxsIHRoZSBhbGxvY2F0aW9uLCBy ZXBsaWNhdGlvbiBhbmQgZXJhc3VyZQogICAgY29kaW5nIG92ZXJoZWFkLgogIC0gbmV3IGNvbHVt biAnY29tcHJlc3NfdW5kZXJfYnl0ZXMnIGFtb3VudCBvZiBkYXRhIHBhc3NlZCB0aHJvdWdoIGNv bXByZXNzaW9uCiAgICAoc3VtbWVkIG92ZXIgYWxsIHJlcGxpY2FzKSBhbmQgYmVuZWZpY2lhbCBl bm91Z2ggdG8gYmUgc3RvcmVkIGluIGEKICAgIGNvbXByZXNzZWQgZm9ybS4KCiogYGByYWRvcyBk ZiBbZGV0YWlsXWBgIG91dHB1dCAoUE9PTFMgc2VjdGlvbikgaGFzIGJlZW4gbW9kaWZpZWQgaW4g cGxhaW4KICBmb3JtYXQ6CiAgCiAgLSAnVVNFRCcgY29sdW1uIG5vdyBzaG93cyB0aGUgc3BhY2Ug KGFjY3VtdWxhdGVkIG92ZXIgYWxsIE9TRHMpIGFsbG9jYXRlZAogICAgcHVyZWx5IGZvciBkYXRh IG9iamVjdHMga2VwdCBhdCBibG9jayhzbG93KSBkZXZpY2UuCiAgLSBuZXcgY29sdW1uICdVU0VE IENPTVBSJyAtIGFtb3VudCBvZiBzcGFjZSBhbGxvY2F0ZWQgZm9yIGNvbXByZXNzZWQKICAgIGRh dGEuIGkuZS4sIGNvbXByZXNzZWQgZGF0YSBwbHVzIGFsbCB0aGUgYWxsb2NhdGlvbiwgcmVwbGlj YXRpb24gYW5kIGVyYXN1cmUKICAgIGNvZGluZyBvdmVyaGVhZC4KICAtIG5ldyBjb2x1bW4gJ1VO REVSIENPTVBSJyAtIGFtb3VudCBvZiBkYXRhIHBhc3NlZCB0aHJvdWdoIGNvbXByZXNzaW9uCiAg ICAoc3VtbWVkIG92ZXIgYWxsIHJlcGxpY2FzKSBhbmQgYmVuZWZpY2lhbCBlbm91Z2ggdG8gYmUg c3RvcmVkIGluIGEKICAgIGNvbXByZXNzZWQgZm9ybS4KCiogYGByYWRvcyBkZiBbZGV0YWlsXWBg IG91dHB1dCAoUE9PTFMgc2VjdGlvbikgaGFzIGJlZW4gbW9kaWZpZWQgaW4ganNvbgogIGZvcm1h dDoKICAKICAtICdzaXplX2J5dGVzJyBhbmQgJ3NpemVfa2InIGNvbHVtbnMgbm93IHNob3cgdGhl IHNwYWNlIChhY2N1bXVsYXRlZAogICAgb3ZlciBhbGwgT1NEcykgYWxsb2NhdGVkIHB1cmVseSBm b3IgZGF0YSBvYmplY3RzIGtlcHQgYXQgYmxvY2sKICAgIGRldmljZS4KICAtIG5ldyBjb2x1bW4g J2NvbXByZXNzX2J5dGVzX3VzZWQnIC0gYW1vdW50IG9mIHNwYWNlIGFsbG9jYXRlZCBmb3IgY29t cHJlc3NlZAogICAgZGF0YS4gaS5lLiwgY29tcHJlc3NlZCBkYXRhIHBsdXMgYWxsIHRoZSBhbGxv Y2F0aW9uLCByZXBsaWNhdGlvbiBhbmQgZXJhc3VyZQogICAgY29kaW5nIG92ZXJoZWFkLgogIC0g bmV3IGNvbHVtbiAnY29tcHJlc3NfdW5kZXJfYnl0ZXMnIGFtb3VudCBvZiBkYXRhIHBhc3NlZCB0 aHJvdWdoIGNvbXByZXNzaW9uCiAgICAoc3VtbWVkIG92ZXIgYWxsIHJlcGxpY2FzKSBhbmQgYmVu ZWZpY2lhbCBlbm91Z2ggdG8gYmUgc3RvcmVkIGluIGEKICAgIGNvbXByZXNzZWQgZm9ybS4KCiog YGBjZXBoIHBnIGR1bXBgYCBvdXRwdXQgKHRvdGFscyBzZWN0aW9uKSBoYXMgYmVlbiBtb2RpZmll ZCBpbiBqc29uCiAgZm9ybWF0OgogIAogIC0gbmV3ICdVU0VEJyBjb2x1bW4gc2hvd3MgdGhlIHNw YWNlIChhY2N1bXVsYXRlZCBvdmVyIGFsbCBPU0RzKSBhbGxvY2F0ZWQKICAgIHB1cmVseSBmb3Ig ZGF0YSBvYmplY3RzIGtlcHQgYXQgYmxvY2soc2xvdykgZGV2aWNlLgogIC0gJ1VTRURfUkFXJyBp cyBub3cgYSBzdW0gb2YgJ1VTRUQnIHNwYWNlIGFuZCBzcGFjZSBhbGxvY2F0ZWQvcmVzZXJ2ZWQg YXQKICAgIGJsb2NrIGRldmljZSBmb3IgQ2VwaCBwdXJwb3NlcywgZS5nLiBCbHVlRlMgcGFydCBm b3IgQmx1ZVN0b3JlLgoKKiBUaGUgYGBjZXBoIG9zZCBybWBgIGNvbW1hbmQgaGFzIGJlZW4gZGVw cmVjYXRlZC4gIFVzZXJzIHNob3VsZCB1c2UKICBgYGNlcGggb3NkIGRlc3Ryb3lgYCBvciBgYGNl cGggb3NkIHB1cmdlYGAgKGJ1dCBhZnRlciBmaXJzdCBjb25maXJtaW5nIGl0IGlzCiAgc2FmZSB0 byBkbyBzbyB2aWEgdGhlIGBgY2VwaCBvc2Qgc2FmZS10by1kZXN0cm95YGAgY29tbWFuZCkuCgoq IFRoZSBNRFMgbm93IHN1cHBvcnRzIGRyb3BwaW5nIGl0cyBjYWNoZSBmb3IgdGhlIHB1cnBvc2Vz IG9mIGJlbmNobWFya2luZy46OgoKICAgIGNlcGggdGVsbCBtZHMuKiBjYWNoZSBkcm9wIDx0aW1l b3V0PgoKICBOb3RlIHRoYXQgdGhlIE1EUyBjYWNoZSBpcyBjb29wZXJhdGl2ZWx5IG1hbmFnZWQg YnkgdGhlIGNsaWVudHMuIEl0IGlzCiAgbmVjZXNzYXJ5IGZvciBjbGllbnRzIHRvIGdpdmUgdXAg Y2FwYWJpbGl0aWVzIGluIG9yZGVyIGZvciB0aGUgTURTIHRvIGZ1bGx5CiAgZHJvcCBpdHMgY2Fj aGUuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGFza2luZyBhbGwgY2xpZW50cyB0byB0cmltIGFz IG1hbnkKICBjYXBzIGFzIHBvc3NpYmxlLiBUaGUgdGltZW91dCBhcmd1bWVudCB0byB0aGUgYGBj YWNoZSBkcm9wYGAgY29tbWFuZCBjb250cm9scwogIGhvdyBsb25nIHRoZSBNRFMgd2FpdHMgZm9y IGNsaWVudHMgdG8gY29tcGxldGUgdHJpbW1pbmcgY2Fwcy4gVGhpcyBpcyBvcHRpb25hbAogIGFu ZCBpcyAwIGJ5IGRlZmF1bHQgKG5vIHRpbWVvdXQpLiBLZWVwIGluIG1pbmQgdGhhdCBjbGllbnRz IG1heSBzdGlsbCByZXRhaW4KICBjYXBzIHRvIG9wZW4gZmlsZXMgd2hpY2ggd2lsbCBwcmV2ZW50 IHRoZSBtZXRhZGF0YSBmb3IgdGhvc2UgZmlsZXMgZnJvbSBiZWluZwogIGRyb3BwZWQgYnkgYm90 aCB0aGUgY2xpZW50IGFuZCB0aGUgTURTLiAoVGhpcyBpcyBhbiBlcXVpdmFsZW50IHNjZW5hcmlv IHRvCiAgZHJvcHBpbmcgdGhlIExpbnV4IHBhZ2UvYnVmZmVyL2lub2RlL2RlbnRyeSBjYWNoZXMg d2l0aCBzb21lIHByb2Nlc3NlcyBwaW5uaW5nCiAgc29tZSBpbm9kZXMvZGVudHJpZXMvcGFnZXMg aW4gY2FjaGUuKQoKKiBUaGUgYGBtb25faGVhbHRoX3ByZWx1bWlub3VzX2NvbXBhdGBgIGFuZAog IGBgbW9uX2hlYWx0aF9wcmVsdW1pbm91c19jb21wYXRfd2FybmluZ2BgIGNvbmZpZyBvcHRpb25z IGFyZQogIHJlbW92ZWQsIGFzIHRoZSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgaXMgbW9yZSB0aGFu IHR3byB2ZXJzaW9ucyBvbGQuCiAgQW55IGxlZ2FjeSBtb25pdG9yaW5nIHN5c3RlbSBleHBlY3Rp bmcgSmV3ZWwtc3R5bGUgaGVhbHRoIG91dHB1dAogIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRv IHdvcmsgd2l0aCBOYXV0aWx1cy4KCiogTmF1dGlsdXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbnkg ZGlzdHJvcyBzdGlsbCBydW5uaW5nIHVwc3RhcnQgc28gdXBzdGFydAogIHNwZWNpZmljIGZpbGVz IGFuZCByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLgoKKiBUaGUgYGBjZXBoIHBnIDxwZ2lk PiBsaXN0X21pc3NpbmdgYCBjb21tYW5kIGhhcyBiZWVuIHJlbmFtZWQgdG8KICBgYGNlcGggcGcg PHBnaWQ+IGxpc3RfdW5mb3VuZGBgIHRvIGJldHRlciBtYXRjaCBpdHMgYmVoYXZpb3VyLgoKKiBU aGUgKnJiZC1taXJyb3IqIGRhZW1vbiBjYW4gbm93IHJldHJpZXZlIHJlbW90ZSBwZWVyIGNsdXN0 ZXIgY29uZmlndXJhdGlvbgogIHNlY3JldHMgZnJvbSB0aGUgbW9uaXRvci4gVG8gdXNlIHRoaXMg ZmVhdHVyZSwgdGhlIHJiZC1taXJyb3IgZGFlbW9uCiAgQ2VwaFggdXNlciBmb3IgdGhlIGxvY2Fs IGNsdXN0ZXIgbXVzdCB1c2UgdGhlIGBgcHJvZmlsZSByYmQtbWlycm9yYGAgbW9uIGNhcC4KICBU aGUgc2VjcmV0cyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBgYHJiZCBtaXJyb3IgcG9vbCBwZWVyIGFk ZGBgIGFuZAogIGBgcmJkIG1pcnJvciBwb29sIHBlZXIgc2V0YGAgYWN0aW9ucy4KCiogVGhlICdy YmQtbWlycm9yJyBkYWVtb24gd2lsbCBub3cgcnVuIGluIGFjdGl2ZS9hY3RpdmUgbW9kZSBieSBk ZWZhdWx0LCB3aGVyZQogIG1pcnJvcmVkIGltYWdlcyBhcmUgZXZlbmx5IGRpc3RyaWJ1dGVkIGJl dHdlZW4gYWxsIGFjdGl2ZSAncmJkLW1pcnJvcicKICBkYWVtb25zLiBUbyByZXZlcnQgdG8gYWN0 aXZlL3Bhc3NpdmUgbW9kZSwgb3ZlcnJpZGUgdGhlCiAgJ3JiZF9taXJyb3JfaW1hZ2VfcG9saWN5 X3R5cGUnIGNvbmZpZyBrZXkgdG8gJ25vbmUnLgoKKiBUaGUgYGBjZXBoIG1kcyBkZWFjdGl2YXRl YGAgaXMgZnVsbHkgb2Jzb2xldGUgYW5kIHJlZmVyZW5jZXMgdG8gaXQgaW4gdGhlIGRvY3MKICBo YXZlIGJlZW4gcmVtb3ZlZCBvciBjbGFyaWZpZWQuCgoqIFRoZSBsaWJjZXBoZnMgYmluZGluZ3Mg YWRkZWQgdGhlIGBgY2VwaF9zZWxlY3RfZmlsZXN5c3RlbWBgIGZ1bmN0aW9uCiAgZm9yIHVzZSB3 aXRoIG11bHRpcGxlIGZpbGVzeXN0ZW1zLgoKKiBUaGUgY2VwaGZzIHB5dGhvbiBiaW5kaW5ncyBu b3cgaW5jbHVkZSBgYG1vdW50X3Jvb3RgYCBhbmQgYGBmaWxlc3lzdGVtX25hbWVgYAogIG9wdGlv bnMgaW4gdGhlIG1vdW50KCkgZnVuY3Rpb24uCgoqIGVyYXN1cmUtY29kZTogYWRkIGV4cGVyaW1l bnRhbCAqQ291cGxlZCBMQVllciAoQ0xBWSkqIGVyYXN1cmUgY29kZXMKICBzdXBwb3J0LiBJdCBm ZWF0dXJlcyBsZXNzIG5ldHdvcmsgdHJhZmZpYyBhbmQgZGlzayBJL08gd2hlbiBwZXJmb3JtaW5n CiAgcmVjb3ZlcnkuCgoqIFRoZSBgYGNhY2hlIGRyb3BgYCBPU0QgY29tbWFuZCBoYXMgYmVlbiBh ZGRlZCB0byBkcm9wIGFuIE9TRCdzIGNhY2hlczoKCiAgICAtIGBgY2VwaCB0ZWxsIG9zZC54IGNh Y2hlIGRyb3BgYAoKKiBUaGUgYGBjYWNoZSBzdGF0dXNgYCBPU0QgY29tbWFuZCBoYXMgYmVlbiBh ZGRlZCB0byBnZXQgdGhlIGNhY2hlIHN0YXRzIG9mIGFuCiAgT1NEOgoKICAgIC0gYGBjZXBoIHRl bGwgb3NkLnggY2FjaGUgc3RhdHVzYGAKCiogVGhlIGxpYmNlcGhmcyBhZGRlZCBzZXZlcmFsIGZ1 bmN0aW9ucyB0aGF0IGFsbG93IHJlc3RhcnRlZCBjbGllbnQgdG8gZGVzdHJveQogIG9yIHJlY2xh aW0gc3RhdGUgaGVsZCBieSBhIHByZXZpb3VzIGluY2FybmF0aW9uLiBUaGVzZSBmdW5jdGlvbnMg YXJlIGZvciBORlMKICBzZXJ2ZXJzLgoKKiBUaGUgYGBjZXBoYGAgY29tbWFuZCBsaW5lIHRvb2wg bm93IGFjY2VwdHMga2V5d29yZCBhcmd1bWVudHMgaW4KICB0aGUgZm9ybWF0IGBgLS1hcmc9dmFs dWVgYCBvciBgYC0tYXJnIHZhbHVlYGAuCgoqIGBgbGlicmFkb3M6OklvQ3R4Ojpub2JqZWN0c19i ZWdpbigpYGAgYW5kCiAgYGBsaWJyYWRvczo6Tk9iamVjdEl0ZXJhdG9yYGAgbm93IGNvbW11bmlj YXRlIGVycm9ycyBieSB0aHJvd2luZyBhCiAgYGBzdGQ6OnN5c3RlbV9lcnJvcmBgIGV4Y2VwdGlv biBpbnN0ZWFkIG9mIGBgc3RkOjpydW50aW1lX2Vycm9yYGAuCgoqIFRoZSBjYWxsYmFjayBmdW5j dGlvbiBwYXNzZWQgdG8gYGBMaWJSR1dGUy5yZWFkZGlyKClgYCBub3cgYWNjZXB0cyBhIGBgZmxh Z3NgYAogIHBhcmFtZXRlci4gaXQgd2lsbCBiZSB0aGUgbGFzdCBwYXJhbWV0ZXIgcGFzc2VkIHRv ICBgYHJlYWRkaXIoKWBgIG1ldGhvZC4KCiogVGhlIGBgY2VwaGZzLWRhdGEtc2NhbiBzY2FuX2xp bmtzYGAgbm93IGF1dG9tYXRpY2FsbHkgcmVwYWlyIGlub3RhYmxlcyBhbmQKICBzbmFwdGFibGUu CgoqIENvbmZpZ3VyYXRpb24gdmFsdWVzIGBgbW9uX3dhcm5fbm90X3NjcnViYmVkYGAgYW5kCiAg YGBtb25fd2Fybl9ub3RfZGVlcF9zY3J1YmJlZGBgIGhhdmUgYmVlbiByZW5hbWVkLiAgVGhleSBh cmUgbm93CiAgYGBtb25fd2Fybl9wZ19ub3Rfc2NydWJiZWRfcmF0aW9gYCBhbmQgYGBtb25fd2Fy bl9wZ19ub3RfZGVlcF9zY3J1YmJlZF9yYXRpb2BgCiAgcmVzcGVjdGl2ZWx5LiAgVGhpcyBpcyB0 byBjbGFyaWZ5IHRoYXQgdGhlc2Ugd2FybmluZ3MgYXJlIHJlbGF0ZWQgdG8KICBwZyBzY3J1YmJp bmcgYW5kIGFyZSBhIHJhdGlvIG9mIHRoZSByZWxhdGVkIGludGVydmFsLiAgVGhlc2Ugb3B0aW9u cwogIGFyZSBub3cgZW5hYmxlZCBieSBkZWZhdWx0LgoKKiBUaGUgTURTIGNhY2hlIHRyaW1taW5n IGlzIG5vdyB0aHJvdHRsZWQuIERyb3BwaW5nIHRoZSBNRFMgY2FjaGUKICB2aWEgdGhlIGBgY2Vw aCB0ZWxsIG1kcy48Zm9vPiBjYWNoZSBkcm9wYGAgY29tbWFuZCBvciBsYXJnZSByZWR1Y3Rpb25z IGluIHRoZQogIGNhY2hlIHNpemUgd2lsbCBubyBsb25nZXIgY2F1c2Ugc2VydmljZSB1bmF2YWls YWJpbGl0eS4KCiogVGhlIENlcGhGUyBNRFMgYmVoYXZpb3Igd2l0aCByZWNhbGxpbmcgY2FwcyBo YXMgYmVlbiBzaWduaWZpY2FudGx5IGltcHJvdmVkCiAgdG8gbm90IGF0dGVtcHQgcmVjYWxsaW5n IHRvbyBtYW55IGNhcHMgYXQgb25jZSwgbGVhZGluZyB0byBpbnN0YWJpbGl0eS4KICBNRFMgd2l0 aCBhIGxhcmdlIGNhY2hlICg2NEdCKykgc2hvdWxkIGJlIG1vcmUgc3RhYmxlLgoKKiBNRFMgbm93 IHByb3ZpZGVzIGEgY29uZmlnIG9wdGlvbiBgYG1kc19tYXhfY2Fwc19wZXJfY2xpZW50YGAgKGRl ZmF1bHQ6IDFNKSB0bwogIGxpbWl0IHRoZSBudW1iZXIgb2YgY2FwcyBhIGNsaWVudCBzZXNzaW9u IG1heSBob2xkLiBMb25nIHJ1bm5pbmcgY2xpZW50CiAgc2Vzc2lvbnMgd2l0aCBhIGxhcmdlIG51 bWJlciBvZiBjYXBzIGhhdmUgYmVlbiBhIHNvdXJjZSBvZiBpbnN0YWJpbGl0eSBpbiB0aGUKICBN RFMgd2hlbiBhbGwgb2YgdGhlc2UgY2FwcyBuZWVkIHRvIGJlIHByb2Nlc3NlZCBkdXJpbmcgY2Vy dGFpbiBzZXNzaW9uCiAgZXZlbnRzLiBJdCBpcyByZWNvbW1lbmRlZCB0byBub3QgdW5uZWNlc3Nh cmlseSBpbmNyZWFzZSB0aGlzIHZhbHVlLgoKKiBUaGUgTURTIGNvbmZpZyBgYG1kc19yZWNhbGxf c3RhdGVfdGltZW91dGBgIGhhcyBiZWVuIHJlbW92ZWQuIExhdGUKICBjbGllbnQgcmVjYWxsIHdh cm5pbmdzIGFyZSBub3cgZ2VuZXJhdGVkIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY2FwcwogIHRo ZSBNRFMgaGFzIHJlY2FsbGVkIHdoaWNoIGhhdmUgbm90IGJlZW4gcmVsZWFzZWQuIFRoZSBuZXcg Y29uZmlncwogIGBgbWRzX3JlY2FsbF93YXJuaW5nX3RocmVzaG9sZGBgIChkZWZhdWx0OiAzMksp IGFuZAogIGBgbWRzX3JlY2FsbF93YXJuaW5nX2RlY2F5X3JhdGVgYCAoZGVmYXVsdDogNjBzKSBz ZXRzIHRoZSB0aHJlc2hvbGQKICBmb3IgdGhpcyB3YXJuaW5nLgoKKiBUaGUgVGVsZWdyYWYgbW9k dWxlIGZvciB0aGUgTWFuYWdlciBhbGxvd3MgZm9yIHNlbmRpbmcgc3RhdGlzdGljcyB0bwogIGFu IFRlbGVncmFmIEFnZW50IG92ZXIgVENQLCBVRFAgb3IgYSBVTklYIFNvY2tldC4gVGVsZWdyYWYg Y2FuIHRoZW4KICBzZW5kIHRoZSBzdGF0aXN0aWNzIHRvIGRhdGFiYXNlcyBsaWtlIEluZmx1eERC LCBFbGFzdGljU2VhcmNoLCBHcmFwaGl0ZQogIGFuZCBtYW55IG1vcmUuCgoqIFRoZSBncmF5bG9n IGZpZWxkcyBuYW1pbmcgdGhlIG9yaWdpbmF0b3Igb2YgYSBsb2cgZXZlbnQgaGF2ZQogIGNoYW5n ZWQ6IHRoZSBzdHJpbmctZm9ybSBuYW1lIGlzIG5vdyBpbmNsdWRlZCAoZS5nLiwgYGAibmFtZSI6 CiAgIm1nci5mb28iYGApLCBhbmQgdGhlIHJhbmstZm9ybSBuYW1lIGlzIG5vdyBpbiBhIG5lc3Rl ZCBzZWN0aW9uCiAgKGUuZy4sIGBgInJhbmsiOiB7InR5cGUiOiAibWdyIiwgIm51bSI6IDQzMjQz fWBgKS4KCiogSWYgdGhlIGNsdXN0ZXIgbG9nIGlzIGRpcmVjdGVkIGF0IHN5c2xvZywgdGhlIGVu dHJpZXMgYXJlIG5vdwogIHByZWZpeGVkIGJ5IGJvdGggdGhlIHN0cmluZy1mb3JtIG5hbWUgYW5k IHRoZSByYW5rLWZvcm0gbmFtZSAoZS5nLiwKICBgYG1nci54IG1nci4xMjM0NSAuLi5gYCBpbnN0 ZWFkIG9mIGp1c3QgYGBtZ3IuMTIzNDUgLi4uYGApLgoKKiBUaGUgSlNPTiBvdXRwdXQgb2YgdGhl IGBgY2VwaCBvc2QgZmluZGBgIGNvbW1hbmQgaGFzIHJlcGxhY2VkIHRoZSBgYGlwYGAKICBmaWVs ZCB3aXRoIGFuIGBgYWRkcnNgYCBzZWN0aW9uIHRvIHJlZmxlY3QgdGhhdCBPU0RzIG1heSBiaW5k IHRvCiAgbXVsdGlwbGUgYWRkcmVzc2VzLgoKKiBDZXBoRlMgY2xpZW50cyB3aXRob3V0IHRoZSAn cycgZmxhZyBpbiB0aGVpciBhdXRoZW50aWNhdGlvbiBjYXBhYmlsaXR5CiAgc3RyaW5nIHdpbGwg bm8gbG9uZ2VyIGJlIGFibGUgdG8gY3JlYXRlL2RlbGV0ZSBzbmFwc2hvdHMuIFRvIGFsbG93CiAg YGBjbGllbnQuZm9vYGAgdG8gY3JlYXRlL2RlbGV0ZSBzbmFwc2hvdHMgaW4gdGhlIGBgYmFyYGAg ZGlyZWN0b3J5IG9mCiAgZmlsZXN5c3RlbSBgYGNlcGhmc19hYGAsIHVzZSBjb21tYW5kOgoKICAg IC0gYGBjZXBoIGF1dGggY2FwcyBjbGllbnQuZm9vIG1vbiAnYWxsb3cgcicgb3NkICdhbGxvdyBy dyB0YWcgY2VwaGZzIGRhdGE9Y2VwaGZzX2EnIG1kcyAnYWxsb3cgcncsIGFsbG93IHJ3cyBwYXRo PS9iYXInYGAKCiogVGhlIGBgb3NkX2hlYXJ0YmVhdF9hZGRyYGAgb3B0aW9uIGhhcyBiZWVuIHJl bW92ZWQgYXMgaXQgc2VydmVkIG5vCiAgKGdvb2QpIHB1cnBvc2U6IHRoZSBPU0Qgc2hvdWxkIGFs d2F5cyBjaGVjayBoZWFydGJlYXRzIG9uIGJvdGggdGhlCiAgcHVibGljIGFuZCBjbHVzdGVyIG5l dHdvcmtzLgoKKiBUaGUgYGByYWRvc2BgIHRvb2wncyBgYG1rcG9vbGBgIGFuZCBgYHJtcG9vbGBg IGNvbW1hbmRzIGhhdmUgYmVlbgogIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGFyZSByZWR1bmRhbnQ7 IHBsZWFzZSB1c2UgdGhlIGBgY2VwaCBvc2QgcG9vbAogIGNyZWF0ZWBgIGFuZCBgYGNlcGggb3Nk IHBvb2wgcm1gYCBjb21tYW5kcyBpbnN0ZWFkLgoKKiBUaGUgYGBhdWlkYGAgcHJvcGVydHkgZm9y IGNlcGh4IHVzZXJzIGFuZCBSQURPUyBwb29scyBoYXMgYmVlbgogIHJlbW92ZWQuICBUaGlzIHdh cyBhbiB1bmRvY3VtZW50ZWQgYW5kIHBhcnRpYWxseSBpbXBsZW1lbnRlZAogIGNhcGFiaWxpdHkg dGhhdCBhbGxvd2VkIGNlcGh4IHVzZXJzIHRvIG1hcCBjYXBhYmlsaXRpZXMgdG8gUkFET1MKICBw b29scyB0aGF0IHRoZXkgIm93bmVkIi4gIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVzZXJzIHdlIGhh dmUgcmVtb3ZlZAogIHRoaXMgc3VwcG9ydC4gIElmIGFueSBjZXBoeCBjYXBhYmlsaXRpZXMgZXhp c3QgaW4gdGhlIGNsdXN0ZXIgdGhhdAogIHJlc3RyaWN0IGJhc2VkIG9uIGF1aWQgdGhlbiB0aGV5 IHdpbGwgbm8gbG9uZ2VyIHBhcnNlLCBhbmQgdGhlCiAgY2x1c3RlciB3aWxsIHJlcG9ydCBhIGhl YWx0aCB3YXJuaW5nIGxpa2U6OgoKICAgIEFVVEhfQkFEX0NBUFMgMSBhdXRoIGVudGl0aWVzIGhh dmUgaW52YWxpZCBjYXBhYmlsaXRpZXMKICAgICAgICBjbGllbnQuYmFkIG9zZCBjYXBhYmlsaXR5 IHBhcnNlIGZhaWxlZCwgc3RvcHBlZCBhdCAnYWxsb3cgcnd4IGF1aWQgMTIzJyBvZiAnYWxsb3cg cnd4IGF1aWQgMTIzJwoKICBUaGUgY2FwYWJpbGl0eSBjYW4gYmUgYWRqdXN0ZWQgd2l0aCB0aGUg YGBjZXBoIGF1dGggY2Fwc2BgCiAgY29tbWFuZC4gRm9yIGV4YW1wbGUsOjoKCiAgICBjZXBoIGF1 dGggY2FwcyBjbGllbnQuYmFkIG9zZCAnYWxsb3cgcnd4IHBvb2wgZm9vJwoKKiBUaGUgYGBjZXBo LWt2c3RvcmUtdG9vbGBgIGBgcmVwYWlyYGAgY29tbWFuZCBoYXMgYmVlbiByZW5hbWVkCiAgYGBk ZXN0cnVjdGl2ZS1yZXBhaXJgYCBzaW5jZSB3ZSBoYXZlIGRpc2NvdmVyZWQgaXQgY2FuIGNvcnJ1 cHQgYW4KICBvdGhlcndpc2UgaGVhbHRoeSByb2Nrc2RiIGRhdGFiYXNlLiAgSXQgc2hvdWxkIGJl IHVzZWQgb25seSBhcyBhIGxhc3QtZGl0Y2gKICBhdHRlbXB0IHRvIHJlY292ZXIgZGF0YSBmcm9t IGFuIG90aGVyd2lzZSBjb3JydXB0ZWQgc3RvcmUuCgoKKiBUaGUgZGVmYXVsdCBtZW1vcnkgdXRp bGl6YXRpb24gZm9yIHRoZSBtb25zIGhhcyBiZWVuIGluY3JlYXNlZAogIHNvbWV3aGF0LiAgUm9j a3NkYiBub3cgdXNlcyA1MTIgTUIgb2YgUkFNIGJ5IGRlZmF1bHQsIHdoaWNoIHNob3VsZAogIGJl IHN1ZmZpY2llbnQgZm9yIHNtYWxsIHRvIG1lZGl1bS1zaXplZCBjbHVzdGVyczsgbGFyZ2UgY2x1 c3RlcnMKICBzaG91bGQgdHVuZSB0aGlzIHVwLiAgQWxzbywgdGhlIGBgbW9uX29zZF9jYWNoZV9z aXplYGAgaGFzIGJlZW4KICBpbmNyZWFzZSBmcm9tIDEwIE9TRE1hcHMgdG8gNTAwLCB3aGljaCB3 aWxsIHRyYW5zbGF0ZSB0byBhbgogIGFkZGl0aW9uYWwgNTAwIE1CIHRvIDEgR0Igb2YgUkFNIGZv ciBsYXJnZSBjbHVzdGVycywgYW5kIG11Y2ggbGVzcwogIGZvciBzbWFsbCBjbHVzdGVycy4KCiog VGhlIGBgbWdyL2JhbGFuY2VyL21heF9taXNwbGFjZWRgYCBvcHRpb24gaGFzIGJlZW4gcmVwbGFj ZWQgYnkgYSBuZXcKICBnbG9iYWwgYGB0YXJnZXRfbWF4X21pc3BsYWNlZF9yYXRpb2BgIG9wdGlv biB0aGF0IHRocm90dGxlcyBib3RoCiAgYmFsYW5jZXIgYWN0aXZpdHkgYW5kIGF1dG9tYXRlZCBh ZGp1c3RtZW50cyB0byBgYHBncF9udW1gYCAobm9ybWFsbHkgYXMgYQogIHJlc3VsdCBvZiBgYHBn X251bWBgIGNoYW5nZXMpLiAgSWYgeW91IGhhdmUgY3VzdG9taXplZCB0aGUgYmFsYW5jZXIgbW9k dWxlCiAgb3B0aW9uLCB5b3Ugd2lsbCBuZWVkIHRvIGFkanVzdCB5b3VyIGNvbmZpZyB0byBzZXQg dGhlIG5ldyBnbG9iYWwgb3B0aW9uCiAgb3IgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IG9mIC4wNSAo NSUpLgoKKiBCeSBkZWZhdWx0LCBDZXBoIG5vIGxvbmdlciBpc3N1ZXMgYSBoZWFsdGggd2Fybmlu ZyB3aGVuIHRoZXJlIGFyZQogIG1pc3BsYWNlZCBvYmplY3RzIChvYmplY3RzIHRoYXQgYXJlIGZ1 bGx5IHJlcGxpY2F0ZWQgYnV0IG5vdCBzdG9yZWQKICBvbiB0aGUgaW50ZW5kZWQgT1NEcykuICBZ b3UgY2FuIHJlZW5hYmxlIHRoZSBvbGQgd2FybmluZyBieSBzZXR0aW5nCiAgYGBtb25fd2Fybl9v bl9taXNwbGFjZWRgYCB0byBgYHRydWVgYC4KCiogVGhlIGBgY2VwaC1jcmVhdGUta2V5c2BgIHRv b2wgaXMgbm93IG9ic29sZXRlLiAgVGhlIG1vbml0b3JzCiAgYXV0b21hdGljYWxseSBjcmVhdGUg dGhlc2Uga2V5cyBvbiB0aGVpciBvd24uICBGb3Igbm93IHRoZSBzY3JpcHQKICBwcmludHMgYSB3 YXJuaW5nIG1lc3NhZ2UgYW5kIGV4aXRzLCBidXQgaXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZQog IG5leHQgcmVsZWFzZS4gIE5vdGUgdGhhdCBgYGNlcGgtY3JlYXRlLWtleXNgYCB3b3VsZCBhbHNv IHdyaXRlIHRoZQogIGFkbWluIGFuZCBib290c3RyYXAga2V5cyB0byAvZXRjL2NlcGggYW5kIC92 YXIvbGliL2NlcGgsIGJ1dCB0aGlzCiAgc2NyaXB0IG5vIGxvbmdlciBkb2VzIHRoYXQuICBBbnkg ZGVwbG95bWVudCB0b29scyB0aGF0IHJlbGllZCBvbgogIHRoaXMgYmVoYXZpb3Igc2hvdWxkIGlu c3RlYWQgbWFrZSB1c2Ugb2YgdGhlIGBgY2VwaCBhdXRoIGV4cG9ydAogIDxlbnRpdHktbmFtZT5g YCBjb21tYW5kIGZvciB3aGljaGV2ZXIga2V5KHMpIHRoZXkgbmVlZC4KCiogVGhlIGBgbW9uX29z ZF9wb29sX2VjX2Zhc3RfcmVhZGBgIG9wdGlvbiBoYXMgYmVlbiByZW5hbWVkCiAgYGBvc2RfcG9v bF9kZWZhdWx0X2VjX2Zhc3RfcmVhZGBgIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIG90aGVy CiAgYGBvc2RfcG9vbF9kZWZhdWx0XypgYCBvcHRpb25zIHRoYXQgYWZmZWN0IGRlZmF1bHQgdmFs dWVzIGZvciBuZXdseQogIGNyZWF0ZWQgUkFET1MgcG9vbHMuCgoqIFRoZSBgYG1vbiBhZGRyYGAg Y29uZmlndXJhdGlvbiBvcHRpb24gaXMgbm93IGRlcHJlY2F0ZWQuICBJdCBjYW4KICBzdGlsbCBi ZSB1c2VkIHRvIHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IgZWFjaCBtb25pdG9yIGluIHRoZQogIGBg Y2VwaC5jb25mYGAgZmlsZSwgYnV0IGl0IG9ubHkgYWZmZWN0cyBjbHVzdGVyIGNyZWF0aW9uIGFu ZAogIGJvb3RzdHJhcHBpbmcsIGFuZCBpdCBkb2VzIG5vdCBzdXBwb3J0IGxpc3RpbmcgbXVsdGlw bGUgYWRkcmVzc2VzCiAgKGUuZy4sIGJvdGggYSB2MiBhbmQgdjEgcHJvdG9jb2wgYWRkcmVzcyku ICBXZSBzdHJvbmdseSByZWNvbW1lbmQKICB0aGUgb3B0aW9uIGJlIHJlbW92ZWQgYW5kIGluc3Rl YWQgYSBzaW5nbGUgYGBtb24gaG9zdGBgIG9wdGlvbiBiZQogIHNwZWNpZmllZCBpbiB0aGUgYGBb Z2xvYmFsXWBgIHNlY3Rpb24gdG8gYWxsb3cgZGFlbW9ucyBhbmQgY2xpZW50cwogIHRvIGRpc2Nv dmVyIHRoZSBtb25pdG9ycy4KCiogTmV3IGNvbW1hbmQgYGBjZXBoIGZzIGZhaWxgYCBoYXMgYmVl biBhZGRlZCB0byBxdWlja2x5IGJyaW5nIGRvd24gYSBmaWxlCiAgc3lzdGVtLiBUaGlzIGlzIGEg c2luZ2xlIGNvbW1hbmQgdGhhdCB1bnNldHMgdGhlIGpvaW5hYmxlIGZsYWcgb24gdGhlIGZpbGUK ICBzeXN0ZW0gYW5kIGJyaW5ncyBkb3duIGFsbCBvZiBpdHMgcmFua3MuCgoqIFRoZSBgYGNhY2hl IGRyb3BgYCBhZG1pbiBzb2NrZXQgY29tbWFuZCBoYXMgYmVlbiByZW1vdmVkLiBUaGUgYGBjZXBo CiAgdGVsbCBtZHMuWCBjYWNoZSBkcm9wYGAgcmVtYWlucy4KCkdldHRpbmcgQ2VwaAotLS0tLS0t LS0tLS0KCiogR2l0IGF0IGdpdDovL2dpdGh1Yi5jb20vY2VwaC9jZXBoLmdpdAoqIFRhcmJhbGwg YXQgaHR0cDovL2Rvd25sb2FkLmNlcGguY29tL3RhcmJhbGxzL2NlcGgtMTQuMi4wLnRhci5negoq IEZvciBwYWNrYWdlcywgc2VlIApodHRwOi8vZG9jcy5jZXBoLmNvbS9kb2NzL21hc3Rlci9pbnN0 YWxsL2dldC1wYWNrYWdlcy8KKiBSZWxlYXNlIGdpdCBzaGExOiAzYTU0YjJiNmQxNjdkNGEyYTE5 ZTAwM2E3MDU2OTZkNGZlNjE5YWZjCgotLSAKQWJoaXNoZWsgTGVrc2htYW5hbgpTVVNFIExpbnV4 IEdtYkgsIEdGOiBGZWxpeCBJbWVuZMO2cmZmZXIsIEphbmUgU21pdGhhcmQsIEdyYWhhbSBOb3J0 b24sCkhSQiAyMTI4NCAoQUcgTsO8cm5iZXJnKQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpDZXBoLWFubm91bmNlIG1haWxpbmcgbGlzdApDZXBoLWFubm91 bmNlQGxpc3RzLmNlcGguY29tCmh0dHA6Ly9saXN0cy5jZXBoLmNvbS9saXN0aW5mby5jZ2kvY2Vw aC1hbm5vdW5jZS1jZXBoLmNvbQo=