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.96) (envelope-from ) id 1vbHXp-003j2i-1w for pgsql-bugs@arkaria.postgresql.org; Thu, 01 Jan 2026 12:12:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vbHXo-008BzD-1T for pgsql-bugs@arkaria.postgresql.org; Thu, 01 Jan 2026 12:12:45 +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.96) (envelope-from ) id 1vb56H-007JuR-0L for pgsql-bugs@lists.postgresql.org; Wed, 31 Dec 2025 22:55:30 +0000 Received: from mail-ot1-x334.google.com ([2607:f8b0:4864:20::334]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vb56E-003Z6x-2w for pgsql-bugs@lists.postgresql.org; Wed, 31 Dec 2025 22:55:28 +0000 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7c6e9538945so8006064a34.1 for ; Wed, 31 Dec 2025 14:55:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1767221725; x=1767826525; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=EVs9xwxyJq9rxc3dYhGz1Xa8Bm/w4/CiX6RXFLnRAfs=; b=E+3Ic2nJJ5gc3s7AgDDyyp700gFuC0Hy4w7RI7Uyyat0lPEDun7aKJ4706I8Hfls5I +oBhFaTddb6HAMFn2UupfdWA+H1FBCC0jcxmv1qeUus/gbPWJ+MAOAvMTmEVi7nbtdl6 Np+kM1kZ+oulZLmXv799uDxU/mSTgKrg8bD9E2gsi+axWZmt1D+ajwcAsRvwOUU49wSI gkADnGIYIxqXEqaWnudOojGj69ZhJV1n+aw9sARKOnpyc31OUD18388ZX/EsaD/Q2LlM BCpKAAa9bRVkC1fevobNLQKbs217tWxbyOIm6//M7scfPGbvsQ+myQTSi7q6PynW6Wi2 67Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767221725; x=1767826525; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EVs9xwxyJq9rxc3dYhGz1Xa8Bm/w4/CiX6RXFLnRAfs=; b=c18IW6VN1wNDDynYbS+4Q6FPkxoM71RZ0cUzsFqPPwx/Wygxn9PeWe2p5fCGdAkgqi d+3RtdGIu+l663TeD35eUPH7W00iiToLugGPZCd/yN1vomJyMmIkoZRViwyZuVBYH6Ah YLpHA+D1l0w+VoCC6bvywclsstGbFoQg7E4ED/cTrjux4l1fuXdv90irMx1nBdqz8g82 yLFtf6ocVeHb01+r2moy8FnOboobUmJhZTe9xrp1FKpWqrn5qTM8fBpZidBW2jR/YojS ge4x7RHr2wDGehaFb4KkKdevbq2YZEkddMRFyfbjQowD9BnbwWQWujw3DhXlcEntPS4Z g+Vg== X-Forwarded-Encrypted: i=1; AJvYcCUN9fZBfAsrHGpu49v7ad8euJyh1haWlLLz23RsPoURIbjFL3cHUD8vpG6aSxtAvfAVuGdeq9DP7HRU@lists.postgresql.org X-Gm-Message-State: AOJu0YzsVED2OYpqFylhjwz0ZSo8rRPoqzLhkdVkXm3xlYUNX3x+7H/V G7+t8tpRFtzV0bsld3qcVuIlm4dHlrBw/+H2CJ53ijM1LpInEnQ/sWsIA9giOpG75+COdwmC3ve 25ok0gKLYV/dVGA5mMAZwvSR0E0Dquluo+SY94rvQC75mR3Dd1cOBcHw= X-Gm-Gg: AY/fxX7p8I3okmoXkiA6PTT231yI6uU2cBf38toyK9o+csLKmW6zJmgiQYn+MttWzPx mUcEcJkSN9DXLSO4Nvy0V/PcJvUiCeTj8Q3x77CWYjBrIlnGjlxge1z2s9vat4ZdtDBVfVIr/H0 xcHR8nIsP+lIRnJjRxOYJ26g8cAOyzlQnL83oidXWhCcmdJhEzX9K+1ao8GvLrp3QEUiJjGVBTA Q+sYmj0rKFFsSPnIFK9XC8ngeKNT+PEBZZk5gcNswTm9kuslJ8TORzKnM9oxHMR/JDi X-Google-Smtp-Source: AGHT+IHqvvl60ro8d+Wny/icJl/yqiKYseF5+9900L4ZvqH31CKAGfLe6rYTBfTI/36pLSN/q7j4zwkIvgM3RwP45TM= X-Received: by 2002:a05:6820:2291:b0:659:9a49:8ee9 with SMTP id 006d021491bc7-65d0e3a2918mr19057248eaf.29.1767221725511; Wed, 31 Dec 2025 14:55:25 -0800 (PST) MIME-Version: 1.0 From: Paul A Jungwirth Date: Wed, 31 Dec 2025 14:55:13 -0800 X-Gm-Features: AQt7F2rLdj8zButn97RBmSIfwf3kXo14y5Tz1HJGlrz2YaGopTdqbqPd4jLd_cs Message-ID: Subject: Create unique GiST indexes To: PostgreSQL Hackers Cc: Matthias van de Meent , Tom Lane , Laurenz Albe , n.bartek3762@gmail.com, PostgreSQL mailing lists , Peter Eisentraut Content-Type: multipart/mixed; boundary="0000000000003069420647475f9c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003069420647475f9c Content-Type: text/plain; charset="UTF-8" Here is a patch to create unique GiST indexes. It is not really finished yet, but I thought I would share. It is intended to address the bug discussed at [1], where calling pg_get_indexdef on a WITHOUT OVERLAPS constraint generates SQL that Postgres refuses to run. I realized after sending that email that the thread is on pgsql-bugs, but I think it belongs on pgsql-hackers now (for one reason, so I can create a commitfest entry). Please see my notes at that link, and apologies for the extra noise. [1] https://www.postgresql.org/message-id/CA%2BrenyU4jKCxrtASJpssZmfrkWhi-%2BQ_PF__jxt8E23T755SPQ%40mail.gmail.com Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --0000000000003069420647475f9c Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Allow-unique-GiST-indexes.patch" Content-Disposition: attachment; filename="v1-0001-Allow-unique-GiST-indexes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjum3hnr0 RnJvbSBjZGIyNGExOWQ1MjM5MGI4YTMzNjZjYTZiYTI1NTQyMTVjODNjOWU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgNCBOb3YgMjAyNSAxOTowNTo0MiAtMDgwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIEFsbG93IHVuaXF1ZSBHaVNUIGluZGV4ZXMKCi0gQWRkZWQgdGVzdHMgc2hv d2luZyB5b3UgY2FuIENSRUFURSBVTklRVUUgSU5ERVggLi4uIFVTSU5HIGdpc3QsIHdpdGggY29y cmVjdAogIHNlbWFudGljcyBidWlsZGluZyB0aGUgaW5kZXggYW5kIGFkZGluZyB0byB0aGUgaW5k ZXguCi0gVXBkYXRlZCB0aGUgZ2lzdCBSRUFETUUuCi0gVXBkYXRlZCBkb2N1bWVudGF0aW9uLgot IEFkZGVkIGV4Y2x1ZGVGbiB0byB0aGUgR0lTVFNUQVRFLCB1c2VkIHRvIGNvbXBhcmUgdmFsdWVz LgotIEFkZGVkIGdpc3RfY2hlY2tfdW5pcXVlIHRvIGRvIHRoZSB3b3JrLiBXZSBjYWxsIHRoaXMg b25jZSB3ZSBoYXZlIGZvdW5kIHRoZQogIGxlYWYgcGFnZSwgdGhlbiB3ZSBjaGVjayBhbGwgdHVw bGVzIG9uIHRoZSBwYWdlLiBBcyBhbiBvcHRpbWl6YXRpb24gd2UgY291bGQKICBmaXJzdCBjaGVj ayB0aGUgY29uc2lzdGVudCBmdW5jdGlvbi4KCkJlY2F1c2UgR2lTVCBpcyBsb3NzeSAoYXQgbGVh c3QgaWYgdGhlIG9wY2xhc3MgcHJvdmlkZXMgYSBjb21wcmVzcyBmdW5jdGlvbiksCnRoZSBEYXR1 bSBpbiB0aGUgaW5kZXggbWlnaHQgbm90IG1hdGNoIHRoZSBEYXR1bSBpbiB0aGUgaGVhcC4gQnV0 IHRoZSBleGNsdWRlRm4KbmVlZHMgaGVhcCBEYXR1bXMuIFNvIHdlIGhhdmUgdG8gbG9hZCB0aGVt IGJlZm9yZSBjaGVja2luZy4gVGhhdCBpcyBub3QgcmVhbGx5IGEKYmlnIHBlcmZvcm1hbmNlIGhp dCB0aG91Z2gsIGJlY2F1c2Ugd2UgbmVlZCB0aGUgaGVhcCB0dXBsZXMgYW55d2F5IGZvcgp2aXNp YmlsaXR5IGluZm9ybWF0aW9uLgoKSWYgd2UgZGV0ZWN0IHRoYXQgd2UgYXJlIGJhY2tpbmcgYSBX SVRIT1VUIE9WRVJMQVBTIGNvbnN0cmFpbnQgKGJlY2F1c2UKaW5kaXNleGNsdXNpb24gaXMgc2V0 IGF0IHRoZSBzYW1lIHRpbWUgYXMgaW5kaXN1bmlxdWUpLCB0aGVuIHdlIHVzZSBvdmVybGFwcyBm b3IKdGhlIGxhc3QgZWxlbWVudCdzIGV4Y2x1ZGVGbi4gQWxzbyB3ZSBhZGp1c3Qgb3VyIGVycm9y IG1lc3NhZ2VzIHRvIG1hdGNoIHdoYXQKdGhlIGV4Y2x1c2lvbiBjb25zdHJhaW50IHdvdWxkIHBy b2R1Y2UuIFRoaXMgbWVhbnMgdGhhdCBhbG1vc3QgYWxsIHRoZSB3b3JrIGluCmNoZWNrX2V4Y2x1 c2lvbl9vcl91bmlxdWVfY29uc3RyYWludCBpcyByZWR1bmRhbnQuIFBlcmhhcHMgd2Ugc2hvdWxk IGRldGVjdCB0aGF0CmZvciBXSVRIT1VUIE9WRVJMQVBTIGNvbnN0cmFpbnRzIHdlIGNhbiByZWx5 IG9uIHRoZSBpbmRleCB0byBoYXZlIGNoZWNrZWQgdGhhdAphbHJlYWR5PyAoSXQgc3RpbGwgbmVl ZHMgdG8gcmVqZWN0IGVtcHR5IHZhbHVlcyB0aG91Z2guKSBJbiBhIGNvdXBsZSBjYXNlcyBJIGhh ZAp0byB1cGRhdGUgdGVzdHMgZm9yIENSRUFURSBDT05TVFJBSU5UIC4uLiBXSVRIT1VUIE9WRVJM QVBTLCBiZWNhdXNlIHdlIG5vdwplbmNvdW50ZXIgYSBkaWZmZXJlbnQgY29uZmxpY3RpbmcgdHVw bGUuCgpJIGhhdmVuJ3QgZGVhbHQgd2l0aCBNVkNDIGlzc3VlcyB5ZXQuIFdoZW4gd2UgZmluZCBh IG5vdC15ZXQtY29tbWl0dGVkCmNvbmZsaWN0aW5nIHR1cGxlLCB3ZSBuZWVkIHRvIHdhaXQgYW5k IHJlLWNoZWNrIGFmdGVyIHRoYXQgdHJhbnNhY3Rpb24gaGFzCmZpbmlzaGVkLiBTZWUgbmJ0cmVl IGZvciBob3cgdGhpcyBuZWVkcyB0byB3b3JrLgoKQWxzbyBJJ20gdHJ5aW5nIHRvIGhhbmRsZSBO VUxMUyBOT1QgRElTVElOQ1QgY29ycmVjdGx5LiBJbiBuYnRyZWUgdGhlIGNvZGUKYXNzdW1lcyB0 aGF0IG51bGxzIGFyZSBuZXZlciBlcXVhbC4gU28gaXMgdGhhdCBoYW5kbGVkIG91dHNpZGUgb2Yg c3BlY2lmaWMgSUFNcz8KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAg ICAgICAgICAgfCAzNTkgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0YnVpbGQuYyAgICAgICAgICAgfCAgMzMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQv dHVwbGVzb3J0dmFyaWFudHMuYyAgICB8ICAgNiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3Rf cHJpdmF0ZS5oICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS91dGlscy90dXBsZXNv cnQuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h bXV0aWxzLm91dCAgICAgICAgIHwgICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dp c3Qub3V0ICAgICAgICAgICAgfCAgMzIgKysKIC4uLi9yZWdyZXNzL2V4cGVjdGVkL3dpdGhvdXRf b3ZlcmxhcHMub3V0ICAgICB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwg ICAgICAgICAgICAgICAgIHwgIDE3ICsKIDkgZmlsZXMgY2hhbmdlZCwgNDQ3IGluc2VydGlvbnMo KyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA0Yjk0M2I3ZjQz ZS4uMTRhYmZjMTZiNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTE2LDE0ICsxNiwxOCBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9n aXN0c2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNs dWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9pbmRleF9zZWxmdW5j cy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTY5LDcgKzczLDcgQEAgZ2lzdGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtY29uc2lzdGVudGVxdWFsaXR5ID0gZmFsc2Us CiAJCS5hbWNvbnNpc3RlbnRvcmRlcmluZyA9IGZhbHNlLAogCQkuYW1jYW5iYWNrd2FyZCA9IGZh bHNlLAotCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKKwkJLmFtY2FudW5pcXVlID0gdHJ1ZSwKIAkJ LmFtY2FubXVsdGljb2wgPSB0cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCiAJCS5hbXNl YXJjaGFycmF5ID0gZmFsc2UsCkBAIC0xNjEsNiArMTY1LDcgQEAgZ2lzdGJ1aWxkZW1wdHkoUmVs YXRpb24gaW5kZXgpCiAgKgogICoJICBUaGlzIGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHJvdXRp bmUgZm9yIHR1cGxlIGluc2VydGlvbiBpbiBHaVNUcy4KICAqCSAgSXQgZG9lc24ndCBkbyBhbnkg d29yazsganVzdCBsb2NrcyB0aGUgcmVsYXRpb24gYW5kIHBhc3NlcyB0aGUgYnVjay4KKyAqCSAg VE9ETzogSSBkb24ndCBzZWUgd2hlcmUgaXQgbG9ja3MgdGhlIHJlbGF0aW9uPwogICovCiBib29s CiBnaXN0aW5zZXJ0KFJlbGF0aW9uIHIsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKQEAg LTE3MiwxMiArMTc3LDE1IEBAIGdpc3RpbnNlcnQoUmVsYXRpb24gciwgRGF0dW0gKnZhbHVlcywg Ym9vbCAqaXNudWxsLAogCUdJU1RTVEFURSAgKmdpc3RzdGF0ZSA9IChHSVNUU1RBVEUgKikgaW5k ZXhJbmZvLT5paV9BbUNhY2hlOwogCUluZGV4VHVwbGUJaXR1cDsKIAlNZW1vcnlDb250ZXh0IG9s ZEN4dDsKKwlib29sCQlrbm93bl91bmlxdWU7CiAKIAkvKiBJbml0aWFsaXplIEdJU1RTVEFURSBj YWNoZSBpZiBmaXJzdCBjYWxsIGluIHRoaXMgc3RhdGVtZW50ICovCiAJaWYgKGdpc3RzdGF0ZSA9 PSBOVUxMKQogCXsKIAkJb2xkQ3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGluZGV4SW5mby0+ aWlfQ29udGV4dCk7CiAJCWdpc3RzdGF0ZSA9IGluaXRHSVNUc3RhdGUocik7CisJCWlmIChjaGVj a1VuaXF1ZSAhPSBVTklRVUVfQ0hFQ0tfTk8pCisJCQlpbml0R0lTVHN0YXRlRXhjbHVkZShnaXN0 c3RhdGUsIHIpOwogCQlnaXN0c3RhdGUtPnRlbXBDeHQgPSBjcmVhdGVUZW1wR2lzdENvbnRleHQo KTsKIAkJaW5kZXhJbmZvLT5paV9BbUNhY2hlID0gZ2lzdHN0YXRlOwogCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkQ3h0KTsKQEAgLTE4OCwxMyArMTk2LDEzIEBAIGdpc3RpbnNlcnQoUmVsYXRp b24gciwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCWl0dXAgPSBnaXN0Rm9ybVR1cGxl KGdpc3RzdGF0ZSwgciwgdmFsdWVzLCBpc251bGwsIHRydWUpOwogCWl0dXAtPnRfdGlkID0gKmh0 X2N0aWQ7CiAKLQlnaXN0ZG9pbnNlcnQociwgaXR1cCwgMCwgZ2lzdHN0YXRlLCBoZWFwUmVsLCBm YWxzZSk7CisJa25vd25fdW5pcXVlID0gZ2lzdGRvaW5zZXJ0KHIsIGl0dXAsIGNoZWNrVW5pcXVl LCB2YWx1ZXMsIGlzbnVsbCwgMCwgZ2lzdHN0YXRlLCBoZWFwUmVsLCBmYWxzZSk7CiAKIAkvKiBj bGVhbnVwICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN4dCk7CiAJTWVtb3J5Q29udGV4 dFJlc2V0KGdpc3RzdGF0ZS0+dGVtcEN4dCk7CiAKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGtu b3duX3VuaXF1ZTsKIH0KIAogCkBAIC02MzAsMTQgKzYzOCwyMzIgQEAgZ2lzdHBsYWNldG9wYWdl KFJlbGF0aW9uIHJlbCwgU2l6ZSBmcmVlc3BhY2UsIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAogCXJl dHVybiBpc19zcGxpdDsKIH0KIAorLyoKKyAqIGdpc3RfY2hlY2tfdW5pcXVlIC0tIGVuZm9yY2Ug VU5JUVVFbmVzcyB3aXRoIGdpdmVuIGV4Y2x1ZGVGbi4KKyAqCisgKiBlcmVwb3J0cyBpZiB0aGVy ZSBpcyBhIGRlZmluaXRlIGNvbmZsaWN0LCBvciByZXR1cm5zIEludmFsaWRUcmFuc2FjdGlvbklk IGlmCisgKiB0aGVyZSBpcyBubyBjb25mbGljdCwgb3IgcmV0dXJucyB0aGUgVHJhbnNhY3Rpb25J ZCB0aGF0IG11c3QgYmUgd2FpdGVkIG9uIGlmCisgKiB0aGVyZSBpcyBhIHBvdGVudGlhbCBjb25m bGljdCBmcm9tIGEgbm90LXlldC1jb21taXR0ZWQgdHJhbnNhY3Rpb24uCisgKgorICogVGhlIGdp c3RzdGF0ZSBtdXN0IGFscmVhZHkgcG9pbnQgdG8gYSBsZWFmIHBhZ2UuCisgKgorICogT3VyIGRl ZmluaXRpb24gb2YgdW5pcXVlbmVzcyBpcyBiYXNlZCBvbiB0aGUgZXhjbHVkZUZuLCB3aGljaCBk b2VzIG5vdAorICogbmVjZXNzYXJpbHkgY2hlY2sgZm9yIGVxdWFsaXR5LiBUaGF0IGxldHMgeW91 IGNyZWF0ZSBzby1jYWxsZWQgVU5JUVVFIGluZGV4ZXMKKyAqIHRoYXQgZm9yYmlkIHNvbWV0aGlu ZyBlbHNlLCBsaWtlIG92ZXJsYXBzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW5kZXhlcworICogYmFj a2luZyB0ZW1wb3JhbCBjb25zdHJhaW50cyAoaS5lLiBXSVRIT1VUIE9WRVJMQVBTKS4KKyAqCisg KiBVbmlxdWVuZXNzIGNhbiBvbmx5IGJlIGVuZm9yY2VkIGlmIHRoZSBHSVNURU5UUlkgRGF0dW0g aXMgdGhlIHNhbWUgYXMgdGhlCisgKiBoZWFwIERhdHVtLS0taW4gb3RoZXIgd29yZHMgdGhlcmUg aXMgbm8gY29tcHJlc3Mgc3VwcG9ydCBwcm9jLgorICovCitzdGF0aWMgVHJhbnNhY3Rpb25JZAor Z2lzdF9jaGVja191bmlxdWUoUmVsYXRpb24gcmVsLCBHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgR0lT VEluc2VydFN0YXRlICpzdGF0ZSwKKwkJCQkgIFJlbGF0aW9uIGhlYXBSZWwsIEluZGV4VHVwbGUg aXR1cCwgRGF0dW0gKm5ld3ZhbHMsIGJvb2wgKm5ld251bGxzLAorCQkJCSAgSW5kZXhVbmlxdWVD aGVjayBjaGVja1VuaXF1ZSwgYm9vbCAqaXNfdW5pcXVlKQoreworCVBhZ2UJCXBhZ2U7CisJT2Zm c2V0TnVtYmVyIG1heG9mZjsKKwlPZmZzZXROdW1iZXIgaTsKKwlNZW1vcnlDb250ZXh0IG9sZGN4 dDsKKwlib29sCQljb25mbGljdHMgPSBmYWxzZTsKKwlTbmFwc2hvdERhdGEgU25hcHNob3REaXJ0 eTsKKwlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuOworCVR1cGxlVGFibGVTbG90ICpzbG90Owor CWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxzZTsKKwlib29sCQlmb3VuZCA9IGZhbHNlOworCWJvb2wJ CWFsbF9kZWFkID0gZmFsc2U7IC8vIFRPRE86IHVzZSB0aGlzPyBuYnRyZWUgZG9lcy4KKwlEYXR1 bQkJb2xkdmFsc1tJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJb2xkbnVsbHNbSU5ERVhfTUFYX0tF WVNdOworCisJSW5pdERpcnR5U25hcHNob3QoU25hcHNob3REaXJ0eSk7CisKKwlzbG90ID0gdGFi bGVfc2xvdF9jcmVhdGUoaGVhcFJlbCwgTlVMTCk7CisKKwkvKiBDaGVjayBhbGwgdHVwbGVzIG9u IHRoZSBwYWdlIGZvciBhIGNvbmZsaWN0LiAqLworCXBhZ2UgPSBzdGF0ZS0+c3RhY2stPnBhZ2U7 CisJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKwlmb3IgKGkgPSBGaXJz dE9mZnNldE51bWJlcjsgaSA8PSBtYXhvZmYgJiYgIWNvbmZsaWN0czsgaSA9IE9mZnNldE51bWJl ck5leHQoaSkpCisJeworCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgaSk7CisJ CUluZGV4VHVwbGUJaXQ7CisJCS8vIGJvb2wJCW1hdGNoOworCQkvLyBib29sCQlyZWNoZWNrOwkv LyBUT0RPCisJCS8vIGJvb2wJCXJlY2hlY2tfZGlzdGFuY2VzOworCQlpbnQJCQlqOworCisJCS8q CisJCSAqIFhYWDogb3JpbmRhcnkgc2NhbnMgb25seSBza2lwIGRlYWQgaXRlbXMgaWYgcGFzc2Vk CisJCSAqIGlnbm9yZV9raWxsZWRfdHVwbGVzLiBEbyB3ZSBldmVyIHdhbnQgdG8gc2VlIGtpbGxl ZCB0dXBsZXM/CisJCSAqLworCQlpZiAoSXRlbUlkSXNEZWFkKGlpZCkpCisJCQljb250aW51ZTsK KworCQlpdCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJCS8qCisJ CSAqIEdldCB0aGUgb3JpZ2luYWwgRGF0dW1zIGZyb20gdGhlIGhlYXAuCisJCSAqIFdlIGhhdmUg dG8gbG9vayB0aGVyZSBhbnl3YXkgZm9yIHZpc2liaWxpdHkgaW5mby4KKwkJICogV2UnbGwgcGFz cyB0aGVzZSBEYXR1bXMgdG8gdGhlIGV4Y2x1ZGVGbi4KKwkJICogSWYgdGhlIG9wY2xhc3MgaGFz IG5vIGNvbXByZXNzaW9uIGZ1bmN0aW9uLAorCQkgKiB3ZSBjb3VsZCB1c2UgdGhlIERhdHVtcyBm cm9tIHRoZSBpbmRleCB0dXBsZSBpbnN0ZWFkLAorCQkgKiBidXQgYXMgbG9uZyBhcyB3ZSdyZSBs b2FkaW5nIHRoZSBoZWFwIHJlY29yZAorCQkgKiB3ZSBtaWdodCBhcyB3ZWxsIHVzZSBpdC4KKwkJ ICovCisKKwkJc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBSZWwpOworCQlkbyB7 CisJCQkvLyBUT0RPOiBXaGF0IGlmIHRfdGlkIGdldHMgbW9kaWZpZWQ/CisJCQlmb3VuZCB8PSB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCAmaXQtPnRfdGlkLCAmU25hcHNob3REaXJ0eSwg c2xvdCwKKwkJCQkJCQkJCQkJJmNhbGxfYWdhaW4sICZhbGxfZGVhZCk7CisJCQkvKgorCQkJICog WFhYOiBJcyBsb29waW5nIG9uIGNhbGxfYWdhaW4gYWN0dWFsbHkgbmVlZGVkIGhlcmU/CisJCQkg KiB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayBpZ25vcmVzIGl0LgorCQkJICogQnV0IHNp bmNlIHdlIHVzZSB0aGUgRGF0dW1zLCB3ZSBkbyBuZWVkIHRoZSBsYXRlc3QgdmFsdWVzLgorCQkJ ICovCisJCX0gd2hpbGUgKGNhbGxfYWdhaW4pOworCQlpZiAoIWZvdW5kKQorCQl7CisJCQl0YWJs ZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7CisJCQljb250aW51ZTsKKwkJfQorCQlzbG90X2dldGFs bGF0dHJzKHNsb3QpOworCisJCWNvbmZsaWN0cyA9IHRydWU7CisKKwkJb2xkY3h0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGdpc3RzdGF0ZS0+dGVtcEN4dCk7CisKKwkJLyogQ2hlY2sgYWxsIHRo ZSBrZXkgZWxlbWVudHMgYWdhaW5zdCBleGNsdWRlRm4gKi8KKwkJZm9yIChqID0gMDsgaiA8IGdp c3RzdGF0ZS0+bGVhZlR1cGRlc2MtPm5hdHRzOyBqKyspCisJCXsKKwkJCWludAkJaGVhcGF0dHI7 CisJCQlEYXR1bQlvbGR2YWw7CisJCQlEYXR1bQluZXd2YWw7CisJCQlib29sCW9sZElzTnVsbDsK KwkJCURhdHVtCXRlc3Q7CisKKwkJCUFzc2VydChPaWRJc1ZhbGlkKGdpc3RzdGF0ZS0+ZXhjbHVk ZUZuW2pdLmZuX29pZCkpOworCisJCQkvLyBUT0RPOiBJZiBpdCdzIGFuIGV4cHJlc3Npb24gaW5k ZXggd2l0aCBhIGNvbXByZXNzIGZ1bmN0aW9uLAorCQkJLy8gd2UgaGF2ZSB0byBnaXZlIHVwLiBV bmxlc3Mgd2Ugd2FudCB0byByZS1ldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbi4KKwkJCWhlYXBhdHRy ID0gcmVsLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tqXTsKKworCQkJLy8gWFhYOiBJIGFzc3Vt ZSB0aGUgaW5kZXggaGFzIGEgbnVsbCBpZmYgdGhlIGhlYXAgZG9lcz8KKwkJCS8vIFhYWDogV2hh dCBhYm91dCBudWxsc19ub3RfZGlzdGluY3Q/IEJ0cmVlIHNlZW1zIHRvIGlnbm9yZSB0aGF0CisJ CQkvLyB0aG91Z2ggaW4gYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYzpfYnRfZG9pbnNlcnQKKwkJ CW9sZElzTnVsbCA9IHNsb3QtPnR0c19pc251bGxbaGVhcGF0dHIgLSAxXTsKKwkJCWlmIChvbGRJ c051bGwpCisJCQl7CisJCQkJY29uZmxpY3RzID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJb2xkdmFsID0gc2xvdC0+dHRzX3ZhbHVlc1toZWFwYXR0ciAtIDFd OworCQkJfQorCQkJLyoKKwkJCSAqIFJlY29yZCB0aGUgaGVhcCBEYXR1bXMgaW4gaW5kZXgtYXR0 cmlidXRlIG9yZGVyLAorCQkJICogc28gd2UgY2FuIGJ1aWxkIGFuIGVycm9yIG1lc3NhZ2UgYmVs b3cuCisJCQkgKi8KKwkJCW9sZG51bGxzW2pdID0gb2xkSXNOdWxsOworCQkJb2xkdmFsc1tqXSA9 IG9sZHZhbDsKKworCQkJLy8gWFhYOiBJIGFzc3VtZSB0aGUgaW5kZXggaGFzIGEgbnVsbCBpZmYg dGhlIGhlYXAgZG9lcz8KKwkJCS8vIFhYWDogV2hhdCBhYm91dCBudWxsc19ub3RfZGlzdGluY3Q/ IEJ0cmVlIHNlZW1zIHRvIGlnbm9yZSB0aGF0CisJCQkvLyB0aG91Z2ggaW4gYWNjZXNzL25idHJl ZS9uYnRpbnNlcnQuYzpfYnRfZG9pbnNlcnQKKwkJCWlmIChuZXdudWxsc1tqXSkKKwkJCXsKKwkJ CQkvLyBYWFg6IHByb2JhYmx5IGEgaGlnaGVyIGxldmVsIHByZXZlbnRzIGV2ZW4gY2hlY2tpbmcg dGhlIGluZGV4IGhlcmU/CisJCQkJY29uZmxpY3RzID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJLy8gVE9ETzogZGV0b2FzdCB0aGUgbmV3dmFscyB1cCBmcm9u dCwgb25seSBvbmNlPworCQkJCW5ld3ZhbCA9IG5ld3ZhbHNbal07CisJCQl9CisKKwkJCS8vIFRP RE86IElmIHdlIGNoZWNrIG51bGxzX25vdF9kaXN0aW5jdCBoZXJlLAorCQkJLy8gYW5kIGJvdGgg bmV3IGFuZCBvbGQgYXJlIG51bGwsCisJCQkvLyB0aGVuIHRyZWF0IGl0IGFzIGEgY29uZmxpY3Qu CisJCQkvLyBTb21laG93IG5idHJlZSBkb2Vzbid0IGRvIHRoYXQuCisKKwkJCXRlc3QgPSBGdW5j dGlvbkNhbGwyQ29sbCgmZ2lzdHN0YXRlLT5leGNsdWRlRm5bal0sCisJCQkJCQkJCQkgSW52YWxp ZE9pZCwJLy8gVE9ETzogY29sbGF0aW9uCisJCQkJCQkJCQkgb2xkdmFsLAorCQkJCQkJCQkJIG5l d3ZhbCk7CisJCQkvKgorCQkJICogSWYgYWxsIGF0dHJpYnV0ZXMgY29uZmxpY3QsIHRoZW4gd2Ug dmlvbGF0ZSB1bmlxdWVuZXNzLgorCQkJICogU28gd2UgY2FuIGFib3J0IG9uIHRoZSBmaXJzdCBu b24tY29uZmxpY3RpbmcgYXR0cmlidXRlLgorCQkJICovCisJCQljb25mbGljdHMgJj0gRGF0dW1H ZXRCb29sKHRlc3QpOworCQkJaWYgKCFjb25mbGljdHMpCisJCQkJYnJlYWs7CisJCX0KKworCQl0 YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworCX0KKwkqaXNfdW5pcXVlID0gIWNvbmZsaWN0czsKKworCS8vIFRPRE86IGRlcGVuZHMg b24gY2hlY2tVbmlxdWUKKwkvLyBUT0RPOiBkZWFsIHdpdGggTVZDQworCWlmIChjb25mbGljdHMp IHsKKwkJY2hhciAqa2V5X2Rlc2MgPSBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbihyZWwsIG5l d3ZhbHMsIG5ld251bGxzKTsKKworCQkvKiBGb3IgV0lUSE9VVCBPVkVSTEFQUywgbWF0Y2ggdGhl IGV4Y2x1c2lvbiBjb25zdHJhaW50IG1lc3NhZ2UgKi8KKwkJaWYgKHJlbC0+cmRfaW5kZXgtPmlu ZGlzZXhjbHVzaW9uKQorCQl7CisJCQljaGFyICpvbGRfa2V5X2Rlc2MgPSBCdWlsZEluZGV4VmFs dWVEZXNjcmlwdGlvbihyZWwsIG9sZHZhbHMsIG9sZG51bGxzKTsKKwkJCWlmIChzdGF0ZS0+aXNf YnVpbGQpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5JUVVF X1ZJT0xBVElPTiksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGV4Y2x1c2lvbiBj b25zdHJhaW50IFwiJXNcIiIsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkp LAorCQkJCQkJIGtleV9kZXNjICYmIG9sZF9rZXlfZGVzYyA/IGVycmRldGFpbCgiS2V5ICVzIGNv bmZsaWN0cyB3aXRoIGtleSAlcy4iLAorCQkJCQkJCQkJCQkgIGtleV9kZXNjLCBvbGRfa2V5X2Rl c2MpIDogMCwKKwkJCQkJCSBlcnJ0YWJsZWNvbnN0cmFpbnQoaGVhcFJlbCwKKwkJCQkJCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTklRVUVfVklPTEFUSU9OKSwKKwkJCQkJCSBl cnJtc2coImNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWlu dCBcIiVzXCIiLAorCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkJ CSBrZXlfZGVzYyAmJiBvbGRfa2V5X2Rlc2MgPyBlcnJkZXRhaWwoIktleSAlcyBjb25mbGljdHMg d2l0aCBleGlzdGluZyBrZXkgJXMuIiwKKwkJCQkJCQkJCQkJICBrZXlfZGVzYywgb2xkX2tleV9k ZXNjKSA6IDAsCisJCQkJCQkgZXJydGFibGVjb25zdHJhaW50KGhlYXBSZWwsCisJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisJCX0KKwkJZWxzZQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTklRVUVfVklPTEFUSU9OKSwKKwkJCQkJ IGVycm1zZygiZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCBc IiVzXCIiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpLAorCQkJCQkga2V5 X2Rlc2MgPyBlcnJkZXRhaWwoIktleSAlcyBhbHJlYWR5IGV4aXN0cy4iLAorCQkJCQkJCQkJCSAg a2V5X2Rlc2MpIDogMCwKKwkJCQkJIGVycnRhYmxlY29uc3RyYWludChoZWFwUmVsLAorCQkJCQkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisJfQorCisJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKworCS8vIFRPRE86IHh3YWl0IHdoZW4gaXQgaXMgbm90 IHVuaXF1ZQorCXJldHVybiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKK30KKwogLyoKICAqIFdvcmto b3JzZSByb3V0aW5lIGZvciBkb2luZyBpbnNlcnRpb24gaW50byBhIEdpU1QgaW5kZXguIE5vdGUg dGhhdAogICogdGhpcyByb3V0aW5lIGFzc3VtZXMgaXQgaXMgaW52b2tlZCBpbiBhIHNob3J0LWxp dmVkIG1lbW9yeSBjb250ZXh0LAogICogc28gaXQgZG9lcyBub3QgYm90aGVyIHJlbGVhc2luZyBw YWxsb2MnZCBhbGxvY2F0aW9ucy4KKyAqCisgKiBUaGUgcmVzdWx0IHZhbHVlIGlzIG9ubHkgc2ln bmlmaWNhbnQgZm9yIFVOSVFVRV9DSEVDS19QQVJUSUFMOgorICogaXQgbXVzdCBiZSB0cnVlIGlm IHRoZSBlbnRyeSBpcyBrbm93biB1bmlxdWUsIGVsc2UgZmFsc2UuCisgKiAoSW4gdGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24gd2UnbGwgYWxzbyByZXR1cm4gdHJ1ZSBhZnRlciBhCisgKiBzdWNj ZXNzZnVsIFVOSVFVRV9DSEVDS19ZRVMgb3IgVU5JUVVFX0NIRUNLX0VYSVNUSU5HIGNhbGwsIGJ1 dAorICogdGhhdCdzIGp1c3QgYSBjb2RpbmcgYXJ0aWZhY3QuKQogICovCi12b2lkCi1naXN0ZG9p bnNlcnQoUmVsYXRpb24gciwgSW5kZXhUdXBsZSBpdHVwLCBTaXplIGZyZWVzcGFjZSwKLQkJCSBH SVNUU1RBVEUgKmdpc3RzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwgYm9vbCBpc19idWlsZCkKK2Jv b2wKK2dpc3Rkb2luc2VydChSZWxhdGlvbiByLCBJbmRleFR1cGxlIGl0dXAsIEluZGV4VW5pcXVl Q2hlY2sgY2hlY2tVbmlxdWUsCisJCQkgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAorCQkJ IFNpemUgZnJlZXNwYWNlLCBHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwg Ym9vbCBpc19idWlsZCkKIHsKIAlJdGVtSWQJCWlpZDsKIAlJbmRleFR1cGxlCWlkeHR1cGxlOwpA QCAtNjQ1LDYgKzg3MSwxMCBAQCBnaXN0ZG9pbnNlcnQoUmVsYXRpb24gciwgSW5kZXhUdXBsZSBp dHVwLCBTaXplIGZyZWVzcGFjZSwKIAlHSVNUSW5zZXJ0U3RhY2sgKnN0YWNrOwogCUdJU1RJbnNl cnRTdGF0ZSBzdGF0ZTsKIAlib29sCQl4bG9ja2VkID0gZmFsc2U7CisJYm9vbAkJY2hlY2tpbmd1 bmlxdWUgPSAoY2hlY2tVbmlxdWUgIT0gVU5JUVVFX0NIRUNLX05PKTsKKwlib29sCQlpc191bmlx dWUgPSBmYWxzZTsKKworc2VhcmNoOgogCiAJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKEdJU1RJ bnNlcnRTdGF0ZSkpOwogCXN0YXRlLmZyZWVzcGFjZSA9IGZyZWVzcGFjZTsKQEAgLTgzNiw2ICsx MDY2LDEyIEBAIGdpc3Rkb2luc2VydChSZWxhdGlvbiByLCBJbmRleFR1cGxlIGl0dXAsIFNpemUg ZnJlZXNwYWNlLAogCQkJICogTGVhZiBwYWdlLiBJbnNlcnQgdGhlIG5ldyBrZXkuIFdlJ3ZlIGFs cmVhZHkgdXBkYXRlZCBhbGwgdGhlCiAJCQkgKiBwYXJlbnRzIG9uIHRoZSB3YXkgZG93biwgYnV0 IHdlIG1pZ2h0IGhhdmUgdG8gc3BsaXQgdGhlIHBhZ2UgaWYKIAkJCSAqIGl0IGRvZXNuJ3QgZml0 LiBnaXN0aW5zZXJ0dHVwbGUoKSB3aWxsIHRha2UgY2FyZSBvZiB0aGF0LgorCQkJICogVE9ETzog SWYgdGhlIHBhcmVudHMgYXJlIGFscmVhZHkgdXBkYXRlZCwKKwkJCSAqIGlzbid0IHRoYXQgYSBw cm9ibGVtIGlmIHRoZSB1bmlxdWVuZXNzIGNoZWNrIGZhaWxzPz8KKwkJCSAqIERvIHdlIG5lZWQg dG8gZGVzY2VuZCB0d2ljZSBhbmQga2VlcCB0aGUgbG9ja3MgbG9uZ2VyIGZvciB1bmlxdWUKKwkJ CSAqIGluZGV4ZXM/CisJCQkgKiBJZiBndWVzcyBpZiB0aGUgbmV3IGVudHJ5ICppcyogbm9uLXVu aXF1ZSwgdGhlIHBhcmVudHMgZGlkbid0CisJCQkgKiBhY3R1YWxseSBjaGFuZ2UsIHJpZ2h0Pwog CQkJICovCiAKIAkJCS8qCkBAIC04ODksMTYgKzExMjUsNDcgQEAgZ2lzdGRvaW5zZXJ0KFJlbGF0 aW9uIHIsIEluZGV4VHVwbGUgaXR1cCwgU2l6ZSBmcmVlc3BhY2UsCiAKIAkJCS8qIG5vdyBzdGF0 ZS5zdGFjay0+KHBhZ2UsIGJ1ZmZlciBhbmQgYmxrbm8pIHBvaW50cyB0byBsZWFmIHBhZ2UgKi8K IAotCQkJZ2lzdGluc2VydHR1cGxlKCZzdGF0ZSwgc3RhY2ssIGdpc3RzdGF0ZSwgaXR1cCwKLQkJ CQkJCQlJbnZhbGlkT2Zmc2V0TnVtYmVyKTsKKwkJCS8vIFRPRE86IG5vdyB0aGF0IHdlIGhhdmUg dGhlIGxvY2ssCisJCQkvLyB3ZSBjYW4gY2hlY2sgZm9yIHVuaXF1ZW5lc3MgYW5kIHJhaXNlIGFu IGVycm9yIGlmIG5lZWRlZC4KKwkJCWlmIChjaGVja2luZ3VuaXF1ZSkKKwkJCXsKKwkJCQlUcmFu c2FjdGlvbklkIHh3YWl0OworCQkJCS8vIElmIHRoZXJlIGFyZSBudWxsIHZhbHVlcywgaXQgY2Fu J3QgYmUgdW5pcXVlCisJCQkJLy8gVE9ETzogYnV0IHdoYXQgYWJvdXQgTlVMTFMgTk9UIERJU1RJ TkNUPyBJIGRvbid0IHNlZSB0aGF0IGluCisJCQkJLy8gbmJ0cmVlIF9idF9kb2luc2VydC4KKwkJ CQkvLyBGb3IgYnRyZWUgdGhpcyBzZWVtcyB0byBiZSBoYW5kbGVkIGluIHV0aWxzL3NvcnQvdHVw bGVzb3J0dmFyaWFudHMuYworCQkJCS8vICh3aGljaCBvZiBjb3Vyc2UgaXMgb3V0c2lkZSBvZiBh Y2Nlc3MvbmJ0cmVlLCBidXQgaGFzIGJ0cmVlCisJCQkJLy8gaW4gbWFueSBmdW5jdGlvbiBuYW1l cykuCisKKwkJCQl4d2FpdCA9IGdpc3RfY2hlY2tfdW5pcXVlKHIsIGdpc3RzdGF0ZSwgJnN0YXRl LCBoZWFwUmVsLCBpdHVwLAorCQkJCQkJCQkJCSAgdmFsdWVzLCBpc251bGwsCisJCQkJCQkJCQkJ ICBjaGVja1VuaXF1ZSwgJmlzX3VuaXF1ZSk7CisJCQkJaWYgKHVubGlrZWx5KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHh3YWl0KSkpCisJCQkJeworCQkJCQkvLyBUT0RPOiBtb3JlIGhlcmUKKwkJCQkJ Z290byBzZWFyY2g7CisJCQkJfQorCQkJfQorCisJCQlpZiAoY2hlY2tVbmlxdWUgIT0gVU5JUVVF X0NIRUNLX0VYSVNUSU5HKQorCQkJeworCQkJCS8vIFRPRE86IG5lZWQgU0VSSUFMSVpBQkxFIGNo ZWNrIGxpa2UgbmJ0cmVlPworCisJCQkJZ2lzdGluc2VydHR1cGxlKCZzdGF0ZSwgc3RhY2ssIGdp c3RzdGF0ZSwgaXR1cCwKKwkJCQkJCQkJSW52YWxpZE9mZnNldE51bWJlcik7CisJCQl9CisKIAkJ CUxvY2tCdWZmZXIoc3RhY2stPmJ1ZmZlciwgR0lTVF9VTkxPQ0spOwogCiAJCQkvKiBSZWxlYXNl IGFueSBwaW5zIHdlIG1pZ2h0IHN0aWxsIGhvbGQgYmVmb3JlIGV4aXRpbmcgKi8KIAkJCWZvciAo OyBzdGFjazsgc3RhY2sgPSBzdGFjay0+cGFyZW50KQogCQkJCVJlbGVhc2VCdWZmZXIoc3RhY2st PmJ1ZmZlcik7CisKIAkJCWJyZWFrOwogCQl9CiAJfQorCisJcmV0dXJuIGlzX3VuaXF1ZTsKIH0K IAogLyoKQEAgLTE2MjMsNiArMTg5MCwxNSBAQCBpbml0R0lTVHN0YXRlKFJlbGF0aW9uIGluZGV4 KQogCQllbHNlCiAJCQlnaXN0c3RhdGUtPmZldGNoRm5baV0uZm5fb2lkID0gSW52YWxpZE9pZDsK IAorCQkvKgorCQkgKiBXZSBvbmx5IG5lZWQgZXhjbHVkZUZuIGZvciBVTklRVUUgaW5kZXhlcy4K KwkJICogWFhYOiBXZSBjb3VsZCB1c2UgdGhpcyB0byBlbmZvcmNlIGV4Y2x1c2lvbiBjb25zdHJh aW50cworCQkgKiBmcm9tIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBjb25zdHJhaW50ICh3aGlj aCBpcyBob3cKKwkJICogdW5pcXVlIGNvbnN0cmFpbnRzIHdvcmsgYXQgYW55IHJhdGUpLiBPciB3 ZSBjb3VsZCBhdCBsZWFzdAorCQkgKiBlbmZvcmNlIFdJVEhPVVQgT1ZFUkxBUFMgc2VtYW50aWNz LgorCQkgKi8KKwkJZ2lzdHN0YXRlLT5leGNsdWRlRm5baV0uZm5fb2lkID0gSW52YWxpZE9pZDsK KwogCQkvKgogCQkgKiBJZiB0aGUgaW5kZXggY29sdW1uIGhhcyBhIHNwZWNpZmllZCBjb2xsYXRp b24sIHdlIHNob3VsZCBob25vciB0aGF0CiAJCSAqIHdoaWxlIGRvaW5nIGNvbXBhcmlzb25zLiAg SG93ZXZlciwgd2UgbWF5IGhhdmUgYSBjb2xsYXRhYmxlIHN0b3JhZ2UKQEAgLTE2NTIsNiArMTky OCw3IEBAIGluaXRHSVNUc3RhdGUoUmVsYXRpb24gaW5kZXgpCiAJCWdpc3RzdGF0ZS0+ZXF1YWxG bltpXS5mbl9vaWQgPSBJbnZhbGlkT2lkOwogCQlnaXN0c3RhdGUtPmRpc3RhbmNlRm5baV0uZm5f b2lkID0gSW52YWxpZE9pZDsKIAkJZ2lzdHN0YXRlLT5mZXRjaEZuW2ldLmZuX29pZCA9IEludmFs aWRPaWQ7CisJCWdpc3RzdGF0ZS0+ZXhjbHVkZUZuW2ldLmZuX29pZCA9IEludmFsaWRPaWQ7CiAJ CWdpc3RzdGF0ZS0+c3VwcG9ydENvbGxhdGlvbltpXSA9IEludmFsaWRPaWQ7CiAJfQogCkBAIC0x NjYwLDYgKzE5MzcsNzIgQEAgaW5pdEdJU1RzdGF0ZShSZWxhdGlvbiBpbmRleCkKIAlyZXR1cm4g Z2lzdHN0YXRlOwogfQogCisvKgorICogSW5pdGlhbGl6ZSBleGNsdWRlRm4gKGFzc3VtZXMgdGhp cyBpcyBhIFVOSVFVRSBpbmRleCkuCisgKi8KK3ZvaWQKK2luaXRHSVNUc3RhdGVFeGNsdWRlKEdJ U1RTVEFURSAqZ2lzdHN0YXRlLCBSZWxhdGlvbiBpbmRleCkKK3sKKwlpbnQJCQluYXR0cyA9IElu ZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXgpOworCWludAkJCWk7CisK KwlBc3NlcnQoaW5kZXgtPnJkX2luZGV4LT5pbmRpc3VuaXF1ZSk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbmF0dHM7IGkrKykKKwl7CisJCS8qCisJCSAqIFNldCB0aGUgb3BlcmF0b3IgKG9yIHJhdGhl ciBpdHMgZnVuY3Rpb24pIGZvciB0aGUgZXF1YWxpdHkgQ29tcGFyZVR5cGUKKwkJICogKG9yIGZh aWwpLgorCQkgKgorCQkgKiBFdmVuIHRoZSBHaVNUIEFNIGRvZXNuJ3Qga25vdyB0aGUgc3RyYXRl Z3kgbnVtYmVycyBjaG9zZW4gYnkgR2lTVAorCQkgKiBvcGZhbWlsaWVzLiBGb3IgZXhhbXBsZSBi dHJlZV9naXN0IHVzZXMgQlQqU3RyYXRlZ3lOdW1iZXIgZXZlbiB0aG91Z2gKKwkJICogYnVpbHQt aW4gb3BjbGFzc2VzIHVzZXMgUlQqU3RyYXRlZ3lOdW1iZXIuIFNvIHdlIHVzZSB0aGUgQ29tcGFy ZVR5cGUKKwkJICogaW5mcmFzdHJ1Y3R1cmUgdG8gZmluZCBhbiBvcGVyYXRvciB0aGF0IGltcGxl bWVudHMgZXF1YWxpdHkuCisJCSAqCisJCSAqIFhYWDogV2UgYXNzdW1lIHRoYXQgYWxsIG9wY2xh c3NlcyB3aXRoaW4gYW4gb3BmYW1pbHkgdXNlIHRoZSBzYW1lCisJCSAqIHN0cmF0ZWd5IG51bWJl cnMuIFRoaXMgaXMgcHJvYmFibHkgYSBmYWlyIGFzc3VtcHRpb24sIGJ1dCBpdAorCQkgKiBtZWFu cyB3ZSBkaXNyZWdhcmQgdGhlIGluZGV4IGF0dHJpYnV0ZXMnIG9wY2xhc3NlcyB3aGVuIGdldHRp bmcKKwkJICogc3RyYXRudW1zLgorCQkgKi8KKwkJUmVnUHJvY2VkdXJlIHByb2M7CisJCU9pZCBv cGZhbWlseSA9IGluZGV4LT5yZF9vcGZhbWlseVtpXTsKKwkJQ29tcGFyZVR5cGUgY21wdHlwZTsK KwkJU3RyYXRlZ3lOdW1iZXIgc3RyYXQ7CisJCU9pZAkJCQlvcGlkOworCisJCS8qCisJCSAqIElm IHRoaXMgaXMgYSBXSVRIT1VUIE9WRVJMQVBTIGluZGV4LCB3ZSB1c2Ugb3ZlcmxhcHMgZm9yIHRo ZSBsYXN0CisJCSAqIGVsZW1lbnQuIE90aGVyd2lzZSB3ZSB1c2UgZXF1YWxpdHkuIFRoZSBvbmx5 IHRpbWUgYm90aCBpbmRpc3VuaXF1ZQorCQkgKiBhbmQgaW5kaXNleGNsdXNpb24gYXJlIHNldCBp cyBmb3IgV0lUSE9VVCBPVkVSTEFQUy4KKwkJICoKKwkJICogWFhYOiBXZSBjb3VsZCBkbyBjaGVj a2luZyBmb3IgYWxsIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBoZXJlLAorCQkgKiBpZiB3ZSB3YW50 ZWQgdG8gbG9vayB1cCB0aGVpciBvcGVyYXRvcnMuCisJCSAqLworCQlpZiAoaW5kZXgtPnJkX2lu ZGV4LT5pbmRpc2V4Y2x1c2lvbiAmJiBpID09IG5hdHRzIC0gMSkKKwkJCWNtcHR5cGUgPSBDT01Q QVJFX09WRVJMQVA7CisJCWVsc2UKKwkJCWNtcHR5cGUgPSBDT01QQVJFX0VROworCisJCXN0cmF0 ID0gSW5kZXhBbVRyYW5zbGF0ZUNvbXBhcmVUeXBlKGNtcHR5cGUsIEdJU1RfQU1fT0lELCBvcGZh bWlseSwgZmFsc2UpOworCisKKwkJb3BpZCA9IGdldF9vcGZhbWlseV9tZW1iZXIoaW5kZXgtPnJk X29wZmFtaWx5W2ldLAorCQkJCQkJCQkgICBpbmRleC0+cmRfb3BjaW50eXBlW2ldLAorCQkJCQkJ CQkgICBpbmRleC0+cmRfb3BjaW50eXBlW2ldLCBzdHJhdCk7CisJCWlmICghT2lkSXNWYWxpZChv cGlkKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycm1zZygiY291bGQgbm90IGlkZW50aWZ5 IGVxdWFsaXR5IG9wZXJhdG9yIGZvciB1bmlxdWUgY29uc3RyYWludCIpLAorCQkJCQllcnJkZXRh aWwoIkNvdWxkIG5vdCB0cmFuc2xhdGUgY29tcGFyZSB0eXBlICVkIGZvciBvcGVyYXRvciBmYW1p bHkgXCIlc1wiIG9mIGFjY2VzcyBtZXRob2QgXCIlc1wiLiIsCisJCQkJCQkJICBjbXB0eXBlLCBn ZXRfb3BmYW1pbHlfbmFtZShvcGZhbWlseSwgZmFsc2UpLCBnZXRfYW1fbmFtZShHSVNUX0FNX09J RCkpKTsKKworCQlwcm9jID0gZ2V0X29wY29kZShvcGlkKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKHBy b2MpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yICV1 Iiwgb3BpZCk7CisKKwkJZm1ncl9pbmZvX2N4dChwcm9jLCAmKGdpc3RzdGF0ZS0+ZXhjbHVkZUZu W2ldKSwgZ2lzdHN0YXRlLT5zY2FuQ3h0KTsKKwl9Cit9CisKIHZvaWQKIGZyZWVHSVNUc3RhdGUo R0lTVFNUQVRFICpnaXN0c3RhdGUpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0YnVpbGQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jCmlu ZGV4IGI5ZmExOTYxNDlkLi45OTg2YWY0OWM2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1 aWxkLmMKQEAgLTEwOCw2ICsxMDgsOSBAQCB0eXBlZGVmIHN0cnVjdAogCUJsb2NrTnVtYmVyIHBh Z2VzX2FsbG9jYXRlZDsKIAogCUJ1bGtXcml0ZVN0YXRlICpidWxrc3RhdGU7CisKKwlib29sCQlp c3VuaXF1ZTsKKwlib29sCQludWxsc19ub3RfZGlzdGluY3Q7CiB9IEdJU1RCdWlsZFN0YXRlOwog CiAjZGVmaW5lIEdJU1RfU09SVEVEX0JVSUxEX1BBR0VfTlVNIDQKQEAgLTE5OCw2ICsyMDEsMTAg QEAgZ2lzdGJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmlu ZGV4SW5mbykKIAlidWlsZHN0YXRlLmhlYXByZWwgPSBoZWFwOwogCWJ1aWxkc3RhdGUuc29ydHN0 YXRlID0gTlVMTDsKIAlidWlsZHN0YXRlLmdpc3RzdGF0ZSA9IGluaXRHSVNUc3RhdGUoaW5kZXgp OworCWlmIChpbmRleEluZm8tPmlpX1VuaXF1ZSkKKwkJaW5pdEdJU1RzdGF0ZUV4Y2x1ZGUoYnVp bGRzdGF0ZS5naXN0c3RhdGUsIGluZGV4KTsKKwlidWlsZHN0YXRlLmlzdW5pcXVlID0gaW5kZXhJ bmZvLT5paV9VbmlxdWU7CisJYnVpbGRzdGF0ZS5udWxsc19ub3RfZGlzdGluY3QgPSBpbmRleElu Zm8tPmlpX051bGxzTm90RGlzdGluY3Q7CiAKIAkvKgogCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBt ZW1vcnkgY29udGV4dCB0aGF0IGlzIHJlc2V0IG9uY2UgZm9yIGVhY2ggdHVwbGUKQEAgLTI2Niw2 ICsyNzMsOCBAQCBnaXN0YnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4 SW5mbyAqaW5kZXhJbmZvKQogCQkgKi8KIAkJYnVpbGRzdGF0ZS5zb3J0c3RhdGUgPSB0dXBsZXNv cnRfYmVnaW5faW5kZXhfZ2lzdChoZWFwLAogCQkJCQkJCQkJCQkJCQkgIGluZGV4LAorCQkJCQkJ CQkJCQkJCQkgIGJ1aWxkc3RhdGUuaXN1bmlxdWUsCisJCQkJCQkJCQkJCQkJCSAgYnVpbGRzdGF0 ZS5udWxsc19ub3RfZGlzdGluY3QsCiAJCQkJCQkJCQkJCQkJCSAgbWFpbnRlbmFuY2Vfd29ya19t ZW0sCiAJCQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICBUVVBMRVNPUlRfTk9O RSk7CkBAIC04NjIsOCArODcxLDI4IEBAIGdpc3RCdWlsZENhbGxiYWNrKFJlbGF0aW9uIGluZGV4 LAogCQkgKiBUaGVyZSdzIG5vIGJ1ZmZlcnMgKHlldCkuIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0 aGUgaW5kZXggcmVsYXRpb24KIAkJICogbG9ja2VkLCB3ZSBjYWxsIGdpc3Rkb2luc2VydCBkaXJl Y3RseS4KIAkJICovCi0JCWdpc3Rkb2luc2VydChpbmRleCwgaXR1cCwgYnVpbGRzdGF0ZS0+ZnJl ZXNwYWNlLAotCQkJCQkgYnVpbGRzdGF0ZS0+Z2lzdHN0YXRlLCBidWlsZHN0YXRlLT5oZWFwcmVs LCB0cnVlKTsKKwkJYm9vbCBrbm93bl91bmlxdWUgPSBnaXN0ZG9pbnNlcnQoaW5kZXgsIGl0dXAs CisJCQkJCQkJCQkJIGJ1aWxkc3RhdGUtPmlzdW5pcXVlID8gVU5JUVVFX0NIRUNLX1lFUworCQkJ CQkJCQkJCQkJCQkJICA6IFVOSVFVRV9DSEVDS19OTywKKwkJCQkJCQkJCQkgdmFsdWVzLCBpc251 bGwsCisJCQkJCQkJCQkJIGJ1aWxkc3RhdGUtPmZyZWVzcGFjZSwKKwkJCQkJCQkJCQkgYnVpbGRz dGF0ZS0+Z2lzdHN0YXRlLAorCQkJCQkJCQkJCSBidWlsZHN0YXRlLT5oZWFwcmVsLCB0cnVlKTsK KwkJLyoKKwkJICogVGhlcmUgYXJlIG5vIG90aGVyIHVzZXJzIG9mIHRoZSBpbmRleCB5ZXQsIHNv IGlmIHdlIGFyZW4ndCBzdXJlIGl0J3MKKwkJICogdW5pcXVlLCB0aGVyZSBtdXN0IGJlIGR1cGxp Y2F0ZXMuCisJCSAqIFRPRE86IHJpZ2h0Pz8KKwkJICovCisJCS8vIFRPRE86IHNheSB3aGljaCBr ZXlzIGFyZSBkdXBsaWNhdGVkIGlmIHBvc3NpYmxlIChhcyBpbgorCQkvLyB1dGlscy9zb3J0L3R1 cGxlc29ydHZhcmlhbnRzLmMpCisJCWlmIChidWlsZHN0YXRlLT5pc3VuaXF1ZSAmJiAha25vd25f dW5pcXVlKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTklRVUVf VklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXgg XCIlc1wiIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShidWlsZHN0YXRlLT5pbmRl eHJlbCkpLAorCQkJCQkgZXJyZGV0YWlsKCJEdXBsaWNhdGUga2V5cyBleGlzdC4iKSwKKwkJCQkJ IGVycnRhYmxlY29uc3RyYWludChidWlsZHN0YXRlLT5oZWFwcmVsLAorCQkJCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKGJ1aWxkc3RhdGUtPmluZGV4cmVsKSkpKTsKIAl9CiAKIAlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVz b3J0dmFyaWFudHMuYwppbmRleCBhMWY1YzE5ZWU5Ny4uOGQyNjI5NDkwYmQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKQEAgLTQ5MCw2ICs0OTAsOCBAQCB0 dXBsZXNvcnRfYmVnaW5faW5kZXhfaGFzaChSZWxhdGlvbiBoZWFwUmVsLAogVHVwbGVzb3J0c3Rh dGUgKgogdHVwbGVzb3J0X2JlZ2luX2luZGV4X2dpc3QoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJ CSAgIFJlbGF0aW9uIGluZGV4UmVsLAorCQkJCQkJICAgYm9vbCBlbmZvcmNlVW5pcXVlLAorCQkJ CQkJICAgYm9vbCB1bmlxdWVOdWxsc05vdERpc3RpbmN0LAogCQkJCQkJICAgaW50IHdvcmtNZW0s CiAJCQkJCQkgICBTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlLAogCQkJCQkJICAgaW50IHNvcnRv cHQpCkBAIC01MjEsOCArNTIzLDggQEAgdHVwbGVzb3J0X2JlZ2luX2luZGV4X2dpc3QoUmVsYXRp b24gaGVhcFJlbCwKIAogCWFyZy0+aW5kZXguaGVhcFJlbCA9IGhlYXBSZWw7CiAJYXJnLT5pbmRl eC5pbmRleFJlbCA9IGluZGV4UmVsOwotCWFyZy0+ZW5mb3JjZVVuaXF1ZSA9IGZhbHNlOwotCWFy Zy0+dW5pcXVlTnVsbHNOb3REaXN0aW5jdCA9IGZhbHNlOworCWFyZy0+ZW5mb3JjZVVuaXF1ZSA9 IGVuZm9yY2VVbmlxdWU7CisJYXJnLT51bmlxdWVOdWxsc05vdERpc3RpbmN0ID0gdW5pcXVlTnVs bHNOb3REaXN0aW5jdDsKIAogCS8qIFByZXBhcmUgU29ydFN1cHBvcnQgZGF0YSBmb3IgZWFjaCBj b2x1bW4gKi8KIAliYXNlLT5zb3J0S2V5cyA9IChTb3J0U3VwcG9ydCkgcGFsbG9jMChiYXNlLT5u S2V5cyAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmgKaW5kZXggMzk0MDRlYzdjZGIuLjQxNWQx ZDNiMDBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCkBAIC05Miw2ICs5Miw3IEBAIHR5 cGVkZWYgc3RydWN0IEdJU1RTVEFURQogCUZtZ3JJbmZvCWVxdWFsRm5bSU5ERVhfTUFYX0tFWVNd OwogCUZtZ3JJbmZvCWRpc3RhbmNlRm5bSU5ERVhfTUFYX0tFWVNdOwogCUZtZ3JJbmZvCWZldGNo Rm5bSU5ERVhfTUFYX0tFWVNdOworCUZtZ3JJbmZvCWV4Y2x1ZGVGbltJTkRFWF9NQVhfS0VZU107 CiAKIAkvKiBDb2xsYXRpb25zIHRvIHBhc3MgdG8gdGhlIHN1cHBvcnQgZnVuY3Rpb25zICovCiAJ T2lkCQkJc3VwcG9ydENvbGxhdGlvbltJTkRFWF9NQVhfS0VZU107CkBAIC00MDcsOSArNDA4LDEz IEBAIGV4dGVybiBib29sIGdpc3RpbnNlcnQoUmVsYXRpb24gciwgRGF0dW0gKnZhbHVlcywgYm9v bCAqaXNudWxsLAogCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogZXh0ZXJu IE1lbW9yeUNvbnRleHQgY3JlYXRlVGVtcEdpc3RDb250ZXh0KHZvaWQpOwogZXh0ZXJuIEdJU1RT VEFURSAqaW5pdEdJU1RzdGF0ZShSZWxhdGlvbiBpbmRleCk7CitleHRlcm4gdm9pZCBpbml0R0lT VHN0YXRlRXhjbHVkZShHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgUmVsYXRpb24gaW5kZXgpOwogZXh0 ZXJuIHZvaWQgZnJlZUdJU1RzdGF0ZShHSVNUU1RBVEUgKmdpc3RzdGF0ZSk7Ci1leHRlcm4gdm9p ZCBnaXN0ZG9pbnNlcnQoUmVsYXRpb24gciwKK2V4dGVybiBib29sIGdpc3Rkb2luc2VydChSZWxh dGlvbiByLAogCQkJCQkJIEluZGV4VHVwbGUgaXR1cCwKKwkJCQkJCSBJbmRleFVuaXF1ZUNoZWNr IGNoZWNrVW5pcXVlLAorCQkJCQkJIERhdHVtICp2YWx1ZXMsCisJCQkJCQkgYm9vbCAqaXNudWxs LAogCQkJCQkJIFNpemUgZnJlZXNwYWNlLAogCQkJCQkJIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAog CQkJCQkJIFJlbGF0aW9uIGhlYXBSZWwsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy90 dXBsZXNvcnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oCmluZGV4IDYzYTdjYzEz YTMxLi5iOWYwNGY2ZGM1MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0 LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmgKQEAgLTQ0MCw2ICs0NDAsOCBA QCBleHRlcm4gVHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdpbl9pbmRleF9oYXNoKFJlbGF0 aW9uIGhlYXBSZWwsCiAJCQkJCQkJCQkJCQkgIGludCBzb3J0b3B0KTsKIGV4dGVybiBUdXBsZXNv cnRzdGF0ZSAqdHVwbGVzb3J0X2JlZ2luX2luZGV4X2dpc3QoUmVsYXRpb24gaGVhcFJlbCwKIAkJ CQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhSZWwsCisJCQkJCQkJCQkJCQkgIGJvb2wgZW5mb3Jj ZVVuaXF1ZSwKKwkJCQkJCQkJCQkJCSAgYm9vbCB1bmlxdWVOdWxsc05vdERpc3RpbmN0LAogCQkJ CQkJCQkJCQkJICBpbnQgd29ya01lbSwgU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZSwKIAkJCQkJ CQkJCQkJCSAgaW50IHNvcnRvcHQpOwogZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRf YmVnaW5faW5kZXhfYnJpbihpbnQgd29ya01lbSwgU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZSwK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYW11dGlscy5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CmluZGV4IDdhYjYxMTNjNjE5Li45MDY5 ZTA4MmNhNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CkBAIC03Miw3ICs3 Miw3IEBAIHNlbGVjdCBwcm9wLAogIGJpdG1hcF9zY2FuICAgICAgICB8ICAgIHwgdCAgICAgfCAK ICBiYWNrd2FyZF9zY2FuICAgICAgfCAgICB8IGYgICAgIHwgCiAgY2FuX29yZGVyICAgICAgICAg IHwgZiAgfCAgICAgICB8IAotIGNhbl91bmlxdWUgICAgICAgICB8IGYgIHwgICAgICAgfCAKKyBj YW5fdW5pcXVlICAgICAgICAgfCB0ICB8ICAgICAgIHwgCiAgY2FuX211bHRpX2NvbCAgICAgIHwg dCAgfCAgICAgICB8IAogIGNhbl9leGNsdWRlICAgICAgICB8IHQgIHwgICAgICAgfCAKICBjYW5f aW5jbHVkZSAgICAgICAgfCB0ICB8ICAgICAgIHwgCkBAIC0xNTYsNyArMTU2LDcgQEAgc2VsZWN0 IGFtbmFtZSwgcHJvcCwgcGdfaW5kZXhhbV9oYXNfcHJvcGVydHkoYS5vaWQsIHByb3ApIGFzIHAK ICBnaW4gICAgfCBjYW5faW5jbHVkZSAgIHwgZgogIGdpbiAgICB8IGJvZ3VzICAgICAgICAgfCAK ICBnaXN0ICAgfCBjYW5fb3JkZXIgICAgIHwgZgotIGdpc3QgICB8IGNhbl91bmlxdWUgICAgfCBm CisgZ2lzdCAgIHwgY2FuX3VuaXF1ZSAgICB8IHQKICBnaXN0ICAgfCBjYW5fbXVsdGlfY29sIHwg dAogIGdpc3QgICB8IGNhbl9leGNsdWRlICAgfCB0CiAgZ2lzdCAgIHwgY2FuX2luY2x1ZGUgICB8 IHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lzdC5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0CmluZGV4IGM3NWJiYjIzYjZlLi42MGU1ZWI3 YzQwNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9naXN0Lm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0CkBAIC0zOTAsNiArMzkwLDM4IEBA IEVSUk9SOiAgbG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGlu ZGV4LW9ubHkgc2NhbnMKIC0tIEZvcmNlIGFuIGluZGV4IGJ1aWxkIHVzaW5nIGJ1ZmZlcmluZy4K IGNyZWF0ZSBpbmRleCBnaXN0X3RibF9ib3hfaW5kZXhfZm9yY2luZ19idWZmZXJpbmcgb24gZ2lz dF90YmwgdXNpbmcgZ2lzdCAocCkKICAgd2l0aCAoYnVmZmVyaW5nPW9uLCBmaWxsZmFjdG9yPTUw KTsKKy0tIGNyZWF0ZSB1bmlxdWUgaW5kZXhlcworY3JlYXRlIHRhYmxlIGdpc3Rfcm5ndGJsIChp ZCBpbnQ0cmFuZ2UpOworaW5zZXJ0IGludG8gZ2lzdF9ybmd0YmwgdmFsdWVzICgnWzEsMiknKSwg KCdbMiwzKScpOyAtLSBva2F5CitjcmVhdGUgdW5pcXVlIGluZGV4IHVxX2dpc3Rfcm5ndGJsIG9u IGdpc3Rfcm5ndGJsIHVzaW5nIGdpc3QgKGlkKTsKK2luc2VydCBpbnRvIGdpc3Rfcm5ndGJsIHZh bHVlcyAoJ1szLDQpJyksICgnWzQsNSknKTsgLS0gb2theQorXGQgZ2lzdF9ybmd0YmwKKyAgICAg ICAgICAgICBUYWJsZSAicHVibGljLmdpc3Rfcm5ndGJsIgorIENvbHVtbiB8ICAgVHlwZSAgICB8 IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgaWQgICAgIHwgaW50NHJhbmdlIHwgICAg ICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgInVxX2dpc3Rfcm5ndGJsIiBVTklR VUUsIGdpc3QgKGlkKQorCitzZWxlY3QgcGdfZ2V0X2luZGV4ZGVmKCd1cV9naXN0X3JuZ3RibCc6 OnJlZ2NsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2luZGV4ZGVm ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBVTklRVUUgSU5ERVggdXFfZ2lzdF9ybmd0YmwgT04gcHVibGljLmdpc3Rfcm5ndGJsIFVTSU5H IGdpc3QgKGlkKQorKDEgcm93KQorCistLSBlbmZvcmNlZCBvbiBidWlsZAorZHJvcCBpbmRleCB1 cV9naXN0X3JuZ3RibDsKK2luc2VydCBpbnRvIGdpc3Rfcm5ndGJsIHZhbHVlcyAoJ1sxLDIpJyk7 CitjcmVhdGUgdW5pcXVlIGluZGV4IHVxX2dpc3Rfcm5ndGJsIG9uIGdpc3Rfcm5ndGJsIHVzaW5n IGdpc3QgKGlkKTsgLS0gZmFpbAorRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRl eCAidXFfZ2lzdF9ybmd0YmwiCitERVRBSUw6ICBLZXkgKGlkKT0oWzEsMikpIGlzIGR1cGxpY2F0 ZWQuCit0cnVuY2F0ZSBnaXN0X3JuZ3RibDsKKy0tIGVuZm9yY2VkIG9uIGluc2VydAorY3JlYXRl IHVuaXF1ZSBpbmRleCB1cV9naXN0X3JuZ3RibCBvbiBnaXN0X3JuZ3RibCB1c2luZyBnaXN0IChp ZCk7CitpbnNlcnQgaW50byBnaXN0X3JuZ3RibCB2YWx1ZXMgKCdbMSwyKScpLCAoJ1syLDMpJyk7 IC0tIG9rYXkKK2luc2VydCBpbnRvIGdpc3Rfcm5ndGJsIHZhbHVlcyAoJ1sxLDIpJyk7IC0tIGZh aWwKK0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWlu dCAidXFfZ2lzdF9ybmd0YmwiCitERVRBSUw6ICBLZXkgKGlkKT0oWzEsMikpIGFscmVhZHkgZXhp c3RzLgogLS0gQ2xlYW4gdXAKIHJlc2V0IGVuYWJsZV9zZXFzY2FuOwogcmVzZXQgZW5hYmxlX2Jp dG1hcHNjYW47CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpdGhvdXRf b3ZlcmxhcHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRob3V0X292ZXJsYXBz Lm91dAppbmRleCBmMzE0NGJkYzM5Yy4uZWY0NGVjNmI1MWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0aG91dF9vdmVybGFwcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC93aXRob3V0X292ZXJsYXBzLm91dApAQCAtNjQxLDcgKzY0MSw3IEBAIEJF R0lOOwogICBJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmcgKGlkLCB2YWxpZF9hdCkgVkFMVUVT ICgnWzEsMiknLCBkYXRlbXVsdGlyYW5nZShkYXRlcmFuZ2UoJzIwMTgtMDEtMDEnLCAnMjAxOC0w MS0wNScpKSk7CiAgIEFMVEVSIFRBQkxFIHRlbXBvcmFsX21sdHJuZyBBREQgQ09OU1RSQUlOVCB0 ZW1wb3JhbF9tbHRybmdfcGsgUFJJTUFSWSBLRVkgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJM QVBTKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSBleGNsdXNpb24gY29uc3RyYWludCAidGVt cG9yYWxfbWx0cm5nX3BrIgotREVUQUlMOiAgS2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwge1sy MDE4LTAxLTAyLDIwMTgtMDItMDMpfSkgY29uZmxpY3RzIHdpdGgga2V5IChpZCwgdmFsaWRfYXQp PShbMSwyKSwge1syMDE4LTAxLTAxLDIwMTgtMDEtMDUpfSkuCitERVRBSUw6ICBLZXkgKGlkLCB2 YWxpZF9hdCk9KFsxLDIpLCB7WzIwMTgtMDEtMDEsMjAxOC0wMS0wNSl9KSBjb25mbGljdHMgd2l0 aCBrZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCB7WzIwMTgtMDEtMDIsMjAxOC0wMi0wMyl9KS4K IFJPTExCQUNLOwogLS0gcmVqZWN0cyBlbXB0eToKIEJFR0lOOwpAQCAtNzY2LDcgKzc2Niw3IEBA IEJFR0lOOwogICBJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmczIChpZCwgdmFsaWRfYXQpIFZB TFVFUyAoJ1sxLDIpJywgZGF0ZW11bHRpcmFuZ2UoZGF0ZXJhbmdlKCcyMDE4LTAxLTAxJywgJzIw MTgtMDEtMDUnKSkpOwogICBBTFRFUiBUQUJMRSB0ZW1wb3JhbF9tbHRybmczIEFERCBDT05TVFJB SU5UIHRlbXBvcmFsX21sdHJuZzNfdXEgVU5JUVVFIChpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVS TEFQUyk7CiBFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgZXhjbHVzaW9uIGNvbnN0cmFpbnQgInRl bXBvcmFsX21sdHJuZzNfdXEiCi1ERVRBSUw6ICBLZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCB7 WzIwMTgtMDEtMDIsMjAxOC0wMi0wMyl9KSBjb25mbGljdHMgd2l0aCBrZXkgKGlkLCB2YWxpZF9h dCk9KFsxLDIpLCB7WzIwMTgtMDEtMDEsMjAxOC0wMS0wNSl9KS4KK0RFVEFJTDogIEtleSAoaWQs IHZhbGlkX2F0KT0oWzEsMiksIHtbMjAxOC0wMS0wMSwyMDE4LTAxLTA1KX0pIGNvbmZsaWN0cyB3 aXRoIGtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIHtbMjAxOC0wMS0wMiwyMDE4LTAyLTAzKX0p LgogUk9MTEJBQ0s7CiAtLSByZWplY3RzIGVtcHR5OgogQkVHSU47CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9naXN0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dpc3Quc3Fs CmluZGV4IDZmMWZjNjVmMTI4Li5jODNjNmYzYzc0MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvZ2lzdC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwKQEAg LTE3Myw2ICsxNzMsMjMgQEAgc2VsZWN0IHAgZnJvbSBnaXN0X3RibCBvcmRlciBieSBjaXJjbGUo cCwxKSA8LT4gcG9pbnQoMCwwKSBsaW1pdCAxOwogY3JlYXRlIGluZGV4IGdpc3RfdGJsX2JveF9p bmRleF9mb3JjaW5nX2J1ZmZlcmluZyBvbiBnaXN0X3RibCB1c2luZyBnaXN0IChwKQogICB3aXRo IChidWZmZXJpbmc9b24sIGZpbGxmYWN0b3I9NTApOwogCistLSBjcmVhdGUgdW5pcXVlIGluZGV4 ZXMKK2NyZWF0ZSB0YWJsZSBnaXN0X3JuZ3RibCAoaWQgaW50NHJhbmdlKTsKK2luc2VydCBpbnRv IGdpc3Rfcm5ndGJsIHZhbHVlcyAoJ1sxLDIpJyksICgnWzIsMyknKTsgLS0gb2theQorY3JlYXRl IHVuaXF1ZSBpbmRleCB1cV9naXN0X3JuZ3RibCBvbiBnaXN0X3JuZ3RibCB1c2luZyBnaXN0IChp ZCk7CitpbnNlcnQgaW50byBnaXN0X3JuZ3RibCB2YWx1ZXMgKCdbMyw0KScpLCAoJ1s0LDUpJyk7 IC0tIG9rYXkKK1xkIGdpc3Rfcm5ndGJsCitzZWxlY3QgcGdfZ2V0X2luZGV4ZGVmKCd1cV9naXN0 X3JuZ3RibCc6OnJlZ2NsYXNzKTsKKy0tIGVuZm9yY2VkIG9uIGJ1aWxkCitkcm9wIGluZGV4IHVx X2dpc3Rfcm5ndGJsOworaW5zZXJ0IGludG8gZ2lzdF9ybmd0YmwgdmFsdWVzICgnWzEsMiknKTsK K2NyZWF0ZSB1bmlxdWUgaW5kZXggdXFfZ2lzdF9ybmd0Ymwgb24gZ2lzdF9ybmd0YmwgdXNpbmcg Z2lzdCAoaWQpOyAtLSBmYWlsCit0cnVuY2F0ZSBnaXN0X3JuZ3RibDsKKy0tIGVuZm9yY2VkIG9u IGluc2VydAorY3JlYXRlIHVuaXF1ZSBpbmRleCB1cV9naXN0X3JuZ3RibCBvbiBnaXN0X3JuZ3Ri bCB1c2luZyBnaXN0IChpZCk7CitpbnNlcnQgaW50byBnaXN0X3JuZ3RibCB2YWx1ZXMgKCdbMSwy KScpLCAoJ1syLDMpJyk7IC0tIG9rYXkKK2luc2VydCBpbnRvIGdpc3Rfcm5ndGJsIHZhbHVlcyAo J1sxLDIpJyk7IC0tIGZhaWwKKwogLS0gQ2xlYW4gdXAKIHJlc2V0IGVuYWJsZV9zZXFzY2FuOwog cmVzZXQgZW5hYmxlX2JpdG1hcHNjYW47Ci0tIAoyLjQ3LjMKCg== --0000000000003069420647475f9c--