Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iynt7-0002xw-D2 for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Feb 2020 02:24:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iynt5-0000sV-U4 for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Feb 2020 02:24:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iynt5-0000ot-9P for pgsql-hackers@lists.postgresql.org; Tue, 04 Feb 2020 02:24:27 +0000 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1iynsz-0006RW-Ty for pgsql-hackers@postgresql.org; Tue, 04 Feb 2020 02:24:26 +0000 Received: by mail-pf1-x434.google.com with SMTP id p14so8639011pfn.4 for ; Mon, 03 Feb 2020 18:24:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=n/ces6Zc8H2noTK8cBiQRmfyWcQhh2X9wUe7lUj0vW0=; b=DjbsFEM9TnNwtmJaYDCXaJ6cxWSByAbetm0HfS+G5jWM48yzBV1x+vsRWxapwEaX/X MmZK9joB3NN96BjvhmumG/ba5npInp6i2GyeCfhPba5AGr21QqhyN8snFwFz51I6ZPNG tdX4+g5Df3vZd5xax7UUD4RuQCcQWEwITQizdPUOu3DRnIZ4ktrzj6wSUJI8w7CcspFI KfEdC5W1WaOFioL0xZRacnMvoL/iYEGCoZu6X8r5QxcbUT9XLyNUkiH/qoKn4r5Kta3R v83ZisYd2whC5tQ9ZcAaBXizhpxqF3gPxlCsPhbpJlWzFbjR3wsF9Zdjvideb0zGTvOL QQFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=n/ces6Zc8H2noTK8cBiQRmfyWcQhh2X9wUe7lUj0vW0=; b=P0aZh/IK7sv+nCv3FSdloJgGufkKhLL7MaW8fxT7n3wQGh0zyf2F/eOBcBVggVBOyF UFn63CrhmaW1WIhvuZyph3HgwTKvHxkTHocEQ/37K5Ih/7AGudUQiiV2MTLHoFkYwNnj Y4xcxIyp57nTAmoSeVm49zqX4hH174HrY3oJ7Hxc+lCG91usu02fG+ZHFdLrFvHCQA/l u56sr2ubBgwkx5cnAb7AImjST1PGi3efF5tu2z0pLGdthX9Kp+C6e7aI7bRZTYhppiY3 /WQHexrk4dY8Te7djxn6RrDhEAX1lz7K2n/Mcdb22nisDfOEXS3sY8QFYWKkQ39ADSaH oOZg== X-Gm-Message-State: APjAAAWpXmf+eozfIBtfAKiFhFITuRAsXOVmc/r3TnmczJ9imJV99GKK jLYom/5FEJSAu8jNC7bqAveyAg== X-Google-Smtp-Source: APXvYqzzswzY2lu6YNMajX7P4cE4DecQbIGP/9/CUXBHohF7exI7JQxRZMrBYxnZkzs26aTbC9uyyA== X-Received: by 2002:a63:a1e:: with SMTP id 30mr19455457pgk.238.1580783058737; Mon, 03 Feb 2020 18:24:18 -0800 (PST) Received: from jdavis.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id r7sm22312337pfg.34.2020.02.03.18.24.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 03 Feb 2020 18:24:17 -0800 (PST) Message-ID: <8bf8d5f77db49cc1f032b6c7c0cfe0d6da89d64a.camel@j-davis.com> Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Peter Geoghegan Cc: Heikki Linnakangas , Tomas Vondra , Taylor Vesely , Adam Lee , Melanie Plageman , PostgreSQL Hackers Date: Mon, 03 Feb 2020 18:24:14 -0800 In-Reply-To: <97c46a59c27f3c38e486ca170fcbc618d97ab049.camel@j-davis.com> References: <507ac540ec7c20136364b5272acbcd4574aa76ef.camel@j-davis.com> <20190703001753.s5e5cme3ucjgeu6c@development> <20190711155520.zqipi23o3yybx7ym@development> <9be86fc1adc315f69b8af4b379087ab451008d8a.camel@j-davis.com> <20190802064405.GA94036@mars.local> <617fea8258ba3df7bc8b21cd7f3afc219f2383d9.camel@j-davis.com> <20190802152123.ichmacgx3y3x7dc3@development> <20191214173225.3kzsbncr6brpxdll@development> <775d754c-9a61-5363-6998-f87d15f1b592@iki.fi> <6e2b4a4475a690fa515829950aeed935696b0df3.camel@j-davis.com> <97c46a59c27f3c38e486ca170fcbc618d97ab049.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-kjPJM26O7+g+K1Be+rCi" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-kjPJM26O7+g+K1Be+rCi Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Mon, 2020-02-03 at 10:29 -0800, Jeff Davis wrote: > I ended up converting the freelist to a min heap. > > Attached is a patch which makes three changes to better support > HashAgg: And now I'm attaching another version of the main Hash Aggregation patch to be applied on top of the logtape.c patch. Not a lot of changes from the last version; mostly some cleanup and rebasing. But it's faster now with the logtape.c changes. Regards, Jeff Davis --=-kjPJM26O7+g+K1Be+rCi Content-Disposition: attachment; filename="logtape.patch" Content-Type: text/x-patch; name="logtape.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvc29ydC9sb2d0YXBlLmMKaW5kZXggNDJjZmIxZjlmOTguLjIwYjI3YjM1NThiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwpAQCAtNDksMTIgKzQ5LDggQEAKICAqIHdoZW4gcmVh ZGluZywgYW5kIHJlYWQgbXVsdGlwbGUgYmxvY2tzIGZyb20gdGhlIHNhbWUgdGFwZSBpbiBvbmUg Z28sCiAgKiB3aGVuZXZlciB0aGUgYnVmZmVyIGJlY29tZXMgZW1wdHkuCiAgKgotICogVG8gc3Vw cG9ydCB0aGUgYWJvdmUgcG9saWN5IG9mIHdyaXRpbmcgdG8gdGhlIGxvd2VzdCBmcmVlIGJsb2Nr LAotICogbHRzR2V0RnJlZUJsb2NrIHNvcnRzIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2sgbnVtYmVy cyBpbnRvIGRlY3JlYXNpbmcKLSAqIG9yZGVyIGVhY2ggdGltZSBpdCBpcyBhc2tlZCBmb3IgYSBi bG9jayBhbmQgdGhlIGxpc3QgaXNuJ3QgY3VycmVudGx5Ci0gKiBzb3J0ZWQuICBUaGlzIGlzIGFu IGVmZmljaWVudCB3YXkgdG8gaGFuZGxlIGl0IGJlY2F1c2Ugd2UgZXhwZWN0IGN5Y2xlcwotICog b2YgcmVsZWFzaW5nIG1hbnkgYmxvY2tzIGZvbGxvd2VkIGJ5IHJlLXVzaW5nIG1hbnkgYmxvY2tz LCBkdWUgdG8KLSAqIHRoZSBsYXJnZXIgcmVhZCBidWZmZXIuCisgKiBUbyBzdXBwb3J0IHRoZSBh Ym92ZSBwb2xpY3kgb2Ygd3JpdGluZyB0byB0aGUgbG93ZXN0IGZyZWUgYmxvY2ssIHRoZQorICog ZnJlZWxpc3QgaXMgYSBtaW4gaGVhcC4KICAqCiAgKiBTaW5jZSBhbGwgdGhlIGJvb2trZWVwaW5n IGFuZCBidWZmZXIgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoIHBhbGxvYygpLAogICogYW5kIHRo ZSB1bmRlcmx5aW5nIGZpbGUocykgYXJlIG1hZGUgd2l0aCBPcGVuVGVtcG9yYXJ5RmlsZSwgYWxs IHJlc291cmNlcwpAQCAtMTcwLDcgKzE2Niw3IEBAIHN0cnVjdCBMb2dpY2FsVGFwZVNldAogCS8q CiAJICogRmlsZSBzaXplIHRyYWNraW5nLiAgbkJsb2Nrc1dyaXR0ZW4gaXMgdGhlIHNpemUgb2Yg dGhlIHVuZGVybHlpbmcgZmlsZSwKIAkgKiBpbiBCTENLU1ogYmxvY2tzLiAgbkJsb2Nrc0FsbG9j YXRlZCBpcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQKLQkgKiBieSBsdHNHZXRGcmVl QmxvY2soKSwgYW5kIGl0IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKwkgKiBi eSBsdHNSZWxlYXNlQmxvY2soKSwgYW5kIGl0IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1 YWwgdG8KIAkgKiBuQmxvY2tzV3JpdHRlbi4gIEJsb2NrcyBiZXR3ZWVuIG5CbG9ja3NBbGxvY2F0 ZWQgYW5kIG5CbG9ja3NXcml0dGVuIGFyZQogCSAqIGJsb2NrcyB0aGF0IGhhdmUgYmVlbiBhbGxv Y2F0ZWQgZm9yIGEgdGFwZSwgYnV0IGhhdmUgbm90IGJlZW4gd3JpdHRlbgogCSAqIHRvIHRoZSB1 bmRlcmx5aW5nIGZpbGUgeWV0LiAgbkhvbGVCbG9ja3MgdHJhY2tzIHRoZSB0b3RhbCBudW1iZXIg b2YKQEAgLTE4OCwxNSArMTg0LDkgQEAgc3RydWN0IExvZ2ljYWxUYXBlU2V0CiAJICogSWYgZm9y Z2V0RnJlZVNwYWNlIGlzIHRydWUgdGhlbiBhbnkgZnJlZWQgYmxvY2tzIGFyZSBzaW1wbHkgZm9y Z290dGVuCiAJICogcmF0aGVyIHRoYW4gYmVpbmcgcmVtZW1iZXJlZCBpbiBmcmVlQmxvY2tzW10u ICBTZWUgbm90ZXMgZm9yCiAJICogTG9naWNhbFRhcGVTZXRGb3JnZXRGcmVlU3BhY2UoKS4KLQkg KgotCSAqIElmIGJsb2Nrc1NvcnRlZCBpcyB0cnVlIHRoZW4gdGhlIGJsb2NrIG51bWJlcnMgaW4g ZnJlZUJsb2NrcyBhcmUgaW4KLQkgKiAqZGVjcmVhc2luZyogb3JkZXIsIHNvIHRoYXQgcmVtb3Zp bmcgdGhlIGxhc3QgZW50cnkgZ2l2ZXMgdXMgdGhlIGxvd2VzdAotCSAqIGZyZWUgYmxvY2suICBX ZSByZS1zb3J0IHRoZSBibG9ja3Mgd2hlbmV2ZXIgYSBibG9jayBpcyBkZW1hbmRlZDsgdGhpcwot CSAqIHNob3VsZCBiZSByZWFzb25hYmx5IGVmZmljaWVudCBnaXZlbiB0aGUgZXhwZWN0ZWQgdXNh Z2UgcGF0dGVybi4KIAkgKi8KIAlib29sCQlmb3JnZXRGcmVlU3BhY2U7CS8qIGFyZSB3ZSByZW1l bWJlcmluZyBmcmVlIGJsb2Nrcz8gKi8KLQlib29sCQlibG9ja3NTb3J0ZWQ7CS8qIGlzIGZyZWVC bG9ja3NbXSBjdXJyZW50bHkgaW4gb3JkZXI/ICovCi0JbG9uZwkgICAqZnJlZUJsb2NrczsJCS8q IHJlc2l6YWJsZSBhcnJheSAqLworCWxvbmcJICAgKmZyZWVCbG9ja3M7CQkvKiByZXNpemFibGUg YXJyYXkgaG9sZGluZyBtaW5oZWFwICovCiAJaW50CQkJbkZyZWVCbG9ja3M7CS8qICMgb2YgY3Vy cmVudGx5IGZyZWUgYmxvY2tzICovCiAJaW50CQkJZnJlZUJsb2Nrc0xlbjsJLyogY3VycmVudCBh bGxvY2F0ZWQgbGVuZ3RoIG9mIGZyZWVCbG9ja3NbXSAqLwogCkBAIC0yMTEsNiArMjAxLDcgQEAg c3RhdGljIGxvbmcgbHRzR2V0RnJlZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMpOwogc3RhdGlj IHZvaWQgbHRzUmVsZWFzZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGxvbmcgYmxvY2tudW0p Owogc3RhdGljIHZvaWQgbHRzQ29uY2F0V29ya2VyVGFwZXMoTG9naWNhbFRhcGVTZXQgKmx0cywg VGFwZVNoYXJlICpzaGFyZWQsCiAJCQkJCQkJCSBTaGFyZWRGaWxlU2V0ICpmaWxlc2V0KTsKK3N0 YXRpYyB2b2lkIGx0c0luaXRUYXBlKExvZ2ljYWxUYXBlICpsdCk7CiAKIAogLyoKQEAgLTMyMSw0 NiArMzEyLDg4IEBAIGx0c1JlYWRGaWxsQnVmZmVyKExvZ2ljYWxUYXBlU2V0ICpsdHMsIExvZ2lj YWxUYXBlICpsdCkKIAlyZXR1cm4gKGx0LT5uYnl0ZXMgPiAwKTsKIH0KIAotLyoKLSAqIHFzb3J0 IGNvbXBhcmF0b3IgZm9yIHNvcnRpbmcgZnJlZUJsb2Nrc1tdIGludG8gZGVjcmVhc2luZyBvcmRl ci4KLSAqLwotc3RhdGljIGludAotZnJlZUJsb2Nrc19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qg dm9pZCAqYikKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3dhcF9ub2Rlcyhsb25nICpoZWFwLCBpbnQg YSwgaW50IGIpCiB7Ci0JbG9uZwkJYWJsayA9ICooKGNvbnN0IGxvbmcgKikgYSk7Ci0JbG9uZwkJ YmJsayA9ICooKGNvbnN0IGxvbmcgKikgYik7Ci0KLQkvKiBjYW4ndCBqdXN0IHN1YnRyYWN0IGJl Y2F1c2UgbG9uZyBtaWdodCBiZSB3aWRlciB0aGFuIGludCAqLwotCWlmIChhYmxrIDwgYmJsaykK LQkJcmV0dXJuIDE7Ci0JaWYgKGFibGsgPiBiYmxrKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIDA7 CisJbG9uZwkJc3dhcDsKKworCXN3YXAgPSBoZWFwW2FdOworCWhlYXBbYV0gPSBoZWFwW2JdOwor CWhlYXBbYl0gPSBzd2FwOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGVmdF9vZmZzZXQoaW50 IGkpCit7CisJcmV0dXJuIDIgKiBpICsgMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JpZ2h0 X29mZnNldChpbnQgaSkKK3sKKwlyZXR1cm4gMiAqIGkgKyAyOworfQorCitzdGF0aWMgaW5saW5l IGludAorcGFyZW50X29mZnNldChpbnQgaSkKK3sKKwlyZXR1cm4gKGkgLSAxKSAvIDI7CiB9CiAK IC8qCi0gKiBTZWxlY3QgYSBjdXJyZW50bHkgdW51c2VkIGJsb2NrIGZvciB3cml0aW5nIHRvLgor ICogU2VsZWN0IHRoZSBsb3dlc3QgY3VycmVudGx5IHVudXNlZCBibG9jayBieSB0YWtpbmcgdGhl IGZpcnN0IGVsZW1lbnQgZnJvbQorICogdGhlIGZyZWVsaXN0IG1pbiBoZWFwLgogICovCiBzdGF0 aWMgbG9uZwogbHRzR2V0RnJlZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMpCiB7Ci0JLyoKLQkg KiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZnJlZSBibG9ja3MsIHdlIHNlbGVjdCB0aGUgb25lIGFw cGVhcmluZyBsYXN0IGluCi0JICogZnJlZUJsb2Nrc1tdIChhZnRlciBzb3J0aW5nIHRoZSBhcnJh eSBpZiBuZWVkZWQpLiAgSWYgdGhlcmUgYXJlIG5vbmUsCi0JICogYXNzaWduIHRoZSBuZXh0IGJs b2NrIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0JICovCi0JaWYgKGx0cy0+bkZyZWVCbG9ja3Mg PiAwKQorCWxvbmcJKmhlYXAgPSBsdHMtPmZyZWVCbG9ja3M7CisJbG9uZwkgYmxvY2tudW07CisJ aW50CQkgaGVhcHNpemU7CisJaW50CQkgcG9zOworCisJLyogZnJlZWxpc3QgZW1wdHk7IGFsbG9j YXRlIGEgbmV3IGJsb2NrICovCisJaWYgKGx0cy0+bkZyZWVCbG9ja3MgPT0gMCkKKwkJcmV0dXJu IGx0cy0+bkJsb2Nrc0FsbG9jYXRlZCsrOworCisJaWYgKGx0cy0+bkZyZWVCbG9ja3MgPT0gMSkK IAl7Ci0JCWlmICghbHRzLT5ibG9ja3NTb3J0ZWQpCi0JCXsKLQkJCXFzb3J0KCh2b2lkICopIGx0 cy0+ZnJlZUJsb2NrcywgbHRzLT5uRnJlZUJsb2NrcywKLQkJCQkgIHNpemVvZihsb25nKSwgZnJl ZUJsb2Nrc19jbXApOwotCQkJbHRzLT5ibG9ja3NTb3J0ZWQgPSB0cnVlOwotCQl9Ci0JCXJldHVy biBsdHMtPmZyZWVCbG9ja3NbLS1sdHMtPm5GcmVlQmxvY2tzXTsKKwkJbHRzLT5uRnJlZUJsb2Nr cy0tOworCQlyZXR1cm4gbHRzLT5mcmVlQmxvY2tzWzBdOwogCX0KLQllbHNlCi0JCXJldHVybiBs dHMtPm5CbG9ja3NBbGxvY2F0ZWQrKzsKKworCS8qIHRha2UgdG9wIG9mIG1pbmhlYXAgKi8KKwli bG9ja251bSA9IGhlYXBbMF07CisKKwkvKiByZXBsYWNlIHdpdGggZW5kIG9mIG1pbmhlYXAgYXJy YXkgKi8KKwloZWFwWzBdID0gaGVhcFstLWx0cy0+bkZyZWVCbG9ja3NdOworCisJLyogc2lmdCBk b3duICovCisJcG9zID0gMDsKKwloZWFwc2l6ZSA9IGx0cy0+bkZyZWVCbG9ja3M7CisJd2hpbGUg KHRydWUpCisJeworCQlpbnQgbGVmdCAgPSBsZWZ0X29mZnNldChwb3MpOworCQlpbnQgcmlnaHQg PSByaWdodF9vZmZzZXQocG9zKTsKKwkJaW50IG1pbl9jaGlsZDsKKworCQlpZiAobGVmdCA8IGhl YXBzaXplICYmIHJpZ2h0IDwgaGVhcHNpemUpCisJCQltaW5fY2hpbGQgPSAoaGVhcFtsZWZ0XSA8 IGhlYXBbcmlnaHRdKSA/IGxlZnQgOiByaWdodDsKKwkJZWxzZSBpZiAobGVmdCA8IGhlYXBzaXpl KQorCQkJbWluX2NoaWxkID0gbGVmdDsKKwkJZWxzZSBpZiAocmlnaHQgPCBoZWFwc2l6ZSkKKwkJ CW1pbl9jaGlsZCA9IHJpZ2h0OworCQllbHNlCisJCQlicmVhazsKKworCQlpZiAoaGVhcFttaW5f Y2hpbGRdID49IGhlYXBbcG9zXSkKKwkJCWJyZWFrOworCisJCXN3YXBfbm9kZXMoaGVhcCwgbWlu X2NoaWxkLCBwb3MpOworCQlwb3MgPSBtaW5fY2hpbGQ7CisJfQorCisJcmV0dXJuIGJsb2NrbnVt OwogfQogCiAvKgpAQCAtMzY5LDcgKzQwMiw4IEBAIGx0c0dldEZyZWVCbG9jayhMb2dpY2FsVGFw ZVNldCAqbHRzKQogc3RhdGljIHZvaWQKIGx0c1JlbGVhc2VCbG9jayhMb2dpY2FsVGFwZVNldCAq bHRzLCBsb25nIGJsb2NrbnVtKQogewotCWludAkJCW5keDsKKwlsb25nCSpoZWFwOworCWludAkJ IHBvczsKIAogCS8qCiAJICogRG8gbm90aGluZyBpZiB3ZSdyZSBubyBsb25nZXIgaW50ZXJlc3Rl ZCBpbiByZW1lbWJlcmluZyBmcmVlIHNwYWNlLgpAQCAtMzg3LDE0ICs0MjEsMjMgQEAgbHRzUmVs ZWFzZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGxvbmcgYmxvY2tudW0pCiAJCQkJCQkJCQkJ CWx0cy0+ZnJlZUJsb2Nrc0xlbiAqIHNpemVvZihsb25nKSk7CiAJfQogCi0JLyoKLQkgKiBBZGQg YmxvY2tudW0gdG8gYXJyYXksIGFuZCBtYXJrIHRoZSBhcnJheSB1bnNvcnRlZCBpZiBpdCdzIG5v IGxvbmdlciBpbgotCSAqIGRlY3JlYXNpbmcgb3JkZXIuCi0JICovCi0JbmR4ID0gbHRzLT5uRnJl ZUJsb2NrcysrOwotCWx0cy0+ZnJlZUJsb2Nrc1tuZHhdID0gYmxvY2tudW07Ci0JaWYgKG5keCA+ IDAgJiYgbHRzLT5mcmVlQmxvY2tzW25keCAtIDFdIDwgYmxvY2tudW0pCi0JCWx0cy0+YmxvY2tz U29ydGVkID0gZmFsc2U7CisJaGVhcCA9IGx0cy0+ZnJlZUJsb2NrczsKKwlwb3MgPSBsdHMtPm5G cmVlQmxvY2tzOworCisJLyogcGxhY2UgZW50cnkgYXQgZW5kIG9mIG1pbmhlYXAgYXJyYXkgKi8K KwloZWFwW3Bvc10gPSBibG9ja251bTsKKwlsdHMtPm5GcmVlQmxvY2tzKys7CisKKwkvKiBzaWZ0 IHVwICovCisJd2hpbGUgKHBvcyAhPSAwKQorCXsKKwkJaW50IHBhcmVudCA9IHBhcmVudF9vZmZz ZXQocG9zKTsKKwkJaWYgKGhlYXBbcGFyZW50XSA8IGhlYXBbcG9zXSkKKwkJCWJyZWFrOworCisJ CXN3YXBfbm9kZXMoaGVhcCwgcGFyZW50LCBwb3MpOworCQlwb3MgPSBwYXJlbnQ7CisJfQogfQog CiAvKgpAQCAtNDg2LDYgKzUyOSwzMCBAQCBsdHNDb25jYXRXb3JrZXJUYXBlcyhMb2dpY2FsVGFw ZVNldCAqbHRzLCBUYXBlU2hhcmUgKnNoYXJlZCwKIAlsdHMtPm5Ib2xlQmxvY2tzID0gbHRzLT5u QmxvY2tzQWxsb2NhdGVkIC0gbnBoeXNpY2FsYmxvY2tzOwogfQogCisvKgorICogSW5pdGlhbGl6 ZSBwZXItdGFwZSBzdHJ1Y3QuICBOb3RlIHdlIGFsbG9jYXRlIHRoZSBJL08gYnVmZmVyIGFuZCB0 aGUgZmlyc3QKKyAqIGJsb2NrIGZvciBhIHRhcGUgb25seSB3aGVuIGl0IGlzIGZpcnN0IGFjdHVh bGx5IHdyaXR0ZW4gdG8uICBUaGlzIGF2b2lkcworICogd2FzdGluZyBtZW1vcnkgc3BhY2Ugd2hl biB0dXBsZXNvcnQuYyBvdmVyZXN0aW1hdGVzIHRoZSBudW1iZXIgb2YgdGFwZXMKKyAqIG5lZWRl ZC4KKyAqLworc3RhdGljIHZvaWQKK2x0c0luaXRUYXBlKExvZ2ljYWxUYXBlICpsdCkKK3sKKwls dC0+d3JpdGluZyAgICAgICAgICAgPSB0cnVlOworCWx0LT5mcm96ZW4gICAgICAgICAgICA9IGZh bHNlOworCWx0LT5kaXJ0eSAgICAgICAgICAgICA9IGZhbHNlOworCWx0LT5maXJzdEJsb2NrTnVt YmVyICA9IC0xTDsKKwlsdC0+Y3VyQmxvY2tOdW1iZXIgICAgPSAtMUw7CisJbHQtPm5leHRCbG9j a051bWJlciAgID0gLTFMOworCWx0LT5vZmZzZXRCbG9ja051bWJlciA9IDBMOworCWx0LT5idWZm ZXIgICAgICAgICAgICA9IE5VTEw7CisJbHQtPmJ1ZmZlcl9zaXplICAgICAgID0gMDsKKwkvKiBw YWxsb2MoKSBsYXJnZXIgdGhhbiBNYXhBbGxvY1NpemUgd291bGQgZmFpbCAqLworCWx0LT5tYXhf c2l6ZSAgICAgICAgICA9IE1heEFsbG9jU2l6ZTsKKwlsdC0+cG9zICAgICAgICAgICAgICAgPSAw OworCWx0LT5uYnl0ZXMgICAgICAgICAgICA9IDA7Cit9CisKIC8qCiAgKiBDcmVhdGUgYSBzZXQg b2YgbG9naWNhbCB0YXBlcyBpbiBhIHRlbXBvcmFyeSB1bmRlcmx5aW5nIGZpbGUuCiAgKgpAQCAt NTExLDcgKzU3OCw2IEBAIExvZ2ljYWxUYXBlU2V0Q3JlYXRlKGludCBudGFwZXMsIFRhcGVTaGFy ZSAqc2hhcmVkLCBTaGFyZWRGaWxlU2V0ICpmaWxlc2V0LAogCQkJCQkgaW50IHdvcmtlcikKIHsK IAlMb2dpY2FsVGFwZVNldCAqbHRzOwotCUxvZ2ljYWxUYXBlICpsdDsKIAlpbnQJCQlpOwogCiAJ LyoKQEAgLTUyNCwzNSArNTkwLDEzIEBAIExvZ2ljYWxUYXBlU2V0Q3JlYXRlKGludCBudGFwZXMs IFRhcGVTaGFyZSAqc2hhcmVkLCBTaGFyZWRGaWxlU2V0ICpmaWxlc2V0LAogCWx0cy0+bkJsb2Nr c1dyaXR0ZW4gPSAwTDsKIAlsdHMtPm5Ib2xlQmxvY2tzID0gMEw7CiAJbHRzLT5mb3JnZXRGcmVl U3BhY2UgPSBmYWxzZTsKLQlsdHMtPmJsb2Nrc1NvcnRlZCA9IHRydWU7CS8qIGEgemVyby1sZW5n dGggYXJyYXkgaXMgc29ydGVkIC4uLiAqLwogCWx0cy0+ZnJlZUJsb2Nrc0xlbiA9IDMyOwkvKiBy ZWFzb25hYmxlIGluaXRpYWwgZ3Vlc3MgKi8KIAlsdHMtPmZyZWVCbG9ja3MgPSAobG9uZyAqKSBw YWxsb2MobHRzLT5mcmVlQmxvY2tzTGVuICogc2l6ZW9mKGxvbmcpKTsKIAlsdHMtPm5GcmVlQmxv Y2tzID0gMDsKIAlsdHMtPm5UYXBlcyA9IG50YXBlczsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSBw ZXItdGFwZSBzdHJ1Y3RzLiAgTm90ZSB3ZSBhbGxvY2F0ZSB0aGUgSS9PIGJ1ZmZlciBhbmQgdGhl Ci0JICogZmlyc3QgYmxvY2sgZm9yIGEgdGFwZSBvbmx5IHdoZW4gaXQgaXMgZmlyc3QgYWN0dWFs bHkgd3JpdHRlbiB0by4gIFRoaXMKLQkgKiBhdm9pZHMgd2FzdGluZyBtZW1vcnkgc3BhY2Ugd2hl biB0dXBsZXNvcnQuYyBvdmVyZXN0aW1hdGVzIHRoZSBudW1iZXIKLQkgKiBvZiB0YXBlcyBuZWVk ZWQuCi0JICovCiAJZm9yIChpID0gMDsgaSA8IG50YXBlczsgaSsrKQotCXsKLQkJbHQgPSAmbHRz LT50YXBlc1tpXTsKLQkJbHQtPndyaXRpbmcgPSB0cnVlOwotCQlsdC0+ZnJvemVuID0gZmFsc2U7 Ci0JCWx0LT5kaXJ0eSA9IGZhbHNlOwotCQlsdC0+Zmlyc3RCbG9ja051bWJlciA9IC0xTDsKLQkJ bHQtPmN1ckJsb2NrTnVtYmVyID0gLTFMOwotCQlsdC0+bmV4dEJsb2NrTnVtYmVyID0gLTFMOwot CQlsdC0+b2Zmc2V0QmxvY2tOdW1iZXIgPSAwTDsKLQkJbHQtPmJ1ZmZlciA9IE5VTEw7Ci0JCWx0 LT5idWZmZXJfc2l6ZSA9IDA7Ci0JCS8qIHBhbGxvYygpIGxhcmdlciB0aGFuIE1heEFsbG9jU2l6 ZSB3b3VsZCBmYWlsICovCi0JCWx0LT5tYXhfc2l6ZSA9IE1heEFsbG9jU2l6ZTsKLQkJbHQtPnBv cyA9IDA7Ci0JCWx0LT5uYnl0ZXMgPSAwOwotCX0KKwkJbHRzSW5pdFRhcGUoJmx0cy0+dGFwZXNb aV0pOwogCiAJLyoKIAkgKiBDcmVhdGUgdGVtcCBCdWZGaWxlIHN0b3JhZ2UgYXMgcmVxdWlyZWQu CkBAIC03NzMsMTUgKzgxNywxMiBAQCBMb2dpY2FsVGFwZVJld2luZEZvclJlYWQoTG9naWNhbFRh cGVTZXQgKmx0cywgaW50IHRhcGVudW0sIHNpemVfdCBidWZmZXJfc2l6ZSkKIAlsdC0+YnVmZmVy X3NpemUgPSAwOwogCWlmIChsdC0+Zmlyc3RCbG9ja051bWJlciAhPSAtMUwpCiAJewotCQlsdC0+ YnVmZmVyID0gcGFsbG9jKGJ1ZmZlcl9zaXplKTsKKwkJLyoKKwkJICogVGhlIGJ1ZmZlciBpcyBs YXppbHkgYWxsb2NhdGVkIGluIExvZ2ljYWxUYXBlUmVhZCgpLCBidXQgd2Ugc2V0IHRoZQorCQkg KiBzaXplIGhlcmUuCisJCSAqLwogCQlsdC0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKIAl9 Ci0KLQkvKiBSZWFkIHRoZSBmaXJzdCBibG9jaywgb3IgcmVzZXQgaWYgdGFwZSBpcyBlbXB0eSAq LwotCWx0LT5uZXh0QmxvY2tOdW1iZXIgPSBsdC0+Zmlyc3RCbG9ja051bWJlcjsKLQlsdC0+cG9z ID0gMDsKLQlsdC0+bmJ5dGVzID0gMDsKLQlsdHNSZWFkRmlsbEJ1ZmZlcihsdHMsIGx0KTsKIH0K IAogLyoKQEAgLTgzMCw2ICs4NzEsMjIgQEAgTG9naWNhbFRhcGVSZWFkKExvZ2ljYWxUYXBlU2V0 ICpsdHMsIGludCB0YXBlbnVtLAogCWx0ID0gJmx0cy0+dGFwZXNbdGFwZW51bV07CiAJQXNzZXJ0 KCFsdC0+d3JpdGluZyk7CiAKKwlpZiAobHQtPmJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJLyogbGF6 aWx5IGFsbG9jYXRlIGJ1ZmZlciAqLworCQlpZiAobHQtPmZpcnN0QmxvY2tOdW1iZXIgIT0gLTFM KQorCQl7CisJCQlBc3NlcnQobHQtPmJ1ZmZlcl9zaXplID4gMCk7CisJCQlsdC0+YnVmZmVyID0g cGFsbG9jKGx0LT5idWZmZXJfc2l6ZSk7CisJCX0KKworCQkvKiBSZWFkIHRoZSBmaXJzdCBibG9j aywgb3IgcmVzZXQgaWYgdGFwZSBpcyBlbXB0eSAqLworCQlsdC0+bmV4dEJsb2NrTnVtYmVyID0g bHQtPmZpcnN0QmxvY2tOdW1iZXI7CisJCWx0LT5wb3MgPSAwOworCQlsdC0+bmJ5dGVzID0gMDsK KwkJbHRzUmVhZEZpbGxCdWZmZXIobHRzLCBsdCk7CisJfQorCiAJd2hpbGUgKHNpemUgPiAwKQog CXsKIAkJaWYgKGx0LT5wb3MgPj0gbHQtPm5ieXRlcykKQEAgLTk0Myw2ICsxMDAwLDI4IEBAIExv Z2ljYWxUYXBlRnJlZXplKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGludCB0YXBlbnVtLCBUYXBlU2hh cmUgKnNoYXJlKQogCX0KIH0KIAorLyoKKyAqIEFkZCBhZGRpdGlvbmFsIHRhcGVzIHRvIHRoaXMg dGFwZSBzZXQuCisgKi8KK0xvZ2ljYWxUYXBlU2V0ICoKK0xvZ2ljYWxUYXBlU2V0RXh0ZW5kKExv Z2ljYWxUYXBlU2V0ICpsdHMsIGludCBuQWRkaXRpb25hbCkKK3sKKwlpbnQgICAgIGk7CisJaW50 CQluVGFwZXNPcmlnID0gbHRzLT5uVGFwZXM7CisJU2l6ZQluZXdTaXplOworCisJbHRzLT5uVGFw ZXMgKz0gbkFkZGl0aW9uYWw7CisJbmV3U2l6ZSA9IG9mZnNldG9mKExvZ2ljYWxUYXBlU2V0LCB0 YXBlcykgKworCQlsdHMtPm5UYXBlcyAqIHNpemVvZihMb2dpY2FsVGFwZSk7CisKKwlsdHMgPSAo TG9naWNhbFRhcGVTZXQgKikgcmVwYWxsb2MobHRzLCBuZXdTaXplKTsKKworCWZvciAoaSA9IG5U YXBlc09yaWc7IGkgPCBsdHMtPm5UYXBlczsgaSsrKQorCQlsdHNJbml0VGFwZSgmbHRzLT50YXBl c1tpXSk7CisKKwlyZXR1cm4gbHRzOworfQorCiAvKgogICogQmFja3NwYWNlIHRoZSB0YXBlIGEg Z2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLiAgKFdlIGFsc28gc3VwcG9ydCBhIG1vcmUKICAqIGdlbmVy YWwgc2VlayBpbnRlcmZhY2UsIHNlZSBiZWxvdy4pCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9sb2d0YXBlLmggYi9zcmMvaW5jbHVkZS91dGlscy9sb2d0YXBlLmgKaW5kZXggNjk1ZDJj MDBlZTQuLjNlYmU1MjIzOWY4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9sb2d0YXBl LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbG9ndGFwZS5oCkBAIC02Nyw2ICs2Nyw4IEBAIGV4 dGVybiB2b2lkIExvZ2ljYWxUYXBlUmV3aW5kRm9yUmVhZChMb2dpY2FsVGFwZVNldCAqbHRzLCBp bnQgdGFwZW51bSwKIGV4dGVybiB2b2lkIExvZ2ljYWxUYXBlUmV3aW5kRm9yV3JpdGUoTG9naWNh bFRhcGVTZXQgKmx0cywgaW50IHRhcGVudW0pOwogZXh0ZXJuIHZvaWQgTG9naWNhbFRhcGVGcmVl emUoTG9naWNhbFRhcGVTZXQgKmx0cywgaW50IHRhcGVudW0sCiAJCQkJCQkJICBUYXBlU2hhcmUg KnNoYXJlKTsKK2V4dGVybiBMb2dpY2FsVGFwZVNldCAqTG9naWNhbFRhcGVTZXRFeHRlbmQoTG9n aWNhbFRhcGVTZXQgKmx0cywKKwkJCQkJCQkJCQkJaW50IG5BZGRpdGlvbmFsKTsKIGV4dGVybiBz aXplX3QgTG9naWNhbFRhcGVCYWNrc3BhY2UoTG9naWNhbFRhcGVTZXQgKmx0cywgaW50IHRhcGVu dW0sCiAJCQkJCQkJCSAgIHNpemVfdCBzaXplKTsKIGV4dGVybiB2b2lkIExvZ2ljYWxUYXBlU2Vl ayhMb2dpY2FsVGFwZVNldCAqbHRzLCBpbnQgdGFwZW51bSwK --=-kjPJM26O7+g+K1Be+rCi Content-Disposition: attachment; filename="hashagg-20200203.patch" Content-Type: text/x-patch; name="hashagg-20200203.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCBjMTEyOGY4OWVjNy4uODVmNTU5Mzg3ZjkgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTE3 NTEsNiArMTc1MSwyMyBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWhhc2hh Z2ctbWVtLW92ZXJmbG93IiB4cmVmbGFiZWw9Imhhc2hhZ2dfbWVtX292ZXJmbG93Ij4KKyAgICAg IDx0ZXJtPjx2YXJuYW1lPmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l Pmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3Rp dGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgSWYgaGFzaCBhZ2dyZWdhdGlvbiBleGNlZWRz IDx2YXJuYW1lPndvcmtfbWVtPC92YXJuYW1lPiBhdCBxdWVyeQorICAgICAgICAgZXhlY3V0aW9u IHRpbWUsIGFuZCA8dmFybmFtZT5oYXNoYWdnX21lbV9vdmVyZmxvdzwvdmFybmFtZT4gaXMgc2V0 CisgICAgICAgICB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIGNvbnRpbnVlIGNvbnN1bWluZyBt b3JlIG1lbW9yeSByYXRoZXIgdGhhbgorICAgICAgICAgcGVyZm9ybWluZyBkaXNrLWJhc2VkIGhh c2ggYWdncmVnYXRpb24uIFRoZSBkZWZhdWx0CisgICAgICAgICBpcyA8bGl0ZXJhbD5vZmY8L2xp dGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtc3RhY2stZGVwdGgiIHhy ZWZsYWJlbD0ibWF4X3N0YWNrX2RlcHRoIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9zdGFj a19kZXB0aDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVy bT4KQEAgLTQ0NzYsNiArNDQ5MywyNCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iZ3VjLWVuYWJsZS1oYXNoYWdnLXNwaWxsIiB4cmVmbGFiZWw9ImVuYWJsZV9oYXNoYWdnX3Nw aWxsIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmlt YXJ5Pjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2Fi bGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFuCisg ICAgICAgIHR5cGVzIHdoZW4gdGhlIG1lbW9yeSB1c2FnZSBpcyBleHBlY3RlZCB0bworICAgICAg ICBleGNlZWQgPHZhcm5hbWU+d29ya19tZW08L3Zhcm5hbWU+LiBUaGlzIG9ubHkgYWZmZWN0cyB0 aGUgcGxhbm5lcgorICAgICAgICBjaG9pY2U7IGFjdHVhbCBiZWhhdmlvciBhdCBleGVjdXRpb24g dGltZSBpcyBkaWN0YXRlZCBieQorICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtaGFzaGFnZy1t ZW0tb3ZlcmZsb3ciLz4uIFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxsaXRlcmFsPm9uPC9saXRl cmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWhhc2hqb2luIiB4cmVm bGFiZWw9ImVuYWJsZV9oYXNoam9pbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaGFz aGpvaW48L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYzM2N2M3NTBiMTkuLjcwZmVjYWE3MjYxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMDQsNiArMTA0LDcgQEAgc3RhdGljIHZvaWQgc2hvd190 YWJsZXNhbXBsZShUYWJsZVNhbXBsZUNsYXVzZSAqdHNjLCBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwK IAkJCQkJCQkgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfc29ydF9pbmZvKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsK IHN0YXRpYyB2b2lkIHNob3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICpoYXNo c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5m byhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAq cWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xODgxLDYgKzE4ODIsOCBAQCBFeHBsYWluTm9kZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQljYXNlIFRfQWdnOgogCQkJc2hv d19hZ2dfa2V5cyhjYXN0Tm9kZShBZ2dTdGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7 CiAJCQlzaG93X3VwcGVyX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5j ZXN0b3JzLCBlcyk7CisJCQlpZiAoZXMtPmFuYWx5emUpCisJCQkJc2hvd19oYXNoYWdnX2luZm8o KEFnZ1N0YXRlICopIHBsYW5zdGF0ZSwgZXMpOwogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwpAQCAtMjc0OSw2ICsyNzUyLDU1IEBAIHNob3dfaGFz aF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCX0KIH0KIAor LyoKKyAqIElmIEVYUExBSU4gQU5BTFlaRSwgc2hvdyBpbmZvcm1hdGlvbiBvbiBoYXNoIGFnZ3Jl Z2F0ZSBtZW1vcnkgdXNhZ2UgYW5kCisgKiBiYXRjaGVzLgorICovCitzdGF0aWMgdm9pZAorc2hv d19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorewor CUFnZwkJKmFnZwkgICA9IChBZ2cgKilhZ2dzdGF0ZS0+c3MucHMucGxhbjsKKwlsb25nCSBtZW1Q ZWFrS2IgPSAoYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWsgKyAxMDIzKSAvIDEwMjQ7CisKKwlBc3Nl cnQoSXNBKGFnZ3N0YXRlLCBBZ2dTdGF0ZSkpOworCisJaWYgKGFnZy0+YWdnc3RyYXRlZ3kgIT0g QUdHX0hBU0hFRCAmJgorCQlhZ2ctPmFnZ3N0cmF0ZWd5ICE9IEFHR19NSVhFRCkKKwkJcmV0dXJu OworCisJaWYgKGVzLT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9TcGFjZXMoZXMtPnN0ciwgZXMtPmluZGVudCAqIDIpOworCQlhcHBlbmRTdHJp bmdJbmZvKAorCQkJZXMtPnN0ciwKKwkJCSJNZW1vcnkgVXNhZ2U6ICVsZGtCIiwKKwkJCW1lbVBl YWtLYik7CisKKwkJaWYgKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCA+IDApCisJCXsKKwkJ CWFwcGVuZFN0cmluZ0luZm8oCisJCQkJZXMtPnN0ciwKKwkJCQkiICBCYXRjaGVzOiAlZCAgRGlz azogJWxka0IiLAorCQkJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCwgYWdnc3RhdGUtPmhh c2hfZGlza191c2VkKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm8oCisJCQllcy0+c3RyLAor CQkJIlxuIik7CisJfQorCWVsc2UKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlBlYWsg TWVtb3J5IFVzYWdlIiwgImtCIiwgbWVtUGVha0tiLCBlcyk7CisJCWlmIChhZ2dzdGF0ZS0+aGFz aF9iYXRjaGVzX3VzZWQgPiAwKQorCQl7CisJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJIYXNo QWdnIEJhdGNoZXMiLCBOVUxMLAorCQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3Vz ZWQsIGVzKTsKKwkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIkRpc2sgVXNhZ2UiLCAia0IiLAor CQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaF9kaXNrX3VzZWQsIGVzKTsKKwkJfQorCX0KK30KKwog LyoKICAqIElmIGl0J3MgRVhQTEFJTiBBTkFMWVpFLCBzaG93IGV4YWN0L2xvc3N5IHBhZ2VzIGZv ciBhIEJpdG1hcEhlYXBTY2FuIG5vZGUKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXgg ODYxOTI0NmM4ZTAuLjZmNjRhMmFiZDJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTc5 LDcgKzc5LDggQEAgc3RhdGljIHZvaWQgRXhlY0luaXRDb2VyY2VUb0RvbWFpbihFeHByRXZhbFN0 ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9tYWluICpjdGVzdCwKIHN0YXRpYyB2b2lkIEV4ZWNCdWls ZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCQkJ CQkJCSAgRXhwckV2YWxTdGVwICpzY3JhdGNoLAogCQkJCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLAotCQkJCQkJCQkgIGludCB0cmFuc25v LCBpbnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNoKTsKKwkJCQkJCQkJICBpbnQgdHJh bnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwKKwkJCQkJCQkJICBib29s IHNwaWxsZWQpOwogCiAKIC8qCkBAIC0yOTI3LDcgKzI5MjgsNyBAQCBFeGVjSW5pdENvZXJjZVRv RG9tYWluKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgQ29lcmNlVG9Eb21haW4gKmN0ZXN0LAogICov CiBFeHByU3RhdGUgKgogRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dT dGF0ZVBlclBoYXNlIHBoYXNlLAotCQkJCSAgYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoKQorCQkJ CSAgYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoLCBib29sIHNwaWxsZWQpCiB7CiAJRXhwclN0YXRl ICAqc3RhdGUgPSBtYWtlTm9kZShFeHByU3RhdGUpOwogCVBsYW5TdGF0ZSAgKnBhcmVudCA9ICZh Z2dzdGF0ZS0+c3MucHM7CkBAIC0zMTYwLDcgKzMxNjEsOCBAQCBFeGVjQnVpbGRBZ2dUcmFucyhB Z2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2UsCiAJCQlmb3IgKHNldG5v ID0gMDsgc2V0bm8gPCBwcm9jZXNzR3JvdXBpbmdTZXRzOyBzZXRubysrKQogCQkJewogCQkJCUV4 ZWNCdWlsZEFnZ1RyYW5zQ2FsbChzdGF0ZSwgYWdnc3RhdGUsICZzY3JhdGNoLCB0cmFuc19mY2lu Zm8sCi0JCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBzZXRubywgc2V0b2ZmLCBmYWxzZSk7 CisJCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBzZXRubywgc2V0b2ZmLCBmYWxzZSwKKwkJ CQkJCQkJCSAgc3BpbGxlZCk7CiAJCQkJc2V0b2ZmKys7CiAJCQl9CiAJCX0KQEAgLTMxNzgsNyAr MzE4MCw4IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQ ZXJQaGFzZSBwaGFzZSwKIAkJCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8IG51bUhhc2hlczsgc2V0 bm8rKykKIAkJCXsKIAkJCQlFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoc3RhdGUsIGFnZ3N0YXRlLCAm c2NyYXRjaCwgdHJhbnNfZmNpbmZvLAotCQkJCQkJCQkJICBwZXJ0cmFucywgdHJhbnNubywgc2V0 bm8sIHNldG9mZiwgdHJ1ZSk7CisJCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBzZXRubywg c2V0b2ZmLCB0cnVlLAorCQkJCQkJCQkJICBzcGlsbGVkKTsKIAkJCQlzZXRvZmYrKzsKIAkJCX0K IAkJfQpAQCAtMzIyNiw3ICszMjI5LDggQEAgc3RhdGljIHZvaWQKIEV4ZWNCdWlsZEFnZ1RyYW5z Q2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCQkJCSAgRXhwckV2 YWxTdGVwICpzY3JhdGNoLAogCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAotCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGludCBz ZXRvZmYsIGJvb2wgaXNoYXNoKQorCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGludCBz ZXRvZmYsIGJvb2wgaXNoYXNoLAorCQkJCQkgIGJvb2wgc3BpbGxlZCkKIHsKIAlpbnQJCQlhZGp1 c3RfaW5pdF9qdW1wbnVsbCA9IC0xOwogCWludAkJCWFkanVzdF9zdHJpY3RfanVtcG51bGwgPSAt MTsKQEAgLTMyNDgsNyArMzI1Miw4IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUg KnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCWZjaW5mby0+ZmxpbmZvLT5mbl9zdHJpY3Qg JiYKIAkJcGVydHJhbnMtPmluaXRWYWx1ZUlzTnVsbCkKIAl7Ci0JCXNjcmF0Y2gtPm9wY29kZSA9 IEVFT1BfQUdHX0lOSVRfVFJBTlM7CisJCXNjcmF0Y2gtPm9wY29kZSA9IHNwaWxsZWQgPworCQkJ RUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVEIDogRUVPUF9BR0dfSU5JVF9UUkFOUzsKIAkJc2Ny YXRjaC0+ZC5hZ2dfaW5pdF90cmFucy5hZ2dzdGF0ZSA9IGFnZ3N0YXRlOwogCQlzY3JhdGNoLT5k LmFnZ19pbml0X3RyYW5zLnBlcnRyYW5zID0gcGVydHJhbnM7CiAJCXNjcmF0Y2gtPmQuYWdnX2lu aXRfdHJhbnMuc2V0bm8gPSBzZXRubzsKQEAgLTMyNjUsNyArMzI3MCw4IEBAIEV4ZWNCdWlsZEFn Z1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJaWYgKHBl cnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwICYmCiAJCWZjaW5mby0+ZmxpbmZvLT5mbl9zdHJpY3Qp CiAJewotCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0s7CisJ CXNjcmF0Y2gtPm9wY29kZSA9IHNwaWxsZWQgPworCQkJRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NI RUNLX1NQSUxMRUQgOiBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0s7CiAJCXNjcmF0Y2gtPmQu YWdnX3N0cmljdF90cmFuc19jaGVjay5hZ2dzdGF0ZSA9IGFnZ3N0YXRlOwogCQlzY3JhdGNoLT5k LmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0bm8gPSBzZXRubzsKIAkJc2NyYXRjaC0+ZC5hZ2df c3RyaWN0X3RyYW5zX2NoZWNrLnNldG9mZiA9IHNldG9mZjsKQEAgLTMyODMsOSArMzI4OSwxMSBA QCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0 YXRlLAogCiAJLyogaW52b2tlIGFwcHJvcHJpYXRlIHRyYW5zaXRpb24gaW1wbGVtZW50YXRpb24g Ki8KIAlpZiAocGVydHJhbnMtPm51bVNvcnRDb2xzID09IDAgJiYgcGVydHJhbnMtPnRyYW5zdHlw ZUJ5VmFsKQotCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTDsK KwkJc2NyYXRjaC0+b3Bjb2RlID0gc3BpbGxlZCA/CisJCQlFRU9QX0FHR19QTEFJTl9UUkFOU19C WVZBTF9TUElMTEVEIDogRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUw7CiAJZWxzZSBpZiAocGVy dHJhbnMtPm51bVNvcnRDb2xzID09IDApCi0JCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfQUdHX1BM QUlOX1RSQU5TOworCQlzY3JhdGNoLT5vcGNvZGUgPSBzcGlsbGVkID8KKwkJCUVFT1BfQUdHX1BM QUlOX1RSQU5TX1NQSUxMRUQgOiBFRU9QX0FHR19QTEFJTl9UUkFOUzsKIAllbHNlIGlmIChwZXJ0 cmFucy0+bnVtSW5wdXRzID09IDEpCiAJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfQUdHX09SREVS RURfVFJBTlNfREFUVU07CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMK aW5kZXggMDYxNzUyZWE5YzEuLjA5NGVkN2MzNGFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHBySW50ZXJwLmMKQEAgLTQzMCw5ICs0MzAsMTMgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRl ICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9F RU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfQVJHUywKIAkJJiZDQVNFX0VFT1BfQUdHX1NUUklD VF9JTlBVVF9DSEVDS19OVUxMUywKIAkJJiZDQVNFX0VFT1BfQUdHX0lOSVRfVFJBTlMsCisJCSYm Q0FTRV9FRU9QX0FHR19JTklUX1RSQU5TX1NQSUxMRUQsCiAJCSYmQ0FTRV9FRU9QX0FHR19TVFJJ Q1RfVFJBTlNfQ0hFQ0ssCisJCSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJ TExFRCwKIAkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMLAorCQkmJkNBU0VfRUVP UF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCwKIAkJJiZDQVNFX0VFT1BfQUdHX1BMQUlO X1RSQU5TLAorCQkmJkNBU0VfRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRCwKIAkJJiZDQVNF X0VFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU0sCiAJCSYmQ0FTRV9FRU9QX0FHR19PUkRFUkVE X1RSQU5TX1RVUExFLAogCQkmJkNBU0VfRUVPUF9MQVNUCkBAIC0xNjI1LDYgKzE2MjksMzYgQEAg RXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBi b29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJRUVPX0NBU0UoRUVPUF9BR0df SU5JVF9UUkFOU19TUElMTEVEKQorCQl7CisJCQlBZ2dTdGF0ZSAgICphZ2dzdGF0ZTsKKwkJCUFn Z1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwX2Fs bGFnZ3M7CisKKwkJCWFnZ3N0YXRlID0gb3AtPmQuYWdnX2luaXRfdHJhbnMuYWdnc3RhdGU7CisJ CQlwZXJncm91cF9hbGxhZ2dzID0gYWdnc3RhdGUtPmFsbF9wZXJncm91cHNbb3AtPmQuYWdnX2lu aXRfdHJhbnMuc2V0b2ZmXTsKKworCQkJaWYgKHBlcmdyb3VwX2FsbGFnZ3MgPT0gTlVMTCkKKwkJ CQlFRU9fTkVYVCgpOworCisJCQlwZXJncm91cCA9ICZwZXJncm91cF9hbGxhZ2dzW29wLT5kLmFn Z19pbml0X3RyYW5zLnRyYW5zbm9dOworCisJCQkvKiBJZiB0cmFuc1ZhbHVlIGhhcyBub3QgeWV0 IGJlZW4gaW5pdGlhbGl6ZWQsIGRvIHNvIG5vdy4gKi8KKwkJCWlmIChwZXJncm91cC0+bm9UcmFu c1ZhbHVlKQorCQkJeworCQkJCUFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMgPSBvcC0+ZC5hZ2df aW5pdF90cmFucy5wZXJ0cmFuczsKKworCQkJCWFnZ3N0YXRlLT5jdXJhZ2djb250ZXh0ID0gb3At PmQuYWdnX2luaXRfdHJhbnMuYWdnY29udGV4dDsKKwkJCQlhZ2dzdGF0ZS0+Y3VycmVudF9zZXQg PSBvcC0+ZC5hZ2dfaW5pdF90cmFucy5zZXRubzsKKworCQkJCUV4ZWNBZ2dJbml0R3JvdXAoYWdn c3RhdGUsIHBlcnRyYW5zLCBwZXJncm91cCk7CisKKwkJCQkvKiBjb3BpZWQgdHJhbnMgdmFsdWUg ZnJvbSBpbnB1dCwgZG9uZSB0aGlzIHJvdW5kICovCisJCQkJRUVPX0pVTVAob3AtPmQuYWdnX2lu aXRfdHJhbnMuanVtcG51bGwpOworCQkJfQorCisJCQlFRU9fTkVYVCgpOworCQl9CiAKIAkJLyog Y2hlY2sgdGhhdCBhIHN0cmljdCBhZ2dyZWdhdGUncyBpbnB1dCBpc24ndCBOVUxMICovCiAJCUVF T19DQVNFKEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDSykKQEAgLTE2NDIsNiArMTY3NiwyNSBA QCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQs IGJvb2wgKmlzbnVsbCkKIAogCQkJRUVPX05FWFQoKTsKIAkJfQorCQlFRU9fQ0FTRShFRU9QX0FH R19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCkKKwkJeworCQkJQWdnU3RhdGUgICAqYWdnc3Rh dGU7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwOworCQkJQWdnU3RhdGVQZXJHcm91cCBw ZXJncm91cF9hbGxhZ2dzOworCisJCQlhZ2dzdGF0ZSA9IG9wLT5kLmFnZ19zdHJpY3RfdHJhbnNf Y2hlY2suYWdnc3RhdGU7CisJCQlwZXJncm91cF9hbGxhZ2dzID0gYWdnc3RhdGUtPmFsbF9wZXJn cm91cHNbb3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5zZXRvZmZdOworCisJCQlpZiAocGVy Z3JvdXBfYWxsYWdncyA9PSBOVUxMKQorCQkJCUVFT19ORVhUKCk7CisKKwkJCXBlcmdyb3VwID0g JnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay50cmFuc25vXTsK KworCQkJaWYgKHVubGlrZWx5KHBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsKSkKKwkJCQlFRU9f SlVNUChvcC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLmp1bXBudWxsKTsKKworCQkJRUVPX05F WFQoKTsKKwkJfQogCiAJCS8qCiAJCSAqIEV2YWx1YXRlIGFnZ3JlZ2F0ZSB0cmFuc2l0aW9uIC8g Y29tYmluZSBmdW5jdGlvbiB0aGF0IGhhcyBhCkBAIC0xNjkxLDYgKzE3NDQsNTIgQEAgRXhlY0lu dGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICpp c251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJRUVPX0NBU0UoRUVPUF9BR0dfUExBSU5f VFJBTlNfQllWQUxfU1BJTExFRCkKKwkJeworCQkJQWdnU3RhdGUgICAqYWdnc3RhdGU7CisJCQlB Z2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOworCQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cDsK KwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXBfYWxsYWdnczsKKwkJCUZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvOworCQkJTWVtb3J5Q29udGV4dCBvbGRDb250ZXh0OworCQkJRGF0dW0JCW5ld1Zh bDsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5hZ2dfdHJhbnMuYWdnc3RhdGU7CisJCQlwZXJ0cmFu cyA9IG9wLT5kLmFnZ190cmFucy5wZXJ0cmFuczsKKworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFn Z3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5kLmFnZ190cmFucy5zZXRvZmZdOworCQkJcGVyZ3Jv dXAgPSAmcGVyZ3JvdXBfYWxsYWdnc1tvcC0+ZC5hZ2dfdHJhbnMudHJhbnNub107CisKKwkJCWlm IChwZXJncm91cF9hbGxhZ2dzID09IE5VTEwpCisJCQkJRUVPX05FWFQoKTsKKworCQkJQXNzZXJ0 KHBlcnRyYW5zLT50cmFuc3R5cGVCeVZhbCk7CisKKwkJCWZjaW5mbyA9IHBlcnRyYW5zLT50cmFu c2ZuX2ZjaW5mbzsKKworCQkJLyogY2YuIHNlbGVjdF9jdXJyZW50X3NldCgpICovCisJCQlhZ2dz dGF0ZS0+Y3VyYWdnY29udGV4dCA9IG9wLT5kLmFnZ190cmFucy5hZ2djb250ZXh0OworCQkJYWdn c3RhdGUtPmN1cnJlbnRfc2V0ID0gb3AtPmQuYWdnX3RyYW5zLnNldG5vOworCisJCQkvKiBzZXQg dXAgYWdnc3RhdGUtPmN1cnBlcnRyYW5zIGZvciBBZ2dHZXRBZ2dyZWYoKSAqLworCQkJYWdnc3Rh dGUtPmN1cnBlcnRyYW5zID0gcGVydHJhbnM7CisKKwkJCS8qIGludm9rZSB0cmFuc2l0aW9uIGZ1 bmN0aW9uIGluIHBlci10dXBsZSBjb250ZXh0ICovCisJCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT50bXBjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkp OworCisJCQlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSBwZXJncm91cC0+dHJhbnNWYWx1ZTsKKwkJ CWZjaW5mby0+YXJnc1swXS5pc251bGwgPSBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbDsKKwkJ CWZjaW5mby0+aXNudWxsID0gZmFsc2U7IC8qIGp1c3QgaW4gY2FzZSB0cmFuc2ZuIGRvZXNuJ3Qg c2V0IGl0ICovCisKKwkJCW5ld1ZhbCA9IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pOworCisJ CQlwZXJncm91cC0+dHJhbnNWYWx1ZSA9IG5ld1ZhbDsKKwkJCXBlcmdyb3VwLT50cmFuc1ZhbHVl SXNOdWxsID0gZmNpbmZvLT5pc251bGw7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRD b250ZXh0KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQogCiAJCS8qCiAJCSAqIEV2YWx1YXRlIGFn Z3JlZ2F0ZSB0cmFuc2l0aW9uIC8gY29tYmluZSBmdW5jdGlvbiB0aGF0IGhhcyBhCkBAIC0xNzM1 LDYgKzE4MzQsNjcgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCW5ld1ZhbCA9IEZ1bmN0aW9uQ2FsbElu dm9rZShmY2luZm8pOwogCisJCQkvKgorCQkJICogRm9yIHBhc3MtYnktcmVmIGRhdGF0eXBlLCBt dXN0IGNvcHkgdGhlIG5ldyB2YWx1ZSBpbnRvCisJCQkgKiBhZ2djb250ZXh0IGFuZCBmcmVlIHRo ZSBwcmlvciB0cmFuc1ZhbHVlLiAgQnV0IGlmIHRyYW5zZm4KKwkJCSAqIHJldHVybmVkIGEgcG9p bnRlciB0byBpdHMgZmlyc3QgaW5wdXQsIHdlIGRvbid0IG5lZWQgdG8gZG8KKwkJCSAqIGFueXRo aW5nLiAgQWxzbywgaWYgdHJhbnNmbiByZXR1cm5lZCBhIHBvaW50ZXIgdG8gYSBSL1cKKwkJCSAq IGV4cGFuZGVkIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgYSBjaGlsZCBvZiB0aGUgYWdnY29udGV4 dCwKKwkJCSAqIGFzc3VtZSB3ZSBjYW4gYWRvcHQgdGhhdCB2YWx1ZSB3aXRob3V0IGNvcHlpbmcg aXQuCisJCQkgKi8KKwkJCWlmIChEYXR1bUdldFBvaW50ZXIobmV3VmFsKSAhPSBEYXR1bUdldFBv aW50ZXIocGVyZ3JvdXAtPnRyYW5zVmFsdWUpKQorCQkJCW5ld1ZhbCA9IEV4ZWNBZ2dUcmFuc1Jl cGFyZW50KGFnZ3N0YXRlLCBwZXJ0cmFucywKKwkJCQkJCQkJCQkJICBuZXdWYWwsIGZjaW5mby0+ aXNudWxsLAorCQkJCQkJCQkJCQkgIHBlcmdyb3VwLT50cmFuc1ZhbHVlLAorCQkJCQkJCQkJCQkg IHBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsKTsKKworCQkJcGVyZ3JvdXAtPnRyYW5zVmFsdWUg PSBuZXdWYWw7CisJCQlwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbCA9IGZjaW5mby0+aXNudWxs OworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwkJCUVFT19ORVhU KCk7CisJCX0KKwkJRUVPX0NBU0UoRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRCkKKwkJewor CQkJQWdnU3RhdGUgICAqYWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOwor CQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cDsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3Jv dXBfYWxsYWdnczsKKwkJCUZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvOworCQkJTWVtb3J5Q29udGV4 dCBvbGRDb250ZXh0OworCQkJRGF0dW0JCW5ld1ZhbDsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5h Z2dfdHJhbnMuYWdnc3RhdGU7CisJCQlwZXJ0cmFucyA9IG9wLT5kLmFnZ190cmFucy5wZXJ0cmFu czsKKworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5k LmFnZ190cmFucy5zZXRvZmZdOworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBOVUxMKQor CQkJCUVFT19ORVhUKCk7CisKKwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQu YWdnX3RyYW5zLnRyYW5zbm9dOworCisJCQlBc3NlcnQoIXBlcnRyYW5zLT50cmFuc3R5cGVCeVZh bCk7CisKKwkJCWZjaW5mbyA9IHBlcnRyYW5zLT50cmFuc2ZuX2ZjaW5mbzsKKworCQkJLyogY2Yu IHNlbGVjdF9jdXJyZW50X3NldCgpICovCisJCQlhZ2dzdGF0ZS0+Y3VyYWdnY29udGV4dCA9IG9w LT5kLmFnZ190cmFucy5hZ2djb250ZXh0OworCQkJYWdnc3RhdGUtPmN1cnJlbnRfc2V0ID0gb3At PmQuYWdnX3RyYW5zLnNldG5vOworCisJCQkvKiBzZXQgdXAgYWdnc3RhdGUtPmN1cnBlcnRyYW5z IGZvciBBZ2dHZXRBZ2dyZWYoKSAqLworCQkJYWdnc3RhdGUtPmN1cnBlcnRyYW5zID0gcGVydHJh bnM7CisKKwkJCS8qIGludm9rZSB0cmFuc2l0aW9uIGZ1bmN0aW9uIGluIHBlci10dXBsZSBjb250 ZXh0ICovCisJCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT50 bXBjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOworCisJCQlmY2luZm8tPmFyZ3NbMF0u dmFsdWUgPSBwZXJncm91cC0+dHJhbnNWYWx1ZTsKKwkJCWZjaW5mby0+YXJnc1swXS5pc251bGwg PSBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbDsKKwkJCWZjaW5mby0+aXNudWxsID0gZmFsc2U7 IC8qIGp1c3QgaW4gY2FzZSB0cmFuc2ZuIGRvZXNuJ3Qgc2V0IGl0ICovCisKKwkJCW5ld1ZhbCA9 IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pOworCiAJCQkvKgogCQkJICogRm9yIHBhc3MtYnkt cmVmIGRhdGF0eXBlLCBtdXN0IGNvcHkgdGhlIG5ldyB2YWx1ZSBpbnRvCiAJCQkgKiBhZ2djb250 ZXh0IGFuZCBmcmVlIHRoZSBwcmlvciB0cmFuc1ZhbHVlLiAgQnV0IGlmIHRyYW5zZm4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0dyb3VwaW5nLmMKaW5kZXggMzYwM2M1OGI2M2UuLjk0NDM5ZTJhYjllIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcuYwpAQCAtMjUsOCArMjUsOSBAQAogI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKLXN0 YXRpYyB1aW50MzIgVHVwbGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIs IGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSk7CiBzdGF0aWMgaW50CVR1cGxlSGFzaFRhYmxlTWF0 Y2goc3RydWN0IHR1cGxlaGFzaF9oYXNoICp0YiwgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlMSwg Y29uc3QgTWluaW1hbFR1cGxlIHR1cGxlMik7CitzdGF0aWMgVHVwbGVIYXNoRW50cnkgTG9va3Vw VHVwbGVIYXNoRW50cnlfaW50ZXJuYWwoCisJVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaXNuZXcsIHVpbnQzMiBoYXNoKTsKIAogLyoKICAqIERl ZmluZSBwYXJhbWV0ZXJzIGZvciB0dXBsZSBoYXNoIHRhYmxlIGNvZGUgZ2VuZXJhdGlvbi4gVGhl IGludGVyZmFjZSBpcwpAQCAtMzAwLDEwICszMDEsOSBAQCBUdXBsZUhhc2hFbnRyeQogTG9va3Vw VHVwbGVIYXNoRW50cnkoVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCwKIAkJCQkJIGJvb2wgKmlzbmV3KQogewotCVR1cGxlSGFzaEVudHJ5RGF0YSAqZW50cnk7 Ci0JTWVtb3J5Q29udGV4dCBvbGRDb250ZXh0OwotCWJvb2wJCWZvdW5kOwotCU1pbmltYWxUdXBs ZSBrZXk7CisJVHVwbGVIYXNoRW50cnkJZW50cnk7CisJTWVtb3J5Q29udGV4dAlvbGRDb250ZXh0 OworCXVpbnQzMgkJCWhhc2g7CiAKIAkvKiBOZWVkIHRvIHJ1biB0aGUgaGFzaCBmdW5jdGlvbnMg aW4gc2hvcnQtbGl2ZWQgY29udGV4dCAqLwogCW9sZENvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oaGFzaHRhYmxlLT50ZW1wY3h0KTsKQEAgLTMxMywzMiArMzEzLDI5IEBAIExvb2t1cFR1 cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCiAJaGFzaHRhYmxlLT5pbl9oYXNoX2Z1bmNzID0gaGFzaHRhYmxlLT50YWJfaGFzaF9mdW5j czsKIAloYXNodGFibGUtPmN1cl9lcV9mdW5jID0gaGFzaHRhYmxlLT50YWJfZXFfZnVuYzsKIAot CWtleSA9IE5VTEw7CQkJCQkvKiBmbGFnIHRvIHJlZmVyZW5jZSBpbnB1dHNsb3QgKi8KKwloYXNo ID0gVHVwbGVIYXNoVGFibGVIYXNoKGhhc2h0YWJsZS0+aGFzaHRhYiwgTlVMTCk7CisJZW50cnkg PSBMb29rdXBUdXBsZUhhc2hFbnRyeV9pbnRlcm5hbChoYXNodGFibGUsIHNsb3QsIGlzbmV3LCBo YXNoKTsKIAotCWlmIChpc25ldykKLQl7Ci0JCWVudHJ5ID0gdHVwbGVoYXNoX2luc2VydChoYXNo dGFibGUtPmhhc2h0YWIsIGtleSwgJmZvdW5kKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Q29udGV4dCk7CiAKLQkJaWYgKGZvdW5kKQotCQl7Ci0JCQkvKiBmb3VuZCBwcmUtZXhpc3Rpbmcg ZW50cnkgKi8KLQkJCSppc25ldyA9IGZhbHNlOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogY3Jl YXRlZCBuZXcgZW50cnkgKi8KLQkJCSppc25ldyA9IHRydWU7Ci0JCQkvKiB6ZXJvIGNhbGxlciBk YXRhICovCi0JCQllbnRyeS0+YWRkaXRpb25hbCA9IE5VTEw7Ci0JCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8oaGFzaHRhYmxlLT50YWJsZWN4dCk7Ci0JCQkvKiBDb3B5IHRoZSBmaXJzdCB0dXBsZSBp bnRvIHRoZSB0YWJsZSBjb250ZXh0ICovCi0JCQllbnRyeS0+Zmlyc3RUdXBsZSA9IEV4ZWNDb3B5 U2xvdE1pbmltYWxUdXBsZShzbG90KTsKLQkJfQotCX0KLQllbHNlCi0JewotCQllbnRyeSA9IHR1 cGxlaGFzaF9sb29rdXAoaGFzaHRhYmxlLT5oYXNodGFiLCBrZXkpOwotCX0KKwlyZXR1cm4gZW50 cnk7Cit9CisKKy8qCisgKiBBIHZhcmlhbnQgb2YgTG9va3VwVHVwbGVIYXNoRW50cnkgZm9yIGNh bGxlcnMgdGhhdCBoYXZlIGFscmVhZHkgY29tcHV0ZWQKKyAqIHRoZSBoYXNoIHZhbHVlLgorICov CitUdXBsZUhhc2hFbnRyeQorTG9va3VwVHVwbGVIYXNoRW50cnlIYXNoKFR1cGxlSGFzaFRhYmxl IGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkgYm9vbCAqaXNuZXcsIHVp bnQzMiBoYXNoKQoreworCVR1cGxlSGFzaEVudHJ5CWVudHJ5OworCU1lbW9yeUNvbnRleHQJb2xk Q29udGV4dDsKKworCS8qIE5lZWQgdG8gcnVuIHRoZSBoYXNoIGZ1bmN0aW9ucyBpbiBzaG9ydC1s aXZlZCBjb250ZXh0ICovCisJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNo dGFibGUtPnRlbXBjeHQpOworCisJZW50cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeV9pbnRlcm5h bChoYXNodGFibGUsIHNsb3QsIGlzbmV3LCBoYXNoKTsKIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRDb250ZXh0KTsKIApAQCAtMzg5LDcgKzM4Niw3IEBAIEZpbmRUdXBsZUhhc2hFbnRyeShU dXBsZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogICogQWxzbywg dGhlIGNhbGxlciBtdXN0IHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBtZW1vcnkgY29udGV4dCBmb3Ig cnVubmluZwogICogdGhlIGhhc2ggZnVuY3Rpb25zLiAoZHluYWhhc2guYyBkb2Vzbid0IGNoYW5n ZSBDdXJyZW50TWVtb3J5Q29udGV4dC4pCiAgKi8KLXN0YXRpYyB1aW50MzIKK3VpbnQzMgogVHVw bGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmltYWxU dXBsZSB0dXBsZSkKIHsKIAlUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUgPSAoVHVwbGVIYXNoVGFi bGUpIHRiLT5wcml2YXRlX2RhdGE7CkBAIC00NTAsNiArNDQ3LDU0IEBAIFR1cGxlSGFzaFRhYmxl SGFzaChzdHJ1Y3QgdHVwbGVoYXNoX2hhc2ggKnRiLCBjb25zdCBNaW5pbWFsVHVwbGUgdHVwbGUp CiAJcmV0dXJuIG11cm11cmhhc2gzMihoYXNoa2V5KTsKIH0KIAorLyoKKyAqIERvZXMgdGhlIHdv cmsgb2YgTG9va3VwVHVwbGVIYXNoRW50cnkgYW5kIExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaC4g VXNlZnVsCisgKiBzbyB0aGF0IHdlIGNhbiBhdm9pZCBzd2l0Y2hpbmcgdGhlIG1lbW9yeSBjb250 ZXh0IG11bHRpcGxlIHRpbWVzIGZvcgorICogTG9va3VwVHVwbGVIYXNoRW50cnkuCisgKi8KK3N0 YXRpYyBUdXBsZUhhc2hFbnRyeQorTG9va3VwVHVwbGVIYXNoRW50cnlfaW50ZXJuYWwoVHVwbGVI YXNoVGFibGUgaGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkgIGJvb2wg KmlzbmV3LCB1aW50MzIgaGFzaCkKK3sKKwlUdXBsZUhhc2hFbnRyeURhdGEgKmVudHJ5OworCWJv b2wJCWZvdW5kOworCU1pbmltYWxUdXBsZSBrZXk7CisKKwkvKiBzZXQgdXAgZGF0YSBuZWVkZWQg YnkgaGFzaCBhbmQgbWF0Y2ggZnVuY3Rpb25zICovCisJaGFzaHRhYmxlLT5pbnB1dHNsb3QgPSBz bG90OworCWhhc2h0YWJsZS0+aW5faGFzaF9mdW5jcyA9IGhhc2h0YWJsZS0+dGFiX2hhc2hfZnVu Y3M7CisJaGFzaHRhYmxlLT5jdXJfZXFfZnVuYyA9IGhhc2h0YWJsZS0+dGFiX2VxX2Z1bmM7CisK KwlrZXkgPSBOVUxMOwkJCQkJLyogZmxhZyB0byByZWZlcmVuY2UgaW5wdXRzbG90ICovCisKKwlp ZiAoaXNuZXcpCisJeworCQllbnRyeSA9IHR1cGxlaGFzaF9pbnNlcnRfaGFzaChoYXNodGFibGUt Pmhhc2h0YWIsIGtleSwgaGFzaCwgJmZvdW5kKTsKKworCQlpZiAoZm91bmQpCisJCXsKKwkJCS8q IGZvdW5kIHByZS1leGlzdGluZyBlbnRyeSAqLworCQkJKmlzbmV3ID0gZmFsc2U7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKiBjcmVhdGVkIG5ldyBlbnRyeSAqLworCQkJKmlzbmV3ID0gdHJ1ZTsK KwkJCS8qIHplcm8gY2FsbGVyIGRhdGEgKi8KKwkJCWVudHJ5LT5hZGRpdGlvbmFsID0gTlVMTDsK KwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNodGFibGUtPnRhYmxlY3h0KTsKKwkJCS8qIENv cHkgdGhlIGZpcnN0IHR1cGxlIGludG8gdGhlIHRhYmxlIGNvbnRleHQgKi8KKwkJCWVudHJ5LT5m aXJzdFR1cGxlID0gRXhlY0NvcHlTbG90TWluaW1hbFR1cGxlKHNsb3QpOworCQl9CisJfQorCWVs c2UKKwl7CisJCWVudHJ5ID0gdHVwbGVoYXNoX2xvb2t1cF9oYXNoKGhhc2h0YWJsZS0+aGFzaHRh Yiwga2V5LCBoYXNoKTsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CisKIC8qCiAgKiBTZWUgd2hl dGhlciB0d28gdHVwbGVzIChwcmVzdW1hYmx5IG9mIHRoZSBzYW1lIGhhc2ggdmFsdWUpIG1hdGNo CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwppbmRleCA5MDczMzk1ZWFjZi4uOGY4MDFiM2I1M2Eg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQWdnLmMKQEAgLTE5NCw2ICsxOTQsMjkgQEAKICAqCSAgdHJhbnNp dGlvbiB2YWx1ZXMuICBoYXNoY29udGV4dCBpcyB0aGUgc2luZ2xlIGNvbnRleHQgY3JlYXRlZCB0 byBzdXBwb3J0CiAgKgkgIGFsbCBoYXNoIHRhYmxlcy4KICAqCisgKgkgIFNwaWxsaW5nIFRvIERp c2sKKyAqCisgKgkgIFdoZW4gcGVyZm9ybWluZyBoYXNoIGFnZ3JlZ2F0aW9uLCBpZiB0aGUgaGFz aCB0YWJsZSBtZW1vcnkgZXhjZWVkcyB0aGUKKyAqCSAgbGltaXQgKHNlZSBoYXNoYWdnX2NoZWNr X2xpbWl0cygpKSwgd2UgZW50ZXIgInNwaWxsIG1vZGUiLiBJbiBzcGlsbAorICoJICBtb2RlLCB3 ZSBhZHZhbmNlIHRoZSB0cmFuc2l0aW9uIHN0YXRlcyBvbmx5IGZvciBncm91cHMgYWxyZWFkeSBp biB0aGUKKyAqCSAgaGFzaCB0YWJsZS4gRm9yIHR1cGxlcyB0aGF0IHdvdWxkIG5lZWQgdG8gY3Jl YXRlIGEgbmV3IGhhc2ggdGFibGUKKyAqCSAgZW50cmllcyAoYW5kIGluaXRpYWxpemUgbmV3IHRy YW5zaXRpb24gc3RhdGVzKSwgd2UgaW5zdGVhZCBzcGlsbCB0aGVtIHRvCisgKgkgIGRpc2sgdG8g YmUgcHJvY2Vzc2VkIGxhdGVyLiBUaGUgdHVwbGVzIGFyZSBzcGlsbGVkIGluIGEgcGFydGl0aW9u ZWQKKyAqCSAgbWFubmVyLCBzbyB0aGF0IHN1YnNlcXVlbnQgYmF0Y2hlcyBhcmUgc21hbGxlciBh bmQgbGVzcyBsaWtlbHkgdG8gZXhjZWVkCisgKgkgIHdvcmtfbWVtIChpZiBhIGJhdGNoIGRvZXMg ZXhjZWVkIHdvcmtfbWVtLCBpdCBtdXN0IGJlIHNwaWxsZWQKKyAqCSAgcmVjdXJzaXZlbHkpLgor ICoKKyAqCSAgU3BpbGxlZCBkYXRhIGlzIHdyaXR0ZW4gdG8gbG9naWNhbCB0YXBlcy4gVGhlc2Ug cHJvdmlkZSBiZXR0ZXIgY29udHJvbAorICoJICBvdmVyIG1lbW9yeSB1c2FnZSwgZGlzayBzcGFj ZSwgYW5kIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhbiBpZiB3ZSB3ZXJlCisgKgkgIHRvIHVzZSBh IEJ1ZkZpbGUgZm9yIGVhY2ggc3BpbGwuCisgKgorICoJICBOb3RlIHRoYXQgaXQncyBwb3NzaWJs ZSBmb3IgdHJhbnNpdGlvbiBzdGF0ZXMgdG8gc3RhcnQgc21hbGwgYnV0IHRoZW4KKyAqCSAgZ3Jv dyB2ZXJ5IGxhcmdlOyBmb3IgaW5zdGFuY2UgaW4gdGhlIGNhc2Ugb2YgQVJSQVlfQUdHLiBJbiBz dWNoIGNhc2VzLAorICoJICBpdCdzIHN0aWxsIHBvc3NpYmxlIHRvIHNpZ25pZmljYW50bHkgZXhj ZWVkIHdvcmtfbWVtLiBXZSB0cnkgdG8gYXZvaWQKKyAqCSAgdGhpcyBzaXR1YXRpb24gYnkgZXN0 aW1hdGluZyB3aGF0IHdpbGwgZml0IGluIHRoZSBhdmFpbGFibGUgbWVtb3J5LCBhbmQKKyAqCSAg aW1wb3NpbmcgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGdyb3VwcyBzZXBhcmF0ZWx5IGZyb20g dGhlIGFtb3VudCBvZgorICoJICBtZW1vcnkgY29uc3VtZWQuCisgKgogICogICAgVHJhbnNpdGlv biAvIENvbWJpbmUgZnVuY3Rpb24gaW52b2NhdGlvbjoKICAqCiAgKiAgICBGb3IgcGVyZm9ybWFu Y2UgcmVhc29ucyB0cmFuc2l0aW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGNvbWJpbmUKQEAgLTIz MywxMiArMjU2LDk4IEBACiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2R5 bmFoYXNoLmgiCiAjaW5jbHVkZSAidXRpbHMvZXhwYW5kZWRkYXR1bS5oIgorI2luY2x1ZGUgInV0 aWxzL2xvZ3RhcGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvdHVwbGVzb3J0LmgiCiAKKy8qCisgKiBDb250cm9sIGhvdyBtYW55IHBhcnRpdGlvbnMg YXJlIGNyZWF0ZWQgd2hlbiBzcGlsbGluZyBIYXNoQWdnIHRvCisgKiBkaXNrLgorICoKKyAqIEhB U0hBR0dfUEFSVElUSU9OX0ZBQ1RPUiBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBlc3RpbWF0ZWQgbnVt YmVyIG9mCisgKiBwYXJ0aXRpb25zIG5lZWRlZCBzdWNoIHRoYXQgZWFjaCBwYXJ0aXRpb24gd2ls bCBmaXQgaW4gbWVtb3J5LiBUaGUgZmFjdG9yCisgKiBpcyBzZXQgaGlnaGVyIHRoYW4gb25lIGJl Y2F1c2UgdGhlcmUncyBub3QgYSBoaWdoIGNvc3QgdG8gaGF2aW5nIGEgZmV3IHRvbworICogbWFu eSBwYXJ0aXRpb25zLCBhbmQgaXQgbWFrZXMgaXQgbGVzcyBsaWtlbHkgdGhhdCBhIHBhcnRpdGlv biB3aWxsIG5lZWQgdG8KKyAqIGJlIHNwaWxsZWQgcmVjdXJzaXZlbHkuIEFub3RoZXIgYmVuZWZp dCBvZiBoYXZpbmcgbW9yZSwgc21hbGxlciBwYXJ0aXRpb25zCisgKiBpcyB0aGF0IHNtYWxsIGhh c2ggdGFibGVzIG1heSBwZXJmb3JtIGJldHRlciB0aGFuIGxhcmdlIG9uZXMgZHVlIHRvIG1lbW9y eQorICogY2FjaGluZyBlZmZlY3RzLgorICoKKyAqIFdlIGFsc28gc3BlY2lmeSBhIG1pbiBhbmQg bWF4IG51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBzcGlsbC4gVG9vIGZldyBtaWdodAorICogbWVh biBhIGxvdCBvZiB3YXN0ZWQgSS9PIGZyb20gcmVwZWF0ZWQgc3BpbGxpbmcgb2YgdGhlIHNhbWUg dHVwbGVzLiBUb28KKyAqIG1hbnkgd2lsbCByZXN1bHQgaW4gbG90cyBvZiBtZW1vcnkgd2FzdGVk IGJ1ZmZlcmluZyB0aGUgc3BpbGwgZmlsZXMgKHdoaWNoCisgKiBjb3VsZCBpbnN0ZWFkIGJlIHNw ZW50IG9uIGEgbGFyZ2VyIGhhc2ggdGFibGUpLgorICoKKyAqIEZvciByZWFkaW5nIGZyb20gdGFw ZXMsIHRoZSBidWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YKKyAqIEJMQ0tTWi4gTGFy Z2VyIHZhbHVlcyBoZWxwIHdoZW4gcmVhZGluZyBmcm9tIG11bHRpcGxlIHRhcGVzIGNvbmN1cnJl bnRseSwKKyAqIGJ1dCB0aGF0IGRvZXNuJ3QgaGFwcGVuIGluIEhhc2hBZ2csIHNvIHdlIHNpbXBs eSB1c2UgQkxDS1NaLiBXcml0aW5nIHRvIGEKKyAqIHRhcGUgYWx3YXlzIHVzZXMgYSBidWZmZXIg b2Ygc2l6ZSBCTENLU1ouCisgKi8KKyNkZWZpbmUgSEFTSEFHR19QQVJUSVRJT05fRkFDVE9SIDEu NTAKKyNkZWZpbmUgSEFTSEFHR19NSU5fUEFSVElUSU9OUyA0CisjZGVmaW5lIEhBU0hBR0dfUkVB RF9CVUZGRVJfU0laRSBCTENLU1oKKyNkZWZpbmUgSEFTSEFHR19XUklURV9CVUZGRVJfU0laRSBC TENLU1oKKworLyoKKyAqIFRyYWNrIGFsbCB0YXBlcyBuZWVkZWQgZm9yIGEgSGFzaEFnZyB0aGF0 IHNwaWxscy4gV2UgZG9uJ3Qga25vdyB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIHRhcGVzIG5l ZWRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGFsZ29yaXRobSAoYmVjYXVzZSBpdCBjYW4KKyAqIHJl Y3Vyc2UpLCBzbyBvbmUgdGFwZSBzZXQgaXMgYWxsb2NhdGVkIGFuZCBleHRlbmRlZCBhcyBuZWVk ZWQgZm9yIG5ldworICogdGFwZXMuIFdoZW4gYSBwYXJ0aWN1bGFyIHRhcGUgaXMgYWxyZWFkeSBy ZWFkLCByZXdpbmQgaXQgZm9yIHdyaXRlIG1vZGUgYW5kCisgKiBwdXQgaXQgaW4gdGhlIGZyZWUg bGlzdC4KKyAqCisgKiBUYXBlcycgYnVmZmVycyBjYW4gdGFrZSB1cCBzdWJzdGFudGlhbCBtZW1v cnkgd2hlbiBtYW55IHRhcGVzIGFyZSBvcGVuIGF0CisgKiBvbmNlLiBXZSBvbmx5IG5lZWQgb25l IHRhcGUgb3BlbiBhdCBhIHRpbWUgaW4gcmVhZCBtb2RlICh1c2luZyBhIGJ1ZmZlcgorICogdGhh dCdzIGEgbXVsdGlwbGUgb2YgQkxDS1NaKTsgYnV0IHdlIG5lZWQgdXAgdG8gSEFTSEFHR19NQVhf UEFSVElUSU9OUworICogdGFwZXMgb3BlbiBpbiB3cml0ZSBtb2RlIChlYWNoIHJlcXVpcmluZyBh IGJ1ZmZlciBvZiBzaXplIEJMQ0tTWikuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhhc2hUYXBlSW5m bworeworCUxvZ2ljYWxUYXBlU2V0CSp0YXBlc2V0OworCWludAkJCQkgbnRhcGVzOworCWludAkJ CQkqZnJlZXRhcGVzOworCWludAkJCQkgbmZyZWV0YXBlczsKK30gSGFzaFRhcGVJbmZvOworCisv KgorICogUmVwcmVzZW50cyBwYXJ0aXRpb25lZCBzcGlsbCBkYXRhIGZvciBhIHNpbmdsZSBoYXNo dGFibGUuIENvbnRhaW5zIHRoZQorICogbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHJvdXRlIHR1 cGxlcyB0byB0aGUgY29ycmVjdCBwYXJ0aXRpb24sIGFuZCB0bworICogdHJhbnNmb3JtIHRoZSBz cGlsbGVkIGRhdGEgaW50byBuZXcgYmF0Y2hlcy4KKyAqCisgKiBUaGUgaGlnaCBiaXRzIGFyZSB1 c2VkIGZvciBwYXJ0aXRpb24gc2VsZWN0aW9uICh3aGVuIHJlY3Vyc2luZywgd2UgaWdub3JlCisg KiB0aGUgYml0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHVzZWQgZm9yIHBhcnRpdGlvbiBzZWxl Y3Rpb24gYXQgYW4gZWFybGllcgorICogbGV2ZWwpLgorICovCit0eXBlZGVmIHN0cnVjdCBIYXNo QWdnU3BpbGwKK3sKKwlIYXNoVGFwZUluZm8gKnRhcGVpbmZvOwkJLyogYm9ycm93ZWQgcmVmZXJl bmNlIHRvIHRhcGUgaW5mbyAqLworCWludAkJIG5wYXJ0aXRpb25zOwkJLyogbnVtYmVyIG9mIHBh cnRpdGlvbnMgKi8KKwlpbnQJCSpwYXJ0aXRpb25zOwkJLyogc3BpbGwgcGFydGl0aW9uIHRhcGUg bnVtYmVycyAqLworCWludDY0ICAgKm50dXBsZXM7CQkJLyogbnVtYmVyIG9mIHR1cGxlcyBpbiBl YWNoIHBhcnRpdGlvbiAqLworCXVpbnQzMiAgIG1hc2s7CQkJCS8qIG1hc2sgdG8gZmluZCBwYXJ0 aXRpb24gZnJvbSBoYXNoIHZhbHVlICovCisJaW50ICAgICAgc2hpZnQ7CQkJCS8qIGFmdGVyIG1h c2tpbmcsIHNoaWZ0IGJ5IHRoaXMgYW1vdW50ICovCit9IEhhc2hBZ2dTcGlsbDsKKworLyoKKyAq IFJlcHJlc2VudHMgd29yayB0byBiZSBkb25lIGZvciBvbmUgcGFzcyBvZiBoYXNoIGFnZ3JlZ2F0 aW9uICh3aXRoIG9ubHkgb25lCisgKiBncm91cGluZyBzZXQpLgorICoKKyAqIEFsc28gdHJhY2tz IHRoZSBiaXRzIG9mIHRoZSBoYXNoIGFscmVhZHkgdXNlZCBmb3IgcGFydGl0aW9uIHNlbGVjdGlv biBieQorICogZWFybGllciBpdGVyYXRpb25zLCBzbyB0aGF0IHRoaXMgYmF0Y2ggY2FuIHVzZSBu ZXcgYml0cy4gSWYgYWxsIGJpdHMgaGF2ZQorICogYWxyZWFkeSBiZWVuIHVzZWQsIG5vIHBhcnRp dGlvbmluZyB3aWxsIGJlIGRvbmUgKGFueSBzcGlsbGVkIGRhdGEgd2lsbCBnbworICogdG8gYSBz aW5nbGUgb3V0cHV0IHRhcGUpLgorICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQWdnQmF0Y2gKK3sK KwlpbnQJCQkJIHNldG5vOwkJCS8qIGdyb3VwaW5nIHNldCAqLworCWludAkJCQkgdXNlZF9iaXRz OwkJLyogbnVtYmVyIG9mIGJpdHMgb2YgaGFzaCBhbHJlYWR5IHVzZWQgKi8KKwlIYXNoVGFwZUlu Zm8JKnRhcGVpbmZvOwkJLyogYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRhcGUgaW5mbyAqLworCWlu dAkJCQkgaW5wdXRfdGFwZW51bTsJLyogaW5wdXQgcGFydGl0aW9uIHRhcGUgKi8KKwlpbnQ2NAkJ CSBpbnB1dF90dXBsZXM7CS8qIG51bWJlciBvZiB0dXBsZXMgaW4gdGhpcyBiYXRjaCAqLworfSBI YXNoQWdnQmF0Y2g7CisKIHN0YXRpYyB2b2lkIHNlbGVjdF9jdXJyZW50X3NldChBZ2dTdGF0ZSAq YWdnc3RhdGUsIGludCBzZXRubywgYm9vbCBpc19oYXNoKTsKIHN0YXRpYyB2b2lkIGluaXRpYWxp emVfcGhhc2UoQWdnU3RhdGUgKmFnZ3N0YXRlLCBpbnQgbmV3cGhhc2UpOwogc3RhdGljIFR1cGxl VGFibGVTbG90ICpmZXRjaF9pbnB1dF90dXBsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOwpAQCAtMjY5 LDE1ICszNzgsNTMgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9wcm9qZWN0aW9uX3Nsb3QoQWdnU3Rh dGUgKmFnZ3N0YXRlLAogc3RhdGljIHZvaWQgZmluYWxpemVfYWdncmVnYXRlcyhBZ2dTdGF0ZSAq YWdnc3RhdGUsCiAJCQkJCQkJCUFnZ1N0YXRlUGVyQWdnIHBlcmFnZywKIAkJCQkJCQkJQWdnU3Rh dGVQZXJHcm91cCBwZXJncm91cCk7Ci1zdGF0aWMgVHVwbGVUYWJsZVNsb3QgKnByb2plY3RfYWdn cmVnYXRlcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOwotc3RhdGljIEJpdG1hcHNldCAqZmluZF91bmFn Z3JlZ2F0ZWRfY29scyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOwotc3RhdGljIGJvb2wgZmluZF91bmFn Z3JlZ2F0ZWRfY29sc193YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICoqY29sbm9zKTsKLXN0 YXRpYyB2b2lkIGJ1aWxkX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKLXN0YXRpYyBU dXBsZUhhc2hFbnRyeURhdGEgKmxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSk7 CitzdGF0aWMgdm9pZCBidWlsZF9oYXNoX3RhYmxlcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3Rh dGljIHZvaWQgYnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUsIGludCBzZXRubywK KwkJCQkJCQkgaW50NjQgbmdyb3Vwc19lc3RpbWF0ZSk7CitzdGF0aWMgdm9pZCBwcmVwYXJlX2hh c2hfc2xvdChBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZvaWQgaGFzaGFnZ19yZWNvbXBp bGVfZXhwcmVzc2lvbnMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyB1aW50MzIgY2FsY3Vs YXRlX2hhc2goQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyBsb25nIGhhc2hfY2hvb3NlX251 bV9idWNrZXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSwKKwkJCQkJCQkJCWxvbmcgZXN0aW1hdGVkX25i dWNrZXRzLAorCQkJCQkJCQkJU2l6ZSBtZW1vcnkpOworc3RhdGljIGludCBoYXNoX2Nob29zZV9u dW1fcGFydGl0aW9ucyh1aW50NjQgaW5wdXRfZ3JvdXBzLAorCQkJCQkJCQkJICBkb3VibGUgaGFz aGVudHJ5c2l6ZSwKKwkJCQkJCQkJCSAgaW50IHVzZWRfYml0cywKKwkJCQkJCQkJCSAgaW50ICps b2cyX25wYXJ0aXR0aW9ucyk7CitzdGF0aWMgQWdnU3RhdGVQZXJHcm91cCBsb29rdXBfaGFzaF9l bnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUsIHVpbnQzMiBoYXNoKTsKIHN0YXRpYyB2b2lkIGxvb2t1 cF9oYXNoX2VudHJpZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyBUdXBsZVRhYmxlU2xv dCAqYWdnX3JldHJpZXZlX2RpcmVjdChBZ2dTdGF0ZSAqYWdnc3RhdGUpOwogc3RhdGljIHZvaWQg YWdnX2ZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIGJvb2wgYWdn X3JlZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CiBzdGF0aWMgVHVwbGVUYWJs ZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CitzdGF0 aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeShBZ2dT dGF0ZSAqYWdnc3RhdGUpOworCisvKiBIYXNoIEFnZ3JlZ2F0aW9uIGhlbHBlcnMgKi8KK3N0YXRp YyBUdXBsZVRhYmxlU2xvdCAqcHJvamVjdF9hZ2dyZWdhdGVzKEFnZ1N0YXRlICphZ2dzdGF0ZSk7 CitzdGF0aWMgQml0bWFwc2V0ICpmaW5kX3VuYWdncmVnYXRlZF9jb2xzKEFnZ1N0YXRlICphZ2dz dGF0ZSk7CitzdGF0aWMgYm9vbCBmaW5kX3VuYWdncmVnYXRlZF9jb2xzX3dhbGtlcihOb2RlICpu b2RlLCBCaXRtYXBzZXQgKipjb2xub3MpOworc3RhdGljIHZvaWQgaGFzaGFnZ19zZXRfbGltaXRz KEFnZ1N0YXRlICphZ2dzdGF0ZSwgdWludDY0IGlucHV0X2dyb3VwcywKKwkJCQkJCQkgICBpbnQg dXNlZF9iaXRzKTsKK3N0YXRpYyB2b2lkIGhhc2hhZ2dfY2hlY2tfbGltaXRzKEFnZ1N0YXRlICph Z2dzdGF0ZSk7CitzdGF0aWMgdm9pZCBoYXNoYWdnX2ZpbmlzaF9pbml0aWFsX3NwaWxscyhBZ2dT dGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZvaWQgaGFzaGFnZ19yZXNldF9zcGlsbF9zdGF0ZShB Z2dTdGF0ZSAqYWdnc3RhdGUpOworCisvKiBTdHJ1Y3R1cmUgQVBJcyAqLworc3RhdGljIEhhc2hB Z2dCYXRjaCAqaGFzaGFnZ19iYXRjaF9uZXcoSGFzaFRhcGVJbmZvICp0YXBlaW5mbywKKwkJCQkJ CQkJCSAgIGludCBpbnB1dF90YXBlbnVtLCBpbnQgc2V0bm8sCisJCQkJCQkJCQkgICBpbnQ2NCBp bnB1dF90dXBsZXMsIGludCB1c2VkX2JpdHMpOworc3RhdGljIE1pbmltYWxUdXBsZSBoYXNoYWdn X2JhdGNoX3JlYWQoSGFzaEFnZ0JhdGNoICpiYXRjaCwgdWludDMyICpoYXNocCk7CitzdGF0aWMg dm9pZCBoYXNoYWdnX3NwaWxsX2luaXQoSGFzaEFnZ1NwaWxsICpzcGlsbCwgSGFzaFRhcGVJbmZv ICp0YXBlaW5mbywKKwkJCQkJCQkgICBpbnQgdXNlZF9iaXRzLCB1aW50NjQgaW5wdXRfdHVwbGVz LAorCQkJCQkJCSAgIGRvdWJsZSBoYXNoZW50cnlzaXplKTsKK3N0YXRpYyBTaXplIGhhc2hhZ2df c3BpbGxfdHVwbGUoSGFzaEFnZ1NwaWxsICpzcGlsbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJ CQkJCQkJCXVpbnQzMiBoYXNoKTsKK3N0YXRpYyB2b2lkIGhhc2hhZ2dfc3BpbGxfZmluaXNoKEFn Z1N0YXRlICphZ2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwKKwkJCQkJCQkJIGludCBzZXRu byk7CitzdGF0aWMgdm9pZCBoYXNoYWdnX3RhcGVpbmZvX2Fzc2lnbihIYXNoVGFwZUluZm8gKnRh cGVpbmZvLCBpbnQgKmRlc3QsCisJCQkJCQkJCQlpbnQgbmRlc3QpOworc3RhdGljIHZvaWQgaGFz aGFnZ190YXBlaW5mb19yZWxlYXNlKEhhc2hUYXBlSW5mbyAqdGFwZWluZm8sIGludCB0YXBlbnVt KTsKKwogc3RhdGljIERhdHVtIEdldEFnZ0luaXRWYWwoRGF0dW0gdGV4dEluaXRWYWwsIE9pZCB0 cmFuc3R5cGUpOwogc3RhdGljIHZvaWQgYnVpbGRfcGVydHJhbnNfZm9yX2FnZ3JlZihBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAogCQkJCQkJCQkJICBBZ2dTdGF0ZSAqYWdnc3RhdGUsIEVTdGF0 ZSAqZXN0YXRlLApAQCAtMTIzMyw3ICsxMzgwLDcgQEAgZmluZF91bmFnZ3JlZ2F0ZWRfY29sc193 YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICoqY29sbm9zKQogfQogCiAvKgotICogKFJlLSlp bml0aWFsaXplIHRoZSBoYXNoIHRhYmxlKHMpIHRvIGVtcHR5LgorICogSW5pdGlhbGl6ZSB0aGUg aGFzaCB0YWJsZShzKS4KICAqCiAgKiBUbyBpbXBsZW1lbnQgaGFzaGVkIGFnZ3JlZ2F0aW9uLCB3 ZSBuZWVkIGEgaGFzaHRhYmxlIHRoYXQgc3RvcmVzIGEKICAqIHJlcHJlc2VudGF0aXZlIHR1cGxl IGFuZCBhbiBhcnJheSBvZiBBZ2dTdGF0ZVBlckdyb3VwIHN0cnVjdHMgZm9yIGVhY2gKQEAgLTEy NDQsNDQgKzEzOTEsNzkgQEAgZmluZF91bmFnZ3JlZ2F0ZWRfY29sc193YWxrZXIoTm9kZSAqbm9k ZSwgQml0bWFwc2V0ICoqY29sbm9zKQogICogV2UgaGF2ZSBhIHNlcGFyYXRlIGhhc2h0YWJsZSBh bmQgYXNzb2NpYXRlZCBwZXJoYXNoIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoCiAgKiBncm91cGlu ZyBzZXQgZm9yIHdoaWNoIHdlJ3JlIGRvaW5nIGhhc2hpbmcuCiAgKgotICogVGhlIGNvbnRlbnRz IG9mIHRoZSBoYXNoIHRhYmxlcyBhbHdheXMgbGl2ZSBpbiB0aGUgaGFzaGNvbnRleHQncyBwZXIt dHVwbGUKLSAqIG1lbW9yeSBjb250ZXh0ICh0aGVyZSBpcyBvbmx5IG9uZSBvZiB0aGVzZSBmb3Ig YWxsIHRhYmxlcyB0b2dldGhlciwgc2luY2UKLSAqIHRoZXkgYXJlIGFsbCByZXNldCBhdCB0aGUg c2FtZSB0aW1lKS4KKyAqIFRoZSBoYXNoIHRhYmxlcyBhbmQgdGhlaXIgY29udGVudHMgYWx3YXlz IGxpdmUgaW4gdGhlIGhhc2hjb250ZXh0J3MKKyAqIHBlci10dXBsZSBtZW1vcnkgY29udGV4dCAo dGhlcmUgaXMgb25seSBvbmUgb2YgdGhlc2UgZm9yIGFsbCB0YWJsZXMKKyAqIHRvZ2V0aGVyLCBz aW5jZSB0aGV5IGFyZSBhbGwgcmVzZXQgYXQgdGhlIHNhbWUgdGltZSkuCiAgKi8KIHN0YXRpYyB2 b2lkCi1idWlsZF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK2J1aWxkX2hhc2hfdGFi bGVzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIHsKLQlNZW1vcnlDb250ZXh0IHRtcG1lbSA9IGFnZ3N0 YXRlLT50bXBjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnk7Ci0JU2l6ZQkJYWRkaXRpb25h bHNpemU7Ci0JaW50CQkJaTsKLQotCUFzc2VydChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdH X0hBU0hFRCB8fCBhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEKTsKLQotCWFkZGl0 aW9uYWxzaXplID0gYWdnc3RhdGUtPm51bXRyYW5zICogc2l6ZW9mKEFnZ1N0YXRlUGVyR3JvdXBE YXRhKTsKKwlpbnQJCQkJc2V0bm87CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWdnc3RhdGUtPm51bV9o YXNoZXM7ICsraSkKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hhc2hl czsgKytzZXRubykKIAl7Ci0JCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0YXRlLT5w ZXJoYXNoW2ldOworCQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFz aFtzZXRub107CisJCWxvbmcJCQluYnVja2V0czsKKwkJU2l6ZQkJCW1lbW9yeTsKIAogCQlBc3Nl cnQocGVyaGFzaC0+YWdnbm9kZS0+bnVtR3JvdXBzID4gMCk7CiAKLQkJaWYgKHBlcmhhc2gtPmhh c2h0YWJsZSkKLQkJCVJlc2V0VHVwbGVIYXNoVGFibGUocGVyaGFzaC0+aGFzaHRhYmxlKTsKLQkJ ZWxzZQotCQkJcGVyaGFzaC0+aGFzaHRhYmxlID0gQnVpbGRUdXBsZUhhc2hUYWJsZUV4dCgmYWdn c3RhdGUtPnNzLnBzLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5oYXNoc2xvdC0+dHRzX3R1cGxl RGVzY3JpcHRvciwKLQkJCQkJCQkJCQkJCQkJcGVyaGFzaC0+bnVtQ29scywKLQkJCQkJCQkJCQkJ CQkJcGVyaGFzaC0+aGFzaEdycENvbElkeEhhc2gsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmVx ZnVuY29pZHMsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmhhc2hmdW5jdGlvbnMsCi0JCQkJCQkJ CQkJCQkJCXBlcmhhc2gtPmFnZ25vZGUtPmdycENvbGxhdGlvbnMsCi0JCQkJCQkJCQkJCQkJCXBl cmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwcywKLQkJCQkJCQkJCQkJCQkJYWRkaXRpb25hbHNpemUs Ci0JCQkJCQkJCQkJCQkJCWFnZ3N0YXRlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVlcnlfY3h0LAotCQkJ CQkJCQkJCQkJCQlhZ2dzdGF0ZS0+aGFzaGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSwK LQkJCQkJCQkJCQkJCQkJdG1wbWVtLAotCQkJCQkJCQkJCQkJCQlET19BR0dTUExJVF9TS0lQRklO QUwoYWdnc3RhdGUtPmFnZ3NwbGl0KSk7CisJCW1lbW9yeSA9IGFnZ3N0YXRlLT5oYXNoX21lbV9s aW1pdCAvIGFnZ3N0YXRlLT5udW1faGFzaGVzOworCisJCS8qIGNob29zZSByZWFzb25hYmxlIG51 bWJlciBvZiBidWNrZXRzIHBlciBoYXNodGFibGUgKi8KKwkJbmJ1Y2tldHMgPSBoYXNoX2Nob29z ZV9udW1fYnVja2V0cygKKwkJCWFnZ3N0YXRlLCBwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHMs IG1lbW9yeSk7CisKKwkJYnVpbGRfaGFzaF90YWJsZShhZ2dzdGF0ZSwgc2V0bm8sIG5idWNrZXRz KTsKIAl9CisKKwlhZ2dzdGF0ZS0+aGFzaF9hbGxvY19jdXJyZW50ID0gTWVtb3J5Q29udGV4dE1l bUFsbG9jYXRlZCgKKwkJYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1v cnksIHRydWUpOworCWFnZ3N0YXRlLT5oYXNoX2FsbG9jX2xhc3QgPSBhZ2dzdGF0ZS0+aGFzaF9h bGxvY19jdXJyZW50OworCWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA9IDA7Cit9CisK Ky8qCisgKiBCdWlsZCBhIHNpbmdsZSBoYXNodGFibGUgZm9yIHRoaXMgZ3JvdXBpbmcgc2V0LiBQ YXNzIHRoZSBoYXNoIG1lbW9yeQorICogY29udGV4dCBhcyBib3RoIG1ldGFjeHQgYW5kIHRhYmxl Y3h0LCBzbyB0aGF0IHJlc2V0dGluZyB0aGUgaGFzaGNvbnRleHQKKyAqIHdpbGwgZnJlZSBhbGwg bWVtb3J5IGluY2x1ZGluZyBtZXRhZGF0YS4gVGhhdCBtZWFucyB0aGF0IHdlIGNhbm5vdCByZXNl dAorICogdGhlIGhhc2ggdGFibGUgdG8gZW1wdHkgYW5kIHJldXNlIGl0LCB0aG91Z2ggKHNlZSBl eGVjR3JvdXBpbmcuYykuCisgKi8KK3N0YXRpYyB2b2lkCitidWlsZF9oYXNoX3RhYmxlKEFnZ1N0 YXRlICphZ2dzdGF0ZSwgaW50IHNldG5vLCBsb25nIG5idWNrZXRzKQoreworCVR1cGxlSGFzaFRh YmxlCXRhYmxlOworCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0YXRlLT5wZXJoYXNo W3NldG5vXTsKKwlNZW1vcnlDb250ZXh0CWhhc2htZW0gPSBhZ2dzdGF0ZS0+aGFzaGNvbnRleHQt PmVjeHRfcGVyX3R1cGxlX21lbW9yeTsKKwlNZW1vcnlDb250ZXh0CXRtcG1lbQk9IGFnZ3N0YXRl LT50bXBjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnk7CisJU2l6ZSAgICAgICAgICAgIGFk ZGl0aW9uYWxzaXplOworCisJQXNzZXJ0KGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFT SEVEIHx8CisJCSAgIGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlYRUQpOworCisJLyoK KwkgKiBVc2VkIHRvIG1ha2Ugc3VyZSBpbml0aWFsIGhhc2ggdGFibGUgYWxsb2NhdGlvbiBkb2Vz IG5vdCBleGNlZWQKKwkgKiB3b3JrX21lbS4gTm90ZSB0aGF0IHRoZSBlc3RpbWF0ZSBkb2VzIG5v dCBpbmNsdWRlIHNwYWNlIGZvcgorCSAqIHBhc3MtYnktcmVmZXJlbmNlIHRyYW5zaXRpb24gZGF0 YSB2YWx1ZXMsIG5vciBmb3IgdGhlIHJlcHJlc2VudGF0aXZlCisJICogdHVwbGUgb2YgZWFjaCBn cm91cC4KKwkgKi8KKwlhZGRpdGlvbmFsc2l6ZSA9IGFnZ3N0YXRlLT5udW10cmFucyAqIHNpemVv ZihBZ2dTdGF0ZVBlckdyb3VwRGF0YSk7CisKKwl0YWJsZSA9IEJ1aWxkVHVwbGVIYXNoVGFibGVF eHQoJmFnZ3N0YXRlLT5zcy5wcywKKwkJCQkJCQkJICAgcGVyaGFzaC0+aGFzaHNsb3QtPnR0c190 dXBsZURlc2NyaXB0b3IsCisJCQkJCQkJCSAgIHBlcmhhc2gtPm51bUNvbHMsCisJCQkJCQkJCSAg IHBlcmhhc2gtPmhhc2hHcnBDb2xJZHhIYXNoLAorCQkJCQkJCQkgICBwZXJoYXNoLT5lcWZ1bmNv aWRzLAorCQkJCQkJCQkgICBwZXJoYXNoLT5oYXNoZnVuY3Rpb25zLAorCQkJCQkJCQkgICBwZXJo YXNoLT5hZ2dub2RlLT5ncnBDb2xsYXRpb25zLAorCQkJCQkJCQkgICBuYnVja2V0cywKKwkJCQkJ CQkJICAgYWRkaXRpb25hbHNpemUsCisJCQkJCQkJCSAgIGhhc2htZW0sCisJCQkJCQkJCSAgIGhh c2htZW0sCisJCQkJCQkJCSAgIHRtcG1lbSwKKwkJCQkJCQkJICAgRE9fQUdHU1BMSVRfU0tJUEZJ TkFMKGFnZ3N0YXRlLT5hZ2dzcGxpdCkpOworCisJcGVyaGFzaC0+aGFzaHRhYmxlID0gdGFibGU7 CiB9CiAKIC8qCkBAIC0xNDIzLDQyICsxNjA1LDMxIEBAIGZpbmRfaGFzaF9jb2x1bW5zKEFnZ1N0 YXRlICphZ2dzdGF0ZSkKIAogLyoKICAqIEVzdGltYXRlIHBlci1oYXNoLXRhYmxlLWVudHJ5IG92 ZXJoZWFkIGZvciB0aGUgcGxhbm5lci4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGVzdGltYXRlIGRv ZXMgbm90IGluY2x1ZGUgc3BhY2UgZm9yIHBhc3MtYnktcmVmZXJlbmNlCi0gKiB0cmFuc2l0aW9u IGRhdGEgdmFsdWVzLCBub3IgZm9yIHRoZSByZXByZXNlbnRhdGl2ZSB0dXBsZSBvZiBlYWNoIGdy b3VwLgotICogTm9yIGRvZXMgdGhpcyBhY2NvdW50IG9mIHRoZSB0YXJnZXQgZmlsbC1mYWN0b3Ig YW5kIGdyb3d0aCBwb2xpY3kgb2YgdGhlCi0gKiBoYXNoIHRhYmxlLgogICovCiBTaXplCi1oYXNo X2FnZ19lbnRyeV9zaXplKGludCBudW1BZ2dzKQoraGFzaF9hZ2dfZW50cnlfc2l6ZShpbnQgbnVt QWdncywgU2l6ZSB0dXBsZVdpZHRoLCBTaXplIHRyYW5zaXRpb25TcGFjZSkKIHsKLQlTaXplCQll bnRyeXNpemU7Ci0KLQkvKiBUaGlzIG11c3QgbWF0Y2ggYnVpbGRfaGFzaF90YWJsZSAqLwotCWVu dHJ5c2l6ZSA9IHNpemVvZihUdXBsZUhhc2hFbnRyeURhdGEpICsKLQkJbnVtQWdncyAqIHNpemVv ZihBZ2dTdGF0ZVBlckdyb3VwRGF0YSk7Ci0JZW50cnlzaXplID0gTUFYQUxJR04oZW50cnlzaXpl KTsKLQotCXJldHVybiBlbnRyeXNpemU7CisJcmV0dXJuCisJCS8qIGtleSAqLworCQlNQVhBTElH TihTaXplb2ZNaW5pbWFsVHVwbGVIZWFkZXIpICsKKwkJTUFYQUxJR04odHVwbGVXaWR0aCkgKwor CQkvKiBkYXRhICovCisJCU1BWEFMSUdOKHNpemVvZihUdXBsZUhhc2hFbnRyeURhdGEpICsKKwkJ CQkgbnVtQWdncyAqIHNpemVvZihBZ2dTdGF0ZVBlckdyb3VwRGF0YSkpICsKKwkJdHJhbnNpdGlv blNwYWNlOwogfQogCiAvKgotICogRmluZCBvciBjcmVhdGUgYSBoYXNodGFibGUgZW50cnkgZm9y IHRoZSB0dXBsZSBncm91cCBjb250YWluaW5nIHRoZSBjdXJyZW50Ci0gKiB0dXBsZSAoYWxyZWFk eSBzZXQgaW4gdG1wY29udGV4dCdzIG91dGVydHVwbGUgc2xvdCksIGluIHRoZSBjdXJyZW50IGdy b3VwaW5nCi0gKiBzZXQgKHdoaWNoIHRoZSBjYWxsZXIgbXVzdCBoYXZlIHNlbGVjdGVkIC0gbm90 ZSB0aGF0IGluaXRpYWxpemVfYWdncmVnYXRlCi0gKiBkZXBlbmRzIG9uIHRoaXMpLgotICoKLSAq IFdoZW4gY2FsbGVkLCBDdXJyZW50TWVtb3J5Q29udGV4dCBzaG91bGQgYmUgdGhlIHBlci1xdWVy eSBjb250ZXh0LgorICogRXh0cmFjdCB0aGUgYXR0cmlidXRlcyB0aGF0IG1ha2UgdXAgdGhlIGdy b3VwaW5nIGtleSBpbnRvIHRoZQorICogaGFzaHNsb3QuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGNv bXB1dGUgdGhlIGhhc2ggb2YgdGhlIGdyb3VwaW5nIGtleS4KICAqLwotc3RhdGljIFR1cGxlSGFz aEVudHJ5RGF0YSAqCi1sb29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUpCitzdGF0 aWMgdm9pZAorcHJlcGFyZV9oYXNoX3Nsb3QoQWdnU3RhdGUgKmFnZ3N0YXRlKQogewotCVR1cGxl VGFibGVTbG90ICppbnB1dHNsb3QgPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9vdXRlcnR1 cGxlOwotCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0YXRlLT5wZXJoYXNoW2FnZ3N0 YXRlLT5jdXJyZW50X3NldF07Ci0JVHVwbGVUYWJsZVNsb3QgKmhhc2hzbG90ID0gcGVyaGFzaC0+ aGFzaHNsb3Q7Ci0JVHVwbGVIYXNoRW50cnlEYXRhICplbnRyeTsKLQlib29sCQlpc25ldzsKLQlp bnQJCQlpOworCVR1cGxlVGFibGVTbG90CSppbnB1dHNsb3QgPSBhZ2dzdGF0ZS0+dG1wY29udGV4 dC0+ZWN4dF9vdXRlcnR1cGxlOworCUFnZ1N0YXRlUGVySGFzaAkgcGVyaGFzaCAgID0gJmFnZ3N0 YXRlLT5wZXJoYXNoW2FnZ3N0YXRlLT5jdXJyZW50X3NldF07CisJVHVwbGVUYWJsZVNsb3QJKmhh c2hzbG90ICA9IHBlcmhhc2gtPmhhc2hzbG90OworCWludAkJCQkgaTsKIAogCS8qIHRyYW5zZmVy IGp1c3QgdGhlIG5lZWRlZCBjb2x1bW5zIGludG8gaGFzaHNsb3QgKi8KIAlzbG90X2dldHNvbWVh dHRycyhpbnB1dHNsb3QsIHBlcmhhc2gtPmxhcmdlc3RHcnBDb2xJZHgpOwpAQCAtMTQ3MiwxNCAr MTY0MywzMTMgQEAgbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQloYXNo c2xvdC0+dHRzX2lzbnVsbFtpXSA9IGlucHV0c2xvdC0+dHRzX2lzbnVsbFt2YXJOdW1iZXJdOwog CX0KIAlFeGVjU3RvcmVWaXJ0dWFsVHVwbGUoaGFzaHNsb3QpOworfQorCisvKgorICogUmVjb21w aWxlIHRoZSBleHByZXNzaW9ucyBmb3IgYWR2YW5jaW5nIGFnZ3JlZ2F0ZXMgd2hpbGUgaGFzaGlu Zy4gVGhpcyBpcworICogbmVjZXNzYXJ5IGZvciBjZXJ0YWluIGtpbmRzIG9mIHN0YXRlIGNoYW5n ZXMgdGhhdCBhZmZlY3QgdGhlIHJlc3VsdGluZworICogZXhwcmVzc2lvbi4gRm9yIGluc3RhbmNl LCBjaGFuZ2luZyBhZ2dzdGF0ZS0+aGFzaF9ldmVyX3NwaWxsZWQgb3IKKyAqIGFnZ3N0YXRlLT5z cy5wcy5vdXRlcm9wcyByZXF1aXJlcyByZWNvbXBpbGF0aW9uLgorICoKKyAqIEEgY29tcGlsZWQg ZXhwcmVzc2lvbiB3aGVyZSBoYXNoX2V2ZXJfc3BpbGxlZCBpcyB0cnVlIHdpbGwgd29yayBldmVu IHdoZW4KKyAqIGhhc2hfc3BpbGxfbW9kZSBpcyBmYWxzZSwgYmVjYXVzZSBpdCBtZXJlbHkgaW50 cm9kdWNlcyBhZGRpdGlvbmFsIGJyYW5jaGVzCisgKiB0aGF0IGFyZSB1bm5lY2Vzc2FyeSB3aGVu IGhhc2hfc3BpbGxfbW9kZSBpcyBmYWxzZS4gVGhhdCBhbGxvd3MgdXMgdG8gb25seQorICogcmVj b21waWxlIHdoZW4gaGFzaF9ldmVyX3NwaWxsZWQgY2hhbmdlcywgcmF0aGVyIHRoYW4gZXZlcnkg dGltZQorICogaGFzaF9zcGlsbF9tb2RlIGNoYW5nZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNo YWdnX3JlY29tcGlsZV9leHByZXNzaW9ucyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJQWdnU3Rh dGVQZXJQaGFzZSBwaGFzZTsKKworCUFzc2VydChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdH X0hBU0hFRCB8fAorCQkgICBhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEKTsKKwor CWlmIChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX0hBU0hFRCkKKwkJcGhhc2UgPSAmYWdn c3RhdGUtPnBoYXNlc1swXTsKKwllbHNlIC8qIEFHR19NSVhFRCAqLworCQlwaGFzZSA9ICZhZ2dz dGF0ZS0+cGhhc2VzWzFdOworCisJcGhhc2UtPmV2YWx0cmFucyA9IEV4ZWNCdWlsZEFnZ1RyYW5z KAorCQlhZ2dzdGF0ZSwgcGhhc2UsCisJCWFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlY RUQgPyB0cnVlIDogZmFsc2UsIC8qIGRvc29ydCAqLworCQl0cnVlLCAvKiBkb2hhc2ggKi8KKwkJ YWdnc3RhdGUtPmhhc2hfZXZlcl9zcGlsbGVkKTsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUg aGFzaCB2YWx1ZSBmb3IgYSB0dXBsZS4gSXQncyB1c2VmdWwgdG8gZG8gdGhpcyBvdXRzaWRlIG9m IHRoZQorICogaGFzaCB0YWJsZSBzbyB0aGF0IHdlIGNhbiByZXVzZSBzYXZlZCBoYXNoIHZhbHVl cyByYXRoZXIgdGhhbiByZWNvbXB1dGluZy4KKyAqLworc3RhdGljIHVpbnQzMgorY2FsY3VsYXRl X2hhc2goQWdnU3RhdGUgKmFnZ3N0YXRlKQoreworCUFnZ1N0YXRlUGVySGFzaAkgcGVyaGFzaCAg ID0gJmFnZ3N0YXRlLT5wZXJoYXNoW2FnZ3N0YXRlLT5jdXJyZW50X3NldF07CisJVHVwbGVIYXNo VGFibGUJIGhhc2h0YWJsZSA9IHBlcmhhc2gtPmhhc2h0YWJsZTsKKwlNZW1vcnlDb250ZXh0CSBv bGRDb250ZXh0OworCXVpbnQzMgkJCSBoYXNoOworCisJLyogc2V0IHVwIGRhdGEgbmVlZGVkIGJ5 IGhhc2ggYW5kIG1hdGNoIGZ1bmN0aW9ucyAqLworCWhhc2h0YWJsZS0+aW5wdXRzbG90ID0gcGVy aGFzaC0+aGFzaHNsb3Q7CisJaGFzaHRhYmxlLT5pbl9oYXNoX2Z1bmNzID0gaGFzaHRhYmxlLT50 YWJfaGFzaF9mdW5jczsKKwloYXNodGFibGUtPmN1cl9lcV9mdW5jID0gaGFzaHRhYmxlLT50YWJf ZXFfZnVuYzsKKworCS8qIE5lZWQgdG8gcnVuIHRoZSBoYXNoIGZ1bmN0aW9ucyBpbiBzaG9ydC1s aXZlZCBjb250ZXh0ICovCisJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNo dGFibGUtPnRlbXBjeHQpOworCisJaGFzaCA9IFR1cGxlSGFzaFRhYmxlSGFzaChoYXNodGFibGUt Pmhhc2h0YWIsIE5VTEwpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwor CisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBTZXQgbGltaXRzIHRoYXQgdHJpZ2dlciBzcGls bGluZyB0byBhdm9pZCBleGNlZWRpbmcgd29ya19tZW0uIENvbnNpZGVyIHRoZQorICogbnVtYmVy IG9mIHBhcnRpdGlvbnMgd2UgZXhwZWN0IHRvIGNyZWF0ZSAoaWYgd2UgZG8gc3BpbGwpLgorICoK KyAqIFRoZXJlIGFyZSB0d28gbGltaXRzOiBhIG1lbW9yeSBsaW1pdCwgYW5kIGFsc28gYW4gbmdy b3VwcyBsaW1pdC4gVGhlCisgKiBuZ3JvdXBzIGxpbWl0IGJlY29tZXMgaW1wb3J0YW50IHdoZW4g d2UgZXhwZWN0IHRyYW5zaXRpb24gdmFsdWVzIHRvIGdyb3cKKyAqIHN1YnN0YW50aWFsbHkgbGFy Z2VyIHRoYW4gdGhlIGluaXRpYWwgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3Nl dF9saW1pdHMoQWdnU3RhdGUgKmFnZ3N0YXRlLCB1aW50NjQgaW5wdXRfZ3JvdXBzLCBpbnQgdXNl ZF9iaXRzKQoreworCWludCBucGFydGl0aW9uczsKKwlTaXplIHBhcnRpdGlvbl9tZW07CisKKwkv KiBubyBhdHRlbXB0IHRvIG9iZXkgd29ya19tZW0gKi8KKwlpZiAoaGFzaGFnZ19tZW1fb3ZlcmZs b3cpCisJeworCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgPSBTSVpFX01BWDsKKwkJYWdnc3Rh dGUtPmhhc2hfbmdyb3Vwc19saW1pdCA9IExPTkdfTUFYOworCQlyZXR1cm47CisJfQorCisJLyog aWYgbm90IGV4cGVjdGVkIHRvIHNwaWxsLCB1c2UgYWxsIG9mIHdvcmtfbWVtICovCisJaWYgKGlu cHV0X2dyb3VwcyAqIGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplIDwgd29ya19tZW0gKiAxMDI0TCkK Kwl7CisJCWFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCA9IHdvcmtfbWVtICogMTAyNEw7CisJCWFn Z3N0YXRlLT5oYXNoX25ncm91cHNfbGltaXQgPQorCQkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0 IC8gYWdnc3RhdGUtPmhhc2hlbnRyeXNpemU7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENh bGN1bGF0ZSBleHBlY3RlZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBzcGlsbGluZywgd2hpY2gg aXMgdGhlIHNpemUKKwkgKiBvZiB0aGUgYnVmZmVycyBuZWVkZWQgZm9yIGFsbCB0aGUgdGFwZXMg dGhhdCBuZWVkIHRvIGJlIG9wZW4gYXQKKwkgKiBvbmNlLiBUaGVuLCBzdWJ0cmFjdCB0aGF0IGZy b20gdGhlIG1lbW9yeSBhdmFpbGFibGUgZm9yIGhvbGRpbmcgaGFzaAorCSAqIHRhYmxlcy4KKwkg Ki8KKwlucGFydGl0aW9ucyA9IGhhc2hfY2hvb3NlX251bV9wYXJ0aXRpb25zKGlucHV0X2dyb3Vw cywKKwkJCQkJCQkJCQkJIGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplLAorCQkJCQkJCQkJCQkgdXNl ZF9iaXRzLAorCQkJCQkJCQkJCQkgTlVMTCk7CisJcGFydGl0aW9uX21lbSA9CisJCUhBU0hBR0df UkVBRF9CVUZGRVJfU0laRSArCisJCUhBU0hBR0dfV1JJVEVfQlVGRkVSX1NJWkUgKiBucGFydGl0 aW9uczsKKworCS8qCisJICogRG9uJ3Qgc2V0IHRoZSBsaW1pdCBiZWxvdyAzLzQgb2Ygd29ya19t ZW0uIEluIHRoYXQgY2FzZSwgd2UgYXJlIGF0IHRoZQorCSAqIG1pbmltdW0gbnVtYmVyIG9mIHBh cnRpdGlvbnMsIHNvIHdlIGFyZW4ndCBnb2luZyB0byBkcmFtYXRpY2FsbHkgZXhjZWVkCisJICog d29yayBtZW0gYW55d2F5LgorCSAqLworCWlmICh3b3JrX21lbSAqIDEwMjRMID4gNCAqIHBhcnRp dGlvbl9tZW0pCisJCWFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCA9IHdvcmtfbWVtICogMTAyNEwg LSBwYXJ0aXRpb25fbWVtOworCWVsc2UKKwkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gd29y a19tZW0gKiAxMDI0TCAqIDAuNzU7CisKKwlpZiAoYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID4g YWdnc3RhdGUtPmhhc2hlbnRyeXNpemUpCisJCWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfbGltaXQg PQorCQkJCWFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCAvIGFnZ3N0YXRlLT5oYXNoZW50cnlzaXpl OworCWVsc2UKKwkJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19saW1pdCA9IDE7Cit9CisKKy8qCisg KiBoYXNoYWdnX2NoZWNrX2xpbWl0cworICoKKyAqIEFmdGVyIGFkZGluZyBhIG5ldyBncm91cCB0 byB0aGUgaGFzaCB0YWJsZSwgY2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIGVudGVyCisgKiBzcGls bCBtb2RlLiBBbGxvY2F0aW9ucyBtYXkgaGFwcGVuIHdpdGhvdXQgYWRkaW5nIG5ldyBncm91cHMg KGZvciBpbnN0YW5jZSwKKyAqIGlmIHRoZSB0cmFuc2l0aW9uIHN0YXRlIHNpemUgZ3Jvd3MpLCBz byB0aGlzIGNoZWNrIGlzIGltcGVyZmVjdC4KKyAqCisgKiBNZW1vcnkgdXNhZ2UgaXMgdHJhY2tl ZCBieSBob3cgbXVjaCBpcyBhbGxvY2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgbWVtb3J5CisgKiBj b250ZXh0LCBub3QgaW5kaXZpZHVhbCBjaHVua3MuIFRoaXMgaXMgbW9yZSBhY2N1cmF0ZSBiZWNh dXNlIGl0IGFjY291bnRzCisgKiBmb3IgYWxsIG1lbW9yeSBpbiB0aGUgY29udGV4dCwgYW5kIGFs c28gYWNjb3VudHMgZm9yIGZyYWdtZW50YXRpb24gYW5kCisgKiBvdGhlciBmb3JtcyBvZiBvdmVy aGVhZCBhbmQgd2FzdGUgdGhhdCBjYW4gYmUgZGlmZmljdWx0IHRvIGVzdGltYXRlLiBJdCdzCisg KiBhbHNvIGNoZWFwZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHRyYWNrIGVhY2ggY2h1bmsu CisgKgorICogV2hlbiBtZW1vcnkgaXMgZmlyc3QgYWxsb2NhdGVkIHRvIGEgbWVtb3J5IGNvbnRl eHQsIGl0IGlzIG5vdCBhY3R1YWxseQorICogdXNlZC4gU28gd2hlbiB0aGUgbmV4dCBhbGxvY2F0 aW9uIGhhcHBlbnMsIHdlIGNvbnNpZGVyIHRoZQorICogcHJldmlvdXNseS1hbGxvY2F0ZWQgYW1v dW50IHRvIGJlIHRoZSBtZW1vcnkgY3VycmVudGx5IHVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCito YXNoYWdnX2NoZWNrX2xpbWl0cyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJU2l6ZSBhbGxvY2F0 aW9uOworCisJLyoKKwkgKiBFdmVuIGlmIGFscmVhZHkgaW4gc3BpbGwgbW9kZSwgaXQncyBwb3Nz aWJsZSBmb3IgbWVtb3J5IHVzYWdlIHRvIGdyb3csCisJICogYW5kIHdlIHNob3VsZCBzdGlsbCB0 cmFjayBpdCBmb3IgdGhlIHB1cnBvc2VzIG9mIEVYUExBSU4gQU5BTFlaRS4KKwkgKi8KKwlhbGxv Y2F0aW9uID0gTWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZCgKKwkJYWdnc3RhdGUtPmhhc2hjb250 ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnksIHRydWUpOworCisJLyogaGFzIGFsbG9jYXRpb24g Z3Jvd24gc2luY2UgdGhlIGxhc3Qgb2JzZXJ2YXRpb24/ICovCisJaWYgKGFsbG9jYXRpb24gPiBh Z2dzdGF0ZS0+aGFzaF9hbGxvY19jdXJyZW50KQorCXsKKwkJYWdnc3RhdGUtPmhhc2hfYWxsb2Nf bGFzdCA9IGFnZ3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJlbnQ7CisJCWFnZ3N0YXRlLT5oYXNoX2Fs bG9jX2N1cnJlbnQgPSBhbGxvY2F0aW9uOworCX0KKworCWlmIChhZ2dzdGF0ZS0+aGFzaF9hbGxv Y19sYXN0ID4gYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWspCisJCWFnZ3N0YXRlLT5oYXNoX21lbV9w ZWFrID0gYWdnc3RhdGUtPmhhc2hfYWxsb2NfbGFzdDsKKworCS8qCisJICogRG9uJ3Qgc3BpbGwg dW5sZXNzIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGdyb3VwIGluIHRoZSBoYXNoIHRhYmxlIHNvIHdl CisJICogY2FuIGJlIHN1cmUgdG8gbWFrZSBwcm9ncmVzcyBldmVuIGluIGVkZ2UgY2FzZXMuCisJ ICovCisJaWYgKGFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA+IDAgJiYKKwkJKGFnZ3N0 YXRlLT5oYXNoX2FsbG9jX2xhc3QgICAgICA+IGFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCB8fAor CQkgYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID4gYWdnc3RhdGUtPmhhc2hfbmdyb3Vw c19saW1pdCkpCisJeworCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbF9tb2RlID0gdHJ1ZTsKKworCQlp ZiAoIWFnZ3N0YXRlLT5oYXNoX2V2ZXJfc3BpbGxlZCkKKwkJeworCQkJYWdnc3RhdGUtPmhhc2hf ZXZlcl9zcGlsbGVkID0gdHJ1ZTsKKwkJCWFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9IHBhbGxvYzAo CisJCQkJc2l6ZW9mKEhhc2hBZ2dTcGlsbCkgKiBhZ2dzdGF0ZS0+bnVtX2hhc2hlcyk7CisJCQlh Z2dzdGF0ZS0+aGFzaF90YXBlaW5mbyA9IHBhbGxvYzAoc2l6ZW9mKEhhc2hUYXBlSW5mbykpOwor CQkJaGFzaGFnZ19yZWNvbXBpbGVfZXhwcmVzc2lvbnMoYWdnc3RhdGUpOworCQl9CisJfQorfQor CisvKgorICogQ2hvb3NlIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgYnVja2V0cyBmb3IgdGhlIGlu aXRpYWwgaGFzaCB0YWJsZSBzaXplLgorICovCitzdGF0aWMgbG9uZworaGFzaF9jaG9vc2VfbnVt X2J1Y2tldHMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBsb25nIG5ncm91cHMsIFNpemUgbWVtb3J5KQor eworCWxvbmcJbWF4X25idWNrZXRzOworCWludAkJbG9nMl9uZ3JvdXBzOworCWxvbmcJbmJ1Y2tl dHM7CisKKwltYXhfbmJ1Y2tldHMgPSBtZW1vcnkgLyBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZTsK KworCS8qCisJICogTGVhdmUgcm9vbSBmb3Igc2xvcCB0byBhdm9pZCBhIGNhc2Ugd2hlcmUgdGhl IGluaXRpYWwgaGFzaCB0YWJsZSBzaXplCisJICogZXhjZWVkcyB0aGUgbWVtb3J5IGxpbWl0ICh0 aG91Z2ggdGhhdCBtYXkgc3RpbGwgaGFwcGVuIGluIGVkZ2UgY2FzZXMpLgorCSAqLworCW1heF9u YnVja2V0cyAqPSAwLjc1OworCisJLyoKKwkgKiBMb3dlc3QgcG93ZXIgb2YgdHdvIGdyZWF0ZXIg dGhhbiBuZ3JvdXBzLCB3aXRob3V0IGV4Y2VlZGluZworCSAqIG1heF9uYnVja2V0cy4KKwkgKi8K Kwlmb3IgKGxvZzJfbmdyb3VwcyA9IDEsIG5idWNrZXRzID0gMjsKKwkJIG5idWNrZXRzIDwgbmdy b3VwcyAmJiBuYnVja2V0cyA8IG1heF9uYnVja2V0czsKKwkJIGxvZzJfbmdyb3VwcysrLCBuYnVj a2V0cyA8PD0gMSk7CisKKwlpZiAobmJ1Y2tldHMgPiBtYXhfbmJ1Y2tldHMgJiYgbmJ1Y2tldHMg PiAyKQorCQluYnVja2V0cyA+Pj0gMTsKKworCXJldHVybiBuYnVja2V0czsKK30KKworLyoKKyAq IERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgdG8gY3JlYXRlIHdoZW4gc3BpbGxp bmcsIHdoaWNoIHdpbGwKKyAqIGFsd2F5cyBiZSBhIHBvd2VyIG9mIHR3by4gSWYgbG9nMl9ucGFy dGl0aW9ucyBpcyBub24tTlVMTCwgc2V0CisgKiAqbG9nMl9ucGFydGl0aW9ucyB0byB0aGUgbG9n MigpIG9mIHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucy4KKyAqLworc3RhdGljIGludAoraGFzaF9j aG9vc2VfbnVtX3BhcnRpdGlvbnModWludDY0IGlucHV0X2dyb3VwcywgZG91YmxlIGhhc2hlbnRy eXNpemUsCisJCQkJCQkgICBpbnQgdXNlZF9iaXRzLCBpbnQgKmxvZzJfbnBhcnRpdGlvbnMpCit7 CisJU2l6ZQltZW1fd2FudGVkOworCWludAkJcGFydGl0aW9uX2xpbWl0OworCWludAkJbnBhcnRp dGlvbnM7CisJaW50CQlwYXJ0aXRpb25fYml0czsKKworCS8qCisJICogQXZvaWQgY3JlYXRpbmcg c28gbWFueSBwYXJ0aXRpb25zIHRoYXQgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgb2YgdGhlCisJ ICogb3BlbiBwYXJ0aXRpb24gZmlsZXMgKGVzdGltYXRlZCBhdCBCTENLU1ogZm9yIGJ1ZmZlcmlu ZykgYXJlIGdyZWF0ZXIKKwkgKiB0aGFuIDEvNCBvZiB3b3JrX21lbS4KKwkgKi8KKwlwYXJ0aXRp b25fbGltaXQgPQorCQkod29ya19tZW0gKiAxMDI0TCAqIDAuMjUgLSBIQVNIQUdHX1JFQURfQlVG RkVSX1NJWkUpIC8KKwkJSEFTSEFHR19XUklURV9CVUZGRVJfU0laRTsKKworCS8qIHBlc3NpbWlz dGljYWxseSBlc3RpbWF0ZSB0aGF0IGVhY2ggaW5wdXQgdHVwbGUgY3JlYXRlcyBhIG5ldyBncm91 cCAqLworCW1lbV93YW50ZWQgPSBIQVNIQUdHX1BBUlRJVElPTl9GQUNUT1IgKiBpbnB1dF9ncm91 cHMgKiBoYXNoZW50cnlzaXplOworCisJLyogbWFrZSBlbm91Z2ggcGFydGl0aW9ucyBzbyB0aGF0 IGVhY2ggb25lIGlzIGxpa2VseSB0byBmaXQgaW4gbWVtb3J5ICovCisJbnBhcnRpdGlvbnMgPSAx ICsgKG1lbV93YW50ZWQgLyAod29ya19tZW0gKiAxMDI0TCkpOworCisJaWYgKG5wYXJ0aXRpb25z ID4gcGFydGl0aW9uX2xpbWl0KQorCQlucGFydGl0aW9ucyA9IHBhcnRpdGlvbl9saW1pdDsKKwor CWlmIChucGFydGl0aW9ucyA8IEhBU0hBR0dfTUlOX1BBUlRJVElPTlMpCisJCW5wYXJ0aXRpb25z ID0gSEFTSEFHR19NSU5fUEFSVElUSU9OUzsKKwlpZiAobnBhcnRpdGlvbnMgPiBIQVNIQUdHX01B WF9QQVJUSVRJT05TKQorCQlucGFydGl0aW9ucyA9IEhBU0hBR0dfTUFYX1BBUlRJVElPTlM7CisK KwkvKiBjZWlsKGxvZzIobnBhcnRpdGlvbnMpKSAqLworCXBhcnRpdGlvbl9iaXRzID0gbXlfbG9n MihucGFydGl0aW9ucyk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBleGhhdXN0IHRo ZSBoYXNoIGJpdHMgKi8KKwlpZiAocGFydGl0aW9uX2JpdHMgKyB1c2VkX2JpdHMgPj0gMzIpCisJ CXBhcnRpdGlvbl9iaXRzID0gMzIgLSB1c2VkX2JpdHM7CisKKwlpZiAobG9nMl9ucGFydGl0aW9u cyAhPSBOVUxMKQorCQkqbG9nMl9ucGFydGl0aW9ucyA9IHBhcnRpdGlvbl9iaXRzOworCisJLyog bnVtYmVyIG9mIHBhcnRpdGlvbnMgd2lsbCBiZSBhIHBvd2VyIG9mIHR3byAqLworCW5wYXJ0aXRp b25zID0gMUwgPDwgcGFydGl0aW9uX2JpdHM7CisKKwlyZXR1cm4gbnBhcnRpdGlvbnM7Cit9CisK Ky8qCisgKiBGaW5kIG9yIGNyZWF0ZSBhIGhhc2h0YWJsZSBlbnRyeSBmb3IgdGhlIHR1cGxlIGdy b3VwIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQKKyAqIHR1cGxlIChhbHJlYWR5IHNldCBpbiB0bXBj b250ZXh0J3Mgb3V0ZXJ0dXBsZSBzbG90KSwgaW4gdGhlIGN1cnJlbnQgZ3JvdXBpbmcKKyAqIHNl dCAod2hpY2ggdGhlIGNhbGxlciBtdXN0IGhhdmUgc2VsZWN0ZWQgLSBub3RlIHRoYXQgaW5pdGlh bGl6ZV9hZ2dyZWdhdGUKKyAqIGRlcGVuZHMgb24gdGhpcykuCisgKgorICogV2hlbiBjYWxsZWQs IEN1cnJlbnRNZW1vcnlDb250ZXh0IHNob3VsZCBiZSB0aGUgcGVyLXF1ZXJ5IGNvbnRleHQuCisg KgorICogSWYgdGhlIGhhc2ggdGFibGUgaXMgYXQgdGhlIG1lbW9yeSBsaW1pdCwgdGhlbiBvbmx5 IGZpbmQgZXhpc3RpbmcgaGFzaHRhYmxlCisgKiBlbnRyaWVzOyBkb24ndCBjcmVhdGUgbmV3IG9u ZXMuIElmIGEgdHVwbGUncyBncm91cCBpcyBub3QgYWxyZWFkeSBwcmVzZW50CisgKiBpbiB0aGUg aGFzaCB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgZ3JvdXBpbmcgc2V0LCByZXR1cm4gTlVMTCBhbmQg dGhlIGNhbGxlcgorICogd2lsbCBzcGlsbCBpdCB0byBkaXNrLgorICovCitzdGF0aWMgQWdnU3Rh dGVQZXJHcm91cAorbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlLCB1aW50MzIg aGFzaCkKK3sKKwlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFth Z2dzdGF0ZS0+Y3VycmVudF9zZXRdOworCVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhh c2gtPmhhc2hzbG90OworCVR1cGxlSGFzaEVudHJ5RGF0YSAqZW50cnk7CisJYm9vbAkJaXNuZXcg PSBmYWxzZTsKKwlib29sCSAgICpwX2lzbmV3OworCisJLyogaWYgaGFzaCB0YWJsZSBhbHJlYWR5 IHNwaWxsZWQsIGRvbid0IGNyZWF0ZSBuZXcgZW50cmllcyAqLworCXBfaXNuZXcgPSBhZ2dzdGF0 ZS0+aGFzaF9zcGlsbF9tb2RlID8gTlVMTCA6ICZpc25ldzsKIAogCS8qIGZpbmQgb3IgY3JlYXRl IHRoZSBoYXNodGFibGUgZW50cnkgdXNpbmcgdGhlIGZpbHRlcmVkIHR1cGxlICovCi0JZW50cnkg PSBMb29rdXBUdXBsZUhhc2hFbnRyeShwZXJoYXNoLT5oYXNodGFibGUsIGhhc2hzbG90LCAmaXNu ZXcpOworCWVudHJ5ID0gTG9va3VwVHVwbGVIYXNoRW50cnlIYXNoKHBlcmhhc2gtPmhhc2h0YWJs ZSwgaGFzaHNsb3QsIHBfaXNuZXcsCisJCQkJCQkJCQkgaGFzaCk7CisKKwlpZiAoZW50cnkgPT0g TlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoaXNuZXcpCiAJewotCQlBZ2dTdGF0ZVBlckdy b3VwIHBlcmdyb3VwOwotCQlpbnQJCQl0cmFuc25vOworCQlBZ2dTdGF0ZVBlckdyb3VwCXBlcmdy b3VwOworCQlpbnQJCQkJCXRyYW5zbm87CisKKwkJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJy ZW50Kys7CisJCWhhc2hhZ2dfY2hlY2tfbGltaXRzKGFnZ3N0YXRlKTsKIAogCQlwZXJncm91cCA9 IChBZ2dTdGF0ZVBlckdyb3VwKQogCQkJTWVtb3J5Q29udGV4dEFsbG9jKHBlcmhhc2gtPmhhc2h0 YWJsZS0+dGFibGVjeHQsCkBAIC0xNDk5LDcgKzE5NjksNyBAQCBsb29rdXBfaGFzaF9lbnRyeShB Z2dTdGF0ZSAqYWdnc3RhdGUpCiAJCX0KIAl9CiAKLQlyZXR1cm4gZW50cnk7CisJcmV0dXJuIGVu dHJ5LT5hZGRpdGlvbmFsOwogfQogCiAvKgpAQCAtMTUwNywxOCArMTk3Nyw1MSBAQCBsb29rdXBf aGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAgKiByZXR1cm5pbmcgYW4gYXJyYXkgb2Yg cGVyZ3JvdXAgcG9pbnRlcnMgc3VpdGFibGUgZm9yIGFkdmFuY2VfYWdncmVnYXRlcy4KICAqCiAg KiBCZSBhd2FyZSB0aGF0IGxvb2t1cF9oYXNoX2VudHJ5IGNhbiByZXNldCB0aGUgdG1wY29udGV4 dC4KKyAqCisgKiBTb21lIGVudHJpZXMgbWF5IGJlIGxlZnQgTlVMTCBpZiB3ZSBoYXZlIHJlYWNo ZWQgdGhlIGxpbWl0IGFuZCBoYXZlIGJlZ3VuCisgKiB0byBzcGlsbC4gVGhlIHNhbWUgdHVwbGUg d2lsbCBiZWxvbmcgdG8gZGlmZmVyZW50IGdyb3VwcyBmb3IgZWFjaCBzZXQsIHNvCisgKiBtYXkg bWF0Y2ggYSBncm91cCBhbHJlYWR5IGluIG1lbW9yeSBmb3Igb25lIHNldCBhbmQgbWF0Y2ggYSBn cm91cCBub3QgaW4KKyAqIG1lbW9yeSBmb3IgYW5vdGhlciBzZXQuIElmIHdlIGhhdmUgYmVndW4g dG8gc3BpbGwgYW5kIGEgdHVwbGUgZG9lc24ndCBtYXRjaAorICogYSBncm91cCBpbiBtZW1vcnkg Zm9yIGEgcGFydGljdWxhciBzZXQsIGl0IHdpbGwgYmUgc3BpbGxlZC4KKyAqCisgKiBOQjogSXQn cyBwb3NzaWJsZSB0byBzcGlsbCB0aGUgc2FtZSB0dXBsZSBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQg Z3JvdXBpbmcKKyAqIHNldHMuIFRoaXMgbWF5IHNlZW0gd2FzdGVmdWwsIGJ1dCBpdCdzIGFjdHVh bGx5IGEgdHJhZGUtb2ZmOiBpZiB3ZSBzcGlsbAorICogdGhlIHR1cGxlIG11bHRpcGxlIHRpbWVz IGZvciBtdWx0aXBsZSBncm91cGluZyBzZXRzLCBpdCBjYW4gYmUgcGFydGl0aW9uZWQKKyAqIGZv ciBlYWNoIGdyb3VwaW5nIHNldCwgbWFraW5nIHRoZSByZWZpbGxpbmcgb2YgdGhlIGhhc2ggdGFi bGUgdmVyeQorICogZWZmaWNpZW50LgogICovCiBzdGF0aWMgdm9pZAogbG9va3VwX2hhc2hfZW50 cmllcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7Ci0JaW50CQkJbnVtSGFzaGVzID0gYWdnc3RhdGUt Pm51bV9oYXNoZXM7CiAJQWdnU3RhdGVQZXJHcm91cCAqcGVyZ3JvdXAgPSBhZ2dzdGF0ZS0+aGFz aF9wZXJncm91cDsKIAlpbnQJCQlzZXRubzsKIAotCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8IG51 bUhhc2hlczsgc2V0bm8rKykKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVt X2hhc2hlczsgc2V0bm8rKykKIAl7CisJCXVpbnQzMgkJCWhhc2g7CisKIAkJc2VsZWN0X2N1cnJl bnRfc2V0KGFnZ3N0YXRlLCBzZXRubywgdHJ1ZSk7Ci0JCXBlcmdyb3VwW3NldG5vXSA9IGxvb2t1 cF9oYXNoX2VudHJ5KGFnZ3N0YXRlKS0+YWRkaXRpb25hbDsKKwkJcHJlcGFyZV9oYXNoX3Nsb3Qo YWdnc3RhdGUpOworCQloYXNoID0gY2FsY3VsYXRlX2hhc2goYWdnc3RhdGUpOworCQlwZXJncm91 cFtzZXRub10gPSBsb29rdXBfaGFzaF9lbnRyeShhZ2dzdGF0ZSwgaGFzaCk7CisKKwkJLyogY2hl Y2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gc3BpbGwgdGhlIHR1cGxlIGZvciB0aGlzIGdyb3VwaW5n IHNldCAqLworCQlpZiAocGVyZ3JvdXBbc2V0bm9dID09IE5VTEwpCisJCXsKKwkJCUFnZ1N0YXRl UGVySGFzaAkgcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFtzZXRub107CisJCQlIYXNoQWdn U3BpbGwJKnNwaWxsCSA9ICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dOworCQkJVHVwbGVU YWJsZVNsb3QJKnNsb3QJID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsK KworCQkJaWYgKHNwaWxsLT5wYXJ0aXRpb25zID09IE5VTEwpCisJCQkJaGFzaGFnZ19zcGlsbF9p bml0KHNwaWxsLCBhZ2dzdGF0ZS0+aGFzaF90YXBlaW5mbywgMCwKKwkJCQkJCQkJICAgcGVyaGFz aC0+YWdnbm9kZS0+bnVtR3JvdXBzLAorCQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6 ZSk7CisKKwkJCWhhc2hhZ2dfc3BpbGxfdHVwbGUoc3BpbGwsIHNsb3QsIGhhc2gpOworCisJCQlh Z2dzdGF0ZS0+aGFzaF9kaXNrX3VzZWQgPSBMb2dpY2FsVGFwZVNldEJsb2NrcygKKwkJCQlhZ2dz dGF0ZS0+aGFzaF90YXBlaW5mby0+dGFwZXNldCkgKiAoQkxDS1NaIC8gMTAyNCk7CisJCX0KIAl9 CiB9CiAKQEAgLTE4NDEsNiArMjM0NCwxMiBAQCBhZ2dfcmV0cmlldmVfZGlyZWN0KEFnZ1N0YXRl ICphZ2dzdGF0ZSkKIAkJCQkJaWYgKFR1cElzTnVsbChvdXRlcnNsb3QpKQogCQkJCQl7CiAJCQkJ CQkvKiBubyBtb3JlIG91dGVyLXBsYW4gdHVwbGVzIGF2YWlsYWJsZSAqLworCisJCQkJCQkvKiBp ZiB3ZSBidWlsdCBoYXNoIHRhYmxlcywgZmluYWxpemUgYW55IHNwaWxscyAqLworCQkJCQkJaWYg KGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlYRUQgJiYKKwkJCQkJCQlhZ2dzdGF0ZS0+ Y3VycmVudF9waGFzZSA9PSAxKQorCQkJCQkJCWhhc2hhZ2dfZmluaXNoX2luaXRpYWxfc3BpbGxz KGFnZ3N0YXRlKTsKKwogCQkJCQkJaWYgKGhhc0dyb3VwaW5nU2V0cykKIAkJCQkJCXsKIAkJCQkJ CQlhZ2dzdGF0ZS0+aW5wdXRfZG9uZSA9IHRydWU7CkBAIC0xOTQzLDYgKzI0NTIsOSBAQCBhZ2df ZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJUmVzZXRFeHByQ29udGV4dChh Z2dzdGF0ZS0+dG1wY29udGV4dCk7CiAJfQogCisJLyogZmluYWxpemUgc3BpbGxzLCBpZiBhbnkg Ki8KKwloYXNoYWdnX2ZpbmlzaF9pbml0aWFsX3NwaWxscyhhZ2dzdGF0ZSk7CisKIAlhZ2dzdGF0 ZS0+dGFibGVfZmlsbGVkID0gdHJ1ZTsKIAkvKiBJbml0aWFsaXplIHRvIHdhbGsgdGhlIGZpcnN0 IGhhc2ggdGFibGUgKi8KIAlzZWxlY3RfY3VycmVudF9zZXQoYWdnc3RhdGUsIDAsIHRydWUpOwpA QCAtMTk1MCwxMSArMjQ2MiwxOTEgQEAgYWdnX2ZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdn c3RhdGUpCiAJCQkJCQkgICAmYWdnc3RhdGUtPnBlcmhhc2hbMF0uaGFzaGl0ZXIpOwogfQogCisv KgorICogSWYgYW55IGRhdGEgd2FzIHNwaWxsZWQgZHVyaW5nIGhhc2ggYWdncmVnYXRpb24sIHJl c2V0IHRoZSBoYXNoIHRhYmxlIGFuZAorICogcmVwcm9jZXNzIG9uZSBiYXRjaCBvZiBzcGlsbGVk IGRhdGEuIEFmdGVyIHJlcHJvY2Vzc2luZyBhIGJhdGNoLCB0aGUgaGFzaAorICogdGFibGUgd2ls bCBhZ2FpbiBjb250YWluIGRhdGEsIHJlYWR5IHRvIGJlIGNvbnN1bWVkIGJ5CisgKiBhZ2dfcmV0 cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoKS4KKyAqCisgKiBTaG91bGQgb25seSBiZSBjYWxs ZWQgYWZ0ZXIgYWxsIGluIG1lbW9yeSBoYXNoIHRhYmxlIGVudHJpZXMgaGF2ZSBiZWVuCisgKiBj b25zdW1lZC4KKyAqCisgKiBSZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBleGhhdXN0ZWQgYW5k IHRoZXJlJ3Mgbm8gbW9yZSB3b3JrIHRvIGJlIGRvbmU7CisgKiBvdGhlcndpc2UgcmV0dXJuIHRy dWUuCisgKi8KK3N0YXRpYyBib29sCithZ2dfcmVmaWxsX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFn Z3N0YXRlKQoreworCUhhc2hBZ2dCYXRjaAkqYmF0Y2g7CisJSGFzaEFnZ1NwaWxsCSBzcGlsbDsK KwlIYXNoVGFwZUluZm8JKnRhcGVpbmZvID0gYWdnc3RhdGUtPmhhc2hfdGFwZWluZm87CisJbG9u ZwkJCSBuYnVja2V0czsKKworCWlmIChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzID09IE5JTCkKKwkJ cmV0dXJuIGZhbHNlOworCisJc3BpbGwubnBhcnRpdGlvbnMgPSAwOworCXNwaWxsLnBhcnRpdGlv bnMgPSBOVUxMOworCS8qCisJICogRWFjaCBzcGlsbCBmaWxlIGNvbnRhaW5zIHNwaWxsZWQgZGF0 YSBmb3Igb25seSBhIHNpbmdsZSBncm91cGluZworCSAqIHNldC4gV2Ugd2FudCB0byBpZ25vcmUg YWxsIG90aGVycywgd2hpY2ggaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBvdGhlcgorCSAqIHBlcmdy b3VwcyB0byBOVUxMLgorCSAqLworCW1lbXNldChhZ2dzdGF0ZS0+YWxsX3Blcmdyb3VwcywgMCwK KwkJICAgc2l6ZW9mKEFnZ1N0YXRlUGVyR3JvdXApICoKKwkJICAgKGFnZ3N0YXRlLT5tYXhzZXRz ICsgYWdnc3RhdGUtPm51bV9oYXNoZXMpKTsKKworCWJhdGNoID0gbGluaXRpYWwoYWdnc3RhdGUt Pmhhc2hfYmF0Y2hlcyk7CisJYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyA9IGxpc3RfZGVsZXRlX2Zp cnN0KGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMpOworCisJaGFzaGFnZ19zZXRfbGltaXRzKGFnZ3N0 YXRlLCBiYXRjaC0+aW5wdXRfdHVwbGVzLCBiYXRjaC0+dXNlZF9iaXRzKTsKKworCS8qCisJICog RnJlZSBtZW1vcnkgYW5kIHJlYnVpbGQgYSBzaW5nbGUgaGFzaCB0YWJsZSBmb3IgdGhpcyBiYXRj aCdzIGdyb3VwaW5nCisJICogc2V0LiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGdyb3VwcyB0byBi ZSB0aGUgbnVtYmVyIG9mIGlucHV0IHR1cGxlcyBpbgorCSAqIHRoaXMgYmF0Y2guCisJICovCisJ UmVTY2FuRXhwckNvbnRleHQoYWdnc3RhdGUtPmhhc2hjb250ZXh0KTsKKworCW5idWNrZXRzID0g aGFzaF9jaG9vc2VfbnVtX2J1Y2tldHMoCisJCWFnZ3N0YXRlLCBiYXRjaC0+aW5wdXRfdHVwbGVz LCBhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQpOworCWJ1aWxkX2hhc2hfdGFibGUoYWdnc3RhdGUs IGJhdGNoLT5zZXRubywgbmJ1Y2tldHMpOworCWFnZ3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJlbnQg PSBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKAorCQlhZ2dzdGF0ZS0+aGFzaGNvbnRleHQtPmVj eHRfcGVyX3R1cGxlX21lbW9yeSwgdHJ1ZSk7CisJYWdnc3RhdGUtPmhhc2hfYWxsb2NfbGFzdCA9 IGFnZ3N0YXRlLT5oYXNoX2FsbG9jX2N1cnJlbnQ7CisJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19j dXJyZW50ID0gMDsKKworCUFzc2VydChhZ2dzdGF0ZS0+Y3VycmVudF9waGFzZSA9PSAwKTsKKwor CWlmIChhZ2dzdGF0ZS0+cGhhc2UtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKKwl7CisJCWFn Z3N0YXRlLT5jdXJyZW50X3BoYXNlID0gMTsKKwkJYWdnc3RhdGUtPnBoYXNlID0gJmFnZ3N0YXRl LT5waGFzZXNbYWdnc3RhdGUtPmN1cnJlbnRfcGhhc2VdOworCX0KKworCS8qCisJICogVGhlIGZp cnN0IHBhc3MgKGFnZ19maWxsX2hhc2hfdGFibGUpIHJlYWRzIHdoYXRldmVyIGtpbmQgb2Ygc2xv dCBjb21lcworCSAqIGZyb20gdGhlIG91dGVyIHBsYW4sIGFuZCBjb25zaWRlcnMgdGhlIHNsb3Qg Zml4ZWQuIEJ1dCBzcGlsbGVkIHR1cGxlcworCSAqIGFyZSBhbHdheXMgTWluaW1hbFR1cGxlcywg c28gaWYgdGhhdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBvdXRlciBwbGFuIHdlCisJICogbmVlZCB0 byBjaGFuZ2UgaXQgYW5kIHJlY29tcGlsZSB0aGUgYWdncmVnYXRlIGV4cHJlc3Npb25zLgorCSAq LworCWlmIChhZ2dzdGF0ZS0+c3MucHMub3V0ZXJvcHMgIT0gJlRUU09wc01pbmltYWxUdXBsZSkK Kwl7CisJCWFnZ3N0YXRlLT5zcy5wcy5vdXRlcm9wcyA9ICZUVFNPcHNNaW5pbWFsVHVwbGU7CisJ CWhhc2hhZ2dfcmVjb21waWxlX2V4cHJlc3Npb25zKGFnZ3N0YXRlKTsKKwl9CisKKwlMb2dpY2Fs VGFwZVJld2luZEZvclJlYWQodGFwZWluZm8tPnRhcGVzZXQsIGJhdGNoLT5pbnB1dF90YXBlbnVt LAorCQkJCQkJCSBIQVNIQUdHX1JFQURfQlVGRkVSX1NJWkUpOworCWZvciAoOzspIHsKKwkJVHVw bGVUYWJsZVNsb3QJKnNsb3QgPSBhZ2dzdGF0ZS0+aGFzaF9zcGlsbF9zbG90OworCQlNaW5pbWFs VHVwbGUJIHR1cGxlOworCQl1aW50MzIJCQkgaGFzaDsKKworCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCisJCXR1cGxlID0gaGFzaGFnZ19iYXRjaF9yZWFkKGJhdGNoLCAmaGFzaCk7CisJCWlm ICh0dXBsZSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJRXhlY1N0b3JlTWluaW1hbFR1cGxlKHR1 cGxlLCBzbG90LCB0cnVlKTsKKwkJYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBs ZSA9IHNsb3Q7CisKKwkJc2VsZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRlLCBiYXRjaC0+c2V0bm8s IHRydWUpOworCQlwcmVwYXJlX2hhc2hfc2xvdChhZ2dzdGF0ZSk7CisJCWFnZ3N0YXRlLT5oYXNo X3Blcmdyb3VwW2JhdGNoLT5zZXRub10gPSBsb29rdXBfaGFzaF9lbnRyeShhZ2dzdGF0ZSwgaGFz aCk7CisKKwkJLyogaWYgdGhlcmUncyBubyBtZW1vcnkgZm9yIGEgbmV3IGdyb3VwLCBzcGlsbCAq LworCQlpZiAoYWdnc3RhdGUtPmhhc2hfcGVyZ3JvdXBbYmF0Y2gtPnNldG5vXSA9PSBOVUxMKQor CQl7CisJCQkvKgorCQkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBncm91cHMgZm9yIHRoaXMg YmF0Y2ggYXMgdGhlIHRvdGFsCisJCQkgKiBudW1iZXIgb2YgdHVwbGVzIGluIGl0cyBpbnB1dCBm aWxlLiBBbHRob3VnaCB0aGF0J3MgYSB3b3JzdAorCQkJICogY2FzZSwgaXQncyBub3QgYmFkIGhl cmUgZm9yIHR3byByZWFzb25zOiAoMSkgb3ZlcmVzdGltYXRpbmcKKwkJCSAqIGlzIGJldHRlciB0 aGFuIHVuZGVyZXN0aW1hdGluZzsgYW5kICgyKSB3ZSd2ZSBhbHJlYWR5CisJCQkgKiBzY2FubmVk IHRoZSByZWxhdGlvbiBvbmNlLCBzbyBpdCdzIGxpa2VseSB0aGF0IHdlJ3ZlCisJCQkgKiBhbHJl YWR5IGZpbmFsaXplZCBtYW55IG9mIHRoZSBjb21tb24gdmFsdWVzLgorCQkJICovCisJCQlpZiAo c3BpbGwucGFydGl0aW9ucyA9PSBOVUxMKQorCQkJCWhhc2hhZ2dfc3BpbGxfaW5pdCgmc3BpbGws IHRhcGVpbmZvLCBiYXRjaC0+dXNlZF9iaXRzLAorCQkJCQkJCQkgICBiYXRjaC0+aW5wdXRfdHVw bGVzLAorCQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZSk7CisKKwkJCWhhc2hhZ2df c3BpbGxfdHVwbGUoJnNwaWxsLCBzbG90LCBoYXNoKTsKKworCQkJYWdnc3RhdGUtPmhhc2hfZGlz a191c2VkID0gTG9naWNhbFRhcGVTZXRCbG9ja3MoCisJCQkJYWdnc3RhdGUtPmhhc2hfdGFwZWlu Zm8tPnRhcGVzZXQpICogKEJMQ0tTWiAvIDEwMjQpOworCQl9CisKKwkJLyogQWR2YW5jZSB0aGUg YWdncmVnYXRlcyAob3IgY29tYmluZSBmdW5jdGlvbnMpICovCisJCWFkdmFuY2VfYWdncmVnYXRl cyhhZ2dzdGF0ZSk7CisKKwkJLyoKKwkJICogUmVzZXQgcGVyLWlucHV0LXR1cGxlIGNvbnRleHQg YWZ0ZXIgZWFjaCB0dXBsZSwgYnV0IG5vdGUgdGhhdCB0aGUKKwkJICogaGFzaCBsb29rdXBzIGRv IHRoaXMgdG9vCisJCSAqLworCQlSZXNldEV4cHJDb250ZXh0KGFnZ3N0YXRlLT50bXBjb250ZXh0 KTsKKwl9CisKKwloYXNoYWdnX3RhcGVpbmZvX3JlbGVhc2UodGFwZWluZm8sIGJhdGNoLT5pbnB1 dF90YXBlbnVtKTsKKworCWFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID0gMDsKKwlhZ2dzdGF0ZS0+ cGhhc2UgPSAmYWdnc3RhdGUtPnBoYXNlc1thZ2dzdGF0ZS0+Y3VycmVudF9waGFzZV07CisKKwkv KiB1cGRhdGUgaGFzaGVudHJ5c2l6ZSBlc3RpbWF0ZSBiYXNlZCBvbiBjb250ZW50cyAqLworCWlm IChhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQgPiAwKQorCXsKKwkJYWdnc3RhdGUtPmhh c2hlbnRyeXNpemUgPSAoZG91YmxlKWFnZ3N0YXRlLT5oYXNoX2FsbG9jX2xhc3QgLworCQkJKGRv dWJsZSlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQ7CisJfQorCisJaGFzaGFnZ19zcGls bF9maW5pc2goYWdnc3RhdGUsICZzcGlsbCwgYmF0Y2gtPnNldG5vKTsKKwlhZ2dzdGF0ZS0+aGFz aF9zcGlsbF9tb2RlID0gZmFsc2U7CisKKwlwZnJlZShiYXRjaCk7CisKKwkvKiBJbml0aWFsaXpl IHRvIHdhbGsgdGhlIGZpcnN0IGhhc2ggdGFibGUgKi8KKwlzZWxlY3RfY3VycmVudF9zZXQoYWdn c3RhdGUsIDAsIHRydWUpOworCVJlc2V0VHVwbGVIYXNoSXRlcmF0b3IoYWdnc3RhdGUtPnBlcmhh c2hbMF0uaGFzaHRhYmxlLAorCQkJCQkJICAgJmFnZ3N0YXRlLT5wZXJoYXNoWzBdLmhhc2hpdGVy KTsKKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogRXhlY0FnZyBmb3IgaGFzaGVkIGNhc2U6 IHJldHJpZXZpbmcgZ3JvdXBzIGZyb20gaGFzaCB0YWJsZQorICoKKyAqIEFmdGVyIGV4aGF1c3Rp bmcgaW4tbWVtb3J5IHR1cGxlcywgYWxzbyB0cnkgcmVmaWxsaW5nIHRoZSBoYXNoIHRhYmxlIHVz aW5nCisgKiBwcmV2aW91c2x5LXNwaWxsZWQgdHVwbGVzLiBPbmx5IHJldHVybnMgTlVMTCBhZnRl ciBhbGwgaW4tbWVtb3J5IGFuZAorICogc3BpbGxlZCB0dXBsZXMgYXJlIGV4aGF1c3RlZC4KICAq Lwogc3RhdGljIFR1cGxlVGFibGVTbG90ICoKIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0 YXRlICphZ2dzdGF0ZSkKK3sKKwlUdXBsZVRhYmxlU2xvdCAqcmVzdWx0ID0gTlVMTDsKKworCXdo aWxlIChyZXN1bHQgPT0gTlVMTCkKKwl7CisJCXJlc3VsdCA9IGFnZ19yZXRyaWV2ZV9oYXNoX3Rh YmxlX2luX21lbW9yeShhZ2dzdGF0ZSk7CisJCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJeworCQkJ aWYgKCFhZ2dfcmVmaWxsX2hhc2hfdGFibGUoYWdnc3RhdGUpKQorCQkJeworCQkJCWFnZ3N0YXRl LT5hZ2dfZG9uZSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4g cmVzdWx0OworfQorCisvKgorICogUmV0cmlldmUgdGhlIGdyb3VwcyBmcm9tIHRoZSBpbi1tZW1v cnkgaGFzaCB0YWJsZXMgd2l0aG91dCBjb25zaWRlcmluZyBhbnkKKyAqIHNwaWxsZWQgdHVwbGVz LgorICovCitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgorYWdnX3JldHJpZXZlX2hhc2hfdGFibGVf aW5fbWVtb3J5KEFnZ1N0YXRlICphZ2dzdGF0ZSkKIHsKIAlFeHByQ29udGV4dCAqZWNvbnRleHQ7 CiAJQWdnU3RhdGVQZXJBZ2cgcGVyYWdnOwpAQCAtMTk4Myw3ICsyNjc1LDcgQEAgYWdnX3JldHJp ZXZlX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCSAqIFdlIGxvb3AgcmV0cmlldmlu ZyBncm91cHMgdW50aWwgd2UgZmluZCBvbmUgc2F0aXNmeWluZwogCSAqIGFnZ3N0YXRlLT5zcy5w cy5xdWFsCiAJICovCi0Jd2hpbGUgKCFhZ2dzdGF0ZS0+YWdnX2RvbmUpCisJZm9yICg7OykKIAl7 CiAJCVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90OwogCQlpbnQJ CQlpOwpAQCAtMjAxNCw4ICsyNzA2LDYgQEAgYWdnX3JldHJpZXZlX2hhc2hfdGFibGUoQWdnU3Rh dGUgKmFnZ3N0YXRlKQogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIE5vIG1vcmUgaGFzaHRh Ymxlcywgc28gZG9uZSAqLwotCQkJCWFnZ3N0YXRlLT5hZ2dfZG9uZSA9IHRydWU7CiAJCQkJcmV0 dXJuIE5VTEw7CiAJCQl9CiAJCX0KQEAgLTIwNzIsNiArMjc2MiwyOTYgQEAgYWdnX3JldHJpZXZl X2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCXJldHVybiBOVUxMOwogfQogCisvKgor ICogQXNzaWduIHVudXNlZCB0YXBlcyB0byBzcGlsbCBwYXJ0aXRpb25zLCBleHRlbmRpbmcgdGhl IHRhcGUgc2V0IGlmCisgKiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3Rh cGVpbmZvX2Fzc2lnbihIYXNoVGFwZUluZm8gKnRhcGVpbmZvLCBpbnQgKnBhcnRpdGlvbnMsCisJ CQkJCQlpbnQgbnBhcnRpdGlvbnMpCit7CisJaW50IHBhcnRpZHggPSAwOworCisJLyogdXNlIGZy ZWUgdGFwZXMgaWYgYXZhaWxhYmxlICovCisJd2hpbGUgKHBhcnRpZHggPCBucGFydGl0aW9ucyAm JiB0YXBlaW5mby0+bmZyZWV0YXBlcyA+IDApCisJCXBhcnRpdGlvbnNbcGFydGlkeCsrXSA9IHRh cGVpbmZvLT5mcmVldGFwZXNbLS10YXBlaW5mby0+bmZyZWV0YXBlc107CisKKwlpZiAodGFwZWlu Zm8tPnRhcGVzZXQgPT0gTlVMTCkKKwkJdGFwZWluZm8tPnRhcGVzZXQgPSBMb2dpY2FsVGFwZVNl dENyZWF0ZShucGFydGl0aW9ucywgTlVMTCwgTlVMTCwgLTEpOworCWVsc2UgaWYgKHBhcnRpZHgg PCBucGFydGl0aW9ucykKKwl7CisJCXRhcGVpbmZvLT50YXBlc2V0ID0gTG9naWNhbFRhcGVTZXRF eHRlbmQoCisJCQl0YXBlaW5mby0+dGFwZXNldCwgbnBhcnRpdGlvbnMgLSBwYXJ0aWR4KTsKKwl9 CisKKwl3aGlsZSAocGFydGlkeCA8IG5wYXJ0aXRpb25zKQorCQlwYXJ0aXRpb25zW3BhcnRpZHgr K10gPSB0YXBlaW5mby0+bnRhcGVzKys7Cit9CisKKy8qCisgKiBBZnRlciBhIHRhcGUgaGFzIGFs cmVhZHkgYmVlbiB3cml0dGVuIHRvIGFuZCB0aGVuIHJlYWQsIHRoaXMgZnVuY3Rpb24KKyAqIHJl d2luZHMgaXQgZm9yIHdyaXRpbmcgYW5kIGFkZHMgaXQgdG8gdGhlIGZyZWUgbGlzdC4KKyAqLwor c3RhdGljIHZvaWQKK2hhc2hhZ2dfdGFwZWluZm9fcmVsZWFzZShIYXNoVGFwZUluZm8gKnRhcGVp bmZvLCBpbnQgdGFwZW51bSkKK3sKKwlMb2dpY2FsVGFwZVJld2luZEZvcldyaXRlKHRhcGVpbmZv LT50YXBlc2V0LCB0YXBlbnVtKTsKKwlpZiAodGFwZWluZm8tPmZyZWV0YXBlcyA9PSBOVUxMKQor CQl0YXBlaW5mby0+ZnJlZXRhcGVzID0gcGFsbG9jKHNpemVvZihpbnQpKTsKKwllbHNlCisJCXRh cGVpbmZvLT5mcmVldGFwZXMgPSByZXBhbGxvYygKKwkJCXRhcGVpbmZvLT5mcmVldGFwZXMsIHNp emVvZihpbnQpICogKHRhcGVpbmZvLT5uZnJlZXRhcGVzICsgMSkpOworCXRhcGVpbmZvLT5mcmVl dGFwZXNbdGFwZWluZm8tPm5mcmVldGFwZXMrK10gPSB0YXBlbnVtOworfQorCisvKgorICogaGFz aGFnZ19zcGlsbF9pbml0CisgKgorICogQ2FsbGVkIGFmdGVyIHdlIGRldGVybWluZWQgdGhhdCBz cGlsbGluZyBpcyBuZWNlc3NhcnkuIENob29zZXMgdGhlIG51bWJlcgorICogb2YgcGFydGl0aW9u cyB0byBjcmVhdGUsIGFuZCBpbml0aWFsaXplcyB0aGVtLgorICovCitzdGF0aWMgdm9pZAoraGFz aGFnZ19zcGlsbF9pbml0KEhhc2hBZ2dTcGlsbCAqc3BpbGwsIEhhc2hUYXBlSW5mbyAqdGFwZWlu Zm8sIGludCB1c2VkX2JpdHMsCisJCQkJICAgdWludDY0IGlucHV0X2dyb3VwcywgZG91YmxlIGhh c2hlbnRyeXNpemUpCit7CisJaW50CQlucGFydGl0aW9uczsKKwlpbnQgICAgIHBhcnRpdGlvbl9i aXRzOworCisJbnBhcnRpdGlvbnMgPSBoYXNoX2Nob29zZV9udW1fcGFydGl0aW9ucygKKwkJaW5w dXRfZ3JvdXBzLCBoYXNoZW50cnlzaXplLCB1c2VkX2JpdHMsICZwYXJ0aXRpb25fYml0cyk7CisK KwlzcGlsbC0+cGFydGl0aW9ucyA9IHBhbGxvYzAoc2l6ZW9mKGludCkgKiBucGFydGl0aW9ucyk7 CisJc3BpbGwtPm50dXBsZXMgPSBwYWxsb2MwKHNpemVvZihpbnQ2NCkgKiBucGFydGl0aW9ucyk7 CisKKwloYXNoYWdnX3RhcGVpbmZvX2Fzc2lnbih0YXBlaW5mbywgc3BpbGwtPnBhcnRpdGlvbnMs IG5wYXJ0aXRpb25zKTsKKworCXNwaWxsLT50YXBlaW5mbyA9IHRhcGVpbmZvOworCXNwaWxsLT5z aGlmdCA9IDMyIC0gdXNlZF9iaXRzIC0gcGFydGl0aW9uX2JpdHM7CisJc3BpbGwtPm1hc2sgPSAo bnBhcnRpdGlvbnMgLSAxKSA8PCBzcGlsbC0+c2hpZnQ7CisJc3BpbGwtPm5wYXJ0aXRpb25zID0g bnBhcnRpdGlvbnM7Cit9CisKKy8qCisgKiBoYXNoYWdnX3NwaWxsX3R1cGxlCisgKgorICogTm8g cm9vbSBmb3IgbmV3IGdyb3VwcyBpbiB0aGUgaGFzaCB0YWJsZS4gU2F2ZSBmb3IgbGF0ZXIgaW4g dGhlIGFwcHJvcHJpYXRlCisgKiBwYXJ0aXRpb24uCisgKi8KK3N0YXRpYyBTaXplCitoYXNoYWdn X3NwaWxsX3R1cGxlKEhhc2hBZ2dTcGlsbCAqc3BpbGwsIFR1cGxlVGFibGVTbG90ICpzbG90LCB1 aW50MzIgaGFzaCkKK3sKKwlMb2dpY2FsVGFwZVNldAkJKnRhcGVzZXQgPSBzcGlsbC0+dGFwZWlu Zm8tPnRhcGVzZXQ7CisJaW50CQkJCQkgcGFydGl0aW9uOworCU1pbmltYWxUdXBsZQkJIHR1cGxl OworCWludAkJCQkJIHRhcGVudW07CisJaW50CQkJCQkgdG90YWxfd3JpdHRlbiA9IDA7CisJYm9v bAkJCQkgc2hvdWxkRnJlZTsKKworCUFzc2VydChzcGlsbC0+cGFydGl0aW9ucyAhPSBOVUxMKTsK KworCS8qIG1heSBjb250YWluIHVubmVjZXNzYXJ5IGF0dHJpYnV0ZXMsIGNvbnNpZGVyIHByb2pl Y3Rpbmc/ICovCisJdHVwbGUgPSBFeGVjRmV0Y2hTbG90TWluaW1hbFR1cGxlKHNsb3QsICZzaG91 bGRGcmVlKTsKKworCXBhcnRpdGlvbiA9IChoYXNoICYgc3BpbGwtPm1hc2spID4+IHNwaWxsLT5z aGlmdDsKKwlzcGlsbC0+bnR1cGxlc1twYXJ0aXRpb25dKys7CisKKwl0YXBlbnVtID0gc3BpbGwt PnBhcnRpdGlvbnNbcGFydGl0aW9uXTsKKworCUxvZ2ljYWxUYXBlV3JpdGUodGFwZXNldCwgdGFw ZW51bSwgKHZvaWQgKikgJmhhc2gsIHNpemVvZih1aW50MzIpKTsKKwl0b3RhbF93cml0dGVuICs9 IHNpemVvZih1aW50MzIpOworCisJTG9naWNhbFRhcGVXcml0ZSh0YXBlc2V0LCB0YXBlbnVtLCAo dm9pZCAqKSB0dXBsZSwgdHVwbGUtPnRfbGVuKTsKKwl0b3RhbF93cml0dGVuICs9IHR1cGxlLT50 X2xlbjsKKworCWlmIChzaG91bGRGcmVlKQorCQlwZnJlZSh0dXBsZSk7CisKKwlyZXR1cm4gdG90 YWxfd3JpdHRlbjsKK30KKworLyoKKyAqIHJlYWRfc3BpbGxlZF90dXBsZQorICogCQlyZWFkIHRo ZSBuZXh0IHR1cGxlIGZyb20gYSBiYXRjaCBmaWxlLiAgUmV0dXJuIE5VTEwgaWYgbm8gbW9yZS4K KyAqLworc3RhdGljIE1pbmltYWxUdXBsZQoraGFzaGFnZ19iYXRjaF9yZWFkKEhhc2hBZ2dCYXRj aCAqYmF0Y2gsIHVpbnQzMiAqaGFzaHApCit7CisJTG9naWNhbFRhcGVTZXQgKnRhcGVzZXQgPSBi YXRjaC0+dGFwZWluZm8tPnRhcGVzZXQ7CisJaW50CQkJCXRhcGVudW0gPSBiYXRjaC0+aW5wdXRf dGFwZW51bTsKKwlNaW5pbWFsVHVwbGUJdHVwbGU7CisJdWludDMyCQkJdF9sZW47CisJc2l6ZV90 CQkJbnJlYWQ7CisJdWludDMyCQkJaGFzaDsKKworCW5yZWFkID0gTG9naWNhbFRhcGVSZWFkKHRh cGVzZXQsIHRhcGVudW0sICZoYXNoLCBzaXplb2YodWludDMyKSk7CisJaWYgKG5yZWFkID09IDAp CisJCXJldHVybiBOVUxMOworCWlmIChucmVhZCAhPSBzaXplb2YodWludDMyKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJ1 bmV4cGVjdGVkIEVPRiBmb3IgdGFwZSAlZDogcmVxdWVzdGVkICV6dSBieXRlcywgcmVhZCAlenUg Ynl0ZXMiLAorCQkJCQkJdGFwZW51bSwgc2l6ZW9mKHVpbnQzMiksIG5yZWFkKSkpOworCWlmICho YXNocCAhPSBOVUxMKQorCQkqaGFzaHAgPSBoYXNoOworCisJbnJlYWQgPSBMb2dpY2FsVGFwZVJl YWQodGFwZXNldCwgdGFwZW51bSwgJnRfbGVuLCBzaXplb2YodF9sZW4pKTsKKwlpZiAobnJlYWQg IT0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygidW5leHBlY3RlZCBFT0YgZm9yIHRhcGUgJWQ6IHJl cXVlc3RlZCAlenUgYnl0ZXMsIHJlYWQgJXp1IGJ5dGVzIiwKKwkJCQkJCXRhcGVudW0sIHNpemVv Zih1aW50MzIpLCBucmVhZCkpKTsKKworCXR1cGxlID0gKE1pbmltYWxUdXBsZSkgcGFsbG9jKHRf bGVuKTsKKwl0dXBsZS0+dF9sZW4gPSB0X2xlbjsKKworCW5yZWFkID0gTG9naWNhbFRhcGVSZWFk KHRhcGVzZXQsIHRhcGVudW0sCisJCQkJCQkJKHZvaWQgKikoKGNoYXIgKil0dXBsZSArIHNpemVv Zih1aW50MzIpKSwKKwkJCQkJCQl0X2xlbiAtIHNpemVvZih1aW50MzIpKTsKKwlpZiAobnJlYWQg IT0gdF9sZW4gLSBzaXplb2YodWludDMyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIEVPRiBmb3IgdGFw ZSAlZDogcmVxdWVzdGVkICV6dSBieXRlcywgcmVhZCAlenUgYnl0ZXMiLAorCQkJCQkJdGFwZW51 bSwgdF9sZW4gLSBzaXplb2YodWludDMyKSwgbnJlYWQpKSk7CisKKwlyZXR1cm4gdHVwbGU7Cit9 CisKKy8qCisgKiBuZXdfaGFzaGFnZ19iYXRjaAorICoKKyAqIENvbnN0cnVjdCBhIEhhc2hBZ2dC YXRjaCBpdGVtLCB3aGljaCByZXByZXNlbnRzIG9uZSBpdGVyYXRpb24gb2YgSGFzaEFnZyB0bwor ICogYmUgZG9uZS4gU2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgYWdncmVnYXRlJ3MgbWVtb3J5IGNv bnRleHQuCisgKi8KK3N0YXRpYyBIYXNoQWdnQmF0Y2ggKgoraGFzaGFnZ19iYXRjaF9uZXcoSGFz aFRhcGVJbmZvICp0YXBlaW5mbywgaW50IHRhcGVudW0sIGludCBzZXRubywKKwkJCQkgIGludDY0 IGlucHV0X3R1cGxlcywgaW50IHVzZWRfYml0cykKK3sKKwlIYXNoQWdnQmF0Y2ggKmJhdGNoID0g cGFsbG9jMChzaXplb2YoSGFzaEFnZ0JhdGNoKSk7CisKKwliYXRjaC0+c2V0bm8gPSBzZXRubzsK KwliYXRjaC0+dXNlZF9iaXRzID0gdXNlZF9iaXRzOworCWJhdGNoLT50YXBlaW5mbyA9IHRhcGVp bmZvOworCWJhdGNoLT5pbnB1dF90YXBlbnVtID0gdGFwZW51bTsKKwliYXRjaC0+aW5wdXRfdHVw bGVzID0gaW5wdXRfdHVwbGVzOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogaGFzaGFn Z19maW5pc2hfaW5pdGlhbF9zcGlsbHMKKyAqCisgKiBBZnRlciBhIEhhc2hBZ2dCYXRjaCBoYXMg YmVlbiBwcm9jZXNzZWQsIGl0IG1heSBoYXZlIHNwaWxsZWQgdHVwbGVzIHRvCisgKiBkaXNrLiBJ ZiBzbywgdHVybiB0aGUgc3BpbGxlZCBwYXJ0aXRpb25zIGludG8gbmV3IGJhdGNoZXMgdGhhdCBt dXN0IGxhdGVyCisgKiBiZSBleGVjdXRlZC4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hhZ2dfZmlu aXNoX2luaXRpYWxfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlpbnQgc2V0bm87CisK KwlpZiAoYWdnc3RhdGUtPmhhc2hfc3BpbGxzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIHVw ZGF0ZSBoYXNoZW50cnlzaXplIGVzdGltYXRlIGJhc2VkIG9uIGNvbnRlbnRzICovCisJQXNzZXJ0 KGFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA+IDApOworCWFnZ3N0YXRlLT5oYXNoZW50 cnlzaXplID0gKGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9hbGxvY19sYXN0IC8KKwkJKGRvdWJsZSlh Z2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQ7CisKKwlmb3IgKHNldG5vID0gMDsgc2V0bm8g PCBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsgc2V0bm8rKykKKwkJaGFzaGFnZ19zcGlsbF9maW5pc2go YWdnc3RhdGUsICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dLCBzZXRubyk7CisKKwlhZ2dz dGF0ZS0+aGFzaF9zcGlsbF9tb2RlID0gZmFsc2U7CisKKwkvKgorCSAqIFdlJ3JlIG5vdCBwcm9j ZXNzaW5nIHR1cGxlcyBmcm9tIG91dGVyIHBsYW4gYW55IG1vcmU7IG9ubHkgcHJvY2Vzc2luZwor CSAqIGJhdGNoZXMgb2Ygc3BpbGxlZCB0dXBsZXMuIFRoZSBpbml0aWFsIHNwaWxsIHN0cnVjdHVy ZXMgYXJlIG5vIGxvbmdlcgorCSAqIG5lZWRlZC4KKwkgKi8KKwlwZnJlZShhZ2dzdGF0ZS0+aGFz aF9zcGlsbHMpOworCWFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9IE5VTEw7Cit9CisKKy8qCisgKiBo YXNoYWdnX3NwaWxsX2ZpbmlzaAorICoKKyAqIFRyYW5zZm9ybSBzcGlsbCBwYXJ0aXRpb25zIGlu dG8gbmV3IGJhdGNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoYWdnX3NwaWxsX2ZpbmlzaChB Z2dTdGF0ZSAqYWdnc3RhdGUsIEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBzZXRubykKK3sKKwlp bnQgaTsKKwlpbnQgdXNlZF9iaXRzID0gMzIgLSBzcGlsbC0+c2hpZnQ7CisKKwlpZiAoc3BpbGwt Pm5wYXJ0aXRpb25zID09IDApCisJCXJldHVybjsJLyogZGlkbid0IHNwaWxsICovCisKKwlmb3Ig KGkgPSAwOyBpIDwgc3BpbGwtPm5wYXJ0aXRpb25zOyBpKyspCisJeworCQlpbnQJCQkJIHRhcGVu dW0gPSBzcGlsbC0+cGFydGl0aW9uc1tpXTsKKwkJTWVtb3J5Q29udGV4dCAgICBvbGRDb250ZXh0 OworCQlIYXNoQWdnQmF0Y2ggICAgKm5ld19iYXRjaDsKKworCQlvbGRDb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwkJ bmV3X2JhdGNoID0gaGFzaGFnZ19iYXRjaF9uZXcoYWdnc3RhdGUtPmhhc2hfdGFwZWluZm8sCisJ CQkJCQkJCQkgIHRhcGVudW0sIHNldG5vLCBzcGlsbC0+bnR1cGxlc1tpXSwKKwkJCQkJCQkJCSAg dXNlZF9iaXRzKTsKKwkJYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyA9IGxjb25zKG5ld19iYXRjaCwg YWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCsr OworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisJfQorCisJcGZyZWUoc3Bp bGwtPm50dXBsZXMpOworCXBmcmVlKHNwaWxsLT5wYXJ0aXRpb25zKTsKK30KKworLyoKKyAqIEZy ZWUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gYSBzcGlsbGVkIEhhc2hBZ2cuCisgKi8KK3N0YXRpYyB2 b2lkCitoYXNoYWdnX3Jlc2V0X3NwaWxsX3N0YXRlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlM aXN0Q2VsbCAqbGM7CisKKwkvKiBmcmVlIHNwaWxscyBmcm9tIGluaXRpYWwgcGFzcyAqLworCWlm IChhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgIT0gTlVMTCkKKwl7CisJCWludCBzZXRubzsKKworCQlm b3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsgc2V0bm8rKykKKwkJ eworCQkJSGFzaEFnZ1NwaWxsICpzcGlsbCA9ICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9d OworCQkJaWYgKHNwaWxsLT5udHVwbGVzICE9IE5VTEwpCisJCQkJcGZyZWUoc3BpbGwtPm50dXBs ZXMpOworCQkJaWYgKHNwaWxsLT5wYXJ0aXRpb25zICE9IE5VTEwpCisJCQkJcGZyZWUoc3BpbGwt PnBhcnRpdGlvbnMpOworCQl9CisJCXBmcmVlKGFnZ3N0YXRlLT5oYXNoX3NwaWxscyk7CisJCWFn Z3N0YXRlLT5oYXNoX3NwaWxscyA9IE5VTEw7CisJfQorCisJLyogZnJlZSBiYXRjaGVzICovCisJ Zm9yZWFjaChsYywgYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcykKKwl7CisJCUhhc2hBZ2dCYXRjaCAq YmF0Y2ggPSAoSGFzaEFnZ0JhdGNoKikgbGZpcnN0KGxjKTsKKwkJcGZyZWUoYmF0Y2gpOworCX0K KwlsaXN0X2ZyZWUoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJYWdnc3RhdGUtPmhhc2hfYmF0 Y2hlcyA9IE5JTDsKKworCS8qIGNsb3NlIHRhcGUgc2V0ICovCisJaWYgKGFnZ3N0YXRlLT5oYXNo X3RhcGVpbmZvICE9IE5VTEwpCisJeworCQlIYXNoVGFwZUluZm8gKnRhcGVpbmZvID0gYWdnc3Rh dGUtPmhhc2hfdGFwZWluZm87CisJCWlmICh0YXBlaW5mby0+dGFwZXNldCAhPSBOVUxMKQorCQkJ TG9naWNhbFRhcGVTZXRDbG9zZSh0YXBlaW5mby0+dGFwZXNldCk7CisJCWlmICh0YXBlaW5mby0+ ZnJlZXRhcGVzICE9IE5VTEwpCisJCQlwZnJlZSh0YXBlaW5mby0+ZnJlZXRhcGVzKTsKKwkJcGZy ZWUodGFwZWluZm8pOworCQlhZ2dzdGF0ZS0+aGFzaF90YXBlaW5mbyA9IE5VTEw7CisJfQorfQor CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tCiAgKiBFeGVjSW5pdEFnZwogICoKQEAgLTIyNTYsNiAr MzIzNiwxMCBAQCBFeGVjSW5pdEFnZyhBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCQkJYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzZml4ZWQgPSBmYWxzZTsKIAl9CiAKKwlp ZiAodXNlX2hhc2hpbmcpCisJCWFnZ3N0YXRlLT5oYXNoX3NwaWxsX3Nsb3QgPSBFeGVjSW5pdEV4 dHJhVHVwbGVTbG90KGVzdGF0ZSwgc2NhbkRlc2MsCisJCQkJCQkJCQkJCQkJCSAgICZUVFNPcHNN aW5pbWFsVHVwbGUpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlc3VsdCB0eXBlLCBzbG90IGFu ZCBwcm9qZWN0aW9uLgogCSAqLwpAQCAtMjQ4MSwxMSArMzQ2NSwyMiBAQCBFeGVjSW5pdEFnZyhB Z2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqLwogCWlmICh1c2VfaGFz aGluZykKIAl7CisJCVBsYW4gICAqb3V0ZXJwbGFuID0gb3V0ZXJQbGFuKG5vZGUpOworCQlsb25n CXRvdGFsR3JvdXBzID0gMDsKKwkJaW50IAlpOworCiAJCS8qIHRoaXMgaXMgYW4gYXJyYXkgb2Yg cG9pbnRlcnMsIG5vdCBzdHJ1Y3R1cmVzICovCiAJCWFnZ3N0YXRlLT5oYXNoX3Blcmdyb3VwID0g cGVyZ3JvdXBzOwogCisJCWFnZ3N0YXRlLT5oYXNoZW50cnlzaXplID0gaGFzaF9hZ2dfZW50cnlf c2l6ZSgKKwkJCWFnZ3N0YXRlLT5udW10cmFucywgb3V0ZXJwbGFuLT5wbGFuX3dpZHRoLCBub2Rl LT50cmFuc2l0aW9uU3BhY2UpOworCisJCWZvciAoaSA9IDA7IGkgPCBhZ2dzdGF0ZS0+bnVtX2hh c2hlczsgaSsrKQorCQkJdG90YWxHcm91cHMgPSBhZ2dzdGF0ZS0+cGVyaGFzaFtpXS5hZ2dub2Rl LT5udW1Hcm91cHM7CisKKwkJaGFzaGFnZ19zZXRfbGltaXRzKGFnZ3N0YXRlLCB0b3RhbEdyb3Vw cywgMCk7CiAJCWZpbmRfaGFzaF9jb2x1bW5zKGFnZ3N0YXRlKTsKLQkJYnVpbGRfaGFzaF90YWJs ZShhZ2dzdGF0ZSk7CisJCWJ1aWxkX2hhc2hfdGFibGVzKGFnZ3N0YXRlKTsKIAkJYWdnc3RhdGUt PnRhYmxlX2ZpbGxlZCA9IGZhbHNlOwogCX0KIApAQCAtMjg5MSw3ICszODg2LDcgQEAgRXhlY0lu aXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJZWxzZQogCQkJ QXNzZXJ0KGZhbHNlKTsKIAotCQlwaGFzZS0+ZXZhbHRyYW5zID0gRXhlY0J1aWxkQWdnVHJhbnMo YWdnc3RhdGUsIHBoYXNlLCBkb3NvcnQsIGRvaGFzaCk7CisJCXBoYXNlLT5ldmFsdHJhbnMgPSBF eGVjQnVpbGRBZ2dUcmFucyhhZ2dzdGF0ZSwgcGhhc2UsIGRvc29ydCwgZG9oYXNoLCBmYWxzZSk7 CiAKIAl9CiAKQEAgLTMzODYsNiArNDM4MSw4IEBAIEV4ZWNFbmRBZ2coQWdnU3RhdGUgKm5vZGUp CiAJaWYgKG5vZGUtPnNvcnRfb3V0KQogCQl0dXBsZXNvcnRfZW5kKG5vZGUtPnNvcnRfb3V0KTsK IAorCWhhc2hhZ2dfcmVzZXRfc3BpbGxfc3RhdGUobm9kZSk7CisKIAlmb3IgKHRyYW5zbm8gPSAw OyB0cmFuc25vIDwgbm9kZS0+bnVtdHJhbnM7IHRyYW5zbm8rKykKIAl7CiAJCUFnZ1N0YXRlUGVy VHJhbnMgcGVydHJhbnMgPSAmbm9kZS0+cGVydHJhbnNbdHJhbnNub107CkBAIC0zNDQxLDEyICs0 NDM4LDEzIEBAIEV4ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUpCiAJCQlyZXR1cm47CiAKIAkJ LyoKLQkJICogSWYgd2UgZG8gaGF2ZSB0aGUgaGFzaCB0YWJsZSwgYW5kIHRoZSBzdWJwbGFuIGRv ZXMgbm90IGhhdmUgYW55Ci0JCSAqIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgbm9uZSBvZiBvdXIg b3duIHBhcmFtZXRlciBjaGFuZ2VzIGFmZmVjdAotCQkgKiBpbnB1dCBleHByZXNzaW9ucyBvZiB0 aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4gd2UgY2FuIGp1c3QKLQkJICogcmVzY2FuIHRo ZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0IGFnYWluLgorCQkgKiBJ ZiB3ZSBkbyBoYXZlIHRoZSBoYXNoIHRhYmxlLCBhbmQgaXQgbmV2ZXIgc3BpbGxlZCwgYW5kIHRo ZSBzdWJwbGFuCisJCSAqIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQg bm9uZSBvZiBvdXIgb3duIHBhcmFtZXRlcgorCQkgKiBjaGFuZ2VzIGFmZmVjdCBpbnB1dCBleHBy ZXNzaW9ucyBvZiB0aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4KKwkJICogd2UgY2FuIGp1 c3QgcmVzY2FuIHRoZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0CisJ CSAqIGFnYWluLgogCQkgKi8KLQkJaWYgKG91dGVyUGxhbi0+Y2hnUGFyYW0gPT0gTlVMTCAmJgor CQlpZiAob3V0ZXJQbGFuLT5jaGdQYXJhbSA9PSBOVUxMICYmICFub2RlLT5oYXNoX2V2ZXJfc3Bp bGxlZCAmJgogCQkJIWJtc19vdmVybGFwKG5vZGUtPnNzLnBzLmNoZ1BhcmFtLCBhZ2dub2RlLT5h Z2dQYXJhbXMpKQogCQl7CiAJCQlSZXNldFR1cGxlSGFzaEl0ZXJhdG9yKG5vZGUtPnBlcmhhc2hb MF0uaGFzaHRhYmxlLApAQCAtMzUwMywxMSArNDUwMSwyOSBAQCBFeGVjUmVTY2FuQWdnKEFnZ1N0 YXRlICpub2RlKQogCSAqLwogCWlmIChub2RlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFTSEVEIHx8 IG5vZGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKIAl7CisJCWhhc2hhZ2dfcmVzZXRfc3Bp bGxfc3RhdGUobm9kZSk7CisKKwkJbm9kZS0+aGFzaF9ldmVyX3NwaWxsZWQgPSBmYWxzZTsKKwkJ bm9kZS0+aGFzaF9zcGlsbF9tb2RlID0gZmFsc2U7CisJCW5vZGUtPmhhc2hfYWxsb2NfbGFzdCA9 IDA7CisJCW5vZGUtPmhhc2hfYWxsb2NfY3VycmVudCA9IDA7CisJCW5vZGUtPmhhc2hfbmdyb3Vw c19jdXJyZW50ID0gMDsKKworCQkvKiByZXNldCBzdGF0cyAqLworCQlub2RlLT5oYXNoX21lbV9w ZWFrID0gMDsKKwkJbm9kZS0+aGFzaF9kaXNrX3VzZWQgPSAwOworCQlub2RlLT5oYXNoX2JhdGNo ZXNfdXNlZCA9IDA7CisKIAkJUmVTY2FuRXhwckNvbnRleHQobm9kZS0+aGFzaGNvbnRleHQpOwog CQkvKiBSZWJ1aWxkIGFuIGVtcHR5IGhhc2ggdGFibGUgKi8KLQkJYnVpbGRfaGFzaF90YWJsZShu b2RlKTsKKwkJYnVpbGRfaGFzaF90YWJsZXMobm9kZSk7CiAJCW5vZGUtPnRhYmxlX2ZpbGxlZCA9 IGZhbHNlOwogCQkvKiBpdGVyYXRvciB3aWxsIGJlIHJlc2V0IHdoZW4gdGhlIHRhYmxlIGlzIGZp bGxlZCAqLworCisJCW5vZGUtPnNzLnBzLm91dGVyb3BzID0KKwkJCUV4ZWNHZXRSZXN1bHRTbG90 T3BzKG91dGVyUGxhblN0YXRlKCZub2RlLT5zcyksCisJCQkJCQkJCSAmbm9kZS0+c3MucHMub3V0 ZXJvcHNmaXhlZCk7CisJCWhhc2hhZ2dfcmVjb21waWxlX2V4cHJlc3Npb25zKG5vZGUpOwogCX0K IAogCWlmIChub2RlLT5hZ2dzdHJhdGVneSAhPSBBR0dfSEFTSEVEKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9s bHZtaml0X2V4cHIuYwppbmRleCAyMWE1Y2E0YjQwNC4uNmZhNTU1YWRhODggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2pp dC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0yMDgyLDYgKzIwODIsNyBAQCBsbHZtX2NvbXBpbGVf ZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCX0KIAogCQkJY2FzZSBFRU9QX0FHR19JTklUX1RS QU5TOgorCQkJY2FzZSBFRU9QX0FHR19JTklUX1RSQU5TX1NQSUxMRUQ6CiAJCQkJewogCQkJCQlB Z2dTdGF0ZSAgICphZ2dzdGF0ZTsKIAkJCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFuczsKQEAg LTIwOTIsNiArMjA5Myw3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJ CQkJCUxMVk1WYWx1ZVJlZiB2X2FsbHBlcmdyb3Vwc3A7CiAKIAkJCQkJTExWTVZhbHVlUmVmIHZf cGVyZ3JvdXBwOworCQkJCQlMTFZNVmFsdWVSZWYgdl9wZXJncm91cF9hbGxhZ2dzOwogCiAJCQkJ CUxMVk1WYWx1ZVJlZiB2X3NldG9mZiwKIAkJCQkJCQkJdl90cmFuc25vOwpAQCAtMjExOSwxMSAr MjEyMSwzMiBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQkJCQkJ CSAgImFnZ3N0YXRlLmFsbF9wZXJncm91cHMiKTsKIAkJCQkJdl9zZXRvZmYgPSBsX2ludDMyX2Nv bnN0KG9wLT5kLmFnZ19pbml0X3RyYW5zLnNldG9mZik7CiAJCQkJCXZfdHJhbnNubyA9IGxfaW50 MzJfY29uc3Qob3AtPmQuYWdnX2luaXRfdHJhbnMudHJhbnNubyk7Ci0JCQkJCXZfcGVyZ3JvdXBw ID0KLQkJCQkJCUxMVk1CdWlsZEdFUChiLAotCQkJCQkJCQkJIGxfbG9hZF9nZXAxKGIsIHZfYWxs cGVyZ3JvdXBzcCwgdl9zZXRvZmYsICIiKSwKLQkJCQkJCQkJCSAmdl90cmFuc25vLCAxLCAiIik7 CisJCQkJCXZfcGVyZ3JvdXBfYWxsYWdncyA9IGxfbG9hZF9nZXAxKGIsIHZfYWxscGVyZ3JvdXBz cCwgdl9zZXRvZmYsICIiKTsKIAorCQkJCQkvKgorCQkJCQkgKiBXaGVuIG5vIHR1cGxlcyBhdCBh bGwgaGF2ZSBzcGlsbGVkLCB3ZSBhdm9pZCBhZGRpbmcgdGhpcworCQkJCQkgKiBleHRyYSBicmFu Y2guIEJ1dCBhZnRlciBzb21lIHR1cGxlcyBoYXZlIHNwaWxsZWQsIHRoaXMKKwkJCQkJICogYnJh bmNoIGlzIG5lY2Vzc2FyeSwgc28gd2UgcmVjb21waWxlIHRoZSBleHByZXNzaW9uCisJCQkJCSAq IHVzaW5nIGEgbmV3IG9wY29kZS4KKwkJCQkJICovCisJCQkJCWlmIChvcGNvZGUgPT0gRUVPUF9B R0dfSU5JVF9UUkFOU19TUElMTEVEKQorCQkJCQl7CisJCQkJCQlMTFZNQmFzaWNCbG9ja1JlZiBi X2NoZWNrX25vdHJhbnN2YWx1ZSA9IGxfYmJfYmVmb3JlX3YoCisJCQkJCQkJb3BibG9ja3NbaSAr IDFdLCAib3AuJWQuY2hlY2tfbm90cmFuc3ZhbHVlIiwgaSk7CisKKwkJCQkJCUxMVk1CdWlsZENv bmRCcigKKwkJCQkJCQliLAorCQkJCQkJCUxMVk1CdWlsZElDbXAoYiwgTExWTUludEVRLAorCQkJ CQkJCQkJCSAgTExWTUJ1aWxkUHRyVG9JbnQoCisJCQkJCQkJCQkJCSAgYiwgdl9wZXJncm91cF9h bGxhZ2dzLCBUeXBlU2l6ZVQsICIiKSwKKwkJCQkJCQkJCQkgIGxfc2l6ZXRfY29uc3QoMCksICIi KSwKKwkJCQkJCQlvcGJsb2Nrc1tpICsgMV0sCisJCQkJCQkJYl9jaGVja19ub3RyYW5zdmFsdWUp OworCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9jaGVja19ub3RyYW5zdmFs dWUpOworCQkJCQl9CisKKwkJCQkJdl9wZXJncm91cHAgPSBMTFZNQnVpbGRHRVAoYiwgdl9wZXJn cm91cF9hbGxhZ2dzLCAmdl90cmFuc25vLCAxLCAiIik7CiAJCQkJCXZfbm90cmFuc3ZhbHVlID0K IAkJCQkJCWxfbG9hZF9zdHJ1Y3RfZ2VwKGIsIHZfcGVyZ3JvdXBwLAogCQkJCQkJCQkJCSAgRklF TEROT19BR0dTVEFURVBFUkdST1VQREFUQV9OT1RSQU5TVkFMVUUsCkBAIC0yMTgwLDYgKzIyMDMs NyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCX0KIAogCQkJY2Fz ZSBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0s6CisJCQljYXNlIEVFT1BfQUdHX1NUUklDVF9U UkFOU19DSEVDS19TUElMTEVEOgogCQkJCXsKIAkJCQkJQWdnU3RhdGUgICAqYWdnc3RhdGU7CiAJ CQkJCUxMVk1WYWx1ZVJlZiB2X3NldG9mZiwKQEAgLTIxOTAsNiArMjIxNCw3IEBAIGxsdm1fY29t cGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAKIAkJCQkJTExWTVZhbHVlUmVmIHZfdHJhbnNu dWxsOwogCQkJCQlMTFZNVmFsdWVSZWYgdl9wZXJncm91cHA7CisJCQkJCUxMVk1WYWx1ZVJlZiB2 X3Blcmdyb3VwX2FsbGFnZ3M7CiAKIAkJCQkJaW50CQkJanVtcG51bGwgPSBvcC0+ZC5hZ2dfc3Ry aWN0X3RyYW5zX2NoZWNrLmp1bXBudWxsOwogCkBAIC0yMjA5LDExICsyMjM0LDMyIEBAIGxsdm1f Y29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQlsX2ludDMyX2NvbnN0KG9wLT5k LmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0b2ZmKTsKIAkJCQkJdl90cmFuc25vID0KIAkJCQkJ CWxfaW50MzJfY29uc3Qob3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay50cmFuc25vKTsKLQkJ CQkJdl9wZXJncm91cHAgPQotCQkJCQkJTExWTUJ1aWxkR0VQKGIsCi0JCQkJCQkJCQkgbF9sb2Fk X2dlcDEoYiwgdl9hbGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpLAotCQkJCQkJCQkJICZ2X3Ry YW5zbm8sIDEsICIiKTsKKwkJCQkJdl9wZXJncm91cF9hbGxhZ2dzID0gbF9sb2FkX2dlcDEoYiwg dl9hbGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpOworCisJCQkJCS8qCisJCQkJCSAqIFdoZW4g bm8gdHVwbGVzIGF0IGFsbCBoYXZlIHNwaWxsZWQsIHdlIGF2b2lkIGFkZGluZyB0aGlzCisJCQkJ CSAqIGV4dHJhIGJyYW5jaC4gQnV0IGFmdGVyIHNvbWUgdHVwbGVzIGhhdmUgc3BpbGxlZCwgdGhp cworCQkJCQkgKiBicmFuY2ggaXMgbmVjZXNzYXJ5LCBzbyB3ZSByZWNvbXBpbGUgdGhlIGV4cHJl c3Npb24KKwkJCQkJICogdXNpbmcgYSBuZXcgb3Bjb2RlLgorCQkJCQkgKi8KKwkJCQkJaWYgKG9w Y29kZSA9PSBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCkKKwkJCQkJeworCQkJ CQkJTExWTUJhc2ljQmxvY2tSZWYgYl9jaGVja190cmFuc251bGwgPSBsX2JiX2JlZm9yZV92KAor CQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwgIm9wLiVkLmNoZWNrX3RyYW5zbnVsbCIsIGkpOworCisJ CQkJCQlMTFZNQnVpbGRDb25kQnIoCisJCQkJCQkJYiwKKwkJCQkJCQlMTFZNQnVpbGRJQ21wKGIs IExMVk1JbnRFUSwKKwkJCQkJCQkJCQkgIExMVk1CdWlsZFB0clRvSW50KGIsIHZfcGVyZ3JvdXBf YWxsYWdncywKKwkJCQkJCQkJCQkJCQkJCVR5cGVTaXplVCwgIiIpLAorCQkJCQkJCQkJCSAgbF9z aXpldF9jb25zdCgwKSwgIiIpLAorCQkJCQkJCW9wYmxvY2tzW2p1bXBudWxsXSwKKwkJCQkJCQli X2NoZWNrX3RyYW5zbnVsbCk7CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBi X2NoZWNrX3RyYW5zbnVsbCk7CisJCQkJCX0KIAorCQkJCQl2X3Blcmdyb3VwcCA9IExMVk1CdWls ZEdFUChiLCB2X3Blcmdyb3VwX2FsbGFnZ3MsICZ2X3RyYW5zbm8sIDEsICIiKTsKIAkJCQkJdl90 cmFuc251bGwgPQogCQkJCQkJbF9sb2FkX3N0cnVjdF9nZXAoYiwgdl9wZXJncm91cHAsCiAJCQkJ CQkJCQkJICBGSUVMRE5PX0FHR1NUQVRFUEVSR1JPVVBEQVRBX1RSQU5TVkFMVUVJU05VTEwsCkBA IC0yMjI5LDcgKzIyNzUsOSBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQog CQkJCX0KIAogCQkJY2FzZSBFRU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTDoKKwkJCWNhc2UgRUVP UF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRDoKIAkJCWNhc2UgRUVPUF9BR0dfUExBSU5f VFJBTlM6CisJCQljYXNlIEVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQ6CiAJCQkJewogCQkJ CQlBZ2dTdGF0ZSAgICphZ2dzdGF0ZTsKIAkJCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFuczsK QEAgLTIyNTUsNiArMjMwMyw3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUp CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3BlcnRyYW5zcDsKIAogCQkJCQlMTFZNVmFsdWVSZWYgdl9w ZXJncm91cHA7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwX2FsbGFnZ3M7CiAKIAkJCQkJ TExWTVZhbHVlUmVmIHZfcmV0dmFsOwogCkBAIC0yMjgyLDEwICsyMzMxLDMzIEBAIGxsdm1fY29t cGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQkJCQkJICAiYWdnc3RhdGUuYWxsX3Bl cmdyb3VwcyIpOwogCQkJCQl2X3NldG9mZiA9IGxfaW50MzJfY29uc3Qob3AtPmQuYWdnX3RyYW5z LnNldG9mZik7CiAJCQkJCXZfdHJhbnNubyA9IGxfaW50MzJfY29uc3Qob3AtPmQuYWdnX3RyYW5z LnRyYW5zbm8pOwotCQkJCQl2X3Blcmdyb3VwcCA9Ci0JCQkJCQlMTFZNQnVpbGRHRVAoYiwKLQkJ CQkJCQkJCSBsX2xvYWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIiksCi0J CQkJCQkJCQkgJnZfdHJhbnNubywgMSwgIiIpOworCQkJCQl2X3Blcmdyb3VwX2FsbGFnZ3MgPSBs X2xvYWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIik7CisKKwkJCQkJLyoK KwkJCQkJICogV2hlbiBubyB0dXBsZXMgYXQgYWxsIGhhdmUgc3BpbGxlZCwgd2UgYXZvaWQgYWRk aW5nIHRoaXMKKwkJCQkJICogZXh0cmEgYnJhbmNoLiBCdXQgYWZ0ZXIgc29tZSB0dXBsZXMgaGF2 ZSBzcGlsbGVkLCB0aGlzCisJCQkJCSAqIGJyYW5jaCBpcyBuZWNlc3NhcnksIHNvIHdlIHJlY29t cGlsZSB0aGUgZXhwcmVzc2lvbgorCQkJCQkgKiB1c2luZyBhIG5ldyBvcGNvZGUuCisJCQkJCSAq LworCQkJCQlpZiAob3Bjb2RlID09IEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQSUxMRUQg fHwKKwkJCQkJCW9wY29kZSA9PSBFRU9QX0FHR19QTEFJTl9UUkFOU19TUElMTEVEKQorCQkJCQl7 CisJCQkJCQlMTFZNQmFzaWNCbG9ja1JlZiBiX2FkdmFuY2VfdHJhbnN2YWwgPSBsX2JiX2JlZm9y ZV92KAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwgIm9wLiVkLmFkdmFuY2VfdHJhbnN2YWwiLCBp KTsKKworCQkJCQkJTExWTUJ1aWxkQ29uZEJyKAorCQkJCQkJCWIsCisJCQkJCQkJTExWTUJ1aWxk SUNtcChiLCBMTFZNSW50RVEsCisJCQkJCQkJCQkJICBMTFZNQnVpbGRQdHJUb0ludChiLCB2X3Bl cmdyb3VwX2FsbGFnZ3MsCisJCQkJCQkJCQkJCQkJCQlUeXBlU2l6ZVQsICIiKSwKKwkJCQkJCQkJ CQkgIGxfc2l6ZXRfY29uc3QoMCksICIiKSwKKwkJCQkJCQlvcGJsb2Nrc1tpICsgMV0sCisJCQkJ CQkJYl9hZHZhbmNlX3RyYW5zdmFsKTsKKworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5k KGIsIGJfYWR2YW5jZV90cmFuc3ZhbCk7CisJCQkJCX0KKworCQkJCQl2X3Blcmdyb3VwcCA9IExM Vk1CdWlsZEdFUChiLCB2X3Blcmdyb3VwX2FsbGFnZ3MsICZ2X3RyYW5zbm8sIDEsICIiKTsKIAog CQkJCQl2X2ZjaW5mbyA9IGxfcHRyX2NvbnN0KGZjaW5mbywKIAkJCQkJCQkJCQkgICBsX3B0cihT dHJ1Y3RGdW5jdGlvbkNhbGxJbmZvRGF0YSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMKaW5kZXggYjVhMDAzMzcyMWYuLjk1NzU0Njk4MDBiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1 cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RzbWFwaS5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL25vZGVIYXNoLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvbWFrZWZ1bmNzLmgiCkBAIC0xMjgsNiArMTI5LDcgQEAgYm9vbAkJZW5hYmxlX2JpdG1h cHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxl X3NvcnQgPSB0cnVlOwogYm9vbAkJZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOworYm9vbAkJZW5hYmxl X2hhc2hhZ2dfc3BpbGwgPSB0cnVlOwogYm9vbAkJZW5hYmxlX25lc3Rsb29wID0gdHJ1ZTsKIGJv b2wJCWVuYWJsZV9tYXRlcmlhbCA9IHRydWU7CiBib29sCQllbmFibGVfbWVyZ2Vqb2luID0gdHJ1 ZTsKQEAgLTIxNTMsNyArMjE1NSw3IEBAIGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZv ICpyb290LAogCQkgaW50IG51bUdyb3VwQ29scywgZG91YmxlIG51bUdyb3VwcywKIAkJIExpc3Qg KnF1YWxzLAogCQkgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29z dCwKLQkJIGRvdWJsZSBpbnB1dF90dXBsZXMpCisJCSBkb3VibGUgaW5wdXRfdHVwbGVzLCBkb3Vi bGUgaW5wdXRfd2lkdGgpCiB7CiAJZG91YmxlCQlvdXRwdXRfdHVwbGVzOwogCUNvc3QJCXN0YXJ0 dXBfY29zdDsKQEAgLTIyMTksMjAgKzIyMjEsNjkgQEAgY29zdF9hZ2coUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAJCXRvdGFsX2Nvc3QgKz0gYWdnY29zdHMtPmZpbmFsQ29zdC5wZXJf dHVwbGUgKiBudW1Hcm91cHM7CiAJCXRvdGFsX2Nvc3QgKz0gY3B1X3R1cGxlX2Nvc3QgKiBudW1H cm91cHM7CiAJCW91dHB1dF90dXBsZXMgPSBudW1Hcm91cHM7CisKKwkJLyoKKwkJICogV2UgZG9u J3QgbmVlZCB0byBjb21wdXRlIHRoZSBkaXNrIGNvc3RzIG9mIGhhc2ggYWdncmVnYXRpb24gaGVy ZSwKKwkJICogYmVjYXVzZSB0aGUgcGxhbm5lciBkb2VzIG5vdCBjaG9vc2UgaGFzaCBhZ2dyZWdh dGlvbiBmb3IgZ3JvdXBpbmcKKwkJICogc2V0cyB0aGF0IGl0IGRvZXNuJ3QgZXhwZWN0IHRvIGZp dCBpbiBtZW1vcnkuCisJCSAqLwogCX0KIAllbHNlCiAJeworCQlkb3VibGUgaGFzaGVudHJ5c2l6 ZSA9IGhhc2hfYWdnX2VudHJ5X3NpemUoCisJCQkJYWdnY29zdHMtPm51bUFnZ3MsIGlucHV0X3dp ZHRoLCBhZ2djb3N0cy0+dHJhbnNpdGlvblNwYWNlKTsKKwkJZG91YmxlCW5iYXRjaGVzCSA9CisJ CQkobnVtR3JvdXBzICogaGFzaGVudHJ5c2l6ZSkgLyAod29ya19tZW0gKiAxMDI0TCk7CisJCWRv dWJsZQlwYWdlc193cml0dGVuID0gMC4wOworCQlkb3VibGUJcGFnZXNfcmVhZCA9IDAuMDsKKwog CQkvKiBtdXN0IGJlIEFHR19IQVNIRUQgKi8KIAkJc3RhcnR1cF9jb3N0ID0gaW5wdXRfdG90YWxf Y29zdDsKIAkJaWYgKCFlbmFibGVfaGFzaGFnZykKIAkJCXN0YXJ0dXBfY29zdCArPSBkaXNhYmxl X2Nvc3Q7CiAJCXN0YXJ0dXBfY29zdCArPSBhZ2djb3N0cy0+dHJhbnNDb3N0LnN0YXJ0dXA7CiAJ CXN0YXJ0dXBfY29zdCArPSBhZ2djb3N0cy0+dHJhbnNDb3N0LnBlcl90dXBsZSAqIGlucHV0X3R1 cGxlczsKKwkJLyogY29zdCBvZiBjb21wdXRpbmcgaGFzaCB2YWx1ZSAqLwogCQlzdGFydHVwX2Nv c3QgKz0gKGNwdV9vcGVyYXRvcl9jb3N0ICogbnVtR3JvdXBDb2xzKSAqIGlucHV0X3R1cGxlczsK IAkJc3RhcnR1cF9jb3N0ICs9IGFnZ2Nvc3RzLT5maW5hbENvc3Quc3RhcnR1cDsKKworCQkvKgor CQkgKiBBZGQgdGhlIGRpc2sgY29zdHMgb2YgaGFzaCBhZ2dyZWdhdGlvbiB0aGF0IHNwaWxscyB0 byBkaXNrLgorCQkgKgorCQkgKiBHcm91cHMgdGhhdCBnbyBpbnRvIHRoZSBoYXNoIHRhYmxlIHN0 YXkgaW4gbWVtb3J5IHVudGlsIGZpbmFsaXplZCwKKwkJICogc28gc3BpbGxpbmcgYW5kIHJlcHJv Y2Vzc2luZyB0dXBsZXMgZG9lc24ndCBpbmN1ciBhZGRpdGlvbmFsCisJCSAqIGludm9jYXRpb25z IG9mIHRyYW5zQ29zdCBvciBmaW5hbENvc3QuIEZ1cnRoZXJtb3JlLCB0aGUgY29tcHV0ZWQKKwkJ ICogaGFzaCB2YWx1ZSBpcyBzdG9yZWQgd2l0aCB0aGUgc3BpbGxlZCB0dXBsZXMsIHNvIHdlIGRv bid0IGluY3VyCisJCSAqIGV4dHJhIGludm9jYXRpb25zIG9mIHRoZSBoYXNoIGZ1bmN0aW9uLgor CQkgKgorCQkgKiBUaGUgZGlzayBjb3N0IGRlcGVuZHMgb24gdGhlIGRlcHRoIG9mIHJlY3Vyc2lv bjsgZWFjaCBsZXZlbAorCQkgKiByZXF1aXJpbmcgb25lIGFkZGl0aW9uYWwgd3JpdGUgYW5kIHRo ZW4gcmVhZCBvZiBhIHR1cGxlLiBXcml0ZXMgYXJlCisJCSAqIHJhbmRvbSBhbmQgcmVhZHMgYXJl IHNlcXVlbnRpYWwsIHNvIHdlIGFzc3VtZSAxLzIgcmFuZG9tIGFuZCBoYWxmCisJCSAqIHNlcXVl bnRpYWwuCisJCSAqCisJCSAqIEhhc2ggQWdnIGJlZ2lucyByZXR1cm5pbmcgdHVwbGVzIGFmdGVy IHRoZSBmaXJzdCBiYXRjaCBpcworCQkgKiBjb21wbGV0ZS4gQWNjcnVlIHdyaXRlcyAoc3BpbGxl ZCB0dXBsZXMpIHRvIHN0YXJ0dXBfY29zdCBhbmQgcmVhZHMKKwkJICogb25seSB0byB0b3RhbF9j b3N0LiBUaGlzIGlzIG5vdCBwZXJmZWN0OyBpdCBwZW5hbGl6ZXMgc3RhcnR1cF9jb3N0CisJCSAq IGluIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBzcGlsbHMuIEFsc28sIHRyYW5zQ29zdCBpcyBlbnRp cmVseQorCQkgKiBjb3VudGVkIGluIHN0YXJ0dXBfY29zdDsgYnV0IHNvbWUgb2YgdGhhdCBjb3N0 IGNvdWxkIGJlIGNvdW50ZWQKKwkJICogb25seSBhZ2FpbnN0IHRvdGFsX2Nvc3QuCisJCSAqLwor CQlpZiAoIWhhc2hhZ2dfbWVtX292ZXJmbG93ICYmIG5iYXRjaGVzID4gMS4wKQorCQl7CisJCQlk b3VibGUgZGVwdGg7CisJCQlkb3VibGUgcGFnZXM7CisKKwkJCXBhZ2VzID0gcmVsYXRpb25fYnl0 ZV9zaXplKGlucHV0X3R1cGxlcywgaW5wdXRfd2lkdGgpIC8gQkxDS1NaOworCQkJZGVwdGggPSBj ZWlsKCBsb2cobmJhdGNoZXMgLSAxKSAvIGxvZyhIQVNIQUdHX01BWF9QQVJUSVRJT05TKSApOwor CQkJcGFnZXNfd3JpdHRlbiA9IHBhZ2VzX3JlYWQgPSBwYWdlcyAqIGRlcHRoOworCQkJc3RhcnR1 cF9jb3N0ICs9IHBhZ2VzX3dyaXR0ZW4gKiByYW5kb21fcGFnZV9jb3N0OworCQl9CisKIAkJdG90 YWxfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAkJdG90YWxfY29zdCArPSBhZ2djb3N0cy0+ZmluYWxD b3N0LnBlcl90dXBsZSAqIG51bUdyb3VwczsKKwkJLyogY29zdCBvZiByZXRyaWV2aW5nIGZyb20g aGFzaCB0YWJsZSAqLwogCQl0b3RhbF9jb3N0ICs9IGNwdV90dXBsZV9jb3N0ICogbnVtR3JvdXBz OworCQl0b3RhbF9jb3N0ICs9IHBhZ2VzX3JlYWQgKiBzZXFfcGFnZV9jb3N0OwogCQlvdXRwdXRf dHVwbGVzID0gbnVtR3JvdXBzOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRl cGxhbi5jCmluZGV4IGUwNDhkMjAwYmI0Li4wOTA5MTllMzlhMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTY0NCw2ICsxNjQ0LDcgQEAgY3JlYXRlX3VuaXF1 ZV9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBVbmlxdWVQYXRoICpiZXN0X3BhdGgsIGludCBmbGFn cykKIAkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJIGJlc3RfcGF0aC0+cGF0 aC5yb3dzLAorCQkJCQkJCQkgMCwKIAkJCQkJCQkJIHN1YnBsYW4pOwogCX0KIAllbHNlCkBAIC0y MDk2LDYgKzIwOTcsNyBAQCBjcmVhdGVfYWdnX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFnZ1Bh dGggKmJlc3RfcGF0aCkKIAkJCQkJTklMLAogCQkJCQlOSUwsCiAJCQkJCWJlc3RfcGF0aC0+bnVt R3JvdXBzLAorCQkJCQliZXN0X3BhdGgtPnRyYW5zaXRpb25TcGFjZSwKIAkJCQkJc3VicGxhbik7 CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5wbGFuLCAoUGF0aCAqKSBiZXN0X3Bh dGgpOwpAQCAtMjI1Nyw2ICsyMjU5LDcgQEAgY3JlYXRlX2dyb3VwaW5nc2V0c19wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBHcm91cGluZ1NldHNQYXRoICpiZXN0X3BhdGgpCiAJCQkJCQkJCQkJIHJv bGx1cC0+Z3NldHMsCiAJCQkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJCQkgcm9sbHVwLT5udW1Hcm91 cHMsCisJCQkJCQkJCQkJIGJlc3RfcGF0aC0+dHJhbnNpdGlvblNwYWNlLAogCQkJCQkJCQkJCSBz b3J0X3BsYW4pOwogCiAJCQkvKgpAQCAtMjI5NSw2ICsyMjk4LDcgQEAgY3JlYXRlX2dyb3VwaW5n c2V0c19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBHcm91cGluZ1NldHNQYXRoICpiZXN0X3BhdGgp CiAJCQkJCQlyb2xsdXAtPmdzZXRzLAogCQkJCQkJY2hhaW4sCiAJCQkJCQlyb2xsdXAtPm51bUdy b3VwcywKKwkJCQkJCWJlc3RfcGF0aC0+dHJhbnNpdGlvblNwYWNlLAogCQkJCQkJc3VicGxhbik7 CiAKIAkJLyogQ29weSBjb3N0IGRhdGEgZnJvbSBQYXRoIHRvIFBsYW4gKi8KQEAgLTYxOTIsOCAr NjE5Niw4IEBAIEFnZyAqCiBtYWtlX2FnZyhMaXN0ICp0bGlzdCwgTGlzdCAqcXVhbCwKIAkJIEFn Z1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5LCBBZ2dTcGxpdCBhZ2dzcGxpdCwKIAkJIGludCBudW1Hcm91 cENvbHMsIEF0dHJOdW1iZXIgKmdycENvbElkeCwgT2lkICpncnBPcGVyYXRvcnMsIE9pZCAqZ3Jw Q29sbGF0aW9ucywKLQkJIExpc3QgKmdyb3VwaW5nU2V0cywgTGlzdCAqY2hhaW4sCi0JCSBkb3Vi bGUgZE51bUdyb3VwcywgUGxhbiAqbGVmdHRyZWUpCisJCSBMaXN0ICpncm91cGluZ1NldHMsIExp c3QgKmNoYWluLCBkb3VibGUgZE51bUdyb3VwcywKKwkJIGludDMyIHRyYW5zaXRpb25TcGFjZSwg UGxhbiAqbGVmdHRyZWUpCiB7CiAJQWdnCQkgICAqbm9kZSA9IG1ha2VOb2RlKEFnZyk7CiAJUGxh bgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOwpAQCAtNjIwOSw2ICs2MjEzLDcgQEAgbWFrZV9hZ2co TGlzdCAqdGxpc3QsIExpc3QgKnF1YWwsCiAJbm9kZS0+Z3JwT3BlcmF0b3JzID0gZ3JwT3BlcmF0 b3JzOwogCW5vZGUtPmdycENvbGxhdGlvbnMgPSBncnBDb2xsYXRpb25zOwogCW5vZGUtPm51bUdy b3VwcyA9IG51bUdyb3VwczsKKwlub2RlLT50cmFuc2l0aW9uU3BhY2UgPSB0cmFuc2l0aW9uU3Bh Y2U7CiAJbm9kZS0+YWdnUGFyYW1zID0gTlVMTDsJCS8qIFNTX2ZpbmFsaXplX3BsYW4oKSB3aWxs IGZpbGwgdGhpcyAqLwogCW5vZGUtPmdyb3VwaW5nU2V0cyA9IGdyb3VwaW5nU2V0czsKIAlub2Rl LT5jaGFpbiA9IGNoYWluOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGQ2 ZjIxNTM1OTM3Li45MTNhZDkzMzVlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YwpAQCAtNDg2NywxMyArNDg2Nyw4IEBAIGNyZWF0ZV9kaXN0aW5jdF9wYXRocyhQbGFubmVySW5m byAqcm9vdCwKIAkJYWxsb3dfaGFzaCA9IGZhbHNlOwkJLyogcG9saWN5LWJhc2VkIGRlY2lzaW9u IG5vdCB0byBoYXNoICovCiAJZWxzZQogCXsKLQkJU2l6ZQkJaGFzaGVudHJ5c2l6ZTsKLQotCQkv KiBFc3RpbWF0ZSBwZXItaGFzaC1lbnRyeSBzcGFjZSBhdCB0dXBsZSB3aWR0aC4uLiAqLwotCQlo YXNoZW50cnlzaXplID0gTUFYQUxJR04oY2hlYXBlc3RfaW5wdXRfcGF0aC0+cGF0aHRhcmdldC0+ d2lkdGgpICsKLQkJCU1BWEFMSUdOKFNpemVvZk1pbmltYWxUdXBsZUhlYWRlcik7Ci0JCS8qIHBs dXMgdGhlIHBlci1oYXNoLWVudHJ5IG92ZXJoZWFkICovCi0JCWhhc2hlbnRyeXNpemUgKz0gaGFz aF9hZ2dfZW50cnlfc2l6ZSgwKTsKKwkJU2l6ZQkJaGFzaGVudHJ5c2l6ZSA9IGhhc2hfYWdnX2Vu dHJ5X3NpemUoCisJCQkwLCBjaGVhcGVzdF9pbnB1dF9wYXRoLT5wYXRodGFyZ2V0LT53aWR0aCwg MCk7CiAKIAkJLyogQWxsb3cgaGFzaGluZyBvbmx5IGlmIGhhc2h0YWJsZSBpcyBwcmVkaWN0ZWQg dG8gZml0IGluIHdvcmtfbWVtICovCiAJCWFsbG93X2hhc2ggPSAoaGFzaGVudHJ5c2l6ZSAqIG51 bURpc3RpbmN0Um93cyA8PSB3b3JrX21lbSAqIDEwMjRMKTsKQEAgLTY1MzMsNyArNjUyOCw4IEBA IGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmlucHV0X3JlbCwKIAkJCSAqIHdlcmUgdW5hYmxlIHRvIHNvcnQgYWJvdmUsIHRoZW4gd2UnZCBi ZXR0ZXIgZ2VuZXJhdGUgYSBQYXRoLCBzbwogCQkJICogdGhhdCB3ZSBhdCBsZWFzdCBoYXZlIG9u ZS4KIAkJCSAqLwotCQkJaWYgKGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMIHx8 CisJCQlpZiAoZW5hYmxlX2hhc2hhZ2dfc3BpbGwgfHwKKwkJCQloYXNoYWdndGFibGVzaXplIDwg d29ya19tZW0gKiAxMDI0TCB8fAogCQkJCWdyb3VwZWRfcmVsLT5wYXRobGlzdCA9PSBOSUwpCiAJ CQl7CiAJCQkJLyoKQEAgLTY1NjYsNyArNjU2Miw4IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJCQkJ CQkJICBhZ2dfZmluYWxfY29zdHMsCiAJCQkJCQkJCQkJCQkJCSAgZE51bUdyb3Vwcyk7CiAKLQkJ CWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCkKKwkJCWlmIChlbmFibGVf aGFzaGFnZ19zcGlsbCB8fAorCQkJCWhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRM KQogCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQogCQkJCQkJIGNyZWF0ZV9hZ2df cGF0aChyb290LAogCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKQEAgLTY4MzUsNyArNjgzMiw3IEBA IGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBU ZW50YXRpdmVseSBwcm9kdWNlIGEgcGFydGlhbCBIYXNoQWdnIFBhdGgsIGRlcGVuZGluZyBvbiBp ZiBpdAogCQkgKiBsb29rcyBhcyBpZiB0aGUgaGFzaCB0YWJsZSB3aWxsIGZpdCBpbiB3b3JrX21l bS4KIAkJICovCi0JCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCAmJgor CQlpZiAoKGVuYWJsZV9oYXNoYWdnX3NwaWxsIHx8IGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21l bSAqIDEwMjRMKSAmJgogCQkJY2hlYXBlc3RfdG90YWxfcGF0aCAhPSBOVUxMKQogCQl7CiAJCQlh ZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCkBAIC02ODYyLDcgKzY4NTks NyBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCQkJCSAgIGROdW1QYXJ0aWFsUGFydGlhbEdyb3Vwcyk7CiAKIAkJLyogRG8gdGhlIHNhbWUg Zm9yIHBhcnRpYWwgcGF0aHMuICovCi0JCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0g KiAxMDI0TCAmJgorCQlpZiAoKGVuYWJsZV9oYXNoYWdnX3NwaWxsIHx8IGhhc2hhZ2d0YWJsZXNp emUgPCB3b3JrX21lbSAqIDEwMjRMKSAmJgogCQkJY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5V TEwpCiAJCXsKIAkJCWFkZF9wYXJ0aWFsX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0 aCAqKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwppbmRleCAxYTIzZTE4OTcw ZC4uOTUxYWVkODBlN2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCkBA IC0xMDcyLDcgKzEwNzIsNyBAQCBjaG9vc2VfaGFzaGVkX3NldG9wKFBsYW5uZXJJbmZvICpyb290 LCBMaXN0ICpncm91cENsYXVzZXMsCiAJCQkgbnVtR3JvdXBDb2xzLCBkTnVtR3JvdXBzLAogCQkJ IE5JTCwKIAkJCSBpbnB1dF9wYXRoLT5zdGFydHVwX2Nvc3QsIGlucHV0X3BhdGgtPnRvdGFsX2Nv c3QsCi0JCQkgaW5wdXRfcGF0aC0+cm93cyk7CisJCQkgaW5wdXRfcGF0aC0+cm93cywgaW5wdXRf cGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpOwogCiAJLyoKIAkgKiBOb3cgZm9yIHRoZSBzb3J0ZWQg Y2FzZS4gIE5vdGUgdGhhdCB0aGUgaW5wdXQgaXMgKmFsd2F5cyogdW5zb3J0ZWQsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCBlNmQwOGFlZGU1Ni4uOGJhODEyMmVlMmYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMTcwNCw3ICsxNzA0LDgg QEAgY3JlYXRlX3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws IFBhdGggKnN1YnBhdGgsCiAJCQkJCSBOSUwsCiAJCQkJCSBzdWJwYXRoLT5zdGFydHVwX2Nvc3Qs CiAJCQkJCSBzdWJwYXRoLT50b3RhbF9jb3N0LAotCQkJCQkgcmVsLT5yb3dzKTsKKwkJCQkJIHJl bC0+cm93cywKKwkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAl9CiAKIAlpZiAo c2ppbmZvLT5zZW1pX2Nhbl9idHJlZSAmJiBzamluZm8tPnNlbWlfY2FuX2hhc2gpCkBAIC0yOTQ5 LDYgKzI5NTAsNyBAQCBjcmVhdGVfYWdnX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5v ZGUtPmFnZ3N0cmF0ZWd5ID0gYWdnc3RyYXRlZ3k7CiAJcGF0aG5vZGUtPmFnZ3NwbGl0ID0gYWdn c3BsaXQ7CiAJcGF0aG5vZGUtPm51bUdyb3VwcyA9IG51bUdyb3VwczsKKwlwYXRobm9kZS0+dHJh bnNpdGlvblNwYWNlID0gYWdnY29zdHMgPyBhZ2djb3N0cy0+dHJhbnNpdGlvblNwYWNlIDogMDsK IAlwYXRobm9kZS0+Z3JvdXBDbGF1c2UgPSBncm91cENsYXVzZTsKIAlwYXRobm9kZS0+cXVhbCA9 IHF1YWw7CiAKQEAgLTI5NTcsNyArMjk1OSw3IEBAIGNyZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkJCSBsaXN0X2xlbmd0aChncm91cENsYXVzZSksIG51bUdyb3VwcywKIAkJCSBx dWFsLAogCQkJIHN1YnBhdGgtPnN0YXJ0dXBfY29zdCwgc3VicGF0aC0+dG90YWxfY29zdCwKLQkJ CSBzdWJwYXRoLT5yb3dzKTsKKwkJCSBzdWJwYXRoLT5yb3dzLCBzdWJwYXRoLT5wYXRodGFyZ2V0 LT53aWR0aCk7CiAKIAkvKiBhZGQgdGxpc3QgZXZhbCBjb3N0IGZvciBlYWNoIG91dHB1dCByb3cg Ki8KIAlwYXRobm9kZS0+cGF0aC5zdGFydHVwX2Nvc3QgKz0gdGFyZ2V0LT5jb3N0LnN0YXJ0dXA7 CkBAIC0zMDM2LDYgKzMwMzgsNyBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCiAJcGF0aG5vZGUtPmFnZ3N0cmF0ZWd5ID0gYWdnc3RyYXRlZ3k7CiAJcGF0aG5v ZGUtPnJvbGx1cHMgPSByb2xsdXBzOwogCXBhdGhub2RlLT5xdWFsID0gaGF2aW5nX3F1YWw7CisJ cGF0aG5vZGUtPnRyYW5zaXRpb25TcGFjZSA9IGFnZ19jb3N0cyA/IGFnZ19jb3N0cy0+dHJhbnNp dGlvblNwYWNlIDogMDsKIAogCUFzc2VydChyb2xsdXBzICE9IE5JTCk7CiAJQXNzZXJ0KGFnZ3N0 cmF0ZWd5ICE9IEFHR19QTEFJTiB8fCBsaXN0X2xlbmd0aChyb2xsdXBzKSA9PSAxKTsKQEAgLTMw NjcsNyArMzA3MCw4IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0aChQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJIGhhdmluZ19xdWFsLAogCQkJCQkgc3VicGF0aC0+c3RhcnR1cF9jb3N0LAogCQkJ CQkgc3VicGF0aC0+dG90YWxfY29zdCwKLQkJCQkJIHN1YnBhdGgtPnJvd3MpOworCQkJCQkgc3Vi cGF0aC0+cm93cywKKwkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsKIAkJCWlzX2Zp cnN0ID0gZmFsc2U7CiAJCQlpZiAoIXJvbGx1cC0+aXNfaGFzaGVkKQogCQkJCWlzX2ZpcnN0X3Nv cnQgPSBmYWxzZTsKQEAgLTMwOTAsNyArMzA5NCw4IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCSByb2xsdXAtPm51bUdyb3VwcywKIAkJCQkJCSBo YXZpbmdfcXVhbCwKIAkJCQkJCSAwLjAsIDAuMCwKLQkJCQkJCSBzdWJwYXRoLT5yb3dzKTsKKwkJ CQkJCSBzdWJwYXRoLT5yb3dzLAorCQkJCQkJIHN1YnBhdGgtPnBhdGh0YXJnZXQtPndpZHRoKTsK IAkJCQlpZiAoIXJvbGx1cC0+aXNfaGFzaGVkKQogCQkJCQlpc19maXJzdF9zb3J0ID0gZmFsc2U7 CiAJCQl9CkBAIC0zMTE1LDcgKzMxMjAsOCBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BhdGgoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkgaGF2aW5nX3F1YWwsCiAJCQkJCQkgc29ydF9wYXRoLnN0 YXJ0dXBfY29zdCwKIAkJCQkJCSBzb3J0X3BhdGgudG90YWxfY29zdCwKLQkJCQkJCSBzb3J0X3Bh dGgucm93cyk7CisJCQkJCQkgc29ydF9wYXRoLnJvd3MsCisJCQkJCQkgc3VicGF0aC0+cGF0aHRh cmdldC0+d2lkdGgpOwogCQkJfQogCiAJCQlwYXRobm9kZS0+cGF0aC50b3RhbF9jb3N0ICs9IGFn Z19wYXRoLnRvdGFsX2Nvc3Q7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IDdjNmYwNTc0 YjM3Li4wYmUyNmZlMDM3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTM1MjYsMTYg KzM1MjYsOCBAQCBkb3VibGUKIGVzdGltYXRlX2hhc2hhZ2dfdGFibGVzaXplKFBhdGggKnBhdGgs IGNvbnN0IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkgICBkb3VibGUgZE51bUdy b3VwcykKIHsKLQlTaXplCQloYXNoZW50cnlzaXplOwotCi0JLyogRXN0aW1hdGUgcGVyLWhhc2gt ZW50cnkgc3BhY2UgYXQgdHVwbGUgd2lkdGguLi4gKi8KLQloYXNoZW50cnlzaXplID0gTUFYQUxJ R04ocGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpICsKLQkJTUFYQUxJR04oU2l6ZW9mTWluaW1hbFR1 cGxlSGVhZGVyKTsKLQotCS8qIHBsdXMgc3BhY2UgZm9yIHBhc3MtYnktcmVmIHRyYW5zaXRpb24g dmFsdWVzLi4uICovCi0JaGFzaGVudHJ5c2l6ZSArPSBhZ2dfY29zdHMtPnRyYW5zaXRpb25TcGFj ZTsKLQkvKiBwbHVzIHRoZSBwZXItaGFzaC1lbnRyeSBvdmVyaGVhZCAqLwotCWhhc2hlbnRyeXNp emUgKz0gaGFzaF9hZ2dfZW50cnlfc2l6ZShhZ2dfY29zdHMtPm51bUFnZ3MpOworCVNpemUJCWhh c2hlbnRyeXNpemUgPSBoYXNoX2FnZ19lbnRyeV9zaXplKAorCQlhZ2dfY29zdHMtPm51bUFnZ3Ms IHBhdGgtPnBhdGh0YXJnZXQtPndpZHRoLCBhZ2dfY29zdHMtPnRyYW5zaXRpb25TcGFjZSk7CiAK IAkvKgogCSAqIE5vdGUgdGhhdCB0aGlzIGRpc3JlZ2FyZHMgdGhlIGVmZmVjdCBvZiBmaWxsLWZh Y3RvciBhbmQgZ3Jvd3RoIHBvbGljeQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBiMWY2 MjkxYjk5ZS4uZGFhZmYwOGNlZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0xMjAs NiArMTIwLDcgQEAgYm9vbAkJZW5hYmxlRnN5bmMgPSB0cnVlOwogYm9vbAkJYWxsb3dTeXN0ZW1U YWJsZU1vZHMgPSBmYWxzZTsKIGludAkJCXdvcmtfbWVtID0gMTAyNDsKIGludAkJCW1haW50ZW5h bmNlX3dvcmtfbWVtID0gMTYzODQ7Citib29sCQloYXNoYWdnX21lbV9vdmVyZmxvdyA9IGZhbHNl OwogaW50CQkJbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgPSAyOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjLmMKaW5kZXggOTYzMDg2NmE1ZjkuLmY3Y2NlNjJlYWMwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjLmMKQEAgLTEwMDIsNiArMTAwMiwyNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ib29sIENv bmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJdHJ1ZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCisJ eworCQl7ImVuYWJsZV9oYXNoYWdnX3NwaWxsIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19N RVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgaGFz aGVkIGFnZ3JlZ2F0aW9uIHBsYW5zIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGV4Y2VlZCB3b3JrX21l bS4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAorCQkmZW5hYmxlX2hhc2hhZ2df c3BpbGwsCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCXsKKwkJeyJoYXNoYWdn X21lbV9vdmVyZmxvdyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9ELAorCQkJZ2V0 dGV4dF9ub29wKCJFbmFibGVzIGhhc2hlZCBhZ2dyZWdhdGlvbiB0byBvdmVyZmxvdyB3b3JrX21l bSBhdCBleGVjdXRpb24gdGltZS4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAor CQkmaGFzaGFnZ19tZW1fb3ZlcmZsb3csCisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJ fSwKIAl7CiAJCXsiZW5hYmxlX21hdGVyaWFsIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19N RVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgbWF0 ZXJpYWxpemF0aW9uLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4 cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggNzExMjU1ODM2M2Yu LjIzNjVmNWJkYWZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTIyNiw5ICsyMjYsMTMg QEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tf QVJHUywKIAlFRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfTlVMTFMsCiAJRUVPUF9BR0dfSU5J VF9UUkFOUywKKwlFRU9QX0FHR19JTklUX1RSQU5TX1NQSUxMRUQsCiAJRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLLAorCUVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDS19TUElMTEVELAogCUVF T1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMLAorCUVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQ SUxMRUQsCiAJRUVPUF9BR0dfUExBSU5fVFJBTlMsCisJRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJ TExFRCwKIAlFRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RBVFVNLAogCUVFT1BfQUdHX09SREVSRURf VFJBTlNfVFVQTEUsCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDZlZjNlMWZlMDY5Li42 ZTdmMzU4ZmEyZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0xNDAsMTAgKzE0MCwxNSBA QCBleHRlcm4gVHVwbGVIYXNoVGFibGUgQnVpbGRUdXBsZUhhc2hUYWJsZUV4dChQbGFuU3RhdGUg KnBhcmVudCwKIGV4dGVybiBUdXBsZUhhc2hFbnRyeSBMb29rdXBUdXBsZUhhc2hFbnRyeShUdXBs ZUhhc2hUYWJsZSBoYXNodGFibGUsCiAJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CiAJCQkJCQkJCQkJICAgYm9vbCAqaXNuZXcpOworZXh0ZXJuIFR1cGxlSGFzaEVudHJ5IExvb2t1 cFR1cGxlSGFzaEVudHJ5SGFzaChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsCisJCQkJCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkgICBib29sICppc25ldywgdWlu dDMyIGhhc2gpOwogZXh0ZXJuIFR1cGxlSGFzaEVudHJ5IEZpbmRUdXBsZUhhc2hFbnRyeShUdXBs ZUhhc2hUYWJsZSBoYXNodGFibGUsCiAJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAog CQkJCQkJCQkJCSBFeHByU3RhdGUgKmVxY29tcCwKIAkJCQkJCQkJCQkgRm1nckluZm8gKmhhc2hm dW5jdGlvbnMpOworZXh0ZXJuIHVpbnQzMiBUdXBsZUhhc2hUYWJsZUhhc2goc3RydWN0IHR1cGxl aGFzaF9oYXNoICp0YiwKKwkJCQkJCQkJIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSk7CiBleHRl cm4gdm9pZCBSZXNldFR1cGxlSGFzaFRhYmxlKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSk7CiAK IC8qCkBAIC0yNTAsNyArMjU1LDcgQEAgZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRRdWFsKExp c3QgKnF1YWwsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0 Q2hlY2soTGlzdCAqcXVhbCwgUGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJuIExpc3QgKkV4ZWNJ bml0RXhwckxpc3QoTGlzdCAqbm9kZXMsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHBy U3RhdGUgKkV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgc3RydWN0IEFnZ1N0 YXRlUGVyUGhhc2VEYXRhICpwaGFzZSwKLQkJCQkJCQkJCWJvb2wgZG9Tb3J0LCBib29sIGRvSGFz aCk7CisJCQkJCQkJCQlib29sIGRvU29ydCwgYm9vbCBkb0hhc2gsIGJvb2wgc3BpbGxlZCk7CiBl eHRlcm4gRXhwclN0YXRlICpFeGVjQnVpbGRHcm91cGluZ0VxdWFsKFR1cGxlRGVzYyBsZGVzYywg VHVwbGVEZXNjIHJkZXNjLAogCQkJCQkJCQkJCSBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqbG9w cywgY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnJvcHMsCiAJCQkJCQkJCQkJIGludCBudW1Db2xz LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCmluZGV4IDJmZTgyZGE2ZmY3Li5hZTlmZTA1YWJjNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL25vZGVBZ2cuaApAQCAtMzA0LDExICszMDQsMTMgQEAgdHlwZWRlZiBzdHJ1Y3Qg QWdnU3RhdGVQZXJIYXNoRGF0YQogCUFnZwkJICAgKmFnZ25vZGU7CQkvKiBvcmlnaW5hbCBBZ2cg bm9kZSwgZm9yIG51bUdyb3VwcyBldGMuICovCiB9CQkJQWdnU3RhdGVQZXJIYXNoRGF0YTsKIAor I2RlZmluZSBIQVNIQUdHX01BWF9QQVJUSVRJT05TIDI1NgogCiBleHRlcm4gQWdnU3RhdGUgKkV4 ZWNJbml0QWdnKEFnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJu IHZvaWQgRXhlY0VuZEFnZyhBZ2dTdGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjUmVTY2Fu QWdnKEFnZ1N0YXRlICpub2RlKTsKIAotZXh0ZXJuIFNpemUgaGFzaF9hZ2dfZW50cnlfc2l6ZShp bnQgbnVtQWdncyk7CitleHRlcm4gU2l6ZSBoYXNoX2FnZ19lbnRyeV9zaXplKGludCBudW1BZ2dz LCBTaXplIHR1cGxlV2lkdGgsCisJCQkJCQkJCVNpemUgdHJhbnNpdGlvblNwYWNlKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIE5PREVBR0dfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA2MmQ2NGFhMGExNC4uMjg4NzY0 OTI5Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCkBAIC0yNDQsNiArMjQ0LDcgQEAgZXh0ZXJuIGJvb2wgZW5hYmxlRnN5 bmM7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBhbGxvd1N5c3RlbVRhYmxlTW9kczsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgd29ya19tZW07CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1haW50 ZW5hbmNlX3dvcmtfbWVtOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaGFzaGFnZ19tZW1fb3Zl cmZsb3c7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93 b3JrZXJzOwogCiBleHRlcm4gaW50CVZhY3V1bUNvc3RQYWdlSGl0OwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCAxZjZmNWJiYzIwNy4uNzcyZDliOGQ1YzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBA IC0yMDc0LDEzICsyMDc0LDMyIEBAIHR5cGVkZWYgc3RydWN0IEFnZ1N0YXRlCiAJSGVhcFR1cGxl CWdycF9maXJzdFR1cGxlOyAvKiBjb3B5IG9mIGZpcnN0IHR1cGxlIG9mIGN1cnJlbnQgZ3JvdXAg Ki8KIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgaW4gQUdHX0hBU0hFRCBhbmQgQUdHX01JWEVE IG1vZGVzOiAqLwogCWJvb2wJCXRhYmxlX2ZpbGxlZDsJLyogaGFzaCB0YWJsZSBmaWxsZWQgeWV0 PyAqLwotCWludAkJCW51bV9oYXNoZXM7CisJaW50CQkJbnVtX2hhc2hlczsJCS8qIG51bWJlciBv ZiBoYXNoIHRhYmxlcyBhY3RpdmUgYXQgb25jZSAqLworCWRvdWJsZQkJaGFzaGVudHJ5c2l6ZTsJ LyogZXN0aW1hdGUgcmV2aXNlZCBkdXJpbmcgZXhlY3V0aW9uICovCisJc3RydWN0IEhhc2hUYXBl SW5mbyAqaGFzaF90YXBlaW5mbzsgLyogbWV0YWRhdGEgZm9yIHNwaWxsIHRhcGVzICovCisJc3Ry dWN0IEhhc2hBZ2dTcGlsbCAqaGFzaF9zcGlsbHM7IC8qIEhhc2hBZ2dTcGlsbCBmb3IgZWFjaCBo YXNoIHRhYmxlLAorCQkJCQkJCQkJCSBleGlzdHMgb25seSBkdXJpbmcgZmlyc3QgcGFzcyBpZiBz cGlsbGVkICovCisJVHVwbGVUYWJsZVNsb3QgKmhhc2hfc3BpbGxfc2xvdDsgLyogc2xvdCBmb3Ig cmVhZGluZyBmcm9tIHNwaWxsIGZpbGVzICovCisJYm9vbAkJaGFzaF9ldmVyX3NwaWxsZWQ7CS8q IGV2ZXIgc3BpbGxlZCBkdXJpbmcgdGhpcyBleGVjdXRpb24/ICovCisJYm9vbAkJaGFzaF9zcGls bF9tb2RlOwkvKiB3ZSBoaXQgYSBsaW1pdCBkdXJpbmcgdGhlIGN1cnJlbnQgYmF0Y2gKKwkJCQkJ CQkJCSAgIGFuZCB3ZSBtdXN0IG5vdCBjcmVhdGUgbmV3IGdyb3VwcyAqLworCVNpemUJCWhhc2hf YWxsb2NfbGFzdDsgICAgLyogcHJldmlvdXMgdG90YWwgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwlT aXplCQloYXNoX2FsbG9jX2N1cnJlbnQ7IC8qIGN1cnJlbnQgdG90YWwgbWVtb3J5IGFsbG9jYXRp b24gKi8KKwlTaXplCQloYXNoX21lbV9saW1pdDsJLyogbGltaXQgYmVmb3JlIHNwaWxsaW5nIGhh c2ggdGFibGUgKi8KKwlTaXplCQloYXNoX21lbV9wZWFrOwkvKiBwZWFrIGhhc2ggdGFibGUgbWVt b3J5IHVzYWdlICovCisJbG9uZwkJaGFzaF9uZ3JvdXBzX2N1cnJlbnQ7CS8qIG51bWJlciBvZiBn cm91cHMgY3VycmVudGx5IGluCisJCQkJCQkJCQkJICAgbWVtb3J5IGluIGFsbCBoYXNoIHRhYmxl cyAqLworCWxvbmcJCWhhc2hfbmdyb3Vwc19saW1pdDsJLyogbGltaXQgYmVmb3JlIHNwaWxsaW5n IGhhc2ggdGFibGUgKi8KKwlsb25nCQloYXNoX2Rpc2tfdXNlZDsgLyoga0Igb2YgZGlzayBzcGFj ZSB1c2VkICovCisJaW50CQkJaGFzaF9iYXRjaGVzX3VzZWQ7CS8qIGJhdGNoZXMgdXNlZCBkdXJp bmcgZW50aXJlIGV4ZWN1dGlvbiAqLworCUxpc3QJICAgKmhhc2hfYmF0Y2hlczsJLyogaGFzaCBi YXRjaGVzIHJlbWFpbmluZyB0byBiZSBwcm9jZXNzZWQgKi8KKwogCUFnZ1N0YXRlUGVySGFzaCBw ZXJoYXNoOwkvKiBhcnJheSBvZiBwZXItaGFzaHRhYmxlIGRhdGEgKi8KIAlBZ2dTdGF0ZVBlckdy b3VwICpoYXNoX3Blcmdyb3VwOwkvKiBncm91cGluZyBzZXQgaW5kZXhlZCBhcnJheSBvZgogCQkJ CQkJCQkJCSAqIHBlci1ncm91cCBwb2ludGVycyAqLwogCiAJLyogc3VwcG9ydCBmb3IgZXZhbHVh dGlvbiBvZiBhZ2cgaW5wdXQgZXhwcmVzc2lvbnM6ICovCi0jZGVmaW5lIEZJRUxETk9fQUdHU1RB VEVfQUxMX1BFUkdST1VQUyAzNAorI2RlZmluZSBGSUVMRE5PX0FHR1NUQVRFX0FMTF9QRVJHUk9V UFMgNDkKIAlBZ2dTdGF0ZVBlckdyb3VwICphbGxfcGVyZ3JvdXBzOwkvKiBhcnJheSBvZiBmaXJz dCAtPnBlcmdyb3VwcywgdGhhbgogCQkJCQkJCQkJCSAqIC0+aGFzaF9wZXJncm91cCAqLwogCVBy b2plY3Rpb25JbmZvICpjb21iaW5lZHByb2o7CS8qIHByb2plY3Rpb24gbWFjaGluZXJ5ICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IDNkM2JlMTk3ZTBlLi5iZTU5MmQwZmVlNCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmgKQEAgLTE2NjMsNiArMTY2Myw3IEBAIHR5cGVkZWYgc3RydWN0IEFnZ1BhdGgK IAlBZ2dTdHJhdGVneSBhZ2dzdHJhdGVneTsJLyogYmFzaWMgc3RyYXRlZ3ksIHNlZSBub2Rlcy5o ICovCiAJQWdnU3BsaXQJYWdnc3BsaXQ7CQkvKiBhZ2ctc3BsaXR0aW5nIG1vZGUsIHNlZSBub2Rl cy5oICovCiAJZG91YmxlCQludW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3Vw cyBpbiBpbnB1dCAqLworCWludDMyCQl0cmFuc2l0aW9uU3BhY2U7CS8qIGVzdGltYXRlZCB0cmFu c2l0aW9uIHN0YXRlIHNpemUgKi8KIAlMaXN0CSAgICpncm91cENsYXVzZTsJLyogYSBsaXN0IG9m IFNvcnRHcm91cENsYXVzZSdzICovCiAJTGlzdAkgICAqcXVhbDsJCQkvKiBxdWFscyAoSEFWSU5H IHF1YWxzKSwgaWYgYW55ICovCiB9IEFnZ1BhdGg7CkBAIC0xNzAwLDYgKzE3MDEsNyBAQCB0eXBl ZGVmIHN0cnVjdCBHcm91cGluZ1NldHNQYXRoCiAJQWdnU3RyYXRlZ3kgYWdnc3RyYXRlZ3k7CS8q IGJhc2ljIHN0cmF0ZWd5ICovCiAJTGlzdAkgICAqcm9sbHVwczsJCS8qIGxpc3Qgb2YgUm9sbHVw RGF0YSAqLwogCUxpc3QJICAgKnF1YWw7CQkJLyogcXVhbHMgKEhBVklORyBxdWFscyksIGlmIGFu eSAqLworCWludDMyCQl0cmFuc2l0aW9uU3BhY2U7CS8qIGVzdGltYXRlZCB0cmFuc2l0aW9uIHN0 YXRlIHNpemUgKi8KIH0gR3JvdXBpbmdTZXRzUGF0aDsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK aW5kZXggMzJjMGQ4N2Y4MGUuLmY0MTgzZTFlZmE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAt ODEzLDYgKzgxMyw3IEBAIHR5cGVkZWYgc3RydWN0IEFnZwogCU9pZAkJICAgKmdycE9wZXJhdG9y czsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwogCU9pZAkJICAgKmdy cENvbGxhdGlvbnM7CiAJbG9uZwkJbnVtR3JvdXBzOwkJLyogZXN0aW1hdGVkIG51bWJlciBvZiBn cm91cHMgaW4gaW5wdXQgKi8KKwlpbnQzMgkJdHJhbnNpdGlvblNwYWNlOwkvKiBlc3RpbWF0ZWQg dHJhbnNpdGlvbiBzdGF0ZSBzaXplICovCiAJQml0bWFwc2V0ICAqYWdnUGFyYW1zOwkJLyogSURz IG9mIFBhcmFtcyB1c2VkIGluIEFnZ3JlZiBpbnB1dHMgKi8KIAkvKiBOb3RlOiBwbGFubmVyIHBy b3ZpZGVzIG51bUdyb3VwcyAmIGFnZ1BhcmFtcyBvbmx5IGluIEhBU0hFRC9NSVhFRCBjYXNlICov CiAJTGlzdAkgICAqZ3JvdXBpbmdTZXRzOwkvKiBncm91cGluZyBzZXRzIHRvIHVzZSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKaW5kZXggY2IwMTJiYTE5ODAuLjY1NzJkYzI0Njk5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9j b3N0LmgKQEAgLTU0LDYgKzU0LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2Jp dG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX2hhc2hhZ2c7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaGFzaGFnZ19z cGlsbDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9uZXN0bG9vcDsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9tYXRlcmlhbDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9tZXJnZWpvaW47CkBAIC0xMTQsNyArMTE1LDcgQEAgZXh0ZXJuIHZvaWQgY29zdF9h Z2coUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCSBpbnQgbnVtR3JvdXBDb2xz LCBkb3VibGUgbnVtR3JvdXBzLAogCQkJCQkgTGlzdCAqcXVhbHMsCiAJCQkJCSBDb3N0IGlucHV0 X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAotCQkJCQkgZG91YmxlIGlucHV0 X3R1cGxlcyk7CisJCQkJCSBkb3VibGUgaW5wdXRfdHVwbGVzLCBkb3VibGUgaW5wdXRfd2lkdGgp OwogZXh0ZXJuIHZvaWQgY29zdF93aW5kb3dhZ2coUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkgICBMaXN0ICp3aW5kb3dGdW5jcywgaW50IG51bVBhcnRDb2xzLCBpbnQgbnVt T3JkZXJDb2xzLAogCQkJCQkJICAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRf dG90YWxfY29zdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5o IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKaW5kZXggZWFiNDg2YTYyMTQuLmM3 YmRhMmIwOTE3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAor KysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtNTQsOCArNTQsOCBAQCBl eHRlcm4gU29ydCAqbWFrZV9zb3J0X2Zyb21fc29ydGNsYXVzZXMoTGlzdCAqc29ydGNscywgUGxh biAqbGVmdHRyZWUpOwogZXh0ZXJuIEFnZyAqbWFrZV9hZ2coTGlzdCAqdGxpc3QsIExpc3QgKnF1 YWwsCiAJCQkJCSBBZ2dTdHJhdGVneSBhZ2dzdHJhdGVneSwgQWdnU3BsaXQgYWdnc3BsaXQsCiAJ CQkJCSBpbnQgbnVtR3JvdXBDb2xzLCBBdHRyTnVtYmVyICpncnBDb2xJZHgsIE9pZCAqZ3JwT3Bl cmF0b3JzLCBPaWQgKmdycENvbGxhdGlvbnMsCi0JCQkJCSBMaXN0ICpncm91cGluZ1NldHMsIExp c3QgKmNoYWluLAotCQkJCQkgZG91YmxlIGROdW1Hcm91cHMsIFBsYW4gKmxlZnR0cmVlKTsKKwkJ CQkJIExpc3QgKmdyb3VwaW5nU2V0cywgTGlzdCAqY2hhaW4sIGRvdWJsZSBkTnVtR3JvdXBzLAor CQkJCQkgaW50MzIgdHJhbnNpdGlvblNwYWNlLCBQbGFuICpsZWZ0dHJlZSk7CiBleHRlcm4gTGlt aXQgKm1ha2VfbGltaXQoUGxhbiAqbGVmdHRyZWUsIE5vZGUgKmxpbWl0T2Zmc2V0LCBOb2RlICps aW1pdENvdW50KTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0 CmluZGV4IGY0NTdiNWIxNTBmLi43ZWVlYWFhNWU0YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2FnZ3JlZ2F0ZXMub3V0CkBAIC0yMzU3LDMgKzIzNTcsMTI0IEBAIGV4cGxhaW4gKGNvc3Rz IG9mZikKICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBvbmVrCiAoOCByb3dzKQogCist LQorLS0gQ29tcGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxh bnMgdXNpbmcgaGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2Fz ZXMgYnkgc2V0dGluZyB3b3JrX21lbSBsb3cuCistLQorc2V0IHdvcmtfbWVtPSc2NGtCJzsKKy0t IFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxz ZTsKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg ZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOwor ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0 ZQorICAgR3JvdXAgS2V5OiAoKGcgJSAxMDAwMDApKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiAoKGcgJSAxMDAwMDApKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcKKyg1IHJvd3MpCisKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMSBhcwor c2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFz IGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkgZworICBncm91cCBieSBnJTEw MDAwMDsKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMiBhcworc2VsZWN0ICogZnJvbQorICAodmFs dWVzICgxMDApLCAoMzAwKSwgKDUwMCkpIGFzIHIoYSksCisgIGxhdGVyYWwgKAorICAgIHNlbGVj dCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwKKyAgICAgICAgICAgYXJyYXlfYWdnKGc6Om51bWVyaWMp IGFzIGMyLAorCSAgIGNvdW50KCopIGFzIGMzCisgICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwg MTk5OSkgZworICAgIHdoZXJlIGcgPCByLmEKKyAgICBncm91cCBieSBnLzIpIGFzIHM7CitzZXQg aml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMyBhcwor c2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBzdW0oNzo6aW50NCkgYXMgYzIsIGNvdW50KCop IGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8y OworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF80IGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMg YzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CistLSBQcm9kdWNlIHJl c3VsdHMgd2l0aCBoYXNoIGFnZ3JlZ2F0aW9uCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOwor c2V0IGVuYWJsZV9zb3J0ID0gZmFsc2U7CitzZXQgaml0X2Fib3ZlX2Nvc3QgPSAwOworZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykgYXMg YzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkgZwor ICBncm91cCBieSBnJTEwMDAwMDsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoZyAlIDEwMDAwMCkKKyAgIC0+ICBGdW5jdGlvbiBT Y2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMyByb3dzKQorCitjcmVhdGUgdGFibGUgYWdnX2hh c2hfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykgYXMgYzIsIGNv dW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkgZworICBncm91 cCBieSBnJTEwMDAwMDsKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8yIGFzCitzZWxlY3QgKiBmcm9t CisgICh2YWx1ZXMgKDEwMCksICgzMDApLCAoNTAwKSkgYXMgcihhKSwKKyAgbGF0ZXJhbCAoCisg ICAgc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLAorICAgICAgICAgICBhcnJheV9hZ2coZzo6 bnVtZXJpYykgYXMgYzIsCisJICAgY291bnQoKikgYXMgYzMKKyAgICBmcm9tIGdlbmVyYXRlX3Nl cmllcygwLCAxOTk5KSBnCisgICAgd2hlcmUgZyA8IHIuYQorICAgIGdyb3VwIGJ5IGcvMikgYXMg czsKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRhYmxlIGFnZ19oYXNo XzMgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3VtKDc6OmludDQpIGFzIGMyLCBj b3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3Vw IGJ5IGcvMjsKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF80IGFzCitzZWxlY3QgKGcvMik6Om51bWVy aWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CitzZXQgZW5h YmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7CistLSBDb21wYXJlIGdy b3VwIGFnZ3JlZ2F0aW9uIHJlc3VsdHMgdG8gaGFzaCBhZ2dyZWdhdGlvbiByZXN1bHRzCisoc2Vs ZWN0ICogZnJvbSBhZ2dfaGFzaF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8xKQor ICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBm cm9tIGFnZ19oYXNoXzEpOworIGMxIHwgYzIgfCBjMyAKKy0tLS0rLS0tLSstLS0tCisoMCByb3dz KQorCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19n cm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8yIGV4Y2VwdCBz ZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzIpOworIGEgfCBjMSB8IGMyIHwgYzMgCistLS0rLS0tLSst LS0tKy0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzMgZXhjZXB0IHNl bGVjdCAqIGZyb20gYWdnX2dyb3VwXzMpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdn X2dyb3VwXzMgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMyk7CisgYzEgfCBjMiB8IGMz IAorLS0tLSstLS0tKy0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzQg ZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzQpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAq IGZyb20gYWdnX2dyb3VwXzQgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfNCk7CisgYzEg fCBjMiB8IGMzIAorLS0tLSstLS0tKy0tLS0KKygwIHJvd3MpCisKK2Ryb3AgdGFibGUgYWdnX2dy b3VwXzE7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8yOworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMzsK K2Ryb3AgdGFibGUgYWdnX2dyb3VwXzQ7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzE7Citkcm9wIHRh YmxlIGFnZ19oYXNoXzI7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzM7Citkcm9wIHRhYmxlIGFnZ19o YXNoXzQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dyb3VwaW5nc2V0 cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dyb3VwaW5nc2V0cy5vdXQKaW5kZXgg YzFmODAyYzg4YTcuLjc2N2Y2MGE5NmM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2dyb3VwaW5nc2V0cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9n cm91cGluZ3NldHMub3V0CkBAIC0xNjMzLDQgKzE2MzMsMTI3IEBAIHNlbGVjdCB2fHwnYScsIGNh c2Ugd2hlbiBncm91cGluZyh2fHwnYScpID0gMSB0aGVuIDEgZWxzZSAwIGVuZCwgY291bnQoKikK ICAgICAgICAgICB8ICAgIDEgfCAgICAgMgogKDQgcm93cykKIAorLS0KKy0tIENvbXBhcmUgcmVz dWx0cyBiZXR3ZWVuIHBsYW5zIHVzaW5nIHNvcnRpbmcgYW5kIHBsYW5zIHVzaW5nIGhhc2gKKy0t IGFnZ3JlZ2F0aW9uLiBGb3JjZSBzcGlsbGluZyBpbiBib3RoIGNhc2VzIGJ5IHNldHRpbmcgd29y a19tZW0gbG93LgorLS0KK1NFVCB3b3JrX21lbT0nNjRrQic7CistLSBQcm9kdWNlIHJlc3VsdHMg d2l0aCBzb3J0aW5nLgorc2V0IGVuYWJsZV9oYXNoYWdnID0gZmFsc2U7CitzZXQgaml0X2Fib3Zl X2Nvc3QgPSAwOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAs IHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3Qg ZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAs ZzEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogKChn LmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgR3JvdXAgS2V5OiAo KGcuZyAlIDEwMDApKSwgKChnLmcgJSAxMDApKQorICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMDAp KQorICAgR3JvdXAgS2V5OiAoKQorICAgU29ydCBLZXk6ICgoZy5nICUgMTAwKSksICgoZy5nICUg MTApKQorICAgICBHcm91cCBLZXk6ICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgICBH cm91cCBLZXk6ICgoZy5nICUgMTAwKSkKKyAgIFNvcnQgS2V5OiAoKGcuZyAlIDEwKSksICgoZy5n ICUgMTAwMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMCkpLCAoKGcuZyAlIDEwMDApKQor ICAgICBHcm91cCBLZXk6ICgoZy5nICUgMTApKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiAoKGcuZyAlIDEwMDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICAgICAg ICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDE0IHJvd3MpCisKK2Ny ZWF0ZSB0YWJsZSBnc19ncm91cF8xIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6 Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnJTEwMDAg YXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRl X3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOwor c2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMiBh cworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1h eChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZy8yMCBhcyBnMTAwMCwgZy8yMDAgYXMgZzEwMCwg Zy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcwor Z3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworY3JlYXRlIHRhYmxlIGdzX2dyb3VwXzMg YXMKK3NlbGVjdCBnMTAwLCBnMTAsIGFycmF5X2FnZyhnKSBhcyBhLCBjb3VudCgqKSBhcyBjLCBt YXgoZzo6dGV4dCkgYXMgbSBmcm9tCisgIChzZWxlY3QgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFz IGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkg Z3JvdXBpbmcgc2V0cyAoZzEwMCxnMTApOworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggaGFzaCBh Z2dyZWdhdGlvbi4KK3NldCBlbmFibGVfaGFzaGFnZyA9IHRydWU7CitzZXQgZW5hYmxlX3NvcnQg PSBmYWxzZTsKK3NldCB3b3JrX21lbT0nNjRrQic7CitzZXQgaml0X2Fib3ZlX2Nvc3QgPSAwOwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1l cmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcx MDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogKChnLmcgJSAxMDAwKSks ICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMDAp KSwgKChnLmcgJSAxMDApKQorICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMDApKQorICAgR3JvdXAg S2V5OiAoKQorICAgU29ydCBLZXk6ICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgICBH cm91cCBLZXk6ICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAgICBHcm91cCBLZXk6ICgo Zy5nICUgMTAwKSkKKyAgIFNvcnQgS2V5OiAoKGcuZyAlIDEwKSksICgoZy5nICUgMTAwMCkpCisg ICAgIEdyb3VwIEtleTogKChnLmcgJSAxMCkpLCAoKGcuZyAlIDEwMDApKQorICAgICBHcm91cCBL ZXk6ICgoZy5nICUgMTApKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAoKGcuZyAl IDEwMDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICAgICAgICAtPiAgRnVuY3Rp b24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDE0IHJvd3MpCisKK2NyZWF0ZSB0YWJsZSBn c19oYXNoXzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNv dW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUx MDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5 OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CitzZXQgaml0X2Fib3Zl X2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzIgYXMKK3NlbGVjdCBnMTAw MCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJv bQorICAoc2VsZWN0IGcvMjAgYXMgZzEwMDAsIGcvMjAwIGFzIGcxMDAsIGcvMjAwMCBhcyBnMTAs IGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUg KGcxMDAwLGcxMDAsZzEwKTsKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzMgYXMKK3NlbGVjdCBnMTAw LCBnMTAsIGFycmF5X2FnZyhnKSBhcyBhLCBjb3VudCgqKSBhcyBjLCBtYXgoZzo6dGV4dCkgYXMg bSBmcm9tCisgIChzZWxlY3QgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAo ZzEwMCxnMTApOworc2V0IGVuYWJsZV9zb3J0ID0gdHJ1ZTsKK3NldCB3b3JrX21lbSB0byBkZWZh dWx0OworLS0gQ29tcGFyZSByZXN1bHRzCisoc2VsZWN0ICogZnJvbSBnc19oYXNoXzEgZXhjZXB0 IHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBn c19ncm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMSk7CisgZzEwMDAgfCBnMTAw IHwgZzEwIHwgc3VtIHwgY291bnQgfCBtYXggCistLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLSst LS0tLS0tKy0tLS0tCisoMCByb3dzKQorCisoc2VsZWN0ICogZnJvbSBnc19oYXNoXzIgZXhjZXB0 IHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMikKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBn c19ncm91cF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMik7CisgZzEwMDAgfCBnMTAw IHwgZzEwIHwgc3VtIHwgY291bnQgfCBtYXggCistLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLSst LS0tLS0tKy0tLS0tCisoMCByb3dzKQorCisoc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0g ZnJvbSBnc19oYXNoXzMgZXhjZXB0CisgIHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxtIGZy b20gZ3NfZ3JvdXBfMykKKyAgICB1bmlvbiBhbGwKKyhzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEp LGMsbSBmcm9tIGdzX2dyb3VwXzMgZXhjZXB0CisgIHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSks YyxtIGZyb20gZ3NfaGFzaF8zKTsKKyBnMTAwIHwgZzEwIHwgdW5uZXN0IHwgYyB8IG0gCistLS0t LS0rLS0tLS0rLS0tLS0tLS0rLS0tKy0tLQorKDAgcm93cykKKworZHJvcCB0YWJsZSBnc19ncm91 cF8xOworZHJvcCB0YWJsZSBnc19ncm91cF8yOworZHJvcCB0YWJsZSBnc19ncm91cF8zOworZHJv cCB0YWJsZSBnc19oYXNoXzE7Citkcm9wIHRhYmxlIGdzX2hhc2hfMjsKK2Ryb3AgdGFibGUgZ3Nf aGFzaF8zOwogLS0gZW5kCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Nl bGVjdF9kaXN0aW5jdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0 aW5jdC5vdXQKaW5kZXggZjM2OTZjNmQxZGUuLjExYzZmNTBmYmZhIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5jdC5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0CkBAIC0xNDgsNiArMTQ4LDY4IEBA IFNFTEVDVCBjb3VudCgqKSBGUk9NCiAgICAgIDQKICgxIHJvdykKIAorLS0KKy0tIENvbXBhcmUg cmVzdWx0cyBiZXR3ZWVuIHBsYW5zIHVzaW5nIHNvcnRpbmcgYW5kIHBsYW5zIHVzaW5nIGhhc2gK Ky0tIGFnZ3JlZ2F0aW9uLiBGb3JjZSBzcGlsbGluZyBpbiBib3RoIGNhc2VzIGJ5IHNldHRpbmcg d29ya19tZW0gbG93LgorLS0KK1NFVCB3b3JrX21lbT0nNjRrQic7CistLSBQcm9kdWNlIHJlc3Vs dHMgd2l0aCBzb3J0aW5nLgorU0VUIGVuYWJsZV9oYXNoYWdnPUZBTFNFOworU0VUIGppdF9hYm92 ZV9jb3N0PTA7CitFWFBMQUlOIChjb3N0cyBvZmYpCitTRUxFQ1QgRElTVElOQ1QgZyUxMDAwIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgVW5pcXVlCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6 ICgoZyAlIDEwMDApKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2Vy aWVzIGcKKyg0IHJvd3MpCisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9ncm91cF8xIEFTCitTRUxF Q1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKK1NFVCBq aXRfYWJvdmVfY29zdCBUTyBERUZBVUxUOworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2dyb3VwXzIg QVMKK1NFTEVDVCBESVNUSU5DVCAoZyUxMDAwKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmllcygw LDk5OTkpIGc7CitTRVQgZW5hYmxlX2hhc2hhZ2c9VFJVRTsKKy0tIFByb2R1Y2UgcmVzdWx0cyB3 aXRoIGhhc2ggYWdncmVnYXRpb24uCitTRVQgZW5hYmxlX3NvcnQ9RkFMU0U7CitTRVQgaml0X2Fi b3ZlX2Nvc3Q9MDsKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6IChnICUgMTAwMCkKKyAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMyByb3dzKQorCitDUkVBVEUgVEFC TEUgZGlzdGluY3RfaGFzaF8xIEFTCitTRUxFQ1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJh dGVfc2VyaWVzKDAsOTk5OSkgZzsKK1NFVCBqaXRfYWJvdmVfY29zdCBUTyBERUZBVUxUOworQ1JF QVRFIFRBQkxFIGRpc3RpbmN0X2hhc2hfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEwMDApOjp0 ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKK1NFVCBlbmFibGVfc29ydD1UUlVF OworU0VUIHdvcmtfbWVtIFRPIERFRkFVTFQ7CistLSBDb21wYXJlIHJlc3VsdHMKKyhTRUxFQ1Qg KiBGUk9NIGRpc3RpbmN0X2hhc2hfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91 cF8xKQorICBVTklPTiBBTEwKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEgRVhDRVBU IFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xKTsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KygwIHJvd3MpCisKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSBFWENFUFQgU0VMRUNU ICogRlJPTSBkaXN0aW5jdF9ncm91cF8xKQorICBVTklPTiBBTEwKKyhTRUxFQ1QgKiBGUk9NIGRp c3RpbmN0X2dyb3VwXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xKTsKKyA/ Y29sdW1uPyAKKy0tLS0tLS0tLS0KKygwIHJvd3MpCisKK0RST1AgVEFCTEUgZGlzdGluY3RfaGFz aF8xOworRFJPUCBUQUJMRSBkaXN0aW5jdF9oYXNoXzI7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2dy b3VwXzE7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2dyb3VwXzI7CiAtLQogLS0gQWxzbywgc29tZSB0 ZXN0cyBvZiBJUyBESVNUSU5DVCBGUk9NLCB3aGljaCBkb2Vzbid0IHF1aXRlIGRlc2VydmUgaXRz CiAtLSB2ZXJ5IG93biByZWdyZXNzaW9uIGZpbGUuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0CmluZGV4IGExYzkwZWI5MDU3Li5jNDBiZjZjMTZlYiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTc1LDYgKzc1LDcgQEAgc2VsZWN0IG5hbWUsIHNl dHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJs ZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2dhdGhlcm1lcmdlICAgICAg ICAgICAgIHwgb24KICBlbmFibGVfaGFzaGFnZyAgICAgICAgICAgICAgICAgfCBvbgorIGVuYWJs ZV9oYXNoYWdnX3NwaWxsICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2hhc2hqb2luICAgICAgICAg ICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCkBAIC04OSw3ICs5MCw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24K LSgxNyByb3dzKQorKDE4IHJvd3MpCiAKIC0tIFRlc3QgdGhhdCB0aGUgcGdfdGltZXpvbmVfbmFt ZXMgYW5kIHBnX3RpbWV6b25lX2FiYnJldnMgdmlld3MgYXJlCiAtLSBtb3JlLW9yLWxlc3Mgd29y a2luZy4gIFdlIGNhbid0IHRlc3QgdGhlaXIgY29udGVudHMgaW4gYW55IGdyZWF0IGRldGFpbApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAppbmRleCAzZTU5M2YyZDYxNS4uYTRkNDc2YzRi YjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCkBAIC0xMDMyLDMgKzEwMzIsMTE5 IEBAIHNlbGVjdCB2fHwnYScsIGNhc2Ugd2hlbiB2fHwnYScgPSAnYWEnIHRoZW4gMSBlbHNlIDAg ZW5kLCBjb3VudCgqKQogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3QgMSBmcm9tIHRlbmsx CiAgICB3aGVyZSAoaHVuZHJlZCwgdGhvdXNhbmQpIGluIChzZWxlY3QgdHdvdGhvdXNhbmQsIHR3 b3Rob3VzYW5kIGZyb20gb25layk7CisKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBw bGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4g Rm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0t CisKK3NldCB3b3JrX21lbT0nNjRrQic7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRp bmcuCisKK3NldCBlbmFibGVfaGFzaGFnZyA9IGZhbHNlOworCitzZXQgaml0X2Fib3ZlX2Nvc3Qg PSAwOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShn OjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVhdGUgdGFibGUgYWdnX2dy b3VwXzEgYXMKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBj b3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3Jv dXAgYnkgZyUxMDAwMDA7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMiBhcworc2VsZWN0ICog ZnJvbQorICAodmFsdWVzICgxMDApLCAoMzAwKSwgKDUwMCkpIGFzIHIoYSksCisgIGxhdGVyYWwg KAorICAgIHNlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwKKyAgICAgICAgICAgYXJyYXlfYWdn KGc6Om51bWVyaWMpIGFzIGMyLAorCSAgIGNvdW50KCopIGFzIGMzCisgICAgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMCwgMTk5OSkgZworICAgIHdoZXJlIGcgPCByLmEKKyAgICBncm91cCBieSBnLzIp IGFzIHM7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitjcmVhdGUgdGFibGUg YWdnX2dyb3VwXzMgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3VtKDc6OmludDQp IGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBn CisgIGdyb3VwIGJ5IGcvMjsKKworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF80IGFzCitzZWxlY3Qg KGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwgY291bnQo KikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBn LzI7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24KKworc2V0IGVu YWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBlbmFibGVfc29ydCA9IGZhbHNlOworCitzZXQgaml0 X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAg YXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVhdGUg dGFibGUgYWdnX2hhc2hfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJp YykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5 OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKKworY3JlYXRlIHRhYmxlIGFnZ19oYXNoXzIgYXMK K3NlbGVjdCAqIGZyb20KKyAgKHZhbHVlcyAoMTAwKSwgKDMwMCksICg1MDApKSBhcyByKGEpLAor ICBsYXRlcmFsICgKKyAgICBzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsCisgICAgICAgICAg IGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwKKwkgICBjb3VudCgqKSBhcyBjMworICAgIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgICB3aGVyZSBnIDwgci5hCisgICAgZ3Jv dXAgYnkgZy8yKSBhcyBzOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKKworY3Jl YXRlIHRhYmxlIGFnZ19oYXNoXzMgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3Vt KDc6OmludDQpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3Nlcmllcygw LCAxOTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKKworY3JlYXRlIHRhYmxlIGFnZ19oYXNoXzQgYXMK K3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMy LCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdy b3VwIGJ5IGcvMjsKKworc2V0IGVuYWJsZV9zb3J0ID0gdHJ1ZTsKK3NldCB3b3JrX21lbSB0byBk ZWZhdWx0OworCistLSBDb21wYXJlIGdyb3VwIGFnZ3JlZ2F0aW9uIHJlc3VsdHMgdG8gaGFzaCBh Z2dyZWdhdGlvbiByZXN1bHRzCisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzEgZXhjZXB0IHNl bGVjdCAqIGZyb20gYWdnX2dyb3VwXzEpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdn X2dyb3VwXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMSk7CisKKyhzZWxlY3QgKiBm cm9tIGFnZ19oYXNoXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzIpCisgIHVuaW9u IGFsbAorKHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdn X2hhc2hfMik7CisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzMgZXhjZXB0IHNlbGVjdCAqIGZy b20gYWdnX2dyb3VwXzMpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzMg ZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMyk7CisKKyhzZWxlY3QgKiBmcm9tIGFnZ19o YXNoXzQgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzQpCisgIHVuaW9uIGFsbAorKHNl bGVjdCAqIGZyb20gYWdnX2dyb3VwXzQgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfNCk7 CisKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzE7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8yOworZHJv cCB0YWJsZSBhZ2dfZ3JvdXBfMzsKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzQ7Citkcm9wIHRhYmxl IGFnZ19oYXNoXzE7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzI7Citkcm9wIHRhYmxlIGFnZ19oYXNo XzM7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9ncm91cGluZ3NldHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRz LnNxbAppbmRleCA5NWFjM2ZiNTJmNi4uYmY4YmNlNmVkMzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2dyb3VwaW5nc2V0cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Z3JvdXBpbmdzZXRzLnNxbApAQCAtNDQxLDQgKzQ0MSwxMDMgQEAgc2VsZWN0IHZ8fCdhJywgY2Fz ZSB3aGVuIGdyb3VwaW5nKHZ8fCdhJykgPSAxIHRoZW4gMSBlbHNlIDAgZW5kLCBjb3VudCgqKQog ICBmcm9tIHVubmVzdChhcnJheVsxLDFdLCBhcnJheVsnYScsJ2InXSkgdShpLHYpCiAgZ3JvdXAg Ynkgcm9sbHVwKGksIHZ8fCdhJykgb3JkZXIgYnkgMSwzOwogCistLQorLS0gQ29tcGFyZSByZXN1 bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcgaGFzaAorLS0g YWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0dGluZyB3b3Jr X21lbSBsb3cuCistLQorCitTRVQgd29ya19tZW09JzY0a0InOworCistLSBQcm9kdWNlIHJlc3Vs dHMgd2l0aCBzb3J0aW5nLgorCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKKworc2V0IGpp dF9hYm92ZV9jb3N0ID0gMDsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGcxMDAwLCBn MTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisg IChzZWxlY3QgZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZwor ICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcx MDAwLGcxMDAsZzEwKTsKKworY3JlYXRlIHRhYmxlIGdzX2dyb3VwXzEgYXMKK3NlbGVjdCBnMTAw MCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJv bQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAs IGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJl IChnMTAwMCxnMTAwLGcxMCk7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitj cmVhdGUgdGFibGUgZ3NfZ3JvdXBfMiBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShn OjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZy8yMCBh cyBnMTAwMCwgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOwor CitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMyBhcworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdn KGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1heChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVj dCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3Nlcmll cygwLDE5OTk5KSBnKSBzCitncm91cCBieSBncm91cGluZyBzZXRzIChnMTAwLGcxMCk7CisKKy0t IFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24uCisKK3NldCBlbmFibGVfaGFz aGFnZyA9IHRydWU7CitzZXQgZW5hYmxlX3NvcnQgPSBmYWxzZTsKK3NldCB3b3JrX21lbT0nNjRr Qic7CisKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3Nl bGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6 dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUx MCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91 cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzEgYXMK K3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgo Zzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwg ZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitn cm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBk ZWZhdWx0OworCitjcmVhdGUgdGFibGUgZ3NfaGFzaF8yIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAs IGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNl bGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBm cm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxn MTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzMgYXMKK3NlbGVjdCBnMTAwLCBnMTAs IGFycmF5X2FnZyhnKSBhcyBhLCBjb3VudCgqKSBhcyBjLCBtYXgoZzo6dGV4dCkgYXMgbSBmcm9t CisgIChzZWxlY3QgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoZzEwMCxn MTApOworCitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7 CisKKy0tIENvbXBhcmUgcmVzdWx0cworCisoc2VsZWN0ICogZnJvbSBnc19oYXNoXzEgZXhjZXB0 IHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBn c19ncm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMSk7CisKKyhzZWxlY3QgKiBm cm9tIGdzX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8yKQorICB1bmlvbiBh bGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFz aF8yKTsKKworKHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxtIGZyb20gZ3NfaGFzaF8zIGV4 Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2dyb3VwXzMpCisg ICAgdW5pb24gYWxsCisoc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19ncm91 cF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2hhc2hf Myk7CisKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMjsKK2Ry b3AgdGFibGUgZ3NfZ3JvdXBfMzsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8xOworZHJvcCB0YWJsZSBn c19oYXNoXzI7Citkcm9wIHRhYmxlIGdzX2hhc2hfMzsKKwogLS0gZW5kCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbAppbmRleCBhNjA1ZTg2NDQ5ZS4uMzMxMDI3NDRlYmYg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbApAQCAtNDUsNiArNDUs NjggQEAgU0VMRUNUIGNvdW50KCopIEZST00KIFNFTEVDVCBjb3VudCgqKSBGUk9NCiAgIChTRUxF Q1QgRElTVElOQ1QgdHdvLCBmb3VyLCB0d28gRlJPTSB0ZW5rMSkgc3M7CiAKKy0tCistLSBDb21w YXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBo YXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0 aW5nIHdvcmtfbWVtIGxvdy4KKy0tCisKK1NFVCB3b3JrX21lbT0nNjRrQic7CisKKy0tIFByb2R1 Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCisKK1NFVCBlbmFibGVfaGFzaGFnZz1GQUxTRTsKKwor U0VUIGppdF9hYm92ZV9jb3N0PTA7CisKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNU SU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworCitDUkVBVEUgVEFC TEUgZGlzdGluY3RfZ3JvdXBfMSBBUworU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVy YXRlX3NlcmllcygwLDk5OTkpIGc7CisKK1NFVCBqaXRfYWJvdmVfY29zdCBUTyBERUZBVUxUOwor CitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEw MDApOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGVuYWJsZV9o YXNoYWdnPVRSVUU7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24u CisKK1NFVCBlbmFibGVfc29ydD1GQUxTRTsKKworU0VUIGppdF9hYm92ZV9jb3N0PTA7CisKK0VY UExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMCw5OTk5KSBnOworCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfaGFzaF8xIEFTCitTRUxF Q1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VU IGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9oYXNo XzIgQVMKK1NFTEVDVCBESVNUSU5DVCAoZyUxMDAwKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmll cygwLDk5OTkpIGc7CisKK1NFVCBlbmFibGVfc29ydD1UUlVFOworCitTRVQgd29ya19tZW0gVE8g REVGQVVMVDsKKworLS0gQ29tcGFyZSByZXN1bHRzCisKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0 X2hhc2hfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xKQorICBVTklPTiBB TEwKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEgRVhDRVBUIFNFTEVDVCAqIEZST00g ZGlzdGluY3RfaGFzaF8xKTsKKworKFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQ VCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAq IEZST00gZGlzdGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNo XzEpOworCitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hfMTsKK0RST1AgVEFCTEUgZGlzdGluY3Rf aGFzaF8yOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8xOworRFJPUCBUQUJMRSBkaXN0aW5j dF9ncm91cF8yOworCiAtLQogLS0gQWxzbywgc29tZSB0ZXN0cyBvZiBJUyBESVNUSU5DVCBGUk9N LCB3aGljaCBkb2Vzbid0IHF1aXRlIGRlc2VydmUgaXRzCiAtLSB2ZXJ5IG93biByZWdyZXNzaW9u IGZpbGUuCg== --=-kjPJM26O7+g+K1Be+rCi--