Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tAsOj-000ak6-4l for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Nov 2024 15:01:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tAsOf-007Hvn-RO for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Nov 2024 15:01:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tAsOe-007Hvf-W1 for pgsql-hackers@lists.postgresql.org; Tue, 12 Nov 2024 15:01:38 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tAsOa-001VEl-Np for pgsql-hackers@postgresql.org; Tue, 12 Nov 2024 15:01:36 +0000 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-5ceca7df7f0so7533439a12.1 for ; Tue, 12 Nov 2024 07:01:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731423691; x=1732028491; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=8bGptdrnvqqjPqoB+z8fYzM6ZM4TIP6ZwaOTBS3ozzs=; b=OFjQ5STFqXAHULJ+LkgO3HTM4XN0Kchqjcj5BHbh1BOULXRqHMUtVX+2xTsquPR1d6 cpc9VMgj3cA3zStUP3k/jD2OdbTLEPfQzWOOUAC5rVLW03uI2BVRemwpVml8/TXFwYCu kARLufqwdV173M3sUMWkxZrN3I2PQqVQxtVt37Kl/zUMLKlWmVH/I61JrWJ8YOY+Fy+a Sw9ROGEK8HUqdfpcU3Qva3gOayVfN0Kxvzf8c0RRiJMb3AM9f3+XVACLlht9/TSdpp7W dsNDbrKjzDurOIs6KSTbAUnkPy8YFJ/30F8ehcjh9WGnLCMycr7ntxAtcQFGbZhE9Lex a6zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731423691; x=1732028491; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8bGptdrnvqqjPqoB+z8fYzM6ZM4TIP6ZwaOTBS3ozzs=; b=KAFIUb22LN7uQNDIAEB2H0W9tUGHrABJVpu/Ilh6tyzLcGP2mso+FAPfhV/wWtoCk3 y0INtanm2koi74zQSJpmm4bVEIRJoho90NggzpxOd1sYaN1d0nfw97VlC+Uc+TV2w0SR EnjEnZ/j8iXy6a73dLMsny1dv9DoS1teLOthddLAq8OdEp10JjkA8TCjsdMPZJXCXy8V Idsf6AkITLmUhFjSxQvT1ks7m2byhVCqlZINpdKcuCClH5K/VCsqV9eSG1TRDg4XESKp NCGlDkRpJd/FvYfwFVYeo5GIlK2QGk4O81oII7VKZ3q3HIHCHLg3ZUJpGDRDmEkIqi3v 9jGw== X-Gm-Message-State: AOJu0YybGOFsubTEa0nmWGLtDYRaSaOaj/dL3EOaREDNyKeg0Fj7i9N/ cYYydJoVy8yzsXYa5wZI4SojLb+V+jWc8Po4P/gCILkba01MPRhLwVXemy+wC3n3ML8Ci3CerZg cMc5Bsgozig8ScHOd/6UERRJBBXE= X-Google-Smtp-Source: AGHT+IH7tmT7QTEaDUz4zsMQcduv4v0ZawGdhkvejHvAsBY5ZIQ18Qy3f6r4x6Bw51GmONctteZiNPNsAzelL369Wss= X-Received: by 2002:a05:6402:5203:b0:5cb:6ca3:af96 with SMTP id 4fb4d7f45d1cf-5cf0a3245camr14226567a12.19.1731423690792; Tue, 12 Nov 2024 07:01:30 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Michail Nikolaev Date: Tue, 12 Nov 2024 16:00:00 +0100 Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Matthias van de Meent Cc: PostgreSQL Hackers , Andrey Borodin , Melanie Plageman Content-Type: multipart/mixed; boundary="0000000000000bd55a0626b87e78" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000bd55a0626b87e78 Content-Type: multipart/alternative; boundary="0000000000000bd5590626b87e76" --0000000000000bd5590626b87e76 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, everyone! With winter approaching, it=E2=80=99s the perfect time to dive back into wo= rk on this patch! :) The first attached patch implements Matthias's idea of periodically resetting the snapshot during the initial heap scan. The next step will be to add support for parallel builds. Additionally, here are a few comments on previous emails: > In heapam_index_build_range_scan, it seems like you're popping the > snapshot and registering a new one while holding a tuple from > heap_getnext(), thus while holding a page lock. I'm not so sure that's > OK, expecially when catalogs are also involved (specifically for > expression indexes, where functions could potentially be updated or > dropped if we re-create the visibility snapshot) Now, visibility snapshots are updated between pages. As for the catalog snapshot: * Dropping functions isn=E2=80=99t possible due to dependencies and locking constraints. * Updating functions is possible, but it offers the same level of isolation as we have now: 1) Functions are already converted into an execution state and aren=E2=80= =99t re-read from the catalog during the scan. 2) During the validation phase, the latest version of a function will be used. 3) Even in the initial phase, predicates and expressions could be read using different catalog snapshots, as it=E2=80=99s possible to receive a ca= che invalidation message before the first FormIndexDatum is created. Best regards, Mikhail. > --0000000000000bd5590626b87e76 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello, everyone!

With winter= approaching, it=E2=80=99s the perfect time to dive back into work on this = patch! :)

The first attached patch implements Matt= hias's idea of periodically resetting the snapshot during the initial h= eap scan. The next step will be to add support for parallel builds.

= Additionally, here are a few comments on previous emails:

> In heapam_index_build_range_scan, it seems like you're pop= ping the
> snapshot and registering a new one while holding a tuple f= rom
> heap_getnext(), thus while holding a page lock. I'm not so = sure that's
> OK, expecially when catalogs are also involved (spe= cifically for
> expression indexes, where functions could potentially= be updated or
> dropped if we re-create the visibility snapshot)

Now, visibility snapshots are updated between pages.<= br>
As for the catalog snapshot:
* Dropping functions isn=E2=80=99t p= ossible due to dependencies and locking constraints.

* Updati= ng functions is possible, but it offers the same level of isolation as we h= ave now:
1) Functions are already converted into an execution state and = aren=E2=80=99t re-read from the catalog during the scan.
2) During the v= alidation phase, the latest version of a function will be used.
3) Even = in the initial phase, predicates and expressions could be read using differ= ent catalog snapshots, as it=E2=80=99s possible to receive a cache invalida= tion message before the first FormIndexDatum is created.

