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 1s4K2f-002mJ8-OW for pgsql-hackers@arkaria.postgresql.org; Tue, 07 May 2024 12:35:33 +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 1s4K2c-002qmb-Iy for pgsql-hackers@arkaria.postgresql.org; Tue, 07 May 2024 12:35:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s4K2c-002qmT-6T for pgsql-hackers@lists.postgresql.org; Tue, 07 May 2024 12:35:31 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1s4K2Z-00209d-GQ for pgsql-hackers@postgresql.org; Tue, 07 May 2024 12:35:30 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-a4702457ccbso788859866b.3 for ; Tue, 07 May 2024 05:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715085326; x=1715690126; 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=KF+Rn5tjyjAuzrfe6aBmXOFVzaNfYD/gA5uAGzneiu4=; b=Qm0Aj/Wob7VXTFgPRZc3W+Qi8GMTrgsln0o/gqBQFooiiJtkB/BlSqbx6Eaqbmb5pA KYknR2tLErpN73RZoJyc+FYJI/XjlWL31qoIUsultrLEK22VruF/6aamlEgLaMaIVe+o KuEMCCFkz8GCJVAEdq0y5X2B+r0fGYBbv8pkRXUz0QvNmJbes7aHRRNMmfY4FM8/piEV qiQbuAqKgIwOJk/1ybmM5UCT/4u/PB4BiD1QYB0uhC1u0jbJlk4sYt1+jWqtLtwcgQHF fyDTzhYuF+fKC/aO9pn19diJkR/eamYd0T5uMgxBQr8D2qmdjTZmpIM4zBsmu+i5+8pf DAlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715085326; x=1715690126; 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=KF+Rn5tjyjAuzrfe6aBmXOFVzaNfYD/gA5uAGzneiu4=; b=PEEPAmGhCI3roP7PHhv5+7e/lEknOU1TLCBigrtugNGVzvGZ2beg7L48Szn1BBt9Vf UO8Ef9lj1RDnis19q/E5yygApAcheoKLYuKbG/zp4lneOsfYCzt71ElwRDhzwBdU4kUK nfLHZp7W2Rlcypi+PhJVxDvSpCJX65EGGs9KzmJqypDL6JGIKMnBTaHiX5MArapk/Fr7 K7nujPlKQGnjqypmrMOzeznUJIKc8oQGRNxnV/L6mVd+ySF1e5WmHeI1hUBLF6BSxTvr MXau35o2KCrgJhim9E7iq9spcCMvqP/6LKyhXR32Bxissx6qkSPTa3zw2YIdoSL7ZsgE wS3g== X-Forwarded-Encrypted: i=1; AJvYcCUOcv4Qnu2zTEx2LU7eZ8sk19/o6SugokAPfFhJcxMhTaxPPeH4rYkHzjtWDDq1I8hTCxN322S9KYbM6wEkrX2xDF949dwEm8msB8a1 X-Gm-Message-State: AOJu0YxB1F3ZaMnbwDrOPtRKSh6ildMkdxVoInQW1dspANfi1NLk4YvP M1fegx3lko1Zh+q/VwmN3dp8Y615TVZULgXJf4WefgJp4DPoBYZ0NmXhns/qWa7aLhXK8rzS1CX 0Of7DVuEkB+H0SKusCdEu46UjL/NKLbqA X-Google-Smtp-Source: AGHT+IGhfKhVaLkI0LK/0tXzgLvpbQRrWyITL61ozf1YUQ5S/dWYHf+MJTKtbtSPj8EiNL6zQjImCBSeHf3Oy65wed0= X-Received: by 2002:a17:906:d7a5:b0:a59:c28a:7ec2 with SMTP id pk5-20020a170906d7a500b00a59c28a7ec2mr4221146ejb.41.1715085326003; Tue, 07 May 2024 05:35:26 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Michail Nikolaev Date: Tue, 7 May 2024 14:35:13 +0200 Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Matthias van de Meent Cc: Melanie Plageman , PostgreSQL Hackers , Andrey Borodin Content-Type: multipart/mixed; boundary="0000000000009dc8150617dc6ba3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009dc8150617dc6ba3 Content-Type: multipart/alternative; boundary="0000000000009dc8130617dc6ba1" --0000000000009dc8130617dc6ba1 Content-Type: text/plain; charset="UTF-8" Hello, Matthias and others! Updated WIP in attach. Changes are: * Renaming, now it feels better for me * More reliable approach in `GlobalVisHorizonKindForRel` to make sure we have not missed `rd_safeindexconcurrentlybuilding` by calling `RelationGetIndexList` if required * Optimization to avoid any additional `RelationGetIndexList` if zero of concurrently indexes are being built * TOAST moved to TODO, since looks like it is out of scope - but not sure yet, need to dive dipper TODO: * TOAST * docs and comments * make sure non-data tables are not affected * Per-database scope of optimization * Handle index building errors correctly in optimization code * More tests: create index, multiple re-indexes, multiple tables Thanks, Michail. --0000000000009dc8130617dc6ba1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello, Matthias and others!

Updated WIP in attach.<= br>
Changes are:
* Renaming, now it feels better for me
* More rel= iable approach in `GlobalVisHorizonKindForRel` to make sure we have not mis= sed `rd_safeindexconcurrentlybuilding` by calling `RelationGetIndexList` if= required
* Optimization to avoid any additional `RelationGetIndexList` = if zero of concurrently indexes are being built
* TOAST moved to TODO, s= ince looks like it is out of scope - but not sure yet, need to dive dipper<= div>
TODO:
* TOAST
* docs and comments
* make sure non-data tables are not affected
* Per-databa= se scope of optimization=C2=A0
* Handle index building errors cor= rectly in optimization code
* More tests: create index, multiple = re-indexes, multiple tables

