From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhishek Lekshmanan Subject: v12.1.3 Luminous (RC) released Date: Fri, 11 Aug 2017 18:01:52 +0200 Message-ID: <87zib63xfz.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-users-bounces-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org Sender: "ceph-users" To: ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ceph-users-Qp0mS5GaXlQ@public.gmane.org, ceph-maintainers-Qp0mS5GaXlQ@public.gmane.org, ceph-announce-Qp0mS5GaXlQ@public.gmane.org List-Id: ceph-devel.vger.kernel.org VGhpcyBpcyB0aGUgZmluYWwgcmVsZWFzZSBjYW5kaWRhdGUgZm9yIEx1bWlub3VzLCB0aGUgbmV4 dCBsb25nIHRlcm0Kc3RhYmxlIHJlbGVhc2UuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBzdGls bCBhICpyZWxlYXNlIGNhbmRpZGF0ZSogYW5kCm5vdCB0aGUgZmluYWwgcmVsZWFzZSwgd2UncmUg ZXhwZWN0aW5nIHRoZSBmaW5hbCBMdW1pbm91cyByZWxlYXNlIGluCmFib3V0IGEgd2VlaydzIHRp bWUsIG1lYW53aGlsZSB0ZXN0aW5nIGFuZCBmZWVkYmFjayBpcyBhcHByZWNpYXRlZC4KCkNlcGgg THVtaW5vdXMgKHYxMi4yLjApIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBuZXh0IGxv bmctdGVybQpzdGFibGUgcmVsZWFzZSBzZXJpZXMuIFRoZXJlIGhhdmUgYmVlbiBtYWpvciBjaGFu Z2VzIHNpbmNlIEtyYWtlbgoodjExLjIueikgYW5kIEpld2VsICh2MTAuMi56KSwgYW5kIHRoZSB1 cGdyYWRlIHByb2Nlc3MgaXMgbm9uLXRyaXZpYWwuClBsZWFzZSByZWFkIHRoZXNlIHJlbGVhc2Ug bm90ZXMgY2FyZWZ1bGx5LiBNb3JlIGRldGFpbHMgYW5kIGNoYW5nZWxvZyBhdCAKaHR0cDovL2Nl cGguY29tL3JlbGVhc2VzL3YxMi0xLTMtbHVtaW5vdXMtcmMtcmVsZWFzZWQvCgpNYWpvciBDaGFu Z2VzIGZyb20gS3Jha2VuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gKkdlbmVyYWwqOgoK ICAqIENlcGggbm93IGhhcyBhIHNpbXBsZSwgYnVpbHQtaW4gd2ViLWJhc2VkIGRhc2hib2FyZCBm b3IgbW9uaXRvcmluZwogICAgY2x1c3RlciBzdGF0dXMuCgotICpSQURPUyo6CgogICogKkJsdWVT dG9yZSo6CgogICAgLSBUaGUgbmV3ICpCbHVlU3RvcmUqIGJhY2tlbmQgZm9yICpjZXBoLW9zZCog aXMgbm93IHN0YWJsZSBhbmQgdGhlCiAgICAgIG5ldyBkZWZhdWx0IGZvciBuZXdseSBjcmVhdGVk IE9TRHMuICBCbHVlU3RvcmUgbWFuYWdlcyBkYXRhCiAgICAgIHN0b3JlZCBieSBlYWNoIE9TRCBi eSBkaXJlY3RseSBtYW5hZ2luZyB0aGUgcGh5c2ljYWwgSEREcyBvcgogICAgICBTU0RzIHdpdGhv dXQgdGhlIHVzZSBvZiBhbiBpbnRlcnZlbmluZyBmaWxlIHN5c3RlbSBsaWtlIFhGUy4KICAgICAg VGhpcyBwcm92aWRlcyBncmVhdGVyIHBlcmZvcm1hbmNlIGFuZCBmZWF0dXJlcy4gCiAgICAtIEJs dWVTdG9yZSBzdXBwb3J0cyBmdWxsIGRhdGEgYW5kIG1ldGFkYXRhIGNoZWNrc3VtcwogICAgICBv ZiBhbGwgZGF0YSBzdG9yZWQgYnkgQ2VwaC4KICAgIC0gQmx1ZVN0b3JlIHN1cHBvcnRzIGlubGlu ZSBjb21wcmVzc2lvbiB1c2luZyB6bGliLCBzbmFwcHksIG9yIExaNC4KICAgICAgKENlcGggYWxz byBzdXBwb3J0cyB6c3RkIGZvciBSR1cgY29tcHJlc3Npb24gYnV0IHpzdGQgaXMgbm90CiAgICAg IHJlY29tbWVuZGVkIGZvciBCbHVlU3RvcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuKQoKICAq ICpFcmFzdXJlIGNvZGVkKiBwb29scyBub3cgaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIG92ZXJ3cml0 ZXMsCiAgICBhbGxvd2luZyB0aGVtIHRvIGJlIHVzZWQgd2l0aCBSQkQgYW5kIENlcGhGUy4KCiAg KiAqY2VwaC1tZ3IqOgogICAgLSBUaGVyZSBpcyBhIG5ldyBkYWVtb24sICpjZXBoLW1nciosIHdo aWNoIGlzIGEgcmVxdWlyZWQgcGFydCBvZgogICAgICBhbnkgQ2VwaCBkZXBsb3ltZW50LiAgQWx0 aG91Z2ggSU8gY2FuIGNvbnRpbnVlIHdoZW4gKmNlcGgtbWdyKgogICAgICBpcyBkb3duLCBtZXRy aWNzIHdpbGwgbm90IHJlZnJlc2ggYW5kIHNvbWUgbWV0cmljcy1yZWxhdGVkIGNhbGxzCiAgICAg IChlLmcuLCBgYGNlcGggZGZgYCkgbWF5IGJsb2NrLiAgV2UgcmVjb21tZW5kIGRlcGxveWluZyBz ZXZlcmFsCiAgICAgIGluc3RhbmNlcyBvZiAqY2VwaC1tZ3IqIGZvciByZWxpYWJpbGl0eS4gIFNl ZSB0aGUgbm90ZXMgb24KICAgICAgYFVwZ3JhZGluZ2BfIGJlbG93LgogICAgLSBUaGUgKmNlcGgt bWdyKiBkYWVtb24gaW5jbHVkZXMgYSBSRVNULWJhc2VkIG1hbmFnZW1lbnQgQVBJIFRoZSBBUEkg aXMKICAgICAgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBzb21ld2hhdCBsaW1pdGVkIGJ1dCB3aWxs IGZvcm0gdGhlIGJhc2lzIGZvcgogICAgICBBUEktYmFzZWQgbWFuYWdlbWVudCBvZiBDZXBoIGdv aW5nIGZvcndhcmQuCiAgICAtICpjZXBoLW1nciogYWxzbyBpbmNsdWRlcyBhIFByb21ldGhldXMg ZXhwb3J0ZXIgcGx1Z2luLCB3aGljaCBjYW4gcHJvdmlkZQogICAgICBDZXBoIHBlcmZjb3VudGVy cyB0byBQcm9tZXRoZXVzLgogICAgLSBjZXBoLW1nciBub3cgaGFzIGEgWmFiYml4IHBsdWdpbi4g VXNpbmcgemFiYml4X3NlbmRlciBpdCBzZW5kcyB0cmFwcGVyCiAgICAgIGV2ZW50cyB0byBhIFph YmJpeCBzZXJ2ZXIgY29udGFpbmluZyBoaWdoLWxldmVsIGluZm9ybWF0aW9uIG9mIHRoZSBDZXBo CiAgICAgIGNsdXN0ZXIuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBtb25pdG9yIGEgQ2VwaCBjbHVz dGVyJ3Mgc3RhdHVzIGFuZCBzZW5kCiAgICAgIG91dCBub3RpZmljYXRpb25zIGluIGNhc2Ugb2Yg YSBtYWxmdW5jdGlvbi4KCiAgKiBUaGUgb3ZlcmFsbCAqc2NhbGFiaWxpdHkqIG9mIHRoZSBjbHVz dGVyIGhhcyBpbXByb3ZlZC4gV2UgaGF2ZQogICAgc3VjY2Vzc2Z1bGx5IHRlc3RlZCBjbHVzdGVy cyB3aXRoIHVwIHRvIDEwLDAwMCBPU0RzLgogICogRWFjaCBPU0QgY2FuIG5vdyBoYXZlIGEgZGV2 aWNlIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCBpdCAoZS5nLiwgYGhkZGAgb3IKICAgIGBzc2RgKSwg YWxsb3dpbmcgQ1JVU0ggcnVsZXMgdG8gdHJpdmlhbGx5IG1hcCBkYXRhIHRvIGEgc3Vic2V0IG9m IGRldmljZXMgaW4KICAgIHRoZSBzeXN0ZW0uIE1hbnVhbGx5IHdyaXRpbmcgQ1JVU0ggcnVsZXMg b3IgbWFudWFsIGVkaXRpbmcgb2YgdGhlIENSVVNIIGlzCiAgICBub3JtYWxseSBub3QgcmVxdWly ZWQuCiAgKiBUaGVyZSBpcyBhbHNvIGEgbmV3IHVwbWFwIGV4Y2VwdGlvbiBtZWNoYW5pc20gdGhh dCBhbGxvd3MgaW5kaXZpZHVhbCBQR3MgdG8KICAgIGJlIG1vdmVkIGFyb3VuZCB0byBhY2hpZXZl IGEgKnBlcmZlY3QgZGlzdHJpYnV0aW9uKiAodGhpcyByZXF1aXJlcyBsdW1pbm91cwogICAgY2xp ZW50cykuCiAgKiBFYWNoIE9TRCBub3cgYWRqdXN0cyBpdHMgZGVmYXVsdCBjb25maWd1cmF0aW9u IGJhc2VkIG9uIHdoZXRoZXIgdGhlCiAgICBiYWNraW5nIGRldmljZSBpcyBhbiBIREQgb3IgU1NE LiAgTWFudWFsIHR1bmluZyBnZW5lcmFsbHkgbm90IHJlcXVpcmVkLgogICogVGhlIHByb3RvdHlw ZSBtQ2xvY2sgUW9TIHF1ZXVlaW5nIGFsZ29yaXRobSBpcyBub3cgYXZhaWxhYmxlLgogICogVGhl cmUgaXMgbm93IGEgKmJhY2tvZmYqIG1lY2hhbmlzbSB0aGF0IHByZXZlbnRzIE9TRHMgZnJvbSBi ZWluZwogICAgb3ZlcmxvYWRlZCBieSByZXF1ZXN0cyB0byBvYmplY3RzIG9yIFBHcyB0aGF0IGFy ZSBub3QgY3VycmVudGx5IGFibGUgdG8KICAgIHByb2Nlc3MgSU8uCiAgKiBUaGVyZSBpcyBhIHNp bXBsaWZpZWQgT1NEIHJlcGxhY2VtZW50IHByb2Nlc3MgdGhhdCBpcyBtb3JlIHJvYnVzdC4KICAq IFlvdSBjYW4gcXVlcnkgdGhlIHN1cHBvcnRlZCBmZWF0dXJlcyBhbmQgKGFwcGFyZW50KSByZWxl YXNlcyBvZgogICAgYWxsIGNvbm5lY3RlZCBkYWVtb25zIGFuZCBjbGllbnRzIHdpdGggY2VwaCBm ZWF0dXJlcy4KICAqIFlvdSBjYW4gY29uZmlndXJlIHRoZSBvbGRlc3QgQ2VwaCBjbGllbnQgdmVy c2lvbiB5b3Ugd2lzaCB0byBhbGxvdyB0bwogICAgY29ubmVjdCB0byB0aGUgY2x1c3RlciB2aWEg YGBjZXBoIG9zZCBzZXQtcmVxdWlyZS1taW4tY29tcGF0LWNsaWVudGBgIGFuZAogICAgQ2VwaCB3 aWxsIHByZXZlbnQgeW91IGZyb20gZW5hYmxpbmcgZmVhdHVyZXMgdGhhdCB3aWxsIGJyZWFrIGNv bXBhdGliaWxpdHkKICAgIHdpdGggdGhvc2UgY2xpZW50cy4KICAqIFNldmVyYWwgYHNsZWVwYCBz ZXR0aW5ncywgaW5jbHVkZSBgYG9zZF9yZWNvdmVyeV9zbGVlcGBgLAogICAgYGBvc2Rfc25hcF90 cmltX3NsZWVwYGAsIGFuZCBgYG9zZF9zY3J1Yl9zbGVlcGBgIGhhdmUgYmVlbgogICAgcmVpbXBs ZW1lbnRlZCB0byB3b3JrIGVmZmljaWVudGx5LiAgKFRoZXNlIGFyZSB1c2VkIGluIHNvbWUgY2Fz ZXMKICAgIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyB0aHJvdHRsaW5nIGJhY2tncm91bmQgd29yay4p CiAgKiBUaGUgY3J1c2ggYGBjaG9vc2VfYXJnc2BgIGVuY29kaW5nIGhhcyBiZWVuIGNoYW5nZWQg dG8gbWFrZSBpdAogICAgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50LgogICogUG9vbHMgYXJlIG5v dyBleHBlY3RlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRo ZW0uCiAgICBVcG9uIGNvbXBsZXRpbmcgdGhlIHVwZ3JhZGUgdG8gTHVtaW5vdXMsIHRoZSBjbHVz dGVyIHdpbGwgYXR0ZW1wdCB0bwogICAgYXNzb2NpYXRlIGV4aXN0aW5nIHBvb2xzIHRvIGtub3du IGFwcGxpY2F0aW9ucyAoaS5lLiBDZXBoRlMsIFJCRCwgYW5kIFJHVykuCiAgICBJbi11c2UgcG9v bHMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgdG8gYW4gYXBwbGljYXRpb24gd2lsbCBnZW5lcmF0 ZSBhCiAgICBoZWFsdGggd2FybmluZy4gQW55IHVuYXNzb2NpYXRlZCBwb29scyBjYW4gYmUgbWFu dWFsbHkgYXNzb2NpYXRlZCB1c2luZyB0aGUKICAgIG5ldyBgYGNlcGggb3NkIHBvb2wgYXBwbGlj YXRpb24gZW5hYmxlYGAgY29tbWFuZC4gCiAgKiBBZGRlZCBuZXcgY29tbWFuZHMgYGBwZyBmb3Jj ZS1yZWNvdmVyeWBgIGFuZCBgYHBnLWZvcmNlLWJhY2tmaWxsYGAuIFVzZSB0aGVtIHRvCiAgICBi b29zdCByZWNvdmVyeSBvciBiYWNrZmlsbCBwcmlvcml0eSBvZiBzcGVjaWZpZWQgcGdzLCBzbyB0 aGV5J3JlCiAgICByZWNvdmVyZWQvYmFja2ZpbGxlZCBiZWZvcmUgYW55IG90aGVyLiBOb3RlIHRo YXQgdGhlc2UgY29tbWFuZHMgZG9uJ3QKICAgIGludGVycnVwdCBvbmdvaW5nIHJlY292ZXJ5L2Jh Y2tmaWxsLCBidXQgbWVyZWx5IHF1ZXVlIHNwZWNpZmllZCBwZ3MgYmVmb3JlCiAgICBvdGhlcnMg c28gdGhleSdyZSByZWNvdmVyZWQvYmFja2ZpbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBOZXcg Y29tbWFuZHMgYGBwZwogICAgY2FuY2VsLWZvcmNlLXJlY292ZXJ5YGAgYW5kIGBgcGcgY2FuY2Vs LWZvcmNlLWJhY2tmaWxsYGAgcmVzdG9yZSBkZWZhdWx0CiAgICByZWNvdmVyeS9iYWNrZmlsbCBw cmlvcml0eSBvZiBwcmV2aW91c2x5IGZvcmNlZCBwZ3MuCgotICpjZXBoLW1vbio6CgogICogQWRk ZWQgbmV3IGNvbmZpZ3VyYXRpb24gInB1YmxpYyBiaW5kIGFkZHIiIHRvIHN1cHBvcnQgZHluYW1p YwogICAgZW52aXJvbm1lbnRzIGxpa2UgS3ViZXJuZXRlcy4gV2hlbiBzZXQgdGhlIENlcGggTU9O IGRhZW1vbiBjb3VsZAogICAgYmluZCBsb2NhbGx5IHRvIGFuIElQIGFkZHJlc3MgYW5kIGFkdmVy dGlzZSBhIGRpZmZlcmVudCBJUCBhZGRyZXNzCiAgICBgYHB1YmxpYyBhZGRyYGAgb24gdGhlIG5l dHdvcmsuCgotICpSR1cqOgoKICAqIFJHVyAqbWV0YWRhdGEgc2VhcmNoKiBiYWNrZWQgYnkgRWxh c3RpY1NlYXJjaCBub3cgc3VwcG9ydHMgZW5kCiAgICB1c2VyIHJlcXVlc3RzIHNlcnZpY2Ugdmlh IFJHVyBpdHNlbGYsIGFuZCBhbHNvIHN1cHBvcnRzIGN1c3RvbQogICAgbWV0YWRhdGEgZmllbGRz LiBBIHF1ZXJ5IGxhbmd1YWdlIGEgc2V0IG9mIFJFU1RmdWwgQVBJcyB3ZXJlCiAgICBjcmVhdGVk IGZvciB1c2VycyB0byBiZSBhYmxlIHRvIHNlYXJjaCBvYmplY3RzIGJ5IHRoZWlyCiAgICBtZXRh ZGF0YS4gTmV3IEFQSXMgdGhhdCBhbGxvdyBjb250cm9sIG9mIGN1c3RvbSBtZXRhZGF0YSBmaWVs ZHMKICAgIHdlcmUgYWxzbyBhZGRlZC4KICAqIFJHVyBub3cgc3VwcG9ydHMgKmR5bmFtaWMgYnVj a2V0IGluZGV4IHNoYXJkaW5nKi4gIEFzIHRoZSBudW1iZXIKICAgIG9mIG9iamVjdHMgaW4gYSBi dWNrZXQgZ3Jvd3MsIFJHVyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzaGFyZCB0aGUKICAgIGJ1Y2tl dCBpbmRleCBpbiByZXNwb25zZS4gIE5vIHVzZXIgaW50ZXJ2ZW50aW9uIG9yIGJ1Y2tldCBzaXpl CiAgICBjYXBhY2l0eSBwbGFubmluZyBpcyByZXF1aXJlZC4gVGhpcyBuZWVkcyB0byBiZSBlbmFi bGVkIHZpYSBzZXR0aW5nIAogICAgYHJndyBkeW5hbWljIHJlc2hhcmRpbmdgIHRvIFRydWUgaW4g Y2VwaC5jb25mIAogICogUkdXIGludHJvZHVjZXMgKnNlcnZlciBzaWRlIGVuY3J5cHRpb24qIG9m IHVwbG9hZGVkIG9iamVjdHMgd2l0aAogICAgdGhyZWUgb3B0aW9ucyBmb3IgdGhlIG1hbmFnZW1l bnQgb2YgZW5jcnlwdGlvbiBrZXlzOiBhdXRvbWF0aWMKICAgIGVuY3J5cHRpb24gKG9ubHkgcmVj b21tZW5kZWQgZm9yIHRlc3Qgc2V0dXBzKSwgY3VzdG9tZXIgcHJvdmlkZWQKICAgIGtleXMgc2lt aWxhciB0byBBbWF6b24gU1NFLUMgc3BlY2lmaWNhdGlvbiwgYW5kIHRocm91Z2ggdGhlIHVzZSBv ZgogICAgYW4gZXh0ZXJuYWwga2V5IG1hbmFnZW1lbnQgc2VydmljZSAoT3BlbnN0YWNrIEJhcmJp Y2FuKSBzaW1pbGFyCiAgICB0byBBbWF6b24gU1NFLUtNUyBzcGVjaWZpY2F0aW9uLiAKICAqIFJH VyBub3cgaGFzIHByZWxpbWluYXJ5IEFXUy1saWtlIGJ1Y2tldCBwb2xpY3kgQVBJIHN1cHBvcnQu ICBGb3IKICAgIG5vdywgcG9saWN5IGlzIGEgbWVhbnMgdG8gZXhwcmVzcyBhIHJhbmdlIG9mIG5l dyBhdXRob3JpemF0aW9uCiAgICBjb25jZXB0cy4gIEluIHRoZSBmdXR1cmUgaXQgd2lsbCBiZSB0 aGUgZm91bmRhdGlvbiBmb3IgYWRkaXRpb25hbAogICAgYXV0aCBjYXBhYmlsaXRpZXMgc3VjaCBh cyBTVFMgYW5kIGdyb3VwIHBvbGljeS4gCiAgKiBSR1cgaGFzIGNvbnNvbGlkYXRlZCB0aGUgc2V2 ZXJhbCBtZXRhZGF0YSBpbmRleCBwb29scyB2aWEgdGhlIHVzZSBvZiByYWRvcwogICAgbmFtZXNw YWNlcy4gCiAgKiBTMyBPYmplY3QgVGFnZ2luZyBBUEkgaGFzIGJlZW4gYWRkZWQ7IHdoaWxlIEFQ SXMgYXJlCiAgICBzdXBwb3J0ZWQgZm9yIEdFVC9QVVQvREVMRVRFIG9iamVjdCB0YWdzIGFuZCBp biBQVVQgb2JqZWN0CiAgICBBUEksIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHRhZ3Mgb24gUG9s aWNpZXMgJiBMaWZlY3ljbGUgeWV0CiAgKiBSR1cgbXVsdGlzaXRlIG5vdyBzdXBwb3J0cyBmb3Ig ZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHN5bmMgYXQgYQogICAgYnVja2V0IGxldmVsLgoKLSAqUkJE KjoKCiAgKiBSQkQgbm93IGhhcyBmdWxsLCBzdGFibGUgc3VwcG9ydCBmb3IgKmVyYXN1cmUgY29k ZWQgcG9vbHMqIHZpYSB0aGUgbmV3CiAgICBgYC0tZGF0YS1wb29sYGAgb3B0aW9uIHRvIGBgcmJk IGNyZWF0ZWBgLgogICogUkJEIG1pcnJvcmluZydzIHJiZC1taXJyb3IgZGFlbW9uIGlzIG5vdyBo aWdobHkgYXZhaWxhYmxlLiBXZQogICAgcmVjb21tZW5kIGRlcGxveWluZyBzZXZlcmFsIGluc3Rh bmNlcyBvZiByYmQtbWlycm9yIGZvcgogICAgcmVsaWFiaWxpdHkuCiAgKiBSQkQgbWlycm9yaW5n J3MgcmJkLW1pcnJvciBkYWVtb24gc2hvdWxkIHV0aWxpemUgdW5pcXVlIENlcGggdXNlcgogICAg SURzIHBlciBpbnN0YW5jZSB0byBzdXBwb3J0IHRoZSBuZXcgbWlycm9yaW5nIGRhc2hib2FyZC4K ICAqIFRoZSBkZWZhdWx0ICdyYmQnIHBvb2wgaXMgbm8gbG9uZ2VyIGNyZWF0ZWQgYXV0b21hdGlj YWxseSBkdXJpbmcKICAgIGNsdXN0ZXIgY3JlYXRpb24uIEFkZGl0aW9uYWxseSwgdGhlIG5hbWUg b2YgdGhlIGRlZmF1bHQgcG9vbCB1c2VkCiAgICBieSB0aGUgcmJkIENMSSB3aGVuIG5vIHBvb2wg aXMgc3BlY2lmaWVkIGNhbiBiZSBvdmVycmlkZGVuIHZpYSBhCiAgICBuZXcgYGByYmQgZGVmYXVs dCBwb29sID0gPHBvb2wgbmFtZT5gYCBjb25maWd1cmF0aW9uIG9wdGlvbi4KICAqIEluaXRpYWwg c3VwcG9ydCBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVsZXRpb24gdmlhIG5ldyBgYHJiZAogICAgdHJh c2hgYCBDTEkgY29tbWFuZHMuIEltYWdlcywgZXZlbiBvbmVzIGFjdGl2ZWx5IGluLXVzZSBieQog ICAgY2xvbmVzLCBjYW4gYmUgbW92ZWQgdG8gdGhlIHRyYXNoIGFuZCBkZWxldGVkIGF0IGEgbGF0 ZXIgdGltZS4KICAqIE5ldyBwb29sLWxldmVsIGBgcmJkIG1pcnJvciBwb29sIHByb21vdGVgYCBh bmQgYGByYmQgbWlycm9yIHBvb2wKICAgIGRlbW90ZWBgIGNvbW1hbmRzIHRvIGJhdGNoIHByb21v dGUvZGVtb3RlIGFsbCBtaXJyb3JlZCBpbWFnZXMKICAgIHdpdGhpbiBhIHBvb2wuCiAgKiBNaXJy b3Jpbmcgbm93IG9wdGlvbmFsbHkgc3VwcG9ydHMgYSBjb25maWd1cmFibGUgcmVwbGljYXRpb24g ZGVsYXkKICAgIHZpYSB0aGUgYGByYmQgbWlycm9yaW5nIHJlcGxheSBkZWxheSA9IDxzZWNvbmRz PmBgIGNvbmZpZ3VyYXRpb24KICAgIG9wdGlvbi4KICAqIEltcHJvdmVkIGRpc2NhcmQgaGFuZGxp bmcgd2hlbiB0aGUgb2JqZWN0IG1hcCBmZWF0dXJlIGlzIGVuYWJsZWQuCiAgKiByYmQgQ0xJIGBg aW1wb3J0YGAgYW5kIGBgY29weWBgIGNvbW1hbmRzIG5vdyBkZXRlY3Qgc3BhcnNlIGFuZAogICAg cHJlc2VydmUgc3BhcnNlIHJlZ2lvbnMuCiAgKiBJbWFnZXMgYW5kIFNuYXBzaG90cyB3aWxsIG5v dyBpbmNsdWRlIGEgY3JlYXRpb24gdGltZXN0YW1wLgogICogU3BlY2lmeWluZyB1c2VyIGF1dGhv cml6YXRpb24gY2FwYWJpbGl0aWVzIGZvciBSQkQgY2xpZW50cyBoYXMgYmVlbgogICAgc2ltcGxp ZmllZC4gVGhlIGdlbmVyYWwgc3ludGF4IGZvciB1c2luZyBSQkQgY2FwYWJpbGl0eSBwcm9maWxl cyBpcwogICAgIm1vbiAncHJvZmlsZSByYmQnIG9zZCAncHJvZmlsZSByYmRbLXJlYWQtb25seV1b IHBvb2w9e3Bvb2wtbmFtZX1bLCAuLi5dXSciLgogICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgIlVz ZXIgTWFuYWdlbWVudCIgaW4gdGhlIGRvY3VtZW50YXRpb24uCgotICpDZXBoRlMqOgoKICAqICpN dWx0aXBsZSBhY3RpdmUgTURTIGRhZW1vbnMqIGlzIG5vdyBjb25zaWRlcmVkIHN0YWJsZS4gIFRo ZSBudW1iZXIKICAgIG9mIGFjdGl2ZSBNRFMgc2VydmVycyBtYXkgYmUgYWRqdXN0ZWQgdXAgb3Ig ZG93biBvbiBhbiBhY3RpdmUgQ2VwaEZTIGZpbGUKICAgIHN5c3RlbS4KICAqIENlcGhGUyAqZGly ZWN0b3J5IGZyYWdtZW50YXRpb24qIGlzIG5vdyBzdGFibGUgYW5kIGVuYWJsZWQgYnkKICAgIGRl ZmF1bHQgb24gbmV3IGZpbGVzeXN0ZW1zLiAgVG8gZW5hYmxlIGl0IG9uIGV4aXN0aW5nIGZpbGVz eXN0ZW1zCiAgICB1c2UgImNlcGggZnMgc2V0IDxmc19uYW1lPiBhbGxvd19kaXJmcmFncyIuICBM YXJnZSBvciB2ZXJ5IGJ1c3kKICAgIGRpcmVjdG9yaWVzIGFyZSBzaGFyZGVkIGFuZCAocG90ZW50 aWFsbHkpIGRpc3RyaWJ1dGVkIGFjcm9zcwogICAgbXVsdGlwbGUgTURTIGRhZW1vbnMgYXV0b21h dGljYWxseS4KICAqIERpcmVjdG9yeSBzdWJ0cmVlcyBjYW4gYmUgZXhwbGljaXRseSBwaW5uZWQg dG8gc3BlY2lmaWMgTURTIGRhZW1vbnMgaW4KICAgIGNhc2VzIHdoZXJlIHRoZSBhdXRvbWF0aWMg bG9hZCBiYWxhbmNpbmcgaXMgbm90IGRlc2lyZWQgb3IgZWZmZWN0aXZlLgogICogQ2xpZW50IGtl eXMgY2FuIG5vdyBiZSBjcmVhdGVkIHVzaW5nIHRoZSBuZXcgYGBjZXBoIGZzIGF1dGhvcml6ZWBg IGNvbW1hbmQKICAgIHRvIGNyZWF0ZSBrZXlzIHdpdGggYWNjZXNzIHRvIHRoZSBnaXZlbiBDZXBo RlMgZmlsZSBzeXN0ZW0gYW5kIGFsbCBvZiBpdHMKICAgIGRhdGEgcG9vbHMuCiAgKiBUaGUgJ2Fw cGx5JyBtb2RlIG9mIGNlcGhmcy1qb3VybmFsLXRvb2wgaGFzIGJlZW4gcmVtb3ZlZAogICogV2hl biBydW5uaW5nICdkZicgb24gYSBDZXBoRlMgZmlsZXN5c3RlbSBjb21wcmlzaW5nIGV4YWN0bHkg b25lIGRhdGEgcG9vbCwKICAgIHRoZSByZXN1bHQgbm93IHJlZmxlY3RzIHRoZSBmaWxlIHN0b3Jh Z2Ugc3BhY2UgdXNlZCBhbmQgYXZhaWxhYmxlIGluIHRoYXQKICAgIGRhdGEgcG9vbCAoZnVzZSBj bGllbnQgb25seSkuCgoKLSAqTWlzY2VsbGFuZW91cyo6CgogICogUmVsZWFzZSBwYWNrYWdlcyBh cmUgbm93IGJlaW5nIGJ1aWx0IGZvciAqRGViaWFuIFN0cmV0Y2gqLiAgTm90ZQogICAgdGhhdCBR QSBpcyBsaW1pdGVkIHRvIENlbnRPUyBhbmQgVWJ1bnR1ICh4ZW5pYWwgYW5kIHRydXN0eSkuICBU aGUKICAgIGRpc3RyaWJ1dGlvbnMgd2UgYnVpbGQgZm9yIG5vdyBpbmNsdWRlczoKCiAgICAtIENl bnRPUyA3ICh4ODZfNjQgYW5kIGFhcmNoNjQpCiAgICAtIERlYmlhbiA4IEplc3NpZSAoeDg2XzY0 KQogICAgLSBEZWJpYW4gOSBTdHJldGNoICh4ODZfNjQpCiAgICAtIFVidW50dSAxNi4wNCBYZW5p YWwgKHg4Nl82NCBhbmQgYWFyY2g2NCkKICAgIC0gVWJ1bnR1IDE0LjA0IFRydXN0eSAoeDg2XzY0 KQoKICAqIEEgZmlyc3QgcmVsZWFzZSBvZiBDZXBoIGZvciBGcmVlQlNEIGlzIGF2YWlsYWJsZSB3 aGljaCBjb250YWlucyBhIGZ1bGwgc2V0CiAgICBvZiBmZWF0dXJlcywgb3RoZXIgdGhhbiBCbHVl c3RvcmUuIEl0IHdpbGwgcnVuIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGJ1aWxkIGEKICAgIHN0b3Jh Z2UgY2x1c3Rlci4gRm9yIGNsaWVudHMsIGFsbCBhY2Nlc3MgbWV0aG9kcyBhcmUgYXZhaWxhYmxl LCBhbGJlaXQKICAgIENlcGhGUyBpcyBvbmx5IGFjY2Vzc2libGUgdGhyb3VnaCBhIEZ1c2UgaW1w bGVtZW50YXRpb24uIFJCRCBpbWFnZXMgY2FuIGJlCiAgICBtb3VudGVkIG9uIEZyZWVCU0Qgc3lz dGVtcyB0aHJvdWdoIHJiZC1nZ2F0ZQoKICAgIENlcGggdmVyc2lvbnMgYXJlIHJlbGVhc2VkIHRo cm91Z2ggdGhlIHJlZ3VsYXIgRnJlZUJTRCBwb3J0cyBhbmQgcGFja2FnZXMKICAgIHN5c3RlbS4g VGhlIG1vc3QgY3VycmVudCB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBhczogbmV0L2NlcGgtZGV2ZWwu IE9uY2UKICAgIEx1bWlub3VzIGdvZXMgaW50byBvZmZpY2lhbCByZWxlYXNlLCB0aGlzIHZlcnNp b24gd2lsbCBiZSBhdmFpbGFibGUgYXMKICAgIG5ldC9jZXBoLiBGdXR1cmUgZGV2ZWxvcG1lbnQg cmVsZWFzZXMgd2lsbCBiZSBhdmFpbGFibGUgdmlhIG5ldC9jZXBoLWRldmVsCgogICogKkNMSSBj aGFuZ2VzKjoKCiAgICAtIFRoZSBgYGNlcGggLXNgYCBvciBgYGNlcGggc3RhdHVzYGAgY29tbWFu ZCBoYXMgYSBmcmVzaCBsb29rLgogICAgLSBgYGNlcGggbWdyIG1ldGFkYXRhYGAgd2lsbCBkdW1w IG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG1ncgogICAgICBkYWVtb24uCiAgICAtIGBg Y2VwaCB2ZXJzaW9uc2BgIG9yIGBgY2VwaCB7b3NkLG1kcyxtb24sbWdyfSB2ZXJzaW9uc2BgCiAg ICAgIHN1bW1hcml6ZSB2ZXJzaW9ucyBvZiBydW5uaW5nIGRhZW1vbnMuCiAgICAtIGBgY2VwaCB7 b3NkLG1kcyxtb24sbWdyfSBjb3VudC1tZXRhZGF0YSA8cHJvcGVydHk+YGAgc2ltaWxhcmx5CiAg ICAgIHRhYnVsYXRlcyBhbnkgb3RoZXIgZGFlbW9uIG1ldGFkYXRhIHZpc2libGUgdmlhIHRoZSBg YGNlcGgKICAgICAge29zZCxtZHMsbW9uLG1ncn0gbWV0YWRhdGFgYCBjb21tYW5kcy4KICAgIC0g YGBjZXBoIGZlYXR1cmVzYGAgc3VtbWFyaXplcyBmZWF0dXJlcyBhbmQgcmVsZWFzZXMgb2YgY29u bmVjdGVkCiAgICAgIGNsaWVudHMgYW5kIGRhZW1vbnMuCiAgICAtIGBgY2VwaCBvc2QgcmVxdWly ZS1vc2QtcmVsZWFzZSA8cmVsZWFzZT5gYCByZXBsYWNlcyB0aGUgb2xkCiAgICAgIGBgcmVxdWly ZV9SRUxFQVNFX29zZHNgYCBmbGFncy4KICAgIC0gYGBjZXBoIG9zZCBwZy11cG1hcGBgLCBgYGNl cGggb3NkIHJtLXBnLXVwbWFwYGAsIGBgY2VwaCBvc2QKICAgICAgcGctdXBtYXAtaXRlbXNgYCwg YGBjZXBoIG9zZCBybS1wZy11cG1hcC1pdGVtc2BgIGNhbiBleHBsaWNpdGx5CiAgICAgIG1hbmFn ZSBgdXBtYXBgIGl0ZW1zLiAKICAgIC0gYGBjZXBoIG9zZCBnZXRjcnVzaG1hcGBgIHJldHVybnMg YSBjcnVzaCBtYXAgdmVyc2lvbiBudW1iZXIgb24KICAgICAgc3RkZXJyLCBhbmQgYGBjZXBoIG9z ZCBzZXRjcnVzaG1hcCBbdmVyc2lvbl1gYCB3aWxsIG9ubHkgaW5qZWN0CiAgICAgIGFuIHVwZGF0 ZWQgY3J1c2ggbWFwIGlmIHRoZSB2ZXJzaW9uIG1hdGNoZXMuICBUaGlzIGFsbG93cyBjcnVzaAog ICAgICBtYXBzIHRvIGJlIHVwZGF0ZWQgb2ZmbGluZSBhbmQgdGhlbiByZWluamVjdGVkIGludG8g dGhlIGNsdXN0ZXIKICAgICAgd2l0aG91dCBmZWFyIG9mIGNsb2JiZXJpbmcgcmFjaW5nIGNoYW5n ZXMgKGUuZy4sIGJ5IG5ld2x5IGFkZGVkCiAgICAgIG9zZHMgb3IgY2hhbmdlcyBieSBvdGhlciBh ZG1pbmlzdHJhdG9ycykuCiAgICAtIGBgY2VwaCBvc2QgY3JlYXRlYGAgaGFzIGJlZW4gcmVwbGFj ZWQgYnkgYGBjZXBoIG9zZCBuZXdgYC4gIFRoaXMKICAgICAgc2hvdWxkIGJlIGhpZGRlbiBmcm9t IG1vc3QgdXNlcnMgYnkgdXNlci1mYWNpbmcgdG9vbHMgbGlrZQogICAgICBgY2VwaC1kaXNrYC4K ICAgIC0gYGBjZXBoIG9zZCBkZXN0cm95YGAgd2lsbCBtYXJrIGFuIE9TRCBkZXN0cm95ZWQgYW5k IHJlbW92ZSBpdHMKICAgICAgY2VwaHggYW5kIGxvY2tib3gga2V5cy4gIEhvd2V2ZXIsIHRoZSBP U0QgaWQgYW5kIENSVVNIIG1hcCBlbnRyeQogICAgICB3aWxsIHJlbWFpbiBpbiBwbGFjZSwgYWxs b3dpbmcgdGhlIGlkIHRvIGJlIHJldXNlZCBieSBhCiAgICAgIHJlcGxhY2VtZW50IGRldmljZSB3 aXRoIG1pbmltYWwgZGF0YSByZWJhbGFuY2luZy4KICAgIC0gYGBjZXBoIG9zZCBwdXJnZWBgIHdp bGwgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgYW4gT1NEIGZyb20gdGhlCiAgICAgIGNsdXN0ZXIsIGlu Y2x1ZGluZyBpdHMgY2VwaHggZW5jcnlwdGlvbiBrZXlzLCBkbS1jcnlwdCBsb2NrYm94CiAgICAg IGtleXMsIE9TRCBpZCwgYW5kIGNydXNoIG1hcCBlbnRyeS4KICAgIC0gYGBjZXBoIG9zZCBscy10 cmVlIDxuYW1lPmBgIHdpbGwgb3V0cHV0IGEgbGlzdCBvZiBPU0QgaWRzIHVuZGVyCiAgICAgIHRo ZSBnaXZlbiBDUlVTSCBuYW1lIChsaWtlIGEgaG9zdCBvciByYWNrIG5hbWUpLiAgVGhpcyBpcyB1 c2VmdWwKICAgICAgZm9yIGFwcGx5aW5nIGNoYW5nZXMgdG8gZW50aXJlIHN1YnRyZWVzLiAgRm9y IGV4YW1wbGUsIGBgY2VwaAogICAgICBvc2QgZG93biBgY2VwaCBvc2QgbHMtdHJlZSByYWNrMWBg YC4KICAgIC0gYGBjZXBoIG9zZCB7YWRkLHJtfS17bm9vdXQsbm9pbixub2Rvd24sbm91cH1gYCBh bGxvdyB0aGUKICAgICAgYG5vb3V0YCwgYG5vaW5gLCBgbm9kb3duYCwgYW5kIGBub3VwYCBmbGFn cyB0byBiZSBhcHBsaWVkIHRvCiAgICAgIHNwZWNpZmljIE9TRHMuCiAgICAtIGBgY2VwaCBsb2cg bGFzdCBbbl1gYCB3aWxsIG91dHB1dCB0aGUgbGFzdCAqbiogbGluZXMgb2YgdGhlIGNsdXN0ZXIK ICAgICAgbG9nLgogICAgLSBgYGNlcGggbWdyIGR1bXBgYCB3aWxsIGR1bXAgdGhlIE1nck1hcCwg aW5jbHVkaW5nIHRoZSBjdXJyZW50bHkgYWN0aXZlCiAgICAgIGNlcGgtbWdyIGRhZW1vbiBhbmQg YW55IHN0YW5kYnlzLgogICAgLSBgYGNlcGggbWdyIG1vZHVsZSBsc2BgIHdpbGwgbGlzdCBhY3Rp dmUgY2VwaC1tZ3IgbW9kdWxlcy4KICAgIC0gYGBjZXBoIG1nciBtb2R1bGUge2VuYWJsZSxkaXNh YmxlfSA8bmFtZT5gYCB3aWxsIGVuYWJsZSBvcgogICAgICBkaXNhYmxlIHRoZSBuYW1lZCBtZ3Ig bW9kdWxlLiAgVGhlIG1vZHVsZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlCiAgICAgIGNvbmZpZ3Vy ZWQgYG1ncl9tb2R1bGVfcGF0aGAgb24gdGhlIGhvc3Qocykgd2hlcmUgYGNlcGgtbWdyYCBpcwog ICAgICBydW5uaW5nLgogICAgLSBgYGNlcGggb3NkIGNydXNoIHN3YXAtYnVja2V0IDxzcmM+IDxk ZXN0PmBgIHdpbGwgc3dhcCB0aGUKICAgICAgY29udGVudHMgb2YgdHdvIENSVVNIIGJ1Y2tldHMg aW4gdGhlIGhpZXJhcmNoeSB3aGlsZSBwcmVzZXJ2aW5nCiAgICAgIHRoZSBidWNrZXRzJyBpZHMu ICBUaGlzIGFsbG93cyBhbiBlbnRpcmUgc3VidHJlZSBvZiBkZXZpY2VzIHRvCiAgICAgIGJlIHJl cGxhY2VkIChlLmcuLCB0byByZXBsYWNlIGFuIGVudGlyZSBob3N0IG9mIEZpbGVTdG9yZSBPU0Rz CiAgICAgIHdpdGggbmV3bHktaW1hZ2VkIEJsdWVTdG9yZSBPU0RzKSB3aXRob3V0IGRpc3J1cHRp bmcgdGhlCiAgICAgIGRpc3RyaWJ1dGlvbiBvZiBkYXRhIGFjcm9zcyBuZWlnaGJvcmluZyBkZXZp Y2VzLgogICAgLSBgYGNlcGggb3NkIHNldC1yZXF1aXJlLW1pbi1jb21wYXQtY2xpZW50IDxyZWxl YXNlPmBgIGNvbmZpZ3VyZXMKICAgICAgdGhlIG9sZGVzdCBjbGllbnQgcmVsZWFzZSB0aGUgY2x1 c3RlciBpcyByZXF1aXJlZCB0byBzdXBwb3J0LgogICAgICBPdGhlciBjaGFuZ2VzLCBsaWtlIENS VVNIIHR1bmFibGVzLCB3aWxsIGZhaWwgd2l0aCBhbiBlcnJvciBpZgogICAgICB0aGV5IHdvdWxk IHZpb2xhdGUgdGhpcyBzZXR0aW5nLiAgQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIGFsc28KICAgICAg ZmFpbHMgaWYgY2xpZW50cyBvbGRlciB0aGFuIHRoZSBzcGVjaWZpZWQgcmVsZWFzZSBhcmUgY3Vy cmVudGx5CiAgICAgIGNvbm5lY3RlZCB0byB0aGUgY2x1c3Rlci4KICAgIC0gYGBjZXBoIGNvbmZp Zy1rZXkgZHVtcGBgIGR1bXBzIGNvbmZpZy1rZXkgZW50cmllcyBhbmQgdGhlaXIKICAgICAgY29u dGVudHMuICAoVGhlIGV4aXN0aW5nIGBgY2VwaCBjb25maWcta2V5IGxpc3RgYCBvbmx5IGR1bXBz IHRoZSBrZXkKICAgICAgbmFtZXMsIG5vdCB0aGUgdmFsdWVzLikKICAgIC0gYGBjZXBoIGNvbmZp Zy1rZXkgbGlzdGBgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGBjZXBoIGNvbmZpZy1rZXkg bHNgYC4KICAgIC0gYGBjZXBoIGNvbmZpZy1rZXkgcHV0YGAgaXMgZGVwcmVjYXRlZCBpbiBmYXZv ciBvZiBgYGNlcGggY29uZmlnLWtleSBzZXRgYC4KICAgIC0gYGBjZXBoIGF1dGggbGlzdGBgIGlz IGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGBjZXBoIGF1dGggbHNgYC4KICAgIC0gYGBjZXBoIG9z ZCBjcnVzaCBydWxlIGxpc3RgYCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBgY2VwaCBvc2Qg Y3J1c2ggcnVsZSBsc2BgLgogICAgLSBgYGNlcGggb3NkIHNldC17ZnVsbCxuZWFyZnVsbCxiYWNr ZmlsbGZ1bGx9LXJhdGlvYGAgc2V0cyB0aGUKICAgICAgY2x1c3Rlci13aWRlIHJhdGlvIGZvciB2 YXJpb3VzIGZ1bGwgdGhyZXNob2xkcyAod2hlbiB0aGUgY2x1c3RlcgogICAgICByZWZ1c2VzIElP LCB3aGVuIHRoZSBjbHVzdGVyIHdhcm5zIGFib3V0IGJlaW5nIGNsb3NlIHRvIGZ1bGwsCiAgICAg IHdoZW4gYW4gT1NEIHdpbGwgZGVmZXIgcmViYWxhbmNpbmcgYSBQRyB0byBpdHNlbGYsCiAgICAg IHJlc3BlY3RpdmVseSkuCiAgICAtIGBgY2VwaCBvc2QgcmV3ZWlnaHRuYGAgd2lsbCBzcGVjaWZ5 IHRoZSBgcmV3ZWlnaHRgIHZhbHVlcyBmb3IKICAgICAgbXVsdGlwbGUgT1NEcyBpbiBhIHNpbmds ZSBjb21tYW5kLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgc2VyaWVzIG9mCiAgICAgIGBgY2Vw aCBvc2QgcmV3ZWlnaHRgYCBjb21tYW5kcy4KICAgIC0gYGBjZXBoIG9zZCBjcnVzaCB7c2V0LHJt fS1kZXZpY2UtY2xhc3NgYCBtYW5hZ2UgdGhlIG5ldwogICAgICBDUlVTSCAqZGV2aWNlIGNsYXNz KiBmZWF0dXJlLiBOb3RlIHRoYXQgbWFudWFsbHkgY3JlYXRpbmcgb3IgZGVsZXRpbmcKICAgICAg YSBkZXZpY2UgY2xhc3MgbmFtZSBpcyBnZW5lcmFsbHkgbm90IG5lY2Vzc2FyeSBhcyBpdCB3aWxs IGJlIHNtYXJ0CiAgICAgIGVub3VnaCB0byBiZSBzZWxmLW1hbmFnZWQuIGBgY2VwaCBvc2QgY3J1 c2ggY2xhc3MgbHNgYCBhbmQgCiAgICAgIGBgY2VwaCBvc2QgY3J1c2ggY2xhc3MgbHMtb3NkYGAg d2lsbCBvdXRwdXQgYWxsIGV4aXN0aW5nIGRldmljZSBjbGFzc2VzIAogICAgICBhbmQgYSBsaXN0 IG9mIE9TRCBpZHMgdW5kZXIgdGhlIGdpdmVuIGRldmljZSBjbGFzcyByZXNwZWN0aXZlbHkuCiAg ICAtIGBgY2VwaCBvc2QgY3J1c2ggcnVsZSBjcmVhdGUtcmVwbGljYXRlZGBgIHJlcGxhY2VzIHRo ZSBvbGQKICAgICAgYGBjZXBoIG9zZCBjcnVzaCBydWxlIGNyZWF0ZS1zaW1wbGVgYCBjb21tYW5k IHRvIGNyZWF0ZSBhIENSVVNICiAgICAgIHJ1bGUgZm9yIGEgcmVwbGljYXRlZCBwb29sLiAgTm90 YWJseSBpdCB0YWtlcyBhIGBjbGFzc2AgYXJndW1lbnQKICAgICAgZm9yIHRoZSAqZGV2aWNlIGNs YXNzKiB0aGUgcnVsZSBzaG91bGQgdGFyZ2V0IChlLmcuLCBgc3NkYCBvcgogICAgICBgaGRkYCku CiAgICAtIGBgY2VwaCBtb24gZmVhdHVyZSBsc2BgIHdpbGwgbGlzdCBtb25pdG9yIGZlYXR1cmVz IHJlY29yZGVkIGluIHRoZQogICAgICBNb25NYXAuICBgYGNlcGggbW9uIGZlYXR1cmUgc2V0YGAg d2lsbCBzZXQgYW4gb3B0aW9uYWwgZmVhdHVyZSAobm9uZSBvZgogICAgICB0aGVzZSBleGlzdCB5 ZXQpLgogICAgLSBgYGNlcGggdGVsbCA8ZGFlbW9uPiBoZWxwYGAgd2lsbCBub3cgcmV0dXJuIGEg dXNhZ2Ugc3VtbWFyeS4KICAgIC0gYGBjZXBoIGZzIGF1dGhvcml6ZWBgIGNyZWF0ZXMgYSBuZXcg Y2xpZW50IGtleSB3aXRoIGNhcHMgYXV0b21hdGljYWxseQogICAgICBzZXQgdG8gYWNjZXNzIHRo ZSBnaXZlbiBDZXBoRlMgZmlsZSBzeXN0ZW0uCiAgICAtIFRoZSBgYGNlcGggaGVhbHRoYGAgc3Ry dWN0dXJlZCBvdXRwdXQgKEpTT04gb3IgWE1MKSBubyBsb25nZXIgY29udGFpbnMKICAgICAgJ3Rp bWVjaGVja3MnIHNlY3Rpb24gZGVzY3JpYmluZyB0aGUgdGltZSBzeW5jIHN0YXR1cy4gIFRoaXMK ICAgICAgaW5mb3JtYXRpb24gaXMgbm93IGF2YWlsYWJsZSB2aWEgdGhlICdjZXBoIHRpbWUtc3lu Yy1zdGF0dXMnCiAgICAgIGNvbW1hbmQuCiAgICAtIENlcnRhaW4gZXh0cmEgZmllbGRzIGluIHRo ZSBgYGNlcGggaGVhbHRoYGAgc3RydWN0dXJlZCBvdXRwdXQgdGhhdAogICAgICB1c2VkIHRvIGFw cGVhciBpZiB0aGUgbW9ucyB3ZXJlIGxvdyBvbiBkaXNrIHNwYWNlICh3aGljaCBkdXBsaWNhdGVk CiAgICAgIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgbm9ybWFsIGhlYWx0aCB3YXJuaW5nIG1lc3Nh Z2VzKSBhcmUgbm93IGdvbmUuCiAgICAtIFRoZSBgYGNlcGggLXdgYCBvdXRwdXQgbm8gbG9uZ2Vy IGNvbnRhaW5zIGF1ZGl0IGxvZyBlbnRyaWVzIGJ5IGRlZmF1bHQuCiAgICAgIEFkZCBhIGBgLS13 YXRjaC1jaGFubmVsPWF1ZGl0YGAgb3IgYGAtLXdhdGNoLWNoYW5uZWw9KmBgIHRvIHNlZSB0aGVt LgogICAgLSBOZXcgImNlcGggLXciIGJlaGF2aW9yIC0gdGhlICJjZXBoIC13IiBvdXRwdXQgbm8g bG9uZ2VyIGNvbnRhaW5zCiAgICAgIEkvTyByYXRlcywgYXZhaWxhYmxlIHNwYWNlLCBwZyBpbmZv LCBldGMuIGJlY2F1c2UgdGhlc2UgYXJlIG5vCiAgICAgIGxvbmdlciBsb2dnZWQgdG8gdGhlIGNl bnRyYWwgbG9nICh3aGljaCBpcyB3aGF0IGBgY2VwaCAtd2BgCiAgICAgIHNob3dzKS4gVGhlIHNh bWUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IHJ1bm5pbmcgYGBjZXBoIHBnCiAgICAg IHN0YXRgYDsgYWx0ZXJuYXRpdmVseSwgSS9PIHJhdGVzIHBlciBwb29sIGNhbiBiZSBkZXRlcm1p bmVkIHVzaW5nCiAgICAgIGBgY2VwaCBvc2QgcG9vbCBzdGF0c2BgLiBBbHRob3VnaCB0aGVzZSBj b21tYW5kcyBkbyBub3QKICAgICAgc2VsZi11cGRhdGUgbGlrZSBgYGNlcGggLXdgYCBkaWQsIHRo ZXkgZG8gaGF2ZSB0aGUgYWJpbGl0eSB0bwogICAgICByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBi eSBwcm92aWRpbmcgYSBgYC0tZm9ybWF0PTxmb3JtYXQ+YGAKICAgICAgb3B0aW9uLgoKCgpNYWpv ciBDaGFuZ2VzIGZyb20gSmV3ZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotICpSQURPUyo6 CgogICogV2Ugbm93IGRlZmF1bHQgdG8gdGhlIEFzeW5jTWVzc2VuZ2VyIChgYG1zIHR5cGUgPSBh c3luY2BgKSBpbnN0ZWFkCiAgICBvZiB0aGUgbGVnYWN5IFNpbXBsZU1lc3Nlbmdlci4gIFRoZSBt b3N0IG5vdGljZWFibGUgZGlmZmVyZW5jZSBpcwogICAgdGhhdCB3ZSBub3cgdXNlIGEgZml4ZWQg c2l6ZWQgdGhyZWFkIHBvb2wgZm9yIG5ldHdvcmsgY29ubmVjdGlvbnMKICAgIChpbnN0ZWFkIG9m IHR3byB0aHJlYWRzIHBlciBzb2NrZXQgd2l0aCBTaW1wbGVNZXNzZW5nZXIpLgogICogU29tZSBP U0QgZmFpbHVyZXMgYXJlIG5vdyBkZXRlY3RlZCBhbG1vc3QgaW1tZWRpYXRlbHksIHdoZXJlYXMK ICAgIHByZXZpb3VzbHkgdGhlIGhlYXJ0YmVhdCB0aW1lb3V0ICh3aGljaCBkZWZhdWx0cyB0byAy MCBzZWNvbmRzKQogICAgaGFkIHRvIGV4cGlyZS4gIFRoaXMgcHJldmVudHMgSU8gZnJvbSBibG9j a2luZyBmb3IgYW4gZXh0ZW5kZWQKICAgIHBlcmlvZCBmb3IgZmFpbHVyZXMgd2hlcmUgdGhlIGhv c3QgcmVtYWlucyB1cCBidXQgdGhlIGNlcGgtb3NkCiAgICBwcm9jZXNzIGlzIG5vIGxvbmdlciBy dW5uaW5nLgogICogVGhlIHNpemUgb2YgZW5jb2RlZCBPU0RNYXBzIGhhcyBiZWVuIHJlZHVjZWQu CiAgKiBUaGUgT1NEcyBub3cgcXVpZXNjZSBzY3J1YmJpbmcgd2hlbiByZWNvdmVyeSBvciByZWJh bGFuY2luZyBpcyBpbiBwcm9ncmVzcy4KCi0gKlJHVyo6CgogICogUkdXIG5vdyBzdXBwb3J0cyB0 aGUgUzMgbXVsdGlwYXJ0IG9iamVjdCBjb3B5LXBhcnQgQVBJLgogICogSXQgaXMgcG9zc2libGUg bm93IHRvIHJlc2hhcmQgYW4gZXhpc3RpbmcgYnVja2V0IG9mZmxpbmUuIE9mZmxpbmUKICAgIGJ1 Y2tldCByZXNoYXJkaW5nIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0IGFsbCBJTyAoZXNwZWNpYWxs eQogICAgd3JpdGVzKSB0byB0aGUgc3BlY2lmaWMgYnVja2V0IGlzIHF1aWVzY2VkLiAgKEZvciBh dXRvbWF0aWMgb25saW5lCiAgICByZXNoYXJkaW5nLCBzZWUgdGhlIG5ldyBmZWF0dXJlIGluIEx1 bWlub3VzIGFib3ZlLikKICAqIFJHVyBub3cgc3VwcG9ydHMgZGF0YSBjb21wcmVzc2lvbiBmb3Ig b2JqZWN0cy4KICAqIENpdmV0d2ViIHZlcnNpb24gaGFzIGJlZW4gdXBncmFkZWQgdG8gMS44CiAg KiBUaGUgU3dpZnQgc3RhdGljIHdlYnNpdGUgQVBJIGlzIG5vdyBzdXBwb3J0ZWQgKFMzIHN1cHBv cnQgaGFzIGJlZW4gYWRkZWQKICAgIHByZXZpb3VzbHkpLgogICogUzMgYnVja2V0IGxpZmVjeWNs ZSBBUEkgaGFzIGJlZW4gYWRkZWQuIE5vdGUgdGhhdCBjdXJyZW50bHkgaXQgb25seSBzdXBwb3J0 cwogICAgb2JqZWN0IGV4cGlyYXRpb24uCiAgKiBTdXBwb3J0IGZvciBjdXN0b20gc2VhcmNoIGZp bHRlcnMgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIExEQVAgYXV0aAogICAgaW1wbGVtZW50YXRpb24u CiAgKiBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBSR1cg TkZTIGdhdGV3YXkuCiAgKiBBIFB5dGhvbiBiaW5kaW5nIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIGxp YnJndy4KCgotICpSQkQqOgoKICAqIFRoZSByYmQtbWlycm9yIGRhZW1vbiBub3cgc3VwcG9ydHMg cmVwbGljYXRpbmcgZHluYW1pYyBpbWFnZQogICAgZmVhdHVyZSB1cGRhdGVzIGFuZCBpbWFnZSBt ZXRhZGF0YSBrZXkvdmFsdWUgcGFpcnMgZnJvbSB0aGUKICAgIHByaW1hcnkgaW1hZ2UgdG8gdGhl IG5vbi1wcmltYXJ5IGltYWdlLgogICogVGhlIG51bWJlciBvZiBpbWFnZSBzbmFwc2hvdHMgY2Fu IGJlIG9wdGlvbmFsbHkgcmVzdHJpY3RlZCB0byBhCiAgICBjb25maWd1cmFibGUgbWF4aW11bS4K ICAqIFRoZSByYmQgUHl0aG9uIEFQSSBub3cgc3VwcG9ydHMgYXN5bmNocm9ub3VzIElPIG9wZXJh dGlvbnMuCgotICpDZXBoRlMqOgoKICAqIGxpYmNlcGhmcyBmdW5jdGlvbiBkZWZpbml0aW9ucyBo YXZlIGJlZW4gY2hhbmdlZCB0byBlbmFibGUgcHJvcGVyCiAgICB1aWQvZ2lkIGNvbnRyb2wuICBU aGUgbGlicmFyeSB2ZXJzaW9uIGhhcyBiZWVuIGluY3JlYXNlZCB0byByZWZsZWN0IHRoZQogICAg aW50ZXJmYWNlIGNoYW5nZS4KICAqIFN0YW5kYnkgcmVwbGF5IE1EUyBkYWVtb25zIG5vdyBjb25z dW1lIGxlc3MgbWVtb3J5IG9uIHdvcmtsb2FkcwogICAgZG9pbmcgZGVsZXRpb25zLgogICogU2Ny dWIgbm93IHJlcGFpcnMgYmFja3RyYWNlLCBhbmQgcG9wdWxhdGVzIGBkYW1hZ2UgbHNgIHdpdGgK ICAgIGRpc2NvdmVyZWQgZXJyb3JzLgogICogQSBuZXcgYHBnX2ZpbGVzYCBzdWJjb21tYW5kIHRv IGBjZXBoZnMtZGF0YS1zY2FuYCBjYW4gaWRlbnRpZnkKICAgIGZpbGVzIGFmZmVjdGVkIGJ5IGEg ZGFtYWdlZCBvciBsb3N0IFJBRE9TIFBHLgogICogVGhlIGZhbHNlLXBvc2l0aXZlICJmYWlsaW5n IHRvIHJlc3BvbmQgdG8gY2FjaGUgcHJlc3N1cmUiIHdhcm5pbmdzIGhhdmUKICAgIGJlZW4gZml4 ZWQuCgoKVXBncmFkZSBmcm9tIEpld2VsIG9yIEtyYWtlbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCgojLiBFbnN1cmUgdGhhdCB0aGUgYGBzb3J0Yml0d2lzZWBgIGZsYWcgaXMgZW5hYmxl ZDo6CgogICAgICMgY2VwaCBvc2Qgc2V0IHNvcnRiaXR3aXNlCgojLiBNYWtlIHN1cmUgeW91ciBj bHVzdGVyIGlzIHN0YWJsZSBhbmQgaGVhbHRoeSAobm8gZG93biBvcgogICByZWNvdmVyeWluZyBP U0RzKS4gIChPcHRpb25hbCwgYnV0IHJlY29tbWVuZGVkLikKCiMuIERvIG5vdCBjcmVhdGUgYW55 IG5ldyBlcmFzdXJlLWNvZGUgcG9vbHMgd2hpbGUgdXBncmFkaW5nIHRoZSBtb25pdG9ycy4KCiMu IFlvdSBjYW4gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgeW91ciB1cGdyYWRlIGF0IGVhY2ggc3Rh Z2Ugd2l0aCB0aGUKICAgYGBjZXBoIHZlcnNpb25zYGAgY29tbWFuZCwgd2hpY2ggd2lsbCB0ZWxs IHlvdSB3aGF0IGNlcGggdmVyc2lvbiBpcwogICBydW5uaW5nIGZvciBlYWNoIHR5cGUgb2YgZGFl bW9uLgoKIy4gU2V0IHRoZSBgYG5vb3V0YGAgZmxhZyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1 cGdyYWRlLiAoT3B0aW9uYWwKICAgYnV0IHJlY29tbWVuZGVkLik6OgoKICAgICAjIGNlcGggb3Nk IHNldCBub291dAoKIy4gVXBncmFkZSBtb25pdG9ycyBieSBpbnN0YWxsaW5nIHRoZSBuZXcgcGFj a2FnZXMgYW5kIHJlc3RhcnRpbmcgdGhlCiAgIG1vbml0b3IgZGFlbW9ucy4gIE5vdGUgdGhhdCwg dW5saWtlIHByaW9yIHJlbGVhc2VzLCB0aGUgY2VwaC1tb24KICAgZGFlbW9ucyAqbXVzdCogYmUg dXBncmFkZWQgZmlyc3Q6OgoKICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IGNlcGgtbW9uLnRhcmdl dAoKICAgVmVyaWZ5IHRoZSBtb25pdG9yIHVwZ3JhZGUgaXMgY29tcGxldGUgb25jZSBhbGwgbW9u aXRvcnMgYXJlIHVwIGJ5CiAgIGxvb2tpbmcgZm9yIHRoZSBgYGx1bWlub3VzYGAgZmVhdHVyZSBz dHJpbmcgaW4gdGhlIG1vbiBtYXAuICBGb3IKICAgZXhhbXBsZTo6CgogICAgICMgY2VwaCBtb24g ZmVhdHVyZSBscwoKICAgc2hvdWxkIGluY2x1ZGUgYGx1bWlub3VzYCB1bmRlciBwZXJzaXN0ZW50 IGZlYXR1cmVzOjoKCiAgICAgb24gY3VycmVudCBtb25tYXAgKGVwb2NoIE5OTikKICAgICAgICBw ZXJzaXN0ZW50OiBba3Jha2VuLGx1bWlub3VzXQogICAgICAgIHJlcXVpcmVkOiBba3Jha2VuLGx1 bWlub3VzXQoKIy4gQWRkIG9yIHJlc3RhcnQgYGBjZXBoLW1ncmBgIGRhZW1vbnMuICBJZiB5b3Ug YXJlIHVwZ3JhZGluZyBmcm9tCiAgIGtyYWtlbiwgdXBncmFkZSBwYWNrYWdlcyBhbmQgcmVzdGFy dCBjZXBoLW1nciBkYWVtb25zIHdpdGg6OgoKICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IGNlcGgt bWdyLnRhcmdldAoKICAgSWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSBrcmFrZW4sIHlvdSBtYXkg YWxyZWFkeSBoYXZlIGNlcGgtbWdyCiAgIGRhZW1vbnMgZGVwbG95ZWQuICBJZiBub3QsIG9yIGlm IHlvdSBhcmUgdXBncmFkaW5nIGZyb20gamV3ZWwsIHlvdQogICBjYW4gZGVwbG95IG5ldyBkYWVt b25zIHdpdGggdG9vbHMgbGlrZSBjZXBoLWRlcGxveSBvciBjZXBoLWFuc2libGUuCiAgIEZvciBl eGFtcGxlOjoKCiAgICAgIyBjZXBoLWRlcGxveSBtZ3IgY3JlYXRlIEhPU1QKCiAgIFZlcmlmeSB0 aGUgY2VwaC1tZ3IgZGFlbW9ucyBhcmUgcnVubmluZyBieSBjaGVja2luZyBgYGNlcGggLXNgYDo6 CgogICAgICMgY2VwaCAtcwoKICAgICAuLi4KICAgICAgIHNlcnZpY2VzOgogICAgICAgIG1vbjog MyBkYWVtb25zLCBxdW9ydW0gZm9vLGJhcixiYXoKICAgICAgICBtZ3I6IGZvbyhhY3RpdmUpLCBz dGFuZGJ5czogYmFyLCBiYXoKICAgICAuLi4KCiMuIFVwZ3JhZGUgYWxsIE9TRHMgYnkgaW5zdGFs bGluZyB0aGUgbmV3IHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5nIHRoZQogICBjZXBoLW9zZCBkYWVt b25zIG9uIGFsbCBob3N0czo6CgogICAgICMgc3lzdGVtY3RsIHJlc3RhcnQgY2VwaC1vc2QudGFy Z2V0CgogICBZb3UgY2FuIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIHRoZSBPU0QgdXBncmFkZXMg d2l0aCB0aGUgbmV3CiAgIGBgY2VwaCB2ZXJzaW9uc2BgIG9yIGBgY2VwaCBvc2QgdmVyc2lvbnNg YCBjb21tYW5kOjoKCiAgICAgIyBjZXBoIG9zZCB2ZXJzaW9ucwogICAgIHsKICAgICAgICAiY2Vw aCB2ZXJzaW9uIDEyLjIuMCAoLi4uKSBsdW1pbm91cyAoc3RhYmxlKSI6IDEyLAogICAgICAgICJj ZXBoIHZlcnNpb24gMTAuMi42ICguLi4pIjogMywKICAgICB9CgojLiBVcGdyYWRlIGFsbCBDZXBo RlMgZGFlbW9ucyBieSB1cGdyYWRpbmcgcGFja2FnZXMgYW5kIHJlc3RhcnRpbmcKICAgZGFlbW9u cyBvbiBhbGwgaG9zdHM6OgoKICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IGNlcGgtbWRzLnRhcmdl dAoKIy4gVXBncmFkZSBhbGwgcmFkb3NndyBkYWVtb25zIGJ5IHVwZ3JhZGluZyBwYWNrYWdlcyBh bmQgcmVzdGFydGluZwogICBkYWVtb25zIG9uIGFsbCBob3N0czo6CgogICAgICMgc3lzdGVtY3Rs IHJlc3RhcnQgcmFkb3Nndy50YXJnZXQKCiMuIENvbXBsZXRlIHRoZSB1cGdyYWRlIGJ5IGRpc2Fs bG93aW5nIHByZS1sdW1pbm91cyBPU0RzOjoKCiAgICAgIyBjZXBoIG9zZCByZXF1aXJlLW9zZC1y ZWxlYXNlIGx1bWlub3VzCgogICBJZiB5b3Ugc2V0IGBgbm9vdXRgYCBhdCB0aGUgYmVnaW5uaW5n LCBiZSBzdXJlIHRvIGNsZWFyIGl0IHdpdGg6OgoKICAgICAjIGNlcGggb3NkIHVuc2V0IG5vb3V0 CgojLiBWZXJpZnkgdGhlIGNsdXN0ZXIgaXMgaGVhbHRoeSB3aXRoIGBgY2VwaCBoZWFsdGhgYC4K CgpVcGdyYWRpbmcgZnJvbSBwcmUtSmV3ZWwgcmVsZWFzZXMgKGxpa2UgSGFtbWVyKQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKWW91ICptdXN0KiBmaXJz dCB1cGdyYWRlIHRvIEpld2VsICgxMC4yLnopIGJlZm9yZSBhdHRlbXB0aW5nIGFuCnVwZ3JhZGUg dG8gTHVtaW5vdXMuCgoKVXBncmFkZSBjb21wYXRpYmlsaXR5IG5vdGVzLCBLcmFrZW4gdG8gTHVt aW5vdXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiog VGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBgb3NkIHBvb2wgZXJhc3VyZSBjb2RlIHN0cmlwZSB3 aWR0aGBgIGhhcwogIGJlZW4gcmVwbGFjZWQgYnkgYGBvc2QgcG9vbCBlcmFzdXJlIGNvZGUgc3Ry aXBlIHVuaXRgYCwgYW5kIGdpdmVuCiAgdGhlIGFiaWxpdHkgdG8gYmUgb3ZlcnJpZGRlbiBieSB0 aGUgZXJhc3VyZSBjb2RlIHByb2ZpbGUgc2V0dGluZwogIGBgc3RyaXBlX3VuaXRgYC4KCiogcmJk IGFuZCBjZXBoZnMgY2FuIHVzZSBlcmFzdXJlIGNvZGluZyB3aXRoIGJsdWVzdG9yZS4gVGhpcyBt YXkgYmUKICBlbmFibGVkIGJ5IHNldHRpbmcgYGBhbGxvd19lY19vdmVyd3JpdGVzYGAgdG8gYGB0 cnVlYGAgZm9yIGEgcG9vbC4gU2luY2UKICB0aGlzIHJlbGllcyBvbiBibHVlc3RvcmUncyBjaGVj a3N1bW1pbmcgdG8gZG8gZGVlcCBzY3J1YmJpbmcsCiAgZW5hYmxpbmcgdGhpcyBvbiBhIHBvb2wg c3RvcmVkIG9uIGZpbGVzdG9yZSBpcyBub3QgYWxsb3dlZC4KCiogVGhlIGBgcmFkb3MgZGZgYCBK U09OIG91dHB1dCBub3cgcHJpbnRzIG51bWVyaWMgdmFsdWVzIGFzIG51bWJlcnMgaW5zdGVhZCBv ZgogIHN0cmluZ3MuCgoqIFRoZSBgYG1vbl9vc2RfbWF4X29wX2FnZWBgIG9wdGlvbiBoYXMgYmVl biByZW5hbWVkIHRvCiAgYGBtb25fb3NkX3dhcm5fb3BfYWdlYGAgKGRlZmF1bHQ6IDMyIHNlY29u ZHMpLCB0byBpbmRpY2F0ZSB3ZQogIGdlbmVyYXRlIGEgd2FybmluZyBhdCB0aGlzIGFnZS4gIFRo ZXJlIGlzIGFsc28gYSBuZXcKICBgYG1vbl9vc2RfZXJyX29wX2FnZV9yYXRpb2BgIHRoYXQgaXMg YSBleHByZXNzZWQgYXMgYSBtdWx0aXRwbGUgb2YKICBgYG1vbl9vc2Rfd2Fybl9vcF9hZ2VgYCAo ZGVmYXVsdDogMTI4LCBmb3Igcm91Z2hseSA2MCBtaW51dGVzKSB0bwogIGNvbnRyb2wgd2hlbiBh biBlcnJvciBpcyBnZW5lcmF0ZWQuCgoqIFRoZSBkZWZhdWx0IG1heGltdW0gc2l6ZSBmb3IgYSBz aW5nbGUgUkFET1Mgb2JqZWN0IGhhcyBiZWVuIHJlZHVjZWQgZnJvbQogIDEwMEdCIHRvIDEyOE1C LiAgVGhlIDEwMEdCIGxpbWl0IHdhcyBjb21wbGV0ZWx5IGltcHJhY3RpY2FsIGluIHByYWN0aWNl CiAgd2hpbGUgdGhlIDEyOE1CIGxpbWl0IGlzIGEgYml0IGhpZ2ggYnV0IG5vdCB1bnJlYXNvbmFi bGUuICBJZiB5b3UgaGF2ZSBhbgogIGFwcGxpY2F0aW9uIHdyaXR0ZW4gZGlyZWN0bHkgdG8gbGli cmFkb3MgdGhhdCBpcyB1c2luZyBvYmplY3RzIGxhcmdlciB0aGFuCiAgMTI4TUIgeW91IG1heSBu ZWVkIHRvIGFkanVzdCBgYG9zZF9tYXhfb2JqZWN0X3NpemVgYC4KCiogVGhlIHNlbWFudGljcyBv ZiB0aGUgYGByYWRvcyBsc2BgIGFuZCBsaWJyYWRvcyBvYmplY3QgbGlzdGluZwogIG9wZXJhdGlv bnMgaGF2ZSBhbHdheXMgYmVlbiBhIGJpdCBjb25mdXNpbmcgaW4gdGhhdCAid2hpdGVvdXQiCiAg b2JqZWN0cyAod2hpY2ggbG9naWNhbGx5IGRvbid0IGV4aXN0IGFuZCB3aWxsIHJldHVybiBFTk9F TlQgaWYgeW91CiAgdHJ5IHRvIGFjY2VzcyB0aGVtKSBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3Vs dHMuICBQcmV2aW91c2x5CiAgd2hpdGVvdXRzIG9ubHkgb2NjdXJyZWQgaW4gY2FjaGUgdGllciBw b29scy4gIEluIGx1bWlub3VzLCBsb2dpY2FsbHkKICBkZWxldGVkIGJ1dCBzbmFwc2hvdHRlZCBv YmplY3RzIG5vdyByZXN1bHQgaW4gYSB3aGl0ZW91dCBvYmplY3QsIGFuZAogIGFzIGEgcmVzdWx0 IHRoZXkgd2lsbCBhcHBlYXIgaW4gYGByYWRvcyBsc2BgIHJlc3VsdHMsIGV2ZW4gdGhvdWdoCiAg dHJ5aW5nIHRvIHJlYWQgc3VjaCBhbiBvYmplY3Qgd2lsbCByZXN1bHQgaW4gRU5PRU5ULiAgVGhl IGBgcmFkb3MKICBsaXN0c25hcHNgYCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgaW4gc3VjaCBhIGNh c2UgdG8gZW51bWVyYXRlIHdoaWNoCiAgc25hcHNob3RzIGFyZSBwcmVzZW50LgoKICBUaGlzIG1h eSBzZWVtIGEgYml0IHN0cmFuZ2UsIGJ1dCBpcyBsZXNzIHN0cmFuZ2UgdGhhbiBoYXZpbmcgYQog IGRlbGV0ZWQtYnV0LXNuYXBzaG90dGVkIG9iamVjdCBub3QgYXBwZWFyIGF0IGFsbCBhbmQgYmUg Y29tcGxldGVseQogIGhpZGRlbiBmcm9tIGxpYnJhZG9zJ3MgYWJpbGl0eSB0byBlbnVtZXJhdGUg b2JqZWN0cy4gIEZ1dHVyZQogIHZlcnNpb25zIG9mIENlcGggd2lsbCBsaWtlbHkgaW5jbHVkZSBh biBhbHRlcm5hdGl2ZSBvYmplY3QKICBlbnVtZXJhdGlvbiBpbnRlcmZhY2UgdGhhdCBtYWtlcyBp dCBtb3JlIG5hdHVyYWwgYW5kIGVmZmljaWVudCB0bwogIGVudW1lcmF0ZSBhbGwgb2JqZWN0cyBh bG9uZyB3aXRoIHRoZWlyIHNuYXBzaG90IGFuZCBjbG9uZSBtZXRhZGF0YS4KCiogVGhlIGRlcHJl Y2F0ZWQgYGBjcnVzaF9ydWxlc2V0YGAgcHJvcGVydHkgaGFzIGZpbmFsbHkgYmVlbiByZW1vdmVk OwogIHBsZWFzZSB1c2UgIGBgY3J1c2hfcnVsZWBgIGluc3RlYWQgZm9yIHRoZSBgYG9zZCBwb29s IGdldCAuLi5gYCBhbmQgYGBvc2QKICBwb29sIHNldCAuLi5gYCBjb21tYW5kcy4KCiogVGhlIGBg b3NkIHBvb2wgZGVmYXVsdCBjcnVzaCByZXBsaWNhdGVkIHJ1bGVzZXRgYCBvcHRpb24gaGFzIGJl ZW4KICByZW1vdmVkIGFuZCByZXBsYWNlZCBieSB0aGUgYGBwc2QgcG9vbCBkZWZhdWx0IGNydXNo IHJ1bGVgYCBvcHRpb24uCiAgQnkgZGVmYXVsdCBpdCBpcyAtMSwgd2hpY2ggbWVhbnMgdGhlIG1v biB3aWxsIHBpY2sgdGhlIGZpcnN0IHR5cGUKICByZXBsaWNhdGVkIHJ1bGUgaW4gdGhlIENSVVNI IG1hcCBmb3IgcmVwbGljYXRlZCBwb29scy4gIEVyYXN1cmUKICBjb2RlZCBwb29scyBoYXZlIHJ1 bGVzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgdGhlbSBpZgogIHRoZXkgYXJl IG5vdCBzcGVjaWZpZWQgYXQgcG9vbCBjcmVhdGlvbiB0aW1lLgoKKiBXZSBubyBsb25nZXIgdGVz dCB0aGUgRmlsZVN0b3JlIGNlcGgtb3NkIGJhY2tlbmQgaW4gY29tYmluYXRpb24gd2l0aAogIGJ0 cmZzLiAgV2UgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgYnRyZnMuICBJZiB5b3UgYXJlIHVzaW5n CiAgYnRyZnMtYmFzZWQgT1NEcyBhbmQgd2FudCB0byB1cGdyYWRlIHRvIGx1bWlub3VzIHlvdSB3 aWxsIG5lZWQgdG8KICBhZGQgdGhlIGZvbGx3aW5nIHRvIHlvdXIgY2VwaC5jb25mOjoKCiAgICBl bmFibGUgZXhwZXJpbWVudGFsIHVucmVjb3ZlcmFibGUgZGF0YSBjb3JydXB0aW5nIGZlYXR1cmVz ID0gYnRyZnMKCiAgVGhlIGNvZGUgaXMgbWF0dXJlIGFuZCB1bmxpa2VseSB0byBjaGFuZ2UsIGJ1 dCB3ZSBhcmUgb25seQogIGNvbnRpbnVpbmcgdG8gdGVzdCB0aGUgSmV3ZWwgc3RhYmxlIGJyYW5j aCBhZ2FpbnN0IGJ0cmZzLiAgV2UKICByZWNvbW1lbmQgbW92aW5nIHRoZXNlIE9TRHMgdG8gRmls ZVN0b3JlIHdpdGggWEZTIG9yIEJsdWVTdG9yZS4KKiBUaGUgYGBydWxlc2V0LSpgYCBwcm9wZXJ0 aWVzIGZvciB0aGUgZXJhc3VyZSBjb2RlIHByb2ZpbGVzIGhhdmUgYmVlbgogIHJlbmFtZWQgdG8g YGBjcnVzaC0qYGAgdG8gKDEpIG1vdmUgYXdheSBmcm9tIHRoZSBvYnNvbGV0ZSAncnVsZXNldCcK ICB0ZXJtIGFuZCB0byBiZSBtb3JlIGNsZWFyIGFib3V0IHRoZWlyIHB1cnBvc2UuICBUaGVyZSBp cyBhbHNvIGEgbmV3CiAgb3B0aW9uYWwgYGBjcnVzaC1kZXZpY2UtY2xhc3NgYCBwcm9wZXJ0eSB0 byBzcGVjaWZ5IGEgQ1JVU0ggZGV2aWNlCiAgY2xhc3MgdG8gdXNlIGZvciB0aGUgZXJhc3VyZSBj b2RlZCBwb29sLiAgRXhpc3RpbmcgZXJhc3VyZSBjb2RlCiAgcHJvZmlsZXMgd2lsbCBiZSBjb252 ZXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIHVwZ3JhZGUgY29tcGxldGVzCiAgKHdoZW4gdGhlIGBg Y2VwaCBvc2QgcmVxdWlyZS1vc2QtcmVsZWFzZSBsdW1pbm91c2BgIGNvbW1hbmQgaXMgcnVuKQog IGJ1dCBhbnkgcHJvdmlzaW9uaW5nIHRvb2xzIHRoYXQgY3JlYXRlIGVyYXN1cmUgY29kZWQgcG9v bHMgbWF5IG5lZWQKICB0byBiZSB1cGRhdGVkLgoqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBv dXRwdXQgZm9yIGBgb3NkIGNydXNoIHRyZWVgYCBoYXMgY2hhbmdlZAogIHNsaWdodGx5IHRvIGJl dHRlciBtYXRjaCB0aGUgYGBvc2QgdHJlZWBgIG91dHB1dC4gIFRoZSB0b3AgbGV2ZWwKICBzdHJ1 Y3R1cmUgaXMgbm93IGBgbm9kZXNgYCBpbnN0ZWFkIG9mIGBgY3J1c2hfbWFwX3Jvb3RzYGAuCiog V2hlbiBhc3NpZ25pbmcgYSBuZXR3b3JrIHRvIHRoZSBwdWJsaWMgbmV0d29yayBhbmQgbm90IHRv CiAgdGhlIGNsdXN0ZXIgbmV0d29yayB0aGUgbmV0d29yayBzcGVjaWZpY2F0aW9uIG9mIHRoZSBw dWJsaWMKICBuZXR3b3JrIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNsdXN0ZXIgbmV0d29yayBhcyB3 ZWxsLgogIEluIG9sZGVyIHZlcnNpb25zIHRoaXMgd291bGQgbGVhZCB0byBjbHVzdGVyIHNlcnZp Y2VzCiAgYmVpbmcgYm91bmQgdG8gMC4wLjAuMDo8cG9ydD4sIHRodXMgbWFraW5nIHRoZQogIGNs dXN0ZXIgc2VydmljZSBldmVuIG1vcmUgcHVibGljbHkgYXZhaWxhYmxlIHRoYW4gdGhlCiAgcHVi bGljIHNlcnZpY2VzLiBXaGVuIG9ubHkgc3BlY2lmeWluZyBhIGNsdXN0ZXIgbmV0d29yayBpdAog IHdpbGwgc3RpbGwgcmVzdWx0IGluIHRoZSBwdWJsaWMgc2VydmljZXMgYmluZGluZyB0byAwLjAu MC4wLgoKKiBJbiBwcmV2aW91cyB2ZXJzaW9ucywgaWYgYSBjbGllbnQgc2VudCBhbiBvcCB0byB0 aGUgd3JvbmcgT1NELCB0aGUgT1NECiAgd291bGQgcmVwbHkgd2l0aCBFTlhJTy4gIFRoZSByYXRp b25hbGUgaGVyZSBpcyB0aGF0IHRoZSBjbGllbnQgb3IgT1NEIGlzCiAgY2xlYXJseSBidWdneSBh bmQgd2Ugd2FudCB0byBzdXJmYWNlIHRoZSBlcnJvciBhcyBjbGVhcmx5IGFzIHBvc3NpYmxlLgog IFdlIG5vdyBvbmx5IHNlbmQgdGhlIEVOWElPIHJlcGx5IGlmIHRoZSBvc2RfZW54aW9fb25fbWlz ZGlyZWN0ZWRfb3Agb3B0aW9uCiAgaXMgZW5hYmxlZCAoaXQncyBvZmYgYnkgZGVmYXVsdCkuICBU aGlzIG1lYW5zIHRoYXQgYSBWTSB1c2luZyBsaWJyYmQgdGhhdAogIHByZXZpb3VzbHkgd291bGQg aGF2ZSBnb3R0ZW4gYW4gRUlPIGFuZCBnb25lIHJlYWQtb25seSB3aWxsIG5vdyBzZWUgYQogIGJs b2NrZWQvaHVuZyBJTyBpbnN0ZWFkLgoKKiBUaGUgImpvdXJuYWxlciBhbGxvdyBzcGxpdCBlbnRy aWVzIiBjb25maWcgc2V0dGluZyBoYXMgYmVlbiByZW1vdmVkLgoKKiBUaGUgJ21vbl93YXJuX29z ZF91c2FnZV9taW5fbWF4X2RlbHRhJyBjb25maWcgb3B0aW9uIGhhcyBiZWVuCiAgcmVtb3ZlZCBh bmQgdGhlIGFzc29jaWF0ZWQgaGVhbHRoIHdhcm5pbmcgaGFzIGJlZW4gZGlzYWJsZWQgYmVjYXVz ZQogIGl0IGRvZXMgbm90IGFkZHJlc3MgY2x1c3RlcnMgdW5kZXJnb2luZyByZWNvdmVyeSBvciBD UlVTSCBydWxlcyB0aGF0IGRvCiAgbm90IHRhcmdldCBhbGwgZGV2aWNlcyBpbiB0aGUgY2x1c3Rl ci4KCi0gKmxpYnJhZG9zKjoKCiAgKiBTb21lIHZhcmlhbnRzIG9mIHRoZSBvbWFwX2dldF9rZXlz IGFuZCBvbWFwX2dldF92YWxzIGxpYnJhZG9zCiAgICBmdW5jdGlvbnMgaGF2ZSBiZWVuIGRlcHJl Y2F0ZWQgaW4gZmF2b3Igb2Ygb21hcF9nZXRfdmFsczIgYW5kCiAgICBvbWFwX2dldF9rZXlzMi4g IFRoZSBuZXcgbWV0aG9kcyBpbmNsdWRlIGFuIG91dHB1dCBhcmd1bWVudAogICAgaW5kaWNhdGlu ZyB3aGV0aGVyIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGtleXMgbGVmdCB0byBmZXRjaC4KICAgIFBy ZXZpb3VzbHkgdGhpcyBoYWQgdG8gYmUgaW5mZXJyZWQgZnJvbSB0aGUgcmVxdWVzdGVkIGtleSBj b3VudCB2cwogICAgdGhlIG51bWJlciBvZiBrZXlzIHJldHVybmVkLCBidXQgdGhpcyBicmVha3Mg d2l0aCBuZXcgT1NELXNpZGUKICAgIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9mIGtleXMgb3IgYnl0 ZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkgYQogICAgc2luZ2xlIG9tYXAgcmVxdWVzdC4gIFRo ZXNlIGxpbWl0cyB3ZXJlIGludHJvZHVjZWQgYnkga3Jha2VuIGJ1dAogICAgYXJlIGVmZmVjdGl2 ZWx5IGRpc2FibGVkIGJ5IGRlZmF1bHQgKGJ5IHNldHRpbmcgYSB2ZXJ5IGxhcmdlIGxpbWl0CiAg ICBvZiAxIEdCKSBiZWNhdXNlIHVzZXJzIG9mIHRoZSBuZXdseSBkZXByZWNhdGVkIGludGVyZmFj ZSBjYW5ub3QKICAgIHRlbGwgd2hldGhlciB0aGV5IHNob3VsZCBmZXRjaCBtb3JlIGtleXMgb3Ig bm90LiAgSW4gdGhlIGNhc2Ugb2YKICAgIHRoZSBzdGFuZGFsb25lIGNhbGxzIGluIHRoZSBDKysg aW50ZXJmYWNlCiAgICAoSW9DdHg6OmdldF9vbWFwX3trZXlzLHZhbHN9KSwgbGlicmFkb3MgaGFz IGJlZW4gdXBkYXRlZCB0byBsb29wIG9uCiAgICB0aGUgY2xpZW50IHNpZGUgdG8gcHJvdmlkZSBh IGNvcnJlY3QgcmVzdWx0IHZpYSBtdWx0aXBsZSBjYWxscyB0bwogICAgdGhlIE9TRC4gIEluIHRo ZSBjYXNlIG9mIHRoZSBtZXRob2RzIHVzZWQgZm9yIGJ1aWxkaW5nCiAgICBtdWx0aS1vcGVyYXRp b24gdHJhbnNhY3Rpb25zLCBob3dldmVyLCBjbGllbnQtc2lkZSBsb29waW5nIGlzIG5vdAogICAg cHJhY3RpY2FsLCBhbmQgdGhlIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICBOb3RlIHRo YXQgdXNlIG9mCiAgICBlaXRoZXIgdGhlIElvQ3R4IG1ldGhvZHMgb24gb2xkZXIgbGlicmFkb3Mg dmVyc2lvbnMgb3IgdGhlCiAgICBkZXByZWNhdGVkIG1ldGhvZHMgb24gYW55IHZlcnNpb24gb2Yg bGlicmFkb3Mgd2lsbCBsZWFkIHRvCiAgICBpbmNvbXBsZXRlIHJlc3VsdHMgaWYvd2hlbiB0aGUg bmV3IE9TRCBsaW1pdHMgYXJlIGVuYWJsZWQuCgogICogVGhlIG9yaWdpbmFsIGxpYnJhZG9zIHJh ZG9zX29iamVjdHNfbGlzdF9vcGVuIChDKSBhbmQgb2JqZWN0c19iZWdpbgogICAgKEMrKykgb2Jq ZWN0IGxpc3RpbmcgQVBJLCBkZXByZWNhdGVkIGluIEhhbW1lciwgaGFzIGZpbmFsbHkgYmVlbgog ICAgcmVtb3ZlZC4gIFVzZXJzIG9mIHRoaXMgaW50ZXJmYWNlIG11c3QgdXBkYXRlIHRoZWlyIHNv ZnR3YXJlIHRvIHVzZQogICAgZWl0aGVyIHRoZSByYWRvc19ub2JqZWN0c19saXN0X29wZW4gKEMp IGFuZCBub2JqZWN0c19iZWdpbiAoQysrKSBBUEkgb3IKICAgIHRoZSBuZXcgcmFkb3Nfb2JqZWN0 X2xpc3RfYmVnaW4gKEMpIGFuZCBvYmplY3RfbGlzdF9iZWdpbiAoQysrKSBBUEkKICAgIGJlZm9y ZSB1cGRhdGluZyB0aGUgY2xpZW50LXNpZGUgbGlicmFkb3MgbGlicmFyeSB0byBMdW1pbm91cy4K CiAgICBPYmplY3QgZW51bWVyYXRpb24gKHZpYSBhbnkgQVBJKSB3aXRoIHRoZSBsYXRlc3QgbGli cmFkb3MgdmVyc2lvbgogICAgYW5kIHByZS1IYW1tZXIgT1NEcyBpcyBubyBsb25nZXIgc3VwcG9y dGVkLiAgTm90ZSB0aGF0IG5vIGluLXRyZWUKICAgIENlcGggc2VydmljZXMgcmVseSBvbiBvYmpl Y3QgZW51bWVyYXRpb24gdmlhIHRoZSBkZXByZWNhdGVkIEFQSXMsIHNvCiAgICBvbmx5IGV4dGVy bmFsIGxpYnJhZG9zIHVzZXJzIG1pZ2h0IGJlIGFmZmVjdGVkLgoKICAgIFRoZSBuZXdlc3QgKGFu ZCByZWNvbW1lbmRlZCkgcmFkb3Nfb2JqZWN0X2xpc3RfYmVnaW4gKEMpIGFuZAogICAgb2JqZWN0 X2xpc3RfYmVnaW4gKEMrKykgQVBJIGlzIG9ubHkgdXNhYmxlIG9uIGNsdXN0ZXJzIHdpdGggdGhl CiAgICBTT1JUQklUV0lTRSBmbGFnIGVuYWJsZWQgKEpld2VsIGFuZCBsYXRlcikuICAoTm90ZSB0 aGF0IHRoaXMgZmxhZyBpcwogICAgcmVxdWlyZWQgdG8gYmUgc2V0IGJlZm9yZSB1cGdyYWRpbmcg YmV5b25kIEpld2VsLikKCi0gKkNlcGhGUyo6CgogICogV2hlbiBjb25maWd1cmluZyBjZXBoLWZ1 c2UgbW91bnRzIGluIC9ldGMvZnN0YWIsIGEgbmV3IHN5bnRheCBpcwogICAgYXZhaWxhYmxlIHRo YXQgdXNlcyAiY2VwaC48YXJnPj08dmFsPiIgaW4gdGhlIG9wdGlvbnMgY29sdW1uLCBpbnN0ZWFk CiAgICBvZiBwdXR0aW5nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGRldmljZSBjb2x1bW4uICBUaGUg b2xkIHN0eWxlIHN5bnRheAogICAgc3RpbGwgd29ya3MuICBTZWUgdGhlIGRvY3VtZW50YXRpb24g cGFnZSAiTW91bnQgQ2VwaEZTIGluIHlvdXIKICAgIGZpbGUgc3lzdGVtcyB0YWJsZSIgZm9yIGRl dGFpbHMuCgogICogQ2VwaEZTIGNsaWVudHMgd2l0aG91dCB0aGUgJ3AnIGZsYWcgaW4gdGhlaXIg YXV0aGVudGljYXRpb24gY2FwYWJpbGl0eQogICAgc3RyaW5nIHdpbGwgbm8gbG9uZ2VyIGJlIGFi bGUgdG8gc2V0IHF1b3RhcyBvciBhbnkgbGF5b3V0IGZpZWxkcy4gIFRoaXMKICAgIGZsYWcgcHJl dmlvdXNseSBvbmx5IHJlc3RyaWN0ZWQgbW9kaWZpY2F0aW9uIG9mIHRoZSBwb29sIGFuZCBuYW1l c3BhY2UKICAgIGZpZWxkcyBpbiBsYXlvdXRzLgogICogQ2VwaEZTIHdpbGwgZ2VuZXJhdGUgYSBo ZWFsdGggd2FybmluZyBpZiB5b3UgaGF2ZSBmZXdlciBzdGFuZGJ5IGRhZW1vbnMKICAgIHRoYW4g aXQgdGhpbmtzIHlvdSB3YW50ZWQuICBCeSBkZWZhdWx0IHRoaXMgd2lsbCBiZSAxIGlmIHlvdSBl dmVyIGhhZAogICAgYSBzdGFuZGJ5LCBhbmQgMCBpZiB5b3UgZGlkIG5vdC4gIFlvdSBjYW4gY3Vz dG9taXplIHRoaXMgdXNpbmcKICAgIGBgY2VwaCBmcyBzZXQgPGZzPiBzdGFuZGJ5X2NvdW50X3dh bnRlZCA8bnVtYmVyPmBgLiAgU2V0dGluZyBpdAogICAgdG8gemVybyB3aWxsIGVmZmVjdGl2ZWx5 IGRpc2FibGUgdGhlIGhlYWx0aCBjaGVjay4KICAqIFRoZSAiY2VwaCBtZHMgdGVsbCAuLi4iIGNv bW1hbmQgaGFzIGJlZW4gcmVtb3ZlZC4gIEl0IGlzIHN1cGVyY2VkZWQKICAgIGJ5ICJjZXBoIHRl bGwgbWRzLjxpZD4gLi4uIgoKKiBHaXQgYXQgZ2l0Oi8vZ2l0aHViLmNvbS9jZXBoL2NlcGguZ2l0 CiogVGFyYmFsbCBhdCBodHRwOi8vZG93bmxvYWQuY2VwaC5jb20vdGFyYmFsbHMvY2VwaC0xMi4x LjMudGFyLmd6CiogRm9yIHBhY2thZ2VzLCBzZWUgaHR0cDovL2RvY3MuY2VwaC5jb20vZG9jcy9t YXN0ZXIvaW5zdGFsbC9nZXQtcGFja2FnZXMvCiogRm9yIGNlcGgtZGVwbG95LCBzZWUgaHR0cDov L2RvY3MuY2VwaC5jb20vZG9jcy9tYXN0ZXIvaW5zdGFsbC9pbnN0YWxsLWNlcGgtZGVwbG95Ciog UmVsZWFzZSBzaGExOiBjNTZkOWMwN2IzNDJjMDg0MTliYmMxOGRjZjJhNGM1ZmFlNjJiOWNmCgot LSAKQWJoaXNoZWsgTGVrc2htYW5hbgpTVVNFIExpbnV4IEdtYkgsIEdGOiBGZWxpeCBJbWVuZMO2 cmZmZXIsIEphbmUgU21pdGhhcmQsIEdyYWhhbSBOb3J0b24sCkhSQiAyMTI4NCAoQUcgTsO8cm5i ZXJnKQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpjZXBo LXVzZXJzIG1haWxpbmcgbGlzdApjZXBoLXVzZXJzQGxpc3RzLmNlcGguY29tCmh0dHA6Ly9saXN0 cy5jZXBoLmNvbS9saXN0aW5mby5jZ2kvY2VwaC11c2Vycy1jZXBoLmNvbQo=