=
Best regards,
Mikhail.
--0000000000000bd5590626b87e76-- --0000000000000bd55a0626b87e78 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Allow-advancing-xmin-during-non-unique-non-parall.patch" Content-Disposition: attachment; filename="v1-0001-Allow-advancing-xmin-during-non-unique-non-parall.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3eewbqk0 RnJvbSBmMGFkMjA5NDUzYjY0NTcyODU3MGExZjU3YjM2NDUxN2JjZmRmNzM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBua2V5IDxua2V5QHRvbG9rYS5haT4KRGF0ZTogVHVlLCAxMiBO b3YgMjAyNCAxMzowOToyOSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEFsbG93IGFkdmFuY2lu ZyB4bWluIGR1cmluZyBub24tdW5pcXVlLCBub24tcGFyYWxsZWwKIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGRzIGJ5IHBlcmlvZGljYWxseSByZXNldHRpbmcgc25hcHNob3RzCgpMb25nLXJ1bm5pbmcg dHJhbnNhY3Rpb25zIGxpa2UgdGhvc2UgdXNlZCBieSBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZ IGFuZCBSRUlOREVYIENPTkNVUlJFTlRMWSBjYW4gaG9sZCBiYWNrIHRoZSBnbG9iYWwgeG1pbiBo b3Jpem9uLCBwcmV2ZW50aW5nIFZBQ1VVTSBmcm9tIGNsZWFuaW5nIHVwIGRlYWQgdHVwbGVzIGFu ZCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRyYW5zYWN0aW9uIElEIHdyYXBhcm91bmQgaXNzdWVz LiBJbiBQb3N0Z3JlU1FMIDE0LCBjb21taXQgZDlkMDc2MjIyZjViIGF0dGVtcHRlZCB0byBhbGxv dyBWQUNVVU0gdG8gaWdub3JlIGluZGV4aW5nIHRyYW5zYWN0aW9ucyB3aXRoIENPTkNVUlJFTlRM WSB0byBtaXRpZ2F0ZSB0aGlzIHByb2JsZW0uIEhvd2V2ZXIsIHRoaXMgd2FzIHJldmVydGVkIGlu IGNvbW1pdCBlMjhiYjg4NTE5NjkgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSBpbmRleGVzIHRvIG1p c3MgaGVhcCB0dXBsZXMgdGhhdCB3ZXJlIEhPVC11cGRhdGVkIGFuZCBIT1QtcHJ1bmVkIGR1cmlu ZyB0aGUgaW5kZXggY3JlYXRpb24sIGxlYWRpbmcgdG8gaW5kZXggY29ycnVwdGlvbi4KClRoaXMg cGF0Y2ggaW50cm9kdWNlcyBhIHNhZmUgYWx0ZXJuYXRpdmUgYnkgcGVyaW9kaWNhbGx5IHJlc2V0 dGluZyB0aGUgc25hcHNob3QgdXNlZCBkdXJpbmcgbm9uLXVuaXF1ZSwgbm9uLXBhcmFsbGVsIGNv bmN1cnJlbnQgaW5kZXggYnVpbGRzLiBCeSByZXNldHRpbmcgdGhlIHNuYXBzaG90IGV2ZXJ5IE4g cGFnZXMgZHVyaW5nIHRoZSBoZWFwIHNjYW4sIHdlIGFsbG93IHRoZSB4bWluIGhvcml6b24gdG8g YWR2YW5jZSB3aXRob3V0IHJpc2tpbmcgaW5kZXggY29ycnVwdGlvbi4gVGhpcyBhcHByb2FjaCBp cyBzYWZlIGZvciBub24tdW5pcXVlIGluZGV4IGJ1aWxkcyBiZWNhdXNlIHRoZXkgZG8gbm90IGVu Zm9yY2UgdW5pcXVlbmVzcyBjb25zdHJhaW50cyB0aGF0IHJlcXVpcmUgYSBjb25zaXN0ZW50IHNu YXBzaG90IGFjcm9zcyB0aGUgZW50aXJlIHNjYW4uCgpDdXJyZW50bHksIHRoaXMgdGVjaG5pcXVl IGlzIGFwcGxpZWQgdG86CgpOb24tcGFyYWxsZWwgaW5kZXggYnVpbGRzOiBQYXJhbGxlbCBpbmRl eCBidWlsZHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGFkZHJlc3NlZCBpbiBh IGZ1dHVyZSBjb21taXQuCk5vbi11bmlxdWUgaW5kZXhlczogVW5pcXVlIGluZGV4IGJ1aWxkcyBz dGlsbCByZXF1aXJlIGEgY29uc2lzdGVudCBzbmFwc2hvdCB0byBlbmZvcmNlIHVuaXF1ZW5lc3Mg Y29uc3RyYWludHMsIGFuZCBzdXBwb3J0IGZvciB0aGVtIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0 dXJlLgpPbmx5IGR1cmluZyB0aGUgZmlyc3Qgc2NhbiBvZiB0aGUgaGVhcDogVGhlIHNlY29uZCBz Y2FuIGR1cmluZyBpbmRleCB2YWxpZGF0aW9uIHN0aWxsIHVzZXMgYSBzaW5nbGUgc25hcHNob3Qg dG8gZW5zdXJlIGluZGV4IGNvcnJlY3RuZXNzLgoKVG8gaW1wbGVtZW50IHRoaXMsIGEgbmV3IHNj YW4gb3B0aW9uIFNPX1JFU0VUX1NOQVBTSE9UIGlzIGludHJvZHVjZWQuIFdoZW4gc2V0LCBpdCBj YXVzZXMgdGhlIHNuYXBzaG90IHRvIGJlIHJlc2V0IGV2ZXJ5IFNPX1JFU0VUX1NOQVBTSE9UX0VB Q0hfTl9QQUdFIHBhZ2VzIGR1cmluZyB0aGUgc2Nhbi4gVGhlIGhlYXAgc2NhbiBjb2RlIGlzIGFk anVzdGVkIHRvIHN1cHBvcnQgdGhpcyBvcHRpb24sIGFuZCB0aGUgaW5kZXggYnVpbGQgY29kZSBp cyBtb2RpZmllZCB0byB1c2UgaXQgZm9yIGFwcGxpY2FibGUgY29uY3VycmVudCBpbmRleCBidWls ZHMgdGhhdCBhcmUgbm90IG9uIHN5c3RlbSBjYXRhbG9ncyBhbmQgbm90IHVzaW5nIHBhcmFsbGVs IHdvcmtlcnMuCgpUaGlzIGFkZHJlc3NlcyB0aGUgaXNzdWVzIHRoYXQgbGVkIHRvIHRoZSByZXZl cnNpb24gb2YgY29tbWl0IGQ5ZDA3NjIyMmY1YiwgcHJvdmlkaW5nIGEgc2FmZSB3YXkgdG8gYWxs b3cgeG1pbiBhZHZhbmNlbWVudCBkdXJpbmcgbG9uZy1ydW5uaW5nIG5vbi11bmlxdWUsIG5vbi1w YXJhbGxlbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB3aGlsZSBlbnN1cmluZyBpbmRleCBjb3Jy ZWN0bmVzcy4KClJlZ3Jlc3Npb24gdGVzdHMgYXJlIGFkZGVkIHRvIHZlcmlmeSB0aGUgYmVoYXZp b3IuCgpBdXRob3I6IE1pY2hhaWwgTmlrb2xhZXYKUmV2aWV3ZWQtYnk6IFtSZXZpZXdlcnMnIE5h bWVzXQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBTnR1MG9pTGMtJTJCN2g5emZ6 T1Z5MmN2MlV1WWtfNU1VUmVWTG5WYk9heTZPZ0RfS0dnJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBj b250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAgIDMgKy0KIGNv bnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0dHVwbGUuYyAgICAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8ICAzNyArKysrKysrCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgNDUgKysrKysr LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMgICAgICAgICAgIHwgICA0ICsK IHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICAgICB8ICAzMCArKysr Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAxMCAt LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgICAgIHwgICA5ICsr CiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgMjcgKysr Ky0KIHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZSAgICB8ICAgMiAr LQogLi4uL2V4cGVjdGVkL2NpY19yZXNldF9zbmFwc2hvdHMub3V0ICAgICAgICAgIHwgMTAyICsr KysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL21lc29u LmJ1aWxkIHwgICAxICsKIC4uLi9zcWwvY2ljX3Jlc2V0X3NuYXBzaG90cy5zcWwgICAgICAgICAg ICAgICB8ICA4MiArKysrKysrKysrKysrKwogMTUgZmlsZXMgY2hhbmdlZCwgMzMyIGluc2VydGlv bnMoKyksIDI4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9jaWNfcmVzZXRfc25hcHNob3RzLm91dAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcWwvY2lj X3Jlc2V0X3NuYXBzaG90cy5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5 X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwppbmRleCA4YjgyNzk3 YzEwLi4yM2MxMzhkYjBhIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJl ZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTY4OSw3ICs2ODks OCBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWws IGJvb2wgaGVhcGtleXNwYWNlLAogCQkJCQkJCQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCiAJ CQkJCQkJCQkgTlVMTCwJLyogc2NhbiBrZXkgKi8KIAkJCQkJCQkJCSB0cnVlLAkvKiBidWZmZXIg YWNjZXNzIHN0cmF0ZWd5IE9LICovCi0JCQkJCQkJCQkgdHJ1ZSk7IC8qIHN5bmNzY2FuIE9LPyAq LworCQkJCQkJCQkJIHRydWUsIC8qIHN5bmNzY2FuIE9LPyAqLworCQkJCQkJCQkJIGZhbHNlKTsK IAogCQkvKgogCQkgKiBTY2FuIHdpbGwgYmVoYXZlIGFzIHRoZSBmaXJzdCBzY2FuIG9mIGEgQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ3N0YXR0dXBsZS9w Z3N0YXR0dXBsZS5jIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXR0dXBsZS5jCmluZGV4IDQ4 Y2I4ZjU5YzQuLmZmN2NjMDdkZjkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdzdGF0dHVwbGUvcGdz dGF0dHVwbGUuYworKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKQEAgLTMz Miw3ICszMzIsNyBAQCBwZ3N0YXRfaGVhcChSZWxhdGlvbiByZWwsIEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvKQogCQkJCSBlcnJtc2coIm9ubHkgaGVhcCBBTSBpcyBzdXBwb3J0ZWQiKSkpOwogCiAJ LyogRGlzYWJsZSBzeW5jc2NhbiBiZWNhdXNlIHdlIGFzc3VtZSB3ZSBzY2FuIGZyb20gYmxvY2sg emVybyB1cHdhcmRzICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChyZWwsIFNuYXBz aG90QW55LCAwLCBOVUxMLCB0cnVlLCBmYWxzZSk7CisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9z dHJhdChyZWwsIFNuYXBzaG90QW55LCAwLCBOVUxMLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwogCWhz Y2FuID0gKEhlYXBTY2FuRGVzYykgc2NhbjsKIAogCUluaXREaXJ0eVNuYXBzaG90KFNuYXBzaG90 RGlydHkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGMwYjk3ODExOWEuLjk0YzA4NjA3M2Ug MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI0MzAsOCArMjQzMCwxMiBAQCBfYnJpbl9iZWdp bl9wYXJhbGxlbChCcmluQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwgUmVsYXRpb24gaGVhcCwgUmVs YXRpb24gaW5kZXgsCiAJZWxzZQogCQlxdWVyeWxlbiA9IDA7CQkJLyoga2VlcCBjb21waWxlciBx dWlldCAqLwogCisJaWYgKElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KSkKKwkJUHVzaEFjdGl2ZVNu YXBzaG90KHNuYXBzaG90KTsKIAkvKiBFdmVyeW9uZSdzIGhhZCBhIGNoYW5jZSB0byBhc2sgZm9y IHNwYWNlLCBzbyBub3cgY3JlYXRlIHRoZSBEU00gKi8KIAlJbml0aWFsaXplUGFyYWxsZWxEU00o cGN4dCk7CisJaWYgKElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KSkKKwkJUG9wQWN0aXZlU25hcHNo b3QoKTsKIAogCS8qIElmIG5vIERTTSBzZWdtZW50IHdhcyBhdmFpbGFibGUsIGJhY2sgb3V0IChk byBzZXJpYWwgYnVpbGQpICovCiAJaWYgKHBjeHQtPnNlZyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYwppbmRleCBkMDAzMDBjNWRjLi4yMWEyNTE1ZGUzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAj aW5jbHVkZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAKIHN0YXRpYyBIZWFwVHVwbGUgaGVh cF9wcmVwYXJlX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwKQEAgLTU2 Niw2ICs1NjcsMjggQEAgaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKFRhYmxlU2NhbkRlc2Mgc3NjYW4p CiAJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiB9CiAKK3N0YXRpYyBp bmxpbmUgdm9pZAoraGVhcF9yZXNldF9zY2FuX3NuYXBzaG90KFRhYmxlU2NhbkRlc2Mgc3NjYW4p Cit7CisJQXNzZXJ0KEFjdGl2ZVNuYXBzaG90U2V0KCkpOworCUFzc2VydChHZXRBY3RpdmVTbmFw c2hvdCgpID09IHNzY2FuLT5yc19zbmFwc2hvdCk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsKKwlV bnJlZ2lzdGVyU25hcHNob3Qoc3NjYW4tPnJzX3NuYXBzaG90KTsKKwlzc2Nhbi0+cnNfc25hcHNo b3QgPSBJbnZhbGlkU25hcHNob3Q7CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdENvbmRpdGlv bmFsbHkoKTsKKworCS8qIEdvYWwgb2Ygc25hcHNob3QgcmVzZXQgaXMgdG8gYWxsb3cgaG9yaXpv biB0byBhZHZhbmNlLiAqLworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54 bWluKSk7CisjaWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKKwkvKiBJbiBzb21lIGNhc2VzIGl0IGlz IHN0aWxsIG5vdCBwb3NzaWJsZSBkdWUgeGlkIGFzc2lnbi4gKi8KKwlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKE15UHJvYy0+eGlkKSkKKwkJSU5KRUNUSU9OX1BPSU5UKCJoZWFwX3Jlc2V0X3Nj YW5fc25hcHNob3RfZWZmZWN0aXZlIik7CisjZW5kaWYKKworCXNzY2FuLT5yc19zbmFwc2hvdCA9 IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0U25hcHNob3QoKSk7CisJUHVzaEFjdGl2ZVNuYXBz aG90KHNzY2FuLT5yc19zbmFwc2hvdCk7Cit9CisKIC8qCiAgKiBoZWFwX2ZldGNoX25leHRfYnVm ZmVyIC0gcmVhZCBhbmQgcGluIHRoZSBuZXh0IGJsb2NrIGZyb20gTUFJTl9GT1JLTlVNLgogICoK QEAgLTYwNyw3ICs2MzAsMTMgQEAgaGVhcF9mZXRjaF9uZXh0X2J1ZmZlcihIZWFwU2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAKIAlzY2FuLT5yc19jYnVmID0gcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoc2Nhbi0+cnNfcmVhZF9zdHJlYW0sIE5VTEwpOwogCWlmIChCdWZmZXJJc1Zh bGlkKHNjYW4tPnJzX2NidWYpKQorCXsKIAkJc2Nhbi0+cnNfY2Jsb2NrID0gQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoc2Nhbi0+cnNfY2J1Zik7CisjZGVmaW5lIFNPX1JFU0VUX1NOQVBTSE9UX0VBQ0hf Tl9QQUdFIDY0CisJCWlmICgoc2Nhbi0+cnNfYmFzZS5yc19mbGFncyAmIFNPX1JFU0VUX1NOQVBT SE9UKSAmJgorCQkJKHNjYW4tPnJzX2NibG9jayAlIFNPX1JFU0VUX1NOQVBTSE9UX0VBQ0hfTl9Q QUdFID09IDApKQorCQkJaGVhcF9yZXNldF9zY2FuX3NuYXBzaG90KChUYWJsZVNjYW5EZXNjKSBz Y2FuKTsKKwl9CiB9CiAKIC8qCkBAIC0xMjMzLDYgKzEyNjIsMTQgQEAgaGVhcF9lbmRzY2FuKFRh YmxlU2NhbkRlc2Mgc3NjYW4pCiAJaWYgKHNjYW4tPnJzX3BhcmFsbGVsd29ya2VyZGF0YSAhPSBO VUxMKQogCQlwZnJlZShzY2FuLT5yc19wYXJhbGxlbHdvcmtlcmRhdGEpOwogCisJaWYgKHNjYW4t PnJzX2Jhc2UucnNfZmxhZ3MgJiBTT19SRVNFVF9TTkFQU0hPVCkKKwl7CisJCUFzc2VydChzY2Fu LT5yc19iYXNlLnJzX2ZsYWdzICYgU09fVEVNUF9TTkFQU0hPVCk7CisJCUFzc2VydChBY3RpdmVT bmFwc2hvdFNldCgpKTsKKwkJQXNzZXJ0KEdldEFjdGl2ZVNuYXBzaG90KCkgPT0gc3NjYW4tPnJz X3NuYXBzaG90KTsKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwl9CisKIAlpZiAoc2Nhbi0+cnNf YmFzZS5yc19mbGFncyAmIFNPX1RFTVBfU05BUFNIT1QpCiAJCVVucmVnaXN0ZXJTbmFwc2hvdChz Y2FuLT5yc19iYXNlLnJzX3NuYXBzaG90KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMKaW5kZXggYThkOTVlMGYxYy4uNWExZDBhOWQzNiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0xMTkwLDYgKzExOTAsOCBAQCBoZWFwYW1f aW5kZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJRXhwckNvbnRl eHQgKmVjb250ZXh0OwogCVNuYXBzaG90CXNuYXBzaG90OwogCWJvb2wJCW5lZWRfdW5yZWdpc3Rl cl9zbmFwc2hvdCA9IGZhbHNlOworCWJvb2wJCW5lZWRfcG9wX2FjdGl2ZV9zbmFwc2hvdCA9IGZh bHNlOworCWJvb2wJCXJlc2V0X3NuYXBzaG90cyA9IGZhbHNlOwogCVRyYW5zYWN0aW9uSWQgT2xk ZXN0WG1pbjsKIAlCbG9ja051bWJlciBwcmV2aW91c19ibGtubyA9IEludmFsaWRCbG9ja051bWJl cjsKIAlCbG9ja051bWJlciByb290X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwpAQCAtMTIy NCw5ICsxMjI2LDYgQEAgaGVhcGFtX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4oUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogCS8qIEFycmFuZ2UgZm9yIGVjb250ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0 aGUgdHVwbGUgdW5kZXIgdGVzdCAqLwogCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7 CiAKLQkvKiBTZXQgdXAgZXhlY3V0aW9uIHN0YXRlIGZvciBwcmVkaWNhdGUsIGlmIGFueS4gKi8K LQlwcmVkaWNhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVz dGF0ZSk7Ci0KIAkvKgogCSAqIFByZXBhcmUgZm9yIHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24u ICBJbiBhIG5vcm1hbCBpbmRleCBidWlsZCwgd2UgdXNlCiAJICogU25hcHNob3RBbnkgYmVjYXVz ZSB3ZSBtdXN0IHJldHJpZXZlIGFsbCB0dXBsZXMgYW5kIGRvIG91ciBvd24gdGltZQpAQCAtMTI0 NCwyNCArMTI0Myw0MCBAQCBoZWFwYW1faW5kZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAJewogCQkvKgogCQkgKiBTZXJpYWwgaW5kZXggYnVpbGQuCi0JCSAqCi0J CSAqIE11c3QgYmVnaW4gb3VyIG93biBoZWFwIHNjYW4gaW4gdGhpcyBjYXNlLiAgV2UgbWF5IGFs c28gbmVlZCB0bwotCQkgKiByZWdpc3RlciBhIHNuYXBzaG90IHdob3NlIGxpZmV0aW1lIGlzIHVu ZGVyIG91ciBkaXJlY3QgY29udHJvbC4KIAkJICovCiAJCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoT2xkZXN0WG1pbikpCiAJCXsKKwkJCS8qCisJCQkgKiBGb3IgdW5pcXVlIGluZGV4IHdlIG5l ZWQgY29uc2lzdGVudCBzbmFwc2hvdCBmb3IgdGhlIHdob2xlIHNjYW4uCisJCQkgKiBJbiBjYXNl IG9mIHBhcmFsbGVsIHNjYW4gc29tZSBhZGRpdGlvbmFsIGluZnJhc3RydWN0dXJlIHJlcXVpcmVk CisJCQkgKiB0byBwZXJmb3JtIHNjYW4gd2l0aCBTT19SRVNFVF9TTkFQU0hPVCB3aGljaCBpcyBu b3QgeWV0IHJlYWR5LgorCQkJICovCisJCQlyZXNldF9zbmFwc2hvdHMgPSBpbmRleEluZm8tPmlp X0NvbmN1cnJlbnQgJiYKKwkJCQkJCQkgICFpbmRleEluZm8tPmlpX1VuaXF1ZSAmJgorCQkJCQkJ CSAgIWlzX3N5c3RlbV9jYXRhbG9nOyAvKiBqdXN0IGZvciB0aGUgY2FzZSAqLworCQkJQXNzZXJ0 KCFBY3RpdmVTbmFwc2hvdFNldCgpKTsKKwkJCS8qCisJCQkgKiBNdXN0IGJlZ2luIG91ciBvd24g aGVhcCBzY2FuIGluIHRoaXMgY2FzZS4gIFdlIG1heSBhbHNvIG5lZWQgdG8KKwkJCSAqIHJlZ2lz dGVyIGEgc25hcHNob3Qgd2hvc2UgbGlmZXRpbWUgaXMgdW5kZXIgb3VyIGRpcmVjdCBjb250cm9s LgorCQkJICovCiAJCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25T bmFwc2hvdCgpKTsKLQkJCW5lZWRfdW5yZWdpc3Rlcl9zbmFwc2hvdCA9IHRydWU7CisJCQlQdXNo QWN0aXZlU25hcHNob3Qoc25hcHNob3QpOworCQkJLyogSW4gY2FzZSBvZiBTT19SRVNFVF9TTkFQ U0hPVCBzbmFwc2hvdHMgYXJlIGNsZWFyZWQgYnkgdGFibGVfZW5kc2Nhbi4gKi8KKwkJCW5lZWRf dW5yZWdpc3Rlcl9zbmFwc2hvdCA9IG5lZWRfcG9wX2FjdGl2ZV9zbmFwc2hvdCA9ICFyZXNldF9z bmFwc2hvdHM7CiAJCX0KIAkJZWxzZQorCQl7CisJCQlBc3NlcnQoIWluZGV4SW5mby0+aWlfQ29u Y3VycmVudCk7CiAJCQlzbmFwc2hvdCA9IFNuYXBzaG90QW55OworCQl9CiAKIAkJc2NhbiA9IHRh YmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRpb24sCS8qIHJlbGF0aW9uICovCiAJCQkJCQkJ CQkgc25hcHNob3QsCS8qIHNuYXBzaG90ICovCiAJCQkJCQkJCQkgMCwgLyogbnVtYmVyIG9mIGtl eXMgKi8KIAkJCQkJCQkJCSBOVUxMLAkvKiBzY2FuIGtleSAqLwogCQkJCQkJCQkJIHRydWUsCS8q IGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgT0sgKi8KLQkJCQkJCQkJCSBhbGxvd19zeW5jKTsJLyog c3luY3NjYW4gT0s/ICovCisJCQkJCQkJCQkgYWxsb3dfc3luYywJLyogc3luY3NjYW4gT0s/ICov CisJCQkJCQkJCQkgcmVzZXRfc25hcHNob3RzIC8qIHJlc2V0IHNuYXBzaG90cz8gKi8pOwogCX0K IAllbHNlCiAJewpAQCAtMTI3NSw2ICsxMjkwLDggQEAgaGVhcGFtX2luZGV4X2J1aWxkX3Jhbmdl X3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlBc3NlcnQoIUlzQm9vdHN0cmFwUHJvY2Vz c2luZ01vZGUoKSk7CiAJCUFzc2VydChhbGxvd19zeW5jKTsKIAkJc25hcHNob3QgPSBzY2FuLT5y c19zbmFwc2hvdDsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJbmVlZF9wb3Bf YWN0aXZlX3NuYXBzaG90ID0gdHJ1ZTsKIAl9CiAKIAloc2NhbiA9IChIZWFwU2NhbkRlc2MpIHNj YW47CkBAIC0xMjg5LDYgKzEzMDYsMTMgQEAgaGVhcGFtX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4o UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCUFzc2VydChzbmFwc2hvdCA9PSBTbmFwc2hvdEFueSA/ IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKE9sZGVzdFhtaW4pIDoKIAkJICAgIVRyYW5zYWN0aW9uSWRJ c1ZhbGlkKE9sZGVzdFhtaW4pKTsKIAlBc3NlcnQoc25hcHNob3QgPT0gU25hcHNob3RBbnkgfHwg IWFueXZpc2libGUpOworCUFzc2VydChzbmFwc2hvdCA9PSBTbmFwc2hvdEFueSB8fCBBY3RpdmVT bmFwc2hvdFNldCgpKTsKKworCS8qIFNldCB1cCBleGVjdXRpb24gc3RhdGUgZm9yIHByZWRpY2F0 ZSwgaWYgYW55LiAqLworCXByZWRpY2F0ZSA9IEV4ZWNQcmVwYXJlUXVhbChpbmRleEluZm8tPmlp X1ByZWRpY2F0ZSwgZXN0YXRlKTsKKwkvKiBDbGVhciByZWZlcmVuY2UgdG8gc25hcHNob3Qgc2lu Y2UgaXQgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIHNjYW4gaXRzZWxmLiAqLworCWlmIChyZXNldF9z bmFwc2hvdHMpCisJCXNuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90OwogCiAJLyogUHVibGlzaCBu dW1iZXIgb2YgYmxvY2tzIHRvIHNjYW4gKi8KIAlpZiAocHJvZ3Jlc3MpCkBAIC0xNzI0LDYgKzE3 NDgsOCBAQCBoZWFwYW1faW5kZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRp b24sCiAKIAl0YWJsZV9lbmRzY2FuKHNjYW4pOwogCisJaWYgKG5lZWRfcG9wX2FjdGl2ZV9zbmFw c2hvdCkKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkvKiB3ZSBjYW4gbm93IGZvcmdldCBvdXIg c25hcHNob3QsIGlmIHNldCBhbmQgcmVnaXN0ZXJlZCBieSB1cyAqLwogCWlmIChuZWVkX3VucmVn aXN0ZXJfc25hcHNob3QpCiAJCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CkBAIC0xNzk2 LDcgKzE4MjIsOCBAQCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihSZWxhdGlvbiBoZWFwUmVs YXRpb24sCiAJCQkJCQkJCSAwLCAvKiBudW1iZXIgb2Yga2V5cyAqLwogCQkJCQkJCQkgTlVMTCwJ Lyogc2NhbiBrZXkgKi8KIAkJCQkJCQkJIHRydWUsCS8qIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kg T0sgKi8KLQkJCQkJCQkJIGZhbHNlKTsJLyogc3luY3NjYW4gbm90IE9LICovCisJCQkJCQkJCSBm YWxzZSwJLyogc3luY3NjYW4gbm90IE9LICovCisJCQkJCQkJCSBmYWxzZSk7CiAJaHNjYW4gPSAo SGVhcFNjYW5EZXNjKSBzY2FuOwogCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19TQ0FOX0JMT0NLU19UT1RBTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggNjBj NjEwMzlkNi4uNzc3ZGY5MTk3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTQ2MSw3 ICs0NjEsNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkg Ki8KIAkJc3lzc2Nhbi0+c2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRpb24s IHNuYXBzaG90LAogCQkJCQkJCQkJCQkgIG5rZXlzLCBrZXksCi0JCQkJCQkJCQkJCSAgdHJ1ZSwg ZmFsc2UpOworCQkJCQkJCQkJCQkgIHRydWUsIGZhbHNlLCBmYWxzZSk7CiAJCXN5c3NjYW4tPmlz Y2FuID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXggZmI5 YTA1ZjdhZi4uZTdjY2VmYjEzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKQEAg LTE0ODUsOCArMTQ4NSwxMiBAQCBfYnRfYmVnaW5fcGFyYWxsZWwoQlRCdWlsZFN0YXRlICpidWls ZHN0YXRlLCBib29sIGlzY29uY3VycmVudCwgaW50IHJlcXVlc3QpCiAJZWxzZQogCQlxdWVyeWxl biA9IDA7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogCisJaWYgKElzTVZDQ1NuYXBzaG90 KHNuYXBzaG90KSkKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKIAkvKiBFdmVyeW9u ZSdzIGhhZCBhIGNoYW5jZSB0byBhc2sgZm9yIHNwYWNlLCBzbyBub3cgY3JlYXRlIHRoZSBEU00g Ki8KIAlJbml0aWFsaXplUGFyYWxsZWxEU00ocGN4dCk7CisJaWYgKElzTVZDQ1NuYXBzaG90KHNu YXBzaG90KSkKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAogCS8qIElmIG5vIERTTSBzZWdtZW50 IHdhcyBhdmFpbGFibGUsIGJhY2sgb3V0IChkbyBzZXJpYWwgYnVpbGQpICovCiAJaWYgKHBjeHQt PnNlZyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IGY5YmI3MjFjNWYuLjNhYTUwMDA3MmMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9zbmFw bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90dXBs ZXNvcnQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKIAogLyogUG90ZW50aWFsbHkgc2V0 IGJ5IHBnX3VwZ3JhZGVfc3VwcG9ydCBmdW5jdGlvbnMgKi8KIE9pZAkJCWJpbmFyeV91cGdyYWRl X25leHRfaW5kZXhfcGdfY2xhc3Nfb2lkID0gSW52YWxpZE9pZDsKQEAgLTE0OTAsOCArMTQ5MSw4 IEBAIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZChPaWQgaGVhcFJlbGF0aW9uSWQsCiAJUmVsYXRp b24JaW5kZXhSZWxhdGlvbjsKIAlJbmRleEluZm8gICppbmRleEluZm87CiAKLQkvKiBUaGlzIGhh ZCBiZXR0ZXIgbWFrZSBzdXJlIHRoYXQgYSBzbmFwc2hvdCBpcyBhY3RpdmUgKi8KLQlBc3NlcnQo QWN0aXZlU25hcHNob3RTZXQoKSk7CisJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVBy b2MtPnhtaW4pKTsKKwlBc3NlcnQoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eGlkKSk7 CiAKIAkvKiBPcGVuIGFuZCBsb2NrIHRoZSBwYXJlbnQgaGVhcCByZWxhdGlvbiAqLwogCWhlYXBS ZWwgPSB0YWJsZV9vcGVuKGhlYXBSZWxhdGlvbklkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sp OwpAQCAtMTUwOSwxOSArMTUxMCwyOCBAQCBpbmRleF9jb25jdXJyZW50bHlfYnVpbGQoT2lkIGhl YXBSZWxhdGlvbklkLAogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5kZXhSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCS8qIEJ1aWxkSW5kZXhJbmZvIG1heSByZXF1aXJl IGFzIHNuYXBzaG90IGZvciBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcyAqLworCVB1c2hBY3Rp dmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCS8qCiAJICogV2UgaGF2ZSB0 byByZS1idWlsZCB0aGUgSW5kZXhJbmZvIHN0cnVjdCwgc2luY2UgaXQgd2FzIGxvc3QgaW4gdGhl CiAJICogY29tbWl0IG9mIHRoZSB0cmFuc2FjdGlvbiB3aGVyZSB0aGlzIGNvbmN1cnJlbnQgaW5k ZXggd2FzIGNyZWF0ZWQgYXQKIAkgKiB0aGUgY2F0YWxvZyBsZXZlbC4KIAkgKi8KIAlpbmRleElu Zm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0aW9uKTsKKwkvKiBEb25lIHdpdGggc25hcHNo b3QgKi8KKwlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCUFzc2VydCghaW5kZXhJbmZvLT5paV9SZWFk eUZvckluc2VydHMpOwogCWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IHRydWU7CiAJaW5kZXhJ bmZvLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNlOworCUFzc2VydCghVHJhbnNhY3Rpb25JZElz VmFsaWQoTXlQcm9jLT54bWluKSk7CiAKIAkvKiBOb3cgYnVpbGQgdGhlIGluZGV4ICovCiAJaW5k ZXhfYnVpbGQoaGVhcFJlbCwgaW5kZXhSZWxhdGlvbiwgaW5kZXhJbmZvLCBmYWxzZSwgdHJ1ZSk7 CiAKKwkvKiBJbnZhbGlkYXRlIGNhdGFsb2cgc25hcHNob3QganVzdCBmb3IgYXNzZXJ0ICovCisJ SW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCUFzc2VydCgoaW5kZXhJbmZvLT5paV9QYXJh bGxlbFdvcmtlcnMgfHwgaW5kZXhJbmZvLT5paV9VbmlxdWUpIHx8ICFUcmFuc2FjdGlvbklkSXNW YWxpZChNeVByb2MtPnhtaW4pKTsKKwogCS8qIFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgZXhl Y3V0ZWQgYnkgaW5kZXggZnVuY3Rpb25zICovCiAJQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25l c3RsZXZlbCk7CiAKQEAgLTE1MzIsMTIgKzE1NDIsMTkgQEAgaW5kZXhfY29uY3VycmVudGx5X2J1 aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKIAl0YWJsZV9jbG9zZShoZWFwUmVsLCBOb0xvY2spOwog CWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CiAKKwkvKgorCSAqIFVwZGF0aW5n IHBnX2luZGV4IG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UK KwkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdl dFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAJLyoKIAkgKiBVcGRhdGUgdGhlIHBnX2luZGV4IHJv dyB0byBtYXJrIHRoZSBpbmRleCBhcyByZWFkeSBmb3IgaW5zZXJ0cy4gT25jZSB3ZQogCSAqIGNv bW1pdCB0aGlzIHRyYW5zYWN0aW9uLCBhbnkgbmV3IHRyYW5zYWN0aW9ucyB0aGF0IG9wZW4gdGhl IHRhYmxlIG11c3QKIAkgKiBpbnNlcnQgbmV3IGVudHJpZXMgaW50byB0aGUgaW5kZXggZm9yIGlu c2VydGlvbnMgYW5kIG5vbi1IT1QgdXBkYXRlcy4KIAkgKi8KIAlpbmRleF9zZXRfc3RhdGVfZmxh Z3MoaW5kZXhSZWxhdGlvbklkLCBJTkRFWF9DUkVBVEVfU0VUX1JFQURZKTsKKwkvKiB3ZSBjYW4g ZG8gYXdheSB3aXRoIG91ciBzbmFwc2hvdCAqLworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiB9CiAK IC8qCkBAIC0zMjA1LDcgKzMyMjIsOCBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhl YXBSZWxhdGlvbiwKIAkJCQkJCQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCiAJCQkJCQkJCSBO VUxMLAkvKiBzY2FuIGtleSAqLwogCQkJCQkJCQkgdHJ1ZSwJLyogYnVmZmVyIGFjY2VzcyBzdHJh dGVneSBPSyAqLwotCQkJCQkJCQkgdHJ1ZSk7IC8qIHN5bmNzY2FuIE9LICovCisJCQkJCQkJCSB0 cnVlLCAvKiBzeW5jc2NhbiBPSyAqLworCQkJCQkJCQkgZmFsc2UpOwogCiAJd2hpbGUgKHRhYmxl X3NjYW5fZ2V0bmV4dHNsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCXsK QEAgLTMyNjgsMTIgKzMyODYsMTYgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBoZWFw UmVsYXRpb24sCiAgKiBhcyBvZiB0aGUgc3RhcnQgb2YgdGhlIHNjYW4gKHNlZSB0YWJsZV9pbmRl eF9idWlsZF9zY2FuKSwgd2hlcmVhcyBhIG5vcm1hbAogICogYnVpbGQgdGFrZXMgY2FyZSB0byBp bmNsdWRlIHJlY2VudGx5LWRlYWQgdHVwbGVzLiAgVGhpcyBpcyBPSyBiZWNhdXNlCiAgKiB3ZSB3 b24ndCBtYXJrIHRoZSBpbmRleCB2YWxpZCB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIHRoYXQgbWln aHQgYmUgYWJsZQotICogdG8gc2VlIHRob3NlIHR1cGxlcyBhcmUgZ29uZS4gIFRoZSByZWFzb24g Zm9yIGRvaW5nIHRoYXQgaXMgdG8gYXZvaWQKKyAqIHRvIHNlZSB0aG9zZSB0dXBsZXMgYXJlIGdv bmUuICBPbmUgb2YgcmVhc29ucyBmb3IgZG9pbmcgdGhhdCBpcyB0byBhdm9pZAogICogYm9ndXMg dW5pcXVlLWluZGV4IGZhaWx1cmVzIGR1ZSB0byBjb25jdXJyZW50IFVQREFURXMgKHdlIG1pZ2h0 IHNlZQogICogZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJvdyBhcyBiZWluZyB2YWxp ZCB3aGVuIHdlIHBhc3Mgb3ZlciB0aGVtLAogICogaWYgd2UgdXNlZCBIZWFwVHVwbGVTYXRpc2Zp ZXNWYWN1dW0pLiAgVGhpcyBsZWF2ZXMgdXMgd2l0aCBhbiBpbmRleCB0aGF0CiAgKiBkb2VzIG5v dCBjb250YWluIGFueSB0dXBsZXMgYWRkZWQgdG8gdGhlIHRhYmxlIHdoaWxlIHdlIGJ1aWx0IHRo ZSBpbmRleC4KICAqCisgKiBGdXJ0aGVybW9yZSwgaW4gY2FzZSBvZiBub24tdW5pcXVlIGluZGV4 IHdlIHNldCBTT19SRVNFVF9TTkFQU0hPVCBmb3IgdGhlCisgKiBzY2FuLCB3aGljaCBjYXVzZXMg bmV3IHNuYXBzaG90IHRvIGJlIHJlZ2lzdGVyZWQgZXZlcnkgc28gb2Z0ZW4uIFRoZSByZWFzb24K KyAqIGZvciB0aGF0IGlzIHRvIHByb3BhZ2F0ZSB0aGUgeG1pbiBob3Jpem9uIGZvcndhcmQuCisg KgogICogTmV4dCwgd2UgbWFyayB0aGUgaW5kZXggImluZGlzcmVhZHkiIChidXQgc3RpbGwgbm90 ICJpbmRpc3ZhbGlkIikgYW5kCiAgKiBjb21taXQgdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBhbmQg c3RhcnQgYSB0aGlyZC4gIEFnYWluIHdlIHdhaXQgZm9yIGFsbAogICogdHJhbnNhY3Rpb25zIHRo YXQgY291bGQgaGF2ZSBiZWVuIG1vZGlmeWluZyB0aGUgdGFibGUgdG8gdGVybWluYXRlLiAgTm93 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDJmNjUyNDYzZTMuLmRmNTg3M2UxMjQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0xNjcxLDE1ICsxNjcxLDkgQEAgRGVmaW5lSW5k ZXgoT2lkIHRhYmxlSWQsCiAJICogSE9ULWNoYWluIG9yIHRoZSBleHRlbnNpb24gb2YgdGhlIGNo YWluIGlzIEhPVC1zYWZlIGZvciB0aGlzIGluZGV4LgogCSAqLwogCi0JLyogU2V0IEFjdGl2ZVNu YXBzaG90IHNpbmNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLwotCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCiAJLyogUGVyZm9y bSBjb25jdXJyZW50IGJ1aWxkIG9mIGluZGV4ICovCiAJaW5kZXhfY29uY3VycmVudGx5X2J1aWxk KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCk7CiAKLQkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91 ciBzbmFwc2hvdCAqLwotCVBvcEFjdGl2ZVNuYXBzaG90KCk7Ci0KIAkvKgogCSAqIENvbW1pdCB0 aGlzIHRyYW5zYWN0aW9uIHRvIG1ha2UgdGhlIGluZGlzcmVhZHkgdXBkYXRlIHZpc2libGUuCiAJ ICovCkBAIC00MDc2LDkgKzQwNzAsNiBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlpZiAo bmV3aWR4LT5zYWZlKQogCQkJc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKIAotCQkvKiBTZXQg QWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25zIGluIHRoZSBpbmRleGVzIG1heSBuZWVkIGl0 ICovCi0JCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCiAJ CS8qCiAJCSAqIFVwZGF0ZSBwcm9ncmVzcyBmb3IgdGhlIGluZGV4IHRvIGJ1aWxkLCB3aXRoIHRo ZSBjb3JyZWN0IHBhcmVudAogCQkgKiB0YWJsZSBpbnZvbHZlZC4KQEAgLTQwOTMsNyArNDA4NCw2 IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwg T2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCS8qIFBlcmZvcm0gY29uY3VycmVudCBidWls ZCBvZiBuZXcgaW5kZXggKi8KIAkJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKG5ld2lkeC0+dGFi bGVJZCwgbmV3aWR4LT5pbmRleElkKTsKIAotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCQlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYwppbmRleCAxZjc4ZGMzZDUzLi42Yjc1YzE0YzY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm5lci5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIK KyNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKIC8qIEdVQyBwYXJhbWV0ZXJzICovCiBkb3Vi bGUJCWN1cnNvcl90dXBsZV9mcmFjdGlvbiA9IERFRkFVTFRfQ1VSU09SX1RVUExFX0ZSQUNUSU9O OwpAQCAtNjg5MCw2ICs2ODkxLDcgQEAgcGxhbl9jcmVhdGVfaW5kZXhfd29ya2VycyhPaWQgdGFi bGVPaWQsIE9pZCBpbmRleE9pZCkKIAlSZWxhdGlvbgloZWFwOwogCVJlbGF0aW9uCWluZGV4Owog CVJlbE9wdEluZm8gKnJlbDsKKwlib29sCQluZWVkX3BvcF9hY3RpdmVfc25hcHNob3QgPSBmYWxz ZTsKIAlpbnQJCQlwYXJhbGxlbF93b3JrZXJzOwogCUJsb2NrTnVtYmVyIGhlYXBfYmxvY2tzOwog CWRvdWJsZQkJcmVsdHVwbGVzOwpAQCAtNjk0NSw2ICs2OTQ3LDExIEBAIHBsYW5fY3JlYXRlX2lu ZGV4X3dvcmtlcnMoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQpCiAJaGVhcCA9IHRhYmxlX29w ZW4odGFibGVPaWQsIE5vTG9jayk7CiAJaW5kZXggPSBpbmRleF9vcGVuKGluZGV4T2lkLCBOb0xv Y2spOwogCisJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5k ZXhlcyBtYXkgbmVlZCBpdCAqLworCWlmICghQWN0aXZlU25hcHNob3RTZXQoKSkgeworCQlQdXNo QWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJbmVlZF9wb3BfYWN0 aXZlX3NuYXBzaG90ID0gdHJ1ZTsKKwl9CiAJLyoKIAkgKiBEZXRlcm1pbmUgaWYgaXQncyBzYWZl IHRvIHByb2NlZWQuCiAJICoKQEAgLTcwMDIsNiArNzAwOSw4IEBAIHBsYW5fY3JlYXRlX2luZGV4 X3dvcmtlcnMoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQpCiAJCXBhcmFsbGVsX3dvcmtlcnMt LTsKIAogZG9uZToKKwlpZiAobmVlZF9wb3BfYWN0aXZlX3NuYXBzaG90KQorCQlQb3BBY3RpdmVT bmFwc2hvdCgpOwogCWluZGV4X2Nsb3NlKGluZGV4LCBOb0xvY2spOwogCXRhYmxlX2Nsb3NlKGhl YXAsIE5vTG9jayk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGFkYjQ3OGE5M2MuLmRjN2M3NjY2 NjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvcmVhZF9zdHJlYW0uaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGls cy9zbmFwc2hvdC5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAKICNk ZWZpbmUgREVGQVVMVF9UQUJMRV9BQ0NFU1NfTUVUSE9ECSJoZWFwIgpAQCAtNjksNiArNzAsMTgg QEAgdHlwZWRlZiBlbnVtIFNjYW5PcHRpb25zCiAJICogbmVlZGVkLiBJZiB0YWJsZSBkYXRhIG1h eSBiZSBuZWVkZWQsIHNldCBTT19ORUVEX1RVUExFUy4KIAkgKi8KIAlTT19ORUVEX1RVUExFUyA9 IDEgPDwgMTAsCisJLyoKKwkgKiBSZXNldCBzY2FuIGFuZCBjYXRhbG9nIHNuYXBzaG90IGVhY2gg cGFnZT8gSWYgc28sIGVhY2gKKwkgKiBTT19SRVNFVF9TTkFQU0hPVF9FQUNIX05fUEFHRSBwYWdl cyBhY3RpdmUgc25hcHNob3QgaXMgcG9wcGVkIGFuZAorCSAqIHVucmVnaXN0ZXJlZCwgY2F0YWxv ZyBzbmFwc2hvdCBpbnZhbGlkYXRlZCwgbGF0ZXN0IHNuYXBzaG90IGlzCisJICogcmVnaXN0ZXJl ZCBhbmQgcHVzaGVkIGFzIGFjdGl2ZS4KKwkgKgorCSAqIEF0IHRoZSBlbmQgb2YgdGhlIHNjYW4g c25hcHNob3QgaXMgcG9wcGVkIGFuZCB1bnJlZ2lzdGVyZWQgdG9vLgorCSAqIEdvYWwgb2Ygc3Vj aCBtb2RlIGlzIGtlZXAgeG1pbiBwcm9wYWdhdGluZyBob3Jpem9uIGZvcndhcmQuCisJICoKKwkg KiBzZWUgaGVhcF9yZXNldF9zY2FuX3NuYXBzaG90IGZvciBkZXRhaWxzLgorCSAqLworCVNPX1JF U0VUX1NOQVBTSE9UID0gMSA8PCAxMSwKIH0JCQlTY2FuT3B0aW9uczsKIAogLyoKQEAgLTkzNSw3 ICs5NDgsOCBAQCBleHRlcm4gVGFibGVTY2FuRGVzYyB0YWJsZV9iZWdpbnNjYW5fY2F0YWxvZyhS ZWxhdGlvbiByZWxhdGlvbiwgaW50IG5rZXlzLAogc3RhdGljIGlubGluZSBUYWJsZVNjYW5EZXNj CiB0YWJsZV9iZWdpbnNjYW5fc3RyYXQoUmVsYXRpb24gcmVsLCBTbmFwc2hvdCBzbmFwc2hvdCwK IAkJCQkJICBpbnQgbmtleXMsIHN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5LAotCQkJCQkgIGJvb2wg YWxsb3dfc3RyYXQsIGJvb2wgYWxsb3dfc3luYykKKwkJCQkJICBib29sIGFsbG93X3N0cmF0LCBi b29sIGFsbG93X3N5bmMsCisJCQkJCSAgYm9vbCByZXNldF9zbmFwc2hvdCkKIHsKIAl1aW50MzIJ CWZsYWdzID0gU09fVFlQRV9TRVFTQ0FOIHwgU09fQUxMT1dfUEFHRU1PREU7CiAKQEAgLTk0Myw2 ICs5NTcsMTMgQEAgdGFibGVfYmVnaW5zY2FuX3N0cmF0KFJlbGF0aW9uIHJlbCwgU25hcHNob3Qg c25hcHNob3QsCiAJCWZsYWdzIHw9IFNPX0FMTE9XX1NUUkFUOwogCWlmIChhbGxvd19zeW5jKQog CQlmbGFncyB8PSBTT19BTExPV19TWU5DOworCWlmIChyZXNldF9zbmFwc2hvdCkKKwl7CisJCUlO SkVDVElPTl9QT0lOVCgidGFibGVfYmVnaW5zY2FuX3N0cmF0X3Jlc2V0X3NuYXBzaG90cyIpOwor CQlBc3NlcnQoQWN0aXZlU25hcHNob3RTZXQoKSk7CisJCUFzc2VydChHZXRBY3RpdmVTbmFwc2hv dCgpID09IHNuYXBzaG90KTsKKwkJZmxhZ3MgfD0gKFNPX1JFU0VUX1NOQVBTSE9UIHwgU09fVEVN UF9TTkFQU0hPVCk7CisJfQogCiAJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+c2Nhbl9iZWdpbihy ZWwsIHNuYXBzaG90LCBua2V5cywga2V5LCBOVUxMLCBmbGFncyk7CiB9CkBAIC0xNzc5LDYgKzE4 MDAsMTAgQEAgdGFibGVfc2Nhbl9hbmFseXplX25leHRfdHVwbGUoVGFibGVTY2FuRGVzYyBzY2Fu LCBUcmFuc2FjdGlvbklkIE9sZGVzdFhtaW4sCiAgKiB2ZXJ5IGhhcmQgdG8gZGV0ZWN0IHdoZXRo ZXIgdGhleSdyZSByZWFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGNoYWluIHRpcC4KICAqIFRo aXMgb25seSByZWFsbHkgbWFrZXMgc2Vuc2UgZm9yIGhlYXAgQU0sIGl0IG1pZ2h0IG5lZWQgdG8g YmUgZ2VuZXJhbGl6ZWQKICAqIGZvciBvdGhlciBBTXMgbGF0ZXIuCisgKgorICogSW4gY2FzZSBv ZiBub24tdW5pcXVlIGluZGV4IGFuZCBub24tcGFyYWxsZWwgY29uY3VycmVudCBidWlsZAorICog U09fUkVTRVRfU05BUFNIT1QgaXMgYXBwbGllZCBmb3IgdGhlIHNjYW4uIFRoYXQgbGVhZHMgZm9y IGNoYW5naW5nIHNuYXBzaG90cworICogb24gdGhlIGZseSB0byBhbGxvdyB4bWluIGhvcml6b24g cHJvcGFnYXRlLgogICovCiBzdGF0aWMgaW5saW5lIGRvdWJsZQogdGFibGVfaW5kZXhfYnVpbGRf c2NhbihSZWxhdGlvbiB0YWJsZV9yZWwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2lu dHMvTWFrZWZpbGUKaW5kZXggMDc1M2E5ZGY1OC4uMjIyNWNkMGJmOCAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZQpAQCAtMTAsNyArMTAsNyBAQCBFWFRFTlNJ T04gPSBpbmplY3Rpb25fcG9pbnRzCiBEQVRBID0gaW5qZWN0aW9uX3BvaW50cy0tMS4wLnNxbAog UEdGSUxFREVTQyA9ICJpbmplY3Rpb25fcG9pbnRzIC0gZmFjaWxpdHkgZm9yIGluamVjdGlvbiBw b2ludHMiCiAKLVJFR1JFU1MgPSBpbmplY3Rpb25fcG9pbnRzIHJlaW5kZXhfY29uYworUkVHUkVT UyA9IGluamVjdGlvbl9wb2ludHMgcmVpbmRleF9jb25jIGNpY19yZXNldF9zbmFwc2hvdHMKIFJF R1JFU1NfT1BUUyA9IC0tZGxwYXRoPSQodG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzCiAK IElTT0xBVElPTiA9IGJhc2ljIGlucGxhY2UKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv aW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9jaWNfcmVzZXRfc25hcHNob3RzLm91dCBiL3NyYy90 ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9jaWNfcmVzZXRfc25hcHNob3Rz Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40Y2ZiYmIwNTkyCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVj dGVkL2NpY19yZXNldF9zbmFwc2hvdHMub3V0CkBAIC0wLDAgKzEsMTAyIEBACitDUkVBVEUgRVhU RU5TSU9OIGluamVjdGlvbl9wb2ludHM7CitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zZXRfbG9j YWwoKTsKKyBpbmplY3Rpb25fcG9pbnRzX3NldF9sb2NhbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdo ZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlJywgJ25vdGljZScpOworIGluamVjdGlv bl9wb2ludHNfYXR0YWNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ3RhYmxlX2JlZ2luc2Nhbl9zdHJhdF9y ZXNldF9zbmFwc2hvdHMnLCAnbm90aWNlJyk7CisgaW5qZWN0aW9uX3BvaW50c19hdHRhY2ggCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0NSRUFURSBTQ0hFTUEgY2lj X3Jlc2V0X3NuYXA7CitDUkVBVEUgVEFCTEUgY2ljX3Jlc2V0X3NuYXAudGJsKGkgaW50IHByaW1h cnkga2V5LCBqIGludCk7CitJTlNFUlQgSU5UTyBjaWNfcmVzZXRfc25hcC50YmwgU0VMRUNUIGks IGkgKiBJIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCkgcyhpKTsKK0NSRUFURSBGVU5DVElP TiBjaWNfcmVzZXRfc25hcC5wcmVkaWNhdGVfc3RhYmxlKGludGVnZXIpIFJFVFVSTlMgYm9vbCBJ TU1VVEFCTEUKKwkJCQkJCQkJCSAgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorQkVHSU4KKyAgICBF WEVDVVRFICdTRUxFQ1QgdHhpZF9jdXJyZW50KCknOworICAgIFJFVFVSTiBNT0QoJDEsIDIpID0g MDsKK0VORDsgJCQ7CitDUkVBVEUgRlVOQ1RJT04gY2ljX3Jlc2V0X3NuYXAucHJlZGljYXRlX3N0 YWJsZV9ub19wYXJhbSgpIFJFVFVSTlMgYm9vbCBJTU1VVEFCTEUKKwkJCQkJCQkJCSAgTEFOR1VB R0UgcGxwZ3NxbCBBUyAkJAorQkVHSU4KKyAgICBFWEVDVVRFICdTRUxFQ1QgdHhpZF9jdXJyZW50 KCknOworICAgIFJFVFVSTiBmYWxzZTsKK0VORDsgJCQ7CistLS0tLS0tLS0tLS0tLS0tCitBTFRF UiBUQUJMRSBjaWNfcmVzZXRfc25hcC50YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTApOworQ1JF QVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9zbmFwLnRibChp KTsKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0RST1Ag SU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0NSRUFURSBJTkRFWCBDT05D VVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9zbmFwLnRibChpKTsKK05PVElDRTogIG5vdGljZSB0 cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCB0YWJsZV9iZWdpbnNjYW5fc3RyYXRfcmVzZXRf c25hcHNob3RzCitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQg aGVhcF9yZXNldF9zY2FuX3NuYXBzaG90X2VmZmVjdGl2ZQorUkVJTkRFWCBJTkRFWCBDT05DVVJS RU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3Ig aW5qZWN0aW9uIHBvaW50IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdF9yZXNldF9zbmFwc2hvdHMKK05P VElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoZWFwX3Jlc2V0X3Nj YW5fc25hcHNob3RfZWZmZWN0aXZlCitEUk9QIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRf c25hcC5pZHg7CitDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeCBPTiBjaWNfcmVzZXRfc25h cC50YmwoTU9EKGksIDIpLCBqKSBXSEVSRSBNT0QoaSwgMikgPSAwOworTk9USUNFOiAgbm90aWNl IHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdF9yZXNl dF9zbmFwc2hvdHMKK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2lu dCBoZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlCitSRUlOREVYIElOREVYIENPTkNV UlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZv ciBpbmplY3Rpb24gcG9pbnQgdGFibGVfYmVnaW5zY2FuX3N0cmF0X3Jlc2V0X3NuYXBzaG90cwor Tk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBfcmVzZXRf c2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUKK0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNl dF9zbmFwLmlkeDsKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9z bmFwLnRibChpLCBqKSBXSEVSRSBjaWNfcmVzZXRfc25hcC5wcmVkaWNhdGVfc3RhYmxlKGkpOwor Tk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IHRhYmxlX2JlZ2lu c2Nhbl9zdHJhdF9yZXNldF9zbmFwc2hvdHMKK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9y IGluamVjdGlvbiBwb2ludCBoZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlCitSRUlO REVYIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitOT1RJQ0U6ICBub3Rp Y2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgdGFibGVfYmVnaW5zY2FuX3N0cmF0X3Jl c2V0X3NuYXBzaG90cworTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBv aW50IGhlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUKK0RST1AgSU5ERVggQ09OQ1VS UkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4 IE9OIGNpY19yZXNldF9zbmFwLnRibChpLCBqKSBXSEVSRSBjaWNfcmVzZXRfc25hcC5wcmVkaWNh dGVfc3RhYmxlX25vX3BhcmFtKCk7CitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmpl Y3Rpb24gcG9pbnQgdGFibGVfYmVnaW5zY2FuX3N0cmF0X3Jlc2V0X3NuYXBzaG90cworUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworTk9USUNFOiAgbm90aWNl IHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdF9yZXNl dF9zbmFwc2hvdHMKK0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsK K0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9zbmFwLnRibCBVU0lO RyBCUklOKGkpOworTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50 IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdF9yZXNldF9zbmFwc2hvdHMKK05PVElDRTogIG5vdGljZSB0 cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZm ZWN0aXZlCitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitO T1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgdGFibGVfYmVnaW5z Y2FuX3N0cmF0X3Jlc2V0X3NuYXBzaG90cworTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3Ig aW5qZWN0aW9uIHBvaW50IGhlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUKK0RST1Ag SU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKKy0tIFRoZSBzYW1lIGluIHBh cmFsbGVsIG1vZGUKK0FMVEVSIFRBQkxFIGNpY19yZXNldF9zbmFwLnRibCBTRVQgKHBhcmFsbGVs X3dvcmtlcnM9Mik7CitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gY2lj X3Jlc2V0X3NuYXAudGJsKGkpOworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0 X3NuYXAuaWR4OworRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4Owor Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gY2ljX3Jlc2V0X3NuYXAudGJsKGkpOwor UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworRFJPUCBJTkRF WCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBpZHggT04gY2ljX3Jlc2V0X3NuYXAudGJsKE1PRChpLCAyKSwgaikgV0hFUkUgTU9EKGks IDIpID0gMDsKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsK K0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0NSRUFURSBJTkRF WCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9zbmFwLnRibChpLCBqKSBXSEVSRSBjaWNf cmVzZXRfc25hcC5wcmVkaWNhdGVfc3RhYmxlKGkpOworTk9USUNFOiAgbm90aWNlIHRyaWdnZXJl ZCBmb3IgaW5qZWN0aW9uIHBvaW50IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdF9yZXNldF9zbmFwc2hv dHMKK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoZWFwX3Jl c2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlCitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBj aWNfcmVzZXRfc25hcC5pZHg7CitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rp b24gcG9pbnQgdGFibGVfYmVnaW5zY2FuX3N0cmF0X3Jlc2V0X3NuYXBzaG90cworTk9USUNFOiAg bm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBfcmVzZXRfc2Nhbl9zbmFw c2hvdF9lZmZlY3RpdmUKK0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlk eDsKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9zbmFwLnRibChp LCBqKSBXSEVSRSBjaWNfcmVzZXRfc25hcC5wcmVkaWNhdGVfc3RhYmxlX25vX3BhcmFtKCk7CitS RUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitEUk9QIElOREVY IENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitDUkVBVEUgSU5ERVggQ09OQ1VSUkVO VExZIGlkeCBPTiBjaWNfcmVzZXRfc25hcC50YmwgVVNJTkcgQlJJTihpKTsKK1JFSU5ERVggSU5E RVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0RST1AgSU5ERVggQ09OQ1VSUkVO VExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0RST1AgU0NIRU1BIGNpY19yZXNldF9zbmFwIENBU0NB REU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDMgb3RoZXIgb2JqZWN0cworREVUQUlMOiAg ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjaWNfcmVzZXRfc25hcC50YmwKK2Ryb3AgY2FzY2FkZXMg dG8gZnVuY3Rpb24gY2ljX3Jlc2V0X3NuYXAucHJlZGljYXRlX3N0YWJsZShpbnRlZ2VyKQorZHJv cCBjYXNjYWRlcyB0byBmdW5jdGlvbiBjaWNfcmVzZXRfc25hcC5wcmVkaWNhdGVfc3RhYmxlX25v X3BhcmFtKCkKK0RST1AgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9t b2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKaW5kZXggNThmMTkwMDExNS4uNDRj YzAyOGU4MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL21l c29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5i dWlsZApAQCAtMzUsNiArMzUsNyBAQCB0ZXN0cyArPSB7CiAgICAgJ3NxbCc6IFsKICAgICAgICdp bmplY3Rpb25fcG9pbnRzJywKICAgICAgICdyZWluZGV4X2NvbmMnLAorICAgICAgJ2NpY19yZXNl dF9zbmFwc2hvdHMnLAogICAgIF0sCiAgICAgJ3JlZ3Jlc3NfYXJncyc6IFsnLS1kbHBhdGgnLCBt ZXNvbi5idWlsZF9yb290KCkgLyAnc3JjL3Rlc3QvcmVncmVzcyddLAogICAgICMgVGhlIGluamVj dGlvbiBwb2ludHMgYXJlIGNsdXN0ZXItd2lkZSwgc28gZGlzYWJsZSBpbnN0YWxsY2hlY2sKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcWwvY2ljX3Jlc2V0 X3NuYXBzaG90cy5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvc3FsL2Np Y19yZXNldF9zbmFwc2hvdHMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjRmZWY1YTQ3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVj dGlvbl9wb2ludHMvc3FsL2NpY19yZXNldF9zbmFwc2hvdHMuc3FsCkBAIC0wLDAgKzEsODIgQEAK K0NSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKKworU0VMRUNUIGluamVjdGlvbl9w b2ludHNfc2V0X2xvY2FsKCk7CitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2hlYXBf cmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUnLCAnbm90aWNlJyk7CitTRUxFQ1QgaW5qZWN0 aW9uX3BvaW50c19hdHRhY2goJ3RhYmxlX2JlZ2luc2Nhbl9zdHJhdF9yZXNldF9zbmFwc2hvdHMn LCAnbm90aWNlJyk7CisKKworQ1JFQVRFIFNDSEVNQSBjaWNfcmVzZXRfc25hcDsKK0NSRUFURSBU QUJMRSBjaWNfcmVzZXRfc25hcC50YmwoaSBpbnQgcHJpbWFyeSBrZXksIGogaW50KTsKK0lOU0VS VCBJTlRPIGNpY19yZXNldF9zbmFwLnRibCBTRUxFQ1QgaSwgaSAqIEkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMjAwKSBzKGkpOworCitDUkVBVEUgRlVOQ1RJT04gY2ljX3Jlc2V0X3NuYXAucHJl ZGljYXRlX3N0YWJsZShpbnRlZ2VyKSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxFCisJCQkJCQkJCQkg IExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisgICAgRVhFQ1VURSAnU0VMRUNUIHR4aWRf Y3VycmVudCgpJzsKKyAgICBSRVRVUk4gTU9EKCQxLCAyKSA9IDA7CitFTkQ7ICQkOworCitDUkVB VEUgRlVOQ1RJT04gY2ljX3Jlc2V0X3NuYXAucHJlZGljYXRlX3N0YWJsZV9ub19wYXJhbSgpIFJF VFVSTlMgYm9vbCBJTU1VVEFCTEUKKwkJCQkJCQkJCSAgTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAor QkVHSU4KKyAgICBFWEVDVVRFICdTRUxFQ1QgdHhpZF9jdXJyZW50KCknOworICAgIFJFVFVSTiBm YWxzZTsKK0VORDsgJCQ7CisKKy0tLS0tLS0tLS0tLS0tLS0KK0FMVEVSIFRBQkxFIGNpY19yZXNl dF9zbmFwLnRibCBTRVQgKHBhcmFsbGVsX3dvcmtlcnM9MCk7CisKK0NSRUFURSBVTklRVUUgSU5E RVggQ09OQ1VSUkVOVExZIGlkeCBPTiBjaWNfcmVzZXRfc25hcC50YmwoaSk7CitSRUlOREVYIElO REVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitEUk9QIElOREVYIENPTkNVUlJF TlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CisKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4 IE9OIGNpY19yZXNldF9zbmFwLnRibChpKTsKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNp Y19yZXNldF9zbmFwLmlkeDsKK0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNpY19yZXNldF9zbmFw LmlkeDsKKworQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gY2ljX3Jlc2V0X3NuYXAu dGJsKE1PRChpLCAyKSwgaikgV0hFUkUgTU9EKGksIDIpID0gMDsKK1JFSU5ERVggSU5ERVggQ09O Q1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNp Y19yZXNldF9zbmFwLmlkeDsKKworQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gY2lj X3Jlc2V0X3NuYXAudGJsKGksIGopIFdIRVJFIGNpY19yZXNldF9zbmFwLnByZWRpY2F0ZV9zdGFi bGUoaSk7CitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitE Uk9QIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CisKK0NSRUFURSBJTkRF WCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNldF9zbmFwLnRibChpLCBqKSBXSEVSRSBjaWNf cmVzZXRfc25hcC5wcmVkaWNhdGVfc3RhYmxlX25vX3BhcmFtKCk7CitSRUlOREVYIElOREVYIENP TkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitEUk9QIElOREVYIENPTkNVUlJFTlRMWSBj aWNfcmVzZXRfc25hcC5pZHg7CisKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIGNp Y19yZXNldF9zbmFwLnRibCBVU0lORyBCUklOKGkpOworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0 X3NuYXAuaWR4OworCistLSBUaGUgc2FtZSBpbiBwYXJhbGxlbCBtb2RlCitBTFRFUiBUQUJMRSBj aWNfcmVzZXRfc25hcC50YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTIpOworCitDUkVBVEUgVU5J UVVFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gY2ljX3Jlc2V0X3NuYXAudGJsKGkpOworUkVJ TkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworRFJPUCBJTkRFWCBD T05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworCitDUkVBVEUgSU5ERVggQ09OQ1VSUkVO VExZIGlkeCBPTiBjaWNfcmVzZXRfc25hcC50YmwoaSk7CitSRUlOREVYIElOREVYIENPTkNVUlJF TlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitEUk9QIElOREVYIENPTkNVUlJFTlRMWSBjaWNfcmVz ZXRfc25hcC5pZHg7CisKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIGNpY19yZXNl dF9zbmFwLnRibChNT0QoaSwgMiksIGopIFdIRVJFIE1PRChpLCAyKSA9IDA7CitSRUlOREVYIElO REVYIENPTkNVUlJFTlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CitEUk9QIElOREVYIENPTkNVUlJF TlRMWSBjaWNfcmVzZXRfc25hcC5pZHg7CisKK0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4 IE9OIGNpY19yZXNldF9zbmFwLnRibChpLCBqKSBXSEVSRSBjaWNfcmVzZXRfc25hcC5wcmVkaWNh dGVfc3RhYmxlKGkpOworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAu aWR4OworRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworCitDUkVB VEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeCBPTiBjaWNfcmVzZXRfc25hcC50YmwoaSwgaikgV0hF UkUgY2ljX3Jlc2V0X3NuYXAucHJlZGljYXRlX3N0YWJsZV9ub19wYXJhbSgpOworUkVJTkRFWCBJ TkRFWCBDT05DVVJSRU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworRFJPUCBJTkRFWCBDT05DVVJS RU5UTFkgY2ljX3Jlc2V0X3NuYXAuaWR4OworCitDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGlk eCBPTiBjaWNfcmVzZXRfc25hcC50YmwgVVNJTkcgQlJJTihpKTsKK1JFSU5ERVggSU5ERVggQ09O Q1VSUkVOVExZIGNpY19yZXNldF9zbmFwLmlkeDsKK0RST1AgSU5ERVggQ09OQ1VSUkVOVExZIGNp Y19yZXNldF9zbmFwLmlkeDsKKworRFJPUCBTQ0hFTUEgY2ljX3Jlc2V0X3NuYXAgQ0FTQ0FERTsK KworRFJPUCBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKLS0gCjIuNDMuMAoK --0000000000000bd55a0626b87e78--