Thanks,
Michail.
--0000000000009dc8130617dc6ba1-- --0000000000009dc8150617dc6ba3 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-WIP-fix-d9d076222f5b-VACUUM-ignore-indexing-opera.patch" Content-Disposition: attachment; filename="v2-0001-WIP-fix-d9d076222f5b-VACUUM-ignore-indexing-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvwdggkb0 RnJvbSA2MzY3NzA0NmVmYzliNmExZDkzZjkyNDhjNmQ5ZGNlMTRhOTQ1YTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBua2V5IDxtaWNoYWlsLm5pa29sYWV2QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCA3IE1heSAyMDI0IDE0OjI0OjA5ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2Ml0gV0lQ OiBmaXggZDlkMDc2MjIyZjViICJWQUNVVU06IGlnbm9yZSBpbmRleGluZyBvcGVyYXRpb25zIAog d2l0aCBDT05DVVJSRU5UTFkiIHdoaWNoIHdhcyByZXZlcnRlZCBieSBlMjhiYjg4NTE5NjkuCgpJ c3N1ZSB3YXMgY2F1c2VkIGJ5IGFic2VudCBvZiBhbnkgc25hcHNob3QgYWN0dWFsbHkgcHJvdGVj dHMgdGhlIGRhdGEgaW4gcmVsYXRpb24gaW4gdGhlIHJlcXVpcmVkIHRvIGJ1aWxkIGluZGV4IGNv cnJlY3RseS4KCkludHJvZHVjZSBuZXcgdHlwZSBvZiB2aXNpYmlsaXR5IGhvcml6b24gdG8gYmUg dXNlZCBmb3IgcmVsYXRpb24gd2l0aCBjb25jdXJyZW50bHkgYnVpbGQgaW5kZXhlcyAoaW4gdGhl IGNhc2Ugb2YgInNhZmUiIGluZGV4KS4KCk5vdyBgR2xvYmFsVmlzSG9yaXpvbktpbmRGb3JSZWxg IG1heSBkeW5hbWljYWxseSBkZWNpZGUgd2hpY2ggaG9yaXpvbiB0byB1c2VkIGJhc2Ugb2YgdGhl IGRhdGEgYWJvdXQgc2FmZSBpbmRleGVzIGJlaW5nIGJ1aWx0IGNvbmN1cnJlbnRseS4KClRvIHJl ZHVjZSBwZXJmb3JtYW5jZSBpbXBhY3QgY291bnRlciBvZiBjb25jdXJyZW50bHkgYnVpbHQgaW5k ZXhlcyB1cGRhdGVkIGluIHNoYXJlZCBtZW1vcnkuCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jICAgICAgICAgICAgICB8ICAzNiArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2lu ZGV4Y21kcy5jICAgICAgICAgfCAgMjAgKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5j ICAgICAgfCAgODggKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYyAgICAgICB8ICAxMSArKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2X2NvbmN1cnJlbnRs eS5wbCB8IDE1NSArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9p bmRleC5oICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAg ICAgICAgICAgICAgIHwgICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMzExIGluc2VydGlvbnMoKyks IDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19hbWNoZWNrL3Qv MDA2X2NvbmN1cnJlbnRseS5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5k ZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA1YTg1NjhjNTVjLi4zY2Fh MmJhYjEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC05Nyw2ICs5NywxMSBAQCB0eXBlZGVmIHN0cnVj dAogCU9pZAkJCXBlbmRpbmdSZWluZGV4ZWRJbmRleGVzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07 CiB9IFNlcmlhbGl6ZWRSZWluZGV4U3RhdGU7CiAKK3R5cGVkZWYgc3RydWN0IHsKKwlwZ19hdG9t aWNfdWludDMyIG51bVNhZmVDb25jdXJyZW50bHlCdWlsdEluZGV4ZXM7Cit9IFNhZmVJQ1NoYXJl ZFN0YXRlOworc3RhdGljIFNhZmVJQ1NoYXJlZFN0YXRlICpTYWZlSUNTdGF0ZVNobWVtOworCiAv KiBub24tZXhwb3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBib29sIHJlbGF0aW9u SGFzUHJpbWFyeUtleShSZWxhdGlvbiByZWwpOwogc3RhdGljIFR1cGxlRGVzYyBDb25zdHJ1Y3RU dXBsZURlc2NyaXB0b3IoUmVsYXRpb24gaGVhcFJlbGF0aW9uLApAQCAtMTc2LDYgKzE4MSwzNyBA QCByZWxhdGlvbkhhc1ByaW1hcnlLZXkoUmVsYXRpb24gcmVsKQogCXJldHVybiByZXN1bHQ7CiB9 CiAKKwordm9pZCBTYWZlSUNTdGF0ZVNobWVtSW5pdCh2b2lkKQoreworCWJvb2wJCWZvdW5kOwor CisJU2FmZUlDU3RhdGVTaG1lbSA9IChTYWZlSUNTaGFyZWRTdGF0ZSAqKQorCQkJU2htZW1Jbml0 U3RydWN0KCJTYWZlIENvbmN1cnJlbnRseSBCdWlsZCBJbmRleGVzIiwKKwkJCQkJCQlzaXplb2Yo U2FmZUlDU2hhcmVkU3RhdGUpLAorCQkJCQkJCSZmb3VuZCk7CisKKwlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQorCXsKKwkJQXNzZXJ0KCFmb3VuZCk7CisJCXBnX2F0b21pY19pbml0X3UzMigmU2Fm ZUlDU3RhdGVTaG1lbS0+bnVtU2FmZUNvbmN1cnJlbnRseUJ1aWx0SW5kZXhlcywgMCk7CisJfSBl bHNlCisJCUFzc2VydChmb3VuZCk7Cit9CisKK3ZvaWQgVXBkYXRlTnVtU2FmZUNvbmN1cnJlbnRs eUJ1aWx0SW5kZXhlcyhib29sIGluY3JlbWVudCkKK3sKKwlpZiAoaW5jcmVtZW50KQorCQlwZ19h dG9taWNfZmV0Y2hfYWRkX3UzMigmU2FmZUlDU3RhdGVTaG1lbS0+bnVtU2FmZUNvbmN1cnJlbnRs eUJ1aWx0SW5kZXhlcywgMSk7CisJZWxzZQorCQlwZ19hdG9taWNfZmV0Y2hfc3ViX3UzMigmU2Fm ZUlDU3RhdGVTaG1lbS0+bnVtU2FmZUNvbmN1cnJlbnRseUJ1aWx0SW5kZXhlcywgMSk7Cit9CisK K2Jvb2wgSXNBbnlTYWZlSW5kZXhCdWlsZHNDb25jdXJyZW50bHkoKQoreworCXJldHVybiBwZ19h dG9taWNfcmVhZF91MzIoJlNhZmVJQ1N0YXRlU2htZW0tPm51bVNhZmVDb25jdXJyZW50bHlCdWls dEluZGV4ZXMpID4gMDsKK30KKwogLyoKICAqIGluZGV4X2NoZWNrX3ByaW1hcnlfa2V5CiAgKgkJ QXBwbHkgc3BlY2lhbCBjaGVja3MgbmVlZGVkIGJlZm9yZSBjcmVhdGluZyBhIFBSSU1BUlkgS0VZ IGluZGV4CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IGQ5MDE2ZWY0ODcuLjY2MzQ1MGJh MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0xNjM2LDYgKzE2MzYsOCBAQCBEZWZp bmVJbmRleChPaWQgdGFibGVJZCwKIAkgKiBob2xkIGxvY2sgb24gdGhlIHBhcmVudCB0YWJsZS4g IFRoaXMgbWlnaHQgbmVlZCB0byBjaGFuZ2UgbGF0ZXIuCiAJICovCiAJTG9ja1JlbGF0aW9uSWRG b3JTZXNzaW9uKCZoZWFwcmVsaWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJaWYgKHNh ZmVfaW5kZXggJiYgY29uY3VycmVudCkKKwkJVXBkYXRlTnVtU2FmZUNvbmN1cnJlbnRseUJ1aWx0 SW5kZXhlcyh0cnVlKTsKIAogCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CkBAIC0xODA0LDcgKzE4MDYsMTUgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxl SWQsCiAJICogdG8gcmVwbGFuOyBzbyByZWxjYWNoZSBmbHVzaCBvbiB0aGUgaW5kZXggaXRzZWxm IHdhcyBzdWZmaWNpZW50LikKIAkgKi8KIAlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQo aGVhcHJlbGlkLnJlbElkKTsKKwkvKiBDb21taXQgaW5kZXggYXMgdmFsaWQgYmVmb3JlIHJlZHVj aW5nIGNvdW50ZXIgb2Ygc2FmZSBjb25jdXJyZW50bHkgYnVpbGQgaW5kZXhlcyAqLworCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCisJQXNzZXJ0KGNvbmN1cnJlbnQpOworCWlmIChzYWZl X2luZGV4KQorCQlVcGRhdGVOdW1TYWZlQ29uY3VycmVudGx5QnVpbHRJbmRleGVzKGZhbHNlKTsK KworCS8qIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIHRvIGZpbmlzaCBwcm9jZXNzIHByb3Blcmx5 ICovCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAkvKgogCSAqIExhc3QgdGhpbmcgdG8g ZG8gaXMgcmVsZWFzZSB0aGUgc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIHRoZSBwYXJlbnQgdGFibGUu CiAJICovCkBAIC0zOTAyLDYgKzM5MTIsOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHko Y29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJ CQkgaW5kZXhSZWwtPnJkX2luZHByZWQgPT0gTklMKTsKIAkJaWR4LT50YWJsZUlkID0gUmVsYXRp b25HZXRSZWxpZChoZWFwUmVsKTsKIAkJaWR4LT5hbUlkID0gaW5kZXhSZWwtPnJkX3JlbC0+cmVs YW07CisJCWlmIChpZHgtPnNhZmUpCisJCQlVcGRhdGVOdW1TYWZlQ29uY3VycmVudGx5QnVpbHRJ bmRleGVzKHRydWUpOwogCiAJCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0IGJlIGNhbGxlZCBm b3IgdGVtcG9yYXJ5IHJlbGF0aW9ucy4gKi8KIAkJaWYgKGluZGV4UmVsLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCkBAIC00MzQ1LDYgKzQzNTcsMTQgQEAg UmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJVW5sb2NrUmVsYXRpb25JZEZvclNlc3Npb24obG9j a3JlbGlkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCX0KIAorCS8vIG5vdyB3ZSBtYXkg Y2xlYXIgc2FmZSBpbmRleCBidWlsZGluZyBmbGFncworCWZvcmVhY2gobGMsIG5ld0luZGV4SWRz KQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0KGxjKTsKKwkJaWYgKG5l d2lkeC0+c2FmZSkKKwkJCVVwZGF0ZU51bVNhZmVDb25jdXJyZW50bHlCdWlsdEluZGV4ZXMoZmFs c2UpOworCX0KKwogCS8qIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIHRvIGZpbmlzaCBwcm9jZXNz IHByb3Blcmx5ICovCiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv aXBjaS5jCmluZGV4IDUyMWVkNTQxOGMuLjI2MGE2MzRmMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ3ByZWZldGNoZXIuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292 ZXJ5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2Fz eW5jLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCkBAIC0z NTcsNiArMzU4LDcgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlTdGF0c1No bWVtSW5pdCgpOwogCVdhaXRFdmVudEV4dGVuc2lvblNobWVtSW5pdCgpOwogCUluamVjdGlvblBv aW50U2htZW1Jbml0KCk7CisJU2FmZUlDU3RhdGVTaG1lbUluaXQoKTsKIH0KIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggMWE4M2M0MjIwYi4uZGUzYjNhNWMwYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRl ICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL2NhdGFsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1hbmRzLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0yMzYsNiArMjM3LDEyIEBAIHR5cGVkZWYgc3Ry dWN0IENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdAogCSAqLwogCVRyYW5zYWN0aW9uSWQgZGF0YV9v bGRlc3Rfbm9ucmVtb3ZhYmxlOwogCisJLyoKKwkgKiBPbGRlc3QgeGlkIGZvciB3aGljaCBkZWxl dGVkIHR1cGxlcyBuZWVkIHRvIGJlIHJldGFpbmVkIGluIG5vcm1hbCB1c2VyCisJICogZGVmaW5l ZCB0YWJsZXMgd2l0aCBpbmRleCBidWlsZGluZyBpbiBwcm9ncmVzcyBieSBwcm9jZXNzIHdpdGgg UFJPQ19JTlNBRkVfSUMuCisJICovCisJVHJhbnNhY3Rpb25JZCBkYXRhX3NhZmVfaWNfb2xkZXN0 X25vbnJlbW92YWJsZTsKKwogCS8qCiAJICogT2xkZXN0IHhpZCBmb3Igd2hpY2ggZGVsZXRlZCB0 dXBsZXMgbmVlZCB0byBiZSByZXRhaW5lZCBpbiB0aGlzCiAJICogc2Vzc2lvbidzIHRlbXBvcmFy eSB0YWJsZXMuCkBAIC0yNTEsNiArMjU4LDcgQEAgdHlwZWRlZiBlbnVtIEdsb2JhbFZpc0hvcml6 b25LaW5kCiAJVklTSE9SSVpPTl9TSEFSRUQsCiAJVklTSE9SSVpPTl9DQVRBTE9HLAogCVZJU0hP UklaT05fREFUQSwKKwlWSVNIT1JJWk9OX0RBVEFfU0FGRV9JQywKIAlWSVNIT1JJWk9OX1RFTVAs CiB9IEdsb2JhbFZpc0hvcml6b25LaW5kOwogCkBAIC0yOTcsNiArMzA1LDcgQEAgc3RhdGljIFRy YW5zYWN0aW9uSWQgc3RhbmRieVNuYXBzaG90UGVuZGluZ1htaW47CiBzdGF0aWMgR2xvYmFsVmlz U3RhdGUgR2xvYmFsVmlzU2hhcmVkUmVsczsKIHN0YXRpYyBHbG9iYWxWaXNTdGF0ZSBHbG9iYWxW aXNDYXRhbG9nUmVsczsKIHN0YXRpYyBHbG9iYWxWaXNTdGF0ZSBHbG9iYWxWaXNEYXRhUmVsczsK K3N0YXRpYyBHbG9iYWxWaXNTdGF0ZSBHbG9iYWxWaXNEYXRhU2FmZUljUmVsczsKIHN0YXRpYyBH bG9iYWxWaXNTdGF0ZSBHbG9iYWxWaXNUZW1wUmVsczsKIAogLyoKQEAgLTE3MjcsOSArMTczNiw2 IEBAIENvbXB1dGVYaWRIb3Jpem9ucyhDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJYm9v bAkJaW5fcmVjb3ZlcnkgPSBSZWNvdmVyeUluUHJvZ3Jlc3MoKTsKIAlUcmFuc2FjdGlvbklkICpv dGhlcl94aWRzID0gUHJvY0dsb2JhbC0+eGlkczsKIAotCS8qIGluZmVycmVkIGFmdGVyIFByb2NB cnJheUxvY2sgaXMgcmVsZWFzZWQgKi8KLQloLT5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGUg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQogCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywg TFdfU0hBUkVEKTsKIAogCWgtPmxhdGVzdF9jb21wbGV0ZWQgPSBUcmFuc2FtVmFyaWFibGVzLT5s YXRlc3RDb21wbGV0ZWRYaWQ7CkBAIC0xNzQ5LDcgKzE3NTUsOSBAQCBDb21wdXRlWGlkSG9yaXpv bnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCiAJCWgtPm9sZGVzdF9jb25zaWRlcmVk X3J1bm5pbmcgPSBpbml0aWFsOwogCQloLT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSA9IGlu aXRpYWw7CisJCWgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZSA9IGluaXRpYWw7CiAJCWgt PmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSA9IGluaXRpYWw7CisJCWgtPmRhdGFfc2FmZV9pY19v bGRlc3Rfbm9ucmVtb3ZhYmxlID0gaW5pdGlhbDsKIAogCQkvKgogCQkgKiBPbmx5IG1vZGlmaWNh dGlvbnMgbWFkZSBieSB0aGlzIGJhY2tlbmQgYWZmZWN0IHRoZSBob3Jpem9uIGZvcgpAQCAtMTg0 NywxMSArMTg1NSwyOCBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVz dWx0ICpoKQogCQkJKHN0YXR1c0ZsYWdzICYgUFJPQ19BRkZFQ1RTX0FMTF9IT1JJWk9OUykgfHwK IAkJCWluX3JlY292ZXJ5KQogCQl7Ci0JCQloLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUgPQot CQkJCVRyYW5zYWN0aW9uSWRPbGRlcihoLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUsIHhtaW4p OworCQkJaC0+ZGF0YV9zYWZlX2ljX29sZGVzdF9ub25yZW1vdmFibGUgPQorCQkJCQlUcmFuc2Fj dGlvbklkT2xkZXIoaC0+ZGF0YV9zYWZlX2ljX29sZGVzdF9ub25yZW1vdmFibGUsIHhtaW4pOwor CisJCQlpZiAoIShzdGF0dXNGbGFncyAmIFBST0NfSU5fU0FGRV9JQykpCisJCQkJaC0+ZGF0YV9v bGRlc3Rfbm9ucmVtb3ZhYmxlID0KKwkJCQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPmRhdGFfb2xk ZXN0X25vbnJlbW92YWJsZSwgeG1pbik7CisKKwkJCS8qIENhdGFsb2cgdGFibGVzIG5lZWQgdG8g Y29uc2lkZXIgYWxsIGJhY2tlbmRzIGluIHRoaXMgZGIgKi8KKwkJCWgtPmNhdGFsb2dfb2xkZXN0 X25vbnJlbW92YWJsZSA9CisJCQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPmNhdGFsb2dfb2xkZXN0 X25vbnJlbW92YWJsZSwgeG1pbik7CisKIAkJfQogCX0KIAorCS8qIGNhdGFsb2cgaG9yaXpvbiBz aG91bGQgbmV2ZXIgYmUgbGF0ZXIgdGhhbiBkYXRhICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRQ cmVjZWRlc09yRXF1YWxzKGgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZSwKKwkJCQkJCQkJ CQkgaC0+ZGF0YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlKSk7CisKKwkvKiBkYXRhIGhvcml6b24gc2hv dWxkIG5ldmVyIGJlIGxhdGVyIHRoYW4gc2FmZSBpbmRleCBidWlsZGluZyBob3Jpem9uICovCisJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxzKGgtPmRhdGFfc2FmZV9pY19vbGRl c3Rfbm9ucmVtb3ZhYmxlLAorCQkJCQkJCQkJCSBoLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUp KTsKKwogCS8qCiAJICogSWYgaW4gcmVjb3ZlcnkgZmV0Y2ggb2xkZXN0IHhpZCBpbiBLbm93bkFz c2lnbmVkWGlkcywgd2lsbCBiZSBhcHBsaWVkCiAJICogYWZ0ZXIgbG9jayBpcyByZWxlYXNlZC4K QEAgLTE4NzMsNiArMTg5OCwxMCBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6 b25zUmVzdWx0ICpoKQogCQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPnNoYXJlZF9vbGRlc3Rfbm9u cmVtb3ZhYmxlLCBrYXhtaW4pOwogCQloLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUgPQogCQkJ VHJhbnNhY3Rpb25JZE9sZGVyKGgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSwga2F4bWluKTsK KwkJaC0+ZGF0YV9zYWZlX2ljX29sZGVzdF9ub25yZW1vdmFibGUgPQorCQkJCVRyYW5zYWN0aW9u SWRPbGRlcihoLT5kYXRhX3NhZmVfaWNfb2xkZXN0X25vbnJlbW92YWJsZSwga2F4bWluKTsKKwkJ aC0+Y2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlID0KKwkJCVRyYW5zYWN0aW9uSWRPbGRlciho LT5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGUsIGtheG1pbik7CiAJCS8qIHRlbXAgcmVsYXRp b25zIGNhbm5vdCBiZSBhY2Nlc3NlZCBpbiByZWNvdmVyeSAqLwogCX0KIApAQCAtMTg4MCw2ICsx OTA5LDggQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkK IAkJCQkJCQkJCQkgaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUpKTsKIAlBc3NlcnQoVHJh bnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUs CiAJCQkJCQkJCQkJIGgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSkpOworCUFzc2VydChUcmFu c2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyhoLT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSwK KwkJCQkJCQkJCQkgaC0+ZGF0YV9zYWZlX2ljX29sZGVzdF9ub25yZW1vdmFibGUpKTsKIAogCS8q CiAJICogQ2hlY2sgd2hldGhlciB0aGVyZSBhcmUgcmVwbGljYXRpb24gc2xvdHMgcmVxdWlyaW5n IGFuIG9sZGVyIHhtaW4uCkBAIC0xODg4LDYgKzE5MTksOCBAQCBDb21wdXRlWGlkSG9yaXpvbnMo Q29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+c2hh cmVkX29sZGVzdF9ub25yZW1vdmFibGUsIGgtPnNsb3RfeG1pbik7CiAJaC0+ZGF0YV9vbGRlc3Rf bm9ucmVtb3ZhYmxlID0KIAkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPmRhdGFfb2xkZXN0X25vbnJl bW92YWJsZSwgaC0+c2xvdF94bWluKTsKKwloLT5kYXRhX3NhZmVfaWNfb2xkZXN0X25vbnJlbW92 YWJsZSA9CisJCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+ZGF0YV9zYWZlX2ljX29sZGVzdF9ub25y ZW1vdmFibGUsIGgtPnNsb3RfeG1pbik7CiAKIAkvKgogCSAqIFRoZSBvbmx5IGRpZmZlcmVuY2Ug YmV0d2VlbiBjYXRhbG9nIC8gZGF0YSBob3Jpem9ucyBpcyB0aGF0IHRoZSBzbG90J3MKQEAgLTE5 MDAsNyArMTkzMyw5IEBAIENvbXB1dGVYaWRIb3Jpem9ucyhDb21wdXRlWGlkSG9yaXpvbnNSZXN1 bHQgKmgpCiAJaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUgPQogCQlUcmFuc2FjdGlvbklk T2xkZXIoaC0+c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUsCiAJCQkJCQkgICBoLT5zbG90X2Nh dGFsb2dfeG1pbik7Ci0JaC0+Y2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlID0gaC0+ZGF0YV9v bGRlc3Rfbm9ucmVtb3ZhYmxlOworCWgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZSA9CisJ CVRyYW5zYWN0aW9uSWRPbGRlcihoLT5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGUsCisJCQkJ CQkgICBoLT5zbG90X3htaW4pOwogCWgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZSA9CiAJ CVRyYW5zYWN0aW9uSWRPbGRlcihoLT5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGUsCiAJCQkJ CQkgICBoLT5zbG90X2NhdGFsb2dfeG1pbik7CkBAIC0xOTE4LDYgKzE5NTMsOSBAQCBDb21wdXRl WGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCWgtPm9sZGVzdF9jb25z aWRlcmVkX3J1bm5pbmcgPQogCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+b2xkZXN0X2NvbnNpZGVy ZWRfcnVubmluZywKIAkJCQkJCSAgIGgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSk7CisJaC0+ b2xkZXN0X2NvbnNpZGVyZWRfcnVubmluZyA9CisJCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+b2xk ZXN0X2NvbnNpZGVyZWRfcnVubmluZywKKwkJCQkJCQkgICBoLT5kYXRhX3NhZmVfaWNfb2xkZXN0 X25vbnJlbW92YWJsZSk7CiAKIAkvKgogCSAqIHNoYXJlZCBob3Jpem9ucyBoYXZlIHRvIGJlIGF0 IGxlYXN0IGFzIG9sZCBhcyB0aGUgb2xkZXN0IHZpc2libGUgaW4KQEAgLTE5MjUsNiArMTk2Myw4 IEBAIENvbXB1dGVYaWRIb3Jpem9ucyhDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJICov CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxzKGgtPnNoYXJlZF9vbGRlc3Rf bm9ucmVtb3ZhYmxlLAogCQkJCQkJCQkJCSBoLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUpKTsK KwlBc3NlcnQoVHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoaC0+c2hhcmVkX29sZGVzdF9u b25yZW1vdmFibGUsCisJCQkJCQkJCQkJIGgtPmRhdGFfc2FmZV9pY19vbGRlc3Rfbm9ucmVtb3Zh YmxlKSk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxzKGgtPnNoYXJlZF9v bGRlc3Rfbm9ucmVtb3ZhYmxlLAogCQkJCQkJCQkJCSBoLT5jYXRhbG9nX29sZGVzdF9ub25yZW1v dmFibGUpKTsKIApAQCAtMTkzOCw2ICsxOTc4LDggQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1 dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKIAkJCQkJCQkJCQkgaC0+Y2F0YWxvZ19vbGRlc3Rfbm9u cmVtb3ZhYmxlKSk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxzKGgtPm9s ZGVzdF9jb25zaWRlcmVkX3J1bm5pbmcsCiAJCQkJCQkJCQkJIGgtPmRhdGFfb2xkZXN0X25vbnJl bW92YWJsZSkpOworCUFzc2VydChUcmFuc2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyhoLT5vbGRl c3RfY29uc2lkZXJlZF9ydW5uaW5nLAorCQkJCQkJCQkJCSBoLT5kYXRhX3NhZmVfaWNfb2xkZXN0 X25vbnJlbW92YWJsZSkpOwogCUFzc2VydChUcmFuc2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyho LT5vbGRlc3RfY29uc2lkZXJlZF9ydW5uaW5nLAogCQkJCQkJCQkJCSBoLT50ZW1wX29sZGVzdF9u b25yZW1vdmFibGUpKTsKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGgtPnNsb3RfeG1p bikgfHwKQEAgLTE5NzMsNyArMjAxNSwyMiBAQCBHbG9iYWxWaXNIb3Jpem9uS2luZEZvclJlbChS ZWxhdGlvbiByZWwpCiAJCQkgUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhy ZWwpKQogCQlyZXR1cm4gVklTSE9SSVpPTl9DQVRBTE9HOwogCWVsc2UgaWYgKCFSRUxBVElPTl9J U19MT0NBTChyZWwpKQotCQlyZXR1cm4gVklTSE9SSVpPTl9EQVRBOworCXsKKwkJLy8gVE9ETzog ZG8gd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCBhYm91dCB0aGUgVE9BU1Q/CisJCWlm ICghcmVsLT5yZF9pbmRleHZhbGlkKQorCQl7CisJCQkvLyBza2lwIGxvYWRpbmcgaW5kZXhlcyBp ZiB3ZSBrbm93IHRoZXJlIGlzIG5vdCBzYWZlIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIGluIHRo ZSBjbHVzdGVyCisJCQlpZiAoSXNBbnlTYWZlSW5kZXhCdWlsZHNDb25jdXJyZW50bHkoKSkKKwkJ CXsKKwkJCQlSZWxhdGlvbkdldEluZGV4TGlzdChyZWwpOworCQkJCUFzc2VydChyZWwtPnJkX2lu ZGV4dmFsaWQpOworCisJCQkJaWYgKHJlbC0+cmRfc2FmZWluZGV4Y29uY3VycmVudGx5YnVpbGRp bmcpCisJCQkJCXJldHVybiBWSVNIT1JJWk9OX0RBVEFfU0FGRV9JQzsKKwkJCX0KKwkJCXJldHVy biBWSVNIT1JJWk9OX0RBVEE7CisJCX0KKwl9CiAJZWxzZQogCQlyZXR1cm4gVklTSE9SSVpPTl9U RU1QOwogfQpAQCAtMjAwNCw2ICsyMDYxLDggQEAgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNh Y3Rpb25JZChSZWxhdGlvbiByZWwpCiAJCQlyZXR1cm4gaG9yaXpvbnMuY2F0YWxvZ19vbGRlc3Rf bm9ucmVtb3ZhYmxlOwogCQljYXNlIFZJU0hPUklaT05fREFUQToKIAkJCXJldHVybiBob3Jpem9u cy5kYXRhX29sZGVzdF9ub25yZW1vdmFibGU7CisJCWNhc2UgVklTSE9SSVpPTl9EQVRBX1NBRkVf SUM6CisJCQlyZXR1cm4gaG9yaXpvbnMuZGF0YV9zYWZlX2ljX29sZGVzdF9ub25yZW1vdmFibGU7 CiAJCWNhc2UgVklTSE9SSVpPTl9URU1QOgogCQkJcmV0dXJuIGhvcml6b25zLnRlbXBfb2xkZXN0 X25vbnJlbW92YWJsZTsKIAl9CkBAIC0yNDU0LDYgKzI1MTMsOSBAQCBHZXRTbmFwc2hvdERhdGEo U25hcHNob3Qgc25hcHNob3QpCiAJCUdsb2JhbFZpc0RhdGFSZWxzLmRlZmluaXRlbHlfbmVlZGVk ID0KIAkJCUZ1bGxUcmFuc2FjdGlvbklkTmV3ZXIoZGVmX3Zpc19meGlkX2RhdGEsCiAJCQkJCQkJ CSAgIEdsb2JhbFZpc0RhdGFSZWxzLmRlZmluaXRlbHlfbmVlZGVkKTsKKwkJR2xvYmFsVmlzRGF0 YVNhZmVJY1JlbHMuZGVmaW5pdGVseV9uZWVkZWQgPQorCQkJCUZ1bGxUcmFuc2FjdGlvbklkTmV3 ZXIoZGVmX3Zpc19meGlkX2RhdGEsCisJCQkJCQkJCQkgICBHbG9iYWxWaXNEYXRhU2FmZUljUmVs cy5kZWZpbml0ZWx5X25lZWRlZCk7CiAJCS8qIFNlZSB0ZW1wX29sZGVzdF9ub25yZW1vdmFibGUg Y29tcHV0YXRpb24gaW4gQ29tcHV0ZVhpZEhvcml6b25zKCkgKi8KIAkJaWYgKFRyYW5zYWN0aW9u SWRJc05vcm1hbChteXhpZCkpCiAJCQlHbG9iYWxWaXNUZW1wUmVscy5kZWZpbml0ZWx5X25lZWRl ZCA9CkBAIC0yNDc4LDYgKzI1NDAsOSBAQCBHZXRTbmFwc2hvdERhdGEoU25hcHNob3Qgc25hcHNo b3QpCiAJCUdsb2JhbFZpc0NhdGFsb2dSZWxzLm1heWJlX25lZWRlZCA9CiAJCQlGdWxsVHJhbnNh Y3Rpb25JZE5ld2VyKEdsb2JhbFZpc0NhdGFsb2dSZWxzLm1heWJlX25lZWRlZCwKIAkJCQkJCQkJ ICAgb2xkZXN0ZnhpZCk7CisJCUdsb2JhbFZpc0RhdGFTYWZlSWNSZWxzLm1heWJlX25lZWRlZCA9 CisJCQkJRnVsbFRyYW5zYWN0aW9uSWROZXdlcihHbG9iYWxWaXNEYXRhU2FmZUljUmVscy5tYXli ZV9uZWVkZWQsCisJCQkJCQkJCQkgICBvbGRlc3RmeGlkKTsKIAkJR2xvYmFsVmlzRGF0YVJlbHMu bWF5YmVfbmVlZGVkID0KIAkJCUZ1bGxUcmFuc2FjdGlvbklkTmV3ZXIoR2xvYmFsVmlzRGF0YVJl bHMubWF5YmVfbmVlZGVkLAogCQkJCQkJCQkgICBvbGRlc3RmeGlkKTsKQEAgLTQxMDYsNiArNDE3 MSw5IEBAIEdsb2JhbFZpc1Rlc3RGb3IoUmVsYXRpb24gcmVsKQogCQljYXNlIFZJU0hPUklaT05f REFUQToKIAkJCXN0YXRlID0gJkdsb2JhbFZpc0RhdGFSZWxzOwogCQkJYnJlYWs7CisJCWNhc2Ug VklTSE9SSVpPTl9EQVRBX1NBRkVfSUM6CisJCQlzdGF0ZSA9ICZHbG9iYWxWaXNEYXRhU2FmZUlj UmVsczsKKwkJCWJyZWFrOwogCQljYXNlIFZJU0hPUklaT05fVEVNUDoKIAkJCXN0YXRlID0gJkds b2JhbFZpc1RlbXBSZWxzOwogCQkJYnJlYWs7CkBAIC00MTU4LDYgKzQyMjYsOSBAQCBHbG9iYWxW aXNVcGRhdGVBcHBseShDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmhvcml6b25zKQogCUdsb2Jh bFZpc0RhdGFSZWxzLm1heWJlX25lZWRlZCA9CiAJCUZ1bGxYaWRSZWxhdGl2ZVRvKGhvcml6b25z LT5sYXRlc3RfY29tcGxldGVkLAogCQkJCQkJICBob3Jpem9ucy0+ZGF0YV9vbGRlc3Rfbm9ucmVt b3ZhYmxlKTsKKwlHbG9iYWxWaXNEYXRhU2FmZUljUmVscy5tYXliZV9uZWVkZWQgPQorCQkJRnVs bFhpZFJlbGF0aXZlVG8oaG9yaXpvbnMtPmxhdGVzdF9jb21wbGV0ZWQsCisJCQkJCQkJICBob3Jp em9ucy0+ZGF0YV9zYWZlX2ljX29sZGVzdF9ub25yZW1vdmFibGUpOwogCUdsb2JhbFZpc1RlbXBS ZWxzLm1heWJlX25lZWRlZCA9CiAJCUZ1bGxYaWRSZWxhdGl2ZVRvKGhvcml6b25zLT5sYXRlc3Rf Y29tcGxldGVkLAogCQkJCQkJICBob3Jpem9ucy0+dGVtcF9vbGRlc3Rfbm9ucmVtb3ZhYmxlKTsK QEAgLTQxNzYsNiArNDI0Nyw5IEBAIEdsb2JhbFZpc1VwZGF0ZUFwcGx5KENvbXB1dGVYaWRIb3Jp em9uc1Jlc3VsdCAqaG9yaXpvbnMpCiAJR2xvYmFsVmlzRGF0YVJlbHMuZGVmaW5pdGVseV9uZWVk ZWQgPQogCQlGdWxsVHJhbnNhY3Rpb25JZE5ld2VyKEdsb2JhbFZpc0RhdGFSZWxzLm1heWJlX25l ZWRlZCwKIAkJCQkJCQkgICBHbG9iYWxWaXNEYXRhUmVscy5kZWZpbml0ZWx5X25lZWRlZCk7CisJ R2xvYmFsVmlzRGF0YVNhZmVJY1JlbHMuZGVmaW5pdGVseV9uZWVkZWQgPQorCQkJRnVsbFRyYW5z YWN0aW9uSWROZXdlcihHbG9iYWxWaXNEYXRhU2FmZUljUmVscy5tYXliZV9uZWVkZWQsCisJCQkJ CQkJCSAgIEdsb2JhbFZpc0RhdGFTYWZlSWNSZWxzLmRlZmluaXRlbHlfbmVlZGVkKTsKIAlHbG9i YWxWaXNUZW1wUmVscy5kZWZpbml0ZWx5X25lZWRlZCA9IEdsb2JhbFZpc1RlbXBSZWxzLm1heWJl X25lZWRlZDsKIAogCUNvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdExhc3RYbWluID0gUmVjZW50WG1p bjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDI2MmM5ODc4ZGQuLjIxZTg1MjFh YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNDEsNiArNDEsNyBAQAogI2lu Y2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9iaW5hcnlfdXBncmFkZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXgu aCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1l c3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgpAQCAtNDc2OSw2ICs0Nzcw LDcgQEAgUmVsYXRpb25HZXRJbmRleExpc3QoUmVsYXRpb24gcmVsYXRpb24pCiAJT2lkCQkJcGtl eUluZGV4ID0gSW52YWxpZE9pZDsKIAlPaWQJCQljYW5kaWRhdGVJbmRleCA9IEludmFsaWRPaWQ7 CiAJYm9vbAkJcGtkZWZlcnJhYmxlID0gZmFsc2U7CisJYm9vbCAJCXNhZmVpbmRleGNvbmN1cnJl bnRseWJ1aWxkaW5nID0gZmFsc2U7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKIAkvKiBRdWlj ayBleGl0IGlmIHdlIGFscmVhZHkgY29tcHV0ZWQgdGhlIGxpc3QuICovCkBAIC00ODA5LDYgKzQ4 MTEsMTQgQEAgUmVsYXRpb25HZXRJbmRleExpc3QoUmVsYXRpb24gcmVsYXRpb24pCiAJCS8qIGFk ZCBpbmRleCdzIE9JRCB0byByZXN1bHQgbGlzdCAqLwogCQlyZXN1bHQgPSBsYXBwZW5kX29pZChy ZXN1bHQsIGluZGV4LT5pbmRleHJlbGlkKTsKIAorCQkvKgorCQkgKiBDb25zaWRlciBpbmRleCBh cyBidWlsZGluZyBpZiBpdCBpcyByZWFkeSBidXQgbm90IHlldCB2YWxpZC4KKwkJICogQWxzbywg d2UgbXVzdCBkZWFsIG9ubHkgd2l0aCBpbmRleGVzIHdoaWNoIGFyZSBidWlsdCB1c2luZyB0aGUK KwkJICogY29uY3VycmVudCBzYWZlIG1vZGUuCisJCSAqLworCQlpZiAoaW5kZXgtPmluZGlzcmVh ZHkgJiYgIWluZGV4LT5pbmRpc3ZhbGlkKQorCQkJc2FmZWluZGV4Y29uY3VycmVudGx5YnVpbGRp bmcgfD0gSXNBbnlTYWZlSW5kZXhCdWlsZHNDb25jdXJyZW50bHkoKTsKKwogCQkvKgogCQkgKiBO b24tdW5pcXVlIG9yIHByZWRpY2F0ZSBpbmRleGVzIGFyZW4ndCBpbnRlcmVzdGluZyBmb3IgZWl0 aGVyIG9pZAogCQkgKiBpbmRleGVzIG9yIHJlcGxpY2F0aW9uIGlkZW50aXR5IGluZGV4ZXMsIHNv IGRvbid0IGNoZWNrIHRoZW0uCkBAIC00ODY5LDYgKzQ4NzksNyBAQCBSZWxhdGlvbkdldEluZGV4 TGlzdChSZWxhdGlvbiByZWxhdGlvbikKIAlyZWxhdGlvbi0+cmRfaW5kZXhsaXN0ID0gbGlzdF9j b3B5KHJlc3VsdCk7CiAJcmVsYXRpb24tPnJkX3BraW5kZXggPSBwa2V5SW5kZXg7CiAJcmVsYXRp b24tPnJkX2lzcGtkZWZlcnJhYmxlID0gcGtkZWZlcnJhYmxlOworCXJlbGF0aW9uLT5yZF9zYWZl aW5kZXhjb25jdXJyZW50bHlidWlsZGluZyA9IHNhZmVpbmRleGNvbmN1cnJlbnRseWJ1aWxkaW5n OwogCWlmIChyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9ERUZBVUxUICYmIE9pZElzVmFs aWQocGtleUluZGV4KSAmJiAhcGtkZWZlcnJhYmxlKQogCQlyZWxhdGlvbi0+cmRfcmVwbGlkaW5k ZXggPSBwa2V5SW5kZXg7CiAJZWxzZSBpZiAocmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlf SU5ERVggJiYgT2lkSXNWYWxpZChjYW5kaWRhdGVJbmRleCkpCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2FtY2hlY2svdC8wMDZfY29uY3VycmVudGx5LnBsIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL3Qv MDA2X2NvbmN1cnJlbnRseS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li43YjhhZmVlYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NvbmN1cnJlbnRseS5wbApAQCAtMCwwICsxLDE1NSBAQAorCisjIENvcHlyaWdodCAoYykgMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IFJFSU5ERVgg Q09OQ1VSUkVOVExZIHdpdGggY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFuZCBIT1QgdXBkYXRl cwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIENvbmZpZzsKK3VzZSBFcnJubzsK KwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKK3VzZSBJUEM6OlN5c1Y7Cit1c2Ug dGhyZWFkczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIFRlc3Q6OkJ1aWxkZXI7CisKK2lmICgkQCB8 fCAkd2luZG93c19vcykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdGb3JrIGFuZCBzaGFyZWQgbWVt b3J5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm0nOworfQorCisjIFRPRE86IHJl ZmFjdG9yIHRvIGh0dHBzOi8vbWV0YWNwYW4ub3JnL3BvZC9JUEMlM0ElM0FTaGFyZWFibGUKK215 ICgkcGlkLCAkc2htZW1faWQsICRzaG1lbV9rZXksICAkc2htZW1fc2l6ZSk7CitldmFsICdzdWIg SVBDX0NSRUFUIHswMDAxMDAwfScgdW5sZXNzIGRlZmluZWQgJklQQ19DUkVBVDsKKyRzaG1lbV9z aXplID0gNDsKKyRzaG1lbV9rZXkgPSByYW5kKDEwMDAwMDApOworJHNobWVtX2lkID0gc2htZ2V0 KCRzaG1lbV9rZXksICRzaG1lbV9zaXplLCAmSVBDX0NSRUFUIHwgMDc3Nykgb3IgZGllICJDYW4n dCBzaG1nZXQ6ICQhIjsKK3NobXdyaXRlKCRzaG1lbV9pZCwgIndhaXQiLCAwLCAkc2htZW1fc2l6 ZSkgb3IgZGllICJDYW4ndCBzaG13cml0ZTogJCEiOworCitteSAkcHNxbF90aW1lb3V0ID0gSVBD OjpSdW46OnRpbWVyKCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsK KyMKKyMgVGVzdCBzZXQtdXAKKyMKK215ICgkbm9kZSwgJHJlc3VsdCk7Ciskbm9kZSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnUkNfdGVzdCcpOworJG5vZGUtPmluaXQ7Ciskbm9k ZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJJ2xvY2tfdGltZW91dCA9ICcgLiAo MTAwMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KSk7Ciskbm9k ZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdmc3luYyA9IG9mZicpOworJG5vZGUt PnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBFWFRFTlNJT04g YW1jaGVjaykpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBUQUJMRSB0 YmwoaSBpbnQgcHJpbWFyeSBrZXksCisJCQkJCQkJCWMxIG1vbmV5IGRlZmF1bHQgMCxjMiBtb25l eSBkZWZhdWx0IDAsCisJCQkJCQkJCWMzIG1vbmV5IGRlZmF1bHQgMCwgdXBkYXRlZF9hdCB0aW1l c3RhbXApKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoQ1JFQVRFIElOREVYIGlk eCBPTiB0YmwoaSkpKTsKKworbXkgJGJ1aWxkZXIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworJGJ1 aWxkZXItPnVzZV9udW1iZXJzKDApOworJGJ1aWxkZXItPm5vX3BsYW4oKTsKKworbXkgJGNoaWxk ICA9ICRidWlsZGVyLT5jaGlsZCgicGdfYmVuY2giKTsKKworaWYoIWRlZmluZWQoJHBpZCA9IGZv cmsoKSkpIHsKKwkjIGZvcmsgcmV0dXJuZWQgdW5kZWYsIHNvIHVuc3VjY2Vzc2Z1bAorCWRpZSAi Q2Fubm90IGZvcmsgYSBjaGlsZDogJCEiOworfSBlbHNpZiAoJHBpZCA9PSAwKSB7CisKKwkkbm9k ZS0+cGdiZW5jaCgKKwkJJy0tbm8tdmFjdXVtIC0tY2xpZW50PTUgLS10cmFuc2FjdGlvbnM9MjUw MDAnLAorCQkwLAorCQlbcXJ7YWN0dWFsbHkgcHJvY2Vzc2VkfV0sCisJCVtxcnteJH1dLAorCQkn Y29uY3VycmVudCBJTlNFUlRzLCBVUERBVEVTIGFuZCBSQycsCisJCXsKKwkJCScwMDJfcGdiZW5j aF9jb25jdXJyZW50X3RyYW5zYWN0aW9uX2luc2VydHMnID0+IHEoCisJCQkJQkVHSU47CisJCQkJ SU5TRVJUIElOVE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwMCwwLDAsMCxub3coKSkKKwkJCQkJ b24gY29uZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0gbm93KCk7CisJCQkJSU5T RVJUIElOVE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwMCwwLDAsMCxub3coKSkKKwkJCQkJb24g Y29uZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0gbm93KCk7CisJCQkJSU5TRVJU IElOVE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwMCwwLDAsMCxub3coKSkKKwkJCQkJb24gY29u ZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0gbm93KCk7CisJCQkJSU5TRVJUIElO VE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwMCwwLDAsMCxub3coKSkKKwkJCQkJb24gY29uZmxp Y3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0gbm93KCk7CisKKwkJCQlJTlNFUlQgSU5U TyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBjb25mbGlj dChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlDT01NSVQ7CisJCQkg ICksCisJCQkjIEVuc3VyZSBzb21lIEhPVCB1cGRhdGVzIGhhcHBlbgorCQkJJzAwMl9wZ2JlbmNo X2NvbmN1cnJlbnRfdHJhbnNhY3Rpb25fdXBkYXRlcycgPT4gcSgKKwkJCQlCRUdJTjsKKwkJCQlJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAsMCwwLDAsbm93KCkpCisJCQkJCW9u IGNvbmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9hdCA9IG5vdygpOworCQkJCUlOU0VS VCBJTlRPIHRibCBWQUxVRVMocmFuZG9tKCkqMTAwMCwwLDAsMCxub3coKSkKKwkJCQkJb24gY29u ZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0gbm93KCk7CisJCQkJSU5TRVJUIElO VE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBjb25mbGlj dChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlJTlNFUlQgSU5UTyB0 YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAsMCwwLDAsbm93KCkpCisJCQkJCW9uIGNvbmZsaWN0KGkp IGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9hdCA9IG5vdygpOworCisJCQkJSU5TRVJUIElOVE8gdGJs IFZBTFVFUyhyYW5kb20oKSoxMDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBjb25mbGljdChpKSBk byB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlDT01NSVQ7CisJCQkgICkKKwkJ fSk7CisKKwlpZiAoJGNoaWxkLT5pc19wYXNzaW5nKCkpIHsKKwkJc2htd3JpdGUoJHNobWVtX2lk LCAiZG9uZSIsIDAsICRzaG1lbV9zaXplKSBvciBkaWUgIkNhbid0IHNobXdyaXRlOiAkISI7CisJ fSBlbHNlIHsKKwkJc2htd3JpdGUoJHNobWVtX2lkLCAiZmFpbCIsIDAsICRzaG1lbV9zaXplKSBv ciBkaWUgIkNhbid0IHNobXdyaXRlOiAkISI7CisJfQorCisJc2xlZXAoMSk7Cit9IGVsc2Ugewor CW15ICRwZ19iZW5jaF9mb3JrX2ZsYWc7CisJc2htcmVhZCgkc2htZW1faWQsICRwZ19iZW5jaF9m b3JrX2ZsYWcsIDAsICRzaG1lbV9zaXplKSBvciBkaWUgIkNhbid0IHNobXJlYWQ6ICQhIjsKKwor CXN1YnRlc3QgJ3JlaW5kZXggcnVuIHN1YnRlc3QnID0+IHN1YiB7CisJCWlzKCRwZ19iZW5jaF9m b3JrX2ZsYWcsICJ3YWl0IiwgInBnX2JlbmNoX2ZvcmtfZmxhZyBpcyBjb3JyZWN0Iik7CisKKwkJ bXkgJXBzcWwgPSAoc3RkaW4gPT4gJycsIHN0ZG91dCA9PiAnJywgc3RkZXJyID0+ICcnKTsKKwkJ JHBzcWx7cnVufSA9IElQQzo6UnVuOjpzdGFydCgKKwkJCVsgJ3BzcWwnLCAnLVhBJywgJy1mJywg Jy0nLCAnLWQnLCAkbm9kZS0+Y29ubnN0cigncG9zdGdyZXMnKSBdLAorCQkJJzwnLAorCQkJXCRw c3Fse3N0ZGlufSwKKwkJCSc+JywKKwkJCVwkcHNxbHtzdGRvdXR9LAorCQkJJzI+JywKKwkJCVwk cHNxbHtzdGRlcnJ9LAorCQkJJHBzcWxfdGltZW91dCk7CisKKwkJbXkgKCRyZXN1bHQsICRzdGRv dXQsICRzdGRlcnIpOworCQl3aGlsZSAoMSkKKwkJeworCisJCQkoJHJlc3VsdCwgJHN0ZG91dCwg JHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxKFJFSU5ERVggSU5ERVggQ09OQ1VS UkVOVExZIGlkeDspKTsKKwkJCWlzKCRyZXN1bHQsICcwJywgJ1JFSU5ERVggaXMgY29ycmVjdCcp OworCisJCQkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdy ZXMnLCBxKFNFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ2lkeCcsIHRydWUsIHRydWUpOykp OworCQkJaXMoJHJlc3VsdCwgJzAnLCAnYnRfaW5kZXhfY2hlY2sgaXMgY29ycmVjdCcpOworIAkJ CWlmICgkcmVzdWx0KQorIAkJCXsKKwkJCQlkaWFnKCRzdGRlcnIpOworIAkJCX0KKworCQkJc2ht cmVhZCgkc2htZW1faWQsICRwZ19iZW5jaF9mb3JrX2ZsYWcsIDAsICRzaG1lbV9zaXplKSBvciBk aWUgIkNhbid0IHNobXJlYWQ6ICQhIjsKKwkJCWxhc3QgaWYgJHBnX2JlbmNoX2ZvcmtfZmxhZyBu ZSAid2FpdCI7CisJCX0KKworCQkjIGV4cGxpY2l0bHkgc2h1dCBkb3duIHBzcWwgaW5zdGFuY2Vz IGdyYWNlZnVsbHkKKyAgICAgICAgJHBzcWx7c3RkaW59IC49ICJcXHFcbiI7CisgICAgICAgICRw c3Fse3J1bn0tPmZpbmlzaDsKKworCQlpcygkcGdfYmVuY2hfZm9ya19mbGFnLCAiZG9uZSIsICJw Z19iZW5jaF9mb3JrX2ZsYWcgaXMgY29ycmVjdCIpOworCX07CisKKworCSRjaGlsZC0+ZmluYWxp emUoKTsKKwkkY2hpbGQtPnN1bW1hcnkoKTsKKwkkbm9kZS0+c3RvcDsKKwlkb25lX3Rlc3Rpbmco KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvaW5kZXguaAppbmRleCAyZGVhOTZmNDdjLi5jYWM0MTNlNWViIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9pbmRleC5oCkBAIC0xNzUsNiArMTc1LDExIEBAIGV4dGVybiB2b2lkIFJlc3RvcmVSZWluZGV4 U3RhdGUoY29uc3Qgdm9pZCAqcmVpbmRleHN0YXRlKTsKIAogZXh0ZXJuIHZvaWQgSW5kZXhTZXRQ YXJlbnRJbmRleChSZWxhdGlvbiBwYXJ0aXRpb25JZHgsIE9pZCBwYXJlbnRPaWQpOwogCitleHRl cm4gdm9pZCBTYWZlSUNTdGF0ZVNobWVtSW5pdCh2b2lkKTsKKy8vIFRPRE86IGJvdW5kIGJ5IHJl bGF0aW9uIG9yIGRhdGFiYXNlCitleHRlcm4gdm9pZCBVcGRhdGVOdW1TYWZlQ29uY3VycmVudGx5 QnVpbHRJbmRleGVzKGJvb2wgaW5jcmVtZW50KTsKK2V4dGVybiBib29sIElzQW55U2FmZUluZGV4 QnVpbGRzQ29uY3VycmVudGx5KHZvaWQpOworCiAKIC8qCiAgKiBpdGVtcHRyX2VuY29kZSAtIEVu Y29kZSBJdGVtUG9pbnRlciBhcyBpbnQ2NC9pbnQ4CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDg3MDAyMDQ5NTMuLmUz Yzc4OTkyMDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0xNTIsNiArMTUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVs YXRpb25EYXRhCiAJTGlzdAkgICAqcmRfaW5kZXhsaXN0OwkvKiBsaXN0IG9mIE9JRHMgb2YgaW5k ZXhlcyBvbiByZWxhdGlvbiAqLwogCU9pZAkJCXJkX3BraW5kZXg7CQkvKiBPSUQgb2YgKGRlZmVy cmFibGU/KSBwcmltYXJ5IGtleSwgaWYgYW55ICovCiAJYm9vbAkJcmRfaXNwa2RlZmVycmFibGU7 CS8qIGlzIHJkX3BraW5kZXggYSBkZWZlcnJhYmxlIFBLPyAqLworCWJvb2wJCXJkX3NhZmVpbmRl eGNvbmN1cnJlbnRseWJ1aWxkaW5nOyAvKiBpcyBzYWZlIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRp bmcgaW4gcHJvZ3Jlc3MgZm9yIHJlbGF0aW9uICovCiAJT2lkCQkJcmRfcmVwbGlkaW5kZXg7IC8q IE9JRCBvZiByZXBsaWNhIGlkZW50aXR5IGluZGV4LCBpZiBhbnkgKi8KIAogCS8qIGRhdGEgbWFu YWdlZCBieSBSZWxhdGlvbkdldFN0YXRFeHRMaXN0OiAqLwotLSAKMi4zNC4xCgo= --0000000000009dc8150617dc6ba3--