Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n5YPb-0007nQ-Ok for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Jan 2022 19:27:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n5YPa-0003oB-BP for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Jan 2022 19:26:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n5YPZ-0003nw-BL for pgsql-hackers@lists.postgresql.org; Thu, 06 Jan 2022 19:26:57 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1n5YPQ-0006AW-6z for pgsql-hackers@lists.postgresql.org; Thu, 06 Jan 2022 19:26:55 +0000 Received: by mail-ed1-x531.google.com with SMTP id m21so13598457edc.0 for ; Thu, 06 Jan 2022 11:26:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=MTQYNg14tr9+2/dsa50iCn0GLtpShX6GaslwpoH5sCk=; b=Qi8zO9d63wMaSwGP69gccLFwGmha2JyJRYJs7wfxQP52TgmjBTkDytCsAwSHddxep6 PZfF+rrmIrHn5Dl8kxCS6SjVlsdON06yjm/N0/8K4vGRv3CkVpa2W42yQcwk7L6i07tl 7DLPOWpnc9wx5scPSi0sfZifbpDz/eLmKSHpYSbv0k7VMdQG5gfbPeuQWE+uSBQ7cMve GZMrf14wo+mjb4jDVcqzy97WXe+o9xICj5+bHIo9Q8j2wNgwOvtqVZ/VaUR+uin+IRpd 5wlkcmjuAtj8bFwdZZ/Qzfz9oAuS92Fg0UFP2GyQGq23z1ko4QQvtyEEFznZHH7ZbFIV TZ2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=MTQYNg14tr9+2/dsa50iCn0GLtpShX6GaslwpoH5sCk=; b=FD7kTxJKhn/CRBKFi//2Fz78W41H0L5lB7Ddl1TLGy3qsQrfMC+vSi7aBep9kzikdS eHF8LouynYfZO6+KBRB/vaPCn4t1B9RsXh1bqYNSzHPSVPDZ9l1dpmXAVETEXdL3LB8/ 7WzJke1zG+L0n2YYbwfqTwhRZnxEJCfsPvVv9gQ2UiDQnlzqdkxgip+2j6/Ue9FWJTLP 8eVOktf9fbfM9XWZevXWx2cLw5gmkeIH27R/5pgOAjw1IflYS8J6uVsIfwxxwuWFnSaV gXAOCZHfFoz5z6q0+R1AIab8YADBRNL5RFynz03TQG1jP7Uypu/OqmXhOtpgew/Kjy/A 1+Ew== X-Gm-Message-State: AOAM533Yuz2RXuhRQgyvU9D8+wGUnim4Xr3oSyKJz+i+0sc2PMmtupaW vTt+72NHwE+ahYRMlH66NEXizZT2huhugh7mw2/zRGWq9wCLGJ0Waz18itCIRAuW8Cg6FgIr+pl t2EzOTBsinXdz9s5ItTttZJLCnYjp1huh8MgYYCBnqrYHuSmTD0skXnWo+TudSKeQwGKu5lk9dm DIEAlXNLx8EnHOKaLeRVIApmWmIvA7QxWCQ1NCbXGlx/qtyaJrP8CZ X-Google-Smtp-Source: ABdhPJx34vYbbORtsdTV4kw3snb36Ici1o7bHMlPBBrFUMJtku9nqjmhM2z7TlEKSFEeO1lfkuiH1g== X-Received: by 2002:aa7:cc10:: with SMTP id q16mr33364314edt.60.1641497206747; Thu, 06 Jan 2022 11:26:46 -0800 (PST) Received: from [10.137.0.18] (ip-86-49-251-241.net.upcbroadband.cz. [86.49.251.241]) by smtp.gmail.com with ESMTPSA id s26sm720136eja.152.2022.01.06.11.26.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 06 Jan 2022 11:26:45 -0800 (PST) Content-Type: multipart/mixed; boundary="------------owXyn0H8mA9LYeaX6VpVWVY6" Message-ID: Date: Thu, 6 Jan 2022 20:26:43 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: Collecting statistics about contents of JSONB columns Content-Language: en-US To: Thomas Munro Cc: PostgreSQL Hackers , Nikita Glukhov , Mahendra Thalor , Oleg Bartunov References: From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 1/5/22 21:13, Thomas Munro wrote: > On Sat, Jan 1, 2022 at 11:07 AM Tomas Vondra > wrote: >> 0006-Add-jsonb-statistics-20211230.patch > > Hi Tomas, > > -CREATE OR REPLACE FUNCTION explain_jsonb(sql_query text) > +CREATE OR REPLACE FUNCTION explain_jsonb(sql_query text) > > https://cirrus-ci.com/task/6405547984420864 > > It looks like there is a Unicode BOM sequence in there, which is > upsetting our Windows testing but not the 3 Unixes (not sure why). > Probably added by an editor. > Thanks, fixed along with some whitespace issues. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-pg_operator.oprstat-for-derived-operato-20220106.patch" Content-Disposition: attachment; filename*0="0001-Add-pg_operator.oprstat-for-derived-operato-20220106.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlN2ZhMDU3NDAxNzI4ZjZhODk0ODY2ZDFlNDIyZmY5ZWJlNDJjMjU2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFNhdCwgMTIgTm92IDIwMTYgMTg6NTk6NDMgKzAzMDAKU3ViamVj dDogW1BBVENIIDEvNl0gQWRkIHBnX29wZXJhdG9yLm9wcnN0YXQgZm9yIGRlcml2ZWQgb3Bl cmF0b3Igc3RhdGlzdGljcwogZXN0aW1hdGlvbgoKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9n L3BnX29wZXJhdG9yLmMgICAgICB8IDExICsrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9v cGVyYXRvcmNtZHMuYyAgICB8IDY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICB8IDM5ICsrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMgICAgfCAyNCArKysrKysr KysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuaCAgICAgIHwgIDQgKysKIHNy Yy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oICAgICAgICAgIHwgIDEgKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9vaWRqb2lucy5vdXQgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQs IDE0NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19vcGVyYXRvci5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19vcGVyYXRvci5jCmluZGV4 IDRjNWE1NmNiMDk0Li4xZGY1YWM4ZWU4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19vcGVyYXRvci5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfb3BlcmF0 b3IuYwpAQCAtMjU2LDYgKzI1Niw3IEBAIE9wZXJhdG9yU2hlbGxNYWtlKGNvbnN0IGNoYXIg Km9wZXJhdG9yTmFtZSwKIAl2YWx1ZXNbQW51bV9wZ19vcGVyYXRvcl9vcHJjb2RlIC0gMV0g PSBPYmplY3RJZEdldERhdHVtKEludmFsaWRPaWQpOwogCXZhbHVlc1tBbnVtX3BnX29wZXJh dG9yX29wcnJlc3QgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oSW52YWxpZE9pZCk7CiAJdmFs dWVzW0FudW1fcGdfb3BlcmF0b3Jfb3Byam9pbiAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShJ bnZhbGlkT2lkKTsKKwl2YWx1ZXNbQW51bV9wZ19vcGVyYXRvcl9vcHJzdGF0IC0gMV0gPSBP YmplY3RJZEdldERhdHVtKEludmFsaWRPaWQpOwogCiAJLyoKIAkgKiBjcmVhdGUgYSBuZXcg b3BlcmF0b3IgdHVwbGUKQEAgLTMwMSw2ICszMDIsNyBAQCBPcGVyYXRvclNoZWxsTWFrZShj b25zdCBjaGFyICpvcGVyYXRvck5hbWUsCiAgKgkJbmVnYXRvck5hbWUJCQkJWCBuZWdhdG9y IG9wZXJhdG9yCiAgKgkJcmVzdHJpY3Rpb25JZAkJCVggcmVzdHJpY3Rpb24gc2VsZWN0aXZp dHkgcHJvY2VkdXJlIElECiAgKgkJam9pbklkCQkJCQlYIGpvaW4gc2VsZWN0aXZpdHkgcHJv Y2VkdXJlIElECisgKgkJc3RhdHNJZAkJCQkJWCBzdGF0aXN0aWNzIGRlcml2YXRpb24gcHJv Y2VkdXJlIElECiAgKgkJY2FuTWVyZ2UJCQkJbWVyZ2Ugam9pbiBjYW4gYmUgdXNlZCB3aXRo IHRoaXMgb3BlcmF0b3IKICAqCQljYW5IYXNoCQkJCQloYXNoIGpvaW4gY2FuIGJlIHVzZWQg d2l0aCB0aGlzIG9wZXJhdG9yCiAgKgpAQCAtMzMzLDYgKzMzNSw3IEBAIE9wZXJhdG9yQ3Jl YXRlKGNvbnN0IGNoYXIgKm9wZXJhdG9yTmFtZSwKIAkJCSAgIExpc3QgKm5lZ2F0b3JOYW1l LAogCQkJICAgT2lkIHJlc3RyaWN0aW9uSWQsCiAJCQkgICBPaWQgam9pbklkLAorCQkJICAg T2lkIHN0YXRzSWQsCiAJCQkgICBib29sIGNhbk1lcmdlLAogCQkJICAgYm9vbCBjYW5IYXNo KQogewpAQCAtNTA1LDYgKzUwOCw3IEBAIE9wZXJhdG9yQ3JlYXRlKGNvbnN0IGNoYXIgKm9w ZXJhdG9yTmFtZSwKIAl2YWx1ZXNbQW51bV9wZ19vcGVyYXRvcl9vcHJjb2RlIC0gMV0gPSBP YmplY3RJZEdldERhdHVtKHByb2NlZHVyZUlkKTsKIAl2YWx1ZXNbQW51bV9wZ19vcGVyYXRv cl9vcHJyZXN0IC0gMV0gPSBPYmplY3RJZEdldERhdHVtKHJlc3RyaWN0aW9uSWQpOwogCXZh bHVlc1tBbnVtX3BnX29wZXJhdG9yX29wcmpvaW4gLSAxXSA9IE9iamVjdElkR2V0RGF0dW0o am9pbklkKTsKKwl2YWx1ZXNbQW51bV9wZ19vcGVyYXRvcl9vcHJzdGF0IC0gMV0gPSBPYmpl Y3RJZEdldERhdHVtKHN0YXRzSWQpOwogCiAJcGdfb3BlcmF0b3JfZGVzYyA9IHRhYmxlX29w ZW4oT3BlcmF0b3JSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIApAQCAtODU1LDYg Kzg1OSwxMyBAQCBtYWtlT3BlcmF0b3JEZXBlbmRlbmNpZXMoSGVhcFR1cGxlIHR1cGxlLAog CQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJnJlZmVyZW5jZWQsIGFkZHJzKTsKIAl9CiAK KwkvKiBEZXBlbmRlbmN5IG9uIHN0YXRpc3RpY3MgZGVyaXZhdGlvbiBmdW5jdGlvbiAqLwor CWlmIChPaWRJc1ZhbGlkKG9wZXItPm9wcnN0YXQpKQorCXsKKwkJT2JqZWN0QWRkcmVzc1Nl dChyZWZlcmVuY2VkLCBQcm9jZWR1cmVSZWxhdGlvbklkLCBvcGVyLT5vcHJzdGF0KTsKKwkJ YWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZyZWZlcmVuY2VkLCBhZGRycyk7CisJfQorCiAJ cmVjb3JkX29iamVjdF9hZGRyZXNzX2RlcGVuZGVuY2llcygmbXlzZWxmLCBhZGRycywgREVQ RU5ERU5DWV9OT1JNQUwpOwogCWZyZWVfb2JqZWN0X2FkZHJlc3NlcyhhZGRycyk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL29wZXJhdG9yY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvb3BlcmF0b3JjbWRzLmMKaW5kZXggZWI1MGY2MGVkMTMuLjgxM2Uz NjlhZWY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9vcGVyYXRvcmNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9vcGVyYXRvcmNtZHMuYwpAQCAtNTMsNiAr NTMsMTIgQEAKIHN0YXRpYyBPaWQJVmFsaWRhdGVSZXN0cmljdGlvbkVzdGltYXRvcihMaXN0 ICpyZXN0cmljdGlvbk5hbWUpOwogc3RhdGljIE9pZAlWYWxpZGF0ZUpvaW5Fc3RpbWF0b3Io TGlzdCAqam9pbk5hbWUpOwogCisvKgorICogWFhYIE1heWJlIG5vdCB0aGUgcmlnaHQgbmFt ZSwgYmVjYXVzZSAiZXN0aW1hdG9yIiBpbXBsaWVzIHdlJ3JlIGNhbGN1bGF0aW5nCisgKiBz ZWxlY3Rpdml0eS4gQnV0IHdlJ3JlIGFjdHVhbGx5IGRlcml2aW5nIHN0YXRpc3RpY3MgZm9y IGFuIGV4cHJlc3Npb24uCisgKi8KK3N0YXRpYyBPaWQJVmFsaWRhdGVTdGF0aXN0aWNzRXN0 aW1hdG9yKExpc3QgKmpvaW5OYW1lKTsKKwogLyoKICAqIERlZmluZU9wZXJhdG9yCiAgKgkJ dGhpcyBmdW5jdGlvbiBleHRyYWN0cyBhbGwgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlCkBA IC03OCwxMCArODQsMTIgQEAgRGVmaW5lT3BlcmF0b3IoTGlzdCAqbmFtZXMsIExpc3QgKnBh cmFtZXRlcnMpCiAJTGlzdAkgICAqY29tbXV0YXRvck5hbWUgPSBOSUw7CS8qIG9wdGlvbmFs IGNvbW11dGF0b3Igb3BlcmF0b3IgbmFtZSAqLwogCUxpc3QJICAgKm5lZ2F0b3JOYW1lID0g TklMOwkvKiBvcHRpb25hbCBuZWdhdG9yIG9wZXJhdG9yIG5hbWUgKi8KIAlMaXN0CSAgICpy ZXN0cmljdGlvbk5hbWUgPSBOSUw7CS8qIG9wdGlvbmFsIHJlc3RyaWN0LiBzZWwuIGZ1bmN0 aW9uICovCisJTGlzdAkgICAqc3RhdGlzdGljc05hbWUgPSBOSUw7CS8qIG9wdGlvbmFsIHN0 YXRzIGVzdGltYXQuIHByb2NlZHVyZSAqLwogCUxpc3QJICAgKmpvaW5OYW1lID0gTklMOyAv KiBvcHRpb25hbCBqb2luIHNlbC4gZnVuY3Rpb24gKi8KIAlPaWQJCQlmdW5jdGlvbk9pZDsJ LyogZnVuY3Rpb25zIGNvbnZlcnRlZCB0byBPSUQgKi8KIAlPaWQJCQlyZXN0cmljdGlvbk9p ZDsKIAlPaWQJCQlqb2luT2lkOworCU9pZAkJCXN0YXRpc3RpY3NPaWQ7CiAJT2lkCQkJdHlw ZUlkWzJdOwkJLyogdG8gaG9sZCBsZWZ0IGFuZCByaWdodCBhcmcgKi8KIAlpbnQJCQluYXJn czsKIAlMaXN0Q2VsbCAgICpwbDsKQEAgLTEzMSw2ICsxMzksOSBAQCBEZWZpbmVPcGVyYXRv cihMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycykKIAkJCXJlc3RyaWN0aW9uTmFtZSA9 IGRlZkdldFF1YWxpZmllZE5hbWUoZGVmZWwpOwogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJqb2luIikgPT0gMCkKIAkJCWpvaW5OYW1lID0gZGVmR2V0UXVhbGlmaWVk TmFtZShkZWZlbCk7CisJCS8qIFhYWCBwZXJoYXBzIGZ1bGwgInN0YXRpc3RpY3MiIHdvcmRp bmcgd291bGQgYmUgYmV0dGVyICovCisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInN0YXRzIikgPT0gMCkKKwkJCXN0YXRpc3RpY3NOYW1lID0gZGVmR2V0UXVhbGlmaWVk TmFtZShkZWZlbCk7CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImhhc2hl cyIpID09IDApCiAJCQljYW5IYXNoID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CiAJCWVsc2Ug aWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgIm1lcmdlcyIpID09IDApCkBAIC0yNDYsNiAr MjU3LDEwIEBAIERlZmluZU9wZXJhdG9yKExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJz KQogCQlqb2luT2lkID0gVmFsaWRhdGVKb2luRXN0aW1hdG9yKGpvaW5OYW1lKTsKIAllbHNl CiAJCWpvaW5PaWQgPSBJbnZhbGlkT2lkOworCWlmIChzdGF0aXN0aWNzTmFtZSkKKwkJc3Rh dGlzdGljc09pZCA9IFZhbGlkYXRlU3RhdGlzdGljc0VzdGltYXRvcihzdGF0aXN0aWNzTmFt ZSk7CisJZWxzZQorCQlzdGF0aXN0aWNzT2lkID0gSW52YWxpZE9pZDsKIAogCS8qCiAJICog bm93IGhhdmUgT3BlcmF0b3JDcmVhdGUgZG8gYWxsIHRoZSB3b3JrLi4KQEAgLTI2MCw2ICsy NzUsNyBAQCBEZWZpbmVPcGVyYXRvcihMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycykK IAkJCQkJICAgbmVnYXRvck5hbWUsIC8qIG9wdGlvbmFsIG5lZ2F0b3Igb3BlcmF0b3IgbmFt ZSAqLwogCQkJCQkgICByZXN0cmljdGlvbk9pZCwJLyogb3B0aW9uYWwgcmVzdHJpY3QuIHNl bC4gZnVuY3Rpb24gKi8KIAkJCQkJICAgam9pbk9pZCwgLyogb3B0aW9uYWwgam9pbiBzZWwu IGZ1bmN0aW9uIG5hbWUgKi8KKwkJCQkJICAgc3RhdGlzdGljc09pZCwgLyogb3B0aW9uYWwg c3RhdHMgZXN0aW1hdGlvbiBwcm9jZWR1cmUgKi8KIAkJCQkJICAgY2FuTWVyZ2UsCS8qIG9w ZXJhdG9yIG1lcmdlcyAqLwogCQkJCQkgICBjYW5IYXNoKTsJLyogb3BlcmF0b3IgaGFzaGVz ICovCiB9CkBAIC0zNTcsNiArMzczLDQwIEBAIFZhbGlkYXRlSm9pbkVzdGltYXRvcihMaXN0 ICpqb2luTmFtZSkKIAlyZXR1cm4gam9pbk9pZDsKIH0KIAorLyoKKyAqIExvb2sgdXAgYSBz dGF0aXN0aWNzIGVzdGltYXRvciBmdW5jdGlvbiBieSBuYW1lLCBhbmQgdmVyaWZ5IHRoYXQg aXQgaGFzIHRoZQorICogY29ycmVjdCBzaWduYXR1cmUgYW5kIHdlIGhhdmUgdGhlIHBlcm1p c3Npb25zIHRvIGF0dGFjaCBpdCB0byBhbiBvcGVyYXRvci4KKyAqLworc3RhdGljIE9pZAor VmFsaWRhdGVTdGF0aXN0aWNzRXN0aW1hdG9yKExpc3QgKnN0YXROYW1lKQoreworCU9pZAkJ CXR5cGVJZFs0XTsKKwlPaWQJCQlzdGF0T2lkOworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisK Kwl0eXBlSWRbMF0gPSBJTlRFUk5BTE9JRDsJLyogUGxhbm5lckluZm8gKi8KKwl0eXBlSWRb MV0gPSBJTlRFUk5BTE9JRDsJLyogT3BFeHByICovCisJdHlwZUlkWzJdID0gSU5UNE9JRDsJ CS8qIHZhclJlbGlkICovCisJdHlwZUlkWzNdID0gSU5URVJOQUxPSUQ7CS8qIFZhcmlhYmxl U3RhdERhdGEgKi8KKworCXN0YXRPaWQgPSBMb29rdXBGdW5jTmFtZShzdGF0TmFtZSwgNCwg dHlwZUlkLCBmYWxzZSk7CisKKwkvKiBzdGF0aXN0aWNzIGVzdGltYXRvcnMgbXVzdCByZXR1 cm4gdm9pZCAqLworCWlmIChnZXRfZnVuY19yZXR0eXBlKHN0YXRPaWQpICE9IEJPT0xPSUQp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVD VF9ERUZJTklUSU9OKSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0aWNzIGVzdGltYXRvciBmdW5j dGlvbiAlcyBtdXN0IHJldHVybiB0eXBlICVzIiwKKwkJCQkJCU5hbWVMaXN0VG9TdHJpbmco c3RhdE5hbWUpLCAiYm9vbGVhbiIpKSk7CisKKwkvKiBSZXF1aXJlIEVYRUNVVEUgcmlnaHRz IGZvciB0aGUgZXN0aW1hdG9yICovCisJYWNscmVzdWx0ID0gcGdfcHJvY19hY2xjaGVjayhz dGF0T2lkLCBHZXRVc2VySWQoKSwgQUNMX0VYRUNVVEUpOworCWlmIChhY2xyZXN1bHQgIT0g QUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX0ZVTkNU SU9OLAorCQkJCQkgICBOYW1lTGlzdFRvU3RyaW5nKHN0YXROYW1lKSk7CisKKwlyZXR1cm4g c3RhdE9pZDsKK30KKwogLyoKICAqIEd1dHMgb2Ygb3BlcmF0b3IgZGVsZXRpb24uCiAgKi8K QEAgLTQyNCw2ICs0NzQsOSBAQCBBbHRlck9wZXJhdG9yKEFsdGVyT3BlcmF0b3JTdG10ICpz dG10KQogCUxpc3QJICAgKmpvaW5OYW1lID0gTklMOyAvKiBvcHRpb25hbCBqb2luIHNlbC4g ZnVuY3Rpb24gKi8KIAlib29sCQl1cGRhdGVKb2luID0gZmFsc2U7CiAJT2lkCQkJam9pbk9p ZDsKKwlMaXN0CSAgICpzdGF0TmFtZSA9IE5JTDsgLyogb3B0aW9uYWwgc3RhdGlzdGljcyBl c3RpbWF0aW9uIHByb2NlZHVyZSAqLworCWJvb2wJCXVwZGF0ZVN0YXQgPSBmYWxzZTsKKwlP aWQJCQlzdGF0T2lkOwogCiAJLyogTG9vayB1cCB0aGUgb3BlcmF0b3IgKi8KIAlvcHJJZCA9 IExvb2t1cE9wZXJXaXRoQXJncyhzdG10LT5vcGVybmFtZSwgZmFsc2UpOwpAQCAtNDU0LDYg KzUwNywxMSBAQCBBbHRlck9wZXJhdG9yKEFsdGVyT3BlcmF0b3JTdG10ICpzdG10KQogCQkJ am9pbk5hbWUgPSBwYXJhbTsKIAkJCXVwZGF0ZUpvaW4gPSB0cnVlOwogCQl9CisJCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAoZGVmZWwtPmRlZm5hbWUsICJzdGF0cyIpID09IDApCisJCXsK KwkJCXN0YXROYW1lID0gcGFyYW07CisJCQl1cGRhdGVTdGF0ID0gdHJ1ZTsKKwkJfQogCiAJ CS8qCiAJCSAqIFRoZSByZXN0IG9mIHRoZSBvcHRpb25zIHRoYXQgQ1JFQVRFIGFjY2VwdHMg Y2Fubm90IGJlIGNoYW5nZWQuCkBAIC00OTYsNiArNTU0LDEwIEBAIEFsdGVyT3BlcmF0b3Io QWx0ZXJPcGVyYXRvclN0bXQgKnN0bXQpCiAJCWpvaW5PaWQgPSBWYWxpZGF0ZUpvaW5Fc3Rp bWF0b3Ioam9pbk5hbWUpOwogCWVsc2UKIAkJam9pbk9pZCA9IEludmFsaWRPaWQ7CisJaWYg KHN0YXROYW1lKQorCQlzdGF0T2lkID0gVmFsaWRhdGVTdGF0aXN0aWNzRXN0aW1hdG9yKHN0 YXROYW1lKTsKKwllbHNlCisJCXN0YXRPaWQgPSBJbnZhbGlkT2lkOwogCiAJLyogUGVyZm9y bSBhZGRpdGlvbmFsIGNoZWNrcywgbGlrZSBPcGVyYXRvckNyZWF0ZSBkb2VzICovCiAJaWYg KCEoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSAmJiBPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcnJpZ2h0KSkpCkBAIC01MzYsNiArNTk4LDExIEBAIEFsdGVyT3BlcmF0b3IoQWx0ZXJP cGVyYXRvclN0bXQgKnN0bXQpCiAJCXJlcGxhY2VzW0FudW1fcGdfb3BlcmF0b3Jfb3Byam9p biAtIDFdID0gdHJ1ZTsKIAkJdmFsdWVzW0FudW1fcGdfb3BlcmF0b3Jfb3Byam9pbiAtIDFd ID0gam9pbk9pZDsKIAl9CisJaWYgKHVwZGF0ZVN0YXQpCisJeworCQlyZXBsYWNlc1tBbnVt X3BnX29wZXJhdG9yX29wcnN0YXQgLSAxXSA9IHRydWU7CisJCXZhbHVlc1tBbnVtX3BnX29w ZXJhdG9yX29wcnN0YXQgLSAxXSA9IHN0YXRPaWQ7CisJfQogCiAJdHVwID0gaGVhcF9tb2Rp ZnlfdHVwbGUodHVwLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAogCQkJCQkJCXZhbHVl cywgbnVsbHMsIHJlcGxhY2VzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXgg MTA4OTVmYjI4NzYuLjMwMTVlOTQ5ZGI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3Mu YwpAQCAtNDkxNSw2ICs0OTE1LDMyIEBAIFJlbGVhc2VEdW1teShIZWFwVHVwbGUgdHVwbGUp CiAJcGZyZWUodHVwbGUpOwogfQogCisvKgorICogZXhhbWluZV9vcGVyYXRvcl9leHByZXNz aW9uCisgKgkJVHJ5IHRvIGRlcml2ZSBvcHRpbWl6ZXIgc3RhdGlzdGljcyBmb3IgdGhlIG9w ZXJhdG9yIGV4cHJlc3Npb24gdXNpbmcKKyAqCQlvcGVyYXRvcidzIG9wcnN0YXQgZnVuY3Rp b24uCisgKgorICogWFhYIE5vdCBzdXJlIHdoeSB0aGlzIHJldHVybnMgYm9vbCAtIHdlIGln bm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFueXdheS4gV2UKKyAqIG1pZ2h0IGFzIHdlbGwgcmV0 dXJuIHRoZSBjYWxjdWxhdGVkIHZhcmRhdGEgKG9yIE5VTEwpLgorICoKKyAqIFhYWCBOb3Qg c3VyZSB3aGF0IHRvIGRvIGFib3V0IHJlY3Vyc2lvbiAtIHRoZXJlIGNhbiBiZSBhbm90aGVy IE9wRXhwciBpbgorICogb25lIG9mIHRoZSBhcmd1bWVudHMsIGFuZCB3ZSBzaG91bGQgY2Fs bCB0aGlzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG9wcnN0YXQKKyAqIHByb2NlZHVyZS4gQnV0 IHRoYXQncyBub3QgcG9zc2libGUsIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgc3RhdGljLgor ICovCitzdGF0aWMgYm9vbAorZXhhbWluZV9vcGVyYXRvcl9leHByZXNzaW9uKFBsYW5uZXJJ bmZvICpyb290LCBPcEV4cHIgKm9wZXhwciwgaW50IHZhclJlbGlkLAorCQkJCQkJCVZhcmlh YmxlU3RhdERhdGEgKnZhcmRhdGEpCit7CisJUmVnUHJvY2VkdXJlIG9wcnN0YXQgPSBnZXRf b3Byc3RhdChvcGV4cHItPm9wbm8pOworCisJcmV0dXJuIE9pZElzVmFsaWQob3Byc3RhdCkg JiYKKwkJRGF0dW1HZXRCb29sKE9pZEZ1bmN0aW9uQ2FsbDQob3Byc3RhdCwKKwkJCQkJCQkJ CSAgUG9pbnRlckdldERhdHVtKHJvb3QpLAorCQkJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0o b3BleHByKSwKKwkJCQkJCQkJCSAgSW50MzJHZXREYXR1bSh2YXJSZWxpZCksCisJCQkJCQkJ CQkgIFBvaW50ZXJHZXREYXR1bSh2YXJkYXRhKSkpOworfQorCiAvKgogICogZXhhbWluZV92 YXJpYWJsZQogICoJCVRyeSB0byBsb29rIHVwIHN0YXRpc3RpY2FsIGRhdGEgYWJvdXQgYW4g ZXhwcmVzc2lvbi4KQEAgLTUzMzUsNiArNTM2MSwxOSBAQCBleGFtaW5lX3ZhcmlhYmxlKFBs YW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlLCBpbnQgdmFyUmVsaWQsCiAJCQkJcG9zKys7 CiAJCQl9CiAJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSdzIG5vIGluZGV4IG9yIGV4dGVu ZGVkIHN0YXRpc3RpY3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb24sCisJCSAqIHRyeSBkZXJp dmluZyB0aGUgc3RhdGlzdGljcyBmcm9tIHN0YXRpc3RpY3Mgb24gYXJndW1lbnRzIG9mIHRo ZQorCQkgKiBvcGVyYXRvciBleHByZXNzaW9uIChPcEV4cHIpLiBXZSBkbyB0aGlzIGxhc3Qg YmVjYXVzZSBpdCBtYXkgYmUgcXVpdGUKKwkJICogZXhwZW5zaXZlLCBhbmQgaXQncyB1bmNs ZWFyIGhvdyBhY2N1cmF0ZSB0aGUgc3RhdGlzdGljcyB3aWxsIGJlLgorCQkgKgorCQkgKiBY WFggU2hvdWxkbid0IHRoaXMgcHV0IG1vcmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBPcEV4cHI/ IEUuZy4gdGhhdAorCQkgKiBvbmUgb2YgdGhlIGFyZ3VtZW50cyBoYXMgdG8gYmUgYSBDb25z dCBvciBzb21ldGhpbmc/CisJCSAqLworCQlpZiAoIXZhcmRhdGEtPnN0YXRzVHVwbGUgJiYg SXNBKGJhc2Vub2RlLCBPcEV4cHIpKQorCQkJZXhhbWluZV9vcGVyYXRvcl9leHByZXNzaW9u KHJvb3QsIChPcEV4cHIgKikgYmFzZW5vZGUsIHZhclJlbGlkLAorCQkJCQkJCQkJCXZhcmRh dGEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5 c2NhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwppbmRleCA5 MTc2NTE0YTk2Mi4uNzdhOGIwMTM0N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2xzeXNjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNj YWNoZS5jCkBAIC0xNTY3LDYgKzE1NjcsMzAgQEAgZ2V0X29wcmpvaW4oT2lkIG9wbm8pCiAJ CXJldHVybiAoUmVnUHJvY2VkdXJlKSBJbnZhbGlkT2lkOwogfQogCisvKgorICogZ2V0X29w cnN0YXQKKyAqCisgKgkJUmV0dXJucyBwcm9jZWR1cmUgaWQgZm9yIGVzdGltYXRpbmcgc3Rh dGlzdGljcyBmb3IgYW4gb3BlcmF0b3IuCisgKi8KK1JlZ1Byb2NlZHVyZQorZ2V0X29wcnN0 YXQoT2lkIG9wbm8pCit7CisJSGVhcFR1cGxlCXRwOworCisJdHAgPSBTZWFyY2hTeXNDYWNo ZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvcG5vKSk7CisJaWYgKEhlYXBUdXBsZUlz VmFsaWQodHApKQorCXsKKwkJRm9ybV9wZ19vcGVyYXRvciBvcHR1cCA9IChGb3JtX3BnX29w ZXJhdG9yKSBHRVRTVFJVQ1QodHApOworCQlSZWdQcm9jZWR1cmUgcmVzdWx0OworCisJCXJl c3VsdCA9IG9wdHVwLT5vcHJzdGF0OworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlyZXR1 cm4gcmVzdWx0OworCX0KKwllbHNlCisJCXJldHVybiAoUmVnUHJvY2VkdXJlKSBJbnZhbGlk T2lkOworfQorCiAvKgkJCQktLS0tLS0tLS0tIEZVTkNUSU9OIENBQ0hFIC0tLS0tLS0tLS0J CQkJCSAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVy YXRvci5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5oCmluZGV4IDZhYjYx NTE3YjFlLi43MGQ1ZjcwOTY0ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19vcGVyYXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuaApA QCAtNzMsNiArNzMsOSBAQCBDQVRBTE9HKHBnX29wZXJhdG9yLDI2MTcsT3BlcmF0b3JSZWxh dGlvbklkKQogCiAJLyogT0lEIG9mIGpvaW4gZXN0aW1hdG9yLCBvciAwICovCiAJcmVncHJv YwkJb3Byam9pbiBCS0lfREVGQVVMVCgtKSBCS0lfTE9PS1VQX09QVChwZ19wcm9jKTsKKwor CS8qIE9JRCBvZiBzdGF0aXN0aWNzIGVzdGltYXRvciwgb3IgMCAqLworCXJlZ3Byb2MJCW9w cnN0YXQgQktJX0RFRkFVTFQoLSkgQktJX0xPT0tVUF9PUFQocGdfcHJvYyk7CiB9IEZvcm1E YXRhX3BnX29wZXJhdG9yOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC05NSw2ICs5OCw3 IEBAIGV4dGVybiBPYmplY3RBZGRyZXNzIE9wZXJhdG9yQ3JlYXRlKGNvbnN0IGNoYXIgKm9w ZXJhdG9yTmFtZSwKIAkJCQkJCQkJCUxpc3QgKm5lZ2F0b3JOYW1lLAogCQkJCQkJCQkJT2lk IHJlc3RyaWN0aW9uSWQsCiAJCQkJCQkJCQlPaWQgam9pbklkLAorCQkJCQkJCQkJT2lkIHN0 YXRpc3RpY3NJZCwKIAkJCQkJCQkJCWJvb2wgY2FuTWVyZ2UsCiAJCQkJCQkJCQlib29sIGNh bkhhc2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCmluZGV4IDc3ODcxYWFlZmMzLi4xMmZj MWNhZGM2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBl eHRlcm4gT2lkCWdldF9jb21tdXRhdG9yKE9pZCBvcG5vKTsKIGV4dGVybiBPaWQJZ2V0X25l Z2F0b3IoT2lkIG9wbm8pOwogZXh0ZXJuIFJlZ1Byb2NlZHVyZSBnZXRfb3BycmVzdChPaWQg b3Bubyk7CiBleHRlcm4gUmVnUHJvY2VkdXJlIGdldF9vcHJqb2luKE9pZCBvcG5vKTsKK2V4 dGVybiBSZWdQcm9jZWR1cmUgZ2V0X29wcnN0YXQoT2lkIG9wbm8pOwogZXh0ZXJuIGNoYXIg KmdldF9mdW5jX25hbWUoT2lkIGZ1bmNpZCk7CiBleHRlcm4gT2lkCWdldF9mdW5jX25hbWVz cGFjZShPaWQgZnVuY2lkKTsKIGV4dGVybiBPaWQJZ2V0X2Z1bmNfcmV0dHlwZShPaWQgZnVu Y2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2lkam9pbnMu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vaWRqb2lucy5vdXQKaW5kZXggMjE1 ZWI4OTliZTMuLjExMWVhOTljZGFlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL29pZGpvaW5zLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29p ZGpvaW5zLm91dApAQCAtMTEzLDYgKzExMyw3IEBAIE5PVElDRTogIGNoZWNraW5nIHBnX29w ZXJhdG9yIHtvcHJuZWdhdGV9ID0+IHBnX29wZXJhdG9yIHtvaWR9CiBOT1RJQ0U6ICBjaGVj a2luZyBwZ19vcGVyYXRvciB7b3ByY29kZX0gPT4gcGdfcHJvYyB7b2lkfQogTk9USUNFOiAg Y2hlY2tpbmcgcGdfb3BlcmF0b3Ige29wcnJlc3R9ID0+IHBnX3Byb2Mge29pZH0KIE5PVElD RTogIGNoZWNraW5nIHBnX29wZXJhdG9yIHtvcHJqb2lufSA9PiBwZ19wcm9jIHtvaWR9CitO T1RJQ0U6ICBjaGVja2luZyBwZ19vcGVyYXRvciB7b3Byc3RhdH0gPT4gcGdfcHJvYyB7b2lk fQogTk9USUNFOiAgY2hlY2tpbmcgcGdfb3BmYW1pbHkge29wZm1ldGhvZH0gPT4gcGdfYW0g e29pZH0KIE5PVElDRTogIGNoZWNraW5nIHBnX29wZmFtaWx5IHtvcGZuYW1lc3BhY2V9ID0+ IHBnX25hbWVzcGFjZSB7b2lkfQogTk9USUNFOiAgY2hlY2tpbmcgcGdfb3BmYW1pbHkge29w Zm93bmVyfSA9PiBwZ19hdXRoaWQge29pZH0KLS0gCjIuMzEuMQoK --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/x-patch; charset=UTF-8; name="0002-Add-stats_form_tuple-20220106.patch" Content-Disposition: attachment; filename="0002-Add-stats_form_tuple-20220106.patch" Content-Transfer-Encoding: base64 RnJvbSBlMjc2ODE1NWYwMmI5YzgzYWY3OGM2YjAxMjhhN2U4NmU4OTM2ZjczIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFdlZCwgNyBEZWMgMjAxNiAxNjoxMjo1NSArMDMwMApTdWJqZWN0 OiBbUEFUQ0ggMi82XSBBZGQgc3RhdHNfZm9ybV90dXBsZSgpCgotLS0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jIHwgNTUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmggICAgIHwgMjIgKysrKysrKysr KysrKwogMiBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYwppbmRleCAzMDE1ZTk0OWRiNy4uM2U4ZmM0N2Y2NjIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC03OTU4LDMgKzc5NTgsNTggQEAgYnJpbmNvc3Rl c3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9v cF9jb3VudCwKIAogCSppbmRleFBhZ2VzID0gaW5kZXgtPnBhZ2VzOwogfQorCisvKgorICog c3RhdHNfZm9ybV90dXBsZSAtIEZvcm0gcGdfc3RhdGlzdGljIHR1cGxlIGZyb20gU3RhdHNE YXRhLgorICoKKyAqIElmICdkYXRhJyBwYXJhbWV0ZXIgaXMgTlVMTCwgZm9ybSBhbGwtTlVM TCB0dXBsZSAobnVsbGZyYWMgPSAxLjApLgorICovCitIZWFwVHVwbGUKK3N0YXRzX2Zvcm1f dHVwbGUoU3RhdHNEYXRhICpkYXRhKQoreworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJ dHVwbGU7CisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19zdGF0aXN0aWNdOworCWJvb2wJCW51 bGxzW05hdHRzX3BnX3N0YXRpc3RpY107CisJaW50CQkJaTsKKworCWZvciAoaSA9IDA7IGkg PCBOYXR0c19wZ19zdGF0aXN0aWM7ICsraSkKKwkJbnVsbHNbaV0gPSBmYWxzZTsKKworCXZh bHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFyZWxpZCAtIDFdID0gT2JqZWN0SWRHZXREYXR1 bShJbnZhbGlkT2lkKTsKKwl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhYXR0bnVtIC0g MV0gPSBJbnQxNkdldERhdHVtKDApOworCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFp bmhlcml0IC0gMV0gPSBCb29sR2V0RGF0dW0oZmFsc2UpOworCXZhbHVlc1tBbnVtX3BnX3N0 YXRpc3RpY19zdGFudWxsZnJhYyAtIDFdID0KKwkJCQkJCQkJCUZsb2F0NEdldERhdHVtKGRh dGEgPyBkYXRhLT5udWxsZnJhYyA6IDEuMCk7CisJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGlj X3N0YXdpZHRoIC0gMV0gPQorCQkJCQkJCQkJSW50MzJHZXREYXR1bShkYXRhID8gZGF0YS0+ d2lkdGggOiAwKTsKKwl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhZGlzdGluY3QgLSAx XSA9CisJCQkJCQkJCQlGbG9hdDRHZXREYXR1bShkYXRhID8gZGF0YS0+ZGlzdGluY3QgOiAw KTsKKworCWZvciAoaSA9IDA7IGkgPCBTVEFUSVNUSUNfTlVNX1NMT1RTOyBpKyspCisJewor CQlTdGF0c1Nsb3QgKnNsb3QgPSBkYXRhID8gJmRhdGEtPnNsb3RzW2ldIDogTlVMTDsKKwor CQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rha2luZDEgKyBpIC0gMV0gPQorCQkJCQkJ CQlJbnQxNkdldERhdHVtKHNsb3QgPyBzbG90LT5raW5kIDogMCk7CisKKwkJdmFsdWVzW0Fu dW1fcGdfc3RhdGlzdGljX3N0YW9wMSArIGkgLSAxXSA9CisJCQkJCU9iamVjdElkR2V0RGF0 dW0oc2xvdCA/IHNsb3QtPm9waWQgOiBJbnZhbGlkT2lkKTsKKworCQlpZiAoc2xvdCAmJiBE YXR1bUdldFBvaW50ZXIoc2xvdC0+bnVtYmVycykpCisJCQl2YWx1ZXNbQW51bV9wZ19zdGF0 aXN0aWNfc3RhbnVtYmVyczEgKyBpIC0gMV0gPSBzbG90LT5udW1iZXJzOworCQllbHNlCisJ CQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJzMSArIGkgLSAxXSA9IHRydWU7 CisKKwkJaWYgKHNsb3QgJiYgRGF0dW1HZXRQb2ludGVyKHNsb3QtPnZhbHVlcykpCisJCQl2 YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSArIGkgLSAxXSA9IHNsb3QtPnZh bHVlczsKKwkJZWxzZQorCQkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSAr IGkgLSAxXSA9IHRydWU7CisJfQorCisJcmVsID0gdGFibGVfb3BlbihTdGF0aXN0aWNSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKFJl bGF0aW9uR2V0RGVzY3IocmVsKSwgdmFsdWVzLCBudWxscyk7CisJdGFibGVfY2xvc2UocmVs LCBOb0xvY2spOworCisJcmV0dXJuIHR1cGxlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvc2VsZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKaW5k ZXggOWRkNDQ0ZTFmZjUuLmI5MGUwNWI4NzA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9zZWxmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKQEAg LTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgU0VMRlVOQ1NfSAogCiAjaW5jbHVkZSAiYWNjZXNz L2h0dXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpYy5oIgogI2luY2x1ZGUg ImZtZ3IuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKIApAQCAtMTMzLDYgKzEz NCwyNCBAQCB0eXBlZGVmIHN0cnVjdAogCWRvdWJsZQkJbnVtX3NhX3NjYW5zOwkvKiAjIGlu ZGV4c2NhbnMgZnJvbSBTY2FsYXJBcnJheU9wRXhwcnMgKi8KIH0gR2VuZXJpY0Nvc3RzOwog CisvKiBTaW5nbGUgcGdfc3RhdGlzdGljIHNsb3QgKi8KK3R5cGVkZWYgc3RydWN0IFN0YXRz U2xvdAoreworCWludDE2CWtpbmQ7CQkvKiBzdGFraW5kTjogc3RhdGlzdGljIGtpbmQgKFNU QVRJU1RJQ19LSU5EX1hYWCkgKi8KKwlPaWQJCW9waWQ7CQkvKiBzdGFvcE46IGFzc29jaWF0 ZWQgb3BlcmF0b3IsIGlmIG5lZWRlZCAqLworCURhdHVtCW51bWJlcnM7CS8qIHN0YW51bWJl cnNOOiBmbG9hdDQgYXJyYXkgb2YgbnVtYmVycyAqLworCURhdHVtCXZhbHVlczsJCS8qIHN0 YXZhbHVlc046IGFueWFycmF5IG9mIHZhbHVlcyAqLworfSBTdGF0c1Nsb3Q7CisKKy8qIERl Zm9ybWVkIHBnX3N0YXRpc3RpYyB0dXBsZSAqLwordHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRh Cit7CisJZmxvYXQ0CQludWxsZnJhYzsJLyogc3RhbnVsbGZyYWM6IGZyYWN0aW9uIG9mIE5V TEwgdmFsdWVzICAqLworCWZsb2F0NAkJZGlzdGluY3Q7CS8qIHN0YWRpc3RpbmN0OiBudW1i ZXIgb2YgZGlzdGluY3Qgbm9uLU5VTEwgdmFsdWVzICovCisJaW50MzIJCXdpZHRoOwkJLyog c3Rhd2lkdGg6IGF2ZXJhZ2Ugd2lkdGggaW4gYnl0ZXMgb2Ygbm9uLU5VTEwgdmFsdWVzICov CisJU3RhdHNTbG90CXNsb3RzW1NUQVRJU1RJQ19OVU1fU0xPVFNdOyAvKiBzbG90cyBmb3Ig ZGlmZmVyZW50IHN0YXRpc3RpYyB0eXBlcyAqLworfSBTdGF0c0RhdGE7CisKIC8qIEhvb2tz IGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIHdoZW4gd2UgYXNrIGZvciBzdGF0cyAqLwog dHlwZWRlZiBib29sICgqZ2V0X3JlbGF0aW9uX3N0YXRzX2hvb2tfdHlwZSkgKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJCQkgIFJhbmdlVGJsRW50cnkgKnJ0ZSwKQEAgLTIzMSw2 ICsyNTAsOSBAQCBleHRlcm4gdm9pZCBnZW5lcmljY29zdGVzdGltYXRlKFBsYW5uZXJJbmZv ICpyb290LCBJbmRleFBhdGggKnBhdGgsCiAJCQkJCQkJCWRvdWJsZSBsb29wX2NvdW50LAog CQkJCQkJCQlHZW5lcmljQ29zdHMgKmNvc3RzKTsKIAorZXh0ZXJuIEhlYXBUdXBsZSBzdGF0 c19mb3JtX3R1cGxlKFN0YXRzRGF0YSAqZGF0YSk7CisKKwogLyogRnVuY3Rpb25zIGluIGFy cmF5X3NlbGZ1bmNzLmMgKi8KIAogZXh0ZXJuIFNlbGVjdGl2aXR5IHNjYWxhcmFycmF5c2Vs X2NvbnRhaW5tZW50KFBsYW5uZXJJbmZvICpyb290LAotLSAKMi4zMS4xCgo= --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-symbolic-names-for-some-jsonb-operators-20220106.patch" Content-Disposition: attachment; filename*0="0003-Add-symbolic-names-for-some-jsonb-operators-20220106.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0N2U0NWNlN2FhYzhkNDdjMGFhNGE1NjNlYmU0NjYzZDBmYzU2NDQxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFNhdCwgMTIgTm92IDIwMTYgMTg6NTk6NDMgKzAzMDAKU3ViamVj dDogW1BBVENIIDMvNl0gQWRkIHN5bWJvbGljIG5hbWVzIGZvciBzb21lIGpzb25iIG9wZXJh dG9ycwoKLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9yLmRhdCB8IDQ1ICsr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0 aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19vcGVyYXRvci5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9y LmRhdAppbmRleCAyYmM3Y2MzNTQ4NC4uYzBmZjhkYTcyMmMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfb3BlcmF0b3IuZGF0CkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogeyBvaWQgPT4gJzE3 NTEnLCBkZXNjciA9PiAnbmVnYXRlJywKICAgb3BybmFtZSA9PiAnLScsIG9wcmtpbmQgPT4g J2wnLCBvcHJsZWZ0ID0+ICcwJywgb3BycmlnaHQgPT4gJ251bWVyaWMnLAogICBvcHJyZXN1 bHQgPT4gJ251bWVyaWMnLCBvcHJjb2RlID0+ICdudW1lcmljX3VtaW51cycgfSwKLXsgb2lk ID0+ICcxNzUyJywgZGVzY3IgPT4gJ2VxdWFsJywKK3sgb2lkID0+ICcxNzUyJywgb2lkX3N5 bWJvbCA9PiAnTnVtZXJpY0VxT3BlcmF0b3InLCBkZXNjciA9PiAnZXF1YWwnLAogICBvcHJu YW1lID0+ICc9Jywgb3ByY2FubWVyZ2UgPT4gJ3QnLCBvcHJjYW5oYXNoID0+ICd0Jywgb3By bGVmdCA9PiAnbnVtZXJpYycsCiAgIG9wcnJpZ2h0ID0+ICdudW1lcmljJywgb3BycmVzdWx0 ID0+ICdib29sJywgb3ByY29tID0+ICc9KG51bWVyaWMsbnVtZXJpYyknLAogICBvcHJuZWdh dGUgPT4gJzw+KG51bWVyaWMsbnVtZXJpYyknLCBvcHJjb2RlID0+ICdudW1lcmljX2VxJywK QEAgLTIwNzcsNyArMjA3Nyw3IEBACiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9 PiAnPD4obnVtZXJpYyxudW1lcmljKScsCiAgIG9wcm5lZ2F0ZSA9PiAnPShudW1lcmljLG51 bWVyaWMpJywgb3ByY29kZSA9PiAnbnVtZXJpY19uZScsCiAgIG9wcnJlc3QgPT4gJ25lcXNl bCcsIG9wcmpvaW4gPT4gJ25lcWpvaW5zZWwnIH0sCi17IG9pZCA9PiAnMTc1NCcsIGRlc2Ny ID0+ICdsZXNzIHRoYW4nLAoreyBvaWQgPT4gJzE3NTQnLCBvaWRfc3ltYm9sID0+ICdOdW1l cmljTHRPcGVyYXRvcicsIGRlc2NyID0+ICdsZXNzIHRoYW4nLAogICBvcHJuYW1lID0+ICc8 Jywgb3BybGVmdCA9PiAnbnVtZXJpYycsIG9wcnJpZ2h0ID0+ICdudW1lcmljJywKICAgb3By cmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+KG51bWVyaWMsbnVtZXJpYyknLAogICBv cHJuZWdhdGUgPT4gJz49KG51bWVyaWMsbnVtZXJpYyknLCBvcHJjb2RlID0+ICdudW1lcmlj X2x0JywKQEAgLTMxNzIsNzAgKzMxNzIsNzcgQEAKIHsgb2lkID0+ICczOTY3JywgZGVzY3Ig PT4gJ2dldCB2YWx1ZSBmcm9tIGpzb24gYXMgdGV4dCB3aXRoIHBhdGggZWxlbWVudHMnLAog ICBvcHJuYW1lID0+ICcjPj4nLCBvcHJsZWZ0ID0+ICdqc29uJywgb3BycmlnaHQgPT4gJ190 ZXh0Jywgb3BycmVzdWx0ID0+ICd0ZXh0JywKICAgb3ByY29kZSA9PiAnanNvbl9leHRyYWN0 X3BhdGhfdGV4dCcgfSwKLXsgb2lkID0+ICczMjExJywgZGVzY3IgPT4gJ2dldCBqc29uYiBv YmplY3QgZmllbGQnLAoreyBvaWQgPT4gJzMyMTEnLCBvaWRfc3ltYm9sID0+ICdKc29uYk9i amVjdEZpZWxkT3BlcmF0b3InLAorICBkZXNjciA9PiAnZ2V0IGpzb25iIG9iamVjdCBmaWVs ZCcsCiAgIG9wcm5hbWUgPT4gJy0+Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9 PiAndGV4dCcsIG9wcnJlc3VsdCA9PiAnanNvbmInLAogICBvcHJjb2RlID0+ICdqc29uYl9v YmplY3RfZmllbGQnIH0sCi17IG9pZCA9PiAnMzQ3NycsIGRlc2NyID0+ICdnZXQganNvbmIg b2JqZWN0IGZpZWxkIGFzIHRleHQnLAoreyBvaWQgPT4gJzM0NzcnLCBvaWRfc3ltYm9sID0+ ICdKc29uYk9iamVjdEZpZWxkVGV4dE9wZXJhdG9yJywKKyAgZGVzY3IgPT4gJ2dldCBqc29u YiBvYmplY3QgZmllbGQgYXMgdGV4dCcsCiAgIG9wcm5hbWUgPT4gJy0+PicsIG9wcmxlZnQg PT4gJ2pzb25iJywgb3BycmlnaHQgPT4gJ3RleHQnLCBvcHJyZXN1bHQgPT4gJ3RleHQnLAog ICBvcHJjb2RlID0+ICdqc29uYl9vYmplY3RfZmllbGRfdGV4dCcgfSwKLXsgb2lkID0+ICcz MjEyJywgZGVzY3IgPT4gJ2dldCBqc29uYiBhcnJheSBlbGVtZW50JywKK3sgb2lkID0+ICcz MjEyJywgb2lkX3N5bWJvbCA9PiAnSnNvbmJBcnJheUVsZW1lbnRPcGVyYXRvcicsCisgIGRl c2NyID0+ICdnZXQganNvbmIgYXJyYXkgZWxlbWVudCcsCiAgIG9wcm5hbWUgPT4gJy0+Jywg b3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9PiAnaW50NCcsIG9wcnJlc3VsdCA9PiAn anNvbmInLAogICBvcHJjb2RlID0+ICdqc29uYl9hcnJheV9lbGVtZW50JyB9LAoteyBvaWQg PT4gJzM0ODEnLCBkZXNjciA9PiAnZ2V0IGpzb25iIGFycmF5IGVsZW1lbnQgYXMgdGV4dCcs Cit7IG9pZCA9PiAnMzQ4MScsIG9pZF9zeW1ib2wgPT4gJ0pzb25iQXJyYXlFbGVtZW50VGV4 dE9wZXJhdG9yJywKKyAgZGVzY3IgPT4gJ2dldCBqc29uYiBhcnJheSBlbGVtZW50IGFzIHRl eHQnLAogICBvcHJuYW1lID0+ICctPj4nLCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJpZ2h0 ID0+ICdpbnQ0Jywgb3BycmVzdWx0ID0+ICd0ZXh0JywKICAgb3ByY29kZSA9PiAnanNvbmJf YXJyYXlfZWxlbWVudF90ZXh0JyB9LAoteyBvaWQgPT4gJzMyMTMnLCBkZXNjciA9PiAnZ2V0 IHZhbHVlIGZyb20ganNvbmIgd2l0aCBwYXRoIGVsZW1lbnRzJywKK3sgb2lkID0+ICczMjEz Jywgb2lkX3N5bWJvbCA9PiAnSnNvbmJFeHRyYWN0UGF0aE9wZXJhdG9yJywKKyAgZGVzY3Ig PT4gJ2dldCB2YWx1ZSBmcm9tIGpzb25iIHdpdGggcGF0aCBlbGVtZW50cycsCiAgIG9wcm5h bWUgPT4gJyM+Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9PiAnX3RleHQnLAog ICBvcHJyZXN1bHQgPT4gJ2pzb25iJywgb3ByY29kZSA9PiAnanNvbmJfZXh0cmFjdF9wYXRo JyB9LAoteyBvaWQgPT4gJzMyMDYnLCBkZXNjciA9PiAnZ2V0IHZhbHVlIGZyb20ganNvbmIg YXMgdGV4dCB3aXRoIHBhdGggZWxlbWVudHMnLAoreyBvaWQgPT4gJzMyMDYnLCBvaWRfc3lt Ym9sID0+ICdKc29uYkV4dHJhY3RQYXRoVGV4dE9wZXJhdG9yJywKKyAgZGVzY3IgPT4gJ2dl dCB2YWx1ZSBmcm9tIGpzb25iIGFzIHRleHQgd2l0aCBwYXRoIGVsZW1lbnRzJywKICAgb3By bmFtZSA9PiAnIz4+Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9PiAnX3RleHQn LAogICBvcHJyZXN1bHQgPT4gJ3RleHQnLCBvcHJjb2RlID0+ICdqc29uYl9leHRyYWN0X3Bh dGhfdGV4dCcgfSwKLXsgb2lkID0+ICczMjQwJywgZGVzY3IgPT4gJ2VxdWFsJywKK3sgb2lk ID0+ICczMjQwJywgb2lkX3N5bWJvbCA9PiAnSnNvbmJFcU9wZXJhdG9yJywgZGVzY3IgPT4g J2VxdWFsJywKICAgb3BybmFtZSA9PiAnPScsIG9wcmNhbm1lcmdlID0+ICd0Jywgb3ByY2Fu aGFzaCA9PiAndCcsIG9wcmxlZnQgPT4gJ2pzb25iJywKICAgb3BycmlnaHQgPT4gJ2pzb25i Jywgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc9KGpzb25iLGpzb25iKScsCiAg IG9wcm5lZ2F0ZSA9PiAnPD4oanNvbmIsanNvbmIpJywgb3ByY29kZSA9PiAnanNvbmJfZXEn LCBvcHJyZXN0ID0+ICdlcXNlbCcsCiAgIG9wcmpvaW4gPT4gJ2Vxam9pbnNlbCcgfSwKLXsg b2lkID0+ICczMjQxJywgZGVzY3IgPT4gJ25vdCBlcXVhbCcsCit7IG9pZCA9PiAnMzI0MScs IG9pZF9zeW1ib2wgPT4gJ0pzb25iTmVPcGVyYXRvcicsIGRlc2NyID0+ICdub3QgZXF1YWwn LAogICBvcHJuYW1lID0+ICc8PicsIG9wcmxlZnQgPT4gJ2pzb25iJywgb3BycmlnaHQgPT4g J2pzb25iJywgb3BycmVzdWx0ID0+ICdib29sJywKICAgb3ByY29tID0+ICc8Pihqc29uYixq c29uYiknLCBvcHJuZWdhdGUgPT4gJz0oanNvbmIsanNvbmIpJywKICAgb3ByY29kZSA9PiAn anNvbmJfbmUnLCBvcHJyZXN0ID0+ICduZXFzZWwnLCBvcHJqb2luID0+ICduZXFqb2luc2Vs JyB9LAoteyBvaWQgPT4gJzMyNDInLCBkZXNjciA9PiAnbGVzcyB0aGFuJywKK3sgb2lkID0+ ICczMjQyJywgb2lkX3N5bWJvbCA9PiAnSnNvbmJMdE9wZXJhdG9yJywgZGVzY3IgPT4gJ2xl c3MgdGhhbicsCiAgIG9wcm5hbWUgPT4gJzwnLCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJp Z2h0ID0+ICdqc29uYicsIG9wcnJlc3VsdCA9PiAnYm9vbCcsCiAgIG9wcmNvbSA9PiAnPihq c29uYixqc29uYiknLCBvcHJuZWdhdGUgPT4gJz49KGpzb25iLGpzb25iKScsCiAgIG9wcmNv ZGUgPT4gJ2pzb25iX2x0Jywgb3BycmVzdCA9PiAnc2NhbGFybHRzZWwnLAogICBvcHJqb2lu ID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCi17IG9pZCA9PiAnMzI0MycsIGRlc2NyID0+ICdn cmVhdGVyIHRoYW4nLAoreyBvaWQgPT4gJzMyNDMnLCBvaWRfc3ltYm9sID0+ICdKc29uYkd0 T3BlcmF0b3InLCBkZXNjciA9PiAnZ3JlYXRlciB0aGFuJywKICAgb3BybmFtZSA9PiAnPics IG9wcmxlZnQgPT4gJ2pzb25iJywgb3BycmlnaHQgPT4gJ2pzb25iJywgb3BycmVzdWx0ID0+ ICdib29sJywKICAgb3ByY29tID0+ICc8KGpzb25iLGpzb25iKScsIG9wcm5lZ2F0ZSA9PiAn PD0oanNvbmIsanNvbmIpJywKICAgb3ByY29kZSA9PiAnanNvbmJfZ3QnLCBvcHJyZXN0ID0+ ICdzY2FsYXJndHNlbCcsCiAgIG9wcmpvaW4gPT4gJ3NjYWxhcmd0am9pbnNlbCcgfSwKLXsg b2lkID0+ICczMjQ0JywgZGVzY3IgPT4gJ2xlc3MgdGhhbiBvciBlcXVhbCcsCit7IG9pZCA9 PiAnMzI0NCcsIG9pZF9zeW1ib2wgPT4gJ0pzb25iTGVPcGVyYXRvcicsIGRlc2NyID0+ICds ZXNzIHRoYW4gb3IgZXF1YWwnLAogICBvcHJuYW1lID0+ICc8PScsIG9wcmxlZnQgPT4gJ2pz b25iJywgb3BycmlnaHQgPT4gJ2pzb25iJywgb3BycmVzdWx0ID0+ICdib29sJywKICAgb3By Y29tID0+ICc+PShqc29uYixqc29uYiknLCBvcHJuZWdhdGUgPT4gJz4oanNvbmIsanNvbmIp JywKICAgb3ByY29kZSA9PiAnanNvbmJfbGUnLCBvcHJyZXN0ID0+ICdzY2FsYXJsZXNlbCcs CiAgIG9wcmpvaW4gPT4gJ3NjYWxhcmxlam9pbnNlbCcgfSwKLXsgb2lkID0+ICczMjQ1Jywg ZGVzY3IgPT4gJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCcsCit7IG9pZCA9PiAnMzI0NScsIG9p ZF9zeW1ib2wgPT4gJ0pzb25iR2VPcGVyYXRvcicsCisgIGRlc2NyID0+ICdncmVhdGVyIHRo YW4gb3IgZXF1YWwnLAogICBvcHJuYW1lID0+ICc+PScsIG9wcmxlZnQgPT4gJ2pzb25iJywg b3BycmlnaHQgPT4gJ2pzb25iJywgb3BycmVzdWx0ID0+ICdib29sJywKICAgb3ByY29tID0+ ICc8PShqc29uYixqc29uYiknLCBvcHJuZWdhdGUgPT4gJzwoanNvbmIsanNvbmIpJywKICAg b3ByY29kZSA9PiAnanNvbmJfZ2UnLCBvcHJyZXN0ID0+ICdzY2FsYXJnZXNlbCcsCiAgIG9w cmpvaW4gPT4gJ3NjYWxhcmdlam9pbnNlbCcgfSwKLXsgb2lkID0+ICczMjQ2JywgZGVzY3Ig PT4gJ2NvbnRhaW5zJywKK3sgb2lkID0+ICczMjQ2Jywgb2lkX3N5bWJvbCA9PiAnSnNvbmJD b250YWluc09wZXJhdG9yJywgZGVzY3IgPT4gJ2NvbnRhaW5zJywKICAgb3BybmFtZSA9PiAn QD4nLCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJpZ2h0ID0+ICdqc29uYicsIG9wcnJlc3Vs dCA9PiAnYm9vbCcsCiAgIG9wcmNvbSA9PiAnPEAoanNvbmIsanNvbmIpJywgb3ByY29kZSA9 PiAnanNvbmJfY29udGFpbnMnLAogICBvcHJyZXN0ID0+ICdtYXRjaGluZ3NlbCcsIG9wcmpv aW4gPT4gJ21hdGNoaW5nam9pbnNlbCcgfSwKLXsgb2lkID0+ICczMjQ3JywgZGVzY3IgPT4g J2tleSBleGlzdHMnLAoreyBvaWQgPT4gJzMyNDcnLCBvaWRfc3ltYm9sID0+ICdKc29uYkV4 aXN0c09wZXJhdG9yJywgZGVzY3IgPT4gJ2tleSBleGlzdHMnLAogICBvcHJuYW1lID0+ICc/ Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9PiAndGV4dCcsIG9wcnJlc3VsdCA9 PiAnYm9vbCcsCiAgIG9wcmNvZGUgPT4gJ2pzb25iX2V4aXN0cycsIG9wcnJlc3QgPT4gJ21h dGNoaW5nc2VsJywKICAgb3Byam9pbiA9PiAnbWF0Y2hpbmdqb2luc2VsJyB9LAoteyBvaWQg PT4gJzMyNDgnLCBkZXNjciA9PiAnYW55IGtleSBleGlzdHMnLAoreyBvaWQgPT4gJzMyNDgn LCBvaWRfc3ltYm9sID0+ICdKc29uYkV4aXN0c0FueU9wZXJhdG9yJywgZGVzY3IgPT4gJ2Fu eSBrZXkgZXhpc3RzJywKICAgb3BybmFtZSA9PiAnP3wnLCBvcHJsZWZ0ID0+ICdqc29uYics IG9wcnJpZ2h0ID0+ICdfdGV4dCcsIG9wcnJlc3VsdCA9PiAnYm9vbCcsCiAgIG9wcmNvZGUg PT4gJ2pzb25iX2V4aXN0c19hbnknLCBvcHJyZXN0ID0+ICdtYXRjaGluZ3NlbCcsCiAgIG9w cmpvaW4gPT4gJ21hdGNoaW5nam9pbnNlbCcgfSwKLXsgb2lkID0+ICczMjQ5JywgZGVzY3Ig PT4gJ2FsbCBrZXlzIGV4aXN0JywKK3sgb2lkID0+ICczMjQ5Jywgb2lkX3N5bWJvbCA9PiAn SnNvbmJFeGlzdHNBbGxPcGVyYXRvcicsIGRlc2NyID0+ICdhbGwga2V5cyBleGlzdCcsCiAg IG9wcm5hbWUgPT4gJz8mJywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9PiAnX3Rl eHQnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLAogICBvcHJjb2RlID0+ICdqc29uYl9leGlzdHNf YWxsJywgb3BycmVzdCA9PiAnbWF0Y2hpbmdzZWwnLAogICBvcHJqb2luID0+ICdtYXRjaGlu Z2pvaW5zZWwnIH0sCi17IG9pZCA9PiAnMzI1MCcsIGRlc2NyID0+ICdpcyBjb250YWluZWQg YnknLAoreyBvaWQgPT4gJzMyNTAnLCBvaWRfc3ltYm9sID0+ICdKc29uYkNvbnRhaW5lZE9w ZXJhdG9yJywgZGVzY3IgPT4gJ2lzIGNvbnRhaW5lZCBieScsCiAgIG9wcm5hbWUgPT4gJzxA Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdodCA9PiAnanNvbmInLCBvcHJyZXN1bHQg PT4gJ2Jvb2wnLAogICBvcHJjb20gPT4gJ0A+KGpzb25iLGpzb25iKScsIG9wcmNvZGUgPT4g J2pzb25iX2NvbnRhaW5lZCcsCiAgIG9wcnJlc3QgPT4gJ21hdGNoaW5nc2VsJywgb3Byam9p biA9PiAnbWF0Y2hpbmdqb2luc2VsJyB9LAotLSAKMi4zMS4xCgo= --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/x-patch; charset=UTF-8; name="0004-Add-helper-jsonb-functions-and-macros-20220106.patch" Content-Disposition: attachment; filename*0="0004-Add-helper-jsonb-functions-and-macros-20220106.patch" Content-Transfer-Encoding: base64 RnJvbSA3N2I1MGEzODIzMzhjZTI5Y2I5NjM3MDZkMjlkZTNmYTZhNWEzNTE0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IEZyaSwgMTYgRGVjIDIwMTYgMTc6MTY6NDcgKzAzMDAKU3ViamVj dDogW1BBVENIIDQvNl0gQWRkIGhlbHBlciBqc29uYiBmdW5jdGlvbnMgYW5kIG1hY3JvcwoK LS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdXRpbC5jIHwgIDI3ICsrKysrCiBz cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgIHwgIDEwICstCiBzcmMvaW5jbHVk ZS91dGlscy9qc29uYi5oICAgICAgICAgIHwgMTY2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDE5NiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYl91dGlsLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdXRpbC5jCmluZGV4IDU3MTExODc3OTU5 Li44NTM4ZmM2YzM3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25i X3V0aWwuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdXRpbC5jCkBAIC0z ODgsNiArMzg4LDIyIEBAIGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihKc29uYkNvbnRh aW5lciAqY29udGFpbmVyLCB1aW50MzIgZmxhZ3MsCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8q CisgKiBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoKSB3cmFwcGVyIHRoYXQgc2V0cyB1 cCBKc29uYlZhbHVlIGtleSBzdHJpbmcuCisgKi8KK0pzb25iVmFsdWUgKgorZmluZEpzb25i VmFsdWVGcm9tQ29udGFpbmVyTGVuKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIHVpbnQz MiBmbGFncywKKwkJCQkJCQkgICBjb25zdCBjaGFyICprZXksIHVpbnQzMiBrZXlsZW4pCit7 CisJSnNvbmJWYWx1ZQlrOworCisJay50eXBlID0gamJ2U3RyaW5nOworCWsudmFsLnN0cmlu Zy52YWwgPSBrZXk7CisJay52YWwuc3RyaW5nLmxlbiA9IGtleWxlbjsKKworCXJldHVybiBm aW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBmbGFncywgJmspOworfQor CiAvKgogICogRmluZCB2YWx1ZSBieSBrZXkgaW4gSnNvbmIgb2JqZWN0IGFuZCBmZXRjaCBp dCBpbnRvICdyZXMnLCB3aGljaCBpcyBhbHNvCiAgKiByZXR1cm5lZC4KQEAgLTYwMiw2ICs2 MTgsMTcgQEAgcHVzaEpzb25iVmFsdWUoSnNvbmJQYXJzZVN0YXRlICoqcHN0YXRlLCBKc29u Ykl0ZXJhdG9yVG9rZW4gc2VxLAogCQlyZXR1cm4gcHVzaEpzb25iVmFsdWVTY2FsYXIocHN0 YXRlLCBzZXEsIGpidmFsKTsKIAl9CiAKKwkvKgorCSAqIFhYWCBJJ20gbm90IHF1aXRlIHN1 cmUgd2h5IHdlIGFjdHVhbGx5IGRvIHRoaXM/IFdoeSBkbyB3ZSBuZWVkIHRvIGNoYW5nZQor CSAqIGhvdyBKc29uYlZhbHVlIGlzIGNvbnZlcnRlZCB0byBKc29uYiBmb3IgdGhlIHN0YXRp c3RpY3MgcGF0Y2g/CisJICovCisJLyogcHVzaCB2YWx1ZSBmcm9tIHNjYWxhciBjb250YWlu ZXIgd2l0aG91dCBpdHMgZW5jbG9zaW5nIGFycmF5ICovCisJaWYgKCpwc3RhdGUgJiYgSnNv bmJFeHRyYWN0U2NhbGFyKGpidmFsLT52YWwuYmluYXJ5LmRhdGEsICZ2KSkKKwl7CisJCUFz c2VydChJc0FKc29uYlNjYWxhcigmdikpOworCQlyZXR1cm4gcHVzaEpzb25iVmFsdWVTY2Fs YXIocHN0YXRlLCBzZXEsICZ2KTsKKwl9CisKIAkvKiB1bnBhY2sgdGhlIGJpbmFyeSBhbmQg YWRkIGVhY2ggcGllY2UgdG8gdGhlIHBzdGF0ZSAqLwogCWl0ID0gSnNvbmJJdGVyYXRvcklu aXQoamJ2YWwtPnZhbC5iaW5hcnkuZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVu Y3MuYwppbmRleCA2MzM1ODQ1ZDA4ZS4uYWRmYWE4ZWM1Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbmZ1bmNzLmMKQEAgLTUzNzEsNyArNTM3MSw4IEBAIGl0ZXJhdGVfanNvbmJfdmFs dWVzKEpzb25iICpqYiwgdWludDMyIGZsYWdzLCB2b2lkICpzdGF0ZSwKIAkJaWYgKHR5cGUg PT0gV0pCX0tFWSkKIAkJewogCQkJaWYgKGZsYWdzICYganRpS2V5KQotCQkJCWFjdGlvbihz dGF0ZSwgdi52YWwuc3RyaW5nLnZhbCwgdi52YWwuc3RyaW5nLmxlbik7CisJCQkJYWN0aW9u KHN0YXRlLCB1bmNvbnN0aWZ5KGNoYXIgKiwgdi52YWwuc3RyaW5nLnZhbCksCisJCQkJCSAg IHYudmFsLnN0cmluZy5sZW4pOwogCiAJCQljb250aW51ZTsKIAkJfQpAQCAtNTM4Niw3ICs1 Mzg3LDggQEAgaXRlcmF0ZV9qc29uYl92YWx1ZXMoSnNvbmIgKmpiLCB1aW50MzIgZmxhZ3Ms IHZvaWQgKnN0YXRlLAogCQl7CiAJCQljYXNlIGpidlN0cmluZzoKIAkJCQlpZiAoZmxhZ3Mg JiBqdGlTdHJpbmcpCi0JCQkJCWFjdGlvbihzdGF0ZSwgdi52YWwuc3RyaW5nLnZhbCwgdi52 YWwuc3RyaW5nLmxlbik7CisJCQkJCWFjdGlvbihzdGF0ZSwgdW5jb25zdGlmeShjaGFyICos IHYudmFsLnN0cmluZy52YWwpLAorCQkJCQkJICAgdi52YWwuc3RyaW5nLmxlbik7CiAJCQkJ YnJlYWs7CiAJCQljYXNlIGpidk51bWVyaWM6CiAJCQkJaWYgKGZsYWdzICYganRpTnVtZXJp YykKQEAgLTU1MDgsNyArNTUxMCw5IEBAIHRyYW5zZm9ybV9qc29uYl9zdHJpbmdfdmFsdWVz KEpzb25iICpqc29uYiwgdm9pZCAqYWN0aW9uX3N0YXRlLAogCXsKIAkJaWYgKCh0eXBlID09 IFdKQl9WQUxVRSB8fCB0eXBlID09IFdKQl9FTEVNKSAmJiB2LnR5cGUgPT0gamJ2U3RyaW5n KQogCQl7Ci0JCQlvdXQgPSB0cmFuc2Zvcm1fYWN0aW9uKGFjdGlvbl9zdGF0ZSwgdi52YWwu c3RyaW5nLnZhbCwgdi52YWwuc3RyaW5nLmxlbik7CisJCQlvdXQgPSB0cmFuc2Zvcm1fYWN0 aW9uKGFjdGlvbl9zdGF0ZSwKKwkJCQkJCQkJICAgdW5jb25zdGlmeShjaGFyICosIHYudmFs LnN0cmluZy52YWwpLAorCQkJCQkJCQkgICB2LnZhbC5zdHJpbmcubGVuKTsKIAkJCXYudmFs LnN0cmluZy52YWwgPSBWQVJEQVRBX0FOWShvdXQpOwogCQkJdi52YWwuc3RyaW5nLmxlbiA9 IFZBUlNJWkVfQU5ZX0VYSERSKG91dCk7CiAJCQlyZXMgPSBwdXNoSnNvbmJWYWx1ZSgmc3Qs IHR5cGUsIHR5cGUgPCBXSkJfQkVHSU5fQVJSQVkgPyAmdiA6IE5VTEwpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25i LmgKaW5kZXggNGUwN2RlYmY3ODUuLjk1Y2VjYjYzY2U3IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9qc29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKQEAg LTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL251bWVyaWMuaCIKIAogLyogVG9rZW5zIHVzZWQgd2hlbiBzZXF1ZW50aWFs bHkgcHJvY2Vzc2luZyBhIGpzb25iIHZhbHVlICovCkBAIC0yMjksOCArMjMwLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QKICNkZWZpbmUgSkJfUk9PVF9JU19PQkpFQ1QoamJwXykgKCgqKHVpbnQz MiAqKSBWQVJEQVRBKGpicF8pICYgSkJfRk9CSkVDVCkgIT0gMCkKICNkZWZpbmUgSkJfUk9P VF9JU19BUlJBWShqYnBfKQkoKCoodWludDMyICopIFZBUkRBVEEoamJwXykgJiBKQl9GQVJS QVkpICE9IDApCiAKLQotZW51bSBqYnZUeXBlCit0eXBlZGVmIGVudW0gamJ2VHlwZQogewog CS8qIFNjYWxhciB0eXBlcyAqLwogCWpidk51bGwgPSAweDAsCkBAIC0yNTAsNyArMjUwLDcg QEAgZW51bSBqYnZUeXBlCiAJICogaW50byBKU09OIHN0cmluZ3Mgd2hlbiBvdXRwdXR0ZWQg dG8ganNvbi9qc29uYi4KIAkgKi8KIAlqYnZEYXRldGltZSA9IDB4MjAsCi19OworfSBKc29u YlZhbHVlVHlwZTsKIAogLyoKICAqIEpzb25iVmFsdWU6CUluLW1lbW9yeSByZXByZXNlbnRh dGlvbiBvZiBKc29uYi4gIFRoaXMgaXMgYSBjb252ZW5pZW50CkBAIC0yNjksNyArMjY5LDcg QEAgc3RydWN0IEpzb25iVmFsdWUKIAkJc3RydWN0CiAJCXsKIAkJCWludAkJCWxlbjsKLQkJ CWNoYXIJICAgKnZhbDsJLyogTm90IG5lY2Vzc2FyaWx5IG51bGwtdGVybWluYXRlZCAqLwor CQkJY29uc3QgY2hhciAqdmFsOwkvKiBOb3QgbmVjZXNzYXJpbHkgbnVsbC10ZXJtaW5hdGVk ICovCiAJCX0JCQlzdHJpbmc7CQkvKiBTdHJpbmcgcHJpbWl0aXZlIHR5cGUgKi8KIAogCQlz dHJ1Y3QKQEAgLTM4Miw2ICszODIsMTAgQEAgZXh0ZXJuIGludAljb21wYXJlSnNvbmJDb250 YWluZXJzKEpzb25iQ29udGFpbmVyICphLCBKc29uYkNvbnRhaW5lciAqYik7CiBleHRlcm4g SnNvbmJWYWx1ZSAqZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKEpzb25iQ29udGFpbmVy ICpzaGVhZGVyLAogCQkJCQkJCQkJCQkgICB1aW50MzIgZmxhZ3MsCiAJCQkJCQkJCQkJCSAg IEpzb25iVmFsdWUgKmtleSk7CitleHRlcm4gSnNvbmJWYWx1ZSAqZmluZEpzb25iVmFsdWVG cm9tQ29udGFpbmVyTGVuKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsCisJCQkJCQkJCQkJ CQkgIHVpbnQzMiBmbGFncywKKwkJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqa2V5LAorCQkJ CQkJCQkJCQkJICB1aW50MzIga2V5bGVuKTsKIGV4dGVybiBKc29uYlZhbHVlICpnZXRLZXlK c29uVmFsdWVGcm9tQ29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsCiAJCQkJ CQkJCQkJCQljb25zdCBjaGFyICprZXlWYWwsIGludCBrZXlMZW4sCiAJCQkJCQkJCQkJCQlK c29uYlZhbHVlICpyZXMpOwpAQCAtMzk5LDYgKzQwMyw3IEBAIGV4dGVybiBib29sIEpzb25i RGVlcENvbnRhaW5zKEpzb25iSXRlcmF0b3IgKip2YWwsCiBleHRlcm4gdm9pZCBKc29uYkhh c2hTY2FsYXJWYWx1ZShjb25zdCBKc29uYlZhbHVlICpzY2FsYXJWYWwsIHVpbnQzMiAqaGFz aCk7CiBleHRlcm4gdm9pZCBKc29uYkhhc2hTY2FsYXJWYWx1ZUV4dGVuZGVkKGNvbnN0IEpz b25iVmFsdWUgKnNjYWxhclZhbCwKIAkJCQkJCQkJCQkgdWludDY0ICpoYXNoLCB1aW50NjQg c2VlZCk7CitleHRlcm4gYm9vbCBKc29uYkV4dHJhY3RTY2FsYXIoSnNvbmJDb250YWluZXIg KmpiYywgSnNvbmJWYWx1ZSAqcmVzKTsKIAogLyoganNvbmIuYyBzdXBwb3J0IGZ1bmN0aW9u cyAqLwogZXh0ZXJuIGNoYXIgKkpzb25iVG9DU3RyaW5nKFN0cmluZ0luZm8gb3V0LCBKc29u YkNvbnRhaW5lciAqaW4sCkBAIC00MTIsNCArNDE3LDE1NyBAQCBleHRlcm4gRGF0dW0ganNv bmJfc2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IHBhdGhfbGVuLAog CQkJCQkJCSAgIEpzb25iVmFsdWUgKm5ld3ZhbCk7CiBleHRlcm4gRGF0dW0ganNvbmJfZ2V0 X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLAogCQkJCQkJCSAg IGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0KTsKKworLyoKKyAqIFhYWCBOb3Qgc3VyZSB3 ZSB3YW50IHRvIGFkZCB0aGVzZSBmdW5jdGlvbnMgdG8ganNvbmIuaCwgd2hpY2ggaXMgdGhl CisgKiBwdWJsaWMgQVBJLiBNYXliZSBpdCBiZWxvbmdzIHJhdGhlciB0byBqc29uYl90eXBh bmFseXplLmMgb3IgZWxzZXdoZXJlLAorICogY2xvc2VyIHRvIGhvdyBpdCdzIHVzZWQ/Cisg Ki8KKworLyogaGVscGVyIGlubGluZSBmdW5jdGlvbnMgZm9yIEpzb25iVmFsdWUgaW5pdGlh bGl6YXRpb24gKi8KK3N0YXRpYyBpbmxpbmUgSnNvbmJWYWx1ZSAqCitKc29uVmFsdWVJbml0 T2JqZWN0KEpzb25iVmFsdWUgKnZhbCwgaW50IG5QYWlycywgaW50IG5QYWlyc0FsbG9jYXRl ZCkKK3sKKwl2YWwtPnR5cGUgPSBqYnZPYmplY3Q7CisJdmFsLT52YWwub2JqZWN0Lm5QYWly cyA9IG5QYWlyczsKKwl2YWwtPnZhbC5vYmplY3QucGFpcnMgPSBuUGFpcnNBbGxvY2F0ZWQg PworCQkJCQkJCXBhbGxvYyhzaXplb2YoSnNvbmJQYWlyKSAqIG5QYWlyc0FsbG9jYXRlZCkg OiBOVUxMOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSBKc29uYlZhbHVl ICoKK0pzb25WYWx1ZUluaXRBcnJheShKc29uYlZhbHVlICp2YWwsIGludCBuRWxlbXMsIGlu dCBuRWxlbXNBbGxvY2F0ZWQsCisJCQkJICAgYm9vbCByYXdTY2FsYXIpCit7CisJdmFsLT50 eXBlID0gamJ2QXJyYXk7CisJdmFsLT52YWwuYXJyYXkubkVsZW1zID0gbkVsZW1zOworCXZh bC0+dmFsLmFycmF5LmVsZW1zID0gbkVsZW1zQWxsb2NhdGVkID8KKwkJCQkJCQlwYWxsb2Mo c2l6ZW9mKEpzb25iVmFsdWUpICogbkVsZW1zQWxsb2NhdGVkKSA6IE5VTEw7CisJdmFsLT52 YWwuYXJyYXkucmF3U2NhbGFyID0gcmF3U2NhbGFyOworCisJcmV0dXJuIHZhbDsKK30KKwor c3RhdGljIGlubGluZSBKc29uYlZhbHVlICoKK0pzb25WYWx1ZUluaXRCaW5hcnkoSnNvbmJW YWx1ZSAqdmFsLCBKc29uYiAqamIpCit7CisJdmFsLT50eXBlID0gamJ2QmluYXJ5OworCXZh bC0+dmFsLmJpbmFyeS5kYXRhID0gJihqYiktPnJvb3Q7CisJdmFsLT52YWwuYmluYXJ5Lmxl biA9IFZBUlNJWkVfQU5ZX0VYSERSKGpiKTsKKwlyZXR1cm4gdmFsOworfQorCisKK3N0YXRp YyBpbmxpbmUgSnNvbmJWYWx1ZSAqCitKc29uVmFsdWVJbml0U3RyaW5nKEpzb25iVmFsdWUg KmpidiwgY29uc3QgY2hhciAqc3RyKQoreworCWpidi0+dHlwZSA9IGpidlN0cmluZzsKKwlq YnYtPnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHN0cik7CisJamJ2LT52YWwuc3RyaW5nLnZh bCA9IG1lbWNweShwYWxsb2MoamJ2LT52YWwuc3RyaW5nLmxlbiArIDEpLCBzdHIsCisJCQkJ CQkJCSBqYnYtPnZhbC5zdHJpbmcubGVuICsgMSk7CisJcmV0dXJuIGpidjsKK30KKworc3Rh dGljIGlubGluZSBKc29uYlZhbHVlICoKK0pzb25WYWx1ZUluaXRTdHJpbmdXaXRoTGVuKEpz b25iVmFsdWUgKmpidiwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQoreworCWpidi0+dHlw ZSA9IGpidlN0cmluZzsKKwlqYnYtPnZhbC5zdHJpbmcudmFsID0gc3RyOworCWpidi0+dmFs LnN0cmluZy5sZW4gPSBsZW47CisJcmV0dXJuIGpidjsKK30KKworc3RhdGljIGlubGluZSBK c29uYlZhbHVlICoKK0pzb25WYWx1ZUluaXRUZXh0KEpzb25iVmFsdWUgKmpidiwgdGV4dCAq dHh0KQoreworCWpidi0+dHlwZSA9IGpidlN0cmluZzsKKwlqYnYtPnZhbC5zdHJpbmcudmFs ID0gVkFSREFUQV9BTlkodHh0KTsKKwlqYnYtPnZhbC5zdHJpbmcubGVuID0gVkFSU0laRV9B TllfRVhIRFIodHh0KTsKKwlyZXR1cm4gamJ2OworfQorCitzdGF0aWMgaW5saW5lIEpzb25i VmFsdWUgKgorSnNvblZhbHVlSW5pdE51bWVyaWMoSnNvbmJWYWx1ZSAqamJ2LCBOdW1lcmlj IG51bSkKK3sKKwlqYnYtPnR5cGUgPSBqYnZOdW1lcmljOworCWpidi0+dmFsLm51bWVyaWMg PSBudW07CisJcmV0dXJuIGpidjsKK30KKworc3RhdGljIGlubGluZSBKc29uYlZhbHVlICoK K0pzb25WYWx1ZUluaXRJbnRlZ2VyKEpzb25iVmFsdWUgKmpidiwgaW50NjQgaSkKK3sKKwlq YnYtPnR5cGUgPSBqYnZOdW1lcmljOworCWpidi0+dmFsLm51bWVyaWMgPSBEYXR1bUdldE51 bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMSgKKwkJCQkJCQkJCQkJaW50OF9udW1lcmljLCBJ bnQ2NEdldERhdHVtKGkpKSk7CisJcmV0dXJuIGpidjsKK30KKworc3RhdGljIGlubGluZSBK c29uYlZhbHVlICoKK0pzb25WYWx1ZUluaXRGbG9hdChKc29uYlZhbHVlICpqYnYsIGZsb2F0 NCBmKQoreworCWpidi0+dHlwZSA9IGpidk51bWVyaWM7CisJamJ2LT52YWwubnVtZXJpYyA9 IERhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKAorCQkJCQkJCQkJCQlmbG9h dDRfbnVtZXJpYywgRmxvYXQ0R2V0RGF0dW0oZikpKTsKKwlyZXR1cm4gamJ2OworfQorCitz dGF0aWMgaW5saW5lIEpzb25iVmFsdWUgKgorSnNvblZhbHVlSW5pdERvdWJsZShKc29uYlZh bHVlICpqYnYsIGZsb2F0OCBmKQoreworCWpidi0+dHlwZSA9IGpidk51bWVyaWM7CisJamJ2 LT52YWwubnVtZXJpYyA9IERhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKAor CQkJCQkJCQkJCQlmbG9hdDhfbnVtZXJpYywgRmxvYXQ4R2V0RGF0dW0oZikpKTsKKwlyZXR1 cm4gamJ2OworfQorCisvKiBoZWxwZXIgbWFjcm9zIGZvciBqc29uYiBidWlsZGluZyAqLwor I2RlZmluZSBwdXNoSnNvbmJLZXkocHN0YXRlLCBqYnYsIGtleSkgXAorCQlwdXNoSnNvbmJW YWx1ZShwc3RhdGUsIFdKQl9LRVksIEpzb25WYWx1ZUluaXRTdHJpbmcoamJ2LCBrZXkpKQor CisjZGVmaW5lIHB1c2hKc29uYlZhbHVlR2VuZXJpYyhUeXBlLCBwc3RhdGUsIGpidiwgdmFs KSBcCisJCXB1c2hKc29uYlZhbHVlKHBzdGF0ZSwgV0pCX1ZBTFVFLCBKc29uVmFsdWVJbml0 IyNUeXBlKGpidiwgdmFsKSkKKworI2RlZmluZSBwdXNoSnNvbmJFbGVtR2VuZXJpYyhUeXBl LCBwc3RhdGUsIGpidiwgdmFsKSBcCisJCXB1c2hKc29uYlZhbHVlKHBzdGF0ZSwgV0pCX0VM RU0sIEpzb25WYWx1ZUluaXQjI1R5cGUoamJ2LCB2YWwpKQorCisjZGVmaW5lIHB1c2hKc29u YlZhbHVlSW50ZWdlcihwc3RhdGUsIGpidiwgaSkgXAorCQlwdXNoSnNvbmJWYWx1ZUdlbmVy aWMoSW50ZWdlciwgcHN0YXRlLCBqYnYsIGkpCisKKyNkZWZpbmUgcHVzaEpzb25iVmFsdWVG bG9hdChwc3RhdGUsIGpidiwgZikgXAorCQlwdXNoSnNvbmJWYWx1ZUdlbmVyaWMoRmxvYXQs IHBzdGF0ZSwgamJ2LCBmKQorCisjZGVmaW5lIHB1c2hKc29uYkVsZW1GbG9hdChwc3RhdGUs IGpidiwgZikgXAorCQlwdXNoSnNvbmJFbGVtR2VuZXJpYyhGbG9hdCwgcHN0YXRlLCBqYnYs IGYpCisKKyNkZWZpbmUgcHVzaEpzb25iRWxlbVN0cmluZyhwc3RhdGUsIGpidiwgdHh0KSBc CisJCXB1c2hKc29uYkVsZW1HZW5lcmljKFN0cmluZywgcHN0YXRlLCBqYnYsIHR4dCkKKwor I2RlZmluZSBwdXNoSnNvbmJFbGVtVGV4dChwc3RhdGUsIGpidiwgdHh0KSBcCisJCXB1c2hK c29uYkVsZW1HZW5lcmljKFRleHQsIHBzdGF0ZSwgamJ2LCB0eHQpCisKKyNkZWZpbmUgcHVz aEpzb25iRWxlbU51bWVyaWMocHN0YXRlLCBqYnYsIG51bSkgXAorCQlwdXNoSnNvbmJFbGVt R2VuZXJpYyhOdW1lcmljLCBwc3RhdGUsIGpidiwgbnVtKQorCisjZGVmaW5lIHB1c2hKc29u YkVsZW1JbnRlZ2VyKHBzdGF0ZSwgamJ2LCBudW0pIFwKKwkJcHVzaEpzb25iRWxlbUdlbmVy aWMoSW50ZWdlciwgcHN0YXRlLCBqYnYsIG51bSkKKworI2RlZmluZSBwdXNoSnNvbmJFbGVt QmluYXJ5KHBzdGF0ZSwgamJ2LCBqYmNvbnQpIFwKKwkJcHVzaEpzb25iRWxlbUdlbmVyaWMo QmluYXJ5LCBwc3RhdGUsIGpidiwgamJjb250KQorCisjZGVmaW5lIHB1c2hKc29uYktleVZh bHVlR2VuZXJpYyhUeXBlLCBwc3RhdGUsIGpidiwga2V5LCB2YWwpICggXAorCQlwdXNoSnNv bmJLZXkocHN0YXRlLCBqYnYsIGtleSksIFwKKwkJcHVzaEpzb25iVmFsdWVHZW5lcmljKFR5 cGUsIHBzdGF0ZSwgamJ2LCB2YWwpIFwKKwkpCisKKyNkZWZpbmUgcHVzaEpzb25iS2V5VmFs dWVTdHJpbmcocHN0YXRlLCBqYnYsIGtleSwgdmFsKSBcCisJCXB1c2hKc29uYktleVZhbHVl R2VuZXJpYyhTdHJpbmcsIHBzdGF0ZSwgamJ2LCBrZXksIHZhbCkKKworI2RlZmluZSBwdXNo SnNvbmJLZXlWYWx1ZUZsb2F0KHBzdGF0ZSwgamJ2LCBrZXksIHZhbCkgXAorCQlwdXNoSnNv bmJLZXlWYWx1ZUdlbmVyaWMoRmxvYXQsIHBzdGF0ZSwgamJ2LCBrZXksIHZhbCkKKworI2Rl ZmluZSBwdXNoSnNvbmJLZXlWYWx1ZUludGVnZXIocHN0YXRlLCBqYnYsIGtleSwgdmFsKSBc CisJCXB1c2hKc29uYktleVZhbHVlR2VuZXJpYyhJbnRlZ2VyLCBwc3RhdGUsIGpidiwga2V5 LCB2YWwpCisKICNlbmRpZgkJCQkJCQkvKiBfX0pTT05CX0hfXyAqLwotLSAKMi4zMS4xCgo= --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/x-patch; charset=UTF-8; name="0005-Export-scalarineqsel-20220106.patch" Content-Disposition: attachment; filename="0005-Export-scalarineqsel-20220106.patch" Content-Transfer-Encoding: base64 RnJvbSA0YTYyOTBlODc2YTdkODMxMjlmN2EwMWE4NTQ5ZDVkMzU2YTBjMjg3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFNhdCwgMTIgTm92IDIwMTYgMTk6MDE6NDMgKzAzMDAKU3ViamVj dDogW1BBVENIIDUvNl0gRXhwb3J0IHNjYWxhcmluZXFzZWwoKQoKLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYyB8IDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1 bmNzLmggICAgIHwgNCArKysrCiAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggM2U4ZmM0 N2Y2NjIuLjE0NzhlZTUzNmFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAt NTczLDcgKzU3Myw3IEBAIG5lcXNlbChQR19GVU5DVElPTl9BUkdTKQogICogaXQgd2lsbCBy ZXR1cm4gYW4gYXBwcm94aW1hdGUgZXN0aW1hdGUgYmFzZWQgb24gYXNzdW1pbmcgdGhhdCB0 aGUgY29uc3RhbnQKICAqIHZhbHVlIGZhbGxzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJpbiBp ZGVudGlmaWVkIGJ5IGJpbmFyeSBzZWFyY2guCiAgKi8KLXN0YXRpYyBkb3VibGUKK2RvdWJs ZQogc2NhbGFyaW5lcXNlbChQbGFubmVySW5mbyAqcm9vdCwgT2lkIG9wZXJhdG9yLCBib29s IGlzZ3QsIGJvb2wgaXNlcSwKIAkJCSAgT2lkIGNvbGxhdGlvbiwKIAkJCSAgVmFyaWFibGVT dGF0RGF0YSAqdmFyZGF0YSwgRGF0dW0gY29uc3R2YWwsIE9pZCBjb25zdHR5cGUpCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zZWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvc2VsZnVuY3MuaAppbmRleCBiOTBlMDViODcwNy4uNzQ4NDFhMTA4YjQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvc2VsZnVuY3MuaApAQCAtMjQ5LDYgKzI0OSwxMCBAQCBleHRlcm4gTGlzdCAqYWRkX3By ZWRpY2F0ZV90b19pbmRleF9xdWFscyhJbmRleE9wdEluZm8gKmluZGV4LAogZXh0ZXJuIHZv aWQgZ2VuZXJpY2Nvc3Rlc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpw YXRoLAogCQkJCQkJCQlkb3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJR2VuZXJpY0Nvc3Rz ICpjb3N0cyk7CitleHRlcm4gZG91YmxlIHNjYWxhcmluZXFzZWwoUGxhbm5lckluZm8gKnJv b3QsIE9pZCBvcGVyYXRvciwgYm9vbCBpc2d0LAorCQkJCQkJCWJvb2wgaXNlcSwgT2lkIGNv bGxhdGlvbiwKKwkJCQkJCQlWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLCBEYXR1bSBjb25z dHZhbCwKKwkJCQkJCQlPaWQgY29uc3R0eXBlKTsKIAogZXh0ZXJuIEhlYXBUdXBsZSBzdGF0 c19mb3JtX3R1cGxlKFN0YXRzRGF0YSAqZGF0YSk7CiAKLS0gCjIuMzEuMQoK --------------owXyn0H8mA9LYeaX6VpVWVY6 Content-Type: text/x-patch; charset=UTF-8; name="0006-Add-jsonb-statistics-20220106.patch" Content-Disposition: attachment; filename="0006-Add-jsonb-statistics-20220106.patch" Content-Transfer-Encoding: base64 RnJvbSBhNDRkOWNmYTdhN2MxYTQxYzExMGY3MTcwODJhZjc3YTAwMjAyNDAyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFNhdCwgMTIgTm92IDIwMTYgMTk6MTk6MzMgKzAzMDAKU3ViamVj dDogW1BBVENIIDYvNl0gQWRkIGpzb25iIHN0YXRpc3RpY3MKCi0tLQogc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCAgfCAgIDM2ICsKIHNyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgIHwgICA1NiArCiBzcmMvYmFja2VuZC91dGls cy9hZHQvTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25iX3NlbGZ1bmNzLmMgICAgfCAxMzUzICsrKysrKysrKysrKysrKysrKysrCiBz cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdHlwYW5hbHl6ZS5jICB8IDEzNzkgKysrKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5j ICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0ICAg ICAgIHwgICAxNSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAg ICAgfCAgIDExICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3RhdGlzdGljLmggICAgICAg IHwgICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3R5cGUuZGF0ICAgICAgICAgICB8 ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25fc2VsZnVuY3MuaCAgICAgICAgIHwg IDEwMCArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zdGF0cy5vdXQgfCAg NzEzICsrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAg ICAgICB8ICAgMzIgKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAg ICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zdGF0cy5zcWwgICAg ICB8ICAyNDkgKysrKwogMTUgZmlsZXMgY2hhbmdlZCwgMzk0NCBpbnNlcnRpb25zKCspLCAx MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbmJfc2VsZnVuY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uYl90eXBhbmFseXplLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5j bHVkZS91dGlscy9qc29uX3NlbGZ1bmNzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3N0YXRzLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3N0YXRzLnNxbAoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IDNhNGZhOTA5MWIxLi41M2NmNmZj ODkzYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25z LnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCkBA IC01OTQsNiArNTk0LDQyIEBAIExBTkdVQUdFIGludGVybmFsCiBTVFJJQ1QgSU1NVVRBQkxF IFBBUkFMTEVMIFNBRkUKIEFTICd1bmljb2RlX2lzX25vcm1hbGl6ZWQnOwogCistLSBYWFgg aXMgdGhpcyBmdW5jdGlvbiBpbW11dGFibGUgLyBwYXJhbGxlbCBzYWZlPworLS0gWFhYIGRv IHdlIGFjdHVhbGx5IG5lZWQgdG8gY2FzdCB0byB0ZXh0IGFuZCB0aGVuIHRvIGpzb25iPwor Q1JFQVRFIEZVTkNUSU9OIHBnX2pzb25fcGF0aF9zdGF0cyh0YWIgcmVnY2xhc3MsIHBhdGhf aW5kZXggaW50ZWdlcikgUkVUVVJOUyB0ZXh0CitBUyAkJAorCVNFTEVDVCBqc29uYl9wcmV0 dHkoKAorCQlDQVNFCisJCQlXSEVOIHN0YWtpbmQxID0gOCBUSEVOIHN0YXZhbHVlczEKKwkJ CVdIRU4gc3Rha2luZDIgPSA4IFRIRU4gc3RhdmFsdWVzMgorCQkJV0hFTiBzdGFraW5kMyA9 IDggVEhFTiBzdGF2YWx1ZXMzCisJCQlXSEVOIHN0YWtpbmQ0ID0gOCBUSEVOIHN0YXZhbHVl czQKKwkJCVdIRU4gc3Rha2luZDUgPSA4IFRIRU4gc3RhdmFsdWVzNQorCQlFTkQ6OnRleHQ6 Ompzb25iW10pWyQyXSkKKwlGUk9NIHBnX3N0YXRpc3RpYworCVdIRVJFIHN0YXJlbGlkID0g JDEKKyQkIExBTkdVQUdFICdzcWwnOworCistLSBYWFggaXMgdGhpcyBmdW5jdGlvbiBpbW11 dGFibGUgLyBwYXJhbGxlbCBzYWZlPworLS0gWFhYIGRvIHdlIGFjdHVhbGx5IG5lZWQgdG8g Y2FzdCB0byB0ZXh0IGFuZCB0aGVuIHRvIGpzb25iPworQ1JFQVRFIEZVTkNUSU9OIHBnX2pz b25fcGF0aF9zdGF0cyh0YWIgcmVnY2xhc3MsIHBhdGggdGV4dCkgUkVUVVJOUyB0ZXh0CitB UyAkJAorCVNFTEVDVCBqc29uYl9wcmV0dHkocGF0aHN0YXRzKQorCUZST00gKAorCQlTRUxF Q1QgdW5uZXN0KAorCQkJQ0FTRQorCQkJCVdIRU4gc3Rha2luZDEgPSA4IFRIRU4gc3RhdmFs dWVzMQorCQkJCVdIRU4gc3Rha2luZDIgPSA4IFRIRU4gc3RhdmFsdWVzMgorCQkJCVdIRU4g c3Rha2luZDMgPSA4IFRIRU4gc3RhdmFsdWVzMworCQkJCVdIRU4gc3Rha2luZDQgPSA4IFRI RU4gc3RhdmFsdWVzNAorCQkJCVdIRU4gc3Rha2luZDUgPSA4IFRIRU4gc3RhdmFsdWVzNQor CQkJRU5EOjp0ZXh0Ojpqc29uYltdKSBwYXRoc3RhdHMKKwkJRlJPTSBwZ19zdGF0aXN0aWMK KwkJV0hFUkUgc3RhcmVsaWQgPSAkMQorCSkgcGF0aHMKKwlXSEVSRSBwYXRoc3RhdHMtPj4n cGF0aCcgPSAkMgorJCQgTEFOR1VBR0UgJ3NxbCc7CisKIC0tCiAtLSBUaGUgZGVmYXVsdCBw ZXJtaXNzaW9ucyBmb3IgZnVuY3Rpb25zIG1lYW4gdGhhdCBhbnlvbmUgY2FuIGV4ZWN1dGUg dGhlbS4KIC0tIEEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBzaG91bGRuJ3QgYmUgZXhlY3V0YWJs ZSBieSBqdXN0IGFueW9uZSwgYnV0IHJhdGhlcgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1f dmlld3Muc3FsCmluZGV4IDYxYjUxNWNkYjg1Li4zNTdiOGI3YzVlZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMzYyLDYgKzM2Miw2MiBAQCBDUkVBVEUg VklFVyBwZ19zdGF0c19leHRfZXhwcnMgV0lUSCAoc2VjdXJpdHlfYmFycmllcikgQVMKIC0t IHVucHJpdmlsZWdlZCB1c2VycyBtYXkgcmVhZCBwZ19zdGF0aXN0aWNfZXh0IGJ1dCBub3Qg cGdfc3RhdGlzdGljX2V4dF9kYXRhCiBSRVZPS0UgQUxMIE9OIHBnX3N0YXRpc3RpY19leHRf ZGF0YSBGUk9NIHB1YmxpYzsKIAorLS0gWFhYIFRoaXMgcHJvYmFibHkgbmVlZHMgdG8gZG8g dGhlIHNhbWUgY2hlY2tzIGFzIHBnX3N0YXRzLCBpLmUuCistLSAgICBXSEVSRSBOT1QgYXR0 aXNkcm9wcGVkCistLSAgICBBTkQgaGFzX2NvbHVtbl9wcml2aWxlZ2UoYy5vaWQsIGEuYXR0 bnVtLCAnc2VsZWN0JykKKy0tICAgIEFORCAoYy5yZWxyb3dzZWN1cml0eSA9IGZhbHNlIE9S IE5PVCByb3dfc2VjdXJpdHlfYWN0aXZlKGMub2lkKSk7CitDUkVBVEUgVklFVyBwZ19zdGF0 c19qc29uIEFTCisJU0VMRUNUCisJCW5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKKwkJcmVsbmFt ZSBBUyB0YWJsZW5hbWUsCisJCWF0dG5hbWUgQVMgYXR0bmFtZSwKKworCQlwYXRoLT4+J3Bh dGgnIEFTIGpzb25fcGF0aCwKKworCQlzdGFpbmhlcml0IEFTIGluaGVyaXRlZCwKKworCQko cGF0aC0+J2pzb24nLT4+J251bGxmcmFjJyk6OmZsb2F0NCBBUyBudWxsX2ZyYWMsCisJCShw YXRoLT4nanNvbictPj4nd2lkdGgnKTo6ZmxvYXQ0IEFTIGF2Z193aWR0aCwKKwkJKHBhdGgt Pidqc29uJy0+PidkaXN0aW5jdCcpOjpmbG9hdDQgQVMgbl9kaXN0aW5jdCwKKworCQlBUlJB WShTRUxFQ1QgdmFsIEZST00ganNvbmJfYXJyYXlfZWxlbWVudHMoCisJCQkJcGF0aC0+J2pz b24nLT4nbWN2Jy0+J3ZhbHVlcycpIHZhbCk6OmFueWFycmF5CisJCQlBUyBtb3N0X2NvbW1v bl92YWxzLAorCisJCUFSUkFZKFNFTEVDVCBudW06OnRleHQ6OmZsb2F0NCBGUk9NIGpzb25i X2FycmF5X2VsZW1lbnRzKAorCQkJCXBhdGgtPidqc29uJy0+J21jdictPidudW1iZXJzJykg bnVtKQorCQkJQVMgbW9zdF9jb21tb25fZnJlcXMsCisKKwkJQVJSQVkoU0VMRUNUIHZhbCBG Uk9NIGpzb25iX2FycmF5X2VsZW1lbnRzKAorCQkJCXBhdGgtPidqc29uJy0+J2hpc3RvZ3Jh bSctPid2YWx1ZXMnKSB2YWwpCisJCQlBUyBoaXN0b2dyYW1fYm91bmRzLAorCisJCUFSUkFZ KFNFTEVDVCB2YWw6OnRleHQ6OmludCBGUk9NIGpzb25iX2FycmF5X2VsZW1lbnRzKAorCQkJ CXBhdGgtPidhcnJheV9sZW5ndGgnLT4nbWN2Jy0+J3ZhbHVlcycpIHZhbCkKKwkJCUFTIG1v c3RfY29tbW9uX2FycmF5X2xlbmd0aHMsCisKKwkJQVJSQVkoU0VMRUNUIG51bTo6dGV4dDo6 ZmxvYXQ0IEZST00ganNvbmJfYXJyYXlfZWxlbWVudHMoCisJCQkJcGF0aC0+J2FycmF5X2xl bmd0aCctPidtY3YnLT4nbnVtYmVycycpIG51bSkKKwkJCUFTIG1vc3RfY29tbW9uX2FycmF5 X2xlbmd0aF9mcmVxcywKKworCQkocGF0aC0+J2pzb24nLT4+J2NvcnJlbGF0aW9uJyk6OmZs b2F0NCBBUyBjb3JyZWxhdGlvbgorCisJRlJPTQorCQlwZ19zdGF0aXN0aWMgcyBKT0lOIHBn X2NsYXNzIGMgT04gKGMub2lkID0gcy5zdGFyZWxpZCkKKwkJSk9JTiBwZ19hdHRyaWJ1dGUg YSBPTiAoYy5vaWQgPSBhdHRyZWxpZCBBTkQgYXR0bnVtID0gcy5zdGFhdHRudW0pCisJCUxF RlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAobi5vaWQgPSBjLnJlbG5hbWVzcGFjZSksCisJ CUxBVEVSQUwgKAorCQkJU0VMRUNUIHVubmVzdCgoQ0FTRQorCQkJCQlXSEVOIHN0YWtpbmQx ID0gOCBUSEVOIHN0YXZhbHVlczEKKwkJCQkJV0hFTiBzdGFraW5kMiA9IDggVEhFTiBzdGF2 YWx1ZXMyCisJCQkJCVdIRU4gc3Rha2luZDMgPSA4IFRIRU4gc3RhdmFsdWVzMworCQkJCQlX SEVOIHN0YWtpbmQ0ID0gOCBUSEVOIHN0YXZhbHVlczQKKwkJCQkJV0hFTiBzdGFraW5kNSA9 IDggVEhFTiBzdGF2YWx1ZXM1CisJCQkJRU5EIDo6dGV4dDo6anNvbmJbXSlbMjpdKSBBUyBw YXRoCisJCSkgcGF0aHM7CisKKy0tIG5vIG5lZWQgdG8gcmV2b2tlIGFueSBwcml2aWxlZ2Vz LCB3ZSd2ZSBhbHJlYWR5IHJldm9rZWQgYWNjc3MgdG8gcGdfc3RhdGlzdGljCisKIENSRUFU RSBWSUVXIHBnX3B1YmxpY2F0aW9uX3RhYmxlcyBBUwogICAgIFNFTEVDVAogICAgICAgICBQ LnB1Ym5hbWUgQVMgcHVibmFtZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9NYWtlZmlsZQppbmRleCA0MWI0 ODZiY2VmZi4uNWUzNTljY2Y0ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvTWFrZWZpbGUKQEAgLTUw LDYgKzUwLDggQEAgT0JKUyA9IFwKIAlqc29uYi5vIFwKIAlqc29uYl9naW4ubyBcCiAJanNv bmJfb3AubyBcCisJanNvbmJfc2VsZnVuY3MubyBcCisJanNvbmJfdHlwYW5hbHl6ZS5vIFwK IAlqc29uYl91dGlsLm8gXAogCWpzb25mdW5jcy5vIFwKIAlqc29uYnN1YnMubyBcCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfc2VsZnVuY3MuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uYl9zZWxmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5mMTQ0YjhjMGRiMwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYl9zZWxmdW5jcy5jCkBAIC0wLDAgKzEsMTM1MyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoganNvbmJfc2VsZnVuY3MuYworICoJ ICBGdW5jdGlvbnMgZm9yIHNlbGVjdGl2aXR5IGVzdGltYXRpb24gb2YganNvbmIgb3BlcmF0 b3JzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uYl9zZWxmdW5jcy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisK KyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJh dG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMuaCIKKyNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKKyNpbmNs dWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25fc2VsZnVuY3MuaCIK KyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIK KyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgorCisjZGVmaW5lIERFRkFVTFRfSlNPTl9D T05UQUlOU19TRUwJMC4wMDEKKworLyoKKyAqIGpzb25HZXRGaWVsZAorICoJCUdpdmVuIGEg SlNPTkIgZG9jdW1lbnQgYW5kIGEga2V5LCBleHRyYWN0IHRoZSBKU09OQiB2YWx1ZSBmb3Ig dGhlIGtleS4KKyAqLworc3RhdGljIGlubGluZSBEYXR1bQoranNvbkdldEZpZWxkKERhdHVt IG9iaiwgY29uc3QgY2hhciAqZmllbGQpCit7CisJSnNvbmIgCSAgICpqYiA9IERhdHVtR2V0 SnNvbmJQKG9iaik7CisJSnNvbmJWYWx1ZSAqamJ2ID0gZmluZEpzb25iVmFsdWVGcm9tQ29u dGFpbmVyTGVuKCZqYi0+cm9vdCwgSkJfRk9CSkVDVCwKKwkJCQkJCQkJCQkJCQkgZmllbGQs IHN0cmxlbihmaWVsZCkpOworCXJldHVybiBqYnYgPyBKc29uYlBHZXREYXR1bShKc29uYlZh bHVlVG9Kc29uYihqYnYpKSA6IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAq IGpzb25HZXRGbG9hdDQKKyAqCQlHaXZlbiBhIEpTT05CIHZhbHVlLCBpbnRlcnByZXQgaXQg YXMgYSBmbG9hdDQgdmFsdWUuCisgKgorICogVGhpcyBleHBlY3RzIHRoZSBKU09OQiB2YWx1 ZSB0byBiZSBhIG51bWVyaWMsIGJlY2F1c2UgdGhhdCdzIGhvdyB3ZSBzdG9yZQorICogZmxv YXRzIGluIEpTT05CLCBhbmQgd2UgY2FzdCBpdCB0byBmbG9hdDQuCisgKgorICogWFhYIE5v dCBzdXJlIGFzc2VydCBpcyBhIHN1ZmZpY2llbnQgcHJvdGVjdGlvbiBhZ2FpbnN0IGRpZmZl cmVudCB0eXBlcyBvZgorICogSlNPTkIgdmFsdWVzIHRvIGJlIHBhc3NlZCBpbi4KKyAqLwor c3RhdGljIGlubGluZSBEYXR1bQoranNvbkdldEZsb2F0NChEYXR1bSBqc29uYikKK3sKKwlK c29uYgkgICAqamIgPSBEYXR1bUdldEpzb25iUChqc29uYik7CisJSnNvbmJWYWx1ZQlqdjsK KworCUpzb25iRXh0cmFjdFNjYWxhcigmamItPnJvb3QsICZqdik7CisJQXNzZXJ0KGp2LnR5 cGUgPT0gamJ2TnVtZXJpYyk7CisKKwlyZXR1cm4gRGlyZWN0RnVuY3Rpb25DYWxsMShudW1l cmljX2Zsb2F0NCwgTnVtZXJpY0dldERhdHVtKGp2LnZhbC5udW1lcmljKSk7Cit9CisKKy8q CisgKiBqc29uU3RhdHNJbml0CisgKgkJR2l2ZW4gYSBwZ19zdGF0aXN0aWMgdHVwbGUsIGV4 cGFuZCBTVEFUSVNUSUNfS0lORF9KU09OIGludG8gSnNvblN0YXRzLgorICovCitib29sCitq c29uU3RhdHNJbml0KEpzb25TdGF0cyBkYXRhLCBjb25zdCBWYXJpYWJsZVN0YXREYXRhICp2 YXJkYXRhKQoreworCUpzb25iCSAgICpqYjsKKwlKc29uYlZhbHVlCXByZWZpeDsKKworCW1l bXNldCgmZGF0YS0+YXR0c2xvdCwgMCwgc2l6ZW9mKGRhdGEtPmF0dHNsb3QpKTsKKwlkYXRh LT5zdGF0c1R1cGxlID0gdmFyZGF0YS0+c3RhdHNUdXBsZTsKKworCS8qIEZJWE1FIENvdWxk IGJlIGJlZm9yZSB0aGUgbWVtc2V0LCBJIGd1ZXNzPyBDaGVja2luZyB2YXJkYXRhLT5zdGF0 c1R1cGxlLiAqLworCWlmICghZGF0YS0+c3RhdHNUdXBsZSkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogV2VyZSB0aGVyZSBqdXN0IE5VTEwgdmFsdWVzIGluIHRoZSBjb2x1bW4/IE5vIEpT T04gc3RhdHMsIGJ1dCBzdGlsbCB1c2VmdWwuICovCisJaWYgKCgoRm9ybV9wZ19zdGF0aXN0 aWMpIEdFVFNUUlVDVChkYXRhLT5zdGF0c1R1cGxlKSktPnN0YW51bGxmcmFjID49IDEuMCkK Kwl7CisJCWRhdGEtPm51bGxmcmFjID0gMS4wOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkv KiBEbyB3ZSBoYXZlIHRoZSBKU09OIHN0YXRzIGJ1aWx0IGluIHRoZSBwZ19zdGF0aXN0aWM/ ICovCisJaWYgKCFnZXRfYXR0c3RhdHNzbG90KCZkYXRhLT5hdHRzbG90LCBkYXRhLT5zdGF0 c1R1cGxlLAorCQkJCQkJICBTVEFUSVNUSUNfS0lORF9KU09OLCBJbnZhbGlkT2lkLAorCQkJ CQkJICBBVFRTVEFUU1NMT1RfTlVNQkVSUyB8IEFUVFNUQVRTU0xPVF9WQUxVRVMpKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKiBYWFggTm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zIC8gaG93 IGNvdWxkIGl0IGhhcHBlbj8gKi8KKwlpZiAoZGF0YS0+YXR0c2xvdC5udmFsdWVzIDwgMikK Kwl7CisJCWZyZWVfYXR0c3RhdHNzbG90KCZkYXRhLT5hdHRzbG90KTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIFhYWCBJZiB0aGUgQUNMIGNoZWNrIHdhcyBub3QgT0ssIHdvdWxk IHdlIGV2ZW4gZ2V0IGhlcmU/ICovCisJZGF0YS0+YWNsX29rID0gdmFyZGF0YS0+YWNsX29r OworCWRhdGEtPnJlbCA9IHZhcmRhdGEtPnJlbDsKKwlkYXRhLT5udWxsZnJhYyA9CisJCWRh dGEtPmF0dHNsb3Qubm51bWJlcnMgPiAwID8gZGF0YS0+YXR0c2xvdC5udW1iZXJzWzBdIDog MC4wOworCWRhdGEtPnZhbHVlcyA9IGRhdGEtPmF0dHNsb3QudmFsdWVzOworCWRhdGEtPm52 YWx1ZXMgPSBkYXRhLT5hdHRzbG90Lm52YWx1ZXM7CisKKwlqYiA9IERhdHVtR2V0SnNvbmJQ KGRhdGEtPnZhbHVlc1swXSk7CisJSnNvbmJFeHRyYWN0U2NhbGFyKCZqYi0+cm9vdCwgJnBy ZWZpeCk7CisJQXNzZXJ0KHByZWZpeC50eXBlID09IGpidlN0cmluZyk7CisJZGF0YS0+cHJl Zml4ID0gcHJlZml4LnZhbC5zdHJpbmcudmFsOworCWRhdGEtPnByZWZpeGxlbiA9IHByZWZp eC52YWwuc3RyaW5nLmxlbjsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICoganNvblN0 YXRzUmVsZWFzZQorICoJCVJlbGVhc2UgcmVzb3VyY2VzIChzdGF0aXN0aWNzIHNsb3QpIGFz c29jaWF0ZWQgd2l0aCB0aGUgSnNvblN0YXRzIHZhbHVlLgorICovCit2b2lkCitqc29uU3Rh dHNSZWxlYXNlKEpzb25TdGF0cyBkYXRhKQoreworCWZyZWVfYXR0c3RhdHNzbG90KCZkYXRh LT5hdHRzbG90KTsKK30KKworLyoKKyAqIGpzb25QYXRoU3RhdHNHZXRTcGVjaWFsU3RhdHMK KyAqCQlFeHRyYWN0IHN0YXRpc3RpY3Mgb2YgZ2l2ZW4gdHlwZSBmb3IgSlNPTiBwYXRoLgor ICoKKyAqIFhYWCBUaGlzIGRvZXMgbm90IHJlYWxseSBleHRyYWN0IGFueSBzdGF0cywgaXQg bWVyZWx5IGFsbG9jYXRlcyB0aGUgc3RydWN0PworICovCitzdGF0aWMgSnNvblBhdGhTdGF0 cworanNvblBhdGhTdGF0c0dldFNwZWNpYWxTdGF0cyhKc29uUGF0aFN0YXRzIHBzdGF0cywg SnNvblBhdGhTdGF0c1R5cGUgdHlwZSkKK3sKKwlKc29uUGF0aFN0YXRzIHN0YXRzOworCisJ aWYgKCFwc3RhdHMpCisJCXJldHVybiBOVUxMOworCisJc3RhdHMgPSBwYWxsb2Moc2l6ZW9m KCpzdGF0cykpOworCSpzdGF0cyA9ICpwc3RhdHM7CisJc3RhdHMtPnBhdGggPSBtZW1jcHko cGFsbG9jKHN0YXRzLT5wYXRobGVuKSwgc3RhdHMtPnBhdGgsIHN0YXRzLT5wYXRobGVuKTsK KwlzdGF0cy0+dHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKKy8qCisgKiBq c29uUGF0aFN0YXRzR2V0TGVuZ3RoU3RhdHMKKyAqCQlFeHRyYWN0IHN0YXRpc3RpY3Mgb2Yg bGVuZ3RocyAoZm9yIGFycmF5cyBvciBvYmplY3RzKSBmb3IgdGhlIHBhdGguCisgKi8KK0pz b25QYXRoU3RhdHMKK2pzb25QYXRoU3RhdHNHZXRMZW5ndGhTdGF0cyhKc29uUGF0aFN0YXRz IHBzdGF0cykKK3sKKwkvKgorCSAqIFRoZSBsZW5ndGggc3RhdGlzdGljcyBpcyByZWxldmFu dCBvbmx5IGZvciB2YWx1ZXMgdGhhdCBhcmUgb2JqZWN0cyBvcgorCSAqIGFycmF5cy4gU28g aWYgd2Ugb2JzZXJ2ZWQgbm8gc3VjaCB2YWx1ZXMsIHdlIGtub3cgdGhlcmUgY2FuJ3QgYmUg c3VjaAorCSAqIHN0YXRpc3RpY3MgYW5kIHNvIHdlIHNpbXBseSByZXR1cm4gTlVMTC4KKwkg Ki8KKwlpZiAoanNvblBhdGhTdGF0c0dldFR5cGVGcmVxKHBzdGF0cywgamJ2T2JqZWN0LCAw LjApIDw9IDAuMCAmJgorCQlqc29uUGF0aFN0YXRzR2V0VHlwZUZyZXEocHN0YXRzLCBqYnZB cnJheSwgMC4wKSA8PSAwLjApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGpzb25QYXRo U3RhdHNHZXRTcGVjaWFsU3RhdHMocHN0YXRzLCBKc29uUGF0aFN0YXRzTGVuZ3RoKTsKK30K KworLyoKKyAqIGpzb25QYXRoU3RhdHNHZXRBcnJheUxlbmd0aFN0YXRzCisgKgkJRXh0cmFj dCBzdGF0aXN0aWNzIG9mIGxlbmd0aHMgZm9yIGFycmF5cy4KKyAqCisgKiBYWFggV2h5IGRv ZXNuJ3QgdGhpcyBkbyBqc29uUGF0aFN0YXRzR2V0VHlwZUZyZXEgY2hlY2sgc2ltaWxhciB0 byB3aGF0CisgKiBqc29uUGF0aFN0YXRzR2V0TGVuZ3RoU3RhdHMgZG9lcz8KKyAqLworc3Rh dGljIEpzb25QYXRoU3RhdHMKK2pzb25QYXRoU3RhdHNHZXRBcnJheUxlbmd0aFN0YXRzKEpz b25QYXRoU3RhdHMgcHN0YXRzKQoreworCXJldHVybiBqc29uUGF0aFN0YXRzR2V0U3BlY2lh bFN0YXRzKHBzdGF0cywgSnNvblBhdGhTdGF0c0FycmF5TGVuZ3RoKTsKK30KKworLyoKKyAq IGpzb25QYXRoU3RhdHNDb21wYXJlCisgKgkJQ29tcGFyZSB0d28gSnNvblBhdGhTdGF0cyBz dHJ1Y3RzLCBzbyB0aGF0IHdlIGNhbiBzb3J0IHRoZW0uCisgKgorICogV2UgZG8gdGhpcyBz byB0aGF0IHdlIGNhbiBzZWFyY2ggZm9yIHN0YXRzIGZvciBhIGdpdmVuIHBhdGggc2ltcGx5 IGJ5CisgKiBic2VhcmNoKCkuCisgKgorICogWFhYIFdlIG5ldmVyIGJ1aWxkIHR3byBzdHJ1 Y3RzIGZvciB0aGUgc2FtZSBwYXRoLCBzbyB3ZSBrbm93IHRoZSBwYXRocworICogYXJlIGRp ZmZlcmVudCAtIG9uZSBtYXkgYmUgYSBwcmVmaXggb2YgdGhlIG90aGVyLCBidXQgdGhlbiB3 ZSBzb3J0IHRoZQorICogc3RyaW5ncyBieSBsZW5ndGguCisgKi8KK3N0YXRpYyBpbnQKK2pz b25QYXRoU3RhdHNDb21wYXJlKGNvbnN0IHZvaWQgKnB2MSwgY29uc3Qgdm9pZCAqcHYyKQor eworCUpzb25iVmFsdWUJcGF0aGtleTsKKwlKc29uYlZhbHVlICpwYXRoMjsKKwlKc29uYlZh bHVlIGNvbnN0ICpwYXRoMSA9IHB2MTsKKwkvKiBYWFggU2VlbXMgYSBiaXQgY29udm9sdXRl ZCB0byBmaXJzdCBjYXN0IGl0IHRvIERhdHVtLCB0aGVuIEpzb25iIC4uLiAqLworCURhdHVt IGNvbnN0ICpwZGF0dW0gPSBwdjI7CisJSnNvbmIJICAgKmpzb25iID0gRGF0dW1HZXRKc29u YlAoKnBkYXR1bSk7CisJaW50CQkJcmVzOworCisJLyogZXh0cmFjdCBwYXRoIGZyb20gdGhl IHN0YXRpc3RpY3MgcmVwcmVzZW50ZWQgYXMganNvbmIgZG9jdW1lbnQgKi8KKwlKc29uVmFs dWVJbml0U3RyaW5nV2l0aExlbigmcGF0aGtleSwgInBhdGgiLCA0KTsKKwlwYXRoMiA9IGZp bmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcigmanNvbmItPnJvb3QsIEpCX0ZPQkpFQ1QsICZw YXRoa2V5KTsKKworCS8qIFhYWCBOb3Qgc3VyZSBhYm91dCB0aGlzPyBEb2VzIGVtcHR5IHBh dGggbWVhbiBnbG9iYWwgc3RhdHM/ICovCisJaWYgKCFwYXRoMiB8fCBwYXRoMi0+dHlwZSAh PSBqYnZTdHJpbmcpCisJCXJldHVybiAxOworCisJLyogY29tcGFyZSB0aGUgc2hhcmVkIHBh cnQgZmlyc3QsIHRoZW4gY29tcGFyZSBieSBsZW5ndGggKi8KKwlyZXMgPSBzdHJuY21wKHBh dGgxLT52YWwuc3RyaW5nLnZhbCwgcGF0aDItPnZhbC5zdHJpbmcudmFsLAorCQkJCSAgTWlu KHBhdGgxLT52YWwuc3RyaW5nLmxlbiwgcGF0aDItPnZhbC5zdHJpbmcubGVuKSk7CisKKwly ZXR1cm4gcmVzID8gcmVzIDogcGF0aDEtPnZhbC5zdHJpbmcubGVuIC0gcGF0aDItPnZhbC5z dHJpbmcubGVuOworfQorCisvKgorICoganNvblN0YXRzRmluZFBhdGhTdGF0cworICoJCUZp bmQgc3RhdHMgZm9yIGEgZ2l2ZW4gcGF0aC4KKyAqCisgKiBUaGUgc3RhdHMgYXJlIHNvcnRl ZCBieSBwYXRoLCBzbyB3ZSBjYW4gc2ltcGx5IGRvIGJzZWFyY2goKS4KKyAqLworc3RhdGlj IEpzb25QYXRoU3RhdHMKK2pzb25TdGF0c0ZpbmRQYXRoU3RhdHMoSnNvblN0YXRzIGpzZGF0 YSwgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4pCit7CisJSnNvblBhdGhTdGF0cyBzdGF0czsK KwlKc29uYlZhbHVlCWpidmtleTsKKwlEYXR1bQkgICAqcGRhdHVtOworCisJSnNvblZhbHVl SW5pdFN0cmluZ1dpdGhMZW4oJmpidmtleSwgcGF0aCwgcGF0aGxlbik7CisKKwlwZGF0dW0g PSBic2VhcmNoKCZqYnZrZXksIGpzZGF0YS0+dmFsdWVzICsgMSwganNkYXRhLT5udmFsdWVz IC0gMSwKKwkJCQkJIHNpemVvZigqanNkYXRhLT52YWx1ZXMpLCBqc29uUGF0aFN0YXRzQ29t cGFyZSk7CisKKwlpZiAoIXBkYXR1bSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0cyA9IHBh bGxvYyhzaXplb2YoKnN0YXRzKSk7CisJc3RhdHMtPmRhdHVtID0gcGRhdHVtOworCXN0YXRz LT5kYXRhID0ganNkYXRhOworCXN0YXRzLT5wYXRoID0gcGF0aDsKKwlzdGF0cy0+cGF0aGxl biA9IHBhdGhsZW47CisJc3RhdHMtPnR5cGUgPSBKc29uUGF0aFN0YXRzVmFsdWVzOworCisJ cmV0dXJuIHN0YXRzOworfQorCisvKgorICoganNvblN0YXRzR2V0UGF0aFN0YXRzU3RyCisg KgkJPz8/CisgKgorICogWFhYIFNlZW1zIHRvIGRvIGVzc2VudGlhbGx5IHdoYXQganNvblN0 YXRzRmluZFBhdGhTdGF0cywgZXhjZXB0IHRoYXQgaXQgYWxzbworICogY29uc2lkZXJzIGpz ZGF0YS0+cHJlZml4LiBTZWVtcyBmYWlybHkgZWFzeSB0byBjb21iaW5lIHRob3NlIGludG8g YSBzaW5nbGUKKyAqIGZ1bmN0aW9uLgorICovCitKc29uUGF0aFN0YXRzCitqc29uU3RhdHNH ZXRQYXRoU3RhdHNTdHIoSnNvblN0YXRzIGpzZGF0YSwgY29uc3QgY2hhciAqc3VicGF0aCwg aW50IHN1YnBhdGhsZW4pCit7CisJSnNvblBhdGhTdGF0cyBzdGF0czsKKwljaGFyCSAgICpw YXRoOworCWludAkJCXBhdGhsZW47CisKKwlpZiAoanNkYXRhLT5udWxsZnJhYyA+PSAxLjAp CisJCXJldHVybiBOVUxMOworCisJcGF0aGxlbiA9IGpzZGF0YS0+cHJlZml4bGVuICsgc3Vi cGF0aGxlbiAtIDE7CisJcGF0aCA9IHBhbGxvYyhwYXRobGVuKTsKKworCW1lbWNweShwYXRo LCBqc2RhdGEtPnByZWZpeCwganNkYXRhLT5wcmVmaXhsZW4pOworCW1lbWNweSgmcGF0aFtq c2RhdGEtPnByZWZpeGxlbl0sICZzdWJwYXRoWzFdLCBzdWJwYXRobGVuIC0gMSk7CisKKwlz dGF0cyA9IGpzb25TdGF0c0ZpbmRQYXRoU3RhdHMoanNkYXRhLCBwYXRoLCBwYXRobGVuKTsK KworCWlmICghc3RhdHMpCisJCXBmcmVlKHBhdGgpOworCisJcmV0dXJuIHN0YXRzOworfQor CisvKgorICoganNvblBhdGhBcHBlbmRFbnRyeQorICoJCUFwcGVuZCBlbnRyeSAocmVwcmVz ZW50ZWQgYXMgc2ltcGxlIHN0cmluZykgdG8gYSBwYXRoLgorICovCitzdGF0aWMgdm9pZAor anNvblBhdGhBcHBlbmRFbnRyeShTdHJpbmdJbmZvIHBhdGgsIGNvbnN0IGNoYXIgKmVudHJ5 KQoreworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8ocGF0aCwgJy4nKTsKKwllc2NhcGVf anNvbihwYXRoLCBlbnRyeSk7Cit9CisKKy8qCisgKiBqc29uUGF0aEFwcGVuZEVudHJ5V2l0 aExlbgorICoJCUFwcGVuZCBzdHJpbmcgKHJlcHJlc2VudGVkIGFzIHN0cmluZyArIGxlbmd0 aCkgdG8gYSBwYXRoLgorICoKKyAqIFhYWCBEb2Vzbid0IHRoaXMgbmVlZCBlY2FwZV9qc29u IHRvbz8KKyAqLworc3RhdGljIHZvaWQKK2pzb25QYXRoQXBwZW5kRW50cnlXaXRoTGVuKFN0 cmluZ0luZm8gcGF0aCwgY29uc3QgY2hhciAqZW50cnksIGludCBsZW4pCit7CisJY2hhciAq dG1wZW50cnkgPSBwbnN0cmR1cChlbnRyeSwgbGVuKTsKKwlqc29uUGF0aEFwcGVuZEVudHJ5 KHBhdGgsIHRtcGVudHJ5KTsKKwlwZnJlZSh0bXBlbnRyeSk7Cit9CisKKy8qCisgKiBqc29u UGF0aFN0YXRzR2V0U3VicGF0aAorICoJCT8/PworICovCitKc29uUGF0aFN0YXRzCitqc29u UGF0aFN0YXRzR2V0U3VicGF0aChKc29uUGF0aFN0YXRzIHBzdGF0cywgY29uc3QgY2hhciAq a2V5LCBpbnQga2V5bGVuKQoreworCUpzb25QYXRoU3RhdHMgc3BzdGF0czsKKwljaGFyCSAg ICpwYXRoOworCWludAkJCXBhdGhsZW47CisKKwlpZiAoa2V5KQorCXsKKwkJU3RyaW5nSW5m b0RhdGEgc3RyOworCisJCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKCZzdHIsIHBzdGF0cy0+cGF0aCwgcHN0YXRzLT5wYXRobGVuKTsKKwkJanNv blBhdGhBcHBlbmRFbnRyeVdpdGhMZW4oJnN0ciwga2V5LCBrZXlsZW4pOworCisJCXBhdGgg PSBzdHIuZGF0YTsKKwkJcGF0aGxlbiA9IHN0ci5sZW47CisJfQorCWVsc2UKKwl7CisJCXBh dGhsZW4gPSBwc3RhdHMtPnBhdGhsZW4gKyAyOworCQlwYXRoID0gcGFsbG9jKHBhdGhsZW4g KyAxKTsKKwkJc25wcmludGYocGF0aCwgcHN0YXRzLT5wYXRobGVuICsgcGF0aGxlbiwgIiUu KnMuIyIsCisJCQkJIHBzdGF0cy0+cGF0aGxlbiwgcHN0YXRzLT5wYXRoKTsKKwl9CisKKwlz cHN0YXRzID0ganNvblN0YXRzRmluZFBhdGhTdGF0cyhwc3RhdHMtPmRhdGEsIHBhdGgsIHBh dGhsZW4pOworCWlmICghc3BzdGF0cykKKwkJcGZyZWUocGF0aCk7CisKKwlyZXR1cm4gc3Bz dGF0czsKK30KKworLyoKKyAqIGpzb25QYXRoU3RhdHNHZXRBcnJheUluZGV4U2VsZWN0aXZp dHkKKyAqCQlHaXZlbiBzdGF0cyBmb3IgYSBwYXRoLCBkZXRlcm1pbmUgc2VsZWN0aXZpdHkg Zm9yIGFuIGFycmF5IGluZGV4LgorICovCitTZWxlY3Rpdml0eQoranNvblBhdGhTdGF0c0dl dEFycmF5SW5kZXhTZWxlY3Rpdml0eShKc29uUGF0aFN0YXRzIHBzdGF0cywgaW50IGluZGV4 KQoreworCUpzb25QYXRoU3RhdHMgbGVuc3RhdHMgPSBqc29uUGF0aFN0YXRzR2V0QXJyYXlM ZW5ndGhTdGF0cyhwc3RhdHMpOworCUpzb25iVmFsdWUJdG1wamJ2OworCUpzb25iCSAgICpq YjsKKworCS8qCisJICogSWYgd2UgaGF2ZSBubyBhcnJheSBsZW5ndGggc3RhdHMsIGFzc3Vt ZSBhbGwgZG9jdW1lbnRzIG1hdGNoLgorCSAqCisJICogWFhYIFNob3VsZG4ndCB0aGlzIHVz ZSBhIGRlZmF1bHQgc21hbGxlciB0aGFuIDEuMD8gV2hhdCBkbyB0aGUgc2VsZnVuY3MKKwkg KiBmb3IgcmVndWxhciBhcnJheXMgdXNlPworCSAqLworCWlmICghbGVuc3RhdHMpCisJCXJl dHVybiAxLjA7CisKKwlqYiA9IEpzb25iVmFsdWVUb0pzb25iKEpzb25WYWx1ZUluaXRJbnRl Z2VyKCZ0bXBqYnYsIGluZGV4KSk7CisKKwkvKiBjYWxjdWxhdGUgZnJhY3Rpb24gb2YgZWxl bWVudHMgc21hbGxlciB0aGFuIHRoZSBpbmRleCAqLworCXJldHVybiBqc29uU2VsZWN0aXZp dHkobGVuc3RhdHMsIEpzb25iUEdldERhdHVtKGpiKSwgSnNvbmJHdE9wZXJhdG9yKTsKK30K KworLyoKKyAqIGpzb25TdGF0c0dldFBhdGhTdGF0cworICoJCT8/PworICoKKyAqIFhYWCBJ IGd1ZXNzIHBhdGhMZW4gc3RvcmVkIG51bWJlciBvZiBwYXRoRW50cmllcyBlbGVtZW50cywg c28gaXQgc2hvdWxkIGJlCisgKiBuRW50cmllcyBvciBzb21ldGhpbmcuIHBhdGhMZW4gaW1w bGllcyBpdCdzIGEgc3RyaW5nIGxlbmd0aC4KKyAqLworc3RhdGljIEpzb25QYXRoU3RhdHMK K2pzb25TdGF0c0dldFBhdGhTdGF0cyhKc29uU3RhdHMganNkYXRhLCBEYXR1bSAqcGF0aEVu dHJpZXMsIGludCBwYXRoTGVuLAorCQkJCQkgIGZsb2F0NCAqbnVsbGZyYWMpCit7CisJSnNv blBhdGhTdGF0cyBwc3RhdHM7CisJU2VsZWN0aXZpdHkJc2VsID0gMS4wOworCWludAkJCWk7 CisKKwlpZiAoIXBhdGhFbnRyaWVzICYmIHBhdGhMZW4gPCAwKQorCXsKKwkJaWYgKChwc3Rh dHMgPSBqc29uU3RhdHNHZXRQYXRoU3RhdHNTdHIoanNkYXRhLCAiJC4jIiwgMykpKQorCQl7 CisJCQlzZWwgPSBqc29uUGF0aFN0YXRzR2V0QXJyYXlJbmRleFNlbGVjdGl2aXR5KHBzdGF0 cywgLTEgLSBwYXRoTGVuKTsKKwkJCXNlbCAvPSBqc29uUGF0aFN0YXRzR2V0RnJlcShwc3Rh dHMsIDAuMCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcHN0YXRzID0ganNvblN0YXRzR2V0 UGF0aFN0YXRzU3RyKGpzZGF0YSwgIiQiLCAxKTsKKworCQlmb3IgKGkgPSAwOyBwc3RhdHMg JiYgaSA8IHBhdGhMZW47IGkrKykKKwkJeworCQkJY2hhcgkgICAqa2V5ID0gdGV4dF90b19j c3RyaW5nKERhdHVtR2V0VGV4dFAocGF0aEVudHJpZXNbaV0pKTsKKwkJCWludAkJCWtleWxl biA9IHN0cmxlbihrZXkpOworCisJCQkvKiBYWFggV2hhdCdzIHRoaXMga2V5ICIwMTIzNDU2 Nzg5IiBhYm91dD8gKi8KKwkJCWlmIChrZXlbMF0gPj0gJzAnICYmIGtleVswXSA8PSAnOScg JiYKKwkJCQlrZXlbc3Ryc3BuKGtleSwgIjAxMjM0NTY3ODkiKV0gPT0gJ1wwJykKKwkJCXsK KwkJCQljaGFyCSAgICp0YWlsOworCQkJCWxvbmcJCWluZGV4OworCisJCQkJZXJybm8gPSAw OworCQkJCWluZGV4ID0gc3RydG9sKGtleSwgJnRhaWwsIDEwKTsKKworCQkJCWlmICgqdGFp bCB8fCBlcnJubyB8fCBpbmRleCA+IElOVF9NQVggfHwgaW5kZXggPCAwKQorCQkJCQlwc3Rh dHMgPSBqc29uUGF0aFN0YXRzR2V0U3VicGF0aChwc3RhdHMsIGtleSwga2V5bGVuKTsKKwkJ CQllbHNlCisJCQkJeworCQkJCQlmbG9hdDQJYXJyZnJlcTsKKworCQkJCQkvKiBGSVhNRSBj b25zaWRlciBrZXkgYWxzbyAqLworCQkJCQlwc3RhdHMgPSBqc29uUGF0aFN0YXRzR2V0U3Vi cGF0aChwc3RhdHMsIE5VTEwsIDApOworCQkJCQlzZWwgKj0ganNvblBhdGhTdGF0c0dldEFy cmF5SW5kZXhTZWxlY3Rpdml0eShwc3RhdHMsIGluZGV4KTsKKwkJCQkJYXJyZnJlcSA9IGpz b25QYXRoU3RhdHNHZXRGcmVxKHBzdGF0cywgMC4wKTsKKworCQkJCQlpZiAoYXJyZnJlcSA+ IDAuMCkKKwkJCQkJCXNlbCAvPSBhcnJmcmVxOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJ CQlwc3RhdHMgPSBqc29uUGF0aFN0YXRzR2V0U3VicGF0aChwc3RhdHMsIGtleSwga2V5bGVu KTsKKworCQkJcGZyZWUoa2V5KTsKKwkJfQorCX0KKworCSpudWxsZnJhYyA9IDEuMCAtIHNl bDsKKworCXJldHVybiBwc3RhdHM7Cit9CisKKy8qCisgKiBqc29uUGF0aFN0YXRzR2V0TmV4 dEtleVN0YXRzCisgKgkJPz8/CisgKi8KK2Jvb2wKK2pzb25QYXRoU3RhdHNHZXROZXh0S2V5 U3RhdHMoSnNvblBhdGhTdGF0cyBzdGF0cywgSnNvblBhdGhTdGF0cyAqcGtleXN0YXRzLAor CQkJCQkJCSBib29sIGtleXNPbmx5KQoreworCUpzb25QYXRoU3RhdHMga2V5c3RhdHMgPSAq cGtleXN0YXRzOworCWludAkJCWluZGV4ID0KKwkJKGtleXN0YXRzID8ga2V5c3RhdHMtPmRh dHVtIDogc3RhdHMtPmRhdHVtKSAtIHN0YXRzLT5kYXRhLT52YWx1ZXMgKyAxOworCisJZm9y ICg7IGluZGV4IDwgc3RhdHMtPmRhdGEtPm52YWx1ZXM7IGluZGV4KyspCisJeworCQlKc29u YlZhbHVlCXBhdGhrZXk7CisJCUpzb25iVmFsdWUgKmpidnBhdGg7CisJCUpzb25iCSAgICpq YiA9IERhdHVtR2V0SnNvbmJQKHN0YXRzLT5kYXRhLT52YWx1ZXNbaW5kZXhdKTsKKworCQlK c29uVmFsdWVJbml0U3RyaW5nV2l0aExlbigmcGF0aGtleSwgInBhdGgiLCA0KTsKKwkJamJ2 cGF0aCA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcigmamItPnJvb3QsIEpCX0ZPQkpF Q1QsICZwYXRoa2V5KTsKKworCQlpZiAoamJ2cGF0aC0+dHlwZSAhPSBqYnZTdHJpbmcgfHwK KwkJCWpidnBhdGgtPnZhbC5zdHJpbmcubGVuIDw9IHN0YXRzLT5wYXRobGVuIHx8CisJCQlt ZW1jbXAoamJ2cGF0aC0+dmFsLnN0cmluZy52YWwsIHN0YXRzLT5wYXRoLCBzdGF0cy0+cGF0 aGxlbikpCisJCQlicmVhazsKKworCQlpZiAoa2V5c09ubHkpCisJCXsKKwkJCWNvbnN0IGNo YXIgKmMgPSAmamJ2cGF0aC0+dmFsLnN0cmluZy52YWxbc3RhdHMtPnBhdGhsZW5dOworCisJ CQlBc3NlcnQoKmMgPT0gJy4nKTsKKwkJCWMrKzsKKworCQkJaWYgKCpjID09ICcjJykKKwkJ CXsKKwkJCQlpZiAoa2V5c09ubHkgfHwgamJ2cGF0aC0+dmFsLnN0cmluZy5sZW4gPiBzdGF0 cy0+cGF0aGxlbiArIDIpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCUFzc2VydCgqYyA9PSAnIicpOworCisJCQkJd2hpbGUgKCorK2MgIT0gJyInKQorCQkJ CQlpZiAoKmMgPT0gJ1xcJykKKwkJCQkJCWMrKzsKKworCQkJCWlmIChjIC0gamJ2cGF0aC0+ dmFsLnN0cmluZy52YWwgPCBqYnZwYXRoLT52YWwuc3RyaW5nLmxlbiAtIDEpCisJCQkJCWNv bnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKCFrZXlzdGF0cykKKwkJCWtleXN0YXRzID0g cGFsbG9jKHNpemVvZigqa2V5c3RhdHMpKTsKKworCQlrZXlzdGF0cy0+ZGF0dW0gPSAmc3Rh dHMtPmRhdGEtPnZhbHVlc1tpbmRleF07CisJCWtleXN0YXRzLT5kYXRhID0gc3RhdHMtPmRh dGE7CisJCWtleXN0YXRzLT5wYXRobGVuID0gamJ2cGF0aC0+dmFsLnN0cmluZy5sZW47CisJ CWtleXN0YXRzLT5wYXRoID0gbWVtY3B5KHBhbGxvYyhrZXlzdGF0cy0+cGF0aGxlbiksCisJ CQkJCQkJCWpidnBhdGgtPnZhbC5zdHJpbmcudmFsLCBrZXlzdGF0cy0+cGF0aGxlbik7CisJ CWtleXN0YXRzLT50eXBlID0gSnNvblBhdGhTdGF0c1ZhbHVlczsKKworCQkqcGtleXN0YXRz ID0ga2V5c3RhdHM7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCisvKgorICoganNvblN0YXRzQ29udmVydEFycmF5CisgKgkJQ29udmVydCBhIEpTT05C IGFycmF5IGludG8gYW4gYXJyYXkgb2Ygc29tZSByZWd1bGFyIGRhdGEgdHlwZS4KKyAqCisg KiBUaGUgInR5cGUiIGlkZW50aWZpZXMgd2hhdCBlbGVtZW50cyBhcmUgaW4gdGhlIGlucHV0 IEpTT05CIGFycmF5LCB3aGlsZQorICogdHlwaWQgZGV0ZXJtaW5lcyB0aGUgdGFyZ2V0IHR5 cGUuCisgKi8KK3N0YXRpYyBEYXR1bQoranNvblN0YXRzQ29udmVydEFycmF5KERhdHVtIGpz b25iVmFsdWVBcnJheSwgSnNvblN0YXRUeXBlIHR5cGUsIE9pZCB0eXBpZCwKKwkJCQkJICBm bG9hdDQgbXVsdGlwbGllcikKK3sKKwlEYXR1bQkgICAqdmFsdWVzOworCUpzb25iCSAgICpq YnZhbHM7CisJSnNvbmJWYWx1ZQlqYnY7CisJSnNvbmJJdGVyYXRvciAqaXQ7CisJSnNvbmJJ dGVyYXRvclRva2VuIHI7CisJaW50CQkJbnZhbHVlczsKKwlpbnQJCQlpOworCisJaWYgKCFE YXR1bUdldFBvaW50ZXIoanNvbmJWYWx1ZUFycmF5KSkKKwkJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKKworCWpidmFscyA9IERhdHVtR2V0SnNvbmJQKGpzb25iVmFsdWVBcnJh eSk7CisKKwludmFsdWVzID0gSnNvbkNvbnRhaW5lclNpemUoJmpidmFscy0+cm9vdCk7CisK Kwl2YWx1ZXMgPSBwYWxsb2Moc2l6ZW9mKERhdHVtKSAqIG52YWx1ZXMpOworCisJZm9yIChp ID0gMCwgaXQgPSBKc29uYkl0ZXJhdG9ySW5pdCgmamJ2YWxzLT5yb290KTsKKwkJKHIgPSBK c29uYkl0ZXJhdG9yTmV4dCgmaXQsICZqYnYsIHRydWUpKSAhPSBXSkJfRE9ORTspCisJewor CQlpZiAociA9PSBXSkJfRUxFTSkKKwkJeworCQkJRGF0dW0gdmFsdWU7CisKKwkJCXN3aXRj aCAodHlwZSkKKwkJCXsKKwkJCQljYXNlIEpzb25TdGF0SnNvbmI6CisJCQkJY2FzZSBKc29u U3RhdEpzb25iV2l0aG91dFN1YnBhdGhzOgorCQkJCQl2YWx1ZSA9IEpzb25iUEdldERhdHVt KEpzb25iVmFsdWVUb0pzb25iKCZqYnYpKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEpz b25TdGF0VGV4dDoKKwkJCQljYXNlIEpzb25TdGF0U3RyaW5nOgorCQkJCQlBc3NlcnQoamJ2 LnR5cGUgPT0gamJ2U3RyaW5nKTsKKwkJCQkJdmFsdWUgPSBQb2ludGVyR2V0RGF0dW0oCisJ CQkJCQkJCWNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihqYnYudmFsLnN0cmluZy52YWwsCisJ CQkJCQkJCQkJCQkJCSBqYnYudmFsLnN0cmluZy5sZW4pKTsKKwkJCQkJYnJlYWs7CisKKwkJ CQljYXNlIEpzb25TdGF0TnVtZXJpYzoKKwkJCQkJQXNzZXJ0KGpidi50eXBlID09IGpidk51 bWVyaWMpOworCQkJCQl2YWx1ZSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19mbG9h dDQsCisJCQkJCQkJCQkJCQlOdW1lcmljR2V0RGF0dW0oamJ2LnZhbC5udW1lcmljKSk7CisJ CQkJCXZhbHVlID0gRmxvYXQ0R2V0RGF0dW0oRGF0dW1HZXRGbG9hdDQodmFsdWUpICogbXVs dGlwbGllcik7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJP UiwgImludmFsaWQganNvbiBzdGF0IHR5cGUgJWQiLCB0eXBlKTsKKwkJCQkJdmFsdWUgPSAo RGF0dW0pIDA7CisJCQkJCWJyZWFrOworCQkJfQorCisJCQlBc3NlcnQoaSA8IG52YWx1ZXMp OworCQkJdmFsdWVzW2krK10gPSB2YWx1ZTsKKwkJfQorCX0KKworCUFzc2VydChpID09IG52 YWx1ZXMpOworCisJLyoKKwkgKiBGSVhNRSBEb2VzIHRoaXMgYWN0dWFsbHkgd29yayBvbiBh bGwgMzIvNjQtYml0IHN5c3RlbXM/IFdoYXQgaWYgdHlwaWQgaXMKKwkgKiBGTE9BVDhPSUQg b3Igc29tZXRoaW5nPyBTaG91bGQgbG9vayBhdCBUeXBlQ2FjaGUgaW5zdGVhZCwgcHJvYmFi bHkuCisJICovCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bSgKKwkJCWNvbnN0cnVjdF9hcnJh eSh2YWx1ZXMsIG52YWx1ZXMsCisJCQkJCQkJdHlwaWQsCisJCQkJCQkJdHlwaWQgPT0gRkxP QVQ0T0lEID8gNCA6IC0xLAorCQkJCQkJCXR5cGlkID09IEZMT0FUNE9JRCA/IHRydWUgLyog RkxPQVQ0UEFTU0JZVkFMICovIDogZmFsc2UsCisJCQkJCQkJJ2knKSk7Cit9CisKKy8qCisg KiBqc29uUGF0aFN0YXRzRXh0cmFjdERhdGEKKyAqCQlFeHRyYWN0IHBnX3N0YXRpc3RpY3Mg dmFsdWVzIGZyb20gc3RhdGlzdGljcyBmb3IgYSBzaW5nbGUgcGF0aC4KKyAqCisgKgorICov CitzdGF0aWMgYm9vbAoranNvblBhdGhTdGF0c0V4dHJhY3REYXRhKEpzb25QYXRoU3RhdHMg cHN0YXRzLCBKc29uU3RhdFR5cGUgc3RhdHR5cGUsCisJCQkJCQkgZmxvYXQ0IG51bGxmcmFj LCBTdGF0c0RhdGEgKnN0YXRkYXRhKQoreworCURhdHVtCQlkYXRhOworCURhdHVtCQludWxs ZjsKKwlEYXR1bQkJZGlzdDsKKwlEYXR1bQkJd2lkdGg7CisJRGF0dW0JCW1jdjsKKwlEYXR1 bQkJaHN0OworCURhdHVtCQljb3JyOworCU9pZAkJCXR5cGU7CisJT2lkCQkJZXFvcDsKKwlP aWQJCQlsdG9wOworCWNvbnN0IGNoYXIgKmtleTsKKwlTdGF0c1Nsb3QgICpzbG90ID0gc3Rh dGRhdGEtPnNsb3RzOworCisJbnVsbGZyYWMgPSAxLjAgLSAoMS4wIC0gcHN0YXRzLT5kYXRh LT5udWxsZnJhYykgKiAoMS4wIC0gbnVsbGZyYWMpOworCisJc3dpdGNoIChzdGF0dHlwZSkK Kwl7CisJCWNhc2UgSnNvblN0YXRKc29uYjoKKwkJY2FzZSBKc29uU3RhdEpzb25iV2l0aG91 dFN1YnBhdGhzOgorCQkJa2V5ID0gcHN0YXRzLT50eXBlID09IEpzb25QYXRoU3RhdHNBcnJh eUxlbmd0aCA/ICJhcnJheV9sZW5ndGgiIDoKKwkJCQkgIHBzdGF0cy0+dHlwZSA9PSBKc29u UGF0aFN0YXRzTGVuZ3RoID8gImxlbmd0aCIgOiAianNvbiI7CisJCQl0eXBlID0gSlNPTkJP SUQ7CisJCQllcW9wID0gSnNvbmJFcU9wZXJhdG9yOworCQkJbHRvcCA9IEpzb25iTHRPcGVy YXRvcjsKKwkJCWJyZWFrOworCQljYXNlIEpzb25TdGF0VGV4dDoKKwkJCWtleSA9ICJ0ZXh0 IjsKKwkJCXR5cGUgPSBURVhUT0lEOworCQkJZXFvcCA9IFRleHRFcXVhbE9wZXJhdG9yOwor CQkJbHRvcCA9IFRleHRMZXNzT3BlcmF0b3I7CisJCQlicmVhazsKKwkJY2FzZSBKc29uU3Rh dFN0cmluZzoKKwkJCWtleSA9ICJzdHJpbmciOworCQkJdHlwZSA9IFRFWFRPSUQ7CisJCQll cW9wID0gVGV4dEVxdWFsT3BlcmF0b3I7CisJCQlsdG9wID0gVGV4dExlc3NPcGVyYXRvcjsK KwkJCWJyZWFrOworCQljYXNlIEpzb25TdGF0TnVtZXJpYzoKKwkJCWtleSA9ICJudW1lcmlj IjsKKwkJCXR5cGUgPSBOVU1FUklDT0lEOworCQkJZXFvcCA9IE51bWVyaWNFcU9wZXJhdG9y OworCQkJbHRvcCA9IE51bWVyaWNMdE9wZXJhdG9yOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBqc29uIHN0YXRpc3RpYyB0eXBlICVkIiwgc3Rh dHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJZGF0YSA9IGpzb25HZXRGaWVsZCgqcHN0YXRz LT5kYXR1bSwga2V5KTsKKworCWlmICghRGF0dW1HZXRQb2ludGVyKGRhdGEpKQorCQlyZXR1 cm4gZmFsc2U7CisKKwludWxsZiA9IGpzb25HZXRGaWVsZChkYXRhLCAibnVsbGZyYWMiKTsK KwlkaXN0ID0ganNvbkdldEZpZWxkKGRhdGEsICJkaXN0aW5jdCIpOworCXdpZHRoID0ganNv bkdldEZpZWxkKGRhdGEsICJ3aWR0aCIpOworCW1jdiA9IGpzb25HZXRGaWVsZChkYXRhLCAi bWN2Iik7CisJaHN0ID0ganNvbkdldEZpZWxkKGRhdGEsICJoaXN0b2dyYW0iKTsKKwljb3Jy ID0ganNvbkdldEZpZWxkKGRhdGEsICJjb3JyZWxhdGlvbiIpOworCisJc3RhdGRhdGEtPm51 bGxmcmFjID0gRGF0dW1HZXRQb2ludGVyKG51bGxmKSA/CisJCQkJCQkJRGF0dW1HZXRGbG9h dDQoanNvbkdldEZsb2F0NChudWxsZikpIDogMC4wOworCXN0YXRkYXRhLT5kaXN0aW5jdCA9 IERhdHVtR2V0UG9pbnRlcihkaXN0KSA/CisJCQkJCQkJRGF0dW1HZXRGbG9hdDQoanNvbkdl dEZsb2F0NChkaXN0KSkgOiAwLjA7CisJc3RhdGRhdGEtPndpZHRoID0gRGF0dW1HZXRQb2lu dGVyKHdpZHRoKSA/CisJCQkJCQkJKGludDMyKSBEYXR1bUdldEZsb2F0NChqc29uR2V0Rmxv YXQ0KHdpZHRoKSkgOiAwOworCisJc3RhdGRhdGEtPm51bGxmcmFjICs9ICgxLjAgLSBzdGF0 ZGF0YS0+bnVsbGZyYWMpICogbnVsbGZyYWM7CisKKwlpZiAoRGF0dW1HZXRQb2ludGVyKG1j dikpCisJeworCQlzbG90LT5raW5kID0gU1RBVElTVElDX0tJTkRfTUNWOworCQlzbG90LT5v cGlkID0gZXFvcDsKKwkJc2xvdC0+bnVtYmVycyA9IGpzb25TdGF0c0NvbnZlcnRBcnJheShq c29uR2V0RmllbGQobWN2LCAibnVtYmVycyIpLAorCQkJCQkJCQkJCQkgIEpzb25TdGF0TnVt ZXJpYywgRkxPQVQ0T0lELAorCQkJCQkJCQkJCQkgIDEuMCAtIG51bGxmcmFjKTsKKwkJc2xv dC0+dmFsdWVzICA9IGpzb25TdGF0c0NvbnZlcnRBcnJheShqc29uR2V0RmllbGQobWN2LCAi dmFsdWVzIiksCisJCQkJCQkJCQkJCSAgc3RhdHR5cGUsIHR5cGUsIDApOworCQlzbG90Kys7 CisJfQorCisJaWYgKERhdHVtR2V0UG9pbnRlcihoc3QpKQorCXsKKwkJc2xvdC0+a2luZCA9 IFNUQVRJU1RJQ19LSU5EX0hJU1RPR1JBTTsKKwkJc2xvdC0+b3BpZCA9IGx0b3A7CisJCXNs b3QtPm51bWJlcnMgPSBqc29uU3RhdHNDb252ZXJ0QXJyYXkoanNvbkdldEZpZWxkKGhzdCwg Im51bWJlcnMiKSwKKwkJCQkJCQkJCQkJICBKc29uU3RhdE51bWVyaWMsIEZMT0FUNE9JRCwg MS4wKTsKKwkJc2xvdC0+dmFsdWVzICA9IGpzb25TdGF0c0NvbnZlcnRBcnJheShqc29uR2V0 RmllbGQoaHN0LCAidmFsdWVzIiksCisJCQkJCQkJCQkJCSAgc3RhdHR5cGUsIHR5cGUsIDAp OworCQlzbG90Kys7CisJfQorCisJaWYgKERhdHVtR2V0UG9pbnRlcihjb3JyKSkKKwl7CisJ CURhdHVtCWNvcnJlbGF0aW9uID0ganNvbkdldEZsb2F0NChjb3JyKTsKKwkJc2xvdC0+a2lu ZCA9IFNUQVRJU1RJQ19LSU5EX0NPUlJFTEFUSU9OOworCQlzbG90LT5vcGlkID0gbHRvcDsK KwkJc2xvdC0+bnVtYmVycyA9IFBvaW50ZXJHZXREYXR1bShjb25zdHJ1Y3RfYXJyYXkoJmNv cnJlbGF0aW9uLCAxLAorCQkJCQkJCQkJCQkJCQlGTE9BVDRPSUQsIDQsIHRydWUsCisJCQkJ CQkJCQkJCQkJCSdpJykpOworCQlzbG90Kys7CisJfQorCisJaWYgKChzdGF0dHlwZSA9PSBK c29uU3RhdEpzb25iIHx8CisJCSBzdGF0dHlwZSA9PSBKc29uU3RhdEpzb25iV2l0aG91dFN1 YnBhdGhzKSAmJgorCQlqc29uQW5hbHl6ZUJ1aWxkU3ViUGF0aHNEYXRhKHBzdGF0cy0+ZGF0 YS0+dmFsdWVzLAorCQkJCQkJCQkJIHBzdGF0cy0+ZGF0YS0+bnZhbHVlcywKKwkJCQkJCQkJ CSBwc3RhdHMtPmRhdHVtIC0gcHN0YXRzLT5kYXRhLT52YWx1ZXMsCisJCQkJCQkJCQkgcHN0 YXRzLT5wYXRoLAorCQkJCQkJCQkJIHBzdGF0cy0+cGF0aGxlbiwKKwkJCQkJCQkJCSBzdGF0 dHlwZSA9PSBKc29uU3RhdEpzb25iLAorCQkJCQkJCQkJIG51bGxmcmFjLAorCQkJCQkJCQkJ ICZzbG90LT52YWx1ZXMsCisJCQkJCQkJCQkgJnNsb3QtPm51bWJlcnMpKQorCXsKKwkJc2xv dC0+a2luZCA9IFNUQVRJU1RJQ19LSU5EX0pTT047CisJCXNsb3QrKzsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworc3RhdGljIGZsb2F0NAoranNvblBhdGhTdGF0c0dldEZsb2F0KEpz b25QYXRoU3RhdHMgcHN0YXRzLCBjb25zdCBjaGFyICprZXksCisJCQkJCWZsb2F0NCBkZWZh dWx0dmFsKQoreworCURhdHVtCQlmcmVxOworCisJaWYgKCFwc3RhdHMgfHwgIShmcmVxID0g anNvbkdldEZpZWxkKCpwc3RhdHMtPmRhdHVtLCBrZXkpKSkKKwkJcmV0dXJuIGRlZmF1bHR2 YWw7CisKKwlyZXR1cm4gRGF0dW1HZXRGbG9hdDQoanNvbkdldEZsb2F0NChmcmVxKSk7Cit9 CisKK2Zsb2F0NAoranNvblBhdGhTdGF0c0dldEZyZXEoSnNvblBhdGhTdGF0cyBwc3RhdHMs IGZsb2F0NCBkZWZhdWx0ZnJlcSkKK3sKKwlyZXR1cm4ganNvblBhdGhTdGF0c0dldEZsb2F0 KHBzdGF0cywgImZyZXEiLCBkZWZhdWx0ZnJlcSk7Cit9CisKK2Zsb2F0NAoranNvblBhdGhT dGF0c0dldEF2Z0FycmF5U2l6ZShKc29uUGF0aFN0YXRzIHBzdGF0cykKK3sKKwlyZXR1cm4g anNvblBhdGhTdGF0c0dldEZsb2F0KHBzdGF0cywgImF2Z19hcnJheV9sZW5ndGgiLCAxLjAp OworfQorCisvKgorICoganNvblBhdGhTdGF0c0dldFR5cGVGcmVxCisgKgkJR2V0IGZyZXF1 ZW5jeSBvZiBkaWZmZXJlbnQgSlNPTiBvYmplY3QgdHlwZXMgZm9yIGEgZ2l2ZW4gcGF0aC4K KyAqCisgKiBKU09OIGRvY3VtZW50cyBkb24ndCBoYXZlIGFueSBwYXJ0aWN1bGFyIHNjaGVt YSwgYW5kIHRoZSBzYW1lIHBhdGggbWF5IHBvaW50CisgKiB0byB2YWx1ZXMgd2l0aCBkaWZm ZXJlbnQgdHlwZXMgaW4gbXVsdGlwbGUgZG9jdW1lbnRzLiBDb25zaWRlciBmb3IgZXhhbXBs ZQorICogdHdvIGRvY3VtZW50cyB7ImEiIDogImIifSBhbmQgeyJhIiA6IDEwMH0gd2hpY2gg aGF2ZSBib3RoIGEgc3RyaW5nIGFuZCBpbnQKKyAqIGZvciB0aGUgc2FtZSBwYXRoLiBTbyB3 ZSB0cmFjayB0aGUgZnJlcXVlbmN5IG9mIGRpZmZlcmVudCBKU09OIHR5cGVzIGZvcgorICog ZWFjaCBwYXRoLCBzbyB0aGF0IHdlIGNhbiBjb25zaWRlciB0aGlzIGxhdGVyLgorICovCitm bG9hdDQKK2pzb25QYXRoU3RhdHNHZXRUeXBlRnJlcShKc29uUGF0aFN0YXRzIHBzdGF0cywg SnNvbmJWYWx1ZVR5cGUgdHlwZSwKKwkJCQkJCSBmbG9hdDQgZGVmYXVsdGZyZXEpCit7CisJ Y29uc3QgY2hhciAqa2V5OworCisJaWYgKCFwc3RhdHMpCisJCXJldHVybiBkZWZhdWx0ZnJl cTsKKworCS8qCisJICogV2hlbiBkZWFsaW5nIHdpdGggKG9iamVjdC9hcnJheSkgbGVuZ3Ro IHN0YXRzLCB3ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0CisJICogb2JqZWN0cyBhbmQgYXJy YXlzLgorCSAqLworCWlmIChwc3RhdHMtPnR5cGUgPT0gSnNvblBhdGhTdGF0c0xlbmd0aCB8 fAorCQlwc3RhdHMtPnR5cGUgPT0gSnNvblBhdGhTdGF0c0FycmF5TGVuZ3RoKQorCXsKKwkJ LyogWFhYIFNlZW1zIG1vcmUgbGlrZSBhbiBlcnJvciwgbm8/IFdoeSBpZ25vcmUgaXQ/ICov CisJCWlmICh0eXBlICE9IGpidk51bWVyaWMpCisJCQlyZXR1cm4gMC4wOworCisJCS8qIEZJ WE1FIFRoaXMgaXMgcmVhbGx5IGhhcmQgdG8gcmVhZC91bmRlcnN0YW5kLCB3aXRoIHR3byBu ZXN0ZWQgdGVybmFyeSBvcGVyYXRvcnMuICovCisJCXJldHVybiBwc3RhdHMtPnR5cGUgPT0g SnNvblBhdGhTdGF0c0FycmF5TGVuZ3RoCisJCQkJPyBqc29uUGF0aFN0YXRzR2V0RnJlcShw c3RhdHMsIGRlZmF1bHRmcmVxKQorCQkJCToganNvblBhdGhTdGF0c0dldEZsb2F0KHBzdGF0 cywgImZyZXFfYXJyYXkiLCBkZWZhdWx0ZnJlcSkgKworCQkJCSAganNvblBhdGhTdGF0c0dl dEZsb2F0KHBzdGF0cywgImZyZXFfb2JqZWN0IiwgZGVmYXVsdGZyZXEpOworCX0KKworCS8q IFdoaWNoIEpTT04gdHlwZSBhcmUgd2UgaW50ZXJlc3RlZCBpbj8gUGljayB0aGUgcmlnaHQg ZnJlcV90eXBlIGtleS4gKi8KKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIGpidk51bGw6 CisJCQlrZXkgPSAiZnJlcV9udWxsIjsKKwkJCWJyZWFrOworCQljYXNlIGpidlN0cmluZzoK KwkJCWtleSA9ICJmcmVxX3N0cmluZyI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZOdW1lcmlj OgorCQkJa2V5ID0gImZyZXFfbnVtZXJpYyI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZCb29s OgorCQkJa2V5ID0gImZyZXFfYm9vbGVhbiI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZPYmpl Y3Q6CisJCQlrZXkgPSAiZnJlcV9vYmplY3QiOworCQkJYnJlYWs7CisJCWNhc2UgamJ2QXJy YXk6CisJCQlrZXkgPSAiZnJlcV9hcnJheSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJJbnZhbGlkIGpzb25iIHZhbHVlIHR5cGU6ICVkIiwgdHlwZSk7CisJ CQlicmVhazsKKwl9CisKKwlyZXR1cm4ganNvblBhdGhTdGF0c0dldEZsb2F0KHBzdGF0cywg a2V5LCBkZWZhdWx0ZnJlcSk7Cit9CisKKy8qCisgKiBqc29uUGF0aFN0YXRzRm9ybVR1cGxl CisgKgkJRm9yIGEgcGdfc3RhdGlzdGljIHR1cGxlIHJlcHJlc2VudGluZyBKU09OIHN0YXRp c3RpY3MuCisgKgorICogWFhYIE1heWJlIGl0J3MgYSBiaXQgZXhwZW5zaXZlIHRvIGZpcnN0 IGJ1aWxkIFN0YXRzRGF0YSBhbmQgdGhlbiB0cmFuc2Zvcm0gaXQKKyAqIGFnYWluIHdoaWxl IGJ1aWxkaW5nIHRoZSB0dXBsZS4gQ291bGQgaXQgYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVw PyBXb3VsZCBpdCBiZQorICogbW9yZSBlZmZpY2llbnQ/IE5vdCBzdXJlIGhvdyBleHBlbnNp dmUgaXQgYWN0dWFsbHkgaXMsIHRob3VnaC4KKyAqLworc3RhdGljIEhlYXBUdXBsZQoranNv blBhdGhTdGF0c0Zvcm1UdXBsZShKc29uUGF0aFN0YXRzIHBzdGF0cywgSnNvblN0YXRUeXBl IHR5cGUsIGZsb2F0NCBudWxsZnJhYykKK3sKKwlTdGF0c0RhdGEJc3RhdGRhdGE7CisKKwlp ZiAoIXBzdGF0cyB8fCAhcHN0YXRzLT5kYXR1bSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBG SVhNRSBXaGF0IGRvZXMgdGhpcyBtZWFuPyAqLworCWlmIChwc3RhdHMtPmRhdHVtID09ICZw c3RhdHMtPmRhdGEtPnZhbHVlc1sxXSAmJgorCQlwc3RhdHMtPnR5cGUgPT0gSnNvblBhdGhT dGF0c1ZhbHVlcykKKwkJcmV0dXJuIGhlYXBfY29weXR1cGxlKHBzdGF0cy0+ZGF0YS0+c3Rh dHNUdXBsZSk7CisKKwlNZW1TZXQoJnN0YXRkYXRhLCAwLCBzaXplb2Yoc3RhdGRhdGEpKTsK KworCWlmICghanNvblBhdGhTdGF0c0V4dHJhY3REYXRhKHBzdGF0cywgdHlwZSwgbnVsbGZy YWMsICZzdGF0ZGF0YSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN0YXRzX2Zvcm1f dHVwbGUoJnN0YXRkYXRhKTsKK30KKworLyoKKyAqIGpzb25TdGF0c0dldFBhdGhTdGF0c1R1 cGxlCisgKgkJPz8/CisgKi8KK3N0YXRpYyBIZWFwVHVwbGUKK2pzb25TdGF0c0dldFBhdGhT dGF0c1R1cGxlKEpzb25TdGF0cyBqc2RhdGEsIEpzb25TdGF0VHlwZSB0eXBlLAorCQkJCQkJ ICAgRGF0dW0gKnBhdGgsIGludCBwYXRobGVuKQoreworCWZsb2F0NAkJCW51bGxmcmFjOwor CUpzb25QYXRoU3RhdHMJcHN0YXRzID0ganNvblN0YXRzR2V0UGF0aFN0YXRzKGpzZGF0YSwg cGF0aCwgcGF0aGxlbiwKKwkJCQkJCQkJCQkJCSAgICZudWxsZnJhYyk7CisKKwlyZXR1cm4g anNvblBhdGhTdGF0c0Zvcm1UdXBsZShwc3RhdHMsIHR5cGUsIG51bGxmcmFjKTsKK30KKwor LyoKKyAqIGpzb25TdGF0c0dldFBhdGhGcmVxCisgKgkJUmV0dXJuIGZyZXF1ZW5jeSBvZiBh IHBhdGggKGZyYWN0aW9uIG9mIGRvY3VtZW50cyBjb250YWluaW5nIGl0KS4KKyAqLworc3Rh dGljIGZsb2F0NAoranNvblN0YXRzR2V0UGF0aEZyZXEoSnNvblN0YXRzIGpzZGF0YSwgRGF0 dW0gKnBhdGgsIGludCBwYXRobGVuKQoreworCWZsb2F0NAkJCW51bGxmcmFjOworCUpzb25Q YXRoU3RhdHMJcHN0YXRzID0ganNvblN0YXRzR2V0UGF0aFN0YXRzKGpzZGF0YSwgcGF0aCwg cGF0aGxlbiwKKwkJCQkJCQkJCQkJCSAgICZudWxsZnJhYyk7CisJZmxvYXQ0CQkJZnJlcSA9 ICgxLjAgLSBudWxsZnJhYykgKiBqc29uUGF0aFN0YXRzR2V0RnJlcShwc3RhdHMsIDAuMCk7 CisKKwlDTEFNUF9QUk9CQUJJTElUWShmcmVxKTsKKwlyZXR1cm4gZnJlcTsKK30KKworLyoK KyAqIGpzb25iU3RhdHNWYXJPcENvbnN0CisgKgkJUHJlcGFyZSBvcHRpbWl6ZXIgc3RhdGlz dGljcyBmb3IgYSBnaXZlbiBvcGVyYXRvciwgZnJvbSBKU09OIHN0YXRzLgorICoKKyAqIFRo aXMgaGFuZGxlcyBvbmx5IE9wRXhwciBleHByZXNzaW9ucywgd2l0aCB2YXJpYWJsZSBhbmQg YSBjb25zdGFudC4gV2UgZ2V0CisgKiB0aGUgY29uc3RhbnQgYXMgaXMsIGFuZCB0aGUgdmFy aWFibGUgaXMgcmVwcmVzZW50ZWQgYnkgc3RhdGlzdGljcyBmZXRjaGVkCisgKiBieSBnZXRf cmVzdHJpY3Rpb25fdmFyaWFibGUoKS4KKyAqCisgKiBvcGlkICAgIC0gT0lEIG9mIHRoZSBv cGVyYXRvciAoaW5wdXQgcGFyYW1ldGVyKQorICogcmVzZGF0YSAtIHBvaW50ZXIgdG8gY2Fs Y3VsYXRlZCBzdGF0aXN0aWNzIGZvciByZXN1bHQgb2Ygb3BlcmF0b3IKKyAqIHZhcmRhdGEg LSBzdGF0aXN0aWNzIGZvciB0aGUgcmVzdHJpY3Rpb24gdmFyaWFibGUKKyAqIGNuc3QgICAg LSBjb25zdGFudCBmcm9tIHRoZSBvcGVyYXRvciBleHByZXNzaW9uCisgKgorICogUmV0dXJu cyB0cnVlIHdoZW4gdXNlZnVsIG9wdGltaXplciBzdGF0aXN0aWNzIGhhdmUgYmVlbiBjYWxj dWxhdGVkLgorICovCitzdGF0aWMgYm9vbAoranNvbmJTdGF0c1Zhck9wQ29uc3QoT2lkIG9w aWQsIFZhcmlhYmxlU3RhdERhdGEgKnJlc2RhdGEsCisJCQkJCSBjb25zdCBWYXJpYWJsZVN0 YXREYXRhICp2YXJkYXRhLCBDb25zdCAqY25zdCkKK3sKKwlKc29uU3RhdERhdGEganNkYXRh OworCUpzb25TdGF0VHlwZSBzdGF0eXBlID0gSnNvblN0YXRKc29uYjsKKworCWlmICghanNv blN0YXRzSW5pdCgmanNkYXRhLCB2YXJkYXRhKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3dp dGNoIChvcGlkKQorCXsKKwkJY2FzZSBKc29uYk9iamVjdEZpZWxkVGV4dE9wZXJhdG9yOgor CQkJc3RhdHlwZSA9IEpzb25TdGF0VGV4dDsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlj YXNlIEpzb25iT2JqZWN0RmllbGRPcGVyYXRvcjoKKwkJeworCQkJaWYgKGNuc3QtPmNvbnN0 dHlwZSAhPSBURVhUT0lEKQorCQkJeworCQkJCWpzb25TdGF0c1JlbGVhc2UoJmpzZGF0YSk7 CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXNkYXRhLT5zdGF0c1R1cGxlID0K KwkJCQlqc29uU3RhdHNHZXRQYXRoU3RhdHNUdXBsZSgmanNkYXRhLCBzdGF0eXBlLAorCQkJ CQkJCQkJCSAgJmNuc3QtPmNvbnN0dmFsdWUsIDEpOworCQkJYnJlYWs7CisJCX0KKworCQlj YXNlIEpzb25iQXJyYXlFbGVtZW50VGV4dE9wZXJhdG9yOgorCQkJc3RhdHlwZSA9IEpzb25T dGF0VGV4dDsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIEpzb25iQXJyYXlFbGVt ZW50T3BlcmF0b3I6CisJCXsKKwkJCWlmIChjbnN0LT5jb25zdHR5cGUgIT0gSU5UNE9JRCkK KwkJCXsKKwkJCQlqc29uU3RhdHNSZWxlYXNlKCZqc2RhdGEpOworCQkJCXJldHVybiBmYWxz ZTsKKwkJCX0KKworCQkJcmVzZGF0YS0+c3RhdHNUdXBsZSA9CisJCQkJanNvblN0YXRzR2V0 UGF0aFN0YXRzVHVwbGUoJmpzZGF0YSwgc3RhdHlwZSwgTlVMTCwKKwkJCQkJCQkJCQkgICAt MSAtIERhdHVtR2V0SW50MzIoY25zdC0+Y29uc3R2YWx1ZSkpOworCQkJYnJlYWs7CisJCX0K KworCQljYXNlIEpzb25iRXh0cmFjdFBhdGhUZXh0T3BlcmF0b3I6CisJCQlzdGF0eXBlID0g SnNvblN0YXRUZXh0OworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgSnNvbmJFeHRy YWN0UGF0aE9wZXJhdG9yOgorCQl7CisJCQlEYXR1bQkgICAqcGF0aDsKKwkJCWJvb2wJICAg Km51bGxzOworCQkJaW50CQkJcGF0aGxlbjsKKwkJCWludAkJCWk7CisKKwkJCWlmIChjbnN0 LT5jb25zdHR5cGUgIT0gVEVYVEFSUkFZT0lEKQorCQkJeworCQkJCWpzb25TdGF0c1JlbGVh c2UoJmpzZGF0YSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlkZWNvbnN0cnVj dF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoY25zdC0+Y29uc3R2YWx1ZSksIFRFWFRPSUQs CisJCQkJCQkJICAtMSwgZmFsc2UsICdpJywgJnBhdGgsICZudWxscywgJnBhdGhsZW4pOwor CisJCQlmb3IgKGkgPSAwOyBpIDwgcGF0aGxlbjsgaSsrKQorCQkJeworCQkJCWlmIChudWxs c1tpXSkKKwkJCQl7CisJCQkJCXBmcmVlKHBhdGgpOworCQkJCQlwZnJlZShudWxscyk7CisJ CQkJCVBHX1JFVFVSTl9WT0lEKCk7CisJCQkJfQorCQkJfQorCisJCQlyZXNkYXRhLT5zdGF0 c1R1cGxlID0KKwkJCQlqc29uU3RhdHNHZXRQYXRoU3RhdHNUdXBsZSgmanNkYXRhLCBzdGF0 eXBlLCBwYXRoLCBwYXRobGVuKTsKKworCQkJcGZyZWUocGF0aCk7CisJCQlwZnJlZShudWxs cyk7CisJCQlicmVhazsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQlqc29uU3RhdHNSZWxlYXNl KCZqc2RhdGEpOworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghcmVzZGF0YS0+c3Rh dHNUdXBsZSkKKwkJcmVzZGF0YS0+c3RhdHNUdXBsZSA9IHN0YXRzX2Zvcm1fdHVwbGUoTlVM TCk7CS8qIGZvcm0gYWxsLU5VTEwgdHVwbGUgKi8KKworCXJlc2RhdGEtPmFjbF9vayA9IHZh cmRhdGEtPmFjbF9vazsKKwlyZXNkYXRhLT5mcmVlZnVuYyA9IGhlYXBfZnJlZXR1cGxlOwor CUFzc2VydChyZXNkYXRhLT5yZWwgPT0gdmFyZGF0YS0+cmVsKTsKKwlBc3NlcnQocmVzZGF0 YS0+YXR0dHlwZSA9PQorCQkoc3RhdHlwZSA9PSBKc29uU3RhdEpzb25iID8gSlNPTkJPSUQg OgorCQkgc3RhdHlwZSA9PSBKc29uU3RhdFRleHQgPyBURVhUT0lEIDoKKwkJIC8qIHN0YXR5 cGUgPT0gSnNvblN0YXRGcmVxICovIEJPT0xPSUQpKTsKKworCWpzb25TdGF0c1JlbGVhc2Uo JmpzZGF0YSk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBqc29uYl9zdGF0cworICoJ CVN0YXRpc3RpY3MgZXN0aW1hdGlvbiBwcm9jZWR1cmUgZm9yIEpTT05CIGRhdGEgdHlwZS4K KyAqCisgKiBUaGlzIG9ubHkgc3VwcG9ydHMgT3BFeHByIGV4cHJlc3Npb25zLCB3aXRoIChW YXIgb3AgQ29uc3QpIHNoYXBlLgorICoKKyAqIFhYWCBJdCBtaWdodCBiZSB1c2VmdWwgdG8g YWxsb3cgcmVjdXJzaW9uLCBpLmUuIGdldF9yZXN0cmljdGlvbl92YXJpYWJsZQorICogbWln aHQgZGVyaXZlIHN0YXRpc3RpY3MgdG9vLiBJIGRvbid0IHRoaW5rIGl0IGRvZXMgdGhhdCBu b3csIHJpZ2h0PworICovCitEYXR1bQoranNvbmJfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlQbGFubmVySW5mbyAqcm9vdCA9IChQbGFubmVySW5mbyAqKSBQR19HRVRBUkdfUE9J TlRFUigwKTsKKwlPcEV4cHIJICAgKm9wZXhwciA9IChPcEV4cHIgKikgUEdfR0VUQVJHX1BP SU5URVIoMSk7CisJaW50CQkJdmFyUmVsaWQgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJVmFy aWFibGVTdGF0RGF0YSAqcmVzZGF0YQk9IChWYXJpYWJsZVN0YXREYXRhICopIFBHX0dFVEFS R19QT0lOVEVSKDMpOworCVZhcmlhYmxlU3RhdERhdGEgdmFyZGF0YTsKKwlOb2RlCSAgICpj b25zdGV4cHI7CisJYm9vbAkJcmVzdWx0OworCWJvb2wJCXZhcm9ubGVmdDsKKworCS8qIHNo b3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgT3BFeHByIGV4cHJlc3Npb25zICovCisJQXNzZXJ0 KElzQShvcGV4cHIsIE9wRXhwcikpOworCisJLyogSXMgdGhlIGV4cHJlc3Npb24gc2ltcGxl IGVub3VnaD8gKFZhciBvcCBDb25zdCkgb3Igc2ltaWxhcj8gKi8KKwlpZiAoIWdldF9yZXN0 cmljdGlvbl92YXJpYWJsZShyb290LCBvcGV4cHItPmFyZ3MsIHZhclJlbGlkLAorCQkJCQkJ CQkgICZ2YXJkYXRhLCAmY29uc3RleHByLCAmdmFyb25sZWZ0KSkKKwkJcmV0dXJuIGZhbHNl OworCisJLyogWFhYIENvdWxkIHdlIGFsc28gZ2V0IHZhcm9ubGVmdD1mYWxzZSBpbiB1c2Vm dWwgY2FzZXM/ICovCisJcmVzdWx0ID0gSXNBKGNvbnN0ZXhwciwgQ29uc3QpICYmIHZhcm9u bGVmdCAmJgorCQlqc29uYlN0YXRzVmFyT3BDb25zdChvcGV4cHItPm9wbm8sIHJlc2RhdGEs ICZ2YXJkYXRhLAorCQkJCQkJCSAoQ29uc3QgKikgY29uc3RleHByKTsKKworCVJlbGVhc2VW YXJpYWJsZVN0YXRzKHZhcmRhdGEpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAq IGpzb25TZWxlY3Rpdml0eQorICoJCVVzZSBKU09OIHN0YXRpc3RpY3MgdG8gZXN0aW1hdGUg c2VsZWN0aXZpdHkgZm9yIChpbillcXVhbGl0aWVzLgorICoKKyAqIFRoZSBzdGF0aXN0aWNz IGlzIHJlcHJlc2VudGVkIGFzIChhcnJheXMgb2YpIEpTT04gdmFsdWVzIGV0Yy4gc28gd2UK KyAqIG5lZWQgdG8gcGFzcyB0aGUgcmlnaHQgb3BlcmF0b3JzIHRvIHRoZSBmdW5jdGlvbnMu CisgKi8KK1NlbGVjdGl2aXR5Citqc29uU2VsZWN0aXZpdHkoSnNvblBhdGhTdGF0cyBzdGF0 cywgRGF0dW0gc2NhbGFyLCBPaWQgb3BlcmF0b3IpCit7CisJVmFyaWFibGVTdGF0RGF0YSB2 YXJkYXRhOworCVNlbGVjdGl2aXR5IHNlbDsKKworCWlmICghc3RhdHMpCisJCXJldHVybiAw LjA7CisKKwl2YXJkYXRhLmF0dHR5cGUgPSBKU09OQk9JRDsKKwl2YXJkYXRhLmF0dHR5cG1v ZCA9IC0xOworCXZhcmRhdGEuaXN1bmlxdWUgPSBmYWxzZTsKKwl2YXJkYXRhLnJlbCA9IHN0 YXRzLT5kYXRhLT5yZWw7CisJdmFyZGF0YS52YXIgPSBOVUxMOworCXZhcmRhdGEudmFydHlw ZSA9IEpTT05CT0lEOworCXZhcmRhdGEuYWNsX29rID0gc3RhdHMtPmRhdGEtPmFjbF9vazsK Kwl2YXJkYXRhLnN0YXRzVHVwbGUgPSBqc29uUGF0aFN0YXRzRm9ybVR1cGxlKHN0YXRzLAor CQkJCQkJCQkJCQkJSnNvblN0YXRKc29uYldpdGhvdXRTdWJwYXRocywgMC4wKTsKKworCWlm IChvcGVyYXRvciA9PSBKc29uYkVxT3BlcmF0b3IpCisJCXNlbCA9IHZhcl9lcV9jb25zdCgm dmFyZGF0YSwgb3BlcmF0b3IsIEludmFsaWRPaWQsIHNjYWxhciwgZmFsc2UsIHRydWUsIGZh bHNlKTsKKwllbHNlCisJCXNlbCA9IHNjYWxhcmluZXFzZWwoTlVMTCwgb3BlcmF0b3IsCisJ CQkJCQkJb3BlcmF0b3IgPT0gSnNvbmJHdE9wZXJhdG9yIHx8CisJCQkJCQkJb3BlcmF0b3Ig PT0gSnNvbmJHZU9wZXJhdG9yLAorCQkJCQkJCW9wZXJhdG9yID09IEpzb25iTGVPcGVyYXRv ciB8fAorCQkJCQkJCW9wZXJhdG9yID09IEpzb25iR2VPcGVyYXRvciwKKwkJCQkJCQlJbnZh bGlkT2lkLAorCQkJCQkJCSZ2YXJkYXRhLCBzY2FsYXIsIEpTT05CT0lEKTsKKworCWlmICh2 YXJkYXRhLnN0YXRzVHVwbGUpCisJCWhlYXBfZnJlZXR1cGxlKHZhcmRhdGEuc3RhdHNUdXBs ZSk7CisKKwlyZXR1cm4gc2VsOworfQorCisvKgorICoganNvblNlbGVjdGl2aXR5Q29udGFp bnMKKyAqCQlFc3RpbWF0ZSBzZWxlY3Rpdml0eSBmb3IgY29udGFpbm1lbnQgb3BlcmF0b3Ig b24gSlNPTi4KKyAqCisgKiBYWFggVGhpcyByZWFsbHkgbmVlZHMgbW9yZSBjb21tZW50cyBl eHBsYWluaW5nIHRoZSBsb2dpYy4KKyAqLworc3RhdGljIFNlbGVjdGl2aXR5Citqc29uU2Vs ZWN0aXZpdHlDb250YWlucyhKc29uU3RhdHMgc3RhdHMsIEpzb25iICpqYikKK3sKKwlKc29u YlZhbHVlCQl2OworCUpzb25iSXRlcmF0b3IgICppdDsKKwlKc29uYkl0ZXJhdG9yVG9rZW4g cjsKKwlTdHJpbmdJbmZvRGF0YQlwYXRoc3RyOworCXN0cnVjdCBQYXRoCisJeworCQlzdHJ1 Y3QgUGF0aCAqcGFyZW50OworCQlpbnQJCQlsZW47CisJCUpzb25QYXRoU3RhdHMgc3RhdHM7 CisJCVNlbGVjdGl2aXR5CWZyZXE7CisJCVNlbGVjdGl2aXR5CXNlbDsKKwl9CQkJcm9vdCwK KwkJCSAgICpwYXRoID0gJnJvb3Q7CisJU2VsZWN0aXZpdHkJc2NhbGFyU2VsID0gMC4wOwor CVNlbGVjdGl2aXR5CXNlbDsKKwlib29sCQlyYXdTY2FsYXIgPSBmYWxzZTsKKworCWluaXRT dHJpbmdJbmZvKCZwYXRoc3RyKTsKKworCWFwcGVuZFN0cmluZ0luZm8oJnBhdGhzdHIsICIk Iik7CisKKwlyb290LnBhcmVudCA9IE5VTEw7CisJcm9vdC5sZW4gPSBwYXRoc3RyLmxlbjsK Kwlyb290LnN0YXRzID0ganNvblN0YXRzR2V0UGF0aFN0YXRzU3RyKHN0YXRzLCBwYXRoc3Ry LmRhdGEsIHBhdGhzdHIubGVuKTsKKwlyb290LmZyZXEgPSBqc29uUGF0aFN0YXRzR2V0RnJl cShyb290LnN0YXRzLCAwLjApOworCXJvb3Quc2VsID0gMS4wOworCisJaWYgKHJvb3QuZnJl cSA8PSAwLjApCisJCXJldHVybiAwLjA7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KCZq Yi0+cm9vdCk7CisKKwl3aGlsZSAoKHIgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCBm YWxzZSkpICE9IFdKQl9ET05FKQorCXsKKwkJc3dpdGNoIChyKQorCQl7CisJCQljYXNlIFdK Ql9CRUdJTl9PQkpFQ1Q6CisJCQl7CisJCQkJc3RydWN0IFBhdGggKnAgPSBwYWxsb2Moc2l6 ZW9mKCpwKSk7CisKKwkJCQlwLT5sZW4gPSBwYXRoc3RyLmxlbjsKKwkJCQlwLT5wYXJlbnQg PSBwYXRoOworCQkJCXAtPnN0YXRzID0gTlVMTDsKKwkJCQlwLT5mcmVxID0ganNvblBhdGhT dGF0c0dldFR5cGVGcmVxKHBhdGgtPnN0YXRzLCBqYnZPYmplY3QsIDAuMCk7CisJCQkJaWYg KHAtPmZyZXEgPD0gMC4wKQorCQkJCQlyZXR1cm4gMC4wOworCQkJCXAtPnNlbCA9IDEuMDsK KwkJCQlwYXRoID0gcDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY2FzZSBXSkJfQkVHSU5f QVJSQVk6CisJCQl7CisJCQkJc3RydWN0IFBhdGggKnAgPSBwYWxsb2Moc2l6ZW9mKCpwKSk7 CisKKwkJCQlyYXdTY2FsYXIgPSB2LnZhbC5hcnJheS5yYXdTY2FsYXI7CisKKwkJCQlhcHBl bmRTdHJpbmdJbmZvKCZwYXRoc3RyLCAiLiMiKTsKKwkJCQlwLT5sZW4gPSBwYXRoc3RyLmxl bjsKKwkJCQlwLT5wYXJlbnQgPSBwYXRoOworCQkJCXAtPnN0YXRzID0ganNvblN0YXRzR2V0 UGF0aFN0YXRzU3RyKHN0YXRzLCBwYXRoc3RyLmRhdGEsCisJCQkJCQkJCQkJCQkJcGF0aHN0 ci5sZW4pOworCQkJCXAtPmZyZXEgPSBqc29uUGF0aFN0YXRzR2V0RnJlcShwLT5zdGF0cywg MC4wKTsKKwkJCQlpZiAocC0+ZnJlcSA8PSAwLjAgJiYgIXJhd1NjYWxhcikKKwkJCQkJcmV0 dXJuIDAuMDsKKwkJCQlwLT5zZWwgPSAxLjA7CisJCQkJcGF0aCA9IHA7CisKKwkJCQlicmVh azsKKwkJCX0KKworCQkJY2FzZSBXSkJfRU5EX09CSkVDVDoKKwkJCWNhc2UgV0pCX0VORF9B UlJBWToKKwkJCXsKKwkJCQlzdHJ1Y3QgUGF0aCAqcCA9IHBhdGg7CisKKwkJCQlwYXRoID0g cGF0aC0+cGFyZW50OworCQkJCXNlbCA9IHAtPnNlbCAqIHAtPmZyZXEgLyBwYXRoLT5mcmVx OworCQkJCXBmcmVlKHApOworCQkJCXBhdGhzdHIuZGF0YVtwYXRoc3RyLmxlbiA9IHBhdGgt Pmxlbl0gPSAnXDAnOworCQkJCWlmIChwYXRoc3RyLmRhdGFbcGF0aHN0ci5sZW4gLSAxXSA9 PSAnIycpCisJCQkJCXNlbCA9IDEuMCAtIHBvdygxLjAgLSBzZWwsCisJCQkJCQkJCWpzb25Q YXRoU3RhdHNHZXRBdmdBcnJheVNpemUocGF0aC0+c3RhdHMpKTsKKwkJCQlwYXRoLT5zZWwg Kj0gc2VsOworCQkJCWJyZWFrOworCQkJfQorCisJCQljYXNlIFdKQl9LRVk6CisJCQl7CisJ CQkJcGF0aHN0ci5kYXRhW3BhdGhzdHIubGVuID0gcGF0aC0+cGFyZW50LT5sZW5dID0gJ1ww JzsKKwkJCQlqc29uUGF0aEFwcGVuZEVudHJ5V2l0aExlbigmcGF0aHN0ciwgdi52YWwuc3Ry aW5nLnZhbCwKKwkJCQkJCQkJCQkgICB2LnZhbC5zdHJpbmcubGVuKTsKKwkJCQlwYXRoLT5s ZW4gPSBwYXRoc3RyLmxlbjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY2FzZSBXSkJfVkFM VUU6CisJCQljYXNlIFdKQl9FTEVNOgorCQkJeworCQkJCUpzb25QYXRoU3RhdHMJcHN0YXRz ID0gciA9PSBXSkJfRUxFTSA/IHBhdGgtPnN0YXRzIDoKKwkJCQkJanNvblN0YXRzR2V0UGF0 aFN0YXRzU3RyKHN0YXRzLCBwYXRoc3RyLmRhdGEsIHBhdGhzdHIubGVuKTsKKwkJCQlEYXR1 bQkJCXNjYWxhciA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKCZ2KSk7CisK KwkJCQlpZiAocGF0aC0+ZnJlcSA8PSAwLjApCisJCQkJCXNlbCA9IDAuMDsKKwkJCQllbHNl CisJCQkJeworCQkJCQlzZWwgPSBqc29uU2VsZWN0aXZpdHkocHN0YXRzLCBzY2FsYXIsIEpz b25iRXFPcGVyYXRvcik7CisJCQkJCXNlbCAvPSBwYXRoLT5mcmVxOworCQkJCQlpZiAocGF0 aHN0ci5kYXRhW3BhdGhzdHIubGVuIC0gMV0gPT0gJyMnKQorCQkJCQkJc2VsID0gMS4wIC0g cG93KDEuMCAtIHNlbCwKKwkJCQkJCQkJCQlqc29uUGF0aFN0YXRzR2V0QXZnQXJyYXlTaXpl KHBhdGgtPnN0YXRzKSk7CisJCQkJfQorCisJCQkJcGF0aC0+c2VsICo9IHNlbDsKKworCQkJ CWlmIChyID09IFdKQl9FTEVNICYmIHBhdGgtPnBhcmVudCA9PSAmcm9vdCAmJiByYXdTY2Fs YXIpCisJCQkJCXNjYWxhclNlbCA9IGpzb25TZWxlY3Rpdml0eShyb290LnN0YXRzLCBzY2Fs YXIsCisJCQkJCQkJCQkJCQlKc29uYkVxT3BlcmF0b3IpOworCQkJCWJyZWFrOworCQkJfQor CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJfQorCisJc2VsID0gc2NhbGFyU2Vs ICsgcm9vdC5zZWwgKiByb290LmZyZXE7CisJQ0xBTVBfUFJPQkFCSUxJVFkoc2VsKTsKKwly ZXR1cm4gc2VsOworfQorCisvKgorICoganNvblNlbGVjdGl2aXR5RXhpc3RzCisgKgkJRXN0 aW1hdGUgc2VsZWN0aXZpdHkgZm9yIEpTT04gImV4aXN0cyIgb3BlcmF0b3IuCisgKi8KK3N0 YXRpYyBTZWxlY3Rpdml0eQoranNvblNlbGVjdGl2aXR5RXhpc3RzKEpzb25TdGF0cyBzdGF0 cywgRGF0dW0ga2V5KQoreworCUpzb25QYXRoU3RhdHMgYXJyc3RhdHM7CisJSnNvbmJWYWx1 ZQlqYnZrZXk7CisJRGF0dW0JCWpia2V5OworCVNlbGVjdGl2aXR5IGtleXNlbDsKKwlTZWxl Y3Rpdml0eSBzY2FsYXJzZWw7CisJU2VsZWN0aXZpdHkgYXJyYXlzZWw7CisJU2VsZWN0aXZp dHkgc2VsOworCisJSnNvblZhbHVlSW5pdFN0cmluZ1dpdGhMZW4oJmpidmtleSwKKwkJCQkJ CQkgICBWQVJEQVRBX0FOWShrZXkpLCBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsKKworCWpi a2V5ID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoJmpidmtleSkpOworCisJ a2V5c2VsID0ganNvblN0YXRzR2V0UGF0aEZyZXEoc3RhdHMsICZrZXksIDEpOworCisJc2Nh bGFyc2VsID0ganNvblNlbGVjdGl2aXR5KGpzb25TdGF0c0dldFBhdGhTdGF0c1N0cihzdGF0 cywgIiQiLCAxKSwKKwkJCQkJCQkJamJrZXksIEpzb25iRXFPcGVyYXRvcik7CisKKwlhcnJz dGF0cyA9IGpzb25TdGF0c0dldFBhdGhTdGF0c1N0cihzdGF0cywgIiQuIyIsIDMpOworCWFy cmF5c2VsID0ganNvblNlbGVjdGl2aXR5KGFycnN0YXRzLCBqYmtleSwgSnNvbmJFcU9wZXJh dG9yKTsKKwlhcnJheXNlbCA9IDEuMCAtIHBvdygxLjAgLSBhcnJheXNlbCwKKwkJCQkJCSBq c29uUGF0aFN0YXRzR2V0QXZnQXJyYXlTaXplKGFycnN0YXRzKSk7CisKKwlzZWwgPSBrZXlz ZWwgKyBzY2FsYXJzZWwgKyBhcnJheXNlbDsKKwlDTEFNUF9QUk9CQUJJTElUWShzZWwpOwor CXJldHVybiBzZWw7Cit9CisKKy8qCisgKiBqc29uYl9zZWwKKyAqCQlUaGUgbWFpbiBwcm9j ZWR1cmUgZXN0aW1hdGluZyBzZWxlY3Rpdml0eSBmb3IgYWxsIEpTT05CIG9wZXJhdG9ycy4K KyAqLworRGF0dW0KK2pzb25iX3NlbChQR19GVU5DVElPTl9BUkdTKQoreworCVBsYW5uZXJJ bmZvICpyb290ID0gKFBsYW5uZXJJbmZvICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCU9p ZAkJCW9wZXJhdG9yID0gUEdfR0VUQVJHX09JRCgxKTsKKwlMaXN0CSAgICphcmdzID0gKExp c3QgKikgUEdfR0VUQVJHX1BPSU5URVIoMik7CisJaW50CQkJdmFyUmVsaWQgPSBQR19HRVRB UkdfSU5UMzIoMyk7CisJZG91YmxlCQlzZWwgPSBERUZBVUxUX0pTT05fQ09OVEFJTlNfU0VM OworCU5vZGUJICAgKm90aGVyOworCUNvbnN0CSAgICpjbnN0OworCWJvb2wJCXZhcm9ubGVm dDsKKwlKc29uU3RhdERhdGEgc3RhdHM7CisJVmFyaWFibGVTdGF0RGF0YSB2YXJkYXRhOwor CisJaWYgKCFnZXRfcmVzdHJpY3Rpb25fdmFyaWFibGUocm9vdCwgYXJncywgdmFyUmVsaWQs CisJCQkJCQkJCSAgJnZhcmRhdGEsICZvdGhlciwgJnZhcm9ubGVmdCkpCisJCVBHX1JFVFVS Tl9GTE9BVDgoc2VsKTsKKworCWlmICghSXNBKG90aGVyLCBDb25zdCkpCisJCWdvdG8gb3V0 OworCisJY25zdCA9IChDb25zdCAqKSBvdGhlcjsKKworCWlmIChjbnN0LT5jb25zdGlzbnVs bCkKKwl7CisJCXNlbCA9IDAuMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFqc29uU3Rh dHNJbml0KCZzdGF0cywgJnZhcmRhdGEpKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAob3Bl cmF0b3IpCisJeworCQljYXNlIEpzb25iRXhpc3RzT3BlcmF0b3I6CisJCQlpZiAoIXZhcm9u bGVmdCB8fCBjbnN0LT5jb25zdHR5cGUgIT0gVEVYVE9JRCkKKwkJCQlnb3RvIG91dDsKKwor CQkJc2VsID0ganNvblNlbGVjdGl2aXR5RXhpc3RzKCZzdGF0cywgY25zdC0+Y29uc3R2YWx1 ZSk7CisJCQlicmVhazsKKworCQljYXNlIEpzb25iRXhpc3RzQW55T3BlcmF0b3I6CisJCWNh c2UgSnNvbmJFeGlzdHNBbGxPcGVyYXRvcjoKKwkJeworCQkJRGF0dW0JICAgKmtleXM7CisJ CQlib29sCSAgICpudWxsczsKKwkJCVNlbGVjdGl2aXR5CWZyZXEgPSAxLjA7CisJCQlpbnQJ CQlua2V5czsKKwkJCWludAkJCWk7CisJCQlib29sCQlhbGwgPSBvcGVyYXRvciA9PSBKc29u YkV4aXN0c0FsbE9wZXJhdG9yOworCisJCQlpZiAoIXZhcm9ubGVmdCB8fCBjbnN0LT5jb25z dHR5cGUgIT0gVEVYVEFSUkFZT0lEKQorCQkJCWdvdG8gb3V0OworCisJCQlkZWNvbnN0cnVj dF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoY25zdC0+Y29uc3R2YWx1ZSksIFRFWFRPSUQs CisJCQkJCQkJICAtMSwgZmFsc2UsICdpJywgJmtleXMsICZudWxscywgJm5rZXlzKTsKKwor CQkJZm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKyspCisJCQkJaWYgKCFudWxsc1tpXSkKKwkJ CQl7CisJCQkJCVNlbGVjdGl2aXR5IHBhdGhmcmVxID0ganNvblNlbGVjdGl2aXR5RXhpc3Rz KCZzdGF0cywKKwkJCQkJCQkJCQkJCQkJCQkga2V5c1tpXSk7CisJCQkJCWZyZXEgKj0gYWxs ID8gcGF0aGZyZXEgOiAoMS4wIC0gcGF0aGZyZXEpOworCQkJCX0KKworCQkJcGZyZWUoa2V5 cyk7CisJCQlwZnJlZShudWxscyk7CisKKwkJCWlmICghYWxsKQorCQkJCWZyZXEgPSAxLjAg LSBmcmVxOworCisJCQlzZWwgPSBmcmVxOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIEpz b25iQ29udGFpbmVkT3BlcmF0b3I6CisJCQkvKiBUT0RPICovCisJCQlicmVhazsKKworCQlj YXNlIEpzb25iQ29udGFpbnNPcGVyYXRvcjoKKwkJeworCQkJaWYgKGNuc3QtPmNvbnN0dHlw ZSAhPSBKU09OQk9JRCkKKwkJCQlnb3RvIG91dDsKKworCQkJc2VsID0ganNvblNlbGVjdGl2 aXR5Q29udGFpbnMoJnN0YXRzLAorCQkJCQkJCQkJCSAgRGF0dW1HZXRKc29uYlAoY25zdC0+ Y29uc3R2YWx1ZSkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK291dDoKKwlqc29uU3RhdHNS ZWxlYXNlKCZzdGF0cyk7CisJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0YSk7CisKKwlQ R19SRVRVUk5fRkxPQVQ4KChmbG9hdDgpIHNlbCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmJfdHlwYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25iX3R5cGFuYWx5emUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uZDJmYmZiZjQyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmJfdHlwYW5hbHl6ZS5jCkBAIC0wLDAgKzEsMTM3OSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICoganNvbmJfdHlwYW5hbHl6ZS5jCisgKgkgIEZ1bmN0 aW9ucyBmb3IgZ2F0aGVyaW5nIHN0YXRpc3RpY3MgZnJvbSBqc29uYiBjb2x1bW5zCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqIEZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhcmUgdXNlZCB0byBhbmFs eXplIGNvbnRlbnRzIG9mIEpTT05CIGNvbHVtbnMKKyAqIGFuZCBidWlsZCBvcHRpbWl6ZXIg c3RhdGlzdGljcy4gSW4gcHJpbmNpcGxlIHdlIGV4dHJhY3QgcGF0aHMgZnJvbSBhbGwKKyAq IHNhbXBsZWQgZG9jdW1lbnRzIGFuZCBjYWxjdWxhdGUgdGhlIHVzdWFsIHN0YXRpc3RpY3Mg KE1DViwgaGlzdG9ncmFtKQorICogZm9yIGVhY2ggcGF0aCAtIGluIHByaW5jaXBsZSBlYWNo IHBhdGggaXMgdHJlYXRlZCBhcyBhIGNvbHVtbi4KKyAqCisgKiBCZWNhdXNlIHdlJ3JlIG5v dCBlbmZvcmNpbmcgYW55IEpTT04gc2NoZW1hLCB0aGUgZG9jdW1lbnRzIG1heSBkaWZmZXIK KyAqIGEgbG90IC0gdGhlIGRvY3VtZW50cyBtYXkgY29udGFpbiBsYXJnZSBudW1iZXIgb2Yg ZGlmZmVyZW50IGtleXMsIHRoZQorICogdHlwZXMgb2YgdmFsdWVzIG1heSBiZSBlbnRpcmVs eSBkaWZmZXJlbnQsIGV0Yy4gVGhpcyBtYWtlcyBpdCBtb3JlCisgKiBjaGFsbGVuZ2luZyB0 aGFuIGJ1aWxkaW5nIHN0YXRzIGZvciByZWd1bGFyIGNvbHVtbnMuIEZvciBleGFtcGxlIG5v dAorICogb25seSBkbyB3ZSBuZWVkIHRvIGRlY2lkZSB3aGljaCB2YWx1ZXMgdG8ga2VlcCBp biB0aGUgTUNWLCBidXQgYWxzbworICogd2hpY2ggcGF0aHMgdG8ga2VlcCAoaW4gY2FzZSB0 aGUgZG9jdW1lbnRzIGFyZSBzbyB2YXJpYWJsZSB3ZSBjYW4ndAorICoga2VlcCBhbGwgcGF0 aHMpLgorICoKKyAqIFRoZSBzdGF0aXN0aWNzIGlzIHN0b3JlZCBpbiBwZ19zdGF0aXN0aWMs IGluIGEgc2xvdCB3aXRoIGEgbmV3IHN0YWtpbmQKKyAqIHZhbHVlIChTVEFUSVNUSUNfS0lO RF9KU09OKS4gVGhlIHN0YXRpc3RpY3MgaXMgc2VyaWFsaXplZCBhcyBhbiBhcnJheQorICog b2YgSlNPTkIgdmFsdWVzLCBlYXNoIGVsZW1lbnQgc3RvcmluZyBzdGF0aXN0aWNzIGZvciBv bmUgcGF0aC4KKyAqCisgKiBGb3IgZWFjaCBwYXRoLCB3ZSBzdG9yZSB0aGUgZm9sbG93aW5n IGtleXM6CisgKgorICogLSBwYXRoICAgICAgICAgLSBwYXRoIHRoaXMgc3RhdHMgaXMgZm9y LCBzZXJpYWxpemVkIGFzIGpzb25wYXRoCisgKiAtIGZyZXEgICAgICAgICAtIGZyZXF1ZW5j eSBvZiBkb2N1bWVudHMgY29udGFpbmluZyB0aGlzIHBhdGgKKyAqIC0ganNvbiAgICAgICAg IC0gdGhlIHJlZ3VsYXIgcGVyLWNvbHVtbiBzdGF0cyAoTUNWLCBoaXN0b2dyYW0sIC4uLikK KyAqIC0gZnJlcV9udWxsICAgIC0gZnJlcXVlbmN5IG9mIEpTT04gbnVsbCB2YWx1ZXMKKyAq IC0gZnJlcV9hcnJheSAgIC0gZnJlcXVlbmN5IG9mIEpTT04gYXJyYXkgdmFsdWVzCisgKiAt IGZyZXFfb2JqZWN0ICAtIGZyZXF1ZW5jeSBvZiBKU09OIG9iamVjdCB2YWx1ZXMKKyAqIC0g ZnJlcV9zdHJpbmcgIC0gZnJlcXVlbmN5IG9mIEpTT04gc3RyaW5nIHZhbHVlcworICogLSBm cmVxX251bWVyaWMgLSBmcmVxdWVuY3kgb2YgSlNPTiBudW1lcmljIHZhbHVlcworICoKKyAq IFRoaXMgaXMgc3RvcmVkIGluIHRoZSBzdGF2YWx1ZXMgYXJyYXkuCisgKgorICogVGhlIHBl ci1jb2x1bW4gc3RhdHMgKHN0b3JlZCBpbiB0aGUgImpzb24iIGtleSkgaGF2ZSBhZGRpdGlv bmFsIGludGVybmFsCisgKiBzdHJ1Y3R1cmUsIHRvIGFsbG93IHN0b3JpbmcgbXVsdGlwbGUg c3Rha2luZCB0eXBlcyAoaGlzdG9ncmFtLCBtY3YpLiBTZWUKKyAqIGpzb25BbmFseXplTWFr ZVNjYWxhclN0YXRzIGZvciBkZXRhaWxzLgorICoKKyAqCisgKiBYWFggVGhlcmUncyBhZGRp dGlvbmFsIHN0dWZmIChwcmVmaXgsIGxlbmd0aCBzdGF0cykgc3RvcmVkIGluIHRoZSBmaXJz dAorICogdHdvIGVsZW1lbnRzLCBJIHRoaW5rLgorICoKKyAqIFhYWCBJdCdzIGEgYml0IHdl aXJkIHRoZSAicmVndWxhciIgc3RhdHMgYXJlIHN0b3JlZCBpbiB0aGUgImpzb24iIGtleSwK KyAqIHdoaWxlIHRoZSBKU09OIHN0YXRzIChmcmVxdWVuY2llcyBvZiBkaWZmZXJlbnQgSlNP TiB0eXBlcykgYXJlIHJpZ2h0CisgKiBhdCB0aGUgdG9wIGxldmVsLgorICoKKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJfdHlwYW5h bHl6ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hhc2gu aCIKKyNpbmNsdWRlICJhY2Nlc3MvZGV0b2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf YXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgor I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisj aW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgorI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKKyNp bmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25fc2VsZnVuY3Mu aCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgorCit0eXBlZGVmIHN0cnVjdCBKc29uUGF0aEVudHJ5IEpzb25QYXRoRW50cnk7 CisKKy8qCisgKiBFbGVtZW50IG9mIGEgcGF0aCBpbiB0aGUgSlNPTiBkb2N1bWVudCAoaS5l LiBub3QganNvbnBhdGgpLiBFbGVtZW50cworICogYXJlIGxpbmtlZCB0b2dldGhlciB0byBi dWlsZCBsb25nZXIgcGF0aHMuCisgKgorICogWFhYIFdlIG5lZWQgZW50cnkrbGVudGggYmVj YXVzZSBKU09OIHBhdGggZWxlbWVudHMgbWF5IGNvbnRhaW4gbnVsbAorICogYnl0ZXMsIEkg Z3Vlc3M/CisgKi8KK3N0cnVjdCBKc29uUGF0aEVudHJ5Cit7CisJSnNvblBhdGhFbnRyeSAg KnBhcmVudDsKKwljb25zdCBjaGFyCSAgICplbnRyeTsJCS8qIGVsZW1lbnQgb2YgdGhlIHBh dGggYXMgYSBzdHJpbmcgKi8KKwlpbnQJCQkJbGVuOwkJLyogbGVuZ3RoIG9mIGVudHJ5IHN0 cmluZyAobWF5IGJlIDApICovCisJdWludDMyCQkJaGFzaDsJCS8qIGhhc2ggb2YgdGhlIHdo b2xlIHBhdGggKHdpdGggcGFyZW50KSAqLworfTsKKworLyoKKyAqIEEgcGF0aCBpcyBzaW1w bHkgYSBwb2ludGVyIHRvIHRoZSBsYXN0IGVsZW1lbnQgKHdlIGNhbiB0cmF2ZXJzZSB0bwor ICogdGhlIHRvcCBlYXNpbHkpLgorICovCit0eXBlZGVmIEpzb25QYXRoRW50cnkgKkpzb25Q YXRoOworCisvKiBBbiBhcnJheSBjb250YWluaW5nIGEgZHluYW1pYyBudW1iZXIgb2YgSlNP TiB2YWx1ZXMuICovCit0eXBlZGVmIHN0cnVjdCBKc29uVmFsdWVzCit7CisJRGF0dW0JICAg KmJ1ZjsKKwlpbnQJCQljb3VudDsKKwlpbnQJCQlhbGxvY2F0ZWQ7Cit9IEpzb25WYWx1ZXM7 CisKKy8qCisgKiBTY2FsYXIgc3RhdGlzdGljcyBidWlsdCBmb3IgYW4gYXJyYXkgb2YgdmFs dWVzLCBleHRyYWN0ZWQgZnJvbSBhIEpTT04KKyAqIGRvY3VtZW50IChmb3Igb25lIHBhcnRp Y3VsYXIgcGF0aCkuCisgKgorICogWFhYIFRoZSBhcnJheSBjYW4gY29udGFpbiB2YWx1ZXMg b2YgZGlmZmVyZW50IEpTT04gdHlwZSwgcHJvYmFibHk/CisgKi8KK3R5cGVkZWYgc3RydWN0 IEpzb25TY2FsYXJTdGF0cworeworCUpzb25WYWx1ZXMJCXZhbHVlczsKKwlWYWNBdHRyU3Rh dHMJc3RhdHM7Cit9IEpzb25TY2FsYXJTdGF0czsKKworLyoKKyAqIFN0YXRpc3RpY3MgY2Fs Y3VsYXRlZCBmb3IgYSBzZXQgb2YgdmFsdWVzLgorICoKKyAqCisgKiBYWFggVGhpcyBzZWVt cyByYXRoZXIgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHNpbXBsaWZpY2F0aW9uLiBXZSdyZSBu b3QKKyAqIHJlYWxseSB1c2luZyBhbGwgdGhlIHZhcmlvdXMgSnNvblNjYWxhclN0YXRzIGJp dHMsIHRoZXJlJ3MgYSBsb3Qgb2YKKyAqIGR1cGxpY2F0aW9uIChlLmcuIGVhY2ggSnNvblNj YWxhclN0YXRzIGNvbnRhaW5zIGl0J3Mgb3duIGFycmF5LCB3aGljaAorICogaGFzIGEgY29w eSBvZiBkYXRhIGZyb20gdGhlIG9uZSBpbiAianNvbnMiKS4gU29tZSBvZiBpdCBpcyBkZWZp bmVkIGFzCisgKiBhIHR5cGVkZWYsIGJ1dCBib29sZWFucyBoYXZlIGlubGluZSBzdHJ1Y3Qu CisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25WYWx1ZVN0YXRzCit7CisJSnNvblNjYWxhclN0 YXRzCWpzb25zOwkJLyogc3RhdHMgZm9yIGFsbCBKU09OIHR5cGVzIHRvZ2V0aGVyICovCisK KwkvKiBYWFggdXNlZCBvbmx5IHdpdGggSlNPTl9BTkFMWVpFX1NDQUxBUlMgZGVmaW5lZCAq LworCUpzb25TY2FsYXJTdGF0cwlzdHJpbmdzOwkvKiBzdGF0cyBmb3IgSlNPTiBzdHJpbmdz ICovCisJSnNvblNjYWxhclN0YXRzCW51bWVyaWNzOwkvKiBzdGF0cyBmb3IgSlNPTiBudW1l cmljcyAqLworCisJLyogc3RhdHMgZm9yIGJvb2xlYW5zICovCisJc3RydWN0CisJeworCQlp bnQJCW50cnVlOworCQlpbnQJCW5mYWxzZTsKKwl9CQkJCWJvb2xlYW5zOworCisJaW50CQkJ CW5udWxsczsJCS8qIG51bWJlciBvZiBKU09OIG51bGwgdmFsdWVzICovCisJaW50CQkJCW5v YmplY3RzOwkvKiBudW1iZXIgb2YgSlNPTiBvYmplY3RzICovCisJaW50CQkJCW5hcnJheXM7 CS8qIG51bWJlciBvZiBKU09OIGFycmF5cyAqLworCisJSnNvblNjYWxhclN0YXRzCWxlbnM7 CQkvKiBzdGF0cyBvZiBvYmplY3QgbGVuZ3RocyAqLworCUpzb25TY2FsYXJTdGF0cwlhcnJs ZW5zOwkvKiBzdGF0cyBvZiBhcnJheSBsZW5ndGhzICovCit9IEpzb25WYWx1ZVN0YXRzOwor CisvKiA/Pz8gKi8KK3R5cGVkZWYgc3RydWN0IEpzb25QYXRoQW5sU3RhdHMKK3sKKwlKc29u UGF0aEVudHJ5CQlwYXRoOworCUpzb25WYWx1ZVN0YXRzCQl2c3RhdHM7CisJSnNvbmIJCQkg ICAqc3RhdHM7CisJY2hhcgkJCSAgICpwYXRoc3RyOworCWRvdWJsZQkJCQlmcmVxOworCWlu dAkJCQkJZGVwdGg7CisKKwlKc29uUGF0aEVudHJ5CSAgKiplbnRyaWVzOworCWludAkJCQkJ bmVudHJpZXM7Cit9IEpzb25QYXRoQW5sU3RhdHM7CisKKy8qIHZhcmlvdXMgYml0cyBuZWVk ZWQgd2hpbGUgYW5hbHl6aW5nIEpTT04gKi8KK3R5cGVkZWYgc3RydWN0IEpzb25BbmFseXpl Q29udGV4dAoreworCVZhY0F0dHJTdGF0cwkJICAgKnN0YXRzOworCU1lbW9yeUNvbnRleHQJ CQltY3h0OworCUFuYWx5emVBdHRyRmV0Y2hGdW5jCWZldGNoZnVuYzsKKwlIVEFCCQkJCSAg ICpwYXRoc2hhc2g7CisJSnNvblBhdGhBbmxTdGF0cwkgICAqcm9vdDsKKwlKc29uUGF0aEFu bFN0YXRzCSAgKipwYXRoczsKKwlpbnQJCQkJCQlucGF0aHM7CisJZG91YmxlCQkJCQl0b3Rh bHJvd3M7CisJZG91YmxlCQkJCQl0b3RhbF93aWR0aDsKKwlpbnQJCQkJCQlzYW1wbGVyb3dz OworCWludAkJCQkJCXRhcmdldDsKKwlpbnQJCQkJCQludWxsX2NudDsKKwlpbnQJCQkJCQlh bmFseXplZF9jbnQ7CisJaW50CQkJCQkJbWF4ZGVwdGg7CisJYm9vbAkJCQkJc2NhbGFyc09u bHk7Cit9IEpzb25BbmFseXplQ29udGV4dDsKKworLyoKKyAqIEpzb25QYXRoTWF0Y2gKKyAq CQlEZXRlcm1pbmUgd2hlbiB0d28gSlNPTiBwYXRocyAobGlzdCBvZiBKc29uUGF0aEVudHJ5 KSBtYXRjaC4KKyAqCisgKiBYWFggU291bGQgYmUgSnNvblBhdGhFbnRyeU1hdGNoIGFzIGl0 IGRlYWxzIHdpdGggSnNvblBhdGhFbnRyeSBub2RlcworICogbm90IHdob2xlIHBhdGhzLCBu bz8KKyAqCisgKiBYWFggU2VlbXMgYSBiaXQgc2lsbHkgdG8gcmV0dXJuIGludCwgd2hlbiB0 aGUgcmV0dXJuIHN0YXRlbWVudCBvbmx5CisgKiByZWFsbHkgcmV0dXJucyBib29sIChiZWNh dXNlIG9mIGhvdyBpdCBjb21wYXJlcyBwYXRocykuIEl0J3Mgbm90IHJlYWxseQorICogYSBj b21wYXJhdG9yIGZvciBzb3J0aW5nLCBmb3IgZXhhbXBsZS4KKyAqLworc3RhdGljIGludAor SnNvblBhdGhNYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBTaXpl IGtleXNpemUpCit7CisJY29uc3QgSnNvblBhdGhFbnRyeSAqcGF0aDEgPSBrZXkxOworCWNv bnN0IEpzb25QYXRoRW50cnkgKnBhdGgyID0ga2V5MjsKKworCXJldHVybiBwYXRoMS0+cGFy ZW50ICE9IHBhdGgyLT5wYXJlbnQgfHwKKwkJICAgcGF0aDEtPmxlbiAhPSBwYXRoMi0+bGVu IHx8CisJCSAgIChwYXRoMS0+bGVuID4gMCAmJgorCQkJc3RybmNtcChwYXRoMS0+ZW50cnks IHBhdGgyLT5lbnRyeSwgcGF0aDEtPmxlbikpOworfQorCisvKgorICogSnNvblBhdGhIYXNo CisgKgkJQ2FsY3VsYXRlIGhhc2ggb2YgdGhlIHBhdGggZW50cnkuCisgKgorICogWFhYIEFn YWluLCBtYXliZSBKc29uUGF0aEVudHJ5SGFzaCB3b3VsZCBiZSBhIGJldHRlciBuYW1lPwor ICoKKyAqIFhYWCBNYXliZSBzaG91bGQgY2FsbCBKc29uUGF0aEhhc2ggb24gdGhlIHBhcmVu dCwgaW5zdGVhZCBvZiBsb29raW5nCisgKiBhdCB0aGUgZmllbGQgZGlyZWN0bHkuIENvdWxk IGVhc2lseSBoYXBwZW4gd2UgaGF2ZSBub3QgY2FsY3VsYXRlZCBpdAorICogeWV0LCBJIGd1 ZXNzLgorICovCitzdGF0aWMgdWludDMyCitKc29uUGF0aEhhc2goY29uc3Qgdm9pZCAqa2V5 LCBTaXplIGtleXNpemUpCit7CisJY29uc3QgSnNvblBhdGhFbnRyeQkgICAqcGF0aCA9IGtl eTsKKworCS8qIFhYWCBDYWxsIEpzb25QYXRoSGFzaCBpbnN0ZWFkIG9mIGRpcmVjdCBhY2Nl c3M/ICovCisJdWludDMyCQkJCQloYXNoID0gcGF0aC0+cGFyZW50ID8gcGF0aC0+cGFyZW50 LT5oYXNoIDogMDsKKworCWhhc2ggPSAoaGFzaCA8PCAxKSB8IChoYXNoID4+IDMxKTsKKwlo YXNoIF49IHBhdGgtPmxlbiA8IDAgPyAwIDogRGF0dW1HZXRVSW50MzIoCisJCQkJCWhhc2hf YW55KChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBhdGgtPmVudHJ5LCBwYXRoLT5sZW4pKTsK KworCXJldHVybiBoYXNoOworfQorCisvKgorICoganNvbkFuYWx5emVBZGRQYXRoCisgKgkJ QWRkIGFuIGVudHJ5IGZvciBhIEpTT04gcGF0aCB0byB0aGUgd29ya2luZyBsaXN0IG9mIHN0 YXRpc3RpY3MuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gSnNvblBhdGhBbmxTdGF0 cyAod2hpY2ggbWlnaHQgaGF2ZSBhbHJlYWR5IGV4aXN0ZWQKKyAqIGlmIHRoZSBwYXRoIHdh cyBpbiBlYXJsaWVyIGRvY3VtZW50KSwgd2hpY2ggY2FuIHRoZW4gYmUgcG9wdWxhdGVkIG9y CisgKiB1cGRhdGVkLgorICovCitzdGF0aWMgaW5saW5lIEpzb25QYXRoQW5sU3RhdHMgKgor anNvbkFuYWx5emVBZGRQYXRoKEpzb25BbmFseXplQ29udGV4dCAqY3R4LCBKc29uUGF0aCBw YXRoKQoreworCUpzb25QYXRoQW5sU3RhdHMgICAqc3RhdHM7CisJYm9vbAkJCQlmb3VuZDsK KworCXBhdGgtPmhhc2ggPSBKc29uUGF0aEhhc2gocGF0aCwgMCk7CisKKwkvKiBYWFggU2Vl IGlmIHdlIGFscmVhZHkgc2F3IHRoaXMgcGF0aCBlYXJsaWVyLiAqLworCXN0YXRzID0gaGFz aF9zZWFyY2hfd2l0aF9oYXNoX3ZhbHVlKGN0eC0+cGF0aHNoYXNoLCBwYXRoLCBwYXRoLT5o YXNoLAorCQkJCQkJCQkJCUhBU0hfRU5URVIsICZmb3VuZCk7CisKKwkvKgorCSAqIE5vcGUs IGl0J3MgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIHRoaXMgcGF0aCwgc28gaW5pdGlhbGl6ZSBh bGwgdGhlCisJICogZmllbGRzIChwYXRoIHN0cmluZywgY291bnRlcnMsIC4uLikuCisJICov CisJaWYgKCFmb3VuZCkKKwl7CisJCUpzb25QYXRoQW5sU3RhdHMgICAqcGFyZW50ID0gKEpz b25QYXRoQW5sU3RhdHMgKikgc3RhdHMtPnBhdGgucGFyZW50OworCQljb25zdCBjaGFyCQkg ICAqcHBhdGggPSBwYXJlbnQtPnBhdGhzdHI7CisKKwkJcGF0aCA9ICZzdGF0cy0+cGF0aDsK KworCQkvKiBJcyBpdCB2YWxpZCBwYXRoPyBJZiBub3QsIHdlIHRyZWF0IGl0IGFzICQuIyAq LworCQlpZiAocGF0aC0+bGVuID49IDApCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhCXNpOwor CQkJTWVtb3J5Q29udGV4dAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3R4LT5t Y3h0KTsKKworCQkJaW5pdFN0cmluZ0luZm8oJnNpKTsKKworCQkJcGF0aC0+ZW50cnkgPSBw bnN0cmR1cChwYXRoLT5lbnRyeSwgcGF0aC0+bGVuKTsKKworCQkJYXBwZW5kU3RyaW5nSW5m bygmc2ksICIlcy4iLCBwcGF0aCk7CisJCQllc2NhcGVfanNvbigmc2ksIHBhdGgtPmVudHJ5 KTsKKworCQkJc3RhdHMtPnBhdGhzdHIgPSBzaS5kYXRhOworCisJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3h0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWludCBwYXRoc3RybGVu ID0gc3RybGVuKHBwYXRoKSArIDM7CisJCQlzdGF0cy0+cGF0aHN0ciA9IE1lbW9yeUNvbnRl eHRBbGxvYyhjdHgtPm1jeHQsIHBhdGhzdHJsZW4pOworCQkJc25wcmludGYoc3RhdHMtPnBh dGhzdHIsIHBhdGhzdHJsZW4sICIlcy4jIiwgcHBhdGgpOworCQl9CisKKwkJLyogaW5pdGlh bGl6ZSB0aGUgc3RhdHMgY291bnRlciBmb3IgdGhpcyBwYXRoIGVudHJ5ICovCisJCW1lbXNl dCgmc3RhdHMtPnZzdGF0cywgMCwgc2l6ZW9mKEpzb25WYWx1ZVN0YXRzKSk7CisJCXN0YXRz LT5zdGF0cyA9IE5VTEw7CisJCXN0YXRzLT5mcmVxID0gMC4wOworCQlzdGF0cy0+ZGVwdGgg PSBwYXJlbnQtPmRlcHRoICsgMTsKKwkJc3RhdHMtPmVudHJpZXMgPSBOVUxMOworCQlzdGF0 cy0+bmVudHJpZXMgPSAwOworCisJCS8qIFhYWCBTZWVtcyBzdHJhbmdlLiBTaG91bGQgd2Ug ZXZlbiBhZGQgdGhlIHBhdGggaW4gdGhpcyBjYXNlPyAqLworCQlpZiAoc3RhdHMtPmRlcHRo ID4gY3R4LT5tYXhkZXB0aCkKKwkJCWN0eC0+bWF4ZGVwdGggPSBzdGF0cy0+ZGVwdGg7CisJ fQorCisJcmV0dXJuIHN0YXRzOworfQorCisvKgorICogSnNvblZhbHVlc0FwcGVuZAorICoJ CUFkZCBhIEpTT04gdmFsdWUgdG8gdGhlIGR5bmFtaWMgYXJyYXkgKGVubGFyZ2UgaXQgaWYg bmVlZGVkKS4KKyAqCisgKiBYWFggVGhpcyBpcyBsaWtlbHkgb25lIG9mIHRoZSBwcm9ibGVt cyAtIHRoZSBkb2N1bWVudHMgbWF5IGJlIHByZXR0eQorICogbGFyZ2UsIHdpdGggYSBsb3Qg b2YgZGlmZmVyZW50IHZhbHVlcyBmb3IgZWFjaCBwYXRoLiBBdCB0aGF0IHBvaW50CisgKiBp dCdzIHByb2JsZW1hdGljIHRvIGtlZXAgYWxsIG9mIHRoYXQgaW4gbWVtb3J5IGF0IG9uY2Uu IFNvIG1heWJlIHdlCisgKiBuZWVkIHRvIGludHJvZHVjZSBzb21lIHNvcnQgb2YgY29tcGFj dGlvbiAoZS5nLiB3ZSBjb3VsZCB0cnkKKyAqIGRlZHVwbGljYXRpbmcgdGhlIHZhbHVlcyks IGxpbWl0IG9uIHNpemUgb2YgdGhlIGFycmF5IG9yIHNvbWV0aGluZy4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCitKc29uVmFsdWVzQXBwZW5kKEpzb25WYWx1ZXMgKnZhbHVlcywgRGF0 dW0gdmFsdWUsIGludCBpbml0aWFsU2l6ZSkKK3sKKwlpZiAodmFsdWVzLT5jb3VudCA+PSB2 YWx1ZXMtPmFsbG9jYXRlZCkKKwl7CisJCWlmICh2YWx1ZXMtPmFsbG9jYXRlZCkKKwkJewor CQkJdmFsdWVzLT5hbGxvY2F0ZWQgPSB2YWx1ZXMtPmFsbG9jYXRlZCAqIDI7CisJCQl2YWx1 ZXMtPmJ1ZiA9IHJlcGFsbG9jKHZhbHVlcy0+YnVmLAorCQkJCQkJCQkJc2l6ZW9mKHZhbHVl cy0+YnVmWzBdKSAqIHZhbHVlcy0+YWxsb2NhdGVkKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CXZhbHVlcy0+YWxsb2NhdGVkID0gaW5pdGlhbFNpemU7CisJCQl2YWx1ZXMtPmJ1ZiA9IHBh bGxvYyhzaXplb2YodmFsdWVzLT5idWZbMF0pICogdmFsdWVzLT5hbGxvY2F0ZWQpOworCQl9 CisJfQorCisJdmFsdWVzLT5idWZbdmFsdWVzLT5jb3VudCsrXSA9IHZhbHVlOworfQorCisv KgorICoganNvbkFuYWx5emVKc29uVmFsdWUKKyAqCQlQcm9jZXNzIGEgdmFsdWUgZXh0cmFj dGVkIGZyb20gdGhlIGRvY3VtZW50IChmb3IgYSBnaXZlbiBwYXRoKS4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCitqc29uQW5hbHl6ZUpzb25WYWx1ZShKc29uQW5hbHl6ZUNvbnRleHQg KmN0eCwgSnNvblZhbHVlU3RhdHMgKnZzdGF0cywKKwkJCQkJIEpzb25iVmFsdWUgKmp2KQor eworCUpzb25TY2FsYXJTdGF0cwkgICAqc3N0YXRzOworCUpzb25iVmFsdWUJCSAgICpqYnY7 CisJSnNvbmJWYWx1ZQkJCWpidnRtcDsKKwlEYXR1bQkJCQl2YWx1ZTsKKworCS8qID8/PyAq LworCWlmIChjdHgtPnNjYWxhcnNPbmx5ICYmIGp2LT50eXBlID09IGpidkJpbmFyeSkKKwl7 CisJCWlmIChKc29uQ29udGFpbmVySXNPYmplY3QoanYtPnZhbC5iaW5hcnkuZGF0YSkpCisJ CQlqYnYgPSBKc29uVmFsdWVJbml0T2JqZWN0KCZqYnZ0bXAsIDAsIDApOworCQllbHNlCisJ CXsKKwkJCUFzc2VydChKc29uQ29udGFpbmVySXNBcnJheShqdi0+dmFsLmJpbmFyeS5kYXRh KSk7CisJCQlqYnYgPSBKc29uVmFsdWVJbml0QXJyYXkoJmpidnRtcCwgMCwgMCwgZmFsc2Up OworCQl9CisJfQorCWVsc2UKKwkJamJ2ID0ganY7CisKKwkvKiBhbHdheXMgYWRkIGl0IHRv IHRoZSAiZ2xvYmFsIiBKU09OIHN0YXRzLCBzaGFyZWQgYnkgYWxsIHR5cGVzICovCisJSnNv blZhbHVlc0FwcGVuZCgmdnN0YXRzLT5qc29ucy52YWx1ZXMsCisJCQkJCSBKc29uYlBHZXRE YXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKSwKKwkJCQkJIGN0eC0+dGFyZ2V0KTsKKwor CS8qCisJICogTWF5YmUgYWxzbyB1cGRhdGUgdGhlIHR5cGUtc3BlY2lmaWMgY291bnRlcnMu CisJICoKKwkgKiBYWFggVGhlIG1peCBvZiBicmVhay9yZXR1cm4gc3RhdGVtZW50cyBpbiB0 aGlzIGJsb2NrIGlzIHJlYWxseQorCSAqIGNvbmZ1c2luZy4KKwkgKi8KKwlzd2l0Y2ggKGp2 LT50eXBlKQorCXsKKwkJY2FzZSBqYnZOdWxsOgorCQkJKyt2c3RhdHMtPm5udWxsczsKKwkJ CXJldHVybjsKKworCQljYXNlIGpidkJvb2w6CisJCQkrKyooanYtPnZhbC5ib29sZWFuID8g JnZzdGF0cy0+Ym9vbGVhbnMubnRydWUKKwkJCQkJCQkJOiAmdnN0YXRzLT5ib29sZWFucy5u ZmFsc2UpOworCQkJcmV0dXJuOworCisJCWNhc2UgamJ2U3RyaW5nOgorI2lmZGVmIEpTT05f QU5BTFlaRV9TQ0FMQVJTCisJCQlzc3RhdHMgPSAmdnN0YXRzLT5zdHJpbmdzOworCQkJdmFs dWUgPSBQb2ludGVyR2V0RGF0dW0oCisJCQkJCQljc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4o anYtPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkJCQkJIGp2LT52YWwuc3RyaW5nLmxlbikp OworCQkJYnJlYWs7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisKKwkJY2FzZSBqYnZO dW1lcmljOgorI2lmZGVmIEpTT05fQU5BTFlaRV9TQ0FMQVJTCisJCQlzc3RhdHMgPSAmdnN0 YXRzLT5udW1lcmljczsKKwkJCXZhbHVlID0gUG9pbnRlckdldERhdHVtKGp2LT52YWwubnVt ZXJpYyk7CisJCQlicmVhazsKKyNlbHNlCisJCQlyZXR1cm47CisjZW5kaWYKKworCQljYXNl IGpidkJpbmFyeToKKwkJCWlmIChKc29uQ29udGFpbmVySXNPYmplY3QoanYtPnZhbC5iaW5h cnkuZGF0YSkpCisJCQl7CisJCQkJdWludDMyIHNpemUgPSBKc29uQ29udGFpbmVyU2l6ZShq di0+dmFsLmJpbmFyeS5kYXRhKTsKKwkJCQl2YWx1ZSA9IERhdHVtR2V0SW50MzIoc2l6ZSk7 CisJCQkJc3N0YXRzID0gJnZzdGF0cy0+bGVuczsKKwkJCQl2c3RhdHMtPm5vYmplY3RzKys7 CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmIChKc29uQ29udGFpbmVySXNBcnJheShq di0+dmFsLmJpbmFyeS5kYXRhKSkKKwkJCXsKKwkJCQl1aW50MzIgc2l6ZSA9IEpzb25Db250 YWluZXJTaXplKGp2LT52YWwuYmluYXJ5LmRhdGEpOworCQkJCXZhbHVlID0gRGF0dW1HZXRJ bnQzMihzaXplKTsKKwkJCQlzc3RhdHMgPSAmdnN0YXRzLT5sZW5zOworCQkJCXZzdGF0cy0+ bmFycmF5cysrOworCQkJCUpzb25WYWx1ZXNBcHBlbmQoJnZzdGF0cy0+YXJybGVucy52YWx1 ZXMsIHZhbHVlLCBjdHgtPnRhcmdldCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXR1cm47 CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNjYWxhciBqc29uIHZh bHVlIHR5cGUgJWQiLCBqdi0+dHlwZSk7CisJCQlicmVhazsKKwl9CisKKwlKc29uVmFsdWVz QXBwZW5kKCZzc3RhdHMtPnZhbHVlcywgdmFsdWUsIGN0eC0+dGFyZ2V0KTsKK30KKworLyoK KyAqIGpzb25BbmFseXplSnNvbgorICoJCVBhcnNlIHRoZSBKU09OIGRvY3VtZW50IGFuZCBi dWlsZC91cGRhdGUgc3RhdHMuCisgKgorICogWFhYIFRoZSBuYW1lIHNlZW1zIGEgYml0IHdl aXJkLCB3aXRoIHRoZSB0d28ganNvbiBiaXRzLgorICoKKyAqIFhYWCBUaGUgcGFyYW0gaXMg ZWl0aGVyIE5VTEwsIChjaGFyICopIC0xLCBvciBhIHBvaW50ZXIKKyAqLworc3RhdGljIHZv aWQKK2pzb25BbmFseXplSnNvbihKc29uQW5hbHl6ZUNvbnRleHQgKmN0eCwgSnNvbmIgKmpi LCB2b2lkICpwYXJhbSkKK3sKKwlKc29uYlZhbHVlCQkJanY7CisJSnNvbmJJdGVyYXRvcgkg ICAqaXQ7CisJSnNvbmJJdGVyYXRvclRva2VuCXRvazsKKwlKc29uUGF0aEFubFN0YXRzICAg KnRhcmdldCA9IChKc29uUGF0aEFubFN0YXRzICopIHBhcmFtOworCUpzb25QYXRoQW5sU3Rh dHMgICAqc3RhdHMgPSBjdHgtPnJvb3Q7CisJSnNvblBhdGgJCQlwYXRoID0gJnN0YXRzLT5w YXRoOworCUpzb25QYXRoRW50cnkJCWVudHJ5OworCWJvb2wJCQkJc2NhbGFyID0gZmFsc2U7 CisKKwlpZiAoKCF0YXJnZXQgfHwgdGFyZ2V0ID09IHN0YXRzKSAmJgorCQkhSkJfUk9PVF9J U19TQ0FMQVIoamIpKQorCQlqc29uQW5hbHl6ZUpzb25WYWx1ZShjdHgsICZzdGF0cy0+dnN0 YXRzLCBKc29uVmFsdWVJbml0QmluYXJ5KCZqdiwgamIpKTsKKworCWl0ID0gSnNvbmJJdGVy YXRvckluaXQoJmpiLT5yb290KTsKKworCXdoaWxlICgodG9rID0gSnNvbmJJdGVyYXRvck5l eHQoJml0LCAmanYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCXN3aXRjaCAodG9rKQor CQl7CisJCQljYXNlIFdKQl9CRUdJTl9PQkpFQ1Q6CisJCQkJZW50cnkuZW50cnkgPSBOVUxM OworCQkJCWVudHJ5LmxlbiA9IC0xOworCQkJCWVudHJ5LnBhcmVudCA9IHBhdGg7CisJCQkJ cGF0aCA9ICZlbnRyeTsKKworCQkJCWJyZWFrOworCisJCQljYXNlIFdKQl9FTkRfT0JKRUNU OgorCQkJCXN0YXRzID0gKEpzb25QYXRoQW5sU3RhdHMgKikocGF0aCA9IHBhdGgtPnBhcmVu dCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgV0pCX0JFR0lOX0FSUkFZOgorCQkJCWlmICgh KHNjYWxhciA9IGp2LnZhbC5hcnJheS5yYXdTY2FsYXIpKQorCQkJCXsKKwkJCQkJZW50cnku ZW50cnkgPSBOVUxMOworCQkJCQllbnRyeS5sZW4gPSAtMTsKKwkJCQkJZW50cnkucGFyZW50 ID0gcGF0aDsKKwkJCQkJcGF0aCA9ICYoc3RhdHMgPSBqc29uQW5hbHl6ZUFkZFBhdGgoY3R4 LCAmZW50cnkpKS0+cGF0aDsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgV0pCX0VO RF9BUlJBWToKKwkJCQlpZiAoIXNjYWxhcikKKwkJCQkJc3RhdHMgPSAoSnNvblBhdGhBbmxT dGF0cyAqKShwYXRoID0gcGF0aC0+cGFyZW50KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBX SkJfS0VZOgorCQkJCWVudHJ5LmVudHJ5ID0ganYudmFsLnN0cmluZy52YWw7CisJCQkJZW50 cnkubGVuID0ganYudmFsLnN0cmluZy5sZW47CisJCQkJZW50cnkucGFyZW50ID0gcGF0aC0+ cGFyZW50OworCQkJCXBhdGggPSAmKHN0YXRzID0ganNvbkFuYWx5emVBZGRQYXRoKGN0eCwg JmVudHJ5KSktPnBhdGg7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgV0pCX1ZBTFVFOgorCQkJ Y2FzZSBXSkJfRUxFTToKKwkJCQlpZiAoIXRhcmdldCB8fCB0YXJnZXQgPT0gc3RhdHMpCisJ CQkJCWpzb25BbmFseXplSnNvblZhbHVlKGN0eCwgJnN0YXRzLT52c3RhdHMsICZqdik7CisK KwkJCQkvKiBYWFggbm90IHN1cmUgd2h5IHdlJ3JlIGRvaW5nIHRoaXM/ICovCisJCQkJaWYg KGp2LnR5cGUgPT0gamJ2QmluYXJ5KQorCQkJCXsKKwkJCQkJLyogcmVjdXJzZSBpbnRvIGNv bnRhaW5lciAqLworCQkJCQlKc29uYkl0ZXJhdG9yICppdDIgPSBKc29uYkl0ZXJhdG9ySW5p dChqdi52YWwuYmluYXJ5LmRhdGEpOworCisJCQkJCWl0Mi0+cGFyZW50ID0gaXQ7CisJCQkJ CWl0ID0gaXQyOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVh azsKKwkJfQorCX0KK30KKworLyoKKyAqIGpzb25BbmFseXplSnNvblN1YnBhdGgKKyAqCQk/ Pz8KKyAqLworc3RhdGljIHZvaWQKK2pzb25BbmFseXplSnNvblN1YnBhdGgoSnNvbkFuYWx5 emVDb250ZXh0ICpjdHgsIEpzb25QYXRoQW5sU3RhdHMgKnBzdGF0cywKKwkJCQkJICAgSnNv bmJWYWx1ZSAqamJ2LCBpbnQgbikKK3sKKwlKc29uYlZhbHVlCXNjYWxhcjsKKwlpbnQJCQlp OworCisJZm9yIChpID0gbjsgaSA8IHBzdGF0cy0+ZGVwdGg7IGkrKykKKwl7CisJCUpzb25Q YXRoRW50cnkgICplbnRyeSA9IHBzdGF0cy0+ZW50cmllc1tpXTsKKwkJSnNvbmJDb250YWlu ZXIgKmpiYyA9IGpidi0+dmFsLmJpbmFyeS5kYXRhOworCQlKc29uYlZhbHVlVHlwZQl0eXBl ID0gamJ2LT50eXBlOworCisJCWlmIChpID4gbikKKwkJCXBmcmVlKGpidik7CisKKwkJaWYg KHR5cGUgIT0gamJ2QmluYXJ5KQorCQkJcmV0dXJuOworCisJCWlmIChlbnRyeS0+bGVuID09 IC0xKQorCQl7CisJCQlKc29uYkl0ZXJhdG9yCSAgICppdDsKKwkJCUpzb25iSXRlcmF0b3JU b2tlbglyOworCQkJSnNvbmJWYWx1ZQkJCWVsZW07CisKKwkJCWlmICghSnNvbkNvbnRhaW5l cklzQXJyYXkoamJjKSB8fCBKc29uQ29udGFpbmVySXNTY2FsYXIoamJjKSkKKwkJCQlyZXR1 cm47CisKKwkJCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoamJjKTsKKworCQkJd2hpbGUgKChy ID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmZWxlbSwgdHJ1ZSkpICE9IFdKQl9ET05FKQor CQkJeworCQkJCWlmIChyID09IFdKQl9FTEVNKQorCQkJCQlqc29uQW5hbHl6ZUpzb25TdWJw YXRoKGN0eCwgcHN0YXRzLCAmZWxlbSwgaSArIDEpOworCQkJfQorCisJCQlyZXR1cm47CisJ CX0KKwkJZWxzZQorCQl7CisJCQlpZiAoIUpzb25Db250YWluZXJJc09iamVjdChqYmMpKQor CQkJCXJldHVybjsKKworCQkJamJ2ID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyTGVu KGpiYywgSkJfRk9CSkVDVCwKKwkJCQkJCQkJCQkJCSBlbnRyeS0+ZW50cnksIGVudHJ5LT5s ZW4pOworCisJCQlpZiAoIWpidikKKwkJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaSA9 PSBuICYmCisJCWpidi0+dHlwZSA9PSBqYnZCaW5hcnkgJiYKKwkJSnNvbmJFeHRyYWN0U2Nh bGFyKGpidi0+dmFsLmJpbmFyeS5kYXRhLCAmc2NhbGFyKSkKKwkJamJ2ID0gJnNjYWxhcjsK KworCWpzb25BbmFseXplSnNvblZhbHVlKGN0eCwgJnBzdGF0cy0+dnN0YXRzLCBqYnYpOwor CisJaWYgKGkgPiBuKQorCQlwZnJlZShqYnYpOworfQorCisvKgorICoganNvbkFuYWx5emVK c29uUGF0aAorICoJCT8/PworICovCitzdGF0aWMgdm9pZAoranNvbkFuYWx5emVKc29uUGF0 aChKc29uQW5hbHl6ZUNvbnRleHQgKmN0eCwgSnNvbmIgKmpiLCB2b2lkICpwYXJhbSkKK3sK KwlKc29uUGF0aEFubFN0YXRzICAgKnBzdGF0cyA9IChKc29uUGF0aEFubFN0YXRzICopIHBh cmFtOworCUpzb25iVmFsdWUJCQlqYnZ0bXA7CisJSnNvbmJWYWx1ZQkJICAgKmpidiA9IEpz b25WYWx1ZUluaXRCaW5hcnkoJmpidnRtcCwgamIpOworCUpzb25QYXRoCQkJcGF0aDsKKwor CWlmICghcHN0YXRzLT5lbnRyaWVzKQorCXsKKwkJaW50IGk7CisKKwkJcHN0YXRzLT5lbnRy aWVzID0gTWVtb3J5Q29udGV4dEFsbG9jKGN0eC0+bWN4dCwKKwkJCQkJCQkJCXNpemVvZigq cHN0YXRzLT5lbnRyaWVzKSAqIHBzdGF0cy0+ZGVwdGgpOworCisJCWZvciAocGF0aCA9ICZw c3RhdHMtPnBhdGgsIGkgPSBwc3RhdHMtPmRlcHRoIC0gMTsKKwkJCSBwYXRoLT5wYXJlbnQg JiYgaSA+PSAwOworCQkJIHBhdGggPSBwYXRoLT5wYXJlbnQsIGktLSkKKwkJCXBzdGF0cy0+ ZW50cmllc1tpXSA9IHBhdGg7CisJfQorCisJanNvbkFuYWx5emVKc29uU3VicGF0aChjdHgs IHBzdGF0cywgamJ2LCAwKTsKK30KKworc3RhdGljIERhdHVtCitqc29uQW5hbHl6ZVBhdGhG ZXRjaChWYWNBdHRyU3RhdHNQIHN0YXRzLCBpbnQgcm93bnVtLCBib29sICppc251bGwpCit7 CisJKmlzbnVsbCA9IGZhbHNlOworCXJldHVybiBzdGF0cy0+ZXhwcnZhbHNbcm93bnVtXTsK K30KKworLyoKKyAqIGpzb25BbmFseXplUGF0aFZhbHVlcworICoJCUNhbGN1bGF0ZSBwZXIt Y29sdW1uIHN0YXRpc3RpY3MgZm9yIHZhbHVlcyBmb3IgYSBzaW5nbGUgcGF0aC4KKyAqCisg KiBXZSBoYXZlIGFscmVhZHkgYWNjdW11bGF0ZWQgYWxsIHRoZSB2YWx1ZXMgZm9yIHRoZSBw YXRoLCBzbyB3ZSBzaW1wbHkKKyAqIGNhbGwgdGhlIHR5cGFuYWx5emUgZnVuY3Rpb24gZm9y IHRoZSBwcm9wZXIgZGF0YSB0eXBlLCBhbmQgdGhlbgorICogY29tcHV0ZV9zdGF0cyAod2hp Y2ggcG9pbnRzIHRvIGNvbXB1dGVfc2NhbGFyX3N0YXRzIG9yIHNvKS4KKyAqLworc3RhdGlj IHZvaWQKK2pzb25BbmFseXplUGF0aFZhbHVlcyhKc29uQW5hbHl6ZUNvbnRleHQgKmN0eCwg SnNvblNjYWxhclN0YXRzICpzc3RhdHMsCisJCQkJCSAgT2lkIHR5cGlkLCBkb3VibGUgZnJl cSkKK3sKKwlKc29uVmFsdWVzCQkJICAgKnZhbHVlcyA9ICZzc3RhdHMtPnZhbHVlczsKKwlW YWNBdHRyU3RhdHMJCSAgICpzdGF0cyA9ICZzc3RhdHMtPnN0YXRzOworCUZvcm1EYXRhX3Bn X2F0dHJpYnV0ZQlhdHRyOworCUZvcm1EYXRhX3BnX3R5cGUJCXR5cGU7CisJaW50CQkJCQkJ aTsKKworCWlmICghc3N0YXRzLT52YWx1ZXMuY291bnQpCisJCXJldHVybjsKKworCWdldF90 eXBsZW5ieXZhbGFsaWduKHR5cGlkLCAmdHlwZS50eXBsZW4sICZ0eXBlLnR5cGJ5dmFsLCAm dHlwZS50eXBhbGlnbik7CisKKwlhdHRyLmF0dHN0YXR0YXJnZXQgPSBjdHgtPnRhcmdldDsK KworCXN0YXRzLT5hdHRyID0gJmF0dHI7CisJc3RhdHMtPmF0dHJ0eXBpZCA9IHR5cGlkOwor CXN0YXRzLT5hdHRydHlwbW9kID0gLTE7CisJc3RhdHMtPmF0dHJ0eXBlID0gJnR5cGU7CisJ c3RhdHMtPmFubF9jb250ZXh0ID0gY3R4LT5zdGF0cy0+YW5sX2NvbnRleHQ7CisKKwlzdGF0 cy0+ZXhwcnZhbHMgPSB2YWx1ZXMtPmJ1ZjsKKworCS8qIFhYWCBEbyB3ZSBuZWVkIHRvIGlu aXRpYWxpemUgYWxsIHNsb3RzPyAqLworCWZvciAoaSA9IDA7IGkgPCBTVEFUSVNUSUNfTlVN X1NMT1RTOyBpKyspCisJeworCQlzdGF0cy0+c3RhdHlwaWRbaV0gPSBzdGF0cy0+YXR0cnR5 cGlkOworCQlzdGF0cy0+c3RhdHlwbGVuW2ldID0gc3RhdHMtPmF0dHJ0eXBlLT50eXBsZW47 CisJCXN0YXRzLT5zdGF0eXBieXZhbFtpXSA9IHN0YXRzLT5hdHRydHlwZS0+dHlwYnl2YWw7 CisJCXN0YXRzLT5zdGF0eXBhbGlnbltpXSA9IHN0YXRzLT5hdHRydHlwZS0+dHlwYWxpZ247 CisJfQorCisJc3RkX3R5cGFuYWx5emUoc3RhdHMpOworCisJc3RhdHMtPmNvbXB1dGVfc3Rh dHMoc3RhdHMsIGpzb25BbmFseXplUGF0aEZldGNoLAorCQkJCQkJIHZhbHVlcy0+Y291bnQs CisJCQkJCQkgY3R4LT50b3RhbHJvd3MgLyBjdHgtPnNhbXBsZXJvd3MgKiB2YWx1ZXMtPmNv dW50KTsKKworCS8qCisJICogV2UndmUgb25seSBrZXB0IHRoZSBub24tbnVsbCB2YWx1ZXMs IHNvIGNvbXB1dGVfc3RhdHMgd2lsbCBhbHdheXMKKwkgKiBsZWF2ZSB0aGlzIGFzIDEuMC4g QnV0IHdlIGhhdmUgZW5vdWdoIGluZm8gdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0CisJICog dmFsdWUuCisJICovCisJc3RhdHMtPnN0YW51bGxmcmFjID0gKGZsb2F0NCkoMS4wIC0gZnJl cSk7CisKKwkvKgorCSAqIFNpbWlsYXJseSwgd2UgbmVlZCB0byBjb3JyZWN0IHRoZSBNQ1Yg ZnJlcXVlbmNpZXMsIGJlY3VzZSB0aG9zZSBhcmUKKwkgKiBhbHNvIGNhbGN1bGF0ZWQgb25s eSBmcm9tIHRoZSBub24tbnVsbCB2YWx1ZXMuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzCisJICog c2ltcGx5IG11bHRpcGx5IHRoYXQgd2l0aCB0aGUgbm9uLU5VTEwgZnJlcXVlbmN5LgorCSAq LworCWZvciAoaSA9IDA7IGkgPCBTVEFUSVNUSUNfTlVNX1NMT1RTOyBpKyspCisJeworCQlp ZiAoc3RhdHMtPnN0YWtpbmRbaV0gPT0gU1RBVElTVElDX0tJTkRfTUNWKQorCQl7CisJCQlp bnQgajsKKwkJCWZvciAoaiA9IDA7IGogPCBzdGF0cy0+bnVtbnVtYmVyc1tpXTsgaisrKQor CQkJCXN0YXRzLT5zdGFudW1iZXJzW2ldW2pdICo9IGZyZXE7CisJCX0KKwl9Cit9CisKKy8q CisgKiBqc29uQW5hbHl6ZU1ha2VTY2FsYXJTdGF0cworICoJCVNlcmlhbGl6ZSBzY2FsYXIg c3RhdHMgaW50byBhIEpTT04gcmVwcmVzZW50YXRpb24uCisgKgorICogV2Ugc2ltcGx5IHBy b2R1Y2UgYSBKU09OIGRvY3VtZW50IHdpdGggYSBsaXN0IG9mIHByZWRlZmluZWQga2V5czoK KyAqCisgKiAtIG51bGxmcmFjCisgKiAtIGRpc3RpbmN0CisgKiAtIHdpZHRoCisgKiAtIGNv cnJlbGF0aW9uCisgKiAtIG1jdiBvciBoaXN0b2dyYW0KKyAqCisgKiBGb3IgdGhlIG1jdiAv IGhpc3RvZ3JhbSwgd2Ugc3RvcmUgYSBuZXN0ZWQgdmFsdWVzIC8gbnVtYmVycy4KKyAqLwor c3RhdGljIEpzb25iVmFsdWUgKgoranNvbkFuYWx5emVNYWtlU2NhbGFyU3RhdHMoSnNvbmJQ YXJzZVN0YXRlICoqcHMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkJY29uc3QgVmFjQXR0 clN0YXRzICpzdGF0cykKK3sKKwlKc29uYlZhbHVlCXZhbDsKKwlpbnQJCQlpOworCWludAkJ CWo7CisKKwlwdXNoSnNvbmJLZXkocHMsICZ2YWwsIG5hbWUpOworCisJcHVzaEpzb25iVmFs dWUocHMsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJcHVzaEpzb25iS2V5VmFsdWVG bG9hdChwcywgJnZhbCwgIm51bGxmcmFjIiwgc3RhdHMtPnN0YW51bGxmcmFjKTsKKwlwdXNo SnNvbmJLZXlWYWx1ZUZsb2F0KHBzLCAmdmFsLCAiZGlzdGluY3QiLCBzdGF0cy0+c3RhZGlz dGluY3QpOworCXB1c2hKc29uYktleVZhbHVlSW50ZWdlcihwcywgJnZhbCwgIndpZHRoIiwg c3RhdHMtPnN0YXdpZHRoKTsKKworCWZvciAoaSA9IDA7IGkgPCBTVEFUSVNUSUNfTlVNX1NM T1RTOyBpKyspCisJeworCQlpZiAoIXN0YXRzLT5zdGFraW5kW2ldKQorCQkJYnJlYWs7CisK KwkJc3dpdGNoIChzdGF0cy0+c3Rha2luZFtpXSkKKwkJeworCQkJY2FzZSBTVEFUSVNUSUNf S0lORF9NQ1Y6CisJCQkJcHVzaEpzb25iS2V5KHBzLCAmdmFsLCAibWN2Iik7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgU1RBVElTVElDX0tJTkRfSElTVE9HUkFNOgorCQkJCXB1c2hKc29u YktleShwcywgJnZhbCwgImhpc3RvZ3JhbSIpOworCQkJCWJyZWFrOworCisJCQljYXNlIFNU QVRJU1RJQ19LSU5EX0NPUlJFTEFUSU9OOgorCQkJCXB1c2hKc29uYktleVZhbHVlRmxvYXQo cHMsICZ2YWwsICJjb3JyZWxhdGlvbiIsCisJCQkJCQkJCQkgICBzdGF0cy0+c3RhbnVtYmVy c1tpXVswXSk7CisJCQkJY29udGludWU7CisKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgc3Rha2luZCAlZCIsIHN0YXRzLT5zdGFraW5kW2ldKTsKKwkJCQli cmVhazsKKwkJfQorCisJCXB1c2hKc29uYlZhbHVlKHBzLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKworCQlpZiAoc3RhdHMtPm51bXZhbHVlc1tpXSA+IDApCisJCXsKKwkJCXB1c2hK c29uYktleShwcywgJnZhbCwgInZhbHVlcyIpOworCQkJcHVzaEpzb25iVmFsdWUocHMsIFdK Ql9CRUdJTl9BUlJBWSwgTlVMTCk7CisJCQlmb3IgKGogPSAwOyBqIDwgc3RhdHMtPm51bXZh bHVlc1tpXTsgaisrKQorCQkJeworCQkJCURhdHVtIHYgPSBzdGF0cy0+c3RhdmFsdWVzW2ld W2pdOworCQkJCWlmIChzdGF0cy0+YXR0cnR5cGlkID09IEpTT05CT0lEKQorCQkJCQlwdXNo SnNvbmJFbGVtQmluYXJ5KHBzLCAmdmFsLCBEYXR1bUdldEpzb25iUCh2KSk7CisJCQkJZWxz ZSBpZiAoc3RhdHMtPmF0dHJ0eXBpZCA9PSBURVhUT0lEKQorCQkJCQlwdXNoSnNvbmJFbGVt VGV4dChwcywgJnZhbCwgRGF0dW1HZXRUZXh0UCh2KSk7CisJCQkJZWxzZSBpZiAoc3RhdHMt PmF0dHJ0eXBpZCA9PSBOVU1FUklDT0lEKQorCQkJCQlwdXNoSnNvbmJFbGVtTnVtZXJpYyhw cywgJnZhbCwgRGF0dW1HZXROdW1lcmljKHYpKTsKKwkJCQllbHNlIGlmIChzdGF0cy0+YXR0 cnR5cGlkID09IElOVDRPSUQpCisJCQkJCXB1c2hKc29uYkVsZW1JbnRlZ2VyKHBzLCAmdmFs LCBEYXR1bUdldEludDMyKHYpKTsKKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIHN0YXQgdmFsdWUgdHlwZSAlZCIsCisJCQkJCQkgc3RhdHMtPmF0dHJ0eXBpZCk7 CisJCQl9CisJCQlwdXNoSnNvbmJWYWx1ZShwcywgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJ CX0KKworCQlpZiAoc3RhdHMtPm51bW51bWJlcnNbaV0gPiAwKQorCQl7CisJCQlwdXNoSnNv bmJLZXkocHMsICZ2YWwsICJudW1iZXJzIik7CisJCQlwdXNoSnNvbmJWYWx1ZShwcywgV0pC X0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJCWZvciAoaiA9IDA7IGogPCBzdGF0cy0+bnVtbnVt YmVyc1tpXTsgaisrKQorCQkJCXB1c2hKc29uYkVsZW1GbG9hdChwcywgJnZhbCwgc3RhdHMt PnN0YW51bWJlcnNbaV1bal0pOworCQkJcHVzaEpzb25iVmFsdWUocHMsIFdKQl9FTkRfQVJS QVksIE5VTEwpOworCQl9CisKKwkJcHVzaEpzb25iVmFsdWUocHMsIFdKQl9FTkRfT0JKRUNU LCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUocHMsIFdKQl9FTkRfT0JK RUNULCBOVUxMKTsKK30KKworLyoKKyAqIGpzb25BbmFseXplQnVpbGRQYXRoU3RhdHMKKyAq CQlTZXJpYWxpemUgc3RhdGlzdGljcyBmb3IgYSBwYXJ0aWN1bGFyIGpzb24gcGF0aC4KKyAq CisgKiBUaGlzIGluY2x1ZGVzIGJvdGggdGhlIHBlci1jb2x1bW4gc3RhdHMgKHN0b3JlZCBp biAianNvbiIga2V5KSBhbmQgdGhlCisgKiBKU09OIHNwZWNpZmljIHN0YXRzIChsaWtlIGZy ZXF1ZW5jaWVzIG9mIGRpZmZlcmVudCBvYmplY3QgdHlwZXMpLgorICovCitzdGF0aWMgSnNv bmIgKgoranNvbkFuYWx5emVCdWlsZFBhdGhTdGF0cyhKc29uUGF0aEFubFN0YXRzICpwc3Rh dHMpCit7CisJY29uc3QgSnNvblZhbHVlU3RhdHMgKnZzdGF0cyA9ICZwc3RhdHMtPnZzdGF0 czsKKwlmbG9hdDQJCQkJZnJlcSA9IHBzdGF0cy0+ZnJlcTsKKwlib29sCQkJCWZ1bGwgPSAh IXBzdGF0cy0+cGF0aC5wYXJlbnQ7CisJSnNvbmJWYWx1ZQkJCXZhbDsKKwlKc29uYlZhbHVl CQkgICAqamJ2OworCUpzb25iUGFyc2VTdGF0ZQkgICAqcHMgPSBOVUxMOworCisJcHVzaEpz b25iVmFsdWUoJnBzLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCXB1c2hKc29uYktl eVZhbHVlU3RyaW5nKCZwcywgJnZhbCwgInBhdGgiLCBwc3RhdHMtPnBhdGhzdHIpOworCisJ cHVzaEpzb25iS2V5VmFsdWVGbG9hdCgmcHMsICZ2YWwsICJmcmVxIiwgZnJlcSk7CisKKwlw dXNoSnNvbmJLZXlWYWx1ZUZsb2F0KCZwcywgJnZhbCwgImZyZXFfbnVsbCIsCisJCQkJCQkg ICBmcmVxICogdnN0YXRzLT5ubnVsbHMgLworCQkJCQkJCQkgIHZzdGF0cy0+anNvbnMudmFs dWVzLmNvdW50KTsKKworCXB1c2hKc29uYktleVZhbHVlRmxvYXQoJnBzLCAmdmFsLCAiZnJl cV9ib29sZWFuIiwKKwkJCQkJCSAgIGZyZXEgKiAodnN0YXRzLT5ib29sZWFucy5uZmFsc2Ug KworCQkJCQkJCQkgICB2c3RhdHMtPmJvb2xlYW5zLm50cnVlKSAvCisJCQkJCQkJCSAgdnN0 YXRzLT5qc29ucy52YWx1ZXMuY291bnQpOworCisJcHVzaEpzb25iS2V5VmFsdWVGbG9hdCgm cHMsICZ2YWwsICJmcmVxX3N0cmluZyIsCisJCQkJCQkgICBmcmVxICogdnN0YXRzLT5zdHJp bmdzLnZhbHVlcy5jb3VudCAvCisJCQkJCQkJCSAgdnN0YXRzLT5qc29ucy52YWx1ZXMuY291 bnQpOworCisJcHVzaEpzb25iS2V5VmFsdWVGbG9hdCgmcHMsICZ2YWwsICJmcmVxX251bWVy aWMiLAorCQkJCQkJICAgZnJlcSAqIHZzdGF0cy0+bnVtZXJpY3MudmFsdWVzLmNvdW50IC8K KwkJCQkJCQkJICB2c3RhdHMtPmpzb25zLnZhbHVlcy5jb3VudCk7CisKKwlwdXNoSnNvbmJL ZXlWYWx1ZUZsb2F0KCZwcywgJnZhbCwgImZyZXFfYXJyYXkiLAorCQkJCQkJICAgZnJlcSAq IHZzdGF0cy0+bmFycmF5cyAvCisJCQkJCQkJCSAgdnN0YXRzLT5qc29ucy52YWx1ZXMuY291 bnQpOworCisJcHVzaEpzb25iS2V5VmFsdWVGbG9hdCgmcHMsICZ2YWwsICJmcmVxX29iamVj dCIsCisJCQkJCQkgICBmcmVxICogdnN0YXRzLT5ub2JqZWN0cyAvCisJCQkJCQkJCSAgdnN0 YXRzLT5qc29ucy52YWx1ZXMuY291bnQpOworCisJLyoKKwkgKiBYWFggbm90IHN1cmUgd2h5 IHdlIGtlZXAgbGVuZ3RoIGFuZCBhcnJheSBsZW5ndGggc3RhdHMgYXQgdGhpcyBsZXZlbC4K KwkgKiBBcmVuJ3QgdGhvc2UgY292ZXJlZCBieSB0aGUgcGVyLWNvbHVtbiBzdGF0cz8gV2Ug Y2VydGFpbmx5IGhhdmUKKwkgKiBmcmVxdWVuY2llcyBmb3IgYXJyYXkgZWxlbWVudHMgZXRj LgorCSAqLworCWlmIChwc3RhdHMtPnZzdGF0cy5sZW5zLnZhbHVlcy5jb3VudCkKKwkJanNv bkFuYWx5emVNYWtlU2NhbGFyU3RhdHMoJnBzLCAibGVuZ3RoIiwgJnZzdGF0cy0+bGVucy5z dGF0cyk7CisKKwlpZiAocHN0YXRzLT5wYXRoLmxlbiA9PSAtMSkKKwl7CisJCUpzb25QYXRo QW5sU3RhdHMgKnBhcmVudCA9IChKc29uUGF0aEFubFN0YXRzICopIHBzdGF0cy0+cGF0aC5w YXJlbnQ7CisKKwkJcHVzaEpzb25iS2V5VmFsdWVGbG9hdCgmcHMsICZ2YWwsICJhdmdfYXJy YXlfbGVuZ3RoIiwKKwkJCQkJCQkgICAoZmxvYXQ0KSB2c3RhdHMtPmpzb25zLnZhbHVlcy5j b3VudCAvCisJCQkJCQkJCQkJcGFyZW50LT52c3RhdHMubmFycmF5cyk7CisKKwkJanNvbkFu YWx5emVNYWtlU2NhbGFyU3RhdHMoJnBzLCAiYXJyYXlfbGVuZ3RoIiwKKwkJCQkJCQkJCSZw YXJlbnQtPnZzdGF0cy5hcnJsZW5zLnN0YXRzKTsKKwl9CisKKwlpZiAoZnVsbCkKKwl7Cisj aWZkZWYgSlNPTl9BTkFMWVpFX1NDQUxBUlMKKwkJanNvbkFuYWx5emVNYWtlU2NhbGFyU3Rh dHMoJnBzLCAic3RyaW5nIiwgJnZzdGF0cy0+c3RyaW5ncy5zdGF0cyk7CisJCWpzb25BbmFs eXplTWFrZVNjYWxhclN0YXRzKCZwcywgIm51bWVyaWMiLCAmdnN0YXRzLT5udW1lcmljcy5z dGF0cyk7CisjZW5kaWYKKwkJanNvbkFuYWx5emVNYWtlU2NhbGFyU3RhdHMoJnBzLCAianNv biIsICZ2c3RhdHMtPmpzb25zLnN0YXRzKTsKKwl9CisKKwlqYnYgPSBwdXNoSnNvbmJWYWx1 ZSgmcHMsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKKworCXJldHVybiBKc29uYlZhbHVlVG9K c29uYihqYnYpOworfQorCisvKgorICoganNvbkFuYWx5emVDYWxjUGF0aEZyZXEKKyAqCQlD YWxjdWxhdGUgcGF0aCBmcmVxdWVuY3ksIGkuZS4gaG93IG1hbnkgZG9jdW1lbnRzIGNvbnRh aW4gdGhpcyBwYXRoLgorICovCitzdGF0aWMgdm9pZAoranNvbkFuYWx5emVDYWxjUGF0aEZy ZXEoSnNvbkFuYWx5emVDb250ZXh0ICpjdHgsIEpzb25QYXRoQW5sU3RhdHMgKnBzdGF0cykK K3sKKwlKc29uUGF0aEFubFN0YXRzICAqcGFyZW50ID0gKEpzb25QYXRoQW5sU3RhdHMgKikg cHN0YXRzLT5wYXRoLnBhcmVudDsKKworCWlmIChwYXJlbnQpCisJeworCQlwc3RhdHMtPmZy ZXEgPSBwYXJlbnQtPmZyZXEgKgorCQkJKHBzdGF0cy0+cGF0aC5sZW4gPT0gLTEgPyBwYXJl bnQtPnZzdGF0cy5uYXJyYXlzCisJCQkJCQkJCQk6IHBzdGF0cy0+dnN0YXRzLmpzb25zLnZh bHVlcy5jb3VudCkgLworCQkJcGFyZW50LT52c3RhdHMuanNvbnMudmFsdWVzLmNvdW50Owor CisJCUNMQU1QX1BST0JBQklMSVRZKHBzdGF0cy0+ZnJlcSk7CisJfQorCWVsc2UKKwkJcHN0 YXRzLT5mcmVxID0gKGRvdWJsZSkgY3R4LT5hbmFseXplZF9jbnQgLyBjdHgtPnNhbXBsZXJv d3M7Cit9CisKKy8qCisgKiBqc29uQW5hbHl6ZVBhdGgKKyAqCQlCdWlsZCBzdGF0aXN0aWNz IGZvciB2YWx1ZXMgYWNjdW11bGF0ZWQgZm9yIHRoaXMgcGF0aC4KKyAqCisgKiBXZSdyZSBk b25lIHdpdGggYWNjdW11bGF0aW5nIHZhbHVlcyBmb3IgdGhpcyBwYXRoLCBzbyBjYWxjdWxh dGUgdGhlCisgKiBzdGF0aXN0aWNzIGZvciB0aGUgdmFyaW91cyBhcnJheXMuCisgKgorICog WFhYIEkgd29uZGVyIGlmIHdlIGNvdWxkIGludHJvZHVjZSBzb21lIHNpbXBsZSBoZXVyaXN0 aWN0IG9uIHdoaWNoCisgKiBwYXRocyB0byBrZWVwLCBzaW1pbGFybHkgdG8gd2hhdCB3ZSBk byBmb3IgTUNWIGxpc3RzLiBGb3IgZXhhbXBsZSBhCisgKiBwYXRoIHRoYXQgb2NjdXJyZWQg anVzdCBvbmNlIGlzIG5vdCB2ZXJ5IGludGVyZXN0aW5nLCBzbyB3ZSBjb3VsZAorICogZGVj aWRlIHRvIGlnbm9yZSBpdCBhbmQgbm90IGJ1aWxkIHRoZSBzdGF0cy4gQWx0aG91Z2ggdGhh dCB3b24ndAorICogc2F2ZSBtdWNoLCBiZWNhdXNlIHRoZXJlJ2xsIGJlIHZlcnkgZmV3IHZh bHVlcyBhY2N1bXVsYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK2pzb25BbmFseXplUGF0aChK c29uQW5hbHl6ZUNvbnRleHQgKmN0eCwgSnNvblBhdGhBbmxTdGF0cyAqcHN0YXRzKQorewor CU1lbW9yeUNvbnRleHQJCW9sZGN4dDsKKwlKc29uVmFsdWVTdGF0cwkgICAqdnN0YXRzID0g JnBzdGF0cy0+dnN0YXRzOworCisJanNvbkFuYWx5emVDYWxjUGF0aEZyZXEoY3R4LCBwc3Rh dHMpOworCisJLyogdmFsdWVzIGNvbWJpbmluZyBhbGwgb2JqZWN0IHR5cGVzICovCisJanNv bkFuYWx5emVQYXRoVmFsdWVzKGN0eCwgJnZzdGF0cy0+anNvbnMsIEpTT05CT0lELCBwc3Rh dHMtPmZyZXEpOworCisJLyoKKwkgKiBsZW5ndGhzIGFuZCBhcnJheSBsZW5ndGhzCisJICoK KwkgKiBYWFggTm90IHN1cmUgd2h5IHdlIGRpdmlkZSBpdCBieSB0aGUgbnVtYmVyIG9mIGpz b24gdmFsdWVzPworCSAqLworCWpzb25BbmFseXplUGF0aFZhbHVlcyhjdHgsICZ2c3RhdHMt PmxlbnMsIElOVDRPSUQsCisJCQkJCQkgIHBzdGF0cy0+ZnJlcSAqIHZzdGF0cy0+bGVucy52 YWx1ZXMuY291bnQgLworCQkJCQkJCQkJCSB2c3RhdHMtPmpzb25zLnZhbHVlcy5jb3VudCk7 CisJanNvbkFuYWx5emVQYXRoVmFsdWVzKGN0eCwgJnZzdGF0cy0+YXJybGVucywgSU5UNE9J RCwKKwkJCQkJCSAgcHN0YXRzLT5mcmVxICogdnN0YXRzLT5hcnJsZW5zLnZhbHVlcy5jb3Vu dCAvCisJCQkJCQkJCQkJIHZzdGF0cy0+anNvbnMudmFsdWVzLmNvdW50KTsKKworI2lmZGVm IEpTT05fQU5BTFlaRV9TQ0FMQVJTCisJLyogc3RhdHMgZm9yIHZhbHVlcyBvZiBzdHJpbmcv bnVtZXJpYyB0eXBlcyBvbmx5ICovCisJanNvbkFuYWx5emVQYXRoVmFsdWVzKGN0eCwgJnZz dGF0cy0+c3RyaW5ncywgVEVYVE9JRCwgcHN0YXRzLT5mcmVxKTsKKwlqc29uQW5hbHl6ZVBh dGhWYWx1ZXMoY3R4LCAmdnN0YXRzLT5udW1lcmljcywgTlVNRVJJQ09JRCwgcHN0YXRzLT5m cmVxKTsKKyNlbmRpZgorCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN0eC0+ c3RhdHMtPmFubF9jb250ZXh0KTsKKwlwc3RhdHMtPnN0YXRzID0ganNvbkFuYWx5emVCdWls ZFBhdGhTdGF0cyhwc3RhdHMpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwor fQorCisvKgorICogSnNvblBhdGhTdGF0c0NvbXBhcmUKKyAqCQlDb21wYXJlIHR3byBwYXRo IHN0YXRzIChieSBwYXRoIHN0cmluZykuCisgKgorICogV2Ugc3RvcmUgdGhlIHN0YXRzIHNv cnRlZCBieSBwYXRoIHN0cmluZywgYW5kIHRoaXMgaXMgdGhlIGNvbXBhcmF0b3IuCisgKi8K K3N0YXRpYyBpbnQKK0pzb25QYXRoU3RhdHNDb21wYXJlKGNvbnN0IHZvaWQgKnB2MSwgY29u c3Qgdm9pZCAqcHYyKQoreworCXJldHVybiBzdHJjbXAoKCooKGNvbnN0IEpzb25QYXRoQW5s U3RhdHMgKiopIHB2MSkpLT5wYXRoc3RyLAorCQkJCSAgKCooKGNvbnN0IEpzb25QYXRoQW5s U3RhdHMgKiopIHB2MikpLT5wYXRoc3RyKTsKK30KKworLyoKKyAqIGpzb25BbmFseXplU29y dFBhdGhzCisgKgkJUmVhZHMgYWxsIHN0YXRzIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZSBh bmQgc29ydHMgdGhlbS4KKyAqCisgKiBYWFggSXQncyBhIGJpdCBzdHJhbmdlIHdlIHNpbXBs eSBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBjb250ZXh0IGluc3RlYWQKKyAqIG9mIGp1c3Qg cmV0dXJuaW5nIGl0LgorICovCitzdGF0aWMgdm9pZAoranNvbkFuYWx5emVTb3J0UGF0aHMo SnNvbkFuYWx5emVDb250ZXh0ICpjdHgpCit7CisJSEFTSF9TRVFfU1RBVFVTCQloc2VxOwor CUpzb25QYXRoQW5sU3RhdHMgICAqcGF0aDsKKwlpbnQJCQkJCWk7CisKKwljdHgtPm5wYXRo cyA9IGhhc2hfZ2V0X251bV9lbnRyaWVzKGN0eC0+cGF0aHNoYXNoKSArIDE7CisJY3R4LT5w YXRocyA9IE1lbW9yeUNvbnRleHRBbGxvYyhjdHgtPm1jeHQsCisJCQkJCQkJCQlzaXplb2Yo KmN0eC0+cGF0aHMpICogY3R4LT5ucGF0aHMpOworCisJY3R4LT5wYXRoc1swXSA9IGN0eC0+ cm9vdDsKKworCWhhc2hfc2VxX2luaXQoJmhzZXEsIGN0eC0+cGF0aHNoYXNoKTsKKworCWZv ciAoaSA9IDE7IChwYXRoID0gaGFzaF9zZXFfc2VhcmNoKCZoc2VxKSk7IGkrKykKKwkJY3R4 LT5wYXRoc1tpXSA9IHBhdGg7CisKKwlwZ19xc29ydChjdHgtPnBhdGhzLCBjdHgtPm5wYXRo cywgc2l6ZW9mKCpjdHgtPnBhdGhzKSwKKwkJCSBKc29uUGF0aFN0YXRzQ29tcGFyZSk7Cit9 CisKKy8qCisgKiBqc29uQW5hbHl6ZVBhdGhzCisgKgkJU29ydCB0aGUgcGF0aHMgYW5kIGNh bGN1bGF0ZSBzdGF0aXN0aWNzIGZvciBlYWNoIG9mIHRoZW0uCisgKgorICogTm93IHRoYXQg d2UncmUgZG9uZSB3aXRoIHByb2Nlc3NpbmcgdGhlIGRvY3VtZW50cywgd2Ugc29ydCB0aGUg cGF0aHMKKyAqIHdlIGV4dHJhY3RlZCBhbmQgY2FsY3VsYXRlIHN0YXRzIGZvciBlYWNoIG9m IHRoZW0uCisgKgorICogWFhYIEkgd29uZGVyIGlmIHdlIGNvdWxkIGRvIHRoaXMgaW4gdHdv IHBoYXNlcywgdG8gbWF5YmUgbm90IGNvbGxlY3QKKyAqIChvciBldmVuIGFjY3VtdWxhdGUp IHZhbHVlcyBmb3IgcGF0aHMgdGhhdCBhcmUgbm90IGludGVyZXN0aW5nLgorICovCitzdGF0 aWMgdm9pZAoranNvbkFuYWx5emVQYXRocyhKc29uQW5hbHl6ZUNvbnRleHQJKmN0eCkKK3sK KwlpbnQJaTsKKworCWpzb25BbmFseXplU29ydFBhdGhzKGN0eCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgY3R4LT5ucGF0aHM7IGkrKykKKwkJanNvbkFuYWx5emVQYXRoKGN0eCwgY3R4LT5w YXRoc1tpXSk7Cit9CisKKy8qCisgKiBqc29uQW5hbHl6ZUJ1aWxkUGF0aFN0YXRzQXJyYXkK KyAqCQk/Pz8KKyAqLworc3RhdGljIERhdHVtICoKK2pzb25BbmFseXplQnVpbGRQYXRoU3Rh dHNBcnJheShKc29uUGF0aEFubFN0YXRzICoqcGF0aHMsIGludCBucGF0aHMsIGludCAqbnZh bHMsCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeGxlbikKK3sKKwlE YXR1bQkgICAqdmFsdWVzID0gcGFsbG9jKHNpemVvZihEYXR1bSkgKiAobnBhdGhzICsgMSkp OworCUpzb25iVmFsdWUgKmpidnByZWZpeCA9IHBhbGxvYyhzaXplb2YoSnNvbmJWYWx1ZSkp OworCWludAkJCWk7CisKKwlKc29uVmFsdWVJbml0U3RyaW5nV2l0aExlbihqYnZwcmVmaXgs CisJCQkJCQkJICAgbWVtY3B5KHBhbGxvYyhwcmVmaXhsZW4pLCBwcmVmaXgsIHByZWZpeGxl biksCisJCQkJCQkJICAgcHJlZml4bGVuKTsKKworCXZhbHVlc1swXSA9IEpzb25iUEdldERh dHVtKEpzb25iVmFsdWVUb0pzb25iKGpidnByZWZpeCkpOworCisJZm9yIChpID0gMDsgaSA8 IG5wYXRoczsgaSsrKQorCQl2YWx1ZXNbaSArIDFdID0gSnNvbmJQR2V0RGF0dW0ocGF0aHNb aV0tPnN0YXRzKTsKKworCSpudmFscyA9IG5wYXRocyArIDE7CisKKwlyZXR1cm4gdmFsdWVz OworfQorCisvKgorICoganNvbkFuYWx5emVNYWtlU3RhdHMKKyAqCQk/Pz8KKyAqLworc3Rh dGljIERhdHVtICoKK2pzb25BbmFseXplTWFrZVN0YXRzKEpzb25BbmFseXplQ29udGV4dCAq Y3R4LCBpbnQgKm51bXZhbHVlcykKK3sKKwlEYXR1bQkJICAgKnZhbHVlczsKKwlNZW1vcnlD b250ZXh0CW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdHgtPnN0YXRzLT5hbmxf Y29udGV4dCk7CisKKwl2YWx1ZXMgPSBqc29uQW5hbHl6ZUJ1aWxkUGF0aFN0YXRzQXJyYXko Y3R4LT5wYXRocywgY3R4LT5ucGF0aHMsCisJCQkJCQkJCQkJCW51bXZhbHVlcywgIiQiLCAx KTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJcmV0dXJuIHZhbHVl czsKK30KKworLyoKKyAqIGpzb25BbmFseXplQnVpbGRTdWJQYXRoc0RhdGEKKyAqCQk/Pz8K KyAqLworYm9vbAoranNvbkFuYWx5emVCdWlsZFN1YlBhdGhzRGF0YShEYXR1bSAqcGF0aHNE YXR1bXMsIGludCBucGF0aHMsIGludCBpbmRleCwKKwkJCQkJCQkgY29uc3QgY2hhcgkqcGF0 aCwgaW50IHBhdGhsZW4sCisJCQkJCQkJIGJvb2wgaW5jbHVkZVN1YnBhdGhzLCBmbG9hdDQg bnVsbGZyYWMsCisJCQkJCQkJIERhdHVtICpwdmFscywgRGF0dW0gKnBudW1zKQoreworCUpz b25QYXRoQW5sU3RhdHMgICoqcHZhbHVlcyA9IHBhbGxvYyhzaXplb2YoKnB2YWx1ZXMpICog bnBhdGhzKTsKKwlEYXR1bQkJCSAgICp2YWx1ZXM7CisJRGF0dW0JCQkJbnVtYmVyc1sxXTsK KwlKc29uYlZhbHVlCQkJcGF0aGtleTsKKwlpbnQJCQkJCW5zdWJwYXRocyA9IDA7CisJaW50 CQkJCQludmFsdWVzOworCWludAkJCQkJaTsKKworCUpzb25WYWx1ZUluaXRTdHJpbmdXaXRo TGVuKCZwYXRoa2V5LCAicGF0aCIsIDQpOworCisJZm9yIChpID0gaW5kZXg7IGkgPCBucGF0 aHM7IGkrKykKKwl7CisJCUpzb25iCSAgICpqYiA9IERhdHVtR2V0SnNvbmJQKHBhdGhzRGF0 dW1zW2ldKTsKKwkJSnNvbmJWYWx1ZSAqamJ2ID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFp bmVyKCZqYi0+cm9vdCwgSkJfRk9CSkVDVCwKKwkJCQkJCQkJCQkJCQkgICZwYXRoa2V5KTsK KworCQlpZiAoIWpidiB8fCBqYnYtPnR5cGUgIT0gamJ2U3RyaW5nIHx8CisJCQlqYnYtPnZh bC5zdHJpbmcubGVuIDwgcGF0aGxlbiB8fAorCQkJbWVtY21wKGpidi0+dmFsLnN0cmluZy52 YWwsIHBhdGgsIHBhdGhsZW4pKQorCQkJYnJlYWs7CisKKwkJcGZyZWUoamJ2KTsKKworCQlw dmFsdWVzW25zdWJwYXRoc10gPSBwYWxsb2Moc2l6ZW9mKCoqcHZhbHVlcykpOworCQlwdmFs dWVzW25zdWJwYXRoc10tPnN0YXRzID0gamI7CisKKwkJbnN1YnBhdGhzKys7CisKKwkJaWYg KCFpbmNsdWRlU3VicGF0aHMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIW5zdWJwYXRocykK Kwl7CisJCXBmcmVlKHB2YWx1ZXMpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdmFsdWVz ID0ganNvbkFuYWx5emVCdWlsZFBhdGhTdGF0c0FycmF5KHB2YWx1ZXMsIG5zdWJwYXRocywg Jm52YWx1ZXMsCisJCQkJCQkJCQkJCXBhdGgsIHBhdGhsZW4pOworCSpwdmFscyA9IFBvaW50 ZXJHZXREYXR1bShjb25zdHJ1Y3RfYXJyYXkodmFsdWVzLCBudmFsdWVzLCBKU09OQk9JRCwg LTEsCisJCQkJCQkJCQkJCSBmYWxzZSwgJ2knKSk7CisKKwlwZnJlZShwdmFsdWVzKTsKKwlw ZnJlZSh2YWx1ZXMpOworCisJbnVtYmVyc1swXSA9IEZsb2F0NEdldERhdHVtKG51bGxmcmFj KTsKKwkqcG51bXMgPSBQb2ludGVyR2V0RGF0dW0oY29uc3RydWN0X2FycmF5KG51bWJlcnMs IDEsIEZMT0FUNE9JRCwgNCwKKwkJCQkJCQkJCQkJIHRydWUgLypGTE9BVDRQQVNTQllWQUwq LywgJ2knKSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIGpzb25BbmFseXplSW5p dAorICoJCUluaXRpYWxpemUgdGhlIGFuYWx5emUgY29udGV4dCBzbyB0aGF0IHdlIGNhbiBz dGFydCBhZGRpbmcgcGF0aHMuCisgKi8KK3N0YXRpYyB2b2lkCitqc29uQW5hbHl6ZUluaXQo SnNvbkFuYWx5emVDb250ZXh0ICpjdHgsIFZhY0F0dHJTdGF0cyAqc3RhdHMsCisJCQkJQW5h bHl6ZUF0dHJGZXRjaEZ1bmMgZmV0Y2hmdW5jLAorCQkJCWludCBzYW1wbGVyb3dzLCBkb3Vi bGUgdG90YWxyb3dzKQoreworCUhBU0hDVEwJaGFzaF9jdGw7CisKKwltZW1zZXQoY3R4LCAw LCBzaXplb2YoKmN0eCkpOworCisJY3R4LT5zdGF0cyA9IHN0YXRzOworCWN0eC0+ZmV0Y2hm dW5jID0gZmV0Y2hmdW5jOworCWN0eC0+bWN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0Owor CWN0eC0+c2FtcGxlcm93cyA9IHNhbXBsZXJvd3M7CisJY3R4LT50b3RhbHJvd3MgPSB0b3Rh bHJvd3M7CisJY3R4LT50YXJnZXQgPSBzdGF0cy0+YXR0ci0+YXR0c3RhdHRhcmdldDsKKwlj dHgtPnNjYWxhcnNPbmx5ID0gZmFsc2U7CisKKwlNZW1TZXQoJmhhc2hfY3RsLCAwLCBzaXpl b2YoaGFzaF9jdGwpKTsKKwloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKEpzb25QYXRoRW50 cnkpOworCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihKc29uUGF0aEFubFN0YXRzKTsK KwloYXNoX2N0bC5oYXNoID0gSnNvblBhdGhIYXNoOworCWhhc2hfY3RsLm1hdGNoID0gSnNv blBhdGhNYXRjaDsKKwloYXNoX2N0bC5oY3h0ID0gY3R4LT5tY3h0OworCisJY3R4LT5wYXRo c2hhc2ggPSBoYXNoX2NyZWF0ZSgiSlNPTiBhbmFseXplIHBhdGggdGFibGUiLCAxMDAsICZo YXNoX2N0bCwKKwkJCQkJSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfQ09NUEFS RSB8IEhBU0hfQ09OVEVYVCk7CisKKwljdHgtPnJvb3QgPSBNZW1vcnlDb250ZXh0QWxsb2Na ZXJvKGN0eC0+bWN4dCwgc2l6ZW9mKEpzb25QYXRoQW5sU3RhdHMpKTsKKwljdHgtPnJvb3Qt PnBhdGhzdHIgPSAiJCI7Cit9CisKKy8qCisgKiBqc29uQW5hbHl6ZVBhc3MKKyAqCQlPbmUg YW5hbHlzaXMgcGFzcyBvdmVyIHRoZSBKU09OIGNvbHVtbi4KKyAqCisgKiBQZXJmb3JtcyBv bmUgYW5hbHlzaXMgcGFzcyBvbiB0aGUgSlNPTiBkb2N1bWVudHMsIGFuZCBwYXNzZXMgdGhl bSB0byB0aGUKKyAqIGN1c3RvbSBhbmFseXplZnVuYy4KKyAqLworc3RhdGljIHZvaWQKK2pz b25BbmFseXplUGFzcyhKc29uQW5hbHl6ZUNvbnRleHQgKmN0eCwKKwkJCQl2b2lkICgqYW5h bHl6ZWZ1bmMpKEpzb25BbmFseXplQ29udGV4dCAqLCBKc29uYiAqLCB2b2lkICopLAorCQkJ CXZvaWQgKmFuYWx5emVhcmcpCit7CisJaW50CXJvd19udW07CisKKwlNZW1vcnlDb250ZXh0 CXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJCQkJCSJKc29uIEFuYWx5emUgUGFzcyBDb250ZXh0IiwKKwkJCQkJCQkJCQkJ CUFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFV TFRfSU5JVFNJWkUsCisJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOwor CisJTWVtb3J5Q29udGV4dAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0 KTsKKworCWN0eC0+bnVsbF9jbnQgPSAwOworCWN0eC0+YW5hbHl6ZWRfY250ID0gMDsKKwlj dHgtPnRvdGFsX3dpZHRoID0gMDsKKworCS8qIExvb3Agb3ZlciB0aGUgYXJyYXlzLiAqLwor CWZvciAocm93X251bSA9IDA7IHJvd19udW0gPCBjdHgtPnNhbXBsZXJvd3M7IHJvd19udW0r KykKKwl7CisJCURhdHVtCQl2YWx1ZTsKKwkJSnNvbmIJICAgKmpiOworCQlTaXplCQl3aWR0 aDsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhY3V1bV9kZWxheV9wb2ludCgpOworCisJCXZh bHVlID0gY3R4LT5mZXRjaGZ1bmMoY3R4LT5zdGF0cywgcm93X251bSwgJmlzbnVsbCk7CisK KwkJaWYgKGlzbnVsbCkKKwkJeworCQkJLyoganNvbiBpcyBudWxsLCBqdXN0IGNvdW50IHRo YXQgKi8KKwkJCWN0eC0+bnVsbF9jbnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJd2lk dGggPSB0b2FzdF9yYXdfZGF0dW1fc2l6ZSh2YWx1ZSk7CisKKwkJY3R4LT50b3RhbF93aWR0 aCArPSBWQVJTSVpFX0FOWShEYXR1bUdldFBvaW50ZXIodmFsdWUpKTsgLyogRklYTUUgcmF3 IHdpZHRoPyAqLworCisJCS8qIFNraXAgdG9vLWxhcmdlIHZhbHVlcy4gKi8KKyNkZWZpbmUg SlNPTl9XSURUSF9USFJFU0hPTEQgKDEwMCAqIDEwMjQpCisKKwkJaWYgKHdpZHRoID4gSlNP Tl9XSURUSF9USFJFU0hPTEQpCisJCQljb250aW51ZTsKKworCQljdHgtPmFuYWx5emVkX2Nu dCsrOworCisJCWpiID0gRGF0dW1HZXRKc29uYlAodmFsdWUpOworCisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworCisJCWFuYWx5emVmdW5jKGN0eCwgamIsIGFuYWx5emVh cmcpOworCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCQlN ZW1vcnlDb250ZXh0UmVzZXQodG1wY3h0KTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3h0KTsKK30KKworLyoKKyAqIGNvbXB1dGVfanNvbl9zdGF0cygpIC0tIGNvbXB1 dGUgc3RhdGlzdGljcyBmb3IgYSBqc29uIGNvbHVtbgorICovCitzdGF0aWMgdm9pZAorY29t cHV0ZV9qc29uX3N0YXRzKFZhY0F0dHJTdGF0cyAqc3RhdHMsIEFuYWx5emVBdHRyRmV0Y2hG dW5jIGZldGNoZnVuYywKKwkJCQkgICBpbnQgc2FtcGxlcm93cywgZG91YmxlIHRvdGFscm93 cykKK3sKKwlKc29uQW5hbHl6ZUNvbnRleHQJY3R4OworCisJanNvbkFuYWx5emVJbml0KCZj dHgsIHN0YXRzLCBmZXRjaGZ1bmMsIHNhbXBsZXJvd3MsIHRvdGFscm93cyk7CisKKwkvKiBY WFggTm90IHN1cmUgd2hhdCB0aGUgZmlyc3QgYnJhbmNoIGlzIGRvaW5nIChvciBzdXBwb3Nl ZCB0byk/ICovCisJaWYgKGZhbHNlKQorCXsKKwkJanNvbkFuYWx5emVQYXNzKCZjdHgsIGpz b25BbmFseXplSnNvbiwgTlVMTCk7CisJCWpzb25BbmFseXplUGF0aHMoJmN0eCk7CisJfQor CWVsc2UKKwl7CisJCWludAkJCQlpOworCQlNZW1vcnlDb250ZXh0CW9sZGN4dDsKKwkJTWVt b3J5Q29udGV4dAl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCQkJCQkJIkpzb24gQW5hbHl6ZSBUbXAgQ29udGV4dCIsCisJ CQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkJCQkJCUFM TE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVM VF9NQVhTSVpFKTsKKworCQllbG9nKERFQlVHMSwgImFuYWx5emluZyAlcyBhdHRyaWJ1dGUg XCIlc1wiIiwKKwkJCXN0YXRzLT5hdHRydHlwaWQgPT0gSlNPTkJPSUQgPyAianNvbmIiIDog Impzb24iLAorCQkJTmFtZVN0cihzdGF0cy0+YXR0ci0+YXR0bmFtZSkpOworCisJCWVsb2co REVCVUcxLCAiY29sbGVjdGluZyBqc29uIHBhdGhzIik7CisKKwkJb2xkY3h0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkJLyoKKwkJICogWFhYIEl0J3Mgbm90IGlt bWVkaWF0ZWx5IGNsZWFyIHdoeSB0aGlzIGlzICgtMSkgYW5kIG5vdCBzaW1wbHkKKwkJICog TlVMTC4gSXQgY3Jhc2hlcywgc28gcHJlc3VtYWJseSBpdCdzIHVzZWQgdG8gdHdlYWsgdGhl IGJlaGF2aW9yLAorCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2h5L2hvdywgYW5kIGl0IGFm ZmVjdHMgcGxhY2UgdGhhdCBpcyBwcmV0dHkKKwkJICogZmFyIGF3YXksIGFuZCBzbyBub3Qg b2J2aW91cy4gV2Ugc2hvdWxkIHVzZSBzb21lIHNvcnQgb2YgZmxhZworCQkgKiB3aXRoIGEg ZGVzY3JpcHRpdmUgbmFtZSBpbnN0ZWFkLgorCQkgKgorCQkgKiBYWFggSWYgSSB1bmRlcnN0 YW5kIGNvcnJlY3RseSwgd2Ugc2ltcGx5IGNvbGxlY3QgYWxsIHBhdGhzIGZpcnN0LAorCQkg KiB3aXRob3V0IGFjY3VtdWxhdGluZyBhbnkgVmFsdWVzLiBBbmQgdGhlbiBpbiB0aGUgbmV4 dCBzdGVwIHdlCisJCSAqIHByb2Nlc3MgZWFjaCBwYXRoIGluZGVwZW5kZW50bHksIHByb2Jh Ymx5IHRvIHNhdmUgbWVtb3J5ICh3ZQorCQkgKiBkb24ndCB3YW50IHRvIGFjY3VtdWxhdGUg YWxsIHZhbHVlcyBmb3IgYWxsIHBhdGhzLCB3aXRoIGEgbG90CisJCSAqIG9mIGR1cGxpY2l0 aWVzKS4KKwkJICovCisJCWpzb25BbmFseXplUGFzcygmY3R4LCBqc29uQW5hbHl6ZUpzb24s ICh2b2lkICopIC0xKTsKKwkJanNvbkFuYWx5emVTb3J0UGF0aHMoJmN0eCk7CisKKwkJTWVt b3J5Q29udGV4dFJlc2V0KHRtcGN4dCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGN0eC5ucGF0 aHM7IGkrKykKKwkJeworCQkJSnNvblBhdGhBbmxTdGF0cyAqcGF0aCA9IGN0eC5wYXRoc1tp XTsKKworCQkJZWxvZyhERUJVRzEsICJhbmFseXppbmcganNvbiBwYXRoICglZC8lZCkgJXMi LAorCQkJCSBpICsgMSwgY3R4Lm5wYXRocywgcGF0aC0+cGF0aHN0cik7CisKKwkJCWpzb25B bmFseXplUGFzcygmY3R4LCBqc29uQW5hbHl6ZUpzb25QYXRoLCBwYXRoKTsKKwkJCWpzb25B bmFseXplUGF0aCgmY3R4LCBwYXRoKTsKKworCQkJTWVtb3J5Q29udGV4dFJlc2V0KHRtcGN4 dCk7CisJCX0KKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCQlNZW1v cnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisJfQorCisJLyogV2UgY2FuIG9ubHkgY29tcHV0 ZSByZWFsIHN0YXRzIGlmIHdlIGZvdW5kIHNvbWUgbm9uLW51bGwgdmFsdWVzLiAqLworCWlm IChjdHgubnVsbF9jbnQgPj0gc2FtcGxlcm93cykKKwl7CisJCS8qIFdlIGZvdW5kIG9ubHkg bnVsbHM7IGFzc3VtZSB0aGUgY29sdW1uIGlzIGVudGlyZWx5IG51bGwgKi8KKwkJc3RhdHMt PnN0YXRzX3ZhbGlkID0gdHJ1ZTsKKwkJc3RhdHMtPnN0YW51bGxmcmFjID0gMS4wOworCQlz dGF0cy0+c3Rhd2lkdGggPSAwOwkJLyogInVua25vd24iICovCisJCXN0YXRzLT5zdGFkaXN0 aW5jdCA9IDAuMDsJLyogInVua25vd24iICovCisJfQorCWVsc2UgaWYgKCFjdHguYW5hbHl6 ZWRfY250KQorCXsKKwkJaW50CW5vbm51bGxfY250ID0gc2FtcGxlcm93cyAtIGN0eC5udWxs X2NudDsKKworCQkvKiBXZSBmb3VuZCBzb21lIG5vbi1udWxsIHZhbHVlcywgYnV0IHRoZXkg d2VyZSBhbGwgdG9vIHdpZGUgKi8KKwkJc3RhdHMtPnN0YXRzX3ZhbGlkID0gdHJ1ZTsKKwkJ LyogRG8gdGhlIHNpbXBsZSBudWxsLWZyYWMgYW5kIHdpZHRoIHN0YXRzICovCisJCXN0YXRz LT5zdGFudWxsZnJhYyA9IChkb3VibGUpIGN0eC5udWxsX2NudCAvIChkb3VibGUpIHNhbXBs ZXJvd3M7CisJCXN0YXRzLT5zdGF3aWR0aCA9IGN0eC50b3RhbF93aWR0aCAvIChkb3VibGUp IG5vbm51bGxfY250OworCQkvKiBBc3N1bWUgYWxsIHRvby13aWRlIHZhbHVlcyBhcmUgZGlz dGluY3QsIHNvIGl0J3MgYSB1bmlxdWUgY29sdW1uICovCisJCXN0YXRzLT5zdGFkaXN0aW5j dCA9IC0xLjAgKiAoMS4wIC0gc3RhdHMtPnN0YW51bGxmcmFjKTsKKwl9CisJZWxzZQorCXsK KwkJVmFjQXR0clN0YXRzICAgKmpzc3RhdHMgPSAmY3R4LnJvb3QtPnZzdGF0cy5qc29ucy5z dGF0czsKKwkJaW50CQkJCWk7CisJCWludAkJCQllbXB0eV9zbG90ID0gLTE7CisKKwkJc3Rh dHMtPnN0YXRzX3ZhbGlkID0gdHJ1ZTsKKworCQlzdGF0cy0+c3RhbnVsbGZyYWMJPSBqc3N0 YXRzLT5zdGFudWxsZnJhYzsKKwkJc3RhdHMtPnN0YXdpZHRoCQk9IGpzc3RhdHMtPnN0YXdp ZHRoOworCQlzdGF0cy0+c3RhZGlzdGluY3QJPSBqc3N0YXRzLT5zdGFkaXN0aW5jdDsKKwor CQkvKgorCQkgKiBXZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzIHRoZSBzdGF0aXN0 aWNzIHNsb3RzLiBXZSBzaW1wbHkKKwkJICogc3RvcmUgdGhlIHJlZ3VsYXIgc3RhdHMgaW4g dGhlIGZpcnN0IHNsb3RzLCBhbmQgdGhlbiB3ZSBwdXQgdGhlCisJCSAqIEpTT04gc3RhdHMg aW50byB0aGUgZmlyc3QgZW1wdHkgc2xvdC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBT VEFUSVNUSUNfTlVNX1NMT1RTOyBpKyspCisJCXsKKwkJCS8qIG9uY2Ugd2UgaGl0IGFuIGVt cHR5IHNsb3QsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICghanNzdGF0cy0+c3Rhb3BbaV0pCisJ CQl7CisJCQkJZW1wdHlfc2xvdCA9IGk7CQkvKiByZW1lbWJlciB0aGUgZW1wdHkgc2xvdCAq LworCQkJCWJyZWFrOworCQkJfQorCisJCQlzdGF0cy0+c3Rha2luZFtpXSAJCT0ganNzdGF0 cy0+c3Rha2luZFtpXTsKKwkJCXN0YXRzLT5zdGFvcFtpXSAJCT0ganNzdGF0cy0+c3Rhb3Bb aV07CisJCQlzdGF0cy0+c3RhbnVtYmVyc1tpXSAJPSBqc3N0YXRzLT5zdGFudW1iZXJzW2ld OworCQkJc3RhdHMtPnN0YXZhbHVlc1tpXSAJPSBqc3N0YXRzLT5zdGF2YWx1ZXNbaV07CisJ CQlzdGF0cy0+c3RhdHlwaWRbaV0gCQk9IGpzc3RhdHMtPnN0YXR5cGlkW2ldOworCQkJc3Rh dHMtPnN0YXR5cGxlbltpXSAJPSBqc3N0YXRzLT5zdGF0eXBsZW5baV07CisJCQlzdGF0cy0+ c3RhdHlwYnl2YWxbaV0gCT0ganNzdGF0cy0+c3RhdHlwYnl2YWxbaV07CisJCQlzdGF0cy0+ c3RhdHlwYWxpZ25baV0gCT0ganNzdGF0cy0+c3RhdHlwYWxpZ25baV07CisJCQlzdGF0cy0+ bnVtbnVtYmVyc1tpXSAJPSBqc3N0YXRzLT5udW1udW1iZXJzW2ldOworCQkJc3RhdHMtPm51 bXZhbHVlc1tpXSAJPSBqc3N0YXRzLT5udW12YWx1ZXNbaV07CisJCX0KKworCQlBc3NlcnQo KGVtcHR5X3Nsb3QgPj0gMCkgJiYgKGVtcHR5X3Nsb3QgPCBTVEFUSVNUSUNfTlVNX1NMT1RT KSk7CisKKwkJc3RhdHMtPnN0YWtpbmRbZW1wdHlfc2xvdF0gPSBTVEFUSVNUSUNfS0lORF9K U09OOworCQlzdGF0cy0+c3Rhb3BbZW1wdHlfc2xvdF0gPSBJbnZhbGlkT2lkOworCQlzdGF0 cy0+bnVtbnVtYmVyc1tlbXB0eV9zbG90XSA9IDE7CisJCXN0YXRzLT5zdGFudW1iZXJzW2Vt cHR5X3Nsb3RdID0gTWVtb3J5Q29udGV4dEFsbG9jKHN0YXRzLT5hbmxfY29udGV4dCwKKwkJ CQkJCQkJCQkJCQkJICAgc2l6ZW9mKGZsb2F0NCkpOworCQlzdGF0cy0+c3RhbnVtYmVyc1tl bXB0eV9zbG90XVswXSA9IDAuMDsgLyogbnVsbGZyYWMgKi8KKwkJc3RhdHMtPnN0YXZhbHVl c1tlbXB0eV9zbG90XSA9CisJCQkJanNvbkFuYWx5emVNYWtlU3RhdHMoJmN0eCwgJnN0YXRz LT5udW12YWx1ZXNbZW1wdHlfc2xvdF0pOworCisJCS8qIFdlIGFyZSBzdG9yaW5nIGpzb25i IHZhbHVlcyAqLworCQkvKiBYWFggQ291bGQgdGhlIHBhcmFtZXRlcnMgYmUgZGlmZmVyZW50 IG9uIG90aGVyIHBsYXRmb3Jtcz8gKi8KKwkJc3RhdHMtPnN0YXR5cGlkW2VtcHR5X3Nsb3Rd ID0gSlNPTkJPSUQ7CisJCXN0YXRzLT5zdGF0eXBsZW5bZW1wdHlfc2xvdF0gPSAtMTsKKwkJ c3RhdHMtPnN0YXR5cGJ5dmFsW2VtcHR5X3Nsb3RdID0gZmFsc2U7CisJCXN0YXRzLT5zdGF0 eXBhbGlnbltlbXB0eV9zbG90XSA9ICdpJzsKKwl9Cit9CisKKy8qCisgKiBqc29uX3R5cGFu YWx5emUgLS0gdHlwYW5hbHl6ZSBmdW5jdGlvbiBmb3IganNvbmIKKyAqLworRGF0dW0KK2pz b25iX3R5cGFuYWx5emUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlWYWNBdHRyU3RhdHMgKnN0 YXRzID0gKFZhY0F0dHJTdGF0cyAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHRyID0gc3RhdHMtPmF0dHI7CisKKwkvKiBJZiB0aGUgYXR0c3RhdHRh cmdldCBjb2x1bW4gaXMgbmVnYXRpdmUsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAqLworCS8q IE5COiBpdCBpcyBva2F5IHRvIHNjcmliYmxlIG9uIHN0YXRzLT5hdHRyIHNpbmNlIGl0J3Mg YSBjb3B5ICovCisJaWYgKGF0dHItPmF0dHN0YXR0YXJnZXQgPCAwKQorCQlhdHRyLT5hdHRz dGF0dGFyZ2V0ID0gZGVmYXVsdF9zdGF0aXN0aWNzX3RhcmdldDsKKworCXN0YXRzLT5jb21w dXRlX3N0YXRzID0gY29tcHV0ZV9qc29uX3N0YXRzOworCS8qIHNlZSBjb21tZW50IGFib3V0 IHRoZSBjaG9pY2Ugb2YgbWlucm93cyBpbiBjb21tYW5kcy9hbmFseXplLmMgKi8KKwlzdGF0 cy0+bWlucm93cyA9IDMwMCAqIGF0dHItPmF0dHN0YXR0YXJnZXQ7CisKKwlQR19SRVRVUk5f Qk9PTCh0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aF9leGVjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCmlu ZGV4IDA3OGFhZWY1MzkyLi4xNmEwODU2MWMxMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbnBhdGhfZXhlYy5jCkBAIC0xNzIzLDcgKzE3MjMsNyBAQCBleGVjdXRlTGlrZVJlZ2V4 KEpzb25QYXRoSXRlbSAqanNwLCBKc29uYlZhbHVlICpzdHIsIEpzb25iVmFsdWUgKnJhcmcs CiAJCWN4dC0+Y2ZsYWdzID0ganNwQ29udmVydFJlZ2V4RmxhZ3MoanNwLT5jb250ZW50Lmxp a2VfcmVnZXguZmxhZ3MpOwogCX0KIAotCWlmIChSRV9jb21waWxlX2FuZF9leGVjdXRlKGN4 dC0+cmVnZXgsIHN0ci0+dmFsLnN0cmluZy52YWwsCisJaWYgKFJFX2NvbXBpbGVfYW5kX2V4 ZWN1dGUoY3h0LT5yZWdleCwgdW5jb25zdGlmeShjaGFyICosIHN0ci0+dmFsLnN0cmluZy52 YWwpLAogCQkJCQkJCSAgIHN0ci0+dmFsLnN0cmluZy5sZW4sCiAJCQkJCQkJICAgY3h0LT5j ZmxhZ3MsIERFRkFVTFRfQ09MTEFUSU9OX09JRCwgMCwgTlVMTCkpCiAJCXJldHVybiBqcGJU cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5kYXQg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9yLmRhdAppbmRleCBjMGZmOGRhNzIy Yy4uNzM2ZjRhN2VjM2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3Bl cmF0b3IuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CkBA IC0zMTc1LDcgKzMxNzUsNyBAQAogeyBvaWQgPT4gJzMyMTEnLCBvaWRfc3ltYm9sID0+ICdK c29uYk9iamVjdEZpZWxkT3BlcmF0b3InLAogICBkZXNjciA9PiAnZ2V0IGpzb25iIG9iamVj dCBmaWVsZCcsCiAgIG9wcm5hbWUgPT4gJy0+Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJy aWdodCA9PiAndGV4dCcsIG9wcnJlc3VsdCA9PiAnanNvbmInLAotICBvcHJjb2RlID0+ICdq c29uYl9vYmplY3RfZmllbGQnIH0sCisgIG9wcmNvZGUgPT4gJ2pzb25iX29iamVjdF9maWVs ZCcsIG9wcnN0YXQgPT4gJ2pzb25iX3N0YXRzJyB9LAogeyBvaWQgPT4gJzM0NzcnLCBvaWRf c3ltYm9sID0+ICdKc29uYk9iamVjdEZpZWxkVGV4dE9wZXJhdG9yJywKICAgZGVzY3IgPT4g J2dldCBqc29uYiBvYmplY3QgZmllbGQgYXMgdGV4dCcsCiAgIG9wcm5hbWUgPT4gJy0+Pics IG9wcmxlZnQgPT4gJ2pzb25iJywgb3BycmlnaHQgPT4gJ3RleHQnLCBvcHJyZXN1bHQgPT4g J3RleHQnLApAQCAtMzE4Myw3ICszMTgzLDcgQEAKIHsgb2lkID0+ICczMjEyJywgb2lkX3N5 bWJvbCA9PiAnSnNvbmJBcnJheUVsZW1lbnRPcGVyYXRvcicsCiAgIGRlc2NyID0+ICdnZXQg anNvbmIgYXJyYXkgZWxlbWVudCcsCiAgIG9wcm5hbWUgPT4gJy0+Jywgb3BybGVmdCA9PiAn anNvbmInLCBvcHJyaWdodCA9PiAnaW50NCcsIG9wcnJlc3VsdCA9PiAnanNvbmInLAotICBv cHJjb2RlID0+ICdqc29uYl9hcnJheV9lbGVtZW50JyB9LAorICBvcHJjb2RlID0+ICdqc29u Yl9hcnJheV9lbGVtZW50Jywgb3Byc3RhdCA9PiAnanNvbmJfc3RhdHMnIH0sCiB7IG9pZCA9 PiAnMzQ4MScsIG9pZF9zeW1ib2wgPT4gJ0pzb25iQXJyYXlFbGVtZW50VGV4dE9wZXJhdG9y JywKICAgZGVzY3IgPT4gJ2dldCBqc29uYiBhcnJheSBlbGVtZW50IGFzIHRleHQnLAogICBv cHJuYW1lID0+ICctPj4nLCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJpZ2h0ID0+ICdpbnQ0 Jywgb3BycmVzdWx0ID0+ICd0ZXh0JywKQEAgLTMxOTEsNyArMzE5MSw4IEBACiB7IG9pZCA9 PiAnMzIxMycsIG9pZF9zeW1ib2wgPT4gJ0pzb25iRXh0cmFjdFBhdGhPcGVyYXRvcicsCiAg IGRlc2NyID0+ICdnZXQgdmFsdWUgZnJvbSBqc29uYiB3aXRoIHBhdGggZWxlbWVudHMnLAog ICBvcHJuYW1lID0+ICcjPicsIG9wcmxlZnQgPT4gJ2pzb25iJywgb3BycmlnaHQgPT4gJ190 ZXh0JywKLSAgb3BycmVzdWx0ID0+ICdqc29uYicsIG9wcmNvZGUgPT4gJ2pzb25iX2V4dHJh Y3RfcGF0aCcgfSwKKyAgb3BycmVzdWx0ID0+ICdqc29uYicsIG9wcmNvZGUgPT4gJ2pzb25i X2V4dHJhY3RfcGF0aCcsCisgIG9wcnN0YXQgPT4gJ2pzb25iX3N0YXRzJyB9LAogeyBvaWQg PT4gJzMyMDYnLCBvaWRfc3ltYm9sID0+ICdKc29uYkV4dHJhY3RQYXRoVGV4dE9wZXJhdG9y JywKICAgZGVzY3IgPT4gJ2dldCB2YWx1ZSBmcm9tIGpzb25iIGFzIHRleHQgd2l0aCBwYXRo IGVsZW1lbnRzJywKICAgb3BybmFtZSA9PiAnIz4+Jywgb3BybGVmdCA9PiAnanNvbmInLCBv cHJyaWdodCA9PiAnX3RleHQnLApAQCAtMzIzMiwyMCArMzIzMywyMCBAQAogICBvcHJyZXN0 ID0+ICdtYXRjaGluZ3NlbCcsIG9wcmpvaW4gPT4gJ21hdGNoaW5nam9pbnNlbCcgfSwKIHsg b2lkID0+ICczMjQ3Jywgb2lkX3N5bWJvbCA9PiAnSnNvbmJFeGlzdHNPcGVyYXRvcicsIGRl c2NyID0+ICdrZXkgZXhpc3RzJywKICAgb3BybmFtZSA9PiAnPycsIG9wcmxlZnQgPT4gJ2pz b25iJywgb3BycmlnaHQgPT4gJ3RleHQnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLAotICBvcHJj b2RlID0+ICdqc29uYl9leGlzdHMnLCBvcHJyZXN0ID0+ICdtYXRjaGluZ3NlbCcsCisgIG9w cmNvZGUgPT4gJ2pzb25iX2V4aXN0cycsIG9wcnJlc3QgPT4gJ2pzb25iX3NlbCcsCiAgIG9w cmpvaW4gPT4gJ21hdGNoaW5nam9pbnNlbCcgfSwKIHsgb2lkID0+ICczMjQ4Jywgb2lkX3N5 bWJvbCA9PiAnSnNvbmJFeGlzdHNBbnlPcGVyYXRvcicsIGRlc2NyID0+ICdhbnkga2V5IGV4 aXN0cycsCiAgIG9wcm5hbWUgPT4gJz98Jywgb3BybGVmdCA9PiAnanNvbmInLCBvcHJyaWdo dCA9PiAnX3RleHQnLCBvcHJyZXN1bHQgPT4gJ2Jvb2wnLAotICBvcHJjb2RlID0+ICdqc29u Yl9leGlzdHNfYW55Jywgb3BycmVzdCA9PiAnbWF0Y2hpbmdzZWwnLAorICBvcHJjb2RlID0+ ICdqc29uYl9leGlzdHNfYW55Jywgb3BycmVzdCA9PiAnanNvbmJfc2VsJywKICAgb3Byam9p biA9PiAnbWF0Y2hpbmdqb2luc2VsJyB9LAogeyBvaWQgPT4gJzMyNDknLCBvaWRfc3ltYm9s ID0+ICdKc29uYkV4aXN0c0FsbE9wZXJhdG9yJywgZGVzY3IgPT4gJ2FsbCBrZXlzIGV4aXN0 JywKICAgb3BybmFtZSA9PiAnPyYnLCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJpZ2h0ID0+ ICdfdGV4dCcsIG9wcnJlc3VsdCA9PiAnYm9vbCcsCi0gIG9wcmNvZGUgPT4gJ2pzb25iX2V4 aXN0c19hbGwnLCBvcHJyZXN0ID0+ICdtYXRjaGluZ3NlbCcsCisgIG9wcmNvZGUgPT4gJ2pz b25iX2V4aXN0c19hbGwnLCBvcHJyZXN0ID0+ICdqc29uYl9zZWwnLAogICBvcHJqb2luID0+ ICdtYXRjaGluZ2pvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzI1MCcsIG9pZF9zeW1ib2wgPT4g J0pzb25iQ29udGFpbmVkT3BlcmF0b3InLCBkZXNjciA9PiAnaXMgY29udGFpbmVkIGJ5JywK ICAgb3BybmFtZSA9PiAnPEAnLCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJpZ2h0ID0+ICdq c29uYicsIG9wcnJlc3VsdCA9PiAnYm9vbCcsCiAgIG9wcmNvbSA9PiAnQD4oanNvbmIsanNv bmIpJywgb3ByY29kZSA9PiAnanNvbmJfY29udGFpbmVkJywKLSAgb3BycmVzdCA9PiAnbWF0 Y2hpbmdzZWwnLCBvcHJqb2luID0+ICdtYXRjaGluZ2pvaW5zZWwnIH0sCisgIG9wcnJlc3Qg PT4gJ2pzb25iX3NlbCcsIG9wcmpvaW4gPT4gJ21hdGNoaW5nam9pbnNlbCcgfSwKIHsgb2lk ID0+ICczMjg0JywgZGVzY3IgPT4gJ2NvbmNhdGVuYXRlJywKICAgb3BybmFtZSA9PiAnfHwn LCBvcHJsZWZ0ID0+ICdqc29uYicsIG9wcnJpZ2h0ID0+ICdqc29uYicsCiAgIG9wcnJlc3Vs dCA9PiAnanNvbmInLCBvcHJjb2RlID0+ICdqc29uYl9jb25jYXQnIH0sCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAppbmRleCA0ZDk5MmRjMjI0MS4uNzNiYTJkMDg2OTAgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE3MTUsNCArMTE3MTUsMTUgQEAKICAgcHJvcmV0 dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlf c3VtbWFyeScsCiAgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5k JyB9LAogCisjIGpzb25iIHN0YXRpc3RpY3MKK3sgb2lkID0+ICc4NTI2JywgZGVzY3IgPT4g J2pzb25iIHR5cGFuYWx5emUnLAorICBwcm9uYW1lID0+ICdqc29uYl90eXBhbmFseXplJywg cHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlw ZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29uYl90eXBhbmFseXplJyB9LAoreyBv aWQgPT4gJzg1MjcnLCBkZXNjciA9PiAnanNvbmIgc2VsZWN0aXZpdHkgZXN0aW1hdGlvbics CisgIHByb25hbWUgPT4gJ2pzb25iX3NlbCcsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0 dHlwZSA9PiAnZmxvYXQ4JywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIG9pZCBpbnRl cm5hbCBpbnQ0JywgcHJvc3JjID0+ICdqc29uYl9zZWwnIH0sCit7IG9pZCA9PiAnODUyOCcs IGRlc2NyID0+ICdqc29uYiBzdGF0c2lzdGljcyBlc3RpbWF0aW9uJywKKyAgcHJvbmFtZSA9 PiAnanNvbmJfc3RhdHMnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2Jv b2wnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgaW50ZXJuYWwgaW50NCBpbnRlcm5h bCcsIHByb3NyYyA9PiAnanNvbmJfc3RhdHMnIH0sCisKIF0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfc3RhdGlzdGljLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3N0YXRpc3RpYy5oCmluZGV4IDRmOTVkN2FkZTQ3Li44NWU2ZjllMGZiNiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdGF0aXN0aWMuaAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3N0YXRpc3RpYy5oCkBAIC0yNzcsNiArMjc3LDggQEAgREVDTEFSRV9G T1JFSUdOX0tFWSgoc3RhcmVsaWQsIHN0YWF0dG51bSksIHBnX2F0dHJpYnV0ZSwgKGF0dHJl bGlkLCBhdHRudW0pKTsKICAqLwogI2RlZmluZSBTVEFUSVNUSUNfS0lORF9CT1VORFNfSElT VE9HUkFNICA3CiAKKyNkZWZpbmUgU1RBVElTVElDX0tJTkRfSlNPTiA4CisKICNlbmRpZgkJ CQkJCQkvKiBFWFBPU0VfVE9fQ0xJRU5UX0NPREUgKi8KIAogI2VuZGlmCQkJCQkJCS8qIFBH X1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3R5 cGUuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmRhdAppbmRleCBmM2Q5NGYz Y2Y1ZC4uMWY4ODFlZWY1MTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf dHlwZS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmRhdApAQCAtNDQ1 LDcgKzQ0NSw3IEBACiAgIHR5cG5hbWUgPT4gJ2pzb25iJywgdHlwbGVuID0+ICctMScsIHR5 cGJ5dmFsID0+ICdmJywgdHlwY2F0ZWdvcnkgPT4gJ1UnLAogICB0eXBzdWJzY3JpcHQgPT4g J2pzb25iX3N1YnNjcmlwdF9oYW5kbGVyJywgdHlwaW5wdXQgPT4gJ2pzb25iX2luJywKICAg dHlwb3V0cHV0ID0+ICdqc29uYl9vdXQnLCB0eXByZWNlaXZlID0+ICdqc29uYl9yZWN2Jywg dHlwc2VuZCA9PiAnanNvbmJfc2VuZCcsCi0gIHR5cGFsaWduID0+ICdpJywgdHlwc3RvcmFn ZSA9PiAneCcgfSwKKyAgdHlwYW5hbHl6ZSA9PiAnanNvbmJfdHlwYW5hbHl6ZScsIHR5cGFs aWduID0+ICdpJywgdHlwc3RvcmFnZSA9PiAneCcgfSwKIHsgb2lkID0+ICc0MDcyJywgYXJy YXlfdHlwZV9vaWQgPT4gJzQwNzMnLCBkZXNjciA9PiAnSlNPTiBwYXRoJywKICAgdHlwbmFt ZSA9PiAnanNvbnBhdGgnLCB0eXBsZW4gPT4gJy0xJywgdHlwYnl2YWwgPT4gJ2YnLCB0eXBj YXRlZ29yeSA9PiAnVScsCiAgIHR5cGlucHV0ID0+ICdqc29ucGF0aF9pbicsIHR5cG91dHB1 dCA9PiAnanNvbnBhdGhfb3V0JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pz b25fc2VsZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25fc2VsZnVuY3MuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzg5OTlkMTA1YmMKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uX3NlbGZ1bmNzLmgKQEAgLTAs MCArMSwxMDAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGpzb25fc2VsZnVu Y3MuaAorICoJICBKU09OIGNvc3QgZXN0aW1hdGlvbiBmdW5jdGlvbnMuCisgKgorICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICogICAgc3JjL2luY2x1ZGUv dXRpbHMvanNvbl9zZWxmdW5jcy5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KworI2lmbmRlZiBKU09OX1NFTEZVTkNTX0hfCisjZGVmaW5lIEpTT05fU0VMRlVOQ1NfSCAx CisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgImFjY2Vzcy9odHVwLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK KyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgorCit0eXBlZGVmIHN0cnVjdCBKc29uU3Rh dERhdGEKK3sKKwlBdHRTdGF0c1Nsb3QJYXR0c2xvdDsKKwlIZWFwVHVwbGUJCXN0YXRzVHVw bGU7CisJUmVsT3B0SW5mbwkgICAqcmVsOworCURhdHVtCQkgICAqdmFsdWVzOworCWludAkJ CQludmFsdWVzOworCWZsb2F0NAkJCW51bGxmcmFjOworCWNvbnN0IGNoYXIJICAgKnByZWZp eDsKKwlpbnQJCQkJcHJlZml4bGVuOworCWJvb2wJCQlhY2xfb2s7Cit9IEpzb25TdGF0RGF0 YSwgKkpzb25TdGF0czsKKwordHlwZWRlZiBlbnVtCit7CisJSnNvblBhdGhTdGF0c1ZhbHVl cywKKwlKc29uUGF0aFN0YXRzTGVuZ3RoLAorCUpzb25QYXRoU3RhdHNBcnJheUxlbmd0aCwK K30gSnNvblBhdGhTdGF0c1R5cGU7CisKK3R5cGVkZWYgc3RydWN0IEpzb25QYXRoU3RhdHNE YXRhCit7CisJRGF0dW0JCQkgICAqZGF0dW07CisJSnNvblN0YXRzCQkgICAJZGF0YTsKKwlj aGFyCQkJICAgKnBhdGg7CisJaW50CQkJCQlwYXRobGVuOworCUpzb25QYXRoU3RhdHNUeXBl CXR5cGU7Cit9IEpzb25QYXRoU3RhdHNEYXRhLCAqSnNvblBhdGhTdGF0czsKKwordHlwZWRl ZiBlbnVtIEpzb25TdGF0VHlwZQoreworCUpzb25TdGF0SnNvbmIsCisJSnNvblN0YXRKc29u YldpdGhvdXRTdWJwYXRocywKKwlKc29uU3RhdFRleHQsCisJSnNvblN0YXRTdHJpbmcsCisJ SnNvblN0YXROdW1lcmljLAorCUpzb25TdGF0RnJlcSwKK30gSnNvblN0YXRUeXBlOworCitl eHRlcm4gYm9vbCBqc29uU3RhdHNJbml0KEpzb25TdGF0cyBzdGF0cywgY29uc3QgVmFyaWFi bGVTdGF0RGF0YSAqdmFyZGF0YSk7CitleHRlcm4gdm9pZCBqc29uU3RhdHNSZWxlYXNlKEpz b25TdGF0cyBkYXRhKTsKKworZXh0ZXJuIEpzb25QYXRoU3RhdHMganNvblN0YXRzR2V0UGF0 aFN0YXRzU3RyKEpzb25TdGF0cyBzdGF0cywKKwkJCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnBh dGgsIGludCBwYXRobGVuKTsKKworZXh0ZXJuIEpzb25QYXRoU3RhdHMganNvblBhdGhTdGF0 c0dldFN1YnBhdGgoSnNvblBhdGhTdGF0cyBzdGF0cywKKwkJCQkJCQkJCQljb25zdCBjaGFy ICpzdWJwYXRoLCBpbnQgc3VicGF0aGxlbik7CisKK2V4dGVybiBib29sIGpzb25QYXRoU3Rh dHNHZXROZXh0S2V5U3RhdHMoSnNvblBhdGhTdGF0cyBzdGF0cywKKwkJCQkJCQkJCQlKc29u UGF0aFN0YXRzICprZXlzdGF0cywgYm9vbCBrZXlzT25seSk7CisKK2V4dGVybiBKc29uUGF0 aFN0YXRzIGpzb25QYXRoU3RhdHNHZXRMZW5ndGhTdGF0cyhKc29uUGF0aFN0YXRzIHBzdGF0 cyk7CisKK2V4dGVybiBmbG9hdDQganNvblBhdGhTdGF0c0dldEZyZXEoSnNvblBhdGhTdGF0 cyBwc3RhdHMsIGZsb2F0NCBkZWZhdWx0ZnJlcSk7CisKK2V4dGVybiBmbG9hdDQganNvblBh dGhTdGF0c0dldFR5cGVGcmVxKEpzb25QYXRoU3RhdHMgcHN0YXRzLAorCQkJCQkJCQkJSnNv bmJWYWx1ZVR5cGUgdHlwZSwgZmxvYXQ0IGRlZmF1bHRmcmVxKTsKKworZXh0ZXJuIGZsb2F0 NCBqc29uUGF0aFN0YXRzR2V0QXZnQXJyYXlTaXplKEpzb25QYXRoU3RhdHMgcHN0YXRzKTsK KworZXh0ZXJuIFNlbGVjdGl2aXR5IGpzb25QYXRoU3RhdHNHZXRBcnJheUluZGV4U2VsZWN0 aXZpdHkoSnNvblBhdGhTdGF0cyBwc3RhdHMsCisJCQkJCQkJCQkJCQkJCSBpbnQgaW5kZXgp OworCitleHRlcm4gU2VsZWN0aXZpdHkganNvblNlbGVjdGl2aXR5KEpzb25QYXRoU3RhdHMg c3RhdHMsIERhdHVtIHNjYWxhciwgT2lkIG9wZXIpOworCisKK2V4dGVybiBib29sIGpzb25B bmFseXplQnVpbGRTdWJQYXRoc0RhdGEoRGF0dW0gKnBhdGhzRGF0dW1zLAorCQkJCQkJCQkJ CSBpbnQgbnBhdGhzLCBpbnQgaW5kZXgsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIJKnBhdGgs IGludCBwYXRobGVuLAorCQkJCQkJCQkJCSBib29sIGluY2x1ZGVTdWJwYXRocywgZmxvYXQ0 IG51bGxmcmFjLAorCQkJCQkJCQkJCSBEYXR1bSAqcHZhbHMsIERhdHVtICpwbnVtcyk7CisK K2V4dGVybiBEYXR1bSBqc29uYl90eXBhbmFseXplKFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0 ZXJuIERhdHVtIGpzb25iX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0ZXJuIERhdHVt IGpzb25iX3NlbChQR19GVU5DVElPTl9BUkdTKTsKKworI2VuZGlmIC8qIEpTT05fU0VMRlVO Q1NfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9z dGF0cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3N0YXRzLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGJhZGY4ZTg0NzkKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3N0YXRz Lm91dApAQCAtMCwwICsxLDcxMyBAQAorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZXhw bGFpbl9qc29uYihzcWxfcXVlcnkgdGV4dCkKK1JFVFVSTlMgVEFCTEUoZXhwbGFpbl9saW5l IGpzb24pIEFTCiskJAorQkVHSU4KKwlSRVRVUk4gUVVFUlkgRVhFQ1VURSAnRVhQTEFJTiAo QU5BTFlaRSwgRk9STUFUIGpzb24pICcgfHwgc3FsX3F1ZXJ5OworRU5EOworJCQgTEFOR1VB R0UgcGxwZ3NxbDsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdldF9wbGFuX2FuZF9h Y3R1YWxfcm93cyhzcWxfcXVlcnkgdGV4dCkKK1JFVFVSTlMgVEFCTEUocGxhbiBpbnRlZ2Vy LCBhY3R1YWwgaW50ZWdlcikgQVMKKyQkCisJU0VMRUNUCisJCShwbGFuLT4+J1BsYW4gUm93 cycpOjppbnRlZ2VyIHBsYW4sCisJCShwbGFuLT4+J0FjdHVhbCBSb3dzJyk6OmludGVnZXIg YWN0dWFsCisJRlJPTSAoCisJCVNFTEVDVCBleHBsYWluX2pzb25iKHNxbF9xdWVyeSkgIz4g J3swLFBsYW4sUGxhbnMsMH0nCisJKSBwKHBsYW4pCiskJCBMQU5HVUFHRSBzcWw7CitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiBjaGVja19lc3RpbWF0ZShzcWxfcXVlcnkgdGV4dCwg YWNjdXJhY3kgcmVhbCkKK1JFVFVSTlMgYm9vbGVhbiBBUworJCQKKwlTRUxFQ1QgcGxhbiBC RVRXRUVOIGFjdHVhbCAvICgxICsgYWNjdXJhY3kpIEFORCAoYWN0dWFsICsgMSkgKiAoMSAr IGFjY3VyYWN5KQorCUZST00gKFNFTEVDVCAqIEZST00gZ2V0X3BsYW5fYW5kX2FjdHVhbF9y b3dzKHNxbF9xdWVyeSkpIHgKKyQkIExBTkdVQUdFIHNxbDsKK0NSRUFURSBPUiBSRVBMQUNF IEZVTkNUSU9OIGNoZWNrX2VzdGltYXRlMihzcWxfcXVlcnkgdGV4dCwgYWNjdXJhY3kgcmVh bCkKK1JFVFVSTlMgVEFCTEUobWluIGludGVnZXIsIG1heCBpbnRlZ2VyKSBBUworJCQKKwlT RUxFQ1QgKGFjdHVhbCAqICgxIC0gYWNjdXJhY3kpKTo6aW50ZWdlciwgKChhY3R1YWwgKyAx KSAqICgxICsgYWNjdXJhY3kpKTo6aW50ZWdlcgorCUZST00gKFNFTEVDVCAqIEZST00gZ2V0 X3BsYW5fYW5kX2FjdHVhbF9yb3dzKHNxbF9xdWVyeSkpIHgKKyQkIExBTkdVQUdFIHNxbDsK K0NSRUFURSBUQUJMRSBqc29uYl9zdGF0c190ZXN0KGpzIGpzb25iKTsKK0lOU0VSVCBJTlRP IGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNUIE5VTEwgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVDVCAnbnVsbCcgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rl c3QgU0VMRUNUICd0cnVlJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzMDApOworSU5TRVJU IElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ2ZhbHNlJyBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCA1MDApOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJzEy MzQ1JyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworSU5TRVJUIElOVE8ganNvbmJf c3RhdHNfdGVzdCBTRUxFQ1QgKDEwMDAgKiAoaSAlIDEwKSk6OnRleHQ6Ompzb25iIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDQwMCkgaTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rl c3QgU0VMRUNUIGk6OnRleHQ6Ompzb25iIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMCkg aTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNUICciZm9vIicgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3Qg U0VMRUNUIGZvcm1hdCgnImJhciVzIicsIGkgJSAxMCk6Ompzb25iIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDQwMCkgaTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNU IGZvcm1hdCgnImJheiVzIicsIGkpOjpqc29uYiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1 MDApIGk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVDVCAne30nIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0 IFNFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoJ2ZvbycsICdiYXInKSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDApOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1Qg anNvbmJfYnVpbGRfb2JqZWN0KCdmb28nLCAnYmF6JyB8fCAoaSAlIDEwKSkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMzAwKSBpOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBT RUxFQ1QganNvbmJfYnVpbGRfb2JqZWN0KCdmb28nLCBpICUgMTApIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDIwMCkgaTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNU IGpzb25iX2J1aWxkX29iamVjdCgnImZvbyBcImJhciInLCBpICUgMTApIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDIwMCkgaTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VM RUNUICdbXScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKK0lOU0VSVCBJTlRPIGpz b25iX3N0YXRzX3Rlc3QgU0VMRUNUICdbImZvbyJdJyBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAyMDApOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ1sxMjM0NV0n IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0 c190ZXN0IFNFTEVDVCAnW1siZm9vIl1dJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAp OworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ1t7ImtleSI6ICJmb28i fV0nIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9z dGF0c190ZXN0IFNFTEVDVCAnW251bGwsICJmb28iXScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMjAwKTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNUICdbbnVsbCwg MTIzNDVdJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzMDApOworSU5TRVJUIElOVE8ganNv bmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ1tudWxsLCBbImZvbyJdXScgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNUICdb bnVsbCwgeyJrZXkiOiAiZm9vIn1dJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDApOwor LS0gQnVpbGQgcmFuZG9tIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGFycmF5cworU0VMRUNU IHNldHNlZWQoMC4wKTsKKyBzZXRzZWVkIAorLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0lO U0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QKK1NFTEVDVCBqc29uYl9idWlsZF9vYmplY3Qo J2FycmF5JywKKwlqc29uYl9idWlsZF9hcnJheSgpKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMTAwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0CitTRUxFQ1QganNvbmJf YnVpbGRfb2JqZWN0KCdhcnJheScsCisJanNvbmJfYnVpbGRfYXJyYXkoCisJCWZsb29yKHJh bmRvbSgpICogMTApOjppbnQpKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDAwMCk7CitJ TlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0CitTRUxFQ1QganNvbmJfYnVpbGRfb2JqZWN0 KCdhcnJheScsCisJanNvbmJfYnVpbGRfYXJyYXkoCisJCWZsb29yKHJhbmRvbSgpICogMTAp OjppbnQsCisJCWZsb29yKHJhbmRvbSgpICogMTApOjppbnQpKQorRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMzAwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0CitTRUxFQ1Qg anNvbmJfYnVpbGRfb2JqZWN0KCdhcnJheScsCisJanNvbmJfYnVpbGRfYXJyYXkoCisJCWZs b29yKHJhbmRvbSgpICogMTApOjppbnQsCisJCWZsb29yKHJhbmRvbSgpICogMTApOjppbnQs CisJCWZsb29yKHJhbmRvbSgpICogMTApOjppbnQpKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMjAwMCk7CitBTkFMWVpFIGpzb25iX3N0YXRzX3Rlc3Q7CitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKHNxbF9jb25kaXRp b24gdGV4dCwgYWNjdXJhY3kgcmVhbCkKK1JFVFVSTlMgYm9vbGVhbiBBUworJCQKKwlTRUxF Q1QgY2hlY2tfZXN0aW1hdGUoJ1NFTEVDVCBjb3VudCgqKSBGUk9NIGpzb25iX3N0YXRzX3Rl c3QgV0hFUkUgJyB8fCBzcWxfY29uZGl0aW9uLCBhY2N1cmFjeSkKKyQkIExBTkdVQUdFIHNx bDsKK0RST1AgRlVOQ1RJT04gSUYgRVhJU1RTIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUyKHRleHQsIHJlYWwpOworTk9USUNFOiAgZnVuY3Rpb24gY2hlY2tfanNvbmJfc3Rh dHNfdGVzdF9lc3RpbWF0ZTIodGV4dCxwZ19jYXRhbG9nLmZsb2F0NCkgZG9lcyBub3QgZXhp c3QsIHNraXBwaW5nCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlMihzcWxfY29uZGl0aW9uIHRleHQsIGFjY3VyYWN5IHJlYWwp CitSRVRVUk5TIFRBQkxFKHBsYW4gaW50ZWdlciwgYWN0dWFsIGludGVnZXIpIEFTCiskJAor CVNFTEVDVCBnZXRfcGxhbl9hbmRfYWN0dWFsX3Jvd3MoJ1NFTEVDVCBjb3VudCgqKSBGUk9N IGpzb25iX3N0YXRzX3Rlc3QgV0hFUkUgJyB8fCBzcWxfY29uZGl0aW9uKQorJCQgTEFOR1VB R0Ugc3FsOworLS0gQ2hlY2sgTlVMTCBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBJUyBOVUxMJCQsIDAuMDMpOworIGNoZWNrX2pzb25i X3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgLT4gJ2JhZF9rZXknIElTIE5VTEwkJCwgMC4wMSk7CisgY2hlY2tfanNvbmJf c3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1h dGUoJCRqcyAjPiAne2JhZF9rZXl9JyBJUyBOVUxMJCQsIDAuMDEpOworIGNoZWNrX2pzb25i X3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgLT4gMTAwMDAwMCBJUyBOVUxMJCQsIDAuMDEpOworIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgIz4gJ3sxMDAwMDAwfScgSVMgTlVMTCQkLCAwLjAxKTsKKyBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0 ZSgkJGpzIC0+ICdiYWRfa2V5MScgLT4gJ2JhZF9rZXkyJyBJUyBOVUxMJCQsIDAuMDEpOwor IGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlKCQkanMgIz4gJ3tiYWRfa2V5MSxiYWRfa2V5Mn0nIElTIE5VTEwk JCwgMC4wMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNr X2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYmFkX2tleTEnIC0+IDEgSVMg TlVMTCQkLCAwLjAxKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qg Y2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzICM+ICd7YmFkX2tleTEsMX0n IElTIE5VTEwkJCwgMC4wMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAxMDAwMDAwIC0+ ICdmb28nIElTIE5VTEwkJCwgMC4wMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAjPiAnezEw MDAwMDAsZm9vfScgSVMgTlVMTCQkLCAwLjAxKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0 X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ ICdiYWRfa2V5JyA9ICcxMjMnJCQsIDAuMDEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4g MTAwMDAwMCA9ICcxMjMnJCQsIDAuMDEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cp CisKKy0tIENoZWNrIG51bGwgZXEgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlKCQkanMgPSAgJ251bGwnJCQsIDAuMSk7CisgY2hlY2tfanNvbmJf c3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1h dGUoJCRqcyBAPiAnbnVsbCckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93 KQorCistLSBDaGVjayBib29sZWFuIGVxIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJf c3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID0gICd0cnVlJyQkLCAwLjEpOworIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlKCQkanMgQD4gJ3RydWUnJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA9 ICAnZmFsc2UnJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAnZmFsc2UnJCQs IDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gQ2hlY2sgbnVtZXJp YyBlcSBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUo JCRqcyA9ICcxMjM0NSckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQor CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIz4ne30nID0g JzEyMzQ1JyQkLCAwLjEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVD VCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPSAnMzAwMCckJCwgMC4z KTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJf c3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID0gJzEyMzQnJCQsIDEpOworIGNoZWNrX2pzb25i X3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgQD4gJzYwMDAnJCQsIDAuMik7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9l c3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKworLS0gQ2hlY2sgbnVtZXJpYyByYW5nZSBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA8ICcwJyQkLCAwLjEpOworIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlKCQkanMgPCAnMTAwJyQkLCAwLjEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPCAn MTAwMCckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qg Y2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIDwgJzM0NTYnJCQsIDAuMSk7 CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA8ICcxMDAwMCckJCwgMC4xKTsKKyBjaGVja19qc29u Yl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSgkJGpzIDwgJzEwMDAwMCckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0 X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID4g JzEwMCcgQU5EIGpzIDwgJzYwMCckJCwgMC41KTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0 X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID4g JzY4MDAnIEFORCBqcyA8ICcxMjAwMCckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190 ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAor KDEgcm93KQorCistLSBDaGVjayBzdHJpbmcgZXEgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19q c29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPSAnImZvbyInJCQsIDAuMSk7CisgY2hl Y2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rl c3RfZXN0aW1hdGUoJCRqcyA9ICciYmFyNyInJCQsIDAuMik7CisgY2hlY2tfanNvbmJfc3Rh dHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUo JCRqcyA9ICciYmF6MTIzNCInJCQsIDEwKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93 KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIEA+ICci YmFyNCInJCQsIDAuMyk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gQ2hl Y2sgc3RyaW5nIHJhbmdlIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSgkJGpzID4gJyJmb28iJyQkLCAwLjAxKTsKKyBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgk JGpzID4gJyJiYXIiJyQkLCAwLjAxKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQor CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID4gJyJiYXoi JyQkLCAwLjAxKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBDaGVjayBv YmplY3QgZXEgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgPSAne30nJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA+ICd7fSck JCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBDaGVjayBvYmpl Y3Qga2V5IGVxIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSgkJGpzIC0+ICdmb28nID0gJyJiYXIiJyQkLCAwLjIpOworIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgLT4gJ2ZvbycgPSAnImJheiInJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNf dGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRq cyAtPiAnZm9vJyA9ICciYmF6NSInJCQsIDAuMyk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAj PiAne2Zvb30nID0gJyJiYXIiJyQkLCAwLjIpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKKy0tIENoZWNrIG9iamVjdCBrZXkgcmFuZ2UgZXN0aW1hdGUKK1NFTEVDVCBjaGVj a19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2ZvbycgPj0gJyJiYXoyIick JCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tf anNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdmb28nIDwgICciYmF6OSInJCQs IDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnZm9vJyA+PSAnImJhejIiJyBBTkQg anMgLT4gJ2ZvbycgPCAnImJhejkiJyQkLCAwLjEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rl c3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0Ciso MSByb3cpCisKKy0tIENoZWNrIGFycmF5IGVxIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNv bmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID0gJ1tdJyQkLCAwLjEpOworIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlKCQkanMgPj0gJ1tdJyBBTkQganMgPCAne30nJCQsIDAuMSk7CisgY2hlY2tfanNv bmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworLS0gQ2hlY2sgdmFyaWFibGUtbGVuZ3RoIGFycmF5IGVs ZW1lbnQgZXEgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgLT4gJ2FycmF5JyAtPiAwID0gJzEnJCQsIDAuMik7CisgY2hlY2tfanNvbmJf c3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1h dGUoJCRqcyAtPiAnYXJyYXknIC0+IDEgPSAnNickJCwgMC4yKTsKKyBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0 ZSgkJGpzIC0+ICdhcnJheScgLT4gMiA9ICc4JyQkLCAwLjIpOworIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgLT4gJ2FycmF5JyAtPiAzID0gJzEnJCQsIDAuMik7CisgY2hlY2tfanNvbmJfc3Rh dHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworLS0gQ2hlY2sgdmFyaWFibGUtbGVuZ3RoIGFycmF5IGVsZW1lbnQg cmFuZ2UgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgLT4gJ2FycmF5JyAtPiAwIDwgJzcnJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3Rh dHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUo JCRqcyAtPiAnYXJyYXknIC0+IDEgPCAnNyckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgk JGpzIC0+ICdhcnJheScgLT4gMiA8ICc3JyQkLCAwLjEpOworIGNoZWNrX2pzb25iX3N0YXRz X3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQk anMgLT4gJ2FycmF5JyAtPiAzIDwgJzcnJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNf dGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworLS0gQ2hlY2sgdmFyaWFibGUtbGVuZ3RoIGFycmF5IGNvbnRhaW5tZW50 IGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpz IC0+ICdhcnJheScgQD4gJ1tdJyQkLCAwLjIpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4g J2FycmF5JyBAPiAnWzFdJyQkLCAwLjIpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cp CisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2Fy cmF5JyBAPiAnWzEwMF0nJCQsIDAuMik7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJy YXknIEA+ICdbMSwgMl0nJCQsIDEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1h dGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5 JyBAPiAnWzEsIDEwMF0nJCQsIDEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1h dGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5 JyBAPiAnWzEsIDIsIDEwMF0nJCQsIDEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cp CisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2Fy cmF5JyBAPiAnWzEsIDIsIDNdJyQkLCA1KTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93 KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdh cnJheScgQD4gJzEnJCQsIDAuMyk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0 ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwor U0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXkn IEA+ICcxMDAnJCQsIDEwKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdhcnJheScgLT4g MCBAPiAnMSckJCwgMC4zKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdhcnJheScgLT4g MSBAPiAnMSckJCwgMC4zKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdhcnJheScgLT4g MiBAPiAnMSckJCwgMC4zKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdhcnJheScgLT4g MyBAPiAnMSckJCwgMC4zKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdhcnJheScgLT4g MCBAPiAnWzFdJyQkLCAwLjMpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NF TEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ3siYXJyYXki OiBbXX0nJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNU IGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFsx XX0nJCQsIDAuMyk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNo ZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFsxMDBd fSckJCwgMC4zKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hl Y2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIEA+ICd7ImFycmF5IjogWzEsIDJd fSckJCwgMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNr X2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFsxLCAxMDBd fSckJCwgMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNr X2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFsxLCAyLCAx MDBdfSckJCwgMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNo ZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFsxLCAy LCAzXX0nJCQsIDEwMCk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gY2hl Y2sgbWlzYyBjb250YWlubWVudAorU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUoJCRqcyBAPiAnImZvbyInJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBA PiAnMTIzNDUnJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAnW10nJCQsIDAu MSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25i X3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAnWzEyMzQ1XSckJCwgMC4xKTsKKyBjaGVj a19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSgkJGpzIEA+ICdbImZvbyJdJyQkLCAwLjEpOworIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgQD4gJ1tbImZvbyIsICJiYXIiXV0nJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3Rh dHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUo JCRqcyBAPiAnW1siZm9vIl1dJyQkLCAwLjIpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4g J1t7ImtleSI6ICJmb28ifV0nJCQsIDAuMSk7CisgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9l c3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAn W251bGxdJyQkLCAwLjMpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIENo ZWNrIG9iamVjdCBrZXkgbnVsbCBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRz X3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnZm9vJyBJUyBOVUxMJCQsIDAuMSk7CisgY2hlY2tf anNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUoJCRqcyAtPiAnZm9vJyBJUyBOT1QgTlVMTCQkLCAwLjEpOworIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlKCQkanMgLT4gJyJmb28gXCJiYXIiJyBJUyBOT1QgTlVMTCQkLCAwLjEpOworIGNo ZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190 ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2JhZF9rZXknIElTIE5VTEwkJCwgMC4wMSk7CisgY2hl Y2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rl c3RfZXN0aW1hdGUoJCRqcyAtPiAnYmFkX2tleScgSVMgTk9UIE5VTEwkJCwgMC4wMSk7Cisg Y2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gQ2hlY2sgb2JqZWN0IGtleSBleGlz dGVuY2UKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPyAn YmFkX2tleSckJCwgMTApOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVD VCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPyAnZm9vJyQkLCAwLjEp OworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlKCQkanMgPyAnYXJyYXknJCQsIDAuMSk7CisgY2hlY2tfanNv bmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUoJCRqcyA/fCAne2ZvbyxiYWRfa2V5fSckJCwgMC4xKTsKKyBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0 ZSgkJGpzID98ICd7Zm9vLGFycmF5fSckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190 ZXN0X2VzdGltYXRlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAor KDEgcm93KQorCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpz ID8mICd7Zm9vLGJhZF9rZXl9JyQkLCAwLjEpOworIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPyYg J3tmb28sYmFyfSckJCwgMC4xKTsKKyBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IGI1OGIwNjJiMTBkLi5mZmJj ZTg3Mjk2ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTI1MzUs NiArMjUzNSwzOCBAQCBwZ19zdGF0c19leHRfZXhwcnN8IFNFTEVDVCBjbi5uc3BuYW1lIEFT IHNjaGVtYW5hbWUsCiAgICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2Ugc24gT04gKChzbi5v aWQgPSBzLnN0eG5hbWVzcGFjZSkpKQogICAgICBKT0lOIExBVEVSQUwgKCBTRUxFQ1QgdW5u ZXN0KHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2V4cHJlc3Npb25zKHMub2lkKSkgQVMgZXhw ciwKICAgICAgICAgICAgIHVubmVzdChzZC5zdHhkZXhwcikgQVMgYSkgc3RhdCBPTiAoKHN0 YXQuZXhwciBJUyBOT1QgTlVMTCkpKTsKK3BnX3N0YXRzX2pzb258IFNFTEVDVCBuLm5zcG5h bWUgQVMgc2NoZW1hbmFtZSwKKyAgICBjLnJlbG5hbWUgQVMgdGFibGVuYW1lLAorICAgIGEu YXR0bmFtZSwKKyAgICAocGF0aHMucGF0aCAtPj4gJ3BhdGgnOjp0ZXh0KSBBUyBqc29uX3Bh dGgsCisgICAgcy5zdGFpbmhlcml0IEFTIGluaGVyaXRlZCwKKyAgICAoKChwYXRocy5wYXRo IC0+ICdqc29uJzo6dGV4dCkgLT4+ICdudWxsZnJhYyc6OnRleHQpKTo6cmVhbCBBUyBudWxs X2ZyYWMsCisgICAgKCgocGF0aHMucGF0aCAtPiAnanNvbic6OnRleHQpIC0+PiAnd2lkdGgn Ojp0ZXh0KSk6OnJlYWwgQVMgYXZnX3dpZHRoLAorICAgICgoKHBhdGhzLnBhdGggLT4gJ2pz b24nOjp0ZXh0KSAtPj4gJ2Rpc3RpbmN0Jzo6dGV4dCkpOjpyZWFsIEFTIG5fZGlzdGluY3Qs CisgICAgQVJSQVkoIFNFTEVDVCB2YWwudmFsdWUgQVMgdmFsCisgICAgICAgICAgIEZST00g anNvbmJfYXJyYXlfZWxlbWVudHMoKCgocGF0aHMucGF0aCAtPiAnanNvbic6OnRleHQpIC0+ ICdtY3YnOjp0ZXh0KSAtPiAndmFsdWVzJzo6dGV4dCkpIHZhbCh2YWx1ZSkpIEFTIG1vc3Rf Y29tbW9uX3ZhbHMsCisgICAgQVJSQVkoIFNFTEVDVCAoKG51bS52YWx1ZSk6OnRleHQpOjpy ZWFsIEFTIG51bQorICAgICAgICAgICBGUk9NIGpzb25iX2FycmF5X2VsZW1lbnRzKCgoKHBh dGhzLnBhdGggLT4gJ2pzb24nOjp0ZXh0KSAtPiAnbWN2Jzo6dGV4dCkgLT4gJ251bWJlcnMn Ojp0ZXh0KSkgbnVtKHZhbHVlKSkgQVMgbW9zdF9jb21tb25fZnJlcXMsCisgICAgQVJSQVko IFNFTEVDVCB2YWwudmFsdWUgQVMgdmFsCisgICAgICAgICAgIEZST00ganNvbmJfYXJyYXlf ZWxlbWVudHMoKCgocGF0aHMucGF0aCAtPiAnanNvbic6OnRleHQpIC0+ICdoaXN0b2dyYW0n Ojp0ZXh0KSAtPiAndmFsdWVzJzo6dGV4dCkpIHZhbCh2YWx1ZSkpIEFTIGhpc3RvZ3JhbV9i b3VuZHMsCisgICAgQVJSQVkoIFNFTEVDVCAoKHZhbC52YWx1ZSk6OnRleHQpOjppbnRlZ2Vy IEFTIHZhbAorICAgICAgICAgICBGUk9NIGpzb25iX2FycmF5X2VsZW1lbnRzKCgoKHBhdGhz LnBhdGggLT4gJ2FycmF5X2xlbmd0aCc6OnRleHQpIC0+ICdtY3YnOjp0ZXh0KSAtPiAndmFs dWVzJzo6dGV4dCkpIHZhbCh2YWx1ZSkpIEFTIG1vc3RfY29tbW9uX2FycmF5X2xlbmd0aHMs CisgICAgQVJSQVkoIFNFTEVDVCAoKG51bS52YWx1ZSk6OnRleHQpOjpyZWFsIEFTIG51bQor ICAgICAgICAgICBGUk9NIGpzb25iX2FycmF5X2VsZW1lbnRzKCgoKHBhdGhzLnBhdGggLT4g J2FycmF5X2xlbmd0aCc6OnRleHQpIC0+ICdtY3YnOjp0ZXh0KSAtPiAnbnVtYmVycyc6OnRl eHQpKSBudW0odmFsdWUpKSBBUyBtb3N0X2NvbW1vbl9hcnJheV9sZW5ndGhfZnJlcXMsCisg ICAgKCgocGF0aHMucGF0aCAtPiAnanNvbic6OnRleHQpIC0+PiAnY29ycmVsYXRpb24nOjp0 ZXh0KSk6OnJlYWwgQVMgY29ycmVsYXRpb24KKyAgIEZST00gKCgocGdfc3RhdGlzdGljIHMK KyAgICAgSk9JTiBwZ19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCisgICAg IEpPSU4gcGdfYXR0cmlidXRlIGEgT04gKCgoYy5vaWQgPSBhLmF0dHJlbGlkKSBBTkQgKGEu YXR0bnVtID0gcy5zdGFhdHRudW0pKSkpCisgICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2Ug biBPTiAoKG4ub2lkID0gYy5yZWxuYW1lc3BhY2UpKSksCisgICAgTEFURVJBTCAoIFNFTEVD VCB1bm5lc3QoKCgoCisgICAgICAgICAgICAgICAgQ0FTRQorICAgICAgICAgICAgICAgICAg ICBXSEVOIChzLnN0YWtpbmQxID0gOCkgVEhFTiBzLnN0YXZhbHVlczEKKyAgICAgICAgICAg ICAgICAgICAgV0hFTiAocy5zdGFraW5kMiA9IDgpIFRIRU4gcy5zdGF2YWx1ZXMyCisgICAg ICAgICAgICAgICAgICAgIFdIRU4gKHMuc3Rha2luZDMgPSA4KSBUSEVOIHMuc3RhdmFsdWVz MworICAgICAgICAgICAgICAgICAgICBXSEVOIChzLnN0YWtpbmQ0ID0gOCkgVEhFTiBzLnN0 YXZhbHVlczQKKyAgICAgICAgICAgICAgICAgICAgV0hFTiAocy5zdGFraW5kNSA9IDgpIFRI RU4gcy5zdGF2YWx1ZXM1CisgICAgICAgICAgICAgICAgICAgIEVMU0UgTlVMTDo6YW55YXJy YXkKKyAgICAgICAgICAgICAgICBFTkQpOjp0ZXh0KTo6anNvbmJbXSlbMjpdKSBBUyBwYXRo KSBwYXRoczsKIHBnX3RhYmxlc3wgU0VMRUNUIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAog ICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUsCiAgICAgcGdfZ2V0X3VzZXJieWlkKGMucmVs b3duZXIpIEFTIHRhYmxlb3duZXIsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpp bmRleCA1YjBjNzNkN2UzNy4uZDEwOGNjNjIxMDcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQpAQCAtMTEyLDcgKzExMiw3IEBAIHRlc3Q6IHNlbGVjdF92aWV3cyBwb3J0 YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5jeSBndWMgYml0bWFwb3BzIGNv bWJvCiAjIC0tLS0tLS0tLS0KICMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cyAo SlNPTiByZWxhdGVkKQogIyAtLS0tLS0tLS0tCi10ZXN0OiBqc29uIGpzb25iIGpzb25fZW5j b2RpbmcganNvbnBhdGgganNvbnBhdGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGgKK3Rlc3Q6 IGpzb24ganNvbmIganNvbl9lbmNvZGluZyBqc29ucGF0aCBqc29ucGF0aF9lbmNvZGluZyBq c29uYl9qc29ucGF0aCBqc29uYl9zdGF0cwogCiAjIC0tLS0tLS0tLS0KICMgQW5vdGhlciBn cm91cCBvZiBwYXJhbGxlbCB0ZXN0cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvanNvbmJfc3RhdHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3RhdHMu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zN2M4M2FhOGUz MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3N0YXRz LnNxbApAQCAtMCwwICsxLDI0OSBAQAorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZXhw bGFpbl9qc29uYihzcWxfcXVlcnkgdGV4dCkKK1JFVFVSTlMgVEFCTEUoZXhwbGFpbl9saW5l IGpzb24pIEFTCiskJAorQkVHSU4KKwlSRVRVUk4gUVVFUlkgRVhFQ1VURSAnRVhQTEFJTiAo QU5BTFlaRSwgRk9STUFUIGpzb24pICcgfHwgc3FsX3F1ZXJ5OworRU5EOworJCQgTEFOR1VB R0UgcGxwZ3NxbDsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3BsYW5fYW5k X2FjdHVhbF9yb3dzKHNxbF9xdWVyeSB0ZXh0KQorUkVUVVJOUyBUQUJMRShwbGFuIGludGVn ZXIsIGFjdHVhbCBpbnRlZ2VyKSBBUworJCQKKwlTRUxFQ1QKKwkJKHBsYW4tPj4nUGxhbiBS b3dzJyk6OmludGVnZXIgcGxhbiwKKwkJKHBsYW4tPj4nQWN0dWFsIFJvd3MnKTo6aW50ZWdl ciBhY3R1YWwKKwlGUk9NICgKKwkJU0VMRUNUIGV4cGxhaW5fanNvbmIoc3FsX3F1ZXJ5KSAj PiAnezAsUGxhbixQbGFucywwfScKKwkpIHAocGxhbikKKyQkIExBTkdVQUdFIHNxbDsKKwor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gY2hlY2tfZXN0aW1hdGUoc3FsX3F1ZXJ5IHRl eHQsIGFjY3VyYWN5IHJlYWwpCitSRVRVUk5TIGJvb2xlYW4gQVMKKyQkCisJU0VMRUNUIHBs YW4gQkVUV0VFTiBhY3R1YWwgLyAoMSArIGFjY3VyYWN5KSBBTkQgKGFjdHVhbCArIDEpICog KDEgKyBhY2N1cmFjeSkKKwlGUk9NIChTRUxFQ1QgKiBGUk9NIGdldF9wbGFuX2FuZF9hY3R1 YWxfcm93cyhzcWxfcXVlcnkpKSB4CiskJCBMQU5HVUFHRSBzcWw7CisKK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OIGNoZWNrX2VzdGltYXRlMihzcWxfcXVlcnkgdGV4dCwgYWNjdXJh Y3kgcmVhbCkKK1JFVFVSTlMgVEFCTEUobWluIGludGVnZXIsIG1heCBpbnRlZ2VyKSBBUwor JCQKKwlTRUxFQ1QgKGFjdHVhbCAqICgxIC0gYWNjdXJhY3kpKTo6aW50ZWdlciwgKChhY3R1 YWwgKyAxKSAqICgxICsgYWNjdXJhY3kpKTo6aW50ZWdlcgorCUZST00gKFNFTEVDVCAqIEZS T00gZ2V0X3BsYW5fYW5kX2FjdHVhbF9yb3dzKHNxbF9xdWVyeSkpIHgKKyQkIExBTkdVQUdF IHNxbDsKKworQ1JFQVRFIFRBQkxFIGpzb25iX3N0YXRzX3Rlc3QoanMganNvbmIpOworCitJ TlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVDVCBOVUxMIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDApOworCitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVD VCAnbnVsbCcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGpz b25iX3N0YXRzX3Rlc3QgU0VMRUNUICd0cnVlJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAz MDApOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ2ZhbHNlJyBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCA1MDApOworCitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190 ZXN0IFNFTEVDVCAnMTIzNDUnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitJTlNF UlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVDVCAoMTAwMCAqIChpICUgMTApKTo6dGV4 dDo6anNvbmIgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDAwKSBpOworSU5TRVJUIElOVE8g anNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgaTo6dGV4dDo6anNvbmIgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgNTAwKSBpOworCitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVD VCAnImZvbyInIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitJTlNFUlQgSU5UTyBq c29uYl9zdGF0c190ZXN0IFNFTEVDVCBmb3JtYXQoJyJiYXIlcyInLCBpICUgMTApOjpqc29u YiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDApIGk7CitJTlNFUlQgSU5UTyBqc29uYl9z dGF0c190ZXN0IFNFTEVDVCBmb3JtYXQoJyJiYXolcyInLCBpKTo6anNvbmIgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgNTAwKSBpOworCitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0 IFNFTEVDVCAne30nIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitJTlNFUlQgSU5U TyBqc29uYl9zdGF0c190ZXN0IFNFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoJ2ZvbycsICdi YXInKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworSU5TRVJUIElOVE8ganNvbmJf c3RhdHNfdGVzdCBTRUxFQ1QganNvbmJfYnVpbGRfb2JqZWN0KCdmb28nLCAnYmF6JyB8fCAo aSAlIDEwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwKSBpOworSU5TRVJUIElOVE8g anNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QganNvbmJfYnVpbGRfb2JqZWN0KCdmb28nLCBpICUg MTApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCkgaTsKK0lOU0VSVCBJTlRPIGpzb25i X3N0YXRzX3Rlc3QgU0VMRUNUIGpzb25iX2J1aWxkX29iamVjdCgnImZvbyBcImJhciInLCBp ICUgMTApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCkgaTsKKworSU5TRVJUIElOVE8g anNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ1tdJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAx MDApOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNfdGVzdCBTRUxFQ1QgJ1siZm9vIl0nIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190 ZXN0IFNFTEVDVCAnWzEyMzQ1XScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwKTsKK0lO U0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNUICdbWyJmb28iXV0nIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNF TEVDVCAnW3sia2V5IjogImZvbyJ9XScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsK K0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QgU0VMRUNUICdbbnVsbCwgImZvbyJdJyBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDApOworSU5TRVJUIElOVE8ganNvbmJfc3RhdHNf dGVzdCBTRUxFQ1QgJ1tudWxsLCAxMjM0NV0nIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMw MCk7CitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0IFNFTEVDVCAnW251bGwsIFsiZm9v Il1dJyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDApOworSU5TRVJUIElOVE8ganNvbmJf c3RhdHNfdGVzdCBTRUxFQ1QgJ1tudWxsLCB7ImtleSI6ICJmb28ifV0nIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDIwMCk7CisKKy0tIEJ1aWxkIHJhbmRvbSB2YXJpYWJsZS1sZW5ndGgg aW50ZWdlciBhcnJheXMKK1NFTEVDVCBzZXRzZWVkKDAuMCk7CisKK0lOU0VSVCBJTlRPIGpz b25iX3N0YXRzX3Rlc3QKK1NFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoJ2FycmF5JywKKwlq c29uYl9idWlsZF9hcnJheSgpKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCk7CisK K0lOU0VSVCBJTlRPIGpzb25iX3N0YXRzX3Rlc3QKK1NFTEVDVCBqc29uYl9idWlsZF9vYmpl Y3QoJ2FycmF5JywKKwlqc29uYl9idWlsZF9hcnJheSgKKwkJZmxvb3IocmFuZG9tKCkgKiAx MCk6OmludCkpCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwKTsKKworSU5TRVJUIElO VE8ganNvbmJfc3RhdHNfdGVzdAorU0VMRUNUIGpzb25iX2J1aWxkX29iamVjdCgnYXJyYXkn LAorCWpzb25iX2J1aWxkX2FycmF5KAorCQlmbG9vcihyYW5kb20oKSAqIDEwKTo6aW50LAor CQlmbG9vcihyYW5kb20oKSAqIDEwKTo6aW50KSkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDMwMDApOworCitJTlNFUlQgSU5UTyBqc29uYl9zdGF0c190ZXN0CitTRUxFQ1QganNvbmJf YnVpbGRfb2JqZWN0KCdhcnJheScsCisJanNvbmJfYnVpbGRfYXJyYXkoCisJCWZsb29yKHJh bmRvbSgpICogMTApOjppbnQsCisJCWZsb29yKHJhbmRvbSgpICogMTApOjppbnQsCisJCWZs b29yKHJhbmRvbSgpICogMTApOjppbnQpKQorRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAw MCk7CisKKworQU5BTFlaRSBqc29uYl9zdGF0c190ZXN0OworCitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKHNxbF9jb25kaXRp b24gdGV4dCwgYWNjdXJhY3kgcmVhbCkKK1JFVFVSTlMgYm9vbGVhbiBBUworJCQKKwlTRUxF Q1QgY2hlY2tfZXN0aW1hdGUoJ1NFTEVDVCBjb3VudCgqKSBGUk9NIGpzb25iX3N0YXRzX3Rl c3QgV0hFUkUgJyB8fCBzcWxfY29uZGl0aW9uLCBhY2N1cmFjeSkKKyQkIExBTkdVQUdFIHNx bDsKKworRFJPUCBGVU5DVElPTiBJRiBFWElTVFMgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9l c3RpbWF0ZTIodGV4dCwgcmVhbCk7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGNo ZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUyKHNxbF9jb25kaXRpb24gdGV4dCwgYWNj dXJhY3kgcmVhbCkKK1JFVFVSTlMgVEFCTEUocGxhbiBpbnRlZ2VyLCBhY3R1YWwgaW50ZWdl cikgQVMKKyQkCisJU0VMRUNUIGdldF9wbGFuX2FuZF9hY3R1YWxfcm93cygnU0VMRUNUIGNv dW50KCopIEZST00ganNvbmJfc3RhdHNfdGVzdCBXSEVSRSAnIHx8IHNxbF9jb25kaXRpb24p CiskJCBMQU5HVUFHRSBzcWw7CisKKy0tIENoZWNrIE5VTEwgZXN0aW1hdGUKK1NFTEVDVCBj aGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgSVMgTlVMTCQkLCAwLjAzKTsK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2JhZF9r ZXknIElTIE5VTEwkJCwgMC4wMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9l c3RpbWF0ZSgkJGpzICM+ICd7YmFkX2tleX0nIElTIE5VTEwkJCwgMC4wMSk7CitTRUxFQ1Qg Y2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+IDEwMDAwMDAgSVMgTlVM TCQkLCAwLjAxKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQk anMgIz4gJ3sxMDAwMDAwfScgSVMgTlVMTCQkLCAwLjAxKTsKK1NFTEVDVCBjaGVja19qc29u Yl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2JhZF9rZXkxJyAtPiAnYmFkX2tleTIn IElTIE5VTEwkJCwgMC4wMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSgkJGpzICM+ICd7YmFkX2tleTEsYmFkX2tleTJ9JyBJUyBOVUxMJCQsIDAuMDEpOwor U0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYmFkX2tl eTEnIC0+IDEgSVMgTlVMTCQkLCAwLjAxKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190 ZXN0X2VzdGltYXRlKCQkanMgIz4gJ3tiYWRfa2V5MSwxfScgSVMgTlVMTCQkLCAwLjAxKTsK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gMTAwMDAw MCAtPiAnZm9vJyBJUyBOVUxMJCQsIDAuMDEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRz X3Rlc3RfZXN0aW1hdGUoJCRqcyAjPiAnezEwMDAwMDAsZm9vfScgSVMgTlVMTCQkLCAwLjAx KTsKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAn YmFkX2tleScgPSAnMTIzJyQkLCAwLjAxKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190 ZXN0X2VzdGltYXRlKCQkanMgLT4gMTAwMDAwMCA9ICcxMjMnJCQsIDAuMDEpOworCistLSBD aGVjayBudWxsIGVxIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9l c3RpbWF0ZSgkJGpzID0gICdudWxsJyQkLCAwLjEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAnbnVsbCckJCwgMC4xKTsKKworLS0gQ2hlY2sg Ym9vbGVhbiBlcSBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUoJCRqcyA9ICAndHJ1ZSckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ3RydWUnJCQsIDAuMSk7CitTRUxFQ1QgY2hlY2tf anNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID0gICdmYWxzZSckJCwgMC4xKTsKK1NF TEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ2ZhbHNlJyQk LCAwLjEpOworCistLSBDaGVjayBudW1lcmljIGVxIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tf anNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID0gJzEyMzQ1JyQkLCAwLjEpOworU0VM RUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyM+J3t9JyA9ICcxMjM0 NSckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQk anMgPSAnMzAwMCckJCwgMC4zKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlKCQkanMgPSAnMTIzNCckJCwgMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNf dGVzdF9lc3RpbWF0ZSgkJGpzIEA+ICc2MDAwJyQkLCAwLjIpOworCistLSBDaGVjayBudW1l cmljIHJhbmdlIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3Rp bWF0ZSgkJGpzIDwgJzAnJCQsIDAuMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSgkJGpzIDwgJzEwMCckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlKCQkanMgPCAnMTAwMCckJCwgMC4xKTsKK1NFTEVDVCBjaGVj a19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPCAnMzQ1NickJCwgMC4xKTsKK1NF TEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPCAnMTAwMDAnJCQs IDAuMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIDwg JzEwMDAwMCckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgPiAnMTAwJyBBTkQganMgPCAnNjAwJyQkLCAwLjUpOworU0VMRUNUIGNoZWNr X2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA+ICc2ODAwJyBBTkQganMgPCAnMTIw MDAnJCQsIDAuMSk7CisKKy0tIENoZWNrIHN0cmluZyBlcSBlc3RpbWF0ZQorU0VMRUNUIGNo ZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA9ICciZm9vIickJCwgMC4xKTsK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPSAnImJhcjci JyQkLCAwLjIpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRq cyA9ICciYmF6MTIzNCInJCQsIDEwKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0 X2VzdGltYXRlKCQkanMgQD4gJyJiYXI0IickJCwgMC4zKTsKKworLS0gQ2hlY2sgc3RyaW5n IHJhbmdlIGVzdGltYXRlCitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0 ZSgkJGpzID4gJyJmb28iJyQkLCAwLjAxKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190 ZXN0X2VzdGltYXRlKCQkanMgPiAnImJhciInJCQsIDAuMDEpOworU0VMRUNUIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA+ICciYmF6IickJCwgMC4wMSk7CisKKy0t IENoZWNrIG9iamVjdCBlcSBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rl c3RfZXN0aW1hdGUoJCRqcyA9ICd7fSckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlKCQkanMgPiAne30nJCQsIDAuMSk7CisKKy0tIENoZWNrIG9i amVjdCBrZXkgZXEgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2Vz dGltYXRlKCQkanMgLT4gJ2ZvbycgPSAnImJhciInJCQsIDAuMik7CitTRUxFQ1QgY2hlY2tf anNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdmb28nID0gJyJiYXoiJyQkLCAw LjEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAn Zm9vJyA9ICciYmF6NSInJCQsIDAuMyk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVz dF9lc3RpbWF0ZSgkJGpzICM+ICd7Zm9vfScgPSAnImJhciInJCQsIDAuMik7CisKKy0tIENo ZWNrIG9iamVjdCBrZXkgcmFuZ2UgZXN0aW1hdGUKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2ZvbycgPj0gJyJiYXoyIickJCwgMC4xKTsKK1NF TEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2ZvbycgPCAg JyJiYXo5IickJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgLT4gJ2ZvbycgPj0gJyJiYXoyIicgQU5EIGpzIC0+ICdmb28nIDwgJyJiYXo5 IickJCwgMC4xKTsKKworLS0gQ2hlY2sgYXJyYXkgZXEgZXN0aW1hdGUKK1NFTEVDVCBjaGVj a19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPSAnW10nJCQsIDAuMSk7CitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID49ICdbXScgQU5EIGpz IDwgJ3t9JyQkLCAwLjEpOworCistLSBDaGVjayB2YXJpYWJsZS1sZW5ndGggYXJyYXkgZWxl bWVudCBlcSBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1h dGUoJCRqcyAtPiAnYXJyYXknIC0+IDAgPSAnMSckJCwgMC4yKTsKK1NFTEVDVCBjaGVja19q c29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5JyAtPiAxID0gJzYnJCQs IDAuMik7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ ICdhcnJheScgLT4gMiA9ICc4JyQkLCAwLjIpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRz X3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXknIC0+IDMgPSAnMSckJCwgMC4yKTsKKwor LS0gQ2hlY2sgdmFyaWFibGUtbGVuZ3RoIGFycmF5IGVsZW1lbnQgcmFuZ2UgZXN0aW1hdGUK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5 JyAtPiAwIDwgJzcnJCQsIDAuMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9l c3RpbWF0ZSgkJGpzIC0+ICdhcnJheScgLT4gMSA8ICc3JyQkLCAwLjEpOworU0VMRUNUIGNo ZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXknIC0+IDIgPCAn NyckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQk anMgLT4gJ2FycmF5JyAtPiAzIDwgJzcnJCQsIDAuMSk7CisKKy0tIENoZWNrIHZhcmlhYmxl LWxlbmd0aCBhcnJheSBjb250YWlubWVudCBlc3RpbWF0ZQorU0VMRUNUIGNoZWNrX2pzb25i X3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXknIEA+ICdbXSckJCwgMC4yKTsK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5 JyBAPiAnWzFdJyQkLCAwLjIpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUoJCRqcyAtPiAnYXJyYXknIEA+ICdbMTAwXSckJCwgMC4yKTsKK1NFTEVDVCBjaGVj a19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5JyBAPiAnWzEsIDJd JyQkLCAxKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMg LT4gJ2FycmF5JyBAPiAnWzEsIDEwMF0nJCQsIDEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0 YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXknIEA+ICdbMSwgMiwgMTAwXSckJCwg MSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdh cnJheScgQD4gJ1sxLCAyLCAzXSckJCwgNSk7CisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5JyBAPiAnMSckJCwgMC4zKTsKK1NFTEVD VCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5JyBAPiAn MTAwJyQkLCAxMCk7CisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgLT4gJ2FycmF5JyAtPiAwIEA+ICcxJyQkLCAwLjMpOworU0VMRUNUIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXknIC0+IDEgQD4gJzEnJCQs IDAuMyk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ ICdhcnJheScgLT4gMiBAPiAnMSckJCwgMC4zKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0 c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2FycmF5JyAtPiAzIEA+ICcxJyQkLCAwLjMpOwor U0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyAtPiAnYXJyYXkn IC0+IDAgQD4gJ1sxXSckJCwgMC4zKTsKKworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rl c3RfZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFtdfSckJCwgMC4xKTsKK1NFTEVDVCBj aGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ3siYXJyYXkiOiBbMV19 JyQkLCAwLjMpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRq cyBAPiAneyJhcnJheSI6IFsxMDBdfSckJCwgMC4zKTsKK1NFTEVDVCBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ3siYXJyYXkiOiBbMSwgMl19JyQkLCAxKTsK K1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ3siYXJy YXkiOiBbMSwgMTAwXX0nJCQsIDEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3Rf ZXN0aW1hdGUoJCRqcyBAPiAneyJhcnJheSI6IFsxLCAyLCAxMDBdfSckJCwgMSk7CitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIEA+ICd7ImFycmF5Ijog WzEsIDIsIDNdfSckJCwgMTAwKTsKKworLS0gY2hlY2sgbWlzYyBjb250YWlubWVudAorU0VM RUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAnImZvbyInJCQs IDAuMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIEA+ ICcxMjM0NSckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGlt YXRlKCQkanMgQD4gJ1tdJyQkLCAwLjEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rl c3RfZXN0aW1hdGUoJCRqcyBAPiAnWzEyMzQ1XSckJCwgMC4xKTsKK1NFTEVDVCBjaGVja19q c29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ1siZm9vIl0nJCQsIDAuMSk7CitT RUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIEA+ICdbWyJmb28i LCAiYmFyIl1dJyQkLCAwLjEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0 aW1hdGUoJCRqcyBAPiAnW1siZm9vIl1dJyQkLCAwLjIpOworU0VMRUNUIGNoZWNrX2pzb25i X3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyBAPiAnW3sia2V5IjogImZvbyJ9XSckJCwgMC4x KTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgQD4gJ1tu dWxsXSckJCwgMC4zKTsKKworLS0gQ2hlY2sgb2JqZWN0IGtleSBudWxsIGVzdGltYXRlCitT RUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzIC0+ICdmb28nIElT IE5VTEwkJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgLT4gJ2ZvbycgSVMgTk9UIE5VTEwkJCwgMC4xKTsKK1NFTEVDVCBjaGVja19qc29u Yl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJyJmb28gXCJiYXIiJyBJUyBOT1QgTlVM TCQkLCAwLjEpOworU0VMRUNUIGNoZWNrX2pzb25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRq cyAtPiAnYmFkX2tleScgSVMgTlVMTCQkLCAwLjAxKTsKK1NFTEVDVCBjaGVja19qc29uYl9z dGF0c190ZXN0X2VzdGltYXRlKCQkanMgLT4gJ2JhZF9rZXknIElTIE5PVCBOVUxMJCQsIDAu MDEpOworCistLSBDaGVjayBvYmplY3Qga2V5IGV4aXN0ZW5jZQorU0VMRUNUIGNoZWNrX2pz b25iX3N0YXRzX3Rlc3RfZXN0aW1hdGUoJCRqcyA/ICdiYWRfa2V5JyQkLCAxMCk7CitTRUxF Q1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID8gJ2ZvbyckJCwgMC4x KTsKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPyAnYXJy YXknJCQsIDAuMSk7CisKK1NFTEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRl KCQkanMgP3wgJ3tmb28sYmFkX2tleX0nJCQsIDAuMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJf c3RhdHNfdGVzdF9lc3RpbWF0ZSgkJGpzID98ICd7Zm9vLGFycmF5fSckJCwgMC4xKTsKK1NF TEVDVCBjaGVja19qc29uYl9zdGF0c190ZXN0X2VzdGltYXRlKCQkanMgPyYgJ3tmb28sYmFk X2tleX0nJCQsIDAuMSk7CitTRUxFQ1QgY2hlY2tfanNvbmJfc3RhdHNfdGVzdF9lc3RpbWF0 ZSgkJGpzID8mICd7Zm9vLGJhcn0nJCQsIDAuMSk7Ci0tIAoyLjMxLjEKCg== --------------owXyn0H8mA9LYeaX6VpVWVY6--