Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vH37n-00CSIB-6m for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 16:46:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vH37m-009EKB-1e for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 16:46:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vH37l-009EK3-9W for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 16:46:12 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vH37h-006L5q-0R for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 16:46:12 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-63bdfd73e6eso3924944a12.0 for ; Thu, 06 Nov 2025 08:46:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762447563; x=1763052363; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4UMCiNRwTdpfvZpnf0XYRItKVo7JX3pDE55HRAuTBkI=; b=ktVt+98uXUTWOjsLIhk47b9/nMMFebZ5zGHrvMpfWWacNAH6hMU3jG252ercQMSgnX xyb3P/4TZyEPXYsffw1GXhxdW6MnuKq1j7d742dhtJL5oceH94orbj2YIIJCHaaYxJnt kw0UXfRuKQrv8H/gzAnbCp4yZ7XeDlcdn8Rwtk1XDckErlh8npJSigQmId9Quo4CTU+e yaYfpFuIaO/1+QxDXfMsOLzGV0i/IU5hePXsFZhFRr/MZKbjpUC4jLb83AOa50H+lPfP 4tJn71Vk11FaIKANT7WF9DzeL0jyt9q106Pp9XyP9axFpCZ53P/RXqgB7QQp9XKcZKlV dCvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762447563; x=1763052363; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4UMCiNRwTdpfvZpnf0XYRItKVo7JX3pDE55HRAuTBkI=; b=Nzd9LwCSRTq4sNNVrq4EiEjQGHKomWNwKtTHvh0tJlq/GP4HN8zDM80jtSY7Ddz8+o ORWH5LH+95cI72zBoNUdyE8iDwR45mzSXxgldzz2JgpPdDWF/2eu/MQnz3R7Buycivw1 b+NEw1oLtSArA/urGfzShBaHQiMdu2YPOv4zSjTX2CctLT4plXilNFQ9TBvZpnk/gWVa KJFd7kLH/XE6pZLtzrPwFe6ZN0YiCeCPaGDnXxS5b2090UjXqO+KRAChS7QnFQ1GmMK8 eJiSVl6JNIKmfU7lb1WfS3lw2LBmKMciSND30RysSBjEgzY2dX41anSnVIHZFPTcgALp Knxg== X-Gm-Message-State: AOJu0YwCeuHxk4zFi2PTLK23yOH9AdISI+S4bY9XB/FxXOZFmxe1C+ce bfb3vx+X5MXVHGtGaSd4ce58WsuyIDafoN/lRwhErrxTZoF9zeYUGfV8tTLpmjH1h7pOSoWEDIb AQ9psbSowrA4fFgk0ly1EjsTDu/47T6o= X-Gm-Gg: ASbGncuHfvGg1J63ix5SY5MKGY7WKtYQPjt/ouT737vkqXUtIyEDX5e0hYpfVDOuL1g K1nIrriYGMERwBuXN1JAXRKFq//HIf/0eNTzHTvV/D9nzNz1Gv3oh0vvQJZ2ECIo4pvGsQHPmVm Cs+K8y++fjtjyWaVhZdt4eVjI6BWRE5WQ6Js1Cnew8jn01JsK7qHFftEOB7isVwmXPWJ9bRLB1m f016MjBgDOAUcKrvpEdu82jPmiPiTa385H6eBb6mG4oZd5v2Y5mlZAAr6ZlpXWwTqwKqEY= X-Google-Smtp-Source: AGHT+IFL2M1OiGXI0VI1DRaIBTSM1N5ka9xHXGEH1cP0Z5T3R2BnEtNeVR5gmuPtxtw//7LLK8kZdeGJk6yYj3jDQCY= X-Received: by 2002:a17:906:c141:b0:b72:67c2:6ebb with SMTP id a640c23a62f3a-b728931c0ccmr410940766b.8.1762447562516; Thu, 06 Nov 2025 08:46:02 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Thu, 6 Nov 2025 11:45:47 -0500 X-Gm-Features: AWmQ_bksRnNW9i1G4WYiWNcs7U3rqn-vbqyhfAwGQJP7IXb5ftmSXbvBjgWcypY Message-ID: Subject: Re: pg_plan_advice To: Jakub Wartak Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e6740f0642efcc52" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e6740f0642efcc52 Content-Type: text/plain; charset="UTF-8" Here's v3. I've attempted to fix some more things that cfbot didn't like, one of which was an actual bug in 0005, and I also fixed a stupid few bugs in pgpa_collector.c and added a few more tests. -- Robert Haas EDB: http://www.enterprisedb.com --000000000000e6740f0642efcc52 Content-Type: application/octet-stream; name="v3-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v3-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnnqd8a4 RnJvbSAwNWVmYmI1OWYxOGM0MDNiZTRjN2RmMmE1YzExNTI1NGQwZGQ4MWFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDUv Nl0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMiArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg4ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICAxICsKIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8ICA1NCArKysrKysKIHNyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3JlbG5vZGUuYyAgICB8ICA0MyArKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgIHwgIDgyICsrKysrKysrLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3Qu aCAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAg ICAgICAgfCAgMTEgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oICAgICAgICAgICB8 ICAgOSArLQogMTQgZmlsZXMgY2hhbmdlZCwgNDUyIGluc2VydGlvbnMoKyksIDk3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDkyOGI4ZDg0YWQ4 Li44ZTlkZGUzZDE5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC05 NTQsNyArOTU0LDcgQEAgc2V0X3RhYmxlc2FtcGxlX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBSYW5nZVRibEVudHJ5ICoKIAkJIGJtc19tZW1iZXJzaGlw KHJvb3QtPmFsbF9xdWVyeV9yZWxzKSAhPSBCTVNfU0lOR0xFVE9OKSAmJgogCQkhKEdldFRzbVJv dXRpbmUocnRlLT50YWJsZXNhbXBsZS0+dHNtaGFuZGxlciktPnJlcGVhdGFibGVfYWNyb3NzX3Nj YW5zKSkKIAl7Ci0JCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHBh dGgpOworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBwYXRoLCB0 cnVlKTsKIAl9CiAKIAlhZGRfcGF0aChyZWwsIHBhdGgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKaW5kZXggODMzNWNmNWI1YzUuLjZlNDdjOWY1ODkzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTI3NSw2ICsyNzUsNyBAQCBjb3N0X3NlcXNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlzcGNfc2VxX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSBQR1NfU0VRU0NBTjsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAg LTMyNyw4ICszMjgsMTEgQEAgY29zdF9zZXFzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCQkgKi8KIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfc2Vxc2NhbiA/ IDAgOiAxOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYg ZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3RhcnR1cF9jb3N0 ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBjcHVf cnVuX2Nvc3QgKyBkaXNrX3J1bl9jb3N0OwogfQpAQCAtMzU0LDYgKzM1OCw3IEBAIGNvc3Rfc2Ft cGxlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQlzcGNfcGFnZV9jb3N0 OwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0 CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2Ug cmVsYXRpb25zIHdpdGggdGFibGVzYW1wbGUgY2xhdXNlcyAqLwogCUFzc2VydChiYXNlcmVsLT5y ZWxpZCA+IDApOwpAQCAtNDAxLDcgKzQwNiwxMSBAQCBjb3N0X3NhbXBsZXNjYW4oUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQt PmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90 dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBh dGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CisKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3Nf bWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0 dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0 ICsgcnVuX2Nvc3Q7CiB9CkBAIC00NDAsNyArNDQ5LDggQEAgY29zdF9nYXRoZXIoR2F0aGVyUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3Nl dHVwX2Nvc3Q7CiAJcnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgu cm93czsKIAotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNh YmxlZF9ub2RlczsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKHJlbC0+cGdzX21hc2sgJiBQR1NfR0FUSEVSKSAhPSAwID8g MCA6IDEpOwogCXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgt PnBhdGgudG90YWxfY29zdCA9IChzdGFydHVwX2Nvc3QgKyBydW5fY29zdCk7CiB9CkBAIC01MDYs OCArNTE2LDggQEAgY29zdF9nYXRoZXJfbWVyZ2UoR2F0aGVyTWVyZ2VQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGFyYWxsZWxfc2V0dXBfY29zdDsKIAly dW5fY29zdCArPSBwYXJhbGxlbF90dXBsZV9jb3N0ICogcGF0aC0+cGF0aC5yb3dzICogMS4wNTsK IAotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcwotCQkr IChlbmFibGVfZ2F0aGVybWVyZ2UgPyAwIDogMSk7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2Rl cyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYg UEdTX0dBVEhFUl9NRVJHRSkgIT0gMCA/IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdCArIGlucHV0X3N0YXJ0dXBfY29zdDsKIAlwYXRoLT5wYXRoLnRvdGFs X2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QgKyBpbnB1dF90b3RhbF9jb3N0KTsKIH0K QEAgLTU1Nyw2ICs1NjcsNyBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsIGRvdWJsZSBsb29wX2NvdW50LAogCWRvdWJsZQkJcGFnZXNfZmV0Y2hlZDsKIAlk b3VibGUJCXJhbmRfaGVhcF9wYWdlczsKIAlkb3VibGUJCWluZGV4X3BhZ2VzOworCXVpbnQ2NAkJ ZW5hYmxlX21hc2s7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSAmJgpAQCAtNTg4LDggKzU5 OSwxMSBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIGRv dWJsZSBsb29wX2NvdW50LAogCQkJCQkJCQkJCQkgIHBhdGgtPmluZGV4Y2xhdXNlcyk7CiAJfQog Ci0JLyogd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlbmFibGVfaW5kZXhvbmx5c2NhbjsgaW5keHBh dGguYyBkb2VzIHRoYXQgKi8KLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gZW5hYmxlX2lu ZGV4c2NhbiA/IDAgOiAxOworCS8qIGlzIHRoaXMgc2NhbiB0eXBlIGRpc2FibGVkPyAqLworCWVu YWJsZV9tYXNrID0gKGluZGV4b25seSA/IFBHU19JTkRFWE9OTFlTQ0FOIDogUEdTX0lOREVYU0NB TikKKwkJfCAocGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDAgPyBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTCA6IDApOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAogCS8q CiAJICogQ2FsbCBpbmRleC1hY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUg dGhlIHByb2Nlc3NpbmcgY29zdApAQCAtMTAxMCw2ICsxMDI0LDcgQEAgY29zdF9iaXRtYXBfaGVh cF9zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVs LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3QsCiAJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7 CiAJZG91YmxlCQlUOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQklUTUFQU0NBTjsKIAog CS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQo SXNBKGJhc2VyZWwsIFJlbE9wdEluZm8pKTsKQEAgLTEwNzUsNiArMTA5MCw4IEBAIGNvc3RfYml0 bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8gcGFy YWxsZWxfZGl2aXNvcik7CiAJfQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CiAKIAogCXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKQEAgLTEwODMsNyAr MTEwMCw4IEBAIGNvc3RfYml0bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRh cmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Qu cGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxl X2JpdG1hcHNjYW4gPyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgt PnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1 cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xMjQwLDYgKzEyNTgsNyBAQCBjb3N0X3RpZHNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQludHVwbGVzOwogCUxpc3RD ZWxsICAgKmw7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKKwl1aW50NjQJCWVuYWJs ZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlv bnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTEyNjEsMTAgKzEyODAsMTAg QEAgY29zdF90aWRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJCS8qCiAJ CSAqIFdlIG11c3QgdXNlIGEgVElEIHNjYW4gZm9yIEN1cnJlbnRPZkV4cHI7IGluIGFueSBvdGhl ciBjYXNlLCB3ZQotCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkgaWYg ZW5hYmxlX3RpZHNjYW49dHJ1ZS4gQWxzbywKLQkJICogaWYgQ3VycmVudE9mRXhwciBpcyB0aGUg cXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgorCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGlu ZyBhIFRJRCBzY2FuIG9ubHkgaWYgVElEIHNjYW5zIGFyZSBhbGxvd2VkLgorCQkgKiBBbHNvLCBp ZiBDdXJyZW50T2ZFeHByIGlzIHRoZSBxdWFsLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUuCiAJ CSAqLwotCQlBc3NlcnQoZW5hYmxlX3RpZHNjYW4gfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIp KTsKKwkJQXNzZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwIHx8IElz QShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAJCUFzc2VydChsaXN0X2xlbmd0aCh0aWRxdWFscykg PT0gMSB8fCAhSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIpKTsKIAogCQlpZiAoSXNBKHF1YWwsIFNj YWxhckFycmF5T3BFeHByKSkKQEAgLTEzMTYsMTAgKzEzMzUsMTQgQEAgY29zdF90aWRzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiBUaGVyZSBhcmUgYXNzZXJ0 aW9ucyBhYm92ZSB2ZXJpZnlpbmcgdGhhdCB3ZSBvbmx5IHJlYWNoIHRoaXMgZnVuY3Rpb24KLQkg KiBlaXRoZXIgd2hlbiBlbmFibGVfdGlkc2Nhbj10cnVlIG9yIHdoZW4gdGhlIFRJRCBzY2FuIGlz IHRoZSBvbmx5IGxlZ2FsCi0JICogcGF0aCwgc28gaXQncyBzYWZlIHRvIHNldCBkaXNhYmxlZF9u b2RlcyB0byB6ZXJvIGhlcmUuCisJICogZWl0aGVyIHdoZW4gYmFzZXJlbC0+cGdzX21hc2sgaW5j bHVkZXMgUEdTX1RJRFNDQU4gb3Igd2hlbiB0aGUgVElEIHNjYW4KKwkgKiBpcyB0aGUgb25seSBs ZWdhbCBwYXRoLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29uc2lkZXIgdGhlIGVmZmVjdHMgb2YKKwkg KiBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJlLgogCSAqLwotCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJ CShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0 ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xMzQ5LDYgKzEzNzIsNyBAQCBjb3N0 X3RpZHJhbmdlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCW5z ZXFwYWdlczsKIAlkb3VibGUJCXNwY19yYW5kb21fcGFnZV9jb3N0OwogCWRvdWJsZQkJc3BjX3Nl cV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19USURTQ0FOOwogCiAJLyog U2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNl cmVsLT5yZWxpZCA+IDApOwpAQCAtMTQxMiw4ICsxNDM2LDE1IEBAIGNvc3RfdGlkcmFuZ2VzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+ Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0 ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVuYWJsZV90aWRzY2FuPWZhbHNlICovCi0JQXNzZXJ0KGVu YWJsZV90aWRzY2FuKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRo IHR5cGUgd2hlbiBQR1NfVElEU0NBTiBpcyB1bnNldCwgYnV0IHdlCisJICogbWlnaHQgbmVlZCB0 byBkaXNhYmxlIHRoaXMgcGF0aCBkdWUgdG8gUEdTX0NPTlNJREVSX05PTlBBUlRJQUwuCisJICov CisJQXNzZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwKTsKKwlpZiAo cGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3Nf bWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPmRpc2Fi bGVkX25vZGVzID0gMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwpAQCAtMTQzNyw2ICsxNDY4 LDcgQEAgY29zdF9zdWJxdWVyeXNjYW4oU3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJTGlzdAkgICAqcXBxdWFsczsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlD b3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hv dWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBzdWJxdWVyaWVz ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNDY3LDcgKzE0OTksMTAgQEAg Y29zdF9zdWJxdWVyeXNjYW4oU3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJv b3QsCiAJICogU3VicXVlcnlTY2FuIG5vZGUsIHBsdXMgY3B1X3R1cGxlX2Nvc3QgdG8gYWNjb3Vu dCBmb3Igc2VsZWN0aW9uIGFuZAogCSAqIHByb2plY3Rpb24gb3ZlcmhlYWQuCiAJICovCi0JcGF0 aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzOwor CWlmIChwYXRoLT5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0g UEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBh dGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzCisJCSsgKCgoYmFzZXJlbC0+cGdzX21hc2sgJiBl bmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spID8gMSA6IDApOwogCXBhdGgtPnBhdGguc3RhcnR1 cF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+c3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90YWxf Y29zdCA9IHBhdGgtPnN1YnBhdGgtPnRvdGFsX2Nvc3Q7CiAKQEAgLTE1MTgsNiArMTU1Myw3IEBA IGNvc3RfZnVuY3Rpb25zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VUYmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0 OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGll ZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE1NTgsNyArMTU5NCwxMCBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0 aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNv c3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsK KwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgt PnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1 cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNTgwLDYgKzE2MTksNyBAQCBjb3N0X3RhYmxlZnVu Y3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBs ZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7CiAJUXVhbENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQll bmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVs YXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDAp OwpAQCAtMTYxNSw3ICsxNjU1LDEwIEBAIGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29z dC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxl ICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVu X2Nvc3Q7CiB9CkBAIC0xNjM1LDYgKzE2NzgsNyBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFw cXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQg YXJlIHZhbHVlcyBsaXN0cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTY2 Myw3ICsxNzA3LDEwIEBAIGNvc3RfdmFsdWVzc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwog CXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93 czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBf Y29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBA IC0xNjg2LDYgKzE3MzMsNyBAQCBjb3N0X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNv c3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91 bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIENURXMgKi8KIAlB c3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE3MTEsNyArMTc1OSwxMCBAQCBjb3N0X2N0 ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBh dGgtPnBhdGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFy Z2V0LT5jb3N0LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9 IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTcyOCw2ICsxNzc5LDcgQEAgY29zdF9u YW1lZHR1cGxlc3RvcmVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1 cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBUdXBsZXN0b3JlcyAqLwogCUFzc2VydChi YXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTc0OSw3ICsxODAxLDEwIEBAIGNvc3RfbmFtZWR0dXBs ZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxl ICs9IGNwdV90dXBsZV9jb3N0ICsgcXBxdWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9 IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVsLT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9 IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTc2Niw2ICsxODIxLDcgQEAgY29zdF9y ZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0 ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBS VEVfUkVTVUxUIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7 CkBAIC0xNzg0LDcgKzE4NDAsMTAgQEAgY29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9j b3N0LnBlcl90dXBsZTsKIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVw bGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93 b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOwor CXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21h c2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0K QEAgLTE4MDIsNiArMTg2MSw3IEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwg UGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJ dG90YWxfY29zdDsKIAlkb3VibGUJCXRvdGFsX3Jvd3M7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBXZSBwcm9iYWJseSBoYXZlIGRlY2VudCBlc3RpbWF0ZXMgZm9yIHRoZSBub24t cmVjdXJzaXZlIHRlcm0gKi8KIAlzdGFydHVwX2Nvc3QgPSBucnRlcm0tPnN0YXJ0dXBfY29zdDsK QEAgLTE4MjQsNyArMTg4NCwxMCBAQCBjb3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24s IFBhdGggKm5ydGVybSwgUGF0aCAqcnRlcm0pCiAJICovCiAJdG90YWxfY29zdCArPSBjcHVfdHVw bGVfY29zdCAqIHRvdGFsX3Jvd3M7CiAKLQlydW5pb24tPmRpc2FibGVkX25vZGVzID0gbnJ0ZXJt LT5kaXNhYmxlZF9ub2RlcyArIHJ0ZXJtLT5kaXNhYmxlZF9ub2RlczsKKwlpZiAocnVuaW9uLT5w YXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05Q QVJUSUFMOworCXJ1bmlvbi0+ZGlzYWJsZWRfbm9kZXMgPQorCQkocnVuaW9uLT5wYXJlbnQtPnBn c19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcnVuaW9uLT5z dGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcnVuaW9uLT50b3RhbF9jb3N0ID0gdG90YWxf Y29zdDsKIAlydW5pb24tPnJvd3MgPSB0b3RhbF9yb3dzOwpAQCAtMjA5NCw3ICsyMTU3LDExIEBA IGNvc3RfaW5jcmVtZW50YWxfc29ydChQYXRoICpwYXRoLAogCiAJcGF0aC0+cm93cyA9IGlucHV0 X3R1cGxlczsKIAotCS8qIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFi bGVfaW5jcmVtZW50YWxfc29ydD1mYWxzZSAqLworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5l cmF0ZSB0aGVzZSBwYXRocyB3aGVuIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlLgorCSAq IFdlIGNhbiBpZ25vcmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBp dCdzIHJlbGV2YW50LAorCSAqIGl0IHdpbGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1 dCBwYXRoLgorCSAqLwogCUFzc2VydChlbmFibGVfaW5jcmVtZW50YWxfc29ydCk7CiAJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKIApAQCAtMjEzMiw2ICsyMTk5 LDEwIEBAIGNvc3Rfc29ydChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXN0YXJ0 dXBfY29zdCArPSBpbnB1dF9jb3N0OwogCisJLyoKKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05T SURFUl9OT05QQVJUSUFMIGhlcmUsIGJlY2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3 aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3RlZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlwYXRoLT5y b3dzID0gdHVwbGVzOwogCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9k ZXMgKyAoZW5hYmxlX3NvcnQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwpAQCAtMjIyMyw5ICsyMjk0LDE1IEBAIGFwcGVuZF9ub25wYXJ0aWFsX2Nvc3QoTGlz dCAqc3VicGF0aHMsIGludCBudW1wYXRocywgaW50IHBhcmFsbGVsX3dvcmtlcnMpCiB2b2lkCiBj b3N0X2FwcGVuZChBcHBlbmRQYXRoICphcGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CisJUmVs T3B0SW5mbyAqcmVsID0gYXBhdGgtPnBhdGgucGFyZW50OwogCUxpc3RDZWxsICAgKmw7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19BUFBFTkQ7CisKKwlpZiAoYXBhdGgtPnBhdGgucGFyYWxs ZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElB TDsKIAotCWFwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gMDsKKwlhcGF0aC0+cGF0aC5kaXNh YmxlZF9ub2RlcyA9CisJCShyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9t YXNrID8gMCA6IDE7CiAJYXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0 aC50b3RhbF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0aC5yb3dzID0gMDsKQEAgLTI0MzUsMTEgKzI1 MTIsMTYgQEAgY29zdF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAog CQkJCSAgZG91YmxlIHR1cGxlcykKIHsKKwlSZWxPcHRJbmZvICpyZWwgPSBwYXRoLT5wYXJlbnQ7 CiAJQ29zdAkJc3RhcnR1cF9jb3N0ID0gMDsKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJQ29zdAkJ Y29tcGFyaXNvbl9jb3N0OwogCWRvdWJsZQkJTjsKIAlkb3VibGUJCWxvZ047CisJdWludDY0CQll bmFibGVfbWFzayA9IFBHU19NRVJHRV9BUFBFTkQ7CisKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAog CS8qCiAJICogQXZvaWQgbG9nKDApLi4uCkBAIC0yNDYyLDcgKzI1NDQsOSBAQCBjb3N0X21lcmdl X2FwcGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlydW5fY29zdCAr PSBjcHVfdHVwbGVfY29zdCAqIEFQUEVORF9DUFVfQ09TVF9NVUxUSVBMSUVSICogdHVwbGVzOwog Ci0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKKwlwYXRoLT5k aXNhYmxlZF9ub2RlcyA9CisJCShyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJs ZV9tYXNrID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgKz0gaW5wdXRfZGlzYWJsZWRf bm9kZXM7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlu cHV0X3RvdGFsX2Nvc3Q7CiB9CkBAIC0yNDgxLDcgKzI1NjUsNyBAQCBjb3N0X21lcmdlX2FwcGVu ZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKICAqLwogdm9pZAogY29zdF9tYXRlcmlh bChQYXRoICpwYXRoLAotCQkJICBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkgIGJvb2wg ZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVkX25vZGVzLAogCQkJICBDb3N0IGlucHV0X3N0YXJ0 dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJICBkb3VibGUgdHVwbGVzLCBpbnQg d2lkdGgpCiB7CkBAIC0yNDkwLDYgKzI1NzQsMTEgQEAgY29zdF9tYXRlcmlhbChQYXRoICpwYXRo LAogCWRvdWJsZQkJbmJ5dGVzID0gcmVsYXRpb25fYnl0ZV9zaXplKHR1cGxlcywgd2lkdGgpOwog CWRvdWJsZQkJd29ya19tZW1fYnl0ZXMgPSB3b3JrX21lbSAqIChTaXplKSAxMDI0OwogCisJaWYg KHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCAmJgorCQlwYXRoLT5wYXJlbnQgIT0gTlVMTCAm JgorCQkocGF0aC0+cGFyZW50LT5wZ3NfbWFzayAmIFBHU19DT05TSURFUl9OT05QQVJUSUFMKSA9 PSAwKQorCQllbmFibGVkID0gZmFsc2U7CisKIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCiAJLyoK QEAgLTI1MTksNyArMjYwOCw3IEBAIGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAkJcnVuX2Nv c3QgKz0gc2VxX3BhZ2VfY29zdCAqIG5wYWdlczsKIAl9CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IGlucHV0X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZV9tYXRlcmlhbCA/IDAgOiAxKTsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZWQgPyAw IDogMSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTMyNzEsNyArMzM2MCw3IEBA IGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGlu aXRpYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2Ug KndvcmtzcGFjZSwKLQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJICBKb2luVHlwZSBq b2ludHlwZSwgdWludDY0IGVuYWJsZV9tYXNrLAogCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBh dGggKmlubmVyX3BhdGgsCiAJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewpAQCAt MzI4NSw3ICszMzc0LDcgQEAgaW5pdGlhbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290 LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCUNvc3QJCWlubmVyX3Jlc2Nhbl9ydW5f Y29zdDsKIAogCS8qIENvdW50IHVwIGRpc2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVz ID0gZW5hYmxlX25lc3Rsb29wID8gMCA6IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRf bm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0g b3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKQEAgLTM2ODUsNyArMzc3NCwxOSBAQCBpbml0 aWFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAq d29ya3NwYWNlLAogCUFzc2VydChvdXRlcnN0YXJ0c2VsIDw9IG91dGVyZW5kc2VsKTsKIAlBc3Nl cnQoaW5uZXJzdGFydHNlbCA8PSBpbm5lcmVuZHNlbCk7CiAKLQlkaXNhYmxlZF9ub2RlcyA9IGVu YWJsZV9tZXJnZWpvaW4gPyAwIDogMTsKKwkvKgorCSAqIFdlIGRvbid0IGRlY2lkZSB3aGV0aGVy IHRvIG1hdGVyaWFsaXplIHRoZSBpbm5lciBwYXRoIHVudGlsIHdlIGdldCB0bworCSAqIGZpbmFs X2Nvc3RfbWVyZ2Vqb2luKCksIHNvIHdlIGRvbid0IGtub3cgd2hldGhlciB0byBjaGVjayB0aGUg cGdzX21hc2sKKwkgKiBhZ2FpbiBQR1NfTUVSR0VKT0lOX1BMQUlOIG9yIFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkUuIEluc3RlYWQsIHdlCisJICoganVzdCBhY2NvdW50IGZvciBhbnkgY2hpbGQg bm9kZXMgaGVyZSBhbmQgYXNzdW1lIHRoYXQgdGhpcyBub2RlIGlzIG5vdAorCSAqIGl0c2xlZiBk aXNhYmxlZDsgd2UgY2FuIHNvcnQgb3V0IHRoZSBkZXRhaWxzIGluIGZpbmFsX2Nvc3RfbWVyZ2Vq b2luKCkuCisJICoKKwkgKiAoV2UgY291bGQgYmUgbW9yZSBwcmVjaXNlIGhlcmUgYnkgc2V0dGlu ZyBkaXNhYmxlZF9ub2RlcyB0byAxIGF0IHRoaXMKKwkgKiBzdGFnZSBpZiBib3RoIFBHU19NRVJH RUpPSU5fUExBSU4gYW5kIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUgYXJlCisJICogZGlzYWJs ZWQsIGJ1dCB0aGF0IHNlZW1zIHRvIGFnYWluc3QgdGhlIGlkZWEgb2YgbWFraW5nIHRoaXMgZnVu Y3Rpb24KKwkgKiBwcm9kdWNlIGEgcXVpY2ssIG9wdGltaXN0aWMgYXBwcm94aW1hdGlvbiBvZiB0 aGUgZmluYWwgY29zdC4pCisJICovCisJZGlzYWJsZWRfbm9kZXMgPSAwOwogCiAJLyogY29zdCBv ZiBzb3VyY2UgZGF0YSAqLwogCkBAIC0zODY0LDkgKzM5NjUsNyBAQCBmaW5hbF9jb3N0X21lcmdl am9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCWRvdWJsZQkJbWVyZ2Vq b2ludHVwbGVzLAogCQkJCXJlc2Nhbm5lZHR1cGxlczsKIAlkb3VibGUJCXJlc2NhbnJhdGlvOwot Ci0JLyogU2V0IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMuICovCi0JcGF0aC0+anBhdGgu cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlzYWJsZWRfbm9kZXM7CisJdWludDY0 CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBQcm90ZWN0IHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cg dGhhdCByb3djb3VudHMgYXJlbid0IHplcm8gKi8KIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDAp CkBAIC0zOTk2LDE2ICs0MDk1LDIwIEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZv ICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFs c2U7CiAKIAkvKgotCSAqIFByZWZlciBtYXRlcmlhbGl6aW5nIGlmIGl0IGxvb2tzIGNoZWFwZXIs IHVubGVzcyB0aGUgdXNlciBoYXMgYXNrZWQgdG8KLQkgKiBzdXBwcmVzcyBtYXRlcmlhbGl6YXRp b24uCisJICogSWYgbWVyZ2Ugam9pbnMgd2l0aCBtYXRlcmlhbGl6YXRpb24gYXJlIGVuYWJsZWQs IHRoZW4gY2hvb3NlCisJICogbWF0ZXJpYWxpemF0aW9uIGlmIGVpdGhlciAoYSkgaXQgbG9va3Mg Y2hlYXBlciBvciAoYikgbWVyZ2Ugam9pbnMKKwkgKiB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBh cmUgZGlzYWJsZWQuCiAJICovCi0JZWxzZSBpZiAoZW5hYmxlX21hdGVyaWFsICYmIG1hdF9pbm5l cl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0KQorCWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQ R1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCQkgKG1hdF9pbm5lcl9jb3N0IDwg YmFyZV9pbm5lcl9jb3N0IHx8CisJCQkgIChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lO X1BMQUlOKSA9PSAwKSkKIAkJcGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSB0cnVlOwogCiAJLyoK LQkgKiBFdmVuIGlmIG1hdGVyaWFsaXppbmcgZG9lc24ndCBsb29rIGNoZWFwZXIsIHdlICptdXN0 KiBkbyBpdCBpZiB0aGUKLQkgKiBpbm5lciBwYXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkgKHdp dGhvdXQgc29ydGluZykgYW5kIGl0IGRvZXNuJ3QKLQkgKiBzdXBwb3J0IG1hcmsvcmVzdG9yZS4K KwkgKiBSZWdhcmRsZXNzIG9mIHdoYXQgcGxhbiBzaGFwZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQg dGhlIGNvc3RzIHNlZW0gdG8KKwkgKiBiZSwgd2UgKm11c3QqIG1hdGVyaWFsaXplIGl0IGlmIHRo ZSBpbm5lciBwYXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkKKwkgKiAod2l0aG91dCBzb3J0aW5n KSBhbmQgaXQgZG9lc24ndCBzdXBwb3J0IG1hcmsvcmVzdG9yZS4gUGxhbm5lciBmYWlsdXJlCisJ ICogaXMgbm90IGFuIG9wdGlvbiEKIAkgKgogCSAqIFNpbmNlIHRoZSBpbm5lciBzaWRlIG11c3Qg YmUgb3JkZXJlZCwgYW5kIG9ubHkgU29ydHMgYW5kIEluZGV4U2NhbnMgY2FuCiAJICogY3JlYXRl IG9yZGVyIHRvIGJlZ2luIHdpdGgsIGFuZCB0aGV5IGJvdGggc3VwcG9ydCBtYXJrL3Jlc3RvcmUs IHlvdQpAQCAtNDAxMywxMCArNDExNiw2IEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJ bmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICogbWVyZ2Ugam9pbnMgY2FuICpwcmVzZXJ2 ZSogdGhlIG9yZGVyIG9mIHRoZWlyIGlucHV0cywgc28gdGhleSBjYW4gYmUKIAkgKiBzZWxlY3Rl ZCBhcyB0aGUgaW5wdXQgb2YgYSBtZXJnZWpvaW4sIGFuZCB0aGV5IGRvbid0IHN1cHBvcnQKIAkg KiBtYXJrL3Jlc3RvcmUgYXQgcHJlc2VudC4KLQkgKgotCSAqIFdlIGRvbid0IHRlc3QgdGhlIHZh bHVlIG9mIGVuYWJsZV9tYXRlcmlhbCBoZXJlLCBiZWNhdXNlCi0JICogbWF0ZXJpYWxpemF0aW9u IGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcyBpbiB0aGlzIGNhc2UsIGFuZCB0dXJuaW5nCi0J ICogaXQgb2ZmIGRvZXMgbm90IGVudGl0bGUgdXMgdG8gZGVsaXZlciBhbiBpbnZhbGlkIHBsYW4u CiAJICovCiAJZWxzZSBpZiAoaW5uZXJzb3J0a2V5cyA9PSBOSUwgJiYKIAkJCSAhRXhlY1N1cHBv cnRzTWFya1Jlc3RvcmUoaW5uZXJfcGF0aCkpCkBAIC00MDMwLDEwICs0MTI5LDExIEBAIGZpbmFs X2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICog dGhvdWdoLgogCSAqCiAJICogU2luY2UgbWF0ZXJpYWxpemF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ug b3B0aW1pemF0aW9uIGluIHRoaXMgY2FzZSwKLQkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9y IGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlmIGVuYWJsZV9tYXRlcmlhbCBpcwotCSAqIG9mZi4K KwkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlm IG1hdGVyaWFsaXphdGlvbiBpcworCSAqIHN3aXRjaGVkIG9mZi4KIAkgKi8KLQllbHNlIGlmIChl bmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJzb3J0a2V5cyAhPSBOSUwgJiYKKwllbHNlIGlmICgoZXh0 cmEtPnBnc19tYXNrICYgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIGlu bmVyc29ydGtleXMgIT0gTklMICYmCiAJCQkgcmVsYXRpb25fYnl0ZV9zaXplKGlubmVyX3BhdGhf cm93cywKIAkJCQkJCQkJaW5uZXJfcGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpID4KIAkJCSB3b3Jr X21lbSAqIChTaXplKSAxMDI0KQpAQCAtNDA0MSwxMSArNDE0MSwyOSBAQCBmaW5hbF9jb3N0X21l cmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VQYXRoICpwYXRoLAogCWVsc2UKIAkJcGF0 aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSBmYWxzZTsKIAotCS8qIENoYXJnZSB0aGUgcmlnaHQgaW5j cmVtZW50YWwgY29zdCBmb3IgdGhlIGNob3NlbiBjYXNlICovCisJLyogR2V0IHRoZSBudW1iZXIg b2YgZGlzYWJsZWQgbm9kZXMsIG5vdCB5ZXQgaW5jbHVkaW5nIHRoaXMgb25lLiAqLworCXBhdGgt PmpwYXRoLnBhdGguZGlzYWJsZWRfbm9kZXMgPSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOwor CisJLyoKKwkgKiBDaGFyZ2UgdGhlIHJpZ2h0IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9z ZW4gY2FzZSwgYW5kIHVwZGF0ZQorCSAqIGVuYWJsZV9tYXNrIGFzIGFwcHJvcHJpYXRlLgorCSAq LwogCWlmIChwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lcikKKwl7CiAJCXJ1bl9jb3N0ICs9IG1hdF9p bm5lcl9jb3N0OworCQllbmFibGVfbWFzayB8PSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOwor CX0KIAllbHNlCisJewogCQlydW5fY29zdCArPSBiYXJlX2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9t YXNrIHw9IFBHU19NRVJHRUpPSU5fUExBSU47CisJfQorCisJLyogSW5jcmVtZW50YWwgY291bnQg b2YgZGlzYWJsZWQgbm9kZXMgaWYgdGhpcyBub2RlIGlzIGRpc2FibGVkLiAqLworCWlmIChwYXRo LT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFz aykgIT0gZW5hYmxlX21hc2spCisJCSsrcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlczsK IAogCS8qIENQVSBjb3N0cyAqLwogCkBAIC00MTgzLDkgKzQzMDEsMTMgQEAgaW5pdGlhbF9jb3N0 X2hhc2hqb2luKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNl LAogCWludAkJCW51bWJhdGNoZXM7CiAJaW50CQkJbnVtX3NrZXdfbWN2czsKIAlzaXplX3QJCXNw YWNlX2FsbG93ZWQ7CS8qIHVudXNlZCAqLworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfSEFT SEpPSU47CisKKwlpZiAob3V0ZXJfcGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAogCS8qIENvdW50IHVwIGRpc2Fi bGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVzID0gZW5hYmxlX2hhc2hqb2luID8gMCA6IDE7 CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVu YWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJs ZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IGVkYzZkMmFjMWQzLi5h NzAxYzg0N2NiNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0yMjMz LDggKzIyMzMsOCBAQCBjaGVja19pbmRleF9vbmx5KFJlbE9wdEluZm8gKnJlbCwgSW5kZXhPcHRJ bmZvICppbmRleCkKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOwogCi0JLyogSW5kZXgtb25s eSBzY2FucyBtdXN0IGJlIGVuYWJsZWQgKi8KLQlpZiAoIWVuYWJsZV9pbmRleG9ubHlzY2FuKQor CS8qIElmIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGdp dmUgdXAgbm93ICovCisJaWYgKChyZWwtPnBnc19tYXNrICYgUEdTX0NPTlNJREVSX0lOREVYT05M WSkgPT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9q b2lucGF0aC5jCmluZGV4IGVhNWI2NDE1MTg2Li4zODhkODQ1NmZmNiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0yOSw4ICsyOSw5IEBACiAjaW5jbHVkZSAidXRpbHMv bHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIAotLyogSG9vayBmb3Ig cGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCisvKiBI b29rcyBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgp ICovCiBzZXRfam9pbl9wYXRobGlzdF9ob29rX3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9 IE5VTEw7Citqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29rID0g TlVMTDsKIAogLyoKICAqIFBhdGhzIHBhcmFtZXRlcml6ZWQgYnkgYSBwYXJlbnQgcmVsIGNhbiBi ZSBjb25zaWRlcmVkIHRvIGJlIHBhcmFtZXRlcml6ZWQKQEAgLTE1MSw2ICsxNTIsNyBAQCBhZGRf cGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAlleHRyYS5tZXJnZWNsYXVzZV9s aXN0ID0gTklMOwogCWV4dHJhLnNqaW5mbyA9IHNqaW5mbzsKIAlleHRyYS5wYXJhbV9zb3VyY2Vf cmVscyA9IE5VTEw7CisJZXh0cmEucGdzX21hc2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKIAogCS8q CiAJICogU2VlIGlmIHRoZSBpbm5lciByZWxhdGlvbiBpcyBwcm92YWJseSB1bmlxdWUgZm9yIHRo aXMgb3V0ZXIgcmVsLgpAQCAtMjA3LDEzICsyMDksMzggQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwo UGxhbm5lckluZm8gKnJvb3QsCiAJaWYgKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8 IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lOTkVSKQogCQlqb2ludHlwZSA9IEpPSU5fSU5ORVI7 CiAKKwkvKgorCSAqIEdpdmUgZXh0ZW5zaW9ucyBhIGNoYW5jZSB0byB0YWtlIGNvbnRyb2wuIElu IHBhcnRpY3VsYXIsIGFuIGV4dGVuc2lvbgorCSAqIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGV4dHJh LnBnc19tYXNrLiBJdCdzIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHBnc19tYXNrCisJICogb24gYSBx dWVyeS13aWRlIGJhc2lzIHVzaW5nIGpvaW5fc2VhcmNoX2hvb2ssIG9yIGZvciBhIHBhcnRpY3Vs YXIKKwkgKiByZWxhdGlvbiB1c2luZyBqb2lucmVsX3NldHVwX2hvb2ssIGJ1dCBleHRlbnNpb25z IHRoYXQgd2FudCB0byBwcm92aWRlCisJICogZGlmZmVyZW50IGFkdmljZSBmb3IgdGhlIHNhbWUg am9pbnJlbCBiYXNlZCBvbiB0aGUgY2hvaWNlIG9mIGlubmVycmVsCisJICogYW5kIG91dGVycmVs IHdpbGwgbmVlZCB0byB1c2UgdGhpcyBob29rLgorCSAqCisJICogQSB2ZXJ5IHNpbXBsZSB3YXkg Zm9yIGFuIGV4dGVuc2lvbiB0byB1c2UgdGhpcyBob29rIGlzIHRvIHNldAorCSAqIGV4dHJhLnBn c19tYXNrID0gMCwgaWYgaXQgc2ltcGx5IGRvZXNuJ3Qgd2FudCBhbnkgb2YgdGhlIHBhdGhzCisJ ICogZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbCB0byBhZGRfcGF0aHNfdG9fam9pbnJlbCgpIHRvIGJl IHNlbGVjdGVkLiBBbgorCSAqIGV4dGVuc2lvbiBjb3VsZCB1c2UgdGhpcyB0ZWNobmlxdWUgdG8g Y29uc3RyYWluIHRoZSBqb2luIG9yZGVyLCBzaW5jZQorCSAqIGl0IGNvdWxkIHRoZXJlYnkgYXJy YW5nZSB0byByZWplY3QgYWxsIHBhdGhzIGZyb20gam9pbiBvcmRlcnMgdGhhdCBpdAorCSAqIGRv ZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBzZWxlY3RpdmVseSBjbGVhciBiaXRz IGZyb20KKwkgKiBleHRyYS5wZ3NfbWFzayB0byBydWxlIG91dCBzcGVjaWZpYyB0ZWNobmlxdWVz IGZvciBzcGVjaWZpYyBqb2lucywgb3IKKwkgKiBldmVuIHJlcGxhY2UgdGhlIG1hc2sgZW50aXJl bHkuCisJICoKKwkgKiBOQjogQmVsb3cgdGhpcyBwb2ludCwgdGhpcyBmdW5jdGlvbiBzaG91bGQg YmUgY2FyZWZ1bCB0byByZWZlcmVuY2UKKwkgKiBleHRyYS5wZ3NfbWFzayByYXRoZXIgdGhhbiBy ZWwtPnBnc19tYXNrIHRvIGF2b2lkIGRpc3JlZ2FyZGluZyBhbnkKKwkgKiBjaGFuZ2VzIG1hZGUg YnkgdGhlIGhvb2sgd2UncmUgYWJvdXQgdG8gY2FsbC4KKwkgKi8KKwlpZiAoam9pbl9wYXRoX3Nl dHVwX2hvb2spCisJCWpvaW5fcGF0aF9zZXR1cF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVs LCBpbm5lcnJlbCwKKwkJCQkJCQkgam9pbnR5cGUsICZleHRyYSk7CisKIAkvKgogCSAqIEZpbmQg cG90ZW50aWFsIG1lcmdlam9pbiBjbGF1c2VzLiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUg bm90CiAJICogaW50ZXJlc3RlZCBpbiBkb2luZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdl am9pbiBtYXkgYmUgb3VyIG9ubHkKLQkgKiB3YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRl ciBqb2luLCBzbyBvdmVycmlkZSBlbmFibGVfbWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwg am9pbi4KKwkgKiB3YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0 aGF0IGNhc2Ugd2UgZG9uJ3QgY2FyZQorCSAqIHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJs ZWQuCiAJICovCi0JaWYgKGVuYWJsZV9tZXJnZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxM KQorCWlmICgoZXh0cmEucGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2lu dHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWV4dHJhLm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVy Z2Vqb2luX2NsYXVzZXMocm9vdCwKIAkJCQkJCQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJ CQkJCQkgIG91dGVycmVsLApAQCAtMzIxLDEwICszNDgsMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5y ZWwoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkvKgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJl IGJvdGggb3V0ZXIgYW5kIGlubmVyIHJlbGF0aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9y ZSBiZWluZyBqb2luZWQuICBBcyBhYm92ZSwgZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3Ig ZnVsbAotCSAqIGpvaW5zLCBiZWNhdXNlIHRoZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2 ZS4KKwkgKiBiZWZvcmUgYmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwg am9pbiwgd2UgbXVzdCB0cnkgdGhpcworCSAqIGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRp c2FibGVkLCBiZWNhdXNlIGl0IG1heSBiZSBvdXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVu YWJsZV9oYXNoam9pbiB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3Nf bWFzayAmIFBHU19IQVNISk9JTikgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhh c2hfaW5uZXJfYW5kX291dGVyKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJ CQkJCQkgam9pbnR5cGUsICZleHRyYSk7CiAKQEAgLTMzMyw3ICszNjAsNyBAQCBhZGRfcGF0aHNf dG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5k IGFzc2lnbmVkIHRvIHRoZSBzYW1lIHVzZXIgdG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lv bnMgYXMsIGdpdmUgdGhlIEZEVyBhIGNoYW5jZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0J aWYgKGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZP UkVJR05KT0lOKSAhPSAwICYmIGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3 cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRocykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0 Rm9yZWlnbkpvaW5QYXRocyhyb290LCBqb2lucmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBp bm5lcnJlbCwKQEAgLTM0Miw4ICszNjksMTMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5l ckluZm8gKnJvb3QsCiAJLyoKIAkgKiA2LiBGaW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFu Y2UgdG8gbWFuaXB1bGF0ZSB0aGUgcGF0aCBsaXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcg cGF0aHMgKHN1Y2ggYXMgQ3VzdG9tUGF0aHMpIGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkg KiBhZGRfcGFydGlhbF9wYXRoKCkgaWYgcGFyYWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28g ZGVsZXRlIG9yIG1vZGlmeQotCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICog YWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBhcmFsbGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5 LCBleHRlbnNpb25zIGNvdWxkIGFsc28gdXNlIHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5 CisJICogcGF0aHMgYWRkZWQgYnkgdGhlIGNvcmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMg aXMgZGlmZmljdWx0IHRvIG1ha2UKKwkgKiB3b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdl dCBiYWNrIGFueSBwYXRocyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5 IGFkZF9wYXRoKCkgb3IgYWRkX3BhcnRpYWxfcGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJ ICogc3VwcHJlc3MgcGF0aHMsIGNvbnNpZGVyIHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGlu c3RlYWQuCiAJICovCiAJaWYgKHNldF9qb2luX3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3Bh dGhsaXN0X2hvb2socm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjkwLDcg KzcyMiw3IEBAIGdldF9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmlubmVycmVsLAogCUxpc3QJICAgKnBoX2xhdGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBu b3QgaWYgaXQncyBkaXNhYmxlZCAqLwotCWlmICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRy YS0+cGdzX21hc2sgJiBQR1NfTkVTVExPT1BfTUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7 CiAKIAkvKgpAQCAtODQ1LDYgKzg3Nyw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZv ICpyb290LAogCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAog CQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwK IAkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291 dGVyOwpAQCAtOTI3LDYgKzk2MCw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCSAqIG1ldGhvZG9sb2d5IHdvcnRod2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25l c3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0 eXBlIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVy X3BhdGgsIGV4dHJhKTsKIAogCWlmIChhZGRfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3Bh Y2UuZGlzYWJsZWRfbm9kZXMsCkBAIC05NjQsNiArOTk4LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxv b3BfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJ CQkJCSAgTGlzdCAqcGF0aGtleXMsCiAJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJ ICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4 dHJhKQogewogCUpvaW5Db3N0V29ya3NwYWNlIHdvcmtzcGFjZTsKQEAgLTEwMTEsNyArMTA0Niw3 IEBAIHRyeV9wYXJ0aWFsX25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVm b3JlIGNyZWF0aW5nIGEgcGF0aCwgZ2V0IGEgcXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBp cyBsaWtlbHkgdG8KIAkgKiBjb3N0LiAgQmFpbCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0 ZXJyaWJsZS4KIAkgKi8KLQlpbml0aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwg am9pbnR5cGUsCisJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50 eXBlLCBuZXN0bG9vcF9zdWJ0eXBlLAogCQkJCQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBl eHRyYSk7CiAJaWYgKCFhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFj ZS5kaXNhYmxlZF9ub2RlcywKIAkJCQkJCQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhr ZXlzKSkKQEAgLTE4NTksMTQgKzE4OTQsMTQgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5l ckluZm8gKnJvb3QsCiAJaWYgKG5lc3Rqb2luT0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBt YXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxl X21hdGVyaWFsIGlzIG9mZiBvciB0aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRz Ci0JCSAqIG91dHB1dCBhbnl3YXkuCisJCSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNo ZWFwZXN0IGlubmVyIHBhdGgsIHVubGVzcyB0aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBw YXRoIGluIHF1ZXN0aW9uIG1hdGVyaWFsaXplcyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0J CWlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgor CQlpZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAm JgorCQkJaW5uZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6 ZXNPdXRwdXQoaW5uZXJfY2hlYXBlc3RfdG90YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAo UGF0aCAqKQotCQkJCWNyZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVz dF90b3RhbCk7CisJCQkJY3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFw ZXN0X3RvdGFsLCB0cnVlKTsKIAl9CiAKIAlmb3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0 KQpAQCAtMTkwOSw2ICsxOTQ0LDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkJCSAgaW5uZXJwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAog CQkJCQkJCQkgIGpvaW50eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJ CQkJICBleHRyYSk7CiAKIAkJCQkvKgpAQCAtMTkyNSw2ICsxOTYxLDcgQEAgbWF0Y2hfdW5zb3J0 ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJ ICBtZXJnZV9wYXRoa2V5cywKIAkJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19O RVNUTE9PUF9NRU1PSVpFLAogCQkJCQkJCQkJICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzYsNiAr MTk3Myw3IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkgIG1hdHBhdGgsCiAJCQkJCQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5 cGUsCisJCQkJCQkJCSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJh KTsKIAkJfQogCkBAIC0yMDUyLDE2ICsyMDkwLDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rs b29wKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5n IHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFs IGlzIG9mZiwgMikgdGhlIGNoZWFwZXN0IGlubmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxp emF0aW9uIGlzIGRpc2FibGVkIGhlcmUsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5v dAogCSAqIHBhcmFsbGVsLXNhZmUsIDMpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFt ZXRlcml6ZWQgYnkgdGhlIG91dGVyCiAJICogcmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIg cGF0aCBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9t YXRlcmlhbCAmJiBpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgo ZXh0cmEtPnBnc19tYXNrICYgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlu bmVyX2NoZWFwZXN0X3RvdGFsLT5wYXJhbGxlbF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JF TChpbm5lcl9jaGVhcGVzdF90b3RhbCwgb3V0ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVz T3V0cHV0KGlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0g KFBhdGggKikKLQkJCWNyZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVz dF90b3RhbCk7CisJCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBl c3RfdG90YWwsIHRydWUpOwogCQlBc3NlcnQobWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQog CkBAIC0yMDkxLDcgKzIxMzAsOCBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQljb250aW51ZTsKIAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0 aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgsIGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtl eXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJ CQkJCQkJCSAgUEdTX05FU1RMT09QX1BMQUlOLCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkg Z2VuZXJhdGluZyBhIG1lbW9pemUgcGF0aCBhbmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3Rl ZApAQCAtMjEwMiwxMyArMjE0MiwxNSBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBleHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkK IAkJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwg bXBhdGgsCi0JCQkJCQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJ CQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpF LCBleHRyYSk7CiAJCX0KIAogCQkvKiBBbHNvIGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9m IHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoICovCiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0 cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0 aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBh dGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBl eHRyYSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90 aWRwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggMmJm YjMzOGI4MWMuLjYzOWEwZDNjYWRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC90aWRwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5j CkBAIC01MDAsMTggKzUwMCwxOSBAQCBjcmVhdGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCUxpc3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRp ZHJhbmdlcXVhbHM7CiAJYm9vbAkJaXNDdXJyZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwt PnBnc19tYXNrICYgUEdTX1RJRFNDQU4pICE9IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJs ZSBxdWFscyBleGlzdCBpbiB0aGUgcmVsJ3MgYmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEK IAkgKiBwbGFpbiAodW5wYXJhbWV0ZXJpemVkKSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAq IFdlIHNraXAgdGhpcyB3aGVuIGVuYWJsZV90aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRo ZSBxdWFsIGlzCisJICogV2Ugc2tpcCB0aGlzIHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwg ZXhjZXB0IHdoZW4gdGhlIHF1YWwgaXMKIAkgKiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2Us IGEgVElEIHNjYW4gaXMgdGhlIG9ubHkgY29ycmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0g VGlkUXVhbEZyb21SZXN0cmljdEluZm9MaXN0KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywg cmVsLAogCQkJCQkJCQkJCSAgICZpc0N1cnJlbnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklM ICYmIChlbmFibGVfdGlkc2NhbiB8fCBpc0N1cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5J TCAmJiAoZW5hYmxlZCB8fCBpc0N1cnJlbnRPZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGgg dXNlcyBubyBqb2luIGNsYXVzZXMsIGJ1dCBpdCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBA IC01MzMsNyArNTM0LDcgQEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCkKIAl9CiAKIAkvKiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBh cmUgZGlzYWJsZWQuICovCi0JaWYgKCFlbmFibGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJ CXJldHVybiBmYWxzZTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKaW5kZXggODhiNGM1OTAxYjAuLmY0N2Y5YWFiNDdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vY3JlYXRlcGxhbi5jCkBAIC02NTI2LDYgKzY1MjYsNyBAQCBtYXRlcmlhbGl6ZV9maW5p c2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiAKIAkvKiBTZXQgY29zdCBkYXRhICovCiAJY29zdF9t YXRlcmlhbCgmbWF0cGF0aCwKKwkJCQkgIGVuYWJsZV9tYXRlcmlhbCwKIAkJCQkgIHN1YnBsYW4t PmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3VicGxhbi0+c3RhcnR1cF9jb3N0LAogCQkJCSAgc3Vi cGxhbi0+dG90YWxfY29zdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA4 YjFhYjg0N2YzOS4uZTI2ODNiMjQ4MWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKQEAgLTQ2Miw2ICs0NjIsNTMgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJCXR1cGxlX2ZyYWN0 aW9uID0gMC4wOwogCX0KIAorCS8qCisJICogQ29tcHV0ZSB0aGUgaW5pdGlhbCBwYXRoIGdlbmVy YXRpb24gc3RyYXRlZ3kgbWFzay4KKwkgKgorCSAqIFNvbWUgc3RyYXRlZ2llcywgc3VjaCBhcyBQ R1NfRk9SRUlHTkpPSU4sIGhhdmUgbm8gY29ycmVzcG9uZGluZyBlbmFibGVfKgorCSAqIEdVQywg YW5kIHNvIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgYXJlIGFsd2F5cyBzZXQgaW4gdGhlIGRlZmF1 bHQKKwkgKiBzdHJhdGVneSBtYXNrLgorCSAqCisJICogSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0 aGF0IGVuYWJsZV9pbmRleHNjYW4gc2V0cyBib3RoIFBHU19JTkRFWFNDQU4KKwkgKiBhbmQgUEdT X0lOREVYT05MWVNDQU4uIEhvd2V2ZXIsIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIHRoaXMg R1VDCisJICogY29ycmVzcG9uZHMgdG8gdGhpcyBleGFjdGx5OiBlbmFibGVfaW5kZXhzY2FuPW9m ZiBkaXNhYmxlcyBib3RoCisJICogaW5kZXgtc2NhbiBhbmQgaW5kZXgtb25seSBzY2FuIHBhdGhz LCB3aGVyZWFzIGVuYWJsZV9pbmRleG9ubHlzY2FuPW9mZgorCSAqIGNvbnZlcnRzIHRoZSBpbmRl eC1vbmx5IHNjYW4gcGF0aHMgdGhhdCB3ZSB3b3VsZCBoYXZlIGNvbnNpZGVyZWQgaW50bworCSAq IGluZGV4IHNjYW4gcGF0aHMuCisJICovCisJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayA9IFBHU19B UFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EIHwgUEdTX0ZPUkVJR05KT0lOIHwKKwkJUEdTX0dBVEhF UiB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCWlmIChlbmFibGVfdGlkc2NhbikKKwkJZ2xv Yi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfVElEU0NBTjsKKwlpZiAoZW5hYmxlX3NlcXNjYW4p CisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX1NFUVNDQU47CisJaWYgKGVuYWJsZV9p bmRleHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0lOREVYU0NBTiB8IFBH U19JTkRFWE9OTFlTQ0FOOworCWlmIChlbmFibGVfaW5kZXhvbmx5c2NhbikKKwkJZ2xvYi0+ZGVm YXVsdF9wZ3NfbWFzayB8PSBQR1NfQ09OU0lERVJfSU5ERVhPTkxZOworCWlmIChlbmFibGVfYml0 bWFwc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfQklUTUFQU0NBTjsKKwlp ZiAoZW5hYmxlX21lcmdlam9pbikKKwl7CisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdT X01FUkdFSk9JTl9QTEFJTjsKKwkJaWYgKGVuYWJsZV9tYXRlcmlhbCkKKwkJCWdsb2ItPmRlZmF1 bHRfcGdzX21hc2sgfD0gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwl9CisJaWYgKGVuYWJs ZV9uZXN0bG9vcCkKKwl7CisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09Q X1BMQUlOOworCQlpZiAoZW5hYmxlX21hdGVyaWFsKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFz ayB8PSBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkU7CisJCWlmIChlbmFibGVfbWVtb2l6ZSkKKwkJ CWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX01FTU9JWkU7CisJfQorCWlm IChlbmFibGVfaGFzaGpvaW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0hBU0hK T0lOOworCWlmIChlbmFibGVfZ2F0aGVybWVyZ2UpCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sg fD0gUEdTX0dBVEhFUl9NRVJHRTsKKwlpZiAoZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikKKwkJ Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRTsKKwog CS8qIEFsbG93IHBsdWdpbnMgdG8gdGFrZSBjb250cm9sIGFmdGVyIHdlJ3ZlIGluaXRpYWxpemVk ICJnbG9iIiAqLwogCWlmIChwbGFubmVyX3NldHVwX2hvb2spCiAJCSgqcGxhbm5lcl9zZXR1cF9o b29rKSAoZ2xvYiwgcGFyc2UsIHF1ZXJ5X3N0cmluZywgJnR1cGxlX2ZyYWN0aW9uLCBlcyk7CkBA IC0zOTU0LDYgKzQwMDEsOSBAQCBtYWtlX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQlpc19wYXJhbGxlbF9zYWZlKHJvb3QsIChOb2RlICop IGhhdmluZ1F1YWwpKQogCQlncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwog CisJLyogQXNzdW1lIHRoYXQgdGhlIHNhbWUgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJl IGFsbG93ZWQgKi8KKwlncm91cGVkX3JlbC0+cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBnc19tYXNr OworCiAJLyoKIAkgKiBJZiB0aGUgaW5wdXQgcmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUgRkRXLCBz byBkb2VzIHRoZSBncm91cGVkIHJlbC4KIAkgKi8KQEAgLTUzNDgsNiArNTM5OCw5IEBAIGNyZWF0 ZV9vcmRlcmVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCWlmIChpbnB1dF9yZWwtPmNvbnNp ZGVyX3BhcmFsbGVsICYmIHRhcmdldF9wYXJhbGxlbF9zYWZlKQogCQlvcmRlcmVkX3JlbC0+Y29u c2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJLyogQXNzdW1lIHRoYXQgdGhlIHNhbWUgcGF0aCBn ZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJlIGFsbG93ZWQuICovCisJb3JkZXJlZF9yZWwtPnBnc19t YXNrID0gaW5wdXRfcmVsLT5wZ3NfbWFzazsKKwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBi ZWxvbmdzIHRvIGEgc2luZ2xlIEZEVywgc28gZG9lcyB0aGUgb3JkZXJlZF9yZWwuCiAJICovCkBA IC03NDI4LDYgKzc0ODEsNyBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJZ3JvdXBlZF9yZWwtPnJlbGlkcyk7CiAJcGFydGlhbGx5 X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9CiAJCWdyb3VwZWRfcmVsLT5jb25zaWRl cl9wYXJhbGxlbDsKKwlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBnc19tYXNrID0gZ3JvdXBlZF9y ZWwtPnBnc19tYXNrOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdyb3Vw ZWRfcmVsLT5yZWxvcHRraW5kOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+c2VydmVyaWQgPSBn cm91cGVkX3JlbC0+c2VydmVyaWQ7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT51c2VyaWQgPSBn cm91cGVkX3JlbC0+dXNlcmlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5k ZXggYzBhOTgxMWIxMzAuLmViNTdmMDUzOGJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bh dGhub2RlLmMKQEAgLTE2NTgsNyArMTY1OCw3IEBAIGNyZWF0ZV9ncm91cF9yZXN1bHRfcGF0aChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICoJICBwYXRobm9kZS4KICAqLwog TWF0ZXJpYWxQYXRoICoKLWNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0 aCAqc3VicGF0aCkKK2NyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAq c3VicGF0aCwgYm9vbCBlbmFibGVkKQogewogCU1hdGVyaWFsUGF0aCAqcGF0aG5vZGUgPSBtYWtl Tm9kZShNYXRlcmlhbFBhdGgpOwogCkBAIC0xNjc3LDYgKzE2NzcsNyBAQCBjcmVhdGVfbWF0ZXJp YWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgpCiAJcGF0aG5vZGUtPnN1YnBh dGggPSBzdWJwYXRoOwogCiAJY29zdF9tYXRlcmlhbCgmcGF0aG5vZGUtPnBhdGgsCisJCQkJICBl bmFibGVkLAogCQkJCSAgc3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJICBzdWJwYXRoLT5z dGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwYXRoLT50b3RhbF9jb3N0LApAQCAtMTcyOSw4ICsxNzMw LDE1IEBAIGNyZWF0ZV9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwgUGF0aCAqc3VicGF0aCwKIAlwYXRobm9kZS0+ZXN0X3VuaXF1ZV9rZXlzID0gMC4wOwog CXBhdGhub2RlLT5lc3RfaGl0X3JhdGlvID0gMC4wOwogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5l cmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVuYWJsZV9tZW1vaXplPWZhbHNlICovCi0JQXNzZXJ0 KGVuYWJsZV9tZW1vaXplKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgYmUgYXNrZWQgdG8gZ2Vu ZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBtZW1vaXphdGlvbiBpcworCSAqIGRpc2FibGVkLCBz byBzZXQgb3VyIGNvdW50IG9mIGRpc2FibGVkIG5vZGVzIGVxdWFsIHRvIHRoZSBzdWJwYXRoJ3MK KwkgKiBjb3VudC4KKwkgKgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gYWxzbyBBc3NlcnQgdGhh dCBtZW1vaXphdGlvbiBpcyBlbmFibGVkLCBidXQgdGhlCisJICogdmFsdWUgb2YgZW5hYmxlX21l bW9pemUgaXMgbm90IGNvbnRyb2xsaW5nOiB3aGF0IHdlIHdvdWxkIG5lZWQgdG8gY2hlY2sKKwkg KiBpcyB0aGF0IHRoZSBKb2luUGF0aEV4dHJhRGF0YSdzIHBnc19tYXNrIGluY2x1ZGVkIFBHU19O RVNUTE9PUF9NRU1PSVpFLgorCSAqLwogCXBhdGhub2RlLT5wYXRoLmRpc2FibGVkX25vZGVzID0g c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKIAkvKgpAQCAtMzk2NCwxMyArMzk3MiwxNiBAQCBy ZXBhcmFtZXRlcml6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpwYXRoLAogCQkJewog CQkJCU1hdGVyaWFsUGF0aCAqbXBhdGggPSAoTWF0ZXJpYWxQYXRoICopIHBhdGg7CiAJCQkJUGF0 aAkgICAqc3BhdGggPSBtcGF0aC0+c3VicGF0aDsKKwkJCQlib29sCQllbmFibGVkOwogCiAJCQkJ c3BhdGggPSByZXBhcmFtZXRlcml6ZV9wYXRoKHJvb3QsIHNwYXRoLAogCQkJCQkJCQkJCQlyZXF1 aXJlZF9vdXRlciwKIAkJCQkJCQkJCQkJbG9vcF9jb3VudCk7CisJCQkJZW5hYmxlZCA9CisJCQkJ CShtcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA8PSBzcGF0aC0+ZGlzYWJsZWRfbm9kZXMpOwog CQkJCWlmIChzcGF0aCA9PSBOVUxMKQogCQkJCQlyZXR1cm4gTlVMTDsKLQkJCQlyZXR1cm4gKFBh dGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBzcGF0aCk7CisJCQkJcmV0dXJuIChQYXRo ICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgc3BhdGgsIGVuYWJsZWQpOwogCQkJfQogCQlj YXNlIFRfTWVtb2l6ZToKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRl eCBkOTUwYmQ5MzAwMi4uZmZkN2JiM2IyMjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFu Y2F0LmMKQEAgLTU1Nyw2ICs1NTcsOSBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAq cm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCSAqIEFsbG93IGEg cGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9tIHRoZQog CSAqIGNhdGFsb2dzLiAgQWN0aW9ucyBtaWdodCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBhc3N1bWVk IHJlbGF0aW9uIHNpemUsCiAJICogcmVtb3ZpbmcgYW4gaW5kZXgsIG9yIGFkZGluZyBhIGh5cG90 aGV0aWNhbCBpbmRleCB0byB0aGUgaW5kZXhsaXN0LgorCSAqCisJICogQW4gZXh0ZW5zaW9uIGNh biBhbHNvIG1vZGlmeSByZWwtPnBnc19tYXNrIGhlcmUgdG8gY29udHJvbCBwYXRoCisJICogZ2Vu ZXJhdGlvbi4KIAkgKi8KIAlpZiAoZ2V0X3JlbGF0aW9uX2luZm9faG9vaykKIAkJKCpnZXRfcmVs YXRpb25faW5mb19ob29rKSAocm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IDExNThiYzE5NGMzLi4wMzRk MGM5Yzg3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtNDcsNiArNDcs OSBAQCB0eXBlZGVmIHN0cnVjdCBKb2luSGFzaEVudHJ5CiAJUmVsT3B0SW5mbyAqam9pbl9yZWw7 CiB9IEpvaW5IYXNoRW50cnk7CiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wg ZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK2pvaW5yZWxfc2V0dXBfaG9va190eXBlIGpvaW5yZWxf c2V0dXBfaG9vayA9IE5VTEw7CisKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8g KmlucHV0X3JlbCwKIAkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCkBAIC0yMjUsNiAr MjI4LDcgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBS ZWxPcHRJbmZvICpwYXJlbnQpCiAJcmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxl X2ZyYWN0aW9uID4gMCk7CiAJcmVsLT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CS8q IG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICovCiAJcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGZh bHNlOyAvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLworCXJlbC0+cGdzX21hc2sgPSByb290 LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCXJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5 X3BhdGh0YXJnZXQoKTsKIAlyZWwtPnBhdGhsaXN0ID0gTklMOwogCXJlbC0+cHBpbGlzdCA9IE5J TDsKQEAgLTgyMiw2ICs4MjYsNyBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwK IAlqb2lucmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7 CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZhbHNlOwogCWpvaW5yZWwtPmNv bnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7CisJam9pbnJlbC0+cGdzX21hc2sgPSByb290LT5nbG9i LT5kZWZhdWx0X3Bnc19tYXNrOwogCWpvaW5yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9lbXB0eV9w YXRodGFyZ2V0KCk7CiAJam9pbnJlbC0+cGF0aGxpc3QgPSBOSUw7CiAJam9pbnJlbC0+cHBpbGlz dCA9IE5JTDsKQEAgLTkzNCwxMCArOTM5LDYgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFzc19qb2lucyA9IGhhc19yZWxldmFudF9l Y2xhc3Nfam9pbmNsYXVzZShyb290LCBqb2lucmVsKTsKIAotCS8qIFN0b3JlIHRoZSBwYXJ0aXRp b24gaW5mb3JtYXRpb24uICovCi0JYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBq b2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAotCQkJCQkJCQkgcmVzdHJpY3Rs aXN0KTsKLQogCS8qCiAJICogU2V0IGVzdGltYXRlcyBvZiB0aGUgam9pbnJlbCdzIHNpemUuCiAJ ICovCkBAIC05NjMsNiArOTY0LDE4IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290 LAogCQlpc19wYXJhbGxlbF9zYWZlKHJvb3QsIChOb2RlICopIGpvaW5yZWwtPnJlbHRhcmdldC0+ ZXhwcnMpKQogCQlqb2lucmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKgorCSAq IEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9w ZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3Rp bWF0ZSBvciBjbGVhcmluZyBjb25zaWRlcl9wYXJhbGxlbC4KKwkgKi8KKwlpZiAoam9pbnJlbF9z ZXR1cF9ob29rKQorCQkoKmpvaW5yZWxfc2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVy X3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8q IFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24uICovCisJYnVpbGRfam9pbnJlbF9wYXJ0 aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAor CQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwogCS8qIEFkZCB0aGUgam9pbnJlbCB0byB0aGUgUGxh bm5lckluZm8uICovCiAJYWRkX2pvaW5fcmVsKHJvb3QsIGpvaW5yZWwpOwogCkBAIC0xMDE5LDYg KzEwMzIsNyBAQCBidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5yZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVw bGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFs c2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSBmYWxzZTsKKwlqb2lucmVsLT5wZ3Nf bWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAJam9pbnJlbC0+cmVsdGFyZ2V0 ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlqb2lucmVsLT5wYXRobGlzdCA9IE5JTDsK IAlqb2lucmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtMTEwMiwxMCArMTExNiw2IEBAIGJ1aWxkX2No aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJ ICovCiAJam9pbnJlbC0+aGFzX2VjbGFzc19qb2lucyA9IHBhcmVudF9qb2lucmVsLT5oYXNfZWNs YXNzX2pvaW5zOwogCi0JLyogSXMgdGhlIGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBw YXJ0aXRpb25lZD8gKi8KLQlidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5y ZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3Qp OwotCiAJLyogQ2hpbGQgam9pbnJlbCBpcyBwYXJhbGxlbCBzYWZlIGlmIHBhcmVudCBpcyBwYXJh bGxlbCBzYWZlLiAqLwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gcGFyZW50X2pvaW5y ZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCkBAIC0xMTEzLDYgKzExMjMsMjAgQEAgYnVpbGRfY2hp bGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlz ZXRfam9pbnJlbF9zaXplX2VzdGltYXRlcyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVy X3JlbCwKIAkJCQkJCQkgICBzamluZm8sIHJlc3RyaWN0bGlzdCk7CiAKKwkvKgorCSAqIEFsbG93 IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVz LiBBY3Rpb25zCisJICogbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSBv ciBjbGVhcmluZyBjb25zaWRlcl9wYXJhbGxlbCwKKwkgKiBhbHRob3VnaCB0aGUgbGF0dGVyIHdv dWxkIGJlIGJldHRlciBkb25lIGluIHRoZSBwYXJlbnQgam9pbnJlbCByYXRoZXIKKwkgKiB0aGFu IGhlcmUuCisJICovCisJaWYgKGpvaW5yZWxfc2V0dXBfaG9vaykKKwkJKCpqb2lucmVsX3NldHVw X2hvb2spIChyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJ CQkJCSAgIHJlc3RyaWN0bGlzdCk7CisKKwkvKiBJcyB0aGUgam9pbiBiZXR3ZWVuIHBhcnRpdGlv bnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLworCWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8o cm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJCQkJIHJl c3RyaWN0bGlzdCk7CisKIAkvKiBXZSBidWlsZCB0aGUgam9pbiBvbmx5IG9uY2UuICovCiAJQXNz ZXJ0KCFmaW5kX2pvaW5fcmVsKHJvb3QsIGpvaW5yZWwtPnJlbGlkcykpOwogCkBAIC0xNjAyLDYg KzE2MjYsNyBAQCBmZXRjaF91cHBlcl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFVwcGVyUmVsYXRp b25LaW5kIGtpbmQsIFJlbGlkcyByZWxpZHMpCiAJdXBwZXJyZWwgPSBtYWtlTm9kZShSZWxPcHRJ bmZvKTsKIAl1cHBlcnJlbC0+cmVsb3B0a2luZCA9IFJFTE9QVF9VUFBFUl9SRUw7CiAJdXBwZXJy ZWwtPnJlbGlkcyA9IGJtc19jb3B5KHJlbGlkcyk7CisJdXBwZXJyZWwtPnBnc19tYXNrID0gcm9v dC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAogCS8qIGNoZWFwIHN0YXJ0dXAgY29zdCBpcyBp bnRlcmVzdGluZyBpZmYgbm90IGFsbCB0dXBsZXMgdG8gYmUgcmV0cmlldmVkICovCiAJdXBwZXJy ZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKQEAgLTIx MTgsNyArMjE0Myw3IEBAIGJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsCiAJUGFydGl0aW9uU2NoZW1lIHBhcnRfc2NoZW1lOwogCiAJLyogTm90aGluZyB0byBk byBpZiBwYXJ0aXRpb253aXNlIGpvaW4gdGVjaG5pcXVlIGlzIGRpc2FibGVkLiAqLwotCWlmICgh ZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikKKwlpZiAoKGpvaW5yZWwtPnBnc19tYXNrICYgUEdT X0NPTlNJREVSX1BBUlRJVElPTldJU0UpID09IDApCiAJewogCQlBc3NlcnQoIUlTX1BBUlRJVElP TkVEX1JFTChqb2lucmVsKSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNzVh NzA0ODllNWEuLjQ3NDZkM2M0M2M0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjIsNiArMjIs NzkgQEAKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i bG9jay5oIgogCisvKgorICogUGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMuCisgKgorICogVGhl c2UgY29uc3RhbnRzIGFyZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHNldCBvZiBzdHJhdGVnaWVzIHRo YXQgdGhlIHBsYW5uZXIKKyAqIHNob3VsZCB1c2UsIGVpdGhlciBmb3IgdGhlIHF1ZXJ5IGFzIGEg d2hvbGUgb3IgZm9yIGEgc3BlY2lmaWMgYmFzZXJlbCBvcgorICogam9pbnJlbC4gVGhlIHZhcmlv dXMgcGxhbm5lci1yZWxhdGVkIGVuYWJsZV8qIEdVQ3MgYXJlIHVzZWQgdG8gc2V0IHRoZQorICog UGxhbm5lckdsb2JhbCdzIGRlZmF1bHRfcGdzX21hc2ssIGFuZCB0aGF0IGluIHR1cm4gaXMgdXNl ZCB0byBzZXQgZWFjaAorICogUmVsT3B0SW5mbydzIHBnc19tYXNrLiBJbiBib3RoIGNhc2VzLCBl eHRlbnNpb25zIGNhbiB1c2UgaG9va3MgdG8gbW9kaWZ5IHRoZQorICogZGVmYXVsdCB2YWx1ZS4g IE5vdCBldmVyeSBzdHJhdGVneSBsaXN0ZWQgaGVyZSBoYXMgYSBjb3JyZXNwb25kaW5nIGVuYWJs ZV8qCisgKiBHVUM7IHRob3NlIHRoYXQgZG9uJ3QgYXJlIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBk aXNhYmxlZCBieSBhbiBleHRlbnNpb24uCisgKiBOb3QgYWxsIHN0cmF0ZWdpZXMgYXJlIHJlbGV2 YW50IGZvciBldmVyeSBSZWxPcHRJbmZvOyBlLmcuIFBHU19TRVFTQ0FOCisgKiBkb2Vzbid0IGFm ZmVjdCBqb2lucmVscyBvbmUgd2F5IG9yIHRoZSBvdGhlci4KKyAqCisgKiBJbiBtb3N0IGNhc2Vz LCBkaXNhYmxpbmcgYSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWVyZWx5IG1lYW5zIHRoYXQg YW55CisgKiBwYXRocyBnZW5lcmF0ZWQgdXNpbmcgdGhhdCBzdHJhdGVneSBhcmUgbWFya2VkIGFz IGRpc2FibGVkLCBidXQgaW4gc29tZQorICogY2FzZXMsIHBhdGggZ2VuZXJhdGlvbiBpcyBza2lw cGVkIGFsdG9nZXRoZXIuIFRoZSBsYXR0ZXIgc3RyYXRlZ3kgaXMgb25seQorICogcGVybWlzc2li bGUgd2hlbiBpdCBjYW4ndCByZXN1bHQgaW4gcGxhbm5lciBmYWlsdXJlIC0tIGZvciBpbnN0YW5j ZSwgd2UKKyAqIGNvdWxkbid0IGRvIHRoaXMgZm9yIHNlcXVlbnRpYWwgc2NhbnMgb24gYSBwbGFp biByZWwsIGJlY2F1c2UgdGhlcmUgbWlnaHQKKyAqIG5vdCBiZSBhbnkgb3RoZXIgcG9zc2libGUg cGF0aC4gTmV2ZXJ0aGVsZXNzLCB0aGUgYmVoYXZpb3JzIGluIGVhY2gKKyAqIGluZGl2aWR1YWwg Y2FzZSBhcmUgdG8gc29tZSBleHRlbnQgdGhlIHJlc3VsdCBvZiBoaXN0b3JpY2FsIGFjY2lkZW50 LAorICogY2hvc2VuIHRvIG1hdGNoIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvcnMgb2YgdGhlIGVu YWJsZV8qIEdVQ3MuCisgKgorICogSW4gYSBmZXcgY2FzZXMsIHdlIGhhdmUgbW9yZSB0aGFuIG9u ZSBiaXQgZm9yIHRoZSBzYW1lIHN0cmF0ZWd5LCBjb250cm9sbGluZworICogZGlmZmVyZW50IGFz cGVjdHMgb2YgdGhlIHBsYW5uZXIgYmVoYXZpb3IuIFdoZW4gUEdTX0NPTlNJREVSX0lOREVYT05M WSBpcworICogdW5zZXQsIHdlIGRvbid0IGV2ZW4gY29uc2lkZXIgaW5kZXgtb25seSBzY2Fucywg YW5kIGFueSBzdWNoIHNjYW5zIHRoYXQKKyAqIHdvdWxkIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYmVj b21lIGluZGV4IHNjYW5zIGluc3RlYWQuIE9uIHRoZSBvdGhlciBoYW5kLAorICogdW5zZXR0aW5n IFBHU19JTkRFWFNDQU4gb3IgUEdTX0lOREVYT05MWVNDQU4gY2F1c2VzIGdlbmVyYXRlZCBwYXRo cyBvZiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdHlwZXMgdG8gYmUgbWFya2VkIGFzIGRpc2FibGVk LiBTaW1pbGFybHksIHVuc2V0dGluZworICogUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UgcHJl dmVudHMgYW55IHNvcnQgb2YgdGhpbmtpbmcgYWJvdXQgcGFydGl0aW9ud2lzZQorICogam9pbnMg Zm9yIHRoZSBjdXJyZW50IHJlbCwgd2hpY2ggaW5jaWRlbnRhbGx5IHdpbGwgcHJlY2x1ZGUgaGln aGVyLWxldmVsCisgKiBqb2lucmVscyBmcm9tIGJ1aWxkaW5nIHBhcml0aXRvbndpc2UgcGF0aHMg dXNpbmcgcGF0aHMgdGFrZW4gZnJvbSB0aGUKKyAqIGN1cnJlbnQgcmVsJ3MgY2hpbGRyZW4uIE9u IHRoZSBvdGhlciBoYW5kLCB1bnNldHRpbmcgUEdTX0FQUEVORCBvcgorICogUEdTX01FUkdFX0FQ UEVORCB3aWxsIG9ubHkgYXJyYW5nZSB0byBkaXNhYmxlIHBhdGhzIG9mIHRoZSBjb3JyZXNwb25k aW5nCisgKiB0eXBlcyBpZiB0aGV5IGFyZSBnZW5lcmF0ZWQgYXQgdGhlIGxldmVsIG9mIHRoZSBj dXJyZW50IHJlbC4KKyAqCisgKiBGaW5hbGx5LCB1bnNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBB UlRJQUwgZGlzYWJsZXMgYWxsIG5vbi1wYXJ0aWFsIHBhdGhzCisgKiBleGNlcHQgdGhvc2UgdGhh dCB1c2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZS4gSW4gbW9zdCBvdGhlciBjYXNlcywgYQorICog cGx1Z2luIGNhbiBudWRnZSB0aGUgcGxhbm5lciB0b3dhcmQgYSBwYXJ0aWN1bGFyIHN0cmF0ZWd5 IGJ5IGRpc2FibGluZworICogYWxsIG9mIHRoZSBvdGhlcnMsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29y ayBoZXJlOiB1bnNldHRpbmcgUEdTX1NFUVNDQU4sCisgKiBmb3IgaW5zdGFuY2UsIHdvdWxkIGRp c2FibGUgYm90aCBwYXJ0aWFsIGFuZCBub24tcGFydGlhbCBzZXF1ZW50aWFsIHNjYW5zLgorICov CisjZGVmaW5lIFBHU19TRVFTQ0FOCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIFBHU19JTkRFWFND QU4JCQkJMHgwMDAwMDAwMgorI2RlZmluZSBQR1NfSU5ERVhPTkxZU0NBTgkJCTB4MDAwMDAwMDQK KyNkZWZpbmUgUEdTX0JJVE1BUFNDQU4JCQkJMHgwMDAwMDAwOAorI2RlZmluZSBQR1NfVElEU0NB TgkJCQkJMHgwMDAwMDAxMAorI2RlZmluZSBQR1NfRk9SRUlHTkpPSU4JCQkJMHgwMDAwMDAyMAor I2RlZmluZSBQR1NfTUVSR0VKT0lOX1BMQUlOCQkJMHgwMDAwMDA0MAorI2RlZmluZSBQR1NfTUVS R0VKT0lOX01BVEVSSUFMSVpFCTB4MDAwMDAwODAKKyNkZWZpbmUgUEdTX05FU1RMT09QX1BMQUlO CQkJMHgwMDAwMDEwMAorI2RlZmluZSBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUJMHgwMDAwMDIw MAorI2RlZmluZSBQR1NfTkVTVExPT1BfTUVNT0laRQkJMHgwMDAwMDQwMAorI2RlZmluZSBQR1Nf SEFTSEpPSU4JCQkJMHgwMDAwMDgwMAorI2RlZmluZSBQR1NfQVBQRU5ECQkJCQkweDAwMDAxMDAw CisjZGVmaW5lIFBHU19NRVJHRV9BUFBFTkQJCQkweDAwMDAyMDAwCisjZGVmaW5lIFBHU19HQVRI RVIJCQkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgUEdTX0dBVEhFUl9NRVJHRQkJCTB4MDAwMDgwMDAK KyNkZWZpbmUgUEdTX0NPTlNJREVSX0lOREVYT05MWQkJMHgwMDAxMDAwMAorI2RlZmluZSBQR1Nf Q09OU0lERVJfUEFSVElUSU9OV0lTRQkweDAwMDIwMDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9O T05QQVJUSUFMCQkweDAwMDQwMDAwCisKKy8qCisgKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIHVz ZWZ1bCBjb21iaW5hdGlvbiBvZiB0aGUgYml0cyBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5l IFBHU19TQ0FOX0FOWQkJXAorCShQR1NfU0VRU0NBTiB8IFBHU19JTkRFWFNDQU4gfCBQR1NfSU5E RVhPTkxZU0NBTiB8IFBHU19CSVRNQVBTQ0FOIHwgXAorCSBQR1NfVElEU0NBTikKKyNkZWZpbmUg UEdTX01FUkdFSk9JTl9BTlkJXAorCShQR1NfTUVSR0VKT0lOX1BMQUlOIHwgUEdTX01FUkdFSk9J Tl9NQVRFUklBTElaRSkKKyNkZWZpbmUgUEdTX05FU1RMT09QX0FOWQlcCisJKFBHU19ORVNUTE9P UF9QTEFJTiB8IFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSB8IFBHU19ORVNUTE9PUF9NRU1PSVpF KQorI2RlZmluZSBQR1NfSk9JTl9BTlkJCVwKKwkoUEdTX0ZPUkVJR05KT0lOIHwgUEdTX01FUkdF Sk9JTl9BTlkgfCBQR1NfTkVTVExPT1BfQU5ZIHwgUEdTX0hBU0hKT0lOKQogCiAvKgogICogUmVs aWRzCkBAIC0xODYsNiArMjU5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8q IHdvcnN0IFBST1BBUkFMTEVMIGhhemFyZCBsZXZlbCAqLwogCWNoYXIJCW1heFBhcmFsbGVsSGF6 YXJkOwogCisJLyogbWFzayBvZiBhbGxvd2VkIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzICov CisJdWludDY0CQlkZWZhdWx0X3Bnc19tYXNrOworCiAJLyogcGFydGl0aW9uIGRlc2NyaXB0b3Jz ICovCiAJUGFydGl0aW9uRGlyZWN0b3J5IHBhcnRpdGlvbl9kaXJlY3RvcnkgcGdfbm9kZV9hdHRy KHJlYWRfd3JpdGVfaWdub3JlKTsKIApAQCAtOTM5LDcgKzEwMTUsNyBAQCB0eXBlZGVmIHN0cnVj dCBSZWxPcHRJbmZvCiAJQ2FyZGluYWxpdHkgcm93czsKIAogCS8qCi0JICogcGVyLXJlbGF0aW9u IHBsYW5uZXIgY29udHJvbCBmbGFncworCSAqIHBlci1yZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wK IAkgKi8KIAkvKiBrZWVwIGNoZWFwLXN0YXJ0dXAtY29zdCBwYXRocz8gKi8KIAlib29sCQljb25z aWRlcl9zdGFydHVwOwpAQCAtOTQ3LDYgKzEwMjMsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJ bmZvCiAJYm9vbAkJY29uc2lkZXJfcGFyYW1fc3RhcnR1cDsKIAkvKiBjb25zaWRlciBwYXJhbGxl bCBwYXRocz8gKi8KIAlib29sCQljb25zaWRlcl9wYXJhbGxlbDsKKwkvKiBwYXRoIGdlbmVyYXRp b24gc3RyYXRlZ3kgbWFzayAqLworCXVpbnQ2NAkJcGdzX21hc2s7CiAKIAkvKgogCSAqIGRlZmF1 bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBhdGhzIHNjYW5uaW5nIHRoaXMgcmVsYXRpb247IGxp c3Qgb2YKQEAgLTM1MDUsNiArMzU4Myw3IEBAIHR5cGVkZWYgc3RydWN0IFNlbWlBbnRpSm9pbkZh Y3RvcnMKICAqIHNqaW5mbyBpcyBleHRyYSBpbmZvIGFib3V0IHNwZWNpYWwgam9pbnMgZm9yIHNl bGVjdGl2aXR5IGVzdGltYXRpb24KICAqIHNlbWlmYWN0b3JzIGlzIGFzIHNob3duIGFib3ZlIChv bmx5IHZhbGlkIGZvciBTRU1JL0FOVEkvaW5uZXJfdW5pcXVlIGpvaW5zKQogICogcGFyYW1fc291 cmNlX3JlbHMgYXJlIE9LIHRhcmdldHMgZm9yIHBhcmFtZXRlcml6YXRpb24gb2YgcmVzdWx0IHBh dGhzCisgKiBwZ3NfbWFzayBpcyBhIGJpdG1hc2sgb2YgUEdTXyogY29uc3RhbnRzIHRvIGxpbWl0 IHRoZSBqb2luIHN0cmF0ZWd5CiAgKi8KIHR5cGVkZWYgc3RydWN0IEpvaW5QYXRoRXh0cmFEYXRh CiB7CkBAIC0zNTE0LDYgKzM1OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0 YQogCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvOwogCVNlbWlBbnRpSm9pbkZhY3RvcnMgc2VtaWZh Y3RvcnM7CiAJUmVsaWRzCQlwYXJhbV9zb3VyY2VfcmVsczsKKwl1aW50NjQJCXBnc19tYXNrOwog fSBKb2luUGF0aEV4dHJhRGF0YTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IGI1MjNiY2Rh OGYzLi4yZDgwNDYyYmVjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3Qu aAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC0xMjUsNyArMTI1LDcgQEAg ZXh0ZXJuIHZvaWQgY29zdF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9j b3N0LAogCQkJCQkJCSAgZG91YmxlIHR1cGxlcyk7CiBleHRlcm4gdm9pZCBjb3N0X21hdGVyaWFs KFBhdGggKnBhdGgsCi0JCQkJCQkgIGludCBpbnB1dF9kaXNhYmxlZF9ub2RlcywKKwkJCQkJCSAg Ym9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkgIENvc3QgaW5w dXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkJCQkgIGRvdWJsZSB0 dXBsZXMsIGludCB3aWR0aCk7CiBleHRlcm4gdm9pZCBjb3N0X2FnZyhQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKQEAgLTE0OCw3ICsxNDgsNyBAQCBleHRlcm4gdm9pZCBjb3N0X2dyb3Vw KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkgICBkb3VibGUgaW5wdXRfdHVw bGVzKTsKIGV4dGVybiB2b2lkIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJICBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAotCQkJCQkJCQkgIEpv aW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgZW5h YmxlX21hc2ssCiAJCQkJCQkJCSAgUGF0aCAqb3V0ZXJfcGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwK IAkJCQkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOwogZXh0ZXJuIHZvaWQgZmluYWxf Y29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwgTmVzdFBhdGggKnBhdGgsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRobm9kZS5oCmluZGV4IDQ0MzcyNDhjYjY3Li4yNzRjZDQxYmFiMSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYgKzE3LDE0IEBACiAjaW5jbHVkZSAibm9kZXMvYml0 bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCiAKKy8qIEhvb2sgZm9yIHBs dWdpbnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK3R5cGVkZWYgdm9p ZCAoKmpvaW5yZWxfc2V0dXBfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJ CQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVyX3Jl bCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJfcmVsLAorCQkJCQkJCQkJCSBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkJCQkgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK2V4dGVy biBQR0RMTElNUE9SVCBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3NldHVwX2hvb2s7 CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBwYXRobm9kZS5jCkBAIC04NCw3ICs5Miw4IEBAIGV4 dGVybiBHcm91cFJlc3VsdFBhdGggKmNyZWF0ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCQkgUGF0 aFRhcmdldCAqdGFyZ2V0LAogCQkJCQkJCQkJCQkJIExpc3QgKmhhdmluZ3F1YWwpOwotZXh0ZXJu IE1hdGVyaWFsUGF0aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRo ICpzdWJwYXRoKTsKK2V4dGVybiBNYXRlcmlhbFBhdGggKmNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJl bE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwKKwkJCQkJCQkJCQkgIGJvb2wgZW5hYmxlZCk7 CiBleHRlcm4gTWVtb2l6ZVBhdGggKmNyZWF0ZV9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCVBhdGggKnN1YnBhdGgs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRl L29wdGltaXplci9wYXRocy5oCmluZGV4IGY2YTYyZGYwYjQzLi42MWMxNjA3Zjg3MiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmgKQEAgLTI4LDcgKzI4LDE0IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQg bWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWlu X3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9ncm91cF9ieV9yZW9yZGVyaW5nOwogCi0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250 cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAqLworLyogSG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0 IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgpICovCit0eXBlZGVmIHZvaWQgKCpqb2luX3Bh dGhfc2V0dXBfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJICAgUmVs T3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJ CQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJCQkgICBKb2luVHlwZSBq b2ludHlwZSwKKwkJCQkJCQkJCQkgICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworZXh0ZXJu IFBHRExMSU1QT1JUIGpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgam9pbl9wYXRoX3NldHVwX2hv b2s7CiB0eXBlZGVmIHZvaWQgKCpzZXRfcmVsX3BhdGhsaXN0X2hvb2tfdHlwZSkgKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCUluZGV4 IHJ0aSwKLS0gCjIuNTEuMAoK --000000000000e6740f0642efcc52 Content-Type: application/octet-stream; name="v3-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v3-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnnqd871 RnJvbSA5NGY2Mzk2YWRiOTQzNjNiNWM0YmRmYzBhZWEzOGU1NTkzZjgyZDM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDIv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCA1ZGM3MDdkNjllMy4uZmE5MDdmYTQ3MmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDBlNmIzZjYw ZjMxLi45ZDUyNjI2NTFlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBhZGFiYWUwOWEyMy4uMjNhMDBkNDUyYjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNpbmcsIGZvciB0aGUgYmVu ZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucworICog ZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25vZGVf aWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ RWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2RlX2lk ID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+cmVs aWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVsaWRl ZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYTNhODAwODY5ZGYuLmNmM2Ex NmI4YjBlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFyYW1z ICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVzIGVs aWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0CSAg ICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWduZWQg Ki8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMTUyNmRkMmVj NmIuLjVkMDUyMGQ1ZTU4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5IEBA IHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1dGls aXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQgbm9k ZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLworCUxp c3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQgYnkg ZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAtMTgz OCw0ICsxODQxLDE4IEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlkdW1t eTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZvcm1h dGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2aWFs IHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIG5vZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5P REVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNjBhYTBiMDkzN2IuLjRmZjQ3 MTE1Y2E4IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNjk4LDYgKzY5OCw3IEBAIEVh Y2hTdGF0ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWRO b2RlCiBFbmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5 X2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --000000000000e6740f0642efcc52 Content-Type: application/octet-stream; name="v3-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v3-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnnqd820 RnJvbSAxODE3ZTRjZmZiNTA1ZDgzNDMxNjU1NGNmNDJkNDJkMWFlZjNhNjNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDEv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ2UgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggYmQ3MGI2ZDlk NWUuLjVkYzcwN2Q2OWUzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBjNGZkNjQ2 Yjk5OS4uMGU2YjNmNjBmMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2NkYzliYzI2NGEuLmFkYWJhZTA5YTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDMwZDg4OWI1NGM1Li5hM2E4MDA4NjlkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMTUy NmRkMmVjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwli b29sCQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQzMjUwOTI3N2M5Li42MGFhMGIw OTM3YiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4ODksNiArMjg4OSw3IEBAIFN1 YkxpbmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQ bGFuU3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000e6740f0642efcc52 Content-Type: application/octet-stream; name="v3-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Disposition: attachment; filename="v3-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnnqd893 RnJvbSA5N2U1NDBiMTlkOGZmZTIzMjlmYjU5NDM2ZjFjZTY0YTZkNmU1OGYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6MTc6NDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDQv Nl0gVGVtcG9yYXJ5IGhhY2sgdG8gdW5icmVhayBwYXJ0aXRpb253aXNlIGpvaW4gY29udHJvbC4K ClJlc2V0dGluZyB0aGUgcGF0aGxpc3QgYW5kIHBhcnRpYWwgcGF0aGxpc3QgdG8gTklMIHdoZW4g dGhlCnRvcG1vc3Qgc2Nhbi9qb2luIHJlbCBpcyBhIHBhcnRpdGlvbmVkIGpvaW5yZWwgaXMgaW5j b3JyZWN0LiBUaGUgaXNzdWUKd2FzIG9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkgQXNodXRvc2ggQmFw YXQgaGVyZToKCmh0dHA6Ly9wb3N0Z3IuZXMvbS9DQUV4SFc1dG96ZTU4K2pMLTQ1NEozdHkxMXNx SnlVMTNTejVySlBRWkRtQVN3WmdXaUFAbWFpbC5nbWFpbC5jb20KCkkgZmFpbGVkIHRvIHVuZGVy c3RhbmQgQXNodXRvc2gncyBleHBsYW5hdGlvbiB1bnRpbCBJIGhpdCB0aGUgcHJvYmxlbQpteXNl bGYsIHNvIGhlcmUncyBteSBhdHRlbXB0IHRvIHJlLWV4cGxhaW4gd2hhdCBoZSBoYWQgc2FpZCwg anVzdCBpbgpjYXNlIHlvdSBmaW5kIG15IGV4cGxhbmF0aW9uIGFueSBjbGVhcmVyOgoKaHR0cDov L3Bvc3Rnci5lcy9tL0NBJTJCVGdtb1p2QkQlMkI1dnlRcnVYQlZYVzc0Rk1nV3hFJTNETzRLNHJD ckN0RUVMV05qLU1MQSU0MG1haWwuZ21haWwuY29tCgpBcyBzdWJzZXF1ZW50IGRpc2N1c3Npb24g b24gdGhhdCB0aHJlYWQgaW5kaWNhdGVzLCBpdCBpcyB1bmNsZWFyCmV4YWN0bHkgd2hhdCB0aGUg cmlnaHQgZml4IGZvciB0aGlzIHByb2JsZW0gaXMsIGFuZCBhdCBsZWFzdCBhcyBvZgp0aGlzIHdy aXRpbmcsIGl0IGlzIGV2ZW4gbW9yZSB1bmNsZWFyIGhvdyB0byBhZGp1c3QgdGhlIHRlc3QgY2Fz ZXMKdGhhdCBicmVhay4gV2hhdCBJJ3ZlIGRvbmUgaGVyZSBpcyBqdXN0IGFjY2VwdCBhbGwgdGhl IGNoYW5nZXMgdG8gdGhlCnJlZ3Jlc3Npb24gdGVzdCBvdXRwdXRzLCB3aGljaCBpcyBhbG1vc3Qg Y2VydGFpbmx5IHRoZSB3cm9uZyBpZGVhLAplc3BlY2lhbGx5IHNpbmNlIEkndmUgYWxzbyBhZGRl ZCBubyBjb21tZW50cy4KClRoaXMgaXMganVzdCBhIHRlbXBvcmFyeSBoYWNrIHRvIG1ha2UgaXQg cG9zc2libGUgdG8gdGVzdCB0aGlzIHBhdGNoCnNldCwgYmVjYXVzZSB3aXRob3V0IHRoaXMsIFBB UlRJVElPTldJU0UoKSBhZHZpY2UgY2FuJ3QgYmUgdXNlZCB0bwpzdXBwcmVzcyBhIHBhcnRpdGlv bndpc2Ugam9pbiwgYmVjYXVzZSBhbGwgb2YgdGhlIGFsdGVybmF0aXZlcyBnZXQKZWxpbWluYXRl ZCByZWdhcmRsZXNzIG9mIGNvc3QuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jICAgICAgICAgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0 aW9uX2pvaW4ub3V0IHwgMTcyICsrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCAgICAgIHwgIDQxICsrLS0tCiAzIGZpbGVzIGNoYW5nZWQs IDkxIGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKaW5kZXggZWI2Mjc5NGFlY2QuLjhiMWFiODQ3ZjM5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC03OTI3LDcgKzc5MjcsNyBAQCBhcHBseV9zY2Fuam9p bl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogZ2VuZXJhdGVfdXNlZnVs X2dhdGhlcl9wYXRocyB0byBhZGQgcGF0aChzKSB0byB0aGUgbWFpbiBsaXN0LCBhbmQKIAkgKiBm aW5hbGx5IHphcCB0aGUgcGFydGlhbCBwYXRobGlzdC4KIAkgKi8KLQlpZiAocmVsX2lzX3BhcnRp dGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQog CQlyZWwtPnBhdGhsaXN0ID0gTklMOwogCiAJLyoKQEAgLTc5NTMsNyArNzk1Myw3IEBAIGFwcGx5 X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAl9CiAKIAkvKiBG aW5pc2ggZHJvcHBpbmcgb2xkIHBhdGhzIGZvciBhIHBhcnRpdGlvbmVkIHJlbCwgcGVyIGNvbW1l bnQgYWJvdmUgKi8KLQlpZiAocmVsX2lzX3BhcnRpdGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0 aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQogCQlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBO SUw7CiAKIAkvKiBFeHRyYWN0IFNSRi1mcmVlIHNjYW4vam9pbiB0YXJnZXQuICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IDcxMzgyOGJlMzM1 Li4zZTM0ZjA1YmE2MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f am9pbi5vdXQKQEAgLTY1LDMxICs2NSwyNCBAQCBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIu YyBGUk9NIHBydDEgdDEsIHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmIgQU5EIHQxLmIgPQogLS0g aW5uZXIgam9pbiB3aXRoIHBhcnRpYWxseS1yZWR1bmRhbnQgam9pbiBjbGF1c2VzCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIuYyBGUk9NIHBydDEgdDEs IHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmEgQU5EIHQxLmEgPSB0Mi5iIE9SREVSIEJZIHQxLmEs IHQyLmI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNvcnQKLSAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICh0MS5hID0gdDIuYSkKICAgIC0+ICBBcHBlbmQKLSAg ICAgICAgIC0+ICBNZXJnZSBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfMS5h ID0gdDJfMS5hKQotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaXBydDFfcDFf YSBvbiBwcnQxX3AxIHQxXzEKLSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHJ0Ml9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChh ID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzIuYSA9IHQyXzIuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX3Ay IHQxXzIKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHJ0Ml9wMiB0Ml8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6IChhID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQxXzMuYSA9IHQyXzMuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw cnQxX3AzIHQxXzMKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMyB0Ml8zCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6IChhID0gYikKLSgyMiByb3dzKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgaXBydDFfcDFfYSBvbiBwcnQxX3AxIHQxXzEKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGlwcnQxX3AyX2Egb24gcHJ0MV9wMiB0MV8yCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBpcHJ0MV9wM19hIG9uIHBydDFfcDMgdDFfMworICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiB0Mi5iCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHJ0Ml9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0g YikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AyIHQyXzIKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKGEgPSBiKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydDJfcDMgdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA9IGIpCiso MTUgcm93cykKIAogU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMgRlJPTSBwcnQxIHQxLCBw cnQyIHQyIFdIRVJFIHQxLmEgPSB0Mi5hIEFORCB0MS5hID0gdDIuYiBPUkRFUiBCWSB0MS5hLCB0 Mi5iOwogIGEgIHwgIGMgICB8IGIgIHwgIGMgICAKQEAgLTEyNDksNTYgKzEyNDIsNTAgQEAgU0VU IGVuYWJsZV9oYXNoam9pbiBUTyBvZmY7CiBTRVQgZW5hYmxlX25lc3Rsb29wIFRPIG9mZjsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElO IChTRUxFQ1QgdDEuYiBGUk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsg dDEuYikvMiBGUk9NIHBydDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRF UiBCWSB0MS5hOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQg S2V5OiB0MS5hCi0gICAtPiAgTWVyZ2UgU2VtaSBKb2luCi0gICAgICAgICBNZXJnZSBDb25kOiAo dDFfMy5hID0gdDFfNi5iKQotICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgIFNvcnQg S2V5OiB0MV8zLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKHQxLmEgPSB0MV8xLmIpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBBcHBlbmQKICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwcnQxX3AxIHQxXzMKICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGIg PSAwKQotICAgICAgICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2Ug Q29uZDogKHQxXzYuYiA9ICgoKHQxXzkuYSArIHQxXzkuYikgLyAyKSkpCi0gICAgICAgICAgICAg ICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzYuYgotICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDEgdDFfNgotICAgICAgICAgICAg ICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV85LmEgKyB0 MV85LmIpIC8gMikpCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9l X3AxIHQxXzkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotICAg LT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVyZ2UgQ29uZDogKHQxXzQuYSA9IHQxXzcu YikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogdDFfNC5hCiAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMiB0MV80CiAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAg ICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV83LmIgPSAoKCh0MV8xMC5hICsgdDFfMTAuYikg LyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHQxXzcuYgotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJf cDIgdDFfNwotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKCh0MV8xMC5hICsgdDFfMTAuYikgLyAyKSkKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDIgdDFfMTAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKGMgPSAwKQotICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVy Z2UgQ29uZDogKHQxXzUuYSA9IHQxXzguYikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAg ICAgICBTb3J0IEtleTogdDFfNS5hCiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 MV9wMyB0MV81CiAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAg IC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV84LmIg PSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAot ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzguYgotICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDMgdDFfOAotICAgICAgICAgICAgICAgLT4gIFNvcnQK LSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAy KSkKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotKDQ3IHJvd3MpCisg ICAtPiAgVW5pcXVlCisgICAgICAgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICAgICAgICBT b3J0IEtleTogdDFfMS5iCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAg ICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfNi5iID0gKCgodDFfOS5hICsgdDFfOS5i KSAvIDIpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3J0IEtleTogdDFfNi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSB0MV82CisgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoKHQxXzkuYSArIHQxXzku YikgLyAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQx X2VfcDEgdDFfOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYyA9 IDApCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAgICAgICAgICAgICAg ICAgICBNZXJnZSBDb25kOiAodDFfNy5iID0gKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikpKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiB0MV83LmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwcnQyX3AyIHQxXzcKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9lX3AyIHQx XzEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChjID0gMCkKKyAg ICAgICAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1l cmdlIENvbmQ6ICh0MV84LmIgPSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IHQxXzguYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBy dDJfcDMgdDFfOAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQorKDQxIHJvd3Mp CiAKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElOIChTRUxFQ1QgdDEuYiBG Uk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsgdDEuYikvMiBGUk9NIHBy dDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRFUiBCWSB0MS5hOwogICBh ICB8IGIgfCAgYyAgIApAQCAtNDkyMywzMiArNDkxMCwyNyBAQCBBTkFMWVpFIHBsdDNfYWR2Owog LS0gJzAwMDEnIG9mIHRoYXQgcGFydGl0aW9uCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg dDEuYSwgdDEuYywgdDIuYSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZU IEpPSU4gcGx0Ml9hZHYgdDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQz IE9OICh0MS5jID0gdDMuYykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNv YWxlc2NlKHQxLmEsIDApICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb3J0CiAgICBTb3J0IEtleTogdDEuYywgdDEu YSwgdDIuYSwgdDMuYQotICAgLT4gIEFwcGVuZAotICAgICAgICAgLT4gIEhhc2ggRnVsbCBKb2lu Ci0gICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLmMgPSB0M18xLmMpCi0gICAgICAgICAg ICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxXzEuYSwgMCkgJSA1KSA8PiAzKSBBTkQgKChDT0FM RVNDRSh0MV8xLmEsIDApICUgNSkgPD4gNCkpCi0gICAgICAgICAgICAgICAtPiAgSGFzaCBMZWZ0 IEpvaW4KLSAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEuYyA9IHQyXzEuYykK KyAgIC0+ICBIYXNoIEZ1bGwgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQzLmMp CisgICAgICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxLmEsIDApICUgNSkgPD4gMykgQU5EICgo Q09BTEVTQ0UodDEuYSwgMCkgJSA1KSA8PiA0KSkKKyAgICAgICAgIC0+ICBIYXNoIExlZnQgSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQyLmMpCisgICAgICAgICAgICAg ICAtPiAgQXBwZW5kCiAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9h ZHZfcDEgdDFfMQotICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQyX2Fkdl9wMSB0Ml8xCi0gICAgICAgICAg ICAgICAtPiAgSGFzaAotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKLSAgICAgICAgIC0+ICBIYXNoIEZ1bGwgSm9pbgotICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDFfMi5jID0gdDNfMi5jKQotICAgICAgICAgICAgICAgRmlsdGVyOiAoKChD T0FMRVNDRSh0MV8yLmEsIDApICUgNSkgPD4gMykgQU5EICgoQ09BTEVTQ0UodDFfMi5hLCAwKSAl IDUpIDw+IDQpKQotICAgICAgICAgICAgICAgLT4gIEhhc2ggTGVmdCBKb2luCi0gICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLmMgPSB0Ml8yLmMpCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9hZHZfcDIgdDFfMgotICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw bHQyX2Fkdl9wMiB0Ml8yCiAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBsdDJfYWR2X3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwbHQyX2Fkdl9wMiB0Ml8yCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQzX2Fk dl9wMiB0M18yCi0oMjMgcm93cykKKygxOCByb3dzKQogCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIu YSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZUIEpPSU4gcGx0Ml9hZHYg dDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQzIE9OICh0MS5jID0gdDMu YykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNvYWxlc2NlKHQxLmEsIDAp ICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7CiAgYSAgfCAgYyAgIHwg YSAgfCAgYyAgIHwgYSAgfCAgYyAgIApAQCAtNTI0MCwxNyArNTIyMiwxNSBAQCBTRUxFQ1QgeC5p ZCwgeS5pZCBGUk9NIGZyYWN0X3QgeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JE RVIgQlkgeC5pZCBBUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAg IC0+ICBNZXJnZSBBcHBlbmQKLSAgICAgICAgIFNvcnQgS2V5OiB4LmlkCi0gICAgICAgICAtPiAg TWVyZ2UgTGVmdCBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoeF8xLmlkID0geV8x LmlkKQorICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKHguaWQg PSB5LmlkKQorICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHhfMQotICAgICAgICAgICAg ICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHlf MQotICAgICAgICAgLT4gIE1lcmdlIExlZnQgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2UgQ29u ZDogKHhfMi5pZCA9IHlfMi5pZCkKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4g dXNpbmcgZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB4XzIKKyAgICAgICAgIC0+ICBBcHBlbmQK KyAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZnJhY3RfdDBfcGtleSBv biBmcmFjdF90MCB5XzEKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg ZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB5XzIKLSgxMSByb3dzKQorKDkgcm93cykKIAogRVhQ TEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIHguaWQsIHkuaWQgRlJPTSBmcmFjdF90IHggTEVGVCBK T0lOIGZyYWN0X3QgeSBVU0lORyAoaWQpIE9SREVSIEJZIHguaWQgREVTQyBMSU1JVCAxMDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAppbmRleCBjZjZiMzJkMTE3My4uODU0 OTYwMWUzYmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTg1 MCwxMCArODUwLDExIEBAIHdoZXJlICh0MS5hLCB0Mi5hKSBpbiAoc2VsZWN0IGEsIGEgZnJvbSB1 bmlxdWVfdGJsX3AgdDMpCiBvcmRlciBieSB0MS5hLCB0Mi5hOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQgS2V5OiB0MS5hCi0gICAtPiAgTmVzdGVkIExv b3AKLSAgICAgICAgIE91dHB1dDogdDFfMS5hLCB0MV8xLmIsIHQyXzEuYSwgdDJfMS5iCisgTWVy Z2UgSm9pbgorICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0Mi5hLCB0Mi5iCisgICBNZXJnZSBDb25k OiAodDEuYSA9IHQyLmEpCisgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICBTb3J0IEtleTog dDEuYQogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzEuYSwgdDFfMS5iLCB0M18xLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTg2Mywx NSArODY0LDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsKICAgICAgICAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDFfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDEg dDFfMQogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLmEsIHQxXzEuYgogICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzEuYSA9IHQzXzEuYSkKLSAgICAgICAgIC0+ ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAg ICAgICAgICBDYWNoZSBLZXk6IHQxXzEuYQotICAgICAgICAgICAgICAgQ2FjaGUgTW9kZTogbG9n aWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wMV9h X2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo dDJfMS5hID0gdDFfMS5hKQotICAgLT4gIE5lc3RlZCBMb29wCi0gICAgICAgICBPdXRwdXQ6IHQx XzIuYSwgdDFfMi5iLCB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIuYSwgdDFfMi5iLCB0M18yLmEKICAgICAgICAgICAg ICAgIC0+ICBVbmlxdWUKQEAgLTg4MSwxNSArODczLDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsK ICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHgg b24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDFfMgogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLmEsIHQxXzIuYgogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzIu YSA9IHQzXzIuYSkKLSAgICAgICAgIC0+ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAgICAgICBDYWNoZSBLZXk6IHQxXzIuYQotICAgICAg ICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgdW5pcXVlX3RibF9wMl9hX2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMiB0Ml8y Ci0gICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMi5hID0gdDFfMi5hKQotICAgLT4gIE5lc3RlZCBM b29wCi0gICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFfMy5iLCB0Ml8zLmEsIHQyXzMuYgogICAg ICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFf My5iLCB0M18zLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTkwMiwxNCArODg1LDE2 IEBAIG9yZGVyIGJ5IHQxLmEsIHQyLmE7CiAgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyB1bmlxdWVfdGJsX3AzX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AzIHQxXzMKICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy5hLCB0MV8zLmIKICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh0MV8zLmEgPSB0M18zLmEpCi0gICAgICAgICAtPiAgTWVtb2l6 ZQotICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLmEsIHQyXzMuYgotICAgICAgICAgICAgICAg Q2FjaGUgS2V5OiB0MV8zLmEKLSAgICAgICAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iCisgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB1bmlxdWVfdGJs X3AxX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS5hLCB0Ml8xLmIKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDJfMgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wM19hX2lkeCBvbiBwdWJsaWMudW5p cXVlX3RibF9wMyB0Ml8zCiAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMuYSwgdDJf My5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMy5hID0gdDFfMy5hKQot KDU5IHJvd3MpCisoNDQgcm93cykKIAogcmVzZXQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsK IGRyb3AgdGFibGUgdW5pcXVlX3RibF9wOwotLSAKMi41MS4wCgo= --000000000000e6740f0642efcc52 Content-Type: application/octet-stream; name="v3-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v3-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnnqd882 RnJvbSAwYmM3MjlhNjBjMWU0MjIwNTY0ZWJlZjcxNDM1NjI0MDY5NWQwNDg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYzIDMv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGZhOTA3ZmE0NzJl Li42NTM4ZmZjYWZiMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA0YzQzZmQwYjE5Yi4uOTI4YjhkODRhZDggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzQsOCArMTg5MSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29s CQltYXRjaF9wYXJ0aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDU4LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1 NywxMyArMjA4NCwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA3NSw2 ICsyMTA1LDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwODUsNiArMjExNiw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDk2LDYgKzIxMjgsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIxMDgsMTIgKzIxNDEsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMjEsNiArMjE1Niw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIyMyw3ICsyMjU5 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjMyLDYgKzIyNjksOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjI0Niw2 ICsyMjg1LDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNTQsNiArMjI5NSw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY1LDEwICsyMzA4LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI3NywxNCArMjMyNSwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MTMsNyArMjM2OSw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggNWQxZmMzODk5ZGEuLmMxZWQwZDM4NzBmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IDhhZjA5MWJhNjQ3Li44OGI0YzU5MDFiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDlkNTI2MjY1MWU3Li5lYjYy Nzk0YWVjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IGY1MjhmMDk2YTU2Li5jYTIyNThlNDRkMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTg0Myw3ICs4NDMsNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4OSw3ICs4ODksNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTgsNiArMTAxOCw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMjQsOCArMTIyNSwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IGU0ZmQ2OTUw ZmFkLi5jMGE5ODExYjEzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMzAwLDYgKzEzMDAsNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMDksNiArMTMxMCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3MSw2ICsxNDczLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Niw2ICsxNDg5LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NTAsNiArMzk1NCw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGNmM2ExNmI4YjBl Li43NWE3MDQ4OWU1YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzEsNiArMjE3MSwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBhcmUgY29uc29saWRhdGVkIGRvd24gdG8gb25lLCB3ZSBzdG9yZSB0aGUgUlRJCisgKiBz ZXRzIGZvciB0aGUgb21pdHRlZCBwYXRocyBpbiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cy4gVGhp cyBpcyBub3QgbmVjZXNzYXJ5CisgKiBmb3IgcGxhbm5pbmcgb3IgZXhlY3V0aW9uOyB3ZSBkbyBp dCBmb3IgdGhlIGJlbmVmaXQgb2YgY29kZSB0aGF0IHdhbnRzCisgKiB0byBpbnNwZWN0IHRoZSBm aW5hbCBwbGFuIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBjYW1lIHRvIGJlLgorICoKICAqIE5vdGU6 IGl0IGlzIHBvc3NpYmxlIGZvciAic3VicGF0aHMiIHRvIGNvbnRhaW4gb25seSBvbmUsIG9yIGV2 ZW4gbm8sCiAgKiBlbGVtZW50cy4gIFRoZXNlIGNhc2VzIGFyZSBvcHRpbWl6ZWQgZHVyaW5nIGNy ZWF0ZV9hcHBlbmRfcGxhbi4KICAqIEluIHBhcnRpY3VsYXIsIGFuIEFwcGVuZFBhdGggd2l0aCBu byBzdWJwYXRocyBpcyBhICJkdW1teSIgcGF0aCB0aGF0CkBAIC0yMTg2LDYgKzIxOTIsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcHBlbmRQYXRoCiAJLyogSW5kZXggb2YgZmlyc3QgcGFydGlhbCBwYXRo IGluIHN1YnBhdGhzOyBsaXN0X2xlbmd0aChzdWJwYXRocykgaWYgbm9uZSAqLwogCWludAkJCWZp cnN0X3BhcnRpYWxfcGF0aDsKIAlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGlt aXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIH0gQXBwZW5kUGF0aDsKIAogI2RlZmluZSBJU19EVU1NWV9BUFBFTkQocCkgXApA QCAtMjIwMiwxMiArMjIwOSwxNSBAQCBleHRlcm4gYm9vbCBpc19kdW1teV9yZWwoUmVsT3B0SW5m byAqcmVsKTsKIC8qCiAgKiBNZXJnZUFwcGVuZFBhdGggcmVwcmVzZW50cyBhIE1lcmdlQXBwZW5k IHBsYW4sIGllLCB0aGUgbWVyZ2luZyBvZiBzb3J0ZWQKICAqIHJlc3VsdHMgZnJvbSBzZXZlcmFs IG1lbWJlciBwbGFucyB0byBwcm9kdWNlIHNpbWlsYXJseS1zb3J0ZWQgb3V0cHV0LgorICoKKyAq IGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgZm9y IEFwcGVuZFBhdGguCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kUGF0aAogewogCVBh dGgJCXBhdGg7CiAJTGlzdAkgICAqc3VicGF0aHM7CQkvKiBsaXN0IG9mIGNvbXBvbmVudCBQYXRo cyAqLwogCUNhcmRpbmFsaXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQg dHVwbGVzLCBvciAtMSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogfSBN ZXJnZUFwcGVuZFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDVkMDUyMGQ1ZTU4 Li4wNDViN2VlODRhNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTM5NCw5ICszOTQsMTYgQEAg c3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIHN0cnVj dCBiZWxvdyAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7CiAJUGxhbgkJcGxhbjsKKwogCS8q IFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQg ICphcHByZWxpZHM7CisKKwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0 ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK KworCS8qIHBsYW5zIHRvIHJ1biAqLwogCUxpc3QJICAgKmFwcGVuZHBsYW5zOworCiAJLyogIyBv ZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQluYXN5bmNwbGFuczsKIApAQCAtNDI2LDYg KzQzMywxMCBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCS8qIFJUSXMgb2YgYXBwZW5k cmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQgICphcHByZWxpZHM7CiAK KwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5v ZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKworCS8qIHBsYW5zIHRv IHJ1biAqLwogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1 c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBzdHJ1Y3QgU29ydDogKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhub2RlLmgKaW5kZXggOTU1ZTkwNTY4NTguLjQ0MzcyNDhjYjY3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtNzAsMTIgKzcwLDE0IEBAIGV4dGVybiBUaWRSYW5nZVBhdGggKmNy ZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBlbmRf cGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICBMaXN0 ICpzdWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMg cmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBh cmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBl bmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJ IExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBl eHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCi0tIAoyLjUxLjAKCg== --000000000000e6740f0642efcc52 Content-Type: application/octet-stream; name="v3-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v3-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnnqd8a5 RnJvbSBkYjJiNTNiZjQxZjQwNWI4M2FjNGUzYzYyMTcwM2EzMjUzMDg1MGE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgNCBOb3YgMjAyNSAxNDo0NTozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjMgNi82 XSBXSVA6IEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNp bGl0eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2lj ZXMKc28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRo b3JpemF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBp bnNpc3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgYmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1 c2VycyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNv bnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7 IG5ldmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNp bHkgc29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KCldlIHRh a2UgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJvZHVjZSB0 ZXh0dWFsCm91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRlc2NyaWJl cyBrZXkgZGVjaXNpb25zIG1hZGUKZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZpY2UgaXMg cHJvdmlkZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwpjeWNsZXMsIGl0IHdpbGwgZm9yY2UgdGhv c2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluIHRoZSBzYW1lIHdheS4KTm90IGFsbCBwbGFu bmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7IGZvciBleGFtcGxl LApkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJlIGN1cnJlbnRs eSBvdXQgb2Ygc2NvcGUsCmFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFuIGFkdmljZSBj YW4gYWxzbyBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIsCm9yIGV2ZW4gd3JpdHRlbiBmcm9tIHNjcmF0 Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8KZ2VuZXJhdGUgb3V0Y29t ZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4gUGFydGlhbAphZHZp Y2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNvbWVzIGJ1dCBu b3Qgb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9ubHkgb24gc3Bl Y2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0ZXMgdGhhdCBt aWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9zc2libHktaW5j b3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1c2VmdWwgdG8K dXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZmZWN0cyBzZWxl Y3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0aGF0IGlzIG91 dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMganVzdCBhIHByb29m IG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5kIGEgbG90IG9mIHRo ZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50YXRpb24KYW5kIG5v dCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5nIHRlc3QgY2FzZXMg ZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJlIGNhbGxlZCBvdXQg YnkgWFhYLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAg fCAgICAzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNDYgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwg IDI3NSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8 ICAzMjAgKysrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAg IHwgIDI5MiArKysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91 dCB8ICAyOTcgKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAgICAgICAgICAg ICAgfCAgIDY0ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91 dCB8ICAyNDMgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0ICAg ICAgfCAgNzU3ICsrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRh eC5vdXQgICAgfCAgIDU5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgICAg ICAgICAgICB8ICAgNzAgKwogLi4uL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAu c3FsICAgIHwgICA0MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMg ICAgICAgfCAgNDU0ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmNvbnRyb2wgfCAgICA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu aCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAg ICAgICAgIHwgIDM5MiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggICAg ICAgICAgICAgfCAgMjA0ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9y LmMgICAgICAgfCAgNjM3ICsrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5oICAgICAgIHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jICAgICAgfCAgNDc2ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oICAgICAgfCAgIDUyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2lu LmMgICAgICAgICAgICB8ICA2MTUgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf am9pbi5oICAgICAgICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9v dXRwdXQuYyAgICAgICAgICB8ICA2MjggKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmggICAgICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wYXJzZXIueSAgICAgICAgICB8ICAzMzcgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYyAgICAgICAgIHwgMTcwNiArKysrKysrKysrKysrKysrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCAgICAgICAgIHwgICAxNyArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jICAgICAgICAgICAgfCAgMjc4ICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaCAgICAgICAgICAgIHwgICA4NiArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sICAgICAgICAgfCAgMjk5ICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgICAgICAgICAgIHwgIDQ5MCArKysrKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExMyArKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jICAgICAgICAgIHwgIDg2MiArKysrKysrKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCAgICAgICAgICB8ICAxMjEgKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgICAgICAgICB8ICAgNzYgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwgICAgIHwgICA5NiArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDc2ICsKIC4u Li9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDAgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA3OCArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCAgICAgICAgICAgfCAgMTk1ICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDQyICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxMzkgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMzcgKwogNDYgZmls ZXMgY2hhbmdlZCwgMTEyMDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvZ2F0aGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9w YXJ0aXRpb253aXNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xv Y2FsX2NvbGxlY3Rvci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZp bGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2 NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2 ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxp bnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3By ZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdp dCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGVkMzBl ZTdkNjM5Li5jYjcxOGRiZGFjMCAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysg Yi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8n KQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcp CiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRf c3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25v cmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFy c2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kN2UwNmZjNzRhZQot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAs MCArMSw0NiBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9i aWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9h ZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVu dGlmaWVyLm8gXAorCXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNl ci5vIFwKKwlwZ3BhX3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5v IFwKKwlwZ3BhX3Ryb3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxh bl9hZHZpY2UKK0RBVEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJw Z19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitS RUdSRVNTID0gZ2F0aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNj YW4KK1RBUF9URVNUUyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFy c2VyLmMgcGdwYV9zY2FubmVyLmMKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2Nv bmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdY UykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3RvcF9idWlsZGRpciA9 IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNs dWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworIyBT ZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0IHRoZSBmb2xsb3dp bmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJdG91Y2ggJEAKKwor cGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRoZXNlIGRlcGVuZGVu Y2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZvIGJ1aWx0OgorcGdw YV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURN RQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDU5MGNkMDNjZTUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQpAQCAtMCwwICsx LDI3NSBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxhbiBBZHZpY2UKKz09 PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxhbmd1YWdlIGZvciAi cGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0YWluIGtleSBwbGFu bmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBsYW4KK3N0YWJpbGl0 eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtlIHRvIGtlZXAgZ2V0 dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0byBleHBlcmltZW50 IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkgdGhlIG9wdGltaXpl ci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBwb3NzaWJsZSBwbGFu bmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9mIHBsYW5zCit0aGF0 IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFuIGNvc3QuIChUaGVy ZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBleGFjdGx5IHRoaXMg bm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0aW9uIGVudGlyZWx5 IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtub3cgaXQgY2Fubm90 IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2VkIHJlamVjdGlvbgor ZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dlbmVyYWxseSwgcGxh biBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQgYWR2aWNlIGl0ZW1z LAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBsaXN0IG9mIGFkdmlj ZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hfSk9JTihiYXJAc3Mp IiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9mIHdoaWNoIGFwcGxp ZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBvZgord2hpY2ggYXBw bGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBzaW1wbGUgZXhhbXBs ZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247IHNlZSAiUmVsYXRp b24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNvIGJlIGFwcGxpZWQg dG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9KT0lOKGJheiAoYmxl dGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUgc2luZ2xlCityZWxh dGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRlbSBsaXN0IGNvbnRh aW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRoaXMgbW9kdWxlIGtu b3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4KK2FscmVhZHktZXhp c3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5nIGZ1dHVyZSBwbGFu bmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQgdG8gYmUgInJvdW5k LXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBwbGFuIGFuZCB0aGVu IGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUsIGVhY2ggcGllY2Ug b2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRoZSBleGFjdGx5IHRo ZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBnZW5lcmF0ZWQgd2l0 aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBzdWNjZXNmdWxseSBl bmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0byBpdCBiZWluZyBn ZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8KK2ludGVu dGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJ2 ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIG9mIGEgZnVuY3Rp b24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwgb3IgaWYgeW91IGRy b3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2aWNlCitpc24ndCBn b2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1RoaXMgbW9kdWxlIGFp bXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRlZCBhZHZpY2Ugd2l0 aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBnb29kIGFkdmljZSBv ciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZpY2UsIHdoZXRoZXIg ZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3IgbWFudWFsbHkgd3Jp dHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlzIGFzIHVzZXIgZXJy b3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxpa2VseSB0aGF0IGFw cGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVseSByZXF1aXJlZCB0 byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBzdHJhdGVneSB0aGFu IGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFyZSBmcmVlCit0byBl eHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5rIGJlc3QuCisKK1Jl bGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitVbmlxdWVseSBpZGVu dGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFpbiBwaWVjZSBvZgor YWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIgYmFzaWMgYXBwcm9h Y2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCB0 aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQgc2FtZSByZWxhdGlv biBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNhbiBhcHBlYXIgaW4g bW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25j ZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJhcikgeCBKT0lOIGZv by4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55IGNvbWJpbmF0aW9u IG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBUaGVyZWZvcmUsIG91 cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBpczoKKworYWxpYXNf bmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBs YW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlhc19uYW1lIGFyZSBv cHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hlbiBhIGNvbXBvbmVu dCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVzdCBhbHNvIGJlIG9t aXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmluZyBjaGlsZHJlbiBv ZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9jY3VycmVuY2UgbnVt YmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhlIHBhcnRpdGlvbiBz Y2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBmb3IgY2hpbGRyZW4g b2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0aGUKK3BhcnRpdGlv bl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlzIGEgcGFydGl0aW9u X25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0aGUgbmFtZSBhbmQg b21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wLWxl dmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0KKworRm9yIG1hbnkg dHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3NzaWJsZTsgZm9yIGlu c3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBhIHN1YnF1ZXJ5IHNj YW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVmcyBwcm9jZXNzaW5n LCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUKK2Jhc2ljIGFwcHJv YWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5IHRvIHJlbGF0aW9u cywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisKK1dlIHRlbmQgdG8g dGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlvbiwgYW5kIHRoYXQn cworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuIEZvciBpbnN0 YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0aGluZyBtYXkgYmUg cmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGluIGVmZmVjdCwgaXMg YSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNvbGxhcHNlZAorcG9y dGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2libGUgdG8gaW5qZWN0 IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNlcyBhbiBlbnRpcmUg am9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2VzLCBpdCB3b3VsZCB0 YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVkCitieSBjdXJseSBi cmFuY2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikpIHdvdWxkIG1lYW4g dGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBmb3IgZm9vIGFzIGEg c2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2YgYmFyIGFuZCBiYXog YXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAorcHJlc2VudC4KKwor Rm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxhdGlvbiBiZWluZyBz Y2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBtdXN0IGJlIHNwZWNp ZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHggYmFyIGJhcl9iX2lk eCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4LW9ubHkKK3NjYW4p IHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZvbywgYW5kIHRoYXQg YW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdoZW4gc2Nhbm5pbmcg YmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBhbGxvdyBmb3IgYSBtb3JlIGNvbXBsaWNhdGVkIGlu ZGV4IHNwZWNpZmljYXRpb24uIEZvcgorZXhhbXBsZSwgQklUTUFQX0hFQVBfU0NBTihmb28gJiYo Zm9vX2FfaWR4IHx8KGZvb19iX2lkeCBmb29fY19pZHgpKSkgc2F5cwordGhhdCBmb28gc2hvdWxk IGJlIHNjYW5uZWQgdXNpbmcgYSBCaXRtYXBIZWFwU2NhbiBvdmVyIGEgQml0bWFwQW5kIGJldHdl ZW4KK2Zvb19hX2lkeCBhbmQgdGhlIHJlc3VsdCBvZiBhIEJpdG1hcE9yIGJldHdlZW4gZm9vX2Jf aWR4IGFuZCBmb29fY19pZHguCisKK1hYWDogQ3VycmVudGx5LCBCSVRNQVBfSEVBUF9TQ0FOIGRv ZXMgbm90IGVuZm9yY2UgdGhlIGluZGV4IHNwZWNpZmljYXRpb24sCitiZWNhdXNlIHRoZSBhdmFp bGFibGUgaG9va3MgYXJlIGluc3VmZmljaWVudCB0byBkbyBzby4gSXQncyBwb3NzaWJsZSB0aGF0 Cit0aGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGV4Y2x1ZGUgdGhlIGluZGV4IHNwZWNpZmljYXRp b24gYWx0b2dldGhlciBhbmQKK3NpbXBseSBpbnNpc3QgdGhhdCBzb21lIHNvcnQgb2YgYml0bWFw IGhlYXAgc2NhbiBpcyB1c2VkOyBhbHRlcm5hdGl2ZWx5LAord2UgbmVlZCBiZXR0ZXIgaG9va3Mu CisKK0pvaW4gT3JkZXIgQWR2aWNlCis9PT09PT09PT09PT09PT09PQorCitUaGUgSk9JTl9PUkRF UiB0YWcgc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBzZXZlcmFsIHRhYmxlcyB0aGF0IGFy ZQorcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0gc2hvdWxkIGJlIGpvaW5lZC4gRWFjaCBz dWJxdWVyeSAoZXhjZXB0IGZvcgordGhvc2UgdGhhdCBhcmUgaW5saW5lZCkgaXMgYSBzZXBhcmF0 ZSBqb2luIHByb2JsZW0uIFdpdGhpbiBhIHN1YnF1ZXJ5LAorcGFydGl0aW9ud2lzZSBqb2lucyBj YW4gY3JlYXRlIGFkZGl0aW9uYWwsIHNlcGFyYXRlIGpvaW4gcHJvYmxlbXMuIEhlbmNlLAorcXVl cmllcyBpbnZvbHZpbmcgcGFydGl0aW9ud2lzZSBqb2lucyBtYXkgdXNlIEpPSU5fT1JERVIoKSBt YW55IHRpbWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1Y3R1cmUgdG8gYmUg YW4gb3V0ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykgc2F5cyB0aGF0IHQx IGlzIHRoZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitmaXJzdCB0byB0MiBh bmQgdGhlbiB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBhZGRpdGlvbmFsIHRh YmxlcywKK3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIgdGhlIGpvaW4gYmV0 d2VlbiB0MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4gR2VuZXJhdGVkIGpv aW4gYWR2aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUgam9pbiBwcm9ibGVt LCBidXQgbWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBkbyBzby4KKworRm9y IHRyZWVzIHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQu IEZvciBleGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRoYXQgdGhlIHRvcC1s ZXZlbCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBhbmQgYSBqb2luIGJl dHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4gc2hvdWxkCitiZSBj b25zdHJ1Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFuZCB0MyBpcyBvbiB0 aGUgaW5uZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9zc2libGUgdG8gZnVs bHkgc3BlY2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBleGFtcGxlLCBpZiB0 MiBhbmQgdDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9tIHNjYW4gb3IgZm9y ZWlnbgorc2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVpbmcgcGVyZm9ybWVk IGJldHdlZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUgdG8gc2F5IHRoYXQg dDIgaXMgdGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFibGUsCitvciB0aGUg b3RoZXIgd2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3VjaCBjYXNlcywgd2Ug Z2VuZXJhdGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMsIGludGVuZGluZyB0 byBpbmRpY2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQxIHt0MiB0M30pIHNh eXMgdGhhdCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlIG91dGVyCitz aWRlIGFuZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIg c2lkZSwgYnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3QgYmUgcGVyZm9ybWVk IG9yIGFueXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBwZWFyIG9uIHdoaWNo IHNpZGUgb2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQgb2Ygam9pbiBoYXMg c2lkZXMuCisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09PT09PT09PQorCitU YWdzIHN1Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0aG9kIHRoYXQgc2hv dWxkIGJlIHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUgc3BlY2lmaWNhbGx5 LCBORVNURURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBwbGFuIHNob3VsZCBw dXQgdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRoZSBpbm5lcgorc2lk ZSBvZiBhIHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlhbGl6YXRpb24gb3Ig bWVtb2l6YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBqb2luIGJldHdlZW4g dGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhlIHJlbGF0aW9uIHdo b3NlIGlkZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVzdGVkCitsb29w LiBIZW5jZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3aWxsIGJlIE4tMSBw aWVjZXMgb2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0ZWd5IGFkdmljZSBp cyByZXF1aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpvaW4gcHJvYmxlbS4K KworQ29uc2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBhZHZpY2UgYW5kIGpv aW4gc3RyYXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRvIHNheSB0aGF0IE5F U1RFRF9MT09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1lYW4gdGhhdCB4IHNo b3VsZCBhcHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhlciBvZiBhIG5lc3Rl ZAorbG9vcCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5lciBzaWRlLCBidXQg dGhpcyBkZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2UuIEl0IGdpdmVzIHRo ZSBwbGFubmVyIHRvbyBtdWNoIGZyZWVkb20gdG8gZG8gdGhpbmdzIHRoYXQKK2JlYXIgbGl0dGxl IHJlc2VtYmxhbmNlIHRvIHdoYXQgdGhlIHVzZXIgcHJvYmFibHkgaGFkIGluIG1pbmQuIFRoaXMg bWFrZXMKK29ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmFjdGljYWwgZGlmZmVyZW5jZSBpbiB0 aGUgY2FzZSBvZiBhIG1lcmdlIGpvaW4gb3IKK3VucGFyYW1ldGVyaXplZCBuZXN0ZWQgbG9vcCwg YnV0IGZvciBhIHBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3Agb3IgYSBoYXNoCitqb2luLCB0aGUg dHdvIHNpZGVzIGFyZSB0cmVhdGVkIHZlcnkgZGlmZmVyZW50bHkgYW5kIHNheWluZyB0aGF0IGEg Y2VydGFpbgorcmVsYXRpb24gc2hvdWxkIGJlIGludm9sdmVkIGluIG9uZSBvZiB0aG9zZSBvcGVy YXRpb25zIHdpdGhvdXQgc2F5aW5nIHdoaWNoCityb2xlIGl0IHNob3VsZCB0YWtlIGlzbid0IHNh eWluZyBtdWNoLgorCitUaGlzIGNob2ljZSBvZiBkZWZpbml0aW9uIGltcGxpZXMgdGhhdCBqb2lu IHN0cmF0ZWd5IGFkdmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRlciBjb25zdHJhaW50 cy4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQgYmFyLAorSEFTSF9K T0lOKGJhcikgaW1wbGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJsZS4gT3RoZXJ3aXNl LCBpdCB3b3VsZAorYmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGggdGhlIGlubmVyIHNp ZGUgb2YgYSBIYXNoIEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBkZWZpbml0aW9uLCBp dCdzIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2luIG9yZGVyIGFkdmlj ZSBidXQgYXBwbHlpbmcgdGhlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiBGb3IgZXhhbXBsZSwKK2Nv bnNpZGVyIGEgc3RhciBzY2hlbWEgd2l0aCB0YWJsZXMgZmFjdCwgZGltMSwgZGltMiwgZGltMywg ZGltNCwgYW5kIGRpbTUuCitUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYWR2aWNlIG1pZ2h0 IHNwZWNpZnkgSk9JTl9PUkRFUihmYWN0IGRpbTEgZGltMworZGltNCBkaW0yIGRpbTUpIEhBU0hf Sk9JTihkaW0yIGRpbTQpIE5FU1RFRF9MT09QX1BMQUlOKGRpbTEgZGltMyBkaW01KS4KK0RlbGV0 aW5nIHRoZSBKT0lOX09SREVSIGFkdmljZSBhbGxvd3MgdGhlIHBsYW5uZXIgdG8gcmVvcmRlciB0 aGUgam9pbnMKK2hvd2V2ZXIgaXQgbGlrZXMgd2hpbGUgc3RpbGwgZm9yY2luZyB0aGUgc2FtZSBj aG9pY2Ugb2Ygam9pbiBtZXRob2QuIFRoaXMKK3NlZW1zIHBvdGVudGlhbGx5IHVzZWZ1bCwgYW5k IGlzIG9uZSByZWFzb24gd2h5IGEgdW5pZmllZCBzeW50YXggdGhhdCBjb250cm9scworYm90aCBq b2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCBpbiBhIHNpbmdsZSBsb2N1dGlvbiB3YXMgbm90IGNo b3Nlbi4KKworQWR2aWNlIENvbXBsZXRlbmVzcworPT09PT09PT09PT09PT09PT09PQorCitBbiBl c3NlbnRpYWwgZ3VpZGluZyBwcmluY2lwbGUgaXMgdGhhdCBubyBpbmZlcmVuY2UgbWF5IG1hZGUg b24gdGhlIGJhc2lzCitvZiB0aGUgYWJzZW5jZSBvZiBhZHZpY2UuIFRoZSB1c2VyIGlzIGVudGl0 bGVkIHRvIHJlbW92ZSBhbnkgcG9ydGlvbiBvZiB0aGUKK2dlbmVyYXRlZCBhZHZpY2Ugd2hpY2gg dGhleSBkZWVtIHVuc3VpdGFibGUgb3IgY291bnRlcnByb2R1Y3RpdmUgYW5kIHRoZQorcmVzdWx0 IHNob3VsZCBvbmx5IGJlIHRvIGluY3JlYXNlIHRoZSBmbGV4aWJpbGl0eSBhZmZvcmRlZCB0byB0 aGUgcGxhbm5lci4KK1RoaXMgbWVhbnMgdGhhdCBpZiBhZHZpY2UgY2FuIHNheSB0aGF0IGEgY2Vy dGFpbiBvcHRpbWl6YXRpb24gb3IgdGVjaG5pcXVlCitzaG91bGQgYmUgdXNlZCwgaXQgc2hvdWxk IGFsc28gYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9yCit0ZWNobmlxdWUg c2hvdWxkIG5vdCBiZSB1c2VkLiBXZSBzaG91bGQgbmV2ZXIgYXNzdW1lIHRoYXQgdGhlIGFic2Vu Y2Ugb2YgYW4KK2luc3RydWN0aW9uIHRvIGRvIGEgY2VydGFpbiB0aGluZyBtZWFucyB0aGF0IGl0 IHNob3VsZCBub3QgYmUgZG9uZTsgYWxsCitpbnN0cnVjdGlvbnMgbXVzdCBiZSBleHBsaWNpdC4K KworU2VtaWpvaW4gVW5pcXVlbmVzcworPT09PT09PT09PT09PT09PT09PQorCitGYWNlZCB3aXRo IGEgc2VtaWpvaW4sIHRoZSBwbGFubmVyIGNvbnNpZGVycyBib3RoIGEgZGlyZWN0IGltcGxlbWVu dGF0aW9uCithbmQgYSBwbGFuIHdoZXJlIHRoZSBvbmUgc2lkZSBpcyBtYWRlIHVuaXF1ZSBhbmQg dGhlbiBhbiBpbm5lciBqb2luIGlzCitwZXJmb3JtZWQuIFdlIGVtaXQgU0VNSUpPSU5fVU5JUVVF KCkgYWR2aWNlIHdoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbiBvY2N1cnMKK2FuZCBTRU1JSk9JTl9O T05fVU5JUVVFKCkgYWR2aWNlIHdoZW4gaXQgZG9lc24ndC4gVGhlc2UgaXRlbXMgd29yayBsaWtl Citqb2luIHN0cmF0ZWd5IGFkdmljZTogdGhlIGlubmVyIHNpZGUgb2YgdGhlIHJlbGV2YW50IGpv aW4gaXMgbmFtZWQsIGFuZCB0aGUKK2Nob3NlbiBqb2luIG9yZGVyIG11c3QgYmUgY29tcGF0aWJs ZSB3aXRoIHRoZSBhZHZpY2UgaGF2aW5nIHNvbWUgZWZmZWN0LgorCitYWFg6IEN1cnJlbnRseSwg U0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSBpcyBlbWl0dGVkIGluIHNvbWUgc2l0dWF0aW9u cword2hlcmUgdGhlIFNFTUlKT0lOX1VOSVFVRSgpIGFwcHJvYWNoIHdhcyBkZXRlcm1pbmVkIHRv IGJlIG5vbi12aWFibGU7IGlkZWFsbHksCit3ZSBzaG91bGQgYXZvaWQgdGhhdC4KKworWFhYOiBS aWdodCBzZW1pam9pbnMgaGF2ZW4ndCBiZWVuIHByb3Blcmx5IHRob3VnaHQgdGhyb3VnaC4gVGhl IGFzc29jaWF0ZWQKK2NvZGUgcHJvYmFibHkganVzdCBkb2Vzbid0IHdvcmsuCisKK1hYWDogU2Vt aWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UgaGFzIG5vIGF1dG9tYXRlZCB0ZXN0cyBhbmQgbmVlZCBz dWJzdGFudGlhbGx5Cittb3JlIG1hbnVhbCB0ZXN0aW5nLgorCitQYXJ0aXRpb253aXNlCis9PT09 PT09PT09PT09CisKK1BBUlRJVElPTldJU0UoKSBhZHZpc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lm eSBib3RoIHRob3NlIHBhcnRpdGlvbndpc2Ugam9pbnMKK3doaWNoIHNob3VsZCBiZSBwZXJmb3Jt ZWQgYW5kIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgcGVyZm9ybWVkOyB0aGUgaWRlYQoraXMg dGhhdCBlYWNoIGFyZ3VtZW50IHRvIFBBUlRJVElPTldJU0Ugc3BlY2lmaWVzIGEgc2V0IG9mIHJl bGF0aW9ucyB0aGF0CitzaG91bGQgYmUgc2Nhbm5lZCBwYXJ0aXRpb253aXNlIGFmdGVyIGJlaW5n IGpvaW5lZCB0byBlYWNoIG90aGVyIGFuZCBub3RoaW5nCitlbHNlLiBIZW5jZSwgZm9yIGV4YW1w bGUsIFBBUlRJVElPTldJU0UoKHQxIHQyKSB0Mykgc3BlY2lmaWVzIHRoYXQgdGhlCitxdWVyeSBz aG91bGQgY29udGFpbiBhIHBhcnRpdGlvbndpc2Ugam9pbiBiZXR3ZWVuIHQxIGFuZCB0MiBhbmQg dGhhdCB0Mworc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIGFueSBwYXJ0aXRpb253aXNlIGpvaW4uIElm IHRoZXJlIGFyZSBubyBvdGhlciByZWxzCitpbiB0aGUgcXVlcnksIHNwZWNpZnlpbmcganVzdCBQ QVJUSVRJT05XSVNFKCh0MSB0MikpIHdvdWxkIGhhdmUgdGhlIHNhbWUKK2VmZmVjdCwgc2luY2Ug dGhlcmUgd291bGQgYmUgbm8gb3RoZXIgcmVscyB0byB3aGljaCB0MyBjb3VsZCBiZSBqb2luZWQg aW4KK2EgcGFydGl0aW9ud2lzZSBmYXNoaW9uLgorCitQYXJhbGxlbCBRdWVyeSAoR2F0aGVyLCBl dGMuKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRWFjaCBhcmd1bWVudCB0byBH QVRIRVIoKSBvciBHQVRIRVJfTUVSR0UoKSBpcyBhIHNpbmdsZSByZWxhdGlvbiBvciBhbgorZXhh Y3Qgc2V0IG9mIHJlbGF0aW9ucyBvbiB0b3Agb2Ygd2hpY2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIG5vZGUsCityZXNwZWN0aXZlbHksIHNob3VsZCBiZSBwbGFjZWQuIEVhY2ggYXJndW1lbnQg dG8gTk9fR0FUSEVSKCkgaXMgYSBzaW5nbGUKK3JlbGF0aW9uIHRoYXQgc2hvdWxkIG5vdCBhcHBl YXIgYmVuZWF0aCBhbnkgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlOwordGhhdCBpcywgcGFy YWxsZWxpc20gc2hvdWxkIG5vdCBiZSB1c2VkLgorCitJbXBsaWNpdCBKb2luIE9yZGVyIENvbnN0 cmFpbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gSk9JTl9PUkRF UigpIGFkdmljZSBpcyBub3QgcHJvdmlkZWQgZm9yIGEgcGFydGljdWxhciBqb2luIHByb2JsZW0s CitvdGhlciBwaWVjZXMgb2YgYWR2aWNlIG1heSBzdGlsbCBpbmNpZGVudGFsbHkgY29uc3RyYWlu dCB0aGUgam9pbiBvcmRlci4KK0ZvciBleGFtcGxlLCBhIHVzZXIgd2hvIHNwZWNpZmllcyBIQVNI X0pPSU4oKGZvbyBiYXIpKSBpcyBleHBsaWNpdGx5IHNheWluZwordGhhdCB0aGVyZSBzaG91bGQg YmUgYSBoYXNoIGpvaW4gd2l0aCBleGFjdGx5IGZvbyBhbmQgYmFyIG9uIHRoZSBvdXRlcgorc2lk ZSBvZiBpdCwgYnV0IHRoYXQgYWxzbyBpbXBsaWVzIHRoYXQgZm9vIGFuZCBiYXIgbXVzdCBiZSBq b2luZWQgdG8KK2VhY2ggb3RoZXIgYmVmb3JlIGVpdGhlciBvZiB0aGVtIGlzIGpvaW5lZCB0byBh bnl0aGluZyBlbHNlLiBPdGhlcndpc2UsCit0aGUgam9pbiB0aGUgdXNlciBpcyBhdHRlbXB0aW5n IHRvIGNvbnN0cmFpbnQgd29uJ3QgYWN0dWFsbHkgb2NjdXIgaW4gdGhlCitxdWVyeSwgd2hpY2gg ZW5kcyB1cCBsb29raW5nIGxpa2UgdGhlIHN5c3RlbSBoYXMganVzdCBkZWNpZGVkIHRvIGlnbm9y ZQordGhlIGFkdmljZSBhbHRvZ2V0aGVyLgorCitGdXR1cmUgV29yaworPT09PT09PT09PT0KKwor V2UgZG9uJ3QgaGFuZGxlIGNob2ljZSBvZiBhZ2dyZWdhdGlvbjogaXQgd291bGQgYmUgbmljZSB0 byBiZSBhYmxlIHRvIGZvcmNlCitzb3J0ZWQgb3IgZ3JvdXBlZCBhZ2dyZWdhdGlvbi4gSSdtIGd1 ZXNzaW5nIHRoaXMgY2FuIGJlIGxlZnQgdG8gZnV0dXJlIHdvcmsuCisKK01vcmUgc2VyaW91c2x5 LCB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGljaCBj b3VsZAoraGF2ZSBhIGxhcmdlIGltcGFjdCBvbiB0aGUgc2hhcGUgb2YgdGhlIHBsYW4gdHJlZS4g WFhYOiBUaGlzIG5lZWRzIHNvbWUgc3R1ZHkKK3RvIGRldGVybWluZSBob3cgbGFyZ2UgYSBwcm9i bGVtIGl0IGlzLCBhbmQgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb29uZXIKK3JhdGhlciB0aGFu IGxhdGVyLgorCitXZSBkb24ndCBvZmZlciBhbnkgY29udHJvbCBvdmVyIGVzdGltYXRlcywgb25s eSBvdXRjb21lcy4gSXQgc2VlbXMgbGlrZSBhCitnb29kIGlkZWEgdG8gaW5jb3Jwb3JhdGUgdGhh dCBhYmlsaXR5IGF0IHNvbWUgZnV0dXJlIHBvaW50LCBhcyBwZ19oaW50X3BsYW4KK2RvZXMuIEhv d2V2ZXIsIHNpbmNlIHByaW1hcnkgZ29hbCBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCB3b3Jr IGlzIHRvIGJlCithYmxlIHRvIGluZHVjZSB0aGUgcGxhbm5lciB0byByZWNyZWF0ZSBhIGRlc2ly ZWQgcGxhbiB0aGF0IHdvcmtlZCB3ZWxsIGluCit0aGUgcGFzdCwgdGhpcyBoYXMgbm90IGJlZW4g aW5jbHVkZWQgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgZWZmb3J0LgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0IGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5kMDIyNGEyYWVlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApAQCAtMCwwICsxLDMyMCBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAx OworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Qg PSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworU0VUIGRlYnVnX3Bh cmFsbGVsX3F1ZXJ5ID0gb2ZmOworQ1JFQVRFIFRBQkxFIGd0X2RpbSAoaWQgc2VyaWFsIHByaW1h cnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZGltOworQ1JFQVRFIFRBQkxF IGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCBy ZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CistLSBCeSBkZWZh dWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdpdGggYSBwYXJhbGxlbCBoYXNoIGpvaW4uCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBm IEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVy IE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0 IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3Rf ZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhB U0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChmIGQpKQorKDE0 IHJvd3MpCisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2YgYm90aCByZWxhdGlv bnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Z2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAg IC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQYXJh bGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5p ZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQp CisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTYgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtleTogZi5kaW1faWQK KyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4g IFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQg PSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3Qg ZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkK KyAgIEdBVEhFUigoZiBkKSkKKygxNiByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBhIHNlcGFy YXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNoIHJlbGF0aW9uLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShm IGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdl CisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBT ZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShmKSAvKiBtYXRjaGVkICov CisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1ND QU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGYgZCkKKygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAg ICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAg ICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUihmKSAv KiBtYXRjaGVkICovCisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAg U0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGYgZCkKKygyMCByb3dzKQorCitDT01NSVQ7CistLSBG b3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9uIGJ1dCBubyBwYXJh bGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6 IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVS KGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9T Q0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYpCisgICBOT19HQVRI RVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dh dGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQp CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3Jr ZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBk CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUl9NRVJHRShkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9m YWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4K KyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLwor ICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSKGYpCisgICBO T19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQp CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQu aWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDog MQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworICAgTk9fR0FU SEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdB VEhFUihkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworQ09NTUlUOworLS0gRm9yY2Ug bm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQg PSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2Rp bSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19H QVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5f UExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9w a2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBm b3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBH YXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Z2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0g ZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRj aGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQor KDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChm IGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g Z3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgorICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRI RVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVS KChmIGQpKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5lODc2NTIzNzBjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKQEAgLTAsMCArMSwyOTIgQEAKK0xPQUQgJ3Bn X3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsK K0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQs IHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4 dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGltMiAoaWQgaW50ZWdl ciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGltMiwgdmFsMikKKwlT RUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKK0NSRUFU RSBUQUJMRSBqb19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2Vy IG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3Qg bnVsbCByZWZlcmVuY2VzIGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGcl MTAwKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUg am9fZmFjdDsKKy0tIFdlIGV4cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBz aW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo Zi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6 IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFz aAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBO T19HQVRIRVIoZiBkMSBkMikKKygxNiByb3dzKQorCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQg am9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQg dGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo Zi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6 IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFz aAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQxIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQxIGQyKQorICAgSEFTSF9KT0lOKGQxIGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikK KyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9 IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lk ID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwx ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBk MSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRI RVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2pvaW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5k aW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5p ZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAt PiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChkMS5pZCA9IGYuZGltMV9pZCkKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKQorICAgSEFTSF9KT0lOKGYg ZDIpCisgICBTRVFfU0NBTihkMSBmIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgKGQx IGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6ICgoZi5k aW0xX2lkID0gZDEuaWQpIEFORCAoZi5kaW0yX2lkID0gZDIuaWQpKQorICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQorICAgTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUoZDIpCisgICBIQVNIX0pPSU4oZDIpCisgICBTRVFfU0NBTihmIGQxIGQyKQorICAg Tk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworQ09NTUlUOworLS0gVGhlIHVudXN1YWwg Zm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVy eQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBq b2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9p biB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0 IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlP TiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRp bTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBD b25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg ICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMSBkMQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVS SUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQor KDE4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5l ciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQg am9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCist LSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CistLSBY WFg6IFRoZSBhZHZpY2UgZmVlZGJhY2sgc2F5cyAncGFydGlhbGx5IG1hdGNoZWQnIGhlcmUgd2hp Y2ggaXNuJ3QgZXhhY3RseQorLS0gd3JvbmcgZ2l2ZW4gdGhlIHdheSB0aGF0IGZsYWcgaXMgaGFu ZGxlZCBpbiB0aGUgY29kZSwgYnV0IGl0J3MgYXQgdGhlIHZlcnkKKy0tIGxlYXN0IGNvbmZ1c2lu Zy4gU29tZXRoaW5nIHNob3VsZCBwcm9iYWJseSBiZSBpbXByb3ZlZCBoZXJlLgorU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5F UiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9 IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmls dGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4g IE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIE1lcmdl IENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBwYXJ0aWFsbHkg bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBk MSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKQorICAg U0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQx CisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElT IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlk ID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwg Sm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZi5kaW0yX2lkICsgMCkpID0gKChkMi5pZCAr IDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRp bTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExB SU4oZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIg ZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4g KGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQg KyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkg T1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAg IE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQyIGYgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNU RURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRI RVIoZDEgZiBkMikKKygyMCByb3dzKQorCitDT01NSVQ7CistLSBYWFg6IGFkZCB0ZXN0cyBmb3Ig am9pbiBvcmRlciBwcmVmaXggbWF0Y2hpbmcKKy0tIFhYWDogam9pbl9vcmRlcihqdXN0b25lcmVs KSBzaG91bGRuJ3QgcmVwb3J0IHBhcnRpYWxseSBtYXRjaGVkCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNzFlZTI2YTMzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CkBAIC0wLDAgKzEs Mjk3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5 IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CitDUkVBVEUgVEFC TEUgam9pbl9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lkIGludGVnZXIgbm90 IG51bGwgcmVmZXJlbmNlcyBqb2luX2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIGpvaW5fZmFjdF9k aW1faWQgT04gam9pbl9mYWN0IChkaW1faWQpOworVkFDVVVNIEFOQUxZWkUgam9pbl9mYWN0Owor LS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0 IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQp CisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEwIHJvd3MpCisKKy0tIFRy eSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBp bm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdF X0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5l ciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNl IHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBT RVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYg Sk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBN ZXJnZSBKb2luCisgICBEaXNhYmxlZDogdHJ1ZQorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9m YWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0g ZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSAv KiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMu am9pbl9mYWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdF X0pPSU5fUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lk ID0gZC5pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9p bl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9k aW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJTihkKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisg ICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9k aW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTEgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRF UklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZp bHRlcjogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgor ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dB VEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9m YWN0IGYKKyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6IGYuZGltX2lkCisgICAg ICAgICBDYWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVN T0laRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGQpCisgICBTRVFfU0NBTihmKQorICAg SU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygx NSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJ TihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVY X1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93 cykKKworQ09NTUlUOworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVy biB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ugc2hv dWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFT SF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZC5pZCA9IGYuZGlt X2lkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBIYXNoCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEhBU0hfSk9JTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihkIGYpCisgICBIQVNIX0pPSU4oZikKKyAgIFNFUV9TQ0FOKGQgZikKKyAgIE5P X0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdl IENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2Rp bV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9K T0lOX01BVEVSSUFMSVpFKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkg ZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9Q TEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpv aW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09Q X01BVEVSSUFMSVpFKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBkKQorKDEy IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf TUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAor ICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZC5pZAorICAgICAgICAgQ2FjaGUg TW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2Rp bV9pZCBvbiBqb2luX2ZhY3QgZgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGRpbV9pZCA9 IGQuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NRU1PSVpFKGYp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQg ZikKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZikKKyAgIFNFUV9TQ0FOKGQpCisgICBJTkRFWF9T Q0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExB SU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgIEluZGV4IENv bmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xP T1BfUExBSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIFNFUV9TQ0FOKGQpCisg ICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBk KQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbid0IGZvcmNlIGEgZm9yZWlnbiBqb2lu IGJldHdlZW4gdGhlc2UgdGFibGVzLCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4ndCBmb3JlaWduIHRh Ymxlcy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdO X0pPSU4oKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBm CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgRk9SRUlHTl9KT0lOKChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlO KGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5 KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFjNWFlY2Q2NTZmCi0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0 CkBAIC0wLDAgKzEsNjQgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CistLSBU cnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBn X2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKKy0tIFNldCBhIHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwg ZXhjZWVkIGl0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAy OworLS0gU2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEg aW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UsIHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZS T00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBiIAorLS0tKy0t LSstLS0rLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworIGEgfCBi IAorLS0tKy0tLQorKDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20g dGhlIHNlY29uZCB0ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0 ZWRfbG9jYWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUp ICsKKyBOT19HQVRIRVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJp bmcgYWR2aWNlIGFnYWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxp bWl0IHNvIHRoYXQgdGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19w bGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKKy0tIFB1c2ggYSBidW5j aCBvZiBxdWVyaWVzIHRocm91Z2ggdGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4 IElOIDEuLjIwMDAgTE9PUAorCQlFWEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsK KwlFTkQgTE9PUDsKK0VORAorJCQ7CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2Vk LgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsK KyBjb3VudCAKKy0tLS0tLS0KKyAgMjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1v cmUgdGltZSwgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0g ZXZlbiB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2Nv bGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjBmMDU1MzFkNQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5v dXQKQEAgLTAsMCArMSwyNDMgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9q b2luID0gdHJ1ZTsKK0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRp bTEgdGV4dCwgdmFsMSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcHQxYSBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFS VElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBP RiBwdDEgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNF TEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CitDUkVBVEUgVEFC TEUgcHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVBB UlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9GIHB0 MiBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVF UyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAo MjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIgdGV4 dCAnIHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7 CitWQUNVVU0gQU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1h cnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRv ICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJM RSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQ QVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywg dmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQz OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbW0g dGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0sIHZhbG0pCisJU0VMRUNUIGcs ICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlzbWF0Y2g7CitFWFBMQUlOIChQ TEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJF IHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5E IHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzEu aWQgPSBwdDNfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8x CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBw dDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g cHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEp CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMwor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFhKQorICAg Sk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQx YikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVi bGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0M2EgcHQz L3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQy YSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0 Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMu cHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5Cisg ICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChw dDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQx YiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0 Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMu cHQzYykKKyg0NyByb3dzKQorCistLSBTdXBwcmVzcyBwYXJ0aXRpb253aXNlIGpvaW4sIG9yIGRv IGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0g cHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEg QU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQy LmlkKQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEK KyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg QXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBw dDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFS VElUSU9OV0lTRShwdDIpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEgKHB0 MiBwdDMpKQorICAgSEFTSF9KT0lOKHB0MyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0 MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBw dDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGlj LnB0M2IKKyAgICBwdDMvcHVibGljLnB0M2MpCisgICBQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQz KQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1Ymxp Yy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDAg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNF KChwdDEgcHQyKSBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQg PSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQzLmlkKQorICAgLT4gIEFwcGVu ZAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQx XzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0 MV8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBw dDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMi5pZCA9 IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8zLmlkID0gcHQyXzMu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMworICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18x CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIpKSAvKiBtYXRjaGVkICovCisgICBQQVJU SVRJT05XSVNFKHB0MykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSkKKyAgIEpPSU5fT1JE RVIocHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMucHQyYikKKyAgIEpPSU5fT1JERVIocHQxL3B1 YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYykKKyAgIEpPSU5fT1JERVIoe3B0MSBwdDJ9IHB0MykK KyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMu cHQyYyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQyL3B1YmxpYy5wdDJhIHB0 MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIKKyAgICBwdDEvcHVibGljLnB0MWMgcHQyL3B1 YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBwdDMvcHVibGlj LnB0M2MpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpCisgICBOT19HQVRIRVIocHQx L3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5w dDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2Eg cHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCitDT01NSVQ7Cist LSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJs ZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05X SVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNo LmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDFhIHB0MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRt aXNtYXRjaF8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hi IHB0bWlzbWF0Y2hfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gp KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKHB0MSBwdG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkK KyAgIFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjKQorICAgSU5ERVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMu cHRtaXNtYXRjaGFfcGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1Ymxp Yy5wdG1pc21hdGNoYl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAg IE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQx YworICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0 bWlzbWF0Y2hiKQorKDIyIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL3NjYW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42 MWYzNjFmY2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvc2Nhbi5vdXQKQEAgLTAsMCArMSw3NTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsK K1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9j b3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nv c3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBzY2Fu X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUg dGV4dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElO REVYIHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFO QUxZWkUgc2Nhbl90YWJsZTsKKy0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgIFFVRVJZIFBM QU4gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNCByb3dzKQorCistLSBJbmRleCBzY2FuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNSByb3dzKQorCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25s eSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25k OiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDUgcm93cykKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRl eHQgOCc7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4g J3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3Rh YmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfYikKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKwor LS0gVElEIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRp ZCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBU aWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEp Jzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1 IHJvd3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2Ug dGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQg c3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3Rh YmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDYgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOwor ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6 IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBz Y2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4 dCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX2IpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfYikKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7 CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQg Q29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBU SURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDog KChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBh IGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwK Ky0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2Fu IGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0 aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVz IGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklU TUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVk OiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJ RF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5IGFn YWluIHRvIGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJ TkRFWF9TQ0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1ND QU4gY2FuJ3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMg bm90IGluY2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBG aWx0ZXI6IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFibGUK KyAgIFJlY2hlY2sgQ29uZDogKGEgPiAwKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNj YW5fdGFibGVfcGtleQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQ X1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoOSByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5 IGtleSBsb29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZv cmNlIGl0IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3Qp CistLSBvciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90 YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisg ICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NB TihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZv cmNpYmx5IGRvd25ncmFkZSBhbiBpbmRleC1vbmx5IHNjYW4gdG8gYW4gaW5kZXggc2NhbiwgYnV0 IHdlIGNhbid0CistLSBmb3JjZSB0aGUgdXNlIG9mIGFuIGluZGV4IHRoYXQgdGhlIHBsYW5uZXIg dGhpbmtzIGlzIGluYXBwbGljYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2Fu IGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRtYXAg aGVhcCBzY2FuLAorLS0gYnV0IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXggaXMg bm90IHBvc3NpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAo YiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykK KworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4g cmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQg Y3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RmlsdGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBt b3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3Vs ZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRo ZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2Fu IHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2ls YnVwLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3Mg T0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoOCByb3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0 YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsK Ky0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o bm90aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB Tihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3Vz KSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxl ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBs ZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3Ag TGVmdCBKb2luCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVu Y3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9M T09QX1BMQUlOKHMgcyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkg cyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxMiBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0 ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAg ICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3Ag TGVmdCBKb2luCisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcu ZyA9IHMuYSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBn CisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUgcworICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUgc18xCisgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzIzIp CisgICBIQVNIX0pPSU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRFWF9TQ0FOKHMjMiBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQg Sm9pbgorICAgSGFzaCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVm dCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZwor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFi bGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQor ICAgSEFTSF9KT0lOKHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihz IzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChn ZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEp IHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENv bmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVf c2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gc2Nhbl90YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBt YXRjaGVkICovCisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisg ICBTRVFfU0NBTihzIHMjMikKKyAgIE5PX0dBVEhFUihnIHMgcyMyKQorKDE3IHJvd3MpCisKK0NP TU1JVDsKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3Vi cXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVz aW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0g MSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNA dW5uYW1lZF9zdWJxdWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRj aC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMg V0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVf cGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9z dWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5Lgor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBzY2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAo YSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFt ZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVk X3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRj aCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUg YSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxl IHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQor ICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJF IGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFt ZWRfc3VicXVlcnkpCisgICBOT19HQVRIRVIodW5uYW1lZF9zdWJxdWVyeSBzQHVubmFtZWRfc3Vi cXVlcnkpCisoNyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3N5bnRheC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRk ZGIxMmNhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9zeW50YXgub3V0CkBAIC0wLDAgKzEsNTkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsK Ky0tIEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLCBhbmQgc28gaXMgYW4gZW1wdHkgdGFyZ2V0 IGxpc3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGlu IGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSBy ZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ3NlcV9zY2FuKHhAeSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfc2Nhbih4IzIpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4gKHgveSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAv IHkgLiB6ICkgICc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJ4IiMy LyJ5Ii4ieiJAInQiKSc7CistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFVRU5USUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBw YXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitE RVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAi U0VRVUVOVElBTF9TQ0FOIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7 CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2 aWNlIjogIlNFUV9TQ0FOIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4 IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTignOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2 aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNl OiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBh cnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1 dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52 YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1ND QU4oIyIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBv ciBuZWFyICIjIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGlu dmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgor REVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIg IigiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQg dmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMi CistLSBMZWdhbCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkv Lyp4Ki96KSc7CistLSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJy8qJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiLyoiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNl OiB1bnRlcm1pbmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CitFUlJPUjogIGludmFsaWQg dmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIo ImZPTyIpIC8qIG9vcHMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1p bmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90 IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNl Y29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9SOiAgaW52YWxp ZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyovKiBzdHVm ZiAqLyovIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0 IG9yIG5lYXIgIioiCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRpb24g aWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTihh KSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2Uu YWR2aWNlIjogIkZPUkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZp Y2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0 aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnRk9SRUlHTl9KT0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0 ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIKK0RFVEFJTDog IENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFp biBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4zNDUyZTVhZDQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw3MCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZpY2Vf c291cmNlcyA9IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5jJywK KyAgJ3BncGFfY29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdwYV9q b2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdwZ3Bh X3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisKK3Bn cGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAncGdw YV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6IGZs ZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFuX2Fk dmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90YXJn ZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdzOiBi aXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3QoKQor cGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3RlbSA9 PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nl c3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5fYWR2 aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5u ZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2UgPSBzaGFy ZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMsCisg IGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAga3dhcmdz OiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3BsYW5fYWR2aWNl CisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywKKyAgJ3BnX3Bs YW5fYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0 ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3Vy cmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisg ICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdqb2lu X29yZGVyJywKKyAgICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9jb2xsZWN0b3In LAorICAgICAgJ3BhcnRpdGlvbndpc2UnLAorICAgICAgJ3NjYW4nLAorICAgICAgJ3N5bnRheCcs CisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFf cmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yOWY0ZjIyNDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MiBAQAorLyogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFp biBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVY VEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlIiB0byBs b2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JF QVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKK1JFVFVSTlMg dm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2Fk dmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlP VVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUg dGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRV Uk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVk X2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Z2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJp ZCBvaWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVj dGlvbl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4 dAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0 X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK1JFVk9LRSBB TEwgT04gRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJM SUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYzMmU4YjdhMGQzCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsNDU0IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5jCisgKgkgIG1haW4g ZW50cnlwb2ludHMgZm9yIGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIgYWR2aWNlCisg KgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5j bHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNp bmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1 ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAi Y29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFp bl9zdGF0ZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh bm5lci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAidXRp bHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHBncGFfc2hhcmVkX3N0YXRl ICpwZ3BhX3N0YXRlID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqcGdwYV9kc2FfYXJlYSA9IE5V TEw7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBnX3BsYW5fYWR2aWNlX2Fkdmlj ZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2UgPSB0cnVlOworaW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlv bl9saW1pdCA9IDA7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1p dCA9IDA7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Blcl9wbGFu X2hvb2tfdHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhlciBmaWxl LWxldmVsIGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3RhdGljIE1l bW9yeUNvbnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHBn X3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywKKwkJ CQkJCQkJCQkJCSAgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3Rh dGUpOworc3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCSBJbnRvQ2xhdXNlICppbnRvLAor CQkJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAq cXVlcnlTdHJpbmcsCisJCQkJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJ CQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3RhdGljIGJvb2wgcGdfcGxhbl9h ZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJ CQkJCQkJCQkgR3VjU291cmNlIHNvdXJjZSk7CitzdGF0aWMgRGVmRWxlbSAqZmluZF9kZWZlbGVt X2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisKKy8qCisgKiBJbml0 aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCURlZmlu ZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCSAg ICJhZHZpY2UgdG8gYXBwbHkgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIiwKKwkJCQkJCQkgICBOVUxM LAorCQkJCQkJCSAgICZwZ19wbGFuX2FkdmljZV9hZHZpY2UsCisJCQkJCQkJICAgTlVMTCwKKwkJ CQkJCQkgICBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnX3BsYW5fYWR2 aWNlX2FkdmljZV9jaGVja19ob29rLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTlVMTCk7 CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBs YWluX3N1cHBsaWVkX2FkdmljZSIsCisJCQkJCQkJICJFWFBMQUlOIG91dHB1dCBpbmNsdWRlcyBz dXBwbGllZCBhZHZpY2UgZXZlbiB3aXRob3V0IEVYUExBSU4gKFBMQU5fQURWSUNFKSIsCisJCQkJ CQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGll ZF9hZHZpY2UsCisJCQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAw LAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmlu ZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gcGVyLWJhY2tlbmQg bWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xs ZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0Nf VVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlO VUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5zaGFyZWRf Y29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWlu IGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNl X3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwK KwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEws CisJCQkJCQkJTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5fYWR2aWNl Iik7CisKKwkvKiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEgaW4gYW4g RXhwbGFpblN0YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRlbnNpb25J ZCgicGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJTiBvcHRp b25zIGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5zaW9uRXhw bGFpbk9wdGlvbigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBs YWluX29wdGlvbl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3BhX3BsYW5u ZXJfaW5zdGFsbF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxhaW5fcGVy X3BsYW5faG9vazsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2FkdmljZV9leHBs YWluX3Blcl9wbGFuX2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBzdGF0ZSB3 aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfc2hhcmVkX3N0 YXRlKHZvaWQgKnB0cikKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdwYV9zaGFy ZWRfc3RhdGUgKikgcHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssIExXTG9j a05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5j aGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2RzYSIpOworCXN0YXRlLT5h cmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0gSW52 YWxpZERzYVBvaW50ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbWVtb3J5 IGNvbnRleHQgd2hlcmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQgYnkgdGhpcworICogbW9kdWxl IGNhbiBiZSBzdG9yZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3BnX3BsYW5fYWR2aWNlX2dldF9t Y3h0KHZvaWQpCit7CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQgPT0gTlVMTCkKKwkJcGdwYV9t ZW1vcnlfY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29udGV4dDsKK30KKworLyoKKyAq IEdldCBhIHBvaW50ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAqCisgKiBJZiBubyBzaGFyZWQg c3RhdGUgZXhpc3RzLCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQuIElmIGl0IGRvZXMgZXhpc3Qg YnV0CisgKiB0aGlzIGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNzZWQgaXQsIGF0dGFjaCB0byBp dC4gT3RoZXJ3aXNlLCBqdXN0IHJldHVybgorICogb3VyIGNhY2hlZCBwb2ludGVyLgorICoKKyAq IEFsb25nIHRoZSB3YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgTFdMb2NrIHRyYW5jaGVzIGFy ZSByZWdpc3RlcmVkLgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAqCitwZ19wbGFuX2FkdmljZV9h dHRhY2godm9pZCkKK3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxMKQorCXsKKwkJYm9vbAkJZm91 bmQ7CisKKwkJcGdwYV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNlZ21lbnQoInBnX3BsYW5fYWR2 aWNlIiwgc2l6ZW9mKHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJCQkgICBwZ3BhX2luaXRfc2hh cmVkX3N0YXRlLCAmZm91bmQpOworCX0KKworCXJldHVybiBwZ3BhX3N0YXRlOworfQorCisvKgor ICogUmV0dXJuIGEgcG9pbnRlciB0byBwZ19wbGFuX2FkdmljZSdzIERTQSBhcmVhLCBjcmVhdGlu ZyBpdCBpZiBuZWVkZWQuCisgKi8KK2RzYV9hcmVhICoKK3BnX3BsYW5fYWR2aWNlX2RzYV9hcmVh KHZvaWQpCit7CisJaWYgKHBncGFfZHNhX2FyZWEgPT0gTlVMTCkKKwl7CisJCXBncGFfc2hhcmVk X3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCQlkc2FfaGFuZGxlCWFy ZWFfaGFuZGxlOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKworCQlM V0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJYXJlYV9oYW5kbGUg PSBzdGF0ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5WQUxJRCkK KwkJeworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoc3RhdGUtPmRzYV90cmFuY2hlKTsK KwkJCWRzYV9waW4ocGdwYV9kc2FfYXJlYSk7CisJCQlzdGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFu ZGxlKHBncGFfZHNhX2FyZWEpOworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQl9 CisJCWVsc2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcGdwYV9k c2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisKKwkJZHNhX3Bpbl9tYXBw aW5nKHBncGFfZHNhX2FyZWEpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKwl9CisKKwlyZXR1cm4gcGdwYV9kc2FfYXJlYTsKK30KKworLyoKKyAqIEhhbmRsZXIgZm9y IEVYUExBSU4gKFBMQU5fQURWSUNFKS4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNl X2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywgRGVmRWxlbSAqb3B0LAor CQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2U7 CisKKwlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5z aW9uX2lkKTsKKworCWlmIChwbGFuX2FkdmljZSA9PSBOVUxMKQorCXsKKwkJcGxhbl9hZHZpY2Ug PSBwYWxsb2MwX29iamVjdChib29sKTsKKwkJU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBl c19leHRlbnNpb25faWQsIHBsYW5fYWR2aWNlKTsKKwl9CisKKwkqcGxhbl9hZHZpY2UgPSBkZWZH ZXRCb29sZWFuKG9wdCk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgc3RyaW5nIHRoYXQgaXMgbGlr ZWx5IHRvIGNvbnNpc3Qgb2YgbXVsdGlwbGUgbGluZXMgaW4gRVhQTEFJTgorICogb3V0cHV0Lgor ICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShF eHBsYWluU3RhdGUgKmVzLCBjaGFyICpxbGFiZWwsCisJCQkJCQkJCQkgIGNoYXIgKnZhbHVlKQor eworCWNoYXIJICAgKnM7CisKKwkvKiBGb3Igbm9uLXRleHQgZm9ybWF0cywgaXQncyBiZXN0IG5v dCB0byBhZGQgYW55IHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKGVzLT5mb3JtYXQgIT0gRVhQ TEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCB2YWx1 ZSwgZXMpOworCQlyZXR1cm47CisJfQorCisJLyogSW4gdGV4dCBmb3JtYXQsIGlmIHRoZXJlIGlz IG5vIGRhdGEsIGRpc3BsYXkgbm90aGluZy4gKi8KKwlpZiAoKnFsYWJlbCA9PSAnXDAnKQorCQly ZXR1cm47CisKKwkvKgorCSAqIEl0IGxvb2tzIG5pY2VzdCB0byBpbmRlbnQgZWFjaCBsaW5lIG9m IHRoZSBhZHZpY2Ugc2VwYXJhdGVseSwgYmVnaW5uaW5nCisJICogb24gdGhlIGxpbmUgYmVsb3cg dGhlIGxhYmVsLgorCSAqLworCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwlhcHBlbmRTdHJpbmdJ bmZvKGVzLT5zdHIsICIlczpcbiIsIHFsYWJlbCk7CisJZXMtPmluZGVudCsrOworCXdoaWxlICgo cyA9IHN0cmNocih2YWx1ZSwgJ1xuJykpICE9IE5VTEwpCisJeworCQlFeHBsYWluSW5kZW50VGV4 dChlcyk7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oZXMtPnN0ciwgdmFsdWUsIChzIC0gdmFs dWUpICsgMSk7CisJCXZhbHVlID0gcyArIDE7CisJfQorCisJLyogRG9uJ3QgaW50ZXJwcmV0IGEg dGVybWluYWwgbmV3bGluZSBhcyBhIHJlcXVlc3QgZm9yIGFuIGVtcHR5IGxpbmUuICovCisJaWYg KCp2YWx1ZSAhPSAnXDAnKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRT dHJpbmdJbmZvKGVzLT5zdHIsICIlc1xuIiwgdmFsdWUpOworCX0KKworCWVzLT5pbmRlbnQtLTsK K30KKworLyoKKyAqIEFkZCBhZHZpY2UgZmVlZGJhY2sgdG8gdGhlIEVYUExBSU4gb3V0cHV0Lgor ICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhFeHBsYWlu U3RhdGUgKmVzLCBMaXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlp bml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJh Y2spCisJeworCQlpbnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0ZW0pOworCisJCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZiwgIiVzIC8qICIsIGl0ZW0tPmRlZm5hbWUpOworCQlpZiAoKGZsYWdzICYg UEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwKQorCQl7CisJCQlBc3NlcnQoKGZsYWdzICYgUEdQQV9U RV9NQVRDSF9QQVJUSUFMKSAhPSAwKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm1hdGNo ZWQiKTsKKwkJfQorCQllbHNlIGlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX1BBUlRJQUwpICE9 IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJwYXJ0aWFsbHkgbWF0Y2hlZCIpOworCQll bHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJub3QgbWF0Y2hlZCIpOworCQlpZiAoKGZs YWdzICYgUEdQQV9URV9JTkFQUExJQ0FCTEUpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWYsICIsIGluYXBwbGljYWJsZSIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9DT05GTElDVElO RykgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgY29uZmxpY3RpbmciKTsKKwkJ aWYgKChmbGFncyAmIFBHUEFfVEVfRkFJTEVEKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygm YnVmLCAiLCBmYWlsZWQiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiICovXG4iKTsKKwl9 CisKKwlwZ19wbGFuX2FkdmljZV9leHBsYWluX3RleHRfbXVsdGlsaW5lKGVzLCAiU3VwcGxpZWQg UGxhbiBBZHZpY2UiLAorCQkJCQkJCQkJCSAgYnVmLmRhdGEpOworfQorCisvKgorICogQWRkIHJl bGV2YW50IGRldGFpbHMsIGlmIGFueSwgdG8gdGhlIEVYUExBSU4gb3V0cHV0IGZvciBhIHNpbmds ZSBwbGFuLgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxh bl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCSBJbnRvQ2xhdXNlICpp bnRvLAorCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkgY29uc3QgY2hhciAq cXVlcnlTdHJpbmcsCisJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkg UXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2UgPSBH ZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisJRGVmRWxlbSAg ICAqcGdwYV9pdGVtOworCUxpc3QJICAgKnBncGFfbGlzdDsKKworCWlmIChwcmV2X2V4cGxhaW5f cGVyX3BsYW4pCisJCXByZXZfZXhwbGFpbl9wZXJfcGxhbihwbGFubmVkc3RtdCwgaW50bywgZXMs IHF1ZXJ5U3RyaW5nLCBwYXJhbXMsCisJCQkJCQkJICBxdWVyeUVudik7CisKKwkvKiBGaW5kIGFu eSBkYXRhIHBncGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4g Ki8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0 ZW5zaW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9 IHBncGFfaXRlbSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJ LyoKKwkgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRv IGFwcGx5IGFkdmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1 dCB0aGF0IGluZm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2 aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRo YXQKKwkgKiBiZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4g dGhlIFBMQU5fQURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8g ZmFsc2UuCisJICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQg YmVmb3JlaGFuZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxp Y2F0aW9uIG9mIHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBh bmQgdGhlcmVmb3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLgorCSAqLwor CWlmIChwZ3BhX2xpc3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5f c3VwcGxpZWRfYWR2aWNlIHx8CisJCQkJCQkJICAocGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAqcGxh bl9hZHZpY2UpKSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0g ZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZl ZWRiYWNrICE9IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAo TGlzdCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklD RSBvcHRpb24gd2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBz aG93IGdlbmVyYXRlZCBhZHZpY2UuCisJICovCisJaWYgKHBsYW5fYWR2aWNlICE9IE5VTEwgJiYg KnBsYW5fYWR2aWNlKQorCXsKKwkJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQlj aGFyCSAgICphZHZpY2Vfc3RyaW5nOworCisJCWFkdmljZV9zdHJpbmdfaXRlbSA9CisJCQlmaW5k X2RlZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJhZHZpY2Vfc3RyaW5nIik7CisJCWlmIChh ZHZpY2Vfc3RyaW5nX2l0ZW0gIT0gTlVMTCkKKwkJeworCQkJLyogQWR2aWNlIGhhcyBhbHJlYWR5 IGJlZW4gZ2VuZXJhdGVkOyB3ZSBjYW4gcmV1c2UgaXQuICovCisJCQlhZHZpY2Vfc3RyaW5nID0g c3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBn cGFfcGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXI7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisJ CQlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCisJCQkvKiBBZHZpY2Ugbm90IHll dCBnZW5lcmF0ZWQ7IGRvIHRoYXQgbm93LiAqLworCQkJcGdwYV9wbGFuX3dhbGtlcigmd2Fsa2Vy LCBwbGFubmVkc3RtdCk7CisJCQlydF9pZGVudGlmaWVycyA9CisJCQkJcGdwYV9jcmVhdGVfaWRl bnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwbGFubmVkc3RtdCk7CisJCQlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwkJCXBncGFfb3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlm aWVycyk7CisJCQlhZHZpY2Vfc3RyaW5nID0gYnVmLmRhdGE7CisJCX0KKworCQlpZiAoYWR2aWNl X3N0cmluZ1swXSAhPSAnXDAnKQorCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRp bGluZShlcywgIkdlbmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9z dHJpbmcpOworCX0KK30KKworLyoKKyAqIENoZWNrIGhvb2sgZm9yIHBnX3BsYW5fYWR2aWNlLmFk dmljZQorICovCitzdGF0aWMgYm9vbAorcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2so Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IHRtcGNvbnRleHQ7CisJY2hhcgkg ICAqZXJyb3I7CisKKwlpZiAoKm5ld3ZhbCA9PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKworCXRt cGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkgICAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1w Y29udGV4dCk7CisKKwkvKgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gc2F2ZSB0aGUgcGFyc2Ug dHJlZSB0aGF0IHdlIGNvbnN0cnVjdCBoZXJlIGZvcgorCSAqIGV2ZW50dWFsIHVzZSB3aGVuIHBs YW5uaW5nIHdpdGggdGhpcyBhZHZpY2UsIGJ1dCAqZXh0cmEgY2FuIG9ubHkgcG9pbnQKKwkgKiB0 byBhIHNpbmdsZSBndWNfbWFsbG9jJ2QgY2h1bmssIGFuZCBvdXIgcGFyc2UgdHJlZSBpbnZvbHZl cyBhbgorCSAqIGFyYml0cmFyeSBudW1iZXIgb2YgbWVtb3J5IGFsbG9jYXRpb25zLgorCSAqLwor CSh2b2lkKSBwZ3BhX3BhcnNlKCpuZXd2YWwsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgIT0gTlVM TCkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVz IiwgZXJyb3IpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZv ciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9i eV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2Rl KERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUs IGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJv bCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWE2ZmRjOWU3YjIKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKQEAg LTAsMCArMSw1IEBACisjIHBnX3BsYW5fYWR2aWNlIGV4dGVuc2lvbgorY29tbWVudCA9ICdoZWxw IHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAn Cittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19wbGFuX2FkdmljZScKK3JlbG9jYXRhYmxl ID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fkdmlj ZS5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NmVmYjNiNjExMwotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaApAQCAtMCwwICsxLDM3 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5oCisgKgkgIG1h aW4gaGVhZGVyIGZpbGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19QTEFOX0FEVklDRV9ICisjZGVm aW5lIFBHX1BMQU5fQURWSUNFX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVk ZWYgc3RydWN0IHBncGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRz YV90cmFuY2hlOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVj dG9yOworfSBwZ3BhX3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJu IGludAlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGludAlw Z19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBjaGFyICpwZ19w bGFuX2FkdmljZV9hZHZpY2U7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBN ZW1vcnlDb250ZXh0IHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBncGFf c2hhcmVkX3N0YXRlICpwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4gZHNhX2Fy ZWEgKnBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9hc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDJm ZmJmYTM3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf YXN0LmMKQEAgLTAsMCArMSwzOTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf YXN0LmMKKyAqCSAgYWRkaXRpb25hbCBzdXBwb3J0aW5nIGNvZGUgcmVsYXRlZCB0byBwbGFuIGFk dmljZSBwYXJzaW5nCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfYXN0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor CitzdGF0aWMgYm9vbCBwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBn cGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0LAorCQkJCQkJCQkJCSAgYm9vbCAqcmlkc191c2VkKTsKKworLyoKKyAqIEdldCBhIEMgc3Ry aW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFnLgorICovCitj aGFyICoKK3BncGFfY3N0cmluZ19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFkdmlj ZV90YWcpCit7CisJc3dpdGNoIChhZHZpY2VfdGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19CSVRN QVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2FzZSBQR1BB X1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQ QV9UQUdfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIiOworCQljYXNlIFBHUEFfVEFHX0dBVEhF Ul9NRVJHRToKKwkJCXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBX1RBR19IQVNI X0pPSU46CisJCQlyZXR1cm4gIkhBU0hfSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05M WV9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0lO REVYX1NDQU46CisJCQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0pPSU5f T1JERVI6CisJCQlyZXR1cm4gIkpPSU5fT1JERVIiOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pP SU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQlj YXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExB SU4iOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJu ICJORVNURURfTE9PUF9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgUEdQQV9U QUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJ Y2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisJCQlyZXR1cm4gIk5PX0dBVEhFUiI7CisJCWNhc2Ug UEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNh c2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9O X1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJT RU1JSk9JTl9VTklRVUUiOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJcmV0dXJuICJT RVFfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisJCQlyZXR1cm4gIlRJRF9TQ0FO IjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICog Q29udmVydCBhbiBhZHZpY2UgdGFnLCBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgdGhhdCBoYXMgYWxy ZWFkeSBiZWVuCisgKiBkb3duY2FzZWQgYXMgYXBwcm9wcmlhdGUsIHRvIGEgcGdwYV9hZHZpY2Vf dGFnX3R5cGUuCisgKgorICogSWYgd2Ugc3VjY2VlZCwgc2V0ICpmYWlsID0gZmFsc2UgYW5kIHJl dHVybiB0aGUgcmVzdWx0OyBpZiB3ZSBmYWlsLAorICogc2V0ICpmYWlsID0gdHJ1ZSBhbmQgcmV1 cm4gYW4gYXJiaXRyYXJ5IHZhbHVlLgorICovCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9w YXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCkKK3sKKwkqZmFpbCA9 IGZhbHNlOworCisJc3dpdGNoICh0YWdbMF0pCisJeworCQljYXNlICdiJzoKKwkJCWlmIChzdHJj bXAodGFnLCAiYml0bWFwX2hlYXBfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0JJ VE1BUF9IRUFQX1NDQU47CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAoc3RyY21wKHRh ZywgImZvcmVpZ25fam9pbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0ZPUkVJR05fSk9J TjsKKwkJCWJyZWFrOworCQljYXNlICdnJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyIikg PT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfR0FUSEVSOworCQkJaWYgKHN0cmNtcCh0YWcsICJn YXRoZXJfbWVyZ2UiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVJfTUVSR0U7CisJ CQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQlpZiAoc3RyY21wKHRhZywgImhhc2hfam9pbiIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCQljYXNlICdp JzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBH UEFfVEFHX0lOREVYX1NDQU47CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X29ubHlfc2NhbiIp ID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWJyZWFrOwor CQljYXNlICdqJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiam9pbl9vcmRlciIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX0pPSU5fT1JERVI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlp ZiAoc3RyY21wKHRhZywgIm1lcmdlX2pvaW5fbWF0ZXJpYWxpemUiKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJt ZXJnZV9qb2luX3BsYWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9Q TEFJTjsKKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVk X2xvb3BfbWF0ZXJpYWxpemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9P UF9NQVRFUklBTElaRTsKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWVtb2l6ZSIp ID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU7CisJCQlpZiAo c3RyY21wKHRhZywgIm5lc3RlZF9sb29wX3BsYWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfTkVTVEVEX0xPT1BfUExBSU47CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX2dhdGhlciIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWJyZWFrOworCQljYXNlICdw JzoKKwkJCWlmIChzdHJjbXAodGFnLCAicGFydGl0aW9ud2lzZSIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX1BBUlRJVElPTldJU0U7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAo c3RyY21wKHRhZywgInNlbWlqb2luX25vbl91bmlxdWUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BB X1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl91 bmlxdWUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU7CisJCQlp ZiAoc3RyY21wKHRhZywgInNlcV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VR X1NDQU47CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlpZiAoc3RyY21wKHRhZywgInRpZF9z Y2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfVElEX1NDQU47CisJCQlicmVhazsKKwl9 CisKKwkvKiBkaWRuJ3Qgd29yayBvdXQgKi8KKwkqZmFpbCA9IHRydWU7CisKKwkvKiByZXR1cm4g YW4gYXJiaXRyYXJ5IHZhbHVlIHRvIHVud2luZCB0aGUgY2FsbCBzdGFjayAqLworCXJldHVybiBQ R1BBX1RBR19TRVFfU0NBTjsKK30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfYWR2aWNlX3Rhcmdl dCBhcyBhIHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8KK3Zv aWQKK3BncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KQoreworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lE RU5USUZJRVIpCisJeworCQlib29sCQlmaXJzdCA9IHRydWU7CisJCWNoYXIJICAgKmRlbGltczsK KworCQlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCkKKwkJ CWRlbGltcyA9ICJ7fSI7CisJCWVsc2UKKwkJCWRlbGltcyA9ICIoKSI7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoc3RyLCBkZWxpbXNbMF0pOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90 YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0 KQorCQkJCWZpcnN0ID0gZmFsc2U7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo c3RyLCAnICcpOworCQkJcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChzdHIsIGNoaWxkX3Rhcmdl dCk7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCBkZWxpbXNbMV0pOworCX0KKwll bHNlCisJeworCQljb25zdCBjaGFyICpydF9pZGVudGlmaWVyOworCisJCXJ0X2lkZW50aWZpZXIg PSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZ0YXJnZXQtPnJpZCk7CisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoc3RyLCBydF9pZGVudGlmaWVyKTsKKwl9Cit9CisKKy8qCisgKiBGb3JtYXQgYSBw Z3BhX2luZGV4X3RhcmdldCBhcyBhIHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmlu Z0luZm8uCisgKi8KK3ZvaWQKK3BncGFfZm9ybWF0X2luZGV4X3RhcmdldChTdHJpbmdJbmZvIHN0 ciwgcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQpCit7CisJaWYgKGl0YXJnZXQtPml0eXBlICE9 IFBHUEFfSU5ERVhfTkFNRSkKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQlpZiAoaXRh cmdldC0+aXR5cGUgPT0gUEdQQV9JTkRFWF9BTkQpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KHN0ciwgIiYmKCIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgInx8 KCIpOworCisJCWZvcmVhY2hfcHRyKHBncGFfaW5kZXhfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIGl0 YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsK KwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zv cm1hdF9pbmRleF90YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKHN0ciwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGl0YXJnZXQtPmluZG5h bWVzcGFjZSAhPSBOVUxMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIlcy4iLAorCQkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKHN0ciwgcXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lKSk7CisJ fQorfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5kZXhfdGFyZ2V0IG9i amVjdHMgYXJlIGV4YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitwZ3BhX2luZGV4X3Rhcmdl dHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3RhcmdldCAqaTIpCit7 CisJaWYgKGkxLT5pdHlwZSAhPSBpMi0+aXR5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChp MS0+aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJLyogaW5kbmFtZXNwYWNlIGNhbiBi ZSBOVUxMLCBhbmQgdHdvIE5VTEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCQlpZiAoKGkxLT5pbmRu YW1lc3BhY2UgIT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlICE9IE5VTEwpICYmCisJCQkoaTEt PmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJ IHN0cmNtcChpMS0+aW5kbmFtZXNwYWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJCXJl dHVybiBmYWxzZTsKKwkJaWYgKHN0cmNtcChpMS0+aW5kbmFtZSwgaTItPmluZG5hbWUpICE9IDAp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWludAkJCWkxX2xlbmd0aCA9IGxp c3RfbGVuZ3RoKGkxLT5jaGlsZHJlbik7CisKKwkJaWYgKGkxX2xlbmd0aCAhPSBsaXN0X2xlbmd0 aChpMi0+Y2hpbGRyZW4pKQorCQkJcmV0dXJuIGZhbHNlOworCQlmb3IgKGludCBuID0gMDsgbiA8 IGkxX2xlbmd0aDsgKytuKQorCQl7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzEgPSBsaXN0X250 aChpMS0+Y2hpbGRyZW4sIG4pOworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMyID0gbGlzdF9udGgo aTItPmNoaWxkcmVuLCBuKTsKKworCQkJaWYgKCFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoYzEs IGMyKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRjaGVzIGFuIGFueSBwYXJ0IG9m IGFuIGFkdmljZSB0YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRlbnRpZmllcl9tYXRjaGVzX3Rh cmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7 CisJLyogRm9yIG5vbi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlm ICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNo X3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikK KwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGNoaWxkX3Rh cmdldCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlm IChzdHJjbXAocmlkLT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlhc19uYW1lKSAhPSAwKQor CQlyZXR1cm4gZmFsc2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAhPSB0YXJnZXQtPnJpZC5vY2N1 cnJlbmNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZSBpZGVudGlmaWVyIG11c3Qg c3BlY2lmeSBhIHNjaGVtYSwgYnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZQorCSAqIHNjaGVt YSBOVUxMIHRvIG1hdGNoIGFueXRoaW5nLgorCSAqLworCWlmICh0YXJnZXQtPnJpZC5wYXJ0bnNw ICE9IE5VTEwgJiYKKwkJc3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkg IT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUg TlVMTCBvbiBlaXRoZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkgKiBO VUxMLgorCSAqLworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVs LCB0YXJnZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5nc19l cXVhbF9vcl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFtZSkp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2ggaWRl bnRpZmllcnMgdG8gYWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGluZGlj YXRpbmcKKyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5kIHRo ZSBzZXQgb2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90 eXBlLgorICovCitwZ3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChp bnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3Rh cmdldCAqdGFyZ2V0KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJCWFu eV9yaWRzX3VzZWQgPSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJICAg KnJpZHNfdXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3RhcmdldHNf dXNlZCA9CisJCXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJn ZXQsIHJpZHNfdXNlZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJewor CQlpZiAocmlkc191c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UKKwkJ CWFsbF9yaWRzX3VzZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJ CWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQllbHNl CisJCQlyZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJeworCQlp ZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJT RVQ7CisJCWVsc2UgaWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5URVJT RUNUSU5HOworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQorCisv KgorICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1hdGNo ZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgor ICoKKyAqIEFsc28gc2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmllciB0 aGF0IG1hdGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29sCitw Z3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAq cmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRzX3Vz ZWQpCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNo X3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikK KwkJeworCQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywg Y2hpbGRfdGFyZ2V0LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9IGZh bHNlOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsr aSkKKwkJeworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tpXSwg dGFyZ2V0KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9IHRy dWU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNmZlNzMw YTRkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu aApAQCAtMCwwICsxLDIwNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3Qu aAorICoJICBhYnN0cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNl ci9zY2FubmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9hc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBH UEFfQVNUX0gKKyNkZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVy LmgiCisKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRlbXMg Z2VuZXJhbGx5IHRha2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0 ZW0KKyAqIGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVs YXRpb24gaWRlbnRpZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFuZCBK T0lOX09SREVSKCkgYWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0 cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8qIHJl bGF0aW9uIGlkZW50aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChpdGVt IC4uLikgKi8KKwlQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICovCit9 IHBncGFfdGFyZ2V0X3R5cGU7CisKKy8qCisgKiBXaGVuIGFuIGFkdmljZSBpdGVtIGRlc2NyaWJl cyBhIGJpdG1hcCBpbmRleCBzY2FuLCBpdCBtYXkgbmVlZCB0byBkZXNjcmliZQorICogdGhlIHVz ZSBvZiBtdWx0aXBsZSBpbmRleGVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX0lOREVY X05BTUUsCQkJLyogaW5kZXggc2NoZW1hICsgbmFtZSAqLworCVBHUEFfSU5ERVhfQU5ELAkJCQkv KiAmJihpdGVtIC4uLikgKi8KKwlQR1BBX0lOREVYX09SCQkJCS8qIHx8KGl0ZW0gLi4uKSAqLwor fSBwZ3BhX2luZGV4X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLiBXZSB1 c2UgdGhpcyBmb3IgSU5ERVhfU0NBTiwgSU5ERVhfT05MWV9TQ0FOLAorICogYW5kIEJJVE1BUF9I RUFQX1NDQU4gYWR2aWNlLCBidXQgaW4gdGhlIGZvcm1lciB0d28gY2FzZXMsIHRoZSB0YXJnZXQg bXVzdAorICogYmUgb2YgdHlwZSBQR1BBX0lOREVYX05BTUUuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfaW5kZXhfdGFyZ2V0Cit7CisJcGdwYV9pbmRleF90eXBlIGl0eXBlOworCisJLyogSW5k ZXggc2NoZW0gYW5kIG5hbWUsIHdoZW4gaXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FICovCisJY2hh cgkgICAqaW5kbmFtZXNwYWNlOworCWNoYXIJICAgKmluZG5hbWU7CisKKwkvKiBMaXN0IG9mIHBn cGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMsIHdoZW4gaXR5cGUgIT0gUEdQQV9JTkRFWF9OQU1FICov CisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBncGFfaW5kZXhfdGFyZ2V0OworCisvKgorICogQSBz aW5nbGUgaXRlbSBhYm91dCB3aGljaCBhZHZpY2UgaXMgYmVpbmcgZ2l2ZW4sIHdoaWNoIGNvdWxk IGJlIGVpdGhlcgorICogYSByZWxhdGlvbiBpZGVudGlmaWVyIHRoYXQgd2Ugd2FudCB0byBicmVh ayBvdXQgaW50byBpdHMgY29uc3RpdHVlbnQgZmllbGRzLAorICogb3IgYSBzdWJsaXN0IG9mIHNv bWUga2luZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfdGFyZ2V0Cit7CisJcGdw YV90YXJnZXRfdHlwZSB0dHlwZTsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBtZWFuaW5nZnVs IHdoZW4gdHR5cGUgaXMgUEdQQV9UQVJHRVRfSURFTlRJRklFUi4KKwkgKgorCSAqIEFsbCBpZGVu dGlmaWVycyBtdXN0IGhhdmUgYW4gYWxpYXMgbmFtZSBhbmQgYW4gb2NjdXJyZW5jZSBudW1iZXI7 IHRoZQorCSAqIHJlbWFpbmluZyBmaWVsZHMgY2FuIGJlIE5VTEwuIE5vdGUgdGhhdCBpdCdzIHBv c3NpYmxlIHRvIHNwZWNpZnkgYQorCSAqIHBhcnRpdGlvbiBuYW1lIHdpdGhvdXQgYSBwYXJ0aXRp b24gc2NoZW1hLCBidXQgbm90IHRoZSByZXZlcnNlLgorCSAqLworCXBncGFfaWRlbnRpZmllciBy aWQ7CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgc2V0IHdoZW4gdHR5cGUgaXMgUFBHQV9UQVJH RVRfSURFTlRJRklFUiBhbmQgdGhlIGFkdmljZQorCSAqIHRhZyBpcyBQR1BBX1RBR19JTkRFWF9T Q0FOLCBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sIG9yCisJICogUEdQQV9UQUdfQklUTUFQX0hF QVBfU0NBTi4KKwkgKi8KKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldDsKKworCS8qCisJICog V2hlbiB0aGUgdHR5cGUgaXMgUEdQQV9UQVJHRVRfPGFueXRoaW5nPl9MSVNULCB0aGlzIGZpZWxk IGNvbnRhaW5zIGEKKwkgKiBsaXN0IG9mIGFkZGl0aW9uYWwgcGdwYV9hZHZpY2VfdGFyZ2V0IG9i amVjdHMuIE90aGVyd2lzZSwgaXQgaXMgdW51c2VkLgorCSAqLworCUxpc3QJICAgKmNoaWxkcmVu OworfSBwZ3BhX2FkdmljZV90YXJnZXQ7CisKKy8qCisgKiBUaGVzZSBhcmUgYWxsIHRoZSBraW5k cyBvZiBhZHZpY2UgdGhhdCB3ZSBrbm93IGhvdyB0byBwYXJzZS4gSWYgYSBrZXl3b3JkCisgKiBp cyBmb3VuZCBhdCB0aGUgdG9wIGxldmVsLCBpdCBtdXN0IGJlIGluIHRoaXMgbGlzdC4KKyAqCisg KiBJZiB5b3UgY2hhbmdlIGFueXRoaW5nIGhlcmUsIGFsc28gdXBkYXRlIHBncGFfcGFyc2VfYWR2 aWNlX3RhZyBhbmQKKyAqIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnLgorICovCit0eXBlZGVmIGVu dW0gcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3sKKwlQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLAor CVBHUEFfVEFHX0ZPUkVJR05fSk9JTiwKKwlQR1BBX1RBR19HQVRIRVIsCisJUEdQQV9UQUdfR0FU SEVSX01FUkdFLAorCVBHUEFfVEFHX0hBU0hfSk9JTiwKKwlQR1BBX1RBR19JTkRFWF9PTkxZX1ND QU4sCisJUEdQQV9UQUdfSU5ERVhfU0NBTiwKKwlQR1BBX1RBR19KT0lOX09SREVSLAorCVBHUEFf VEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTiwK KwlQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19ORVNURURfTE9P UF9NRU1PSVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOLAorCVBHUEFfVEFHX05PX0dB VEhFUiwKKwlQR1BBX1RBR19QQVJUSVRJT05XSVNFLAorCVBHUEFfVEFHX1NFTUlKT0lOX05PTl9V TklRVUUsCisJUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFLAorCVBHUEFfVEFHX1NFUV9TQ0FOLAor CVBHUEFfVEFHX1RJRF9TQ0FOCit9IHBncGFfYWR2aWNlX3RhZ190eXBlOworCisvKgorICogQW4g aXRlbSBvZiBhZHZpY2UsIG1lYW5pbmcgYSB0YWcgYW5kIHRoZSBsaXN0IG9mIGFsbCB0YXJnZXRz IHRvIHdoaWNoCisgKiBpdCBpcyBiZWluZyBhcHBsaWVkLgorICoKKyAqICJ0YXJnZXRzIiBpcyBh IGxpc3Qgb2YgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuCisgKgorICogVGhlIExpc3QgcmV0 dXJuZWQgZnJvbSBwZ3BhX3l5cGFyc2UgaXMgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtIG9iamVj dHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfYWR2aWNlX2l0ZW0KK3sKKwlwZ3BhX2Fkdmlj ZV90YWdfdHlwZSB0YWc7CisJTGlzdAkgICAqdGFyZ2V0czsKK30gcGdwYV9hZHZpY2VfaXRlbTsK KworLyoKKyAqIFJlc3VsdCBvZiBjb21wYXJpbmcgYW4gYXJyYXkgb2YgcGdwYV9yZWxhdGlvbl9p ZGVudGlmaWVyIG9iamVjdHMgdG8gYQorICogcGdwYV9hZHZpY2VfdGFyZ2V0LgorICoKKyAqIFBH UEFfSVRNX0VRVUFMIG1lYW5zIGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IHNvbWUgaWRlbnRp ZmllciwgYW5kCisgKiBhbGwgaWRlbnRpZmllcnMgd2VyZSBtYXRjaGVkIHRvIGEgdGFyZ2V0Lgor ICoKKyAqIFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCBtZWFucyB0aGF0IGFsbCBpZGVudGlmaWVy cyBtYXRjaGVkIHRvIGEgdGFyZ2V0LAorICogYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgdGFyZ2V0 cy4gR2VuZXJhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBpcworICogbG9va2luZyB0 byBhcHBseSB0byBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2ZSBwbHVzIHNvbWUgYWRkaXRpb25hbCBv bmVzIHRoYXQKKyAqIHdlIGRvbid0IGhhdmUuCisgKgorICogUEdQQV9JVE1fVEFSR0VUU19BUkVf U1VCU0VUIG1lYW5zIHRoYXQgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgYW4KKyAqIGlkZW50 aWZpZXJzLCBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciBpZGVudGlmaWVycy4gR2VuZXJhbGx5LCB0 aGlzIG1lYW5zCisgKiB0aGF0IHRoZSBhZHZpY2UgaXMgbG9va2luZyB0byBhcHBseSB0byBzb21l IGJ1dCBub3QgYWxsIG9mIHRoZSByZWxzIHdlIGhhdmUuCisgKgorICogUEdQQV9JVE1fSU5URVJT RUNUSU5HIG1lYW5zIHRoYXQgc29tZSBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlIG1hdGNo ZWQsCisgKiBidXQgbmVpdGhlciBhbGwgaWRlbnRpZmllcnMgbm9yIGFsbCB0YXJnZXRzIGNvdWxk IGJlIG1hdGNoZWQgdG8gaXRlbXMgaW4KKyAqIHRoZSBvdGhlciBzZXQuCisgKgorICogUEdQQV9J VE1fRElTSk9JTlQgbWVhbnMgdGhhdCBubyBtYXRjaGVzIGJldHdlZW4gaWRlbnRpZmVpcnMgYW5k IHRhcmdldHMgd2VyZQorICogZm91bmQuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfSVRN X0VRVUFMLAorCVBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9UQVJHRVRTX0FS RV9TVUJTRVQsCisJUEdQQV9JVE1fSU5URVJTRUNUSU5HLAorCVBHUEFfSVRNX0RJU0pPSU5UCit9 IHBncGFfaXRtX3R5cGU7CisKKy8qIGZvciBwZ3BhX3NjYW5uZXIubCBhbmQgcGdwYV9wYXJzZXIu eSAqLwordW5pb24gWVlTVFlQRTsKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNk ZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCAqeXlzY2FuX3Q7Cisj ZW5kaWYKKworLyogaW4gcGdwYV9zY2FubmVyLmwgKi8KK2V4dGVybiBpbnQJcGdwYV95eWxleCh1 bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsCisJCQkJCSAgIGNoYXIg KipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHBn cGFfeXllcnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJ CQkgeXlzY2FuX3QgeXlzY2FubmVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0 ZXJuIHZvaWQgcGdwYV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlz Y2FubmVycCk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nh bm5lcik7CisKKy8qIGluIHBncGFfcGFyc2VyLnkgKi8KK2V4dGVybiBpbnQJcGdwYV95eXBhcnNl KExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5f dCB5eXNjYW5uZXIpOworZXh0ZXJuIExpc3QgKnBncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNl X3N0cmluZywgY2hhciAqKmVycm9yX3ApOworCisvKiBpbiBwZ3BhX2FzdC5jICovCitleHRlcm4g Y2hhciAqcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNl X3RhZyk7CitleHRlcm4gYm9vbCBwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocGdwYV9p ZGVudGlmaWVyICpyaWQsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQp OworZXh0ZXJuIHBncGFfaXRtX3R5cGUgcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50 IG5yaWRzLAorCQkJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJ CQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIGJvb2wgcGdwYV9pbmRl eF90YXJnZXRzX2VxdWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwKKwkJCQkJCQkJCSBwZ3BhX2lu ZGV4X3RhcmdldCAqaTIpOworZXh0ZXJuIHBncGFfYWR2aWNlX3RhZ190eXBlIHBncGFfcGFyc2Vf YWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpOworZXh0ZXJuIHZvaWQgcGdw YV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwKKwkJCQkJCQkJCSAgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfaW5kZXhfdGFy Z2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0 KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29s bGVjdG9yLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEyMDg1ZDlkNzVmCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCkBAIC0wLDAg KzEsNjM3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5jCisg KgkgIGNvbGxlY3QgYWR2aWNlIGludG8gYmFja2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5Cisg KgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9y LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3Iu aCIKKworI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgImZ1bmNhcGku aCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisj aW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVj dGVkX2xvY2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZSk7CisKKyNkZWZpbmUgQURWSUNFX0NIVU5LX1NJWkUJCTEwMjQKKyNkZWZp bmUgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkUJNjQKKworI2RlZmluZQlQR19HRVRfQURWSUNFX0NP TFVNTlMJNworCisvKgorICogQWR2aWNlIGV4dHJhY3RlZCBmcm9tIG9uZSBxdWVyeSBwbGFuLCB0 b2dldGhlciB3aXRoIHRoZSBxdWVyeSBzdHJpbmcKKyAqIGFuZCB2YXJpb3VzIG90aGVyIGlkZW50 aWZ5aW5nIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfY29sbGVjdGVkX2Fkdmlj ZQoreworCU9pZAkJCXVzZXJpZDsJCQkvKiB1c2VyIE9JRCAqLworCU9pZAkJCWRiaWQ7CQkJLyog ZGF0YWJhc2UgT0lEICovCisJdWludDY0CQlxdWVyeWlkOwkJLyogcXVlcnkgaWRlbnRpZmllciAq LworCVRpbWVzdGFtcFR6IHRpbWVzdGFtcDsJCS8qIHF1ZXJ5IHRpbWVzdGFtcCAqLworCWludAkJ CWFkdmljZV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGFkdmljZSBpbiB0ZXh0dWFsIGRhdGEgKi8KKwlj aGFyCQl0ZXh0dWFsX2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlOworCisvKgorICogQSBidW5jaCBvZiBwb2ludGVycyB0byBwZ3BhX2NvbGxlY3Rl ZF9hZHZpY2Ugb2JqZWN0cywgc3RvcmVkIGluCisgKiBiYWNrZW5kLWxvY2FsIG1lbW9yeS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3sKKwlwZ3BhX2NvbGxl Y3RlZF9hZHZpY2UgKmVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX2xvY2FsX2Fk dmljZV9jaHVuazsKKworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUgcGdwYV9j b2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMgdGhhdCB3ZSdyZQorICogc3RvcmluZyBpbiBsb2NhbCBt ZW1vcnkuCisgKgorICogV2UgYXNzaWduIGNvbnNlY3V0aXZlIElEcywgc3RhcnRpbmcgZnJvbSAw LCB0byBlYWNoIHBncGFfY29sbGVjdGVkX2FkdmljZQorICogb2JqZWN0IHRoYXQgd2Ugc3RvcmUu IFRoZSBhY3R1YWwgc3RvcmFnZSBpcyBhbiBhcnJheSBvZiBjaHVua3MsIHdoaWNoCisgKiBoZWxw cyBrZWVwIG1lbWNweSgpIG92ZXJoZWFkIGxvdyB3aGVuIHdlIHN0YXJ0IGRpc2NhcmRpbmcgb2xk ZXIgZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2UKK3sKKwl1aW50 NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWlu dAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCXBncGFfbG9jYWxfYWR2aWNlX2NodW5r ICoqY2h1bmtzOworfSBwZ3BhX2xvY2FsX2FkdmljZTsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3Bh X2xvY2FsX2FkdmljZV9jaHVuaywgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEs CisgKiBzbyB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVy cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rCit7CisJZHNh X3BvaW50ZXIgZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfc2hhcmVkX2Fkdmlj ZV9jaHVuazsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2FkdmljZSwgYnV0IHN0b3Jl ZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsIHNvCisgKiB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRl ciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9z aGFyZWRfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2NAkJb2xkZXN0X2lkOwor CXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlk c2FfcG9pbnRlciBjaHVua3M7Cit9IHBncGFfc2hhcmVkX2FkdmljZTsKKworLyogUG9pbnRlcnMg dG8gbG9jYWwgYW5kIHNoYXJlZCBjb2xsZWN0b3JzICovCitzdGF0aWMgcGdwYV9sb2NhbF9hZHZp Y2UgKmxvY2FsX2NvbGxlY3RvciA9IE5VTEw7CitzdGF0aWMgcGdwYV9zaGFyZWRfYWR2aWNlICpz aGFyZWRfY29sbGVjdG9yID0gTlVMTDsKKworLyogU3RhdGljIGZ1bmN0aW9ucyAqLworc3RhdGlj IHBncGFfY29sbGVjdGVkX2FkdmljZSAqcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVz ZXJpZCwKKwkJCQkJCQkJCQkJCQkJIE9pZCBkYmlkLAorCQkJCQkJCQkJCQkJCQkgdWludDY0IHF1 ZXJ5SWQsCisJCQkJCQkJCQkJCQkJCSBUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJ CQkJCSBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBjaGFy ICphZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkgZHNhX2FyZWEgKmFyZWEsCisJCQkJCQkJ CQkJCQkJCSBkc2FfcG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVfbG9j YWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpOworc3RhdGljIHZvaWQgcGdwYV90 cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9zaGFy ZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgcGdwYV90cmlt X3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCk7CisKKy8qIEhlbHBlciBm dW5jdGlvbiB0byBleHRyYWN0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitxdWVyeV9zdHJpbmcocGdwYV9j b2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YTsKK30KKwor LyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIGFkdmljZSBzdHJpbmcgZnJvbSBwZ3Bh X2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCithZHZpY2Vf c3RyaW5nKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFs X2RhdGEgKyBjYS0+YWR2aWNlX29mZnNldDsKK30KKworLyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBx dWVyeSBhZHZpY2UgaW50byB0aGUgbG9jYWwgb3Igc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsCisg KiBhcyBhcHByb3ByaWF0ZS4KKyAqLwordm9pZAorcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQg cXVlcnlJZCwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQljb25zdCBjaGFyICphZHZp Y2Vfc3RyaW5nKQoreworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCU9pZAkJCWRiaWQg PSBNeURhdGFiYXNlSWQ7CisJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OworCisJaWYgKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsK KwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2Vf Z2V0X21jeHQoKSk7CisJCWNhID0gcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBk YmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCQkJcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5n LAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCQlwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShjYSk7 CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfcGxh bl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJZHNhX2FyZWEgICAq YXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJCWRzYV9wb2ludGVyIGNhX3BvaW50 ZXI7CisKKwkJcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlk LCBub3csCisJCQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJ CQkJCQkJICAgJmNhX3BvaW50ZXIpOworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9p bnRlcik7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlIG9iamVjdC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQg dG8gYWxsb2NhdGUgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9p bnRlciBpcyByZXR1cm5lZCB2aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRo ZSBuZXcgb2JqZWN0IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwK KyAqIGFuZCByZXN1bHQgaXMgbm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMg cGdwYV9jb2xsZWN0ZWRfYWR2aWNlICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1 c2VyaWQsIE9pZCBkYmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRp bWVzdGFtcCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNv bnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3Bv aW50ZXIgKnJlc3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4o cXVlcnlfc3RyaW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxl bihhZHZpY2Vfc3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVj dGVkX2FkdmljZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZp Y2Vfc3RyaW5nX2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRv dGFsX2xlbmd0aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0 b3RhbF9sZW5ndGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9 CisKKwljYS0+dXNlcmlkID0gR2V0VXNlcklkKCk7CisJY2EtPmRiaWQgPSBNeURhdGFiYXNlSWQ7 CisJY2EtPnF1ZXJ5aWQgPSBxdWVyeUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJ Y2EtPmFkdmljZV9vZmZzZXQgPSBxdWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50 ZXh0dWFsX2RhdGEsIHF1ZXJ5X3N0cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5 KCZjYS0+dGV4dHVhbF9kYXRhW2NhLT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmlu ZywgYWR2aWNlX3N0cmluZ19sZW5ndGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRk IGEgcGdfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tlbmQtbG9jYWwgYWR2aWNl IGNvbGxlY3Rpb24uCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzd2l0Y2hpbmcg dG8gdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhlIHByb3ZpZGVkIG9iamVj dCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUgY29udGV4dC4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2Fkdmlj ZSAqY2EpCit7CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7 CisJcGdwYV9sb2NhbF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhl IGxvY2FsIGFkdmljZSBjb2xsZWN0b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5v dy4gKi8KKwlpZiAobGEgPT0gTlVMTCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdwYV9s b2NhbF9hZHZpY2UpKTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNF X0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBncGFfbG9j YWxfYWR2aWNlX2NodW5rICosCisJCQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRf c2l6ZSk7CisJCWxvY2FsX2NvbGxlY3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsg YW5kIG9mZnNldCBhdCB3aGljaCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1i ZXIgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlj aHVua19vZmZzZXQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktf U0laRTsKKworCS8qIEV4dGVuZCBjaHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVu a19udW1iZXIgPj0gbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJ bmV3X3NpemU7CisKKwkJbmV3X3NpemUgPSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUg KyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHJlcGFsbG9jMF9hcnJh eShsYS0+Y2h1bmtzLAorCQkJCQkJCQkJIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICosCisJCQkJ CQkJCQkgbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplLAorCQkJCQkJCQkJIG5ld19zaXpl KTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCisJ LyogQWxsb2NhdGUgbmV3IGNodW5rLCBpZiBuZWVkZWQuICovCisJaWYgKGxhLT5jaHVua3NbY2h1 bmtfbnVtYmVyXSA9PSBOVUxMKQorCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0gPSBwYWxsb2Mw X29iamVjdChwZ3BhX2xvY2FsX2FkdmljZV9jaHVuayk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5k IGJ1bXAgbmV4dC1pZCBjb3VudGVyLiAqLworCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJl cl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9PSBOVUxMKTsKKwlsYS0+Y2h1bmtzW2NodW5rX251 bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IGNhOworCSsrbGEtPm5leHRfaWQ7CisKKwkv KiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4g Ki8KKwlwZ3BhX3RyaW1fbG9jYWxfYWR2aWNlKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rp b25fbGltaXQpOworfQorCisvKgorICogQWRkIGEgcGdfY29sbGVjdGVkX2FkdmljZSBvYmplY3Qg dG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiAnY2FfcG9pbnRlcicgc2hv dWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUgcGdfcGxhbl9hZHZpY2UgRFNBIGFyZWEK KyAqIGFuZCBzaG91bGQgcG9pbnQgdG8gYW4gb2JqZWN0IG9mIHR5cGUgcGdwYV9jb2xsZWN0ZWRf YWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9w b2ludGVyIGNhX3BvaW50ZXIpCit7CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQlj aHVua19vZmZzZXQ7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2Vf YXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7 CisJcGdwYV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50 ZXIgKmNodW5rX2FycmF5OworCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkv KiBMb2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ss IExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUg c2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUg dGhlIGZpcnN0IG9uZXMgdG8gYXR0YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVj dC4KKwkgKi8KKwlpZiAoc2EgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxl Y3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0K KwkJCQlkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2UpKTsKKwkJ c2hhcmVkX2NvbGxlY3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFy ZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90 aGVyIGJhY2tlbmQgbWF5IGhhdmUgc3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4g Y29sbGVjdG9yIG9iamVjdCBidXQgZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsK KwkgKiBhcnJheSwgc28gd2UgbXVzdCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsg YXJyYXkgaGVyZSB3aGV0aGVyCisJICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBv YmplY3QuCisJICovCisJaWYgKHNoYXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRl ZF9zaXplID09IDApCisJeworCQlzYS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwK KwkJCQkJCSAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsK KwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJ WkU7CisJfQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3Jl IHRoaXMgYWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNl X2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAt IHNhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNz IG9mIHRoZSBjaHVuayBhcnJheSBhbmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChj aHVua19udW1iZXIgPj0gc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50 CQkJbmV3X3NpemU7CisJCWRzYV9wb2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNB IGNhbid0IGVubGFyZ2UgYW4gZXhpc3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEg bmV3CisJCSAqIGFsbG9jYXRpb24gYW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3Np emUgPSBzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlf U0laRTsKKwkJbmV3X2NodW5rcyA9IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2lu dGVyKSAqIG5ld19zaXplKTsKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwg bmV3X2NodW5rcyk7CisJCW1lbWNweShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEs IHNhLT5jaHVua3MpLAorCQkJICAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJh eV9hbGxvY2F0ZWRfc2l6ZSk7CisJCWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+ Y2h1bmtzID0gbmV3X2NodW5rczsKKwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0g bmV3X3NpemU7CisJfQorCWVsc2UKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJl YSwgc2EtPmNodW5rcyk7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1 bmssIGFsbG9jYXRpbmcgaXQgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19u dW1iZXJdID09IEludmFsaWREc2FQb2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJd ID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVu aykpOworCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251 bWJlcl0pOworCisJLyogU2F2ZSBwb2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8K KwlBc3NlcnQoY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRl cik7CisJY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+ bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNj YXJkIG9sZCBkYXRhLiAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIHBnX3BsYW5f YWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0KTsKKworCS8qIFJlbGVhc2UgbG9jayBvbiBz aGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworfQorCisvKgor ICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9y eSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX3RyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCkKK3sKKwlwZ3BhX2xvY2FsX2Fkdmlj ZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2 NAkJdHJpbV9jb3VudDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJp bV9jaHVua19jb3VudDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKworCS8qIElm IHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8u ICovCisJY3VycmVudF9jb3VudCA9IGxhLT5uZXh0X2lkIC0gbGEtPm9sZGVzdF9pZDsKKwlpZiAo Y3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogRnJlZSBlbm91Z2ggZW50 cmllcyB0byBnZXQgdXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0g Y3VycmVudF9jb3VudCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVp bnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKworCQljaHVua19u dW1iZXIgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpF OworCQljaHVua19vZmZzZXQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklD RV9DSFVOS19TSVpFOworCisJCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSAhPSBOVUxMKTsKKwkJcGZyZWUobGEtPmNodW5rc1tjaHVua19udW1i ZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0pOworCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0t PmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IE5VTEw7CisJCSsrbGEtPm9sZGVzdF9pZDsKKwkJLS10 cmltX2NvdW50OworCX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJl bHkgdW51c2VkLiAqLworCXRyaW1fY2h1bmtfY291bnQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5i YXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJp bV9jaHVua19jb3VudDsgKytuKQorCQlwZnJlZShsYS0+Y2h1bmtzW25dKTsKKworCS8qIFNsaWRl IHJlbWFpbmluZyBjaHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJy YXkuICovCisJdG90YWxfY2h1bmtfY291bnQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCAr CisJCQkJCQkgQURWSUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJl bWFpbmluZ19jaHVua19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3Vu dDsKKwlpZiAocmVtYWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmbGEtPmNodW5r c1swXSwgJmxhLT5jaHVua3NbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKHBncGFfbG9j YWxfYWR2aWNlX2NodW5rICopICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0 IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmxhLT5jaHVua3NbcmVt YWluaW5nX2NodW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2No dW5rICopCisJCSAgICogKHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50 KSk7CisKKwkvKiBBZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFz ZV9pZCArPSB0cmltX2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisg KiBEaXNjYXJkIGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhj ZXNzIG9mIHRoZQorICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90 cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCkKK3sKKwlwZ3BhX3No YXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291 bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJ dWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50 OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJl YWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3Vu dCA9IHNhLT5uZXh0X2lkIC0gc2EtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBs aW1pdCkKKwkJcmV0dXJuOworCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXku ICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisK KwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0 LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1f Y291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtf b2Zmc2V0OworCQlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJCWNodW5rX251 bWJlciA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJCWNodW5rX29mZnNldCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNF X0NIVU5LX1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJy YXlbY2h1bmtfbnVtYmVyXSk7CisJCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRd ICE9IEludmFsaWREc2FQb2ludGVyKTsKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmstPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSk7CisJCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBJbnZhbGlk RHNhUG9pbnRlcjsKKwkJKytzYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJ LyogRnJlZSBhbnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJp bV9jaHVua19jb3VudCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NI VU5LX1NJWkU7CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24p CisJCWRzYV9mcmVlKGFyZWEsIGNodW5rX2FycmF5W25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmlu ZyBjaHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJ dG90YWxfY2h1bmtfY291bnQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCArCisJCQkJCQkg QURWSUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19j aHVua19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAo cmVtYWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmY2h1bmtfYXJyYXlbMF0sICZj aHVua19hcnJheVt0cmltX2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YoZHNhX3BvaW50ZXIpICog cmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBvaW50ZXJz IGFyb3VuZC4gKi8KKwltZW1zZXQoJmNodW5rX2FycmF5W3JlbWFpbmluZ19jaHVua19jb3VudF0s IDAsCisJCSAgIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90 YWxfY2h1bmtfY291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBi YXNlIElEIHZhbHVlIGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtf Y291bnQgKiBBRFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5j dGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkK KyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlpZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXBncGFfdHJpbV9sb2Nh bF9hZHZpY2UoMCk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxh YmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2Fs IG1lbW9yeQorICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2Fk dmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2Fy ZWEoKTsKKworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJ LyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVj dG9yIHlldCwgZml4IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3Qg ZXZlbiBleGlzdCwgd2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxz ZS4KKwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tS ZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJl ZF9jb2xsZWN0b3IgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0 b3IpOworCX0KKworCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2Fk dmljZShhcmVhLCAwKTsKKworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JF VFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZp Y2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRf Y29sbGVjdGVkX2xvY2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldElu Zm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3Bh X2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0 VXNlcklkKCk7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEg PT0gTlVMTCkKKwkJcmV0dXJuIChEYXR1bSkgMDsKKworCS8qIExvb3Agb3ZlciBhbGwgZW50cmll cy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IGxhLT5vbGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7 ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZz ZXQ7CisJCXBncGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VU X0FEVklDRV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9 IHswfTsKKworCQljaHVua19udW1iZXIgPSAoaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hV TktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NI VU5LX1NJWkU7CisKKwkJY2EgPSBsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1 bmtfb2Zmc2V0XTsKKworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNl cmlkKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsK KwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJd ID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERh dHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRp bWVzdGFtcCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5n KGNhKSk7CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhj YSkpOworCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8t PnNldERlc2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0p IDA7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVj dGVkIGluIHNoYXJlZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVk X2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChS ZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAq c3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdf cGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdw YV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisKKwlJbml0TWF0ZXJpYWxp emVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdM b2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3Jl IG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhh dCBub3c7CisJICogYnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBj YW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChz YSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWRE c2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1 cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9p bnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJl c3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJ Zm9yICh1aW50NjQgaWQgPSBzYS0+b2xkZXN0X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ug KmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51 bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlk IC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChp ZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dl dF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKworCQl2YWx1 ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0 dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQp OworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0 XSA9IFRpbWVzdGFtcEdldERhdHVtKGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKHF1ZXJ5X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5n R2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVl cyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51 bGxzKTsKKwl9CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9j a1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmI2ZTc0NmEwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsMTggQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIHBncGFfY29sbGVjdG9yLmgKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50 byBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAorICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaWZuZGVmIFBHUEFfQ09MTEVDVE9SX0gKKyNkZWZpbmUgUEdQQV9DT0xMRUNU T1JfSAorCitleHRlcm4gdm9pZCBwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBj b25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJp bmcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9p ZGVudGlmaWVyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZmE4MDc1ZDY2ZQotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKQEAg LTAsMCArMSw0NzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmll ci5jCisgKgkgIGNyZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUg ZW50cmllcworICoKKyAqIFRoZSBnb2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGJlIGFibGUgdG8g cHJvZHVjZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UKKyAqIHRhYmxlIGVudHJpZXMgdGhhdCBhcmUg dW5pcXVlLCB1bmRlcnN0YW5kYWJsZSB0byBodW1hbiBiZWluZ3MsIGFuZAorICogYWJsZSB0byBi ZSByZWNvbnN0cnVjdGVkIGR1cmluZyBmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLiBBcyBhbgorICog ZXhjZXB0aW9uLCB3ZSBkbyBub3QgY2FyZSBhYm91dCwgb3Igd2FudCB0byBwcm9kdWNlLCBpZGVu dGlmaWVycyBmb3IKKyAqIFJURV9KT0lOIGVudHJpZXMuIFRoaXMgaXMgYmVjYXVzZSAoMSkgd2Ug d291bGQgZW5kIHVwIHdpdGggYSB0b24gb2YKKyAqIFJURXMgd2l0aCB1bmhlbHBmdWwgbmFtZXMg bGlrZSB1bm5hbWVkX2pvaW5fMTc7ICgyKSBub3QgYWxsIGpvaW5zIGhhdmUKKyAqIFJURXM7IGFu ZCAoMykgd2UgaW50ZW5kIHRvIHJlZmVyIHRvIGpvaW5zIGJ5IHRoZWlyIGNvbnN0aXR1ZW50IG1l bWJlcnMKKyAqIHJhdGhlciB0aGFuIGJ5IHJlZmVyZW5jZSB0byB0aGUgam9pbiBSVEUuCisgKgor ICogSW4gZ2VuZXJhbCwgd2UgY29uc3RydWN0IGlkZW50aWZpZXJzIG9mIHRoZSBmb2xsb3dpbmcg Zm9ybToKKyAqCisgKiBhbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL2NoaWxkX3RhYmxlX25h bWVAc3VicXVlcnlfbmFtZQorICoKKyAqIEhvd2V2ZXIsIG9jY3VycmVuY2VfbnVtYmVyIGlzIG9t aXR0ZWQgd2hlbiBpdCBpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZQorICogd2l0aGluIHRoZSBzYW1l IHN1YnF1ZXJ5LCBjaGlsZF90YWJsZV9uYW1lIGlzIG9taXR0ZWQgZm9yIHJlbGF0aW9ucyB0aGF0 CisgKiBhcmUgbm90IGNoaWxkIHRhYmxlcywgYW5kIHN1YnF1ZXJ5X25hbWUgaXMgb21pdHRlZCBm b3IgdGhlIHRvcG1vc3QKKyAqIHF1ZXJ5IGxldmVsLiBXaGVuZXZlciBhbiBpdGVtIGlzIG9taXR0 ZWQsIHRoZSBwcmVjZWRpbmcgcHVuY3R1YXRpb24gbWFyaworICogaXMgYWxzbyBvbWl0dGVkLiAg SWRlbnRpZmllci1zdHlsZSBlc2NhcGluZyBpcyBhcHBsaWVkIHRvIGFsaWFzX25hbWUgYW5kCisg KiBzdWJxdWVyeV9uYW1lLiAgV2hlbmV2ZXIgd2UgaW5jbHVkZSBjaGlsZF90YWJsZV9uYW1lLCB3 ZSBhbHdheXMKKyAqIHNjaGVtYS1xdWFsaWZpZWQgbmFtZSwgYnV0IHdyaXRpbmcgdGhlaXIgb3du IHBsYW4gYWR2aWNlIGFyZSBub3QgcmVxdWlyZWQKKyAqIHRvIGRvIHNvLiAgSWRlbnRpZmllci1z dHlsZSBlc2NhcGluZyBpcyBhcHBsaWVkIHRvIHRoZSBzY2hlbWEgYW5kIHRvIHRoZQorICogcmVs YXRpb24gbmFtZXMgc2VwYXJhdGVseS4KKyAqCisgKiBUaGUgdXBzaG90IG9mIGFsbCBvZiB0aGVz ZSBydWxlcyBpcyB0aGF0IGluIHNpbXBsZSBjYXNlcywgdGhlIHJlbGF0aW9uCisgKiBpZGVudGlm aWVyIGlzIHRleHR1YWxseSBpZGVudGljYWwgdG8gdGhlIGFsaWFzIG5hbWUsIG1ha2luZyBsaWZl IGVhc2llcgorICogZm9yIHVzZXJzLiBIb3dldmVyLCBldmVuIGluIGNvbXBsZXggY2FzZXMsIGV2 ZXJ5IHJlbGF0aW9uIGlkZW50aWZpZXIKKyAqIGZvciBhIGdpdmVuIHF1ZXJ5IHdpbGwgYmUgdW5p cXVlIChvciBhdCBsZWFzdCB3ZSBob3BlIHNvOiBpZiBub3QsIHRoaXMKKyAqIGNvZGUgaXMgYnVn Z3kgYW5kIHRoZSBpZGVudGlmaWVyIGZvcm1hdCBtaWdodCBuZWVkIHRvIGJlIHJldGhvdWdodCku CisgKgorICogQSBrZXkgZ29hbCBvZiB0aGlzIHN5c3RlbSBpcyB0aGF0IHdlIHdhbnQgdG8gYmUg YWJsZSB0byByZWNvbnN0cnVjdCB0aGUKKyAqIHNhbWUgaWRlbnRpZmllcnMgZHVyaW5nIGEgZnV0 dXJlIHBsYW5uaW5nIGN5Y2xlIGZvciB0aGUgc2FtZSBxdWVyeSwgc28KKyAqIHRoYXQgaWYgYSBj ZXJ0YWluIGJlaGF2aW9yIGlzIHNwZWNpZmllZCBmb3IgYSBjZXJ0YWluIGlkZW50aWZpZXIsIHdl IGNhbgorICogcHJvcGVybHkgaWRlbnRpZnkgdGhlIFJUSSBmb3Igd2hpY2ggdGhhdCBiZWhhdmlv ciBpcyBtYW5kYXRlZC4gSW4gb3JkZXIKKyAqIGZvciB0aGlzIHRvIHdvcmssIHN1YnF1ZXJ5IG5h bWVzIG11c3QgYmUgdW5pcXVlIGFuZCBrbm93biBiZWZvcmUgdGhlCisgKiBzdWJxdWVyeSBpcyBw bGFubmVkLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgaWRlbnRpZmllciBtdXN0IG5vdCBkZXBl bmQKKyAqIG9uIGFueSBwYXJ0IG9mIHRoZSBxdWVyeSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHN1 YnF1ZXJ5IGxldmVsLiBJbgorICogcGFydGljdWxhciwgb2NjdXJyZW5jZV9udW1iZXIgbXVzdCBi ZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIHRoZSByYW5nZQorICogdGFibGUgZm9yIHRoZSByZWxl dmFudCBzdWJxdWVyeSwgbm90IHRoZSBmaW5hbCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNlci9wYXJzZXRy ZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgorCitzdGF0aWMgSW5kZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0 YWJsZV9sZW5ndGgsIExpc3QgKnJ0YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBwaW5mb3MpOwor c3RhdGljIGludAlwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRv cF9ydGlfbWFwLAorCQkJCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSk7 CisKKy8qCisgKiBDcmVhdGUgYSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20gc2NyYXRjaC4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFsbCB0aGUgaGVh dnkgbGlmdGluZywgc28gaXQncworICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ugb25lIG9mIHRo ZSBmdW5jdGlvbnMgYmVsb3cgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUgaGVhZGVyIGNv bW1lbnRzIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICogaWRlbnRpZmll ci4KKyAqLworY29uc3QgY2hhciAqCitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFf aWRlbnRpZmllciAqcmlkKQoreworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFzc2VydChyaWQt PmFsaWFzX25hbWUgIT0gTlVMTCk7CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmllcihyaWQtPmFs aWFzX25hbWUpOworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlpZiAocmlkLT5v Y2N1cnJlbmNlID4gMSkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVzdWx0LCByaWQt Pm9jY3VycmVuY2UpOworCisJaWYgKHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsKKwkJaWYgKHJp ZC0+cGFydG5zcCA9PSBOVUxMKQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzIiwgcmVzdWx0 LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRuc3ApKTsKKwkJZWxzZQorCQkJ cmVzdWx0ID0gcHNwcmludGYoIiVzLyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRl bnRpZmllcihyaWQtPnBhcnRuc3ApLAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBh cnRyZWwpKTsKKwl9CisKKwlpZiAocmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJcmVzdWx0ID0g cHNwcmludGYoIiVzQCVzIiwgcmVzdWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGxhbl9uYW1l KSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlk ZW50aWZpZXIgZm9yIGEgcGFydGljdWxhciBSVEkuCisgKgorICogVGhlIGNhbGxlciBwcm92aWRl cyByb290IGFuZCBydGksIGFuZCBnZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBiYWNrIHZpYQor ICogdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2NvbXB1dGVfaWRl bnRpZmllcl9ieV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkgICBw Z3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsKKwlpbnQJCQlv Y2N1cnJlbmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxFbnRyeSAqdG9w X3J0ZTsKKwljaGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0cmVsID0gTlVM TDsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUgdG9wbW9zdCBw YXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBXZSBkbyB0aGlz IGJlY2F1c2Ugd2UgaWRlbnRpZnkgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMg YnkgdGhlIG5hbWUgb2YgdGhlIGNoaWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBjYW4gYWxzbyBo YXZlCisJICogY2hpbGQgcmVscyBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBoZXJlLgor CSAqLworCWZvciAoOzspCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlSYW5nZVRi bEVudHJ5ICpwYXJlbnRfcnRlOworCisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwg aWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5 ID09IE5VTEwgfHwKKwkJCShhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVt0b3BfcnRp XSkgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNo KGFwcGluZm8tPnBhcmVudF9yZWxpZCwgcm9vdCk7CisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5k ICE9IFJURV9SRUxBVElPTikKKwkJCWJyZWFrOworCisJCXRvcF9ydGkgPSBhcHBpbmZvLT5wYXJl bnRfcmVsaWQ7CisJfQorCisJLyogR2V0IHRoZSByYW5nZSB0YWJsZSBlbnRyaWVzIGZvciB0aGUg UlRJIGFuZCB0b3AgUlRJLiAqLworCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290KTsK Kwl0b3BfcnRlID0gcGxhbm5lcl9ydF9mZXRjaCh0b3BfcnRpLCByb290KTsKKwlBc3NlcnQocnRl LT5ydGVraW5kICE9IFJURV9KT0lOKTsKKwlBc3NlcnQodG9wX3J0ZS0+cnRla2luZCAhPSBSVEVf Sk9JTik7CisKKwkvKiBXb3JrIG91dCB0aGUgY29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8K Kwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IDE7IHByaW9yX3J0aSA8IHRvcF9ydGk7ICsrcHJpb3Jf cnRpKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcHJpb3JfcnRlOworCQlBcHBlbmRSZWxJbmZvICph cHBpbmZvOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJlbnQg dGhhdCBpcyBhIHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRhYmxl IGVudHJpZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJCSAq IGFuZCBuYW1lIG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJhdGUg b2NjdXJyZW5jZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqCisJCSAqIE5COiBhcHBl bmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlmIHRoZXJlIGFyZSBubyBjaGlsZHJlbgorCQkgKi8K KwkJaWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgIT0gTlVMTCAmJgorCQkJKGFwcGluZm8gPSBy b290LT5hcHBlbmRfcmVsX2FycmF5W3ByaW9yX3J0aV0pICE9IE5VTEwpCisJCXsKKwkJCVJhbmdl VGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNo KGFwcGluZm8tPnBhcmVudF9yZWxpZCwgcm9vdCk7CisJCQlpZiAocGFyZW50X3J0ZS0+cnRla2lu ZCA9PSBSVEVfUkVMQVRJT04pCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBTa2lwIE5VTEwg ZW50cmllcyBhbmQgam9pbnMuICovCisJCXByaW9yX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocHJp b3JfcnRpLCByb290KTsKKwkJaWYgKHByaW9yX3J0ZSA9PSBOVUxMIHx8IHByaW9yX3J0ZS0+cnRl a2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFz IG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFt ZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29r cyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwkvKiBJ ZiB0aGlzIGlzIGEgY2hpbGQgdGFibGUsIGdldCB0aGUgc2NoZW1hIGFuZCByZWxhdGlvbiBuYW1l cy4gKi8KKwlpZiAocnRpICE9IHRvcF9ydGkpCisJeworCQlwYXJ0bnNwID0gZ2V0X25hbWVzcGFj ZV9uYW1lX29yX3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQlwYXJ0cmVs ID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+cmVsaWQpOworCX0KKworCS8qIE9LLCB3ZSBoYXZlIGFsbCB0 aGUgYW5zd2VycyB3ZSBuZWVkLiBSZXR1cm4gdGhlbSB0byB0aGUgY2FsbGVyLiAqLworCXJpZC0+ YWxpYXNfbmFtZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwlyaWQtPm9jY3VycmVuY2Ug PSBvY2N1cnJlbmNlOworCXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJcmlkLT5wYXJ0cmVsID0g cGFydHJlbDsKKwlyaWQtPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKK30KKworLyoKKyAq IENvbXB1dGUgYSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIHNldCBvZiBSVElzLCBleGNlcHQg Zm9yIGFueSBSVEVfSk9JTgorICogUlRJcyB0aGF0IG1heSBiZSBwcmVzZW50LgorICoKKyAqIFJU RV9KT0lOIGVudHJpZXMgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgbWVudGlv bmVkIGJ5IHBsYW4KKyAqIGFkdmljZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxl IGZvciBtYWtpbmcgc3VyZSB0aGF0IHRoZSB0a2V5cyBhcnJheSBpcyBsYXJnZQorICogZW5vdWdo IHRvIHN0b3JlIHRoZSByZXN1bHRzLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51 bWJlciBvZiBpZGVudGlmaWVycyBjb21wdXRlZC4KKyAqLworaW50CitwZ3BhX2NvbXB1dGVfaWRl bnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBCaXRtYXBzZXQgKnJlbGlkcywK KwkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzKQoreworCWludAkJCWNvdW50ID0gMDsK KwlpbnQJCQlydGkgPSAtMTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlk cywgcnRpKSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0 Y2gocnRpLCByb290KTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29u dGludWU7CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBydGksICZyaWRz W2NvdW50KytdKTsKKwl9CisKKwlBc3NlcnQoY291bnQgPiAwKTsKKwlyZXR1cm4gY291bnQ7Cit9 CisKKy8qCisgKiBDcmVhdGUgYW4gYXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgZm9y IGFsbCB0aGUgbm9uLU5VTEwsCisgKiBub24tUlRFX0pPSU4gZW50cmllcyBpbiB0aGUgUGxhbm5l ZFN0bXQncyByYW5nZSB0YWJsZS4KKyAqLworcGdwYV9pZGVudGlmaWVyICoKK3BncGFfY3JlYXRl X2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUlu ZGV4CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisJcGdwYV9p ZGVudGlmaWVyICpyZXN1bHQgPSBwYWxsb2MwX2FycmF5KHBncGFfaWRlbnRpZmllciwgcnRhYmxl X2xlbmd0aCk7CisJSW5kZXgJICAgKnRvcF9ydGlfbWFwOworCWludAkJCXJ0aW5mb2luZGV4ID0g MDsKKwlTdWJQbGFuUlRJbmZvICpydGluZm8gPSBOVUxMOworCVN1YlBsYW5SVEluZm8gKm5leHRy dGluZm8gPSBOVUxMOworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZWxhdGlvbnMgYWRkZGVkIGJ5 IGluaGVyaXRhbmNlIGV4cGFuc2lvbiBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcy4KKwkgKi8K Kwl0b3BfcnRpX21hcCA9IHBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKHJ0YWJsZV9sZW5ndGgsIHBz dG10LT5ydGFibGUsCisJCQkJCQkJCQkJICBwc3RtdC0+YXBwZW5kUmVsYXRpb25zKTsKKworCS8q CisJICogV2hlbiB3ZSBiZWdpbiBpdGVyYXRpbmcsIHdlJ3JlIHByb2Nlc3NpbmcgdGhlIHBvcnRp b24gb2YgdGhlIHJhbmdlCisJICogdGFibGUgdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIHRvcC1s ZXZlbCBQbGFubmVySW5mbywgc28gc3VicnRpbmZvIGlzCisJICogTlVMTC4gTGF0ZXIsIHN1YnJ0 aW5mbyB3aWxsIGJlIHRoZSBTdWJQbGFuUlRJbmZvIGZvciB0aGUgc3VicXVlcnkgd2hvc2UKKwkg KiBwb3J0aW9uIG9mIHRoZSByYW5nZSB0YWJsZSB3ZSBhcmUgcHJvY2Vzc2luZy4gbmV4dHJ0aW5m byBpcyBhbHdheXMgdGhlCisJICogU3ViUGxhblJUSW5mbyB0aGF0IGZvbGxvd3MgdGhlIGN1cnJl bnQgb25lLCBpZiBhbnksIHNvIHdoZW4gd2UncmUKKwkgKiBwcm9jZXNzaW5nIHRoZSB0b3AtbGV2 ZWwgcXVlcnkncyBwb3J0aW9uIG9mIHRoZSByYW5nZSB0YWJsZSwgdGhlIG5leHQKKwkgKiBTdWJQ bGFuUlRJbmZvIGlzIHRoZSB2ZXJ5IGZpcnN0IG9uZS4KKwkgKi8KKwlpZiAocHN0bXQtPnN1YnJ0 aW5mb3MgIT0gTlVMTCkKKwkJbmV4dHJ0aW5mbyA9IGxpbml0aWFsKHBzdG10LT5zdWJydGluZm9z KTsKKworCS8qIE1haW4gbG9vcCBvdmVyIHRoZSByYW5nZSB0YWJsZS4gKi8KKwlmb3IgKEluZGV4 IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyBydGkrKykKKwl7CisJCWNvbnN0IGNoYXIg KnBsYW5fbmFtZTsKKwkJSW5kZXgJCXRvcF9ydGk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJ UmFuZ2VUYmxFbnRyeSAqdG9wX3J0ZTsKKwkJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJCWNo YXIJICAgKnBhcnRyZWwgPSBOVUxMOworCQlpbnQJCQlvY2N1cnJlbmNlOworCQlwZ3BhX2lkZW50 aWZpZXIgKnJpZDsKKworCQkvKgorCQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IFN1YlBsYW5SVElu Zm8sIGlmIGl0J3MgdGltZSB0byBkbyB0aGF0LgorCQkgKgorCQkgKiBUaGlzIGxvb3AgcHJvYmFi bHkgc2hvdWxkbid0IGV2ZXIgaXRlcmF0ZSBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCQkgKiB0 aGF0IHdvdWxkIGltcGx5IHRoYXQgYSBzdWJxdWVyeSB3YXMgcGxhbm5lZCBidXQgYWRkZWQgbm90 aGluZyB0bworCQkgKiB0aGUgcmFuZ2UgdGFibGU7IGJ1dCBsZXQncyBiZSBkZWZlbnNpdmUgYW5k IGFzc3VtZSBpdCBjYW4gaGFwcGVuLgorCQkgKi8KKwkJd2hpbGUgKG5leHRydGluZm8gIT0gTlVM TCAmJiBydGkgPiBuZXh0cnRpbmZvLT5ydG9mZnNldCkKKwkJeworCQkJcnRpbmZvID0gbmV4dHJ0 aW5mbzsKKwkJCWlmICgrK3J0aW5mb2luZGV4ID49IGxpc3RfbGVuZ3RoKHBzdG10LT5zdWJydGlu Zm9zKSkKKwkJCQluZXh0cnRpbmZvID0gTlVMTDsKKwkJCWVsc2UKKwkJCQluZXh0cnRpbmZvID0g bGlzdF9udGgocHN0bXQtPnN1YnJ0aW5mb3MsIHJ0aW5mb2luZGV4KTsKKwkJfQorCisJCS8qIEZl dGNoIHRoZSByYW5nZSB0YWJsZSBlbnRyeSwgaWYgYW55LiAqLworCQlydGUgPSBydF9mZXRjaChy dGksIHBzdG10LT5ydGFibGUpOworCisJCS8qCisJCSAqIFdlIGNhbid0IGFuZCBkb24ndCBuZWVk IHRvIGlkZW50aWZ5IG51bGwgZW50cmllcywgYW5kIHdlIGRvbid0IHdhbnQKKwkJICogdG8gaWRl bnRpZnkgam9pbiBlbnRyaWVzLgorCQkgKi8KKwkJaWYgKHJ0ZSA9PSBOVUxMIHx8IHJ0ZS0+cnRl a2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMg bm90IGEgcmVsYXRpb24gYWRkZWQgYnkgcGFydGl0aW9uZWQgdGFibGUgZXhwYW5zaW9uLAorCQkg KiB0aGVuIHRoZSB0b3AgUlRJL1JURSBhcmUganVzdCB0aGUgc2FtZSBhcyB0aGlzIFJUSS9SVEUu IE90aGVyd2lzZSwKKwkJICogd2UgbmVlZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgUlRJ L1JURSwgYW5kIG11c3QgYWxzbyBmZXRjaAorCQkgKiB0aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQg bmFtZS4KKwkJICovCisJCXRvcF9ydGkgPSB0b3BfcnRpX21hcFtydGkgLSAxXTsKKwkJaWYgKHJ0 aSA9PSB0b3BfcnRpKQorCQkJdG9wX3J0ZSA9IHJ0ZTsKKwkJZWxzZQorCQl7CisJCQl0b3BfcnRl ID0gcnRfZmV0Y2godG9wX3J0aSwgcHN0bXQtPnJ0YWJsZSk7CisJCQlwYXJ0bnNwID0KKwkJCQln ZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7 CisJCQlwYXJ0cmVsID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+cmVsaWQpOworCQl9CisKKwkJLyogQ29t cHV0ZSB0aGUgY29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwkJb2NjdXJyZW5jZSA9IHBn cGFfb2NjdXJyZW5jZV9udW1iZXIocHN0bXQtPnJ0YWJsZSwgdG9wX3J0aV9tYXAsCisJCQkJCQkJ CQkJCXJ0aW5mbywgdG9wX3J0aSk7CisKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50 IHBsYW4gKE5VTEwgZm9yIHRvcGxldmVsIHF1ZXJ5KS4gKi8KKwkJcGxhbl9uYW1lID0gcnRpbmZv ID09IE5VTEwgPyBOVUxMIDogcnRpbmZvLT5wbGFuX25hbWU7CisKKwkJLyogU2F2ZSBhbGwgdGhl IGRldGFpbHMgd2UndmUgZGVyaXZlZC4gKi8KKwkJcmlkID0gJnJlc3VsdFtydGkgLSAxXTsKKwkJ cmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCQlyaWQtPm9jY3Vy cmVuY2UgPSBvY2N1cnJlbmNlOworCQlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCQlyaWQtPnBh cnRyZWwgPSBwYXJ0cmVsOworCQlyaWQtPnBsYW5fbmFtZSA9IHBsYW5fbmFtZTsKKwl9CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisvKgorICogU2VhcmNoIGZvciBhIHBncGFfaWRlbnRpZmllciBp biB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgY29tcHV0ZWQgZm9yIHRoZQorICogcmFuZ2UgdGFi bGUuIElmIGV4YWN0bHkgb25lIG1hdGNoIGlzIGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIFJU STsgZWxzZQorICogcmV0dXJuIDAuCisgKi8KK0luZGV4CitwZ3BhX2NvbXB1dGVfcnRpX2Zyb21f aWRlbnRpZmllcihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAq cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRl eAkJcmVzdWx0ID0gMDsKKworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5n dGg7ICsrcnRpKQorCXsKKwkJcGdwYV9pZGVudGlmaWVyICpydGlfcmlkID0gJnJ0X2lkZW50aWZp ZXJzW3J0aSAtIDFdOworCisJCS8qIElmIHRoZXJlJ3Mgbm8gaWRlbnRpZmllciBmb3IgdGhpcyBS VEksIHNraXAgaXQuICovCisJCWlmIChydGlfcmlkLT5hbGlhc19uYW1lID09IE5VTEwpCisJCQlj b250aW51ZTsKKworCQkvKgorCQkgKiBJZiBpdCBtYXRjaGVzLCByZXR1cm4gdGhpcyBSVEkuIEFz IHVzdWFsLCBhbiBvbWl0dGVkIHBhcnRpdGlvbgorCQkgKiBzY2hlbWEgbWF0Y2hlcyBhbnl0aGlu ZywgYnV0IHBhcnRpdGlvbiBhbmQgcGxhbiBuYW1lcyBtdXN0IGVpdGhlcgorCQkgKiBtYXRjaCBl eGFjdGx5IG9yIGJlIG9taXR0ZWQgb24gYm90aCBzaWRlcy4KKwkJICovCisJCWlmIChzdHJjbXAo cmlkLT5hbGlhc19uYW1lLCBydGlfcmlkLT5hbGlhc19uYW1lKSA9PSAwICYmCisJCQlyaWQtPm9j Y3VycmVuY2UgPT0gcnRpX3JpZC0+b2NjdXJyZW5jZSAmJgorCQkJKHJpZC0+cGFydG5zcCA9PSBO VUxMIHx8IHJ0aV9yaWQtPnBhcnRuc3AgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChyaWQtPnBhcnRu c3AsIHJ0aV9yaWQtPnBhcnRuc3ApID09IDApICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhf bnVsbChyaWQtPnBhcnRyZWwsIHJ0aV9yaWQtPnBhcnRyZWwpICYmCisJCQlzdHJpbmdzX2VxdWFs X29yX2JvdGhfbnVsbChyaWQtPnBsYW5fbmFtZSwgcnRpX3JpZC0+cGxhbl9uYW1lKSkKKwkJewor CQkJaWYgKHJlc3VsdCAhPSAwKQorCQkJeworCQkJCS8qIE11bHRpcGxlIG1hdGNoZXMgd2VyZSBm b3VuZC4gKi8KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJlc3VsdCA9IHJ0aTsKKwkJfQorCX0K KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBCdWlsZCBhIG1hcHBpbmcgZnJvbSBlYWNo IFJUSSB0byB0aGUgUlRJIHdob3NlIGFsaWFzX25hbWUgd2lsbCBiZSB1c2VkIHRvCisgKiBjb25z dHJ1Y3QgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIuCisgKgorICogRm9yIGNoaWxkIHJlbGF0 aW9ucywgdGhpcyBpcyB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisg KiBSVEVfUkVMQVRJT04uIEZvciBvdGhlciByZWxhdGlvbnMsIGl0J3MganVzdCB0aGUgb3JpZ2lu YWwgUlRJLgorICoKKyAqIFNpbmNlIHdlJ3JlIGV2ZW50dWFsbHkgZ29pbmcgdG8gbmVlZCB0aGlz IGluZm9ybWF0aW9uIGZvciBldmVyeSBSVEkgaW4KKyAqIHRoZSByYW5nZSB0YWJsZSwgaXQncyBi ZXN0IHRvIGNvbXB1dGUgYWxsIHRoZSBhbnN3ZXJzIGluIGEgc2luZ2xlIHBhc3Mgb3ZlcgorICog dGhlIEFwcGVuZFJlbEluZm8gbGlzdC4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBlbmQgdXAgc2VhcmNo aW5nIHRocm91Z2ggdGhhdAorICogbGlzdCByZXBlYXRlZGx5IGZvciBlbnRyaWVzIG9mIGludGVy ZXN0LgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgdXNlcyB6ZXJvLWJh c2VkIGluZGV4aW5nLCB3aGlsZSBSVElzIHVzZQorICogMS1iYXNlZCBpbmRleGluZywgc28gc3Vi dHJhY3QgMSBmcm9tIHRoZSBSVEkgYmVmb3JlIGxvb2tpbmcgaXQgdXAgaW4gdGhlCisgKiBhcnJh eS4KKyAqLworc3RhdGljIEluZGV4ICoKK3BncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0 YWJsZV9sZW5ndGgsIExpc3QgKnJ0YWJsZSwgTGlzdCAqYXBwaW5mb3MpCit7CisJSW5kZXgJICAg KnRvcF9ydGlfbWFwID0gcGFsbG9jMF9hcnJheShJbmRleCwgcnRhYmxlX2xlbmd0aCk7CisKKwkv KiBJbml0aWFsbHksIG1ha2UgZXZlcnkgUlRJIHBvaW50IHRvIGl0c2VsZi4gKi8KKwlmb3IgKElu ZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyArK3J0aSkKKwkJdG9wX3J0aV9tYXBb cnRpIC0gMV0gPSBydGk7CisKKwkvKiBVcGRhdGUgdGhlIG1hcCBmb3IgZWFjaCBBcHBlbmRSZWxJ bmZvIG9iamVjdC4gKi8KKwlmb3JlYWNoX25vZGUoQXBwZW5kUmVsSW5mbywgYXBwaW5mbywgYXBw aW5mb3MpCisJeworCQlJbmRleAkJcGFyZW50X3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsK KwkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZSA9IHJ0X2ZldGNoKHBhcmVudF9ydGksIHJ0YWJs ZSk7CisKKwkJLyogSWYgdGhlIHBhcmVudCBpcyBub3QgUlRFX1JFTEFUSU9OLCBpZ25vcmUgdGhp cyBlbnRyeS4gKi8KKwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQor CQkJY29udGludWU7CisKKwkJLyoKKwkJICogTWFwIHRoZSBjaGlsZCB0byB3aGVyZXZlciB3ZSBt YXBwZWQgdGhlIHBhcmVudC4gUGFyZW50cyBhbHdheXMKKwkJICogcHJlY2VkZSB0aGVpciBjaGls ZHJlbiBpbiB0aGUgQXBwZW5kUmVsSW5mbyBsaXN0LCBzbyB0aGlzIHNob3VsZAorCQkgKiB3b3Jr IG91dC4KKwkJICovCisJCXRvcF9ydGlfbWFwW2FwcGluZm8tPmNoaWxkX3JlbGlkIC0gMV0gPSB0 b3BfcnRpX21hcFtwYXJlbnRfcnRpIC0gMV07CisJfQorCisJcmV0dXJuIHRvcF9ydGlfbWFwOwor fQorCisvKgorICogRmluZCB0aGUgb2NjdXJlbmNlIG51bWJlciBvZiBhIGNlcnRhaW4gcmVsYXRp b24gd2l0aGluIGEgY2VydGFpbiBzdWJxdWVyeS4KKyAqCisgKiBUaGUgc2FtZSBhbGlhcyBuYW1l IGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gYSBzdWJxdWVyeSwgYnV0IHdlIHdhbnQK KyAqIHRvIGRpc2FtYmlndWF0ZSBieSBnaXZpbmcgZGlmZmVyZW50IG9jY3VycmVuY2VzIGRpZmZl cmVudCBpbnRlZ2VyIGluZGV4ZXMuCisgKiBIb3dldmVyLCBjaGlsZCB0YWJsZXMgYXJlIGRpc2Ft YmlndWF0ZWQgYnkgaW5jbHVkaW5nIHRoZSB0YWJsZSBuYW1lIHJhdGhlcgorICogdGhhbiBieSBp bmNyZW1lbnRpbmcgdGhlIG9jY3VycmVuY2UgbnVtYmVyOyBhbmQgam9pbnMgYXJlIG5vdCBuYW1l ZCBhbmQgc28KKyAqIHNob3VsZG4ndCBpbmNyZW1lbnQgdGhlIG9jY3VyZW5jZSBudW1iZXIgZWl0 aGVyLgorICovCitzdGF0aWMgaW50CitwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJs ZSwgSW5kZXggKnRvcF9ydGlfbWFwLAorCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIElu ZGV4IHJ0aSkKK3sKKwlJbmRleAkJcnRvZmZzZXQgPSAocnRpbmZvID09IE5VTEwpID8gMCA6IHJ0 aW5mby0+cnRvZmZzZXQ7CisJaW50CQkJb2NjdXJyZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAq cnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSBy dG9mZnNldCArIDE7IHByaW9yX3J0aSA8IHJ0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRi bEVudHJ5ICpwcmlvcl9ydGU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBv ZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1Y2gg cmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRoZSBz Y2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhlbSBh cyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICovCisJ CWlmICh0b3BfcnRpX21hcFtwcmlvcl9ydGkgLSAxXSAhPSBwcmlvcl9ydGkpCisJCQlicmVhazsK KworCQkvKiBTa2lwIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGks IHJ0YWJsZSk7CisJCWlmIChwcmlvcl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250 aW51ZTsKKworCQkvKiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChz dHJjbXAocHJpb3JfcnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAh PSAwKQorCQkJY29udGludWU7CisKKwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAq LworCQkrK29jY3VycmVuY2U7CisJfQorCisJcmV0dXJuIG9jY3VycmVuY2U7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYjAwMGQyYjcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5oCisgKgkgIGNyZWF0ZSBhcHByb3By aWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAorICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgUEdQQV9JREVOVElGSUVSX0gKKyNkZWZpbmUg UEdQQV9JREVOVElGSUVSX0gKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1 ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2lkZW50aWZpZXIK K3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWludAkJCW9jY3VycmVuY2U7CisJY29uc3Qg Y2hhciAqcGFydG5zcDsKKwljb25zdCBjaGFyICpwYXJ0cmVsOworCWNvbnN0IGNoYXIgKnBsYW5f bmFtZTsKK30gcGdwYV9pZGVudGlmaWVyOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Ig Y29tcGFyaW5nIHBvc3NpYmx5LU5VTEwgc3RyaW5ncy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAor c3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikK K3sKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChhID09IE5VTEwgfHwg YiA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEsIGIp ID09IDA7Cit9CisKK2V4dGVybiBjb25zdCBjaGFyICpwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNv bnN0IHBncGFfaWRlbnRpZmllciAqcmlkKTsKK2V4dGVybiB2b2lkIHBncGFfY29tcHV0ZV9pZGVu dGlmaWVyX2J5X3J0aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCQkJCSAg IHBncGFfaWRlbnRpZmllciAqcmlkKTsKK2V4dGVybiBpbnQJcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJzX2J5X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgQml0bWFwc2V0 ICpyZWxpZHMsCisJCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcyk7CitleHRlcm4g cGdwYV9pZGVudGlmaWVyICpwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10 KFBsYW5uZWRTdG10ICpwc3RtdCk7CisKK2V4dGVybiBJbmRleCBwZ3BhX2NvbXB1dGVfcnRpX2Zy b21faWRlbnRpZmllcihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlk KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjg2MTg3NjRkODYKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCkBAIC0wLDAgKzEsNjE1IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2pvaW4uYworICoJICBhbmFseXNpcyBvZiBqb2lu cyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfam9pbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3Nj YW4uaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5v ZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcHJpbnQuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0 cmVlLmgiCisKKy8qCisgKiBUZW1wb3Jhcnkgb2JqZWN0IHVzZWQgd2hlbiB1bnJvbGxpbmcgYSBq b2luIHRyZWUuCisgKi8KK3N0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIKK3sKKwl1bnNpZ25lZAlu YWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCVBsYW4JICAgKm91dGVyX3N1YnBsYW47CisJ RWxpZGVkTm9kZSAqb3V0ZXJfZWxpZGVkX25vZGU7CisJYm9vbAkJb3V0ZXJfYmVuZWF0aF9hbnlf Z2F0aGVyOworCXBncGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisJUGxhbgkgICoqaW5uZXJf c3VicGxhbnM7CisJRWxpZGVkTm9kZSAqKmlubmVyX2VsaWRlZF9ub2RlczsKKwlwZ3BhX2pvaW5f dW5yb2xsZXIgKippbm5lcl91bnJvbGxlcnM7CisJYm9vbAkgICAqaW5uZXJfYmVuZWF0aF9hbnlf Z2F0aGVyOworfTsKKworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneSBwZ3BhX2RlY29tcG9zZV9q b2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgIFBsYW4g KnBsYW4sCisJCQkJCQkJCQkJCSAgUGxhbiAqKnJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBQbGFu ICoqcmVhbGlubmVyLAorCQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIs CisJCQkJCQkJCQkJCSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJCQkJCQkJ ICBib29sICpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5k X2FueV9pbm5lcl9nYXRoZXIpOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9ub2Rl KFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4pOworc3RhdGljIEVsaWRlZE5vZGUgKnBn cGFfZGVzY2VuZF9hbnlfZ2F0aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJ CQkJCQkJCQkJICAgYm9vbCAqZm91bmRfYW55X2dhdGhlcik7CitzdGF0aWMgYm9vbCBwZ3BhX2Rl c2NlbmRfYW55X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJ CQkJRWxpZGVkTm9kZSAqKmVsaWRlZF9ub2RlKTsKKworc3RhdGljIGJvb2wgaXNfcmVzdWx0X25v ZGVfd2l0aF9jaGlsZChQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIGlzX3NvcnRpbmdfcGxhbihQ bGFuICpwbGFuKTsKKworLyoKKyAqIENyZWF0ZSBhbiBpbml0aWFsbHktZW1wdHkgb2JqZWN0IGZv ciB1bnJvbGxpbmcgam9pbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgaGVscGVy IG9iamVjdCB0aGF0IGNhbiBsYXRlciBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiBwZ3BhX3Vucm9s bGVkX2pvaW4sIGFmdGVyIGZpcnN0IGNhbGxpbmcgcGdwYV91bnJvbGxfam9pbiBvbmUgb3IgbW9y ZSB0aW1lcy4KKyAqLworcGdwYV9qb2luX3Vucm9sbGVyICoKK3BncGFfY3JlYXRlX2pvaW5fdW5y b2xsZXIodm9pZCkKK3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXI7CisKKwlq b2luX3Vucm9sbGVyID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3Vucm9sbGVyKTsKKwlqb2lu X3Vucm9sbGVyLT5uYWxsb2NhdGVkID0gNDsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJ CXBhbGxvY19hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0 ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zID0KKwkJcGFsbG9jX2FycmF5KFBs YW4gKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJf ZWxpZGVkX25vZGVzID0KKwkJcGFsbG9jX2FycmF5KEVsaWRlZE5vZGUgKiwgam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJcGFs bG9jX2FycmF5KHBncGFfam9pbl91bnJvbGxlciAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQlwYWxsb2Nf YXJyYXkoYm9vbCwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisKKwlyZXR1cm4gam9pbl91 bnJvbGxlcjsKK30KKworLyoKKyAqIFVucm9sbCBvbmUgbGV2ZWwgb2YgYW4gdW5yb2xsYWJsZSBq b2luIHRyZWUuCisgKgorICogT3VyIGJhc2ljIGdvYWwgaGVyZSBpcyB0byB1bnJvbGwgam9pbiB0 cmVlcyBhcyB0aGV5IG9jY3VyIGluIHRoZSBQbGFuCisgKiB0cmVlIGludG8gYSBzaW1wbGVyIGFu ZCBtb3JlIHJlZ3VsYXIgc3RydWN0dXJlIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5CisgKiB1c2Ug Zm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gVW5yb2xsaW5nIGlzIG91dGVyLWRlZXAsIHNvIGlmIHRo ZSBwbGFuIHRyZWUKKyAqIGhhcyBKb2luMShKb2luMihBLEIpLEpvaW4zKEMsRCkpLCB0aGUgc2Ft ZSBqb2luIHVucm9sbGVyIG9iamVjdCBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIEpvaW4xIGFuZCBK b2luMiwgYnV0IGEgZGlmZmVyZW50IG9uZSB3aWxsIGJlIG5lZWRlZCBmb3IgSm9pbjMsCisgKiBz aW5jZSB0aGF0IGludm9sdmVzIGEgam9pbiB3aXRoaW4gdGhlICppbm5lciogc2lkZSBvZiBhbm90 aGVyIGpvaW4uCisgKgorICogcGdwYV9wbGFuX3dhbGtlciBjcmVhdGVzIGEgInRvcCBsZXZlbCIg am9pbiB1bnJvbGxlciBvYmplY3Qgd2hlbiBpdAorICogZW5jb3VudGVycyBhIGpvaW4gaW4gYSBw b3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgaW4gd2hpY2ggbm8gam9pbiB1bnJvbGxlcgorICogaXMg YWxyZWFkeSBhY3RpdmUuIEZyb20gdGhlcmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUg Zm9yIGRldGVybWluZworICogdG8gd2hhdCBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgdGhhdCBq b2luIHVucm9sbGVyIGFwcGxpZXMsIGFuZCBmb3IKKyAqIGNyZWF0aW5nIGFueSBzdWJvcmRpbmF0 ZSBqb2luIHVucm9sbGVyIG9iamVjdHMgdGhhdCBhcmUgbmVlZGVkIGFzIGEgcmVzdWx0CisgKiBv ZiBub24tb3V0ZXItZGVlcCBqb2luIHRyZWVzLiBXZSBkbyB0aGlzIGJ5IHJldHVybmluZyB0aGUg am9pbiB1bnJvbGxlcgorICogb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmdXJ0aGVy IHRyYXZlcnNhbCBvZiB0aGUgb3V0ZXIgYW5kIGlubmVyCisgKiBzdWJ0cmVlcyBvZiB0aGUgY3Vy cmVudCBwbGFuIG5vZGUgdmlhICpvdXRlcl9qb2luX3Vucm9sbGVyIGFuZAorICogKmlubmVyX2pv aW5fdW5yb2xsZXIsIHJlc3BlY3RpdmVseS4KKyAqLwordm9pZAorcGdwYV91bnJvbGxfam9pbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkgYm9vbCBi ZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxl ciwKKwkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkg cGdwYV9qb2luX3Vucm9sbGVyICoqaW5uZXJfam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX2pvaW5f c3RyYXRlZ3kgc3RyYXRlZ3k7CisJUGxhbgkgICAqcmVhbGlubmVyLAorCQkJICAgKnJlYWxvdXRl cjsKKwlFbGlkZWROb2RlICplbGlkZWRpbm5lciwKKwkJCSAgICplbGlkZWRvdXRlcjsKKwlpbnQJ CQluOworCWJvb2wJCWZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwlib29sCQlmb3Vu ZF9hbnlfaW5uZXJfZ2F0aGVyID0gZmFsc2U7CisKKwlBc3NlcnQoam9pbl91bnJvbGxlciAhPSBO VUxMKTsKKworCS8qCisJICogV2UgbmVlZCB0byBwYXNzIHRoZSBqb2luX3Vucm9sbGVyIG9iamVj dCBkb3duIHRocm91Z2ggY2VydGFpbiB0eXBlcyBvZgorCSAqIHBsYW4gbm9kZXMgLS0gYW55dGhp bmcgdGhhdCdzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneSwgYW5kCisJICog YW55IG90aGVyIG5vZGVzIHRoYXQgY2FuIG9jY3VyIGluIGEgam9pbiB0cmVlIGRlc3BpdGUgbm90 IGJlaW5nIHNjYW5zCisJICogb3Igam9pbnMuCisJICoKKwkgKiBUaGlzIGluY2x1ZGVzOgorCSAq CisJICogKDEpIE1hdGVyaWFsaXplLCBNZW1vaXplLCBhbmQgSGFzaCBub2Rlcywgd2hpY2ggYXJl IHBhcnQgb2YgdGhlIGpvaW4KKwkgKiBzdHJhdGVneSwKKwkgKgorCSAqICgyKSBHYXRoZXIgYW5k IEdhdGhlciBNZXJnZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGF0IGFueSBwb2ludCBpbiB0aGUK KwkgKiBqb2luIHRyZWUgd2hlcmUgdGhlIHBsYW5uZXIgZGVjaWRlZCB0byBpbml0aWF0ZSBwYXJh bGxlbGlzbSwKKwkgKgorCSAqICgzKSBTb3J0IGFuZCBJbmNyZW1lbnRhbFNvcnQgbm9kZXMsIHdo aWNoIGNhbiBvY2N1ciBiZW5lYXRoIE1lcmdlSm9pbgorCSAqIG9yIEdhdGhlck1lcmdlLAorCSAq CisJICogKDQpIEFnZyBhbmQgVW5pcXVlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB3ZSBk ZWNpZGUgdG8gbWFrZSB0aGUKKwkgKiBudWxsYWJsZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVl IGFuZCB0aGVuIGpvaW4gdGhlIHJlc3VsdCwgYW5kCisJICoKKwkgKiAoNSkgUmVzdWx0IG5vZGVz IHdpdGggY2hpbGRyZW4sIHdoaWNoIGNhbiBiZSBhZGRlZCBlaXRoZXIgdG8gcHJvamVjdCB0bwor CSAqIGVuZm9yY2UgYSBvbmUtdGltZSBmaWx0ZXIgKGJ1dCBSZXN1bHQgbm9kZXMgd2l0aG91dCBj aGlsZHJlbiBhcmUKKwkgKiBkZWdlbmVyYXRlIHNjYW5zIG9yIGpvaW5zKS4KKwkgKi8KKwlpZiAo SXNBKHBsYW4sIE1hdGVyaWFsKSB8fCBJc0EocGxhbiwgTWVtb2l6ZSkgfHwgSXNBKHBsYW4sIEhh c2gpCisJCXx8IElzQShwbGFuLCBHYXRoZXIpIHx8IElzQShwbGFuLCBHYXRoZXJNZXJnZSkKKwkJ fHwgaXNfc29ydGluZ19wbGFuKHBsYW4pIHx8IElzQShwbGFuLCBBZ2cpIHx8IElzQShwbGFuLCBV bmlxdWUpCisJCXx8IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQocGxhbikpCisJeworCQkqb3V0 ZXJfam9pbl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJCXJldHVybjsKKwl9CisKKwkvKgor CSAqIFNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBub2RlcyB0aGF0IHJlcXVpcmUgcGFzcy10 aHJvdWdoIHRyZWF0bWVudCwKKwkgKiB0aGlzIHNob3VsZCBiZSBhbiB1bnJvbGxhYmxlIGpvaW4u CisJICovCisJc3RyYXRlZ3kgPSBwZ3BhX2RlY29tcG9zZV9qb2luKHdhbGtlciwgcGxhbiwKKwkJ CQkJCQkJICAgJnJlYWxvdXRlciwgJnJlYWxpbm5lciwKKwkJCQkJCQkJICAgJmVsaWRlZG91dGVy LCAmZWxpZGVkaW5uZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJ CQkJCQkgICAmZm91bmRfYW55X2lubmVyX2dhdGhlcik7CisKKwkvKiBJZiBvdXIgd29ya3NwYWNl IGlzIGZ1bGwsIGV4cGFuZCBpdC4gKi8KKwlpZiAoam9pbl91bnJvbGxlci0+bnVzZWQgPj0gam9p bl91bnJvbGxlci0+bmFsbG9jYXRlZCkKKwl7CisJCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQg Kj0gMjsKKwkJam9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9p bl91bnJvbGxlci0+c3RyYXRlZ3ksCisJCQkJCQkgICBwZ3BhX2pvaW5fc3RyYXRlZ3ksCisJCQkJ CQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJf c3VicGxhbnMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxh bnMsCisJCQkJCQkgICBQbGFuICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJCXJlcGFsbG9jX2Fy cmF5KGpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcywKKwkJCQkJCSAgIEVsaWRlZE5v ZGUgKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9s bGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91 bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJICAgYm9vbCwKKwkJCQkJ CSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl91 bnJvbGxlcnMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xs ZXJzLAorCQkJCQkJICAgcGdwYV9qb2luX3Vucm9sbGVyICosCisJCQkJCQkgICBqb2luX3Vucm9s bGVyLT5uYWxsb2NhdGVkKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlJ3JlIGZsYXR0ZW5pbmcg b3V0ZXItZGVlcCBqb2luIHRyZWVzLCBpdCBmb2xsb3dzIHRoYXQgaWYgdGhlCisJICogb3V0ZXIg c2lkZSBpcyBzdGlsbCBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IHNob3VsZCBiZSB1bnJvbGxlZCBp bnRvIHRoaXMKKwkgKiBzYW1lIG9iamVjdC4gT3RoZXJ3aXNlLCB3ZSd2ZSByZWFjaGVkIHRoZSBs aW1pdCBvZiB3aGF0IHdlIGNhbiB1bnJvbGwKKwkgKiBpbnRvIHRoaXMgb2JqZWN0IGFuZCBtdXN0 IHJlbWVtYmVyIHRoZSBvdXRlciBzaWRlIGFzIHRoZSBmaW5hbCBvdXRlcgorCSAqIHN1YnBsYW4u CisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxvdXRl cikpCisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwllbHNlCisJewor CQlqb2luX3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFuID0gcmVhbG91dGVyOworCQlqb2luX3Vucm9s bGVyLT5vdXRlcl9lbGlkZWRfbm9kZSA9IGVsaWRlZG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5v dXRlcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5k X2FueV9vdXRlcl9nYXRoZXI7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgaW5uZXIgc3VicGxh bi4gSWYgaXQncyBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IG5lZWRzIHRvIGJlCisJICogZmxhdHRl bmVkIGluIHR1cm4sIGJ1dCBpbnRvIGEgbmV3IHVucm9sbGVyIG9iamVjdCwgbm90IHRoaXMgb25l LgorCSAqLworCW4gPSBqb2luX3Vucm9sbGVyLT5udXNlZCsrOworCWpvaW5fdW5yb2xsZXItPnN0 cmF0ZWd5W25dID0gc3RyYXRlZ3k7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNbbl0g PSByZWFsaW5uZXI7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW25dID0gZWxp ZGVkaW5uZXI7CisJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW25dID0K KwkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9pbm5lcl9nYXRoZXI7CisJaWYgKGVs aWRlZGlubmVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxpbm5lcikpCisJCSppbm5lcl9q b2luX3Vucm9sbGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCWVsc2UKKwkJKmlu bmVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVy c1tuXSA9ICppbm5lcl9qb2luX3Vucm9sbGVyOworfQorCisvKgorICogVXNlIHRoZSBkYXRhIHdl J3ZlIGFjY3VtdWxhdGVkIGluIGEgcGdwYV9qb2luX3Vucm9sbGVyIG9iamVjdCB0byBjb25zdHJ1 Y3QKKyAqIGEgcGdwYV91bnJvbGxlZF9qb2luLgorICovCitwZ3BhX3Vucm9sbGVkX2pvaW4gKgor cGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAorCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX3Vu cm9sbGVkX2pvaW4gKnVqb2luOworCWludAkJCWk7CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBo YXZlIGdvbmUgZXZlbiBzbyBmYXIgYXMgdG8gY3JlYXRlIGEgam9pbiB1bnJvbGxlciB1bmxlc3MK KwkgKiB3ZSBmb3VuZCBhdCBsZWFzdCBvbmUgdW5yb2xsYWJsZSBqb2luLgorCSAqLworCUFzc2Vy dChqb2luX3Vucm9sbGVyLT5udXNlZCA+IDApOworCisJLyogQWxsb2NhdGUgcmVzdWx0IHN0cnVj dHVyZXMuICovCisJdWpvaW4gPSBwYWxsb2MwX29iamVjdChwZ3BhX3Vucm9sbGVkX2pvaW4pOwor CXVqb2luLT5uaW5uZXIgPSBqb2luX3Vucm9sbGVyLT5udXNlZDsKKwl1am9pbi0+c3RyYXRlZ3kg PSBwYWxsb2MwX2FycmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bnVzZWQp OworCXVqb2luLT5pbm5lciA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX21lbWJlciwgam9pbl91 bnJvbGxlci0+bnVzZWQpOworCisJLyogSGFuZGxlIHRoZSBvdXRlcm1vc3Qgam9pbi4gKi8KKwl1 am9pbi0+b3V0ZXIucGxhbiA9IGpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW47CisJdWpvaW4t Pm91dGVyLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGU7CisJ dWpvaW4tPm91dGVyLnNjYW4gPQorCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+b3V0 ZXIucGxhbiwKKwkJCQkJCXVqb2luLT5vdXRlci5lbGlkZWRfbm9kZSwKKwkJCQkJCWpvaW5fdW5y b2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCXRydWUpOworCisJLyoKKwkg KiBXZSB3YW50IHRoZSBqb2lucyBmcm9tIHRoZSBkZWVwZXN0IHBhcnQgb2YgdGhlIHBsYW4gdHJl ZSB0byBhcHBlYXIKKwkgKiBmaXJzdCBpbiB0aGUgcmVzdWx0IG9iamVjdCwgYnV0IHRoZSBqb2lu IHVucm9sbGVyIGFkZHMgdGhlbSBpbiBleGFjdGx5CisJICogdGhlIHJldmVyc2Ugb2YgdGhhdCBv cmRlciwgc28gd2UgbmVlZCB0byBmbGlwIHRoZSBvcmRlciBvZiB0aGUgYXJyYXlzCisJICogd2hl biBjb25zdHJ1Y3RpbmcgdGhlIGZpbmFsIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg am9pbl91bnJvbGxlci0+bnVzZWQ7ICsraSkKKwl7CisJCWludAkJCWsgPSBqb2luX3Vucm9sbGVy LT5udXNlZCAtIGkgLSAxOworCisJCS8qIENvcHkgc3RyYXRlZ3ksIFBsYW4sIGFuZCBFbGlkZWRO b2RlLiAqLworCQl1am9pbi0+c3RyYXRlZ3lbaV0gPSBqb2luX3Vucm9sbGVyLT5zdHJhdGVneVtr XTsKKwkJdWpvaW4tPmlubmVyW2ldLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFu c1trXTsKKwkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+aW5u ZXJfZWxpZGVkX25vZGVzW2tdOworCisJCS8qCisJCSAqIEZpbGwgaW4gcmVtYWluaW5nIGRldGFp bHMsIHVzaW5nIGVpdGhlciB0aGUgbmVzdGVkIGpvaW4gdW5yb2xsZXIsCisJCSAqIG9yIGJ5IGRl cml2aW5nIHRoZW0gZnJvbSB0aGUgcGxhbiBhbmQgZWxpZGVkIG5vZGVzLgorCQkgKi8KKwkJaWYg KGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSAhPSBOVUxMKQorCQkJdWpvaW4tPmlu bmVyW2ldLnVucm9sbGVkX2pvaW4gPQorCQkJCXBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxr ZXIsCisJCQkJCQkJCQkJIGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSk7CisJCWVs c2UKKwkJCXVqb2luLT5pbm5lcltpXS5zY2FuID0KKwkJCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2Vy LCB1am9pbi0+aW5uZXJbaV0ucGxhbiwKKwkJCQkJCQkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9u b2RlLAorCQkJCQkJCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbaV0s CisJCQkJCQkJCXRydWUpOworCX0KKworCXJldHVybiB1am9pbjsKK30KKworLyoKKyAqIEZyZWUg bWVtb3J5IGFsbG9jYXRlZCBmb3IgcGdwYV9qb2luX3Vucm9sbGVyLgorICovCit2b2lkCitwZ3Bh X2Rlc3Ryb3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIp Cit7CisJcGZyZWUoam9pbl91bnJvbGxlci0+c3RyYXRlZ3kpOworCXBmcmVlKGpvaW5fdW5yb2xs ZXItPmlubmVyX3N1YnBsYW5zKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRf bm9kZXMpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyk7CisJcGZyZWUo am9pbl91bnJvbGxlcik7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1 c2VkIGJ5IGEgam9pbiBhbmQgdGhlICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgor ICoKKyAqIEZvciBleGFtcGxlLCBhIEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9u IHRoZSBpbm5lciBzaWRlLCBidXQKKyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhl IHJlYWwgaW5uZXIgaW5wdXQgaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBI YXNoIG5vZGUgaXRzZWxmLgorICoKKyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUg U29ydCBub3RlIG9uIHRoZSBpbm5lciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhl IHJlYWwgaW5wdXQgdG8gdGhlIGpvaW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhl CisgKiBTb3J0IG5vZGUgaXRzZWxmLgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2Ug Sm9pbiBvciBhIE5lc3RlZCBMb29wLCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRk IGFkZGl0aW9uYWwgbm9kZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdh cmQgdGhlc2UKKyAqIGFzIGFuIGFzcGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhl IHByZXZpb3VzIGNhc2VzLCB0aGUgdHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVu ZGVybHlpbmcgbm9kZS4KKyAqCisgKiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9k ZSBwcmV2aW91c2x5IGhhZCBhIG5vdy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRo ZW4gd2UgY2FuJ3QgImxvb2sgdGhyb3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdv aW5nIHRvIGJlCisgKiByZWxldmFudCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2Rl IG9uIHRvcCBvZiB0aGF0IHBsYW4gbm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUg aXRzZWxmLgorICoKKyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdh bnQgdGhhdCBvbmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxh biB0cmVlIHByaW9yIHRvIHNldHJlZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAq IHRoYXQgb25lIGxhc3QgaW4gdGhlIGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJl dHVybiAqcmVhbG91dGVyIGFuZCAqcmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUg cmVhbCBpbm5lcgorICogYW5kIHJlYWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBh bmQgKmVsaWRlZHJlYWxvdXRlciBhbmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qg b2YgYW55IGNvcnJlc3BvZGluZyBlbGlkZWQgbm9kZXMuCisgKiBBZGRpdGlvbmFsbHksICpmb3Vu ZF9hbnlfb3V0ZXJfZ2F0aGVyIGFuZCAqZm91bmRfYW55X2lubmVyX2dhdGhlciB3aWxsCisgKiBi ZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBsb29rZWQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVy Z2Ugbm9kZSBvbgorICogdGhhdCBzaWRlIG9mIHRoZSBqb2luLCBhbmQgZmFsc2Ugb3RoZXJ3aXNl LgorICovCitzdGF0aWMgcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2RlY29tcG9zZV9qb2luKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQlQbGFuICoq cmVhbG91dGVyLCBQbGFuICoqcmVhbGlubmVyLAorCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkcmVh bG91dGVyLCBFbGlkZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQlib29sICpmb3VuZF9h bnlfb3V0ZXJfZ2F0aGVyLCBib29sICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKQoreworCVBsYW5u ZWRTdG10ICpwc3RtdCA9IHdhbGtlci0+cHN0bXQ7CisJSm9pblR5cGUJam9pbnR5cGUgPSAoKEpv aW4gKikgcGxhbiktPmpvaW50eXBlOworCVBsYW4JICAgKm91dGVycGxhbiA9IHBsYW4tPmxlZnR0 cmVlOworCVBsYW4JICAgKmlubmVycGxhbiA9IHBsYW4tPnJpZ2h0dHJlZTsKKwlFbGlkZWROb2Rl ICplbGlkZWRvdXRlcjsKKwlFbGlkZWROb2RlICplbGlkZWRpbm5lcjsKKwlwZ3BhX2pvaW5fc3Ry YXRlZ3kgc3RyYXRlZ3k7CisJYm9vbAkJdW5pcXVlb3V0ZXI7CisJYm9vbAkJdW5pcXVlaW5uZXI7 CisKKwllbGlkZWRvdXRlciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgb3V0ZXJwbGFu KTsKKwllbGlkZWRpbm5lciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgaW5uZXJwbGFu KTsKKwkqZm91bmRfYW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCSpmb3VuZF9hbnlfaW5uZXJf Z2F0aGVyID0gZmFsc2U7CisKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRf TWVyZ2VKb2luOgorCisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRv IHBsYWNlIGEgTWF0ZXJpYWwgbm9kZSBvbiB0aGUKKwkJCSAqIGlubmVyIHNpZGUgb2YgdGhlIE1l cmdlSm9pbjsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZSByZWNvcmQgaXQKKwkJCSAqIGFzIHBhcnQg b2YgdGhlIGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxM ICYmIElzQShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBn cGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJB VF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0g SlNUUkFUX01FUkdFX0pPSU5fUExBSU47CisKKwkJCS8qCisJCQkgKiBGb3IgYSBNZXJnZUpvaW4s IGVpdGhlciB0aGUgb3V0ZXIgb3IgdGhlIGlubmVyIHN1YnBsYW4sIG9yCisJCQkgKiBib3RoLCBt YXkgaGF2ZSBuZWVkZWQgdG8gYmUgc29ydGVkOyB3ZSBtdXN0IGRpc3JlZ2FyZCBhbnkgU29ydAor CQkJICogb3IgSW5jcmVtZW50YWxTb3J0IG5vZGUgdG8gZmluZCB0aGUgcmVhbCBpbm5lciBvciBv dXRlcgorCQkJICogc3VicGxhbi4KKwkJCSAqLworCQkJaWYgKGVsaWRlZG91dGVyID09IE5VTEwg JiYgaXNfc29ydGluZ19wbGFuKG91dGVycGxhbikpCisJCQkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVM TCAmJiBpc19zb3J0aW5nX3BsYW4oaW5uZXJwbGFuKSkKKwkJCQllbGlkZWRpbm5lciA9IHBncGFf ZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9O ZXN0TG9vcDoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBw bGFjZSBhIE1hdGVyaWFsIG9yIE1lbW9pemUgbm9kZQorCQkJICogb24gdGhlIGlubmVyIHNpZGUg b2YgdGhlIE5lc3RMb29wOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlCisJCQkgKiByZWNvcmQgaXQg YXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVy ID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlu bmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5 ID0gSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZSBpZiAoZWxp ZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNZW1vaXplKSkKKwkJCXsKKwkJCQll bGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlz dHJhdGVneSA9IEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOworCQkJfQorCQkJZWxzZQorCQkJ CXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0hhc2hKb2luOgorCisJCQkvKgorCQkJICogVGhlIGlubmVyIHN1YnBsYW4gb2YgYSBIYXNo Sm9pbiBpcyBhbHdheXMgYSBIYXNoIG5vZGU7IHRoZSByZWFsCisJCQkgKiBpbm5lciBzdWJwbGFu IGlzIHRoZSBIYXNoIG5vZGUncyBjaGlsZC4KKwkJCSAqLworCQkJQXNzZXJ0KElzQShpbm5lcnBs YW4sIEhhc2gpKTsKKwkJCUFzc2VydChlbGlkZWRpbm5lciA9PSBOVUxMKTsKKwkJCWVsaWRlZGlu bmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJc3RyYXRlZ3kg PSBKU1RSQVRfSEFTSF9KT0lOOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOwor CX0KKworCS8qCisJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBpbXBsZW1lbnQg YSBzZW1pam9pbiBieSBmaXJzdCBtYWtpbmcKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUg cGxhbiB1bmlxdWUsIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbgorCSAqIGFnYWlu c3QgdGhlIHJlc3VsdC4gVGhlcmVmb3JlLCB3ZSBtaWdodCBuZWVkIHRvIGRlc2NlbmQgdGhyb3Vn aCBhCisJICogdW5pcXVlIG5vZGUgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHBsYW4uCisJICovCisJ dW5pcXVlb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwg JmVsaWRlZG91dGVyKTsKKwl1bmlxdWVpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBz dG10LCAmaW5uZXJwbGFuLCAmZWxpZGVkaW5uZXIpOworCisJLyoKKwkgKiBUaGUgcGxhbm5lciBt YXkgaGF2ZSBkZWNpZGVkIHRvIHBhcmFsbGVsaXplIHBhcnQgb2YgdGhlIGpvaW4gdHJlZSwgc28K KwkgKiB3ZSBjb3VsZCBmaW5kIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIGhlcmUuIE5v dGUgdGhhdCwgaWYKKwkgKiBwcmVzZW50LCB0aGlzIHdpbGwgYXBwZWFyIGJlbG93IG5vZGVzIHdl IGNvbnNpZGVyZWQgYXMgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LCBidXQgd2UgY291 bGQgZmluZCBhbm90aGVyIHVuaXF1ZW5lc3MtZW5mb3JjaW5nIG5vZGUgYmVsb3cgdGhlCisJICog R2F0aGVyIG9yIEdhdGhlciBNZXJnZSwgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0 ZXIgPT0gTlVMTCkKKwl7CisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIo cHN0bXQsICZvdXRlcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X291dGVyX2dhdGhlcik7 CisJCWlmIChmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3Vu aXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91dGVyKSkKKwkJCXVuaXF1ZW91dGVyID0g dHJ1ZTsKKwl9CisJaWYgKGVsaWRlZGlubmVyID09IE5VTEwpCisJeworCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9hbnlfZ2F0aGVyKHBzdG10LCAmaW5uZXJwbGFuLAorCQkJCQkJCQkJCQkg IGZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOworCQlpZiAoZm91bmRfYW55X2lubmVyX2dhdGhlciAm JgorCQkJcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRp bm5lcikpCisJCQl1bmlxdWVpbm5lciA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3Np YmxlIHRoYXQgUmVzdWx0IG5vZGUgaGFzIGJlZW4gaW5zZXJ0ZWQgZWl0aGVyIHRvIHByb2plY3Qg YQorCSAqIHRhcmdldCBsaXN0IG9yIHRvIGltcGxlbWVudCBhIG9uZS10aW1lIGZpbHRlci4gSWYg c28sIHdlIGNhbiBkZXNjZW5kCisJICogdGhyb3VnaHQgaXQuIE5vdGUgdGhhdCBhIHJlc3VsdCBu b2RlIHdpdGhvdXQgYSBjaGlsZCB3b3VsZCBiZSBhCisJICogZGVnZW5lcmF0ZSBzY2FuIG9yIGpv aW4sIGFuZCBub3Qgc29tZXRoaW5nIHdlIGNvdWxkIGRlc2NlbmQgdGhyb3VnaC4KKwkgKgorCSAq IFhYWC4gSSBzdXNwZWN0IGl0J3MgcG9zc2libGUgZm9yIHRoaXMgdG8gaGFwcGVuIGFib3ZlIHRo ZSBHYXRoZXIgb3IKKwkgKiBHYXRoZXIgTWVyZ2Ugbm9kZSwgdG9vLCBidXQgYXBwYXJlbnRseSB3 ZSBoYXZlIG5vIHRlc3QgY2FzZSBmb3IgdGhhdAorCSAqIHNjZW5hcmlvLgorCSAqLworCWlmIChl bGlkZWRvdXRlciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQob3V0ZXJwbGFu KSkKKwkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7 CisJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChp bm5lcnBsYW4pKQorCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5u ZXJwbGFuKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHNlbWlqb2luIHRoYXQgd2FzIGNvbnZl cnRlZCB0byBhbiBpbm5lciBqb2luIGJ5IG1ha2luZyBvbmUKKwkgKiBzaWRlIG9yIHRoZSBvdGhl ciB1bmlxdWUsIG1ha2UgYSBub3RlIHRoYXQgdGhlIGlubmVyIG9yIG91dGVyIHN1YnBsYW4sCisJ ICogYXMgYXBwcm9wcmlhdGUsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgcGxhbiBmZWF0 dXJlIHdoZW4gdGhlIG1haW4KKwkgKiB0cmVlIHRyYXZlcnNhbCByZWFjaGVzIGl0LgorCSAqCisJ ICogQ29udmVyc2VseSwgaWYgdGhlIHBsYW5uZXIgY291bGQgaGF2ZSBtYWRlIG9uZSBzaWRlIG9m IHRoZSBqb2luIHVuaXF1ZQorCSAqIGFuZCB0aGVyZWJ5IGNvbnZlcnRlZCBpdCB0byBhbiBpbm5l ciBqb2luLCBhbmQgY2hvc2Ugbm90IHRvIGRvIHNvLCB0aGF0CisJICogaXMgYWxzbyB3b3J0aCBu b3RpbmcuCisJICoKKwkgKiBYWFg6IFdlIGFkbWl0IHRvbyBtdWNoIG5vbi11bmlxdWUgYWR2aWNl LCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUKKwkgKiBmcm9tIHRoZSByZWdyZXNzaW9uIHRl c3RzOiBFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKSBERUxFVEUgRlJPTQorCSAqIHBy dDFfbCBXSEVSRSBFWElTVFMgKFNFTEVDVCAxIEZST00gaW50NF90YmwsIExBVEVSQUwgKFNFTEVD VAorCSAqIGludDRfdGJsLmYxIEZST00gaW50OF90YmwgTElNSVQgMikgc3MgV0hFUkUgcHJ0MV9s LmMgSVMgTlVMTCkuIFdlIGVtaXQKKwkgKiBTRU1JSk9JTl9OT05fVU5JUVVFKChpbnQ0X3RibCBz cykpIGJ1dCBjcmVhdGVfdW5pcXVlX3BhdGgoKSBmYWlscyBpbgorCSAqIHRoaXMgY2FzZSwgc28g dGhlcmUncyBubyBzai11bmlxdWUgdmVyc2lvbiBwb3NzaWJsZS4KKwkgKgorCSAqIE5COiBUaGlz IGNvZGUgY291bGQgYXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9u LCBidXQKKwkgKiBub25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2Vu ZGVkIHNob3VsZCBiZSBoYXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRo aXMgc2VlbXMgbGlrZSBhIHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9u IHVwIHRvCisJICogdGhlIG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2 ZSBhIGJldHRlciBpZGVhLgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0 dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOwor CWVsc2UgaWYgKGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJl X2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsK KwlpZiAodW5pcXVlaW5uZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQ QVFGX1NFTUlKT0lOX1VOSVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBK T0lOX1NFTUkpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlK T0lOX05PTl9VTklRVUUsIGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMu ICovCisJKnJlYWxvdXRlciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOwor CSplbGlkZWRyZWFsb3V0ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxp ZGVkaW5uZXI7CisJcmV0dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdo IGEgUGxhbiBub2RlIGluIGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5l ZAorICogdG8gYmUgaXJyZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJu cyB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcg cGxhbiBub2RlLgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQ bGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVm dHRyZWU7CisJcmV0dXJuIHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQor CisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBp ZiBwcmVzZW50LCBhbmQgYW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3Vy cmluZyB1bmRlciBhIEdhdGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVy aWZpZWQgdGhhdCB0aGVyZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBp bml0aWFsIHZhbHVlIG9mICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5z IHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBw bGFuIG5vZGUuIFNldHMgKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIg b3IKKyAqIEdhdGhlciBNZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVu Y2hhbmdlZC4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRo ZXIoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2Fu eV9nYXRoZXIpCit7CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlf Z2F0aGVyID0gdHJ1ZTsKKwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsK Kwl9CisKKwlpZiAoSXNBKCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICpl bGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9 PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2Nl bmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQly ZXR1cm4gZWxpZGVkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4g aXMgYW4gQWdnIG9yIFVuaXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwg dW5sZXNzCisgKiBpdCBoYXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1t ZWRpYXRlIGNoaWxkIGlzIGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdh bnQgdG8gZGVzY2VuZCB0aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9u ZGluZyBlbGlkZWQgbm9kZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUg dGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsg b24gZXhpdCwgdGhpcyB3aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVu IHVwZGF0ZWQuCisgKgorICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhy b3VnaCBlbGlkZWQgbm9kZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNy b3NzIHRocm91Z2ggYW55IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBw bGFubmVkIHNlcGFyYXRlbHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdl QXBwZW5kIGlzCisgKiBzZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgor ICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhdCBsZWFz dCBvbmUgbm9kZSwgYW5kCisgKiBvdGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitw Z3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAor CQkJCQkJRWxpZGVkTm9kZSAqKmVsaWRlZF9ub2RlKQoreworCWlmICgqZWxpZGVkX25vZGUgIT0g TlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQSgqcGxhbiwgQWdnKSB8fCBJc0EoKnBs YW4sIFVuaXF1ZSkpCisJeworCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3Rt dCwgcGxhbik7CisKKwkJaWYgKCplbGlkZWRfbm9kZSA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxh bigqcGxhbikpCisJCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxh bik7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICog SXMgdGhpcyBhIFJlc3VsdCBub2RlIHRoYXQgaGFzIGEgY2hpbGQ/CisgKi8KK3N0YXRpYyBib29s Citpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShw bGFuLCBSZXN1bHQpICYmIHBsYW4tPmxlZnR0cmVlICE9IE5VTEw7Cit9CisKKy8qCisgKiBJcyB0 aGlzIGEgUGxhbiBub2RlIHdob3NlIHB1cnBvc2UgaXMgcHV0IHRoZSBkYXRhIGluIGEgY2VydGFp biBvcmRlcj8KKyAqLworc3RhdGljIGJvb2wKK2lzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKQor eworCXJldHVybiBJc0EocGxhbiwgU29ydCkgfHwgSXNBKHBsYW4sIEluY3JlbWVudGFsU29ydCk7 Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNGRjNzI5ODZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ3BhX2pvaW4uaAorICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFu IHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf am9pbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9KT0lOX0gK KyNkZWZpbmUgUEdQQV9KT0lOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0 eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyIHBncGFfam9pbl91bnJv bGxlcjsKK3R5cGVkZWYgc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbiBwZ3BhX3Vucm9sbGVkX2pv aW47CisKKy8qCisgKiBBbHRob3VnaCB0aGVyZSBhcmUgdGhyZWUgbWFpbiBqb2luIHN0cmF0ZWdp ZXMsIHdlIHRyeSB0byBjbGFzc2lmeSB0aGluZ3MKKyAqIG1vcmUgcHJlY2lzZWx5IGhlcmU6IG1l cmdlIGpvaW5zIGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBtYXRlcmlhbGl6YXRpb24KKyAqIG9u IHRoZSBpbm5lciBzaWRlLCBhbmQgbmVzdGVkIGxvb3BzIGNhbiB1c2UgZWl0aGVyIG1hdGVyaWFs aXphdGlvbiBvcgorICogbWVtb2l6YXRpb24uCisgKi8KK3R5cGVkZWYgZW51bQoreworCUpTVFJB VF9NRVJHRV9KT0lOX1BMQUlOID0gMCwKKwlKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwK KwlKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU4sCisJSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFM SVpFLAorCUpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCUpTVFJBVF9IQVNIX0pPSU4KKwkv KiB1cGRhdGUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUg Ki8KK30gcGdwYV9qb2luX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX0pPSU5fU1RSQVRF R1kJCSgoaW50KSBKU1RSQVRfSEFTSF9KT0lOICsgMSkKKworLyoKKyAqIEluIGFuIG91dGVyLWRl ZXAgam9pbiB0cmVlLCBldmVyeSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiB3aWxsIGJlIGEg c2NhbiwKKyAqIGJ1dCBqb2luIHRyZWVzIHdpdGggb3RoZXIgc2hhcGVzIGNhbiBjb250YWluIHVu cm9sbGVkIGpvaW5zLgorICoKKyAqIFRoZSBwbGFuIG5vZGUgd2Ugc3RvcmUgaGVyZSB3aWxsIGJl IHRoZSBpbm5lciBvciBvdXRlciBjaGlsZCBvZiB0aGUgam9pbgorICogbm9kZSwgYXMgYXBwcm9w cmlhdGUsIGV4Y2VwdCB0aGF0IHdlIGxvb2sgdGhyb3VnaCBzdWJub2RlcyB0aGF0IHdlIHJlZ2Fy ZCBhcworICogcGFydCBvZiB0aGUgam9pbiBtZXRob2QgaXRzZWxmLiBGb3IgaW5zdGFuY2UsIGZv ciBhIE5lc3RlZCBMb29wIHRoYXQKKyAqIG1hdGVyaWFsaXplcyB0aGUgaW5uZXIgaW5wdXQsIHdl J2xsIHN0b3JlIHRoZSBjaGlsZCBvZiB0aGUgTWF0ZXJpYWxpemUgbm9kZSwKKyAqIG5vdCB0aGUg TWF0ZXJpYWxpemUgbm9kZSBpdHNlbGYuCisgKgorICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVs aWRlZCBvbmUgb3IgbW9yZSBub2RlcyBmcm9tIHRoZSBwbGFuIHRyZWUsIHRoZW4KKyAqIHdlJ2xs IHN0b3JlIGRldGFpbHMgYWJvdXQgdGhlIHRvcG1vc3Qgb2YgdGhvc2UgaW4gZWxpZGVkX25vZGU7 IG90aGVyd2lzZSwKKyAqIGl0IHdpbGwgYmUgTlVMTC4KKyAqCisgKiBFeGFjdGx5IG9uZSBvZiBz Y2FuIGFuZCB1bnJvbGxlZF9qb2luIHdpbGwgYmUgbm9uLU5VTEwuCisgKi8KK3R5cGVkZWYgc3Ry dWN0Cit7CisJUGxhbgkgICAqcGxhbjsKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZTsKKwlzdHJ1 Y3QgcGdwYV9zY2FuICpzY2FuOworCXBncGFfdW5yb2xsZWRfam9pbiAqdW5yb2xsZWRfam9pbjsK K30gcGdwYV9qb2luX21lbWJlcjsKKworLyoKKyAqIFdlIGNvbnZlcnQgb3V0ZXItZGVlcCBqb2lu IHRyZWVzIHRvIGEgZmxhdCBzdHJ1Y3R1cmU7IHRoYXQgaXMsICgoQSBKT0lOIEIpCisgKiBKT0lO IEMpIEpPSU4gRCBnZXRzIGNvbnZlcnRlZCB0byBvdXRlciA9IEEsIGlubmVyID0gPEIgQyBEPi4g IFdoZW4gam9pbnMKKyAqIGFyZW4ndCBvdXRlci1kZWVwLCBzdWJzdHJ1Y3R1cmUgaXMgcmVxdWly ZWQsIGUuZy4gKEEgSk9JTiBCKSBKT0lOIChDIEpPSU4gRCkKKyAqIGlzIHJlcHJlc2VudGVkIGFz IG91dGVyID0gQSwgaW5uZXIgPSA8QiBYPiwgd2hlcmUgWCBpcyBhIHBncGFfdW5yb2xsZWRfam9p bgorICogY292ZXJpbmcgQy1ELgorICovCitzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luCit7CisJ LyogT3V0ZXJtb3N0IG1lbWJlcjsgbXVzdCBub3QgaXRzZWxmIGJlIGFuIHVucm9sbGVkIGpvaW4u ICovCisJcGdwYV9qb2luX21lbWJlciBvdXRlcjsKKworCS8qIE51bWJlciBvZiBpbm5lciBtZW1i ZXJzLiBMZW5ndGggb2YgdGhlIHN0cmF0ZWd5IGFuZCBpbm5lciBhcnJheXMuICovCisJdW5zaWdu ZWQJbmlubmVyOworCisJLyogQXJyYXkgb2Ygc3RyYXRlZ2llcywgb25lIHBlciBub24tb3V0ZXJt b3N0IG1lbWJlci4gKi8KKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCisJLyogQXJy YXkgb2YgbWVtYmVycywgZXhjbHVkaW5nIHRoZSBvdXRlcm1vc3QuIERlZXBlc3QgZmlyc3QuICov CisJcGdwYV9qb2luX21lbWJlciAqaW5uZXI7Cit9OworCisvKgorICogRG9lcyB0aGlzIHBsYW4g bm9kZSBpbmhlcml0IGZyb20gSm9pbj8KKyAqLworc3RhdGljIGlubGluZSBib29sCitwZ3BhX2lz X2pvaW4oUGxhbiAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIE5lc3RMb29wKSB8fCBJc0Eo cGxhbiwgTWVyZ2VKb2luKSB8fCBJc0EocGxhbiwgSGFzaEpvaW4pOworfQorCitleHRlcm4gcGdw YV9qb2luX3Vucm9sbGVyICpwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKHZvaWQpOworZXh0ZXJu IHZvaWQgcGdwYV91bnJvbGxfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCQkgUGxhbiAqcGxhbiwgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJIHBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9s bGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoq aW5uZXJfam9pbl91bnJvbGxlcik7CitleHRlcm4gcGdwYV91bnJvbGxlZF9qb2luICpwZ3BhX2J1 aWxkX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkJCQkJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKK2V4dGVybiB2b2lk IHBncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJv bGxlcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X291dHB1dC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OWE2NzVmZjkzZQotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAtMCwwICsxLDYy OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuYworICoJICBwcm9k dWNlIHRleHR1YWwgb3V0cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2Fsawor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorCisjaW5j bHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIK KyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgorCisvKgorICogQ29udGV4dCBvYmplY3QgZm9yIHRleHR1YWwgYWR2aWNlIGdlbmVyYXRpb24u CisgKgorICogcnRfaWRlbnRpZmllcnMgaXMgdGhlIGNhbGxlci1wcm92aWRlZCBhcnJheSBvZiBy YW5nZSB0YWJsZSBpZGVudGlmaWVycy4KKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBv ZiBwZ3BhX2lkZW50aWZpZXIuYyBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGJ1ZiBpcyB0aGUg Y2FsbGVyLXByb3ZpZGVkIG91dHB1dCBidWZmZXIuCisgKgorICogd3JhcF9jb2x1bW4gaXMgdGhl IHdyYXAgY29sdW1uLCBzbyB0aGF0IHdlIGRvbid0IGNyZWF0ZSBvdXRwdXQgdGhhdCBpcworICog dG9vIHdpZGUuIFNlZSBwZ3BhX21heWJlX2xpbmVicmVhaygpIGFuZCBjb21tZW50cyBpbiBwZ3Bh X291dHB1dF9hZHZpY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfb3V0cHV0X2NvbnRleHQK K3sKKwljb25zdCBjaGFyICoqcmlkX3N0cmluZ3M7CisJU3RyaW5nSW5mbwlidWY7CisJaW50CQkJ d3JhcF9jb2x1bW47Cit9IHBncGFfb3V0cHV0X2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkIHBncGFf b3V0cHV0X3Vucm9sbGVkX2pvaW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJ CQkJCSAgcGdwYV91bnJvbGxlZF9qb2luICpqb2luKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0 X2pvaW5fbWVtYmVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQlwZ3Bh X2pvaW5fbWVtYmVyICptZW1iZXIpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2Nhbl9zdHJh dGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3NjYW5f c3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIExpc3QgKnNjYW5zKTsKK3N0YXRpYyB2b2lk IHBncGFfb3V0cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNv bnRleHQsCisJCQkJCQkJCQkJCSBQbGFuICpwbGFuKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0 X3JlbGF0aW9uX25hbWUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKTsK K3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkgIExp c3QgKnF1ZXJ5X2ZlYXR1cmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NpbXBsZV9zdHJh dGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCWNoYXIgKnN0cmF0 ZWd5LAorCQkJCQkJCQkJCUxpc3QgKnJlbGlkX3NldHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRw dXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCSAgQml0 bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFf b3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgIEJpdG1h cHNldCAqcmVsaWRzKTsKKworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5 KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSk7CitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5n X3NjYW5fc3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFy ICpwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKTsKKwor c3RhdGljIHZvaWQgcGdwYV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFw X2NvbHVtbik7CisKKy8qCisgKiBBcHBlbmQgcXVlcnkgYWR2aWNlIHRvIHRoZSBwcm92aWRlZCBi dWZmZXIuCisgKgorICogQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgJ3dhbGtlcicgbXVz dCBiZSB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUKKyAqIG1haW4gcGxhbiB0cmVlIGFuZCBhbGwg c3VicGxhbnMgZnJvbSB0aGUgUGxhbm5lZFN0bXQuCisgKgorICogJ3J0X2lkZW50aWZpZXJzJyBp cyBhIHRhYmxlIG9mIHVuaXF1ZSBpZGVudGlmaWVycywgb25lIGZvciBlYWNoIFJUSS4KKyAqIFNl ZSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KCkuCisgKgorICogUmVz dWx0cyB3aWxsIGJlIGFwcGVuZGVkIHRvICdidWYnLgorICovCit2b2lkCitwZ3BhX291dHB1dF9h ZHZpY2UoU3RyaW5nSW5mbyBidWYsIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAor CQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMpCit7CisJSW5kZXgJCXJ0YWJs ZV9sZW5ndGggPSBsaXN0X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUxpc3RDZWxs ICAgKmxjOworCXBncGFfb3V0cHV0X2NvbnRleHQgY29udGV4dDsKKworCS8qIEJhc2ljIGluaXRp YWxpemF0aW9uLiAqLworCW1lbXNldCgmY29udGV4dCwgMCwgc2l6ZW9mKHBncGFfb3V0cHV0X2Nv bnRleHQpKTsKKwljb250ZXh0LmJ1ZiA9IGJ1ZjsKKworCS8qCisJICogQ29udmVydCBpZGVudGlm aWVycyB0byBzdHJpbmcgZm9ybS4gTm90ZSB0aGF0IHRoZSBsb29wIHZhcmlhYmxlIGhlcmUgaXMK KwkgKiBub3QgYW4gUlRJLCBiZWNhdXNlIFJUSXMgYXJlIDEtYmFzZWQuIFNvbWUgUlRJcyB3aWxs IGhhdmUgbm8KKwkgKiBpZGVudGlmaWVyLCBlaXRoZXIgYmVjYXVzZSB0aGUgcmVsb3B0a2luZCBp cyBSVEVfSk9JTiBvciBiZWNhdXNlIHRoYXQKKwkgKiBwb3J0aW9uIG9mIHRoZSBxdWVyeSBkaWRu J3QgbWFrZSBpdCBpbnRvIHRoZSBmaW5hbCBwbGFuLgorCSAqLworCWNvbnRleHQucmlkX3N0cmlu Z3MgPSBwYWxsb2MwX2FycmF5KGNvbnN0IGNoYXIgKiwgcnRhYmxlX2xlbmd0aCk7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBydGFibGVfbGVuZ3RoOyArK2kpCisJCWlmIChydF9pZGVudGlmaWVyc1tp XS5hbGlhc19uYW1lICE9IE5VTEwpCisJCQljb250ZXh0LnJpZF9zdHJpbmdzW2ldID0gcGdwYV9p ZGVudGlmaWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNbaV0pOworCisJLyoKKwkgKiBJZiB0aGUg dXNlciBjaG9vc2VzIHRvIHVzZSBFWFBMQUlOIChQTEFOX0FEVklDRSkgaW4gYW4gODAtY29sdW1u IHdpbmRvdworCSAqIGZyb20gYSBwc3FsIGNsaWVudCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MsIHBz cWwgd2lsbCBhZGQgb25lIHNwYWNlIHRvCisJICogdGhlIGxlZnQgb2YgdGhlIG91dHB1dCBhbmQg RVhQTEFJTiB3aWxsIGFkZCB0d28gbW9yZSB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBhZHZpY2Uu IFRodXMsIGxpbmVzIG9mIG1vcmUgdGhhbiA3NyBjaGFyYWN0ZXJzIHdpbGwgd3JhcC4gV2Ugc2V0 IHRoZQorCSAqIHdyYXAgbGltaXQgdG8gNzYgaGVyZSBzbyB0aGF0IHRoZSBvdXRwdXQgd29uJ3Qg cmVhY2ggYWxsIHRoZSB3YXkgdG8gdGhlCisJICogdmVyeSBsYXN0IGNvbHVtbiBvZiB0aGUgdGVy bWluYWwuCisJICoKKwkgKiBPZiBjb3Vyc2UsIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeSBzZXQg b2YgYXNzdW1wdGlvbnMsIGFuZCBvbmUgY291bGQKKwkgKiB3ZWxsIG1ha2UgYW4gYXJndW1lbnQg Zm9yIGEgZGlmZmVyZW50IHdyYXAgbGltaXQsIG9yIGZvciBhIGNvbmZpZ3VyYWJsZQorCSAqIG9u ZS4KKwkgKi8KKwljb250ZXh0LndyYXBfY29sdW1uID0gNzY7CisKKwkvKgorCSAqIEVhY2ggcGll Y2Ugb2YgSk9JTl9PUkRFUigpIGFkdmljZSBmdWxseSBkZXNjcmliZXMgdGhlIGpvaW4gb3JkZXIg Zm9yIGEKKwkgKiBhIHNpbmdsZSB1bnJvbGxlZCBqb2luLiBNZXJnaW5nIGlzIG5vdCBwZXJtaXR0 ZWQsIGJlY2F1c2UgdGhhdCB3b3VsZAorCSAqIGNoYW5nZSB0aGUgbWVhbmluZywgZS5nLiBTRVFf U0NBTihhIGIgYyBkKSBtZWFucyBzaW1wbHkgdGhhdCBzZXF1ZW50aWFsCisJICogc2NhbnMgc2hv dWxkIGJlIHVzZWQgZm9yIGFsbCBvZiB0aG9zZSByZWxhdGlvbnMsIGFuZCBpcyB0aHVzIGVxdWl2 YWxlbnQKKwkgKiB0byBTRVFfU0NBTihhIGIpIFNFUV9TQ0FOKGMgZCksIGJ1dCBKT0lOX09SREVS KGEgYiBjIGQpIG1lYW5zIHRoYXQgImEiCisJICogaXMgdGhlIGRyaXZpbmcgdGFibGUgd2hpY2gg aXMgdGhlbiBqb2luZWQgdG8gImIiIHRoZW4gImMiIHRoZW4gImQiLAorCSAqIHdoaWNoIGlzIHRv dGFsbHkgZGlmZmVyZW50IGZyb20gSk9JTl9PUkRFUihhIGIpIGFuZCBKT0lOX09SREVSKGMgZCku CisJICovCisJZm9yZWFjaChsYywgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwl7 CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4gPSBsZmlyc3QobGMpOworCisJCWlmIChidWYt PmxlbiA+IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcbicpOworCQlhcHBlbmRT dHJpbmdJbmZvKGNvbnRleHQuYnVmLCAiSk9JTl9PUkRFUigiKTsKKwkJcGdwYV9vdXRwdXRfdW5y b2xsZWRfam9pbigmY29udGV4dCwgdWpvaW4pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LmJ1ZiwgJyknKTsKKwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC5idWYsIGNvbnRl eHQud3JhcF9jb2x1bW4pOworCX0KKworCS8qIEVtaXQgam9pbiBzdHJhdGVneSBhZHZpY2UuICov CisJZm9yIChpbnQgcyA9IDA7IHMgPCBOVU1fUEdQQV9KT0lOX1NUUkFURUdZOyArK3MpCisJewor CQljaGFyCSAgICpzdHJhdGVneSA9IHBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHMpOworCisJ CXBncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneSgmY29udGV4dCwKKwkJCQkJCQkJCXN0cmF0ZWd5 LAorCQkJCQkJCQkJd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbc10pOworCX0KKworCS8qCisJICog RW1pdCBzY2FuIHN0cmF0ZWd5IGFkdmljZSAoYnV0IG5vdCBmb3Igb3JkaW5hcnkgc2NhbnMsIHdo aWNoIGFyZQorCSAqIGRlZmluaXRpb25hbGx5IHVuaW50ZXJlc3RpbmcpLgorCSAqLworCWZvciAo aW50IGMgPSAwOyBjIDwgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWTsgKytjKQorCQlpZiAoYyAhPSBQ R1BBX1NDQU5fT1JESU5BUlkpCisJCQlwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KCZjb250ZXh0 LCBjLCB3YWxrZXItPnNjYW5zW2NdKTsKKworCS8qIEVtaXQgcXVlcnkgZmVhdHVyZSBhZHZpY2Uu ICovCisJZm9yIChpbnQgdCA9IDA7IHQgPCBOVU1fUEdQQV9RRl9UWVBFUzsgKyt0KQorCQlwZ3Bh X291dHB1dF9xdWVyeV9mZWF0dXJlKCZjb250ZXh0LCB0LCB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVz W3RdKTsKKworCS8qIEVtaXQgTk9fR0FUSEVSIGFkdmljZS4gKi8KKwlwZ3BhX291dHB1dF9ub19n YXRoZXIoJmNvbnRleHQsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KKworLyoKKyAqIE91 dHB1dCB0aGUgbWVtYmVycyBvZiBhbiB1bnJvbGxlZCBqb2luLCBmaXJzdCB0aGUgb3V0ZXJtb3N0 IG1lbWJlciwgYW5kCisgKiB0aGVuIHRoZSBpbm5lciBtZW1iZXJzIG9uZSBieSBvbmUsIGFzIHBh cnQgb2YgSk9JTl9PUkRFUigpIGFkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0 X3Vucm9sbGVkX2pvaW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdw YV91bnJvbGxlZF9qb2luICpqb2luKQoreworCXBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKGNvbnRl eHQsICZqb2luLT5vdXRlcik7CisKKwlmb3IgKGludCBrID0gMDsgayA8IGpvaW4tPm5pbm5lcjsg KytrKQorCXsKKwkJcGdwYV9qb2luX21lbWJlciAqbWVtYmVyID0gJmpvaW4tPmlubmVyW2tdOwor CisJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1 bW4pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCXBncGFf b3V0cHV0X2pvaW5fbWVtYmVyKGNvbnRleHQsIG1lbWJlcik7CisJfQorfQorCisvKgorICogT3V0 cHV0IGEgc2luZ2xlIG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIGFzIHBhcnQgb2YgSk9JTl9P UkRFUigpIGFkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X2pvaW5fbWVtYmVy KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICpt ZW1iZXIpCit7CisJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQlwZ3BhX291dHB1dF91bnJv bGxlZF9qb2luKGNvbnRleHQsIG1lbWJlci0+dW5yb2xsZWRfam9pbik7CisJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJcGdwYV9zY2Fu ICAqc2NhbiA9IG1lbWJlci0+c2NhbjsKKworCQlBc3NlcnQoc2NhbiAhPSBOVUxMKTsKKwkJaWYg KGJtc19tZW1iZXJzaGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFf b3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJ CWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAneycpOwor CQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVs aWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ30nKTsKKwkJfQor CX0KK30KKworLyoKKyAqIE91dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3NjYW4gb2Jq ZWN0cy4KKyAqCisgKiBBbGwgdGhlIHNjYW5zIG11c3QgdXNlIHRoZSBzdHJhdGVneSBzcGVjaWZp ZWQgYnkgdGhlICJzdHJhdGVneSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291 dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkg IHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgTGlzdCAqc2NhbnMpCit7CisJ Ym9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHNjYW5zID09IE5JTCkKKwkJcmV0dXJuOworCisJ aWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJ CQkJCSBwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShzdHJhdGVneSkpOworCisJZm9yZWFjaF9w dHIocGdwYV9zY2FuLCBzY2FuLCBzY2FucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBzY2FuLT5w bGFuOworCisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJ cGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQkv KiBPdXRwdXQgdGhlIHJlbGF0aW9uIGlkZW50aWZpZXJzLiAqLworCQlpZiAoYm1zX21lbWJlcnNo aXAoc2Nhbi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRp b25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1 dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisKKwkJLyogRm9yIHNj YW5zIGludm9sdmluZyBpbmRleGVzLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24uICovCisJCWlm IChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJc0EocGxhbiwg SW5kZXhTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRl eHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1Ziwg JyAnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJbmRleFNjYW4g KikgcGxhbiktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NB Tl9JTkRFWF9PTkxZKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKTsK KwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1 bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdw YV9vdXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAoKEluZGV4T25seVNj YW4gKikgcGxhbiktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFf U0NBTl9CSVRNQVBfSEVBUCkKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+ YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250 ZXh0LCBwbGFuLT5sZWZ0dHJlZSk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBj b250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJv dXQgd2hpY2ggaW5kZXggb3IgaW5kZXhlcyBwb3dlciBhIEJpdG1hcEhlYXBTY2FuLgorICoKKyAq IFdlIGVtaXQgJiYoaTEgaTIgaTMpIGZvciBhIEJpdG1hcEFuZCBiZXR3ZWVuIGluZGV4ZXMgaTEs IGkyLCBhbmQgaTM7CisgKiBhbmQgbGlrZXdpc2UgfHwoaTEgaTIgaTMpIGZvciBhIHNpbWlsYXIg Qml0bWFwT3Igb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfYml0bWFw X2luZGV4X2RldGFpbHMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgUGxhbiAqcGxhbikK K3sKKwljaGFyCSAgICpvcGVyYXRvcjsKKwlMaXN0CSAgICpiaXRtYXBwbGFuczsKKwlib29sCQlm aXJzdCA9IHRydWU7CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcEluZGV4U2NhbikpCisJeworCQlC aXRtYXBJbmRleFNjYW4gKmJpdG1hcGluZGV4c2NhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxh bjsKKworCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsIGJpdG1hcGluZGV4c2Nh bi0+aW5kZXhpZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcE9yKSkK Kwl7CisJCW9wZXJhdG9yID0gInx8IjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1hcE9yICopIHBs YW4pLT5iaXRtYXBwbGFuczsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEJpdG1hcEFuZCkpCisJ eworCQlvcGVyYXRvciA9ICImJiI7CisJCWJpdG1hcHBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxh biktPmJpdG1hcHBsYW5zOworCX0KKwllbHNlCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG5v ZGUgdHlwZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKworCWFwcGVuZFN0cmluZ0luZm8o Y29udGV4dC0+YnVmLCAiJXMoIiwgb3BlcmF0b3IpOworCWZvcmVhY2hfcHRyKFBsYW4sIGNoaWxk X3BsYW4sIGJpdG1hcHBsYW5zKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsK KwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRl eHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1Ziwg JyAnKTsKKwkJfQorCQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBj aGlsZF9wbGFuKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScp OworfQorCisvKgorICogT3V0cHV0IGEgc2NoZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9j b250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpCit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9u YW1lc3BhY2UocmVsaWQpOworCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vf bmFtZV9vcl90ZW1wKG5zcG9pZCk7CisJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShy ZWxpZCk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRl bnRpZmllcihyZWxuYW1lc3BhY2UpKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcuJyk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lk ZW50aWZpZXIocmVsbmFtZSkpOworfQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0 IG9mIHBncGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0 IGJlIG9mIHRoZSB0eXBlIHNwZWNpZmllZCBieSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitz dGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0 ICpjb250ZXh0LCBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVy ZXMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5J TCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRl eHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5 cGUpKTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1 cmVzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJ CQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1u KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJ CWlmIChibXNfbWVtYmVyc2hpcChxZi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdw YV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJ CWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOwor CQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlk cyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9 CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXli ZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8q CisgKiBPdXRwdXQgInNpbXBsZSIgYWR2aWNlIGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVj dHMgZWFjaCBvZiB3aGljaAorICogY29udGFpbnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBC eSBzaW1wbGUsIHdlIGp1c3QgbWVhbiB0aGF0IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRo ZSBtb3N0CisgKiBzdHJhaWdodGZvcndhcmQgcGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZv bGxvd2VkIGJ5IGEgbGlzdCBvZiBpdGVtcworICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vy cm91bmRlZCBieSBwYXJlbnRoZXNlcy4gSW5kaXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3Qg YXJlIGEgc2luZ2xlIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29u dGFpbnMKKyAqIGp1c3Qgb25lIG1lbWJlciwgb3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQg Ynkgc3BhY2VzIGFuZCBzdXJyb3VuZGVkCisgKiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBz ZXQgd2l0aCBtdWx0aXBsZSBtZW1iZXJzLiBCaXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMg cHJvYmFibHkgc2hvdWxkbid0IG9jY3VyIGhlcmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUK KyAqIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN1Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdw YV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNo YXIgKnN0cmF0ZWd5LAorCQkJCQkJCUxpc3QgKnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3Qg PSB0cnVlOworCisJaWYgKHJlbGlkX3NldHMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29u dGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kp OworCisJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJ aWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJl X2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVt YmVyc2hpcChyZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlv bnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0 aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVm LCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFk dmljZSBmb3IgYWxsIHJlbGF0aW9ucyBub3QgYXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9u b19nYXRoZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMp Cit7CisJaWYgKHJlbGlkcyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+ bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3Bh X291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0 aGUgaWRlbnRpZmllcnMgZm9yIGVhY2ggUlRJIGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICog SWRlbnRpZmllcnMgYXJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMg cG9zc2libGUgYWZ0ZXIKKyAqIGVhY2ggb25lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRw dXRfcmVsYXRpb25zKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVm LAorCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJ CWZpcnN0ID0gdHJ1ZTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywg cnRpKSkgPj0gMCkKKwl7CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRf c3RyaW5nc1tydGkgLSAxXTsKKworCQlpZiAocmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhF UlJPUiwgIm5vIGlkZW50aWZpZXIgZm9yIFJUSSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQor CQl7CisJCQlmaXJzdCA9IGZhbHNlOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJp ZF9zdHJpbmcpOworCQl9CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVm LCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIs IHJpZF9zdHJpbmcpOworCQl9CisJfQorfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBj b3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBj aGFyICoKK3BncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJh dGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9J Tl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01F UkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUi OworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xP T1BfUExBSU4iOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJl dHVybiAiTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9P UF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RS QVRfSEFTSF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hh YmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNv cnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNo YXIgKgorcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0 ZWd5KQoreworCXN3aXRjaCAoc3RyYXRlZ3kpCisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFS WToKKwkJCXJldHVybiAiT1JESU5BUllfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJ CXJldHVybiAiU0VRX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJl dHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQly ZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJu ICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAi SU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJl dHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAi VElEX1NDQU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQg c2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2Zl YXR1cmVfdHlwZShwZ3BhX3FmX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQlj YXNlIFBHUEFRRl9HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dB VEhFUl9NRVJHRToKKwkJCXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VN SUpPSU5fTk9OX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNh c2UgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsK Kwl9CisKKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJ bnNlcnQgYSBsaW5lIGJyZWFrIGludG8gdGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisg KgorICogSWYgd3JhcF9jb2x1bW4gaXMgemVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhp bmcuIE90aGVyd2lzZSwgd2UKKyAqIGNvbnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9u bHkgaW5zZXJ0IGEgbmV3bGluZSBpZiB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGlu IHRoZSBidWZmZXIgZXhjZWVkcyB3cmFwX2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBp bnNlcnRpbmcgYSBuZXdsaW5lIGF0IG9yIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJy ZW50IGxpbmUuCisgKgorICogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGlu c2VydGVkIGlzIHNpbXBseSB3aGVyZXZlciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0 aW1lIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2Fs bGVyIGlzIGV4cGVjdGVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNo IGEgZ29vZAorICogcGxhY2UgZm9yIGEgbGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3Bn cGFfbWF5YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJ Y2hhcgkgICAqdHJhaWxpbmdfbmw7CisJaW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1 cnNvcjsKKworCS8qIElmIGxpbmUgd3JhcHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4g Ki8KKwlpZiAod3JhcF9jb2x1bW4gPD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGlu ZV9zdGFydCB0byB0aGUgYnl0ZSBvZmZzZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QK KwkgKiBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGlu ZSBtZWFucyB0aGUgbGFzdAorCSAqIG9uZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9z dGFydCBjb3VsZCBiZSB0aGUgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhl IGxhc3QgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRy YWlsaW5nX25sID0gc3RycmNocihidWYtPmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9 PSBOVUxMKQorCQlsaW5lX3N0YXJ0ID0gMDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxp bmdfbmwgLSBidWYtPmRhdGEpICsgMTsKKworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3Vy cmVudCBlbmQgb2YgdGhlIGJ1ZmZlciBpcyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGlu c2VydCBhIGxpbmUgYnJlYWsgb24gYSBmdXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAq LworCXNhdmVfY3Vyc29yID0gYnVmLT5jdXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsK KworCS8qIElmIHdlIGhhdmVuJ3QgcGFzc2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVl ZCBhIG5ld2xpbmUuICovCisJaWYgKGJ1Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVt bikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBh IG5ld2xpbmUgYXQgYSBwb3NpdGlvbiBsYXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0 aGUgY3VycmVudCBsaW5lLgorCSAqLworCWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQor CQlyZXR1cm47CisKKwkvKiBJbnNlcnQgYSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3Ig bG9jYXRpb24uICovCisJZW5sYXJnZVN0cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYt PmRhdGFbc2F2ZV9jdXJzb3JdICsgMSwgJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYt PmxlbiAtIHNhdmVfY3Vyc29yKTsKKwkrK2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+ bGVuXSA9ICdcMCc7CisJYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjQ3NDk2ZDc2ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX291dHB1dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfb3V0cHV0LmgKKyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRo ZSByZXN1bHRzIG9mIGEgcGxhbiB0cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIFBHUEFfT1VUUFVUX0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5j bHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0 ZXJuIHZvaWQgcGdwYV9vdXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmll ciAqcnRfaWRlbnRpZmllcnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9wYXJzZXIueSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJz ZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYxN2U3ZjJmNjQK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkK QEAgLTAsMCArMSwzMzcgQEAKKyV7CisvKgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoK KyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICov CisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRl IDxtYXRoLmg+CisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVz LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5o IgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisv KgorICogQmlzb24gZG9lc24ndCBhbGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUg YWNyb3NzIHBhcnNlciBjYWxscywKKyAqIHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFs bG9jIGluc3RlYWQgb2YgbWFsbG9jLiAgVGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlm IHdlIGVycm9yIG91dCBkdXJpbmcgcGFyc2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxs b2MKKyNkZWZpbmUgWVlGUkVFICAgcGZyZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAq LworJXBhcnNlLXBhcmFtIHtMaXN0ICoqcmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFy c2VfZXJyb3JfbXNnX3B9CislcGFyc2UtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgt cGFyYW0ge0xpc3QgKipyZXN1bHR9CislbGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNn X3B9CislbGV4LXBhcmFtIHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBl Y3QgMAorJW5hbWUtcHJlZml4PSJwZ3BhX3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7 CisJaW50CQkJaW50ZWdlcjsKKwlMaXN0CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0 ZW07CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0 YXJnZXQ7Cit9CisldG9rZW4gPHN0cj4gVE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tf VEFHX0JJVE1BUCBUT0tfVEFHX0lOREVYCisldG9rZW4gPHN0cj4gVE9LX1RBR19TSU1QTEUgVE9L X1RBR19HRU5FUklDCisldG9rZW4gPGludGVnZXI+IFRPS19JTlRFR0VSCisldG9rZW4gVE9LX09S IFRPS19BTkQKKworJXR5cGUgPGludGVnZXI+IG9wdF9yaV9vY2N1cnJlbmNlCisldHlwZSA8aXRl bT4gYWR2aWNlX2l0ZW0KKyV0eXBlIDxsaXN0PiBhZHZpY2VfaXRlbV9saXN0IGJpdG1hcF9zdWJs aXN0IGJpdG1hcF90YXJnZXRfbGlzdCBnZW5lcmljX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4g aW5kZXhfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl90YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IG9w dF9wYXJ0aXRpb24gc2ltcGxlX3RhcmdldF9saXN0CisldHlwZSA8c3RyPiBpZGVudGlmaWVyIG9w dF9wbGFuX25hbWUKKyV0eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3VibGlzdCBqb2luX29yZGVyX3N1 Ymxpc3QKKyV0eXBlIDx0YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpdGFyZ2V0 PiBiaXRtYXBfdGFyZ2V0X2l0ZW0gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwK KworLyogR3JhbW1hciBmb2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0 ZW1fbGlzdAorCQl7CisJCQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIg d2FybmluZyAqLworCQkJKnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0 OiBhZHZpY2VfaXRlbV9saXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7 IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5f T1JERVIgJygnIGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9j MF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9P UkRFUjsKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGlu ZGV4X3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2 aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJ CQkJJCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNt cCgkMSwgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9T Q0FOOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwg JDEpOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19CSVRNQVAgJygnIGJp dG1hcF90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2Fk dmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJ JCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBsZV90YXJn ZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVt KTsKKwkJCWlmIChzdHJjbXAoJDEsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQ R1BBX1RBR19OT19HQVRIRVI7CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJzZXFfc2NhbiIpID09 IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21w KCQxLCAidGlkX3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19USURfU0NBTjsK KwkJCWVsc2UKKwkJCQllbG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsK KwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfR0VORVJJQyAnKCcgZ2VuZXJp Y190YXJnZXRfbGlzdCAnKScKKwkJeworCQkJYm9vbAlmYWlsOworCisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IHBncGFfcGFyc2VfYWR2aWNl X3RhZygkMSwgJmZhaWwpOworCQkJaWYgKGZhaWwpCisJCQl7CisJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgInVucmVjb2duaXpl ZCBhZHZpY2UgdGFnIik7CisJCQl9CisKKwkJCWlmICgkJC0+dGFnID09IFBHUEFfVEFHX0ZPUkVJ R05fSk9JTikKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdl dCwgJDMpCisJCQkJeworCQkJCQlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVO VElGSUVSIHx8CisJCQkJCQlsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKSA9PSAxKQorCQkJ CQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJ CQkJCQkJCQkJICJGT1JFSUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9u ZSByZWxhdGlvbiBpZGVudGlmaWVyIik7CisJCQkJfQorCQkJfQorCisJCQkkJC0+dGFyZ2V0cyA9 ICQzOworCQl9CisJOworCityZWxhdGlvbl9pZGVudGlmaWVyOiBpZGVudGlmaWVyIG9wdF9yaV9v Y2N1cnJlbmNlIG9wdF9wYXJ0aXRpb24gb3B0X3BsYW5fbmFtZQorCQl7CisJCQkkJCA9IHBhbGxv YzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdF VF9JREVOVElGSUVSOworCQkJJCQtPnJpZC5hbGlhc19uYW1lID0gJDE7CisJCQkkJC0+cmlkLm9j Y3VycmVuY2UgPSAkMjsKKwkJCWlmIChsaXN0X2xlbmd0aCgkMykgPT0gMikKKwkJCXsKKwkJCQkk JC0+cmlkLnBhcnRuc3AgPSBsaW5pdGlhbCgkMyk7CisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbHNl Y29uZCgkMyk7CisJCQl9CisJCQllbHNlIGlmICgkMyAhPSBOSUwpCisJCQkJJCQtPnJpZC5wYXJ0 cmVsID0gbGluaXRpYWwoJDMpOworCQkJJCQtPnJpZC5wbGFuX25hbWUgPSAkNDsKKwkJfQorCTsK KworaW5kZXhfbmFtZTogaWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBn cGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFNRTsKKwkJCSQk LT5pbmRuYW1lID0gJDE7CisJCX0KKwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZpZXIKKwkJewor CQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUg PSBQR1BBX0lOREVYX05BTUU7CisJCQkkJC0+aW5kbmFtZXNwYWNlID0gJDE7CisJCQkkJC0+aW5k bmFtZSA9ICQzOworCQl9CisJOworCitvcHRfcmlfb2NjdXJyZW5jZToKKwknIycgVE9LX0lOVEVH RVIKKwkJeworCQkJaWYgKCQyIDw9IDApCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2Vf ZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIm9ubHkgcG9zaXRpdmUgb2NjdXJyZW5j ZSBudW1iZXJzIGFyZSBwZXJtaXR0ZWQiKTsKKwkJCSQkID0gJDI7CisJCX0KKwl8CisJCXsKKwkJ CS8qIFRoZSBkZWZhdWx0IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEuICovCisJCQkkJCA9IDE7CisJ CX0KKwk7CisKK2lkZW50aWZpZXI6IFRPS19JREVOVAorCXwgVE9LX1RBR19KT0lOX09SREVSCisJ fCBUT0tfVEFHX0lOREVYCisJfCBUT0tfVEFHX0JJVE1BUAorCXwgVE9LX1RBR19TSU1QTEUKKwl8 IFRPS19UQUdfR0VORVJJQworCTsKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdl IGFsd2F5cyBzY2hlbWEtcXVhbGlmeSB0aGUgcGFydGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBw YXJzaW5nIGFkdmljZSwgd2UgYWNjZXB0IGEgc3BlY2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4K KyAqLworb3B0X3BhcnRpdGlvbjoKKwknLycgVE9LX0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAk JCA9IGxpc3RfbWFrZTIoJDIsICQ0KTsgfQorCXwgJy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlz dF9tYWtlMSgkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6 CisJJ0AnIFRPS19JREVOVAorCQl7ICQkID0gJDI7IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJ OworCitiaXRtYXBfdGFyZ2V0X2xpc3Q6IGJpdG1hcF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVu dGlmaWVyIGJpdG1hcF90YXJnZXRfaXRlbQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJ JCQgPSBsYXBwZW5kKCQxLCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2Jp dG1hcF90YXJnZXRfaXRlbTogaW5kZXhfbmFtZQorCQl7ICQkID0gJDE7IH0KKwl8IFRPS19PUiAn KCcgYml0bWFwX3N1Ymxpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9p bmRleF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9PUjsKKwkJCSQkLT5jaGls ZHJlbiA9ICQzOworCQl9CisJfCBUT0tfQU5EICcoJyBiaXRtYXBfc3VibGlzdCAnKScKKwkJewor CQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUg PSBQR1BBX0lOREVYX0FORDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJOworCitiaXRt YXBfc3VibGlzdDogYml0bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBs YXBwZW5kKCQxLCAkMik7IH0KKwl8IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGlzdF9t YWtlMSgkMSk7IH0KKwk7CisKK2dlbmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNfdGFyZ2V0X2xp c3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBn ZW5lcmljX3RhcmdldF9saXN0IGdlbmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwg JDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitnZW5lcmljX3N1Ymxpc3Q6ICcoJyBn ZW5lcmljX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFf YWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7 CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworaW5kZXhfdGFyZ2V0X2xpc3Q6CisJ ICBpbmRleF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGluZGV4X25hbWUKKwkJewor CQkJJDItPml0YXJnZXQgPSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAor CQl7ICQkID0gTklMOyB9CisJOworCitqb2luX29yZGVyX3RhcmdldF9saXN0OiBqb2luX29yZGVy X3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQy KTsgfQorCXwgam9pbl9vcmRlcl90YXJnZXRfbGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKwkJeyAk JCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9v cmRlcl9zdWJsaXN0OgorCScoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkk JCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQ R1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCXwg J3snIHNpbXBsZV90YXJnZXRfbGlzdCAnfScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChw Z3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfVU5PUkRFUkVE X0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworc2ltcGxlX3RhcmdldF9s aXN0OiBzaW1wbGVfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFw cGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCislJQorCisvKgorICog UGFyc2UgYW4gYWR2aWNlX3N0cmluZyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZiBw Z3BhX2FkdmljZV9pdGVtCisgKiBvYmplY3RzLiBJZiBhIHBhcnNlIGVycm9yIG9jY3VycywgaW5z dGVhZCByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEwsICpl cnJvcl9wIHdpbGwgYmUgc2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlOworICogb3RoZXJ3aXNlLCAq ZXJyb3JfcCB3aWxsIGJlIHNldCB0byBOVUxMLgorICovCitMaXN0ICoKK3BncGFfcGFyc2UoY29u c3QgY2hhciAqYWR2aWNlX3N0cmluZywgY2hhciAqKmVycm9yX3ApCit7CisJeXlzY2FuX3QJc2Nh bm5lcjsKKwlMaXN0CSAgICpyZXN1bHQ7CisJY2hhcgkgICAqZXJyb3IgPSBOVUxMOworCisJcGdw YV9zY2FubmVyX2luaXQoYWR2aWNlX3N0cmluZywgJnNjYW5uZXIpOworCXBncGFfeXlwYXJzZSgm cmVzdWx0LCAmZXJyb3IsIHNjYW5uZXIpOworCXBncGFfc2Nhbm5lcl9maW5pc2goc2Nhbm5lcik7 CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCSplcnJvcl9wID0gZXJyb3I7CisJCXJldHVy biBOVUxMOworCX0KKworCSplcnJvcl9wID0gTlVMTDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjc2N2ZhY2NkOGQwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpAQCAtMCwwICsxLDE3MDYgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5jCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNs dWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisjaW5j bHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNs dWRlICJwZ3BhX3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAi cGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvZXh0ZW5kcGxh bi5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgorI2luY2x1ZGUgIm9wdGltaXpl ci9wYXRocy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0 aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8q CisgKiBXaGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQsIHdlIHRyeSBnZW5lcmF0aW5nIHJlbGF0 aW9uIGlkZW50aWZpZXJzIGR1cmluZworICogcGxhbm5pbmcsIHNhdmluZyB0aGVtIGluIGEgaGFz aCB0YWJsZSwgYW5kIHRoZW4gY3Jvc3MtY2hlY2tpbmcgdGhlbSBhZ2FpbnN0CisgKiB0aGUgb25l cyBnZW5lcmF0ZWQgYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBncGFfcmlfY2hlY2tlcl9rZXkKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJ CXJ0aTsKK30gcGdwYV9yaV9jaGVja2VyX2tleTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9j aGVja2VyCit7CisJcGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJdWludDMyCQlzdGF0dXM7CisJ Y29uc3QgY2hhciAqcmlkX3N0cmluZzsKK30gcGdwYV9yaV9jaGVja2VyOworCitzdGF0aWMgdWlu dDMyIHBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSk7CisK K3N0YXRpYyBpbmxpbmUgYm9vbAorcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KHBncGFfcmlf Y2hlY2tlcl9rZXkgYSwgcGdwYV9yaV9jaGVja2VyX2tleSBiKQoreworCWlmIChhLnJ0aSAhPSBi LnJ0aSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChhLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1 cm4gKGIucGxhbl9uYW1lID09IE5VTEwpOworCWlmIChiLnBsYW5fbmFtZSA9PSBOVUxMKQorCQly ZXR1cm4gZmFsc2U7CisJcmV0dXJuIHN0cmNtcChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpID09 IDA7Cit9CisKKyNkZWZpbmUgU0hfUFJFRklYCQkJcGdwYV9yaV9jaGVjaworI2RlZmluZSBTSF9F TEVNRU5UX1RZUEUJCXBncGFfcmlfY2hlY2tlcgorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFf cmlfY2hlY2tlcl9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tF WSh0Yiwga2V5KQlwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVB TCh0YiwgYSwgYikJcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNI X1NDT1BFCQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RF RklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKyNlbmRpZgorCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3BsYW5uZXJfc3RhdGUKK3sKKwlFeHBsYWluU3RhdGUgKmV4cGxhaW5fc3RhdGU7 CisJcGdwYV90cm92ZSAqdHJvdmU7CisJTWVtb3J5Q29udGV4dCB0cm92ZV9jeHQ7CisKKyNpZmRl ZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNo OworI2VuZGlmCit9IHBncGFfcGxhbm5lcl9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9q b2luX3N0YXRlCit7CisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8K KwlSZWxPcHRJbmZvICpvdXRlcnJlbDsKKworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBp bm5lciByZWwuICovCisJUmVsT3B0SW5mbyAqaW5uZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9m IHJlbGF0aW9uIGlkZW50aWZpZXJzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdp dGgKKwkgKiBvdXRlcnJlbCBpZGVuaWZpZXJzIGJlZm9yZSBpbm5lcnJlbCBpZGVudGlmaWVycy4K KwkgKi8KKwlwZ3BhX2lkZW50aWZpZXIgKnJpZHM7CisKKwkvKiBOdW1iZXIgb2Ygb3V0ZXIgcmVs IGlkZW50aWZpZXJzLiAqLworCWludAkJCW91dGVyX2NvdW50OworCisJLyogTnVtYmVyIG9mIGlu bmVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJCQlpbm5lcl9jb3VudDsKKworCS8qCisJICog VHJvdmUgbG9va3VwIHJlc3VsdHMuCisJICoKKwkgKiBqb2luX2VudHJpZXMgYW5kIHJlbF9lbnRy aWVzIGFyZSBhcnJheXMgb2YgZW50cmllcywgYW5kIGpvaW5faW5kZXhlcworCSAqIGFuZCByZWxf aW5kZXhlcyBhcmUgdGhlIGludGVnZXIgb2Zmc2V0cyB3aXRoaW4gdGhvc2UgYXJyYXlzIG9mIGVu dHJpZXMKKwkgKiBwb3RlbnRpYWxseSByZWxldmFudCB0byB1cy4gVGhlICJqb2luIiBmaWVsZHMg Y29ycmVzcG9uZCB0byBhIGxvb2t1cAorCSAqIHVzaW5nIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4g YW5kIHRoZSAicmVsIiBmaWVsZHMgdG8gYSBsb29rdXAgdXNpbmcKKwkgKiBQR1BBX1RST1ZFX0xP T0tVUF9SRUwuCisJICovCisJcGdwYV90cm92ZV9lbnRyeSAqam9pbl9lbnRyaWVzOworCUJpdG1h cHNldCAgKmpvaW5faW5kZXhlczsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllczsKKwlC aXRtYXBzZXQgICpyZWxfaW5kZXhlczsKK30gcGdwYV9qb2luX3N0YXRlOworCisvKiBTYXZlZCBo b29rIHZhbHVlcyAqLworc3RhdGljIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBwcmV2X2dl dF9yZWxhdGlvbl9pbmZvID0gTlVMTDsKK3N0YXRpYyBqb2luX3BhdGhfc2V0dXBfaG9va190eXBl IHByZXZfam9pbl9wYXRoX3NldHVwID0gTlVMTDsKK3N0YXRpYyBqb2lucmVsX3NldHVwX2hvb2tf dHlwZSBwcmV2X2pvaW5yZWxfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2V0dXBfaG9v a190eXBlIHByZXZfcGxhbm5lcl9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93 bl9ob29rX3R5cGUgcHJldl9wbGFubmVyX3NodXRkb3duID0gTlVMTDsKKworLyogT3RoZXIgZ2xv YmFsIHZhcmlhYmVzICovCitzdGF0aWMgaW50CXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gLTE7CisK Ky8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICovCitzdGF0aWMgdm9pZCBwZ3BhX2dldF9yZWxhdGlv bl9pbmZvKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkgICBPaWQgcmVsYXRpb25PYmplY3RJ ZCwKKwkJCQkJCQkJICAgYm9vbCBpbmhwYXJlbnQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJl bCk7CitzdGF0aWMgdm9pZCBwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJ CQkJCQkJICAgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRl cnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkgICBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QpOworc3RhdGlj IHZvaWQgcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJ CQkJCSBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAor CQkJCQkJCQkgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxh bm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJICAg Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rp b24sCisJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5u ZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkg IGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyB2 b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3As CisJCQkJCQkJCQkJCSAgY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9z dGF0ZSAqcGpzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2 aWNlKEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAor CQkJCQkJCQkJCQkJY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRl ICpwanMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9w dEluZm8gKnJlbCwKKwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMs CisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdw YV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxf aW5kZXhlcyk7CitzdGF0aWMgdWludDY0IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2 aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpOworc3RhdGljIGJvb2wgcGdwYV9qb2lu X29yZGVyX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJ CQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSBwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeSk7CitzdGF0aWMgYm9vbCBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihp bnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRp ZmllciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJ CQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfb3BhcXVlX2pv aW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJ CQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRy eSAqZW50cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworCitzdGF0aWMg TGlzdCAqcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3Zl ICp0cm92ZSwKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJ CQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICBwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3Bh X3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywKKwkJCQkJCQkJCQlQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQg cGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJ CQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CisKKy8qCisgKiBJbnN0YWxsIHBsYW5uZXItcmVsYXRl ZCBob29rcy4KKyAqLwordm9pZAorcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCkKK3sK KwlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IEdldFBsYW5uZXJFeHRlbnNpb25JZCgicGdfcGxhbl9h ZHZpY2UiKTsKKwlwcmV2X2dldF9yZWxhdGlvbl9pbmZvID0gZ2V0X3JlbGF0aW9uX2luZm9faG9v azsKKwlnZXRfcmVsYXRpb25faW5mb19ob29rID0gcGdwYV9nZXRfcmVsYXRpb25faW5mbzsKKwlw cmV2X2pvaW5yZWxfc2V0dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJam9pbnJlbF9zZXR1cF9o b29rID0gcGdwYV9qb2lucmVsX3NldHVwOworCXByZXZfam9pbl9wYXRoX3NldHVwID0gam9pbl9w YXRoX3NldHVwX2hvb2s7CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5fcGF0aF9z ZXR1cDsKKwlwcmV2X3BsYW5uZXJfc2V0dXAgPSBwbGFubmVyX3NldHVwX2hvb2s7CisJcGxhbm5l cl9zZXR1cF9ob29rID0gcGdwYV9wbGFubmVyX3NldHVwOworCXByZXZfcGxhbm5lcl9zaHV0ZG93 biA9IHBsYW5uZXJfc2h1dGRvd25faG9vazsKKwlwbGFubmVyX3NodXRkb3duX2hvb2sgPSBwZ3Bh X3BsYW5uZXJfc2h1dGRvd247Cit9CisKKy8qCisgKiBIb29rIGZ1bmN0aW9uIGZvciBnZXRfcmVs YXRpb25faW5mbygpLgorICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmljZSBhdCB0aGlzIG9w aW50LCBhbmQgd2UgYWxzbyB1c2VlIHRoaXMgYXMgYW4KKyAqIG9wcG9ydHVuaXR5IHRvIGRvIHJh bmdlLXRhYmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4gYXNzZXJ0LWVuYWJsZWQKKyAq IGJ1aWxkcy4KKyAqCisgKiBYWFg6IFdlIGN1cnJlbnRseSBlbWl0IHVzZWxlc3MgYWR2aWNlIGxp a2UgTk9fR0FUSEVSKCIqUkVTVUxUKiIpIGZvciB0cml2aWFsCisgKiBxdWVyaWVzLiBUaGUgYWR2 aWNlIGlzIHVzZWxlc3MgYmVjYXVzZSBnZXRfcmVsYXRpb25faW5mbyBpc24ndCBjYWxsZWQgZm9y CisgKiBub24tcmVsYXRpb24gUlRFcy4gV2Ugc2hvdWxkIGVpdGhlciBzdXBwcmVzcyB0aGUgYWR2 aWNlIGluIHN1Y2ggY2FzZXMsIG9yCisgKiBhZGQgYSBob29rIHRoYXQgY2FuIGFwcGx5IGl0Lgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9v dCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsCisJCQkJCSAgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJ bmZvICpyZWwpCit7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisKKwkvKiBGZXRjaCBvdXIg cHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9 IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVu c2lvbl9pZCk7CisKKwkvKiBTYXZlIGRldGFpbHMgbmVlZGVkIGZvciByYW5nZSB0YWJsZSBpZGVu dGlmaWVyIGNyb3NzLWNoZWNraW5nLiAqLworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9j aGVja2VyX3NhdmUocHBzLCByb290LCByZWwpOworCisJLyogSWYgcXVlcnkgYWR2aWNlIHdhcyBw cm92aWRlZCwgc2VhcmNoIGZvciByZWxldmFudCBlbnRyaWVzLiAqLworCWlmIChwcHMgIT0gTlVM TCAmJiBwcHMtPnRyb3ZlICE9IE5VTEwpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgcmlkOworCQlw Z3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3NjYW47CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1 bHRfcmVsOworCisJCS8qIFNlYXJjaCBmb3Igc2NhbiBhZHZpY2UgYW5kIGdlbmVyYWwgcmVsIGFk dmljZS4gKi8KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVs aWQsICZyaWQpOworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xP T0tVUF9TQ0FOLCAxLCAmcmlkLAorCQkJCQkJICAmdHJlc3VsdF9zY2FuKTsKKwkJcGdwYV90cm92 ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLCAxLCAmcmlkLAorCQkJ CQkJICAmdHJlc3VsdF9yZWwpOworCisJCS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3Vu ZCwgYXBwbHkgdGhlbS4gKi8KKwkJaWYgKHRyZXN1bHRfc2Nhbi5pbmRleGVzICE9IE5VTEwgfHwg dHJlc3VsdF9yZWwuaW5kZXhlcyAhPSBOVUxMKQorCQkJcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5f YWR2aWNlKHJlbCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywKKwkJCQkJCQkJ CQkgICB0cmVzdWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5lbnRy aWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCX0KKworCS8qIFBhc3Mg Y2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2dldF9yZWxhdGlvbl9pbmZvKQor CQkoKnByZXZfZ2V0X3JlbGF0aW9uX2luZm8pIChyb290LCByZWxhdGlvbk9iamVjdElkLCBpbmhw YXJlbnQsIHJlbCk7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0YWluaW5nIHRv IGEgcHJvcG9zZWQgam9pbi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dl dF9qb2luX3N0YXRlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJ CQlSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7CisJcGdwYV9w bGFubmVyX3N0YXRlICpwcHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9vbAkJbmV3X3Bq cyA9IGZhbHNlOworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3Bh X3BsYW5uZXJfc2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3Rh dGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgPT0gTlVMTCB8 fCBwcHMtPnRyb3ZlID09IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGllcyB0byB0aGlz IHF1ZXJ5LCBoZW5jZSBub25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJLyoKKwkgKiBTZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgYSBw Z3BhX2pvaW5fc3RhdGUgd2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdl IG5lZWQgdG8gdHJ5IHRvIGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICogdGhlbiB0aGVy ZSBhcmUgdHdvIGNhc2VzOiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFyZSB1bmNoYW5n ZWQsCisJICogd2UgY2FuIHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBoYXZlIGNoYW5n ZWQsIHdlIG5lZWQgdG8gcmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0 IGNhbiBzdGlsbCBza2lwIHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0gR2V0UmVsT3B0 SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAo cGpzICE9IE5VTEwpCisJeworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMt PnJlbF9pbmRleGVzID09IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIG5vIHBv dGVudGlhbGx5IHJlbGV2YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRo aXMgcGdwYV9qb2luX3N0YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0 ZWxscworCQkJICogdXMgbm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZp Y2UsIGJlY2F1c2Ugd2UKKwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICovCisJCQlyZXR1 cm4gTlVMTDsKKwkJfQorCisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVsICYmIHBqcy0+ aW5uZXJyZWwgPT0gaW5uZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNv IGp1c3QgcmV0dXJuLiAqLworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhp bmcgZGlmZmVyZW50IHVuZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9CisJfQorCisJ LyoKKwkgKiBJZiB0aGVyZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxs b2NhdGUgb25lLiBUcm92ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9J TiBSVEVzLCBzbyB0aGUgYXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdlciB0aGFuIG5l ZWRlZC4gSXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBh Y2N1cmF0ZSBjb3VudCBoZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7CisJCWludAkJ CXBlc3NpbWlzdGljX2NvdW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisK KwkJcGpzID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpzLT5yaWRzID0g cGFsbG9jX2FycmF5KHBncGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQpOworCQluZXdf cGpzID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5l dyBwZ3BhX2pvaW5fc3RhdGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZp Z3VyaW5nIGZvciBhIG5ldyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJh eQorCSAqIHNpemUgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZSBleGlzdGlu ZyBvbmUuCisJICovCisJcGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+aW5uZXJyZWwg PSBpbm5lcnJlbDsKKwlwanMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJzX2J5X3JlbGlkcyhyb290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMpOworCXBqcy0+ aW5uZXJfY291bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3Qs IGlubmVycmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9j b3VudCk7CisKKwkvKgorCSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUs IHNlYXJjaCBvdXIgdHJvdmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVudHJpZXMuIFRo ZSB0cm92ZSBsb29rdXAgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IKKwkgKiBldmVy eSBvdXRlcnJlbC9pbm5lcnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXBl YXQgdGhhdAorCSAqIHdvcmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3BqcykKKwl7CisJ CXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVudHJpZXMuICov CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4s CisJCQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBw anMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVzdWx0LmVudHJp ZXM7CisJCXBqcy0+am9pbl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIEZpbmQg cmVsIGVudHJpZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJP VkVfTE9PS1VQX1JFTCwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291 bnQsCisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9lbnRyaWVzID0g dHJlc3VsdC5lbnRyaWVzOworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOwor CisJCS8qIE5vdyB0aGF0IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBz YXZlIGEgcG9pbnRlci4gKi8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWws IHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBu byByZWxldmFudCBhZHZpY2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMKKwkJICogcGdw YV9qb2luX3N0YXRlIHdpbGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNo ZQorCQkgKiBlbnRyeSwgc28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2FtZSBqb2lucmVs IHF1aWNrbHkgcmV0dXJuCisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5qb2luX2luZGV4 ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlyZXR1cm4gcGpzOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2 aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gYW55IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRo aXMgam9pbi4KKyAqCisgKiBBbHRob3VnaCB3ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBp bm5lcnJlbCBoZXJlLCB0aG9zZSBhcmUganVzdAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVk IHRvIHByb21wdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRu J3QgcmVhbGx5IGluZmx1ZW5jZSBvdXIgY2hvaWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5Lgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJ bmZvICppbm5lcnJlbCwKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVz dHJpY3RsaXN0KQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1i ZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIg cHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFf Z2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8q IElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBh cHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5VTEwpCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2lu cmVsX2FkdmljZSgmam9pbnJlbC0+cGdzX21hc2ssCisJCQkJCQkJCQkJICByb290LT5wbGFuX25h bWUsCisJCQkJCQkJCQkJICBwanMpOworCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2su ICovCisJaWYgKHByZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5yZWxfc2V0dXApIChy b290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJICAgc2ppbmZvLCByZXN0 cmljdGxpc3QpOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQg aXMgcmVsZXZhbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgorICogaW1wbGVtZW50aW5n IHRoaXMgcGFydGljdWxhciBqb2luLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2luX3BhdGhf c2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSBSZWxP cHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSBKb2luVHlwZSBq b2ludHlwZSwgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQoreworCXBncGFfam9pbl9zdGF0ZSAq cGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01V TFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhp cyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJlbCwgb3V0 ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmljZSwgY2Fs bCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5VTEwpCisJ CXBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKGpvaW50eXBlLAorCQkJCQkJCQkJ CQkmZXh0cmEtPnBnc19tYXNrLAorCQkJCQkJCQkJCQlyb290LT5wbGFuX25hbWUsCisJCQkJCQkJ CQkJCXBqcyk7CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJl dl9qb2luX3BhdGhfc2V0dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChyb290LCBqb2lu cmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0cmEpOworfQor CisvKgorICogUHJlcGFyZSBhZHZpY2UgZm9yIHVzZSBieSBhIHF1ZXJ5LgorICovCitzdGF0aWMg dm9pZAorcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJz ZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rp b24sIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCXBn cGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCWNoYXIJICAgKmVycm9yOworCWJvb2wJCW5lZWRzX3Bw cyA9IGZhbHNlOworCisJLyoKKwkgKiBJZiBhbnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgYnVpbGQg YSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVzZSBkdXJpbmcKKwkgKiBwbGFubmluZy4KKwkgKi8KKwlp ZiAocGdfcGxhbl9hZHZpY2VfYWR2aWNlICE9IE5VTEwgJiYgcGdfcGxhbl9hZHZpY2VfYWR2aWNl WzBdICE9ICdcMCcpCisJeworCQlMaXN0CSAgICphZHZpY2VfaXRlbXM7CisKKwkJLyoKKwkJICog UGFyc2luZyBzaG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3QgaGF2ZSBwcmV2aW91 c2x5IHBhcnNlZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2No ZWNrX2hvb2ssIGJ1dCBpZiBpdCBkb2VzLAorCQkgKiBlbWl0IGEgd2FybmluZy4KKwkJICovCisJ CWFkdmljZV9pdGVtcyA9IHBncGFfcGFyc2UocGdfcGxhbl9hZHZpY2VfYWR2aWNlLCAmZXJyb3Ip OworCQlpZiAoZXJyb3IpCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgcGFyc2UgYWR2aWNl OiAlcyIsIGVycm9yKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFkdmlj ZSBzdHJpbmcgd2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5vCisJCSAqIGFjdHVhbCBhZHZp Y2UsIGUuZy4gaXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8KKwkJaWYgKGFkdmljZV9pdGVt cyAhPSBOSUwpCisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90cm92ZShhZHZpY2VfaXRlbXMp OworCQkJbmVlZHNfcHBzID0gdHJ1ZTsKKwkJfQorCX0KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKworCS8qCisJICogSWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYWx3YXlzIGJ1aWxkIGEg cHJpdmF0ZSBzdGF0ZSBvYmplY3QgZm9yCisJICogY3Jvc3MtY2hlY2tzLgorCSAqLworCW5lZWRz X3BwcyA9IHRydWU7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgYW5kIHN0b3JlIHByaXZhdGUg c3RhdGUsIGlmIHJlcXVpcmVkLiAqLworCWlmIChuZWVkc19wcHMpCisJeworCQlwcHMgPSBwYWxs b2MwX29iamVjdChwZ3BhX3BsYW5uZXJfc3RhdGUpOworCQlwcHMtPmV4cGxhaW5fc3RhdGUgPSBl czsKKwkJcHBzLT50cm92ZSA9IHRyb3ZlOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJ cHBzLT5yaV9jaGVja19oYXNoID0KKwkJCXBncGFfcmlfY2hlY2tfY3JlYXRlKEN1cnJlbnRNZW1v cnlDb250ZXh0LCAxMDI0LCBOVUxMKTsKKyNlbmRpZgorCQlTZXRQbGFubmVyR2xvYmFsRXh0ZW5z aW9uU3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQsIHBwcyk7CisJfQorfQorCisvKgor ICogQ2Fycnkgb3V0IHdoYXRldmVyIHdvcmsgd2Ugd2FudCB0byBkbyBhZnRlciBwbGFubmluZyBp cyBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFu bmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7 CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCUV4cGxhaW5TdGF0ZSAqZXMgPSBOVUxMOwor CXBncGFfcGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXIgPSB7MH07CS8qIHBsYWNhdGUgY29tcGls ZXIgKi8KKwlib29sCQlkb19hZHZpY2VfZmVlZGJhY2s7CisJYm9vbAkJZG9fY29sbGVjdF9hZHZp Y2U7CisJTGlzdAkgICAqcGdwYV9pdGVtcyA9IE5JTDsKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzID0gTlVMTDsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAg YnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVu c2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzICE9IE5VTEwp CisJeworCQl0cm92ZSA9IHBwcy0+dHJvdmU7CisJCWVzID0gcHBzLT5leHBsYWluX3N0YXRlOwor CX0KKworCS8qIElmIGF0IGxlYXN0IG9uZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCwgZ2VuZXJhdGUg YWR2aWNlLiAqLworCWRvX2NvbGxlY3RfYWR2aWNlID0gKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2Nv bGxlY3Rpb25fbGltaXQgPiAwIHx8CisJCQkJCQkgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQgPiAwKTsKKworCS8qIElmIHdlIGFwcGxpZWQgYWR2aWNlLCBnZW5lcmF0ZSBm ZWVkYmFjay4gKi8KKwlkb19hZHZpY2VfZmVlZGJhY2sgPSAodHJvdmUgIT0gTlVMTCAmJiBlcyAh PSBOVUxMKTsKKworCS8qIElmIGVpdGhlciBvZiB0aGUgYWJvdmUgYXBwbHksIGFuYWx5emUgdGhl IHJlc3VsdGluZyBQbGFubmVkU3RtdC4gKi8KKwlpZiAoZG9fY29sbGVjdF9hZHZpY2UgfHwgZG9f YWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJcGdwYV9wbGFuX3dhbGtlcigmd2Fsa2VyLCBwc3RtdCk7 CisJCXJ0X2lkZW50aWZpZXJzID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRf c3RtdChwc3RtdCk7CisJfQorCisJLyoKKwkgKiBJZiBhZHZpY2UgY29sbGVjdGlvbiBpcyBlbmFi bGVkLCBwdXQgdGhlIGFkdmljZSBpbiBzdHJpbmcgZm9ybSBhbmQgc2VuZAorCSAqIGl0IHRvIHRo ZSBjb2xsZWN0b3IuCisJICovCisJaWYgKGRvX2NvbGxlY3RfYWR2aWNlKQorCXsKKwkJY2hhcgkg ICAqYWR2aWNlX3N0cmluZzsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCS8qIEdlbmVyYXRl IGEgdGV4dHVhbCBhZHZpY2Ugc3RyaW5nLiAqLworCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJ cGdwYV9vdXRwdXRfYWR2aWNlKCZidWYsICZ3YWxrZXIsIHJ0X2lkZW50aWZpZXJzKTsKKwkJYWR2 aWNlX3N0cmluZyA9IGJ1Zi5kYXRhOworCisJCS8qIElmIHRoZSBhZHZpY2Ugc3RyaW5nIGlzIGVt cHR5LCBkb24ndCBib3RoZXIgY29sbGVjdGluZyBpdC4gKi8KKwkJaWYgKGFkdmljZV9zdHJpbmdb MF0gIT0gJ1wwJykKKwkJCXBncGFfY29sbGVjdF9hZHZpY2UocHN0bXQtPnF1ZXJ5SWQsIHF1ZXJ5 X3N0cmluZywgYWR2aWNlX3N0cmluZyk7CisKKwkJLyoKKwkJICogSWYgd2UndmUgZ29uZSB0byB0 aGUgdHJvdWJsZSBvZiBnZW5lcmF0aW5nIGFuIGFkdmljZSBzdHJpbmcsIGFuZCBpZgorCQkgKiB3 ZSdyZSBpbnNpZGUgRVhQTEFJTiwgc2F2ZSB0aGUgc3RyaW5nIHNvIHdlIGRvbid0IG5lZWQgdG8K KwkJICogcmVnZW5lcmF0ZSBpdC4KKwkJICovCisJCWlmIChlcyAhPSBOVUxMKQorCQkJcGdwYV9p dGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywKKwkJCQkJCQkJIG1ha2VEZWZFbGVtKCJhZHZpY2Vf c3RyaW5nIiwKKwkJCQkJCQkJCQkJIChOb2RlICopIG1ha2VTdHJpbmcoYWR2aWNlX3N0cmluZyks CisJCQkJCQkJCQkJCSAtMSkpOworCX0KKworCS8qCisJICogSWYgd2UgYXJlIHBsYW5uaW5nIHdp dGhpbiBFWFBMQUlOLCBtYWtlIGFycmFuZ2VtZW50cyB0byBhbGxvdyBFWFBMQUlOCisJICogdG8g dGVsbCB0aGUgdXNlciB3aGF0IGhhcyBoYXBwZW5lZCB3aXRoIHRoZSBwcm92aWRlZCBhZHZpY2Uu CisJICoKKwkgKiBOQjogSWYgRVhQTEFJTiBpcyB1c2VkIG9uIGEgcHJlcGFyZWQgaXMgYSBwcmVw YXJlZCBzdGF0ZW1lbnQsIHBsYW5uaW5nCisJICogd2lsbCBoYXZlIGFscmVhZHkgaGFwcGVuZWQg aGFwcGVuZWQgd2l0aG91dCByZWNvcmRpbmcgdGhlc2UgZGV0YWlscy4gV2UKKwkgKiBjb3VsZCBj b25zaWRlciBhZGRpbmcgYSBHVUMgdG8gY2F0ZXIgdG8gdGhhdCBzY2VuYXJpbzsgb3Igd2UgY291 bGQgZG8KKwkgKiB0aGlzIHdvcmsgYWxsIHRoZSB0aW1lLCBidXQgdGhhdCBzZWVtcyBsaWtlIHRv byBtdWNoIG92ZXJoZWFkLgorCSAqLworCWlmIChkb19hZHZpY2VfZmVlZGJhY2spCisJeworCQlM aXN0CSAgICpmZWVkYmFjayA9IE5JTDsKKworCQkvKgorCQkgKiBJbmplY3QgYSBOb2RlLXRyZWUg cmVwcmVzZW50YXRpb24gb2YgYWxsIHRoZSB0cm92ZS1lbnRyeSBmbGFncyBpbnRvCisJCSAqIHRo ZSBQbGFubmVkU3RtdC4KKwkJICovCisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9m ZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9U Uk9WRV9MT09LVVBfU0NBTiwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsK KwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJ CQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJ CQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVkYmFjayA9IHBncGFfcGxh bm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJ CQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1JFTCwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJz LCAmd2Fsa2VyKTsKKworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0ZW1zLCBtYWtlRGVm RWxlbSgiZmVlZGJhY2siLAorCQkJCQkJCQkJCQkJCSAoTm9kZSAqKSBmZWVkYmFjaywKKwkJCQkJ CQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKiBQdXNoIHdoYXRldmVyIGRhdGEgd2UncmUgc2F2aW5n IGludG8gdGhlIFBsYW5uZWRTdG10LiAqLworCWlmIChwZ3BhX2l0ZW1zICE9IE5JTCkKKwkJcHN0 bXQtPmV4dGVuc2lvbl9zdGF0ZSA9CisJCQlsYXBwZW5kKHBzdG10LT5leHRlbnNpb25fc3RhdGUs CisJCQkJCW1ha2VEZWZFbGVtKCJwZ19wbGFuX2FkdmljZSIsIChOb2RlICopIHBncGFfaXRlbXMs IC0xKSk7CisKKwkvKgorCSAqIElmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQsIGNyb3NzLWNoZWNr IHRoZSBnZW5lcmF0ZWQgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAo cHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwcHMsIHBzdG10KTsKK30K KworLyoKKyAqIEVuZm9yY2Ugb3ZlcmFsbCByZXN0cmljdGlvbnMgb24gYSBqb2luIHJlbGF0aW9u IHRoYXQgYXBwbHkgdW5pZm9ybWx5CisgKiByZWdhcmRsZXNzIG9mIHRoZSBjaG9pY2Ugb2YgaW5u ZXIgYW5kIG91dGVyIHJlbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9q b2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJ CQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJaW50CQkJZmxh Z3M7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDY0CQlnYXRoZXJfbWFz ayA9IDA7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1h cHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlib29sCQlwYXJ0aXRpb253aXNlX2Nv bmZsaWN0ID0gZmFsc2U7CisJaW50CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsKKwlCaXRt YXBzZXQgICpwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1hcHNldCAg KnBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9IE5VTEw7CisKKwkvKiBJdGVyYXRlIG92ZXIgYWxs IHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKwkJYm9v bAkJZnVsbF9tYXRjaCA9IGZhbHNlOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNrID0gMDsKKwkJ aW50CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsJLyogPjAgeWVzLCA8MCBubyAqLwor CisJCS8qCisJCSAqIEZvciBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSwgaWYgdGhlIHNwZWNpZmll ZCByZWxhdGlvbnMgZXhhY3RseQorCQkgKiBtYXRjaCB0aGlzIGpvaW5yZWwsIGRvIHdoYXRldmVy IHRoZSBhZHZpY2Ugc2F5czsgb3RoZXJ3aXNlLCBkb24ndAorCQkgKiBhbGxvdyBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIGF0IHRoaXMgbGV2ZWwuIEZvciBOT19HQVRIRVIsIHRoZXJlCisJCSAqIG11 c3QgYmUgYSBzaW5nbGUgdGFyZ2V0IHJlbGF0aW9uIHdoaWNoIG11c3QgYmUgaW5jbHVkZWQgaW4g dGhpcworCQkgKiBqb2lucmVsLCBzbyBqdXN0IGRvbid0IGFsbG93IEdhdGhlciBvciBHYXRoZXIg TWVyZ2UgaGVyZSwgZnVsbAorCQkgKiBzdG9wLgorCQkgKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0g UEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlpbnQJCQl0b3RhbF9jb3VudDsKKworCQkJdG90YWxfY291bnQgPSBwanMtPm91dGVyX2NvdW50 ICsgcGpzLT5pbm5lcl9jb3VudDsKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KHRvdGFsX2NvdW50LCBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQllbnRyeS0+dGFyZ2V0KTsK KwkJCUFzc2VydChpdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCisJCQlpZiAoaXRtID09IFBH UEFfSVRNX0VRVUFMKQorCQkJeworCQkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQkJCWlmIChlbnRy eS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJCW15X3BhcnRpdGlvbndpc2Vf b3V0Y29tZSA9IDE7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIp CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCQllbHNlIGlmIChlbnRyeS0+ dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1Nf R0FUSEVSX01FUkdFOworCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2 aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJ eworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlfZ2F0aGVyX21h c2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZSBpZiAoZW50cnkt PnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJCQkJCSBlbnRyeS0+dGFnID09IFBHUEFfVEFH X0dBVEhFUl9NRVJHRSkKKwkJCQl7CisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0x OworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkJCX0K KwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwK KwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIElmIHdl IHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYg dGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUs IGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlh bCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAo Z2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQln YXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsK KwkJCWlmIChmdWxsX21hdGNoKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1zX2FkZF9tZW1i ZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21h dGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisKKwkJ LyoKKwkJICogTGlrZXdpc2UsIGlmIHdlIHNldCBteV9wYXJ0aXRpb253aXNlX291dGNvbWUgdXAg YWJvdmUsIHRoZW4gd2UgKDEpCisJCSAqIG1ha2UgYSBub3RlIGlmIHRoZSBhZHZpY2UgY29uZmxp Y3RlZCwgKDIpIHJlbWVtYmVyIHdoYXQgdGhlIGRlc2lyZWQKKwkJICogb3V0Y29tZSB3YXMsIGFu ZCAoMykgcmVtZW1iZXIgd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbAorCQkgKiBt YXRjaC4KKwkJICovCisJCWlmIChteV9wYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCkKKwkJewor CQkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmCisJCQkJcGFydGl0aW9ud2lzZV9v dXRjb21lICE9IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSkKKwkJCQlwYXJ0aXRpb253aXNlX2Nv bmZsaWN0ID0gdHJ1ZTsKKwkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IG15X3BhcnRpdGlvbndp c2Vfb3V0Y29tZTsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCXBhcnRpdGlvbndpc2VfZnVsbF9t YXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgaSk7 CisJCQllbHNlCisJCQkJcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0KKwkJCQkJYm1zX2Fk ZF9tZW1iZXIocGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCX0KKworCS8q CisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlh bGx5IG1hdGNoZWQsIGFuZCBpZgorCSAqIHRoZSBzZXQgb2YgdGFyZ2V0cyBleGFjdGx5IG1hdGNo ZWQgdGhpcyByZWxhdGlvbiwgZnVsbHkgbWF0Y2hlZC4gSWYKKwkgKiB0aGVyZSB3YXMgYSBjb25m bGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFf VEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BB X1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMs IGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9G VUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGdhdGhlcl9mdWxs X21hdGNoLCBmbGFncyk7CisKKwkvKiBMaWtld2lzZSBmb3IgcGFydGl0aW9ud2lzZSBhZHZpY2Uu ICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKHBhcnRpdGlvbndpc2Vf Y29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9z ZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBm bGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHBqcy0+cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgZmxhZ3MpOwor CisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24s IGVuZm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGlj dCkKKwl7CisJCSpwZ3NfbWFza19wICY9CisJCQl+KFBHU19HQVRIRVIgfCBQR1NfR0FUSEVSX01F UkdFIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwpOworCQkqcGdzX21hc2tfcCB8PSBnYXRoZXJf bWFzazsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIHBhcnRp dGlvbndpc2Ugc3BlY2lmaWNhdGlvbiwgZW5mb3JjZS4KKwkgKgorCSAqIFRvIGZvcmNlIGEgcGFy dGl0aW9ud2lzZSBqb2luLCB3ZSBkaXNhYmxlIGFsbCB0aGUgb3JkaW5hcnkgbWVhbnMgb2YKKwkg KiBwZXJmb3JtaW5nIGEgam9pbiwgYW5kIGluc3RlYWQgb25seSBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIHBhdGhzIGhlcmUuCisJICogVG8gcHJldmVudCBvbmUsIHdlIGp1c3QgZGlzYWJsZSBBcHBl bmQgYW5kIE1lcmdlQXBwZW5kLiAgTm90ZSB0aGF0IHdlCisJICogbXVzdCBub3QgdW5zZXQgUEdT X0NPTlNJREVSX1BBUlRJVElPTldJU0UgZXZlbiB3aGVuIHdlIGRvbid0IHdhbnQgYQorCSAqIHBh cnRpdGlvbndpc2Ugam9pbiBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQgb25lIGF0IGEgaGln aGVyIGxldmVsCisJICogdGhhdCBpcyBjb25zdHJ1Y3RpbmcgdXNpbmcgcGF0aHMgZnJvbSB0aGlz IGxldmVsLgorCSAqLworCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCAmJiAhcGFydGl0 aW9ud2lzZV9jb25mbGljdCkKKwl7CisJCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgPiAwKQor CQkJKnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8CisJCQkJUEdT X0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfCBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRTsK KwkJZWxzZQorCQkJKnBnc19tYXNrX3AgJj0gfihQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVO RCk7CisJfQorfQorCisvKgorICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIGpvaW4gb3Jk ZXIgb3Igam9pbiBtZXRob2QuCisgKgorICogTm90ZSB0aGF0LCBhbHRob3VnaCBpdCBpcyBwb3Nz aWJsZSB0byB2aWV3IFBBUlRJVElPTldJU0UgYWR2aWNlIGFzCisgKiBjb250cm9sbGluZyB0aGUg am9pbiBtZXRob2QsIHdlIGNhbid0IGVuZm9yY2UgaXQgaGVyZSwgYmVjYXVzZSB0aGUgY29kZQor ICogcGF0aCB3aGVyZSB0aGlzIGV4ZWN1dGVzIG9ubHkgZGVhbHMgd2l0aCBqb2luIHBhdGhzIHRo YXQgYXJlIGJ1aWx0IGRpcmVjdGx5CisgKiBmcm9tIGEgc2luZ2xlIG91dGVyIHBhdGggYW5kIGEg c2luZ2xlIGlubmVyIHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlf am9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAor CQkJCQkJCQkJY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMp Cit7CisJaW50CQkJaSA9IC0xOworCUJpdG1hcHNldCAgKmpvX3Blcm1pdF9pbmRleGVzID0gTlVM TDsKKwlCaXRtYXBzZXQgICpqb19kZW55X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpt X2luZGV4ZXMgPSBOVUxMOworCWJvb2wJCWptX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDMyCQlq b2luX21hc2sgPSAwOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJseS1yZWxldmFudCBh ZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+am9pbl9pbmRleGVz LCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+am9pbl9l bnRyaWVzW2ldOworCQl1aW50MzIJCW15X2pvaW5fbWFzazsKKworCQkvKiBIYW5kbGUgam9pbiBv cmRlciBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIp CisJCXsKKwkJCWlmIChwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291 bnQsCisJCQkJCQkJCQkJCSBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcGpzLT5yaWRz LAorCQkJCQkJCQkJCQkgZW50cnkpKQorCQkJCWpvX3Blcm1pdF9pbmRleGVzID0gYm1zX2FkZF9t ZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJZWxzZQorCQkJCWpvX2RlbnlfaW5kZXhl cyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qIEhhbmRsZSBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwkJbXlfam9pbl9tYXNr ID0gcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKGVudHJ5LT50YWcpOwor CQlpZiAobXlfam9pbl9tYXNrICE9IDApCisJCXsKKwkJCWJvb2wJCXBlcm1pdDsKKwkJCWJvb2wJ CXJlc3RyaWN0X21ldGhvZDsKKworCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfRk9SRUlH Tl9KT0lOKQorCQkJCXBlcm1pdCA9IHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKHBqcy0+ b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJ CQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJCQkJCQkJCQkJ ICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQllbHNlCisJCQkJcGVybWl0ID0gcGdwYV9qb2luX21l dGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMt PmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCQkg ICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJCWlmICghcGVy bWl0KQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhl cywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJCQl7CisJCQkJam9fcGVybWl0 X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJam1f aW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCQlpZiAo am9pbl9tYXNrICE9IDAgJiYgam9pbl9tYXNrICE9IG15X2pvaW5fbWFzaykKKwkJCQkJam1fY29u ZmxpY3QgPSB0cnVlOworCQkJCWpvaW5fbWFzayA9IG15X2pvaW5fbWFzazsKKwkJCX0KKwkJCWNv bnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlLiAq LworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUgfHwKKwkJCWVu dHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSkKKwkJeworCQkJYm9vbAkJ YWR2aWNlX3VuaXF1ZTsKKwkJCWJvb2wJCWp0X3VuaXF1ZTsKKwkJCWJvb2wJCWp0X25vbl91bmlx dWU7CisJCQlib29sCQlyZXN0cmljdF9tZXRob2Q7CisKKwkJCS8qIEFkdmljZSB3YW50cyB0byB1 bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQlhZHZpY2VfdW5pcXVlID0g KGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFKTsKKworCQkJLyogUGxhbm5l ciBpcyB0cnlpbmcgdG8gdW5pcXVlLWlmeSBhbmQgdXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJ anRfdW5pcXVlID0gKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lOTkVSIHx8CisJCQkJCQkgam9p bnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIpOworCisJCQkvKiBQbGFubmVyIGlzIHRyeWluZyBh IHNlbWktam9pbiwgd2l0aG91dCB1bmlxdWUtaWZ5aW5nPyAqLworCQkJanRfbm9uX3VuaXF1ZSA9 IChqb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwKKwkJCQkJCQkgam9pbnR5cGUgPT0gSk9JTl9SSUdI VF9TRU1JKTsKKworCQkJLyoKKwkJCSAqIFRoZXNlIGFkdmljZSB0YWdzIGJlaGF2ZSB2ZXJ5IG11 Y2ggbGlrZSBqb2luIG1ldGhvZCBhZHZpY2UsIGluCisJCQkgKiB0aGF0IHRoZXkgd2FudCB0aGUg aW5uZXIgc2lkZSBvZiB0aGUgc2VtaWpvaW4gdG8gbWF0Y2ggdGhlCisJCQkgKiByZWxhdGlvbnMg bGlzdGVkIGluIHRoZSBhZHZpY2UuIEhlbmNlLCB3ZSB0ZXN0IHdoZXRoZXIgam9pbgorCQkJICog bWV0aG9kIGFkdmljZSB3b3VsZCBlbmZvcmNlIGEgam9pbiBvcmRlciByZXN0cmljdGlvbiBoZXJl LCBhbmQKKwkJCSAqIGRpc2FsbG93IHRoZSBqb2luIGlmIG5vdC4KKwkJCSAqCisJCQkgKiBYWFgu IFRoaW5rIGhhcmRlciBhYm91dCByaWdodCBzZW1pam9pbnMuCisJCQkgKi8KKwkJCWlmICghcGdw YV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ ICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJ CQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCkpCisJCQkJam9fZGVu eV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVsc2Ug aWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19h ZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCQlpZiAoIWp0X3VuaXF1ZSAmJiAh anRfbm9uX3VuaXF1ZSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgZG9lc24ndCBzZWVt IHRvIGJlIGEgc2VtaWpvaW4gdG8gd2hpY2ggU0pfVU5JUVVFCisJCQkJCSAqIG9yIFNKX05PTl9V TklRVUUgY2FuIGJlIGFwcGxpZWQuCisJCQkJCSAqLworCQkJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQ QV9URV9JTkFQUExJQ0FCTEU7CisJCQkJfQorCQkJCWVsc2UgaWYgKGFkdmljZV91bmlxdWUgIT0g anRfdW5pcXVlKQorCQkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55 X2luZGV4ZXMsIGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwl9CisKKwkvKgorCSAqIElm IHRoZSBhZHZpY2UgaW5kaWNhdGVzIGJvdGggdGhhdCB0aGlzIGpvaW4gb3JkZXIgaXMgcGVybWlz c2libGUgYW5kCisJICogYWxzbyB0aGF0IGl0IGlzbid0LCB0aGVuIG1hcmsgYWR2aWNlIHJlbGF0 ZWQgdG8gdGhlIGpvaW4gb3JkZXIgYXMKKwkgKiBjb25mbGljdGluZy4KKwkgKi8KKwlpZiAoam9f cGVybWl0X2luZGV4ZXMgIT0gTlVMTCAmJiBqb19kZW55X2luZGV4ZXMgIT0gTlVMTCkKKwl7CisJ CXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqb19wZXJtaXRfaW5kZXhl cywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdz KHBqcy0+am9pbl9lbnRyaWVzLCBqb19kZW55X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09O RkxJQ1RJTkcpOworCX0KKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9uZSBqb2luIG1ldGhvZCBz cGVjaWZpY2F0aW9uIGlzIHJlbGV2YW50IGhlcmUgYW5kIHRoZXkKKwkgKiBkaWZmZXIsIG1hcmsg dGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJaWYgKGptX2NvbmZsaWN0KQorCQlwZ3Bh X3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam1faW5kZXhlcywKKwkJCQkJCQkg UEdQQV9URV9DT05GTElDVElORyk7CisKKwkvKgorCSAqIElmIHdlIHdlcmUgYWR2aXNlZCB0byBk ZW55IHRoaXMgam9pbiBvcmRlciwgdGhlbiBkbyBzby4gSG93ZXZlciwgaWYgd2UKKwkgKiB3ZXJl IGFsc28gYWR2aXNlZCB0byBwZXJtaXQgaXQsIHRoZW4gZG8gbm90aGluZywgc2luY2UgdGhlIGFk dmljZQorCSAqIGNvbmZsaWN0cy4KKwkgKi8KKwlpZiAoam9fZGVueV9pbmRleGVzICE9IE5VTEwg JiYgam9fcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNrX3AgPSAwOworCisJLyoK KwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQgdG8gcmVzdHJpY3QgdGhlIGpvaW4gbWV0aG9kLCB0aGVu IGRvIHNvLiBIb3dldmVyLCBpZgorCSAqIHdlIGdvdCBjb25mbGljdGluZyBqb2luIG1ldGhvZCBh ZHZpY2Ugb3Igd2VyZSBhbHNvIGFkdmlzZWQgdG8gcmVqZWN0CisJICogdGhpcyBqb2luIG9yZGVy IGNvbXBsZXRlbHksIHRoZW4gaW5zdGVhZCBkbyBub3RoaW5nLgorCSAqLworCWlmIChqb2luX21h c2sgIT0gMCAmJiAham1fY29uZmxpY3QgJiYgam9fZGVueV9pbmRleGVzID09IE5VTEwpCisJCSpw Z3NfbWFza19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfCBqb2luX21hc2s7Cit9 CisKKy8qCisgKiBUcmFuc2xhdGUgYW4gYWR2aWNlIHRhZyBpbnRvIGEgcGF0aCBnZW5lcmF0aW9u IHN0cmF0ZWd5IG1hc2suCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGgg dGFnIHR5cGVzIHRoYXQgZG9uJ3QgcmVwcmVzZW50IGpvaW4KKyAqIHN0cmF0ZWdpZXMuIEluIHN1 Y2ggY2FzZXMsIHdlIGp1c3QgcmV0dXJuIDAsIHdoaWNoIGNhbid0IGJlIGNvbmZ1c2VkIHdpdGgK KyAqIGEgdmFsaWQgbWFzay4KKyAqLworc3RhdGljIHVpbnQ2NAorcGdwYV9qb2luX3N0cmF0ZWd5 X21hc2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZykKK3sKKwlzd2l0 Y2ggKHRhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIFBH U19GT1JFSUdOSk9JTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0 dXJuIFBHU19NRVJHRUpPSU5fUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRF UklBTElaRToKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCQljYXNlIFBH UEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9QTEFJTjsK KwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBQR1Nf TkVTVExPT1BfTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0la RToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUVNT0laRTsKKwkJY2FzZSBQR1BBX1RBR19IQVNI X0pPSU46CisJCQlyZXR1cm4gUEdTX0hBU0hKT0lOOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7 CisJfQorfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG9yZGVyIGFkdmlj ZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2pvaW5fb3Jk ZXJfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJ CSBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5 KQoreworCWJvb2wJCWxvb3AgPSB0cnVlOworCWJvb2wJCXN1Ymxpc3QgPSBmYWxzZTsKKwlpbnQJ CQlsZW5ndGg7CisJaW50CQkJb3V0ZXJfbGVuZ3RoOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnByZWZpeF90YXJnZXQ7 CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0 aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJ QUw7CisKKwkvKgorCSAqIEZpbmQgdGhlIGlubmVybW9zdCBzdWJsaXN0IHRoYXQgY29udGFpbnMg YWxsIGtleXM7IGlmIG5vIHN1Ymxpc3QgZG9lcywKKwkgKiB0aGVuIGNvbnRpbnVlIHByb2Nlc3Np bmcgd2l0aCB0aGUgdG9wbGV2ZWwgbGlzdC4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBpZiB0aGUg YWR2aWNlIHNheXMgSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgdGhlbiB3ZQorCSAqIHNo b3VsZCBldmFsdWF0ZSBqb2lucyB0aGF0IG9ubHkgaW52b2x2ZSB0MywgdDQsIGFuZC9vciB0NSBh Z2FpbnN0IHRoZQorCSAqICh0MyB0NCB0NSkgc3VibGlzdCwgYW5kIG90aGVycyBhZ2FpbnN0IHRo ZSBmdWxsIGxpc3QuCisJICoKKwkgKiBOb3RlIHRoYXQgKDEpIG91dGVybW9zdCBzdWJsaXN0IGlz IGFsd2F5cyBvcmRlcmVkIGFuZCAoMikgd2hlbmV2ZXIgd2UKKwkgKiB6b29tIGludG8gYW4gdW5v cmRlcmVkIHN1Ymxpc3QsIHdlIGluc3RhbnRseSBhY2NlcHQgdGhlIHByb3Bvc2VkIGpvaW4uCisJ ICogSWYgdGhlIGFkdmljZSBzYXlzIEpPSU5fT1JERVIodDEgdDIge3QzIHQ0IHQ1fSksIGFueSBh cHByb2FjaCB0bworCSAqIGpvaW5pbmcgdDMsIHQ0LCBhbmQvb3IgdDUgaXMgYWNjZXB0YWJsZS4K KwkgKi8KKwl3aGlsZSAobG9vcCkKKwl7CisJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFf VEFSR0VUX09SREVSRURfTElTVCk7CisKKwkJbG9vcCA9IGZhbHNlOworCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJewor CQkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJCWlmIChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBH UEFfVEFSR0VUX0lERU5USUZJRVIpCisJCQkJY29udGludWU7CisKKwkJCWl0bSA9IHBncGFfaWRl bnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJ CQkJCQlyaWRzLCBjaGlsZF90YXJnZXQpOworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCB8 fCBpdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUKQorCQkJeworCQkJCWlmIChjaGlsZF90 YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCQl7CisJCQkJCXRh cmdldCA9IGNoaWxkX3RhcmdldDsKKwkJCQkJc3VibGlzdCA9IHRydWU7CisJCQkJCWxvb3AgPSB0 cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQXNzZXJ0KGNo aWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QpOworCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFRyeSB0byBmaW5k IGEgcHJlZml4IG9mIHRoZSBzZWxlY3RlZCBqb2luIG9yZGVyIGxpc3QgdGhhdCBpcyBleGFjdGx5 CisJICogZXF1YWwgdG8gdGhlIG91dGVyIHNpZGUgb2YgdGhlIHByb3Bvc2VkIGpvaW4uCisJICov CisJbGVuZ3RoID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisJcHJlZml4X3Rhcmdl dCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJcHJlZml4X3RhcmdldC0+ dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJZm9yIChvdXRlcl9sZW5ndGggPSAx OyBvdXRlcl9sZW5ndGggPD0gbGVuZ3RoOyArK291dGVyX2xlbmd0aCkKKwl7CisJCXBncGFfaXRt X3R5cGUgaXRtOworCisJCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIGV2ZXJ5IGxvb3AgaXRl cmF0aW9uLiAqLworCQlpZiAocHJlZml4X3RhcmdldC0+Y2hpbGRyZW4gIT0gTlVMTCkKKwkJCWxp c3RfZnJlZShwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbik7CisJCXByZWZpeF90YXJnZXQtPmNoaWxk cmVuID0gbGlzdF9jb3B5X2hlYWQodGFyZ2V0LT5jaGlsZHJlbiwKKwkJCQkJCQkJCQkJCSBvdXRl cl9sZW5ndGgpOworCisJCS8qIFNlYXJjaCwgaG9waW5nIHRvIGZpbmQgYW4gZXhhY3QgbWF0Y2gu ICovCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50LCBy aWRzLCBwcmVmaXhfdGFyZ2V0KTsKKwkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJCWJy ZWFrOworCisJCS8qCisJCSAqIElmIHRoZSBwcmVmaXggb2YgdGhlIGpvaW4gb3JkZXIgbGlzdCB0 aGF0IHdlJ3JlIGNvbnNpZGVyaW5nCisJCSAqIGluY2x1ZGVzIHNvbWUgYnV0IG5vdCBhbGwgb2Yg dGhlIG91dGVyIHJlbHMsIHdlIGNhbiBtYWtlIHRoZSBwcmVmaXgKKwkJICogbG9uZ2VyIHRvIGZp bmQgYW4gZXhhY3QgbWF0Y2guIEJ1dCB0aGUgYWR2aWNlIGhhc24ndCBtZW50aW9uZWQKKwkJICog ZXZlcnl0aGluZyB0aGF0J3MgcGFydCBvZiBvdXIgb3V0ZXIgcmVsIHlldCwgYnV0IGhhcyBtZW50 aW9uZWQKKwkJICogdGhpbmdzIHRoYXQgYXJlIG5vdCwgdGhlbiB0aGlzIGpvaW4gZG9lc24ndCBt YXRjaCB0aGUgam9pbiBvcmRlcgorCQkgKiBsaXN0LgorCQkgKi8KKwkJaWYgKGl0bSAhPSBQR1BB X0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkg KiBJZiB0aGUgcHJldmlvdXMgbG9vcGVkIHN0b3BwZWQgYmVmb3JlIHRoZSBwcmVmaXhfdGFyZ2V0 IGluY2x1ZGVkIHRoZQorCSAqIGVudGlyZSBqb2luIG9yZGVyIGxpc3QsIHRoZW4gdGhlIG5leHQg bWVtYmVyIG9mIHRoZSBqb2luIG9yZGVyIGxpc3QKKwkgKiBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhl IGlubmVyIHNpZGUgb2YgdGhlIGpvaW4uCisJICoKKwkgKiBFeGFtcGxlOiBHaXZlbiBKT0lOX09S REVSKHQxIHQyICh0MyB0NCB0NSkpLCBpZiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUKKwkgKiBjdXJy ZW50IGpvaW4gaW5jbHVkZXMgb25seSB0MSwgdGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0IGJlIGV4 YWN0bHkgdDI7CisJICogaWYgdGhlIG91dGVyIHNpZGUgaW5jbHVkZXMgYm90aCB0MSBhbmQgdDIs IHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdAorCSAqIGluY2x1ZGUgZXhhY3RseSB0MywgdDQsIGFu ZCB0NS4KKwkgKi8KKwlpZiAob3V0ZXJfbGVuZ3RoIDwgbGVuZ3RoKQorCXsKKwkJcGdwYV9hZHZp Y2VfdGFyZ2V0ICppbm5lcl90YXJnZXQ7CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCWlubmVy X3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+Y2hpbGRyZW4sIG91dGVyX2xlbmd0aCk7CisKKwkJ aXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsIHJpZHMgKyBv dXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJaW5uZXJfdGFyZ2V0KTsKKworCQkvKgorCQkgKiBCZWZv cmUgcmV0dXJuaW5nLCBjb25zaWRlciB3aGV0aGVyIHdlIG5lZWQgdG8gbWFyayB0aGlzIGVudHJ5 IGFzCisJCSAqIGZ1bGx5IG1hdGNoZWQuIElmIHdlIGZvdW5kIGV2ZXJ5IGl0ZW0gYnV0IG9uZSBv biB0aGUgbGVmdGhhbmQgc2lkZQorCQkgKiBvZiB0aGUgam9pbiBhbmQgdGhlIGxhc3QgaXRlbSBv biB0aGUgcmlnaHRoYW5kIHNpZGUgb2YgdGhlIGpvaW4sCisJCSAqIHRoZW4gdGhlIGFuc3dlciBp cyB5ZXMuCisJCSAqLworCQlpZiAob3V0ZXJfbGVuZ3RoICsgMSA9PSBsZW5ndGggJiYgaXRtID09 IFBHUEFfSVRNX0VRVUFMKQorCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsK KworCQlyZXR1cm4gKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCk7CisJfQorCisJLyoKKwkgKiBJZiB3 ZSBnZXQgaGVyZSwgdGhlbiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgam9pbiBpbmNsdWRlcyB0aGUg ZW50aXJldHkKKwkgKiBvZiB0aGUgam9pbiBvcmRlciBsaXN0LiBJbiB0aGlzIGNhc2UsIHdlIGJl aGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcKKwkgKiBvbiB3aGV0aGVyIHdlJ3JlIGxvb2tpbmcg YXQgdGhlIHRvcC1sZXZlbCBqb2luIG9yZGVyIGxpc3Qgb3Igc3VibGlzdC4KKwkgKiBBdCB0aGUg dG9wLWxldmVsLCB3ZSB0cmVhdCB0aGUgc3BlY2lmaWVkIGxpc3QgYXMgbWFuZGF0aW5nIHRoYXQg dGhlCisJICogYWN0dWFsIGpvaW4gb3JkZXIgaGFzIHRoZSBnaXZlbiBsaXN0IGFzIGEgcHJlZml4 LCBidXQgYSBzdWJsaXN0CisJICogcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2guCisJICoKKwkgKiBF eG1hcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB3ZSBtdXN0IHN0YXJ0 IGJ5IGpvaW5pbmcKKwkgKiBhbGwgZml2ZSBvZiB0aG9zZSByZWxhdGlvbnMgYW5kIGluIHRoYXQg c2VxdWVuY2UsIGJ1dCBvbmNlIHRoYXQgaXMKKwkgKiBkb25lLCBpdCdzIE9LIHRvIGpvaW4gYW55 IG90aGVyIHJlbHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgam9pbiBwcm9ibGVtLgorCSAqIFRoaXMg YWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBkcml2aW5nIHRhYmxlIGFuZCBwZXJoYXBzIHRo ZSBmaXJzdAorCSAqIGZldyB0aGluZ3MgdG8gd2hpY2ggaXQgc2hvdWxkIGJlIGpvaW5lZCB3aGls ZSBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZQorCSAqIGpvaW4gb3JkZXIgdXAgdGhlIG9wdGltaXpl ci4gQnV0IGl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgc3VycHJpc2luZywKKwkgKiBnaXZlbiB0 aGF0IHNwZWNpZmljYXRpb24sIGlmIHRoZSB1c2VyIGNvdWxkIGFkZCB0NiB0byB0aGUgKHQzIHQ0 IHQ1KQorCSAqIHN1Yi1qb2luLCBzbyB3ZSBkb24ndCBhbGxvdyB0aGF0LiBJZiB3ZSBkaWQgd2Fu dCB0byBhbGxvdyBpdCwgdGhlIGxvZ2ljCisJICogZWFybGllciBpbiB0aGlzIGZ1bmN0aW9uIHdv dWxkIHJlcXVpcmUgc3Vic3RhbnRpYWwgYWRqdXN0bWVudDogd2UgY291bGQKKwkgKiBhbGxvdyB0 aGUgdDMtdDQtdDUtdDYgam9pbiB0byBiZSBidWlsdCBoZXJlLCBidXQgdGhlIG5leHQgc3RlcCBv ZgorCSAqIGpvaW5pbmcgdDEtdDIgdG8gdGhlIHJlc3VsdCB3b3VsZCBzdGlsbCBiZSByZWplY3Rl ZC4KKwkgKi8KKwlyZXR1cm4gIXN1Ymxpc3Q7Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBp dGVtIG9mIGpvaW4gbWV0aG9kIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICog QWR2aWNlIHN1Y2ggYXMgSEFTSF9KT0lOKCh4IHkpKSBtZWFucyB0aGF0IHRoZXJlIHNob3VsZCBi ZSBhIGhhc2ggam9pbiB3aXRoCisgKiBleGFjdGx5IHggYW5kIHkgb24gdGhlIGlubmVyIHNpZGUu IE9idmlvdXNseSwgdGhpcyBtZWFucyB0aGF0IGlmIHdlIGFyZQorICogY29uc2lkZXJpbmcgYSBq b2luIHdpdGggZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLCB3ZSBzaG91bGQgZW5m b3JjZQorICogdGhlIHVzZSBvZiBhIGhhc2ggam9pbi4gSG93ZXZlciwgaXQgYWxzbyBtZWFucyB0 aGF0IHdlIG11c3QgcmVqZWN0IHNvbWUKKyAqIGluY29tcGF0aWJsZSBqb2luIG9yZGVycyBlbnRp cmVseS4gIEZvciBleGFtcGxlLCBhIGpvaW4gd2l0aCBleGFjdGx5IHgKKyAqIGFuZCB5IG9uIHRo ZSBvdXRlciBzaWRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLCBiZWNhdXNlIHN1Y2ggcGF0aHMgbWln aHQgd2luCisgKiBvdmVyIHRoZSBhZHZpY2UtZHJpdmVuIHBhdGggb24gY29zdC4KKyAqCisgKiBU byBhY2NvbW1vZGF0ZSB0aGVzZSByZXF1aXJlbWVudHMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0 cnVlIGlmIHRoZSBqb2luCisgKiBzaG91bGQgYmUgYWxsb3dlZCBhbmQgZmFsc2UgaWYgaXQgc2hv dWxkIG5vdC4gRnVydGhlcm1vcmUsICpyZXN0cmljdF9tZXRob2QKKyAqIGlzIHNldCB0byB0cnVl IGlmIHRoZSBqb2luIG1ldGhvZCBzaG91bGQgYmUgZW5mb3JjZWQgYW5kIGZhbHNlIGlmIG5vdC4K KyAqLworc3RhdGljIGJvb2wKK3BncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKGludCBvdXRl cl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRz LAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0 cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFy Z2V0OworCXBncGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCXBncGFfaXRtX3R5cGUgb3V0ZXJfaXRt OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQg bGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5m bGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFs c2U7CisKKwkvKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgZXhhY3RseSB0aGUgc2Ft ZSByZWxhdGlvbnMgYXMgdGhlIGFkdmljZQorCSAqIHRhcmdldCwgYWxsb3cgdGhlIGpvaW4gYW5k IGVuZm9yY2UgdGhlIGpvaW4gbWV0aG9kIHJlc3RyaWN0aW9uLgorCSAqCisJICogSWYgb3VyIGlu bmVyIHJlbCBtZW50aW9ucyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRpb25zLCBhbGxv dyB0aGUKKwkgKiBqb2luLiBUaGUgam9pbiB3ZSBjYXJlIGFib3V0IGhhcyBhbHJlYWR5IHRha2Vu IHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UKKwkgKiBpbXBvc2VzIG5vIGZ1cnRoZXIgcmVzdHJpY3Rp b25zLgorCSAqLworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlu bmVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ ICB0YXJnZXQpOworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRy eS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1 ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9U QVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJZiBvdXIgb3V0 ZXIgcmVsIG1lbnRpb25zIGEgc3Vwc2Vyc2V0IG9mIHRoZSByZWxhdGlvbnMgaW4gdGhlIGFkdmlj ZQorCSAqIHRhcmdldCwgbm8gcmVzdHJpY3Rpb25zIGFwcGx5LiBUaGUgam9pbiB3ZSBjYXJlIGhh cyBhbHJlYWR5IHRha2VuCisJICogcGxhY2UsIGFuZCB0aGlzIGFkdmljZSBpbXBvc2VzIG5vIGZ1 cnRoZXIgcmVzdHJpY3Rpb25zLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIG91ciBv dXRlciByZWwgbWVudGlvbnMgZXhhY3RseSB0aGUgcmVsYXRpb25zCisJICogbWVudGlvbmVkIGlu IHRoZSBhZHZpY2UgdGFyZ2V0LCB0aGUgcGxhbm5lciBpcyB0cnlpbmcgdG8gcmV2ZXJzZSB0aGUK KwkgKiBzaWRlcyBvZiB0aGUgam9pbiBhcyBjb21wYXJlZCB3aXRoIG91ciBkZXNpcmVkIG91dGNv bWUuIFJlamVjdCB0aGF0LgorCSAqLworCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0 Y2hfdGFyZ2V0KG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7CisJaWYg KG91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVl OworCWVsc2UgaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIGZhbHNl OworCisJLyoKKwkgKiBJZiB0aGUgYWR2aWNlIHRhcmdldCBtZW50aW9ucyBvbmx5IGEgc2luZ2xl IHJlbGF0aW9uLCB0aGUgdGVzdCBiZWxvdworCSAqIGNhbm5vdCBldmVyIHBhc3MsIHNvIHNhdmUg c29tZSB3b3JrIGJ5IGV4aXRpbmcgbm93LgorCSAqLworCWlmICh0YXJnZXQtPnR0eXBlID09IFBH UEFfVEFSR0VUX0lERU5USUZJRVIpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgZXZl cnl0aGluZyBpbiB0aGUgam9pbnJlbCBpcyBhcHBlYXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB3 ZSdyZQorCSAqIGJlbG93IHRoZSBsZXZlbCBvZiB0aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRyb2wu CisJICoKKwkgKiBGb3IgZXhhbXBsZSwgSEFTSF9KT0lOKCh4IHkpKSBkb2Vzbid0IHJlc3RyaWN0 IGhvdyB4IGFuZCB5IGNhbiBiZQorCSAqIGpvaW5lZC4KKwkgKgorCSAqIFRoaXMgbG9va3VwIHNo b3VsZG4ndCByZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQsIGJlY2F1c2UgYW55IHN1Y2ggYWR2aWNl CisJICogc2hvdWxkIG5vdCBoYXZlIGJlZW4gcmV0dXJuZWQgZnJvbSB0aGUgdHJvdmUgaW4gdGhl IGZpcnN0IHBsYWNlLgorCSAqLworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90 YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdl dCk7CisJQXNzZXJ0KGpvaW5faXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKwlpZiAoam9pbl9p dG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRN X0VRVUFMKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogV2UndmUgYWxyZWFkeSBwZXJtaXR0 ZWQgYWxsIGFsbG93YWJsZSBjYXNlcywgc28gcmVqZWN0IHRoaXMuCisJICoKKwkgKiBJZiB3ZSBy ZWFjaCB0aGlzIHBvaW50LCB0aGVuIHRoZSBhZHZpY2Ugb3ZlcmxhcHMgd2l0aCB0aGlzIGpvaW4g YnV0CisJICogaXNuJ3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBlaXRoZXIgc2lkZSwgYW5k IHRoZXJlJ3MgYWxzbyBhdCBsZWFzdAorCSAqIG9uZSByZWxhdGlvbiBwcmVzZW50IGluIHRoZSBq b2luIHRoYXQgaXNuJ3QgbWVudGlvbmVkIGJ5IHRoZSBhZHZpY2UuCisJICoKKwkgKiBGb3IgaW5z dGFuY2UsIGluIHRoZSBIQVNIX0pPSU4oKHggeSkpIGV4YW1wbGUsIHdlIHdvdWxkIHJlYWNoIGhl cmUgaWYgeAorCSAqIHdlcmUgb24gb25lIHNpZGUgb2YgdGhlIGpvaW4sIHkgb24gdGhlIG90aGVy LCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZQorCSAqIHR3byBzaWRlcyBhbHNvIGluY2x1ZGVkIHNv bWUgb3RoZXIgcmVsYXRpb24sIHNheSB0LiBJbiB0aGF0IGNhc2UsCisJICogYWNjZXB0aW5nIHRo aXMgam9pbiB3b3VsZCBhbGxvdyB0aGUgKHggeSB0KSBqb2lucmVsIHRvIGNvbnRhaW4KKwkgKiBu b24tZGlzYWJsZWQgcGF0aHMgdGhhdCBkbyBub3QgcHV0ICh4IHkpIG9uIHRoZSBpbm5lciBzaWRl IG9mIGEgaGFzaAorCSAqIGpvaW47IHdlIGNvdWxkIGluc3RlYWQgZW5kIHVwIHdpdGggc29tZXRo aW5nIGxpa2UgKHggSk9JTiB0KSBKT0lOIHkuCisJICovCisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogRG9lcyBhZHZpY2UgY29uY2VybmluZyBhbiBvcGFxdWUgam9pbiBwZXJtaXQgYSBjZXJ0 YWluIGpvaW4/CisgKgorICogQnkgYW4gb3BhcXVlIGpvaW4sIHdlIG1lYW4gb25lIHdoZXJlIHRo ZSBleGFjdCBtZWNoYW5pc20gYnkgd2hpY2ggdGhlCisgKiBqb2luIGlzIHBlcmZvcm1lZCBpcyBu b3QgdmlzaWJsZSB0byBQb3N0Z3JlU1FMLiBDdXJyZW50bHkgdGhpcyBpcyB0aGUKKyAqIGNhc2Ug b25seSBmb3IgZm9yZWlnbiBqb2luczogRk9SRUlHTl9KT0lOKCh4IHkgeikpIG1lYW5zIHRoYXQg eCwgeSwgYW5kCisgKiB6IGFyZSBqb2luZWQgb24gdGhlIHJlbW90ZSBzaWRlLCBidXQgd2Uga25v dyBub3RoaW5nIGFib3V0IHRoZSBqb2luIG9yZGVyCisgKiBvciBqb2luIG1ldGhvZHMgdXNlZCBv dmVyIHRoZXJlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pv aW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJICBwZ3BhX2lkZW50 aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkg IGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9 IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBqb2luX2l0bTsKKworCS8qIFdlIGRlZmlu aXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnku ICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCSpyZXN0cmlj dF9tZXRob2QgPSBmYWxzZTsKKworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90 YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdl dCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJLyoKKwkJICogV2Ug aGF2ZSBhbiBleGFjdCBtYXRjaCwgYW5kIHNob3VsZCB0aGVyZWZvcmUgYWxsb3cgdGhlIGpvaW4g YW5kCisJCSAqIGVuZm9yY2UgdGhlIHVzZSBvZiB0aGUgcmVsZXZhbnQgb3BhcXVlIGpvaW4gbWV0 aG9kLgorCQkgKi8KKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJl c3RyaWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmIChqb2luX2l0 bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgfHwKKwkJam9pbl9pdG0gPT0gUEdQQV9JVE1f VEFSR0VUU19BUkVfU1VCU0VUKQorCXsKKwkJLyoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9J VE1fVEFSR0VUU19BUkVfU1VCU0VULCB0aGVuIHRoZSBqb2luIHdlIGNhcmUKKwkJICogYWJvdXQg aGFzIGFscmVhZHkgdGFrZW4gcGxhY2UgYW5kIG5vIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIGFwcGx5 LgorCQkgKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQsIHdl J3JlIHN0aWxsIGJ1aWxkaW5nIHVwIHRvCisJCSAqIHRoZSBqb2luIHdlIGNhcmUgYWJvdXQgYW5k IGhhdmUgbm90IGludHJvZHVjZWQgYW55IGV4dHJhbmVvdXMKKwkJICogcmVsYXRpb25zIG5vdCBu YW1lZCBpbiB0aGUgYWR2aWNlLiBOb3RlIHRoYXQgRm9yZWlnblNjYW4gcGF0aHMgZm9yCisJCSAq IGpvaW5zIGFyZSBidWlsdCB1cCBmcm9tIEZvcmVpZ25TY2FuIHBhdGhzIGZyb20gdW5kZXJseWlu ZyBqb2lucyBhbmQKKwkJICogc2NhbnMsIHNvIHdlIG11c3Qgbm90IGRpc2FibGUgdGhpcyBqb2lu IHdoZW4gY29uc2lkZXJpbmcgYSBzdWJzZXQKKwkJICogb2YgdGhlIHJlbGF0aW9ucyB3ZSB1bHRp bWF0ZWx5IHdhbnQuCisJCSAqLworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFRoZSBh ZHZpY2Ugb3ZlcmxhcHMgdGhlIGpvaW4sIGJ1dCBhdCBsZWFzdCBvbmUgcmVsYXRpb24gaXMgcHJl c2VudCBpbgorCSAqIHRoZSBqb2luIHRoYXQgaXNuJ3QgbWVudGlvbmVkIGJ5IHRoZSBhZHZpY2Uu IFdlIHdhbnQgdG8gZGlzYWJsZSBzdWNoCisJICogcGF0aHMgc28gdGhhdCB3ZSBhY3R1YWxseSBw dXNoIGRvd24gdGhlIGpvaW4gYXMgaW50ZW5kZWQuCisJICovCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogQXBwbHkgc2NhbiBhZHZpY2UgdG8gYSBSZWxPcHRJbmZvLgorICoKKyAqIFhYWC4g Rm9yIGJpdG1hcCBoZWFwIHNjYW5zLCB3ZSdyZSBqdXN0IGlnbm9yaW5nIHRoZSBpbmRleCBpbmZv cm1hdGlvbiBmcm9tCisgKiB0aGUgYWR2aWNlLiBUaGF0J3Mgbm90IGNvb2wuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAor CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkgICBCaXRt YXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50 cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKQoreworCWJvb2wJCWdhdGhl cl9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0g TlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJaW50CQkJaSA9 IC0xOworCXBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cnkgPSBOVUxMOworCWludAkJCWZsYWdz OworCWJvb2wJCXNjYW5fdHlwZV9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNldCAgKnNjYW5f dHlwZV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfcmVsX2luZGV4ZXMg PSBOVUxMOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCXVpbnQ2NAkJc2Nhbl90eXBlID0g MDsKKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIHNjYW4gYWR2aWNlLiAqLworCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihzY2FuX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90 cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmc2Nhbl9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15X3Nj YW5fdHlwZSA9IDA7CisKKwkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNjYW4g c3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RB R19CSVRNQVBfSEVBUF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0JJVE1BUFNDQU47CisJ CWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJ bXlfc2Nhbl90eXBlID0gUEdTX0lOREVYT05MWVNDQU4gfCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZ OworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4pCisJCQlt eV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhTQ0FOOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09 IFBHUEFfVEFHX1NFUV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1NFUVNDQU47CisJCWVs c2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4pCisJCQlteV9zY2FuX3R5 cGUgPSBQR1NfVElEU0NBTjsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHVuZGVyc3RhbmRhYmxl IHNjYW4gYWR2aWNlLCBoYW5nIG9uIHRvIHRoZSBlbnRyeSwgdGhlCisJCSAqIGluZmVycmVkIHNj YW4gdHlwZSB0eXBlLCBhbmQgdGhlIGluZGV4IGF0IHdoaWNoIHdlIGZvdW5kIGl0LgorCQkgKgor CQkgKiBBbHNvIG1ha2UgYSBub3RlIGlmIHdlIHNlZSBjb25mbGljdGluZyBzY2FuIHR5cGUgYWR2 aWNlLiBOb3RlIHRoYXQKKwkJICogd2UgcmVnYXJkIHR3byBpbmRleCBzcGVjaWZpY2F0aW9ucyBh cyBjb25mbGljdGluZyB1bmxlc3MgdGhleSBtYXRjaAorCQkgKiBleGFjdGx5LiBJbiB0aGVvcnks IHBlcmhhcHMgd2UgY291bGQgcmVnYXJkIElOREVYX1NDQU4oYSBjKSBhbmQKKwkJICogSU5ERVhf U0NBTihhIGIuYykgYXMgbm9uLWNvbmZsaWN0aW5nIGlmIGl0IGhhcHBlbnMgdGhhdCB0aGUgb25s eQorCQkgKiBpbmRleCBuYW1lZCBjIGlzIGluIHNjaGVtYSBiLCBidXQgaXQgZG9lc24ndCBzZWVt IHdvcnRoIHRoZSBjb2RlLgorCQkgKi8KKwkJaWYgKG15X3NjYW5fdHlwZSAhPSAwKQorCQl7CisJ CQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQlz Y2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJaWYgKCFzY2FuX3R5cGVfY29uZmxpY3QgJiYg c2Nhbl9lbnRyeSAhPSBOVUxMICYmCisJCQkJbXlfZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBO VUxMICYmCisJCQkJc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQkh cGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCwKKwkJ CQkJCQkJCQkgIG15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQpKQorCQkJCXNjYW5fdHlwZV9jb25m bGljdCA9IHRydWU7CisJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7CisJCQlzY2FuX3R5cGUgPSBt eV9zY2FuX3R5cGU7CisJCQlzY2FuX3R5cGVfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNjYW5f dHlwZV9pbmRleGVzLCBpKTsKKwkJfQorCX0KKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIGdh dGhlci1yZWxhdGVkIGFuZCBwYXJ0aXRpb253aXNlIGFkdmljZS4gKi8KKwlpID0gLTE7CisJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBn cGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnJlbF9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15 X2dhdGhlcl9tYXNrID0gMDsKKwkJYm9vbAkJanVzdF9vbmVfcmVsOworCisJCWp1c3Rfb25lX3Jl bCA9IG15X2VudHJ5LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIKKwkJ CXx8IGxpc3RfbGVuZ3RoKG15X2VudHJ5LT50YXJnZXQtPmNoaWxkcmVuKSA9PSAxOworCisJCS8q CisJCSAqIFBBUlRJVElPTldJU0UgYmVoYXZlcyBsaWtlIGEgc2NhbiB0eXBlLCBleGNlcHQgdGhh dCBpZiB0aGVyZSdzIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsYXRpb24gdGFyZ2V0ZWQsIGl0IGhh cyBubyBlZmZlY3QgYXQgdGhpcyBsZXZlbC4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09 IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCXsKKwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQl7 CisJCQkJY29uc3QgdWludDY0IG15X3NjYW5fdHlwZSA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0Vf QVBQRU5EOworCisJCQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2Fu X3R5cGUpCisJCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQkJc2Nhbl9lbnRyeSA9 IG15X2VudHJ5OworCQkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKKwkJCQlzY2FuX3R5cGVf cmVsX2luZGV4ZXMgPQorCQkJCQlibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfcmVsX2luZGV4ZXMs IGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBHQVRIRVIgYW5kIEdB VEhFUl9NRVJHRSBhcHBsaWVkIHRvIGEgc2luZ2xlIHJlbCBtZWFuIHRoYXQgd2Ugc2hvdWxkCisJ CSAqIHVzZSB0aGUgY29ycmVzcG9uZGluZ3Mgc3RyYXRlZ3kgaGVyZSwgd2hpbGUgYXBwbHlpbmcg ZWl0aGVyIHRvIG1vcmUKKwkJICogdGhhbiBvbmUgcmVsIG1lYW5zIHdlIHNob3VsZCBub3QgdXNl IHRob3NlIHN0cmF0ZWdpZXMgaGVyZSwgYnV0CisJCSAqIHJhdGhlciBhdCB0aGUgbGV2ZWwgb2Yg dGhlIGpvaW5yZWwgdGhhdCBjb3JyZXNwb25kcyB0byB3aGF0IHdhcworCQkgKiBzcGVjaWZpZWQu IE5PX0dBVEhFUiBjYW4gb25seSBiZSBhcHBsaWVkIHRvIHNpbmdsZSByZWxzLgorCQkgKgorCQkg KiBOb3RlIHRoYXQgc2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBpbiBteV9nYXRoZXJf bWFzayBpcworCQkgKiBlcXVpdmFsZW50IHRvIGFsbG93aW5nIHRoZSBub24tdXNlIG9mIGVpdGhl ciBmb3JtIG9mIEdhdGhlciBoZXJlLgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSIHx8CisJCQlteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJH RSkKKwkJeworCQkJaWYgKCFqdXN0X29uZV9yZWwpCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwkJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfR0FUSEVSKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCWVsc2UKKwkJ CQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7CisJCX0KKwkJZWxzZSBpZiAobXlf ZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCXsKKwkJCUFzc2VydChqdXN0X29u ZV9yZWwpOworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJ fQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3 ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVt ZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlz IHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFz ayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBt eV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21h c2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQkJZ2F0aGVyX2Z1 bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNl CisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlh bF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKiBFbmZvcmNlIGNob2ljZSBvZiBpbmRleC4gKi8K KwlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFzY2FuX3R5cGVfY29uZmxpY3QgJiYKKwkJKHNj YW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCSBzY2FuX2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKSkKKwl7CisJCXBncGFfaW5kZXhfdGFyZ2V0 ICppdGFyZ2V0ID0gc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0OworCQlJbmRleE9wdEluZm8g Km1hdGNoZWRfaW5kZXggPSBOVUxMOworCisJCUFzc2VydChpdGFyZ2V0LT5pdHlwZSA9PSBQR1BB X0lOREVYX05BTUUpOworCisJCWZvcmVhY2hfbm9kZShJbmRleE9wdEluZm8sIGluZGV4LCByZWwt PmluZGV4bGlzdCkKKwkJeworCQkJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShpbmRl eC0+aW5kZXhvaWQpOworCQkJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXgt PmluZGV4b2lkKTsKKwkJCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFt ZShuc3BvaWQpOworCisJCQlpZiAoc3RyY21wKGl0YXJnZXQtPmluZG5hbWUsIHJlbG5hbWUpID09 IDAgJiYKKwkJCQkoaXRhcmdldC0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJCQkgc3RyY21w KGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSA9PSAwKSkKKwkJCXsKKwkJCQlt YXRjaGVkX2luZGV4ID0gaW5kZXg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobWF0 Y2hlZF9pbmRleCA9PSBOVUxMKQorCQl7CisJCQkvKiBEb24ndCBmb3JjZSB0aGUgc2NhbiB0eXBl IGlmIHRoZSBpbmRleCBkb2Vzbid0IGV4aXN0LiAqLworCQkJc2Nhbl90eXBlID0gMDsKKworCQkJ LyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxlLiAqLworCQkJcGdwYV90cm92ZV9zZXRfZmxh Z3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywKKwkJCQkJCQkJIFBHUEFfVEVfSU5B UFBMSUNBQkxFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIFJldGFpbiB0aGlzIGluZGV4IGFu ZCBkaXNjYXJkIHRoZSByZXN0LiAqLworCQkJcmVsLT5pbmRleGxpc3QgPSBsaXN0X21ha2UxKG1h dGNoZWRfaW5kZXgpOworCQl9CisJfQorCisJLyoKKwkgKiBNYXJrIGFsbCB0aGUgc2NhbiBtZXRo b2QgZW50cmllcyBhcyBmdWxseSBtYXRjaGVkOyBhbmQgaWYgdGhleSBzcGVjaWZ5CisJICogZGlm ZmVyZW50IHRoaW5ncywgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFn cyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTCB8IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlpZiAoc2Nh bl90eXBlX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFf dHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50cmllcywgc2Nhbl90eXBlX2luZGV4ZXMsIGZsYWdzKTsK KwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgc2Nhbl90eXBlX3JlbF9pbmRleGVz LCBmbGFncyk7CisKKwkvKgorCSAqIE1hcmsgZXZlcnkgR2F0aGVyLXJlbGF0ZWQgcGllY2Ugb2Yg YWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVkLiBNYXJrCisJICogdGhlIG9uZXMgdGhhdCBpbmNs dWRlZCB0aGlzIHJlbGF0aW9uIGFzIGEgdGFyZ2V0IGJ5IGl0c2VsZiBhcyBmdWxseQorCSAqIG1h dGNoZWQuIElmIHRoZXJlIHdhcyBhIGNvbmZsaWN0LCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0 aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChnYXRoZXJf Y29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9z ZXRfZmxhZ3MocmVsX2VudHJpZXMsIGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxh Z3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRy aWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyogSWYgdGhlcmUgaXMgYSBub24t Y29uZmxpY3Rpbmcgc2NhbiBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0LiAqLworCWlmIChzY2Fu X3R5cGUgIT0gMCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0KQorCXsKKwkJcmVsLT5wZ3NfbWFzayAm PQorCQkJfihQR1NfU0NBTl9BTlkgfCBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8CisJ CQkgIFBHU19DT05TSURFUl9JTkRFWE9OTFkpOworCQlyZWwtPnBnc19tYXNrIHw9IHNjYW5fdHlw ZTsKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBnYXRoZXIgc3BlY2lm aWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVy X2NvbmZsaWN0KQorCXsKKwkJcmVsLT5wZ3NfbWFzayAmPQorCQkJfihQR1NfR0FUSEVSIHwgUEdT X0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMKTsKKwkJcmVsLT5wZ3NfbWFz ayB8PSBnYXRoZXJfbWFzazsKKwl9Cit9CisKKy8qCisgKiBBZGQgZmVlZGJhY2sgZW50cmllcyB0 byBmb3Igb25lIHRyb3ZlIHNsaWNlIHRvIHRoZSBwcm92aWRlZCBsaXN0IGFuZAorICogcmV0dXJu IHRoZSByZXN1bHRpbmcgbGlzdC4KKyAqCisgKiBGZWVkYmFjayBlbnRyaWVzIGFyZSBnZW5lcmF0 ZWQgZnJvbSB0aGUgdHJvdmUgZW50cnkncyBmbGFncy4gSXQncyBhc3N1bWVkCisgKiB0aGF0IHRo ZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IGFsbCByZWxldmFudCBmbGFncyB3aXRoIHRoZSBleGNl cHRpb24gb2YKKyAqIFBHUEFfVEVfRkFJTEVELiBXZSBzZXQgdGhhdCBmbGFnIGhlcmUgaWYgYXBw cm9wcmlhdGUuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3BncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJh Y2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJIHBncGFfdHJvdmVfbG9v a3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpCit7CisJcGdwYV90cm92 ZV9lbnRyeSAqZW50cmllczsKKwlpbnQJCQluZW50cmllczsKKwlTdHJpbmdJbmZvRGF0YSBidWY7 CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwodHJvdmUs IHR5cGUsICZlbnRyaWVzLCAmbmVudHJpZXMpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVudHJp ZXM7ICsraSkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJpZXNbaV07CisJ CURlZkVsZW0gICAgKml0ZW07CisKKwkJLyoKKwkJICogSWYgdGhpcyBlbnRyeSB3YXMgZnVsbHkg bWF0Y2hlZCwgY2hlY2sgd2hldGhlciBnZW5lcmF0aW5nIGFkdmljZQorCQkgKiBmcm9tIHRoaXMg cGxhbiB3b3VsZCBwcm9kdWNlIHN1Y2ggYW4gZW50cnkuIElmIG5vdCwgbGFiZWwgdGhlIGVudHJ5 CisJCSAqIGFzIGZhaWxlZC4KKwkJICovCisJCWlmICgoZW50cnktPmZsYWdzICYgUEdQQV9URV9N QVRDSF9GVUxMKSAhPSAwICYmCisJCQkhcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHdhbGtlciwg cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgIGVudHJ5LT50YWcsIGVudHJ5LT50YXJnZXQpKQor CQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfRkFJTEVEOworCisJCWl0ZW0gPSBtYWtlRGVmRWxl bShwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkoZW50cnkpLAorCQkJCQkJICAgKE5vZGUgKikgbWFr ZUludGVnZXIoZW50cnktPmZsYWdzKSwgLTEpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBpdGVt KTsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcK KworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbiBS VEkgYW5kIHBsYW4gbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV9yaV9jaGVja2VyX2hh c2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOwor CWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCWhzLmFjY3VtID0g a2V5LnJ0aTsKKwlmYXN0aGFzaF9jb21iaW5lKCZocyk7CisKKwkvKiBwbGFuX25hbWUgY2FuIGJl IE5VTEwgKi8KKwlpZiAoa2V5LnBsYW5fbmFtZSA9PSBOVUxMKQorCQlzcF9sZW4gPSAwOworCWVs c2UKKwkJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUp OworCisJLyogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3Ro IGFzIHR3ZWFrICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQor CisjZW5kaWYKKworLyoKKyAqIFNhdmUgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgZm9yIG9u ZSByZWxhdGlvbiBmb3IgZnV0dXJlIGNyb3NzLWNoZWNraW5nLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkgUmVsT3B0SW5mbyAqcmVsKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNr OworCXBncGFfaWRlbnRpZmllciByaWQ7CisJY29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwlib29s CQlmb3VuZDsKKworCWtleS5ydGkgPSBibXNfc2luZ2xldG9uX21lbWJlcihyZWwtPnJlbGlkcyk7 CisJa2V5LnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwlwZ3BhX2NvbXB1dGVfaWRlbnRp Zmllcl9ieV9ydGkocm9vdCwga2V5LnJ0aSwgJnJpZCk7CisJcmlkX3N0cmluZyA9IHBncGFfaWRl bnRpZmllcl9zdHJpbmcoJnJpZCk7CisJY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2luc2VydChwcHMt PnJpX2NoZWNrX2hhc2gsIGtleSwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kIHx8IHN0cmNtcChj aGVjay0+cmlkX3N0cmluZywgcmlkX3N0cmluZykgPT0gMCk7CisJY2hlY2stPnJpZF9zdHJpbmcg PSByaWRfc3RyaW5nOworI2VuZGlmCit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGF0IHRoZSByYW5n ZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJlIGFibGUgdG8gZ2VuZXJhdGUgZHVyaW5nCisgKiBw bGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJf c3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCXBncGFfcmlfY2hlY2tf aXRlcmF0b3IgaXQ7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKworCS8qIENyZWF0ZSBpZGVu dGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0YXRlbWVudC4gKi8KKwlydF9pZGVudGlmaWVycyA9 IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOworCisJLyog SXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3ZSBj YW4gY29tcGFyZS4gKi8KKwlwZ3BhX3JpX2NoZWNrX3N0YXJ0X2l0ZXJhdGUocHBzLT5yaV9jaGVj a19oYXNoLCAmaXQpOworCXdoaWxlICgoY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2l0ZXJhdGUocHBz LT5yaV9jaGVja19oYXNoLCAmaXQpKSAhPSBOVUxMKQorCXsKKwkJaW50CQkJcnRvZmZzZXQgPSAw OworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nOworCQlJbmRleAkJZmxhdF9ydGk7CisKKwkJLyoK KwkJICogSWYgdGhlcmUncyBubyBwbGFuIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZW50cnks IHRoZW4gdGhlCisJCSAqIHJ0b2Zmc2V0IGlzIDAuIE90aGVyd2lzZSwgd2UgY2FuIHNlYXJjaCB0 aGUgU3ViUGxhblJUSW5mbyBsaXN0IHRvCisJCSAqIGZpbmQgdGhlIHJ0b2Zmc2V0LgorCQkgKi8K KwkJaWYgKGNoZWNrLT5rZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9k ZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCS8q CisJCQkJICogSWYgcnRpbmZvLT5kdW1teSBpcyBzZXQsIHRoZW4gdGhlIHN1YnF1ZXJ5J3MgcmFu Z2UgdGFibGUKKwkJCQkgKiB3aWxsIG9ubHkgaGF2ZSBiZWVuIHBhcnRpYWxseSBjb3BpZWQgdG8g dGhlIGZpbmFsIHJhbmdlCisJCQkJICogdGFibGUuIFNwZWNpZmljYWxseSwgb25seSBSVEVfUkVM QVRJT04gZW50cmllcyBhbmQKKwkJCQkgKiBSVEVfU1VCUVVFUlkgZW50cmllcyB0aGF0IHdlcmUg b25jZSBSVEVfUkVMQVRJT04gZW50cmllcworCQkJCSAqIHdpbGwgYmUgY29waWVkLCBhcyBwZXIg YWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUuIFRoZXJlZm9yZSwKKwkJCQkgKiB0aGVyZSdzIG5vIGZp eGVkIHJ0b2Zmc2V0IHRoYXQgd2UgY2FuIGFwcGx5IHRvIHRoZSBSVElzCisJCQkJICogdXNlZCBk dXJpbmcgcGxhbm5pbmcgdG8gbG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9ucworCQkJ CSAqIGluIHRoZSBmaW5hbCBydGFibGUuCisJCQkJICoKKwkJCQkgKiBXaXRoIG1vcmUgY29tcGxl eCBsb2dpYywgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBwcm9ibGVtCisJCQkJICogYnkgcmVt ZW1iZXJpbmcgdGhlIHdob2xlIGNvbnRlbnRzIG9mIHRoZSBzdWJxdWVyeSdzIHJ0YWJsZQorCQkJ CSAqIGR1cmluZyBwbGFubmluZywgZGV0ZXJtaW5pbmcgd2hpY2ggb2YgdGhvc2Ugd291bGQgaGF2 ZSBiZWVuCisJCQkJICogY29waWVkIHRvIHRoZSBmaW5hbCBydGFibGUsIGFuZCBtYXRjaGluZyB0 aGVtIHVwLiBCdXQgaXQKKwkJCQkgKiBkb2Vzbid0IHNlZW0gbGlrZSBhIHdvcnRod2hpbGUgZW5k ZWF2b3IgZm9yIHJpZ2h0IG5vdywKKwkJCQkgKiBiZWNhdXNlIFJUSXMgZnJvbSBzdWNoIHN1YnF1 ZXJpZXMgd29uJ3QgYXBwZWFyIGluIHRoZSBwbGFuCisJCQkJICogdHJlZSBpdHNlbGYsIGp1c3Qg aW4gdGhlIHJhbmdlIHRhYmxlLiBIZW5jZSwgd2UgY2FuIG5laXRoZXIKKwkJCQkgKiBnZW5lcmF0 ZSBub3IgYWNjZXB0IGFkdmljZSBmb3IgdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKGNo ZWNrLT5rZXkucGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMAorCQkJCQkmJiAhcnRp bmZvLT5kdW1teSkKKwkJCQl7CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJ CQkJQXNzZXJ0KHJ0b2Zmc2V0ID4gMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJ LyoKKwkJCSAqIEl0J3Mgbm90IGFuIGVycm9yIGlmIHdlIGRvbid0IGZpbmQgdGhlIHBsYW4gbmFt ZTogdGhhdCBqdXN0CisJCQkgKiBtZWFucyB0aGF0IHdlIHBsYW5uZWQgYSBzdWJwbGFuIGJ5IHRo aXMgbmFtZSBidXQgaXQgZW5kZWQgdXAKKwkJCSAqIGJlaW5nIGEgZHVtbXkgc3VicGxhbiBhbmQg c28gd2Fzbid0IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBwbGFuCisJCQkgKiB0cmVlLgorCQkJICov CisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAq IGNoZWNrLT5rZXkucnRpIGlzIHRoZSBSVEkgdGhhdCB3ZSBzYXcgcHJpb3IgdG8gcmFuZ2UtdGFi bGUKKwkJICogZmxhdHRlbmluZywgc28gd2UgbXVzdCBhZGQgdGhlIGFwcHJvcHJpYXRlIFJUIG9m ZnNldCB0byBnZXQgdGhlCisJCSAqIGZpbmFsIFJUSS4KKwkJICovCisJCWZsYXRfcnRpID0gY2hl Y2stPmtleS5ydGkgKyBydG9mZnNldDsKKwkJQXNzZXJ0KGZsYXRfcnRpIDw9IGxpc3RfbGVuZ3Ro KHBzdG10LT5ydGFibGUpKTsKKworCQkvKiBBc3NlcnQgdGhhdCB0aGUgc3RyaW5nIHdlIGNvbXB1 dGUgbm93IG1hdGNoZXMgdGhlIHByZXZpb3VzIG9uZS4gKi8KKwkJcmlkX3N0cmluZyA9IHBncGFf aWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZpZXJzW2ZsYXRfcnRpIC0gMV0pOworCQlBc3Nl cnQoc3RyY21wKHJpZF9zdHJpbmcsIGNoZWNrLT5yaWRfc3RyaW5nKSA9PSAwKTsKKwl9CisjZW5k aWYKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZDQwYjkxMGIwMAotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKQEAgLTAsMCArMSwxNyBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9wbGFubmVyLmgKKyAqCSAgcGxhbm5lciBob29r cworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfUExBTk5FUl9I CisjZGVmaW5lIFBHUEFfUExBTk5FUl9ICisKK2V4dGVybiB2b2lkIHBncGFfcGxhbm5lcl9pbnN0 YWxsX2hvb2tzKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9zY2FuLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYmQ3Yzk5ZTRjMgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKQEAgLTAsMCAr MSwyNzggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfc2Nhbi5jCisgKgkgIGFu YWx5c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNs dWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworc3RhdGljIHBncGFfc2NhbiAqcGdwYV9tYWtl X3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJ CQkJCSBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCSBCaXRtYXBzZXQgKnJl bGlkcywKKwkJCQkJCQkJIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKworCitzdGF0aWMgQml0 bWFwc2V0ICpmaWx0ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpy dGFibGUpOworc3RhdGljIFJURUtpbmQgdW5pcXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBzZXQg KnJlbGlkcywgTGlzdCAqcnRhYmxlKTsKKworLyoKKyAqIEJ1aWxkIGEgcGdwYV9zY2FuIG9iamVj dCBmb3IgYSBQbGFuIG5vZGUgYW5kIHVwZGF0ZSB0aGUgcGxhbiB3YWxrZXIKKyAqIGNvbnRleHQg YXMgYXBwb3ByaWF0ZS4gIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHNjYW4s IGFsc28KKyAqIGJ1aWxkIHBncGFfc2NhbiBmb3IgYW55IHNjYW5zIHRoYXQgd2VyZSBjb25zb2xp ZGF0ZWQgaW50byB0aGlzIG9uZSBieQorICogQXBwZW5kL01lcmdlQXBwZW5kIHB1bGwtdXAuCisg KgorICogSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIEVsaWRlZE5vZGUgZm9yIHRoaXMgcGxhbiBu b2RlLCBwYXNzIHRoZSB1cHBlcm1vc3QKKyAqIG9uZSBhcyBlbGlkZWRfbm9kZSwgZWxzZSBwYXNz IE5VTEwuCisgKgorICogU2V0IHRoZSAnYmVuZWF0aF9hbnlfZ2F0aGVyJyBub2RlIGlmIHdlIGFy ZSB1bmRlcm5lYXRoIGEgR2F0aGVyIG9yCisgKiBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiBT ZXQgdGhlICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlmIHdlJ3JlIGluc2lkZSBvZiBhIGpv aW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBvdGhlcndpc2UuCisgKi8KK3BncGFfc2NhbiAqCitwZ3Bh X2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4s CisJCQkJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJYm9vbCBiZW5lYXRoX2FueV9nYXRo ZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSkKK3sKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3Ry YXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsK KwlpbnQJCQlydGkgPSAtMTsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5J TDsKKworCWlmIChlbGlkZWRfbm9kZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5 cGUgPSBlbGlkZWRfbm9kZS0+ZWxpZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBw cm9jZXNzaW5nIGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAor CQkgKiBvbmx5IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIHRoZW4gdGhpcyBpcyBhIHBhcnRpdGlvbndp c2UgInNjYW4iIC0tCisJCSAqIHdoaWNoIG1heSByZWFsbHkgYmUgYSBwYXJ0aXRpb253aXNlIGpv aW4sIGJ1dCB0aGVyZSdzIG5vIG5lZWQgdG8KKwkJICogZGlzdGluZ3Vpc2guCisJCSAqCisJCSAq IElmIGl0J3MgYSB0cml2aWFsIFN1YnF1ZXJ5U2NhbiB0aGF0IHdhcyBlbGlkZWQsIHRoZW4gdGhp cyBpcyBhbgorCQkgKiAib3JkaW5hcnkiIHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQg dG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAqIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRl IGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICovCisJCXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5y ZWxpZHM7CisJCWlmIChlbGlkZWRfdHlwZSA9PSBUX0FwcGVuZCB8fCBlbGlkZWRfdHlwZSA9PSBU X01lcmdlQXBwZW5kKQorCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJ ZWxzZQorCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisKKwkJLyogSm9pbiBSVElz IGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAqLworCQly ZWxpZHMgPSBmaWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRh YmxlKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQor CXsKKwkJcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisKKwkJc3dpdGNoIChub2Rl VGFnKHBsYW4pKQorCQl7CisJCQljYXNlIFRfU2VxU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFf U0NBTl9TRVE7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCQkJc3Ry YXRlZ3kgPSBQR1BBX1NDQU5fQklUTUFQX0hFQVA7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5k ZXhTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYOworCQkJCWJyZWFrOworCQkJ Y2FzZSBUX0luZGV4T25seVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVhfT05M WTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9UaWRTY2FuOgorCQkJY2FzZSBUX1RpZFJhbmdlU2Nh bjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9USUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCisJCQkJLyoKKwkJCQkgKiBUaGlzIGNhc2UgaW5jbHVkZXMgYSBGb3JlaWduU2NhbiB0YXJn ZXRpbmcgYSBzaW5nbGUKKwkJCQkgKiByZWxhdGlvbjsgbm8gb3RoZXIgc3RyYXRlZ3kgaXMgcG9z c2libGUgaW4gdGhhdCBjYXNlLCBidXQKKwkJCQkgKiBzZWUgYmVsb3csIHdoZXJlIHRoaW5ncyBh cmUgZGlmZmVyZW50IGluIG11bHRpLXJlbGF0aW9uCisJCQkJICogY2FzZXMuCisJCQkJICovCisJ CQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJ ZWxzZSBpZiAoKHJlbGlkcyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJc3dp dGNoIChub2RlVGFnKHBsYW4pKQorCQl7CisJCQljYXNlIFRfRm9yZWlnblNjYW46CisKKwkJCQkv KgorCQkJCSAqIElmIG11bHRpcGxlIHJlbGF0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQgYnkgYSBz aW5nbGUKKwkJCQkgKiBmb3JlaWduIHNjYW4sIHRoZW4gdGhlIGZvcmVpZ24gam9pbiBoYXMgYmVl biBwdXNoZWQgdG8gdGhlCisJCQkJICogcmVtb3RlIHNpZGUsIGFuZCB3ZSB3YW50IHRoYXQgdG8g YmUgcmVmbGVjdGVkIGluIHRoZQorCQkJCSAqIGdlbmVyYXRlZCBhZHZpY2UuCisJCQkJICovCisJ CQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fRk9SRUlHTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9B cHBlbmQ6CisKKwkJCQkvKgorCQkJCSAqIEFwcGVuZCBub2RlcyBjYW4gcmVwcmVzZW50IHBhcnRp dGlvbndpc2Ugc2NhbnMgb2YgYSBhCisJCQkJICogcmVsYXRpb24sIGJ1dCB3aGVuIHRoZXkgaW1w bGVtZW50IGEgc2V0IG9wZXJhdGlvbiwgdGhleSBhcmUKKwkJCQkgKiBqdXN0IG9yZGluYXJ5IHNj YW5zLgorCQkJCSAqLworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fs a2VyLT5wc3RtdC0+cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5 ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBH UEFfU0NBTl9PUkRJTkFSWTsKKwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgo QXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJ CWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkvKiBTb21lIGxvZ2ljIGhlcmUgYXMgZm9yIEFwcGVu ZCwgYWJvdmUuICovCisJCQkJaWYgKHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxr ZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kg PSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX09SRElOQVJZOworCQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChN ZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7 CisJCQlkZWZhdWx0OgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCQkJCWJy ZWFrOworCQl9CisKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZpY2Ug bmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IGZpbHRlcl9vdXRfam9pbl9yZWxp ZHMocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCX0KKworCS8qCisJICogSWYgdGhp cyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1Ym9yZGluYXRl IEFwcGVuZAorCSAqIG9yIE1lcmdlQXBwZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBlYWNoIG9mIHRo b3NlIG1lcmdlZCBwYXRocyBpcworCSAqIGVmZmVjdGl2ZWx5IGFub3RoZXIgc2NhbiBmb3Igd2hp Y2ggd2UgbmVlZCB0byBhY2NvdW50LgorCSAqLworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGNo aWxkX3JlbGlkcywgY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCisJeworCQlCaXRtYXBzZXQgICpj aGlsZF9ub25qb2luX3JlbGlkczsKKworCQljaGlsZF9ub25qb2luX3JlbGlkcyA9IGZpbHRlcl9v dXRfam9pbl9yZWxpZHMoY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCQkJCSAgd2Fsa2VyLT5wc3Rt dC0+cnRhYmxlKTsKKwkJKHZvaWQpIHBncGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRl Z3ksCisJCQkJCQkJICBjaGlsZF9ub25qb2luX3JlbGlkcywKKwkJCQkJCQkgIGJlbmVhdGhfYW55 X2dhdGhlcik7CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIHBsYW4gbm9kZSBoYXMgbm8gYXNzb2Np YXRlZCBSVElzLCBpdCdzIG5vdCBhIHNjYW4uIFdoZW4gdGhlCisJICogJ3dpdGhpbl9qb2luX3By b2JsZW0nIGZsYWcgaXMgc2V0LCB0aGF0J3MgdW5leHBlY3RlZCwgc28gdGhyb3cgYW4KKwkgKiBl cnJvciwgZWxzZSByZXR1cm4gcXVpZXRseS4KKwkgKi8KKwlpZiAocmVsaWRzID09IE5VTEwpCisJ eworCQlpZiAod2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVsb2coRVJST1IsICJwbGFuIG5vZGUg aGFzIG5vIFJUSXM6ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJCXJldHVybiBOVUxMOwor CX0KKworCXJldHVybiBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LCByZWxp ZHMsIGJlbmVhdGhfYW55X2dhdGhlcik7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBzaW5nbGUgcGdw YV9zY2FuIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQuCisg Ki8KK3N0YXRpYyBwZ3BhX3NjYW4gKgorcGdwYV9tYWtlX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkgICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3Ry YXRlZ3ksIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJICAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIp Cit7CisJcGdwYV9zY2FuICAqc2NhbjsKKworCS8qIENyZWF0ZSB0aGUgc2NhbiBvYmplY3QuICov CisJc2NhbiA9IHBhbGxvYyhzaXplb2YocGdwYV9zY2FuKSk7CisJc2Nhbi0+cGxhbiA9IHBsYW47 CisJc2Nhbi0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKKwlzY2FuLT5yZWxpZHMgPSByZWxpZHM7CisJ c2Nhbi0+YmVuZWF0aF9hbnlfZ2F0aGVyID0gYmVuZWF0aF9hbnlfZ2F0aGVyOworCisJLyogQWRk IGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0LiAqLworCXdhbGtlci0+c2NhbnNbc2Nhbi0+c3Ry YXRlZ3ldID0gbGFwcGVuZCh3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSwKKwkJCQkJCQkJ CQkJc2Nhbik7CisKKwkvKgorCSAqIFdlIGludGVuZCB0byBlbWl0IE5PX0dBVEhFUigpIGFkdmlj ZSBmb3IgZWFjaCBzY2FuIHRoYXQgZG9lc24ndCBhcHBlYXIKKwkgKiBiZW5lYXRoIGEgR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlLCBidXQgd2UgbmVlZCBub3QgZG8gdGhpcyBmb3IKKwkgKiBw YXJ0aXRpb253aXNlIHNjYW5zLCBiZWNhdXNlIGVtaXR0aW5nIE5PX0dBVEhFUigpIGZvciB0aGUg Y2hpbGQgc2NhbnMKKwkgKiBzdWZmaWNlcy4KKwkgKi8KKwlpZiAoIXNjYW4tPmJlbmVhdGhfYW55 X2dhdGhlciAmJiBzY2FuLT5zdHJhdGVneSAhPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSkKKwkJ d2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMgPSBibXNfYWRkX21lbWJlcnMod2Fsa2VyLT5ub19nYXRo ZXJfc2NhbnMsCisJCQkJCQkJCQkJCQkgIHNjYW4tPnJlbGlkcyk7CisKKwlyZXR1cm4gc2NhbjsK K30KKworLyoKKyAqIERldGVybWluZSB0aGUgdW5pcXVlIHJ0ZWtpbmQgb2YgYSBzZXQgb2YgcmVs aWRzLgorICovCitzdGF0aWMgUlRFS2luZAordW5pcXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBz ZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZp cnN0ID0gdHJ1ZTsKKwlSVEVLaW5kCQlydGVraW5kOworCisJQXNzZXJ0KHJlbGlkcyAhPSBOVUxM KTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkK Kwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCQlp ZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJaWYgKGZpcnN0 KQorCQl7CisJCQlydGVraW5kID0gcnRlLT5ydGVraW5kOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJ fQorCQllbHNlIGlmIChydGVraW5kICE9IHJ0ZS0+cnRla2luZCkKKwkJCWVsb2coRVJST1IsICJy dGVraW5kIG1pc21hdGNoOiAlZCB2cy4gJWQiLAorCQkJCSBydGVraW5kLCBydGUtPnJ0ZWtpbmQp OworCX0KKworCWlmIChmaXJzdCkKKwkJZWxvZyhFUlJPUiwgIm5vIG5vbi1SVEVfSk9JTiBSVEVz IGZvdW5kIik7CisKKwlyZXR1cm4gcnRla2luZDsKK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5l dyBCaXRtYXBzZXQgY29udGFpbmluZyBub24tUlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4K KyAqLworc3RhdGljIEJpdG1hcHNldCAqCitmaWx0ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNl dCAqcmVsaWRzLCBMaXN0ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJQml0bWFwc2V0 ICAqcmVzdWx0ID0gTlVMTDsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlk cywgcnRpKSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwg cnRhYmxlKTsKKworCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9KT0lOKQorCQkJcmVzdWx0ID0g Ym1zX2FkZF9tZW1iZXIocmVzdWx0LCBydGkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOTBhMDhiNDFjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfc2Nhbi5oCisgKgkgIGFuYWx5c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMK KyAqCisgKiBGb3IgcHVycG9zZXMgb2YgdGhpcyBtb2R1bGUsIGEgInNjYW4iIGluY2x1ZGVzICgx KSBzaW5nbGUgcGxhbiBub2RlcyB0aGF0CisgKiBzY2FuIG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMg YSBkZWdlbmVyYXRlIFJlc3VsdCBub2RlIHRoYXQgcmVwbGFjZXMgd2hhdAorICogd291bGQgb3Ro ZXJ3aXNlIGhhdmUgYmVlbiBhIGpvaW4sIGFuZCAoMikgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBu b2RlcworICogaW1wbGVtZW50aW5nIGEgcGFydGl0aW9ud2lzZSBzY2FuIG9yIGEgcGFydGl0aW9u d2lzZSBqb2luLiBTYWlkCisgKiBkaWZmZXJlbnRseSwgc2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2Yg dGhlIGpvaW4gdHJlZSBmb3IgYSBzaW5nbGUgam9pbgorICogcHJvYmxlbS4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1NDQU5fSAorI2RlZmluZSBQR1BBX1NDQU5f SAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFf cGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7CisKKy8qCisgKiBT Y2FuIHN0cmF0ZWdpZXMuCisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGlzIGFueSBzY2FuIHN0 cmF0ZWd5IHRoYXQgaXNuJ3QgaW50ZXJlc3RpbmcgdG8gdXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMg bm8gbWVhbmluZ2Z1bCBwbGFubmVyIGRlY2lzaW9uIGludm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAq IHRoZSBvbmx5IHdheSB0byBzY2FuIGEgc3VicXVlcnkgaXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0 aGUgb25seSB3YXkgdG8KKyAqIHNjYW4gYSBWQUxVRVMgY29uc3RydWN0IGlzIGEgVmFsdWVzU2Nh bi4gV2UgbmVlZCBub3QgY2FyZSBleGFjdGx5IHdoaWNoCisgKiB0eXBlIG9mIHBsYW5uZXIgbm9k ZSB3YXMgdXNlZCBpbiBzdWNoIGNhc2VzLCBiZWNhdXNlIHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAq IGhhcHBlbiB3aGVuIHJlcGxhbm5pbmcuCisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGFsc28g aW5jbHVkZXMgUmVzdWx0IG5vZGVzIHRoYXQgY29ycmVzcG9uZCB0byBzY2FucworICogb3IgZXZl biBqb2lucyB0aGF0IGFyZSBwcm92ZWQgZW1wdHkuIFdlIGRvbid0IGtub3cgd2hldGhlciBvciBu b3QgdGhlIHNjYW4KKyAqIG9yIGpvaW4gd2lsbCBzdGlsbCBiZSBwcm92YWJseSBlbXB0eSBhdCBy ZXBsYW5uaW5nIHRpbWUsIGJ1dCBpZiBpdCBpcywKKyAqIHRoZW4gbm8gc2Nhbi10eXBlIGFkdmlj ZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCdzIG5vdCwgd2UgY2FuJ3QgcmVjb21tZW5kCisgKiBhIHNj YW4gdHlwZSBiYXNlZCBvbiB0aGUgY3VycmVudCBwbGFuLgorICoKKyAqIFBHUEFfU0NBTl9QQVJU SVRJT05XSVNFIGFsc28gbHVtcHMgdG9nZXRoZXIgc2NhbnMgYW5kIGpvaW5zOiB0aGlzIGNhbgor ICogYmUgZWl0aGVyIGEgcGFydGl0aW9ud2lzZSBzY2FuIG9mIGEgcGFydGl0aW9uZWQgdGFibGUg b3IgYSBwYXJ0aXRpb253aXNlCisgKiBqb2luIGJldHdlZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0 YWJsZXMuIE5vdGUgdGhhdCBhbGwgZGVjaXNpb25zIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0 byB1c2UgcGFydGl0aW9ud2lzZSBqb2luIGFyZSBtZWFuaW5nZnVsOiBubyBtYXR0ZXIgd2hhdAor ICogd2UgZGVjaWRlZCB0aGlzIHRpbWUsIHdlIGNvdWxkIGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdz IHBhcnRpdGlvbndpc2UgdGhlCisgKiBuZXh0IHRpbWUuCisgKgorICogUEdQQV9TQ0FOX0ZPUkVJ R04gaXMgb25seSB1c2VkIHdoZW4gdGhlcmUncyBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGludm9s dmVkOworICogYSBzaW5nbGUtdGFibGUgZm9yZWlnbiBzY2FuIGlzIGNsYXNzaWZpZWQgYXMgb3Jk aW5hcnksIHNpbmNlIHRoZXJlIGlzIG5vCisgKiBkZWNpc2lvbiB0byBtYWtlIGluIHRoYXQgY2Fz ZS4KKyAqCisgKiBPdGhlciBzY2FuIHN0cmF0ZWdpZXMgbWFwIG9uZS10by1vbmUgdG8gcGxhbiBu b2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9TQ0FOX09SRElOQVJZID0gMCwKKwlQ R1BBX1NDQU5fU0VRLAorCVBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlH TiwKKwlQR1BBX1NDQU5fSU5ERVgsCisJUEdQQV9TQ0FOX0lOREVYX09OTFksCisJUEdQQV9TQ0FO X1BBUlRJVElPTldJU0UsCisJUEdQQV9TQ0FOX1RJRAorCS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FO X1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRl Z3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJ RCArIDEpCisKKy8qCisgKiBBbGwgb2YgdGhlIGRldGFpbHMgd2UgbmVlZCByZWdhcmRpbmcgYSBz Y2FuLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NjYW4KK3sKKwlQbGFuCSAgICpwbGFuOwor CXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneTsKKwlCaXRtYXBzZXQgICpyZWxpZHM7CisJYm9v bAkJYmVuZWF0aF9hbnlfZ2F0aGVyOworfSBwZ3BhX3NjYW47CisKK2V4dGVybiBwZ3BhX3NjYW4g KnBncGFfYnVpbGRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAq cGxhbiwKKwkJCQkJCQkJICBFbGlkZWROb2RlICplbGlkZWRfbm9kZSwKKwkJCQkJCQkJICBib29s IGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0p OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2Fu bmVyLmwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZTdkN2JhMTNhNgotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKQEAgLTAsMCArMSwyOTkg QEAKKyV0b3B7CisvKgorICogU2Nhbm5lciBmb3IgcGxhbiBhZHZpY2UKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgIm5v ZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCisKKyNpbmNsdWRl ICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8qCisgKiBFeHRyYSBk YXRhIHRoYXQgd2UgcGFzcyBhcm91bmQgd2hlbiBkdXJpbmcgc2Nhbm5pbmcuCisgKgorICogJ2xp dGJ1ZicgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDx4ZD4gZXhjbHVzaXZlIHN0YXRlLCB3aGlj aCBoYW5kbGVzCisgKiBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX3l5X2V4dHJhX3R5cGUKK3sKKwlTdHJpbmdJbmZvRGF0YQlsaXRidWY7Cit9IHBn cGFfeXlfZXh0cmFfdHlwZTsKKworfQorCisleworLyogTENPVl9FWENMX1NUQVJUICovCisKKyNk ZWZpbmUgWVlfREVDTCBcCisJZXh0ZXJuIGludCBwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5 bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwgXAorCQkJCQkJICBjaGFyICoqcGFyc2VfZXJyb3Jf bXNnX3AsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworLyogTm8gcmVhc29uIHRvIGNvbnN0cmFpbiBh bW91bnQgb2YgZGF0YSBzbHVycGVkICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTY3Nzcy MTYKKworLyogQXZvaWQgZXhpdCgpIG9uIGZhdGFsIHNjYW5uZXIgZXJyb3JzIChhIGJpdCB1Z2x5 IC0tIHNlZSB5eV9mYXRhbF9lcnJvcikgKi8KKyN1bmRlZiBmcHJpbnRmCisjZGVmaW5lIGZwcmlu dGYoZmlsZSwgZm10LCBtc2cpICBmcHJpbnRmX3RvX2VyZXBvcnQoZm10LCBtc2cpCisKK3N0YXRp YyB2b2lkCitmcHJpbnRmX3RvX2VyZXBvcnQoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpt c2cpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycm1zZ19pbnRlcm5hbCgiJXMiLCBtc2cpKSk7Cit9 CislfQorCislb3B0aW9uIHJlZW50cmFudAorJW9wdGlvbiBiaXNvbi1icmlkZ2UKKyVvcHRpb24g OGJpdAorJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiBub2RlZmF1bHQKKyVvcHRp b24gbm9pbnB1dAorJW9wdGlvbiBub3VucHV0Cislb3B0aW9uIG5veXl3cmFwCislb3B0aW9uIG5v eXlhbGxvYworJW9wdGlvbiBub3l5cmVhbGxvYworJW9wdGlvbiBub3l5ZnJlZQorJW9wdGlvbiB3 YXJuCislb3B0aW9uIHByZWZpeD0icGdwYV95eSIKKyVvcHRpb24gZXh0cmEtdHlwZT0icGdwYV95 eV9leHRyYV90eXBlICoiCisKKy8qCisgKiBXaGF0IGZvbGxvd3MgaXMgYSBzZXZlcmVseSBzdHJp cHBlZC1kb3duIHZlcnNpb24gb2YgdGhlIGNvcmUgc2Nhbm5lci4gV2UKKyAqIG9ubHkgY2FyZSBh Ym91dCByZWNvZ25pemluZyBpZGVudGlmaWVycyB3aXRoIG9yIHdpdGhvdXQgaWRlbnRpZmllciBx dW90aW5nCisgKiAoaS5lLiBkb3VibGUtcXVvdGluZyksIGRlY2ltYWwgaW50ZWdlcnMsIGFuZCBh IHNtYWxsIGhhbmRmdWwgb2Ygb3RoZXIKKyAqIHRoaW5ncy4gS2VlcCB0aGVzZSBydWxlcyBpbiBz eW5jIHdpdGggc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubC4gQXMgaW4gdGhhdAorICogZmlsZSwg d2UgdXNlIGFuIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hjJyBmb3IgQy1zdHlsZSBjb21tZW50 cywgYW5kIGFuCisgKiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4ZCcgZm9yIGRvdWJsZS1xdW90 ZWQgaWRlbnRpZmllcnMuCisgKi8KKyV4IHhjCisleCB4ZAorCitpZGVudF9zdGFydAkJW0EtWmEt elwyMDAtXDM3N19dCitpZGVudF9jb250CQlbQS1aYS16XDIwMC1cMzc3XzAtOVwkXQorCitpZGVu dGlmaWVyCQl7aWRlbnRfc3RhcnR9e2lkZW50X2NvbnR9KgorCitkZWNkaWdpdAkJWzAtOV0KK2Rl Y2ludGVnZXIJCXtkZWNkaWdpdH0oXz97ZGVjZGlnaXR9KSoKKworc3BhY2UJCQlbIFx0XG5cclxm XHZdCit3aGl0ZXNwYWNlCQl7c3BhY2V9KworCitkcXVvdGUJCQlcIgoreGRzdGFydAkJCXtkcXVv dGV9Cit4ZHN0b3AJCQl7ZHF1b3RlfQoreGRkb3VibGUJCXtkcXVvdGV9e2RxdW90ZX0KK3hkaW5z aWRlCQlbXiJdKworCit4Y3N0YXJ0CQkJXC9cKgoreGNzdG9wCQkJXCorXC8KK3hjaW5zaWRlCQlb XiovXSsKKworJSUKKwore3doaXRlc3BhY2V9CXsgLyogaWdub3JlICovIH0KKwore2lkZW50aWZp ZXJ9CXsKKwkJCQkJY2hhciAgICpzdHI7CisJCQkJCWJvb2wJZmFpbDsKKwkJCQkJcGdwYV9hZHZp Y2VfdGFnX3R5cGUJdGFnOworCisJCQkJCS8qCisJCQkJCSAqIFVubGlrZSB0aGUgY29yZSBzY2Fu bmVyLCB3ZSBkb24ndCB0cnVuY2F0ZSBpZGVudGlmaWVycworCQkJCQkgKiBoZXJlLiBUaGVyZSBp cyBubyBvYnZpb3VzIHJlYXNvbiB0byBkbyBzby4KKwkJCQkJICovCisJCQkJCXN0ciA9IGRvd25j YXNlX2lkZW50aWZpZXIoeXl0ZXh0LCB5eWxlbmcsIGZhbHNlLCBmYWxzZSk7CisJCQkJCXl5bHZh bC0+c3RyID0gc3RyOworCisJCQkJCS8qCisJCQkJCSAqIElmIGl0J3Mgbm90IGEgdGFnLCBqdXN0 IHJldHVybiBUT0tfSURFTlQ7IGVsc2UsIHJldHVybgorCQkJCQkgKiBhIHRva2VuIHR5cGUgYmFz ZWQgb24gaG93IGZ1cnRoZXIgcGFyc2luZyBzaG91bGQKKwkJCQkJICogcHJvY2VlZC4KKwkJCQkJ ICovCisJCQkJCXRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZyhzdHIsICZmYWlsKTsKKwkJCQkJ aWYgKGZhaWwpCisJCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCQllbHNlIGlmICh0YWcgPT0g UEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0pPSU5fT1JERVI7CisJ CQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9 PSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pCisJCQkJCQlyZXR1cm4gVE9LX1RBR19JTkRFWDsK KwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4pCisJCQkJCQly ZXR1cm4gVE9LX1RBR19CSVRNQVA7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19TRVFf U0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4gfHwKKwkJCQkJCQkgdGFn ID09IFBHUEFfVEFHX05PX0dBVEhFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX1NJTVBMRTsKKwkJ CQkJZWxzZQorCQkJCQkJcmV0dXJuIFRPS19UQUdfR0VORVJJQzsKKwkJCQl9CisKK3tkZWNpbnRl Z2VyfQl7CisJCQkJCWNoYXIgICAqZW5kcHRyOworCisJCQkJCWVycm5vID0gMDsKKwkJCQkJeXls dmFsLT5pbnRlZ2VyID0gc3RydG9pbnQoeXl0ZXh0LCAmZW5kcHRyLCAxMCk7CisJCQkJCWlmICgq ZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gPT0gRVJBTkdFKQorCQkJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiaW50ZWdlciBv dXQgb2YgcmFuZ2UiKTsKKwkJCQkJcmV0dXJuIFRPS19JTlRFR0VSOworCQkJCX0KKwore3hjc3Rh cnR9CQl7CisJCQkJCUJFR0lOKHhjKTsKKwkJCQl9CisKK3t4ZHN0YXJ0fQkJeworCQkJCQlCRUdJ Tih4ZCk7CisJCQkJCXJlc2V0U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmKTsKKwkJCQl9CisK KyJ8fCIJCQl7IHJldHVybiBUT0tfT1I7IH0KKworIiYmIgkJCXsgcmV0dXJuIFRPS19BTkQ7IH0K KworLgkJCQl7IHJldHVybiB5eXRleHRbMF07IH0KKworPHhjPnt4Y3N0b3B9CXsKKwkJCQkJQkVH SU4oSU5JVElBTCk7CisJCQkJfQorCis8eGM+e3hjaW5zaWRlfQl7CisJCQkJCS8qIGRpc2NhcmQg bXVsdGlwbGUgY2hhcmFjdGVycyB3aXRob3V0IHNsYXNoIG9yIGFzdGVyaXNrICovCisJCQkJfQor Cis8eGM+LgkJCXsKKwkJCQkJLyoKKwkJCQkJICogRGlzY2FyZCBhbnkgc2luZ2xlIGNoYXJhY3Rl ci4gZmxleCBwcmVmZXJzIGxvbmdlcgorCQkJCQkgKiBtYXRjaGVzLCBzbyB0aGlzIHJ1bGUgd2ls bCBuZXZlciBiZSBwaWNrZWQgd2hlbiB3ZSBjb3VsZAorCQkJCQkgKiBoYXZlIG1hdGNoZWQgeGNz dG9wLgorCQkJCQkgKgorCQkJCQkgKiBOQjogQXQgcHJlc2VudCwgd2UgZG9uJ3QgYm90aGVyIHRv IHN1cHBvcnQgbmVzdGVkCisJCQkJCSAqIEMtc3R5bGUgY29tbWVudHMgaGVyZSwgYnV0IHRoaXMg bG9naWMgY291bGQgYmUgZXh0ZW5kZWQKKwkJCQkJICogaWYgdGhhdCByZXN0cmljdGlvbiBwb3Nl cyBhIHByb2JsZW0uCisJCQkJCSAqLworCQkJCX0KKworPHhjPjw8RU9GPj4JCXsKKwkJCQkJQkVH SU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19w LCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVkIGNvbW1lbnQiKTsKKwkJCQl9CisK Kzx4ZD57eGRzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQl5eWx2YWwtPnN0ciA9 IHBzdHJkdXAoeXlleHRyYS0+bGl0YnVmLmRhdGEpOworCQkJCQlyZXR1cm4gVE9LX0lERU5UOwor CQkJCX0KKworPHhkPnt4ZGRvdWJsZX0JeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmeXll eHRyYS0+bGl0YnVmLCAnIicpOworCQkJCX0KKworPHhkPnt4ZGluc2lkZX0JeworCQkJCQlhcHBl bmRCaW5hcnlTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYsIHl5dGV4dCwgeXlsZW5nKTsKKwkJ CQl9CisKKzx4ZD48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5 ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVu dGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciIpOworCQkJCX0KKworJSUKKworLyogTENPVl9F WENMX1NUT1AgKi8KKworLyoKKyAqIEhhbmRsZXIgZm9yIGVycm9ycyB3aGlsZSBzY2FubmluZyBv ciBwYXJzaW5nIGFkdmljZS4KKyAqCisgKiBiaXNvbiBwYXNzZXMgdGhlIGVycm9yIG1lc3NhZ2Ug dG8gdXMgdmlhICdtZXNzYWdlJywgYW5kIHRoZSBjb250ZXh0IGlzCisgKiBhdmFpbGFibGUgdmlh IHRoZSAneXl0ZXh0JyBtYWNyby4gV2UgYXNzZW1ibGUgdGhvc2UgdmFsdWVzIGludG8gYSBmaW5h bAorICogZXJyb3IgdGV4dCBhbmQgdGhlbiBhcnJhbmdlIHRvIHBhc3MgaXQgYmFjayB0byB0aGUg Y2FsbGVyIG9mIHBncGFfeXlwYXJzZSgpCisgKiBieSBzdG9yaW5nIGl0IGludG8gKnBhcnNlX2Vy cm9yX21zZ19wLgorICovCit2b2lkCitwZ3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAq KnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkgY29uc3QgY2hhciAq bWVzc2FnZSkKK3sKKwlzdHJ1Y3QgeXlndXRzX3QgKnl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QgKikg eXlzY2FubmVyOwkvKiBuZWVkZWQgZm9yIHl5dGV4dAorCQkJCQkJCQkJCQkJCQkJICogbWFjcm8g Ki8KKworCisJLyogcmVwb3J0IG9ubHkgdGhlIGZpcnN0IGVycm9yIGluIGEgcGFyc2Ugb3BlcmF0 aW9uICovCisJaWYgKCpwYXJzZV9lcnJvcl9tc2dfcCkKKwkJcmV0dXJuOworCisJaWYgKHl5dGV4 dFswXSkKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IG9yIG5lYXIgXCIl c1wiIiwgbWVzc2FnZSwgeXl0ZXh0KTsKKwllbHNlCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBz cHJpbnRmKCIlcyBhdCBlbmQgb2YgaW5wdXQiLCBtZXNzYWdlKTsKK30KKworLyoKKyAqIEluaXRp YWxpemUgdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBi ZWZvcmUgcGFyc2luZyBiZWdpbnMuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9pbml0KGNvbnN0 IGNoYXIgKnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5lcnApCit7CisJeXlzY2FuX3QJeXlzY2FubmVy OworCXBncGFfeXlfZXh0cmFfdHlwZQkqeXlleHQgPSBwYWxsb2MwX29iamVjdChwZ3BhX3l5X2V4 dHJhX3R5cGUpOworCisJaWYgKHl5bGV4X2luaXQoeXlzY2FubmVycCkgIT0gMCkKKwkJZWxvZyhF UlJPUiwgInl5bGV4X2luaXQoKSBmYWlsZWQ6ICVtIik7CisKKwl5eXNjYW5uZXIgPSAqeXlzY2Fu bmVycDsKKworCWluaXRTdHJpbmdJbmZvKCZ5eWV4dC0+bGl0YnVmKTsKKwlwZ3BhX3l5c2V0X2V4 dHJhKHl5ZXh0LCB5eXNjYW5uZXIpOworCisJeXlfc2Nhbl9zdHJpbmcoc3RyLCB5eXNjYW5uZXIp OworfQorCisKKy8qCisgKiBTaHV0IGRvd24gdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRo aXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlLgorICovCit2b2lk CitwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eWxleF9kZXN0 cm95KHl5c2Nhbm5lcik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgZnVuY3Rpb25zIHRvIG1ha2Ug ZmxleCB1c2UgcGFsbG9jKCkgaW5zdGVhZCBvZiBtYWxsb2MoKS4KKyAqIEl0J2QgYmUgYmV0dGVy IHRvIG1ha2UgdGhlc2Ugc3RhdGljLCBidXQgZmxleCBpbnNpc3RzIG90aGVyd2lzZS4KKyAqLwor Cit2b2lkICoKK3l5YWxsb2MoeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK KwlyZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2b2lkICoKK3l5cmVhbGxvYyh2b2lkICpwdHIs IHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikKKwkJcmV0 dXJuIHJlcGFsbG9jKHB0ciwgc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gcGFsbG9jKHNpemUpOwor fQorCit2b2lkCit5eWZyZWUodm9pZCAqcHRyLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYg KHB0cikKKwkJcGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE5MjEyMWZlYjFkCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTAsMCAr MSw0OTAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuYworICoJICBB bGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0 ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIFRoaXMg bmFtZSBjb21lcyBmcm9tIHRoZSBFbmdsaXNoIGV4cHJlc3Npb24gInRyb3ZlIG9mIGFkdmljZSIs IHdoaWNoCisgKiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygd2lzZG9tLiBUaGlzIHNsaWdodGx5IHVu dXN1YWwgdGVybSBpcyBjaG9zZW4gdG8KKyAqIGF2b2lkIG5hbWluZyBjb25mdXNpb247IGZvciBl eGFtcGxlLCAiY29sbGVjdGlvbiBvZiBhZHZpY2UiIHdvdWxkCisgKiBpbnZpdGUgY29uZnVzaW9u IHdpdGggcGdwYV9jb2xsZWN0b3IuYy4gTm90ZSB0aGF0LCB3aGlsZSB3ZSBkb24ndCBrbm93Cisg KiB3aGV0aGVyIHRoZSBwcm92aWRlZCBhZHZpY2UgaXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qg b3VyIGpvYiB0bworICogcXVlc3Rpb24gdGhlIHVzZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBn b2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNp ZmljCisgKiBiaXRzIG9mIGFkdmljZSB0aGF0IHBlcnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2Yg YSBxdWVyeSwgb3IgdG8KKyAqIGRldGVybWluZSB0aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJwZ3BhX3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisK Ky8qCisgKiBBbiBhZHZpY2UgdHJvdmUgaXMgb3JnYW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNs aWNlcyIsIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0 b3BpYyBlLmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBzbGljZSBjb25zaXN0cworICogb2YgYW4gYXJy YXkgb2YgdHJvdmUgZW50cmllcyBwbHVzIGEgaGFzaCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8g ZGV0ZXJtaW5lCisgKiB3aGljaCBvbmVzIGFyZSByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFy dCBvZiB0aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sK Kwl1bnNpZ25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50 cnkgKmVudHJpZXM7CisJc3RydWN0IHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdw YV90cm92ZV9zbGljZTsKKworLyoKKyAqIFNjYW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2Fu Jzsgam9pbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0 IGNhbiBhcHBseSB0byBib3RoIGNhc2VzIGlzIHN0b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMg Y2FsbGVycworICogYXNrIGp1c3QgZm9yIHdoYXQncyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNv cnJlc3BvbmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICogb2YgcGdwYV90cm92ZV9sb29rdXBf dHlwZS4KKyAqLworc3RydWN0IHBncGFfdHJvdmUKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47 CisJcGdwYV90cm92ZV9zbGljZSByZWw7CisJcGdwYV90cm92ZV9zbGljZSBzY2FuOworfTsKKwor LyoKKyAqIFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEgaGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRz IG9mIHRoaXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJlbGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBw YXJ0IG9mIHRoZSBxdWVyeSBxdWlja2x5LiBIb3dldmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNl IG9ubHkgdGhyZWUgb2YgdGhlIGZpdmUga2V5IGZpZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFy ZSB0d28gcmVhc29ucworICogZm9yIHRoaXMuCisgKgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxl IHRvIHNldCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5VTEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAq IHdpdGggdGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkgc2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2Ug ZXhwZWN0IHRoZSAib2NjdXJyZW5jZSIgYW5kICJwYXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBv ZiB0aGUKKyAqIHJlbGF0aW9uIGlkZW50aWZpZXJzIHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5n LiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9jY3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFu ZCB0aGUgcGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMgd2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBF dmVuIHdoZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRpb24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2Yg ZW50cmllcworICogdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRo ZXNlIGtleSBmaWVsZHMgc2hvdWxkIGJlCisgKiBxdWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlv bl9uYW1lOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7 CisKK3R5cGVkZWYgc3RydWN0Cit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJ CXN0YXR1czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1l bnQ7CisKK3N0YXRpYyB1aW50MzIgcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3Zl X2VudHJ5X2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlf Y29tcGFyZV9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkg YikKK3sKKwlpZiAoc3RyY21wKGEuYWxpYXNfbmFtZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0 aW9uX25hbWUsIGIucGFydGl0aW9uX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0 cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBn cGFfdHJvdmVfZW50cnkKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5 X2VsZW1lbnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2Rl ZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJv dmVfZW50cnlfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90 cm92ZV9lbnRyeV9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBp bmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJs aWIvc2ltcGxlaGFzaC5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdw YV90cm92ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3Ns aWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190 eXBlIHRhZywKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2 b2lkIHBncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAor CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGlu ZGV4KTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJv dmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKwor LyoKKyAqIEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVt cy4KKyAqCisgKiBDYWxsZXIgY2FuIG9idGFpbiBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBh c3MgdG8gdGhpcyBmdW5jdGlvbiBieQorICogY2FsbGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3Bn cGFfdHJvdmUgKgorcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdw YV90cm92ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0 X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+am9pbik7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92 ZS0+cmVsKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVh Y2hfcHRyKHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRj aCAoaXRlbS0+dGFnKQorCQl7CisJCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkJewor CQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3Ig bW9zdCBhZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVudCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAq IGxpc3QgaXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bwor CQkJCQkgKiByZWdhcmQgdGhlIGVudGlyZXR5IG9mIGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9u IGFzIGEKKwkJCQkJICogc2luZ2xlIHRhcmdldC4gU2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVk IHRoYXQgd2F5CisJCQkJCSAqIGR1cmluZyBwYXJzaW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmpl Y3Qgbm93LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZp Y2VfdGFyZ2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElT VDsKKwkJCQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90 cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRh cmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQ X1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9U QUdfSU5ERVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFf VEFHX1RJRF9TQ0FOOgorCisJCQkJLyoKKwkJCQkgKiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJ CQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykK KwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvciBub3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0 YXJnZXQgc2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBt aWdodCBub3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3RvbQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxh Y2UgYSBqb2luLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUik7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+ c2NhbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hf Sk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2Ug UEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9J Tl9OT05fVU5JUVVFOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkv KgorCQkJCSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJ cGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50 YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJ VElPTldJU0U6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FU SEVSX01FUkdFOgorCQkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAq IEFkdmljZSBhYm91dCBhIFJlbE9wdEluZm8gcmVsZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9p bnMuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQs IGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJv dmUtPnJlbCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVh azsKKwkJfQorCX0KKworCXJldHVybiB0cm92ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3Zl IG9mIGFkdmljZSBmb3IgcmVsZXZhbnQgZW50cmllcy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBh cmUgaW5wdXQgcGFyYW1ldGVycyBleGNlcHQgZm9yICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1 dAorICogcGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAq Lwordm9pZAorcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkgIGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRz LCBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGlj ZTsKKwlCaXRtYXBzZXQgICppbmRleGVzOworCisJQXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAo dHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47 CisJZWxzZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAm dHJvdmUtPmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMg PSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBp ID0gMTsgaSA8IG5yaWRzOyArK2kpCisJeworCQlCaXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOwor CisJCS8qCisJCSAqIElmIHRoZSBjYWxsZXIgaXMgYXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMg dGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUKKwkJICogc2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNz ZWQgdXAuCisJCSAqLworCQlBc3NlcnQoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkc1sw XS5wbGFuX25hbWUsCisJCQkJCQkJCQkJICByaWRzW2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVy X2luZGV4ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJ aW5kZXhlcyA9IGJtc191bmlvbihpbmRleGVzLCBvdGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1 bHQtPmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhl czsKK30KKworLyoKKyAqIFJldHVybiBhbGwgZW50cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRo ZSBjYWxsZXIuCisgKgorICogVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3Vt ZW50cywgYW5kIHRoZSByZW1haW5kZXIgYXJlIG91dHB1dAorICogYXJndW1lbnRzLgorICovCit2 b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50 ICpuZW50cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9 PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxz ZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUt PmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNs aWNlLT5lbnRyaWVzOworCSpuZW50cmllcyA9IHRzbGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBD b252ZXJ0IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRlbSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxk IHByb2R1Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFf dHJvdmVfZW50cnkgKmVudHJ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJp bmdJbmZvKCZidWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5n X2FkdmljZV90YWcoZW50cnktPnRhZykpOworCisJLyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFu c2Zvcm1lZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRy eS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZi dWYsICcoJyk7CisJZWxzZQorCQlBc3NlcnQoZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUKTsKKworCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1Ziwg ZW50cnktPnRhcmdldCk7CisKKwlpZiAoZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQor CXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5k ZXhfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQtPml0YXJnZXQpOworCX0KKworCWlmIChlbnRy eS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZi dWYsICcpJyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8q IGZsYWdzIG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJpZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVf c2V0X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywg aW50IGZsYWdzKQoreworCWludAkJCWkgPSAtMTsKKworCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihpbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0g JmVudHJpZXNbaV07CisKKwkJZW50cnktPmZsYWdzIHw9IGZsYWdzOworCX0KK30KKworLyoKKyAq IEFkZCBhIG5ldyBhZHZpY2UgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIHBncGFfdHJvdmVfc2xpY2Ug b2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90 cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJ CQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50 cnk7CisKKwlpZiAodHNsaWNlLT5udXNlZCA+PSB0c2xpY2UtPm5hbGxvY2F0ZWQpCisJeworCQlp bnQJCQluZXdfYWxsb2NhdGVkOworCisJCW5ld19hbGxvY2F0ZWQgPSB0c2xpY2UtPm5hbGxvY2F0 ZWQgKiAyOworCQl0c2xpY2UtPmVudHJpZXMgPSByZXBhbGxvY19hcnJheSh0c2xpY2UtPmVudHJp ZXMsIHBncGFfdHJvdmVfZW50cnksCisJCQkJCQkJCQkJIG5ld19hbGxvY2F0ZWQpOworCQl0c2xp Y2UtPm5hbGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVkOworCX0KKworCWVudHJ5ID0gJnRzbGljZS0+ ZW50cmllc1t0c2xpY2UtPm51c2VkXTsKKwllbnRyeS0+dGFnID0gdGFnOworCWVudHJ5LT50YXJn ZXQgPSB0YXJnZXQ7CisJZW50cnktPmZsYWdzID0gMDsKKworCXBncGFfdHJvdmVfYWRkX3RvX2hh c2godHNsaWNlLT5oYXNoLCB0YXJnZXQsIHRzbGljZS0+bnVzZWQpOworCisJdHNsaWNlLT5udXNl ZCsrOworfQorCisvKgorICogVXBkYXRlIHRoZSBoYXNoIHRhYmxlIGZvciBhIG5ld2x5LWFkZGVk IGFkdmljZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19oYXNo KHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQs CisJCQkJCSAgIGludCBpbmRleCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdw YV90cm92ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50OworCWJvb2wJCWZvdW5kOworCisJLyogRm9y IG5vbi1pZGVudGlmaWVycywgYWRkIGVudHJpZXMgZm9yIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlp ZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFj aF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4p CisJCXsKKwkJCXBncGFfdHJvdmVfYWRkX3RvX2hhc2goaGFzaCwgY2hpbGRfdGFyZ2V0LCBpbmRl eCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIFNhbml0eSBjaGVja3MuICovCisJQXNzZXJ0 KHRhcmdldC0+cmlkLm9jY3VycmVuY2UgPiAwKTsKKwlBc3NlcnQodGFyZ2V0LT5yaWQuYWxpYXNf bmFtZSAhPSBOVUxMKTsKKworCS8qIEFkZCBhbiBlbnRyeSBmb3IgdGhpcyByZWxhdGlvbiBpZGVu dGlmaWVyLiAqLworCWtleS5hbGlhc19uYW1lID0gdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZTsKKwlr ZXkucGFydGl0aW9uX25hbWUgPSB0YXJnZXQtPnJpZC5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUg PSB0YXJnZXQtPnJpZC5wbGFuX25hbWU7CisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlfaW5z ZXJ0KGhhc2gsIGtleSwgJmZvdW5kKTsKKwllbGVtZW50LT5pbmRleGVzID0gYm1zX2FkZF9tZW1i ZXIoZWxlbWVudC0+aW5kZXhlcywgaW5kZXgpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0 aWFsaXplIGEgbmV3IHBncGFfdHJvdmVfc2xpY2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAor cGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSkKK3sKKwkvKgor CSAqIEluIGFuIGlkZWFsIHdvcmxkLCB3ZSdsbCBtYWtlIHRzbGljZS0+bmFsbG9jYXRlZCBiaWcg ZW5vdWdoIHRoYXQgdGhlCisJICogYXJyYXkgYW5kIGhhc2ggdGFibGUgd2lsbCBiZSBsYXJnZSBl bm91Z2ggdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mCisJICogYWR2aWNlIGl0ZW1zIGluIHRoaXMg dHJvdmUgc2xpY2UsIGJ1dCBhIGdlbmVyb3VzIGRlZmF1bHQgdmFsdWUgaXMgbm90CisJICogZ29v ZCBmb3IgcGVyZm9ybWFuY2UsIGJlY2F1c2UgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCkgaGFzIHRv IHplcm8gYW4KKwkgKiBhbW91bnQgb2YgbWVtb3J5IHByb3BvcnRpb25hbCB0byB0c2xpY2UtPm5h bGxvY2F0ZWQuIEhlbmNlLCB3ZSBrZWVwIHRoZQorCSAqIHN0YXJ0aW5nIHZhbHVlIHF1aXRlIHNt YWxsLCBvbiB0aGUgdGhlb3J5IHRoYXQgYWR2aWNlIHN0cmluZ3Mgd2lsbAorCSAqIG9mdGVuIGJl IHJlbGF0aXZlbHkgc2hvcnQuCisJICovCisJdHNsaWNlLT5uYWxsb2NhdGVkID0gMTY7CisJdHNs aWNlLT5udXNlZCA9IDA7CisJdHNsaWNlLT5lbnRyaWVzID0gcGFsbG9jX2FycmF5KHBncGFfdHJv dmVfZW50cnksIHRzbGljZS0+bmFsbG9jYXRlZCk7CisJdHNsaWNlLT5oYXNoID0gcGdwYV90cm92 ZV9lbnRyeV9jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICAgdHNsaWNl LT5uYWxsb2NhdGVkLCBOVUxMKTsKK30KKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3Ig YSBrZXkgY29uc2lzdGluZyBvZiBhbGlhc19uYW1lLCBwYXJ0aXRpb25fbmFtZSwKKyAqIGFuZCBw bGFuX25hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfdHJvdmVfZW50cnlfaGFzaF9rZXko cGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJ CXNwX2xlbjsKKworCWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCS8qIGFsaWFzX25hbWUgbWF5 IG5vdCBiZSBOVUxMICovCisJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtl eS5hbGlhc19uYW1lKTsKKworCS8qIHBhcnRpdGlvbl9uYW1lIGFuZCBwbGFuX25hbWUsIGhvd2V2 ZXIsIGNhbiBiZSBOVUxMICovCisJaWYgKGtleS5wYXJ0aXRpb25fbmFtZSAhPSBOVUxMKQorCQlz cF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wYXJ0aXRpb25fbmFtZSk7 CisJaWYgKGtleS5wbGFuX25hbWUgIT0gTlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3Vt X2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKworCS8qCisJICogaGFzaGZuX3Vuc3RhYmxl LmggcmVjb21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrLiBJdCdzIG5vdAorCSAq IGNsZWFyIHRvIG1lIHdoYXQgdG8gZG8gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MsIHNv IGZvciBub3cgSSdtCisJICoganVzdCB1c2luZyB0aGUgdG90YWwgb2YgYWxsIG9mIHRoZSBsZW5n dGhzLgorCSAqLworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKwor LyoKKyAqIExvb2sgZm9yIG1hdGNoaW5nIGVudHJpZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQg KgorcGdwYV90cm92ZV9zbGljZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLCBwZ3Bh X2lkZW50aWZpZXIgKnJpZCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90 cm92ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7 CisKKwlBc3NlcnQocmlkLT5vY2N1cnJlbmNlID49IDEpOworCisJa2V5LmFsaWFzX25hbWUgPSBy aWQtPmFsaWFzX25hbWU7CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gcmlkLT5wYXJ0cmVsOworCWtl eS5wbGFuX25hbWUgPSByaWQtPnBsYW5fbmFtZTsKKworCWVsZW1lbnQgPSBwZ3BhX3Ryb3ZlX2Vu dHJ5X2xvb2t1cCh0c2xpY2UtPmhhc2gsIGtleSk7CisKKwlpZiAoZWxlbWVudCAhPSBOVUxMKQor CXsKKwkJaW50CQkJaSA9IC0xOworCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihlbGVt ZW50LT5pbmRleGVzLCBpKSkgPj0gMCkKKwkJeworCQkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkg PSAmdHNsaWNlLT5lbnRyaWVzW2ldOworCisJCQkvKgorCQkJICogV2Uga25vdyB0aGF0IHRoaXMg dGFyZ2V0IG9yIG9uZSBvZiBpdHMgZGVzY2VuZGVudHMgbWF0Y2hlcyB0aGUKKwkJCSAqIGlkZW50 aWZpZXIgb24gdGhlIHRocmVlIGtleSBmaWVsZHMgYWJvdmUsIGJ1dCB3ZSBkb24ndCBrbm93CisJ CQkgKiB3aGljaCBkZXNjZW5kZW50IG9yIHdoZXRoZXIgdGhlIG9jY3VyZW5jZSBhbmQgc2NoZW1h IGFsc28KKwkJCSAqIG1hdGNoLgorCQkJICovCisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNo ZXNfdGFyZ2V0KHJpZCwgZW50cnktPnRhcmdldCkpCisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1i ZXIocmVzdWx0LCBpKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV90cm92ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40NzljM2Y3NTc3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX3Ryb3ZlLmgKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGlj dWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50 IGFjY2Vzcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9UUk9W RV9ICisjZGVmaW5lIFBHUEFfVFJPVkVfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2lu Y2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlIHBn cGFfdHJvdmU7CisKKy8qCisgKiBGbGFncyB0aGF0IGNhbiBiZSBzZXQgb24gYSBwZ3BhX3Ryb3Zl X2VudHJ5IHRvIGluZGljYXRlIHdoYXQgaGFwcGVuZWQgd2hlbgorICogdHJ5aW5nIHRvIHBsYW4g dXNpbmcgYWR2aWNlLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCBtZWFucyB0aGF0IHdl IGZvdW5kIHNvbWUgcGFydCBvZiB0aGUgcXVlcnkgdGhhdCBhdAorICogbGVhc3QgcGFydGlhbGx5 IG1hdGNoZWQgdGhlIHRhcmdldDsgZS5nLiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291 bGQKKyAqIGJlIHNldCBpZiB3ZSBldmVyIHNhdyBhbnkgam9pbnJlbCBpbmNsdWRpbmcgZWl0aGVy ICJhIiBvciAiYiIuCisgKgorICogUEdQQV9URV9NQVRDSF9GVUxMIG1lYW5zIHRoYXQgd2UgZm91 bmQgYW4gZXhhY3QgbWF0Y2ggZm9yIHRoZSB0YXJnZXQ7IGUuZy4KKyAqIGdpdmVuIEpPSU5fT1JE RVIoYSBiKSwgdGhpcyB3b3VsZCBiZSBzZXQgaWYgd2Ugc2F3IGEgam9pbnJlbCBjb250YWluaW5n CisgKiBleGFjdGx5ICJhIiBhbmQgImIiIGFuZCBub3RoaW5nIGVsc2UuCisgKgorICogUEdQQV9U RV9JTkFQUExJQ0FCTEUgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGRvZXNuJ3QgcHJvcGVybHkgYXBw bHkgdG8gdGhlCisgKiB0YXJnZXQ7IGUuZy4gSU5ERVhfU0NBTihmb28gYmFyX2lkeCkgd291bGQg YmUgc28gbWFya2VkIGlmIGJhcl9pZHggZG9lcyBub3QKKyAqIGV4aXN0IG9uIGZvby4gVGhlIGZh Y3QgdGhhdCB0aGlzIGJpdCBoYXMgYmVlbiBzZXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZQorICog YWR2aWNlIGhhZCBubyBlZmZlY3QuCisgKgorICogUEdQQV9URV9DT05GTElDVElORyBtZWFucyB0 aGF0IGEgY29uZmxpY3Qgd2FzIGRldGVjdGVkIGJldHdlZW4gd2hhdCB0aGlzCisgKiBhZHZpY2Ug d2FudHMgYW5kIHdoYXQgc29tZSBvdGhlciBwbGFuIGFkdmljZSB3YW50czsgZS5nLiBKT0lOX09S REVSKGEgYikKKyAqIHdvdWxkIGNvbmZsaWN0IHdpdGggSEFTSF9KT0lOKGEpLCBiZWNhdXNlIHRo ZSBmb3JtZXIgcmVxdWlyZXMgImEiIHRvIGJlIHRoZQorICogb3V0ZXIgdGFibGUgd2hpbGUgdGhl IGxhdHRlciByZXF1aXJlcyBpdCB0byBiZSB0aGUgaW5uZXIgdGFibGUuCisgKgorICogUEdQQV9U RV9GQUlMRUQgbWVhbnMgdGhhdCB0aGUgcmVzdWx0aW5nIHBsYW4gZGlkIG5vdCBjb25mb3JtIHRv IHRoZSBhZHZpY2UuCisgKi8KKyNkZWZpbmUgUEdQQV9URV9NQVRDSF9QQVJUSUFMCQkweDAwMDEK KyNkZWZpbmUgUEdQQV9URV9NQVRDSF9GVUxMCQkJMHgwMDAyCisjZGVmaW5lIFBHUEFfVEVfSU5B UFBMSUNBQkxFCQkweDAwMDQKKyNkZWZpbmUgUEdQQV9URV9DT05GTElDVElORwkJCTB4MDAwOAor I2RlZmluZSBQR1BBX1RFX0ZBSUxFRAkJCQkweDAwMTAKKworLyoKKyAqIEVhY2ggZW50cnkgaW4g YSB0cm92ZSBvZiBhZHZpY2UgcmVwcmVzZW50cyB0aGUgYXBwbGljYXRpb24gb2YgYSB0YWcgdG8K KyAqIGEgc2luZ2xlIHRhcmdldC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9lbnRy eQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldDsKKwlpbnQJCQlmbGFnczsKK30gcGdwYV90cm92ZV9lbnRyeTsKKworLyoKKyAqIFdoYXQg a2luZCBvZiBpbmZvcm1hdGlvbiBkb2VzIHRoZSBjYWxsZXIgd2FudCB0byBmaW5kIGluIGEgdHJv dmU/CisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfU0NBTiBtZWFucyB3ZSdyZSBsb29raW5nIGZv ciBzY2FuIGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIG1lYW5zIHdlJ3Jl IGxvb2tpbmcgZm9yIGpvaW4tcmVsYXRlZCBhZHZpY2UuCisgKiBUaGlzIGluY2x1ZGVzIGpvaW4g b3JkZXIgYWR2aWNlLCBqb2luIG1ldGhvZCBhZHZpY2UsIGFuZCBzZW1pam9pbi11bmlxdWVuZXNz CisgKiBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09LVVBfUkVMIG1lYW5zIHdlJ3JlIGxv b2tpbmcgZm9yIGdlbmVyYWwgYWR2aWNlIGFib3V0IHRoaXMKKyAqIGEgUmVsT3B0SW5mbyB0aGF0 IG1heSBjb3JyZXNwb25kIHRvIGVpdGhlciBhIHNjYW4gb3IgYSBqb2luLiBUaGlzIGluY2x1ZGVz CisgKiBnYXRoZXItcmVsYXRlZCBhZHZpY2UgYW5kIHBhcnRpdGlvbndpc2UgYWR2aWNlLiBOb3Rl IHRoYXQgcGFydGl0aW9ud2lzZQorICogYWR2aWNlIG1pZ2h0IHNlZW0gbGlrZSBqb2luIGFkdmlj ZSwgYnV0IHRoYXQncyBub3QgYSBoZWxwZnVsIHdheSBvZiB2aWV3aW5nCisgKiB0aGUgbWF0dGVy IGJlY2F1c2UgKDEpIHBhcnRpdGlvbndpc2UgYWR2aWNlIGlzIGFsc28gcmVsZXZhbnQgYXQgdGhl IHNjYW4KKyAqIGxldmVsIGFuZCAoMikgb3RoZXIgdHlwZXMgb2Ygam9pbiBhZHZpY2UgYWZmZWN0 IG9ubHkgd2hhdCB0byBkbyBmcm9tCisgKiBqb2luX3BhdGhfc2V0dXBfaG9vaywgYnV0IHBhcnRp dGlvbndpc2UgYWR2aWNlIGFmZmVjdHMgd2hhdCB0byBkbyBpbgorICogam9pbnJlbF9zZXR1cF9o b29rLgorICovCit0eXBlZGVmIGVudW0gcGdwYV90cm92ZV9sb29rdXBfdHlwZQoreworCVBHUEFf VFJPVkVfTE9PS1VQX0pPSU4sCisJUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCVBHUEFfVFJPVkVf TE9PS1VQX1NDQU4KK30gcGdwYV90cm92ZV9sb29rdXBfdHlwZTsKKworLyoKKyAqIFRoaXMgc3Ry dWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBhIHRyb3ZlIGxvb2t1cC4gRm9yIGVh Y2ggbWVtYmVyCisgKiBvZiAiaW5kZXhlcyIsIHRoZSBlbnRyeSBhdCB0aGUgY29ycmVzcG9uZGlu ZyBvZmZzZXQgd2l0aGluICJlbnRyaWVzIiBpcyBvbmUKKyAqIG9mIHRoZSByZXN1bHRzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3Jlc3VsdAoreworCXBncGFfdHJvdmVfZW50cnkg KmVudHJpZXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9yZXN1bHQ7CisK K2V4dGVybiBwZ3BhX3Ryb3ZlICpwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcyk7 CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJ CQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgIGludCBucmlkcywKKwkJ CQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfcmVzdWx0 ICpyZXN1bHQpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUg KnRyb3ZlLAorCQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJ ICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywKKwkJCQkJCQkJICBpbnQgKm5lbnRyaWVzKTsK K2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAq ZW50cnkpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRy eSAqZW50cmllcywKKwkJCQkJCQkJIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZsYWdzKTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdlNGUzODg2MDNhCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCkBAIC0wLDAgKzEsODYyIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5jCisgKgkgIFBsYW4gdHJlZSBpdGVy YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2lu Y2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwor c3RhdGljIHZvaWQgcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxl bSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCQkJ CSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJvb2wgYmVuZWF0aF9h bnlfZ2F0aGVyKTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2lu KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgcGdwYV91bnJv bGxlZF9qb2luICp1am9pbik7CisKK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnBncGFfYWRk X2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCXBn cGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworc3RhdGljIHZvaWQg cGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKTsK K3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LCBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9wbGFuX3J0aXMo TGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFuKTsKKworc3RhdGljIGJvb2wg cGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4s CisJCQkJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkgICBwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3Rhcmdl dCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpOworc3RhdGljIGJvb2wgcGdw YV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihwZ3BhX2pvaW5fbWVtYmVyICptZW1i ZXIsCisJCQkJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgIHBn cGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGlj IGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkJIEJp dG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkgIHBncGFfam9pbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGlj IGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBJ bmRleCBwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCSBw Z3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVy ICpyaWQpOworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQgZm9yIHRoZSBwbGFuIHRyZWUg d2Fsay4KKyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9uIGEgdHJhdmVyc2FsIG9mIHRo ZSBQbGFuIHRyZWVzIGluIHBzdG10LgorICovCit2b2lkCitwZ3BhX3BsYW5fd2Fsa2VyKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJTGlz dENlbGwgICAqbGM7CisKKwkvKiBJbml0aWFsaXphdGlvbi4gKi8KKwltZW1zZXQod2Fsa2VyLCAw LCBzaXplb2YocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0KSk7CisJd2Fsa2VyLT5wc3RtdCA9IHBz dG10OworCisJLyogV2FsayB0aGUgbWFpbiBwbGFuIHRyZWUuICovCisJcGdwYV93YWxrX3JlY3Vy c2l2ZWx5KHdhbGtlciwgcHN0bXQtPnBsYW5UcmVlLCAwLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwor CS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3QgcmVhY2ggc3VicGxhbnMsIHNvIHdhbGsgdGhv c2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1YnBsYW5zKQorCXsKKwkJUGxhbgkgICAqcGxh biA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4gIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1 cnNpdmVseSh3YWxrZXIsIHBsYW4sIDAsIE5VTEwsIE5JTCwgZmFsc2UpOworCX0KK30KKworLyoK KyAqIE1haW4gd29ya2hvcnNlIGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCisgKgorICogSWYgd2l0 aGluX2pvaW5fcHJvYmxlbSBpcyB0cnVlLCB3ZSBlbmNvdW50ZXJlZCBhIGpvaW4gYXQgc29tZSBo aWdoZXIgbGV2ZWwKKyAqIG9mIHRoZSB0cmVlIHdhbGsgYW5kIGhhdmVuJ3QgeWV0IGRlc2NlbmRl ZCBvdXQgb2YgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBpcyBwYXJ0IG9m IHRoYXQgc2FtZSBqb2luIHByb2JsZW0uIFdlJ3JlIG5vIGxvbmdlciBpbiB0aGUgc2FtZQorICog am9pbiBwcm9ibGVtIGlmICgxKSB3ZSBjcm9zcyBpbnRvIGEgZGlmZmVyZW50IHN1YnF1ZXJ5IG9y ICgyKSB3ZSBkZXNjZW5kCisgKiB0aHJvdWdoIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2Rl LCBiZWxvdyB3aGljaCBhbnkgZnVydGhlciBqb2lucyB3b3VsZAorICogYmUgcGFydGl0aW9ud2lz ZSBqb2lucyBwbGFubmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3V0ZXIgam9pbiBwcm9ibGVtLgor ICoKKyAqIElmIGpvaW5fdW5yb2xsZXIgIT0gTlVMTCwgdGhlIGpvaW4gdW5yb2xsZXIgY29kZSBl eHBlY3RzIHVzIHRvIGZpbmQgYSBqb2luCisgKiB0aGF0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRv IHRoYXQgb2JqZWN0LiBUaGlzIGltcGxpZXMgdGhhdCB3ZSdyZSB3aXRoaW4gYQorICogam9pbiBw cm9ibGVtLCBidXQgdGhlIHJldmVyc2UgaXMgbm90IHRydWU6IHdoZW4gd2UndmUgdHJhdmVyc2Vk IGFsbCB0aGUKKyAqIGpvaW5zIGJ1dCBhcmUgc3RpbGwgbG9va2luZyBmb3IgdGhlIHNjYW4gdGhh dCBpcyB0aGUgbGVhZiBvZiB0aGUgam9pbiB0cmVlLAorICogam9pbl91bnJvbGxlciB3aWxsIGJl IE5VTEwgYnV0IHdpdGhpbl9qb2luX3Byb2JsZW0gd2lsbCBiZSB0cnVlLgorICoKKyAqIEVhY2gg ZWxlbWVudCBvZiBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgY29ycmVzcG9uZHMgdG8gc29tZSBpdGVt IG9mIGFkdmljZQorICogdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUgYWxsIHRoZSByZWxhdGlvbnMg aXQgYWZmZWN0cy4gV2UgYWRkIFJUSXMgd2UgZmluZAorICogZHVyaW5nIHRyZWUgdHJhdmVyc2Fs IHRvIGVhY2ggb2YgdGhlc2UgcXVlcnkgZmVhdHVyZXMuCisgKgorICogSWYgYmVuZWF0aF9hbnlf Z2F0aGVyID09IHRydWUsIHNvbWUgaGlnaGVyIGxldmVsIG9mIHRoZSB0cmVlIHRyYXZlcnNhbCBm b3VuZAorICogYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs IFBsYW4gKnBsYW4sCisJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkgIHBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJICBMaXN0ICphY3RpdmVfcXVl cnlfZmVhdHVyZXMsCisJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIpCit7CisJcGdwYV9q b2luX3Vucm9sbGVyICpvdXRlcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlwZ3BhX2pvaW5fdW5y b2xsZXIgKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWJvb2wJCWpvaW5fdW5yb2xsZXJf dG9wbGV2ZWwgPSBmYWxzZTsKKwlMaXN0CSAgICpwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpleHRyYXBsYW5zID0gTklMOworCUxpc3QJ ICAgKmVsaWRlZF9ub2RlcyA9IE5JTDsKKworCUFzc2VydCh3aXRoaW5fam9pbl9wcm9ibGVtIHx8 IGpvaW5fdW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIG5vZGUsIGRpcmVjdGx5IGFkZCBpdCB0byB0aGUgbGlzdAorCSAqIG9m IGN1cnJlbnRseS1hY3RpdmUgcXVlcnkgZmVhdHVyZXMuCisJICoKKwkgKiBPdGhlcndpc2UsIGNo ZWNrIHRoZSBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgbGlzdCB0byBzZWUgd2hldGhlciB0aGlzIHdh cworCSAqIHByZXZpb3VzbHkgaWRlbnRpZmllZCBhcyBhIHBsYW4gbm9kZSB0aGF0IG5lZWRzIHRv IGJlIHRyZWF0ZWQgYXMgYQorCSAqIHF1ZXJ5IGZlYXR1cmUuCisJICoKKwkgKiBOb3RlIHRoYXQg dGhlIGNhbGxlciBhbHNvIGhhcyBhIGNvcHkgdG8gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBzbyB3 ZQorCSAqIGNhbid0IGRlc3RydWN0aXZlbHkgbW9kaWZ5IGl0IHdpdGhvdXQgbWFraW5nIGEgY29w eS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIEdhdGhlcikpCisJeworCQlhY3RpdmVfcXVlcnlfZmVh dHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJ CQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVIsIHBsYW4pKTsKKwkJYmVu ZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEdhdGhlck1l cmdlKSkKKwl7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGxpc3RfY29w eShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwg UEdQQVFGX0dBVEhFUl9NRVJHRSwgcGxhbikpOworCQliZW5lYXRoX2FueV9nYXRoZXIgPSB0cnVl OworCX0KKwllbHNlCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCB3 YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcykKKwkJeworCQkJaWYgKHFmLT5wbGFuID09IHBs YW4pCisJCQl7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gbGlzdF9jb3B5KGFjdGl2ZV9x dWVyeV9mZWF0dXJlcyk7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gbGFwcGVuZChhY3Rp dmVfcXVlcnlfZmVhdHVyZXMsIHFmKTsKKwkJCQl3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJl cyA9CisJCQkJCWxpc3RfZGVsZXRlX3B0cih3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcywg cGxhbik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIEZpbmQgYWxsIGVs aWRlZCBub2RlcyBmb3IgdGhpcyBQbGFuIG5vZGUuCisJICovCisJZm9yZWFjaF9ub2RlKEVsaWRl ZE5vZGUsIG4sIHdhbGtlci0+cHN0bXQtPmVsaWRlZE5vZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5f bm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRfbm9kZXMgPSBsYXBwZW5k KGVsaWRlZF9ub2Rlcywgbik7CisJfQorCisJLyogSWYgd2UgZm91bmQgYW55IGVsaWRlZF9ub2Rl cywgaGFuZGxlIHRoZW0uICovCisJaWYgKGVsaWRlZF9ub2RlcyAhPSBOSUwpCisJeworCQlpbnQJ CQludW1fZWxpZGVkX25vZGVzID0gbGlzdF9sZW5ndGgoZWxpZGVkX25vZGVzKTsKKwkJRWxpZGVk Tm9kZSAqbGFzdF9lbGlkZWRfbm9kZTsKKworCQkvKgorCQkgKiBSVElzIGZvciB0aGUgZmluYWwg LS0gYW5kIHRodXMgbG9naWNhbGx5IHVwcGVybW9zdCAtLSBlbGlkZWQgbm9kZQorCQkgKiBzaG91 bGQgYmUgY29sbGVjdGVkIGZvciBxdWVyeSBmZWF0dXJlcyBwYXNzZWQgZG93biBieSB0aGUgY2Fs bGVyLgorCQkgKiBIb3dldmVyLCBlbGlkZWQgbm9kZXMgYWN0IGFzIGJhcnJpZXJzIHRvIHF1ZXJ5 IGZlYXR1cmVzLCB3aGljaAorCQkgKiBtZWFucyB0aGF0ICgxKSB0aGUgcmVtYWluaW5nIGVsaWRl ZCBub2RlcywgaWYgYW55LCBzaG91bGQgYmUKKwkJICogaWdub3JlZCBmb3IgcHVycG9zZXMgb2Yg cXVlcnkgZmVhdHVyZXMgYW5kICgyKSB0aGUgbGlzdCBvZiBhY3RpdmUKKwkJICogcXVlcnkgZmVh dHVyZXMgc2hvdWxkIGJlIHJlc2V0IHRvIGVtcHR5IHNvIHRoYXQgd2UgZG8gbm90IGFkZCBSVElz CisJCSAqIGZyb20gdGhlIHBsYW4gbm9kZSB0aGF0IGlzIGxvZ2ljYWxseSBiZW5lYXRoIHRoZSBl bGlkZWQgbm9kZSB0byB0aGUKKwkJICogcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24gZnJvbSB0 aGUgY2FsbGVyLgorCQkgKi8KKwkJbGFzdF9lbGlkZWRfbm9kZSA9IGxpc3RfbnRoKGVsaWRlZF9u b2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9x dWVyeV9mZWF0dXJlcywgbGFzdF9lbGlkZWRfbm9kZS0+cmVsaWRzKTsKKwkJYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzID0gTklMOworCisJCS8qCisJCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJv YmxlbSwgdGhlIGpvaW5fdW5yb2xsZXIgaXMgcmVzcG9uc2libGUKKwkJICogZm9yIGJ1aWxkaW5n IHRoZSBzY2FuIGZvciB0aGUgZmluYWwgZWxpZGVkIG5vZGUsIHNvIHRocm93IGl0IG91dC4KKwkJ ICovCisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxpZGVkX25vZGVzID0gbGlzdF90 cnVuY2F0ZShlbGlkZWRfbm9kZXMsIG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKworCQkvKiBCdWls ZCBzY2FucyBmb3IgYWxsIChvciB0aGUgcmVtYWluaW5nKSBlbGlkZWQgbm9kZXMuICovCisJCWZv cmVhY2hfbm9kZShFbGlkZWROb2RlLCBlbGlkZWRfbm9kZSwgZWxpZGVkX25vZGVzKQorCQl7CisJ CQkodm9pZCkgcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgcGxhbiwgZWxpZGVkX25vZGUsCisJCQkJ CQkJCSAgIGJlbmVhdGhfYW55X2dhdGhlciwgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisJCX0KKwor CQkvKgorCQkgKiBJZiB0aGVyZSB3ZXJlIGFueSBlbGlkZWQgbm9kZXMsIHRoZW4gZXZlcnl0aGlu ZyBiZW5lYXRoIHRob3NlIG5vZGVzCisJCSAqIGlzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIGpvaW4g cHJvYmxlbS4KKwkJICoKKwkJICogSW4gbW9yZSBkZXRhaWwsIGlmIGFuIEFwcGVuZCBvciBNZXJn ZUFwcGVuZCB3YXMgZWxpZGVkLCB0aGVuIGEKKwkJICogcGFydGl0aW9ud2lzZSBqb2luIHdhcyBj aG9zZW4gYW5kIG9ubHkgYSBzaW5nbGUgY2hpbGQgc3Vydml2ZWQ7IGlmCisJCSAqIGEgU3VicXVl cnlTY2FuIHdhcyBlbGlkZWQsIHRoZSBzdWJxdWVyeSB3YXMgcGxhbm5lZCB3aXRob3V0CisJCSAq IGZsYXR0ZW5pbmcgaXQgaW50byB0aGUgcGFyZW50LgorCQkgKi8KKwkJd2l0aGluX2pvaW5fcHJv YmxlbSA9IGZhbHNlOworCQlqb2luX3Vucm9sbGVyID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIElm IHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJvYmxlbSwgdGhlIGpvaW4gdW5yb2xsZXIgaXMgcmVzcG9u c2libGUgZm9yCisJICogYnVpbGRpbmcgYW55IHJlcXVpcmVkIHNjYW4gZm9yIHRoaXMgbm9kZS4g SWYgbm90LCB3ZSBkbyBpdCBoZXJlLgorCSAqLworCWlmICghd2l0aGluX2pvaW5fcHJvYmxlbSkK KwkJKHZvaWQpIHBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHBsYW4sIE5VTEwsIGJlbmVhdGhfYW55 X2dhdGhlciwgZmFsc2UpOworCisJLyoKKwkgKiBJZiB0aGlzIGpvaW4gbmVlZHMgdG8gdW5yb2xs ZWQgYnV0IHRoZXJlJ3Mgbm8gam9pbiB1bnJvbGxlciBhbHJlYWR5CisJICogYXZhaWxhYmxlLCBj cmVhdGUgb25lLgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyID09IE5VTEwgJiYgcGdwYV9pc19q b2luKHBsYW4pKQorCXsKKwkJam9pbl91bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xs ZXIoKTsKKwkJam9pbl91bnJvbGxlcl90b3BsZXZlbCA9IHRydWU7CisJCXdpdGhpbl9qb2luX3By b2JsZW0gPSB0cnVlOworCX0KKworCS8qCisJICogSWYgdGhpcyBqb2luIGlzIHRvIGJlIHVucm9s bGVkLCBwZ3BhX3Vucm9sbF9qb2luKCkgd2lsbCByZXR1cm4gdGhlIGpvaW4KKwkgKiB1bnJvbGxl ciBvYmplY3QgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGRvd24gd2hlbiB3ZSByZWN1cnNlIGludG8g dGhlCisJICogb3V0ZXIgYW5kIGlubmVyIHNpZGVzIG9mIHRoZSBwbGFuLgorCSAqLworCWlmIChq b2luX3Vucm9sbGVyICE9IE5VTEwpCisJCXBncGFfdW5yb2xsX2pvaW4od2Fsa2VyLCBwbGFuLCBi ZW5lYXRoX2FueV9nYXRoZXIsIGpvaW5fdW5yb2xsZXIsCisJCQkJCQkgJm91dGVyX2pvaW5fdW5y b2xsZXIsICZpbm5lcl9qb2luX3Vucm9sbGVyKTsKKworCS8qIEFkZCBSVElzIGZyb20gdGhlIHBs YW4gbm9kZSB0byBhbGwgYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzLiAqLworCXBncGFfcWZfYWRkX3Bs YW5fcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHBsYW4pOworCisJLyoKKwkgKiBSZWN1cnNl IGludG8gdGhlIG91dGVyIGFuZCBpbm5lciBzdWJ0cmVlcy4KKwkgKgorCSAqIEFzIGFuIGV4Y2Vw dGlvbiwgaWYgdGhpcyBpcyBhIEZvcmVpZ25TY2FuLCBkb24ndCByZWN1cnNlLiBwb3N0Z3Jlc19m ZHcKKwkgKiBzb21ldGltZXMgc3RvcmVzIGFuIEVQUSByZWNoZWNrIHBsYW4gaW4gcGxhbi0+bGVm dHJlZSwgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIG1lbnRpb24gdGhlIHNhbWUgc2V0IG9mIHJl bGF0aW9ucyBhcyB0aGUgRm9yZWlnblNjYW4gaXRzZWxmLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHdh eSB0byBlbWl0IGFkdmljZSB0YXJnZXRpbmcgdGhlIEVQUSBjYXNlIHZzLiB0aGUgbm9uLUVQUSBj YXNlLgorCSAqIE1vcmVvdmVyLCBpdCdzIG5vdCBlbnRpcmVseSBjbGVhciB3aGF0IG90aGVyIEZE V3MgbWlnaHQgZG8gd2l0aCB0aGUKKwkgKiBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlcy4gTWF5YmUg c29tZSBiZXR0ZXIgaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUsIGJ1dAorCSAqIGZvciBub3csIHdl IGp1c3QgcHVudC4KKwkgKi8KKwlpZiAoIUlzQShwbGFuLCBGb3JlaWduU2NhbikpCisJeworCQlp ZiAocGxhbi0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxr ZXIsIHBsYW4tPmxlZnR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIG91dGVy X2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBiZW5lYXRo X2FueV9nYXRoZXIpOworCQlpZiAocGxhbi0+cmlnaHR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dh bGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5yaWdodHRyZWUsIHdpdGhpbl9qb2luX3Byb2Js ZW0sCisJCQkJCQkJCSAgaW5uZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBj cmVhdGVkIGEgam9pbiB1bnJvbGxlciB1cCBhYm92ZSwgdGhlbiBpdCdzIGFsc28gb3VyIGpvaW4g dG8gdXNlCisJICogaXQgdG8gYnVpbGQgdGhlIGZpbmFsIHBncGFfdW5yb2xsZWRfam9pbiwgYW5k IHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlcl90b3BsZXZl bCkKKwl7CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisKKwkJdWpvaW4gPSBwZ3BhX2J1 aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCBqb2luX3Vucm9sbGVyKTsKKwkJd2Fsa2VyLT50b3Bs ZXZlbF91bnJvbGxlZF9qb2lucyA9CisJCQlsYXBwZW5kKHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xs ZWRfam9pbnMsIHVqb2luKTsKKwkJcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIoam9pbl91bnJv bGxlcik7CisJCSh2b2lkKSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsIHVqb2lu KTsKKwl9CisKKwkvKgorCSAqIFNvbWUgcGxhbiB0eXBlcyBjYW4gaGF2ZSBhZGRpdGlvbmFsIGNo aWxkcmVuLiBOb2RlcyBsaWtlIEFwcGVuZCB0aGF0CisJICogY2FuIGhhdmUgYW55IG51bWJlciBv ZiBjaGlsZHJlbiBzdG9yZSB0aGVtIGluIGEgTGlzdDsgYSBTdWJxdWVyeVNjYW4KKwkgKiBqdXN0 IGhhcyBhIGZpZWxkIGZvciBhIHNpbmdsZSBhZGRpdGlvbmFsIFBsYW4uCisJICovCisJc3dpdGNo IChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX0FwcGVuZDoKKwkJCXsKKwkJCQlBcHBlbmQJ ICAgKmFwbGFuID0gKEFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IGFwbGFuLT5h cHBlbmRwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5KGFwbGFuLT5hcHByZWxpZHMpKQorCQkJ CQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQl7CisJCQkJTWVyZ2VBcHBlbmQg Km1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IG1hcGxh bi0+bWVyZ2VwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5KG1hcGxhbi0+YXBwcmVsaWRzKSkK KwkJCQkJcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJ CQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWV4dHJhcGxhbnMgPSAoKEJp dG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1h cE9yOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1hcHBsYW5zOwor CQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisKKwkJCS8qCisJCQkgKiBXZSBkb24n dCBwYXNzIGRvd24gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGFjcm9zcyBoZXJlLCBiZWNhdXNlCisJ CQkgKiB0aG9zZSBhcmUgc3BlY2lmaWMgdG8gYSBzdWJxdWVyeSBsZXZlbC4KKwkJCSAqLworCQkJ cGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgKChTdWJxdWVyeVNjYW4gKikgcGxhbiktPnN1 YnBsYW4sCisJCQkJCQkJCSAgMCwgTlVMTCwgTklMLCBiZW5lYXRoX2FueV9nYXRoZXIpOworCQkJ YnJlYWs7CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQkJZXh0cmFwbGFucyA9ICgoQ3VzdG9tU2Nh biAqKSBwbGFuKS0+Y3VzdG9tX3BsYW5zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVh azsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhIGxpc3Qgb2YgZXh0cmEgY2hpbGRyZW4sIGl0ZXJh dGUgb3ZlciBpdC4gKi8KKwlmb3JlYWNoKGxjLCBleHRyYXBsYW5zKQorCXsKKwkJUGxhbgkgICAq c3VicGxhbiA9IGxmaXJzdChsYyk7CisKKwkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwg c3VicGxhbiwgMCwgTlVMTCwgcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJICBiZW5l YXRoX2FueV9nYXRoZXIpOworCX0KK30KKworLyoKKyAqIFBlcmZvcm0gZmluYWwgcHJvY2Vzc2lu ZyBvZiBhIG5ld2x5LWNvbnN0cnVjdGVkIHBncGFfdW5yb2xsZWRfam9pbi4gVGhpcworICogb25s eSBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIHRvcGxldmVsIHBncGFfdW5yb2xsZWRfam9pbiBvYmpl Y3RzLCBzaW5jZSBpdAorICogcmVjdXJzZXMgdG8gc3ViLWpvaW5zIGFzIG5lZWRlZC4KKyAqCisg KiBPdXIgZ29hbCBpcyB0byBhZGQgdGhlIHNldCBvZiBpbm5lciByZWxpZHMgdG8gdGhlIHJlbGV2 YW50IGpvaW5fc3RyYXRlZ2llcworICogbGlzdCwgYW5kIHRvIGRvIHRoZSBzYW1lIGZvciBhbnkg c3ViLWpvaW5zLiBUbyB0aGF0IGVuZCwgdGhlIHJldHVybiB2YWx1ZQorICogaXMgdGhlIHNldCBv ZiByZWxpZHMgZm91bmQgYmVuZWF0aCB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgam9pbiwgYnV0IGl0 IGlzCisgKiBleHBlY3RlZCB0aGF0IHRoZSB0b3BsZXZlbCBjYWxsZXIgd2lsbCBpZ25vcmUgdGhp cy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAgIHBncGFfdW5yb2xsZWRf am9pbiAqdWpvaW4pCit7CisJQml0bWFwc2V0ICAqYWxsX3JlbGlkcyA9IE5VTEw7CisKKwlmb3Ig KGludCBrID0gMDsgayA8IHVqb2luLT5uaW5uZXI7ICsraykKKwl7CisJCXBncGFfam9pbl9tZW1i ZXIgKm1lbWJlciA9ICZ1am9pbi0+aW5uZXJba107CisJCUJpdG1hcHNldCAgKnJlbGlkczsKKwor CQlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJCQlyZWxpZHMgPSBwZ3BhX3By b2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCQltZW1iZXItPnVucm9sbGVk X2pvaW4pOworCQllbHNlCisJCXsKKwkJCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJ CQlyZWxpZHMgPSBtZW1iZXItPnNjYW4tPnJlbGlkczsKKwkJfQorCQl3YWxrZXItPmpvaW5fc3Ry YXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dID0KKwkJCWxhcHBlbmQod2Fsa2VyLT5qb2luX3N0 cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSwgcmVsaWRzKTsKKwkJYWxsX3JlbGlkcyA9IGJt c19hZGRfbWVtYmVycyhhbGxfcmVsaWRzLCByZWxpZHMpOworCX0KKworCXJldHVybiBhbGxfcmVs aWRzOworfQorCisvKgorICogQXJyYW5nZSBmb3IgdGhlIGdpdmVuIHBsYW4gbm9kZSB0byBiZSB0 cmVhdGVkIGFzIGEgcXVlcnkgZmVhdHVyZSB3aGVuIHRoZQorICogdHJlZSB3YWxrIHJlYWNoZXMg aXQuCisgKgorICogTWFrZSBzdXJlIHRvIG9ubHkgdXNlIHRoaXMgZm9yIG5vZGVzIHRoYXQgdGhl IHRyZWUgd2FsayBjYW4ndCBoYXZlIHJlYWNoZWQKKyAqIHlldCEKKyAqLwordm9pZAorcGdwYV9h ZGRfZnV0dXJlX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQlwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUg KnFmID0gcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIHR5cGUsIHBsYW4pOworCisJd2Fsa2VyLT5m dXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQlsYXBwZW5kKHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2Zl YXR1cmVzLCBxZik7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBu b2RlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbGFuIG5vZGUgSUQuCisgKgorICogVGhlIGxhc3Qg ZWxpZGVkIG5vZGUgaXMgdGhlIG9uZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiB1cHBlcm1vc3QgaW4g dGhlIHBsYW4KKyAqIHRyZWUgaGFkIGl0IG5vdCBiZWVuIHJlbW92ZWQgZHVyaW5nIHNldHJlZnMg cHJvY2Vzc2lnLgorICovCitFbGlkZWROb2RlICoKK3BncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFu bmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pCit7CisJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUg PSBOVUxMOworCisJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIG4sIHBzdG10LT5lbGlkZWROb2Rl cykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJ ZWxpZGVkX25vZGUgPSBuOworCX0KKworCXJldHVybiBlbGlkZWRfbm9kZTsKK30KKworLyoKKyAq IENlcnRhaW4gcGxhbiBub2RlcyBjYW4gcmVmZXIgdG8gYSBzZXQgb2YgUlRJcy4gRXh0cmFjdCBh bmQgcmV0dXJuIHRoZSBzZXQuCisgKi8KK0JpdG1hcHNldCAqCitwZ3BhX3JlbGlkcyhQbGFuICpw bGFuKQoreworCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJcmV0dXJuICgoUmVzdWx0ICopIHBs YW4pLT5yZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwkJcmV0dXJu ICgoRm9yZWlnblNjYW4gKikgcGxhbiktPmZzX3JlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwg QXBwZW5kKSkKKwkJcmV0dXJuICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHM7CisJZWxzZSBp ZiAoSXNBKHBsYW4sIE1lcmdlQXBwZW5kKSkKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkczsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogRXh0cmFjdCB0aGUg c2Nhbm5lZCBSVEkgZnJvbSBhIHBsYW4gbm9kZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlcmUg aXNuJ3Qgb25lLgorICovCitJbmRleAorcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbikKK3sKKwlz d2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfU2VxU2NhbjoKKwkJY2FzZSBUX1Nh bXBsZVNjYW46CisJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJY2FzZSBUX1RpZFNjYW46CisJ CWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCWNhc2UgVF9G dW5jdGlvblNjYW46CisJCWNhc2UgVF9UYWJsZUZ1bmNTY2FuOgorCQljYXNlIFRfVmFsdWVzU2Nh bjoKKwkJY2FzZSBUX0N0ZVNjYW46CisJCWNhc2UgVF9OYW1lZFR1cGxlc3RvcmVTY2FuOgorCQlj YXNlIFRfV29ya1RhYmxlU2NhbjoKKwkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCQljYXNlIFRfQ3Vz dG9tU2NhbjoKKwkJY2FzZSBUX0luZGV4U2NhbjoKKwkJY2FzZSBUX0luZGV4T25seVNjYW46CisJ CQlyZXR1cm4gKChTY2FuICopIHBsYW4pLT5zY2FucmVsaWQ7CisJCWRlZmF1bHQ6CisJCQlyZXR1 cm4gMDsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYSBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgYW5kIGFk ZCBpdCB0byB0aGUgbGlzdCBvZiBhbGwgcXVlcnkgZmVhdHVyZXMKKyAqIGZvciB0aGlzIHBsYW4u CisgKi8KK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKgorcGdwYV9hZGRfZmVhdHVyZShwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkgcGdwYV9xZl90eXBlIHR5cGUsIFBs YW4gKnBsYW4pCit7CisJcGdwYV9xdWVyeV9mZWF0dXJlICpxZiA9IHBhbGxvYzBfb2JqZWN0KHBn cGFfcXVlcnlfZmVhdHVyZSk7CisKKwlxZi0+dHlwZSA9IHR5cGU7CisJcWYtPnBsYW4gPSBwbGFu OworCisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1txZi0+dHlwZV0gPQorCQlsYXBwZW5kKHdhbGtl ci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVdLCBxZik7CisKKwlyZXR1cm4gcWY7Cit9CisKKy8q CisgKiBBZGQgYSBzaW5nbGUgUlRJIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8K K3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LCBJbmRleCBydGkpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHFm LT5yZWxpZHMsIHJ0aSk7CisJfQorfQorCisvKgorICogQWRkIGEgc2V0IG9mIFJUSXMgdG8gZWFj aCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3J0 aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlm b3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMp CisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9tZW1iZXJzKHFmLT5yZWxpZHMsIHJlbGlkcyk7 CisJfQorfQorCisvKgorICogQWRkIFJUSXMgZGlyZWN0bHkgY29udGFpbmVkIGluIGEgcGxhbiBu b2RlIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X3FmX2FkZF9wbGFuX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFu KQoreworCUJpdG1hcHNldCAgKnJlbGlkczsKKwlJbmRleAkJcnRpOworCisJaWYgKChyZWxpZHMg PSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVf cXVlcnlfZmVhdHVyZXMsIHJlbGlkcyk7CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlk KHBsYW4pKSAhPSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBy dGkpOworfQorCisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5nIHRoZSBw cm92aWRlZCB3YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMsIHdvdWxk IHdlIGdlbmVyYXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8KKyAqCisg KiBJZiB5ZXMsIHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBpdCBkb2Vz IG5vdC4gTm90ZSB0aGF0CisgKiB3ZSBoYXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hldGhlciB0 aGUgcGxhbm5lciB3YXMgZm9yY2VkIHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0 byB0aGUgYWR2aWNlIG9yIGp1c3QgaGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFf d2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNl X3RhZ190eXBlIHRhZywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJ bmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9J Tl9PUkRFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdh bGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9q b2luX29yZGVyX21hdGNoZXModWpvaW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0 X2lkZW50aWZpZXJzLCB0YXJnZXQsIHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lE RU5USUZJRVIpCisJeworCQlJbmRleAkJcnRpOworCisJCXJ0aSA9IHBncGFfd2Fsa2VyX2dldF9y dGkocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsICZ0YXJnZXQtPnJpZCk7CisJCXJlbGlk cyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJewor CQkJSW5kZXgJCXJ0aTsKKworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRp ZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQorCQkJCWVs b2coRVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCQkJ cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNo ICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2 ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsK KwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQ LAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQ R1BBX1NDQU5fRk9SRUlHTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf SU5ERVhfT05MWV9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fs a2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJf Y29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgsCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1 cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1ND QU5fUEFSVElUSU9OV0lTRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf U0VRX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJ CQkJCQkJCQkJCSBQR1BBX1NDQU5fU0VRLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQ R1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdh bGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJCSByZWxpZHMpOwor CQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19m ZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJCQkJCQly ZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVJf TUVSR0UsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05P Tl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIs CisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJl bGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlK T0lOX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9K T0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgSlNUUkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250 YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFM SVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BM QUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09Q X01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNU RURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fs a2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJ CSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJu IHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05F U1RFRF9MT09QX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19O T19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHdhbGtl ciwgcmVsaWRzKTsKKwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0dXJuIGZh bHNlOworfQorCisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2luIG9y ZGVyIHNwZWNpZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdw YV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJ CQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAor CQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQluY2hpbGRyZW4gPSBsaXN0X2xlbmd0 aCh0YXJnZXQtPmNoaWxkcmVuKTsKKworCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFS R0VUX09SREVSRURfTElTVCk7CisKKwkvKiBBdCB0b3BsZXZlbCwgd2UgYWxsb3cgYSBwcmVmaXgg bWF0Y2guICovCisJaWYgKHRvcGxldmVsKQorCXsKKwkJaWYgKG5jaGlsZHJlbiA+IHVqb2luLT5u aW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlpZiAobmNoaWxk cmVuICE9IHVqb2luLT5uaW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE91 dGVybW9zdCByZWwgbXVzdCBtYXRjaC4gKi8KKwlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJf bWF0Y2hlc19tZW1iZXIoJnVqb2luLT5vdXRlciwKKwkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0 aCwKKwkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgIGxpbml0aWFs KHRhcmdldC0+Y2hpbGRyZW4pKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRWFjaCBpbm5lciBy ZWwgbXVzdCBtYXRjaC4gKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IG5jaGlsZHJlbiAtIDE7ICsr bikKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqY2hpbGRfdGFyZ2V0ID0gbGlzdF9udGgodGFy Z2V0LT5jaGlsZHJlbiwgbiArIDEpOworCisJCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9t YXRjaGVzX21lbWJlcigmdWpvaW4tPmlubmVyW25dLAorCQkJCQkJCQkJCQkJICAgcnRhYmxlX2xl bmd0aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgY2hp bGRfdGFyZ2V0KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIERvZXMgb25lIG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIGFuIGFkdmlj ZSB0YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNo ZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCSAgSW5kZXggcnRh YmxlX2xlbmd0aCwKKwkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJQml0bWFwc2V0ICAq cmVsaWRzID0gTlVMTDsKKworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7 CisJCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCXJl dHVybiBmYWxzZTsKKwkJcmV0dXJuIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhtZW1i ZXItPnVucm9sbGVkX2pvaW4sCisJCQkJCQkJCQkJCSAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJ CQkJICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICB0YXJnZXQsCisJCQkJCQkJCQkJCSAg ZmFsc2UpOworCX0KKworCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJc3dpdGNoICh0 YXJnZXQtPnR0eXBlKQorCXsKKwkJY2FzZSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q6CisJCQkv KiBDb3VsZCBvbmx5IG1hdGNoIGFuIHVucm9sbGVkIGpvaW4gKi8KKwkJCXJldHVybiBmYWxzZTsK KworCQljYXNlIFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOgorCQkJeworCQkJCWZvcmVhY2hf cHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQor CQkJCXsKKwkJCQkJSW5kZXgJCXJ0aTsKKworCQkJCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRp KHJ0YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICZjaGlsZF90YXJn ZXQtPnJpZCk7CisJCQkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRpKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOgor CQkJeworCQkJCUluZGV4CQlydGk7CisKKwkJCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0 YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgJnRhcmdldC0+cmlkKTsK KwkJCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwkJCQlicmVhazsKKwkJCX0K Kwl9CisKKwlyZXR1cm4gYm1zX2VxdWFsKG1lbWJlci0+c2Nhbi0+cmVsaWRzLCByZWxpZHMpOwor fQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBzdHJh dGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0 YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJ CQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnNjYW5zID0gd2Fsa2VyLT5zY2Fu c1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsK KwkJLyoKKwkJICogWFhYLiBJZiB0aGlzIGlzIGluZGV4LXJlbGF0ZWQgYWR2aWNlLCB3ZSBzaG91 bGQgYWxzbyB2YWxpZGF0ZSB0aGF0CisJCSAqIHRoZSBhZHZpY2UgdGFyZ2V0J3MgaW5kZXggdGFy Z2V0IG1hdGNoZXMgdGhlIFBsYW4gdHJlZS4KKwkJICovCisJCWlmIChibXNfZXF1YWwoc2Nhbi0+ cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcXVlcnkgZmVh dHVyZSBhcHBsaWVzIHRvIHRoZSBnaXZlbgorICogcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9v bAorcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQg KndhbGtlciwKKwkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJIEJpdG1hcHNldCAq cmVsaWRzKQoreworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0gd2Fsa2VyLT5xdWVyeV9mZWF0 dXJlc1t0eXBlXTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5 X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChxZi0+cmVsaWRzLCByZWxpZHMpKQorCQkJ cmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUg d2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiBqb2luIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZv ciB0aGUKKyAqIGdpdmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2Vy X2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkg IHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Cit7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzID0gd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNb c3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIoQml0bWFwc2V0LCBqc3JlbGlkcywgam9pbl9zdHJh dGVnaWVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChqc3JlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVy biB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtl ciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcmVsaWRzIHNob3VsZCBiZSBtYXJrZWQgYXMgTk9fR0FUSEVS PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRz KQoreworCXJldHVybiBibXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19nYXRoZXJfc2Nh bnMpOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY29udmVydCBhIHJlbGF0 aW9uIGlkZW50aWZpZXIgdG8gYW4gUlRJLgorICoKKyAqIFdlIHRocm93IGFuIGVycm9yIGhlcmUg YmVjYXVzZSB3ZSBleHBlY3QgdGhpcyB0byBiZSB1c2VkIG9uIHN5c3RlbS1nZW5lcmF0ZWQKKyAq IGFkdmljZS4gSGVuY2UsIGZhaWx1cmUgaGVyZSBpbmRpY2F0ZXMgYW4gYWR2aWNlIGdlbmVyYXRp b24gYnVnLgorICovCitzdGF0aWMgSW5kZXgKK3BncGFfd2Fsa2VyX2dldF9ydGkoSW5kZXggcnRh YmxlX2xlbmd0aCwKKwkJCQkJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ cGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXJ0aTsKKworCXJ0aSA9IHBncGFfY29t cHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJICAgcnRf aWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAgcmlkKTsKKwlpZiAocnRpID09IDApCisJCWVsb2co RVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCXJldHVy biBydGk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ2NTg0YzAxNGI5Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCkBAIC0wLDAgKzEsMTIxIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5oCisgKgkgIFBsYW4gdHJlZSBp dGVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV93YWxrZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfV0FM S0VSX0gKKyNkZWZpbmUgUEdQQV9XQUxLRVJfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNp bmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworLyoKKyAqIFdl IHVzZSB0aGUgdGVybSAicXVlcnkgZmVhdHVyZSIgdG8gcmVmZXIgdG8gcGxhbiBub2RlcyB0aGF0 IGFyZSBpbnRlcmVzdGluZworICogaW4gdGhlIGZvbGxvd2luZyB3YXk6IHRvIGdlbmVyYXRlIGFk dmljZSwgd2UnbGwgbmVlZCB0byBrbm93IHRoZSBzZXQgb2YKKyAqIHNhbWUtc3VicXVlcnksIG5v bi1qb2luIFJUSXMgb2NjdXJpbmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQK KyAqIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1w bGUsIEdhdGhlciBub2RlcywgZGVzaWdpbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUiwgYW5kIEdhdGhl ciBNZXJnZQorICogbm9kZXMsIGRlc2lnbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUl9NRVJHRSwgYXJl IHF1ZXJ5IGZlYXR1cmVzLCBiZWNhdXNlIHdlJ2xsCisgKiB3YW50IHRvIGFkbWl0IHNvbWUga2lu ZCBvZiBhZHZpY2UgdGhhdCBkZXNjcmliZXMgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRy ZWUgdGhhdCBhcHBlYXJzIGJlbmVhdGggdGhvc2Ugbm9kZXMuCisgKgorICogRWFjaCBzZW1pam9p biBjYW4gYmUgaW1wbGVtZW50ZWQgZWl0aGVyIGJ5IGRpcmVjdGx5IHBlcmZvcm1pbmcgYSBzZW1p am9pbiwKKyAqIG9yIGJ5IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybWlu ZyBhIG5vcm1hbCBqb2luLiBFaXRoZXIgd2F5LAorICogd2UgdXNlIGEgcXVlcnkgZmVhdHVyZSB0 byBub3RpY2Ugd2hhdCBkZWNpc2lvbiB3YXMgbWFkZSwgc28gdGhhdCB3ZSBjYW4KKyAqIGRlc2Ny aWJlIGl0IGJ5IGVudW1lcmF0aW5nIHRoZSBSVElzIG9uIHRoYXQgc2lkZSBvZiB0aGUgam9pbi4K KyAqCisgKiBUbyBlbGFib3JhdGUgb24gdGhlICJubyBhZG1peHR1cmUgb2YgcGFyZW50IGFuZCBj aGlsZCBSVElzIiBydWxlLCBpbiBhbGwgb2YKKyAqIHRoZXNlIGNhc2VzLCBpZiB0aGUgZW50aXJl dHkgb2YgYW4gaW5oZXJpdGFuY2UgaGllcmFyY2h5IGFwcGVhcnMgYmVuZWF0aAorICogdGhlIHF1 ZXJ5IGZlYXR1cmUsIHdlIG9ubHkgd2FudCB0byBuYW1lIHRoZSBwYXJlbnQgdGFibGUuIEJ1dCBp dCdzIGFsc28KKyAqIHBvc3NpYmxlIHRvIGhhdmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBuYW1lIGNo aWxkIHRhYmxlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkKKyAqIGxpa2VseSB0byBoYXBwZW4gd2hl biBwYXJ0aXRpb253aXNlIGpvaW4gaXMgaW4gdXNlLCBidXQgY291bGQgaGFwcGVuIGZvcgorICog R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBldmVuIHdpdGhvdXQgdGhhdCwgaWYgb25lIG9mIHRob3Nl IGFwcGVhcnMgYmVsb3cKKyAqIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGZvciBhIHNp bmdsZSB0YWJsZS4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfcWZfdHlwZQoreworCVBHUEFRRl9H QVRIRVIsCisJUEdQQVFGX0dBVEhFUl9NRVJHRSwKKwlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFV RSwKKwlQR1BBUUZfU0VNSUpPSU5fVU5JUVVFCisJLyogdXBkYXRlIE5VTV9QR1BBX1FGX1RZUEVT IGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3FmX3R5cGU7CisKKyNkZWZpbmUg TlVNX1BHUEFfUUZfVFlQRVMgKChpbnQpIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUgKyAxKQorCisv KgorICogRm9yIGVhY2ggcXVlcnkgZmVhdHVyZSwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZmVhdHVy ZSB0eXBlIGFuZCB0aGUgc2V0IG9mCisgKiByZWxpZHMgdGhhdCB3ZSBmb3VuZCB1bmRlcm5lYXRo IHRoZSByZWxldmFudCBwbGFuIG5vZGUuIFNlZSB0aGUgY29tbWVudHMKKyAqIG9uIHBncGFfcWZf dHlwZSwgYWJvdmUsIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfcXVlcnlfZmVhdHVyZQoreworCXBncGFfcWZfdHlwZSB0eXBlOworCVBsYW4JICAgKnBs YW47CisJQml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3F1ZXJ5X2ZlYXR1cmU7CisKKy8qCisg KiBDb250ZXh0IG9iamVjdCBmb3IgcGxhbiB0cmVlIHdhbGsuCisgKgorICogcHN0bXQgaXMgdGhl IFBsYW5uZWRTdG10IHdlJ3JlIHN0dWR5aW5nLgorICoKKyAqIHNjYW5zIGlzIGFuIGFycmF5IG9m IGxpc3RzIG9mIHBncGFfc2NhbiBvYmplY3RzLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICog dGhlIHNjYW4ncyBwZ3BhX3NjYW5fc3RyYXRlZ3kuCisgKgorICogbm9fZ2F0aGVyX3NjYW5zIGlz IHRoZSBzZXQgb2Ygc2NhbiBSVElzIHRoYXQgZG8gbm90IGFwcGVhciBiZW5lYXRoIGFueQorICog R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICoKKyAqIHRvcGxldmVsX3Vucm9sbGVkX2pv aW5zIGlzIGEgbGlzdCBvZiBhbGwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMgdGhhdAorICog YXJlIG5vdCBhIGNoaWxkIG9mIHNvbWUgb3RoZXIgcGdwYV91bnJvbGxlZF9qb2luLgorICoKKyAq IGpvaW5fc3RyYXRlZ3kgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgQml0bWFwc2V0IG9iamVjdHMu IEVhY2ggQml0bWFwc2V0CisgKiBpcyB0aGUgc2V0IG9mIHJlbGlkcyB0aGF0IGFwcGVhcnMgb24g dGhlIGlubmVyIHNpZGUgb2Ygc29tZSBqb2luIChleGNsdWRpbmcKKyAqIFJUSXMgZnJvbSBwYXJ0 aXRpb24gY2hpbGRyZW4gYW5kIHN1YnF1ZXJpZXMpLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQor ICogcGdwYV9qb2luX3N0cmF0ZWd5LgorICoKKyAqIHF1ZXJ5X2ZlYXR1cmVzIGlzIGFuIGFycmF5 IGxpc3RzIG9mIHBncGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLCBpbmRleGVkCisgKiBieSBwZ3Bh X3FmX3R5cGUuCisgKgorICogZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGlzIG9ubHkgdXNlZCBkdXJp bmcgdGhlIHBsYW4gdHJlZSB3YWxrIGFuZCBzaG91bGQKKyAqIGJlIGVtcHR5IHdoZW4gdGhlIHRy ZWUgd2FsayBjb25jbHVkZXMuIEl0IGlzIGEgbGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKKyAq IG9iamVjdHMgZm9yIFBsYW4gbm9kZXMgdGhhdCB0aGUgcGxhbiB0cmVlIHdhbGsgaGFzIG5vdCB5 ZXQgZW5jb3VudGVyZWQ7CisgKiB3aGVuIGVuY291bnRlcmVkLCB0aGV5IHdpbGwgYmUgbW92ZWQg dG8gdGhlIGxpc3Qgb2YgYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzCisgKiB0aGF0IGlzIHByb3BhZ2F0 ZWQgdmlhIHRoZSBjYWxsIHN0YWNrLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQKK3sKKwlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqc2NhbnNbTlVN X1BHUEFfU0NBTl9TVFJBVEVHWV07CisJQml0bWFwc2V0ICAqbm9fZ2F0aGVyX3NjYW5zOworCUxp c3QJICAgKnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zOworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2ll c1tOVU1fUEdQQV9KT0lOX1NUUkFURUdZXTsKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1f UEdQQV9RRl9UWVBFU107CisJTGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworfSBwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQ7CisKK2V4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3Rt dCk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJ CQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRlZE5vZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9k ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdw YV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4gSW5kZXggcGdwYV9zY2FucmVsaWQoUGxhbiAq cGxhbik7CisKK2V4dGVybiBib29sIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJ CSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL2dhdGhlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjU4MjgwMDQzOTEzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvZ2F0aGVyLnNxbApAQCAtMCwwICsxLDc2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0 dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFs bGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7 CisKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGlt IChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKKworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlk IGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2Rp bSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVj dCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKworLS0gRm9yY2UgR2F0aGVyIG9y IEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEg c2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRp b24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21l cmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBm IEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7 CisKKy0tIEZvcmNlIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvbiBvbmUgcmVsYXRpb24gYnV0 IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3Rf ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3Jj ZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIHVzZSBhdCBhbGwuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnbm9fZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBDYW4n dCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVz dCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi41YWEyZmM2MmQzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCkBAIC0wLDAgKzEsOTYgQEAKK0xPQUQgJ3Bn X3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsK KworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4 dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0 ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBn OworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRl Z2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQor CVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworCitD UkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50 ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIg bm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEs IChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFM WVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVu IGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgor CUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9 IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVz ZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhl bSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZU IEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOwor Q09NTUlUOworCistLSBUaGUgdW51c3VhbCBmb3JtdWxhdGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGlu dGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBwbGFubmVyIGZyb20gcmVkdWNpbmcgdGhl IEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlwZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRl c3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUgdGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVk LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGlt MSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9p ZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQgbm90IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5u ZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlk IGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgor LS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworLS0g WFhYOiBUaGUgYWR2aWNlIGZlZWRiYWNrIHNheXMgJ3BhcnRpYWxseSBtYXRjaGVkJyBoZXJlIHdo aWNoIGlzbid0IGV4YWN0bHkKKy0tIHdyb25nIGdpdmVuIHRoZSB3YXkgdGhhdCBmbGFnIGlzIGhh bmRsZWQgaW4gdGhlIGNvZGUsIGJ1dCBpdCdzIGF0IHRoZSB2ZXJ5CistLSBsZWFzdCBjb25mdXNp bmcuIFNvbWV0aGluZyBzaG91bGQgcHJvYmFibHkgYmUgaW1wcm92ZWQgaGVyZS4KK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5O RVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAg PSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGlt MSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9p ZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBP UiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKKworLS0gWFhYOiBhZGQgdGVzdHMgZm9yIGpv aW4gb3JkZXIgcHJlZml4IG1hdGNoaW5nCistLSBYWFg6IGpvaW5fb3JkZXIoanVzdG9uZXJlbCkg c2hvdWxkbid0IHJlcG9ydCBwYXJ0aWFsbHkgbWF0Y2hlZApkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOGViODIzZjFjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApAQCAtMCwwICsxLDc2IEBACitMT0FEICdwZ19w bGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisK K0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2Rp bSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2RpbTsKKworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAo CisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5j ZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5f ZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFjdDsKKworLS0gV2UgZXhwZWN0 IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGgg am9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3Jr IGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBi ZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFu ZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpF KGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gTm93IHRyeSBm b3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5u ZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJH RV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlk OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklB TElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0 IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIFdlIGNhbid0IGZvcmNlIGEg Zm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4n dCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2Fs X2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJl MTQ1MzkyODBlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv bG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQwIEBACitDUkVBVEUgRVhURU5TSU9OIHBn X3BsYW5fYWR2aWNlOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xs ZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKwor LS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNl ZWQgaXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisK Ky0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGlu dCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl LCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZS T00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGU7CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBx dWVyeS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp IE9SREVSIEJZIGlkIExJTUlUIDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWlu LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2Ug dGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUg Y2h1bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAw OworCistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitE TyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICog RlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0 IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZl cmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxh cmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKCk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRp b253aXNlLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNDJjMDYxMTc2MAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uu c3FsCkBAIC0wLDAgKzEsNzggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9q b2luID0gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQ QVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9O IE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRF IFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkK KwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBP RiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBW QUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZS T00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVy IHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw KSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAo MjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwg ZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAl IDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgcHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAg Rk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlT RUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKKwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIs IHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZh bDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBhcnRpdGlv bndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0 MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEg PSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExBTl9B RFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEu aWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwy ID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9u d2lzZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1p c21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3NjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4yNTQxNmE3NWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3NjYW4uc3FsCkBAIC0wLDAgKzEsMTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29z dCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0 ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2Fu X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUg dGV4dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElO REVYIHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFO QUxZWkUgc2Nhbl90YWJsZTsKKworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNj YW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisK Ky0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBU SUQgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2lu ZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0g d2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRN QVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3Nv bWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4o c2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICco MSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBm dWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCist LSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBj b3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhl IHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBk dWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGU7CitDT01NSVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2Uu IFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1B UF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNh dXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5k ZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPiAwOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBs b29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0 IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBv ciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRl IGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZv cmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBs aWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVl bnRpYWwgc2NhbiBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFp biBpbmRleCBzY2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl CisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNj YW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0 aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mg d2l0aCBpbmRleCBzY2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVu dGlvbiB0aGUgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJlcGVhdCB0aGUg c2FtZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRh cmdldCBpcyBldmVuIG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOwor CistLSBUZXN0IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcg d2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEg RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcg d2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEg RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworQ09NTUlUOworCistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGlu c3RhbmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQg Sk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxl IHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcg TEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5f dGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMg d2l0aGluIGEgc3VicXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQkVHSU47 CistLSBTaG91bGQgbm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp IHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxk IG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNo b3VsZCBtYXRjaCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9 IDEgT0ZGU0VUIDApOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc3ludGF4LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiYzFiNzFiZWJlCi0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApAQCAt MCwwICsxLDQyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CisKKy0tIEFuIGVtcHR5IHN0cmlu ZyBpcyBhbGxvd2VkLCBhbmQgc28gaXMgYW4gZW1wdHkgdGFyZ2V0IGxpc3QuCitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKCknOworCistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24s IHdoaXRlc3BhY2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZp ZXIgYXJlIGluY2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VxX3NjYW4oeEB5KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgj MiknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsK KworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVO VElBTF9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oIyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKKworLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qKi8nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdIQVNIX0pPSU4oXykvKioqLyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNv bW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOworCistLSBVbnRlcm1pbmF0ZWQg Y29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3Rl ZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxl Z2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJy8qLyovJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyov JzsKKworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZp ZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmRmZmFmY2FkNmRjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTM5IEBACisjIENvcHlyaWdodCAo YykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1 biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNr IGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7 CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7CisKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1v cmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQg dXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9h ZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBw bGFuIHRyZWUgd2Fsa2VyIGNvZGUgcnVucyBhZ2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdy ZXNzaW9uIHRlc3RzLiBJZgorIyB3ZSdyZSB1bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkg b2YgdGhvc2UgcGxhbiB0cmVlcywgdGhpcyB0ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlIHRvIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNl IHRoZSBhZHZpY2UKKyMgdHJvdmUgdG8gYmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBv ZiB2YXJpb3VzIHNvcnRzLCBidXQgd2hpY2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBh bnl0aGluZyBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMg cGxhbm5lciBob29rcyB3aWxsIGJlIGNhbGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1 dCBubyBwbGFucyBzaG91bGQKKyMgYWN0dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2Fkdmlj ZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lk IGJyZWFraW5nCisjIHJlZ3Jlc3Npb24gdGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIElu IHRoZSByZWFsIHdvcmxkLCBpdCBzZWVtcyBsaWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlO IG91dHB1dCB0byBzaG93IHN1cHBsaWVkIGFkdmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hl dGhlciBub3JtYWwgcGxhbm5lciBiZWhhdmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0 aGF0J3MgdW5kZXNpcmFibGUuCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics IDw8RU9NKTsKK3BnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAK K3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz1wZ19wbGFuX2FkdmljZQorcGdfcGxhbl9hZHZpY2Uu YWR2aWNlPSdTRVFfU0NBTihlbnRpcmVseV9maWN0aXRpb3VzKSBIQVNIX0pPSU4odG90YWxfZmFi cmljYXRpb24pIEdBVEhFUihjb21wbGV0ZWx5X2ltYWdpbmFyeSknCitwZ19wbGFuX2FkdmljZS5h bHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U9ZmFsc2UKK0VPTQorJG5vZGUtPnN0YXJ0Owor CitteSAkc3JjZGlyID0gYWJzX3BhdGgoIi4uLy4uIik7CisKKyMgLS1vdXRwdXRkaXIgcG9pbnRz IHRvIHRoZSBwYXRoIHdoZXJlIHRvIHBsYWNlIHRoZSBvdXRwdXQgZmlsZXMuCitteSAkb3V0cHV0 ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyMgLS1pbnB1dGRp ciBwb2ludHMgdG8gdGhlIHBhdGggb2YgdGhlIGlucHV0IGZpbGVzLgorbXkgJGlucHV0ZGlyID0g IiRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcyI7CisKKyMgUnVuIHRoZSB0ZXN0cy4KK215ICRyYyA9 CisgIHN5c3RlbSgkRU5We1BHX1JFR1JFU1N9IC4gIiAiCisJICAuICItLWJpbmRpcj0gIgorCSAg LiAiLS1ob3N0PSIgLiAkbm9kZS0+aG9zdCAuICIgIgorCSAgLiAiLS1wb3J0PSIgLiAkbm9kZS0+ cG9ydCAuICIgIgorCSAgLiAiLS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUgIgorCSAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAiCisJICAu ICItLWlucHV0ZGlyPVwiJGlucHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0 ZGlyXCIiKTsKKworIyBEdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlLCBpZiB0aGVy ZSBpcyBvbmUKK2lmICgkcmMgIT0gMCkKK3sKKwlteSAkZGlmZnMgPSAiJG91dHB1dGRpci9yZWdy ZXNzaW9uLmRpZmZzIjsKKwlpZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJpbnQgIj09PSBkdW1waW5n ICRkaWZmcyA9PT1cbiI7CisJCXByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKwkJcHJpbnQgIj09 PSBFT0YgPT09XG4iOworCX0KK30KKworIyBSZXBvcnQgcmVzdWx0cworaXMoJHJjLCAwLCAncmVn cmVzc2lvbiB0ZXN0cyBwYXNzJyk7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gc28gd2UgY2Fu IGFjY2VzcyB0aGUgY29sbGVjdG9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVB VEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5IHRoYXQgYSBsYXJnZSBh bW91bnQgb2YgYWR2aWNlIHdhcyBjb2xsZWN0ZWQKK215ICRhbGxfcXVlcnlfY291bnQgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBn X2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCitjbXBfb2soJGFsbF9xdWVyeV9j b3VudCwgJz4nLCA0MDAwMCwgImNvcGlvdXMgYWR2aWNlIGNvbGxlY3RlZCIpOworCisjIFZlcmlm eSB0aGF0IGxvdHMgb2YgZGlmZmVyZW50IGFkdmljZSBzdHJpbmdzIHdlcmUgY29sbGVjdGVkCitt eSAkZGlzdGluY3RfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8 RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NCisJKFNFTEVDVCBESVNUSU5DVCBhZHZpY2UgRlJP TSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSk7CitFT00KK2NtcF9vaygkZGlzdGlu Y3RfcXVlcnlfY291bnQsICc+JywgMzAwMCwgImRpdmVyc2UgYWR2aWNlIGNvbGxlY3RlZCIpOwor CisjIFdlIHdhbnQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIG91ciBrbm93biB0YWdzIGlu IHRoZSBjb2xsZWN0ZWQgYWR2aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50byB0aGUgaGFzaCB0aGF0 IGZvbGxvd3M7IG1hcCBhbnkgdGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQKKyMgYnkgdGhlIGNvcmUg cmVncmVzc2lvbiB0ZXN0cyB0byAwLCBhbmQgb3RoZXJzIHRvIDEuCitteSAldGFnX21hcCA9ICgK KwlCSVRNQVBfSEVBUF9TQ0FOID0+IDEsCisJRk9SRUlHTl9KT0lOID0+IDAsCisJR0FUSEVSID0+ IDEsCisJR0FUSEVSX01FUkdFID0+IDEsCisJSEFTSF9KT0lOID0+IDEsCisJSU5ERVhfT05MWV9T Q0FOID0+IDEsCisJSU5ERVhfU0NBTiA9PiAxLAorCUpPSU5fT1JERVIgPT4gMSwKKwlNRVJHRV9K T0lOX01BVEVSSUFMSVpFID0+IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9PiAxLAorCU5FU1RFRF9M T09QX01BVEVSSUFMSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfTUVNT0laRSA9PiAxLAorCU5FU1RF RF9MT09QX1BMQUlOID0+IDEsCisJTk9fR0FUSEVSID0+IDEsCisJUEFSVElUSU9OV0lTRSA9PiAx LAorCVNFTUlKT0lOX05PTl9VTklRVUUgPT4gMSwKKwlTRU1JSk9JTl9VTklRVUUgPT4gMSwKKwlT RVFfU0NBTiA9PiAxLAorCVRJRF9TQ0FOID0+IDEsCispOword2hpbGUgKG15ICgkdGFnLCAkY2hl Y2tpdCkgPSBlYWNoICV0YWdfbWFwKQoreworCSMgU2VhcmNoIGZvciB0aGUgZ2l2ZW4gdGFnLiBU aGlzIGlzIG5vdCBlbnRpcmVseSByb2J1c3Q6IGl0IGNvdWxkIGdldCB0aHJvd24KKwkjIG9mZiBi eSBhIHRhYmxlIGFsaWFzIHN1Y2ggYXMgIkZPUkVJR05fSk9JTigiLCBidXQgdGhhdCBwcm9iYWJs eSB3b24ndAorCSMgaGFwcGVuIGluIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMuCisJbXkgJHRh Z19jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENP VU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKKwlXSEVSRSBhZHZp Y2UgTElLRSAnJSR0YWcoJScKK0VPTQorCisJIyBDaGVjayB0aGF0IHRoZSB0YWcgZ290IGEgbm9u LXRyaXZpYWwgYW1vdW50IG9mIHVzZSwgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgorCWNtcF9vaygk dGFnX2NvdW50LCAnPicsIDEwLCAibXVsdGlwbGUgdXNlcyBvZiAkdGFnIikgaWYgJGNoZWNraXQ7 CisKKwkjIFJlZ2FyZGxlc3MsIG5vdGUgdGhlIGV4YWN0IGNvdW50IGluIHRoZSBsb2csIGZvciBo dW1hbiBjb25zdW1wdGlvbi4KKwlub3RlKCJmb3VuZCAkdGFnX2NvdW50IGFkdmljZSBzdHJpbmdz IGNvbnRhaW5pbmcgJHRhZyIpOworfQorCisjIFRyaWdnZXIgYSBwYXJ0aWFsIGNsZWFudXAgb2Yg dGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLCBhbmQgdGhlbiBhIGZ1bGwKKyMgY2xlYW51cC4K KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VUIHBnX3BsYW5fYWR2aWNl LnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUwMDsKK1NFTEVDVCAqIEZST00gcGdfY2xlYXJfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKaW5kZXggNGZmNDcxMTVjYTguLmQxYTdlNWY4YzQ2IDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMzkyOCw2ICszOTI4LDQzIEBAIHBnX3djX3Byb2JlZnVuYwog cGdfd2NoYXIKIHBnX3djaGFyX3RibAogcGdwX2FybW9yX2hlYWRlcnNfc3RhdGUKK3BncGFfY29s bGVjdGVkX2FkdmljZQorcGdwYV9hZHZpY2VfaXRlbQorcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3Bn cGFfYWR2aWNlX3RhcmdldAorcGdwYV9pZGVudGlmaWVyCitwZ3BhX2luZGV4X3RhcmdldAorcGdw YV9pbmRleF90eXBlCitwZ3BhX2l0bV90eXBlCitwZ3BhX2pvaW5fY2xhc3MKK3BncGFfam9pbl9t ZW1iZXIKK3BncGFfam9pbl9zdGF0ZQorcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2pvaW5fdW5y b2xsZXIKK3BncGFfbG9jYWxfYWR2aWNlCitwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworcGdwYV9v dXRwdXRfY29udGV4dAorcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0CitwZ3BhX3BsYW5uZXJfc3Rh dGUKK3BncGFfcWZfdHlwZQorcGdwYV9xdWVyeV9mZWF0dXJlCitwZ3BhX3JpX2NoZWNrZXIKK3Bn cGFfcmlfY2hlY2tlcl9rZXkKK3BncGFfc2NhbgorcGdwYV9zY2FuX3N0cmF0ZWd5CitwZ3BhX3No YXJlZF9hZHZpY2UKK3BncGFfc2hhcmVkX2FkdmljZV9jaHVuaworcGdwYV9zaGFyZWRfc3RhdGUK K3BncGFfdGFyZ2V0X3R5cGUKK3BncGFfdHJvdmUKK3BncGFfdHJvdmVfZW50cnkKK3BncGFfdHJv dmVfZW50cnlfZWxlbWVudAorcGdwYV90cm92ZV9lbnRyeV9oYXNoCitwZ3BhX3Ryb3ZlX2VudHJ5 X2tleQorcGdwYV90cm92ZV9sb29rdXBfdHlwZQorcGdwYV90cm92ZV9yZXN1bHQKK3BncGFfdHJv dmVfc2xpY2UKK3BncGFfdW5yb2xsZWRfam9pbgogcGdzb2NrZXQKIHBnc3FsX3RoaW5nX3QKIHBn c3NFbnRyeQotLSAKMi41MS4wCgo= --000000000000e6740f0642efcc52--