From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v5] displif: add ABI for para-virtual display Date: Wed, 5 Apr 2017 09:09:07 +0300 Message-ID: <1491372547-10236-2-git-send-email-andr2000@gmail.com> References: <1491372547-10236-1-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cve88-0008A5-4r for xen-devel@lists.xenproject.org; Wed, 05 Apr 2017 06:09:20 +0000 Received: by mail-lf0-f68.google.com with SMTP id r36so290092lfi.0 for ; Tue, 04 Apr 2017 23:09:17 -0700 (PDT) In-Reply-To: <1491372547-10236-1-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: lars.kurth@citrix.com, vlad.babchuk@gmail.com, Oleksandr Andrushchenko , julien.grall@arm.com, andrii.anisov@gmail.com, olekstysh@gmail.com, andr2000@gmail.com, al1img@gmail.com, Oleksandr Grytsov , joculator@gmail.com List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKVGhpcyBpcyB0aGUgQUJJIGZvciB0aGUgdHdvIGhhbHZlcyBvZiBhIHBhcmEtdmly dHVhbGl6ZWQKZGlzcGxheSBkcml2ZXIuCgpUaGlzIHByb3RvY29sIGFpbXMgdG8gcHJvdmlkZSBh IHVuaWZpZWQgcHJvdG9jb2wgd2hpY2ggZml0cyBtb3JlCnNvcGhpc3RpY2F0ZWQgdXNlLWNhc2Vz IHRoYW4gYSBmcmFtZWJ1ZmZlciBkZXZpY2UgY2FuIGhhbmRsZS4gQXQgdGhlCm1vbWVudCBiYXNp YyBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZCB3aXRoIHRoZSBpbnRlbnRpb24gdG8gZXh0ZW5k OgogIG8gbXVsdGlwbGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkL2Rlc3Ryb3llZCBmcmFtZWJ1ZmZl cnMKICBvIGJ1ZmZlcnMgb2YgYXJiaXRyYXJ5IHNpemVzCiAgbyBiZXR0ZXIgY29uZmlndXJhdGlv biBvcHRpb25zIGluY2x1ZGluZyBtdWx0aXBsZSBkaXNwbGF5IHN1cHBvcnQKCk5vdGU6IGV4aXN0 aW5nIGZiaWYgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBkaXNwbGlmIHJ1bm5pbmcgYXQgdGhl CnNhbWUgdGltZSwgZS5nLiBvbiBMaW51eCBvbmUgcHJvdmlkZXMgZnJhbWVidWZmZXIgYW5kIGFu b3RoZXIgRFJNL0tNUwoKRnV0dXJlIGV4dGVuc2lvbnMgdG8gdGhlIGV4aXN0aW5nIHByb3RvY29s IG1heSBpbmNsdWRlOgogIG8gYWxsb3cgZGlzcGxheS9jb25uZWN0b3IgY2xvbmluZwogIG8gYWxs b3cgYWxsb2NhdGluZyBvYmplY3RzIG90aGVyIHRoYW4gZGlzcGxheSBidWZmZXJzCiAgbyBhZGQg cGxhbmVzL292ZXJsYXlzIHN1cHBvcnQKICBvIHN1cHBvcnQgc2NhbGluZwogIG8gc3VwcG9ydCBy b3RhdGlvbgoKTm90ZSwgdGhhdCB0aGlzIHByb3RvY29sIGRvZXNuJ3QgdXNlIHJpbmcgbWFjcm9z IGZvcgpiaS1kaXJlY3Rpb25hbCBleGNoYW5nZSAoUFYgY2FsbHMvOXBmcykgYmFjYXVzZToKICBv IGl0IHN0YXRpY2FsbHkgZGVmaW5lcyB0aGUgdXNlIG9mIGEgc2luZ2xlIHBhZ2UKICAgIGZvciB0 aGUgcmluZyBidWZmZXIKICBvIGl0IHVzZXMgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgdG8gcmluZydz IGNvbnRlbnRzCiAgICB3L28gbWVtb3J5IGNvcHlpbmcKICBvIHJlLXVzZXMgdGhlIHNhbWUgaWRl YSB0aGF0IGtiZGlmL2ZiaWYgdXNlCiAgICB3aGljaCBmb3IgdGhpcyB1c2UtY2FzZSBzZWVtcyB0 byBiZSBhcHByb3ByaWF0ZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUmF0aW9uYWxlIGZvciBpbnRyb2R1Y2luZyB0aGlzIHByb3RvY29sIGluc3Rl YWQgb2YKdXNpbmcgdGhlIGV4aXN0aW5nIGZiaWY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgoxLiBJbi9vdXQgZXZlbnQgc2l6ZXMKICBvIGZiaWYg LSA0MCBvY3RldHMKICBvIGRpc3BsaWYgLSA0MCBvY3RldHMKVGhpcyBpcyBvbmx5IHRoZSBpbml0 aWFsIHZlcnNpb24gb2YgdGhlIGRpc3BsaWYgcHJvdG9jb2wKd2hpY2ggbWVhbnMgdGhhdCB0aGVy ZSBjb3VsZCBiZSByZXF1ZXN0cyB3aGljaCB3aWxsIG5vdCBmaXQKKFdSVCBpbnRyb2R1Y2luZyBz b21lIEdQVSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkKbGF0ZXIgb24pLiBJbiB0aGF0IGNhc2Ugd2Ug Y2Fubm90IGFsdGVyIGZiaWYgc2l6ZXMgYXMgd2UgbmVlZCB0bwpiZSBiYWNrd2FyZCBjb21wYXRp YmxlIGFuIHdpbGwgYmUgZm9yY2VkIHRvIGhhbmRsZSB0aG9zZQphcGFydCBvZiBmYmlmLgoKMi4g U2hhcmVkIHBhZ2UKRGlzcGxpZiBkb2Vzbid0IHVzZSBhbnl0aGluZyBsaWtlIHN0cnVjdCB4ZW5m Yl9wYWdlLCBidXQKREVGSU5FX1JJTkdfVFlQRVMoeGVuX2Rpc3BsaWYsIHN0cnVjdCB4ZW5kaXNw bF9yZXEsIHN0cnVjdAp4ZW5kaXNwbF9yZXNwKSB3aGljaCBpcyBhIGJldHRlciBhbmQgbW9yZSBj b21tb24gd2F5LgpPdXRwdXQgZXZlbnRzIHVzZSBhIHNoYXJlZCBwYWdlIHdoaWNoIG9ubHkgaGFz IGluX2NvbnMgYW5kIGluX3Byb2QKYW5kIGFsbCB0aGUgcmVzdCBpcyB1c2VkIGZvciBpbmNvbWlu ZyBldmVudHMuIEhlcmUgc3RydWN0IHhlbmZiX3BhZ2UKY291bGQgcHJvYmFibHkgYmUgdXNlZCBh cyBpcyBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgaXQgb25seSBoYXMgYSBoYWxmCm9mIGEgcGFnZSBm b3IgaW5jb21pbmcgZXZlbnRzIHdoaWNoIGlzIG9ubHkgNTAgZXZlbnRzLiAoY29uc2lkZXIKc29t ZXRoaW5nIGxpa2UgNjBIeiBkaXNwbGF5KQoKMy4gQW1vdW50IG9mIGNoYW5nZXMuCmZiaWYgb25s eSBwcm92aWRlcyBYRU5GQl9UWVBFX1VQREFURSBhbmQgWEVORkJfVFlQRV9SRVNJWkUKZXZlbnRz LCBzbyBpdCBsb29rcyBsaWtlIGl0IGlzIGVhc2llciB0byBnZXQgZmIgc3VwcG9ydCBpbnRvIGRp c3BsaWYKdGhhbiB2aWNlIHZlcnNhLiBkaXNwbGlmIGF0IHRoZSBtb21lbnQgaGFzIDYgcmVxdWVz dHMgYW5kIDEgZXZlbnQsCm11bHRpcGxlIGNvbm5lY3RvciBzdXBwb3J0LCBldGMuCgotLS0KQ2hh bmdlcyBzaW5jZSB2NDoKICogYWRkZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgY29uc3RhbnQK ICogYmVfYWxsb2MgLT4gYmUtYWxsb2MKICogbWlub3IgcmV3b3JkaW5nCiAqIGNsYXJpZmljYXRp b24gb24gcmVxL3Jlc3AgdGhhdCBtdXN0IGJlIHNlbnQgb3ZlcgogICBjb250cm9sIHJpbmcgb2Yg dGhlIGNvbm5lY3RvciB3aXRoIGluZGV4IDAKCkNoYW5nZXMgc2luY2UgdjM6CiAqIGFkZCBjbGFy aWZpY2F0aW9uIG9uIGJ1ZmZlcidzIHNpemUvZGVwdGgvZm9ybWF0IGFuZAogICBjb25uZWN0b3In cyByZXNvbHV0aW9uCiAqIG1vdmUgYmVfYWxsb2MgZmVhdHVyZSBpbnRvIGRvbWFpbidzIGNvbmZp Z3VyYXRpb24KICAgdG8gYWxsb3cgbW9yZSB1c2UtY2FzZXMgYW5kIGZyZWVkb20gKGUuZy4gZm9y IDE6MQogICBtYXBwZWQgZG9tYWlucyB0aGVyZSBtYXkgYmUgbm8gbmVlZCB0byByZXF1ZXN0IGJh Y2tlbmQKICAgdG8gYWxsb2NhdGUgYnVmZmVycywgd2hpbGUgZm9yIHRoZSByZXN0IGl0IG1heSBt YWtlIG1vcmUKICAgc2Vuc2UpCiAqIHJlbmFtZSBYZW5TdG9yZSBlbnRyaWVzOgogICAgIGN0cmwt cmluZy1yZWYgLT4gcmVxLXJpbmctcmVmCiAgICAgY3RybC1jaGFubmVsIC0+IHJlcS1ldmVudC1j aGFubmVsCiAgICAgZXZlbnQtcmluZy1yZWYgLT4gZXZ0LXJpbmctcmVmCiAgICAgZXZlbnQtY2hh bm5lbCAtPiBldnQtZXZlbnQtY2hhbm5lbAogKiBoYXZlIDIgc2VwYXJhdGUgc2VjdGlvbnMgZm9y IHJlcS9yZXNwIGFuZCBldnQgdHJhbnNwb3J0CiAgIHBhcmFtZXRlcnMKICogZml4IGFuZCBleHRl bmQgcmVjb3ZlcnkgZmxvdyBkZXNjcmlwdGlvbgogKiByZXNlcnZlIHJlcXVlc3QgY29kZXMgZm9y IGZ1dHVyZSBmYmlmIGludGVncmF0aW9uIGlmIG5lZWQgYmUKICAgKHJlcXVlc3QgY29kZXMgWzA7 IDE1XSBhcmUgcmVzZXJ2ZWQpCiAqIGVycm9yIG9uIGF0dGVtcHQgdG8gY3JlYXRlIG11bHRpcGxl IGJ1ZmZlcnMgd2l0aCBzYW1lIGNvb2tpZShzKQogKiBjbGFyaWZpY2F0aW9uIG9mIHBhZ2UgZGly ZWN0b3J5IHVzYWdlIGZvciBiZV9hbGxvYyBmZWF0dXJlCiAqIGFkZCBlZGl0b3IncyBibG9jawoK Q2hhbmdlcyBzaW5jZSB2MjoKICogdXBkYXRlZCBYZW5TdG9yZSBjb25maWd1cmF0aW9uIHRlbXBs YXRlL3BhdHRlcm4KICogYWRkZWQgIlJlY292ZXJ5IGZsb3ciIHRvIHN0YXRlIGRpYWdyYW0gZGVz Y3JpcHRpb24KICogcmVuYW1lZCBncmVmX2RpcmVjdG9yeV9zdGFydCB0byBncmVmX2RpcmVjdG9y eQogKiBhZGRlZCBtaXNzaW5nICJ2ZXJzaW9ucyIgYW5kICJ2ZXJzaW9uIiBzdHJpbmcgY29uc3Rh bnRzCgpDaGFuZ2VzIHNpbmNlIHYxOgogKiBmaXhlZCB4ZW5kaXNwbF9ldmVudF9wYWdlIHBhZGRp bmcgc2l6ZQogKiBhZGRlZCB2ZXJzaW9uaW5nIHN1cHBvcnQKICogZXhwbGljaXRseSBkZWZpbmUg dmFsdWUgdHlwZXMgZm9yIFhlblN0b3JlIGZpZWxkcwogKiB0ZXh0IGRlY29yYXRpb24gcmUtd29y awogKiBhZGRlZCBvZmZzZXRzIHRvIEFTQ0lJIGJveCBub3RhdGlvbgoKQ2hhbmdlcyBzaW5jZSBp bml0aWFsOgogKiBEUk0gY2hhbmdlZCB0byBESVNQTCwgcHJvdG9jb2wgbWFkZSBnZW5lcmljCiAq IG1ham9yIHJlLXdvcmsgYWRkcmVzc2luZyBpc3N1ZXMgcmFpc2VkIGZvciBzbmRpZgoKU2lnbmVk LW9mZi1ieTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgpT aWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hj aGVua29AZXBhbS5jb20+Ci0tLQogeGVuL2luY2x1ZGUvcHVibGljL2lvL2Rpc3BsaWYuaCB8IDg2 NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdl ZCwgODY0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9wdWJs aWMvaW8vZGlzcGxpZi5oCgpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2lvL2Rpc3Bs aWYuaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9kaXNwbGlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44YTk0ZjFmOWI5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi94 ZW4vaW5jbHVkZS9wdWJsaWMvaW8vZGlzcGxpZi5oCkBAIC0wLDAgKzEsODY0IEBACisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBkaXNwbGlmLmgKKyAqCisgKiBVbmlmaWVkIGRpc3BsYXkgZGV2 aWNlIEkvTyBpbnRlcmZhY2UgZm9yIFhlbiBndWVzdCBPU2VzLgorICoKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBFUEFNIFN5c3RlbXMgSW5jLgorICoKKyAqIEF1dGhvcnM6 IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNv bT4KKyAqICAgICAgICAgIE9sZWtzYW5kciBHcnl0c292IDxvbGVrc2FuZHJfZ3J5dHNvdkBlcGFt LmNvbT4KKyAqLworCisjaWZuZGVmIF9fWEVOX1BVQkxJQ19JT19ESVNQTElGX0hfXworI2RlZmlu ZSBfX1hFTl9QVUJMSUNfSU9fRElTUExJRl9IX18KKworI2luY2x1ZGUgInJpbmcuaCIKKyNpbmNs dWRlICIuLi9ncmFudF90YWJsZS5oIgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICog ICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCB2ZXJzaW9uCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKi8KKyNkZWZpbmUgWEVORElTUExfUFJPVE9DT0xfVkVSU0lPTiAgICAgIjEi CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1haW4g ZmVhdHVyZXMgcHJvdmlkZWQgYnkgdGhlIHByb3RvY29sCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisgKiBUaGlzIHByb3RvY29sIGFpbXMgdG8gcHJvdmlkZSBhIHVuaWZpZWQgcHJvdG9jb2wgd2hp Y2ggZml0cyBtb3JlCisgKiBzb3BoaXN0aWNhdGVkIHVzZS1jYXNlcyB0aGFuIGEgZnJhbWVidWZm ZXIgZGV2aWNlIGNhbiBoYW5kbGUuIEF0IHRoZQorICogbW9tZW50IGJhc2ljIGZ1bmN0aW9uYWxp dHkgaXMgc3VwcG9ydGVkIHdpdGggdGhlIGludGVudGlvbiB0byBiZSBleHRlbmRlZDoKKyAqICBv IG11bHRpcGxlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC9kZXN0cm95ZWQgZnJhbWVidWZmZXJzCisg KiAgbyBidWZmZXJzIG9mIGFyYml0cmFyeSBzaXplcworICogIG8gYnVmZmVyIGFsbG9jYXRpb24g YXQgZWl0aGVyIGJhY2sgb3IgZnJvbnQgZW5kCisgKiAgbyBiZXR0ZXIgY29uZmlndXJhdGlvbiBv cHRpb25zIGluY2x1ZGluZyBtdWx0aXBsZSBkaXNwbGF5IHN1cHBvcnQKKyAqCisgKiBOb3RlOiBl eGlzdGluZyBmYmlmIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZGlzcGxpZiBydW5uaW5nIGF0 IHRoZQorICogc2FtZSB0aW1lLCBlLmcuIG9uIExpbnV4IG9uZSBwcm92aWRlcyBmcmFtZWJ1ZmZl ciBhbmQgYW5vdGhlciBEUk0vS01TCisgKgorICogTm90ZTogZGlzcGxheSByZXNvbHV0aW9uIChY ZW5TdG9yZSdzICJyZXNvbHV0aW9uIiBwcm9wZXJ0eSkgZGVmaW5lcworICogdmlzaWJsZSBhcmVh IG9mIHRoZSB2aXJ0dWFsIGRpc3BsYXkuIEF0IHRoZSBzYW1lIHRpbWUgcmVzb2x1dGlvbiBvZgor ICogdGhlIGRpc3BsYXkgYW5kIGZyYW1lIGJ1ZmZlcnMgbWF5IGRpZmZlcjogYnVmZmVycyBjYW4g YmUgc21hbGxlciwgZXF1YWwKKyAqIG9yIGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEuIFRo aXMgaXMgdG8gZW5hYmxlIHVzZS1jYXNlcywgd2hlcmUgYmFja2VuZAorICogbWF5IGRvIHNvbWUg cG9zdC1wcm9jZXNzaW5nIG9mIHRoZSBkaXNwbGF5IGFuZCBmcmFtZSBidWZmZXJzIHN1cHBsaWVk LAorICogZS5nLiB0aG9zZSBidWZmZXJzIGNhbiBiZSBqdXN0IGEgcGFydCBvZiB0aGUgZmluYWwg Y29tcG9zaXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAg ICAgICAgICAgICBEaXJlY3Rpb24gb2YgaW1wcm92ZW1lbnRzCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKiBGdXR1cmUgZXh0ZW5zaW9ucyB0byB0aGUgZXhpc3RpbmcgcHJvdG9jb2wgbWF5IGlu Y2x1ZGU6CisgKiAgbyBkaXNwbGF5L2Nvbm5lY3RvciBjbG9uaW5nCisgKiAgbyBhbGxvY2F0aW9u IG9mIG9iamVjdHMgb3RoZXIgdGhhbiBkaXNwbGF5IGJ1ZmZlcnMKKyAqICBvIHBsYW5lL292ZXJs YXkgc3VwcG9ydAorICogIG8gc2NhbGluZyBzdXBwb3J0CisgKiAgbyByb3RhdGlvbiBzdXBwb3J0 CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBGZWF0dXJl IGFuZCBQYXJhbWV0ZXIgTmVnb3RpYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisg KiBGcm9udC0+YmFjayBub3RpZmljYXRpb25zOiB3aGVuIGVucXVldWluZyBhIG5ldyByZXF1ZXN0 LCBzZW5kaW5nIGEKKyAqIG5vdGlmaWNhdGlvbiBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiB4 ZW5kaXNwbF9yZXEgKGkuZS4sIHRoZSBnZW5lcmljCisgKiBob2xkLW9mZiBtZWNoYW5pc20gcHJv dmlkZWQgYnkgdGhlIHJpbmcgbWFjcm9zKS4gQmFja2VuZHMgbXVzdCBzZXQKKyAqIHhlbmRpc3Bs X3JlcSBhcHByb3ByaWF0ZWx5IChlLmcuLCB1c2luZyBSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFV RVNUUygpKS4KKyAqCisgKiBCYWNrLT5mcm9udCBub3RpZmljYXRpb25zOiB3aGVuIGVucXVldWlu ZyBhIG5ldyByZXNwb25zZSwgc2VuZGluZyBhCisgKiBub3RpZmljYXRpb24gY2FuIGJlIG1hZGUg Y29uZGl0aW9uYWwgb24geGVuZGlzcGxfcmVzcCAoaS5lLiwgdGhlIGdlbmVyaWMKKyAqIGhvbGQt b2ZmIG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUgcmluZyBtYWNyb3MpLiBGcm9udGVuZHMgbXVz dCBzZXQKKyAqIHhlbmRpc3BsX3Jlc3AgYXBwcm9wcmlhdGVseSAoZS5nLiwgdXNpbmcgUklOR19G SU5BTF9DSEVDS19GT1JfUkVTUE9OU0VTKCkpLgorICoKKyAqIFRoZSB0d28gaGFsdmVzIG9mIGEg cGFyYS12aXJ0dWFsIGRpc3BsYXkgZHJpdmVyIHV0aWxpemUgbm9kZXMgd2l0aGluCisgKiBYZW5T dG9yZSB0byBjb21tdW5pY2F0ZSBjYXBhYmlsaXRpZXMgYW5kIHRvIG5lZ290aWF0ZSBvcGVyYXRp bmcgcGFyYW1ldGVycy4KKyAqIFRoaXMgc2VjdGlvbiBlbnVtZXJhdGVzIHRoZXNlIG5vZGVzIHdo aWNoIHJlc2lkZSBpbiB0aGUgcmVzcGVjdGl2ZSBmcm9udCBhbmQKKyAqIGJhY2tlbmQgcG9ydGlv bnMgb2YgWGVuU3RvcmUsIGZvbGxvd2luZyB0aGUgWGVuQnVzIGNvbnZlbnRpb24uCisgKgorICog QWxsIGRhdGEgaW4gWGVuU3RvcmUgaXMgc3RvcmVkIGFzIHN0cmluZ3MuIE5vZGVzIHNwZWNpZnlp bmcgbnVtZXJpYworICogdmFsdWVzIGFyZSBlbmNvZGVkIGluIGRlY2ltYWwuIEludGVnZXIgdmFs dWUgcmFuZ2VzIGxpc3RlZCBiZWxvdyBhcmUKKyAqIGV4cHJlc3NlZCBhcyBmaXhlZCBzaXplZCBp bnRlZ2VyIHR5cGVzIGNhcGFibGUgb2Ygc3RvcmluZyB0aGUgY29udmVyc2lvbgorICogb2YgYSBw cm9wZXJseSBmb3JtYXRlZCBub2RlIHN0cmluZywgd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9u LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAg RXhhbXBsZSBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTm90 ZTogZGVwZW5kaW5nIG9uIHRoZSB1c2UtY2FzZSBiYWNrZW5kIGNhbiBleHBvc2UgbW9yZSBkaXNw bGF5IGNvbm5lY3RvcnMKKyAqIHRoYW4gdGhlIHVuZGVybHlpbmcgSFcgcGh5c2ljYWxseSBoYXMg YnkgZW1wbG95aW5nIFNXIGdyYXBoaWNzIGNvbXBvc2l0b3JzCisgKgorICogVGhpcyBpcyBhbiBl eGFtcGxlIG9mIGJhY2tlbmQgYW5kIGZyb250ZW5kIGNvbmZpZ3VyYXRpb246CisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2VuZCAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC9sb2NhbC9kb21haW4vMC9iYWNrZW5kL3ZkaXNwbC8x LzAvZnJvbnRlbmQtaWQgPSAiMSIKKyAqIC9sb2NhbC9kb21haW4vMC9iYWNrZW5kL3ZkaXNwbC8x LzAvZnJvbnRlbmQgPSAiL2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMCIKKyAqIC9sb2Nh bC9kb21haW4vMC9iYWNrZW5kL3ZkaXNwbC8xLzAvc3RhdGUgPSAiNCIKKyAqIC9sb2NhbC9kb21h aW4vMC9iYWNrZW5kL3ZkaXNwbC8xLzAvdmVyc2lvbnMgPSAiMSwyIgorICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZyb250ZW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8wL2JhY2tl bmQtaWQgPSAiMCIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvYmFja2VuZCA9 ICIvbG9jYWwvZG9tYWluLzAvYmFja2VuZC92ZGlzcGwvMS8wIgorICogL2xvY2FsL2RvbWFpbi8x L2RldmljZS92ZGlzcGwvMC9zdGF0ZSA9ICI0IgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92 ZGlzcGwvMC92ZXJzaW9uID0gIjEiCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8w L2JlLWFsbG9jID0gIjEiCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25uZWN0 b3IgMCBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC9sb2Nh bC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9yZXNvbHV0aW9uID0gIjE5MjB4MTA4MCIKKyAq IC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9yZXEtcmluZy1yZWYgPSAiMjgzMiIK KyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9yZXEtZXZlbnQtY2hhbm5lbCA9 ICIxNSIKKyAqIC9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmRpc3BsLzAvMC9ldnQtcmluZy1yZWYg PSAiMzg3IgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC8wL2V2dC1ldmVudC1j aGFubmVsID0gIjE2IgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29ubmVjdG9y IDEgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAvbG9jYWwv ZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8wLzEvcmVzb2x1dGlvbiA9ICI4MDB4NjAwIgorICogL2xv Y2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC8xL3JlcS1yaW5nLXJlZiA9ICIyODMzIgorICog L2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC8xL3JlcS1ldmVudC1jaGFubmVsID0gIjE3 IgorICogL2xvY2FsL2RvbWFpbi8xL2RldmljZS92ZGlzcGwvMC8xL2V2dC1yaW5nLXJlZiA9ICIz ODgiCisgKiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZkaXNwbC8wLzEvZXZ0LWV2ZW50LWNoYW5u ZWwgPSAiMTgiCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgQmFja2VuZCBYZW5CdXMgTm9kZXMKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3RvY29sIHZlcnNpb24gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdmVyc2lvbnMKKyAqICAgICAgVmFs dWVzOiAgICAgICAgIDxzdHJpbmc+CisgKgorICogICAgICBMaXN0IG9mIFhFTkRJU1BMX0xJU1Rf U0VQQVJBVE9SIHNlcGFyYXRlZCBwcm90b2NvbCB2ZXJzaW9ucyBzdXBwb3J0ZWQKKyAqICAgICAg YnkgdGhlIGJhY2tlbmQuIEZvciBleGFtcGxlICIxLDIsMyIuCisgKgorICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmQgWGVuQnVzIE5v ZGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBBZGRyZXNzaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIGRvbS1pZAorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQxNl90PgorICoKKyAq ICAgICAgRG9tYWluIGlkZW50aWZpZXIuCisgKgorICogZGV2LWlkCisgKiAgICAgIFZhbHVlczog ICAgICAgICA8dWludDE2X3Q+CisgKgorICogICAgICBEZXZpY2UgaWRlbnRpZmllci4KKyAqCisg KiBjb25uLWlkeAorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQ4X3Q+CisgKgorICogICAg ICBaZXJvIGJhc2VkIGNvbnRpZ291cyBpbmRleCBvZiB0aGUgY29ubmVjdG9yLgorICogICAgICAv bG9jYWwvZG9tYWluLzxkb20taWQ+L2RldmljZS92ZGlzcGwvPGRldi1pZD4vPGNvbm4taWR4Pi8u Li4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3RvY29sIHZlcnNpb24g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdmVyc2lvbgorICogICAgICBW YWx1ZXM6ICAgICAgICAgPHN0cmluZz4KKyAqCisgKiAgICAgIFByb3RvY29sIHZlcnNpb24sIGNo b3NlbiBhbW9uZyB0aGUgb25lcyBzdXBwb3J0ZWQgYnkgdGhlIGJhY2tlbmQuCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJhY2tlbmQgYnVmZmVyIGFsbG9jYXRpb24gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGJlLWFsbG9jCisgKiAgICAgIFZhbHVlczogICAgICAg ICAiMCIsICIxIgorICoKKyAqICAgICAgSWYgdmFsdWUgaXMgc2V0IHRvICIxIiwgdGhlbiBiYWNr ZW5kIGNhbiBiZSBhIGJ1ZmZlciBwcm92aWRlci9hbGxvY2F0b3IKKyAqICAgICAgZm9yIHRoaXMg ZG9tYWluIGR1cmluZyBYRU5ESVNQTF9PUF9EQlVGX0NSRUFURSBvcGVyYXRpb24gKHNlZSBiZWxv dworICogICAgICBmb3IgbmVnb3RpYXRpb24pLgorICogICAgICBJZiB2YWx1ZSBpcyBub3QgIjEi IG9yIG9taXR0ZWQgZnJvbnRlbmQgbXVzdCBhbGxvY2F0ZSBidWZmZXJzIGl0c2VsZi4KKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbm5lY3RvciBzZXR0aW5ncyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcmVzb2x1dGlvbgorICogICAgICBWYWx1ZXM6 ICAgICAgICAgPHdpZHRoLCB1aW50MzJfdD54PGhlaWdodCwgdWludDMyX3Q+CisgKgorICogICAg ICBXaWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBjb25uZWN0b3IgaW4gcGl4ZWxzIHNlcGFyYXRlZCBi eQorICogICAgICBYRU5ESVNQTF9SRVNPTFVUSU9OX1NFUEFSQVRPUi4gVGhpcyBkZWZpbmVzIHZp c2libGUgYXJlYSBvZiB0aGUKKyAqICAgICAgZGlzcGxheS4KKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLSBDb25uZWN0b3IgUmVxdWVzdCBUcmFuc3BvcnQgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogVGhpcyBjb21tdW5pY2F0aW9uIHBhdGggaXMgdXNlZCB0byBkZWxpdmVy IHJlcXVlc3RzIGZyb20gZnJvbnRlbmQgdG8gYmFja2VuZAorICogYW5kIGdldCB0aGUgY29ycmVz cG9uZGluZyByZXNwb25zZXMgZnJvbSBiYWNrZW5kIHRvIGZyb250ZW5kLAorICogc2V0IHVwIHBl ciBjb25uZWN0b3IuCisgKgorICogcmVxLWV2ZW50LWNoYW5uZWwKKyAqICAgICAgVmFsdWVzOiAg ICAgICAgIDx1aW50MzJfdD4KKyAqCisgKiAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBYZW4g Y29ubmVjdG9yJ3MgY29udHJvbCBldmVudCBjaGFubmVsCisgKiAgICAgIHVzZWQgdG8gc2lnbmFs IGFjdGl2aXR5IGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiByZXEtcmluZy1yZWYKKyAqICAg ICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyAqCisgKiAgICAgIFRoZSBYZW4gZ3JhbnQg cmVmZXJlbmNlIGdyYW50aW5nIHBlcm1pc3Npb24gZm9yIHRoZSBiYWNrZW5kIHRvIG1hcAorICog ICAgICBhIHNvbGUgcGFnZSBvZiBjb25uZWN0b3IncyBjb250cm9sIHJpbmcgYnVmZmVyLgorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25uZWN0b3IgRXZlbnQgVHJhbnNwb3J0IFBhcmFtZXRl cnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGNvbW11bmljYXRpb24gcGF0aCBp cyB1c2VkIHRvIGRlbGl2ZXIgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9tIGJhY2tlbmQKKyAqIHRv IGZyb250ZW5kLCBzZXQgdXAgcGVyIGNvbm5lY3Rvci4KKyAqCisgKiBldnQtZXZlbnQtY2hhbm5l bAorICogICAgICBWYWx1ZXM6ICAgICAgICAgPHVpbnQzMl90PgorICoKKyAqICAgICAgVGhlIGlk ZW50aWZpZXIgb2YgdGhlIFhlbiBjb25uZWN0b3IncyBldmVudCBjaGFubmVsCisgKiAgICAgIHVz ZWQgdG8gc2lnbmFsIGFjdGl2aXR5IGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiBldnQtcmlu Zy1yZWYKKyAqICAgICAgVmFsdWVzOiAgICAgICAgIDx1aW50MzJfdD4KKyAqCisgKiAgICAgIFRo ZSBYZW4gZ3JhbnQgcmVmZXJlbmNlIGdyYW50aW5nIHBlcm1pc3Npb24gZm9yIHRoZSBiYWNrZW5k IHRvIG1hcAorICogICAgICBhIHNvbGUgcGFnZSBvZiBjb25uZWN0b3IncyBldmVudCByaW5nIGJ1 ZmZlci4KKyAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU1RBVEUgRElBR1JBTVMKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqCisgKiBUb29sIHN0YWNrIGNyZWF0ZXMgZnJvbnQgYW5kIGJhY2sgc3RhdGUgbm9kZXMgd2l0 aCBpbml0aWFsIHN0YXRlCisgKiBYZW5idXNTdGF0ZUluaXRpYWxpc2luZy4KKyAqIFRvb2wgc3Rh Y2sgY3JlYXRlcyBhbmQgc2V0cyB1cCBmcm9udGVuZCBkaXNwbGF5IGNvbmZpZ3VyYXRpb24KKyAq IG5vZGVzIHBlciBkb21haW4uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBOb3JtYWwgZmxvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEZy b250ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrCisgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorICogWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcgICAgICAgICAgICAgIFhlbmJ1c1N0YXRl SW5pdGlhbGlzaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8g UXVlcnkgYmFja2VuZCBkZXZpY2UgaWRlbnRpZmljYXRpb24KKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvIE9wZW4gYW5kIHZhbGlkYXRlIGJhY2tlbmQgZGV2aWNlLgorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdFdhaXQKKyAqCisgKiBvIFF1ZXJ5 IGZyb250ZW5kIGNvbmZpZ3VyYXRpb24KKyAqIG8gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUKKyAq ICAgZXZlbnQgY2hhbm5lbHMgcGVyIGNvbmZpZ3VyZWQKKyAqICAgY29ubmVjdG9yLgorICogbyBQ dWJsaXNoIHRyYW5zcG9ydCBwYXJhbWV0ZXJzCisgKiAgIHRoYXQgd2lsbCBiZSBpbiBlZmZlY3Qg ZHVyaW5nCisgKiAgIHRoaXMgY29ubmVjdGlvbi4KKyAqICAgICAgICAgICAgICB8CisgKiAgICAg ICAgICAgICAgfAorICogICAgICAgICAgICAgIFYKKyAqIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQK KyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gUXVlcnkgZnJv bnRlbmQgdHJhbnNwb3J0IHBhcmFtZXRlcnMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG8gQ29ubmVjdCB0byB0aGUgZXZlbnQgY2hhbm5lbHMuCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgWGVuYnVzU3RhdGVDb25uZWN0ZWQKKyAqCisgKiAgbyBDcmVhdGUg YW5kIGluaXRpYWxpemUgT1MKKyAqICAgIHZpcnR1YWwgZGlzcGxheSBjb25uZWN0b3JzCisgKiAg ICBhcyBwZXIgY29uZmlndXJhdGlvbi4KKyAqICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAg ICAgfAorICogICAgICAgICAgICAgIFYKKyAqIFhlbmJ1c1N0YXRlQ29ubmVjdGVkCisgKgorICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlVW5rbm93bgor ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlQ2xvc2Vk CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWGVuYnVzU3RhdGVDbG9z aW5nCisgKiBvIFJlbW92ZSB2aXJ0dWFsIGRpc3BsYXkgZGV2aWNlCisgKiBvIFJlbW92ZSBldmVu dCBjaGFubmVscworICogICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICB8CisgKiAgICAg ICAgICAgICAgVgorICogWGVuYnVzU3RhdGVDbG9zZWQKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gUmVjb3ZlcnkgZmxvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogSW4gY2FzZSBvZiBmcm9udGVuZCB1bnJlY292ZXJhYmxlIGVycm9ycyBiYWNr ZW5kIGhhbmRsZXMgdGhhdCBhcworICogaWYgZnJvbnRlbmQgZ29lcyBpbnRvIHRoZSBYZW5idXNT dGF0ZUNsb3NlZCBzdGF0ZS4KKyAqCisgKiBJbiBjYXNlIG9mIGJhY2tlbmQgdW5yZWNvdmVyYWJs ZSBlcnJvcnMgZnJvbnRlbmQgdHJpZXMgcmVtb3ZpbmcKKyAqIHRoZSB2aXJ0dWFsaXplZCBkZXZp Y2UuIElmIHRoaXMgaXMgcG9zc2libGUgYXQgdGhlIG1vbWVudCBvZiBlcnJvciwKKyAqIHRoZW4g ZnJvbnRlbmQgZ29lcyBpbnRvIHRoZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyBzdGF0ZSBhbmQg aXMgcmVhZHkgZm9yCisgKiBuZXcgY29ubmVjdGlvbiB3aXRoIGJhY2tlbmQuIElmIHRoZSB2aXJ0 dWFsaXplZCBkZXZpY2UgaXMgc3RpbGwgaW4gdXNlIGFuZAorICogY2Fubm90IGJlIHJlbW92ZWQs IHRoZW4gZnJvbnRlbmQgZ29lcyBpbnRvIHRoZSBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcgc3Rh dGUKKyAqIHVudGlsIGVpdGhlciB0aGUgdmlydHVhbGl6ZWQgZGV2aWNlIGlzIHJlbW92ZWQgb3Ig YmFja2VuZCBpbml0aWF0ZXMgYSBuZXcKKyAqIGNvbm5lY3Rpb24uIE9uIHRoZSB2aXJ0dWFsaXpl ZCBkZXZpY2UgcmVtb3ZhbCBmcm9udGVuZCBnb2VzIGludG8gdGhlCisgKiBYZW5idXNTdGF0ZUlu aXRpYWxpc2luZyBzdGF0ZS4KKyAqCisgKiBOb3RlIG9uIFhlbmJ1c1N0YXRlUmVjb25maWd1cmlu ZyBzdGF0ZSBvZiB0aGUgZnJvbnRlbmQ6IGlmIGJhY2tlbmQgaGFzCisgKiB1bnJlY292ZXJhYmxl IGVycm9ycyB0aGVuIGZyb250ZW5kIGNhbm5vdCBzZW5kIHJlcXVlc3RzIHRvIHRoZSBiYWNrZW5k CisgKiBhbmQgdGh1cyBjYW5ub3QgcHJvdmlkZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2aXJ0dWFs aXplZCBkZXZpY2UgYW55bW9yZS4KKyAqIEFmdGVyIGJhY2tlbmQgaXMgYmFjayB0byBub3JtYWwg dGhlIHZpcnR1YWxpemVkIGRldmljZSBtYXkgc3RpbGwgaG9sZCBzb21lCisgKiBzdGF0ZTogY29u ZmlndXJhdGlvbiBpbiB1c2UsIGFsbG9jYXRlZCBidWZmZXJzLCBjbGllbnQgYXBwbGljYXRpb24g c3RhdGUgZXRjLgorICogSW4gbW9zdCBjYXNlcywgdGhpcyB3aWxsIHJlcXVpcmUgZnJvbnRlbmQg dG8gaW1wbGVtZW50IGNvbXBsZXggcmVjb3ZlcnkKKyAqIHJlY29ubmVjdCBsb2dpYy4gSW5zdGVh ZCwgYnkgZ29pbmcgaW50byBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcgc3RhdGUsCisgKiBmcm9u dGVuZCB3aWxsIG1ha2Ugc3VyZSBubyBuZXcgY2xpZW50cyBvZiB0aGUgdmlydHVhbGl6ZWQgZGV2 aWNlIGFyZQorICogYWNjZXB0ZWQsIGFsbG93IGV4aXN0aW5nIGNsaWVudChzKSB0byBleGl0IGdy YWNlZnVsbHkgYnkgc2lnbmFsaW5nIGVycm9yCisgKiBzdGF0ZSBldGMuCisgKiBPbmNlIGFsbCB0 aGUgY2xpZW50cyBhcmUgZ29uZSBmcm9udGVuZCBjYW4gcmVpbml0aWFsaXplIHRoZSB2aXJ0dWFs aXplZAorICogZGV2aWNlIGFuZCBnZXQgaW50byBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyBzdGF0 ZSBhZ2FpbiBzaWduYWxpbmcgdGhlCisgKiBiYWNrZW5kIHRoYXQgYSBuZXcgY29ubmVjdGlvbiBj YW4gYmUgbWFkZS4KKyAqCisgKiBUaGVyZSBhcmUgbXVsdGlwbGUgY29uZGl0aW9ucyBwb3NzaWJs ZSB1bmRlciB3aGljaCBmcm9udGVuZCB3aWxsIGdvIGZyb20KKyAqIFhlbmJ1c1N0YXRlUmVjb25m aWd1cmluZyBpbnRvIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nLCBzb21lIG9mIHRoZW0gYXJlIE9T CisgKiBzcGVjaWZpYy4gRm9yIGV4YW1wbGU6CisgKiAxLiBUaGUgdW5kZXJseWluZyBPUyBmcmFt ZXdvcmsgbWF5IHByb3ZpZGUgY2FsbGJhY2tzIHRvIHNpZ25hbCB0aGF0IHRoZSBsYXN0CisgKiAg ICBjbGllbnQgb2YgdGhlIHZpcnR1YWxpemVkIGRldmljZSBoYXMgZ29uZSBhbmQgdGhlIGRldmlj ZSBjYW4gYmUgcmVtb3ZlZAorICogMi4gRnJvbnRlbmQgY2FuIHNjaGVkdWxlIGEgZGVmZXJyZWQg d29yayAodGltZXIvdGFza2xldC93b3JrcXVldWUpCisgKiAgICB0byBwZXJpb2RpY2FsbHkgY2hl Y2sgaWYgdGhpcyBpcyB0aGUgcmlnaHQgdGltZSB0byByZS10cnkgcmVtb3ZhbCBvZgorICogICAg dGhlIHZpcnR1YWxpemVkIGRldmljZS4KKyAqIDMuIEJ5IGFueSBvdGhlciBtZWFucy4KKyAqCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVR VUVTVCBDT0RFUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVxdWVzdCBjb2RlcyBbMDsg MTVdIGFyZSByZXNlcnZlZCBhbmQgbXVzdCBub3QgYmUgdXNlZAorICovCisKKyNkZWZpbmUgWEVO RElTUExfT1BfREJVRl9DUkVBVEUgICAgICAgMHgxMAorI2RlZmluZSBYRU5ESVNQTF9PUF9EQlVG X0RFU1RST1kgICAgICAweDExCisjZGVmaW5lIFhFTkRJU1BMX09QX0ZCX0FUVEFDSCAgICAgICAg IDB4MTIKKyNkZWZpbmUgWEVORElTUExfT1BfRkJfREVUQUNIICAgICAgICAgMHgxMworI2RlZmlu ZSBYRU5ESVNQTF9PUF9TRVRfQ09ORklHICAgICAgICAweDE0CisjZGVmaW5lIFhFTkRJU1BMX09Q X1BHX0ZMSVAgICAgICAgICAgIDB4MTUKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQgQ09ERVMKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqLworI2RlZmluZSBYRU5ESVNQTF9FVlRfUEdfRkxJUCAgICAgICAgICAw eDAwCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgIFhFTlNU T1JFIEZJRUxEIEFORCBQQVRIIE5BTUUgU1RSSU5HUywgSEVMUEVSUworICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICovCisjZGVmaW5lIFhFTkRJU1BMX0RSSVZFUl9OQU1FICAgICAgICAgICJ2ZGlz cGwiCisKKyNkZWZpbmUgWEVORElTUExfTElTVF9TRVBBUkFUT1IgICAgICAgIiwiCisjZGVmaW5l IFhFTkRJU1BMX1JFU09MVVRJT05fU0VQQVJBVE9SICJ4IgorCisjZGVmaW5lIFhFTkRJU1BMX0ZJ RUxEX0JFX1ZFUlNJT05TICAgICJ2ZXJzaW9ucyIKKyNkZWZpbmUgWEVORElTUExfRklFTERfRkVf VkVSU0lPTiAgICAgInZlcnNpb24iCisjZGVmaW5lIFhFTkRJU1BMX0ZJRUxEX1JFUV9SSU5HX1JF RiAgICJyZXEtcmluZy1yZWYiCisjZGVmaW5lIFhFTkRJU1BMX0ZJRUxEX1JFUV9DSEFOTkVMICAg ICJyZXEtZXZlbnQtY2hhbm5lbCIKKyNkZWZpbmUgWEVORElTUExfRklFTERfRVZUX1JJTkdfUkVG ICAgImV2dC1yaW5nLXJlZiIKKyNkZWZpbmUgWEVORElTUExfRklFTERfRVZUX0NIQU5ORUwgICAg ImV2dC1ldmVudC1jaGFubmVsIgorI2RlZmluZSBYRU5ESVNQTF9GSUVMRF9SRVNPTFVUSU9OICAg ICAicmVzb2x1dGlvbiIKKyNkZWZpbmUgWEVORElTUExfRklFTERfQkVfQUxMT0MgICAgICAgImJl LWFsbG9jIgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAg ICAgICAgICAgIFNUQVRVUyBSRVRVUk4gQ09ERVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq CisgKiBTdGF0dXMgcmV0dXJuIGNvZGUgaXMgemVybyBvbiBzdWNjZXNzIGFuZCAtWEVOX0VYWCBv biBmYWlsdXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXNzdW1wdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG8g dXNhZ2Ugb2YgZ3JhbnQgcmVmZXJlbmNlIDAgYXMgaW52YWxpZCBncmFudCByZWZlcmVuY2U6Cisg KiAgIGdyYW50IHJlZmVyZW5jZSAwIGlzIHZhbGlkLCBidXQgbmV2ZXIgZXhwb3NlZCB0byBhIFBW IGRyaXZlciwKKyAqICAgYmVjYXVzZSBvZiB0aGUgZmFjdCBpdCBpcyBhbHJlYWR5IGluIHVzZS9y ZXNlcnZlZCBieSB0aGUgUFYgY29uc29sZS4KKyAqIG8gYWxsIHJlZmVyZW5jZXMgaW4gdGhpcyBk b2N1bWVudCB0byBwYWdlIHNpemVzIG11c3QgYmUgdHJlYXRlZAorICogICBhcyBwYWdlcyBvZiBz aXplIFhFTl9QQUdFX1NJWkUgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKyAqCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiAgICAgICBEZXNjcmlwdGlvbiBvZiB0aGUgcHJvdG9jb2wgYmV0d2Vl biBmcm9udGVuZCBhbmQgYmFja2VuZCBkcml2ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq CisgKiBUaGUgdHdvIGhhbHZlcyBvZiBhIFBhcmEtdmlydHVhbCBkaXNwbGF5IGRyaXZlciBjb21t dW5pY2F0ZSB3aXRoCisgKiBlYWNoIG90aGVyIHVzaW5nIHNoYXJlZCBwYWdlcyBhbmQgZXZlbnQg Y2hhbm5lbHMuCisgKiBTaGFyZWQgcGFnZSBjb250YWlucyBhIHJpbmcgd2l0aCByZXF1ZXN0L3Jl c3BvbnNlIHBhY2tldHMuCisgKgorICogQWxsIHJlc2VydmVkIGZpZWxkcyBpbiB0aGUgc3RydWN0 dXJlcyBiZWxvdyBtdXN0IGJlIDAuCisgKiBEaXNwbGF5IGJ1ZmZlcnMncyBjb29raWUgb2YgdmFs dWUgMCBpcyB0cmVhdGVkIGFzIGludmFsaWQuCisgKiBGcmFtZWJ1ZmZlcidzIGNvb2tpZSBvZiB2 YWx1ZSAwIGlzIHRyZWF0ZWQgYXMgaW52YWxpZC4KKyAqCisgKiBGb3IgYWxsIHJlcXVlc3QvcmVz cG9uc2UvZXZlbnQgcGFja2V0cyB0aGF0IHVzZSBjb29raWVzOgorICogICBkYnVmX2Nvb2tpZSAt IHVpbnQ2NF90LCB1bmlxdWUgdG8gZ3Vlc3QgZG9tYWluIHZhbHVlIHVzZWQgYnkgdGhlIGJhY2tl bmQKKyAqICAgICB0byBtYXAgcmVtb3RlIGRpc3BsYXkgYnVmZmVyIHRvIGl0cyBsb2NhbCBvbmUK KyAqICAgZmJfY29va2llIC0gdWludDY0X3QsIHVuaXF1ZSB0byBndWVzdCBkb21haW4gdmFsdWUg dXNlZCBieSB0aGUgYmFja2VuZAorICogICAgIHRvIG1hcCByZW1vdGUgZnJhbWVidWZmZXIgdG8g aXRzIGxvY2FsIG9uZQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBS ZXF1ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBBbGwgcmVx dWVzdHMvcmVzcG9uc2VzLCB3aGljaCBhcmUgbm90IGNvbm5lY3RvciBzcGVjaWZpYywgbXVzdCBi ZSBzZW50IG92ZXIKKyAqIGNvbnRyb2wgcmluZyBvZiB0aGUgY29ubmVjdG9yIHdoaWNoIGhhcyB0 aGUgaW5kZXggdmFsdWUgb2YgMDoKKyAqICAgL2xvY2FsL2RvbWFpbi88ZG9tLWlkPi9kZXZpY2Uv dmRpc3BsLzxkZXYtaWQ+LzAvcmVxLXJpbmctcmVmCisgKgorICogQWxsIHJlcXVlc3QgcGFja2V0 cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCAoNjQgb2N0ZXRzKQorICogQWxsIHJlcXVlc3QgcGFja2V0 cyBoYXZlIGNvbW1vbiBoZWFkZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAg ICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICB8ICAgIG9wZXJhdGlvbiAg IHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgaWQgLSB1aW50MTZfdCwgcHJpdmF0ZSBndWVzdCB2YWx1 ZSwgZWNob2VkIGluIHJlc3BvbnNlCisgKiAgIG9wZXJhdGlvbiAtIHVpbnQ4X3QsIG9wZXJhdGlv biBjb2RlLCBYRU5ESVNQTF9PUF8/Pz8KKyAqCisgKiBSZXF1ZXN0IGRidWYgY3JlYXRpb24gLSBy ZXF1ZXN0IGNyZWF0aW9uIG9mIGEgZGlzcGxheSBidWZmZXIuCisgKiAgICAgICAgIDAgICAgICAg ICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICB8 X09QX0RCVUZfQ1JFQVRFIHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAq IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAg ICAgIGRidWZfY29va2llIGxvdyAzMi1iaXQgICAgICAgICAgICAgICAgICAgICAgfCAxMgorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICBkYnVmX2Nvb2tpZSBoaWdo IDMyLWJpdCAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IDIwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3N6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDMyCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNgorICogKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZl9kaXJlY3RvcnkgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgNDAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDQ0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIE11c3QgYmUgc2Vu dCBvdmVyIGNvbnRyb2wgcmluZyBvZiB0aGUgY29ubmVjdG9yIHdoaWNoIGhhcyB0aGUgaW5kZXgK KyAqIHZhbHVlIG9mIDA6CisgKiAgIC9sb2NhbC9kb21haW4vPGRvbS1pZD4vZGV2aWNlL3ZkaXNw bC88ZGV2LWlkPi8wL3JlcS1yaW5nLXJlZgorICogQWxsIHVudXNlZCBiaXRzIGluIGZsYWdzIGZp ZWxkIG11c3QgYmUgc2V0IHRvIDAuCisgKgorICogQW4gYXR0ZW1wdCB0byBjcmVhdGUgbXVsdGlw bGUgZGlzcGxheSBidWZmZXJzIHdpdGggdGhlIHNhbWUgZGJ1Zl9jb29raWUgaXMKKyAqIGFuIGVy cm9yLiBkYnVmX2Nvb2tpZSBjYW4gYmUgcmUtdXNlZCBhZnRlciBkZXN0cm95aW5nIHRoZSBjb3Jy ZXNwb25kaW5nCisgKiBkaXNwbGF5IGJ1ZmZlci4KKyAqCisgKiBXaWR0aCBhbmQgaGVpZ2h0IG9m IHRoZSBkaXNwbGF5IGJ1ZmZlcnMgY2FuIGJlIHNtYWxsZXIsIGVxdWFsIG9yIGJpZ2dlcgorICog dGhhbiB0aGUgY29ubmVjdG9yJ3MgcmVzb2x1dGlvbi4gRGVwdGgvcGl4ZWwgZm9ybWF0IG9mIHRo ZSBpbmRpdmlkdWFsCisgKiBidWZmZXJzIGNhbiBkaWZmZXIgYXMgd2VsbC4KKyAqCisgKiB3aWR0 aCAtIHVpbnQzMl90LCB3aWR0aCBpbiBwaXhlbHMKKyAqIGhlaWdodCAtIHVpbnQzMl90LCBoZWln aHQgaW4gcGl4ZWxzCisgKiBicHAgLSB1aW50MzJfdCwgYml0cyBwZXIgcGl4ZWwKKyAqIGJ1ZmZl cl9zeiAtIHVpbnQzMl90LCBidWZmZXIgc2l6ZSB0byBiZSBhbGxvY2F0ZWQsIG9jdGV0cworICog ZmxhZ3MgLSB1aW50MzJfdCwgZmxhZ3Mgb2YgdGhlIG9wZXJhdGlvbgorICogICBvIFhFTkRJU1BM X0RCVUZfRkxHX1JFUV9BTExPQyAtIGlmIHNldCwgdGhlbiBiYWNrZW5kIGlzIHJlcXVlc3RlZAor ICogICAgIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgd2l0aCB0aGUgcGFyYW1ldGVycyBwcm92aWRl ZCBpbiB0aGlzIHJlcXVlc3QuCisgKiAgICAgUGFnZSBkaXJlY3RvcnkgaXMgaGFuZGxlZCBhcyBm b2xsb3dzOgorICogICAgICAgRnJvbnRlbmQgb24gcmVxdWVzdDoKKyAqICAgICAgICAgbyBhbGxv Y2F0ZXMgcGFnZXMgZm9yIHRoZSBkaXJlY3RvcnkgKGdyZWZfZGlyZWN0b3J5LAorICogICAgICAg ICAgIGdyZWZfZGlyX25leHRfcGFnZShzKQorICogICAgICAgICBvIGdyYW50cyBwZXJtaXNzaW9u cyBmb3IgdGhlIHBhZ2VzIG9mIHRoZSBkaXJlY3RvcnkgdG8gdGhlIGJhY2tlbmQKKyAqICAgICAg ICAgbyBzZXRzIGdyZWZfZGlyX25leHRfcGFnZSBmaWVsZHMKKyAqICAgICAgIEJhY2tlbmQgb24g cmVzcG9uc2U6CisgKiAgICAgICAgIG8gZ3JhbnRzIHBlcm1pc3Npb25zIGZvciB0aGUgcGFnZXMg b2YgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgdG8KKyAqICAgICAgICAgICB0aGUgZnJvbnRlbmQKKyAq ICAgICAgICAgbyBmaWxscyBpbiBwYWdlIGRpcmVjdG9yeSB3aXRoIGdyYW50IHJlZmVyZW5jZXMK KyAqICAgICAgICAgICAoZ3JlZltdIGluIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSkK KyAqIGdyZWZfZGlyZWN0b3J5IC0gZ3JhbnRfcmVmX3QsIGEgcmVmZXJlbmNlIHRvIHRoZSBmaXJz dCBzaGFyZWQgcGFnZQorICogICBkZXNjcmliaW5nIHNoYXJlZCBidWZmZXIgcmVmZXJlbmNlcy4g QXQgbGVhc3Qgb25lIHBhZ2UgZXhpc3RzLiBJZiBzaGFyZWQKKyAqICAgYnVmZmVyIHNpemUgKGJ1 ZmZlcl9zeikgZXhjZWVkcyB3aGF0IGNhbiBiZSBhZGRyZXNzZWQgYnkgdGhpcyBzaW5nbGUgcGFn ZSwKKyAqICAgdGhlbiByZWZlcmVuY2UgdG8gdGhlIG5leHQgcGFnZSBtdXN0IGJlIHN1cHBsaWVk IChzZWUgZ3JlZl9kaXJfbmV4dF9wYWdlCisgKiAgIGJlbG93KQorICovCisKKyNkZWZpbmUgWEVO RElTUExfREJVRl9GTEdfUkVRX0FMTE9DICAgICAgICgxIDw8IDApCisKK3N0cnVjdCB4ZW5kaXNw bF9kYnVmX2NyZWF0ZV9yZXEgeworICAgIHVpbnQ2NF90IGRidWZfY29va2llOworICAgIHVpbnQz Ml90IHdpZHRoOworICAgIHVpbnQzMl90IGhlaWdodDsKKyAgICB1aW50MzJfdCBicHA7CisgICAg dWludDMyX3QgYnVmZmVyX3N6OworICAgIHVpbnQzMl90IGZsYWdzOworICAgIGdyYW50X3JlZl90 IGdyZWZfZGlyZWN0b3J5OworfTsKKworLyoKKyAqIFNoYXJlZCBwYWdlIGZvciBYRU5ESVNQTF9P UF9EQlVGX0NSRUFURSBidWZmZXIgZGVzY3JpcHRvciAoZ3JlZl9kaXJlY3RvcnkgaW4KKyAqIHRo ZSByZXF1ZXN0KSBlbXBsb3lzIGEgbGlzdCBvZiBwYWdlcywgZGVzY3JpYmluZyBhbGwgcGFnZXMg b2YgdGhlIHNoYXJlZAorICogZGF0YSBidWZmZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAg ICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiAr LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICBncmVmX2Rpcl9uZXh0X3Bh Z2UgICAgICAgICAgICAgICAgICAgICAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBncmVmWzBdICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZltpXSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgaSo0KzgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC98CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy ZWZbTiAtIDFdICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOKjQrOAorICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCisgKgorICogZ3JlZl9kaXJfbmV4dF9wYWdlIC0gZ3JhbnRfcmVmX3QsIHJlZmVyZW5jZSB0 byB0aGUgbmV4dCBwYWdlIGRlc2NyaWJpbmcKKyAqICAgcGFnZSBkaXJlY3RvcnkuIE11c3QgYmUg MCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBwYWdlcyBpbiB0aGUgbGlzdC4KKyAqIGdyZWZbaV0gLSBn cmFudF9yZWZfdCwgcmVmZXJlbmNlIHRvIGEgc2hhcmVkIHBhZ2Ugb2YgdGhlIGJ1ZmZlcgorICog ICBhbGxvY2F0ZWQgYXQgWEVORElTUExfT1BfREJVRl9DUkVBVEUKKyAqCisgKiBOdW1iZXIgb2Yg Z3JhbnRfcmVmX3QgZW50cmllcyBpbiB0aGUgd2hvbGUgcGFnZSBkaXJlY3RvcnkgaXMgbm90Cisg KiBwYXNzZWQsIGJ1dCBpbnN0ZWFkIGNhbiBiZSBjYWxjdWxhdGVkIGFzOgorICogICBudW1fZ3Jl ZnNfdG90YWwgPSAoWEVORElTUExfT1BfREJVRl9DUkVBVEUuYnVmZmVyX3N6ICsgWEVOX1BBR0Vf U0laRSAtIDEpIC8KKyAqICAgICAgIFhFTl9QQUdFX1NJWkUKKyAqLworCitzdHJ1Y3QgeGVuZGlz cGxfcGFnZV9kaXJlY3RvcnkgeworICAgIGdyYW50X3JlZl90IGdyZWZfZGlyX25leHRfcGFnZTsK KyAgICBncmFudF9yZWZfdCBncmVmWzFdOyAvKiBWYXJpYWJsZSBsZW5ndGggKi8KK307CisKKy8q CisgKiBSZXF1ZXN0IGRidWYgZGVzdHJ1Y3Rpb24gLSBkZXN0cm95IGEgcHJldmlvdXNseSBhbGxv Y2F0ZWQgZGlzcGxheSBidWZmZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAg ICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICB8X09QX0RCVUZfREVTVFJP WXwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4 CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgIGRidWZfY29va2ll IGxvdyAzMi1iaXQgICAgICAgICAgICAgICAgICAgICAgfCAxMgorICogKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisg KiB8ICAgICAgICAgICAgICAgICAgICAgICBkYnVmX2Nvb2tpZSBoaWdoIDMyLWJpdCAgICAgICAg ICAgICAgICAgICAgIHwgMTYKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisg KiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIE11c3QgYmUgc2VudCBvdmVyIGNv bnRyb2wgcmluZyBvZiB0aGUgY29ubmVjdG9yIHdoaWNoIGhhcyB0aGUgaW5kZXgKKyAqIHZhbHVl IG9mIDA6CisgKiAgIC9sb2NhbC9kb21haW4vPGRvbS1pZD4vZGV2aWNlL3ZkaXNwbC88ZGV2LWlk Pi8wL3JlcS1yaW5nLXJlZgorICovCisKK3N0cnVjdCB4ZW5kaXNwbF9kYnVmX2Rlc3Ryb3lfcmVx IHsKKyAgICB1aW50NjRfdCBkYnVmX2Nvb2tpZTsKK307CisKKy8qCisgKiBSZXF1ZXN0IGZyYW1l YnVmZmVyIGF0dGFjaG1lbnQgLSByZXF1ZXN0IGF0dGFjaG1lbnQgb2YgYSBmcmFtZWJ1ZmZlciB0 bworICogcHJldmlvdXNseSBjcmVhdGVkIGRpc3BsYXkgYnVmZmVyLgorICogICAgICAgICAwICAg ICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBv Y3RldAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAg ICAgfCBfT1BfRkJfQVRUQUNIICB8ICAgcmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAg ICAgICAgICBkYnVmX2Nvb2tpZSBsb3cgMzItYml0ICAgICAgICAgICAgICAgICAgICAgIHwgMTIK KyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgZGJ1Zl9jb29raWUg aGlnaCAzMi1iaXQgICAgICAgICAgICAgICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAq IHwgICAgICAgICAgICAgICAgICAgICAgICBmYl9jb29raWUgbG93IDMyLWJpdCAgICAgICAgICAg ICAgICAgICAgICAgfCAyMAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAg ICAgICAgZmJfY29va2llIGhpZ2ggMzItYml0ICAgICAgICAgICAgICAgICAgICAgIHwgMjQKKyAq ICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI4CisgKiArLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAzMgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBpeGVsX2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICoKKyAqIE11c3QgYmUgc2VudCBvdmVyIGNvbnRyb2wgcmluZyBvZiB0aGUgY29ubmVj dG9yIHdoaWNoIGhhcyB0aGUgaW5kZXgKKyAqIHZhbHVlIG9mIDA6CisgKiAgIC9sb2NhbC9kb21h aW4vPGRvbS1pZD4vZGV2aWNlL3ZkaXNwbC88ZGV2LWlkPi8wL3JlcS1yaW5nLXJlZgorICogV2lk dGggYW5kIGhlaWdodCBjYW4gYmUgc21hbGxlciwgZXF1YWwgb3IgYmlnZ2VyIHRoYW4gdGhlIGNv bm5lY3RvcidzCisgKiByZXNvbHV0aW9uLgorICoKKyAqIEFuIGF0dGVtcHQgdG8gY3JlYXRlIG11 bHRpcGxlIGZyYW1lIGJ1ZmZlcnMgd2l0aCB0aGUgc2FtZSBmYl9jb29raWUgaXMKKyAqIGFuIGVy cm9yLiBmYl9jb29raWUgY2FuIGJlIHJlLXVzZWQgYWZ0ZXIgZGVzdHJveWluZyB0aGUgY29ycmVz cG9uZGluZworICogZnJhbWUgYnVmZmVyLgorICoKKyAqIHdpZHRoIC0gdWludDMyX3QsIHdpZHRo IGluIHBpeGVscworICogaGVpZ2h0IC0gdWludDMyX3QsIGhlaWdodCBpbiBwaXhlbHMKKyAqIHBp eGVsX2Zvcm1hdCAtIHVpbnQzMl90LCBwaXhlbCBmb3JtYXQgb2YgdGhlIGZyYW1lYnVmZmVyLCBG T1VSQ0MgY29kZQorICovCisKK3N0cnVjdCB4ZW5kaXNwbF9mYl9hdHRhY2hfcmVxIHsKKyAgICB1 aW50NjRfdCBkYnVmX2Nvb2tpZTsKKyAgICB1aW50NjRfdCBmYl9jb29raWU7CisgICAgdWludDMy X3Qgd2lkdGg7CisgICAgdWludDMyX3QgaGVpZ2h0OworICAgIHVpbnQzMl90IHBpeGVsX2Zvcm1h dDsKK307CisKKy8qCisgKiBSZXF1ZXN0IGZyYW1lYnVmZmVyIGRldGFjaCAtIGRldGFjaCBhIHBy ZXZpb3VzbHkKKyAqIGF0dGFjaGVkIGZyYW1lYnVmZmVyIGZyb20gdGhlIGRpc3BsYXkgYnVmZmVy IGluIHJlcXVlc3Q6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAg ICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwg ICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICB8ICBfT1BfRkJfREVUQUNIIHwgICByZXNl cnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4CisgKiArLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICBmYl9jb29raWUgbG93IDMyLWJp dCAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAg ICAgICAgICAgICAgICAgICAgZmJfY29va2llIGhpZ2ggMzItYml0ICAgICAgICAgICAgICAgICAg ICAgIHwgMTYKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisgKiArLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg NjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIE11c3QgYmUgc2VudCBvdmVyIGNvbnRyb2wgcmlu ZyBvZiB0aGUgY29ubmVjdG9yIHdoaWNoIGhhcyB0aGUgaW5kZXgKKyAqIHZhbHVlIG9mIDA6Cisg KiAgIC9sb2NhbC9kb21haW4vPGRvbS1pZD4vZGV2aWNlL3ZkaXNwbC88ZGV2LWlkPi8wL3JlcS1y aW5nLXJlZgorICovCisKK3N0cnVjdCB4ZW5kaXNwbF9mYl9kZXRhY2hfcmVxIHsKKyAgICB1aW50 NjRfdCBmYl9jb29raWU7Cit9OworCisvKgorICogUmVxdWVzdCBjb25maWd1cmF0aW9uIHNldC9y ZXNldCAtIHJlcXVlc3QgdG8gc2V0IG9yIHJlc2V0CisgKiB0aGUgY29uZmlndXJhdGlvbi9tb2Rl IG9mIHRoZSBkaXNwbGF5OgorICogICAgICAgICAwICAgICAgICAgICAgICAgIDEgICAgICAgICAg ICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisg KiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfCBfT1BfU0VUX0NPTkZJRyB8ICAg cmVzZXJ2ZWQgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOAorICog Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgZmJfY29va2llIGxvdyAz Mi1iaXQgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAg ICAgICAgICAgICAgICAgICAgICAgIGZiX2Nvb2tpZSBoaWdoIDMyLWJpdCAgICAgICAgICAgICAg ICAgICAgICB8IDE2CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDI4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMgorICogKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgNDAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDQ0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIFBhc3MgYWxsIHpl cm9zIHRvIHJlc2V0LCBvdGhlcndpc2UgY29tbWFuZCBpcyB0cmVhdGVkIGFzCisgKiBjb25maWd1 cmF0aW9uIHNldC4KKyAqIEZyYW1lYnVmZmVyJ3MgY29va2llIGRlZmluZXMgd2hpY2ggZnJhbWVi dWZmZXIvZGJ1ZiBtdXN0IGJlCisgKiBkaXNwbGF5ZWQgd2hpbGUgZW5hYmxpbmcgZGlzcGxheSAo YXBwbHlpbmcgY29uZmlndXJhdGlvbikuCisgKiB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBi b3VuZCBieSB0aGUgY29ubmVjdG9yJ3MgcmVzb2x1dGlvbiBhbmQgbXVzdCBub3QKKyAqIGV4Y2Vl ZCBpdC4KKyAqCisgKiB4IC0gdWludDMyX3QsIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBi eSBYIGF4aXMKKyAqIHkgLSB1aW50MzJfdCwgc3RhcnRpbmcgcG9zaXRpb24gaW4gcGl4ZWxzIGJ5 IFkgYXhpcworICogd2lkdGggLSB1aW50MzJfdCwgd2lkdGggaW4gcGl4ZWxzCisgKiBoZWlnaHQg LSB1aW50MzJfdCwgaGVpZ2h0IGluIHBpeGVscworICogYnBwIC0gdWludDMyX3QsIGJpdHMgcGVy IHBpeGVsCisgKi8KKworc3RydWN0IHhlbmRpc3BsX3NldF9jb25maWdfcmVxIHsKKyAgICB1aW50 NjRfdCBmYl9jb29raWU7CisgICAgdWludDMyX3QgeDsKKyAgICB1aW50MzJfdCB5OworICAgIHVp bnQzMl90IHdpZHRoOworICAgIHVpbnQzMl90IGhlaWdodDsKKyAgICB1aW50MzJfdCBicHA7Cit9 OworCisvKgorICogUmVxdWVzdCBwYWdlIGZsaXAgLSByZXF1ZXN0IHRvIGZsaXAgYSBwYWdlIGlk ZW50aWZpZWQgYnkgdGhlIGZyYW1lYnVmZmVyCisgKiBjb29raWU6CisgKiAgICAgICAgIDAgICAg ICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9j dGV0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAg ICB8IF9PUF9QR19GTElQICAgIHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAg ICAgICAgICBmYl9jb29raWUgbG93IDMyLWJpdCAgICAgICAgICAgICAgICAgICAgICAgfCAxMgor ICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgZmJfY29va2llIGhp Z2ggMzItYml0ICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICog fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDIwCisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICovCisKK3N0 cnVjdCB4ZW5kaXNwbF9wYWdlX2ZsaXBfcmVxIHsKKyAgICB1aW50NjRfdCBmYl9jb29raWU7Cit9 OworCisvKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3BvbnNlcyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFsbCByZXNwb25zZSBwYWNr ZXRzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoICg2NCBvY3RldHMpCisgKgorICogQWxsIHJlc3BvbnNl IHBhY2tldHMgaGF2ZSBjb21tb24gaGVhZGVyOgorICogICAgICAgICAwICAgICAgICAgICAgICAg IDEgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzICAgICAgICBvY3RldAorICogKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgaWQgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgIHJlc2VydmVkICAgICAgICAgICAgIHwgNAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgOAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAqICstLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKworICogfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2 NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogaWQgLSB1aW50MTZfdCwgcHJpdmF0ZSBndWVzdCB2 YWx1ZSwgZWNob2VkIGZyb20gcmVxdWVzdAorICogc3RhdHVzIC0gaW50MzJfdCwgcmVzcG9uc2Ug c3RhdHVzLCB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIC1YRU5fRVhYIG9uIGZhaWx1cmUKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2ZW50cyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRXZlbnRzIGFyZSBzZW50IHZpYSBhIHNoYXJlZCBw YWdlIGFsbG9jYXRlZCBieSB0aGUgZnJvbnQgYW5kIHByb3BhZ2F0ZWQgYnkKKyAqICAgZXZ0LWV2 ZW50LWNoYW5uZWwvZXZ0LXJpbmctcmVmIFhlblN0b3JlIGVudHJpZXMKKyAqIEFsbCBldmVudCBw YWNrZXRzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoICg2NCBvY3RldHMpCisgKiBBbGwgZXZlbnQgcGFj a2V0cyBoYXZlIGNvbW1vbiBoZWFkZXI6CisgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAg ICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0CisgKiArLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwgICAgICAgICAgICAgICBpZCAgICAgICAgICAgICAgICB8ICAgICAgdHlwZSAg ICAgIHwgICByZXNlcnZlZCAgICAgfCA0CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCA4CisgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBpZCAtIHVpbnQxNl90LCBldmVudCBpZCwgbWF5 IGJlIHVzZWQgYnkgZnJvbnQKKyAqIHR5cGUgLSB1aW50OF90LCB0eXBlIG9mIHRoZSBldmVudAor ICoKKyAqCisgKiBQYWdlIGZsaXAgY29tcGxldGUgZXZlbnQgLSBldmVudCBmcm9tIGJhY2sgdG8g ZnJvbnQgb24gcGFnZSBmbGlwIGNvbXBsZXRlZDoKKyAqICAgICAgICAgMCAgICAgICAgICAgICAg ICAxICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMyAgICAgICAgb2N0ZXQKKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHwgICBfRVZU X1BHX0ZMSVAgfCAgIHJlc2VydmVkICAgICB8IDQKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDgKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgIGZi X2Nvb2tpZSBsb3cgMzItYml0ICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgKiArLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICBmYl9jb29raWUgaGlnaCAzMi1iaXQg ICAgICAgICAgICAgICAgICAgICAgfCAxNgorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgMjAKKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKworICogfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98CisgKiArLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsK KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA2NAorICogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgKi8KKworc3RydWN0IHhlbmRp c3BsX3BnX2ZsaXBfZXZ0IHsKKyAgICB1aW50NjRfdCBmYl9jb29raWU7Cit9OworCitzdHJ1Y3Qg eGVuZGlzcGxfcmVxIHsKKyAgICB1aW50MTZfdCBpZDsKKyAgICB1aW50OF90IG9wZXJhdGlvbjsK KyAgICB1aW50OF90IHJlc2VydmVkWzVdOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHhl bmRpc3BsX2RidWZfY3JlYXRlX3JlcSBkYnVmX2NyZWF0ZTsKKyAgICAgICAgc3RydWN0IHhlbmRp c3BsX2RidWZfZGVzdHJveV9yZXEgZGJ1Zl9kZXN0cm95OworICAgICAgICBzdHJ1Y3QgeGVuZGlz cGxfZmJfYXR0YWNoX3JlcSBmYl9hdHRhY2g7CisgICAgICAgIHN0cnVjdCB4ZW5kaXNwbF9mYl9k ZXRhY2hfcmVxIGZiX2RldGFjaDsKKyAgICAgICAgc3RydWN0IHhlbmRpc3BsX3NldF9jb25maWdf cmVxIHNldF9jb25maWc7CisgICAgICAgIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2ZsaXBfcmVxIHBn X2ZsaXA7CisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbNTZdOworICAgIH0gb3A7Cit9OworCitz dHJ1Y3QgeGVuZGlzcGxfcmVzcCB7CisgICAgdWludDE2X3QgaWQ7CisgICAgdWludDhfdCBvcGVy YXRpb247CisgICAgdWludDhfdCByZXNlcnZlZDsKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICB1 aW50OF90IHJlc2VydmVkMVs1Nl07Cit9OworCitzdHJ1Y3QgeGVuZGlzcGxfZXZ0IHsKKyAgICB1 aW50MTZfdCBpZDsKKyAgICB1aW50OF90IHR5cGU7CisgICAgdWludDhfdCByZXNlcnZlZFs1XTsK KyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB4ZW5kaXNwbF9wZ19mbGlwX2V2dCBwZ19mbGlw OworICAgICAgICB1aW50OF90IHJlc2VydmVkWzU2XTsKKyAgICB9IG9wOworfTsKKworREVGSU5F X1JJTkdfVFlQRVMoeGVuX2Rpc3BsaWYsIHN0cnVjdCB4ZW5kaXNwbF9yZXEsIHN0cnVjdCB4ZW5k aXNwbF9yZXNwKTsKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgQmFjayB0byBmcm9udCBldmVudHMgZGVsaXZlcnkKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqIEluIG9yZGVyIHRvIGRlbGl2ZXIgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9t IGJhY2sgdG8gZnJvbnQgYSBzaGFyZWQgcGFnZSBpcworICogYWxsb2NhdGVkIGJ5IGZyb250IGFu ZCBpdHMgZ3JhbnRlZCByZWZlcmVuY2UgcHJvcGFnYXRlZCB0byBiYWNrIHZpYQorICogWGVuU3Rv cmUgZW50cmllcyAoZXZ0LXJpbmctcmVmL2V2dC1ldmVudC1jaGFubmVsKS4KKyAqIFRoaXMgcGFn ZSBoYXMgYSBjb21tb24gaGVhZGVyIHVzZWQgYnkgYm90aCBmcm9udCBhbmQgYmFjayB0byBzeW5j aHJvbml6ZQorICogYWNjZXNzIGFuZCBjb250cm9sIGV2ZW50J3MgcmluZyBidWZmZXIsIHdoaWxl IGJhY2sgYmVpbmcgYSBwcm9kdWNlciBvZiB0aGUKKyAqIGV2ZW50cyBhbmQgZnJvbnQgYmVpbmcg YSBjb25zdW1lci4gVGhlIHJlc3Qgb2YgdGhlIHBhZ2UgYWZ0ZXIgdGhlIGhlYWRlcgorICogaXMg dXNlZCBmb3IgZXZlbnQgcGFja2V0cy4KKyAqCisgKiBVcG9uIHJlY2VwdGlvbiBvZiBhbiBldmVu dChzKSBmcm9udCBtYXkgY29uZmlybSBpdHMgcmVjZXB0aW9uCisgKiBmb3IgZWl0aGVyIGVhY2gg ZXZlbnQsIGdyb3VwIG9mIGV2ZW50cyBvciBub25lLgorICovCisKK3N0cnVjdCB4ZW5kaXNwbF9l dmVudF9wYWdlIHsKKyAgICB1aW50MzJfdCBpbl9jb25zOworICAgIHVpbnQzMl90IGluX3Byb2Q7 CisgICAgdWludDhfdCByZXNlcnZlZFs1Nl07Cit9OworCisjZGVmaW5lIFhFTkRJU1BMX0VWRU5U X1BBR0VfU0laRSA0MDk2CisjZGVmaW5lIFhFTkRJU1BMX0lOX1JJTkdfT0ZGUyAoc2l6ZW9mKHN0 cnVjdCB4ZW5kaXNwbF9ldmVudF9wYWdlKSkKKyNkZWZpbmUgWEVORElTUExfSU5fUklOR19TSVpF IChYRU5ESVNQTF9FVkVOVF9QQUdFX1NJWkUgLSBYRU5ESVNQTF9JTl9SSU5HX09GRlMpCisjZGVm aW5lIFhFTkRJU1BMX0lOX1JJTkdfTEVOIChYRU5ESVNQTF9JTl9SSU5HX1NJWkUgLyBzaXplb2Yo c3RydWN0IHhlbmRpc3BsX2V2dCkpCisjZGVmaW5lIFhFTkRJU1BMX0lOX1JJTkcocGFnZSkgXAor CSgoc3RydWN0IHhlbmRpc3BsX2V2dCAqKSgoY2hhciAqKShwYWdlKSArIFhFTkRJU1BMX0lOX1JJ TkdfT0ZGUykpCisjZGVmaW5lIFhFTkRJU1BMX0lOX1JJTkdfUkVGKHBhZ2UsIGlkeCkgXAorCShY RU5ESVNQTF9JTl9SSU5HKChwYWdlKSlbKGlkeCkgJSBYRU5ESVNQTF9JTl9SSU5HX0xFTl0pCisK KyNlbmRpZiAvKiBfX1hFTl9QVUJMSUNfSU9fRElTUExJRl9IX18gKi8KKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=