Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1afE3V-0005bs-JH for pgsql-hackers@arkaria.postgresql.org; Sun, 13 Mar 2016 22:00:10 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1afE3V-0003rn-3D for pgsql-hackers@arkaria.postgresql.org; Sun, 13 Mar 2016 22:00:09 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1afE3Q-0003pQ-5I for pgsql-hackers@postgresql.org; Sun, 13 Mar 2016 22:00:05 +0000 Received: from mail-wm0-x22b.google.com ([2a00:1450:400c:c09::22b]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1afE37-0003vK-2n for pgsql-hackers@postgresql.org; Sun, 13 Mar 2016 22:00:02 +0000 Received: by mail-wm0-x22b.google.com with SMTP id p65so79908311wmp.1 for ; Sun, 13 Mar 2016 14:59:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=EK/Blt1B5tC5KiI3hoh+/aPhARtdjRGHty/TL7qkXfU=; b=Vj7Mi6LuX/RLdLYZ6/wduqExpGkdW33/AEzHbmXTGXvrK0kDFsFwZOr0qfEcp2VZzz 5V6ypVSeJPeV8x/ZQv13z3giWC8emWLNntthWBpaX0HFxtIcoIV/zM0TTPq4v/Bxctw5 IHFylWmxncM4kB9QpyaJcx5HRNxnILiv7F6g3VQgcy899accniQfnZD7S81jLUPdtFUI 7Dym2Ej7AP75vwI3PSGpMmvsfznTnJp3ABV12mVlqfyU7/zxI57uSfb4n0wH9LqjWmMs LHTB0xhRZ+Ae1H4RxOMJo9pC3VfaWvzR7J8LiqFibpCNwx+z/yVhfYJh1CqVBU/tPLB/ UGtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=EK/Blt1B5tC5KiI3hoh+/aPhARtdjRGHty/TL7qkXfU=; b=A01sf3nbytAEcocx4Fa0mHjeslKErtEClddWK+Zo+tw31isWVUYlaXsoUqoIcZjpnr o5ub9iPrDQM+uSQtQBEaw4hBqvLCAVtb75EBf/CodtrwhN+97lCeqSA2jh+G6L1uoN/W HSBnhLhRpMbbWBB60npFTEjHCovmkgi6Izk1vZWfAevcKPZ4mpt76Rmt+0v5/NxmuL0Y wmx2G1ZD1FoiIZpMsr9pzH7R1odpgskYbmWPfSfeIU0pHFwfkerps/w8Wfbn06Hgl/VK M5VuiojklGKk7ELWeA7NmleS2PKZ1c74kLgKGHBsXmY+Yzl7lKkWmbjQg9U5Qkv971sx BMhg== X-Gm-Message-State: AD7BkJJJHZjTg4AeFOIv2x90YMYXli7ysAzsPvRDxdwIwfJgvyESj1gXHRB7dPr41aZhGqq3 X-Received: by 10.28.224.132 with SMTP id x126mr14965582wmg.88.1457906383190; Sun, 13 Mar 2016 14:59:43 -0700 (PDT) Received: from development (ip-78-45-216-26.net.upcbroadband.cz. [78.45.216.26]) by smtp.gmail.com with ESMTPSA id b1sm19444333wjy.0.2016.03.13.14.59.39 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 13 Mar 2016 14:59:41 -0700 (PDT) Message-ID: <1457906378.27231.10.camel@2ndquadrant.com> Subject: Re: multivariate statistics v14 From: Tomas Vondra To: Jeff Janes Cc: Alvaro Herrera , pgsql-hackers Date: Sun, 13 Mar 2016 22:59:38 +0100 In-Reply-To: References: <20160309122245.GA958049@alvherre.pgsql> <1457535779.24545.71.camel@2ndquadrant.com> <1457544102.24545.79.camel@2ndquadrant.com> Content-Type: multipart/mixed; boundary="=-up6WTUbKgy8U7iRSMYnB" X-Mailer: Evolution 3.18.5.1 (3.18.5.1-1.fc23) Mime-Version: 1.0 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=-up6WTUbKgy8U7iRSMYnB Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit On Sat, 2016-03-12 at 23:30 -0800, Jeff Janes wrote: > On Wed, Mar 9, 2016 at 9:21 AM, Tomas Vondra > wrote: > > > > Hi, > > > > On Wed, 2016-03-09 at 08:45 -0800, Jeff Janes wrote: > > > > > > On Wed, Mar 9, 2016 at 7:02 AM, Tomas Vondra > > > wrote: > > > > > > > > Hi, > > > > > > > > thanks for the feedback. Attached is v14 of the patch series, > > > > fixing > > > > most of the points you've raised. > > > > > > Hi Tomas, > > > > > > Applied to aa09cd242fa7e3a694a31f, I still get the seg faults in > > > make > > > check if I configure without --enable-cassert. > > Ah, after disabling asserts I can reproduce it too. And the reason > > why > > it fails is quite simple - clauselist_selectivity modifies the > > original > > list of clauses, which then confuses cost_qual_eval. > > > > Can you try if the attached patch fixes the issue? I'll need to > > rework a > > bit more of the code, but let's see if this fixes the issue on your > > machine too. > That patch on top of v14 did fix the original problem.  But I got > another segfault: Oh, yeah. There was an extra pfree(). Attached is v15 of the patch series, fixing this and also doing quite a few additional improvements: * added some basic examples into the SGML documentation * addressing the objectaddress omissions, as pointed out by Alvaro * support for ALTER STATISTICS ... OWNER TO / RENAME / SET SCHEMA * significant refactoring of MCV and histogram code, particularly    serialization, deserialization and building * reworking the functional dependencies to support more complex    dependencies, with multiple columns as 'conditions' * the reduction using functional dependencies is also significantly    simplified (I decided to get rid of computing the transitive closure    for now - it got too complex after the multi-condition dependencies,    so I'll leave that for the future regards -- Tomas Vondra                  http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename*0=0008-change-how-we-apply-selectivity-to-number-of-groups-.pat; filename*1=ch Content-Type: text/x-patch; name="0008-change-how-we-apply-selectivity-to-number-of-groups-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA0OTRhMzFlMWVkNzk3NmUwZjk2NWEzMmU4MWM3NjllMWMzZGZhZDY2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyNiBKYW4gMjAxNiAx ODoxNDozMyArMDEwMApTdWJqZWN0OiBbUEFUQ0ggOC85XSBjaGFuZ2UgaG93 IHdlIGFwcGx5IHNlbGVjdGl2aXR5IHRvIG51bWJlciBvZiBncm91cHMKIGVz dGltYXRlCgpJbnN0ZWFkIG9mIHNpbXBseSBtdWx0aXBseWluZyB0aGUgbmRp c3RpbmN0IGVzdGltYXRlIHdpdGggc2VsZWN0aWNpdHksCndlIGluc3RlYWQg dXNlIHRoZSBmb3JtdWxhIGZvciB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGRp c3RpbmN0IHZhbHVlcwpvYnNlcnZlZCBpbiAnaycgcm93cyB3aGVuIHRoZXJl IGFyZSAnZCcgZGlzdGluY3QgdmFsdWVzIGluIHRoZSBiaW4KCiAgICBkICog KDEgLSAoKGQgLSAxKSAvIGQpXmspCgpUaGlzIGlzICd3aXRoIHJlcGxhY2Vt ZW50cycgd2hpY2ggc2VlbXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB1c2UsIGFu ZCBpdAptb3N0bHkgYXNzdW1lcyB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiB0 aGUgZGlzdGluY3QgdmFsdWVzLiBTbyBpZiB0aGUKZGlzdHJpYnV0aW9uIGlz IG5vdCB1bmlmb3JtIChlLmcuIHRoZXJlIGFyZSB2ZXJ5IGZyZXF1ZW50IGdy b3VwcykgdGhpcwptYXkgYmUgbGVzcyBhY2N1cmF0ZSB0aGFuIHRoZSBjdXJy ZW50IGFsZ29yaXRobSBpbiBzb21lIGNhc2VzLCBnaXZpbmcKb3Zlci1lc3Rp bWF0ZXMuIEJ1dCB0aGF0J3MgcHJvYmFibHkgYmV0dGVyIHRoYW4gT09NLgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIHwgMiArLQog MSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBm OGQzOWFhLi42ZWNlZWRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtMzQ2Niw3ICszNDY2LDcgQEAgZXN0aW1hdGVfbnVt X2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywg ZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkvKgogCQkJICogTXVsdGlwbHkgYnkg cmVzdHJpY3Rpb24gc2VsZWN0aXZpdHkuCiAJCQkgKi8KLQkJCXJlbGRpc3Rp bmN0ICo9IHJlbC0+cm93cyAvIHJlbC0+dHVwbGVzOworCQkJcmVsZGlzdGlu Y3QgPSByZWxkaXN0aW5jdCAqICgxIC0gcG93bCgocmVsZGlzdGluY3QgLSAx KSAvIHJlbGRpc3RpbmN0LHJlbC0+cm93cykpOwogCiAJCQkvKgogCQkJICog VXBkYXRlIGVzdGltYXRlIG9mIHRvdGFsIGRpc3RpbmN0IGdyb3Vwcy4KLS0g CjIuNS4wCgo= --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename="0007-multivariate-ndistinct-coefficients.patch" Content-Type: text/x-patch; name="0007-multivariate-ndistinct-coefficients.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxYjkwNWM3N2U4NTFkMzQyMjlkYTcyYzJhODQxMDdmYTA5MjVmNTRh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogV2VkLCAyMyBEZWMgMjAxNSAw MjowNzo1OCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggNy85XSBtdWx0aXZhcmlh dGUgbmRpc3RpbmN0IGNvZWZmaWNpZW50cwoKLS0tCiBkb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwgICAgfCAgIDkgKysKIHNyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICB8ICAgMyAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAg ICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICB8ICA5MyArKysrKysr KysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxl ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLm5kaXN0aW5jdCB8ICA4MyArKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgICAgIHwgICAyICsK IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgICAgICAgICB8 ICAyMyArKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5j ICAgICAgICAgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmggICAgICB8 ICAyNiArKystLQogc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aCAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICAzICstCiAxNiBmaWxlcyBj aGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9S RUFETUUubmRpc3RpbmN0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbAppbmRleCBmNzMzNmZk Li44MGU0NzJmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xNjgsNiArMTY4LDE1IEBAIENSRUFU RSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX25hCiAgICAgPC9saXN0aXRl bT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPjxsaXRlcmFsPm5kaXN0aW5jdDwvPiAoPHR5cGU+Ym9vbGVh bjwvPik8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIEVuYWJsZXMgbmRpc3RpbmN0IGNvZWZmaWNpZW50cyBmb3IgdGhlIHN0 YXRpc3RpY3MuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwv cmVmc2VjdDI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKaW5kZXggYjE1MWRiMS4uOGQyYjQzNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTY5LDcg KzE2OSw4IEBAIENSRUFURSBWSUVXIHBnX212X3N0YXRzIEFTCiAgICAgICAg IGxlbmd0aChTLnN0YW1jdikgQVMgbWN2Ynl0ZXMsCiAgICAgICAgIHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyhTLnN0YW1jdikgQVMgbWN2aW5mbywKICAg ICAgICAgbGVuZ3RoKFMuc3RhaGlzdCkgQVMgaGlzdGJ5dGVzLAotICAgICAg ICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhTLnN0YWhpc3QpIEFTIGhp c3RpbmZvCisgICAgICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKFMu c3RhaGlzdCkgQVMgaGlzdGluZm8sCisgICAgICAgIHN0YW5kY29lZmYgQVMg bmRjb2VmZgogICAgIEZST00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdf Y2xhc3MgQyBPTiAoQy5vaWQgPSBTLnN0YXJlbGlkKSkKICAgICAgICAgTEVG VCBKT0lOIHBnX25hbWVzcGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNw YWNlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5h bHl6ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCmluZGV4 IDkwODc1MzIuLmMyOWYxYmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9h bmFseXplLmMKQEAgLTU4Miw3ICs1ODIsNyBAQCBkb19hbmFseXplX3JlbChS ZWxhdGlvbiBvbmVyZWwsIGludCBvcHRpb25zLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkJfQogCiAJCS8qIEJ1aWxkIG11bHRpdmFyaWF0ZSBzdGF0cyAo aWYgdGhlcmUgYXJlIGFueSkuICovCi0JCWJ1aWxkX212X3N0YXRzKG9uZXJl bCwgbnVtcm93cywgcm93cywgYXR0cl9jbnQsIHZhY2F0dHJzdGF0cyk7CisJ CWJ1aWxkX212X3N0YXRzKG9uZXJlbCwgdG90YWxyb3dzLCBudW1yb3dzLCBy b3dzLCBhdHRyX2NudCwgdmFjYXR0cnN0YXRzKTsKIAl9CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCBlMGIwODVm Li5hN2M1NjlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9z dGF0c2NtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2Nt ZHMuYwpAQCAtNzIsNyArNzIsOCBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0 ZVN0YXRzU3RtdCAqc3RtdCkKIAkvKiBieSBkZWZhdWx0IGJ1aWxkIG5vdGhp bmcgKi8KIAlib29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZSwKIAkJ CWJ1aWxkX21jdiA9IGZhbHNlLAotCQkJYnVpbGRfaGlzdG9ncmFtID0gZmFs c2U7CisJCQlidWlsZF9oaXN0b2dyYW0gPSBmYWxzZSwKKwkJCWJ1aWxkX25k aXN0aW5jdCA9IGZhbHNlOwogCiAJaW50MzIgCW1heF9idWNrZXRzID0gLTEs CiAJCQltYXhfbWN2X2l0ZW1zID0gLTE7CkBAIC0xNTUsNiArMTU2LDggQEAg Q3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAKIAkJ aWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJkZXBlbmRlbmNpZXMiKSA9PSAw KQogCQkJYnVpbGRfZGVwZW5kZW5jaWVzID0gZGVmR2V0Qm9vbGVhbihvcHQp OworCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmRpc3RpbmN0 IikgPT0gMCkKKwkJCWJ1aWxkX25kaXN0aW5jdCA9IGRlZkdldEJvb2xlYW4o b3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm1jdiIp ID09IDApCiAJCQlidWlsZF9tY3YgPSBkZWZHZXRCb29sZWFuKG9wdCk7CiAJ CWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJtYXhfbWN2X2l0ZW1z IikgPT0gMCkKQEAgLTIwOSwxMCArMjEyLDEwIEBAIENyZWF0ZVN0YXRpc3Rp Y3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCX0KIAogCS8qIGNoZWNrIHRo YXQgYXQgbGVhc3Qgc29tZSBzdGF0aXN0aWNzIHdlcmUgcmVxdWVzdGVkICov Ci0JaWYgKCEgKGJ1aWxkX2RlcGVuZGVuY2llcyB8fCBidWlsZF9tY3YgfHwg YnVpbGRfaGlzdG9ncmFtKSkKKwlpZiAoISAoYnVpbGRfZGVwZW5kZW5jaWVz IHx8IGJ1aWxkX21jdiB8fCBidWlsZF9oaXN0b2dyYW0gfHwgYnVpbGRfbmRp c3RpbmN0KSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJIGVycm1zZygibm8gc3RhdGlzdGlj cyB0eXBlIChkZXBlbmRlbmNpZXMsIG1jdiwgaGlzdG9ncmFtKSB3YXMgcmVx dWVzdGVkIikpKTsKKwkJCQkgZXJybXNnKCJubyBzdGF0aXN0aWNzIHR5cGUg KGRlcGVuZGVuY2llcywgbWN2LCBoaXN0b2dyYW0sIG5kaXN0aW5jdCkgd2Fz IHJlcXVlc3RlZCIpKSk7CiAKIAkvKiBub3cgZG8gc29tZSBjaGVja2luZyBv ZiB0aGUgb3B0aW9ucyAqLwogCWlmIChyZXF1aXJlX21jdiAmJiAoISBidWls ZF9tY3YpKQpAQCAtMjQ2LDYgKzI0OSw3IEBAIENyZWF0ZVN0YXRpc3RpY3Mo Q3JlYXRlU3RhdHNTdG10ICpzdG10KQogCXZhbHVlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19kZXBzX2VuYWJsZWQgLTFdID0gQm9vbEdldERhdHVtKGJ1aWxk X2RlcGVuZGVuY2llcyk7CiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGlj X21jdl9lbmFibGVkICAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRfbWN2KTsK IAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9lbmFibGVkIC0x XSA9IEJvb2xHZXREYXR1bShidWlsZF9oaXN0b2dyYW0pOworCXZhbHVlc1tB bnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9lbmFibGVkLTFdID0gQm9vbEdl dERhdHVtKGJ1aWxkX25kaXN0aW5jdCk7CiAKIAl2YWx1ZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcyAgICAtMV0gPSBJbnQzMkdldERh dHVtKG1heF9tY3ZfaXRlbXMpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRp c3RpY19oaXN0X21heF9idWNrZXRzIC0xXSA9IEludDMyR2V0RGF0dW0obWF4 X2J1Y2tldHMpOwpAQCAtMjUzLDYgKzI1Nyw3IEBAIENyZWF0ZVN0YXRpc3Rp Y3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCW51bGxzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWRlcHMgIC0xXSA9IHRydWU7CiAJbnVsbHNbQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhbWN2ICAgLTFdID0gdHJ1ZTsKIAludWxsc1tB bnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0ICAtMV0gPSB0cnVlOworCW51 bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5kaXN0IC0xXSA9IHRydWU7 CiAKIAkvKiBpbnNlcnQgdGhlIHR1cGxlIGludG8gcGdfbXZfc3RhdGlzdGlj ICovCiAJbXZzdGF0cmVsID0gaGVhcF9vcGVuKE12U3RhdGlzdGljUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4IGUwNmZkOTkuLjI1 NWQyNzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jCkBAIC01OSw2ICs1OSw3IEBAIHN0YXRpYyB2b2lkIGFk ZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxpc3QsIE5vZGUg KmNsYXVzZSwKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX0ZERVAJCTB4MDEK ICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX01DVgkJMHgwMgogI2RlZmluZQkJ TVZfQ0xBVVNFX1RZUEVfSElTVAkJMHgwNAorI2RlZmluZQkJTVZfQ0xBVVNF X1RZUEVfTkRJU1QJMHgwOAogCiBzdGF0aWMgYm9vbCBjbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBCaXRtYXBz ZXQgKiphdHRudW1zLAogCQkJCQkJCSBpbnQgdHlwZSk7CkBAIC0yODYwLDYg KzI4NjEsOSBAQCBzdGF0c190eXBlX21hdGNoZXMoTVZTdGF0aXN0aWNJbmZv ICpzdGF0LCBpbnQgdHlwZSkKIAlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQ RV9ISVNUKSAmJiBzdGF0LT5oaXN0X2J1aWx0KQogCQlyZXR1cm4gdHJ1ZTsK IAorCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX05ESVNUKSAmJiBzdGF0 LT5uZGlzdF9idWlsdCkKKwkJcmV0dXJuIHRydWU7CisKIAlyZXR1cm4gZmFs c2U7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bs YW5jYXQuYwppbmRleCAyNTE5MjQ5Li4zNzQxYjdhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC00MTIsNyAr NDEyLDcgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3Qs IE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCW12 c3RhdCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXAp OwogCiAJCQkvKiB1bmF2YWlsYWJsZSBzdGF0cyBhcmUgbm90IGludGVyZXN0 aW5nIGZvciB0aGUgcGxhbm5lciAqLwotCQkJaWYgKG12c3RhdC0+ZGVwc19i dWlsdCB8fCBtdnN0YXQtPm1jdl9idWlsdCB8fCBtdnN0YXQtPmhpc3RfYnVp bHQpCisJCQlpZiAobXZzdGF0LT5kZXBzX2J1aWx0IHx8IG12c3RhdC0+bWN2 X2J1aWx0IHx8IG12c3RhdC0+aGlzdF9idWlsdCB8fCBtdnN0YXQtPm5kaXN0 X2J1aWx0KQogCQkJewogCQkJCWluZm8gPSBtYWtlTm9kZShNVlN0YXRpc3Rp Y0luZm8pOwogCkBAIC00MjMsMTEgKzQyMywxMyBAQCBnZXRfcmVsYXRpb25f aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs IGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmRlcHNfZW5hYmxlZCA9IG12 c3RhdC0+ZGVwc19lbmFibGVkOwogCQkJCWluZm8tPm1jdl9lbmFibGVkICA9 IG12c3RhdC0+bWN2X2VuYWJsZWQ7CiAJCQkJaW5mby0+aGlzdF9lbmFibGVk ID0gbXZzdGF0LT5oaXN0X2VuYWJsZWQ7CisJCQkJaW5mby0+bmRpc3RfZW5h YmxlZCA9IG12c3RhdC0+bmRpc3RfZW5hYmxlZDsKIAogCQkJCS8qIGJ1aWx0 L2F2YWlsYWJsZSBzdGF0aXN0aWNzICovCiAJCQkJaW5mby0+ZGVwc19idWls dCA9IG12c3RhdC0+ZGVwc19idWlsdDsKIAkJCQlpbmZvLT5tY3ZfYnVpbHQg ID0gbXZzdGF0LT5tY3ZfYnVpbHQ7CiAJCQkJaW5mby0+aGlzdF9idWlsdCA9 IG12c3RhdC0+aGlzdF9idWlsdDsKKwkJCQlpbmZvLT5uZGlzdF9idWlsdCA9 IG12c3RhdC0+bmRpc3RfYnVpbHQ7CiAKIAkJCQkvKiBzdGFrZXlzICovCiAJ CQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9JRCwgaHR1cCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggODA1 ZDYzMy4uZjhkMzlhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogI2luY2x1ZGUgInV0aWxz L2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3Mu aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1 dGlscy9tdnN0YXRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbmFic3RpbWUuaCIK ICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKICNpbmNsdWRlICJ1dGls cy9yZWwuaCIKQEAgLTIwNiw2ICsyMDcsNyBAQCBzdGF0aWMgQ29uc3QgKnN0 cmluZ190b19jb25zdChjb25zdCBjaGFyICpzdHIsIE9pZCBkYXRhdHlwZSk7 CiBzdGF0aWMgQ29uc3QgKnN0cmluZ190b19ieXRlYV9jb25zdChjb25zdCBj aGFyICpzdHIsIHNpemVfdCBzdHJfbGVuKTsKIHN0YXRpYyBMaXN0ICphZGRf cHJlZGljYXRlX3RvX3F1YWxzKEluZGV4T3B0SW5mbyAqaW5kZXgsIExpc3Qg KmluZGV4UXVhbHMpOwogCitzdGF0aWMgT2lkIGZpbmRfbmRpc3RpbmN0X2Nv ZWZmKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3Qg KnZhcmluZm9zKTsKIAogLyoKICAqCQllcXNlbAkJCS0gU2VsZWN0aXZpdHkg b2YgIj0iIGZvciBhbnkgZGF0YSB0eXBlcy4KQEAgLTM0MjMsMTIgKzM0MjUs MjYgQEAgZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkgKiBk b24ndCBrbm93IGJ5IGhvdyBtdWNoLiAgV2Ugc2hvdWxkIG5ldmVyIGNsYW1w IHRvIGxlc3MgdGhhbiB0aGUKIAkJCSAqIGxhcmdlc3QgbmRpc3RpbmN0IHZh bHVlIGZvciBhbnkgb2YgdGhlIFZhcnMsIHRob3VnaCwgc2luY2UKIAkJCSAq IHRoZXJlIHdpbGwgc3VyZWx5IGJlIGF0IGxlYXN0IHRoYXQgbWFueSBncm91 cHMuCisJCQkgKgorCQkJICogSG93ZXZlciB3ZSBkb24ndCBuZWVkIHRvIGRv IHRoaXMgaWYgd2UgaGF2ZSBuZGlzdGluY3Qgc3RhdHMgb24KKwkJCSAqIHRo ZSBjb2x1bW5zIC0gaW4gdGhhdCBjYXNlIHdlIGNhbiBzaW1wbHkgdXNlIHRo ZSBjb2VmZmljaWVudAorCQkJICogdG8gZ2V0IHRoZSAocHJvYmFibHkgd2F5 IG1vcmUgYWNjdXJhdGUpIGVzdGltYXRlLgorCQkJICoKKwkJCSAqIFhYWCBQ cm9iYWJseSBuZWVkcyByZWZhY3RvcmluZyAoZG9uJ3QgbGlrZSB0byBtaXgg d2l0aCBjbGFtcAorCQkJICogICAgIGFuZCBjb2VmZiBhdCB0aGUgc2FtZSB0 aW1lKS4KIAkJCSAqLwogCQkJZG91YmxlCQljbGFtcCA9IHJlbC0+dHVwbGVz OworCQkJZG91YmxlCQljb2VmZiA9IDEuMDsKIAogCQkJaWYgKHJlbHZhcmNv dW50ID4gMSkKIAkJCXsKLQkJCQljbGFtcCAqPSAwLjE7CisJCQkJT2lkIG9p ZCA9IGZpbmRfbmRpc3RpbmN0X2NvZWZmKHJvb3QsIHJlbCwgdmFyaW5mb3Mp OworCisJCQkJaWYgKG9pZCAhPSBJbnZhbGlkT2lkKQorCQkJCQljb2VmZiA9 IGxvYWRfbXZfbmRpc3RpbmN0KG9pZCk7CisJCQkJZWxzZQorCQkJCQljbGFt cCAqPSAwLjE7CisKIAkJCQlpZiAoY2xhbXAgPCByZWxtYXhuZGlzdGluY3Qp CiAJCQkJewogCQkJCQljbGFtcCA9IHJlbG1heG5kaXN0aW5jdDsKQEAgLTM0 MzcsNiArMzQ1MywxMyBAQCBlc3RpbWF0ZV9udW1fZ3JvdXBzKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93 cywKIAkJCQkJCWNsYW1wID0gcmVsLT50dXBsZXM7CiAJCQkJfQogCQkJfQor CisJCQkvKgorCQkJICogQXBwbHkgbmRpc3RpbmN0IGNvZWZmaWNpZW50IGZy b20gbXVsdGl2YXIgc3RhdHMgKHdlIG11c3QgZG8gdGhpcworCQkJICogYmVm b3JlIGNsYW1waW5nIHRoZSBlc3RpbWF0ZSBpbiBhbnkgd2F5LgorCQkJICov CisJCQlyZWxkaXN0aW5jdCAvPSBjb2VmZjsKKwogCQkJaWYgKHJlbGRpc3Rp bmN0ID4gY2xhbXApCiAJCQkJcmVsZGlzdGluY3QgPSBjbGFtcDsKIApAQCAt NzU4MywzICs3NjA2LDcxIEBAIGJyaW5jb3N0ZXN0aW1hdGUoUGxhbm5lcklu Zm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQs CiAKIAkvKiBYWFggd2hhdCBhYm91dCBwYWdlc19wZXJfcmFuZ2U/ICovCiB9 CisKKy8qCisgKiBGaW5kIGFwcGxpY2FibGUgbmRpc3RpbmN0IHN0YXRpc3Rp Y3MgYW5kIGNvbXB1dGUgdGhlIGNvZWZmaWNpZW50IHRvCisgKiBjb3JyZWN0 IHRoZSBlc3RpbWF0ZSAoc2ltcGx5IGEgcHJvZHVjdCBvZiBwZXItY29sdW1u IG5kaXN0aW5jdHMpLgorICoKKyAqIEN1cnJlbnRseSB3ZSBvbmx5IGxvb2sg Zm9yIGEgcGVyZmVjdCBtYXRjaCwgaS5lLiBhIHNpbmdsZSBuZGlzdGluY3QK KyAqIGVzdGltYXRlIGV4YWN0bHkgbWF0Y2hpbmcgYWxsIHRoZSBjb2x1bW5z IG9mIHRoZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgT2lkCitmaW5kX25k aXN0aW5jdF9jb2VmZihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLCBMaXN0ICp2YXJpbmZvcykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJQml0 bWFwc2V0ICphdHRudW1zID0gTlVMTDsKKwlWYXJpYWJsZVN0YXREYXRhIHZh cmRhdGE7CisKKwlmb3JlYWNoKGxjLCB2YXJpbmZvcykKKwl7CisJCUdyb3Vw VmFySW5mbyAqdmFyaW5mbyA9IChHcm91cFZhckluZm8gKikgbGZpcnN0KGxj KTsKKworCQlpZiAodmFyaW5mby0+cmVsICE9IHJlbCkKKwkJCWNvbnRpbnVl OworCisJCS8qIEZJWE1FIGhhbmRsZSBleHByZXNzaW9ucyBpbiBnZW5lcmFs IG9ubHkgKi8KKworCQkvKgorCQkgKiBleGFtaW5lIHRoZSB2YXJpYWJsZSAo b3IgZXhwcmVzc2lvbikgc28gdGhhdCB3ZSBrbm93IHdoaWNoCisJCSAqIGF0 dHJpYnV0ZSB3ZSdyZSBkZWFsaW5nIHdpdGggLSB3ZSBuZWVkIHRoaXMgZm9y IG1hdGNoaW5nIHRoZQorCQkgKiBuZGlzdGluY3QgY29lZmZpY2llbnQKKwkJ ICoKKwkJICogRklYTUUgcHJvYmFibHkgbWlnaHQgcmVtZW1iZXIgdGhpcyBm cm9tIGVzdGltYXRlX251bV9ncm91cHMKKwkJICovCisJCWV4YW1pbmVfdmFy aWFibGUocm9vdCwgdmFyaW5mby0+dmFyLCAwLCAmdmFyZGF0YSk7CisKKwkJ aWYgKEhlYXBUdXBsZUlzVmFsaWQodmFyZGF0YS5zdGF0c1R1cGxlKSkKKwkJ eworCQkJRm9ybV9wZ19zdGF0aXN0aWMgc3RhdHMKKwkJCQk9IChGb3JtX3Bn X3N0YXRpc3RpYykgR0VUU1RSVUNUKHZhcmRhdGEuc3RhdHNUdXBsZSk7CisK KwkJCWF0dG51bXMgPSBibXNfYWRkX21lbWJlcihhdHRudW1zLCBzdGF0cy0+ c3RhYXR0bnVtKTsKKworCQkJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0 YSk7CisJCX0KKwl9CisKKwkvKiBsb29rIGZvciBhIG1hdGNoaW5nIG5kaXN0 aW5jdCBzdGF0aXN0aWNzICovCisJZm9yZWFjaCAobGMsIHJlbC0+bXZzdGF0 bGlzdCkKKwl7CisJCWludCBpOworCQlNVlN0YXRpc3RpY0luZm8gKmluZm8g PSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KGxjKTsKKworCQkvKiBza2lw IHN0YXRpc3RpY3Mgd2l0aG91dCBuZGlzdGluY3QgY29lZmZpY2llbnQgYnVp bHQgKi8KKwkJaWYgKCFpbmZvLT5uZGlzdF9idWlsdCkKKwkJCWNvbnRpbnVl OworCisJCS8qIG9ubHkgZXhhY3QgbWF0Y2hlcyBmb3Igbm93IChzYW1lIHNl dCBvZiBjb2x1bW5zKSAqLworCQlpZiAoYm1zX251bV9tZW1iZXJzKGF0dG51 bXMpICE9IGluZm8tPnN0YWtleXMtPmRpbTEpCisJCQljb250aW51ZTsKKwor CQkvKiBjaGVjayB0aGF0IHRoZSBjb2x1bW5zIG1hdGNoICovCisJCWZvciAo aSA9IDA7IGkgPCBpbmZvLT5zdGFrZXlzLT5kaW0xOyBpKyspCisJCQlpZiAo Ym1zX2lzX21lbWJlcihpbmZvLT5zdGFrZXlzLT52YWx1ZXNbaV0sIGF0dG51 bXMpKQorCQkJCWNvbnRpbnVlOworCisJCXJldHVybiBpbmZvLT5tdm9pZDsK Kwl9CisKKwlyZXR1cm4gSW52YWxpZE9pZDsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgYi9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCmluZGV4IDlkYmIzYjYuLmQ0Yjg4 ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFr ZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmls ZQpAQCAtMTIsNiArMTIsNiBAQCBzdWJkaXIgPSBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgogaW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1PQkpT ID0gY29tbW9uLm8gZGVwZW5kZW5jaWVzLm8gaGlzdG9ncmFtLm8gbWN2Lm8K K09CSlMgPSBjb21tb24ubyBkZXBlbmRlbmNpZXMubyBoaXN0b2dyYW0ubyBt Y3YubyBtdmRpc3QubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2Jh Y2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5uZGlzdGluY3QgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5uZGlzdGluY3QKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMzJkMTYyNAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLm5kaXN0aW5jdApA QCAtMCwwICsxLDgzIEBACituZGlzdGluY3QgY29lZmZpY2llbnRzCis9PT09 PT09PT09PT09PT09PT09PT09CisKK0VzdGltYXRpbmcgbnVtYmVyIG9mIGRp c3RpbmN0IGdyb3VwcyBpbiBhIGNvbWJpbmF0aW9uIG9mIGNvbHVtbnMgaXMg dHJpY2t5LAorYW5kIHRoZSBlc3RpbWF0aW9uIGVycm9yIGlzIG9mdGVuIHNp Z25pZmljYW50LiBCeSBuZGlzdGluY3QgY29lZmZpY2llbnQgd2UKK21lYW4g YSByYXRpbworCisgICAgcSA9IG5kaXN0aW5jdChhKSAqIG5kaXN0aW5jdChi KSAvIG5kaXN0aW5jdChhLGIpCisKK3doZXJlICdhJyBhbmQgJ2InIGFyZSBj b2x1bW5zLCBuZGlzdGluY3QoYSkgaXMgKGFuIGVzdGltYXRlIG9mKSBhIG51 bWJlciBvZgorZGlzdGluY3QgdmFsdWVzIGluIGNvbHVtbiAnYScuIEFuZCBu ZGlzdGluY3QoYSxiKSBpcyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlCitwYWly IG9mIGNvbHVtbnMuCisKK1RoZSBtZWFuaW5nIG9mIHRoZSBjb2VmZmljaWVu dCBtYXkgYmUgaWxsdXN0cmF0ZWQgYnkgYW5zd2VyaW5nIHRoZSBmb2xsb3dp bmcKK3F1ZXN0aW9uOiBHaXZlbiBhIGNvbWJpbmF0aW9uIG9mIGNvbHVtbnMg KGEsYiksIGhvdyBtYW55IGRpc3RpbmN0IHZhbHVlcyBvZiAnYicKK21hdGNo ZXMgYSBjaG9zZW4gdmFsdWUgb2YgJ2EnIG9uIGF2ZXJhZ2U/CisKK0xldCdz IGFzc3VtZSB3ZSBrbm93IG5kaXN0aW5jdChhKSBhbmQgbmRpc3RpbmN0KGEs YikuIFRoZW4gdGhlIGFuc3dlciB0byB0aGUKK3F1ZXN0aW9uIGNsZWFybHkg aXMKKworICAgIG5kaXN0aW5jdChhLGIpIC8gbmRpc3RpbmN0KGEpCisKK2Fu ZCBieSB1c2luZyAncScgd2UgbWF5IHJld3JpdGUgdGhpcyBhcworCisgICAg bmRpc3RpbmN0KGIpIC8gcQorCitzbyAncScgbWF5IGJlIGNvbnNpZGVyZWQg YXMgYSBjb3JyZWN0aW9uIGZhY3RvciBvZiB0aGUgbmRpc3RpbmN0IGVzdGlt YXRlIGdpdmVuCithIGNvbmRpdGlvbiBvbiBvbmUgb2YgdGhlIGNvbHVtbnMu CisKK1RoaXMgbWF5IGJlIGdlbmVyYWxpemVkIHRvIGEgY29tYmluYXRpb24g b2YgJ24nIGNvbHVtbnMKKworICAgIFtuZGlzdGluY3QoYzEpICogLi4uICog bmRpc3RpbmN0KGNuKV0gLyBuZGlzdGluY3QoYzEsIC4uLiwgY24pCisKK2Fu ZCB0aGUgbWVhbmluZyBpcyB2ZXJ5IHNpbWlsYXIsIGV4Y2VwdCB0aGF0IHdl IG5lZWQgdG8gdXNlIGNvbmRpdGlvbnMgb24gKG4tMSkKK29mIHRoZSBjb2x1 bW5zLgorCisKK1NlbGVjdGl2aXR5IGVzdGltYXRpb24KKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworQXMgZXhwbGFpbmVkIGluIHRoZSBwcmV2aW91cyBw YXJhZ3JhcGgsIG5kaXN0aW5jdCBjb2VmZmljaWVudHMgbWF5IGJlIHVzZWQg dG8KK2VzdGltYXRlIGNhcmRpbmFsaXR5IG9mIGEgY29sdW1uLCBnaXZlbiBz b21lIGFwcmlvcmkga25vd2xlZGdlLiBMZXQncyBhc3N1bWUKK3dlIG5lZWQg dG8gZXN0aW1hdGUgc2VsZWN0aXZpdHkgb2YgYSBjb25kaXRpb24KKworICAg IChhPTEpIEFORCAoYj0yKQorCit3aGljaCB3ZSBjYW4gZXhwYW5kIGxpa2Ug dGhpcworCisgICAgUChhPTEgJiBiPTIpID0gUChhPTEpICogUChiPTIgfCBh PTEpCisKK0xldCdzIGFsc28gYXNzdW1lIHRoYXQgdGhlIGRpc3RyaWJ1dGlv biBvZiAnYicgaXMgdW5pZm9ybSwgaS5lLiB0aGF0CisKKyAgICBQKGE9MSkg PSAxL25kaXN0aW5jdChhKQorICAgIFAoYj0yKSA9IDEvbmRpc3RpbmN0KGIp CisgICAgUChhPTEgJiBiPTIpID0gMS9uZGlzdGluY3QoYSxiKQorCisgICAg UChiPTIgfCBhPTEpID0gbmRpc3RpbmN0KGEpIC8gbmRpc3RpbmN0KGEsYikK Kword2hpY2ggbWF5IGJlIHJld3JpdHRlbiBsaWtlCisKKyAgICBQKGI9MiB8 IGE9MSkKKyAgICAgICAgPSBuZGlzdGluY3QoYSxiKSAvIG5kaXN0aW5jdChh KQorICAgICAgICA9ICgxL25kaXN0aW5jdChiKSkgKiBbKG5kaXN0aW5jdChh KSAqIG5kaXN0aW5jdChiKSkgLyBuZGlzdGluY3QoYSxiKV0KKyAgICAgICAg PSAoMS9uZGlzdGluY3QoYikpICogcQorCithbmQgdGhlcmVmb3JlCisKKyAg ICBQKGE9MSAmIGI9MikgPSAoMS9uZGlzdGluY3QoYSkpICogKDEvbmRpc3Rp bmN0KGIpKSAqIHEKKworVGhpcyBhbHNvIGlsbHVzdHJhdGVzICdxJyBhcyBh IGNvcnJlY3Rpb24gY29lZmZpY2llbnQuCisKK0l0IGFsc28gZXhwbGFpbnMg d2h5IHdlIHN0b3JlIHRoZSBjb2VmZmljaWVudCBhbmQgbm90IHNpbXBseSBu ZGlzdGluY3QoYSxiKS4KK1RoaXMgd2F5IHdlIGNhbiBzaW1wbHkgZXN0aW1h dGUgaW5kaXZpZHVhbCBjbGF1c2VzIGFuZCB0aGVuIHNpbXBseSBjb3JyZWN0 Cit0aGUgZXN0aW1hdGUgYnkgbXVsdGlwbHlpbmcgdGhlIHJlc3VsdCB3aXRo ICdxJyAtIHdlIGRvbid0IGhhdmUgdG8gbWVzcyB3aXRoCituZGlzdGluY3Qg ZXN0aW1hdGVzIGF0IGFsbC4KKworTmF0dXJhbGx5LCBhcyB0aGUgY29lZmZp Y2llbnQgaXMgZGVyaXZlcyBmcm9tIG5kaXN0aW5jdChhLGIpLCBpdCBtYXkg YmUgYWxzbwordXNlZCB0byBlc3RpbWF0ZSBHUk9VUCBCWSBjbGF1c2VzIG9u IHRoZSBjb21iaW5hdGlvbiBvZiBjb2x1bW5zLCByZXBsYWNpbmcgdGhlCitl eGlzdGluZyBoZXVyaXN0aWNzIGluIGVzdGltYXRlX251bV9ncm91cHMoKS4K KworTm90ZTogQ3VycmVudGx5IG9ubHkgdGhlIEdST1VQIEJZIGVzdGltYXRp b24gaXMgaW1wbGVtZW50ZWQuIEl0J3MgYSBiaXQgdW5jbGVhcgoraG93IHRv IGltcGxlbWVudCB0aGUgY2xhdXNlIGVzdGltYXRpb24gd2hlbiB0aGVyZSBh cmUgb3RoZXIgc3RhdGlzdGljcyAoZXNwLgorTUNWIGxpc3RzIGFuZC9vciBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcykgYXZhaWxhYmxlLgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgYi9z cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5zdGF0cwppbmRleCBk NDA0OTE0Li42ZDRiMDliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5zdGF0cworKysgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5zdGF0cwpAQCAtMjAsNiArMjAsOCBAQCBDdXJy ZW50bHkgd2Ugb25seSBoYXZlIHR3byBraW5kcyBvZiBtdWx0aXZhcmlhdGUg c3RhdGlzdGljcwogCiAgICAgKGMpIG11bHRpdmFyaWF0ZSBoaXN0b2dyYW1z IChSRUFETUUuaGlzdG9ncmFtKQogCisgICAgKGQpIG5kaXN0aW5jdCBjb2Vm ZmljaWVudHMKKwogCiBDb21wYXRpYmxlIGNsYXVzZSB0eXBlcwogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvY29tbW9uLmMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL2NvbW1vbi5jCmluZGV4IGY2ZDEwNzQuLmQzNGQwNzIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYwpAQCAtMzIsNyAr MzIsOCBAQCBzdGF0aWMgTGlzdCogbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQp OwogICogYW5kIHNlcmlhbGl6ZXMgdGhlbSBiYWNrIGludG8gdGhlIGNhdGFs b2cgKGFzIGJ5dGVhIHZhbHVlcykuCiAgKi8KIHZvaWQKLWJ1aWxkX212X3N0 YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKK2J1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgZG91Ymxl IHRvdGFscm93cywKKwkJCSAgIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJv d3MsCiAJCQkgICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJz dGF0cykKIHsKIAlMaXN0Q2VsbCAqbGM7CkBAIC01Myw2ICs1NCw3IEBAIGJ1 aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhl YXBUdXBsZSAqcm93cywKIAkJTVZEZXBlbmRlbmNpZXMJZGVwcyAgPSBOVUxM OwogCQlNQ1ZMaXN0CQltY3ZsaXN0ICAgPSBOVUxMOwogCQlNVkhpc3RvZ3Jh bQloaXN0b2dyYW0gPSBOVUxMOworCQlkb3VibGUJCW5kaXN0CSAgPSAtMTsK IAkJaW50IG51bXJvd3NfZmlsdGVyZWQgID0gbnVtcm93czsKIAogCQlWYWNB dHRyU3RhdHMgICoqc3RhdHMgID0gTlVMTDsKQEAgLTkyLDYgKzk0LDkgQEAg YnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywg SGVhcFR1cGxlICpyb3dzLAogCQlpZiAoc3RhdC0+ZGVwc19lbmFibGVkKQog CQkJZGVwcyA9IGJ1aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dz LCBhdHRycywgc3RhdHMpOwogCisJCWlmIChzdGF0LT5uZGlzdF9lbmFibGVk KQorCQkJbmRpc3QgPSBidWlsZF9tdl9uZGlzdGluY3QodG90YWxyb3dzLCBu dW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMpOworCiAJCS8qIGJ1aWxkIHRo ZSBNQ1YgbGlzdCAqLwogCQlpZiAoc3RhdC0+bWN2X2VuYWJsZWQpCiAJCQlt Y3ZsaXN0ID0gYnVpbGRfbXZfbWN2bGlzdChudW1yb3dzLCByb3dzLCBhdHRy cywgc3RhdHMsICZudW1yb3dzX2ZpbHRlcmVkKTsKQEAgLTEwMSw3ICsxMDYs NyBAQCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1y b3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCQloaXN0b2dyYW0gPSBidWlsZF9t dl9oaXN0b2dyYW0obnVtcm93c19maWx0ZXJlZCwgcm93cywgYXR0cnMsIHN0 YXRzLCBudW1yb3dzKTsKIAogCQkvKiBzdG9yZSB0aGUgaGlzdG9ncmFtIC8g TUNWIGxpc3QgaW4gdGhlIGNhdGFsb2cgKi8KLQkJdXBkYXRlX212X3N0YXRz KHN0YXQtPm12b2lkLCBkZXBzLCBtY3ZsaXN0LCBoaXN0b2dyYW0sIGF0dHJz LCBzdGF0cyk7CisJCXVwZGF0ZV9tdl9zdGF0cyhzdGF0LT5tdm9pZCwgZGVw cywgbWN2bGlzdCwgaGlzdG9ncmFtLCBuZGlzdCwgYXR0cnMsIHN0YXRzKTsK IAl9CiB9CiAKQEAgLTE4Myw2ICsxODgsOCBAQCBsaXN0X212X3N0YXRzKE9p ZCByZWxpZCkKIAkJaW5mby0+bWN2X2J1aWx0ID0gc3RhdHMtPm1jdl9idWls dDsKIAkJaW5mby0+aGlzdF9lbmFibGVkID0gc3RhdHMtPmhpc3RfZW5hYmxl ZDsKIAkJaW5mby0+aGlzdF9idWlsdCA9IHN0YXRzLT5oaXN0X2J1aWx0Owor CQlpbmZvLT5uZGlzdF9lbmFibGVkID0gc3RhdHMtPm5kaXN0X2VuYWJsZWQ7 CisJCWluZm8tPm5kaXN0X2J1aWx0ID0gc3RhdHMtPm5kaXN0X2J1aWx0Owog CiAJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKIAl9CkBAIC0y NTIsNyArMjU5LDcgQEAgZmluZF9tdl9hdHRudW1zKE9pZCBtdm9pZCwgT2lk ICpyZWxpZCkKIHZvaWQKIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsCiAJ CQkJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxp c3QsIE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwKLQkJCQlpbnQydmVjdG9yICph dHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMpCisJCQkJZG91YmxlIG5kaXN0 Y29lZmYsIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0 cykKIHsKIAlIZWFwVHVwbGUJc3R1cCwKIAkJCQlvbGR0dXA7CkBAIC0yOTIs MjYgKzI5OSwzNiBAQCB1cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLAogCQkJ PSBQb2ludGVyR2V0RGF0dW0oZGF0YSk7CiAJfQogCisJaWYgKG5kaXN0Y29l ZmYgPiAxLjApCisJeworCQludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFuZGlzdCAtMV0gPSBmYWxzZTsKKwkJdmFsdWVzW0FudW1fcGdfbXZfc3Rh dGlzdGljX3N0YW5kaXN0LTFdID0gRmxvYXQ4R2V0RGF0dW0obmRpc3Rjb2Vm Zik7CisJfQorCiAJLyogYWx3YXlzIHJlcGxhY2UgdGhlIHZhbHVlIChlaXRo ZXIgYnkgYnl0ZWEgb3IgTlVMTCkgKi8KIAlyZXBsYWNlc1tBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFkZXBzIC0xXSA9IHRydWU7CiAJcmVwbGFjZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2IC0xXSA9IHRydWU7CiAJcmVwbGFj ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdC0xXSA9IHRydWU7CisJ cmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmRpc3QtMV0gPSB0 cnVlOwogCiAJLyogYWx3YXlzIGNoYW5nZSB0aGUgYXZhaWxhYmlsaXR5IGZs YWdzICovCiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWls dCAtMV0gPSBmYWxzZTsKIAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19t Y3ZfYnVpbHQgLTFdID0gZmFsc2U7CiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfaGlzdF9idWlsdC0xXSA9IGZhbHNlOworCW51bGxzW0FudW1fcGdf bXZfc3RhdGlzdGljX25kaXN0X2J1aWx0LTFdID0gZmFsc2U7CiAJbnVsbHNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cy0xXSAgICAgPSBmYWxzZTsK IAogCS8qIHVzZSB0aGUgbmV3IGF0dG51bXMsIGluIGNhc2Ugd2UgcmVtb3Zl ZCBzb21lIGRyb3BwZWQgb25lcyAqLwogCXJlcGxhY2VzW0FudW1fcGdfbXZf c3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0Fu dW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAgLTFdID0gdHJ1ZTsKKwly ZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9idWlsdC0xXSA9 IHRydWU7CiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9i dWlsdCAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlz dGljX3N0YWtleXMgLTFdICAgID0gdHJ1ZTsKIAogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gQm9vbEdldERhdHVtKGRl cGVuZGVuY2llcyAhPSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfbWN2X2J1aWx0ICAtMV0gPSBCb29sR2V0RGF0dW0obWN2bGlzdCAh PSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9i dWlsdCAtMV0gPSBCb29sR2V0RGF0dW0oaGlzdG9ncmFtICE9IE5VTEwpOwor CXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19uZGlzdF9idWlsdC0xXSA9 IEJvb2xHZXREYXR1bShuZGlzdGNvZWZmID4gMS4wKTsKIAl2YWx1ZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAtMV0gICAgPSBQb2ludGVyR2V0 RGF0dW0oYXR0cnMpOwogCiAJLyogSXMgdGhlcmUgYWxyZWFkeSBhIHBnX212 X3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI4MzU4Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwpA QCAtMCwwICsxLDE3MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogbXZkaXN0LmMKKyAqCSAgUE9TVEdSRVMgbXVsdGl2YXJp YXRlIGRpc3RpbmN0IGNvZWZmaWNpZW50cworICoKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvbXZkaXN0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisj aW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisKK3N0YXRpYyBkb3VibGUgZXN0aW1hdGVfbmRpc3RpbmN0KGRvdWJs ZSB0b3RhbHJvd3MsIGludCBudW1yb3dzLCBpbnQgZCwgaW50IGYxKTsKKwor LyoKKyAqIENvbXB1dGUgbmRpc3RpbmN0IGNvZWZmaWNpZW50IGZvciB0aGUg Y29tYmluYXRpb24gb2YgYXR0cmlidXRlcy4gVGhpcworICogY29tcHV0ZXMg dGhlIG5kaXN0aW5jdCBlc3RpbWF0ZSB1c2luZyB0aGUgc2FtZSBlc3RpbWF0 b3IgdXNlZCBpbiBhbmFseXplLmMKKyAqIGFuZCB0aGVuIGNvbXB1dGVzIHRo ZSBjb2VmZmljaWVudC4KKyAqLworZG91YmxlCitidWlsZF9tdl9uZGlzdGlu Y3QoZG91YmxlIHRvdGFscm93cywgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKKwkJCQkgICBpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRz ICoqc3RhdHMpCit7CisJaW50IGksIGo7CisJaW50IGYxLCBjbnQsIGQ7CisJ aW50IG5tdWx0aXBsZSwgc3VtbXVsdGlwbGU7CisJaW50IG51bWF0dHJzID0g YXR0cnMtPmRpbTE7CisJTXVsdGlTb3J0U3VwcG9ydCBtc3MgPSBtdWx0aV9z b3J0X2luaXQobnVtYXR0cnMpOworCWRvdWJsZSBuZGlzdGNvZWZmOworCisJ LyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRvIHNvcnQgdGhlIHNhbXBsZSByb3dz IGRpcmVjdGx5LCBidXQgdGhpcyBzZWVtZWQKKwkgKiBzb21laG93IHNpbXBs ZXIgLyBsZXNzIGVycm9yIHByb25lLiBBbm90aGVyIG9wdGlvbiB3b3VsZCBi ZSB0bworCSAqIGFsbG9jYXRlIHRoZSBhcnJheXMgZm9yIGVhY2ggU29ydEl0 ZW0gc2VwYXJhdGVseSwgYnV0IHRoYXQnZCBiZQorCSAqIHNpZ25pZmljYW50 IG92ZXJoZWFkIChub3QganVzdCBDUFUsIGJ1dCBlc3BlY2lhbGx5IG1lbW9y eSBibG9hdCkuCisJICovCisJU29ydEl0ZW0gKiBpdGVtcyA9IChTb3J0SXRl bSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVtKSk7CisKKwlE YXR1bSAqdmFsdWVzID0gKERhdHVtKilwYWxsb2MwKHNpemVvZihEYXR1bSkg KiBudW1yb3dzICogbnVtYXR0cnMpOworCWJvb2wgICppc251bGwgPSAoYm9v bCopcGFsbG9jMChzaXplb2YoYm9vbCkgKiBudW1yb3dzICogbnVtYXR0cnMp OworCisJZm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7CisJCWl0 ZW1zW2ldLnZhbHVlcyA9ICZ2YWx1ZXNbaSAqIG51bWF0dHJzXTsKKwkJaXRl bXNbaV0uaXNudWxsID0gJmlzbnVsbFtpICogbnVtYXR0cnNdOworCX0KKwor CUFzc2VydChudW1hdHRycyA+PSAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBu dW1hdHRyczsgaSsrKQorCXsKKwkJLyogcHJlcGFyZSB0aGUgc29ydCBmdW5j dGlvbiBmb3IgdGhlIGZpcnN0IGRpbWVuc2lvbiAqLworCQltdWx0aV9zb3J0 X2FkZF9kaW1lbnNpb24obXNzLCBpLCBpLCBzdGF0cyk7CisKKwkJLyogYWNj dW11bGF0ZSBhbGwgdGhlIGRhdGEgaW50byB0aGUgYXJyYXkgYW5kIHNvcnQg aXQgKi8KKwkJZm9yIChqID0gMDsgaiA8IG51bXJvd3M7IGorKykKKwkJewor CQkJaXRlbXNbal0udmFsdWVzW2ldCisJCQkJPSBoZWFwX2dldGF0dHIocm93 c1tqXSwgYXR0cnMtPnZhbHVlc1tpXSwKKwkJCQkJCQkgICBzdGF0c1tpXS0+ dHVwRGVzYywgJml0ZW1zW2pdLmlzbnVsbFtpXSk7CisJCX0KKwl9CisKKwlx c29ydF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJvd3MsIHNpemVvZihTb3J0 SXRlbSksCisJCQkgIG11bHRpX3NvcnRfY29tcGFyZSwgbXNzKTsKKworCS8q IGNvdW50IG51bWJlciBvZiBkaXN0aW5jdCBjb21iaW5hdGlvbnMgKi8KKwor CWYxID0gMDsKKwljbnQgPSAxOworCWQgPSAxOworCWZvciAoaSA9IDE7IGkg PCBudW1yb3dzOyBpKyspCisJeworCQlpZiAobXVsdGlfc29ydF9jb21wYXJl KCZpdGVtc1tpXSwgJml0ZW1zW2ktMV0sIG1zcykgIT0gMCkKKwkJeworCQkJ aWYgKGNudCA9PSAxKQorCQkJCWYxICs9IDE7CisJCQllbHNlCisJCQl7CisJ CQkJbm11bHRpcGxlICs9IDE7CisJCQkJc3VtbXVsdGlwbGUgKz0gY250Owor CQkJfQorCisJCQlkKys7CisJCQljbnQgPSAwOworCQl9CisKKwkJY250ICs9 IDE7CisJfQorCisJaWYgKGNudCA9PSAxKQorCQlmMSArPSAxOworCWVsc2UK Kwl7CisJCW5tdWx0aXBsZSArPSAxOworCQlzdW1tdWx0aXBsZSArPSBjbnQ7 CisJfQorCisJbmRpc3Rjb2VmZiA9IDEgLyBlc3RpbWF0ZV9uZGlzdGluY3Qo dG90YWxyb3dzLCBudW1yb3dzLCBkLCBmMSk7CisKKwkvKgorCSAqIG5vdyBj b3VudCBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlIGFuZCBp bmNyZW1lbnRhbGx5CisJICogY29tcHV0ZSBuZGlzdGluY3QoYSxiKSAvIChu ZGlzdGluY3QoYSkgKiBuZGlzdGluY3QoYikpCisJICoKKwkgKiBGSVhNRSBQ cm9iYWJseSBuZWVkIHRvIGhhbmRsZSBjYXNlcyB3aGVuIG9uZSBvZiB0aGUg bmRpc3RpbmN0CisJICogICAgICAgZXN0aW1hdGVzIGlzIG5lZ2F0aXZlLCBh bmQgYWxzbyBjaGVjayB0aGF0IHRoZSBjb21iaW5lZAorCSAqICAgICAgIG5k aXN0aW5jdCBpcyBncmVhdGVyIHRoYW4gYW55IG9mIHRob3NlIHBhcnRpYWwg dmFsdWVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsr KQorCQluZGlzdGNvZWZmICo9IHN0YXRzW2ldLT5zdGFkaXN0aW5jdDsKKwor CXJldHVybiBuZGlzdGNvZWZmOworfQorCitkb3VibGUKK2xvYWRfbXZfbmRp c3RpbmN0KE9pZCBtdm9pZCkKK3sKKwlib29sCQlpc251bGwgPSBmYWxzZTsK KwlEYXR1bQkJZGVwczsKKworCS8qIFByZXBhcmUgdG8gc2NhbiBwZ19tdl9z dGF0aXN0aWMgZm9yIGVudHJpZXMgaGF2aW5nIGluZHJlbGlkID0gdGhpcyBy ZWwuICovCisJSGVhcFR1cGxlCWh0dXAgPSBTZWFyY2hTeXNDYWNoZTEoTVZT VEFUT0lELCBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7CisKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCisJRm9ybV9wZ19tdl9zdGF0aXN0aWMJbXZz dGF0ID0gKEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7 CisJQXNzZXJ0KG12c3RhdC0+bmRpc3RfZW5hYmxlZCAmJiBtdnN0YXQtPm5k aXN0X2J1aWx0KTsKKyNlbmRpZgorCisJZGVwcyA9IFN5c0NhY2hlR2V0QXR0 cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkgICBBbnVtX3BnX212X3N0YXRp c3RpY19zdGFuZGlzdCwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUoaHR1cCk7CisKKwlyZXR1cm4gRGF0dW1H ZXRGbG9hdDgoZGVwcyk7Cit9CisKKy8qIFRoZSBEdWoxIGVzdGltYXRvciAo YWxyZWFkeSB1c2VkIGluIGFuYWx5emUuYykuICovCitzdGF0aWMgZG91Ymxl Citlc3RpbWF0ZV9uZGlzdGluY3QoZG91YmxlIHRvdGFscm93cywgaW50IG51 bXJvd3MsIGludCBkLCBpbnQgZjEpCit7CisJZG91YmxlCW51bWVyLAorCQkJ ZGVub20sCisJCQluZGlzdGluY3Q7CisKKwludW1lciA9IChkb3VibGUpIG51 bXJvd3MgKihkb3VibGUpIGQ7CisKKwlkZW5vbSA9IChkb3VibGUpIChudW1y b3dzIC0gZjEpICsKKwkJCShkb3VibGUpIGYxICogKGRvdWJsZSkgbnVtcm93 cyAvIHRvdGFscm93czsKKworCW5kaXN0aW5jdCA9IG51bWVyIC8gZGVub207 CisKKwkvKiBDbGFtcCB0byBzYW5lIHJhbmdlIGluIGNhc2Ugb2Ygcm91bmRv ZmYgZXJyb3IgKi8KKwlpZiAobmRpc3RpbmN0IDwgKGRvdWJsZSkgZCkKKwkJ bmRpc3RpbmN0ID0gKGRvdWJsZSkgZDsKKworCWlmIChuZGlzdGluY3QgPiB0 b3RhbHJvd3MpCisJCW5kaXN0aW5jdCA9IHRvdGFscm93czsKKworCXJldHVy biBmbG9vcihuZGlzdGluY3QgKyAwLjUpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKaW5kZXggNzAyMDc3Mi4u ZTQ2Y2M2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19t dl9zdGF0aXN0aWMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212 X3N0YXRpc3RpYy5oCkBAIC00MCw2ICs0MCw3IEBAIENBVEFMT0cocGdfbXZf c3RhdGlzdGljLDMzODEpCiAJYm9vbAkJZGVwc19lbmFibGVkOwkJLyogYW5h bHl6ZSBkZXBlbmRlbmNpZXM/ICovCiAJYm9vbAkJbWN2X2VuYWJsZWQ7CQkv KiBidWlsZCBNQ1YgbGlzdD8gKi8KIAlib29sCQloaXN0X2VuYWJsZWQ7CQkv KiBidWlsZCBoaXN0b2dyYW0/ICovCisJYm9vbAkJbmRpc3RfZW5hYmxlZDsJ CS8qIGJ1aWxkIG5kaXN0IGNvZWZmaWNpZW50PyAqLwogCiAJLyogaGlzdG9n cmFtIC8gTUNWIHNpemUgKi8KIAlpbnQzMgkJbWN2X21heF9pdGVtczsJCS8q IG1heCBNQ1YgaXRlbXMgKi8KQEAgLTQ5LDYgKzUwLDcgQEAgQ0FUQUxPRyhw Z19tdl9zdGF0aXN0aWMsMzM4MSkKIAlib29sCQlkZXBzX2J1aWx0OwkJCS8q IGRlcGVuZGVuY2llcyB3ZXJlIGJ1aWx0ICovCiAJYm9vbAkJbWN2X2J1aWx0 OwkJCS8qIE1DViBsaXN0IHdhcyBidWlsdCAqLwogCWJvb2wJCWhpc3RfYnVp bHQ7CQkJLyogaGlzdG9ncmFtIHdhcyBidWlsdCAqLworCWJvb2wJCW5kaXN0 X2J1aWx0OwkJLyogbmRpc3RpbmN0IGNvZWZmIGJ1aWx0ICovCiAKIAkvKiB2 YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxv dyBkaXJlY3QgYWNjZXNzIHRvIHN0YWtleXMgKi8KIAlpbnQydmVjdG9yCXN0 YWtleXM7CQkJLyogYXJyYXkgb2YgY29sdW1uIGtleXMgKi8KQEAgLTU3LDYg KzU5LDcgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKIAlieXRl YQkJc3RhZGVwczsJCQkvKiBkZXBlbmRlbmNpZXMgKHNlcmlhbGl6ZWQpICov CiAJYnl0ZWEJCXN0YW1jdjsJCQkJLyogTUNWIGxpc3QgKHNlcmlhbGl6ZWQp ICovCiAJYnl0ZWEJCXN0YWhpc3Q7CQkJLyogTVYgaGlzdG9ncmFtIChzZXJp YWxpemVkKSAqLworCWZsb2F0OAkJc3RhbmRjb2VmZjsJCQkvKiBuZGlzdGlu Y3QgY29lZmYgKHNlcmlhbGl6ZWQpICovCiAjZW5kaWYKIAogfSBGb3JtRGF0 YV9wZ19tdl9zdGF0aXN0aWM7CkBAIC03Miw3ICs3NSw3IEBAIHR5cGVkZWYg Rm9ybURhdGFfcGdfbXZfc3RhdGlzdGljICpGb3JtX3BnX212X3N0YXRpc3Rp YzsKICAqCQljb21waWxlciBjb25zdGFudHMgZm9yIHBnX212X3N0YXRpc3Rp YwogICogLS0tLS0tLS0tLS0tLS0tLQogICovCi0jZGVmaW5lIE5hdHRzX3Bn X212X3N0YXRpc3RpYwkJCQkJMTYKKyNkZWZpbmUgTmF0dHNfcGdfbXZfc3Rh dGlzdGljCQkJCQkxOQogI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19z dGFyZWxpZAkJCTEKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rh bmFtZQkJCTIKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFt ZXNwYWNlCQkzCkBAIC04MCwxNCArODMsMTcgQEAgdHlwZWRlZiBGb3JtRGF0 YV9wZ19tdl9zdGF0aXN0aWMgKkZvcm1fcGdfbXZfc3RhdGlzdGljOwogI2Rl ZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQJCTUKICNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2VuYWJsZWQJCTYKICNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9lbmFibGVkCQk3Ci0j ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX21jdl9tYXhfaXRlbXMJCTgK LSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9tYXhfYnVja2V0 cwk5Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJ CQkxMAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQJ CQkxMQotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2J1aWx0 CQkJMTIKLSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJ CTEzCi0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQkx NAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YJCQkJMTUK LSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdAkJCTE2Cisj ZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX25kaXN0X2VuYWJsZWQJCTgK KyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcwkJ OQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X21heF9idWNr ZXRzCTE5CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVp bHQJCQkxMQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVp bHQJCQkxMgorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2J1 aWx0CQkJMTMKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfbmRpc3Rf YnVpbHQJCTE0CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtl eXMJCQkxNQorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFkZXBz CQkJMTYKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2CQkJ CTE3CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhpc3QJCQkx OAorI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuZGlzdAkJCTE5 CiAKICNlbmRpZiAgIC8qIFBHX01WX1NUQVRJU1RJQ19IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcmVsYXRpb24uaAppbmRleCA4YzUwYmZiLi4xOTIzZjJiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKQEAgLTY1NSwxMSArNjU1 LDEzIEBAIHR5cGVkZWYgc3RydWN0IE1WU3RhdGlzdGljSW5mbwogCWJvb2wJ CWRlcHNfZW5hYmxlZDsJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgZW5h YmxlZCAqLwogCWJvb2wJCW1jdl9lbmFibGVkOwkvKiBNQ1YgbGlzdCBlbmFi bGVkICovCiAJYm9vbAkJaGlzdF9lbmFibGVkOwkvKiBoaXN0b2dyYW0gZW5h YmxlZCAqLworCWJvb2wJCW5kaXN0X2VuYWJsZWQ7CS8qIG5kaXN0aW5jdCBj b2VmZmljaWVudCBlbmFibGVkICovCiAKIAkvKiBidWlsdC9hdmFpbGFibGUg c3RhdGlzdGljcyAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkvKiBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcyBidWlsdCAqLwogCWJvb2wJCW1jdl9idWlsdDsJ CS8qIE1DViBsaXN0IGJ1aWx0ICovCiAJYm9vbAkJaGlzdF9idWlsdDsJCS8q IGhpc3RvZ3JhbSBidWlsdCAqLworCWJvb2wJCW5kaXN0X2J1aWx0OwkvKiBu ZGlzdGluY3QgY29lZmZpY2llbnQgYnVpbHQgKi8KIAogCS8qIGNvbHVtbnMg aW4gdGhlIHN0YXRpc3RpY3MgKGF0dG51bXMpICovCiAJaW50MnZlY3RvciAq c3Rha2V5czsJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMgY292ZXJlZCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCmluZGV4IDgwYmY5NmYuLjBm ZjI0Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKQEAgLTIyNiw2 ICsyMjYsNyBAQCB0eXBlZGVmIE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEg Kk1WU2VyaWFsaXplZEhpc3RvZ3JhbTsKIE1WRGVwZW5kZW5jaWVzIGxvYWRf bXZfZGVwZW5kZW5jaWVzKE9pZCBtdm9pZCk7CiBNQ1ZMaXN0ICAgICAgICBs b2FkX212X21jdmxpc3QoT2lkIG12b2lkKTsKIE1WU2VyaWFsaXplZEhpc3Rv Z3JhbSAgICBsb2FkX212X2hpc3RvZ3JhbShPaWQgbXZvaWQpOworZG91Ymxl CQkgICBsb2FkX212X25kaXN0aW5jdChPaWQgbXZvaWQpOwogCiBieXRlYSAq IHNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgZGVw ZW5kZW5jaWVzKTsKIGJ5dGVhICogc2VyaWFsaXplX212X21jdmxpc3QoTUNW TGlzdCBtY3ZsaXN0LCBpbnQydmVjdG9yICphdHRycywKQEAgLTI2NywxMSAr MjY4LDE3IEBAIE1WSGlzdG9ncmFtCiBidWlsZF9tdl9oaXN0b2dyYW0oaW50 IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMs CiAJCQkJICAgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCBudW1yb3dzX3Rv dGFsKTsKIAotdm9pZCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWws IGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCitkb3VibGUKK2J1aWxk X212X25kaXN0aW5jdChkb3VibGUgdG90YWxyb3dzLCBpbnQgbnVtcm93cywg SGVhcFR1cGxlICpyb3dzLAorCQkJCSAgIGludDJ2ZWN0b3IgKmF0dHJzLCBW YWNBdHRyU3RhdHMgKipzdGF0cyk7CisKK3ZvaWQgYnVpbGRfbXZfc3RhdHMo UmVsYXRpb24gb25lcmVsLCBkb3VibGUgdG90YWxyb3dzLAorCQkJCQlpbnQg bnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCQkJCQlpbnQgbmF0dHMsIFZh Y0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CiAKIHZvaWQgdXBkYXRlX212 X3N0YXRzKE9pZCByZWxpZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVz LAogCQkJCQkgTUNWTGlzdCBtY3ZsaXN0LCBNVkhpc3RvZ3JhbSBoaXN0b2dy YW0sCisJCQkJCSBkb3VibGUgbmRpc3Rjb2VmZiwKIAkJCQkJIGludDJ2ZWN0 b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAKICNpZmRlZiBE RUJVR19NVkhJU1QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQKaW5kZXggNTI4YWMzNi4uN2E5MTRkYSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzNzcsNyAr MTM3Nyw4IEBAIHBnX212X3N0YXRzfCBTRUxFQ1Qgbi5uc3BuYW1lIEFTIHNj aGVtYW5hbWUsCiAgICAgbGVuZ3RoKHMuc3RhbWN2KSBBUyBtY3ZieXRlcywK ICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5zdGFtY3YpIEFTIG1j dmluZm8sCiAgICAgbGVuZ3RoKHMuc3RhaGlzdCkgQVMgaGlzdGJ5dGVzLAot ICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKHMuc3RhaGlzdCkgQVMg aGlzdGluZm8KKyAgICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhzLnN0 YWhpc3QpIEFTIGhpc3RpbmZvLAorICAgIHMuc3RhbmRjb2VmZiBBUyBuZGNv ZWZmCiAgICBGUk9NICgocGdfbXZfc3RhdGlzdGljIHMKICAgICAgSk9JTiBw Z19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCiAgICAgIExF RlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5yZWxuYW1l c3BhY2UpKSk7Ci0tIAoyLjUuMAoK --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename="0006-multi-statistics-estimation.patch" Content-Type: text/x-patch; name="0006-multi-statistics-estimation.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5MWI5YjMxY2JlYjIyNzY3YjMzYzJmNThiOTEyYjdhMTRjOTQzYjI4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogRnJpLCA2IEZlYiAyMDE1IDAx OjQyOjM4ICswMTAwClN1YmplY3Q6IFtQQVRDSCA2LzldIG11bHRpLXN0YXRp c3RpY3MgZXN0aW1hdGlvbgoKVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IGEg cHJvYmFiaWxpdHkgKHdoaWNoIGlzIHdoYXQgc2VsZWN0aXZpdHkgaXMpCmNh biBiZSBzcGxpdCBpbnRvIGEgcHJvZHVjdCBvZiBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzIGxpa2UgdGhpczoKCiAgICBQKEEgJiBCICYgQykgPSBQKEEg JiBCKSAqIFAoQ3xBICYgQikKCklmIHdlIGFzc3VtZSB0aGF0IEMgYW5kIEIg YXJlIGluZGVwZW5kZW50LCB0aGUgbGFzdCBwYXJ0IG1heSBiZQpzaW1wbGlm aWVkIGxpa2UgdGhpcwoKICAgIFAoQSAmIEIgJiBDKSA9IFAoQSAmIEIpICog UChDfEEpCgp3ZSBvbmx5IG5lZWQgcHJvYmFiaWxpdGllcyBvbiBbQSxCXSBh bmQgW0MsQV0gdG8gY29tcHV0ZSB0aGUgb3JpZ2luYWwKcHJvYmFiaWxpdHku CgpUaGUgaW1wbGVtZW50YXRpb24gd29ya3MgaW4gdGhlIG90aGVyIGRpcmVj dGlvbiwgdGhvdWdoLiBXZSBrbm93IHdoYXQKcHJvYmFiaWxpdHkgUChBICYg QiAmIEMpIHdlIG5lZWQgdG8gY29tcHV0ZSwgYW5kIGFsc28gd2hhdCBzdGF0 aXN0aWNzCmFyZSBhdmFpbGFibGUuCgpTbyB3ZSBzZWFyY2ggZm9yIGEgY29t YmluYXRpb25zIG9mIHN0YXRpc3RpY3MsIGNvdmVyaW5nIHRoZSBjbGF1c2Vz IGluCmFuIG9wdGltYWwgd2F5IChtb3N0IGNsYXVzZXMgY292ZXJlZCwgbW9z dCBkZXBlbmRlbmNpZXMgZXhwbG9pdGVkKS4KClRoZXJlIGFyZSB0d28gcG9z c2libGUgYXBwcm9hY2hlcyAtIGV4aGF1c3RpdmUgYW5kIGdyZWVkeS4gVGhl CmV4aGF1c3RpdmUgb25lIHdhbGtzIHRocm91Z2ggYWxsIHBlcm11dGF0aW9u cyBvZiBzdGF0cyB1c2luZyBkeW5hbWljCnByb2dyYW1taW5nLCBzbyBpdCdz IGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgb3B0aW1hbCBzb2x1dGlvbiwgYnV0 IGl0CnNvb24gZ2V0cyB2ZXJ5IHNsb3cgYXMgaXQncyByb3VnaGx5IE8oTiEp LiBUaGUgZHluYW1pYyBwcm9ncmFtbWluZyBtYXkKaW1wcm92ZSB0aGF0IGEg Yml0LCBidXQgaXQncyBzdGlsbCBmYXIgdG9vIGV4cGVuc2l2ZSBmb3IgbGFy Z2UgbnVtYmVycwpvZiBzdGF0aXN0aWNzIChvbiBhIHNpbmdsZSB0YWJsZSku CgpUaGUgZ3JlZWR5IGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSAtIGluIGV2 ZXJ5IHN0ZXAgY2hvb3NlIHRoZSBiZXN0CnNvbHV0aW9uLiBUaGF0IG1heSBu b3QgZ3VhcmFudGVlIHRoZSBiZXN0IHNvbHV0aW9uIGdsb2JhbGx5IChidXQg bWF5YmUKaXQgZG9lcz8pLCBidXQgaXQgb25seSBuZWVkcyBOIHN0ZXBzIHRv IGZpbmQgdGhlIHNvbHV0aW9uLCBzbyBpdCdzIHZlcnkKZmFzdCAocHJvY2Vz c2luZyB0aGUgc2VsZWN0ZWQgc3RhdHMgaXMgdXN1YWxseSB3YXkgbW9yZSBl eHBlbnNpdmUpLgoKVGhlcmUncyBhIEdVQyBmb3Igc2VsZWN0aW5nIHRoZSBz ZWFyY2ggYWxnb3JpdGhtCgogICAgbXZzdGF0X3NlYXJjaCA9IHsnZ3JlZWR5 JywgJ2V4aGF1c3RpdmUnfQoKVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2dyZWVk eScgYXMgdGhhdCdzIG11Y2ggc2FmZXIgKHdpdGggcmVzcGVjdCB0bwpydW50 aW1lKS4gU2VlIGNob29zZV9tdl9zdGF0aXN0aWNzKCkuCgpPbmNlIHdlIGhh dmUgZm91bmQgYSBzZXF1ZW5jZSBvZiBzdGF0aXN0aWNzLCB3ZSBhcHBseSB0 aGVtIHRvIHRoZQpjbGF1c2VzIHVzaW5nIHRoZSBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzLiBXZSBwcm9jZXNzIHRoZSBzZWxlY3RlZApzdGF0cyBvbmUg Ynkgb25lLCBhbmQgZm9yIGVhY2ggd2Ugc2VsZWN0IHRoZSBlc3RpbWF0ZWQg Y2xhdXNlcyBhbmQKY29uZGl0aW9ucy4gU2VlIGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgoKTGltaXRhdGlvbnMKLS0tLS0t LS0tLS0KCkl0J3Mgc3RpbGwgdHJ1ZSB0aGF0IGVhY2ggY2xhdXNlIGF0IGEg Z2l2ZW4gbGV2ZWwgaGFzIHRvIGJlIGNvdmVyZWQgYnkKYSBzaW5nbGUgTVYg c3RhdGlzdGljcy4gU28gd2l0aCB0aGlzIHF1ZXJ5CgogICAgV0hFUkUgKGNs YXVzZTEpIEFORCAoY2xhdXNlMikgQU5EIChjbGF1c2UzIE9SIGNsYXVzZTQp CgplYWNoIHBhcmVudGhlc2l6ZWQgY2xhdXNlIGhhcyB0byBiZSBjb3ZlcmVk IGJ5IGEgc2luZ2xlIG11bHRpdmFyaWF0ZQpzdGF0aXN0aWNzLgoKQ2xhdXNl cyBub3QgY292ZXJlZCBieSBhIHNpbmdsZSBzdGF0aXN0aWNzIGF0IHRoaXMg bGV2ZWwgd2lsbCBiZSBwYXNzZWQKdG8gY2xhdXNlX3NlbGVjdGl2aXR5KCkg YnV0IHRoaXMgd2lsbCB0cmVhdCB0aGVtIGFzIGEgY29sbGVjdGlvbiBvZgpz aW1wbGVyIGNsYXVzZXMgKGNvbm5lY3RlZCBieSBBTkQgb3IgT1IpLCBhbmQg dGhlIGNsYXVzZXMgZnJvbSB0aGUKcHJldmlvdXMgbGV2ZWwgd2lsbCBiZSB1 c2VkIGFzIGNvbmRpdGlvbnMuCgpTbyB1c2luZyB0aGUgc2FtZSBleGFtcGxl LCB0aGUgbGFzdCBjbGF1c2Ugd2lsbCBiZSBwYXNzZWQgdG8KY2xhdXNlX3Nl bGVjdGl2aXR5KCkgd2l0aCAnY2xhdXNlMScgYW5kICdjbGF1c2UyJyBhcyBj b25kaXRpb25zLCBhbmQgaXQKd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgbXVs dGl2YXJpYXRlIHN0YXRzIGlmIHBvc3NpYmxlLgoKVGhlIG90aGVyIGxpbWl0 YXRpb24gaXMgdGhhdCBhbGwgdGhlIGV4cHJlc3Npb25zIGhhdmUgdG8gYmUK bXYtY29tcGF0aWJsZSwgaS5lLiB0aGVyZSBjYW4ndCBiZSBhIG1peCBvZiBl eHByZXNzaW9ucy4gSWYgdGhpcyBpcwp2aW9sYXRlZCwgdGhlIGNsYXVzZSBt YXkgYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGxldmVsIChqdXN0IGxpa2Ugd2l0 aApsaXN0IG9mIGNsYXVzZXMgbm90IGNvdmVyZWQgYnkgYSBzaW5nbGUgc3Rh dGlzdGljcyksIHdoaWNoIHNwbGl0cyB0aGF0CmludG8gY2xhdXNlcyBoYW5k bGVkIGJ5IG11bHRpdmFyaWF0ZSBzdGF0cyBhbmQgY2xhdXNlcyBoYW5kbGVy IGJ5CnJlZ3VsYXIgc3RhdGlzdGljcy4KCnJld29yayBjbGF1c2VsaXN0X3Nl bGVjdGl2aXR5X29yIHRvIGhhbmRsZSBPUi1jbGF1c2VzIGNvcnJlY3RseQoK V2UgbWlnaHQgaW52ZW50IGEgY29tcGxldGVseSBuZXcgc2V0IG9mIGZ1bmN0 aW9ucyBoZXJlLCByZXNlbWJsaW5nCmNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkg YnV0IGFkYXB0aW5nIHRoZSBpZGVhcyB0byBPUi1jbGF1c2VzLgoKQnV0IGx1 Y2tpbHkgd2Uga25vdyB0aGF0IGVhY2ggT1ItY2xhdXNlCgogICAgKGEgT1Ig YiBPUiBjKQoKbWF5IGJlIHJld3JpdHRlbiBhcyBhbiBlcXVpdmFsZW50IEFO RC1jbGF1c2UgdXNpbmcgbmVnYXRpb246CgogICAgTk9UICgoTk9UIGEpIEFO RCAoTk9UIGIpIEFORCAoTk9UIGMpKQoKQW5kIHRoYXQncyBzb21ldGhpbmcg d2UgY2FuIHBhc3MgdG8gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eS4KLS0tCiBj b250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMgICAgICAgICAgICB8ICAgIDMg Ky0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgIHwg ICAxMSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMgfCAyMDI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICB8ICAgMjMg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xhdXNlcy5jIHwg ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAg ICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jICAg ICAgICAgICB8ICAgMjAgKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9S RUFETUUuc3RhdHMgfCAgMTY2ICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVkZS91dGls cy9tdnN0YXRzLmggICAgICAgICAgICB8ICAgIDggKwogMTAgZmlsZXMgY2hh bmdlZCwgMTkxMyBpbnNlcnRpb25zKCspLCAzNjkgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jIGIvY29u dHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCmluZGV4IGRjMDM1ZDcuLjhmMTFi N2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYwor KysgYi9jb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMKQEAgLTk2OSw3ICs5 NjksOCBAQCBlc3RpbWF0ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpiYXNlcmVsLAogCQkJCQkJCSAgIGJhc2VyZWwtPmJhc2VyZXN0 cmljdGluZm8sCiAJCQkJCQkJICAgMCwKIAkJCQkJCQkgICBKT0lOX0lOTkVS LAotCQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJ ICAgTklMKTsKIAogCW5yb3dzID0gY2xhbXBfcm93X2VzdChucm93cyk7CiAK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5k ZXggNDBiZmZkNi4uZDQ1OGE4MSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTUwMCw3ICs1MDAsOCBAQCBwb3N0 Z3Jlc0dldEZvcmVpZ25SZWxTaXplKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJCQkJCSBmcGluZm8tPmxvY2FsX2NvbmRzLAogCQkJCQkJCQkJCQkJ CSBiYXNlcmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkJCQkgSk9JTl9JTk5FUiwK LQkJCQkJCQkJCQkJCQkgTlVMTCk7CisJCQkJCQkJCQkJCQkJIE5VTEwsCisJ CQkJCQkJCQkJCQkJIE5JTCk7CiAKIAljb3N0X3F1YWxfZXZhbCgmZnBpbmZv LT5sb2NhbF9jb25kc19jb3N0LCBmcGluZm8tPmxvY2FsX2NvbmRzLCByb290 KTsKIApAQCAtMjEzNiw3ICsyMTM3LDggQEAgZXN0aW1hdGVfcGF0aF9jb3N0 X3NpemUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJICAgbG9jYWxf cGFyYW1fam9pbl9jb25kcywKIAkJCQkJCQkJCQkgICBmb3JlaWducmVsLT5y ZWxpZCwKIAkJCQkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJCQkJCQkJCSAg IE5VTEwpOworCQkJCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJCQkJICAgTklM KTsKIAkJbG9jYWxfc2VsICo9IGZwaW5mby0+bG9jYWxfY29uZHNfc2VsOwog CiAJCXJvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3MgKiBsb2NhbF9zZWwpOwpA QCAtMzY2Myw3ICszNjY1LDggQEAgcG9zdGdyZXNHZXRGb3JlaWduSm9pblBh dGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCSBmcGluZm8t PmxvY2FsX2NvbmRzLAogCQkJCQkJCQkJCQkJCSAwLAogCQkJCQkJCQkJCQkJ CSBKT0lOX0lOTkVSLAotCQkJCQkJCQkJCQkJCSBOVUxMKTsKKwkJCQkJCQkJ CQkJCQkgTlVMTCwKKwkJCQkJCQkJCQkJCQkgTklMKTsKIAljb3N0X3F1YWxf ZXZhbCgmZnBpbmZvLT5sb2NhbF9jb25kc19jb3N0LCBmcGluZm8tPmxvY2Fs X2NvbmRzLCByb290KTsKIAogCS8qCkBAIC0zNjgyLDcgKzM2ODUsNyBAQCBw b3N0Z3Jlc0dldEZvcmVpZ25Kb2luUGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs CiAJCSAqLwogCQlmcGluZm8tPmpvaW5jbGF1c2Vfc2VsID0gY2xhdXNlbGlz dF9zZWxlY3Rpdml0eShyb290LCBmcGluZm8tPmpvaW5jbGF1c2VzLAogCQkJ CQkJCQkJCQkJCQkwLCBmcGluZm8tPmpvaW50eXBlLAotCQkJCQkJCQkJCQkJ CQlleHRyYS0+c2ppbmZvKTsKKwkJCQkJCQkJCQkJCQkJZXh0cmEtPnNqaW5m bywgTklMKTsKIAogCX0KIAlmcGluZm8tPnNlcnZlciA9IEdldEZvcmVpZ25T ZXJ2ZXIoam9pbnJlbC0+c2VydmVyaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwppbmRleCA1ZTczYTRlLi5l MDZmZDk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jbGF1c2VzZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jbGF1c2VzZWwuYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgInV0 aWxzL3NlbGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK IAorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorCiAKIC8qCiAgKiBEYXRhIHN0 cnVjdHVyZSBmb3IgYWNjdW11bGF0aW5nIGluZm8gYWJvdXQgcG9zc2libGUg cmFuZ2UtcXVlcnkKQEAgLTQ0LDYgKzQ2LDEzIEBAIHR5cGVkZWYgc3RydWN0 IFJhbmdlUXVlcnlDbGF1c2UKIAlTZWxlY3Rpdml0eSBoaWJvdW5kOwkJLyog U2VsZWN0aXZpdHkgb2YgYSB2YXIgPCBzb21ldGhpbmcgY2xhdXNlICovCiB9 IFJhbmdlUXVlcnlDbGF1c2U7CiAKK3N0YXRpYyBTZWxlY3Rpdml0eSBjbGF1 c2VsaXN0X3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQkgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJCQkJIGludCB2YXJS ZWxpZCwKKwkJCQkJCQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJ CQkJCQkgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJCQkJCSBM aXN0ICpjb25kaXRpb25zKTsKKwogc3RhdGljIHZvaWQgYWRkUmFuZ2VDbGF1 c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlzdCwgTm9kZSAqY2xhdXNlLAog CQkJICAgYm9vbCB2YXJvbmxlZnQsIGJvb2wgaXNMVHNlbCwgU2VsZWN0aXZp dHkgczIpOwogCkBAIC02MCwyMyArNjksMjUgQEAgc3RhdGljIGludCBjb3Vu dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkLCBpbnQg dHlwZSk7CiAKIHN0YXRpYyBpbnQgY291bnRfdmFybm9zKExpc3QgKmNsYXVz ZXMsIEluZGV4ICpyZWxpZCk7CiAKK3N0YXRpYyBMaXN0ICpjbGF1c2VzX21h dGNoaW5nX3N0YXRpc3RpYyhMaXN0ICoqY2xhdXNlcywgTVZTdGF0aXN0aWNJ bmZvICpzdGF0aXN0aWMsCisJCQkJCQkgICBJbmRleCByZWxpZCwgaW50IHR5 cGVzLCBib29sIHJlbW92ZSk7CisKIHN0YXRpYyBMaXN0ICpjbGF1c2VsaXN0 X2FwcGx5X2RlcGVuZGVuY2llcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAq Y2xhdXNlcywKIAkJCQkJCQkJCUluZGV4IHJlbGlkLCBMaXN0ICpzdGF0cyk7 CiAKLXN0YXRpYyBNVlN0YXRpc3RpY0luZm8gKmNob29zZV9tdl9zdGF0aXN0 aWNzKExpc3QgKm12c3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcyk7Ci0KLXN0 YXRpYyBMaXN0ICpjbGF1c2VsaXN0X212X3NwbGl0KFBsYW5uZXJJbmZvICpy b290LCBJbmRleCByZWxpZCwKLQkJCQkJCQkJIExpc3QgKmNsYXVzZXMsIExp c3QgKiptdmNsYXVzZXMsCi0JCQkJCQkJCSBNVlN0YXRpc3RpY0luZm8gKm12 c3RhdHMsIGludCB0eXBlcyk7Ci0KIHN0YXRpYyBTZWxlY3Rpdml0eSBjbGF1 c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAotCQkJ CQkJCQkJTGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRz KTsKKwkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgTGlzdCAq Y2xhdXNlcywKKwkJCQkJCQkJCUxpc3QgKmNvbmRpdGlvbnMsIGJvb2wgaXNf b3IpOwogCiBzdGF0aWMgU2VsZWN0aXZpdHkgY2xhdXNlbGlzdF9tdl9zZWxl Y3Rpdml0eV9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LAotCQkJCQkJCQkJ TGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLAotCQkJ CQkJCQkJYm9vbCAqZnVsbG1hdGNoLCBTZWxlY3Rpdml0eSAqbG93c2VsKTsK KwkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywKKwkJCQkJCQkJ CUxpc3QgKmNsYXVzZXMsIExpc3QgKmNvbmRpdGlvbnMsCisJCQkJCQkJCQli b29sIGlzX29yLCBib29sICpmdWxsbWF0Y2gsCisJCQkJCQkJCQlTZWxlY3Rp dml0eSAqbG93c2VsKTsKIHN0YXRpYyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9vdCwK LQkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZz dGF0cyk7CisJCQkJCQkJCQlNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCisJ CQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zLAorCQkJ CQkJCQkJYm9vbCBpc19vcik7CiAKIHN0YXRpYyBpbnQgdXBkYXRlX21hdGNo X2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1 c2VzLAogCQkJCQkJCQkJaW50MnZlY3RvciAqc3Rha2V5cywgTUNWTGlzdCBt Y3ZsaXN0LApAQCAtOTAsMTIgKzEwMSwzMyBAQCBzdGF0aWMgaW50IHVwZGF0 ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLAogCQkJCQkJCQkJaW50IG5tYXRjaGVzLCBjaGFyICog bWF0Y2hlcywKIAkJCQkJCQkJCWJvb2wgaXNfb3IpOwogCisvKgorICogRGVz Y3JpYmVzIGEgY29tYmluYXRpb24gb2YgbXVsdGlwbGUgc3RhdGlzdGljcyB0 byBjb3ZlciBhdHRyaWJ1dGVzCisgKiByZWZlcmVuY2VkIGJ5IHRoZSBjbGF1 c2VzLiBUaGUgYXJyYXkgJ3N0YXRzJyAod2l0aCBuc3RhdHMgZWxlbWVudHMp CisgKiBsaXN0cyBhdHRyaWJ1dGVzIChpbiB0aGUgb3JkZXIgYXMgdGhleSBh cmUgYXBwbGllZCksIGFuZCBudW1iZXIgb2YKKyAqIGNsYXVzZSBhdHRyaWJ1 dGVzIGNvdmVyZWQgYnkgdGhpcyBzb2x1dGlvbi4KKyAqCisgKiBjaG9vc2Vf bXZfc3RhdGlzdGljc19leGhhdXN0aXZlKCkgdXNlcyB0aGlzIHRvIHRyYWNr IGJvdGggdGhlIGN1cnJlbnQKKyAqIGFuZCB0aGUgYmVzdCBzb2x1dGlvbnMs IHdoaWxlIHdhbGtpbmcgdGhyb3VnaCB0aGUgc3RhdGUgb2YgcG9zc2libGUK KyAqIGNvbWJpbmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBtdl9zb2x1 dGlvbl90IHsKKwlpbnQJCW5jbGF1c2VzOwkJLyogbnVtYmVyIG9mIGNsYXVz ZXMgY292ZXJlZCAqLworCWludAkJbmNvbmRpdGlvbnM7CS8qIG51bWJlciBv ZiBjb25kaXRpb25zIGNvdmVyZWQgKi8KKwlpbnQJCW5zdGF0czsJCQkvKiBu dW1iZXIgb2Ygc3RhdHMgYXBwbGllZCAqLworCWludAkgICAqc3RhdHM7CQkJ Lyogc3RhdHMgKGluIHRoZSBhcHBseSBvcmRlcikgKi8KK30gbXZfc29sdXRp b25fdDsKKworc3RhdGljIExpc3QgKmNob29zZV9tdl9zdGF0aXN0aWNzKFBs YW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKKwkJCQkJCQlMaXN0ICpt dnN0YXRzLCBMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zKTsKKwog c3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBpbnQgdHlwZSk7 CiAKIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVySW5mbyAqcm9v dCwgSW5kZXggcmVsaWQpOwogCiBzdGF0aWMgYm9vbCBzdGF0c190eXBlX21h dGNoZXMoTVZTdGF0aXN0aWNJbmZvICpzdGF0LCBpbnQgdHlwZSk7CiAKK2lu dCBtdnN0YXRfc2VhcmNoX3R5cGUgPSBNVlNUQVRfU0VBUkNIX0dSRUVEWTsK IAogLyogdXNlZCBmb3IgbWVyZ2luZyBiaXRtYXBzIC0gQU5EIChtaW4pLCBP UiAobWF4KSAqLwogI2RlZmluZSBNQVgoeCwgeSkgKCgoeCkgPiAoeSkpID8g KHgpIDogKHkpKQpAQCAtMTcwLDE0ICsyMDIsMTUgQEAgY2xhdXNlbGlzdF9z ZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJICAgTGlzdCAq Y2xhdXNlcywKIAkJCQkJICAgaW50IHZhclJlbGlkLAogCQkJCQkgICBKb2lu VHlwZSBqb2ludHlwZSwKLQkJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8pCisJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkg ICBMaXN0ICpjb25kaXRpb25zKQogewogCVNlbGVjdGl2aXR5IHMxID0gMS4w OwogCVJhbmdlUXVlcnlDbGF1c2UgKnJxbGlzdCA9IE5VTEw7CiAJTGlzdENl bGwgICAqbDsKIAogCS8qIHByb2Nlc3NpbmcgbXYgc3RhdHMgKi8KLQlPaWQJ CQlyZWxpZCA9IEludmFsaWRPaWQ7CisJSW5kZXgJCXJlbGlkID0gSW52YWxp ZE9pZDsKIAogCS8qIGxpc3Qgb2YgbXVsdGl2YXJpYXRlIHN0YXRzIG9uIHRo ZSByZWxhdGlvbiAqLwogCUxpc3QJICAgKnN0YXRzID0gTklMOwpAQCAtMTkz LDEyICsyMjYsMTMgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVy SW5mbyAqcm9vdCwKIAkJc3RhdHMgPSBmaW5kX3N0YXRzKHJvb3QsIHJlbGlk KTsKIAogCS8qCi0JICogSWYgdGhlcmUncyBleGFjdGx5IG9uZSBjbGF1c2Us IHRoZW4gbm8gdXNlIGluIHRyeWluZyB0byBtYXRjaCB1cCBwYWlycywKLQkg KiBzbyBqdXN0IGdvIGRpcmVjdGx5IHRvIGNsYXVzZV9zZWxlY3Rpdml0eSgp LgorCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUgY2xhdXNlLCB0aGVuIG5v IHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAKKwkgKiBwYWlycywgb3IgbWF0 Y2hpbmcgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MsIHNvIGp1c3QgZ28gZGly ZWN0bHkKKwkgKiB0byBjbGF1c2Vfc2VsZWN0aXZpdHkoKS4KIAkgKi8KIAlp ZiAobGlzdF9sZW5ndGgoY2xhdXNlcykgPT0gMSkKIAkJcmV0dXJuIGNsYXVz ZV9zZWxlY3Rpdml0eShyb290LCAoTm9kZSAqKSBsaW5pdGlhbChjbGF1c2Vz KSwKLQkJCQkJCQkJICB2YXJSZWxpZCwgam9pbnR5cGUsIHNqaW5mbyk7CisJ CQkJCQkJCSAgdmFyUmVsaWQsIGpvaW50eXBlLCBzamluZm8sIGNvbmRpdGlv bnMpOwogCiAJLyoKIAkgKiBBcHBseSBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cywgYnV0IGZpcnN0IGNoZWNrIHRoYXQgdGhlcmUgYXJlIHNvbWUgc3RhdHMK QEAgLTIzMCwzMSArMjY0LDEwMCBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5 KFBsYW5uZXJJbmZvICpyb290LAogCQkoY291bnRfbXZfYXR0bnVtcyhjbGF1 c2VzLCByZWxpZCwKIAkJCQkJCSAgTVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZf Q0xBVVNFX1RZUEVfSElTVCkgPj0gMikpCiAJewotCQkvKiBjb2xsZWN0IGF0 dHJpYnV0ZXMgZnJvbSB0aGUgY29tcGF0aWJsZSBjb25kaXRpb25zICovCi0J CUJpdG1hcHNldCAqbXZhdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1zKGNs YXVzZXMsIHJlbGlkLAotCQkJCQkJCQkJCQlNVl9DTEFVU0VfVFlQRV9NQ1Yg fCBNVl9DTEFVU0VfVFlQRV9ISVNUKTsKKwkJTGlzdENlbGwgKnM7CisKKwkJ LyoKKwkJICogQ29weSB0aGUgY29uZGl0aW9ucyB3ZSBnb3QgZnJvbSB0aGUg dXBwZXIgcGFydCBvZiB0aGUgZXhwcmVzc2lvbiB0cmVlCisJCSAqIHNvIHRo YXQgd2UgY2FuIGFkZCBsb2NhbCBjb25kaXRpb25zIHRvIGl0ICh3ZSBuZWVk IHRvIGtlZXAgdGhlCisJCSAqIG9yaWdpbmFsIGxpc3QgaW50YWN0LCBmb3Ig c2libGluZyBleHByZXNzaW9ucyAtIG90aGVyIGV4cHJlc3Npb25zCisJCSAq IGF0IHRoZSBzYW1lIGxldmVsKS4KKwkJICovCisJCUxpc3QgKmNvbmRpdGlv bnNfbG9jYWwgPSBsaXN0X2NvcHkoY29uZGl0aW9ucyk7CisKKwkJLyogZmlu ZCB0aGUgYmVzdCBjb21iaW5hdGlvbiBvZiBzdGF0aXN0aWNzICovCisJCUxp c3QgKnNvbHV0aW9uID0gY2hvb3NlX212X3N0YXRpc3RpY3Mocm9vdCwgcmVs aWQsIHN0YXRzLAorCQkJCQkJCQkJCQkgIGNsYXVzZXMsIGNvbmRpdGlvbnMp OwogCi0JCS8qIGFuZCBzZWFyY2ggZm9yIHRoZSBzdGF0aXN0aWMgY292ZXJp bmcgdGhlIG1vc3QgYXR0cmlidXRlcyAqLwotCQlNVlN0YXRpc3RpY0luZm8g Km12c3RhdCA9IGNob29zZV9tdl9zdGF0aXN0aWNzKHN0YXRzLCBtdmF0dG51 bXMpOworCQkvKiBGSVhNRSB3ZSBtdXN0IG5vdCBzY3JpYmJsZSBvdmVyIHRo ZSBvcmlnaW5hbCBsaXN0ICovCisJCWlmIChzb2x1dGlvbikKKwkJCWNsYXVz ZXMgPSBsaXN0X2NvcHkoY2xhdXNlcyk7CiAKLQkJaWYgKG12c3RhdCAhPSBO VUxMKQkvKiB3ZSBoYXZlIGEgbWF0Y2hpbmcgc3RhdHMgKi8KKwkJLyoKKwkJ ICogV2UgaGF2ZSBhIGdvb2Qgc29sdXRpb24sIHdoaWNoIGlzIG1lcmVseSBh IGxpc3Qgb2Ygc3RhdGlzdGljcyB0aGF0CisJCSAqIHdlIG5lZWQgdG8gYXBw bHkuIFdlJ2xsIGFwcGx5IHRoZSBzdGF0aXN0aWNzIG9uZSBieSBvbmUgKGlu IHRoZSBvcmRlcgorCQkgKiBhcyB0aGV5IGFwcGVhciBpbiB0aGUgbGlzdCks IGFuZCBmb3IgZWFjaCBzdGF0aXN0aWMgd2UnbGwKKwkJICoKKwkJICogKDEp IGZpbmQgY2xhdXNlcyBjb21wYXRpYmxlIHdpdGggdGhlIHN0YXRpc3RpYyAo YW5kIHJlbW92ZSB0aGVtCisJCSAqICAgICBmcm9tIHRoZSBsaXN0KQorCQkg KgorCQkgKiAoMikgZmluZCBsb2NhbCBjb25kaXRpb25zIGNvbXBhdGlibGUg d2l0aCB0aGUgc3RhdGlzdGljCisJCSAqCisJCSAqICgzKSBkbyB0aGUgZXN0 aW1hdGlvbiBQKGNsYXVzZXMgfCBjb25kaXRpb25zKQorCQkgKgorCQkgKiAo NCkgYXBwZW5kIHRoZSBlc3RpbWF0ZWQgY2xhdXNlcyB0byBsb2NhbCBjb25k aXRpb25zCisJCSAqCisJCSAqIGNvbnRpbnVvdXNseSBtb2RpZnkgCisJCSAq LworCQlmb3JlYWNoIChzLCBzb2x1dGlvbikKIAkJewotCQkJLyogY2xhdXNl cyBjb21wYXRpYmxlIHdpdGggbXVsdGktdmFyaWF0ZSBzdGF0cyAqLwotCQkJ TGlzdAkqbXZjbGF1c2VzID0gTklMOworCQkJTVZTdGF0aXN0aWNJbmZvICpt dnN0YXQgPSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KHMpOwogCi0JCQkv KiBzcGxpdCB0aGUgY2xhdXNlbGlzdCBpbnRvIHJlZ3VsYXIgYW5kIG12LWNs YXVzZXMgKi8KLQkJCWNsYXVzZXMgPSBjbGF1c2VsaXN0X212X3NwbGl0KHJv b3QsIHJlbGlkLCBjbGF1c2VzLCAmbXZjbGF1c2VzLAotCQkJCQkJCQkJCSAg bXZzdGF0LCBNVl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9I SVNUKTsKKwkJCS8qIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzdGF0 aXN0aWMgd2UncmUgYXBwbHlpbmcgcmlnaHQgbm93ICovCisJCQlMaXN0CSpz dGF0X2NsYXVzZXMgPSBOSUw7CisJCQlMaXN0CSpzdGF0X2NvbmRpdGlvbnMg PSBOSUw7CiAKLQkJCS8qIHdlJ3ZlIGNob3NlbiB0aGUgaGlzdG9ncmFtIHRv IG1hdGNoIHRoZSBjbGF1c2VzICovCi0JCQlBc3NlcnQobXZjbGF1c2VzICE9 IE5JTCk7CisJCQkvKgorCQkJICogRmluZCBjbGF1c2VzIGFuZCBjb25kaXRp b25zIG1hdGNoaW5nIHRoZSBzdGF0aXN0aWMgLSB0aGUgY2xhdXNlcworCQkJ ICogbmVlZCB0byBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QsIHdoaWxlIGNv bmRpdGlvbnMgc2hvdWxkIHJlbWFpbgorCQkJICogdGhlcmUgKHNvIHRoYXQg d2UgY2FuIGFwcGx5IHRoZW0gcmVwZWF0ZWRseSkuCisJCQkgKi8KKwkJCXN0 YXRfY2xhdXNlcworCQkJCT0gY2xhdXNlc19tYXRjaGluZ19zdGF0aXN0aWMo JmNsYXVzZXMsIG12c3RhdCwgcmVsaWQsCisJCQkJCQkJCQkJCSBNVl9DTEFV U0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNULAorCQkJCQkJCQkJ CQkgdHJ1ZSk7CisKKwkJCXN0YXRfY29uZGl0aW9ucworCQkJCT0gY2xhdXNl c19tYXRjaGluZ19zdGF0aXN0aWMoJmNvbmRpdGlvbnNfbG9jYWwsIG12c3Rh dCwgcmVsaWQsCisJCQkJCQkJCQkJCSBNVl9DTEFVU0VfVFlQRV9NQ1YgfCBN Vl9DTEFVU0VfVFlQRV9ISVNULAorCQkJCQkJCQkJCQkgZmFsc2UpOworCisJ CQkvKgorCQkJICogSWYgd2UgZ290IG5vIGNsYXVzZXMgdG8gZXN0aW1hdGUs IHdlJ3ZlIGRvbmUgc29tZXRoaW5nIHdyb25nLAorCQkJICogZWl0aGVyIGR1 cmluZyB0aGUgb3B0aW1pemF0aW9uLCBkZXRlY3RpbmcgY29tcGF0aWJsZSBj bGF1c2UsIG9yCisJCQkgKiBzb21ld2hlcmUgZWxzZS4KKwkJCSAqCisJCQkg KiBBbHNvLCB3ZSBuZWVkIGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzIGluIGNs YXVzZXMgYW5kIGNvbmRpdGlvbnMuCisJCQkgKi8KKwkJCUFzc2VydChzdGF0 X2NsYXVzZXMgIT0gTklMKTsKKwkJCUFzc2VydChjb3VudF9tdl9hdHRudW1z KGxpc3RfdW5pb24oc3RhdF9jbGF1c2VzLCBzdGF0X2NvbmRpdGlvbnMpLAor CQkJCQkJCQlyZWxpZCwgTVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNF X1RZUEVfSElTVCkgPj0gMik7CiAKIAkJCS8qIGNvbXB1dGUgdGhlIG11bHRp dmFyaWF0ZSBzdGF0cyAqLwotCQkJczEgKj0gY2xhdXNlbGlzdF9tdl9zZWxl Y3Rpdml0eShyb290LCBtdmNsYXVzZXMsIG12c3RhdCk7CisJCQlzMSAqPSBj bGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KHJvb3QsIG12c3RhdCwKKwkJCQkJ CQkJCQkJc3RhdF9jbGF1c2VzLCBzdGF0X2NvbmRpdGlvbnMsCisJCQkJCQkJ CQkJCWZhbHNlKTsgLyogQU5EICovCisKKwkJCS8qCisJCQkgKiBBZGQgdGhl IG5ldyBjbGF1c2VzIHRvIHRoZSBsb2NhbCBjb25kaXRpb25zLCBzbyB0aGF0 IHdlIGNhbiB1c2UKKwkJCSAqIHRoZW0gZm9yIHRoZSBzdWJzZXF1ZW50IHN0 YXRpc3RpY3MuIFdlIG9ubHkgYWRkIHRoZSBjbGF1c2VzLAorCQkJICogYmVj YXVzZSB0aGUgY29uZGl0aW9ucyBhcmUgYWxyZWFkeSB0aGVyZSAob3Igc2hv dWxkIGJlKS4KKwkJCSAqLworCQkJY29uZGl0aW9uc19sb2NhbCA9IGxpc3Rf Y29uY2F0KGNvbmRpdGlvbnNfbG9jYWwsIHN0YXRfY2xhdXNlcyk7CiAJCX0K KworCQkvKiBmcm9tIG5vdyBvbiwgd29yayBvbmx5IHdpdGggdGhlICdsb2Nh bCcgbGlzdCBvZiBjb25kaXRpb25zICovCisJCWNvbmRpdGlvbnMgPSBjb25k aXRpb25zX2xvY2FsOwogCX0KIAogCS8qCisJICogSWYgdGhlcmUncyBleGFj dGx5IG9uZSBjbGF1c2UsIHRoZW4gbm8gdXNlIGluIHRyeWluZyB0byBtYXRj aCB1cAorCSAqIHBhaXJzLCBzbyBqdXN0IGdvIGRpcmVjdGx5IHRvIGNsYXVz ZV9zZWxlY3Rpdml0eSgpLgorCSAqLworCWlmIChsaXN0X2xlbmd0aChjbGF1 c2VzKSA9PSAxKQorCQlyZXR1cm4gczEgKiBjbGF1c2Vfc2VsZWN0aXZpdHko cm9vdCwgKE5vZGUgKikgbGluaXRpYWwoY2xhdXNlcyksCisJCQkJCQkJCQkg ICB2YXJSZWxpZCwgam9pbnR5cGUsIHNqaW5mbywgY29uZGl0aW9ucyk7CisK KwkvKgogCSAqIEluaXRpYWwgc2NhbiBvdmVyIGNsYXVzZXMuICBBbnl0aGlu ZyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGEgcG90ZW50aWFsCiAJICogcmFu Z2VxdWVyeSBjbGF1c2UgZ2V0cyBtdWx0aXBsaWVkIGludG8gczEgYW5kIGZv cmdvdHRlbi4gQW55dGhpbmcgdGhhdAogCSAqIGRvZXMgZ2V0cyBpbnNlcnRl ZCBpbnRvIGFuIHJxbGlzdCBlbnRyeS4KQEAgLTI2Niw3ICszNjksOCBAQCBj bGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCQlT ZWxlY3Rpdml0eSBzMjsKIAogCQkvKiBBbHdheXMgY29tcHV0ZSB0aGUgc2Vs ZWN0aXZpdHkgdXNpbmcgY2xhdXNlX3NlbGVjdGl2aXR5ICovCi0JCXMyID0g Y2xhdXNlX3NlbGVjdGl2aXR5KHJvb3QsIGNsYXVzZSwgdmFyUmVsaWQsIGpv aW50eXBlLCBzamluZm8pOworCQlzMiA9IGNsYXVzZV9zZWxlY3Rpdml0eShy b290LCBjbGF1c2UsIHZhclJlbGlkLCBqb2ludHlwZSwgc2ppbmZvLAorCQkJ CQkJCQljb25kaXRpb25zKTsKIAogCQkvKgogCQkgKiBDaGVjayBmb3IgYmVp bmcgcGFzc2VkIGEgUmVzdHJpY3RJbmZvLgpAQCAtNDI1LDYgKzUyOSw1NSBA QCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAog fQogCiAvKgorICogU2ltaWxhciB0byBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5 KCksIGJ1dCBmb3IgT1ItY2xhdXNlcy4gV2UgY2FuJ3Qgc2ltcGx5IHVzZQor ICogdGhlIHNhbWUgbXVsdGktc3RhdGlzdGljIGVzdGltYXRpb24gbG9naWMg Zm9yIEFORC1jbGF1c2VzLCBhdCBsZWFzdCBub3QKKyAqIGRpcmVjdGx5LCBi ZWNhdXNlIHRoZXJlIGFyZSBhIGZldyBrZXkgZGlmZmVyZW5jZXM6CisgKgor ICogICAtIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGRvbid0IHJlYWxseSBh cHBseSB0byBPUi1jbGF1c2VzCisgKgorICogICAtIGNsYXVzZWxpc3Rfc2Vs ZWN0aXZpdHkoKSBpcyBiYXNlZCBvbiBkZWNvbXBvc2luZyB0aGUgc2VsZWN0 aXZpdHkgaW50bworICogICAgIGEgc2VxdWVuY2Ugb2YgY29uZGl0aW9uYWwg cHJvYmFiaWxpdGllcyAoc2VsZWN0aXZpdGllcyksIGJ1dCB0aGF0IGNhbgor ICogICAgIGJlIGRvbmUgb25seSBmb3IgQU5ELWNsYXVzZXMKKyAqCisgKiBX ZSBtaWdodCBpbnZlbnQgYSBzaW1pbGFyIGluZnJhc3RydWN0dXJlIGZvciBv cHRpbWl6aW5nIE9SLWNsYXVzZXMsIGRvaW5nCisgKiBzb21ldGhpbmcgc2lt aWxhciB0byB3aGF0IGNsYXVzZV9zZWxlY3Rpdml0eSBkb2VzIGZvciBBTkQt Y2xhdXNlcywgYnV0CisgKiBsdWNraWx5IHdlIGtub3cgdGhhdCBlYWNoIGRp c2p1bmN0aXZlIG5vcm1hbCBmb3JtIChha2EgT1ItY2xhdXNlKQorICoKKyAq ICAgICAoYSBPUiBiIE9SIGMpCisgKgorICogbWF5IGJlIHJld3JpdHRlbiBh cyBhbiBlcXVpdmFsZW50IGNvbmp1bmN0aXZlIG5vcm1hbCBmb3JtIChha2Eg QU5ELWNsYXVzZSkKKyAqIGJ5IHVzaW5nIG5lZ2F0aW9uOgorICoKKyAqICAg ICBOT1QgKChOT1QgYSkgQU5EIChOT1QgYikgQU5EIChOT1QgYykpCisgKgor ICogQW5kIHRoYXQncyBzb21ldGhpbmcgd2UgY2FuIHBhc3MgdG8gY2xhdXNl bGlzdF9zZWxlY3Rpdml0eSBhbmQgbGV0IGl0IGRvCisgKiBhbGwgdGhlIGhl YXZ5IGxpZnRpbmcuCisgKi8KK3N0YXRpYyBTZWxlY3Rpdml0eQorY2xhdXNl bGlzdF9zZWxlY3Rpdml0eV9vcihQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJ ICAgTGlzdCAqY2xhdXNlcywKKwkJCQkJICAgaW50IHZhclJlbGlkLAorCQkJ CQkgICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJICAgU3BlY2lhbEpvaW5J bmZvICpzamluZm8sCisJCQkJCSAgIExpc3QgKmNvbmRpdGlvbnMpCit7CisJ TGlzdAkgICAqYXJncyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsOworCUV4cHIJ ICAgKmV4cHI7CisKKwkvKiBidWlsZCBhcmd1bWVudHMgZm9yIHRoZSBBTkQt Y2xhdXNlIGJ5IG5lZ2F0aW5nIGFyZ3Mgb2YgdGhlIE9SLWNsYXVzZSAqLwor CWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJCWFyZ3MgPSBsYXBwZW5kKGFyZ3Ms IG1ha2VCb29sRXhwcihOT1RfRVhQUiwgbGlzdF9tYWtlMShsZmlyc3QobCkp LCAtMSkpOworCisJLyogYW5kIHRoZW4gdGhlIGFjdHVhbCBPUi1jbGF1c2Ug b24gdGhlIG5lZ2F0ZWQgYXJncyAqLworCWV4cHIgPSBtYWtlQm9vbEV4cHIo QU5EX0VYUFIsIGFyZ3MsIC0xKTsKKworCS8qIGluc3RlYWQgb2YgY29uc3Ry dWN0aW5nIE5PVCBleHByZXNzaW9uLCBqdXN0IGRvICgxLjAgLSBzKSAqLwor CXJldHVybiAxLjAgLSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsIGxp c3RfbWFrZTEoZXhwciksIHZhclJlbGlkLAorCQkJCQkJCQkJCWpvaW50eXBl LCBzamluZm8sIGNvbmRpdGlvbnMpOworfQorCisvKgogICogYWRkUmFuZ2VD bGF1c2UgLS0tIGFkZCBhIG5ldyByYW5nZSBjbGF1c2UgZm9yIGNsYXVzZWxp c3Rfc2VsZWN0aXZpdHkKICAqCiAgKiBIZXJlIGlzIHdoZXJlIHdlIHRyeSB0 byBtYXRjaCB1cCBwYWlycyBvZiByYW5nZS1xdWVyeSBjbGF1c2VzCkBAIC02 MzEsNyArNzg0LDggQEAgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZv ICpyb290LAogCQkJCSAgIE5vZGUgKmNsYXVzZSwKIAkJCQkgICBpbnQgdmFy UmVsaWQsCiAJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCi0JCQkJICAgU3Bl Y2lhbEpvaW5JbmZvICpzamluZm8pCisJCQkJICAgU3BlY2lhbEpvaW5JbmZv ICpzamluZm8sCisJCQkJICAgTGlzdCAqY29uZGl0aW9ucykKIHsKIAlTZWxl Y3Rpdml0eSBzMSA9IDAuNTsJCS8qIGRlZmF1bHQgZm9yIGFueSB1bmhhbmRs ZWQgY2xhdXNlIHR5cGUgKi8KIAlSZXN0cmljdEluZm8gKnJpbmZvID0gTlVM TDsKQEAgLTc1MSw3ICs5MDUsOCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgKE5vZGUgKikgZ2V0X25vdGNs YXVzZWFyZygoRXhwciAqKSBjbGF1c2UpLAogCQkJCQkJCQkJICB2YXJSZWxp ZCwKIAkJCQkJCQkJCSAgam9pbnR5cGUsCi0JCQkJCQkJCQkgIHNqaW5mbyk7 CisJCQkJCQkJCQkgIHNqaW5mbywKKwkJCQkJCQkJCSAgY29uZGl0aW9ucyk7 CiAJfQogCWVsc2UgaWYgKGFuZF9jbGF1c2UoY2xhdXNlKSkKIAl7CkBAIC03 NjAsMjkgKzkxNSwxOCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCQkoKEJvb2xFeHByICopIGNsYXVzZSktPmFy Z3MsCiAJCQkJCQkJCQl2YXJSZWxpZCwKIAkJCQkJCQkJCWpvaW50eXBlLAot CQkJCQkJCQkJc2ppbmZvKTsKKwkJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJ CWNvbmRpdGlvbnMpOwogCX0KIAllbHNlIGlmIChvcl9jbGF1c2UoY2xhdXNl KSkKIAl7Ci0JCS8qCi0JCSAqIFNlbGVjdGl2aXRpZXMgZm9yIGFuIE9SIGNs YXVzZSBhcmUgY29tcHV0ZWQgYXMgczErczIgLSBzMSpzMiB0bwotCQkgKiBh Y2NvdW50IGZvciB0aGUgcHJvYmFibGUgb3ZlcmxhcCBvZiBzZWxlY3RlZCB0 dXBsZSBzZXRzLgotCQkgKgotCQkgKiBYWFggaXMgdGhpcyB0b28gY29uc2Vy dmF0aXZlPwotCQkgKi8KLQkJTGlzdENlbGwgICAqYXJnOwotCi0JCXMxID0g MC4wOwotCQlmb3JlYWNoKGFyZywgKChCb29sRXhwciAqKSBjbGF1c2UpLT5h cmdzKQotCQl7Ci0JCQlTZWxlY3Rpdml0eSBzMiA9IGNsYXVzZV9zZWxlY3Rp dml0eShyb290LAotCQkJCQkJCQkJCQkJKE5vZGUgKikgbGZpcnN0KGFyZyks Ci0JCQkJCQkJCQkJCQl2YXJSZWxpZCwKLQkJCQkJCQkJCQkJCWpvaW50eXBl LAotCQkJCQkJCQkJCQkJc2ppbmZvKTsKLQotCQkJczEgPSBzMSArIHMyIC0g czEgKiBzMjsKLQkJfQorCQkvKiBqdXN0IGNhbGwgdG8gY2xhdXNlbGlzdF9z ZWxlY3Rpdml0eV9vcigpICovCisJCXMxID0gY2xhdXNlbGlzdF9zZWxlY3Rp dml0eV9vcihyb290LAorCQkJCQkJCQkJKChCb29sRXhwciAqKSBjbGF1c2Up LT5hcmdzLAorCQkJCQkJCQkJdmFyUmVsaWQsCisJCQkJCQkJCQlqb2ludHlw ZSwKKwkJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJCWNvbmRpdGlvbnMpOwog CX0KIAllbHNlIGlmIChpc19vcGNsYXVzZShjbGF1c2UpIHx8IElzQShjbGF1 c2UsIERpc3RpbmN0RXhwcikpCiAJewpAQCAtODcyLDcgKzEwMTYsOCBAQCBj bGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJ CShOb2RlICopICgoUmVsYWJlbFR5cGUgKikgY2xhdXNlKS0+YXJnLAogCQkJ CQkJCQl2YXJSZWxpZCwKIAkJCQkJCQkJam9pbnR5cGUsCi0JCQkJCQkJCXNq aW5mbyk7CisJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJY29uZGl0aW9ucyk7 CiAJfQogCWVsc2UgaWYgKElzQShjbGF1c2UsIENvZXJjZVRvRG9tYWluKSkK IAl7CkBAIC04ODEsNyArMTAyNiw4IEBAIGNsYXVzZV9zZWxlY3Rpdml0eShQ bGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJKE5vZGUgKikgKChDb2VyY2VU b0RvbWFpbiAqKSBjbGF1c2UpLT5hcmcsCiAJCQkJCQkJCXZhclJlbGlkLAog CQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJc2ppbmZvKTsKKwkJCQkJCQkJ c2ppbmZvLAorCQkJCQkJCQljb25kaXRpb25zKTsKIAl9CiAJZWxzZQogCXsK QEAgLTk0NSwxNSArMTA5MSwxNiBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxh bm5lckluZm8gKnJvb3QsCiAgKiAgICAgICAgICBpbiB0aGUgTUNWIGxpc3Qs IHRoZW4gdGhlIHNlbGVjdGl2aXR5IGlzIGJlbG93IHRoZSBsb3dlc3QgZnJl cXVlbmN5CiAgKiAgICAgICAgICBmb3VuZCBpbiB0aGUgTUNWIGxpc3QsCiAg KgotICogVE9ETyBXaGVuIGFwcGx5aW5nIHRoZSBjbGF1c2VzIHRvIHRoZSBo aXN0b2dyYW0vTUNWIGxpc3QsIHdlIGNhbiBkbwotICogICAgICB0aGF0IGZy b20gdGhlIG1vc3Qgc2VsZWN0aXZlIGNsYXVzZXMgZmlyc3QsIGJlY2F1c2Ug dGhhdCdsbAotICogICAgICBlbGltaW5hdGUgdGhlIGJ1Y2tldHMvaXRlbXMg c29vbmVyIChzbyB3ZSdsbCBiZSBhYmxlIHRvIHNraXAKLSAqICAgICAgdGhl bSB3aXRob3V0IGluc3BlY3Rpb24sIHdoaWNoIGlzIG1vcmUgZXhwZW5zaXZl KS4gQnV0IHRoaXMKLSAqICAgICAgcmVxdWlyZXMgcmVhbGx5IGtub3dpbmcg dGhlIHBlci1jbGF1c2Ugc2VsZWN0aXZpdGllcyBpbiBhZHZhbmNlLAotICog ICAgICBhbmQgdGhhdCdzIG5vdCB3aGF0IHdlIGRvIG5vdy4KKyAqIFRPRE8g V2hlbiBhcHBseWluZyB0aGUgY2xhdXNlcyB0byB0aGUgaGlzdG9ncmFtL01D ViBsaXN0LCB3ZSBjYW4gZG8gdGhhdCBmcm9tCisgKiAgICAgIHRoZSBtb3N0 IHNlbGVjdGl2ZSBjbGF1c2VzIGZpcnN0LCBiZWNhdXNlIHRoYXQnbGwgZWxp bWluYXRlIHRoZQorICogICAgICBidWNrZXRzL2l0ZW1zIHNvb25lciAoc28g d2UnbGwgYmUgYWJsZSB0byBza2lwIHRoZW0gd2l0aG91dCBpbnNwZWN0aW9u LAorICogICAgICB3aGljaCBpcyBtb3JlIGV4cGVuc2l2ZSkuIEJ1dCB0aGlz IHJlcXVpcmVzIHJlYWxseSBrbm93aW5nIHRoZQorICogICAgICBwZXItY2xh dXNlIHNlbGVjdGl2aXRpZXMgaW4gYWR2YW5jZSwgYW5kIHRoYXQncyBub3Qg d2hhdCB3ZSBkbyBub3cuCisgKgogICovCiBzdGF0aWMgU2VsZWN0aXZpdHkK LWNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cykKK2Ns YXVzZWxpc3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIE1W U3RhdGlzdGljSW5mbyAqbXZzdGF0cywKKwkJCQkJCSAgTGlzdCAqY2xhdXNl cywgTGlzdCAqY29uZGl0aW9ucywgYm9vbCBpc19vcikKIHsKIAlib29sIGZ1 bGxtYXRjaCA9IGZhbHNlOwogCVNlbGVjdGl2aXR5IHMxID0gMC4wLCBzMiA9 IDAuMDsKQEAgLTk2NCwyODEgKzExMTEsMTM3NSBAQCBjbGF1c2VsaXN0X212 X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2Vz LCBNVlN0YXRpc3RpY0luZm8gKm12cwogCSAqLwogCVNlbGVjdGl2aXR5IG1j dl9sb3cgPSAwLjA7CiAKLQkvKiBUT0RPIEV2YWx1YXRlIHNpbXBsZSAxRCBz ZWxlY3Rpdml0aWVzLCB1c2UgdGhlIHNtYWxsZXN0IG9uZSBhcwotCSAqICAg ICAgYW4gdXBwZXIgYm91bmQsIHByb2R1Y3QgYXMgbG93ZXIgYm91bmQsIGFu ZCBzb3J0IHRoZQotCSAqICAgICAgY2xhdXNlcyBpbiBhc2NlbmRpbmcgb3Jk ZXIgYnkgc2VsZWN0aXZpdHkgKHRvIG9wdGltaXplIHRoZQotCSAqICAgICAg TUNWL2hpc3RvZ3JhbSBldmFsdWF0aW9uKS4KLQkgKi8KKwkvKiBUT0RPIEV2 YWx1YXRlIHNpbXBsZSAxRCBzZWxlY3Rpdml0aWVzLCB1c2UgdGhlIHNtYWxs ZXN0IG9uZSBhcworCSAqICAgICAgYW4gdXBwZXIgYm91bmQsIHByb2R1Y3Qg YXMgbG93ZXIgYm91bmQsIGFuZCBzb3J0IHRoZQorCSAqICAgICAgY2xhdXNl cyBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgc2VsZWN0aXZpdHkgKHRvIG9wdGlt aXplIHRoZQorCSAqICAgICAgTUNWL2hpc3RvZ3JhbSBldmFsdWF0aW9uKS4K KwkgKi8KKworCS8qIEV2YWx1YXRlIHRoZSBNQ1YgZmlyc3QuICovCisJczEg PSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwgbXZz dGF0cywKKwkJCQkJCQkJCQkgICBjbGF1c2VzLCBjb25kaXRpb25zLCBpc19v ciwKKwkJCQkJCQkJCQkgICAmZnVsbG1hdGNoLCAmbWN2X2xvdyk7CisKKwkv KgorCSAqIElmIHdlIGdvdCBhIGZ1bGwgZXF1YWxpdHkgbWF0Y2ggb24gdGhl IE1DViBsaXN0LCB3ZSdyZSBkb25lIChhbmQKKwkgKiB0aGUgZXN0aW1hdGUg aXMgcHJldHR5IGdvb2QpLgorCSAqLworCWlmIChmdWxsbWF0Y2ggJiYgKHMx ID4gMC4wKSkKKwkJcmV0dXJuIHMxOworCisJLyogVE9ETyBpZiAoZnVsbG1h dGNoKSB3aXRob3V0IG1hdGNoaW5nIE1DViBpdGVtLCB1c2UgdGhlIG1jdl9s b3cKKwkgKiAgICAgIHNlbGVjdGl2aXR5IGFzIHVwcGVyIGJvdW5kICovCisK KwlzMiA9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKHJv b3QsIG12c3RhdHMsCisJCQkJCQkJCQkJCSBjbGF1c2VzLCBjb25kaXRpb25z LCBpc19vcik7CisKKwkvKiBUT0RPIGNsYW1wIHRvIDw9IDEuMCAob3IgbW9y ZSBzdHJpY3RseSwgd2hlbiBwb3NzaWJsZSkgKi8KKwlyZXR1cm4gczEgKyBz MjsKK30KKworLyoKKyAqIFB1bGwgdmFyYXR0bm9zIGZyb20gdGhlIGNsYXVz ZXMsIHNpbWlsYXJseSB0byBwdWxsX3ZhcmF0dG5vcygpIGJ1dDoKKyAqCisg KiAoYSkgb25seSBnZXQgYXR0cmlidXRlcyBmb3IgYSBwYXJ0aWN1bGFyIHJl bGF0aW9uIChyZWxpZCkKKyAqIChiKSBpZ25vcmUgc3lzdGVtIGF0dHJpYnV0 ZXMgKHdlIGNhbid0IGJ1aWxkIHN0YXRzIG9uIHRoZW0gYW55d2F5KQorICoK KyAqIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgY29tcGFy ZSB0aGUgcmVzdWx0IHdpdGggYXR0bnVtCisgKiB2YWx1ZXMgZnJvbSBwZ19h dHRyaWJ1dGUgZXRjLgorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK2dldF92 YXJhdHRub3MoTm9kZSAqIG5vZGUsIEluZGV4IHJlbGlkKQoreworCWludAkJ CWs7CisJQml0bWFwc2V0ICAqdmFyYXR0bm9zID0gTlVMTDsKKwlCaXRtYXBz ZXQgICpyZXN1bHQgPSBOVUxMOworCisJLyogZ2V0IHRoZSB2YXJhdHRub3Mg Ki8KKwlwdWxsX3ZhcmF0dG5vcyhub2RlLCByZWxpZCwgJnZhcmF0dG5vcyk7 CisKKwlrID0gLTE7CisJd2hpbGUgKChrID0gYm1zX25leHRfbWVtYmVyKHZh cmF0dG5vcywgaykpID49IDApCisJeworCQlpZiAoayArIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIgPiAwKQorCQkJcmVzdWx0CisJCQkJ PSBibXNfYWRkX21lbWJlcihyZXN1bHQsCisJCQkJCQkJCSBrICsgRmlyc3RM b3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJfQorCisJYm1zX2Zy ZWUodmFyYXR0bm9zKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisg KiBDb2xsZWN0IGF0dHJpYnV0ZXMgZnJvbSBtdi1jb21wYXRpYmxlIGNsYXVz ZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorY29sbGVjdF9tdl9hdHRu dW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkLCBpbnQgdHlwZXMpCit7 CisJQml0bWFwc2V0ICAqYXR0bnVtcyA9IE5VTEw7CisJTGlzdENlbGwgICAq bDsKKworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSBjbGF1c2VzIGFuZCBp ZGVudGlmeSB0aGUgb25lcyB3ZSBjYW4gZXN0aW1hdGUKKwkgKiB1c2luZyBt dWx0aXZhcmlhdGUgc3RhdHMsIGFuZCByZW1lbWJlciB0aGUgcmVsaWQvY29s dW1ucy4gV2UnbGwKKwkgKiB0aGVuIGNyb3NzLWNoZWNrIGlmIHdlIGhhdmUg c3VpdGFibGUgc3RhdHMsIGFuZCBvbmx5IGlmIG5lZWRlZAorCSAqIHdlJ2xs IHNwbGl0IHRoZSBjbGF1c2VzIGludG8gbXVsdGl2YXJpYXRlIGFuZCByZWd1 bGFyIGxpc3RzLgorCSAqCisJICogRm9yIG5vdyB3ZSdyZSBvbmx5IGludGVy ZXN0ZWQgaW4gUmVzdHJpY3RJbmZvIG5vZGVzIHdpdGggbmVzdGVkCisJICog T3BFeHByLCB1c2luZyBlaXRoZXIgYSByYW5nZSBvciBlcXVhbGl0eS4KKwkg Ki8KKwlmb3JlYWNoIChsLCBjbGF1c2VzKQorCXsKKwkJTm9kZQkgICAqY2xh dXNlID0gKE5vZGUgKikgbGZpcnN0KGwpOworCisJCS8qIGlnbm9yZSB0aGUg cmVzdWx0IGhlcmUgLSB3ZSBvbmx5IG5lZWQgdGhlIGF0dG51bXMgKi8KKwkJ Y2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xhdXNlLCByZWxpZCwgJmF0dG51 bXMsIHR5cGVzKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBub3Qg YXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSB0aGUgY2xh dXNlKHMpLAorCSAqIHdlIGNhbiB0aHJvdyBldmVyeXRoaW5nIG91dCAoYXMg d2UnbGwgcmV2ZXJ0IHRvIHNpbXBsZSBzdGF0cykuCisJICovCisJaWYgKGJt c19udW1fbWVtYmVycyhhdHRudW1zKSA8PSAxKQorCXsKKwkJYm1zX2ZyZWUo YXR0bnVtcyk7CisJCWF0dG51bXMgPSBOVUxMOworCX0KKworCXJldHVybiBh dHRudW1zOworfQorCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBhdHRy aWJ1dGVzIGluIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0 ZSBzdGF0cy4KKyAqLworc3RhdGljIGludAorY291bnRfbXZfYXR0bnVtcyhM aXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCwgaW50IHR5cGUpCit7CisJaW50 IGM7CisJQml0bWFwc2V0ICphdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1z KGNsYXVzZXMsIHJlbGlkLCB0eXBlKTsKKworCWMgPSBibXNfbnVtX21lbWJl cnMoYXR0bnVtcyk7CisKKwlibXNfZnJlZShhdHRudW1zKTsKKworCXJldHVy biBjOworfQorCisvKgorICogQ291bnQgdmFybm9zIHJlZmVyZW5jZWQgaW4g dGhlIGNsYXVzZXMsIGFuZCBpZiB0aGVyZSdzIGEgc2luZ2xlIHZhcm5vIHRo ZW4KKyAqIHJldHVybiB0aGUgaW5kZXggaW4gJ3JlbGlkJy4KKyAqLworc3Rh dGljIGludAorY291bnRfdmFybm9zKExpc3QgKmNsYXVzZXMsIEluZGV4ICpy ZWxpZCkKK3sKKwlpbnQgY250OworCUJpdG1hcHNldCAqdmFybm9zID0gTlVM TDsKKworCXZhcm5vcyA9IHB1bGxfdmFybm9zKChOb2RlICopIGNsYXVzZXMp OworCWNudCA9IGJtc19udW1fbWVtYmVycyh2YXJub3MpOworCisJLyogaWYg dGhlcmUncyBhIHNpbmdsZSB2YXJubyBpbiB0aGUgY2xhdXNlcywgcmVtZW1i ZXIgaXQgKi8KKwlpZiAoYm1zX251bV9tZW1iZXJzKHZhcm5vcykgPT0gMSkK KwkJKnJlbGlkID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIodmFybm9zKTsKKwor CWJtc19mcmVlKHZhcm5vcyk7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0 aWMgTGlzdCAqCitjbGF1c2VzX21hdGNoaW5nX3N0YXRpc3RpYyhMaXN0ICoq Y2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICpzdGF0aXN0aWMsCisJCQkJCQkg ICBJbmRleCByZWxpZCwgaW50IHR5cGVzLCBib29sIHJlbW92ZSkKK3sKKwlp bnQgaTsKKwlCaXRtYXBzZXQgICpzdGF0X2F0dG51bXMgPSBOVUxMOworCUxp c3QJICAgKm1hdGNoaW5nX2NsYXVzZXMgPSBOSUw7CisJTGlzdENlbGwgICAq bGM7CisKKwkvKiBidWlsZCBhdHRudW0gYml0bWFwc2V0IGZvciB0aGlzIHN0 YXRpc3RpY3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGlzdGljLT5zdGFr ZXlzLT5kaW0xOyBpKyspCisJCXN0YXRfYXR0bnVtcyA9IGJtc19hZGRfbWVt YmVyKHN0YXRfYXR0bnVtcywKKwkJCQkJCQkJCSAgc3RhdGlzdGljLT5zdGFr ZXlzLT52YWx1ZXNbaV0pOworCisJLyoKKwkgKiBXZSBjYW4ndCB1c2UgZm9y ZWFjaCBoZXJlLCBiZWNhdXNlIHdlIG1heSBuZWVkIHRvIHJlbW92ZSBzb21l IG9mIHRoZQorCSAqIGNsYXVzZXMgaWYgKHJlbW92ZT10cnVlKS4KKwkgKi8K KwlsYyA9IGxpc3RfaGVhZCgqY2xhdXNlcyk7CisJd2hpbGUgKGxjKQorCXsK KwkJTm9kZSAqY2xhdXNlID0gKE5vZGUqKWxmaXJzdChsYyk7CisJCUJpdG1h cHNldCAqYXR0bnVtcyA9IE5VTEw7CisKKwkJLyogbXVzdCBhZHZhbmNlIGxj IGJlZm9yZSBsaXN0X2RlbGV0ZSBwb3NzaWJseSBwZnJlZSdzIGl0ICovCisJ CWxjID0gbG5leHQobGMpOworCisJCS8qCisJCSAqIHNraXAgY2xhdXNlcyB0 aGF0IGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHN0YXRzIChqdXN0IGxlYXZl IHRoZW0KKwkJICogaW4gdGhlIG9yaWdpbmFsIGxpc3QpCisJCSAqCisJCSAq IFhYWCBQZXJoYXBzIHRoaXMgc2hvdWxkIGNoZWNrIHdoYXQgc3RhdHMgYXJl IGFjdHVhbGx5IGF2YWlsYWJsZSBpbgorCQkgKiAgICAgdGhlIHN0YXRpc3Rp Y3MgKG5vdCBhIGJpZyBkZWFsIG5vdywgYmVjYXVzZSBNQ1YgYW5kIGhpc3Rv Z3JhbXMKKwkJICogICAgIGhhbmRsZSB0aGUgc2FtZSB0eXBlcyBvZiBjb25k aXRpb25zKS4KKwkJICovCisJCWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRp YmxlKGNsYXVzZSwgcmVsaWQsICZhdHRudW1zLCB0eXBlcykpCisJCXsKKwkJ CWJtc19mcmVlKGF0dG51bXMpOworCQkJY29udGludWU7CisJCX0KKworCQkv KiBpZiB0aGUgY2xhdXNlIGlzIGNvdmVyZWQgYnkgdGhlIHN0YXRpc3RpYywg YWRkIGl0IHRvIHRoZSBsaXN0ICovCisJCWlmIChibXNfaXNfc3Vic2V0KGF0 dG51bXMsIHN0YXRfYXR0bnVtcykpCisJCXsKKwkJCW1hdGNoaW5nX2NsYXVz ZXMgPSBsYXBwZW5kKG1hdGNoaW5nX2NsYXVzZXMsIGNsYXVzZSk7CisKKwkJ CS8qIGlmIHJlbW92ZT10cnVlLCByZW1vdmUgdGhlIG1hdGNoaW5nIGl0ZW0g ZnJvbSB0aGUgbWFpbiBsaXN0ICovCisJCQlpZiAocmVtb3ZlKQorCQkJCSpj bGF1c2VzID0gbGlzdF9kZWxldGVfcHRyKCpjbGF1c2VzLCBjbGF1c2UpOwor CQl9CisKKwkJYm1zX2ZyZWUoYXR0bnVtcyk7CisJfQorCisJYm1zX2ZyZWUo c3RhdF9hdHRudW1zKTsKKworCXJldHVybiBtYXRjaGluZ19jbGF1c2VzOwor fQorCisvKgorICogU2VsZWN0cyB0aGUgYmVzdCBjb21iaW5hdGlvbiBvZiBt dWx0aXZhcmlhdGUgc3RhdGlzdGljcywgaW4gYW4gZXhoYXVzdGl2ZQorICog d2F5LCB3aGVyZSAnYmVzdCcgbWVhbnM6CisgKgorICogKGEpIGNvdmVyaW5n IHRoZSBtb3N0IGF0dHJpYnV0ZXMgKHJlZmVyZW5jZWQgYnkgY2xhdXNlcykK KyAqIChiKSB1c2luZyB0aGUgbGVhc3QgbnVtYmVyIG9mIG11bHRpdmFyaWF0 ZSBzdGF0cworICogKGMpIHVzaW5nIHRoZSBtb3N0IGNvbmRpdGlvbnMgdG8g ZXhwbG9pdCBkZXBlbmRlbmN5CisgKgorICogRG9uJ3QgY2FsbCB0aGlzIGRp cmVjdGx5IGJ1dCB0aHJvdWdoIGNob29zZV9tdl9zdGF0aXN0aWNzKCksIHdo aWNoIGRvZXMgc29tZQorICogYWRkaXRpb25hbCB0cmlja3MgdG8gbWluaW1p emUgdGhlIHJ1bnRpbWUuCisgKgorICoKKyAqIEFsZ29yaXRobQorICogLS0t LS0tLS0tCisgKiBUaGUgYWxnb3JpdGhtIGlzIGEgcmVjdXJzaXZlIGltcGxl bWVudGF0aW9uIG9mIGJhY2t0cmFja2luZywgd2l0aCBtYXhpbXVtCisgKiBk ZXB0aCBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG11bHRpLXZhcmlhdGUgc3Rh dGlzdGljcyBhdmFpbGFibGUgb24gdGhlIHRhYmxlLgorICogSXQgYWN0dWFs bHkgZXhwbG9yZXMgYWxsIHZhbGlkIGNvbWJpbmF0aW9ucyBvZiBzdGF0cy4K KyAqIAorICogV2hlbmV2ZXIgaXQgY29uc2lkZXJzIGFkZGluZyB0aGUgbmV4 dCBzdGF0aXN0aWNzLCB0aGUgY2xhdXNlcyBpdCBtYXRjaGVzIGFyZQorICog ZGl2aWRlZCBpbnRvICdjb25kaXRpb25zJyAoY2xhdXNlcyBhbHJlYWR5IG1h dGNoZWQgYnkgYXQgbGVhc3Qgb25lIHByZXZpb3VzCisgKiBzdGF0aXN0aWNz KSBhbmQgY2xhdXNlcyB0aGF0IGFyZSBlc3RpbWF0ZWQuCisgKgorICogVGhl biBzZXZlcmFsIGNoZWNrcyBhcmUgcGVyZm9ybWVkOgorICoKKyAqICAoYSkg VGhlIHN0YXRpc3RpY3MgY292ZXJzIGF0IGxlYXN0IDIgY29sdW1ucywgcmVm ZXJlbmNlZCBpbiB0aGUgZXN0aW1hdGVkCisgKiAgICAgIGNsYXVzZXMgKG90 aGVyd2lzZSBtdWx0aS12YXJpYXRlIHN0YXRzIGFyZSB1c2VsZXNzKS4KKyAq CisgKiAgKGIpIFRoZSBzdGF0aXN0aWNzIGNvdmVycyBhdCBsZWFzdCAxIG5l dyBjb2x1bW4sIGkuZS4gY29sdW1uIG5vdCByZWZlZmVuY2VkCisgKiAgICAg IGJ5IHRoZSBhbHJlYWR5IHVzZWQgc3RhdHMgKGFuZCB0aGUgbmV3IGNvbHVt biBoYXMgdG8gYmUgcmVmZXJlbmNlZCBieQorICogICAgICB0aGUgY2xhdXNl cywgb2YgY291c2UpLiBPdGhlcndpc2UgdGhlIHN0YXRpc3RpY3Mgd291bGQg bm90IGFkZCBhbnkgbmV3CisgKiAgICAgIGluZm9ybWF0aW9uLgorICoKKyAq IFRoZXJlIGFyZSBzb21lIG90aGVyIHNhbml0eSBjaGVja3MgKGUuZy4gc3Rh dHMgbXVzdCBub3QgYmUgdXNlZCB0d2ljZSBldGMuKS4KKyAqCisgKgorICog V2Vha25lc3NlcworICogLS0tLS0tLS0tLQorICogVGhlIGN1cnJlbnQgaW1w bGVtZXRhdGlvbiB1c2VzIGEgcmF0aGVyIHNpbXBsZSBvcHRpbWFsaXR5IGNy aXRlcmlhLCBzbyBpdCBtYXkKKyAqIG5vdCBkbyB0aGUgYmVzdCBjaG9pY2Ug d2hlbgorICoKKyAqIChhKSBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgc29sdXRp b25zIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGNvdmVyZWQKKyAqICAgICBh dHRyaWJ1dGVzIGFuZCBudW1iZXIgb2Ygc3RhdGlzdGljcyAoZS5nLiB0aGUg c2FtZSBzb2x1dGlvbiBidXQgd2l0aAorICogICAgIHN0YXRpc3RpY3MgaW4g YSBkaWZmZXJlbnQgb3JkZXIpLiBJdCdzIHVuY2xlYXIgd2hpY2ggc29sdXRp b24gaW4gdGhlIGJlc3QKKyAqICAgICBvbmUgLSBpbiBhIHNlbnNlIGFsbCBv ZiB0aGVtIGFyZSBlcXVhbC4KKyAqCisgKiBUT0RPIEl0IG1pZ2h0IGJlIHBv c3NpYmxlIHRvIGNvbXB1dGUgZXN0aW1hdGUgZm9yIGVhY2ggb2YgdGhvc2Ug c29sdXRpb25zLAorICogICAgICBhbmQgdGhlbiBjb21iaW5lIHRoZW0gdG8g Z2V0IHRoZSBmaW5hbCBlc3RpbWF0ZSAoZS5nLiBieSB1c2luZyBhdmVyYWdl CisgKiAgICAgIG9yIG1lZGlhbikuCisgKgorICogKGIpIERvZXMgbm90IGNv bnNpZGVyIHRoYXQgc29tZSB0eXBlcyBvZiBzdGF0cyBhcmUgYSBiZXR0ZXIg bWF0Y2ggZm9yIHNvbWUKKyAqICAgICB0eXBlcyBvZiBjbGF1c2VzIChlLmcu IE1DViBsaXN0IGlzIGdlbmVyYWxseSBhIGJldHRlciBtYXRjaCBmb3IgZXF1 YWxpdHkKKyAqICAgICBjb25kaXRpb25zIHRoYW4gYSBoaXN0b2dyYW0pLgor ICoKKyAqICAgICBCdXQgbWF5YmUgdGhpcyBpcyBwb2ludGxlc3MgLSBnZW5l cmFsbHksIGVhY2ggY29sdW1uIGlzIGVpdGhlciBhIGxhYmVsCisgKiAgICAg KGl0J3Mgbm90IGltcG9ydGFudCB3aGV0aGVyIGJlY2F1c2Ugb2YgdGhlIGRh dGEgdHlwZSBvciBob3cgaXQncyB1c2VkKSwKKyAqICAgICBvciBhIHZhbHVl IHdpdGggb3JkZXJpbmcgdGhhdCBtYWtlcyBzZW5zZS4gU28gZWl0aGVyIGEg TUNWIGxpc3QgaXMgbW9yZQorICogICAgIGFwcHJvcHJpYXRlIChsYWJlbHMp IG9yIGEgaGlzdG9ncmFtICh2YWx1ZXMgd2l0aCBvcmRlcmluZ3MpLgorICoK KyAqICAgICBOb3cgc3VyZSB3aGF0IHRvIGRvIHdpdGggc3RhdGlzdGljcyBv biBjb2x1bW5zIG1peGluZyBib3RoIHR5cGVzIG9mIGRhdGEKKyAqICAgICAo c29tZSBjb2x1bW5zIHdvdWxkIHdvcmsgYmVzdCB3aXRoIE1DVnMsIHNvbWUg d2l0aCBoaXN0b2dyYW1zKS4gTWF5YmUgd2UKKyAqICAgICBjb3VsZCBpbnZl bnQgYSBuZXcgdHlwZSBvZiBzdGF0aXN0aWNzIGNvbWJpbmluZyBNQ1YgbGlz dCBhbmQgaGlzdG9ncmFtCisgKiAgICAgKGtlZXBpbmcgYSBzbWFsbCBoaXN0 b2dyYW0gZm9yIGVhY2ggTUNWIGl0ZW0sIGFuZCBhIHNlcGFyYXRlIGhpc3Rv Z3JhbQorICogICAgIGZvciB2YWx1ZXMgbm90IG9uIHRoZSBNQ1YgbGlzdCku CisgKgorICogVE9ETyBUaGUgYWxnb3JpdGhtIHNob3VsZCBwcm9iYWJseSBj b3VudCBudW1iZXIgb2YgVmFycyAobm90IGp1c3QgYXR0bnVtcykKKyAqICAg ICAgd2hlbiBjb21wdXRpbmcgdGhlICdzY29yZScgb2YgZWFjaCBzb2x1dGlv bi4gQ29tcHV0aW5nIHRoZSByYXRpbyBvZgorICogICAgICAobnVtIG9mIGFs bCB2YXJzKSAvIChudW0gb2YgY29uZGl0aW9uIHZhcnMpIGFzIGEgbWVhc3Vy ZSBvZiBob3cgd2VsbAorICogICAgICB0aGUgc29sdXRpb24gdXNlcyBjb25k aXRpb25zIG1pZ2h0IGJlIHVzZWZ1bC4KKyAqLworc3RhdGljIHZvaWQKK2No b29zZV9tdl9zdGF0aXN0aWNzX2V4aGF1c3RpdmUoUGxhbm5lckluZm8gKnJv b3QsIGludCBzdGVwLAorCQkJCQlpbnQgbm12c3RhdHMsIE1WU3RhdGlzdGlj SW5mbyAqbXZzdGF0cywgQml0bWFwc2V0ICoqIHN0YXRzX2F0dG51bXMsCisJ CQkJCWludCBuY2xhdXNlcywgTm9kZSAqKiBjbGF1c2VzLCBCaXRtYXBzZXQg KiogY2xhdXNlc19hdHRudW1zLAorCQkJCQlpbnQgbmNvbmRpdGlvbnMsIE5v ZGUgKiogY29uZGl0aW9ucywgQml0bWFwc2V0ICoqIGNvbmRpdGlvbnNfYXR0 bnVtcywKKwkJCQkJYm9vbCAqY292ZXJfbWFwLCBib29sICpjb25kaXRpb25f bWFwLCBpbnQgKnJ1bGVkX291dCwKKwkJCQkJbXZfc29sdXRpb25fdCAqY3Vy cmVudCwgbXZfc29sdXRpb25fdCAqKmJlc3QpCit7CisJaW50IGksIGo7CisK KwlBc3NlcnQoYmVzdCAhPSBOVUxMKTsKKwlBc3NlcnQoKHN0ZXAgPT0gMCAm JiBjdXJyZW50ID09IE5VTEwpIHx8IChzdGVwID4gMCAmJiBjdXJyZW50ICE9 IE5VTEwpKTsKKworCS8qIHRoaXMgbWF5IHJ1biBmb3IgYSBsb25nIHNpbWUs IHNvIGxldCdzIG1ha2UgaXQgaW50ZXJydXB0aWJsZSAqLworCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CisKKwlpZiAoY3VycmVudCA9PSBOVUxMKQorCXsK KwkJY3VycmVudCA9IChtdl9zb2x1dGlvbl90KilwYWxsb2MwKHNpemVvZiht dl9zb2x1dGlvbl90KSk7CisJCWN1cnJlbnQtPnN0YXRzID0gKGludCopcGFs bG9jMChzaXplb2YoaW50KSpubXZzdGF0cyk7CisJCWN1cnJlbnQtPm5zdGF0 cyA9IDA7CisJCWN1cnJlbnQtPm5jbGF1c2VzID0gMDsKKwkJY3VycmVudC0+ bmNvbmRpdGlvbnMgPSAwOworCX0KKworCS8qCisJICogTm93IHRyeSB0byBh cHBseSBlYWNoIHN0YXRpc3RpY3MsIG1hdGNoaW5nIGF0IGxlYXN0IHR3byBh dHRyaWJ1dGVzLAorCSAqIHVubGVzcyBpdCdzIGFscmVhZHkgdXNlZCBpbiBv bmUgb2YgdGhlIHByZXZpb3VzIHN0ZXBzLgorCSAqLworCWZvciAoaSA9IDA7 IGkgPCBubXZzdGF0czsgaSsrKQorCXsKKwkJaW50IGM7CisKKwkJaW50IG5j b3ZlcmVkX2NsYXVzZXMgPSAwOwkJLyogbnVtYmVyIG9mIGNvdmVyZWQgY2xh dXNlcyAqLworCQlpbnQgbmNvdmVyZWRfY29uZGl0aW9ucyA9IDA7CS8qIG51 bWJlciBvZiBjb3ZlcmVkIGNvbmRpdGlvbnMgKi8KKwkJaW50IG5hdHRudW1z ID0gMDsJCS8qIG51bWJlciBvZiBjb3ZlcmVkIGF0dHJpYnV0ZXMgKi8KKwor CQlCaXRtYXBzZXQgICphbGxfYXR0bnVtcyA9IE5VTEw7CisKKwkJLyogc2tp cCBzdGF0aXN0aWNzIHRoYXQgd2VyZSBhbHJlYWR5IHVzZWQgb3IgZWxpbWlu YXRlZCAqLworCQlpZiAocnVsZWRfb3V0W2ldICE9IC0xKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogU2VlIGlmIHdlIGhhdmUgY2xhdXNlcyBjb3Zl cmVkIGJ5IHRoaXMgc3RhdGlzdGljcywgYnV0IG5vdAorCQkgKiB5ZXQgY292 ZXJlZCBieSBhbnkgb2YgdGhlIHByZWNlZGluZyBvbmNlcy4KKwkJICovCisJ CWZvciAoYyA9IDA7IGMgPCBuY2xhdXNlczsgYysrKQorCQl7CisJCQlib29s IGNvdmVyZWQgPSBmYWxzZTsKKwkJCUJpdG1hcHNldCAqY2xhdXNlX2F0dG51 bXMgPSBjbGF1c2VzX2F0dG51bXNbY107CisJCQlCaXRtYXBzZXQgKnRtcCA9 IE5VTEw7CisKKwkJCS8qCisJCQkgKiBJZiB0aGlzIGNsYXVzZSBpcyBub3Qg Y292ZXJlZCBieSB0aGlzIHN0YXRzLCB3ZSBjYW4ndAorCQkJICogdXNlIHRo ZSBzdGF0cyB0byBlc3RpbWF0ZSB0aGF0IGF0IGFsbC4KKwkJCSAqLworCQkJ aWYgKCEgY292ZXJfbWFwW2kgKiBuY2xhdXNlcyArIGNdKQorCQkJCWNvbnRp bnVlOworCisJCQkvKgorCQkJICogTm93IHdlIGtub3cgd2UnbGwgdXNlIHRo aXMgY2xhdXNlIC0gZWl0aGVyIGFzIGEgY29uZGl0aW9uCisJCQkgKiBvciBh cyBhIG5ldyBjbGF1c2UgKHRoZSBlc3RpbWF0ZWQgb25lKS4gU28gbGV0J3Mg YWRkIHRoZQorCQkJICogYXR0cmlidXRlcyB0byB0aGUgYXR0bnVtcyBmcm9t IGFsbCB0aGUgY2xhdXNlcyB1c2FibGUgd2l0aAorCQkJICogdGhpcyBzdGF0 aXN0aWNzLgorCQkJICovCisJCQl0bXAgPSBibXNfdW5pb24oYWxsX2F0dG51 bXMsIGNsYXVzZV9hdHRudW1zKTsKKworCQkJLyogZnJlZSB0aGUgb2xkIGJp dG1hcCAqLworCQkJYm1zX2ZyZWUoYWxsX2F0dG51bXMpOworCQkJYWxsX2F0 dG51bXMgPSB0bXA7CisKKwkJCS8qIGxldCdzIHNlZSBpZiBpdCdzIGNvdmVy ZWQgYnkgYW55IG9mIHRoZSBwcmV2aW91cyBzdGF0cyAqLworCQkJZm9yIChq ID0gMDsgaiA8IHN0ZXA7IGorKykKKwkJCXsKKwkJCQkvKiBhbHJlYWR5IGNv dmVyZWQgYnkgdGhlIHByZXZpb3VzIHN0YXRzICovCisJCQkJaWYgKGNvdmVy X21hcFtjdXJyZW50LT5zdGF0c1tqXSAqIG5jbGF1c2VzICsgY10pCisJCQkJ CWNvdmVyZWQgPSB0cnVlOworCisJCQkJaWYgKGNvdmVyZWQpCisJCQkJCWJy ZWFrOworCQkJfQorCisJCQkvKiBpZiBhbHJlYWR5IGNvdmVyZWQsIGNvbnRp bnVlIHdpdGggdGhlIG5leHQgY2xhdXNlICovCisJCQlpZiAoY292ZXJlZCkK KwkJCXsKKwkJCQluY292ZXJlZF9jb25kaXRpb25zICs9IDE7CisJCQkJY29u dGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPSywgdGhpcyBjbGF1c2Ug aXMgY292ZXJlZCBieSB0aGlzIHN0YXRpc3RpY3MgKGFuZCBub3QgYnkKKwkJ CSAqIGFueSBvZiB0aGUgcHJldmlvdXMgb25lcykKKwkJCSAqLworCQkJbmNv dmVyZWRfY2xhdXNlcyArPSAxOworCQl9CisKKwkJLyogY2FuJ3QgaGF2ZSBt b3JlIG5ldyBjbGF1c2VzIHRoYW4gb3JpZ2luYWwgY2xhdXNlcyAqLworCQlB c3NlcnQobmNsYXVzZXMgPj0gbmNvdmVyZWRfY2xhdXNlcyk7CisJCUFzc2Vy dChuY292ZXJlZF9jbGF1c2VzID49IDApOwkvKiBtb3N0bHkgcGFyYW5vaWEg Ki8KKworCQluYXR0bnVtcyA9IGJtc19udW1fbWVtYmVycyhhbGxfYXR0bnVt cyk7CisKKwkJLyogZnJlZSBhbGwgdGhlIGJpdG1hcHNldHMgLSB3ZSBkb24n dCBuZWVkIHRoZW0gYW55bW9yZSAqLworCQlibXNfZnJlZShhbGxfYXR0bnVt cyk7CisKKwkJYWxsX2F0dG51bXMgPSBOVUxMOworCisJCS8qCisJCSAqIFNl ZSBpZiB3ZSBoYXZlIGNsYXVzZXMgY292ZXJlZCBieSB0aGlzIHN0YXRpc3Rp Y3MsIGJ1dCBub3QKKwkJICogeWV0IGNvdmVyZWQgYnkgYW55IG9mIHRoZSBw cmVjZWRpbmcgb25jZXMuCisJCSAqLworCQlmb3IgKGMgPSAwOyBjIDwgbmNv bmRpdGlvbnM7IGMrKykKKwkJeworCQkJQml0bWFwc2V0ICpjbGF1c2VfYXR0 bnVtcyA9IGNvbmRpdGlvbnNfYXR0bnVtc1tjXTsKKwkJCUJpdG1hcHNldCAq dG1wID0gTlVMTDsKKworCQkJLyoKKwkJCSAqIElmIHRoaXMgY2xhdXNlIGlz IG5vdCBjb3ZlcmVkIGJ5IHRoaXMgc3RhdHMsIHdlIGNhbid0CisJCQkgKiB1 c2UgdGhlIHN0YXRzIHRvIGVzdGltYXRlIHRoYXQgYXQgYWxsLgorCQkJICov CisJCQlpZiAoISBjb25kaXRpb25fbWFwW2kgKiBuY29uZGl0aW9ucyArIGNd KQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBjb3VudCB0aGlzIGFzIGEgY29u ZGl0aW9uICovCisJCQluY292ZXJlZF9jb25kaXRpb25zICs9IDE7CisKKwkJ CS8qCisJCQkgKiBOb3cgd2Uga25vdyB3ZSdsbCB1c2UgdGhpcyBjbGF1c2Ug LSBlaXRoZXIgYXMgYSBjb25kaXRpb24KKwkJCSAqIG9yIGFzIGEgbmV3IGNs YXVzZSAodGhlIGVzdGltYXRlZCBvbmUpLiBTbyBsZXQncyBhZGQgdGhlCisJ CQkgKiBhdHRyaWJ1dGVzIHRvIHRoZSBhdHRudW1zIGZyb20gYWxsIHRoZSBj bGF1c2VzIHVzYWJsZSB3aXRoCisJCQkgKiB0aGlzIHN0YXRpc3RpY3MuCisJ CQkgKi8KKwkJCXRtcCA9IGJtc191bmlvbihhbGxfYXR0bnVtcywgY2xhdXNl X2F0dG51bXMpOworCisJCQkvKiBmcmVlIHRoZSBvbGQgYml0bWFwICovCisJ CQlibXNfZnJlZShhbGxfYXR0bnVtcyk7CisJCQlhbGxfYXR0bnVtcyA9IHRt cDsKKwkJfQorCisJCS8qCisJCSAqIExldCdzIG1hcmsgdGhlIHN0YXRpc3Rp Y3MgYXMgJ3J1bGVkIG91dCcgLSBlaXRoZXIgd2UnbGwgdXNlCisJCSAqIGl0 IChhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwKSwgb3IgaXQncyBpbmNv bXBhdGlibGUuCisJCSAqLworCQlydWxlZF9vdXRbaV0gPSBzdGVwOworCisJ CS8qCisJCSAqIFRoZXJlIGFyZSBubyBjbGF1c2VzIHVzYWJsZSB3aXRoIHRo aXMgc3RhdGlzdGljcyAobm90IGFscmVhZHkKKwkJICogY292ZXJlZCBieSBh b21lIG9mIHRoZSBwcmV2aW91cyBzdGF0cykuCisJCSAqCisJCSAqIFNpbWls YXJseSwgaWYgdGhlIGNsYXVzZXMgb25seSB1c2UgYSBzaW5nbGUgYXR0cmli dXRlLCB3ZQorCQkgKiBjYW4ndCByZWFsbHkgdXNlIHRoYXQuCisJCSAqLwor CQlpZiAoKG5jb3ZlcmVkX2NsYXVzZXMgPT0gMCkgfHwgKG5hdHRudW1zIDwg MikpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUT0RPIE5vdCBzdXJl IGlmIGl0J3MgcG9zc2libGUgdG8gYWRkIGEgY2xhdXNlIHJlZmVyZW5jaW5n CisJCSAqICAgICAgb25seSBhdHRyaWJ1dGVzIGFscmVhZHkgY292ZXJlZCBi eSBwcmV2aW91cyBzdGF0cz8KKwkJICogICAgICBJbnRyb2R1Y2luZyBvbmx5 IHNvbWUgbmV3IGRlcGVuZGVuY3ksIG5vdCBhIG5ldworCQkgKiAgICAgIGF0 dHJpYnV0ZS4gQ291bGRuJ3QgY29tZSB1cCB3aXRoIGFuIGV4YW1wbGUsIHRo b3VnaC4KKwkJICogICAgICBNaWdodCBiZSB3b3J0aCBhZGRpbmcgc29tZSBh c3NlcnQuCisJCSAqLworCisJCS8qCisJCSAqIGdvdCBhIHN1aXRhYmxlIHN0 YXRpc3RpY3MgLSBsZXQncyB1cGRhdGUgdGhlIGN1cnJlbnQgc29sdXRpb24s CisJCSAqIG1heWJlIHVzZSBpdCBhcyB0aGUgYmVzdCBzb2x1dGlvbgorCQkg Ki8KKwkJY3VycmVudC0+bmNsYXVzZXMgKz0gbmNvdmVyZWRfY2xhdXNlczsK KwkJY3VycmVudC0+bmNvbmRpdGlvbnMgKz0gbmNvdmVyZWRfY29uZGl0aW9u czsKKwkJY3VycmVudC0+bnN0YXRzICs9IDE7CisJCWN1cnJlbnQtPnN0YXRz W3N0ZXBdID0gaTsKKworCQkvKgorCQkgKiBXZSBjYW4gbmV2ZXIgY292ZXIg bW9yZSBjbGF1c2VzLCBvciB1c2UgbW9yZSBzdGF0cyB0aGF0IHdlCisJCSAq IGFjdHVhbGx5IGhhdmUgYXQgdGhlIGJlZ2lubmluZy4KKwkJICovCisJCUFz c2VydChuY2xhdXNlcyA+PSBjdXJyZW50LT5uY2xhdXNlcyk7CisJCUFzc2Vy dChubXZzdGF0cyA+PSBjdXJyZW50LT5uc3RhdHMpOworCQlBc3NlcnQoc3Rl cCA8IG5tdnN0YXRzKTsKKworCQlpZiAoKmJlc3QgPT0gTlVMTCkKKwkJewor CQkJKmJlc3QgPSAobXZfc29sdXRpb25fdCopcGFsbG9jMChzaXplb2YobXZf c29sdXRpb25fdCkpOworCQkJKCpiZXN0KS0+c3RhdHMgPSAoaW50KilwYWxs b2MwKHNpemVvZihpbnQpKm5tdnN0YXRzKTsKKwkJCSgqYmVzdCktPm5zdGF0 cyA9IDA7CisJCQkoKmJlc3QpLT5uY2xhdXNlcyA9IDA7CisJCQkoKmJlc3Qp LT5uY29uZGl0aW9ucyA9IDA7CisJCX0KKworCQkvKiBzZWUgaWYgaXQncyBi ZXR0ZXIgdGhhbiB0aGUgY3VycmVudCAnYmVzdCcgc29sdXRpb24gKi8KKwkJ aWYgKChjdXJyZW50LT5uY2xhdXNlcyA+ICgqYmVzdCktPm5jbGF1c2VzKSB8 fAorCQkJKChjdXJyZW50LT5uY2xhdXNlcyA9PSAoKmJlc3QpLT5uY2xhdXNl cykgJiYKKwkJCSgoY3VycmVudC0+bnN0YXRzID4gKCpiZXN0KS0+bnN0YXRz KSkpKQorCQl7CisJCQkoKmJlc3QpLT5uc3RhdHMgPSBjdXJyZW50LT5uc3Rh dHM7CisJCQkoKmJlc3QpLT5uY2xhdXNlcyA9IGN1cnJlbnQtPm5jbGF1c2Vz OworCQkJKCpiZXN0KS0+bmNvbmRpdGlvbnMgPSBjdXJyZW50LT5uY29uZGl0 aW9uczsKKwkJCW1lbWNweSgoKmJlc3QpLT5zdGF0cywgY3VycmVudC0+c3Rh dHMsIG5tdnN0YXRzICogc2l6ZW9mKGludCkpOworCQl9CisKKwkJLyoKKwkJ ICogVGhlIHJlY3Vyc2lvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHdlIGhhdmVu J3QgY292ZXJlZCBhbGwgdGhlCisJCSAqIGF0dHJpYnV0ZXMgKHRoZW4gYWRk aW5nIHN0YXRzIGlzIG5vdCByZWFsbHkgcG9zc2libGUpLgorCQkgKi8KKwkJ aWYgKChzdGVwICsgMSkgPCBubXZzdGF0cykKKwkJCWNob29zZV9tdl9zdGF0 aXN0aWNzX2V4aGF1c3RpdmUocm9vdCwgc3RlcCsxLAorCQkJCQkJCQkJbm12 c3RhdHMsIG12c3RhdHMsIHN0YXRzX2F0dG51bXMsCisJCQkJCQkJCQluY2xh dXNlcywgY2xhdXNlcywgY2xhdXNlc19hdHRudW1zLAorCQkJCQkJCQkJbmNv bmRpdGlvbnMsIGNvbmRpdGlvbnMsIGNvbmRpdGlvbnNfYXR0bnVtcywKKwkJ CQkJCQkJCWNvdmVyX21hcCwgY29uZGl0aW9uX21hcCwgcnVsZWRfb3V0LAor CQkJCQkJCQkJY3VycmVudCwgYmVzdCk7CisKKwkJLyogcmVzZXQgdGhlIGxh c3Qgc3RlcCAqLworCQljdXJyZW50LT5uY2xhdXNlcyAtPSBuY292ZXJlZF9j bGF1c2VzOworCQljdXJyZW50LT5uY29uZGl0aW9ucyAtPSBuY292ZXJlZF9j b25kaXRpb25zOworCQljdXJyZW50LT5uc3RhdHMgLT0gMTsKKwkJY3VycmVu dC0+c3RhdHNbc3RlcF0gPSAwOworCisJCS8qIG1hcmsgdGhlIHN0YXRpc3Rp Y3MgYXMgdXNhYmxlIGFnYWluICovCisJCXJ1bGVkX291dFtpXSA9IC0xOwor CisJCUFzc2VydChjdXJyZW50LT5uY2xhdXNlcyA+PSAwKTsKKwkJQXNzZXJ0 KGN1cnJlbnQtPm5zdGF0cyA+PSAwKTsKKwl9CisKKwkvKiByZXNldCBhbGwg c3RhdGlzdGljcyBhcyAnaW5jb21wYXRpYmxlJyBpbiB0aGlzIHN0ZXAgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKKwkJaWYgKHJ1bGVk X291dFtpXSA9PSBzdGVwKQorCQkJcnVsZWRfb3V0W2ldID0gLTE7CisKK30K KworLyoKKyAqIEdyZWVkeSBzZWFyY2ggZm9yIGEgbXVsdGl2YXJpYXRlIHNv bHV0aW9uIC0gYSBzZXF1ZW5jZSBvZiBzdGF0aXN0aWNzIGNvdmVyaW5nCisg KiB0aGUgY2xhdXNlcy4gVGhpcyBjaG9vc2VzIHRoZSAiYmVzdCIgc3RhdGlz dGljcyBhdCBlYWNoIHN0ZXAsIHNvIHRoZQorICogcmVzdWx0aW5nIHNvbHV0 aW9uIG1heSBub3QgYmUgdGhlIGJlc3Qgc29sdXRpb24gZ2xvYmFsbHksIGJ1 dCB0aGlzIHByb2R1Y2VzCisgKiB0aGUgc29sdXRpb24gaW4gb25seSBOIHN0 ZXBzICh3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2Ygc3RhdGlzdGljcyksIHdo aWxlCisgKiB0aGUgZXhoYXVzdGl2ZSBhcHByb2FjaCBtYXkgaGF2ZSB0byB3 YWxrIHRocm91Z2ggfk4hIGNvbWJpbmF0aW9ucyAoYWx0aG91Z2gKKyAqIHNv bWUgb2YgdGhvc2UgYXJlIHRlcm1pbmF0ZWQgZWFybHkpLgorICoKKyAqIFNl ZSB0aGUgY29tbWVudHMgYXQgY2hvb3NlX212X3N0YXRpc3RpY3NfZXhoYXVz dGl2ZSgpIGFzIHRoaXMgZG9lcyB0aGUgc2FtZQorICogdGhpbmcgKGJ1dCBp biBhIGRpZmZlcmVudCB3YXkpLgorICoKKyAqIERvbid0IGNhbGwgdGhpcyBk aXJlY3RseSwgYnV0IHRocm91Z2ggY2hvb3NlX212X3N0YXRpc3RpY3MoKS4K KyAqCisgKiBUT0RPIFRoZXJlIGFyZSBwcm9iYWJseSBvdGhlciBtZXRyaWNz IHdlIG1pZ2h0IHVzZSAtIGUuZy4gdXNpbmcgbnVtYmVyIG9mCisgKiAgICAg IGNvbHVtbnMgKG51bV9jb25kX2NvbHVtbnMgLyBudW1fY292X2NvbHVtbnMp LCB3aGljaCBtaWdodCB3b3JrIGJldHRlcgorICogICAgICB3aXRoIGEgbWl4 IG9mIHNpbXBsZSBhbmQgY29tcGxleCBjbGF1c2VzLgorICoKKyAqIFRPRE8g QWxzbyB0aGUgY2hvaWNlIGF0IHRoZSB2ZXJ5IGZpcnN0IHN0ZXAgc2hvdWxk IGJlIGhhbmRsZWQgaW4gYSBzcGVjaWFsCisgKiAgICAgIHdheSwgYmVjYXVz ZSB0aGVyZSB3aWxsIGJlIDAgY29uZGl0aW9ucyBhdCB0aGF0IG1vbWVudCwg c28gdGhlcmUgbmVlZHMKKyAqICAgICAgdG8gYmUgc29tZSBvdGhlciBjcml0 ZXJpYSAtIGUuZy4gdXNpbmcgdGhlIHNpbXBsZXN0IChvciBtb3N0IGNvbXBs ZXg/KQorICogICAgICBjbGF1c2UgbWlnaHQgYmUgYSBnb29kIGlkZWEuCisg KgorICogVE9ETyBXZSBtaWdodCBhbHNvIHNlbGVjdCBtdWx0aXBsZSBzdGF0 cyB1c2luZyBkaWZmZXJlbnQgY3JpdGVyaWEsIGFuZCBicmFuY2gKKyAqICAg ICAgdGhlIHNlYXJjaC4gVGhpcyBpcyBob3dldmVyIHRyaWNreSwgYmVjYXVz ZSBpZiB3ZSBjaG9vc2UgayBzdGF0aXN0aWNzIGF0CisgKiAgICAgIGVhY2gg c3RlcCwgd2UgZ2V0IGteTiBicmFuY2hlcyB0byB3YWxrIHRocm91Z2ggKHdp dGggTiBzdGVwcykuIFRoYXQncworICogICAgICBub3QgcmVhbGx5IGdvb2Qg d2l0aCBsYXJnZSBudW1iZXIgb2Ygc3RhdHMgKHlldCBiZXR0ZXIgdGhhbiBl eGhhdXN0aXZlCisgKiAgICAgIHNlYXJjaCkuCisgKi8KK3N0YXRpYyB2b2lk CitjaG9vc2VfbXZfc3RhdGlzdGljc19ncmVlZHkoUGxhbm5lckluZm8gKnJv b3QsIGludCBzdGVwLAorCQkJCQlpbnQgbm12c3RhdHMsIE1WU3RhdGlzdGlj SW5mbyAqbXZzdGF0cywgQml0bWFwc2V0ICoqIHN0YXRzX2F0dG51bXMsCisJ CQkJCWludCBuY2xhdXNlcywgTm9kZSAqKiBjbGF1c2VzLCBCaXRtYXBzZXQg KiogY2xhdXNlc19hdHRudW1zLAorCQkJCQlpbnQgbmNvbmRpdGlvbnMsIE5v ZGUgKiogY29uZGl0aW9ucywgQml0bWFwc2V0ICoqIGNvbmRpdGlvbnNfYXR0 bnVtcywKKwkJCQkJYm9vbCAqY292ZXJfbWFwLCBib29sICpjb25kaXRpb25f bWFwLCBpbnQgKnJ1bGVkX291dCwKKwkJCQkJbXZfc29sdXRpb25fdCAqY3Vy cmVudCwgbXZfc29sdXRpb25fdCAqKmJlc3QpCit7CisJaW50IGksIGo7CisJ aW50IGJlc3Rfc3RhdCA9IC0xOworCWRvdWJsZSBnYWluLCBtYXhfZ2FpbiA9 IC0xLjA7CisKKwkvKgorCSAqIEJpdG1hcCB0cmFja2luZyB3aGljaCBjbGF1 c2VzIGFyZSBhbHJlYWR5IGNvdmVyZWQgKGJ5IHRoZSBwcmV2aW91cworCSAq IHN0YXRpc3RpY3MpIGFuZCBtYXkgdGh1cyBzZXJ2ZSBvbmx5IGFzIGEgY29u ZGl0aW9uIGluIHRoaXMgc3RlcC4KKwkgKi8KKwlib29sICpjb3ZlcmVkX2Ns YXVzZXMgPSAoYm9vbCopcGFsbG9jMChuY2xhdXNlcyk7CisKKwkvKgorCSAq IE51bWJlciBvZiBjbGF1c2VzIGFuZCBjb2x1bW5zIGNvdmVyZWQgYnkgZWFj aCBzdGF0aXN0aWNzIC0gdGhpcworCSAqIGluY2x1ZGVzIGJvdGggY29uZGl0 aW9ucyBhbmQgY2xhdXNlcyBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzIGZv cgorCSAqIHRoZSBmaXJzdCB0aW1lLiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMg bWF5IGNvdW50IHNvbWUgY29sdW1ucworCSAqIHJlcGVhdGVkbHkgLSBpZiBh IGNvbHVtbiBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgY2xhdXNlcywgaXQgd2ls bAorCSAqIGJlIGNvdW50ZWQgb25jZSBmb3IgZWFjaCBjbGF1c2UgKGNvdmVy ZWQgYnkgdGhlIHN0YXRpc3RpY3MpLgorCSAqIFNvIHdpdGggdHdvIGNsYXVz ZXMgWyhhPTEgT1IgYj0yKSwoYTwyIE9SIGM+MSldIHRoZSBjb2x1bW4gImEi CisJICogd2lsbCBiZSBjb3VudGVkIHR3aWNlIChpZiBib3RoIGNsYXVzZXMg YXJlIGNvdmVyZWQpLgorCSAqCisJICogVGhlIHZhbHVlcyBmb3IgcmVkdWRl ZCBzdGF0aXN0aWNzICh0aGF0IGNhbid0IGJlIGFwcGxpZWQpIGFyZQorCSAq IG5vdCBjb21wdXRlZCwgYmVjYXVzZSB0aGF0J2QgYmUgcG9pbnRsZXNzLgor CSAqLworCWludAkqbnVtX2Nvdl9jbGF1c2VzCT0gKGludCopcGFsbG9jMChz aXplb2YoaW50KSAqIG5tdnN0YXRzKTsKKwlpbnQJKm51bV9jb3ZfY29sdW1u cwk9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGludCkgKiBubXZzdGF0cyk7CisK KwkvKgorCSAqIFNhbWUgYXMgYWJvdmUsIGJ1dCB0aGlzIG9ubHkgaW5jbHVk ZXMgY2xhdXNlcyB0aGF0IGFyZSBhbHJlYWR5CisJICogY292ZXJlZCBieSB0 aGUgcHJldmlvdXMgc3RhdHMgKGFuZCB0aGUgY3VycmVudCBvbmUpLgorCSAq LworCWludAkqbnVtX2NvbmRfY2xhdXNlcwk9IChpbnQqKXBhbGxvYzAoc2l6 ZW9mKGludCkgKiBubXZzdGF0cyk7CisJaW50CSpudW1fY29uZF9jb2x1bW5z CT0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5tdnN0YXRzKTsKKwor CS8qCisJICogTnVtYmVyIG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2ggY2xhdXNl LgorCSAqCisJICogVE9ETyBNaWdodCBiZSBjb21wdXRlZCBpbiBjaG9vc2Vf bXZfc3RhdGlzdGljcygpIGFuZCB0aGVuIHBhc3NlZAorCSAqICAgICAgaGVy ZSwgYnV0IHRoZW4gdGhlIGZ1bmN0aW9uIHdvdWxkIG5vdCBoYXZlIHRoZSBz YW1lIHNpZ25hdHVyZQorCSAqICAgICAgYXMgX2V4aGF1c3RpdmUoKS4KKwkg Ki8KKwlpbnQgKmF0dG51bV9jb3VudHMgPSAoaW50KilwYWxsb2MwKHNpemVv ZihpbnQpICogbmNsYXVzZXMpOworCWludCAqYXR0bnVtX2NvbmRfY291bnRz ID0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5jb25kaXRpb25zKTsK KworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwlBc3NlcnQoYmVzdCAh PSBOVUxMKTsKKwlBc3NlcnQoKHN0ZXAgPT0gMCAmJiBjdXJyZW50ID09IE5V TEwpIHx8IChzdGVwID4gMCAmJiBjdXJyZW50ICE9IE5VTEwpKTsKKworCS8q IGNvbXB1dGUgYXR0cmlidXRlcyAoY29sdW1ucykgZm9yIGVhY2ggY2xhdXNl ICovCisJZm9yIChpID0gMDsgaSA8IG5jbGF1c2VzOyBpKyspCisJCWF0dG51 bV9jb3VudHNbaV0gPSBibXNfbnVtX21lbWJlcnMoY2xhdXNlc19hdHRudW1z W2ldKTsKKworCS8qIGNvbXB1dGUgYXR0cmlidXRlcyAoY29sdW1ucykgZm9y IGVhY2ggY29uZGl0aW9uICovCisJZm9yIChpID0gMDsgaSA8IG5jb25kaXRp b25zOyBpKyspCisJCWF0dG51bV9jb25kX2NvdW50c1tpXSA9IGJtc19udW1f bWVtYmVycyhjb25kaXRpb25zX2F0dG51bXNbaV0pOworCisJLyogc2VlIHdo aWNoIGNsYXVzZXMgYXJlIGFscmVhZHkgY292ZXJlZCBhdCB0aGlzIHBvaW50 IChieSBwcmV2aW91cyBzdGF0cykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3Rl cDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbmNsYXVzZXM7IGorKykKKwkJ CWNvdmVyZWRfY2xhdXNlc1tqXSB8PSAoY292ZXJfbWFwW2N1cnJlbnQtPnN0 YXRzW2ldICogbmNsYXVzZXMgKyBqXSk7CisKKwkvKiB3aGljaCByZW1haW5p bmcgc3RhdGlzdGljcyBjb3ZlcnMgbW9zdCBjbGF1c2VzIC8gdXNlcyBtb3N0 IGNvbmRpdGlvbnM/ICovCisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBp KyspCisJeworCQlCaXRtYXBzZXQgKmF0dG51bXNfY292ZXJlZCA9IE5VTEw7 CisJCUJpdG1hcHNldCAqYXR0bnVtc19jb25kaXRpb25zID0gTlVMTDsKKwor CQkvKiBza2lwIHN0YXRzIHRoYXQgYXJlIGFscmVhZHkgcnVsZWQgb3V0IChl aXRoZXIgdXNlZCBvciBpbmFwcGxpY2FibGUpICovCisJCWlmIChydWxlZF9v dXRbaV0gIT0gLTEpCisJCQljb250aW51ZTsKKworCQkvKiBjb3VudCBjb3Zl cmVkIGNsYXVzZXMgYW5kIGNvbmRpdGlvbnMgKGZvciB0aGUgc3RhdGlzdGlj cykgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5jbGF1c2VzOyBqKyspCisJCXsK KwkJCWlmIChjb3Zlcl9tYXBbaSAqIG5jbGF1c2VzICsgal0pCisJCQl7CisJ CQkJQml0bWFwc2V0ICphdHRudW1zX25ldworCQkJCQk9IGJtc191bmlvbihh dHRudW1zX2NvdmVyZWQsIGNsYXVzZXNfYXR0bnVtc1tqXSk7CisKKwkJCQkv KiBnZXQgcmlkIG9mIHRoZSBvbGQgYml0bWFwIGFuZCBrZWVwIHRoZSB1bmlm aWVkIHJlc3VsdCAqLworCQkJCWJtc19mcmVlKGF0dG51bXNfY292ZXJlZCk7 CisJCQkJYXR0bnVtc19jb3ZlcmVkID0gYXR0bnVtc19uZXc7CisKKwkJCQlu dW1fY292X2NsYXVzZXNbaV0gKz0gMTsKKwkJCQludW1fY292X2NvbHVtbnNb aV0gKz0gYXR0bnVtX2NvdW50c1tqXTsKKworCQkJCS8qIGlzIHRoZSBjbGF1 c2UgYWxyZWFkeSBjb3ZlcmVkIChpLmUuIGEgY29uZGl0aW9uKT8gKi8KKwkJ CQlpZiAoY292ZXJlZF9jbGF1c2VzW2pdKQorCQkJCXsKKwkJCQkJbnVtX2Nv bmRfY2xhdXNlc1tpXSArPSAxOworCQkJCQludW1fY29uZF9jb2x1bW5zW2ld ICs9IGF0dG51bV9jb3VudHNbal07CisJCQkJCWF0dG51bXNfbmV3ID0gYm1z X3VuaW9uKGF0dG51bXNfY29uZGl0aW9ucywKKwkJCQkJCQkJCQkJY2xhdXNl c19hdHRudW1zW2pdKTsKKworCQkJCQlibXNfZnJlZShhdHRudW1zX2NvbmRp dGlvbnMpOworCQkJCQlhdHRudW1zX2NvbmRpdGlvbnMgPSBhdHRudW1zX25l dzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBpZiBhbGwgY292ZXJlZCBj bGF1c2VzIGFyZSBjb3ZlcmVkIGJ5IHByZXYgc3RhdHMgKHRodXMgY29uZGl0 aW9ucykgKi8KKwkJaWYgKG51bV9jb3ZfY2xhdXNlc1tpXSA9PSBudW1fY29u ZF9jbGF1c2VzW2ldKQorCQkJcnVsZWRfb3V0W2ldID0gc3RlcDsKKworCQkv KiBzYW1lIGlmIHRoZXJlIGFyZSBubyBuZXcgYXR0cmlidXRlcyAqLworCQll bHNlIGlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVtc19jb25kaXRpb25zKSA9 PSBibXNfbnVtX21lbWJlcnMoYXR0bnVtc19jb3ZlcmVkKSkKKwkJCXJ1bGVk X291dFtpXSA9IHN0ZXA7CisKKwkJYm1zX2ZyZWUoYXR0bnVtc19jb3ZlcmVk KTsKKwkJYm1zX2ZyZWUoYXR0bnVtc19jb25kaXRpb25zKTsKKworCQkvKiBp ZiB0aGUgc3RhdGlzdGljcyBpcyBpbmFwcGxpY2FibGUsIHRyeSB0aGUgbmV4 dCBvbmUgKi8KKwkJaWYgKHJ1bGVkX291dFtpXSAhPSAtMSkKKwkJCWNvbnRp bnVlOworCisJCS8qIG5vdyBsZXQncyB3YWxrIHRocm91Z2ggY29uZGl0aW9u cyBhbmQgY291bnQgdGhlIGNvdmVyZWQgKi8KKwkJZm9yIChqID0gMDsgaiA8 IG5jb25kaXRpb25zOyBqKyspCisJCXsKKwkJCWlmIChjb25kaXRpb25fbWFw W2kgKiBuY29uZGl0aW9ucyArIGpdKQorCQkJeworCQkJCW51bV9jb25kX2Ns YXVzZXNbaV0gKz0gMTsKKwkJCQludW1fY29uZF9jb2x1bW5zW2ldICs9IGF0 dG51bV9jb25kX2NvdW50c1tqXTsKKwkJCX0KKwkJfQorCisJCS8qIG90aGVy d2lzZSBzZWUgaWYgdGhpcyBpbXByb3ZlcyB0aGUgaW50ZXJlc3RpbmcgbWV0 cmljcyAqLworCQlnYWluID0gbnVtX2NvbmRfY29sdW1uc1tpXSAvIChkb3Vi bGUpbnVtX2Nvdl9jb2x1bW5zW2ldOworCisJCWlmIChnYWluID4gbWF4X2dh aW4pCisJCXsKKwkJCW1heF9nYWluID0gZ2FpbjsKKwkJCWJlc3Rfc3RhdCA9 IGk7CisJCX0KKwl9CisKKwkvKgorCSAqIEhhdmUgd2UgZm91bmQgYSBzdWl0 YWJsZSBzdGF0aXN0aWNzPyBBZGQgaXQgdG8gdGhlIHNvbHV0aW9uIGFuZAor CSAqIHRyeSBuZXh0IHN0ZXAuCisJICovCisJaWYgKGJlc3Rfc3RhdCAhPSAt MSkKKwl7CisJCS8qIG1hcmsgdGhlIHN0YXRpc3RpY3MsIHNvIHRoYXQgd2Ug c2tpcCBpdCBpbiBuZXh0IHN0ZXBzICovCisJCXJ1bGVkX291dFtiZXN0X3N0 YXRdID0gc3RlcDsKKworCQkvKiBhbGxvY2F0ZSBjdXJyZW50IHNvbHV0aW9u IGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoY3VycmVudCA9PSBOVUxMKQorCQl7 CisJCQljdXJyZW50ID0gKG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6ZW9m KG12X3NvbHV0aW9uX3QpKTsKKwkJCWN1cnJlbnQtPnN0YXRzID0gKGludCop cGFsbG9jMChzaXplb2YoaW50KSpubXZzdGF0cyk7CisJCQljdXJyZW50LT5u c3RhdHMgPSAwOworCQkJY3VycmVudC0+bmNsYXVzZXMgPSAwOworCQkJY3Vy cmVudC0+bmNvbmRpdGlvbnMgPSAwOworCQl9CisKKwkJY3VycmVudC0+bmNs YXVzZXMgKz0gbnVtX2Nvdl9jbGF1c2VzW2Jlc3Rfc3RhdF07CisJCWN1cnJl bnQtPm5jb25kaXRpb25zICs9IG51bV9jb25kX2NsYXVzZXNbYmVzdF9zdGF0 XTsKKwkJY3VycmVudC0+c3RhdHNbc3RlcF0gPSBiZXN0X3N0YXQ7CisJCWN1 cnJlbnQtPm5zdGF0cysrOworCisJCWlmICgqYmVzdCA9PSBOVUxMKQorCQl7 CisJCQkoKmJlc3QpID0gKG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6ZW9m KG12X3NvbHV0aW9uX3QpKTsKKwkJCSgqYmVzdCktPm5zdGF0cyA9IGN1cnJl bnQtPm5zdGF0czsKKwkJCSgqYmVzdCktPm5jbGF1c2VzID0gY3VycmVudC0+ bmNsYXVzZXM7CisJCQkoKmJlc3QpLT5uY29uZGl0aW9ucyA9IGN1cnJlbnQt Pm5jb25kaXRpb25zOworCisJCQkoKmJlc3QpLT5zdGF0cyA9IChpbnQqKXBh bGxvYzAoc2l6ZW9mKGludCkqbm12c3RhdHMpOworCQkJbWVtY3B5KCgqYmVz dCktPnN0YXRzLCBjdXJyZW50LT5zdGF0cywgbm12c3RhdHMgKiBzaXplb2Yo aW50KSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBzZWUgaWYgdGhpcyBp cyBhIGJldHRlciBzb2x1dGlvbiAqLworCQkJZG91YmxlIGN1cnJlbnRfZ2Fp biA9IChkb3VibGUpY3VycmVudC0+bmNvbmRpdGlvbnMgLyBjdXJyZW50LT5u Y2xhdXNlczsKKwkJCWRvdWJsZSBiZXN0X2dhaW4gICAgPSAoZG91YmxlKSgq YmVzdCktPm5jb25kaXRpb25zIC8gKCpiZXN0KS0+bmNsYXVzZXM7CisKKwkJ CWlmICgoY3VycmVudF9nYWluID4gYmVzdF9nYWluKSB8fAorCQkJCSgoY3Vy cmVudF9nYWluID09IGJlc3RfZ2FpbikgJiYgKGN1cnJlbnQtPm5zdGF0cyA8 ICgqYmVzdCktPm5zdGF0cykpKQorCQkJeworCQkJCSgqYmVzdCktPm5zdGF0 cyA9IGN1cnJlbnQtPm5zdGF0czsKKwkJCQkoKmJlc3QpLT5uY2xhdXNlcyA9 IGN1cnJlbnQtPm5jbGF1c2VzOworCQkJCSgqYmVzdCktPm5jb25kaXRpb25z ID0gY3VycmVudC0+bmNvbmRpdGlvbnM7CisJCQkJbWVtY3B5KCgqYmVzdCkt PnN0YXRzLCBjdXJyZW50LT5zdGF0cywgbm12c3RhdHMgKiBzaXplb2YoaW50 KSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUaGUgcmVjdXJzaW9uIG9u bHkgbWFrZXMgc2Vuc2UgaWYgd2UgaGF2ZW4ndCBjb3ZlcmVkIGFsbCB0aGUK KwkJICogYXR0cmlidXRlcyAodGhlbiBhZGRpbmcgc3RhdHMgaXMgbm90IHJl YWxseSBwb3NzaWJsZSkuCisJCSovCisJCWlmICgoc3RlcCArIDEpIDwgbm12 c3RhdHMpCisJCQljaG9vc2VfbXZfc3RhdGlzdGljc19ncmVlZHkocm9vdCwg c3RlcCsxLAorCQkJCQkJCQkJbm12c3RhdHMsIG12c3RhdHMsIHN0YXRzX2F0 dG51bXMsCisJCQkJCQkJCQluY2xhdXNlcywgY2xhdXNlcywgY2xhdXNlc19h dHRudW1zLAorCQkJCQkJCQkJbmNvbmRpdGlvbnMsIGNvbmRpdGlvbnMsIGNv bmRpdGlvbnNfYXR0bnVtcywKKwkJCQkJCQkJCWNvdmVyX21hcCwgY29uZGl0 aW9uX21hcCwgcnVsZWRfb3V0LAorCQkJCQkJCQkJY3VycmVudCwgYmVzdCk7 CisKKwkJLyogcmVzZXQgdGhlIGxhc3Qgc3RlcCAqLworCQljdXJyZW50LT5u Y2xhdXNlcyAtPSBudW1fY292X2NsYXVzZXNbYmVzdF9zdGF0XTsKKwkJY3Vy cmVudC0+bmNvbmRpdGlvbnMgLT0gbnVtX2NvbmRfY2xhdXNlc1tiZXN0X3N0 YXRdOworCQljdXJyZW50LT5uc3RhdHMgLT0gMTsKKwkJY3VycmVudC0+c3Rh dHNbc3RlcF0gPSAwOworCisJCS8qIG1hcmsgdGhlIHN0YXRpc3RpY3MgYXMg dXNhYmxlIGFnYWluICovCisJCXJ1bGVkX291dFtiZXN0X3N0YXRdID0gLTE7 CisJfQorCisJLyogcmVzZXQgYWxsIHN0YXRpc3RpY3MgZWxpbWluYXRlZCBp biB0aGlzIHN0ZXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkr KykKKwkJaWYgKHJ1bGVkX291dFtpXSA9PSBzdGVwKQorCQkJcnVsZWRfb3V0 W2ldID0gLTE7CisKKwkvKiBmcmVlIGV2ZXJ5dGhpbmcgYWxsb2NhdGVkIGlu IHRoaXMgc3RlcCAqLworCXBmcmVlKGNvdmVyZWRfY2xhdXNlcyk7CisJcGZy ZWUoYXR0bnVtX2NvdW50cyk7CisJcGZyZWUobnVtX2Nvdl9jbGF1c2VzKTsK KwlwZnJlZShudW1fY292X2NvbHVtbnMpOworCXBmcmVlKG51bV9jb25kX2Ns YXVzZXMpOworCXBmcmVlKG51bV9jb25kX2NvbHVtbnMpOworfQorCisvKgor ICogUmVtb3ZlIGNsYXVzZXMgbm90IGNvdmVyZWQgYnkgYW55IG9mIHRoZSBh dmFpbGFibGUgc3RhdGlzdGljcworICoKKyAqIFRoaXMgaGVscHMgdXMgdG8g cmVkdWNlIHRoZSBhbW91bnQgb2Ygd29yayBkb25lIGluIGNob29zZV9tdl9z dGF0aXN0aWNzKCkKKyAqIGJ5IG5vdCBoYXZpbmcgdG8gZGVhbCB3aXRoIGNs YXVzZXMgdGhhdCBjYW4ndCBwb3NzaWJseSBiZSB1c2VmdWwuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK2ZpbHRlcl9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290 LCBJbmRleCByZWxpZCwgaW50IHR5cGUsCisJCQkgICBMaXN0ICpzdGF0cywg TGlzdCAqY2xhdXNlcywgQml0bWFwc2V0ICoqYXR0bnVtcykKK3sKKwlMaXN0 Q2VsbCAgICpjOworCUxpc3RDZWxsICAgKnM7CisKKwkvKiByZXN1bHRzIChs aXN0IG9mIGNvbXBhdGlibGUgY2xhdXNlcywgYXR0bnVtcykgKi8KKwlMaXN0 CSAgICpyY2xhdXNlcyA9IE5JTDsKKworCWZvcmVhY2ggKGMsIGNsYXVzZXMp CisJeworCQlOb2RlICpjbGF1c2UgPSAoTm9kZSopbGZpcnN0KGMpOworCQlC aXRtYXBzZXQgKmNsYXVzZV9hdHRudW1zID0gTlVMTDsKKworCQkvKgorCQkg KiBXZSBkbyBhc3N1bWUgdGhhdCB0aGFua3MgdG8gcHJldmlvdXMgY2hlY2tz LCB3ZSBzaG91bGQgbm90IHJ1biBpbnRvCisJCSAqIGNsYXVzZXMgdGhhdCBh cmUgaW5jb21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzIGhlcmUu IFdlIGFsc28KKwkJICogbmVlZCB0byBjb2xsZWN0IHRoZSBhdHRudW1zIGZv ciB0aGUgY2xhdXNlLgorCQkgKgorCQkgKiBYWFggTWF5YmUgdHVybiB0aGlz IGludG8gYW4gYXNzZXJ0PworCQkgKi8KKwkJaWYgKCEgY2xhdXNlX2lzX212 X2NvbXBhdGlibGUoY2xhdXNlLCByZWxpZCwgJmNsYXVzZV9hdHRudW1zLCB0 eXBlKSkKKwkJCQllbG9nKEVSUk9SLCAic2hvdWxkIG5vdCBnZXQgbm9uLW12 LWNvbXBhdGlibGUgY2x1YXNlIik7CisKKwkJLyogSXMgdGhlcmUgYSBtdWx0 aXZhcmlhdGUgc3RhdGlzdGljcyBjb3ZlcmluZyB0aGUgY2xhdXNlPyAqLwor CQlmb3JlYWNoIChzLCBzdGF0cykKKwkJeworCQkJaW50IGssIG1hdGNoZXMg PSAwOworCQkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0gKE1WU3RhdGlzdGlj SW5mbyAqKWxmaXJzdChzKTsKKworCQkJLyogc2tpcCBzdGF0aXN0aWNzIG5v dCBtYXRjaGluZyB0aGUgcmVxdWlyZWQgdHlwZSAqLworCQkJaWYgKCEgc3Rh dHNfdHlwZV9tYXRjaGVzKHN0YXQsIHR5cGUpKQorCQkJCWNvbnRpbnVlOwor CisJCQkvKgorCQkJICogc2VlIGlmIGFsbCBjbGF1c2UgYXR0cmlidXRlcyBh cmUgY292ZXJlZCBieSB0aGUgc3RhdGlzdGljCisJCQkgKgorCQkJICogV2Un bGwgZG8gdGhhdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLCBpLmUuIHdl J2xsIHNlZSBob3cgbWFueQorCQkJICogYXR0cmlidXRlcyBvZiB0aGUgc3Rh dGlzdGljIGFyZSByZWZlcmVuY2VkIGluIHRoZSBjbGF1c2UsIGFuZCB0aGVu CisJCQkgKiBjb21wYXJlIHRoZSBjb3VudHMuCisJCQkgKi8KKwkJCWZvciAo ayA9IDA7IGsgPCBzdGF0LT5zdGFrZXlzLT5kaW0xOyBrKyspCisJCQkJaWYg KGJtc19pc19tZW1iZXIoc3RhdC0+c3Rha2V5cy0+dmFsdWVzW2tdLCBjbGF1 c2VfYXR0bnVtcykpCisJCQkJCW1hdGNoZXMgKz0gMTsKKworCQkJLyoKKwkJ CSAqIElmIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpcyBlcXVhbCB0byBhdHRy aWJ1dGVzIHJlZmVyZW5jZWQgYnkgdGhlCisJCQkgKiBjbGF1c2UsIHRoZW4g dGhlIGNsYXVzZSBpcyBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWMuCisJCQkg Ki8KKwkJCWlmIChibXNfbnVtX21lbWJlcnMoY2xhdXNlX2F0dG51bXMpID09 IG1hdGNoZXMpCisJCQl7CisJCQkJKmF0dG51bXMgPSBibXNfdW5pb24oKmF0 dG51bXMsIGNsYXVzZV9hdHRudW1zKTsKKwkJCQlyY2xhdXNlcyA9IGxhcHBl bmQocmNsYXVzZXMsIGNsYXVzZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K KworCQlibXNfZnJlZShjbGF1c2VfYXR0bnVtcyk7CisJfQorCisJLyogd2Ug Y2FuJ3QgaGF2ZSBtb3JlIGNvbXBhdGlibGUgY29uZGl0aW9ucyB0aGFuIHNv dXJjZSBjb25kaXRpb25zICovCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNsYXVz ZXMpID49IGxpc3RfbGVuZ3RoKHJjbGF1c2VzKSk7CisKKwlyZXR1cm4gcmNs YXVzZXM7Cit9CisKKy8qCisgKiBSZW1vdmUgc3RhdGlzdGljcyBub3QgY292 ZXJpbmcgYW55IG5ldyBjbGF1c2VzCisgKgorICogU3RhdGlzdGljcyBub3Qg Y292ZXJpbmcgYW55IG5ldyBjbGF1c2VzIChjb25kaXRpb25zIGRvbid0IGNv dW50KSBhcmUgbm90CisgKiByZWFsbHkgdXNlZnVsLCBzbyBsZXQncyBpZ25v cmUgdGhlbS4gQWxzbywgd2UgbmVlZCB0aGUgc3RhdGlzdGljcyB0bworICog cmVmZXJlbmNlIGF0IGxlYXN0IHR3byBkaWZmZXJlbnQgYXR0cmlidXRlcyAo Ym90aCBpbiBjb25kaXRpb25zIGFuZCBjbGF1c2VzCisgKiBjb21iaW5lZCks IGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpbiB0aGUgY2xhdXNlcyBhbG9u ZS4KKyAqCisgKiBUaGlzIGNoZWNrIG1pZ2h0IGJlIG1hZGUgbW9yZSBzdHJp Y3QgYnkgY2hlY2tpbmcgYWdhaW5zdCBpbmRpdmlkdWFsIGNsYXVzZXMsCisg KiBiZWNhdXNlIGJ5IHVzaW5nIHRoZSBiaXRtYXBzZXRzIG9mIGFsbCBhdHRu dW1zIHdlIG1heSBhY3R1YWxseSB1c2UgYXR0bnVtcworICogZnJvbSBjbGF1 c2VzIHRoYXQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzLiBG b3IgZXhhbXBsZSwgd2UgbWF5CisgKiBoYXZlIGEgY29uZGl0aW9uCisgKgor ICogICAgKGE9MSBBTkQgYj0yKQorICoKKyAqIGFuZCBhIG5ldyBjbGF1c2UK KyAqCisgKiAgICAoYz0xIEFORCBkPTEpCisgKgorICogV2l0aCBvbmx5IGJp dG1hcHNldHMsIHN0YXRpc3RpY3Mgb24gW2IsY10gd2lsbCBwYXNzIHRocm91 Z2ggdGhpcyAoYXNzdW1pbmcKKyAqIHRoZXJlIGFyZSBzb21lIHN0YXRpc3Rp Y3MgY292ZXJpbmcgYm90aCBjbGFzZXMpLgorICoKKyAqIFBhcmFtZXRlcnM6 CisgKgorICogICAgIHN0YXRzICAgICAgIC0gbGlzdCBvZiBzdGF0aXN0aWNz IHRvIGZpbHRlcgorICogICAgIG5ld19hdHRudW1zIC0gYXR0bnVtcyByZWZl cmVuY2VkIGluIG5ldyBjbGF1c2VzCisgKiAgICAgYWxsX2F0dG51bXMgLSBh dHRudW1zIHJlZmVyZW5jZWQgYnkgY29udGlkaW9ucyBhbmQgbmV3IGNsYXVz ZXMgY29tYmluZWQKKyAqCisgKiBSZXR1cm5zIGZpbHRlcmVkIGxpc3Qgb2Yg c3RhdGlzdGljcy4KKyAqCisgKiBUT0RPIERvIHRoZSBtb3JlIHN0cmljdCBj aGVjaywgaS5lLiB3YWxrIHRocm91Z2ggaW5kaXZpZHVhbCBjbGF1c2VzIGFu ZAorICogICAgICBjb25kaXRpb25zIGFuZCBvbmx5IHVzZSB0aG9zZSBjb3Zl cmVkIGJ5IHRoZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgTGlzdCAqCitm aWx0ZXJfc3RhdHMoTGlzdCAqc3RhdHMsIEJpdG1hcHNldCAqbmV3X2F0dG51 bXMsIEJpdG1hcHNldCAqYWxsX2F0dG51bXMpCit7CisJTGlzdENlbGwgICAq czsKKwlMaXN0CSAgICpzdGF0c19maWx0ZXJlZCA9IE5JTDsKKworCWZvcmVh Y2ggKHMsIHN0YXRzKQorCXsKKwkJaW50IGs7CisJCWludCBtYXRjaGVzX25l dyA9IDAsCisJCQltYXRjaGVzX2FsbCA9IDA7CisKKwkJTVZTdGF0aXN0aWNJ bmZvCSpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChzKTsKKwor CQkvKiBzZWUgaG93IG1hbnkgYXR0cmlidXRlcyB0aGUgc3RhdGlzdGljcyBj b3ZlcnMgKi8KKwkJZm9yIChrID0gMDsgayA8IHN0YXQtPnN0YWtleXMtPmRp bTE7IGsrKykKKwkJeworCQkJLyogYXR0cmlidXRlcyBmcm9tIG5ldyBjbGF1 c2VzICovCisJCQlpZiAoYm1zX2lzX21lbWJlcihzdGF0LT5zdGFrZXlzLT52 YWx1ZXNba10sIG5ld19hdHRudW1zKSkKKwkJCQltYXRjaGVzX25ldyArPSAx OworCisJCQkvKiBhdHRyaWJ1dGVzIGZyb20gb25kaXRpb25zICovCisJCQlp ZiAoYm1zX2lzX21lbWJlcihzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10sIGFs bF9hdHRudW1zKSkKKwkJCQltYXRjaGVzX2FsbCArPSAxOworCQl9CisKKwkJ LyogY2hlY2sgd2UgaGF2ZSBlbm91Z2ggYXR0cmlidXRlcyBmb3IgdGhpcyBz dGF0aXN0aWNzICovCisJCWlmICgobWF0Y2hlc19uZXcgPj0gMSkgJiYgKG1h dGNoZXNfYWxsID49IDIpKQorCQkJc3RhdHNfZmlsdGVyZWQgPSBsYXBwZW5k KHN0YXRzX2ZpbHRlcmVkLCBzdGF0KTsKKwl9CisKKwkvKiB3ZSBjYW4ndCBo YXZlIG1vcmUgdXNlZnVsIHN0YXRzIHRoYW4gd2UgaGFkIG9yaWdpbmFsbHkg Ki8KKwlBc3NlcnQobGlzdF9sZW5ndGgoc3RhdHMpID49IGxpc3RfbGVuZ3Ro KHN0YXRzX2ZpbHRlcmVkKSk7CisKKwlyZXR1cm4gc3RhdHNfZmlsdGVyZWQ7 Cit9CisKK3N0YXRpYyBNVlN0YXRpc3RpY0luZm8gKgorbWFrZV9zdGF0c19h cnJheShMaXN0ICpzdGF0cywgaW50ICpubXZzdGF0cykKK3sKKwlpbnQgaTsK KwlMaXN0Q2VsbCAgICpsOworCisJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRz ID0gTlVMTDsKKwkqbm12c3RhdHMgPSBsaXN0X2xlbmd0aChzdGF0cyk7CiAK LQkvKiBFdmFsdWF0ZSB0aGUgTUNWIGZpcnN0LiAqLwotCXMxID0gY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMsIG12 c3RhdHMsCi0JCQkJCQkJCQkJICAgJmZ1bGxtYXRjaCwgJm1jdl9sb3cpOwor CW12c3RhdHMKKwkJPSAoTVZTdGF0aXN0aWNJbmZvKilwYWxsb2MwKCgqbm12 c3RhdHMpICogc2l6ZW9mKE1WU3RhdGlzdGljSW5mbykpOwogCi0JLyoKLQkg KiBJZiB3ZSBnb3QgYSBmdWxsIGVxdWFsaXR5IG1hdGNoIG9uIHRoZSBNQ1Yg bGlzdCwgd2UncmUgZG9uZSAoYW5kCi0JICogdGhlIGVzdGltYXRlIGlzIHBy ZXR0eSBnb29kKS4KLQkgKi8KLQlpZiAoZnVsbG1hdGNoICYmIChzMSA+IDAu MCkpCi0JCXJldHVybiBzMTsKKwlpID0gMDsKKwlmb3JlYWNoIChsLCBzdGF0 cykKKwl7CisJCU1WU3RhdGlzdGljSW5mbwkqc3RhdCA9IChNVlN0YXRpc3Rp Y0luZm8gKilsZmlyc3QobCk7CisJCW1lbWNweSgmbXZzdGF0c1tpKytdLCBz dGF0LCBzaXplb2YoTVZTdGF0aXN0aWNJbmZvKSk7CisJfQogCi0JLyogVE9E TyBpZiAoZnVsbG1hdGNoKSB3aXRob3V0IG1hdGNoaW5nIE1DViBpdGVtLCB1 c2UgdGhlIG1jdl9sb3cKLQkgKiAgICAgIHNlbGVjdGl2aXR5IGFzIHVwcGVy IGJvdW5kICovCisJcmV0dXJuIG12c3RhdHM7Cit9CiAKLQlzMiA9IGNsYXVz ZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKHJvb3QsIGNsYXVzZXMs IG12c3RhdHMpOworc3RhdGljIEJpdG1hcHNldCAqKgorbWFrZV9zdGF0c19h dHRudW1zKE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgaW50IG5tdnN0YXRz KQoreworCWludAkJCWksIGo7CisJQml0bWFwc2V0ICoqc3RhdHNfYXR0bnVt cyA9IE5VTEw7CiAKLQkvKiBUT0RPIGNsYW1wIHRvIDw9IDEuMCAob3IgbW9y ZSBzdHJpY3RseSwgd2hlbiBwb3NzaWJsZSkgKi8KLQlyZXR1cm4gczEgKyBz MjsKKwlBc3NlcnQobm12c3RhdHMgPiAwKTsKKworCS8qIGJ1aWxkIGJpdG1h cHMgb2YgYXR0bnVtcyBmb3IgdGhlIHN0YXRzIChlYXNpZXIgdG8gY29tcGFy ZSkgKi8KKwlzdGF0c19hdHRudW1zID0gKEJpdG1hcHNldCAqKilwYWxsb2Mw KG5tdnN0YXRzICogc2l6ZW9mKEJpdG1hcHNldCopKTsKKworCWZvciAoaSA9 IDA7IGkgPCBubXZzdGF0czsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbXZz dGF0c1tpXS5zdGFrZXlzLT5kaW0xOyBqKyspCisJCQlzdGF0c19hdHRudW1z W2ldCisJCQkJPSBibXNfYWRkX21lbWJlcihzdGF0c19hdHRudW1zW2ldLAor CQkJCQkJCQkgbXZzdGF0c1tpXS5zdGFrZXlzLT52YWx1ZXNbal0pOworCisJ cmV0dXJuIHN0YXRzX2F0dG51bXM7CiB9CiAKKwogLyoKLSAqIENvbGxlY3Qg YXR0cmlidXRlcyBmcm9tIG12LWNvbXBhdGlibGUgY2xhdXNlcy4KKyAqIFJl bW92ZSByZWR1bmRhbnQgc3RhdGlzdGljcworICoKKyAqIElmIHRoZXJlIGFy ZSBtdWx0aXBsZSBzdGF0aXN0aWNzIGNvdmVyaW5nIHRoZSBzYW1lIHNldCBv ZiBjb2x1bW5zIChjb3VudGluZworICogb25seSB0aG9zZSByZWZlcmVuY2Vk IGJ5IGNsYXVzZXMgYW5kIGNvbmRpdGlvbnMpLCB3ZSBjYW4gYXBwbHkgb25l IG9mIHRob3NlCisgKiBhbnl3YXkgYW5kIGZ1cnRoZXIgcmVkdWNlIHRoZSBz aXplIG9mIHRoZSBvcHRpbWl6YXRpb24gcHJvYmxlbS4KKyAqCisgKiBUaHVz IHdoZW4gcmVkdW5kYW50IHN0YXRzIGFyZSBkZXRlY3RlZCwgd2Uga2VlcCB0 aGUgc21hbGxlciBvbmUgKHRoZSBvbmUgd2l0aAorICogZmV3ZXIgY29sdW1u cyksIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQncyBtb3JlIGFj Y3VyYXRlIGFuZCBhbHNvCisgKiBmYXN0ZXIgdG8gcHJvY2Vzcy4gVGhhdCBt YXkgYmUgdW50cnVlIGZvciB0d28gcmVhc29ucyAtIGZpcnN0LCB0aGUgYWNj dXJhY3kKKyAqIHJlYWxseSBkZXBlbmRzIG9uIG51bWJlciBvZiBidWNrZXRz L01DViBpdGVtcywgbm90IHRoZSBudW1iZXIgb2YgY29sdW1ucy4KKyAqIFNl Y29uZCwgc29tZSB0eXBlcyBvZiBzdGF0aXN0aWNzIG1heSB3b3JrIGJldHRl ciBmb3IgY2VydGFpbiB0eXBlcyBvZiBjbGF1c2VzCisgKiAoZS5nLiBNQ1Yg bGlzdHMgZm9yIGVxdWFsaXR5IGNvbmRpdGlvbnMpIGV0Yy4KICAqLwotc3Rh dGljIEJpdG1hcHNldCAqCi1jb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xh dXNlcywgSW5kZXggcmVsaWQsIGludCB0eXBlcykKK3N0YXRpYyBMaXN0Kgor ZmlsdGVyX3JlZHVuZGFudF9zdGF0cyhMaXN0ICpzdGF0cywgTGlzdCAqY2xh dXNlcywgTGlzdCAqY29uZGl0aW9ucykKIHsKLQlCaXRtYXBzZXQgICphdHRu dW1zID0gTlVMTDsKLQlMaXN0Q2VsbCAgICpsOworCWludCBpLCBqLCBubXZz dGF0czsKKworCU1WU3RhdGlzdGljSW5mbwkgICAqbXZzdGF0czsKKwlib29s CQkJICAgKnJlZHVuZGFudDsKKwlCaXRtYXBzZXQJCSAgKipzdGF0c19hdHRu dW1zOworCUJpdG1hcHNldAkJICAgKnZhcmF0dG5vczsKKwlJbmRleAkJCQly ZWxpZDsKKworCUFzc2VydChsaXN0X2xlbmd0aChzdGF0cykgPiAwKTsKKwlB c3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPiAwKTsKKworCS8qCisJICog V2UnbGwgY29udmVydCB0aGUgbGlzdCBvZiBzdGF0aXN0aWNzIGludG8gYW4g YXJyYXkgbm93LCBiZWNhdXNlCisJICogdGhlIHJlZHVjdGlvbiBvZiByZWR1 bmRhbnQgc3RhdGlzdGljcyBpcyBlYXNpZXIgdG8gZG8gdGhhdCB3YXkKKwkg KiAod2UgY2FuIG1hcmsgcHJldmlvdXMgc3RhdHMgYXMgcmVkdW5kYW50LCBl dGMuKS4KKwkgKi8KKwltdnN0YXRzID0gbWFrZV9zdGF0c19hcnJheShzdGF0 cywgJm5tdnN0YXRzKTsKKwlzdGF0c19hdHRudW1zID0gbWFrZV9zdGF0c19h dHRudW1zKG12c3RhdHMsIG5tdnN0YXRzKTsKKworCS8qIGJ5IGRlZmF1bHQs IG5vbmUgb2YgdGhlIHN0YXRzIGlzIHJlZHVuZGFudCAoc28gcGFsbG9jMCkg Ki8KKwlyZWR1bmRhbnQgPSBwYWxsb2MwKG5tdnN0YXRzICogc2l6ZW9mKGJv b2wpKTsKKworCS8qCisJICogV2Ugb25seSBleHBlY3QgYSBzaW5nbGUgcmVs aWQgaGVyZSwgYW5kIGFsc28gd2Ugc2hvdWxkIGdldCB0aGUKKwkgKiBzYW1l IHJlbGlkIGZyb20gY2xhdXNlcyBhbmQgY29uZGl0aW9ucyAoYnV0IHdlIGdl dCBpdCBmcm9tCisJICogY2xhdXNlcywgYmVjYXVzZSB0aG9zZSBhcmUgY2Vy dGFpbmx5IG5vbi1lbXB0eSkuCisJICovCisJcmVsaWQgPSBibXNfc2luZ2xl dG9uX21lbWJlcihwdWxsX3Zhcm5vcygoTm9kZSopY2xhdXNlcykpOwogCiAJ LyoKLQkgKiBXYWxrIHRocm91Z2ggdGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5 IHRoZSBvbmVzIHdlIGNhbiBlc3RpbWF0ZSB1c2luZwotCSAqIG11bHRpdmFy aWF0ZSBzdGF0cywgYW5kIHJlbWVtYmVyIHRoZSByZWxpZC9jb2x1bW5zLiBX ZSdsbCB0aGVuCi0JICogY3Jvc3MtY2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJs ZSBzdGF0cywgYW5kIG9ubHkgaWYgbmVlZGVkIHdlJ2xsIHNwbGl0Ci0JICog dGhlIGNsYXVzZXMgaW50byBtdWx0aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlz dHMuCisJICogR2V0IHRoZSB2YXJhdHRub3MgZnJvbSBib3RoIGNvbmRpdGlv bnMgYW5kIGNsYXVzZXMuCiAJICoKLQkgKiBGb3Igbm93IHdlJ3JlIG9ubHkg aW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9kZXMgd2l0aCBuZXN0ZWQg T3BFeHByLAotCSAqIHVzaW5nIGVpdGhlciBhIHJhbmdlIG9yIGVxdWFsaXR5 LgorCSAqIFRoaXMgc2tpcHMgc3lzdGVtIGF0dHJpYnV0ZXMsIGFsdGhvdWdo IHRoYXQgc2hvdWxkIGJlIGltcG9zc2libGUKKwkgKiB0aGFua3MgdG8gcHJl dmlvdXMgZmlsdGVyaW5nIG91dCBvZiBpbmNvbXBhdGlibGUgY2xhdXNlcy4K KwkgKgorCSAqIFhYWCBJcyB0aGF0IHJlYWxseSB0cnVlPwogCSAqLwotCWZv cmVhY2ggKGwsIGNsYXVzZXMpCisJdmFyYXR0bm9zID0gYm1zX3VuaW9uKGdl dF92YXJhdHRub3MoKE5vZGUqKWNsYXVzZXMsIHJlbGlkKSwKKwkJCQkJCSAg Z2V0X3ZhcmF0dG5vcygoTm9kZSopY29uZGl0aW9ucywgcmVsaWQpKTsKKwor CWZvciAoaSA9IDE7IGkgPCBubXZzdGF0czsgaSsrKQogCXsKLQkJTm9kZQkg ICAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGwpOworCQkvKiBpbnRlcnNl Y3Qgd2l0aCBjdXJyZW50IHN0YXRpc3RpY3MgKi8KKwkJQml0bWFwc2V0ICpj dXJyID0gYm1zX2ludGVyc2VjdChzdGF0c19hdHRudW1zW2ldLCB2YXJhdHRu b3MpOwogCi0JCS8qIGlnbm9yZSB0aGUgcmVzdWx0IGhlcmUgLSB3ZSBvbmx5 IG5lZWQgdGhlIGF0dG51bXMgKi8KLQkJY2xhdXNlX2lzX212X2NvbXBhdGli bGUoY2xhdXNlLCByZWxpZCwgJmF0dG51bXMsIHR5cGVzKTsKKwkJLyogd2Fs ayB0aHJvdWdoICdwcmV2aW91cycgc3RhdHMgYW5kIGNoZWNrIHJlZHVuZGFu Y3kgKi8KKwkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJeworCQkJLyog aW50ZXJzZWN0IHdpdGggY3VycmVudCBzdGF0aXN0aWNzICovCisJCQlCaXRt YXBzZXQgKnByZXY7CisKKwkJCS8qIHNraXAgc3RhdHMgYWxyZWFkeSBpZGVu dGlmaWVkIGFzIHJlZHVuZGFudCAqLworCQkJaWYgKHJlZHVuZGFudFtqXSkK KwkJCQljb250aW51ZTsKKworCQkJcHJldiA9IGJtc19pbnRlcnNlY3Qoc3Rh dHNfYXR0bnVtc1tqXSwgdmFyYXR0bm9zKTsKKworCQkJc3dpdGNoIChibXNf c3Vic2V0X2NvbXBhcmUoY3VyciwgcHJldikpCisJCQl7CisJCQkJY2FzZSBC TVNfRVFVQUw6CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgc21hbGxlciBv bmUgKGhvcGVmdWxseSBtb3JlIGFjY3VyYXRlKS4KKwkJCQkJICogSWYgYm90 aCBoYXZlIHRoZSBzYW1lIHNpemUsIHVzZSB0aGUgZmlyc3Qgb25lLgorCQkJ CQkgKi8KKwkJCQkJaWYgKG12c3RhdHNbaV0uc3Rha2V5cy0+ZGltMSA+PSBt dnN0YXRzW2pdLnN0YWtleXMtPmRpbTEpCisJCQkJCQlyZWR1bmRhbnRbaV0g PSBUUlVFOworCQkJCQllbHNlCisJCQkJCQlyZWR1bmRhbnRbal0gPSBUUlVF OworCisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBCTVNfU1VCU0VUMTogLyog Y3VyciBpcyBzdWJzZXQgb2YgcHJldiAqLworCQkJCQlyZWR1bmRhbnRbaV0g PSBUUlVFOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQk1TX1NVQlNFVDI6 IC8qIHByZXYgaXMgc3Vic2V0IG9mIGN1cnIgKi8KKwkJCQkJcmVkdW5kYW50 W2pdID0gVFJVRTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEJNU19ESUZG RVJFTlQ6CisJCQkJCS8qIGRvIG5vdGhpbmcgLSBrZWVwIGJvdGggc3RhdHMg Ki8KKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJtc19mcmVlKHByZXYpOwor CQl9CisKKwkJYm1zX2ZyZWUoY3Vycik7CiAJfQogCi0JLyoKLQkgKiBJZiB0 aGVyZSBhcmUgbm90IGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzIHJlZmVyZW5j ZWQgYnkgdGhlIGNsYXVzZShzKSwKLQkgKiB3ZSBjYW4gdGhyb3cgZXZlcnl0 aGluZyBvdXQgKGFzIHdlJ2xsIHJldmVydCB0byBzaW1wbGUgc3RhdHMpLgot CSAqLwotCWlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVtcykgPD0gMSkKKwkv KiBjYW4ndCByZWR1Y2UgYWxsIHN0YXRpc3RpY3MgKGF0IGxlYXN0IG9uZSBo YXMgdG8gcmVtYWluKSAqLworCUFzc2VydChubXZzdGF0cyA+IDApOworCisJ Lyogbm93LCBsZXQncyByZW1vdmUgdGhlIHJlZHVjZWQgc3RhdGlzdGljcyBm cm9tIHRoZSBhcnJheXMgKi8KKwlsaXN0X2ZyZWUoc3RhdHMpOworCXN0YXRz ID0gTklMOworCisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCiAJ ewotCQlpZiAoYXR0bnVtcyAhPSBOVUxMKQotCQkJcGZyZWUoYXR0bnVtcyk7 Ci0JCWF0dG51bXMgPSBOVUxMOworCQlNVlN0YXRpc3RpY0luZm8gKmluZm87 CisKKwkJcGZyZWUoc3RhdHNfYXR0bnVtc1tpXSk7CisKKwkJaWYgKHJlZHVu ZGFudFtpXSkKKwkJCWNvbnRpbnVlOworCisJCWluZm8gPSBtYWtlTm9kZShN VlN0YXRpc3RpY0luZm8pOworCQltZW1jcHkoaW5mbywgJm12c3RhdHNbaV0s IHNpemVvZihNVlN0YXRpc3RpY0luZm8pKTsKKworCQlzdGF0cyA9IGxhcHBl bmQoc3RhdHMsIGluZm8pOwogCX0KIAotCXJldHVybiBhdHRudW1zOworCXBm cmVlKG12c3RhdHMpOworCXBmcmVlKHN0YXRzX2F0dG51bXMpOworCXBmcmVl KHJlZHVuZGFudCk7CisKKwlyZXR1cm4gc3RhdHM7CiB9CiAKLS8qCi0gKiBD b3VudCB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gY2xhdXNlcyBjb21w YXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzLgotICovCi1zdGF0aWMg aW50Ci1jb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJl bGlkLCBpbnQgdHlwZSkKK3N0YXRpYyBOb2RlKioKK21ha2VfY2xhdXNlc19h cnJheShMaXN0ICpjbGF1c2VzLCBpbnQgKm5jbGF1c2VzKQogewotCWludCBj OwotCUJpdG1hcHNldCAqYXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0bnVtcyhj bGF1c2VzLCByZWxpZCwgdHlwZSk7CisJaW50IGk7CisJTGlzdENlbGwgKmw7 CiAKLQljID0gYm1zX251bV9tZW1iZXJzKGF0dG51bXMpOworCU5vZGUqKiBj bGF1c2VzX2FycmF5OwogCi0JYm1zX2ZyZWUoYXR0bnVtcyk7CisJKm5jbGF1 c2VzID0gbGlzdF9sZW5ndGgoY2xhdXNlcyk7CisJY2xhdXNlc19hcnJheSA9 IChOb2RlICoqKXBhbGxvYzAoKCpuY2xhdXNlcykgKiBzaXplb2YoTm9kZSAq KSk7CiAKLQlyZXR1cm4gYzsKKwlpID0gMDsKKwlmb3JlYWNoIChsLCBjbGF1 c2VzKQorCQljbGF1c2VzX2FycmF5W2krK10gPSAoTm9kZSAqKWxmaXJzdChs KTsKKworCSpuY2xhdXNlcyA9IGk7CisKKwlyZXR1cm4gY2xhdXNlc19hcnJh eTsKIH0KIAotLyoKLSAqIENvdW50IHZhcm5vcyByZWZlcmVuY2VkIGluIHRo ZSBjbGF1c2VzLCBhbmQgaWYgdGhlcmUncyBhIHNpbmdsZSB2YXJubyB0aGVu Ci0gKiByZXR1cm4gdGhlIGluZGV4IGluICdyZWxpZCcuCi0gKi8KLXN0YXRp YyBpbnQKLWNvdW50X3Zhcm5vcyhMaXN0ICpjbGF1c2VzLCBJbmRleCAqcmVs aWQpCitzdGF0aWMgQml0bWFwc2V0ICoqCittYWtlX2NsYXVzZXNfYXR0bnVt cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQsCisJCQkJCSBpbnQg dHlwZSwgTm9kZSAqKmNsYXVzZXMsIGludCBuY2xhdXNlcykKIHsKLQlpbnQg Y250OwotCUJpdG1hcHNldCAqdmFybm9zID0gTlVMTDsKKwlpbnQJCQlpOwor CUJpdG1hcHNldCAqKmNsYXVzZXNfYXR0bnVtcworCQk9IChCaXRtYXBzZXQg KiopcGFsbG9jMChuY2xhdXNlcyAqIHNpemVvZihCaXRtYXBzZXQgKikpOwog Ci0JdmFybm9zID0gcHVsbF92YXJub3MoKE5vZGUgKikgY2xhdXNlcyk7Ci0J Y250ID0gYm1zX251bV9tZW1iZXJzKHZhcm5vcyk7CisJZm9yIChpID0gMDsg aSA8IG5jbGF1c2VzOyBpKyspCisJeworCQlCaXRtYXBzZXQgKiBhdHRudW1z ID0gTlVMTDsKIAotCS8qIGlmIHRoZXJlJ3MgYSBzaW5nbGUgdmFybm8gaW4g dGhlIGNsYXVzZXMsIHJlbWVtYmVyIGl0ICovCi0JaWYgKGJtc19udW1fbWVt YmVycyh2YXJub3MpID09IDEpCi0JCSpyZWxpZCA9IGJtc19zaW5nbGV0b25f bWVtYmVyKHZhcm5vcyk7CisJCWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRp YmxlKGNsYXVzZXNbaV0sIHJlbGlkLCAmYXR0bnVtcywgdHlwZSkpCisJCQll bG9nKEVSUk9SLCAic2hvdWxkIG5vdCBnZXQgbm9uLW12LWNvbXBhdGlibGUg Y2xhdXNlIik7CiAKLQlibXNfZnJlZSh2YXJub3MpOworCQljbGF1c2VzX2F0 dG51bXNbaV0gPSBhdHRudW1zOworCX0KIAotCXJldHVybiBjbnQ7CisJcmV0 dXJuIGNsYXVzZXNfYXR0bnVtczsKIH0KLSAKKworc3RhdGljIGJvb2wqCitt YWtlX2NvdmVyX21hcChCaXRtYXBzZXQgKipzdGF0c19hdHRudW1zLCBpbnQg bm12c3RhdHMsCisJCQkgICBCaXRtYXBzZXQgKipjbGF1c2VzX2F0dG51bXMs IGludCBuY2xhdXNlcykKK3sKKwlpbnQJCWksIGo7CisJYm9vbCAgICpjb3Zl cl9tYXAJPSAoYm9vbCopcGFsbG9jMChuY2xhdXNlcyAqIG5tdnN0YXRzKTsK KworCWZvciAoaSA9IDA7IGkgPCBubXZzdGF0czsgaSsrKQorCQlmb3IgKGog PSAwOyBqIDwgbmNsYXVzZXM7IGorKykKKwkJCWNvdmVyX21hcFtpICogbmNs YXVzZXMgKyBqXQorCQkJCT0gYm1zX2lzX3N1YnNldChjbGF1c2VzX2F0dG51 bXNbal0sIHN0YXRzX2F0dG51bXNbaV0pOworCisJcmV0dXJuIGNvdmVyX21h cDsKK30KKwogLyoKLSAqIFdlJ3JlIGxvb2tpbmcgZm9yIHN0YXRpc3RpY3Mg bWF0Y2hpbmcgYXQgbGVhc3QgMiBhdHRyaWJ1dGVzLCByZWZlcmVuY2VkIGlu Ci0gKiBjbGF1c2VzIGNvbXBhdGlibGUgd2l0aCBtdWx0aXZhcmlhdGUgc3Rh dGlzdGljcy4gVGhlIGN1cnJlbnQgc2VsZWN0aW9uCi0gKiBjcml0ZXJpYSBp cyB2ZXJ5IHNpbXBsZSAtIHdlIGNob29zZSB0aGUgc3RhdGlzdGljcyByZWZl cmVuY2luZyB0aGUgbW9zdAotICogYXR0cmlidXRlcy4KLSAqCi0gKiBJZiB0 aGVyZSBhcmUgbXVsdGlwbGUgc3RhdGlzdGljcyByZWZlcmVuY2luZyB0aGUg c2FtZSBudW1iZXIgb2YgY29sdW1ucwotICogKGZyb20gdGhlIGNsYXVzZXMp LCB0aGUgb25lIHdpdGggbGVzcyBzb3VyY2UgY29sdW1ucyAoYXMgbGlzdGVk IGluIHRoZQotICogQUREIFNUQVRJU1RJQ1Mgd2hlbiBjcmVhdGluZyB0aGUg c3RhdGlzdGljcykgd2lucy4gRWxzZSB0aGUgZmlyc3Qgb25lIHdpbnMuCi0g KgotICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGNyaXRlcmlhLCBhbmQgaGFz IHNldmVyYWwgd2Vha25lc3NlczoKLSAqCi0gKiAoYSkgZG9lcyBub3QgY29u c2lkZXIgdGhlIGFjY3VyYWN5IG9mIHRoZSBzdGF0aXN0aWNzCi0gKgotICog ICAgIElmIHRoZXJlIGFyZSB0d28gaGlzdG9ncmFtcyBidWlsdCBvbiB0aGUg c2FtZSBzZXQgb2YgY29sdW1ucywgYnV0IG9uZQotICogICAgIGhhcyAxMDAg YnVja2V0cyBhbmQgdGhlIG90aGVyIG9uZSBoYXMgMTAwMCBidWNrZXRzICh0 aHVzIGxpa2VseQotICogICAgIHByb3ZpZGluZyBiZXR0ZXIgZXN0aW1hdGVz KSwgdGhpcyBpcyBub3QgY3VycmVudGx5IGNvbnNpZGVyZWQuCi0gKgotICog KGIpIGRvZXMgbm90IGNvbnNpZGVyIHRoZSB0eXBlIG9mIHN0YXRpc3RpY3MK LSAqCi0gKiAgICAgSWYgdGhlcmUgYXJlIHRocmVlIHN0YXRpc3RpY3MgLSBv bmUgY29udGFpbmluZyBqdXN0IGEgTUNWIGxpc3QsIGFub3RoZXIKLSAqICAg ICBvbmUgd2l0aCBqdXN0IGEgaGlzdG9ncmFtIGFuZCBhIHRoaXJkIG9uZSB3 aXRoIGJvdGgsIHdlIHRyZWF0IHRoZW0gZXF1YWxseS4KKyAqIENob29zZXMg dGhlIGNvbWJpbmF0aW9uIG9mIHN0YXRpc3RpY3MsIG9wdGltYWwgZm9yIGVz dGltYXRpb24gb2YgYSBwYXJ0aWN1bGFyCisgKiBjbGF1c2UgbGlzdC4KICAq Ci0gKiAoYykgZG9lcyBub3QgY29uc2lkZXIgdGhlIG51bWJlciBvZiBjbGF1 c2VzCisgKiBUaGlzIG9ubHkgaGFuZGxlcyBhICdwcmVwYXJhdGlvbicgc2hh cmVkIGJ5IHRoZSBleGhhdXN0aXZlIGFuZCBncmVlZHkKKyAqIGltcGxlbWVu dGF0aW9ucyAoc2VlIHRoZSBwcmV2aW91cyBtZXRob2RzKSwgbW9zdGx5IHRy eWluZyB0byByZWR1Y2UgdGhlIHNpemUKKyAqIG9mIHRoZSBwcm9ibGVtIChl bGltaW5hdGUgY2xhdXNlcy9zdGF0aXN0aWNzIHRoYXQgY2FuJ3QgYmUgcmVh bGx5IHVzZWQgaW4KKyAqIHRoZSBzb2x1dGlvbikuCiAgKgotICogICAgIEFz IGV4cGxhaW5lZCwgb25seSB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZWQgYXR0 cmlidXRlcyBjb3VudHMsIHNvIGlmCi0gKiAgICAgdGhlcmUgYXJlIG11bHRp cGxlIGNsYXVzZXMgb24gYSBzaW5nbGUgYXR0cmlidXRlLCB0aGlzIHN0aWxs IGNvdW50cyBhcwotICogICAgIGEgc2luZ2xlIGF0dHJpYnV0ZS4KKyAqIEl0 IGFsc28gcHJlY29tcHV0ZXMgYml0bWFwcyBmb3IgYXR0cmlidXRlcyBjb3Zl cmVkIGJ5IGNsYXVzZXMgYW5kIHN0YXRpc3RpY3MsCisgKiBzbyB0aGF0IHdl IGRvbid0IG5lZWQgdG8gZG8gdGhhdCBvdmVyIGFuZCBvdmVyIGluIHRoZSBh Y3R1YWwgb3B0aW1pemF0aW9ucworICogKGFzIGl0J3MgYm90aCBDUFUgYW5k IG1lbW9yeSBpbnRlbnNpdmUpLgogICoKLSAqIChkKSBkb2VzIG5vdCBjb25z aWRlciB0eXBlIG9mIGNvbmRpdGlvbgogICoKLSAqICAgICBTb21lIGNsYXVz ZXMgbWF5IHdvcmsgYmV0dGVyIHdpdGggc29tZSBzdGF0aXN0aWNzIC0gZm9y IGV4YW1wbGUgZXF1YWxpdHkKLSAqICAgICBjbGF1c2VzIHByb2JhYmx5IHdv cmsgYmV0dGVyIHdpdGggTUNWIGxpc3RzIHRoYW4gd2l0aCBoaXN0b2dyYW1z LiBCdXQKLSAqICAgICBJUyBbTk9UXSBOVUxMIGNvbmRpdGlvbnMgbWF5IG9m dGVuIHdvcmsgYmV0dGVyIHdpdGggaGlzdG9ncmFtcyAodGhhbmtzCi0gKiAg ICAgdG8gTlVMTC1idWNrZXRzKS4KKyAqIFRPRE8gQW5vdGhlciB3YXkgdG8g bWFrZSB0aGUgb3B0aW1pemF0aW9uIHByb2JsZW1zIHNtYWxsZXIgbWlnaHQg YmUgc3BsaXR0aW5nCisgKiAgICAgIHRoZSBzdGF0aXN0aWNzIGludG8gc2V2 ZXJhbCBkaXNqb2ludCBzdWJzZXRzLCBpLmUuIGlmIHdlIGNhbiBzcGxpdCB0 aGUKKyAqICAgICAgZ3JhcGggb2Ygc3RhdGlzdGljcyAoYWZ0ZXIgdGhlIGVs aW1pbmF0aW9uKSBpbnRvIG11bHRpcGxlIGNvbXBvbmVudHMKKyAqICAgICAg KHNvIHRoYXQgc3RhdHMgaW4gZGlmZmVyZW50IGNvbXBvbmVudHMgc2hhcmUg bm8gYXR0cmlidXRlcyksIHdlIGNhbiBkbworICogICAgICB0aGUgb3B0aW1p emF0aW9uIGZvciBlYWNoIGNvbXBvbmVudCBzZXBhcmF0ZWx5LgogICoKLSAq IFNvIGZvciBleGFtcGxlIHdpdGggZml2ZSBXSEVSRSBjb25kaXRpb25zCi0g KgotICogICAgIFdIRVJFIChhID0gMSkgQU5EIChiID0gMSkgQU5EIChjID0g MSkgQU5EIChkID0gMSkgQU5EIChlID0gMSkKLSAqCi0gKiBhbmQgc3RhdGlz dGljcyBvbiAoYSxiKSwgKGEsYixlKSBhbmQgKGEsYixjLGQpLCB0aGUgbGFz dCBvbmUgd2lsbCBiZSBzZWxlY3RlZAotICogYXMgaXQgcmVmZXJlbmNlcyB0 aGUgbW9zdCBjb2x1bW5zLgotICoKLSAqIE9uY2Ugd2UgaGF2ZSBzZWxlY3Rl ZCB0aGUgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MsIHdlIHNwbGl0IHRoZSBs aXN0IG9mCi0gKiBjbGF1c2VzIGludG8gdHdvIHBhcnRzIC0gY29uZGl0aW9u cyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkCi0gKiBz dGF0cywgYW5kIGNvbmRpdGlvbnMgYXJlIGVzdGltYXRlZCB1c2luZyBzaW1w bGUgc3RhdGlzdGljcy4KLSAqCi0gKiBGcm9tIHRoZSBleGFtcGxlIGFib3Zl LCBjb25kaXRpb25zCi0gKgotICogICAgIChhID0gMSkgQU5EIChiID0gMSkg QU5EIChjID0gMSkgQU5EIChkID0gMSkKLSAqCi0gKiB3aWxsIGJlIGVzdGlt YXRlZCB1c2luZyB0aGUgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgKGEsYixj LGQpIHdoaWxlIHRoZSBsYXN0Ci0gKiBjb25kaXRpb24gKGUgPSAxKSB3aWxs IGdldCBlc3RpbWF0ZWQgdXNpbmcgdGhlIHJlZ3VsYXIgb25lcy4KLSAqCi0g KiBUaGVyZSBhcmUgdmFyaW91cyBhbHRlcm5hdGl2ZSBzZWxlY3Rpb24gY3Jp dGVyaWEgKGUuZy4gY291bnRpbmcgY29uZGl0aW9ucwotICogaW5zdGVhZCBv ZiBqdXN0IHJlZmVyZW5jZWQgYXR0cmlidXRlcyksIGJ1dCBldmVudHVhbGx5 IHRoZSBiZXN0IG9wdGlvbiBzaG91bGQKLSAqIGJlIHRvIGNvbWJpbmUgbXVs dGlwbGUgc3RhdGlzdGljcy4gQnV0IHRoYXQncyBtdWNoIGhhcmRlciB0byBk byBjb3JyZWN0bHkuCi0gKgotICogVE9ETyBTZWxlY3QgbXVsdGlwbGUgc3Rh dGlzdGljcyBhbmQgY29tYmluZSB0aGVtIHdoZW4gY29tcHV0aW5nIHRoZSBl c3RpbWF0ZS4KLSAqCi0gKiBUT0RPIFRoaXMgd2lsbCBwcm9iYWJseSBoYXZl IHRvIGNvbnNpZGVyIGNvbXBhdGliaWxpdHkgb2YgY2xhdXNlcywgYmVjYXVz ZQotICogICAgICAnZGVwZW5kZW5jaWVzJyB3aWxsIHByb2JhYmx5IHdvcmsg b25seSB3aXRoIGVxdWFsaXR5IGNsYXVzZXMuCisgKiBUT0RPIElmIHdlIGNv dWxkIGNvbXB1dGUgd2hhdCBpcyBhICJwZXJmZWN0IHNvbHV0aW9uIiBtYXli ZSB3ZSBjb3VsZAorICogICAgICB0ZXJtaW5hdGUgdGhlIHNlYXJjaCBhZnRl ciByZWFjaGluZyB+OTAlIG9mIGl0PyBTYXksIGlmIHdlIGtuZXcgdGhhdCB3 ZQorICogICAgICBjYW4gY292ZXIgMTAgY2xhdXNlcyBhbmQgcmV1c2UgOCBk ZXBlbmRlbmNpZXMsIG1heWJlIGNvdmVyaW5nIDkgY2xhdXNlcworICogICAg ICBhbmQgNyBkZXBlbmRlbmNpZXMgd291bGQgYmUgT0s/CiAgKi8KLXN0YXRp YyBNVlN0YXRpc3RpY0luZm8gKgotY2hvb3NlX212X3N0YXRpc3RpY3MoTGlz dCAqc3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcykKK3N0YXRpYyBMaXN0Kgor Y2hvb3NlX212X3N0YXRpc3RpY3MoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4 IHJlbGlkLCBMaXN0ICpzdGF0cywKKwkJCQkJIExpc3QgKmNsYXVzZXMsIExp c3QgKmNvbmRpdGlvbnMpCiB7CiAJaW50IGk7Ci0JTGlzdENlbGwgICAqbGM7 CisJbXZfc29sdXRpb25fdCAqYmVzdCA9IE5VTEw7CisJTGlzdCAqcmVzdWx0 ID0gTklMOworCisJaW50IG5tdnN0YXRzOworCU1WU3RhdGlzdGljSW5mbyAq bXZzdGF0czsKKworCS8qIHdlIG9ubHkgd29yayB3aXRoIE1DViBsaXN0cyBh bmQgaGlzdG9ncmFtcyBoZXJlICovCisJaW50IHR5cGUgPSAoTVZfQ0xBVVNF X1RZUEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCk7CisKKwlib29sICAg KmNsYXVzZV9jb3Zlcl9tYXAgPSBOVUxMLAorCQkgICAqY29uZGl0aW9uX2Nv dmVyX21hcCA9IE5VTEw7CisJaW50CSAgICpydWxlZF9vdXQgPSBOVUxMOwor CisJLyogYnVpbGQgYml0bWFwc2V0cyBmb3IgYWxsIHN0YXRzIGFuZCBjbGF1 c2VzICovCisJQml0bWFwc2V0ICoqc3RhdHNfYXR0bnVtczsKKwlCaXRtYXBz ZXQgKipjbGF1c2VzX2F0dG51bXM7CisJQml0bWFwc2V0ICoqY29uZGl0aW9u c19hdHRudW1zOwogCi0JTVZTdGF0aXN0aWNJbmZvICpjaG9pY2UgPSBOVUxM OworCWludCBuY2xhdXNlcywgbmNvbmRpdGlvbnM7CisJTm9kZSAqKiBjbGF1 c2VzX2FycmF5OworCU5vZGUgKiogY29uZGl0aW9uc19hcnJheTsKIAotCWlu dCBjdXJyZW50X21hdGNoZXMgPSAxOwkJCQkJCS8qIGdvYWwgIzE6IG1heGlt aXplICovCi0JaW50IGN1cnJlbnRfZGltcyA9IChNVlNUQVRTX01BWF9ESU1F TlNJT05TKzEpOwkvKiBnb2FsICMyOiBtaW5pbWl6ZSAqLworCS8qIGNvcHkg bGlzdHMsIHNvIHRoYXQgd2UgY2FuIGZyZWUgdGhlbSBkdXJpbmcgZWxpbWlu YXRpb24gZWFzaWx5ICovCisJY2xhdXNlcyA9IGxpc3RfY29weShjbGF1c2Vz KTsKKwljb25kaXRpb25zID0gbGlzdF9jb3B5KGNvbmRpdGlvbnMpOworCXN0 YXRzID0gbGlzdF9jb3B5KHN0YXRzKTsKIAogCS8qCi0JICogV2FsayB0aHJv dWdoIHRoZSBzdGF0aXN0aWNzIChzaW1wbGUgYXJyYXkgd2l0aCBubXZzdGF0 cyBlbGVtZW50cykgYW5kIGZvcgotCSAqIGVhY2ggb25lIGNvdW50IHRoZSBy ZWZlcmVuY2VkIGF0dHJpYnV0ZXMgKGVuY29kZWQgaW4gdGhlICdhdHRudW1z JyBiaXRtYXApLgorCSAqIFJlZHVjZSB0aGUgb3B0aW1pemF0aW9uIHByb2Js ZW0gc2l6ZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSAqCisJICogRWxpbWlu YXRlIGNsYXVzZXMgYW5kIGNvbmRpdGlvbnMgbm90IGNvdmVyZWQgYnkgYW55 IHN0YXRpc3RpY3MsCisJICogb3Igc3RhdGlzdGljcyBub3QgbWF0Y2hpbmcg YXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMgKG9uZSBvZiB0aGVtCisJICogaGFz IHRvIGJlIGluIGEgcmVndWxhciBjbGF1c2UpLgorCSAqCisJICogSXQncyBw b3NzaWJsZSB0aGF0IHJlbW92aW5nIGEgc3RhdGlzdGljcyBpbiBvbmUgaXRl cmF0aW9uCisJICogZWxpbWluYXRlcyBjbGF1c2UgaW4gdGhlIG5leHQgb25l LCBzbyB3ZSdsbCByZXBlYXQgdGhpcyB1bnRpbCB3ZQorCSAqIGVsaW1pbmF0 ZSBubyBjbGF1c2VzL3N0YXRzIGluIHRoYXQgaXRlcmF0aW9uLgorCSAqCisJ ICogVGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgZWxpbWluYXRpbmcgYSBz dGF0aXN0aWNzIC0gY2xhdXNlcyBhcmUKKwkgKiBlbGltaW5hdGVkIGZpcnN0 LCBzbyBzdGF0aXN0aWNzIGFsd2F5cyByZWZsZWN0IHRoYXQuCiAJICovCi0J Zm9yZWFjaCAobGMsIHN0YXRzKQorCXdoaWxlICh0cnVlKQogCXsKLQkJTVZT dGF0aXN0aWNJbmZvICppbmZvID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJz dChsYyk7Ci0KLQkJLyogY29sdW1ucyBtYXRjaGluZyB0aGlzIHN0YXRpc3Rp Y3MgKi8KLQkJaW50IG1hdGNoZXMgPSAwOworCQlMaXN0CSAgICp0bXA7CiAK LQkJaW50MnZlY3RvciAqIGF0dHJzID0gaW5mby0+c3Rha2V5czsKLQkJaW50 CW51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisJCUJpdG1hcHNldCAqY29tcGF0 aWJsZV9hdHRudW1zID0gTlVMTDsKKwkJQml0bWFwc2V0ICpjb25kaXRpb25f YXR0bnVtcyAgPSBOVUxMOworCQlCaXRtYXBzZXQgKmFsbF9hdHRudW1zID0g TlVMTDsKIAotCQkvKiBza2lwIGRlcGVuZGVuY2llcy1vbmx5IHN0YXRzICov Ci0JCWlmICghIChpbmZvLT5tY3ZfYnVpbHQgfHwgaW5mby0+aGlzdF9idWls dCkpCi0JCQljb250aW51ZTsKKwkJLyoKKwkJICogQ2xhdXNlcworCQkgKgor CQkgKiBXYWxrIHRocm91Z2ggY2xhdXNlcyBhbmQga2VlcCBvbmx5IHRob3Nl IGNvdmVyZWQgYnkgYXQgbGVhc3QKKwkJICogb25lIG9mIHRoZSBzdGF0aXN0 aWNzIHdlIHN0aWxsIGhhdmUuIFdlJ2xsIGFsc28ga2VlcCBpbmZvCisJCSAq IGFib3V0IGF0dG51bXMgaW4gY2xhdXNlcyAod2l0aG91dCBjb25kaXRpb25z KSBzbyB0aGF0IHdlIGNhbgorCQkgKiBpZ25vcmUgc3RhdHMgY292ZXJpbmcg anVzdCBjb25kaXRpb25zICh3aGljaCBpcyBwb2ludGxlc3MpLgorCQkgKi8K KwkJdG1wID0gZmlsdGVyX2NsYXVzZXMocm9vdCwgcmVsaWQsIHR5cGUsCisJ CQkJCQkJIHN0YXRzLCBjbGF1c2VzLCAmY29tcGF0aWJsZV9hdHRudW1zKTsK IAotCQkvKiBjb3VudCBjb2x1bW5zIGNvdmVyZWQgYnkgdGhlIGhpc3RvZ3Jh bSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKLQkJCWlm IChibXNfaXNfbWVtYmVyKGF0dHJzLT52YWx1ZXNbaV0sIGF0dG51bXMpKQot CQkJCW1hdGNoZXMrKzsKKwkJLyogZGlzY2FyZCB0aGUgb3JpZ2luYWwgbGlz dCAqLworCQlsaXN0X2ZyZWUoY2xhdXNlcyk7CisJCWNsYXVzZXMgPSB0bXA7 CiAKIAkJLyoKLQkJICogVXNlIHRoaXMgc3RhdGlzdGljcyB3aGVuIGl0IGlt cHJvdmVzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBvcgotCQkgKiB3aGVuIGl0 IG1hdGNoZXMgdGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYnV0IGlz IHNtYWxsZXIuCisJCSAqIENvbmRpdGlvbnMKKwkJICoKKwkJICogV2FsayB0 aHJvdWdoIGNsYXVzZXMgYW5kIGtlZXAgb25seSB0aG9zZSBjb3ZlcmVkIGJ5 IGF0IGxlYXN0CisJCSAqIG9uZSBvZiB0aGUgc3RhdGlzdGljcyB3ZSBzdGls bCBoYXZlLiBBbHNvLCBjb2xsZWN0IGJpdG1hcCBvZgorCQkgKiBhdHRyaWJ1 dGVzIHNvIHRoYXQgd2UgY2FuIG1ha2Ugc3VyZSB3ZSBhZGQgYXQgbGVhc3Qg b25lIG5ldworCQkgKiBhdHRyaWJ1dGUgKGJ5IGNvbXBhcmluZyB3aXRoIGNs YXVzZXMpLgogCQkgKi8KLQkJaWYgKChtYXRjaGVzID4gY3VycmVudF9tYXRj aGVzKSB8fAotCQkJKChtYXRjaGVzID09IGN1cnJlbnRfbWF0Y2hlcykgJiYg KGN1cnJlbnRfZGltcyA+IG51bWF0dHJzKSkpCisJCWlmIChjb25kaXRpb25z ICE9IE5JTCkKIAkJewotCQkJY2hvaWNlID0gaW5mbzsKLQkJCWN1cnJlbnRf bWF0Y2hlcyA9IG1hdGNoZXM7Ci0JCQljdXJyZW50X2RpbXMgPSBudW1hdHRy czsKKwkJCXRtcCA9IGZpbHRlcl9jbGF1c2VzKHJvb3QsIHJlbGlkLCB0eXBl LAorCQkJCQkJCQkgc3RhdHMsIGNvbmRpdGlvbnMsICZjb25kaXRpb25fYXR0 bnVtcyk7CisKKwkJCS8qIGRpc2NhcmQgdGhlIG9yaWdpbmFsIGxpc3QgKi8K KwkJCWxpc3RfZnJlZShjb25kaXRpb25zKTsKKwkJCWNvbmRpdGlvbnMgPSB0 bXA7CiAJCX0KLQl9CiAKLQlyZXR1cm4gY2hvaWNlOwotfQorCQkvKiBnZXQg YSB1bmlvbiBvZiBhdHRudW1zIChmcm9tIGNvbmRpdGlvbnMgYW5kIG5ldyBj bGF1c2VzKSAqLworCQlhbGxfYXR0bnVtcyA9IGJtc191bmlvbihjb21wYXRp YmxlX2F0dG51bXMsIGNvbmRpdGlvbl9hdHRudW1zKTsKKworCQkvKgorCQkg KiBTdGF0aXNpdGljcworCQkgKgorCQkgKiBXYWxrIHRocm91Z2ggc3RhdGlz dGljcyBhbmQgb25seSBrZWVwIHRob3NlIGNvdmVyaW5nIGF0IGxlYXN0CisJ CSAqIG9uZSBuZXcgYXR0cmlidXRlIChleGNsdWRpbmcgY29uZGl0aW9ucykg YW5kIGF0IHR3byBhdHRyaWJ1dGVzCisJCSAqIGluIGJvdGggY2xhdXNlcyBh bmQgY29uZGl0aW9ucy4KKwkJICovCisJCXRtcCA9IGZpbHRlcl9zdGF0cyhz dGF0cywgY29tcGF0aWJsZV9hdHRudW1zLCBhbGxfYXR0bnVtcyk7CiAKKwkJ LyogaWYgd2UndmUgbm90IGVsaW1pbmF0ZWQgYW55dGhpbmcsIHRlcm1pbmF0 ZSAqLworCQlpZiAobGlzdF9sZW5ndGgoc3RhdHMpID09IGxpc3RfbGVuZ3Ro KHRtcCkpCisJCQlicmVhazsKIAotLyoKLSAqIFRoaXMgc3BsaXRzIHRoZSBj bGF1c2VzIGxpc3QgaW50byB0d28gcGFydHMgLSBvbmUgY29udGFpbmluZyBj bGF1c2VzIHRoYXQKLSAqIHdpbGwgYmUgZXZhbHVhdGVkIHVzaW5nIHRoZSBj aG9zZW4gc3RhdGlzdGljcywgYW5kIHRoZSByZW1haW5pbmcgY2xhdXNlcwot ICogKGVpdGhlciBub24tbXZjb21wYXRpYmxlLCBvciBub3QgcmVsYXRlZCB0 byB0aGUgaGlzdG9ncmFtKS4KLSAqLwotc3RhdGljIExpc3QgKgotY2xhdXNl bGlzdF9tdl9zcGxpdChQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQs Ci0JCQkJCUxpc3QgKmNsYXVzZXMsIExpc3QgKiptdmNsYXVzZXMsCi0JCQkJ CU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywgaW50IHR5cGVzKQotewotCWlu dCBpOwotCUxpc3RDZWxsICpsOwotCUxpc3QJICpub25fbXZjbGF1c2VzID0g TklMOworCQkvKiB3b3JrIG9ubHkgd2l0aCBmaWx0ZXJlZCBzdGF0aXN0aWNz IGZyb20gbm93ICovCisJCWxpc3RfZnJlZShzdGF0cyk7CisJCXN0YXRzID0g dG1wOworCX0KIAotCS8qIEZJWE1FIGlzIHRoZXJlIGEgYmV0dGVyIHdheSB0 byBnZXQgaW5mbyBvbiBpbnQydmVjdG9yPyAqLwotCWludDJ2ZWN0b3IgKiBh dHRycyA9IG12c3RhdHMtPnN0YWtleXM7Ci0JaW50CW51bWF0dHJzID0gbXZz dGF0cy0+c3Rha2V5cy0+ZGltMTsKKwkvKiBvbmx5IGRvIHRoZSBvcHRpbWl6 YXRpb24gaWYgd2UgaGF2ZSBjbGF1c2VzL3N0YXRpc3RpY3MgKi8KKwlpZiAo KGxpc3RfbGVuZ3RoKHN0YXRzKSA9PSAwKSB8fCAobGlzdF9sZW5ndGgoY2xh dXNlcykgPT0gMCkpCisJCXJldHVybiBOVUxMOwogCi0JQml0bWFwc2V0ICpt dmF0dG51bXMgPSBOVUxMOworCS8qIHJlbW92ZSByZWR1bmRhbnQgc3RhdHMg KHN0YXRzIGNvdmVyZWQgYnkgYW5vdGhlciBzdGF0cykgKi8KKwlzdGF0cyA9 IGZpbHRlcl9yZWR1bmRhbnRfc3RhdHMoc3RhdHMsIGNsYXVzZXMsIGNvbmRp dGlvbnMpOwogCi0JLyogYnVpbGQgYml0bWFwIG9mIGF0dHJpYnV0ZXMsIHNv IHdlIGNhbiBkbyBibXNfaXNfc3Vic2V0IGxhdGVyICovCi0JZm9yIChpID0g MDsgaSA8IG51bWF0dHJzOyBpKyspCi0JCW12YXR0bnVtcyA9IGJtc19hZGRf bWVtYmVyKG12YXR0bnVtcywgYXR0cnMtPnZhbHVlc1tpXSk7CisJLyoKKwkg KiBUT0RPIFdlIHNob3VsZCBzb3J0IHRoZSBzdGF0cyB0byBtYWtlIHRoZSBv cmRlciBkZXRlcm1pbmlzdGljLAorCSAqICAgICAgb3RoZXJ3aXNlIHdlIG1h eSBnZXQgZGlmZmVyZW50IGVzdGltYXRlcyBvbiBkaWZmZXJlbnQKKwkgKiAg ICAgIGV4ZWN1dGlvbnMgLSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgImVxdWFs bHkgZ29vZCIgc29sdXRpb25zLAorCSAqICAgICAgd2UnbGwga2VlcCB0aGUg Zmlyc3Qgc29sdXRpb24gd2Ugc2VlLgorCSAqCisJICogICAgICBTb3J0aW5n IGJ5IE9JRCBwcm9iYWJseSBpcyBub3QgdGhlIHJpZ2h0IHNvbHV0aW9uIHRo b3VnaCwKKwkgKiAgICAgIGJlY2F1c2Ugd2UnZCBsaWtlIGl0IHRvIGJlIHNv bWVob3cgcmVwcm9kdWNpYmxlLAorCSAqICAgICAgaXJyZXNwZWN0ZWRseSBv ZiB0aGUgb3JkZXIgb2YgQUREIFNUQVRJU1RJQ1MgY29tbWFuZHMuCisJICog ICAgICBTbyBtYXliZSBzdGF0a2V5cz8KKwkgKi8KKwltdnN0YXRzID0gbWFr ZV9zdGF0c19hcnJheShzdGF0cywgJm5tdnN0YXRzKTsKKwlzdGF0c19hdHRu dW1zID0gbWFrZV9zdGF0c19hdHRudW1zKG12c3RhdHMsIG5tdnN0YXRzKTsK IAotCS8qIGVyYXNlIHRoZSBsaXN0IG9mIG12LWNvbXBhdGlibGUgY2xhdXNl cyAqLwotCSptdmNsYXVzZXMgPSBOSUw7CisJLyogY29sbGVjdCBjbGF1c2Vz IGFuIGJpdG1hcCBvZiBhdHRudW1zICovCisJY2xhdXNlc19hcnJheSA9IG1h a2VfY2xhdXNlc19hcnJheShjbGF1c2VzLCAmbmNsYXVzZXMpOworCWNsYXVz ZXNfYXR0bnVtcyA9IG1ha2VfY2xhdXNlc19hdHRudW1zKHJvb3QsIHJlbGlk LCB0eXBlLAorCQkJCQkJCQkJCSAgIGNsYXVzZXNfYXJyYXksIG5jbGF1c2Vz KTsKIAotCWZvcmVhY2ggKGwsIGNsYXVzZXMpCi0JewotCQlib29sCQltYXRj aCA9IGZhbHNlOwkvKiBieSBkZWZhdWx0IG5vdCBtdi1jb21wYXRpYmxlICov Ci0JCUJpdG1hcHNldAkqYXR0bnVtcyA9IE5VTEw7Ci0JCU5vZGUJICAgKmNs YXVzZSA9IChOb2RlICopIGxmaXJzdChsKTsKKwkvKiBjb2xsZWN0IGNvbmRp dGlvbnMgYW5kIGJpdG1hcCBvZiBhdHRudW1zICovCisJY29uZGl0aW9uc19h cnJheSA9IG1ha2VfY2xhdXNlc19hcnJheShjb25kaXRpb25zLCAmbmNvbmRp dGlvbnMpOworCWNvbmRpdGlvbnNfYXR0bnVtcyA9IG1ha2VfY2xhdXNlc19h dHRudW1zKHJvb3QsIHJlbGlkLCB0eXBlLAorCQkJCQkJCQkJCQkgIGNvbmRp dGlvbnNfYXJyYXksIG5jb25kaXRpb25zKTsKIAotCQlpZiAoY2xhdXNlX2lz X212X2NvbXBhdGlibGUoY2xhdXNlLCByZWxpZCwgJmF0dG51bXMsIHR5cGVz KSkKKwkvKgorCSAqIEJ1aWxkIGJpdG1hcHMgd2l0aCBpbmZvIGFib3V0IHdo aWNoIGNsYXVzZXMvY29uZGl0aW9ucyBhcmUKKwkgKiBjb3ZlcmVkIGJ5IGVh Y2ggc3RhdGlzdGljcyAoc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGNhbGwg dGhlCisJICogYm1zX2lzX3N1YnNldCBvdmVyIGFuZCBvdmVyIGFnYWluKS4K KwkgKi8KKwljbGF1c2VfY292ZXJfbWFwID0gbWFrZV9jb3Zlcl9tYXAoc3Rh dHNfYXR0bnVtcywgbm12c3RhdHMsCisJCQkJCQkJCQkgIGNsYXVzZXNfYXR0 bnVtcywgbmNsYXVzZXMpOworCisJY29uZGl0aW9uX2NvdmVyX21hcAk9IG1h a2VfY292ZXJfbWFwKHN0YXRzX2F0dG51bXMsIG5tdnN0YXRzLAorCQkJCQkJ CQkJCSBjb25kaXRpb25zX2F0dG51bXMsIG5jb25kaXRpb25zKTsKKworCXJ1 bGVkX291dCA9ICAoaW50KilwYWxsb2MwKG5tdnN0YXRzICogc2l6ZW9mKGlu dCkpOworCisJLyogbm8gc3RhdHMgYXJlIHJ1bGVkIG91dCBieSBkZWZhdWx0 ICovCisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJCXJ1bGVk X291dFtpXSA9IC0xOworCisJLyogZG8gdGhlIG9wdGltaXphdGlvbiBpdHNl bGYgKi8KKwlpZiAobXZzdGF0X3NlYXJjaF90eXBlID09IE1WU1RBVF9TRUFS Q0hfRVhIQVVTVElWRSkKKwkJY2hvb3NlX212X3N0YXRpc3RpY3NfZXhoYXVz dGl2ZShyb290LCAwLAorCQkJCQkJCQkJICAgbm12c3RhdHMsIG12c3RhdHMs IHN0YXRzX2F0dG51bXMsCisJCQkJCQkJCQkgICBuY2xhdXNlcywgY2xhdXNl c19hcnJheSwgY2xhdXNlc19hdHRudW1zLAorCQkJCQkJCQkJICAgbmNvbmRp dGlvbnMsIGNvbmRpdGlvbnNfYXJyYXksIGNvbmRpdGlvbnNfYXR0bnVtcywK KwkJCQkJCQkJCSAgIGNsYXVzZV9jb3Zlcl9tYXAsIGNvbmRpdGlvbl9jb3Zl cl9tYXAsCisJCQkJCQkJCQkgICBydWxlZF9vdXQsIE5VTEwsICZiZXN0KTsK KwllbHNlCisJCWNob29zZV9tdl9zdGF0aXN0aWNzX2dyZWVkeShyb290LCAw LAorCQkJCQkJCQkJICAgbm12c3RhdHMsIG12c3RhdHMsIHN0YXRzX2F0dG51 bXMsCisJCQkJCQkJCQkgICBuY2xhdXNlcywgY2xhdXNlc19hcnJheSwgY2xh dXNlc19hdHRudW1zLAorCQkJCQkJCQkJICAgbmNvbmRpdGlvbnMsIGNvbmRp dGlvbnNfYXJyYXksIGNvbmRpdGlvbnNfYXR0bnVtcywKKwkJCQkJCQkJCSAg IGNsYXVzZV9jb3Zlcl9tYXAsIGNvbmRpdGlvbl9jb3Zlcl9tYXAsCisJCQkJ CQkJCQkgICBydWxlZF9vdXQsIE5VTEwsICZiZXN0KTsKKworCS8qIGNyZWF0 ZSBhIGxpc3Qgb2Ygc3RhdGlzdGljcyBmcm9tIHRoZSBhcnJheSAqLworCWlm IChiZXN0ICE9IE5VTEwpCisJeworCQlmb3IgKGkgPSAwOyBpIDwgYmVzdC0+ bnN0YXRzOyBpKyspCiAJCXsKLQkJCS8qIGFyZSBhbGwgdGhlIGF0dHJpYnV0 ZXMgcGFydCBvZiB0aGUgc2VsZWN0ZWQgc3RhdHM/ICovCi0JCQlpZiAoYm1z X2lzX3N1YnNldChhdHRudW1zLCBtdmF0dG51bXMpKQotCQkJCW1hdGNoID0g dHJ1ZTsKKwkJCU1WU3RhdGlzdGljSW5mbyAqaW5mbyA9IG1ha2VOb2RlKE1W U3RhdGlzdGljSW5mbyk7CisJCQltZW1jcHkoaW5mbywgJm12c3RhdHNbYmVz dC0+c3RhdHNbaV1dLCBzaXplb2YoTVZTdGF0aXN0aWNJbmZvKSk7CisJCQly ZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgaW5mbyk7CiAJCX0KIAotCQkvKgot CQkgKiBUaGUgY2xhdXNlIG1hdGNoZXMgdGhlIHNlbGVjdGVkIHN0YXRzLCBz byBwdXQgaXQgdG8gdGhlIGxpc3Qgb2YKLQkJICogbXYtY29tcGF0aWJsZSBj bGF1c2VzLiBPdGhlcndpc2UsIGtlZXAgaXQgaW4gdGhlIGxpc3Qgb2YgJ3Jl Z3VsYXInCi0JCSAqIGNsYXVzZXMgKHRoYXQgbWF5IGJlIHNlbGVjdGVkIGxh dGVyKS4KLQkJICovCi0JCWlmIChtYXRjaCkKLQkJCSptdmNsYXVzZXMgPSBs YXBwZW5kKCptdmNsYXVzZXMsIGNsYXVzZSk7Ci0JCWVsc2UKLQkJCW5vbl9t dmNsYXVzZXMgPSBsYXBwZW5kKG5vbl9tdmNsYXVzZXMsIGNsYXVzZSk7CisJ CXBmcmVlKGJlc3QpOwogCX0KIAotCS8qCi0JICogUGVyZm9ybSByZWd1bGFy IGVzdGltYXRpb24gdXNpbmcgdGhlIGNsYXVzZXMgaW5jb21wYXRpYmxlIHdp dGggdGhlIGNob3NlbgotCSAqIGhpc3RvZ3JhbSAob3IgTVYgc3RhdHMgaW4g Z2VuZXJhbCkuCi0JICovCi0JcmV0dXJuIG5vbl9tdmNsYXVzZXM7CisJLyog Y2xlYW51cCAobWF5YmUgbGVhdmUgaXQgdXAgdG8gdGhlIG1lbW9yeSBjb250 ZXh0PykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKKwkJ Ym1zX2ZyZWUoc3RhdHNfYXR0bnVtc1tpXSk7CiAKKwlmb3IgKGkgPSAwOyBp IDwgbmNsYXVzZXM7IGkrKykKKwkJYm1zX2ZyZWUoY2xhdXNlc19hdHRudW1z W2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29uZGl0aW9uczsgaSsrKQor CQlibXNfZnJlZShjb25kaXRpb25zX2F0dG51bXNbaV0pOworCisJcGZyZWUo c3RhdHNfYXR0bnVtcyk7CisJcGZyZWUoY2xhdXNlc19hdHRudW1zKTsKKwlw ZnJlZShjb25kaXRpb25zX2F0dG51bXMpOworCisJcGZyZWUoY2xhdXNlc19h cnJheSk7CisJcGZyZWUoY29uZGl0aW9uc19hcnJheSk7CisJcGZyZWUoY2xh dXNlX2NvdmVyX21hcCk7CisJcGZyZWUoY29uZGl0aW9uX2NvdmVyX21hcCk7 CisJcGZyZWUocnVsZWRfb3V0KTsKKwlwZnJlZShtdnN0YXRzKTsKKworCWxp c3RfZnJlZShjbGF1c2VzKTsKKwlsaXN0X2ZyZWUoY29uZGl0aW9ucyk7CisJ bGlzdF9mcmVlKHN0YXRzKTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKIHR5 cGVkZWYgc3RydWN0CkBAIC0xNjM3LDkgKzI4NzgsNiBAQCBoYXNfc3RhdHMo TGlzdCAqc3RhdHMsIGludCB0eXBlKQogCQkvKiB0ZXJtaW5hdGUgaWYgd2Un dmUgZm91bmQgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHN0YXRpc3RpY3MgKi8K IAkJaWYgKHN0YXRzX3R5cGVfbWF0Y2hlcyhzdGF0LCB0eXBlKSkKIAkJCXJl dHVybiB0cnVlOwotCi0JCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX0hJ U1QpICYmIHN0YXQtPmhpc3RfYnVpbHQpCi0JCQlyZXR1cm4gdHJ1ZTsKIAl9 CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0xNjg5LDIyICsyOTI3LDI2IEBAIGZp bmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlkKQogICog ICAgICBhcyB0aGUgY2xhdXNlcyBhcmUgcHJvY2Vzc2VkIChhbmQgc2tpcCBp dGVtcyB0aGF0IGFyZSAnbWF0Y2gnKS4KICAqLwogc3RhdGljIFNlbGVjdGl2 aXR5Ci1jbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3QoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCi0JCQkJCQkJCSAgTVZTdGF0 aXN0aWNJbmZvICptdnN0YXRzLCBib29sICpmdWxsbWF0Y2gsCi0JCQkJCQkJ CSAgU2VsZWN0aXZpdHkgKmxvd3NlbCkKK2NsYXVzZWxpc3RfbXZfc2VsZWN0 aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTVZTdGF0aXN0aWNJ bmZvICptdnN0YXRzLAorCQkJCQkJCQkgIExpc3QgKmNsYXVzZXMsIExpc3Qg KmNvbmRpdGlvbnMsIGJvb2wgaXNfb3IsCisJCQkJCQkJCSAgYm9vbCAqZnVs bG1hdGNoLCBTZWxlY3Rpdml0eSAqbG93c2VsKQogewogCWludCBpOwogCVNl bGVjdGl2aXR5IHMgPSAwLjA7CisJU2VsZWN0aXZpdHkgdCA9IDAuMDsKIAlT ZWxlY3Rpdml0eSB1ID0gMC4wOwogCiAJTUNWTGlzdCBtY3ZsaXN0ID0gTlVM TDsKKwogCWludAlubWF0Y2hlcyA9IDA7CisJaW50CW5jb25kaXRpb25zID0g MDsKIAogCS8qIG1hdGNoL21pc21hdGNoIGJpdG1hcCBmb3IgZWFjaCBNQ1Yg aXRlbSAqLwogCWNoYXIgKiBtYXRjaGVzID0gTlVMTDsKKwljaGFyICogY29u ZGl0aW9uX21hdGNoZXMgPSBOVUxMOwogCiAJQXNzZXJ0KGNsYXVzZXMgIT0g TklMKTsKLQlBc3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMik7CisJ QXNzZXJ0KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDEpOwogCiAJLyogdGhl cmUncyBubyBNQ1YgbGlzdCBidWlsdCB5ZXQgKi8KIAlpZiAoISBtdnN0YXRz LT5tY3ZfYnVpbHQpCkBAIC0xNzE1LDMyICsyOTU3LDg1IEBAIGNsYXVzZWxp c3RfbXZfc2VsZWN0aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqY2xhdXNlcywKIAlBc3NlcnQobWN2bGlzdCAhPSBOVUxMKTsKIAlB c3NlcnQobWN2bGlzdC0+bml0ZW1zID4gMCk7CiAKLQkvKiBieSBkZWZhdWx0 IGFsbCB0aGUgTUNWIGl0ZW1zIG1hdGNoIHRoZSBjbGF1c2VzIGZ1bGx5ICov Ci0JbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbWN2bGlzdC0+ bml0ZW1zKTsKLQltZW1zZXQobWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxM LCBzaXplb2YoY2hhcikqbWN2bGlzdC0+bml0ZW1zKTsKLQogCS8qIG51bWJl ciBvZiBtYXRjaGluZyBNQ1YgaXRlbXMgKi8KIAlubWF0Y2hlcyA9IG1jdmxp c3QtPm5pdGVtczsKKwluY29uZGl0aW9ucyA9IG1jdmxpc3QtPm5pdGVtczsK KworCS8qCisJICogQml0bWFwIG9mIGJ1Y2tldCBtYXRjaGVzIChtaXNtYXRj aCwgcGFydGlhbCwgZnVsbCkuCisJICoKKwkgKiBGb3IgQU5EIGNsYXVzZXMg YWxsIGJ1Y2tldHMgbWF0Y2ggKGFuZCB3ZSdsbCBlbGltaW5hdGUgdGhlbSku CisJICogRm9yIE9SICBjbGF1c2VzIG5vICBidWNrZXRzIG1hdGNoIChhbmQg d2UnbGwgYWRkIHRoZW0pLgorCSAqCisJICogV2Ugb25seSBuZWVkIHRvIGRv IHRoZSBtZW1zZXQgZm9yIEFORCBjbGF1c2VzIChmb3IgT1IgY2xhdXNlcwor CSAqIGl0J3MgYWxyZWFkeSBzZXQgY29ycmVjdGx5IGJ5IHRoZSBwYWxsb2Mw KS4KKwkgKi8KKwltYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBu bWF0Y2hlcyk7CisKKwlpZiAoISBpc19vcikgLyogQU5ELWNsYXVzZSAqLwor CQltZW1zZXQobWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2Yo Y2hhcikqbm1hdGNoZXMpOwogCisJLyogQ29uZGl0aW9ucyBhcmUgdHJlYXRl ZCBhcyBBTkQgY2xhdXNlLCBzbyBtYXRjaCBieSBkZWZhdWx0LiAqLworCWNv bmRpdGlvbl9tYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBuY29u ZGl0aW9ucyk7CisJbWVtc2V0KGNvbmRpdGlvbl9tYXRjaGVzLCBNVlNUQVRT X01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSpuY29uZGl0aW9ucyk7CisKKwkv KgorCSAqIGJ1aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBjb25kaXRp b25zIChjb25kaXRpb25zIGFyZSBhbHdheXMKKwkgKiBjb25uZWN0ZWQgYnkg QU5EKQorCSAqLworCWlmIChjb25kaXRpb25zICE9IE5JTCkKKwkJbmNvbmRp dGlvbnMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3Qocm9vdCwgY29u ZGl0aW9ucywKKwkJCQkJCQkJCSAgIG12c3RhdHMtPnN0YWtleXMsIG1jdmxp c3QsCisJCQkJCQkJCQkgICBuY29uZGl0aW9ucywgY29uZGl0aW9uX21hdGNo ZXMsCisJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgZmFsc2UpOwor CisJLyoKKwkgKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgZXN0 aW1hdGVkIGNsYXVzZXMKKwkgKgorCSAqIFRPRE8gVGhpcyBldmFsdWF0ZXMg dGhlIGNsYXVzZXMgZm9yIGFsbCBNQ1YgaXRlbXMsIGV2ZW4gdGhvc2UKKwkg KiAgICAgIHJ1bGVkIG91dCBieSB0aGUgY29uZGl0aW9ucy4gVGhlIGZpbmFs IHJlc3VsdCBzaG91bGQgYmUgdGhlCisJICogICAgICBzYW1lLCBidXQgaXQg bWlnaHQgYmUgZmFzdGVyLgorCSAqLwogCW5tYXRjaGVzID0gdXBkYXRlX21h dGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMsCiAJCQkJCQkJCQkJ ICAgbXZzdGF0cy0+c3Rha2V5cywgbWN2bGlzdCwKLQkJCQkJCQkJCQkgICBu bWF0Y2hlcywgbWF0Y2hlcywKLQkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxt YXRjaCwgZmFsc2UpOworCQkJCQkJCQkJCSAgICgoaXNfb3IpID8gMCA6IG5t YXRjaGVzKSwgbWF0Y2hlcywKKwkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxt YXRjaCwgaXNfb3IpOwogCiAJLyogc3VtIGZyZXF1ZW5jaWVzIGZvciBhbGwg dGhlIG1hdGNoaW5nIE1DViBpdGVtcyAqLwogCWZvciAoaSA9IDA7IGkgPCBt Y3ZsaXN0LT5uaXRlbXM7IGkrKykKIAl7Ci0JCS8qIHVzZWQgdG8gJ3NjYWxl JyBmb3IgTUNWIGxpc3RzIG5vdCBjb3ZlcmluZyBhbGwgdHVwbGVzICovCisJ CS8qCisJCSAqIEZpbmQgb3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0YSBpcyBj b3ZlcmVkIGJ5IHRoZSBNQ1YgbGlzdCwKKwkJICogc28gdGhhdCB3ZSBjYW4g J3NjYWxlJyB0aGUgc2VsZWN0aXZpdHkgcHJvcGVybHkgKGUuZy4gd2hlbgor CQkgKiBvbmx5IDUwJSBvZiB0aGUgc2FtcGxlIGl0ZW1zIGdvdCBpbnRvIHRo ZSBNQ1YsIGFuZCB0aGUgcmVzdAorCQkgKiBpcyBlaXRoZXIgaW4gYSBoaXN0 b2dyYW0sIG9yIG5vdCBjb3ZlcmVkIGJ5IHN0YXRzKS4KKwkJICoKKwkJICog VE9ETyBUaGlzIG1pZ2h0IGJlIGhhbmRsZWQgYnkga2VlcGluZyBhIGdsb2Jh bCAiZnJlcXVlbmN5IgorCQkgKiAgICAgIGZvciB0aGUgd2hvbGUgbGlzdCwg d2hpY2ggbWlnaHQgc2F2ZSB1cyBhIGJpdCBvZiB0aW1lCisJCSAqICAgICAg c3BlbnQgb24gYWNjZXNzaW5nIHRoZSBub3QtbWF0Y2hpbmcgcGFydCBvZiB0 aGUgTUNWIGxpc3QuCisJCSAqICAgICAgQWx0aG91Z2ggaXQncyBsaWtlbHkg aW4gYSBjYWNoZSwgc28gaXQncyB2ZXJ5IGZhc3QuCisJCSAqLwogCQl1ICs9 IG1jdmxpc3QtPml0ZW1zW2ldLT5mcmVxdWVuY3k7CiAKKwkJLyogc2tpdCBN Q1YgaXRlbXMgbm90IG1hdGNoaW5nIHRoZSBjb25kaXRpb25zICovCisJCWlm IChjb25kaXRpb25fbWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUp CisJCQljb250aW51ZTsKKwogCQlpZiAobWF0Y2hlc1tpXSAhPSBNVlNUQVRT X01BVENIX05PTkUpCiAJCQlzICs9IG1jdmxpc3QtPml0ZW1zW2ldLT5mcmVx dWVuY3k7CisKKwkJdCArPSBtY3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVlbmN5 OwogCX0KIAogCXBmcmVlKG1hdGNoZXMpOworCXBmcmVlKGNvbmRpdGlvbl9t YXRjaGVzKTsKIAlwZnJlZShtY3ZsaXN0KTsKIAotCXJldHVybiBzKnU7CisJ Lyogbm8gY29uZGl0aW9uIG1hdGNoZXMgKi8KKwlpZiAodCA9PSAwLjApCisJ CXJldHVybiAoU2VsZWN0aXZpdHkpMC4wOworCisJcmV0dXJuIChzIC8gdCkg KiB1OwogfQogCiAvKgpAQCAtMTk3MSw2NCArMzI2Niw1NyBAQCB1cGRhdGVf bWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsCiAJCQkJfQogCQkJfQogCQl9Ci0JCWVsc2UgaWYgKG9yX2Ns YXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNlKSkKKwkJZWxzZSBp ZiAob3JfY2xhdXNlKGNsYXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1c2UpIHx8 IG5vdF9jbGF1c2UoY2xhdXNlKSkKIAkJewogCQkJLyogQU5EL09SIGNsYXVz ZSwgd2l0aCBhbGwgY2xhdXNlcyBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVj dGVkIE1WIHN0YXQgKi8KIAogCQkJaW50CQkJaTsKLQkJCUJvb2xFeHByICAg Km9yY2xhdXNlICA9ICgoQm9vbEV4cHIqKWNsYXVzZSk7Ci0JCQlMaXN0CSAg ICpvcmNsYXVzZXMgPSBvcmNsYXVzZS0+YXJnczsKKwkJCUxpc3QJICAgKnRt cF9jbGF1c2VzID0gKChCb29sRXhwciopY2xhdXNlKS0+YXJnczsKIAogCQkJ LyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFwIGZvciBlYWNoIE1DViBpdGVtICov Ci0JCQlpbnQJb3Jfbm1hdGNoZXMgPSAwOwotCQkJY2hhciAqIG9yX21hdGNo ZXMgPSBOVUxMOworCQkJaW50CXRtcF9ubWF0Y2hlcyA9IDA7CisJCQljaGFy ICogdG1wX21hdGNoZXMgPSBOVUxMOwogCi0JCQlBc3NlcnQob3JjbGF1c2Vz ICE9IE5JTCk7Ci0JCQlBc3NlcnQobGlzdF9sZW5ndGgob3JjbGF1c2VzKSA+ PSAyKTsKKwkJCUFzc2VydCh0bXBfY2xhdXNlcyAhPSBOSUwpOworCQkJQXNz ZXJ0KChsaXN0X2xlbmd0aCh0bXBfY2xhdXNlcykgPj0gMikgfHwgKG5vdF9j bGF1c2UoY2xhdXNlKSAmJiAobGlzdF9sZW5ndGgodG1wX2NsYXVzZXMpPT0x KSkpOwogCiAJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgTUNWIGl0ZW1zICov Ci0JCQlvcl9ubWF0Y2hlcyA9IG1jdmxpc3QtPm5pdGVtczsKKwkJCXRtcF9u bWF0Y2hlcyA9IChvcl9jbGF1c2UoY2xhdXNlKSkgPyAwIDogbWN2bGlzdC0+ bml0ZW1zOwogCiAJCQkvKiBieSBkZWZhdWx0IG5vbmUgb2YgdGhlIE1DViBp dGVtcyBtYXRjaGVzIHRoZSBjbGF1c2VzICovCi0JCQlvcl9tYXRjaGVzID0g cGFsbG9jMChzaXplb2YoY2hhcikgKiBvcl9ubWF0Y2hlcyk7CisJCQl0bXBf bWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbWN2bGlzdC0+bml0 ZW1zKTsKIAotCQkJaWYgKG9yX2NsYXVzZShjbGF1c2UpKQotCQkJewotCQkJ CS8qIE9SIGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlh bGx5ICovCi0JCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hf Tk9ORSwgc2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJCQlvcl9ubWF0 Y2hlcyA9IDA7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQU5EIGNs YXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0J CQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6 ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJCX0KKwkJCS8qIEFORCAoYW5k IE5PVCkgY2xhdXNlcyBhc3N1bWUgZXZlcnl0aGluZyBtYXRjaGVzLCBpbml0 aWFsbHkgKi8KKwkJCWlmICghIG9yX2NsYXVzZShjbGF1c2UpKQorCQkJCW1l bXNldCh0bXBfbWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2Yo Y2hhcikqbWN2bGlzdC0+bml0ZW1zKTsKIAogCQkJLyogYnVpbGQgdGhlIG1h dGNoIGJpdG1hcCBmb3IgdGhlIE9SLWNsYXVzZXMgKi8KLQkJCW9yX25tYXRj aGVzID0gdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIG9yY2xh dXNlcywKKwkJCXRtcF9ubWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9iaXRtYXBf bWN2bGlzdChyb290LCB0bXBfY2xhdXNlcywKIAkJCQkJCQkJCSAgIHN0YWtl eXMsIG1jdmxpc3QsCi0JCQkJCQkJCQkgICBvcl9ubWF0Y2hlcywgb3JfbWF0 Y2hlcywKKwkJCQkJCQkJCSAgIHRtcF9ubWF0Y2hlcywgdG1wX21hdGNoZXMs CiAJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgb3JfY2xhdXNlKGNs YXVzZSkpOwogCiAJCQkvKiBtZXJnZSB0aGUgYml0bWFwIGludG8gdGhlIGV4 aXN0aW5nIG9uZSovCiAJCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+bml0 ZW1zOyBpKyspCiAJCQl7CisJCQkJLyogaWYgdGhpcyBpcyBhIE5PVCBjbGF1 c2UsIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSByZXN1bHRzIGZpcnN0ICovCisJ CQkJaWYgKG5vdF9jbGF1c2UoY2xhdXNlKSkKKwkJCQkJdG1wX21hdGNoZXNb aV0gPSAoTVZTVEFUU19NQVRDSF9GVUxMIC0gdG1wX21hdGNoZXNbaV0pOwor CiAJCQkJLyoKIAkJCQkgKiBUbyBBTkQtbWVyZ2UgdGhlIGJpdG1hcHMsIGEg TUlOKCkgc2VtYW50aWNzIGlzIHVzZWQuCiAJCQkJICogRm9yIE9SLW1lcmdl LCB1c2UgTUFYKCkuCiAJCQkJICoKIAkJCQkgKiBGSVhNRSB0aGlzIGRvZXMg bm90IGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgbWF0Y2hlcwogCQkJCSAqLwot CQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgb3JfbWF0Y2hlc1tpXSwg aXNfb3IpOworCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgdG1wX21h dGNoZXNbaV0sIGlzX29yKTsKIAkJCX0KIAotCQkJcGZyZWUob3JfbWF0Y2hl cyk7CisJCQlwZnJlZSh0bXBfbWF0Y2hlcyk7CiAKIAkJfQogCQllbHNlCi0J CXsKIAkJCWVsb2coRVJST1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAlZCIs IGNsYXVzZS0+dHlwZSk7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMjA4NiwxNSAr MzM3NCwxOCBAQCB1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAgKiAgICAgIHRoaXMgaXMg bm90IHVuY29tbW9uLCBidXQgZm9yIGhpc3RvZ3JhbXMgaXQncyBub3QgdGhh dCBjbGVhci4KICAqLwogc3RhdGljIFNlbGVjdGl2aXR5Ci1jbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqY2xhdXNlcywKLQkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAqbXZz dGF0cykKK2NsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBs YW5uZXJJbmZvICpyb290LCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCisJ CQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zLCBib29s IGlzX29yKQogewogCWludCBpOwogCVNlbGVjdGl2aXR5IHMgPSAwLjA7CisJ U2VsZWN0aXZpdHkgdCA9IDAuMDsKIAlTZWxlY3Rpdml0eSB1ID0gMC4wOwog CiAJaW50CQlubWF0Y2hlcyA9IDA7CisJaW50CQluY29uZGl0aW9ucyA9IDA7 CiAJY2hhciAgICptYXRjaGVzID0gTlVMTDsKKwljaGFyICAgKmNvbmRpdGlv bl9tYXRjaGVzID0gTlVMTDsKIAogCU1WU2VyaWFsaXplZEhpc3RvZ3JhbSBt dmhpc3QgPSBOVUxMOwogCkBAIC0yMTA3LDI1ICszMzk4LDU1IEBAIGNsYXVz ZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpjbGF1c2VzLAogCiAJQXNzZXJ0IChtdmhpc3QgIT0gTlVM TCk7CiAJQXNzZXJ0IChjbGF1c2VzICE9IE5JTCk7Ci0JQXNzZXJ0IChsaXN0 X2xlbmd0aChjbGF1c2VzKSA+PSAyKTsKKwlBc3NlcnQgKGxpc3RfbGVuZ3Ro KGNsYXVzZXMpID49IDEpOworCisJbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNr ZXRzOworCW5jb25kaXRpb25zID0gbXZoaXN0LT5uYnVja2V0czsKIAogCS8q Ci0JICogQml0bWFwIG9mIGJ1Y2tldCBtYXRjaGVzIChtaXNtYXRjaCwgcGFy dGlhbCwgZnVsbCkuIGJ5IGRlZmF1bHQKLQkgKiBhbGwgYnVja2V0cyBmdWxs eSBtYXRjaCAoYW5kIHdlJ2xsIGVsaW1pbmF0ZSB0aGVtKS4KKwkgKiBCaXRt YXAgb2YgYnVja2V0IG1hdGNoZXMgKG1pc21hdGNoLCBwYXJ0aWFsLCBmdWxs KS4KKwkgKgorCSAqIEZvciBBTkQgY2xhdXNlcyBhbGwgYnVja2V0cyBtYXRj aCAoYW5kIHdlJ2xsIGVsaW1pbmF0ZSB0aGVtKS4KKwkgKiBGb3IgT1IgIGNs YXVzZXMgbm8gIGJ1Y2tldHMgbWF0Y2ggKGFuZCB3ZSdsbCBhZGQgdGhlbSku CisJICoKKwkgKiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhlIG1lbXNldCBmb3Ig QU5EIGNsYXVzZXMgKGZvciBPUiBjbGF1c2VzCisJICogaXQncyBhbHJlYWR5 IHNldCBjb3JyZWN0bHkgYnkgdGhlIHBhbGxvYzApLgogCSAqLwotCW1hdGNo ZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG12aGlzdC0+bmJ1Y2tldHMp OwotCW1lbXNldChtYXRjaGVzLCAgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXpl b2YoY2hhcikqbXZoaXN0LT5uYnVja2V0cyk7CisJbWF0Y2hlcyA9IHBhbGxv YzAoc2l6ZW9mKGNoYXIpICogbm1hdGNoZXMpOwogCi0Jbm1hdGNoZXMgPSBt dmhpc3QtPm5idWNrZXRzOworCWlmICghIGlzX29yKSAvKiBBTkQtY2xhdXNl ICovCisJCW1lbXNldChtYXRjaGVzLCBNVlNUQVRTX01BVENIX0ZVTEwsIHNp emVvZihjaGFyKSpubWF0Y2hlcyk7CisKKwkvKiBDb25kaXRpb25zIGFyZSB0 cmVhdGVkIGFzIEFORCBjbGF1c2UsIHNvIG1hdGNoIGJ5IGRlZmF1bHQuICov CisJY29uZGl0aW9uX21hdGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSpu Y29uZGl0aW9ucyk7CisJbWVtc2V0KGNvbmRpdGlvbl9tYXRjaGVzLCBNVlNU QVRTX01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSpuY29uZGl0aW9ucyk7CisK KwkvKgorCSAqIGJ1aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBjb25k aXRpb25zIChjb25kaXRpb25zIGFyZSBhbHdheXMKKwkgKiBjb25uZWN0ZWQg YnkgQU5EKQorCSAqLworCWlmIChjb25kaXRpb25zICE9IE5JTCkKKwkJdXBk YXRlX21hdGNoX2JpdG1hcF9oaXN0b2dyYW0ocm9vdCwgY29uZGl0aW9ucywK KwkJCQkJCQkJICBtdnN0YXRzLT5zdGFrZXlzLCBtdmhpc3QsCisJCQkJCQkJ CSAgbmNvbmRpdGlvbnMsIGNvbmRpdGlvbl9tYXRjaGVzLCBmYWxzZSk7CiAK LQkvKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwICovCisJLyoKKwkgKiBidWls ZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgZXN0aW1hdGVkIGNsYXVzZXMK KwkgKgorCSAqIFRPRE8gVGhpcyBldmFsdWF0ZXMgdGhlIGNsYXVzZXMgZm9y IGFsbCBidWNrZXRzLCBldmVuIHRob3NlCisJICogICAgICBydWxlZCBvdXQg YnkgdGhlIGNvbmRpdGlvbnMuIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJl CisJICogICAgICB0aGUgc2FtZSwgYnV0IGl0IG1pZ2h0IGJlIGZhc3Rlci4K KwkgKi8KIAl1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290LCBj bGF1c2VzLAogCQkJCQkJCQkgIG12c3RhdHMtPnN0YWtleXMsIG12aGlzdCwK LQkJCQkJCQkJICBubWF0Y2hlcywgbWF0Y2hlcywgZmFsc2UpOworCQkJCQkJ CQkgICgoaXNfb3IpID8gMCA6IG5tYXRjaGVzKSwgbWF0Y2hlcywKKwkJCQkJ CQkJICBpc19vcik7CiAKIAkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUgYnVj a2V0cyBhbmQgc3VtIHRoZSBzZWxlY3Rpdml0aWVzICovCiAJZm9yIChpID0g MDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKIAl7CisJCWZsb2F0IGNv ZWZmID0gMS4wOworCiAJCS8qCiAJCSAqIEZpbmQgb3V0IHdoYXQgcGFydCBv ZiB0aGUgZGF0YSBpcyBjb3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0sCiAJCSAq IHNvIHRoYXQgd2UgY2FuICdzY2FsZScgdGhlIHNlbGVjdGl2aXR5IHByb3Bl cmx5IChlLmcuIHdoZW4KQEAgLTIxMzksMTAgKzM0NjAsMjMgQEAgY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsCiAJCSAqLwogCQl1ICs9IG12aGlzdC0+YnVj a2V0c1tpXS0+bnR1cGxlczsKIAorCQkvKiBza2lwIGJ1Y2tldHMgbm90IG1h dGNoaW5nIHRoZSBjb25kaXRpb25zICovCisJCWlmIChjb25kaXRpb25fbWF0 Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUpCisJCQljb250aW51ZTsK KwkJZWxzZSBpZiAoY29uZGl0aW9uX21hdGNoZXNbaV0gPT0gTVZTVEFUU19N QVRDSF9QQVJUSUFMKQorCQkJY29lZmYgPSAwLjU7CisKKwkJdCArPSBjb2Vm ZiAqIG12aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwogCQlpZiAobWF0 Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpCi0JCQlzICs9IG12aGlz dC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwkJCXMgKz0gY29lZmYgKiBtdmhp c3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CiAJCWVsc2UgaWYgKG1hdGNoZXNb aV0gPT0gTVZTVEFUU19NQVRDSF9QQVJUSUFMKQotCQkJcyArPSAwLjUgKiBt dmhpc3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CisJCQkvKgorCQkJICogVE9E TyBJZiBib3RoIGNvbmRpdGlvbnMgYW5kIGNsYXVzZXMgbWF0Y2ggcGFydGlh bGx5LCB0aGlzCisJCQkgKiAgICAgIHdpbGwgdXNlIDAuMjUgbWF0Y2ggLSBu b3Qgc3VyZSBpZiB0aGF0J3MgdGhlIHJpZ2h0CisJCQkgKiAgICAgIHRoaW5n IHNvbHV0aW9uLCBidXQgc2VlbXMgYWJvdXQgcmlnaHQuCisJCQkgKi8KKwkJ CXMgKz0gY29lZmYgKiAwLjUgKiBtdmhpc3QtPmJ1Y2tldHNbaV0tPm50dXBs ZXM7CiAJfQogCiAjaWZkZWYgREVCVUdfTVZISVNUCkBAIC0yMTUxLDkgKzM0 ODUsMTQgQEAgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dyYW0o UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAKIAkvKiByZWxl YXNlIHRoZSBhbGxvY2F0ZWQgYml0bWFwIGFuZCBkZXNlcmlhbGl6ZWQgaGlz dG9ncmFtICovCiAJcGZyZWUobWF0Y2hlcyk7CisJcGZyZWUoY29uZGl0aW9u X21hdGNoZXMpOwogCXBmcmVlKG12aGlzdCk7CiAKLQlyZXR1cm4gcyAqIHU7 CisJLyogbm8gY29uZGl0aW9uIG1hdGNoZXMgKi8KKwlpZiAodCA9PSAwLjAp CisJCXJldHVybiAoU2VsZWN0aXZpdHkpMC4wOworCisJcmV0dXJuIChzIC8g dCkgKiB1OwogfQogCiAvKiBjYWNoZWQgcmVzdWx0IG9mIGJ1Y2tldCBib3Vu ZGFyeSBjb21wYXJpc29uIGZvciBhIHNpbmdsZSBkaW1lbnNpb24gKi8KQEAg LTIzMDEsNyArMzY0MCw3IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9n cmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogewogCWlu dCBpOwogCUxpc3RDZWxsICogbDsKLQorIAogCS8qCiAJICogVXNlZCBmb3Ig Y2FjaGluZyBmdW5jdGlvbiBjYWxscywgb25seSBvbmNlIHBlciBkZWR1cGxp Y2F0ZWQgdmFsdWUuCiAJICoKQEAgLTIzNDQsNyArMzY4Myw3IEBAIHVwZGF0 ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLAogCiAJCQlGbWdySW5mbwlvcHByb2M7CQkJLyogb3Bl cmF0b3IgKi8KIAkJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9wbm8p LCAmb3Bwcm9jKTsKLQorIAogCQkJLyogcmVzZXQgdGhlIGNhY2hlIChwZXIg Y2xhdXNlKSAqLwogCQkJbWVtc2V0KGNhbGxjYWNoZSwgMCwgbXZoaXN0LT5u YnVja2V0cyk7CiAKQEAgLTI1MDQsNjQgKzM4NDMsNTcgQEAgdXBkYXRlX21h dGNoX2JpdG1hcF9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsCiAJCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgTVZT VEFUU19NQVRDSF9OT05FLCBpc19vcik7CiAJCQl9CiAJCX0KLQkJZWxzZSBp ZiAob3JfY2xhdXNlKGNsYXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1c2UpKQor CQllbHNlIGlmIChvcl9jbGF1c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNlKGNs YXVzZSkgfHwgbm90X2NsYXVzZShjbGF1c2UpKQogCQl7CiAJCQkvKiBBTkQv T1IgY2xhdXNlLCB3aXRoIGFsbCBjbGF1c2VzIGNvbXBhdGlibGUgd2l0aCB0 aGUgc2VsZWN0ZWQgTVYgc3RhdCAqLwogCiAJCQlpbnQJCQlpOwotCQkJQm9v bEV4cHIgICAqb3JjbGF1c2UgID0gKChCb29sRXhwciopY2xhdXNlKTsKLQkJ CUxpc3QJICAgKm9yY2xhdXNlcyA9IG9yY2xhdXNlLT5hcmdzOworCQkJTGlz dAkgICAqdG1wX2NsYXVzZXMgPSAoKEJvb2xFeHByKiljbGF1c2UpLT5hcmdz OwogCiAJCQkvKiBtYXRjaC9taXNtYXRjaCBiaXRtYXAgZm9yIGVhY2ggYnVj a2V0ICovCi0JCQlpbnQJb3Jfbm1hdGNoZXMgPSAwOwotCQkJY2hhciAqIG9y X21hdGNoZXMgPSBOVUxMOworCQkJaW50CXRtcF9ubWF0Y2hlcyA9IDA7CisJ CQljaGFyICogdG1wX21hdGNoZXMgPSBOVUxMOwogCi0JCQlBc3NlcnQob3Jj bGF1c2VzICE9IE5JTCk7Ci0JCQlBc3NlcnQobGlzdF9sZW5ndGgob3JjbGF1 c2VzKSA+PSAyKTsKKwkJCUFzc2VydCh0bXBfY2xhdXNlcyAhPSBOSUwpOwor CQkJQXNzZXJ0KChsaXN0X2xlbmd0aCh0bXBfY2xhdXNlcykgPj0gMikgfHwg KG5vdF9jbGF1c2UoY2xhdXNlKSAmJiAobGlzdF9sZW5ndGgodG1wX2NsYXVz ZXMpPT0xKSkpOwogCiAJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgYnVja2V0 cyAqLwotCQkJb3Jfbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCQkJ dG1wX25tYXRjaGVzID0gKG9yX2NsYXVzZShjbGF1c2UpKSA/IDAgOiBtdmhp c3QtPm5idWNrZXRzOwogCi0JCQkvKiBieSBkZWZhdWx0IG5vbmUgb2YgdGhl IGJ1Y2tldHMgbWF0Y2hlcyB0aGUgY2xhdXNlcyAqLwotCQkJb3JfbWF0Y2hl cyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogb3Jfbm1hdGNoZXMpOworCQkJ LyogYnkgZGVmYXVsdCBub25lIG9mIHRoZSBidWNrZXRzIG1hdGNoZXMgdGhl IGNsYXVzZXMgKE9SIGNsYXVzZSkgKi8KKwkJCXRtcF9tYXRjaGVzID0gcGFs bG9jMChzaXplb2YoY2hhcikgKiBtdmhpc3QtPm5idWNrZXRzKTsKIAotCQkJ aWYgKG9yX2NsYXVzZShjbGF1c2UpKQotCQkJewotCQkJCS8qIE9SIGNsYXVz ZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0JCQkJ bWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwgc2l6ZW9m KGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJCQlvcl9ubWF0Y2hlcyA9IDA7Ci0J CQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQU5EIGNsYXVzZXMgYXNzdW1l IG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0JCQkJbWVtc2V0KG9y X21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm9y X25tYXRjaGVzKTsKLQkJCX0KKwkJCS8qIGJ1dCBBTkQgKGFuZCBOT1QpIGNs YXVzZXMgYXNzdW1lIGV2ZXJ5dGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICov CisJCQlpZiAoISBvcl9jbGF1c2UoY2xhdXNlKSkKKwkJCQltZW1zZXQodG1w X21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm12 aGlzdC0+bmJ1Y2tldHMpOwogCiAJCQkvKiBidWlsZCB0aGUgbWF0Y2ggYml0 bWFwIGZvciB0aGUgT1ItY2xhdXNlcyAqLwotCQkJb3Jfbm1hdGNoZXMgPSB1 cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290LCBvcmNsYXVzZXMs CisJCQl0bXBfbm1hdGNoZXMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3Rv Z3JhbShyb290LCB0bXBfY2xhdXNlcywKIAkJCQkJCQkJCQlzdGFrZXlzLCBt dmhpc3QsCi0JCQkJCQkJCQkJb3Jfbm1hdGNoZXMsIG9yX21hdGNoZXMsIG9y X2NsYXVzZShjbGF1c2UpKTsKKwkJCQkJCQkJCQl0bXBfbm1hdGNoZXMsIHRt cF9tYXRjaGVzLCBvcl9jbGF1c2UoY2xhdXNlKSk7CiAKIAkJCS8qIG1lcmdl IHRoZSBiaXRtYXAgaW50byB0aGUgZXhpc3Rpbmcgb25lKi8KIAkJCWZvciAo aSA9IDA7IGkgPCBtdmhpc3QtPm5idWNrZXRzOyBpKyspCiAJCQl7CisJCQkJ LyogaWYgdGhpcyBpcyBhIE5PVCBjbGF1c2UsIHdlIG5lZWQgdG8gaW52ZXJ0 IHRoZSByZXN1bHRzIGZpcnN0ICovCisJCQkJaWYgKG5vdF9jbGF1c2UoY2xh dXNlKSkKKwkJCQkJdG1wX21hdGNoZXNbaV0gPSAoTVZTVEFUU19NQVRDSF9G VUxMIC0gdG1wX21hdGNoZXNbaV0pOworCiAJCQkJLyoKIAkJCQkgKiBUbyBB TkQtbWVyZ2UgdGhlIGJpdG1hcHMsIGEgTUlOKCkgc2VtYW50aWNzIGlzIHVz ZWQuCiAJCQkJICogRm9yIE9SLW1lcmdlLCB1c2UgTUFYKCkuCiAJCQkJICoK IAkJCQkgKiBGSVhNRSB0aGlzIGRvZXMgbm90IGRlY3JlYXNlIHRoZSBudW1i ZXIgb2YgbWF0Y2hlcwogCQkJCSAqLwotCQkJCVVQREFURV9SRVNVTFQobWF0 Y2hlc1tpXSwgb3JfbWF0Y2hlc1tpXSwgaXNfb3IpOworCQkJCVVQREFURV9S RVNVTFQobWF0Y2hlc1tpXSwgdG1wX21hdGNoZXNbaV0sIGlzX29yKTsKIAkJ CX0KIAotCQkJcGZyZWUob3JfbWF0Y2hlcyk7Ci0KKwkJCXBmcmVlKHRtcF9t YXRjaGVzKTsKIAkJfQogCQllbHNlCiAJCQllbG9nKEVSUk9SLCAidW5rbm93 biBjbGF1c2UgdHlwZTogJWQiLCBjbGF1c2UtPnR5cGUpOwogCX0KIAotCS8q IGZyZWUgdGhlIGNhbGwgY2FjaGUgKi8KIAlwZnJlZShjYWxsY2FjaGUpOwog CiAJcmV0dXJuIG5tYXRjaGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggNTM1MDMyOS4uNTcyMTRlMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6 ZS5jCkBAIC0zNTE4LDcgKzM1MTgsOCBAQCBjb21wdXRlX3NlbWlfYW50aV9q b2luX2ZhY3RvcnMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlqb2lu cXVhbHMsCiAJCQkJCQkJCQkwLAogCQkJCQkJCQkJam9pbnR5cGUsCi0JCQkJ CQkJCQlzamluZm8pOworCQkJCQkJCQkJc2ppbmZvLAorCQkJCQkJCQkJTklM KTsKIAogCS8qCiAJICogQWxzbyBnZXQgdGhlIG5vcm1hbCBpbm5lci1qb2lu IHNlbGVjdGl2aXR5IG9mIHRoZSBqb2luIGNsYXVzZXMuCkBAIC0zNTQxLDcg KzM1NDIsOCBAQCBjb21wdXRlX3NlbWlfYW50aV9qb2luX2ZhY3RvcnMoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlqb2lucXVhbHMsCiAJCQkJCQkJ CQkwLAogCQkJCQkJCQkJSk9JTl9JTk5FUiwKLQkJCQkJCQkJCSZub3JtX3Nq aW5mbyk7CisJCQkJCQkJCQkmbm9ybV9zamluZm8sCisJCQkJCQkJCQlOSUwp OwogCiAJLyogQXZvaWQgbGVha2luZyBhIGxvdCBvZiBMaXN0Q2VsbHMgKi8K IAlpZiAoam9pbnR5cGUgPT0gSk9JTl9BTlRJKQpAQCAtMzcwOCw3ICszNzEw LDcgQEAgYXBwcm94X3R1cGxlX2NvdW50KFBsYW5uZXJJbmZvICpyb290LCBK b2luUGF0aCAqcGF0aCwgTGlzdCAqcXVhbHMpCiAJCU5vZGUJICAgKnF1YWwg PSAoTm9kZSAqKSBsZmlyc3QobCk7CiAKIAkJLyogTm90ZSB0aGF0IGNsYXVz ZV9zZWxlY3Rpdml0eSB3aWxsIGJlIGFibGUgdG8gY2FjaGUgaXRzIHJlc3Vs dCAqLwotCQlzZWxlYyAqPSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwgcXVh bCwgMCwgSk9JTl9JTk5FUiwgJnNqaW5mbyk7CisJCXNlbGVjICo9IGNsYXVz ZV9zZWxlY3Rpdml0eShyb290LCBxdWFsLCAwLCBKT0lOX0lOTkVSLCAmc2pp bmZvLCBOSUwpOwogCX0KIAogCS8qIEFwcGx5IGl0IHRvIHRoZSBpbnB1dCBy ZWxhdGlvbiBzaXplcyAqLwpAQCAtMzc0NCw3ICszNzQ2LDggQEAgc2V0X2Jh c2VyZWxfc2l6ZV9lc3RpbWF0ZXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCkKIAkJCQkJCQkgICByZWwtPmJhc2VyZXN0cmljdGluZm8s CiAJCQkJCQkJICAgMCwKIAkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJCQkJ CSAgIE5VTEwpOworCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTklMKTsK IAogCXJlbC0+cm93cyA9IGNsYW1wX3Jvd19lc3QobnJvd3MpOwogCkBAIC0z NzgxLDcgKzM3ODQsOCBAQCBnZXRfcGFyYW1ldGVyaXplZF9iYXNlcmVsX3Np emUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJ CQkgICBhbGxjbGF1c2VzLAogCQkJCQkJCSAgIHJlbC0+cmVsaWQsCQkvKiBk byBub3QgdXNlIDAhICovCiAJCQkJCQkJICAgSk9JTl9JTk5FUiwKLQkJCQkJ CQkgICBOVUxMKTsKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5JTCk7 CiAJbnJvd3MgPSBjbGFtcF9yb3dfZXN0KG5yb3dzKTsKIAkvKiBGb3Igc2Fm ZXR5LCBtYWtlIHN1cmUgcmVzdWx0IGlzIG5vdCBtb3JlIHRoYW4gdGhlIGJh c2UgZXN0aW1hdGUgKi8KIAlpZiAobnJvd3MgPiByZWwtPnJvd3MpCkBAIC0z OTE5LDEyICszOTIzLDE0IEBAIGNhbGNfam9pbnJlbF9zaXplX2VzdGltYXRl KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCWpvaW5xdWFscywKIAkJ CQkJCQkJCQkwLAogCQkJCQkJCQkJCWpvaW50eXBlLAotCQkJCQkJCQkJCXNq aW5mbyk7CisJCQkJCQkJCQkJc2ppbmZvLAorCQkJCQkJCQkJCU5JTCk7CiAJ CXBzZWxlYyA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwKIAkJCQkJ CQkJCQlwdXNoZWRxdWFscywKIAkJCQkJCQkJCQkwLAogCQkJCQkJCQkJCWpv aW50eXBlLAotCQkJCQkJCQkJCXNqaW5mbyk7CisJCQkJCQkJCQkJc2ppbmZv LAorCQkJCQkJCQkJCU5JTCk7CiAKIAkJLyogQXZvaWQgbGVha2luZyBhIGxv dCBvZiBMaXN0Q2VsbHMgKi8KIAkJbGlzdF9mcmVlKGpvaW5xdWFscyk7CkBA IC0zOTM2LDcgKzM5NDIsOCBAQCBjYWxjX2pvaW5yZWxfc2l6ZV9lc3RpbWF0 ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlyZXN0cmljdGxpc3Qs CiAJCQkJCQkJCQkJMCwKIAkJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJCQkJ CQlzamluZm8pOworCQkJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJCQlOSUwp OwogCQlwc2VsZWMgPSAwLjA7CQkJLyogbm90IHVzZWQsIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL29yY2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvb3JjbGF1c2VzLmMKaW5kZXggZWE4MzFmNS4uNjI5OWU3NSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3JjbGF1 c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3JjbGF1 c2VzLmMKQEAgLTI4MCw3ICsyODAsNyBAQCBjb25zaWRlcl9uZXdfb3JfY2xh dXNlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICog c2F2aW5nIHdvcmsgbGF0ZXIuKQogCSAqLwogCW9yX3NlbGVjID0gY2xhdXNl X3NlbGVjdGl2aXR5KHJvb3QsIChOb2RlICopIG9yX3JpbmZvLAotCQkJCQkJ CQkgIDAsIEpPSU5fSU5ORVIsIE5VTEwpOworCQkJCQkJCQkgIDAsIEpPSU5f SU5ORVIsIE5VTEwsIE5JTCk7CiAKIAkvKgogCSAqIFRoZSBjbGF1c2UgaXMg b25seSB3b3J0aCBhZGRpbmcgdG8gdGhlIHF1ZXJ5IGlmIGl0IHJlamVjdHMg YSB1c2VmdWwKQEAgLTM0Miw3ICszNDIsNyBAQCBjb25zaWRlcl9uZXdfb3Jf Y2xhdXNlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAK IAkJLyogQ29tcHV0ZSBpbm5lci1qb2luIHNpemUgKi8KIAkJb3JpZ19zZWxl YyA9IGNsYXVzZV9zZWxlY3Rpdml0eShyb290LCAoTm9kZSAqKSBqb2luX29y X3JpbmZvLAotCQkJCQkJCQkJCTAsIEpPSU5fSU5ORVIsICZzamluZm8pOwor CQkJCQkJCQkJCTAsIEpPSU5fSU5ORVIsICZzamluZm8sIE5JTCk7CiAKIAkJ LyogQW5kIGhhY2sgY2FjaGVkIHNlbGVjdGl2aXR5IHNvIGpvaW4gc2l6ZSBy ZW1haW5zIHRoZSBzYW1lICovCiAJCWpvaW5fb3JfcmluZm8tPm5vcm1fc2Vs ZWMgPSBvcmlnX3NlbGVjIC8gb3Jfc2VsZWM7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGQzOTZlZjEuLjgwNWQ2MzMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xNjI3 LDEzICsxNjI3LDE1IEBAIGJvb2x0ZXN0c2VsKFBsYW5uZXJJbmZvICpyb290 LCBCb29sVGVzdFR5cGUgYm9vbHRlc3R0eXBlLCBOb2RlICphcmcsCiAJCQlj YXNlIElTX05PVF9GQUxTRToKIAkJCQlzZWxlYyA9IChkb3VibGUpIGNsYXVz ZV9zZWxlY3Rpdml0eShyb290LCBhcmcsCiAJCQkJCQkJCQkJCQkJdmFyUmVs aWQsCi0JCQkJCQkJCQkJCQkJam9pbnR5cGUsIHNqaW5mbyk7CisJCQkJCQkJ CQkJCQkJam9pbnR5cGUsIHNqaW5mbywKKwkJCQkJCQkJCQkJCQlOSUwpOwog CQkJCWJyZWFrOwogCQkJY2FzZSBJU19GQUxTRToKIAkJCWNhc2UgSVNfTk9U X1RSVUU6CiAJCQkJc2VsZWMgPSAxLjAgLSAoZG91YmxlKSBjbGF1c2Vfc2Vs ZWN0aXZpdHkocm9vdCwgYXJnLAogCQkJCQkJCQkJCQkJCQkgIHZhclJlbGlk LAotCQkJCQkJCQkJCQkJCQkgIGpvaW50eXBlLCBzamluZm8pOworCQkJCQkJ CQkJCQkJCQkgIGpvaW50eXBlLCBzamluZm8sCisJCQkJCQkJCQkJCQkJCSAg TklMKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhFUlJP UiwgInVucmVjb2duaXplZCBib29sdGVzdHR5cGU6ICVkIiwKQEAgLTYyNjAs NyArNjI2Miw4IEBAIGdlbmVyaWNjb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8g KnJvb3QsCiAJaW5kZXhTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkocm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJICBp bmRleC0+cmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkJICBKT0lOX0lOTkVSLAot CQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJCQkgIE5VTEwsCisJCQkJ CQkJCQkJCSAgTklMKTsKIAogCS8qCiAJICogSWYgY2FsbGVyIGRpZG4ndCBn aXZlIHVzIGFuIGVzdGltYXRlLCBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGlu ZGV4CkBAIC02NTgwLDcgKzY1ODMsOCBAQCBidGNvc3Rlc3RpbWF0ZShQbGFu bmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9j b3VudCwKIAkJYnRyZWVTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkocm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJCSAg aW5kZXgtPnJlbC0+cmVsaWQsCiAJCQkJCQkJCQkJCQkgIEpPSU5fSU5ORVIs Ci0JCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJCQkJICBOVUxMLAor CQkJCQkJCQkJCQkJICBOSUwpOwogCQludW1JbmRleFR1cGxlcyA9IGJ0cmVl U2VsZWN0aXZpdHkgKiBpbmRleC0+cmVsLT50dXBsZXM7CiAKIAkJLyoKQEAg LTczMzEsNyArNzMzNSw4IEBAIGdpbmNvc3Rlc3RpbWF0ZShQbGFubmVySW5m byAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3VudCwK IAkqaW5kZXhTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHko cm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJICAgaW5kZXgt PnJlbC0+cmVsaWQsCiAJCQkJCQkJCQkJCSAgIEpPSU5fSU5ORVIsCi0JCQkJ CQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCQkJCQkgICBOVUxMLAorCQkJCQkJ CQkJCQkgICBOSUwpOwogCiAJLyogZmV0Y2ggZXN0aW1hdGVkIHBhZ2UgY29z dCBmb3IgdGFibGVzcGFjZSBjb250YWluaW5nIGluZGV4ICovCiAJZ2V0X3Rh Ymxlc3BhY2VfcGFnZV9jb3N0cyhpbmRleC0+cmVsdGFibGVzcGFjZSwKQEAg LTc1NjEsNyArNzU2Niw3IEBAIGJyaW5jb3N0ZXN0aW1hdGUoUGxhbm5lcklu Zm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQs CiAJKmluZGV4U2VsZWN0aXZpdHkgPQogCQljbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KHJvb3QsIGluZGV4UXVhbHMsCiAJCQkJCQkJICAgcGF0aC0+aW5kZXhp bmZvLT5yZWwtPnJlbGlkLAotCQkJCQkJCSAgIEpPSU5fSU5ORVIsIE5VTEwp OworCQkJCQkJCSAgIEpPSU5fSU5ORVIsIE5VTEwsIE5JTCk7CiAJKmluZGV4 Q29ycmVsYXRpb24gPSAxOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Yy5jCmluZGV4IGVkY2FmY2UuLmI3YWFiZWQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWMuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUg InV0aWxzL2J5dGVhLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxlcy5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRp bHMvbXZzdGF0cy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgog I2luY2x1ZGUgInV0aWxzL3BsYW5jYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3BvcnRhbC5oIgpAQCAtMzkzLDYgKzM5NCwxNSBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGNvbmZpZ19lbnVtX2VudHJ5IGZvcmNlX3BhcmFsbGVsX21vZGVf b3B0aW9uc1tdID0gewogfTsKIAogLyoKKyAqIFNlYXJjaCBhbGdvcml0aG0g Zm9yIG11bHRpdmFyaWF0ZSBzdGF0cy4KKyAqLworc3RhdGljIGNvbnN0IHN0 cnVjdCBjb25maWdfZW51bV9lbnRyeSBtdnN0YXRfc2VhcmNoX29wdGlvbnNb XSA9IHsKKwl7ImdyZWVkeSIsIE1WU1RBVF9TRUFSQ0hfR1JFRURZLCBmYWxz ZX0sCisJeyJleGhhdXN0aXZlIiwgTVZTVEFUX1NFQVJDSF9FWEhBVVNUSVZF LCBmYWxzZX0sCisJe05VTEwsIDAsIGZhbHNlfQorfTsKKworLyoKICAqIE9w dGlvbnMgZm9yIGVudW0gdmFsdWVzIHN0b3JlZCBpbiBvdGhlciBtb2R1bGVz CiAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkg d2FsX2xldmVsX29wdGlvbnNbXTsKQEAgLTM3NDMsNiArMzc1MywxNiBAQCBz dGF0aWMgc3RydWN0IGNvbmZpZ19lbnVtIENvbmZpZ3VyZU5hbWVzRW51bVtd ID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsibXZzdGF0 X3NlYXJjaCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfT1RIRVIsCisJ CQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGFsZ29yaXRobSB1c2VkIGZvciBj b21iaW5pbmcgbXVsdGl2YXJpYXRlIHN0YXRzLiIpLAorCQkJTlVMTAorCQl9 LAorCQkmbXZzdGF0X3NlYXJjaF90eXBlLAorCQlNVlNUQVRfU0VBUkNIX0dS RUVEWSwgbXZzdGF0X3NlYXJjaF9vcHRpb25zLAorCQlOVUxMLCBOVUxMLCBO VUxMCisJfSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCXsKIAkJ e05VTEwsIDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCAwLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t dnN0YXRzL1JFQURNRS5zdGF0cyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMvUkVBRE1FLnN0YXRzCmluZGV4IDNlNGY0ZDEuLmQ0MDQ5MTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRz CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRz CkBAIC05MCw2ICs5MCwxMzcgQEAgZXZlbiBhdHRlbXB0aW5nIHRvIGRvIHRo ZSBtb3JlIGV4cGVuc2l2ZSBlc3RpbWF0aW9uLgogV2hlbmV2ZXIgd2UgZmlu ZCB0aGVyZSBhcmUgbm8gc3VpdGFibGUgc3RhdHMsIHdlIHNraXAgdGhlIGV4 cGVuc2l2ZSBzdGVwcy4KIAogCitDb21iaW5pbmcgbXVsdGlwbGUgc3RhdGlz dGljcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBl c3RpbWF0aW5nIHNlbGVjdGl2aXR5IG9mIGEgbGlzdCBvZiBjbGF1c2VzLCB0 aGVyZSBtYXkgZXhpc3Qgbm8gc3RhdGlzdGljcworY292ZXJpbmcgYWxsIG9m IHRoZW0uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdGF0aXN0aWNzLCBlYWNo IGNvdmVyaW5nIHNvbWUKK3N1YnNldCBvZiB0aGUgYXR0cmlidXRlcywgdGhl IG9wdGltaXplciBuZWVkcyB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3Nl CitzdGF0aXN0aWNzIHRvIGFwcGx5LgorCitXaGVuIHRoZSBzdGF0aXN0aWNz IGRvIG5vdCBvdmVybGFwLCB0aGUgc29sdXRpb24gaXMgdHJpdmlhbCAtIHdl IGNhbiBzaW1wbHkKK3NwbGl0IHRoZSBncm91cHMgb2YgY29uZGl0aW9ucyBi eSB0aGUgbWF0Y2hpbmcgc3RhdGlzdGljcywgYW5kIHRoZW4gbXVsdGlwbHkg dGhlCitzZWxlY3Rpdml0aWVzLiBGb3IgZXhhbXBsZSBhc3N1bWUgbXVsdGl2 YXJpYXRlIHN0YXRpc3RpY3Mgb24gKGIsYykgYW5kIChkLGUpLAorYW5kIGEg Y29uZGl0aW9uIGxpa2UgdGhpczoKKworICAgIChhPTEpIEFORCAoYj0yKSBB TkQgKGM9MykgQU5EIChkPTQpIEFORCAoZT01KQorCitUaGVuIChhPTEpIGlz IG5vdCBjb3ZlcmVkIGJ5IGFueSBvZiB0aGUgc3RhdGlzdGljcywgc28gd2ls bCBiZSBlc3RpbWF0ZWQgdXNpbmcKK3RoZSByZWd1bGFyIHBlci1jb2x1bW4g c3RhdGlzdGljcy4gVGhlIHR3byBjb25kaXRpb25zICgoYj0yKSBBTkQgKGM9 MykpIHdpbGwgYmUKK2VzdGltYXRlZCB1c2luZyB0aGUgKGIsYykgc3RhdGlz dGljcywgYW5kICgoZD00KSBBTkQgKGU9NSkpIHdpbGwgYmUgZXN0aW1hdGVk Cit1c2luZyAoZCxlKSBzdGF0aXN0aWNzLiBBbmQgdGhlIHJlc3VsdGluZyBz ZWxlY3Rpdml0aWVzIHdpbGwgYmUgZXN0aW1hdGVkLgorCitOb3csIHdoYXQg aWYgdGhlIHN0YXRpc3RpY3Mgb3ZlcmxhcD8gRm9yIGV4YW1wbGUgYXNzdW1l IHRoZSBzYW1lIGNvbmRpdGlvbiBhcworYWJvdmUsIGJ1dCBsZXQncyBzYXkg d2UgaGF2ZSBzdGF0aXN0aWNzIG9uIChhLGIsYykgYW5kIChhLGMsZCxlKS4g V2hhdCB0aGVuPworCitBcyBzZWxlY3Rpdml0eSBpcyBqdXN0IGEgcHJvYmFi aWxpdHkgdGhhdCB0aGUgY29uZGl0aW9uIGhvbGRzIGZvciBhIHJhbmRvbSBy b3csCit3ZSBjYW4gd3JpdGUgdGhlIHNlbGVjdGl2aXR5IGxpa2UgdGhpczoK KworICAgIFAoYT0xICYgYj0yICYgYz0zICYgZD00ICYgZT01KQorCithbmQg d2UgY2FuIHJld3JpdGUgaXQgdXNpbmcgY29uZGl0aW9uYWwgcHJvYmFiaWxp dHkgbGlrZSB0aGlzCisKKyAgICBQKGE9MSAmIGI9MiAmIGM9MykgKiBQKGQ9 NCAmIGU9NSB8IGE9MSAmIGI9MiAmIGM9MykKKworTm90aWNlIHRoYXQgdGhl IGZpcnN0IHBhcnQgYWxyZWFkeSBtYXRjaGVzIHRvIChhLGIsYykgc3RhdGlz dGljcy4gSWYgd2UgYXNzdW1lCit0aGF0IGNvbHVtbnMgdGhhdCBhcmUgbm90 IHJlZmVyZW5jZWQgYnkgdGhlIHNhbWUgc3RhdGlzdGljcyBhcmUgaW5kZXBl bmRlbnQsIHdlCittYXkgcmV3cml0ZSB0aGUgc2Vjb25kIGhhbGYgbGlrZSB0 aGlzCisKKyAgICBQKGQ9NCAmIGU9NSB8IGE9MSAmIGI9MiAmIGM9MykgPSBQ KGQ9NCAmIGU9NSB8IGE9MSAmIGM9MykKKword2hpY2ggY29ycmVzcG9uZHMg dG8gdGhlIHN0YXRpc3RpY3Mgb24gKGEsYyxkLGUpLgorCitJZiB0aGVyZSBh cmUgbXVsdGlwbGUgc3RhdGlzdGljcyBkZWZpbmVkIG9uIGEgdGFibGUsIGl0 J3Mgbm90IGRpZmZpY3VsdCB0byBjb21lCit1cCB3aXRoIGV4YW1wbGVzIHdo ZW4gdGhlcmUgYXJlIG11bHRpcGxlIHdheXMgdG8gY29tYmluZSB0aGVtIHRv IGNvdmVyIGEgbGlzdCBvZgorY2xhdXNlcy4gV2UgbmVlZCBhIHdheSB0byBm aW5kIHRoZSBiZXN0IGNvbWJpbmF0aW9uIG9mIHN0YXRpc3RpY3MuCisKK1Ro aXMgaXMgdGhlIHB1cnBvc2Ugb2YgY2hvb3NlX212X3N0YXRpc3RpY3MoKS4g SXQgc2VhcmNoZXMgdGhyb3VnaCB0aGUgcG9zc2libGUKK2NvbWJpbmF0aW9u cyBvZiBzdGF0aXN0aWNzLCBhbmQgc2VhcmNoZXMgc3VjaCBjb21iaW5hdGlv biB0aGF0CisKKyAgICAoYSkgY292ZXJzIHRoZSBtb3N0IGNsYXVzZXMgb2Yg dGhlIGxpc3QKKworICAgIChiKSByZXVzZXMgdGhlIG1heGltdW0gbnVtYmVy IG9mIGNsYXVzZXMgYXMgY29uZGl0aW9ucworICAgICAgICAoaW4gY29uZGl0 aW9uYWwgcHJvYmFiaWxpdGllcykKKworV2hpbGUgKGEpIGNyaXRlcmlhIHNl ZW1zIG5hdHVyYWwsIHRoZSAoYikgbWF5IHNlZW0gYSBiaXQgYXdrd2FyZCBh dCBmaXJzdC4gVGhlCitpZGVhIGlzIHRoYXQgY29uZGl0aW9ucyBpbiBhIHdh eSBvZiB0cmFuc2ZlcmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNp ZXMKK2JldHdlZW4gc3RhdGlzdGljcy4KKworVGhlcmUgYXJlIHR3byBhbHRl cm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgb2YgY2hvb3NlX212X3N0YXRpc3Rp Y3MoKSAtIGdyZWVkeQorYW5kIGV4aGF1c3RpdmUuIEV4aGF1c3RpdmUgYWN0 dWFsbHkgc2VhcmNoZXMgdGhyb3VnaCBhbGwgcG9zc2libGUgY29tYmluYXRp b25zCitvZiBzdGF0aXN0aWNzLCBhbmQgZm9yIGxhcmdlciBudW1iZXJzIG9m IHN0YXRpc3RpY3MgbWF5IGdldCBxdWl0ZSBleHBlbnNpdmUKKyhhcyBpdCwg dW5zdXJwcmlzaW5nbHksIGhhcyBleHBvbmVudGlhbCBjb3N0KS4gR3JlZWR5 IHRlcm1pbmF0ZXMgaW4gbGVzcyB0aGFuCitLIHN0ZXBzICh3aGVuIEsgaXMg dGhlIG51bWJlciBvZiBjbGF1c2VzKSwgYW5kIGluIGVhY2ggc3RlcCBjaG9v c2VzIHRoZSBiZXN0CituZXh0IHN0YXRpc3RpY3MuIEkndmUgYmVlbiB1bmFi bGUgdG8gY29tZSB1cCB3aXRoIGFuIGV4YW1wbGUgd2hlcmUgdGhvc2UgdHdv CithcHByb2FjaGVzIHdvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGNvbWJpbmF0 aW9ucy4KKworSXQncyBwb3NzaWJsZSB0byBjaG9vc2UgdGhlIG9wdGltaXph dGlvbiB1c2luZyBtdnN0YXRfc2VhcmNoX3R5cGUsIHdpdGggZWl0aGVyCisn Z3JlZWR5JyBvciAnZXhoYXVzdGl2ZScgdmFsdWVzIChkZWZhdWx0IGlzICdn cmVlZHknKS4KKworICAgIFNFVCBtdnN0YXRfc2VhcmNoX3R5cGUgPSAnZXho YXVzdGl2ZSc7CisKK05vdGU6IFRoaXMgaXMgbWVhbnQgbW9zdGx5IGZvciBl eHBlcmltZW50YXRpb24uIEkgZG8gZXhwZWN0IHdlJ2xsIGNob29zZSBvbmUg b2YKK3RoZSBhbGdvcml0aG1zIGFuZCByZW1vdmUgdGhlIEdVQyBiZWZvcmUg Y29tbWl0LgorCisKK0xpbWl0YXRpb25zIG9mIGNvbWJpbmluZyBzdGF0aXN0 aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitB cyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gJ0NvbWJpbmluZyBtdWx0aXBs ZSBzdGF0aXN0aWNzJywgdGhlIGN1cnJlbnQgYXBwb2FjaAoraXMgYmFzZWQg b24gdHJhbnNmZXJpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiBzdGF0aXN0aWNz IGJ5IG1lYW5zIG9mIGNvbmRpdGlvbmFsCitwcm9iYWJpbGl0aWVzLiBUaGlz IGlzIGEgcmVsYXRpdmVseSBjaGVhcCBhbmQgZWZmaWNpZW50IGFwcHJvYWNo LCBidXQgaXQgaXMKK2Jhc2VkIG9uIHR3byBhc3N1bXB0aW9uczoKKworICAg ICgxKSBUaGUgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBzdGF0aXN0aWNzIG5lZWRz IHRvIGJlIHN1ZmZpY2llbnRseSBsYXJnZSwgaS5lLgorICAgICAgICB0aGVy ZSBuZWVkcyB0byBiZSBlbm91Z2ggY29sdW1ucyBzaGFyZWQgYnkgdGhlIHN0 YXRpc3RpY3MgdG8gdHJhbnNmZXIKKyAgICAgICAgaW5mb3JtYXRpb24gYWJv dXQgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHJlbWFpbmluZyBjb2x1bW5z LgorCisgICAgKDIpIFRoZSBxdWVyeSBuZWVkcyB0byBpbmNsdWRlIHN1ZmZp Y2llbnQgY2xhdXNlcyBvbiB0aGUgc2hhcmVkIGNvbHVtbnMuCisKK0hvdyBh IHZpb2xhdGlvbiBvZiB0aG9zZSBhc3N1bXB0aW9ucyBtYXkgYmUgYSBwcm9i bGVtIGNhbiBiZSBpbGx1c3RyYXRlZCBieQorYSBzaW1wbGUgZXhhbXBsZS4g QXNzdW1lIGEgdGFibGUgd2l0aCB0aHJlZSBjb2x1bW5zIChhLGIsYykgY29u dGFpbmluZyBleGFjdGx5Cit0aGUgc2FtZSB2YWx1ZXMsIGFuZCBzdGF0aXN0 aWNzIG9uIChhLGIpIGFuZCAoYixjKToKKworICAgIENSRUFURSBUQUJMRSB0 ZXN0IEFTIFNFTEVDVCBpLCBpLCBpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApOworCisgICAgQ1JF QVRFIFNUQVRJU1RJQ1MgczEgT04gdGVzdCAoYSxiKSBXSVRIIChtY3YpOwor ICAgIENSRUFURSBTVEFUSVNUSUNTIHMyIE9OIHRlc3QgKGIsYykgV0lUSCAo bWN2KTsKKworICAgIEFOQUxZWkUgdGVzdDsKKworRmlyc3QsIGxldCdzIGVz dGltYXRlIHRoaXMgcXVlcnk6CisKKyAgICBTRUxFQ1QgKiBGUk9NIHRlc3Qg V0hFUkUgKGEgPCAxMCkgQU5EIChjIDwgMTApOworCitDbGVhcmx5LCB0aGVy ZSBhcmUgbm8gY29uZGl0aW9ucyBvbiAnYicgKHdoaWNoIGlzIHRoZSBvbmx5 IGNvbHVtbiBzaGFyZWQgYnkgdGhlCit0d28gc3RhdGlzdGljcyksIHNvIHdl J2xsIGVuZCB1cCB3aXRoIGFuIGVzdGltYXRlIGJhc2VkIG9uIGFzc3VtcHRp b24gb2YKK2luZGVwZW5kZW5jZToKKworICAgIFAoYSA8IDEwKSAqIFAoYyA8 IDEwKSA9IDAuMDEgKiAwLjAxID0gMC4wMDAxCisKK1doaWNoIGlzIGEgc2ln bmlmaWNhbnQgdW5kZXItZXN0aW1hdGUsIGFzIHRoZSBwcm9wZXIgc2VsZWN0 aXZpdHkgaXMgMC4wMS4KKworQnV0IGxldCdzIGVzdGltYXRlIGFub3RoZXIg cXVlcnk6CisKKyAgICBTRUxFQ1QgKiBGUk9NIHRlc3QgV0hFUkUgKGEgPCAx MCkgQU5EIChiIDwgNTAwKSBBTkQgKGMgPCAxMCk7CisKK0luIHRoaXMgY2Fz ZSwgdGhlIGVzdGltYXRlIG1heSBiZSBjb21wdXRlZCBmb3IgZXhhbXBsZSBs aWtlIHRoaXM6CisKKyAgICBQWyhhIDwgMTApICYgKGIgPCA1MDApICYgKGMg PCAxMCldCisgICAgICA9IFBbKGEgPCAxMCkgJiAoYiA8IDUwMCldICogUFso YyA8IDEwKSB8IChhIDwgMTApICYgKGIgPCA1MDApXQorICAgICAgPSBQWyhh IDwgMTApICYgKGIgPCA1MDApXSAqIFBbKGMgPCAxMCkgfCAoYiA8IDUwMCld CisKK1RoZSB0cm91YmxlIGlzIHRoZSBwcm9iYWJpbGl0eSBQKGMgPCAxMCB8 IGIgPCA1MDApIGV2YWx1YXRlcyB0byAwLjAyLCBiZWNhdXNlCit3ZSBoYXZl IGFzc3VtZWQgKGEpIGFuZCAoYykgYXJlIGluZGVwZW5kZW50IGJlY2F1c2Ug dGhlcmUgaXMgbm8gc3RhdGlzdGljCitjb250YWluaW5nIGJvdGggdGhlc2Ug Y29sdW1ucywgYW5kIHRoZSBjb25kaXRpb24gb24gKGIpIGRvZXMgbm90IHRy YW5zZmVyCitzdWZmaWNpZW50IGFtb3VudCBvZiBpbmZvcm1hdGlvbiBiZXR3 ZWVuIHRoZSB0d28gc3RhdGlzdGljcy4KKworQ3VycmVudGx5LCB0aGUgb25s eSBzb2x1dGlvbiBpcyB0byBidWlsZCBzdGF0aXN0aWNzIG9uIGFsbCB0aHJl ZSBjb2x1bW5zLCBidXQKK3NlZSB0aGUgJ2NvbWJpbmluZyBzdGF0aXN0aWNz IHVzaW5nIGNvbnZvbHV0aW9uJyBzZWN0aW9uIGZvciBpZGVhcyBvbiBob3cg dG8KK2ltcHJvdmUgdGhpcy4KKworCiBGdXJ0aGVyIChwb3NzaWJseSBjcmF6 eSkgaWRlYXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBA IC0xMTEsMyArMjQyLDM4IEBAIEJ1dCBvZiBjb3Vyc2UsIHRoaXMgbWF5IHJl c3VsdCBpbiBleHBlbnNpdmUgZXN0aW1hdGlvbiAoQ1BVLXdpc2UpLgogCiBT byB3ZSBtaWdodCBhZGQgYSBHVUMgdG8gY2hvb3NlIGJldHdlZW4gYSBzaW1w bGUgKHNpbmdsZSBzdGF0aXN0aWNzKSBhbmQgdGh1cwogbXVsdGktc3RhdGlz dGljIGVzdGltYXRpb24sIHBvc3NpYmx5IHRhYmxlLWxldmVsIHBhcmFtZXRl ciAoQUxURVIgVEFCTEUgLi4uKS4KKworCitDb21iaW5pbmcgc3RhdHMgdXNp bmcgY29udm9sdXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCitXaGlsZSB0aGUgY3VycmVudCBhcHByb2FjaCBmb3IgY29tYmlu aW5nIHN0YXRpc3RpY3MgaXMgYmFzZWQgb24gY29uZGl0aW9uYWwKK3Byb2Jh YmlsaXRpZXMsIGFuZCB0aHVzIG9ubHkgd29ya3Mgd2hlbiB0aGUgcXVlcnkg aW5jbHVkZXMgY29uZGl0aW9ucyBvbiB0aGUKK292ZXJsYXBwaW5nIHBhcnRz IG9mIHRoZSBzdGF0aXN0aWNzLiBCdXQgdGhlcmUgbWF5IGJlIG90aGVyIHdh eXMgdG8gY29tYmluZQorc3RhdGlzdGljcywgcmVsYXhpbmcgdGhpcyByZXF1 aXJlbWVudC4KKworTGV0J3MgYXNzdW1lIHR3byBoaXN0b2dyYW1zIEgxIGFu ZCBIMiAtIHRoZW4gY29tYmluaW5nIHRoZW0gbWlnaHQgd29yayBhYm91dAor bGlrZSB0aGlzOgorCisKKyAgICBmb3IgKGJ1Y2tldHMgb2YgSDEsIHNhdGlz ZnlpbmcgbG9jYWwgY29uZGl0aW9ucykKKyAgICB7CisgICAgICAgIGZvciAo YnVja2V0cyBvZiBIMiwgb3ZlcmxhcHBpbmcgd2l0aCBIMSBidWNrZXQpCisg ICAgICAgIHsKKyAgICAgICAgICAgIG1hcmsgSDIgYnVja2V0IGFzICd2YWxp ZCcKKyAgICAgICAgfQorICAgIH0KKworICAgIHMxID0gczIgPSAwLjAKKyAg ICBmb3IgKGJ1Y2tldHMgb2YgSDIgbWFya2VkIGFzIHZhbGlkKQorICAgIHsK KyAgICAgICAgczEgKz0gZnJlcXVlbmN5CisKKyAgICAgICAgaWYgKGJ1Y2tl dCBzYXRpc3RpZmVzIGxvY2FsIGNvbmRpdGlvbnMpCisgICAgICAgICAgICAg czIgKz0gZnJlcXVlbmN5CisgICAgfQorCisgICAgcyA9IChzMiAvIHMxKSAv KiBmaW5hbCBzZWxlY3Rpdml0eSBlc3RpbWF0ZSAqLworCitIb3dldmVyIHRo aXMgbWF5IHF1aWNrbHkgZ2V0IG5vbi10cml2aWFsLCBlLmcuIHdoZW4gY29t YmluaW5nIHR3byBzdGF0aXN0aWNzCitvZiBkaWZmZXJlbnQgdHlwZXMgKGhp c3RvZ3JhbSB2cy4gTUNWKS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29w dGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5o CmluZGV4IGZlYTJiYjcuLjMzZjVhMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaApAQCAtMTkyLDExICsxOTIsMTMgQEAgZXh0ZXJuIFNlbGVj dGl2aXR5IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCSAgIExpc3QgKmNsYXVzZXMsCiAJCQkJCSAgIGludCB2YXJS ZWxpZCwKIAkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCi0JCQkJCSAgIFNw ZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKKwkJCQkJICAgU3BlY2lhbEpvaW5J bmZvICpzamluZm8sCisJCQkJCSAgIExpc3QgKmNvbmRpdGlvbnMpOwogZXh0 ZXJuIFNlbGVjdGl2aXR5IGNsYXVzZV9zZWxlY3Rpdml0eShQbGFubmVySW5m byAqcm9vdCwKIAkJCQkgICBOb2RlICpjbGF1c2UsCiAJCQkJICAgaW50IHZh clJlbGlkLAogCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAotCQkJCSAgIFNw ZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKKwkJCQkgICBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbywKKwkJCQkgICBMaXN0ICpjb25kaXRpb25zKTsKIAogI2Vu ZGlmICAgLyogQ09TVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9tdnN0YXRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgK aW5kZXggNjcwODEzOS4uODBiZjk2ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvbXZzdGF0cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212 c3RhdHMuaApAQCAtMTcsNiArMTcsMTQgQEAKICNpbmNsdWRlICJmbWdyLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAKK3R5cGVkZWYgZW51 bSBNVlN0YXRTZWFyY2hUeXBlCit7CisJTVZTVEFUX1NFQVJDSF9FWEhBVVNU SVZFLAkJLyogZXhoYXVzdGl2ZSBzZWFyY2ggKi8KKwlNVlNUQVRfU0VBUkNI X0dSRUVEWQkJCS8qIGdyZWVkeSBzZWFyY2ggKi8KK30JTVZTdGF0U2VhcmNo VHlwZTsKKworZXh0ZXJuIGludCBtdnN0YXRfc2VhcmNoX3R5cGU7CisKIC8q CiAgKiBEZWdyZWUgb2YgaG93IG11Y2ggTUNWIGl0ZW0gLyBoaXN0b2dyYW0g YnVja2V0IG1hdGNoZXMgYSBjbGF1c2UuCiAgKiBUaGlzIGlzIHRoZW4gY29u c2lkZXJlZCB3aGVuIGNvbXB1dGluZyB0aGUgc2VsZWN0aXZpdHkuCi0tIAoy LjUuMAoK --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename="0005-multivariate-histograms.patch" Content-Type: text/x-patch; name="0005-multivariate-histograms.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5M2U0Mjg5NzBkM2Q4MTRmNmI2MWU0YTVmNDM4NDIzN2NmOTRlZDQx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDIwOjE4OjI0 ICswMTAwClN1YmplY3Q6IFtQQVRDSCA1LzldIG11bHRpdmFyaWF0ZSBoaXN0 b2dyYW1zCgotIGV4dGVuZHMgdGhlIHBnX212X3N0YXRpc3RpYyBjYXRhbG9n IChhZGQgJ2hpc3QnIGZpZWxkcykKLSBidWlsZGluZyB0aGUgaGlzdG9ncmFt cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxlIHBs YW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRlc3Rz IG1vc3RseSBlcXVhbCB0byB0aG9zZSBmb3IgZnVuY3Rpb25hbApkZXBlbmRl bmNpZXMgLyBNQ1YgbGlzdHMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sICAgIHwgICA0NCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgfCAgICA0ICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgICAgfCAgIDQ0 ICstCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAg ICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jICAgICB8ICA1NzQgKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYyAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLmhpc3RvZ3JhbSB8 ICAyOTkgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUu c3RhdHMgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5jICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2hpc3RvZ3JhbS5jICAgICAgfCAyMDIzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAg ICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfbXZfc3RhdGlzdGljLmggICAgICB8ICAgMjQgKy0KIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5oICAgICAgICAgICAgICB8ICAgIDQgKwog c3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAgICAgICAgICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAg ICAgICAgfCAgMTM2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X2hpc3RvZ3JhbS5vdXQgfCAgMjA3ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICAgNCArLQogc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgIHwgICAgMiArLQog c3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUgICAgICAgICAgIHwg ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9oaXN0b2dyYW0uc3Fs ICAgICAgfCAgMTc2ICsrKwogMjEgZmlsZXMgY2hhbmdlZCwgMzU3MCBpbnNl cnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2hpc3RvZ3JhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9tdl9oaXN0b2dyYW0ub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfaGlzdG9ncmFtLnNxbAoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3Rp Y3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Mu c2dtbAppbmRleCBkNjk3M2U4Li5mNzMzNmZkIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xMzMs NiArMTMzLDI0IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNU UyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNz X25hCiAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT48bGl0ZXJhbD5oaXN0b2dyYW08Lz4gKDx0eXBlPmJvb2xl YW48Lz4pPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICBFbmFibGVzIGhpc3RvZ3JhbSBmb3IgdGhlIHN0YXRpc3RpY3MuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+ bWF4X2J1Y2tldHM8Lz4gKDx0eXBlPmludGVnZXI8Lz4pPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJl ciBvZiBoaXN0b2dyYW0gYnVja2V0cy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5tYXhfbWN2X2l0ZW1zPC8+ICg8 dHlwZT5pbnRlZ2VyPC8+KTwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAg IDxwYXJhPgpAQCAtMjIwLDYgKzIzOCwzMiBAQCBFWFBMQUlOIEFOQUxZWkUg U0VMRUNUICogRlJPTSB0MiBXSEVSRSAoYSA9IDEpIEFORCAoYiA9IDIpOwog PC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAg Q3JlYXRlIHRhYmxlIDxzdHJ1Y3RuYW1lPnQzPC8+IHdpdGggdHdvIHN0cm9u Z2x5IGNvcnJlbGF0ZWQgY29sdW1ucywgYW5kCisgICBhIGhpc3RvZ3JhbSBv biB0aG9zZSB0d28gY29sdW1uczoKKworPHByb2dyYW1saXN0aW5nPgorQ1JF QVRFIFRBQkxFIHQzICgKKyAgICBhICAgZmxvYXQsCisgICAgYiAgIGZsb2F0 CispOworCitJTlNFUlQgSU5UTyB0MyBTRUxFQ1QgbW9kKGksMTAwMCksIG1v ZChpLDEwMDApICsgNTAgKiAociAtIDAuNSkgRlJPTSAoCisgICAgICAgICAg ICAgICAgICAgU0VMRUNUIGksIHJhbmRvbSgpIHIgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDAwKSBzKGkpCisgICAgICAgICAgICAgICAgICkgZm9v OworCitDUkVBVEUgU1RBVElTVElDUyBzMyBPTiB0MyAoYSwgYikgV0lUSCAo aGlzdG9ncmFtKTsKKworQU5BTFlaRSB0MjsKKworLS0gc21hbGwgb3Zlcmxh cAorRVhQTEFJTiBBTkFMWVpFIFNFTEVDVCAqIEZST00gdDMgV0hFUkUgKGEg PCA1MDApIEFORCAoYiA+IDUwMCk7CisKKy0tIG5vIG92ZXJsYXAKK0VYUExB SU4gQU5BTFlaRSBTRUxFQ1QgKiBGUk9NIHQzIFdIRVJFIChhIDwgNDAwKSBB TkQgKGIgPiA2MDApOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgor CiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCA1YzQwMzM0Li5i MTUxZGIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3Rl bV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1f dmlld3Muc3FsCkBAIC0xNjcsNyArMTY3LDkgQEAgQ1JFQVRFIFZJRVcgcGdf bXZfc3RhdHMgQVMKICAgICAgICAgbGVuZ3RoKFMuc3RhZGVwcykgYXMgZGVw c2J5dGVzLAogICAgICAgICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5m byhTLnN0YWRlcHMpIGFzIGRlcHNpbmZvLAogICAgICAgICBsZW5ndGgoUy5z dGFtY3YpIEFTIG1jdmJ5dGVzLAotICAgICAgICBwZ19tdl9zdGF0c19tY3Zs aXN0X2luZm8oUy5zdGFtY3YpIEFTIG1jdmluZm8KKyAgICAgICAgcGdfbXZf c3RhdHNfbWN2bGlzdF9pbmZvKFMuc3RhbWN2KSBBUyBtY3ZpbmZvLAorICAg ICAgICBsZW5ndGgoUy5zdGFoaXN0KSBBUyBoaXN0Ynl0ZXMsCisgICAgICAg IHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKFMuc3RhaGlzdCkgQVMgaGlz dGluZm8KICAgICBGUk9NIChwZ19tdl9zdGF0aXN0aWMgUyBKT0lOIHBnX2Ns YXNzIEMgT04gKEMub2lkID0gUy5zdGFyZWxpZCkpCiAgICAgICAgIExFRlQg Sk9JTiBwZ19uYW1lc3BhY2UgTiBPTiAoTi5vaWQgPSBDLnJlbG5hbWVzcGFj ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRz Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKaW5k ZXggYzQ4MGZiZS4uZTBiMDg1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc3RhdHNjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvc3RhdHNjbWRzLmMKQEAgLTcxLDEyICs3MSwxNSBAQCBDcmVhdGVTdGF0 aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAogCS8qIGJ5IGRlZmF1 bHQgYnVpbGQgbm90aGluZyAqLwogCWJvb2wgCWJ1aWxkX2RlcGVuZGVuY2ll cyA9IGZhbHNlLAotCQkJYnVpbGRfbWN2ID0gZmFsc2U7CisJCQlidWlsZF9t Y3YgPSBmYWxzZSwKKwkJCWJ1aWxkX2hpc3RvZ3JhbSA9IGZhbHNlOwogCi0J aW50MzIgCW1heF9tY3ZfaXRlbXMgPSAtMTsKKwlpbnQzMiAJbWF4X2J1Y2tl dHMgPSAtMSwKKwkJCW1heF9tY3ZfaXRlbXMgPSAtMTsKIAogCS8qIG9wdGlv bnMgcmVxdWlyZWQgYmVjYXVzZSBvZiBvdGhlciBvcHRpb25zICovCi0JYm9v bAlyZXF1aXJlX21jdiA9IGZhbHNlOworCWJvb2wJcmVxdWlyZV9tY3YgPSBm YWxzZSwKKwkJCXJlcXVpcmVfaGlzdG9ncmFtID0gZmFsc2U7CiAKIAlBc3Nl cnQoSXNBKHN0bXQsIENyZWF0ZVN0YXRzU3RtdCkpOwogCkBAIC0xNzUsNiAr MTc4LDI5IEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpz dG10KQogCQkJCQkJCQlNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMpKSk7CiAK IAkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAiaGlzdG9n cmFtIikgPT0gMCkKKwkJCWJ1aWxkX2hpc3RvZ3JhbSA9IGRlZkdldEJvb2xl YW4ob3B0KTsKKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm1h eF9idWNrZXRzIikgPT0gMCkKKwkJeworCQkJbWF4X2J1Y2tldHMgPSBkZWZH ZXRJbnQzMihvcHQpOworCisJCQkvKiB0aGlzIG9wdGlvbiByZXF1aXJlcyAn aGlzdG9ncmFtJyB0byBiZSBlbmFibGVkICovCisJCQlyZXF1aXJlX2hpc3Rv Z3JhbSA9IHRydWU7CisKKwkJCS8qIHNhbml0eSBjaGVjayAqLworCQkJaWYg KG1heF9idWNrZXRzIDwgTVZTVEFUX0hJU1RfTUlOX0JVQ0tFVFMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coIm1pbmltdW0gbnVtYmVyIG9mIGJ1 Y2tldHMgaXMgJWQiLAorCQkJCQkJCQlNVlNUQVRfSElTVF9NSU5fQlVDS0VU UykpKTsKKworCQkJZWxzZSBpZiAobWF4X2J1Y2tldHMgPiBNVlNUQVRfSElT VF9NQVhfQlVDS0VUUykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygi bWF4aW11bSBudW1iZXIgb2YgYnVja2V0cyBpcyAlZCIsCisJCQkJCQkJCU1W U1RBVF9ISVNUX01BWF9CVUNLRVRTKSkpOworCisJCX0KIAkJZWxzZQogCQkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLApAQCAtMTgzLDEwICsyMDksMTAgQEAgQ3JlYXRlU3RhdGlzdGlj cyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJfQogCiAJLyogY2hlY2sgdGhh dCBhdCBsZWFzdCBzb21lIHN0YXRpc3RpY3Mgd2VyZSByZXF1ZXN0ZWQgKi8K LQlpZiAoISAoYnVpbGRfZGVwZW5kZW5jaWVzIHx8IGJ1aWxkX21jdikpCisJ aWYgKCEgKGJ1aWxkX2RlcGVuZGVuY2llcyB8fCBidWlsZF9tY3YgfHwgYnVp bGRfaGlzdG9ncmFtKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJIGVycm1zZygibm8gc3Rh dGlzdGljcyB0eXBlIChkZXBlbmRlbmNpZXMsIG1jdikgd2FzIHJlcXVlc3Rl ZCIpKSk7CisJCQkJIGVycm1zZygibm8gc3RhdGlzdGljcyB0eXBlIChkZXBl bmRlbmNpZXMsIG1jdiwgaGlzdG9ncmFtKSB3YXMgcmVxdWVzdGVkIikpKTsK IAogCS8qIG5vdyBkbyBzb21lIGNoZWNraW5nIG9mIHRoZSBvcHRpb25zICov CiAJaWYgKHJlcXVpcmVfbWN2ICYmICghIGJ1aWxkX21jdikpCkBAIC0xOTQs NiArMjIwLDExIEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10 ICpzdG10KQogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK IAkJCQkgZXJybXNnKCJvcHRpb24gJ21jdicgaXMgcmVxdWlyZWQgYnkgb3Ro ZXIgb3B0aW9ucyhzKSIpKSk7CiAKKwlpZiAocmVxdWlyZV9oaXN0b2dyYW0g JiYgKCEgYnVpbGRfaGlzdG9ncmFtKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1z Zygib3B0aW9uICdoaXN0b2dyYW0nIGlzIHJlcXVpcmVkIGJ5IG90aGVyIG9w dGlvbnMocykiKSkpOworCiAJLyogc29ydCB0aGUgYXR0bnVtcyBhbmQgYnVp bGQgaW50MnZlY3RvciAqLwogCXFzb3J0KGF0dG51bXMsIG51bWNvbHMsIHNp emVvZihpbnQxNiksIGNvbXBhcmVfaW50MTYpOwogCXN0YWtleXMgPSBidWls ZGludDJ2ZWN0b3IoYXR0bnVtcywgbnVtY29scyk7CkBAIC0yMTQsMTEgKzI0 NSwxNCBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3Rt dCkKIAogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2VuYWJs ZWQgLTFdID0gQm9vbEdldERhdHVtKGJ1aWxkX2RlcGVuZGVuY2llcyk7CiAJ dmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX21jdl9lbmFibGVkICAtMV0g PSBCb29sR2V0RGF0dW0oYnVpbGRfbWN2KTsKKwl2YWx1ZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfaGlzdF9lbmFibGVkIC0xXSA9IEJvb2xHZXREYXR1bShi dWlsZF9oaXN0b2dyYW0pOwogCiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlz dGljX21jdl9tYXhfaXRlbXMgICAgLTFdID0gSW50MzJHZXREYXR1bShtYXhf bWN2X2l0ZW1zKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfaGlz dF9tYXhfYnVja2V0cyAtMV0gPSBJbnQzMkdldERhdHVtKG1heF9idWNrZXRz KTsKIAogCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMgIC0x XSA9IHRydWU7CiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2 ICAgLTFdID0gdHJ1ZTsKKwludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFoaXN0ICAtMV0gPSB0cnVlOwogCiAJLyogaW5zZXJ0IHRoZSB0dXBsZSBp bnRvIHBnX212X3N0YXRpc3RpYyAqLwogCW12c3RhdHJlbCA9IGhlYXBfb3Bl bihNdlN0YXRpc3RpY1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3Ny Yy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggMzMzZTI0Yi4uOTE3 MmYyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3Mu YworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0yMTYz LDEwICsyMTYzLDEyIEBAIF9vdXRNVlN0YXRpc3RpY0luZm8oU3RyaW5nSW5m byBzdHIsIGNvbnN0IE1WU3RhdGlzdGljSW5mbyAqbm9kZSkKIAkvKiBlbmFi bGVkIHN0YXRpc3RpY3MgKi8KIAlXUklURV9CT09MX0ZJRUxEKGRlcHNfZW5h YmxlZCk7CiAJV1JJVEVfQk9PTF9GSUVMRChtY3ZfZW5hYmxlZCk7CisJV1JJ VEVfQk9PTF9GSUVMRChoaXN0X2VuYWJsZWQpOwogCiAJLyogYnVpbHQvYXZh aWxhYmxlIHN0YXRpc3RpY3MgKi8KIAlXUklURV9CT09MX0ZJRUxEKGRlcHNf YnVpbHQpOwogCVdSSVRFX0JPT0xfRklFTEQobWN2X2J1aWx0KTsKKwlXUklU RV9CT09MX0ZJRUxEKGhpc3RfYnVpbHQpOwogfQogCiBzdGF0aWMgdm9pZApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNl c2VsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwu YwppbmRleCA3ZmMwYzQ5Li41ZTczYTRlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwpAQCAtNDksNiArNDks NyBAQCBzdGF0aWMgdm9pZCBhZGRSYW5nZUNsYXVzZShSYW5nZVF1ZXJ5Q2xh dXNlICoqcnFsaXN0LCBOb2RlICpjbGF1c2UsCiAKICNkZWZpbmUJCU1WX0NM QVVTRV9UWVBFX0ZERVAJCTB4MDEKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBF X01DVgkJMHgwMgorI2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfSElTVAkJMHgw NAogCiBzdGF0aWMgYm9vbCBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShOb2Rl ICpjbGF1c2UsIEluZGV4IHJlbGlkLCBCaXRtYXBzZXQgKiphdHRudW1zLAog CQkJCQkJCSBpbnQgdHlwZSk7CkBAIC03NCw2ICs3NSw4IEBAIHN0YXRpYyBT ZWxlY3Rpdml0eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJ bmZvICpyb290LAogc3RhdGljIFNlbGVjdGl2aXR5IGNsYXVzZWxpc3RfbXZf c2VsZWN0aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywK IAkJCQkJCQkJCWJvb2wgKmZ1bGxtYXRjaCwgU2VsZWN0aXZpdHkgKmxvd3Nl bCk7CitzdGF0aWMgU2VsZWN0aXZpdHkgY2xhdXNlbGlzdF9tdl9zZWxlY3Rp dml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQlM aXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMpOwogCiBz dGF0aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJCQkJCWludDJ2ZWN0 b3IgKnN0YWtleXMsIE1DVkxpc3QgbWN2bGlzdCwKQEAgLTgxLDYgKzg0LDEy IEBAIHN0YXRpYyBpbnQgdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KFBs YW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQkJU2Vs ZWN0aXZpdHkgKmxvd3NlbCwgYm9vbCAqZnVsbG1hdGNoLAogCQkJCQkJCQkJ Ym9vbCBpc19vcik7CiAKK3N0YXRpYyBpbnQgdXBkYXRlX21hdGNoX2JpdG1h cF9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMs CisJCQkJCQkJCQlpbnQydmVjdG9yICpzdGFrZXlzLAorCQkJCQkJCQkJTVZT ZXJpYWxpemVkSGlzdG9ncmFtIG12aGlzdCwKKwkJCQkJCQkJCWludCBubWF0 Y2hlcywgY2hhciAqIG1hdGNoZXMsCisJCQkJCQkJCQlib29sIGlzX29yKTsK Kwogc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBpbnQgdHlw ZSk7CiAKIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVySW5mbyAq cm9vdCwgSW5kZXggcmVsaWQpOwpAQCAtOTUsNiArMTA0LDcgQEAgc3RhdGlj IGJvb2wgc3RhdHNfdHlwZV9tYXRjaGVzKE1WU3RhdGlzdGljSW5mbyAqc3Rh dCwgaW50IHR5cGUpOwogI2RlZmluZSBVUERBVEVfUkVTVUxUKG0scixpc29y KQlcCiAJKG0pID0gKGlzb3IpID8gKE1BWChtLHIpKSA6IChNSU4obSxyKSkK IAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCVJP VVRJTkVTIFRPIENPTVBVVEUgU0VMRUNUSVZJVElFUwogICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjMsNyArMTMzLDcgQEAgc3Rh dGljIGJvb2wgc3RhdHNfdHlwZV9tYXRjaGVzKE1WU3RhdGlzdGljSW5mbyAq c3RhdCwgaW50IHR5cGUpOwogICoKICAqIEZpcnN0IHdlIHRyeSB0byByZWR1 Y2UgdGhlIGxpc3Qgb2YgY2xhdXNlcyBieSBhcHBseWluZyAoc29mdCkgZnVu Y3Rpb25hbAogICogZGVwZW5kZW5jaWVzLCBhbmQgdGhlbiB3ZSB0cnkgdG8g ZXN0aW1hdGUgdGhlIHNlbGVjdGl2aXR5IG9mIHRoZSByZWR1Y2VkCi0gKiBs aXN0IG9mIGNsYXVzZXMgdXNpbmcgdGhlIG11bHRpdmFyaWF0ZSBNQ1YgbGlz dC4KKyAqIGxpc3Qgb2YgY2xhdXNlcyB1c2luZyB0aGUgbXVsdGl2YXJpYXRl IE1DViBsaXN0IGFuZCBoaXN0b2dyYW1zLgogICoKICAqIEZpbmFsbHkgd2Ug cmVtb3ZlIHRoZSBwb3J0aW9uIG9mIGNsYXVzZXMgZXN0aW1hdGVkIHVzaW5n IG11bHRpdmFyaWF0ZSBzdGF0cywKICAqIGFuZCBwcm9jZXNzIHRoZSByZXN0 IG9mIHRoZSBjbGF1c2VzIHVzaW5nIHRoZSByZWd1bGFyIHBlci1jb2x1bW4g c3RhdHMuCkBAIC0yMTYsMTEgKzIyNiwxMyBAQCBjbGF1c2VsaXN0X3NlbGVj dGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCSAqIHdpdGggdGhlIG11bHRp dmFyaWF0ZSBjb2RlIGFuZCBzaW1wbHkgc2tpcCB0byBlc3RpbWF0aW9uIHVz aW5nIHRoZQogCSAqIHJlZ3VsYXIgcGVyLWNvbHVtbiBzdGF0cy4KIAkgKi8K LQlpZiAoaGFzX3N0YXRzKHN0YXRzLCBNVl9DTEFVU0VfVFlQRV9NQ1YpICYm Ci0JCShjb3VudF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkLCBNVl9DTEFV U0VfVFlQRV9NQ1YpID49IDIpKQorCWlmIChoYXNfc3RhdHMoc3RhdHMsIE1W X0NMQVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpICYmCisJ CShjb3VudF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkLAorCQkJCQkJICBN Vl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNUKSA+PSAy KSkKIAl7CiAJCS8qIGNvbGxlY3QgYXR0cmlidXRlcyBmcm9tIHRoZSBjb21w YXRpYmxlIGNvbmRpdGlvbnMgKi8KLQkJQml0bWFwc2V0ICptdmF0dG51bXMg PSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsIE1WX0NMQVVT RV9UWVBFX01DVik7CisJCUJpdG1hcHNldCAqbXZhdHRudW1zID0gY29sbGVj dF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkLAorCQkJCQkJCQkJCQlNVl9D TEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNUKTsKIAogCQkv KiBhbmQgc2VhcmNoIGZvciB0aGUgc3RhdGlzdGljIGNvdmVyaW5nIHRoZSBt b3N0IGF0dHJpYnV0ZXMgKi8KIAkJTVZTdGF0aXN0aWNJbmZvICptdnN0YXQg PSBjaG9vc2VfbXZfc3RhdGlzdGljcyhzdGF0cywgbXZhdHRudW1zKTsKQEAg LTIzMiw3ICsyNDQsNyBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5u ZXJJbmZvICpyb290LAogCiAJCQkvKiBzcGxpdCB0aGUgY2xhdXNlbGlzdCBp bnRvIHJlZ3VsYXIgYW5kIG12LWNsYXVzZXMgKi8KIAkJCWNsYXVzZXMgPSBj bGF1c2VsaXN0X212X3NwbGl0KHJvb3QsIHJlbGlkLCBjbGF1c2VzLCAmbXZj bGF1c2VzLAotCQkJCQkJCQkJCSAgbXZzdGF0LCBNVl9DTEFVU0VfVFlQRV9N Q1YpOworCQkJCQkJCQkJCSAgbXZzdGF0LCBNVl9DTEFVU0VfVFlQRV9NQ1Yg fCBNVl9DTEFVU0VfVFlQRV9ISVNUKTsKIAogCQkJLyogd2UndmUgY2hvc2Vu IHRoZSBoaXN0b2dyYW0gdG8gbWF0Y2ggdGhlIGNsYXVzZXMgKi8KIAkJCUFz c2VydChtdmNsYXVzZXMgIT0gTklMKTsKQEAgLTk0NCw2ICs5NTYsNyBAQCBz dGF0aWMgU2VsZWN0aXZpdHkKIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHko UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGlj SW5mbyAqbXZzdGF0cykKIHsKIAlib29sIGZ1bGxtYXRjaCA9IGZhbHNlOwor CVNlbGVjdGl2aXR5IHMxID0gMC4wLCBzMiA9IDAuMDsKIAogCS8qCiAJICog TG93ZXN0IGZyZXF1ZW5jeSBpbiB0aGUgTUNWIGxpc3QgKG1heSBiZSB1c2Vk IGFzIGFuIHVwcGVyIGJvdW5kCkBAIC05NTcsOSArOTcwLDI0IEBAIGNsYXVz ZWxpc3RfbXZfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzCiAJICogICAgICBNQ1Yv aGlzdG9ncmFtIGV2YWx1YXRpb24pLgogCSAqLwogCi0JLyogRXZhbHVhdGUg dGhlIE1DViBzZWxlY3Rpdml0eSAqLwotCXJldHVybiBjbGF1c2VsaXN0X212 X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwgY2xhdXNlcywgbXZzdGF0cywK KwkvKiBFdmFsdWF0ZSB0aGUgTUNWIGZpcnN0LiAqLworCXMxID0gY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMsIG12 c3RhdHMsCiAJCQkJCQkJCQkJICAgJmZ1bGxtYXRjaCwgJm1jdl9sb3cpOwor CisJLyoKKwkgKiBJZiB3ZSBnb3QgYSBmdWxsIGVxdWFsaXR5IG1hdGNoIG9u IHRoZSBNQ1YgbGlzdCwgd2UncmUgZG9uZSAoYW5kCisJICogdGhlIGVzdGlt YXRlIGlzIHByZXR0eSBnb29kKS4KKwkgKi8KKwlpZiAoZnVsbG1hdGNoICYm IChzMSA+IDAuMCkpCisJCXJldHVybiBzMTsKKworCS8qIFRPRE8gaWYgKGZ1 bGxtYXRjaCkgd2l0aG91dCBtYXRjaGluZyBNQ1YgaXRlbSwgdXNlIHRoZSBt Y3ZfbG93CisJICogICAgICBzZWxlY3Rpdml0eSBhcyB1cHBlciBib3VuZCAq LworCisJczIgPSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3Jh bShyb290LCBjbGF1c2VzLCBtdnN0YXRzKTsKKworCS8qIFRPRE8gY2xhbXAg dG8gPD0gMS4wIChvciBtb3JlIHN0cmljdGx5LCB3aGVuIHBvc3NpYmxlKSAq LworCXJldHVybiBzMSArIHMyOwogfQogCiAvKgpAQCAtMTEyOSw3ICsxMTU3 LDcgQEAgY2hvb3NlX212X3N0YXRpc3RpY3MoTGlzdCAqc3RhdHMsIEJpdG1h cHNldCAqYXR0bnVtcykKIAkJaW50CW51bWF0dHJzID0gYXR0cnMtPmRpbTE7 CiAKIAkJLyogc2tpcCBkZXBlbmRlbmNpZXMtb25seSBzdGF0cyAqLwotCQlp ZiAoISBpbmZvLT5tY3ZfYnVpbHQpCisJCWlmICghIChpbmZvLT5tY3ZfYnVp bHQgfHwgaW5mby0+aGlzdF9idWlsdCkpCiAJCQljb250aW51ZTsKIAogCQkv KiBjb3VudCBjb2x1bW5zIGNvdmVyZWQgYnkgdGhlIGhpc3RvZ3JhbSAqLwpA QCAtMTM2MCw3ICsxMzg4LDcgQEAgbXZfY29tcGF0aWJsZV93YWxrZXIoTm9k ZSAqbm9kZSwgbXZfY29tcGF0aWJsZV9jb250ZXh0ICpjb250ZXh0KQogCQkJ Y2FzZSBGX1NDQUxBUkdUU0VMOgogCiAJCQkJLyogbm90IGNvbXBhdGlibGUg d2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAqLwotCQkJCWlmICghIChj b250ZXh0LT50eXBlcyAmIE1WX0NMQVVTRV9UWVBFX01DVikpCisJCQkJaWYg KCEgKGNvbnRleHQtPnR5cGVzICYgKE1WX0NMQVVTRV9UWVBFX01DViB8IE1W X0NMQVVTRV9UWVBFX0hJU1QpKSkKIAkJCQkJcmV0dXJuIHRydWU7CS8qIHRl cm1pbmF0ZSAqLwogIAogCQkJCWJyZWFrOwpAQCAtMTU4OCw2ICsxNjE2LDkg QEAgc3RhdHNfdHlwZV9tYXRjaGVzKE1WU3RhdGlzdGljSW5mbyAqc3RhdCwg aW50IHR5cGUpCiAJaWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfTUNWKSAm JiBzdGF0LT5tY3ZfYnVpbHQpCiAJCXJldHVybiB0cnVlOwogCisJaWYgKCh0 eXBlICYgTVZfQ0xBVVNFX1RZUEVfSElTVCkgJiYgc3RhdC0+aGlzdF9idWls dCkKKwkJcmV0dXJuIHRydWU7CisKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAg LTE2MDYsNiArMTYzNyw5IEBAIGhhc19zdGF0cyhMaXN0ICpzdGF0cywgaW50 IHR5cGUpCiAJCS8qIHRlcm1pbmF0ZSBpZiB3ZSd2ZSBmb3VuZCBhdCBsZWFz dCBvbmUgbWF0Y2hpbmcgc3RhdGlzdGljcyAqLwogCQlpZiAoc3RhdHNfdHlw ZV9tYXRjaGVzKHN0YXQsIHR5cGUpKQogCQkJcmV0dXJuIHRydWU7CisKKwkJ aWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfSElTVCkgJiYgc3RhdC0+aGlz dF9idWlsdCkKKwkJCXJldHVybiB0cnVlOwogCX0KIAogCXJldHVybiBmYWxz ZTsKQEAgLTIwMTAsMyArMjA0NCw1MjUgQEAgdXBkYXRlX21hdGNoX2JpdG1h cF9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAog CiAJcmV0dXJuIG5tYXRjaGVzOwogfQorCisvKgorICogRXN0aW1hdGUgc2Vs ZWN0aXZpdHkgb2YgY2xhdXNlcyB1c2luZyBhIGhpc3RvZ3JhbS4KKyAqCisg KiBJZiB0aGVyZSdzIG5vIGhpc3RvZ3JhbSBmb3IgdGhlIHN0YXRzLCB0aGUg ZnVuY3Rpb24gcmV0dXJucyAwLjAuCisgKgorICogVGhlIGdlbmVyYWwgaWRl YSBvZiB0aGlzIG1ldGhvZCBpcyBzaW1pbGFyIHRvIGhvdyBNQ1YgbGlzdHMg YXJlCisgKiBwcm9jZXNzZWQsIGV4Y2VwdCB0aGF0IHRoaXMgaW50cm9kdWNl cyB0aGUgY29uY2VwdCBvZiBhIHBhcnRpYWwKKyAqIG1hdGNoIChNQ1Ygb25s eSB3b3JrcyB3aXRoIGZ1bGwgbWF0Y2ggLyBtaXNtYXRjaCkuCisgKgorICog VGhlIGFsZ29yaXRobSB3b3JrcyBsaWtlIHRoaXM6CisgKgorICogICAxKSBt YXJrIGFsbCBidWNrZXRzIGFzICdmdWxsIG1hdGNoJworICogICAyKSB3YWxr IHRocm91Z2ggYWxsIHRoZSBjbGF1c2VzCisgKiAgIDMpIGZvciBhIHBhcnRp Y3VsYXIgY2xhdXNlLCB3YWxrIHRocm91Z2ggYWxsIHRoZSBidWNrZXRzCisg KiAgIDQpIHNraXAgYnVja2V0cyB0aGF0IGFyZSBhbHJlYWR5ICdubyBtYXRj aCcKKyAqICAgNSkgY2hlY2sgY2xhdXNlIGZvciBidWNrZXRzIHRoYXQgc3Rp bGwgbWF0Y2ggKGF0IGxlYXN0IHBhcnRpYWxseSkKKyAqICAgNikgc3VtIGZy ZXF1ZW5jaWVzIGZvciBidWNrZXRzIHRvIGdldCBzZWxlY3Rpdml0eQorICoK KyAqIFVubGlrZSBNQ1YgbGlzdHMsIGhpc3RvZ3JhbXMgaGF2ZSBhIGNvbmNl cHQgb2YgYSBwYXJ0aWFsIG1hdGNoLiBJbgorICogdGhhdCBjYXNlIHdlIHVz ZSAxLzIgdGhlIGJ1Y2tldCwgdG8gbWluaW1pemUgdGhlIGF2ZXJhZ2UgZXJy b3IuIFRoZQorICogTVYgaGlzdG9ncmFtcyBhcmUgdXN1YWxseSBsZXNzIGRl dGFpbGVkIHRoYW4gdGhlIHBlci1jb2x1bW4gb25lcywKKyAqIG1lYW5pbmcg dGhlIHN1bSBpcyBvZnRlbiBxdWl0ZSBoaWdoICh0aGFua3MgdG8gY29tYmlu aW5nIGEgbG90IG9mCisgKiAicGFydGlhbGx5IGhpdCIgYnVja2V0cykuCisg KgorICogTWF5YmUgd2UgY291bGQgdXNlIHBlci1idWNrZXQgaW5mb3JtYXRp b24gd2l0aCBudW1iZXIgb2YgZGlzdGluY3QKKyAqIHZhbHVlcyBpdCBjb250 YWlucyAoZm9yIGVhY2ggZGltZW5zaW9uKSwgYW5kIHRoZW4gdXNlIHRoYXQg dG8gY29ycmVjdAorICogdGhlIGVzdGltYXRlIChzbyB3aXRoIDEwIGRpc3Rp bmN0IHZhbHVlcywgd2UnZCB1c2UgMS8xMCBvZiB0aGUgYnVja2V0CisgKiBm cmVxdWVuY3kpLiBXZSBtaWdodCBhbHNvIHNjYWxlIHRoZSB2YWx1ZSBkZXBl bmRpbmcgb24gdGhlIGFjdHVhbAorICogbmRpc3RpbmN0IGVzdGltYXRlIChu b3QganVzdCB0aGUgdmFsdWVzIG9ic2VydmVkIGluIHRoZSBzYW1wbGUpLgor ICoKKyAqIEFub3RoZXIgb3B0aW9uIHdvdWxkIGJlIHRvIG11bHRpcGx5IHRo ZSBzZWxlY3Rpdml0aWVzLCBpLmUuIGlmIHdlIGdldAorICogJ3BhcnRpYWwg bWF0Y2gnIGZvciBhIGJ1Y2tldCBmb3IgbXVsdGlwbGUgY29uZGl0aW9ucywg d2UgbWlnaHQgdXNlCisgKiAwLjVeayAod2hlcmUgayBpcyB0aGUgbnVtYmVy IG9mIGNvbmRpdGlvbnMpLCBpbnN0ZWFkIG9mIDAuNS4gVGhpcworICogcHJv YmFibHkgZG9lcyBub3QgbWluaW1pemUgdGhlIGF2ZXJhZ2UgZXJyb3IsIHRo b3VnaC4KKyAqCisgKiBUT0RPIFRoaXMgbWlnaHQgdXNlIGEgc2ltaWxhciBz aG9ydGN1dCB0byBNQ1YgbGlzdHMgLSBjb3VudCBidWNrZXRzCisgKiAgICAg IG1hcmtlZCBhcyBwYXJ0aWFsL2Z1bGwgbWF0Y2gsIGFuZCB0ZXJtaW5hdGUg b25jZSB0aGlzIGRyb3AgdG8gMC4KKyAqICAgICAgTm90IHN1cmUgaWYgaXQn cyByZWFsbHkgd29ydGggaXQgLSBmb3IgTUNWIGxpc3RzIGEgc2l0dWF0aW9u IGxpa2UKKyAqICAgICAgdGhpcyBpcyBub3QgdW5jb21tb24sIGJ1dCBmb3Ig aGlzdG9ncmFtcyBpdCdzIG5vdCB0aGF0IGNsZWFyLgorICovCitzdGF0aWMg U2VsZWN0aXZpdHkKK2NsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9n cmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJ CQkJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzKQoreworCWludCBpOworCVNl bGVjdGl2aXR5IHMgPSAwLjA7CisJU2VsZWN0aXZpdHkgdSA9IDAuMDsKKwor CWludAkJbm1hdGNoZXMgPSAwOworCWNoYXIgICAqbWF0Y2hlcyA9IE5VTEw7 CisKKwlNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZoaXN0ID0gTlVMTDsKKwor CS8qIHRoZXJlJ3Mgbm8gaGlzdG9ncmFtICovCisJaWYgKCEgbXZzdGF0cy0+ aGlzdF9idWlsdCkKKwkJcmV0dXJuIDAuMDsKKworCS8qIFRoZXJlIG1heSBi ZSBubyBoaXN0b2dyYW0gaW4gdGhlIHN0YXRzIChjaGVjayBoaXN0X2J1aWx0 IGZsYWcpICovCisJbXZoaXN0ID0gbG9hZF9tdl9oaXN0b2dyYW0obXZzdGF0 cy0+bXZvaWQpOworCisJQXNzZXJ0IChtdmhpc3QgIT0gTlVMTCk7CisJQXNz ZXJ0IChjbGF1c2VzICE9IE5JTCk7CisJQXNzZXJ0IChsaXN0X2xlbmd0aChj bGF1c2VzKSA+PSAyKTsKKworCS8qCisJICogQml0bWFwIG9mIGJ1Y2tldCBt YXRjaGVzIChtaXNtYXRjaCwgcGFydGlhbCwgZnVsbCkuIGJ5IGRlZmF1bHQK KwkgKiBhbGwgYnVja2V0cyBmdWxseSBtYXRjaCAoYW5kIHdlJ2xsIGVsaW1p bmF0ZSB0aGVtKS4KKwkgKi8KKwltYXRjaGVzID0gcGFsbG9jMChzaXplb2Yo Y2hhcikgKiBtdmhpc3QtPm5idWNrZXRzKTsKKwltZW1zZXQobWF0Y2hlcywg IE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm12aGlzdC0+bmJ1 Y2tldHMpOworCisJbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCisJ LyogYnVpbGQgdGhlIG1hdGNoIGJpdG1hcCAqLworCXVwZGF0ZV9tYXRjaF9i aXRtYXBfaGlzdG9ncmFtKHJvb3QsIGNsYXVzZXMsCisJCQkJCQkJCSAgbXZz dGF0cy0+c3Rha2V5cywgbXZoaXN0LAorCQkJCQkJCQkgIG5tYXRjaGVzLCBt YXRjaGVzLCBmYWxzZSk7CisKKwkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUg YnVja2V0cyBhbmQgc3VtIHRoZSBzZWxlY3Rpdml0aWVzICovCisJZm9yIChp ID0gMDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwl7CisJCS8qCisJ CSAqIEZpbmQgb3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0YSBpcyBjb3ZlcmVk IGJ5IHRoZSBoaXN0b2dyYW0sCisJCSAqIHNvIHRoYXQgd2UgY2FuICdzY2Fs ZScgdGhlIHNlbGVjdGl2aXR5IHByb3Blcmx5IChlLmcuIHdoZW4KKwkJICog b25seSA1MCUgb2YgdGhlIHNhbXBsZSBnb3QgaW50byB0aGUgaGlzdG9ncmFt LCBhbmQgdGhlIHJlc3QKKwkJICogaXMgaW4gYSBNQ1YgbGlzdCkuCisJCSAq CisJCSAqIFRPRE8gVGhpcyBtaWdodCBiZSBoYW5kbGVkIGJ5IGtlZXBpbmcg YSBnbG9iYWwgImZyZXF1ZW5jeSIKKwkJICogICAgICBmb3IgdGhlIHdob2xl IGhpc3RvZ3JhbSwgd2hpY2ggbWlnaHQgc2F2ZSB1cyBzb21lIHRpbWUKKwkJ ICogICAgICBzcGVudCBhY2Nlc3NpbmcgdGhlIG5vdC1tYXRjaGluZyBwYXJ0 IG9mIHRoZSBoaXN0b2dyYW0uCisJCSAqICAgICAgQWx0aG91Z2ggaXQncyBs aWtlbHkgaW4gYSBjYWNoZSwgc28gaXQncyB2ZXJ5IGZhc3QuCisJCSAqLwor CQl1ICs9IG12aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKworCQlpZiAo bWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpCisJCQlzICs9IG12 aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwkJZWxzZSBpZiAobWF0Y2hl c1tpXSA9PSBNVlNUQVRTX01BVENIX1BBUlRJQUwpCisJCQlzICs9IDAuNSAq IG12aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwl9CisKKyNpZmRlZiBE RUJVR19NVkhJU1QKKwlkZWJ1Z19oaXN0b2dyYW1fbWF0Y2hlcyhtdmhpc3Qs IG1hdGNoZXMpOworI2VuZGlmCisKKwkvKiByZWxlYXNlIHRoZSBhbGxvY2F0 ZWQgYml0bWFwIGFuZCBkZXNlcmlhbGl6ZWQgaGlzdG9ncmFtICovCisJcGZy ZWUobWF0Y2hlcyk7CisJcGZyZWUobXZoaXN0KTsKKworCXJldHVybiBzICog dTsKK30KKworLyogY2FjaGVkIHJlc3VsdCBvZiBidWNrZXQgYm91bmRhcnkg Y29tcGFyaXNvbiBmb3IgYSBzaW5nbGUgZGltZW5zaW9uICovCisKKyNkZWZp bmUgSElTVF9DQUNIRV9OT1RfRk9VTkQJCTB4MDAKKyNkZWZpbmUgSElTVF9D QUNIRV9GQUxTRQkJCTB4MDEKKyNkZWZpbmUgSElTVF9DQUNIRV9UUlVFCQkJ CTB4MDMKKyNkZWZpbmUgSElTVF9DQUNIRV9NQVNLCQkJCTB4MDIKKworc3Rh dGljIGNoYXIKK2J1Y2tldF9jb250YWluc192YWx1ZShGbWdySW5mbyBsdHBy b2MsIERhdHVtIGNvbnN0dmFsdWUsCisJCQkJCSAgRGF0dW0gbWluX3ZhbHVl LCAgIERhdHVtIG1heF92YWx1ZSwKKwkJCQkJICBpbnQgICBtaW5faW5kZXgs ICAgaW50ICAgbWF4X2luZGV4LAorCQkJCQkgIGJvb2wgIG1pbl9pbmNsdWRl LCBib29sICBtYXhfaW5jbHVkZSwKKwkJCQkJICBjaGFyICogY2FsbGNhY2hl KQoreworCWJvb2wgYSwgYjsKKworCWNoYXIgbWluX2NhY2hlZCA9IGNhbGxj YWNoZVttaW5faW5kZXhdOworCWNoYXIgbWF4X2NhY2hlZCA9IGNhbGxjYWNo ZVttYXhfaW5kZXhdOworCisJLyoKKwkgKiBGaXJzdCBzb21lIHF1aWNrIGNo ZWNrcyBvbiBlcXVhbGl0eSAtIGlmIGFueSBvZiB0aGUgYm91bmRhcmllcyBl cXVhbHMsCisJICogd2UgaGF2ZSBhIHBhcnRpYWwgbWF0Y2ggKHNvIG5vIG5l ZWQgdG8gY2FsbCB0aGUgY29tcGFyYXRvcikuCisJICovCisJaWYgKCgobWlu X3ZhbHVlID09IGNvbnN0dmFsdWUpICYmIChtaW5faW5jbHVkZSkpIHx8CisJ CSgobWF4X3ZhbHVlID09IGNvbnN0dmFsdWUpICYmIChtYXhfaW5jbHVkZSkp KQorCQlyZXR1cm4gTVZTVEFUU19NQVRDSF9QQVJUSUFMOworCisJLyogS2Vl cCB0aGUgdmFsdWVzIDAvMSBiZWNhdXNlIG9mIHRoZSBYT1IgYXQgdGhlIGVu ZC4gKi8KKwlhID0gKChtaW5fY2FjaGVkICYgSElTVF9DQUNIRV9NQVNLKSA+ PiAxKTsKKwliID0gKChtYXhfY2FjaGVkICYgSElTVF9DQUNIRV9NQVNLKSA+ PiAxKTsKKworCS8qCisJICogSWYgcmVzdWx0IGZvciB0aGUgYnVja2V0IGxv d2VyIGJvdW5kIG5vdCBpbiBjYWNoZSwgZXZhbHVhdGUgdGhlIGZ1bmN0aW9u CisJICogYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIGNhY2hlLgorCSAq LworCWlmICghIG1pbl9jYWNoZWQpCisJeworCQlhID0gRGF0dW1HZXRCb29s KEZ1bmN0aW9uQ2FsbDJDb2xsKCZsdHByb2MsCisJCQkJCQkJCQkJICAgREVG QVVMVF9DT0xMQVRJT05fT0lELAorCQkJCQkJCQkJCSAgIGNvbnN0dmFsdWUs IG1pbl92YWx1ZSkpOworCQkvKiByZW1lbWJlciB0aGUgcmVzdWx0ICovCisJ CWNhbGxjYWNoZVttaW5faW5kZXhdID0gKGEpID8gSElTVF9DQUNIRV9UUlVF IDogSElTVF9DQUNIRV9GQUxTRTsKKwl9CisKKwkvKiBBbmQgZG8gdGhlIHNh bWUgZm9yIHRoZSB1cHBlciBib3VuZC4gKi8KKwlpZiAoISBtYXhfY2FjaGVk KQorCXsKKwkJYiA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbCgm bHRwcm9jLAorCQkJCQkJCQkJCSAgIERFRkFVTFRfQ09MTEFUSU9OX09JRCwK KwkJCQkJCQkJCQkgICBjb25zdHZhbHVlLCBtYXhfdmFsdWUpKTsKKwkJLyog cmVtZW1iZXIgdGhlIHJlc3VsdCAqLworCQljYWxsY2FjaGVbbWF4X2luZGV4 XSA9IChiKSA/IEhJU1RfQ0FDSEVfVFJVRSA6IEhJU1RfQ0FDSEVfRkFMU0U7 CisJfQorCisJcmV0dXJuIChhIF4gYikgPyBNVlNUQVRTX01BVENIX1BBUlRJ QUwgOiBNVlNUQVRTX01BVENIX05PTkU7Cit9CisKK3N0YXRpYyBjaGFyCiti dWNrZXRfaXNfc21hbGxlcl90aGFuX3ZhbHVlKEZtZ3JJbmZvIG9wcHJvYywg RGF0dW0gY29uc3R2YWx1ZSwKKwkJCQkJICBEYXR1bSBtaW5fdmFsdWUsICAg RGF0dW0gbWF4X3ZhbHVlLAorCQkJCQkgIGludCAgIG1pbl9pbmRleCwgICBp bnQgICBtYXhfaW5kZXgsCisJCQkJCSAgYm9vbCAgbWluX2luY2x1ZGUsIGJv b2wgIG1heF9pbmNsdWRlLAorCQkJCQkgIGNoYXIgKiBjYWxsY2FjaGUsIGJv b2wgaXNndCkKK3sKKwljaGFyIG1pbl9jYWNoZWQgPSBjYWxsY2FjaGVbbWlu X2luZGV4XTsKKwljaGFyIG1heF9jYWNoZWQgPSBjYWxsY2FjaGVbbWF4X2lu ZGV4XTsKKworCS8qIEtlZXAgdGhlIHZhbHVlcyAwLzEgYmVjYXVzZSBvZiB0 aGUgWE9SIGF0IHRoZSBlbmQuICovCisJYm9vbCBhID0gKChtaW5fY2FjaGVk ICYgSElTVF9DQUNIRV9NQVNLKSA+PiAxKTsKKwlib29sIGIgPSAoKG1heF9j YWNoZWQgJiBISVNUX0NBQ0hFX01BU0spID4+IDEpOworCisJaWYgKCEgbWlu X2NhY2hlZCkKKwl7CisJCWEgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxs MkNvbGwoJm9wcHJvYywKKwkJCQkJCQkJCQkgICBERUZBVUxUX0NPTExBVElP Tl9PSUQsCisJCQkJCQkJCQkJICAgbWluX3ZhbHVlLAorCQkJCQkJCQkJCSAg IGNvbnN0dmFsdWUpKTsKKwkJLyogcmVtZW1iZXIgdGhlIHJlc3VsdCAqLwor CQljYWxsY2FjaGVbbWluX2luZGV4XSA9IChhKSA/IEhJU1RfQ0FDSEVfVFJV RSA6IEhJU1RfQ0FDSEVfRkFMU0U7CisJfQorCisJaWYgKCEgbWF4X2NhY2hl ZCkKKwl7CisJCWIgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwo Jm9wcHJvYywKKwkJCQkJCQkJCQkgICBERUZBVUxUX0NPTExBVElPTl9PSUQs CisJCQkJCQkJCQkJICAgbWF4X3ZhbHVlLAorCQkJCQkJCQkJCSAgIGNvbnN0 dmFsdWUpKTsKKwkJLyogcmVtZW1iZXIgdGhlIHJlc3VsdCAqLworCQljYWxs Y2FjaGVbbWF4X2luZGV4XSA9IChiKSA/IEhJU1RfQ0FDSEVfVFJVRSA6IEhJ U1RfQ0FDSEVfRkFMU0U7CisJfQorCisJLyoKKwkgKiBOb3csIHdlIG5lZWQg dG8gY29tYmluZSBib3RoIHJlc3VsdHMgaW50byB0aGUgZmluYWwgYW5zd2Vy LCBhbmQgd2UgbmVlZAorCSAqIHRvIGJlIGNhcmVmdWwgYWJvdXQgdGhlICdp c2d0JyB2YXJpYWJsZSB3aGljaCBraW5kYSBpbnZlcnRzIHRoZSBtZWFuaW5n LgorCSAqCisJICogRmlyc3QsIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVuIGVh Y2ggYm91bmRhcnkgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0cy4KKwkgKiBJ biB0aGF0IGNhc2UgdGhlIG91dGNvbWUgY2FuIG9ubHkgYmUgJ3BhcnRpYWwn IG1hdGNoLgorCSAqLworCSBpZiAoYSAhPSBiKQorCQlyZXR1cm4gTVZTVEFU U19NQVRDSF9QQVJUSUFMOworCisJLyoKKwkgKiBXaGVuIHRoZSByZXN1bHRz IGFyZSB0aGUgc2FtZSwgdGhlbiBpdCBkZXBlbmRzIG9uIHRoZSAnaXNndCcg dmFsdWUuIFRoZXJlCisJICogYXJlIGZvdXIgb3B0aW9uczoKKwkgKgorCSAq IGlzZ3Q9ZmFsc2UgYT1iPXRydWUgID0+IGZ1bGwgbWF0Y2gKKwkgKiBpc2d0 PWZhbHNlIGE9Yj1mYWxzZSA9PiBlbXB0eQorCSAqIGlzZ3Q9dHJ1ZSAgYT1i PXRydWUgID0+IGVtcHR5CisJICogaXNndD10cnVlICBhPWI9ZmFsc2UgPT4g ZnVsbCBtYXRjaAorCSAqCisJICogV2UnbGwgY2hlYXQgYSBiaXQsIGJlY2F1 c2Ugd2Uga25vdyB0aGF0IChhPWIpIHNvIHdlJ2xsIHVzZSBqdXN0IG9uZSBv ZiB0aGVtLgorCSAqLworCWlmIChpc2d0KQorCQlyZXR1cm4gKCFhKSA/IE1W U1RBVFNfTUFUQ0hfRlVMTCA6IE1WU1RBVFNfTUFUQ0hfTk9ORTsKKwllbHNl CisJCXJldHVybiAoIGEpID8gTVZTVEFUU19NQVRDSF9GVUxMIDogTVZTVEFU U19NQVRDSF9OT05FOworfQorCisvKgorICogRXZhbHVhdGUgY2xhdXNlcyB1 c2luZyB0aGUgaGlzdG9ncmFtLCBhbmQgdXBkYXRlIHRoZSBtYXRjaCBiaXRt YXAuCisgKgorICogVGhlIGJpdG1hcCBtYXkgYmUgYWxyZWFkeSBwYXJ0aWFs bHkgc2V0LCBzbyB0aGlzIGlzIHJlYWxseSBhIHdheSB0bworICogY29tYmlu ZSByZXN1bHRzIG9mIHNldmVyYWwgY2xhdXNlIGxpc3RzIC0gZWl0aGVyIHdo ZW4gY29tcHV0aW5nCisgKiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSBQKEF8 Qikgb3IgYSBjb21iaW5hdGlvbiBvZiBBTkQvT1IgY2xhdXNlcy4KKyAqCisg KiBOb3RlOiBUaGlzIGlzIG5vdCBhIHNpbXBsZSBiaXRtYXAgaW4gdGhlIHNl bnNlIHRoYXQgdGhlcmUgYXJlIG1vcmUKKyAqICAgICAgIHRoYW4gdHdvIHBv c3NpYmxlIHZhbHVlcyBmb3IgZWFjaCBpdGVtIC0gbm8gbWF0Y2gsIHBhcnRp YWwKKyAqICAgICAgIG1hdGNoIGFuZCBmdWxsIG1hdGNoLiBTbyB3ZSBuZWVk IDIgYml0cyBwZXIgaXRlbS4KKyAqCisgKiBUT0RPIFRoaXMgd29ya3Mgd2l0 aCAnYml0bWFwJyB3aGVyZSBlYWNoIGl0ZW0gaXMgcmVwcmVzZW50ZWQgYXMg YQorICogICAgICBjaGFyLCB3aGljaCBpcyBzbGlnaHRseSB3YXN0ZWZ1bC4g SW5zdGVhZCwgd2UgY291bGQgdXNlIGEgYml0bWFwCisgKiAgICAgIHdpdGgg MiBiaXRzIHBlciBpdGVtLCByZWR1Y2luZyB0aGUgc2l6ZSB0byB+MS80LiBC eSB1c2luZyB2YWx1ZXMKKyAqICAgICAgMCwgMSBhbmQgMyAoaW5zdGVhZCBv ZiAwLCAxIGFuZCAyKSwgdGhlIG9wZXJhdGlvbnMgKG1lcmdpbmcgZXRjLikK KyAqICAgICAgbWlnaHQgYmUgcGVyZm9ybWVkIGp1c3QgbGlrZSBmb3Igc2lt cGxlIGJpdG1hcCBieSB1c2luZyAmIGFuZCB8LAorICogICAgICB3aGljaCBt aWdodCBiZSBmYXN0ZXIgdGhhbiBtaW4vbWF4LgorICovCitzdGF0aWMgaW50 Cit1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkgIGludDJ2ZWN0b3IgKnN0 YWtleXMsCisJCQkJCQkJICBNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZoaXN0 LAorCQkJCQkJCSAgaW50IG5tYXRjaGVzLCBjaGFyICogbWF0Y2hlcywKKwkJ CQkJCQkgIGJvb2wgaXNfb3IpCit7CisJaW50IGk7CisJTGlzdENlbGwgKiBs OworCisJLyoKKwkgKiBVc2VkIGZvciBjYWNoaW5nIGZ1bmN0aW9uIGNhbGxz LCBvbmx5IG9uY2UgcGVyIGRlZHVwbGljYXRlZCB2YWx1ZS4KKwkgKgorCSAq IFdlIGtub3cgbWF5IGhhdmUgdXAgdG8gKDIgKiBuYnVja2V0cykgdmFsdWVz IHBlciBkaW1lbnNpb24uIEl0J3MKKwkgKiBwcm9iYWJseSBvdmVya2lsbCwg YnV0IGxldCdzIGFsbG9jYXRlIHRoYXQgb25jZSBmb3IgYWxsIGNsYXVzZXMs CisJICogdG8gbWluaW1pemUgb3ZlcmhlYWQuCisJICoKKwkgKiBBbHNvLCB3 ZSBvbmx5IG5lZWQgdHdvIGJpdHMgcGVyIHZhbHVlLCBidXQgdGhpcyBhbGxv Y2F0ZXMgYnl0ZQorCSAqIHBlciB2YWx1ZS4gTWlnaHQgYmUgd29ydGggb3B0 aW1pemluZy4KKwkgKgorCSAqIDB4MDAgLSBub3QgeWV0IGNhbGxlZAorCSAq IDB4MDEgLSBjYWxsZWQsIHJlc3VsdCBpcyAnZmFsc2UnCisJICogMHgwMyAt IGNhbGxlZCwgcmVzdWx0IGlzICd0cnVlJworCSAqLworCWNoYXIgKmNhbGxj YWNoZSA9IHBhbGxvYyhtdmhpc3QtPm5idWNrZXRzKTsKKworCUFzc2VydCht dmhpc3QgIT0gTlVMTCk7CisJQXNzZXJ0KG12aGlzdC0+bmJ1Y2tldHMgPiAw KTsKKwlBc3NlcnQobm1hdGNoZXMgPj0gMCk7CisJQXNzZXJ0KG5tYXRjaGVz IDw9IG12aGlzdC0+bmJ1Y2tldHMpOworCisJQXNzZXJ0KGNsYXVzZXMgIT0g TklMKTsKKwlBc3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMSk7CisK KwkvKiBsb29wIHRocm91Z2ggdGhlIGNsYXVzZXMgYW5kIGRvIHRoZSBlc3Rp bWF0aW9uICovCisJZm9yZWFjaCAobCwgY2xhdXNlcykKKwl7CisJCU5vZGUg KiBjbGF1c2UgPSAoTm9kZSopbGZpcnN0KGwpOworCisJCS8qIGlmIGl0J3Mg YSBSZXN0cmljdEluZm8sIHRoZW4gZXh0cmFjdCB0aGUgY2xhdXNlICovCisJ CWlmIChJc0EoY2xhdXNlLCBSZXN0cmljdEluZm8pKQorCQkJY2xhdXNlID0g KE5vZGUqKSgoUmVzdHJpY3RJbmZvKiljbGF1c2UpLT5jbGF1c2U7CisKKwkJ LyogaXQncyBlaXRoZXIgT3BDbGF1c2UsIG9yIE51bGxUZXN0ICovCisJCWlm IChpc19vcGNsYXVzZShjbGF1c2UpKQorCQl7CisJCQlPcEV4cHIgKiBleHBy ID0gKE9wRXhwciopY2xhdXNlOworCQkJYm9vbAkJdmFyb25sZWZ0ID0gdHJ1 ZTsKKwkJCWJvb2wJCW9rOworCisJCQlGbWdySW5mbwlvcHByb2M7CQkJLyog b3BlcmF0b3IgKi8KKwkJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9w bm8pLCAmb3Bwcm9jKTsKKworCQkJLyogcmVzZXQgdGhlIGNhY2hlIChwZXIg Y2xhdXNlKSAqLworCQkJbWVtc2V0KGNhbGxjYWNoZSwgMCwgbXZoaXN0LT5u YnVja2V0cyk7CisKKwkJCW9rID0gKE51bVJlbGlkcyhjbGF1c2UpID09IDEp ICYmCisJCQkJIChpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlKGxzZWNvbmQo ZXhwci0+YXJncykpIHx8CisJCQkJICh2YXJvbmxlZnQgPSBmYWxzZSwKKwkJ CQkgIGlzX3BzZXVkb19jb25zdGFudF9jbGF1c2UobGluaXRpYWwoZXhwci0+ YXJncykpKSk7CisKKwkJCWlmIChvaykKKwkJCXsKKwkJCQlGbWdySW5mbwkJ bHRwcm9jOworCQkJCVJlZ1Byb2NlZHVyZQlvcHJyZXN0ID0gZ2V0X29wcnJl c3QoZXhwci0+b3Bubyk7CisKKwkJCQlWYXIgKiB2YXIgPSAodmFyb25sZWZ0 KSA/IGxpbml0aWFsKGV4cHItPmFyZ3MpIDogbHNlY29uZChleHByLT5hcmdz KTsKKwkJCQlDb25zdCAqIGNzdCA9ICh2YXJvbmxlZnQpID8gbHNlY29uZChl eHByLT5hcmdzKSA6IGxpbml0aWFsKGV4cHItPmFyZ3MpOworCQkJCWJvb2wg aXNndCA9ICghIHZhcm9ubGVmdCk7CisKKwkJCQlUeXBlQ2FjaGVFbnRyeSAq dHlwZWNhY2hlCisJCQkJCQkJCT0gbG9va3VwX3R5cGVfY2FjaGUodmFyLT52 YXJ0eXBlLCBUWVBFQ0FDSEVfTFRfT1BSKTsKKworCQkJCS8qIGxvb2t1cCBk aW1lbnNpb24gZm9yIHRoZSBhdHRyaWJ1dGUgKi8KKwkJCQlpbnQgaWR4ID0g bXZfZ2V0X2luZGV4KHZhci0+dmFyYXR0bm8sIHN0YWtleXMpOworCisJCQkJ Zm1ncl9pbmZvKGdldF9vcGNvZGUodHlwZWNhY2hlLT5sdF9vcHIpLCAmbHRw cm9jKTsKKworCQkJCS8qCisJCQkJICogQ2hlY2sgdGhpcyBmb3IgYWxsIGJ1 Y2tldHMgdGhhdCBzdGlsbCBoYXZlICJ0cnVlIiBpbiB0aGUgYml0bWFwCisJ CQkJICoKKwkJCQkgKiBXZSBhbHJlYWR5IGtub3cgdGhlIGNsYXVzZXMgdXNl IHN1aXRhYmxlIG9wZXJhdG9ycyAoYmVjYXVzZSB0aGF0J3MKKwkJCQkgKiBo b3cgd2UgZmlsdGVyZWQgdGhlbSkuCisJCQkJICovCisJCQkJZm9yIChpID0g MDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwkJCQl7CisJCQkJCWNo YXIgcmVzID0gTVZTVEFUU19NQVRDSF9OT05FOworCisJCQkJCU1WU2VyaWFs aXplZEJ1Y2tldCBidWNrZXQgPSBtdmhpc3QtPmJ1Y2tldHNbaV07CisKKwkJ CQkJLyogaGlzdG9ncmFtIGJvdW5kYXJpZXMgKi8KKwkJCQkJRGF0dW0gbWlu dmFsLCBtYXh2YWw7CisJCQkJCWJvb2wgbWluaW5jbHVkZSwgbWF4aW5jbHVk ZTsKKwkJCQkJaW50IG1pbmlkeCwgbWF4aWR4OworCisJCQkJCS8qCisJCQkJ CSAqIEZvciBBTkQtbGlzdHMsIHdlIGNhbiBhbHNvIG1hcmsgTlVMTCBidWNr ZXRzIGFzICdubyBtYXRjaCcKKwkJCQkJICogKGFuZCB0aGVuIHNraXAgdGhl bSkuIEZvciBPUi1saXN0cyB0aGlzIGlzIG5vdCBwb3NzaWJsZS4KKwkJCQkJ ICovCisJCQkJCWlmICgoISBpc19vcikgJiYgYnVja2V0LT5udWxsc29ubHlb aWR4XSkKKwkJCQkJCW1hdGNoZXNbaV0gPSBNVlNUQVRTX01BVENIX05PTkU7 CisKKwkJCQkJLyoKKwkJCQkJICogU2tpcCBidWNrZXRzIHRoYXQgd2VyZSBh bHJlYWR5IGVsaW1pbmF0ZWQgLSB0aGlzIGlzIGltcG90YW50CisJCQkJCSAq IGNvbnNpZGVyaW5nIGhvdyB3ZSB1cGRhdGUgdGhlIGluZm8gKHdlIG9ubHkg bG93ZXIgdGhlIG1hdGNoKS4KKwkJCQkJICogV2UgY2FuJ3QgcmVhbGx5IGRv IGFueXRoaW5nIGFib3V0IHRoZSBNQVRDSF9QQVJUSUFMIGJ1Y2tldHMuCisJ CQkJCSAqLworCQkJCQlpZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ldID09 IE1WU1RBVFNfTUFUQ0hfTk9ORSkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJ ZWxzZSBpZiAoaXNfb3IgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRD SF9GVUxMKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8qIGxvb2t1cCB0 aGUgdmFsdWVzIGFuZCBjYWNoZSBvZiBmdW5jdGlvbiBjYWxscyAqLworCQkJ CQltaW5pZHggPSBidWNrZXQtPm1pbltpZHhdOworCQkJCQltYXhpZHggPSBi dWNrZXQtPm1heFtpZHhdOworCisJCQkJCW1pbnZhbCA9IG12aGlzdC0+dmFs dWVzW2lkeF1bYnVja2V0LT5taW5baWR4XV07CisJCQkJCW1heHZhbCA9IG12 aGlzdC0+dmFsdWVzW2lkeF1bYnVja2V0LT5tYXhbaWR4XV07CisKKwkJCQkJ bWluaW5jbHVkZSA9IGJ1Y2tldC0+bWluX2luY2x1c2l2ZVtpZHhdOworCQkJ CQltYXhpbmNsdWRlID0gYnVja2V0LT5tYXhfaW5jbHVzaXZlW2lkeF07CisK KwkJCQkJLyoKKwkJCQkJICogVE9ETyBNYXliZSBpdCdzIHBvc3NpYmxlIHRv IGFkZCBoZXJlIGEgc2ltaWxhciBvcHRpbWl6YXRpb24KKwkJCQkJICogICAg ICBhcyBmb3IgdGhlIE1DViBsaXN0czoKKwkJCQkJICogCisJCQkJCSAqICAg ICAgKG5tYXRjaGVzID09IDApICYmIEFORC1saXN0ID0+IGFsbCBlbGltaW5h dGVkIChGQUxTRSkKKwkJCQkJICogICAgICAobm1hdGNoZXMgPT0gTikgJiYg T1ItbGlzdCAgPT4gYWxsIGVsaW1pbmF0ZWQgKFRSVUUpCisJCQkJCSAqCisJ CQkJCSAqICAgICAgQnV0IGl0J3MgbW9yZSBjb21wbGV4IGJlY2F1c2Ugb2Yg dGhlIHBhcnRpYWwgbWF0Y2hlcy4KKwkJCQkJICovCisKKwkJCQkJLyoKKwkJ CQkJKiBJZiBpdCdzIG5vdCBhICI8IiBvciAiPiIgb3IgIj0iIG9wZXJhdG9y LCBqdXN0IGlnbm9yZSB0aGUKKwkJCQkJKiBjbGF1c2UuIE90aGVyd2lzZSBu b3RlIHRoZSByZWxpZCBhbmQgYXR0bnVtIGZvciB0aGUgdmFyaWFibGUuCisJ CQkJCSoKKwkJCQkJKiBUT0RPIEknbSByZWFsbHkgdW5zdXJlIHRoZSBoYW5k bGluZyBvZiAnaXNndCcgZmxhZyAodGhhdCBpcywgY2xhdXNlcworCQkJCQkq ICAgICAgd2l0aCByZXZlcnNlIG9yZGVyIG9mIHZhcmlhYmxlL2NvbnN0YW50 KSBpcyBjb3JyZWN0LiBJIHdvdWxkbid0CisJCQkJCSogICAgICBiZSBzdXJw cmlzZWQgaWYgdGhlcmUgd2FzIHNvbWUgbWl4dXAuIFVzaW5nIHRoZSBsdC9n dCBvcGVyYXRvcnMKKwkJCQkJKiAgICAgIGluc3RlYWQgb2YgbWVzc2luZyB3 aXRoIHRoZSBvcHByb2MgY291bGQgbWFrZSBpdCBzaW1wbGVyLgorCQkJCQkq ICAgICAgSXQgd291bGQgaG93ZXZlciBiZSB1c2luZyBhIGRpZmZlcmVudCBv cGVyYXRvciB0aGFuIHRoZSBxdWVyeSwKKwkJCQkJKiAgICAgIGFsdGhvdWdo IGl0J3Mgbm90IGFueSBzaGFkaWVyIHRoYW4gdXNpbmcgdGhlIHNlbGVjdGl2 aXR5IGZ1bmN0aW9uCisJCQkJCSogICAgICBhcyBpcyBkb25lIGN1cnJlbnRs eS4KKwkJCQkJKi8KKwkJCQkJc3dpdGNoIChvcHJyZXN0KQorCQkJCQl7CisJ CQkJCQljYXNlIEZfU0NBTEFSTFRTRUw6CS8qIFZhciA8IENvbnN0ICovCisJ CQkJCQljYXNlIEZfU0NBTEFSR1RTRUw6CS8qIFZhciA+IENvbnN0ICovCisK KwkJCQkJCQlyZXMgPSBidWNrZXRfaXNfc21hbGxlcl90aGFuX3ZhbHVlKG9w cHJvYywgY3N0LT5jb25zdHZhbHVlLAorCQkJCQkJCQkJCQkJCQkJICAgbWlu dmFsLCBtYXh2YWwsCisJCQkJCQkJCQkJCQkJCQkgICBtaW5pZHgsIG1heGlk eCwKKwkJCQkJCQkJCQkJCQkJCSAgIG1pbmluY2x1ZGUsIG1heGluY2x1ZGUs CisJCQkJCQkJCQkJCQkJCQkgICBjYWxsY2FjaGUsIGlzZ3QpOworCQkJCQkJ CWJyZWFrOworCisJCQkJCQljYXNlIEZfRVFTRUw6CisKKwkJCQkJCQkvKgor CQkJCQkJCSAqIFdlIG9ubHkgY2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMg d2l0aGluIHRoZSBidWNrZXQsIHVzaW5nIHRoZQorCQkJCQkJCSAqIGx0IG9w ZXJhdG9yLCBhbmQgd2UgYWxzbyBjaGVjayBmb3IgZXF1YWxpdHkgd2l0aCB0 aGUgYm91bmRhcmllcy4KKwkJCQkJCQkgKi8KKworCQkJCQkJCXJlcyA9IGJ1 Y2tldF9jb250YWluc192YWx1ZShsdHByb2MsIGNzdC0+Y29uc3R2YWx1ZSwK KwkJCQkJCQkJCQkJCQkJbWludmFsLCBtYXh2YWwsCisJCQkJCQkJCQkJCQkJ CW1pbmlkeCwgbWF4aWR4LAorCQkJCQkJCQkJCQkJCQltaW5pbmNsdWRlLCBt YXhpbmNsdWRlLAorCQkJCQkJCQkJCQkJCQljYWxsY2FjaGUpOworCQkJCQkJ CWJyZWFrOworCQkJCQl9CisKKwkJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVz W2ldLCByZXMsIGlzX29yKTsKKworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNl IGlmIChJc0EoY2xhdXNlLCBOdWxsVGVzdCkpCisJCXsKKwkJCU51bGxUZXN0 ICogZXhwciA9IChOdWxsVGVzdCopY2xhdXNlOworCQkJVmFyICogdmFyID0g KFZhciopKGV4cHItPmFyZyk7CisKKwkJCS8qIEZJWE1FIHByb3BlciBtYXRj aGluZyBhdHRyaWJ1dGUgdG8gZGltZW5zaW9uICovCisJCQlpbnQgaWR4ID0g bXZfZ2V0X2luZGV4KHZhci0+dmFyYXR0bm8sIHN0YWtleXMpOworCisJCQkv KgorCQkJICogV2FsayB0aHJvdWdoIHRoZSBidWNrZXRzIGFuZCBldmFsdWF0 ZSB0aGUgY3VycmVudCBjbGF1c2UuIFdlIGNhbgorCQkJICogc2tpcCBpdGVt cyB0aGF0IHdlcmUgYWxyZWFkeSBydWxlZCBvdXQsIGFuZCB0ZXJtaW5hdGUg aWYgdGhlcmUgYXJlCisJCQkgKiBubyByZW1haW5pbmcgYnVja2V0cyB0aGF0 IG1pZ2h0IHBvc3NpYmx5IG1hdGNoLgorCQkJICovCisJCQlmb3IgKGkgPSAw OyBpIDwgbXZoaXN0LT5uYnVja2V0czsgaSsrKQorCQkJeworCQkJCU1WU2Vy aWFsaXplZEJ1Y2tldCBidWNrZXQgPSBtdmhpc3QtPmJ1Y2tldHNbaV07CisK KwkJCQkvKgorCQkJCSAqIFNraXAgYnVja2V0cyB0aGF0IHdlcmUgYWxyZWFk eSBlbGltaW5hdGVkIC0gdGhpcyBpcyBpbXBvdGFudAorCQkJCSAqIGNvbnNp ZGVyaW5nIGhvdyB3ZSB1cGRhdGUgdGhlIGluZm8gKHdlIG9ubHkgbG93ZXIg dGhlIG1hdGNoKQorCQkJCSAqLworCQkJCWlmICgoISBpc19vcikgJiYgKG1h dGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9OT05FKSkKKwkJCQkJY29udGlu dWU7CisJCQkJZWxzZSBpZiAoaXNfb3IgJiYgKG1hdGNoZXNbaV0gPT0gTVZT VEFUU19NQVRDSF9GVUxMKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBp ZiB0aGUgY2xhdXNlIG1pc21hdGNoZXMgdGhlIGJ1Y2tldCwgc2V0IGl0IGFz IE1BVENIX05PTkUgKi8KKwkJCQlpZiAoKGV4cHItPm51bGx0ZXN0dHlwZSA9 PSBJU19OVUxMKQorCQkJCQkmJiAoISBidWNrZXQtPm51bGxzb25seVtpZHhd KSkKKwkJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBNVlNUQVRTX01B VENIX05PTkUsIGlzX29yKTsKKworCQkJCWVsc2UgaWYgKChleHByLT5udWxs dGVzdHR5cGUgPT0gSVNfTk9UX05VTEwpICYmCisJCQkJCQkgKGJ1Y2tldC0+ bnVsbHNvbmx5W2lkeF0pKQorCQkJCQlVUERBVEVfUkVTVUxUKG1hdGNoZXNb aV0sIE1WU1RBVFNfTUFUQ0hfTk9ORSwgaXNfb3IpOworCQkJfQorCQl9CisJ CWVsc2UgaWYgKG9yX2NsYXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xh dXNlKSkKKwkJeworCQkJLyogQU5EL09SIGNsYXVzZSwgd2l0aCBhbGwgY2xh dXNlcyBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIE1WIHN0YXQgKi8K KworCQkJaW50CQkJaTsKKwkJCUJvb2xFeHByICAgKm9yY2xhdXNlICA9ICgo Qm9vbEV4cHIqKWNsYXVzZSk7CisJCQlMaXN0CSAgICpvcmNsYXVzZXMgPSBv cmNsYXVzZS0+YXJnczsKKworCQkJLyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFw IGZvciBlYWNoIGJ1Y2tldCAqLworCQkJaW50CW9yX25tYXRjaGVzID0gMDsK KwkJCWNoYXIgKiBvcl9tYXRjaGVzID0gTlVMTDsKKworCQkJQXNzZXJ0KG9y Y2xhdXNlcyAhPSBOSUwpOworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKG9yY2xh dXNlcykgPj0gMik7CisKKwkJCS8qIG51bWJlciBvZiBtYXRjaGluZyBidWNr ZXRzICovCisJCQlvcl9ubWF0Y2hlcyA9IG12aGlzdC0+bmJ1Y2tldHM7CisK KwkJCS8qIGJ5IGRlZmF1bHQgbm9uZSBvZiB0aGUgYnVja2V0cyBtYXRjaGVz IHRoZSBjbGF1c2VzICovCisJCQlvcl9tYXRjaGVzID0gcGFsbG9jMChzaXpl b2YoY2hhcikgKiBvcl9ubWF0Y2hlcyk7CisKKwkJCWlmIChvcl9jbGF1c2Uo Y2xhdXNlKSkKKwkJCXsKKwkJCQkvKiBPUiBjbGF1c2VzIGFzc3VtZSBub3Ro aW5nIG1hdGNoZXMsIGluaXRpYWxseSAqLworCQkJCW1lbXNldChvcl9tYXRj aGVzLCBNVlNUQVRTX01BVENIX05PTkUsIHNpemVvZihjaGFyKSpvcl9ubWF0 Y2hlcyk7CisJCQkJb3Jfbm1hdGNoZXMgPSAwOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCS8qIEFORCBjbGF1c2VzIGFzc3VtZSBub3RoaW5nIG1hdGNo ZXMsIGluaXRpYWxseSAqLworCQkJCW1lbXNldChvcl9tYXRjaGVzLCBNVlNU QVRTX01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSpvcl9ubWF0Y2hlcyk7CisJ CQl9CisKKwkJCS8qIGJ1aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBP Ui1jbGF1c2VzICovCisJCQlvcl9ubWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9i aXRtYXBfaGlzdG9ncmFtKHJvb3QsIG9yY2xhdXNlcywKKwkJCQkJCQkJCQlz dGFrZXlzLCBtdmhpc3QsCisJCQkJCQkJCQkJb3Jfbm1hdGNoZXMsIG9yX21h dGNoZXMsIG9yX2NsYXVzZShjbGF1c2UpKTsKKworCQkJLyogbWVyZ2UgdGhl IGJpdG1hcCBpbnRvIHRoZSBleGlzdGluZyBvbmUqLworCQkJZm9yIChpID0g MDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwkJCXsKKwkJCQkvKgor CQkJCSAqIFRvIEFORC1tZXJnZSB0aGUgYml0bWFwcywgYSBNSU4oKSBzZW1h bnRpY3MgaXMgdXNlZC4KKwkJCQkgKiBGb3IgT1ItbWVyZ2UsIHVzZSBNQVgo KS4KKwkJCQkgKgorCQkJCSAqIEZJWE1FIHRoaXMgZG9lcyBub3QgZGVjcmVh c2UgdGhlIG51bWJlciBvZiBtYXRjaGVzCisJCQkJICovCisJCQkJVVBEQVRF X1JFU1VMVChtYXRjaGVzW2ldLCBvcl9tYXRjaGVzW2ldLCBpc19vcik7CisJ CQl9CisKKwkJCXBmcmVlKG9yX21hdGNoZXMpOworCisJCX0KKwkJZWxzZQor CQkJZWxvZyhFUlJPUiwgInVua25vd24gY2xhdXNlIHR5cGU6ICVkIiwgY2xh dXNlLT50eXBlKTsKKwl9CisKKwkvKiBmcmVlIHRoZSBjYWxsIGNhY2hlICov CisJcGZyZWUoY2FsbGNhY2hlKTsKKworCXJldHVybiBubWF0Y2hlczsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpp bmRleCA4Mzk0MTExLi4yNTE5MjQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC00MTIsNyArNDEyLDcgQEAg Z2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxh dGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCW12c3RhdCA9IChG b3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOwogCiAJCQkv KiB1bmF2YWlsYWJsZSBzdGF0cyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB0 aGUgcGxhbm5lciAqLwotCQkJaWYgKG12c3RhdC0+ZGVwc19idWlsdCB8fCBt dnN0YXQtPm1jdl9idWlsdCkKKwkJCWlmIChtdnN0YXQtPmRlcHNfYnVpbHQg fHwgbXZzdGF0LT5tY3ZfYnVpbHQgfHwgbXZzdGF0LT5oaXN0X2J1aWx0KQog CQkJewogCQkJCWluZm8gPSBtYWtlTm9kZShNVlN0YXRpc3RpY0luZm8pOwog CkBAIC00MjIsMTAgKzQyMiwxMiBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFu bmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5o cGFyZW50LAogCQkJCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCQkJCWlu Zm8tPmRlcHNfZW5hYmxlZCA9IG12c3RhdC0+ZGVwc19lbmFibGVkOwogCQkJ CWluZm8tPm1jdl9lbmFibGVkICA9IG12c3RhdC0+bWN2X2VuYWJsZWQ7CisJ CQkJaW5mby0+aGlzdF9lbmFibGVkID0gbXZzdGF0LT5oaXN0X2VuYWJsZWQ7 CiAKIAkJCQkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCQkJ CWluZm8tPmRlcHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNfYnVpbHQ7CiAJCQkJ aW5mby0+bWN2X2J1aWx0ICA9IG12c3RhdC0+bWN2X2J1aWx0OworCQkJCWlu Zm8tPmhpc3RfYnVpbHQgPSBtdnN0YXQtPmhpc3RfYnVpbHQ7CiAKIAkJCQkv KiBzdGFrZXlzICovCiAJCQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1W U1RBVE9JRCwgaHR1cCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L01ha2VmaWxlCmluZGV4IGY5YmYxMGMuLjlkYmIzYjYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZQpAQCAtMTIsNiArMTIs NiBAQCBzdWJkaXIgPSBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzCiB0b3Bf YnVpbGRkaXIgPSAuLi8uLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1PQkpTID0gY29tbW9uLm8gZGVw ZW5kZW5jaWVzLm8gbWN2Lm8KK09CSlMgPSBjb21tb24ubyBkZXBlbmRlbmNp ZXMubyBoaXN0b2dyYW0ubyBtY3YubwogCiBpbmNsdWRlICQodG9wX3NyY2Rp cikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0gYi9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0KbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2NDBlNQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLmhp c3RvZ3JhbQpAQCAtMCwwICsxLDI5OSBAQAorTXVsdGl2YXJpYXRlIGhpc3Rv Z3JhbXMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0hpc3RvZ3JhbXMg b24gaW5kaXZpZHVhbCBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgYnVja2V0cyBy ZXByZXNlbnRlZCBieSByYW5nZXMsCitjb3ZlcmluZyB0aGUgZG9tYWluIG9m IHRoZSBhdHRyaWJ1dGUuIFRoYXQgaXMsIGVhY2ggYnVja2V0IGlzIGEgW21p bixtYXhdCitpbnRlcnZhbCwgYW5kIGNvbnRhaW5zIGFsbCB2YWx1ZXMgaW4g dGhpcyByYW5nZS4gVGhlIGhpc3RvZ3JhbSBpcyBidWlsdCBpbiBzdWNoCith IHdheSB0aGF0IGFsbCBidWNrZXRzIGhhdmUgYWJvdXQgdGhlIHNhbWUgZnJl cXVlbmN5LgorCitNdWx0aXZhcmlhdGUgaGlzdG9ncmFtcyBhcmUgYW4gZXh0 ZW5zaW9uIGludG8gbi1kaW1lbnNpb25hbCBzcGFjZSAtIHRoZSBidWNrZXRz CithcmUgbi1kaW1lbnNpb25hbCBpbnRlcnZhbHMgKGkuZS4gbi1kaW1lbnNp b25hbCByZWN0YWdsZXMpLCBjb3ZlcmluZyB0aGUgZG9tYWluCitvZiB0aGUg Y29tYmluYXRpb24gb2YgYXR0cmlidXRlcy4gVGhhdCBpcywgZWFjaCBidWNr ZXQgaGFzIGEgdmVjdG9yIG9mIGxvd2VyCithbmQgdXBwZXIgYm91bmRhcmll cywgZGVub3RlZCBtaW5baV0gYW5kIG1heFtpXSAod2hlcmUgaSA9IDEuLm4p LgorCitJbiBhZGRpdGlvbiB0byB0aGUgYm91bmRhcmllcywgZWFjaCBidWNr ZXQgdHJhY2tzIGFkZGl0aW9uYWwgaW5mbzoKKworICAgICogZnJlcXVlbmN5 IChmcmFjdGlvbiBvZiB0dXBsZXMgaW4gdGhlIGJ1Y2tldCkKKyAgICAqIHdo ZXRoZXIgdGhlIGJvdW5kYXJpZXMgYXJlIGluY2x1c2l2ZSBvciBleGNsdXNp dmUKKyAgICAqIHdoZXRoZXIgdGhlIGRpbWVuc2lvbiBjb250YWlucyBvbmx5 IE5VTEwgdmFsdWVzCisgICAgKiBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVz IGluIGVhY2ggZGltZW5zaW9uIChmb3IgYnVpbGRpbmcgb25seSkKKworSXQn cyBwb3NzaWJsZSB0aGF0IGluIHRoZSBmdXR1cmUgd2UnbGwgbXVsdGlwbGUg aGlzdG9ncmFtIHR5cGVzLCB3aXRoIGRpZmZlcmVudAorZmVhdHVyZXMuIFdl IGRvIGhvd2V2ZXIgZXhwZWN0IGFsbCB0aGUgdHlwZXMgdG8gc2hhcmUgdGhl IHNhbWUgcmVwcmVzZW50YXRpb24KKyhidWNrZXRzIGFzIHJhbmdlcykgYW5k IG9ubHkgZGlmZmVyIGluIGhvdyB3ZSBidWlsZCB0aGVtLgorCitUaGUgY3Vy cmVudCBpbXBsZW1lbnRhdGlvbiBidWlsZHMgbm9uLW92ZXJsYXBwaW5nIGJ1 Y2tldHMsIHRoYXQgbWF5IG5vdCBiZSB0cnVlCitmb3Igc29tZSBoaXN0b2dy YW0gdHlwZXMgYW5kIHRoZSBjb2RlIHNob3VsZCBub3QgcmVseSBvbiB0aGlz IGFzc3VtcHRpb24uIFRoZXJlCithcmUgaW50ZXJlc3RpbmcgdHlwZXMgb2Yg aGlzdG9ncmFtcyAob3IgYWxnb3JpdGhtcykgd2l0aCBvdmVybGFwcGluZyBi dWNrZXRzLgorCitXaGVuIHVzZWQgb24gbG93LWNhcmRpbmFsaXR5IGRhdGEs IGhpc3RvZ3JhbXMgdXN1YWxseSBwZXJmb3JtIGNvbnNpZGVyYWJseSB3b3Jz ZQordGhhbiBNQ1YgbGlzdHMgKHdoaWNoIGFyZSBhIGdvb2QgZml0IGZvciB0 aGlzIGtpbmQgb2YgZGF0YSkuIFRoaXMgaXMgZXNwZWNpYWxseQordHJ1ZSBv biBsYWJlbC1saWtlIHZhbHVlcywgd2hlcmUgb3JkZXJpbmcgb2YgdGhlIHZh bHVlcyBpcyBtb3N0bHkgdW5yZWxhdGVkIHRvCittZWFuaW5nIG9mIHRoZSBk YXRhLCBhcyBwcm9wZXIgb3JkZXJpbmcgaXMgY3J1Y2lhbCBmb3IgaGlzdG9n cmFtcy4KKworT24gaGlnaC1jYXJkaW5hbGl0eSBkYXRhIHRoZSBoaXN0b2dy YW1zIGFyZSB1c3VhbGx5IGEgYmV0dGVyIGNob2ljZSwgYmVjYXVzZSBNQ1YK K2xpc3RzIGNhbid0IHJlcHJlc2VudCB0aGUgZGlzdHJpYnV0aW9uIGFjY3Vy YXRlbHkgZW5vdWdoLgorCisKK1NlbGVjdGl2aXR5IGVzdGltYXRpb24KKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVzdGltYXRpb24gaXMgaW1w bGVtZW50ZWQgaW4gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dy YW0oKSwgYW5kCit3b3JrcyB2ZXJ5IHNpbWlsYXJseSB0byBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X21jdmxpc3QuCisKK1RoZSBtYWluIGRpZmZlcmVu Y2UgaXMgdGhhdCB3aGlsZSBNQ1YgbGlzdHMgc3VwcG9ydCBleGFjdCBtYXRj aGVzLCBoaXN0b2dyYW1zCitvZnRlbiByZXN1bHQgaW4gYXBwcm94aW1hdGUg bWF0Y2hlcyAtIGUuZy4gd2l0aCBlcXVhbGl0eSB3ZSBjYW4gb25seSBzYXkg aWYKK3RoZSBjb25zdGFudCB3b3VsZCBiZSBwYXJ0IG9mIHRoZSBidWNrZXQs IGJ1dCBub3Qgd2hldGhlciBpdCByZWFsbHkgaXMgdGhlcmUKK29yIHdoYXQg ZnJhY3Rpb24gb2YgdGhlIGJ1Y2tldCBpdCBjb3JyZXNwb25kcyB0by4gSW4g dGhpcyBjYXNlIHdlIHJlbHkgb24KK3NvbWUgZGVmYXVsdHMganVzdCBsaWtl IGluIHRoZSBwZXItY29sdW1uIGhpc3RvZ3JhbXMuCisKK1RoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uIHVzZXMgaGlzdG9ncmFtcyB0byBlc3RpbWF0ZXMg dGhvc2UgdHlwZXMgb2YgY2xhdXNlcworKHRoaW5rIG9mIFdIRVJFIGNvbmRp dGlvbnMpOgorCisgICAgKGEpIGVxdWFsaXR5IGNsYXVzZXMgICAgV0hFUkUg KGEgPSAxKSBBTkQgKGIgPSAyKQorICAgIChiKSBpbmVxdWFsaXR5IGNsYXVz ZXMgIFdIRVJFIChhIDwgMSkgQU5EIChiID49IDIpCisgICAgKGMpIE5VTEwg Y2xhdXNlcyAgICAgICAgV0hFUkUgKGEgSVMgTlVMTCkgQU5EIChiIElTIE5P VCBOVUxMKQorICAgIChkKSBPUi1jbGF1c2VzICAgICAgICAgIFdIRVJFIChh ID0gMSkgIE9SIChiID0gMikKKworU2ltaWxhcmx5IHRvIE1DViBsaXN0cywg aXQncyBwb3NzaWJsZSB0byBhZGQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0 eXBlcyBvZgorY2xhdXNlcywgZm9yIGV4YW1wbGU6CisKKyAgICAoZSkgbXVs dGktdmFyIGNsYXVzZXMgICBXSEVSRSAoYSA+IGIpCisKK2FuZCBzbyBvbi4g VGhlc2UgYXJlIHRhc2tzIGZvciB0aGUgZnV0dXJlLCBub3QgeWV0IGltcGxl bWVudGVkLgorCisKK1doZW4gZXZhbHVhdGluZyBhIGNsYXVzZSBvbiBhIGJ1 Y2tldCwgd2UgbWF5IGdldCBvbmUgb2YgdGhyZWUgcmVzdWx0czoKKworICAg IChhKSBGVUxMX01BVENIIC0gVGhlIGJ1Y2tldCBkZWZpbml0ZWx5IG1hdGNo ZXMgdGhlIGNsYXVzZS4KKworICAgIChiKSBQQVJUSUFMX01BVENIIC0gVGhl IGJ1Y2tldCBtYXRjaGVzIHRoZSBjbGF1c2UsIGJ1dCBub3QgbmVjZXNzYXJp bHkgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHVwbGVzIGl0 IHJlcHJlc2VudHMuCisKKyAgICAoYykgTk9fTUFUQ0ggLSBUaGUgYnVja2V0 IGRlZmluaXRlbHkgZG9lcyBub3QgbWF0Y2ggdGhlIGNsYXVzZS4KKworVGhp cyBtYXkgYmUgaWxsdXN0cmF0ZWQgdXNpbmcgYSByYW5nZSBbMSwgNV0sIHdo aWNoIGlzIGVzc2VudGlhbGx5IGEgMS1EIGJ1Y2tldC4KK1dpdGggY2xhdXNl CisKKyAgICBXSEVSRSAoYSA8IDEwKSA9PiBGVUxMX01BVENIIChhbGwgcmFu Z2UgdmFsdWVzIGFyZSBiZWxvdworICAgICAgICAgICAgICAgICAgICAgIDEw LCBzbyB0aGUgd2hvbGUgYnVja2V0IG1hdGNoZXMpCisKKyAgICBXSEVSRSAo YSA8IDMpICA9PiBQQVJUSUFMX01BVENIICh0aGVyZSBtYXkgYmUgdmFsdWVz IG1hdGNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsYXVzZSwg YnV0IHdlIGRvbid0IGtub3cgaG93IG1hbnkpCisKKyAgICBXSEVSRSAoYSA8 IDApICA9PiBOT19NQVRDSCAodGhlIHdob2xlIHJhbmdlIGlzIGFib3ZlIDEs IHNvCisgICAgICAgICAgICAgICAgICAgICAgbm8gdmFsdWVzIGZyb20gdGhl IGJ1Y2tldCBjYW4gbWF0Y2gpCisKK1NvbWUgY2xhdXNlcyBtYXkgcHJvZHVj ZSBvbmx5IHNvbWUgb2YgdGhvc2UgcmVzdWx0cyAtIGZvciBleGFtcGxlIGVx dWFsaXR5CitjbGF1c2VzIG1heSBuZXZlciBwcm9kdWNlIEZVTExfTUFUQ0gg YXMgd2UgYWx3YXlzIGhpdCBvbmx5IHBhcnQgb2YgdGhlIGJ1Y2tldAorKHdl IGNhbid0IG1hdGNoIGJvdGggYm91bmRhcmllcyBhdCB0aGUgc2FtZSB0aW1l KS4gVGhpcyByZXN1bHRzIGluIGxlc3MgYWNjdXJhdGUKK2VzdGltYXRlcyBj b21wYXJlZCB0byBNQ1YgbGlzdHMsIHdoZXJlIHdlIGNhbiBoaXQgYSBNQ1Yg aXRlbXMgZXhhY3RseSAodGhlcmUncworbm8gUEFSVElBTCBtYXRjaCBpbiBN Q1YpLgorCitUaGVyZSBhcmUgYWxzbyBjbGF1c2VzIHRoYXQgbWF5IG5vdCBw cm9kdWNlIGFueSBQQVJUSUFMX01BVENIIHJlc3VsdHMuIEEgbmljZQorZXhh bXBsZSBvZiB0aGF0IGlzICdJUyBbTk9UXSBOVUxMJyBjbGF1c2UsIHdoaWNo IGVpdGhlciBtYXRjaGVzIHRoZSBidWNrZXQKK2NvbXBsZXRlbHkgKEZVTExf TUFUQ0gpIG9yIG5vdCBhdCBhbGwgKE5PX01BVENIKSwgdGhhbmtzIHRvIGhv dyB0aGUgTlVMTC1idWNrZXRzCithcmUgY29uc3RydWN0ZWQuCisKK0NvbXB1 dGluZyB0aGUgdG90YWwgc2VsZWN0aXZpdHkgZXN0aW1hdGUgaXMgdHJpdmlh bCAtIHNpbXBseSBzdW0gc2VsZWN0aXZpdGllcworZnJvbSBhbGwgdGhlIEZV TExfTUFUQ0ggYW5kIFBBUlRJQUxfTUFUQ0ggYnVja2V0cyAoYnV0IGZvciBi dWNrZXRzIG1hcmtlZCB3aXRoCitQQVJUSUFMX01BVENILCBtdWx0aXBseSB0 aGUgZnJlcXVlbmN5IGJ5IDAuNSB0byBtaW5pbWl6ZSB0aGUgYXZlcmFnZSBl cnJvcikuCisKKworQnVpbGRpbmcgYSBoaXN0b2dyYW0KKy0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCitUaGUgYWxnb3JpdGhtIG9mIGJ1aWxkaW5nIGEgaGlz dG9ncmFtIGluIGdlbmVyYWwgaXMgcXVpdGUgc2ltcGxlOgorCisgICAgKGEp IGNyZWF0ZSBhbiBpbml0aWFsIGJ1Y2tldCAoY29udGFpbmluZyBhbGwgc2Ft cGxlIHJvd3MpCisKKyAgICAoYikgY3JlYXRlIE5VTEwgYnVja2V0cyAoYnkg c3BsaXR0aW5nIHRoZSBpbml0aWFsIGJ1Y2tldCkKKworICAgIChjKSByZXBl YXQKKyAgICAKKyAgICAgICAgKDEpIGNob29zZSBidWNrZXQgdG8gc3BsaXQg bmV4dAorCisgICAgICAgICgyKSB0ZXJtaW5hdGUgaWYgbm8gYnVja2V0IHRo YXQgbWlnaHQgYmUgc3BsaXQgZm91bmQsIG9yIGlmIHdlJ3ZlCisgICAgICAg ICAgICByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBidWNrZXRzICgx NjM4NCkKKworICAgICAgICAoMykgY2hvb3NlIGRpbWVuc2lvbiB0byBwYXJ0 aXRpb24gdGhlIGJ1Y2tldCBieQorCisgICAgICAgICg0KSBwYXJ0aXRpb24g dGhlIGJ1Y2tldCBieSB0aGUgc2VsZWN0ZWQgZGltZW5zaW9uCisKK1RoZSBt YWluIGNvbXBsZXhpdHkgaXMgaGlkZGVuIGluIHN0ZXBzIChjLjEpIGFuZCAo Yy4zKSwgaS5lLiBob3cgd2UgY2hvb3NlIHRoZQorYnVja2V0IGFuZCBkaW1l bnNpb24gZm9yIHRoZSBzcGxpdCwgYXMgZGlzY3Vzc2VkIGluIHRoZSBuZXh0 IHNlY3Rpb24uCisKKworUGFydGl0aW9uaW5nIGNyaXRlcmlhCistLS0tLS0t LS0tLS0tLS0tLS0tLS0KKworU2ltaWxhcmx5IHRvIG9uZS1kaW1lbnNpb25h bCBoaXN0b2dyYW1zLCB3ZSB3YW50IHRvIHByb2R1Y2UgYnVja2V0cyB3aXRo IHJvdWdobHkKK3RoZSBzYW1lIGZyZXF1ZW5jeS4KKworV2UgYWxzbyBuZWVk IHRvIHByb2R1Y2UgInJlZ3VsYXIiIGJ1Y2tldHMsIGJlY2F1c2UgYnVja2V0 cyB3aXRoIG9uZSBkaW1lbnNpb24KK211Y2ggbG9uZ2VyIHRoYW4gdGhlIG90 aGVycyBhcmUgdmVyeSBsaWtlbHkgdG8gbWF0Y2ggYSBsb3Qgb2YgY29uZGl0 aW9ucyAod2hpY2gKK2luY3JlYXNlcyBlcnJvciwgZXZlbiBpZiB0aGUgYnVj a2V0IGZyZXF1ZW5jeSBpcyB2ZXJ5IGxvdykuCisKK1RoaXMgaXMgZXNwZWNp YWxseSBpbXBvcnRhbnQgd2hlbiBoYW5kbGluZyBPUi1jbGF1c2VzLCBiZWNh dXNlIGluIHRoYXQgY2FzZSBlYWNoCitjbGF1c2UgbWF5IGFkZCBidWNrZXRz IGluZGVwZW5kZW50bHkuIFdpdGggQU5ELWNsYXVzZXMgYWxsIHRoZSBjbGF1 c2VzIGhhdmUgdG8KK21hdGNoIGVhY2ggYnVja2V0LCB3aGljaCBtYWtlcyB0 aGlzIGlzc3VlIHNvbWV3aGF0IGxlc3MgY29uY2Vucm5pbmcuCisKK1RvIGFj aGlldmUgdGhpcywgd2UgY2hvb3NlIHRoZSBsYXJnZXN0IGJ1Y2tldCAoY29u dGFpbmluZyB0aGUgbW9zdCBzYW1wbGUgcm93cyksCitidXQgd2Ugb25seSBj aG9vc2UgYnVja2V0cyB0aGF0IGNhbiBhY3R1YWxseSBiZSBzcGxpdCAoaGF2 ZSBhdCBsZWFzdCAzIGRpZmZlcmVudAorY29tYmluYXRpb25zIG9mIHZhbHVl cykuCisKK1RoZW4gd2UgY2hvb3NlIHRoZSAibG9uZ2VzdCIgZGltZW5zaW9u IG9mIHRoZSBidWNrZXQsIHdoaWNoIGlzIGNvbXB1dGVkIGJ5IHVzaW5nCit0 aGUgZGlzdGluY3QgdmFsdWVzIGluIHRoZSBzYW1wbGUgYXMgYSBtZWFzdXJl LgorCitGb3IgZGV0YWlscyBzZWUgZnVuY3Rpb25zIHNlbGVjdF9idWNrZXRf dG9fcGFydGl0aW9uKCkgYW5kIHBhcnRpdGlvbl9idWNrZXQoKSwKK3doaWNo IGFsc28gaW5jbHVkZXMgZnVydGhlciBkaXNjdXNzaW9uLgorCisKK1RoZSBj dXJyZW50IGxpbWl0IG9uIG51bWJlciBvZiBidWNrZXRzICgxNjM4NCkgaXMg bW9zdGx5IGFyYml0cmFyeSwgYnV0IGNob3Nlbgorc28gdGhhdCBpdCBndWFy YW50ZWVzIHdlIGRvbid0IGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0 IHZhbHVlcyBpbmRleGFibGUgYnkKK3VpbnQxNiBpbiBhbnkgb2YgdGhlIGRp bWVuc2lvbnMuIEluIHByYWN0aWNlIHdlIGNvdWxkIGhhbmRsZSBtb3JlIGJ1 Y2tldHMgYXMgd2UKK2luZGV4IGVhY2ggZGltZW5zaW9uIHNlcGFyYXRlbHkg YW5kIHRoZSBzcGxpdHMgc2hvdWxkIHVzZSB0aGUgZGltZW5zaW9ucyBldmVu bHkuCisKK0Fsc28sIGhpc3RvZ3JhbXMgdGhpcyBsYXJnZSAod2l0aCAxNmsg dmFsdWVzIGluIG11bHRpcGxlIGRpbWVuc2lvbnMpIHdvdWxkIGJlCitxdWl0 ZSBleHBlbnNpdmUgdG8gYnVpbGQgYW5kIHByb2Nlc3MsIHNvIHRoZSAxNmsg bGltaXQgaXMgcmF0aGVyIHJlYXNvbmFibGUuCisKK1RoZSBhY3R1YWwgbnVt YmVyIG9mIGJ1Y2tldHMgaXMgYWxzbyByZWxhdGVkIHRvIHN0YXRpc3RpY3Mg dGFyZ2V0LCBiZWNhdXNlIHdlCityZXF1aXJlIE1JTl9CVUNLRVRfUk9XUyAo MTApIHR1cGxlcyBwZXIgYnVja2V0IGJlZm9yZSBhIHNwbGl0LCBzbyB3ZSBj YW4ndCBoYXZlCittb3JlIHRoYW4gKDIgKiAzMDAgKiB0YXJnZXQgLyAxMCkg YnVja2V0cy4gRm9yIHRoZSBkZWZhdWx0IHRhcmdldCAoMTAwKSB0aGlzCitl dmFsdWF0ZXMgdG8gfjZrLgorCisKK05VTEwgaGFuZGxpbmcgKGNyZWF0ZV9u dWxsX2J1Y2tldHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCitXaGVuIGJ1aWxkaW5nIGhpc3RvZ3JhbXMgb24gYSBzaW5nbGUg YXR0cmlidXRlLCB3ZSBmaXJzdCBmaWx0ZXIgb3V0IE5VTEwgdmFsdWVzLgor SW4gdGhlIG11bHRpdmFyaWF0ZSBjYXNlLCB3ZSBjYW4ndCByZWFsbHkgZG8g dGhhdCBiZWNhdXNlIHRoZSByb3dzIG1heSBjb250YWluCithIG1peCBvZiBO VUxMIGFuZCBub24tTlVMTCB2YWx1ZXMgaW4gZGlmZmVyZW50IGNvbHVtbnMg KHNvIHdlIGNhbid0IHNpbXBseQorZmlsdGVyIGFsbCBvZiB0aGVtIG91dCku CisKK0ZvciB0aGlzIHJlYXNvbiwgdGhlIGhpc3RvZ3JhbXMgYXJlIGJ1aWx0 IGluIGEgd2F5IHNvIHRoYXQgZm9yIGVhY2ggYnVja2V0LCBlYWNoCitkaW1l bnNpb24gb25seSBjb250YWlucyBvbmx5IE5VTEwgb3Igbm9uLU5VTEwgdmFs dWVzLiBCdWlsZGluZyB0aGUgTlVMTC1idWNrZXRzCitoYXBwZW5zIGFzIHRo ZSBmaXJzdCBzdGVwIGluIHRoZSBidWlsZCwgYnkgdGhlIGNyZWF0ZV9udWxs X2J1Y2tldHMoKSBmdW5jdGlvbi4KK1RoZSBudW1iZXIgb2YgTlVMTCBidWNr ZXRzLCBhcyBwcm9kdWNlZCBieSB0aGlzIGZ1bmN0aW9uLCBoYXMgYSBjbGVh ciB1cHBlcgorYm91bmRhcnkgKDJeTikgd2hlcmUgTiBpcyB0aGUgbnVtYmVy IG9mIGRpbWVuc2lvbnMgKGF0dHJpYnV0ZXMgdGhlIGhpc3RvZ3JhbSBpcwor YnVpbHQgb24pLiBPciByYXRoZXIgMl5LIHdoZXJlIEsgaXMgdGhlIG51bWJl ciBvZiBhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCBtYXJrZWQKK2FzIG5vdC1O VUxMLiAKKworVGhlIGJ1Y2tldHMgd2l0aCBOVUxMIGRpbWVuc2lvbnMgYXJl IHRoZW4gc3ViamVjdCB0byB0aGUgc2FtZSBidWlsZCBhbGdvcml0aG0KKyhp LmUuIG1heSBiZSBzcGxpdCBpbnRvIHNtYWxsZXIgYnVja2V0cykganVzdCBs aWtlIGFueSBvdGhlciBidWNrZXQsIGJ1dCBtYXkKK29ubHkgYmUgc3BsaXQg Ynkgbm9uLU5VTEwgZGltZW5zaW9uLgorCisKK1NlcmlhbGl6YXRpb24KKy0t LS0tLS0tLS0tLS0KKworVG8gc3RvcmUgdGhlIGhpc3RvZ3JhbSBpbiBwZ19t dl9zdGF0aXN0aWMgdGFibGUsIGl0IGlzIHNlcmlhbGl6ZWQgaW50byBhIG1v cmUKK2VmZmljaWVudCBmb3JtLiBXZSBhbHNvIHVzZSB0aGUgcmVwcmVzZW50 YXRpb24gZm9yIGVzdGltYXRpb24sIGkuZS4gd2UgZG9uJ3QKK2Z1bGx5IGRl c2VyaWFsaXplIHRoZSBoaXN0b2dyYW0uCisKK0ZvciBleGFtcGxlIHRoZSBi b3VuZGFyeSB2YWx1ZXMgYXJlIGRlZHVwbGljYXRlZCB0byBtaW5pbWl6ZSB0 aGUgcmVxdWlyZWQgc3BhY2UuCitIb3cgbXVjaCByZWR1bmRhbmN5IGlzIHRo ZXJlLCBhY3R1YWxseT8gTGV0J3MgYXNzdW1lIHRoZXJlIGFyZSBubyBOVUxM IHZhbHVlcywKK3NvIHdlIHN0YXJ0IHdpdGggYSBzaW5nbGUgYnVja2V0IC0g aW4gdGhhdCBjYXNlIHdlIGhhdmUgMipOIGJvdW5kYXJpZXMuIEVhY2gKK3Rp bWUgd2Ugc3BsaXQgYSBidWNrZXQgd2UgaW50cm9kdWNlIG9uZSBuZXcgdmFs dWUgKGluIHRoZSAibWlkZGxlIiBvZiBvbmUgb2YKK3RoZSBkaW1lbnNpb25z KSwgYW5kIGtlZXAgYm91bmRyaWVzIGZvciBhbGwgdGhlIG90aGVyIGRpbWVu c2lvbnMuIFNvIGFmdGVyIEsKK3NwbGl0cywgd2UgaGF2ZSB1cCB0bworCisg ICAgMipOICsgSworCit1bmlxdWUgYm91bmRhcnkgdmFsdWVzICh3ZSBtYXkg aGF2ZSBmZXdlIHZhbHVlcywgaWYgdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBm b3IKK3NldmVyYWwgc3BsaXRzKS4gQnV0IGFmdGVyIEsgc3BsaXRzIHdlIGRv IGhhdmUgKEsrMSkgYnVja2V0cywgc28KKworICAgIChLKzEpICogMiAqIE4K KworYm91bmRhcnkgdmFsdWVzLiBVc2luZyBlLmcuIE49NCBhbmQgSz05OTks IHdlIGFycml2ZSB0byB0aG9zZSBudW1iZXJzOgorCisgICAgMipOICsgSyAg ICAgICA9IDEwMDcKKyAgICAoSysxKSAqIDIgKiBOID0gODAwMAorCit3aWNo IG1lYW5zIGEgbG90IG9mIHJlZHVuZGFuY3kuIEl0J3Mgc29tZXdoYXQgY291 bnRlci1pbnR1aXRpdmUgdGhhdCB0aGUgbnVtYmVyCitvZiBkaXN0aW5jdCB2 YWx1ZXMgZG9lcyBub3QgcmVhbGx5IGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9m IGRpbWVuc2lvbnMgKGV4Y2VwdAorZm9yIHRoZSBpbml0aWFsIGJ1Y2tldCwg YnV0IHRoYXQncyBuZWdsaWdpYmxlIGNvbXBhcmVkIHRvIHRoZSB0b3RhbCku CisKK0J5IGRlZHVwbGljYXRpbmcgdGhlIHZhbHVlcyBhbmQgcmVwbGFjaW5n IHRoZW0gd2l0aCAxNi1iaXQgaW5kZXhlcyAodWludDE2KSwgd2UKK3JlZHVj ZSB0aGUgcmVxdWlyZWQgc3BhY2UgdG8KKworICAgIDEwMDcgKiA4ICsgODAw MCAqIDIgfj0gMjRrQgorCit3aGljaCBpcyBzaWduaWZpY2FudGx5IGxlc3Mg dGhhbiA2NGtCIHJlcXVpcmVkIGZvciB0aGUgJ3JhdycgaGlzdG9ncmFtIChh c3N1bWluZwordGhlIHZhbHVlcyBhcmUgOEIpLgorCitXaGlsZSB0aGUgYnl0 ZWEgY29tcHJlc3Npb24gKHBnbHopIG1pZ2h0IGFjaGlldmUgdGhlIHNhbWUg cmVkdWN0aW9uIG9mIHNwYWNlLAordGhlIGRlZHVwbGljYXRlZCByZXByZXNl bnRhdGlvbiBpcyB1c2VkIHRvIG9wdGltaXplIHRoZSBlc3RpbWF0aW9uIGJ5 IGNhY2hpbmcKK3Jlc3VsdHMgb2YgZnVuY3Rpb24gY2FsbHMgZm9yIGFscmVh ZHkgdmlzaXRlZCB2YWx1ZXMuIFRoaXMgc2lnbmlmaWNhbnRseQorcmVkdWNl cyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIChvZnRlbiBxdWl0ZSBleHBlbnNp dmUpIG9wZXJhdG9ycy4KKworTm90ZTogT2YgY291cnNlLCB0aGlzIHJlYXNv bmluZyBvbmx5IGhvbGRzIGZvciBoaXN0b2dyYW1zIGJ1aWx0IGJ5IHRoZSBh bGdvcml0aG0KK3RoYXQgc2ltcGx5IHNwbGl0cyB0aGUgYnVja2V0cyBpbiBo YWxmLiBPdGhlciBoaXN0b2dyYW1zIHR5cGVzIChlLmcuIGNvbnRhaW5pbmcK K292ZXJsYXBwaW5nIGJ1Y2tldHMpIG1heSBiZWhhdmUgZGlmZmVyZW50bHkg YW5kIHJlcXVpcmUgZGlmZmVyZW50IHNlcmlhbGl6YXRpb24uCisKK1Nlcmlh bGl6ZWQgaGlzdG9ncmFtcyBhcmUgbWFya2VkIHdpdGggJ21hZ2ljJyBjb25z dGFudCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8KK2NoZWNrIHRoZSBieXRlYSB2 YWx1ZSByZWFsbHkgaXMgYSBzZXJpYWxpemVkIGhpc3RvZ3JhbS4KKworCit2 YXJsZW5hIGNvbXByZXNzaW9uCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Ro aXMgc2VyaWFsaXphdGlvbiBtYXkgaG93ZXZlciBkaXNhYmxlIGF1dG9tYXRp YyB2YXJsZW5hIGNvbXByZXNzaW9uLCB0aGUgYXJyYXkKK29mIHVuaXF1ZSB2 YWx1ZXMgaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcmlh bGl6ZWQgZm9ybS4gV2hpY2ggaXMKK2V4YWN0bHkgdGhlIGNodW5rIHVzZWQg YnkgcGdseiB0byBjaGVjayBpZiB0aGUgZGF0YSBpcyBjb21wcmVzc2libGUs IGFuZCBpdAord2lsbCBwcm9iYWJseSBkZWNpZGUgaXQncyBub3QgdmVyeSBj b21wcmVzc2libGUuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgaXNzdWUKK3dl IGhhZCB3aXRoIEpTT05CIGluaXRpYWxseS4KKworTWF5YmUgc3RvcmluZyBi dWNrZXRzIGZpcnN0IHdvdWxkIG1ha2UgaXQgd29yaywgYXMgdGhlIGJ1Y2tl dHMgbWF5IGJlIGJldHRlcgorY29tcHJlc3NpYmxlLgorCitPbiB0aGUgb3Ro ZXIgaGFuZCB0aGUgc2VyaWFsaXphdGlvbiBpcyBhY3R1YWxseSBhIGNvbnRl eHQtYXdhcmUgY29tcHJlc3Npb24sCit1c3VhbGx5IGNvbXByZXNzaW5nIHRv IH4zMCUgKG9yIGV2ZW4gbGVzcywgd2l0aCBsYXJnZSBkYXRhIHR5cGVzKS4g U28gdGhlIGxhY2sKK29mIGFkZGl0aW9uYWwgcGdseiBjb21wcmVzc2lvbiBt YXkgYmUgYWNjZXB0YWJsZS4KKworCitEZXNlcmlhbGl6YXRpb24KKy0tLS0t LS0tLS0tLS0tLQorCitUaGUgZGVzZXJpYWxpemF0aW9uIGlzIG5vdCBhIHBl cmZlY3QgaW52ZXJzZSBvZiB0aGUgc2VyaWFsaXphdGlvbiwgYXMgd2Uga2Vl cAordGhlIGRlZHVwbGljYXRlZCBhcnJheXMuIFRoaXMgcmVkdWNlcyB0aGUg YW1vdW50IG9mIG1lbW9yeSBhbmQgYWxzbyBhbGxvd3MKK29wdGltaXphdGlv bnMgZHVyaW5nIGVzdGltYXRpb24gKGUuZy4gd2UgY2FuIGNhY2hlIHJlc3Vs dHMgZm9yIHRoZSBkaXN0aW5jdAordmFsdWVzLCBzYXZpbmcgZXhwZW5zaXZl IGZ1bmN0aW9uIGNhbGxzKS4KKworCitJbnNwZWN0aW5nIHRoZSBoaXN0b2dy YW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnNwZWN0aW5nIHRo ZSByZWd1bGFyIChwZXItYXR0cmlidXRlKSBoaXN0b2dyYW1zIGlzIHRyaXZp YWwsIGFzIGl0J3MgZW5vdWdoCit0byBzZWxlY3QgdGhlIGNvbHVtbnMgZnJv bSBwZ19zdGF0cyAtIHRoZSBkYXRhIGlzIGVuY29kZWQgYXMgYW55YXJyYXks IHNvIHdlCitzaW1wbHkgZ2V0IHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9m IHRoZSBhcnJheS4KKworV2l0aCBtdWx0aXZhcmlhdGUgaGlzdG9ncmFtcyBp dCdzIG5vdCB0aGF0IHNpbXBsZSBkdWUgdG8gdGhlIHBvc3NpYmxlIG1peCBv ZgorZGF0YSB0eXBlcyBpbiB0aGUgaGlzdG9ncmFtLiBJdCBtaWdodCBiZSBw b3NzaWJsZSB0byBwcm9kdWNlIHNpbWlsYXIgYXJyYXktbGlrZQordGV4dCBy ZXByZXNlbnRhdGlvbiwgYnV0IHRoYXQnZCB1bm5lY2Vzc2FyaWx5IGNvbXBs aWNhdGUgZnVydGhlciBwcm9jZXNzaW5nCithbmQgYW5hbHlzaXMgb2YgdGhl IGhpc3RvZ3JhbS4gSW5zdGVhZCwgdGhlcmUncyBhIFNSRiBmdW5jdGlvbiB0 aGF0IGFsbG93cworYWNjZXNzIHRvIGxvd2VyL3VwcGVyIGJvdW5kYXJpZXMs IGZyZXF1ZW5jaWVzIGV0Yy4KKworICAgIFNFTEVDVCAqIEZST00gcGdfbXZf aGlzdG9ncmFtX2J1Y2tldHMoKTsKKworSXQgaGFzIHR3byBpbnB1dCBwYXJh bWV0ZXJzOgorCisgICAgb2lkICAgLSBPSUQgb2YgdGhlIGhpc3RvZ3JhbSAo cGdfbXZfc3RhdGlzdGljLnN0YW9pZCkKKyAgICBvdHlwZSAtIHR5cGUgb2Yg b3V0cHV0CisKK2FuZCBwcm9kdWNlcyBhIHRhYmxlIHdpdGggdGhlc2UgY29s dW1uczoKKworICAgIC0gYnVja2V0IElEICAgICAgICAgICAgICAgICgwLi4u bmJ1Y2tldHMtMSkKKyAgICAtIGxvd2VyIGJ1Y2tldCBib3VuZGFyaWVzICAo c3RyaW5nIGFycmF5KQorICAgIC0gdXBwZXIgYnVja2V0IGJvdW5kYXJpZXMg IChzdHJpbmcgYXJyYXkpCisgICAgLSBudWxscyBvbmx5IGRpbWVuc2lvbnMg ICAgKGJvb2xlYW4gYXJyYXkpCisgICAgLSBsb3dlciBib3VuZGFyeSBpbmNs dXNpdmUgKGJvb2xlYW4gYXJyYXkpCisgICAgLSB1cHBlciBib3VuZGFyeSBp bmNsdWRpdmUgKGJvb2xlYW4gYXJyYXkpCisgICAgLSBmcmVxdWVuY3kgICAg ICAgICAgICAgICAgKGRvdWJsZSBwcmVjaXNpb24pCisKK1RoZSAnb3R5cGUn IGFjY2VwdHMgdGhyZWUgdmFsdWVzLCBkZXRlcm1pbmluZyB3aGF0IHdpbGwg YmUgcmV0dXJuZWQgaW4gdGhlCitsb3dlci91cHBlciBib3VuZGFyeSBhcnJh eXM6CisKKyAgICAtIDAgLSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBoaXN0b2dy YW0sIGVuY29kZWQgYXMgdGV4dAorICAgIC0gMSAtIGluZGV4ZXMgaW50byB0 aGUgZGVkdXBsaWNhdGVkIGFycmF5cworICAgIC0gMiAtIGlkbmV4ZXMgaW50 byB0aGUgZGVkdXBsaWNhdGVkIGFycmF5cywgc2NhbGVkIHRvIFswLDFdCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5z dGF0cyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRz CmluZGV4IDVjNWM1OWEuLjNlNGY0ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCkBAIC0xOCw2ICsxOCw4 IEBAIEN1cnJlbnRseSB3ZSBvbmx5IGhhdmUgdHdvIGtpbmRzIG9mIG11bHRp dmFyaWF0ZSBzdGF0aXN0aWNzCiAKICAgICAoYikgTUNWIGxpc3RzIChSRUFE TUUubWN2KQogCisgICAgKGMpIG11bHRpdmFyaWF0ZSBoaXN0b2dyYW1zIChS RUFETUUuaGlzdG9ncmFtKQorCiAKIENvbXBhdGlibGUgY2xhdXNlIHR5cGVz CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvY29tbW9uLmMKaW5kZXggNGY1YTg0Mi4uZjZkMTA3NCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u YworKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCkBA IC0xMywxMSArMTMsMTEgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0j aW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKLQogc3RhdGljIFZhY0F0dHJTdGF0 cyAqKiBsb29rdXBfdmFyX2F0dHJfc3RhdHMoaW50MnZlY3RvciAqYXR0cnMs CiAJCQkJCQkJCQkJCSBpbnQgbmF0dHMsCiAJCQkJCQkJCQkJCSBWYWNBdHRy U3RhdHMgKip2YWNhdHRyc3RhdHMpOwpAQCAtNTIsNyArNTIsOCBAQCBidWls ZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFw VHVwbGUgKnJvd3MsCiAJCU1WU3RhdGlzdGljSW5mbyAqc3RhdCA9IChNVlN0 YXRpc3RpY0luZm8gKilsZmlyc3QobGMpOwogCQlNVkRlcGVuZGVuY2llcwlk ZXBzICA9IE5VTEw7CiAJCU1DVkxpc3QJCW1jdmxpc3QgICA9IE5VTEw7Ci0J CWludCBudW1yb3dzX2ZpbHRlcmVkICA9IDA7CisJCU1WSGlzdG9ncmFtCWhp c3RvZ3JhbSA9IE5VTEw7CisJCWludCBudW1yb3dzX2ZpbHRlcmVkICA9IG51 bXJvd3M7CiAKIAkJVmFjQXR0clN0YXRzICAqKnN0YXRzICA9IE5VTEw7CiAJ CWludAkJCQludW1hdHRzICAgPSAwOwpAQCAtOTUsOCArOTYsMTIgQEAgYnVp bGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVh cFR1cGxlICpyb3dzLAogCQlpZiAoc3RhdC0+bWN2X2VuYWJsZWQpCiAJCQlt Y3ZsaXN0ID0gYnVpbGRfbXZfbWN2bGlzdChudW1yb3dzLCByb3dzLCBhdHRy cywgc3RhdHMsICZudW1yb3dzX2ZpbHRlcmVkKTsKIAorCQkvKiBidWlsZCBh IG11bHRpdmFyaWF0ZSBoaXN0b2dyYW0gb24gdGhlIGNvbHVtbnMgKi8KKwkJ aWYgKChudW1yb3dzX2ZpbHRlcmVkID4gMCkgJiYgKHN0YXQtPmhpc3RfZW5h YmxlZCkpCisJCQloaXN0b2dyYW0gPSBidWlsZF9tdl9oaXN0b2dyYW0obnVt cm93c19maWx0ZXJlZCwgcm93cywgYXR0cnMsIHN0YXRzLCBudW1yb3dzKTsK KwogCQkvKiBzdG9yZSB0aGUgaGlzdG9ncmFtIC8gTUNWIGxpc3QgaW4gdGhl IGNhdGFsb2cgKi8KLQkJdXBkYXRlX212X3N0YXRzKHN0YXQtPm12b2lkLCBk ZXBzLCBtY3ZsaXN0LCBhdHRycywgc3RhdHMpOworCQl1cGRhdGVfbXZfc3Rh dHMoc3RhdC0+bXZvaWQsIGRlcHMsIG1jdmxpc3QsIGhpc3RvZ3JhbSwgYXR0 cnMsIHN0YXRzKTsKIAl9CiB9CiAKQEAgLTE3Niw2ICsxODEsOCBAQCBsaXN0 X212X3N0YXRzKE9pZCByZWxpZCkKIAkJaW5mby0+ZGVwc19idWlsdCA9IHN0 YXRzLT5kZXBzX2J1aWx0OwogCQlpbmZvLT5tY3ZfZW5hYmxlZCA9IHN0YXRz LT5tY3ZfZW5hYmxlZDsKIAkJaW5mby0+bWN2X2J1aWx0ID0gc3RhdHMtPm1j dl9idWlsdDsKKwkJaW5mby0+aGlzdF9lbmFibGVkID0gc3RhdHMtPmhpc3Rf ZW5hYmxlZDsKKwkJaW5mby0+aGlzdF9idWlsdCA9IHN0YXRzLT5oaXN0X2J1 aWx0OwogCiAJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKIAl9 CkBAIC0xOTAsNyArMTk3LDYgQEAgbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQp CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKgogICogRmluZCBhdHRuaW1z IG9mIE1WIHN0YXRzIHVzaW5nIHRoZSBtdm9pZC4KICAqLwpAQCAtMjM2LDkg KzI0MiwxNiBAQCBmaW5kX212X2F0dG51bXMoT2lkIG12b2lkLCBPaWQgKnJl bGlkKQogfQogCiAKKy8qCisgKiBGSVhNRSBUaGlzIGFkZHMgc3RhdGlzdGlj cywgYnV0IHdlIG5lZWQgdG8gZHJvcCBzdGF0aXN0aWNzIHdoZW4gdGhlCisg KiAgICAgICB0YWJsZSBpcyBkcm9wcGVkLiBOb3Qgc3VyZSB3aGF0IHRvIGRv IHdoZW4gYSBjb2x1bW4gaXMgZHJvcHBlZC4KKyAqICAgICAgIEVpdGhlciB3 ZSBjYW4gKGEpIHJlbW92ZSBhbGwgc3RhdHMgb24gdGhhdCBjb2x1bW4sIChi KSByZW1vdmUKKyAqICAgICAgIHRoZSBjb2x1bW4gZnJvbSBkZWZpbmVkIHN0 YXRzIGFuZCBmb3JjZSByZWJ1aWxkLCAoYykgcmVtb3ZlIHRoZQorICogICAg ICAgY29sdW1uIG9uIG5leHQgQU5BTFlaRS4gT3IgbWF5YmUgc29tZXRoaW5n IGVsc2U/CisgKi8KIHZvaWQKIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQs Ci0JCQkJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1j dmxpc3QsCisJCQkJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBNQ1ZM aXN0IG1jdmxpc3QsIE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwKIAkJCQlpbnQy dmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMpCiB7CiAJSGVh cFR1cGxlCXN0dXAsCkBAIC0yNzEsMjIgKzI4NCwzNCBAQCB1cGRhdGVfbXZf c3RhdHMoT2lkIG12b2lkLAogCQl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhbWN2ICAtIDFdID0gUG9pbnRlckdldERhdHVtKGRhdGEpOwogCX0K IAorCWlmIChoaXN0b2dyYW0gIT0gTlVMTCkKKwl7CisJCWJ5dGVhICogZGF0 YSA9IHNlcmlhbGl6ZV9tdl9oaXN0b2dyYW0oaGlzdG9ncmFtLCBhdHRycywg c3RhdHMpOworCQludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0 LTFdICAgID0gKGRhdGEgPT0gTlVMTCk7CisJCXZhbHVlc1tBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFoaXN0IC0gMV0KKwkJCT0gUG9pbnRlckdldERhdHVt KGRhdGEpOworCX0KKwogCS8qIGFsd2F5cyByZXBsYWNlIHRoZSB2YWx1ZSAo ZWl0aGVyIGJ5IGJ5dGVhIG9yIE5VTEwpICovCiAJcmVwbGFjZXNbQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhZGVwcyAtMV0gPSB0cnVlOwogCXJlcGxhY2Vz W0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW1jdiAtMV0gPSB0cnVlOworCXJl cGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhpc3QtMV0gPSB0cnVl OwogCiAJLyogYWx3YXlzIGNoYW5nZSB0aGUgYXZhaWxhYmlsaXR5IGZsYWdz ICovCiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdCAt MV0gPSBmYWxzZTsKIAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3Zf YnVpbHQgLTFdID0gZmFsc2U7CisJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfaGlzdF9idWlsdC0xXSA9IGZhbHNlOwogCW51bGxzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWtleXMtMV0gICAgID0gZmFsc2U7CiAKIAkvKiB1c2Ug dGhlIG5ldyBhdHRudW1zLCBpbiBjYXNlIHdlIHJlbW92ZWQgc29tZSBkcm9w cGVkIG9uZXMgKi8KIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19k ZXBzX2J1aWx0LTFdID0gdHJ1ZTsKIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19tY3ZfYnVpbHQgIC0xXSA9IHRydWU7CisJcmVwbGFjZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9idWlsdCAtMV0gPSB0cnVlOwogCXJl cGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMgLTFdICAgID0g dHJ1ZTsKIAogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1 aWx0LTFdID0gQm9vbEdldERhdHVtKGRlcGVuZGVuY2llcyAhPSBOVUxMKTsK IAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0ICAtMV0g PSBCb29sR2V0RGF0dW0obWN2bGlzdCAhPSBOVUxMKTsKKwl2YWx1ZXNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfaGlzdF9idWlsdCAtMV0gPSBCb29sR2V0RGF0 dW0oaGlzdG9ncmFtICE9IE5VTEwpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFrZXlzIC0xXSAgICA9IFBvaW50ZXJHZXREYXR1bShhdHRy cyk7CiAKIAkvKiBJcyB0aGVyZSBhbHJlYWR5IGEgcGdfbXZfc3RhdGlzdGlj IHR1cGxlIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvaGlzdG9ncmFtLmMgYi9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2hpc3RvZ3JhbS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMDdiNTEKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2hpc3RvZ3JhbS5jCkBA IC0wLDAgKzEsMjAyMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogaGlzdG9ncmFtLmMKKyAqCSAgUE9TVEdSRVMgbXVsdGl2 YXJpYXRlIGhpc3RvZ3JhbXMKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC91dGlscy9t dnN0YXRzL2hpc3RvZ3JhbS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorCisjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKyNpbmNsdWRlICJjb21tb24u aCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKKworc3RhdGljIE1WQnVja2V0IGNy ZWF0ZV9pbml0aWFsX212X2J1Y2tldChpbnQgbnVtcm93cywgSGVhcFR1cGxl ICpyb3dzLAorCQkJCQkJCQkJCSBpbnQydmVjdG9yICphdHRycywKKwkJCQkJ CQkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMpOworCitzdGF0aWMgTVZCdWNr ZXQgc2VsZWN0X2J1Y2tldF90b19wYXJ0aXRpb24oaW50IG5idWNrZXRzLCBN VkJ1Y2tldCAqIGJ1Y2tldHMpOworCitzdGF0aWMgTVZCdWNrZXQgcGFydGl0 aW9uX2J1Y2tldChNVkJ1Y2tldCBidWNrZXQsIGludDJ2ZWN0b3IgKmF0dHJz LAorCQkJCQkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsCisJCQkJCQkJCSBp bnQgKm5kaXN0dmFsdWVzLCBEYXR1bSAqKmRpc3R2YWx1ZXMpOworCitzdGF0 aWMgTVZCdWNrZXQgY29weV9tdl9idWNrZXQoTVZCdWNrZXQgYnVja2V0LCB1 aW50MzIgbmRpbWVuc2lvbnMpOworCitzdGF0aWMgdm9pZCB1cGRhdGVfYnVj a2V0X25kaXN0aW5jdChNVkJ1Y2tldCBidWNrZXQsIGludDJ2ZWN0b3IgKmF0 dHJzLAorCQkJCQkJCQkJVmFjQXR0clN0YXRzICoqIHN0YXRzKTsKKworc3Rh dGljIHZvaWQgdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3QoTVZCdWNrZXQg YnVja2V0LCBpbnQgZGltZW5zaW9uLAorCQkJCQkJCQkJICAgaW50MnZlY3Rv ciAqYXR0cnMsCisJCQkJCQkJCQkgICBWYWNBdHRyU3RhdHMgKiogc3RhdHMs CisJCQkJCQkJCQkgICBib29sIHVwZGF0ZV9ib3VuZGFyaWVzKTsKKworc3Rh dGljIHZvaWQgY3JlYXRlX251bGxfYnVja2V0cyhNVkhpc3RvZ3JhbSBoaXN0 b2dyYW0sIGludCBidWNrZXRfaWR4LAorCQkJCQkJCQlpbnQydmVjdG9yICph dHRycywgVmFjQXR0clN0YXRzICoqIHN0YXRzKTsKKworc3RhdGljIERhdHVt ICogYnVpbGRfbmRpc3RpbmN0KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJv d3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJCSAgIFZhY0F0dHJTdGF0 cyAqKnN0YXRzLCBpbnQgaSwgaW50ICpudmFscyk7CisKKy8qCisgKiBFYWNo IHNlcmlhbGl6ZWQgYnVja2V0IG5lZWRzIHRvIHN0b3JlIChpbiB0aGlzIG9y ZGVyKToKKyAqCisgKiAtIG51bWJlciBvZiB0dXBsZXMgICAgIChmbG9hdCkK KyAqIC0gbnVtYmVyIG9mIGRpc3RpbmN0ICAgKGZsb2F0KQorICogLSBtaW4g aW5jbHVzaXZlIGZsYWdzICAobmRpbSAqIHNpemVvZihib29sKSkKKyAqIC0g bWF4IGluY2x1c2l2ZSBmbGFncyAgKG5kaW0gKiBzaXplb2YoYm9vbCkpCisg KiAtIG51bGwgZGltZW5zaW9uIGZsYWdzIChuZGltICogc2l6ZW9mKGJvb2wp KQorICogLSBtaW4gYm91bmRhcnkgaW5kZXhlcyAoMiAqIG5kaW0gKiBzaXpl b2YodWludDE2KSkKKyAqIC0gbWF4IGJvdW5kYXJ5IGluZGV4ZXMgKDIgKiBu ZGltICogc2l6ZW9mKHVpbnQxNikpCisgKgorICogU28gaW4gdG90YWw6Cisg KgorICogICBuZGltICogKDQgKiBzaXplb2YodWludDE2KSArIDMgKiBzaXpl b2YoYm9vbCkpICsgKDIgKiBzaXplb2YoZmxvYXQpKQorICovCisjZGVmaW5l IEJVQ0tFVF9TSVpFKG5kaW1zKQlcCisJKG5kaW1zICogKDQgKiBzaXplb2Yo dWludDE2KSArIDMgKiBzaXplb2YoYm9vbCkpICsgc2l6ZW9mKGZsb2F0KSkK KworLyogcG9pbnRlcnMgaW50byBhIGZsYXQgc2VyaWFsaXplZCBidWNrZXQg b2YgQlVDS0VUX1NJWkUobikgYnl0ZXMgKi8KKyNkZWZpbmUgQlVDS0VUX05U VVBMRVMoYikJCSgqKGZsb2F0KiliKQorI2RlZmluZSBCVUNLRVRfTUlOX0lO Q0woYixuKQkoKGJvb2wqKShiICsgc2l6ZW9mKGZsb2F0KSkpCisjZGVmaW5l IEJVQ0tFVF9NQVhfSU5DTChiLG4pCShCVUNLRVRfTUlOX0lOQ0woYixuKSAr IG4pCisjZGVmaW5lIEJVQ0tFVF9OVUxMU19PTkxZKGIsbikJKEJVQ0tFVF9N QVhfSU5DTChiLG4pICsgbikKKyNkZWZpbmUgQlVDS0VUX01JTl9JTkRFWEVT KGIsbikJKCh1aW50MTYqKShCVUNLRVRfTlVMTFNfT05MWShiLG4pICsgbikp CisjZGVmaW5lIEJVQ0tFVF9NQVhfSU5ERVhFUyhiLG4pCSgoQlVDS0VUX01J Tl9JTkRFWEVTKGIsbikgKyBuKSkKKworLyogY2FuJ3Qgc3BsaXQgYnVja2V0 IHdpdGggbGVzcyB0aGFuIDEwIHJvd3MgKi8KKyNkZWZpbmUgTUlOX0JVQ0tF VF9ST1dTCQkJMTAKKworLyoKKyAqIERhdGEgdXNlZCB3aGlsZSBidWlsZGlu ZyB0aGUgaGlzdG9ncmFtLgorICovCit0eXBlZGVmIHN0cnVjdCBIaXN0b2dy YW1CdWlsZERhdGEgeworCisJZmxvYXQJbmRpc3RpbmN0OwkJLyogZnJlcXVl bmN5IG9mIGRpc3RpbmN0IHZhbHVlcyAqLworCisJSGVhcFR1cGxlICAqcm93 czsJCS8qIGFyYXkgb2Ygc2FtcGxlIHJvd3MgKi8KKwl1aW50MzIJCW51bXJv d3M7CS8qIG51bWJlciBvZiBzYW1wbGUgcm93cyAoYXJyYXkgc2l6ZSkgKi8K KworCS8qCisJICogTnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBpbiBlYWNo IGRpbWVuc2lvbi4gVGhpcyBpcyB1c2VkIHdoZW4KKwkgKiBidWlsZGluZyB0 aGUgaGlzdG9ncmFtIChhbmQgaXMgbm90IHNlcmlhbGl6ZWQvZGVzZXJpYWxp emVkKS4KKwkgKi8KKwl1aW50MzIgKm5kaXN0aW5jdHM7CisKK30gSGlzdG9n cmFtQnVpbGREYXRhOworCit0eXBlZGVmIEhpc3RvZ3JhbUJ1aWxkRGF0YQkq SGlzdG9ncmFtQnVpbGQ7CisKKy8qCisgKiBidWlsZHMgYSBtdWx0aXZhcmlh dGUgYWxnb3JpdGhtCisgKgorICogVGhlIGJ1aWxkIGFsZ29yaXRobSBpcyBp dGVyYXRpdmUgLSBpbml0aWFsbHkgYSBzaW5nbGUgYnVja2V0IGNvbnRhaW5p bmcgYWxsCisgKiB0aGUgc2FtcGxlIHJvd3MgaXMgZm9ybWVkLCBhbmQgdGhl biByZXBlYXRlZGx5IHNwbGl0IGludG8gc21hbGxlciBidWNrZXRzLgorICog SW4gZWFjaCBzdGVwIHRoZSBsYXJnZXN0IGJ1Y2tldCAoaW4gc29tZSBzZW5z ZSkgaXMgY2hvc2VuIHRvIGJlIHNwbGl0IG5leHQuCisgKgorICogVGhlIGNy aXRlcmlhIGZvciBzZWxlY3RpbmcgdGhlIGxhcmdlc3QgYnVja2V0IChhbmQg dGhlIGRpbWVuc2lvbiBmb3IgdGhlCisgKiBzcGxpdCkgbmVlZHMgdG8gYmUg ZWxhYm9yYXRlIGVub3VnaCB0byBwcm9kdWNlIGJ1Y2tldHMgb2Ygcm91Z2hs eSB0aGUgc2FtZQorICogc2l6ZSwgYW5kIGFsc28gcmVndWxhciBzaGFwZSAo bm90IHZlcnkgbG9uZyBpbiBvbmUgZGltZW5zaW9uKS4KKyAqCisgKiBUaGUg Y3VycmVudCBhbGdvcml0aG0gd29ya3MgbGlrZSB0aGlzOgorICoKKyAqICAg ICBidWlsZCBOVUxMLWJ1Y2tldHMgKGNyZWF0ZV9udWxsX2J1Y2tldHMpCisg KgorICogICAgIHdoaWxlIFttYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIG5v dCByZWFjaGVkXQorICoKKyAqICAgICAgICAgY2hvb3NlIGJ1Y2tldCB0byBw YXJ0aXRpb24gKGxhcmdlc3QgYnVja2V0KQorICogICAgICAgICAgICAgaWYg bm8gYnVja2V0IHRvIHBhcnRpdGlvbgorICogICAgICAgICAgICAgICAgIHRl cm1pbmF0ZSB0aGUgYWxnb3JpdGhtCisgKgorICogICAgICAgICBjaG9vc2Ug YnVja2V0IGRpbWVuc2lvbiB0byBwYXJ0aXRpb24gKGxhcmdlc3QgZGltZW5z aW9uKQorICogICAgICAgICAgICAgc3BsaXQgdGhlIGJ1Y2tldCBpbnRvIHR3 byBidWNrZXRzCisgKgorICogU2VlIHRoZSBkaXNjdXNzaW9uIGF0IHNlbGVj dF9idWNrZXRfdG9fcGFydGl0aW9uIGFuZCBwYXJ0aXRpb25fYnVja2V0IGZv cgorICogbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBhbGdvcml0aG0uCisgKi8K K01WSGlzdG9ncmFtCitidWlsZF9tdl9oaXN0b2dyYW0oaW50IG51bXJvd3Ms IEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJICAg VmFjQXR0clN0YXRzICoqc3RhdHMsIGludCBudW1yb3dzX3RvdGFsKQorewor CWludCBpOworCWludCBudW1hdHRycyA9IGF0dHJzLT5kaW0xOworCisJaW50 CQkJICAgKm5kaXN0dmFsdWVzOworCURhdHVtCQkgICoqZGlzdHZhbHVlczsK KworCU1WSGlzdG9ncmFtCQloaXN0b2dyYW07CisKKwlIZWFwVHVwbGUgKiBy b3dzX2NvcHkgPSAoSGVhcFR1cGxlKilwYWxsb2MwKG51bXJvd3MgKiBzaXpl b2YoSGVhcFR1cGxlKSk7CisJbWVtY3B5KHJvd3NfY29weSwgcm93cywgc2l6 ZW9mKEhlYXBUdXBsZSkgKiBudW1yb3dzKTsKKworCUFzc2VydCgobnVtYXR0 cnMgPj0gMikgJiYgKG51bWF0dHJzIDw9IE1WU1RBVFNfTUFYX0RJTUVOU0lP TlMpKTsKKworCS8qIGJ1aWxkIGhpc3RvZ3JhbSBoZWFkZXIgKi8KKworCWhp c3RvZ3JhbSA9IChNVkhpc3RvZ3JhbSlwYWxsb2MwKHNpemVvZihNVkhpc3Rv Z3JhbURhdGEpKTsKKworCWhpc3RvZ3JhbS0+bWFnaWMgPSBNVlNUQVRfSElT VF9NQUdJQzsKKwloaXN0b2dyYW0tPnR5cGUgID0gTVZTVEFUX0hJU1RfVFlQ RV9CQVNJQzsKKworCWhpc3RvZ3JhbS0+bmJ1Y2tldHMgPSAxOworCWhpc3Rv Z3JhbS0+bmRpbWVuc2lvbnMgPSBudW1hdHRyczsKKworCS8qIGNyZWF0ZSBt YXggYnVja2V0cyAoYmV0dGVyIHRoYW4gcmVwYWxsb2MgZm9yIHNob3J0LWxp dmVkIG9iamVjdHMpICovCisJaGlzdG9ncmFtLT5idWNrZXRzCisJCT0gKE1W QnVja2V0KilwYWxsb2MwKE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTICogc2l6 ZW9mKE1WQnVja2V0KSk7CisKKwkvKiBjcmVhdGUgdGhlIGluaXRpYWwgYnVj a2V0LCBjb3ZlcmluZyB0aGUgd2hvbGUgc2FtcGxlIHNldCAqLworCWhpc3Rv Z3JhbS0+YnVja2V0c1swXQorCQk9IGNyZWF0ZV9pbml0aWFsX212X2J1Y2tl dChudW1yb3dzLCByb3dzX2NvcHksIGF0dHJzLCBzdGF0cyk7CisKKwkvKgor CSAqIENvbGxlY3QgaW5mbyBvbiBkaXN0aW5jdCB2YWx1ZXMgaW4gZWFjaCBk aW1lbnNpb24gKHVzZWQgbGF0ZXIgdG8gc2VsZWN0CisJICogZGltZW5zaW9u IHRvIHBhcnRpdGlvbikuCisJICovCisJbmRpc3R2YWx1ZXMgPSAoaW50Kilw YWxsb2MwKHNpemVvZihpbnQpICogbnVtYXR0cnMpOworCWRpc3R2YWx1ZXMg ID0gKERhdHVtKiopcGFsbG9jMChzaXplb2YoRGF0dW0qKSAqIG51bWF0dHJz KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCQlkaXN0 dmFsdWVzW2ldID0gYnVpbGRfbmRpc3RpbmN0KG51bXJvd3MsIHJvd3MsIGF0 dHJzLCBzdGF0cywgaSwKKwkJCQkJCQkJCQkmbmRpc3R2YWx1ZXNbaV0pOwor CisJLyoKKwkgKiBTcGxpdCB0aGUgaW5pdGlhbCBidWNrZXQgaW50byBidWNr ZXRzIHRoYXQgZG9uJ3QgbWl4IE5VTEwgYW5kIG5vbi1OVUxMCisJICogdmFs dWVzIGluIGEgc2luZ2xlIGRpbWVuc2lvbi4KKwkgKi8KKwljcmVhdGVfbnVs bF9idWNrZXRzKGhpc3RvZ3JhbSwgMCwgYXR0cnMsIHN0YXRzKTsKKworCS8q CisJICogRG8gdGhlIGFjdHVhbCBoaXN0b2dyYW0gYnVpbGQgLSBzZWxlY3Qg YSBidWNrZXQgYW5kIHNwbGl0IGl0LgorCSAqCisJICogRklYTUUgVGhpcyBz aG91bGQgdXNlICB0aGUgbWF4X2J1Y2tldHMgc3BlY2lmaWVkIGluIENSRUFU RSBTVEFUSVNUSUNTLgorCSAqLworCXdoaWxlIChoaXN0b2dyYW0tPm5idWNr ZXRzIDwgTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMpCisJeworCQlNVkJ1Y2tl dCBidWNrZXQgPSBzZWxlY3RfYnVja2V0X3RvX3BhcnRpdGlvbihoaXN0b2dy YW0tPm5idWNrZXRzLAorCQkJCQkJCQkJCQkJCSBoaXN0b2dyYW0tPmJ1Y2tl dHMpOworCisJCS8qIG5vIGJ1Y2tldHMgZWxpZ2libGUgZm9yIHBhcnRpdGlv bmluZyAqLworCQlpZiAoYnVja2V0ID09IE5VTEwpCisJCQlicmVhazsKKwor CQkvKiB3ZSBtb2RpZnkgdGhlIGJ1Y2tldCBpbi1wbGFjZSBhbmQgYWRkIG9u ZSBuZXcgYnVja2V0ICovCisJCWhpc3RvZ3JhbS0+YnVja2V0c1toaXN0b2dy YW0tPm5idWNrZXRzKytdCisJCQk9IHBhcnRpdGlvbl9idWNrZXQoYnVja2V0 LCBhdHRycywgc3RhdHMsIG5kaXN0dmFsdWVzLCBkaXN0dmFsdWVzKTsKKwl9 CisKKwkvKiBmaW5hbGl6ZSB0aGUgaGlzdG9ncmFtIGJ1aWxkIC0gY29tcHV0 ZSB0aGUgZnJlcXVlbmNpZXMgZXRjLiAqLworCWZvciAoaSA9IDA7IGkgPCBo aXN0b2dyYW0tPm5idWNrZXRzOyBpKyspCisJeworCQlIaXN0b2dyYW1CdWls ZCBidWlsZF9kYXRhCisJCQk9ICgoSGlzdG9ncmFtQnVpbGQpaGlzdG9ncmFt LT5idWNrZXRzW2ldLT5idWlsZF9kYXRhKTsKKworCQkvKgorCQkgKiBUaGUg ZnJlcXVlbmN5IGhhcyB0byBiZSBjb21wdXRlZCBmcm9tIHRoZSB3aG9sZSBz YW1wbGUsIGluIGNhc2Ugc29tZQorCQkgKiBvZiB0aGUgcm93cyB3ZXJlIHVz ZWQgZm9yIE1DVi4KKwkJICoKKwkJICogWFhYIFBlcmhhcHMgdGhpcyBzaG91 bGQgc2ltcGx5IGNvbXB1dGUgZnJlcXVlbmN5IHdpdGggcmVzcGVjdCB0byB0 aGUKKwkJICogICAgIGxvY2FsIGZyZXVxdWVuY3ksIGFuZCB0aGVuIGZhY3Rv ci1pbiB0aGUgTUNWIGxhdGVyLgorCQkgKgorCQkgKiBGSVhNRSBUaGUgJ250 dXBsZXMnIHNvdW5kcyBhIGJpdCBpbmFwcHJvcHJpYXRlIGZvciBmcmVxdWVu Y3kuCisJCSAqLworCQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm50dXBsZXMK KwkJCT0gKGJ1aWxkX2RhdGEtPm51bXJvd3MgKiAxLjApIC8gbnVtcm93c190 b3RhbDsKKwl9CisKKwlyZXR1cm4gaGlzdG9ncmFtOworfQorCisvKiBidWls ZCBhcnJheSBvZiBkaXN0aW5jdCB2YWx1ZXMgZm9yIGEgc2luZ2xlIGF0dHJp YnV0ZSAqLworc3RhdGljIERhdHVtICoKK2J1aWxkX25kaXN0aW5jdChpbnQg bnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywK KwkJCQlWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50IGksIGludCAqbnZhbHMp Cit7CisJaW50CQkJCWo7CisJaW50CQkJCW52YWx1ZXMsCisJCQkJCW5kaXN0 aW5jdDsKKwlEYXR1bQkJICAgKnZhbHVlcywKKwkJCQkgICAqZGlzdHZhbHVl czsKKworCVNvcnRTdXBwb3J0RGF0YQlzc3VwOworCVN0ZEFuYWx5emVEYXRh ICpteXN0YXRzID0gKFN0ZEFuYWx5emVEYXRhICopIHN0YXRzW2ldLT5leHRy YV9kYXRhOworCisJLyogaW5pdGlhbGl6ZSBzb3J0IHN1cHBvcnQsIGV0Yy4g Ki8KKwltZW1zZXQoJnNzdXAsIDAsIHNpemVvZihzc3VwKSk7CisJc3N1cC5z c3VwX2N4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJLyogV2UgYWx3 YXlzIHVzZSB0aGUgZGVmYXVsdCBjb2xsYXRpb24gZm9yIHN0YXRpc3RpY3Mg Ki8KKwlzc3VwLnNzdXBfY29sbGF0aW9uID0gREVGQVVMVF9DT0xMQVRJT05f T0lEOworCXNzdXAuc3N1cF9udWxsc19maXJzdCA9IGZhbHNlOworCisJUHJl cGFyZVNvcnRTdXBwb3J0RnJvbU9yZGVyaW5nT3AobXlzdGF0cy0+bHRvcHIs ICZzc3VwKTsKKworCW52YWx1ZXMgPSAwOworCXZhbHVlcyA9IChEYXR1bSop cGFsbG9jMChzaXplb2YoRGF0dW0pICogbnVtcm93cyk7CisKKwkvKiBjb2xs ZWN0IHZhbHVlcyBmcm9tIHRoZSBzYW1wbGUgcm93cywgaWdub3JlIE5VTExz ICovCisJZm9yIChqID0gMDsgaiA8IG51bXJvd3M7IGorKykKKwl7CisJCURh dHVtCXZhbHVlOworCQlib29sCWlzbnVsbDsKKworCQkvKiByZW1lbWJlciB0 aGUgaW5kZXggb2YgdGhlIHNhbXBsZSByb3csIHRvIG1ha2UgdGhlIHBhcnRp dGlvbmluZyBzaW1wbGVyICovCisJCXZhbHVlID0gaGVhcF9nZXRhdHRyKHJv d3Nbal0sIGF0dHJzLT52YWx1ZXNbaV0sCisJCQkJCQkJIHN0YXRzW2ldLT50 dXBEZXNjLCAmaXNudWxsKTsKKworCQlpZiAoaXNudWxsKQorCQkJY29udGlu dWU7CisKKwkJdmFsdWVzW252YWx1ZXMrK10gPSB2YWx1ZTsKKwl9CisKKwkv KiBpZiBubyBub24tTlVMTCB2YWx1ZXMgd2VyZSBmb3VuZCwgZnJlZSB0aGUg bWVtb3J5IGFuZCB0ZXJtaW5hdGUgKi8KKwlpZiAobnZhbHVlcyA9PSAwKQor CXsKKwkJcGZyZWUodmFsdWVzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ Lyogc29ydCB0aGUgYXJyYXkgb2YgdmFsdWVzIHVzaW5nIHRoZSBTb3J0U3Vw cG9ydCAqLworCXFzb3J0X2FyZygodm9pZCAqKSB2YWx1ZXMsIG52YWx1ZXMs IHNpemVvZihEYXR1bSksCisJCQkgIGNvbXBhcmVfc2NhbGFyc19zaW1wbGUs ICh2b2lkICopICZzc3VwKTsKKworCS8qIGNvdW50IHRoZSBkaXN0aW5jdCB2 YWx1ZXMgZmlyc3QsIGFuZCBhbGxvY2F0ZSBqdXN0IGVub3VnaCBtZW1vcnkg Ki8KKwluZGlzdGluY3QgPSAxOworCWZvciAoaiA9IDE7IGogPCBudmFsdWVz OyBqKyspCisJCWlmIChjb21wYXJlX3NjYWxhcnNfc2ltcGxlKCZ2YWx1ZXNb al0sICZ2YWx1ZXNbai0xXSwgJnNzdXApICE9IDApCisJCQluZGlzdGluY3Qg Kz0gMTsKKworCWRpc3R2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9m KERhdHVtKSAqIG5kaXN0aW5jdCk7CisKKwkvKiBub3cgY29sbGVjdCBkaXN0 aW5jdCB2YWx1ZXMgaW50byB0aGUgYXJyYXkgKi8KKwlkaXN0dmFsdWVzWzBd ID0gdmFsdWVzWzBdOworCW5kaXN0aW5jdCA9IDE7CisKKwlmb3IgKGogPSAx OyBqIDwgbnZhbHVlczsgaisrKQorCXsKKwkJaWYgKGNvbXBhcmVfc2NhbGFy c19zaW1wbGUoJnZhbHVlc1tqXSwgJnZhbHVlc1tqLTFdLCAmc3N1cCkgIT0g MCkKKwkJeworCQkJZGlzdHZhbHVlc1tuZGlzdGluY3RdID0gdmFsdWVzW2pd OworCQkJbmRpc3RpbmN0ICs9IDE7CisJCX0KKwl9CisKKwlwZnJlZSh2YWx1 ZXMpOworCisJKm52YWxzID0gbmRpc3RpbmN0OworCXJldHVybiBkaXN0dmFs dWVzOworfQorCisvKiBmZXRjaCB0aGUgaGlzdG9ncmFtIChhcyBhIGJ5dGVh KSBmcm9tIHRoZSBwZ19tdl9zdGF0aXN0aWMgY2F0YWxvZyAqLworTVZTZXJp YWxpemVkSGlzdG9ncmFtCitsb2FkX212X2hpc3RvZ3JhbShPaWQgbXZvaWQp Cit7CisJYm9vbAkJaXNudWxsID0gZmFsc2U7CisJRGF0dW0JCWhpc3RvZ3Jh bTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlGb3JtX3BnX212 X3N0YXRpc3RpYwltdnN0YXQ7CisjZW5kaWYKKworCS8qIFByZXBhcmUgdG8g c2NhbiBwZ19tdl9zdGF0aXN0aWMgZm9yIGVudHJpZXMgaGF2aW5nIGluZHJl bGlkID0gdGhpcyByZWwuICovCisJSGVhcFR1cGxlCWh0dXAgPSBTZWFyY2hT eXNDYWNoZTEoTVZTVEFUT0lELCBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7 CisKKwlpZiAoISBIZWFwVHVwbGVJc1ZhbGlkKGh0dXApKQorCQlyZXR1cm4g TlVMTDsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwltdnN0YXQg PSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNUUlVDVChodHVwKTsKKwlB c3NlcnQobXZzdGF0LT5oaXN0X2VuYWJsZWQgJiYgbXZzdGF0LT5oaXN0X2J1 aWx0KTsKKyNlbmRpZgorCisJaGlzdG9ncmFtID0gU3lzQ2FjaGVHZXRBdHRy KE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJCSAgIEFudW1fcGdfbXZfc3RhdGlz dGljX3N0YWhpc3QsICZpc251bGwpOworCisJQXNzZXJ0KCFpc251bGwpOwor CisJUmVsZWFzZVN5c0NhY2hlKGh0dXApOworCisJcmV0dXJuIGRlc2VyaWFs aXplX212X2hpc3RvZ3JhbShEYXR1bUdldEJ5dGVhUChoaXN0b2dyYW0pKTsK K30KKworLyogcHJpbnQgc29tZSBiYXNpYyBpbmZvIGFib3V0IHRoZSBoaXN0 b2dyYW0gKi8KK0RhdHVtCitwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhQ R19GVU5DVElPTl9BUkdTKQoreworCWJ5dGVhCSAgICpkYXRhID0gUEdfR0VU QVJHX0JZVEVBX1AoMCk7CisJY2hhcgkgICAqcmVzdWx0OworCisJTVZTZXJp YWxpemVkSGlzdG9ncmFtIGhpc3QgPSBkZXNlcmlhbGl6ZV9tdl9oaXN0b2dy YW0oZGF0YSk7CisKKwlyZXN1bHQgPSBwYWxsb2MwKDEyOCk7CisJc25wcmlu dGYocmVzdWx0LCAxMjgsICJuYnVja2V0cz0lZCIsIGhpc3QtPm5idWNrZXRz KTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHJlc3Vs dCkpOworfQorCisvKgorICogU2VyaWFsaXplIHRoZSBNViBoaXN0b2dyYW0g aW50byBhIGJ5dGVhIHZhbHVlLiBUaGUgYmFzaWMgYWxnb3JpdGhtIGlzIHF1 aXRlCisgKiBzaW1wbGUsIGFuZCBtb3N0bHkgbWltaW5jcyB0aGUgTUNWIHNl cmlhbGl6YXRpb246CisgKgorICogKDEpIHBlcmZvcm0gZGVkdXBsaWNhdGlv biBmb3IgZWFjaCBhdHRyaWJ1dGUgKHNlcGFyYXRlbHkpCisgKgorICogICAg IChhKSBjb2xsZWN0IGFsbCAobm9uLU5VTEwpIGF0dHJpYnV0ZSB2YWx1ZXMg ZnJvbSBhbGwgYnVja2V0cworICogICAgIChiKSBzb3J0IHRoZSBkYXRhICh1 c2luZyAnbHQnIGZyb20gVmFjQXR0clN0YXRzKQorICogICAgIChjKSByZW1v dmUgZHVwbGljYXRlIHZhbHVlcyBmcm9tIHRoZSBhcnJheQorICoKKyAqICgy KSBzZXJpYWxpemUgdGhlIGFycmF5cyBpbnRvIGEgYnl0ZWEgdmFsdWUKKyAq CisgKiAoMykgcHJvY2VzcyBhbGwgYnVja2V0cworICoKKyAqICAgICAoYSkg cmVwbGFjZSBtaW4vbWF4IHZhbHVlcyB3aXRoIGluZGV4ZXMgaW50byB0aGUg YXJyYXlzCisgKgorICogRWFjaCBhdHRyaWJ1dGUgaGFzIHRvIGJlIHByb2Nl c3NlZCBzZXBhcmF0ZWx5LCBhcyB3ZSdyZSBtaXhpbmcgZGlmZmVyZW50Cisg KiBkYXRhdHlwZXMsIGFuZCB3ZSB3ZSBuZWVkIHRvIHVzZSB0aGUgcmlnaHQg b3BlcmF0b3JzIHRvIGNvbXBhcmUvc29ydCB0aGVtLgorICogV2UncmUgYWxz byBtaXhpbmcgcGFzcy1ieS12YWx1ZSBhbmQgcGFzcy1ieS1yZWYgdHlwZXMs IGFuZCBzbyBvbi4KKyAqCisgKgorICogRklYTUUgVGhpcyBwcm9iYWJseSBs ZWFrcyBtZW1vcnksIG9yIGF0IGxlYXN0IHVzZXMgaXQgaW5lZmZpY2llbnRs eQorICogICAgICAgKG1hbnkgc21hbGwgcGFsbG9jKCkgY2FsbHMgaW5zdGVh ZCBvZiBhIGxhcmdlIG9uZSkuCisgKgorICogVE9ETyBDb25zaWRlciBwYWNr aW5nIGJvb2xlYW4gZmxhZ3MgKE5VTEwpIGZvciBlYWNoIGl0ZW0gaW50byAn Y2hhcicKKyAqICAgICAgb3IgYSBsb25nZXIgdHlwZSAoaW5zdGVhZCBvZiB1 c2luZyBhbiBhcnJheSBvZiBib29sIGl0ZW1zKS4KKyAqLworYnl0ZWEgKgor c2VyaWFsaXplX212X2hpc3RvZ3JhbShNVkhpc3RvZ3JhbSBoaXN0b2dyYW0s IGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkgICBWYWNBdHRyU3RhdHMgKipz dGF0cykKK3sKKwlpbnQgaSA9IDAsIGogPSAwOworCVNpemUJdG90YWxfbGVu Z3RoID0gMDsKKworCWJ5dGVhICAqb3V0cHV0ID0gTlVMTDsKKwljaGFyICAg KmRhdGEgPSBOVUxMOworCisJRGltZW5zaW9uSW5mbyAgKmluZm87CisJU29y dFN1cHBvcnQJCXNzdXA7CisKKwlpbnQJCW5idWNrZXRzID0gaGlzdG9ncmFt LT5uYnVja2V0czsKKwlpbnQJCW5kaW1zICAgID0gaGlzdG9ncmFtLT5uZGlt ZW5zaW9uczsKKworCS8qIGFsbG9jYXRlZCBmb3Igc2VyaWFsaXplZCBidWNr ZXQgZGF0YSAqLworCWludAkJYnVja2V0c2l6ZSA9IEJVQ0tFVF9TSVpFKG5k aW1zKTsKKwljaGFyICAgKmJ1Y2tldCA9IHBhbGxvYzAoYnVja2V0c2l6ZSk7 CisKKwkvKiB2YWx1ZXMgcGVyIGRpbWVuc2lvbiAoYW5kIG51bWJlciBvZiBu b24tTlVMTCB2YWx1ZXMpICovCisJRGF0dW0gKip2YWx1ZXMgPSAoRGF0dW0q KilwYWxsb2MwKHNpemVvZihEYXR1bSopICogbmRpbXMpOworCWludAkgICAq Y291bnRzID0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5kaW1zKTsK KworCS8qIGluZm8gYWJvdXQgZGltZW5zaW9ucyAoZm9yIGRlc2VyaWFsaXpl KSAqLworCWluZm8gPSAoRGltZW5zaW9uSW5mbyAqKXBhbGxvYzAoc2l6ZW9m KERpbWVuc2lvbkluZm8pKm5kaW1zKTsKKworCS8qIHNvcnQgc3VwcG9ydCBk YXRhICovCisJc3N1cCA9IChTb3J0U3VwcG9ydClwYWxsb2MwKHNpemVvZihT b3J0U3VwcG9ydERhdGEpKm5kaW1zKTsKKworCS8qIGNvbGxlY3QgYW5kIGRl ZHVwbGljYXRlIHZhbHVlcyBmb3IgZWFjaCBkaW1lbnNpb24gc2VwYXJhdGVs eSAqLworCWZvciAoaSA9IDA7IGkgPCBuZGltczsgaSsrKQorCXsKKwkJaW50 IGNvdW50OworCQlTdGRBbmFseXplRGF0YSAqdG1wID0gKFN0ZEFuYWx5emVE YXRhICopc3RhdHNbaV0tPmV4dHJhX2RhdGE7CisKKwkJLyoga2VlcCBpbXBv cnRhbnQgaW5mbyBhYm91dCB0aGUgZGF0YSB0eXBlICovCisJCWluZm9baV0u dHlwbGVuICAgPSBzdGF0c1tpXS0+YXR0cnR5cGUtPnR5cGxlbjsKKwkJaW5m b1tpXS50eXBieXZhbCA9IHN0YXRzW2ldLT5hdHRydHlwZS0+dHlwYnl2YWw7 CisKKwkJLyoKKwkJICogQWxsb2NhdGUgc3BhY2UgZm9yIGFsbCBtaW4vbWF4 IHZhbHVlcywgaW5jbHVkaW5nIE5VTExzICh3ZSB3b24ndCB1c2UKKwkJICog dGhlbSwgYnV0IHdlIGRvbid0IGtub3cgaG93IG1hbnkgYXJlIHRoZXJlKSwg YW5kIHRoZW4gY29sbGVjdCBhbGwKKwkJICogbm9uLU5VTEwgdmFsdWVzLgor CQkgKi8KKwkJdmFsdWVzW2ldID0gKERhdHVtKilwYWxsb2MwKHNpemVvZihE YXR1bSkgKiBuYnVja2V0cyAqIDIpOworCisJCWZvciAoaiA9IDA7IGogPCBo aXN0b2dyYW0tPm5idWNrZXRzOyBqKyspCisJCXsKKwkJCS8qIHNraXAgYnVj a2V0cyB3aGVyZSB0aGlzIGRpbWVuc2lvbiBpcyBOVUxMLW9ubHkgKi8KKwkJ CWlmICghIGhpc3RvZ3JhbS0+YnVja2V0c1tqXS0+bnVsbHNvbmx5W2ldKQor CQkJeworCQkJCXZhbHVlc1tpXVtjb3VudHNbaV1dID0gaGlzdG9ncmFtLT5i dWNrZXRzW2pdLT5taW5baV07CisJCQkJY291bnRzW2ldICs9IDE7CisKKwkJ CQl2YWx1ZXNbaV1bY291bnRzW2ldXSA9IGhpc3RvZ3JhbS0+YnVja2V0c1tq XS0+bWF4W2ldOworCQkJCWNvdW50c1tpXSArPSAxOworCQkJfQorCQl9CisK KwkJLyogdGhlcmUgYXJlIGp1c3QgTlVMTCB2YWx1ZXMgaW4gdGhpcyBkaW1l bnNpb24gKi8KKwkJaWYgKGNvdW50c1tpXSA9PSAwKQorCQkJY29udGludWU7 CisKKwkJLyogc29ydCBhbmQgZGVkdXBsaWNhdGUgKi8KKwkJc3N1cFtpXS5z c3VwX2N4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCQlzc3VwW2ldLnNz dXBfY29sbGF0aW9uID0gREVGQVVMVF9DT0xMQVRJT05fT0lEOworCQlzc3Vw W2ldLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCQlQcmVwYXJlU29y dFN1cHBvcnRGcm9tT3JkZXJpbmdPcCh0bXAtPmx0b3ByLCAmc3N1cFtpXSk7 CisKKwkJcXNvcnRfYXJnKHZhbHVlc1tpXSwgY291bnRzW2ldLCBzaXplb2Yo RGF0dW0pLAorCQkJCQkJCQkJCWNvbXBhcmVfc2NhbGFyc19zaW1wbGUsICZz c3VwW2ldKTsKKworCQkvKgorCQkgKiBXYWxrIHRocm91Z2ggdGhlIGFycmF5 IGFuZCBlbGltaW5hdGUgZHVwbGljaXRhdGUgdmFsdWVzLCBidXQKKwkJICog a2VlcCB0aGUgb3JkZXJpbmcgKHNvIHRoYXQgd2UgY2FuIGRvIGJzZWFyY2gg bGF0ZXIpLiBXZSBrbm93CisJCSAqIHRoZXJlJ3MgYXQgbGVhc3QgMSBpdGVt LCBzbyB3ZSBjYW4gc2tpcCB0aGUgZmlyc3QgZWxlbWVudC4KKwkJICovCisJ CWNvdW50ID0gMTsJLyogbnVtYmVyIG9mIGRlZHVwbGljYXRlZCBpdGVtcyAq LworCQlmb3IgKGogPSAxOyBqIDwgY291bnRzW2ldOyBqKyspCisJCXsKKwkJ CS8qIGlmIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIHZhbHVl LCB3ZSBuZWVkIHRvIGtlZXAgaXQgKi8KKwkJCWlmIChjb21wYXJlX2RhdHVt c19zaW1wbGUodmFsdWVzW2ldW2otMV0sIHZhbHVlc1tpXVtqXSwgJnNzdXBb aV0pICE9IDApCisJCQl7CisJCQkJLyogWFhYOiBub3QgbmVlZGVkIGlmIChj b3VudCA9PSBqKSAqLworCQkJCXZhbHVlc1tpXVtjb3VudF0gPSB2YWx1ZXNb aV1bal07CisJCQkJY291bnQgKz0gMTsKKwkJCX0KKwkJfQorCisJCS8qIG1h a2Ugc3VyZSB3ZSBmaXQgaW50byB1aW50MTYgKi8KKwkJQXNzZXJ0KGNvdW50 IDw9IFVJTlQxNl9NQVgpOworCisJCS8qIGtlZXAgaW5mbyBhYm91dCB0aGUg ZGVkdXBsaWNhdGVkIGNvdW50ICovCisJCWluZm9baV0ubnZhbHVlcyA9IGNv dW50OworCisJCS8qIGNvbXB1dGUgc2l6ZSBvZiB0aGUgc2VyaWFsaXplZCBk YXRhICovCisJCWlmIChpbmZvW2ldLnR5cGxlbiA+IDApCisJCQkvKiBieXZh bCBvciBieXJlZiwgYnV0IHdpdGggZml4ZWQgbGVuZ3RoIChuYW1lLCB0aWQs IC4uLikgKi8KKwkJCWluZm9baV0ubmJ5dGVzID0gaW5mb1tpXS5udmFsdWVz ICogaW5mb1tpXS50eXBsZW47CisJCWVsc2UgaWYgKGluZm9baV0udHlwbGVu ID09IC0xKQorCQkJLyogdmFybGVuYSwgc28ganVzdCB1c2UgVkFSU0laRV9B TlkgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGor KykKKwkJCQlpbmZvW2ldLm5ieXRlcyArPSBWQVJTSVpFX0FOWSh2YWx1ZXNb aV1bal0pOworCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMikKKwkJ CS8qIGNzdHJpbmcsIHNvIHNpbXBseSBzdHJsZW4gKi8KKwkJCWZvciAoaiA9 IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQlpbmZvW2ldLm5i eXRlcyArPSBzdHJsZW4oRGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXVtqXSkp OworCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5rbm93biBkYXRhIHR5cGUg dHlwYnl2YWw9JWQgdHlwbGVuPSVkIiwKKwkJCQlpbmZvW2ldLnR5cGJ5dmFs LCBpbmZvW2ldLnR5cGxlbik7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgZmlu YWxseSBrbm93IGhvdyBtdWNoIHNwYWNlIHdlJ2xsIG5lZWQgZm9yIHRoZSBz ZXJpYWxpemVkCisJICogaGlzdG9ncmFtLCBhcyBpdCBjb250YWlucyB0aGVz ZSBmaWVsZHM6CisJICoKKwkgKiAtIGxlbmd0aCAoNEIpIGZvciB2YXJsZW5h CisJICogLSBtYWdpYyAoNEIpCisJICogLSB0eXBlICg0QikKKwkgKiAtIG5k aW1lbnNpb25zICg0QikKKwkgKiAtIG5idWNrZXRzICg0QikKKwkgKiAtIGlu Zm8gKG5kaW0gKiBzaXplb2YoRGltZW5zaW9uSW5mbykKKwkgKiAtIGFycmF5 cyBvZiB2YWx1ZXMgZm9yIGVhY2ggZGltZW5zaW9uCisJICogLSBzZXJpYWxp emVkIGJ1Y2tldHMgKG5idWNrZXRzICogYnVja2V0c2l6ZSkKKwkgKgorCSAq IFNvIHRoZSAnaGVhZGVyJyBzaXplIGlzIDIwQiArIG5kaW0gKiBzaXplb2Yo RGltZW5zaW9uSW5mbykgYW5kCisJICogdGhlbiB3ZSdsbCBwbGFjZSB0aGUg ZGF0YSAoYW5kIGJ1Y2tldHMpLgorCSAqLworCXRvdGFsX2xlbmd0aCA9IChz aXplb2YoaW50MzIpICsgb2Zmc2V0b2YoTVZIaXN0b2dyYW1EYXRhLCBidWNr ZXRzKQorCQkJCQkrIG5kaW1zICogc2l6ZW9mKERpbWVuc2lvbkluZm8pCisJ CQkJCSsgbmJ1Y2tldHMgKiBidWNrZXRzaXplKTsKKworCS8qIGFjY291bnQg Zm9yIHRoZSBkZWR1cGxpY2F0ZWQgZGF0YSAqLworCWZvciAoaSA9IDA7IGkg PCBuZGltczsgaSsrKQorCQl0b3RhbF9sZW5ndGggKz0gaW5mb1tpXS5uYnl0 ZXM7CisKKwkvKiBlbmZvcmNlIGFyYml0cmFyeSBsaW1pdCBvZiAxTUIgKi8K KwlpZiAodG90YWxfbGVuZ3RoID4gKDEwMjQgKiAxMDI0KSkKKwkJZWxvZyhF UlJPUiwgInNlcmlhbGl6ZWQgaGlzdG9ncmFtIGV4Y2VlZHMgMU1CICglbGQg PiAlZCkiLAorCQkJCQl0b3RhbF9sZW5ndGgsICgxMDI0ICogMTAyNCkpOwor CisJLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzZXJpYWxpemVkIGhpc3Rv Z3JhbSBsaXN0LCBzZXQgaGVhZGVyICovCisJb3V0cHV0ID0gKGJ5dGVhKilw YWxsb2MwKHRvdGFsX2xlbmd0aCk7CisJU0VUX1ZBUlNJWkUob3V0cHV0LCB0 b3RhbF9sZW5ndGgpOworCisJLyogd2UnbGwgdXNlICdkYXRhJyB0byBrZWVw IHRyYWNrIG9mIHRoZSBwbGFjZSB0byB3cml0ZSBkYXRhICovCisJZGF0YSA9 IFZBUkRBVEEob3V0cHV0KTsKKworCW1lbWNweShkYXRhLCBoaXN0b2dyYW0s IG9mZnNldG9mKE1WSGlzdG9ncmFtRGF0YSwgYnVja2V0cykpOworCWRhdGEg Kz0gb2Zmc2V0b2YoTVZIaXN0b2dyYW1EYXRhLCBidWNrZXRzKTsKKworCW1l bWNweShkYXRhLCBpbmZvLCBzaXplb2YoRGltZW5zaW9uSW5mbykgKiBuZGlt cyk7CisJZGF0YSArPSBzaXplb2YoRGltZW5zaW9uSW5mbykgKiBuZGltczsK KworCS8qIHNlcmlhbGl6ZSB0aGUgZGVkdXBsaWNhdGVkIHZhbHVlcyBmb3Ig YWxsIGF0dHJpYnV0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkr KykKKwl7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQljaGFyICp0 bXAgPSBkYXRhOworI2VuZGlmCisJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ld Lm52YWx1ZXM7IGorKykKKwkJeworCQkJRGF0dW0gdiA9IHZhbHVlc1tpXVtq XTsKKworCQkJaWYgKGluZm9baV0udHlwYnl2YWwpCQkJLyogcGFzc2VkIGJ5 IHZhbHVlICovCisJCQl7CisJCQkJbWVtY3B5KGRhdGEsICZ2LCBpbmZvW2ld LnR5cGxlbik7CisJCQkJZGF0YSArPSBpbmZvW2ldLnR5cGxlbjsKKwkJCX0K KwkJCWVsc2UgaWYgKGluZm9baV0udHlwbGVuID4gMCkJLyogcGFzZWQgYnkg cmVmZXJlbmNlICovCisJCQl7CisJCQkJbWVtY3B5KGRhdGEsIERhdHVtR2V0 UG9pbnRlcih2KSwgaW5mb1tpXS50eXBsZW4pOworCQkJCWRhdGEgKz0gaW5m b1tpXS50eXBsZW47CisJCQl9CisJCQllbHNlIGlmIChpbmZvW2ldLnR5cGxl biA9PSAtMSkJLyogdmFybGVuYSAqLworCQkJeworCQkJCW1lbWNweShkYXRh LCBEYXR1bUdldFBvaW50ZXIodiksIFZBUlNJWkVfQU5ZKHYpKTsKKwkJCQlk YXRhICs9IFZBUlNJWkVfQU5ZKHZhbHVlc1tpXVtqXSk7CisJCQl9CisJCQll bHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMikJLyogY3N0cmluZyAqLwor CQkJeworCQkJCW1lbWNweShkYXRhLCBEYXR1bUdldFBvaW50ZXIodiksIHN0 cmxlbihEYXR1bUdldFBvaW50ZXIodikpKzEpOworCQkJCWRhdGEgKz0gc3Ry bGVuKERhdHVtR2V0UG9pbnRlcih2KSkgKyAxOworCQkJfQorCQl9CisKKwkJ LyogbWFrZSBzdXJlIHdlIGdvdCBleGFjdGx5IHRoZSBhbW91bnQgb2YgZGF0 YSB3ZSBleHBlY3RlZCAqLworCQlBc3NlcnQoKGRhdGEgLSB0bXApID09IGlu Zm9baV0ubmJ5dGVzKTsKKwl9CisKKwkvKiBmaW5hbGx5IHNlcmlhbGl6ZSB0 aGUgaXRlbXMsIHdpdGggdWludDE2IGluZGV4ZXMgaW5zdGVhZCBvZiB0aGUg dmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IG5idWNrZXRzOyBpKyspCisJ eworCQkvKiBkb24ndCB3cml0ZSBiZXlvbmQgdGhlIGFsbG9jYXRlZCBzcGFj ZSAqLworCQlBc3NlcnQoZGF0YSA8PSAoY2hhciopb3V0cHV0ICsgdG90YWxf bGVuZ3RoIC0gYnVja2V0c2l6ZSk7CisKKwkJLyogcmVzZXQgdGhlIHZhbHVl cyBmb3IgZWFjaCBpdGVtICovCisJCW1lbXNldChidWNrZXQsIDAsIGJ1Y2tl dHNpemUpOworCisJCUJVQ0tFVF9OVFVQTEVTKGJ1Y2tldCkgPSBoaXN0b2dy YW0tPmJ1Y2tldHNbaV0tPm50dXBsZXM7CisKKwkJZm9yIChqID0gMDsgaiA8 IG5kaW1zOyBqKyspCisJCXsKKwkJCS8qIGRvIHRoZSBsb29rdXAgb25seSBm b3Igbm9uLU5VTEwgdmFsdWVzICovCisJCQlpZiAoISBoaXN0b2dyYW0tPmJ1 Y2tldHNbaV0tPm51bGxzb25seVtqXSkKKwkJCXsKKwkJCQl1aW50MTYgaWR4 OworCQkJCURhdHVtICogdiA9IE5VTEw7CisKKwkJCQkvKiBtaW4gYm91bmRh cnkgKi8KKwkJCQl2ID0gKERhdHVtKilic2VhcmNoX2FyZygmaGlzdG9ncmFt LT5idWNrZXRzW2ldLT5taW5bal0sCisJCQkJCQkJCXZhbHVlc1tqXSwgaW5m b1tqXS5udmFsdWVzLCBzaXplb2YoRGF0dW0pLAorCQkJCQkJCQljb21wYXJl X3NjYWxhcnNfc2ltcGxlLCAmc3N1cFtqXSk7CisKKwkJCQlBc3NlcnQodiAh PSBOVUxMKTsJLyogc2VyaWFsaXphdGlvbiBvciBkZWR1cGxpY2F0aW9uIGVy cm9yICovCisKKwkJCQkvKiBjb21wdXRlIGluZGV4IHdpdGhpbiB0aGUgYXJy YXkgKi8KKwkJCQlpZHggPSAodiAtIHZhbHVlc1tqXSk7CisKKwkJCQlBc3Nl cnQoKGlkeCA+PSAwKSAmJiAoaWR4IDwgaW5mb1tqXS5udmFsdWVzKSk7CisK KwkJCQlCVUNLRVRfTUlOX0lOREVYRVMoYnVja2V0LCBuZGltcylbal0gPSBp ZHg7CisKKwkJCQkvKiBtYXggYm91bmRhcnkgKi8KKwkJCQl2ID0gKERhdHVt Kilic2VhcmNoX2FyZygmaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5tYXhbal0s CisJCQkJCQkJCXZhbHVlc1tqXSwgaW5mb1tqXS5udmFsdWVzLCBzaXplb2Yo RGF0dW0pLAorCQkJCQkJCQljb21wYXJlX3NjYWxhcnNfc2ltcGxlLCAmc3N1 cFtqXSk7CisKKwkJCQlBc3NlcnQodiAhPSBOVUxMKTsJLyogc2VyaWFsaXph dGlvbiBvciBkZWR1cGxpY2F0aW9uIGVycm9yICovCisKKwkJCQkvKiBjb21w dXRlIGluZGV4IHdpdGhpbiB0aGUgYXJyYXkgKi8KKwkJCQlpZHggPSAodiAt IHZhbHVlc1tqXSk7CisKKwkJCQlBc3NlcnQoKGlkeCA+PSAwKSAmJiAoaWR4 IDwgaW5mb1tqXS5udmFsdWVzKSk7CisKKwkJCQlCVUNLRVRfTUFYX0lOREVY RVMoYnVja2V0LCBuZGltcylbal0gPSBpZHg7CisJCQl9CisJCX0KKworCQkv KiBjb3B5IGZsYWdzIChudWxscywgbWluL21heCBpbmNsdXNpdmUpICovCisJ CW1lbWNweShCVUNLRVRfTlVMTFNfT05MWShidWNrZXQsIG5kaW1zKSwKKwkJ CQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm51bGxzb25seSwgc2l6ZW9mKGJv b2wpICogbmRpbXMpOworCisJCW1lbWNweShCVUNLRVRfTUlOX0lOQ0woYnVj a2V0LCBuZGltcyksCisJCQkJaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5taW5f aW5jbHVzaXZlLCBzaXplb2YoYm9vbCkgKiBuZGltcyk7CisKKwkJbWVtY3B5 KEJVQ0tFVF9NQVhfSU5DTChidWNrZXQsIG5kaW1zKSwKKwkJCQloaXN0b2dy YW0tPmJ1Y2tldHNbaV0tPm1heF9pbmNsdXNpdmUsIHNpemVvZihib29sKSAq IG5kaW1zKTsKKworCQkvKiBjb3B5IHRoZSBpdGVtIGludG8gdGhlIGFycmF5 ICovCisJCW1lbWNweShkYXRhLCBidWNrZXQsIGJ1Y2tldHNpemUpOworCisJ CWRhdGEgKz0gYnVja2V0c2l6ZTsKKwl9CisKKwkvKiBhdCB0aGlzIHBvaW50 IHdlIGV4cGVjdCB0byBtYXRjaCB0aGUgdG90YWxfbGVuZ3RoIGV4YWN0bHkg Ki8KKwlBc3NlcnQoKGRhdGEgLSAoY2hhciopb3V0cHV0KSA9PSB0b3RhbF9s ZW5ndGgpOworCisJLyogZnJlZSB0aGUgdmFsdWVzL2NvdW50cyBhcnJheXMg aGVyZSAqLworCXBmcmVlKGNvdW50cyk7CisJcGZyZWUoaW5mbyk7CisJcGZy ZWUoc3N1cCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJ cGZyZWUodmFsdWVzW2ldKTsKKworCXBmcmVlKHZhbHVlcyk7CisKKwlyZXR1 cm4gb3V0cHV0OworfQorCisvKgorICogUmV0dXJucyBoaXN0b2dyYW0gaW4g YSBwYXJ0aWFsbHktc2VyaWFsaXplZCBmb3JtIChrZWVwcyB0aGUgYm91bmRh cnkgdmFsdWVzCisgKiBkZWR1cGxpY2F0ZWQsIHNvIHRoYXQgaXQncyBwb3Nz aWJsZSB0byBvcHRpbWl6ZSB0aGUgZXN0aW1hdGlvbiBwYXJ0IGJ5CisgKiBj YWNoaW5nIGZ1bmN0aW9uIGNhbGwgcmVzdWx0cyBiZXR3ZWVuIGJ1Y2tldHMg ZXRjLikuCisgKi8KK01WU2VyaWFsaXplZEhpc3RvZ3JhbQorZGVzZXJpYWxp emVfbXZfaGlzdG9ncmFtKGJ5dGVhICogZGF0YSkKK3sKKwlpbnQgaSA9IDAs IGogPSAwOworCisJU2l6ZQlleHBlY3RlZF9zaXplOworCWNoYXIgICAqdG1w ID0gTlVMTDsKKworCU1WU2VyaWFsaXplZEhpc3RvZ3JhbSBoaXN0b2dyYW07 CisJRGltZW5zaW9uSW5mbyAqaW5mbzsKKworCWludAkJbmJ1Y2tldHM7CisJ aW50CQluZGltczsKKwlpbnQJCWJ1Y2tldHNpemU7CisKKwkvKiB0ZW1wb3Jh cnkgZGVzZXJpYWxpemF0aW9uIGJ1ZmZlciAqLworCWludAkJYnVmZmxlbjsK KwljaGFyICAgKmJ1ZmY7CisJY2hhciAgICpwdHI7CisKKwlpZiAoZGF0YSA9 PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChWQVJTSVpFX0FOWV9F WEhEUihkYXRhKSA8IG9mZnNldG9mKE1WU2VyaWFsaXplZEhpc3RvZ3JhbURh dGEsYnVja2V0cykpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIGhpc3RvZ3Jh bSBzaXplICVsZCAoZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKSIsCisJCQkgVkFS U0laRV9BTllfRVhIRFIoZGF0YSksIG9mZnNldG9mKE1WU2VyaWFsaXplZEhp c3RvZ3JhbURhdGEsYnVja2V0cykpOworCisJLyogcmVhZCB0aGUgaGlzdG9n cmFtIGhlYWRlciAqLworCWhpc3RvZ3JhbQorCQk9IChNVlNlcmlhbGl6ZWRI aXN0b2dyYW0pcGFsbG9jKHNpemVvZihNVlNlcmlhbGl6ZWRIaXN0b2dyYW1E YXRhKSk7CisKKwkvKiBpbml0aWFsaXplIHBvaW50ZXIgdG8gdGhlIGRhdGEg cGFydCAoc2tpcCB0aGUgdmFybGVuYSBoZWFkZXIpICovCisJdG1wID0gVkFS REFUQShkYXRhKTsKKworCS8qIGdldCB0aGUgaGVhZGVyIGFuZCBwZXJmb3Jt IGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwltZW1jcHkoaGlzdG9ncmFtLCB0 bXAsIG9mZnNldG9mKE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEsIGJ1Y2tl dHMpKTsKKwl0bXAgKz0gb2Zmc2V0b2YoTVZTZXJpYWxpemVkSGlzdG9ncmFt RGF0YSwgYnVja2V0cyk7CisKKwlpZiAoaGlzdG9ncmFtLT5tYWdpYyAhPSBN VlNUQVRfSElTVF9NQUdJQykKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgaGlz dG9ncmFtIG1hZ2ljICVkIChleHBlY3RlZCAlZGQpIiwKKwkJCSBoaXN0b2dy YW0tPm1hZ2ljLCBNVlNUQVRfSElTVF9NQUdJQyk7CisKKwlpZiAoaGlzdG9n cmFtLT50eXBlICE9IE1WU1RBVF9ISVNUX1RZUEVfQkFTSUMpCisJCWVsb2co RVJST1IsICJpbnZhbGlkIGhpc3RvZ3JhbSB0eXBlICVkIChleHBlY3RlZCAl ZGQpIiwKKwkJCSBoaXN0b2dyYW0tPnR5cGUsIE1WU1RBVF9ISVNUX1RZUEVf QkFTSUMpOworCisJbmJ1Y2tldHMgPSBoaXN0b2dyYW0tPm5idWNrZXRzOwor CW5kaW1zICAgID0gaGlzdG9ncmFtLT5uZGltZW5zaW9uczsKKwlidWNrZXRz aXplID0gQlVDS0VUX1NJWkUobmRpbXMpOworCisJQXNzZXJ0KChuYnVja2V0 cyA+IDApICYmIChuYnVja2V0cyA8PSBNVlNUQVRfSElTVF9NQVhfQlVDS0VU UykpOworCUFzc2VydCgobmRpbXMgPj0gMikgJiYgKG5kaW1zIDw9IE1WU1RB VFNfTUFYX0RJTUVOU0lPTlMpKTsKKworCS8qCisJICogV2hhdCBzaXplIGRv IHdlIGV4cGVjdCB3aXRoIHRob3NlIHBhcmFtZXRlcnMgKGl0J3MgaW5jb21w bGV0ZSwgYXMgd2UgeWV0CisJICogaGF2ZSB0byBjb3VudCB0aGUgYXJyYXkg c2l6ZXMgKGZyb20gRGltZW5zaW9uSW5mbyByZWNvcmRzKS4KKwkgKi8KKwll eHBlY3RlZF9zaXplID0gb2Zmc2V0b2YoTVZTZXJpYWxpemVkSGlzdG9ncmFt RGF0YSxidWNrZXRzKSArCisJCQkJCW5kaW1zICogc2l6ZW9mKERpbWVuc2lv bkluZm8pICsKKwkJCQkJKG5idWNrZXRzICogYnVja2V0c2l6ZSk7CisKKwkv KiBjaGVjayB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgdGhlIERpbWVuc2lvbklu Zm8gcmVjb3JkcyAqLworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8 IGV4cGVjdGVkX3NpemUpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIGhpc3Rv Z3JhbSBzaXplICVsZCAoZXhwZWN0ZWQgJWxkKSIsCisJCQkgVkFSU0laRV9B TllfRVhIRFIoZGF0YSksIGV4cGVjdGVkX3NpemUpOworCisJaW5mbyA9IChE aW1lbnNpb25JbmZvKikodG1wKTsKKwl0bXAgKz0gbmRpbXMgKiBzaXplb2Yo RGltZW5zaW9uSW5mbyk7CisKKwkvKiBhY2NvdW50IGZvciB0aGUgdmFsdWUg YXJyYXlzICovCisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJCWV4 cGVjdGVkX3NpemUgKz0gaW5mb1tpXS5uYnl0ZXM7CisKKwlpZiAoVkFSU0la RV9BTllfRVhIRFIoZGF0YSkgIT0gZXhwZWN0ZWRfc2l6ZSkKKwkJZWxvZyhF UlJPUiwgImludmFsaWQgaGlzdG9ncmFtIHNpemUgJWxkIChleHBlY3RlZCAl bGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwgZXhwZWN0ZWRf c2l6ZSk7CisKKwkvKiBsb29rcyBPSyAtIG5vdCBjb3JydXB0ZWQgb3Igc29t ZXRoaW5nICovCisKKwkvKiBhIHNpbmdsZSBidWZmZXIgZm9yIGFsbCB0aGUg dmFsdWVzIGFuZCBjb3VudHMgKi8KKwlidWZmbGVuID0gKHNpemVvZihpbnQp ICArIHNpemVvZihEYXR1bSopKSAqIG5kaW1zOworCisJZm9yIChpID0gMDsg aSA8IG5kaW1zOyBpKyspCisJCS8qIGRvbid0IGFsbG9jYXRlIHNwYWNlIGZv ciBieXZhbCB0eXBlcywgbWF0Y2hpbmcgRGF0dW0gKi8KKwkJaWYgKCEgKGlu Zm9baV0udHlwYnl2YWwgJiYgKGluZm9baV0udHlwbGVuID09IHNpemVvZihE YXR1bSkpKSkKKwkJCWJ1ZmZsZW4gKz0gKHNpemVvZihEYXR1bSkgKiBpbmZv W2ldLm52YWx1ZXMpOworCisJLyogYWxzbywgaW5jbHVkZSBzcGFjZSBmb3Ig dGhlIHJlc3VsdCwgdHJhY2tpbmcgdGhlIGJ1Y2tldHMgKi8KKwlidWZmbGVu ICs9IG5idWNrZXRzICogKAorCQkJICAgc2l6ZW9mKE1WU2VyaWFsaXplZEJ1 Y2tldCkgKwkJLyogYnVja2V0IHBvaW50ZXIgKi8KKwkJCSAgIHNpemVvZihN VlNlcmlhbGl6ZWRCdWNrZXREYXRhKSk7CS8qIGJ1Y2tldCBkYXRhICovCisK KwlidWZmID0gcGFsbG9jMChidWZmbGVuKTsKKwlwdHIgID0gYnVmZjsKKwor CWhpc3RvZ3JhbS0+bnZhbHVlcyA9IChpbnQqKXB0cjsKKwlwdHIgKz0gKHNp emVvZihpbnQpICogbmRpbXMpOworCisJaGlzdG9ncmFtLT52YWx1ZXMgPSAo RGF0dW0qKilwdHI7CisJcHRyICs9IChzaXplb2YoRGF0dW0qKSAqIG5kaW1z KTsKKworCS8qCisJICogRklYTUUgVGhpcyB1c2VzIHBvaW50ZXJzIHRvIHRo ZSBvcmlnaW5hbCBkYXRhIGFycmF5ICh0aGUgdHlwZXMKKwkgKiAgICAgICBu b3QgcGFzc2VkIGJ5IHZhbHVlKSwgc28gd2hlbiBzb21lb25lIGZyZWVzIHRo ZSBtZW1vcnksCisJICogICAgICAgZS5nLiBieSBkb2luZyBzb21ldGhpbmcg bGlrZSB0aGlzOgorCSAqCisJICogICAgICAgICAgIGJ5dGVhICogZGF0YSA9 IC4uLiBmZXRjaCB0aGUgZGF0YSBmcm9tIGNhdGFsb2cgLi4uCisJICogICAg ICAgICAgIE1DVkxpc3QgbWN2bGlzdCA9IGRlc2VyaWFsaXplX21jdl9saXN0 KGRhdGEpOworCSAqICAgICAgICAgICBwZnJlZShkYXRhKTsKKwkgKgorCSAq ICAgICAgIHRoZW4gJ21jdmxpc3QnIHJlZmVyZW5jZXMgdGhlIGZyZWVkIG1l bW9yeS4gVGhpcyBuZWVkcyB0bworCSAqICAgICAgIGNvcHkgdGhlIHBpZWNl cy4KKwkgKgorCSAqIFRPRE8gc2FtZSBhcyBpbiBNQ1YgZGVzZXJpYWxpemF0 aW9uIC8gY29uc2lkZXIgbW92aW5nIHRvIGNvbW1vbi5jCisJICovCisJZm9y IChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJeworCQloaXN0b2dyYW0tPm52 YWx1ZXNbaV0gPSBpbmZvW2ldLm52YWx1ZXM7CisKKwkJaWYgKGluZm9baV0u dHlwYnl2YWwpCisJCXsKKwkJCS8qIHBhc3NlZCBieSB2YWx1ZSAvIERhdHVt IC0gc2ltcGx5IHJldXNlIHRoZSBhcnJheSAqLworCQkJaWYgKGluZm9baV0u dHlwbGVuID09IHNpemVvZihEYXR1bSkpCisJCQl7CisJCQkJaGlzdG9ncmFt LT52YWx1ZXNbaV0gPSAoRGF0dW0qKXRtcDsKKwkJCQl0bXAgKz0gaW5mb1tp XS5uYnl0ZXM7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaGlzdG9ncmFt LT52YWx1ZXNbaV0gPSAoRGF0dW0qKXB0cjsKKwkJCQlwdHIgKz0gKHNpemVv ZihEYXR1bSkgKiBpbmZvW2ldLm52YWx1ZXMpOworCisJCQkJZm9yIChqID0g MDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCXsKKwkJCQkJLyog anVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAqLworCQkJCQltZW1jcHkoJmhp c3RvZ3JhbS0+dmFsdWVzW2ldW2pdLCB0bXAsIGluZm9baV0udHlwbGVuKTsK KwkJCQkJdG1wICs9IGluZm9baV0udHlwbGVuOworCQkJCX0KKwkJCX0KKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qIGFsbCB0aGUgb3RoZXIgdHlwZXMgbmVl ZCBhIGNodW5rIG9mIHRoZSBidWZmZXIgKi8KKwkJCWhpc3RvZ3JhbS0+dmFs dWVzW2ldID0gKERhdHVtKilwdHI7CisJCQlwdHIgKz0gKHNpemVvZihEYXR1 bSkgKiBpbmZvW2ldLm52YWx1ZXMpOworCisJCQlpZiAoaW5mb1tpXS50eXBs ZW4gPiAwKQorCQkJeworCQkJCS8qIHBhc2VkIGJ5IHJlZmVyZW5jZSwgYnV0 IGZpeGVkIGxlbmd0aCAobmFtZSwgdGlkLCAuLi4pICovCisJCQkJZm9yIChq ID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCXsKKwkJCQkJ LyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAqLworCQkJCQloaXN0b2dy YW0tPnZhbHVlc1tpXVtqXSA9IFBvaW50ZXJHZXREYXR1bSh0bXApOworCQkJ CQl0bXAgKz0gaW5mb1tpXS50eXBsZW47CisJCQkJfQorCQkJfQorCQkJZWxz ZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTEpCisJCQl7CisJCQkJLyogdmFy bGVuYSAqLworCQkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7 IGorKykKKwkJCQl7CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJy YXkgKi8KKwkJCQkJaGlzdG9ncmFtLT52YWx1ZXNbaV1bal0gPSBQb2ludGVy R2V0RGF0dW0odG1wKTsKKwkJCQkJdG1wICs9IFZBUlNJWkVfQU5ZKHRtcCk7 CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0g LTIpCisJCQl7CisJCQkJLyogY3N0cmluZyAqLworCQkJCWZvciAoaiA9IDA7 IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8qIGp1 c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJaGlzdG9ncmFtLT52 YWx1ZXNbaV1bal0gPSBQb2ludGVyR2V0RGF0dW0odG1wKTsKKwkJCQkJdG1w ICs9IChzdHJsZW4odG1wKSArIDEpOyAvKiBkb24ndCBmb3JnZXQgdGhlIFww ICovCisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaGlzdG9ncmFtLT5idWNr ZXRzID0gKE1WU2VyaWFsaXplZEJ1Y2tldCopcHRyOworCXB0ciArPSAoc2l6 ZW9mKE1WU2VyaWFsaXplZEJ1Y2tldCkgKiBuYnVja2V0cyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbmJ1Y2tldHM7IGkrKykKKwl7CisJCU1WU2VyaWFsaXpl ZEJ1Y2tldCBidWNrZXQgPSAoTVZTZXJpYWxpemVkQnVja2V0KXB0cjsKKwkJ cHRyICs9IHNpemVvZihNVlNlcmlhbGl6ZWRCdWNrZXREYXRhKTsKKworCQli dWNrZXQtPm50dXBsZXMJCQk9IEJVQ0tFVF9OVFVQTEVTKHRtcCk7CisJCWJ1 Y2tldC0+bnVsbHNvbmx5CQk9IEJVQ0tFVF9OVUxMU19PTkxZKHRtcCwgbmRp bXMpOworCQlidWNrZXQtPm1pbl9pbmNsdXNpdmUJPSBCVUNLRVRfTUlOX0lO Q0wodG1wLCBuZGltcyk7CisJCWJ1Y2tldC0+bWF4X2luY2x1c2l2ZQk9IEJV Q0tFVF9NQVhfSU5DTCh0bXAsIG5kaW1zKTsKKworCQlidWNrZXQtPm1pbgkJ CQk9IEJVQ0tFVF9NSU5fSU5ERVhFUyh0bXAsIG5kaW1zKTsKKwkJYnVja2V0 LT5tYXgJCQkJPSBCVUNLRVRfTUFYX0lOREVYRVModG1wLCBuZGltcyk7CisK KwkJaGlzdG9ncmFtLT5idWNrZXRzW2ldID0gYnVja2V0OworCisJCUFzc2Vy dCh0bXAgPD0gKGNoYXIqKWRhdGEgKyBWQVJTSVpFX0FOWShkYXRhKSk7CisK KwkJdG1wICs9IGJ1Y2tldHNpemU7CisJfQorCisJLyogYXQgdGhpcyBwb2lu dCB3ZSBleHBlY3QgdG8gbWF0Y2ggdGhlIHRvdGFsX2xlbmd0aCBleGFjdGx5 ICovCisJQXNzZXJ0KCh0bXAgLSBWQVJEQVRBKGRhdGEpKSA9PSBleHBlY3Rl ZF9zaXplKTsKKworCS8qIHdlIHNob3VsZCBleGhhdXN0IHRoZSBvdXRwdXQg YnVmZmVyIGV4YWN0bHkgKi8KKwlBc3NlcnQoKHB0ciAtIGJ1ZmYpID09IGJ1 ZmZsZW4pOworCisJcmV0dXJuIGhpc3RvZ3JhbTsKK30KKworLyoKKyAqIEJ1 aWxkIHRoZSBpbml0aWFsIGJ1Y2tldCwgd2hpY2ggd2lsbCBiZSB0aGVuIHNw bGl0IGludG8gc21hbGxlciBvbmVzLgorICovCitzdGF0aWMgTVZCdWNrZXQK K2NyZWF0ZV9pbml0aWFsX212X2J1Y2tldChpbnQgbnVtcm93cywgSGVhcFR1 cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRycywKKwkJCQkJCSBWYWNBdHRy U3RhdHMgKipzdGF0cykKK3sKKwlpbnQgaTsKKwlpbnQJbnVtYXR0cnMgPSBh dHRycy0+ZGltMTsKKwlIaXN0b2dyYW1CdWlsZCBkYXRhID0gTlVMTDsKKwor CS8qIFRPRE8gYWxsb2NhdGUgYnVja2V0IGFzIGEgc2luZ2xlIHBpZWNlLCBp bmNsdWRpbmcgYWxsIHRoZSBmaWVsZHMuICovCisJTVZCdWNrZXQgYnVja2V0 ID0gKE1WQnVja2V0KXBhbGxvYzAoc2l6ZW9mKE1WQnVja2V0RGF0YSkpOwor CisJQXNzZXJ0KG51bXJvd3MgPiAwKTsKKwlBc3NlcnQocm93cyAhPSBOVUxM KTsKKwlBc3NlcnQoKG51bWF0dHJzID49IDIpICYmIChudW1hdHRycyA8PSBN VlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisKKwkvKiBhbGxvY2F0ZSB0aGUg cGVyLWRpbWVuc2lvbiBhcnJheXMgKi8KKworCS8qIGZsYWdzIGZvciBudWxs LW9ubHkgZGltZW5zaW9ucyAqLworCWJ1Y2tldC0+bnVsbHNvbmx5ID0gKGJv b2wqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoYm9vbCkpOworCisJLyog aW5jbHVzaXZlbmVzcyBib3VuZGFyaWVzIC0gbG93ZXIvdXBwZXIgYm91bmRz ICovCisJYnVja2V0LT5taW5faW5jbHVzaXZlID0gKGJvb2wqKXBhbGxvYzAo bnVtYXR0cnMgKiBzaXplb2YoYm9vbCkpOworCWJ1Y2tldC0+bWF4X2luY2x1 c2l2ZSA9IChib29sKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKGJvb2wp KTsKKworCS8qIGxvd2VyL3VwcGVyIGJvdW5kYXJpZXMgKi8KKwlidWNrZXQt Pm1pbiA9IChEYXR1bSopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihEYXR1 bSkpOworCWJ1Y2tldC0+bWF4ID0gKERhdHVtKilwYWxsb2MwKG51bWF0dHJz ICogc2l6ZW9mKERhdHVtKSk7CisKKwkvKiBidWlsZC1kYXRhICovCisJZGF0 YSA9IChIaXN0b2dyYW1CdWlsZClwYWxsb2MwKHNpemVvZihIaXN0b2dyYW1C dWlsZERhdGEpKTsKKworCS8qIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMg KHBlciBkaW1lbnNpb24pICovCisJZGF0YS0+bmRpc3RpbmN0cyA9ICh1aW50 MzIqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YodWludDMyKSk7CisKKwkv KiBhbGwgdGhlIHNhbXBsZSByb3dzIGZhbGwgaW50byB0aGUgaW5pdGlhbCBi dWNrZXQgKi8KKwlkYXRhLT5udW1yb3dzID0gbnVtcm93czsKKwlkYXRhLT5y b3dzID0gcm93czsKKworCWJ1Y2tldC0+YnVpbGRfZGF0YSA9IGRhdGE7CisK KwkvKgorCSAqIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIG5kaXN0aW5jdCBjb21i aW5hdGlvbnMgaW4gdGhlIGJ1Y2tldCAod2hpY2ggd2UgdXNlCisJICogd2hl biBzZWxlY3RpbmcgYnVja2V0IHRvIHBhcnRpdGlvbiksIGFuZCB0aGVuIG51 bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMKKwkgKiBmb3IgZWFjaCBwYXJ0aXRp b24gKHdoaWNoIHdlIHVzZSB3aGVuIGNob29zaW5nIHdoaWNoIGRpbWVuc2lv biB0byBzcGxpdCkuCisJICovCisJdXBkYXRlX2J1Y2tldF9uZGlzdGluY3Qo YnVja2V0LCBhdHRycywgc3RhdHMpOworCisJLyogVXBkYXRlIG5kaXN0aW5j dCAoYW5kIGFsc28gc2V0IG1pbi9tYXgpIGZvciBhbGwgZGltZW5zaW9ucy4g Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwkJdXBkYXRl X2RpbWVuc2lvbl9uZGlzdGluY3QoYnVja2V0LCBpLCBhdHRycywgc3RhdHMs IHRydWUpOworCisJcmV0dXJuIGJ1Y2tldDsKK30KKworLyoKKyAqIENob29z ZSB0aGUgYnVja2V0IHRvIHBhcnRpdGlvbiBuZXh0LgorICoKKyAqIFRoZSBj dXJyZW50IGNyaXRlcmlhIGlzIHJhdGhlciBzaW1wbGUsIGNob3NlbiBzbyB0 aGF0IHRoZSBhbGdvcml0aG0gcHJvZHVjZXMKKyAqIGJ1Y2tldHMgd2l0aCBh Ym91dCBlcXVhbCBmcmVxdWVuY3kgYW5kIHJlZ3VsYXIgc2l6ZS4gV2Ugc2Vs ZWN0IHRoZSBidWNrZXQKKyAqIHdpdGggdGhlIGhpZ2hlc3QgbnVtYmVyIG9m IGRpc3RpbmN0IHZhbHVlcywgYW5kIHRoZW4gc3BsaXQgaXQgYnkgdGhlIGxv bmdlc3QKKyAqIGRpbWVuc2lvbi4KKyAqCisgKiBUaGUgZGlzdGluY3QgdmFs dWVzIGFyZSB1bmlmb3JtbHkgbWFwcGVkIHRvIFswLDFdIGludGVydmFsLCBh bmQgdGhpcyBpcyB1c2VkCisgKiB0byBjb21wdXRlIGxlbmd0aCBvZiB0aGUg dmFsdWUgcmFuZ2UuCisgKgorICogTk9URTogVGhpcyBpcyBub3QgdGhlIHNh bWUgYXJyYXkgdXNlZCBmb3IgZGVkdXBsaWNhdGlvbiwgYXMgdGhpcyBjb250 YWlucworICogICAgICAgdmFsdWVzIGZvciBhbGwgdGhlIHR1cGxlcyBmcm9t IHRoZSBzYW1wbGUsIG5vdCBqdXN0IHRoZSBib3VuZGFyeSB2YWx1ZXMuCisg KgorICogUmV0dXJucyBlaXRoZXIgcG9pbnRlciB0byB0aGUgYnVja2V0IHNl bGVjdGVkIHRvIGJlIHBhcnRpdGlvbmVkLCBvciBOVUxMIGlmCisgKiB0aGVy ZSBhcmUgbm8gYnVja2V0cyB0aGF0IG1heSBiZSBzcGxpdCAoZS5nLiBpZiBh bGwgYnVja2V0cyBhcmUgdG9vIHNtYWxsCisgKiBvciBjb250YWluIHRvbyBm ZXcgZGlzdGluY3QgdmFsdWVzKS4KKyAqCisgKgorICogVHJpY2t5IGV4YW1w bGUKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogQ29uc2lkZXIgdGhpcyB0 YWJsZToKKyAqCisgKiAgICAgQ1JFQVRFIFRBQkxFIHQgQVMgU0VMRUNUIGkg QVMgYSwgaSBBUyBiCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CisgKgorICogICAg IENSRUFURSBTVEFUSVNUSUNTIHMxIE9OIHQgKGEsYikgV0lUSCAoaGlzdG9n cmFtKTsKKyAqCisgKiAgICAgQU5BTFlaRSB0OworICoKKyAqIEl0J3MgYSB2 ZXJ5IHNwZWNpZmljIChhbmQgcGVyaGFwcyBhcnRpZmljaWFsKSBleGFtcGxl LCBiZWNhdXNlIGV2ZXJ5IGJ1Y2tldAorICogYWx3YXlzIGhhcyBleGFjdGx5 IHRoZSBzYW1lIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgaW4gYWxsIGRp bWVuc2lvbnMsCisgKiB3aGljaCBtYWtlcyB0aGUgcGFydGl0aW9uaW5nIHRy aWNreS4KKyAqCisgKiBUaGVuOgorICoKKyAqICAgICBTRUxFQ1QgKiBGUk9N IHQgV0hFUkUgKGEgPCAxMDApIEFORCAoYiA8IDEwMCk7CisgKgorICogaXMg ZXN0aW1hdGVkIHRvIHJldHVybiB+MTIwIHJvd3MsIHdoaWxlIGluIHJlYWxp dHkgaXQgcmV0dXJucyBvbmx5IDk5LgorICoKKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTgorICogICAgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqICAgICAgU2VxIFNjYW4gb24gdCAgKGNvc3Q9MC4wMC4uMTk0MjUu MDAgcm93cz0xMTcgd2lkdGg9OCkKKyAqICAgICAgICAgICAgICAgICAgICAg KGFjdHVhbCB0aW1lPTAuMTI5Li44Mi43NzYgcm93cz05OSBsb29wcz0xKQor ICogICAgICAgIEZpbHRlcjogKChhIDwgMTAwKSBBTkQgKGIgPCAxMDApKQor ICogICAgICAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDk5OTkwMQorICog ICAgICBQbGFubmluZyB0aW1lOiAxLjI4NiBtcworICogICAgICBFeGVjdXRp b24gdGltZTogODIuOTg0IG1zCisgKiAgICAgKDUgcm93cykKKyAqCisgKiBT byB0aGlzIGVzdGltYXRlIGlzIHJlYXNvbmFibHkgY2xvc2UuIExldCdzIGNo YW5nZSB0aGUgcXVlcnkgdG8gT1IgY2xhdXNlOgorICoKKyAqICAgICBTRUxF Q1QgKiBGUk9NIHQgV0hFUkUgKGEgPCAxMDApIE9SIChiIDwgMTAwKTsKKyAq CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KKyAq ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgIFNlcSBTY2FuIG9uIHQg IChjb3N0PTAuMDAuLjE5NDI1LjAwIHJvd3M9ODEwMCB3aWR0aD04KQorICog ICAgICAgICAgICAgICAgICAgICAoYWN0dWFsIHRpbWU9MC4xNDUuLjk5Ljkx MCByb3dzPTk5IGxvb3BzPTEpCisgKiAgICAgICAgRmlsdGVyOiAoKGEgPCAx MDApIE9SIChiIDwgMTAwKSkKKyAqICAgICAgICBSb3dzIFJlbW92ZWQgYnkg RmlsdGVyOiA5OTk5MDEKKyAqICAgICAgUGxhbm5pbmcgdGltZTogMS41Nzgg bXMKKyAqICAgICAgRXhlY3V0aW9uIHRpbWU6IDEwMC4xMzIgbXMKKyAqICAg ICAoNSByb3dzKQorICoKKyAqIFRoYXQncyBjbGVhcmx5IGEgbXVjaCB3b3Jz ZSBlc3RpbWF0ZS4gVGhpcyBoYXBwZW5zIGJlY2F1c2UgdGhlIGhpc3RvZ3Jh bQorICogY29udGFpbnMgYnVja2V0cyBsaWtlIHRoaXM6CisgKgorICogICAg IGJ1Y2tldCA1OTIgIFszIDMwMzEwXSBbMzAxMzQgMzA1OTNdID0+IFswLjAw MDIzM10KKyAqCisgKiBpLmUuIHRoZSBsZW5ndGggb2YgImEiIGRpbWVuc2lv biBpcyAoMzAzMTAtMyk9MzAzMDcsIHdoaWxlIHRoZSBsZW5ndGggb2YgImIi CisgKiBpcyAoMzA1OTMtMzAxMzQpPTQ1OS4gU28gdGhlICJiIiBkaW1lbnNp b24gaXMgbXVjaCBuYXJyb3dlciB0aGFuICJhIi4KKyAqIE9mIGNvdXJzZSwg dGhlcmUgYXJlIGFsc28gYnVja2V0cyB3aGVyZSAiYiIgaXMgdGhlIHdpZGVy IGRpbWVuc2lvbi4KKyAqCisgKiBUaGlzIGlzIHBhcnRpYWxseSBtaXRpZ2F0 ZWQgYnkgc2VsZWN0aW5nIHRoZSAibG9uZ2VzdCIgZGltZW5zaW9uIGJ1dCB0 aGF0CisgKiBvbmx5IGhhcHBlbnMgYWZ0ZXIgd2UgYWxyZWFkeSBzZWxlY3Rl ZCB0aGUgYnVja2V0LiBTbyBpZiB3ZSBuZXZlciBzZWxlY3QgdGhlCisgKiBi dWNrZXQsIHRoaXMgb3B0aW1pemF0aW9uIGRvZXMgbm90IGFwcGx5LgorICoK KyAqIFRoZSBvdGhlciByZWFzb24gd2h5IHRoaXMgcGFydGljdWxhciBleGFt cGxlIGJlaGF2ZXMgc28gcG9vcmx5IGlzIGR1ZSB0byB0aGUKKyAqIHdheSB3 ZSBhY3R1YWxseSBzcGxpdCB0aGUgc2VsZWN0ZWQgYnVja2V0LiBXZSBkbyBh dHRlbXB0IHRvIGRpdmlkZSB0aGUgYnVja2V0CisgKiBpbnRvIHR3byBwYXJ0 cyBjb250YWluaW5nIGFib3V0IHRoZSBzYW1lIG51bWJlciBvZiB0dXBsZXMs IGJ1dCB0aGF0IGRvZXMgbm90CisgKiB0b28gd2VsbCB3aGVuIG1vc3Qgb2Yg dGhlIHR1cGxlcyBpcyBzcXVhc2hlZCBvbiBvbmUgc2lkZSBvZiB0aGUgYnVj a2V0LgorICoKKyAqIEZvciBleGFtcGxlIGZvciBjb2x1bW5zIHdpdGggZGF0 YSBvbiB0aGUgZGlhZ29uYWwgKGkuZS4gd2hlbiBhPWIpLCB3ZSBlbmQgdXAK KyAqIHdpdGggYSBuYXJyb3cgYnVja2V0IG9uIHRoZSBkaWFnb25hbCBhbmQg YSBodWdlIGJ1Y2tldCBvdmVyaW5nIHRoZSByZW1haW5pbmcKKyAqIHBhcnQg KHdpdGggbXVjaCBsb3dlciBkZW5zaXR5KS4KKyAqCisgKiBTbyBwZXJoYXBz IHdlIG5lZWQgdHdvIHBhcnRpdGlvbmluZyBzdHJhdGVnaWVzIC0gb25lIGFp bWluZyB0byBzcGxpdCBidWNrZXRzCisgKiB3aXRoIGhpZ2ggZnJlcXVlbmN5 IChudW1iZXIgb2Ygc2FtcGxlZCByb3dzKSwgdGhlIG90aGVyIGFpbWluZyB0 byBzcGxpdAorICogImxhcmdlIiBidWNrZXRzLiBBbmQgYWx0ZXJuYXRpbmcg YmV0d2VlbiB0aGVtLCBzb21laG93LgorICoKKyAqIFRPRE8gQ29uc2lkZXIg dXNpbmcgc2ltaWxhciBsb3dlciBib3VuZGFyeSBmb3Igcm93IGNvdW50IGFz IGZvciBzaW1wbGUKKyAqICAgICAgaGlzdG9ncmFtcywgaS5lLiAzMDAgdHVw bGVzIHBlciBidWNrZXQuCisgKi8KK3N0YXRpYyBNVkJ1Y2tldAorc2VsZWN0 X2J1Y2tldF90b19wYXJ0aXRpb24oaW50IG5idWNrZXRzLCBNVkJ1Y2tldCAq IGJ1Y2tldHMpCit7CisJaW50IGk7CisJaW50IG51bXJvd3MgPSAwOworCU1W QnVja2V0IGJ1Y2tldCA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1 Y2tldHM7IGkrKykKKwl7CisJCUhpc3RvZ3JhbUJ1aWxkIGRhdGEgPSAoSGlz dG9ncmFtQnVpbGQpYnVja2V0c1tpXS0+YnVpbGRfZGF0YTsKKworCQkvKiBp ZiB0aGUgbnVtYmVyIG9mIHJvd3MgaXMgaGlnaGVyLCB1c2UgdGhpcyBidWNr ZXQgKi8KKwkJaWYgKChkYXRhLT5uZGlzdGluY3QgPiAyKSAmJgorCQkJKGRh dGEtPm51bXJvd3MgPiBudW1yb3dzKSAmJgorCQkJKGRhdGEtPm51bXJvd3Mg Pj0gTUlOX0JVQ0tFVF9ST1dTKSkgeworCQkJYnVja2V0ID0gYnVja2V0c1tp XTsKKwkJCW51bXJvd3MgPSBkYXRhLT5udW1yb3dzOworCQl9CisJfQorCisJ LyogbWF5IGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5vdCBidWNrZXRzIHdpdGgg KG5kaXN0aW5jdD4xKSAqLworCXJldHVybiBidWNrZXQ7Cit9CisKKy8qCisg KiBBIHNpbXBsZSBidWNrZXQgcGFydGl0aW9uaW5nIGltcGxlbWVudGF0aW9u IC0gd2UgY2hvb3NlIHRoZSBsb25nZXN0IGJ1Y2tldAorICogZGltZW5zaW9u LCBtZWFzdXJlZCB1c2luZyB0aGUgYXJyYXkgb2YgZGlzdGluY3QgdmFsdWVz IGJ1aWx0IGF0IHRoZSB2ZXJ5CisgKiBiZWdpbm5pbmcgb2YgdGhlIGJ1aWxk LgorICoKKyAqIFdlIG1hcCBhbGwgdGhlIGRpc3RpbmN0IHZhbHVlcyB0byBh IFswLDFdIGludGVydmFsLCB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQsCisgKiBh bmQgdGhlbiB1c2UgdGhpcyB0byBtZWFzdXJlIGxlbmd0aC4gSXQncyBlc3Nl bnRpYWxseSBhIG51bWJlciBvZiBkaXN0aW5jdAorICogdmFsdWVzIHdpdGhp biB0aGUgcmFuZ2UsIG5vcm1hbGl6ZWQgdG8gWzAsMV0uCisgKgorICogVGhl biB3ZSBjaG9vc2UgYSAnbWlkZGxlJyB2YWx1ZSBzcGxpdHRpbmcgdGhlIGJ1 Y2tldCBpbnRvIHR3byBwYXJ0cyB3aXRoCisgKiByb3VnaGx5IHRoZSBzYW1l IGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIHNwbGl0cyB0aGUgYnVja2V0IGJ5 IHR3ZWFraW5nIHRoZSBleGlzdGluZyBvbmUsIGFuZCByZXR1cm5pbmcgdGhl IG5ldworICogYnVja2V0IChlc3NlbnRpYWxseSBzaHJpbmtpbmcgdGhlIGV4 aXN0aW5nIG9uZSBpbi1wbGFjZSBhbmQgcmV0dXJuaW5nIHRoZQorICogb3Ro ZXIgImhhbGYiIGFzIGEgbmV3IGJ1Y2tldCkuIFRoZSBjYWxsZXIgaXMgcmVz cG9uc2libGUgZm9yIGFkZGluZyB0aGUgbmV3CisgKiBidWNrZXQgaW50byB0 aGUgbGlzdCBvZiBidWNrZXRzLgorICoKKyAqIFRoZXJlIGFyZSBtdWx0aXBs ZSBoaXN0b2dyYW0gb3B0aW9ucywgY2VudGVyZWQgYXJvdW5kIHRoZSBwYXJ0 aXRpb25pbmcKKyAqIGNyaXRlcmlhLCBzcGVjaWZ5aW5nIGJvdGggaG93IHRv IGNob29zZSBhIGJ1Y2tldCBhbmQgdGhlIGRpbWVuc2lvbiBtb3N0IGluCisg KiBuZWVkIG9mIGEgc3BsaXQuIEZvciBhIG5pY2Ugc3VtbWFyeSBhbmQgZ2Vu ZXJhbCBvdmVydmlldywgc2VlICJySy1IaXN0IDogYW4KKyAqIFItVHJlZSBi YXNlZCBoaXN0b2dyYW0gZm9yIG11bHRpLWRpbWVuc2lvbmFsIHNlbGVjdGl2 aXR5IGVzdGltYXRpb24iIHRoZXNpcworICogYnkgSi4gQS4gTG9wZXosIENv bmNvcmRpYSBVbml2ZXJzaXR5LCBwLjM0LTM3IChhbmQgcG9zc2libHkgcC4g MzItMzQgZm9yCisgKiBleHBsYW5hdGlvbiBvZiB0aGUgdGVybXMpLgorICoK KyAqIEl0IHJlcXVpcmVzIGNhcmUgdG8gcHJldmVudCBzcGxpdHRpbmcgb25s eSBvbmUgZGltZW5zaW9uIGFuZCBub3Qgc3BsaXR0aW5nCisgKiBhbm90aGVy IG9uZSBhdCBhbGwgKHdoaWNoIG1pZ2h0IGhhcHBlbiBlYXNpbHkgaW4gY2Fz ZSBvZiBzdHJvbmdseSBkZXBlbmRlbnQKKyAqIGNvbHVtbnMgLSBlLmcuIHk9 eCkuIFRoZSBjdXJyZW50IGFsZ29yaXRobSBtaW5pbWl6ZXMgdGhpcywgYnV0 IG1heSBzdGlsbAorICogaGFwcGVuIGZvciBwZXJmZWN0bHkgZGVwZW5kZW50 IGV4YW1wbGVzICh3aGVuIGFsbCB0aGUgZGltZW5zaW9ucyBoYXZlIGVxdWFs CisgKiBsZW5ndGgsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSBzZWxlY3RlZCku CisgKgorICogVE9ETyBTaG91bGQgcHJvYmFibHkgY29uc2lkZXIgc3RhdGlz dGljcyB0YXJnZXQgZm9yIHRoZSBjb2x1bW5zIChlLmcuCisgKiAgICAgIHRv IHNwbGl0IGRpbWVuc2lvbnMgd2l0aCBoaWdoZXIgc3RhdGlzdGljcyB0YXJn ZXQgbW9yZSBmcmVxdWVudGx5KS4KKyAqLworc3RhdGljIE1WQnVja2V0Citw YXJ0aXRpb25fYnVja2V0KE1WQnVja2V0IGJ1Y2tldCwgaW50MnZlY3RvciAq YXR0cnMsCisJCQkJIFZhY0F0dHJTdGF0cyAqKnN0YXRzLAorCQkJCSBpbnQg Km5kaXN0dmFsdWVzLCBEYXR1bSAqKmRpc3R2YWx1ZXMpCit7CisJaW50IGk7 CisJaW50IGRpbWVuc2lvbjsKKwlpbnQgbnVtYXR0cnMgPSBhdHRycy0+ZGlt MTsKKworCURhdHVtIHNwbGl0X3ZhbHVlOworCU1WQnVja2V0IG5ld19idWNr ZXQ7CisJSGlzdG9ncmFtQnVpbGQgbmV3X2RhdGE7CisKKwkvKiBuZWVkZWQg Zm9yIHNvcnQsIHdoZW4gbG9va2luZyBmb3IgdGhlIHNwbGl0IHZhbHVlICov CisJYm9vbCBpc051bGw7CisJaW50IG52YWx1ZXMgPSAwOworCUhpc3RvZ3Jh bUJ1aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVpbGQpYnVja2V0LT5idWlsZF9k YXRhOworCVN0ZEFuYWx5emVEYXRhICogbXlzdGF0cyA9IE5VTEw7CisJU2Nh bGFySXRlbSAqIHZhbHVlcyA9IChTY2FsYXJJdGVtKilwYWxsb2MwKGRhdGEt Pm51bXJvd3MgKiBzaXplb2YoU2NhbGFySXRlbSkpOworCVNvcnRTdXBwb3J0 RGF0YSBzc3VwOworCisJaW50IG5yb3dzID0gMTsJCS8qIG51bWJlciBvZiBy b3dzIGJlbG93IGN1cnJlbnQgdmFsdWUgKi8KKwlkb3VibGUgZGVsdGE7CisK KwkvKiBuZWVkZWQgd2hlbiBzcGxpdHRpbmcgdGhlIHZhbHVlcyAqLworCUhl YXBUdXBsZSAqIG9sZHJvd3MgPSBkYXRhLT5yb3dzOworCWludCBvbGRucm93 cyA9IGRhdGEtPm51bXJvd3M7CisKKwkvKgorCSAqIFdlIGNhbid0IHNwbGl0 IGJ1Y2tldHMgd2l0aCBhIHNpbmdsZSBkaXN0aW5jdCB2YWx1ZSAodGhpcyBh bHNvCisJICogZGlzcXVhbGlmaWVzIE5VTEwtb25seSBkaW1lbnNpb25zKS4g QWxzbywgdGhlcmUgaGFzIHRvIGJlIG11bHRpcGxlCisJICogc2FtcGxlIHJv d3MgKG90aGVyd2lzZSwgaG93IGNvdWxkIHRoZXJlIGJlIG1vcmUgZGlzdGlu Y3QgdmFsdWVzKS4KKwkgKi8KKwlBc3NlcnQoZGF0YS0+bmRpc3RpbmN0ID4g MSk7CisJQXNzZXJ0KGRhdGEtPm51bXJvd3MgPiAxKTsKKwlBc3NlcnQoKG51 bWF0dHJzID49IDIpICYmIChudW1hdHRycyA8PSBNVlNUQVRTX01BWF9ESU1F TlNJT05TKSk7CisKKwkvKiBMb29rIGZvciB0aGUgbmV4dCBkaW1lbnNpb24g dG8gc3BsaXQuICovCisJZGVsdGEgPSAwLjA7CisJZGltZW5zaW9uID0gLTE7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwl7CisJCURh dHVtICphLCAqYjsKKworCQlteXN0YXRzID0gKFN0ZEFuYWx5emVEYXRhICop IHN0YXRzW2ldLT5leHRyYV9kYXRhOworCisJCS8qIGluaXRpYWxpemUgc29y dCBzdXBwb3J0LCBldGMuICovCisJCW1lbXNldCgmc3N1cCwgMCwgc2l6ZW9m KHNzdXApKTsKKwkJc3N1cC5zc3VwX2N4dCA9IEN1cnJlbnRNZW1vcnlDb250 ZXh0OworCisJCS8qIFdlIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0 aW9uIGZvciBzdGF0aXN0aWNzICovCisJCXNzdXAuc3N1cF9jb2xsYXRpb24g PSBERUZBVUxUX0NPTExBVElPTl9PSUQ7CisJCXNzdXAuc3N1cF9udWxsc19m aXJzdCA9IGZhbHNlOworCisJCVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRl cmluZ09wKG15c3RhdHMtPmx0b3ByLCAmc3N1cCk7CisKKwkJLyogY2FuJ3Qg c3BsaXQgTlVMTC1vbmx5IGRpbWVuc2lvbiAqLworCQlpZiAoYnVja2V0LT5u dWxsc29ubHlbaV0pCisJCQljb250aW51ZTsKKworCQkvKiBjYW4ndCBzcGxp dCBkaW1lbnNpb24gd2l0aCBhIHNpbmdsZSBuZGlzdGluY3QgdmFsdWUgKi8K KwkJaWYgKGRhdGEtPm5kaXN0aW5jdHNbaV0gPD0gMSkKKwkJCWNvbnRpbnVl OworCisJCS8qIHNlYXJjaCBmb3IgbWluIGJvdW5kYXJ5IGluIHRoZSBkaXN0 aW5jdCBsaXN0ICovCisJCWEgPSAoRGF0dW0qKWJzZWFyY2hfYXJnKCZidWNr ZXQtPm1pbltpXSwKKwkJCQkJCQlkaXN0dmFsdWVzW2ldLCBuZGlzdHZhbHVl c1tpXSwKKwkJCQkJCQlzaXplb2YoRGF0dW0pLCBjb21wYXJlX3NjYWxhcnNf c2ltcGxlLCAmc3N1cCk7CisKKwkJYiA9IChEYXR1bSopYnNlYXJjaF9hcmco JmJ1Y2tldC0+bWF4W2ldLAorCQkJCQkJCWRpc3R2YWx1ZXNbaV0sIG5kaXN0 dmFsdWVzW2ldLAorCQkJCQkJCXNpemVvZihEYXR1bSksIGNvbXBhcmVfc2Nh bGFyc19zaW1wbGUsICZzc3VwKTsKKworCQkvKiBpZiB0aGlzIGRpbWVuc2lv biBpcyAnbGFyZ2VyJyB0aGVuIHBhcnRpdGlvbiBieSBpdCAqLworCQlpZiAo KChiLWEpKjEuMCAvIG5kaXN0dmFsdWVzW2ldKSA+IGRlbHRhKQorCQl7CisJ CQlkZWx0YSA9ICgoYi1hKSoxLjAgLyBuZGlzdHZhbHVlc1tpXSk7CisJCQlk aW1lbnNpb24gPSBpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZl bid0IGZvdW5kIGEgZGltZW5zaW9uIGhlcmUsIHdlJ3ZlIGRvbmUgc29tZXRo aW5nCisJICogd3JvbmcgaW4gc2VsZWN0X2J1Y2tldF90b19wYXJ0aXRpb24u CisJICovCisJQXNzZXJ0KGRpbWVuc2lvbiAhPSAtMSk7CisKKwkvKgorCSAq IFdhbGsgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgZGltZW5zaW9uLCBjb2xsZWN0 IGFuZCBzb3J0IHRoZSB2YWx1ZXMgYW5kCisJICogdGhlbiBjaG9vc2UgdGhl IHZhbHVlIHRvIHVzZSBhcyB0aGUgbmV3IGJvdW5kYXJ5LgorCSAqLworCW15 c3RhdHMgPSAoU3RkQW5hbHl6ZURhdGEgKikgc3RhdHNbZGltZW5zaW9uXS0+ ZXh0cmFfZGF0YTsKKworCS8qIGluaXRpYWxpemUgc29ydCBzdXBwb3J0LCBl dGMuICovCisJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCXNz dXAuc3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qIFdl IGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0 aWNzICovCisJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFU SU9OX09JRDsKKwlzc3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKwor CVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3RhdHMtPmx0 b3ByLCAmc3N1cCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtcm93 czsgaSsrKQorCXsKKwkJLyogcmVtZW1iZXIgdGhlIGluZGV4IG9mIHRoZSBz YW1wbGUgcm93LCB0byBtYWtlIHRoZSBwYXJ0aXRpb25pbmcgc2ltcGxlciAq LworCQl2YWx1ZXNbbnZhbHVlc10udmFsdWUgPSBoZWFwX2dldGF0dHIoZGF0 YS0+cm93c1tpXSwgYXR0cnMtPnZhbHVlc1tkaW1lbnNpb25dLAorCQkJCQkJ CQkJCQkgc3RhdHNbZGltZW5zaW9uXS0+dHVwRGVzYywgJmlzTnVsbCk7CisJ CXZhbHVlc1tudmFsdWVzXS50dXBubyA9IGk7CisKKwkJLyogbm8gTlVMTCB2 YWx1ZXMgYWxsb3dlZCBoZXJlICh3ZSBuZXZlciBzcGxpdCBudWxsLW9ubHkg ZGltZW5zaW9uKSAqLworCQlBc3NlcnQoIWlzTnVsbCk7CisKKwkJbnZhbHVl cysrOworCX0KKworCS8qIHNvcnQgdGhlIGFycmF5IG9mIHZhbHVlcyAqLwor CXFzb3J0X2FyZygodm9pZCAqKSB2YWx1ZXMsIG52YWx1ZXMsIHNpemVvZihT Y2FsYXJJdGVtKSwKKwkJCSAgY29tcGFyZV9zY2FsYXJzX3BhcnRpdGlvbiwg KHZvaWQgKikgJnNzdXApOworCisJLyoKKwkgKiBXZSBrbm93IHRoZXJlIGFy ZSBidWNrZXQtPm5kaXN0aW5jdHNbZGltZW5zaW9uXSBkaXN0aW5jdCB2YWx1 ZXMgaW4gdGhpcworCSAqIGRpbWVuc2lvbiwgYW5kIHdlIHdhbnQgdG8gc3Bs aXQgdGhpcyBpbnRvIGhhbGYsIHNvIHdhbGsgdGhyb3VnaCB0aGUKKwkgKiBh cnJheSBhbmQgc3RvcCBvbmNlIHdlIHNlZSAobmRpc3RpbmN0LzIpIHZhbHVl cy4KKwkgKgorCSAqIFdlIGFsd2F5cyBjaG9vc2UgdGhlICJuZXh0IiB2YWx1 ZSwgaS5lLiAobi8yKzEpLXRoIGRpc3RpbmN0IHZhbHVlLCBhbmQKKwkgKiB1 c2UgaXQgYXMgYW4gZXhjbHVzaXZlIHVwcGVyIGJvdW5kYXJ5IChhbmQgaW5j bHVzaXZlIGxvd2VyIGJvdW5kYXJ5KS4KKwkgKgorCSAqIFRPRE8gTWF5YmUg d2Ugc2hvdWxkIHVzZSAiYXZlcmFnZSIgb2YgdGhlIHR3byBtaWRkbGUgZGlz dGluY3QgdmFsdWVzCisJICogICAgICAoYXQgbGVhc3QgZm9yIGV2ZW4gZGlz dGluY3QgY291bnRzKSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBiZWluZwor CSAqICAgICAgYWJsZSB0byBkbyBhbiBhdmVyYWdlICh3aGljaCBkb2VzIG5v dCB3b3JrIGZvciBub24tbnVtZXJpYyB0eXBlcykuCisJICoKKwkgKiBUT0RP IEFub3RoZXIgb3B0aW9uIGlzIHRvIGxvb2sgZm9yIGEgc3BsaXQgdGhhdCdk IGdpdmUgYWJvdXQgNTAlIHR1cGxlcworCSAqICAgICAgKG5vdCBkaXN0aW5j dCB2YWx1ZXMpIGluIGVhY2ggcGFydGl0aW9uLiBUaGF0IG1pZ2h0IHdvcmsg YmV0dGVyCisJICogICAgICB3aGVuIHRoZXJlIGFyZSBhIGZldyB2ZXJ5IGZy ZXF1ZW50IHZhbHVlcywgYW5kIG1hbnkgcmFyZSBvbmVzLgorCSAqLworCWRl bHRhID0gZmFicyhkYXRhLT5udW1yb3dzKTsKKwlzcGxpdF92YWx1ZSA9IHZh bHVlc1swXS52YWx1ZTsKKworCWZvciAoaSA9IDE7IGkgPCBkYXRhLT5udW1y b3dzOyBpKyspCisJeworCQlpZiAodmFsdWVzW2ldLnZhbHVlICE9IHZhbHVl c1tpLTFdLnZhbHVlKQorCQl7CisJCQkvKiBhcmUgd2UgY2xvc2VyIHRvIHNw bGl0dGluZyB0aGUgYnVja2V0IGluIGhhbGY/ICovCisJCQlpZiAoZmFicyhp IC0gZGF0YS0+bnVtcm93cy8yLjApIDwgZGVsdGEpCisJCQl7CisJCQkJLyog bGV0J3MgYXNzdW1lIHdlJ2xsIHVzZSB0aGlzIHZhbHVlIGZvciB0aGUgc3Bs aXQgKi8KKwkJCQlzcGxpdF92YWx1ZSA9IHZhbHVlc1tpXS52YWx1ZTsKKwkJ CQlkZWx0YSA9IGZhYnMoaSAtIGRhdGEtPm51bXJvd3MvMi4wKTsKKwkJCQlu cm93cyA9IGk7CisJCQl9CisJCX0KKwl9CisKKwlBc3NlcnQobnJvd3MgPiAw KTsKKwlBc3NlcnQobnJvd3MgPCBkYXRhLT5udW1yb3dzKTsKKworCS8qIGNy ZWF0ZSB0aGUgbmV3IGJ1Y2tldCBhcyBhIChpbmNvbXBsZXRlKSBjb3B5IG9m IHRoZSBvbmUgYmVpbmcgcGFydGl0aW9uZWQuICovCisJbmV3X2J1Y2tldCA9 IGNvcHlfbXZfYnVja2V0KGJ1Y2tldCwgbnVtYXR0cnMpOworCW5ld19kYXRh ID0gKEhpc3RvZ3JhbUJ1aWxkKW5ld19idWNrZXQtPmJ1aWxkX2RhdGE7CisK KwkvKgorCSogRG8gdGhlIGFjdHVhbCBzcGxpdCBvZiB0aGUgY2hvc2VuIGRp bWVuc2lvbiwgdXNpbmcgdGhlIHNwbGl0IHZhbHVlIGFzIHRoZQorCSogdXBw ZXIgYm91bmQgZm9yIHRoZSBleGlzdGluZyBidWNrZXQsIGFuZCBsb3dlciBi b3VuZCBmb3IgdGhlIG5ldyBvbmUuCisJKi8KKwlidWNrZXQtPm1heFtkaW1l bnNpb25dICAgICA9IHNwbGl0X3ZhbHVlOworCW5ld19idWNrZXQtPm1pbltk aW1lbnNpb25dID0gc3BsaXRfdmFsdWU7CisKKwlidWNrZXQtPm1heF9pbmNs dXNpdmVbZGltZW5zaW9uXQkJPSBmYWxzZTsKKwluZXdfYnVja2V0LT5tYXhf aW5jbHVzaXZlW2RpbWVuc2lvbl0JPSB0cnVlOworCisJLyoKKwkgKiBSZWRp c3RyaWJ1dGUgdGhlIHNhbXBsZSB0dXBsZXMgdXNpbmcgdGhlICdTY2FsYXJJ dGVtLT50dXBubycgaW5kZXguIFdlCisJICoga25vdyAnbnJvd3MnIHJvd3Mg c2hvdWxkIHJlbWFpbiBpbiB0aGUgb3JpZ2luYWwgYnVja2V0IGFuZCB0aGUg cmVzdCBnb2VzCisJICogdG8gdGhlIG5ldyBvbmUuCisJICovCisKKwlkYXRh LT5yb3dzICAgICA9IChIZWFwVHVwbGUqKXBhbGxvYzAobnJvd3MgKiBzaXpl b2YoSGVhcFR1cGxlKSk7CisJbmV3X2RhdGEtPnJvd3MgPSAoSGVhcFR1cGxl KilwYWxsb2MwKChvbGRucm93cyAtIG5yb3dzKSAqIHNpemVvZihIZWFwVHVw bGUpKTsKKworCWRhdGEtPm51bXJvd3MJID0gbnJvd3M7CisJbmV3X2RhdGEt Pm51bXJvd3MgPSAob2xkbnJvd3MgLSBucm93cyk7CisKKwkvKgorCSAqIFRo ZSBmaXJzdCBucm93cyBzaG91bGQgZ28gdG8gdGhlIGZpcnN0IGJ1Y2tldCwg dGhlIHJlc3Qgc2hvdWxkIGdvIHRvIHRoZQorCSAqIG5ldyBvbmUuIFVzZSB0 aGUgdHVwbm8gZmllbGQgdG8gZ2V0IHRoZSBhY3R1YWwgSGVhcFR1cGxlIHJv dyBmcm9tIHRoZQorCSAqIG9yaWdpbmFsIGFycmF5IG9mIHNhbXBsZSByb3dz LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucm93czsgaSsrKQorCQltZW1j cHkoJmRhdGEtPnJvd3NbaV0sICZvbGRyb3dzW3ZhbHVlc1tpXS50dXBub10s IHNpemVvZihIZWFwVHVwbGUpKTsKKworCWZvciAoaSA9IG5yb3dzOyBpIDwg b2xkbnJvd3M7IGkrKykKKwkJbWVtY3B5KCZuZXdfZGF0YS0+cm93c1tpLW5y b3dzXSwgJm9sZHJvd3NbdmFsdWVzW2ldLnR1cG5vXSwgc2l6ZW9mKEhlYXBU dXBsZSkpOworCisJLyogdXBkYXRlIG5kaXN0aW5jdCB2YWx1ZXMgZm9yIHRo ZSBidWNrZXRzICh0b3RhbCBhbmQgcGVyIGRpbWVuc2lvbikgKi8KKwl1cGRh dGVfYnVja2V0X25kaXN0aW5jdChidWNrZXQsIGF0dHJzLCBzdGF0cyk7CisJ dXBkYXRlX2J1Y2tldF9uZGlzdGluY3QobmV3X2J1Y2tldCwgYXR0cnMsIHN0 YXRzKTsKKworCS8qCisJICogVE9ETyBXZSBkb24ndCBuZWVkIHRvIGRvIHRo aXMgZm9yIHRoZSBkaW1lbnNpb24gd2UgdXNlZCBmb3Igc3BsaXQsCisJICog ICAgICBiZWNhdXNlIHdlIGtub3cgaG93IG1hbnkgZGlzdGluY3QgdmFsdWVz IHdlbnQgdG8gZWFjaCBwYXJ0aXRpb24uCisJICovCisJZm9yIChpID0gMDsg aSA8IG51bWF0dHJzOyBpKyspCisJeworCQl1cGRhdGVfZGltZW5zaW9uX25k aXN0aW5jdChidWNrZXQsIGksIGF0dHJzLCBzdGF0cywgZmFsc2UpOworCQl1 cGRhdGVfZGltZW5zaW9uX25kaXN0aW5jdChuZXdfYnVja2V0LCBpLCBhdHRy cywgc3RhdHMsIGZhbHNlKTsKKwl9CisKKwlwZnJlZShvbGRyb3dzKTsKKwlw ZnJlZSh2YWx1ZXMpOworCisJcmV0dXJuIG5ld19idWNrZXQ7Cit9CisKKy8q CisgKiBDb3B5IGEgaGlzdG9ncmFtIGJ1Y2tldC4gVGhlIGNvcHkgZG9lcyBu b3QgaW5jbHVkZSB0aGUgYnVpbGQtdGltZSBkYXRhLCBpLmUuCisgKiBzYW1w bGVkIHJvd3MgZXRjLgorICovCitzdGF0aWMgTVZCdWNrZXQKK2NvcHlfbXZf YnVja2V0KE1WQnVja2V0IGJ1Y2tldCwgdWludDMyIG5kaW1lbnNpb25zKQor eworCS8qIFRPRE8gYWxsb2NhdGUgYXMgYSBzaW5nbGUgcGllY2UgKGluY2x1 ZGluZyBhbGwgdGhlIGZpZWxkcykgKi8KKwlNVkJ1Y2tldCBuZXdfYnVja2V0 ID0gKE1WQnVja2V0KXBhbGxvYzAoc2l6ZW9mKE1WQnVja2V0RGF0YSkpOwor CUhpc3RvZ3JhbUJ1aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVpbGQpcGFsbG9j MChzaXplb2YoSGlzdG9ncmFtQnVpbGREYXRhKSk7CisKKwkvKiBDb3B5IG9u bHkgdGhlIGF0dHJpYnV0ZXMgdGhhdCB3aWxsIHN0YXkgdGhlIHNhbWUgYWZ0 ZXIgdGhlIHNwbGl0LCBhbmQKKwkgKiB3ZSdsbCByZWNvbXB1dGUgdGhlIHJl c3QgYWZ0ZXIgdGhlIHNwbGl0LiAqLworCisJLyogYWxsb2NhdGUgdGhlIHBl ci1kaW1lbnNpb24gYXJyYXlzICovCisJbmV3X2J1Y2tldC0+bnVsbHNvbmx5 ID0gKGJvb2wqKXBhbGxvYzAobmRpbWVuc2lvbnMgKiBzaXplb2YoYm9vbCkp OworCisJLyogaW5jbHVzaXZlbmVzcyBib3VuZGFyaWVzIC0gbG93ZXIvdXBw ZXIgYm91bmRzICovCisJbmV3X2J1Y2tldC0+bWluX2luY2x1c2l2ZSA9IChi b29sKilwYWxsb2MwKG5kaW1lbnNpb25zICogc2l6ZW9mKGJvb2wpKTsKKwlu ZXdfYnVja2V0LT5tYXhfaW5jbHVzaXZlID0gKGJvb2wqKXBhbGxvYzAobmRp bWVuc2lvbnMgKiBzaXplb2YoYm9vbCkpOworCisJLyogbG93ZXIvdXBwZXIg Ym91bmRhcmllcyAqLworCW5ld19idWNrZXQtPm1pbiA9IChEYXR1bSopcGFs bG9jMChuZGltZW5zaW9ucyAqIHNpemVvZihEYXR1bSkpOworCW5ld19idWNr ZXQtPm1heCA9IChEYXR1bSopcGFsbG9jMChuZGltZW5zaW9ucyAqIHNpemVv ZihEYXR1bSkpOworCisJLyogY29weSBkYXRhICovCisJbWVtY3B5KG5ld19i dWNrZXQtPm51bGxzb25seSwgYnVja2V0LT5udWxsc29ubHksIG5kaW1lbnNp b25zICogc2l6ZW9mKGJvb2wpKTsKKworCW1lbWNweShuZXdfYnVja2V0LT5t aW5faW5jbHVzaXZlLCBidWNrZXQtPm1pbl9pbmNsdXNpdmUsIG5kaW1lbnNp b25zKnNpemVvZihib29sKSk7CisJbWVtY3B5KG5ld19idWNrZXQtPm1pbiwg YnVja2V0LT5taW4sIG5kaW1lbnNpb25zKnNpemVvZihEYXR1bSkpOworCisJ bWVtY3B5KG5ld19idWNrZXQtPm1heF9pbmNsdXNpdmUsIGJ1Y2tldC0+bWF4 X2luY2x1c2l2ZSwgbmRpbWVuc2lvbnMqc2l6ZW9mKGJvb2wpKTsKKwltZW1j cHkobmV3X2J1Y2tldC0+bWF4LCBidWNrZXQtPm1heCwgbmRpbWVuc2lvbnMq c2l6ZW9mKERhdHVtKSk7CisKKwkvKiBhbGxvY2F0ZSBhbmQgY29weSB0aGUg aW50ZXJlc3RpbmcgcGFydCBvZiB0aGUgYnVpbGQgZGF0YSAqLworCWRhdGEt Pm5kaXN0aW5jdHMgPSAodWludDMyKilwYWxsb2MwKG5kaW1lbnNpb25zICog c2l6ZW9mKHVpbnQzMikpOworCisJbmV3X2J1Y2tldC0+YnVpbGRfZGF0YSA9 IGRhdGE7CisKKwlyZXR1cm4gbmV3X2J1Y2tldDsKK30KKworLyoKKyAqIENv dW50cyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBpbiB0aGUgYnVj a2V0LiBUaGlzIGp1c3QgY29waWVzIHRoZQorICogRGF0dW0gdmFsdWVzIGlu dG8gYSBzaW1wbGUgYXJyYXksIGFuZCBzb3J0cyB0aGVtIHVzaW5nIG1lbWNt cC1iYXNlZAorICogY29tcGFyYXRvci4gVGhhdCBtZWFucyBpdCBvbmx5IHdv cmtzIGZvciBwYXNzLWJ5LXZhbHVlIGRhdGEgdHlwZXMgKGFzc3VtaW5nCisg KiB0aGV5IGRvbid0IHVzZSBjb2xsYXRpb25zIGV0Yy4pCisgKi8KK3N0YXRp YyB2b2lkCit1cGRhdGVfYnVja2V0X25kaXN0aW5jdChNVkJ1Y2tldCBidWNr ZXQsIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKiogc3RhdHMp Cit7CisJaW50IGksIGo7CisJaW50IG51bWF0dHJzID0gYXR0cnMtPmRpbTE7 CisKKwlIaXN0b2dyYW1CdWlsZCBkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1 Y2tldC0+YnVpbGRfZGF0YTsKKwlpbnQgbnVtcm93cyA9IGRhdGEtPm51bXJv d3M7CisKKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRpX3NvcnRfaW5p dChudW1hdHRycyk7CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbGxlY3QgdGhp cyB3aGlsZSB3YWxraW5nIHRocm91Z2ggYWxsIHRoZSBhdHRyaWJ1dGVzIGFi b3ZlCisJICogKHRoaXMgd2F5IHdlIGhhdmUgdG8gY2FsbCBoZWFwX2dldGF0 dHIgdHdpY2UpLgorCSAqLworCVNvcnRJdGVtICAgKml0ZW1zICA9IChTb3J0 SXRlbSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVtKSk7CisJ RGF0dW0JICAgKnZhbHVlcyA9IChEYXR1bSopcGFsbG9jMChudW1yb3dzICog c2l6ZW9mKERhdHVtKSAqIG51bWF0dHJzKTsKKwlib29sCSAgICppc251bGwg PSAoYm9vbCopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKGJvb2wpICogbnVt YXR0cnMpOworCisJZm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7 CisJCWl0ZW1zW2ldLnZhbHVlcyA9ICZ2YWx1ZXNbaSAqIG51bWF0dHJzXTsK KwkJaXRlbXNbaV0uaXNudWxsID0gJmlzbnVsbFtpICogbnVtYXR0cnNdOwor CX0KKworCS8qIHByZXBhcmUgdGhlIHNvcnQgZnVuY3Rpb24gZm9yIHRoZSBm aXJzdCBkaW1lbnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7 IGkrKykKKwkJbXVsdGlfc29ydF9hZGRfZGltZW5zaW9uKG1zcywgaSwgaSwg c3RhdHMpOworCisJLyogY29sbGVjdCB0aGUgdmFsdWVzICovCisJZm9yIChp ID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG51 bWF0dHJzOyBqKyspCisJCQlpdGVtc1tpXS52YWx1ZXNbal0KKwkJCQk9IGhl YXBfZ2V0YXR0cihkYXRhLT5yb3dzW2ldLCBhdHRycy0+dmFsdWVzW2pdLAor CQkJCQkJCQlzdGF0c1tqXS0+dHVwRGVzYywgJml0ZW1zW2ldLmlzbnVsbFtq XSk7CisKKwlxc29ydF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJvd3MsIHNp emVvZihTb3J0SXRlbSksCisJCQkgIG11bHRpX3NvcnRfY29tcGFyZSwgbXNz KTsKKworCWRhdGEtPm5kaXN0aW5jdCA9IDE7CisKKwlmb3IgKGkgPSAxOyBp IDwgbnVtcm93czsgaSsrKQorCQlpZiAobXVsdGlfc29ydF9jb21wYXJlKCZp dGVtc1tpXSwgJml0ZW1zW2ktMV0sIG1zcykgIT0gMCkKKwkJCWRhdGEtPm5k aXN0aW5jdCArPSAxOworCisJcGZyZWUoaXRlbXMpOworCXBmcmVlKHZhbHVl cyk7CisJcGZyZWUoaXNudWxsKTsKK30KKworLyoKKyAqIENvdW50IGRpc3Rp bmN0IHZhbHVlcyBwZXIgYnVja2V0IGRpbWVuc2lvbi4KKyAqLworc3RhdGlj IHZvaWQKK3VwZGF0ZV9kaW1lbnNpb25fbmRpc3RpbmN0KE1WQnVja2V0IGJ1 Y2tldCwgaW50IGRpbWVuc2lvbiwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJ CQkgICBWYWNBdHRyU3RhdHMgKiogc3RhdHMsIGJvb2wgdXBkYXRlX2JvdW5k YXJpZXMpCit7CisJaW50IGo7CisJaW50IG52YWx1ZXMgPSAwOworCWJvb2wg aXNOdWxsOworCUhpc3RvZ3JhbUJ1aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVp bGQpYnVja2V0LT5idWlsZF9kYXRhOworCURhdHVtICogdmFsdWVzID0gKERh dHVtKilwYWxsb2MwKGRhdGEtPm51bXJvd3MgKiBzaXplb2YoRGF0dW0pKTsK KwlTb3J0U3VwcG9ydERhdGEgc3N1cDsKKworCVN0ZEFuYWx5emVEYXRhICog bXlzdGF0cyA9IChTdGRBbmFseXplRGF0YSAqKSBzdGF0c1tkaW1lbnNpb25d LT5leHRyYV9kYXRhOworCisJLyogd2UgbWF5IGFscmVhZHkga25vdyB0aGlz IGlzIGEgTlVMTC1vbmx5IGRpbWVuc2lvbiAqLworCWlmIChidWNrZXQtPm51 bGxzb25seVtkaW1lbnNpb25dKQorCQlkYXRhLT5uZGlzdGluY3RzW2RpbWVu c2lvbl0gPSAxOworCisJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkp OworCXNzdXAuc3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwor CS8qIFdlIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBz dGF0aXN0aWNzICovCisJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRf Q09MTEFUSU9OX09JRDsKKwlzc3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxz ZTsKKworCVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3Rh dHMtPmx0b3ByLCAmc3N1cCk7CisKKwlmb3IgKGogPSAwOyBqIDwgZGF0YS0+ bnVtcm93czsgaisrKQorCXsKKwkJdmFsdWVzW252YWx1ZXNdID0gaGVhcF9n ZXRhdHRyKGRhdGEtPnJvd3Nbal0sIGF0dHJzLT52YWx1ZXNbZGltZW5zaW9u XSwKKwkJCQkJCQkJCSAgIHN0YXRzW2RpbWVuc2lvbl0tPnR1cERlc2MsICZp c051bGwpOworCisJCS8qIGlnbm9yZSBOVUxMIHZhbHVlcyAqLworCQlpZiAo ISBpc051bGwpCisJCQludmFsdWVzKys7CisJfQorCisJLyogdGhlcmUncyBh bHdheXMgYXQgbGVhc3QgMSBkaXN0aW5jdCB2YWx1ZSAobWF5IGJlIE5VTEwp ICovCisJZGF0YS0+bmRpc3RpbmN0c1tkaW1lbnNpb25dID0gMTsKKworCS8q IGlmIHRoZXJlIGFyZSBvbmx5IE5VTEwgdmFsdWVzIGluIHRoZSBjb2x1bW4s IG1hcmsgaXQgc28gYW5kIGNvbnRpbnVlCisJICogd2l0aCB0aGUgbmV4dCBv bmUgKi8KKwlpZiAobnZhbHVlcyA9PSAwKQorCXsKKwkJcGZyZWUodmFsdWVz KTsKKwkJYnVja2V0LT5udWxsc29ubHlbZGltZW5zaW9uXSA9IHRydWU7CisJ CXJldHVybjsKKwl9CisKKwkvKiBzb3J0IHRoZSBhcnJheSAocGFzcy1ieS12 YWx1ZSBkYXR1bSAqLworCXFzb3J0X2FyZygodm9pZCAqKSB2YWx1ZXMsIG52 YWx1ZXMsIHNpemVvZihEYXR1bSksCisJCQkgIGNvbXBhcmVfc2NhbGFyc19z aW1wbGUsICh2b2lkICopICZzc3VwKTsKKworCS8qCisJICogVXBkYXRlIG1p bi9tYXggYm91bmRhcmllcyB0byB0aGUgc21hbGxlc3QgYm91bmRpbmcgYm94 LiBHZW5lcmFsbHksIHRoaXMKKwkgKiBuZWVkcyB0byBiZSBkb25lIG9ubHkg d2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGluaXRpYWwgYnVja2V0LgorCSAqLwor CWlmICh1cGRhdGVfYm91bmRhcmllcykKKwl7CisJCS8qIHN0b3JlIHRoZSBt aW4vbWF4IHZhbHVlcyAqLworCQlidWNrZXQtPm1pbltkaW1lbnNpb25dID0g dmFsdWVzWzBdOworCQlidWNrZXQtPm1pbl9pbmNsdXNpdmVbZGltZW5zaW9u XSA9IHRydWU7CisKKwkJYnVja2V0LT5tYXhbZGltZW5zaW9uXSA9IHZhbHVl c1tudmFsdWVzLTFdOworCQlidWNrZXQtPm1heF9pbmNsdXNpdmVbZGltZW5z aW9uXSA9IHRydWU7CisJfQorCisJLyoKKwkgKiBXYWxrIHRocm91Z2ggdGhl IGFycmF5IGFuZCBjb3VudCBkaXN0aW5jdCB2YWx1ZXMgYnkgY29tcGFyaW5n CisJICogc3VjY2VlZGluZyB2YWx1ZXMuCisJICoKKwkgKiBGSVhNRSBUaGlz IG9ubHkgd29ya3MgZm9yIHBhc3MtYnktdmFsdWUgdHlwZXMgKGkuZS4gbm90 IFZBUkNIQVJzCisJICogICAgICAgZXRjLikuIEFsdGhvdWdoIHRoYW5rcyB0 byB0aGUgZGVkdXBsaWNhdGlvbiBpdCBtaWdodCB3b3JrCisJICogICAgICAg ZXZlbiBmb3IgdGhvc2UgdHlwZXMgKGVxdWFsIHZhbHVlcyB3aWxsIGdldCB0 aGUgc2FtZSBpdGVtCisJICogICAgICAgaW4gdGhlIGRlZHVwbGljYXRlZCBh cnJheSkuCisJICovCisJZm9yIChqID0gMTsgaiA8IG52YWx1ZXM7IGorKykg eworCQlpZiAodmFsdWVzW2pdICE9IHZhbHVlc1tqLTFdKQorCQkJZGF0YS0+ bmRpc3RpbmN0c1tkaW1lbnNpb25dICs9IDE7CisJfQorCisJcGZyZWUodmFs dWVzKTsKK30KKworLyoKKyAqIEEgcHJvcGVybHkgYnVpbHQgaGlzdG9ncmFt IG11c3Qgbm90IGNvbnRhaW4gYnVja2V0cyBtaXhpbmcgTlVMTCBhbmQgbm9u LU5VTEwKKyAqIHZhbHVlcyBpbiBhIHNpbmdsZSBkaW1lbnNpb24uIEVhY2gg ZGltZW5zaW9uIG1heSBlaXRoZXIgYmUgbWFya2VkIGFzICdudWxscworICog b25seScsIGFuZCB0aHVzIGNvbnRhaW5pbmcgb25seSBOVUxMIHZhbHVlcywg b3IgaXQgbXVzdCBub3QgY29udGFpbiBhbnkgTlVMTAorICogdmFsdWVzLgor ICoKKyAqIFRoZXJlZm9yZSwgaWYgdGhlIHNhbXBsZSBjb250YWlucyBOVUxM IHZhbHVlcyBpbiBhbnkgb2YgdGhlIGNvbHVtbnMsIGl0J3MKKyAqIG5lY2Vz c2FyeSB0byBidWlsZCB0aG9zZSBOVUxMLWJ1Y2tldHMuIFRoaXMgaXMgZG9u ZSBpbiBhbiBpdGVyYXRpdmUgd2F5CisgKiB1c2luZyB0aGlzIGFsZ29yaXRo bSwgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGJ1Y2tldDoKKyAqCisgKiAgICAg KDEpIENoZWNrIHRoYXQgYWxsIGRpbWVuc2lvbnMgYXJlIHdlbGwtZm9ybWVk IChub3QgbWl4aW5nIE5VTEwgYW5kCisgKiAgICAgICAgIG5vbi1OVUxMIHZh bHVlcykuCisgKgorICogICAgICgyKSBJZiBhbGwgZGltZW5zaW9ucyBhcmUg d2VsbC1mb3JtZWQsIHRlcm1pbmF0ZS4KKyAqCisgKiAgICAgKDMpIElmIHRo ZSBkaW1lbnNpb24gY29udGFpbnMgb25seSBOVUxMIHZhbHVlcywgYnV0IGlz IG5vdCBtYXJrZWQgYXMKKyAqICAgICAgICAgTlVMTC1vbmx5LCBtYXJrIGl0 IGFzIE5VTEwtb25seSBhbmQgcnVuIHRoZSBhbGdvcml0aG0gYWdhaW4gKG9u CisgKiAgICAgICAgIHRoaXMgYnVja2V0KS4KKyAqCisgKiAgICAgKDQpIElm IHRoZSBkaW1lbnNpb24gbWl4ZXMgTlVMTCBhbmQgbm9uLU5VTEwgdmFsdWVz LCBzcGxpdCB0aGUgYnVja2V0CisgKiAgICAgICAgIGludG8gdHdvIHBhcnRz IC0gb25lIHdpdGggTlVMTCB2YWx1ZXMsIG9uZSB3aXRoIG5vbi1OVUxMIHZh bHVlcworICogICAgICAgICAocmVwbGFjaW5nIHRoZSBjdXJyZW50IG9uZSku IFRoZW4gcnVuIHRoZSBhbGdvcml0aG0gb24gYm90aCBidWNrZXRzLgorICoK KyAqIFRoaXMgaXMgZXhlY3V0ZWQgaW4gYSByZWN1cnNpdmUgbWFubmVyLCBi dXQgdGhlIG51bWJlciBvZiBleGVjdXRpb25zIHNob3VsZAorICogYmUgcXVp dGUgbG93IC0gbGltaXRlZCBieSB0aGUgbnVtYmVyIG9mIE5VTEwtYnVja2V0 cy4gQWxzbywgaW4gZWFjaCBicmFuY2gKKyAqIHRoZSBudW1iZXIgb2YgbmVz dGVkIGNhbGxzIGlzIGxpbWl0ZWQgYnkgdGhlIG51bWJlciBvZiBkaW1lbnNp b25zCisgKiAoYXR0cmlidXRlcykgb2YgdGhlIGhpc3RvZ3JhbS4KKyAqCisg KiBBdCB0aGUgZW5kLCB0aGVyZSBzaG91bGQgYmUgYnVja2V0cyB3aXRoIG5v IG1peGVkIGRpbWVuc2lvbnMuIFRoZSBudW1iZXIgb2YKKyAqIGJ1Y2tldHMg cHJvZHVjZWQgYnkgdGhpcyBhbGdvcml0aG0gaXMgcmF0aGVyIGxpbWl0ZWQg LSB3aXRoIE4gZGltZW5zaW9ucywKKyAqIHRoZXJlIG1heSBiZSBvbmx5IDJe TiBzdWNoIGJ1Y2tldHMgKGVhY2ggZGltZW5zaW9uIG1heSBiZSBlaXRoZXIg TlVMTCBvcgorICogbm9uLU5VTEwpLiBTbyB3aXRoIDggZGltZW5zaW9ucyAo Y3VycmVudCB2YWx1ZSBvZiBNVlNUQVRTX01BWF9ESU1FTlNJT05TKQorICog dGhlcmUgbWF5IGJlIG9ubHkgMjU2IHN1Y2ggYnVja2V0cy4KKyAqCisgKiBB ZnRlciB0aGlzLCBhICdyZWd1bGFyJyBidWNrZXQtc3BsaXQgYWxnb3JpdGht IHNoYWxsIHJ1biwgZnVydGhlciBvcHRpbWl6aW5nCisgKiB0aGUgaGlzdG9n cmFtLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX251bGxfYnVja2V0cyhN Vkhpc3RvZ3JhbSBoaXN0b2dyYW0sIGludCBidWNrZXRfaWR4LAorCQkJCQlp bnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqIHN0YXRzKQorewor CWludAkJCWksIGo7CisJaW50CQkJbnVsbF9kaW0gPSAtMTsKKwlpbnQJCQlu dWxsX2NvdW50ID0gMDsKKwlib29sCQludWxsX2ZvdW5kID0gZmFsc2U7CisJ TVZCdWNrZXQJYnVja2V0LCBudWxsX2J1Y2tldDsKKwlpbnQJCQludWxsX2lk eCwgY3Vycl9pZHg7CisJSGlzdG9ncmFtQnVpbGQJZGF0YSwgbnVsbF9kYXRh OworCisJLyogcmVtZW1iZXIgb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGJ1 Y2tldCAqLworCWludAkJCW51bXJvd3M7CisJSGVhcFR1cGxlICAqb2xkcm93 cyA9IE5VTEw7CisKKwlBc3NlcnQoYnVja2V0X2lkeCA8IGhpc3RvZ3JhbS0+ bmJ1Y2tldHMpOworCUFzc2VydChoaXN0b2dyYW0tPm5kaW1lbnNpb25zID09 IGF0dHJzLT5kaW0xKTsKKworCWJ1Y2tldCA9IGhpc3RvZ3JhbS0+YnVja2V0 c1tidWNrZXRfaWR4XTsKKwlkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1Y2tl dC0+YnVpbGRfZGF0YTsKKworCW51bXJvd3MgPSBkYXRhLT5udW1yb3dzOwor CW9sZHJvd3MgPSBkYXRhLT5yb3dzOworCisJLyoKKwkgKiBXYWxrIHRocm91 Z2ggYWxsIHJvd3MgLyBkaW1lbnNpb25zLCBhbmQgc3RvcCBvbmNlIHdlIGZp bmQgTlVMTCBpbiBhCisJICogZGltZW5zaW9uIG5vdCB5ZXQgbWFya2VkIGFz IE5VTEwtb25seS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVt cm93czsgaSsrKQorCXsKKwkJLyoKKwkJICogRklYTUUgV2UgZG9uJ3QgbmVl ZCB0byBzdGFydCBmcm9tIHRoZSBmaXJzdCBhdHRyaWJ1dGUgaGVyZSAtIHdl IGNhbgorCQkgKiAgICAgICBzdGFydCBmcm9tIHRoZSBsYXN0IGtub3duIGRp bWVuc2lvbi4KKwkJICovCisJCWZvciAoaiA9IDA7IGogPCBoaXN0b2dyYW0t Pm5kaW1lbnNpb25zOyBqKyspCisJCXsKKwkJCS8qIElzIHRoaXMgYSBOVUxM LW9ubHkgZGltZW5zaW9uPyBJZiB5ZXMsIHNraXAuICovCisJCQlpZiAoYnVj a2V0LT5udWxsc29ubHlbal0pCisJCQkJY29udGludWU7CisKKwkJCS8qIGZv dW5kIGEgTlVMTCBpbiB0aGF0IGRpbWVuc2lvbj8gKi8KKwkJCWlmIChoZWFw X2F0dGlzbnVsbChkYXRhLT5yb3dzW2ldLCBhdHRycy0+dmFsdWVzW2pdKSkK KwkJCXsKKwkJCQludWxsX2ZvdW5kID0gdHJ1ZTsKKwkJCQludWxsX2RpbSA9 IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiB0ZXJtaW5hdGUg aWYgd2UgZm91bmQgYXR0cmlidXRlIHdpdGggTlVMTCB2YWx1ZXMgKi8KKwkJ aWYgKG51bGxfZm91bmQpCisJCQlicmVhazsKKwl9CisKKwkvKiBubyByZWd1 bGFyIGRpbWVuc2lvbiBjb250YWlucyBOVUxMIHZhbHVlcyA9PiB3ZSdyZSBk b25lICovCisJaWYgKCEgbnVsbF9mb3VuZCkKKwkJcmV0dXJuOworCisJLyog d2FsayB0aHJvdWdoIHRoZSByb3dzIGFnYWluLCBjb3VudCBOVUxMIHZhbHVl cyBpbiAnbnVsbF9kaW0nICovCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51 bXJvd3M7IGkrKykKKwl7CisJCWlmIChoZWFwX2F0dGlzbnVsbChkYXRhLT5y b3dzW2ldLCBhdHRycy0+dmFsdWVzW251bGxfZGltXSkpCisJCQludWxsX2Nv dW50ICs9IDE7CisJfQorCisJQXNzZXJ0KG51bGxfY291bnQgPD0gZGF0YS0+ bnVtcm93cyk7CisKKwkvKgorCSAqIElmIChudWxsX2NvdW50ID09IG51bXJv d3MpIHRoZSBkaW1lbnNpb24gYWxyZWFkeSBpcyBOVUxMLW9ubHksIGJ1dCBp cworCSAqIG5vdCB5ZXQgbWFya2VkIGxpa2UgdGhhdC4gSXQncyBlbm91Z2gg dG8gbWFyayBpdCBhbmQgcmVwZWF0IHRoZSBwcm9jZXNzCisJICogcmVjdXJz aXZlbHkgKHVudGlsIHdlIHJ1biBvdXQgb2YgZGltZW5zaW9ucykuCisJICov CisJaWYgKG51bGxfY291bnQgPT0gZGF0YS0+bnVtcm93cykKKwl7CisJCWJ1 Y2tldC0+bnVsbHNvbmx5W251bGxfZGltXSA9IHRydWU7CisJCWNyZWF0ZV9u dWxsX2J1Y2tldHMoaGlzdG9ncmFtLCBidWNrZXRfaWR4LCBhdHRycywgc3Rh dHMpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNw bGl0IHRoZSBidWNrZXQgaW50byB0d28gLSBvbmUgd2l0aCBOVUxMIHZhbHVl cyBpbiB0aGUKKwkgKiBkaW1lbnNpb24sIG9uZSB3aXRoIG5vbi1OVUxMIHZh bHVlcy4gV2UgZG9uJ3QgbmVlZCB0byBzb3J0IHRoZSBkYXRhIG9yCisJICog YW55dGhpbmcsIGJ1dCBvdGhlcndpc2UgaXQncyBzaW1pbGFyIHRvIHdoYXQg cGFydGl0aW9uX2J1Y2tldCgpIGRvZXMuCisJICovCisKKwkvKiBjcmVhdGUg YnVja2V0IHdpdGggTlVMTC1vbmx5IGRpbWVuc2lvbiAnZGltJyAqLworCW51 bGxfYnVja2V0ID0gY29weV9tdl9idWNrZXQoYnVja2V0LCBoaXN0b2dyYW0t Pm5kaW1lbnNpb25zKTsKKwludWxsX2RhdGEgPSAoSGlzdG9ncmFtQnVpbGQp bnVsbF9idWNrZXQtPmJ1aWxkX2RhdGE7CisKKwkvKiByZW1lbWJlciB0aGUg Y3VycmVudCBhcnJheSBpbmZvICovCisJb2xkcm93cyA9IGRhdGEtPnJvd3M7 CisJbnVtcm93cyA9IGRhdGEtPm51bXJvd3M7CisKKwkvKiB3ZSdsbCBrZWVw IG5vbi1OVUxMIHZhbHVlcyBpbiB0aGUgY3VycmVudCBidWNrZXQgKi8KKwlk YXRhLT5udW1yb3dzID0gKG51bXJvd3MgLSBudWxsX2NvdW50KTsKKwlkYXRh LT5yb3dzCisJCT0gKEhlYXBUdXBsZSopcGFsbG9jMChkYXRhLT5udW1yb3dz ICogc2l6ZW9mKEhlYXBUdXBsZSkpOworCisJLyogYW5kIHRoZSBOVUxMIHZh bHVlcyB3aWxsIGdvIHRvIHRoZSBuZXcgb25lICovCisJbnVsbF9kYXRhLT5u dW1yb3dzID0gbnVsbF9jb3VudDsKKwludWxsX2RhdGEtPnJvd3MKKwkJPSAo SGVhcFR1cGxlKilwYWxsb2MwKG51bGxfZGF0YS0+bnVtcm93cyAqIHNpemVv ZihIZWFwVHVwbGUpKTsKKworCS8qIG1hcmsgdGhlIGRpbWVuc2lvbiBhcyBO VUxMLW9ubHkgKGluIHRoZSBuZXcgYnVja2V0KSAqLworCW51bGxfYnVja2V0 LT5udWxsc29ubHlbbnVsbF9kaW1dID0gdHJ1ZTsKKworCS8qIHdhbGsgdGhy b3VnaCB0aGUgc2FtcGxlIHJvd3MgYW5kIGRpc3RyaWJ1dGUgdGhlbSBhY2Nv cmRpbmdseSAqLworCW51bGxfaWR4ID0gMDsKKwljdXJyX2lkeCA9IDA7CisJ Zm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7CisJCWlmIChoZWFw X2F0dGlzbnVsbChvbGRyb3dzW2ldLCBhdHRycy0+dmFsdWVzW251bGxfZGlt XSkpCisJCQkvKiBOVUxMID0+IGNvcHkgdG8gdGhlIG5ldyBidWNrZXQgKi8K KwkJCW1lbWNweSgmbnVsbF9kYXRhLT5yb3dzW251bGxfaWR4KytdLCAmb2xk cm93c1tpXSwKKwkJCQkJc2l6ZW9mKEhlYXBUdXBsZSkpOworCQllbHNlCisJ CQltZW1jcHkoJmRhdGEtPnJvd3NbY3Vycl9pZHgrK10sICZvbGRyb3dzW2ld LAorCQkJCQlzaXplb2YoSGVhcFR1cGxlKSk7CisJfQorCisJLyogdXBkYXRl IG5kaXN0aW5jdCB2YWx1ZXMgZm9yIHRoZSBidWNrZXRzICh0b3RhbCBhbmQg cGVyIGRpbWVuc2lvbikgKi8KKwl1cGRhdGVfYnVja2V0X25kaXN0aW5jdChi dWNrZXQsIGF0dHJzLCBzdGF0cyk7CisJdXBkYXRlX2J1Y2tldF9uZGlzdGlu Y3QobnVsbF9idWNrZXQsIGF0dHJzLCBzdGF0cyk7CisKKwkvKgorCSAqIFRP RE8gV2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzIGZvciB0aGUgZGltZW5zaW9u IHdlIHVzZWQgZm9yIHNwbGl0LAorCSAqICAgICAgYmVjYXVzZSB3ZSBrbm93 IGhvdyBtYW55IGRpc3RpbmN0IHZhbHVlcyB3ZW50IHRvIGVhY2ggYnVja2V0 IChOVUxMCisJICogICAgICBpcyBub3QgYSB2YWx1ZSwgc28gTlVMTCBidWNr ZXRzIGdldCAwLCBhbmQgdGhlIG90aGVyIGJ1Y2tldCBnb3QgYWxsCisJICog ICAgICB0aGUgZGlzdGluY3QgdmFsdWVzKS4KKwkgKi8KKwlmb3IgKGkgPSAw OyBpIDwgaGlzdG9ncmFtLT5uZGltZW5zaW9uczsgaSsrKQorCXsKKwkJdXBk YXRlX2RpbWVuc2lvbl9uZGlzdGluY3QoYnVja2V0LCBpLCBhdHRycywgc3Rh dHMsIGZhbHNlKTsKKwkJdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3QobnVs bF9idWNrZXQsIGksIGF0dHJzLCBzdGF0cywgZmFsc2UpOworCX0KKworCXBm cmVlKG9sZHJvd3MpOworCisJLyogYWRkIHRoZSBOVUxMIGJ1Y2tldCB0byB0 aGUgaGlzdG9ncmFtICovCisJaGlzdG9ncmFtLT5idWNrZXRzW2hpc3RvZ3Jh bS0+bmJ1Y2tldHMrK10gPSBudWxsX2J1Y2tldDsKKworCS8qCisJICogQW5k IG5vdyBydW4gdGhlIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IG9uIGJvdGggYnVj a2V0cyAodGhlIG5ldworCSAqIG9uZSBmaXJzdCwgYmVjYXVzZSB0aGUgY2Fs bCBtYXkgY2hhbmdlIG51bWJlciBvZiBidWNrZXRzLCBhbmQKKwkgKiBpdCdz IHVzZWQgYXMgYW4gaW5kZXgpLgorCSAqLworCWNyZWF0ZV9udWxsX2J1Y2tl dHMoaGlzdG9ncmFtLCAoaGlzdG9ncmFtLT5uYnVja2V0cy0xKSwgYXR0cnMs IHN0YXRzKTsKKwljcmVhdGVfbnVsbF9idWNrZXRzKGhpc3RvZ3JhbSwgYnVj a2V0X2lkeCwgYXR0cnMsIHN0YXRzKTsKK30KKworLyoKKyAqIFNSRiB3aXRo IGRldGFpbHMgYWJvdXQgYnVja2V0cyBvZiBhIGhpc3RvZ3JhbToKKyAqCisg KiAtIGJ1Y2tldCBJRCAoMC4uLm5idWNrZXRzKQorICogLSBtaW4gdmFsdWVz IChzdHJpbmcgYXJyYXkpCisgKiAtIG1heCB2YWx1ZXMgKHN0cmluZyBhcnJh eSkKKyAqIC0gbnVsbHMgb25seSAoYm9vbGVhbiBhcnJheSkKKyAqIC0gbWlu IGluY2x1c2l2ZSBmbGFncyAoYm9vbGVhbiBhcnJheSkKKyAqIC0gbWF4IGlu Y2x1c2l2ZSBmbGFncyAoYm9vbGVhbiBhcnJheSkKKyAqIC0gZnJlcXVlbmN5 IChkb3VibGUgcHJlY2lzaW9uKQorICoKKyAqIFRoZSBpbnB1dCBpcyB0aGUg T0lEIG9mIHRoZSBzdGF0aXN0aWNzLCBhbmQgdGhlcmUgYXJlIG5vIHJvd3Mg cmV0dXJuZWQgaWYgdGhlCisgKiBzdGF0aXN0aWNzIGNvbnRhaW5zIG5vIGhp c3RvZ3JhbSAob3IgaWYgdGhlcmUncyBubyBzdGF0aXN0aWNzIGZvciB0aGUg T0lEKS4KKyAqCisgKiBUaGUgc2Vjb25kIHBhcmFtZXRlciAodHlwZSkgZGV0 ZXJtaW5lcyB3aGF0IHZhbHVlcyB3aWxsIGJlIHJldHVybmVkCisgKiBpbiB0 aGUgKG1pbnZhbHMsbWF4dmFscykuIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJs ZSB2YWx1ZXM6CisgKiAKKyAqIDAgKGFjdHVhbCB2YWx1ZXMpCisgKiAtLS0t LS0tLS0tLS0tLS0tLQorICogICAgLSBwcmludHMgYWN0dWFsIHZhbHVlcwor ICogICAgLSB1c2luZyB0aGUgb3V0cHV0IGZ1bmN0aW9uIG9mIHRoZSBkYXRh IHR5cGUgKGFzIHN0cmluZykKKyAqICAgIC0gaGFuZHkgZm9yIGludmVzdGln YXRpbmcgdGhlIGhpc3RvZ3JhbQorICoKKyAqIDEgKGRpc3RpbmN0IGluZGV4 KQorICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAtIHByaW50cyBpbmRl eCBvZiB0aGUgZGlzdGluY3QgdmFsdWUgKGludG8gdGhlIHNlcmlhbGl6ZWQg YXJyYXkpCisgKiAgICAtIG1ha2VzIGl0IGVhc2llciB0byBzcG90IG5laWdo Ym9yIGJ1Y2tldHMsIGV0Yy4KKyAqICAgIC0gaGFuZHkgZm9yIHBsb3R0aW5n IHRoZSBoaXN0b2dyYW0KKyAqCisgKiAyIChub3JtYWxpemVkIGRpc3RpbmN0 IGluZGV4KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq ICAgIC0gcHJpbnRzIGluZGV4IG9mIHRoZSBkaXN0aW5jdCB2YWx1ZSwgYnV0 IG5vcm1hbGl6ZWQgaW50byBbMCwxXQorICogICAgLSBzaW1pbGFyIHRvIDEs IGJ1dCBzaG93cyBob3cgJ2xvbmcnIHRoZSBidWNrZXQgcmFuZ2UgaXMKKyAq ICAgIC0gaGFuZHkgZm9yIHBsb3R0aW5nIHRoZSBoaXN0b2dyYW0KKyAqCisg KiBXaGVuIHBsb3R0aW5nIHRoZSBoaXN0b2dyYW0sIGJlIGNhcmVmdWwgYXMg dGhlICgxKSBhbmQgKDIpIG9wdGlvbnMgc2tldyB0aGUKKyAqIGxlbmd0aHMg YnkgZGlzdHJpYnV0aW5nIHRoZSBkaXN0aW5jdCB2YWx1ZXMgdW5pZm9ybWx5 LiBGb3IgZGF0YSB0eXBlcworICogd2l0aG91dCBhIGNsZWFyIG1lYW5pbmcg b2YgJ2Rpc3RhbmNlJyAoZS5nLiBzdHJpbmdzKSB0aGF0IGlzIG5vdCBhIGJp ZyBkZWFsLAorICogYnV0IGZvciBudW1iZXJzIGl0IG1heSBiZSBjb25mdXNp bmcuCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfbXZfaGlzdG9ncmFt X2J1Y2tldHMpOworCisjZGVmaW5lIE9VVFBVVF9GT1JNQVRfUkFXCQkwCisj ZGVmaW5lIE9VVFBVVF9GT1JNQVRfSU5ERVhFUwkxCisjZGVmaW5lCU9VVFBV VF9GT1JNQVRfRElTVElOQ1QJMgorCitEYXR1bQorcGdfbXZfaGlzdG9ncmFt X2J1Y2tldHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRl eHQJICAgKmZ1bmNjdHg7CisJaW50CQkJCQljYWxsX2NudHI7CisJaW50CQkJ CQltYXhfY2FsbHM7CisJVHVwbGVEZXNjCQkJdHVwZGVzYzsKKwlBdHRJbk1l dGFkYXRhCSAgICphdHRpbm1ldGE7CisKKwlPaWQJCQkJCW12b2lkID0gUEdf R0VUQVJHX09JRCgwKTsKKwlpbnQJCQkJCW90eXBlID0gUEdfR0VUQVJHX0lO VDMyKDEpOworCisJaWYgKChvdHlwZSA8IDApIHx8IChvdHlwZSA+IDIpKQor CQllbG9nKEVSUk9SLCAiaW52YWxpZCBvdXRwdXQgdHlwZSBzcGVjaWZpZWQi KTsKKworCS8qIHN0dWZmIGRvbmUgb25seSBvbiB0aGUgZmlyc3QgY2FsbCBv ZiB0aGUgZnVuY3Rpb24gKi8KKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQor CXsKKwkJTWVtb3J5Q29udGV4dCAgIG9sZGNvbnRleHQ7CisJCU1WU2VyaWFs aXplZEhpc3RvZ3JhbSBoaXN0b2dyYW07CisKKwkJLyogY3JlYXRlIGEgZnVu Y3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5jZSAqLwor CQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogc3dp dGNoIHRvIG1lbW9yeSBjb250ZXh0IGFwcHJvcHJpYXRlIGZvciBtdWx0aXBs ZSBmdW5jdGlvbiBjYWxscyAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7 CisKKwkJaGlzdG9ncmFtID0gbG9hZF9tdl9oaXN0b2dyYW0obXZvaWQpOwor CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IGhpc3RvZ3JhbTsKKworCQkvKiB0 b3RhbCBudW1iZXIgb2YgdHVwbGVzIHRvIGJlIHJldHVybmVkICovCisJCWZ1 bmNjdHgtPm1heF9jYWxscyA9IDA7CisJCWlmIChmdW5jY3R4LT51c2VyX2Zj dHggIT0gTlVMTCkKKwkJCWZ1bmNjdHgtPm1heF9jYWxscyA9IGhpc3RvZ3Jh bS0+bmJ1Y2tldHM7CisKKwkJLyogQnVpbGQgYSB0dXBsZSBkZXNjcmlwdG9y IGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KKwkJaWYgKGdldF9jYWxsX3Jlc3Vs dF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NP TVBPU0lURSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygi ZnVuY3Rpb24gcmV0dXJuaW5nIHJlY29yZCBjYWxsZWQgaW4gY29udGV4dCAi CisJCQkJCQkJInRoYXQgY2Fubm90IGFjY2VwdCB0eXBlIHJlY29yZCIpKSk7 CisKKwkJLyoKKwkJICogZ2VuZXJhdGUgYXR0cmlidXRlIG1ldGFkYXRhIG5l ZWRlZCBsYXRlciB0byBwcm9kdWNlIHR1cGxlcworCQkgKiBmcm9tIHJhdyBD IHN0cmluZ3MKKwkJICovCisJCWF0dGlubWV0YSA9IFR1cGxlRGVzY0dldEF0 dEluTWV0YWRhdGEodHVwZGVzYyk7CisJCWZ1bmNjdHgtPmF0dGlubWV0YSA9 IGF0dGlubWV0YTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisJfQorCisJLyogc3R1ZmYgZG9uZSBvbiBldmVyeSBjYWxsIG9m IHRoZSBmdW5jdGlvbiAqLworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRV UCgpOworCisJY2FsbF9jbnRyID0gZnVuY2N0eC0+Y2FsbF9jbnRyOworCW1h eF9jYWxscyA9IGZ1bmNjdHgtPm1heF9jYWxsczsKKwlhdHRpbm1ldGEgPSBm dW5jY3R4LT5hdHRpbm1ldGE7CisKKwlpZiAoY2FsbF9jbnRyIDwgbWF4X2Nh bGxzKSAgICAvKiBkbyB3aGVuIHRoZXJlIGlzIG1vcmUgbGVmdCB0byBzZW5k ICovCisJeworCQljaGFyCSAgKip2YWx1ZXM7CisJCUhlYXBUdXBsZQl0dXBs ZTsKKwkJRGF0dW0JCXJlc3VsdDsKKwkJaW50MnZlY3RvciAqc3Rha2V5czsK KwkJT2lkCQkJcmVsaWQ7CisJCWRvdWJsZQkJYnVja2V0X3ZvbHVtZSA9IDEu MDsKKwkJU3RyaW5nSW5mbwlidWZzOworCisJCWNoYXIJICAgKmZvcm1hdDsK KwkJaW50CQkJaTsKKworCQlPaWQJCSAgICpvdXRmdW5jczsKKwkJRm1ncklu Zm8gICAqZm1ncmluZm87CisKKwkJTVZTZXJpYWxpemVkSGlzdG9ncmFtIGhp c3RvZ3JhbTsKKwkJTVZTZXJpYWxpemVkQnVja2V0IGJ1Y2tldDsKKworCQlo aXN0b2dyYW0gPSAoTVZTZXJpYWxpemVkSGlzdG9ncmFtKWZ1bmNjdHgtPnVz ZXJfZmN0eDsKKworCQlBc3NlcnQoY2FsbF9jbnRyIDwgaGlzdG9ncmFtLT5u YnVja2V0cyk7CisKKwkJYnVja2V0ID0gaGlzdG9ncmFtLT5idWNrZXRzW2Nh bGxfY250cl07CisKKwkJc3Rha2V5cyA9IGZpbmRfbXZfYXR0bnVtcyhtdm9p ZCwgJnJlbGlkKTsKKworCQkvKgorCQkgKiBUaGUgc2NhbGFyIHZhbHVlcyB3 aWxsIGJlIGZvcm1hdHRlZCBkaXJlY3RseSwgdXNpbmcgc25wcmludGYuCisJ CSAqCisJCSAqIFRoZSAnYXJyYXknIHZhbHVlcyB3aWxsIGJlIGZvcm1hdHRl ZCB0aHJvdWdoIFN0cmluZ0luZm8uCisJCSAqLworCQl2YWx1ZXMgPSAoY2hh ciAqKikgcGFsbG9jMCg5ICogc2l6ZW9mKGNoYXIgKikpOworCQlidWZzICAg PSAoU3RyaW5nSW5mbykgcGFsbG9jMCg5ICogc2l6ZW9mKFN0cmluZ0luZm9E YXRhKSk7CisKKwkJdmFsdWVzWzBdID0gKGNoYXIgKikgcGFsbG9jKDY0ICog c2l6ZW9mKGNoYXIpKTsKKworCQlpbml0U3RyaW5nSW5mbygmYnVmc1sxXSk7 CS8qIGxvd2VyIGJvdW5kYXJpZXMgKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1 ZnNbMl0pOwkvKiB1cHBlciBib3VuZGFyaWVzICovCisJCWluaXRTdHJpbmdJ bmZvKCZidWZzWzNdKTsJLyogbnVsbHMtb25seSAqLworCQlpbml0U3RyaW5n SW5mbygmYnVmc1s0XSk7CS8qIGxvd2VyIGluY2x1c2l2ZSAqLworCQlpbml0 U3RyaW5nSW5mbygmYnVmc1s1XSk7CS8qIHVwcGVyIGluY2x1c2l2ZSAqLwor CisJCXZhbHVlc1s2XSA9IChjaGFyICopIHBhbGxvYyg2NCAqIHNpemVvZihj aGFyKSk7CisJCXZhbHVlc1s3XSA9IChjaGFyICopIHBhbGxvYyg2NCAqIHNp emVvZihjaGFyKSk7CisJCXZhbHVlc1s4XSA9IChjaGFyICopIHBhbGxvYyg2 NCAqIHNpemVvZihjaGFyKSk7CisKKwkJLyogd2UgbmVlZCB0byBkbyB0aGlz IG9ubHkgd2hlbiBwcmludGluZyB0aGUgYWN0dWFsIHZhbHVlcyAqLworCQlv dXRmdW5jcyA9IChPaWQqKXBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBoaXN0b2dy YW0tPm5kaW1lbnNpb25zKTsKKwkJZm1ncmluZm8gPSAoRm1nckluZm8qKXBh bGxvYzAoc2l6ZW9mKEZtZ3JJbmZvKSAqIGhpc3RvZ3JhbS0+bmRpbWVuc2lv bnMpOworCisJCS8qCisJCSAqIGxvb2t1cCBvdXRwdXQgZnVuY3Rpb25zIGZv ciBhbGwgaGlzdG9ncmFtIGRpbWVuc2lvbnMKKwkJICoKKwkJICogWFhYIFRo aXMgbWlnaHQgYmUgb25lIGluIHRoZSBmaXJzdCBjYWxsIGFuZCBzdG9yZWQg aW4gdXNlcl9mY3R4LgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGhpc3Rv Z3JhbS0+bmRpbWVuc2lvbnM7IGkrKykKKwkJeworCQkJYm9vbCBpc3Zhcmxl bmE7CisKKwkJCWdldFR5cGVPdXRwdXRJbmZvKGdldF9hdHR0eXBlKHJlbGlk LCBzdGFrZXlzLT52YWx1ZXNbaV0pLAorCQkJCQkJCSAgJm91dGZ1bmNzW2ld LCAmaXN2YXJsZW5hKTsKKworCQkJZm1ncl9pbmZvKG91dGZ1bmNzW2ldLCAm Zm1ncmluZm9baV0pOworCQl9CisKKwkJc25wcmludGYodmFsdWVzWzBdLCA2 NCwgIiVkIiwgY2FsbF9jbnRyKTsJLyogYnVja2V0IElEICovCisKKwkJLyog Zm9yIHRoZSBhcnJheXMgb2YgbG93ZXIvdXBwZXIgYm91bmRhcmllcywgZm9y bWF0ZWQgYWNjb3JkaW5nIHRvIG90eXBlICovCisJCWZvciAoaSA9IDA7IGkg PCBoaXN0b2dyYW0tPm5kaW1lbnNpb25zOyBpKyspCisJCXsKKwkJCURhdHVt ICAqdmFscyAgID0gaGlzdG9ncmFtLT52YWx1ZXNbaV07CisKKwkJCXVpbnQx NgltaW5pZHggPSBidWNrZXQtPm1pbltpXTsKKwkJCXVpbnQxNgltYXhpZHgg PSBidWNrZXQtPm1heFtpXTsKKworCQkJLyogY29tcHV0ZSBidWNrZXQgdm9s dW1lLCB1c2luZyBkaXN0aW5jdCB2YWx1ZXMgYXMgYSBtZWFzdXJlCisJCQkg KgorCQkJICogWFhYIE5vdCByZWFsbHkgc3VyZSB3aGF0IHRvIGRvIGZvciBO VUxMIGRpbWVuc2lvbnMgaGVyZSwgc28gbGV0J3MKKwkJCSAqICAgICBzaW1w bHkgY291bnQgdGhlbSBhcyAnMScuCisJCQkgKi8KKwkJCWJ1Y2tldF92b2x1 bWUKKwkJCQkqPSAoZG91YmxlKShtYXhpZHggLSBtaW5pZHggKyAxKSAvICho aXN0b2dyYW0tPm52YWx1ZXNbaV0tMSk7CisKKwkJCWlmIChpID09IDApCisJ CQkJZm9ybWF0ID0gInslcyI7CQkvKiBmaXN0IGRpbWVuc2lvbiAqLworCQkJ ZWxzZSBpZiAoaSA8IChoaXN0b2dyYW0tPm5kaW1lbnNpb25zIC0gMSkpCisJ CQkJZm9ybWF0ID0gIiwgJXMiOwkvKiBtZWRpdW0gZGltZW5zaW9ucyAqLwor CQkJZWxzZQorCQkJCWZvcm1hdCA9ICIsICVzfSI7CS8qIGxhc3QgZGltZW5z aW9uICovCisKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZnNbM10sIGZvcm1h dCwgYnVja2V0LT5udWxsc29ubHlbaV0gPyAidCIgOiAiZiIpOworCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmc1s0XSwgZm9ybWF0LCBidWNrZXQtPm1pbl9p bmNsdXNpdmVbaV0gPyAidCIgOiAiZiIpOworCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmc1s1XSwgZm9ybWF0LCBidWNrZXQtPm1heF9pbmNsdXNpdmVbaV0g PyAidCIgOiAiZiIpOworCisJCQkvKiBmb3IgTlVMTC1vbmx5ICBkaW1lbnNp b24sIHNpbXBseSBwdXQgdGhlcmUgdGhlIE5VTEwgYW5kIGNvbnRpbnVlICov CisJCQlpZiAoYnVja2V0LT5udWxsc29ubHlbaV0pCisJCQl7CisJCQkJaWYg KGkgPT0gMCkKKwkJCQkJZm9ybWF0ID0gInslcyI7CisJCQkJZWxzZSBpZiAo aSA8IChoaXN0b2dyYW0tPm5kaW1lbnNpb25zIC0gMSkpCisJCQkJCWZvcm1h dCA9ICIsICVzIjsKKwkJCQllbHNlCisJCQkJCWZvcm1hdCA9ICIsICVzfSI7 CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZzWzFdLCBmb3JtYXQsICJO VUxMIik7CisJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmc1syXSwgZm9ybWF0 LCAiTlVMTCIpOworCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIG90 aGVyd2lzZSB3ZSByZWFsbHkgbmVlZCB0byBmb3JtYXQgdGhlIHZhbHVlICov CisJCQlzd2l0Y2ggKG90eXBlKQorCQkJeworCQkJCWNhc2UgT1VUUFVUX0ZP Uk1BVF9SQVc6CQkvKiBhY3R1YWwgYm91bmRhcnkgdmFsdWVzICovCisKKwkJ CQkJaWYgKGkgPT0gMCkKKwkJCQkJCWZvcm1hdCA9ICJ7JXMiOworCQkJCQll bHNlIGlmIChpIDwgKGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnMgLSAxKSkKKwkJ CQkJCWZvcm1hdCA9ICIsICVzIjsKKwkJCQkJZWxzZQorCQkJCQkJZm9ybWF0 ID0gIiwgJXN9IjsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZzWzFd LCBmb3JtYXQsCisJCQkJCQkJCQkgRnVuY3Rpb25DYWxsMSgmZm1ncmluZm9b aV0sIHZhbHNbbWluaWR4XSkpOworCisJCQkJCWFwcGVuZFN0cmluZ0luZm8o JmJ1ZnNbMl0sIGZvcm1hdCwKKwkJCQkJCQkJCSBGdW5jdGlvbkNhbGwxKCZm bWdyaW5mb1tpXSwgdmFsc1ttYXhpZHhdKSk7CisKKwkJCQkJYnJlYWs7CisK KwkJCQljYXNlIE9VVFBVVF9GT1JNQVRfSU5ERVhFUzoJLyogaW5kZXhlcyBp bnRvIGRlZHVwbGljYXRlZCBhcnJheXMgKi8KKworCQkJCQlpZiAoaSA9PSAw KQorCQkJCQkJZm9ybWF0ID0gInslZCI7CisJCQkJCWVsc2UgaWYgKGkgPCAo aGlzdG9ncmFtLT5uZGltZW5zaW9ucyAtIDEpKQorCQkJCQkJZm9ybWF0ID0g IiwgJWQiOworCQkJCQllbHNlCisJCQkJCQlmb3JtYXQgPSAiLCAlZH0iOwor CisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZnNbMV0sIGZvcm1hdCwgbWlu aWR4KTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZzWzJdLCBmb3Jt YXQsIG1heGlkeCk7CisKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIE9VVFBV VF9GT1JNQVRfRElTVElOQ1Q6CS8qIGRpc3RpbmN0IGFycmF5cyBhcyBtZWFz dXJlICovCisKKwkJCQkJaWYgKGkgPT0gMCkKKwkJCQkJCWZvcm1hdCA9ICJ7 JWYiOworCQkJCQllbHNlIGlmIChpIDwgKGhpc3RvZ3JhbS0+bmRpbWVuc2lv bnMgLSAxKSkKKwkJCQkJCWZvcm1hdCA9ICIsICVmIjsKKwkJCQkJZWxzZQor CQkJCQkJZm9ybWF0ID0gIiwgJWZ9IjsKKworCQkJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWZzWzFdLCBmb3JtYXQsCisJCQkJCQkJCQkgKG1pbmlkeCAqIDEu MCAvIChoaXN0b2dyYW0tPm52YWx1ZXNbaV0tMSkpKTsKKworCQkJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWZzWzJdLCBmb3JtYXQsCisJCQkJCQkJCQkgKG1h eGlkeCAqIDEuMCAvIChoaXN0b2dyYW0tPm52YWx1ZXNbaV0tMSkpKTsKKwor CQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJST1Is ICJ1bmtub3duIG91dHB1dCB0eXBlOiAlZCIsIG90eXBlKTsKKwkJCX0KKwkJ fQorCisJCXZhbHVlc1sxXSA9IGJ1ZnNbMV0uZGF0YTsKKwkJdmFsdWVzWzJd ID0gYnVmc1syXS5kYXRhOworCQl2YWx1ZXNbM10gPSBidWZzWzNdLmRhdGE7 CisJCXZhbHVlc1s0XSA9IGJ1ZnNbNF0uZGF0YTsKKwkJdmFsdWVzWzVdID0g YnVmc1s1XS5kYXRhOworCisJCXNucHJpbnRmKHZhbHVlc1s2XSwgNjQsICIl ZiIsIGJ1Y2tldC0+bnR1cGxlcyk7CS8qIGZyZXF1ZW5jeSAqLworCQlzbnBy aW50Zih2YWx1ZXNbN10sIDY0LCAiJWYiLCBidWNrZXQtPm50dXBsZXMgLyBi dWNrZXRfdm9sdW1lKTsJLyogZGVuc2l0eSAqLworCQlzbnByaW50Zih2YWx1 ZXNbOF0sIDY0LCAiJWYiLCBidWNrZXRfdm9sdW1lKTsJLyogdm9sdW1lIChh cyBhIGZyYWN0aW9uKSAqLworCisJCS8qIGJ1aWxkIGEgdHVwbGUgKi8KKwkJ dHVwbGUgPSBCdWlsZFR1cGxlRnJvbUNTdHJpbmdzKGF0dGlubWV0YSwgdmFs dWVzKTsKKworCQkvKiBtYWtlIHRoZSB0dXBsZSBpbnRvIGEgZGF0dW0gKi8K KwkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOworCisJCS8q IGNsZWFuIHVwICh0aGlzIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5KSAqLwor CQlwZnJlZSh2YWx1ZXNbMF0pOworCQlwZnJlZSh2YWx1ZXNbNl0pOworCQlw ZnJlZSh2YWx1ZXNbN10pOworCQlwZnJlZSh2YWx1ZXNbOF0pOworCisJCXJl c2V0U3RyaW5nSW5mbygmYnVmc1sxXSk7CisJCXJlc2V0U3RyaW5nSW5mbygm YnVmc1syXSk7CisJCXJlc2V0U3RyaW5nSW5mbygmYnVmc1szXSk7CisJCXJl c2V0U3RyaW5nSW5mbygmYnVmc1s0XSk7CisJCXJlc2V0U3RyaW5nSW5mbygm YnVmc1s1XSk7CisKKwkJcGZyZWUoYnVmcyk7CisJCXBmcmVlKHZhbHVlcyk7 CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIHJlc3VsdCk7CisJfQor CWVsc2UgICAgLyogZG8gd2hlbiB0aGVyZSBpcyBubyBtb3JlIGxlZnQgKi8K Kwl7CisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9CisKKyNp ZmRlZiBERUJVR19NVkhJU1QKKy8qCisgKiBwcmludHMgZGVidWdnaW5nIGlu Zm8gYWJvdXQgbWF0Y2hlZCBoaXN0b2dyYW0gYnVja2V0cyAoZnVsbC9wYXJ0 aWFsKQorICoKKyAqIFhYWCBDdXJyZW50bHkgd29ya3Mgb25seSBmb3IgSU5U IGRhdGEgdHlwZS4KKyAqLwordm9pZAorZGVidWdfaGlzdG9ncmFtX21hdGNo ZXMoTVZTZXJpYWxpemVkSGlzdG9ncmFtIG12aGlzdCwgY2hhciAqbWF0Y2hl cykKK3sKKwlpbnQgaSwgajsKKworCWZsb2F0IGZmdWxsID0gMCwgZnBhcnRp YWwgPSAwOworCWludCBuZnVsbCA9IDAsIG5wYXJ0aWFsID0gMDsKKworCVN0 cmluZ0luZm9EYXRhCWJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOwor CisJZm9yIChpID0gMDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwl7 CisJCU1WU2VyaWFsaXplZEJ1Y2tldCBidWNrZXQgPSBtdmhpc3QtPmJ1Y2tl dHNbaV07CisKKwkJaWYgKCEgbWF0Y2hlc1tpXSkKKwkJCWNvbnRpbnVlOwor CisJCS8qIGluY3JlbWVudCB0aGUgY291bnRlcnMgKi8KKwkJbmZ1bGwgKz0g KG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9GVUxMKSA/IDEgOiAwOwor CQlucGFydGlhbCArPSAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX1BB UlRJQUwpID8gMSA6IDA7CisKKwkJLyogYW5kIGFsc28gdXBkYXRlIHRoZSBm cmVxdWVuY2llcyAqLworCQlmZnVsbCArPSAobWF0Y2hlc1tpXSA9PSBNVlNU QVRTX01BVENIX0ZVTEwpID8gYnVja2V0LT5udHVwbGVzIDogMDsKKwkJZnBh cnRpYWwgKz0gKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9QQVJUSUFM KSA/IGJ1Y2tldC0+bnR1cGxlcyA6IDA7CisKKwkJcmVzZXRTdHJpbmdJbmZv KCZidWYpOworCisJCS8qIGJ1aWxkIHJhbmdlcyBmb3IgYWxsIHRoZSBkaW1l bnRpb25zICovCisJCWZvciAoaiA9IDA7IGogPCBtdmhpc3QtPm5kaW1lbnNp b25zOyBqKyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgJ1sl ZCAlZF0nLAorCQkJCQkJCSBEYXR1bUdldEludDMyKG12aGlzdC0+dmFsdWVz W2pdW2J1Y2tldC0+bWluW2pdXSksCisJCQkJCQkJIERhdHVtR2V0SW50MzIo bXZoaXN0LT52YWx1ZXNbal1bYnVja2V0LT5tYXhbal1dKSk7CisJCX0KKwor CQllbG9nKFdBUk5JTkcsICJidWNrZXQgJWQgJXMgPT4gJWQgWyVmXSIsIGks IGJ1Zi5kYXRhLCBtYXRjaGVzW2ldLCBidWNrZXQtPm50dXBsZXMpOworCX0K KworCWVsb2coV0FSTklORywgImZ1bGw9JWYgcGFydGlhbD0lZiAoJWYpIiwg ZmZ1bGwsIGZwYXJ0aWFsLCAoZmZ1bGwgKyAwLjUgKiBmcGFydGlhbCkpOwor fQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUu YyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDJjMjJkMzEuLmI2 OTNmMzYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisr KyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC0yMTA5LDkgKzIxMDks OSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hl bWFuYW1lLAogCQl7CiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJ CQkJICAgIlNFTEVDVCBvaWQsIHN0YW5hbWVzcGFjZTo6cmVnbmFtZXNwYWNl IEFTIG5zcCwgc3RhbmFtZSwgc3Rha2V5cyxcbiIKLQkJCQkJCSAgICIgIGRl cHNfZW5hYmxlZCwgbWN2X2VuYWJsZWQsXG4iCi0JCQkJCQkgICAiICBkZXBz X2J1aWx0LCBtY3ZfYnVpbHQsXG4iCi0JCQkJCQkgICAiICBtY3ZfbWF4X2l0 ZW1zLFxuIgorCQkJCQkJICAgIiAgZGVwc19lbmFibGVkLCBtY3ZfZW5hYmxl ZCwgaGlzdF9lbmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19idWlsdCwg bWN2X2J1aWx0LCBoaXN0X2J1aWx0LFxuIgorCQkJCQkJICAgIiAgbWN2X21h eF9pdGVtcywgaGlzdF9tYXhfYnVja2V0cyxcbiIKIAkJCQkJCSAgICIgIChT RUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1lOjp0ZXh0LCcsICcpXG4iCiAJCQkJ CQkgICAiICAgIEZST00gKChTRUxFQ1QgdW5uZXN0KHN0YWtleXMpIEFTIGF0 dG51bSkgc1xuIgogCQkJCQkJICAgIiAgICAgICAgIEpPSU4gcGdfYXR0cmli dXRlIGEgT04gKHN0YXJlbGlkID0gYS5hdHRyZWxpZCBhbmQgYS5hdHRudW0g PSBzLmF0dG51bSkpKSBBUyBhdHRudW1zXG4iCkBAIC0yMTU0LDggKzIxNTQs MTcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2No ZW1hbmFtZSwKIAkJCQkJCWZpcnN0ID0gZmFsc2U7CiAJCQkJCX0KIAorCQkJ CQlpZiAoIXN0cmNtcChQUWdldHZhbHVlKHJlc3VsdCwgaSwgNiksICJ0Iikp CisJCQkJCXsKKwkJCQkJCWlmICghIGZpcnN0KQorCQkJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsICIsIGhpc3RvZ3JhbSIpOworCQkJCQkJZWxzZQor CQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIoaGlzdG9ncmFtIik7 CisJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQl9CisKIAkJCQkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwgIikgT04gKCVzKSIsCi0JCQkJCQkJUFFnZXR2 YWx1ZShyZXN1bHQsIGksIDkpKTsKKwkJCQkJCQlQUWdldHZhbHVlKHJlc3Vs dCwgaSwgMTIpKTsKIAogCQkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250 LCBidWYuZGF0YSk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfbXZfc3RhdGlzdGljLmgKaW5kZXggMzUyOWIwMy4uNzAyMDc3MiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0 aWMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3Rp Yy5oCkBAIC0zOSwxMyArMzksMTYgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0 aWMsMzM4MSkKIAkvKiBzdGF0aXN0aWNzIHJlcXVlc3RlZCB0byBidWlsZCAq LwogCWJvb2wJCWRlcHNfZW5hYmxlZDsJCS8qIGFuYWx5emUgZGVwZW5kZW5j aWVzPyAqLwogCWJvb2wJCW1jdl9lbmFibGVkOwkJLyogYnVpbGQgTUNWIGxp c3Q/ICovCisJYm9vbAkJaGlzdF9lbmFibGVkOwkJLyogYnVpbGQgaGlzdG9n cmFtPyAqLwogCi0JLyogTUNWIHNpemUgKi8KKwkvKiBoaXN0b2dyYW0gLyBN Q1Ygc2l6ZSAqLwogCWludDMyCQltY3ZfbWF4X2l0ZW1zOwkJLyogbWF4IE1D ViBpdGVtcyAqLworCWludDMyCQloaXN0X21heF9idWNrZXRzOwkvKiBtYXgg aGlzdG9ncmFtIGJ1Y2tldHMgKi8KIAogCS8qIHN0YXRpc3RpY3MgdGhhdCBh cmUgYXZhaWxhYmxlIChpZiByZXF1ZXN0ZWQpICovCiAJYm9vbAkJZGVwc19i dWlsdDsJCQkvKiBkZXBlbmRlbmNpZXMgd2VyZSBidWlsdCAqLwogCWJvb2wJ CW1jdl9idWlsdDsJCQkvKiBNQ1YgbGlzdCB3YXMgYnVpbHQgKi8KKwlib29s CQloaXN0X2J1aWx0OwkJCS8qIGhpc3RvZ3JhbSB3YXMgYnVpbHQgKi8KIAog CS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSwgYnV0IHdl IGFsbG93IGRpcmVjdCBhY2Nlc3MgdG8gc3Rha2V5cyAqLwogCWludDJ2ZWN0 b3IJc3Rha2V5czsJCQkvKiBhcnJheSBvZiBjb2x1bW4ga2V5cyAqLwpAQCAt NTMsNiArNTYsNyBAQCBDQVRBTE9HKHBnX212X3N0YXRpc3RpYywzMzgxKQog I2lmZGVmIENBVEFMT0dfVkFSTEVOCiAJYnl0ZWEJCXN0YWRlcHM7CQkJLyog ZGVwZW5kZW5jaWVzIChzZXJpYWxpemVkKSAqLwogCWJ5dGVhCQlzdGFtY3Y7 CQkJCS8qIE1DViBsaXN0IChzZXJpYWxpemVkKSAqLworCWJ5dGVhCQlzdGFo aXN0OwkJCS8qIE1WIGhpc3RvZ3JhbSAoc2VyaWFsaXplZCkgKi8KICNlbmRp ZgogCiB9IEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYzsKQEAgLTY4LDE4ICs3 MiwyMiBAQCB0eXBlZGVmIEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYyAqRm9y bV9wZ19tdl9zdGF0aXN0aWM7CiAgKgkJY29tcGlsZXIgY29uc3RhbnRzIGZv ciBwZ19tdl9zdGF0aXN0aWMKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwot I2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTEyCisjZGVmaW5l IE5hdHRzX3BnX212X3N0YXRpc3RpYwkJCQkJMTYKICNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhcmVsaWQJCQkxCiAjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX3N0YW5hbWUJCQkyCiAjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YW5hbWVzcGFjZQkJMwogI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFvd25lcgkJCTQKICNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfZGVwc19lbmFibGVkCQk1CiAjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX21jdl9lbmFibGVkCQk2Ci0jZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX21jdl9tYXhfaXRlbXMJCTcKLSNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfZGVwc19idWlsdAkJCTgKLSNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X2J1aWx0CQkJOQotI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFrZXlzCQkJMTAKLSNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3RhZGVwcwkJCTExCi0jZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX3N0YW1jdgkJCQkxMgorI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19oaXN0X2VuYWJsZWQJCTcKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfbWN2X21heF9pdGVtcwkJOAorI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19oaXN0X21heF9idWNrZXRzCTkKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfZGVwc19idWlsdAkJCTEwCisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX21jdl9idWlsdAkJCTExCisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX2hpc3RfYnVpbHQJCQkxMgorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFrZXlzCQkJMTMKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhZGVwcwkJCTE0CisjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YW1jdgkJCQkxNQorI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFoaXN0CQkJMTYKIAogI2VuZGlmICAgLyogUEdfTVZfU1RB VElTVElDX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKaW5k ZXggZjhjZWFiZi4uMGNhNDk1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmgKQEAgLTI2NzQsNiArMjY3NCwxMCBAQCBEQVRBKGluc2VydCBP SUQgPSAzMzc2ICggIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbwlQR05TUCBQ R1VJRCAxMiAxIDAgMCAwIGYgZiBmCiBERVNDUigibXVsdGktdmFyaWF0ZSBz dGF0aXN0aWNzOiBNQ1YgbGlzdCBpbmZvIik7CiBEQVRBKGluc2VydCBPSUQg PSAzMzczICggIHBnX212X21jdl9pdGVtcyBQR05TUCBQR1VJRCAxMiAxIDEw MDAgMCAwIGYgZiBmIGYgdCB0IGkgcyAxIDAgMjI0OSAiMjYiICJ7MjYsMjMs MTAwOSwxMDAwLDcwMX0iICJ7aSxvLG8sbyxvfSIgIntvaWQsaW5kZXgsdmFs dWVzLG51bGxzLGZyZXF1ZW5jeX0iIF9udWxsXyBfbnVsbF8gcGdfbXZfbWN2 X2l0ZW1zIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoImRldGFp bHMgYWJvdXQgTUNWIGxpc3QgaXRlbXMiKTsKK0RBVEEoaW5zZXJ0IE9JRCA9 IDMzNzUgKCAgcGdfbXZfc3RhdHNfaGlzdG9ncmFtX2luZm8JUEdOU1AgUEdV SUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBpIHMgMSAwIDI1ICIxNyIgX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19tdl9zdGF0c19o aXN0b2dyYW1faW5mbyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NS KCJtdWx0aS12YXJpYXRlIHN0YXRpc3RpY3M6IGhpc3RvZ3JhbSBpbmZvIik7 CitEQVRBKGluc2VydCBPSUQgPSAzMzc0ICggIHBnX212X2hpc3RvZ3JhbV9i dWNrZXRzIFBHTlNQIFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQg aSBzIDIgMCAyMjQ5ICIyNiAyMyIgInsyNiwyMywyMywxMDA5LDEwMDksMTAw MCwxMDAwLDEwMDAsNzAxLDcwMSw3MDF9IiAie2ksaSxvLG8sbyxvLG8sbyxv LG8sb30iICJ7b2lkLG90eXBlLGluZGV4LG1pbnZhbHMsbWF4dmFscyxudWxs c29ubHksbWluaW5jbHVzaXZlLG1heGluY2x1c2l2ZSxmcmVxdWVuY3ksZGVu c2l0eSxidWNrZXRfdm9sdW1lfSIgX251bGxfIF9udWxsXyBwZ19tdl9oaXN0 b2dyYW1fYnVja2V0cyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NS KCJkZXRhaWxzIGFib3V0IGhpc3RvZ3JhbSBidWNrZXRzIik7CiAKIERBVEEo aW5zZXJ0IE9JRCA9IDE5MjggKCAgcGdfc3RhdF9nZXRfbnVtc2NhbnMJCQlQ R05TUCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIHMgciAxIDAgMjAg IjI2IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBnX3N0 YXRfZ2V0X251bXNjYW5zIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVT Q1IoInN0YXRpc3RpY3M6IG51bWJlciBvZiBzY2FucyBkb25lIGZvciB0YWJs ZS9pbmRleCIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVs YXRpb24uaCBiL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKaW5kZXgg MmJjZDU4Mi4uOGM1MGJmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlv bi5oCkBAIC02NTQsMTAgKzY1NCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBNVlN0 YXRpc3RpY0luZm8KIAkvKiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KIAlib29s CQlkZXBzX2VuYWJsZWQ7CS8qIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGVu YWJsZWQgKi8KIAlib29sCQltY3ZfZW5hYmxlZDsJLyogTUNWIGxpc3QgZW5h YmxlZCAqLworCWJvb2wJCWhpc3RfZW5hYmxlZDsJLyogaGlzdG9ncmFtIGVu YWJsZWQgKi8KIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICov CiAJYm9vbAkJZGVwc19idWlsdDsJCS8qIGZ1bmN0aW9uYWwgZGVwZW5kZW5j aWVzIGJ1aWx0ICovCiAJYm9vbAkJbWN2X2J1aWx0OwkJLyogTUNWIGxpc3Qg YnVpbHQgKi8KKwlib29sCQloaXN0X2J1aWx0OwkJLyogaGlzdG9ncmFtIGJ1 aWx0ICovCiAKIAkvKiBjb2x1bW5zIGluIHRoZSBzdGF0aXN0aWNzIChhdHRu dW1zKSAqLwogCWludDJ2ZWN0b3IgKnN0YWtleXM7CQkvKiBhdHRudW1zIG9m IHRoZSBjb2x1bW5zIGNvdmVyZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL212c3RhdHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3Rh dHMuaAppbmRleCBjZTdjM2FkLi42NzA4MTM5IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9tdnN0YXRzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvbXZzdGF0cy5oCkBAIC05Myw2ICs5MywxMjMgQEAgdHlwZWRlZiBNQ1ZM aXN0RGF0YSAqTUNWTGlzdDsKICNkZWZpbmUgTVZTVEFUX01DVkxJU1RfTUFY X0lURU1TCTgxOTIJLyogbWF4IGl0ZW1zIGluIE1DViBsaXN0ICovCiAKIC8q CisgKiBNdWx0aXZhcmlhdGUgaGlzdG9ncmFtcworICovCit0eXBlZGVmIHN0 cnVjdCBNVkJ1Y2tldERhdGEgeworCisJLyogRnJlcXVlbmNpZXMgb2YgdGhp cyBidWNrZXQuICovCisJZmxvYXQJbnR1cGxlczsJLyogZnJlcXVlbmN5IG9m IHR1cGxlcyB0dXBsZXMgKi8KKworCS8qCisJICogSW5mb3JtYXRpb24gYWJv dXQgZGltZW5zaW9ucyBiZWluZyBOVUxMLW9ubHkuIE5vdCB5ZXQgdXNlZC4K KwkgKi8KKwlib29sICAgKm51bGxzb25seTsKKworCS8qIGxvd2VyIGJvdW5k YXJpZXMgLSB2YWx1ZXMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbmVx dWFsaXRpZXMgKi8KKwlEYXR1bSAgKm1pbjsKKwlib29sICAgKm1pbl9pbmNs dXNpdmU7CisKKwkvKiB1cHBlciBib3VuZGFyaWVzIC0gdmFsdWVzIGFuZCBp bmZvcm1hdGlvbiBhYm91dCB0aGUgaW5lcXVhbGl0aWVzICovCisJRGF0dW0g ICptYXg7CisJYm9vbCAgICptYXhfaW5jbHVzaXZlOworCisJLyogdXNlZCB3 aGVuIGJ1aWxkaW5nIHRoZSBoaXN0b2dyYW0gKG5vdCBzZXJpYWxpemVkL2Rl c2VyaWFsaXplZCkgKi8KKwl2b2lkICAgKmJ1aWxkX2RhdGE7CisKK30gTVZC dWNrZXREYXRhOworCit0eXBlZGVmIE1WQnVja2V0RGF0YQkqTVZCdWNrZXQ7 CisKKwordHlwZWRlZiBzdHJ1Y3QgTVZIaXN0b2dyYW1EYXRhIHsKKworCXVp bnQzMgkJbWFnaWM7CQkJLyogbWFnaWMgY29uc3RhbnQgbWFya2VyICovCisJ dWludDMyCQl0eXBlOwkJCS8qIHR5cGUgb2YgaGlzdG9ncmFtIChCQVNJQykg Ki8KKwl1aW50MzIgCQluYnVja2V0czsJCS8qIG51bWJlciBvZiBidWNrZXRz IChidWNrZXRzIGFycmF5KSAqLworCXVpbnQzMgkJbmRpbWVuc2lvbnM7CS8q IG51bWJlciBvZiBkaW1lbnNpb25zICovCisKKwlNVkJ1Y2tldCAgICpidWNr ZXRzOwkJLyogYXJyYXkgb2YgYnVja2V0cyAqLworCit9IE1WSGlzdG9ncmFt RGF0YTsKKwordHlwZWRlZiBNVkhpc3RvZ3JhbURhdGEgKk1WSGlzdG9ncmFt OworCisvKgorICogSGlzdG9ncmFtIGluIGEgcGFydGlhbGx5IHNlcmlhbGl6 ZWQgZm9ybSwgd2l0aCBkZWR1cGxpY2F0ZWQgYm91bmRhcnkKKyAqIHZhbHVl cyBldGMuCisgKgorICogVE9ETyBhZGQgbW9yZSBkZXRhaWxlZCBkZXNjcmlw dGlvbiBoZXJlCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgTVZTZXJpYWxpemVk QnVja2V0RGF0YSB7CisKKwkvKiBGcmVxdWVuY2llcyBvZiB0aGlzIGJ1Y2tl dC4gKi8KKwlmbG9hdAludHVwbGVzOwkvKiBmcmVxdWVuY3kgb2YgdHVwbGVz IHR1cGxlcyAqLworCisJLyoKKwkgKiBJbmZvcm1hdGlvbiBhYm91dCBkaW1l bnNpb25zIGJlaW5nIE5VTEwtb25seS4gTm90IHlldCB1c2VkLgorCSAqLwor CWJvb2wgICAqbnVsbHNvbmx5OworCisJLyogbG93ZXIgYm91bmRhcmllcyAt IHZhbHVlcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGluZXF1YWxpdGll cyAqLworCXVpbnQxNiAqbWluOworCWJvb2wgICAqbWluX2luY2x1c2l2ZTsK KworCS8qIGluZGV4ZXMgb2YgdXBwZXIgYm91bmRhcmllcyAtIHZhbHVlcyBh bmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJICogaW5lcXVhbGl0aWVzIChl eGNsdXNpdmUgdnMuIGluY2x1c2l2ZSkgKi8KKwl1aW50MTYgKm1heDsKKwli b29sICAgKm1heF9pbmNsdXNpdmU7CisKK30gTVZTZXJpYWxpemVkQnVja2V0 RGF0YTsKKwordHlwZWRlZiBNVlNlcmlhbGl6ZWRCdWNrZXREYXRhCSpNVlNl cmlhbGl6ZWRCdWNrZXQ7CisKK3R5cGVkZWYgc3RydWN0IE1WU2VyaWFsaXpl ZEhpc3RvZ3JhbURhdGEgeworCisJdWludDMyCQltYWdpYzsJCQkvKiBtYWdp YyBjb25zdGFudCBtYXJrZXIgKi8KKwl1aW50MzIJCXR5cGU7CQkJLyogdHlw ZSBvZiBoaXN0b2dyYW0gKEJBU0lDKSAqLworCXVpbnQzMiAJCW5idWNrZXRz OwkJLyogbnVtYmVyIG9mIGJ1Y2tldHMgKGJ1Y2tldHMgYXJyYXkpICovCisJ dWludDMyCQluZGltZW5zaW9uczsJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMg Ki8KKworCS8qCisJICoga2VlcCB0aGlzIHRoZSBzYW1lIHdpdGggTVZIaXN0 b2dyYW1EYXRhLCBiZWNhdXNlIG9mCisJICogZGVzZXJpYWxpemF0aW9uIChz YW1lIG9mZnNldCkKKwkgKi8KKwlNVlNlcmlhbGl6ZWRCdWNrZXQgICAqYnVj a2V0czsJCS8qIGFycmF5IG9mIGJ1Y2tldHMgKi8KKworCS8qCisJICogc2Vy aWFsaXplZCBib3VuZGFyeSB2YWx1ZXMsIG9uZSBhcnJheSBwZXIgZGltZW5z aW9uLCBkZWR1cGxpY2F0ZWQKKwkgKiAodGhlIG1pbi9tYXggaW5kZXhlcyBw b2ludCBpbnRvIHRoZXNlIGFycmF5cykKKwkgKi8KKwlpbnQJICAgKm52YWx1 ZXM7CisJRGF0dW0gKip2YWx1ZXM7CisKK30gTVZTZXJpYWxpemVkSGlzdG9n cmFtRGF0YTsKKwordHlwZWRlZiBNVlNlcmlhbGl6ZWRIaXN0b2dyYW1EYXRh ICpNVlNlcmlhbGl6ZWRIaXN0b2dyYW07CisKKworLyogdXNlZCB0byBmbGFn IHN0YXRzIHNlcmlhbGl6ZWQgdG8gYnl0ZWEgKi8KKyNkZWZpbmUgTVZTVEFU X0hJU1RfTUFHSUMJCTB4N0Y4QzU2NzAJLyogbWFya3Mgc2VyaWFsaXplZCBi eXRlYSAqLworI2RlZmluZSBNVlNUQVRfSElTVF9UWVBFX0JBU0lDCTEJCQkv KiBiYXNpYyBoaXN0b2dyYW0gdHlwZSAqLworCisvKgorICogTGltaXRzIHVz ZWQgZm9yIG1heF9idWNrZXRzIG9wdGlvbiwgaS5lLiB3ZSdyZSBhbHdheXMg Z3VhcmFudGVlZAorICogdG8gaGF2ZSBzcGFjZSBmb3IgYXQgbGVhc3QgTVZT VEFUX0hJU1RfTUlOX0JVQ0tFVFMsIGFuZCB3ZSBjYW5ub3QKKyAqIGhhdmUg bW9yZSB0aGFuIE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTIGJ1Y2tldHMuCisg KgorICogVGhpcyBpcyBqdXN0IGEgYm91bmRhcnkgZm9yIHRoZSAnbWF4JyB0 aHJlc2hvbGQgLSB0aGUgYWN0dWFsCisgKiBoaXN0b2dyYW0gbWF5IHVzZSBs ZXNzIGJ1Y2tldHMgdGhhbiBNVlNUQVRfSElTVF9NQVhfQlVDS0VUUy4KKyAq CisgKiBUT0RPIFRoZSBNVlNUQVRfSElTVF9NSU5fQlVDS0VUUyBzaG91bGQg YmUgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mCisgKiAgICAgIGF0dHJpYnV0 ZXMgKE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMpIGJlY2F1c2Ugb2YgTlVMTC1i dWNrZXRzLgorICogICAgICBUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgMl5O IGJ1Y2tldHMsIG90aGVyd2lzZSB3ZSBtYXkgYmUgdW5hYmxlCisgKiAgICAg IHRvIGJ1aWxkIHRoZSBOVUxMIGJ1Y2tldHMuCisgKi8KKyNkZWZpbmUgTVZT VEFUX0hJU1RfTUlOX0JVQ0tFVFMJMTI4CQkJLyogbWluIG51bWJlciBvZiBi dWNrZXRzICovCisjZGVmaW5lIE1WU1RBVF9ISVNUX01BWF9CVUNLRVRTCTE2 Mzg0CQkvKiBtYXggbnVtYmVyIG9mIGJ1Y2tldHMgKi8KKworLyoKICAqIFRP RE8gTWF5YmUgZmV0Y2hpbmcgdGhlIGhpc3RvZ3JhbS9NQ1YgbGlzdCBzZXBh cmF0ZWx5IGlzIGluZWZmaWNpZW50PwogICogICAgICBDb25zaWRlciBhZGRp bmcgYSBzaW5nbGUgYGZldGNoX3N0YXRzYCBtZXRob2QsIGZldGNoaW5nIGFs bAogICogICAgICBzdGF0cyBzcGVjaWZpZWQgdXNpbmcgZmxhZ3MgKG9yIHNv bWV0aGluZyBsaWtlIHRoYXQpLgpAQCAtMTAwLDIwICsyMTcsMjUgQEAgdHlw ZWRlZiBNQ1ZMaXN0RGF0YSAqTUNWTGlzdDsKIAogTVZEZXBlbmRlbmNpZXMg bG9hZF9tdl9kZXBlbmRlbmNpZXMoT2lkIG12b2lkKTsKIE1DVkxpc3QgICAg ICAgIGxvYWRfbXZfbWN2bGlzdChPaWQgbXZvaWQpOworTVZTZXJpYWxpemVk SGlzdG9ncmFtICAgIGxvYWRfbXZfaGlzdG9ncmFtKE9pZCBtdm9pZCk7CiAK IGJ5dGVhICogc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVu Y2llcyBkZXBlbmRlbmNpZXMpOwogYnl0ZWEgKiBzZXJpYWxpemVfbXZfbWN2 bGlzdChNQ1ZMaXN0IG1jdmxpc3QsIGludDJ2ZWN0b3IgKmF0dHJzLAogCQkJ CQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CitieXRlYSAqIHNlcmlhbGl6 ZV9tdl9oaXN0b2dyYW0oTVZIaXN0b2dyYW0gaGlzdG9ncmFtLCBpbnQydmVj dG9yICphdHRycywKKwkJCQkJICBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAK IC8qIGRlc2VyaWFsaXphdGlvbiBvZiBzdGF0cyAoc2VyaWFsaXphdGlvbiBp cyBwcml2YXRlIHRvIGFuYWx5emUpICovCiBNVkRlcGVuZGVuY2llcwlkZXNl cmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRhKTsKIE1DVkxp c3QJCQlkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0KGJ5dGVhICogZGF0YSk7CitN VlNlcmlhbGl6ZWRIaXN0b2dyYW0JZGVzZXJpYWxpemVfbXZfaGlzdG9ncmFt KGJ5dGVhICogZGF0YSk7CiAKIC8qCiAgKiBSZXR1cm5zIGluZGV4IG9mIHRo ZSBhdHRyaWJ1dGUgbnVtYmVyIHdpdGhpbiB0aGUgdmVjdG9yIChpLmUuIGEK ICAqIGRpbWVuc2lvbiB3aXRoaW4gdGhlIHN0YXRzKS4KICAqLwogaW50IG12 X2dldF9pbmRleChBdHRyTnVtYmVyIHZhcmF0dG5vLCBpbnQydmVjdG9yICog c3Rha2V5cyk7CitpbnQydmVjdG9yKiBmaW5kX212X2F0dG51bXMoT2lkIG12 b2lkLCBPaWQgKnJlbGlkKTsKIAogaW50MnZlY3RvciogZmluZF9tdl9hdHRu dW1zKE9pZCBtdm9pZCwgT2lkICpyZWxpZCk7CiAKQEAgLTEyMiw2ICsyNDQs OCBAQCBleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2lu Zm8oUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gRGF0dW0gcGdfbXZfc3Rh dHNfZGVwZW5kZW5jaWVzX3Nob3coUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRl cm4gRGF0dW0gcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKFBHX0ZVTkNUSU9O X0FSR1MpOwogZXh0ZXJuIERhdHVtIHBnX212X21jdmxpc3RfaXRlbXMoUEdf RlVOQ1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfaGlz dG9ncmFtX2luZm8oUEdfRlVOQ1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0g cGdfbXZfaGlzdG9ncmFtX2J1Y2tldHMoUEdfRlVOQ1RJT05fQVJHUyk7CiAK IE1WRGVwZW5kZW5jaWVzCiBidWlsZF9tdl9kZXBlbmRlbmNpZXMoaW50IG51 bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCkBA IC0xMzEsMTAgKzI1NSwyMCBAQCBNQ1ZMaXN0CiBidWlsZF9tdl9tY3ZsaXN0 KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0 dHJzLAogCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50ICpudW1yb3dz X2ZpbHRlcmVkKTsKIAorTVZIaXN0b2dyYW0KK2J1aWxkX212X2hpc3RvZ3Jh bShpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICph dHRycywKKwkJCQkgICBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50IG51bXJv d3NfdG90YWwpOworCiB2b2lkIGJ1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9u ZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJCQkJaW50 IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwogCi12b2lk IHVwZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5jaWVzIGRl cGVuZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LAordm9pZCB1cGRhdGVfbXZf c3RhdHMoT2lkIHJlbGlkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMs CisJCQkJCSBNQ1ZMaXN0IG1jdmxpc3QsIE1WSGlzdG9ncmFtIGhpc3RvZ3Jh bSwKIAkJCQkJIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipz dGF0cyk7CiAKKyNpZmRlZiBERUJVR19NVkhJU1QKK2V4dGVybiB2b2lkIGRl YnVnX2hpc3RvZ3JhbV9tYXRjaGVzKE1WU2VyaWFsaXplZEhpc3RvZ3JhbSBt dmhpc3QsIGNoYXIgKm1hdGNoZXMpOworI2VuZGlmCisKKwogI2VuZGlmCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3Rv Z3JhbS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3Rv Z3JhbS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZTgzMDgxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbXZfaGlzdG9ncmFtLm91dApAQCAtMCwwICsxLDIwNyBAQAor LS0gZGF0YSB0eXBlIHBhc3NlZCBieSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG12 X2hpc3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAgYyBJ TlQKKyk7CistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1Mg czcgT04gbXZfaGlzdG9ncmFtICh1bmtub3duX2NvbHVtbikgV0lUSCAoaGlz dG9ncmFtKTsKK0VSUk9SOiAgY29sdW1uICJ1bmtub3duX2NvbHVtbiIgcmVm ZXJlbmNlZCBpbiBzdGF0aXN0aWNzIGRvZXMgbm90IGV4aXN0CistLSBzaW5n bGUgY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzNyBPTiBtdl9oaXN0b2dy YW0gKGEpIFdJVEggKGhpc3RvZ3JhbSk7CitFUlJPUjogIG11bHRpdmFyaWF0 ZSBzdGF0cyByZXF1aXJlIDIgb3IgbW9yZSBjb2x1bW5zCistLSBzaW5nbGUg Y29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzNyBPTiBt dl9oaXN0b2dyYW0gKGEsIGEpIFdJVEggKGhpc3RvZ3JhbSk7CitFUlJPUjog IGR1cGxpY2F0ZSBjb2x1bW4gbmFtZSBpbiBzdGF0aXN0aWNzIGRlZmluaXRp b24KKy0tIHR3byBjb2x1bW5zLCBvbmUgZHVwbGljYXRlZAorQ1JFQVRFIFNU QVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBhLCBiKSBXSVRIICho aXN0b2dyYW0pOworRVJST1I6ICBkdXBsaWNhdGUgY29sdW1uIG5hbWUgaW4g c3RhdGlzdGljcyBkZWZpbml0aW9uCistLSB1bmtub3duIG9wdGlvbgorQ1JF QVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBX SVRIICh1bmtub3duX29wdGlvbik7CitFUlJPUjogIHVucmVjb2duaXplZCBT VEFUSVNUSUNTIG9wdGlvbiAidW5rbm93bl9vcHRpb24iCistLSBtaXNzaW5n IGhpc3RvZ3JhbSBzdGF0aXN0aWNzCitDUkVBVEUgU1RBVElTVElDUyBzNyBP TiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGRlcGVuZGVuY2llcywg bWF4X2J1Y2tldHM9MjAwKTsKK0VSUk9SOiAgb3B0aW9uICdoaXN0b2dyYW0n IGlzIHJlcXVpcmVkIGJ5IG90aGVyIG9wdGlvbnMocykKKy0tIGludmFsaWQg bWF4X2J1Y2tldHMgdmFsdWUgLyB0b28gbG93CitDUkVBVEUgU1RBVElTVElD UyBzNyBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4 X2J1Y2tldHM9MTApOworRVJST1I6ICBtaW5pbXVtIG51bWJlciBvZiBidWNr ZXRzIGlzIDEyOAorLS0gaW52YWxpZCBtYXhfYnVja2V0cyB2YWx1ZSAvIHRv byBoaWdoCitDUkVBVEUgU1RBVElTVElDUyBzNyBPTiBtdl9oaXN0b2dyYW0g KGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4X2J1Y2tldHM9MTAwMDAwKTsKK0VS Uk9SOiAgbWF4aW11bSBudW1iZXIgb2YgYnVja2V0cyBpcyAxNjM4NAorLS0g Y29ycmVjdCBjb21tYW5kCitDUkVBVEUgU1RBVElTVElDUyBzNyBPTiBtdl9o aXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhpc3RvZ3JhbSk7CistLSByYW5k b20gZGF0YSAobm8gZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMpCitJTlNFUlQg SU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBt b2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwKSBzKGkpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitTRUxFQ1Qg aGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNz OworIGhpc3RfZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0CisoMSByb3cpCisK K1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKy0tIGEgPT4gYiwgYSA9PiBjLCBi ID0+IGMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1Qg aS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0 X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMg V0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7Cisg aGlzdF9lbmFibGVkIHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworVFJV TkNBVEUgbXZfaGlzdG9ncmFtOworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VS VCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAs IGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitB TkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhp c3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVs aWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVk IHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlz dG9ncmFtOworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRl eCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12 X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80 MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitD UkVBVEUgSU5ERVggaGlzdF9pZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsK K0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwg aGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJs ZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t CisgdCAgICAgICAgICAgIHwgdAorKDEgcm93KQorCitFWFBMQUlOIChDT1NU UyBvZmYpCisgU0VMRUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSA9 IDEwIEFORCBiID0gNTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gbXZfaGlz dG9ncmFtCisgICBSZWNoZWNrIENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1 KSkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBoaXN0X2lkeAorICAg ICAgICAgSW5kZXggQ29uZDogKChhID0gMTApIEFORCAoYiA9IDUpKQorKDQg cm93cykKKworRFJPUCBUQUJMRSBtdl9oaXN0b2dyYW07CistLSB2YXJsZW5h IHR5cGUgKHRleHQpCitDUkVBVEUgVEFCTEUgbXZfaGlzdG9ncmFtICgKKyAg ICBhIFRFWFQsCisgICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKK0NSRUFU RSBTVEFUSVNUSUNTIHM4IE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykgV0lU SCAoaGlzdG9ncmFtKTsKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFs IGRlcGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAg ICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpF IG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVp bHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn bXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwgaGlz dF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAg ICAgICAgICB8IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFt OworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gbXZf aGlzdG9ncmFtCisgICAgIFNFTEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZf aGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAor ICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9o aXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1 aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICAgIHwgdAorKDEgcm93KQorCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07Cist LSBhID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisg ICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOwor U0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpy ZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdAorKDEg cm93KQorCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CistLSBjaGVjayBleHBs YWluIChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRl eCBzY2FuKQorSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisgICAgIFNFTEVD VCBpLzEwMDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBoaXN0X2lkeCBP TiBtdl9oaXN0b2dyYW0gKGEsIGIpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07 CitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdf bXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6 OnJlZ2NsYXNzOworIGhpc3RfZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0Ciso MSByb3cpCisKK0VYUExBSU4gKENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9N IG12X2hpc3RvZ3JhbSBXSEVSRSBhID0gJzEwJyBBTkQgYiA9ICc1JzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAg U2NhbiBvbiBtdl9oaXN0b2dyYW0KKyAgIFJlY2hlY2sgQ29uZDogKChhID0g JzEwJzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBoaXN0X2lkeAorICAgICAgICAgSW5kZXggQ29u ZDogKChhID0gJzEwJzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyg0 IHJvd3MpCisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKy0tIGNoZWNrIGV4 cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGlu ZGV4IHNjYW4pIHdpdGggTlVMTHMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3Jh bQorICAgICBTRUxFQ1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAw IFRIRU4gTlVMTCBFTFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBX SEVOIGkvMjAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwK KyAgICAgICAoQ0FTRSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNF IGkvNDAwMDAgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwMDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBo aXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0 aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7 CisgaGlzdF9lbmFibGVkIHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKwor RVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gbXZfaGlzdG9n cmFtIFdIRVJFIGEgSVMgTlVMTCBBTkQgYiBJUyBOVUxMOworICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG12X2hpc3RvZ3JhbQorICAg UmVjaGVjayBDb25kOiAoKGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQor ICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIGhpc3RfaWR4CisgICAgICAg ICBJbmRleCBDb25kOiAoKGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQor KDQgcm93cykKKworRFJPUCBUQUJMRSBtdl9oaXN0b2dyYW07CistLSBOVUxM IHZhbHVlcyAobWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRF IFRBQkxFIG12X2hpc3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBURVhU LAorICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNU SUNTIHM5IE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYywgZCkgV0lUSCAoaGlz dG9ncmFtKTsKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxF Q1QKKyAgICAgICAgIG1vZChpLCAxMDApLAorICAgICAgICAgKENBU0UgV0hF TiBtb2QoaSwgMjAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksMjAwKSBF TkQpLAorICAgICAgICAgbW9kKGksIDQwMCksCisgICAgICAgICAoQ0FTRSBX SEVOIG1vZChpLCAzMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSw2MDAp IEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhp KTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxl ZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBz dGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2Vu YWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICAgIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxF IG12X2hpc3RvZ3JhbTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQKaW5kZXggM2Q1NWZmZS4uNTI4YWMzNiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzNzUs NyArMTM3NSw5IEBAIHBnX212X3N0YXRzfCBTRUxFQ1Qgbi5uc3BuYW1lIEFT IHNjaGVtYW5hbWUsCiAgICAgbGVuZ3RoKHMuc3RhZGVwcykgQVMgZGVwc2J5 dGVzLAogICAgIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKHMuc3Rh ZGVwcykgQVMgZGVwc2luZm8sCiAgICAgbGVuZ3RoKHMuc3RhbWN2KSBBUyBt Y3ZieXRlcywKLSAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5zdGFt Y3YpIEFTIG1jdmluZm8KKyAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8o cy5zdGFtY3YpIEFTIG1jdmluZm8sCisgICAgbGVuZ3RoKHMuc3RhaGlzdCkg QVMgaGlzdGJ5dGVzLAorICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZv KHMuc3RhaGlzdCkgQVMgaGlzdGluZm8KICAgIEZST00gKChwZ19tdl9zdGF0 aXN0aWMgcwogICAgICBKT0lOIHBnX2NsYXNzIGMgT04gKChjLm9pZCA9IHMu c3RhcmVsaWQpKSkKICAgICAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9O ICgobi5vaWQgPSBjLnJlbG5hbWVzcGFjZSkpKTsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9y ZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDg1ZDk0ZjEuLmE4ODUy MzUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZQpAQCAtMTEyLDQgKzExMiw0IEBAIHRlc3Q6IGV2ZW50X3RyaWdnZXIKIHRl c3Q6IHN0YXRzCiAKICMgcnVuIHRlc3RzIG9mIG11bHRpdmFyaWF0ZSBzdGF0 cwotdGVzdDogbXZfZGVwZW5kZW5jaWVzIG12X21jdgordGVzdDogbXZfZGVw ZW5kZW5jaWVzIG12X21jdiBtdl9oaXN0b2dyYW0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVn cmVzcy9zZXJpYWxfc2NoZWR1bGUKaW5kZXggNjU4NGQ3My4uMmVmZGNkNyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKQEAgLTE2 NCwzICsxNjQsNCBAQCB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBzdGF0 cwogdGVzdDogbXZfZGVwZW5kZW5jaWVzCiB0ZXN0OiBtdl9tY3YKK3Rlc3Q6 IG12X2hpc3RvZ3JhbQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvbXZfaGlzdG9ncmFtLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212 X2hpc3RvZ3JhbS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMjdjMjUxMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL212X2hpc3RvZ3JhbS5zcWwKQEAgLTAsMCArMSwxNzYgQEAK Ky0tIGRhdGEgdHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBt dl9oaXN0b2dyYW0gKAorICAgIGEgSU5ULAorICAgIGIgSU5ULAorICAgIGMg SU5UCispOworCistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJ Q1MgczcgT04gbXZfaGlzdG9ncmFtICh1bmtub3duX2NvbHVtbikgV0lUSCAo aGlzdG9ncmFtKTsKKworLS0gc2luZ2xlIGNvbHVtbgorQ1JFQVRFIFNUQVRJ U1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhKSBXSVRIIChoaXN0b2dyYW0p OworCistLSBzaW5nbGUgY29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RB VElTVElDUyBzNyBPTiBtdl9oaXN0b2dyYW0gKGEsIGEpIFdJVEggKGhpc3Rv Z3JhbSk7CisKKy0tIHR3byBjb2x1bW5zLCBvbmUgZHVwbGljYXRlZAorQ1JF QVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBhLCBiKSBX SVRIIChoaXN0b2dyYW0pOworCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRF IFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRI ICh1bmtub3duX29wdGlvbik7CisKKy0tIG1pc3NpbmcgaGlzdG9ncmFtIHN0 YXRpc3RpY3MKK0NSRUFURSBTVEFUSVNUSUNTIHM3IE9OIG12X2hpc3RvZ3Jh bSAoYSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzLCBtYXhfYnVja2V0cz0y MDApOworCistLSBpbnZhbGlkIG1heF9idWNrZXRzIHZhbHVlIC8gdG9vIGxv dworQ1JFQVRFIFNUQVRJU1RJQ1MgczcgT04gbXZfaGlzdG9ncmFtIChhLCBi LCBjKSBXSVRIIChtY3YsIG1heF9idWNrZXRzPTEwKTsKKworLS0gaW52YWxp ZCBtYXhfYnVja2V0cyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUgU1RBVElT VElDUyBzNyBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKG1jdiwg bWF4X2J1Y2tldHM9MTAwMDAwKTsKKworLS0gY29ycmVjdCBjb21tYW5kCitD UkVBVEUgU1RBVElTVElDUyBzNyBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMp IFdJVEggKGhpc3RvZ3JhbSk7CisKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5j dGlvbmFsIGRlcGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3Jh bQorICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2Qo aSwgMjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisK K0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVk LCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0 YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FU RSBtdl9oaXN0b2dyYW07CisKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMK K0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwg aS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMo aSk7CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9l bmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdI RVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitU UlVOQ0FURSBtdl9oaXN0b2dyYW07CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJ TlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAsIGkv MTUwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkp OworQU5BTFlaRSBtdl9oaXN0b2dyYW07CisKK1NFTEVDVCBoaXN0X2VuYWJs ZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUg c3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisKK1RSVU5D QVRFIG12X2hpc3RvZ3JhbTsKKworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0 IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lO U0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMDAwMCwg aS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MDApIHMoaSk7CitDUkVBVEUgSU5ERVggaGlzdF9pZHggT04gbXZfaGlzdG9n cmFtIChhLCBiKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1Qg aGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNz OworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtdl9o aXN0b2dyYW0gV0hFUkUgYSA9IDEwIEFORCBiID0gNTsKKworRFJPUCBUQUJM RSBtdl9oaXN0b2dyYW07CisKKy0tIHZhcmxlbmEgdHlwZSAodGV4dCkKK0NS RUFURSBUQUJMRSBtdl9oaXN0b2dyYW0gKAorICAgIGEgVEVYVCwKKyAgICBi IFRFWFQsCisgICAgYyBURVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBz OCBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhpc3RvZ3JhbSk7 CisKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgbW9k KGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZfaGlzdG9n cmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3Rv Z3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CisK Ky0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG12X2hp c3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZf aGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0 CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212 X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dy YW07CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBtdl9oaXN0 b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtdl9oaXN0 b2dyYW07CisKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAg RlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlz dG9ncmFtJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsK KworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2Fu LCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12X2hpc3Rv Z3JhbQorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUg SU5ERVggaGlzdF9pZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsKK0FOQUxZ WkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0 X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlk ID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NU UyBvZmYpCisgU0VMRUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSA9 ICcxMCcgQU5EIGIgPSAnNSc7CisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsK KworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2Fu LCBub3QgcGxhaW4gaW5kZXggc2Nhbikgd2l0aCBOVUxMcworSU5TRVJUIElO VE8gbXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVAorICAgICAgIChDQVNFIFdI RU4gaS8xMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0UgaS8xMDAwMCBFTkQpLAor ICAgICAgIChDQVNFIFdIRU4gaS8yMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0Ug aS8yMDAwMCBFTkQpLAorICAgICAgIChDQVNFIFdIRU4gaS80MDAwMCA9IDAg VEhFTiBOVUxMIEVMU0UgaS80MDAwMCBFTkQpCisgICAgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9n cmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3Rv Z3JhbSc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VM RUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSBJUyBOVUxMIEFORCBi IElTIE5VTEw7CisKK0RST1AgVEFCTEUgbXZfaGlzdG9ncmFtOworCistLSBO VUxMIHZhbHVlcyAobWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JF QVRFIFRBQkxFIG12X2hpc3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBU RVhULAorICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKKworQ1JFQVRFIFNU QVRJU1RJQ1MgczkgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjLCBkKSBXSVRI IChoaXN0b2dyYW0pOworCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAg ICAgU0VMRUNUCisgICAgICAgICBtb2QoaSwgMTAwKSwKKyAgICAgICAgIChD QVNFIFdIRU4gbW9kKGksIDIwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChp LDIwMCkgRU5EKSwKKyAgICAgICAgIG1vZChpLCA0MDApLAorICAgICAgICAg KENBU0UgV0hFTiBtb2QoaSwgMzAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9k KGksNjAwKSBFTkQpCisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDApIHMoaSk7CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1Qg aGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNz OworCitEUk9QIFRBQkxFIG12X2hpc3RvZ3JhbTsKLS0gCjIuNS4wCgo= --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename="0004-multivariate-MCV-lists.patch" Content-Type: text/x-patch; name="0004-multivariate-MCV-lists.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5Nzg2MjU2ZDRkZWM5YjNkNmVhOTBlYmJiZWViZDQxNTY4NDUzYjFi IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE2 OjUyOjE1ICswMjAwClN1YmplY3Q6IFtQQVRDSCA0LzldIG11bHRpdmFyaWF0 ZSBNQ1YgbGlzdHMKCi0gZXh0ZW5kcyB0aGUgcGdfbXZfc3RhdGlzdGljIGNh dGFsb2cgKGFkZCAnbWN2JyBmaWVsZHMpCi0gYnVpbGRpbmcgdGhlIE1DViBs aXN0cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxl IHBsYW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRl c3RzLCBtb3N0bHkgZXF1YWwgdG8gcmVncmVzc2lvbiB0ZXN0cyBmb3IKZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfc3RhdGlzdGljcy5zZ21sIHwgICA0MyArKwogc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgIHwgICAgNCArLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgICAgICAgIHwgICA0NSArLQog c3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgIHwgICAg MiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyAg fCAgODE0ICsrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgIDQgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgICAgICB8ICAgIDIgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLm1jdiAgICB8ICAxMzcg KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMg IHwgICA4OSArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9u LmMgICAgICB8ICAxMzMgKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9jb21tb24uaCAgICAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9tY3YuYyAgICAgICAgIHwgMTEyMCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAg ICAgICAgICAgICAgfCAgIDI1ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X212X3N0YXRpc3RpYy5oICAgfCAgIDE4ICstCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuaCAgICAgICAgICAgfCAgICA0ICsKIHNyYy9pbmNsdWRl L25vZGVzL3JlbGF0aW9uLmggICAgICAgICAgICB8ICAgIDIgKwogc3JjL2lu Y2x1ZGUvdXRpbHMvbXZzdGF0cy5oICAgICAgICAgICAgIHwgICA2OSArLQog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9tY3Yub3V0ICAgIHwgIDIw NyArKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 ICAgICB8ICAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFs X3NjaGVkdWxlICAgICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvbXZfbWN2LnNxbCAgICAgICAgIHwgIDE3OCArKysrKwogMjIgZmlsZXMg Y2hhbmdlZCwgMjg0NyBpbnNlcnRpb25zKCspLCA3MyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L1JFQURNRS5tY3YKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91 dGlscy9tdnN0YXRzL21jdi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9tdl9tY3Yub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfbWN2LnNxbAoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbApp bmRleCBmZjA5ZmE1Li5kNjk3M2U4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xMzIsNiArMTMy LDI0IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNUUyBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX25hCiAg ICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPm1heF9tY3ZfaXRlbXM8 Lz4gKDx0eXBlPmludGVnZXI8Lz4pPC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJlciBvZiBNQ1YgbGlz dCBpdGVtcy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT48bGl0ZXJhbD5tY3Y8Lz4gKDx0eXBlPmJvb2xlYW48Lz4pPC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBFbmFibGVzIE1D ViBsaXN0IGZvciB0aGUgc3RhdGlzdGljcy4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPC92YXJp YWJsZWxpc3Q+CiAKICAgPC9yZWZzZWN0Mj4KQEAgLTE3Nyw2ICsxOTUsMzEg QEAgRVhQTEFJTiBBTkFMWVpFIFNFTEVDVCAqIEZST00gdDEgV0hFUkUgKGEg PSAxKSBBTkQgKGIgPSAyKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgIDwvcGFy YT4KIAorICA8cGFyYT4KKyAgIENyZWF0ZSB0YWJsZSA8c3RydWN0bmFtZT50 MjwvPiB3aXRoIHR3byBwZXJmZWN0bHkgY29ycmVsYXRlZCBjb2x1bW5zCisg ICAoY29udGFpbmluZyBpZGVudGljYWwgZGF0YSksIGFuZCBhIE1DViBsaXN0 IG9uIHRob3NlIGNvbHVtbnM6CisKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFU RSBUQUJMRSB0MiAoCisgICAgYSAgIGludCwKKyAgICBiICAgaW50CispOwor CitJTlNFUlQgSU5UTyB0MiBTRUxFQ1QgbW9kKGksMTAwKSwgbW9kKGksMTAw KQorICAgICAgICAgICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwMDApIHMoaSk7CisKK0NSRUFURSBTVEFUSVNUSUNTIHMyIE9OIHQyIChh LCBiKSBXSVRIIChtY3YpOworCitBTkFMWVpFIHQyOworCistLSB2YWxpZCBj b21iaW5hdGlvbiAoZm91bmQgaW4gTUNWKQorRVhQTEFJTiBBTkFMWVpFIFNF TEVDVCAqIEZST00gdDIgV0hFUkUgKGEgPSAxKSBBTkQgKGIgPSAxKTsKKwor LS0gaW52YWxpZCBjb21iaW5hdGlvbiAobm90IGZvdW5kIGluIE1DVikKK0VY UExBSU4gQU5BTFlaRSBTRUxFQ1QgKiBGUk9NIHQyIFdIRVJFIChhID0gMSkg QU5EIChiID0gMik7Cis8L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisK ICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDMxZGJiMmMuLjVj NDAzMzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X3ZpZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKQEAgLTE2NSw3ICsxNjUsOSBAQCBDUkVBVEUgVklFVyBwZ19t dl9zdGF0cyBBUwogICAgICAgICBTLnN0YW5hbWUgQVMgc3RhbmFtZSwKICAg ICAgICAgUy5zdGFrZXlzIEFTIGF0dG51bXMsCiAgICAgICAgIGxlbmd0aChT LnN0YWRlcHMpIGFzIGRlcHNieXRlcywKLSAgICAgICAgcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX2luZm8oUy5zdGFkZXBzKSBhcyBkZXBzaW5mbworICAg ICAgICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhTLnN0YWRlcHMp IGFzIGRlcHNpbmZvLAorICAgICAgICBsZW5ndGgoUy5zdGFtY3YpIEFTIG1j dmJ5dGVzLAorICAgICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oUy5z dGFtY3YpIEFTIG1jdmluZm8KICAgICBGUk9NIChwZ19tdl9zdGF0aXN0aWMg UyBKT0lOIHBnX2NsYXNzIEMgT04gKEMub2lkID0gUy5zdGFyZWxpZCkpCiAg ICAgICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgTiBPTiAoTi5vaWQgPSBD LnJlbG5hbWVzcGFjZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3N0YXRzY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Rh dHNjbWRzLmMKaW5kZXggZjQzYjA1My4uYzQ4MGZiZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKQEAgLTcwLDcgKzcwLDEzIEBA IENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10KQogCU9i amVjdEFkZHJlc3MgcGFyZW50b2JqZWN0LCBjaGlsZG9iamVjdDsKIAogCS8q IGJ5IGRlZmF1bHQgYnVpbGQgbm90aGluZyAqLwotCWJvb2wgCWJ1aWxkX2Rl cGVuZGVuY2llcyA9IGZhbHNlOworCWJvb2wgCWJ1aWxkX2RlcGVuZGVuY2ll cyA9IGZhbHNlLAorCQkJYnVpbGRfbWN2ID0gZmFsc2U7CisKKwlpbnQzMiAJ bWF4X21jdl9pdGVtcyA9IC0xOworCisJLyogb3B0aW9ucyByZXF1aXJlZCBi ZWNhdXNlIG9mIG90aGVyIG9wdGlvbnMgKi8KKwlib29sCXJlcXVpcmVfbWN2 ID0gZmFsc2U7CiAKIAlBc3NlcnQoSXNBKHN0bXQsIENyZWF0ZVN0YXRzU3Rt dCkpOwogCkBAIC0xNDYsNiArMTUyLDI5IEBAIENyZWF0ZVN0YXRpc3RpY3Mo Q3JlYXRlU3RhdHNTdG10ICpzdG10KQogCiAJCWlmIChzdHJjbXAob3B0LT5k ZWZuYW1lLCAiZGVwZW5kZW5jaWVzIikgPT0gMCkKIAkJCWJ1aWxkX2RlcGVu ZGVuY2llcyA9IGRlZkdldEJvb2xlYW4ob3B0KTsKKwkJZWxzZSBpZiAoc3Ry Y21wKG9wdC0+ZGVmbmFtZSwgIm1jdiIpID09IDApCisJCQlidWlsZF9tY3Yg PSBkZWZHZXRCb29sZWFuKG9wdCk7CisJCWVsc2UgaWYgKHN0cmNtcChvcHQt PmRlZm5hbWUsICJtYXhfbWN2X2l0ZW1zIikgPT0gMCkKKwkJeworCQkJbWF4 X21jdl9pdGVtcyA9IGRlZkdldEludDMyKG9wdCk7CisKKwkJCS8qIHRoaXMg b3B0aW9uIHJlcXVpcmVzICdtY3YnIHRvIGJlIGVuYWJsZWQgKi8KKwkJCXJl cXVpcmVfbWN2ID0gdHJ1ZTsKKworCQkJLyogc2FuaXR5IGNoZWNrICovCisJ CQlpZiAobWF4X21jdl9pdGVtcyA8IE1WU1RBVF9NQ1ZMSVNUX01JTl9JVEVN UykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygibWF4IG51bWJlciBv ZiBNQ1YgaXRlbXMgbXVzdCBiZSBhdCBsZWFzdCAlZCIsCisJCQkJCQkJCU1W U1RBVF9NQ1ZMSVNUX01JTl9JVEVNUykpKTsKKworCQkJZWxzZSBpZiAobWF4 X21jdl9pdGVtcyA+IE1WU1RBVF9NQ1ZMSVNUX01BWF9JVEVNUykKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCQkJIGVycm1zZygibWF4IG51bWJlciBvZiBNQ1YgaXRl bXMgaXMgJWQiLAorCQkJCQkJCQlNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMp KSk7CisKKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC0xNTQsMTAgKzE4 MywxNiBAQCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3Rt dCkKIAl9CiAKIAkvKiBjaGVjayB0aGF0IGF0IGxlYXN0IHNvbWUgc3RhdGlz dGljcyB3ZXJlIHJlcXVlc3RlZCAqLwotCWlmICghIGJ1aWxkX2RlcGVuZGVu Y2llcykKKwlpZiAoISAoYnVpbGRfZGVwZW5kZW5jaWVzIHx8IGJ1aWxkX21j dikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkJCSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlw ZSAoZGVwZW5kZW5jaWVzLCBtY3YpIHdhcyByZXF1ZXN0ZWQiKSkpOworCisJ Lyogbm93IGRvIHNvbWUgY2hlY2tpbmcgb2YgdGhlIG9wdGlvbnMgKi8KKwlp ZiAocmVxdWlyZV9tY3YgJiYgKCEgYnVpbGRfbWN2KSkKIAkJZXJlcG9ydChF UlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0J CQkJIGVycm1zZygibm8gc3RhdGlzdGljcyB0eXBlIChkZXBlbmRlbmNpZXMp IHdhcyByZXF1ZXN0ZWQiKSkpOworCQkJCSBlcnJtc2coIm9wdGlvbiAnbWN2 JyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpIikpKTsKIAogCS8q IHNvcnQgdGhlIGF0dG51bXMgYW5kIGJ1aWxkIGludDJ2ZWN0b3IgKi8KIAlx c29ydChhdHRudW1zLCBudW1jb2xzLCBzaXplb2YoaW50MTYpLCBjb21wYXJl X2ludDE2KTsKQEAgLTE3OCw4ICsyMTMsMTIgQEAgQ3JlYXRlU3RhdGlzdGlj cyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJdmFsdWVzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWtleXMgLTFdID0gUG9pbnRlckdldERhdHVtKHN0YWtl eXMpOwogCiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfZW5h YmxlZCAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRfZGVwZW5kZW5jaWVzKTsK Kwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2VuYWJsZWQgIC0x XSA9IEJvb2xHZXREYXR1bShidWlsZF9tY3YpOworCisJdmFsdWVzW0FudW1f cGdfbXZfc3RhdGlzdGljX21jdl9tYXhfaXRlbXMgICAgLTFdID0gSW50MzJH ZXREYXR1bShtYXhfbWN2X2l0ZW1zKTsKIAogCW51bGxzW0FudW1fcGdfbXZf c3RhdGlzdGljX3N0YWRlcHMgIC0xXSA9IHRydWU7CisJbnVsbHNbQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhbWN2ICAgLTFdID0gdHJ1ZTsKIAogCS8qIGlu c2VydCB0aGUgdHVwbGUgaW50byBwZ19tdl9zdGF0aXN0aWMgKi8KIAltdnN0 YXRyZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNSZWxhdGlvbklkLCBSb3dF eGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmlu ZGV4IDA3MjA2ZDcuLjMzM2UyNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYwpAQCAtMjE2Miw5ICsyMTYyLDExIEBAIF9vdXRNVlN0YXRpc3Rp Y0luZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IE1WU3RhdGlzdGljSW5mbyAq bm9kZSkKIAogCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCVdSSVRFX0JP T0xfRklFTEQoZGVwc19lbmFibGVkKTsKKwlXUklURV9CT09MX0ZJRUxEKG1j dl9lbmFibGVkKTsKIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNz ICovCiAJV1JJVEVfQk9PTF9GSUVMRChkZXBzX2J1aWx0KTsKKwlXUklURV9C T09MX0ZJRUxEKG1jdl9idWlsdCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmlu ZGV4IDVhYjdmMTUuLjdmYzBjNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCkBAIC0xNSw2ICsxNSw3IEBA CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9z eXNhdHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAi bm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVz ZXMuaCIKQEAgLTQ3LDE4ICs0OCwzOSBAQCBzdGF0aWMgdm9pZCBhZGRSYW5n ZUNsYXVzZShSYW5nZVF1ZXJ5Q2xhdXNlICoqcnFsaXN0LCBOb2RlICpjbGF1 c2UsCiAJCQkgICBib29sIHZhcm9ubGVmdCwgYm9vbCBpc0xUc2VsLCBTZWxl Y3Rpdml0eSBzMik7CiAKICNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX0ZERVAJ CTB4MDEKKyNkZWZpbmUJCU1WX0NMQVVTRV9UWVBFX01DVgkJMHgwMgogCi1z dGF0aWMgYm9vbCBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShOb2RlICpjbGF1 c2UsIEluZGV4IHJlbGlkLCBBdHRyTnVtYmVyICphdHRudW0pOworc3RhdGlj IGJvb2wgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoTm9kZSAqY2xhdXNlLCBJ bmRleCByZWxpZCwgQml0bWFwc2V0ICoqYXR0bnVtcywKKwkJCQkJCQkgaW50 IHR5cGUpOwogCi1zdGF0aWMgQml0bWFwc2V0ICAqY29sbGVjdF9tdl9hdHRu dW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKK3N0YXRpYyBCaXRt YXBzZXQgICpjb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5k ZXggcmVsaWQsIGludCB0eXBlKTsKIAotc3RhdGljIGludCBjb3VudF9tdl9h dHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKK3N0YXRpYyBp bnQgY291bnRfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRleCByZWxp ZCwgaW50IHR5cGUpOwogCiBzdGF0aWMgaW50IGNvdW50X3Zhcm5vcyhMaXN0 ICpjbGF1c2VzLCBJbmRleCAqcmVsaWQpOwogCiBzdGF0aWMgTGlzdCAqY2xh dXNlbGlzdF9hcHBseV9kZXBlbmRlbmNpZXMoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmNsYXVzZXMsCiAJCQkJCQkJCQlJbmRleCByZWxpZCwgTGlzdCAq c3RhdHMpOwogCitzdGF0aWMgTVZTdGF0aXN0aWNJbmZvICpjaG9vc2VfbXZf c3RhdGlzdGljcyhMaXN0ICptdnN0YXRzLCBCaXRtYXBzZXQgKmF0dG51bXMp OworCitzdGF0aWMgTGlzdCAqY2xhdXNlbGlzdF9tdl9zcGxpdChQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXggcmVsaWQsCisJCQkJCQkJCSBMaXN0ICpjbGF1 c2VzLCBMaXN0ICoqbXZjbGF1c2VzLAorCQkJCQkJCQkgTVZTdGF0aXN0aWNJ bmZvICptdnN0YXRzLCBpbnQgdHlwZXMpOworCitzdGF0aWMgU2VsZWN0aXZp dHkgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAq bXZzdGF0cyk7CisKK3N0YXRpYyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X212 X3NlbGVjdGl2aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJ CQkJCQlMaXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMs CisJCQkJCQkJCQlib29sICpmdWxsbWF0Y2gsIFNlbGVjdGl2aXR5ICpsb3dz ZWwpOworCitzdGF0aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlz dChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJ CWludDJ2ZWN0b3IgKnN0YWtleXMsIE1DVkxpc3QgbWN2bGlzdCwKKwkJCQkJ CQkJCWludCBubWF0Y2hlcywgY2hhciAqIG1hdGNoZXMsCisJCQkJCQkJCQlT ZWxlY3Rpdml0eSAqbG93c2VsLCBib29sICpmdWxsbWF0Y2gsCisJCQkJCQkJ CQlib29sIGlzX29yKTsKKwogc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3Qg KnN0YXRzLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0 cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOwpAQCAtNjYsNiAr ODgsMTMgQEAgc3RhdGljIExpc3QgKiBmaW5kX3N0YXRzKFBsYW5uZXJJbmZv ICpyb290LCBJbmRleCByZWxpZCk7CiBzdGF0aWMgYm9vbCBzdGF0c190eXBl X21hdGNoZXMoTVZTdGF0aXN0aWNJbmZvICpzdGF0LCBpbnQgdHlwZSk7CiAK IAorLyogdXNlZCBmb3IgbWVyZ2luZyBiaXRtYXBzIC0gQU5EIChtaW4pLCBP UiAobWF4KSAqLworI2RlZmluZSBNQVgoeCwgeSkgKCgoeCkgPiAoeSkpID8g KHgpIDogKHkpKQorI2RlZmluZSBNSU4oeCwgeSkgKCgoeCkgPCAoeSkpID8g KHgpIDogKHkpKQorCisjZGVmaW5lIFVQREFURV9SRVNVTFQobSxyLGlzb3Ip CVwKKwkobSkgPSAoaXNvcikgPyAoTUFYKG0scikpIDogKE1JTihtLHIpKQor CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCVJPVVRJ TkVTIFRPIENPTVBVVEUgU0VMRUNUSVZJVElFUwogICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCkBAIC05MSwxMSArMTIwLDEzIEBAIHN0YXRp YyBib29sIHN0YXRzX3R5cGVfbWF0Y2hlcyhNVlN0YXRpc3RpY0luZm8gKnN0 YXQsIGludCB0eXBlKTsKICAqIHRvIHZlcmlmeSB0aGF0IHN1aXRhYmxlIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIGV4aXN0LgogICoKICAqIElmIHdlIGlk ZW50aWZ5IHN1Y2ggbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgYXBwbHksIHdl IHRyeSB0byBhcHBseSB0aGVtLgotICogQ3VycmVudGx5IHdlIG9ubHkgaGF2 ZSAoc29mdCkgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIHNvIHdlIHRyeSB0 byByZWR1Y2UKLSAqIHRoZSBsaXN0IG9mIGNsYXVzZXMuCiAgKgotICogVGhl biB3ZSByZW1vdmUgdGhlIGNsYXVzZXMgZXN0aW1hdGVkIHVzaW5nIG11bHRp dmFyaWF0ZSBzdGF0cywgYW5kIHByb2Nlc3MKLSAqIHRoZSByZXN0IG9mIHRo ZSBjbGF1c2VzIHVzaW5nIHRoZSByZWd1bGFyIHBlci1jb2x1bW4gc3RhdHMu CisgKiBGaXJzdCB3ZSB0cnkgdG8gcmVkdWNlIHRoZSBsaXN0IG9mIGNsYXVz ZXMgYnkgYXBwbHlpbmcgKHNvZnQpIGZ1bmN0aW9uYWwKKyAqIGRlcGVuZGVu Y2llcywgYW5kIHRoZW4gd2UgdHJ5IHRvIGVzdGltYXRlIHRoZSBzZWxlY3Rp dml0eSBvZiB0aGUgcmVkdWNlZAorICogbGlzdCBvZiBjbGF1c2VzIHVzaW5n IHRoZSBtdWx0aXZhcmlhdGUgTUNWIGxpc3QuCisgKgorICogRmluYWxseSB3 ZSByZW1vdmUgdGhlIHBvcnRpb24gb2YgY2xhdXNlcyBlc3RpbWF0ZWQgdXNp bmcgbXVsdGl2YXJpYXRlIHN0YXRzLAorICogYW5kIHByb2Nlc3MgdGhlIHJl c3Qgb2YgdGhlIGNsYXVzZXMgdXNpbmcgdGhlIHJlZ3VsYXIgcGVyLWNvbHVt biBzdGF0cy4KICAqCiAgKiBDdXJyZW50bHksIHRoZSBvbmx5IGV4dHJhIHNt YXJ0cyB3ZSBoYXZlIGlzIHRvIHJlY29nbml6ZSAicmFuZ2UgcXVlcmllcyIs CiAgKiBzdWNoIGFzICJ4ID4gMzQgQU5EIHggPCA0MiIuICBDbGF1c2VzIGFy ZSByZWNvZ25pemVkIGFzIHBvc3NpYmxlIHJhbmdlCkBAIC0xNzIsMTIgKzIw Myw0NiBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpy b290LAogCSAqIHRoYXQgbmVlZCB0byBiZSBlc3RpbWF0ZWQgYnkgb3RoZXIg dHlwZXMgb2Ygc3RhdHMgKE1DViwgaGlzdG9ncmFtcyBldGMpLgogCSAqLwog CWlmIChoYXNfc3RhdHMoc3RhdHMsIE1WX0NMQVVTRV9UWVBFX0ZERVApICYm Ci0JCShjb3VudF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkKSA+PSAyKSkK KwkJKGNvdW50X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsIE1WX0NMQVVT RV9UWVBFX0ZERVApID49IDIpKQogCXsKIAkJY2xhdXNlcyA9IGNsYXVzZWxp c3RfYXBwbHlfZGVwZW5kZW5jaWVzKHJvb3QsIGNsYXVzZXMsIHJlbGlkLCBz dGF0cyk7CiAJfQogCiAJLyoKKwkgKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBz dGF0aXN0aWNzIHdpdGggTUNWIGxpc3Qgb3IgaGlzdG9ncmFtLCBhbmQgYWxz byB0aGUKKwkgKiBudW1iZXIgb2YgYXR0cmlidXRlcyBjb3ZlcmVkIGJ5IHRo ZXNlIHR5cGVzIG9mIHN0YXRpc3RpY3MuCisJICoKKwkgKiBJZiB0aGVyZSBh cmUgbm8gc3VjaCBzdGF0cyBvciBub3QgZW5vdWdoIGF0dHJpYnV0ZXMsIGRv bid0IHdhc3RlIHRpbWUKKwkgKiB3aXRoIHRoZSBtdWx0aXZhcmlhdGUgY29k ZSBhbmQgc2ltcGx5IHNraXAgdG8gZXN0aW1hdGlvbiB1c2luZyB0aGUKKwkg KiByZWd1bGFyIHBlci1jb2x1bW4gc3RhdHMuCisJICovCisJaWYgKGhhc19z dGF0cyhzdGF0cywgTVZfQ0xBVVNFX1RZUEVfTUNWKSAmJgorCQkoY291bnRf bXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCwgTVZfQ0xBVVNFX1RZUEVfTUNW KSA+PSAyKSkKKwl7CisJCS8qIGNvbGxlY3QgYXR0cmlidXRlcyBmcm9tIHRo ZSBjb21wYXRpYmxlIGNvbmRpdGlvbnMgKi8KKwkJQml0bWFwc2V0ICptdmF0 dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsIE1W X0NMQVVTRV9UWVBFX01DVik7CisKKwkJLyogYW5kIHNlYXJjaCBmb3IgdGhl IHN0YXRpc3RpYyBjb3ZlcmluZyB0aGUgbW9zdCBhdHRyaWJ1dGVzICovCisJ CU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0ID0gY2hvb3NlX212X3N0YXRpc3Rp Y3Moc3RhdHMsIG12YXR0bnVtcyk7CisKKwkJaWYgKG12c3RhdCAhPSBOVUxM KQkvKiB3ZSBoYXZlIGEgbWF0Y2hpbmcgc3RhdHMgKi8KKwkJeworCQkJLyog Y2xhdXNlcyBjb21wYXRpYmxlIHdpdGggbXVsdGktdmFyaWF0ZSBzdGF0cyAq LworCQkJTGlzdAkqbXZjbGF1c2VzID0gTklMOworCisJCQkvKiBzcGxpdCB0 aGUgY2xhdXNlbGlzdCBpbnRvIHJlZ3VsYXIgYW5kIG12LWNsYXVzZXMgKi8K KwkJCWNsYXVzZXMgPSBjbGF1c2VsaXN0X212X3NwbGl0KHJvb3QsIHJlbGlk LCBjbGF1c2VzLCAmbXZjbGF1c2VzLAorCQkJCQkJCQkJCSAgbXZzdGF0LCBN Vl9DTEFVU0VfVFlQRV9NQ1YpOworCisJCQkvKiB3ZSd2ZSBjaG9zZW4gdGhl IGhpc3RvZ3JhbSB0byBtYXRjaCB0aGUgY2xhdXNlcyAqLworCQkJQXNzZXJ0 KG12Y2xhdXNlcyAhPSBOSUwpOworCisJCQkvKiBjb21wdXRlIHRoZSBtdWx0 aXZhcmlhdGUgc3RhdHMgKi8KKwkJCXMxICo9IGNsYXVzZWxpc3RfbXZfc2Vs ZWN0aXZpdHkocm9vdCwgbXZjbGF1c2VzLCBtdnN0YXQpOworCQl9CisJfQor CisJLyoKIAkgKiBJbml0aWFsIHNjYW4gb3ZlciBjbGF1c2VzLiAgQW55dGhp bmcgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHBvdGVudGlhbAogCSAqIHJh bmdlcXVlcnkgY2xhdXNlIGdldHMgbXVsdGlwbGllZCBpbnRvIHMxIGFuZCBm b3Jnb3R0ZW4uIEFueXRoaW5nIHRoYXQKIAkgKiBkb2VzIGdldHMgaW5zZXJ0 ZWQgaW50byBhbiBycWxpc3QgZW50cnkuCkBAIC04MzQsMzIgKzg5OSw5MyBA QCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJcmV0 dXJuIHMxOwogfQogCisKKy8qCisgKiBlc3RpbWF0ZSBzZWxlY3Rpdml0eSBv ZiBjbGF1c2VzIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWMKKyAqCisg KiBQZXJmb3JtIGVzdGltYXRpb24gb2YgdGhlIGNsYXVzZXMgdXNpbmcgYSBN Q1YgbGlzdC4KKyAqCisgKiBUaGlzIGFzc3VtZXMgYWxsIHRoZSBjbGF1c2Vz IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIHN0YXRpc3RpY3MK KyAqIChlLmcuIG9ubHkgcmVmZXJlbmNlIGNvbHVtbnMgY292ZXJlZCBieSB0 aGUgc3RhdGlzdGljcywgdXNlIHN1cHBvcnRlZAorICogb3BlcmF0b3IsIGV0 Yy4pLgorICoKKyAqIFRPRE8gV2UgbWF5IHN1cHBvcnQgc29tZSBhZGRpdGlv bmFsIGNvbmRpdGlvbnMsIG1vc3QgaW1wb3J0YW50bHkgdGhvc2UKKyAqICAg ICAgbWF0Y2hpbmcgbXVsdGlwbGUgY29sdW1ucyAoZS5nLiAiYSA9IGIiIG9y ICJhIDwgYiIpLgorICoKKyAqIFRPRE8gQ2xhbXAgdGhlIHNlbGVjdGl2aXR5 IGJ5IG1pbiBvZiB0aGUgcGVyLWNsYXVzZSBzZWxlY3Rpdml0aWVzIChpLmUu IHRoZQorICogICAgICBzZWxlY3Rpdml0eSBvZiB0aGUgbW9zdCByZXN0cmlj dGl2ZSBjbGF1c2UpLCBiZWNhdXNlIHRoYXQncyB0aGUgbWF4aW11bQorICog ICAgICB3ZSBjYW4gZXZlciBnZXQgZnJvbSBBTkRlZCBsaXN0IG9mIGNsYXVz ZXMuIFRoaXMgbWF5IHByb2JhYmx5IHByZXZlbnQKKyAqICAgICAgaXNzdWVz IHdpdGggaGl0dGluZyB0b28gbWFueSBidWNrZXRzIGFuZCBsb3cgcHJlY2lz aW9uIGhpc3RvZ3JhbXMuCisgKgorICogVE9ETyBXZSBtYXkgcmVtZW1iZXIg dGhlIGxvd2VzdCBmcmVxdWVuY3kgaW4gdGhlIE1DViBsaXN0LCBhbmQgdGhl biBsYXRlciB1c2UKKyAqICAgICAgaXQgYXMgYSB1cHBlciBib3VuZGFyeSBm b3IgdGhlIHNlbGVjdGl2aXR5IChoYWQgdGhlcmUgYmVlbiBhIG1vcmUKKyAq ICAgICAgZnJlcXVlbnQgaXRlbSwgaXQnZCBiZSBpbiB0aGUgTUNWIGxpc3Qp LiBUaGlzIG1pZ2h0IGltcHJvdmUgY2FzZXMgd2l0aAorICogICAgICBsb3ct ZGV0YWlsIGhpc3RvZ3JhbXMuCisgKgorICogVE9ETyBXZSBtYXkgYWxzbyBk ZXJpdmUgc29tZSBhZGRpdGlvbmFsIGJvdW5kYXJpZXMgZm9yIHRoZSBzZWxl Y3Rpdml0eSBmcm9tCisgKiAgICAgIHRoZSBNQ1YgbGlzdCwgYmVjYXVzZQor ICoKKyAqICAgICAgKGEpIGlmIHdlIGhhdmUgYSAiZnVsbCBlcXVhbGl0eSBj b25kaXRpb24iIChvbmUgZXF1YWxpdHkgY29uZGl0aW9uIG9uCisgKiAgICAg ICAgICBlYWNoIGNvbHVtbiBvZiB0aGUgc3RhdGlzdGljKSBhbmQgd2UgZm91 bmQgYSBtYXRjaCBpbiB0aGUgTUNWIGxpc3QsCisgKiAgICAgICAgICB0aGVu IHRoaXMgaXMgdGhlIGZpbmFsIHNlbGVjdGl2aXR5IChhbmQgcHJldHR5IGFj Y3VyYXRlKSwKKyAqCisgKiAgICAgIChiKSBpZiB3ZSBoYXZlIGEgImZ1bGwg ZXF1YWxpdHkgY29uZGl0aW9uIiBhbmQgd2UgaGF2ZW4ndCBmb3VuZCBhIG1h dGNoCisgKiAgICAgICAgICBpbiB0aGUgTUNWIGxpc3QsIHRoZW4gdGhlIHNl bGVjdGl2aXR5IGlzIGJlbG93IHRoZSBsb3dlc3QgZnJlcXVlbmN5CisgKiAg ICAgICAgICBmb3VuZCBpbiB0aGUgTUNWIGxpc3QsCisgKgorICogVE9ETyBX aGVuIGFwcGx5aW5nIHRoZSBjbGF1c2VzIHRvIHRoZSBoaXN0b2dyYW0vTUNW IGxpc3QsIHdlIGNhbiBkbworICogICAgICB0aGF0IGZyb20gdGhlIG1vc3Qg c2VsZWN0aXZlIGNsYXVzZXMgZmlyc3QsIGJlY2F1c2UgdGhhdCdsbAorICog ICAgICBlbGltaW5hdGUgdGhlIGJ1Y2tldHMvaXRlbXMgc29vbmVyIChzbyB3 ZSdsbCBiZSBhYmxlIHRvIHNraXAKKyAqICAgICAgdGhlbSB3aXRob3V0IGlu c3BlY3Rpb24sIHdoaWNoIGlzIG1vcmUgZXhwZW5zaXZlKS4gQnV0IHRoaXMK KyAqICAgICAgcmVxdWlyZXMgcmVhbGx5IGtub3dpbmcgdGhlIHBlci1jbGF1 c2Ugc2VsZWN0aXZpdGllcyBpbiBhZHZhbmNlLAorICogICAgICBhbmQgdGhh dCdzIG5vdCB3aGF0IHdlIGRvIG5vdy4KKyAqLworc3RhdGljIFNlbGVjdGl2 aXR5CitjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMp Cit7CisJYm9vbCBmdWxsbWF0Y2ggPSBmYWxzZTsKKworCS8qCisJICogTG93 ZXN0IGZyZXF1ZW5jeSBpbiB0aGUgTUNWIGxpc3QgKG1heSBiZSB1c2VkIGFz IGFuIHVwcGVyIGJvdW5kCisJICogZm9yIGZ1bGwgZXF1YWxpdHkgY29uZGl0 aW9ucyB0aGF0IGRpZCBub3QgbWF0Y2ggYW55IE1DViBpdGVtKS4KKwkgKi8K KwlTZWxlY3Rpdml0eSBtY3ZfbG93ID0gMC4wOworCisJLyogVE9ETyBFdmFs dWF0ZSBzaW1wbGUgMUQgc2VsZWN0aXZpdGllcywgdXNlIHRoZSBzbWFsbGVz dCBvbmUgYXMKKwkgKiAgICAgIGFuIHVwcGVyIGJvdW5kLCBwcm9kdWN0IGFz IGxvd2VyIGJvdW5kLCBhbmQgc29ydCB0aGUKKwkgKiAgICAgIGNsYXVzZXMg aW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHNlbGVjdGl2aXR5ICh0byBvcHRpbWl6 ZSB0aGUKKwkgKiAgICAgIE1DVi9oaXN0b2dyYW0gZXZhbHVhdGlvbikuCisJ ICovCisKKwkvKiBFdmFsdWF0ZSB0aGUgTUNWIHNlbGVjdGl2aXR5ICovCisJ cmV0dXJuIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfbWN2bGlzdChyb290 LCBjbGF1c2VzLCBtdnN0YXRzLAorCQkJCQkJCQkJCSAgICZmdWxsbWF0Y2gs ICZtY3ZfbG93KTsKK30KKwogLyoKICAqIENvbGxlY3QgYXR0cmlidXRlcyBm cm9tIG12LWNvbXBhdGlibGUgY2xhdXNlcy4KICAqLwogc3RhdGljIEJpdG1h cHNldCAqCi1jb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5k ZXggcmVsaWQpCitjb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywg SW5kZXggcmVsaWQsIGludCB0eXBlcykKIHsKIAlCaXRtYXBzZXQgICphdHRu dW1zID0gTlVMTDsKIAlMaXN0Q2VsbCAgICpsOwogCiAJLyoKLQkgKiBXYWxr IHRocm91Z2ggdGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdl IGNhbiBlc3RpbWF0ZQotCSAqIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywg YW5kIHJlbWVtYmVyIHRoZSByZWxpZC9jb2x1bW5zLiBXZSdsbAotCSAqIHRo ZW4gY3Jvc3MtY2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5k IG9ubHkgaWYgbmVlZGVkCi0JICogd2UnbGwgc3BsaXQgdGhlIGNsYXVzZXMg aW50byBtdWx0aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlzdHMuCisJICogV2Fs ayB0aHJvdWdoIHRoZSBjbGF1c2VzIGFuZCBpZGVudGlmeSB0aGUgb25lcyB3 ZSBjYW4gZXN0aW1hdGUgdXNpbmcKKwkgKiBtdWx0aXZhcmlhdGUgc3RhdHMs IGFuZCByZW1lbWJlciB0aGUgcmVsaWQvY29sdW1ucy4gV2UnbGwgdGhlbgor CSAqIGNyb3NzLWNoZWNrIGlmIHdlIGhhdmUgc3VpdGFibGUgc3RhdHMsIGFu ZCBvbmx5IGlmIG5lZWRlZCB3ZSdsbCBzcGxpdAorCSAqIHRoZSBjbGF1c2Vz IGludG8gbXVsdGl2YXJpYXRlIGFuZCByZWd1bGFyIGxpc3RzLgogCSAqCi0J ICogRm9yIG5vdyB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gUmVzdHJpY3RJ bmZvIG5vZGVzIHdpdGggbmVzdGVkCi0JICogT3BFeHByLCB1c2luZyBlaXRo ZXIgYSByYW5nZSBvciBlcXVhbGl0eS4KKwkgKiBGb3Igbm93IHdlJ3JlIG9u bHkgaW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9kZXMgd2l0aCBuZXN0 ZWQgT3BFeHByLAorCSAqIHVzaW5nIGVpdGhlciBhIHJhbmdlIG9yIGVxdWFs aXR5LgogCSAqLwogCWZvcmVhY2ggKGwsIGNsYXVzZXMpCiAJewotCQlBdHRy TnVtYmVyIGF0dG51bTsKIAkJTm9kZQkgICAqY2xhdXNlID0gKE5vZGUgKikg bGZpcnN0KGwpOwogCi0JCS8qIGlnbm9yZSB0aGUgcmVzdWx0IGZvciBub3cg LSB3ZSBvbmx5IG5lZWQgdGhlIGluZm8gKi8KLQkJaWYgKGNsYXVzZV9pc19t dl9jb21wYXRpYmxlKGNsYXVzZSwgcmVsaWQsICZhdHRudW0pKQotCQkJYXR0 bnVtcyA9IGJtc19hZGRfbWVtYmVyKGF0dG51bXMsIGF0dG51bSk7CisJCS8q IGlnbm9yZSB0aGUgcmVzdWx0IGhlcmUgLSB3ZSBvbmx5IG5lZWQgdGhlIGF0 dG51bXMgKi8KKwkJY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xhdXNlLCBy ZWxpZCwgJmF0dG51bXMsIHR5cGVzKTsKIAl9CiAKIAkvKgpAQCAtODgwLDEw ICsxMDA2LDEwIEBAIGNvbGxlY3RfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2Vz LCBJbmRleCByZWxpZCkKICAqIENvdW50IHRoZSBudW1iZXIgb2YgYXR0cmli dXRlcyBpbiBjbGF1c2VzIGNvbXBhdGlibGUgd2l0aCBtdWx0aXZhcmlhdGUg c3RhdHMuCiAgKi8KIHN0YXRpYyBpbnQKLWNvdW50X212X2F0dG51bXMoTGlz dCAqY2xhdXNlcywgSW5kZXggcmVsaWQpCitjb3VudF9tdl9hdHRudW1zKExp c3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkLCBpbnQgdHlwZSkKIHsKIAlpbnQg YzsKLQlCaXRtYXBzZXQgKmF0dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMo Y2xhdXNlcywgcmVsaWQpOworCUJpdG1hcHNldCAqYXR0bnVtcyA9IGNvbGxl Y3RfbXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCwgdHlwZSk7CiAKIAljID0g Ym1zX251bV9tZW1iZXJzKGF0dG51bXMpOwogCkBAIC05MTMsOSArMTAzOSwx ODMgQEAgY291bnRfdmFybm9zKExpc3QgKmNsYXVzZXMsIEluZGV4ICpyZWxp ZCkKIAogCXJldHVybiBjbnQ7CiB9CisgCisvKgorICogV2UncmUgbG9va2lu ZyBmb3Igc3RhdGlzdGljcyBtYXRjaGluZyBhdCBsZWFzdCAyIGF0dHJpYnV0 ZXMsIHJlZmVyZW5jZWQgaW4KKyAqIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRo IG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLiBUaGUgY3VycmVudCBzZWxlY3Rp b24KKyAqIGNyaXRlcmlhIGlzIHZlcnkgc2ltcGxlIC0gd2UgY2hvb3NlIHRo ZSBzdGF0aXN0aWNzIHJlZmVyZW5jaW5nIHRoZSBtb3N0CisgKiBhdHRyaWJ1 dGVzLgorICoKKyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdGF0aXN0aWNz IHJlZmVyZW5jaW5nIHRoZSBzYW1lIG51bWJlciBvZiBjb2x1bW5zCisgKiAo ZnJvbSB0aGUgY2xhdXNlcyksIHRoZSBvbmUgd2l0aCBsZXNzIHNvdXJjZSBj b2x1bW5zIChhcyBsaXN0ZWQgaW4gdGhlCisgKiBBREQgU1RBVElTVElDUyB3 aGVuIGNyZWF0aW5nIHRoZSBzdGF0aXN0aWNzKSB3aW5zLiBFbHNlIHRoZSBm aXJzdCBvbmUgd2lucy4KKyAqCisgKiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUg Y3JpdGVyaWEsIGFuZCBoYXMgc2V2ZXJhbCB3ZWFrbmVzc2VzOgorICoKKyAq IChhKSBkb2VzIG5vdCBjb25zaWRlciB0aGUgYWNjdXJhY3kgb2YgdGhlIHN0 YXRpc3RpY3MKKyAqCisgKiAgICAgSWYgdGhlcmUgYXJlIHR3byBoaXN0b2dy YW1zIGJ1aWx0IG9uIHRoZSBzYW1lIHNldCBvZiBjb2x1bW5zLCBidXQgb25l CisgKiAgICAgaGFzIDEwMCBidWNrZXRzIGFuZCB0aGUgb3RoZXIgb25lIGhh cyAxMDAwIGJ1Y2tldHMgKHRodXMgbGlrZWx5CisgKiAgICAgcHJvdmlkaW5n IGJldHRlciBlc3RpbWF0ZXMpLCB0aGlzIGlzIG5vdCBjdXJyZW50bHkgY29u c2lkZXJlZC4KKyAqCisgKiAoYikgZG9lcyBub3QgY29uc2lkZXIgdGhlIHR5 cGUgb2Ygc3RhdGlzdGljcworICoKKyAqICAgICBJZiB0aGVyZSBhcmUgdGhy ZWUgc3RhdGlzdGljcyAtIG9uZSBjb250YWluaW5nIGp1c3QgYSBNQ1YgbGlz dCwgYW5vdGhlcgorICogICAgIG9uZSB3aXRoIGp1c3QgYSBoaXN0b2dyYW0g YW5kIGEgdGhpcmQgb25lIHdpdGggYm90aCwgd2UgdHJlYXQgdGhlbSBlcXVh bGx5LgorICoKKyAqIChjKSBkb2VzIG5vdCBjb25zaWRlciB0aGUgbnVtYmVy IG9mIGNsYXVzZXMKKyAqCisgKiAgICAgQXMgZXhwbGFpbmVkLCBvbmx5IHRo ZSBudW1iZXIgb2YgcmVmZXJlbmNlZCBhdHRyaWJ1dGVzIGNvdW50cywgc28g aWYKKyAqICAgICB0aGVyZSBhcmUgbXVsdGlwbGUgY2xhdXNlcyBvbiBhIHNp bmdsZSBhdHRyaWJ1dGUsIHRoaXMgc3RpbGwgY291bnRzIGFzCisgKiAgICAg YSBzaW5nbGUgYXR0cmlidXRlLgorICoKKyAqIChkKSBkb2VzIG5vdCBjb25z aWRlciB0eXBlIG9mIGNvbmRpdGlvbgorICoKKyAqICAgICBTb21lIGNsYXVz ZXMgbWF5IHdvcmsgYmV0dGVyIHdpdGggc29tZSBzdGF0aXN0aWNzIC0gZm9y IGV4YW1wbGUgZXF1YWxpdHkKKyAqICAgICBjbGF1c2VzIHByb2JhYmx5IHdv cmsgYmV0dGVyIHdpdGggTUNWIGxpc3RzIHRoYW4gd2l0aCBoaXN0b2dyYW1z LiBCdXQKKyAqICAgICBJUyBbTk9UXSBOVUxMIGNvbmRpdGlvbnMgbWF5IG9m dGVuIHdvcmsgYmV0dGVyIHdpdGggaGlzdG9ncmFtcyAodGhhbmtzCisgKiAg ICAgdG8gTlVMTC1idWNrZXRzKS4KKyAqCisgKiBTbyBmb3IgZXhhbXBsZSB3 aXRoIGZpdmUgV0hFUkUgY29uZGl0aW9ucworICoKKyAqICAgICBXSEVSRSAo YSA9IDEpIEFORCAoYiA9IDEpIEFORCAoYyA9IDEpIEFORCAoZCA9IDEpIEFO RCAoZSA9IDEpCisgKgorICogYW5kIHN0YXRpc3RpY3Mgb24gKGEsYiksIChh LGIsZSkgYW5kIChhLGIsYyxkKSwgdGhlIGxhc3Qgb25lIHdpbGwgYmUgc2Vs ZWN0ZWQKKyAqIGFzIGl0IHJlZmVyZW5jZXMgdGhlIG1vc3QgY29sdW1ucy4K KyAqCisgKiBPbmNlIHdlIGhhdmUgc2VsZWN0ZWQgdGhlIG11bHRpdmFyaWF0 ZSBzdGF0aXN0aWNzLCB3ZSBzcGxpdCB0aGUgbGlzdCBvZgorICogY2xhdXNl cyBpbnRvIHR3byBwYXJ0cyAtIGNvbmRpdGlvbnMgdGhhdCBhcmUgY29tcGF0 aWJsZSB3aXRoIHRoZSBzZWxlY3RlZAorICogc3RhdHMsIGFuZCBjb25kaXRp b25zIGFyZSBlc3RpbWF0ZWQgdXNpbmcgc2ltcGxlIHN0YXRpc3RpY3MuCisg KgorICogRnJvbSB0aGUgZXhhbXBsZSBhYm92ZSwgY29uZGl0aW9ucworICoK KyAqICAgICAoYSA9IDEpIEFORCAoYiA9IDEpIEFORCAoYyA9IDEpIEFORCAo ZCA9IDEpCisgKgorICogd2lsbCBiZSBlc3RpbWF0ZWQgdXNpbmcgdGhlIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIChhLGIsYyxkKSB3aGlsZSB0aGUgbGFz dAorICogY29uZGl0aW9uIChlID0gMSkgd2lsbCBnZXQgZXN0aW1hdGVkIHVz aW5nIHRoZSByZWd1bGFyIG9uZXMuCisgKgorICogVGhlcmUgYXJlIHZhcmlv dXMgYWx0ZXJuYXRpdmUgc2VsZWN0aW9uIGNyaXRlcmlhIChlLmcuIGNvdW50 aW5nIGNvbmRpdGlvbnMKKyAqIGluc3RlYWQgb2YganVzdCByZWZlcmVuY2Vk IGF0dHJpYnV0ZXMpLCBidXQgZXZlbnR1YWxseSB0aGUgYmVzdCBvcHRpb24g c2hvdWxkCisgKiBiZSB0byBjb21iaW5lIG11bHRpcGxlIHN0YXRpc3RpY3Mu IEJ1dCB0aGF0J3MgbXVjaCBoYXJkZXIgdG8gZG8gY29ycmVjdGx5LgorICoK KyAqIFRPRE8gU2VsZWN0IG11bHRpcGxlIHN0YXRpc3RpY3MgYW5kIGNvbWJp bmUgdGhlbSB3aGVuIGNvbXB1dGluZyB0aGUgZXN0aW1hdGUuCisgKgorICog VE9ETyBUaGlzIHdpbGwgcHJvYmFibHkgaGF2ZSB0byBjb25zaWRlciBjb21w YXRpYmlsaXR5IG9mIGNsYXVzZXMsIGJlY2F1c2UKKyAqICAgICAgJ2RlcGVu ZGVuY2llcycgd2lsbCBwcm9iYWJseSB3b3JrIG9ubHkgd2l0aCBlcXVhbGl0 eSBjbGF1c2VzLgorICovCitzdGF0aWMgTVZTdGF0aXN0aWNJbmZvICoKK2No b29zZV9tdl9zdGF0aXN0aWNzKExpc3QgKnN0YXRzLCBCaXRtYXBzZXQgKmF0 dG51bXMpCit7CisJaW50IGk7CisJTGlzdENlbGwgICAqbGM7CisKKwlNVlN0 YXRpc3RpY0luZm8gKmNob2ljZSA9IE5VTEw7CisKKwlpbnQgY3VycmVudF9t YXRjaGVzID0gMTsJCQkJCQkvKiBnb2FsICMxOiBtYXhpbWl6ZSAqLworCWlu dCBjdXJyZW50X2RpbXMgPSAoTVZTVEFUU19NQVhfRElNRU5TSU9OUysxKTsJ LyogZ29hbCAjMjogbWluaW1pemUgKi8KKworCS8qCisJICogV2FsayB0aHJv dWdoIHRoZSBzdGF0aXN0aWNzIChzaW1wbGUgYXJyYXkgd2l0aCBubXZzdGF0 cyBlbGVtZW50cykgYW5kIGZvcgorCSAqIGVhY2ggb25lIGNvdW50IHRoZSBy ZWZlcmVuY2VkIGF0dHJpYnV0ZXMgKGVuY29kZWQgaW4gdGhlICdhdHRudW1z JyBiaXRtYXApLgorCSAqLworCWZvcmVhY2ggKGxjLCBzdGF0cykKKwl7CisJ CU1WU3RhdGlzdGljSW5mbyAqaW5mbyA9IChNVlN0YXRpc3RpY0luZm8gKils Zmlyc3QobGMpOworCisJCS8qIGNvbHVtbnMgbWF0Y2hpbmcgdGhpcyBzdGF0 aXN0aWNzICovCisJCWludCBtYXRjaGVzID0gMDsKKworCQlpbnQydmVjdG9y ICogYXR0cnMgPSBpbmZvLT5zdGFrZXlzOworCQlpbnQJbnVtYXR0cnMgPSBh dHRycy0+ZGltMTsKKworCQkvKiBza2lwIGRlcGVuZGVuY2llcy1vbmx5IHN0 YXRzICovCisJCWlmICghIGluZm8tPm1jdl9idWlsdCkKKwkJCWNvbnRpbnVl OworCisJCS8qIGNvdW50IGNvbHVtbnMgY292ZXJlZCBieSB0aGUgaGlzdG9n cmFtICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCQkJ aWYgKGJtc19pc19tZW1iZXIoYXR0cnMtPnZhbHVlc1tpXSwgYXR0bnVtcykp CisJCQkJbWF0Y2hlcysrOworCisJCS8qCisJCSAqIFVzZSB0aGlzIHN0YXRp c3RpY3Mgd2hlbiBpdCBpbXByb3ZlcyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMg b3IKKwkJICogd2hlbiBpdCBtYXRjaGVzIHRoZSBzYW1lIG51bWJlciBvZiBh dHRyaWJ1dGVzIGJ1dCBpcyBzbWFsbGVyLgorCQkgKi8KKwkJaWYgKChtYXRj aGVzID4gY3VycmVudF9tYXRjaGVzKSB8fAorCQkJKChtYXRjaGVzID09IGN1 cnJlbnRfbWF0Y2hlcykgJiYgKGN1cnJlbnRfZGltcyA+IG51bWF0dHJzKSkp CisJCXsKKwkJCWNob2ljZSA9IGluZm87CisJCQljdXJyZW50X21hdGNoZXMg PSBtYXRjaGVzOworCQkJY3VycmVudF9kaW1zID0gbnVtYXR0cnM7CisJCX0K Kwl9CisKKwlyZXR1cm4gY2hvaWNlOworfQorCisKKy8qCisgKiBUaGlzIHNw bGl0cyB0aGUgY2xhdXNlcyBsaXN0IGludG8gdHdvIHBhcnRzIC0gb25lIGNv bnRhaW5pbmcgY2xhdXNlcyB0aGF0CisgKiB3aWxsIGJlIGV2YWx1YXRlZCB1 c2luZyB0aGUgY2hvc2VuIHN0YXRpc3RpY3MsIGFuZCB0aGUgcmVtYWluaW5n IGNsYXVzZXMKKyAqIChlaXRoZXIgbm9uLW12Y29tcGF0aWJsZSwgb3Igbm90 IHJlbGF0ZWQgdG8gdGhlIGhpc3RvZ3JhbSkuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK2NsYXVzZWxpc3RfbXZfc3BsaXQoUGxhbm5lckluZm8gKnJvb3QsIElu ZGV4IHJlbGlkLAorCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0ICoqbXZjbGF1 c2VzLAorCQkJCQlNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMsIGludCB0eXBl cykKK3sKKwlpbnQgaTsKKwlMaXN0Q2VsbCAqbDsKKwlMaXN0CSAqbm9uX212 Y2xhdXNlcyA9IE5JTDsKKworCS8qIEZJWE1FIGlzIHRoZXJlIGEgYmV0dGVy IHdheSB0byBnZXQgaW5mbyBvbiBpbnQydmVjdG9yPyAqLworCWludDJ2ZWN0 b3IgKiBhdHRycyA9IG12c3RhdHMtPnN0YWtleXM7CisJaW50CW51bWF0dHJz ID0gbXZzdGF0cy0+c3Rha2V5cy0+ZGltMTsKKworCUJpdG1hcHNldCAqbXZh dHRudW1zID0gTlVMTDsKKworCS8qIGJ1aWxkIGJpdG1hcCBvZiBhdHRyaWJ1 dGVzLCBzbyB3ZSBjYW4gZG8gYm1zX2lzX3N1YnNldCBsYXRlciAqLworCWZv ciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCQltdmF0dG51bXMgPSBi bXNfYWRkX21lbWJlcihtdmF0dG51bXMsIGF0dHJzLT52YWx1ZXNbaV0pOwor CisJLyogZXJhc2UgdGhlIGxpc3Qgb2YgbXYtY29tcGF0aWJsZSBjbGF1c2Vz ICovCisJKm12Y2xhdXNlcyA9IE5JTDsKKworCWZvcmVhY2ggKGwsIGNsYXVz ZXMpCisJeworCQlib29sCQltYXRjaCA9IGZhbHNlOwkvKiBieSBkZWZhdWx0 IG5vdCBtdi1jb21wYXRpYmxlICovCisJCUJpdG1hcHNldAkqYXR0bnVtcyA9 IE5VTEw7CisJCU5vZGUJICAgKmNsYXVzZSA9IChOb2RlICopIGxmaXJzdChs KTsKKworCQlpZiAoY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xhdXNlLCBy ZWxpZCwgJmF0dG51bXMsIHR5cGVzKSkKKwkJeworCQkJLyogYXJlIGFsbCB0 aGUgYXR0cmlidXRlcyBwYXJ0IG9mIHRoZSBzZWxlY3RlZCBzdGF0cz8gKi8K KwkJCWlmIChibXNfaXNfc3Vic2V0KGF0dG51bXMsIG12YXR0bnVtcykpCisJ CQkJbWF0Y2ggPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlIGNsYXVz ZSBtYXRjaGVzIHRoZSBzZWxlY3RlZCBzdGF0cywgc28gcHV0IGl0IHRvIHRo ZSBsaXN0IG9mCisJCSAqIG12LWNvbXBhdGlibGUgY2xhdXNlcy4gT3RoZXJ3 aXNlLCBrZWVwIGl0IGluIHRoZSBsaXN0IG9mICdyZWd1bGFyJworCQkgKiBj bGF1c2VzICh0aGF0IG1heSBiZSBzZWxlY3RlZCBsYXRlcikuCisJCSAqLwor CQlpZiAobWF0Y2gpCisJCQkqbXZjbGF1c2VzID0gbGFwcGVuZCgqbXZjbGF1 c2VzLCBjbGF1c2UpOworCQllbHNlCisJCQlub25fbXZjbGF1c2VzID0gbGFw cGVuZChub25fbXZjbGF1c2VzLCBjbGF1c2UpOworCX0KKworCS8qCisJICog UGVyZm9ybSByZWd1bGFyIGVzdGltYXRpb24gdXNpbmcgdGhlIGNsYXVzZXMg aW5jb21wYXRpYmxlIHdpdGggdGhlIGNob3NlbgorCSAqIGhpc3RvZ3JhbSAo b3IgTVYgc3RhdHMgaW4gZ2VuZXJhbCkuCisJICovCisJcmV0dXJuIG5vbl9t dmNsYXVzZXM7CisKK30KIAogdHlwZWRlZiBzdHJ1Y3QKIHsKKwlpbnQJCQl0 eXBlczsJCS8qIHR5cGVzIG9mIHN0YXRpc3RpY3MgPyAqLwogCUluZGV4CQl2 YXJubzsJCS8qIHJlbGlkIHdlJ3JlIGludGVyZXN0ZWQgaW4gKi8KIAlCaXRt YXBzZXQgICp2YXJhdHRub3M7CS8qIGF0dG51bXMgcmVmZXJlbmNlZCBieSB0 aGUgY2xhdXNlcyAqLwogfSBtdl9jb21wYXRpYmxlX2NvbnRleHQ7CkBAIC05 MzMsMjMgKzEyMzMsNjYgQEAgbXZfY29tcGF0aWJsZV93YWxrZXIoTm9kZSAq bm9kZSwgbXZfY29tcGF0aWJsZV9jb250ZXh0ICpjb250ZXh0KQogewogCWlm IChub2RlID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKLSAKKwogCWlmIChJ c0Eobm9kZSwgUmVzdHJpY3RJbmZvKSkKICAJewogCQlSZXN0cmljdEluZm8g KnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBub2RlOwotIAorCiAgCQkvKiBQ c2V1ZG9jb25zdGFudHMgYXJlIG5vdCByZWFsbHkgaW50ZXJlc3RpbmcgaGVy ZS4gKi8KICAJCWlmIChyaW5mby0+cHNldWRvY29uc3RhbnQpCiAJCQlyZXR1 cm4gdHJ1ZTsKLSAKKwogCQkvKiBjbGF1c2VzIHJlZmVyZW5jaW5nIG11bHRp cGxlIHZhcm5vcyBhcmUgaW5jb21wYXRpYmxlICovCiAJCWlmIChibXNfbWVt YmVyc2hpcChyaW5mby0+Y2xhdXNlX3JlbGlkcykgIT0gQk1TX1NJTkdMRVRP TikKIAkJCXJldHVybiB0cnVlOwotIAorCiAJCS8qIGNoZWNrIHRoZSBjbGF1 c2UgaW5zaWRlIHRoZSBSZXN0cmljdEluZm8gKi8KIAkJcmV0dXJuIG12X2Nv bXBhdGlibGVfd2Fsa2VyKChOb2RlKilyaW5mby0+Y2xhdXNlLCAodm9pZCAq KSBjb250ZXh0KTsKICAJfQogCisJaWYgKG9yX2NsYXVzZShub2RlKSB8fCBh bmRfY2xhdXNlKG5vZGUpIHx8IG5vdF9jbGF1c2Uobm9kZSkpCisgCXsKKwkJ LyoKKwkJICogQU5EL09SL05PVC1jbGF1c2VzIGFyZSBzdXBwb3J0ZWQgaWYg YWxsIHN1Yi1jbGF1c2VzIGFyZSBzdXBwb3J0ZWQKKwkJICoKKwkJICogVE9E TyBXZSBtaWdodCBzdXBwb3J0IG1peGVkIGNhc2UsIHdoZXJlIHNvbWUgb2Yg dGhlIGNsYXVzZXMgYXJlCisJCSAqICAgICAgc3VwcG9ydGVkIGFuZCBzb21l IGFyZSBub3QsIGFuZCB0cmVhdCBhbGwgc3VwcG9ydGVkIHN1YmNsYXVzZXMK KwkJICogICAgICBhcyBhIHNpbmdsZSBjbGF1c2UsIGNvbXB1dGUgaXQncyBz ZWxlY3Rpdml0eSB1c2luZyBtdiBzdGF0cywKKwkJICogICAgICBhbmQgY29t cHV0ZSB0aGUgdG90YWwgc2VsZWN0aXZpdHkgdXNpbmcgdGhlIGN1cnJlbnQg YWxnb3JpdGhtLgorCQkgKgorCQkgKiBUT0RPIEZvciBSZXN0cmljdEluZm8g YWJvdmUgYW4gT1ItY2xhdXNlLCB3ZSBtaWdodCB1c2UgdGhlIG9yY2xhdXNl CisJCSAqICAgICAgd2l0aCBuZXN0ZWQgUmVzdHJpY3RJbmZvIC0gd2Ugd29u J3QgaGF2ZSB0byBjYWxsIHB1bGxfdmFybm9zKCkKKwkJICogICAgICBmb3Ig ZWFjaCBjbGF1c2UsIHNhdmluZyB0aW1lLgorCQkgKgorCQkgKiBUT0RPIFBl cmhhcHMgdGhpcyBuZWVkcyBhIGJpdCBtb3JlIHRob3VnaHQgZm9yIGZ1bmN0 aW9uYWwKKwkJICogICAgICBkZXBlbmRlbmNpZXM/IFRob3NlIGRvbid0IHF1 aXRlIHdvcmsgZm9yIE5PVCBjYXNlcy4KKwkJICovCisJCUJvb2xFeHByICAg KmV4cHIgPSAoQm9vbEV4cHIgKikgbm9kZTsKKwkJTGlzdENlbGwgICAqbGM7 CisKKwkJZm9yZWFjaCAobGMsIGV4cHItPmFyZ3MpCisJCXsKKwkJCWlmICht dl9jb21wYXRpYmxlX3dhbGtlcigoTm9kZSAqKSBsZmlyc3QobGMpLCBjb250 ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxz ZTsKKyAJfQorCisJaWYgKElzQShub2RlLCBOdWxsVGVzdCkpCisgCXsKKwkJ TnVsbFRlc3QqIG50ID0gKE51bGxUZXN0Kilub2RlOworCisJCS8qCisJCSAq IE9ubHkgc2ltcGxlIChWYXIgSVMgTlVMTCkgZXhwcmVzc2lvbnMgc3VwcG9y dGVkIGZvciBub3cuIE1heWJlIHdlIGNvdWxkCisJCSAqIHVzZSBleGFtaW5l X3ZhcmlhYmxlIHRvIGZpeCB0aGlzPworCQkgKi8KKwkJaWYgKCEgSXNBKG50 LT5hcmcsIFZhcikpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlyZXR1cm4gbXZf Y29tcGF0aWJsZV93YWxrZXIoKE5vZGUqKShudC0+YXJnKSwgY29udGV4dCk7 CisJfQorCiAJaWYgKElzQShub2RlLCBWYXIpKQogCXsKIAkJVmFyICogdmFy ID0gKFZhciopbm9kZTsKQEAgLTEwMDAsNyArMTM0Myw3IEBAIG12X2NvbXBh dGlibGVfd2Fsa2VyKE5vZGUgKm5vZGUsIG12X2NvbXBhdGlibGVfY29udGV4 dCAqY29udGV4dCkKIAkJLyogdW5zdXBwb3J0ZWQgc3RydWN0dXJlICh0d28g dmFyaWFibGVzIG9yIHNvKSAqLwogCQlpZiAoISBvaykKIAkJCXJldHVybiB0 cnVlOwotCisgCiAgCQkvKgogCQkgKiBJZiBpdCdzIG5vdCBhICI8IiBvciAi PiIgb3IgIj0iIG9wZXJhdG9yLCBqdXN0IGlnbm9yZSB0aGUgY2xhdXNlLgog CQkgKiBPdGhlcndpc2Ugbm90ZSB0aGUgcmVsaWQgYW5kIGF0dG51bSBmb3Ig dGhlIHZhcmlhYmxlLiBUaGlzIHVzZXMgdGhlCkBAIC0xMDEwLDEwICsxMzUz LDE4IEBAIG12X2NvbXBhdGlibGVfd2Fsa2VyKE5vZGUgKm5vZGUsIG12X2Nv bXBhdGlibGVfY29udGV4dCAqY29udGV4dCkKIAkJc3dpdGNoIChnZXRfb3By cmVzdChleHByLT5vcG5vKSkKIAkJewogCQkJY2FzZSBGX0VRU0VMOgotCiAJ CQkJLyogZXF1YWxpdHkgY29uZGl0aW9ucyBhcmUgY29tcGF0aWJsZSB3aXRo IGFsbCBzdGF0aXN0aWNzICovCiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgRl9T Q0FMQVJMVFNFTDoKKwkJCWNhc2UgRl9TQ0FMQVJHVFNFTDoKKworCQkJCS8q IG5vdCBjb21wYXRpYmxlIHdpdGggZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMg Ki8KKwkJCQlpZiAoISAoY29udGV4dC0+dHlwZXMgJiBNVl9DTEFVU0VfVFlQ RV9NQ1YpKQorCQkJCQlyZXR1cm4gdHJ1ZTsJLyogdGVybWluYXRlICovCisg CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAKIAkJCQkvKiB1bmtub3du IGVzdGltYXRvciAqLwpAQCAtMTAyNCwxMSArMTM3NSwxMSBAQCBtdl9jb21w YXRpYmxlX3dhbGtlcihOb2RlICpub2RlLCBtdl9jb21wYXRpYmxlX2NvbnRl eHQgKmNvbnRleHQpCiAKIAkJcmV0dXJuIG12X2NvbXBhdGlibGVfd2Fsa2Vy KChOb2RlICopIHZhciwgY29udGV4dCk7CiAgCX0KLQorIAogCS8qIE5vZGUg bm90IGV4cGxpY2l0bHkgc3VwcG9ydGVkLCBzbyB0ZXJtaW5hdGUgKi8KIAly ZXR1cm4gdHJ1ZTsKIH0KLSAKKwogLyoKICAqIERldGVybWluZXMgd2hldGhl ciB0aGUgY2xhdXNlIGlzIGNvbXBhdGlibGUgd2l0aCBtdWx0aXZhcmlhdGUg c3RhdHMsCiAgKiBhbmQgaWYgaXQgaXMsIHJldHVybnMgc29tZSBhZGRpdGlv bmFsIGluZm9ybWF0aW9uIC0gdmFybm8gKGluZGV4CkBAIC0xMDQ3LDEwICsx Mzk4LDExIEBAIG12X2NvbXBhdGlibGVfd2Fsa2VyKE5vZGUgKm5vZGUsIG12 X2NvbXBhdGlibGVfY29udGV4dCAqY29udGV4dCkKICAqICAgICAgZXZhbHVh dGUgdGhlbSB1c2luZyBtdWx0aXZhcmlhdGUgc3RhdHMuCiAgKi8KIHN0YXRp YyBib29sCi1jbGF1c2VfaXNfbXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2Us IEluZGV4IHJlbGlkLCBBdHRyTnVtYmVyICphdHRudW0pCitjbGF1c2VfaXNf bXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBCaXRt YXBzZXQgKiphdHRudW1zLCBpbnQgdHlwZXMpCiB7CiAJbXZfY29tcGF0aWJs ZV9jb250ZXh0IGNvbnRleHQ7CiAKKwljb250ZXh0LnR5cGVzID0gdHlwZXM7 CiAJY29udGV4dC52YXJubyA9IHJlbGlkOwogCWNvbnRleHQudmFyYXR0bm9z ID0gTlVMTDsJLyogbm8gYXR0bnVtcyAqLwogCkBAIC0xMDU4LDcgKzE0MTAs NyBAQCBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2UsIElu ZGV4IHJlbGlkLCBBdHRyTnVtYmVyICphdHRudW0pCiAJCXJldHVybiBmYWxz ZTsKIAogCS8qIHJlbWVtYmVyIHRoZSBuZXdseSBjb2xsZWN0ZWQgYXR0bnVt cyAqLwotCSphdHRudW0gPSBibXNfc2luZ2xldG9uX21lbWJlcihjb250ZXh0 LnZhcmF0dG5vcyk7CisJKmF0dG51bXMgPSBibXNfYWRkX21lbWJlcnMoKmF0 dG51bXMsIGNvbnRleHQudmFyYXR0bm9zKTsKIAogCXJldHVybiB0cnVlOwog fQpAQCAtMTA3NSwxNSArMTQyNywxNSBAQCBmZGVwc19yZWR1Y2VfY2xhdXNl cyhMaXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCwgQml0bWFwc2V0ICpyZWR1 Y2VkX2F0dG51bXMpCiAKIAlmb3JlYWNoIChsYywgY2xhdXNlcykKIAl7Ci0J CUF0dHJOdW1iZXIgYXR0bnVtID0gSW52YWxpZEF0dHJOdW1iZXI7CisJCUJp dG1hcHNldCAqYXR0bnVtcyA9IE5VTEw7CiAJCU5vZGUgKiBjbGF1c2UgPSAo Tm9kZSopbGZpcnN0KGxjKTsKIAogCQkvKiBpZ25vcmUgY2xhdXNlcyB0aGF0 IGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5j aWVzICovCi0JCWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKGNsYXVz ZSwgcmVsaWQsICZhdHRudW0pKQorCQlpZiAoISBjbGF1c2VfaXNfbXZfY29t cGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtcywgTVZfQ0xBVVNFX1RZ UEVfRkRFUCkpCiAJCQlyZWR1Y2VkX2NsYXVzZXMgPSBsYXBwZW5kKHJlZHVj ZWRfY2xhdXNlcywgY2xhdXNlKTsKIAogCQkvKiBmb3IgZXF1YWxpdHkgY2xh dXNlcywgb25seSBrZWVwIHRob3NlIG5vdCBvbiByZWR1Y2VkIGF0dHJpYnV0 ZXMgKi8KLQkJaWYgKCEgYm1zX2lzX21lbWJlcihhdHRudW0sIHJlZHVjZWRf YXR0bnVtcykpCisJCWlmICghIGJtc19pc19zdWJzZXQoYXR0bnVtcywgcmVk dWNlZF9hdHRudW1zKSkKIAkJCXJlZHVjZWRfY2xhdXNlcyA9IGxhcHBlbmQo cmVkdWNlZF9jbGF1c2VzLCBjbGF1c2UpOwogCX0KIApAQCAtMTIwOCw3ICsx NTYwLDcgQEAgY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRlbmNpZXMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCXJldHVybiBjbGF1c2Vz OwogCiAJLyogY29sbGVjdCBhdHRudW1zIGZyb20gY2xhdXNlcyBjb21wYXRp YmxlIHdpdGggZGVwZW5kZW5jaWVzIChlcXVhbGl0eSkgKi8KLQljbGF1c2Vf YXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCk7 CisJY2xhdXNlX2F0dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNl cywgcmVsaWQsIE1WX0NMQVVTRV9UWVBFX0ZERVApOwogCiAJLyogZGVjaWRl IHdoaWNoIGF0dG51bXMgbWF5IGJlIGVsaW1pbmF0ZWQgKi8KIAlyZWR1Y2Vk X2F0dG51bXMgPSBmZGVwc19yZWR1Y2VfYXR0bnVtcyhzdGF0cywgY2xhdXNl X2F0dG51bXMpOwpAQCAtMTIzMyw2ICsxNTg1LDkgQEAgc3RhdHNfdHlwZV9t YXRjaGVzKE1WU3RhdGlzdGljSW5mbyAqc3RhdCwgaW50IHR5cGUpCiAJaWYg KCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfRkRFUCkgJiYgc3RhdC0+ZGVwc19i dWlsdCkKIAkJcmV0dXJuIHRydWU7CiAKKwlpZiAoKHR5cGUgJiBNVl9DTEFV U0VfVFlQRV9NQ1YpICYmIHN0YXQtPm1jdl9idWlsdCkKKwkJcmV0dXJuIHRy dWU7CisKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyNjYsMyArMTYyMSwz OTIgQEAgZmluZF9zdGF0cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVs aWQpCiAKIAlyZXR1cm4gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF0t Pm12c3RhdGxpc3Q7CiB9CisKKy8qCisgKiBFc3RpbWF0ZSBzZWxlY3Rpdml0 eSBvZiBjbGF1c2VzIHVzaW5nIGEgTUNWIGxpc3QuCisgKgorICogSWYgdGhl cmUncyBubyBNQ1YgbGlzdCBmb3IgdGhlIHN0YXRzLCB0aGUgZnVuY3Rpb24g cmV0dXJucyAwLjAuCisgKgorICogV2hpbGUgY29tcHV0aW5nIHRoZSBlc3Rp bWF0ZSwgdGhlIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGFsbCB0aGUKKyAq IGNvbHVtbnMgd2VyZSBtYXRjaGVkIHdpdGggYW4gZXF1YWxpdHkgY29uZGl0 aW9uLiBJZiB0aGF0J3MgdGhlIGNhc2UsCisgKiB3ZSBjYW4gc2tpcCBwcm9j ZXNzaW5nIHRoZSBoaXN0b2dyYW0sIGFzIHRoZXJlIGNhbiBiZSBubyByb3dz IGluCisgKiBpdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyAtIGFsbCB0aGUgcm93 cyBtYXRjaGluZyB0aGUgY29uZGl0aW9uIGFyZQorICogcmVwcmVzZW50ZWQg YnkgdGhlIE1DViBpdGVtLiBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aXRoIGVx dWFsaXR5CisgKiBvbiBhbGwgdGhlIGF0dHJpYnV0ZXMuCisgKgorICogVGhl IGFsZ29yaXRobSB3b3JrcyBsaWtlIHRoaXM6CisgKgorICogICAxKSBtYXJr IGFsbCBpdGVtcyBhcyAnbWF0Y2gnCisgKiAgIDIpIHdhbGsgdGhyb3VnaCBh bGwgdGhlIGNsYXVzZXMKKyAqICAgMykgZm9yIGEgcGFydGljdWxhciBjbGF1 c2UsIHdhbGsgdGhyb3VnaCBhbGwgdGhlIGl0ZW1zCisgKiAgIDQpIHNraXAg aXRlbXMgdGhhdCBhcmUgYWxyZWFkeSAnbm8gbWF0Y2gnCisgKiAgIDUpIGNo ZWNrIGNsYXVzZSBmb3IgaXRlbXMgdGhhdCBzdGlsbCBtYXRjaAorICogICA2 KSBzdW0gZnJlcXVlbmNpZXMgZm9yIGl0ZW1zIHRvIGdldCBzZWxlY3Rpdml0 eQorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHNvIHJldHVybnMgdGhlIGZyZXF1 ZW5jeSBvZiB0aGUgbGVhc3QgZnJlcXVlbnQgaXRlbQorICogb24gdGhlIE1D ViBsaXN0LCB3aGljaCBtYXkgYmUgdXNlZnVsIGZvciBjbGFtcGluZyBlc3Rp bWF0ZSBmcm9tIHRoZQorICogaGlzdG9ncmFtIChhbGwgaXRlbXMgbm90IHBy ZXNlbnQgaW4gdGhlIE1DViBsaXN0IGFyZSBsZXNzIGZyZXF1ZW50KS4KKyAq IFRoaXMgaG93ZXZlciBzZWVtcyB1c2VmdWwgb25seSBmb3IgY2FzZXMgd2l0 aCBjb25kaXRpb25zIG9uIGFsbAorICogYXR0cmlidXRlcy4KKyAqCisgKiBU T0RPIFRoaXMgb25seSBoYW5kbGVzIEFORC1lZCBjbGF1c2VzLCBidXQgaXQg bWlnaHQgd29yayBmb3IgT1ItZWQKKyAqICAgICAgbGlzdHMgdG9vIC0gaXQg anVzdCBuZWVkcyB0byByZXZlcnNlIHRoZSBsb2dpYyBhIGJpdC4gSS5lLiBz dGFydAorICogICAgICB3aXRoICdubyBtYXRjaCcgZm9yIGFsbCBpdGVtcywg YW5kIG1hcmsgdGhlIGl0ZW1zIGFzIGEgbWF0Y2gKKyAqICAgICAgYXMgdGhl IGNsYXVzZXMgYXJlIHByb2Nlc3NlZCAoYW5kIHNraXAgaXRlbXMgdGhhdCBh cmUgJ21hdGNoJykuCisgKi8KK3N0YXRpYyBTZWxlY3Rpdml0eQorY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KFBsYW5uZXJJbmZvICpyb290 LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJCQkgIE1WU3RhdGlzdGljSW5mbyAq bXZzdGF0cywgYm9vbCAqZnVsbG1hdGNoLAorCQkJCQkJCQkgIFNlbGVjdGl2 aXR5ICpsb3dzZWwpCit7CisJaW50IGk7CisJU2VsZWN0aXZpdHkgcyA9IDAu MDsKKwlTZWxlY3Rpdml0eSB1ID0gMC4wOworCisJTUNWTGlzdCBtY3ZsaXN0 ID0gTlVMTDsKKwlpbnQJbm1hdGNoZXMgPSAwOworCisJLyogbWF0Y2gvbWlz bWF0Y2ggYml0bWFwIGZvciBlYWNoIE1DViBpdGVtICovCisJY2hhciAqIG1h dGNoZXMgPSBOVUxMOworCisJQXNzZXJ0KGNsYXVzZXMgIT0gTklMKTsKKwlB c3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMik7CisKKwkvKiB0aGVy ZSdzIG5vIE1DViBsaXN0IGJ1aWx0IHlldCAqLworCWlmICghIG12c3RhdHMt Pm1jdl9idWlsdCkKKwkJcmV0dXJuIDAuMDsKKworCW1jdmxpc3QgPSBsb2Fk X212X21jdmxpc3QobXZzdGF0cy0+bXZvaWQpOworCisJQXNzZXJ0KG1jdmxp c3QgIT0gTlVMTCk7CisJQXNzZXJ0KG1jdmxpc3QtPm5pdGVtcyA+IDApOwor CisJLyogYnkgZGVmYXVsdCBhbGwgdGhlIE1DViBpdGVtcyBtYXRjaCB0aGUg Y2xhdXNlcyBmdWxseSAqLworCW1hdGNoZXMgPSBwYWxsb2MwKHNpemVvZihj aGFyKSAqIG1jdmxpc3QtPm5pdGVtcyk7CisJbWVtc2V0KG1hdGNoZXMsIE1W U1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm1jdmxpc3QtPm5pdGVt cyk7CisKKwkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgTUNWIGl0ZW1zICovCisJ bm1hdGNoZXMgPSBtY3ZsaXN0LT5uaXRlbXM7CisKKwlubWF0Y2hlcyA9IHVw ZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChyb290LCBjbGF1c2VzLAorCQkJ CQkJCQkJCSAgIG12c3RhdHMtPnN0YWtleXMsIG1jdmxpc3QsCisJCQkJCQkJ CQkJICAgbm1hdGNoZXMsIG1hdGNoZXMsCisJCQkJCQkJCQkJICAgbG93c2Vs LCBmdWxsbWF0Y2gsIGZhbHNlKTsKKworCS8qIHN1bSBmcmVxdWVuY2llcyBm b3IgYWxsIHRoZSBtYXRjaGluZyBNQ1YgaXRlbXMgKi8KKwlmb3IgKGkgPSAw OyBpIDwgbWN2bGlzdC0+bml0ZW1zOyBpKyspCisJeworCQkvKiB1c2VkIHRv ICdzY2FsZScgZm9yIE1DViBsaXN0cyBub3QgY292ZXJpbmcgYWxsIHR1cGxl cyAqLworCQl1ICs9IG1jdmxpc3QtPml0ZW1zW2ldLT5mcmVxdWVuY3k7CisK KwkJaWYgKG1hdGNoZXNbaV0gIT0gTVZTVEFUU19NQVRDSF9OT05FKQorCQkJ cyArPSBtY3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVlbmN5OworCX0KKworCXBm cmVlKG1hdGNoZXMpOworCXBmcmVlKG1jdmxpc3QpOworCisJcmV0dXJuIHMq dTsKK30KKworLyoKKyAqIEV2YWx1YXRlIGNsYXVzZXMgdXNpbmcgdGhlIE1D ViBsaXN0LCBhbmQgdXBkYXRlIHRoZSBtYXRjaCBiaXRtYXAuCisgKgorICog VGhlIGJpdG1hcCBtYXkgYmUgYWxyZWFkeSBwYXJ0aWFsbHkgc2V0LCBzbyB0 aGlzIGlzIHJlYWxseSBhIHdheSB0bworICogY29tYmluZSByZXN1bHRzIG9m IHNldmVyYWwgY2xhdXNlIGxpc3RzIC0gZWl0aGVyIHdoZW4gY29tcHV0aW5n CisgKiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSBQKEF8Qikgb3IgYSBjb21i aW5hdGlvbiBvZiBBTkQvT1IgY2xhdXNlcy4KKyAqCisgKiBUT0RPIFRoaXMg d29ya3Mgd2l0aCAnYml0bWFwJyB3aGVyZSBlYWNoIGJpdCBpcyByZXByZXNl bnRlZCBhcyBhIGNoYXIsCisgKiAgICAgIHdoaWNoIGlzIHNsaWdodGx5IHdh c3RlZnVsLiBJbnN0ZWFkLCB3ZSBjb3VsZCB1c2UgYSByZWd1bGFyCisgKiAg ICAgIGJpdG1hcCwgcmVkdWNpbmcgdGhlIHNpemUgdG8gfjEvOC4gQW5vdGhl ciB0aGluZyBpcyBtZXJnaW5nIHRoZQorICogICAgICBiaXRtYXBzIHVzaW5n ICYgYW5kIHwsIHdoaWNoIG1pZ2h0IGJlIGZhc3RlciB0aGFuIG1pbi9tYXgu CisgKi8KK3N0YXRpYyBpbnQKK3VwZGF0ZV9tYXRjaF9iaXRtYXBfbWN2bGlz dChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCSAg IGludDJ2ZWN0b3IgKnN0YWtleXMsIE1DVkxpc3QgbWN2bGlzdCwKKwkJCQkJ CSAgIGludCBubWF0Y2hlcywgY2hhciAqIG1hdGNoZXMsCisJCQkJCQkgICBT ZWxlY3Rpdml0eSAqbG93c2VsLCBib29sICpmdWxsbWF0Y2gsCisJCQkJCQkg ICBib29sIGlzX29yKQoreworCWludCBpOworCUxpc3RDZWxsICogbDsKKwor CUJpdG1hcHNldCAqZXFtYXRjaGVzID0gTlVMTDsJLyogYXR0cmlidXRlcyB3 aXRoIGVxdWFsaXR5IG1hdGNoZXMgKi8KKworCS8qIFRoZSBiaXRtYXAgbWF5 IGJlIHBhcnRpYWxseSBidWlsdC4gKi8KKwlBc3NlcnQobm1hdGNoZXMgPj0g MCk7CisJQXNzZXJ0KG5tYXRjaGVzIDw9IG1jdmxpc3QtPm5pdGVtcyk7CisJ QXNzZXJ0KGNsYXVzZXMgIT0gTklMKTsKKwlBc3NlcnQobGlzdF9sZW5ndGgo Y2xhdXNlcykgPj0gMSk7CisJQXNzZXJ0KG1jdmxpc3QgIT0gTlVMTCk7CisJ QXNzZXJ0KG1jdmxpc3QtPm5pdGVtcyA+IDApOworCisJLyogTm8gcG9zc2li bGUgbWF0Y2hlcyAob25seSB3b3JrcyBmb3IgQU5ELWRlZCBjbGF1c2VzKSAq LworCWlmICgoKG5tYXRjaGVzID09IDApICYmICghIGlzX29yKSkgfHwKKwkJ KChubWF0Y2hlcyA9PSBtY3ZsaXN0LT5uaXRlbXMpICYmIGlzX29yKSkKKwkJ cmV0dXJuIG5tYXRjaGVzOworCisJLyoKKwkgKiBmaW5kIHRoZSBsb3dlc3Qg ZnJlcXVlbmN5IGluIHRoZSBNQ1YgbGlzdAorCSAqCisJICogV2UgbmVlZCB0 byBkbyB0aGF0IGhlcmUsIGJlY2F1c2Ugd2UgZG8gdmFyaW91cyB0cmlja3Mg aW4gdGhlIGZvbGxvd2luZworCSAqIGNvZGUgLSBza2lwcGluZyBpdGVtcyBh bHJlYWR5IHJ1bGVkIG91dCwgZXRjLgorCSAqCisJICogWFhYIEEgbG9vcCBp cyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgTUNWIGxpc3QgaXMgbm90IHNvcnRl ZCBieSBmcmVxdWVuY3kuCisJICovCisJKmxvd3NlbCA9IDEuMDsKKwlmb3Ig KGkgPSAwOyBpIDwgbWN2bGlzdC0+bml0ZW1zOyBpKyspCisJeworCQlNQ1ZJ dGVtIGl0ZW0gPSBtY3ZsaXN0LT5pdGVtc1tpXTsKKworCQlpZiAoaXRlbS0+ ZnJlcXVlbmN5IDwgKmxvd3NlbCkKKwkJCSpsb3dzZWwgPSBpdGVtLT5mcmVx dWVuY3k7CisJfQorCisJLyoKKwkgKiBMb29wIHRocm91Z2ggdGhlIGxpc3Qg b2YgY2xhdXNlcywgYW5kIGZvciBlYWNoIG9mIHRoZW0gZXZhbHVhdGUKKwkg KiBhbGwgdGhlIE1DViBpdGVtcyBub3QgeWV0IGVsaW1pbmF0ZWQgYnkgdGhl IHByZWNlZGluZyBjbGF1c2VzLgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVz ZXMpCisJeworCQlOb2RlICogY2xhdXNlID0gKE5vZGUqKWxmaXJzdChsKTsK KworCQkvKiBpZiBpdCdzIGEgUmVzdHJpY3RJbmZvLCB0aGVuIGV4dHJhY3Qg dGhlIGNsYXVzZSAqLworCQlpZiAoSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZv KSkKKwkJCWNsYXVzZSA9IChOb2RlKikoKFJlc3RyaWN0SW5mbyopY2xhdXNl KS0+Y2xhdXNlOworCisJCS8qIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcg bWF0Y2hlcyBwb3NzaWJsZSwgd2UgY2FuIHN0b3AgKi8KKwkJaWYgKCgobm1h dGNoZXMgPT0gMCkgJiYgKCEgaXNfb3IpKSB8fAorCQkJKChubWF0Y2hlcyA9 PSBtY3ZsaXN0LT5uaXRlbXMpICYmIGlzX29yKSkKKwkJCQlicmVhazsKKwor CQkvKiBpdCdzIGVpdGhlciBPcENsYXVzZSwgb3IgTnVsbFRlc3QgKi8KKwkJ aWYgKGlzX29wY2xhdXNlKGNsYXVzZSkpCisJCXsKKwkJCU9wRXhwcgkgICAq ZXhwciA9IChPcEV4cHIqKWNsYXVzZTsKKwkJCWJvb2wJCXZhcm9ubGVmdCA9 IHRydWU7CisJCQlib29sCQlvazsKKwkJCUZtZ3JJbmZvCW9wcHJvYzsKKwor CQkJLyogZ2V0IHByb2NlZHVyZSBjb21wdXRpbmcgb3BlcmF0b3Igc2VsZWN0 aXZpdHkgKi8KKwkJCVJlZ1Byb2NlZHVyZQlvcHJyZXN0ID0gZ2V0X29wcnJl c3QoZXhwci0+b3Bubyk7CisKKwkJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKGV4 cHItPm9wbm8pLCAmb3Bwcm9jKTsKKworCQkJb2sgPSAoTnVtUmVsaWRzKGNs YXVzZSkgPT0gMSkgJiYKKwkJCQkgKGlzX3BzZXVkb19jb25zdGFudF9jbGF1 c2UobHNlY29uZChleHByLT5hcmdzKSkgfHwKKwkJCQkgKHZhcm9ubGVmdCA9 IGZhbHNlLAorCQkJCSAgaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsaW5p dGlhbChleHByLT5hcmdzKSkpKTsKKworCQkJaWYgKG9rKQorCQkJeworCisJ CQkJRm1nckluZm8JZ3Rwcm9jOworCQkJCVZhciAqIHZhciA9ICh2YXJvbmxl ZnQpID8gbGluaXRpYWwoZXhwci0+YXJncykgOiBsc2Vjb25kKGV4cHItPmFy Z3MpOworCQkJCUNvbnN0ICogY3N0ID0gKHZhcm9ubGVmdCkgPyBsc2Vjb25k KGV4cHItPmFyZ3MpIDogbGluaXRpYWwoZXhwci0+YXJncyk7CisJCQkJYm9v bCBpc2d0ID0gKCEgdmFyb25sZWZ0KTsKKworCQkJCVR5cGVDYWNoZUVudHJ5 ICp0eXBlY2FjaGUKKwkJCQkJCQkJPSBsb29rdXBfdHlwZV9jYWNoZSh2YXIt PnZhcnR5cGUsIFRZUEVDQUNIRV9HVF9PUFIpOworCisJCQkJLyogRklYTUUg cHJvcGVyIG1hdGNoaW5nIGF0dHJpYnV0ZSB0byBkaW1lbnNpb24gKi8KKwkJ CQlpbnQgaWR4ID0gbXZfZ2V0X2luZGV4KHZhci0+dmFyYXR0bm8sIHN0YWtl eXMpOworCisJCQkJZm1ncl9pbmZvKGdldF9vcGNvZGUodHlwZWNhY2hlLT5n dF9vcHIpLCAmZ3Rwcm9jKTsKKworCQkJCS8qCisJCQkJICogV2FsayB0aHJv dWdoIHRoZSBNQ1YgaXRlbXMgYW5kIGV2YWx1YXRlIHRoZSBjdXJyZW50IGNs YXVzZS4gV2UgY2FuCisJCQkJICogc2tpcCBpdGVtcyB0aGF0IHdlcmUgYWxy ZWFkeSBydWxlZCBvdXQsIGFuZCB0ZXJtaW5hdGUgaWYgdGhlcmUgYXJlCisJ CQkJICogbm8gcmVtYWluaW5nIE1DViBpdGVtcyB0aGF0IG1pZ2h0IHBvc3Np Ymx5IG1hdGNoLgorCQkJCSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBtY3Zs aXN0LT5uaXRlbXM7IGkrKykKKwkJCQl7CisJCQkJCWJvb2wgbWlzbWF0Y2gg PSBmYWxzZTsKKwkJCQkJTUNWSXRlbSBpdGVtID0gbWN2bGlzdC0+aXRlbXNb aV07CisKKwkJCQkJLyoKKwkJCQkJICogSWYgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hlcyAoQU5EKSBvciBubyByZW1haW5pbmcgdW5tYXRjaGVkCisJCQkJ CSAqIGl0ZW1zIChPUiksIHdlIGNhbiBzdG9wIHByb2Nlc3NpbmcgdGhpcyBj bGF1c2UuCisJCQkJCSAqLworCQkJCQlpZiAoKChubWF0Y2hlcyA9PSAwKSAm JiAoISBpc19vcikpIHx8CisJCQkJCQkoKG5tYXRjaGVzID09IG1jdmxpc3Qt Pm5pdGVtcykgJiYgaXNfb3IpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJLyoK KwkJCQkJICogRm9yIEFORC1saXN0cywgd2UgY2FuIGFsc28gbWFyayBOVUxM IGl0ZW1zIGFzICdubyBtYXRjaCcgKGFuZAorCQkJCQkgKiB0aGVuIHNraXAg dGhlbSkuIEZvciBPUi1saXN0cyB0aGlzIGlzIG5vdCBwb3NzaWJsZS4KKwkJ CQkJICovCisJCQkJCWlmICgoISBpc19vcikgJiYgaXRlbS0+aXNudWxsW2lk eF0pCisJCQkJCQltYXRjaGVzW2ldID0gTVZTVEFUU19NQVRDSF9OT05FOwor CisJCQkJCS8qIHNraXAgTUNWIGl0ZW1zIHRoYXQgd2VyZSBhbHJlYWR5IHJ1 bGVkIG91dCAqLworCQkJCQlpZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ld ID09IE1WU1RBVFNfTUFUQ0hfTk9ORSkpCisJCQkJCQljb250aW51ZTsKKwkJ CQkJZWxzZSBpZiAoaXNfb3IgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19N QVRDSF9GVUxMKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXN3aXRjaCAo b3BycmVzdCkKKwkJCQkJeworCQkJCQkJY2FzZSBGX0VRU0VMOgorCQkJCQkJ CS8qCisJCQkJCQkJICogV2UgZG9uJ3QgY2FyZSBhYm91dCBpc2d0IGluIGVx dWFsaXR5LCBiZWNhdXNlIGl0IGRvZXMgbm90CisJCQkJCQkJICogbWF0dGVy IHdoZXRoZXIgaXQncyAodmFyID0gY29uc3QpIG9yIChjb25zdCA9IHZhciku CisJCQkJCQkJICovCisJCQkJCQkJbWlzbWF0Y2ggPSAhIERhdHVtR2V0Qm9v bChGdW5jdGlvbkNhbGwyQ29sbCgmb3Bwcm9jLAorCQkJCQkJCQkJCQkJCQkJ CSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCQkJCQkJIGNz dC0+Y29uc3R2YWx1ZSwKKwkJCQkJCQkJCQkJCQkJCQkgaXRlbS0+dmFsdWVz W2lkeF0pKTsKKworCQkJCQkJCWlmICghIG1pc21hdGNoKQorCQkJCQkJCQll cW1hdGNoZXMgPSBibXNfYWRkX21lbWJlcihlcW1hdGNoZXMsIGlkeCk7CisK KwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBGX1NDQUxBUkxUU0VMOgkv KiBjb2x1bW4gPCBjb25zdGFudCAqLworCQkJCQkJY2FzZSBGX1NDQUxBUkdU U0VMOiAvKiBjb2x1bW4gPiBjb25zdGFudCAqLworCisJCQkJCQkJLyoKKwkJ CQkJCQkgKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBi ZWxvdyB0aGUgbG93ZXIgYm91bmRhcnkgKGluIHRoYXQKKwkJCQkJCQkgKiBj YXNlIHdlIGNhbiBza2lwIHRoZSBidWNrZXQsIGJlY2F1c2UgdGhlcmUncyBu byBvdmVybGFwKS4KKwkJCQkJCQkgKi8KKwkJCQkJCQltaXNtYXRjaCA9IERh dHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbCgmb3Bwcm9jLAorCQkJCQkJ CQkJCQkJCQkJCSBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJ CQkJCQkJIGNzdC0+Y29uc3R2YWx1ZSwKKwkJCQkJCQkJCQkJCQkJCQkgaXRl bS0+dmFsdWVzW2lkeF0pKTsKKworCQkJCQkJCS8qIGludmVydCB0aGUgcmVz dWx0IGlmIGlzZ3Q9dHJ1ZSAqLworCQkJCQkJCW1pc21hdGNoID0gKGlzZ3Qp ID8gKCEgbWlzbWF0Y2gpIDogbWlzbWF0Y2g7CisJCQkJCQkJYnJlYWs7CisJ CQkJCX0KKworCQkJCQkvKiBYWFggVGhlIGNvbmRpdGlvbnMgb24gbWF0Y2hl c1tpXSBhcmUgbm90IG5lZWRlZCwgYXMgd2UKKwkJCQkJICogICAgIHNraXAg TUNWIGl0ZW1zIHRoYXQgY2FuJ3QgYmVjb21lIHRydWUvZmFsc2UsIGRlcGVu ZGluZworCQkJCQkgKiAgICAgb24gdGhlIGN1cnJlbnQgZmxhZy4gU2VlIGJl Z2lubmluZyBvZiB0aGUgbG9vcCBvdmVyCisJCQkJCSAqICAgICBNQ1YgaXRl bXMuCisJCQkJCSAqLworCisJCQkJCWlmICgoaXNfb3IpICYmIChtYXRjaGVz W2ldID09IE1WU1RBVFNfTUFUQ0hfTk9ORSkgJiYgKCEgbWlzbWF0Y2gpKQor CQkJCQl7CisJCQkJCQkvKiBPUiAtIHdhcyBNQVRDSF9OT05FLCBidXQgd2ls bCBiZSBNQVRDSF9GVUxMICovCisJCQkJCQltYXRjaGVzW2ldID0gTVZTVEFU U19NQVRDSF9GVUxMOworCQkJCQkJKytubWF0Y2hlczsKKwkJCQkJCWNvbnRp bnVlOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKCghIGlzX29yKSAmJiAobWF0 Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpICYmIG1pc21hdGNoKQor CQkJCQl7CisJCQkJCQkvKiBBTkQgLSB3YXMgTUFUQ19GVUxMLCBidXQgd2ls bCBiZSBNQVRDSF9OT05FICovCisJCQkJCQltYXRjaGVzW2ldID0gTVZTVEFU U19NQVRDSF9OT05FOworCQkJCQkJLS1ubWF0Y2hlczsKKwkJCQkJCWNvbnRp bnVlOworCQkJCQl9CisKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAo SXNBKGNsYXVzZSwgTnVsbFRlc3QpKQorCQl7CisJCQlOdWxsVGVzdCAqIGV4 cHIgPSAoTnVsbFRlc3QqKWNsYXVzZTsKKwkJCVZhciAqIHZhciA9IChWYXIq KShleHByLT5hcmcpOworCisJCQkvKiBGSVhNRSBwcm9wZXIgbWF0Y2hpbmcg YXR0cmlidXRlIHRvIGRpbWVuc2lvbiAqLworCQkJaW50IGlkeCA9IG12X2dl dF9pbmRleCh2YXItPnZhcmF0dG5vLCBzdGFrZXlzKTsKKworCQkJLyoKKwkJ CSAqIFdhbGsgdGhyb3VnaCB0aGUgTUNWIGl0ZW1zIGFuZCBldmFsdWF0ZSB0 aGUgY3VycmVudCBjbGF1c2UuIFdlIGNhbgorCQkJICogc2tpcCBpdGVtcyB0 aGF0IHdlcmUgYWxyZWFkeSBydWxlZCBvdXQsIGFuZCB0ZXJtaW5hdGUgaWYg dGhlcmUgYXJlCisJCQkgKiBubyByZW1haW5pbmcgTUNWIGl0ZW1zIHRoYXQg bWlnaHQgcG9zc2libHkgbWF0Y2guCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7 IGkgPCBtY3ZsaXN0LT5uaXRlbXM7IGkrKykKKwkJCXsKKwkJCQlNQ1ZJdGVt IGl0ZW0gPSBtY3ZsaXN0LT5pdGVtc1tpXTsKKworCQkJCS8qIGlmIHRoZXJl IGFyZSBubyBtb3JlIG1hdGNoZXMsIHdlIGNhbiBzdG9wIHByb2Nlc3Npbmcg dGhpcyBjbGF1c2UgKi8KKwkJCQlpZiAobm1hdGNoZXMgPT0gMCkKKwkJCQkJ YnJlYWs7CisKKwkJCQkvKiBza2lwIE1DViBpdGVtcyB0aGF0IHdlcmUgYWxy ZWFkeSBydWxlZCBvdXQgKi8KKwkJCQlpZiAobWF0Y2hlc1tpXSA9PSBNVlNU QVRTX01BVENIX05PTkUpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogaWYg dGhlIGNsYXVzZSBtaXNtYXRjaGVzIHRoZSBNQ1YgaXRlbSwgc2V0IGl0IGFz IE1BVENIX05PTkUgKi8KKwkJCQlpZiAoKChleHByLT5udWxsdGVzdHR5cGUg PT0gSVNfTlVMTCkgJiYgKCEgaXRlbS0+aXNudWxsW2lkeF0pKSB8fAorCQkJ CQkoKGV4cHItPm51bGx0ZXN0dHlwZSA9PSBJU19OT1RfTlVMTCkgJiYgKGl0 ZW0tPmlzbnVsbFtpZHhdKSkpCisJCQkJeworCQkJCQkJbWF0Y2hlc1tpXSA9 IE1WU1RBVFNfTUFUQ0hfTk9ORTsKKwkJCQkJCS0tbm1hdGNoZXM7CisJCQkJ fQorCQkJfQorCQl9CisJCWVsc2UgaWYgKG9yX2NsYXVzZShjbGF1c2UpIHx8 IGFuZF9jbGF1c2UoY2xhdXNlKSkKKwkJeworCQkJLyogQU5EL09SIGNsYXVz ZSwgd2l0aCBhbGwgY2xhdXNlcyBjb21wYXRpYmxlIHdpdGggdGhlIHNlbGVj dGVkIE1WIHN0YXQgKi8KKworCQkJaW50CQkJaTsKKwkJCUJvb2xFeHByICAg Km9yY2xhdXNlICA9ICgoQm9vbEV4cHIqKWNsYXVzZSk7CisJCQlMaXN0CSAg ICpvcmNsYXVzZXMgPSBvcmNsYXVzZS0+YXJnczsKKworCQkJLyogbWF0Y2gv bWlzbWF0Y2ggYml0bWFwIGZvciBlYWNoIE1DViBpdGVtICovCisJCQlpbnQJ b3Jfbm1hdGNoZXMgPSAwOworCQkJY2hhciAqIG9yX21hdGNoZXMgPSBOVUxM OworCisJCQlBc3NlcnQob3JjbGF1c2VzICE9IE5JTCk7CisJCQlBc3NlcnQo bGlzdF9sZW5ndGgob3JjbGF1c2VzKSA+PSAyKTsKKworCQkJLyogbnVtYmVy IG9mIG1hdGNoaW5nIE1DViBpdGVtcyAqLworCQkJb3Jfbm1hdGNoZXMgPSBt Y3ZsaXN0LT5uaXRlbXM7CisKKwkJCS8qIGJ5IGRlZmF1bHQgbm9uZSBvZiB0 aGUgTUNWIGl0ZW1zIG1hdGNoZXMgdGhlIGNsYXVzZXMgKi8KKwkJCW9yX21h dGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG9yX25tYXRjaGVzKTsK KworCQkJaWYgKG9yX2NsYXVzZShjbGF1c2UpKQorCQkJeworCQkJCS8qIE9S IGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICov CisJCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwg c2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKKwkJCQlvcl9ubWF0Y2hlcyA9 IDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogQU5EIGNsYXVzZXMg YXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCisJCQkJbWVt c2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNo YXIpKm9yX25tYXRjaGVzKTsKKwkJCX0KKworCQkJLyogYnVpbGQgdGhlIG1h dGNoIGJpdG1hcCBmb3IgdGhlIE9SLWNsYXVzZXMgKi8KKwkJCW9yX25tYXRj aGVzID0gdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIG9yY2xh dXNlcywKKwkJCQkJCQkJCSAgIHN0YWtleXMsIG1jdmxpc3QsCisJCQkJCQkJ CQkgICBvcl9ubWF0Y2hlcywgb3JfbWF0Y2hlcywKKwkJCQkJCQkJCSAgIGxv d3NlbCwgZnVsbG1hdGNoLCBvcl9jbGF1c2UoY2xhdXNlKSk7CisKKwkJCS8q IG1lcmdlIHRoZSBiaXRtYXAgaW50byB0aGUgZXhpc3Rpbmcgb25lKi8KKwkJ CWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5uaXRlbXM7IGkrKykKKwkJCXsK KwkJCQkvKgorCQkJCSAqIFRvIEFORC1tZXJnZSB0aGUgYml0bWFwcywgYSBN SU4oKSBzZW1hbnRpY3MgaXMgdXNlZC4KKwkJCQkgKiBGb3IgT1ItbWVyZ2Us IHVzZSBNQVgoKS4KKwkJCQkgKgorCQkJCSAqIEZJWE1FIHRoaXMgZG9lcyBu b3QgZGVjcmVhc2UgdGhlIG51bWJlciBvZiBtYXRjaGVzCisJCQkJICovCisJ CQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBvcl9tYXRjaGVzW2ldLCBp c19vcik7CisJCQl9CisKKwkJCXBmcmVlKG9yX21hdGNoZXMpOworCisJCX0K KwkJZWxzZQorCQl7CisJCQllbG9nKEVSUk9SLCAidW5rbm93biBjbGF1c2Ug dHlwZTogJWQiLCBjbGF1c2UtPnR5cGUpOworCQl9CisJfQorCisJLyoKKwkg KiBJZiBhbGwgdGhlIGNvbHVtbnMgd2VyZSBtYXRjaGVkIGJ5IGVxdWFsaXR5 LCBpdCdzIGEgZnVsbCBtYXRjaC4KKwkgKiBJbiB0aGlzIGNhc2UgdGhlcmUg Y2FuIGJlIGp1c3QgYSBzaW5nbGUgTUNWIGl0ZW0sIG1hdGNoaW5nIHRoZQor CSAqIGNsYXVzZSAoaWYgdGhlcmUgd2VyZSB0d28sIGJvdGggd291bGQgbWF0 Y2ggdGhlIG90aGVyIG9uZSkuCisJICovCisJKmZ1bGxtYXRjaCA9IChibXNf bnVtX21lbWJlcnMoZXFtYXRjaGVzKSA9PSBtY3ZsaXN0LT5uZGltZW5zaW9u cyk7CisKKwkvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgcGllY2VzICovCisJaWYg KGVxbWF0Y2hlcykKKwkJcGZyZWUoZXFtYXRjaGVzKTsKKworCXJldHVybiBu bWF0Y2hlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BsYW5jYXQuYwppbmRleCA3ZmIyMDg4Li44Mzk0MTExIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC00MTIs NyArNDEyLDcgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJv b3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJ CW12c3RhdCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0 dXApOwogCiAJCQkvKiB1bmF2YWlsYWJsZSBzdGF0cyBhcmUgbm90IGludGVy ZXN0aW5nIGZvciB0aGUgcGxhbm5lciAqLwotCQkJaWYgKG12c3RhdC0+ZGVw c19idWlsdCkKKwkJCWlmIChtdnN0YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0 LT5tY3ZfYnVpbHQpCiAJCQl7CiAJCQkJaW5mbyA9IG1ha2VOb2RlKE1WU3Rh dGlzdGljSW5mbyk7CiAKQEAgLTQyMSw5ICs0MjEsMTEgQEAgZ2V0X3JlbGF0 aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVj dElkLCBib29sIGluaHBhcmVudCwKIAogCQkJCS8qIGVuYWJsZWQgc3RhdGlz dGljcyAqLwogCQkJCWluZm8tPmRlcHNfZW5hYmxlZCA9IG12c3RhdC0+ZGVw c19lbmFibGVkOworCQkJCWluZm8tPm1jdl9lbmFibGVkICA9IG12c3RhdC0+ bWN2X2VuYWJsZWQ7CiAKIAkJCQkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlz dGljcyAqLwogCQkJCWluZm8tPmRlcHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNf YnVpbHQ7CisJCQkJaW5mby0+bWN2X2J1aWx0ICA9IG12c3RhdC0+bWN2X2J1 aWx0OwogCiAJCQkJLyogc3Rha2V5cyAqLwogCQkJCWFkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0dXAsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9NYWtlZmlsZQppbmRleCAwOTlmMWVkLi5mOWJmMTBj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2Vm aWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUK QEAgLTEyLDYgKzEyLDYgQEAgc3ViZGlyID0gc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cwogdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUg JCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAotT0JKUyA9 IGNvbW1vbi5vIGRlcGVuZGVuY2llcy5vCitPQkpTID0gY29tbW9uLm8gZGVw ZW5kZW5jaWVzLm8gbWN2Lm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Ny Yy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9SRUFETUUubWN2IGIvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9SRUFETUUubWN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU5M2NmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5tY3YKQEAgLTAsMCArMSwxMzcg QEAKK01DViBsaXN0cworPT09PT09PT09CisKK011bHRpdmFyaWF0ZSBNQ1Yg KG1vc3QtY29tbW9uIHZhbHVlcykgbGlzdHMgYXJlIGEgc3RyYWlnaHRmb3J3 YXJkIGV4dGVuc2lvbiBvZgorcmVndWxhciBNQ1YgbGlzdCwgdHJhY2tpbmcg bW9zdCBmcmVxdWVudCBjb21iaW5hdGlvbnMgb2YgdmFsdWVzIGZvciBhIGdy b3VwIG9mCithdHRyaWJ1dGVzLgorCitUaGlzIHdvcmtzIHBhcnRpY3VsYXJs eSB3ZWxsIGZvciBjb2x1bW5zIHdpdGggYSBzbWFsbCBudW1iZXIgb2YgZGlz dGluY3QgdmFsdWVzLAorYXMgdGhlIGxpc3QgbWF5IGluY2x1ZGUgYWxsIHRo ZSBjb21iaW5hdGlvbnMgYW5kIGFwcHJveGltYXRlIHRoZSBkaXN0cmlidXRp b24KK3ZlcnkgYWNjdXJhdGVseS4KKworRm9yIGNvbHVtbnMgd2l0aCBsYXJn ZSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIChlLmcuIHRob3NlIHdpdGgg Y29udGludW91cworZG9tYWlucyksIHRoZSBsaXN0IHdpbGwgb25seSB0cmFj ayB0aGUgbW9zdCBmcmVxdWVudCBjb21iaW5hdGlvbnMuIElmIHRoZQorZGlz dHJpYnV0aW9uIGlzIG1vc3RseSB1bmlmb3JtIChhbGwgY29tYmluYXRpb25z IGFib3V0IGVxdWFsbHkgZnJlcXVlbnQpLCB0aGUKK01DViBsaXN0IHdpbGwg YmUgZW1wdHkuCisKK0VzdGltYXRlcyBvZiBzb21lIGNsYXVzZXMgKGUuZy4g ZXF1YWxpdHkpIGJhc2VkIG9uIE1DViBsaXN0cyBhcmUgbW9yZSBhY2N1cmF0 ZQordGhhbiB3aGVuIHVzaW5nIGhpc3RvZ3JhbXMuCisKK0Fsc28sIE1DViBs aXN0cyBkb24ndCBuZWNlc3NhcmlseSByZXF1aXJlIHNvcnRpbmcgb2YgdGhl IHZhbHVlcyAodGhlIGZhY3QgdGhhdAord2UgdXNlIHNvcnRpbmcgd2hlbiBi dWlsZGluZyB0aGVtIGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCksIGJ1dCBl dmVuIG1vcmUKK2ltcG9ydGFudGx5IHRoZSBvcmRlcmluZyBpcyBub3QgYnVp bHQgaW50byB0aGUgYXBwcm94aW1hdGlvbiAod2hpbGUgaGlzdG9ncmFtcwor YXJlIGJ1aWx0IG9uIG9yZGVyaW5nKS4gU28gTUNWIGxpc3RzIHdvcmsgd2Vs bCBldmVuIGZvciBhdHRyaWJ1dGVzIHdoZXJlIHRoZQorb3JkZXJpbmcgb2Yg dGhlIGRhdGEgdHlwZSBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgbWVhbmlu ZyBvZiB0aGUgZGF0YS4gRm9yCitleGFtcGxlIHdlIGtub3cgaG93IHRvIHNv cnQgc3RyaW5ncywgYnV0IGl0J3MgdW5saWtlbHkgdG8gbWFrZSBtdWNoIHNl bnNlIGZvcgorY2l0eSBuYW1lcyAob3Igb3RoZXIgbGFiZWwtbGlrZSBhdHRy aWJ1dGVzKS4KKworCitTZWxlY3Rpdml0eSBlc3RpbWF0aW9uCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlc3RpbWF0aW9uLCBpbXBsZW1lbnRl ZCBpbiBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3QoKSwgaXMg cXVpdGUKK3NpbXBsZSBpbiBwcmluY2lwbGUgLSB3ZSBuZWVkIHRvIGlkZW50 aWZ5IE1DViBpdGVtcyBtYXRjaGluZyBhbGwgdGhlIGNsYXVzZXMKK2FuZCBz dW0gZnJlcXVlbmNpZXMgb2YgYWxsIHRob3NlIGl0ZW1zLgorCitDdXJyZW50 bHkgTUNWIGxpc3RzIHN1cHBvcnQgZXN0aW1hdGlvbiBvZiB0aGUgZm9sbG93 aW5nIGNsYXVzZSB0eXBlczoKKworICAgIChhKSBlcXVhbGl0eSBjbGF1c2Vz ICAgIFdIRVJFIChhID0gMSkgQU5EIChiID0gMikKKyAgICAoYikgaW5lcXVh bGl0eSBjbGF1c2VzICBXSEVSRSAoYSA8IDEpIEFORCAoYiA+PSAyKQorICAg IChjKSBOVUxMIGNsYXVzZXMgICAgICAgIFdIRVJFIChhIElTIE5VTEwpIEFO RCAoYiBJUyBOT1QgTlVMTCkKKyAgICAoZCkgT1IgY2xhdXNlcyAgICAgICAg ICBXSEVSRSAoYSA8IDEpIE9SIChiID49IDIpCisKK0l0J3MgcG9zc2libGUg dG8gYWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgY2xhdXNlcywgZm9yIGV4 YW1wbGU6CisKKyAgICAoZSkgbXVsdGktdmFyIGNsYXVzZXMgICBXSEVSRSAo YSA+IGIpCisKK2FuZCBwb3NzaWJseSBvdGhlcnMuIFRoZXNlIGFyZSB0YXNr cyBmb3IgdGhlIGZ1dHVyZSwgbm90IHlldCBpbXBsZW1lbnRlZC4KKworCitF c3RpbWF0aW5nIGVxdWFsaXR5IGNsYXVzZXMKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCitXaGVuIGNvbXB1dGluZyBzZWxlY3Rpdml0eSBlc3Rp bWF0ZSBmb3IgZXF1YWxpdHkgY2xhdXNlcworCisgICAgKGEgPSAxKSBBTkQg KGIgPSAyKQorCit3ZSBjYW4gZG8gdGhpcyBlc3RpbWF0ZSBwcmV0dHkgZXhh Y3RseSBhc3N1bWluZyB0aGF0IHR3byBjb25kaXRpb25zIGFyZSBtZXQ6CisK KyAgICAoMSkgdGhlcmUncyBhbiBlcXVhbGl0eSBjb25kaXRpb24gb24gYWxs IGF0dHJpYnV0ZXMgb2YgdGhlIHN0YXRpc3RpYworCisgICAgKDIpIHdlIGZp bmQgYSBtYXRjaGluZyBpdGVtIGluIHRoZSBNQ1YgbGlzdAorCitJbiB0aGlz IGNhc2Ugd2Uga25vdyB0aGUgTUNWIGl0ZW0gcmVwcmVzZW50cyBhbGwgdHVw bGVzIG1hdGNoaW5nIHRoZSBjbGF1c2VzLAorYW5kIHRoZSBzZWxlY3Rpdml0 eSBlc3RpbWF0ZSBpcyBjb21wbGV0ZSAoaS5lLiB3ZSBkb24ndCBuZWVkIHRv IHBlcmZvcm0KK2VzdGltYXRpb24gdXNpbmcgdGhlIGhpc3RvZ3JhbSkuIFRo aXMgaXMgd2hhdCB3ZSBjYWxsICdmdWxsIG1hdGNoJy4KKworV2hlbiBvbmx5 ICgxKSBob2xkcywgYnV0IHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgTUNWIGl0ZW0s IHdlIGRvbid0IGtub3cgd2hldGhlcgordGhlcmUgYXJlIG5vIHN1Y2ggcm93 cyBvciBqdXN0IGFyZSBub3QgdmVyeSBmcmVxdWVudC4gV2UgY2FuIGhvd2V2 ZXIgdXNlIHRoZQorZnJlcXVlbmN5IG9mIHRoZSBsZWFzdCBmcmVxdWVudCBN Q1YgaXRlbSBhcyBhbiB1cHBlciBib3VuZCBmb3IgdGhlIHNlbGVjdGl2aXR5 LgorCitGb3IgYSBjb21iaW5hdGlvbiBvZiBlcXVhbGl0eSBjb25kaXRpb25z IChub3QgZnVsbC1tYXRjaCBjYXNlKSB3ZSBjYW4gY2xhbXAgdGhlCitzZWxl Y3Rpdml0eSBieSB0aGUgbWluaW11bSBvZiBzZWxlY3Rpdml0aWVzIGZvciBl YWNoIGNvbmRpdGlvbi4gRm9yIGV4YW1wbGUgaWYKK3dlIGtub3cgdGhlIG51 bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uLCB3ZSBj YW4gdXNlIDEvbmRpc3RpbmN0CithcyBhIHBlci1jb2x1bW4gZXN0aW1hdGUu IE9yIHJhdGhlciAxL25kaXN0aW5jdCArIHNlbGVjdGl2aXR5IGRlcml2ZWQg ZnJvbSB0aGUKK01DViBsaXN0LgorCitXZSBzaG91bGQgYWxzbyBwcm9iYWJs eSBvbmx5IHVzZSB0aGUgJ3Jlc2lkdWFsIG5kaXN0aW5jdCcgYnkgZXhsdWRp bmcgdGhlIGl0ZW1zCitpbmNsdWRlZCBpbiB0aGUgTUNWIGxpc3QgKGFuZCBh bHNvIHJlc2lkdWFsIGZyZXF1ZW5jeSk6CisKKyAgICAgZiA9ICgxLjAgLSBz dW0oTUNWIGZyZXF1ZW5jaWVzKSkgLyAobmRpc3RpbmN0IC0gbmRpc3RpbmN0 KE1DViBsaXN0KSkKKworYnV0IGl0J3Mgd29ydGggcG9pbnRpbmcgb3V0IHRo ZSBuZGlzdGluY3QgdmFsdWVzIGFyZSBtdWx0aS12YXJpYXRlIGZvciB0aGUK K2NvbHVtbnMgcmVmZXJlbmNlZCBieSB0aGUgZXF1YWxpdHkgY29uZGl0aW9u cy4KKworTm90ZTogT25seSB0aGUgImZ1bGwgbWF0Y2giIGxpbWl0IGlzIGN1 cnJlbnRseSBpbXBsZW1lbnRlZC4KKworCitIYXNoZWQgTUNWIChub3QgeWV0 IGltcGxlbWVudGVkKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKworUmVndWxhciBNQ1YgbGlzdHMgaGF2ZSB0byBpbmNsdWRlIGFjdHVh bCB2YWx1ZXMgZm9yIGVhY2ggaXRlbSwgc28gaWYgdGhvc2UgaXRlbXMKK2Fy ZSBsYXJnZSB0aGUgbGlzdCBtYXkgYmUgcXVpdGUgbGFyZ2UuIFRoaXMgaXMg ZXNwZWNpYWxseSB0cnVlIGZvciBtdWx0aS12YXJpYXRlCitNQ1YgbGlzdHMs IGFsdGhvdWdoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHBhcnRpYWxs eSBtaXRpZ2F0ZXMgdGhpcyBieQorcGVyZm9ybWluZyBkZS1kdXBsaWNhdGlu ZyB0aGUgdmFsdWVzIGJlZm9yZSBzdG9yaW5nIHRoZW0gb24gZGlzay4KKwor SXQncyBwb3NzaWJsZSB0byBvbmx5IHN0b3JlIGhhc2hlcyAoMzItYml0IHZh bHVlcykgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHZhbHVlcywKK3NpZ25pZmlj YW50bHkgcmVkdWNpbmcgdGhlIHNwYWNlIHJlcXVpcmVtZW50cy4gT2J2aW91 c2x5LCB0aGlzIHdvdWxkIG9ubHkgbWFrZQordGhlIE1DViBsaXN0cyB1c2Vm dWwgZm9yIGVzdGltYXRpbmcgZXF1YWxpdHkgY29uZGl0aW9ucyAoYXNzdW1p bmcgdGhlIDMyLWJpdAoraGFzaGVzIG1ha2UgdGhlIGNvbGxpc2lvbnMgcmFy ZSBlbm91Z2gpLgorCitUaGlzIG1pZ2h0IGFsc28gY29tcGxpY2F0ZSBtYXRj aGluZyB0aGUgY29sdW1ucyB0byBhdmFpbGFibGUgc3RhdHMuCisKKworVE9E TyBDb25zaWRlciBpbXBsZW1lbnRpbmcgaGFzaGVkIE1DViBsaXN0LCBzdG9y aW5nIGp1c3QgMzItYml0IGhhc2hlcyBpbnN0ZWFkCisgICAgIG9mIHRoZSBh Y3R1YWwgdmFsdWVzLiBUaGlzIHR5cGUgb2YgTUNWIGxpc3Qgd2lsbCBiZSB1 c2VmdWwgb25seSBmb3IKKyAgICAgZXN0aW1hdGluZyBlcXVhbGl0eSBjbGF1 c2VzLCBhbmQgd2lsbCByZWR1Y2Ugc3BhY2UgcmVxdWlyZW1lbnRzIGZvciBs YXJnZQorICAgICB2YXJsZW5hIHR5cGVzIChpbiBzdWNoIGNhc2VzIHdlIHVz dWFsbHkgb25seSB3YW50IGVxdWFsaXR5IGFueXdheSkuCisKK1RPRE8gQ3Vy cmVudGx5IHRoZXJlJ3Mgbm8gbG9naWMgdG8gY29uc2lkZXIgYnVpbGRpbmcg b25seSBhIE1DViBsaXN0IChhbmQgbm90CisgICAgIGJ1aWxkaW5nIHRoZSBo aXN0b2dyYW0gYXQgYWxsKSwgZXhjZXB0IGZvciBkb2luZyB0aGlzIGRlY2lz aW9uIG1hbnVhbGx5IGluCisgICAgIEFERCBTVEFUSVNUSUNTLgorCisKK0lu c3BlY3RpbmcgdGhlIE1DViBsaXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCitJbnNwZWN0aW5nIHRoZSByZWd1bGFyIChwZXItYXR0cmlidXRlKSBN Q1YgbGlzdHMgaXMgdHJpdmlhbCwgYXMgaXQncyBlbm91Z2gKK3RvIHNlbGVj dCB0aGUgY29sdW1ucyBmcm9tIHBnX3N0YXRzIC0gdGhlIGRhdGEgaXMgZW5j b2RlZCBhcyBhbnlhcnJheXMsIHNvIHdlCitzaW1wbHkgZ2V0IHRoZSB0ZXh0 IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhcnJheXMuCisKK1dpdGggbXVsdGl2 YXJpYXRlIE1DViBsaXRzIGl0J3Mgbm90IHRoYXQgc2ltcGxlIGR1ZSB0byB0 aGUgcG9zc2libGUgbWl4IG9mCitkYXRhIHR5cGVzLiBJdCBtaWdodCBiZSBw b3NzaWJsZSB0byBwcm9kdWNlIHNpbWlsYXIgYXJyYXktbGlrZSByZXByZXNl bnRhdGlvbiwKK2J1dCB0aGF0J2QgdW5uZWNlc3NhcmlseSBjb21wbGljYXRl IGZ1cnRoZXIgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMgb2YgdGhlIE1DVgor bGlzdC4gSW5zdGVhZCwgdGhlcmUncyBhIFNSRiBmdW5jdGlvbiBwcm92aWRp bmcgdmFsdWVzLCBmcmVxdWVuY2llcyBldGMuCisKKyAgICBTRUxFQ1QgKiBG Uk9NIHBnX212X21jdl9pdGVtcygpOworCitJdCBoYXMgdHdvIGlucHV0IHBh cmFtZXRlcnM6CisKKyAgICBvaWQgICAtIE9JRCBvZiB0aGUgTUNWIGxpc3Qg KHBnX212X3N0YXRpc3RpYy5zdGFvaWQpCisKK2FuZCBwcm9kdWNlcyBhIHRh YmxlIHdpdGggdGhlc2UgY29sdW1uczoKKworICAgIC0gaXRlbSBJRCAoMC4u Lm5pdGVtcy0xKQorICAgIC0gdmFsdWVzIChzdHJpbmcgYXJyYXkpCisgICAg LSBudWxscyBvbmx5IChib29sZWFuIGFycmF5KQorICAgIC0gZnJlcXVlbmN5 IChkb3VibGUgcHJlY2lzaW9uKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5zdGF0cwppbmRleCBhMzhlYTdiLi41YzVjNTlh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURN RS5zdGF0cworKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURN RS5zdGF0cwpAQCAtOCw5ICs4LDUwIEBAIG5vdCB0cnVlLCByZXN1bHRpbmcg aW4gZXN0aW1hdGlvbiBlcnJvcnMuCiBNdWx0aXZhcmlhdGUgc3RhdHMgdHJh Y2sgZGlmZmVyZW50IHR5cGVzIG9mIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRo ZSBjb2x1bW5zLAogaG9wZWZ1bGx5IGltcHJvdmluZyB0aGUgZXN0aW1hdGVz LgogCi1DdXJyZW50bHkgd2Ugb25seSBoYXZlIG9uZSBraW5kIG9mIG11bHRp dmFyaWF0ZSBzdGF0aXN0aWNzIC0gc29mdCBmdW5jdGlvbmFsCi1kZXBlbmRl bmNpZXMsIGFuZCB3ZSB1c2UgaXQgdG8gaW1wcm92ZSBlc3RpbWF0ZXMgb2Yg ZXF1YWxpdHkgY2xhdXNlcy4gU2VlCi1SRUFETUUuZGVwZW5kZW5jaWVzIGZv ciBkZXRhaWxzLgorCitUeXBlcyBvZiBzdGF0aXN0aWNzCistLS0tLS0tLS0t LS0tLS0tLS0tCisKK0N1cnJlbnRseSB3ZSBvbmx5IGhhdmUgdHdvIGtpbmRz IG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzCisKKyAgICAoYSkgc29mdCBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcyAoUkVBRE1FLmRlcGVuZGVuY2llcykK KworICAgIChiKSBNQ1YgbGlzdHMgKFJFQURNRS5tY3YpCisKKworQ29tcGF0 aWJsZSBjbGF1c2UgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK K0VhY2ggdHlwZSBvZiBzdGF0aXN0aWNzIG1heSBiZSB1c2VkIHRvIGVzdGlt YXRlIHNvbWUgc3Vic2V0IG9mIGNsYXVzZSB0eXBlcy4KKworICAgIChhKSBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcyAtIGVxdWFsaXR5IGNsYXVzZXMgKEFO RCksIHBvc3NpYmx5IElTIE5VTEwKKworICAgIChiKSBNQ1YgbGlzdCAtIGVx dWFsaXR5IGFuZCBpbmVxdWFsaXR5IGNsYXVzZXMsIElTIFtOT1RdIE5VTEws IEFORC9PUgorCitDdXJyZW50bHkgb25seSBzaW1wbGUgb3BlcmF0b3IgY2xh dXNlcyAoVmFyIG9wIENvbnN0KSBhcmUgc3VwcG9ydGVkLCBidXQgaXQncwor cG9zc2libGUgdG8gc3VwcG9ydCBtb3JlIGNvbXBsZXggY2xhdXNlIHR5cGVz LCBlLmcuIChWYXIgb3AgVmFyKS4KKworCitDb21wbGV4IGNsYXVzZXMKKy0t LS0tLS0tLS0tLS0tLQorCitXZSBhbHNvIHN1cHBvcnQgZXN0aW1hdGluZyBt b3JlIGNvbXBsZXggY2xhdXNlcyAtIGVzc2VudGlhbGx5IEFORC9PUiBjbGF1 c2VzCit3aXRoIChWYXIgb3AgQ29uc3QpIGFzIGxlYXZlcywgYXMgbG9uZyBh cyBhbGwgdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlcyBhcmUKK2NvdmVyZWQg YnkgYSBzaW5nbGUgc3RhdGlzdGljcy4KKworRm9yIGV4YW1wbGUgdGhpcyBj b25kaXRpb24KKworICAgIChhPTEpIEFORCAoKGI9MikgT1IgKChjPTMpIEFO RCAoZD00KSkpCisKK21heSBiZSBlc3RpbWF0ZWQgdXNpbmcgc3RhdGlzdGlj cyBvbiAoYSxiLGMsZCkuIElmIHdlIG9ubHkgaGF2ZSBzdGF0aXN0aWNzIG9u CisoYixjLGQpIHdlIG1heSBlc3RpbWF0ZSB0aGUgc2Vjb25kIHBhcnQsIGFu ZCBlc3RpbWF0ZSAoYT0xKSB1c2luZyBzaW1wbGUgc3RhdHMuCisKK0lmIHdl IG9ubHkgaGF2ZSBzdGF0aXN0aWNzIG9uIChhLGIsYykgd2UgY2FuJ3QgYXBw bHkgaXQgYXQgYWxsIGF0IHRoaXMgcG9pbnQsCitidXQgaXQncyB3b3J0aCBw b2ludGluZyBvdXQgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eSgpIHdvcmtzIHJl Y3Vyc2l2ZWx5IGFuZCB3aGVuCitoYW5kbGluZyB0aGUgc2Vjb25kIHBhcnQg KHRoZSBPUi1jbGF1c2UpLCB3ZSdsbCBiZSBhYmxlIHRvIGFwcGx5IHRoZSBz dGF0aXN0aWNzLgorCitOb3RlOiBUaGUgbXVsdGktc3RhdGlzdGljcyBlc3Rp bWF0aW9uIHBhdGNoIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gcGFzcyBz b21lCitjbGF1c2VzIGFzICdjb25kaXRpb25zJyBpbnRvIHRoZSBkZWVwZXIg cGFydHMgb2YgdGhlIGV4cHJlc3Npb24gdHJlZS4KIAogCiBTZWxlY3Rpdml0 eSBlc3RpbWF0aW9uCkBAIC0yMywxNCArNjQsNDggQEAgV2hlbiBlc3RpbWF0 aW5nIHNlbGVjdGl2aXR5LCB3ZSBhaW0gdG8gYWNoaWV2ZSBzZXZlcmFsIHRo aW5nczoKICAgICAoYikgbWluaW1pemUgdGhlIG92ZXJoZWFkLCBlc3BlY2lh bGx5IHdoZW4gbm8gc3VpdGFibGUgbXVsdGl2YXJpYXRlIHN0YXRzCiAgICAg ICAgIGV4aXN0IChzbyBpZiB5b3UgYXJlIG5vdCB1c2luZyBtdWx0aXZhcmlh dGUgc3RhdHMsIHRoZXJlJ3Mgbm8gb3ZlcmhlYWQpCiAKLVRoaXMgY2xhdXNl bGlzdF9zZWxlY3Rpdml0eSgpIHBlcmZvcm1zIHNldmVyYWwgaW5leHBlbnNp dmUgY2hlY2tzIGZpcnN0LCBiZWZvcmUKK1RodXMgY2xhdXNlbGlzdF9zZWxl Y3Rpdml0eSgpIHBlcmZvcm1zIHNldmVyYWwgaW5leHBlbnNpdmUgY2hlY2tz IGZpcnN0LCBiZWZvcmUKIGV2ZW4gYXR0ZW1wdGluZyB0byBkbyB0aGUgbW9y ZSBleHBlbnNpdmUgZXN0aW1hdGlvbi4KIAogICAgICgxKSBjaGVjayBpZiB0 aGVyZSBhcmUgbXVsdGl2YXJpYXRlIHN0YXRzIG9uIHRoZSByZWxhdGlvbgog Ci0gICAgKDIpIGNoZWNrIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gYXR0cmli dXRlcyByZWZlcmVuY2VkIGJ5IGNsYXVzZXMgY29tcGF0aWJsZQotICAgICAg ICB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIChlcXVhbGl0eSBjbGF1 c2VzIGZvciBmdW5jLiBkZXBlbmRlbmNpZXMpCisgICAgKDIpIGNoZWNrIHRo YXQgdGhlcmUgYXJlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIHRoZSB0 YWJsZSwgYW5kIHRoYXQKKyAgICAgICAgdGhlcmUgYXJlIGF0IGxlYXN0IHR3 byBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgYnkgY29tcGF0aWJsZSBjbGF1c2Vz CisgICAgICAgIChlcXVhbGl0eSBjbGF1c2VzIGZvciBmdW5jLiBkZXBlbmRl bmNpZXMpCiAKICAgICAoMykgcGVyZm9ybSByZWR1Y3Rpb24gb2YgZXF1YWxp dHkgY2xhdXNlcyB1c2luZyBmdW5jLiBkZXBlbmRlbmNpZXMKIAotICAgICg0 KSBlc3RpbWF0ZSB0aGUgcmVkdWNlZCBsaXN0IG9mIGNsYXVzZXMgdXNpbmcg cmVndWxhciBzdGF0aXN0aWNzCisgICAgKDQpIGNoZWNrIHRoYXQgdGhlcmUg YXJlIG11bHRpdmFyaWF0ZSBNQ1YgbGlzdHMgb24gdGhlIHRhYmxlLCBhbmQg dGhhdAorICAgICAgICB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIGF0dHJpYnV0 ZXMgcmVmZXJlbmNlZCBieSBjb21wYXRpYmxlIGNsYXVzZXMKKyAgICAgICAg KGVxdWFsaXRpZXMsIGluZXF1YWxpdGllcywgZXRjLikKKworICAgICg1KSBm aW5kIHRoZSBiZXN0IG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIChtYXRjaGlu ZyB0aGUgbW9zdCBjb25kaXRpb25zKQorICAgICAgICBhbmQgdXNlIGl0IHRv IGNvbXB1dGUgdGhlIGVzdGltYXRlCisKKyAgICAoNikgZXN0aW1hdGUgdGhl IHJlbWFpbmluZyBjbGF1c2VzIChub3QgZXN0aW1hdGVkIHVzaW5nIG11bHRp dmFyaWF0ZSBzdGF0cykKKyAgICAgICAgdXNpbmcgdGhlIHJlZ3VsYXIgcGVy LWNvbHVtbiBzdGF0aXN0aWNzCisKK1doZW5ldmVyIHdlIGZpbmQgdGhlcmUg YXJlIG5vIHN1aXRhYmxlIHN0YXRzLCB3ZSBza2lwIHRoZSBleHBlbnNpdmUg c3RlcHMuCisKKworRnVydGhlciAocG9zc2libHkgY3JhenkpIGlkZWFzCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VycmVudGx5IHRo ZSBjbGF1c2VzIGFyZSBvbmx5IGVzdGltYXRlZCB1c2luZyBhIHNpbmdsZSBz dGF0aXN0aWNzLCBldmVuIGlmCit0aGVyZSBhcmUgbXVsdGlwbGUgY2FuZGlk YXRlIHN0YXRpc3RpY3MgLSBmb3IgZXhhbXBsZSBhc3N1bWUgd2UgaGF2ZSBz dGF0aXN0aWNzCitvbiAoYSxiLGMpIGFuZCAoYixjLGQpLCBhbmQgZXN0aW1h dGUgY29uZGl0aW9ucworCisgICAgKGIgPSAxKSBBTkQgKGMgPSAyKQorCitU aGVuIGJvdGggc3RhdGlzdGljcyBtYXkgYmUgdXNlZCwgYnV0IHdlIG9ubHkg dXNlIG9uZSBvZiB0aGVtLiBNYXliZSB3ZSBjb3VsZAordXNlIGNvbXB1dGUg ZXN0aW1hdGVzIHVzaW5nIGFsbCBjYW5kaWRhdGUgc3RhdHMsIGFuZCBzb21l aG93IGFnZ3JlZ2F0ZSB0aGVtCitpbnRvIHRoZSBmaW5hbCBlc3RpbWF0ZSBi eSB1c2luZyBhdmVyYWdlIG9yIG1lZGlhbi4KKworU29tZSBzdGF0cyBtYXkg Z2l2ZSBiZXR0ZXIgZXN0aW1hdGVzIHRoYW4gb3RoZXJzLCBidXQgaXQncyB2 ZXJ5IGRpZmZpY3VsdCB0byBzYXkKK2luIGFkdmFuY2Ugd2hpY2ggc3RhdHMg YXJlIHRoZSBiZXN0IChpdCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgYnVj a2V0cywgbnVtYmVyCitvZiBhZGRpdGlvbmFsIGNvbHVtbnMgbm90IHJlZmVy ZW5jZWQgaW4gdGhlIGNsYXVzZXMsIHR5cGUgb2YgY29uZGl0aW9uIGV0Yy4p LgorCitCdXQgb2YgY291cnNlLCB0aGlzIG1heSByZXN1bHQgaW4gZXhwZW5z aXZlIGVzdGltYXRpb24gKENQVS13aXNlKS4KKworU28gd2UgbWlnaHQgYWRk IGEgR1VDIHRvIGNob29zZSBiZXR3ZWVuIGEgc2ltcGxlIChzaW5nbGUgc3Rh dGlzdGljcykgYW5kIHRodXMKK211bHRpLXN0YXRpc3RpYyBlc3RpbWF0aW9u LCBwb3NzaWJseSB0YWJsZS1sZXZlbCBwYXJhbWV0ZXIgKEFMVEVSIFRBQkxF IC4uLikuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u YwppbmRleCBkY2I3Yzc4Li40ZjVhODQyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvY29tbW9uLmMKQEAgLTE2LDEyICsxNiwxNCBAQAog CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKKyNpbmNsdWRlICJ1dGlscy9hcnJh eS5oIgorCiBzdGF0aWMgVmFjQXR0clN0YXRzICoqIGxvb2t1cF92YXJfYXR0 cl9zdGF0cyhpbnQydmVjdG9yICphdHRycywKLQkJCQkJCQkJCSAgaW50IG5h dHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOworCQkJCQkJCQkJ CQkgaW50IG5hdHRzLAorCQkJCQkJCQkJCQkgVmFjQXR0clN0YXRzICoqdmFj YXR0cnN0YXRzKTsKIAogc3RhdGljIExpc3QqIGxpc3RfbXZfc3RhdHMoT2lk IHJlbGlkKTsKIAotCiAvKgogICogQ29tcHV0ZSByZXF1ZXN0ZWQgbXVsdGl2 YXJpYXRlIHN0YXRzLCB1c2luZyB0aGUgcm93cyBzYW1wbGVkIGZvciB0aGUK ICAqIHBsYWluIChzaW5nbGUtY29sdW1uKSBzdGF0cy4KQEAgLTQ5LDYgKzUx LDggQEAgYnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVt cm93cywgSGVhcFR1cGxlICpyb3dzLAogCQlpbnQJCQkJajsKIAkJTVZTdGF0 aXN0aWNJbmZvICpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChs Yyk7CiAJCU1WRGVwZW5kZW5jaWVzCWRlcHMgID0gTlVMTDsKKwkJTUNWTGlz dAkJbWN2bGlzdCAgID0gTlVMTDsKKwkJaW50IG51bXJvd3NfZmlsdGVyZWQg ID0gMDsKIAogCQlWYWNBdHRyU3RhdHMgICoqc3RhdHMgID0gTlVMTDsKIAkJ aW50CQkJCW51bWF0dHMgICA9IDA7CkBAIC04Nyw4ICs5MSwxMiBAQCBidWls ZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFw VHVwbGUgKnJvd3MsCiAJCWlmIChzdGF0LT5kZXBzX2VuYWJsZWQpCiAJCQlk ZXBzID0gYnVpbGRfbXZfZGVwZW5kZW5jaWVzKG51bXJvd3MsIHJvd3MsIGF0 dHJzLCBzdGF0cyk7CiAKKwkJLyogYnVpbGQgdGhlIE1DViBsaXN0ICovCisJ CWlmIChzdGF0LT5tY3ZfZW5hYmxlZCkKKwkJCW1jdmxpc3QgPSBidWlsZF9t dl9tY3ZsaXN0KG51bXJvd3MsIHJvd3MsIGF0dHJzLCBzdGF0cywgJm51bXJv d3NfZmlsdGVyZWQpOworCiAJCS8qIHN0b3JlIHRoZSBoaXN0b2dyYW0gLyBN Q1YgbGlzdCBpbiB0aGUgY2F0YWxvZyAqLwotCQl1cGRhdGVfbXZfc3RhdHMo c3RhdC0+bXZvaWQsIGRlcHMsIGF0dHJzKTsKKwkJdXBkYXRlX212X3N0YXRz KHN0YXQtPm12b2lkLCBkZXBzLCBtY3ZsaXN0LCBhdHRycywgc3RhdHMpOwog CX0KIH0KIApAQCAtMTY2LDYgKzE3NCw4IEBAIGxpc3RfbXZfc3RhdHMoT2lk IHJlbGlkKQogCQlpbmZvLT5zdGFrZXlzID0gYnVpbGRpbnQydmVjdG9yKHN0 YXRzLT5zdGFrZXlzLnZhbHVlcywgc3RhdHMtPnN0YWtleXMuZGltMSk7CiAJ CWluZm8tPmRlcHNfZW5hYmxlZCA9IHN0YXRzLT5kZXBzX2VuYWJsZWQ7CiAJ CWluZm8tPmRlcHNfYnVpbHQgPSBzdGF0cy0+ZGVwc19idWlsdDsKKwkJaW5m by0+bWN2X2VuYWJsZWQgPSBzdGF0cy0+bWN2X2VuYWJsZWQ7CisJCWluZm8t Pm1jdl9idWlsdCA9IHN0YXRzLT5tY3ZfYnVpbHQ7CiAKIAkJcmVzdWx0ID0g bGFwcGVuZChyZXN1bHQsIGluZm8pOwogCX0KQEAgLTE4MCw4ICsxOTAsNTYg QEAgbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpCiAJcmV0dXJuIHJlc3VsdDsK IH0KIAorCisvKgorICogRmluZCBhdHRuaW1zIG9mIE1WIHN0YXRzIHVzaW5n IHRoZSBtdm9pZC4KKyAqLworaW50MnZlY3RvcioKK2ZpbmRfbXZfYXR0bnVt cyhPaWQgbXZvaWQsIE9pZCAqcmVsaWQpCit7CisJQXJyYXlUeXBlICAqYXJy OworCURhdHVtCQlhZGF0dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBs ZQlodHVwOworCWludDJ2ZWN0b3IgKmtleXM7CisKKwkvKiBQcmVwYXJlIHRv IHNjYW4gcGdfbXZfc3RhdGlzdGljIGZvciBlbnRyaWVzIGhhdmluZyBpbmRy ZWxpZCA9IHRoaXMgcmVsLiAqLworCWh0dXAgPSBTZWFyY2hTeXNDYWNoZTEo TVZTVEFUT0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKG12b2lkKSk7 CisKKwkvKiBYWFggc3lzY2FjaGUgY29udGFpbnMgT0lEcyBvZiBkZWxldGVk IHN0YXRzIChub3QgaW52YWxpZGF0ZWQpICovCisJaWYgKCEgSGVhcFR1cGxl SXNWYWxpZChodHVwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBzdGFyZWxp ZCAqLworCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0 dXAsCisJCQkJCQkJIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkLCAm aXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisKKwkqcmVsaWQgPSBEYXR1 bUdldE9iamVjdElkKGFkYXR1bSk7CisKKwkvKiBzdGFrZXlzICovCisJYWRh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJ CQkgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cywgJmlzbnVsbCk7CisJ QXNzZXJ0KCFpc251bGwpOworCisJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQ KGFkYXR1bSk7CisKKwlrZXlzID0gYnVpbGRpbnQydmVjdG9yKChpbnQxNiAq KSBBUlJfREFUQV9QVFIoYXJyKSwKKwkJCQkJCQlBUlJfRElNUyhhcnIpWzBd KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHR1cCk7CisKKwkvKiBUT0RPIG1heWJl IHNhdmUgdGhlIGxpc3QgaW50byByZWxjYWNoZSwgYXMgaW4gUmVsYXRpb25H ZXRJbmRleExpc3QKKwkgKiAgICAgICh3aGljaCB3YXMgdXNlZCBhcyBhbiBp bnNwaXJhdGlvbiBvZiB0aGlzIG9uZSk/LiAqLworCisJcmV0dXJuIGtleXM7 Cit9CisKKwogdm9pZAotdXBkYXRlX212X3N0YXRzKE9pZCBtdm9pZCwgTVZE ZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVjdG9yICphdHRycykK K3VwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsCisJCQkJTVZEZXBlbmRlbmNp ZXMgZGVwZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxpc3QsCisJCQkJaW50MnZl Y3RvciAqYXR0cnMsIFZhY0F0dHJTdGF0cyAqKnN0YXRzKQogewogCUhlYXBU dXBsZQlzdHVwLAogCQkJCW9sZHR1cDsKQEAgLTIwNiwxOCArMjY0LDI5IEBA IHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsIE1WRGVwZW5kZW5jaWVzIGRl cGVuZGVuY2llcywgaW50MnZlY3RvciAqYXR0cnMpCiAJCQk9IFBvaW50ZXJH ZXREYXR1bShzZXJpYWxpemVfbXZfZGVwZW5kZW5jaWVzKGRlcGVuZGVuY2ll cykpOwogCX0KIAorCWlmIChtY3ZsaXN0ICE9IE5VTEwpCisJeworCQlieXRl YSAqIGRhdGEgPSBzZXJpYWxpemVfbXZfbWN2bGlzdChtY3ZsaXN0LCBhdHRy cywgc3RhdHMpOworCQludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFt Y3YgLTFdICAgID0gKGRhdGEgPT0gTlVMTCk7CisJCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFtY3YgIC0gMV0gPSBQb2ludGVyR2V0RGF0dW0o ZGF0YSk7CisJfQorCiAJLyogYWx3YXlzIHJlcGxhY2UgdGhlIHZhbHVlIChl aXRoZXIgYnkgYnl0ZWEgb3IgTlVMTCkgKi8KIAlyZXBsYWNlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFkZXBzIC0xXSA9IHRydWU7CisJcmVwbGFjZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbWN2IC0xXSA9IHRydWU7CiAKIAkv KiBhbHdheXMgY2hhbmdlIHRoZSBhdmFpbGFiaWxpdHkgZmxhZ3MgKi8KIAlu dWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0IC0xXSA9IGZh bHNlOworCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAt MV0gPSBmYWxzZTsKIAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFr ZXlzLTFdICAgICA9IGZhbHNlOwogCiAJLyogdXNlIHRoZSBuZXcgYXR0bnVt cywgaW4gY2FzZSB3ZSByZW1vdmVkIHNvbWUgZHJvcHBlZCBvbmVzICovCiAJ cmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdC0xXSA9 IHRydWU7CisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1 aWx0ICAtMV0gPSB0cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlz dGljX3N0YWtleXMgLTFdICAgID0gdHJ1ZTsKIAogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gQm9vbEdldERhdHVtKGRl cGVuZGVuY2llcyAhPSBOVUxMKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfbWN2X2J1aWx0ICAtMV0gPSBCb29sR2V0RGF0dW0obWN2bGlzdCAh PSBOVUxMKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5 cyAtMV0gICAgPSBQb2ludGVyR2V0RGF0dW0oYXR0cnMpOwogCiAJLyogSXMg dGhlcmUgYWxyZWFkeSBhIHBnX212X3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhp cyBhdHRyaWJ1dGU/ICovCkBAIC0yNDYsNiArMzE1LDIxIEBAIHVwZGF0ZV9t dl9zdGF0cyhPaWQgbXZvaWQsIE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2ll cywgaW50MnZlY3RvciAqYXR0cnMpCiAJaGVhcF9jbG9zZShzZCwgUm93RXhj bHVzaXZlTG9jayk7CiB9CiAKKworaW50Cittdl9nZXRfaW5kZXgoQXR0ck51 bWJlciB2YXJhdHRubywgaW50MnZlY3RvciAqIHN0YWtleXMpCit7CisJaW50 IGksIGlkeCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHN0YWtleXMtPmRpbTE7 IGkrKykKKwl7CisJCWlmIChzdGFrZXlzLT52YWx1ZXNbaV0gPCB2YXJhdHRu bykKKwkJCWlkeCArPSAxOworCQllbHNlCisJCQlicmVhazsKKwl9CisJcmV0 dXJuIGlkeDsKK30KKwogLyogbXVsdGktdmFyaWF0ZSBzdGF0cyBjb21wYXJh dG9yICovCiAKIC8qCkBAIC0yNTYsMTEgKzM0MCwxNSBAQCB1cGRhdGVfbXZf c3RhdHMoT2lkIG12b2lkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMs IGludDJ2ZWN0b3IgKmF0dHJzKQogaW50CiBjb21wYXJlX3NjYWxhcnNfc2lt cGxlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykK IHsKLQlEYXR1bQkJZGEgPSAqKERhdHVtKilhOwotCURhdHVtCQlkYiA9ICoo RGF0dW0qKWI7Ci0JU29ydFN1cHBvcnQgc3N1cD0gKFNvcnRTdXBwb3J0KSBh cmc7CisJcmV0dXJuIGNvbXBhcmVfZGF0dW1zX3NpbXBsZSgqKERhdHVtKilh LAorCQkJCQkJCQkgKihEYXR1bSopYiwKKwkJCQkJCQkJIChTb3J0U3VwcG9y dClhcmcpOworfQogCi0JcmV0dXJuIEFwcGx5U29ydENvbXBhcmF0b3IoZGEs IGZhbHNlLCBkYiwgZmFsc2UsIHNzdXApOworaW50Citjb21wYXJlX2RhdHVt c19zaW1wbGUoRGF0dW0gYSwgRGF0dW0gYiwgU29ydFN1cHBvcnQgc3N1cCkK K3sKKwlyZXR1cm4gQXBwbHlTb3J0Q29tcGFyYXRvcihhLCBmYWxzZSwgYiwg ZmFsc2UsIHNzdXApOwogfQogCiAvKgpAQCAtMzc3LDMgKzQ2NSwzMiBAQCBt dWx0aV9zb3J0X2NvbXBhcmVfZGltcyhpbnQgc3RhcnQsIGludCBlbmQsCiAK IAlyZXR1cm4gMDsKIH0KKworLyogc2ltcGxlIGNvdW50ZXJwYXJ0IHRvIHFz b3J0X2FyZyAqLwordm9pZCAqCitic2VhcmNoX2FyZyhjb25zdCB2b2lkICpr ZXksIGNvbnN0IHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNp emUsCisJCQlpbnQgKCpjb21wYXIpIChjb25zdCB2b2lkICosIGNvbnN0IHZv aWQgKiwgdm9pZCAqKSwKKwkJCXZvaWQgKmFyZykKK3sKKwlzaXplX3QgbCwg dSwgaWR4OworCWNvbnN0IHZvaWQgKnA7CisJaW50IGNvbXBhcmlzb247CisK KwlsID0gMDsKKwl1ID0gbm1lbWI7CisJd2hpbGUgKGwgPCB1KQorCXsKKwkJ aWR4ID0gKGwgKyB1KSAvIDI7CisJCXAgPSAodm9pZCAqKSAoKChjb25zdCBj aGFyICopIGJhc2UpICsgKGlkeCAqIHNpemUpKTsKKwkJY29tcGFyaXNvbiA9 ICgqY29tcGFyKSAoa2V5LCBwLCBhcmcpOworCisJCWlmIChjb21wYXJpc29u IDwgMCkKKwkJCXUgPSBpZHg7CisJCWVsc2UgaWYgKGNvbXBhcmlzb24gPiAw KQorCQkJbCA9IGlkeCArIDE7CisJCWVsc2UKKwkJCXJldHVybiAodm9pZCAq KSBwOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uaCBiL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvY29tbW9uLmgKaW5kZXggYTAxOWVhNi4uMzUwNzYw YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21t b24uaAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5o CkBAIC00Niw3ICs0NiwxNSBAQCB0eXBlZGVmIHN0cnVjdAogCURhdHVtCQl2 YWx1ZTsJCQkvKiBhIGRhdGEgdmFsdWUgKi8KIAlpbnQJCQl0dXBubzsJCQkv KiBwb3NpdGlvbiBpbmRleCBmb3IgdHVwbGUgaXQgY2FtZSBmcm9tICovCiB9 IFNjYWxhckl0ZW07Ci0gCisKKy8qIChkZSlzZXJpYWxpemF0aW9uIGluZm8g Ki8KK3R5cGVkZWYgc3RydWN0IERpbWVuc2lvbkluZm8geworCWludAkJbnZh bHVlczsJLyogbnVtYmVyIG9mIGRlZHVwbGljYXRlZCB2YWx1ZXMgKi8KKwlp bnQJCW5ieXRlczsJCS8qIG51bWJlciBvZiBieXRlcyAoc2VyaWFsaXplZCkg Ki8KKwlpbnQJCXR5cGxlbjsJCS8qIHBnX3R5cGUudHlwbGVuICovCisJYm9v bAl0eXBieXZhbDsJLyogcGdfdHlwZS50eXBieXZhbCAqLworfSBEaW1lbnNp b25JbmZvOworCiAvKiBtdWx0aS1zb3J0ICovCiB0eXBlZGVmIHN0cnVjdCBN dWx0aVNvcnRTdXBwb3J0RGF0YSB7CiAJaW50CQkJCW5kaW1zOwkJLyogbnVt YmVyIG9mIGRpbWVuc2lvbnMgc3VwcG9ydGVkIGJ5IHRoZSAqLwpAQCAtNTgs NiArNjYsNyBAQCB0eXBlZGVmIE11bHRpU29ydFN1cHBvcnREYXRhKiBNdWx0 aVNvcnRTdXBwb3J0OwogdHlwZWRlZiBzdHJ1Y3QgU29ydEl0ZW0gewogCURh dHVtICAqdmFsdWVzOwogCWJvb2wgICAqaXNudWxsOworCWludAkJY291bnQ7 CiB9IFNvcnRJdGVtOwogCiBNdWx0aVNvcnRTdXBwb3J0IG11bHRpX3NvcnRf aW5pdChpbnQgbmRpbXMpOwpAQCAtNzQsNSArODMsMTEgQEAgaW50IG11bHRp X3NvcnRfY29tcGFyZV9kaW1zKGludCBzdGFydCwgaW50IGVuZCwgY29uc3Qg U29ydEl0ZW0gKmEsCiAJCQkJCQkJY29uc3QgU29ydEl0ZW0gKmIsIE11bHRp U29ydFN1cHBvcnQgbXNzKTsKIAogLyogY29tcGFyYXRvcnMsIHVzZWQgd2hl biBjb25zdHJ1Y3RpbmcgbXVsdGl2YXJpYXRlIHN0YXRzICovCitpbnQgY29t cGFyZV9kYXR1bXNfc2ltcGxlKERhdHVtIGEsIERhdHVtIGIsIFNvcnRTdXBw b3J0IHNzdXApOwogaW50IGNvbXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKTsKIGludCBjb21w YXJlX3NjYWxhcnNfcGFydGl0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIsIHZvaWQgKmFyZyk7CisKK3ZvaWQgKiBic2VhcmNoX2FyZyhjb25z dCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsCisJCQkJICAgc2l6ZV90 IG5tZW1iLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICBpbnQgKCpjb21wYXIpIChj b25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgdm9pZCAqKSwKKwkJCQkgICB2 b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZz dGF0cy9tY3YuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvbWN2LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwMGMxYQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv bWN2LmMKQEAgLTAsMCArMSwxMTIwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBtY3YuYworICoJICBQT1NUR1JFUyBtdWx0 aXZhcmlhdGUgTUNWIGxpc3RzCisgKgorICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9tY3YuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAiZm1nci5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKworI2luY2x1ZGUg InV0aWxzL2xzeXNjYWNoZS5oIgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisK Ky8qCisgKiBFYWNoIHNlcmlhbGl6ZWQgaXRlbSBuZWVkcyB0byBzdG9yZSAo aW4gdGhpcyBvcmRlcik6CisgKgorICogLSBpbmRleGVzICAgICAgICAgICAg ICAobmRpbSAqIHNpemVvZih1aW50MTYpKQorICogLSBudWxsIGZsYWdzICAg ICAgICAgICAobmRpbSAqIHNpemVvZihib29sKSkKKyAqIC0gZnJlcXVlbmN5 ICAgICAgICAgICAgKHNpemVvZihkb3VibGUpKQorICoKKyAqIFNvIGluIHRv dGFsOgorICoKKyAqICAgbmRpbSAqIChzaXplb2YodWludDE2KSArIHNpemVv Zihib29sKSkgKyBzaXplb2YoZG91YmxlKQorICovCisjZGVmaW5lIElURU1f U0laRShuZGltcykJXAorCShuZGltcyAqIChzaXplb2YodWludDE2KSArIHNp emVvZihib29sKSkgKyBzaXplb2YoZG91YmxlKSkKKworLyogTWFjcm9zIGZv ciBjb252ZW5pZW50IGFjY2VzcyB0byBwYXJ0cyBvZiB0aGUgc2VyaWFsaXpl ZCBNQ1YgaXRlbSAqLworI2RlZmluZSBJVEVNX0lOREVYRVMoaXRlbSkJCQko KHVpbnQxNiopaXRlbSkKKyNkZWZpbmUgSVRFTV9OVUxMUyhpdGVtLG5kaW1z KQkJKChib29sKikoSVRFTV9JTkRFWEVTKGl0ZW0pICsgbmRpbXMpKQorI2Rl ZmluZSBJVEVNX0ZSRVFVRU5DWShpdGVtLG5kaW1zKQkoKGRvdWJsZSopKElU RU1fTlVMTFMoaXRlbSxuZGltcykgKyBuZGltcykpCisKK3N0YXRpYyBNdWx0 aVNvcnRTdXBwb3J0IGJ1aWxkX21zcyhWYWNBdHRyU3RhdHMgKipzdGF0cywg aW50MnZlY3RvciAqYXR0cnMpOworCitzdGF0aWMgU29ydEl0ZW0gKmJ1aWxk X3NvcnRlZF9pdGVtcyhpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAor CQkJCQkJCQkJVHVwbGVEZXNjIHRkZXNjLCBNdWx0aVNvcnRTdXBwb3J0IG1z cywKKwkJCQkJCQkJCWludDJ2ZWN0b3IgKmF0dHJzKTsKKworc3RhdGljIFNv cnRJdGVtICpidWlsZF9kaXN0aW5jdF9ncm91cHMoaW50IG51bXJvd3MsIFNv cnRJdGVtICppdGVtcywKKwkJCQkJCQkJCSAgIE11bHRpU29ydFN1cHBvcnQg bXNzLCBpbnQgKm5kaXN0aW5jdCk7CisKK3N0YXRpYyBpbnQgY291bnRfZGlz dGluY3RfZ3JvdXBzKGludCBudW1yb3dzLCBTb3J0SXRlbSAqaXRlbXMsCisJ CQkJCQkJCSBNdWx0aVNvcnRTdXBwb3J0IG1zcyk7CisKKy8qCisgKiBCdWls ZHMgTUNWIGxpc3QgZnJvbSB0aGUgc2V0IG9mIHNhbXBsZWQgcm93cy4KKyAq CisgKiBUaGUgYWxnb3JpdGhtIGlzIHF1aXRlIHNpbXBsZToKKyAqCisgKiAg ICAgKDEpIHNvcnQgdGhlIGRhdGEgKGRlZmF1bHQgY29sbGF0aW9uLCAnPCcg Zm9yIHRoZSBkYXRhIHR5cGUpCisgKgorICogICAgICgyKSBjb3VudCBkaXN0 aW5jdCBncm91cHMsIGRlY2lkZSBob3cgbWFueSB0byBrZWVwCisgKgorICog ICAgICgzKSBidWlsZCB0aGUgTUNWIGxpc3QgdXNpbmcgdGhlIHRocmVzaG9s ZCBkZXRlcm1pbmVkIGluICgyKQorICoKKyAqICAgICAoNCkgcmVtb3ZlIHJv d3MgcmVwcmVzZW50ZWQgYnkgdGhlIE1DViBmcm9tIHRoZSBzYW1wbGUKKyAq CisgKiBUaGUgbWV0aG9kIGFsc28gcmVtb3ZlcyByb3dzIG1hdGNoaW5nIHRo ZSBNQ1YgaXRlbXMgZnJvbSB0aGUgaW5wdXQgYXJyYXksCisgKiBhbmQgcGFz c2VzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHJvd3MgKHVzZWZ1bCBmb3Ig YnVpbGRpbmcgaGlzdG9ncmFtcykKKyAqIHVzaW5nIHRoZSBudW1yb3dzX2Zp bHRlcmVkIHBhcmFtZXRlci4KKyAqCisgKiBGSVhNRSBVc2UgbWF4X21jdl9p dGVtcyBmcm9tIEFMVEVSIFRBQkxFIEFERCBTVEFUSVNUSUNTIGNvbW1hbmQu CisgKgorICogRklYTUUgU2luZ2xlLWRpbWVuc2lvbmFsIE1DViBpcyBzb3J0 ZWQgYnkgZnJlcXVlbmN5IChkZXNjZW5kaW5nKS4gV2Ugc2hvdWxkCisgKiAg ICAgICBkbyB0aGF0IHRvbywgYmVjYXVzZSB3aGVuIHdhbGtpbmcgdGhyb3Vn aCB0aGUgbGlzdCB3ZSB3YW50IHRvIGNoZWNrCisgKiAgICAgICB0aGUgbW9z dCBmcmVxdWVudCBpdGVtcyBmaXJzdC4KKyAqCisgKiBUT0RPIFdlJ3JlIHVz aW5nIERhdHVtICg4QiksIGV2ZW4gZm9yIGRhdGEgdHlwZXMgKGUuZy4gaW50 NCBvciBmbG9hdDQpLgorICogICAgICBNYXliZSB3ZSBjb3VsZCBzYXZlIHNv bWUgc3BhY2UgaGVyZSwgYnV0IHRoZSBieXRlYSBjb21wcmVzc2lvbiBzaG91 bGQKKyAqICAgICAgaGFuZGxlIGl0IGp1c3QgZmluZS4KKyAqCisgKiBUT0RP IFRoaXMgcHJvYmFibHkgc2hvdWxkIG5vdCB1c2UgdGhlIG5kaXN0aW5jdCBk aXJlY3RseSAoYXMgY29tcHV0ZWQgZnJvbQorICogICAgICB0aGUgdGFibGUs IGJ1dCByYXRoZXIgZXN0aW1hdGUgdGhlIG51bWJlciBvZiBkaXN0aW5jdCB2 YWx1ZXMgaW4gdGhlCisgKiAgICAgIHRhYmxlKSwgbm8/CisgKi8KK01DVkxp c3QKK2J1aWxkX212X21jdmxpc3QoaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCSAgVmFjQXR0clN0YXRz ICoqc3RhdHMsIGludCAqbnVtcm93c19maWx0ZXJlZCkKK3sKKwlpbnQgaTsK KwlpbnQgbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsKKwlpbnQgbmRpc3RpbmN0 ID0gMDsKKwlpbnQgbWN2X3RocmVzaG9sZCA9IDA7CisJaW50IG5pdGVtcyA9 IDA7CisKKwlNQ1ZMaXN0CW1jdmxpc3QgPSBOVUxMOworCisJLyogY29tcGFy YXRvciBmb3IgYWxsIHRoZSBjb2x1bW5zICovCisJTXVsdGlTb3J0U3VwcG9y dCBtc3MgPSBidWlsZF9tc3Moc3RhdHMsIGF0dHJzKTsKKworCS8qIHNvcnQg dGhlIHJvd3MgKi8KKwlTb3J0SXRlbSAgICppdGVtcyAgPSBidWlsZF9zb3J0 ZWRfaXRlbXMobnVtcm93cywgcm93cywgc3RhdHNbMF0tPnR1cERlc2MsCisJ CQkJCQkJCQkJCW1zcywgYXR0cnMpOworCisJLyogdHJhbnNmb3JtIHRoZSBz b3J0ZWQgcm93cyBpbnRvIGdyb3VwcyAoc29ydGVkIGJ5IGZyZXF1ZW5jeSkg Ki8KKwlTb3J0SXRlbSAgICpncm91cHMgPSBidWlsZF9kaXN0aW5jdF9ncm91 cHMobnVtcm93cywgaXRlbXMsIG1zcywgJm5kaXN0aW5jdCk7CisKKwkvKgor CSAqIERldGVybWluZSB0aGUgbWluaW11bSBzaXplIG9mIGEgZ3JvdXAgdG8g YmUgZWxpZ2libGUgZm9yIE1DViBsaXN0LCBhbmQKKwkgKiBjaGVjayBob3cg bWFueSBncm91cHMgYWN0dWFsbHkgcGFzcyB0aGF0IHRocmVzaG9sZC4gV2Ug dXNlIDEuMjV4IHRoZQorCSAqIGF2YXJhZ2UgZ3JvdXAgc2l6ZSwganVzdCBs aWtlIGZvciByZWd1bGFyIHN0YXRpc3RpY3MuCisJICoKKwkgKiBCdXQgaWYg d2UgY2FuIGZpdCBhbGwgdGhlIGRpc3RpbmN0IHZhbHVlcyBpbiB0aGUgTUNW IGxpc3QgKGkuZS4gaWYgdGhlcmUKKwkgKiBhcmUgbGVzcyBkaXN0aW5jdCBn cm91cHMgdGhhbiBNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMpLCB3ZSdsbCBy ZXF1aXJlCisJICogb25seSAyIHJvd3MgcGVyIGdyb3VwLgorCSAqCisJICog RklYTUUgVGhpcyBzaG91bGQgcmVhbGx5IHJlZmVyZW5jZSBtY3ZfbWF4X2l0 ZW1zIChmcm9tIGNhdGFsb2cpIGluc3RlYWQKKwkgKiAJCSBvZiB0aGUgY29u c3RhbnQgTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TLgorCSAqLworCW1jdl90 aHJlc2hvbGQgPSAxLjI1ICogbnVtcm93cyAvIG5kaXN0aW5jdDsKKwltY3Zf dGhyZXNob2xkID0gKG1jdl90aHJlc2hvbGQgPCA0KSA/IDQgIDogbWN2X3Ro cmVzaG9sZDsKKworCWlmIChuZGlzdGluY3QgPD0gTVZTVEFUX01DVkxJU1Rf TUFYX0lURU1TKQorCQltY3ZfdGhyZXNob2xkID0gMjsKKworCS8qIFdhbGsg dGhyb3VnaCB0aGUgZ3JvdXBzIGFuZCBzdG9wIG9uY2Ugd2UgZmFsbCBiZWxv dyB0aGUgdGhyZXNob2xkLiAqLworCW5pdGVtcyA9IDA7CisJZm9yIChpID0g MDsgaSA8IG5kaXN0aW5jdDsgaSsrKQorCXsKKwkJaWYgKGdyb3Vwc1tpXS5j b3VudCA8IG1jdl90aHJlc2hvbGQpCisJCQlicmVhazsKKworCQluaXRlbXMr KzsKKwl9CisKKwkvKiB3ZSBrbm93IHRoZSBudW1iZXIgb2YgTUNWIGxpc3Qg aXRlbXMsIHNvIGxldCdzIGJ1aWxkIHRoZSBsaXN0ICovCisJaWYgKG5pdGVt cyA+IDApCisJeworCQkvKiBhbGxvY2F0ZSB0aGUgTUNWIGxpc3Qgc3RydWN0 dXJlLCBzZXQgcGFyYW1ldGVycyB3ZSBrbm93ICovCisJCW1jdmxpc3QgPSAo TUNWTGlzdClwYWxsb2MwKHNpemVvZihNQ1ZMaXN0RGF0YSkpOworCisJCW1j dmxpc3QtPm1hZ2ljID0gTVZTVEFUX01DVl9NQUdJQzsKKwkJbWN2bGlzdC0+ dHlwZSA9IE1WU1RBVF9NQ1ZfVFlQRV9CQVNJQzsKKwkJbWN2bGlzdC0+bmRp bWVuc2lvbnMgPSBudW1hdHRyczsKKwkJbWN2bGlzdC0+bml0ZW1zID0gbml0 ZW1zOworCisJCS8qCisJCSAqIFByZWFsbG9jYXRlIERhdHVtL2lzbnVsbCBh cnJheXMgKG5vdCBhcyBhIHNpbmdsZSBjaHVuaywgYXMgd2Ugd2lsbAorCQkg KiBwYXNzIHRoZSByZXN1bHQgb3V0c2lkZSBhbmQgdGh1cyBpdCBuZWVkcyB0 byBiZSBlYXN5IHRvIHBmcmVlKCkuCisJCSAqCisJCSAqIFhYWCBBbHRob3Vn aCB3ZSdyZSB0aGUgb25seSBvbmVzIGRlYWxpbmcgd2l0aCB0aGlzLgorCQkg Ki8KKwkJbWN2bGlzdC0+aXRlbXMgPSAoTUNWSXRlbSopcGFsbG9jMChzaXpl b2YoTUNWSXRlbSkqbml0ZW1zKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbml0 ZW1zOyBpKyspCisJCXsKKwkJCW1jdmxpc3QtPml0ZW1zW2ldID0gKE1DVkl0 ZW0pcGFsbG9jMChzaXplb2YoTUNWSXRlbURhdGEpKTsKKwkJCW1jdmxpc3Qt Pml0ZW1zW2ldLT52YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERh dHVtKSpudW1hdHRycyk7CisJCQltY3ZsaXN0LT5pdGVtc1tpXS0+aXNudWxs ID0gKGJvb2wqKXBhbGxvYzAoc2l6ZW9mKGJvb2wpKm51bWF0dHJzKTsKKwkJ fQorCisJCS8qIENvcHkgdGhlIGZpcnN0IGNodW5rIG9mIGdyb3VwcyBpbnRv IHRoZSByZXN1bHQuICovCisJCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkr KykKKwkJeworCQkJLyoganVzdCBwb2ludGVyIHRvIHRoZSBwcm9wZXIgcGxh Y2UgaW4gdGhlIGxpc3QgKi8KKwkJCU1DVkl0ZW0gaXRlbSA9IG1jdmxpc3Qt Pml0ZW1zW2ldOworCisJCQkvKiBjb3B5IHZhbHVlcyBmcm9tIHRoZSBfcHJl dmlvdXNfIGdyb3VwIChsYXN0IGl0ZW0gb2YpICovCisJCQltZW1jcHkoaXRl bS0+dmFsdWVzLCBncm91cHNbaV0udmFsdWVzLCBzaXplb2YoRGF0dW0pICog bnVtYXR0cnMpOworCQkJbWVtY3B5KGl0ZW0tPmlzbnVsbCwgZ3JvdXBzW2ld LmlzbnVsbCwgc2l6ZW9mKGJvb2wpICAqIG51bWF0dHJzKTsKKworCQkJLyog YW5kIGZpbmFsbHkgdGhlIGdyb3VwIGZyZXF1ZW5jeSAqLworCQkJaXRlbS0+ ZnJlcXVlbmN5ID0gKGRvdWJsZSlncm91cHNbaV0uY291bnQgLyBudW1yb3dz OworCQl9CisKKwkJLyogbWFrZSBzdXJlIHRoZSBsb29wcyBhcmUgY29uc2lz dGVudCAqLworCQlBc3NlcnQobml0ZW1zID09IG1jdmxpc3QtPm5pdGVtcyk7 CisKKwkJLyoKKwkJICogUmVtb3ZlIHRoZSByb3dzIG1hdGNoaW5nIHRoZSBN Q1YgbGlzdCAoaS5lLiBrZWVwIG9ubHkgcm93cyB0aGF0IGFyZQorCQkgKiBu b3QgcmVwcmVzZW50ZWQgYnkgdGhlIE1DViBsaXN0KS4gV2Ugd2lsbCBmaXJz dCBzb3J0IHRoZSBncm91cHMKKwkJICogYnkgdGhlIGtleXMgKG5vdCBieSBj b3VudCkgYW5kIHRoZW4gdXNlIGJpbmFyeSBzZWFyY2guCisJCSAqLworCQlp ZiAobml0ZW1zID4gbmRpc3RpbmN0KQorCQl7CisJCQlpbnQgaSwgajsKKwkJ CWludCBuZmlsdGVyZWQgPSAwOworCisJCQkvKiB1c2VkIGZvciB0aGUgc2Vh cmNoZXMgKi8KKwkJCVNvcnRJdGVtIGtleTsKKworCQkJLyogd2ZpbGwgdGhp cyB3aXRoIGRhdGEgZnJvbSB0aGUgcm93cyAqLworCQkJa2V5LnZhbHVlcyA9 IChEYXR1bSopcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihEYXR1bSkpOwor CQkJa2V5LmlzbnVsbCA9IChib29sKilwYWxsb2MwKG51bWF0dHJzICogc2l6 ZW9mKGJvb2wpKTsKKworCQkJLyoKKwkJCSAqIFNvcnQgdGhlIGdyb3VwcyBm b3IgYnNlYXJjaF9yIChidXQgb25seSB0aGUgaXRlbXMgdGhhdCBhY3R1YWxs eQorCQkJICogbWFkZSBpdCB0byB0aGUgTUNWIGxpc3QpLgorCQkJICovCisJ CQlxc29ydF9hcmcoKHZvaWQgKikgZ3JvdXBzLCBuaXRlbXMsIHNpemVvZihT b3J0SXRlbSksCisJCQkJCSAgbXVsdGlfc29ydF9jb21wYXJlLCBtc3MpOwor CisJCQkvKiB3YWxrIHRocm91Z2ggdGhlIHR1cGxlcywgY29tcGFyZSB0aGUg dmFsdWVzIHRvIE1DViBpdGVtcyAqLworCQkJZm9yIChpID0gMDsgaSA8IG51 bXJvd3M7IGkrKykKKwkJCXsKKwkJCQkvKiBjb2xsZWN0IHRoZSBrZXkgdmFs dWVzIGZyb20gdGhlIHJvdyAqLworCQkJCWZvciAoaiA9IDA7IGogPCBudW1h dHRyczsgaisrKQorCQkJCQlrZXkudmFsdWVzW2pdCisJCQkJCQk9IGhlYXBf Z2V0YXR0cihyb3dzW2ldLCBhdHRycy0+dmFsdWVzW2pdLAorCQkJCQkJCQkJ ICAgc3RhdHNbal0tPnR1cERlc2MsICZrZXkuaXNudWxsW2pdKTsKKworCQkJ CS8qIGlmIG5vdCBpbmNsdWRlZCBpbiB0aGUgTUNWIGxpc3QsIGtlZXAgaXQg aW4gdGhlIGFycmF5ICovCisJCQkJaWYgKGJzZWFyY2hfYXJnKCZrZXksIGdy b3Vwcywgbml0ZW1zLCBzaXplb2YoU29ydEl0ZW0pLAorCQkJCQkJCQltdWx0 aV9zb3J0X2NvbXBhcmUsIG1zcykgPT0gTlVMTCkKKwkJCQkJcm93c1tuZmls dGVyZWQrK10gPSByb3dzW2ldOworCQkJfQorCisJCQkvKiByZW1lbWJlciBo b3cgbWFueSByb3dzIHdlIGFjdHVhbGx5IGtlcHQgKi8KKwkJCSpudW1yb3dz X2ZpbHRlcmVkID0gbmZpbHRlcmVkOworCisJCQkvKiBmcmVlIGFsbCB0aGUg ZGF0YSB1c2VkIGhlcmUgKi8KKwkJCXBmcmVlKGtleS52YWx1ZXMpOworCQkJ cGZyZWUoa2V5LmlzbnVsbCk7CisJCX0KKwkJZWxzZQorCQkJLyogdGhlIE1D ViBsaXN0IGNvbnZlcnMgYWxsIHRoZSByb3dzICovCisJCQkqbnVtcm93c19m aWx0ZXJlZCA9IDA7CisJfQorCisJcGZyZWUoaXRlbXMpOworCXBmcmVlKGdy b3Vwcyk7CisKKwlyZXR1cm4gbWN2bGlzdDsKK30KKworLyogYnVpbGQgTXVs dGlTb3J0U3VwcG9ydCBmb3IgdGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGluIGF0 dHJzICovCitzdGF0aWMgTXVsdGlTb3J0U3VwcG9ydAorYnVpbGRfbXNzKFZh Y0F0dHJTdGF0cyAqKnN0YXRzLCBpbnQydmVjdG9yICphdHRycykKK3sKKwlp bnQJaTsKKwlpbnQJbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsKKworCS8qIFNv cnQgYnkgbXVsdGlwbGUgY29sdW1ucyAodXNpbmcgYXJyYXkgb2YgU29ydFN1 cHBvcnQpICovCisJTXVsdGlTb3J0U3VwcG9ydCBtc3MgPSBtdWx0aV9zb3J0 X2luaXQobnVtYXR0cnMpOworCisJLyogcHJlcGFyZSB0aGUgc29ydCBmdW5j dGlvbnMgZm9yIGFsbCB0aGUgYXR0cmlidXRlcyAqLworCWZvciAoaSA9IDA7 IGkgPCBudW1hdHRyczsgaSsrKQorCQltdWx0aV9zb3J0X2FkZF9kaW1lbnNp b24obXNzLCBpLCBpLCBzdGF0cyk7CisKKwlyZXR1cm4gbXNzOworfQorCisv KiBidWlsZCBzb3J0ZWQgYXJyYXkgb2YgU29ydEl0ZW0gd2l0aCB2YWx1ZXMg ZnJvbSByb3dzICovCitzdGF0aWMgU29ydEl0ZW0gKgorYnVpbGRfc29ydGVk X2l0ZW1zKGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIFR1cGxlRGVz YyB0ZGVzYywKKwkJCQkgICBNdWx0aVNvcnRTdXBwb3J0IG1zcywgaW50MnZl Y3RvciAqYXR0cnMpCit7CisJaW50CWksIGosIGxlbjsKKwlpbnQJbnVtYXR0 cnMgPSBhdHRycy0+ZGltMTsKKwlpbnQJbnZhbHVlcyA9IG51bXJvd3MgKiBu dW1hdHRyczsKKworCS8qCisJICogV2Ugd29uJ3QgYWxsb2NhdGUgdGhlIGFy cmF5cyBmb3IgZWFjaCBpdGVtIGluZGVwZW5kZW5seSwgYnV0IGluIG9uZSBs YXJnZQorCSAqIGNodW5rIGFuZCB0aGVuIGp1c3Qgc2V0IHRoZSBwb2ludGVy cy4KKwkgKi8KKwlTb3J0SXRlbSAgICppdGVtczsKKwlEYXR1bQkgICAqdmFs dWVzOworCWJvb2wJICAgKmlzbnVsbDsKKwljaGFyCSAgICpwdHI7CisKKwkv KiBDb21wdXRlIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHdlIG5lZWQg KGJvdGggaXRlbXMgYW5kIHZhbHVlcykuICovCisJbGVuID0gbnVtcm93cyAq IHNpemVvZihTb3J0SXRlbSkgKyBudmFsdWVzICogKHNpemVvZihEYXR1bSkg KyBzaXplb2YoYm9vbCkpOworCisJLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBh bmQgc3BsaXQgaXQgaW50byB0aGUgcGllY2VzLiAqLworCXB0ciA9IHBhbGxv YzAobGVuKTsKKworCS8qIGl0ZW1zIHRvIHNvcnQgKi8KKwlpdGVtcyA9IChT b3J0SXRlbSopcHRyOworCXB0ciArPSBudW1yb3dzICogc2l6ZW9mKFNvcnRJ dGVtKTsKKworCS8qIHZhbHVlcyBhbmQgbnVsbCBmbGFncyAqLworCXZhbHVl cyA9IChEYXR1bSopcHRyOworCXB0ciArPSBudmFsdWVzICogc2l6ZW9mKERh dHVtKTsKKworCWlzbnVsbCA9IChib29sKilwdHI7CisJcHRyICs9IG52YWx1 ZXMgKiBzaXplb2YoYm9vbCk7CisKKwkvKiBtYWtlIHN1cmUgd2UgY29uc3Vt ZWQgdGhlIHdob2xlIGJ1ZmZlciBleGFjdGx5ICovCisJQXNzZXJ0KChwdHIg LSAoY2hhciopaXRlbXMpID09IGxlbik7CisKKwkvKiBmaXggdGhlIHBvaW50 ZXJzIHRvIERhdHVtIGFuZCBib29sIGFycmF5cyAqLworCWZvciAoaSA9IDA7 IGkgPCBudW1yb3dzOyBpKyspCisJeworCQlpdGVtc1tpXS52YWx1ZXMgPSAm dmFsdWVzW2kgKiBudW1hdHRyc107CisJCWl0ZW1zW2ldLmlzbnVsbCA9ICZp c251bGxbaSAqIG51bWF0dHJzXTsKKworCQkvKiBsb2FkIHRoZSB2YWx1ZXMv bnVsbCBmbGFncyBmcm9tIHNhbXBsZSByb3dzICovCisJCWZvciAoaiA9IDA7 IGogPCBudW1hdHRyczsgaisrKQorCQl7CisJCQlpdGVtc1tpXS52YWx1ZXNb al0gPSBoZWFwX2dldGF0dHIocm93c1tpXSwKKwkJCQkJCQkJCQkgIGF0dHJz LT52YWx1ZXNbal0sIC8qIGF0dG51bSAqLworCQkJCQkJCQkJCSAgdGRlc2Ms CisJCQkJCQkJCQkJICAmaXRlbXNbaV0uaXNudWxsW2pdKTsJLyogaXNudWxs ICovCisJCX0KKwl9CisKKwkvKiBkbyB0aGUgc29ydCwgdXNpbmcgdGhlIG11 bHRpLXNvcnQgKi8KKwlxc29ydF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJv d3MsIHNpemVvZihTb3J0SXRlbSksCisJCQkgIG11bHRpX3NvcnRfY29tcGFy ZSwgbXNzKTsKKworCXJldHVybiBpdGVtczsKK30KKworLyogY291bnQgZGlz dGluY3QgY29tYmluYXRpb25zIG9mIFNvcnRJdGVtcyBpbiB0aGUgYXJyYXkg Ki8KK3N0YXRpYyBpbnQKK2NvdW50X2Rpc3RpbmN0X2dyb3VwcyhpbnQgbnVt cm93cywgU29ydEl0ZW0gKml0ZW1zLCBNdWx0aVNvcnRTdXBwb3J0IG1zcykK K3sKKwlpbnQgaTsKKwlpbnQgbmRpc3RpbmN0OworCisJbmRpc3RpbmN0ID0g MTsKKwlmb3IgKGkgPSAxOyBpIDwgbnVtcm93czsgaSsrKQorCQlpZiAobXVs dGlfc29ydF9jb21wYXJlKCZpdGVtc1tpXSwgJml0ZW1zW2ktMV0sIG1zcykg IT0gMCkKKwkJCW5kaXN0aW5jdCArPSAxOworCisJcmV0dXJuIG5kaXN0aW5j dDsKK30KKworLyogY29tcGFyZXMgZnJlcXVlbmNpZXMgb2YgdGhlIFNvcnRJ dGVtIGVudHJpZXMgKGluIGRlc2NlbmRpbmcgb3JkZXIpICovCitzdGF0aWMg aW50Citjb21wYXJlX3NvcnRfaXRlbV9jb3VudChjb25zdCB2b2lkICphLCBj b25zdCB2b2lkICpiKQoreworCVNvcnRJdGVtICppYSA9IChTb3J0SXRlbSAq KWE7CisJU29ydEl0ZW0gKmliID0gKFNvcnRJdGVtICopYjsKKworCWlmIChp YS0+Y291bnQgPT0gaWItPmNvdW50KQorCQlyZXR1cm4gMDsKKwllbHNlIGlm IChpYS0+Y291bnQgPiBpYi0+Y291bnQpCisJCXJldHVybiAtMTsKKworCXJl dHVybiAxOworfQorCisvKiBidWlsZHMgU29ydEl0ZW1zIGZvciBkaXN0aW5j dCBncm91cHMgYW5kIGNvdW50cyB0aGUgbWF0Y2hpbmcgaXRlbXMgKi8KK3N0 YXRpYyBTb3J0SXRlbSAqCitidWlsZF9kaXN0aW5jdF9ncm91cHMoaW50IG51 bXJvd3MsIFNvcnRJdGVtICppdGVtcywgTXVsdGlTb3J0U3VwcG9ydCBtc3Ms CisJCQkJCSAgaW50ICpuZGlzdGluY3QpCit7CisJaW50CWksIGo7CisJaW50 IG5ncm91cHMgPSBjb3VudF9kaXN0aW5jdF9ncm91cHMobnVtcm93cywgaXRl bXMsIG1zcyk7CisKKwlTb3J0SXRlbSAqZ3JvdXBzID0gKFNvcnRJdGVtKilw YWxsb2MwKG5ncm91cHMgKiBzaXplb2YoU29ydEl0ZW0pKTsKKworCWogPSAw OworCWdyb3Vwc1swXSA9IGl0ZW1zWzBdOworCWdyb3Vwc1swXS5jb3VudCA9 IDE7CisKKwlmb3IgKGkgPSAxOyBpIDwgbnVtcm93czsgaSsrKQorCXsKKwkJ aWYgKG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbXNbaV0sICZpdGVtc1tpLTFd LCBtc3MpICE9IDApCisJCQlncm91cHNbKytqXSA9IGl0ZW1zW2ldOworCisJ CWdyb3Vwc1tqXS5jb3VudCsrOworCX0KKworCXBnX3Fzb3J0KCh2b2lkICop IGdyb3Vwcywgbmdyb3Vwcywgc2l6ZW9mKFNvcnRJdGVtKSwKKwkJCSBjb21w YXJlX3NvcnRfaXRlbV9jb3VudCk7CisKKwkqbmRpc3RpbmN0ID0gbmdyb3Vw czsKKwlyZXR1cm4gZ3JvdXBzOworfQorCisKKy8qIGZldGNoIHRoZSBNQ1Yg bGlzdCAoYXMgYSBieXRlYSkgZnJvbSB0aGUgcGdfbXZfc3RhdGlzdGljIGNh dGFsb2cgKi8KK01DVkxpc3QKK2xvYWRfbXZfbWN2bGlzdChPaWQgbXZvaWQp Cit7CisJYm9vbAkJaXNudWxsID0gZmFsc2U7CisJRGF0dW0JCW1jdmxpc3Q7 CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJRm9ybV9wZ19tdl9z dGF0aXN0aWMJbXZzdGF0OworI2VuZGlmCisKKwkvKiBQcmVwYXJlIHRvIHNj YW4gcGdfbXZfc3RhdGlzdGljIGZvciBlbnRyaWVzIGhhdmluZyBpbmRyZWxp ZCA9IHRoaXMgcmVsLiAqLworCUhlYXBUdXBsZQlodHVwID0gU2VhcmNoU3lz Q2FjaGUxKE1WU1RBVE9JRCwgT2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOwor CisJaWYgKCEgSGVhcFR1cGxlSXNWYWxpZChodHVwKSkKKwkJcmV0dXJuIE5V TEw7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJbXZzdGF0ID0g KEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7CisJQXNz ZXJ0KG12c3RhdC0+bWN2X2VuYWJsZWQgJiYgbXZzdGF0LT5tY3ZfYnVpbHQp OworI2VuZGlmCisKKwltY3ZsaXN0ID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RB VE9JRCwgaHR1cCwKKwkJCQkJCSAgIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0 YW1jdiwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7CisKKwlSZWxl YXNlU3lzQ2FjaGUoaHR1cCk7CisKKwlyZXR1cm4gZGVzZXJpYWxpemVfbXZf bWN2bGlzdChEYXR1bUdldEJ5dGVhUChtY3ZsaXN0KSk7Cit9CisKKy8qIHBy aW50IHNvbWUgYmFzaWMgaW5mbyBhYm91dCB0aGUgTUNWIGxpc3QKKyAqCisg KiBUT0RPIEFkZCBpbmZvIGFib3V0IHdoYXQgcGFydCBvZiB0aGUgdGFibGUg dGhpcyBjb3ZlcnMuCisgKi8KK0RhdHVtCitwZ19tdl9zdGF0c19tY3ZsaXN0 X2luZm8oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqZGF0YSA9 IFBHX0dFVEFSR19CWVRFQV9QKDApOworCWNoYXIJICAgKnJlc3VsdDsKKwor CU1DVkxpc3QJbWN2bGlzdCA9IGRlc2VyaWFsaXplX212X21jdmxpc3QoZGF0 YSk7CisKKwlyZXN1bHQgPSBwYWxsb2MwKDEyOCk7CisJc25wcmludGYocmVz dWx0LCAxMjgsICJuaXRlbXM9JWQiLCBtY3ZsaXN0LT5uaXRlbXMpOworCisJ cGZyZWUobWN2bGlzdCk7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdf dG9fdGV4dChyZXN1bHQpKTsKK30KKworLyoKKyAqIHNlcmlhbGl6ZSBNQ1Yg bGlzdCBpbnRvIGEgYnl0ZWEgdmFsdWUKKyAqCisgKgorICogVGhlIGJhc2lj IGFsZ29yaXRobSBpcyBzaW1wbGU6CisgKgorICogKDEpIHBlcmZvcm0gZGVk dXBsaWNhdGlvbiAoZm9yIGVhY2ggYXR0cmlidXRlIHNlcGFyYXRlbHkpCisg KiAgICAgKGEpIGNvbGxlY3QgYWxsIChub24tTlVMTCkgYXR0cmlidXRlIHZh bHVlcyBmcm9tIGFsbCBNQ1YgaXRlbXMKKyAqICAgICAoYikgc29ydCB0aGUg ZGF0YSAodXNpbmcgJ2x0JyBmcm9tIFZhY0F0dHJTdGF0cykKKyAqICAgICAo YykgcmVtb3ZlIGR1cGxpY2F0ZSB2YWx1ZXMgZnJvbSB0aGUgYXJyYXkKKyAq CisgKiAoMikgc2VyaWFsaXplIHRoZSBhcnJheXMgaW50byBhIGJ5dGVhIHZh bHVlCisgKgorICogKDMpIHByb2Nlc3MgYWxsIE1DViBsaXN0IGl0ZW1zCisg KiAgICAgKGEpIHJlcGxhY2UgdmFsdWVzIHdpdGggaW5kZXhlcyBpbnRvIHRo ZSBhcnJheXMKKyAqCisgKiBFYWNoIGF0dHJpYnV0ZSBoYXMgdG8gYmUgcHJv Y2Vzc2VkIHNlcGFyYXRlbHksIGJlY2F1c2Ugd2UgbWF5IGJlIG1peGluZwor ICogZGlmZmVyZW50IGRhdGF0eXBlcywgd2l0aCBkaWZmZXJlbnQgc29ydCBv cGVyYXRvcnMsIGV0Yy4KKyAqCisgKiBXZSdsbCB1c2UgdWludDE2IHZhbHVl cyBmb3IgdGhlIGluZGV4ZXMgaW4gc3RlcCAoMyksIGFzIHdlIGRvbid0IGFs bG93IG1vcmUKKyAqIHRoYW4gOGsgTUNWIGl0ZW1zIChzZWUgbGlzdCBtYXhf bWN2X2l0ZW1zKSwgYWx0aG91Z2ggdGhhdCdzIG1vc3RseSBhcmJpdHJhcnkK KyAqIGxpbWl0LiBXZSBtaWdodCBpbmNyZWFzZSB0aGlzIHRvIDY1ayBhbmQg c3RpbGwgZml0IGludG8gdWludDE2LgorICoKKyAqIFdlIGRvbid0IHJlYWxs eSBleHBlY3QgdGhlIHNlcmlhbGl6YXRpb24gdG8gc2F2ZSBhcyBtdWNoIHNw YWNlIGFzIGZvcgorICogaGlzdG9ncmFtcywgYmVjYXVzZSB3ZSBhcmUgbm90 IGRvaW5nIGFueSBidWNrZXQgc3BsaXRzICh3aGljaCBpcyB0aGUgc291cmNl CisgKiBvZiBoaWdoIHJlZHVuZGFuY3kgaW4gaGlzdG9ncmFtcykuCisgKgor ICogVE9ETyBDb25zaWRlciBwYWNraW5nIGJvb2xlYW4gZmxhZ3MgKE5VTEwp IGZvciBlYWNoIGl0ZW0gaW50byBhIHNpbmdsZSBjaGFyCisgKiAgICAgIChv ciBhIGxvbmdlciB0eXBlKSBpbnN0ZWFkIG9mIHVzaW5nIGFuIGFycmF5IG9m IGJvb2wgaXRlbXMuCisgKi8KK2J5dGVhICoKK3NlcmlhbGl6ZV9tdl9tY3Zs aXN0KE1DVkxpc3QgbWN2bGlzdCwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJ CSBWYWNBdHRyU3RhdHMgKipzdGF0cykKK3sKKwlpbnQJaSwgajsKKwlpbnQJ bmRpbXMgPSBtY3ZsaXN0LT5uZGltZW5zaW9uczsKKwlpbnQJaXRlbXNpemUg PSBJVEVNX1NJWkUobmRpbXMpOworCisJU29ydFN1cHBvcnQJCXNzdXA7CisJ RGltZW5zaW9uSW5mbyAgKmluZm87CisKKwlTaXplCXRvdGFsX2xlbmd0aDsK KworCS8qIGFsbG9jYXRlIGp1c3Qgb25jZSAqLworCWNoYXIgICAqaXRlbSA9 IHBhbGxvYzAoaXRlbXNpemUpOworCisJLyogc2VyaWFsaXplZCBpdGVtcyAo aW5kZXhlcyBpbnRvIGFycmF5cywgZXRjLikgKi8KKwlieXRlYSAgKm91dHB1 dDsKKwljaGFyICAgKmRhdGEgPSBOVUxMOworCisJLyogdmFsdWVzIHBlciBk aW1lbnNpb24gKGFuZCBudW1iZXIgb2Ygbm9uLU5VTEwgdmFsdWVzKSAqLwor CURhdHVtICoqdmFsdWVzID0gKERhdHVtKiopcGFsbG9jMChzaXplb2YoRGF0 dW0qKSAqIG5kaW1zKTsKKwlpbnQJICAgKmNvdW50cyA9IChpbnQqKXBhbGxv YzAoc2l6ZW9mKGludCkgKiBuZGltcyk7CisKKwkvKgorCSAqIFdlJ2xsIGlu Y2x1ZGUgc29tZSBydWRpbWVudGFyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUg YXR0cmlidXRlcyAodHlwZQorCSAqIGxlbmd0aCwgZXRjLiksIHNvIHRoYXQg d2UgZG9uJ3QgaGF2ZSB0byBsb29rIHRoZW0gdXAgd2hpbGUgZGVzZXJpYWxp emluZworCSAqIHRoZSBNQ1YgbGlzdC4KKwkgKi8KKwlpbmZvID0gKERpbWVu c2lvbkluZm8gKilwYWxsb2MwKHNpemVvZihEaW1lbnNpb25JbmZvKSpuZGlt cyk7CisKKwkvKiBzb3J0IHN1cHBvcnQgZGF0YSBmb3IgYWxsIGF0dHJpYnV0 ZXMgaW5jbHVkZWQgaW4gdGhlIE1DViBsaXN0ICovCisJc3N1cCA9IChTb3J0 U3VwcG9ydClwYWxsb2MwKHNpemVvZihTb3J0U3VwcG9ydERhdGEpKm5kaW1z KTsKKworCS8qIGNvbGxlY3QgYW5kIGRlZHVwbGljYXRlIHZhbHVlcyBmb3Ig YWxsIGF0dHJpYnV0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkr KykKKwl7CisJCWludCBuZGlzdGluY3Q7CisJCVN0ZEFuYWx5emVEYXRhICp0 bXAgPSAoU3RkQW5hbHl6ZURhdGEgKilzdGF0c1tpXS0+ZXh0cmFfZGF0YTsK KworCQkvKiBjb3B5IGltcG9ydGFudCBpbmZvIGFib3V0IHRoZSBkYXRhIHR5 cGUgKGxlbmd0aCwgYnktdmFsdWUpICovCisJCWluZm9baV0udHlwbGVuICAg PSBzdGF0c1tpXS0+YXR0cnR5cGUtPnR5cGxlbjsKKwkJaW5mb1tpXS50eXBi eXZhbCA9IHN0YXRzW2ldLT5hdHRydHlwZS0+dHlwYnl2YWw7CisKKwkJLyog YWxsb2NhdGUgc3BhY2UgZm9yIHZhbHVlcyBpbiB0aGUgYXR0cmlidXRlIGFu ZCBjb2xsZWN0IHRoZW0gKi8KKwkJdmFsdWVzW2ldID0gKERhdHVtKilwYWxs b2MwKHNpemVvZihEYXR1bSkgKiBtY3ZsaXN0LT5uaXRlbXMpOworCisJCWZv ciAoaiA9IDA7IGogPCBtY3ZsaXN0LT5uaXRlbXM7IGorKykKKwkJeworCQkJ Lyogc2tpcCBOVUxMIHZhbHVlcyAtIHdlIGRvbid0IG5lZWQgdG8gc2VyaWFs aXplIHRoZW0gKi8KKwkJCWlmIChtY3ZsaXN0LT5pdGVtc1tqXS0+aXNudWxs W2ldKQorCQkJCWNvbnRpbnVlOworCisJCQl2YWx1ZXNbaV1bY291bnRzW2ld XSA9IG1jdmxpc3QtPml0ZW1zW2pdLT52YWx1ZXNbaV07CisJCQljb3VudHNb aV0gKz0gMTsKKwkJfQorCisJCS8qIHRoZXJlIGFyZSBqdXN0IE5VTEwgdmFs dWVzIGluIHRoaXMgZGltZW5zaW9uLCB3ZSdyZSBkb25lICovCisJCWlmIChj b3VudHNbaV0gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIHNvcnQgYW5k IGRlZHVwbGljYXRlIHRoZSBkYXRhICovCisJCXNzdXBbaV0uc3N1cF9jeHQg PSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwkJc3N1cFtpXS5zc3VwX2NvbGxh dGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsKKwkJc3N1cFtpXS5zc3Vw X251bGxzX2ZpcnN0ID0gZmFsc2U7CisKKwkJUHJlcGFyZVNvcnRTdXBwb3J0 RnJvbU9yZGVyaW5nT3AodG1wLT5sdG9wciwgJnNzdXBbaV0pOworCisJCXFz b3J0X2FyZyh2YWx1ZXNbaV0sIGNvdW50c1tpXSwgc2l6ZW9mKERhdHVtKSwK KwkJCQkgIGNvbXBhcmVfc2NhbGFyc19zaW1wbGUsICZzc3VwW2ldKTsKKwor CQkvKgorCQkgKiBXYWxrIHRocm91Z2ggdGhlIGFycmF5IGFuZCBlbGltaW5h dGUgZHVwbGljYXRlIHZhbHVlcywgYnV0IGtlZXAgdGhlCisJCSAqIG9yZGVy aW5nIChzbyB0aGF0IHdlIGNhbiBkbyBic2VhcmNoIGxhdGVyKS4gV2Uga25v dyB0aGVyZSdzIGF0IGxlYXN0CisJCSAqIG9uZSBpdGVtIGFzIChjb3VudHNb aV0gIT0gMCksIHNvIHdlIGNhbiBza2lwIHRoZSBmaXJzdCBlbGVtZW50Lgor CQkgKi8KKwkJbmRpc3RpbmN0ID0gMTsJLyogbnVtYmVyIG9mIGRpc3RpbmN0 IHZhbHVlcyAqLworCQlmb3IgKGogPSAxOyBqIDwgY291bnRzW2ldOyBqKysp CisJCXsKKwkJCS8qIGlmIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUg cHJldmlvdXMgb25lLCB3ZSBjYW4gc2tpcCBpdCAqLworCQkJaWYgKCEgY29t cGFyZV9kYXR1bXNfc2ltcGxlKHZhbHVlc1tpXVtqLTFdLCB2YWx1ZXNbaV1b al0sICZzc3VwW2ldKSkKKwkJCQljb250aW51ZTsKKworCQkJdmFsdWVzW2ld W25kaXN0aW5jdF0gPSB2YWx1ZXNbaV1bal07CisJCQluZGlzdGluY3QgKz0g MTsKKwkJfQorCisJCS8qIHdlIG11c3Qgbm90IGV4Y2VlZCBVSU5UMTZfTUFY LCBhcyB3ZSB1c2UgdWludDE2IGluZGV4ZXMgKi8KKwkJQXNzZXJ0KG5kaXN0 aW5jdCA8PSBVSU5UMTZfTUFYKTsKKworCQkvKgorCQkgKiBTdG9yZSBhZGRp dGlvbmFsIGluZm8gYWJvdXQgdGhlIGF0dHJpYnV0ZSAtIG51bWJlciBvZiBk ZWR1cGxpY2F0ZWQKKwkJICogdmFsdWVzLCBhbmQgYWxzbyBzaXplIG9mIHRo ZSBzZXJpYWxpemVkIGRhdGEuIEZvciBmaXhlZC1sZW5ndGggZGF0YQorCQkg KiB0eXBlcyB0aGlzIGlzIHRyaXZpYWwgdG8gY29tcHV0ZSwgZm9yIHZhcndp ZHRoIHR5cGVzIHdlIG5lZWQgdG8KKwkJICogYWN0dWFsbHkgd2FsayB0aGUg YXJyYXkgYW5kIHN1bSB0aGUgc2l6ZXMuCisJCSAqLworCQlpbmZvW2ldLm52 YWx1ZXMgPSBuZGlzdGluY3Q7CisKKwkJaWYgKGluZm9baV0udHlwbGVuID4g MCkJCQkJCS8qIGZpeGVkLWxlbmd0aCBkYXRhIHR5cGVzICovCisJCQlpbmZv W2ldLm5ieXRlcyA9IGluZm9baV0ubnZhbHVlcyAqIGluZm9baV0udHlwbGVu OworCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMSkJCQkvKiB2YXJs ZW5hICovCisJCXsKKwkJCWluZm9baV0ubmJ5dGVzID0gMDsKKwkJCWZvciAo aiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQlpbmZvW2ld Lm5ieXRlcyArPSBWQVJTSVpFX0FOWSh2YWx1ZXNbaV1bal0pOworCQl9CisJ CWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09IC0yKQkJCS8qIGNzdHJpbmcg Ki8KKwkJeworCQkJaW5mb1tpXS5uYnl0ZXMgPSAwOworCQkJZm9yIChqID0g MDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCWluZm9baV0ubmJ5 dGVzICs9IHN0cmxlbihEYXR1bUdldFBvaW50ZXIodmFsdWVzW2ldW2pdKSk7 CisJCX0KKworCQkvKiB3ZSBrbm93IChjb3VudD4wKSBzbyB0aGVyZSBtdXN0 IGJlIHNvbWUgZGF0YSAqLworCQlBc3NlcnQoaW5mb1tpXS5uYnl0ZXMgPiAw KTsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBjYW4gZmluYWxseSBjb21wdXRl IGhvdyBtdWNoIHNwYWNlIHdlJ2xsIGFjdHVhbGx5IG5lZWQgZm9yIHRoZQor CSAqIHNlcmlhbGl6ZWQgTUNWIGxpc3QsIGFzIGl0IGNvbnRhaW5zIHRoZXNl IGZpZWxkczoKKwkgKgorCSAqIC0gbGVuZ3RoICg0QikgZm9yIHZhcmxlbmEK KwkgKiAtIG1hZ2ljICg0QikKKwkgKiAtIHR5cGUgKDRCKQorCSAqIC0gbmRp bWVuc2lvbnMgKDRCKQorCSAqIC0gbml0ZW1zICg0QikKKwkgKiAtIGluZm8g KG5kaW0gKiBzaXplb2YoRGltZW5zaW9uSW5mbykKKwkgKiAtIGFycmF5cyBv ZiB2YWx1ZXMgZm9yIGVhY2ggZGltZW5zaW9uCisJICogLSBzZXJpYWxpemVk IGl0ZW1zIChuaXRlbXMgKiBpdGVtc2l6ZSkKKwkgKgorCSAqIFNvIHRoZSAn aGVhZGVyJyBzaXplIGlzIDIwQiArIG5kaW0gKiBzaXplb2YoRGltZW5zaW9u SW5mbykgYW5kIHRoZW4gd2UKKwkgKiB3aWxsIHBsYWNlIGFsbCB0aGUgZGF0 YSAodmFsdWVzICsgaW5kZXhlcykuCisJICovCisJdG90YWxfbGVuZ3RoID0g KHNpemVvZihpbnQzMikgKyBvZmZzZXRvZihNQ1ZMaXN0RGF0YSwgaXRlbXMp CisJCQkJCSsgbmRpbXMgKiBzaXplb2YoRGltZW5zaW9uSW5mbykKKwkJCQkJ KyBtY3ZsaXN0LT5uaXRlbXMgKiBpdGVtc2l6ZSk7CisKKwlmb3IgKGkgPSAw OyBpIDwgbmRpbXM7IGkrKykKKwkJdG90YWxfbGVuZ3RoICs9IGluZm9baV0u bmJ5dGVzOworCisJLyogZW5mb3JjZSBhcmJpdHJhcnkgbGltaXQgb2YgMU1C ICovCisJaWYgKHRvdGFsX2xlbmd0aCA+ICgxMDI0ICogMTAyNCkpCisJCWVs b2coRVJST1IsICJzZXJpYWxpemVkIE1DViBsaXN0IGV4Y2VlZHMgMU1CICgl bGQpIiwgdG90YWxfbGVuZ3RoKTsKKworCS8qIGFsbG9jYXRlIHNwYWNlIGZv ciB0aGUgc2VyaWFsaXplZCBNQ1YgbGlzdCwgc2V0IGhlYWRlciBmaWVsZHMg Ki8KKwlvdXRwdXQgPSAoYnl0ZWEqKXBhbGxvYzAodG90YWxfbGVuZ3RoKTsK KwlTRVRfVkFSU0laRShvdXRwdXQsIHRvdGFsX2xlbmd0aCk7CisKKwkvKiAn ZGF0YScgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBv dXRwdXQgYnVmZmVyICovCisJZGF0YSA9IFZBUkRBVEEob3V0cHV0KTsKKwor CS8qIE1DViBsaXN0IGhlYWRlciAobnVtYmVyIG9mIGl0ZW1zLCAuLi4pICov CisJbWVtY3B5KGRhdGEsIG1jdmxpc3QsIG9mZnNldG9mKE1DVkxpc3REYXRh LCBpdGVtcykpOworCWRhdGEgKz0gb2Zmc2V0b2YoTUNWTGlzdERhdGEsIGl0 ZW1zKTsKKworCS8qIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdHRyaWJ1dGVz ICovCisJbWVtY3B5KGRhdGEsIGluZm8sIHNpemVvZihEaW1lbnNpb25JbmZv KSAqIG5kaW1zKTsKKwlkYXRhICs9IHNpemVvZihEaW1lbnNpb25JbmZvKSAq IG5kaW1zOworCisJLyogbm93IHNlcmlhbGl6ZSB0aGUgZGVkdXBsaWNhdGVk IHZhbHVlcyBmb3IgYWxsIGF0dHJpYnV0ZXMgKi8KKwlmb3IgKGkgPSAwOyBp IDwgbmRpbXM7IGkrKykKKwl7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO RworCQljaGFyICp0bXAgPSBkYXRhOwkvKiByZW1lbWJlciB0aGUgc3RhcnRp bmcgcG9pbnQgKi8KKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tp XS5udmFsdWVzOyBqKyspCisJCXsKKwkJCURhdHVtIHYgPSB2YWx1ZXNbaV1b al07CisKKwkJCWlmIChpbmZvW2ldLnR5cGJ5dmFsKQkJCS8qIHBhc3NlZCBi eSB2YWx1ZSAqLworCQkJeworCQkJCW1lbWNweShkYXRhLCAmdiwgaW5mb1tp XS50eXBsZW4pOworCQkJCWRhdGEgKz0gaW5mb1tpXS50eXBsZW47CisJCQl9 CisJCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA+IDApCS8qIHBhc2VkIGJ5 IHJlZmVyZW5jZSAqLworCQkJeworCQkJCW1lbWNweShkYXRhLCBEYXR1bUdl dFBvaW50ZXIodiksIGluZm9baV0udHlwbGVuKTsKKwkJCQlkYXRhICs9IGlu Zm9baV0udHlwbGVuOworCQkJfQorCQkJZWxzZSBpZiAoaW5mb1tpXS50eXBs ZW4gPT0gLTEpCS8qIHZhcmxlbmEgKi8KKwkJCXsKKwkJCQltZW1jcHkoZGF0 YSwgRGF0dW1HZXRQb2ludGVyKHYpLCBWQVJTSVpFX0FOWSh2KSk7CisJCQkJ ZGF0YSArPSBWQVJTSVpFX0FOWSh2KTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlu Zm9baV0udHlwbGVuID09IC0yKQkvKiBjc3RyaW5nICovCisJCQl7CisJCQkJ bWVtY3B5KGRhdGEsIERhdHVtR2V0UG9pbnRlcih2KSwgc3RybGVuKERhdHVt R2V0UG9pbnRlcih2KSkrMSk7CisJCQkJZGF0YSArPSBzdHJsZW4oRGF0dW1H ZXRQb2ludGVyKHYpKSArIDE7CS8qIHRlcm1pbmF0b3IgKi8KKwkJCX0KKwkJ fQorCisJCS8qIG1ha2Ugc3VyZSB3ZSBnb3QgZXhhY3RseSB0aGUgYW1vdW50 IG9mIGRhdGEgd2UgZXhwZWN0ZWQgKi8KKwkJQXNzZXJ0KChkYXRhIC0gdG1w KSA9PSBpbmZvW2ldLm5ieXRlcyk7CisJfQorCisJLyogZmluYWxseSBzZXJp YWxpemUgdGhlIGl0ZW1zLCB3aXRoIHVpbnQxNiBpbmRleGVzIGluc3RlYWQg b2YgdGhlIHZhbHVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5u aXRlbXM7IGkrKykKKwl7CisJCU1DVkl0ZW0JbWN2aXRlbSA9IG1jdmxpc3Qt Pml0ZW1zW2ldOworCisJCS8qIGRvbid0IHdyaXRlIGJleW9uZCB0aGUgYWxs b2NhdGVkIHNwYWNlICovCisJCUFzc2VydChkYXRhIDw9IChjaGFyKilvdXRw dXQgKyB0b3RhbF9sZW5ndGggLSBpdGVtc2l6ZSk7CisKKwkJLyogcmVzZXQg dGhlIGl0ZW0gKHdlIG9ubHkgYWxsb2NhdGUgaXQgb25jZSBhbmQgcmV1c2Ug aXQpICovCisJCW1lbXNldChpdGVtLCAwLCBpdGVtc2l6ZSk7CisKKwkJZm9y IChqID0gMDsgaiA8IG5kaW1zOyBqKyspCisJCXsKKwkJCURhdHVtICAqdiA9 IE5VTEw7CisKKwkJCS8qIGRvIHRoZSBsb29rdXAgb25seSBmb3Igbm9uLU5V TEwgdmFsdWVzICovCisJCQlpZiAobWN2bGlzdC0+aXRlbXNbaV0tPmlzbnVs bFtqXSkKKwkJCQljb250aW51ZTsKKworCQkJdiA9IChEYXR1bSopYnNlYXJj aF9hcmcoJm1jdml0ZW0tPnZhbHVlc1tqXSwgdmFsdWVzW2pdLAorCQkJCQkJ CQkJaW5mb1tqXS5udmFsdWVzLCBzaXplb2YoRGF0dW0pLAorCQkJCQkJCQkJ Y29tcGFyZV9zY2FsYXJzX3NpbXBsZSwgJnNzdXBbal0pOworCisJCQlBc3Nl cnQodiAhPSBOVUxMKTsJLyogc2VyaWFsaXphdGlvbiBvciBkZWR1cGxpY2F0 aW9uIGVycm9yICovCisKKwkJCS8qIGNvbXB1dGUgaW5kZXggd2l0aGluIHRo ZSBhcnJheSAqLworCQkJSVRFTV9JTkRFWEVTKGl0ZW0pW2pdID0gKHYgLSB2 YWx1ZXNbal0pOworCisJCQkvKiBjaGVjayB0aGUgaW5kZXggaXMgd2l0aGlu IGV4cGVjdGVkIGJvdW5kcyAqLworCQkJQXNzZXJ0KElURU1fSU5ERVhFUyhp dGVtKVtqXSA+PSAwKTsKKwkJCUFzc2VydChJVEVNX0lOREVYRVMoaXRlbSlb al0gPCBpbmZvW2pdLm52YWx1ZXMpOworCQl9CisKKwkJLyogY29weSBOVUxM IGFuZCBmcmVxdWVuY3kgZmxhZ3MgaW50byB0aGUgaXRlbSAqLworCQltZW1j cHkoSVRFTV9OVUxMUyhpdGVtLCBuZGltcyksIG1jdml0ZW0tPmlzbnVsbCwg c2l6ZW9mKGJvb2wpICogbmRpbXMpOworCQltZW1jcHkoSVRFTV9GUkVRVUVO Q1koaXRlbSwgbmRpbXMpLCAmbWN2aXRlbS0+ZnJlcXVlbmN5LCBzaXplb2Yo ZG91YmxlKSk7CisKKwkJLyogY29weSB0aGUgc2VyaWFsaXplZCBpdGVtIGlu dG8gdGhlIGFycmF5ICovCisJCW1lbWNweShkYXRhLCBpdGVtLCBpdGVtc2l6 ZSk7CisKKwkJZGF0YSArPSBpdGVtc2l6ZTsKKwl9CisKKwkvKiBhdCB0aGlz IHBvaW50IHdlIGV4cGVjdCB0byBtYXRjaCB0aGUgdG90YWxfbGVuZ3RoIGV4 YWN0bHkgKi8KKwlBc3NlcnQoKGRhdGEgLSAoY2hhciopb3V0cHV0KSA9PSB0 b3RhbF9sZW5ndGgpOworCisJcmV0dXJuIG91dHB1dDsKK30KKworLyoKKyAq IGRlc2VyaWFsaXplIE1DViBsaXN0IGZyb20gdGhlIHZhcmxlbmEgdmFsdWUK KyAqCisgKgorICogV2UgZGVzZXJpYWxpemUgdGhlIE1DViBsaXN0IGZ1bGx5 LCBiZWNhdXNlIHdlIGRvbid0IGV4cGVjdCB0aGVyZSBibyBiZSBhIGxvdAor ICogb2YgZHVwbGljYXRlIHZhbHVlcy4gQnV0IHBlcmhhcHMgd2Ugc2hvdWxk IGtlZXAgdGhlIE1DViBpbiBzZXJpYWxpemVkIGZvcm0KKyAqIGp1c3QgbGlr ZSBoaXN0b2dyYW1zLgorICovCitNQ1ZMaXN0IGRlc2VyaWFsaXplX212X21j dmxpc3QoYnl0ZWEgKiBkYXRhKQoreworCWludAkJaSwgajsKKwlTaXplCWV4 cGVjdGVkX3NpemU7CisJTUNWTGlzdCBtY3ZsaXN0OworCWNoYXIgICAqdG1w OworCisJaW50CQluZGltcywgbml0ZW1zLCBpdGVtc2l6ZTsKKwlEaW1lbnNp b25JbmZvICppbmZvID0gTlVMTDsKKworCXVpbnQxNiAqaW5kZXhlcyA9IE5V TEw7CisJRGF0dW0gKip2YWx1ZXMgID0gTlVMTDsKKworCS8qIGxvY2FsIGFs bG9jYXRpb24gYnVmZmVyICh1c2VkIG9ubHkgZm9yIGRlc2VyaWFsaXphdGlv bikgKi8KKwlpbnQJCWJ1ZmZsZW47CisJY2hhciAgICpidWZmOworCWNoYXIg ICAqcHRyOworCisJLyogYnVmZmVyIHVzZWQgZm9yIHRoZSByZXN1bHQgKi8K KwlpbnQJCXJidWZmbGVuOworCWNoYXIgICAqcmJ1ZmY7CisJY2hhciAgICpy cHRyOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisK KwkvKiB3ZSBjYW4ndCBkZXNlcmlhbGl6ZSB0aGUgTUNWIGlmIHRoZXJlJ3Mg bm90IGV2ZW4gYSBjb21wbGV0ZSBoZWFkZXIgKi8KKwlleHBlY3RlZF9zaXpl ID0gb2Zmc2V0b2YoTUNWTGlzdERhdGEsaXRlbXMpOworCisJaWYgKFZBUlNJ WkVfQU5ZX0VYSERSKGRhdGEpIDwgZXhwZWN0ZWRfc2l6ZSkKKwkJZWxvZyhF UlJPUiwgImludmFsaWQgTUNWIFNpemUgJWxkIChleHBlY3RlZCBhdCBsZWFz dCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwgb2Zmc2V0 b2YoTUNWTGlzdERhdGEsaXRlbXMpKTsKKworCS8qIHJlYWQgdGhlIE1DViBs aXN0IGhlYWRlciAqLworCW1jdmxpc3QgPSAoTUNWTGlzdClwYWxsb2MwKHNp emVvZihNQ1ZMaXN0RGF0YSkpOworCisJLyogaW5pdGlhbGl6ZSBwb2ludGVy IHRvIHRoZSBkYXRhIHBhcnQgKHNraXAgdGhlIHZhcmxlbmEgaGVhZGVyKSAq LworCXRtcCA9IFZBUkRBVEEoZGF0YSk7CisKKwkvKiBnZXQgdGhlIGhlYWRl ciBhbmQgcGVyZm9ybSBmdXJ0aGVyIHNhbml0eSBjaGVja3MgKi8KKwltZW1j cHkobWN2bGlzdCwgdG1wLCBvZmZzZXRvZihNQ1ZMaXN0RGF0YSxpdGVtcykp OworCXRtcCArPSBvZmZzZXRvZihNQ1ZMaXN0RGF0YSxpdGVtcyk7CisKKwlp ZiAobWN2bGlzdC0+bWFnaWMgIT0gTVZTVEFUX01DVl9NQUdJQykKKwkJZWxv ZyhFUlJPUiwgImludmFsaWQgTUNWIG1hZ2ljICVkIChleHBlY3RlZCAlZGQp IiwKKwkJCSBtY3ZsaXN0LT5tYWdpYywgTVZTVEFUX01DVl9NQUdJQyk7CisK KwlpZiAobWN2bGlzdC0+dHlwZSAhPSBNVlNUQVRfTUNWX1RZUEVfQkFTSUMp CisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1DViB0eXBlICVkIChleHBlY3Rl ZCAlZGQpIiwKKwkJCSBtY3ZsaXN0LT50eXBlLCBNVlNUQVRfTUNWX1RZUEVf QkFTSUMpOworCisJbml0ZW1zID0gbWN2bGlzdC0+bml0ZW1zOworCW5kaW1z ID0gbWN2bGlzdC0+bmRpbWVuc2lvbnM7CisJaXRlbXNpemUgPSBJVEVNX1NJ WkUobmRpbXMpOworCisJQXNzZXJ0KChuaXRlbXMgPiAwKSAmJiAobml0ZW1z ICA8PSBNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMpKTsKKwlBc3NlcnQoKG5k aW1zID49IDIpICYmIChuZGltcyA8PSBNVlNUQVRTX01BWF9ESU1FTlNJT05T KSk7CisKKwkvKgorCSAqIENoZWNrIGFtb3VudCBvZiBkYXRhIGluY2x1ZGlu ZyBEaW1lbnNpb25JbmZvIGZvciBhbGwgZGltZW5zaW9ucyBhbmQKKwkgKiBh bHNvIHRoZSBzZXJpYWxpemVkIGl0ZW1zIChpbmNsdWRpbmcgdWludDE2IGlu ZGV4ZXMpLiBBbHNvLCB3YWxrCisJICogdGhyb3VnaCB0aGUgZGltZW5zaW9u IGluZm9ybWF0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIHN1bS4KKwkgKi8KKwll eHBlY3RlZF9zaXplICs9IG5kaW1zICogc2l6ZW9mKERpbWVuc2lvbkluZm8p ICsKKwkJCQkJIChuaXRlbXMgKiBpdGVtc2l6ZSk7CisKKwkvKiBjaGVjayB0 aGF0IHdlIGhhdmUgYXQgbGVhc3QgdGhlIERpbWVuc2lvbkluZm8gcmVjb3Jk cyAqLworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8IGV4cGVjdGVk X3NpemUpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1DViBzaXplICVsZCAo ZXhwZWN0ZWQgJWxkKSIsCisJCQkgVkFSU0laRV9BTllfRVhIRFIoZGF0YSks IGV4cGVjdGVkX3NpemUpOworCisJaW5mbyA9IChEaW1lbnNpb25JbmZvKiko dG1wKTsKKwl0bXAgKz0gbmRpbXMgKiBzaXplb2YoRGltZW5zaW9uSW5mbyk7 CisKKwkvKiBhY2NvdW50IGZvciB0aGUgdmFsdWUgYXJyYXlzICovCisJZm9y IChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJeworCQlBc3NlcnQoaW5mb1tp XS5udmFsdWVzID49IDApOworCQlBc3NlcnQoaW5mb1tpXS5uYnl0ZXMgPj0g MCk7CisKKwkJZXhwZWN0ZWRfc2l6ZSArPSBpbmZvW2ldLm5ieXRlczsKKwl9 CisKKwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkgIT0gZXhwZWN0ZWRf c2l6ZSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgTUNWIHNpemUgJWxkIChl eHBlY3RlZCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwg ZXhwZWN0ZWRfc2l6ZSk7CisKKwkvKiBsb29rcyBPSyAtIG5vdCBjb3JydXB0 ZWQgb3Igc29tZXRoaW5nICovCisKKwkvKgorCSAqIEFsbG9jYXRlIG9uZSBs YXJnZSBjaHVuayBvZiBtZW1vcnkgZm9yIHRoZSBpbnRlcm1lZGlhdGUgZGF0 YSwgbmVlZGVkCisJICogb25seSBmb3IgZGVzZXJpYWxpemluZyB0aGUgTUNW IGxpc3QgKGFuZCBhbGxvY2F0ZSBkZW5zZWx5IHRvIG1pbmltaXplCisJICog dGhlIHBhbGxvYyBvdmVyaGVhZCkuCisJICoKKwkgKiBMZXQncyBzZWUgaG93 IG11Y2ggc3BhY2Ugd2UnbGwgYWN0dWFsbHkgbmVlZCwgYW5kIGFsc28gaW5j bHVkZSBzcGFjZQorCSAqIGZvciB0aGUgYXJyYXkgd2l0aCBwb2ludGVycy4K KwkgKi8KKwlidWZmbGVuID0gc2l6ZW9mKERhdHVtKikgKiBuZGltczsJCS8q IHNwYWNlIGZvciBwb2ludGVycyAqLworCisJZm9yIChpID0gMDsgaSA8IG5k aW1zOyBpKyspCisJCS8qIGZvciBmdWxsLXNpemUgYnl2YWwgdHlwZXMsIHdl IHJldXNlIHRoZSBzZXJpYWxpemVkIHZhbHVlICovCisJCWlmICghIChpbmZv W2ldLnR5cGJ5dmFsICYmIGluZm9baV0udHlwbGVuID09IHNpemVvZihEYXR1 bSkpKQorCQkJYnVmZmxlbiArPSAoc2l6ZW9mKERhdHVtKSAqIGluZm9baV0u bnZhbHVlcyk7CisKKwlidWZmID0gcGFsbG9jMChidWZmbGVuKTsKKwlwdHIg ID0gYnVmZjsKKworCXZhbHVlcyA9IChEYXR1bSoqKWJ1ZmY7CisJcHRyICs9 IChzaXplb2YoRGF0dW0qKSAqIG5kaW1zKTsKKworCS8qCisJICogWFhYIFRo aXMgdXNlcyBwb2ludGVycyB0byB0aGUgb3JpZ2luYWwgZGF0YSBhcnJheSAo dGhlIHR5cGVzIG5vdCBwYXNzZWQKKwkgKiAgICAgYnkgdmFsdWUpLCBzbyB3 aGVuIHNvbWVvbmUgZnJlZXMgdGhlIG1lbW9yeSwgZS5nLiBieSBkb2luZyBz b21ldGhpbmcKKwkgKiAgICAgbGlrZSB0aGlzOgorCSAqCisJICogICAgICAg ICBieXRlYSAqIGRhdGEgPSAuLi4gZmV0Y2ggdGhlIGRhdGEgZnJvbSBjYXRh bG9nIC4uLgorCSAqICAgICAgICAgTUNWTGlzdCBtY3ZsaXN0ID0gZGVzZXJp YWxpemVfbWN2X2xpc3QoZGF0YSk7CisJICogICAgICAgICBwZnJlZShkYXRh KTsKKwkgKgorCSAqICAgICB0aGVuICdtY3ZsaXN0JyByZWZlcmVuY2VzIHRo ZSBmcmVlZCBtZW1vcnkuIFNob3VsZCBjb3B5IHRoZSBwaWVjZXMuCisJICov CisJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCisJeworCQlpZiAoaW5m b1tpXS50eXBieXZhbCkKKwkJeworCQkJLyogcGFzc2VkIGJ5IHZhbHVlIC8g RGF0dW0gLSBzaW1wbHkgcmV1c2UgdGhlIGFycmF5ICovCisJCQlpZiAoaW5m b1tpXS50eXBsZW4gPT0gc2l6ZW9mKERhdHVtKSkKKwkJCXsKKwkJCQl2YWx1 ZXNbaV0gPSAoRGF0dW0qKXRtcDsKKwkJCQl0bXAgKz0gaW5mb1tpXS5uYnl0 ZXM7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJdmFsdWVzW2ldID0gKERh dHVtKilwdHI7CisJCQkJcHRyICs9IChzaXplb2YoRGF0dW0pICogaW5mb1tp XS5udmFsdWVzKTsKKworCQkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52 YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0 aGUgYXJyYXkgKi8KKwkJCQkJbWVtY3B5KCZ2YWx1ZXNbaV1bal0sIHRtcCwg aW5mb1tpXS50eXBsZW4pOworCQkJCQl0bXAgKz0gaW5mb1tpXS50eXBsZW47 CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogYWxsIHRo ZSBvdGhlciB0eXBlcyBuZWVkIGEgY2h1bmsgb2YgdGhlIGJ1ZmZlciAqLwor CQkJdmFsdWVzW2ldID0gKERhdHVtKilwdHI7CisJCQlwdHIgKz0gKHNpemVv ZihEYXR1bSkgKiBpbmZvW2ldLm52YWx1ZXMpOworCisJCQkvKiBwYXNlZCBi eSByZWZlcmVuY2UsIGJ1dCBmaXhlZCBsZW5ndGggKG5hbWUsIHRpZCwgLi4u KSAqLworCQkJaWYgKGluZm9baV0udHlwbGVuID4gMCkKKwkJCXsKKwkJCQlm b3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJewor CQkJCQkvKiBqdXN0IHBvaW50IGludG8gdGhlIGFycmF5ICovCisJCQkJCXZh bHVlc1tpXVtqXSA9IFBvaW50ZXJHZXREYXR1bSh0bXApOworCQkJCQl0bXAg Kz0gaW5mb1tpXS50eXBsZW47CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAo aW5mb1tpXS50eXBsZW4gPT0gLTEpCisJCQl7CisJCQkJLyogdmFybGVuYSAq LworCQkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykK KwkJCQl7CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8K KwkJCQkJdmFsdWVzW2ldW2pdID0gUG9pbnRlckdldERhdHVtKHRtcCk7CisJ CQkJCXRtcCArPSBWQVJTSVpFX0FOWSh0bXApOworCQkJCX0KKwkJCX0KKwkJ CWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09IC0yKQorCQkJeworCQkJCS8q IGNzdHJpbmcgKi8KKwkJCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFs dWVzOyBqKyspCisJCQkJeworCQkJCQkvKiBqdXN0IHBvaW50IGludG8gdGhl IGFycmF5ICovCisJCQkJCXZhbHVlc1tpXVtqXSA9IFBvaW50ZXJHZXREYXR1 bSh0bXApOworCQkJCQl0bXAgKz0gKHN0cmxlbih0bXApICsgMSk7IC8qIGRv bid0IGZvcmdldCB0aGUgXDAgKi8KKwkJCQl9CisJCQl9CisJCX0KKwl9CisK KwkvKiB3ZSBzaG91bGQgaGF2ZSBleGhhdXN0ZWQgdGhlIGJ1ZmZlciBleGFj dGx5ICovCisJQXNzZXJ0KChwdHIgLSBidWZmKSA9PSBidWZmbGVuKTsKKwor CS8qIGFsbG9jYXRlIHNwYWNlIGZvciBhbGwgdGhlIE1DViBpdGVtcyBpbiBh IHNpbmdsZSBwaWVjZSAqLworCXJidWZmbGVuID0gKHNpemVvZihNQ1ZJdGVt KSArIHNpemVvZihNQ1ZJdGVtRGF0YSkgKworCQkJCXNpemVvZihEYXR1bSkq bmRpbXMgKyBzaXplb2YoYm9vbCkqbmRpbXMpICogbml0ZW1zOworCisJcmJ1 ZmYgPSBwYWxsb2MwKHJidWZmbGVuKTsKKwlycHRyICA9IHJidWZmOworCisJ bWN2bGlzdC0+aXRlbXMgPSAoTUNWSXRlbSopcmJ1ZmY7CisJcnB0ciArPSAo c2l6ZW9mKE1DVkl0ZW0pICogbml0ZW1zKTsKKworCWZvciAoaSA9IDA7IGkg PCBuaXRlbXM7IGkrKykKKwl7CisJCU1DVkl0ZW0gaXRlbSA9IChNQ1ZJdGVt KXJwdHI7CisJCXJwdHIgKz0gKHNpemVvZihNQ1ZJdGVtRGF0YSkpOworCisJ CWl0ZW0tPnZhbHVlcyA9IChEYXR1bSopcnB0cjsKKwkJcnB0ciArPSAoc2l6 ZW9mKERhdHVtKSpuZGltcyk7CisKKwkJaXRlbS0+aXNudWxsID0gKGJvb2wq KXJwdHI7CisJCXJwdHIgKz0gKHNpemVvZihib29sKSAqbmRpbXMpOworCisJ CS8qIGp1c3QgcG9pbnQgdG8gdGhlIHJpZ2h0IHBsYWNlICovCisJCWluZGV4 ZXMgPSBJVEVNX0lOREVYRVModG1wKTsKKworCQltZW1jcHkoaXRlbS0+aXNu dWxsLCBJVEVNX05VTExTKHRtcCwgbmRpbXMpLCBzaXplb2YoYm9vbCkgKiBu ZGltcyk7CisJCW1lbWNweSgmaXRlbS0+ZnJlcXVlbmN5LCBJVEVNX0ZSRVFV RU5DWSh0bXAsIG5kaW1zKSwgc2l6ZW9mKGRvdWJsZSkpOworCisjaWZkZWYg QVNTRVJUX0NIRUNLSU5HCisJCWZvciAoaiA9IDA7IGogPCBuZGltczsgaisr KQorCQkJQXNzZXJ0KGluZGV4ZXNbal0gPD0gVUlOVDE2X01BWCk7CisjZW5k aWYKKworCQkvKiB0cmFuc2xhdGUgdGhlIHZhbHVlcyAqLworCQlmb3IgKGog PSAwOyBqIDwgbmRpbXM7IGorKykKKwkJCWlmICghIGl0ZW0tPmlzbnVsbFtq XSkKKwkJCQlpdGVtLT52YWx1ZXNbal0gPSB2YWx1ZXNbal1baW5kZXhlc1tq XV07CisKKwkJbWN2bGlzdC0+aXRlbXNbaV0gPSBpdGVtOworCisJCXRtcCAr PSBJVEVNX1NJWkUobmRpbXMpOworCisJCUFzc2VydCh0bXAgPD0gKGNoYXIq KWRhdGEgKyBWQVJTSVpFX0FOWShkYXRhKSk7CisJfQorCisJLyogY2hlY2sg dGhhdCB3ZSBwcm9jZXNzZWQgYWxsIHRoZSBkYXRhICovCisJQXNzZXJ0KHRt cCA9PSAoY2hhciopZGF0YSArIFZBUlNJWkVfQU5ZKGRhdGEpKTsKKworCS8q IHJlbGVhc2UgdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KKwlwZnJlZShidWZm KTsKKworCXJldHVybiBtY3ZsaXN0OworfQorCisvKgorICogU1JGIHdpdGgg ZGV0YWlscyBhYm91dCBidWNrZXRzIG9mIGEgaGlzdG9ncmFtOgorICoKKyAq IC0gaXRlbSBJRCAoMC4uLm5pdGVtcykKKyAqIC0gdmFsdWVzIChzdHJpbmcg YXJyYXkpCisgKiAtIG51bGxzIG9ubHkgKGJvb2xlYW4gYXJyYXkpCisgKiAt IGZyZXF1ZW5jeSAoZG91YmxlIHByZWNpc2lvbikKKyAqCisgKiBUaGUgaW5w dXQgaXMgdGhlIE9JRCBvZiB0aGUgc3RhdGlzdGljcywgYW5kIHRoZXJlIGFy ZSBubyByb3dzIHJldHVybmVkIGlmCisgKiB0aGUgc3RhdGlzdGljcyBjb250 YWlucyBubyBoaXN0b2dyYW0uCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEo cGdfbXZfbWN2X2l0ZW1zKTsKKworRGF0dW0KK3BnX212X21jdl9pdGVtcyhQ R19GVU5DVElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29udGV4dAkgICAqZnVu Y2N0eDsKKwlpbnQJCQkJCWNhbGxfY250cjsKKwlpbnQJCQkJCW1heF9jYWxs czsKKwlUdXBsZURlc2MJCQl0dXBkZXNjOworCUF0dEluTWV0YWRhdGEJICAg KmF0dGlubWV0YTsKKworCS8qIHN0dWZmIGRvbmUgb25seSBvbiB0aGUgZmly c3QgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KKwlpZiAoU1JGX0lTX0ZJUlNU Q0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4dAlvbGRjb250ZXh0OworCQlN Q1ZMaXN0CQkJbWN2bGlzdDsKKworCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBj b250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZ1bmNj dHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKworCQkvKiBzd2l0Y2ggdG8g bWVtb3J5IGNvbnRleHQgYXBwcm9wcmlhdGUgZm9yIG11bHRpcGxlIGZ1bmN0 aW9uIGNhbGxzICovCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlt Y3ZsaXN0ID0gbG9hZF9tdl9tY3ZsaXN0KFBHX0dFVEFSR19PSUQoMCkpOwor CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IG1jdmxpc3Q7CisKKwkJLyogdG90 YWwgbnVtYmVyIG9mIHR1cGxlcyB0byBiZSByZXR1cm5lZCAqLworCQlmdW5j Y3R4LT5tYXhfY2FsbHMgPSAwOworCQlpZiAoZnVuY2N0eC0+dXNlcl9mY3R4 ICE9IE5VTEwpCisJCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBtY3ZsaXN0LT5u aXRlbXM7CisKKwkJLyogQnVpbGQgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciBv dXIgcmVzdWx0IHR5cGUgKi8KKwkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBl KGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lU RSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiZnVuY3Rp b24gcmV0dXJuaW5nIHJlY29yZCBjYWxsZWQgaW4gY29udGV4dCAiCisJCQkJ CQkJInRoYXQgY2Fubm90IGFjY2VwdCB0eXBlIHJlY29yZCIpKSk7CisKKwkJ LyogYnVpbGQgbWV0YWRhdGEgbmVlZGVkIGxhdGVyIHRvIHByb2R1Y2UgdHVw bGVzIGZyb20gcmF3IEMtc3RyaW5ncyAqLworCQlhdHRpbm1ldGEgPSBUdXBs ZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOworCQlmdW5jY3R4LT5h dHRpbm1ldGEgPSBhdHRpbm1ldGE7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCX0KKworCS8qIHN0dWZmIGRvbmUgb24gZXZl cnkgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KKwlmdW5jY3R4ID0gU1JGX1BF UkNBTExfU0VUVVAoKTsKKworCWNhbGxfY250ciA9IGZ1bmNjdHgtPmNhbGxf Y250cjsKKwltYXhfY2FsbHMgPSBmdW5jY3R4LT5tYXhfY2FsbHM7CisJYXR0 aW5tZXRhID0gZnVuY2N0eC0+YXR0aW5tZXRhOworCisJaWYgKGNhbGxfY250 ciA8IG1heF9jYWxscykgICAgLyogZG8gd2hlbiB0aGVyZSBpcyBtb3JlIGxl ZnQgdG8gc2VuZCAqLworCXsKKwkJY2hhcgkgICoqdmFsdWVzOworCQlIZWFw VHVwbGUJdHVwbGU7CisJCURhdHVtCQlyZXN1bHQ7CisJCWludDJ2ZWN0b3Ig KnN0YWtleXM7CisJCU9pZAkJCXJlbGlkOworCisJCWNoYXIgKmJ1ZmYgPSBw YWxsb2MwKDEwMjQpOworCQljaGFyICpmb3JtYXQ7CisKKwkJaW50CQkJaTsK KworCQlPaWQJCSAgICpvdXRmdW5jczsKKwkJRm1nckluZm8gICAqZm1ncmlu Zm87CisKKwkJTUNWTGlzdAkJbWN2bGlzdDsKKwkJTUNWSXRlbQkJaXRlbTsK KworCQltY3ZsaXN0ID0gKE1DVkxpc3QpZnVuY2N0eC0+dXNlcl9mY3R4Owor CisJCUFzc2VydChjYWxsX2NudHIgPCBtY3ZsaXN0LT5uaXRlbXMpOworCisJ CWl0ZW0gPSBtY3ZsaXN0LT5pdGVtc1tjYWxsX2NudHJdOworCisJCXN0YWtl eXMgPSBmaW5kX212X2F0dG51bXMoUEdfR0VUQVJHX09JRCgwKSwgJnJlbGlk KTsKKworCQkvKgorCQkgKiBQcmVwYXJlIGEgdmFsdWVzIGFycmF5IGZvciBi dWlsZGluZyB0aGUgcmV0dXJuZWQgdHVwbGUuIFRoaXMgc2hvdWxkCisJCSAq IGJlIGFuIGFycmF5IG9mIEMgc3RyaW5ncyB3aGljaCB3aWxsIGJlIHByb2Nl c3NlZCBsYXRlciBieSB0aGUgdHlwZQorCQkgKiBpbnB1dCBmdW5jdGlvbnMu CisJCSAqLworCQl2YWx1ZXMgPSAoY2hhciAqKikgcGFsbG9jKDQgKiBzaXpl b2YoY2hhciAqKSk7CisKKwkJdmFsdWVzWzBdID0gKGNoYXIgKikgcGFsbG9j KDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQkvKiBhcnJheXMgKi8KKwkJdmFs dWVzWzFdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNoYXIp KTsKKwkJdmFsdWVzWzJdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6 ZW9mKGNoYXIpKTsKKworCQkvKiBmcmVxdWVuY3kgKi8KKwkJdmFsdWVzWzNd ID0gKGNoYXIgKikgcGFsbG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQlv dXRmdW5jcyA9IChPaWQqKXBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBtY3ZsaXN0 LT5uZGltZW5zaW9ucyk7CisJCWZtZ3JpbmZvID0gKEZtZ3JJbmZvKilwYWxs b2MwKHNpemVvZihGbWdySW5mbykgKiBtY3ZsaXN0LT5uZGltZW5zaW9ucyk7 CisKKwkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5kaW1lbnNpb25zOyBp KyspCisJCXsKKwkJCWJvb2wgaXN2YXJsZW5hOworCisJCQlnZXRUeXBlT3V0 cHV0SW5mbyhnZXRfYXR0dHlwZShyZWxpZCwgc3Rha2V5cy0+dmFsdWVzW2ld KSwKKwkJCQkJCQkgICZvdXRmdW5jc1tpXSwgJmlzdmFybGVuYSk7CisKKwkJ CWZtZ3JfaW5mbyhvdXRmdW5jc1tpXSwgJmZtZ3JpbmZvW2ldKTsKKwkJfQor CisJCXNucHJpbnRmKHZhbHVlc1swXSwgNjQsICIlZCIsIGNhbGxfY250cik7 CS8qIGl0ZW0gSUQgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+ bmRpbWVuc2lvbnM7IGkrKykKKwkJeworCQkJRGF0dW0gdmFsLCB2YWxvdXQ7 CisKKwkJCWZvcm1hdCA9ICIlcywgJXMiOworCQkJaWYgKGkgPT0gMCkKKwkJ CQlmb3JtYXQgPSAieyVzJXMiOworCQkJZWxzZSBpZiAoaSA9PSBtY3ZsaXN0 LT5uZGltZW5zaW9ucy0xKQorCQkJCWZvcm1hdCA9ICIlcywgJXN9IjsKKwor CQkJaWYgKGl0ZW0tPmlzbnVsbFtpXSkKKwkJCQl2YWxvdXQgPSBDU3RyaW5n R2V0RGF0dW0oIk5VTEwiKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl2YWwgPSBp dGVtLT52YWx1ZXNbaV07CisJCQkJdmFsb3V0ID0gRnVuY3Rpb25DYWxsMSgm Zm1ncmluZm9baV0sIHZhbCk7CisJCQl9CisKKwkJCXNucHJpbnRmKGJ1ZmYs IDEwMjQsIGZvcm1hdCwgdmFsdWVzWzFdLCBEYXR1bUdldFBvaW50ZXIodmFs b3V0KSk7CisJCQlzdHJuY3B5KHZhbHVlc1sxXSwgYnVmZiwgMTAyMyk7CisJ CQlidWZmWzBdID0gJ1wwJzsKKworCQkJc25wcmludGYoYnVmZiwgMTAyNCwg Zm9ybWF0LCB2YWx1ZXNbMl0sIGl0ZW0tPmlzbnVsbFtpXSA/ICJ0IiA6ICJm Iik7CisJCQlzdHJuY3B5KHZhbHVlc1syXSwgYnVmZiwgMTAyMyk7CisJCQli dWZmWzBdID0gJ1wwJzsKKwkJfQorCisJCXNucHJpbnRmKHZhbHVlc1szXSwg NjQsICIlZiIsIGl0ZW0tPmZyZXF1ZW5jeSk7CS8qIGZyZXF1ZW5jeSAqLwor CisJCS8qIGJ1aWxkIGEgdHVwbGUgKi8KKwkJdHVwbGUgPSBCdWlsZFR1cGxl RnJvbUNTdHJpbmdzKGF0dGlubWV0YSwgdmFsdWVzKTsKKworCQkvKiBtYWtl IHRoZSB0dXBsZSBpbnRvIGEgZGF0dW0gKi8KKwkJcmVzdWx0ID0gSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpOworCisJCS8qIGNsZWFuIHVwICh0aGlzIGlz IG5vdCByZWFsbHkgbmVjZXNzYXJ5KSAqLworCQlwZnJlZSh2YWx1ZXNbMF0p OworCQlwZnJlZSh2YWx1ZXNbMV0pOworCQlwZnJlZSh2YWx1ZXNbMl0pOwor CQlwZnJlZSh2YWx1ZXNbM10pOworCisJCXBmcmVlKHZhbHVlcyk7CisKKwkJ U1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIHJlc3VsdCk7CisJfQorCWVsc2Ug ICAgLyogZG8gd2hlbiB0aGVyZSBpcyBubyBtb3JlIGxlZnQgKi8KKwl7CisJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9CmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCmluZGV4IDhjZTljMGUuLjJjMjJkMzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCkBAIC0yMTA5LDggKzIxMDksOSBAQCBkZXNjcmliZU9uZVRhYmxl RGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQl7CiAJCQlwcmlu dGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAgIlNFTEVDVCBvaWQsIHN0 YW5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlIEFTIG5zcCwgc3RhbmFtZSwgc3Rh a2V5cyxcbiIKLQkJCQkJCSAgICIgIGRlcHNfZW5hYmxlZCxcbiIKLQkJCQkJ CSAgICIgIGRlcHNfYnVpbHQsXG4iCisJCQkJCQkgICAiICBkZXBzX2VuYWJs ZWQsIG1jdl9lbmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19idWlsdCwg bWN2X2J1aWx0LFxuIgorCQkJCQkJICAgIiAgbWN2X21heF9pdGVtcyxcbiIK IAkJCQkJCSAgICIgIChTRUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1lOjp0ZXh0 LCcsICcpXG4iCiAJCQkJCQkgICAiICAgIEZST00gKChTRUxFQ1QgdW5uZXN0 KHN0YWtleXMpIEFTIGF0dG51bSkgc1xuIgogCQkJCQkJICAgIiAgICAgICAg IEpPSU4gcGdfYXR0cmlidXRlIGEgT04gKHN0YXJlbGlkID0gYS5hdHRyZWxp ZCBhbmQgYS5hdHRudW0gPSBzLmF0dG51bSkpKSBBUyBhdHRudW1zXG4iCkBA IC0yMTI4LDYgKzIxMjksOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhj b25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50VGFibGVBZGRGb290 ZXIoJmNvbnQsIF8oIlN0YXRpc3RpY3M6IikpOwogCQkJCWZvciAoaSA9IDA7 IGkgPCB0dXBsZXM7IGkrKykKIAkJCQl7CisJCQkJCWJvb2wgZmlyc3QgPSB0 cnVlOworCiAJCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICIgICAgIik7 CiAKIAkJCQkJLyogc3RhdGlzdGljcyBuYW1lIChxdWFsaWZpZWQgd2l0aCBu YW1lc3BhY2UpICovCkBAIC0yMTM3LDEwICsyMTQwLDIyIEBAIGRlc2NyaWJl T25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAKIAkJ CQkJLyogIG9wdGlvbnMgKi8KIAkJCQkJaWYgKCFzdHJjbXAoUFFnZXR2YWx1 ZShyZXN1bHQsIGksIDQpLCAidCIpKQotCQkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwgIihkZXBlbmRlbmNpZXMpIik7CisJCQkJCXsKKwkJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZidWYsICIoZGVwZW5kZW5jaWVzIik7CisJCQkJ CQlmaXJzdCA9IGZhbHNlOworCQkJCQl9CisKKwkJCQkJaWYgKCFzdHJjbXAo UFFnZXR2YWx1ZShyZXN1bHQsIGksIDUpLCAidCIpKQorCQkJCQl7CisJCQkJ CQlpZiAoISBmaXJzdCkKKwkJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVm LCAiLCBtY3YiKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRQUUV4cEJ1 ZmZlcigmYnVmLCAiKG1jdiIpOworCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJ CQkJfQogCi0JCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIgT04gKCVz KSIsCi0JCQkJCQkJUFFnZXR2YWx1ZShyZXN1bHQsIGksIDYpKTsKKwkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIikgT04gKCVzKSIsCisJCQkJCQkJ UFFnZXR2YWx1ZShyZXN1bHQsIGksIDkpKTsKIAogCQkJCQlwcmludFRhYmxl QWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CiAJCQkJfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKaW5kZXggYzc0 YWY0Ny4uMzUyOWIwMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19tdl9zdGF0aXN0aWMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX212X3N0YXRpc3RpYy5oCkBAIC0zOCwxNSArMzgsMjEgQEAgQ0FUQUxP RyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKIAogCS8qIHN0YXRpc3RpY3MgcmVx dWVzdGVkIHRvIGJ1aWxkICovCiAJYm9vbAkJZGVwc19lbmFibGVkOwkJLyog YW5hbHl6ZSBkZXBlbmRlbmNpZXM/ICovCisJYm9vbAkJbWN2X2VuYWJsZWQ7 CQkvKiBidWlsZCBNQ1YgbGlzdD8gKi8KKworCS8qIE1DViBzaXplICovCisJ aW50MzIJCW1jdl9tYXhfaXRlbXM7CQkvKiBtYXggTUNWIGl0ZW1zICovCiAK IAkvKiBzdGF0aXN0aWNzIHRoYXQgYXJlIGF2YWlsYWJsZSAoaWYgcmVxdWVz dGVkKSAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkJLyogZGVwZW5kZW5jaWVz IHdlcmUgYnVpbHQgKi8KKwlib29sCQltY3ZfYnVpbHQ7CQkJLyogTUNWIGxp c3Qgd2FzIGJ1aWx0ICovCiAKIAkvKiB2YXJpYWJsZS1sZW5ndGggZmllbGRz IHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIHN0 YWtleXMgKi8KIAlpbnQydmVjdG9yCXN0YWtleXM7CQkJLyogYXJyYXkgb2Yg Y29sdW1uIGtleXMgKi8KIAogI2lmZGVmIENBVEFMT0dfVkFSTEVOCiAJYnl0 ZWEJCXN0YWRlcHM7CQkJLyogZGVwZW5kZW5jaWVzIChzZXJpYWxpemVkKSAq LworCWJ5dGVhCQlzdGFtY3Y7CQkJCS8qIE1DViBsaXN0IChzZXJpYWxpemVk KSAqLwogI2VuZGlmCiAKIH0gRm9ybURhdGFfcGdfbXZfc3RhdGlzdGljOwpA QCAtNjIsMTQgKzY4LDE4IEBAIHR5cGVkZWYgRm9ybURhdGFfcGdfbXZfc3Rh dGlzdGljICpGb3JtX3BnX212X3N0YXRpc3RpYzsKICAqCQljb21waWxlciBj b25zdGFudHMgZm9yIHBnX212X3N0YXRpc3RpYwogICogLS0tLS0tLS0tLS0t LS0tLQogICovCi0jZGVmaW5lIE5hdHRzX3BnX212X3N0YXRpc3RpYwkJCQkJ OAorI2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTEyCiAjZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkCQkJMQogI2RlZmlu ZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lCQkJMgogI2RlZmluZSBB bnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lc3BhY2UJCTMKICNkZWZpbmUg QW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rhb3duZXIJCQk0CiAjZGVmaW5lIEFu dW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfZW5hYmxlZAkJNQotI2RlZmluZSBB bnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0CQkJNgotI2RlZmluZSBB bnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzCQkJNwotI2RlZmluZSBBbnVt X3BnX212X3N0YXRpc3RpY19zdGFkZXBzCQkJOAorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfZW5hYmxlZAkJNgorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfbWF4X2l0ZW1zCQk3CisjZGVmaW5lIEFudW1f cGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJCQk4CisjZGVmaW5lIEFudW1f cGdfbXZfc3RhdGlzdGljX21jdl9idWlsdAkJCTkKKyNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfc3Rha2V5cwkJCTEwCisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX3N0YWRlcHMJCQkxMQorI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFtY3YJCQkJMTIKIAogI2VuZGlmICAgLyogUEdfTVZf U1RBVElTVElDX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgK aW5kZXggZmYyZDc5Ny4uZjhjZWFiZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmgKQEAgLTI2NzAsNiArMjY3MCwxMCBAQCBEQVRBKGluc2Vy dCBPSUQgPSAzOTk4ICggIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZv ICAgICBQR05TUCBQR1VJRCAxMiAxIDAgMAogREVTQ1IoIm11bHRpdmFyaWF0 ZSBzdGF0czogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgaW5mbyIpOwogREFU QShpbnNlcnQgT0lEID0gMzk5OSAoICBwZ19tdl9zdGF0c19kZXBlbmRlbmNp ZXNfc2hvdyAgICAgUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQg ZiBpIHMgMSAwIDI1ICIxNyIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyBfbnVsbF8g X251bGxfIF9udWxsXyApKTsKIERFU0NSKCJtdWx0aXZhcmlhdGUgc3RhdHM6 IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIHNob3ciKTsKK0RBVEEoaW5zZXJ0 IE9JRCA9IDMzNzYgKCAgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvCVBHTlNQ IFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0IGYgaSBzIDEgMCAyNSAiMTci IF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGdfbXZfc3Rh dHNfbWN2bGlzdF9pbmZvIF9udWxsXyBfbnVsbF8gX251bGxfICkpOworREVT Q1IoIm11bHRpLXZhcmlhdGUgc3RhdGlzdGljczogTUNWIGxpc3QgaW5mbyIp OworREFUQShpbnNlcnQgT0lEID0gMzM3MyAoICBwZ19tdl9tY3ZfaXRlbXMg UEdOU1AgUEdVSUQgMTIgMSAxMDAwIDAgMCBmIGYgZiBmIHQgdCBpIHMgMSAw IDIyNDkgIjI2IiAiezI2LDIzLDEwMDksMTAwMCw3MDF9IiAie2ksbyxvLG8s b30iICJ7b2lkLGluZGV4LHZhbHVlcyxudWxscyxmcmVxdWVuY3l9IiBfbnVs bF8gX251bGxfIHBnX212X21jdl9pdGVtcyBfbnVsbF8gX251bGxfIF9udWxs XyApKTsKK0RFU0NSKCJkZXRhaWxzIGFib3V0IE1DViBsaXN0IGl0ZW1zIik7 CiAKIERBVEEoaW5zZXJ0IE9JRCA9IDE5MjggKCAgcGdfc3RhdF9nZXRfbnVt c2NhbnMJCQlQR05TUCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIHMg ciAxIDAgMjAgIjI2IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251 bGxfIHBnX3N0YXRfZ2V0X251bXNjYW5zIF9udWxsXyBfbnVsbF8gX251bGxf ICkpOwogREVTQ1IoInN0YXRpc3RpY3M6IG51bWJlciBvZiBzY2FucyBkb25l IGZvciB0YWJsZS9pbmRleCIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcmVsYXRpb24uaCBiL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9u LmgKaW5kZXggZTEwZGNmMS4uMmJjZDU4MiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9yZWxhdGlvbi5oCkBAIC02NTMsOSArNjUzLDExIEBAIHR5cGVkZWYgc3Ry dWN0IE1WU3RhdGlzdGljSW5mbwogCiAJLyogZW5hYmxlZCBzdGF0aXN0aWNz ICovCiAJYm9vbAkJZGVwc19lbmFibGVkOwkvKiBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcyBlbmFibGVkICovCisJYm9vbAkJbWN2X2VuYWJsZWQ7CS8qIE1D ViBsaXN0IGVuYWJsZWQgKi8KIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0 aXN0aWNzICovCiAJYm9vbAkJZGVwc19idWlsdDsJCS8qIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGJ1aWx0ICovCisJYm9vbAkJbWN2X2J1aWx0OwkJLyog TUNWIGxpc3QgYnVpbHQgKi8KIAogCS8qIGNvbHVtbnMgaW4gdGhlIHN0YXRp c3RpY3MgKGF0dG51bXMpICovCiAJaW50MnZlY3RvciAqc3Rha2V5czsJCS8q IGF0dG51bXMgb2YgdGhlIGNvbHVtbnMgY292ZXJlZCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvbXZzdGF0cy5oCmluZGV4IGM2ZjQ1YWIuLmNlN2MzYWQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9tdnN0YXRzLmgKQEAgLTUyLDMwICs1Miw4OSBAQCB0 eXBlZGVmIE1WRGVwZW5kZW5jaWVzRGF0YSogTVZEZXBlbmRlbmNpZXM7CiAj ZGVmaW5lIE1WU1RBVF9ERVBTX1RZUEVfQkFTSUMJMQkJCS8qIGJhc2ljIGRl cGVuZGVuY2llcyB0eXBlICovCiAKIC8qCisgKiBNdWx0aXZhcmlhdGUgTUNW IChtb3N0LWNvbW1vbiB2YWx1ZSkgbGlzdHMKKyAqCisgKiBBIHN0cmFpZ2h0 LWZvcndhcmQgZXh0ZW5zaW9uIG9mIE1DViBpdGVtcyAtIGkuZS4gYSBsaXN0 IChhcnJheSkgb2YKKyAqIGNvbWJpbmF0aW9ucyBvZiBhdHRyaWJ1dGUgdmFs dWVzLCB0b2dldGhlciB3aXRoIGEgZnJlcXVlbmN5IGFuZAorICogbnVsbCBm bGFncy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTUNWSXRlbURhdGEgeworCWRv dWJsZQkJZnJlcXVlbmN5OwkvKiBmcmVxdWVuY3kgb2YgdGhpcyBjb21iaW5h dGlvbiAqLworCWJvb2wJICAgKmlzbnVsbDsJCS8qIGxhZ3Mgb2YgTlVMTCB2 YWx1ZXMgKHVwIHRvIDMyIGNvbHVtbnMpICovCisJRGF0dW0JICAgKnZhbHVl czsJCS8qIHZhcmlhYmxlLWxlbmd0aCAobmRpbWVuc2lvbnMpICovCit9IE1D Vkl0ZW1EYXRhOworCit0eXBlZGVmIE1DVkl0ZW1EYXRhICpNQ1ZJdGVtOwor CisvKiBtdWx0aXZhcmlhdGUgTUNWIGxpc3QgLSBlc3NlbnRhbGx5IGFuIGFy cmF5IG9mIE1DViBpdGVtcyAqLwordHlwZWRlZiBzdHJ1Y3QgTUNWTGlzdERh dGEgeworCXVpbnQzMgkJbWFnaWM7CQkJLyogbWFnaWMgY29uc3RhbnQgbWFy a2VyICovCisJdWludDMyCQl0eXBlOwkJCS8qIHR5cGUgb2YgTUNWIGxpc3Qg KEJBU0lDKSAqLworCXVpbnQzMgkJbmRpbWVuc2lvbnM7CS8qIG51bWJlciBv ZiBkaW1lbnNpb25zICovCisJdWludDMyCQluaXRlbXM7CQkJLyogbnVtYmVy IG9mIE1DViBpdGVtcyBpbiB0aGUgYXJyYXkgKi8KKwlNQ1ZJdGVtCSAgICpp dGVtczsJCQkvKiBhcnJheSBvZiBNQ1YgaXRlbXMgKi8KK30gTUNWTGlzdERh dGE7CisKK3R5cGVkZWYgTUNWTGlzdERhdGEgKk1DVkxpc3Q7CisKKy8qIHVz ZWQgdG8gZmxhZyBzdGF0cyBzZXJpYWxpemVkIHRvIGJ5dGVhICovCisjZGVm aW5lIE1WU1RBVF9NQ1ZfTUFHSUMJCTB4RTFBNjUxQzIJLyogbWFya3Mgc2Vy aWFsaXplZCBieXRlYSAqLworI2RlZmluZSBNVlNUQVRfTUNWX1RZUEVfQkFT SUMJMQkJCS8qIGJhc2ljIE1DViBsaXN0IHR5cGUgKi8KKworLyoKKyAqIExp bWl0cyB1c2VkIGZvciBtY3ZfbWF4X2l0ZW1zIG9wdGlvbiwgaS5lLiB3ZSdy ZSBhbHdheXMgZ3VhcmFudGVlZAorICogdG8gaGF2ZSBzcGFjZSBmb3IgYXQg bGVhc3QgTVZTVEFUX01DVkxJU1RfTUlOX0lURU1TLCBhbmQgd2UgY2Fubm90 CisgKiBoYXZlIG1vcmUgdGhhbiBNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMg aXRlbXMuCisgKgorICogVGhpcyBpcyBqdXN0IGEgYm91bmRhcnkgZm9yIHRo ZSAnbWF4JyB0aHJlc2hvbGQgLSB0aGUgYWN0dWFsIGxpc3QKKyAqIG1heSBv ZiBjb3Vyc2UgY29udGFpbiBsZXNzIGl0ZW1zIHRoYW4gTVZTVEFUX01DVkxJ U1RfTUlOX0lURU1TLgorICovCisjZGVmaW5lIE1WU1RBVF9NQ1ZMSVNUX01J Tl9JVEVNUwkxMjgJCS8qIG1pbiBpdGVtcyBpbiBNQ1YgbGlzdCAqLworI2Rl ZmluZSBNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMJODE5MgkvKiBtYXggaXRl bXMgaW4gTUNWIGxpc3QgKi8KKworLyoKICAqIFRPRE8gTWF5YmUgZmV0Y2hp bmcgdGhlIGhpc3RvZ3JhbS9NQ1YgbGlzdCBzZXBhcmF0ZWx5IGlzIGluZWZm aWNpZW50PwogICogICAgICBDb25zaWRlciBhZGRpbmcgYSBzaW5nbGUgYGZl dGNoX3N0YXRzYCBtZXRob2QsIGZldGNoaW5nIGFsbAogICogICAgICBzdGF0 cyBzcGVjaWZpZWQgdXNpbmcgZmxhZ3MgKG9yIHNvbWV0aGluZyBsaWtlIHRo YXQpLgogICovCiAKIE1WRGVwZW5kZW5jaWVzIGxvYWRfbXZfZGVwZW5kZW5j aWVzKE9pZCBtdm9pZCk7CitNQ1ZMaXN0ICAgICAgICBsb2FkX212X21jdmxp c3QoT2lkIG12b2lkKTsKIAogYnl0ZWEgKiBzZXJpYWxpemVfbXZfZGVwZW5k ZW5jaWVzKE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcyk7CitieXRlYSAq IHNlcmlhbGl6ZV9tdl9tY3ZsaXN0KE1DVkxpc3QgbWN2bGlzdCwgaW50MnZl Y3RvciAqYXR0cnMsCisJCQkJCQkJIFZhY0F0dHJTdGF0cyAqKnN0YXRzKTsK IAogLyogZGVzZXJpYWxpemF0aW9uIG9mIHN0YXRzIChzZXJpYWxpemF0aW9u IGlzIHByaXZhdGUgdG8gYW5hbHl6ZSkgKi8KIE1WRGVwZW5kZW5jaWVzCWRl c2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhieXRlYSAqIGRhdGEpOworTUNW TGlzdAkJCWRlc2VyaWFsaXplX212X21jdmxpc3QoYnl0ZWEgKiBkYXRhKTsK KworLyoKKyAqIFJldHVybnMgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSBudW1i ZXIgd2l0aGluIHRoZSB2ZWN0b3IgKGkuZS4gYQorICogZGltZW5zaW9uIHdp dGhpbiB0aGUgc3RhdHMpLgorICovCitpbnQgbXZfZ2V0X2luZGV4KEF0dHJO dW1iZXIgdmFyYXR0bm8sIGludDJ2ZWN0b3IgKiBzdGFrZXlzKTsKKworaW50 MnZlY3RvciogZmluZF9tdl9hdHRudW1zKE9pZCBtdm9pZCwgT2lkICpyZWxp ZCk7CiAKIC8qIEZJWE1FIHRoaXMgcHJvYmFibHkgYmVsb25ncyBzb21ld2hl cmUgZWxzZSAobm90IHRvIG9wZXJhdGlvbnMgc3RhdHMpICovCiBleHRlcm4g RGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8oUEdfRlVOQ1RJ T05fQVJHUyk7CiBleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5j aWVzX3Nob3coUEdfRlVOQ1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0gcGdf bXZfc3RhdHNfbWN2bGlzdF9pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0 ZXJuIERhdHVtIHBnX212X21jdmxpc3RfaXRlbXMoUEdfRlVOQ1RJT05fQVJH Uyk7CiAKIE1WRGVwZW5kZW5jaWVzCi1idWlsZF9tdl9kZXBlbmRlbmNpZXMo aW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKLQkJCQkJCQkJICBpbnQy dmVjdG9yICphdHRycywKLQkJCQkJCQkJICBWYWNBdHRyU3RhdHMgKipzdGF0 cyk7CitidWlsZF9tdl9kZXBlbmRlbmNpZXMoaW50IG51bXJvd3MsIEhlYXBU dXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCSAgVmFjQXR0 clN0YXRzICoqc3RhdHMpOworCitNQ1ZMaXN0CitidWlsZF9tdl9tY3ZsaXN0 KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0 dHJzLAorCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50ICpudW1yb3dz X2ZpbHRlcmVkKTsKIAogdm9pZCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBv bmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCi0JCQkJCQkg ICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CisJ CQkJCWludCBuYXR0cywgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKTsK IAotdm9pZCB1cGRhdGVfbXZfc3RhdHMoT2lkIHJlbGlkLCBNVkRlcGVuZGVu Y2llcyBkZXBlbmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0dHJzKTsKK3ZvaWQg dXBkYXRlX212X3N0YXRzKE9pZCByZWxpZCwgTVZEZXBlbmRlbmNpZXMgZGVw ZW5kZW5jaWVzLCBNQ1ZMaXN0IG1jdmxpc3QsCisJCQkJCSBpbnQydmVjdG9y ICphdHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMpOwogCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZfbWN2Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZfbWN2Lm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUzMjBiCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9t Y3Yub3V0CkBAIC0wLDAgKzEsMjA3IEBACistLSBkYXRhIHR5cGUgcGFzc2Vk IGJ5IHZhbHVlCitDUkVBVEUgVEFCTEUgbWN2X2xpc3QgKAorICAgIGEgSU5U LAorICAgIGIgSU5ULAorICAgIGMgSU5UCispOworLS0gdW5rbm93biBjb2x1 bW4KK0NSRUFURSBTVEFUSVNUSUNTIHM0IE9OIG1jdl9saXN0ICh1bmtub3du X2NvbHVtbikgV0lUSCAobWN2KTsKK0VSUk9SOiAgY29sdW1uICJ1bmtub3du X2NvbHVtbiIgcmVmZXJlbmNlZCBpbiBzdGF0aXN0aWNzIGRvZXMgbm90IGV4 aXN0CistLSBzaW5nbGUgY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzNCBP TiBtY3ZfbGlzdCAoYSkgV0lUSCAobWN2KTsKK0VSUk9SOiAgbXVsdGl2YXJp YXRlIHN0YXRzIHJlcXVpcmUgMiBvciBtb3JlIGNvbHVtbnMKKy0tIHNpbmds ZSBjb2x1bW4sIGR1cGxpY2F0ZWQKK0NSRUFURSBTVEFUSVNUSUNTIHM0IE9O IG1jdl9saXN0IChhLCBhKSBXSVRIIChtY3YpOworRVJST1I6ICBkdXBsaWNh dGUgY29sdW1uIG5hbWUgaW4gc3RhdGlzdGljcyBkZWZpbml0aW9uCistLSB0 d28gY29sdW1ucywgb25lIGR1cGxpY2F0ZWQKK0NSRUFURSBTVEFUSVNUSUNT IHM0IE9OIG1jdl9saXN0IChhLCBhLCBiKSBXSVRIIChtY3YpOworRVJST1I6 ICBkdXBsaWNhdGUgY29sdW1uIG5hbWUgaW4gc3RhdGlzdGljcyBkZWZpbml0 aW9uCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczQg T04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKHVua25vd25fb3B0aW9uKTsK K0VSUk9SOiAgdW5yZWNvZ25pemVkIFNUQVRJU1RJQ1Mgb3B0aW9uICJ1bmtu b3duX29wdGlvbiIKKy0tIG1pc3NpbmcgTUNWIHN0YXRpc3RpY3MKK0NSRUFU RSBTVEFUSVNUSUNTIHM0IE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIIChk ZXBlbmRlbmNpZXMsIG1heF9tY3ZfaXRlbXM9MjAwKTsKK0VSUk9SOiAgb3B0 aW9uICdtY3YnIGlzIHJlcXVpcmVkIGJ5IG90aGVyIG9wdGlvbnMocykKKy0t IGludmFsaWQgbWN2X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBsb3cKK0NSRUFU RSBTVEFUSVNUSUNTIHM0IE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIICht Y3YsIG1heF9tY3ZfaXRlbXM9MTApOworRVJST1I6ICBtYXggbnVtYmVyIG9m IE1DViBpdGVtcyBtdXN0IGJlIGF0IGxlYXN0IDEyOAorLS0gaW52YWxpZCBt Y3ZfbWF4X2l0ZW1zIHZhbHVlIC8gdG9vIGhpZ2gKK0NSRUFURSBTVEFUSVNU SUNTIHM0IE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIIChtY3YsIG1heF9t Y3ZfaXRlbXM9MTAwMDApOworRVJST1I6ICBtYXggbnVtYmVyIG9mIE1DViBp dGVtcyBpcyA4MTkyCistLSBjb3JyZWN0IGNvbW1hbmQKK0NSRUFURSBTVEFU SVNUSUNTIHM0IE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIIChtY3YpOwor LS0gcmFuZG9tIGRhdGEKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNF TEVDVCBtb2QoaSwgMTExKSwgbW9kKGksIDEyMyksIG1vZChpLCAyMykgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2 X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZf c3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsK KyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxp c3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IGYgICAgICAgICB8 IAorKDEgcm93KQorCitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwg YSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNF TEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2 X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZv KHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVs aWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1j dl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgICB8IHQgICAgICAgICB8IG5pdGVtcz0xMDAwCisoMSBy b3cpCisKK1RSVU5DQVRFIG1jdl9saXN0OworLS0gYSA9PiBiLCBhID0+IGMK K0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzE1 MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsK K0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9i dWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3Qn OjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8 IHQgICAgICAgICB8IG5pdGVtcz0xMDAwCisoMSByb3cpCisKK1RSVU5DQVRF IG1jdl9saXN0OworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBp bmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRP IG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwMDAwLCBpLzIwMDAwLCBpLzQw MDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0NS RUFURSBJTkRFWCBtY3ZfaWR4IE9OIG1jdl9saXN0IChhLCBiKTsKK0FOQUxZ WkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwg cGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19t dl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdj bGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRz X21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAg ICAgICB8IG5pdGVtcz0xMDAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMg b2ZmKQorIFNFTEVDVCAqIEZST00gbWN2X2xpc3QgV0hFUkUgYSA9IDEwIEFO RCBiID0gNTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gbWN2X2xpc3QKKyAg IFJlY2hlY2sgQ29uZDogKChhID0gMTApIEFORCAoYiA9IDUpKQorICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIG1jdl9pZHgKKyAgICAgICAgIEluZGV4 IENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkKKyg0IHJvd3MpCisKK0RS T1AgVEFCTEUgbWN2X2xpc3Q7CistLSB2YXJsZW5hIHR5cGUgKHRleHQpCitD UkVBVEUgVEFCTEUgbWN2X2xpc3QgKAorICAgIGEgVEVYVCwKKyAgICBiIFRF WFQsCisgICAgYyBURVhUCispOworQ1JFQVRFIFNUQVRJU1RJQ1MgczUgT04g bWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKG1jdik7CistLSByYW5kb20gZGF0 YQorSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIG1vZChpLCAx MTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtY3ZfbGlzdDsKK1NFTEVD VCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0 X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBz dGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOworIG1jdl9lbmFibGVk IHwgbWN2X2J1aWx0IHwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvIAorLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgIHwgZiAgICAgICAgIHwgCisoMSByb3cpCisK K1RSVU5DQVRFIG1jdl9saXN0OworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4g YworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAsIGkv MTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkp OworQU5BTFlaRSBtY3ZfbGlzdDsKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2 X2J1aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBG Uk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlz dCc6OnJlZ2NsYXNzOworIG1jdl9lbmFibGVkIHwgbWN2X2J1aWx0IHwgcGdf bXZfc3RhdHNfbWN2bGlzdF9pbmZvIAorLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg IHwgdCAgICAgICAgIHwgbml0ZW1zPTEwMDAKKygxIHJvdykKKworVFJVTkNB VEUgbWN2X2xpc3Q7CistLSBhID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8g bWN2X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtY3Zf bGlzdDsKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9z dGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0YXRp c3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOwor IG1jdl9lbmFibGVkIHwgbWN2X2J1aWx0IHwgcGdfbXZfc3RhdHNfbWN2bGlz dF9pbmZvIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgIHwgdCAgICAgICAgIHwg bml0ZW1zPTEwMDAKKygxIHJvdykKKworVFJVTkNBVEUgbWN2X2xpc3Q7Cist LSBjaGVjayBleHBsYWluIChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5v dCBwbGFpbiBpbmRleCBzY2FuKQorSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAg ICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVYIG1j dl9pZHggT04gbWN2X2xpc3QgKGEsIGIpOworQU5BTFlaRSBtY3ZfbGlzdDsK K1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0c19t Y3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOworIG1jdl9l bmFibGVkIHwgbWN2X2J1aWx0IHwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZv IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQgICAgICAgICAgIHwgdCAgICAgICAgIHwgbml0ZW1z PTEwMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNU ICogRlJPTSBtY3ZfbGlzdCBXSEVSRSBhID0gJzEwJyBBTkQgYiA9ICc1JzsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhl YXAgU2NhbiBvbiBtY3ZfbGlzdAorICAgUmVjaGVjayBDb25kOiAoKGEgPSAn MTAnOjp0ZXh0KSBBTkQgKGIgPSAnNSc6OnRleHQpKQorICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIG1jdl9pZHgKKyAgICAgICAgIEluZGV4IENvbmQ6 ICgoYSA9ICcxMCc6OnRleHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkpCisoNCBy b3dzKQorCitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGNoZWNrIGV4cGxhaW4g KGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNj YW4pIHdpdGggTlVMTHMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNF TEVDVAorICAgICAgIChDQVNFIFdIRU4gaS8xMDAwMCA9IDAgVEhFTiBOVUxM IEVMU0UgaS8xMDAwMCBFTkQpLAorICAgICAgIChDQVNFIFdIRU4gaS8yMDAw MCA9IDAgVEhFTiBOVUxMIEVMU0UgaS8yMDAwMCBFTkQpLAorICAgICAgIChD QVNFIFdIRU4gaS80MDAwMCA9IDAgVEhFTiBOVUxMIEVMU0UgaS80MDAwMCBF TkQpCisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhp KTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1j dl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAg RlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xp c3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg ICB8IHQgICAgICAgICB8IG5pdGVtcz0xMDAKKygxIHJvdykKKworRVhQTEFJ TiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gbWN2X2xpc3QgV0hFUkUg YSBJUyBOVUxMIEFORCBiIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJp dG1hcCBIZWFwIFNjYW4gb24gbWN2X2xpc3QKKyAgIFJlY2hlY2sgQ29uZDog KChhIElTIE5VTEwpIEFORCAoYiBJUyBOVUxMKSkKKyAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAgICBJbmRleCBDb25kOiAo KGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQorKDQgcm93cykKKworRFJP UCBUQUJMRSBtY3ZfbGlzdDsKKy0tIE5VTEwgdmFsdWVzIChtaXggb2YgaW50 IGFuZCB0ZXh0IGNvbHVtbnMpCitDUkVBVEUgVEFCTEUgbWN2X2xpc3QgKAor ICAgIGEgSU5ULAorICAgIGIgVEVYVCwKKyAgICBjIElOVCwKKyAgICBkIFRF WFQKKyk7CitDUkVBVEUgU1RBVElTVElDUyBzNiBPTiBtY3ZfbGlzdCAoYSwg YiwgYywgZCkgV0lUSCAobWN2KTsKK0lOU0VSVCBJTlRPIG1jdl9saXN0Cisg ICAgIFNFTEVDVAorICAgICAgICAgbW9kKGksIDEwMCksCisgICAgICAgICAo Q0FTRSBXSEVOIG1vZChpLCAyMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2Qo aSwyMDApIEVORCksCisgICAgICAgICBtb2QoaSwgNDAwKSwKKyAgICAgICAg IChDQVNFIFdIRU4gbW9kKGksIDMwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1v ZChpLDYwMCkgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwKSBzKGkpOworQU5BTFlaRSBtY3ZfbGlzdDsKK1NFTEVDVCBtY3ZfZW5h YmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3Rh bWN2KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOworIG1jdl9lbmFibGVkIHwgbWN2X2J1 aWx0IHwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvIAorLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgIHwgdCAgICAgICAgIHwgbml0ZW1zPTEyMDAKKygxIHJvdykK KworRFJPUCBUQUJMRSBtY3ZfbGlzdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggMDZmMjIzMS4uM2Q1NWZmZSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQK QEAgLTEzNzMsNyArMTM3Myw5IEBAIHBnX212X3N0YXRzfCBTRUxFQ1Qgbi5u c3BuYW1lIEFTIHNjaGVtYW5hbWUsCiAgICAgcy5zdGFuYW1lLAogICAgIHMu c3Rha2V5cyBBUyBhdHRudW1zLAogICAgIGxlbmd0aChzLnN0YWRlcHMpIEFT IGRlcHNieXRlcywKLSAgICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5m byhzLnN0YWRlcHMpIEFTIGRlcHNpbmZvCisgICAgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX2luZm8ocy5zdGFkZXBzKSBBUyBkZXBzaW5mbywKKyAgICBs ZW5ndGgocy5zdGFtY3YpIEFTIG1jdmJ5dGVzLAorICAgIHBnX212X3N0YXRz X21jdmxpc3RfaW5mbyhzLnN0YW1jdikgQVMgbWN2aW5mbwogICAgRlJPTSAo KHBnX212X3N0YXRpc3RpYyBzCiAgICAgIEpPSU4gcGdfY2xhc3MgYyBPTiAo KGMub2lkID0gcy5zdGFyZWxpZCkpKQogICAgICBMRUZUIEpPSU4gcGdfbmFt ZXNwYWNlIG4gT04gKChuLm9pZCA9IGMucmVsbmFtZXNwYWNlKSkpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBi L3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggNGYy ZmZiOC4uODVkOTRmMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFs bGVsX3NjaGVkdWxlCkBAIC0xMTIsNCArMTEyLDQgQEAgdGVzdDogZXZlbnRf dHJpZ2dlcgogdGVzdDogc3RhdHMKIAogIyBydW4gdGVzdHMgb2YgbXVsdGl2 YXJpYXRlIHN0YXRzCi10ZXN0OiBtdl9kZXBlbmRlbmNpZXMKK3Rlc3Q6IG12 X2RlcGVuZGVuY2llcyBtdl9tY3YKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJp YWxfc2NoZWR1bGUKaW5kZXggMDk3YTA0Zi4uNjU4NGQ3MyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKQEAgLTE2MywzICsxNjMs NCBAQCB0ZXN0OiB4bWwKIHRlc3Q6IGV2ZW50X3RyaWdnZXIKIHRlc3Q6IHN0 YXRzCiB0ZXN0OiBtdl9kZXBlbmRlbmNpZXMKK3Rlc3Q6IG12X21jdgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfbWN2LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL212X21jdi5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxZDMyZAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X21jdi5zcWwKQEAgLTAsMCAr MSwxNzggQEAKKy0tIGRhdGEgdHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFU RSBUQUJMRSBtY3ZfbGlzdCAoCisgICAgYSBJTlQsCisgICAgYiBJTlQsCisg ICAgYyBJTlQKKyk7CisKKy0tIHVua25vd24gY29sdW1uCitDUkVBVEUgU1RB VElTVElDUyBzNCBPTiBtY3ZfbGlzdCAodW5rbm93bl9jb2x1bW4pIFdJVEgg KG1jdik7CisKKy0tIHNpbmdsZSBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNT IHM0IE9OIG1jdl9saXN0IChhKSBXSVRIIChtY3YpOworCistLSBzaW5nbGUg Y29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzNCBPTiBt Y3ZfbGlzdCAoYSwgYSkgV0lUSCAobWN2KTsKKworLS0gdHdvIGNvbHVtbnMs IG9uZSBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzNCBPTiBtY3Zf bGlzdCAoYSwgYSwgYikgV0lUSCAobWN2KTsKKworLS0gdW5rbm93biBvcHRp b24KK0NSRUFURSBTVEFUSVNUSUNTIHM0IE9OIG1jdl9saXN0IChhLCBiLCBj KSBXSVRIICh1bmtub3duX29wdGlvbik7CisKKy0tIG1pc3NpbmcgTUNWIHN0 YXRpc3RpY3MKK0NSRUFURSBTVEFUSVNUSUNTIHM0IE9OIG1jdl9saXN0IChh LCBiLCBjKSBXSVRIIChkZXBlbmRlbmNpZXMsIG1heF9tY3ZfaXRlbXM9MjAw KTsKKworLS0gaW52YWxpZCBtY3ZfbWF4X2l0ZW1zIHZhbHVlIC8gdG9vIGxv dworQ1JFQVRFIFNUQVRJU1RJQ1MgczQgT04gbWN2X2xpc3QgKGEsIGIsIGMp IFdJVEggKG1jdiwgbWF4X21jdl9pdGVtcz0xMCk7CisKKy0tIGludmFsaWQg bWN2X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUgU1RBVElT VElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2LCBtYXhf bWN2X2l0ZW1zPTEwMDAwKTsKKworLS0gY29ycmVjdCBjb21tYW5kCitDUkVB VEUgU1RBVElTVElDUyBzNCBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAo bWN2KTsKKworLS0gcmFuZG9tIGRhdGEKK0lOU0VSVCBJTlRPIG1jdl9saXN0 CisgICAgIFNFTEVDVCBtb2QoaSwgMTExKSwgbW9kKGksIDEyMyksIG1vZChp LCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKKwor QU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3Zf YnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0 Jzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIG1jdl9saXN0OworCistLSBhID0+ IGIsIGEgPT4gYywgYiA9PiBjCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAg ICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbWN2X2xpc3Q7CisKK1NF TEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBwZ19tdl9zdGF0c19tY3Zs aXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVS RSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2NsYXNzOworCitUUlVOQ0FU RSBtY3ZfbGlzdDsKKworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRP IG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKKworQU5BTFlaRSBt Y3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZf c3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xh c3M7CisKK1RSVU5DQVRFIG1jdl9saXN0OworCistLSBjaGVjayBleHBsYWlu IChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBz Y2FuKQorSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAw MDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVYIG1jdl9pZHggT04gbWN2X2xp c3QgKGEsIGIpOworCitBTkFMWVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2 X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZv KHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVs aWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMg b2ZmKQorIFNFTEVDVCAqIEZST00gbWN2X2xpc3QgV0hFUkUgYSA9IDEwIEFO RCBiID0gNTsKKworRFJPUCBUQUJMRSBtY3ZfbGlzdDsKKworLS0gdmFybGVu YSB0eXBlICh0ZXh0KQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBh IFRFWFQsCisgICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKKworQ1JFQVRF IFNUQVRJU1RJQ1MgczUgT04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKG1j dik7CisKKy0tIHJhbmRvbSBkYXRhCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAor ICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwg MjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FO QUxZWkUgbWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1 aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9N IHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6 OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gYSA9PiBi LCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAg U0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIG1jdl9saXN0OworCitTRUxF Q1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlz dF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUg c3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworVFJVTkNBVEUg bWN2X2xpc3Q7CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBt Y3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG1jdl9s aXN0OworCitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZf c3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsK KworVFJVTkNBVEUgbWN2X2xpc3Q7CisKKy0tIGNoZWNrIGV4cGxhaW4gKGV4 cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4p CitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMDAwMCwg aS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MDApIHMoaSk7CitDUkVBVEUgSU5ERVggbWN2X2lkeCBPTiBtY3ZfbGlzdCAo YSwgYik7CitBTkFMWVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2X2VuYWJs ZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1j dikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn bWN2X2xpc3QnOjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQor IFNFTEVDVCAqIEZST00gbWN2X2xpc3QgV0hFUkUgYSA9ICcxMCcgQU5EIGIg PSAnNSc7CisKK1RSVU5DQVRFIG1jdl9saXN0OworCistLSBjaGVjayBleHBs YWluIChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRl eCBzY2FuKSB3aXRoIE5VTExzCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAg ICBTRUxFQ1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAwIFRIRU4g TlVMTCBFTFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVOIGkv MjAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwKKyAgICAg ICAoQ0FTRSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvNDAw MDAgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDAp IHMoaSk7CitBTkFMWVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2X2VuYWJs ZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1j dikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn bWN2X2xpc3QnOjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQor IFNFTEVDVCAqIEZST00gbWN2X2xpc3QgV0hFUkUgYSBJUyBOVUxMIEFORCBi IElTIE5VTEw7CisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7CisKKy0tIE5VTEwg dmFsdWVzIChtaXggb2YgaW50IGFuZCB0ZXh0IGNvbHVtbnMpCitDUkVBVEUg VEFCTEUgbWN2X2xpc3QgKAorICAgIGEgSU5ULAorICAgIGIgVEVYVCwKKyAg ICBjIElOVCwKKyAgICBkIFRFWFQKKyk7CisKK0NSRUFURSBTVEFUSVNUSUNT IHM2IE9OIG1jdl9saXN0IChhLCBiLCBjLCBkKSBXSVRIIChtY3YpOworCitJ TlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QKKyAgICAgICAgIG1v ZChpLCAxMDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMjAwKSA9 IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksMjAwKSBFTkQpLAorICAgICAgICAg bW9kKGksIDQwMCksCisgICAgICAgICAoQ0FTRSBXSEVOIG1vZChpLCAzMDAp ID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSw2MDApIEVORCkKKyAgICAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKKworQU5BTFlaRSBt Y3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZf c3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xh c3M7CisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7Ci0tIAoyLjUuMAoK --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename="0003-clause-reduction-using-functional-dependencies.patch" Content-Type: text/x-patch; name="0003-clause-reduction-using-functional-dependencies.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA3MGNmOGVkOWYwZDE2MWEzMzViZTFlNzJhMjVmMzI1MjYxZWE5ZTQ2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE5 OjQyOjE4ICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzldIGNsYXVzZSByZWR1 Y3Rpb24gdXNpbmcgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkR1cmluZyBw bGFubmluZywgdXNlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIHRvIGRlY2lk ZSB3aGljaCBjbGF1c2VzIHRvCnNraXAgZHVyaW5nIGNhcmRpbmFsaXR5IGVz dGltYXRpb24uIEluaXRpYWwgYW5kIHJhdGhlciBzaW1wbGlzdGljCmltcGxl bWVudGF0aW9uLgoKVGhpcyBvbmx5IHdvcmtzIHdpdGggcmVndWxhciBXSEVS RSBjbGF1c2VzLCBub3QgY2xhdXNlcyB1c2VkIGZvciBqb2luCmNsYXVzZXMu CgpOb3RlOiBUaGUgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoKSBuZWVkcyB0 byBpZGVudGlmeSB0aGUgcmVsYXRpb24gKHNvCnRoYXQgd2UgY2FuIGZldGNo IHRoZSBsaXN0IG9mIG11bHRpdmFyaWF0ZSBzdGF0cyBieSBPSUQpLgpwbGFu bmVyX3J0X2ZldGNoKCkgc2VlbXMgbGlrZSB0aGUgYXBwcm9wcmlhdGUgd2F5 IHRvIGdldCB0aGUgcmVsYXRpb24KT0lELCBidXQgYXBwYXJlbnRseSBpdCBv bmx5IHdvcmtzIHdpdGggc2ltcGxlIHZhcnMuIE1heWJlCmV4YW1pbmVfdmFy aWFibGUoKSB3b3VsZCBtYWtlIHRoaXMgd29yayB3aXRoIG1vcmUgY29tcGxl eCB2YXJzIHRvbz8KCkluY2x1ZGVzIHJlZ3Jlc3Npb24gdGVzdHMgYW5hbHl6 aW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIChwYXJ0IG9mCkFOQUxZWkUp IG9uIHNldmVyYWwgZGF0YXNldHMgKG5vIGRlcGVuZGVuY2llcywgbm8gdHJh bnNpdGl2ZQpkZXBlbmRlbmNpZXMsIC4uLikuCgpDaGVja3MgdGhhdCBhIHF1 ZXJ5IHdpdGggY29uZGl0aW9ucyBvbiB0d28gY29sdW1ucywgd2hlcmUgb25l IChCKSBpcwpmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIHRoZSBvdGhlciBv bmUgKEEpLCBjb3JyZWN0bHkgaWdub3JlcyB0aGUKY2xhdXNlIG9uIChCKSBh bmQgY2hvb3NlcyBiaXRtYXAgaW5kZXggc2NhbiBpbnN0ZWFkIG9mIHBsYWlu IGluZGV4IHNjYW4KKHdoaWNoIGlzIHdoYXQgaGFwcGVucyBvdGhlcndpc2Us IHRoYW5rcyB0byBhc3N1bXB0aW9uIG9mCmluZGVwZW5kZW5jZSkuCgpOb3Rl OiBGdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBvbmx5IHdvcmsgd2l0aCBlcXVh bGl0eSBjbGF1c2VzLCBubwppbmVxdWFsaXRpZXMgZXRjLgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICAgICAgICB8IDUw NSArKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9SRUFETUUuZGVwZW5kZW5jaWVzIHwgIDYzICstLQogc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgICAgICAgIHwgIDM2ICsrCiBz cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jICAgICAgICAgICAg fCAgMjUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmgg ICAgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2RlcGVuZGVuY2llcy5jICAgICAgfCA3NzUgKysrKysrKysrKysrKysrKyst LS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaCAgICAgICAg ICAgICAgICAgICB8ICAyMSArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9tdl9kZXBlbmRlbmNpZXMub3V0IHwgMTcyICsrKysrKwogc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwgICAzICsK IHNyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlICAgICAgICAgICAg ICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9kZXBlbmRlbmNp ZXMuc3FsICAgICAgfCAxNTAgKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDE0 NTcgaW5zZXJ0aW9ucygrKSwgMjk3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0 YXRzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfZGVwZW5kZW5jaWVzLnNxbAoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNl bC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMK aW5kZXggMDI2NjBjMi4uNWFiN2YxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKQEAgLTE0LDE0ICsxNCwx OSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUg ImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGlt aXplci92YXIuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL212 c3RhdHMuaCIKICNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgorI2luY2x1 ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKIAogLyoKQEAgLTQxLDYgKzQ2LDI1 IEBAIHR5cGVkZWYgc3RydWN0IFJhbmdlUXVlcnlDbGF1c2UKIHN0YXRpYyB2 b2lkIGFkZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxpc3Qs IE5vZGUgKmNsYXVzZSwKIAkJCSAgIGJvb2wgdmFyb25sZWZ0LCBib29sIGlz TFRzZWwsIFNlbGVjdGl2aXR5IHMyKTsKIAorI2RlZmluZQkJTVZfQ0xBVVNF X1RZUEVfRkRFUAkJMHgwMQorCitzdGF0aWMgYm9vbCBjbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBBdHRyTnVt YmVyICphdHRudW0pOworCitzdGF0aWMgQml0bWFwc2V0ICAqY29sbGVjdF9t dl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKKworc3Rh dGljIGludCBjb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4 IHJlbGlkKTsKKworc3RhdGljIGludCBjb3VudF92YXJub3MoTGlzdCAqY2xh dXNlcywgSW5kZXggKnJlbGlkKTsKKworc3RhdGljIExpc3QgKmNsYXVzZWxp c3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpjbGF1c2VzLAorCQkJCQkJCQkJSW5kZXggcmVsaWQsIExpc3QgKnN0YXRz KTsKKworc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBpbnQg dHlwZSk7CisKK3N0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVySW5m byAqcm9vdCwgSW5kZXggcmVsaWQpOworCitzdGF0aWMgYm9vbCBzdGF0c190 eXBlX21hdGNoZXMoTVZTdGF0aXN0aWNJbmZvICpzdGF0LCBpbnQgdHlwZSk7 CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlS T1VUSU5FUyBUTyBDT01QVVRFIFNFTEVDVElWSVRJRVMKQEAgLTYwLDcgKzg0 LDE5IEBAIHN0YXRpYyB2b2lkIGFkZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlD bGF1c2UgKipycWxpc3QsIE5vZGUgKmNsYXVzZSwKICAqIHN1YmNsYXVzZXMu ICBIb3dldmVyLCB0aGF0J3Mgb25seSByaWdodCBpZiB0aGUgc3ViY2xhdXNl cyBoYXZlIGluZGVwZW5kZW50CiAgKiBwcm9iYWJpbGl0aWVzLCBhbmQgaW4g cmVhbGl0eSB0aGV5IGFyZSBvZnRlbiBOT1QgaW5kZXBlbmRlbnQuICBTbywK ICAqIHdlIHdhbnQgdG8gYmUgc21hcnRlciB3aGVyZSB3ZSBjYW4uCi0KKyAq CisgKiBUaGUgZmlyc3QgdGhpbmcgd2UgdHJ5IHRvIGRvIGlzIGFwcGx5aW5n IG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzLCBpbiBhIHdheQorICogdGhhdCBp bnRlbmRzIHRvIG1pbmltaXplIHRoZSBvdmVyaGVhZCB3aGVuIHRoZXJlIGFy ZSBubyBtdWx0aXZhcmlhdGUgc3RhdHMKKyAqIG9uIHRoZSByZWxhdGlvbi4g VGh1cyB3ZSBkbyBzZXZlcmFsIHNpbXBsZSAoYW5kIGluZXhwZW5zaXZlKSBj aGVja3MgZmlyc3QsCisgKiB0byB2ZXJpZnkgdGhhdCBzdWl0YWJsZSBtdWx0 aXZhcmlhdGUgc3RhdGlzdGljcyBleGlzdC4KKyAqCisgKiBJZiB3ZSBpZGVu dGlmeSBzdWNoIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIGFwcGx5LCB3ZSB0 cnkgdG8gYXBwbHkgdGhlbS4KKyAqIEN1cnJlbnRseSB3ZSBvbmx5IGhhdmUg KHNvZnQpIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBzbyB3ZSB0cnkgdG8g cmVkdWNlCisgKiB0aGUgbGlzdCBvZiBjbGF1c2VzLgorICoKKyAqIFRoZW4g d2UgcmVtb3ZlIHRoZSBjbGF1c2VzIGVzdGltYXRlZCB1c2luZyBtdWx0aXZh cmlhdGUgc3RhdHMsIGFuZCBwcm9jZXNzCisgKiB0aGUgcmVzdCBvZiB0aGUg Y2xhdXNlcyB1c2luZyB0aGUgcmVndWxhciBwZXItY29sdW1uIHN0YXRzLgor ICoKICAqIEN1cnJlbnRseSwgdGhlIG9ubHkgZXh0cmEgc21hcnRzIHdlIGhh dmUgaXMgdG8gcmVjb2duaXplICJyYW5nZSBxdWVyaWVzIiwKICAqIHN1Y2gg YXMgInggPiAzNCBBTkQgeCA8IDQyIi4gIENsYXVzZXMgYXJlIHJlY29nbml6 ZWQgYXMgcG9zc2libGUgcmFuZ2UKICAqIHF1ZXJ5IGNvbXBvbmVudHMgaWYg dGhleSBhcmUgcmVzdHJpY3Rpb24gb3BjbGF1c2VzIHdob3NlIG9wZXJhdG9y cyBoYXZlCkBAIC05OSw2ICsxMzUsMjIgQEAgY2xhdXNlbGlzdF9zZWxlY3Rp dml0eShQbGFubmVySW5mbyAqcm9vdCwKIAlSYW5nZVF1ZXJ5Q2xhdXNlICpy cWxpc3QgPSBOVUxMOwogCUxpc3RDZWxsICAgKmw7CiAKKwkvKiBwcm9jZXNz aW5nIG12IHN0YXRzICovCisJT2lkCQkJcmVsaWQgPSBJbnZhbGlkT2lkOwor CisJLyogbGlzdCBvZiBtdWx0aXZhcmlhdGUgc3RhdHMgb24gdGhlIHJlbGF0 aW9uICovCisJTGlzdAkgICAqc3RhdHMgPSBOSUw7CisKKwkvKgorCSAqIFRv IGZldGNoIHRoZSBzdGF0aXN0aWNzLCB3ZSBmaXJzdCBuZWVkIHRvIGRldGVy bWluZSB0aGUgcmVsLiBDdXJyZW50bHkKKwkgKiBwb2ludCB3ZSBvbmx5IHN1 cHBvcnQgZXN0aW1hdGVzIG9mIHNpbXBsZSByZXN0cmljdGlvbnMgd2l0aCBh bGwgVmFycworCSAqIHJlZmVyZW5jaW5nIGEgc2luZ2xlIGJhc2VyZWwuIEhv d2V2ZXIgc2V0X2Jhc2VyZWxfc2l6ZV9lc3RpbWF0ZXMoKSBzZXRzCisJICog dmFyUmVsaWQ9MCBzbyB3ZSBoYXZlIHRvIGFjdHVhbGx5IGluc3BlY3QgdGhl IGNsYXVzZXMgYnkgcHVsbF92YXJub3MKKwkgKiBhbmQgc2VlIGlmIHRoZXJl J3MganVzdCBhIHNpbmdsZSB2YXJubyByZWZlcmVuY2VkLgorCSAqLworCWlm ICgoY291bnRfdmFybm9zKGNsYXVzZXMsICZyZWxpZCkgPT0gMSkgJiYgKCh2 YXJSZWxpZCA9PSAwKSB8fCAodmFyUmVsaWQgPT0gcmVsaWQpKSkKKwkJc3Rh dHMgPSBmaW5kX3N0YXRzKHJvb3QsIHJlbGlkKTsKKwogCS8qCiAJICogSWYg dGhlcmUncyBleGFjdGx5IG9uZSBjbGF1c2UsIHRoZW4gbm8gdXNlIGluIHRy eWluZyB0byBtYXRjaCB1cCBwYWlycywKIAkgKiBzbyBqdXN0IGdvIGRpcmVj dGx5IHRvIGNsYXVzZV9zZWxlY3Rpdml0eSgpLgpAQCAtMTA4LDYgKzE2MCwy NCBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkgIHZhclJlbGlkLCBqb2ludHlwZSwgc2ppbmZvKTsKIAog CS8qCisJICogQXBwbHkgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIGJ1dCBm aXJzdCBjaGVjayB0aGF0IHRoZXJlIGFyZSBzb21lIHN0YXRzCisJICogd2l0 aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBidWlsdCAoYnkgc2ltcGx5IHdh bGtpbmcgdGhlIHN0YXRzIGxpc3QpLAorCSAqIGFuZCB0aGF0IHRoZXJlIGFy ZSBhdCB0d28gb3IgbW9yZSBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgYnkgY2xh dXNlcyB0aGF0CisJICogbWF5IGJlIHJlZHVjZWQgdXNpbmcgZnVuY3Rpb25h bCBkZXBlbmRlbmNpZXMuCisJICoKKwkgKiBXZSB3b3VsZCBmaW5kIHRoYXQg YW55d2F5IHdoZW4gdHJ5aW5nIHRvIGFjdHVhbGx5IGFwcGx5IHRoZSBmdW5j dGlvbmFsCisJICogZGVwZW5kZW5jaWVzLCBidXQgbGV0J3MgZG8gdGhlIGNo ZWFwIGNoZWNrcyBmaXJzdC4KKwkgKgorCSAqIEFmdGVyIGFwcGx5aW5nIHRo ZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyB3ZSBnZXQgdGhlIHJlbWFpbmln IGNsYXVzZXMKKwkgKiB0aGF0IG5lZWQgdG8gYmUgZXN0aW1hdGVkIGJ5IG90 aGVyIHR5cGVzIG9mIHN0YXRzIChNQ1YsIGhpc3RvZ3JhbXMgZXRjKS4KKwkg Ki8KKwlpZiAoaGFzX3N0YXRzKHN0YXRzLCBNVl9DTEFVU0VfVFlQRV9GREVQ KSAmJgorCQkoY291bnRfbXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCkgPj0g MikpCisJeworCQljbGF1c2VzID0gY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRl bmNpZXMocm9vdCwgY2xhdXNlcywgcmVsaWQsIHN0YXRzKTsKKwl9CisKKwkv KgogCSAqIEluaXRpYWwgc2NhbiBvdmVyIGNsYXVzZXMuICBBbnl0aGluZyB0 aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGEgcG90ZW50aWFsCiAJICogcmFuZ2Vx dWVyeSBjbGF1c2UgZ2V0cyBtdWx0aXBsaWVkIGludG8gczEgYW5kIGZvcmdv dHRlbi4gQW55dGhpbmcgdGhhdAogCSAqIGRvZXMgZ2V0cyBpbnNlcnRlZCBp bnRvIGFuIHJxbGlzdCBlbnRyeS4KQEAgLTc2MywzICs4MzMsNDM2IEBAIGNs YXVzZV9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAogCXJldHVy biBzMTsKIH0KKworLyoKKyAqIENvbGxlY3QgYXR0cmlidXRlcyBmcm9tIG12 LWNvbXBhdGlibGUgY2xhdXNlcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAq Citjb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5kZXggcmVs aWQpCit7CisJQml0bWFwc2V0ICAqYXR0bnVtcyA9IE5VTEw7CisJTGlzdENl bGwgICAqbDsKKworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSBjbGF1c2Vz IGFuZCBpZGVudGlmeSB0aGUgb25lcyB3ZSBjYW4gZXN0aW1hdGUKKwkgKiB1 c2luZyBtdWx0aXZhcmlhdGUgc3RhdHMsIGFuZCByZW1lbWJlciB0aGUgcmVs aWQvY29sdW1ucy4gV2UnbGwKKwkgKiB0aGVuIGNyb3NzLWNoZWNrIGlmIHdl IGhhdmUgc3VpdGFibGUgc3RhdHMsIGFuZCBvbmx5IGlmIG5lZWRlZAorCSAq IHdlJ2xsIHNwbGl0IHRoZSBjbGF1c2VzIGludG8gbXVsdGl2YXJpYXRlIGFu ZCByZWd1bGFyIGxpc3RzLgorCSAqCisJICogRm9yIG5vdyB3ZSdyZSBvbmx5 IGludGVyZXN0ZWQgaW4gUmVzdHJpY3RJbmZvIG5vZGVzIHdpdGggbmVzdGVk CisJICogT3BFeHByLCB1c2luZyBlaXRoZXIgYSByYW5nZSBvciBlcXVhbGl0 eS4KKwkgKi8KKwlmb3JlYWNoIChsLCBjbGF1c2VzKQorCXsKKwkJQXR0ck51 bWJlciBhdHRudW07CisJCU5vZGUJICAgKmNsYXVzZSA9IChOb2RlICopIGxm aXJzdChsKTsKKworCQkvKiBpZ25vcmUgdGhlIHJlc3VsdCBmb3Igbm93IC0g d2Ugb25seSBuZWVkIHRoZSBpbmZvICovCisJCWlmIChjbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtKSkKKwkJCWF0dG51 bXMgPSBibXNfYWRkX21lbWJlcihhdHRudW1zLCBhdHRudW0pOworCX0KKwor CS8qCisJICogSWYgdGhlcmUgYXJlIG5vdCBhdCBsZWFzdCB0d28gYXR0cmli dXRlcyByZWZlcmVuY2VkIGJ5IHRoZSBjbGF1c2UocyksCisJICogd2UgY2Fu IHRocm93IGV2ZXJ5dGhpbmcgb3V0IChhcyB3ZSdsbCByZXZlcnQgdG8gc2lt cGxlIHN0YXRzKS4KKwkgKi8KKwlpZiAoYm1zX251bV9tZW1iZXJzKGF0dG51 bXMpIDw9IDEpCisJeworCQlpZiAoYXR0bnVtcyAhPSBOVUxMKQorCQkJcGZy ZWUoYXR0bnVtcyk7CisJCWF0dG51bXMgPSBOVUxMOworCX0KKworCXJldHVy biBhdHRudW1zOworfQorCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBh dHRyaWJ1dGVzIGluIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFy aWF0ZSBzdGF0cy4KKyAqLworc3RhdGljIGludAorY291bnRfbXZfYXR0bnVt cyhMaXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCkKK3sKKwlpbnQgYzsKKwlC aXRtYXBzZXQgKmF0dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNl cywgcmVsaWQpOworCisJYyA9IGJtc19udW1fbWVtYmVycyhhdHRudW1zKTsK KworCWJtc19mcmVlKGF0dG51bXMpOworCisJcmV0dXJuIGM7Cit9CisKKy8q CisgKiBDb3VudCB2YXJub3MgcmVmZXJlbmNlZCBpbiB0aGUgY2xhdXNlcywg YW5kIGlmIHRoZXJlJ3MgYSBzaW5nbGUgdmFybm8gdGhlbgorICogcmV0dXJu IHRoZSBpbmRleCBpbiAncmVsaWQnLgorICovCitzdGF0aWMgaW50Citjb3Vu dF92YXJub3MoTGlzdCAqY2xhdXNlcywgSW5kZXggKnJlbGlkKQoreworCWlu dCBjbnQ7CisJQml0bWFwc2V0ICp2YXJub3MgPSBOVUxMOworCisJdmFybm9z ID0gcHVsbF92YXJub3MoKE5vZGUgKikgY2xhdXNlcyk7CisJY250ID0gYm1z X251bV9tZW1iZXJzKHZhcm5vcyk7CisKKwkvKiBpZiB0aGVyZSdzIGEgc2lu Z2xlIHZhcm5vIGluIHRoZSBjbGF1c2VzLCByZW1lbWJlciBpdCAqLworCWlm IChibXNfbnVtX21lbWJlcnModmFybm9zKSA9PSAxKQorCQkqcmVsaWQgPSBi bXNfc2luZ2xldG9uX21lbWJlcih2YXJub3MpOworCisJYm1zX2ZyZWUodmFy bm9zKTsKKworCXJldHVybiBjbnQ7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7 CisJSW5kZXgJCXZhcm5vOwkJLyogcmVsaWQgd2UncmUgaW50ZXJlc3RlZCBp biAqLworCUJpdG1hcHNldCAgKnZhcmF0dG5vczsJLyogYXR0bnVtcyByZWZl cmVuY2VkIGJ5IHRoZSBjbGF1c2VzICovCit9IG12X2NvbXBhdGlibGVfY29u dGV4dDsKKworLyoKKyAqIFJlY3Vyc2l2ZSB3YWxrZXIgdGhhdCBjaGVja3Mg Y29tcGF0aWJpbGl0eSBvZiB0aGUgY2xhdXNlIHdpdGggbXVsdGl2YXJpYXRl CisgKiBzdGF0aXN0aWNzLCBhbmQgY29sbGVjdHMgYXR0bnVtcyBmcm9tIHRo ZSBWYXJzLgorICoKKyAqIFhYWCBUaGUgb3JpZ2luYWwgaWRlYSB3YXMgdG8g Y29tYmluZSB0aGlzIHdpdGggZXhwcmVzc2lvbl90cmVlX3dhbGtlciwgYnV0 CisgKiAgICAgSSd2ZSBiZWVuIHVuYWJsZSB0byBtYWtlIHRoYXQgd29yayAt IHNlZW1zIHRoYXQgZG9lcyBub3QgcXVpdGUgYWxsb3cKKyAqICAgICBjaGVj a2luZyB0aGUgc3RydWN0dXJlLiBIZW5jZSB0aGUgZXhwbGljaXQgY2FsbHMg dG8gdGhlIHdhbGtlci4KKyAqLworc3RhdGljIGJvb2wKK212X2NvbXBhdGli bGVfd2Fsa2VyKE5vZGUgKm5vZGUsIG12X2NvbXBhdGlibGVfY29udGV4dCAq Y29udGV4dCkKK3sKKwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFs c2U7CisgCisJaWYgKElzQShub2RlLCBSZXN0cmljdEluZm8pKQorIAl7CisJ CVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJpY3RJbmZvICopIG5vZGU7 CisgCisgCQkvKiBQc2V1ZG9jb25zdGFudHMgYXJlIG5vdCByZWFsbHkgaW50 ZXJlc3RpbmcgaGVyZS4gKi8KKyAJCWlmIChyaW5mby0+cHNldWRvY29uc3Rh bnQpCisJCQlyZXR1cm4gdHJ1ZTsKKyAKKwkJLyogY2xhdXNlcyByZWZlcmVu Y2luZyBtdWx0aXBsZSB2YXJub3MgYXJlIGluY29tcGF0aWJsZSAqLworCQlp ZiAoYm1zX21lbWJlcnNoaXAocmluZm8tPmNsYXVzZV9yZWxpZHMpICE9IEJN U19TSU5HTEVUT04pCisJCQlyZXR1cm4gdHJ1ZTsKKyAKKwkJLyogY2hlY2sg dGhlIGNsYXVzZSBpbnNpZGUgdGhlIFJlc3RyaWN0SW5mbyAqLworCQlyZXR1 cm4gbXZfY29tcGF0aWJsZV93YWxrZXIoKE5vZGUqKXJpbmZvLT5jbGF1c2Us ICh2b2lkICopIGNvbnRleHQpOworIAl9CisKKwlpZiAoSXNBKG5vZGUsIFZh cikpCisJeworCQlWYXIgKiB2YXIgPSAoVmFyKilub2RlOworCisJCS8qCisJ CSAqIEFsc28sIHRoZSB2YXJpYWJsZSBuZWVkcyB0byByZWZlcmVuY2UgdGhl IHJpZ2h0IHJlbGlkICh0aGlzIG1pZ2h0IGJlCisJCSAqIHVubmVjZXNzYXJ5 IGdpdmVuIHRoZSBvdGhlciBjaGVja3MsIGJ1dCBsZXQncyBiZSBzdXJlKS4K KwkJICovCisJCWlmICh2YXItPnZhcm5vICE9IGNvbnRleHQtPnZhcm5vKQor CQkJcmV0dXJuIHRydWU7CisKKwkJLyogQWxzbyBza2lwIHN5c3RlbSBhdHRy aWJ1dGVzICh3ZSBkb24ndCBhbGxvdyBzdGF0cyBvbiB0aG9zZSkuICovCisJ CWlmICghIEF0dHJOdW1iZXJJc0ZvclVzZXJEZWZpbmVkQXR0cih2YXItPnZh cmF0dG5vKSkKKwkJCXJldHVybiB0cnVlOworCisJCS8qIFNlZW1zIGZpbmUs IHNvIGxldCdzIHJlbWVtYmVyIHRoZSBhdHRudW0uICovCisJCWNvbnRleHQt PnZhcmF0dG5vcyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPnZhcmF0dG5v cywgdmFyLT52YXJhdHRubyk7CisKKwkJcmV0dXJuIGZhbHNlOworIAl9CisK KwkvKgorCSAqIEFuZCBmaW5hbGx5IHRoZSBvcGVyYXRvciBleHByZXNzaW9u cyAtIHdlIG9ubHkgYWxsb3cgc2ltcGxlIGV4cHJlc3Npb25zCisJICogd2l0 aCB0d28gYXJndW1lbnRzLCB3aGVyZSBvbmUgaXMgYSBWYXIgYW5kIHRoZSBv dGhlciBpcyBhIGNvbnN0YW50LCBhbmQKKwkgKiBpdCdzIGEgc2ltcGxlIGNv bXBhcmlzb24gKHdoaWNoIHdlIGRldGVjdCB1c2luZyBlc3RpbWF0b3IgZnVu Y3Rpb24pLgorCSAqLworCWlmIChpc19vcGNsYXVzZShub2RlKSkKKyAJewor CQlPcEV4cHIJICAgKmV4cHIgPSAoT3BFeHByICopIG5vZGU7CisJCVZhcgkJ ICAgKnZhcjsKKwkJYm9vbAkJdmFyb25sZWZ0ID0gdHJ1ZTsKKwkJYm9vbAkJ b2s7CisKKyAJCS8qCisJCSAqIE9ubHkgZXhwcmVzc2lvbnMgd2l0aCB0d28g YXJndW1lbnRzIGFyZSBjb25zaWRlcmVkIGNvbXBhdGlibGUuCisgCQkgKgor CQkgKiBYWFggUG9zc2libHkgdW5uZWNlc3NhcnkgKGNhbiBPcEV4cHIgaGF2 ZSBkaWZmZXJlbnQgYXJnIGNvdW50PykuCisgCQkgKi8KKwkJaWYgKGxpc3Rf bGVuZ3RoKGV4cHItPmFyZ3MpICE9IDIpCisJCQlyZXR1cm4gdHJ1ZTsKKwor CQkvKiBzZWUgaWYgaXQgYWN0dWFsbHkgaGFzIHRoZSByaWdodCAqLworCQlv ayA9IChOdW1SZWxpZHMoKE5vZGUqKWV4cHIpID09IDEpICYmCisJCQkJKGlz X3BzZXVkb19jb25zdGFudF9jbGF1c2UobHNlY29uZChleHByLT5hcmdzKSkg fHwKKwkJCQkodmFyb25sZWZ0ID0gZmFsc2UsCisJCQkJIGlzX3BzZXVkb19j b25zdGFudF9jbGF1c2UobGluaXRpYWwoZXhwci0+YXJncykpKSk7CisKKwkJ LyogdW5zdXBwb3J0ZWQgc3RydWN0dXJlICh0d28gdmFyaWFibGVzIG9yIHNv KSAqLworCQlpZiAoISBvaykKKwkJCXJldHVybiB0cnVlOworCisgCQkvKgor CQkgKiBJZiBpdCdzIG5vdCBhICI8IiBvciAiPiIgb3IgIj0iIG9wZXJhdG9y LCBqdXN0IGlnbm9yZSB0aGUgY2xhdXNlLgorCQkgKiBPdGhlcndpc2Ugbm90 ZSB0aGUgcmVsaWQgYW5kIGF0dG51bSBmb3IgdGhlIHZhcmlhYmxlLiBUaGlz IHVzZXMgdGhlCisJCSAqIGZ1bmN0aW9uIGZvciBlc3RpbWF0aW5nIHNlbGVj dGl2aXR5LCBvbnQgdGhlIG9wZXJhdG9yIGRpcmVjdGx5IChhIGJpdAorCQkg KiBhd2t3YXJkLCBidXQgd2VsbCAuLi4pLgorIAkJICovCisJCXN3aXRjaCAo Z2V0X29wcnJlc3QoZXhwci0+b3BubykpCisJCXsKKwkJCWNhc2UgRl9FUVNF TDoKKworCQkJCS8qIGVxdWFsaXR5IGNvbmRpdGlvbnMgYXJlIGNvbXBhdGli bGUgd2l0aCBhbGwgc3RhdGlzdGljcyAqLworCQkJCWJyZWFrOworCisJCQlk ZWZhdWx0OgorCisJCQkJLyogdW5rbm93biBlc3RpbWF0b3IgKi8KKwkJCQly ZXR1cm4gdHJ1ZTsKKyAJCX0KKworCQl2YXIgPSAodmFyb25sZWZ0KSA/IGxp bml0aWFsKGV4cHItPmFyZ3MpIDogbHNlY29uZChleHByLT5hcmdzKTsKKwor CQlyZXR1cm4gbXZfY29tcGF0aWJsZV93YWxrZXIoKE5vZGUgKikgdmFyLCBj b250ZXh0KTsKKyAJfQorCisJLyogTm9kZSBub3QgZXhwbGljaXRseSBzdXBw b3J0ZWQsIHNvIHRlcm1pbmF0ZSAqLworCXJldHVybiB0cnVlOworfQorIAor LyoKKyAqIERldGVybWluZXMgd2hldGhlciB0aGUgY2xhdXNlIGlzIGNvbXBh dGlibGUgd2l0aCBtdWx0aXZhcmlhdGUgc3RhdHMsCisgKiBhbmQgaWYgaXQg aXMsIHJldHVybnMgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIC0gdmFy bm8gKGluZGV4CisgKiBpbnRvIHNpbXBsZV9ydGVfYXJyYXkpIGFuZCBhIGJp dG1hcCBvZiBhdHRyaWJ1dGVzLiBUaGlzIGlzIHRoZW4KKyAqIHVzZWQgdG8g ZmV0Y2ggcmVsYXRlZCBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4KKyAqCisg KiBBdCB0aGlzIG1vbWVudCB3ZSBvbmx5IHN1cHBvcnQgYmFzaWMgY29uZGl0 aW9ucyBvZiB0aGUgZm9ybQorICoKKyAqICAgICB2YXJpYWJsZSBPUCBjb25z dGFudAorICoKKyAqIHdoZXJlIE9QIGlzIG9uZSBvZiBbPSw8LDw9LD49LD5d ICh3aGljaCBpcyBob3dldmVyIGRldGVybWluZWQgYnkKKyAqIGxvb2tpbmcg YXQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gZm9yIGVzdGltYXRpbmcgc2Vs ZWN0aXZpdHksIGp1c3QKKyAqIGxpa2Ugd2l0aCB0aGUgc2luZ2xlLWRpbWVu c2lvbmFsIGNhc2UpLgorICoKKyAqIFRPRE8gU3VwcG9ydCAnT1IgY2xhdXNl cycgLSBzaG91bGRuJ3QgYmUgYWxsIHRoYXQgZGlmZmljdWx0IHRvCisgKiAg ICAgIGV2YWx1YXRlIHRoZW0gdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzLgor ICovCitzdGF0aWMgYm9vbAorY2xhdXNlX2lzX212X2NvbXBhdGlibGUoTm9k ZSAqY2xhdXNlLCBJbmRleCByZWxpZCwgQXR0ck51bWJlciAqYXR0bnVtKQor eworCW12X2NvbXBhdGlibGVfY29udGV4dCBjb250ZXh0OworCisJY29udGV4 dC52YXJubyA9IHJlbGlkOworCWNvbnRleHQudmFyYXR0bm9zID0gTlVMTDsJ Lyogbm8gYXR0bnVtcyAqLworCisJaWYgKG12X2NvbXBhdGlibGVfd2Fsa2Vy KGNsYXVzZSwgKHZvaWQgKikgJmNvbnRleHQpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKiByZW1lbWJlciB0aGUgbmV3bHkgY29sbGVjdGVkIGF0dG51bXMg Ki8KKwkqYXR0bnVtID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIoY29udGV4dC52 YXJhdHRub3MpOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIFJl ZHVjZSBjbGF1c2VzIHVzaW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzCisg Ki8KK3N0YXRpYyBMaXN0KgorZmRlcHNfcmVkdWNlX2NsYXVzZXMoTGlzdCAq Y2xhdXNlcywgSW5kZXggcmVsaWQsIEJpdG1hcHNldCAqcmVkdWNlZF9hdHRu dW1zKQoreworCUxpc3RDZWxsICpsYzsKKwlMaXN0CSAqcmVkdWNlZF9jbGF1 c2VzID0gTklMOworCisJZm9yZWFjaCAobGMsIGNsYXVzZXMpCisJeworCQlB dHRyTnVtYmVyIGF0dG51bSA9IEludmFsaWRBdHRyTnVtYmVyOworCQlOb2Rl ICogY2xhdXNlID0gKE5vZGUqKWxmaXJzdChsYyk7CisKKwkJLyogaWdub3Jl IGNsYXVzZXMgdGhhdCBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcyAqLworCQlpZiAoISBjbGF1c2VfaXNfbXZfY29t cGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtKSkKKwkJCXJlZHVjZWRf Y2xhdXNlcyA9IGxhcHBlbmQocmVkdWNlZF9jbGF1c2VzLCBjbGF1c2UpOwor CisJCS8qIGZvciBlcXVhbGl0eSBjbGF1c2VzLCBvbmx5IGtlZXAgdGhvc2Ug bm90IG9uIHJlZHVjZWQgYXR0cmlidXRlcyAqLworCQlpZiAoISBibXNfaXNf bWVtYmVyKGF0dG51bSwgcmVkdWNlZF9hdHRudW1zKSkKKwkJCXJlZHVjZWRf Y2xhdXNlcyA9IGxhcHBlbmQocmVkdWNlZF9jbGF1c2VzLCBjbGF1c2UpOwor CX0KKworCXJldHVybiByZWR1Y2VkX2NsYXVzZXM7Cit9CisKKy8qCisgKiBk ZWNpZGUgd2hpY2ggYXR0cmlidXRlcyBhcmUgcmVkdW5kYW50IChmb3IgZXF1 YWxpdHkgY2xhdXNlcykKKyAqCisgKiBXZSB0cnkgdG8gYXBwbHkgYWxsIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGF2YWlsYWJsZSwgYW5kIGZvciBlYWNo IG9uZSB3ZQorICogY2hlY2sgaWYgaXQgbWF0Y2hlcyBhdHRudW1zIGZyb20g ZXF1YWxpdHkgY2xhdXNlcywgYnV0IG9ubHkgdGhvc2Ugbm90IHlldAorICog cmVkdWNlZC4KKyAqCisgKiBYWFggTm90IHN1cmUgaWYgdGhlIG9yZGVyIGlu IHdoaWNoIHdlIGFwcGx5IHRoZSBkZXBlbmRlbmNpZXMgbWF0dGVycy4KKyAq CisgKiBYWFggV2UgZG8gbm90IGNvbWJpbmUgZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgZnJvbSBzZXBhcmF0ZSBzdGF0cy4gVGhhdCBpcworICogICAgIGlm IHdlIGhhdmUgZGVwZW5kZW5jaWVzIG9uIFthLGJdIGFuZCBbYixjXSwgdGhl biB3ZSBkb24ndCBkZWR1Y2UKKyAqICAgICBhLT5jIGZyb20gYS0+YiBhbmQg Yi0+Yy4gQ29tcHV0aW5nIHN1Y2ggdHJhbnNpdGl2ZSBjbG9zdXJlIGlzIGEg cG9zc2libGUKKyAqICAgICBmdXR1cmUgaW1wcm92ZW1lbnQuCisgKi8KK3N0 YXRpYyBCaXRtYXBzZXQgKgorZmRlcHNfcmVkdWNlX2F0dG51bXMoTGlzdCAq c3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcykKK3sKKwlMaXN0Q2VsbCAgKmxj OworCUJpdG1hcHNldCAqcmVkdWNlZCA9IE5VTEw7CisKKwlmb3JlYWNoIChs Yywgc3RhdHMpCisJeworCQlpbnQgaTsKKwkJTVZEZXBlbmRlbmNpZXMgZGVw ZW5kZW5jaWVzID0gTlVMTDsKKwkJTVZTdGF0aXN0aWNJbmZvICppbmZvID0g KE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChsYyk7CisKKwkJLyogc2tpcCBz dGF0aXN0aWNzIHdpdGhvdXQgZGVwZW5kZW5jaWVzICovCisJCWlmICghIHN0 YXRzX3R5cGVfbWF0Y2hlcyhpbmZvLCBNVl9DTEFVU0VfVFlQRV9GREVQKSkK KwkJCWNvbnRpbnVlOworCisJCS8qIGZldGNoIGFuZCBkZXNlcmlhbGl6ZSBk ZXBlbmRlbmNpZXMgKi8KKwkJZGVwZW5kZW5jaWVzID0gbG9hZF9tdl9kZXBl bmRlbmNpZXMoaW5mby0+bXZvaWQpOworCisJCWZvciAoaSA9IDA7IGkgPCBk ZXBlbmRlbmNpZXMtPm5kZXBzOyBpKyspCisJCXsKKwkJCWludCBqOworCQkJ Ym9vbCBtYXRjaGVkID0gdHJ1ZTsKKwkJCU1WRGVwZW5kZW5jeSBkZXAgPSBk ZXBlbmRlbmNpZXMtPmRlcHNbaV07CisKKwkJCS8qIHdlIGRvbid0IGJvdGhl ciB0byBicmVhayB0aGUgbG9vcCBlYXJseSAob25seSBmZXcgYXR0cmlidXRl cykgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBkZXAtPm5hdHRyaWJ1dGVzOyBq KyspCisJCQl7CisJCQkJaWYgKCEgYm1zX2lzX21lbWJlcihkZXAtPmF0dHJp YnV0ZXNbal0sIGF0dG51bXMpKQorCQkJCQltYXRjaGVkID0gZmFsc2U7CisK KwkJCQlpZiAoYm1zX2lzX21lbWJlcihkZXAtPmF0dHJpYnV0ZXNbal0sIHJl ZHVjZWQpKQorCQkJCQltYXRjaGVkID0gZmFsc2U7CisJCQl9CisKKwkJCS8q IGlmIGRlcGVuZGVuY3kgYXBwbGllcywgbWFyayB0aGUgbGFzdCBhdHRyaWJ1 dGUgYXMgcmVkdWNlZCAqLworCQkJaWYgKG1hdGNoZWQpCisJCQkJcmVkdWNl ZCA9IGJtc19hZGRfbWVtYmVyKHJlZHVjZWQsCisJCQkJCQkJCQkJIGRlcC0+ YXR0cmlidXRlc1tkZXAtPm5hdHRyaWJ1dGVzLTFdKTsKKwkJfQorCX0KKwor CXJldHVybiByZWR1Y2VkOworfQorCisvKgorICogcmVkdWNlIGxpc3Qgb2Yg ZXF1YWxpdHkgY2xhdXNlcyB1c2luZyBzb2Z0IGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzCisgKgorICogV2Ugc2ltcGx5IHdhbGsgdGhyb3VnaCBsaXN0IG9m IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgZm9yIGVhY2ggb25lIHdl CisgKiBjaGVjayB3aGV0aGVyIHRoZSBkZXBlbmRlbmN5ICdtYXRjaGVzJyB0 aGUgY2xhdXNlcywgaS5lLiBpZiB0aGVyZSdzIGEgY2xhdXNlCisgKiBtYXRj aGluZyB0aGUgY29uZGl0aW9uLiBJZiB5ZXMsIHdlIGF0dGVtcHQgdG8gcmVt b3ZlIGFsbCBjbGF1c2VzIG1hdGNoaW5nCisgKiB0aGUgaW1wbGllZCBwYXJ0 IG9mIHRoZSBkZXBlbmRlbmN5IGZyb20gdGhlIGxpc3QuCisgKgorICogVGhp cyBvbmx5IHJlZHVjZXMgZXF1YWxpdHkgY2xhdXNlcywgYW5kIGlnbm9yZXMg YWxsIHRoZSBvdGhlciB0eXBlcy4gV2UgbWlnaHQKKyAqIGV4dGVuZCBpdCB0 byBoYW5kbGUgSVMgTlVMTCBjbGF1c2UsIGluIHRoZSBmdXR1cmUuCisgKgor ICogV2UgYWxzbyBhc3N1bWUgdGhlIGVxdWFsaXR5IGNsYXVzZXMgYXJlICdj b21wYXRpYmxlJy4gRm9yIGV4YW1wbGUgd2UgY2FuJ3QKKyAqIGlkZW50aWZ5 IHdoZW4gdGhlIGNsYXVzZXMgdXNlIGEgbWlzbWF0Y2hpbmcgemlwIGNvZGUg YW5kIGNpdHkgbmFtZS4gSW4gc3VjaAorICogY2FzZSB0aGUgdXN1YWwgYXBw cm9hY2ggKHByb2R1Y3Qgb2Ygc2VsZWN0aXZpdGllcykgd291bGQgcHJvZHVj ZSBhIGJldHRlcgorICogZXN0aW1hdGUsIGFsdGhvdWdoIG1vc3RseSBieSBj aGFuY2UuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGJl IGNhcmVmdWwgYWJvdXQgY3ljbGljIGRlcGVuZGVuY2llcywgZS5nLiB3aGVu CisgKgorICogICAgIChhIC0+IGIpIGFuZCAoYiAtPiBhKQorICoKKyAqIGF0 IHRoZSBzYW1lIHRpbWUsIHdoaWNoIG1lYW5zIHRoZXJlJ3MgMToxIHJlbGF0 aW9uc2hpcCBiZXR3ZWVuIHRlIGNvbHVtbnMuCisgKiBJbiB0aGlzIGNhc2Ug d2UgbXVzdCBub3QgcmVkdWNlIGNsYXVzZXMgb24gYm90aCBhdHRyaWJ1dGVz IGF0IHRoZSBzYW1lIHRpbWUuCisgKgorICogVE9ETyBDdXJyZW50bHkgd2Ug b25seSBhcHBseSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBhdCB0aGUgc2Ft ZSBsZXZlbCwgYnV0CisgKiAgICAgIG1heWJlIHdlIGNvdWxkIHRyYW5zZmVy IHRoZSBjbGF1c2VzIGZyb20gdXBwZXIgbGV2ZWxzIHRvIHRoZSBzdWJ0cmVl cz8KKyAqICAgICAgRm9yIGV4YW1wbGUgbGV0J3Mgc2F5IHdlIGhhdmUgKGEt PmIpIGRlcGVuZGVuY3ksIGFuZCBjb25kaXRpb24KKyAqCisgKiAgICAgICAg ICAoYT0xKSBBTkQgKGI9MiBPUiBjPTMpCisgKgorICogICAgICBDdXJyZW50 bHksIHdlIHdvbid0IGJlIGFibGUgdG8gcGVyZm9ybSBhbnkgcmVkdWN0aW9u LCBiZWNhdXNlIHdlJ2xsCisgKiAgICAgIGNvbnNpZGVyIChhPTEpIGFuZCAo Yj0yIE9SIGM9MykgaW5kZXBlbmRlbnRseS4gQnV0IG1heWJlIHdlIGNvdWxk IHBhc3MKKyAqICAgICAgKGE9MSkgaW50byB0aGUgb3RoZXIgZXhwcmVzc2lv biwgYW5kIG9ubHkgY2hlY2sgaXQgYWdhaW5zdCBjb25kaXRpb25zCisgKiAg ICAgIG9mIHRoZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcz8KKyAqCisgKiAg ICAgIEluIHRoaXMgY2FzZSB3ZSdkIGVuZCB1cCB3aXRoCisgKgorICogICAg ICAgICAoYT0xKQorICoKKyAqICAgICAgYXMgd2UnZCBjb25zaWRlciAoYj0y KSBpbXBsaWVkIHRoYW5rcyB0byB0aGUgcnVsZSwgcmVuZGVyaW5nIHRoZSB3 aG9sZQorICogICAgICBPUiBjbGF1c2UgdmFsaWQuCisgKi8KK3N0YXRpYyBM aXN0ICoKK2NsYXVzZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJCSAgSW5kZXggcmVs aWQsIExpc3QgKnN0YXRzKQoreworCUJpdG1hcHNldCAgKmNsYXVzZV9hdHRu dW1zID0gTlVMTDsKKwlCaXRtYXBzZXQgICpyZWR1Y2VkX2F0dG51bXMgPSBO VUxMOworCisJLyoKKwkgKiBJcyB0aGVyZSBhdCBsZWFzdCBvbmUgc3RhdGlz dGljcyB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzPworCSAqIElmIG5v dCwgcmV0dXJuIHRoZSBvcmlnaW5hbCBjbGF1c2VzIHJpZ2h0IGF3YXkuCisJ ICoKKwkgKiBYWFggSXNuJ3QgdGhpcyBhIGJpdCBwb2ludGxlc3MsIHRoYW5r cyB0byBleGFjdGx5IHRoZSBzYW1lIGNoZWNrIGluCisJICogICAgIGNsYXVz ZWxpc3Rfc2VsZWN0aXZpdHkoKT8gQ2FuIHdlIHRyaWdnZXIgdGhlIGNvbmRp dGlvbiBoZXJlPworCSAqLworCWlmICghIGhhc19zdGF0cyhzdGF0cywgTVZf Q0xBVVNFX1RZUEVfRkRFUCkpCisJCXJldHVybiBjbGF1c2VzOworCisJLyog Y29sbGVjdCBhdHRudW1zIGZyb20gY2xhdXNlcyBjb21wYXRpYmxlIHdpdGgg ZGVwZW5kZW5jaWVzIChlcXVhbGl0eSkgKi8KKwljbGF1c2VfYXR0bnVtcyA9 IGNvbGxlY3RfbXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCk7CisKKwkvKiBk ZWNpZGUgd2hpY2ggYXR0bnVtcyBtYXkgYmUgZWxpbWluYXRlZCAqLworCXJl ZHVjZWRfYXR0bnVtcyA9IGZkZXBzX3JlZHVjZV9hdHRudW1zKHN0YXRzLCBj bGF1c2VfYXR0bnVtcyk7CisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUg Y2xhdXNlcywgYW5kIHNlZSB3aGljaCBvdGhlciBjbGF1c2VzIHdlIG1heSBy ZWR1Y2UuCisJICovCisJY2xhdXNlcyA9IGZkZXBzX3JlZHVjZV9jbGF1c2Vz KGNsYXVzZXMsIHJlbGlkLCByZWR1Y2VkX2F0dG51bXMpOworCisJYm1zX2Zy ZWUoY2xhdXNlX2F0dG51bXMpOworCWJtc19mcmVlKHJlZHVjZWRfYXR0bnVt cyk7CisKKwlyZXR1cm4gY2xhdXNlczsKK30KKworLyoKKyAqIENoZWNrIHRo YXQgdGhlcmUgYXJlIHN0YXRzIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBy ZXF1ZXN0ZWQgdHlwZXMuCisgKi8KK3N0YXRpYyBib29sCitzdGF0c190eXBl X21hdGNoZXMoTVZTdGF0aXN0aWNJbmZvICpzdGF0LCBpbnQgdHlwZSkKK3sK KwlpZiAoKHR5cGUgJiBNVl9DTEFVU0VfVFlQRV9GREVQKSAmJiBzdGF0LT5k ZXBzX2J1aWx0KQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsK K30KKworLyoKKyAqIENoZWNrIHRoYXQgdGhlcmUgYXJlIHN0YXRzIHdpdGgg YXQgbGVhc3Qgb25lIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZXMuCisgKi8KK3N0 YXRpYyBib29sCitoYXNfc3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKQor eworCUxpc3RDZWxsICAgKnM7CisKKwlmb3JlYWNoIChzLCBzdGF0cykKKwl7 CisJCU1WU3RhdGlzdGljSW5mbwkqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8g KilsZmlyc3Qocyk7CisKKwkJLyogdGVybWluYXRlIGlmIHdlJ3ZlIGZvdW5k IGF0IGxlYXN0IG9uZSBtYXRjaGluZyBzdGF0aXN0aWNzICovCisJCWlmIChz dGF0c190eXBlX21hdGNoZXMoc3RhdCwgdHlwZSkpCisJCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBMb29rdXBz IHN0YXRzIGZvciBhIGdpdmVuIGJhc2VyZWwuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK2ZpbmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlk KQoreworCUFzc2VydChyb290LT5zaW1wbGVfcmVsX2FycmF5W3JlbGlkXSAh PSBOVUxMKTsKKworCXJldHVybiByb290LT5zaW1wbGVfcmVsX2FycmF5W3Jl bGlkXS0+bXZzdGF0bGlzdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvUkVBRE1FLmRlcGVuZGVuY2llcyBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLmRlcGVuZGVuY2llcwppbmRleCAx Zjk2ZmJjLi5mMjQ4NDU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5kZXBlbmRlbmNpZXMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5jaWVzCkBAIC0xNTYs MzcgKzE1NiwyNCBAQCBlc3RpbWF0ZXMgLSBlc3BlY2lhbGx5IGNvbXBhcmVk IHRvIGhpc3RvZ3JhbXMsIHRoYXQgYXJlIHF1aXRlIGJhZCBpbiBlc3RpbWF0 aW5nCiBlcXVhbGl0eSBjbGF1c2VzLgogCiAKLUxpbWl0YXRpb25zCi0tLS0t LS0tLS0tLQotCi1MZXQncyBzZWUgdGhlIG1haW4gbGltaW5hdGlvbnMgb2Yg ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIGVzcGVjaWFsbHkgdGhvc2UKLXJl bGF0ZWQgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCitNdWx0aS1j b2x1bW4gZGVwZW5kZW5jaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAKLVRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkg ZGVwZW5kZW5jaWVzIGJldHdlZW4gdHdvIGNvbHVtbnMsIGJ1dAotdGhpcyBp cyBtZXJlbHkgYSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgaW5pdGlhbCBpbXBs ZW1lbnRhdGlvbi4gSXQncyBjZXJ0YWlubHkKLXVzZWZ1bCB0byBtaW5lIGZv ciBkZXBlbmRlbmNpZXMgaW52b2x2aW5nIG11bHRpcGxlIGNvbHVtbnMgb24g dGhlICdsZWZ0JyBzaWRlLAotaS5lLiBhIGNvbmRpdGlvbiBmb3IgdGhlIGRl cGVuZGVuY3kuIFRoYXQgaXMgZGVwZW5kZW5jaWVzIGxpa2UgKGEsYiAtPiBj KS4KK1RoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkZXBlbmRlbmNpZXMg d2l0aCBtdWx0aXBsZSBjb2x1bW5zIG9uIHRoZSBsZWZ0IHNpZGUKKyhpLmUu IGNvbmRpdGlvbiBvZiB0aGUgZGVwZW5kZW5jeSkuIFRoZSBkZXRlY3Rpb24g c3RhcnRzIGZyb20gZGVwZW5kZW5jaWVzIHdpdGgKK2Egc2luZ2xlIGNvbmRp dGlvbiwgYW5kIHRoZW4gcHJvY2VlZHMgdG8gaGlnaGVyIGNvbmRpdGlvbiBj b3VudHMuCiAKLVRoZSBpbXBsZW1lbnRhdGlvbiBtYXkvc2hvdWxkIGJlIHNt YXJ0IGVub3VnaCBub3QgdG8gbWluZSByZWR1bmRhbnQgY29uZGl0aW9ucywK LWUuZy4gKGEtPmIpIGFuZCAoYSxjIC0+IGIpLCBiZWNhdXNlIHRoZSBsYXR0 ZXIgaXMgYSB0cml2aWFsIGNvbnNlcXVlbmNlIG9mIHRoZQotZm9ybWVyIG9u ZSAoaWYgdmFsdWVzIG9mICdhJyBkZXRlcm1pbmUgJ2InLCBhZGRpbmcgYW5v dGhlciBjb2x1bW4gd29uJ3QgY2hhbmdlCi10aGF0IHJlbGF0aW9uc2hpcCku IFRoZSBBTkFMWVpFIHNob3VsZCBmaXJzdCBhbmFseXplIDE6MSBkZXBlbmRl bmNpZXMsIHRoZW4gMjoxCi1kZXBlbmRlbmNpZXMgKGFuZCBza2lwIHRoZSBh bHJlYWR5IGlkZW50aWZpZWQgb25lcyksIGV0Yy4KK0l0IGFsc28gZGV0ZWN0 cyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW1wbGllZCBieSBhbHJlYWR5IGlk ZW50aWZpZWQgb25lcywgYW5kCitpZ25vcmVzIHRoZW0uIEZvciBleGFtcGxl IGlmIHdlIGtub3cgdGhhdCAoYS0+YikgdGhlbiB3ZSB3b24ndCBhZGQgKGEs Yy0+YikgYXMKK3RoaXMgZGVwZW5kZW5jeSBpcyBhIHRyaXZpYWwgY29uc2Vx dWVuY2Ugb2YgKGEtPmIpLgogCi1Gb3IgZXhhbXBsZSB0aGUgZGVwZW5kZW5j eQorRm9yIGEgbW9yZSBwcmFjdGljYWwgZXhhbXBsZSwgY29uc2lkZXIgdGhl c2UgdHdvIGRlcGVuZGVuY2llcwogCiAgICAgKGNpdHkgbmFtZSAtPiB6aXAg Y29kZSkKLQotaXMgbXVjaCBzdHJvbmdlciwgaS5lLiB3aGVuZXZlciBpdCBo b2xkLCB0aGVuCi0KICAgICAoY2l0eSBuYW1lLCBzdGF0ZSBuYW1lIC0+IHpp cCBjb2RlKQogCi1ob2xkcyB0b28uIEJ1dCBpbiBjYXNlIHRoZXJlIGFyZSBj aXRpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGluIGRpZmZlcmVudCBzdGF0ZXMs Ci10aGVuIG9ubHkgdGhlIGxhdHRlciBkZXBlbmRlbmN5IHdpbGwgYmUgdmFs aWQuCi0KLU9mIGNvdXJzZSwgdGhlcmUgcHJvYmFibHkgYXJlIGNpdGllcyB3 aXRoIHRoZSBzYW1lIG5hbWUgd2l0aGluIGEgc2luZ2xlIHN0YXRlLAotYnV0 IGhvcGVmdWxseSB0aGlzIGlzIHJlbGF0aXZlbHkgcmFyZSBvY2N1cmVuY2Ug KGFuZCB0aHVzIHdlJ2xsIHN0aWxsIGRldGVjdAotdGhlICdzb2Z0JyBkZXBl bmRlbmN5KS4KK1dlIGNvdWxkIHNheSB0aGF0IHRoZSBmb3JtZXIgZGVwZW5k ZW5jeSBpcyBzdHJvbmdlciBiZWNhdXNlIGlmIGl0J3MgdmFsaWQsIHRoZW4K K3RoZSBzZWNvbmQgZGVwZW5kZW5jeSBpcyB2YWxpZCB0b28uCiAKIEhhbmRs aW5nIG11bHRpcGxlIGNvbHVtbnMgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhl IGRlcGVuZGVuY3ksIGlzIG5vdCBuZWNlc3NhcnksCiBhcyB0aG9zZSBkZXBl bmRlbmNpZXMgbWF5IGJlIHNpbXBseSBkZWNvbXBvc2VkIGludG8gYSBzZXQg b2YgZGVwZW5kZW5jaWVzIHdpdGgKQEAgLTE5OSwyNCArMTg2LDIyIEBAIGlz IGV4YWN0bHkgdGhlIHNhbWUgYXMKICAgICAoYSAtPiBiKSAmIChhIC0+IGMp CiAKIE9mIGNvdXJzZSwgc3RvcmluZyB0aGUgZmlyc3QgZm9ybSBtYXkgYmUg bW9yZSBlZmZpY2llbnQgdGhhbnQgc3RvcmluZyBtdWx0aXBsZQotJ3NpbXBs ZScgZGVwZW5kZW5jaWVzIHNlcGFyYXRlbHkuCi0KKydzaW1wbGUnIGRlcGVu ZGVuY2llcyBzZXBhcmF0ZWx5LiBUaGlzIGlzIGxlZnQgYXMgYSBmdXR1cmUg d29yay4KIAotVE9ETyBTdXBwb3J0IGRlcGVuZGVuY2llcyB3aXRoIG11bHRp cGxlIGNvbHVtbnMgb24gbGVmdC9yaWdodC4KIAotVE9ETyBJbnZlc3RpZ2F0 ZSB1c2luZyBoaXN0b2dyYW0gYW5kIE1DViBsaXN0IHRvIHZlcmlmeSB0aGUg ZGVwZW5kZW5jaWVzLgorRnV0dXJlIHdvcmsKKy0tLS0tLS0tLS0tCiAKLVRP RE8gSW52ZXN0aWdhdGUgc3RhdGlzdGljYWwgdGVzdGluZyBvZiB0aGUgZGlz dHJpYnV0aW9uICh0byBkZWNpZGUgd2hldGhlciBpdAotICAgICBtYWtlcyBz ZW5zZSB0byBidWlsZCB0aGUgaGlzdG9ncmFtL01DViBsaXN0KS4KKyogSW52 ZXN0aWdhdGUgdXNpbmcgaGlzdG9ncmFtIGFuZCBNQ1YgbGlzdCB0byB2ZXJp ZnkgdGhlIGRlcGVuZGVuY2llcy4KIAotVE9ETyBVc2luZyBhIG1pbi9tYXgg b2Ygc2VsZWN0aXZpdGllcyB3b3VsZCBwcm9iYWJseSBtYWtlIG1vcmUgc2Vu c2UgZm9yIHRoZQotICAgICBhc3NvY2lhdGVkIGNvbHVtbnMuCisqIEludmVz dGlnYXRlIHN0YXRpc3RpY2FsIHRlc3Rpbmcgb2YgdGhlIGRpc3RyaWJ1dGlv biAodG8gZGVjaWRlIHdoZXRoZXIgaXQKKyAgbWFrZXMgc2Vuc2UgdG8gYnVp bGQgdGhlIGhpc3RvZ3JhbS9NQ1YgbGlzdCkuCiAKLVRPRE8gQ29uc2lkZXIg ZWxpbWluYXRpbmcgdGhlIGltcGxpZWQgY29sdW1ucyBmcm9tIHRoZSBoaXN0 b2dyYW0gYW5kIE1DViBsaXN0cwotICAgICAoYnV0IG1heWJlIHRoYXQncyBu b3QgYSBnb29kIGlkZWEsIGJlY2F1c2UgdGhhdCdkIG1ha2UgaXQgaW1wb3Nz aWJsZSB0byB1c2UKLSAgICAgdGhlc2Ugc3RhdHMgZm9yIG5vbi1lcXVhbGl0 eSBjbGF1c2VzIGFuZCBhbHNvIGl0IHdvdWxkbid0IGJlIHBvc3NpYmxlIHRv Ci0gICAgIHVzZSB0aGUgc3RhdHMgZm9yIHZlcmlmaWNhdGlvbiBvZiB0aGUg ZGVwZW5kZW5jaWVzKS4KKyogQ29uc2lkZXIgZWxpbWluYXRpbmcgdGhlIGlt cGxpZWQgY29sdW1ucyBmcm9tIHRoZSBoaXN0b2dyYW0gYW5kIE1DViBsaXN0 cworICAoYnV0IG1heWJlIHRoYXQncyBub3QgYSBnb29kIGlkZWEsIGJlY2F1 c2UgdGhhdCdkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byB1c2UKKyAgdGhlc2Ug c3RhdHMgZm9yIG5vbi1lcXVhbGl0eSBjbGF1c2VzIGFuZCBhbHNvIGl0IHdv dWxkbid0IGJlIHBvc3NpYmxlIHRvCisgIHVzZSB0aGUgc3RhdHMgZm9yIHZl cmlmaWNhdGlvbiBvZiB0aGUgZGVwZW5kZW5jaWVzKS4KIAotVE9ETyBUaGUg cmVkdWN0aW9uIHByb2JhYmx5IG1pZ2h0IGJlIGV4dGVuZGVkIHRvIGFsc28g aGFuZGxlIElTIE5VTEwgY2xhdXNlcywKLSAgICAgYXNzdW1pbmcgd2UgZml4 IHRoZSBBTkFMWVpFIHRvIHByb3Blcmx5IGhhbmRsZSBOVUxMIHZhbHVlcy4g V2UgaG93ZXZlcgotICAgICB3b24ndCBiZSBhYmxlIHRvIHJlZHVjZSBJUyBO T1QgTlVMTCAodW5sZXNzIEknbSBtaXNzaW5nIHNvbWV0aGluZykuCisqIFRo ZSByZWR1Y3Rpb24gcHJvYmFibHkgbWlnaHQgYmUgZXh0ZW5kZWQgdG8gYWxz byBoYW5kbGUgSVMgTlVMTCBjbGF1c2VzLAorICBhc3N1bWluZyB3ZSBmaXgg dGhlIEFOQUxZWkUgdG8gcHJvcGVybHkgaGFuZGxlIE5VTEwgdmFsdWVzLiBX ZSBob3dldmVyCisgIHdvbid0IGJlIGFibGUgdG8gcmVkdWNlIElTIE5PVCBO VUxMICh1bmxlc3MgSSdtIG1pc3Npbmcgc29tZXRoaW5nKS4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzIGIv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4ZWE3YgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1F LnN0YXRzCkBAIC0wLDAgKzEsMzYgQEAKK011bHRpdmFyaWF0ZSBzdGF0aXN0 aXN0aWNzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIGVz dGltYXRpbmcgdmFyaW91cyBxdWFudGl0aWVzIChlLmcuIGNvbmRpdGlvbiBz ZWxlY3Rpdml0aWVzKSB0aGUgZGVmYXVsdAorYXBwcm9hY2ggcmVsaWVzIG9u IHRoZSBhc3N1bXB0aW9uIG9mIGluZGVwZW5kZW5jZS4gSW4gcHJhY3RpY2Ug dGhhdCdzIG9mdGVuCitub3QgdHJ1ZSwgcmVzdWx0aW5nIGluIGVzdGltYXRp b24gZXJyb3JzLgorCitNdWx0aXZhcmlhdGUgc3RhdHMgdHJhY2sgZGlmZmVy ZW50IHR5cGVzIG9mIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBjb2x1bW5z LAoraG9wZWZ1bGx5IGltcHJvdmluZyB0aGUgZXN0aW1hdGVzLgorCitDdXJy ZW50bHkgd2Ugb25seSBoYXZlIG9uZSBraW5kIG9mIG11bHRpdmFyaWF0ZSBz dGF0aXN0aWNzIC0gc29mdCBmdW5jdGlvbmFsCitkZXBlbmRlbmNpZXMsIGFu ZCB3ZSB1c2UgaXQgdG8gaW1wcm92ZSBlc3RpbWF0ZXMgb2YgZXF1YWxpdHkg Y2xhdXNlcy4gU2VlCitSRUFETUUuZGVwZW5kZW5jaWVzIGZvciBkZXRhaWxz LgorCisKK1NlbGVjdGl2aXR5IGVzdGltYXRpb24KKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworV2hlbiBlc3RpbWF0aW5nIHNlbGVjdGl2aXR5LCB3ZSBh aW0gdG8gYWNoaWV2ZSBzZXZlcmFsIHRoaW5nczoKKworICAgIChhKSBtYXhp bWl6ZSB0aGUgZXN0aW1hdGUgYWNjdXJhY3kKKworICAgIChiKSBtaW5pbWl6 ZSB0aGUgb3ZlcmhlYWQsIGVzcGVjaWFsbHkgd2hlbiBubyBzdWl0YWJsZSBt dWx0aXZhcmlhdGUgc3RhdHMKKyAgICAgICAgZXhpc3QgKHNvIGlmIHlvdSBh cmUgbm90IHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgdGhlcmUncyBubyBv dmVyaGVhZCkKKworVGhpcyBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KCkgcGVy Zm9ybXMgc2V2ZXJhbCBpbmV4cGVuc2l2ZSBjaGVja3MgZmlyc3QsIGJlZm9y ZQorZXZlbiBhdHRlbXB0aW5nIHRvIGRvIHRoZSBtb3JlIGV4cGVuc2l2ZSBl c3RpbWF0aW9uLgorCisgICAgKDEpIGNoZWNrIGlmIHRoZXJlIGFyZSBtdWx0 aXZhcmlhdGUgc3RhdHMgb24gdGhlIHJlbGF0aW9uCisKKyAgICAoMikgY2hl Y2sgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzIHJlZmVyZW5j ZWQgYnkgY2xhdXNlcyBjb21wYXRpYmxlCisgICAgICAgIHdpdGggbXVsdGl2 YXJpYXRlIHN0YXRpc3RpY3MgKGVxdWFsaXR5IGNsYXVzZXMgZm9yIGZ1bmMu IGRlcGVuZGVuY2llcykKKworICAgICgzKSBwZXJmb3JtIHJlZHVjdGlvbiBv ZiBlcXVhbGl0eSBjbGF1c2VzIHVzaW5nIGZ1bmMuIGRlcGVuZGVuY2llcwor CisgICAgKDQpIGVzdGltYXRlIHRoZSByZWR1Y2VkIGxpc3Qgb2YgY2xhdXNl cyB1c2luZyByZWd1bGFyIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgYi9zcmMvYmFja2VuZC91 dGlscy9tdnN0YXRzL2NvbW1vbi5jCmluZGV4IGE3NTVjNDkuLmRjYjdjNzgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYwpA QCAtODQsNyArODQsOCBAQCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVy ZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJCS8qCiAJCSAq IEFuYWx5emUgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgb2YgY29sdW1ucy4K IAkJICovCi0JCWRlcHMgPSBidWlsZF9tdl9kZXBlbmRlbmNpZXMobnVtcm93 cywgcm93cywgYXR0cnMsIHN0YXRzKTsKKwkJaWYgKHN0YXQtPmRlcHNfZW5h YmxlZCkKKwkJCWRlcHMgPSBidWlsZF9tdl9kZXBlbmRlbmNpZXMobnVtcm93 cywgcm93cywgYXR0cnMsIHN0YXRzKTsKIAogCQkvKiBzdG9yZSB0aGUgaGlz dG9ncmFtIC8gTUNWIGxpc3QgaW4gdGhlIGNhdGFsb2cgKi8KIAkJdXBkYXRl X212X3N0YXRzKHN0YXQtPm12b2lkLCBkZXBzLCBhdHRycyk7CkBAIC0xNjMs NiArMTY0LDcgQEAgbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpCiAKIAkJaW5m by0+bXZvaWQgPSBIZWFwVHVwbGVHZXRPaWQoaHR1cCk7CiAJCWluZm8tPnN0 YWtleXMgPSBidWlsZGludDJ2ZWN0b3Ioc3RhdHMtPnN0YWtleXMudmFsdWVz LCBzdGF0cy0+c3Rha2V5cy5kaW0xKTsKKwkJaW5mby0+ZGVwc19lbmFibGVk ID0gc3RhdHMtPmRlcHNfZW5hYmxlZDsKIAkJaW5mby0+ZGVwc19idWlsdCA9 IHN0YXRzLT5kZXBzX2J1aWx0OwogCiAJCXJlc3VsdCA9IGxhcHBlbmQocmVz dWx0LCBpbmZvKTsKQEAgLTI3NCw2ICsyNzYsNyBAQCBjb21wYXJlX3NjYWxh cnNfcGFydGl0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZv aWQgKmFyZykKIAlyZXR1cm4gQXBwbHlTb3J0Q29tcGFyYXRvcihkYSwgZmFs c2UsIGRiLCBmYWxzZSwgc3N1cCk7CiB9CiAKKwogLyogaW5pdGlhbGl6ZSBt dWx0aS1kaW1lbnNpb25hbCBzb3J0ICovCiBNdWx0aVNvcnRTdXBwb3J0CiBt dWx0aV9zb3J0X2luaXQoaW50IG5kaW1zKQpAQCAtMzU0LDMgKzM1NywyMyBA QCBtdWx0aV9zb3J0X2NvbXBhcmVfZGltKGludCBkaW0sIGNvbnN0IFNvcnRJ dGVtICphLCBjb25zdCBTb3J0SXRlbSAqYiwKIAkJCQkJCQkgICBiLT52YWx1 ZXNbZGltXSwgYi0+aXNudWxsW2RpbV0sCiAJCQkJCQkJICAgJm1zcy0+c3N1 cFtkaW1dKTsKIH0KKworaW50CittdWx0aV9zb3J0X2NvbXBhcmVfZGltcyhp bnQgc3RhcnQsIGludCBlbmQsCisJCQkJCQljb25zdCBTb3J0SXRlbSAqYSwg Y29uc3QgU29ydEl0ZW0gKmIsCisJCQkJCQlNdWx0aVNvcnRTdXBwb3J0IG1z cykKK3sKKwlpbnQgZGltOworCisJZm9yIChkaW0gPSBzdGFydDsgZGltIDw9 IGVuZDsgZGltKyspCisJeworCQlpbnQgciA9IEFwcGx5U29ydENvbXBhcmF0 b3IoYS0+dmFsdWVzW2RpbV0sIGEtPmlzbnVsbFtkaW1dLAorCQkJCQkJCQkJ Yi0+dmFsdWVzW2RpbV0sIGItPmlzbnVsbFtkaW1dLAorCQkJCQkJCQkJJm1z cy0+c3N1cFtkaW1dKTsKKworCQlpZiAociAhPSAwKQorCQkJcmV0dXJuIHI7 CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oIGIvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9jb21tb24uaAppbmRleCBkOTY0MjJkLi5hMDE5ZWE2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmgKQEAgLTcw LDYgKzcwLDkgQEAgaW50IG11bHRpX3NvcnRfY29tcGFyZShjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpOwogaW50IG11bHRpX3Nv cnRfY29tcGFyZV9kaW0oaW50IGRpbSwgY29uc3QgU29ydEl0ZW0gKmEsCiAJ CQkJCQkgICBjb25zdCBTb3J0SXRlbSAqYiwgTXVsdGlTb3J0U3VwcG9ydCBt c3MpOwogCitpbnQgbXVsdGlfc29ydF9jb21wYXJlX2RpbXMoaW50IHN0YXJ0 LCBpbnQgZW5kLCBjb25zdCBTb3J0SXRlbSAqYSwKKwkJCQkJCQljb25zdCBT b3J0SXRlbSAqYiwgTXVsdGlTb3J0U3VwcG9ydCBtc3MpOworCiAvKiBjb21w YXJhdG9ycywgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyBtdWx0aXZhcmlhdGUg c3RhdHMgKi8KIGludCBjb21wYXJlX3NjYWxhcnNfc2ltcGxlKGNvbnN0IHZv aWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZyk7CiBpbnQgY29tcGFy ZV9zY2FsYXJzX3BhcnRpdGlvbihjb25zdCB2b2lkICphLCBjb25zdCB2b2lk ICpiLCB2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9kZXBlbmRlbmNpZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvZGVwZW5kZW5jaWVzLmMKaW5kZXggMmEwNjRhMC4uNDEyZGMz MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBl bmRlbmNpZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2Rl cGVuZGVuY2llcy5jCkBAIC0xNywyOTMgKzE3LDUyMSBAQAogI2luY2x1ZGUg ImNvbW1vbi5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCisv KiBpbnRlcm5hbCBzdGF0ZSBmb3IgZ2VuZXJhdG9yIG9mIHZhcmlhdGlvbnMg KGstcGVybXV0YXRpb25zIG9mIG4gZWxlbWVudHMpICovCit0eXBlZGVmIHN0 cnVjdCBWYXJpYXRpb25HZW5lcmF0b3JEYXRhIHsKKworCWludCBrOwkJCQkJ Lyogc2l6ZSBvZiB0aGUgay1wZXJtdXRhdGlvbiAqLworCWludCBjdXJyZW50 OwkJCS8qIGluZGV4IG9mIHRoZSBuZXh0IHZhcmlhdGlvbiB0byByZXR1cm4g Ki8KKworCWludCBudmFyaWF0aW9uczsJCS8qIG51bWJlciBvZiB2YXJpYXRp b25zIGdlbmVyYXRlZCAoc2l6ZSBvZiBhcnJheSkgKi8KKwlpbnQJdmFyaWF0 aW9uc1sxXTsJCS8qIGFycmF5IG9mIHByZS1idWlsdCB2YXJpYXRpb25zICov CisKK30gVmFyaWF0aW9uR2VuZXJhdG9yRGF0YTsKKwordHlwZWRlZiBWYXJp YXRpb25HZW5lcmF0b3JEYXRhKiBWYXJpYXRpb25HZW5lcmF0b3I7CisKKy8q CisgKiBnZW5lcmF0ZSBhbGwgdmFyaWF0aW9ucyAoay1wZXJtdXRhdGlvbnMg b2YgbiBlbGVtZW50cykKKyAqLworc3RhdGljIHZvaWQKK2dlbmVyYXRlX3Zh cmlhdGlvbnMoVmFyaWF0aW9uR2VuZXJhdG9yIHN0YXRlLAorCQkJCQlpbnQg biwgaW50IG1heGxldmVsLCBpbnQgbGV2ZWwsIGludCAqY3VycmVudCkKK3sK KwlpbnQgaSwgajsKKworCS8qIGluaXRpYWxpemUgKi8KKwlpZiAobGV2ZWwg PT0gMCkKKwl7CisJCWN1cnJlbnQgPSAoaW50KilwYWxsb2MwKHNpemVvZihp bnQpICogKG1heGxldmVsKzEpKTsKKwkJc3RhdGUtPmN1cnJlbnQgPSAwOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJeworCQkvKiBjaGVj ayBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSB1c2VkIGN1cnJlbnQgdmFyaWF0 aW9uICovCisJCWJvb2wgZm91bmQgPSBmYWxzZTsKKwkJZm9yIChqID0gMDsg aiA8IGxldmVsOyBqKyspCisJCXsKKwkJCWlmIChjdXJyZW50W2pdID09IGkp CisJCQl7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJLyogYWxyZWFkeSB1c2VkLCBzbyB0cnkgdGhlIG5leHQgZWxl bWVudCAqLworCQlpZiAoZm91bmQpCisJCQljb250aW51ZTsKKworCQkvKiBv aywgd2UgY2FuIHVzZSB0aGlzIGVsZW1lbnQsIHNvIHN0b3JlIGl0ICovCisJ CWN1cnJlbnRbbGV2ZWxdID0gaTsKKworCQkvKiBhbmQgY2hlY2sgaWYgd2Ug ZG8gaGF2ZSBhIGNvbXBsZXRlIHZhcmlhdGlvbiBvZiBrIGVsZW1lbnRzICov CisJCWlmIChsZXZlbCA9PSBtYXhsZXZlbCkKKwkJeworCQkJLyogeWVwLCBz dG9yZSB0aGUgdmFyaWF0aW9uICovCisJCQlBc3NlcnQoc3RhdGUtPmN1cnJl bnQgPCBzdGF0ZS0+bnZhcmlhdGlvbnMpOworCQkJbWVtY3B5KCZzdGF0ZS0+ dmFyaWF0aW9uc1soc3RhdGUtPmsgKiBzdGF0ZS0+Y3VycmVudCldLCBjdXJy ZW50LAorCQkJCSAgIHNpemVvZihpbnQpICogKG1heGxldmVsKzEpKTsKKwkJ CXN0YXRlLT5jdXJyZW50Kys7CisJCX0KKwkJZWxzZQorCQkJLyogbm9wZSwg bG9vayBmb3IgYWRkaXRpb25hbCBlbGVtZW50cyAqLworCQkJZ2VuZXJhdGVf dmFyaWF0aW9ucyhzdGF0ZSwgbiwgbWF4bGV2ZWwsIGxldmVsKzEsIGN1cnJl bnQpOworCX0KKworCWlmIChsZXZlbCA9PSAwKQorCQlwZnJlZShjdXJyZW50 KTsKK30KKwogLyoKLSAqIERldGVjdCBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cyBiZXR3ZWVuIGNvbHVtbnMuCisgKiBpbml0aWFsaXplIHRoZSBnZW5lcmF0 b3Igb2YgdmFyaWF0aW9ucywgYW5kIHByZWJ1aWxkIHRoZSB2YXJpYXRpb25z CiAgKgotICogVE9ETyBUaGlzIGJ1aWxkcyBhIGNvbXBsZXRlIHNldCBvZiBk ZXBlbmRlbmNpZXMsIGkuZS4gaW5jbHVkaW5nIHRyYW5zaXRpdmUKLSAqICAg ICAgZGVwZW5kZW5jaWVzIC0gaWYgd2UgaWRlbnRpZnkgW0EgPT4gQl0gYW5k IFtCID0+IENdLCB3ZSdyZSBsaWtlbHkgdG8KLSAqICAgICAgaWRlbnRpZnkg W0EgPT4gQ10gdG9vLiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gIGtlZXAgb25s eSB0aGUgbWluaW1hbCBzZXQKLSAqICAgICAgb2YgZGVwZW5kZW5jaWVzLCBp LmUuIHBydW5lIGFsbCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgd2UgY2FuIHJl Y3JlYXRlCi0gKiAgICAgIGJ5IHRyYW5zaXZpdGl0eS4KLSAqIAotICogICAg ICBUaGVyZSBhcmUgdHdvIGNvbmNlcHR1YWwgd2F5cyB0byBkbyB0aGF0Ogot ICogCi0gKiAgICAgIChhKSBnZW5lcmF0ZSBhbGwgdGhlIHJ1bGVzLCBhbmQg dGhlbiBwcnVuZSB0aGUgcnVsZXMgdGhhdCBtYXkgYmUKLSAqICAgICAgICAg IHJlY3RlYXRlZCBieSBjb21iaW5pbmcgb3RoZXIgZGVwZW5kZW5jaWVzLCBv cgotICogCi0gKiAgICAgIChiKSBwZXJmb3JtaW5nIHRoZSAnaXMgY29tYmlu YXRpb24gb2Ygb3RoZXIgZGVwZW5kZW5jaWVzJyBjaGVjayBiZWZvcmUKLSAq ICAgICAgICAgIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrCi0gKiAKLSAqICAg ICAgVGhlIHNlY29uZCBvcHRpb24gaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB3 ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwZXJmb3JtCi0gKiAgICAgIHRoZSBz b3J0L2NvdW50LiBJdCdzIG5vdCBzdWZmaWNpZW50IGFsb25lLCB0aG91Z2gs IGJlY2F1c2Ugd2UgbWF5Ci0gKiAgICAgIGRpc2NvdmVyIHRoZSBkZXBlbmRl bmNpZXMgaW4gdGhlIHdyb25nIG9yZGVyLiBGb3IgZXhhbXBsZSB3ZSBtYXkg ZmluZAorICogVGhpcyBwcmUtYnVpbGRzIGFsbCB0aGUgdmFyaWF0aW9ucy4g V2UgY291bGQgYWxzbyBnZW5lcmF0ZSB0aGVtIGluCisgKiBnZW5lcmF0b3Jf bmV4dCgpLCBidXQgdGhpcyBzZWVtcyBzaW1wbGVyLgorICovCitzdGF0aWMg VmFyaWF0aW9uR2VuZXJhdG9yCitnZW5lcmF0b3JfaW5pdChpbnQydmVjdG9y ICphdHRycywgaW50IGspCit7CisJaW50CWk7CisJaW50CW4gPSBhdHRycy0+ ZGltMTsKKwlpbnQJbnZhcmlhdGlvbnM7CisJVmFyaWF0aW9uR2VuZXJhdG9y CXN0YXRlOworCisJQXNzZXJ0KChuID49IGspICYmICAoayA+IDApKTsKKwor CS8qIGNvbXB1dGUgdGhlIHRvdGFsIG51bWJlciBvZiB2YXJpYXRpb25zIGFz IG4hLyhuLWspISAqLworCW52YXJpYXRpb25zID0gbjsKKwlmb3IgKGkgPSAx OyBpIDwgazsgaSsrKQorCQludmFyaWF0aW9ucyAqPSAobiAtIGkpOworCisJ LyogYWxsb2NhdGUgdGhlIGdlbmVyYXRvciBzdGF0ZSBhcyBhIHNpbmdsZSBj aHVuayBvZiBtZW1vcnkgKi8KKwlzdGF0ZSA9IChWYXJpYXRpb25HZW5lcmF0 b3IpcGFsbG9jMCgKKwkJCQkJb2Zmc2V0b2YoVmFyaWF0aW9uR2VuZXJhdG9y RGF0YSwgdmFyaWF0aW9ucykKKwkJCQkJKyAobnZhcmlhdGlvbnMgKiBrICog c2l6ZW9mKGludCkpKTsJLyogdmFyaWF0aW9ucyAqLworCisJc3RhdGUtPm52 YXJpYXRpb25zID0gbnZhcmlhdGlvbnM7CisJc3RhdGUtPmsgPSBrOworCisJ Lyogbm93IGFjdHVhbGx5IHByZS1nZW5lcmF0ZSBhbGwgdGhlIHZhcmlhdGlv bnMgKi8KKwlnZW5lcmF0ZV92YXJpYXRpb25zKHN0YXRlLCBuLCAoay0xKSwg MCwgTlVMTCk7CisKKwkvKiB3ZSBleHBlY3QgdG8gZ2VuZXJhdGUgZXhhY3Rs eSB0aGUgcmlnaHQgbnVtYmVyIG9mIHZhcmlhdGlvbnMgKi8KKwlBc3NlcnQo c3RhdGUtPm52YXJpYXRpb25zID09IHN0YXRlLT5jdXJyZW50KTsKKworCS8q IHJlc2V0IHRoZSBpbmRleCAqLworCXN0YXRlLT5jdXJyZW50ID0gMDsKKwor CXJldHVybiBzdGF0ZTsKK30KKworLyogZnJlZSB0aGUgZ2VuZXJhdG9yIHN0 YXRlICovCitzdGF0aWMgdm9pZAorZ2VuZXJhdG9yX2ZyZWUoVmFyaWF0aW9u R2VuZXJhdG9yIHN0YXRlKQoreworCS8qIHdlJ3ZlIGFsbG9jYXRlZCBhIHNp bmdsZSBjaHVuaywgc28ganVzdCBmcmVlIGl0ICovCisJcGZyZWUoc3RhdGUp OworfQorCisvKiBnZW5lcmF0ZSBuZXh0IGNvbWJpbmF0aW9uICovCitzdGF0 aWMgaW50KgorZ2VuZXJhdG9yX25leHQoVmFyaWF0aW9uR2VuZXJhdG9yIHN0 YXRlLCBpbnQydmVjdG9yICphdHRycykKK3sKKwlpZiAoc3RhdGUtPmN1cnJl bnQgPT0gc3RhdGUtPm52YXJpYXRpb25zKQorCQlyZXR1cm4gTlVMTDsKKwor CXJldHVybiAmc3RhdGUtPnZhcmlhdGlvbnNbc3RhdGUtPmsgKiBzdGF0ZS0+ Y3VycmVudCsrXTsKK30KKworLyoKKyAqIGNoZWNrIGlmIHRoZSBkZXBlbmRl bmN5IGlzIGltcGxpZWQgYnkgZXhpc3RpbmcgZGVwZW5kZW5jaWVzCisgKgor ICogQSBkZXBlbmRlbmN5IGlzIGNvbnNpZGVyZWQgaW1wbGllZCwgaWYgdGhl cmUgZXhpc3RzIGEgZGVwZW5kZW5jeSB3aXRoIHRoZQorICogc2FtZSBjb2x1 bW4gb24gdGhlIGxlZnQsIGFuZCBhIHN1YnNldCBvZiBjb2x1bW5zIG9uIHRo ZSByaWdodCBzaWRlLiBTbyBmb3IKKyAqIGV4YW1wbGUgaWYgd2UgaGF2ZSBh IGRlcGVuZGVuY3kKKyAqCisgKiAgICAgKGEsYixjKSAtPiBkCiAgKgotICog ICAgICAgICAgKGEgLT4gYiksIChhIC0+IGMpIGFuZCB0aGVuIChiIC0+IGMp CisgKiB0aGVuIHdlIGFyZSBsb29raW5nIGZvciB0aGVzZSBzaXggZGVwZW5k ZW5jaWVzCiAgKgotICogICAgICBOb25lIG9mIHRob3NlIGRlcGVuZGVuY2ll cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBhbHJlYWR5IGtub3duIG9uZXMs Ci0gKiAgICAgIHlldCAoYSAtPiBDKSBpcyBhIGNvbWJpbmF0aW9uIG9mIChh IC0+IGIpIGFuZCAoYiAtPiBjKS4KKyAqICAgICAoYSkgLT4gZAorICogICAg IChiKSAtPiBkCisgKiAgICAgKGMpIC0+IGQKKyAqICAgICAoYSxiKSAtPiBk CisgKiAgICAgKGEsYykgLT4gZAorICogICAgIChiLGMpIC0+IGQKICAqCi0g KiAKLSAqIEZJWE1FIEN1cnJlbnRseSB3ZSBzaW1wbHkgcmVwbGFjZSBOVUxM IHZhbHVlcyB3aXRoIDAgYW5kIHRoZW4gaGFuZGxlIGlzIGFzCi0gKiAgICAg ICBhIHJlZ3VsYXIgdmFsdWUsIGJ1dCB0aGF0IGdyb3VwcyBOVUxMIGFuZCBh Y3R1YWwgMCB2YWx1ZXMuIFRoYXQncwotICogICAgICAgY2xlYXJseSBpbmNv cnJlY3QgLSB3ZSBuZWVkIHRvIGhhbmRsZSBOVUxMIHZhbHVlcyBhcyBhIHNl cGFyYXRlIHZhbHVlLgorICogVGhpcyBkb2VzIG5vdCBkZXRlY3QgdHJhbnNp dGl2ZSBkZXBlbmRlbmNpZXMuIEZvciBleGFtcGxlIGlmIHdlIGhhdmUKKyAq CisgKiAgICAgKGEpIC0+IGIKKyAqICAgICAoYikgLT4gYworICoKKyAqIHRo ZW4gb2J2aW91c2x5CisgKgorICogICAgIChhKSAtPiBjCisgKgorICogYnV0 IHRoaXMgaXMgbm90IGRldGVjdGVkLiBFeHRlbmRpbmcgdGhlIG1ldGhvZCB0 byBoYW5kbGUgdHJhbnNpdGl2ZSBjYXNlcworICogaXMgZnV0dXJlIHdvcmsu CiAgKi8KLU1WRGVwZW5kZW5jaWVzCi1idWlsZF9tdl9kZXBlbmRlbmNpZXMo aW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0 cnMsCi0JCQkJCSAgVmFjQXR0clN0YXRzICoqc3RhdHMpCitzdGF0aWMgYm9v bAorZGVwZW5kZW5jeV9pc19pbXBsaWVkKE1WRGVwZW5kZW5jaWVzIGRlcGVu ZGVuY2llcywgaW50IGssIGludCAqZGVwZW5kZW5jeSwKKwkJCQkJICBpbnQy dmVjdG9yICogYXR0cnMpCiB7Ci0JaW50IGk7Ci0JaW50IG51bWF0dHJzID0g YXR0cnMtPmRpbTE7CisJYm9vbAlpbXBsaWVkID0gZmFsc2U7CisJaW50CQlp LCBqLCBsOworCWludAkgICAqdG1wOwogCi0JLyogcmVzdWx0ICovCi0JaW50 IG5kZXBzID0gMDsKLQlNVkRlcGVuZGVuY2llcwlkZXBlbmRlbmNpZXMgPSBO VUxMOwotCU11bHRpU29ydFN1cHBvcnQgbXNzID0gbXVsdGlfc29ydF9pbml0 KDIpOwkvKiAyIGRpbWVuc2lvbnMgZm9yIG5vdyAqLworCWlmIChkZXBlbmRl bmNpZXMgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwogCi0JLyogVE9ETyBN YXliZSB0aGlzIHNob3VsZCBiZSBzb21laG93IHJlbGF0ZWQgdG8gdGhlIG51 bWJlciBvZgotCSAqICAgICAgZGlzdGluY3QgdmFsdWVzIGluIHRoZSB0d28g Y29sdW1ucyB3ZSdyZSBjdXJyZW50bHkgYW5hbHl6aW5nLgotCSAqICAgICAg QXNzdW1pbmcgdGhlIGRpc3RyaWJ1dGlvbiBpcyB1bmlmb3JtLCB3ZSBjYW4g ZXN0aW1hdGUgdGhlCi0JICogICAgICBhdmVyYWdlIGdyb3VwIHNpemUgYW5k IHVzZSBpdCBhcyBhIHRocmVzaG9sZC4gT3Igc29tZXRoaW5nCi0JICogICAg ICBsaWtlIHRoYXQuIFNlZW1zIGJldHRlciB0aGFuIGEgc3RhdGljIGFwcHJv YWNoLgotCSAqLwotCWludCBtaW5fZ3JvdXBfc2l6ZSA9IDM7CisJdG1wID0g KGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIGspOworCisJLyogdHJhbnNs YXRlIHRoZSBpbmRleGVzIHRvIGFjdHVhbCBhdHRyaWJ1dGUgbnVtYmVycyAq LworCWZvciAoaSA9IDA7IGkgPCBrOyBpKyspCisJCXRtcFtpXSA9IGF0dHJz LT52YWx1ZXNbZGVwZW5kZW5jeVtpXV07CisKKwkvKiBzZWFyY2ggZm9yIGEg c21hbGxlciAqLworCWZvciAoaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMtPm5k ZXBzOyBpKyspCisJeworCQlib29sIGNvbnRhaW5lZCA9IHRydWU7CisJCU1W RGVwZW5kZW5jeSBkZXAgPSBkZXBlbmRlbmNpZXMtPmRlcHNbaV07CisKKwkJ LyogZG9lcyB0aGUgbGFzdCBhdHRyaWJ1dGUgbWF0Y2g/ICovCisJCWlmICh0 bXBbay0xXSAhPSBkZXAtPmF0dHJpYnV0ZXNbZGVwLT5uYXR0cmlidXRlcy0x XSkKKwkJCWNvbnRpbnVlOwkvKiBub3BlLCBubyBuZWVkIHRvIGNoZWNrIHRo aXMgZGVwZW5kZW5jeSBmdXJ0aGVyICovCisKKwkJLyogYXJlIHRoZSBjb25k aXRpb25zIHN1cGVyc2V0IG9mIHRoZSBleGlzdGluZyBkZXBlbmRlbmN5PyAq LworCQlmb3IgKGogPSAwOyBqIDwgKGRlcC0+bmF0dHJpYnV0ZXMtMSk7IGor KykKKwkJeworCQkJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJCQlmb3IgKGwg PSAwOyBsIDwgKGstMSk7IGwrKykKKwkJCXsKKwkJCQlpZiAodG1wW2xdID09 IGRlcC0+YXR0cmlidXRlc1tqXSkKKwkJCQl7CisJCQkJCWZvdW5kID0gdHJ1 ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKiB3ZSd2ZSBm b3VuZCBhbiBhdHRyaWJ1dGUgbm90IGluY2x1ZGVkIGluIHRoZSBuZXcgZGVw ZW5kZW5jeSAqLworCQkJaWYgKCEgZm91bmQpCisJCQl7CisJCQkJY29udGFp bmVkID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiB3 ZSd2ZSBmb3VuZCBhbiBleGlzdGluZyBkZXBlbmRlbmN5LCB0cml2aWFsbHkg cHJvdmluZyB0aGUgbmV3IG9uZSAqLworCQlpZiAoY29udGFpbmVkKQorCQl7 CisJCQlpbXBsaWVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQogCi0J LyogZGltZW5zaW9uIGluZGV4ZXMgd2UnbGwgY2hlY2sgZm9yIGFzc29jaWF0 aW9ucyBbYSA9PiBiXSAqLwotCWludCBkaW1hLCBkaW1iOworCXBmcmVlKHRt cCk7CisKKwlyZXR1cm4gaW1wbGllZDsKK30KKworLyoKKyAqIHZhbGlkYXRl cyBmdW5jdGlvbmFsIGRlcGVuZGVuY3kgb24gdGhlIGRhdGEKKyAqCisgKiBB biBhY3R1YWwgd29yayBob3JzZSBvZiBkZXRlY3RpbmcgZnVuY3Rpb25hbCBk ZXBlbmRlbmNpZXMuIEdpdmVuIGEgdmFyaWF0aW9uCisgKiBvZiBrIGF0dHJp YnV0ZXMsIGl0IGNoZWNrcyB0aGF0IHRoZSBmaXJzdCAoay0xKSBhcmUgc3Vm ZmljaWVudCB0byBkZXRlcm1pbmUKKyAqIHRoZSBsYXN0IG9uZS4KKyAqLwor c3RhdGljIGJvb2wKK2RlcGVuZGVuY3lfaXNfdmFsaWQoaW50IG51bXJvd3Ms IEhlYXBUdXBsZSAqcm93cywgaW50IGssIGludCAqIGRlcGVuZGVuY3ksCisJ CQkJCVZhY0F0dHJTdGF0cyAqKnN0YXRzLCBpbnQydmVjdG9yICphdHRycykK K3sKKwlpbnQgaSwgajsKKwlpbnQgbnZhbHVlcyA9IG51bXJvd3MgKiBrOwog CiAJLyoKLQkgKiBXZSdsbCByZXVzZSB0aGUgc2FtZSBhcnJheSBmb3IgYWxs IHRoZSAyLWNvbHVtbiBjb21iaW5hdGlvbnMuCi0JICoKLQkgKiBJdCdzIHBv c3NpYmxlIHRvIHNvcnQgdGhlIHNhbXBsZSByb3dzIGRpcmVjdGx5LCBidXQg dGhpcyBzZWVtZWQKLQkgKiBzb21laG93IHNpbXBsZXMgLyBsZXNzIGVycm9y IHByb25lLiBBbm90aGVyIG9wdGlvbiB3b3VsZCBiZSB0bwotCSAqIGFsbG9j YXRlIHRoZSBhcnJheXMgZm9yIGVhY2ggU29ydEl0ZW0gc2VwYXJhdGVseSwg YnV0IHRoYXQnZCBiZQotCSAqIHNpZ25pZmljYW50IG92ZXJoZWFkIChub3Qg anVzdCBDUFUsIGJ1dCBlc3BlY2lhbGx5IG1lbW9yeSBibG9hdCkuCisJICog WFhYIE1heWJlIHRoZSB0aHJlc2hvbGQgc2hvdWxkIGJlIHNvbWVob3cgcmVs YXRlZCB0byB0aGUgbnVtYmVyIG9mCisJICogICAgIGRpc3RpbmN0IHZhbHVl cyBpbiB0aGUgY29tYmluYXRpb24gb2YgY29sdW1ucyB3ZSdyZSBhbmFseXpp bmcuCisJICogICAgIEFzc3VtaW5nIHRoZSBkaXN0cmlidXRpb24gaXMgdW5p Zm9ybSwgd2UgY2FuIGVzdGltYXRlIHRoZSBhdmVyYWdlCisJICogICAgIGdy b3VwIHNpemUgYW5kIHVzZSBpdCBhcyBhIHRocmVzaG9sZCwgc2ltaWxhcmx5 IHRvIHdoYXQgd2UgZG8gZm9yCisJICogICAgIE1DViBsaXN0cy4KIAkgKi8K LQlTb3J0SXRlbSAqIGl0ZW1zID0gKFNvcnRJdGVtKilwYWxsb2MwKG51bXJv d3MgKiBzaXplb2YoU29ydEl0ZW0pKTsKKwlpbnQgbWluX2dyb3VwX3NpemUg PSAzOworCisJLyogbnVtYmVyIG9mIGdyb3VwcyBzdXBwb3J0aW5nIC8gY29u dHJhZGljdGluZyB0aGUgZGVwZW5kZW5jeSAqLworCWludCBuX3N1cHBvcnRp bmcgPSAwOworCWludCBuX2NvbnRyYWRpY3RpbmcgPSAwOworCisJLyogY291 bnRlcnMgdmFsaWQgd2l0aGluIGEgZ3JvdXAgKi8KKwlpbnQgZ3JvdXBfc2l6 ZSA9IDA7CisJaW50IG5fdmlvbGF0aW9ucyA9IDA7CiAKLQlEYXR1bSAqdmFs dWVzID0gKERhdHVtKilwYWxsb2MwKHNpemVvZihEYXR1bSkgKiBudW1yb3dz ICogMik7Ci0JYm9vbCAgKmlzbnVsbCA9IChib29sKilwYWxsb2MwKHNpemVv Zihib29sKSAqIG51bXJvd3MgKiAyKTsKKwlpbnQgbl9zdXBwb3J0aW5nX3Jv d3MgPSAwOworCWludCBuX2NvbnRyYWRpY3Rpbmdfcm93cyA9IDA7CiAKKwkv KiBzb3J0IGluZm8gZm9yIGFsbCBhdHRyaWJ1dGVzIGNvbHVtbnMgKi8KKwlN dWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRpX3NvcnRfaW5pdChrKTsKKwor CS8qIGRhdGEgZm9yIHRoZSBzb3J0ICovCisJU29ydEl0ZW0gKml0ZW1zICA9 IChTb3J0SXRlbSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVt KSk7CisJRGF0dW0gICAgKnZhbHVlcyA9IChEYXR1bSopcGFsbG9jMChzaXpl b2YoRGF0dW0pICogbnZhbHVlcyk7CisJYm9vbCAgICAgKmlzbnVsbCA9IChi b29sKilwYWxsb2MwKHNpemVvZihib29sKSAqIG52YWx1ZXMpOworCisJLyog Zml4IHRoZSBwb2ludGVycyB0byB2YWx1ZXMvaXNudWxsICovCiAJZm9yIChp ID0gMDsgaSA8IG51bXJvd3M7IGkrKykKIAl7Ci0JCWl0ZW1zW2ldLnZhbHVl cyA9ICZ2YWx1ZXNbaSAqIDJdOwotCQlpdGVtc1tpXS5pc251bGwgPSAmaXNu dWxsW2kgKiAyXTsKKwkJaXRlbXNbaV0udmFsdWVzID0gJnZhbHVlc1tpICog a107CisJCWl0ZW1zW2ldLmlzbnVsbCA9ICZpc251bGxbaSAqIGtdOwogCX0K IAotCUFzc2VydChudW1hdHRycyA+PSAyKTsKLQogCS8qCi0JICogRXZhbHVh dGUgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiBbQSA9PiBCXSwgdXNp bmcgYSBzaW1wbGUgYWxnb3JpdGhtOgorCSAqIFZlcmlmeSB0aGUgZGVwZW5k ZW5jeSAoYSxiLC4uLiktPnosIHVzaW5nIGEgcmF0aGVyIHNpbXBsZSBhbGdv cml0aG06CisJICoKKwkgKiAoYSkgc29ydCB0aGUgZGF0YSBsZXhpY29ncmFw aGljYWxseQogCSAqCi0JICogKGEpIHNvcnQgdGhlIGRhdGEgYnkgW0EsQl0K LQkgKiAoYikgc3BsaXQgdGhlIGRhdGEgaW50byBncm91cHMgYnkgQSAobmV3 IGdyb3VwIHdoZW5ldmVyIGEgdmFsdWUgY2hhbmdlcykKLQkgKiAoYykgY291 bnQgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgQiBjb2x1bW4gKGFnYWluLCB2 YWx1ZSBjaGFuZ2VzKQorCSAqIChiKSBzcGxpdCB0aGUgZGF0YSBpbnRvIGdy b3VwcyBieSBmaXJzdCAoay0xKSBjb2x1bW5zCiAJICoKLQkgKiBUT0RPIEl0 IHNob3VsZCBiZSByYXRoZXIgc2ltcGxlIHRvIG1lcmdlIFtBID0+IEJdIGFu ZCBbQSA9PiBDXSBpbnRvCi0JICogICAgICBbQSA9PiBCLENdLiBKdXN0IGtl ZXAgQSBjb25zdGFudCwgY29sbGVjdCBhbGwgdGhlICJpbXBsaWVkIiBjb2x1 bW5zCi0JICogICAgICBhbmQgeW91J3JlIGRvbmUuCisJICogKGMpIGZvciBl YWNoIGdyb3VwIGNvdW50IGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxhc3Qg Y29sdW1uCiAJICovCi0JZm9yIChkaW1hID0gMDsgZGltYSA8IG51bWF0dHJz OyBkaW1hKyspCisKKwkvKiBwcmVwYXJlIHRoZSBzb3J0IGZ1bmN0aW9uIGZv ciB0aGUgZmlyc3QgZGltZW5zaW9uLCBhbmQgU29ydEl0ZW0gYXJyYXkgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgazsgaSsrKQogCXsKLQkJLyogcHJlcGFyZSB0 aGUgc29ydCBmdW5jdGlvbiBmb3IgdGhlIGZpcnN0IGRpbWVuc2lvbiAqLwot CQltdWx0aV9zb3J0X2FkZF9kaW1lbnNpb24obXNzLCAwLCBkaW1hLCBzdGF0 cyk7CisJCW11bHRpX3NvcnRfYWRkX2RpbWVuc2lvbihtc3MsIGksIGRlcGVu ZGVuY3lbaV0sIHN0YXRzKTsKIAotCQlmb3IgKGRpbWIgPSAwOyBkaW1iIDwg bnVtYXR0cnM7IGRpbWIrKykKKwkJLyogYWNjdW11bGF0ZSBhbGwgdGhlIGRh dGEgZm9yIGJvdGggY29sdW1ucyBpbnRvIGFuIGFycmF5IGFuZCBzb3J0IGl0 ICovCisJCWZvciAoaiA9IDA7IGogPCBudW1yb3dzOyBqKyspCiAJCXsKLQkJ CVNvcnRJdGVtIGN1cnJlbnQ7Ci0KLQkJCS8qIG51bWJlciBvZiBncm91cHMg c3VwcG9ydGluZyAvIGNvbnRyYWRpY3RpbmcgdGhlIGRlcGVuZGVuY3kgKi8K LQkJCWludCBuX3N1cHBvcnRpbmcgPSAwOwotCQkJaW50IG5fY29udHJhZGlj dGluZyA9IDA7Ci0KLQkJCS8qIGNvdW50ZXJzIHZhbGlkIHdpdGhpbiBhIGdy b3VwICovCi0JCQlpbnQgZ3JvdXBfc2l6ZSA9IDA7Ci0JCQlpbnQgbl92aW9s YXRpb25zID0gMDsKLQotCQkJaW50IG5fc3VwcG9ydGluZ19yb3dzID0gMDsK LQkJCWludCBuX2NvbnRyYWRpY3Rpbmdfcm93cyA9IDA7Ci0KLQkJCS8qIG1h a2Ugc3VyZSB0aGUgY29sdW1ucyBhcmUgZGlmZmVyZW50IChBID0+IEEpICov Ci0JCQlpZiAoZGltYSA9PSBkaW1iKQotCQkJCWNvbnRpbnVlOwotCi0JCQkv KiBwcmVwYXJlIHRoZSBzb3J0IGZ1bmN0aW9uIGZvciB0aGUgc2Vjb25kIGRp bWVuc2lvbiAqLwotCQkJbXVsdGlfc29ydF9hZGRfZGltZW5zaW9uKG1zcywg MSwgZGltYiwgc3RhdHMpOwotCi0JCQkvKiByZXNldCB0aGUgdmFsdWVzIGFu ZCBpc251bGwgZmxhZ3MgKi8KLQkJCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVv ZihEYXR1bSkgKiBudW1yb3dzICogMik7Ci0JCQltZW1zZXQoaXNudWxsLCAw LCBzaXplb2YoYm9vbCkgICogbnVtcm93cyAqIDIpOworCQkJaXRlbXNbal0u dmFsdWVzW2ldCisJCQkJPSBoZWFwX2dldGF0dHIocm93c1tqXSwgYXR0cnMt PnZhbHVlc1tkZXBlbmRlbmN5W2ldXSwKKwkJCQkJCQkgICBzdGF0c1tpXS0+ dHVwRGVzYywgJml0ZW1zW2pdLmlzbnVsbFtpXSk7CisJCX0KKwl9CiAKLQkJ CS8qIGFjY3VtdWxhdGUgYWxsIHRoZSBkYXRhIGZvciBib3RoIGNvbHVtbnMg aW50byBhbiBhcnJheSBhbmQgc29ydCBpdCAqLwotCQkJZm9yIChpID0gMDsg aSA8IG51bXJvd3M7IGkrKykKLQkJCXsKLQkJCQlpdGVtc1tpXS52YWx1ZXNb MF0KLQkJCQkJPSBoZWFwX2dldGF0dHIocm93c1tpXSwgYXR0cnMtPnZhbHVl c1tkaW1hXSwKLQkJCQkJCQkJCXN0YXRzW2RpbWFdLT50dXBEZXNjLCAmaXRl bXNbaV0uaXNudWxsWzBdKTsKKwkvKiBzb3J0IHRoZSBpdGVtcyBzbyB0aGF0 IHdlIGNhbiBkZXRlY3QgdGhlIGdyb3VwcyAqLworCXFzb3J0X2FyZygodm9p ZCAqKSBpdGVtcywgbnVtcm93cywgc2l6ZW9mKFNvcnRJdGVtKSwKKwkJCSAg bXVsdGlfc29ydF9jb21wYXJlLCBtc3MpOwogCi0JCQkJaXRlbXNbaV0udmFs dWVzWzFdCi0JCQkJCT0gaGVhcF9nZXRhdHRyKHJvd3NbaV0sIGF0dHJzLT52 YWx1ZXNbZGltYl0sCi0JCQkJCQkJCQlzdGF0c1tkaW1iXS0+dHVwRGVzYywg Jml0ZW1zW2ldLmlzbnVsbFsxXSk7Ci0JCQl9CisJLyoKKwkgKiBXYWxrIHRo cm91Z2ggdGhlIHNvcnRlZCBhcnJheSwgc3BsaXQgaXQgaW50byByb3dzIGFj Y29yZGluZyB0byB0aGUgZmlyc3QKKwkgKiAoay0xKSBjb2x1bW5zLiBJZiB0 aGVyZSdzIGEgc2luZ2xlIHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiwgd2Ug Y291bnQKKwkgKiB0aGUgZ3JvdXAgYXMgJ3N1cHBvcnRpbmcnIHRoZSBmdW5j dGlvbmFsIGRlcGVuZGVuY3kuIE90aGVyd2lzZSB3ZSBjb3VudAorCSAqIGl0 IGFzIGNvbnRyYWRpY3RpbmcuCisJICoKKwkgKiBXZSBhbHNvIHJlcXVpcmUg YSBncm91cCB0byBoYXZlIGEgbWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBi ZSBjb25zaWRlcmVkCisJICogdXNlZnVsIGZvciBzdXBwb3J0aW5nIHRoZSBk ZXBlbmRlbmN5LiBDb250cmFkaWN0aW5nIGdyb3VwcyBtYXkgYmUgb2YKKwkg KiBhbnkgc2l6ZSwgdGhvdWdoLgorCSAqCisJICogWFhYIFRoZSBtaW5pbXVt IHNpemUgcmVxdWlyZW1lbnQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBpZGVu dGlmeSBjYXNlCisJICogICAgIHdoZW4gYm90aCBjb2x1bW5zIGFyZSB1bmlx dWUgKG9yIG5lYXJseSB1bmlxdWUpLCBhbmQgdGhlcmVmb3JlCisJICogICAg IHRyaXZpYWxseSBmdW5jdGlvbmFsbHkgZGVwZW5kZW50LgorCSAqLwogCi0J CQlxc29ydF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJvd3MsIHNpemVvZihT b3J0SXRlbSksCi0JCQkJCSAgbXVsdGlfc29ydF9jb21wYXJlLCBtc3MpOwor CS8qIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHJvdyBmb3JtaW5nIGEgZ3JvdXAg Ki8KKwlncm91cF9zaXplICA9IDE7CiAKKwlmb3IgKGkgPSAxOyBpIDwgbnVt cm93czsgaSsrKQorCXsKKwkJLyogZW5kIG9mIHRoZSBwcmVjZWRpbmcgZ3Jv dXAgKi8KKwkJaWYgKG11bHRpX3NvcnRfY29tcGFyZV9kaW1zKDAsIChrLTIp LCAmaXRlbXNbaS0xXSwgJml0ZW1zW2ldLCBtc3MpICE9IDApCisJCXsKIAkJ CS8qCi0JCQkgKiBXYWxrIHRocm91Z2ggdGhlIGFycmF5LCBzcGxpdCBpdCBp bnRvIHJvd3MgYWNjb3JkaW5nIHRvCi0JCQkgKiB0aGUgQSB2YWx1ZSwgYW5k IGNvdW50IGRpc3RpbmN0IHZhbHVlcyBpbiB0aGUgb3RoZXIgb25lLgotCQkJ ICogSWYgdGhlcmUncyBhIHNpbmdsZSBCIHZhbHVlIGZvciB0aGUgd2hvbGUg Z3JvdXAsIHdlIGNvdW50Ci0JCQkgKiBpdCBhcyBzdXBwb3J0aW5nIHRoZSBh c3NvY2lhdGlvbiwgb3RoZXJ3aXNlIHdlIGNvdW50IGl0Ci0JCQkgKiBhcyBj b250cmFkaWN0aW5nLgotCQkJICoKLQkJCSAqIEZ1cnRoZXJtb3JlIHdlIHJl cXVpcmUgYSBncm91cCB0byBoYXZlIGF0IGxlYXN0IGEgY2VydGFpbgotCQkJ ICogbnVtYmVyIG9mIHJvd3MgdG8gYmUgY29uc2lkZXJlZCB1c2VmdWwgZm9y IHN1cHBvcnRpbmcgdGhlCi0JCQkgKiBkZXBlbmRlbmN5LiBCdXQgd2hlbiBp dCdzIGNvbnRyYWRpY3RpbmcsIHVzZSBpdCBhbHdheXMgdXNlZnVsLgorCQkJ ICogSWYgdGhlcmUgaXMgYSBzaW5nbGUgYXJlIG5vIGNvbnRyYWRpY3Rpbmcg cm93cywgY291bnQgdGhlIGdyb3VwCisJCQkgKiBhcyBzdXBwb3J0aW5nLCBv dGhlcndpc2UgY29udHJhZGljdGluZy4KIAkJCSAqLwotCi0JCQkvKiBzdGFy dCB3aXRoIHZhbHVlcyBmcm9tIHRoZSBmaXJzdCByb3cgKi8KLQkJCWN1cnJl bnQgPSBpdGVtc1swXTsKLQkJCWdyb3VwX3NpemUgID0gMTsKLQotCQkJZm9y IChpID0gMTsgaSA8IG51bXJvd3M7IGkrKykKLQkJCXsKLQkJCQkvKiBlbmQg b2YgdGhlIGdyb3VwICovCi0JCQkJaWYgKG11bHRpX3NvcnRfY29tcGFyZV9k aW0oMCwgJml0ZW1zW2ldLCAmY3VycmVudCwgbXNzKSAhPSAwKQotCQkJCXsK LQkJCQkJLyoKLQkJCQkJICogSWYgdGhlcmUgYXJlIG5vIGNvbnRyYWRpY3Rp bmcgcm93cywgY291bnQgaXQgYXMKLQkJCQkJICogc3VwcG9ydGluZyAob3Ro ZXJ3aXNlIGNvbnRyYWRpY3RpbmcpLCBidXQgb25seSBpZgotCQkJCQkgKiB0 aGUgZ3JvdXAgaXMgbGFyZ2UgZW5vdWdoLgotCQkJCQkgKgotCQkJCQkgKiBU aGUgcmVxdWlyZW1lbnQgb2YgYSBtaW5pbXVtIGdyb3VwIHNpemUgbWFrZXMg aXQKLQkJCQkJICogaW1wb3NzaWJsZSB0byBpZGVudGlmeSBbdW5pcXVlLHVu aXF1ZV0gY2FzZXMsIGJ1dAotCQkJCQkgKiB0aGF0J3MgcHJvYmFibHkgYSBk aWZmZXJlbnQgY2FzZS4gVGhpcyBpcyBtb3JlCi0JCQkJCSAqIGFib3V0IFt6 aXAgPT4gY2l0eV0gYXNzb2NpYXRpb25zIGV0Yy4KLQkJCQkJICoKLQkJCQkJ ICogSWYgdGhlcmUgYXJlIHZpb2xhdGlvbnMsIGNvdW50IHRoZSBncm91cC9y b3dzIGFzCi0JCQkJCSAqIGEgdmlvbGF0aW9uLgotCQkJCQkgKgotCQkJCQkg KiBJdCBtYXkgbmUgbmVpdGhlciwgaWYgdGhlIGdyb3VwIGlzIHRvbyBzbWFs bCAoZG9lcwotCQkJCQkgKiBub3QgY29udGFpbiBhdCBsZWFzdCBtaW5fZ3Jv dXBfc2l6ZSByb3dzKS4KLQkJCQkJICovCi0JCQkJCWlmICgobl92aW9sYXRp b25zID09IDApICYmIChncm91cF9zaXplID49IG1pbl9ncm91cF9zaXplKSkK LQkJCQkJewotCQkJCQkJbl9zdXBwb3J0aW5nICs9ICAxOwotCQkJCQkJbl9z dXBwb3J0aW5nX3Jvd3MgKz0gZ3JvdXBfc2l6ZTsKLQkJCQkJfQotCQkJCQll bHNlIGlmIChuX3Zpb2xhdGlvbnMgPiAwKQotCQkJCQl7Ci0JCQkJCQluX2Nv bnRyYWRpY3RpbmcgKz0gIDE7Ci0JCQkJCQluX2NvbnRyYWRpY3Rpbmdfcm93 cyArPSBncm91cF9zaXplOwotCQkJCQl9Ci0KLQkJCQkJLyogY3VycmVudCB2 YWx1ZXMgc3RhcnQgYSBuZXcgZ3JvdXAgKi8KLQkJCQkJbl92aW9sYXRpb25z ID0gMDsKLQkJCQkJZ3JvdXBfc2l6ZSA9IDA7Ci0JCQkJfQotCQkJCS8qIG1p c21hdGNoIG9mIGEgQiB2YWx1ZSBpcyBjb250cmFkaWN0aW5nICovCi0JCQkJ ZWxzZSBpZiAobXVsdGlfc29ydF9jb21wYXJlX2RpbSgxLCAmaXRlbXNbaV0s ICZjdXJyZW50LCBtc3MpICE9IDApCi0JCQkJewotCQkJCQluX3Zpb2xhdGlv bnMgKz0gMTsKLQkJCQl9Ci0KLQkJCQljdXJyZW50ID0gaXRlbXNbaV07Ci0J CQkJZ3JvdXBfc2l6ZSArPSAxOwotCQkJfQotCi0JCQkvKiBoYW5kbGUgdGhl IGxhc3QgZ3JvdXAgKGp1c3QgbGlrZSBhYm92ZSkgKi8KIAkJCWlmICgobl92 aW9sYXRpb25zID09IDApICYmIChncm91cF9zaXplID49IG1pbl9ncm91cF9z aXplKSkKIAkJCXsKLQkJCQluX3N1cHBvcnRpbmcgKz0gMTsKKwkJCQluX3N1 cHBvcnRpbmcgKz0gIDE7CiAJCQkJbl9zdXBwb3J0aW5nX3Jvd3MgKz0gZ3Jv dXBfc2l6ZTsKIAkJCX0KLQkJCWVsc2UgaWYgKG5fdmlvbGF0aW9ucykKKwkJ CWVsc2UgaWYgKG5fdmlvbGF0aW9ucyA+IDApCiAJCQl7Ci0JCQkJbl9jb250 cmFkaWN0aW5nICs9IDE7CisJCQkJbl9jb250cmFkaWN0aW5nICs9ICAxOwog CQkJCW5fY29udHJhZGljdGluZ19yb3dzICs9IGdyb3VwX3NpemU7CiAJCQl9 CiAKLQkJCS8qCi0JCQkgKiBTZWUgaWYgdGhlIG51bWJlciBvZiByb3dzIHN1 cHBvcnRpbmcgdGhlIGFzc29jaWF0aW9uIGlzIGF0IGxlYXN0Ci0JCQkgKiAx MHggdGhlIG51bWJlciBvZiByb3dzIHZpb2xhdGluZyB0aGUgaHlwb3RoZXRp Y2FsIGRlcGVuZGVuY3kuCi0JCQkgKgotCQkJICogVE9ETyBUaGlzIGlzIHJh dGhlciBhcmJpdHJhcnkgbGltaXQgLSBJIGd1ZXNzIGl0J3MgcG9zc2libGUg dG8gZG8KLQkJCSAqICAgICAgc29tZSBtYXRoIHRvIGNvbWUgdXAgd2l0aCBh IGJldHRlciBydWxlIChlLmcuIHRlc3RpbmcgYSBoeXBvdGhlc2lzCi0JCQkg KiAgICAgICd0aGlzIGlzIGR1ZSB0byByYW5kb21uZXNzJykuIFdlIGNhbiBj cmVhdGUgYSBjb250aW5nZW5jeSB0YWJsZQotCQkJICogICAgICBmcm9tIHRo ZSB2YWx1ZXMgYW5kIHVzZSBpdCBmb3IgdGVzdGluZy4gUG9zc2libHkgb25s eSB3aGVuCi0JCQkgKiAgICAgIHRoZXJlIGFyZSBubyBjb250cmFkaWN0aW5n IHJvd3M/Ci0JCQkgKgotCQkJICogVE9ETyBBbHNvLCBpZiAoYSA9PiBiKSBh bmQgKGIgPT4gYSkgYXQgdGhlIHNhbWUgdGltZSwgaXQgcHJldHR5IG11Y2gK LQkJCSAqICAgICAgbWVhbnMgdGhlcmUncyBhIDE6MSByZWxhdGlvbiAob3Ig b25lIGlzIGEgJ2xhYmVsJyksIG1ha2luZyB0aGUKLQkJCSAqICAgICAgY29u ZGl0aW9ucyByYXRoZXIgcmVkdW5kYW50LiBBbHRob3VnaCBpdCdzIHBvc3Np YmxlIHRoYXQgdGhlCi0JCQkgKiAgICAgIHF1ZXJ5IHVzZXMgaW5jb21wYXRp YmxlIGNvbWJpbmF0aW9uIG9mIHZhbHVlcy4KLQkJCSAqLwotCQkJaWYgKG5f c3VwcG9ydGluZ19yb3dzID4gKG5fY29udHJhZGljdGluZ19yb3dzICogMTAp KQotCQkJewotCQkJCWlmIChkZXBlbmRlbmNpZXMgPT0gTlVMTCkKLQkJCQl7 Ci0JCQkJCWRlcGVuZGVuY2llcyA9IChNVkRlcGVuZGVuY2llcylwYWxsb2Mw KHNpemVvZihNVkRlcGVuZGVuY2llc0RhdGEpKTsKLQkJCQkJZGVwZW5kZW5j aWVzLT5tYWdpYyA9IE1WU1RBVF9ERVBTX01BR0lDOwotCQkJCX0KLQkJCQll bHNlCi0JCQkJCWRlcGVuZGVuY2llcyA9IHJlcGFsbG9jKGRlcGVuZGVuY2ll cywgb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBzKQotCQkJCQkJ CQkJCQkrIHNpemVvZihNVkRlcGVuZGVuY3kpICogKGRlcGVuZGVuY2llcy0+ bmRlcHMgKyAxKSk7CisJCQkvKiBjdXJyZW50IHZhbHVlcyBzdGFydCBhIG5l dyBncm91cCAqLworCQkJbl92aW9sYXRpb25zID0gMDsKKwkJCWdyb3VwX3Np emUgPSAwOworCQl9CisJCS8qIGZpcnN0IGNvbHVtcyBtYXRjaCwgYnV0IHRo ZSBsYXN0IG9uZSBkb2VzIG5vdCAoc28gY29udHJhZGljdGluZykgKi8KKwkJ ZWxzZSBpZiAobXVsdGlfc29ydF9jb21wYXJlX2RpbXMoKGstMSksIChrLTEp LCAmaXRlbXNbaS0xXSwgJml0ZW1zW2ldLCBtc3MpICE9IDApCisJCQluX3Zp b2xhdGlvbnMgKz0gMTsKIAotCQkJCS8qIHVwZGF0ZSB0aGUgKi8KLQkJCQlk ZXBlbmRlbmNpZXMtPmRlcHNbbmRlcHNdID0gKE1WRGVwZW5kZW5jeSlwYWxs b2MwKHNpemVvZihNVkRlcGVuZGVuY3lEYXRhKSk7Ci0JCQkJZGVwZW5kZW5j aWVzLT5kZXBzW25kZXBzXS0+YSA9IGF0dHJzLT52YWx1ZXNbZGltYV07Ci0J CQkJZGVwZW5kZW5jaWVzLT5kZXBzW25kZXBzXS0+YiA9IGF0dHJzLT52YWx1 ZXNbZGltYl07CisJCWdyb3VwX3NpemUgKz0gMTsKKwl9CiAKLQkJCQlkZXBl bmRlbmNpZXMtPm5kZXBzID0gKCsrbmRlcHMpOwotCQkJfQotCQl9CisJLyog aGFuZGxlIHRoZSBsYXN0IGdyb3VwIChqdXN0IGxpa2UgYWJvdmUpICovCisJ aWYgKChuX3Zpb2xhdGlvbnMgPT0gMCkgJiYgKGdyb3VwX3NpemUgPj0gbWlu X2dyb3VwX3NpemUpKQorCXsKKwkJbl9zdXBwb3J0aW5nICs9IDE7CisJCW5f c3VwcG9ydGluZ19yb3dzICs9IGdyb3VwX3NpemU7CisJfQorCWVsc2UgaWYg KG5fdmlvbGF0aW9ucykKKwl7CisJCW5fY29udHJhZGljdGluZyArPSAxOwor CQluX2NvbnRyYWRpY3Rpbmdfcm93cyArPSBncm91cF9zaXplOwogCX0KIAog CXBmcmVlKGl0ZW1zKTsKIAlwZnJlZSh2YWx1ZXMpOwogCXBmcmVlKGlzbnVs bCk7Ci0JcGZyZWUoc3RhdHMpOwogCXBmcmVlKG1zcyk7CiAKLQlyZXR1cm4g ZGVwZW5kZW5jaWVzOworCS8qCisJICogU2VlIGlmIHRoZSBudW1iZXIgb2Yg cm93cyBzdXBwb3J0aW5nIHRoZSBhc3NvY2lhdGlvbiBpcyBhdCBsZWFzdCAx MHggdGhlCisJICogbnVtYmVyIG9mIHJvd3MgdmlvbGF0aW5nIHRoZSBoeXBv dGhldGljYWwgZGVwZW5kZW5jeS4KKwkgKi8KKwlyZXR1cm4gKG5fc3VwcG9y dGluZ19yb3dzID4gKG5fY29udHJhZGljdGluZ19yb3dzICogMTApKTsKIH0K IAogLyoKLSAqIFN0b3JlIHRoZSBkZXBlbmRlbmNpZXMgaW50byBhIGJ5dGVh LCBzbyB0aGF0IGl0IGNhbiBiZSBzdG9yZWQgaW4gdGhlCi0gKiBwZ19tdl9z dGF0aXN0aWMgY2F0YWxvZy4KKyAqIGRldGVjdHMgZnVuY3Rpb25hbCBkZXBl bmRlbmNpZXMgYmV0d2VlbiBncm91cHMgb2YgY29sdW1ucworICoKKyAqIEdl bmVyYXRlcyBhbGwgcG9zc2libGUgc3Vic2V0cyBvZiBjb2x1bW5zICh2YXJp YXRpb25zKSBhbmQgY2hlY2tzIGlmIHRoZQorICogbGFzdCBvbmUgaXMgZGV0 ZXJtaW5lZCBieSB0aGUgcHJlY2VkaW5nIG9uZXMuIEZvciBleGFtcGxlIGdp dmVuIDMgY29sdW1ucywKKyAqIHRoZXJlIGFyZSAxMiB2YXJpYXRpb25zICg2 IGZvciB2YXJpYXRpb25zIG9uIDIgY29sdW1ucywgNiBmb3IgMyBjb2x1bW5z KToKKyAqCisgKiAgICAgdHdvIGNvbHVtbnMgICAgICAgICAgICB0aHJlZSBj b2x1bW5zCisgKiAgICAgLS0tLS0tLS0tLS0gICAgICAgICAgICAtLS0tLS0t LS0tLS0tCisgKiAgICAgKGEpIC0+IGMgICAgICAgICAgICAgICAoYSxiKSAt PiBjCisgKiAgICAgKGIpIC0+IGMgICAgICAgICAgICAgICAoYixhKSAtPiBj CisgKiAgICAgKGEpIC0+IGIgICAgICAgICAgICAgICAoYSxjKSAtPiBiCisg KiAgICAgKGMpIC0+IGIgICAgICAgICAgICAgICAoYyxhKSAtPiBiCisgKiAg ICAgKGMpIC0+IGEgICAgICAgICAgICAgICAoYyxiKSAtPiBhCisgKiAgICAg KGIpIC0+IGEgICAgICAgICAgICAgICAoYixjKSAtPiBhCisgKgorICogQ2xl YXJseSBzb21lIG9mIHRoZSB2YXJpYXRpb25zIGFyZSByZWR1bmRhbnQsIGFz IHRoZSBvcmRlciBvZiBjb2x1bW5zIG9uIHRoZQorICogbGVmdCBzaWRlIGRv ZXMgbm90IG1hdHRlci4gVGhpcyBpcyBkZXRlY3RlZCBpbiBkZXBlbmRlbmN5 X2lzX2ltcGxpZWQsIGFuZAorICogdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBp Z25vcmVkLgogICoKLSAqIEN1cnJlbnRseSB0aGlzIG9ubHkgc3VwcG9ydHMg c2ltcGxlIHR3by1jb2x1bW4gcnVsZXMsIGFuZCBzdG9yZXMgdGhlbQotICog YXMgYSBzZXF1ZW5jZSBvZiBhdHRudW0gcGFpcnMuIEluIHRoZSBmdXR1cmUs IHRoaXMgbmVlZHMgdG8gYmUgbWFkZQotICogbW9yZSBjb21wbGV4IHRvIHN1 cHBvcnQgbXVsdGlwbGUgY29sdW1ucyBvbiBib3RoIHNpZGVzIG9mIHRoZQot ICogaW1wbGljYXRpb24gKHVzaW5nIEFORCBvbiBsZWZ0LCBPUiBvbiByaWdo dCkuCisgKiBXZSBob3dldmVyIGRvIG5vdCBkZXRlY3QgdGhhdCBkZXBlbmRl bmNpZXMgYXJlIHRyYW5zaXRpdmVseSBpbXBsaWVkLiBGb3IKKyAqIGV4YW1w bGUgZ2l2ZW4gZGVwZW5kZW5jaWVzCisgKgorICogICAgIChhKSAtPiBiCisg KiAgICAgKGIpIC0+IGMKKyAqCisgKiB0aGVuCisgKgorICogICAgIChhKSAt PiBjCisgKgorICogaXMgdHJpdmlhbGx5IGltcGxpZWQuIEhvd2V2ZXIgd2Ug ZG9uJ3QgZGV0ZWN0IHRoYXQgYW5kIGFsbCB0aHJlZSBkZXBlbmRlbmNpZXMK KyAqIHdpbGwgZ2V0IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgc2V0LiBF bGltaW5hdGluZyBzdWNoIHRyYW5zaXRpdmVseSBpbXBsaWVkCisgKiBkZXBl bmRlbmNpZXMgaXMgZnV0dXJlIHdvcmsuCisgKi8KK01WRGVwZW5kZW5jaWVz CitidWlsZF9tdl9kZXBlbmRlbmNpZXMoaW50IG51bXJvd3MsIEhlYXBUdXBs ZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCSAgVmFjQXR0clN0 YXRzICoqc3RhdHMpCit7CisJaW50IGk7CisJaW50IGs7CisJaW50IG51bWF0 dHJzID0gYXR0cnMtPmRpbTE7CisKKwkvKiByZXN1bHQgKi8KKwlNVkRlcGVu ZGVuY2llcwlkZXBlbmRlbmNpZXMgPSBOVUxMOworCisJQXNzZXJ0KG51bWF0 dHJzID49IDIpOworCisJLyoKKwkgKiBXZSdsbCB0cnkgYnVpbGQgZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMgc3RhcnRpbmcgZnJvbSB0aGUgc21hbGxlc3Qg b25lcworCSAqIGNvdmVyaW5nIGp1dCAyIGNvbHVtbnMsIHRvIHRoZSBsYXJn ZXN0IG9uZXMsIGNvdmVyaW5nIGFsbCBjb2x1bW5zCisJICogaW5jbHVkZWQg aW50IHRoZSBzdGF0aXN0aWNzLiBXZSBzdGFydCBmcm9tIHRoZSBzbWFsbGVz dCBvbmVzIGJlY2F1c2UKKwkgKiB3ZSB3YW50IHRvIGJlIGFibGUgdG8gc2tp cCBhbHJlYWR5IGltcGxpZWQgb25lcy4KKwkgKi8KKwlmb3IgKGsgPSAyOyBr IDw9IG51bWF0dHJzOyBrKyspCisJeworCQlpbnQgKmRlcGVuZGVuY3k7CS8q IGFycmF5IHdpdGggayBlbGVtZW50cyAqLworCisJCS8qIHByZXBhcmUgYSBn ZW5lcmF0b3Igb2YgdmFyaWF0aW9uICovCisJCVZhcmlhdGlvbkdlbmVyYXRv ciBnZW5lcmF0b3IgPSBnZW5lcmF0b3JfaW5pdChhdHRycywgayk7CisKKwkJ LyogZ2VuZXJhdGUgYWxsIHBvc3NpYmxlIHZhcmlhdGlvbnMgb2YgayB2YWx1 ZXMgKG91dCBvZiBuKSAqLworCQl3aGlsZSAoKGRlcGVuZGVuY3kgPSBnZW5l cmF0b3JfbmV4dChnZW5lcmF0b3IsIGF0dHJzKSkpCisJCXsKKwkJCU1WRGVw ZW5kZW5jeSBkOworCisJCQkvKiBza2lwIGRlcGVuZGVuY2llcyB0aGF0IGFy ZSBhbHJlYWR5IHRyaXZpYWxseSBpbXBsaWVkICovCisJCQlpZiAoZGVwZW5k ZW5jeV9pc19pbXBsaWVkKGRlcGVuZGVuY2llcywgaywgZGVwZW5kZW5jeSwg YXR0cnMpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBhbHNvIHNraXAgZGVw ZW5kZW5jaWVzIHRoYXQgZG9uJ3Qgc2VlbSB0byBiZSB2YWxpZCAqLworCQkJ aWYgKCEgZGVwZW5kZW5jeV9pc192YWxpZChudW1yb3dzLCByb3dzLCBrLCBk ZXBlbmRlbmN5LCBzdGF0cywgYXR0cnMpKQorCQkJCWNvbnRpbnVlOworCisJ CQlkID0gKE1WRGVwZW5kZW5jeSlwYWxsb2MwKG9mZnNldG9mKE1WRGVwZW5k ZW5jeURhdGEsIGF0dHJpYnV0ZXMpCisJCQkJCQkJCQkJCSAgICsgayAqIHNp emVvZihpbnQpKTsKKworCQkJLyogY29weSB0aGUgZGVwZW5kZW5jeSwgYnV0 IHRyYW5zbGF0ZSBpdCB0byBhY3R1YWxsIGF0dG51bXMgKi8KKwkJCWQtPm5h dHRyaWJ1dGVzID0gazsKKwkJCWZvciAoaSA9IDA7IGkgPCBrOyBpKyspCisJ CQkJZC0+YXR0cmlidXRlc1tpXSA9IGF0dHJzLT52YWx1ZXNbZGVwZW5kZW5j eVtpXV07CisKKwkJCS8qIGluaXRpYWxpemUgdGhlIGxpc3Qgb2YgZGVwZW5k ZW5jaWVzICovCisJCQlpZiAoZGVwZW5kZW5jaWVzID09IE5VTEwpCisJCQl7 CisJCQkJZGVwZW5kZW5jaWVzCisJCQkJCT0gKE1WRGVwZW5kZW5jaWVzKXBh bGxvYzAoc2l6ZW9mKE1WRGVwZW5kZW5jaWVzRGF0YSkpOworCisJCQkJZGVw ZW5kZW5jaWVzLT5tYWdpYyA9IE1WU1RBVF9ERVBTX01BR0lDOworCQkJCWRl cGVuZGVuY2llcy0+dHlwZSAgPSBNVlNUQVRfREVQU19UWVBFX0JBU0lDOwor CQkJCWRlcGVuZGVuY2llcy0+bmRlcHMgPSAwOworCQkJfQorCisJCQlkZXBl bmRlbmNpZXMtPm5kZXBzKys7CisJCQlkZXBlbmRlbmNpZXMgPSAoTVZEZXBl bmRlbmNpZXMpcmVwYWxsb2MoZGVwZW5kZW5jaWVzLAorCQkJCQkJCW9mZnNl dG9mKE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcykKKwkJCQkJCQkrIGRlcGVu ZGVuY2llcy0+bmRlcHMgKiBzaXplb2YoTVZEZXBlbmRlbmN5KSk7CisKKwkJ CWRlcGVuZGVuY2llcy0+ZGVwc1tkZXBlbmRlbmNpZXMtPm5kZXBzLTFdID0g ZDsKKwkJfQorCisJCS8qIHdlJ3JlIGRvbmUgd2l0aCB2YXJpYXRpb25zIG9m IGsgZWxlbWVudHMsIHNvIGZyZWUgdGhlIGdlbmVyYXRvciAqLworCQlnZW5l cmF0b3JfZnJlZShnZW5lcmF0b3IpOworCX0KKworCXJldHVybiBkZXBlbmRl bmNpZXM7Cit9CisKKworLyoKKyAqIHNlcmlhbGl6ZSBsaXN0IG9mIGRlcGVu ZGVuY2llcyBpbnRvIGEgYnl0ZWEKICAqLwogYnl0ZWEgKgogc2VyaWFsaXpl X212X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMp CiB7CiAJaW50IGk7CisJYnl0ZWEgKiBvdXRwdXQ7CisJY2hhciAqdG1wOwog Ci0JLyogd2UgbmVlZCB0byBzdG9yZSBuZGVwcywgYW5kIGVhY2ggbmVlZHMg MiAqIGludDE2ICovCisJLyogd2UgbmVlZCB0byBzdG9yZSBuZGVwcywgd2l0 aCBhIG51bWJlciBvZiBhdHRyaWJ1dGVzIGZvciBlYWNoIG9uZSAqLwogCVNp emUgbGVuID0gVkFSSERSU1ogKyBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0Rh dGEsIGRlcHMpCi0JCQkJKyBkZXBlbmRlbmNpZXMtPm5kZXBzICogKHNpemVv ZihpbnQxNikgKiAyKTsKLQotCWJ5dGVhICogb3V0cHV0ID0gKGJ5dGVhKilw YWxsb2MwKGxlbik7CisJCQkgICsgc2l6ZW9mKGludCkgKiBkZXBlbmRlbmNp ZXMtPm5kZXBzOwogCi0JY2hhciAqIHRtcCA9IFZBUkRBVEEob3V0cHV0KTsK KwkvKiBhbmQgYWxzbyBpbmNsdWRlIHNwYWNlIGZvciB0aGUgYWN0dWFsIGF0 dHJpYnV0ZSBudW1iZXJzICovCisJZm9yIChpID0gMDsgaSA8IGRlcGVuZGVu Y2llcy0+bmRlcHM7IGkrKykKKwkJbGVuICs9IChzaXplb2YoaW50MTYpICog ZGVwZW5kZW5jaWVzLT5kZXBzW2ldLT5uYXR0cmlidXRlcyk7CiAKKwlvdXRw dXQgPSAoYnl0ZWEqKXBhbGxvYzAobGVuKTsKIAlTRVRfVkFSU0laRShvdXRw dXQsIGxlbik7CiAKKwl0bXAgPSBWQVJEQVRBKG91dHB1dCk7CisKIAkvKiBm aXJzdCwgc3RvcmUgdGhlIG51bWJlciBvZiBkaW1lbnNpb25zIC8gaXRlbXMg Ki8KIAltZW1jcHkodG1wLCBkZXBlbmRlbmNpZXMsIG9mZnNldG9mKE1WRGVw ZW5kZW5jaWVzRGF0YSwgZGVwcykpOwogCXRtcCArPSBvZmZzZXRvZihNVkRl cGVuZGVuY2llc0RhdGEsIGRlcHMpOwogCi0JLyogd2FsayB0aHJvdWdoIHRo ZSBkZXBlbmRlbmNpZXMgYW5kIGNvcHkgYm90aCBjb2x1bW5zIGludG8gdGhl IGJ5dGVhICovCisJLyogc3RvcmUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYW5k IGF0dHJpYnV0ZSBudW1iZXJzIGZvciBlYWNoIGRlcGVuZGVuY3kgKi8KIAlm b3IgKGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLT5uZGVwczsgaSsrKQogCXsK LQkJbWVtY3B5KHRtcCwgJihkZXBlbmRlbmNpZXMtPmRlcHNbaV0tPmEpLCBz aXplb2YoaW50MTYpKTsKLQkJdG1wICs9IHNpemVvZihpbnQxNik7CisJCU1W RGVwZW5kZW5jeSBkID0gZGVwZW5kZW5jaWVzLT5kZXBzW2ldOworCisJCW1l bWNweSh0bXAsICYoZC0+bmF0dHJpYnV0ZXMpLCBzaXplb2YoaW50KSk7CisJ CXRtcCArPSBzaXplb2YoaW50KTsKIAotCQltZW1jcHkodG1wLCAmKGRlcGVu ZGVuY2llcy0+ZGVwc1tpXS0+YiksIHNpemVvZihpbnQxNikpOwotCQl0bXAg Kz0gc2l6ZW9mKGludDE2KTsKKwkJbWVtY3B5KHRtcCwgZC0+YXR0cmlidXRl cywgc2l6ZW9mKGludDE2KSAqIGQtPm5hdHRyaWJ1dGVzKTsKKwkJdG1wICs9 IHNpemVvZihpbnQxNikgKiBkLT5uYXR0cmlidXRlczsKKworCQlBc3NlcnQo dG1wIDw9ICgoY2hhciopb3V0cHV0ICsgbGVuKSk7CiAJfQogCiAJcmV0dXJu IG91dHB1dDsKQEAgLTMzOCwyMCArNTY2LDIxIEBAIGRlc2VyaWFsaXplX212 X2RlcGVuZGVuY2llcyhieXRlYSAqIGRhdGEpCiAJdG1wICs9IG9mZnNldG9m KE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcyk7CiAKIAlpZiAoZGVwZW5kZW5j aWVzLT5tYWdpYyAhPSBNVlNUQVRfREVQU19NQUdJQykKLQl7Ci0JCXBmcmVl KGRlcGVuZGVuY2llcyk7Ci0JCWVsb2coV0FSTklORywgIm5vdCBhIE1WIERl cGVuZGVuY2llcyAobWFnaWMgbnVtYmVyIG1pc21hdGNoKSIpOwotCQlyZXR1 cm4gTlVMTDsKLQl9CisJCWVsb2coRVJST1IsICJpbnZhbGlkIGRlcGVuZGVu Y3kgdHlwZSAlZCAoZXhwZWN0ZWQgJWRkKSIsCisJCQkgZGVwZW5kZW5jaWVz LT50eXBlLCBNVlNUQVRfREVQU19NQUdJQyk7CisKKwlpZiAoZGVwZW5kZW5j aWVzLT50eXBlICE9IE1WU1RBVF9ERVBTX1RZUEVfQkFTSUMpCisJCWVsb2co RVJST1IsICJpbnZhbGlkIGRlcGVuZGVuY3kgdHlwZSAlZCAoZXhwZWN0ZWQg JWRkKSIsCisJCQkgZGVwZW5kZW5jaWVzLT50eXBlLCBNVlNUQVRfREVQU19U WVBFX0JBU0lDKTsKIAogCUFzc2VydChkZXBlbmRlbmNpZXMtPm5kZXBzID4g MCk7CiAKLQkvKiB3aGF0IGJ5dGVhIHNpemUgZG8gd2UgZXhwZWN0IGZvciB0 aG9zZSBwYXJhbWV0ZXJzICovCisJLyogd2hhdCBtaW5pbXVtIGJ5dGVhIHNp emUgZG8gd2UgZXhwZWN0IGZvciB0aG9zZSBwYXJhbWV0ZXJzICovCiAJZXhw ZWN0ZWRfc2l6ZSA9IG9mZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSxkZXBz KSArCi0JCQkJCWRlcGVuZGVuY2llcy0+bmRlcHMgKiBzaXplb2YoaW50MTYp ICogMjsKKwkJCQkJZGVwZW5kZW5jaWVzLT5uZGVwcyAqIChzaXplb2YoaW50 KSArIHNpemVvZihpbnQxNikgKiAyKTsKIAotCWlmIChWQVJTSVpFX0FOWV9F WEhEUihkYXRhKSAhPSBleHBlY3RlZF9zaXplKQotCQllbG9nKEVSUk9SLCAi aW52YWxpZCBkZXBlbmRlbmNpZXMgc2l6ZSAlbGQgKGV4cGVjdGVkICVsZCki LAorCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8IGV4cGVjdGVkX3Np emUpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIGRlcGVuZGVuY2llcyBzaXpl ICVsZCAoZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKSIsCiAJCQkgVkFSU0laRV9B TllfRVhIRFIoZGF0YSksIGV4cGVjdGVkX3NpemUpOwogCiAJLyogYWxsb2Nh dGUgc3BhY2UgZm9yIHRoZSBNQ1YgaXRlbXMgKi8KQEAgLTM2MCwxNSArNTg5 LDM1IEBAIGRlc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhieXRlYSAqIGRh dGEpCiAKIAlmb3IgKGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLT5uZGVwczsg aSsrKQogCXsKLQkJZGVwZW5kZW5jaWVzLT5kZXBzW2ldID0gKE1WRGVwZW5k ZW5jeSlwYWxsb2MwKHNpemVvZihNVkRlcGVuZGVuY3lEYXRhKSk7CisJCWlu dCBrOworCQlNVkRlcGVuZGVuY3kgZDsKKworCQkvKiBudW1iZXIgb2YgYXR0 cmlidXRlcyAqLworCQltZW1jcHkoJmssIHRtcCwgc2l6ZW9mKGludCkpOwor CQl0bXAgKz0gc2l6ZW9mKGludCk7CisKKwkJLyogaXMgdGhlIG51bWJlciBv ZiBhdHRyaWJ1dGVzIHZhbGlkPyAqLworCQlBc3NlcnQoKGsgPj0gMikgJiYg KGsgPD0gTVZTVEFUU19NQVhfRElNRU5TSU9OUykpOwogCi0JCW1lbWNweSgm KGRlcGVuZGVuY2llcy0+ZGVwc1tpXS0+YSksIHRtcCwgc2l6ZW9mKGludDE2 KSk7Ci0JCXRtcCArPSBzaXplb2YoaW50MTYpOworCQkvKiBub3cgdGhhdCB3 ZSBrbm93IHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcywgYWxsb2NhdGUgdGhl IGRlcGVuZGVuY3kgKi8KKwkJZCA9IChNVkRlcGVuZGVuY3kpcGFsbG9jMChv ZmZzZXRvZihNVkRlcGVuZGVuY3lEYXRhLCBhdHRyaWJ1dGVzKQorCQkJCQkJ CQkgICsgayAqIHNpemVvZihpbnQpKTsKIAotCQltZW1jcHkoJihkZXBlbmRl bmNpZXMtPmRlcHNbaV0tPmIpLCB0bXAsIHNpemVvZihpbnQxNikpOwotCQl0 bXAgKz0gc2l6ZW9mKGludDE2KTsKKwkJZC0+bmF0dHJpYnV0ZXMgPSBrOwor CisJCS8qIGNvcHkgYXR0cmlidXRlIG51bWJlcnMgKi8KKwkJbWVtY3B5KGQt PmF0dHJpYnV0ZXMsIHRtcCwgc2l6ZW9mKGludDE2KSAqIGQtPm5hdHRyaWJ1 dGVzKTsKKwkJdG1wICs9IHNpemVvZihpbnQxNikgKiBkLT5uYXR0cmlidXRl czsKKworCQlkZXBlbmRlbmNpZXMtPmRlcHNbaV0gPSBkOworCisJCS8qIHN0 aWxsIHdpdGhpbiB0aGUgYnl0ZWEgKi8KKwkJQXNzZXJ0KHRtcCA8PSAoKGNo YXIqKWRhdGEgKyBWQVJTSVpFX0FOWShkYXRhKSkpOwogCX0KIAorCS8qIHdl IHNob3VsZCBoYXZlIGNvbnN1bWVkIHRoZSB3aG9sZSBieXRlYSBleGFjdGx5 ICovCisJQXNzZXJ0KHRtcCA9PSAoKGNoYXIqKWRhdGEgKyBWQVJTSVpFX0FO WShkYXRhKSkpOworCiAJcmV0dXJuIGRlcGVuZGVuY2llczsKIH0KIApAQCAt MzkyLDQ2ICs2NDEsNzAgQEAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2lu Zm8oUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKGNzdHJp bmdfdG9fdGV4dChyZXN1bHQpKTsKIH0KIAotLyogcHJpbnQgdGhlIGRlcGVu ZGVuY2llcwotICoKLSAqIFRPRE8gIFdvdWxkIGJlIG5pY2UgaWYgdGhpcyBr bmV3IHRoZSBhY3R1YWwgY29sdW1uIG5hbWVzIChpbnN0ZWFkIG9mCi0gKiAg ICAgICB0aGUgYXR0bnVtcykuCisvKgorICogcHJpbnQgdGhlIGRlcGVuZGVu Y2llcwogICoKLSAqIEZJWE1FIFRoaXMgaXMgcmVhbGx5IHVnbHkgYW5kIGRv ZXMgbm90IHJlYWxseSBjaGVjayB0aGUgbGVuZ3RocyBhbmQKLSAqICAgICAg IHN0cmNweS9zbnByaW50ZiByZXR1cm4gdmFsdWVzIHByb3Blcmx5LiBOZWVk cyB0byBiZSBmaXhlZC4KKyAqIFRPRE8gIFdvdWxkIGJlIG5pY2UgaWYgdGhp cyBwcmludGVkIGNvbHVtbiBuYW1lcyAoaW5zdGVhZCBvZiBqdXN0IGF0dG51 bXMpLgogICovCiBEYXR1bQogcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3No b3coUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlpbnQJCQlpID0gMDsKLQlieXRl YQkgICAqZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QKDApOwotCWNoYXIJICAg KnJlc3VsdCA9IE5VTEw7Ci0JaW50CQkJbGVuID0gMDsKKwlpbnQJCWksIGo7 CisJYnl0ZWEgICAqZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QKDApOworCVN0 cmluZ0luZm9EYXRhCWJ1ZjsKIAogCU1WRGVwZW5kZW5jaWVzIGRlcGVuZGVu Y2llcyA9IGRlc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhkYXRhKTsKIAog CWlmIChkZXBlbmRlbmNpZXMgPT0gTlVMTCkKIAkJUEdfUkVUVVJOX05VTEwo KTsKIAorCWluaXRTdHJpbmdJbmZvKCZidWYpOworCiAJZm9yIChpID0gMDsg aSA8IGRlcGVuZGVuY2llcy0+bmRlcHM7IGkrKykKIAl7CiAJCU1WRGVwZW5k ZW5jeSBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jaWVzLT5kZXBzW2ldOwotCQlj aGFyCWJ1ZmZlclsxMjhdOwogCi0JCWludAkJdG1wID0gc25wcmludGYoYnVm ZmVyLCAxMjgsICIlcyVkID0+ICVkIiwKLQkJCQkoKGkgPT0gMCkgPyAiIiA6 ICIsICIpLCBkZXBlbmRlbmN5LT5hLCBkZXBlbmRlbmN5LT5iKTsKKwkJaWYg KGkgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAiKTsKIAot CQlpZiAodG1wIDwgMTI3KQorCQkvKiBjb25kaXRpb25zICovCisJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZidWYsICcoJyk7CisJCWZvciAoaiA9IDA7IGog PCBkZXBlbmRlbmN5LT5uYXR0cmlidXRlcy0xOyBqKyspCiAJCXsKLQkJCWlm IChyZXN1bHQgPT0gTlVMTCkKLQkJCQlyZXN1bHQgPSBwYWxsb2MwKGxlbiAr IHRtcCArIDEpOwotCQkJZWxzZQotCQkJCXJlc3VsdCA9IHJlcGFsbG9jKHJl c3VsdCwgbGVuICsgdG1wICsgMSk7CisJCQlpZiAoaiA+IDApCisJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJywnKTsKIAotCQkJc3RyY3B5KHJl c3VsdCArIGxlbiwgYnVmZmVyKTsKLQkJCWxlbiArPSB0bXA7CisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIGRlcGVuZGVuY3ktPmF0dHJpYnV0 ZXNbal0pOwogCQl9CisKKwkJLyogdGhlIGltcGxpZWQgYXR0cmlidXRlICov CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIikgPT4gJWQiLAorCQkJCQkJ IGRlcGVuZGVuY3ktPmF0dHJpYnV0ZXNbZGVwZW5kZW5jeS0+bmF0dHJpYnV0 ZXMtMV0pOwogCX0KIAotCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190 ZXh0KHJlc3VsdCkpOworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190 ZXh0KGJ1Zi5kYXRhKSk7Cit9CisKK01WRGVwZW5kZW5jaWVzCitsb2FkX212 X2RlcGVuZGVuY2llcyhPaWQgbXZvaWQpCit7CisJYm9vbAkJaXNudWxsID0g ZmFsc2U7CisJRGF0dW0JCWRlcHM7CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4g cGdfbXZfc3RhdGlzdGljIGZvciBlbnRyaWVzIGhhdmluZyBpbmRyZWxpZCA9 IHRoaXMgcmVsLiAqLworCUhlYXBUdXBsZQlodHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE1WU1RBVE9JRCwgT2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOworCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUZvcm1fcGdfbXZfc3RhdGlz dGljCW12c3RhdCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNU KGh0dXApOworCUFzc2VydChtdnN0YXQtPmRlcHNfZW5hYmxlZCAmJiBtdnN0 YXQtPmRlcHNfYnVpbHQpOworI2VuZGlmCisKKwlkZXBzID0gU3lzQ2FjaGVH ZXRBdHRyKE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJCSAgIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YWRlcHMsICZpc251bGwpOworCisJQXNzZXJ0KCFpc251 bGwpOworCisJUmVsZWFzZVN5c0NhY2hlKGh0dXApOworCisJcmV0dXJuIGRl c2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhEYXR1bUdldEJ5dGVhUChkZXBz KSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRz LmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKaW5kZXggN2ViZDk2 MS4uYzZmNDVhYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvbXZz dGF0cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApAQCAt MTcsMjIgKzE3LDMxIEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3ZhY3V1bS5oIgogCisvKgorICogRGVncmVlIG9mIGhvdyBt dWNoIE1DViBpdGVtIC8gaGlzdG9ncmFtIGJ1Y2tldCBtYXRjaGVzIGEgY2xh dXNlLgorICogVGhpcyBpcyB0aGVuIGNvbnNpZGVyZWQgd2hlbiBjb21wdXRp bmcgdGhlIHNlbGVjdGl2aXR5LgorICovCisjZGVmaW5lIE1WU1RBVFNfTUFU Q0hfTk9ORQkJMAkJLyogbm8gbWF0Y2ggYXQgYWxsICovCisjZGVmaW5lIE1W U1RBVFNfTUFUQ0hfUEFSVElBTAkxCQkvKiBwYXJ0aWFsIG1hdGNoICovCisj ZGVmaW5lIE1WU1RBVFNfTUFUQ0hfRlVMTAkJMgkJLyogZnVsbCBtYXRjaCAq LwogCiAjZGVmaW5lIE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMJOAkJLyogbWF4 IG51bWJlciBvZiBhdHRyaWJ1dGVzICovCiAKLS8qIEFuIGFzc29jaWF0aXZl IHJ1bGUsIHRyYWNraW5nIFthID0+IGJdIGRlcGVuZGVuY3kuCi0gKgotICog VE9ETyBNYWtlIHRoaXMgd29yayB3aXRoIG11bHRpcGxlIGNvbHVtbnMgb24g Ym90aCBzaWRlcy4KKworLyoKKyAqIEZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz LCB0cmFja2luZyBjb2x1bW4tbGV2ZWwgcmVsYXRpb25zaGlwcyAodmFsdWVz CisgKiBpbiBvbmUgY29sdW1uIGRldGVybWluZSB2YWx1ZXMgaW4gYW5vdGhl ciBvbmUpLgogICovCiB0eXBlZGVmIHN0cnVjdCBNVkRlcGVuZGVuY3lEYXRh IHsKLQlpbnQxNglhOwotCWludDE2CWI7CisJaW50IAluYXR0cmlidXRlczsJ LyogbnVtYmVyIG9mIGF0dHJpYnV0ZXMgKi8KKwlpbnQxNglhdHRyaWJ1dGVz WzFdOwkvKiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogfSBNVkRlcGVuZGVuY3lE YXRhOwogCiB0eXBlZGVmIE1WRGVwZW5kZW5jeURhdGEqIE1WRGVwZW5kZW5j eTsKIAogdHlwZWRlZiBzdHJ1Y3QgTVZEZXBlbmRlbmNpZXNEYXRhIHsKIAl1 aW50MzIJCQltYWdpYzsJCS8qIG1hZ2ljIGNvbnN0YW50IG1hcmtlciAqLwor CXVpbnQzMgkJCXR5cGU7CQkvKiB0eXBlIG9mIE1WIERlcGVuZGVuY2llcyAo QkFTSUMpICovCiAJaW50MzIJCQluZGVwczsJCS8qIG51bWJlciBvZiBkZXBl bmRlbmNpZXMgKi8KIAlNVkRlcGVuZGVuY3kJZGVwc1sxXTsJLyogWFhYIHdo eSBub3QgYSBwb2ludGVyPyAqLwogfSBNVkRlcGVuZGVuY2llc0RhdGE7CkBA IC00OCw2ICs1Nyw4IEBAIHR5cGVkZWYgTVZEZXBlbmRlbmNpZXNEYXRhKiBN VkRlcGVuZGVuY2llczsKICAqICAgICAgc3RhdHMgc3BlY2lmaWVkIHVzaW5n IGZsYWdzIChvciBzb21ldGhpbmcgbGlrZSB0aGF0KS4KICAqLwogCitNVkRl cGVuZGVuY2llcyBsb2FkX212X2RlcGVuZGVuY2llcyhPaWQgbXZvaWQpOwor CiBieXRlYSAqIHNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRl bmNpZXMgZGVwZW5kZW5jaWVzKTsKIAogLyogZGVzZXJpYWxpemF0aW9uIG9m IHN0YXRzIChzZXJpYWxpemF0aW9uIGlzIHByaXZhdGUgdG8gYW5hbHl6ZSkg Ki8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZf ZGVwZW5kZW5jaWVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv bXZfZGVwZW5kZW5jaWVzLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lNzU5OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0CkBAIC0w LDAgKzEsMTcyIEBACistLSBkYXRhIHR5cGUgcGFzc2VkIGJ5IHZhbHVlCitD UkVBVEUgVEFCTEUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKAorICAgIGEg SU5ULAorICAgIGIgSU5ULAorICAgIGMgSU5UCispOworLS0gdW5rbm93biBj b2x1bW4KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzICh1bmtub3duX2NvbHVtbikgV0lUSCAoZGVwZW5kZW5jaWVz KTsKK0VSUk9SOiAgY29sdW1uICJ1bmtub3duX2NvbHVtbiIgcmVmZXJlbmNl ZCBpbiBzdGF0aXN0aWNzIGRvZXMgbm90IGV4aXN0CistLSBzaW5nbGUgY29s dW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyAoYSkgV0lUSCAoZGVwZW5kZW5jaWVzKTsKK0VSUk9SOiAgbXVs dGl2YXJpYXRlIHN0YXRzIHJlcXVpcmUgMiBvciBtb3JlIGNvbHVtbnMKKy0t IHNpbmdsZSBjb2x1bW4sIGR1cGxpY2F0ZWQKK0NSRUFURSBTVEFUSVNUSUNT IHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLGEpIFdJVEggKGRl cGVuZGVuY2llcyk7CitFUlJPUjogIGR1cGxpY2F0ZSBjb2x1bW4gbmFtZSBp biBzdGF0aXN0aWNzIGRlZmluaXRpb24KKy0tIHR3byBjb2x1bW5zLCBvbmUg ZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMgKGEsIGEsIGIpIFdJVEggKGRlcGVuZGVuY2llcyk7 CitFUlJPUjogIGR1cGxpY2F0ZSBjb2x1bW4gbmFtZSBpbiBzdGF0aXN0aWNz IGRlZmluaXRpb24KKy0tIHVua25vd24gb3B0aW9uCitDUkVBVEUgU1RBVElT VElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYiwgYykg V0lUSCAodW5rbm93bl9vcHRpb24pOworRVJST1I6ICB1bnJlY29nbml6ZWQg U1RBVElTVElDUyBvcHRpb24gInVua25vd25fb3B0aW9uIgorLS0gY29ycmVj dCBjb21tYW5kCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoYSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzKTsK Ky0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcykK K0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNF TEVDVCBtb2QoaSwgMTExKSwgbW9kKGksIDEyMyksIG1vZChpLCAyMykgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgZnVu Y3Rpb25hbF9kZXBlbmRlbmNpZXM7CitTRUxFQ1QgZGVwc19lbmFibGVkLCBk ZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFk ZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworIGRlcHNf ZW5hYmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19tdl9zdGF0c19kZXBlbmRlbmNp ZXNfc2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgZiAg ICAgICAgICB8IAorKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llczsKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VS VCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBp LzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MCkgcyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CitT RUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19k ZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRp c3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2ll cyc6OnJlZ2NsYXNzOworIGRlcHNfZW5hYmxlZCB8IGRlcHNfYnVpbHQgfCBw Z19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyAKKy0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdCAgICAgICAgICAgIHwgdCAgICAgICAgICB8IDEgPT4gMiwgMSA9PiAz LCAyID0+IDMKKygxIHJvdykKKworVFJVTkNBVEUgZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXM7CistLSBhID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8gZnVu Y3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUw LCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOwor QU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBz X2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJF IHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xh c3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRz X2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgICAgfCB0ICAgICAgICAgIHwgMSA9PiAyLCAxID0+IDMKKygxIHJvdykK KworVFJVTkNBVEUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CistLSBjaGVj ayBleHBsYWluIChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFp biBpbmRleCBzY2FuKQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXMKKyAgICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRF IElOREVYIGZkZXBzX2lkeCBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAo YSwgYik7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworU0VM RUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0 aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMn OjpyZWdjbGFzczsKKyBkZXBzX2VuYWJsZWQgfCBkZXBzX2J1aWx0IHwgcGdf bXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgCistLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgICB8IHQgICAgICAgICAgfCAxID0+IDIsIDEgPT4gMywg MiA9PiAzCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIG9mZikKKyBTRUxF Q1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFIGEgPSAx MCBBTkQgYiA9IDU7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMKKyAgIFJlY2hlY2sgQ29uZDogKChhID0gMTAp IEFORCAoYiA9IDUpKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIGZk ZXBzX2lkeAorICAgICAgICAgSW5kZXggQ29uZDogKChhID0gMTApIEFORCAo YiA9IDUpKQorKDQgcm93cykKKworRFJPUCBUQUJMRSBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llczsKKy0tIHZhcmxlbmEgdHlwZSAodGV4dCkKK0NSRUFURSBU QUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoCisgICAgYSBURVhULAor ICAgIGIgVEVYVCwKKyAgICBjIFRFWFQKKyk7CitDUkVBVEUgU1RBVElTVElD UyBzMiBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYiwgYykgV0lU SCAoZGVwZW5kZW5jaWVzKTsKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzCisgICAgIFNFTEVDVCBtb2QoaSwgMTExKSwgbW9kKGksIDEy MyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkg cyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CitTRUxF Q1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBl bmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3Rp YyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6 OnJlZ2NsYXNzOworIGRlcHNfZW5hYmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19t dl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICAgIHwgZiAgICAgICAgICB8IAorKDEgcm93KQorCitUUlVO Q0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGEgPT4gYiwgYSA9 PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5j aWVzCisgICAgIFNFTEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXM7CitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1 aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQor ICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5j dGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworIGRlcHNfZW5hYmxl ZCB8IGRlcHNfYnVpbHQgfCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdCAgICAgICAg ICB8IDEgPT4gMiwgMSA9PiAzLCAyID0+IDMKKygxIHJvdykKKworVFJVTkNB VEUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CistLSBhID0+IGIsIGEgPT4g YworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAg U0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdf bXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19i dWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0ICAgICAgICAgIHwgMSA9PiAy LCAxID0+IDMKKygxIHJvdykKKworVFJVTkNBVEUgZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXM7CistLSBjaGVjayBleHBsYWluIChleHBlY3QgYml0bWFwIGlu ZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2FuKQorSU5TRVJUIElOVE8g ZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAwMDAs IGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MDAwKSBzKGkpOworQ1JFQVRFIElOREVYIGZkZXBzX2lkeCBPTiBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcyAoYSwgYik7CitBTkFMWVpFIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWls dCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAg RlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKyBkZXBzX2VuYWJsZWQg fCBkZXBzX2J1aWx0IHwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cg CistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQgICAgICAgICAg fCAxID0+IDIsIDEgPT4gMywgMiA9PiAzCisoMSByb3cpCisKK0VYUExBSU4g KENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzIFdIRVJFIGEgPSAnMTAnIEFORCBiID0gJzUnOworICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9u IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICBSZWNoZWNrIENvbmQ6ICgo YSA9ICcxMCc6OnRleHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkpCisgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gZmRlcHNfaWR4CisgICAgICAgICBJbmRl eCBDb25kOiAoKGEgPSAnMTAnOjp0ZXh0KSBBTkQgKGIgPSAnNSc6OnRleHQp KQorKDQgcm93cykKKworRFJPUCBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llczsKKy0tIE5VTEwgdmFsdWVzIChtaXggb2YgaW50IGFuZCB0ZXh0IGNv bHVtbnMpCitDUkVBVEUgVEFCTEUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMg KAorICAgIGEgSU5ULAorICAgIGIgVEVYVCwKKyAgICBjIElOVCwKKyAgICBk IFRFWFQKKyk7CitDUkVBVEUgU1RBVElTVElDUyBzMyBPTiBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoYSwgYiwgYywgZCkgV0lUSCAoZGVwZW5kZW5jaWVz KTsKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAg IFNFTEVDVAorICAgICAgICAgbW9kKGksIDEwMCksCisgICAgICAgICAoQ0FT RSBXSEVOIG1vZChpLCAyMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSwy MDApIEVORCksCisgICAgICAgICBtb2QoaSwgNDAwKSwKKyAgICAgICAgIChD QVNFIFdIRU4gbW9kKGksIDMwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChp LDYwMCkgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw KSBzKGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKK1NF TEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2Rl cGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlz dGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVz Jzo6cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8ICAg ICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyAgICAgIAorLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0ICAgICAgICAg IHwgMiA9PiAxLCAzID0+IDEsIDMgPT4gMiwgNCA9PiAxLCA0ID0+IDIKKygx IHJvdykKKworRFJPUCBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4 IGJlYzAzMTYuLjRmMmZmYjggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQpAQCAtMTEwLDMgKzExMCw2IEBAIHRlc3Q6IGV2 ZW50X3RyaWdnZXIKIAogIyBydW4gc3RhdHMgYnkgaXRzZWxmIGJlY2F1c2Ug aXRzIGRlbGF5IG1heSBiZSBpbnN1ZmZpY2llbnQgdW5kZXIgaGVhdnkgbG9h ZAogdGVzdDogc3RhdHMKKworIyBydW4gdGVzdHMgb2YgbXVsdGl2YXJpYXRl IHN0YXRzCit0ZXN0OiBtdl9kZXBlbmRlbmNpZXMKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVn cmVzcy9zZXJpYWxfc2NoZWR1bGUKaW5kZXggN2U5YjMxOS4uMDk3YTA0ZiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKQEAgLTE2 MiwzICsxNjIsNCBAQCB0ZXN0OiB3aXRoCiB0ZXN0OiB4bWwKIHRlc3Q6IGV2 ZW50X3RyaWdnZXIKIHRlc3Q6IHN0YXRzCit0ZXN0OiBtdl9kZXBlbmRlbmNp ZXMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X2RlcGVu ZGVuY2llcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9kZXBlbmRl bmNpZXMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjQ4ZGVhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9tdl9kZXBlbmRlbmNpZXMuc3FsCkBAIC0wLDAgKzEsMTUwIEBACist LSBkYXRhIHR5cGUgcGFzc2VkIGJ5IHZhbHVlCitDUkVBVEUgVEFCTEUgZnVu Y3Rpb25hbF9kZXBlbmRlbmNpZXMgKAorICAgIGEgSU5ULAorICAgIGIgSU5U LAorICAgIGMgSU5UCispOworCistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRF IFNUQVRJU1RJQ1MgczEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKHVu a25vd25fY29sdW1uKSBXSVRIIChkZXBlbmRlbmNpZXMpOworCistLSBzaW5n bGUgY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoYSkgV0lUSCAoZGVwZW5kZW5jaWVzKTsKKworLS0g c2luZ2xlIGNvbHVtbiwgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1Mg czEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsYSkgV0lUSCAoZGVw ZW5kZW5jaWVzKTsKKworLS0gdHdvIGNvbHVtbnMsIG9uZSBkdXBsaWNhdGVk CitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llcyAoYSwgYSwgYikgV0lUSCAoZGVwZW5kZW5jaWVzKTsKKworLS0gdW5r bm93biBvcHRpb24KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9u YWxfZGVwZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRIICh1bmtub3duX29wdGlv bik7CisKKy0tIGNvcnJlY3QgY29tbWFuZAorQ1JFQVRFIFNUQVRJU1RJQ1Mg czEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsIGIsIGMpIFdJVEgg KGRlcGVuZGVuY2llcyk7CisKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzCisgICAgIFNFTEVDVCBtb2QoaSwgMTExKSwgbW9kKGksIDEy MyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkg cyhpKTsKKworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKwor U0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNp ZXMnOjpyZWdjbGFzczsKKworVFJVTkNBVEUgZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXM7CisKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJ TlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBpLzEw LCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkg cyhpKTsKKworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKwor U0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNp ZXMnOjpyZWdjbGFzczsKKworVFJVTkNBVEUgZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXM7CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBmdW5j dGlvbmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAs IGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitB TkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVw c19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNp ZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVS RSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2Ns YXNzOworCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKwor LS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBu b3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBpLzEwMDAwLCBpLzIwMDAwLCBp LzQwMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsK K0NSRUFURSBJTkRFWCBmZGVwc19pZHggT04gZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXMgKGEsIGIpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll czsKKworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZf c3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19t dl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMnOjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQor IFNFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUg YSA9IDEwIEFORCBiID0gNTsKKworRFJPUCBUQUJMRSBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llczsKKworLS0gdmFybGVuYSB0eXBlICh0ZXh0KQorQ1JFQVRF IFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzICgKKyAgICBhIFRFWFQs CisgICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKKworQ1JFQVRFIFNUQVRJ U1RJQ1MgczIgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsIGIsIGMp IFdJVEggKGRlcGVuZGVuY2llcyk7CisKKy0tIHJhbmRvbSBkYXRhIChubyBm dW5jdGlvbmFsIGRlcGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIGZ1bmN0aW9u YWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBtb2QoaSwgMTExKSwgbW9k KGksIDEyMyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwMCkgcyhpKTsKKworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll czsKKworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZf c3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19t dl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMnOjpyZWdjbGFzczsKKworVFJVTkNBVEUgZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXM7CisKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lO U0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVD VCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwMCkgcyhpKTsKKworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll czsKKworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwgcGdfbXZf c3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJPTSBwZ19t dl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMnOjpyZWdjbGFzczsKKworVFJVTkNBVEUgZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXM7CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5U TyBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8xMCwg aS8xNTAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMo aSk7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxF Q1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBl bmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3Rp YyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6 OnJlZ2NsYXNzOworCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll czsKKworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBz Y2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzCisgICAgIFNFTEVDVCBpLzEwMDAwLCBpLzIw MDAwLCBpLzQwMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkg cyhpKTsKK0NSRUFURSBJTkRFWCBmZGVwc19pZHggT04gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMgKGEsIGIpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llczsKKworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwg cGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKworRVhQTEFJTiAoQ09TVFMg b2ZmKQorIFNFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMg V0hFUkUgYSA9ICcxMCcgQU5EIGIgPSAnNSc7CisKK0RST1AgVEFCTEUgZnVu Y3Rpb25hbF9kZXBlbmRlbmNpZXM7CisKKy0tIE5VTEwgdmFsdWVzIChtaXgg b2YgaW50IGFuZCB0ZXh0IGNvbHVtbnMpCitDUkVBVEUgVEFCTEUgZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMgKAorICAgIGEgSU5ULAorICAgIGIgVEVYVCwK KyAgICBjIElOVCwKKyAgICBkIFRFWFQKKyk7CisKK0NSRUFURSBTVEFUSVNU SUNTIHMzIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBjLCBk KSBXSVRIIChkZXBlbmRlbmNpZXMpOworCitJTlNFUlQgSU5UTyBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QKKyAgICAgICAgIG1vZChp LCAxMDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMjAwKSA9IDAg VEhFTiBOVUxMIEVMU0UgbW9kKGksMjAwKSBFTkQpLAorICAgICAgICAgbW9k KGksIDQwMCksCisgICAgICAgICAoQ0FTRSBXSEVOIG1vZChpLCAzMDApID0g MCBUSEVOIE5VTEwgRUxTRSBtb2QoaSw2MDApIEVORCkKKyAgICAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKKworQU5BTFlaRSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llczsKKworU0VMRUNUIGRlcHNfZW5hYmxlZCwg ZGVwc19idWlsdCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3Rh ZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQg PSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKworRFJP UCBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKLS0gCjIuNS4wCgo= --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename="0002-shared-infrastructure-and-functional-dependencies.patch" Content-Type: text/x-patch; name="0002-shared-infrastructure-and-functional-dependencies.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAyYzcxOWYxNDVhYjFmNzRlODdiMGRhMmM0Y2ZmNjdhZjlmNGE4ZTUw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDE5OjUxOjQ4 ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzldIHNoYXJlZCBpbmZyYXN0cnVj dHVyZSBhbmQgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkJhc2ljIGluZnJh c3RydWN0dXJlIHNoYXJlZCBieSBhbGwga2luZHMgb2YgbXVsdGl2YXJpYXRl IHN0YXRzLCBtb3N0CmltcG9ydGFudGx5OgoKLSBhZGRzIGEgbmV3IHN5c3Rl bSBjYXRhbG9nIChwZ19tdl9zdGF0aXN0aWMpCi0gQ1JFQVRFIFNUQVRJU1RJ Q1MgbmFtZSBPTiB0YWJsZSAoY29sdW1ucykgV0lUSCAob3B0aW9ucykKLSBE Uk9QIFNUQVRJU1RJQ1MgbmFtZQotIEFMVEVSIFNUQVRJU1RJQ1MgLi4uIE9X TkVSIFRPIC8gU0VUIFNDSEVNQSAvIFJFTkFNRQotIGltcGxlbWVudGF0aW9u IG9mIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzICh0aGUgc2ltcGxlc3QgdHlw ZSBvZgogIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzKQotIGJ1aWxkaW5nIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGluIEFOQUxZWkUKLSB1cGRhdGVzIHJl Z3Jlc3Npb24gdGVzdHMgKG5ldyBjYXRhbG9nIGV0Yy4pCgpUaGlzIGRvZXMg bm90IGluY2x1ZGUgYW55IGNoYW5nZXMgdG8gdGhlIG9wdGltaXplciwgaS5l LiBpdCBkb2VzIG5vdAppbmZsdWVuY2UgdGhlIHF1ZXJ5IHBsYW5uaW5nIChz dWJqZWN0IHRvIGZvbGxvdy11cCBwYXRjaGVzKS4KClRoZSBjdXJyZW50IGlt cGxlbWVudGF0aW9uIHJlcXVpcmVzIGEgdmFsaWQgJ2x0b3ByJyBmb3IgdGhl IGNvbHVtbnMsIHNvCnRoYXQgd2UgY2FuIHNvcnQgdGhlIHNhbXBsZSByb3dz IGluIHZhcmlvdXMgd2F5cywgYm90aCBpbiB0aGlzIHBhdGNoCmFuZCBvdGhl ciBraW5kcyBvZiBzdGF0aXN0aWNzLiBNYXliZSB0aGlzIHJlc3RyaWN0aW9u IGNvdWxkIGJlIHJlbGF4ZWQKaW4gdGhlIGZ1dHVyZSwgcmVxdWlyaW5nIGp1 c3QgJ2Vxb3ByJyBpbiBjYXNlIG9mIHN0YXRzIG5vdCBzb3J0aW5nIHRoZQpk YXRhIChlLmcuIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGFuZCBNQ1YgbGlz dHMpLgoKTWF5YmUgc29tZSBvZiB0aGUgc3RhdHMgKGZ1bmN0aW9uYWwgZGVw ZW5kZW5jaWVzIGFuZCBNQ1YgbGlzdCB3aXRoCmxpbWl0ZWQgZnVuY3Rpb25h bGl0eSkgbWlnaHQgYmUgbWFkZSB0byB3b3JrIHdpdGggaGFzaGVzIG9mIHRo ZSB2YWx1ZXMsCndoaWNoIGlzIHN1ZmZpY2llbnQgZm9yIGVxdWFsaXR5IGNv bXBhcmlzb25zLiBCdXQgdGhlIHF1ZXJpZXMgd291bGQKcmVxdWlyZSB0aGUg ZXF1YWxpdHkgb3BlcmF0b3IgYW55d2F5LCBzbyBpdCdzIG5vdCByZWFsbHkg YSB3ZWFrZXIKcmVxdWlyZW1lbnQuIFRoZSBoYXNoZXMgbWlnaHQgcmVkdWNl IHNwYWNlIHJlcXVpcmVtZW50cywgdGhvdWdoLgoKVGhlIGFsZ29yaXRobSBk ZXRlY3RpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyByYXRoZXIgc2ltcGxlIGFu ZCBwcm9iYWJseQpuZWVkcyBpbXByb3ZlbWVudHMsIHNvIHRoYXQgaXQgZGV0 ZWN0cyBtb3JlIGNvbXBsaWNhdGVkIGRlcGVuZGVuY2llcywKYW5kIGFsc28g dmFsaWRhdGlvbiBvZiB0aGUgbWF0aC4KClRoZSBuYW1lICdmdW5jdGlvbmFs IGRlcGVuZGVuY2llcycgaXMgbW9yZSBjb3JyZWN0ICh0aGFuICdhc3NvY2lh dGlvbgpydWxlcycpIGFzIGl0J3MgZXhhY3RseSB0aGUgbmFtZSB1c2VkIGlu IHJlbGF0aW9uYWwgdGhlb3J5IChlc3AuIE5vcm1hbApGb3JtcykgZm9yIHRy YWNraW5nIGNvbHVtbi1sZXZlbCBkZXBlbmRlbmNpZXMuCgpUaGUgbXVsdGl2 YXJpYXRlIHN0YXRpc3RpY3MgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBp biB0d28gc2l0dWF0aW9ucwoKIChhKSBhZnRlciBhIERST1AgVEFCTEUgKG9i dmlvdXNseSkKCiAoYikgYWZ0ZXIgQUxURVIgVEFCTEUgLi4uIERST1AgQ09M VU1OLCBpZiB0aGUgc3RhdGlzdGljcyB3b3VsZCBiZQogICAgIGRlZmluZWQg b24gbGVzcyB0aGFuIDIgY29sdW1ucyAocmVtYWluaW5nKQoKSWYgdGhlcmUg YXJlIG1vcmUgYXQgbGVhc3QgdHdvIHJlbWFpbmluZyBjb2x1bW5zLCB3ZSBr ZWVwIHRoZQpzdGF0aXN0aWNzIGJ1dCBwZXJmb3JtIGNsZWFudXAgb24gdGhl IG5leHQgQU5BTFlaRS4gVGhlIGRyb3BwZWQgY29sdW1ucwphcmUgcmVtb3Zl ZCBmcm9tIHN0YWtleXMsIGFuZCB0aGUgbmV3IHN0YXRpc3RpY3MgaXMgYnVp bHQgb24gdGhlCnNtYWxsZXIgc2V0LgoKV2UgY2FuJ3QgZG8gdGhpcyBhdCBE Uk9QIENPTFVNTiwgYmVjYXVzZSB0aGF0J2QgbGVhdmUgdXMgd2l0aCBpbnZh bGlkCnN0YXRpc3RpY3MsIG9yIHdlJ2QgaGF2ZSB0byB0aHJvdyBpdCBhd2F5 IGFsdGhvdWdoIHdlIGNhbiBzdGlsbCB1c2UgaXQuClRoaXMgbGF6eSBhcHBy b2FjaCBsZXRzIHVzIHVzZSB0aGUgc3RhdGlzdGljcyBhbHRob3VnaCBzb21l IG9mIHRoZQpjb2x1bW5zIGFyZSBkZWFkLgoKVGhpcyBhbHNvIGFkZHMgYSBz aW1wbGUgbGlzdCBvZiBzdGF0aXN0aWNzIHRvIFxkIGluIHBzcWwuCgpUaGlz IG1lYW5zIHRoZSBzdGF0aXN0aWNzIGFyZSBjcmVhdGVkIHdpdGhpbiBhIHNj aGVtYSBieSB1c2luZyBhCnF1YWxpZmllZCBuYW1lIChvciB1c2luZyB0aGUg ZGVmYXVsdCBzY2hlbWEpCgogICBDUkVBVEUgU1RBVElTVElDUyBzY2hlbWEu c3RhdGlzdGljcyBPTiAuLi4KCmFuZCB0aGVuIGRyb3BwZWQgYnkgc3BlY2lm eWluZyBxdWFsaWZpZWQgbmFtZQoKICAgRFJPUCBTVEFUSVNUSUNTIHNjaGVt YS5zdGF0aXN0aWNzCgpvciBzZWFyY2hpbmcgdGhyb3VnaCBzZWFyY2hfcGF0 aCAoanVzdCBsaWtlIHdpdGggb3RoZXIgb2JqZWN0cykuCgpUaGlzIGFsc28g Z2V0cyByaWQgb2YgdGhlICIob3B0XylzdGF0c19uYW1lIiBkZWZpbml0aW9u cyBpbiBncmFtLnkgYW5kCmluc3RlYWQgcmVwbGFjZXMgdGhlbSB3aXRoIGp1 c3QgIm9wdF9hbnlfbmFtZSIsIGFsdGhvdWdoIHRoZSBvcHRpb25hbApjYXNl IGlzIG5vdCByZWFsbHkgaGFuZGxlZCBjdXJyZW50bHkgLSB0aGVyZSdzIG5v IGdlbmVyYXRlZCBuYW1lIHlldAooc28gZWl0aGVyIHdlIHNob3VsZCBkcm9w IGl0IG9yIGltcGxlbWVudCBpdCkuCgpJJ20gbm90IGVudGlyZWx5IHN1cmUg bWFraW5nIHN0YXRpc3RpY3Mgc2NoZW1hLXNwZWNpZmljIGlzIHRoYXQgYSBn cmVhdAppZGVhLiBNYXliZSBpdCBzaG91bGQgYmUgImdsb2JhbCIsIGJ1dCB0 aGF0IGRvZXMgbm90IHNlZW0gcmlnaHQgKGUuZy4KaXQgbWFrZXMgbXVsdGkt dGVuYW50IHN5c3RlbXMgYmFzZWQgb24gc2NoZW1hcyBtb3JlIGRpZmZpY3Vs dCB0bwptYW5hZ2UsIGJlY2F1c2UgdGVuYW50cyB3b3VsZCBpbnRlcmFjdCku Ci0tLQogZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAg ICAgICAgIHwgICAzICsKIGRvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3RhdGlz dGljcy5zZ21sICAgICAgICB8IDExNSArKysrKysrCiBkb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwgICAgICAgfCAxOTggKysrKysr KysrKysrCiBkb2Mvc3JjL3NnbWwvcmVmL2Ryb3Bfc3RhdGlzdGljcy5zZ21s ICAgICAgICAgfCAgOTEgKysrKysrCiBkb2Mvc3JjL3NnbWwvcmVmZXJlbmNl LnNnbWwgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQv Y2F0YWxvZy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgICAgICAgICAgICAgICAgICB8 ICAyNyArKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMgICAg ICAgICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAu YyAgICAgICAgICAgICAgICAgICAgfCAxMDIgKysrKysrCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL25hbWVzcGFjZS5jICAgICAgICAgICAgICAgfCAgNTEgKysr CiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyAgICAgICAg ICAgfCAgNTQgKysrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsICAgICAgICAgIHwgIDExICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvYWx0ZXIuYyAgICAgICAgICAgICAgICAgIHwgICAzICsK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyAgICAgICAgICAgICAg ICB8ICAyMSArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZHJvcGNtZHMuYyAg ICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuYyAgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9j b21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgICAgICAgfCAyNzcgKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAg ICAgICAgICAgICAgIHwgIDE3ICsKIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMgICAgICAgICAgICAgICAgICB8ICAxOCArKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAgIHwgIDU5ICsrKysK IHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgICAg ICB8ICA2MCArKystCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAg ICAgICAgICAgICAgICAgfCAgMTQgKwogc3JjL2JhY2tlbmQvdXRpbHMvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgNTkgKysr Kwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3lzY2FjaGUuYyAgICAgICAg ICAgIHwgIDIzICsrCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2Vm aWxlICAgICAgICAgICAgfCAgMTcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZz dGF0cy9SRUFETUUuZGVwZW5kZW5jaWVzIHwgMjIyICsrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgICAgICAgICAg ICB8IDM1NiArKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvY29tbW9uLmggICAgICAgICAgICB8ICA3NSArKysrKwog c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBlbmRlbmNpZXMuYyAgICAg IHwgNDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgNDQgKysr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCAgICAgICAgICAg ICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5oICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2lu ZGV4aW5nLmggICAgICAgICAgICAgICAgfCAgIDcgKwogc3JjL2luY2x1ZGUv Y2F0YWxvZy9uYW1lc3BhY2UuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmggICAgICAgICB8 ICA3NSArKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmggICAg ICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvdG9h c3RpbmcuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9j b21tYW5kcy9kZWZyZW0uaCAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgICAgICAgIHwg ICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAg ICAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5o ICAgICAgICAgICAgICAgICAgfCAgMjggKysKIHNyYy9pbmNsdWRlL3V0aWxz L2FjbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgICAgICAgfCAgNzAg KysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAg ICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5o ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMv c3lzY2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0ICB8ICAgNyAr LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAg ICAgIHwgICA5ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2FuaXR5 X2NoZWNrLm91dCAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9v YmplY3RfYWRkcmVzcy5zcWwgICAgICAgfCAgIDQgKy0KIDUyIGZpbGVzIGNo YW5nZWQsIDI2MTMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9zdGF0 aXN0aWNzLnNnbWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkb2Mvc3JjL3NnbWwvcmVmL2Ryb3Bfc3RhdGlzdGljcy5zZ21sCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRz LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5jaWVzCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv Y29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2RlcGVuZGVuY2llcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaAoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCBiZjk1NDUzLi41 MjRlZDgzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVz LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCkBA IC0zMiw2ICszMiw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxlIHNnbWwg c291cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgogPCFFTlRJVFkgYWx0 ZXJTZXJ2ZXIgICAgICAgIFNZU1RFTSAiYWx0ZXJfc2VydmVyLnNnbWwiPgog PCFFTlRJVFkgYWx0ZXJTZXF1ZW5jZSAgICAgIFNZU1RFTSAiYWx0ZXJfc2Vx dWVuY2Uuc2dtbCI+CiA8IUVOVElUWSBhbHRlclN5c3RlbSAgICAgICAgU1lT VEVNICJhbHRlcl9zeXN0ZW0uc2dtbCI+Cis8IUVOVElUWSBhbHRlclN0YXRp c3RpY3MgICAgU1lTVEVNICJhbHRlcl9zdGF0aXN0aWNzLnNnbWwiPgogPCFF TlRJVFkgYWx0ZXJUYWJsZSAgICAgICAgIFNZU1RFTSAiYWx0ZXJfdGFibGUu c2dtbCI+CiA8IUVOVElUWSBhbHRlclRhYmxlU3BhY2UgICAgU1lTVEVNICJh bHRlcl90YWJsZXNwYWNlLnNnbWwiPgogPCFFTlRJVFkgYWx0ZXJUU0NvbmZp ZyAgICAgIFNZU1RFTSAiYWx0ZXJfdHNjb25maWcuc2dtbCI+CkBAIC03Niw2 ICs3Nyw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxlIHNnbWwgc291cmNl IGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgogPCFFTlRJVFkgY3JlYXRlU2No ZW1hICAgICAgIFNZU1RFTSAiY3JlYXRlX3NjaGVtYS5zZ21sIj4KIDwhRU5U SVRZIGNyZWF0ZVNlcXVlbmNlICAgICBTWVNURU0gImNyZWF0ZV9zZXF1ZW5j ZS5zZ21sIj4KIDwhRU5USVRZIGNyZWF0ZVNlcnZlciAgICAgICBTWVNURU0g ImNyZWF0ZV9zZXJ2ZXIuc2dtbCI+Cis8IUVOVElUWSBjcmVhdGVTdGF0aXN0 aWNzICAgU1lTVEVNICJjcmVhdGVfc3RhdGlzdGljcy5zZ21sIj4KIDwhRU5U SVRZIGNyZWF0ZVRhYmxlICAgICAgICBTWVNURU0gImNyZWF0ZV90YWJsZS5z Z21sIj4KIDwhRU5USVRZIGNyZWF0ZVRhYmxlQXMgICAgICBTWVNURU0gImNy ZWF0ZV90YWJsZV9hcy5zZ21sIj4KIDwhRU5USVRZIGNyZWF0ZVRhYmxlU3Bh Y2UgICBTWVNURU0gImNyZWF0ZV90YWJsZXNwYWNlLnNnbWwiPgpAQCAtMTE5 LDYgKzEyMSw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxlIHNnbWwgc291 cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgogPCFFTlRJVFkgZHJvcFNj aGVtYSAgICAgICAgIFNZU1RFTSAiZHJvcF9zY2hlbWEuc2dtbCI+CiA8IUVO VElUWSBkcm9wU2VxdWVuY2UgICAgICAgU1lTVEVNICJkcm9wX3NlcXVlbmNl LnNnbWwiPgogPCFFTlRJVFkgZHJvcFNlcnZlciAgICAgICAgIFNZU1RFTSAi ZHJvcF9zZXJ2ZXIuc2dtbCI+Cis8IUVOVElUWSBkcm9wU3RhdGlzdGljcyAg ICAgU1lTVEVNICJkcm9wX3N0YXRpc3RpY3Muc2dtbCI+CiA8IUVOVElUWSBk cm9wVGFibGUgICAgICAgICAgU1lTVEVNICJkcm9wX3RhYmxlLnNnbWwiPgog PCFFTlRJVFkgZHJvcFRhYmxlU3BhY2UgICAgIFNZU1RFTSAiZHJvcF90YWJs ZXNwYWNlLnNnbWwiPgogPCFFTlRJVFkgZHJvcFRyYW5zZm9ybSAgICAgIFNZ U1RFTSAiZHJvcF90cmFuc2Zvcm0uc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL2FsdGVyX3N0YXRpc3RpY3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvYWx0ZXJfc3RhdGlzdGljcy5zZ21sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDIxYzAKLS0tIC9kZXYvbnVsbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N0YXRpc3RpY3Muc2dtbApA QCAtMCwwICsxLDExNSBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9hbHRl cl9zdGF0aXN0aWNzLnNnbWwKK1Bvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgor LS0+CisKKzxyZWZlbnRyeSBpZD0iU1FMLUFMVEVSU1RBVElTVElDUyI+Cisg PGluZGV4dGVybSB6b25lPSJzcWwtYWx0ZXJzdGF0aXN0aWNzIj4KKyAgPHBy aW1hcnk+QUxURVIgU1RBVElTVElDUzwvcHJpbWFyeT4KKyA8L2luZGV4dGVy bT4KKworIDxyZWZtZXRhPgorICA8cmVmZW50cnl0aXRsZT5BTFRFUiBTVEFU SVNUSUNTPC9yZWZlbnRyeXRpdGxlPgorICA8bWFudm9sbnVtPjc8L21hbnZv bG51bT4KKyAgPHJlZm1pc2NpbmZvPlNRTCAtIExhbmd1YWdlIFN0YXRlbWVu dHM8L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2 PgorICA8cmVmbmFtZT5BTFRFUiBTVEFUSVNUSUNTPC9yZWZuYW1lPgorICA8 cmVmcHVycG9zZT4KKyAgIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBhIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzCisgIDwvcmVmcHVycG9zZT4KKyA8L3Jl Zm5hbWVkaXY+CisKKyA8cmVmc3lub3BzaXNkaXY+Cis8c3lub3BzaXM+CitB TFRFUiBTVEFUSVNUSUNTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5uYW1lPC9yZXBsYWNlYWJsZT4gT1dORVIgVE8geyA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4gfCBD VVJSRU5UX1VTRVIgfCBTRVNTSU9OX1VTRVIgfQorQUxURVIgU1RBVElTVElD UyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFj ZWFibGU+IFJFTkFNRSBUTyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+bmV3X25hbWU8L3JlcGxhY2VhYmxlPgorQUxURVIgU1RBVElTVElDUyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFi bGU+IFNFVCBTQ0hFTUEgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm5ld19zY2hlbWE8L3JlcGxhY2VhYmxlPgorPC9zeW5vcHNpcz4KKyA8L3Jl ZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RGVzY3Jp cHRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAgPGNvbW1hbmQ+QUxURVIg U1RBVElTVElDUzwvY29tbWFuZD4gY2hhbmdlcyB0aGUgcGFyYW1ldGVycyBv ZiBhbiBleGlzdGluZworICAgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MuICBB bnkgcGFyYW1ldGVycyBub3Qgc3BlY2lmaWNhbGx5IHNldCBpbiB0aGUKKyAg IDxjb21tYW5kPkFMVEVSIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IGNvbW1hbmQg cmV0YWluIHRoZWlyIHByaW9yIHNldHRpbmdzLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBZb3UgbXVzdCBvd24gdGhlIHN0YXRpc3RpY3MgdG8gdXNl IDxjb21tYW5kPkFMVEVSIFNUQVRJU1RJQ1M8Lz4uCisgICBUbyBjaGFuZ2Ug YSBzdGF0aXN0aWNzJyBzY2hlbWEsIHlvdSBtdXN0IGFsc28gaGF2ZSA8bGl0 ZXJhbD5DUkVBVEU8Lz4KKyAgIHByaXZpbGVnZSBvbiB0aGUgbmV3IHNjaGVt YS4KKyAgIFRvIGFsdGVyIHRoZSBvd25lciwgeW91IG11c3QgYWxzbyBiZSBh IGRpcmVjdCBvciBpbmRpcmVjdCBtZW1iZXIgb2YgdGhlIG5ldworICAgb3du aW5nIHJvbGUsIGFuZCB0aGF0IHJvbGUgbXVzdCBoYXZlIDxsaXRlcmFsPkNS RUFURTwvbGl0ZXJhbD4gcHJpdmlsZWdlIG9uCisgICB0aGUgc3RhdGlzdGlj cycgc2NoZW1hLiAgKFRoZXNlIHJlc3RyaWN0aW9ucyBlbmZvcmNlIHRoYXQg YWx0ZXJpbmcgdGhlIG93bmVyCisgICBkb2Vzbid0IGRvIGFueXRoaW5nIHlv dSBjb3VsZG4ndCBkbyBieSBkcm9wcGluZyBhbmQgcmVjcmVhdGluZyB0aGUg c3RhdGlzdGljcy4KKyAgIEhvd2V2ZXIsIGEgc3VwZXJ1c2VyIGNhbiBhbHRl ciBvd25lcnNoaXAgb2YgYW55IHN0YXRpc3RpY3MgYW55d2F5LikKKyAgPC9w YXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Q YXJhbWV0ZXJzPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgPHZhcmlhYmxl bGlzdD4KKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT48 L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAg ICAgIFRoZSBuYW1lIChvcHRpb25hbGx5IHNjaGVtYS1xdWFsaWZpZWQpIG9m IGEgc3RhdGlzdGljcyB0byBiZSBhbHRlcmVkLgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+bmV3X293bmVyPC9yZXBsYWNlYWJsZT48L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IFRoZSB1c2VyIG5hbWUgb2YgdGhlIG5ldyBvd25lciBvZiB0aGUgc3RhdGlz dGljcy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKyAgIAorICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5l d19uYW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBuZXcgbmFtZSBmb3IgdGhl IHN0YXRpc3RpY3MuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisgICAKKyAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5uZXdfc2NoZW1hPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBuZXcgc2No ZW1hIGZvciB0aGUgc3RhdGlzdGljcy4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDwv dmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisg PHJlZnNlY3QxPgorICA8dGl0bGU+Q29tcGF0aWJpbGl0eTwvdGl0bGU+CisK KyAgPHBhcmE+CisgICBUaGVyZSdzIG5vIDxjb21tYW5kPkFMVEVSIFNUQVRJ U1RJQ1M8L2NvbW1hbmQ+IGNvbW1hbmQgaW4gdGhlIFNRTCBzdGFuZGFyZC4K KyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0 aXRsZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0i aW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0ic3FsLWNyZWF0 ZXN0YXRpc3RpY3MiPjwvbWVtYmVyPgorICAgPG1lbWJlcj48eHJlZiBsaW5r ZW5kPSJzcWwtZHJvcHN0YXRpc3RpY3MiPjwvbWVtYmVyPgorICA8L3NpbXBs ZWxpc3Q+CisgPC9yZWZzZWN0MT4KKworPC9yZWZlbnRyeT4KZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjA5ZmE1Ci0tLSAv ZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlz dGljcy5zZ21sCkBAIC0wLDAgKzEsMTk4IEBACis8IS0tCitkb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKK1Bvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0iU1FMLUNSRUFURVNU QVRJU1RJQ1MiPgorIDxpbmRleHRlcm0gem9uZT0ic3FsLWNyZWF0ZXN0YXRp c3RpY3MiPgorICA8cHJpbWFyeT5DUkVBVEUgU1RBVElTVElDUzwvcHJpbWFy eT4KKyA8L2luZGV4dGVybT4KKworIDxyZWZtZXRhPgorICA8cmVmZW50cnl0 aXRsZT5DUkVBVEUgU1RBVElTVElDUzwvcmVmZW50cnl0aXRsZT4KKyAgPG1h bnZvbG51bT43PC9tYW52b2xudW0+CisgIDxyZWZtaXNjaW5mbz5TUUwgLSBM YW5ndWFnZSBTdGF0ZW1lbnRzPC9yZWZtaXNjaW5mbz4KKyA8L3JlZm1ldGE+ CisKKyA8cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+Q1JFQVRFIFNUQVRJU1RJ Q1M8L3JlZm5hbWU+CisgIDxyZWZwdXJwb3NlPmRlZmluZSBhIG5ldyBzdGF0 aXN0aWNzPC9yZWZwdXJwb3NlPgorIDwvcmVmbmFtZWRpdj4KKworIDxyZWZz eW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4KK0NSRUFURSBTVEFUSVNUSUNTIFsg SUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVS Ij5zdGF0aXN0aWNzX25hbWU8L3JlcGxhY2VhYmxlPiBPTiA8cmVwbGFjZWFi bGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+ ICggWworICB7IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1 bW5fbmFtZTwvcmVwbGFjZWFibGU+IH0gXSBbLCAuLi5dKQorWyBXSVRIICgg PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRpc3RpY3NfcGFy YW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkKKzwv c3lub3BzaXM+CisKKyA8L3JlZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3Qx IGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1kZXNjcmlwdGlvbiI+CisgIDx0 aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICA8Y29t bWFuZD5DUkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4gd2lsbCBjcmVhdGUg YSBuZXcgbXVsdGl2YXJpYXRlCisgICBzdGF0aXN0aWNzIG9uIHRoZSB0YWJs ZS4gVGhlIHN0YXRpc3RpY3Mgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBpbiB0 aGUKKyAgIGN1cnJlbnQgZGF0YWJhc2UuIFRoZSBzdGF0aXN0aWNzIHdpbGwg YmUgb3duZWQgYnkgdGhlIHVzZXIgaXNzdWluZworICAgdGhlIGNvbW1hbmQu CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIElmIGEgc2NoZW1hIG5hbWUg aXMgZ2l2ZW4gKGZvciBleGFtcGxlLCA8bGl0ZXJhbD5DUkVBVEUgU1RBVElT VElDUworICAgbXlzY2hlbWEubXlzdGF0IC4uLjwvPikgdGhlbiB0aGUgc3Rh dGlzdGljcyBpcyBjcmVhdGVkIGluIHRoZSBzcGVjaWZpZWQKKyAgIHNjaGVt YS4gIE90aGVyd2lzZSBpdCBpcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHNj aGVtYS4gIFRoZSBuYW1lIG9mCisgICB0aGUgdGFibGUgbXVzdCBiZSBkaXN0 aW5jdCBmcm9tIHRoZSBuYW1lIG9mIGFueSBvdGhlciBzdGF0aXN0aWNzIGlu IHRoZQorICAgc2FtZSBzY2hlbWEuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFRvIGJlIGFibGUgdG8gY3JlYXRlIGEgdGFibGUsIHlvdSBtdXN0IGhh dmUgPGxpdGVyYWw+VVNBR0U8L2xpdGVyYWw+CisgICBwcml2aWxlZ2Ugb24g YWxsIGNvbHVtbiB0eXBlcyBvciB0aGUgdHlwZSBpbiB0aGUgPGxpdGVyYWw+ T0Y8L2xpdGVyYWw+CisgICBjbGF1c2UsIHJlc3BlY3RpdmVseS4KKyAgPC9w YXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Q YXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8 dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPklGIE5PVCBFWElT VFM8Lz48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIERvIG5vdCB0aHJvdyBhbiBlcnJvciBpZiBhIHN0YXRpc3RpY3Mgd2l0 aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgorICAgICAgQSBub3Rp Y2UgaXMgaXNzdWVkIGluIHRoaXMgY2FzZS4gIE5vdGUgdGhhdCB0aGVyZSBp cyBubyBndWFyYW50ZWUgdGhhdAorICAgICAgdGhlIGV4aXN0aW5nIHN0YXRp c3RpY3MgaXMgYW55dGhpbmcgbGlrZSB0aGUgb25lIHRoYXQgd291bGQgaGF2 ZSBiZWVuCisgICAgICBjcmVhdGVkLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVS Ij5zdGF0aXN0aWNzX25hbWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIG5hbWUgKG9wdGlv bmFsbHkgc2NoZW1hLXF1YWxpZmllZCkgb2YgdGhlIHN0YXRpc3RpY3MgdG8g YmUgY3JlYXRlZC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8 dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFt ZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBUaGUgbmFtZSAob3B0aW9uYWxseSBzY2hlbWEtcXVh bGlmaWVkKSBvZiB0aGUgdGFibGUgdGhlIHN0YXRpc3RpY3Mgc2hvdWxkCisg ICAgICBiZSBjcmVhdGVkIG9uLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5j b2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgbmFtZSBvZiBhIGNvbHVtbiB0 byBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhdGlzdGljcy4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5XSVRIICggPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRpc3RpY3NfcGFyYW1l dGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICk8L2xpdGVy YWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAg ICAuLi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zh cmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworICA8cmVmc2Vj dDIgaWQ9IlNRTC1DUkVBVEVTVEFUSVNUSUNTLXBhcmFtZXRlcnMiPgorICAg PHRpdGxlIGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1wYXJhbWV0ZXJzLXRp dGxlIj5TdGF0aXN0aWNzIFBhcmFtZXRlcnM8L3RpdGxlPgorCisgPGluZGV4 dGVybSB6b25lPSJzcWwtY3JlYXRlc3RhdGlzdGljcy1wYXJhbWV0ZXJzIj4K KyAgPHByaW1hcnk+c3RhdGlzdGljcyBwYXJhbWV0ZXJzPC9wcmltYXJ5Pgor IDwvaW5kZXh0ZXJtPgorCisgICA8cGFyYT4KKyAgICBUaGUgPGxpdGVyYWw+ V0lUSDwvPiBjbGF1c2UgY2FuIHNwZWNpZnkgPGZpcnN0dGVybT5zdGF0aXN0 aWNzIHBhcmFtZXRlcnM8Lz4KKyAgICBmb3Igc3RhdGlzdGljcy4gVGhlIGN1 cnJlbnRseSBhdmFpbGFibGUgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGJlbG93 LgorICAgPC9wYXJhPgorCisgICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPmRlcGVuZGVuY2llczwv PiAoPHR5cGU+Ym9vbGVhbjwvPik8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIEVuYWJsZXMgZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgZm9yIHRoZSBzdGF0aXN0aWNzLgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8L3Zhcmlh YmxlbGlzdD4KKworICA8L3JlZnNlY3QyPgorIDwvcmVmc2VjdDE+CisKKyA8 cmVmc2VjdDEgaWQ9IlNRTC1DUkVBVEVTVEFUSVNUSUNTLW5vdGVzIj4KKyAg PHRpdGxlPk5vdGVzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAuLi4K KyAgICA8L3BhcmE+CisKKyA8L3JlZnNlY3QxPgorCisKKyA8cmVmc2VjdDEg aWQ9IlNRTC1DUkVBVEVTVEFUSVNUSUNTLWV4YW1wbGVzIj4KKyAgPHRpdGxl PkV4YW1wbGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIENyZWF0ZSB0YWJs ZSA8c3RydWN0bmFtZT50MTwvPiB3aXRoIHR3byBmdW5jdGlvbmFsbHkgZGVw ZW5kZW50IGNvbHVtbnMsIGkuZS4KKyAgIGtub3dsZWRnZSBvZiBhIHZhbHVl IGluIHRoZSBmaXJzdCBjb2x1bW4gaXMgc3VmZmljaWVudCBmb3IgZGV0ZW1p bmluZyB0aGUKKyAgIHZhbHVlIGluIHRoZSBvdGhlciBjb2x1bW4uIFRoZW4g ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0IG9uIHRob3NlCisg ICBjb2x1bW5zOgorCis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgVEFCTEUg dDEgKAorICAgIGEgICBpbnQsCisgICAgYiAgIGludAorKTsKKworSU5TRVJU IElOVE8gdDEgU0VMRUNUIGkvMTAwLCBpLzUwMAorICAgICAgICAgICAgICAg ICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CisKK0NS RUFURSBTVEFUSVNUSUNTIHMxIE9OIHQxIChhLCBiKSBXSVRIIChkZXBlbmRl bmNpZXMpOworCitBTkFMWVpFIHQxOworCistLSB2YWxpZCBjb21iaW5hdGlv biBvZiB2YWx1ZXMKK0VYUExBSU4gQU5BTFlaRSBTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIChhID0gMSkgQU5EIChiID0gMSk7CisKKy0tIGludmFsaWQgY29t YmluYXRpb24gb2YgdmFsdWVzCitFWFBMQUlOIEFOQUxZWkUgU0VMRUNUICog RlJPTSB0MSBXSEVSRSAoYSA9IDEpIEFORCAoYiA9IDIpOworPC9wcm9ncmFt bGlzdGluZz4KKyAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZz ZWN0MT4KKyAgPHRpdGxlPkNvbXBhdGliaWxpdHk8L3RpdGxlPgorCisgIDxw YXJhPgorICAgVGhlcmUncyBubyA8Y29tbWFuZD5DUkVBVEUgU1RBVElTVElD UzwvY29tbWFuZD4gY29tbWFuZCBpbiB0aGUgU1FMIHN0YW5kYXJkLgorICA8 L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxl PlNlZSBBbHNvPC90aXRsZT4KKworICA8c2ltcGxlbGlzdCB0eXBlPSJpbmxp bmUiPgorICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJzcWwtYWx0ZXJzdGF0 aXN0aWNzIj48L21lbWJlcj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0i c3FsLWRyb3BzdGF0aXN0aWNzIj48L21lbWJlcj4KKyAgPC9zaW1wbGVsaXN0 PgorIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9kcm9wX3N0YXRpc3RpY3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvZHJvcF9zdGF0aXN0aWNzLnNnbWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5MDQ3YQotLS0gL2Rldi9udWxsCisr KyBiL2RvYy9zcmMvc2dtbC9yZWYvZHJvcF9zdGF0aXN0aWNzLnNnbWwKQEAg LTAsMCArMSw5MSBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9kcm9wX3N0 YXRpc3RpY3Muc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCistLT4K KworPHJlZmVudHJ5IGlkPSJTUUwtRFJPUFNUQVRJU1RJQ1MiPgorIDxpbmRl eHRlcm0gem9uZT0ic3FsLWRyb3BzdGF0aXN0aWNzIj4KKyAgPHByaW1hcnk+ RFJPUCBTVEFUSVNUSUNTPC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisg PHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPkRST1AgU1RBVElTVElDUzwv cmVmZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+Cisg IDxyZWZtaXNjaW5mbz5TUUwgLSBMYW5ndWFnZSBTdGF0ZW1lbnRzPC9yZWZt aXNjaW5mbz4KKyA8L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRpdj4KKyAgPHJl Zm5hbWU+RFJPUCBTVEFUSVNUSUNTPC9yZWZuYW1lPgorICA8cmVmcHVycG9z ZT5yZW1vdmUgYSBzdGF0aXN0aWNzPC9yZWZwdXJwb3NlPgorIDwvcmVmbmFt ZWRpdj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4KK0RST1Ag U1RBVElTVElDUyBbIElGIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXQorPC9zeW5v cHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3QxPgorICA8 dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAgPGNv bW1hbmQ+RFJPUCBTVEFUSVNUSUNTPC9jb21tYW5kPiByZW1vdmVzIHN0YXRp c3RpY3MgZnJvbSB0aGUgZGF0YWJhc2UuCisgICBPbmx5IHRoZSBzdGF0aXN0 aWNzIG93bmVyLCB0aGUgc2NoZW1hIG93bmVyLCBhbmQgc3VwZXJ1c2VyIGNh biBkcm9wIGEKKyAgIHN0YXRpc3RpY3MuCisgIDwvcGFyYT4KKworIDwvcmVm c2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90 aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT48bGl0ZXJhbD5JRiBFWElTVFM8L2xpdGVyYWw+PC90ZXJt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEbyBub3Qg dGhyb3cgYW4gZXJyb3IgaWYgdGhlIHN0YXRpc3RpY3MgZG9lcyBub3QgZXhp c3QuIEEgbm90aWNlIGlzCisgICAgICBpc3N1ZWQgaW4gdGhpcyBjYXNlLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWJsZT48L3Rl cm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBu YW1lIChvcHRpb25hbGx5IHNjaGVtYS1xdWFsaWZpZWQpIG9mIHRoZSBzdGF0 aXN0aWNzIHRvIGRyb3AuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+Cisg PC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkV4YW1wbGVz PC90aXRsZT4KKworICA8cGFyYT4KKyAgIC4uLgorICA8L3BhcmE+CisKKyA8 L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+Q29tcGF0aWJp bGl0eTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVyZSdzIG5vIDxjb21t YW5kPkRST1AgU1RBVElTVElDUzwvY29tbWFuZD4gY29tbWFuZCBpbiB0aGUg U1FMIHN0YW5kYXJkLgorICA8L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxy ZWZzZWN0MT4KKyAgPHRpdGxlPlNlZSBBbHNvPC90aXRsZT4KKworICA8c2lt cGxlbGlzdCB0eXBlPSJpbmxpbmUiPgorICAgPG1lbWJlcj48eHJlZiBsaW5r ZW5kPSJzcWwtYWx0ZXJzdGF0aXN0aWNzIj48L21lbWJlcj4KKyAgIDxtZW1i ZXI+PHhyZWYgbGlua2VuZD0ic3FsLWNyZWF0ZXN0YXRpc3RpY3MiPjwvbWVt YmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4KKworPC9yZWZl bnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAppbmRleCAwMzAyMGRm Li4yYjA3YjJkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNl LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCkBAIC0x MDQsNiArMTA0LDcgQEAKICAgICZjcmVhdGVTY2hlbWE7CiAgICAmY3JlYXRl U2VxdWVuY2U7CiAgICAmY3JlYXRlU2VydmVyOworICAgJmNyZWF0ZVN0YXRp c3RpY3M7CiAgICAmY3JlYXRlVGFibGU7CiAgICAmY3JlYXRlVGFibGVBczsK ICAgICZjcmVhdGVUYWJsZVNwYWNlOwpAQCAtMTQ3LDYgKzE0OCw3IEBACiAg ICAmZHJvcFNjaGVtYTsKICAgICZkcm9wU2VxdWVuY2U7CiAgICAmZHJvcFNl cnZlcjsKKyAgICZkcm9wU3RhdGlzdGljczsKICAgICZkcm9wVGFibGU7CiAg ICAmZHJvcFRhYmxlU3BhY2U7CiAgICAmZHJvcFRTQ29uZmlnOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvTWFrZWZpbGUKaW5kZXggMjUxMzBlYy4uMDU4YjhhOSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL01ha2VmaWxlCkBAIC0zMiw2ICszMiw3 IEBAIFBPU1RHUkVTX0JLSV9TUkNTID0gJChhZGRwcmVmaXggJCh0b3Bfc3Jj ZGlyKS9zcmMvaW5jbHVkZS9jYXRhbG9nLyxcCiAJcGdfYXR0cmRlZi5oIHBn X2NvbnN0cmFpbnQuaCBwZ19pbmhlcml0cy5oIHBnX2luZGV4LmggcGdfb3Bl cmF0b3IuaCBcCiAJcGdfb3BmYW1pbHkuaCBwZ19vcGNsYXNzLmggcGdfYW0u aCBwZ19hbW9wLmggcGdfYW1wcm9jLmggXAogCXBnX2xhbmd1YWdlLmggcGdf bGFyZ2VvYmplY3RfbWV0YWRhdGEuaCBwZ19sYXJnZW9iamVjdC5oIHBnX2Fn Z3JlZ2F0ZS5oIFwKKwlwZ19tdl9zdGF0aXN0aWMuaCBcCiAJcGdfc3RhdGlz dGljLmggcGdfcmV3cml0ZS5oIHBnX3RyaWdnZXIuaCBwZ19ldmVudF90cmln Z2VyLmggcGdfZGVzY3JpcHRpb24uaCBcCiAJcGdfY2FzdC5oIHBnX2VudW0u aCBwZ19uYW1lc3BhY2UuaCBwZ19jb252ZXJzaW9uLmggcGdfZGVwZW5kLmgg XAogCXBnX2RhdGFiYXNlLmggcGdfZGJfcm9sZV9zZXR0aW5nLmggcGdfdGFi bGVzcGFjZS5oIHBnX3BsdGVtcGxhdGUuaCBcCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9hY2xjaGsuYwppbmRleCAwZjNiYzA3Li5lMjFhYWNkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvYWNsY2hrLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs dWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19sYXJnZW9iamVjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFy Z2VvYmplY3RfbWV0YWRhdGEuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212 X3N0YXRpc3RpYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNl LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgpAQCAtNTAyMSw2ICs1MDIyLDMy IEBAIHBnX2V4dGVuc2lvbl9vd25lcmNoZWNrKE9pZCBleHRfb2lkLCBPaWQg cm9sZWlkKQogfQogCiAvKgorICogT3duZXJzaGlwIGNoZWNrIGZvciBhIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIChzcGVjaWZpZWQgYnkgT0lEKS4KKyAq LworYm9vbAorcGdfc3RhdGlzdGljc19vd25lcmNoZWNrKE9pZCBzdGF0X29p ZCwgT2lkIHJvbGVpZCkKK3sKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2lkCQkJ b3duZXJJZDsKKworCS8qIFN1cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNz aW9uIGNoZWNraW5nLiAqLworCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkp CisJCXJldHVybiB0cnVlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEo TVZTVEFUT0lELCBPYmplY3RJZEdldERhdHVtKHN0YXRfb2lkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJ CSBlcnJtc2coInN0YXRpc3RpY3Mgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhp c3QiLCBzdGF0X29pZCkpKTsKKworCW93bmVySWQgPSAoKEZvcm1fcGdfbXZf c3RhdGlzdGljKSBHRVRTVFJVQ1QodHVwbGUpKS0+c3Rhb3duZXI7CisKKwlS ZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIGhhc19wcml2c19v Zl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7Cit9CisKKy8qCiAgKiBDaGVjayB3 aGV0aGVyIHNwZWNpZmllZCByb2xlIGhhcyBDUkVBVEVST0xFIHByaXZpbGVn ZSAob3IgaXMgYSBzdXBlcnVzZXIpCiAgKgogICogTm90ZTogcm9sZXMgZG8g bm90IGhhdmUgb3duZXJzIHBlciBzZTsgaW5zdGVhZCB3ZSB1c2UgdGhpcyB0 ZXN0IGluCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVu ZGVuY3kuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5jeS5jCmlu ZGV4IGM0OGUzN2IuLjgyMDA0NTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvZGVwZW5kZW5jeS5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfbGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhcmdl b2JqZWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfb3BlcmF0b3IuaCIKQEAgLTE2MCw3ICsxNjEsOCBAQCBzdGF0aWMgY29u c3QgT2lkIG9iamVjdF9jbGFzc2VzW10gPSB7CiAJRXh0ZW5zaW9uUmVsYXRp b25JZCwJCS8qIE9DTEFTU19FWFRFTlNJT04gKi8KIAlFdmVudFRyaWdnZXJS ZWxhdGlvbklkLAkJLyogT0NMQVNTX0VWRU5UX1RSSUdHRVIgKi8KIAlQb2xp Y3lSZWxhdGlvbklkLAkJCS8qIE9DTEFTU19QT0xJQ1kgKi8KLQlUcmFuc2Zv cm1SZWxhdGlvbklkCQkJLyogT0NMQVNTX1RSQU5TRk9STSAqLworCVRyYW5z Zm9ybVJlbGF0aW9uSWQsCQkvKiBPQ0xBU1NfVFJBTlNGT1JNICovCisJTXZT dGF0aXN0aWNSZWxhdGlvbklkCQkvKiBPQ0xBU1NfU1RBVElTVElDUyAqLwog fTsKIAogCkBAIC0xMjcyLDYgKzEyNzQsMTAgQEAgZG9EZWxldGlvbihjb25z dCBPYmplY3RBZGRyZXNzICpvYmplY3QsIGludCBmbGFncykKIAkJCURyb3BU cmFuc2Zvcm1CeUlkKG9iamVjdC0+b2JqZWN0SWQpOwogCQkJYnJlYWs7CiAK KwkJY2FzZSBPQ0xBU1NfU1RBVElTVElDUzoKKwkJCVJlbW92ZVN0YXRpc3Rp Y3NCeUlkKG9iamVjdC0+b2JqZWN0SWQpOworCQkJYnJlYWs7CisKIAkJZGVm YXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IGNs YXNzOiAldSIsCiAJCQkJIG9iamVjdC0+Y2xhc3NJZCk7CkBAIC0yNDE1LDYg KzI0MjEsOSBAQCBnZXRPYmplY3RDbGFzcyhjb25zdCBPYmplY3RBZGRyZXNz ICpvYmplY3QpCiAKIAkJY2FzZSBUcmFuc2Zvcm1SZWxhdGlvbklkOgogCQkJ cmV0dXJuIE9DTEFTU19UUkFOU0ZPUk07CisKKwkJY2FzZSBNdlN0YXRpc3Rp Y1JlbGF0aW9uSWQ6CisJCQlyZXR1cm4gT0NMQVNTX1NUQVRJU1RJQ1M7CiAJ fQogCiAJLyogc2hvdWxkbid0IGdldCBoZXJlICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvaGVhcC5jCmluZGV4IGU5OTdiNTcuLjQ3ZWM4Y2MgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvaGVhcC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jb25zdHJhaW50X2ZuLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19mb3JlaWduX3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19p bmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGlj LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpYy5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdGFibGVzcGFjZS5oIgpAQCAtMTYxMyw3ICsxNjE0LDEwIEBAIFJl bW92ZUF0dHJpYnV0ZUJ5SWQoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51 bSkKIAloZWFwX2Nsb3NlKGF0dHJfcmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsK IAogCWlmIChhdHRudW0gPiAwKQorCXsKIAkJUmVtb3ZlU3RhdGlzdGljcyhy ZWxpZCwgYXR0bnVtKTsKKwkJUmVtb3ZlTVZTdGF0aXN0aWNzKHJlbGlkLCBh dHRudW0pOworCX0KIAogCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsK IH0KQEAgLTE4NDEsNiArMTg0NSwxMSBAQCBoZWFwX2Ryb3Bfd2l0aF9jYXRh bG9nKE9pZCByZWxpZCkKIAlSZW1vdmVTdGF0aXN0aWNzKHJlbGlkLCAwKTsK IAogCS8qCisJICogZGVsZXRlIG11bHRpLXZhcmlhdGUgc3RhdGlzdGljcwor CSAqLworCVJlbW92ZU1WU3RhdGlzdGljcyhyZWxpZCwgMCk7CisKKwkvKgog CSAqIGRlbGV0ZSBhdHRyaWJ1dGUgdHVwbGVzCiAJICovCiAJRGVsZXRlQXR0 cmlidXRlVHVwbGVzKHJlbGlkKTsKQEAgLTI2OTIsNiArMjcwMSw5OSBAQCBS ZW1vdmVTdGF0aXN0aWNzKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0p CiAKIAogLyoKKyAqIFJlbW92ZU1WU3RhdGlzdGljcyAtLS0gcmVtb3ZlIGVu dHJpZXMgaW4gcGdfbXZfc3RhdGlzdGljIGZvciBhIHJlbAorICoKKyAqIElm IGF0dG51bSBpcyB6ZXJvLCByZW1vdmUgYWxsIGVudHJpZXMgZm9yIHJlbDsg ZWxzZSByZW1vdmUgb25seSB0aGUgb25lKHMpCisgKiBmb3IgdGhhdCBjb2x1 bW4uCisgKi8KK3ZvaWQKK1JlbW92ZU1WU3RhdGlzdGljcyhPaWQgcmVsaWQs IEF0dHJOdW1iZXIgYXR0bnVtKQoreworCVJlbGF0aW9uCXBnbXZzdGF0aXN0 aWM7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBOVUxMOworCVN5c1NjYW5EZXNj IHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsK KworCS8qCisJICogV2hlbiBkcm9wcGluZyBhIGNvbHVtbiwgd2UnbGwgZHJv cCBzdGF0aXN0aWNzIHdpdGggYSBzaW5nbGUKKwkgKiByZW1haW5pbmcgKHVu ZHJvcHBlZCBjb2x1bW4pLiBUbyBkbyB0aGF0LCB3ZSBuZWVkIHRoZSB0dXBs ZQorCSAqIGRlc2NyaXB0b3IuCisJICoKKwkgKiBXZSBhbHJlYWR5IGhhdmUg dGhlIHJlbGF0aW9uIGxvY2tlZCAoYXMgd2UncmUgcnVubmluZyBBTFRFUgor CSAqIFRBQkxFIC4uLiBEUk9QIENPTFVNTiksIHNvIHdlJ2xsIGp1c3QgZ2V0 IHRoZSBkZXNjcmlwdG9yIGhlcmUuCisJICovCisJaWYgKGF0dG51bSAhPSAw KQorCXsKKwkJUmVsYXRpb24gcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwg Tm9Mb2NrKTsKKworCQkvKiBtdWx0aXZhcmlhdGUgc3RhdHMgYXJlIHN1cHBv cnRlZCBvbiB0YWJsZXMgYW5kIG1hdHZpZXdzICovCisJCWlmIChyZWwtPnJk X3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CisJCQlyZWwt PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX01BVFZJRVcpCisJCQl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCisJCXJlbGF0aW9uX2Ns b3NlKHJlbCwgTm9Mb2NrKTsKKwl9CisKKwlpZiAodHVwZGVzYyA9PSBOVUxM KQorCQlyZXR1cm47CisKKwlwZ212c3RhdGlzdGljID0gaGVhcF9vcGVuKE12 U3RhdGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlT Y2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfbXZfc3RhdGlzdGljX3N0 YXJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQlPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisKKwlzY2FuID0gc3lz dGFibGVfYmVnaW5zY2FuKHBnbXZzdGF0aXN0aWMsCisJCQkJCQkJICBNdlN0 YXRpc3RpY1JlbGlkSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEs ICZrZXkpOworCisJLyogd2UgbXVzdCBsb29wIGV2ZW4gd2hlbiBhdHRudW0g IT0gMCwgaW4gY2FzZSBvZiBpbmhlcml0ZWQgc3RhdHMgKi8KKwl3aGlsZSAo SGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2Nh bikpKQorCXsKKwkJYm9vbCBkZWxldGUgPSB0cnVlOworCisJCWlmIChhdHRu dW0gIT0gMCkKKwkJeworCQkJRGF0dW0JCWFkYXR1bTsKKwkJCWJvb2wJCWlz bnVsbDsKKwkJCWludAkJCWk7CisJCQlpbnQJCQluY29sdW1ucyA9IDA7CisJ CQlBcnJheVR5cGUgICphcnI7CisJCQlpbnQxNgkgICAqYXR0bnVtczsKKwor CQkJLyogZ2V0IHRoZSBjb2x1bW5zICovCisJCQlhZGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoTVZTVEFUT0lELCB0dXBsZSwKKwkJCQkJCQkJCSBBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFrZXlzLCAmaXNudWxsKTsKKwkJCUFzc2VydCgh aXNudWxsKTsKKworCQkJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1 bSk7CisJCQlhdHRudW1zID0gKGludDE2KilBUlJfREFUQV9QVFIoYXJyKTsK KworCQkJZm9yIChpID0gMDsgaSA8IEFSUl9ESU1TKGFycilbMF07IGkrKykK KwkJCXsKKwkJCQkvKiBjb3VudCB0aGUgY29sdW1uIHVubGVzcyBpdCdzIGhh cyBiZWVuIC8gaXMgYmVpbmcgZHJvcHBlZCAqLworCQkJCWlmICgoISB0dXBk ZXNjLT5hdHRyc1thdHRudW1zW2ldLTFdLT5hdHRpc2Ryb3BwZWQpICYmCisJ CQkJCShhdHRudW1zW2ldICE9IGF0dG51bSkpCisJCQkJCW5jb2x1bW5zICs9 IDE7CisJCQl9CisKKwkJCS8qIGRlbGV0ZSBpZiB0aGVyZSBhcmUgbGVzcyB0 aGFuIHR3byBhdHRyaWJ1dGVzICovCisJCQlkZWxldGUgPSAobmNvbHVtbnMg PCAyKTsKKwkJfQorCisJCWlmIChkZWxldGUpCisJCQlzaW1wbGVfaGVhcF9k ZWxldGUocGdtdnN0YXRpc3RpYywgJnR1cGxlLT50X3NlbGYpOworCX0KKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwloZWFwX2Nsb3NlKHBnbXZz dGF0aXN0aWMsIFJvd0V4Y2x1c2l2ZUxvY2spOworfQorCisKKy8qCiAgKiBS ZWxhdGlvblRydW5jYXRlSW5kZXhlcyAtIHRydW5jYXRlIGFsbCBpbmRleGVz IGFzc29jaWF0ZWQKICAqIHdpdGggdGhlIGhlYXAgcmVsYXRpb24gdG8gemVy byB0dXBsZXMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9uYW1lc3BhY2UuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNl LmMKaW5kZXggNDQ2YjJhYy4uZGZkNWJlZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL25hbWVzcGFjZS5jCkBAIC00MjAxLDMgKzQyMDEsNTQgQEAgcGdf aXNfb3RoZXJfdGVtcF9zY2hlbWEoUEdfRlVOQ1RJT05fQVJHUykKIAogCVBH X1JFVFVSTl9CT09MKGlzT3RoZXJUZW1wTmFtZXNwYWNlKG9pZCkpOwogfQor CitPaWQKK2dldF9zdGF0aXN0aWNzX29pZChMaXN0ICpuYW1lcywgYm9vbCBt aXNzaW5nX29rKQoreworCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJY2hhcgkg ICAqc3RhdHNfbmFtZTsKKwlPaWQJCQluYW1lc3BhY2VJZDsKKwlPaWQJCQlz dGF0c19vaWQgPSBJbnZhbGlkT2lkOworCUxpc3RDZWxsICAgKmw7CisKKwkv KiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJRGVjb25zdHJ1Y3RR dWFsaWZpZWROYW1lKG5hbWVzLCAmc2NoZW1hbmFtZSwgJnN0YXRzX25hbWUp OworCisJaWYgKHNjaGVtYW5hbWUpCisJeworCQkvKiB1c2UgZXhhY3Qgc2No ZW1hIGdpdmVuICovCisJCW5hbWVzcGFjZUlkID0gTG9va3VwRXhwbGljaXRO YW1lc3BhY2Uoc2NoZW1hbmFtZSwgbWlzc2luZ19vayk7CisJCWlmIChtaXNz aW5nX29rICYmICFPaWRJc1ZhbGlkKG5hbWVzcGFjZUlkKSkKKwkJCXN0YXRz X29pZCA9IEludmFsaWRPaWQ7CisJCWVsc2UKKwkJCXN0YXRzX29pZCA9IEdl dFN5c0NhY2hlT2lkMihNVlNUQVROQU1FTlNQLAorCQkJCQkJCQkJCVBvaW50 ZXJHZXREYXR1bShzdGF0c19uYW1lKSwKKwkJCQkJCQkJCQlPYmplY3RJZEdl dERhdHVtKG5hbWVzcGFjZUlkKSk7CisJfQorCWVsc2UKKwl7CisJCS8qIHNl YXJjaCBmb3IgaXQgaW4gc2VhcmNoIHBhdGggKi8KKwkJcmVjb21wdXRlTmFt ZXNwYWNlUGF0aCgpOworCisJCWZvcmVhY2gobCwgYWN0aXZlU2VhcmNoUGF0 aCkKKwkJeworCQkJbmFtZXNwYWNlSWQgPSBsZmlyc3Rfb2lkKGwpOworCisJ CQlpZiAobmFtZXNwYWNlSWQgPT0gbXlUZW1wTmFtZXNwYWNlKQorCQkJCWNv bnRpbnVlOwkJLyogZG8gbm90IGxvb2sgaW4gdGVtcCBuYW1lc3BhY2UgKi8K KwkJCXN0YXRzX29pZCA9IEdldFN5c0NhY2hlT2lkMihNVlNUQVROQU1FTlNQ LAorCQkJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0oc3RhdHNfbmFtZSksCisJ CQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0obmFtZXNwYWNlSWQpKTsKKwkJ CWlmIChPaWRJc1ZhbGlkKHN0YXRzX29pZCkpCisJCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlpZiAoIU9pZElzVmFsaWQoc3RhdHNfb2lkKSAmJiAhbWlzc2lu Z19vaykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInN0YXRpc3RpY3Mg XCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCU5hbWVMaXN0VG9TdHJp bmcobmFtZXMpKSkpOworCisJcmV0dXJuIHN0YXRzX29pZDsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKaW5kZXggZDJh YWE2ZC4uYzEzYTU2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9vYmplY3RhZGRyZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9v YmplY3RhZGRyZXNzLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL3BnX2xhbmd1YWdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YXJnZW9iamVjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmpl Y3RfbWV0YWRhdGEuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRp c3RpYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGZhbWlseS5oIgpAQCAtNDM4LDkgKzQzOSwyMiBAQCBzdGF0 aWMgY29uc3QgT2JqZWN0UHJvcGVydHlUeXBlIE9iamVjdFByb3BlcnR5W10g PQogCQlBbnVtX3BnX3R5cGVfdHlwYWNsLAogCQlBQ0xfS0lORF9UWVBFLAog CQl0cnVlCisJfSwKKwl7CisJCU12U3RhdGlzdGljUmVsYXRpb25JZCwKKwkJ TXZTdGF0aXN0aWNPaWRJbmRleElkLAorCQlNVlNUQVRPSUQsCisJCU1WU1RB VE5BTUVOU1AsCisJCUFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5hbWUsCisJ CUFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5hbWVzcGFjZSwKKwkJQW51bV9w Z19tdl9zdGF0aXN0aWNfc3Rhb3duZXIsCisJCUludmFsaWRBdHRyTnVtYmVy LAkJLyogbm8gQUNMIChzYW1lIGFzIHJlbGF0aW9uKSAqLworCQktMSwJCQkJ CQkvKiBubyBBQ0wgKi8KKwkJdHJ1ZQogCX0KIH07CiAKKwogLyoKICAqIFRo aXMgc3RydWN0IG1hcHMgdGhlIHN0cmluZyBvYmplY3QgdHlwZXMgYXMgcmV0 dXJuZWQgYnkKICAqIGdldE9iamVjdFR5cGVEZXNjcmlwdGlvbiBpbnRvIE9i alR5cGUgZW51bSB2YWx1ZXMuICBOb3RlIHRoYXQgc29tZSBlbnVtCkBAIC02 NDAsNiArNjU0LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2JqZWN0X3R5 cGVfbWFwCiAJLyogT0NMQVNTX1RSQU5TRk9STSAqLwogCXsKIAkJInRyYW5z Zm9ybSIsIE9CSkVDVF9UUkFOU0ZPUk0KKwl9LAorCS8qIE9CSkVDVF9TVEFU SVNUSUNTICovCisJeworCQkic3RhdGlzdGljcyIsIE9CSkVDVF9TVEFUSVNU SUNTCiAJfQogfTsKIApAQCAtOTEzLDYgKzkzMSwxMSBAQCBnZXRfb2JqZWN0 X2FkZHJlc3MoT2JqZWN0VHlwZSBvYmp0eXBlLCBMaXN0ICpvYmpuYW1lLCBM aXN0ICpvYmphcmdzLAogCQkJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJl c3NfZGVmYWNsKG9iam5hbWUsIG9iamFyZ3MsCiAJCQkJCQkJCQkJCQkJbWlz c2luZ19vayk7CiAJCQkJYnJlYWs7CisJCQljYXNlIE9CSkVDVF9TVEFUSVNU SUNTOgorCQkJCWFkZHJlc3MuY2xhc3NJZCA9IE12U3RhdGlzdGljUmVsYXRp b25JZDsKKwkJCQlhZGRyZXNzLm9iamVjdElkID0gZ2V0X3N0YXRpc3RpY3Nf b2lkKG9iam5hbWUsIG1pc3Npbmdfb2spOworCQkJCWFkZHJlc3Mub2JqZWN0 U3ViSWQgPSAwOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIG9ianR5cGU6ICVkIiwgKGludCkgb2Jq dHlwZSk7CiAJCQkJLyogcGxhY2F0ZSBjb21waWxlciwgaW4gY2FzZSBpdCB0 aGlua3MgZWxvZyBtaWdodCByZXR1cm4gKi8KQEAgLTIxODUsNiArMjIwOCwx MCBAQCBjaGVja19vYmplY3Rfb3duZXJzaGlwKE9pZCByb2xlaWQsIE9iamVj dFR5cGUgb2JqdHlwZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKIAkJ CQkJCSBlcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIikpKTsKIAkJCWJyZWFr OworCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNTOgorCQkJaWYgKCFwZ19zdGF0 aXN0aWNzX293bmVyY2hlY2soYWRkcmVzcy5vYmplY3RJZCwgcm9sZWlkKSkK KwkJCQlhY2xjaGVja19lcnJvcl90eXBlKEFDTENIRUNLX05PVF9PV05FUiwg YWRkcmVzcy5vYmplY3RJZCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGU6ICVkIiwK IAkJCQkgKGludCkgb2JqdHlwZSk7CkBAIC0zNjEwLDYgKzM2MzcsMTAgQEAg Z2V0T2JqZWN0VHlwZURlc2NyaXB0aW9uKGNvbnN0IE9iamVjdEFkZHJlc3Mg Km9iamVjdCkKIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZmZlciwg InRyYW5zZm9ybSIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBPQ0xBU1NfU1RB VElTVElDUzoKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZmZlciwg InN0YXRpc3RpY3MiKTsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlh cHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJ1bnJlY29nbml6ZWQgJXUiLCBv YmplY3QtPmNsYXNzSWQpOwogCQkJYnJlYWs7CkBAIC00NTY2LDYgKzQ1OTcs MjkgQEAgZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cyhjb25zdCBPYmplY3RBZGRy ZXNzICpvYmplY3QsCiAJCQl9CiAJCQlicmVhazsKIAorCQljYXNlIE9DTEFT U19TVEFUSVNUSUNTOgorCQkJeworCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJ Rm9ybV9wZ19tdl9zdGF0aXN0aWMgZm9ybVN0YXRpc3RpYzsKKwkJCQljaGFy CSAgICpzY2hlbWE7CisKKwkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoTVZT VEFUT0lELAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKG9iamVjdC0+ b2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkK KwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0 YXRpc3RpY3MgJXUiLAorCQkJCQkJIG9iamVjdC0+b2JqZWN0SWQpOworCQkJ CWZvcm1TdGF0aXN0aWMgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNU UlVDVCh0dXApOworCQkJCXNjaGVtYSA9IGdldF9uYW1lc3BhY2VfbmFtZV9v cl90ZW1wKGZvcm1TdGF0aXN0aWMtPnN0YW5hbWVzcGFjZSk7CisJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmZmVyLAorCQkJCQkJCQkJICAgcXVv dGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoc2NoZW1hLAorCQkJCQkJCQkJCQkg ICBOYW1lU3RyKGZvcm1TdGF0aXN0aWMtPnN0YW5hbWUpKSk7CisJCQkJaWYg KG9iam5hbWUpCisJCQkJCSpvYmpuYW1lID0gbGlzdF9tYWtlMihzY2hlbWEs CisJCQkJCQkJCQkgICBwc3RyZHVwKE5hbWVTdHIoZm9ybVN0YXRpc3RpYy0+ c3RhbmFtZSkpKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCQli cmVhazsKKwkJCX0KKwogCQlkZWZhdWx0OgogCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmZmVyLCAidW5yZWNvZ25pemVkIG9iamVjdCAldSAldSAlZCIsCiAJ CQkJCQkJIG9iamVjdC0+Y2xhc3NJZCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCA4NGFhMDYxLi4zMWRiYjJj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Mu c3FsCkBAIC0xNTgsNiArMTU4LDE3IEBAIENSRUFURSBWSUVXIHBnX2luZGV4 ZXMgQVMKICAgICAgICAgIExFRlQgSk9JTiBwZ190YWJsZXNwYWNlIFQgT04g KFQub2lkID0gSS5yZWx0YWJsZXNwYWNlKQogICAgIFdIRVJFIEMucmVsa2lu ZCBJTiAoJ3InLCAnbScpIEFORCBJLnJlbGtpbmQgPSAnaSc7CiAKK0NSRUFU RSBWSUVXIHBnX212X3N0YXRzIEFTCisgICAgU0VMRUNUCisgICAgICAgIE4u bnNwbmFtZSBBUyBzY2hlbWFuYW1lLAorICAgICAgICBDLnJlbG5hbWUgQVMg dGFibGVuYW1lLAorICAgICAgICBTLnN0YW5hbWUgQVMgc3RhbmFtZSwKKyAg ICAgICAgUy5zdGFrZXlzIEFTIGF0dG51bXMsCisgICAgICAgIGxlbmd0aChT LnN0YWRlcHMpIGFzIGRlcHNieXRlcywKKyAgICAgICAgcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX2luZm8oUy5zdGFkZXBzKSBhcyBkZXBzaW5mbworICAg IEZST00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdfY2xhc3MgQyBPTiAo Qy5vaWQgPSBTLnN0YXJlbGlkKSkKKyAgICAgICAgTEVGVCBKT0lOIHBnX25h bWVzcGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNwYWNlKTsKKwogQ1JF QVRFIFZJRVcgcGdfc3RhdHMgV0lUSCAoc2VjdXJpdHlfYmFycmllcikgQVMK ICAgICBTRUxFQ1QKICAgICAgICAgbnNwbmFtZSBBUyBzY2hlbWFuYW1lLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCBiMWFjNzA0Li41 MTUxMDAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtl ZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAt MTgsOCArMTgsOCBAQCBPQkpTID0gYWdncmVnYXRlY21kcy5vIGFsdGVyLm8g YW5hbHl6ZS5vIGFzeW5jLm8gY2x1c3Rlci5vIGNvbW1lbnQubyAgXAogCWV2 ZW50X3RyaWdnZXIubyBleHBsYWluLm8gZXh0ZW5zaW9uLm8gZm9yZWlnbmNt ZHMubyBmdW5jdGlvbmNtZHMubyBcCiAJaW5kZXhjbWRzLm8gbG9ja2NtZHMu byBtYXR2aWV3Lm8gb3BlcmF0b3JjbWRzLm8gb3BjbGFzc2NtZHMubyBcCiAJ cG9saWN5Lm8gcG9ydGFsY21kcy5vIHByZXBhcmUubyBwcm9jbGFuZy5vIFwK LQlzY2hlbWFjbWRzLm8gc2VjbGFiZWwubyBzZXF1ZW5jZS5vIHRhYmxlY21k cy5vIHRhYmxlc3BhY2UubyB0cmlnZ2VyLm8gXAotCXRzZWFyY2hjbWRzLm8g dHlwZWNtZHMubyB1c2VyLm8gdmFjdXVtLm8gdmFjdXVtbGF6eS5vIFwKLQl2 YXJpYWJsZS5vIHZpZXcubworCXNjaGVtYWNtZHMubyBzZWNsYWJlbC5vIHNl cXVlbmNlLm8gc3RhdHNjbWRzLm8gXAorCXRhYmxlY21kcy5vIHRhYmxlc3Bh Y2UubyB0cmlnZ2VyLm8gdHNlYXJjaGNtZHMubyB0eXBlY21kcy5vIFwKKwl1 c2VyLm8gdmFjdXVtLm8gdmFjdXVtbGF6eS5vIHZhcmlhYmxlLm8gdmlldy5v CiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24u bWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FsdGVyLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbHRlci5jCmluZGV4IDVhZjBmMmYu Ljg5OTg1NDk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9h bHRlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FsdGVyLmMKQEAg LTM1OSw2ICszNTksNyBAQCBFeGVjUmVuYW1lU3RtdChSZW5hbWVTdG10ICpz dG10KQogCQljYXNlIE9CSkVDVF9PUENMQVNTOgogCQljYXNlIE9CSkVDVF9P UEZBTUlMWToKIAkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCWNhc2UgT0JK RUNUX1NUQVRJU1RJQ1M6CiAJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElP TjoKIAkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgogCQljYXNlIE9CSkVD VF9UU1BBUlNFUjoKQEAgLTQzNyw2ICs0MzgsNyBAQCBFeGVjQWx0ZXJPYmpl Y3RTY2hlbWFTdG10KEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqc3RtdCwKIAkJ Y2FzZSBPQkpFQ1RfT1BFUkFUT1I6CiAJCWNhc2UgT0JKRUNUX09QQ0xBU1M6 CiAJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQljYXNlIE9CSkVDVF9TVEFU SVNUSUNTOgogCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CiAJCWNh c2UgT0JKRUNUX1RTRElDVElPTkFSWToKIAkJY2FzZSBPQkpFQ1RfVFNQQVJT RVI6CkBAIC03NDUsNiArNzQ3LDcgQEAgRXhlY0FsdGVyT3duZXJTdG10KEFs dGVyT3duZXJTdG10ICpzdG10KQogCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoK IAkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKIAkJY2FzZSBPQkpFQ1RfT1BGQU1J TFk6CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ1M6CiAJCWNhc2UgT0JKRUNU X1RBQkxFU1BBQ0U6CiAJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKIAkJ Y2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvYW5hbHl6ZS5jCmluZGV4IDhhNWYwN2MuLjkwODc1MzIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKQEAgLTE3LDYgKzE3LDcg QEAKICNpbmNsdWRlIDxtYXRoLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvbXVs dGl4YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIuaCIKICNpbmNs dWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBj b252ZXJ0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1cHRvYXN0ZXIuaCIKQEAg LTI3LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2luaGVyaXRzX2ZuLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19tdl9zdGF0aXN0aWMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25h bWVzcGFjZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIK ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKQEAgLTQ1LDEwICs0 NywxMyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5j bHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXR0b3B0Y2Fj aGUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2RhdHVtLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIK ICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1 ZGUgInV0aWxzL212c3RhdHMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19ydXNh Z2UuaCIKICNpbmNsdWRlICJ1dGlscy9zYW1wbGluZy5oIgogI2luY2x1ZGUg InV0aWxzL3NvcnRzdXBwb3J0LmgiCkBAIC00NjAsNiArNDY1LDE5IEBAIGRv X2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgaW50IG9wdGlvbnMsIFZh Y3V1bVBhcmFtcyAqcGFyYW1zLAogCSAqIGFsbCBhbmFseXphYmxlIGNvbHVt bnMuICBXZSB1c2UgYSBsb3dlciBib3VuZCBvZiAxMDAgcm93cyB0byBhdm9p ZAogCSAqIHBvc3NpYmxlIG92ZXJmbG93IGluIFZpdHRlcidzIGFsZ29yaXRo bS4gIChOb3RlOiB0aGF0IHdpbGwgYWxzbyBiZSB0aGUKIAkgKiB0YXJnZXQg aW4gdGhlIGNvcm5lciBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyBhbmFseXph YmxlIGNvbHVtbnMuKQorCSAqCisJICogRklYTUUgVGhpcyBzYW1wbGUgc2l6 aW5nIGlzIG1vc3RseSBPSyB3aGVuIGNvbXB1dGluZyBzdGF0cyBmb3IKKwkg KiAgICAgICBpbmRpdmlkdWFsIGNvbHVtbnMsIGJ1dCB3aGVuIGNvbXB1dGlu ZyBtdWx0aS12YXJpYXRlIHN0YXRzCisJICogICAgICAgZm9yIG11bHRpdmFy aWF0ZSBzdGF0cyAoaGlzdG9ncmFtcywgbWN2LCAuLi4pIGl0J3MgcmF0aGVy CisJICogICAgICAgaW5zdWZmaWNpZW50LiBGb3Igc3RhdHMgb24gbXVsdGlw bGUgY29sdW1ucyAvIGNvbXBsZXggc3RhdHMKKwkgKiAgICAgICB3ZSBuZWVk IGxhcmdlciBzYW1wbGUgc2l6ZXMsIGJlY2F1c2Ugd2UgbmVlZCB0byBidWls ZCBtb3JlCisJICogICAgICAgZGV0YWlsZWQgc3RhdHMgKG1vcmUgTUNWIGl0 ZW1zIC8gaGlzdG9ncmFtIGJ1Y2tldHMpIHRvIGdldAorCSAqICAgICAgIGdv b2QgYWNjdXJhY3kuIE1heWJlIGl0J2QgYmUgYXBwcm9wcmlhdGUgdG8gdXNl IHNhbXBsZXMKKwkgKiAgICAgICBwcm9wb3J0aW9uYWwgdG8gdGhlIHRhYmxl IChzYXksIDAuNSUgLSAxJSkgaW5zdGVhZCBvZiBhCisJICogICAgICAgZml4 ZWQgc2l6ZSBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBBbHNvLCB0aGlz IHNob3VsZCBiZQorCSAqICAgICAgIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQg c3RhdGlzdGljcyBzaXplIC0gZS5nLiBudW1iZXIgb2YgTUNWCisJICogICAg ICAgaXRlbXMgb3IgaGlzdG9ncmFtIGJ1Y2tldHMgc2hvdWxkIHJlcXVpcmUg c2V2ZXJhbCBzYW1wbGUKKwkgKiAgICAgICByb3dzIHBlciBpdGVtL2J1Y2tl dCAoc28gdGhlIHNhbXBsZSBzaG91bGQgYmUgaypzaXplKS4KIAkgKi8KIAl0 YXJncm93cyA9IDEwMDsKIAlmb3IgKGkgPSAwOyBpIDwgYXR0cl9jbnQ7IGkr KykKQEAgLTU2Miw2ICs1ODAsOSBAQCBkb19hbmFseXplX3JlbChSZWxhdGlv biBvbmVyZWwsIGludCBvcHRpb25zLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywK IAkJCXVwZGF0ZV9hdHRzdGF0cyhSZWxhdGlvbkdldFJlbGlkKElyZWxbaW5k XSksIGZhbHNlLAogCQkJCQkJCXRoaXNkYXRhLT5hdHRyX2NudCwgdGhpc2Rh dGEtPnZhY2F0dHJzdGF0cyk7CiAJCX0KKworCQkvKiBCdWlsZCBtdWx0aXZh cmlhdGUgc3RhdHMgKGlmIHRoZXJlIGFyZSBhbnkpLiAqLworCQlidWlsZF9t dl9zdGF0cyhvbmVyZWwsIG51bXJvd3MsIHJvd3MsIGF0dHJfY250LCB2YWNh dHRyc3RhdHMpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kcm9wY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZHJvcGNtZHMuYwppbmRleCA1MjIwMjdhLi5jZDY1YjU4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9kcm9wY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2Ryb3BjbWRzLmMKQEAgLTI5Miw2ICsyOTIsMTAg QEAgZG9lc19ub3RfZXhpc3Rfc2tpcHBpbmcoT2JqZWN0VHlwZSBvYmp0eXBl LCBMaXN0ICpvYmpuYW1lLCBMaXN0ICpvYmphcmdzKQogCQkJbXNnID0gZ2V0 dGV4dF9ub29wKCJzY2hlbWEgXCIlc1wiIGRvZXMgbm90IGV4aXN0LCBza2lw cGluZyIpOwogCQkJbmFtZSA9IE5hbWVMaXN0VG9TdHJpbmcob2JqbmFtZSk7 CiAJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDUzoKKwkJCW1z ZyA9IGdldHRleHRfbm9vcCgic3RhdGlzdGljcyBcIiVzXCIgZG9lcyBub3Qg ZXhpc3QsIHNraXBwaW5nIik7CisJCQluYW1lID0gTmFtZUxpc3RUb1N0cmlu ZyhvYmpuYW1lKTsKKwkJCWJyZWFrOwogCQljYXNlIE9CSkVDVF9UU1BBUlNF UjoKIAkJCWlmICghc2NoZW1hX2RvZXNfbm90X2V4aXN0X3NraXBwaW5nKG9i am5hbWUsICZtc2csICZuYW1lKSkKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA5ZTMyZjhkLi4wOTA2 MWJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jCkBAIC0xMTAsNiArMTEwLDcgQEAgc3RhdGljIGV2ZW50X3RyaWdn ZXJfc3VwcG9ydF9kYXRhIGV2ZW50X3RyaWdnZXJfc3VwcG9ydFtdID0gewog CXsiU0NIRU1BIiwgdHJ1ZX0sCiAJeyJTRVFVRU5DRSIsIHRydWV9LAogCXsi U0VSVkVSIiwgdHJ1ZX0sCisJeyJTVEFUSVNUSUNTIiwgdHJ1ZX0sCiAJeyJU QUJMRSIsIHRydWV9LAogCXsiVEFCTEVTUEFDRSIsIGZhbHNlfSwKIAl7IlRS QU5TRk9STSIsIHRydWV9LApAQCAtMTEwNiw2ICsxMTA3LDcgQEAgRXZlbnRU cmlnZ2VyU3VwcG9ydHNPYmplY3RUeXBlKE9iamVjdFR5cGUgb2J0eXBlKQog CQljYXNlIE9CSkVDVF9SVUxFOgogCQljYXNlIE9CSkVDVF9TQ0hFTUE6CiAJ CWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQljYXNlIE9CSkVDVF9TVEFUSVNU SUNTOgogCQljYXNlIE9CSkVDVF9UQUJDT05TVFJBSU5UOgogCQljYXNlIE9C SkVDVF9UQUJMRToKIAkJY2FzZSBPQkpFQ1RfVFJBTlNGT1JNOgpAQCAtMTE2 Nyw2ICsxMTY5LDcgQEAgRXZlbnRUcmlnZ2VyU3VwcG9ydHNPYmplY3RDbGFz cyhPYmplY3RDbGFzcyBvYmpjbGFzcykKIAkJY2FzZSBPQ0xBU1NfREVGQUNM OgogCQljYXNlIE9DTEFTU19FWFRFTlNJT046CiAJCWNhc2UgT0NMQVNTX1BP TElDWToKKwkJY2FzZSBPQ0xBU1NfU1RBVElTVElDUzoKIAkJCXJldHVybiB0 cnVlOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3RhdHNjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNiMDUz Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Rh dHNjbWRzLmMKQEAgLTAsMCArMSwyNzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHN0YXRzY21kcy5jCisgKgkgIENvbW1h bmRzIGZvciBjcmVhdGluZyBhbmQgYWx0ZXJpbmcgbXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKKyNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKKyNpbmNs dWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9u YW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3Rp Yy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisjaW5j bHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1 dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisj aW5jbHVkZSAidXRpbHMvbXZzdGF0cy5oIgorI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKworLyogdXNl ZCBmb3Igc29ydGluZyB0aGUgYXR0bnVtcyBpbiBFeGVjQ3JlYXRlU3RhdGlz dGljcyAqLworc3RhdGljIGludCBjb21wYXJlX2ludDE2KGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIG1lbWNtcChhLCBiLCBz aXplb2YoaW50MTYpKTsKK30KKworLyoKKyAqIEltcGxlbWVudHMgdGhlIENS RUFURSBTVEFUSVNUSUNTIG5hbWUgT04gdGFibGUgKGNvbHVtbnMpIFdJVEgg KG9wdGlvbnMpCisgKgorICogVE9ETyBDaGVjayB0aGF0IHRoZSB0eXBlcyBz dXBwb3J0IHNvcnQsIGFsdGhvdWdoIG1heWJlIHdlIGNhbiBsaXZlCisgKiAg ICAgIHdpdGhvdXQgaXQgKGFuZCBvbmx5IGJ1aWxkIE1DViBsaXN0IC8gYXNz b2NpYXRpb24gcnVsZXMpLgorICoKKyAqIFRPRE8gVGhpcyBzaG91bGQgcHJv YmFibHkgY2hlY2sgZm9yIGR1cGxpY2F0ZSBzdGF0cyAoaS5lLiBzYW1lCisg KiAgICAgIGtleXMsIHNhbWUgb3B0aW9ucykuIEFsdGhvdWdoIG1heWJlIGl0 J3MgdXNlZnVsIHRvIGhhdmUKKyAqICAgICAgbXVsdGlwbGUgc3RhdHMgb24g dGhlIHNhbWUgY29sdW1ucyB3aXRoIGRpZmZlcmVudCBvcHRpb25zCisgKiAg ICAgIChzYXksIGEgZGV0YWlsZWQgTUNWLW9ubHkgc3RhdHMgZm9yIHNvbWUg cXVlcmllcywgaGlzdG9ncmFtCisgKiAgICAgIGZvciBvdGhlcnMsIGV0Yy4p CisgKi8KK09iamVjdEFkZHJlc3MKK0NyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRl U3RhdHNTdG10ICpzdG10KQoreworCWludAkJCWksIGo7CisJTGlzdENlbGwg ICAqbDsKKwlpbnQxNgkJYXR0bnVtc1tJTkRFWF9NQVhfS0VZU107CisJaW50 CQkJbnVtY29scyA9IDA7CisJT2JqZWN0QWRkcmVzcwlhZGRyZXNzID0gSW52 YWxpZE9iamVjdEFkZHJlc3M7CisJY2hhcgkgICAqbmFtZXN0cjsKKwlOYW1l RGF0YQlzdGFuYW1lOworCU9pZAkJCXN0YXRvaWQ7CisJT2lkCQkJbmFtZXNw YWNlSWQ7CisKKwlIZWFwVHVwbGUJaHR1cDsKKwlEYXR1bQkJdmFsdWVzW05h dHRzX3BnX212X3N0YXRpc3RpY107CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdf bXZfc3RhdGlzdGljXTsKKwlpbnQydmVjdG9yICpzdGFrZXlzOworCVJlbGF0 aW9uCW12c3RhdHJlbDsKKwlSZWxhdGlvbglyZWw7CisJT2JqZWN0QWRkcmVz cyBwYXJlbnRvYmplY3QsIGNoaWxkb2JqZWN0OworCisJLyogYnkgZGVmYXVs dCBidWlsZCBub3RoaW5nICovCisJYm9vbCAJYnVpbGRfZGVwZW5kZW5jaWVz ID0gZmFsc2U7CisKKwlBc3NlcnQoSXNBKHN0bXQsIENyZWF0ZVN0YXRzU3Rt dCkpOworCisJLyogcmVzb2x2ZSB0aGUgcGllY2VzIG9mIHRoZSBuYW1lIChu YW1lc3BhY2UgZXRjLikgKi8KKwluYW1lc3BhY2VJZCA9IFF1YWxpZmllZE5h bWVHZXRDcmVhdGlvbk5hbWVzcGFjZShzdG10LT5kZWZuYW1lcywgJm5hbWVz dHIpOworCW5hbWVzdHJjcHkoJnN0YW5hbWUsIG5hbWVzdHIpOworCisJLyoK KwkgKiBJZiBpZl9ub3RfZXhpc3RzIHdhcyBnaXZlbiBhbmQgdGhlIHN0YXRp c3RpY3MgYWxyZWFkeSBleGlzdHMsIGJhaWwgb3V0LgorCSAqLworCWlmIChz dG10LT5pZl9ub3RfZXhpc3RzICYmCisJCVNlYXJjaFN5c0NhY2hlRXhpc3Rz MihNVlNUQVROQU1FTlNQLAorCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKCZz dGFuYW1lKSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0obmFtZXNwYWNl SWQpKSkKKwl7CisJCWVyZXBvcnQoTk9USUNFLAorCQkJCShlcnJjb2RlKEVS UkNPREVfRFVQTElDQVRFX09CSkVDVCksCisJCQkJIGVycm1zZygic3RhdGlz dGljcyBcIiVzXCIgYWxyZWFkeSBleGlzdHMsIHNraXBwaW5nIiwKKwkJCQkJ CW5hbWVzdHIpKSk7CisJCXJldHVybiBJbnZhbGlkT2JqZWN0QWRkcmVzczsK Kwl9CisKKwlyZWwgPSBoZWFwX29wZW5ydihzdG10LT5yZWxhdGlvbiwgQWNj ZXNzRXhjbHVzaXZlTG9jayk7CisKKwkvKiB0cmFuc2Zvcm0gdGhlIGNvbHVt biBuYW1lcyB0byBhdHRudW0gdmFsdWVzICovCisKKwlmb3JlYWNoKGwsIHN0 bXQtPmtleXMpCisJeworCQljaGFyCSAgICphdHRuYW1lID0gc3RyVmFsKGxm aXJzdChsKSk7CisJCUhlYXBUdXBsZQlhdHR0dXBsZTsKKworCQlhdHR0dXBs ZSA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJl bCksIGF0dG5hbWUpOworCisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHR0 dXBsZSkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9DT0xVTU4pLAorCQkJCQkgZXJybXNnKCJjb2x1bW4g XCIlc1wiIHJlZmVyZW5jZWQgaW4gc3RhdGlzdGljcyBkb2VzIG5vdCBleGlz dCIsCisJCQkJCQkJYXR0bmFtZSkpKTsKKworCQkvKiBtb3JlIHRoYW4gTVZI SVNUX01BWF9ESU1FTlNJT05TIGNvbHVtbnMgbm90IGFsbG93ZWQgKi8KKwkJ aWYgKG51bWNvbHMgPj0gTVZTVEFUU19NQVhfRElNRU5TSU9OUykKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVE9PX01BTllf Q09MVU1OUyksCisJCQkJCSBlcnJtc2coImNhbm5vdCBoYXZlIG1vcmUgdGhh biAlZCBrZXlzIGluIGEgc3RhdGlzdGljcyIsCisJCQkJCQkJTVZTVEFUU19N QVhfRElNRU5TSU9OUykpKTsKKworCQlhdHRudW1zW251bWNvbHNdID0gKChG b3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHR1cGxlKSktPmF0dG51 bTsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHR1cGxlKTsKKwkJbnVtY29scysr OworCX0KKworCS8qCisJICogQ2hlY2sgdGhlIGxvd2VyIGJvdW5kIChhdCBs ZWFzdCAyIGNvbHVtbnMpLCB0aGUgdXBwZXIgYm91bmQgd2FzCisJICogYWxy ZWFkeSBjaGVja2VkIGluIHRoZSBsb29wLgorCSAqLworCWlmIChudW1jb2xz IDwgMikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfVE9PX01BTllfQ09MVU1OUyksCisJCQkJCSBlcnJtc2coIm11bHRpdmFy aWF0ZSBzdGF0cyByZXF1aXJlIDIgb3IgbW9yZSBjb2x1bW5zIikpKTsKKwor CS8qIGxvb2sgZm9yIGR1cGxpY2l0aWVzICovCisJZm9yIChpID0gMDsgaSA8 IG51bWNvbHM7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG51bWNvbHM7IGor KykKKwkJCWlmICgoaSAhPSBqKSAmJiAoYXR0bnVtc1tpXSA9PSBhdHRudW1z W2pdKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkJCSBlcnJtc2coImR1cGxp Y2F0ZSBjb2x1bW4gbmFtZSBpbiBzdGF0aXN0aWNzIGRlZmluaXRpb24iKSkp OworCisJLyogcGFyc2UgdGhlIHN0YXRpc3RpY3Mgb3B0aW9ucyAqLworCWZv cmVhY2ggKGwsIHN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICpvcHQg PSAoRGVmRWxlbSopbGZpcnN0KGwpOworCisJCWlmIChzdHJjbXAob3B0LT5k ZWZuYW1lLCAiZGVwZW5kZW5jaWVzIikgPT0gMCkKKwkJCWJ1aWxkX2RlcGVu ZGVuY2llcyA9IGRlZkdldEJvb2xlYW4ob3B0KTsKKwkJZWxzZQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAorCQkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgU1RBVElTVElDUyBv cHRpb24gXCIlc1wiIiwKKwkJCQkJCQlvcHQtPmRlZm5hbWUpKSk7CisJfQor CisJLyogY2hlY2sgdGhhdCBhdCBsZWFzdCBzb21lIHN0YXRpc3RpY3Mgd2Vy ZSByZXF1ZXN0ZWQgKi8KKwlpZiAoISBidWlsZF9kZXBlbmRlbmNpZXMpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlwZSAoZGVw ZW5kZW5jaWVzKSB3YXMgcmVxdWVzdGVkIikpKTsKKworCS8qIHNvcnQgdGhl IGF0dG51bXMgYW5kIGJ1aWxkIGludDJ2ZWN0b3IgKi8KKwlxc29ydChhdHRu dW1zLCBudW1jb2xzLCBzaXplb2YoaW50MTYpLCBjb21wYXJlX2ludDE2KTsK KwlzdGFrZXlzID0gYnVpbGRpbnQydmVjdG9yKGF0dG51bXMsIG51bWNvbHMp OworCisJLyoKKwkgKiBPa2F5LCBsZXQncyBjcmVhdGUgdGhlIHBnX212X3N0 YXRpc3RpYyBlbnRyeS4KKwkgKi8KKwltZW1zZXQodmFsdWVzLCAwLCBzaXpl b2YodmFsdWVzKSk7CisJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51 bGxzKSk7CisKKwkvKiBubyBzdGF0cyBjb2xsZWN0ZWQgeWV0LCBzbyBqdXN0 IHRoZSBrZXlzICovCisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0 YXJlbGlkLTFdID0gT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlk KHJlbCkpOworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1l IC0xXSA9IE5hbWVHZXREYXR1bSgmc3RhbmFtZSk7CisJdmFsdWVzW0FudW1f cGdfbXZfc3RhdGlzdGljX3N0YW5hbWVzcGFjZSAtMV0gPSBPYmplY3RJZEdl dERhdHVtKG5hbWVzcGFjZUlkKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3Rhb3duZXItMV0gPSBPYmplY3RJZEdldERhdHVtKEdldFVzZXJJ ZCgpKTsKKworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlz IC0xXSA9IFBvaW50ZXJHZXREYXR1bShzdGFrZXlzKTsKKworCXZhbHVlc1tB bnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQgLTFdID0gQm9vbEdl dERhdHVtKGJ1aWxkX2RlcGVuZGVuY2llcyk7CisKKwludWxsc1tBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFkZXBzICAtMV0gPSB0cnVlOworCisJLyogaW5z ZXJ0IHRoZSB0dXBsZSBpbnRvIHBnX212X3N0YXRpc3RpYyAqLworCW12c3Rh dHJlbCA9IGhlYXBfb3BlbihNdlN0YXRpc3RpY1JlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCisJaHR1cCA9IGhlYXBfZm9ybV90dXBsZShtdnN0 YXRyZWwtPnJkX2F0dCwgdmFsdWVzLCBudWxscyk7CisKKwlzaW1wbGVfaGVh cF9pbnNlcnQobXZzdGF0cmVsLCBodHVwKTsKKworCUNhdGFsb2dVcGRhdGVJ bmRleGVzKG12c3RhdHJlbCwgaHR1cCk7CisKKwlzdGF0b2lkID0gSGVhcFR1 cGxlR2V0T2lkKGh0dXApOworCisJaGVhcF9mcmVldHVwbGUoaHR1cCk7CisK KworCS8qCisJICogU3RvcmUgYSBkZXBlbmRlbmN5IHRvbywgc28gdGhhdCBz dGF0aXN0aWNzIGFyZSBkcm9wcGVkIG9uIERST1AgVEFCTEUKKwkgKi8KKwlw YXJlbnRvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwlw YXJlbnRvYmplY3Qub2JqZWN0SWQgPSBPYmplY3RJZEdldERhdHVtKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSk7CisJcGFyZW50b2JqZWN0Lm9iamVjdFN1Yklk ID0gMDsKKwljaGlsZG9iamVjdC5jbGFzc0lkID0gTXZTdGF0aXN0aWNSZWxh dGlvbklkOworCWNoaWxkb2JqZWN0Lm9iamVjdElkID0gc3RhdG9pZDsKKwlj aGlsZG9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisKKwlyZWNvcmREZXBlbmRl bmN5T24oJmNoaWxkb2JqZWN0LCAmcGFyZW50b2JqZWN0LCBERVBFTkRFTkNZ X0FVVE8pOworCisJLyoKKwkgKiBBbHNvIHJlY29yZCBkZXBlbmRlbmN5IG9u IHRoZSBzY2hlbWEgKHRvIGRyb3Agc3RhdGlzdGljcyBvbiBEUk9QIFNDSEVN QSkKKwkgKi8KKwlwYXJlbnRvYmplY3QuY2xhc3NJZCA9IE5hbWVzcGFjZVJl bGF0aW9uSWQ7CisJcGFyZW50b2JqZWN0Lm9iamVjdElkID0gT2JqZWN0SWRH ZXREYXR1bShuYW1lc3BhY2VJZCk7CisJcGFyZW50b2JqZWN0Lm9iamVjdFN1 YklkID0gMDsKKwljaGlsZG9iamVjdC5jbGFzc0lkID0gTXZTdGF0aXN0aWNS ZWxhdGlvbklkOworCWNoaWxkb2JqZWN0Lm9iamVjdElkID0gc3RhdG9pZDsK KwljaGlsZG9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisKKwlyZWNvcmREZXBl bmRlbmN5T24oJmNoaWxkb2JqZWN0LCAmcGFyZW50b2JqZWN0LCBERVBFTkRF TkNZX0FVVE8pOworCisKKwloZWFwX2Nsb3NlKG12c3RhdHJlbCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7 CisKKwkvKgorCSAqIEludmFsaWRhdGUgcmVsY2FjaGUgc28gdGhhdCBvdGhl cnMgc2VlIHRoZSBuZXcgc3RhdGlzdGljcy4KKwkgKi8KKwlDYWNoZUludmFs aWRhdGVSZWxjYWNoZShyZWwpOworCisJT2JqZWN0QWRkcmVzc1NldChhZGRy ZXNzLCBNdlN0YXRpc3RpY1JlbGF0aW9uSWQsIHN0YXRvaWQpOworCisJcmV0 dXJuIGFkZHJlc3M7Cit9CisKKworLyoKKyAqIEltcGxlbWVudHMgdGhlIERS T1AgU1RBVElTVElDUworICoKKyAqICAgICBEUk9QIFNUQVRJU1RJQ1Mgc3Rh dHNfbmFtZSBPTiB0YWJsZV9uYW1lCisgKgorICogVGhlIGZpcnN0IG9uZSBy ZXF1aXJlcyBhbiBleGFjdCBtYXRjaCwgdGhlIHNlY29uZCBvbmUganVzdCBk cm9wcworICogYWxsIHRoZSBzdGF0aXN0aWNzIG9uIGEgdGFibGUuCisgKi8K K3ZvaWQKK1JlbW92ZVN0YXRpc3RpY3NCeUlkKE9pZCBzdGF0c09pZCkKK3sK KwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlyZWxpZDsKKwlSZWxhdGlv bglyZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlGb3JtX3BnX212X3N0YXRpc3Rp YwltdnN0YXQ7CisKKwkvKgorCSAqIERlbGV0ZSB0aGUgcGdfcHJvYyB0dXBs ZS4KKwkgKi8KKwlyZWxhdGlvbiA9IGhlYXBfb3BlbihNdlN0YXRpc3RpY1Jl bGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJdHVwID0gU2VhcmNo U3lzQ2FjaGUxKE1WU1RBVE9JRCwgT2JqZWN0SWRHZXREYXR1bShzdGF0c09p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKSAvKiBzaG91bGQg bm90IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3Igc3RhdGlzdGljcyAldSIsIHN0YXRzT2lkKTsKKworCW12c3Rh dCA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKHR1cCk7CisJ cmVsaWQgPSBtdnN0YXQtPnN0YXJlbGlkOworCisJcmVsID0gaGVhcF9vcGVu KHJlbGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCXNpbXBsZV9oZWFw X2RlbGV0ZShyZWxhdGlvbiwgJnR1cC0+dF9zZWxmKTsKKworCUNhY2hlSW52 YWxpZGF0ZVJlbGNhY2hlKHJlbCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVw KTsKKworCWhlYXBfY2xvc2UocmVsYXRpb24sIFJvd0V4Y2x1c2l2ZUxvY2sp OworCWhlYXBfY2xvc2UocmVsLCBOb0xvY2spOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBkZjdjMmZhLi4zYjdjODdmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9z cmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDEyNCw2ICs0MTI0 LDIwIEBAIF9jb3B5QWx0ZXJQb2xpY3lTdG10KGNvbnN0IEFsdGVyUG9saWN5 U3RtdCAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0KIAorc3RhdGljIENy ZWF0ZVN0YXRzU3RtdCAqCitfY29weUNyZWF0ZVN0YXRzU3RtdChjb25zdCBD cmVhdGVTdGF0c1N0bXQgKmZyb20pCit7CisJQ3JlYXRlU3RhdHNTdG10ICAq bmV3bm9kZSA9IG1ha2VOb2RlKENyZWF0ZVN0YXRzU3RtdCk7CisKKwlDT1BZ X05PREVfRklFTEQoZGVmbmFtZXMpOworCUNPUFlfTk9ERV9GSUVMRChyZWxh dGlvbik7CisJQ09QWV9OT0RFX0ZJRUxEKGtleXMpOworCUNPUFlfTk9ERV9G SUVMRChvcHRpb25zKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChpZl9ub3RfZXhp c3RzKTsKKworCXJldHVybiBuZXdub2RlOworfQorCiAvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCiAgKgkJCQkJcGdfbGlzdC5oIGNvcHkgZnVuY3Rpb25zCiAg KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCkBAIC00OTk5LDYgKzUwMTMsOSBAQCBj b3B5T2JqZWN0KGNvbnN0IHZvaWQgKmZyb20pCiAJCWNhc2UgVF9Db21tb25U YWJsZUV4cHI6CiAJCQlyZXR2YWwgPSBfY29weUNvbW1vblRhYmxlRXhwcihm cm9tKTsKIAkJCWJyZWFrOworCQljYXNlIFRfQ3JlYXRlU3RhdHNTdG10Ogor CQkJcmV0dmFsID0gX2NvcHlDcmVhdGVTdGF0c1N0bXQoZnJvbSk7CisJCQli cmVhazsKIAkJY2FzZSBUX0Z1bmNXaXRoQXJnczoKIAkJCXJldHZhbCA9IF9j b3B5RnVuY1dpdGhBcmdzKGZyb20pOwogCQkJYnJlYWs7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvb3V0ZnVuY3MuYwppbmRleCBlYjBmYzFlLi4wNzIwNmQ3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTIxNTMsNiArMjE1Mywy MSBAQCBfb3V0SW5kZXhPcHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBJ bmRleE9wdEluZm8gKm5vZGUpCiB9CiAKIHN0YXRpYyB2b2lkCitfb3V0TVZT dGF0aXN0aWNJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBNVlN0YXRpc3Rp Y0luZm8gKm5vZGUpCit7CisJV1JJVEVfTk9ERV9UWVBFKCJNVlNUQVRJU1RJ Q0lORk8iKTsKKworCS8qIE5COiB0aGlzIGlzbid0IGEgY29tcGxldGUgc2V0 IG9mIGZpZWxkcyAqLworCVdSSVRFX09JRF9GSUVMRChtdm9pZCk7CisKKwkv KiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KKwlXUklURV9CT09MX0ZJRUxEKGRl cHNfZW5hYmxlZCk7CisKKwkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGlj cyAqLworCVdSSVRFX0JPT0xfRklFTEQoZGVwc19idWlsdCk7Cit9CisKK3N0 YXRpYyB2b2lkCiBfb3V0RXF1aXZhbGVuY2VDbGFzcyhTdHJpbmdJbmZvIHN0 ciwgY29uc3QgRXF1aXZhbGVuY2VDbGFzcyAqbm9kZSkKIHsKIAkvKgpAQCAt MzYzNiw2ICszNjUxLDkgQEAgX291dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNv bnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QbGFubmVyUGFyYW1JdGVtOgog CQkJCV9vdXRQbGFubmVyUGFyYW1JdGVtKHN0ciwgb2JqKTsKIAkJCQlicmVh azsKKwkJCWNhc2UgVF9NVlN0YXRpc3RpY0luZm86CisJCQkJX291dE1WU3Rh dGlzdGljSW5mbyhzdHIsIG9iaik7CisJCQkJYnJlYWs7CiAKIAkJCWNhc2Ug VF9FeHRlbnNpYmxlTm9kZToKIAkJCQlfb3V0RXh0ZW5zaWJsZU5vZGUoc3Ry LCBvYmopOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxh bmNhdC5jCmluZGV4IGFkNzE1YmIuLjdmYjIwODggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTI4LDYgKzI4 LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL2hlYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Ft LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKICNp bmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpAQCAtNDAsNyAr NDEsOSBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9z eXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUg InV0aWxzL3NuYXBtZ3IuaCIKIApAQCAtOTQsNiArOTcsNyBAQCBnZXRfcmVs YXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2Jq ZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCVJlbGF0aW9uCXJlbGF0aW9uOwog CWJvb2wJCWhhc2luZGV4OwogCUxpc3QJICAgKmluZGV4aW5mb3MgPSBOSUw7 CisJTGlzdAkgICAqc3RhaW5mb3MgPSBOSUw7CiAKIAkvKgogCSAqIFdlIG5l ZWQgbm90IGxvY2sgdGhlIHJlbGF0aW9uIHNpbmNlIGl0IHdhcyBhbHJlYWR5 IGxvY2tlZCwgZWl0aGVyIGJ5CkBAIC0zODcsNiArMzkxLDYxIEBAIGdldF9y ZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25P YmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAKIAlyZWwtPmluZGV4bGlzdCA9 IGluZGV4aW5mb3M7CiAKKwlpZiAodHJ1ZSkKKwl7CisJCUxpc3QJICAgKm12 c3RhdG9pZGxpc3Q7CisJCUxpc3RDZWxsICAgKmw7CisKKwkJbXZzdGF0b2lk bGlzdCA9IFJlbGF0aW9uR2V0TVZTdGF0TGlzdChyZWxhdGlvbik7CisKKwkJ Zm9yZWFjaChsLCBtdnN0YXRvaWRsaXN0KQorCQl7CisJCQlBcnJheVR5cGUg ICphcnI7CisJCQlEYXR1bQkJYWRhdHVtOworCQkJYm9vbAkJaXNudWxsOwor CQkJT2lkCQkJbXZvaWQgPSBsZmlyc3Rfb2lkKGwpOworCQkJRm9ybV9wZ19t dl9zdGF0aXN0aWMgbXZzdGF0OworCQkJTVZTdGF0aXN0aWNJbmZvICppbmZv OworCisJCQlIZWFwVHVwbGUJaHR1cCA9IFNlYXJjaFN5c0NhY2hlMShNVlNU QVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsKKworCQkJbXZzdGF0 ID0gKEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7CisK KwkJCS8qIHVuYXZhaWxhYmxlIHN0YXRzIGFyZSBub3QgaW50ZXJlc3Rpbmcg Zm9yIHRoZSBwbGFubmVyICovCisJCQlpZiAobXZzdGF0LT5kZXBzX2J1aWx0 KQorCQkJeworCQkJCWluZm8gPSBtYWtlTm9kZShNVlN0YXRpc3RpY0luZm8p OworCisJCQkJaW5mby0+bXZvaWQgPSBtdm9pZDsKKwkJCQlpbmZvLT5yZWwg PSByZWw7CisKKwkJCQkvKiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KKwkJCQlp bmZvLT5kZXBzX2VuYWJsZWQgPSBtdnN0YXQtPmRlcHNfZW5hYmxlZDsKKwor CQkJCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICovCisJCQkJaW5m by0+ZGVwc19idWlsdCA9IG12c3RhdC0+ZGVwc19idWlsdDsKKworCQkJCS8q IHN0YWtleXMgKi8KKwkJCQlhZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoTVZT VEFUT0lELCBodHVwLAorCQkJCQkJCQkJCSBBbnVtX3BnX212X3N0YXRpc3Rp Y19zdGFrZXlzLCAmaXNudWxsKTsKKwkJCQlBc3NlcnQoIWlzbnVsbCk7CisK KwkJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoYWRhdHVtKTsKKworCQkJ CWluZm8tPnN0YWtleXMgPSBidWlsZGludDJ2ZWN0b3IoKGludDE2ICopIEFS Ul9EQVRBX1BUUihhcnIpLAorCQkJCQkJCQkJCQkJQVJSX0RJTVMoYXJyKVsw XSk7CisKKwkJCQlzdGFpbmZvcyA9IGxjb25zKGluZm8sIHN0YWluZm9zKTsK KwkJCX0KKworCQkJUmVsZWFzZVN5c0NhY2hlKGh0dXApOworCQl9CisKKwkJ bGlzdF9mcmVlKG12c3RhdG9pZGxpc3QpOworCX0KKworCXJlbC0+bXZzdGF0 bGlzdCA9IHN0YWluZm9zOworCiAJLyogR3JhYiBmb3JlaWduLXRhYmxlIGlu Zm8gdXNpbmcgdGhlIHJlbGNhY2hlLCB3aGlsZSB3ZSBoYXZlIGl0ICovCiAJ aWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JF SUdOX1RBQkxFKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IGI5 YWViMzEuLmVlZDk5MjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAt MjQxLDcgKzI0MSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmll d1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAJCUNvbnN0cmFpbnRzU2V0U3RtdCBDb3B5U3RtdCBDcmVhdGVB c1N0bXQgQ3JlYXRlQ2FzdFN0bXQKIAkJQ3JlYXRlRG9tYWluU3RtdCBDcmVh dGVFeHRlbnNpb25TdG10IENyZWF0ZUdyb3VwU3RtdCBDcmVhdGVPcENsYXNz U3RtdAogCQlDcmVhdGVPcEZhbWlseVN0bXQgQWx0ZXJPcEZhbWlseVN0bXQg Q3JlYXRlUExhbmdTdG10Ci0JCUNyZWF0ZVNjaGVtYVN0bXQgQ3JlYXRlU2Vx U3RtdCBDcmVhdGVTdG10IENyZWF0ZVRhYmxlU3BhY2VTdG10CisJCUNyZWF0 ZVNjaGVtYVN0bXQgQ3JlYXRlU2VxU3RtdCBDcmVhdGVTdG10IENyZWF0ZVN0 YXRzU3RtdCBDcmVhdGVUYWJsZVNwYWNlU3RtdAogCQlDcmVhdGVGZHdTdG10 IENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IENyZWF0ZUZvcmVpZ25UYWJsZVN0 bXQKIAkJQ3JlYXRlQXNzZXJ0U3RtdCBDcmVhdGVUcmFuc2Zvcm1TdG10IENy ZWF0ZVRyaWdTdG10IENyZWF0ZUV2ZW50VHJpZ1N0bXQKIAkJQ3JlYXRlVXNl clN0bXQgQ3JlYXRlVXNlck1hcHBpbmdTdG10IENyZWF0ZVJvbGVTdG10IENy ZWF0ZVBvbGljeVN0bXQKQEAgLTgwOSw2ICs4MDksNyBAQCBzdG10IDoKIAkJ CXwgQ3JlYXRlU2NoZW1hU3RtdAogCQkJfCBDcmVhdGVTZXFTdG10CiAJCQl8 IENyZWF0ZVN0bXQKKwkJCXwgQ3JlYXRlU3RhdHNTdG10CiAJCQl8IENyZWF0 ZVRhYmxlU3BhY2VTdG10CiAJCQl8IENyZWF0ZVRyYW5zZm9ybVN0bXQKIAkJ CXwgQ3JlYXRlVHJpZ1N0bXQKQEAgLTM0MzYsNiArMzQzNywzNiBAQCBPcHRD b25zVGFibGVTcGFjZTogICBVU0lORyBJTkRFWCBUQUJMRVNQQUNFIG5hbWUJ eyAkJCA9ICQ0OyB9CiBFeGlzdGluZ0luZGV4OiAgIFVTSU5HIElOREVYIGlu ZGV4X25hbWUJCQkJeyAkJCA9ICQzOyB9CiAJCTsKIAorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKgorICoJCVFVRVJZIDoKKyAqCQkJ CUNSRUFURSBTVEFUSVNUSUNTIHN0YXRzX25hbWUgT04gcmVsbmFtZSAoY29s dW1ucykgV0lUSCAob3B0aW9ucykKKyAqCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisKKworQ3JlYXRlU3RhdHNTdG10OglDUkVBVEUg U1RBVElTVElDUyBhbnlfbmFtZSBPTiBxdWFsaWZpZWRfbmFtZSAnKCcgY29s dW1uTGlzdCAnKScgb3B0X3JlbG9wdGlvbnMKKwkJCQkJCXsKKwkJCQkJCQlD cmVhdGVTdGF0c1N0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVTdGF0c1N0bXQp OworCQkJCQkJCW4tPmRlZm5hbWVzID0gJDM7CisJCQkJCQkJbi0+cmVsYXRp b24gPSAkNTsKKwkJCQkJCQluLT5rZXlzID0gJDc7CisJCQkJCQkJbi0+b3B0 aW9ucyA9ICQ5OworCQkJCQkJCW4tPmlmX25vdF9leGlzdHMgPSBmYWxzZTsK KwkJCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQkJCX0KKwkJCQkJfCBDUkVB VEUgU1RBVElTVElDUyBJRl9QIE5PVCBFWElTVFMgYW55X25hbWUgT04gcXVh bGlmaWVkX25hbWUgJygnIGNvbHVtbkxpc3QgJyknIG9wdF9yZWxvcHRpb25z CisJCQkJCQl7CisJCQkJCQkJQ3JlYXRlU3RhdHNTdG10ICpuID0gbWFrZU5v ZGUoQ3JlYXRlU3RhdHNTdG10KTsKKwkJCQkJCQluLT5kZWZuYW1lcyA9ICQ2 OworCQkJCQkJCW4tPnJlbGF0aW9uID0gJDg7CisJCQkJCQkJbi0+a2V5cyA9 ICQxMDsKKwkJCQkJCQluLT5vcHRpb25zID0gJDEyOworCQkJCQkJCW4tPmlm X25vdF9leGlzdHMgPSB0cnVlOworCQkJCQkJCSQkID0gKE5vZGUgKiluOwor CQkJCQkJfQorCQkJOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICoKQEAgLTU2MjEsNiArNTY1Miw3IEBAIGRyb3BfdHlwZToJ VEFCTEUJCQkJCQkJCQl7ICQkID0gT0JKRUNUX1RBQkxFOyB9CiAJCQl8IFRF WFRfUCBTRUFSQ0ggRElDVElPTkFSWQkJCQl7ICQkID0gT0JKRUNUX1RTRElD VElPTkFSWTsgfQogCQkJfCBURVhUX1AgU0VBUkNIIFRFTVBMQVRFCQkJCXsg JCQgPSBPQkpFQ1RfVFNURU1QTEFURTsgfQogCQkJfCBURVhUX1AgU0VBUkNI IENPTkZJR1VSQVRJT04JCQl7ICQkID0gT0JKRUNUX1RTQ09ORklHVVJBVElP TjsgfQorCQkJfCBTVEFUSVNUSUNTCQkJCQkJCXsgJCQgPSBPQkpFQ1RfU1RB VElTVElDUzsgfQogCQk7CiAKIGFueV9uYW1lX2xpc3Q6CkBAIC03OTk1LDYg KzgwMjcsMTUgQEAgUmVuYW1lU3RtdDogQUxURVIgQUdHUkVHQVRFIGZ1bmNf bmFtZSBhZ2dyX2FyZ3MgUkVOQU1FIFRPIG5hbWUKIAkJCQkJbi0+bWlzc2lu Z19vayA9IGZhbHNlOwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9CisJ CQl8IEFMVEVSIFNUQVRJU1RJQ1MgYW55X25hbWUgUkVOQU1FIFRPIG5hbWUK KwkJCQl7CisJCQkJCVJlbmFtZVN0bXQgKm4gPSBtYWtlTm9kZShSZW5hbWVT dG10KTsKKwkJCQkJbi0+cmVuYW1lVHlwZSA9IE9CSkVDVF9TVEFUSVNUSUNT OworCQkJCQluLT5vYmplY3QgPSAkMzsKKwkJCQkJbi0+bmV3bmFtZSA9ICQ2 OworCQkJCQluLT5taXNzaW5nX29rID0gZmFsc2U7CisJCQkJCSQkID0gKE5v ZGUgKiluOworCQkJCX0KIAkJOwogCiBvcHRfY29sdW1uOiBDT0xVTU4JCQkJ CQkJCQl7ICQkID0gQ09MVU1OOyB9CkBAIC04MjMxLDYgKzgyNzIsMTUgQEAg QWx0ZXJPYmplY3RTY2hlbWFTdG10OgogCQkJCQluLT5taXNzaW5nX29rID0g ZmFsc2U7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KKwkJCXwgQUxU RVIgU1RBVElTVElDUyBhbnlfbmFtZSBTRVQgU0NIRU1BIG5hbWUKKwkJCQl7 CisJCQkJCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbiA9IG1ha2VOb2RlKEFs dGVyT2JqZWN0U2NoZW1hU3RtdCk7CisJCQkJCW4tPm9iamVjdFR5cGUgPSBP QkpFQ1RfU1RBVElTVElDUzsKKwkJCQkJbi0+b2JqZWN0ID0gJDM7CisJCQkJ CW4tPm5ld3NjaGVtYSA9ICQ2OworCQkJCQluLT5taXNzaW5nX29rID0gZmFs c2U7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KIAkJOwogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTg0MjEsNiArODQ3 MSwxNCBAQCBBbHRlck93bmVyU3RtdDogQUxURVIgQUdHUkVHQVRFIGZ1bmNf bmFtZSBhZ2dyX2FyZ3MgT1dORVIgVE8gUm9sZVNwZWMKIAkJCQkJbi0+bmV3 b3duZXIgPSAkNzsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQorCQkJ fCBBTFRFUiBTVEFUSVNUSUNTIG5hbWUgT1dORVIgVE8gUm9sZVNwZWMKKwkJ CQl7CisJCQkJCUFsdGVyT3duZXJTdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJP d25lclN0bXQpOworCQkJCQluLT5vYmplY3RUeXBlID0gT0JKRUNUX1NUQVRJ U1RJQ1M7CisJCQkJCW4tPm9iamVjdCA9IGxpc3RfbWFrZTEobWFrZVN0cmlu ZygkMykpOworCQkJCQluLT5uZXdvd25lciA9ICQ2OworCQkJCQkkJCA9IChO b2RlICopbjsKKwkJCQl9CiAJCTsKIAogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCmluZGV4IDA0NWY3ZjAuLjk2YjU4ZjggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jCkBAIC0xNTIwLDYgKzE1MjAsMTAgQEAgUHJvY2Vzc1V0aWxp dHlTbG93KE5vZGUgKnBhcnNldHJlZSwKIAkJCQlhZGRyZXNzID0gRXhlY1Nl Y0xhYmVsU3RtdCgoU2VjTGFiZWxTdG10ICopIHBhcnNldHJlZSk7CiAJCQkJ YnJlYWs7CiAKKwkJCWNhc2UgVF9DcmVhdGVTdGF0c1N0bXQ6CS8qIENSRUFU RSBTVEFUSVNUSUNTICovCisJCQkJYWRkcmVzcyA9IENyZWF0ZVN0YXRpc3Rp Y3MoKENyZWF0ZVN0YXRzU3RtdCAqKSBwYXJzZXRyZWUpOworCQkJCWJyZWFr OworCiAJCQlkZWZhdWx0OgogCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgbm9kZSB0eXBlOiAlZCIsCiAJCQkJCSAoaW50KSBub2RlVGFnKHBhcnNl dHJlZSkpOwpAQCAtMTg3OCw2ICsxODgyLDkgQEAgQWx0ZXJPYmplY3RUeXBl Q29tbWFuZFRhZyhPYmplY3RUeXBlIG9ianR5cGUpCiAJCWNhc2UgT0JKRUNU X01BVFZJRVc6CiAJCQl0YWcgPSAiQUxURVIgTUFURVJJQUxJWkVEIFZJRVci OwogCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ1M6CisJCQl0 YWcgPSAiQUxURVIgU1RBVElTVElDUyI7CisJCQlicmVhazsKIAkJZGVmYXVs dDoKIAkJCXRhZyA9ICI/Pz8iOwogCQkJYnJlYWs7CkBAIC0yMTYwLDYgKzIx NjcsOSBAQCBDcmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJ CQljYXNlIE9CSkVDVF9UUkFOU0ZPUk06CiAJCQkJCXRhZyA9ICJEUk9QIFRS QU5TRk9STSI7CiAJCQkJCWJyZWFrOworCQkJCWNhc2UgT0JKRUNUX1NUQVRJ U1RJQ1M6CisJCQkJCXRhZyA9ICJEUk9QIFNUQVRJU1RJQ1MiOworCQkJCQli cmVhazsKIAkJCQlkZWZhdWx0OgogCQkJCQl0YWcgPSAiPz8/IjsKIAkJCX0K QEAgLTI1MjcsNiArMjUzNywxMCBAQCBDcmVhdGVDb21tYW5kVGFnKE5vZGUg KnBhcnNldHJlZSkKIAkJCXRhZyA9ICJFWEVDVVRFIjsKIAkJCWJyZWFrOwog CisJCWNhc2UgVF9DcmVhdGVTdGF0c1N0bXQ6CisJCQl0YWcgPSAiQ1JFQVRF IFNUQVRJU1RJQ1MiOworCQkJYnJlYWs7CisKIAkJY2FzZSBUX0RlYWxsb2Nh dGVTdG10OgogCQkJewogCQkJCURlYWxsb2NhdGVTdG10ICpzdG10ID0gKERl YWxsb2NhdGVTdG10ICopIHBhcnNldHJlZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvTWFr ZWZpbGUKaW5kZXggODM3NDUzMy4uZWJhMDM1MiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvTWFrZWZpbGUKQEAgLTksNyArOSw3IEBAIHRvcF9idWlsZGRpciA9IC4u Ly4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUu Z2xvYmFsCiAKIE9CSlMgICAgICAgID0gZm1ncnRhYi5vCi1TVUJESVJTICAg ICA9IGFkdCBjYWNoZSBlcnJvciBmbWdyIGhhc2ggaW5pdCBtYiBtaXNjIG1t Z3IgcmVzb3duZXIgc29ydCB0aW1lCitTVUJESVJTICAgICA9IGFkdCBjYWNo ZSBlcnJvciBmbWdyIGhhc2ggaW5pdCBtYiBtaXNjIG1tZ3IgbXZzdGF0cyBy ZXNvd25lciBzb3J0IHRpbWUKIAogIyBsb2NhdGlvbiBvZiBDYXRhbG9nLnBt CiBjYXRhbG9nZGlyICA9ICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY2F0 YWxvZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVs Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMK aW5kZXggMTMwYzA2ZC4uM2JjNGM4YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19hdXRoX21lbWJlcnMuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2RhdGFiYXNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0 aWMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfcHJvYy5oIgpAQCAtMzk1Niw2ICszOTU3LDYyIEBAIFJlbGF0aW9u R2V0SW5kZXhMaXN0KFJlbGF0aW9uIHJlbGF0aW9uKQogCXJldHVybiByZXN1 bHQ7CiB9CiAKKworTGlzdCAqCitSZWxhdGlvbkdldE1WU3RhdExpc3QoUmVs YXRpb24gcmVsYXRpb24pCit7CisJUmVsYXRpb24JaW5kcmVsOworCVN5c1Nj YW5EZXNjIGluZHNjYW47CisJU2NhbktleURhdGEgc2tleTsKKwlIZWFwVHVw bGUJaHR1cDsKKwlMaXN0CSAgICpyZXN1bHQ7CisJTGlzdAkgICAqb2xkbGlz dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCS8qIFF1aWNrIGV4aXQg aWYgd2UgYWxyZWFkeSBjb21wdXRlZCB0aGUgbGlzdC4gKi8KKwlpZiAocmVs YXRpb24tPnJkX212c3RhdHZhbGlkICE9IDApCisJCXJldHVybiBsaXN0X2Nv cHkocmVsYXRpb24tPnJkX212c3RhdGxpc3QpOworCisJLyoKKwkgKiBXZSBi dWlsZCB0aGUgbGlzdCB3ZSBpbnRlbmQgdG8gcmV0dXJuIChpbiB0aGUgY2Fs bGVyJ3MgY29udGV4dCkgd2hpbGUKKwkgKiBkb2luZyB0aGUgc2Nhbi4gIEFm dGVyIHN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nIHRoZSBzY2FuLCB3ZSBjb3B5 IHRoYXQKKwkgKiBsaXN0IGludG8gdGhlIHJlbGNhY2hlIGVudHJ5LiAgVGhp cyBhdm9pZHMgY2FjaGUtY29udGV4dCBtZW1vcnkgbGVha2FnZQorCSAqIGlm IHdlIGdldCBzb21lIHNvcnQgb2YgZXJyb3IgcGFydHdheSB0aHJvdWdoLgor CSAqLworCXJlc3VsdCA9IE5JTDsKKworCS8qIFByZXBhcmUgdG8gc2NhbiBw Z19pbmRleCBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0aGlzIHJl bC4gKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJl bGlkKHJlbGF0aW9uKSkpOworCisJaW5kcmVsID0gaGVhcF9vcGVuKE12U3Rh dGlzdGljUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpbmRzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKGluZHJlbCwgTXZTdGF0aXN0aWNSZWxp ZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCSBOVUxMLCAxLCAmc2tleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChodHVwID0gc3lzdGFibGVfZ2V0 bmV4dChpbmRzY2FuKSkpCisJCS8qIFRPRE8gbWF5YmUgaW5jbHVkZSBvbmx5 IGFscmVhZHkgYnVpbHQgc3RhdGlzdGljcz8gKi8KKwkJcmVzdWx0ID0gaW5z ZXJ0X29yZGVyZWRfb2lkKHJlc3VsdCwgSGVhcFR1cGxlR2V0T2lkKGh0dXAp KTsKKworCXN5c3RhYmxlX2VuZHNjYW4oaW5kc2Nhbik7CisKKwloZWFwX2Ns b3NlKGluZHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIE5vdyBzYXZl IGEgY29weSBvZiB0aGUgY29tcGxldGVkIGxpc3QgaW4gdGhlIHJlbGNhY2hl IGVudHJ5LiAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhD YWNoZU1lbW9yeUNvbnRleHQpOworCW9sZGxpc3QgPSByZWxhdGlvbi0+cmRf bXZzdGF0bGlzdDsKKwlyZWxhdGlvbi0+cmRfbXZzdGF0bGlzdCA9IGxpc3Rf Y29weShyZXN1bHQpOworCisJcmVsYXRpb24tPnJkX212c3RhdHZhbGlkID0g dHJ1ZTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCS8q IERvbid0IGxlYWsgdGhlIG9sZCBsaXN0LCBpZiB0aGVyZSBpcyBvbmUgKi8K KwlsaXN0X2ZyZWUob2xkbGlzdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CiAvKgogICogaW5zZXJ0X29yZGVyZWRfb2lkCiAgKgkJSW5zZXJ0IGEgbmV3 IE9pZCBpbnRvIGEgc29ydGVkIGxpc3Qgb2YgT2lkcywgcHJlc2VydmluZyBv cmRlcmluZwpAQCAtNDkyMCw2ICs0OTc3LDggQEAgbG9hZF9yZWxjYWNoZV9p bml0X2ZpbGUoYm9vbCBzaGFyZWQpCiAJCXJlbC0+cmRfaW5kZXhhdHRyID0g TlVMTDsKIAkJcmVsLT5yZF9rZXlhdHRyID0gTlVMTDsKIAkJcmVsLT5yZF9p ZGF0dHIgPSBOVUxMOworCQlyZWwtPnJkX212c3RhdHZhbGlkID0gZmFsc2U7 CisJCXJlbC0+cmRfbXZzdGF0bGlzdCA9IE5JTDsKIAkJcmVsLT5yZF9jcmVh dGVTdWJpZCA9IEludmFsaWRTdWJUcmFuc2FjdGlvbklkOwogCQlyZWwtPnJk X25ld1JlbGZpbGVub2RlU3ViaWQgPSBJbnZhbGlkU3ViVHJhbnNhY3Rpb25J ZDsKIAkJcmVsLT5yZF9hbWNhY2hlID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3N5c2NhY2hlLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9zeXNjYWNoZS5jCmluZGV4IDY1ZmZlODQuLjNjMWJj NGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3N5c2Nh Y2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3lzY2FjaGUu YwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9y ZWlnbl9zZXJ2ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25f dGFibGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfb3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3Iu aCIKQEAgLTUwMiw2ICs1MDMsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBj YWNoZWRlc2MgY2FjaGVpbmZvW10gPSB7CiAJCX0sCiAJCTQKIAl9LAorCXtN dlN0YXRpc3RpY1JlbGF0aW9uSWQsCQkvKiBNVlNUQVROQU1FTlNQICovCisJ CU12U3RhdGlzdGljTmFtZUluZGV4SWQsCisJCTIsCisJCXsKKwkJCUFudW1f cGdfbXZfc3RhdGlzdGljX3N0YW5hbWUsCisJCQlBbnVtX3BnX212X3N0YXRp c3RpY19zdGFuYW1lc3BhY2UsCisJCQkwLAorCQkJMAorCQl9LAorCQk0CisJ fSwKKwl7TXZTdGF0aXN0aWNSZWxhdGlvbklkLAkJLyogTVZTVEFUT0lEICov CisJCU12U3RhdGlzdGljT2lkSW5kZXhJZCwKKwkJMSwKKwkJeworCQkJT2Jq ZWN0SWRBdHRyaWJ1dGVOdW1iZXIsCisJCQkwLAorCQkJMCwKKwkJCTAKKwkJ fSwKKwkJNAorCX0sCiAJe05hbWVzcGFjZVJlbGF0aW9uSWQsCQkvKiBOQU1F U1BBQ0VOQU1FICovCiAJCU5hbWVzcGFjZU5hbWVJbmRleElkLAogCQkxLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5ZjFlZAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZp bGUKQEAgLTAsMCArMSwxNyBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyMKKyMgTWFrZWZpbGUtLQorIyAgICBNYWtlZmlsZSBmb3IgdXRp bHMvbXZzdGF0cworIworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCitzdWJkaXIgPSBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAorCitPQkpT ID0gY29tbW9uLm8gZGVwZW5kZW5jaWVzLm8KKworaW5jbHVkZSAkKHRvcF9z cmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5jaWVzIGIv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5jaWVz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTZmYmMK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L1JFQURNRS5kZXBlbmRlbmNpZXMKQEAgLTAsMCArMSwyMjIgQEAKK1NvZnQg ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKKz09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKworQSB0eXBlIG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNz IHVzZWQgdG8gY2FwdHVyZSBjYXNlcyB3aGVuIG9uZSBjb2x1bW4gKG9yCitw b3NzaWJseSBhIGNvbWJpbmF0aW9uIG9mIGNvbHVtbnMpIGRldGVybWluZXMg dmFsdWVzIGluIGFub3RoZXIgY29sdW1uLiBXZSBtYXkKK2Fsc28gc2F5IHRo YXQgb25lIGNvbHVtbiBpbXBsaWVzIHRoZSBvdGhlciBvbmUuCisKK0Egc2lt cGxlIGFydGlmaWNpYWwgZXhhbXBsZSBtYXkgYmUgYSB0YWJsZSB3aXRoIHR3 byBjb2x1bW5zLCBjcmVhdGVkIGxpa2UgdGhpcworCisgICAgQ1JFQVRFIFRB QkxFIHQgKGEgSU5ULCBiIElOVCkKKyAgICAgICAgQVMgU0VMRUNUIGksIGkv MTAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIHMoaSk7CisKK0Ns ZWFybHksIG9uY2Ugd2Uga25vdyB0aGUgdmFsdWUgZm9yIGNvbHVtbiAnYScg dGhlIHZhbHVlIGZvciAnYicgaXMgdHJpdmlhbGx5CitkZXRlcm1pbmVkLCBh cyBpdCdzIHNpbXBseSAoYS8xMCkuIEEgbW9yZSBwcmFjdGljYWwgZXhhbXBs ZSBtYXkgYmUgYWRkcmVzc2VzLAord2hlcmUgKFpJUCBjb2RlIC0+IGNpdHkg bmFtZSksIGkuZS4gb25jZSB3ZSBrbm93IHRoZSBaSVAsIHdlIHByb2JhYmx5 IGtub3cgdGhlCitjaXR5IGl0IGJlbG9uZ3MgdG8sIGFzIFpJUCBjb2RlcyBh cmUgdXN1YWxseSBhc3NpZ25lZCB0byBvbmUgY2l0eS4gTGFyZ2VyIGNpdGll cworbWF5IGhhdmUgbXVsdGlwbGUgWklQIGNvZGVzLCBzbyB0aGUgZGVwZW5k ZW5jeSBjYW4ndCBiZSByZXZlcnNlZC4KKworRnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgYXJlIGEgY29uY2VwdCB3ZWxsIGRlc2NyaWJlZCBpbiByZWxhdGlv bmFsIHRoZW9yeSwKK3BhcnRpY3VsYXJseSBpbiBkZWZpbml0aW9uIG9mIG5v cm1hbGl6YXRpb24gYW5kICJub3JtYWwgZm9ybXMiLiBXaWtpcGVkaWEgaGFz IGEKK25pY2UgZGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uYWwgZGVwZW5kZW5j eSBbMV06CisKKyAgICBJbiBhIGdpdmVuIHRhYmxlLCBhbiBhdHRyaWJ1dGUg WSBpcyBzYWlkIHRvIGhhdmUgYSBmdW5jdGlvbmFsIGRlcGVuZGVuY3kgb24K KyAgICBhIHNldCBvZiBhdHRyaWJ1dGVzIFggKHdyaXR0ZW4gWCAtPiBZKSBp ZiBhbmQgb25seSBpZiBlYWNoIFggdmFsdWUgaXMKKyAgICBhc3NvY2lhdGVk IHdpdGggcHJlY2lzZWx5IG9uZSBZIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW4g YW4gIkVtcGxveWVlIiB0YWJsZQorICAgIHRoYXQgaW5jbHVkZXMgdGhlIGF0 dHJpYnV0ZXMgIkVtcGxveWVlIElEIiBhbmQgIkVtcGxveWVlIERhdGUgb2Yg QmlydGgiLCB0aGUKKyAgICBmdW5jdGlvbmFsIGRlcGVuZGVuY3kge0VtcGxv eWVlIElEfSAtPiB7RW1wbG95ZWUgRGF0ZSBvZiBCaXJ0aH0gd291bGQgaG9s ZC4KKyAgICBJdCBmb2xsb3dzIGZyb20gdGhlIHByZXZpb3VzIHR3byBzZW50 ZW5jZXMgdGhhdCBlYWNoIHtFbXBsb3llZSBJRH0gaXMKKyAgICBhc3NvY2lh dGVkIHdpdGggcHJlY2lzZWx5IG9uZSB7RW1wbG95ZWUgRGF0ZSBvZiBCaXJ0 aH0uCisKKyAgICBbMV0gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9E YXRhYmFzZV9ub3JtYWxpemF0aW9uCisKK01hbnkgZGF0YXNldHMgbWlnaHQg YmUgbm9ybWFsaXplZCBub3QgdG8gY29udGFpbiBzdWNoIGRlcGVuZGVuY2ll cywgYnV0IG9mdGVuCitpdCdzIG5vdCBwcmFjdGljYWwgZm9yIHZhcmlvdXMg cmVhc29ucy4gSW4gc29tZSBjYXNlcyBpdCdzIGFjdHVhbGx5IGEgY29uc2Np b3VzCitkZXNpZ24gY2hvaWNlIHRvIG1vZGVsIHRoZSBkYXRhc2V0IGluIGRl bm9ybWFsaXplZCB3YXksIGVpdGhlciBiZWNhdXNlIG9mCitwZXJmb3JtYW5j ZSBvciB0byBtYWtlIHF1ZXJ5aW5nIGVhc2llci4KKworVGhlIGZ1bmN0aW9u YWwgZGVwZW5kZW5jaWVzIGFyZSBjYWxsZWQgJ3NvZnQnIGJlY2F1c2UgdGhl IGltcGxlbWVudGF0aW9uIGlzCittZWFudCB0byBhbGxvdyBzbWFsbCBudW1i ZXIgb2Ygcm93cyBjb250cmFkaWN0aW5nIHRoZSBkZXBlbmRlbmN5LiBNYW55 IGFjdHVhbAorZGF0YSBzZXRzIGNvbnRhaW4gc29tZSBzb3J0IG9mIGVycm9y cywgZWl0aGVyIGJlY2F1c2Ugb2YgZGF0YSBlbnRyeSBtaXN0YWtlcworKHVz ZXIgbWlzdHlwaW5nIHRoZSBaSVAgY29kZSkgb3IgaXNzdWVzIGluIGdlbmVy YXRpbmcgdGhlIGRhdGEgKGUuZy4gYSBaSVAgY29kZQorbWlzdGFrZW5seSBh c3NpZ25lZCB0byB0d28gY2l0aWVzIGluIGRpZmZlcmVudCBzdGF0ZXMpLiBB IHN0cmljdCBpbXBsZW1lbnRhdGlvbgord291bGQgaWdub3JlIGRlcGVuZGVu Y2llcyBvbiBzdWNoIG5vaXN5IGRhdGEsIHJlbmRlcmluZyB0aGUgYXBwcm9h Y2ggdW51c2FibGUgb24KK3N1Y2ggZGF0YSBzZXRzLgorCisKK01pbmluZyBk ZXBlbmRlbmNpZXMgKEFOQUxZWkUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCitUaGUgY3VycmVudCBidWlsZCBhbGdvcml0aG0gaXMgcmF0 aGVyIHNpbXBsZSAtIGZvciBlYWNoIHBhaXIgKGEsYikgb2YgY29sdW1ucywK K3RoZSBkYXRhIGFyZSBzb3J0ZWQgbGV4aWNvZ3JhcGhpY2FsbHkgKGZpcnN0 IGJ5ICdhJywgdGhlbiBieSAnYicpLiBUaGVuIGZvciBlYWNoCitncm91cCAo cm93cyB3aXRoIHRoZSBzYW1lICdhJyB2YWx1ZSkgd2UgZGVjaWRlIHdoZXRo ZXIgdGhlIGdyb3VwIGlzIG5ldXRyYWwsCitzdXBwb3J0aW5nIG9yIGNvbnRy YWRpY3RpbmcgdGhlIGRlcGVuZGVuY3kgKGEtPmIpLgorCitBIGdyb3VwIGlz IGNvbnNpZGVyZWQgbmV1dHJhbCB3aGVuIGl0J3MgdG9vIHNtYWxsIC0gZS5n LiB3aGVuIHRoZXJlJ3MgYSBzaW5nbGUKK3JvdyBpbiB0aGUgZ3JvdXAsIHRo ZXJlIGNhbid0IHBvc3NpYmx5IGJlIG11bHRpcGxlIHZhbHVlcyBpbiAnYicu IEZvciB0aGlzCityZWFzb24gd2UgaWdub3JlIGdyb3VwcyBzbWFsbGVyIHRo YW4gYSB0aHJlc2hvbGQgKGN1cnJlbnRseSAzIHJvd3MpLgorCitGb3Igc3Vm ZmljaWVudGx5IGxhcmdlIGdyb3VwcyAoMyByb3dzIG9yIG1vcmUpLCB3ZSBj b3VudCB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0Cit2YWx1ZXMgaW4gJ2InLiBX aGVuIHRoZXJlJ3MgYSBzaW5nbGUgJ2InIHZhbHVlLCB0aGUgZ3JvdXAgaXMg Y29uc2lkZXJlZCB0bworc3VwcG9ydCB0aGUgZGVwZW5kZW5jeSAoYS0+Yiks IG90aGVyd2lzZSBpdCdzIGNvbmRpZGVyZWQgYXMgY29udHJhZGljdGluZyBp dC4KKworQXQgdGhlIGVuZCwgd2UgY29tcGFyZSB0aGUgbnVtYmVyIG9mIHJv d3MgaW4gc3VwcG9ydGluZyBhbmQgY29udHJhZGljdGluZyBncm91cHMsCith bmQgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IDEweCBhcyBtYW55IHN1cHBvcnRp bmcgcm93cywgd2UgY29uc2lkZXIgdGhlCitmdW5jdGlvbmFsIGRlcGVuZGVu Y3kgdG8gYmUgdmFsaWQuCisKKworVGhpcyBhcHByb2FjaCBoYXMgdGhlIG5l Z2F0aXZlIHByb3BlcnR5IHRoYXQgdGhlIGFsZ29yaXRobSBpcyB0aGF0IGl0 J3MgYSBiaXQKK2ZyYWdpbGUgd2l0aCByZXNwZWN0IHRvIHRoZSBzYW1wbGUg LSB0aGVyZSBtYXkgYmUgZGF0YSBzZXRzIHByb2R1Y2luZyBxdWl0ZQorZGlm ZmVyZW50IHJlc3VsdHMgZm9yIGVhY2ggQU5BTFlaRSBleGVjdXRpb24gKGFz IGV2ZW4gYSBzaW5nbGUgcm93IG1heSBjaGFuZ2UKK3RoZSBvdXRjb21lIG9m IHRoZSBmaW5hbCAxMHggdGVzdCkuCisKK0l0IHdhcyBwcm9wb3NlZCB0byBt YWtlIHRoZSBkZXBlbmRlbmNpZXMgImZ1enp5IiAtIGUuZy4gdHJhY2sgc29t ZSBjb2VmZmljaWVudAorYmV0d2VlbiBbMCwxXSBkZXRlcm1pbmluZyBob3cg bXVjaCB0aGUgZGVwZW5kZW5jeSBob2xkcy4gVGhhdCB3b3VsZCBob3dldmVy IG1lYW4KK3dlIGhhdmUgdG8ga2VlcCBhbGwgdGhlIGRlcGVuZGVuY2llcywg YXMgZWxpbWluYXRpbmcgdGhlbSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YKK3Ro ZSBjb2VmZmljaWVudCAoZS5nLiB0aHJvdyBhd2F5IGRlcGVuZGVuY2llcyA8 PSAwLjUpIHdvdWxkIHJlc3VsdCBpbiBleGFjdGx5Cit0aGUgc2FtZSBmcmFn aWxpdHkgaXNzdWVzLiBUaGlzIHdvdWxkIGFsc28gbWFrZSBpdCBtb3JlIGNv bXBsaWNhdGVkIHRvIGNvbWJpbmUKK2RlcGVuZGVuY2llcy4gU28gdGhpcyBk b2VzIG5vdCBzZWVtIGxpa2UgYSBwcmFjdGljYWwgYXBwcm9hY2guCisKK0Eg YmV0dGVyIGFwcHJvYWNoIG1pZ2h0IGJlIHRvIHJlcGxhY2UgdGhlIGNvbnN0 YW50cyAobWluX2dyb3VwX3NpemU9MyBhbmQgMTB4KQord2l0aCB2YWx1ZXMg c29tZWhvdyByZWxhdGVkIHRvIHRoZSBwYXJ0aWN1bGFyIGRhdGEgc2V0Lgor CisKK0NsYXVzZSByZWR1Y3Rpb24gKHBsYW5uZXIvb3B0aW1pemVyKQorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FwbGx5aW5n IHRoZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBpcyBxdWl0ZSBzaW1wbGUg LSBnaXZlbiBhIGxpc3Qgb2YgZXF1YWxpdHkKK2NsYXVzZXMsIGNoZWNrIHdo aWNoIGNsYXVzZXMgYXJlIHJlZHVuZGFudCAoaS5lLiBpbXBsaWVkIGJ5IHNv bWUgb3RoZXIgY2xhdXNlKS4KK0ZvciBleGFtcGxlIGdpdmVuIGNsYXVzZSBs aXN0CisKKyAgICAoYSA9IDIpIEFORCAoYiA9IDIpIEFORCAoYyA9IDMpCisK K2FuZCBkZXBlbmRlbmNpZXMgKGEtPmIpIGFuZCAoYS0+ZCksIHRoZSBsaXN0 IG9mIGNsYXVzZXMgbWF5IGJlIHNpbXBsaWZpZWQgdG8KKworICAgIChhID0g MSkgQU5EIChjID0gMykKKworRnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgbWF5 IG9ubHkgYmUgYXBwbGllZCB0byBlcXVhbGl0eSBjbGF1c2VzLCBhbGwgb3Ro ZXIgdHlwZXMKK29mIGNsYXVzZXMgYXJlIGlnbm9yZWQuIFNlZSBjbGF1c2Vs aXN0X2FwcGx5X2RlcGVuZGVuY2llcygpIGZvciBtb3JlIGRldGFpbHMuCisK KworQ29tcGF0aWJpbGl0eSBvZiBjbGF1c2VzCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworVGhlIHJlZHVjdGlvbiBhc3N1bWVzIHRoZSBjbGF1c2Vz IHJlYWxseSBhcmUgcmVkdW5kYW50LCBhbmQgdGhlIHZhbHVlIGluIHRoZQor cmVkdWNlZCBjbGF1c2UgKGI9MikgaXMgdGhlIHZhbHVlIGRldGVybWluZWQg YnkgKGE9MSkuIElmIHRoYXQncyBub3QgdGhlIGNhc2UKK2FuZCB0aGUgdmFs dWVzIGFyZSAiaW5jb21wYXRpYmxlIiB0aGUgcmVzdWx0IHdpbGwgYmUgb3Zl ci1lc3RpbWF0aW9uLgorCitUaGlzIG1heSBoYXBwZW4gZm9yIGV4YW1wbGUg d2hlbiB1c2luZyBjb25kaXRpb25zIG9uIFpJUCBhbmQgY2l0eSBuYW1lIHdp dGgKK21pc21hdGNoaW5nIHZhbHVlcyAoWklQIGZvciBhIGRpZmZlcmVudCBj aXR5KSwgZXRjLiBJbiBzdWNoIGNhc2UgdGhlIHJlc3VsdAorc2V0IHdpbGwg YmUgZW1wdHksIGJ1dCB3ZSdsbCBlc3RpbWF0ZSB0aGUgc2VsZWN0aXZpdHkg dXNpbmcgdGhlIFpJUCBjb25kaXRpb24uCisKK0luIHRoaXMgY2FzZSB0aGUg ZGVmYXVsdCBlc3RpbWF0aW9uIGJhc2VkIG9uIEFWSUEgcHJpbmNpcGxlIGhh cHBlbnMgdG8gd29yaworYmV0dGVyLCBidXQgbW9zdGx5IGJ5IGNoYW5jZS4K KworCitEZXBlbmRlbmNpZXMgdnMuIE1DVi9oaXN0b2dyYW0KKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBzb21lIGNhc2VzIHRoZSAi Y29tcGF0aWJpbGl0eSIgb2YgdGhlIGNvbmRpdGlvbnMgbWlnaHQgYmUgdmVy aWZpZWQgdXNpbmcgdGhlCitvdGhlciB0eXBlcyBvZiBtdWx0aXZhcmlhdGUg c3RhdHMgLSBNQ1YgbGlzdHMgYW5kIGhpc3RvZ3JhbXMuCisKK0ZvciBNQ1Yg bGlzdHMgdGhlIHZlcmlmaWNhdGlvbiBtaWdodCBiZSB2ZXJ5IHNpbXBsZSAt IHBlZWsgaW50byB0aGUgbGlzdCBpZgordGhlcmUgYXJlIGFueSBpdGVtcyBt YXRjaGluZyB0aGUgY2xhdXNlIG9uIHRoZSAnYScgY29sdW1uIChlLmcuIFpJ UCBjb2RlKSwgYW5kCitpZiBzdWNoIGl0ZW0gaXMgZm91bmQsIGNoZWNrIHRo YXQgdGhlICdiJyBjb2x1bW4gbWF0Y2hlcyB0aGUgb3RoZXIgY2xhdXNlLiBJ ZiBpdAorZG9lcyBub3QsIHRoZSBjbGF1c2VzIGFyZSBjb250cmFkaWN0b3J5 LiBXZSBjYW4ndCByZWFsbHkgc2F5IGlmIHN1Y2ggaXRlbSB3YXMKK25vdCBm b3VuZCwgZXhjZXB0IG1heWJlIHJlc3RyaWN0aW5nIHRoZSBzZWxlY3Rpdml0 eSB1c2luZyB0aGUgTUNWIGRhdGEgKGUuZy4KK3VzaW5nIG1pbi9tYXggc2Vs ZWN0aXZpdHksIG9yIHNvbWV0aGluZykuCisKK1dpdGggaGlzdG9ncmFtcywg aXQgbWlnaHQgd29yayBzaW1pbGFybHkgLSB3ZSBjYW4ndCBjaGVjayB0aGUg dmFsdWVzIGRpcmVjdGx5CisoYmVjYXVzZSBoaXN0b2dyYW1zIHVzZSBidWNr ZXRzLCB1bmxpa2UgTUNWIGxpc3RzLCBzdG9yaW5nIHRoZSBhY3R1YWwgdmFs dWVzKS4KK1NvIHdlIGNhbiBvbmx5IG9ic2VydmUgdGhlIGJ1Y2tldHMgbWF0 Y2hpbmcgdGhlIGNsYXVzZXMgLSBpZiB0aG9zZSBidWNrZXRzIGhhdmUKK3Zl cnkgbG93IGZyZXF1ZW5jeSwgaXQgcHJvYmFibHkgbWVhbnMgdGhlIHR3byBj bGF1c2VzIGFyZSBpbmNvbXBhdGlibGUuCisKK0l0J3MgdW5jbGVhciB3aGF0 ICdsb3cgZnJlcXVlbmN5JyBpcywgYnV0IGlmIG9uZSBvZiB0aGUgY2xhdXNl cyBpcyBpbXBsaWVkCisoYXV0b21hdGljYWxseSB0cnVlIGJlY2F1c2Ugb2Yg dGhlIG90aGVyIGNsYXVzZSksIHRoZW4KKworICAgIHNlbGVjdGl2aXR5W2Ns YXVzZShBKV0gPSBzZWxlY3Rpdml0eVtjbGF1c2UoQSkgJiBjbGF1c2UoQild CisKK1NvIHdlIG1pZ2h0IGNvbXB1dGUgc2VsZWN0aXZpdHkgb2YgdGhlIGZp cnN0IGNsYXVzZSAtIGZvciBleGFtcGxlIHVzaW5nIHJlZ3VsYXIKK3N0YXRp c3RpY3MuIEFuZCB0aGVuIGNoZWNrIGlmIHRoZSBzZWxlY3Rpdml0eSBjb21w dXRlZCBmcm9tIHRoZSBoaXN0b2dyYW0gaXMKK2Fib3V0IHRoZSBzYW1lIChv ciBzaWduaWZpY2FudGx5IGxvd2VyKS4KKworVGhlIHByb2JsZW0gaXMgdGhh dCBoaXN0b2dyYW1zIHdvcmsgd2VsbCBvbmx5IHdoZW4gdGhlIGRhdGEgb3Jk ZXJpbmcgbWF0Y2hlcyB0aGUKK25hdHVyYWwgbWVhbmluZy4gRm9yIHZhbHVl cyB0aGF0IHNlcnZlIGFzIGxhYmVscyAtIGxpa2UgY2l0eSBuYW1lcyBvciBa SVAgY29kZXMsCitvciBldmVuIGdlbmVyYXRlZCBJRHMsIGhpc3RvZ3JhbXMg cmVhbGx5IGRvbid0IHdvcmsgYWxsIHRoYXQgd2VsbC4gRm9yIGV4YW1wbGUK K3NvcnRpbmcgY2l0aWVzIGJ5IG5hbWUgd29uJ3QgbWF0Y2ggdGhlIHNvcnRp bmcgb2YgWklQIGNvZGVzLCByZW5kZXJpbmcgdGhlCitoaXN0b2dyYW0gdW51 c2FibGUuCisKK1NvIE1DVnMgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHdvcmsg bXVjaCBiZXR0ZXIsIGJlY2F1c2UgdGhleSBkb24ndCByZWFsbHkgYXNzdW1l Cithbnkgc29ydCBvZiBvcmRlcmluZy4gQW5kIGl0J3MgcHJvYmFibHkgbW9y ZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGxhYmVsLWxpa2UgZGF0YS4KKworQSBn b29kIHF1ZXN0aW9uIGhvd2V2ZXIgaXMgd2h5IGV2ZW4gdXNlIGZ1bmN0aW9u YWwgZGVwZW5kZW5jaWVzIGluIHN1Y2ggY2FzZXMKK2FuZCBub3Qgc2ltcGx5 IHVzZSB0aGUgTUNWL2hpc3RvZ3JhbSBpbnN0ZWFkLiBPbmUgcmVhc29uIGlz IHRoYXQgdGhlIGZ1bmN0aW9uYWwKK2RlcGVuZGVuY2llcyBhbGxvdyBmYWxs YmFjayB0byByZWd1bGFyIHN0YXRzLCBhbmQgb2Z0ZW4gcHJvZHVjZSBtb3Jl IGFjY3VyYXRlCitlc3RpbWF0ZXMgLSBlc3BlY2lhbGx5IGNvbXBhcmVkIHRv IGhpc3RvZ3JhbXMsIHRoYXQgYXJlIHF1aXRlIGJhZCBpbiBlc3RpbWF0aW5n CitlcXVhbGl0eSBjbGF1c2VzLgorCisKK0xpbWl0YXRpb25zCistLS0tLS0t LS0tLQorCitMZXQncyBzZWUgdGhlIG1haW4gbGltaW5hdGlvbnMgb2YgZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMsIGVzcGVjaWFsbHkgdGhvc2UKK3JlbGF0 ZWQgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCisKK1RoZSBjdXJy ZW50IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgZGVwZW5kZW5jaWVz IGJldHdlZW4gdHdvIGNvbHVtbnMsIGJ1dAordGhpcyBpcyBtZXJlbHkgYSBz aW1wbGlmaWNhdGlvbiBvZiB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4g SXQncyBjZXJ0YWlubHkKK3VzZWZ1bCB0byBtaW5lIGZvciBkZXBlbmRlbmNp ZXMgaW52b2x2aW5nIG11bHRpcGxlIGNvbHVtbnMgb24gdGhlICdsZWZ0JyBz aWRlLAoraS5lLiBhIGNvbmRpdGlvbiBmb3IgdGhlIGRlcGVuZGVuY3kuIFRo YXQgaXMgZGVwZW5kZW5jaWVzIGxpa2UgKGEsYiAtPiBjKS4KKworVGhlIGlt cGxlbWVudGF0aW9uIG1heS9zaG91bGQgYmUgc21hcnQgZW5vdWdoIG5vdCB0 byBtaW5lIHJlZHVuZGFudCBjb25kaXRpb25zLAorZS5nLiAoYS0+YikgYW5k IChhLGMgLT4gYiksIGJlY2F1c2UgdGhlIGxhdHRlciBpcyBhIHRyaXZpYWwg Y29uc2VxdWVuY2Ugb2YgdGhlCitmb3JtZXIgb25lIChpZiB2YWx1ZXMgb2Yg J2EnIGRldGVybWluZSAnYicsIGFkZGluZyBhbm90aGVyIGNvbHVtbiB3b24n dCBjaGFuZ2UKK3RoYXQgcmVsYXRpb25zaGlwKS4gVGhlIEFOQUxZWkUgc2hv dWxkIGZpcnN0IGFuYWx5emUgMToxIGRlcGVuZGVuY2llcywgdGhlbiAyOjEK K2RlcGVuZGVuY2llcyAoYW5kIHNraXAgdGhlIGFscmVhZHkgaWRlbnRpZmll ZCBvbmVzKSwgZXRjLgorCitGb3IgZXhhbXBsZSB0aGUgZGVwZW5kZW5jeQor CisgICAgKGNpdHkgbmFtZSAtPiB6aXAgY29kZSkKKworaXMgbXVjaCBzdHJv bmdlciwgaS5lLiB3aGVuZXZlciBpdCBob2xkLCB0aGVuCisKKyAgICAoY2l0 eSBuYW1lLCBzdGF0ZSBuYW1lIC0+IHppcCBjb2RlKQorCitob2xkcyB0b28u IEJ1dCBpbiBjYXNlIHRoZXJlIGFyZSBjaXRpZXMgd2l0aCB0aGUgc2FtZSBu YW1lIGluIGRpZmZlcmVudCBzdGF0ZXMsCit0aGVuIG9ubHkgdGhlIGxhdHRl ciBkZXBlbmRlbmN5IHdpbGwgYmUgdmFsaWQuCisKK09mIGNvdXJzZSwgdGhl cmUgcHJvYmFibHkgYXJlIGNpdGllcyB3aXRoIHRoZSBzYW1lIG5hbWUgd2l0 aGluIGEgc2luZ2xlIHN0YXRlLAorYnV0IGhvcGVmdWxseSB0aGlzIGlzIHJl bGF0aXZlbHkgcmFyZSBvY2N1cmVuY2UgKGFuZCB0aHVzIHdlJ2xsIHN0aWxs IGRldGVjdAordGhlICdzb2Z0JyBkZXBlbmRlbmN5KS4KKworSGFuZGxpbmcg bXVsdGlwbGUgY29sdW1ucyBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZGVw ZW5kZW5jeSwgaXMgbm90IG5lY2Vzc2FyeSwKK2FzIHRob3NlIGRlcGVuZGVu Y2llcyBtYXkgYmUgc2ltcGx5IGRlY29tcG9zZWQgaW50byBhIHNldCBvZiBk ZXBlbmRlbmNpZXMgd2l0aAordGhlIHNhbWUgbWVhbmluZywgb25lIGZvciBl YWNoIGNvbHVtbiBvbiB0aGUgcmlnaHQgc2lkZS4gRm9yIGV4YW1wbGUKKwor ICAgIChhIC0+IGIsYykKKworaXMgZXhhY3RseSB0aGUgc2FtZSBhcworCisg ICAgKGEgLT4gYikgJiAoYSAtPiBjKQorCitPZiBjb3Vyc2UsIHN0b3Jpbmcg dGhlIGZpcnN0IGZvcm0gbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRoYW50IHN0 b3JpbmcgbXVsdGlwbGUKKydzaW1wbGUnIGRlcGVuZGVuY2llcyBzZXBhcmF0 ZWx5LgorCisKK1RPRE8gU3VwcG9ydCBkZXBlbmRlbmNpZXMgd2l0aCBtdWx0 aXBsZSBjb2x1bW5zIG9uIGxlZnQvcmlnaHQuCisKK1RPRE8gSW52ZXN0aWdh dGUgdXNpbmcgaGlzdG9ncmFtIGFuZCBNQ1YgbGlzdCB0byB2ZXJpZnkgdGhl IGRlcGVuZGVuY2llcy4KKworVE9ETyBJbnZlc3RpZ2F0ZSBzdGF0aXN0aWNh bCB0ZXN0aW5nIG9mIHRoZSBkaXN0cmlidXRpb24gKHRvIGRlY2lkZSB3aGV0 aGVyIGl0CisgICAgIG1ha2VzIHNlbnNlIHRvIGJ1aWxkIHRoZSBoaXN0b2dy YW0vTUNWIGxpc3QpLgorCitUT0RPIFVzaW5nIGEgbWluL21heCBvZiBzZWxl Y3Rpdml0aWVzIHdvdWxkIHByb2JhYmx5IG1ha2UgbW9yZSBzZW5zZSBmb3Ig dGhlCisgICAgIGFzc29jaWF0ZWQgY29sdW1ucy4KKworVE9ETyBDb25zaWRl ciBlbGltaW5hdGluZyB0aGUgaW1wbGllZCBjb2x1bW5zIGZyb20gdGhlIGhp c3RvZ3JhbSBhbmQgTUNWIGxpc3RzCisgICAgIChidXQgbWF5YmUgdGhhdCdz IG5vdCBhIGdvb2QgaWRlYSwgYmVjYXVzZSB0aGF0J2QgbWFrZSBpdCBpbXBv c3NpYmxlIHRvIHVzZQorICAgICB0aGVzZSBzdGF0cyBmb3Igbm9uLWVxdWFs aXR5IGNsYXVzZXMgYW5kIGFsc28gaXQgd291bGRuJ3QgYmUgcG9zc2libGUg dG8KKyAgICAgdXNlIHRoZSBzdGF0cyBmb3IgdmVyaWZpY2F0aW9uIG9mIHRo ZSBkZXBlbmRlbmNpZXMpLgorCitUT0RPIFRoZSByZWR1Y3Rpb24gcHJvYmFi bHkgbWlnaHQgYmUgZXh0ZW5kZWQgdG8gYWxzbyBoYW5kbGUgSVMgTlVMTCBj bGF1c2VzLAorICAgICBhc3N1bWluZyB3ZSBmaXggdGhlIEFOQUxZWkUgdG8g cHJvcGVybHkgaGFuZGxlIE5VTEwgdmFsdWVzLiBXZSBob3dldmVyCisgICAg IHdvbid0IGJlIGFibGUgdG8gcmVkdWNlIElTIE5PVCBOVUxMICh1bmxlc3Mg SSdtIG1pc3Npbmcgc29tZXRoaW5nKS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmE3NTVjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCkBAIC0wLDAgKzEsMzU2IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21t b24uYworICoJICBQT1NUR1JFUyBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcwor ICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5j bHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBWYWNBdHRyU3RhdHMgKiogbG9v a3VwX3Zhcl9hdHRyX3N0YXRzKGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJ CQkJICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7 CisKK3N0YXRpYyBMaXN0KiBsaXN0X212X3N0YXRzKE9pZCByZWxpZCk7CisK KworLyoKKyAqIENvbXB1dGUgcmVxdWVzdGVkIG11bHRpdmFyaWF0ZSBzdGF0 cywgdXNpbmcgdGhlIHJvd3Mgc2FtcGxlZCBmb3IgdGhlCisgKiBwbGFpbiAo c2luZ2xlLWNvbHVtbikgc3RhdHMuCisgKgorICogVGhpcyBmZXRjaGVzIGEg bGlzdCBvZiBzdGF0cyBmcm9tIHBnX212X3N0YXRpc3RpYywgY29tcHV0ZXMg dGhlIHN0YXRzCisgKiBhbmQgc2VyaWFsaXplcyB0aGVtIGJhY2sgaW50byB0 aGUgY2F0YWxvZyAoYXMgYnl0ZWEgdmFsdWVzKS4KKyAqLwordm9pZAorYnVp bGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVh cFR1cGxlICpyb3dzLAorCQkJICAgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMg Kip2YWNhdHRyc3RhdHMpCit7CisJTGlzdENlbGwgKmxjOworCUxpc3QgKm12 c3RhdHM7CisKKwlUdXBsZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3Iob25lcmVsKTsKKworCS8qCisJICogRmV0Y2ggZGVmaW5lZCBNViBncm91 cHMgZnJvbSBwZ19tdl9zdGF0aXN0aWMsIGFuZCB0aGVuIGNvbXB1dGUKKwkg KiB0aGUgTVYgc3RhdGlzdGljcyAoaGlzdG9ncmFtcyBmb3Igbm93KS4KKwkg Ki8KKwltdnN0YXRzID0gbGlzdF9tdl9zdGF0cyhSZWxhdGlvbkdldFJlbGlk KG9uZXJlbCkpOworCisJZm9yZWFjaCAobGMsIG12c3RhdHMpCisJeworCQlp bnQJCQkJajsKKwkJTVZTdGF0aXN0aWNJbmZvICpzdGF0ID0gKE1WU3RhdGlz dGljSW5mbyAqKWxmaXJzdChsYyk7CisJCU1WRGVwZW5kZW5jaWVzCWRlcHMg ID0gTlVMTDsKKworCQlWYWNBdHRyU3RhdHMgICoqc3RhdHMgID0gTlVMTDsK KwkJaW50CQkJCW51bWF0dHMgICA9IDA7CisKKwkJLyogaW50MiB2ZWN0b3Ig b2YgYXR0bnVtcyB0aGUgc3RhdHMgc2hvdWxkIGJlIGNvbXB1dGVkIG9uICov CisJCWludDJ2ZWN0b3IgKiBhdHRycyA9IHN0YXQtPnN0YWtleXM7CisKKwkJ Lyogc2VlIGhvdyBtYW55IG9mIHRoZSBjb2x1bW5zIGFyZSBub3QgZHJvcHBl ZCAqLworCQlmb3IgKGogPSAwOyBqIDwgYXR0cnMtPmRpbTE7IGorKykKKwkJ CWlmICghIHR1cGRlc2MtPmF0dHJzW2F0dHJzLT52YWx1ZXNbal0tMV0tPmF0 dGlzZHJvcHBlZCkKKwkJCQludW1hdHRzICs9IDE7CisKKwkJLyogaWYgdGhl cmUgYXJlIGRyb3BwZWQgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBp bnQydmVjdG9yICovCisJCWlmIChudW1hdHRzICE9IGF0dHJzLT5kaW0xKQor CQl7CisJCQlpbnQxNiAqdG1wID0gcGFsbG9jMChudW1hdHRzICogc2l6ZW9m KGludDE2KSk7CisJCQlpbnQgYXR0bnVtID0gMDsKKworCQkJZm9yIChqID0g MDsgaiA8IGF0dHJzLT5kaW0xOyBqKyspCisJCQkJaWYgKCEgdHVwZGVzYy0+ YXR0cnNbYXR0cnMtPnZhbHVlc1tqXS0xXS0+YXR0aXNkcm9wcGVkKQorCQkJ CQl0bXBbYXR0bnVtKytdID0gYXR0cnMtPnZhbHVlc1tqXTsKKworCQkJcGZy ZWUoYXR0cnMpOworCQkJYXR0cnMgPSBidWlsZGludDJ2ZWN0b3IodG1wLCBu dW1hdHRzKTsKKwkJfQorCisJCS8qIGZpbHRlciBvbmx5IHRoZSBpbnRlcmVz dGluZyB2YWNhdHRyc3RhdHMgcmVjb3JkcyAqLworCQlzdGF0cyA9IGxvb2t1 cF92YXJfYXR0cl9zdGF0cyhhdHRycywgbmF0dHMsIHZhY2F0dHJzdGF0cyk7 CisKKwkJLyogY2hlY2sgYWxsb3dlZCBudW1iZXIgb2YgZGltZW5zaW9ucyAq LworCQlBc3NlcnQoKGF0dHJzLT5kaW0xID49IDIpICYmIChhdHRycy0+ZGlt MSA8PSBNVlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisKKwkJLyoKKwkJICog QW5hbHl6ZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBvZiBjb2x1bW5zLgor CQkgKi8KKwkJZGVwcyA9IGJ1aWxkX212X2RlcGVuZGVuY2llcyhudW1yb3dz LCByb3dzLCBhdHRycywgc3RhdHMpOworCisJCS8qIHN0b3JlIHRoZSBoaXN0 b2dyYW0gLyBNQ1YgbGlzdCBpbiB0aGUgY2F0YWxvZyAqLworCQl1cGRhdGVf bXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRlcHMsIGF0dHJzKTsKKwl9Cit9CisK Ky8qCisgKiBMb29rdXAgdGhlIFZhY0F0dHJTdGF0cyBpbmZvIGZvciB0aGUg c2VsZWN0ZWQgY29sdW1ucywgd2l0aCBpbmRleGVzCisgKiBtYXRjaGluZyB0 aGUgYXR0cnMgdmVjdG9yICh0byBtYWtlIGl0IGVhc3kgdG8gd29yayB3aXRo IHdoZW4KKyAqIGNvbXB1dGluZyBtdWx0aXZhcmlhdGUgc3RhdHMpLgorICov CitzdGF0aWMgVmFjQXR0clN0YXRzICoqCitsb29rdXBfdmFyX2F0dHJfc3Rh dHMoaW50MnZlY3RvciAqYXR0cnMsIGludCBuYXR0cywgVmFjQXR0clN0YXRz ICoqdmFjYXR0cnN0YXRzKQoreworCWludCBpLCBqOworCWludCBudW1hdHRy cyA9IGF0dHJzLT5kaW0xOworCVZhY0F0dHJTdGF0cyAqKnN0YXRzID0gKFZh Y0F0dHJTdGF0cyoqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoVmFjQXR0 clN0YXRzKikpOworCisJLyogbG9va3VwIFZhY0F0dHJTdGF0cyBpbmZvIGZv ciB0aGUgcmVxdWVzdGVkIGNvbHVtbnMgKHNhbWUgYXR0bnVtKSAqLworCWZv ciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsKKwkJc3RhdHNbaV0g PSBOVUxMOworCQlmb3IgKGogPSAwOyBqIDwgbmF0dHM7IGorKykKKwkJewor CQkJaWYgKGF0dHJzLT52YWx1ZXNbaV0gPT0gdmFjYXR0cnN0YXRzW2pdLT50 dXBhdHRudW0pCisJCQl7CisJCQkJc3RhdHNbaV0gPSB2YWNhdHRyc3RhdHNb al07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBDaGVj ayB0aGF0IHdlIGZvdW5kIHRoZSBpbmZvLCB0aGF0IHRoZSBhdHRudW0gbWF0 Y2hlcyBhbmQKKwkJICogdGhhdCB0aGVyZSdzIHRoZSByZXF1ZXN0ZWQgJ2x0 JyBvcGVyYXRvciBhbmQgdGhhdCB0aGUgdHlwZQorCQkgKiBpcyAncGFzc2Vk LWJ5LXZhbHVlJy4KKwkJICovCisJCUFzc2VydChzdGF0c1tpXSAhPSBOVUxM KTsKKwkJQXNzZXJ0KHN0YXRzW2ldLT50dXBhdHRudW0gPT0gYXR0cnMtPnZh bHVlc1tpXSk7CisKKwkJLyogRklYTUUgVGhpcyBpcyByYXRoZXIgdWdseSB3 YXkgdG8gY2hlY2sgZm9yICdsdG9wcicgKHdoaWNoCisJCSAqICAgICAgIGlz IGRlZmluZWQgZm9yICdzY2FsYXInIGF0dHJpYnV0ZXMpLgorCQkgKi8KKwkJ QXNzZXJ0KCgoU3RkQW5hbHl6ZURhdGEgKilzdGF0c1tpXS0+ZXh0cmFfZGF0 YSktPmx0b3ByICE9IEludmFsaWRPaWQpOworCX0KKworCXJldHVybiBzdGF0 czsKK30KKworLyoKKyAqIEZldGNoIGxpc3Qgb2YgTVYgc3RhdHMgZGVmaW5l ZCBvbiBhIHRhYmxlLCB3aXRob3V0IHRoZSBhY3R1YWwgZGF0YQorICogZm9y IGhpc3RvZ3JhbXMsIE1DViBsaXN0cyBldGMuCisgKi8KK3N0YXRpYyBMaXN0 KgorbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpCit7CisJUmVsYXRpb24JaW5k cmVsOworCVN5c1NjYW5EZXNjIGluZHNjYW47CisJU2NhbktleURhdGEgc2tl eTsKKwlIZWFwVHVwbGUJaHR1cDsKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7 CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4gcGdfbXZfc3RhdGlzdGljIGZvciBl bnRyaWVzIGhhdmluZyBpbmRyZWxpZCA9IHRoaXMgcmVsLiAqLworCVNjYW5L ZXlJbml0KCZza2V5LAorCQkJCUFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJl bGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJ CQlPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisKKwlpbmRyZWwgPSBoZWFw X29wZW4oTXZTdGF0aXN0aWNSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCWluZHNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5kcmVsLCBNdlN0 YXRpc3RpY1JlbGlkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJIE5VTEwsIDEs ICZza2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGh0dXAgPSBz eXN0YWJsZV9nZXRuZXh0KGluZHNjYW4pKSkKKwl7CisJCU1WU3RhdGlzdGlj SW5mbyAqaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlzdGljSW5mbyk7CisJCUZv cm1fcGdfbXZfc3RhdGlzdGljIHN0YXRzID0gKEZvcm1fcGdfbXZfc3RhdGlz dGljKSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJaW5mby0+bXZvaWQgPSBIZWFw VHVwbGVHZXRPaWQoaHR1cCk7CisJCWluZm8tPnN0YWtleXMgPSBidWlsZGlu dDJ2ZWN0b3Ioc3RhdHMtPnN0YWtleXMudmFsdWVzLCBzdGF0cy0+c3Rha2V5 cy5kaW0xKTsKKwkJaW5mby0+ZGVwc19idWlsdCA9IHN0YXRzLT5kZXBzX2J1 aWx0OworCisJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKKwl9 CisKKwlzeXN0YWJsZV9lbmRzY2FuKGluZHNjYW4pOworCisJaGVhcF9jbG9z ZShpbmRyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBUT0RPIG1heWJl IHNhdmUgdGhlIGxpc3QgaW50byByZWxjYWNoZSwgYXMgaW4gUmVsYXRpb25H ZXRJbmRleExpc3QKKwkgKiAgICAgICh3aGljaCB3YXMgdXNlZCBhcyBhbiBp bnNwaXJhdGlvbiBvZiB0aGlzIG9uZSk/LiAqLworCisJcmV0dXJuIHJlc3Vs dDsKK30KKwordm9pZAordXBkYXRlX212X3N0YXRzKE9pZCBtdm9pZCwgTVZE ZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVjdG9yICphdHRycykK K3sKKwlIZWFwVHVwbGUJc3R1cCwKKwkJCQlvbGR0dXA7CisJRGF0dW0JCXZh bHVlc1tOYXR0c19wZ19tdl9zdGF0aXN0aWNdOworCWJvb2wJCW51bGxzW05h dHRzX3BnX212X3N0YXRpc3RpY107CisJYm9vbAkJcmVwbGFjZXNbTmF0dHNf cGdfbXZfc3RhdGlzdGljXTsKKworCVJlbGF0aW9uCXNkID0gaGVhcF9vcGVu KE12U3RhdGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisK KwltZW1zZXQobnVsbHMsICAgIDEsIE5hdHRzX3BnX212X3N0YXRpc3RpYyAq IHNpemVvZihib29sKSk7CisJbWVtc2V0KHJlcGxhY2VzLCAwLCBOYXR0c19w Z19tdl9zdGF0aXN0aWMgKiBzaXplb2YoYm9vbCkpOworCW1lbXNldCh2YWx1 ZXMsICAgMCwgTmF0dHNfcGdfbXZfc3RhdGlzdGljICogc2l6ZW9mKERhdHVt KSk7CisKKwkvKgorCSAqIENvbnN0cnVjdCBhIG5ldyBwZ19tdl9zdGF0aXN0 aWMgdHVwbGUgLSByZXBsYWNlIG9ubHkgdGhlIGhpc3RvZ3JhbQorCSAqIGFu ZCBNQ1YgbGlzdCwgZGVwZW5kaW5nIHdoZXRoZXIgaXQgYWN0dWFsbHkgd2Fz IGNvbXB1dGVkLgorCSAqLworCWlmIChkZXBlbmRlbmNpZXMgIT0gTlVMTCkK Kwl7CisJCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMgLTFd ICAgID0gZmFsc2U7CisJCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFkZXBzICAtIDFdCisJCQk9IFBvaW50ZXJHZXREYXR1bShzZXJpYWxpemVf bXZfZGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykpOworCX0KKworCS8qIGFs d2F5cyByZXBsYWNlIHRoZSB2YWx1ZSAoZWl0aGVyIGJ5IGJ5dGVhIG9yIE5V TEwpICovCisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhZGVw cyAtMV0gPSB0cnVlOworCisJLyogYWx3YXlzIGNoYW5nZSB0aGUgYXZhaWxh YmlsaXR5IGZsYWdzICovCisJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNf ZGVwc19idWlsdCAtMV0gPSBmYWxzZTsKKwludWxsc1tBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFrZXlzLTFdICAgICA9IGZhbHNlOworCisJLyogdXNlIHRo ZSBuZXcgYXR0bnVtcywgaW4gY2FzZSB3ZSByZW1vdmVkIHNvbWUgZHJvcHBl ZCBvbmVzICovCisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVw c19idWlsdC0xXSA9IHRydWU7CisJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3Rha2V5cyAtMV0gICAgPSB0cnVlOworCisJdmFsdWVzW0FudW1f cGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSBCb29sR2V0RGF0dW0o ZGVwZW5kZW5jaWVzICE9IE5VTEwpOworCXZhbHVlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFrZXlzIC0xXSAgICA9IFBvaW50ZXJHZXREYXR1bShhdHRy cyk7CisKKwkvKiBJcyB0aGVyZSBhbHJlYWR5IGEgcGdfbXZfc3RhdGlzdGlj IHR1cGxlIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi8KKwlvbGR0dXAgPSBTZWFy Y2hTeXNDYWNoZTEoTVZTVEFUT0lELAorCQkJCQkJCSBPYmplY3RJZEdldERh dHVtKG12b2lkKSk7CisKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZChvbGR0dXAp KQorCXsKKwkJLyogWWVzLCByZXBsYWNlIGl0ICovCisJCXN0dXAgPSBoZWFw X21vZGlmeV90dXBsZShvbGR0dXAsCisJCQkJCQkJCSBSZWxhdGlvbkdldERl c2NyKHNkKSwKKwkJCQkJCQkJIHZhbHVlcywKKwkJCQkJCQkJIG51bGxzLAor CQkJCQkJCQkgcmVwbGFjZXMpOworCQlSZWxlYXNlU3lzQ2FjaGUob2xkdHVw KTsKKwkJc2ltcGxlX2hlYXBfdXBkYXRlKHNkLCAmc3R1cC0+dF9zZWxmLCBz dHVwKTsKKwl9CisJZWxzZQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBwZ19t dl9zdGF0aXN0aWMgcmVjb3JkIChvaWQ9JWQpIiwgbXZvaWQpOworCisJLyog dXBkYXRlIGluZGV4ZXMgdG9vICovCisJQ2F0YWxvZ1VwZGF0ZUluZGV4ZXMo c2QsIHN0dXApOworCisJaGVhcF9mcmVldHVwbGUoc3R1cCk7CisKKwloZWFw X2Nsb3NlKHNkLCBSb3dFeGNsdXNpdmVMb2NrKTsKK30KKworLyogbXVsdGkt dmFyaWF0ZSBzdGF0cyBjb21wYXJhdG9yICovCisKKy8qCisgKiBxc29ydF9h cmcgY29tcGFyYXRvciBmb3Igc29ydGluZyBEYXR1bXMgKE1WIHN0YXRzKQor ICoKKyAqIFRoaXMgZG9lcyBub3QgbWFpbnRhaW4gdGhlIHR1cG5vTGluayBh cnJheS4KKyAqLworaW50Citjb21wYXJlX3NjYWxhcnNfc2ltcGxlKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykKK3sKKwlEYXR1 bQkJZGEgPSAqKERhdHVtKilhOworCURhdHVtCQlkYiA9ICooRGF0dW0qKWI7 CisJU29ydFN1cHBvcnQgc3N1cD0gKFNvcnRTdXBwb3J0KSBhcmc7CisKKwly ZXR1cm4gQXBwbHlTb3J0Q29tcGFyYXRvcihkYSwgZmFsc2UsIGRiLCBmYWxz ZSwgc3N1cCk7Cit9CisKKy8qCisgKiBxc29ydF9hcmcgY29tcGFyYXRvciBm b3Igc29ydGluZyBkYXRhIHdoZW4gcGFydGl0aW9uaW5nIGEgTVYgYnVja2V0 CisgKi8KK2ludAorY29tcGFyZV9zY2FsYXJzX3BhcnRpdGlvbihjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpCit7CisJRGF0dW0J CWRhID0gKChTY2FsYXJJdGVtKilhKS0+dmFsdWU7CisJRGF0dW0JCWRiID0g KChTY2FsYXJJdGVtKiliKS0+dmFsdWU7CisJU29ydFN1cHBvcnQgc3N1cD0g KFNvcnRTdXBwb3J0KSBhcmc7CisKKwlyZXR1cm4gQXBwbHlTb3J0Q29tcGFy YXRvcihkYSwgZmFsc2UsIGRiLCBmYWxzZSwgc3N1cCk7Cit9CisKKy8qIGlu aXRpYWxpemUgbXVsdGktZGltZW5zaW9uYWwgc29ydCAqLworTXVsdGlTb3J0 U3VwcG9ydAorbXVsdGlfc29ydF9pbml0KGludCBuZGltcykKK3sKKwlNdWx0 aVNvcnRTdXBwb3J0IG1zczsKKworCUFzc2VydChuZGltcyA+PSAyKTsKKwor CW1zcyA9IChNdWx0aVNvcnRTdXBwb3J0KXBhbGxvYzAob2Zmc2V0b2YoTXVs dGlTb3J0U3VwcG9ydERhdGEsIHNzdXApCisJCQkJCQkJCQkrIHNpemVvZihT b3J0U3VwcG9ydERhdGEpKm5kaW1zKTsKKworCW1zcy0+bmRpbXMgPSBuZGlt czsKKworCXJldHVybiBtc3M7Cit9CisKKy8qCisgKiBhZGQgc29ydCBpbnRv IGZvciBkaW1lbnNpb24gJ2RpbScgKGluZGV4IGludG8gdmFjYXR0cnN0YXRz KSB0byBtc3MsCisgKiBhdCB0aGUgcG9zaXRpb24gJ3NvcnRhdHRyJworICov Cit2b2lkCittdWx0aV9zb3J0X2FkZF9kaW1lbnNpb24oTXVsdGlTb3J0U3Vw cG9ydCBtc3MsIGludCBzb3J0ZGltLAorCQkJCQkJaW50IGRpbSwgVmFjQXR0 clN0YXRzICoqdmFjYXR0cnN0YXRzKQoreworCS8qIGZpcnN0LCBsb29rdXAg U3RkQW5hbHl6ZURhdGEgZm9yIHRoZSBkaW1lbnNpb24gKGF0dHJpYnV0ZSkg Ki8KKwlTb3J0U3VwcG9ydERhdGEgc3N1cDsKKwlTdGRBbmFseXplRGF0YSAq dG1wID0gKFN0ZEFuYWx5emVEYXRhICopdmFjYXR0cnN0YXRzW2RpbV0tPmV4 dHJhX2RhdGE7CisKKwlBc3NlcnQobXNzICE9IE5VTEwpOworCUFzc2VydChz b3J0ZGltIDwgbXNzLT5uZGltcyk7CisKKwkvKiBpbml0aWFsaXplIHNvcnQg c3VwcG9ydCwgZXRjLiAqLworCW1lbXNldCgmc3N1cCwgMCwgc2l6ZW9mKHNz dXApKTsKKwlzc3VwLnNzdXBfY3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7 CisKKwkvKiBXZSBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IGNvbGxhdGlvbiBm b3Igc3RhdGlzdGljcyAqLworCXNzdXAuc3N1cF9jb2xsYXRpb24gPSBERUZB VUxUX0NPTExBVElPTl9PSUQ7CisJc3N1cC5zc3VwX251bGxzX2ZpcnN0ID0g ZmFsc2U7CisKKwlQcmVwYXJlU29ydFN1cHBvcnRGcm9tT3JkZXJpbmdPcCh0 bXAtPmx0b3ByLCAmc3N1cCk7CisKKwltc3MtPnNzdXBbc29ydGRpbV0gPSBz c3VwOworfQorCisvKiBjb21wYXJlIGFsbCB0aGUgZGltZW5zaW9ucyBpbiB0 aGUgc2VsZWN0ZWQgb3JkZXIgKi8KK2ludAorbXVsdGlfc29ydF9jb21wYXJl KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykKK3sK KwlpbnQgaTsKKwlTb3J0SXRlbSAqaWEgPSAoU29ydEl0ZW0qKWE7CisJU29y dEl0ZW0gKmliID0gKFNvcnRJdGVtKiliOworCisJTXVsdGlTb3J0U3VwcG9y dCBtc3MgPSAoTXVsdGlTb3J0U3VwcG9ydClhcmc7CisKKwlmb3IgKGkgPSAw OyBpIDwgbXNzLT5uZGltczsgaSsrKQorCXsKKwkJaW50CWNvbXBhcmU7CisK KwkJY29tcGFyZSA9IEFwcGx5U29ydENvbXBhcmF0b3IoaWEtPnZhbHVlc1tp XSwgaWEtPmlzbnVsbFtpXSwKKwkJCQkJCQkJCSAgaWItPnZhbHVlc1tpXSwg aWItPmlzbnVsbFtpXSwKKwkJCQkJCQkJCSAgJm1zcy0+c3N1cFtpXSk7CisK KwkJaWYgKGNvbXBhcmUgIT0gMCkKKwkJCXJldHVybiBjb21wYXJlOworCisJ fQorCisJLyogZXF1YWwgYnkgZGVmYXVsdCAqLworCXJldHVybiAwOworfQor CisvKiBjb21wYXJlIHNlbGVjdGVkIGRpbWVuc2lvbiAqLworaW50CittdWx0 aV9zb3J0X2NvbXBhcmVfZGltKGludCBkaW0sIGNvbnN0IFNvcnRJdGVtICph LCBjb25zdCBTb3J0SXRlbSAqYiwKKwkJCQkJICAgTXVsdGlTb3J0U3VwcG9y dCBtc3MpCit7CisJcmV0dXJuIEFwcGx5U29ydENvbXBhcmF0b3IoYS0+dmFs dWVzW2RpbV0sIGEtPmlzbnVsbFtkaW1dLAorCQkJCQkJCSAgIGItPnZhbHVl c1tkaW1dLCBiLT5pc251bGxbZGltXSwKKwkJCQkJCQkgICAmbXNzLT5zc3Vw W2RpbV0pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZz dGF0cy9jb21tb24uaCBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29t bW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2 NDIyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvY29tbW9uLmgKQEAgLTAsMCArMSw3NSBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tbW9uLmgKKyAqCSAgUE9T VEdSRVMgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MKKyAqCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgorI2luY2x1ZGUg ImFjY2Vzcy90dXB0b2FzdGVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKKyNpbmNsdWRl ICJmb3JlaWduL2Zkd2FwaS5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0u aCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0 aWxzL212c3RhdHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5o IgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKworLyogRklYTUUg cHJpdmF0ZSBzdHJ1Y3R1cmUgY29waWVkIGZyb20gYW5hbHl6ZS5jICovCisK K3R5cGVkZWYgc3RydWN0Cit7CisJT2lkCQkJZXFvcHI7CQkJLyogJz0nIG9w ZXJhdG9yIGZvciBkYXRhdHlwZSwgaWYgYW55ICovCisJT2lkCQkJZXFmdW5j OwkJCS8qIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uICovCisJT2lkCQkJbHRv cHI7CQkJLyogJzwnIG9wZXJhdG9yIGZvciBkYXRhdHlwZSwgaWYgYW55ICov Cit9IFN0ZEFuYWx5emVEYXRhOworCit0eXBlZGVmIHN0cnVjdAoreworCURh dHVtCQl2YWx1ZTsJCQkvKiBhIGRhdGEgdmFsdWUgKi8KKwlpbnQJCQl0dXBu bzsJCQkvKiBwb3NpdGlvbiBpbmRleCBmb3IgdHVwbGUgaXQgY2FtZSBmcm9t ICovCit9IFNjYWxhckl0ZW07CisgCisvKiBtdWx0aS1zb3J0ICovCit0eXBl ZGVmIHN0cnVjdCBNdWx0aVNvcnRTdXBwb3J0RGF0YSB7CisJaW50CQkJCW5k aW1zOwkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgc3VwcG9ydGVkIGJ5IHRo ZSAqLworCVNvcnRTdXBwb3J0RGF0YQlzc3VwWzFdOwkvKiBzb3J0IHN1cHBv cnQgZGF0YSBmb3IgZWFjaCBkaW1lbnNpb24gKi8KK30gTXVsdGlTb3J0U3Vw cG9ydERhdGE7CisKK3R5cGVkZWYgTXVsdGlTb3J0U3VwcG9ydERhdGEqIE11 bHRpU29ydFN1cHBvcnQ7CisKK3R5cGVkZWYgc3RydWN0IFNvcnRJdGVtIHsK KwlEYXR1bSAgKnZhbHVlczsKKwlib29sICAgKmlzbnVsbDsKK30gU29ydEl0 ZW07CisKK011bHRpU29ydFN1cHBvcnQgbXVsdGlfc29ydF9pbml0KGludCBu ZGltcyk7CisKK3ZvaWQgbXVsdGlfc29ydF9hZGRfZGltZW5zaW9uKE11bHRp U29ydFN1cHBvcnQgbXNzLCBpbnQgc29ydGRpbSwKKwkJCQkJCQkgIGludCBk aW0sIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CisKK2ludCBtdWx0 aV9zb3J0X2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwg dm9pZCAqYXJnKTsKKworaW50IG11bHRpX3NvcnRfY29tcGFyZV9kaW0oaW50 IGRpbSwgY29uc3QgU29ydEl0ZW0gKmEsCisJCQkJCQkgICBjb25zdCBTb3J0 SXRlbSAqYiwgTXVsdGlTb3J0U3VwcG9ydCBtc3MpOworCisvKiBjb21wYXJh dG9ycywgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyBtdWx0aXZhcmlhdGUgc3Rh dHMgKi8KK2ludCBjb21wYXJlX3NjYWxhcnNfc2ltcGxlKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZyk7CitpbnQgY29tcGFyZV9z Y2FsYXJzX3BhcnRpdGlvbihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi LCB2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9kZXBlbmRlbmNpZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvZGVwZW5kZW5jaWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMmEwNjRhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVzLmMKQEAgLTAsMCAr MSw0MzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGRlcGVuZGVuY2llcy5jCisgKgkgIFBPU1RHUkVTIG11bHRpdmFyaWF0 ZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcworICoKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVzLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAiY29tbW9u LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBE ZXRlY3QgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjb2x1bW5z LgorICoKKyAqIFRPRE8gVGhpcyBidWlsZHMgYSBjb21wbGV0ZSBzZXQgb2Yg ZGVwZW5kZW5jaWVzLCBpLmUuIGluY2x1ZGluZyB0cmFuc2l0aXZlCisgKiAg ICAgIGRlcGVuZGVuY2llcyAtIGlmIHdlIGlkZW50aWZ5IFtBID0+IEJdIGFu ZCBbQiA9PiBDXSwgd2UncmUgbGlrZWx5IHRvCisgKiAgICAgIGlkZW50aWZ5 IFtBID0+IENdIHRvby4gSXQgbWlnaHQgYmUgYmV0dGVyIHRvICBrZWVwIG9u bHkgdGhlIG1pbmltYWwgc2V0CisgKiAgICAgIG9mIGRlcGVuZGVuY2llcywg aS5lLiBwcnVuZSBhbGwgdGhlIGRlcGVuZGVuY2llcyB0aGF0IHdlIGNhbiBy ZWNyZWF0ZQorICogICAgICBieSB0cmFuc2l2aXRpdHkuCisgKiAKKyAqICAg ICAgVGhlcmUgYXJlIHR3byBjb25jZXB0dWFsIHdheXMgdG8gZG8gdGhhdDoK KyAqIAorICogICAgICAoYSkgZ2VuZXJhdGUgYWxsIHRoZSBydWxlcywgYW5k IHRoZW4gcHJ1bmUgdGhlIHJ1bGVzIHRoYXQgbWF5IGJlCisgKiAgICAgICAg ICByZWN0ZWF0ZWQgYnkgY29tYmluaW5nIG90aGVyIGRlcGVuZGVuY2llcywg b3IKKyAqIAorICogICAgICAoYikgcGVyZm9ybWluZyB0aGUgJ2lzIGNvbWJp bmF0aW9uIG9mIG90aGVyIGRlcGVuZGVuY2llcycgY2hlY2sgYmVmb3JlCisg KiAgICAgICAgICBhY3R1YWxseSBkb2luZyB0aGUgd29yaworICogCisgKiAg ICAgIFRoZSBzZWNvbmQgb3B0aW9uIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQg d2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGVyZm9ybQorICogICAgICB0aGUg c29ydC9jb3VudC4gSXQncyBub3Qgc3VmZmljaWVudCBhbG9uZSwgdGhvdWdo LCBiZWNhdXNlIHdlIG1heQorICogICAgICBkaXNjb3ZlciB0aGUgZGVwZW5k ZW5jaWVzIGluIHRoZSB3cm9uZyBvcmRlci4gRm9yIGV4YW1wbGUgd2UgbWF5 IGZpbmQKKyAqCisgKiAgICAgICAgICAoYSAtPiBiKSwgKGEgLT4gYykgYW5k IHRoZW4gKGIgLT4gYykKKyAqCisgKiAgICAgIE5vbmUgb2YgdGhvc2UgZGVw ZW5kZW5jaWVzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGFscmVhZHkga25v d24gb25lcywKKyAqICAgICAgeWV0IChhIC0+IEMpIGlzIGEgY29tYmluYXRp b24gb2YgKGEgLT4gYikgYW5kIChiIC0+IGMpLgorICoKKyAqIAorICogRklY TUUgQ3VycmVudGx5IHdlIHNpbXBseSByZXBsYWNlIE5VTEwgdmFsdWVzIHdp dGggMCBhbmQgdGhlbiBoYW5kbGUgaXMgYXMKKyAqICAgICAgIGEgcmVndWxh ciB2YWx1ZSwgYnV0IHRoYXQgZ3JvdXBzIE5VTEwgYW5kIGFjdHVhbCAwIHZh bHVlcy4gVGhhdCdzCisgKiAgICAgICBjbGVhcmx5IGluY29ycmVjdCAtIHdl IG5lZWQgdG8gaGFuZGxlIE5VTEwgdmFsdWVzIGFzIGEgc2VwYXJhdGUgdmFs dWUuCisgKi8KK01WRGVwZW5kZW5jaWVzCitidWlsZF9tdl9kZXBlbmRlbmNp ZXMoaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAq YXR0cnMsCisJCQkJCSAgVmFjQXR0clN0YXRzICoqc3RhdHMpCit7CisJaW50 IGk7CisJaW50IG51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisKKwkvKiByZXN1 bHQgKi8KKwlpbnQgbmRlcHMgPSAwOworCU1WRGVwZW5kZW5jaWVzCWRlcGVu ZGVuY2llcyA9IE5VTEw7CisJTXVsdGlTb3J0U3VwcG9ydCBtc3MgPSBtdWx0 aV9zb3J0X2luaXQoMik7CS8qIDIgZGltZW5zaW9ucyBmb3Igbm93ICovCisK KwkvKiBUT0RPIE1heWJlIHRoaXMgc2hvdWxkIGJlIHNvbWVob3cgcmVsYXRl ZCB0byB0aGUgbnVtYmVyIG9mCisJICogICAgICBkaXN0aW5jdCB2YWx1ZXMg aW4gdGhlIHR3byBjb2x1bW5zIHdlJ3JlIGN1cnJlbnRseSBhbmFseXppbmcu CisJICogICAgICBBc3N1bWluZyB0aGUgZGlzdHJpYnV0aW9uIGlzIHVuaWZv cm0sIHdlIGNhbiBlc3RpbWF0ZSB0aGUKKwkgKiAgICAgIGF2ZXJhZ2UgZ3Jv dXAgc2l6ZSBhbmQgdXNlIGl0IGFzIGEgdGhyZXNob2xkLiBPciBzb21ldGhp bmcKKwkgKiAgICAgIGxpa2UgdGhhdC4gU2VlbXMgYmV0dGVyIHRoYW4gYSBz dGF0aWMgYXBwcm9hY2guCisJICovCisJaW50IG1pbl9ncm91cF9zaXplID0g MzsKKworCS8qIGRpbWVuc2lvbiBpbmRleGVzIHdlJ2xsIGNoZWNrIGZvciBh c3NvY2lhdGlvbnMgW2EgPT4gYl0gKi8KKwlpbnQgZGltYSwgZGltYjsKKwor CS8qCisJICogV2UnbGwgcmV1c2UgdGhlIHNhbWUgYXJyYXkgZm9yIGFsbCB0 aGUgMi1jb2x1bW4gY29tYmluYXRpb25zLgorCSAqCisJICogSXQncyBwb3Nz aWJsZSB0byBzb3J0IHRoZSBzYW1wbGUgcm93cyBkaXJlY3RseSwgYnV0IHRo aXMgc2VlbWVkCisJICogc29tZWhvdyBzaW1wbGVzIC8gbGVzcyBlcnJvciBw cm9uZS4gQW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8KKwkgKiBhbGxvY2F0 ZSB0aGUgYXJyYXlzIGZvciBlYWNoIFNvcnRJdGVtIHNlcGFyYXRlbHksIGJ1 dCB0aGF0J2QgYmUKKwkgKiBzaWduaWZpY2FudCBvdmVyaGVhZCAobm90IGp1 c3QgQ1BVLCBidXQgZXNwZWNpYWxseSBtZW1vcnkgYmxvYXQpLgorCSAqLwor CVNvcnRJdGVtICogaXRlbXMgPSAoU29ydEl0ZW0qKXBhbGxvYzAobnVtcm93 cyAqIHNpemVvZihTb3J0SXRlbSkpOworCisJRGF0dW0gKnZhbHVlcyA9IChE YXR1bSopcGFsbG9jMChzaXplb2YoRGF0dW0pICogbnVtcm93cyAqIDIpOwor CWJvb2wgICppc251bGwgPSAoYm9vbCopcGFsbG9jMChzaXplb2YoYm9vbCkg KiBudW1yb3dzICogMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcm93czsg aSsrKQorCXsKKwkJaXRlbXNbaV0udmFsdWVzID0gJnZhbHVlc1tpICogMl07 CisJCWl0ZW1zW2ldLmlzbnVsbCA9ICZpc251bGxbaSAqIDJdOworCX0KKwor CUFzc2VydChudW1hdHRycyA+PSAyKTsKKworCS8qCisJICogRXZhbHVhdGUg YWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiBbQSA9PiBCXSwgdXNpbmcg YSBzaW1wbGUgYWxnb3JpdGhtOgorCSAqCisJICogKGEpIHNvcnQgdGhlIGRh dGEgYnkgW0EsQl0KKwkgKiAoYikgc3BsaXQgdGhlIGRhdGEgaW50byBncm91 cHMgYnkgQSAobmV3IGdyb3VwIHdoZW5ldmVyIGEgdmFsdWUgY2hhbmdlcykK KwkgKiAoYykgY291bnQgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgQiBjb2x1 bW4gKGFnYWluLCB2YWx1ZSBjaGFuZ2VzKQorCSAqCisJICogVE9ETyBJdCBz aG91bGQgYmUgcmF0aGVyIHNpbXBsZSB0byBtZXJnZSBbQSA9PiBCXSBhbmQg W0EgPT4gQ10gaW50bworCSAqICAgICAgW0EgPT4gQixDXS4gSnVzdCBrZWVw IEEgY29uc3RhbnQsIGNvbGxlY3QgYWxsIHRoZSAiaW1wbGllZCIgY29sdW1u cworCSAqICAgICAgYW5kIHlvdSdyZSBkb25lLgorCSAqLworCWZvciAoZGlt YSA9IDA7IGRpbWEgPCBudW1hdHRyczsgZGltYSsrKQorCXsKKwkJLyogcHJl cGFyZSB0aGUgc29ydCBmdW5jdGlvbiBmb3IgdGhlIGZpcnN0IGRpbWVuc2lv biAqLworCQltdWx0aV9zb3J0X2FkZF9kaW1lbnNpb24obXNzLCAwLCBkaW1h LCBzdGF0cyk7CisKKwkJZm9yIChkaW1iID0gMDsgZGltYiA8IG51bWF0dHJz OyBkaW1iKyspCisJCXsKKwkJCVNvcnRJdGVtIGN1cnJlbnQ7CisKKwkJCS8q IG51bWJlciBvZiBncm91cHMgc3VwcG9ydGluZyAvIGNvbnRyYWRpY3Rpbmcg dGhlIGRlcGVuZGVuY3kgKi8KKwkJCWludCBuX3N1cHBvcnRpbmcgPSAwOwor CQkJaW50IG5fY29udHJhZGljdGluZyA9IDA7CisKKwkJCS8qIGNvdW50ZXJz IHZhbGlkIHdpdGhpbiBhIGdyb3VwICovCisJCQlpbnQgZ3JvdXBfc2l6ZSA9 IDA7CisJCQlpbnQgbl92aW9sYXRpb25zID0gMDsKKworCQkJaW50IG5fc3Vw cG9ydGluZ19yb3dzID0gMDsKKwkJCWludCBuX2NvbnRyYWRpY3Rpbmdfcm93 cyA9IDA7CisKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgY29sdW1ucyBhcmUgZGlm ZmVyZW50IChBID0+IEEpICovCisJCQlpZiAoZGltYSA9PSBkaW1iKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKiBwcmVwYXJlIHRoZSBzb3J0IGZ1bmN0aW9u IGZvciB0aGUgc2Vjb25kIGRpbWVuc2lvbiAqLworCQkJbXVsdGlfc29ydF9h ZGRfZGltZW5zaW9uKG1zcywgMSwgZGltYiwgc3RhdHMpOworCisJCQkvKiBy ZXNldCB0aGUgdmFsdWVzIGFuZCBpc251bGwgZmxhZ3MgKi8KKwkJCW1lbXNl dCh2YWx1ZXMsIDAsIHNpemVvZihEYXR1bSkgKiBudW1yb3dzICogMik7CisJ CQltZW1zZXQoaXNudWxsLCAwLCBzaXplb2YoYm9vbCkgICogbnVtcm93cyAq IDIpOworCisJCQkvKiBhY2N1bXVsYXRlIGFsbCB0aGUgZGF0YSBmb3IgYm90 aCBjb2x1bW5zIGludG8gYW4gYXJyYXkgYW5kIHNvcnQgaXQgKi8KKwkJCWZv ciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCisJCQl7CisJCQkJaXRlbXNb aV0udmFsdWVzWzBdCisJCQkJCT0gaGVhcF9nZXRhdHRyKHJvd3NbaV0sIGF0 dHJzLT52YWx1ZXNbZGltYV0sCisJCQkJCQkJCQlzdGF0c1tkaW1hXS0+dHVw RGVzYywgJml0ZW1zW2ldLmlzbnVsbFswXSk7CisKKwkJCQlpdGVtc1tpXS52 YWx1ZXNbMV0KKwkJCQkJPSBoZWFwX2dldGF0dHIocm93c1tpXSwgYXR0cnMt PnZhbHVlc1tkaW1iXSwKKwkJCQkJCQkJCXN0YXRzW2RpbWJdLT50dXBEZXNj LCAmaXRlbXNbaV0uaXNudWxsWzFdKTsKKwkJCX0KKworCQkJcXNvcnRfYXJn KCh2b2lkICopIGl0ZW1zLCBudW1yb3dzLCBzaXplb2YoU29ydEl0ZW0pLAor CQkJCQkgIG11bHRpX3NvcnRfY29tcGFyZSwgbXNzKTsKKworCQkJLyoKKwkJ CSAqIFdhbGsgdGhyb3VnaCB0aGUgYXJyYXksIHNwbGl0IGl0IGludG8gcm93 cyBhY2NvcmRpbmcgdG8KKwkJCSAqIHRoZSBBIHZhbHVlLCBhbmQgY291bnQg ZGlzdGluY3QgdmFsdWVzIGluIHRoZSBvdGhlciBvbmUuCisJCQkgKiBJZiB0 aGVyZSdzIGEgc2luZ2xlIEIgdmFsdWUgZm9yIHRoZSB3aG9sZSBncm91cCwg d2UgY291bnQKKwkJCSAqIGl0IGFzIHN1cHBvcnRpbmcgdGhlIGFzc29jaWF0 aW9uLCBvdGhlcndpc2Ugd2UgY291bnQgaXQKKwkJCSAqIGFzIGNvbnRyYWRp Y3RpbmcuCisJCQkgKgorCQkJICogRnVydGhlcm1vcmUgd2UgcmVxdWlyZSBh IGdyb3VwIHRvIGhhdmUgYXQgbGVhc3QgYSBjZXJ0YWluCisJCQkgKiBudW1i ZXIgb2Ygcm93cyB0byBiZSBjb25zaWRlcmVkIHVzZWZ1bCBmb3Igc3VwcG9y dGluZyB0aGUKKwkJCSAqIGRlcGVuZGVuY3kuIEJ1dCB3aGVuIGl0J3MgY29u dHJhZGljdGluZywgdXNlIGl0IGFsd2F5cyB1c2VmdWwuCisJCQkgKi8KKwor CQkJLyogc3RhcnQgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgZmlyc3Qgcm93ICov CisJCQljdXJyZW50ID0gaXRlbXNbMF07CisJCQlncm91cF9zaXplICA9IDE7 CisKKwkJCWZvciAoaSA9IDE7IGkgPCBudW1yb3dzOyBpKyspCisJCQl7CisJ CQkJLyogZW5kIG9mIHRoZSBncm91cCAqLworCQkJCWlmIChtdWx0aV9zb3J0 X2NvbXBhcmVfZGltKDAsICZpdGVtc1tpXSwgJmN1cnJlbnQsIG1zcykgIT0g MCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZXJlIGFyZSBubyBj b250cmFkaWN0aW5nIHJvd3MsIGNvdW50IGl0IGFzCisJCQkJCSAqIHN1cHBv cnRpbmcgKG90aGVyd2lzZSBjb250cmFkaWN0aW5nKSwgYnV0IG9ubHkgaWYK KwkJCQkJICogdGhlIGdyb3VwIGlzIGxhcmdlIGVub3VnaC4KKwkJCQkJICoK KwkJCQkJICogVGhlIHJlcXVpcmVtZW50IG9mIGEgbWluaW11bSBncm91cCBz aXplIG1ha2VzIGl0CisJCQkJCSAqIGltcG9zc2libGUgdG8gaWRlbnRpZnkg W3VuaXF1ZSx1bmlxdWVdIGNhc2VzLCBidXQKKwkJCQkJICogdGhhdCdzIHBy b2JhYmx5IGEgZGlmZmVyZW50IGNhc2UuIFRoaXMgaXMgbW9yZQorCQkJCQkg KiBhYm91dCBbemlwID0+IGNpdHldIGFzc29jaWF0aW9ucyBldGMuCisJCQkJ CSAqCisJCQkJCSAqIElmIHRoZXJlIGFyZSB2aW9sYXRpb25zLCBjb3VudCB0 aGUgZ3JvdXAvcm93cyBhcworCQkJCQkgKiBhIHZpb2xhdGlvbi4KKwkJCQkJ ICoKKwkJCQkJICogSXQgbWF5IG5lIG5laXRoZXIsIGlmIHRoZSBncm91cCBp cyB0b28gc21hbGwgKGRvZXMKKwkJCQkJICogbm90IGNvbnRhaW4gYXQgbGVh c3QgbWluX2dyb3VwX3NpemUgcm93cykuCisJCQkJCSAqLworCQkJCQlpZiAo KG5fdmlvbGF0aW9ucyA9PSAwKSAmJiAoZ3JvdXBfc2l6ZSA+PSBtaW5fZ3Jv dXBfc2l6ZSkpCisJCQkJCXsKKwkJCQkJCW5fc3VwcG9ydGluZyArPSAgMTsK KwkJCQkJCW5fc3VwcG9ydGluZ19yb3dzICs9IGdyb3VwX3NpemU7CisJCQkJ CX0KKwkJCQkJZWxzZSBpZiAobl92aW9sYXRpb25zID4gMCkKKwkJCQkJewor CQkJCQkJbl9jb250cmFkaWN0aW5nICs9ICAxOworCQkJCQkJbl9jb250cmFk aWN0aW5nX3Jvd3MgKz0gZ3JvdXBfc2l6ZTsKKwkJCQkJfQorCisJCQkJCS8q IGN1cnJlbnQgdmFsdWVzIHN0YXJ0IGEgbmV3IGdyb3VwICovCisJCQkJCW5f dmlvbGF0aW9ucyA9IDA7CisJCQkJCWdyb3VwX3NpemUgPSAwOworCQkJCX0K KwkJCQkvKiBtaXNtYXRjaCBvZiBhIEIgdmFsdWUgaXMgY29udHJhZGljdGlu ZyAqLworCQkJCWVsc2UgaWYgKG11bHRpX3NvcnRfY29tcGFyZV9kaW0oMSwg Jml0ZW1zW2ldLCAmY3VycmVudCwgbXNzKSAhPSAwKQorCQkJCXsKKwkJCQkJ bl92aW9sYXRpb25zICs9IDE7CisJCQkJfQorCisJCQkJY3VycmVudCA9IGl0 ZW1zW2ldOworCQkJCWdyb3VwX3NpemUgKz0gMTsKKwkJCX0KKworCQkJLyog aGFuZGxlIHRoZSBsYXN0IGdyb3VwIChqdXN0IGxpa2UgYWJvdmUpICovCisJ CQlpZiAoKG5fdmlvbGF0aW9ucyA9PSAwKSAmJiAoZ3JvdXBfc2l6ZSA+PSBt aW5fZ3JvdXBfc2l6ZSkpCisJCQl7CisJCQkJbl9zdXBwb3J0aW5nICs9IDE7 CisJCQkJbl9zdXBwb3J0aW5nX3Jvd3MgKz0gZ3JvdXBfc2l6ZTsKKwkJCX0K KwkJCWVsc2UgaWYgKG5fdmlvbGF0aW9ucykKKwkJCXsKKwkJCQluX2NvbnRy YWRpY3RpbmcgKz0gMTsKKwkJCQluX2NvbnRyYWRpY3Rpbmdfcm93cyArPSBn cm91cF9zaXplOworCQkJfQorCisJCQkvKgorCQkJICogU2VlIGlmIHRoZSBu dW1iZXIgb2Ygcm93cyBzdXBwb3J0aW5nIHRoZSBhc3NvY2lhdGlvbiBpcyBh dCBsZWFzdAorCQkJICogMTB4IHRoZSBudW1iZXIgb2Ygcm93cyB2aW9sYXRp bmcgdGhlIGh5cG90aGV0aWNhbCBkZXBlbmRlbmN5LgorCQkJICoKKwkJCSAq IFRPRE8gVGhpcyBpcyByYXRoZXIgYXJiaXRyYXJ5IGxpbWl0IC0gSSBndWVz cyBpdCdzIHBvc3NpYmxlIHRvIGRvCisJCQkgKiAgICAgIHNvbWUgbWF0aCB0 byBjb21lIHVwIHdpdGggYSBiZXR0ZXIgcnVsZSAoZS5nLiB0ZXN0aW5nIGEg aHlwb3RoZXNpcworCQkJICogICAgICAndGhpcyBpcyBkdWUgdG8gcmFuZG9t bmVzcycpLiBXZSBjYW4gY3JlYXRlIGEgY29udGluZ2VuY3kgdGFibGUKKwkJ CSAqICAgICAgZnJvbSB0aGUgdmFsdWVzIGFuZCB1c2UgaXQgZm9yIHRlc3Rp bmcuIFBvc3NpYmx5IG9ubHkgd2hlbgorCQkJICogICAgICB0aGVyZSBhcmUg bm8gY29udHJhZGljdGluZyByb3dzPworCQkJICoKKwkJCSAqIFRPRE8gQWxz bywgaWYgKGEgPT4gYikgYW5kIChiID0+IGEpIGF0IHRoZSBzYW1lIHRpbWUs IGl0IHByZXR0eSBtdWNoCisJCQkgKiAgICAgIG1lYW5zIHRoZXJlJ3MgYSAx OjEgcmVsYXRpb24gKG9yIG9uZSBpcyBhICdsYWJlbCcpLCBtYWtpbmcgdGhl CisJCQkgKiAgICAgIGNvbmRpdGlvbnMgcmF0aGVyIHJlZHVuZGFudC4gQWx0 aG91Z2ggaXQncyBwb3NzaWJsZSB0aGF0IHRoZQorCQkJICogICAgICBxdWVy eSB1c2VzIGluY29tcGF0aWJsZSBjb21iaW5hdGlvbiBvZiB2YWx1ZXMuCisJ CQkgKi8KKwkJCWlmIChuX3N1cHBvcnRpbmdfcm93cyA+IChuX2NvbnRyYWRp Y3Rpbmdfcm93cyAqIDEwKSkKKwkJCXsKKwkJCQlpZiAoZGVwZW5kZW5jaWVz ID09IE5VTEwpCisJCQkJeworCQkJCQlkZXBlbmRlbmNpZXMgPSAoTVZEZXBl bmRlbmNpZXMpcGFsbG9jMChzaXplb2YoTVZEZXBlbmRlbmNpZXNEYXRhKSk7 CisJCQkJCWRlcGVuZGVuY2llcy0+bWFnaWMgPSBNVlNUQVRfREVQU19NQUdJ QzsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlkZXBlbmRlbmNpZXMgPSByZXBh bGxvYyhkZXBlbmRlbmNpZXMsIG9mZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0 YSwgZGVwcykKKwkJCQkJCQkJCQkJKyBzaXplb2YoTVZEZXBlbmRlbmN5KSAq IChkZXBlbmRlbmNpZXMtPm5kZXBzICsgMSkpOworCisJCQkJLyogdXBkYXRl IHRoZSAqLworCQkJCWRlcGVuZGVuY2llcy0+ZGVwc1tuZGVwc10gPSAoTVZE ZXBlbmRlbmN5KXBhbGxvYzAoc2l6ZW9mKE1WRGVwZW5kZW5jeURhdGEpKTsK KwkJCQlkZXBlbmRlbmNpZXMtPmRlcHNbbmRlcHNdLT5hID0gYXR0cnMtPnZh bHVlc1tkaW1hXTsKKwkJCQlkZXBlbmRlbmNpZXMtPmRlcHNbbmRlcHNdLT5i ID0gYXR0cnMtPnZhbHVlc1tkaW1iXTsKKworCQkJCWRlcGVuZGVuY2llcy0+ bmRlcHMgPSAoKytuZGVwcyk7CisJCQl9CisJCX0KKwl9CisKKwlwZnJlZShp dGVtcyk7CisJcGZyZWUodmFsdWVzKTsKKwlwZnJlZShpc251bGwpOworCXBm cmVlKHN0YXRzKTsKKwlwZnJlZShtc3MpOworCisJcmV0dXJuIGRlcGVuZGVu Y2llczsKK30KKworLyoKKyAqIFN0b3JlIHRoZSBkZXBlbmRlbmNpZXMgaW50 byBhIGJ5dGVhLCBzbyB0aGF0IGl0IGNhbiBiZSBzdG9yZWQgaW4gdGhlCisg KiBwZ19tdl9zdGF0aXN0aWMgY2F0YWxvZy4KKyAqCisgKiBDdXJyZW50bHkg dGhpcyBvbmx5IHN1cHBvcnRzIHNpbXBsZSB0d28tY29sdW1uIHJ1bGVzLCBh bmQgc3RvcmVzIHRoZW0KKyAqIGFzIGEgc2VxdWVuY2Ugb2YgYXR0bnVtIHBh aXJzLiBJbiB0aGUgZnV0dXJlLCB0aGlzIG5lZWRzIHRvIGJlIG1hZGUKKyAq IG1vcmUgY29tcGxleCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbHVtbnMgb24g Ym90aCBzaWRlcyBvZiB0aGUKKyAqIGltcGxpY2F0aW9uICh1c2luZyBBTkQg b24gbGVmdCwgT1Igb24gcmlnaHQpLgorICovCitieXRlYSAqCitzZXJpYWxp emVfbXZfZGVwZW5kZW5jaWVzKE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2ll cykKK3sKKwlpbnQgaTsKKworCS8qIHdlIG5lZWQgdG8gc3RvcmUgbmRlcHMs IGFuZCBlYWNoIG5lZWRzIDIgKiBpbnQxNiAqLworCVNpemUgbGVuID0gVkFS SERSU1ogKyBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsIGRlcHMpCisJ CQkJKyBkZXBlbmRlbmNpZXMtPm5kZXBzICogKHNpemVvZihpbnQxNikgKiAy KTsKKworCWJ5dGVhICogb3V0cHV0ID0gKGJ5dGVhKilwYWxsb2MwKGxlbik7 CisKKwljaGFyICogdG1wID0gVkFSREFUQShvdXRwdXQpOworCisJU0VUX1ZB UlNJWkUob3V0cHV0LCBsZW4pOworCisJLyogZmlyc3QsIHN0b3JlIHRoZSBu dW1iZXIgb2YgZGltZW5zaW9ucyAvIGl0ZW1zICovCisJbWVtY3B5KHRtcCwg ZGVwZW5kZW5jaWVzLCBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsIGRl cHMpKTsKKwl0bXAgKz0gb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBk ZXBzKTsKKworCS8qIHdhbGsgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFu ZCBjb3B5IGJvdGggY29sdW1ucyBpbnRvIHRoZSBieXRlYSAqLworCWZvciAo aSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMtPm5kZXBzOyBpKyspCisJeworCQlt ZW1jcHkodG1wLCAmKGRlcGVuZGVuY2llcy0+ZGVwc1tpXS0+YSksIHNpemVv ZihpbnQxNikpOworCQl0bXAgKz0gc2l6ZW9mKGludDE2KTsKKworCQltZW1j cHkodG1wLCAmKGRlcGVuZGVuY2llcy0+ZGVwc1tpXS0+YiksIHNpemVvZihp bnQxNikpOworCQl0bXAgKz0gc2l6ZW9mKGludDE2KTsKKwl9CisKKwlyZXR1 cm4gb3V0cHV0OworfQorCisvKgorICogUmVhZHMgc2VyaWFsaXplZCBkZXBl bmRlbmNpZXMgaW50byBNVkRlcGVuZGVuY2llcyBzdHJ1Y3R1cmUuCisgKi8K K01WRGVwZW5kZW5jaWVzCitkZXNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMo Ynl0ZWEgKiBkYXRhKQoreworCWludAkJaTsKKwlTaXplCWV4cGVjdGVkX3Np emU7CisJTVZEZXBlbmRlbmNpZXMJZGVwZW5kZW5jaWVzOworCWNoYXIgICAq dG1wOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisK KwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkgPCBvZmZzZXRvZihNVkRl cGVuZGVuY2llc0RhdGEsZGVwcykpCisJCWVsb2coRVJST1IsICJpbnZhbGlk IE1WRGVwZW5kZW5jaWVzIHNpemUgJWxkIChleHBlY3RlZCBhdCBsZWFzdCAl bGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwgb2Zmc2V0b2Yo TVZEZXBlbmRlbmNpZXNEYXRhLGRlcHMpKTsKKworCS8qIHJlYWQgdGhlIE1W RGVwZW5kZW5jaWVzIGhlYWRlciAqLworCWRlcGVuZGVuY2llcyA9IChNVkRl cGVuZGVuY2llcylwYWxsb2MwKHNpemVvZihNVkRlcGVuZGVuY2llc0RhdGEp KTsKKworCS8qIGluaXRpYWxpemUgcG9pbnRlciB0byB0aGUgZGF0YSBwYXJ0 IChza2lwIHRoZSB2YXJsZW5hIGhlYWRlcikgKi8KKwl0bXAgPSBWQVJEQVRB KGRhdGEpOworCisJLyogZ2V0IHRoZSBoZWFkZXIgYW5kIHBlcmZvcm0gYmFz aWMgc2FuaXR5IGNoZWNrcyAqLworCW1lbWNweShkZXBlbmRlbmNpZXMsIHRt cCwgb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBzKSk7CisJdG1w ICs9IG9mZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcyk7CisKKwlp ZiAoZGVwZW5kZW5jaWVzLT5tYWdpYyAhPSBNVlNUQVRfREVQU19NQUdJQykK Kwl7CisJCXBmcmVlKGRlcGVuZGVuY2llcyk7CisJCWVsb2coV0FSTklORywg Im5vdCBhIE1WIERlcGVuZGVuY2llcyAobWFnaWMgbnVtYmVyIG1pc21hdGNo KSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlBc3NlcnQoZGVwZW5kZW5j aWVzLT5uZGVwcyA+IDApOworCisJLyogd2hhdCBieXRlYSBzaXplIGRvIHdl IGV4cGVjdCBmb3IgdGhvc2UgcGFyYW1ldGVycyAqLworCWV4cGVjdGVkX3Np emUgPSBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsZGVwcykgKworCQkJ CQlkZXBlbmRlbmNpZXMtPm5kZXBzICogc2l6ZW9mKGludDE2KSAqIDI7CisK KwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkgIT0gZXhwZWN0ZWRfc2l6 ZSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVwZW5kZW5jaWVzIHNpemUg JWxkIChleHBlY3RlZCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihk YXRhKSwgZXhwZWN0ZWRfc2l6ZSk7CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBm b3IgdGhlIE1DViBpdGVtcyAqLworCWRlcGVuZGVuY2llcyA9IHJlcGFsbG9j KGRlcGVuZGVuY2llcywgb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLGRl cHMpCisJCQkJCQkJKyAoZGVwZW5kZW5jaWVzLT5uZGVwcyAqIHNpemVvZihN VkRlcGVuZGVuY3kpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVwZW5kZW5j aWVzLT5uZGVwczsgaSsrKQorCXsKKwkJZGVwZW5kZW5jaWVzLT5kZXBzW2ld ID0gKE1WRGVwZW5kZW5jeSlwYWxsb2MwKHNpemVvZihNVkRlcGVuZGVuY3lE YXRhKSk7CisKKwkJbWVtY3B5KCYoZGVwZW5kZW5jaWVzLT5kZXBzW2ldLT5h KSwgdG1wLCBzaXplb2YoaW50MTYpKTsKKwkJdG1wICs9IHNpemVvZihpbnQx Nik7CisKKwkJbWVtY3B5KCYoZGVwZW5kZW5jaWVzLT5kZXBzW2ldLT5iKSwg dG1wLCBzaXplb2YoaW50MTYpKTsKKwkJdG1wICs9IHNpemVvZihpbnQxNik7 CisJfQorCisJcmV0dXJuIGRlcGVuZGVuY2llczsKK30KKworLyogcHJpbnQg c29tZSBiYXNpYyBpbmZvIGFib3V0IGRlcGVuZGVuY2llcyAobnVtYmVyIG9m IGRlcGVuZGVuY2llcykgKi8KK0RhdHVtCitwZ19tdl9zdGF0c19kZXBlbmRl bmNpZXNfaW5mbyhQR19GVU5DVElPTl9BUkdTKQoreworCWJ5dGVhCSAgICpk YXRhID0gUEdfR0VUQVJHX0JZVEVBX1AoMCk7CisJY2hhcgkgICAqcmVzdWx0 OworCisJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzID0gZGVzZXJpYWxp emVfbXZfZGVwZW5kZW5jaWVzKGRhdGEpOworCisJaWYgKGRlcGVuZGVuY2ll cyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJcmVzdWx0ID0g cGFsbG9jMCgxMjgpOworCXNucHJpbnRmKHJlc3VsdCwgMTI4LCAiZGVwZW5k ZW5jaWVzPSVkIiwgZGVwZW5kZW5jaWVzLT5uZGVwcyk7CisKKwkvKiBGSVhN RSBmcmVlIHRoZSBkZXNlcmlhbGl6ZWQgZGF0YSAocGZyZWUgaXMgbm90IGVu b3VnaCkgKi8KKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 KHJlc3VsdCkpOworfQorCisvKiBwcmludCB0aGUgZGVwZW5kZW5jaWVzCisg KgorICogVE9ETyAgV291bGQgYmUgbmljZSBpZiB0aGlzIGtuZXcgdGhlIGFj dHVhbCBjb2x1bW4gbmFtZXMgKGluc3RlYWQgb2YKKyAqICAgICAgIHRoZSBh dHRudW1zKS4KKyAqCisgKiBGSVhNRSBUaGlzIGlzIHJlYWxseSB1Z2x5IGFu ZCBkb2VzIG5vdCByZWFsbHkgY2hlY2sgdGhlIGxlbmd0aHMgYW5kCisgKiAg ICAgICBzdHJjcHkvc25wcmludGYgcmV0dXJuIHZhbHVlcyBwcm9wZXJseS4g TmVlZHMgdG8gYmUgZml4ZWQuCisgKi8KK0RhdHVtCitwZ19tdl9zdGF0c19k ZXBlbmRlbmNpZXNfc2hvdyhQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJ CWkgPSAwOworCWJ5dGVhCSAgICpkYXRhID0gUEdfR0VUQVJHX0JZVEVBX1Ao MCk7CisJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsKKwlpbnQJCQlsZW4gPSAw OworCisJTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzID0gZGVzZXJpYWxp emVfbXZfZGVwZW5kZW5jaWVzKGRhdGEpOworCisJaWYgKGRlcGVuZGVuY2ll cyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJZm9yIChpID0g MDsgaSA8IGRlcGVuZGVuY2llcy0+bmRlcHM7IGkrKykKKwl7CisJCU1WRGVw ZW5kZW5jeSBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jaWVzLT5kZXBzW2ldOwor CQljaGFyCWJ1ZmZlclsxMjhdOworCisJCWludAkJdG1wID0gc25wcmludGYo YnVmZmVyLCAxMjgsICIlcyVkID0+ICVkIiwKKwkJCQkoKGkgPT0gMCkgPyAi IiA6ICIsICIpLCBkZXBlbmRlbmN5LT5hLCBkZXBlbmRlbmN5LT5iKTsKKwor CQlpZiAodG1wIDwgMTI3KQorCQl7CisJCQlpZiAocmVzdWx0ID09IE5VTEwp CisJCQkJcmVzdWx0ID0gcGFsbG9jMChsZW4gKyB0bXAgKyAxKTsKKwkJCWVs c2UKKwkJCQlyZXN1bHQgPSByZXBhbGxvYyhyZXN1bHQsIGxlbiArIHRtcCAr IDEpOworCisJCQlzdHJjcHkocmVzdWx0ICsgbGVuLCBidWZmZXIpOworCQkJ bGVuICs9IHRtcDsKKwkJfQorCX0KKworCVBHX1JFVFVSTl9URVhUX1AoY3N0 cmluZ190b190ZXh0KHJlc3VsdCkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpp bmRleCBmZDhkYzkxLi44Y2U5YzBlIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpA QCAtMjEwNCw2ICsyMTA0LDUwIEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxz KGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQlQUWNsZWFyKHJlc3VsdCk7 CiAJCX0KIAorCQkvKiBwcmludCBhbnkgbXVsdGl2YXJpYXRlIHN0YXRpc3Rp Y3MgKi8KKwkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gOTA2MDApCisJCXsKKwkJ CXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICAiU0VMRUNUIG9p ZCwgc3RhbmFtZXNwYWNlOjpyZWduYW1lc3BhY2UgQVMgbnNwLCBzdGFuYW1l LCBzdGFrZXlzLFxuIgorCQkJCQkJICAgIiAgZGVwc19lbmFibGVkLFxuIgor CQkJCQkJICAgIiAgZGVwc19idWlsdCxcbiIKKwkJCQkJCSAgICIgIChTRUxF Q1Qgc3RyaW5nX2FnZyhhdHRuYW1lOjp0ZXh0LCcsICcpXG4iCisJCQkJCQkg ICAiICAgIEZST00gKChTRUxFQ1QgdW5uZXN0KHN0YWtleXMpIEFTIGF0dG51 bSkgc1xuIgorCQkJCQkJICAgIiAgICAgICAgIEpPSU4gcGdfYXR0cmlidXRl IGEgT04gKHN0YXJlbGlkID0gYS5hdHRyZWxpZCBhbmQgYS5hdHRudW0gPSBz LmF0dG51bSkpKSBBUyBhdHRudW1zXG4iCisJCQkJCQkgICAiRlJPTSBwZ19t dl9zdGF0aXN0aWMgc3RhdCBXSEVSRSBzdGFyZWxpZCAgPSAnJXMnIE9SREVS IEJZIDE7IiwKKwkJCQkJCQkgIG9pZCk7CisKKwkJCXJlc3VsdCA9IFBTUUxl eGVjKGJ1Zi5kYXRhKTsKKwkJCWlmICghcmVzdWx0KQorCQkJCWdvdG8gZXJy b3JfcmV0dXJuOworCQkJZWxzZQorCQkJCXR1cGxlcyA9IFBRbnR1cGxlcyhy ZXN1bHQpOworCisJCQlpZiAodHVwbGVzID4gMCkKKwkJCXsKKwkJCQlwcmlu dFRhYmxlQWRkRm9vdGVyKCZjb250LCBfKCJTdGF0aXN0aWNzOiIpKTsKKwkJ CQlmb3IgKGkgPSAwOyBpIDwgdHVwbGVzOyBpKyspCisJCQkJeworCQkJCQlw cmludGZQUUV4cEJ1ZmZlcigmYnVmLCAiICAgICIpOworCisJCQkJCS8qIHN0 YXRpc3RpY3MgbmFtZSAocXVhbGlmaWVkIHdpdGggbmFtZXNwYWNlKSAqLwor CQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiXCIlcy4lc1wiICIsCisJ CQkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzdWx0LCBpLCAxKSwKKwkJCQkJCQkJ CSAgUFFnZXR2YWx1ZShyZXN1bHQsIGksIDIpKTsKKworCQkJCQkvKiAgb3B0 aW9ucyAqLworCQkJCQlpZiAoIXN0cmNtcChQUWdldHZhbHVlKHJlc3VsdCwg aSwgNCksICJ0IikpCisJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAi KGRlcGVuZGVuY2llcykiKTsKKworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLCAiIE9OICglcykiLAorCQkJCQkJCVBRZ2V0dmFsdWUocmVzdWx0LCBp LCA2KSk7CisKKwkJCQkJcHJpbnRUYWJsZUFkZEZvb3RlcigmY29udCwgYnVm LmRhdGEpOworCQkJCX0KKwkJCX0KKwkJCVBRY2xlYXIocmVzdWx0KTsKKwkJ fQorCiAJCS8qIHByaW50IHJ1bGVzICovCiAJCWlmICh0YWJsZWluZm8uaGFz cnVsZXMgJiYgdGFibGVpbmZvLnJlbGtpbmQgIT0gJ20nKQogCQl7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCmluZGV4IDA0OWJmOWYu LjEyMjExZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVw ZW5kZW5jeS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5j eS5oCkBAIC0xNTMsMTAgKzE1MywxMSBAQCB0eXBlZGVmIGVudW0gT2JqZWN0 Q2xhc3MKIAlPQ0xBU1NfRVhURU5TSU9OLAkJCS8qIHBnX2V4dGVuc2lvbiAq LwogCU9DTEFTU19FVkVOVF9UUklHR0VSLAkJLyogcGdfZXZlbnRfdHJpZ2dl ciAqLwogCU9DTEFTU19QT0xJQ1ksCQkJCS8qIHBnX3BvbGljeSAqLwotCU9D TEFTU19UUkFOU0ZPUk0JCQkvKiBwZ190cmFuc2Zvcm0gKi8KKwlPQ0xBU1Nf VFJBTlNGT1JNLAkJCS8qIHBnX3RyYW5zZm9ybSAqLworCU9DTEFTU19TVEFU SVNUSUNTCQkJLyogcGdfbXZfc3RhdGlzdGljcyAqLwogfSBPYmplY3RDbGFz czsKIAotI2RlZmluZSBMQVNUX09DTEFTUwkJT0NMQVNTX1RSQU5TRk9STQor I2RlZmluZSBMQVNUX09DTEFTUwkJT0NMQVNTX1NUQVRJU1RJQ1MKIAogCiAv KiBpbiBkZXBlbmRlbmN5LmMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvaGVhcC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9oZWFwLmgK aW5kZXggYjgwZDhkOC4uNWFlNDJmNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9oZWFwLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9o ZWFwLmgKQEAgLTExOSw2ICsxMTksNyBAQCBleHRlcm4gdm9pZCBSZW1vdmVB dHRyRGVmYXVsdChPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtLAogCQkJ CSAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yLCBib29sIGNvbXBsYWluLCBib29s IGludGVybmFsKTsKIGV4dGVybiB2b2lkIFJlbW92ZUF0dHJEZWZhdWx0QnlJ ZChPaWQgYXR0cmRlZklkKTsKIGV4dGVybiB2b2lkIFJlbW92ZVN0YXRpc3Rp Y3MoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSk7CitleHRlcm4gdm9p ZCBSZW1vdmVNVlN0YXRpc3RpY3MoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0 dG51bSk7CiAKIGV4dGVybiBGb3JtX3BnX2F0dHJpYnV0ZSBTeXN0ZW1BdHRy aWJ1dGVEZWZpbml0aW9uKEF0dHJOdW1iZXIgYXR0bm8sCiAJCQkJCQkgIGJv b2wgcmVsaGFzb2lkcyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL2luZGV4aW5nLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4aW5n LmgKaW5kZXggYWIyYzFhOC4uYTc2OGJiNSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9pbmRleGluZy5oCisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvaW5kZXhpbmcuaApAQCAtMTczLDYgKzE3MywxMyBAQCBERUNMQVJF X1VOSVFVRV9JTkRFWChwZ19sYXJnZW9iamVjdF9sb2lkX3BuX2luZGV4LCAy NjgzLCBvbiBwZ19sYXJnZW9iamVjdCB1c2luZwogREVDTEFSRV9VTklRVUVf SU5ERVgocGdfbGFyZ2VvYmplY3RfbWV0YWRhdGFfb2lkX2luZGV4LCAyOTk2 LCBvbiBwZ19sYXJnZW9iamVjdF9tZXRhZGF0YSB1c2luZyBidHJlZShvaWQg b2lkX29wcykpOwogI2RlZmluZSBMYXJnZU9iamVjdE1ldGFkYXRhT2lkSW5k ZXhJZAkyOTk2CiAKK0RFQ0xBUkVfVU5JUVVFX0lOREVYKHBnX212X3N0YXRp c3RpY19vaWRfaW5kZXgsIDMzODAsIG9uIHBnX212X3N0YXRpc3RpYyB1c2lu ZyBidHJlZShvaWQgb2lkX29wcykpOworI2RlZmluZSBNdlN0YXRpc3RpY09p ZEluZGV4SWQgIDMzODAKK0RFQ0xBUkVfVU5JUVVFX0lOREVYKHBnX212X3N0 YXRpc3RpY19uYW1lX2luZGV4LCAzOTk3LCBvbiBwZ19tdl9zdGF0aXN0aWMg dXNpbmcgYnRyZWUoc3RhbmFtZSBuYW1lX29wcywgc3RhbmFtZXNwYWNlIG9p ZF9vcHMpKTsKKyNkZWZpbmUgTXZTdGF0aXN0aWNOYW1lSW5kZXhJZCAgMzk5 NworREVDTEFSRV9JTkRFWChwZ19tdl9zdGF0aXN0aWNfcmVsaWRfaW5kZXgs IDMzNzksIG9uIHBnX212X3N0YXRpc3RpYyB1c2luZyBidHJlZShzdGFyZWxp ZCBvaWRfb3BzKSk7CisjZGVmaW5lIE12U3RhdGlzdGljUmVsaWRJbmRleElk CTMzNzkKKwogREVDTEFSRV9VTklRVUVfSU5ERVgocGdfbmFtZXNwYWNlX25z cG5hbWVfaW5kZXgsIDI2ODQsIG9uIHBnX25hbWVzcGFjZSB1c2luZyBidHJl ZShuc3BuYW1lIG5hbWVfb3BzKSk7CiAjZGVmaW5lIE5hbWVzcGFjZU5hbWVJ bmRleElkICAyNjg0CiBERUNMQVJFX1VOSVFVRV9JTkRFWChwZ19uYW1lc3Bh Y2Vfb2lkX2luZGV4LCAyNjg1LCBvbiBwZ19uYW1lc3BhY2UgdXNpbmcgYnRy ZWUob2lkIG9pZF9vcHMpKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvbmFtZXNwYWNlLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL25hbWVz cGFjZS5oCmluZGV4IDJjY2IzYTcuLjQ0Y2Y5YzYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvbmFtZXNwYWNlLmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9uYW1lc3BhY2UuaApAQCAtMTM3LDYgKzEzNyw4IEBAIGV4 dGVybiBPaWQJZ2V0X2NvbGxhdGlvbl9vaWQoTGlzdCAqY29sbG5hbWUsIGJv b2wgbWlzc2luZ19vayk7CiBleHRlcm4gT2lkCWdldF9jb252ZXJzaW9uX29p ZChMaXN0ICpjb25uYW1lLCBib29sIG1pc3Npbmdfb2spOwogZXh0ZXJuIE9p ZAlGaW5kRGVmYXVsdENvbnZlcnNpb25Qcm9jKGludDMyIGZvcl9lbmNvZGlu ZywgaW50MzIgdG9fZW5jb2RpbmcpOwogCitleHRlcm4gT2lkCWdldF9zdGF0 aXN0aWNzX29pZChMaXN0ICpuYW1lcywgYm9vbCBtaXNzaW5nX29rKTsKKwog LyogaW5pdGlhbGl6YXRpb24gJiB0cmFuc2FjdGlvbiBjbGVhbnVwIGNvZGUg Ki8KIGV4dGVybiB2b2lkIEluaXRpYWxpemVTZWFyY2hQYXRoKHZvaWQpOwog ZXh0ZXJuIHZvaWQgQXRFT1hhY3RfTmFtZXNwYWNlKGJvb2wgaXNDb21taXQs IGJvb2wgcGFyYWxsZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfbXZfc3RhdGlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzc0YWY0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKQEAgLTAsMCArMSw3NSBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdf bXZfc3RhdGlzdGljLmgKKyAqCSAgZGVmaW5pdGlvbiBvZiB0aGUgc3lzdGVt ICJtdWx0aXZhcmlhdGUgc3RhdGlzdGljIiByZWxhdGlvbiAocGdfbXZfc3Rh dGlzdGljKQorICoJICBhbG9uZyB3aXRoIHRoZSByZWxhdGlvbidzIGluaXRp YWwgY29udGVudHMuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDE0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oCisgKgorICogTk9U RVMKKyAqCSAgdGhlIGdlbmJraS5wbCBzY3JpcHQgcmVhZHMgdGhpcyBmaWxl IGFuZCBnZW5lcmF0ZXMgLmJraQorICoJICBpbmZvcm1hdGlvbiBmcm9tIHRo ZSBEQVRBKCkgc3RhdGVtZW50cy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19NVl9TVEFUSVNUSUNfSAor I2RlZmluZSBQR19NVl9TVEFUSVNUSUNfSAorCisjaW5jbHVkZSAiY2F0YWxv Zy9nZW5ia2kuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCXBnX212 X3N0YXRpc3RpYyBkZWZpbml0aW9uLiAgY3BwIHR1cm5zIHRoaXMgaW50bwor ICoJCXR5cGVkZWYgc3RydWN0IEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYwor ICogLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE12U3RhdGlzdGlj UmVsYXRpb25JZCAgMzM4MQorCitDQVRBTE9HKHBnX212X3N0YXRpc3RpYywz MzgxKQoreworCS8qIFRoZXNlIGZpZWxkcyBmb3JtIHRoZSB1bmlxdWUga2V5 IGZvciB0aGUgZW50cnk6ICovCisJT2lkCQkJc3RhcmVsaWQ7CQkJLyogcmVs YXRpb24gY29udGFpbmluZyBhdHRyaWJ1dGVzICovCisJTmFtZURhdGEJc3Rh bmFtZTsJCQkvKiBzdGF0aXN0aWNzIG5hbWUgKi8KKwlPaWQJCQlzdGFuYW1l c3BhY2U7CQkvKiBPSUQgb2YgbmFtZXNwYWNlIGNvbnRhaW5pbmcgdGhpcyBz dGF0aXN0aWNzICovCisJT2lkCQkJc3Rhb3duZXI7CQkJLyogc3RhdGlzdGlj cyBvd25lciAqLworCisJLyogc3RhdGlzdGljcyByZXF1ZXN0ZWQgdG8gYnVp bGQgKi8KKwlib29sCQlkZXBzX2VuYWJsZWQ7CQkvKiBhbmFseXplIGRlcGVu ZGVuY2llcz8gKi8KKworCS8qIHN0YXRpc3RpY3MgdGhhdCBhcmUgYXZhaWxh YmxlIChpZiByZXF1ZXN0ZWQpICovCisJYm9vbAkJZGVwc19idWlsdDsJCQkv KiBkZXBlbmRlbmNpZXMgd2VyZSBidWlsdCAqLworCisJLyogdmFyaWFibGUt bGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJlLCBidXQgd2UgYWxsb3cgZGlyZWN0 IGFjY2VzcyB0byBzdGFrZXlzICovCisJaW50MnZlY3RvcglzdGFrZXlzOwkJ CS8qIGFycmF5IG9mIGNvbHVtbiBrZXlzICovCisKKyNpZmRlZiBDQVRBTE9H X1ZBUkxFTgorCWJ5dGVhCQlzdGFkZXBzOwkJCS8qIGRlcGVuZGVuY2llcyAo c2VyaWFsaXplZCkgKi8KKyNlbmRpZgorCit9IEZvcm1EYXRhX3BnX212X3N0 YXRpc3RpYzsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCUZvcm1fcGdf bXZfc3RhdGlzdGljIGNvcnJlc3BvbmRzIHRvIGEgcG9pbnRlciB0byBhIHR1 cGxlIHdpdGgKKyAqCQl0aGUgZm9ybWF0IG9mIHBnX212X3N0YXRpc3RpYyBy ZWxhdGlvbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordHlwZWRlZiBG b3JtRGF0YV9wZ19tdl9zdGF0aXN0aWMgKkZvcm1fcGdfbXZfc3RhdGlzdGlj OworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJY29tcGlsZXIgY29uc3Rh bnRzIGZvciBwZ19tdl9zdGF0aXN0aWMKKyAqIC0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTgKKyNk ZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQJCQkxCisjZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5hbWUJCQkyCisjZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW5hbWVzcGFjZQkJMworI2RlZmlu ZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFvd25lcgkJCTQKKyNkZWZpbmUg QW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkCQk1CisjZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJCQk2CisjZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMJCQk3CisjZGVmaW5lIEFu dW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQk4CisKKyNlbmRpZiAgIC8q IFBHX01WX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5oCmluZGV4IDVjNzFiY2UuLmZmMmQ3OTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5oCkBAIC0yNjY2LDYgKzI2NjYsMTEgQEAgREVT Q1IoImN1cnJlbnQgdXNlciBwcml2aWxlZ2Ugb24gYW55IGNvbHVtbiBieSBy ZWwgbmFtZSIpOwogREFUQShpbnNlcnQgT0lEID0gMzAyOSAoICBoYXNfYW55 X2NvbHVtbl9wcml2aWxlZ2UJICAgUEdOU1AgUEdVSUQgMTIgMTAgMCAwIDAg ZiBmIGYgZiB0IGYgcyBzIDIgMCAxNiAiMjYgMjUiIF9udWxsXyBfbnVsbF8g X251bGxfIF9udWxsXyBfbnVsbF8gaGFzX2FueV9jb2x1bW5fcHJpdmlsZWdl X2lkIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoImN1cnJlbnQg dXNlciBwcml2aWxlZ2Ugb24gYW55IGNvbHVtbiBieSByZWwgb2lkIik7CiAK K0RBVEEoaW5zZXJ0IE9JRCA9IDM5OTggKCAgcGdfbXZfc3RhdHNfZGVwZW5k ZW5jaWVzX2luZm8gICAgIFBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYg ZiB0IGYgaSBzIDEgMCAyNSAiMTciIF9udWxsXyBfbnVsbF8gX251bGxfIF9u dWxsXyBfbnVsbF8gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8gX251 bGxfIF9udWxsXyBfbnVsbF8gKSk7CitERVNDUigibXVsdGl2YXJpYXRlIHN0 YXRzOiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBpbmZvIik7CitEQVRBKGlu c2VydCBPSUQgPSAzOTk5ICggIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19z aG93ICAgICBQR05TUCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIGkg cyAxIDAgMjUgIjE3IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251 bGxfIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IF9udWxsXyBfbnVs bF8gX251bGxfICkpOworREVTQ1IoIm11bHRpdmFyaWF0ZSBzdGF0czogZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMgc2hvdyIpOworCiBEQVRBKGluc2VydCBP SUQgPSAxOTI4ICggIHBnX3N0YXRfZ2V0X251bXNjYW5zCQkJUEdOU1AgUEdV SUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBzIHIgMSAwIDIwICIyNiIgX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19zdGF0X2dldF9u dW1zY2FucyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKIERFU0NSKCJzdGF0 aXN0aWNzOiBudW1iZXIgb2Ygc2NhbnMgZG9uZSBmb3IgdGFibGUvaW5kZXgi KTsKIERBVEEoaW5zZXJ0IE9JRCA9IDE5MjkgKCAgcGdfc3RhdF9nZXRfdHVw bGVzX3JldHVybmVkCVBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0 IGYgcyByIDEgMCAyMCAiMjYiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxs XyBfbnVsbF8gcGdfc3RhdF9nZXRfdHVwbGVzX3JldHVybmVkIF9udWxsXyBf bnVsbF8gX251bGxfICkpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy90b2FzdGluZy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy90b2FzdGlu Zy5oCmluZGV4IGI3YTM4Y2UuLmE1MjA5NmIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvdG9hc3RpbmcuaAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3RvYXN0aW5nLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgZXh0ZXJuIHZv aWQgQm9vdHN0cmFwVG9hc3RUYWJsZShjaGFyICpyZWxOYW1lLAogREVDTEFS RV9UT0FTVChwZ19hdHRyZGVmLCAyODMwLCAyODMxKTsKIERFQ0xBUkVfVE9B U1QocGdfY29uc3RyYWludCwgMjgzMiwgMjgzMyk7CiBERUNMQVJFX1RPQVNU KHBnX2Rlc2NyaXB0aW9uLCAyODM0LCAyODM1KTsKK0RFQ0xBUkVfVE9BU1Qo cGdfbXZfc3RhdGlzdGljLCAzNTc3LCAzNTc4KTsKIERFQ0xBUkVfVE9BU1Qo cGdfcHJvYywgMjgzNiwgMjgzNyk7CiBERUNMQVJFX1RPQVNUKHBnX3Jld3Jp dGUsIDI4MzgsIDI4MzkpOwogREVDTEFSRV9UT0FTVChwZ19zZWNsYWJlbCwg MzU5OCwgMzU5OSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9kZWZyZW0uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCmlu ZGV4IDU0ZjY3ZTkuLjk5YTZhNjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2RlZnJlbS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2RlZnJlbS5oCkBAIC03NSw2ICs3NSwxMCBAQCBleHRlcm4gT2JqZWN0QWRk cmVzcyBEZWZpbmVPcGVyYXRvcihMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1l dGVycyk7CiBleHRlcm4gdm9pZCBSZW1vdmVPcGVyYXRvckJ5SWQoT2lkIG9w ZXJPaWQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJPcGVyYXRvcihB bHRlck9wZXJhdG9yU3RtdCAqc3RtdCk7CiAKKy8qIGNvbW1hbmRzL3N0YXRz Y21kcy5jICovCitleHRlcm4gT2JqZWN0QWRkcmVzcyBDcmVhdGVTdGF0aXN0 aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCk7CitleHRlcm4gdm9pZCBSZW1v dmVTdGF0aXN0aWNzQnlJZChPaWQgc3RhdHNPaWQpOworCiAvKiBjb21tYW5k cy9hZ2dyZWdhdGVjbWRzLmMgKi8KIGV4dGVybiBPYmplY3RBZGRyZXNzIERl ZmluZUFnZ3JlZ2F0ZShMaXN0ICpuYW1lLCBMaXN0ICphcmdzLCBib29sIG9s ZHN0eWxlLAogCQkJCUxpc3QgKnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKnF1 ZXJ5U3RyaW5nKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IGZhZDk5 ODguLjU0NWI2MmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjY2 LDYgKzI2Niw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9QbGFjZUhv bGRlckluZm8sCiAJVF9NaW5NYXhBZ2dJbmZvLAogCVRfUGxhbm5lclBhcmFt SXRlbSwKKwlUX01WU3RhdGlzdGljSW5mbywKIAogCS8qCiAJICogVEFHUyBG T1IgTUVNT1JZIE5PREVTIChtZW1ub2Rlcy5oKQpAQCAtNDAxLDYgKzQwMiw3 IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9DcmVhdGVQb2xpY3lTdG10 LAogCVRfQWx0ZXJQb2xpY3lTdG10LAogCVRfQ3JlYXRlVHJhbnNmb3JtU3Rt dCwKKwlUX0NyZWF0ZVN0YXRzU3RtdCwKIAogCS8qCiAJICogVEFHUyBGT1Ig UEFSU0UgVFJFRSBOT0RFUyAocGFyc2Vub2Rlcy5oKQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDJmZDA2MjkuLmUxODA3ZmIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTYwMSw2ICs2 MDEsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sdW1uRGVmCiAJaW50CQkJbG9j YXRpb247CQkvKiBwYXJzZSBsb2NhdGlvbiwgb3IgLTEgaWYgbm9uZS91bmtu b3duICovCiB9IENvbHVtbkRlZjsKIAordHlwZWRlZiBzdHJ1Y3QgQ3JlYXRl U3RhdHNTdG10Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlMaXN0CSAgICpkZWZu YW1lczsJCS8qIHF1YWxpZmllZCBuYW1lIChsaXN0IG9mIFZhbHVlIHN0cmlu Z3MpICovCisJUmFuZ2VWYXIgICAqcmVsYXRpb247CQkvKiByZWxhdGlvbiB0 byBidWlsZCBzdGF0aXN0aWNzIG9uICovCisJTGlzdAkgICAqa2V5czsJCQkv KiBTdHJpbmcgbm9kZXMgbmFtaW5nIHJlZmVyZW5jZWQgY29sdW1uKHMpICov CisJTGlzdAkgICAqb3B0aW9uczsJCS8qIGxpc3Qgb2YgRGVmRWxlbSBub2Rl cyAqLworCWJvb2wJCWlmX25vdF9leGlzdHM7CS8qIGp1c3QgZG8gbm90aGlu ZyBpZiBzdGF0aXN0aWNzIGFscmVhZHkgZXhpc3RzPyAqLworfSBDcmVhdGVT dGF0c1N0bXQ7CisKKwogLyoKICAqIFRhYmxlTGlrZUNsYXVzZSAtIENSRUFU RSBUQUJMRSAoIC4uLiBMSUtFIC4uLiApIGNsYXVzZQogICovCkBAIC0xNDEw LDYgKzE0MjEsNyBAQCB0eXBlZGVmIGVudW0gT2JqZWN0VHlwZQogCU9CSkVD VF9SVUxFLAogCU9CSkVDVF9TQ0hFTUEsCiAJT0JKRUNUX1NFUVVFTkNFLAor CU9CSkVDVF9TVEFUSVNUSUNTLAogCU9CSkVDVF9UQUJDT05TVFJBSU5ULAog CU9CSkVDVF9UQUJMRSwKIAlPQkpFQ1RfVEFCTEVTUEFDRSwKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9yZWxhdGlvbi5oCmluZGV4IDY0MTcyOGIuLmUxMGRjZjEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaApAQCAtNTM5LDYgKzUzOSw3 IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlMaXN0CSAgICpsYXRl cmFsX3ZhcnM7CS8qIExBVEVSQUwgVmFycyBhbmQgUEhWcyByZWZlcmVuY2Vk IGJ5IHJlbCAqLwogCVJlbGlkcwkJbGF0ZXJhbF9yZWZlcmVuY2VyczsJLyog cmVscyB0aGF0IHJlZmVyZW5jZSBtZSBsYXRlcmFsbHkgKi8KIAlMaXN0CSAg ICppbmRleGxpc3Q7CQkvKiBsaXN0IG9mIEluZGV4T3B0SW5mbyAqLworCUxp c3QJICAgKm12c3RhdGxpc3Q7CQkvKiBsaXN0IG9mIE1WU3RhdGlzdGljSW5m byAqLwogCUJsb2NrTnVtYmVyIHBhZ2VzOwkJCS8qIHNpemUgZXN0aW1hdGVz IGRlcml2ZWQgZnJvbSBwZ19jbGFzcyAqLwogCWRvdWJsZQkJdHVwbGVzOwog CWRvdWJsZQkJYWxsdmlzZnJhYzsKQEAgLTYzNCw2ICs2MzUsMzMgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJdm9pZAkJKCphbWNvc3Rlc3Rp bWF0ZSkgKCk7CS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIH0gSW5kZXhP cHRJbmZvOwogCisvKgorICogTVZTdGF0aXN0aWNJbmZvCisgKgkJSW5mb3Jt YXRpb24gYWJvdXQgbXVsdGl2YXJpYXRlIHN0YXRzIGZvciBwbGFubmluZy9v cHRpbWl6YXRpb24KKyAqCisgKiBUaGlzIGNvbnRhaW5zIGluZm9ybWF0aW9u IGFib3V0IHdoaWNoIGNvbHVtbnMgYXJlIGNvdmVyZWQgYnkgdGhlCisgKiBz dGF0aXN0aWNzIChzdGFrZXlzKSwgd2hpY2ggb3B0aW9ucyB3ZXJlIHJlcXVl c3RlZCB3aGlsZSBhZGRpbmcgdGhlCisgKiBzdGF0aXN0aWNzICgqX2VuYWJs ZWQpLCBhbmQgd2hpY2gga2luZHMgb2Ygc3RhdGlzdGljcyB3ZXJlIGFjdHVh bGx5CisgKiBidWlsdCBhbmQgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIG9wdGlt aXplciAoKl9idWlsdCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IE1WU3RhdGlz dGljSW5mbworeworCU5vZGVUYWcJCXR5cGU7CisKKwlPaWQJCQltdm9pZDsJ CQkvKiBPSUQgb2YgdGhlIHN0YXRpc3RpY3Mgcm93ICovCisJUmVsT3B0SW5m byAqcmVsOwkJCS8qIGJhY2stbGluayB0byBpbmRleCdzIHRhYmxlICovCisK KwkvKiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KKwlib29sCQlkZXBzX2VuYWJs ZWQ7CS8qIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGVuYWJsZWQgKi8KKwor CS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICovCisJYm9vbAkJZGVw c19idWlsdDsJCS8qIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGJ1aWx0ICov CisKKwkvKiBjb2x1bW5zIGluIHRoZSBzdGF0aXN0aWNzIChhdHRudW1zKSAq LworCWludDJ2ZWN0b3IgKnN0YWtleXM7CQkvKiBhdHRudW1zIG9mIHRoZSBj b2x1bW5zIGNvdmVyZWQgKi8KKworfSBNVlN0YXRpc3RpY0luZm87CisKIAog LyoKICAqIEVxdWl2YWxlbmNlQ2xhc3NlcwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvYWNsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2wuaApp bmRleCA0ZTE1YTE0Li4zZTExMjUzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9hY2wuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2wuaApA QCAtMzMwLDYgKzMzMCw3IEBAIGV4dGVybiBib29sIHBnX2ZvcmVpZ25fZGF0 YV93cmFwcGVyX293bmVyY2hlY2soT2lkIHNydl9vaWQsIE9pZCByb2xlaWQp OwogZXh0ZXJuIGJvb2wgcGdfZm9yZWlnbl9zZXJ2ZXJfb3duZXJjaGVjayhP aWQgc3J2X29pZCwgT2lkIHJvbGVpZCk7CiBleHRlcm4gYm9vbCBwZ19ldmVu dF90cmlnZ2VyX293bmVyY2hlY2soT2lkIGV0X29pZCwgT2lkIHJvbGVpZCk7 CiBleHRlcm4gYm9vbCBwZ19leHRlbnNpb25fb3duZXJjaGVjayhPaWQgZXh0 X29pZCwgT2lkIHJvbGVpZCk7CitleHRlcm4gYm9vbCBwZ19zdGF0aXN0aWNz X293bmVyY2hlY2soT2lkIHN0YXRfb2lkLCBPaWQgcm9sZWlkKTsKIGV4dGVy biBib29sIGhhc19jcmVhdGVyb2xlX3ByaXZpbGVnZShPaWQgcm9sZWlkKTsK IGV4dGVybiBib29sIGhhc19ieXBhc3NybHNfcHJpdmlsZWdlKE9pZCByb2xl aWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRz LmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViZDk2MQotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApAQCAtMCwwICsx LDcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBtdnN0YXRzLmgKKyAqCSAgTXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgYW5k IHNlbGVjdGl2aXR5IGVzdGltYXRpb24gZnVuY3Rpb25zLgorICoKKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNCwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgTVZTVEFUU19ICisjZGVmaW5lIE1WU1RBVFNfSAorCisjaW5jbHVk ZSAiZm1nci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorCisK KyNkZWZpbmUgTVZTVEFUU19NQVhfRElNRU5TSU9OUwk4CQkvKiBtYXggbnVt YmVyIG9mIGF0dHJpYnV0ZXMgKi8KKworLyogQW4gYXNzb2NpYXRpdmUgcnVs ZSwgdHJhY2tpbmcgW2EgPT4gYl0gZGVwZW5kZW5jeS4KKyAqCisgKiBUT0RP IE1ha2UgdGhpcyB3b3JrIHdpdGggbXVsdGlwbGUgY29sdW1ucyBvbiBib3Ro IHNpZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBNVkRlcGVuZGVuY3lEYXRh IHsKKwlpbnQxNglhOworCWludDE2CWI7Cit9IE1WRGVwZW5kZW5jeURhdGE7 CisKK3R5cGVkZWYgTVZEZXBlbmRlbmN5RGF0YSogTVZEZXBlbmRlbmN5Owor Cit0eXBlZGVmIHN0cnVjdCBNVkRlcGVuZGVuY2llc0RhdGEgeworCXVpbnQz MgkJCW1hZ2ljOwkJLyogbWFnaWMgY29uc3RhbnQgbWFya2VyICovCisJaW50 MzIJCQluZGVwczsJCS8qIG51bWJlciBvZiBkZXBlbmRlbmNpZXMgKi8KKwlN VkRlcGVuZGVuY3kJZGVwc1sxXTsJLyogWFhYIHdoeSBub3QgYSBwb2ludGVy PyAqLworfSBNVkRlcGVuZGVuY2llc0RhdGE7CisKK3R5cGVkZWYgTVZEZXBl bmRlbmNpZXNEYXRhKiBNVkRlcGVuZGVuY2llczsKKworI2RlZmluZSBNVlNU QVRfREVQU19NQUdJQwkJMHhCNDU0OUEyQwkvKiBtYXJrcyBzZXJpYWxpemVk IGJ5dGVhICovCisjZGVmaW5lIE1WU1RBVF9ERVBTX1RZUEVfQkFTSUMJMQkJ CS8qIGJhc2ljIGRlcGVuZGVuY2llcyB0eXBlICovCisKKy8qCisgKiBUT0RP IE1heWJlIGZldGNoaW5nIHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qgc2VwYXJh dGVseSBpcyBpbmVmZmljaWVudD8KKyAqICAgICAgQ29uc2lkZXIgYWRkaW5n IGEgc2luZ2xlIGBmZXRjaF9zdGF0c2AgbWV0aG9kLCBmZXRjaGluZyBhbGwK KyAqICAgICAgc3RhdHMgc3BlY2lmaWVkIHVzaW5nIGZsYWdzIChvciBzb21l dGhpbmcgbGlrZSB0aGF0KS4KKyAqLworCitieXRlYSAqIHNlcmlhbGl6ZV9t dl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKTsK KworLyogZGVzZXJpYWxpemF0aW9uIG9mIHN0YXRzIChzZXJpYWxpemF0aW9u IGlzIHByaXZhdGUgdG8gYW5hbHl6ZSkgKi8KK01WRGVwZW5kZW5jaWVzCWRl c2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhieXRlYSAqIGRhdGEpOworCisv KiBGSVhNRSB0aGlzIHByb2JhYmx5IGJlbG9uZ3Mgc29tZXdoZXJlIGVsc2Ug KG5vdCB0byBvcGVyYXRpb25zIHN0YXRzKSAqLworZXh0ZXJuIERhdHVtIHBn X212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBHX0ZVTkNUSU9OX0FSR1Mp OworZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93 KFBHX0ZVTkNUSU9OX0FSR1MpOworCitNVkRlcGVuZGVuY2llcworYnVpbGRf bXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3Ms CisJCQkJCQkJCSAgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJCSAgVmFj QXR0clN0YXRzICoqc3RhdHMpOworCit2b2lkIGJ1aWxkX212X3N0YXRzKFJl bGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywK KwkJCQkJCSAgIGludCBuYXR0cywgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0 YXRzKTsKKwordm9pZCB1cGRhdGVfbXZfc3RhdHMoT2lkIHJlbGlkLCBNVkRl cGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0dHJzKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGYyYmViZjIuLjg3 NzFmOWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC02MSw2ICs2MSw3IEBA IHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogCWJvb2wJCXJkX2lzdmFs aWQ7CQkvKiByZWxjYWNoZSBlbnRyeSBpcyB2YWxpZCAqLwogCWNoYXIJCXJk X2luZGV4dmFsaWQ7CS8qIHN0YXRlIG9mIHJkX2luZGV4bGlzdDogMCA9IG5v dCB2YWxpZCwgMSA9CiAJCQkJCQkJCSAqIHZhbGlkLCAyID0gdGVtcG9yYXJp bHkgZm9yY2VkICovCisJYm9vbAkJcmRfbXZzdGF0dmFsaWQ7CS8qIHN0YXRl IG9mIHJkX212c3RhdGxpc3Q6IHRydWUvZmFsc2UgKi8KIAogCS8qCiAJICog cmRfY3JlYXRlU3ViaWQgaXMgdGhlIElEIG9mIHRoZSBoaWdoZXN0IHN1YnRy YW5zYWN0aW9uIHRoZSByZWwgaGFzCkBAIC05Myw2ICs5NCw5IEBAIHR5cGVk ZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogCUxpc3QJICAgKnJkX2luZGV4bGlz dDsJLyogbGlzdCBvZiBPSURzIG9mIGluZGV4ZXMgb24gcmVsYXRpb24gKi8K IAlPaWQJCQlyZF9vaWRpbmRleDsJLyogT0lEIG9mIHVuaXF1ZSBpbmRleCBv biBPSUQsIGlmIGFueSAqLwogCU9pZAkJCXJkX3JlcGxpZGluZGV4OyAvKiBP SUQgb2YgcmVwbGljYSBpZGVudGl0eSBpbmRleCwgaWYgYW55ICovCisgCisJ LyogZGF0YSBtYW5hZ2VkIGJ5IFJlbGF0aW9uR2V0TVZTdGF0TGlzdDogKi8K KwlMaXN0CSAgICpyZF9tdnN0YXRsaXN0OwkvKiBsaXN0IG9mIE9JRHMgb2Yg bXVsdGl2YXJpYXRlIHN0YXRzICovCiAKIAkvKiBkYXRhIG1hbmFnZWQgYnkg UmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXA6ICovCiAJQml0bWFwc2V0ICAq cmRfaW5kZXhhdHRyOwkvKiBpZGVudGlmaWVzIGNvbHVtbnMgdXNlZCBpbiBp bmRleGVzICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWxj YWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaAppbmRleCAx YjQ4MzA0Li45ZjAzYzhkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy9yZWxjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hl LmgKQEAgLTM4LDYgKzM4LDcgQEAgZXh0ZXJuIHZvaWQgUmVsYXRpb25DbG9z ZShSZWxhdGlvbiByZWxhdGlvbik7CiAgKiBSb3V0aW5lcyB0byBjb21wdXRl L3JldHJpZXZlIGFkZGl0aW9uYWwgY2FjaGVkIGluZm9ybWF0aW9uCiAgKi8K IGV4dGVybiBMaXN0ICpSZWxhdGlvbkdldEluZGV4TGlzdChSZWxhdGlvbiBy ZWxhdGlvbik7CitleHRlcm4gTGlzdCAqUmVsYXRpb25HZXRNVlN0YXRMaXN0 KFJlbGF0aW9uIHJlbGF0aW9uKTsKIGV4dGVybiBPaWQJUmVsYXRpb25HZXRP aWRJbmRleChSZWxhdGlvbiByZWxhdGlvbik7CiBleHRlcm4gT2lkCVJlbGF0 aW9uR2V0UmVwbGljYUluZGV4KFJlbGF0aW9uIHJlbGF0aW9uKTsKIGV4dGVy biBMaXN0ICpSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMoUmVsYXRpb24g cmVsYXRpb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvc3lz Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3N5c2NhY2hlLmgKaW5kZXgg MjU2NjE1Yi4uMGUwNjU4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvc3lzY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zeXNjYWNo ZS5oCkBAIC02Niw2ICs2Niw4IEBAIGVudW0gU3lzQ2FjaGVJZGVudGlmaWVy CiAJSU5ERVhSRUxJRCwKIAlMQU5HTkFNRSwKIAlMQU5HT0lELAorCU1WU1RB VE5BTUVOU1AsCisJTVZTVEFUT0lELAogCU5BTUVTUEFDRU5BTUUsCiAJTkFN RVNQQUNFT0lELAogCU9QRVJOQU1FTlNQLApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAppbmRl eCA3NTc1MWJlLi5lYjYwOTYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dApAQCAtMzUs NiArMzUsNyBAQCBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgRk9SIFJPTEUg cmVndGVzdF9hZGRyX3VzZXIgUkVWT0tFIERFTEVURSBPTiBUQUJMRVMgRlJP TQogQ1JFQVRFIFRSQU5TRk9STSBGT1IgaW50IExBTkdVQUdFIFNRTCAoCiAJ RlJPTSBTUUwgV0lUSCBGVU5DVElPTiB2YXJjaGFyX3RyYW5zZm9ybShpbnRl cm5hbCksCiAJVE8gU1FMIFdJVEggRlVOQ1RJT04gaW50NHJlY3YoaW50ZXJu YWwpKTsKK0NSRUFURSBTVEFUSVNUSUNTIGFkZHJfbnNwLmdlbnRhYmxlX3N0 YXQgT04gYWRkcl9uc3AuZ2VudGFibGUoYSxiKSBXSVRIIChkZXBlbmRlbmNp ZXMpOwogLS0gdGVzdCBzb21lIGVycm9yIGNhc2VzCiBTRUxFQ1QgcGdfZ2V0 X29iamVjdF9hZGRyZXNzKCdzdG9uZScsICd7fScsICd7fScpOwogRVJST1I6 ICB1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgInN0b25lIgpAQCAtMzczLDcg KzM3NCw4IEBAIFdJVEggb2JqZWN0cyAodHlwZSwgbmFtZSwgYXJncykgQVMg KFZBTFVFUwogCQkJCS0tIGV4dGVuc2lvbgogCQkJCS0tIGV2ZW50IHRyaWdn ZXIKIAkJCQkoJ3BvbGljeScsICd7YWRkcl9uc3AsIGdlbnRhYmxlLCBnZW5w b2x9JywgJ3t9JyksCi0JCQkJKCd0cmFuc2Zvcm0nLCAne2ludH0nLCAne3Nx bH0nKQorCQkJCSgndHJhbnNmb3JtJywgJ3tpbnR9JywgJ3tzcWx9JyksCisJ CQkJKCdzdGF0aXN0aWNzJywgJ3thZGRyX25zcCwgZ2VudGFibGVfc3RhdH0n LCAne30nKQogICAgICAgICApCiBTRUxFQ1QgKHBnX2lkZW50aWZ5X29iamVj dChhZGRyMS5jbGFzc2lkLCBhZGRyMS5vYmppZCwgYWRkcjEuc3Vib2JqaWQp KS4qLAogCS0tIHRlc3Qgcm91bmR0cmlwIHRocm91Z2ggcGdfaWRlbnRpZnlf b2JqZWN0X2FzX2FkZHJlc3MKQEAgLTQyMCwxMyArNDIyLDE0IEBAIFNFTEVD VCAocGdfaWRlbnRpZnlfb2JqZWN0KGFkZHIxLmNsYXNzaWQsIGFkZHIxLm9i amlkLCBhZGRyMS5zdWJvYmppZCkpLiosCiAgdHJpZ2dlciAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IHQg b24gYWRkcl9uc3AuZ2VudGFibGUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgdAogIG9wZXJhdG9yIGZhbWlseSAg ICAgICAgICAgfCBwZ19jYXRhbG9nIHwgaW50ZWdlcl9vcHMgICAgICAgfCBw Z19jYXRhbG9nLmludGVnZXJfb3BzIFVTSU5HIGJ0cmVlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHQKICBwb2xpY3kgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwg Z2VucG9sIG9uIGFkZHJfbnNwLmdlbnRhYmxlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCB0Cisgc3RhdGlzdGljcyAgICAg ICAgICAgICAgICB8IGFkZHJfbnNwICAgfCBnZW50YWJsZV9zdGF0ICAgICB8 IGFkZHJfbnNwLmdlbnRhYmxlX3N0YXQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIGNvbGxhdGlvbiAgICAg ICAgICAgICAgICAgfCBwZ19jYXRhbG9nIHwgImRlZmF1bHQiICAgICAgICAg fCBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0cmFuc2Zvcm0gICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg IHwgZm9yIGludGVnZXIgb24gbGFuZ3VhZ2Ugc3FsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2gg ZGljdGlvbmFyeSAgICB8IGFkZHJfbnNwICAgfCBhZGRyX3RzX2RpY3QgICAg ICB8IGFkZHJfbnNwLmFkZHJfdHNfZGljdCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQgc2VhcmNo IHBhcnNlciAgICAgICAgfCBhZGRyX25zcCAgIHwgYWRkcl90c19wcnMgICAg ICAgfCBhZGRyX25zcC5hZGRyX3RzX3BycyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0IHNlYXJj aCBjb25maWd1cmF0aW9uIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfY29uZiAg ICAgIHwgYWRkcl9uc3AuYWRkcl90c19jb25mICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFy Y2ggdGVtcGxhdGUgICAgICB8IGFkZHJfbnNwICAgfCBhZGRyX3RzX3RlbXAg ICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfdGVtcCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAotKDQxIHJvd3Mp CisoNDIgcm93cykKIAogLS0tCiAtLS0gQ2xlYW51cCByZXNvdXJjZXMKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXgg MjJlYTA2Yy4uMDZmMjIzMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzNjgsNiArMTM2OCwxNSBAQCBwZ19t YXR2aWV3c3wgU0VMRUNUIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAogICAg ICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gKChuLm9pZCA9IGMucmVs bmFtZXNwYWNlKSkpCiAgICAgIExFRlQgSk9JTiBwZ190YWJsZXNwYWNlIHQg T04gKCh0Lm9pZCA9IGMucmVsdGFibGVzcGFjZSkpKQogICBXSEVSRSAoYy5y ZWxraW5kID0gJ20nOjoiY2hhciIpOworcGdfbXZfc3RhdHN8IFNFTEVDVCBu Lm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKKyAgICBjLnJlbG5hbWUgQVMgdGFi bGVuYW1lLAorICAgIHMuc3RhbmFtZSwKKyAgICBzLnN0YWtleXMgQVMgYXR0 bnVtcywKKyAgICBsZW5ndGgocy5zdGFkZXBzKSBBUyBkZXBzYnl0ZXMsCisg ICAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8ocy5zdGFkZXBzKSBB UyBkZXBzaW5mbworICAgRlJPTSAoKHBnX212X3N0YXRpc3RpYyBzCisgICAg IEpPSU4gcGdfY2xhc3MgYyBPTiAoKGMub2lkID0gcy5zdGFyZWxpZCkpKQor ICAgICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gKChuLm9pZCA9IGMu cmVsbmFtZXNwYWNlKSkpOwogcGdfcG9saWNpZXN8IFNFTEVDVCBuLm5zcG5h bWUgQVMgc2NoZW1hbmFtZSwKICAgICBjLnJlbG5hbWUgQVMgdGFibGVuYW1l LAogICAgIHBvbC5wb2xuYW1lIEFTIHBvbGljeW5hbWUsCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQK aW5kZXggZWIwYmM4OC4uOTJhMGQ4YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zYW5pdHlfY2hlY2sub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2FuaXR5X2NoZWNrLm91dApAQCAtMTEz LDYgKzExMyw3IEBAIHBnX2luaGVyaXRzfHQKIHBnX2xhbmd1YWdlfHQKIHBn X2xhcmdlb2JqZWN0fHQKIHBnX2xhcmdlb2JqZWN0X21ldGFkYXRhfHQKK3Bn X212X3N0YXRpc3RpY3x0CiBwZ19uYW1lc3BhY2V8dAogcGdfb3BjbGFzc3x0 CiBwZ19vcGVyYXRvcnx0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9vYmplY3RfYWRkcmVzcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9vYmplY3RfYWRkcmVzcy5zcWwKaW5kZXggNjhlN2NiMC4uMzc3NWIyOCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvb2JqZWN0X2FkZHJl c3Muc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29iamVjdF9hZGRy ZXNzLnNxbApAQCAtMzksNiArMzksNyBAQCBBTFRFUiBERUZBVUxUIFBSSVZJ TEVHRVMgRk9SIFJPTEUgcmVndGVzdF9hZGRyX3VzZXIgUkVWT0tFIERFTEVU RSBPTiBUQUJMRVMgRlJPTQogQ1JFQVRFIFRSQU5TRk9STSBGT1IgaW50IExB TkdVQUdFIFNRTCAoCiAJRlJPTSBTUUwgV0lUSCBGVU5DVElPTiB2YXJjaGFy X3RyYW5zZm9ybShpbnRlcm5hbCksCiAJVE8gU1FMIFdJVEggRlVOQ1RJT04g aW50NHJlY3YoaW50ZXJuYWwpKTsKK0NSRUFURSBTVEFUSVNUSUNTIGFkZHJf bnNwLmdlbnRhYmxlX3N0YXQgT04gYWRkcl9uc3AuZ2VudGFibGUoYSxiKSBX SVRIIChkZXBlbmRlbmNpZXMpOwogCiAtLSB0ZXN0IHNvbWUgZXJyb3IgY2Fz ZXMKIFNFTEVDVCBwZ19nZXRfb2JqZWN0X2FkZHJlc3MoJ3N0b25lJywgJ3t9 JywgJ3t9Jyk7CkBAIC0xNjYsNyArMTY3LDggQEAgV0lUSCBvYmplY3RzICh0 eXBlLCBuYW1lLCBhcmdzKSBBUyAoVkFMVUVTCiAJCQkJLS0gZXh0ZW5zaW9u CiAJCQkJLS0gZXZlbnQgdHJpZ2dlcgogCQkJCSgncG9saWN5JywgJ3thZGRy X25zcCwgZ2VudGFibGUsIGdlbnBvbH0nLCAne30nKSwKLQkJCQkoJ3RyYW5z Zm9ybScsICd7aW50fScsICd7c3FsfScpCisJCQkJKCd0cmFuc2Zvcm0nLCAn e2ludH0nLCAne3NxbH0nKSwKKwkJCQkoJ3N0YXRpc3RpY3MnLCAne2FkZHJf bnNwLCBnZW50YWJsZV9zdGF0fScsICd7fScpCiAgICAgICAgICkKIFNFTEVD VCAocGdfaWRlbnRpZnlfb2JqZWN0KGFkZHIxLmNsYXNzaWQsIGFkZHIxLm9i amlkLCBhZGRyMS5zdWJvYmppZCkpLiosCiAJLS0gdGVzdCByb3VuZHRyaXAg dGhyb3VnaCBwZ19pZGVudGlmeV9vYmplY3RfYXNfYWRkcmVzcwotLSAKMi41 LjAKCg== --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename*0=0009-fixup-of-regression-tests-plans-changes-by-group-by-.pat; filename*1=ch Content-Type: text/x-patch; name="0009-fixup-of-regression-tests-plans-changes-by-group-by-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA3NzEzNzY3NTFkZmJhMGY0NjlmNjgzMGMyYTllYjU0NWQxZTI1MjM1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogU3VuLCAyOCBGZWIgMjAxNiAy MToxNjo0MCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggOS85XSBmaXh1cCBvZiBy ZWdyZXNzaW9uIHRlc3RzIChwbGFucyBjaGFuZ2VzIGJ5IGdyb3VwIGJ5CiBl c3RpbWF0aW9uKQoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0ICAgICAgfCAxOCArKysrKysrKysrLS0tLS0tLS0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCB8IDI1ICsrKysrKysr KysrLS0tLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dW5pb24ub3V0ICAgICB8IDE2ICsrKysrKysrLS0tLS0tLS0KIDMgZmlsZXMg Y2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXgg Y2FmYmM1ZS4uMTUxNDAyZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pvaW4ub3V0CkBAIC0zOTY1LDE4ICszOTY1LDIwIEBAIHNlbGVj dCBkLiogZnJvbSBkIGxlZnQgam9pbiAoc2VsZWN0ICogZnJvbSBiIGdyb3Vw IGJ5IGIuaWQsIGIuY19pZCkgcwogZXhwbGFpbiAoY29zdHMgb2ZmKQogc2Vs ZWN0IGQuKiBmcm9tIGQgbGVmdCBqb2luIChzZWxlY3QgZGlzdGluY3QgKiBm cm9tIGIpIHMKICAgb24gZC5hID0gcy5pZDsKLSAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICBNZXJnZSBSaWdodCBKb2luCi0gICBN ZXJnZSBDb25kOiAoYi5pZCA9IGQuYSkKLSAgIC0+ICBVbmlxdWUKLSAgICAg ICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogYi5pZCwg Yi5jX2lkCi0gICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAg TWVyZ2UgQ29uZDogKHMuaWQgPSBkLmEpCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IHMuaWQKKyAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2Fu IG9uIHMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuaWQsIGIuY19pZAorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGIKICAgIC0+ICBT b3J0CiAgICAgICAgICBTb3J0IEtleTogZC5hCiAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZAotKDkgcm93cykKKygxMSByb3dzKQogCiAtLSBjaGVjayBq b2luIHJlbW92YWwgd29ya3Mgd2hlbiB1bmlxdWVuZXNzIG9mIHRoZSBqb2lu IGNvbmRpdGlvbiBpcyBlbmZvcmNlZAogLS0gYnkgYSBVTklPTgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0Cmlu ZGV4IGRlNjRjYTcuLjBmYzkzZDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTgwNywyNyArODA3 LDI0IEBAIHNlbGVjdCAqIGZyb20gaW50NF90Ymwgd2hlcmUKIGV4cGxhaW4g KHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20gaW50NF90Ymwg byB3aGVyZSAoZjEsIGYxKSBpbgogICAoc2VsZWN0IGYxLCBnZW5lcmF0ZV9z ZXJpZXMoMSwyKSAvIDEwIGcgZnJvbSBpbnQ0X3RibCBpIGdyb3VwIGJ5IGYx KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFNlbWkgSm9pbgogICAgT3V0 cHV0OiBvLmYxCiAgICBIYXNoIENvbmQ6IChvLmYxID0gIkFOWV9zdWJxdWVy eSIuZjEpCiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmludDRfdGJsIG8K ICAgICAgICAgIE91dHB1dDogby5mMQogICAgLT4gIEhhc2gKICAgICAgICAg IE91dHB1dDogIkFOWV9zdWJxdWVyeSIuZjEsICJBTllfc3VicXVlcnkiLmcK LSAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiAiQU5ZX3N1YnF1ZXJ5IgogICAgICAgICAgICAgICAg T3V0cHV0OiAiQU5ZX3N1YnF1ZXJ5Ii5mMSwgIkFOWV9zdWJxdWVyeSIuZwot ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiAiQU5ZX3N1YnF1ZXJ5Ii5mMSwg IkFOWV9zdWJxdWVyeSIuZwotICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5 IFNjYW4gb24gIkFOWV9zdWJxdWVyeSIKLSAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogIkFOWV9zdWJxdWVyeSIuZjEsICJBTllfc3VicXVlcnkiLmcK LSAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKCJBTllfc3VicXVlcnki LmYxID0gIkFOWV9zdWJxdWVyeSIuZykKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoQWdncmVnYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IGkuZjEsIChnZW5lcmF0ZV9zZXJpZXMoMSwgMikgLyAxMCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogaS5mMQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5pbnQ0X3RibCBpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IGkuZjEKLSgxOCByb3dzKQorICAgICAgICAgICAgICAg RmlsdGVyOiAoIkFOWV9zdWJxdWVyeSIuZjEgPSAiQU5ZX3N1YnF1ZXJ5Ii5n KQorICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogaS5mMSwgKGdlbmVyYXRlX3Nlcmllcygx LCAyKSAvIDEwKQorICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBp LmYxCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmludDRfdGJsIGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogaS5mMQorKDE1IHJvd3MpCiAKIHNlbGVjdCAqIGZyb20gaW50NF90 YmwgbyB3aGVyZSAoZjEsIGYxKSBpbgogICAoc2VsZWN0IGYxLCBnZW5lcmF0 ZV9zZXJpZXMoMSwyKSAvIDEwIGcgZnJvbSBpbnQ0X3RibCBpIGdyb3VwIGJ5 IGYxKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dW5pb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5v dXQKaW5kZXggMDE2NTcxYi4uZjJlMjk3ZSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQKQEAgLTI2MywxNiArMjYzLDE2 IEBAIE9SREVSIEJZIDE7CiBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCBJTlRF UlNFQ1QgU0VMRUNUIHExIEZST00gaW50OF90Ymw7CiAgICAgICAgIHEyICAg ICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLQotIDQ1Njc4OTAxMjM0NTY3ODkK ICAgICAgICAgICAgICAgMTIzCisgNDU2Nzg5MDEyMzQ1Njc4OQogKDIgcm93 cykKIAogU0VMRUNUIHEyIEZST00gaW50OF90YmwgSU5URVJTRUNUIEFMTCBT RUxFQ1QgcTEgRlJPTSBpbnQ4X3RibDsKICAgICAgICAgcTIgICAgICAgIAog LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIDEyMwogIDQ1Njc4 OTAxMjM0NTY3ODkKICA0NTY3ODkwMTIzNDU2Nzg5Ci0gICAgICAgICAgICAg IDEyMwogKDMgcm93cykKIAogU0VMRUNUIHEyIEZST00gaW50OF90YmwgRVhD RVBUIFNFTEVDVCBxMSBGUk9NIGludDhfdGJsIE9SREVSIEJZIDE7CkBAIC0z MDUsMTYgKzMwNSwxNiBAQCBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBFWENF UFQgU0VMRUNUIHEyIEZST00gaW50OF90Ymw7CiBTRUxFQ1QgcTEgRlJPTSBp bnQ4X3RibCBFWENFUFQgQUxMIFNFTEVDVCBxMiBGUk9NIGludDhfdGJsOwog ICAgICAgICBxMSAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0KLSA0NTY3 ODkwMTIzNDU2Nzg5CiAgICAgICAgICAgICAgIDEyMworIDQ1Njc4OTAxMjM0 NTY3ODkKICgyIHJvd3MpCiAKIFNFTEVDVCBxMSBGUk9NIGludDhfdGJsIEVY Q0VQVCBBTEwgU0VMRUNUIERJU1RJTkNUIHEyIEZST00gaW50OF90Ymw7CiAg ICAgICAgIHExICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAxMjMKICA0NTY3ODkwMTIzNDU2Nzg5CiAgNDU2Nzg5MDEyMzQ1 Njc4OQotICAgICAgICAgICAgICAxMjMKICgzIHJvd3MpCiAKIFNFTEVDVCBx MSBGUk9NIGludDhfdGJsIEVYQ0VQVCBBTEwgU0VMRUNUIHExIEZST00gaW50 OF90YmwgRk9SIE5PIEtFWSBVUERBVEU7CkBAIC0zNDMsOCArMzQzLDggQEAg U0VMRUNUIGYxIEZST00gZmxvYXQ4X3RibCBFWENFUFQgU0VMRUNUIGYxIEZS T00gaW50NF90YmwgT1JERVIgQlkgMTsKIFNFTEVDVCBxMSBGUk9NIGludDhf dGJsIElOVEVSU0VDVCBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCBVTklPTiBB TEwgU0VMRUNUIHEyIEZST00gaW50OF90Ymw7CiAgICAgICAgIHExICAgICAg ICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDQ1Njc4OTAxMjM0NTY3ODkK ICAgICAgICAgICAgICAgIDEyMworICA0NTY3ODkwMTIzNDU2Nzg5CiAgICAg ICAgICAgICAgICA0NTYKICAgNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAg ICAgICAgMTIzCkBAIC0zNTUsMTUgKzM1NSwxNSBAQCBTRUxFQ1QgcTEgRlJP TSBpbnQ4X3RibCBJTlRFUlNFQ1QgU0VMRUNUIHEyIEZST00gaW50OF90Ymwg VU5JT04gQUxMIFNFTEVDVCBxMiBGUgogU0VMRUNUIHExIEZST00gaW50OF90 YmwgSU5URVJTRUNUICgoKFNFTEVDVCBxMiBGUk9NIGludDhfdGJsIFVOSU9O IEFMTCBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCkpKTsKICAgICAgICAgcTEg ICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tCi0gNDU2Nzg5MDEyMzQ1Njc4 OQogICAgICAgICAgICAgICAxMjMKKyA0NTY3ODkwMTIzNDU2Nzg5CiAoMiBy b3dzKQogCiAoKChTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBJTlRFUlNFQ1Qg U0VMRUNUIHEyIEZST00gaW50OF90YmwpKSkgVU5JT04gQUxMIFNFTEVDVCBx MiBGUk9NIGludDhfdGJsOwogICAgICAgICBxMSAgICAgICAgIAogLS0tLS0t LS0tLS0tLS0tLS0tLQotICA0NTY3ODkwMTIzNDU2Nzg5CiAgICAgICAgICAg ICAgICAxMjMKKyAgNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAg NDU2CiAgIDQ1Njc4OTAxMjM0NTY3ODkKICAgICAgICAgICAgICAgIDEyMwpA QCAtNDE5LDggKzQxOSw4IEBAIEhJTlQ6ICBUaGVyZSBpcyBhIGNvbHVtbiBu YW1lZCAicTIiIGluIHRhYmxlICIqU0VMRUNUKiAyIiwgYnV0IGl0IGNhbm5v dCBiZSByZWZlCiBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBFWENFUFQgKCgo U0VMRUNUIHEyIEZST00gaW50OF90YmwgT1JERVIgQlkgcTIgTElNSVQgMSkp KTsKICAgICAgICAgcTEgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tCi0g NDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAxMjMKKyA0NTY3ODkw MTIzNDU2Nzg5CiAoMiByb3dzKQogCiAtLQotLSAKMi41LjAKCg== --=-up6WTUbKgy8U7iRSMYnB Content-Disposition: attachment; filename*0=0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.pat; filename*1=ch Content-Type: text/x-patch; name="0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBlMDczYTRkODM2OGEwYjBjNjZjZDI5MzNlNmE3YTIxMGMxYjVjNTNm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAx OTo1NjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS85XSB0ZWFjaCBwdWxs Xyh2YXJub3x2YXJhdHRubylfd2Fsa2VyIGFib3V0IFJlc3RyaWN0SW5mbwoK b3RoZXJ3aXNlIHB1bGxfdmFybm9zIGZhaWxzIHdoZW4gcHJvY2Vzc2luZyBP UiBjbGF1c2VzCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFy LmMgfCAxNiArKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTYg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3Zhci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv dmFyLmMKaW5kZXggMjkyZTFmNC4uOTIyOGE0NiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKQEAgLTE5Niw2ICsxOTYsMTMgQEAg cHVsbF92YXJub3Nfd2Fsa2VyKE5vZGUgKm5vZGUsIHB1bGxfdmFybm9zX2Nv bnRleHQgKmNvbnRleHQpCiAJCWNvbnRleHQtPnN1YmxldmVsc191cC0tOwog CQlyZXR1cm4gcmVzdWx0OwogCX0KKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0 SW5mbykpCisJeworCQlSZXN0cmljdEluZm8gKnJpbmZvID0gKFJlc3RyaWN0 SW5mbyopbm9kZTsKKwkJY29udGV4dC0+dmFybm9zID0gYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQtPnZhcm5vcywKKwkJCQkJCQkJCQkgIHJpbmZvLT5jbGF1 c2VfcmVsaWRzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAlyZXR1cm4gZXhw cmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBwdWxsX3Zhcm5vc193YWxrZXIs CiAJCQkJCQkJCSAgKHZvaWQgKikgY29udGV4dCk7CiB9CkBAIC0yNDQsNiAr MjUxLDE1IEBAIHB1bGxfdmFyYXR0bm9zX3dhbGtlcihOb2RlICpub2RlLCBw dWxsX3ZhcmF0dG5vc19jb250ZXh0ICpjb250ZXh0KQogCQlyZXR1cm4gZmFs c2U7CiAJfQogCisJaWYgKElzQShub2RlLCBSZXN0cmljdEluZm8pKQorCXsK KwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKilub2Rl OworCisJCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKChOb2RlKily aW5mby0+Y2xhdXNlLAorCQkJCQkJCQkJICBwdWxsX3ZhcmF0dG5vc193YWxr ZXIsCisJCQkJCQkJCQkgICh2b2lkKikgY29udGV4dCk7CisJfQorCiAJLyog U2hvdWxkIG5vdCBmaW5kIGFuIHVucGxhbm5lZCBzdWJxdWVyeSAqLwogCUFz c2VydCghSXNBKG5vZGUsIFF1ZXJ5KSk7CiAKLS0gCjIuNS4wCgo= --=-up6WTUbKgy8U7iRSMYnB Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=-up6WTUbKgy8U7iRSMYnB--