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 1qWA0r-002JT6-WF for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Aug 2023 06:28:14 +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 1qWA0q-003n1I-KZ for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Aug 2023 06:28:12 +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 1qWA0p-003n15-UW for pgsql-hackers@lists.postgresql.org; Wed, 16 Aug 2023 06:28:12 +0000 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qWA0n-000Ocq-Ch for pgsql-hackers@postgresql.org; Wed, 16 Aug 2023 06:28:10 +0000 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-56c4c4e822eso4558451eaf.3 for ; Tue, 15 Aug 2023 23:28:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692167289; x=1692772089; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7w0pAwp0dyZXeiHdIWgHxHyHG4DOvXKxgdq5/ELiZF0=; b=IYz7MAIv3Sgp9AE16czq6lcvEtIVKYGmQGzCxoMuZNZR7hK61jbzNmLQ2dPvxgRFGj x1HMi79gy8hjDeO0mFkPmmZfL8TpLWTvF/Pt/a+0gVNwJRe8+Fh/Yo7NTpunM1sLMnVf tZZS2rYhJ3QaR/mUIVv0ingIYtuar8h6uDhQD6K5sD0pR4bkKl6gXo8IgAmnDJuyjo9J qdpI1/BWiX1XEhu9UJSIszPYP7Eib7FP1Z9V10guWgp+4vnwKGFNKb07Jm0eDFykecV4 1ZzxMaIAla5hqfk77xtZzxeA+kTWcsorU34So/jb5h8alJmS8vtsYsvON1T1CqloxxwM 9ZRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692167289; x=1692772089; 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=7w0pAwp0dyZXeiHdIWgHxHyHG4DOvXKxgdq5/ELiZF0=; b=W1USwW2Ra6LY7iGCfz7SZ28fnXRZfJDdPdWtzjHrEmurdi8YJanQw5AFOk10QvolTz HNidueCsMZMtreYsGVHWVEkBV663psvaO3q4NtUX88rlQIarok+4YgD8hw5cMP+3p+lA q0K1kQDPR7kYo9/WNMLbB5QyeqwdUIvSi67SQJbGKkw7jm2MScQ71G+yD7erxGneQ0L3 L6LGVmu0o9UijuV2ov0GyJ9QLM9t1xWULbRXbK9DfZ79+NoXqXdtNbq5mZPHlmwHe9Yn 2fNlid4DDix3BePhw1uWENvCjgbn7mi9i8L3hRrWgtLnSUdtUZsYuyIJoOipc9zZnQbZ IJ3w== X-Gm-Message-State: AOJu0YwbZZqW3xn+WDa1xgL3aSfEUkYgxdP4uz+7jN96Td8LCxetQ9P9 KHQ8no0E/LJW1O72LyzNRd2x9PURefLKyvFYrpc= X-Google-Smtp-Source: AGHT+IF+lNtkw42k+KsSIHkKD9oKqBylrVCNzMh+YmRhBzV8k1sMVh6oT1I9/QFT8PkKCi77kVzzLxfmRQ4S6g1sIO8= X-Received: by 2002:a4a:3105:0:b0:566:f052:696d with SMTP id k5-20020a4a3105000000b00566f052696dmr1079132ooa.6.1692167288722; Tue, 15 Aug 2023 23:28:08 -0700 (PDT) MIME-Version: 1.0 References: <3507485.1691090027@sss.pgh.pa.us> <900892914fdc3f477b101d699efb40e0@anastigmatix.net> <903341.1692022214@sss.pgh.pa.us> In-Reply-To: From: Andy Fan Date: Wed, 16 Aug 2023 14:27:57 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Pavel Stehule Cc: Tom Lane , Chapman Flack , jian he , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000025778f06030466af" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000025778f06030466af Content-Type: multipart/alternative; boundary="00000000000025778b06030466ad" --00000000000025778b06030466ad Content-Type: text/plain; charset="UTF-8" update with the correct patch.. --00000000000025778b06030466ad Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
update with the correct patch..=C2=A0
--00000000000025778b06030466ad-- --00000000000025778f06030466af Content-Type: application/octet-stream; name="v8-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Disposition: attachment; filename="v8-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lldcothh0 RnJvbSA0NWIyZTNiNzlmNzg3ZjQwMWQ3NDI2NzQzNzU2YWQwNmI4MWNjZmIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBXZWQsIDE2IEF1ZyAyMDIzIDE0OjA0OjI3ICswODAwClN1YmplY3Q6IFtQQVRDSCB2OF0g b3B0aW1pemUgY2FzdGluZyBqc29uYiB0byBhIGdpdmVuIHR5cGUuCgpQcmV2aW91c2x5IGFmdGVy IHdlIGdldCBhIEpzb25iVmFsdWUsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0bwpKc29uYiBmaXJz dCB0aGVuIGNhc3QgdGhlIEpzb25iIHRvIHRoZSBnaXZlbiB0eXBlLiBJbiB0aGlzIHBhdGNoLAp3 ZSBjb3ZlcnQgdGhlIEpzb25iVmFsdWUgdG8gdGhlIGRlc2lyZWQgdHlwZSBkaXJlY3RseS4KLS0t CiBzcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICB8ICAzMCArKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgfCAxNzYgKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgfCAxMTQgKysrKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCAgICB8ICAgMiAr LQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgMzIgKysrLS0KIHNyYy9p bmNsdWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxz L2pzb25iLmggICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bmIub3V0IHwgMTYwICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iLnNxbCAgICAgIHwgIDQzICsrKystLS0KIDkgZmlsZXMgY2hhbmdlZCwgNDI5IGlu c2VydGlvbnMoKyksIDEzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IDBl N2U2ZTQ2ZDk0Li45Y2I5MTc4ZjAxYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFr ZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTIwLDYgKzIw LDcgQEAKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rl RnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9lcnJjb2Rlcy5oIgorI2luY2x1ZGUgInV0aWxzL2Zt Z3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAogCkBAIC0zNTIsNiAr MzUzLDM1IEBAIG1ha2VOdWxsQ29uc3QoT2lkIGNvbnN0dHlwZSwgaW50MzIgY29uc3R0eXBtb2Qs IE9pZCBjb25zdGNvbGxpZCkKIAkJCQkJIHR5cEJ5VmFsKTsKIH0KIAorLyoKKyAqIG1ha2VEdW1t eUNvbnN0CisgKgkgY3JlYXRlIGEgQ29uc3Qgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQgdHlwZS90 eXBtb2QuCisgKgorICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgdG8gY3JlYXRlIGEg Q29uc3Qgd2hpY2ggb25seSB0aGUKKyAqIHR5cGUgaXMgaW50ZXJlc3RpbmcgYnV0IG1ha2Ugc3Vy ZSB0aGUgdmFsdWUgaXMgYWNjZXNzaWJsZS4KKyAqLworQ29uc3QgKgorbWFrZUR1bW15Q29uc3Qo T2lkIGNvbnN0dHlwZSwgaW50MzIgY29uc3R0eXBtb2QsIE9pZCBjb25zdGNvbGxpZCkKK3sKKwlp bnQxNgkJdHlwTGVuOworCWJvb2wJCXR5cEJ5VmFsOworCUNvbnN0CQkqYzsKKwlEYXR1bQkJdmFs ID0gMDsKKworCisJZ2V0X3R5cGxlbmJ5dmFsKGNvbnN0dHlwZSwgJnR5cExlbiwgJnR5cEJ5VmFs KTsKKworCWlmIChjb25zdHR5cGUgPT0gTlVNRVJJQ09JRCkKKwkJdmFsID0gRGlyZWN0RnVuY3Rp b25DYWxsMShudW1lcmljX2luLCBDU3RyaW5nR2V0RGF0dW0oIjAiKSk7CisJZWxzZSBpZiAoIXR5 cEJ5VmFsKQorCQllbG9nKEVSUk9SLCAiY3JlYXRlIGR1bW15IGNvbnN0IGZvciB0eXBlICV1IGlz IG5vdCBzdXBwb3J0ZWQuIiwgY29uc3R0eXBlKTsKKworCS8qIFhYWDogaGVyZSBJIGFzc3VtZSBj b25zdHZhbHVlPTAgaXMgYWNjZXNzaWJsZSBmb3IgY29uc3RieXZhbC4qLworCWMgPSBtYWtlQ29u c3QoY29uc3R0eXBlLCBjb25zdHR5cG1vZCwgMCwgKGludCkgdHlwTGVuLCB2YWwsIGZhbHNlLCB0 eXBCeVZhbCk7CisKKwlyZXR1cm4gYzsKK30KKwogLyoKICAqIG1ha2VCb29sQ29uc3QgLQogICoJ ICBjcmVhdGVzIGEgQ29uc3Qgbm9kZSByZXByZXNlbnRpbmcgYSBib29sZWFuIHZhbHVlIChjYW4g YmUgTlVMTCB0b28pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCmluZGV4IDk3ODE4NTJiMGNiLi5jY2Q2ZTZj YzAzOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKQEAgLTE3LDExICsxNywxNCBAQAogI2luY2x1ZGUg ImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJu b2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAi dXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGV0aW1lLmgiCisjaW5jbHVkZSAidXRp bHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbmIuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uZnVuY3MuaCIKQEAgLTIwMzgsNiArMjA0MSwx NzkgQEAgY2Fubm90Q2FzdEpzb25iVmFsdWUoZW51bSBqYnZUeXBlIHR5cGUsIGNvbnN0IGNoYXIg KnNxbHR5cGUpCiAJZWxvZyhFUlJPUiwgInVua25vd24ganNvbmIgdHlwZTogJWQiLCAoaW50KSB0 eXBlKTsKIH0KIAorc3RhdGljIGJvb2wKK2pzb25iX2Nhc3RfaXNfb3B0aW1pemVkKE9pZCB0YXJn ZXRfdHlwZSkKK3sKKwlzd2l0Y2godGFyZ2V0X3R5cGUpCisJeworCQljYXNlIE5VTUVSSUNPSUQ6 CisJCWNhc2UgQk9PTE9JRDoKKwkJY2FzZSBJTlQyT0lEOgorCQljYXNlIElOVDRPSUQ6CisJCWNh c2UgSU5UOE9JRDoKKwkJY2FzZSBGTE9BVDRPSUQ6CisJCWNhc2UgRkxPQVQ4T0lEOgorCQkJcmV0 dXJuIHRydWU7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitEYXR1bQor anNvbmJfY2FzdF9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVx ID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3Vw cG9ydFJlcXVlc3RTaW1wbGlmeSkpCisJeworCQlTdXBwb3J0UmVxdWVzdFNpbXBsaWZ5ICpyZXEg PSAoU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSAqKSByYXdyZXE7CisJCUZ1bmNFeHByCSpmZXhwciA9 IHBhbGxvYyhzaXplb2YoRnVuY0V4cHIpKTsKKwkJT3BFeHByCQkqb3BleHByOworCQlPaWQJCQlu ZXdfZnVuY19pZCA9IEludmFsaWRPaWQ7CisKKwkJbWVtY3B5KGZleHByLCByZXEtPmZjYWxsLCBz aXplb2YoRnVuY0V4cHIpKTsKKworCQlvcGV4cHIgPSAoT3BFeHByICopIGxpbml0aWFsKGZleHBy LT5hcmdzKTsKKworCQlpZiAoIUlzQShvcGV4cHIsIE9wRXhwcikgfHwKKwkJCSFqc29uYl9jYXN0 X2lzX29wdGltaXplZChmZXhwci0+ZnVuY3Jlc3VsdHR5cGUpKQorCQl7CisJCQkvKiBub3QgdGhl IGRlc2lyZWQgcGF0dGVybi4gKi8KKwkJCVBHX1JFVFVSTl9QT0lOVEVSKGZleHByKTsKKwkJfQor CisJCWlmIChvcGV4cHItPm9wZnVuY2lkICA9PSBGX0pTT05CX09CSkVDVF9GSUVMRCkKKwkJCW5l d19mdW5jX2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTERfVFlQRTsKKwkJZWxzZSBpZiAob3BleHBy LT5vcGZ1bmNpZCA9PSBGX0pTT05CX0FSUkFZX0VMRU1FTlQpCisJCQluZXdfZnVuY19pZCA9IEZf SlNPTkJfQVJSQVlfRUxFTUVOVF9UWVBFOworCQllbHNlIGlmIChvcGV4cHItPm9wZnVuY2lkID09 IEZfSlNPTkJfRVhUUkFDVF9QQVRIKQorCQkJbmV3X2Z1bmNfaWQgPSBGX0pTT05CX0VYVFJBQ1Rf UEFUSF9UWVBFOworCisJCWlmIChPaWRJc1ZhbGlkKG5ld19mdW5jX2lkKSkKKwkJeworCQkJQ29u c3QJKnRhcmdldCA9ICBtYWtlRHVtbXlDb25zdChmZXhwci0+ZnVuY3Jlc3VsdHR5cGUsIDAsIElu dmFsaWRPaWQpOworCQkJZmV4cHItPmZ1bmNpZCA9IG5ld19mdW5jX2lkOworCQkJZmV4cHItPmFy Z3MgPSBvcGV4cHItPmFyZ3M7CisJCQlmZXhwci0+YXJncyA9IGxhcHBlbmQoZmV4cHItPmFyZ3Ms IHRhcmdldCk7CisJCX0KKworCQlQR19SRVRVUk5fUE9JTlRFUihmZXhwcik7CisJfQorCisJUEdf UkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9CisKK0RhdHVtCitjYXN0X2pzb25idmFsdWVfdG9fdHlw ZShKc29uYlZhbHVlICp2LCBPaWQgdGFyZ2V0T2lkKQoreworCXN3aXRjaCh0YXJnZXRPaWQpCisJ eworCQlEYXR1bQlyZXRWYWx1ZTsKKworCQljYXNlIEJPT0xPSUQ6CisJCQlpZiAodi0+dHlwZSAh PSBqYnZCb29sKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJib29sIik7CisJ CQlQR19SRVRVUk5fQk9PTCh2LT52YWwuYm9vbGVhbik7CisKKwkJY2FzZSBOVU1FUklDT0lEOgor CQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQljYW5ub3RDYXN0SnNvbmJWYWx1ZSh2 LT50eXBlLCAibnVtZXJpYyIpOworCQkJUEdfUkVUVVJOX05VTUVSSUModi0+dmFsLm51bWVyaWMp OworCQljYXNlIElOVDJPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWNh bm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJzbWFsbGludCIpOworCQkJcmV0VmFsdWUgPSBE aXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50MiwKKwkJCQkJCQkJCQkgICBOdW1lcmljR2V0 RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1ZSk7CisJ CWNhc2UgSU5UNE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJY2Fubm90 Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImludGVnZXIiKTsKKwkJCXJldFZhbHVlID0gRGlyZWN0 RnVuY3Rpb25DYWxsMShudW1lcmljX2ludDQsCisJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVt KHYtPnZhbC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUpOworCisJCWNh c2UgSU5UOE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJY2Fubm90Q2Fz dEpzb25iVmFsdWUodi0+dHlwZSwgImJpZ2ludCIpOworCQkJcmV0VmFsdWUgPSBEaXJlY3RGdW5j dGlvbkNhbGwxKG51bWVyaWNfaW50OCwKKwkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0odi0+ dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1ZSk7CisKKwkJY2FzZSBG TE9BVDRPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWNhbm5vdENhc3RK c29uYlZhbHVlKHYtPnR5cGUsICJyZWFsIik7CisJCQlyZXRWYWx1ZSA9IERpcmVjdEZ1bmN0aW9u Q2FsbDEobnVtZXJpY19mbG9hdDQsCisJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKHYtPnZh bC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUpOworCisJCWNhc2UgRkxP QVQ4T0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQljYW5ub3RDYXN0SnNv bmJWYWx1ZSh2LT50eXBlLCAiZG91YmxlIHByZWNpc2lvbiIpOworCQkJcmV0VmFsdWUgPSBEaXJl Y3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfZmxvYXQ4LAorCQkJCQkJCQkJCSAgIE51bWVyaWNHZXRE YXR1bSh2LT52YWwubnVtZXJpYykpOworCQkJUEdfUkVUVVJOX0RBVFVNKHJldFZhbHVlKTsKKwor CQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCVBHX1JFVFVS Tl9QT0lOVEVSKE5VTEwpOworfQorCitEYXR1bQoranNvbmJfb2JqZWN0X2ZpZWxkX3R5cGUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlKc29uYgkgICAqamIgPSBQR19HRVRBUkdfSlNPTkJfUCgwKTsK Kwl0ZXh0CSAgICprZXkgPSBQR19HRVRBUkdfVEVYVF9QUCgxKTsKKwlPaWQJCQl0YXJnZXRPaWQg PSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAyKTsKKworCUpzb25iVmFsdWUg KnY7CisJSnNvbmJWYWx1ZQl2YnVmOworCisJaWYgKCFKQl9ST09UX0lTX09CSkVDVChqYikpCisJ CVBHX1JFVFVSTl9OVUxMKCk7CisKKwl2ID0gZ2V0S2V5SnNvblZhbHVlRnJvbUNvbnRhaW5lcigm amItPnJvb3QsCisJCQkJCQkJCQkgVkFSREFUQV9BTlkoa2V5KSwKKwkJCQkJCQkJCSBWQVJTSVpF X0FOWV9FWEhEUihrZXkpLAorCQkJCQkJCQkJICZ2YnVmKTsKKworCWlmICh2ID09IE5VTEwpCisJ CVBHX1JFVFVSTl9OVUxMKCk7CisKKwlyZXR1cm4gY2FzdF9qc29uYnZhbHVlX3RvX3R5cGUodiwg dGFyZ2V0T2lkKTsKK30KKworRGF0dW0KK2pzb25iX2FycmF5X2VsZW1lbnRfdHlwZShQR19GVU5D VElPTl9BUkdTKQoreworCUpzb25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOworCWlu dAkJCWVsZW1lbnQgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJT2lkCQkJdGFyZ2V0T2lkID0gZ2V0 X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywgMik7CisJSnNvbmJWYWx1ZSAqdjsKKwor CWlmICghSkJfUk9PVF9JU19BUlJBWShqYikpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkvKiBI YW5kbGUgbmVnYXRpdmUgc3Vic2NyaXB0ICovCisJaWYgKGVsZW1lbnQgPCAwKQorCXsKKwkJdWlu dDMyCQluZWxlbWVudHMgPSBKQl9ST09UX0NPVU5UKGpiKTsKKworCQlpZiAoLWVsZW1lbnQgPiBu ZWxlbWVudHMpCisJCQlQR19SRVRVUk5fTlVMTCgpOworCQllbHNlCisJCQllbGVtZW50ICs9IG5l bGVtZW50czsKKwl9CisKKwl2ID0gZ2V0SXRoSnNvbmJWYWx1ZUZyb21Db250YWluZXIoJmpiLT5y b290LCBlbGVtZW50KTsKKwlpZiAodiA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJ cmV0dXJuIGNhc3RfanNvbmJ2YWx1ZV90b190eXBlKHYsIHRhcmdldE9pZCk7Cit9CisKIERhdHVt CiBqc29uYl9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNz LmMKaW5kZXggYTRiZmE1ZTQwNDAuLjNiMTIwYWI5NTIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25m dW5jcy5jCkBAIC00OTIsNiArNDkyLDcgQEAgc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFu c2Zvcm1fc3RyaW5nX3ZhbHVlc19vYmplY3RfZmllbGRfc3RhcnQodm9pZCAqc3RhdGUKIHN0YXRp YyBKc29uUGFyc2VFcnJvclR5cGUgdHJhbnNmb3JtX3N0cmluZ192YWx1ZXNfYXJyYXlfZWxlbWVu dF9zdGFydCh2b2lkICpzdGF0ZSwgYm9vbCBpc251bGwpOwogc3RhdGljIEpzb25QYXJzZUVycm9y VHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRv a2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSk7CiAKK3N0YXRpYyBKc29uYlZhbHVlICpqc29u Yl9nZXRfanNvbmJ2YWx1ZShKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wg KmlzbnVsbCk7CiAKIC8qCiAgKiBwZ19wYXJzZV9qc29uX29yX2VycnNhdmUKQEAgLTE0NzMsNiAr MTQ3NCwzOSBAQCBnZXRfc2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2Vu VHlwZSB0b2tlbnR5cGUpCiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsKIH0KIAorRGF0dW0KK2pzb25i X2V4dHJhY3RfcGF0aF90eXBlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmIJICAgKmpiID0g UEdfR0VUQVJHX0pTT05CX1AoMCk7CisJQXJyYXlUeXBlICAqcGF0aCA9IFBHX0dFVEFSR19BUlJB WVRZUEVfUCgxKTsKKwlPaWQJCQl0YXJnZXRPaWQgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5m by0+ZmxpbmZvLCAyKTsKKwlKc29uYlZhbHVlICp2OworCisJRGF0dW0JICAgKnBhdGh0ZXh0Owor CWJvb2wJICAgKnBhdGhudWxsczsKKwlib29sCQlpc251bGwgPSBmYWxzZTsKKwlpbnQJCQlucGF0 aDsKKworCS8qCisJICogSWYgdGhlIGFycmF5IGNvbnRhaW5zIGFueSBudWxsIGVsZW1lbnRzLCBy ZXR1cm4gTlVMTCwgb24gdGhlIGdyb3VuZHMKKwkgKiB0aGF0IHlvdSdkIGhhdmUgZ290dGVuIE5V TEwgaWYgYW55IFJIUyB2YWx1ZSB3ZXJlIE5VTEwgaW4gYSBuZXN0ZWQKKwkgKiBzZXJpZXMgb2Yg YXBwbGljYXRpb25zIG9mIHRoZSAtPiBvcGVyYXRvci4gIChOb3RlOiBiZWNhdXNlIHdlIGFsc28K KwkgKiByZXR1cm4gTlVMTCBmb3IgZXJyb3IgY2FzZXMgc3VjaCBhcyBuby1zdWNoLWZpZWxkLCB0 aGlzIGlzIHRydWUKKwkgKiByZWdhcmRsZXNzIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzdCBv ZiB0aGUgYXJyYXkuKQorCSAqLworCWlmIChhcnJheV9jb250YWluc19udWxscyhwYXRoKSkKKwkJ UEdfUkVUVVJOX05VTEwoKTsKKworCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4ocGF0aCwgVEVY VE9JRCwgJnBhdGh0ZXh0LCAmcGF0aG51bGxzLCAmbnBhdGgpOworCisJdiA9IGpzb25iX2dldF9q c29uYnZhbHVlKGpiLCBwYXRodGV4dCwgbnBhdGgsICZpc251bGwpOworCisJaWYgKGlzbnVsbCkK KwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXJldHVybiBjYXN0X2pzb25idmFsdWVfdG9fdHlwZSh2 LCB0YXJnZXRPaWQpOworfQorCiBEYXR1bQoganNvbmJfZXh0cmFjdF9wYXRoKFBHX0ZVTkNUSU9O X0FSR1MpCiB7CkBAIC0xNTE2LDUyICsxNTUwLDM2IEBAIGdldF9qc29uYl9wYXRoX2FsbChGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBhc190ZXh0KQogCQlQR19SRVRVUk5fREFUVU0ocmVz KTsKIH0KIAotRGF0dW0KLWpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgs IGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQpCisKK3N0YXRpYyBKc29uYlZh bHVlICoKK2pzb25iX2dldF9qc29uYnZhbHVlKEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBu cGF0aCwgYm9vbCAqaXNudWxsKQogeworCWJvb2wgaGF2ZV9vYmplY3QgPSBmYWxzZSwgaGF2ZV9h cnJheSA9IGZhbHNlOwogCUpzb25iQ29udGFpbmVyICpjb250YWluZXIgPSAmamItPnJvb3Q7CisJ aW50IGk7CiAJSnNvbmJWYWx1ZSAqamJ2cCA9IE5VTEw7Ci0JaW50CQkJaTsKLQlib29sCQloYXZl X29iamVjdCA9IGZhbHNlLAotCQkJCWhhdmVfYXJyYXkgPSBmYWxzZTsKIAotCSppc251bGwgPSBm YWxzZTsKKwkvKgorCSAqIElmIHRoZSBhcnJheSBpcyBlbXB0eSwgcmV0dXJuIHRoZSBlbnRpcmUg TEhTIG9iamVjdCwgb24gdGhlIGdyb3VuZHMKKwkgKiB0aGF0IHdlIHNob3VsZCBkbyB6ZXJvIGZp ZWxkIG9yIGVsZW1lbnQgZXh0cmFjdGlvbnMuCisJICovCisJaWYgKG5wYXRoIDw9IDApCisJewor CQlKc29uYlZhbHVlICpyZXMgPSBOVUxMOworCQlpZiAoSkJfUk9PVF9JU19BUlJBWShqYikgJiYg SkJfUk9PVF9JU19TQ0FMQVIoamIpKQorCQkJcmV0dXJuIGdldEl0aEpzb25iVmFsdWVGcm9tQ29u dGFpbmVyKGNvbnRhaW5lciwgMCk7CisKKwkJLyogTkI6IHJlcyBpcyBhIGpidkJpbmFyeSBKc29u YlZhbHVlICovCisJCXJlcyA9IHBhbGxvYzAoc2l6ZW9mKEpzb25iVmFsdWUpKTsKKwkJSnNvbmJU b0pzb25iVmFsdWUoamIsIHJlcyk7CisJCXJldHVybiByZXM7CisJfQogCiAJLyogSWRlbnRpZnkg d2hldGhlciB3ZSBoYXZlIG9iamVjdCwgYXJyYXksIG9yIHNjYWxhciBhdCB0b3AtbGV2ZWwgKi8K IAlpZiAoSkJfUk9PVF9JU19PQkpFQ1QoamIpKQogCQloYXZlX29iamVjdCA9IHRydWU7CiAJZWxz ZSBpZiAoSkJfUk9PVF9JU19BUlJBWShqYikgJiYgIUpCX1JPT1RfSVNfU0NBTEFSKGpiKSkKIAkJ aGF2ZV9hcnJheSA9IHRydWU7Ci0JZWxzZQotCXsKLQkJQXNzZXJ0KEpCX1JPT1RfSVNfQVJSQVko amIpICYmIEpCX1JPT1RfSVNfU0NBTEFSKGpiKSk7Ci0JCS8qIEV4dHJhY3QgdGhlIHNjYWxhciB2 YWx1ZSwgaWYgaXQgaXMgd2hhdCB3ZSdsbCByZXR1cm4gKi8KLQkJaWYgKG5wYXRoIDw9IDApCi0J CQlqYnZwID0gZ2V0SXRoSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCAwKTsKLQl9 Ci0KLQkvKgotCSAqIElmIHRoZSBhcnJheSBpcyBlbXB0eSwgcmV0dXJuIHRoZSBlbnRpcmUgTEhT IG9iamVjdCwgb24gdGhlIGdyb3VuZHMKLQkgKiB0aGF0IHdlIHNob3VsZCBkbyB6ZXJvIGZpZWxk IG9yIGVsZW1lbnQgZXh0cmFjdGlvbnMuICBGb3IgdGhlCi0JICogbm9uLXNjYWxhciBjYXNlIHdl IGNhbiBqdXN0IGhhbmQgYmFjayB0aGUgb2JqZWN0IHdpdGhvdXQgbXVjaCB3b3JrLiBGb3IKLQkg KiB0aGUgc2NhbGFyIGNhc2UsIGZhbGwgdGhyb3VnaCBhbmQgZGVhbCB3aXRoIHRoZSB2YWx1ZSBi ZWxvdyB0aGUgbG9vcC4KLQkgKiAoVGhpcyBpbmNvbnNpc3RlbmN5IGFyaXNlcyBiZWNhdXNlIHRo ZXJlJ3Mgbm8gZWFzeSB3YXkgdG8gZ2VuZXJhdGUgYQotCSAqIEpzb25iVmFsdWUgZGlyZWN0bHkg Zm9yIHJvb3QtbGV2ZWwgY29udGFpbmVycy4pCi0JICovCi0JaWYgKG5wYXRoIDw9IDAgJiYgamJ2 cCA9PSBOVUxMKQotCXsKLQkJaWYgKGFzX3RleHQpCi0JCXsKLQkJCXJldHVybiBQb2ludGVyR2V0 RGF0dW0oY3N0cmluZ190b190ZXh0KEpzb25iVG9DU3RyaW5nKE5VTEwsCi0JCQkJCQkJCQkJCQkJ CQkJICBjb250YWluZXIsCi0JCQkJCQkJCQkJCQkJCQkJICBWQVJTSVpFKGpiKSkpKTsKLQkJfQot CQllbHNlCi0JCXsKLQkJCS8qIG5vdCB0ZXh0IG1vZGUgLSBqdXN0IGhhbmQgYmFjayB0aGUganNv bmIgKi8KLQkJCVBHX1JFVFVSTl9KU09OQl9QKGpiKTsKLQkJfQotCX0KIAogCWZvciAoaSA9IDA7 IGkgPCBucGF0aDsgaSsrKQogCXsKQEAgLTE1ODYsNyArMTYwNCw3IEBAIGpzb25iX2dldF9lbGVt ZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29s IGFzX3RleHQpCiAJCQlpZiAoZW5kcHRyID09IGluZGV4dGV4dCB8fCAqZW5kcHRyICE9ICdcMCcg fHwgZXJybm8gIT0gMCkKIAkJCXsKIAkJCQkqaXNudWxsID0gdHJ1ZTsKLQkJCQlyZXR1cm4gUG9p bnRlckdldERhdHVtKE5VTEwpOworCQkJCXJldHVybiBOVUxMOwogCQkJfQogCiAJCQlpZiAobGlu ZGV4ID49IDApCkBAIC0xNjA3LDcgKzE2MjUsNyBAQCBqc29uYl9nZXRfZWxlbWVudChKc29uYiAq amIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0KQog CQkJCWlmIChsaW5kZXggPT0gSU5UX01JTiB8fCAtbGluZGV4ID4gbmVsZW1lbnRzKQogCQkJCXsK IAkJCQkJKmlzbnVsbCA9IHRydWU7Ci0JCQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CisJCQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJCWluZGV4ID0gbmVsZW1l bnRzICsgbGluZGV4OwpAQCAtMTYxOSwxMyArMTYzNywxMyBAQCBqc29uYl9nZXRfZWxlbWVudChK c29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190 ZXh0KQogCQl7CiAJCQkvKiBzY2FsYXIsIGV4dHJhY3Rpb24geWllbGRzIGEgbnVsbCAqLwogCQkJ KmlzbnVsbCA9IHRydWU7Ci0JCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQkJcmV0 dXJuIE5VTEw7CiAJCX0KIAogCQlpZiAoamJ2cCA9PSBOVUxMKQogCQl7CiAJCQkqaXNudWxsID0g dHJ1ZTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJCQlyZXR1cm4gTlVMTDsK IAkJfQogCQllbHNlIGlmIChpID09IG5wYXRoIC0gMSkKIAkJCWJyZWFrOwpAQCAtMTY0NCw2ICsx NjYyLDIyIEBAIGpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBu cGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQpCiAJCQloYXZlX2FycmF5ID0gZmFsc2U7 CiAJCX0KIAl9CisJcmV0dXJuIGpidnA7Cit9CisKKy8qCisgKiBSZXR1cm4ganNvbmIgZGF0dW0g b3IganNvbmItYXMtdGV4dCBkYXR1bS4KKyAqLworRGF0dW0KK2pzb25iX2dldF9lbGVtZW50KEpz b25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3Rl eHQpCit7CisJSnNvbmJWYWx1ZSAqamJ2cCA9IE5VTEw7CisJKmlzbnVsbCA9IGZhbHNlOworCisJ amJ2cCA9IGpzb25iX2dldF9qc29uYnZhbHVlKGpiLCBwYXRoLCBucGF0aCwgaXNudWxsKTsKKwor CWlmICgqaXNudWxsKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCiAJaWYgKGFz X3RleHQpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAppbmRleCBmNTA3YjQ5YmIyOC4uOGVk MDNhMjBlZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCkBAIC01Nyw2ICs1Nyw2IEBACiAg Ki8KIAogLyoJCQkJCQkJeXl5eW1tZGROICovCi0jZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwky MDIzMDcyNjEKKyNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjMwODE0MQogCiAjZW5kaWYK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDY5OTYwNzM5ODlhLi5hZjg5ZGVjN2RiOCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC00NTc1LDI1ICs0NTc1LDI2IEBACiAgIHByb25hbWUg PT4gJ3BnX2xzbicsIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICdudW1l cmljJywKICAgcHJvc3JjID0+ICdudW1lcmljX3BnX2xzbicgfSwKIAoteyBvaWQgPT4gJzM1NTYn LCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFuJywKK3sgb2lkID0+ICczNTU2Jywg ZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gYm9vbGVhbicsIHByb3N1cHBvcnQgPT4gJ2pzb25i X2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2Jvb2wnLCBwcm9yZXR0eXBlID0+ICdib29s JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9ib29sJyB9LAog eyBvaWQgPT4gJzM0NDknLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBudW1lcmljJywKLSAg cHJvbmFtZSA9PiAnbnVtZXJpYycsIHByb3JldHR5cGUgPT4gJ251bWVyaWMnLCBwcm9hcmd0eXBl cyA9PiAnanNvbmInLAorICBwcm9uYW1lID0+ICdudW1lcmljJywgcHJvc3VwcG9ydCA9PiAnanNv bmJfY2FzdF9zdXBwb3J0JywKKyAgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsIHByb2FyZ3R5cGVz ID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfbnVtZXJpYycgfSwKLXsgb2lkID0+ICcz NDUwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50MicsCit7IG9pZCA9PiAnMzQ1MCcs IGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDInLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9j YXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdpbnQyJywgcHJvcmV0dHlwZSA9PiAnaW50Mics IHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfaW50MicgfSwKLXsg b2lkID0+ICczNDUxJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50NCcsCit7IG9pZCA9 PiAnMzQ1MScsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDQnLCBwcm9zdXBwb3J0ID0+ ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdpbnQ0JywgcHJvcmV0dHlwZSA9 PiAnaW50NCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfaW50 NCcgfSwKLXsgb2lkID0+ICczNDUyJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50OCcs Cit7IG9pZCA9PiAnMzQ1MicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDgnLCBwcm9z dXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdpbnQ4JywgcHJv cmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAn anNvbmJfaW50OCcgfSwKLXsgb2lkID0+ICczNDUzJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIg dG8gZmxvYXQ0JywKK3sgb2lkID0+ICczNDUzJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8g ZmxvYXQ0JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9 PiAnZmxvYXQ0JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25i JywKICAgcHJvc3JjID0+ICdqc29uYl9mbG9hdDQnIH0sCi17IG9pZCA9PiAnMjU4MCcsIGRlc2Ny ID0+ICdjb252ZXJ0IGpzb25iIHRvIGZsb2F0OCcsCit7IG9pZCA9PiAnMjU4MCcsIGRlc2NyID0+ ICdjb252ZXJ0IGpzb25iIHRvIGZsb2F0OCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3Vw cG9ydCcsCiAgIHByb25hbWUgPT4gJ2Zsb2F0OCcsIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsIHBy b2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfZmxvYXQ4JyB9LAogCkBA IC05OTI4LDYgKzk5MjksMTMgQEAKICAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3Rl eHQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIHRleHQn LCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbiwgZmllbGRfbmFtZX0nLAogICBwcm9zcmMgPT4g J2pzb25iX29iamVjdF9maWVsZF90ZXh0JyB9LAoreyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAn cmV0dXJuIGEgZ2l2ZW4gdHlwZSBzcGVjaWZpZWQgaW4gZGVzaXJlZF90eXBlIGZyb20ganNvbmIg ZmllbGQnLAorICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfdHlwZScsIHByb3JldHR5 cGUgPT4gJ2FueWVsZW1lbnQnLAorICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgdGV4dCBhbnllbGVt ZW50JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sIGZpZWxkX25hbWUsIGRlc2lyZWRfdHlw ZX0nLAorICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9maWVsZF90eXBlJ30sCit7IG9pZCA9PiAn MzgxNCcsIGRlc2NyID0+ICdwbGFubmVyIHN1cHBvcnQgZm9yIG51bWVyaWMoanNvbmIpJywKKyAg cHJvbmFtZSA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwn LAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ2pzb25iX2Nhc3Rfc3Vw cG9ydCcgfSwKIHsgb2lkID0+ICczMjE1JywKICAgcHJvbmFtZSA9PiAnanNvbmJfYXJyYXlfZWxl bWVudCcsIHByb3JldHR5cGUgPT4gJ2pzb25iJywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIGlu dDQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbiwgZWxlbWVudF9pbmRleH0nLApAQCAtOTkz Niw2ICs5OTQ0LDEwIEBACiAgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfdGV4dCcs IHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgaW50NCcsIHBy b2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLCBlbGVtZW50X2luZGV4fScsCiAgIHByb3NyYyA9PiAn anNvbmJfYXJyYXlfZWxlbWVudF90ZXh0JyB9LAoreyBvaWQgPT4gJzQ1NDknLCBkZXNjciA9PiAn Y2FzdCBhbiBhcnJheSBlbGVtZW50IHRvIGdpdmVuIHR5cGUnLAorICBwcm9uYW1lID0+ICdqc29u Yl9hcnJheV9lbGVtZW50X3R5cGUnLCBwcm9yZXR0eXBlID0+ICdhbnllbGVtZW50JywKKyAgcHJv YXJndHlwZXMgPT4gJ2pzb25iIGludDQgYW55ZWxlbWVudCcsIHByb2FyZ25hbWVzID0+ICd7ZnJv bV9qc29uLCBlbGVtZW50X2luZGV4LCBkZXNpcmVkX3R5cGV9JywKKyAgcHJvc3JjID0+ICdqc29u Yl9hcnJheV9lbGVtZW50X3R5cGUnIH0sCiB7IG9pZCA9PiAnMzIxNycsIGRlc2NyID0+ICdnZXQg dmFsdWUgZnJvbSBqc29uYiB3aXRoIHBhdGggZWxlbWVudHMnLAogICBwcm9uYW1lID0+ICdqc29u Yl9leHRyYWN0X3BhdGgnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb3JldHR5cGUgPT4gJ2pz b25iJywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIF90ZXh0JywgcHJvYWxsYXJndHlwZXMgPT4g J3tqc29uYixfdGV4dH0nLApAQCAtOTk0Nyw2ICs5OTU5LDEyIEBACiAgIHByb2FsbGFyZ3R5cGVz ID0+ICd7anNvbmIsX3RleHR9JywgcHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywKICAgcHJvYXJnbmFt ZXMgPT4gJ3tmcm9tX2pzb24scGF0aF9lbGVtc30nLAogICBwcm9zcmMgPT4gJ2pzb25iX2V4dHJh Y3RfcGF0aF90ZXh0JyB9LAoreyBvaWQgPT4gJzQ1NTEnLCBkZXNjciA9PiAnY2FzdCB2YWx1ZSBm cm9tIGpzb25iIGFzIHRleHQgd2l0aCBwYXRoIGVsZW1lbnRzIHRvIGdpdmVuIHR5cGUnLAorICBw cm9uYW1lID0+ICdqc29uYl9leHRyYWN0X3BhdGhfdHlwZScsIHByb3ZhcmlhZGljID0+ICd0ZXh0 JywKKyAgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVudCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYiBf dGV4dCBhbnllbGVtZW50JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tqc29uYixfdGV4dCxhbnll bGVtZW50fScsIHByb2FyZ21vZGVzID0+ICd7aSx2LGl9JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tm cm9tX2pzb24scGF0aF9lbGVtcyx0YXJnZXRfb2lkfScsCisgIHByb3NyYyA9PiAnanNvbmJfZXh0 cmFjdF9wYXRoX3R5cGUnIH0sCiB7IG9pZCA9PiAnMzIxOScsIGRlc2NyID0+ICdlbGVtZW50cyBv ZiBhIGpzb25iIGFycmF5JywKICAgcHJvbmFtZSA9PiAnanNvbmJfYXJyYXlfZWxlbWVudHMnLCBw cm9yb3dzID0+ICcxMDAnLCBwcm9yZXRzZXQgPT4gJ3QnLAogICBwcm9yZXR0eXBlID0+ICdqc29u YicsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9tYWtlZnVuY3MuaCBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IDMxODA3 MDMwMDU1Li5jZmJlNWIyNjE5NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1 bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTU4LDYgKzU4LDgg QEAgZXh0ZXJuIENvbnN0ICptYWtlQ29uc3QoT2lkIGNvbnN0dHlwZSwKIAogZXh0ZXJuIENvbnN0 ICptYWtlTnVsbENvbnN0KE9pZCBjb25zdHR5cGUsIGludDMyIGNvbnN0dHlwbW9kLCBPaWQgY29u c3Rjb2xsaWQpOwogCitleHRlcm4gQ29uc3QgKm1ha2VEdW1teUNvbnN0KE9pZCBjb25zdHR5cGUs IGludDMyIGNvbnN0dHlwbW9kLCBPaWQgY29uc3Rjb2xsaWQpOworCiBleHRlcm4gTm9kZSAqbWFr ZUJvb2xDb25zdChib29sIHZhbHVlLCBib29sIGlzbnVsbCk7CiAKIGV4dGVybiBFeHByICptYWtl Qm9vbEV4cHIoQm9vbEV4cHJUeXBlIGJvb2xvcCwgTGlzdCAqYXJncywgaW50IGxvY2F0aW9uKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGls cy9qc29uYi5oCmluZGV4IDY0OWExNjQ0ZjI0Li41MzIyMjUzMTRhOSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbmIuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCkBA IC00MzUsNSArNDM1LDYgQEAgZXh0ZXJuIERhdHVtIGpzb25iX2J1aWxkX29iamVjdF93b3JrZXIo aW50IG5hcmdzLCBEYXR1bSAqYXJncywgYm9vbCAqbnVsbHMsCiAJCQkJCQkJCQkgICBib29sIHVu aXF1ZV9rZXlzKTsKIGV4dGVybiBEYXR1bSBqc29uYl9idWlsZF9hcnJheV93b3JrZXIoaW50IG5h cmdzLCBEYXR1bSAqYXJncywgYm9vbCAqbnVsbHMsCiAJCQkJCQkJCQkgIE9pZCAqdHlwZXMsIGJv b2wgYWJzZW50X29uX251bGwpOworZXh0ZXJuIERhdHVtIGNhc3RfanNvbmJ2YWx1ZV90b190eXBl KEpzb25iVmFsdWUgKnYsIE9pZCB0YXJnZXRfb2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIF9fSlNP TkJfSF9fICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CmluZGV4IDRhMTZkMGRiYWZi Li45Y2VhZTA1OTU2MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29u Yi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQKQEAgLTQ1Nyw2 ICs0NTcsNyBAQCBDUkVBVEUgVEVNUCBUQUJMRSB0ZXN0X2pzb25iICgKICk7CiBJTlNFUlQgSU5U TyB0ZXN0X2pzb25iIFZBTFVFUwogKCdzY2FsYXInLCciYSBzY2FsYXIiJyksCisoJ3NjYWxhcmlu dCcsJzInKSwKICgnYXJyYXknLCdbInplcm8iLCAib25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2 ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCiAoJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZp ZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwz XSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOwogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwpAQCAtNTAxLDEwICs1MDIsMjUg QEAgU0VMRUNUIHRlc3RfanNvbiAtPj4gJ2ZpZWxkMicgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOwogIHZhbDIKICgxIHJvdykKIAotU0VMRUNUIHRlc3RfanNvbiAt PiAyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKK1NFTEVDVCB0 ZXN0X2pzb24gLT4gMiwgdGVzdF9qc29uIC0+IDAgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdzY2FsYXInOworID9jb2x1bW4/IHwgID9jb2x1bW4/ICAKKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tCisgICAgICAgICAgfCAiYSBzY2FsYXIiCisoMSByb3cpCisKK2V4cGxhaW4gKHZl cmJvc2UsIGNvc3RzIG9mZikKK1NFTEVDVCAodGVzdF9qc29uIC0+IDApOjppbnQ0LCB0ZXN0X2pz b24gLT4gMCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmludCc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3Rf anNvbmIKKyAgIE91dHB1dDoganNvbmJfYXJyYXlfZWxlbWVudF90eXBlKHRlc3RfanNvbiwgMCwg MCksICh0ZXN0X2pzb24gLT4gMCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0g J3NjYWxhcmludCc6OnRleHQpCisoMyByb3dzKQorCitTRUxFQ1QgdGVzdF9qc29uIC0+IDAgRlJP TSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXJpbnQnOwogID9jb2x1bW4/IAog LS0tLS0tLS0tLQotIAorIDIKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfanNvbiAtPiAyIEZST00g dGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwpAQCAtMTc4Niw2ICsxODAyLDEy IEBAIHNlbGVjdCAneyJhIjogeyJiIjp7ImMiOiAiZm9vIn19fSc6Ompzb25iICM+ICd7fSc7CiAg eyJhIjogeyJiIjogeyJjIjogImZvbyJ9fX0KICgxIHJvdykKIAorc2VsZWN0ICgnMic6Ompzb25i ICM+ICd7fScpOjppbnQyLCAoJ3siYSI6Mn0nOjpqc29uYiAjPiAneyJiIn0nKSwgKCd7ImEiOjJ9 Jzo6anNvbmIgIz4gJ3siYiJ9Jyk6OmludDI7CisgaW50MiB8ID9jb2x1bW4/IHwgaW50MiAKKy0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorICAgIDIgfCAgICAgICAgICB8ICAgICAKKygxIHJvdykK Kwogc2VsZWN0ICdbMSwyLDNdJzo6anNvbmIgIz4gJ3t9JzsKICA/Y29sdW1uPyAgCiAtLS0tLS0t LS0tLQpAQCAtNTQ3MSwxMDcgKzU0OTMsMTEzIEBAIHNlbGVjdCB0c19oZWFkbGluZSgnW10nOjpq c29uYiwgdHNxdWVyeSgnYWFhICYgYmJiJykpOwogKDEgcm93KQogCiAtLSBjYXN0cwotc2VsZWN0 ICd0cnVlJzo6anNvbmI6OmJvb2w7Ci0gYm9vbCAKLS0tLS0tLQotIHQKK3NlbGVjdCAndHJ1ZSc6 Ompzb25iOjpib29sLCAoJ3siYSI6IHRydWV9Jzo6anNvbmItPidhJyk6OmJvb2w7CisgYm9vbCB8 IGJvb2wgCistLS0tLS0rLS0tLS0tCisgdCAgICB8IHQKICgxIHJvdykKIAogc2VsZWN0ICdbXSc6 Ompzb25iOjpib29sOwogRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSB0byB0eXBlIGJv b2xlYW4KLXNlbGVjdCAnMS4wJzo6anNvbmI6OmZsb2F0OwotIGZsb2F0OCAKLS0tLS0tLS0tCi0g ICAgICAxCitzZWxlY3QgKCd7ImEiOiBbXX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKK0VSUk9SOiAg Y2Fubm90IGNhc3QganNvbmIgYXJyYXkgdG8gdHlwZSBib29sZWFuCitzZWxlY3QgJzEuMCc6Ompz b25iOjpmbG9hdCwgKCd7ImEiOiAxLjB9Jzo6anNvbmItPidhJyk6OmZsb2F0OworIGZsb2F0OCB8 IGZsb2F0OCAKKy0tLS0tLS0tKy0tLS0tLS0tCisgICAgICAxIHwgICAgICAxCiAoMSByb3cpCiAK IHNlbGVjdCAnWzEuMF0nOjpqc29uYjo6ZmxvYXQ7CiBFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25i IGFycmF5IHRvIHR5cGUgZG91YmxlIHByZWNpc2lvbgotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpp bnQ0OwotIGludDQgIAotLS0tLS0tLQotIDEyMzQ1CitzZWxlY3QgKCd7ImEiOiBbMS4wXX0nOjpq c29uYi0+J2EnKTo6ZmxvYXQ7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IHRvIHR5 cGUgZG91YmxlIHByZWNpc2lvbgorc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0LCAgKCd7ImEi OiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSst LS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCiBzZWxlY3QgJyJoZWxsbyInOjpqc29u Yjo6aW50NDsKIEVSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgaW50ZWdl cgotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpudW1lcmljOwotIG51bWVyaWMgCi0tLS0tLS0tLS0K LSAgIDEyMzQ1CitzZWxlY3QgKCd7ImEiOiAiaGVsbG8ifSc6Ompzb25iLT4nYScpOjppbnQ0Owor RVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRlZ2VyCitzZWxlY3Qg JzEyMzQ1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDV9Jzo6anNvbmItPidhJyk6Om51 bWVyaWM7CisgbnVtZXJpYyB8IG51bWVyaWMgCistLS0tLS0tLS0rLS0tLS0tLS0tCisgICAxMjM0 NSB8ICAgMTIzNDUKICgxIHJvdykKIAogc2VsZWN0ICd7fSc6Ompzb25iOjpudW1lcmljOwogRVJS T1I6ICBjYW5ub3QgY2FzdCBqc29uYiBvYmplY3QgdG8gdHlwZSBudW1lcmljCi1zZWxlY3QgJzEy MzQ1LjA1Jzo6anNvbmI6Om51bWVyaWM7Ci0gbnVtZXJpYyAgCi0tLS0tLS0tLS0tCi0gMTIzNDUu MDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wNX0n Ojpqc29uYi0+J2EnKTo6bnVtZXJpYzsKKyBudW1lcmljICB8IG51bWVyaWMgIAorLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEy MzQ1LjA1Jzo6anNvbmI6OmZsb2F0NDsKLSAgZmxvYXQ0ICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4w NQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDQsICgneyJhIjogMTIzNDUuMDV9Jzo6 anNvbmItPidhJyk6OmZsb2F0NDsKKyAgZmxvYXQ0ICB8ICBmbG9hdDQgIAorLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1 LjA1Jzo6anNvbmI6OmZsb2F0ODsKLSAgZmxvYXQ4ICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4wNQor c2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDV9Jzo6anNv bmItPidhJyk6OmZsb2F0ODsKKyAgZmxvYXQ4ICB8ICBmbG9hdDggIAorLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1 Jzo6anNvbmI6OmludDI7Ci0gaW50MiAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUu MDUnOjpqc29uYjo6aW50MiwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50MjsK KyBpbnQyICB8IGludDIgIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93 KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDQ7Ci0gaW50NCAgCi0tLS0tLS0tCi0g MTIzNDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NCwgKCd7ImEiOiAxMjM0NS4wNX0n Ojpqc29uYi0+J2EnKTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSstLS0tLS0tCisg MTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDg7 Ci0gaW50OCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50 OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50ODsKKyBpbnQ4ICB8IGludDgg IAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29u Yjo6bnVtZXJpYzsKLSAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0gMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwNQorc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6bnVtZXJp YzsKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1IHwgMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQogKDEgcm93 KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDUnOjpqc29uYjo6ZmxvYXQ0OwotIGZsb2F0NCAKLS0tLS0tLS0tCi0gIDEyMzQ1Citz ZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDUnOjpqc29uYjo6ZmxvYXQ0LCAgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDQ7CisgZmxvYXQ0 IHwgZmxvYXQ0IAorLS0tLS0tLS0rLS0tLS0tLS0KKyAgMTIzNDUgfCAgMTIzNDUKICgxIHJvdykK IAotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDA1Jzo6anNvbmI6OmZsb2F0ODsKLSBmbG9hdDggCi0tLS0tLS0tLQotICAxMjM0NQorc2Vs ZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1 Jzo6anNvbmI6OmZsb2F0OCwgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDg7CisgZmxvYXQ4IHwg ZmxvYXQ4IAorLS0tLS0tLS0rLS0tLS0tLS0KKyAgMTIzNDUgfCAgMTIzNDUKICgxIHJvdykKIAot c2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA1Jzo6anNvbmI6OmludDI7Ci0gaW50MiAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25i OjppbnQyLCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDI7CisgaW50MiAgfCBpbnQyICAKKy0tLS0t LS0rLS0tLS0tLQorIDEyMzQ1IHwgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcxMjM0NS4wMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDQ7 Ci0gaW50NCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNv bmItPidhJyk6OmludDQ7CisgaW50NCAgfCBpbnQ0ICAKKy0tLS0tLS0rLS0tLS0tLQorIDEyMzQ1 IHwgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDg7Ci0gaW50OCAgCi0tLS0tLS0t Ci0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDg7Cisg aW50OCAgfCBpbnQ4ICAKKy0tLS0tLS0rLS0tLS0tLQorIDEyMzQ1IHwgMTIzNDUKICgxIHJvdykK IApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvanNvbmIuc3FsCmluZGV4IGU0YjdjZGY3MDNkLi41ZmVjZTk4N2JmMCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pzb25iLnNxbApAQCAtMTU0LDYgKzE1NCw3IEBAIENSRUFURSBURU1QIFRBQkxF IHRlc3RfanNvbmIgKAogCiBJTlNFUlQgSU5UTyB0ZXN0X2pzb25iIFZBTFVFUwogKCdzY2FsYXIn LCciYSBzY2FsYXIiJyksCisoJ3NjYWxhcmludCcsJzInKSwKICgnYXJyYXknLCdbInplcm8iLCAi b25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCiAoJ29i amVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJm aWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOwogCkBA IC0xNjYsNyArMTY3LDEwIEBAIFNFTEVDVCB0ZXN0X2pzb24gLT4+ICdmaWVsZDInIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4+ ICdmaWVsZDInIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwogU0VM RUNUIHRlc3RfanNvbiAtPj4gJ2ZpZWxkMicgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOwogCi1TRUxFQ1QgdGVzdF9qc29uIC0+IDIgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOworU0VMRUNUIHRlc3RfanNvbiAtPiAyLCB0ZXN0X2pz b24gLT4gMCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CitleHBs YWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAwKTo6aW50NCwg dGVzdF9qc29uIC0+IDAgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXJp bnQnOworU0VMRUNUIHRlc3RfanNvbiAtPiAwIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnc2NhbGFyaW50JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gMiBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ2FycmF5JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gOSBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ2FycmF5JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4g MiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CkBAIC00OTEsNiAr NDk1LDcgQEAgU0VMRUNUICd7ImYyIjpbImYzIiwxXSwiZjQiOnsiZjUiOjk5LCJmNiI6InN0cmlu Z3kifX0nOjpqc29uYiM+PmFycmF5WydmMicsJzEnXTsKIAogLS0gY29ybmVyIGNhc2VzIGZvciBz YW1lCiBzZWxlY3QgJ3siYSI6IHsiYiI6eyJjIjogImZvbyJ9fX0nOjpqc29uYiAjPiAne30nOwor c2VsZWN0ICgnMic6Ompzb25iICM+ICd7fScpOjppbnQyLCAoJ3siYSI6Mn0nOjpqc29uYiAjPiAn eyJiIn0nKSwgKCd7ImEiOjJ9Jzo6anNvbmIgIz4gJ3siYiJ9Jyk6OmludDI7CiBzZWxlY3QgJ1sx LDIsM10nOjpqc29uYiAjPiAne30nOwogc2VsZWN0ICciZm9vIic6Ompzb25iICM+ICd7fSc7CiBz ZWxlY3QgJzQyJzo6anNvbmIgIz4gJ3t9JzsKQEAgLTE0OTYsMjMgKzE1MDEsMjcgQEAgc2VsZWN0 IHRzX2hlYWRsaW5lKCd7fSc6Ompzb25iLCB0c3F1ZXJ5KCdhYWEgJiBiYmInKSk7CiBzZWxlY3Qg dHNfaGVhZGxpbmUoJ1tdJzo6anNvbmIsIHRzcXVlcnkoJ2FhYSAmIGJiYicpKTsKIAogLS0gY2Fz dHMKLXNlbGVjdCAndHJ1ZSc6Ompzb25iOjpib29sOworc2VsZWN0ICd0cnVlJzo6anNvbmI6OmJv b2wsICgneyJhIjogdHJ1ZX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKIHNlbGVjdCAnW10nOjpqc29u Yjo6Ym9vbDsKLXNlbGVjdCAnMS4wJzo6anNvbmI6OmZsb2F0Oworc2VsZWN0ICgneyJhIjogW119 Jzo6anNvbmItPidhJyk6OmJvb2w7CitzZWxlY3QgJzEuMCc6Ompzb25iOjpmbG9hdCwgKCd7ImEi OiAxLjB9Jzo6anNvbmItPidhJyk6OmZsb2F0Owogc2VsZWN0ICdbMS4wXSc6Ompzb25iOjpmbG9h dDsKLXNlbGVjdCAnMTIzNDUnOjpqc29uYjo6aW50NDsKK3NlbGVjdCAoJ3siYSI6IFsxLjBdfSc6 Ompzb25iLT4nYScpOjpmbG9hdDsKK3NlbGVjdCAnMTIzNDUnOjpqc29uYjo6aW50NCwgICgneyJh IjogMTIzNDV9Jzo6anNvbmItPidhJyk6OmludDQ7CiBzZWxlY3QgJyJoZWxsbyInOjpqc29uYjo6 aW50NDsKLXNlbGVjdCAnMTIzNDUnOjpqc29uYjo6bnVtZXJpYzsKK3NlbGVjdCAoJ3siYSI6ICJo ZWxsbyJ9Jzo6anNvbmItPidhJyk6OmludDQ7CisKK3NlbGVjdCAnMTIzNDUnOjpqc29uYjo6bnVt ZXJpYywgKCd7ImEiOiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6bnVtZXJpYzsKIHNlbGVjdCAne30n Ojpqc29uYjo6bnVtZXJpYzsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6bnVtZXJpYzsKLXNl bGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6ZmxvYXQ0Owotc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25i OjpmbG9hdDg7Ci1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDI7Ci1zZWxlY3QgJzEyMzQ1 LjA1Jzo6anNvbmI6OmludDQ7Ci1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDg7Ci1zZWxl Y3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUn Ojpqc29uYjo6bnVtZXJpYzsKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpmbG9hdDQ7Ci1zZWxlY3QgJzEyMzQ1LjAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6Zmxv YXQ4Owotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDA1Jzo6anNvbmI6OmludDI7Ci1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50NDsKLXNlbGVjdCAnMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25i OjppbnQ4Oworc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1 LjA1fSc6Ompzb25iLT4nYScpOjpudW1lcmljOworc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpm bG9hdDQsICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0NDsKK3NlbGVjdCAn MTIzNDUuMDUnOjpqc29uYjo6ZmxvYXQ4LCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4nYScp OjpmbG9hdDg7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDIsICgneyJhIjogMTIzNDUu MDV9Jzo6anNvbmItPidhJyk6OmludDI7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDQs ICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6OmludDQ7CitzZWxlY3QgJzEyMzQ1LjA1 Jzo6anNvbmI6OmludDgsICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6OmludDg7Citz ZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpudW1lcmljOworc2VsZWN0 ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6 anNvbmI6OmZsb2F0NCwgICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ0Oworc2VsZWN0ICcxMjM0 NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6 OmZsb2F0OCwgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDg7CitzZWxlY3QgJzEyMzQ1LjAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50Miwg KCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA1fSc6Ompzb25iLT4nYScpOjppbnQyOworc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDQsICgneyJhIjogMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29u Yi0+J2EnKTo6aW50NDsKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6Omlu dDg7Ci0tIAoyLjIxLjAKCg== --00000000000025778f06030466af--