Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n0xrg-0003LF-Qb for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Dec 2021 03:37:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n0xr8-0003EF-Cj for pgsql-hackers@arkaria.postgresql.org; Sat, 25 Dec 2021 03:36:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n0xr7-0003E6-UH for pgsql-hackers@lists.postgresql.org; Sat, 25 Dec 2021 03:36:26 +0000 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1n0xr0-00061s-Ic for pgsql-hackers@postgresql.org; Sat, 25 Dec 2021 03:36:25 +0000 Received: by mail-pf1-x435.google.com with SMTP id v11so9002475pfu.2 for ; Fri, 24 Dec 2021 19:36:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=Iv0gDevQ5xLrCp3SS5Xs0d8Hc3G8IfIhce/TiF7Anko=; b=aMlwsUQcuNWJWoK+sJ92aM1e+KEWOBig1Vu5gxgayTAfFHbqbunN7rwVC8ONrBIVXN nGD9IfAWKktv2u3LQfvpMk+m4mgGw5zvUCjAlXsiu2PrIwJTCjgD5InL5rOjZfgbif4A YBLy5uykuOSqAAd764aJFG+ts2gL+VlEplh4uAi9v9hg/hMssjU6Ld3SMRIWR9VZXH94 azsU504CaT6wUxxLJMkbGlYaOQn+hEXOae1nn7qF64XlZPKF9PXirbfTj9BwRFPDYX4S FTcdSbRtyIb3FgL8VDWYm+z2JHG1mJ5FkoQ/VqKclQHuQbABP1JVW8KwZdPIObkOxmeL YOGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Iv0gDevQ5xLrCp3SS5Xs0d8Hc3G8IfIhce/TiF7Anko=; b=dj2AEu9LkJrXWx8Iwo+RNuzppCSYkVNEKep4qYeJDDXeVdMjdhMaq5zD58Gr6IA2Db JraQxufH+Dg0KTaMAOeCszleUDS3OYht4E6gP7JRQ8mlLuSgEBVhtbSqI6gqoXqvB5Wj cLvoNOQLcSlnsiSJSG2NKU/3PH6cQkFEr+xAGIGY1+YpY+6MQEtCZ5CkYfrTM/+vasbd IH2a5a6Plz9ydC/X4ftYBkcqaL0c1C5iYBeNdV9j1Ux5NsrUZNqvwKkRyvdM+lOnkVXV 2sbBsA7culblVzQtui11zuLqNa5xocK5CCoGN13DJBc+Mf4EU85RF+ygaDMhapuvagMg vWxg== X-Gm-Message-State: AOAM532mKWtNtoEVY2C099V5N/Q9teGXAQYJTQ3iUFSBKVW9ld3/zMW5 IiXEFgcuJ4r40sSGh9YsA1i1RnQj1v1ZoBYDhVmwTOw4B3M= X-Google-Smtp-Source: ABdhPJxDBoPVOPjQXkUsndO8nEyQanx9cY33zSKTuykGaXE2ujUbWPTI8XzxL4PaD2AW5qlpQCGCVh3rPHYNlU3uUlY= X-Received: by 2002:a63:4004:: with SMTP id n4mr7951888pga.216.1640403376180; Fri, 24 Dec 2021 19:36:16 -0800 (PST) MIME-Version: 1.0 From: Amit Langote Date: Sat, 25 Dec 2021 12:36:00 +0900 Message-ID: Subject: generic plans and "initial" pruning To: PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000086a6f805d3f02caa" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000086a6f805d3f02caa Content-Type: text/plain; charset="UTF-8" Executing generic plans involving partitions is known to become slower as partition count grows due to a number of bottlenecks, with AcquireExecutorLocks() showing at the top in profiles. Previous attempt at solving that problem was by David Rowley [1], where he proposed delaying locking of *all* partitions appearing under an Append/MergeAppend until "initial" pruning is done during the executor initialization phase. A problem with that approach that he has described in [2] is that leaving partitions unlocked can lead to race conditions where the Plan node belonging to a partition can be invalidated when a concurrent session successfully alters the partition between AcquireExecutorLocks() saying the plan is okay to execute and then actually executing it. However, using an idea that Robert suggested to me off-list a little while back, it seems possible to determine the set of partitions that we can safely skip locking. The idea is to look at the "initial" or "pre-execution" pruning instructions contained in a given Append or MergeAppend node when AcquireExecutorLocks() is collecting the relations to lock and consider relations from only those sub-nodes that survive performing those instructions. I've attempted implementing that idea in the attached patch. Note that "initial" pruning steps are now performed twice when executing generic plans: once in AcquireExecutorLocks() to find partitions to be locked, and a 2nd time in ExecInit[Merge]Append() to determine the set of partition sub-nodes to be initialized for execution, though I wasn't able to come up with a good idea to avoid this duplication. Using the following benchmark setup: pgbench testdb -i --partitions=$nparts > /dev/null 2>&1 pgbench -n testdb -S -T 30 -Mprepared And plan_cache_mode = force_generic_plan, I get following numbers: HEAD: 32 tps = 20561.776403 (without initial connection time) 64 tps = 12553.131423 (without initial connection time) 128 tps = 13330.365696 (without initial connection time) 256 tps = 8605.723120 (without initial connection time) 512 tps = 4435.951139 (without initial connection time) 1024 tps = 2346.902973 (without initial connection time) 2048 tps = 1334.680971 (without initial connection time) Patched: 32 tps = 27554.156077 (without initial connection time) 64 tps = 27531.161310 (without initial connection time) 128 tps = 27138.305677 (without initial connection time) 256 tps = 25825.467724 (without initial connection time) 512 tps = 19864.386305 (without initial connection time) 1024 tps = 18742.668944 (without initial connection time) 2048 tps = 16312.412704 (without initial connection time) -- Amit Langote EDB: http://www.enterprisedb.com [1] https://www.postgresql.org/message-id/CAKJS1f_kfRQ3ZpjQyHC7=PK9vrhxiHBQFZ+hc0JCwwnRKkF3hg@mail.gmail.com [2] https://www.postgresql.org/message-id/CAKJS1f99JNe%2Bsw5E3qWmS%2BHeLMFaAhehKO67J1Ym3pXv0XBsxw%40mail.gmail.com --00000000000086a6f805d3f02caa Content-Type: application/octet-stream; name="v1-0001-Teach-AcquireExecutorLocks-to-acquire-fewer-locks.patch" Content-Disposition: attachment; filename="v1-0001-Teach-AcquireExecutorLocks-to-acquire-fewer-locks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kxl9l05j0 RnJvbSBlZDRkZTY5ZTdhZTE4MGVjYTM4MGFlNTgxMTUyYjY2NTAxNzU2NjFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIFRl YWNoIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgdG8gYWNxdWlyZSBmZXdlciBsb2NrcyBpbgogc29t ZSBjYXNlcwoKQ3VycmVudGx5LCBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIGxvb3BzIG92ZXIgdGhl IHJhbmdlIHRhYmxlIG9mIGEKZ2l2ZW4gUGxhbm5lZFN0bXQgYW5kIGxvY2tzIGFsbCByZWxhdGlv bnMgZm91bmQgdGhlcmVpbiwgZXZlbiB0aG9zZQp0aGF0IHdvbid0IGFjdHVhbGx5IGJlIHNjYW5u ZWQgZHVyaW5nIGV4ZWN1dGlvbiBkdWUgdG8gYmVpbmcKZWxpbWluYXRlZCBieSAiaW5pdGlhbCIg cHJ1bmluZyB0aGF0IGlzIGFwcGxpZWQgZHVyaW5nIHRoZQppbml0aWFsaXphdGlvbiBvZiB0aGVp ciBvd25pbmcgQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUuIFRoaXMgbWFrZXMKQWNxdWlyZUV4 ZWN1dG9yTG9ja3MoKSBpdHNlbGYgZG8gdGhlICJpbml0aWFsIiBwcnVuaW5nIG9uIG5vZGVzIHRo YXQKc3VwcG9ydCBpdCBhbmQgbG9jayBvbmx5IHRob3NlIHJlbGF0aW9ucyB0aGF0IGFyZSBjb250 YWluZWQgaW4gdGhlCnN1Ym5vZGVzIHRoYXQgc3Vydml2ZSB0aGUgcHJ1bmluZy4KClRvIHRoYXQg ZW5kLCBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIG5vdyBsb29wcyBvdmVyIGEgYml0bWFwc2V0IG9m ClJUIGluZGV4ZXMsIHRob3NlIG9mIHRoZSBSVEVzIG9mICJsb2NrYWJsZSIgcmVsYXRpb25zLCBp bnN0ZWFkIG9mCnRoZSB3aG9sZSByYW5nZSB0YWJsZSB0byBmaW5kIHN1Y2ggZW50cmllcy4gIFdo ZW4gcHJ1bmluZyBpcyBwb3NzaWJsZSwKdGhlIGJpdG1hcHNldCBpcyBjb25zdHJ1Y3RlZCBieSB3 YWxraW5nIHRoZSBwbGFuIHRyZWUgdG8gbG9jYXRlCm5vZGVzIHRoYXQgYWxsb3cgImluaXRpYWwi IChvciAicHJlLWV4ZWN1dGlvbiIpIHBydW5pbmcgYW5kCmRpc3JlZ2FyZGluZyByZWxhdGlvbnMg ZnJvbSBzdWJub2RlcyB0aGF0IGRvbid0IHN1cnZpdmUgdGhlIHBydW5pbmcKaW5zdHJ1Y3Rpb25z LgoKUGxhbm5lZFN0bXQgZ2V0cyBhIGJpdG1hcHNldCBmaWVsZCB0byBzdG9yZSB0aGUgUlQgaW5k ZXhlcyBvZgpsb2NrYWJsZSByZWxhdGlvbnMgdGhhdCBpcyBwb3B1bGF0ZWQgd2hlbiBjb250cnVj dGluZyB0aGUgZmxhdCByYW5nZQp0YWJsZSBpbiBzZXRyZWZzLmMuICBJdCBpcyB1c2VkIGFzIGlz IGluIHRoZSBhYnNlbmNlIG9mIGFueSBwcnVuYWJsZQpub2Rlcy4KClBsYW5uZWRTdG10IGFsc28g Z2V0cyBhIG5ldyBmaWVsZCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGFueSBvZiB0aGUKbm9kZXMg b2YgdGhlIHBsYW4gdHJlZSBjb250YWluICJpbml0aWFsIiAob3IgInByZS1leGVjdXRpb24iKSBw cnVuaW5nCnN0ZXBzLCB3aGljaCBzYXZlcyB0aGUgdHJvdWJsZSBvZiB3YWxraW5nIHRoZSBwbGFu IHRyZWUgb25seSB0byBmaW5kCndoZXRoZXIgdGhhdCdzIHRoZSBjYXNlLgoKRXhlY0ZpbmRJbml0 aWFsTWF0Y2hpbmdTdWJQbGFucygpIGlzIHJlZmFjdG9yZWQgdG8gYWxsb3cgYmVpbmcKY2FsbGVk IG91dHNpZGUgYSBmdWxsLWZsZWRnZWQgZXhlY3V0b3IgY29udGV4dC4KLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUGFydGl0aW9uLmMgICB8IDUzNCArKysrKysrKysrKysrKysrKystLS0tLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgICAgICB8ICAzOSArLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgfCAgMzkgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2Nv cHlmdW5jcy5jICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j ICAgICAgICAgIHwgMTIxICsrKysrLQogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAg ICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgfCAg IDQgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgfCAgIDIgKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgfCAgMTAgKwogc3JjL2JhY2tlbmQv cGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jICAgfCAgNTcgKystCiBzcmMvYmFja2VuZC91dGlscy9j YWNoZS9wbGFuY2FjaGUuYyAgICB8IDIxNyArKysrKysrKystCiBzcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjUGFydGl0aW9uLmggICB8ICAxMyArLQogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZUZ1bmNz LmggICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAg ICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgfCAgMTUg Kwogc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oICAgfCAgIDMgKwogMTcgZmls ZXMgY2hhbmdlZCwgODY2IGluc2VydGlvbnMoKyksIDIwOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IGY4YTRhNDBlN2IuLmQxNGU2MDcyNGIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0xODIsOCArMTgyLDEwIEBAIEV4ZWNTZXJp YWxpemVQbGFuKFBsYW4gKnBsYW4sIEVTdGF0ZSAqZXN0YXRlKQogCXBzdG10LT50cmFuc2llbnRQ bGFuID0gZmFsc2U7CiAJcHN0bXQtPmRlcGVuZHNPblJvbGUgPSBmYWxzZTsKIAlwc3RtdC0+cGFy YWxsZWxNb2RlTmVlZGVkID0gZmFsc2U7CisJcHN0bXQtPnVzZXNQcmVFeGVjUHJ1bmluZyA9IGZh bHNlOwogCXBzdG10LT5wbGFuVHJlZSA9IHBsYW47CiAJcHN0bXQtPnJ0YWJsZSA9IGVzdGF0ZS0+ ZXNfcmFuZ2VfdGFibGU7CisJcHN0bXQtPnJlbGF0aW9uUlRJcyA9IE5VTEw7CiAJcHN0bXQtPnJl c3VsdFJlbGF0aW9ucyA9IE5JTDsKIAlwc3RtdC0+YXBwZW5kUmVsYXRpb25zID0gTklMOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggNWM3MjNiYzU0ZS4uOGM2MzI3MjM5 OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtMjQsNiArMjQsNyBAQAog I2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2lu Y2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5n L3BhcnRkZXNjLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oIgpAQCAtMTg2 LDcgKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9u UHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAog CQkJCQkJCQkgICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLAogCQkJCQkJCQkgICBQYXJ0aXRpb25L ZXkgcGFydGtleSwKLQkJCQkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUpOworCQkJCQkJCQkg ICBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKKwkJCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0 KTsKIHN0YXRpYyB2b2lkIGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25Q cnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJCQkJCSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmlu Z0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUsCkBAIC0xNTEx LDggKzE1MTMsNyBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3Vs dFJlbEluZm8gKmxlYWZfcGFydF9ycmkpCiAKIC8qCiAgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZQotICoJCUJ1aWxkIHRoZSBkYXRhIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgY2FsbGlu ZwotICoJCUV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMgYW5kIEV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucy4KKyAqCQlCdWlsZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHJ1bi10aW1lIHBy dW5pbmcKICAqCiAgKiAncGxhbnN0YXRlJyBpcyB0aGUgcGFyZW50IHBsYW4gbm9kZSdzIGV4ZWN1 dGlvbiBzdGF0ZS4KICAqCkBAIC0xNTI2LDEwICsxNTI3LDIwIEBAIGFkanVzdF9wYXJ0aXRpb25f Y29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqIGFz IGNoaWxkcmVuLiAgVGhlIGRhdGEgc3RvcmVkIGluIGVhY2ggUGFydGl0aW9uZWRSZWxQcnVuaW5n RGF0YSBjYW4gYmUKICAqIHJlLXVzZWQgZWFjaCB0aW1lIHdlIHJlLWV2YWx1YXRlIHdoaWNoIHBh cnRpdGlvbnMgbWF0Y2ggdGhlIHBydW5pbmcgc3RlcHMKICAqIHByb3ZpZGVkIGluIGVhY2ggUGFy dGl0aW9uZWRSZWxQcnVuZUluZm8uCisgKgorICogVGhpcyBkb2VzIG5vdCBjb25zaWRlciBpbml0 aWFsX3BydW5pbmdfc3RlcHMgYmVjYXVzZSB0aGV5IG11c3QgYWxyZWFkeSBoYXZlCisgKiBiZWVu IHBlcmZvcm1lZCBieSB0aGUgY2FsbGVyIGFuZCB0aGUgc3VicGxhbnMgcmVtYWluaW5nIGFmdGVy IGRvaW5nIHNvIGFyZQorICogZ2l2ZW4gYXMgJ2luaXRpYWxseV92YWxpZF9zdWJwbGFucycuICBU aGUgdHJhbnNsYXRpb24gZGF0YSB0byBiZSBwdXQgaW50bworICogUGFydGl0aW9uUHJ1bmVTdGF0 ZSB0aGF0IGFsbG93cyBjb252ZXJzaW9uIG9mIHBhcnRpdGlvbiBpbmRleGVzIGludG8gc3VicGxh bgorICogaW5kZXhlcyBhcmUgdXBkYXRlZCBoZXJlIHRvIGFjY291bnQgZm9yIHRoZSB1bm5lZWRl ZCBzdWJwbGFucyBoYXZpbmcgYmVlbgorICogcmVtb3ZlZCBieSBpbml0aWFsIHBydW5pbmcuICdu c3VicGxhbnMnIGdpdmVzIHRoZSBudW1iZXIgb2Ygc3VicGxhbnMgdGhhdAorICogd2VyZSBwcmVz ZW50IGJlZm9yZSBpbml0aWFsIHBydW5pbmcuCiAgKi8KIFBhcnRpdGlvblBydW5lU3RhdGUgKgog RXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCi0JCQkJ CQkJICBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRpdGlvbnBydW5laW5mbykKKwkJCQkJCQkgIFBh cnRpdGlvblBydW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZvLAorCQkJCQkJCSAgQml0bWFwc2V0 ICppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJICBpbnQgbnN1YnBsYW5zKQogewog CUVTdGF0ZQkgICAqZXN0YXRlID0gcGxhbnN0YXRlLT5zdGF0ZTsKIAlQYXJ0aXRpb25QcnVuZVN0 YXRlICpwcnVuZXN0YXRlOwpAQCAtMTUzNyw2ICsxNTQ4LDE1IEBAIEV4ZWNDcmVhdGVQYXJ0aXRp b25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCUxpc3RDZWxsICAgKmxjOwogCWlu dAkJCWk7CiAKKwkvKgorCSAqIE9ubHkgY3JlYXRlIGEgUGFydGl0aW9uUHJ1bmVTdGF0ZSBpZiBw cnVuaW5nIG5lZWRzIHRvIGJlIHBlcmZvcm1lZAorCSAqIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9m IHRoZSBvd25pbmcgcGxhbi4gIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZQorCSAqIGluaXRpYWwg cHJ1bmluZyBzdGVwcyB3aGljaCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHNldCBvZiBzdWJw bGFucworCSAqIHRoYXQgYXJlIHZhbGlkIGZvciBhY3R1YWwgZXhlY3V0aW9uIGFyZSBwZXJmb3Jt ZWQgd2l0aG91dCBjcmVhdGluZyBhCisJICogUGFydGl0aW9uUHJ1bmVTdGF0ZTsgc2VlIEV4ZWNG aW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoKS4KKwkgKi8KKwlBc3NlcnQocGFydGl0aW9ucHJ1 bmVpbmZvLT5jb250YWluc19leGVjX3N0ZXBzKTsKKwogCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4 ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCiAJaWYgKGVzdGF0ZS0+ ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQogCQllc3RhdGUtPmVzX3BhcnRpdGlvbl9k aXJlY3RvcnkgPQpAQCAtMTU1NSw3ICsxNTc1LDYgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJcHJ1bmVzdGF0ZS0+ZXhlY3BhcmFtaWRzID0g TlVMTDsKIAkvKiBvdGhlcl9zdWJwbGFucyBjYW4gY2hhbmdlIGF0IHJ1bnRpbWUsIHNvIHdlIG5l ZWQgb3VyIG93biBjb3B5ICovCiAJcHJ1bmVzdGF0ZS0+b3RoZXJfc3VicGxhbnMgPSBibXNfY29w eShwYXJ0aXRpb25wcnVuZWluZm8tPm90aGVyX3N1YnBsYW5zKTsKLQlwcnVuZXN0YXRlLT5kb19p bml0aWFsX3BydW5lID0gZmFsc2U7CS8qIG1heSBiZSBzZXQgYmVsb3cgKi8KIAlwcnVuZXN0YXRl LT5kb19leGVjX3BydW5lID0gZmFsc2U7CS8qIG1heSBiZSBzZXQgYmVsb3cgKi8KIAlwcnVuZXN0 YXRlLT5udW1fcGFydHBydW5lZGF0YSA9IG5fcGFydF9oaWVyYXJjaGllczsKIApAQCAtMTcwMiwy MyArMTcyMSwxNyBAQCBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBs YW5zdGF0ZSwKIAkJCXBwcnVuZS0+cHJlc2VudF9wYXJ0cyA9IGJtc19jb3B5KHBpbmZvLT5wcmVz ZW50X3BhcnRzKTsKIAogCQkJLyoKLQkJCSAqIEluaXRpYWxpemUgcHJ1bmluZyBjb250ZXh0cyBh cyBuZWVkZWQuCisJCQkgKiBJbml0aWFsaXplIHBydW5pbmcgY29udGV4dHMgYXMgbmVlZGVkLCBp Z25vcmluZyBhbnkKKwkJCSAqIGluaXRpYWxfcHJ1bmluZ19zdGVwcyBiZWNhdXNlIHRoZXkgbXVz dCBhbHJlYWR5IGhhdmUgYmVlbgorCQkJICogcGVyZm9ybWVkLgogCQkJICovCi0JCQlwcHJ1bmUt PmluaXRpYWxfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHM7Ci0J CQlpZiAocGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKLQkJCXsKLQkJCQlFeGVjSW5pdFBy dW5pbmdDb250ZXh0KCZwcHJ1bmUtPmluaXRpYWxfY29udGV4dCwKLQkJCQkJCQkJCSAgIHBpbmZv LT5pbml0aWFsX3BydW5pbmdfc3RlcHMsCi0JCQkJCQkJCQkgICBwYXJ0ZGVzYywgcGFydGtleSwg cGxhbnN0YXRlKTsKLQkJCQkvKiBSZWNvcmQgd2hldGhlciBpbml0aWFsIHBydW5pbmcgaXMgbmVl ZGVkIGF0IGFueSBsZXZlbCAqLwotCQkJCXBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUgPSB0 cnVlOwotCQkJfQogCQkJcHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMgPSBwaW5mby0+ZXhlY19w cnVuaW5nX3N0ZXBzOwogCQkJaWYgKHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMpCiAJCQl7CiAJ CQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5leGVjX2NvbnRleHQsCiAJCQkJCQkJ CQkgICBwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBzLAotCQkJCQkJCQkJICAgcGFydGRlc2MsIHBh cnRrZXksIHBsYW5zdGF0ZSk7CisJCQkJCQkJCQkgICBwYXJ0ZGVzYywgcGFydGtleSwgcGxhbnN0 YXRlLAorCQkJCQkJCQkJICAgcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCk7CiAJCQkJLyogUmVj b3JkIHdoZXRoZXIgZXhlYyBwcnVuaW5nIGlzIG5lZWRlZCBhdCBhbnkgbGV2ZWwgKi8KIAkJCQlw cnVuZXN0YXRlLT5kb19leGVjX3BydW5lID0gdHJ1ZTsKIAkJCX0KQEAgLTE3MzUsMTggKzE3NDgs MTM2IEBAIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LAogCQlpKys7CiAJfQogCisJLyoKKwkgKiBJZiBleGVjLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJl ZCBhbmQgc3VicGxhbnMgYXBwZWFyIHRvIGhhdmUgYmVlbgorCSAqIHBydW5lZCBieSBpbml0aWFs IHBydW5pbmcgc3RlcHMsIHRoZW4gd2UgbXVzdCByZS1zZXF1ZW5jZSB0aGUgc3VicGxhbgorCSAq IGluZGV4ZXMgc28gdGhhdCBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoKSBwcm9wZXJseSByZXR1 cm5zIHRoZSBpbmRleGVzCisJICogb2YgdGhlIHN1YnBsYW5zIHRoYXQgaGF2ZSByZW1haW5lZCBh ZnRlciBpbml0aWFsIHBydW5pbmcsIHRoYXQgaXMsCisJICogaW5pdGlhbGx5X3ZhbGlkX3N1YnBs YW5zLgorCSAqCisJICogV2UgY2FuIHNhZmVseSBza2lwIHRoaXMgd2hlbiAhZG9fZXhlY19wcnVu ZSwgZXZlbiB0aG91Z2ggdGhhdCBsZWF2ZXMKKwkgKiBpbnZhbGlkIGRhdGEgaW4gcHJ1bmVpbmZv LCBiZWNhdXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KKwkgKiAoY2YgaW5p dGlhbCBBc3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KKwkgKi8KKwlpZiAocHJ1 bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJgorCQlibXNfbnVtX21lbWJlcnMoaW5pdGlhbGx5X3Zh bGlkX3N1YnBsYW5zKSA8IG5zdWJwbGFucykKKwl7CisJCWludAkJICAgKm5ld19zdWJwbGFuX2lu ZGV4ZXM7CisJCUJpdG1hcHNldCAgKm5ld19vdGhlcl9zdWJwbGFuczsKKwkJaW50CQkJaTsKKwkJ aW50CQkJbmV3aWR4OworCisJCS8qCisJCSAqIEZpcnN0IHdlIG11c3QgYnVpbGQgYSB0ZW1wb3Jh cnkgYXJyYXkgd2hpY2ggbWFwcyBvbGQgc3VicGxhbgorCQkgKiBpbmRleGVzIHRvIG5ldyBvbmVz LiAgRm9yIGNvbnZlbmllbmNlIG9mIGluaXRpYWxpemF0aW9uLCB3ZSB1c2UKKwkJICogMS1iYXNl ZCBpbmRleGVzIGluIHRoaXMgYXJyYXkgYW5kIGxlYXZlIHBydW5lZCBpdGVtcyBhcyAwLgorCQkg Ki8KKwkJbmV3X3N1YnBsYW5faW5kZXhlcyA9IChpbnQgKikgcGFsbG9jMChzaXplb2YoaW50KSAq IG5zdWJwbGFucyk7CisJCW5ld2lkeCA9IDE7CisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKGluaXRpYWxseV92YWxpZF9zdWJwbGFucywgaSkpID49IDApCisJCXsKKwkJ CUFzc2VydChpIDwgbnN1YnBsYW5zKTsKKwkJCW5ld19zdWJwbGFuX2luZGV4ZXNbaV0gPSBuZXdp ZHgrKzsKKwkJfQorCisJCS8qCisJCSAqIE5vdyB3ZSBjYW4gdXBkYXRlIGVhY2ggUGFydGl0aW9u ZWRSZWxQcnVuZUluZm8ncyBzdWJwbGFuX21hcCB3aXRoCisJCSAqIG5ldyBzdWJwbGFuIGluZGV4 ZXMuICBXZSBtdXN0IGFsc28gcmVjb21wdXRlIGl0cyBwcmVzZW50X3BhcnRzCisJCSAqIGJpdG1h cC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0 YTsgaSsrKQorCQl7CisJCQlQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhID0gcHJ1bmVz dGF0ZS0+cGFydHBydW5lZGF0YVtpXTsKKwkJCWludAkJCWo7CisKKwkJCS8qCisJCQkgKiBXaXRo aW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhpcyBsb29wIGluIGJhY2stdG8tZnJvbnQK KwkJCSAqIG9yZGVyIHNvIHRoYXQgd2UgZGV0ZXJtaW5lIHByZXNlbnRfcGFydHMgZm9yIHRoZSBs b3dlc3QtbGV2ZWwKKwkJCSAqIHBhcnRpdGlvbmVkIHRhYmxlcyBmaXJzdC4gIFRoaXMgd2F5IHdl IGNhbiB0ZWxsIHdoZXRoZXIgYQorCQkJICogc3ViLXBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0 aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQorCQkJICogY2FuIGV4Y2x1ZGUgaXQgZnJv bSB0aGUgY3VycmVudCBsZXZlbCdzIHByZXNlbnRfcGFydHMuCisJCQkgKi8KKwkJCWZvciAoaiA9 IHBydW5lZGF0YS0+bnVtX3BhcnRyZWxwcnVuZWRhdGEgLSAxOyBqID49IDA7IGotLSkKKwkJCXsK KwkJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0 cmVscHJ1bmVkYXRhW2pdOworCQkJCWludAkJCW5wYXJ0cyA9IHBwcnVuZS0+bnBhcnRzOworCQkJ CWludAkJCWs7CisKKwkJCQkvKiBXZSBqdXN0IHJlYnVpbGQgcHJlc2VudF9wYXJ0cyBmcm9tIHNj cmF0Y2ggKi8KKwkJCQlibXNfZnJlZShwcHJ1bmUtPnByZXNlbnRfcGFydHMpOworCQkJCXBwcnVu ZS0+cHJlc2VudF9wYXJ0cyA9IE5VTEw7CisKKwkJCQlmb3IgKGsgPSAwOyBrIDwgbnBhcnRzOyBr KyspCisJCQkJeworCQkJCQlpbnQJCQlvbGRpZHggPSBwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdOwor CQkJCQlpbnQJCQlzdWJpZHg7CisKKwkJCQkJLyoKKwkJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24g ZXhpc3RlZCBhcyBhIHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCisJCQkJCSAqIG9sZCBzdWJwbGFu IGluZGV4IHRvIHRoZSBuZXcgc3VicGxhbiBpbmRleC4gIFRoZSBuZXcKKwkJCQkJICogaW5kZXgg bWF5IGJlY29tZSAtMSBpZiB0aGUgcGFydGl0aW9uIHdhcyBwcnVuZWQgYWJvdmUsCisJCQkJCSAq IG9yIGl0IG1heSBqdXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bwor CQkJCQkgKiBzb21lIHN1YnBsYW5zIGJlaW5nIHJlbW92ZWQgZWFybGllciBpbiB0aGUgbGlzdC4g IElmCisJCQkJCSAqIGl0J3MgYSBzdWJwYXJ0aXRpb24sIGFkZCBpdCB0byBwcmVzZW50X3BhcnRz IHVubGVzcworCQkJCQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KKwkJCQkJICovCisJCQkJCWlm IChvbGRpZHggPj0gMCkKKwkJCQkJeworCQkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5zdWJwbGFucyk7 CisJCQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRp ZHhdIC0gMTsKKworCQkJCQkJaWYgKG5ld19zdWJwbGFuX2luZGV4ZXNbb2xkaWR4XSA+IDApCisJ CQkJCQkJcHBydW5lLT5wcmVzZW50X3BhcnRzID0KKwkJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBy dW5lLT5wcmVzZW50X3BhcnRzLCBrKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmICgoc3ViaWR4ID0g cHBydW5lLT5zdWJwYXJ0X21hcFtrXSkgPj0gMCkKKwkJCQkJeworCQkJCQkJUGFydGl0aW9uZWRS ZWxQcnVuaW5nRGF0YSAqc3VicHJ1bmU7CisKKwkJCQkJCXN1YnBydW5lID0gJnBydW5lZGF0YS0+ cGFydHJlbHBydW5lZGF0YVtzdWJpZHhdOworCisJCQkJCQlpZiAoIWJtc19pc19lbXB0eShzdWJw cnVuZS0+cHJlc2VudF9wYXJ0cykpCisJCQkJCQkJcHBydW5lLT5wcmVzZW50X3BhcnRzID0KKwkJ CQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3BhcnRzLCBrKTsKKwkJCQkJfQor CQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFdlIG11c3QgYWxzbyByZWNvbXB1dGUgdGhl IG90aGVyX3N1YnBsYW5zIHNldCwgc2luY2UgaW5kZXhlcyBpbiBpdAorCQkgKiBtYXkgY2hhbmdl LgorCQkgKi8KKwkJbmV3X290aGVyX3N1YnBsYW5zID0gTlVMTDsKKwkJaSA9IC0xOworCQl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocHJ1bmVzdGF0ZS0+b3RoZXJfc3VicGxhbnMsIGkpKSA+ PSAwKQorCQkJbmV3X290aGVyX3N1YnBsYW5zID0gYm1zX2FkZF9tZW1iZXIobmV3X290aGVyX3N1 YnBsYW5zLAorCQkJCQkJCQkJCQkJbmV3X3N1YnBsYW5faW5kZXhlc1tpXSAtIDEpOworCisJCWJt c19mcmVlKHBydW5lc3RhdGUtPm90aGVyX3N1YnBsYW5zKTsKKwkJcHJ1bmVzdGF0ZS0+b3RoZXJf c3VicGxhbnMgPSBuZXdfb3RoZXJfc3VicGxhbnM7CisKKwkJcGZyZWUobmV3X3N1YnBsYW5faW5k ZXhlcyk7CisJfQorCiAJcmV0dXJuIHBydW5lc3RhdGU7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXpl IGEgUGFydGl0aW9uUHJ1bmVDb250ZXh0IGZvciB0aGUgZ2l2ZW4gbGlzdCBvZiBwcnVuaW5nIHN0 ZXBzLgorICoKKyAqIEF0IGxlYXN0IG9uZSBvZiAncGxhbnN0YXRlJyBvciAnZWNvbnRleHQnIG11 c3QgYmUgcGFzc2VkIHRvIGJlIGFibGUgdG8KKyAqIHN1Y2Nlc3NmdWxseSBldmFsdWF0ZSBhbnkg bm9uLUNvbnN0IGV4cHJlc3Npb25zIGNvbnRhaW5lZCBpbiB0aGUKKyAqIHN0ZXBzLgogICovCiBz dGF0aWMgdm9pZAogRXhlY0luaXRQcnVuaW5nQ29udGV4dChQYXJ0aXRpb25QcnVuZUNvbnRleHQg KmNvbnRleHQsCiAJCQkJCSAgIExpc3QgKnBydW5pbmdfc3RlcHMsCiAJCQkJCSAgIFBhcnRpdGlv bkRlc2MgcGFydGRlc2MsCiAJCQkJCSAgIFBhcnRpdGlvbktleSBwYXJ0a2V5LAotCQkJCQkgICBQ bGFuU3RhdGUgKnBsYW5zdGF0ZSkKKwkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJ CSAgIEV4cHJDb250ZXh0ICplY29udGV4dCkKIHsKIAlpbnQJCQluX3N0ZXBzOwogCWludAkJCXBh cnRuYXR0czsKQEAgLTE3NjcsNiArMTg5OCw3IEBAIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFy dGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCiAJY29udGV4dC0+cHBjY29udGV4dCA9IEN1 cnJlbnRNZW1vcnlDb250ZXh0OwogCWNvbnRleHQtPnBsYW5zdGF0ZSA9IHBsYW5zdGF0ZTsKKwlj b250ZXh0LT5leHByY29udGV4dCA9IGVjb250ZXh0OwogCiAJLyogSW5pdGlhbGl6ZSBleHByZXNz aW9uIHN0YXRlIGZvciBlYWNoIGV4cHJlc3Npb24gd2UgbmVlZCAqLwogCWNvbnRleHQtPmV4cHJz dGF0ZXMgPSAoRXhwclN0YXRlICoqKQpAQCAtMTc5NSw4ICsxOTI3LDEzIEBAIEV4ZWNJbml0UHJ1 bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCQkJ CQlzdGVwLT5zdGVwLnN0ZXBfaWQsCiAJCQkJCQkJCQkJCQkJCWtleW5vKTsKIAotCQkJCWNvbnRl eHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KLQkJCQkJRXhlY0luaXRFeHByKGV4cHIsIGNvbnRl eHQtPnBsYW5zdGF0ZSk7CisJCQkJaWYgKHBsYW5zdGF0ZSA9PSBOVUxMKQorCQkJCQljb250ZXh0 LT5leHByc3RhdGVzW3N0YXRlaWR4XSA9CisJCQkJCQlFeGVjSW5pdEV4cHJXaXRoUGFyYW1zKGV4 cHIsCisJCQkJCQkJCQkJCSAgIGVjb250ZXh0LT5lY3h0X3BhcmFtX2xpc3RfaW5mbyk7CisJCQkJ ZWxzZQorCQkJCQljb250ZXh0LT5leHByc3RhdGVzW3N0YXRlaWR4XSA9CisJCQkJCQlFeGVjSW5p dEV4cHIoZXhwciwgY29udGV4dC0+cGxhbnN0YXRlKTsKIAkJCX0KIAkJCWtleW5vKys7CiAJCX0K QEAgLTE4MDksMTcxICsxOTQ2LDI4MyBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlv blBydW5lQ29udGV4dCAqY29udGV4dCwKICAqCQlwcnVuaW5nLCBkaXNyZWdhcmRpbmcgYW55IHBy dW5pbmcgY29uc3RyYWludHMgaW52b2x2aW5nIFBBUkFNX0VYRUMKICAqCQlQYXJhbXMuCiAgKgot ICogSWYgYWRkaXRpb25hbCBwcnVuaW5nIHBhc3NlcyB3aWxsIGJlIHJlcXVpcmVkIChiZWNhdXNl IG9mIFBBUkFNX0VYRUMKLSAqIFBhcmFtcyksIHdlIG11c3QgYWxzbyB1cGRhdGUgdGhlIHRyYW5z bGF0aW9uIGRhdGEgdGhhdCBhbGxvd3MgY29udmVyc2lvbgotICogb2YgcGFydGl0aW9uIGluZGV4 ZXMgaW50byBzdWJwbGFuIGluZGV4ZXMgdG8gYWNjb3VudCBmb3IgdGhlIHVubmVlZGVkCi0gKiBz dWJwbGFucyBoYXZpbmcgYmVlbiByZW1vdmVkLgorICogTXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNl IHBlciAncHJ1bmVpbmZvJywgYW5kIG9ubHkgaWYgaW5pdGlhbCBwcnVuaW5nIGlzCisgKiByZXF1 aXJlZC4KICAqCi0gKiBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyICdwcnVuZXN0YXRlJywg YW5kIG9ubHkgaWYgaW5pdGlhbCBwcnVuaW5nCi0gKiBpcyByZXF1aXJlZC4KKyAqICdwYXJhbScg Y29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW55IEVYVEVSTiBwYXJhbWV0ZXJzIHRoYXQgbWln aHQgYmUKKyAqIHByZXNlbnQgaW4gdGhlIGluaXRpYWwgcHJ1bmluZyBzdGVwcy4KICAqCi0gKiAn bnN1YnBsYW5zJyBtdXN0IGJlIHBhc3NlZCBhcyB0aGUgdG90YWwgbnVtYmVyIG9mIHVucHJ1bmVk IHN1YnBsYW5zLgorICogVGhlIFJUIGluZGV4ZXMgb2YgdW5wcnVuZWQgcGFyZW50cyBhcmUgcmV0 dXJuZWQgaW4gKnBhcmVudHJlbGlkcyBpZiBhc2tlZAorICogZm9yIGJ5IHRoZSBjYWxsZXIuCiAg Ki8KIEJpdG1hcHNldCAqCi1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlv blBydW5lU3RhdGUgKnBydW5lc3RhdGUsIGludCBuc3VicGxhbnMpCitFeGVjRmluZEluaXRpYWxN YXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJCQlF U3RhdGUgKmVzdGF0ZSwgTGlzdCAqcnRhYmxlLAorCQkJCQkJCQlQYXJhbUxpc3RJbmZvIHBhcmFt cywKKwkJCQkJCQkJQml0bWFwc2V0ICoqcGFyZW50cmVsaWRzKQogewogCUJpdG1hcHNldCAgKnJl c3VsdCA9IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQg dG1wY29udGV4dDsKIAlpbnQJCQlpOworCUxpc3RDZWxsICAgKmxjOworCWludAkJCW5fcGFydF9o aWVyYXJjaGllczsKKwlib29sCQlmcmVlX2VzdGF0ZSA9IGZhbHNlOworCUV4cHJDb250ZXh0ICpl Y29udGV4dDsKKwlQYXJ0aXRpb25QcnVuaW5nRGF0YSAqKnBhcnRwcnVuZWRhdGE7CisJUGFydGl0 aW9uRGlyZWN0b3J5CXBkaXI7CiAKLQkvKiBDYWxsZXIgZXJyb3IgaWYgd2UgZ2V0IGhlcmUgd2l0 aG91dCBkb19pbml0aWFsX3BydW5lICovCi0JQXNzZXJ0KHBydW5lc3RhdGUtPmRvX2luaXRpYWxf cHJ1bmUpOwotCi0JLyoKLQkgKiBTd2l0Y2ggdG8gYSB0ZW1wIGNvbnRleHQgdG8gYXZvaWQgbGVh a2luZyBtZW1vcnkgaW4gdGhlIGV4ZWN1dG9yJ3MKLQkgKiBxdWVyeS1saWZlc3BhbiBtZW1vcnkg Y29udGV4dC4KLQkgKi8KLQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBydW5l c3RhdGUtPnBydW5lX2NvbnRleHQpOwotCi0JLyoKLQkgKiBGb3IgZWFjaCBoaWVyYXJjaHksIGRv IHRoZSBwcnVuaW5nIHRlc3RzLCBhbmQgYWRkIG5vbmRlbGV0YWJsZQotCSAqIHN1YnBsYW5zJyBp bmRleGVzIHRvICJyZXN1bHQiLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5u dW1fcGFydHBydW5lZGF0YTsgaSsrKQotCXsKLQkJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5l ZGF0YTsKLQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lOworCS8qIENhbGxlciBl cnJvciBpZiB3ZSBnZXQgaGVyZSB3aXRob3V0IGNvbnRhaW5zX2luaXRfc3RlcHMgKi8KKwlBc3Nl cnQocHJ1bmVpbmZvLT5jb250YWluc19pbml0X3N0ZXBzKTsKIAotCQlwcnVuZWRhdGEgPSBwcnVu ZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwotCQlwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVs cHJ1bmVkYXRhWzBdOwogCi0JCS8qIFBlcmZvcm0gcHJ1bmluZyB3aXRob3V0IHVzaW5nIFBBUkFN X0VYRUMgUGFyYW1zICovCi0JCWZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShwcnVuZWRh dGEsIHBwcnVuZSwgdHJ1ZSwgJnJlc3VsdCk7CisJaWYgKHBhcmVudHJlbGlkcykKKwkJKnBhcmVu dHJlbGlkcyA9IE5VTEw7CiAKLQkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3Bh Y2UgaW4gbm9kZSdzIHBzX0V4cHJDb250ZXh0IHRvbyAqLwotCQlpZiAocHBydW5lLT5pbml0aWFs X3BydW5pbmdfc3RlcHMpCi0JCQlSZXNldEV4cHJDb250ZXh0KHBwcnVuZS0+aW5pdGlhbF9jb250 ZXh0LnBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQpOworCS8qIFNldCB1cCBFU3RhdGUgaWYgbm90 IGluIHRoZSBleGVjdXRvciBwcm9wZXIuICovCisJaWYgKGVzdGF0ZSA9PSBOVUxMKQorCXsKKwkJ ZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOworCQllc3RhdGUtPmVzX3BhcmFtX2xpc3Rf aW5mbyA9IHBhcmFtczsKKwkJZnJlZV9lc3RhdGUgPSB0cnVlOwogCX0KIAotCS8qIEFkZCBpbiBh bnkgc3VicGxhbnMgdGhhdCBwYXJ0aXRpb24gcHJ1bmluZyBkaWRuJ3QgYWNjb3VudCBmb3IgKi8K LQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcnMocmVzdWx0LCBwcnVuZXN0YXRlLT5vdGhlcl9zdWJw bGFucyk7Ci0KLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJLyogQW4gRXhw ckNvbnRleHQgdG8gZXZhbHVhdGUgZXhwcmVzc2lvbnMuICovCisJZWNvbnRleHQgPSBDcmVhdGVF eHByQ29udGV4dChlc3RhdGUpOwogCi0JLyogQ29weSByZXN1bHQgb3V0IG9mIHRoZSB0ZW1wIGNv bnRleHQgYmVmb3JlIHdlIHJlc2V0IGl0ICovCi0JcmVzdWx0ID0gYm1zX2NvcHkocmVzdWx0KTsK KwkvKiBQYXJ0aXRpb25EaXJlY3RvcnksIGNyZWF0aW5nIG9uZSBpZiBub3QgdGhlcmUgYWxyZWFk eS4gKi8KKwlwZGlyID0gZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5OworCWlmIChwZGly ID09IE5VTEwpCisJeworCQkvKiBPbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zLCBqdXN0IGxpa2Ug aW4gdGhlIGV4ZWN1dG9yIHByb3Blci4gKi8KKwkJcGRpciA9IENyZWF0ZVBhcnRpdGlvbkRpcmVj dG9yeShDdXJyZW50TWVtb3J5Q29udGV4dCwgZmFsc2UpOworCQllc3RhdGUtPmVzX3BhcnRpdGlv bl9kaXJlY3RvcnkgPSBwZGlyOworCX0KIAotCU1lbW9yeUNvbnRleHRSZXNldChwcnVuZXN0YXRl LT5wcnVuZV9jb250ZXh0KTsKKwkvKiBBIHRlbXBvcmFyeSBjb250ZXh0IHRvIGFsbG9jYXRlIHN0 dWZmIG5lZWRkZWQgdG8gcnVuIHBydW5pbmcgc3RlcHMuICovCisJdG1wY29udGV4dCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJpbml0 aWFsIHBydW5pbmcgd29ya2luZyBkYXRhIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRf U0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7 CiAKIAkvKgotCSAqIElmIGV4ZWMtdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB3ZSBwcnVu ZWQgc3VicGxhbnMgYWJvdmUsIHRoZW4gd2UKLQkgKiBtdXN0IHJlLXNlcXVlbmNlIHRoZSBzdWJw bGFuIGluZGV4ZXMgc28gdGhhdCBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMKLQkgKiBwcm9wZXJs eSByZXR1cm5zIHRoZSBpbmRleGVzIGZyb20gdGhlIHN1YnBsYW5zIHdoaWNoIHdpbGwgcmVtYWlu IGFmdGVyCi0JICogZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisJICogU3R1ZmYgdGhhdCBm b2xsb3dzIG1hdGNoZXMgZXhhY3RseSB3aGF0IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KCkKKwkgKiBkb2VzLCBleGNlcHQgd2UgZG9uJ3QgbmVlZCBhIFBhcnRpdGlvblBydW5lU3RhdGUg aGVyZSwgc28gZG9uJ3QgY2FsbAorCSAqIHRoYXQgZnVuY3Rpb24uCiAJICoKLQkgKiBXZSBjYW4g c2FmZWx5IHNraXAgdGhpcyB3aGVuICFkb19leGVjX3BydW5lLCBldmVuIHRob3VnaCB0aGF0IGxl YXZlcwotCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0YXRlLCBiZWNhdXNlIHRoYXQgZGF0YSB3 b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KLQkgKiAoY2YgaW5pdGlhbCBBc3NlcnQgaW4gRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKS4KKwkgKiBYWFggc29tZSByZWZhY3RvcmluZyBtaWdodCBiZSBn b29kLgogCSAqLwotCWlmIChwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIGJtc19udW1fbWVt YmVycyhyZXN1bHQpIDwgbnN1YnBsYW5zKQorCisJLyogUGFydGl0aW9uUHJ1bmluZ0RhdGEgZm9y IGVhY2ggcGFydGl0aW9uIGhpZXJhcmFjaHkuICovCisJbl9wYXJ0X2hpZXJhcmNoaWVzID0gbGlz dF9sZW5ndGgocHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyk7CisJQXNzZXJ0KG5fcGFydF9oaWVyYXJj aGllcyA+IDApOworCXBhcnRwcnVuZWRhdGEgPSAoUGFydGl0aW9uUHJ1bmluZ0RhdGEgKiopCisJ CQlwYWxsb2Moc2l6ZW9mKFBhcnRpdGlvblBydW5pbmdEYXRhICopICogbl9wYXJ0X2hpZXJhcmNo aWVzKTsKKwlpID0gMDsKKwlmb3JlYWNoKGxjLCBwcnVuZWluZm8tPnBydW5lX2luZm9zKQogCXsK LQkJaW50CQkgICAqbmV3X3N1YnBsYW5faW5kZXhlczsKLQkJQml0bWFwc2V0ICAqbmV3X290aGVy X3N1YnBsYW5zOwotCQlpbnQJCQlpOwotCQlpbnQJCQluZXdpZHg7CisJCVBhcnRpdGlvblBydW5p bmdEYXRhICpwcnVuZWRhdGE7CisJCUxpc3QJICAgKnBhcnRyZWxwcnVuZWluZm9zID0gbGZpcnN0 X25vZGUoTGlzdCwgbGMpOworCQlpbnQJCQlucGFydHJlbHBydW5laW5mb3MgPSBsaXN0X2xlbmd0 aChwYXJ0cmVscHJ1bmVpbmZvcyk7CisJCUxpc3RDZWxsICAgKmxjMjsKKwkJaW50CQkJajsKIAot CQkvKgotCQkgKiBGaXJzdCB3ZSBtdXN0IGJ1aWxkIGEgdGVtcG9yYXJ5IGFycmF5IHdoaWNoIG1h cHMgb2xkIHN1YnBsYW4KLQkJICogaW5kZXhlcyB0byBuZXcgb25lcy4gIEZvciBjb252ZW5pZW5j ZSBvZiBpbml0aWFsaXphdGlvbiwgd2UgdXNlCi0JCSAqIDEtYmFzZWQgaW5kZXhlcyBpbiB0aGlz IGFycmF5IGFuZCBsZWF2ZSBwcnVuZWQgaXRlbXMgYXMgMC4KLQkJICovCi0JCW5ld19zdWJwbGFu X2luZGV4ZXMgPSAoaW50ICopIHBhbGxvYzAoc2l6ZW9mKGludCkgKiBuc3VicGxhbnMpOwotCQlu ZXdpZHggPSAxOwotCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZXN1 bHQsIGkpKSA+PSAwKQotCQl7Ci0JCQlBc3NlcnQoaSA8IG5zdWJwbGFucyk7Ci0JCQluZXdfc3Vi cGxhbl9pbmRleGVzW2ldID0gbmV3aWR4Kys7Ci0JCX0KKwkJLyogUGFydGl0aW9uZWRSZWxQcnVu aW5nRGF0YSBwZXIgcGFyZW50IGluIHRoZSBoaWVyYXJjaHkuICovCisJCXBydW5lZGF0YSA9IChQ YXJ0aXRpb25QcnVuaW5nRGF0YSAqKQorCQkJcGFsbG9jKG9mZnNldG9mKFBhcnRpdGlvblBydW5p bmdEYXRhLCBwYXJ0cmVscHJ1bmVkYXRhKSArCisJCQkJICAgbnBhcnRyZWxwcnVuZWluZm9zICog c2l6ZW9mKFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEpKTsKKwkJcGFydHBydW5lZGF0YVtpXSA9 IHBydW5lZGF0YTsKKwkJcHJ1bmVkYXRhLT5udW1fcGFydHJlbHBydW5lZGF0YSA9IG5wYXJ0cmVs cHJ1bmVpbmZvczsKIAotCQkvKgotCQkgKiBOb3cgd2UgY2FuIHVwZGF0ZSBlYWNoIFBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvJ3Mgc3VicGxhbl9tYXAgd2l0aAotCQkgKiBuZXcgc3VicGxhbiBpbmRl eGVzLiAgV2UgbXVzdCBhbHNvIHJlY29tcHV0ZSBpdHMgcHJlc2VudF9wYXJ0cwotCQkgKiBiaXRt YXAuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcHJ1bmVzdGF0ZS0+bnVtX3BhcnRwcnVuZWRh dGE7IGkrKykKKwkJaiA9IDA7CisJCWZvcmVhY2gobGMyLCBwYXJ0cmVscHJ1bmVpbmZvcykKIAkJ ewotCQkJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSA9IHBydW5lc3RhdGUtPnBhcnRw cnVuZWRhdGFbaV07Ci0JCQlpbnQJCQlqOworCQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBp bmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9uZWRSZWxQcnVuZUluZm8sIGxjMik7CisJCQlQYXJ0 aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVk YXRhW2pdOworCQkJUmFuZ2VUYmxFbnRyeSAqcGFydHJ0ZSA9IHJ0X2ZldGNoKHBpbmZvLT5ydGlu ZGV4LCBydGFibGUpOworCQkJUmVsYXRpb24JcGFydHJlbDsKKwkJCVBhcnRpdGlvbkRlc2MgcGFy dGRlc2M7CisJCQlQYXJ0aXRpb25LZXkgcGFydGtleTsKIAogCQkJLyoKLQkJCSAqIFdpdGhpbiBl YWNoIGhpZXJhcmNoeSwgd2UgcGVyZm9ybSB0aGlzIGxvb3AgaW4gYmFjay10by1mcm9udAotCQkJ ICogb3JkZXIgc28gdGhhdCB3ZSBkZXRlcm1pbmUgcHJlc2VudF9wYXJ0cyBmb3IgdGhlIGxvd2Vz dC1sZXZlbAotCQkJICogcGFydGl0aW9uZWQgdGFibGVzIGZpcnN0LiAgVGhpcyB3YXkgd2UgY2Fu IHRlbGwgd2hldGhlciBhCi0JCQkgKiBzdWItcGFydGl0aW9uZWQgdGFibGUncyBwYXJ0aXRpb25z IHdlcmUgZW50aXJlbHkgcHJ1bmVkIHNvIHdlCi0JCQkgKiBjYW4gZXhjbHVkZSBpdCBmcm9tIHRo ZSBjdXJyZW50IGxldmVsJ3MgcHJlc2VudF9wYXJ0cy4KKwkJCSAqIFdlIGNhbiByZWx5IG9uIHRo ZSBjb3BpZXMgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCisJCQkgKiBrZXkg YW5kIHBhcnRpdGlvbiBkZXNjcmlwdG9yIGFwcGVhcmluZyBpbiBpdHMgcmVsY2FjaGUgZW50cnks CisJCQkgKiBiZWNhdXNlIHRoYXQgZW50cnkgd2lsbCBiZSBoZWxkIG9wZW4gYW5kIGxvY2tlZCB3 aGlsZSB0aGUKKwkJCSAqIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgaXMgaW4gdXNlLgogCQkJ ICovCi0JCQlmb3IgKGogPSBwcnVuZWRhdGEtPm51bV9wYXJ0cmVscHJ1bmVkYXRhIC0gMTsgaiA+ PSAwOyBqLS0pCisJCQlwYXJ0cmVsID0gdGFibGVfb3BlbihwYXJ0cnRlLT5yZWxpZCwgcGFydHJ0 ZS0+cmVsbG9ja21vZGUpOworCQkJcGFydGtleSA9IFJlbGF0aW9uR2V0UGFydGl0aW9uS2V5KHBh cnRyZWwpOworCQkJcGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAocGRpciwgcGFy dHJlbCk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSBzdWJwbGFuX21hcCBhbmQgc3Vi cGFydF9tYXAuCisJCQkgKgorCQkJICogQmVjYXVzZSB3ZSByZXF1ZXN0IGRldGFjaGVkIHBhcnRp dGlvbnMgdG8gYmUgaW5jbHVkZWQsIGFuZAorCQkJICogZGV0YWNoaW5nIHdhaXRzIGZvciBvbGQg dHJhbnNhY3Rpb25zLCBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0CisJCQkgKiBubyBwYXJ0aXRp b25zIGhhdmUgZGlzYXBwZWFyZWQgc2luY2UgdGhpcyBxdWVyeSB3YXMgcGxhbm5lZC4KKwkJCSAq CisJCQkgKiBIb3dldmVyLCBuZXcgcGFydGl0aW9ucyBtYXkgaGF2ZSBiZWVuIGFkZGVkLgorCQkJ ICovCisJCQlBc3NlcnQocGFydGRlc2MtPm5wYXJ0cyA+PSBwaW5mby0+bnBhcnRzKTsKKwkJCXBw cnVuZS0+bnBhcnRzID0gcGFydGRlc2MtPm5wYXJ0czsKKwkJCXBwcnVuZS0+c3VicGxhbl9tYXAg PSBwYWxsb2Moc2l6ZW9mKGludCkgKiBwYXJ0ZGVzYy0+bnBhcnRzKTsKKwkJCWlmIChwYXJ0ZGVz Yy0+bnBhcnRzID09IHBpbmZvLT5ucGFydHMpCiAJCQl7Ci0JCQkJUGFydGl0aW9uZWRSZWxQcnVu aW5nRGF0YSAqcHBydW5lID0gJnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVtqXTsKLQkJCQlp bnQJCQlucGFydHMgPSBwcHJ1bmUtPm5wYXJ0czsKLQkJCQlpbnQJCQlrOworCQkJCS8qCisJCQkJ ICogVGhlcmUgYXJlIG5vIG5ldyBwYXJ0aXRpb25zLCBzbyB0aGlzIGlzIHNpbXBsZS4gIFdlIGNh bgorCQkJCSAqIHNpbXBseSBwb2ludCB0byB0aGUgc3VicGFydF9tYXAgZnJvbSB0aGUgcGxhbiwg YnV0IHdlIG11c3QKKwkJCQkgKiBjb3B5IHRoZSBzdWJwbGFuX21hcCBzaW5jZSB3ZSBtYXkgY2hh bmdlIGl0IGxhdGVyLgorCQkJCSAqLworCQkJCXBwcnVuZS0+c3VicGFydF9tYXAgPSBwaW5mby0+ c3VicGFydF9tYXA7CisJCQkJbWVtY3B5KHBwcnVuZS0+c3VicGxhbl9tYXAsIHBpbmZvLT5zdWJw bGFuX21hcCwKKwkJCQkJICAgc2l6ZW9mKGludCkgKiBwaW5mby0+bnBhcnRzKTsKIAotCQkJCS8q IFdlIGp1c3QgcmVidWlsZCBwcmVzZW50X3BhcnRzIGZyb20gc2NyYXRjaCAqLwotCQkJCWJtc19m cmVlKHBwcnVuZS0+cHJlc2VudF9wYXJ0cyk7Ci0JCQkJcHBydW5lLT5wcmVzZW50X3BhcnRzID0g TlVMTDsKKwkJCQkvKgorCQkJCSAqIERvdWJsZS1jaGVjayB0aGF0IHRoZSBsaXN0IG9mIHVucHJ1 bmVkIHJlbGF0aW9ucyBoYXMgbm90CisJCQkJICogY2hhbmdlZC4gIChQcnVuZWQgcGFydGl0aW9u cyBhcmUgbm90IGluIHJlbGlkX21hcFtdLikKKwkJCQkgKi8KKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJCQkJZm9yIChpbnQgayA9IDA7IGsgPCBwaW5mby0+bnBhcnRzOyBrKyspCisJCQkJ eworCQkJCQlBc3NlcnQocGFydGRlc2MtPm9pZHNba10gPT0gcGluZm8tPnJlbGlkX21hcFtrXSB8 fAorCQkJCQkJICAgcGluZm8tPnN1YnBsYW5fbWFwW2tdID09IC0xKTsKKwkJCQl9CisjZW5kaWYK KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJCQlwZF9pZHggPSAwOworCQkJCWludAkJCXBw X2lkeDsKIAotCQkJCWZvciAoayA9IDA7IGsgPCBucGFydHM7IGsrKykKKwkJCQkvKgorCQkJCSAq IFNvbWUgbmV3IHBhcnRpdGlvbnMgaGF2ZSBhcHBlYXJlZCBzaW5jZSBwbGFuIHRpbWUsIGFuZAor CQkJCSAqIHRob3NlIGFyZSByZWZsZWN0ZWQgaW4gb3VyIFBhcnRpdGlvbkRlc2MgYnV0IHdlcmUg bm90CisJCQkJICogcHJlc2VudCBpbiB0aGUgb25lIHVzZWQgdG8gY29uc3RydWN0IHN1YnBsYW5f bWFwIGFuZAorCQkJCSAqIHN1YnBhcnRfbWFwLiAgU28gd2UgbXVzdCBjb25zdHJ1Y3QgbmV3IGFu ZCBsb25nZXIgYXJyYXlzCisJCQkJICogd2hlcmUgdGhlIHBhcnRpdGlvbnMgdGhhdCB3ZXJlIG9y aWdpbmFsbHkgcHJlc2VudCBtYXAgdG8KKwkJCQkgKiB0aGUgc2FtZSBzdWItc3RydWN0dXJlcywg YW5kIGFueSBhZGRlZCBwYXJ0aXRpb25zIG1hcCB0bworCQkJCSAqIC0xLCBhcyBpZiB0aGUgbmV3 IHBhcnRpdGlvbnMgaGFkIGJlZW4gcHJ1bmVkLgorCQkJCSAqCisJCQkJICogTm90ZTogcGluZm8t PnJlbGlkX21hcFtdIG1heSBjb250YWluIEludmFsaWRPaWQgZW50cmllcyBmb3IKKwkJCQkgKiBw YXJ0aXRpb25zIHBydW5lZCBieSB0aGUgcGxhbm5lci4gIFdlIGNhbm5vdCB0ZWxsIGV4YWN0bHkK KwkJCQkgKiB3aGljaCBvZiB0aGUgcGFydGRlc2MgZW50cmllcyB0aGVzZSBjb3JyZXNwb25kIHRv LCBidXQgd2UKKwkJCQkgKiBkb24ndCBoYXZlIHRvOyBqdXN0IHNraXAgb3ZlciB0aGVtLiAgVGhl IG5vbi1wcnVuZWQKKwkJCQkgKiByZWxpZF9tYXAgZW50cmllcywgaG93ZXZlciwgaGFkIGJldHRl ciBiZSBhIHN1YnNldCBvZiB0aGUKKwkJCQkgKiBwYXJ0ZGVzYyBlbnRyaWVzIGFuZCBpbiB0aGUg c2FtZSBvcmRlci4KKwkJCQkgKi8KKwkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFwID0gcGFsbG9jKHNp emVvZihpbnQpICogcGFydGRlc2MtPm5wYXJ0cyk7CisJCQkJZm9yIChwcF9pZHggPSAwOyBwcF9p ZHggPCBwYXJ0ZGVzYy0+bnBhcnRzOyBwcF9pZHgrKykKIAkJCQl7Ci0JCQkJCWludAkJCW9sZGlk eCA9IHBwcnVuZS0+c3VicGxhbl9tYXBba107Ci0JCQkJCWludAkJCXN1YmlkeDsKKwkJCQkJLyog U2tpcCBhbnkgSW52YWxpZE9pZCByZWxpZF9tYXAgZW50cmllcyAqLworCQkJCQl3aGlsZSAocGRf aWR4IDwgcGluZm8tPm5wYXJ0cyAmJgorCQkJCQkJICAgIU9pZElzVmFsaWQocGluZm8tPnJlbGlk X21hcFtwZF9pZHhdKSkKKwkJCQkJCXBkX2lkeCsrOwogCi0JCQkJCS8qCi0JCQkJCSAqIElmIHRo aXMgcGFydGl0aW9uIGV4aXN0ZWQgYXMgYSBzdWJwbGFuIHRoZW4gY2hhbmdlIHRoZQotCQkJCQkg KiBvbGQgc3VicGxhbiBpbmRleCB0byB0aGUgbmV3IHN1YnBsYW4gaW5kZXguICBUaGUgbmV3Ci0J CQkJCSAqIGluZGV4IG1heSBiZWNvbWUgLTEgaWYgdGhlIHBhcnRpdGlvbiB3YXMgcHJ1bmVkIGFi b3ZlLAotCQkJCQkgKiBvciBpdCBtYXkganVzdCBjb21lIGVhcmxpZXIgaW4gdGhlIHN1YnBsYW4g bGlzdCBkdWUgdG8KLQkJCQkJICogc29tZSBzdWJwbGFucyBiZWluZyByZW1vdmVkIGVhcmxpZXIg aW4gdGhlIGxpc3QuICBJZgotCQkJCQkgKiBpdCdzIGEgc3VicGFydGl0aW9uLCBhZGQgaXQgdG8g cHJlc2VudF9wYXJ0cyB1bmxlc3MKLQkJCQkJICogaXQncyBlbnRpcmVseSBwcnVuZWQuCi0JCQkJ CSAqLwotCQkJCQlpZiAob2xkaWR4ID49IDApCisJCQkJCWlmIChwZF9pZHggPCBwaW5mby0+bnBh cnRzICYmCisJCQkJCQlwaW5mby0+cmVsaWRfbWFwW3BkX2lkeF0gPT0gcGFydGRlc2MtPm9pZHNb cHBfaWR4XSkKIAkJCQkJewotCQkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5zdWJwbGFucyk7Ci0JCQkJ CQlwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0g MTsKLQotCQkJCQkJaWYgKG5ld19zdWJwbGFuX2luZGV4ZXNbb2xkaWR4XSA+IDApCi0JCQkJCQkJ cHBydW5lLT5wcmVzZW50X3BhcnRzID0KLQkJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5w cmVzZW50X3BhcnRzLCBrKTsKKwkJCQkJCS8qIG1hdGNoLi4uICovCisJCQkJCQlwcHJ1bmUtPnN1 YnBsYW5fbWFwW3BwX2lkeF0gPQorCQkJCQkJCXBpbmZvLT5zdWJwbGFuX21hcFtwZF9pZHhdOwor CQkJCQkJcHBydW5lLT5zdWJwYXJ0X21hcFtwcF9pZHhdID0KKwkJCQkJCQlwaW5mby0+c3VicGFy dF9tYXBbcGRfaWR4XTsKKwkJCQkJCXBkX2lkeCsrOwogCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKChz dWJpZHggPSBwcHJ1bmUtPnN1YnBhcnRfbWFwW2tdKSA+PSAwKQorCQkJCQllbHNlCiAJCQkJCXsK LQkJCQkJCVBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnN1YnBydW5lOwotCi0JCQkJCQlzdWJw cnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbc3ViaWR4XTsKLQotCQkJCQkJaWYg KCFibXNfaXNfZW1wdHkoc3VicHJ1bmUtPnByZXNlbnRfcGFydHMpKQotCQkJCQkJCXBwcnVuZS0+ cHJlc2VudF9wYXJ0cyA9Ci0JCQkJCQkJCWJtc19hZGRfbWVtYmVyKHBwcnVuZS0+cHJlc2VudF9w YXJ0cywgayk7CisJCQkJCQkvKiB0aGlzIHBhcnRkZXNjIGVudHJ5IGlzIG5vdCBpbiB0aGUgcGxh biAqLworCQkJCQkJcHBydW5lLT5zdWJwbGFuX21hcFtwcF9pZHhdID0gLTE7CisJCQkJCQlwcHJ1 bmUtPnN1YnBhcnRfbWFwW3BwX2lkeF0gPSAtMTsKIAkJCQkJfQogCQkJCX0KKworCQkJCS8qCisJ CQkJICogSXQgbWlnaHQgc2VlbSB0aGF0IHdlIG5lZWQgdG8gc2tpcCBhbnkgdHJhaWxpbmcgSW52 YWxpZE9pZAorCQkJCSAqIGVudHJpZXMgaW4gcGluZm8tPnJlbGlkX21hcCBiZWZvcmUgY2hlY2tp bmcgdGhhdCB3ZSBzY2FubmVkCisJCQkJICogYWxsIG9mIHRoZSByZWxpZF9tYXAuICBCdXQgd2Ug d2lsbCBoYXZlIHNraXBwZWQgdGhlbSBhYm92ZSwKKwkJCQkgKiBiZWNhdXNlIHRoZXkgbXVzdCBj b3JyZXNwb25kIHRvIHNvbWUgcGFydGRlc2MtPm9pZHMKKwkJCQkgKiBlbnRyaWVzOyB3ZSBqdXN0 IGNvdWxkbid0IHRlbGwgd2hpY2guCisJCQkJICovCisJCQkJaWYgKHBkX2lkeCAhPSBwaW5mby0+ bnBhcnRzKQorCQkJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IG1hdGNoIHBhcnRpdGlvbiBjaGls ZCB0YWJsZXMgdG8gcGxhbiBlbGVtZW50cyIpOwogCQkJfQorCisJCQkvKiBwcmVzZW50X3BhcnRz IGlzIGFsc28gc3ViamVjdCB0byBsYXRlciBtb2RpZmljYXRpb24gKi8KKwkJCXBwcnVuZS0+cHJl c2VudF9wYXJ0cyA9IGJtc19jb3B5KHBpbmZvLT5wcmVzZW50X3BhcnRzKTsKKwkJCXBwcnVuZS0+ aW5pdGlhbF9wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwczsKKwkJ CWlmIChwcHJ1bmUtPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKKwkJCQlFeGVjSW5pdFBydW5pbmdD b250ZXh0KCZwcHJ1bmUtPmluaXRpYWxfY29udGV4dCwKKwkJCQkJCQkJCSAgIHBwcnVuZS0+aW5p dGlhbF9wcnVuaW5nX3N0ZXBzLAorCQkJCQkJCQkJICAgcGFydGRlc2MsIHBhcnRrZXksIE5VTEws IGVjb250ZXh0KTsKKworCQkJdGFibGVfY2xvc2UocGFydHJlbCwgTm9Mb2NrKTsKKwkJCWorKzsK IAkJfQorCQlpKys7CisJfQorCisJLyoKKwkgKiBGb3IgZWFjaCBoaWVyYXJjaHksIGRvIHRoZSBw cnVuaW5nIHRlc3RzLCBhbmQgYWRkIG5vbmRlbGV0YWJsZQorCSAqIHN1YnBsYW5zJyBpbmRleGVz IHRvIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbl9wYXJ0X2hpZXJhcmNoaWVzOyBp KyspCisJeworCQlQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhID0gcGFydHBydW5lZGF0 YVtpXTsKKwkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lOwogCiAJCS8qCi0JCSAq IFdlIG11c3QgYWxzbyByZWNvbXB1dGUgdGhlIG90aGVyX3N1YnBsYW5zIHNldCwgc2luY2UgaW5k ZXhlcyBpbiBpdAotCQkgKiBtYXkgY2hhbmdlLgorCQkgKiBXZSBwYXNzIHRoZSAxc3QgaXRlbSBi ZWxvbmdpbmcgdG8gdGhlIHJvb3QgdGFibGUgb2YgdGhlIGhpZXJhcmNoeQorCQkgKiBhbmQgZmlu ZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKCkgdGFrZXMgY2FyZSBvZiByZWN1cnNpbmcgdG8K KwkJICogb3RoZXIgKGxvd2VyLWxldmVsKSBwYXJlbnRzIGFzIG5lZWRlZC4KIAkJICovCi0JCW5l d19vdGhlcl9zdWJwbGFucyA9IE5VTEw7Ci0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKHBydW5lc3RhdGUtPm90aGVyX3N1YnBsYW5zLCBpKSkgPj0gMCkKLQkJCW5ld19v dGhlcl9zdWJwbGFucyA9IGJtc19hZGRfbWVtYmVyKG5ld19vdGhlcl9zdWJwbGFucywKLQkJCQkJ CQkJCQkJCW5ld19zdWJwbGFuX2luZGV4ZXNbaV0gLSAxKTsKKwkJcHBydW5lID0gJnBydW5lZGF0 YS0+cGFydHJlbHBydW5lZGF0YVswXTsKKwkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNl KHBydW5lZGF0YSwgcHBydW5lLCB0cnVlLCAmcmVzdWx0KTsKIAotCQlibXNfZnJlZShwcnVuZXN0 YXRlLT5vdGhlcl9zdWJwbGFucyk7Ci0JCXBydW5lc3RhdGUtPm90aGVyX3N1YnBsYW5zID0gbmV3 X290aGVyX3N1YnBsYW5zOworCQkvKgorCQkgKiBDb2xsZWN0IHRoZSBSVCBpbmRleGVzIG9mIHN1 cnZpdmluZyBwYXJlbnRzIGlmIHRoZSBjYWxsZXJzIGFza2VkCisJCSAqIHRvIHNlZSB0aGVtLgor CQkgKi8KKwkJaWYgKHBhcmVudHJlbGlkcykKKwkJeworCQkJaW50CQlqOworCQkJTGlzdCAgICpw YXJ0cmVscHJ1bmVpbmZvcyA9IGxpc3RfbnRoX25vZGUoTGlzdCwKKwkJCQkJCQkJCQkJCQkgIHBy dW5laW5mby0+cHJ1bmVfaW5mb3MsCisJCQkJCQkJCQkJCQkJICBpKTsKIAotCQlwZnJlZShuZXdf c3VicGxhbl9pbmRleGVzKTsKKwkJCWZvciAoaiA9IDA7IGogPCBwcnVuZWRhdGEtPm51bV9wYXJ0 cmVscHJ1bmVkYXRhOyBqKyspCisJCQl7CisJCQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBp bmZvID0gbGlzdF9udGhfbm9kZShQYXJ0aXRpb25lZFJlbFBydW5lSW5mbywKKwkJCQkJCQkJCQkJ CQkJCSAgIHBhcnRyZWxwcnVuZWluZm9zLCBqKTsKKworCQkJCXBwcnVuZSA9ICZwcnVuZWRhdGEt PnBhcnRyZWxwcnVuZWRhdGFbal07CisJCQkJaWYgKCFibXNfaXNfZW1wdHkocHBydW5lLT5wcmVz ZW50X3BhcnRzKSkKKwkJCQkJKnBhcmVudHJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKCpwYXJlbnRy ZWxpZHMsIHBpbmZvLT5ydGluZGV4KTsKKwkJCX0KKwkJfQorCisJCS8qIFJlbGVhc2Ugc3BhY2Ug dXNlZCB1cCBpbiBvdXIgRXhwckNvbnRleHQuICovCisJCVJlc2V0RXhwckNvbnRleHQoZWNvbnRl eHQpOworCX0KKworCS8qIEFkZCBpbiBhbnkgc3VicGxhbnMgdGhhdCBwYXJ0aXRpb24gcHJ1bmlu ZyBkaWRuJ3QgYWNjb3VudCBmb3IuICovCisJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXJzKHJlc3Vs dCwgcHJ1bmVpbmZvLT5vdGhlcl9zdWJwbGFucyk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisKKwkvKiBDb3B5IHJlc3VsdCBvdXQgb2YgdGhlIHRlbXAgY29udGV4dCBi ZWZvcmUgd2UgcmVzZXQgaXQgKi8KKwlyZXN1bHQgPSBibXNfY29weShyZXN1bHQpOworCWlmIChw YXJlbnRyZWxpZHMpCisJCSpwYXJlbnRyZWxpZHMgPSBibXNfY29weSgqcGFyZW50cmVsaWRzKTsK KworCS8qIFNhZmUgdG8gZHJvcCB0aGUgdGVtcG9yYXJ5IGNvbnRleHQgKi8KKwlNZW1vcnlDb250 ZXh0RGVsZXRlKHRtcGNvbnRleHQpOworCisJLyogRnJlZSB0aGUgRXhwclN0YXRlLCBhbmQgRVN0 YXRlIGlmIG5lZWRlZC4gKi8KKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRydWUpOworCWlm IChmcmVlX2VzdGF0ZSkKKwl7CisJCUZyZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CisJCWVzdGF0 ZSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTIwMTgsNiArMjI2NywxMSBAQCBF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSkK IAkJcHJ1bmVkYXRhID0gcHJ1bmVzdGF0ZS0+cGFydHBydW5lZGF0YVtpXTsKIAkJcHBydW5lID0g JnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVswXTsKIAorCQkvKgorCQkgKiBXZSBwYXNzIHRo ZSAxc3QgaXRlbSBiZWxvbmdpbmcgdG8gdGhlIHJvb3QgdGFibGUgb2YgdGhlIGhpZXJhcmNoeQor CQkgKiBhbmQgZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKCkgdGFrZXMgY2FyZSBvZiBy ZWN1cnNpbmcgdG8KKwkJICogb3RoZXIgKGxvd2VyLWxldmVsKSBwYXJlbnRzIGFzIG5lZWRlZC4K KwkJICovCiAJCWZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShwcnVuZWRhdGEsIHBwcnVu ZSwgZmFsc2UsICZyZXN1bHQpOwogCiAJCS8qIEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2Vk IHNwYWNlIGluIG5vZGUncyBwc19FeHByQ29udGV4dCB0b28gKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVB cHBlbmQuYwppbmRleCA2YTJkYWE2ZTc2Li43ZjgxMzQ3NmFiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUFwcGVuZC5jCkBAIC0xMzYsMjQgKzEzNiwxNSBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlv biBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCiAJaWYgKG5vZGUt PnBhcnRfcHJ1bmVfaW5mbyAhPSBOVUxMKQogCXsKLQkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1 bmVzdGF0ZTsKLQotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZh bHVhdGUgcGFydGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUs ICZhcHBlbmRzdGF0ZS0+cHMpOwotCi0JCS8qIENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVj dHVyZSBmb3IgcHJ1bmluZy4gKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25Q cnVuZVN0YXRlKCZhcHBlbmRzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkgICBub2RlLT5wYXJ0X3By dW5lX2luZm8pOwotCQlhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRlOwot Ci0JCS8qIFBlcmZvcm0gYW4gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmUsIGlmIHJlcXVpcmVkLiAq LwotCQlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwkJaWYgKG5vZGUtPnBhcnRf cHJ1bmVfaW5mby0+Y29udGFpbnNfaW5pdF9zdGVwcykKIAkJewotCQkJLyogRGV0ZXJtaW5lIHdo aWNoIHN1YnBsYW5zIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nICovCi0JCQl2YWxpZHN1YnBsYW5z ID0gRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLAotCQkJCQkJCQkJ CQkJCQkJbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpKTsKLQorCQkJdmFsaWRzdWJwbGFu cyA9CisJCQkJRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5wYXJ0X3BydW5l X2luZm8sCisJCQkJCQkJCQkJCQllc3RhdGUsIGVzdGF0ZS0+ZXNfcmFuZ2VfdGFibGUsCisJCQkJ CQkJCQkJCQllc3RhdGUtPmVzX3BhcmFtX2xpc3RfaW5mbywKKwkJCQkJCQkJCQkJCU5VTEwpOwog CQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOworCQkJQXNzZXJ0KG5w bGFucyA+PSAwKTsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTE2MywxMiArMTU0LDI2IEBAIEV4ZWNJ bml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQl2 YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAkJfQog CisJCS8qIENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcnVuLXRpbWUgcHJ1 bmluZy4gKi8KKwkJaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5mby0+Y29udGFpbnNfZXhlY19zdGVw cykKKwkJeworCQkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKworCQkJLyogV2Ug bWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBy cyAqLworCQkJRXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgJmFwcGVuZHN0YXRlLT5wcyk7 CisJCQlwcnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoJmFwcGVuZHN0 YXRlLT5wcywKKwkJCQkJCQkJCQkJCQkgICBub2RlLT5wYXJ0X3BydW5lX2luZm8sCisJCQkJCQkJ CQkJCQkJICAgdmFsaWRzdWJwbGFucywKKwkJCQkJCQkJCQkJCQkgICBsaXN0X2xlbmd0aChub2Rl LT5hcHBlbmRwbGFucykpOworCisJCQlhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVu ZXN0YXRlOworCQl9CiAJCS8qCiAJCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1 aXJlZCBhbmQgdGhlcmUncyBhdCBsZWFzdCBvbmUKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwg YXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2Fs bHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRl LT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWVsc2UKIAkJCWFwcGVuZHN0YXRlLT5h c192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CiAJ fQogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVu ZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggNjE3YmZm YjIwNi4uNTFjNWMzNDMzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMK QEAgLTg0LDIzICs4NCwxNSBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkvKiBJZiBydW4tdGltZSBwYXJ0aXRpb24g cHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0IHVwIG5vdyAqLwogCWlmIChub2RlLT5w YXJ0X3BydW5lX2luZm8gIT0gTlVMTCkKIAl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5l c3RhdGU7Ci0KLQkJLyogV2UgbWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1 YXRlIHBhcnRpdGlvbiBleHBycyAqLwotCQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCAm bWVyZ2VzdGF0ZS0+cHMpOwotCi0JCXBydW5lc3RhdGUgPSBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZSgmbWVyZ2VzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkgICBub2RlLT5wYXJ0X3BydW5l X2luZm8pOwotCQltZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7Ci0KLQkJ LyogUGVyZm9ybSBhbiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuICovCi0J CWlmIChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQorCQlpZiAobm9kZS0+cGFydF9wcnVu ZV9pbmZvLT5jb250YWluc19pbml0X3N0ZXBzKQogCQl7Ci0JCQkvKiBEZXRlcm1pbmUgd2hpY2gg c3VicGxhbnMgc3Vydml2ZSBpbml0aWFsIHBydW5pbmcgKi8KLQkJCXZhbGlkc3VicGxhbnMgPSBF eGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsCi0JCQkJCQkJCQkJCQkJ CQlsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5zKSk7Ci0KKwkJCXZhbGlkc3VicGxhbnMgPQor CQkJCUV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+cGFydF9wcnVuZV9pbmZv LAorCQkJCQkJCQkJCQkJZXN0YXRlLCBlc3RhdGUtPmVzX3JhbmdlX3RhYmxlLAorCQkJCQkJCQkJ CQkJZXN0YXRlLT5lc19wYXJhbV9saXN0X2luZm8sCisJCQkJCQkJCQkJCQlOVUxMKTsKIAkJCW5w bGFucyA9IGJtc19udW1fbWVtYmVycyh2YWxpZHN1YnBsYW5zKTsKKwkJCUFzc2VydChucGxhbnMg Pj0gMCk7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC0xMTAsMTMgKzEwMiwyOCBAQCBFeGVjSW5pdE1l cmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykK IAkJCXZhbGlkc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwog CQl9CiAKKwkJLyogQ3JlYXRlIHRoZSB3b3JraW5nIGRhdGEgc3RydWN0dXJlIGZvciBydW4tdGlt ZSBwcnVuaW5nLiAqLworCQlpZiAobm9kZS0+cGFydF9wcnVuZV9pbmZvLT5jb250YWluc19leGVj X3N0ZXBzKQorCQl7CisJCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCisJCQkv KiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9u IGV4cHJzICovCisJCQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCAmbWVyZ2VzdGF0ZS0+ cHMpOworCQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCZtZXJn ZXN0YXRlLT5wcywKKwkJCQkJCQkJCQkJCQkgICBub2RlLT5wYXJ0X3BydW5lX2luZm8sCisJCQkJ CQkJCQkJCQkJICAgdmFsaWRzdWJwbGFucywKKwkJCQkJCQkJCQkJCQkgICBsaXN0X2xlbmd0aChu b2RlLT5tZXJnZXBsYW5zKSk7CisKKwkJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1 bmVzdGF0ZTsKKwkJfQogCQkvKgogCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgcmVx dWlyZWQgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxs IGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNh bGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0 ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQllbHNlCiAJCQltZXJnZXN0YXRlLT5t c192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisK IAl9CiAJZWxzZQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZGYwYjc0Nzg4My4uNTdmMmZj ZTNkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTk0LDkgKzk0LDExIEBAIF9jb3B5UGxhbm5l ZFN0bXQoY29uc3QgUGxhbm5lZFN0bXQgKmZyb20pCiAJQ09QWV9TQ0FMQVJfRklFTEQodHJhbnNp ZW50UGxhbik7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZGVwZW5kc09uUm9sZSk7CiAJQ09QWV9TQ0FM QVJfRklFTEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlDT1BZX1NDQUxBUl9GSUVMRCh1c2VzUHJl RXhlY1BydW5pbmcpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGppdEZsYWdzKTsKIAlDT1BZX05PREVf RklFTEQocGxhblRyZWUpOwogCUNPUFlfTk9ERV9GSUVMRChydGFibGUpOworCUNPUFlfQklUTUFQ U0VUX0ZJRUxEKHJlbGF0aW9uUlRJcyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHJlc3VsdFJlbGF0aW9u cyk7CiAJQ09QWV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CiAJQ09QWV9OT0RFX0ZJRUxE KHN1YnBsYW5zKTsKQEAgLTEyNzcsNiArMTI3OSw4IEBAIF9jb3B5UGFydGl0aW9uUHJ1bmVJbmZv KGNvbnN0IFBhcnRpdGlvblBydW5lSW5mbyAqZnJvbSkKIAlQYXJ0aXRpb25QcnVuZUluZm8gKm5l d25vZGUgPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUluZm8pOwogCiAJQ09QWV9OT0RFX0ZJRUxE KHBydW5lX2luZm9zKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChjb250YWluc19pbml0X3N0ZXBzKTsK KwlDT1BZX1NDQUxBUl9GSUVMRChjb250YWluc19leGVjX3N0ZXBzKTsKIAlDT1BZX0JJVE1BUFNF VF9GSUVMRChvdGhlcl9zdWJwbGFucyk7CiAKIAlyZXR1cm4gbmV3bm9kZTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1 bmNzLmMKaW5kZXggZTI3NjI2NDg4Mi4uYTEzZWUwODdhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMK QEAgLTMxLDcgKzMxLDEwIEBAIHN0YXRpYyBib29sIHBsYW5zdGF0ZV93YWxrX3N1YnBsYW5zKExp c3QgKnBsYW5zLCBib29sICgqd2Fsa2VyKSAoKSwKIAkJCQkJCQkJCXZvaWQgKmNvbnRleHQpOwog c3RhdGljIGJvb2wgcGxhbnN0YXRlX3dhbGtfbWVtYmVycyhQbGFuU3RhdGUgKipwbGFuc3RhdGVz LCBpbnQgbnBsYW5zLAogCQkJCQkJCQkgICBib29sICgqd2Fsa2VyKSAoKSwgdm9pZCAqY29udGV4 dCk7Ci0KK3N0YXRpYyBib29sIHBsYW5fd2Fsa19zdWJwbGFucyhMaXN0ICpwbGFucywKKwkJCQkg ICBib29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgICB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBib29s IHBsYW5fd2Fsa19tZW1iZXJzKExpc3QgKnBsYW5zLCBib29sICgqd2Fsa2VyKSAoKSwgdm9pZCAq Y29udGV4dCk7CiAKIC8qCiAgKglleHByVHlwZSAtCkBAIC00MTA1LDMgKzQxMDgsMTE5IEBAIHBs YW5zdGF0ZV93YWxrX21lbWJlcnMoUGxhblN0YXRlICoqcGxhbnN0YXRlcywgaW50IG5wbGFucywK IAogCXJldHVybiBmYWxzZTsKIH0KKworLyoKKyAqIHBsYW5fdHJlZV93YWxrZXIgLS0tIHdhbGsg cGxhbnRyZWVzCisgKgorICogVGhlIHdhbGtlciBoYXMgYWxyZWFkeSB2aXNpdGVkIHRoZSBjdXJy ZW50IG5vZGUsIGFuZCBzbyB3ZSBuZWVkIG9ubHkKKyAqIHJlY3Vyc2UgaW50byBhbnkgc3ViLW5v ZGVzIGl0IGhhcy4KKyAqLworYm9vbAorcGxhbl90cmVlX3dhbGtlcihQbGFuICpwbGFuLAorCQkJ CSBib29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgdm9pZCAqY29udGV4dCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKworCS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBj b21wbGV4IHBsYW4gdHJlZXMgKi8KKwljaGVja19zdGFja19kZXB0aCgpOworCisJLyogaW5pdFBs YW4tcyAqLworCWlmIChwbGFuX3dhbGtfc3VicGxhbnMocGxhbi0+aW5pdFBsYW4sIHdhbGtlciwg Y29udGV4dCkpCisJCXJldHVybiB0cnVlOworCisJLyogbGVmdHRyZWUgKi8KKwlpZiAob3V0ZXJQ bGFuKHBsYW4pKQorCXsKKwkJaWYgKHdhbGtlcihvdXRlclBsYW4ocGxhbiksIGNvbnRleHQpKQor CQkJcmV0dXJuIHRydWU7CisJfQorCisJLyogcmlnaHR0cmVlICovCisJaWYgKGlubmVyUGxhbihw bGFuKSkKKwl7CisJCWlmICh3YWxrZXIoaW5uZXJQbGFuKHBsYW4pLCBjb250ZXh0KSkKKwkJCXJl dHVybiB0cnVlOworCX0KKworCS8qIHNwZWNpYWwgY2hpbGQgcGxhbnMgKi8KKwlzd2l0Y2ggKG5v ZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJaWYgKHBsYW5fd2Fsa19tZW1i ZXJzKCgoQXBwZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNv bnRleHQpKQorCQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVu ZDoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJn ZXBsYW5zLAorCQkJCQkJCQkgIHdhbGtlciwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJ CQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygo KEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJCSAgd2Fsa2VyLCBjb250 ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJ CQlpZiAocGxhbl93YWxrX21lbWJlcnMoKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnMs CisJCQkJCQkJCSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFr OworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQkJaWYgKHdhbGtlcigoKFN1YnF1ZXJ5U2NhbiAq KSBwbGFuKS0+c3VicGxhbiwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlmb3JlYWNoKGxjLCAoKEN1c3RvbVNjYW4gKikgcGxh biktPmN1c3RvbV9wbGFucykKKwkJCXsKKwkJCQlpZiAod2Fsa2VyKChQbGFuICopIGxmaXJzdChs YyksIGNvbnRleHQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogV2FsayBh IGxpc3Qgb2YgU3ViUGxhbnMgKG9yIGluaXRQbGFucywgd2hpY2ggYWxzbyB1c2UgU3ViUGxhbiBu b2RlcykuCisgKi8KK3N0YXRpYyBib29sCitwbGFuX3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMs CisJCQkJICAgYm9vbCAoKndhbGtlcikgKCksCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlM aXN0Q2VsbCAgICpsYzsKKwlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSAoUGxhbm5lZFN0bXQg KikgY29udGV4dDsKKworCWZvcmVhY2gobGMsIHBsYW5zKQorCXsKKwkJU3ViUGxhbiAqc3AgPSBs Zmlyc3Rfbm9kZShTdWJQbGFuLCBsYyk7CisJCVBsYW4gKnAgPSBsaXN0X250aChwbGFubmVkc3Rt dC0+c3VicGxhbnMsIHNwLT5wbGFuX2lkIC0gMSk7CisKKwkJaWYgKHdhbGtlcihwLCBjb250ZXh0 KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFdh bGsgdGhlIGNvbnN0aXR1ZW50IHBsYW5zIG9mIGEgTW9kaWZ5VGFibGUsIEFwcGVuZCwgTWVyZ2VB cHBlbmQsCisgKiBCaXRtYXBBbmQsIG9yIEJpdG1hcE9yIG5vZGUuCisgKi8KK3N0YXRpYyBib29s CitwbGFuX3dhbGtfbWVtYmVycyhMaXN0ICpwbGFucywgYm9vbCAoKndhbGtlcikgKCksIHZvaWQg KmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOworCisJZm9yZWFjaChsYywgcGxhbnMpCisJewor CQlpZiAod2Fsa2VyKGxmaXJzdChsYyksIGNvbnRleHQpKQorCQkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggOTFhODliNmQ1MS4uODM2 NDYzM2QyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysgYi9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0zMTIsOSArMzEyLDExIEBAIF9vdXRQbGFu bmVkU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lZFN0bXQgKm5vZGUpCiAJV1JJVEVf Qk9PTF9GSUVMRCh0cmFuc2llbnRQbGFuKTsKIAlXUklURV9CT09MX0ZJRUxEKGRlcGVuZHNPblJv bGUpOwogCVdSSVRFX0JPT0xfRklFTEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlXUklURV9CT09M X0ZJRUxEKHVzZXNQcmVFeGVjUHJ1bmluZyk7CiAJV1JJVEVfSU5UX0ZJRUxEKGppdEZsYWdzKTsK IAlXUklURV9OT0RFX0ZJRUxEKHBsYW5UcmVlKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJ0YWJsZSk7 CisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKHJlbGF0aW9uUlRJcyk7CiAJV1JJVEVfTk9ERV9GSUVM RChyZXN1bHRSZWxhdGlvbnMpOwogCVdSSVRFX05PREVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsK IAlXUklURV9OT0RFX0ZJRUxEKHN1YnBsYW5zKTsKQEAgLTEwMDMsNiArMTAwNSw4IEBAIF9vdXRQ YXJ0aXRpb25QcnVuZUluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBhcnRpdGlvblBydW5lSW5m byAqbm9kZSkKIAlXUklURV9OT0RFX1RZUEUoIlBBUlRJVElPTlBSVU5FSU5GTyIpOwogCiAJV1JJ VEVfTk9ERV9GSUVMRChwcnVuZV9pbmZvcyk7CisJV1JJVEVfQk9PTF9GSUVMRChjb250YWluc19p bml0X3N0ZXBzKTsKKwlXUklURV9CT09MX0ZJRUxEKGNvbnRhaW5zX2V4ZWNfc3RlcHMpOwogCVdS SVRFX0JJVE1BUFNFVF9GSUVMRChvdGhlcl9zdWJwbGFucyk7CiB9CiAKQEAgLTIyNzMsNiArMjI3 Nyw3IEBAIF9vdXRQbGFubmVyR2xvYmFsKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVyR2xv YmFsICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoc3VicGxhbnMpOwogCVdSSVRFX0JJVE1BUFNF VF9GSUVMRChyZXdpbmRQbGFuSURzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGZpbmFscnRhYmxlKTsK KwlXUklURV9CSVRNQVBTRVRfRklFTEQocmVsYXRpb25SVElzKTsKIAlXUklURV9OT0RFX0ZJRUxE KGZpbmFscm93bWFya3MpOwogCVdSSVRFX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlX UklURV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9ub2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4 IGQ3OWFmNmU1NmUuLmRmMDY3ODJjM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3Jl YWRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0xNTg1LDkg KzE1ODUsMTEgQEAgX3JlYWRQbGFubmVkU3RtdCh2b2lkKQogCVJFQURfQk9PTF9GSUVMRCh0cmFu c2llbnRQbGFuKTsKIAlSRUFEX0JPT0xfRklFTEQoZGVwZW5kc09uUm9sZSk7CiAJUkVBRF9CT09M X0ZJRUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CisJUkVBRF9CT09MX0ZJRUxEKHVzZXNQcmVFeGVj UHJ1bmluZyk7CiAJUkVBRF9JTlRfRklFTEQoaml0RmxhZ3MpOwogCVJFQURfTk9ERV9GSUVMRChw bGFuVHJlZSk7CiAJUkVBRF9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJUkVBRF9CSVRNQVBTRVRfRklF TEQocmVsYXRpb25SVElzKTsKIAlSRUFEX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlS RUFEX05PREVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsKIAlSRUFEX05PREVfRklFTEQoc3VicGxh bnMpOwpAQCAtMjUzMyw2ICsyNTM1LDggQEAgX3JlYWRQYXJ0aXRpb25QcnVuZUluZm8odm9pZCkK IAlSRUFEX0xPQ0FMUyhQYXJ0aXRpb25QcnVuZUluZm8pOwogCiAJUkVBRF9OT0RFX0ZJRUxEKHBy dW5lX2luZm9zKTsKKwlSRUFEX0JPT0xfRklFTEQoY29udGFpbnNfaW5pdF9zdGVwcyk7CisJUkVB RF9CT09MX0ZJRUxEKGNvbnRhaW5zX2V4ZWNfc3RlcHMpOwogCVJFQURfQklUTUFQU0VUX0ZJRUxE KG90aGVyX3N1YnBsYW5zKTsKIAogCVJFQURfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCmluZGV4IGJkMDFlYzA1MjYuLjM3YTA3Y2IyNTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTUxNyw4ICs1MTcsMTAgQEAgc3RhbmRhcmRfcGxhbm5lcihR dWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMs CiAJcmVzdWx0LT50cmFuc2llbnRQbGFuID0gZ2xvYi0+dHJhbnNpZW50UGxhbjsKIAlyZXN1bHQt PmRlcGVuZHNPblJvbGUgPSBnbG9iLT5kZXBlbmRzT25Sb2xlOwogCXJlc3VsdC0+cGFyYWxsZWxN b2RlTmVlZGVkID0gZ2xvYi0+cGFyYWxsZWxNb2RlTmVlZGVkOworCXJlc3VsdC0+dXNlc1ByZUV4 ZWNQcnVuaW5nID0gZ2xvYi0+dXNlc1ByZUV4ZWNQcnVuaW5nOwogCXJlc3VsdC0+cGxhblRyZWUg PSB0b3BfcGxhbjsKIAlyZXN1bHQtPnJ0YWJsZSA9IGdsb2ItPmZpbmFscnRhYmxlOworCXJlc3Vs dC0+cmVsYXRpb25SVElzID0gZ2xvYi0+cmVsYXRpb25SVElzOwogCXJlc3VsdC0+cmVzdWx0UmVs YXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRpb25z ID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBnbG9iLT5zdWJw bGFuczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA2Y2NlYzc1OWJkLi40 NjE2ZGM2NzVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC00ODMsNiAr NDgzLDcgQEAgc3RhdGljIHZvaWQKIGFkZF9ydGVfdG9fZmxhdF9ydGFibGUoUGxhbm5lckdsb2Jh bCAqZ2xvYiwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogewogCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsK KwlJbmRleAkJcnRpID0gbGlzdF9sZW5ndGgoZ2xvYi0+ZmluYWxydGFibGUpICsgMTsKIAogCS8q IGZsYXQgY29weSB0byBkdXBsaWNhdGUgYWxsIHRoZSBzY2FsYXIgZmllbGRzICovCiAJbmV3cnRl ID0gKFJhbmdlVGJsRW50cnkgKikgcGFsbG9jKHNpemVvZihSYW5nZVRibEVudHJ5KSk7CkBAIC01 MTcsNyArNTE4LDEwIEBAIGFkZF9ydGVfdG9fZmxhdF9ydGFibGUoUGxhbm5lckdsb2JhbCAqZ2xv YiwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogCSAqIGJ1dCBpdCB3b3VsZCBwcm9iYWJseSBjb3N0IG1v cmUgY3ljbGVzIHRoYW4gaXQgd291bGQgc2F2ZS4KIAkgKi8KIAlpZiAobmV3cnRlLT5ydGVraW5k ID09IFJURV9SRUxBVElPTikKKwl7CisJCWdsb2ItPnJlbGF0aW9uUlRJcyA9IGJtc19hZGRfbWVt YmVyKGdsb2ItPnJlbGF0aW9uUlRJcywgcnRpKTsKIAkJZ2xvYi0+cmVsYXRpb25PaWRzID0gbGFw cGVuZF9vaWQoZ2xvYi0+cmVsYXRpb25PaWRzLCBuZXdydGUtPnJlbGlkKTsKKwl9CiB9CiAKIC8q CkBAIC0xNTE1LDYgKzE1MTksOSBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZzZXQ7CiAJCQl9CiAJCX0KKworCQlp ZiAoYXBsYW4tPnBhcnRfcHJ1bmVfaW5mby0+Y29udGFpbnNfaW5pdF9zdGVwcykKKwkJCXJvb3Qt Pmdsb2ItPnVzZXNQcmVFeGVjUHJ1bmluZyA9IHRydWU7CiAJfQogCiAJLyogV2UgZG9uJ3QgbmVl ZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KQEAgLTE1NzksNiAr MTU4Niw5IEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAog CQkJCXBpbmZvLT5ydGluZGV4ICs9IHJ0b2Zmc2V0OwogCQkJfQogCQl9CisKKwkJaWYgKG1wbGFu LT5wYXJ0X3BydW5lX2luZm8tPmNvbnRhaW5zX2luaXRfc3RlcHMpCisJCQlyb290LT5nbG9iLT51 c2VzUHJlRXhlY1BydW5pbmcgPSB0cnVlOwogCX0KIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gcmVj dXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4uICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcv cGFydHBydW5lLmMKaW5kZXggZTAwZWRiZTVjOC4uZDI4NzRmNzE2ZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuYwpAQCAtMTQ0LDcgKzE0NCw5IEBAIHN0YXRpYyBMaXN0ICptYWtl X3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkg ICBMaXN0ICpwcnVuZXF1YWwsCiAJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAog CQkJCQkJCQkJCSAgIGludCAqcmVsaWRfc3VicGxhbl9tYXAsCi0JCQkJCQkJCQkJICAgQml0bWFw c2V0ICoqbWF0Y2hlZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVk c3VicGxhbnMsCisJCQkJCQkJCQkJICAgYm9vbCAqY29udGFpbnNfaW5pdF9zdGVwcywKKwkJCQkJ CQkJCQkgICBib29sICpjb250YWluc19leGVjX3N0ZXBzKTsKIHN0YXRpYyB2b2lkIGdlbl9wYXJ0 cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQlQYXJ0 Q2xhdXNlVGFyZ2V0IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0 ICpjb250ZXh0KTsKQEAgLTIzMCw2ICsyMzIsOCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8o UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCSAgICpyZWxp ZF9zdWJwbGFuX21hcDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOworCWJvb2wJCWNvbnRh aW5zX2luaXRfc3RlcHMgPSBmYWxzZTsKKwlib29sCQljb250YWluc19leGVjX3N0ZXBzID0gZmFs c2U7CiAKIAkvKgogCSAqIFNjYW4gdGhlIHN1YnBhdGhzIHRvIHNlZSB3aGljaCBvbmVzIGFyZSBz Y2FucyBvZiBwYXJ0aXRpb24gY2hpbGQKQEAgLTMwOSwxMiArMzEzLDE2IEBAIG1ha2VfcGFydGl0 aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CQlCaXRtYXBzZXQgICpwYXJ0cmVsaWRzID0gKEJpdG1hcHNldCAqKSBsZmlyc3QobGMpOwogCQlM aXN0CSAgICpwaW5mb2xpc3Q7CiAJCUJpdG1hcHNldCAgKm1hdGNoZWRzdWJwbGFucyA9IE5VTEw7 CisJCWJvb2wJCXBhcnRyZWxfY29udGFpbnNfaW5pdF9zdGVwcywKKwkJCQkJcGFydHJlbF9jb250 YWluc19leGVjX3N0ZXBzOwogCiAJCXBpbmZvbGlzdCA9IG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1 bmVpbmZvKHJvb3QsIHBhcmVudHJlbCwKIAkJCQkJCQkJCQkJCSAgcHJ1bmVxdWFsLAogCQkJCQkJ CQkJCQkJICBwYXJ0cmVsaWRzLAogCQkJCQkJCQkJCQkJICByZWxpZF9zdWJwbGFuX21hcCwKLQkJ CQkJCQkJCQkJCSAgJm1hdGNoZWRzdWJwbGFucyk7CisJCQkJCQkJCQkJCQkgICZtYXRjaGVkc3Vi cGxhbnMsCisJCQkJCQkJCQkJCQkgICZwYXJ0cmVsX2NvbnRhaW5zX2luaXRfc3RlcHMsCisJCQkJ CQkJCQkJCQkgICZwYXJ0cmVsX2NvbnRhaW5zX2V4ZWNfc3RlcHMpOwogCiAJCS8qIFdoZW4gcHJ1 bmluZyBpcyBwb3NzaWJsZSwgcmVjb3JkIHRoZSBtYXRjaGVkIHN1YnBsYW5zICovCiAJCWlmIChw aW5mb2xpc3QgIT0gTklMKQpAQCAtMzIzLDYgKzMzMSwxMCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVu ZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJCWFsbG1h dGNoZWRzdWJwbGFucyA9IGJtc19qb2luKG1hdGNoZWRzdWJwbGFucywKIAkJCQkJCQkJCQkgIGFs bG1hdGNoZWRzdWJwbGFucyk7CiAJCX0KKwkJaWYgKCFjb250YWluc19pbml0X3N0ZXBzKQorCQkJ Y29udGFpbnNfaW5pdF9zdGVwcyA9IHBhcnRyZWxfY29udGFpbnNfaW5pdF9zdGVwczsKKwkJaWYg KCFjb250YWluc19leGVjX3N0ZXBzKQorCQkJY29udGFpbnNfZXhlY19zdGVwcyA9IHBhcnRyZWxf Y29udGFpbnNfZXhlY19zdGVwczsKIAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwbGFuX21hcCk7CkBA IC0zMzcsNiArMzQ5LDggQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJLyogRWxzZSBidWlsZCB0aGUgcmVzdWx0IGRh dGEgc3RydWN0dXJlICovCiAJcHJ1bmVpbmZvID0gbWFrZU5vZGUoUGFydGl0aW9uUHJ1bmVJbmZv KTsKIAlwcnVuZWluZm8tPnBydW5lX2luZm9zID0gcHJ1bmVyZWxpbmZvczsKKwlwcnVuZWluZm8t PmNvbnRhaW5zX2luaXRfc3RlcHMgPSBjb250YWluc19pbml0X3N0ZXBzOworCXBydW5laW5mby0+ Y29udGFpbnNfZXhlY19zdGVwcyA9IGNvbnRhaW5zX2V4ZWNfc3RlcHM7CiAKIAkvKgogCSAqIFNv bWUgc3VicGxhbnMgbWF5IG5vdCBiZWxvbmcgdG8gYW55IG9mIHRoZSBpZGVudGlmaWVkIHBhcnRp dGlvbmVkIHJlbHMuCkBAIC00MzUsMTMgKzQ0OSwxOCBAQCBhZGRfcGFydF9yZWxpZHMoTGlzdCAq YWxscGFydHJlbGlkcywgQml0bWFwc2V0ICpwYXJ0cmVsaWRzKQogICogSWYgd2UgY2Fubm90IGZp bmQgYW55IHVzZWZ1bCBydW4tdGltZSBwcnVuaW5nIHN0ZXBzLCByZXR1cm4gTklMLgogICogSG93 ZXZlciwgb24gc3VjY2VzcywgZWFjaCByZWwgaWRlbnRpZmllZCBpbiBwYXJ0cmVsaWRzIHdpbGwg aGF2ZQogICogYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0IGxpc3QsIGV2ZW4gaWYgc29tZSBvZiB0 aGVtIGFyZSB1c2VsZXNzLgorICogKmNvbnRhaW5zX2luaXRfc3RlcHMgYW5kICpjb250YWluc19l eGVjX3N0ZXBzIGFyZSBzZXQgdG8gaW5kaWNhdGUKKyAqIHRoYXQgdGhlIHJldHVybmVkIFBhcnRp dGlvbmVkUmVsUHJ1bmVJbmZvcyBjb250YWlucyBwcnVuaW5nIHN0ZXBzCisgKiB0aGF0IGNhbiBi ZSBwZXJmb3JtZWQgYmVmb3JlIGFuZCBkdXJpbmcgZXhlY3V0aW9uLCByZXNwZWN0aXZlbHkuCiAg Ki8KIHN0YXRpYyBMaXN0ICoKIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkJICBMaXN0ICpwcnVuZXF1 YWwsCiAJCQkJCQkJICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJICBpbnQgKnJlbGlk X3N1YnBsYW5fbWFwLAotCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zKQorCQkJ CQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCSAgYm9vbCAqY29udGFp bnNfaW5pdF9zdGVwcywKKwkJCQkJCQkgIGJvb2wgKmNvbnRhaW5zX2V4ZWNfc3RlcHMpCiB7CiAJ UmVsT3B0SW5mbyAqdGFyZ2V0cGFydCA9IE5VTEw7CiAJTGlzdAkgICAqcGluZm9saXN0ID0gTklM OwpAQCAtNDUyLDYgKzQ3MSwxMCBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCWludAkJCXJ0aTsKIAlpbnQJ CQlpOwogCisJLyogV2lsbCBmaW5kIG91dCBiZWxvdy4gKi8KKwkqY29udGFpbnNfaW5pdF9zdGVw cyA9IGZhbHNlOworCSpjb250YWluc19leGVjX3N0ZXBzID0gZmFsc2U7CisKIAkvKgogCSAqIEV4 YW1pbmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBhcnJh eSB0byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRzIHRvIGluZGV4IG9mIHRoZSBwYXJ0aXRp b25lZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01MzksNiArNTYyLDkgQEAgbWFrZV9wYXJ0aXRp b25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJl bCwKIAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmluZyBzdGVwcy4gIFRoaXMgZmlyc3QgcGFz cyBjcmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0cyB3aGV0aGVy IHRoZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdvdWxkIHJlcXVp cmUgcGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICogSW4gdGhlIGZpcnN0IHBhc3MsIHdlIG5v dGUgd2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNzYXJ5IGJ5CisJCSAqIGJ5IG5vdGluZyB0 aGUgcHJlc2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgogCQkgKi8KIAkJZ2VuX3BhcnRwcnVuZV9z dGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VUX0lOSVRJQUwsCiAJCQkJCQkJ JmNvbnRleHQpOwpAQCAtNjEzLDYgKzYzOSwxMSBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5l aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+ ZXhlY3BhcmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkvKiBSZW1haW5pbmcgZmllbGRzIHdpbGwg YmUgZmlsbGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAorCQlpZiAoISpjb250YWluc19pbml0X3N0 ZXBzKQorCQkJKmNvbnRhaW5zX2luaXRfc3RlcHMgPSAoaW5pdGlhbF9wcnVuaW5nX3N0ZXBzICE9 IE5JTCk7CisJCWlmICghKmNvbnRhaW5zX2V4ZWNfc3RlcHMpCisJCQkqY29udGFpbnNfZXhlY19z dGVwcyA9IChleGVjX3BydW5pbmdfc3RlcHMgIT0gTklMKTsKKwogCQlwaW5mb2xpc3QgPSBsYXBw ZW5kKHBpbmZvbGlzdCwgcGluZm8pOwogCX0KIApAQCAtNzk4LDYgKzgyOSw3IEBAIHBydW5lX2Fw cGVuZF9yZWxfcGFydGl0aW9ucyhSZWxPcHRJbmZvICpyZWwpCiAKIAkvKiBUaGVzZSBhcmUgbm90 IHZhbGlkIHdoZW4gYmVpbmcgY2FsbGVkIGZyb20gdGhlIHBsYW5uZXIgKi8KIAljb250ZXh0LnBs YW5zdGF0ZSA9IE5VTEw7CisJY29udGV4dC5leHByY29udGV4dCA9IE5VTEw7CiAJY29udGV4dC5l eHByc3RhdGVzID0gTlVMTDsKIAogCS8qIEFjdHVhbCBwcnVuaW5nIGhhcHBlbnMgaGVyZS4gKi8K QEAgLTgwOCw4ICs4NDAsOCBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVsT3B0SW5m byAqcmVsKQogICogZ2V0X21hdGNoaW5nX3BhcnRpdGlvbnMKICAqCQlEZXRlcm1pbmUgcGFydGl0 aW9ucyB0aGF0IHN1cnZpdmUgcGFydGl0aW9uIHBydW5pbmcKICAqCi0gKiBOb3RlOiBjb250ZXh0 LT5wbGFuc3RhdGUgbXVzdCBiZSBzZXQgdG8gYSB2YWxpZCBQbGFuU3RhdGUgd2hlbiB0aGUKLSAq IHBydW5pbmdfc3RlcHMgd2VyZSBnZW5lcmF0ZWQgd2l0aCBhIHRhcmdldCBvdGhlciB0aGFuIFBB UlRUQVJHRVRfUExBTk5FUi4KKyAqIE5vdGU6IGNvbnRleHQtPmV4cHJjb250ZXh0IG11c3QgYmUg dmFsaWQgd2hlbiB0aGUgcHJ1bmluZ19zdGVwcyB3ZXJlCisgKiBnZW5lcmF0ZWQgd2l0aCBhIHRh cmdldCBvdGhlciB0aGFuIFBBUlRUQVJHRVRfUExBTk5FUi4KICAqCiAgKiBSZXR1cm5zIGEgQml0 bWFwc2V0IG9mIHRoZSBSZWxPcHRJbmZvLT5wYXJ0X3JlbHMgaW5kZXhlcyBvZiB0aGUgc3Vydml2 aW5nCiAgKiBwYXJ0aXRpb25zLgpAQCAtMzY1NCw3ICszNjg2LDcgQEAgbWF0Y2hfYm9vbGVhbl9w YXJ0aXRpb25fY2xhdXNlKE9pZCBwYXJ0b3BmYW1pbHksIEV4cHIgKmNsYXVzZSwgRXhwciAqcGFy dGtleSwKICAqIGV4cHJzdGF0ZSBhcnJheS4KICAqCiAgKiBOb3RlIHRoYXQgdGhlIGV2YWx1YXRl ZCByZXN1bHQgbWF5IGJlIGluIHRoZSBwZXItdHVwbGUgbWVtb3J5IGNvbnRleHQgb2YKLSAqIGNv bnRleHQtPnBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQsIGFuZCB3ZSBtYXkgaGF2ZSBsZWFrZWQg b3RoZXIgbWVtb3J5CisgKiBjb250ZXh0LT5leHByY29udGV4dCwgYW5kIHdlIG1heSBoYXZlIGxl YWtlZCBvdGhlciBtZW1vcnkKICAqIHRoZXJlIHRvby4gIFRoaXMgbWVtb3J5IG11c3QgYmUgcmVj b3ZlcmVkIGJ5IHJlc2V0dGluZyB0aGF0IEV4cHJDb250ZXh0CiAgKiBhZnRlciB3ZSdyZSBkb25l IHdpdGggdGhlIHBydW5pbmcgb3BlcmF0aW9uIChzZWUgZXhlY1BhcnRpdGlvbi5jKS4KICAqLwpA QCAtMzY3NywxMyArMzcwOSwxOCBAQCBwYXJ0a2V5X2RhdHVtX2Zyb21fZXhwcihQYXJ0aXRpb25Q cnVuZUNvbnRleHQgKmNvbnRleHQsCiAJCUV4cHJDb250ZXh0ICplY3R4OwogCiAJCS8qCi0JCSAq IFdlIHNob3VsZCBuZXZlciBzZWUgYSBub24tQ29uc3QgaW4gYSBzdGVwIHVubGVzcyB3ZSdyZSBy dW5uaW5nIGluCi0JCSAqIHRoZSBleGVjdXRvci4KKwkJICogV2Ugc2hvdWxkIG5ldmVyIHNlZSBh IG5vbi1Db25zdCBpbiBhIHN0ZXAgdW5sZXNzIHRoZSBjYWxsZXIgaGFzCisJCSAqIHBhc3NlZCBh IHZhbGlkIEV4cHJDb250ZXh0LgorCQkgKgorCQkgKiBXaGVuIGNvbnRleHQtPnBsYW5zdGF0ZSBp cyB2YWxpZCwgY29udGV4dC0+ZXhwcmNvbnRleHQgaXMgc2FtZQorCQkgKiBhcyBjb250ZXh0LT5w bGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0LgogCQkgKi8KLQkJQXNzZXJ0KGNvbnRleHQtPnBsYW5z dGF0ZSAhPSBOVUxMKTsKKwkJQXNzZXJ0KGNvbnRleHQtPnBsYW5zdGF0ZSAhPSBOVUxMIHx8IGNv bnRleHQtPmV4cHJjb250ZXh0ICE9IE5VTEwpOworCQlBc3NlcnQoY29udGV4dC0+cGxhbnN0YXRl ID09IE5VTEwgfHwKKwkJCSAgIChjb250ZXh0LT5leHByY29udGV4dCA9PSBjb250ZXh0LT5wbGFu c3RhdGUtPnBzX0V4cHJDb250ZXh0KSk7CiAKIAkJZXhwcnN0YXRlID0gY29udGV4dC0+ZXhwcnN0 YXRlc1tzdGF0ZWlkeF07Ci0JCWVjdHggPSBjb250ZXh0LT5wbGFuc3RhdGUtPnBzX0V4cHJDb250 ZXh0OworCQllY3R4ID0gY29udGV4dC0+ZXhwcmNvbnRleHQ7CiAJCSp2YWx1ZSA9IEV4ZWNFdmFs RXhwclN3aXRjaENvbnRleHQoZXhwcnN0YXRlLCBlY3R4LCBpc251bGwpOwogCX0KIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXggNjc2N2VhZThmMi4uNjE2MTkwN2FjZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAogI2luY2x1 ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNp bmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVu Y3MuaCIKQEAgLTk5LDE0ICsxMDAsMjYgQEAgc3RhdGljIGRsaXN0X2hlYWQgY2FjaGVkX2V4cHJl c3Npb25fbGlzdCA9IERMSVNUX1NUQVRJQ19JTklUKGNhY2hlZF9leHByZXNzaW9uX2wKIHN0YXRp YyB2b2lkIFJlbGVhc2VHZW5lcmljUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsK IHN0YXRpYyBMaXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSwKIAkJCQkJCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwotc3RhdGlj IGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOworc3Rh dGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBh cmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIENhY2hlZFBsYW4gKkJ1aWxkQ2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAkJCQkJCQkJ ICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYp Owogc3RhdGljIGJvb2wgY2hvb3NlX2N1c3RvbV9wbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCiAJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CiBzdGF0aWMgZG91 YmxlIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9vbCBpbmNsdWRlX3BsYW5u ZXIpOwogc3RhdGljIFF1ZXJ5ICpRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cyk7 Ci1zdGF0aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wg YWNxdWlyZSk7CitzdGF0aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xp c3QsIGJvb2wgYWNxdWlyZSwKKwkJCQkJCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwor c3RydWN0IEdldExvY2thYmxlUmVsYXRpb25zX2NvbnRleHQKK3sKKwlQbGFubmVkU3RtdCAqcGxh bm5lZHN0bXQ7CisJQml0bWFwc2V0ICpyZWxhdGlvbnM7CisJUGFyYW1MaXN0SW5mbyBwYXJhbXM7 Cit9Oworc3RhdGljIEJpdG1hcHNldCAqR2V0TG9ja2FibGVSZWxhdGlvbnMoUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LAorCQkJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7Citz dGF0aWMgYm9vbCBHZXRMb2NrYWJsZVJlbGF0aW9uc193b3JrZXIoUGxhbiAqcGxhbiwKKwkJCQkJ CQlzdHJ1Y3QgR2V0TG9ja2FibGVSZWxhdGlvbnNfY29udGV4dCAqY29udGV4dCk7CitzdGF0aWMg Qml0bWFwc2V0ICpnZXRfcGxhbl9zY2FucmVsaWRzKFBsYW4gKnBsYW4pOwogc3RhdGljIHZvaWQg QWNxdWlyZVBsYW5uZXJMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CiBzdGF0 aWMgdm9pZCBTY2FuUXVlcnlGb3JMb2NrcyhRdWVyeSAqcGFyc2V0cmVlLCBib29sIGFjcXVpcmUp Owogc3RhdGljIGJvb2wgU2NhblF1ZXJ5V2Fsa2VyKE5vZGUgKm5vZGUsIGJvb2wgKmFjcXVpcmUp OwpAQCAtNzkyLDcgKzgwNSw3IEBAIFJldmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlLAogICogKFdlIG11c3QgZG8gdGhpcyBmb3IgdGhlICJ0cnVlIiByZXN1 bHQgdG8gYmUgcmFjZS1jb25kaXRpb24tZnJlZS4pCiAgKi8KIHN0YXRpYyBib29sCi1DaGVja0Nh Y2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKK0NoZWNrQ2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKQog ewogCUNhY2hlZFBsYW4gKnBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKIApAQCAtODI2LDcgKzgz OSw3IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCQkg Ki8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4gMCk7CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9j a3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+ c3RtdF9saXN0LCB0cnVlLCBib3VuZFBhcmFtcyk7CiAKIAkJLyoKIAkJICogSWYgcGxhbiB3YXMg dHJhbnNpZW50LCBjaGVjayB0byBzZWUgaWYgVHJhbnNhY3Rpb25YbWluIGhhcwpAQCAtODQ4LDcg Kzg2MSw3IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQog CQl9CiAKIAkJLyogT29wcywgdGhlIHJhY2UgY2FzZSBoYXBwZW5lZC4gIFJlbGVhc2UgdXNlbGVz cyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBmYWxz ZSk7CisJCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UsIGJvdW5k UGFyYW1zKTsKIAl9CiAKIAkvKgpAQCAtMTE2MCw3ICsxMTczLDcgQEAgR2V0Q2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLAog CiAJaWYgKCFjdXN0b21wbGFuKQogCXsKLQkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFuc291cmNl KSkKKwkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFuc291cmNlLCBib3VuZFBhcmFtcykpCiAJCXsK IAkJCS8qIFdlIHdhbnQgYSBnZW5lcmljIHBsYW4sIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxp ZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKQEAgLTEzNjYsNyArMTM3OSw2 IEBAIENhY2hlZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UsCiAJZm9yZWFjaChsYywgcGxhbi0+c3RtdF9saXN0KQogCXsKIAkJUGxhbm5l ZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjKTsKLQkJTGlz dENlbGwgICAqbGMyOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VU SUxJVFkpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xMzc1LDEzICsxMzg3LDggQEAgQ2FjaGVkUGxh bkFsbG93c1NpbXBsZVZhbGlkaXR5Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwK IAkJICogV2UgaGF2ZSB0byBncm92ZWwgdGhyb3VnaCB0aGUgcnRhYmxlIGJlY2F1c2UgaXQncyBs aWtlbHkgdG8gY29udGFpbgogCQkgKiBhbiBSVEVfUkVTVUxUIHJlbGF0aW9uLCByYXRoZXIgdGhh biBiZWluZyB0b3RhbGx5IGVtcHR5LgogCQkgKi8KLQkJZm9yZWFjaChsYzIsIHBsYW5uZWRzdG10 LT5ydGFibGUpCi0JCXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICop IGxmaXJzdChsYzIpOwotCi0JCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKLQkJ CQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJaWYgKCFibXNfaXNfZW1wdHkocGxhbm5lZHN0bXQtPnJl bGF0aW9uUlRJcykpCisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTE3NDAsMTQgKzE3 NDcsMTUgQEAgUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpCiAgKiBvciByZWxl YXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KICAqLwogc3RhdGljIHZvaWQKLUFjcXVpcmVF eGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQorQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUsIFBhcmFtTGlzdEluZm8gYm91 bmRQYXJhbXMpCiB7CiAJTGlzdENlbGwgICAqbGMxOwogCiAJZm9yZWFjaChsYzEsIHN0bXRfbGlz dCkKIAl7CiAJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRT dG10LCBsYzEpOwotCQlMaXN0Q2VsbCAgICpsYzI7CisJCUJpdG1hcHNldCAgKnJlbGF0aW9uczsK KwkJaW50CQkJcnRpOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VU SUxJVFkpCiAJCXsKQEAgLTE3NjUsOSArMTc3MywyMiBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhM aXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZm9y ZWFjaChsYzIsIHBsYW5uZWRzdG10LT5ydGFibGUpCisJCS8qCisJCSAqIEZldGNoIHRoZSBSVCBp bmRleGVzIG9mIG9ubHkgdGhlIHJlbGF0aW9ucyB0aGF0IHdpbGwgYmUgYWN0dWFsbHkKKwkJICog c2Nhbm5lZCB3aGVuIHRoZSBwbGFuIGlzIGV4ZWN1dGVkLiAgVGhpcyBza2lwcyBvdmVyIHNjYW4g bm9kZXMKKwkJICogYXBwZWFyaW5nIGFzIGNoaWxkIHN1Ym5vZGVzIG9mIGFueSBBcHBlbmQvTWVy Z2VBcHBlbmQgbm9kZXMgcHJlc2VudAorCQkgKiBpbiB0aGUgcGxhbiB0cmVlLiAgSXQgZG9lcyBz byBieSBwZXJmb3JtaW5nCisJCSAqIEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoKSB0 byBydW4gYW55IHBydW5pbmcgc3RlcHMKKwkJICogY29udGFpbmVkIGluIHRob3NlIG5vZGVzIHRo YXQgY2FuIGJlIHNhZmVseSBydW4gYXQgdGhpcyBwb2ludCwgdXNpbmcKKwkJICogJ2JvdW5kUGFy YW1zJyB0byBldmFsdWF0ZSBhbnkgRVhURVJOIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIHRoZQor CQkgKiBzdGVwcy4KKwkJICovCisJCXJlbGF0aW9ucyA9IEdldExvY2thYmxlUmVsYXRpb25zKHBs YW5uZWRzdG10LCBib3VuZFBhcmFtcyk7CisKKwkJcnRpID0gLTE7CisJCXdoaWxlICgocnRpID0g Ym1zX25leHRfbWVtYmVyKHJlbGF0aW9ucywgcnRpKSkgPj0gMCkKIAkJewotCQkJUmFuZ2VUYmxF bnRyeSAqcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjMik7CisJCQlSYW5nZVRibEVu dHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOwogCiAJCQlpZiAo cnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKIAkJCQljb250aW51ZTsKQEAgLTE3ODYsNiAr MTgwNywxNjYgQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFj cXVpcmUpCiAJfQogfQogCisvKgorICogR2V0TG9ja2FibGVSZWxhdGlvbnMKKyAqCQlSZXR1cm5z IHNldCBvZiBSVCBpbmRleGVzIG9mIHJlbGF0aW9ucyB0aGF0IG11c3QgYmUgbG9ja2VkIGJ5Cisg KgkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKQorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK0dldExv Y2thYmxlUmVsYXRpb25zKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgUGFyYW1MaXN0SW5mbyBi b3VuZFBhcmFtcykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJc3RydWN0IEdldExvY2thYmxlUmVsYXRp b25zX2NvbnRleHQgY29udGV4dDsKKworCS8qIE5vbmUgb2YgdGhlIHJlbGF0aW9uIHNjYW5uaW5n IG5vZGVzIGFyZSBwcnVuYWJsZSBoZXJlLiAqLworCWlmICghcGxhbm5lZHN0bXQtPnVzZXNQcmVF eGVjUHJ1bmluZykKKwkJcmV0dXJuIHBsYW5uZWRzdG10LT5yZWxhdGlvblJUSXM7CisKKwkvKgor CSAqIExvb2sgZm9yIHBydW5hYmxlIG5vZGVzIGluIHRoZSBtYWluIHBsYW4gdHJlZSwgZm9sbG93 ZWQgYnkgdGhvc2UgaW4KKwkgKiBzdWJwbGFucy4KKwkgKi8KKwljb250ZXh0LnBsYW5uZWRzdG10 ID0gcGxhbm5lZHN0bXQ7CisJY29udGV4dC5wYXJhbXMgPSBib3VuZFBhcmFtczsKKwljb250ZXh0 LnJlbGF0aW9ucyA9IE5VTEw7CisKKwkodm9pZCkgR2V0TG9ja2FibGVSZWxhdGlvbnNfd29ya2Vy KHBsYW5uZWRzdG10LT5wbGFuVHJlZSwgJmNvbnRleHQpOworCisJZm9yZWFjaChsYywgcGxhbm5l ZHN0bXQtPnN1YnBsYW5zKQorCXsKKwkJUGxhbiAqc3VicGxhbiA9IGxmaXJzdChsYyk7CisKKwkJ KHZvaWQpIEdldExvY2thYmxlUmVsYXRpb25zX3dvcmtlcihzdWJwbGFuLCAmY29udGV4dCk7CisJ fQorCisJcmV0dXJuIGNvbnRleHQucmVsYXRpb25zOworfQorCisvKgorICogR2V0TG9ja2FibGVS ZWxhdGlvbnNfd29ya2VyCisgKgkJQWRkcyBSVCBpbmRleGVzIG9mIHJlbGF0aW9ucyB0byBiZSBz Y2FubmVkIGJ5IHBsYW4gdG8KKyAqCQljb250ZXh0LT5yZWxhdGlvbnMKKyAqCisgKiBGb3IgcGxh biBub2RlIHR5cGVzIHRoYXQgc3VwcG9ydCBwcnVuaW5nLCB0aGlzIG9ubHkgYWRkcyBjaGlsZCBw bGFuCisgKiBzdWJub2RlcyB0aGF0IHNhdGlzZnkgdGhlICJpbml0aWFsIiBwcnVuaW5nIHN0ZXBz LgorICovCitzdGF0aWMgYm9vbAorR2V0TG9ja2FibGVSZWxhdGlvbnNfd29ya2VyKFBsYW4gKnBs YW4sCisJCQkJCQkJc3RydWN0IEdldExvY2thYmxlUmVsYXRpb25zX2NvbnRleHQgKmNvbnRleHQp Cit7CisJaWYgKHBsYW4gPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoKG5vZGVU YWcocGxhbikpCisJeworCQkvKiBOb2RlcyBzY2FubmluZyBhIHJlbGF0aW9uIG9yIHJlbGF0aW9u cy4gKi8KKwkJY2FzZSBUX1NlcVNjYW46CisJCWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRf SW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBT Y2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJCWNvbnRl eHQtPnJlbGF0aW9ucyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPnJlbGF0aW9ucywKKwkJCQkJ CQkJCQkJCSgoU2NhbiAqKSBwbGFuKS0+c2NhbnJlbGlkKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJ Y2FzZSBUX0ZvcmVpZ25TY2FuOgorCQkJY29udGV4dC0+cmVsYXRpb25zID0gYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQtPnJlbGF0aW9ucywKKwkJCQkJCQkJCQkJCSAoKEZvcmVpZ25TY2FuICopIHBs YW4pLT5mc19yZWxpZHMpOworCQkJcmV0dXJuIGZhbHNlOworCQljYXNlIFRfQ3VzdG9tU2NhbjoK KwkJCWNvbnRleHQtPnJlbGF0aW9ucyA9IGJtc19hZGRfbWVtYmVycyhjb250ZXh0LT5yZWxhdGlv bnMsCisJCQkJCQkJCQkJCQkgKChDdXN0b21TY2FuICopIHBsYW4pLT5jdXN0b21fcmVsaWRzKTsK KwkJCXJldHVybiBmYWxzZTsKKworCQkvKiBOb2RlcyBjb250YWluaW5nIHBydW5hYmxlIHN1Ym5v ZGVzLiAqLworCQljYXNlIFRfQXBwZW5kOgorCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQl7CisJ CQkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gY29udGV4dC0+cGxhbm5lZHN0bXQ7CisJCQkJ TGlzdAkgICAqcnRhYmxlID0gcGxhbm5lZHN0bXQtPnJ0YWJsZTsKKwkJCQlQYXJhbUxpc3RJbmZv IHBhcmFtcyA9IGNvbnRleHQtPnBhcmFtczsKKwkJCQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5l aW5mbzsKKwkJCQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOworCQkJCUJpdG1hcHNldCAgKnBh cmVudHJlbGlkczsKKworCQkJCXBydW5laW5mbyA9IElzQShwbGFuLCBBcHBlbmQpID8KKwkJCQkJ KChBcHBlbmQgKikgcGxhbiktPnBhcnRfcHJ1bmVfaW5mbyA6CisJCQkJCSgoTWVyZ2VBcHBlbmQg KikgcGxhbiktPnBhcnRfcHJ1bmVfaW5mbzsKKworCQkJCWlmIChwcnVuZWluZm8gJiYgcHJ1bmVp bmZvLT5jb250YWluc19pbml0X3N0ZXBzKQorCQkJCXsKKwkJCQkJaW50IAlpOworCQkJCQlMaXN0 ICAgKnN1YnBsYW5zID0gSXNBKHBsYW4sIEFwcGVuZCkgPworCQkJCQkJKChBcHBlbmQgKikgcGxh biktPmFwcGVuZHBsYW5zIDoKKwkJCQkJCSgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPm1lcmdlcGxh bnM7CisKKwkJCQkJdmFsaWRzdWJwbGFucyA9CisJCQkJCQlFeGVjRmluZEluaXRpYWxNYXRjaGlu Z1N1YlBsYW5zKHBydW5laW5mbywKKwkJCQkJCQkJCQkJCQkJTlVMTCwgcnRhYmxlLAorCQkJCQkJ CQkJCQkJCQlwYXJhbXMsCisJCQkJCQkJCQkJCQkJCSZwYXJlbnRyZWxpZHMpOworCisJCQkJCS8q IEFsbCByZWxldmFudCBwYXJlbnRzIG11c3QgYmUgbG9ja2VkLiAqLworCQkJCQlBc3NlcnQoYm1z X251bV9tZW1iZXJzKHBhcmVudHJlbGlkcykgPiAwKTsKKwkJCQkJY29udGV4dC0+cmVsYXRpb25z ID0gYm1zX2FkZF9tZW1iZXJzKGNvbnRleHQtPnJlbGF0aW9ucywKKwkJCQkJCQkJCQkJCQkJIHBh cmVudHJlbGlkcyk7CisKKwkJCQkJLyogQW5kIGFsbCBsZWFmIHBhcnRpdGlvbnMgdGhhdCB3aWxs IGJlIHNjYW5uZWQuICovCisJCQkJCWkgPSAtMTsKKwkJCQkJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQorCQkJCQl7CisJCQkJCQlQbGFuICAgKnN1 YnBsYW4gPSBsaXN0X250aChzdWJwbGFucywgaSk7CisKKwkJCQkJCWNvbnRleHQtPnJlbGF0aW9u cyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXJzKGNvbnRleHQtPnJlbGF0aW9ucywKKwkJCQkJCQkJ CQkJZ2V0X3BsYW5fc2NhbnJlbGlkcyhzdWJwbGFuKSk7CisJCQkJCX0KKworCQkJCQlyZXR1cm4g ZmFsc2U7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwor CX0KKworCXJldHVybiBwbGFuX3RyZWVfd2Fsa2VyKHBsYW4sIEdldExvY2thYmxlUmVsYXRpb25z X3dvcmtlciwKKwkJCQkJCQkodm9pZCAqKSBjb250ZXh0KTsKK30KKworLyoKKyAqIGdldF9wbGFu X3NjYW5yZWxpZAorICoJCVJldHVybnMgUlQgaW5kZXhlcyBvZiB0aGUgcmVsYXRpb24ocykgc2Nh bm5lZCBieSBwbGFuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorZ2V0X3BsYW5fc2NhbnJlbGlk cyhQbGFuICpwbGFuKQoreworCWlmIChwbGFuID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJ c3dpdGNoKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfU2VxU2NhbjoKKwkJY2FzZSBUX1Nh bXBsZVNjYW46CisJCWNhc2UgVF9JbmRleFNjYW46CisJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgor CQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCWNhc2UgVF9UaWRTY2FuOgorCQljYXNlIFRfVGlk UmFuZ2VTY2FuOgorCQkJcmV0dXJuIGJtc19tYWtlX3NpbmdsZXRvbigoKFNjYW4gKikgcGxhbikt PnNjYW5yZWxpZCk7CisJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJCXJldHVybiAoKEZvcmVpZ25T Y2FuICopIHBsYW4pLT5mc19yZWxpZHM7CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQkJcmV0dXJu ICgoQ3VzdG9tU2NhbiAqKSBwbGFuKS0+Y3VzdG9tX3JlbGlkczsKKwkJZGVmYXVsdDoKKwkJCWJy ZWFrOworCX0KKworCXJldHVybiBOVUxMOworfQorCiAvKgogICogQWNxdWlyZVBsYW5uZXJMb2Nr czogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIHBsYW5uaW5nIG9mIGEgcXVlcnl0cmVlIGxpc3Q7 CiAgKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uaAppbmRleCA2OTRlMzhiN2RkLi4wZWVhZjNlNzlkIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC05MCw4ICs5MCw2IEBAIHR5cGVkZWYgc3RydWN0 IFBhcnRpdGlvblBydW5pbmdEYXRhCiAgKgkJCQkJCVRoZXNlIG11c3Qgbm90IGJlIHBydW5lZC4K ICAqIHBydW5lX2NvbnRleHQJCUEgc2hvcnQtbGl2ZWQgbWVtb3J5IGNvbnRleHQgaW4gd2hpY2gg dG8gZXhlY3V0ZSB0aGUKICAqCQkJCQkJcGFydGl0aW9uIHBydW5pbmcgZnVuY3Rpb25zLgotICog ZG9faW5pdGlhbF9wcnVuZQkJdHJ1ZSBpZiBwcnVuaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgZHVy aW5nIGV4ZWN1dG9yCi0gKgkJCQkJCXN0YXJ0dXAgKGF0IGFueSBoaWVyYXJjaHkgbGV2ZWwpLgog ICogZG9fZXhlY19wcnVuZQkJdHJ1ZSBpZiBwcnVuaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgZHVy aW5nCiAgKgkJCQkJCWV4ZWN1dG9yIHJ1biAoYXQgYW55IGhpZXJhcmNoeSBsZXZlbCkuCiAgKiBu dW1fcGFydHBydW5lZGF0YQlOdW1iZXIgb2YgaXRlbXMgaW4gInBhcnRwcnVuZWRhdGEiIGFycmF5 LgpAQCAtMTA0LDcgKzEwMiw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGUK IAlCaXRtYXBzZXQgICpleGVjcGFyYW1pZHM7CiAJQml0bWFwc2V0ICAqb3RoZXJfc3VicGxhbnM7 CiAJTWVtb3J5Q29udGV4dCBwcnVuZV9jb250ZXh0OwotCWJvb2wJCWRvX2luaXRpYWxfcHJ1bmU7 CiAJYm9vbAkJZG9fZXhlY19wcnVuZTsKIAlpbnQJCQludW1fcGFydHBydW5lZGF0YTsKIAlQYXJ0 aXRpb25QcnVuaW5nRGF0YSAqcGFydHBydW5lZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwpA QCAtMTIwLDkgKzExNywxMyBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0ZpbmRQYXJ0aXRp b24oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIGV4dGVybiB2b2lkIEV4ZWNDbGVhbnVwVHVw bGVSb3V0aW5nKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCQkJCQkJCQlQYXJ0aXRpb25U dXBsZVJvdXRpbmcgKnByb3V0ZSk7CiBleHRlcm4gUGFydGl0aW9uUHJ1bmVTdGF0ZSAqRXhlY0Ny ZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCi0JCQkJCQkJCQkJ CQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0aXRpb25wcnVuZWluZm8pOworCQkJCQkJCQkJ CQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZvLAorCQkJCQkJCQkJ CQkJCQkgIEJpdG1hcHNldCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJCQkJ CQkgIGludCBuc3VicGxhbnMpOwogZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUpOwotZXh0ZXJuIEJpdG1hcHNl dCAqRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpw cnVuZXN0YXRlLAotCQkJCQkJCQkJCQkJICBpbnQgbnN1YnBsYW5zKTsKK2V4dGVybiBCaXRtYXBz ZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVJbmZvICpw cnVuZWluZm8sCisJCQkJCQkJCUVTdGF0ZSAqZXN0YXRlLCBMaXN0ICpydGFibGUsCisJCQkJCQkJ CVBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQlCaXRtYXBzZXQgKipwYXJlbnRyZWxpZHMp OwogCiAjZW5kaWYJCQkJCQkJLyogRVhFQ1BBUlRJVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3MuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVGdW5jcy5o CmluZGV4IDAzYTM0NmMwMWQuLjhiOTg1YTQ3MDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL25vZGVGdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVGdW5jcy5oCkBAIC0x NTgsNSArMTU4LDggQEAgZXh0ZXJuIGJvb2wgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXIoTm9k ZSAqbm9kZSwgYm9vbCAoKndhbGtlcikgKCksCiBzdHJ1Y3QgUGxhblN0YXRlOwogZXh0ZXJuIGJv b2wgcGxhbnN0YXRlX3RyZWVfd2Fsa2VyKHN0cnVjdCBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgYm9v bCAoKndhbGtlcikgKCksCiAJCQkJCQkJCSAgdm9pZCAqY29udGV4dCk7CitzdHJ1Y3QgUGxhbjsK K2V4dGVybiBib29sIHBsYW5fdHJlZV93YWxrZXIoc3RydWN0IFBsYW4gKnBsYW4sIGJvb2wgKCp3 YWxrZXIpICgpLAorCQkJCSB2b2lkICpjb250ZXh0KTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVG VU5DU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDMyNGQ5Mjg4MGIuLmQwNDFiNGQ5MjQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMDEsNiArMTAxLDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg UGxhbm5lckdsb2JhbAogCiAJTGlzdAkgICAqZmluYWxydGFibGU7CS8qICJmbGF0IiByYW5nZXRh YmxlIGZvciBleGVjdXRvciAqLwogCisJQml0bWFwc2V0ICAqcmVsYXRpb25SVElzOwkvKiBJbmRl eGVzIG9mIFJURV9SRUxBVElPTiBlbnRyaWVzIGluIHJhbmdlCisJCQkJCQkJCSAqIHRhYmxlICov CisKIAlMaXN0CSAgICpmaW5hbHJvd21hcmtzOwkvKiAiZmxhdCIgbGlzdCBvZiBQbGFuUm93TWFy a3MgKi8KIAogCUxpc3QJICAgKnJlc3VsdFJlbGF0aW9uczsJLyogImZsYXQiIGxpc3Qgb2YgaW50 ZWdlciBSVCBpbmRleGVzICovCkBAIC0xMjksNiArMTMyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxh bm5lckdsb2JhbAogCiAJY2hhcgkJbWF4UGFyYWxsZWxIYXphcmQ7CS8qIHdvcnN0IFBST1BBUkFM TEVMIGhhemFyZCBsZXZlbCAqLwogCisJYm9vbAkJdXNlc1ByZUV4ZWNQcnVuaW5nOwkvKiBEbyBz b21lIFBsYW4gbm9kZXMgdXNlIHByZS1leGVjdXRpb24KKwkJCQkJCQkJCSAqIHBhcnRpdGlvbiBw cnVuaW5nICovCisKIAlQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGl0aW9uX2RpcmVjdG9yeTsgLyog cGFydGl0aW9uIGRlc2NyaXB0b3JzICovCiB9IFBsYW5uZXJHbG9iYWw7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmgKaW5kZXggYmUzYzMwNzA0YS4uMjNiZjA0NTc4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK QEAgLTU5LDEyICs1OSwxOCBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCiAJYm9vbAkJ cGFyYWxsZWxNb2RlTmVlZGVkOyAvKiBwYXJhbGxlbCBtb2RlIHJlcXVpcmVkIHRvIGV4ZWN1dGU/ ICovCiAKKwlib29sCQl1c2VzUHJlRXhlY1BydW5pbmc7CS8qIERvIHNvbWUgUGxhbiBub2RlcyB1 c2UgcHJlLWV4ZWN1dGlvbgorCQkJCQkJCQkJICogcGFydGl0aW9uIHBydW5pbmcgKi8KKwogCWlu dAkJCWppdEZsYWdzOwkJLyogd2hpY2ggZm9ybXMgb2YgSklUIHNob3VsZCBiZSBwZXJmb3JtZWQg Ki8KIAogCXN0cnVjdCBQbGFuICpwbGFuVHJlZTsJCS8qIHRyZWUgb2YgUGxhbiBub2RlcyAqLwog CiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIGxpc3Qgb2YgUmFuZ2VUYmxFbnRyeSBub2RlcyAqLwog CisJQml0bWFwc2V0ICAqcmVsYXRpb25SVElzOwkvKiBJbmRleGVzIG9mIFJURV9SRUxBVElPTiBl bnRyaWVzIGluIHJhbmdlCisJCQkJCQkJCSAqIHRhYmxlICovCisKIAkvKiBydGFibGUgaW5kZXhl cyBvZiB0YXJnZXQgcmVsYXRpb25zIGZvciBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLwogCUxpc3QJ ICAgKnJlc3VsdFJlbGF0aW9uczsJLyogaW50ZWdlciBsaXN0IG9mIFJUIGluZGV4ZXMsIG9yIE5J TCAqLwogCkBAIC0xMTU3LDYgKzExNjMsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhblJvd01hcmsK ICAqIHBydW5lX2luZm9zCQkJTGlzdCBvZiBMaXN0cyBjb250YWluaW5nIFBhcnRpdGlvbmVkUmVs UHJ1bmVJbmZvIG5vZGVzLAogICoJCQkJCQlvbmUgc3VibGlzdCBwZXIgcnVuLXRpbWUtcHJ1bmFi bGUgcGFydGl0aW9uIGhpZXJhcmNoeQogICoJCQkJCQlhcHBlYXJpbmcgaW4gdGhlIHBhcmVudCBw bGFuIG5vZGUncyBzdWJwbGFucy4KKyAqCisgKiBjb250YWluc19pbml0X3N0ZXBzCURvZXMgYW55 IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVfaW5mb3Mg aGF2ZSBpdHMgaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCisgKiBjb250YWluc19leGVj X3N0ZXBzCURvZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJ CQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMgZXhlY19wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCiAgKiBv dGhlcl9zdWJwbGFucwkJSW5kZXhlcyBvZiBhbnkgc3VicGxhbnMgdGhhdCBhcmUgbm90IGFjY291 bnRlZCBmb3IKICAqCQkJCQkJYnkgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBu b2RlcyBpbgogICoJCQkJCQkicHJ1bmVfaW5mb3MiLiAgVGhlc2Ugc3VicGxhbnMgbXVzdCBub3Qg YmUgcHJ1bmVkLgpAQCAtMTE2NSw2ICsxMTc4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9u UHJ1bmVJbmZvCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpwcnVuZV9pbmZvczsKKwli b29sCQljb250YWluc19pbml0X3N0ZXBzOworCWJvb2wJCWNvbnRhaW5zX2V4ZWNfc3RlcHM7CiAJ Qml0bWFwc2V0ICAqb3RoZXJfc3VicGxhbnM7CiB9IFBhcnRpdGlvblBydW5lSW5mbzsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oIGIvc3JjL2luY2x1 ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCmluZGV4IDVmNTFlNzNhNGQuLjFjOWM0MDhmMDAg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaAorKysgYi9z cmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKQEAgLTQxLDYgKzQxLDggQEAgc3Ry dWN0IFJlbE9wdEluZm87CiAgKgkJCQkJc3Vic2lkaWFyeSBkYXRhLCBzdWNoIGFzIHRoZSBGbWdy SW5mb3MuCiAgKiBwbGFuc3RhdGUJCVBvaW50cyB0byB0aGUgcGFyZW50IHBsYW4gbm9kZSdzIFBs YW5TdGF0ZSB3aGVuIGNhbGxlZAogICoJCQkJCWR1cmluZyBleGVjdXRpb247IE5VTEwgd2hlbiBj YWxsZWQgZnJvbSB0aGUgcGxhbm5lci4KKyAqIGV4cHJjb250ZXh0CQlFeHByQ29udGV4dCB0byB1 c2UgZHVyaW5nIHByZS1leGVjdXRpb24gcHJ1bmluZzsgcGxhbnN0YXRlCisgKgkJCQkJd291bGQg YmUgTlVMTCBpbiB0aGF0IGNhc2UuCiAgKiBleHByc3RhdGVzCQlBcnJheSBvZiBFeHByU3RhdGVz LCBpbmRleGVkIGFzIHBlciBQcnVuZUN4dFN0YXRlSWR4OyBvbmUKICAqCQkJCQlmb3IgZWFjaCBw YXJ0aXRpb24ga2V5IGluIGVhY2ggcHJ1bmluZyBzdGVwLiAgQWxsb2NhdGVkIGlmCiAgKgkJCQkJ cGxhbnN0YXRlIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgTlVMTC4KQEAgLTU2LDYgKzU4LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVDb250ZXh0CiAJRm1nckluZm8gICAqc3RlcGNt cGZ1bmNzOwogCU1lbW9yeUNvbnRleHQgcHBjY29udGV4dDsKIAlQbGFuU3RhdGUgICpwbGFuc3Rh dGU7CisJRXhwckNvbnRleHQgKmV4cHJjb250ZXh0OwogCUV4cHJTdGF0ZSAqKmV4cHJzdGF0ZXM7 CiB9IFBhcnRpdGlvblBydW5lQ29udGV4dDsKIAotLSAKMi4yNC4xCgo= --00000000000086a6f805d3f02caa--