Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jE811-0005No-UQ for pgadmin-hackers@arkaria.postgresql.org; Tue, 17 Mar 2020 08:56:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jE80z-0005Cq-6v for pgadmin-hackers@arkaria.postgresql.org; Tue, 17 Mar 2020 08:55:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jE80y-00058R-Od for pgadmin-hackers@lists.postgresql.org; Tue, 17 Mar 2020 08:55:56 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jE80q-0004ZV-Dg for pgadmin-hackers@postgresql.org; Tue, 17 Mar 2020 08:55:54 +0000 Received: by mail-lj1-x236.google.com with SMTP id r7so21839347ljp.10 for ; Tue, 17 Mar 2020 01:55:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=Q9AfGE2dXW75aIcYEbB2RbMmQ46t6Fas++chEIXt+gk=; b=Ka2fd7DXmyTrJ6VZyv1nkmB8HFs+DFkx8bsrOyvwY4qifQF81zgXeP8T7ygJH0wsCi HZBD3lUgwZboe7pPHnTIYNy2ouDfpHQnahovHBxvM/O8a70NJ5gUqXp9VrxsQgxW2Hma OwkyXRWIx6K0np/FLT+i8GJkQuKd1bKl0XVpeeKVRJ/kCbrdRv2ZJUCOforfnWNWoUv3 gNsf7YGX3F36tiIhKZcK7VLRORtBUSTiQ4rM6lnrybLv9YOYKJhybWVAGHkTnizuTPLk azCHN39diDpqShhEbklgRDi2DuzjAVwHzK8H4Y0eWz4Hk6KX7P6ICcTvKOm0Kqy/2tFZ nwtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Q9AfGE2dXW75aIcYEbB2RbMmQ46t6Fas++chEIXt+gk=; b=QhiJZDTLf5qNhQ2AFvtTbQP5hZrew8Rj5am52dwZDCbFcKjdnLblWjSV1f1rIMIwe6 1/m8hvyuMBqwtx9r3HEOF3rfl0PEgk/95QOARBs0JhQ9IQ4WRUqtUeLDg2Wh7ZrXvi4O Rf/GASSzSSNTDvXksxNYnRs5x45nKNZmDMaGynAqbCrcbM7UBv5/g7rKvQw1oPG4xSqv xY1GJURLpJ4ot1u9eBAiH+IgNRL8v1Zj6L9hRoFyjWeybu5e/+VPu4xMOfLYjZSdH3ZB pPdZA+nuqhTsYydvJ2jCHm7RXOljm07BiNUdZzo9fricfRNFKiVmRfN78cXtssXtHw1e FWpw== X-Gm-Message-State: ANhLgQ0fVRJds8FobRa3ztWhUQC71DDSgjpuwhVpdSt0KHqcXcVNeZiv p3rypwZA9rCLBX7Xe3enVEN46Sdej1V1nDaRBk8exirpMpXfSU/HBrX4+B+MFOkGyxuzHVpBx95 /52JTBadhOoQq5yLmxy1S3BxY9WcxiGSAzpcYgf/3DWZlncEHxDSUK939+g0loPNBX0lE2d6NyI MXhqkx8FpFykBjYtk5/tBKZCSiYs7ITKFp4yYboi+FU7FJp1be3OfXc0Q+ X-Google-Smtp-Source: ADFU+vuxZrmBqXeMfYf4E6PcuMGvygMNPqe7NJ9nCPY0jPiStuArvUkZAvzxF/Mg9ZWq+39BmmPZqMpvoHHGlLVuzyI= X-Received: by 2002:a2e:240d:: with SMTP id k13mr2216831ljk.33.1584435345963; Tue, 17 Mar 2020 01:55:45 -0700 (PDT) MIME-Version: 1.0 From: Khushboo Vashi Date: Tue, 17 Mar 2020 14:25:38 +0530 Message-ID: Subject: [pgAdmin4][Patch] - RM 2186 - Support external authentication sources [LDAP] To: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000f7f1a705a10919c8" X-CLOUD-SEC-AV-Info: edb,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: Precedence: bulk --000000000000f7f1a705a10919c8 Content-Type: multipart/alternative; boundary="000000000000f7f1a605a10919c6" --000000000000f7f1a605a10919c6 Content-Type: text/plain; charset="UTF-8" Hi, Please find the attached patch to support LDAP Authentication in Server mode. To test the patch, config_auth.py needs to be configured for LDAP configurations. The config settings are explained in this file in detail. After configuring the parameters, start the pgadmin server in Server mode and connect with LDAP server with the valid user via login page. I have tested this patch with ldap and ldap + ssl/tls. With the TLS, I have used the default config of ldap3 without certificates. @Dave, can you please review this patch, as you have a better understanding of LDAP and you can easily pointed out if I have missed anything. Note: For the document update I will create the task and assign to Nidhi for the same. Thanks, Khushboo --000000000000f7f1a605a10919c6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Please find the attached patch to s= upport LDAP Authentication in Server mode.
To test the patch, con= fig_auth.py needs to be configured for LDAP configurations. The config sett= ings are explained in this file in detail. After configuring the parameters= , start the pgadmin server in Server mode and connect with LDAP server with= the valid user via login page.

I have tested this= patch with ldap and ldap=C2=A0+ ssl/tls. With the TLS, I have used the def= ault config of ldap3 without certificates.

@Dave, = can you please review this patch, as you have a better understanding of LDA= P and you can easily pointed out if I have missed anything.

<= /div>
Note: For the document update I will create the task and assign t= o Nidhi for the same.

Thanks,
Khushboo
--000000000000f7f1a605a10919c6-- --000000000000f7f1a705a10919c8 Content-Type: application/octet-stream; name="RM_2186.patch" Content-Disposition: attachment; filename="RM_2186.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k7vnthsb0 ZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCAyNmUyZWYzNDYuLmYwOWRhMzY5MSAx MDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMTYyLDYgKzE2Miw4IEBAIHByb2Nl c3MgaXMgZmFpcmx5IHNpbXBsZSAtIGFkYXB0IGFzIHJlcXVpcmVkIGZvciB5b3VyIGRpc3RyaWJ1 dGlvbjoKICAgIFRoaXMgY29uZmlndXJhdGlvbiBhbGxvd3MgZWFzeSBzd2l0Y2hpbmcgYmV0d2Vl biBzZXJ2ZXIgYW5kIGRlc2t0b3AgbW9kZXMKICAgIGZvciB0ZXN0aW5nLgogCisgICBFZGl0ICRQ R0FETUlONF9TUkMvd2ViL2NvbmZpZ19hdXRoLnB5IHRvIGVuYWJsZSBMREFQIEF1dGhlbnRpY2F0 aW9uLgorCiA2KSBUaGUgaW5pdGlhbCBzZXR1cCBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhYmFz ZSBpcyBpbnRlcmFjdGl2ZSBpbiBzZXJ2ZXIKICAgIG1vZGUsICBhbmQgbm9uLWludGVyYWN0aXZl IGluIGRlc2t0b3AgbW9kZS4gWW91IGNhbiBydW4gaXQgZWl0aGVyIGJ5CiAgICBydW5uaW5nOgpk aWZmIC0tZ2l0IGEvcmVxdWlyZW1lbnRzLnR4dCBiL3JlcXVpcmVtZW50cy50eHQKaW5kZXggYzVk MWM1NmViLi4xYmUxNjk2MGEgMTAwNjQ0Ci0tLSBhL3JlcXVpcmVtZW50cy50eHQKKysrIGIvcmVx dWlyZW1lbnRzLnR4dApAQCAtMzksMyArMzksNCBAQCBweXRob24tZGF0ZXV0aWw+PTIuOC4wCiBT UUxBbGNoZW15Pj0xLjMuMTMKIEZsYXNrLVNlY3VyaXR5LVRvbz49My4wLjAKIHNzaHR1bm5lbD49 MC4xLjQKK2xkYXAzPT0yLjUuMQpkaWZmIC0tZ2l0IGEvd2ViL2NvbmZpZy5weSBiL3dlYi9jb25m aWcucHkKaW5kZXggYzI2OTAzMzEwLi45MWYyMGExMmQgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcu cHkKKysrIGIvd2ViL2NvbmZpZy5weQpAQCAtNDkyLDYgKzQ5MiwxMiBAQCBFTkhBTkNFRF9DT09L SUVfUFJPVEVDVElPTiA9IFRydWUKICMgTG9jYWwgY29uZmlnIHNldHRpbmdzCiAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwogCisjIExvYWQgbG9jYWwgYXV0aGVudGljYXRpb24gY29uZmlnIG92ZXJyaWRlcwor dHJ5OgorICAgIGZyb20gY29uZmlnX2F1dGggaW1wb3J0ICoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoK KyAgICBwYXNzCisKICMgTG9hZCBkaXN0cmlidXRpb24tc3BlY2lmaWMgY29uZmlnIG92ZXJyaWRl cwogdHJ5OgogICAgIGZyb20gY29uZmlnX2Rpc3RybyBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvd2Vi L2NvbmZpZ19hdXRoLnB5IGIvd2ViL2NvbmZpZ19hdXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uNTFhODMwN2NhCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL2NvbmZp Z19hdXRoLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMg Q29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQor IyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UK KyMKKyMgY29uZmlnX2F1dGgucHkgLSAgRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gY29uZmlndXJh dGlvbiBzZXR0aW5ncworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyMgRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gU291cmNlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor IyBEZWZhdWx0IHNldHRpbmcgaXMgaW50ZXJuYWwKKyMgRXh0ZXJuYWwgU3VwcG9ydGVkIFNvdXJj ZXM6IGxkYXAKKyMgTXVsdGlwbGUgYXV0aGVudGljYXRpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHNl dHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8KKyMgWydsZGFwJywgJ2ludGVybmFsJ10uIHBnQWRtaW4g d2lsbCBhdXRoZW50aWNhdGUgdGhlIHVzZXIgd2l0aCBsZGFwIGZpcnN0LAorIyBpbiBjYXNlIG9m IGZhaWx1cmUgaW50ZXJuYWwgYXV0aGVudGljYXRpb24gd2lsbCBiZSBkb25lLgorCitBVVRIRU5U SUNBVElPTl9TT1VSQ0VTID0gWydpbnRlcm5hbCddCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExE QVAgQ29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBBZnRlciBsZGFwIGF1dGhl bnRpY2F0aW9uLCB1c2VyIHdpbGwgYmUgYWRkZWQgaW50byB0aGUgU1FMaXRlIGRhdGFiYXNlCisj IGF1dG9tYXRpY2FsbHksIGlmIHNldCB0byBUcnVlLgorIyBTZXQgaXQgdG8gRmFsc2UsIGlmIHVz ZXIgc2hvdWxkIG5vdCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LAorIyBpbiB0aGlzIGNhc2UgQWRt aW4gaGFzIHRvIGFkZCB0aGUgdXNlciBtYW51YWxseSBpbiB0aGUgU1FMaXRlIGRhdGFiYXNlLgor CitBVVRPX0NSRUFURV9VU0VSID0gVHJ1ZQorCisjIENvbm5lY3Rpb24gdGltZW91dAorTERBUF9D T05ORUNUSU9OX1RJTUVPVVQgPSAxMAorCisjIFNlcnZlciBjb25uZWN0aW9uIGRldGFpbHMgKFJF UVVJUkVEKQorIyBleGFtcGxlOiBsZGFwOi8vPGlwLWFkZHJlc3M+Ojxwb3J0PiBvciBsZGFwOi8v PGhvc3RuYW1lPjo8cG9ydD4KK1NFUlZFUl9VUkkgPSAnbGRhcDovLzxpcC1hZGRyZXNzPjo8cG9y dD4nCisKKyMgQmFzZUROIChSRVFVSVJFRCkKKyMgQUQgZXhhbXBsZToKKyMgKCYob2JqZWN0Q2xh c3M9dXNlcikobWVtYmVyb2Y9Q049TVlHUk9VUCxDTj1Vc2VycyxkYz1leGFtcGxlLGRjPWNvbSkp CisjIE9wZW5MREFQIGV4YW1wbGU6IENOPVVzZXJzLGRjPWV4YW1wbGUsZGM9Y29tCitCQVNFX0RO ID0gJzxCYXNlLUROPicKKworIyBUaGUgTERBUCBhdHRyaWJ1dGUgY29udGFpbmluZyB1c2VyIG5h bWVzLiBJbiBPcGVuTERBUCwgdGhpcyBtYXkgYmUgJ3VpZCcKKyMgd2hpbHN0IGluIEFELCAnc0FN QWNjb3VudE5hbWUnIG1pZ2h0IGJlIGFwcHJvcHJpYXRlLiAoUkVRVUlSRUQpCitVU0VSTkFNRV9B VFRSSUJVVEUgPSAnPFVzZXItaWQ+JworCisjIFNlYXJjaCBsZGFwIGZvciBmdXJ0aGVyIGF1dGhl bnRpY2F0aW9uCitTRUFSQ0hfQkFTRV9ETiA9ICc8U2VhcmNoLUJhc2UtRE4+JworCisjIEZpbHRl ciBzdHJpbmcgZm9yIHRoZSB1c2VyIHNlYXJjaC4KKyMgRm9yIE9wZW5MREFQLCAnKGNuPSopJyBt YXkgd2VsbCBiZSBlbm91Z2guCisjIEZvciBBRCwgeW91IG1pZ2h0IHVzZSAnKG9iamVjdENsYXNz PXVzZXIpJyAoUkVRVUlSRUQpCitTRUFSQ0hfRklMVEVSID0gJyhvYmplY3RjbGFzcz0qKScKKwor IyBTZWFyY2ggc2NvcGUgZm9yIHVzZXJzIChvbmUgb2YgQkFTRSwgTEVWRUwgb3IgU1VCVFJFRSkK K1NFQVJDSF9TQ09QRSA9ICdTVUJUUkVFJworCisjIFVzZSBUTFM/IElmIHRoZSBVUkkgc2NoZW1l IGlzIGxkYXBzOi8vLCB0aGlzIGlzIGlnbm9yZWQuCitVU0VfU1RBUlRUTFMgPSBGYWxzZQorCisj IFRMUy9TU0wgY2VydGlmaWNhdGVzLiBTcGVjaWZ5IGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgbGVh dmUgZW1wdHkKK0NBX0NFUlRfRklMRSA9ICcnCitDRVJUX0ZJTEUgPSAnJworS0VZX0ZJTEUgPSAn JwpkaWZmIC0tZ2l0IGEvd2ViL21pZ3JhdGlvbnMvdmVyc2lvbnMvN2ZlZGY4NTMxODAyXy5weSBi L3dlYi9taWdyYXRpb25zL3ZlcnNpb25zLzdmZWRmODUzMTgwMl8ucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwLi4yYjQ2YTQ5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv bWlncmF0aW9ucy92ZXJzaW9ucy83ZmVkZjg1MzE4MDJfLnB5CkBAIC0wLDAgKzEsNTEgQEAKKwor IiIiZW1wdHkgbWVzc2FnZQorCitSZXZpc2lvbiBJRDogN2ZlZGY4NTMxODAyCitSZXZpc2VzOiBh ZmYxNDM2ZTNjOGMKK0NyZWF0ZSBEYXRlOiAyMDIwLTAyLTI2IDExOjI0OjU0LjM1MzI4OAorCisi IiIKK2Zyb20gYWxlbWJpYyBpbXBvcnQgb3AKK2ltcG9ydCBzcWxhbGNoZW15IGFzIHNhCitmcm9t IHBnYWRtaW4ubW9kZWwgaW1wb3J0IGRiCisKKyMgcmV2aXNpb24gaWRlbnRpZmllcnMsIHVzZWQg YnkgQWxlbWJpYy4KK3JldmlzaW9uID0gJzdmZWRmODUzMTgwMicKK2Rvd25fcmV2aXNpb24gPSAn YWZmMTQzNmUzYzhjJworYnJhbmNoX2xhYmVscyA9IE5vbmUKK2RlcGVuZHNfb24gPSBOb25lCisK KworZGVmIHVwZ3JhZGUoKToKKworICAgIGRiLmVuZ2luZS5leGVjdXRlKCJBTFRFUiBUQUJMRSB1 c2VyIFJFTkFNRSBUTyB1c2VyX29sZCIpCisKKyAgICBkYi5lbmdpbmUuZXhlY3V0ZSgiIiIKKyAg ICAgICAgQ1JFQVRFIFRBQkxFIHVzZXIgKAorICAgICAgICAgICAgaWQgSU5URUdFUiBOT1QgTlVM TCwKKyAgICAgICAgICAgIHVzZXJuYW1lIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCwKKyAgICAgICAg ICAgIGVtYWlsIFZBUkNIQVIoMjU2KSwKKyAgICAgICAgICAgIHBhc3N3b3JkIFZBUkNIQVIoMjU2 KSwKKyAgICAgICAgICAgIGFjdGl2ZSBCT09MRUFOIE5PVCBOVUxMLAorICAgICAgICAgICAgY29u ZmlybWVkX2F0IERBVEVUSU1FLAorICAgICAgICAgICAgbWFzdGVycGFzc19jaGVjayBWQVJDSEFS KDI1NiksCisgICAgICAgICAgICBhdXRoX3NvdXJjZSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgREVG QVVMVCAnSU5URVJOQUwnLAorICAgICAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKKyAgICAgICAg ICAgIFVOSVFVRSAodXNlcm5hbWUsIGF1dGhfc291cmNlKSwKKyAgICAgICAgICAgIENIRUNLIChh Y3RpdmUgSU4gKDAsIDEpKQorICAgICAgICApOworICAgICAgICAiIiIpCisKKyAgICBkYi5lbmdp bmUuZXhlY3V0ZSgiIiIKKyAgICAgICAgSU5TRVJUIElOVE8gdXNlciAoCisgICAgICAgICAgICBp ZCwgdXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZCwgYWN0aXZlLCBjb25maXJtZWRfYXQsIG1hc3Rl cnBhc3NfY2hlY2sKKyAgICAgICAgKSBTRUxFQ1QKKyAgICAgICAgICAgIGlkLCBlbWFpbCwgZW1h aWwsIHBhc3N3b3JkLCBhY3RpdmUsIGNvbmZpcm1lZF9hdCwgbWFzdGVycGFzc19jaGVjaworICAg ICAgICBGUk9NIHVzZXJfb2xkIiIiKQorCisgICAgZGIuZW5naW5lLmV4ZWN1dGUoIkRST1AgVEFC TEUgdXNlcl9vbGQiKQorCisKK2RlZiBkb3duZ3JhZGUoKToKKyAgICBwYXNzCmRpZmYgLS1naXQg YS93ZWIvcGdBZG1pbjQucHkgYi93ZWIvcGdBZG1pbjQucHkKaW5kZXggODFlZjZjMzk2Li5iOTNi N2NmZDQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ0FkbWluNC5weQorKysgYi93ZWIvcGdBZG1pbjQucHkK QEAgLTE2MCw2ICsxNjAsMTYgQEAgaWYgJ1BHQURNSU5fSU5UX0tFWScgaW4gZ2xvYmFscygpOgog ZWxzZToKICAgICBhcHAuUEdBRE1JTl9JTlRfS0VZID0gJycKIAorIyBBdXRoZW50aWNhdGlvbiBz b3VyY2VzCithcHAuUEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFID0gJ2ludGVybmFsJworaWYg bGVuKGNvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTKSA+IDA6CisgICAgYXBwLlBHQURNSU5f RVhURVJOQUxfQVVUSF9TT1VSQ0UgPSBjb25maWcuQVVUSEVOVElDQVRJT05fU09VUkNFU1swXQor ZWxzZToKKyAgICBhcHAuUEdBRE1JTl9FWFRFUk5BTF9BVVRIX1NPVVJDRSA9IGFwcC5QR0FETUlO X0RFRkFVTFRfQVVUSF9TT1VSQ0UKKworYXBwLmxvZ2dlci5kZWJ1ZygKKyAgICAiQXV0aGVudGlj YXRpb24gU291cmNlOiAlcyIgJSBhcHAuUEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFKQorCiAj IE91dHB1dCBhIHN0YXJ0dXAgbWVzc2FnZSBpZiB3ZSdyZSBub3QgdW5kZXIgdGhlIHJ1bnRpbWUg YW5kIHN0YXJ0dXAuCiAjIElmIHdlJ3JlIHVuZGVyIFdTR0ksIHdlIGRvbid0IG5lZWQgdG8gd29y cnkgYWJvdXQgdGhpcwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vX19pbml0X18ucHkKaW5kZXggODIw YzgwMTVhLi41Y2EyYWU2N2EgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL19faW5pdF9fLnB5Cisr KyBiL3dlYi9wZ2FkbWluL19faW5pdF9fLnB5CkBAIC0zOCw3ICszOCw3IEBAIGZyb20gZGF0ZXRp bWUgaW1wb3J0IHRpbWVkZWx0YQogZnJvbSBwZ2FkbWluLnNldHVwIGltcG9ydCBnZXRfdmVyc2lv biwgc2V0X3ZlcnNpb24KIGZyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IKIGZyb20gcGdhZG1pbi51dGlscy5jc3JmIGltcG9ydCBwZ0NTUkZQcm90ZWN0 Ci0KK2Zyb20gcGdhZG1pbiBpbXBvcnQgYXV0aGVudGljYXRlCiAKICMgSWYgc2NyaXB0IGlzIHJ1 bm5pbmcgdW5kZXIgcHl0aG9uMywgaXQgd2lsbCBub3QgaGF2ZSB0aGUgeHJhbmdlIGZ1bmN0aW9u CiAjIGRlZmluZWQKQEAgLTM5OCw2ICszOTgsNyBAQCBkZWYgY3JlYXRlX2FwcChhcHBfbmFtZT1O b25lKToKICAgICAjIExvYWQgYWxsIGF2YWlsYWJsZSBzZXJ2ZXIgZHJpdmVycwogICAgICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiAgICAgZHJpdmVyLmluaXRfYXBwKGFwcCkKKyAgICBhdXRoZW50aWNhdGUu aW5pdF9hcHAoYXBwKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAjIFJlZ2lzdGVyIGxh bmd1YWdlIHRvIHRoZSBwcmVmZXJlbmNlcyBhZnRlciBsb2dpbgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRl L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uY2MyNjNh OTZkCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9f LnB5CkBAIC0wLDAgKzEsOTggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAt IFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgVGhlIHBn QWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVy IHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkEgYmx1 ZXByaW50IG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIEF1dGhlbnRpY2F0aW9uLiIiIgorCitpbXBv cnQgZmxhc2sKK2Zyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwLCBmbGFzaAorZnJvbSBmbGFz a19iYWJlbGV4IGltcG9ydCBnZXR0ZXh0Citmcm9tIGZsYXNrX3NlY3VyaXR5LnZpZXdzIGltcG9y dCBfc2VjdXJpdHksIF9jdHgKK2Zyb20gZmxhc2tfc2VjdXJpdHkudXRpbHMgaW1wb3J0IGNvbmZp Z192YWx1ZSwgZ2V0X3Bvc3RfbG9nb3V0X3JlZGlyZWN0CisKK2ltcG9ydCBjb25maWcKK2Zyb20g cGdhZG1pbi51dGlscyBpbXBvcnQgUGdBZG1pbk1vZHVsZQorZnJvbSAucmVnaXN0cnkgaW1wb3J0 IEF1dGhTb3VyY2VSZWdpc3RyeQorCitNT0RVTEVfTkFNRSA9ICdhdXRoZW50aWNhdGUnCisKKwor Y2xhc3MgQXV0aGVudGljYXRlTW9kdWxlKFBnQWRtaW5Nb2R1bGUpOgorICAgIGRlZiBnZXRfZXhw b3NlZF91cmxfZW5kcG9pbnRzKHNlbGYpOgorICAgICAgICByZXR1cm4gWydhdXRoZW50aWNhdGUu bG9naW4nXQorCisKK2JsdWVwcmludCA9IEF1dGhlbnRpY2F0ZU1vZHVsZShNT0RVTEVfTkFNRSwg X19uYW1lX18sIHN0YXRpY191cmxfcGF0aD0nJykKKworCitAYmx1ZXByaW50LnJvdXRlKCcvbG9n aW4nLCBlbmRwb2ludD0nbG9naW4nLCBtZXRob2RzPVsnR0VUJywgJ1BPU1QnXSkKK2RlZiBsb2dp bigpOgorICAgICIiIgorICAgIEVudHJ5IHBvaW50IGZvciBhbGwgdGhlIGF1dGhlbnRpY2F0aW9u IHNvdXJjZXMuCisgICAgVGhlIHVzZXIgaW5wdXQgZGF0YSB3aWxsIGJlIHZhbGlkYXRlZCBhbmQg YXV0aGVudGljYXRlZC4KKyAgICAiIiIKKyAgICBmb3JtID0gX3NlY3VyaXR5LmxvZ2luX2Zvcm0o KQorCisgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSBzb3VyY2VzCisgICAgZm9yIHNyYyBpbiBj b25maWcuQVVUSEVOVElDQVRJT05fU09VUkNFUzoKKyAgICAgICAgc291cmNlID0gZ2V0X2F1dGhf c291cmNlcyhzcmMpCisKKyAgICAgICAgIyBWYWxpZGF0ZSB0aGUgdXNlcgorICAgICAgICBpZiBu b3Qgc291cmNlLnZhbGlkYXRlKGZvcm0pOgorICAgICAgICAgICAgZm9yIGZpZWxkIGluIGZvcm0u ZXJyb3JzOgorICAgICAgICAgICAgICAgIGZvciBlcnJvciBpbiBmb3JtLmVycm9yc1tmaWVsZF06 CisgICAgICAgICAgICAgICAgICAgIGZsYXNoKGVycm9yLCAnd2FybmluZycpCisgICAgICAgICAg ICByZXR1cm4gZmxhc2sucmVkaXJlY3QoZ2V0X3Bvc3RfbG9nb3V0X3JlZGlyZWN0KCkpCisKKyAg ICAgICAgIyBBdXRoZW50aWNhdGUgdGhlIHVzZXIKKyAgICAgICAgc3RhdHVzLCBtc2cgPSBzb3Vy Y2UuYXV0aGVudGljYXRlKCkKKworICAgICAgICAjIExvZ2luIHRoZSB1c2VyIGlmIGF1dGhlbnRp Y2F0ZWQgZWxzZSBsb29rIGZvciB0aGUKKyAgICAgICAgIyBvdGhlciBhdXRoZW50aWNhdGlvbiBz b3VyY2VzIGlmIHNldCBpbiB0aGUgY29uZmlnCisgICAgICAgIGlmIHN0YXR1czoKKyAgICAgICAg ICAgICMgTG9naW4gdGhlIHVzZXIKKyAgICAgICAgICAgIHN0YXR1cywgbXNnID0gc291cmNlLmxv Z2luKCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgZmxhc2go Z2V0dGV4dChtc2cpLCAnZGFuZ2VyJykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxhc2sucmVk aXJlY3QoZ2V0X3Bvc3RfbG9nb3V0X3JlZGlyZWN0KCkpCisKKyAgICAgICAgICAgIHJldHVybiBm bGFzay5yZWRpcmVjdCgnLycpCisKKyAgICBmbGFzaChnZXR0ZXh0KG1zZyksICdkYW5nZXInKQor ICAgIHJldHVybiBmbGFzay5yZWRpcmVjdChnZXRfcG9zdF9sb2dvdXRfcmVkaXJlY3QoKSkKKwor CitkZWYgZ2V0X2F1dGhfc291cmNlcyh0eXBlLCBhcHA9Tm9uZSk6CisgICAgIiIiR2V0IHRoZSBh dXRoZW50aWNhdGVkIHNvdXJjZSBvYmplY3QgZnJvbSB0aGUgcmVnaXN0cnkiIiIKKyAgICBpZiBh cHAgaXMgbm90IE5vbmU6CisgICAgICAgIEF1dGhTb3VyY2VSZWdpc3RyeS5sb2FkX2F1dGhfc291 cmNlcygpCisKKyAgICBhdXRoX3NvdXJjZXMgPSBnZXRhdHRyKGFwcCBvciBjdXJyZW50X2FwcCwg J19wZ2FkbWluX2F1dGhfc291cmNlcycsIE5vbmUpCisKKyAgICBpZiBhdXRoX3NvdXJjZXMgaXMg Tm9uZSBvciBub3QgaXNpbnN0YW5jZShhdXRoX3NvdXJjZXMsIGRpY3QpOgorICAgICAgICBhdXRo X3NvdXJjZXMgPSBkaWN0KCkKKworICAgIGlmIHR5cGUgaW4gYXV0aF9zb3VyY2VzOgorICAgICAg ICByZXR1cm4gYXV0aF9zb3VyY2VzW3R5cGVdCisKKyAgICBhdXRoX3NvdXJjZSA9IEF1dGhTb3Vy Y2VSZWdpc3RyeS5jcmVhdGUodHlwZSkKKworICAgIGlmIGF1dGhfc291cmNlIGlzIG5vdCBOb25l OgorICAgICAgICBhdXRoX3NvdXJjZXNbdHlwZV0gPSBhdXRoX3NvdXJjZQorICAgICAgICBzZXRh dHRyKGFwcCBvciBjdXJyZW50X2FwcCwgJ19wZ2FkbWluX2F1dGhfc291cmNlcycsIGF1dGhfc291 cmNlcykKKworICAgIHJldHVybiBhdXRoX3NvdXJjZQorCisKK2RlZiBpbml0X2FwcChhcHApOgor ICAgIGF1dGhfc291cmNlcyA9IGRpY3QoKQorCisgICAgc2V0YXR0cihhcHAsICdfcGdhZG1pbl9h dXRoX3NvdXJjZXMnLCBhdXRoX3NvdXJjZXMpCisgICAgQXV0aFNvdXJjZVJlZ2lzdHJ5LmxvYWRf YXV0aF9zb3VyY2VzKCkKKworICAgIHJldHVybiBhdXRoX3NvdXJjZXMKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9pbnRlcm5hbC5weSBiL3dlYi9wZ2FkbWluL2F1dGhlbnRp Y2F0ZS9pbnRlcm5hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjE4 YTM3NmNhZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9pbnRl cm5hbC5weQpAQCAtMCwwICsxLDkxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWlu IDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjAsIFRo ZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1 bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJJ bXBsZW1lbnRzIEludGVybmFsIEF1dGhlbnRpY2F0aW9uIiIiCisKK2ltcG9ydCBzaXgKK2Zyb20g Zmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwCitmcm9tIGZsYXNrX3NlY3VyaXR5IGltcG9ydCBsb2dp bl91c2VyCitmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKK2Zyb20gZmxhc2tfYmFiZWxl eCBpbXBvcnQgZ2V0dGV4dAorCitmcm9tIC5yZWdpc3RyeSBpbXBvcnQgQXV0aFNvdXJjZVJlZ2lz dHJ5Citmcm9tIHBnYWRtaW4ubW9kZWwgaW1wb3J0IFVzZXIKKworCitAc2l4LmFkZF9tZXRhY2xh c3MoQXV0aFNvdXJjZVJlZ2lzdHJ5KQorY2xhc3MgQmFzZUF1dGhlbnRpY2F0aW9uKG9iamVjdCk6 CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmZvcm0gPSBOb25lCisgICAg ICAgIHNlbGYudXNlcm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCisK KyAgICBkZWYgdmFsaWRhdGUoc2VsZiwgZm9ybSk6CisgICAgICAgIHVzZXJuYW1lID0gZm9ybS5k YXRhWydlbWFpbCddCisgICAgICAgIHBhc3N3b3JkID0gZm9ybS5kYXRhWydwYXNzd29yZCddCisK KyAgICAgICAgaWYgdXNlcm5hbWUgaXMgTm9uZSBvciB1c2VybmFtZSA9PSAnJzoKKyAgICAgICAg ICAgIGZvcm0uZW1haWwuZXJyb3JzID0gbGlzdChmb3JtLmVtYWlsLmVycm9ycykKKyAgICAgICAg ICAgIGZvcm0uZW1haWwuZXJyb3JzLmFwcGVuZChnZXR0ZXh0KAorICAgICAgICAgICAgICAgIHNl bGYubWVzc2FnZXMoJ0VNQUlMX05PVF9QUk9WSURFRCcpKSkKKyAgICAgICAgICAgIHJldHVybiBG YWxzZQorICAgICAgICBpZiBwYXNzd29yZCBpcyBOb25lIG9yIHBhc3N3b3JkID09ICcnOgorICAg ICAgICAgICAgZm9ybS5wYXNzd29yZC5lcnJvcnMgPSBsaXN0KGZvcm0ucGFzc3dvcmQuZXJyb3Jz KQorICAgICAgICAgICAgZm9ybS5wYXNzd29yZC5lcnJvcnMuYXBwZW5kKAorICAgICAgICAgICAg ICAgIHNlbGYubWVzc2FnZXMoJ1BBU1NXT1JEX05PVF9QUk9WSURFRCcpKQorICAgICAgICAgICAg cmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5mb3JtID0gZm9ybQorICAgICAgICBzZWxmLnVz ZXJuYW1lID0gZm9ybS5kYXRhWydlbWFpbCddCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBmb3Jt LmRhdGFbJ3Bhc3N3b3JkJ10KKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBsb2dpbihz ZWxmKToKKyAgICAgICAgdXNlciA9IGdldGF0dHIoc2VsZi5mb3JtLCAndXNlcicsCisgICAgICAg ICAgICAgICAgICAgICAgIFVzZXIucXVlcnkuZmlsdGVyX2J5KHVzZXJuYW1lPXNlbGYudXNlcm5h bWUpLmZpcnN0KCkpCisKKyAgICAgICAgaWYgdXNlciBpcyBOb25lOgorICAgICAgICAgICAgY3Vy cmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihzZWxmLm1lc3NhZ2VzKCdVU0VSX0RPRVNfTk9UX0VY SVNUJykpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYubWVzc2FnZXMoJ1VTRVJfRE9F U19OT1RfRVhJU1QnKQorCisgICAgICAgICMgTG9naW4gdXNlciB0aHJvdWdoIGZsYXNrX3NlY3Vy aXR5CisgICAgICAgIHN0YXR1cyA9IGxvZ2luX3VzZXIodXNlcikKKyAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oc2VsZi5tZXNz YWdlcygnTE9HSU5fRkFJTEVEJykpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYubWVz c2FnZXMoJ0xPR0lOX0ZBSUxFRCcpCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBA c3RhdGljbWV0aG9kCisgICAgZGVmIG1lc3NhZ2VzKG1zZ19rZXkpOgorICAgICAgICBfZGVmYXVs dF9tc2cgPSB7CisgICAgICAgICAgICAnVVNFUl9ET0VTX05PVF9FWElTVCc6ICdTcGVjaWZpZWQg dXNlciBkb2VzIG5vdCBleGlzdCcsCisgICAgICAgICAgICAnTE9HSU5fRkFJTEVEJzogJ0xvZ2lu IGZhaWxlZCcsCisgICAgICAgICAgICAnRU1BSUxfTk9UX1BST1ZJREVEJzogJ0VtYWlsL1VzZXJu YW1lIG5vdCBwcm92aWRlZCcsCisgICAgICAgICAgICAnUEFTU1dPUkRfTk9UX1BST1ZJREVEJzog J1Bhc3N3b3JkIG5vdCBwcm92aWRlZCcKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX2RlZmF1 bHRfbXNnW21zZ19rZXldIGlmIG1zZ19rZXkgaW4gX2RlZmF1bHRfbXNnIGVsc2UgTm9uZQorCisg ICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGF1dGhlbnRpY2F0ZShjbHMpOgorICAgICAgICBw YXNzCisKKworY2xhc3MgSW50ZXJuYWxBdXRoZW50aWNhdGlvbihCYXNlQXV0aGVudGljYXRpb24p OgorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYsIGZvcm0pOgorICAgICAgICAiIiJVc2VyIHZhbGlk YXRpb24iIiIKKyAgICAgICAgc2VsZi5mb3JtID0gZm9ybQorICAgICAgICBzZWxmLnVzZXJuYW1l ID0gZm9ybS5kYXRhWydlbWFpbCddCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBmb3JtLmRhdGFb J3Bhc3N3b3JkJ10KKworICAgICAgICAjIEZsYXNrIHNlY3VyaXR5IHZhbGlkYXRpb24KKyAgICAg ICAgcmV0dXJuIHNlbGYuZm9ybS52YWxpZGF0ZV9vbl9zdWJtaXQoKQorCisgICAgZGVmIGF1dGhl bnRpY2F0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9sZGFwLnB5IGIvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRl L2xkYXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4yNjVhZGUxOWEK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvbGRhcC5weQpAQCAt MCwwICsxLDE1NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdy ZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1pbiBE ZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBv c3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiQSBibHVlcHJpbnQg bW9kdWxlIGltcGxlbWVudGluZyB0aGUgbGRhcCBhdXRoZW50aWNhdGlvbi4iIiIKKworaW1wb3J0 IHNzbAoraW1wb3J0IGNvbmZpZworZnJvbSBsZGFwMyBpbXBvcnQgQ29ubmVjdGlvbiwgU2VydmVy LCBUbHMsIEFMTCwgQUxMX0FUVFJJQlVURVMKK2Zyb20gbGRhcDMuY29yZS5leGNlcHRpb25zIGlt cG9ydCBMREFQU29ja2V0T3BlbkVycm9yLCBMREFQQmluZEVycm9yLFwKKyAgICBMREFQSW52YWxp ZFNjb3BlRXJyb3IsIExEQVBBdHRyaWJ1dGVFcnJvciwgTERBUEludmFsaWRGaWx0ZXJFcnJvcixc CisgICAgTERBUFN0YXJ0VExTRXJyb3IKK2Zyb20gZmxhc2tfYmFiZWxleCBpbXBvcnQgZ2V0dGV4 dAorCitmcm9tIC5pbnRlcm5hbCBpbXBvcnQgQmFzZUF1dGhlbnRpY2F0aW9uCitmcm9tIHBnYWRt aW4ubW9kZWwgaW1wb3J0IFVzZXIsIFNlcnZlckdyb3VwLCBkYiwgUm9sZQorZnJvbSBmbGFza19z ZWN1cml0eSBpbXBvcnQgbG9naW5fdXNlcgorZnJvbSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAK K2Zyb20gcGdhZG1pbi50b29scy51c2VyX21hbmFnZW1lbnQgaW1wb3J0IGNyZWF0ZV91c2VyCisK K3RyeToKKyAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKK2V4Y2VwdCBJbXBv cnRFcnJvcjoKKyAgICBmcm9tIHVybHBhcnNlIGltcG9ydCB1cmxwYXJzZQorCisKK2NsYXNzIExE QVBBdXRoZW50aWNhdGlvbihCYXNlQXV0aGVudGljYXRpb24pOgorCisgICAgZGVmIGF1dGhlbnRp Y2F0ZShzZWxmKToKKyAgICAgICAgIiIiU2V0dXAgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIExEQVAg c2VydmVyIGFuZCBhdXRoZW50aWNhdGUgdGhlIHVzZXIuCisgICAgICAgICIiIgorCisgICAgICAg ICMgUGFyc2UgdGhlIHNlcnZlciBVUkkKKyAgICAgICAgdXJpID0gZ2V0YXR0cihjb25maWcsICdT RVJWRVJfVVJJJywgTm9uZSkKKworICAgICAgICBpZiB1cmk6CisgICAgICAgICAgICB1cmkgPSB1 cmxwYXJzZSh1cmkpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIFRMUyBjb25maWd1cmF0aW9uIG9i amVjdCBpZiByZXF1aXJlZAorICAgICAgICB0bHMgPSBOb25lCisgICAgICAgIGlmIHVyaS5zY2hl bWUgPT0gJ2xkYXBzJyBvciBjb25maWcuVVNFX1NUQVJUVExTOgorCisgICAgICAgICAgICBjYV9j ZXJ0X2ZpbGUgPSBnZXRhdHRyKGNvbmZpZywgJ0NBX0NFUlRfRklMRScsIE5vbmUpCisgICAgICAg ICAgICBjZXJ0X2ZpbGUgPSBnZXRhdHRyKGNvbmZpZywgJ0NFUlRfRklMRScsIE5vbmUpCisgICAg ICAgICAgICBrZXlfZmlsZSA9IGdldGF0dHIoY29uZmlnLCAnS0VZX0ZJTEUnLCBOb25lKQorICAg ICAgICAgICAgY2VydF92YWxpZGF0ZSA9IHNzbC5DRVJUX05PTkUKKworICAgICAgICAgICAgaWYg Y2FfY2VydF9maWxlIGFuZCBjZXJ0X2ZpbGUgYW5kIGtleV9maWxlOgorICAgICAgICAgICAgICAg IGNlcnRfdmFsaWRhdGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorCisgICAgICAgICAgICB0bHMgPSBU bHMoCisgICAgICAgICAgICAgICAgbG9jYWxfcHJpdmF0ZV9rZXlfZmlsZT1rZXlfZmlsZSwKKyAg ICAgICAgICAgICAgICBsb2NhbF9jZXJ0aWZpY2F0ZV9maWxlPWNlcnRfZmlsZSwKKyAgICAgICAg ICAgICAgICB2YWxpZGF0ZT1jZXJ0X3ZhbGlkYXRlLAorICAgICAgICAgICAgICAgIHZlcnNpb249 c3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgIGNhX2NlcnRzX2ZpbGU9Y2FfY2Vy dF9maWxlKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBzZXJ2ZXIgb2JqZWN0CisgICAgICAgIHNl cnZlciA9IFNlcnZlcih1cmkuaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0 PXVyaS5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3NzbD0odXJpLnNjaGVtZSA9 PSAnbGRhcHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldF9pbmZvPUFMTCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRscz10bHMsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25u ZWN0X3RpbWVvdXQ9Y29uZmlnLkxEQVBfQ09OTkVDVElPTl9USU1FT1VUKQorCisgICAgICAgICMg Q3JlYXRlIHRoZSBjb25uZWN0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVzZXJfZG4g PSAiezB9PXsxfSx7Mn0iLmZvcm1hdChjb25maWcuVVNFUk5BTUVfQVRUUklCVVRFLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXNlcm5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkJBU0VfRE4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBz ZWxmLmNvbm4gPSBDb25uZWN0aW9uKHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXNlcj11c2VyX2RuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYXNzd29yZD1zZWxmLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhdXRvX2JpbmQ9VHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp CisKKyAgICAgICAgZXhjZXB0IExEQVBTb2NrZXRPcGVuRXJyb3IgYXMgZToKKyAgICAgICAgICAg IGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkVycm9yIGNv bm5lY3RpbmcgdG8gdGhlIExEQVAgc2VydmVyOiAlc1xuIiAlIGUpCisgICAgICAgICAgICByZXR1 cm4gRmFsc2UsICJFcnJvciBjb25uZWN0aW5nIHRvIHRoZSBMREFQIHNlcnZlcjoiIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIiAlc1xuIiAlIGUuYXJnc1swXQorICAgICAgICBleGNlcHQg TERBUEJpbmRFcnJvciBhcyBlOgorICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2Vw dGlvbigKKyAgICAgICAgICAgICAgICAiRXJyb3IgYmluZGluZyB0byB0aGUgTERBUCBzZXJ2ZXI6 ICVzXG4iICUgZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIGJpbmRpbmcgdG8g dGhlIExEQVAgc2VydmVyOiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzXG4iICUg ZS5hcmdzWzBdCisKKyAgICAgICAgIyBFbmFibGUgVExTIGlmIFNUQVJUVExTIGlzIGNvbmZpZ3Vy ZWQKKyAgICAgICAgaWYgbm90IHVyaS5zY2hlbWUgPT0gJ2xkYXBzJyBhbmQgY29uZmlnLlVTRV9T VEFSVFRMUzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm4uc3Rh cnRfdGxzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBMREFQU3RhcnRUTFNFcnJvciBhcyBlOgorICAg ICAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oCisgICAgICAgICAgICAg ICAgICAgICJFcnJvciBzdGFydGluZyBUTFM6ICVzXG4iICUgZSkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gRmFsc2UsICJFcnJvciBzdGFydGluZyBUTFM6ICVzXG4iICUgZS5hcmdzWzBdCisKKyAg ICAgICAgc3RhdHVzLCBtc2cgPSBzZWxmLl9fc2VhcmNoX2xkYXBfdXNlcigpCisKKyAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIG1zZworCisgICAgICAg IHJldHVybiBzZWxmLl9fYXV0b19jcmVhdGVfdXNlcigpCisKKyAgICBkZWYgX19hdXRvX2NyZWF0 ZV91c2VyKHNlbGYpOgorICAgICAgICBpZiBjb25maWcuQVVUT19DUkVBVEVfVVNFUjoKKyAgICAg ICAgICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieSgKKyAgICAgICAgICAgICAgICB1c2Vy bmFtZT1zZWxmLnVzZXJuYW1lKS5maXJzdCgpCisgICAgICAgICAgICBpZiB1c2VyIGlzIE5vbmU6 CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZV91c2VyKHsKKyAgICAgICAgICAgICAgICAg ICAgJ3VzZXJuYW1lJzogc2VsZi51c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VtYWls JzogJycsCisgICAgICAgICAgICAgICAgICAgICdyb2xlJzogMiwKKyAgICAgICAgICAgICAgICAg ICAgJ2FjdGl2ZSc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICduZXdQYXNzd29yZCc6IHNl bGYucGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICdjb25maXJtUGFzc3dvcmQnOiBzZWxm LnBhc3N3b3JkCisgICAgICAgICAgICAgICAgfSkKKworICAgICAgICByZXR1cm4gVHJ1ZSwgTm9u ZQorCisgICAgZGVmIF9fc2VhcmNoX2xkYXBfdXNlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IGEg bGlzdCBvZiB1c2VycyBmcm9tIHRoZSBMREFQIHNlcnZlciBiYXNlZCBvbiBjb25maWcKKyAgICAg ICAgIHNlYXJjaCBjcml0ZXJpYS4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5j b25uLnNlYXJjaChzZWFyY2hfYmFzZT1jb25maWcuU0VBUkNIX0JBU0VfRE4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlYXJjaF9maWx0ZXI9Y29uZmlnLlNFQVJDSF9GSUxURVIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaF9zY29wZT1jb25maWcuU0VBUkNIX1ND T1BFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzPUFMTF9BVFRSSUJV VEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgTERB UEludmFsaWRTY29wZUVycm9yIGFzIGU6CisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIu ZXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJFcnJvciBzZWFyY2hpbmcgdGhlIExEQVAgZGly ZWN0b3J5OiAlc1xuIiAlIGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJFcnJvciBzZWFy Y2hpbmcgdGhlIExEQVAgZGlyZWN0b3J5OiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAi ICVzXG4iICUgZS5hcmdzWzBdCisgICAgICAgIGV4Y2VwdCBMREFQQXR0cmlidXRlRXJyb3IgYXMg ZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oIkVycm9yIHNlYXJj aGluZyB0aGUgTERBUCBkaXJlY3Rvcnk6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiICVzXG4iICUgZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9y IHNlYXJjaGluZyB0aGUgTERBUCBkaXJlY3Rvcnk6IiBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICIgJXNcbiIgJSBlLmFyZ3NbMF0KKyAgICAgICAgZXhjZXB0IExEQVBJbnZhbGlkRmlsdGVy RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oCisg ICAgICAgICAgICAgICAgIkVycm9yIHNlYXJjaGluZyB0aGUgTERBUCBkaXJlY3Rvcnk6ICVzXG4i ICUgZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIHNlYXJjaGluZyB0aGUgTERB UCBkaXJlY3Rvcnk6IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNcbiIgJSBlLmFy Z3NbMF0KKworICAgICAgICB1c2VycyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLmNv bm4uZW50cmllczoKKyAgICAgICAgICAgIGlmIGNvbmZpZy5VU0VSTkFNRV9BVFRSSUJVVEUgaW4g ZW50cnkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51c2VybmFtZSA9PSBlbnRyeVtj b25maWcuVVNFUk5BTUVfQVRUUklCVVRFXS52YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4g VHJ1ZSwgTm9uZQorICAgICAgICByZXR1cm4gRmFsc2UsIE5vbmUKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL2F1dGhlbnRpY2F0ZS9yZWdpc3RyeS5weSBiL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0 ZS9yZWdpc3RyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjkwNWY1 NTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9yZWdpc3Ry eS5weQpAQCAtMCwwICsxLDY1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQg LSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjAsIFRoZSBw Z0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRl ciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJFeHRl cm5hbCBBdXRoZW50aWNhdGlvbiBSZWdpc3RyeS4iIiIKKworCitmcm9tIGZsYXNrX2JhYmVsZXgg aW1wb3J0IGdldHRleHQKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhCisKKworZGVmIF9kZWNvcmF0 ZV9jbHNfbmFtZShtb2R1bGVfbmFtZSk6CisgICAgbGVuZ3RoID0gbGVuKF9fcGFja2FnZV9fKSAr IDEKKworICAgIGlmIGxlbihtb2R1bGVfbmFtZSkgPiBsZW5ndGggYW5kIG1vZHVsZV9uYW1lLnN0 YXJ0c3dpdGgoX19wYWNrYWdlX18pOgorICAgICAgICByZXR1cm4gbW9kdWxlX25hbWVbbGVuZ3Ro Ol0KKworICAgIHJldHVybiBtb2R1bGVfbmFtZQorCisKK2NsYXNzIEF1dGhTb3VyY2VSZWdpc3Ry eShBQkNNZXRhKToKKyAgICByZWdpc3RyeSA9IE5vbmUKKyAgICBhdXRoX3NvdXJjZXMgPSBkaWN0 KCkKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBkKToKKworICAgICAgICAj IFJlZ2lzdGVyIHRoaXMgdHlwZSBvZiBhdXRoX3NvdXJjZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUg bmFtZQorICAgICAgICAjIEF2b2lkIHJlZ2lzdGVyaW5nIHRoZSBCYXNlQXV0aGVudGljYXRpb24g aXRzZWxmCisKKyAgICAgICAgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lzdHJ5W19kZWNvcmF0ZV9j bHNfbmFtZShkWydfX21vZHVsZV9fJ10pXSA9IGNscworICAgICAgICBBQkNNZXRhLl9faW5pdF9f KGNscywgbmFtZSwgYmFzZXMsIGQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3JlYXRl KGNscywgbmFtZSwgKiprd2FyZ3MpOgorCisgICAgICAgIGlmIG5hbWUgaW4gQXV0aFNvdXJjZVJl Z2lzdHJ5LmF1dGhfc291cmNlczoKKyAgICAgICAgICAgIHJldHVybiBBdXRoU291cmNlUmVnaXN0 cnkuYXV0aF9zb3VyY2VzW25hbWVdCisKKyAgICAgICAgaWYgbmFtZSBpbiBBdXRoU291cmNlUmVn aXN0cnkucmVnaXN0cnk6CisgICAgICAgICAgICBBdXRoU291cmNlUmVnaXN0cnkuYXV0aF9zb3Vy Y2VzW25hbWVdID0gXAorICAgICAgICAgICAgICAgIChBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0 cnlbbmFtZV0pKCoqa3dhcmdzKQorICAgICAgICAgICAgcmV0dXJuIEF1dGhTb3VyY2VSZWdpc3Ry eS5hdXRoX3NvdXJjZXNbbmFtZV0KKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y KAorICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRpb24g c291cmNlICd7MH0nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC4iCisgICAgICAgICAgICApLmZv cm1hdChuYW1lKQorICAgICAgICApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbG9hZF9h dXRoX3NvdXJjZXMoY2xzKToKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSByZWdpc3RyeSBvbmx5 IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgICAgaWYgQXV0aFNvdXJj ZVJlZ2lzdHJ5LnJlZ2lzdHJ5IGlzIE5vbmU6CisgICAgICAgICAgICBBdXRoU291cmNlUmVnaXN0 cnkucmVnaXN0cnkgPSBkaWN0KCkKKworICAgICAgICBmcm9tIGltcG9ydGxpYiBpbXBvcnQgaW1w b3J0X21vZHVsZQorICAgICAgICBmcm9tIHdlcmt6ZXVnLnV0aWxzIGltcG9ydCBmaW5kX21vZHVs ZXMKKworICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gZmluZF9tb2R1bGVzKF9fcGFja2FnZV9f LCBUcnVlKToKKyAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1bGUobW9kdWxlX25hbWUp CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL19faW5pdF9fLnB5IGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9fX2luaXRfXy5weQppbmRleCAzMGFmM2UxMWIuLmZjNDAwNWVkMCAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi9i cm93c2VyL19faW5pdF9fLnB5CkBAIC01ODAsMTIgKzU4MCwxOCBAQCBkZWYgaW5kZXgoKToKIAog ICAgICAgICAgICAgICAgIGZsYXNoKG1zZywgJ3dhcm5pbmcnKQogCisgICAgYXV0aF9vbmx5X2lu dGVybmFsID0gRmFsc2UKKyAgICBpZiBsZW4oY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVMp ID09IDFcCisgICAgICAgICAgICBhbmQgJ2ludGVybmFsJyBpbiBjb25maWcuQVVUSEVOVElDQVRJ T05fU09VUkNFUzoKKyAgICAgICAgYXV0aF9vbmx5X2ludGVybmFsID0gVHJ1ZQorCiAgICAgcmVz cG9uc2UgPSBSZXNwb25zZShyZW5kZXJfdGVtcGxhdGUoCiAgICAgICAgIE1PRFVMRV9OQU1FICsg Ii9pbmRleC5odG1sIiwKLSAgICAgICAgdXNlcm5hbWU9Y3VycmVudF91c2VyLmVtYWlsLAorICAg ICAgICB1c2VybmFtZT1jdXJyZW50X3VzZXIudXNlcm5hbWUsCiAgICAgICAgIGlzX2FkbWluPWN1 cnJlbnRfdXNlci5oYXNfcm9sZSgiQWRtaW5pc3RyYXRvciIpLAogICAgICAgICBsb2dvdXRfdXJs PV9nZXRfbG9nb3V0X3VybCgpLAotICAgICAgICBfPWdldHRleHQKKyAgICAgICAgXz1nZXR0ZXh0 LAorICAgICAgICBhdXRoX29ubHlfaW50ZXJuYWw9YXV0aF9vbmx5X2ludGVybmFsCiAgICAgKSkK IAogICAgICMgU2V0IHRoZSBsYW5ndWFnZSBjb29raWUgYWZ0ZXIgbG9naW4sIHNvIG5leHQgdGlt ZSB0aGUgdXNlciB3aWxsIGhhdmUgdGhhdApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nl ci90ZW1wbGF0ZXMvYnJvd3Nlci9pbmRleC5odG1sIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1w bGF0ZXMvYnJvd3Nlci9pbmRleC5odG1sCmluZGV4IDY4MmMyM2Q2NS4uZjg5NDYyM2UzIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2VyL2luZGV4Lmh0bWwK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9pbmRleC5odG1sCkBA IC0xNDIsNiArMTQyLDcgQEAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKGUpewogICAgICAgICAg ICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJuYXYtbGluayBkcm9wZG93bi10b2dnbGUiIGRhdGEt dG9nZ2xlPSJkcm9wZG93biIKICAgICAgICAgICAgICAgICAgICByb2xlPSJidXR0b24iIGFyaWEt ZXhwYW5kZWQ9ImZhbHNlIiBpZD0ibmF2YmFyLXVzZXIiPjwvYT4KICAgICAgICAgICAgICAgICA8 dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodCIgcm9sZT0ibWVudSI+ CisgICAgICAgICAgICAgICAgICAgIHslIGlmIGF1dGhfb25seV9pbnRlcm5hbCAlfQogICAgICAg ICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZHJv cGRvd24taXRlbSIgaHJlZj0iIyIgb25jbGljaz0icGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2Vt ZW50LmNoYW5nZV9wYXNzd29yZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t7IHVybF9m b3IoJ2Jyb3dzZXIuY2hhbmdlX3Bhc3N3b3JkJykgfX0nCkBAIC0xNDksNiArMTUwLDcgQEAgd2lu ZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7 IF8oJ0NoYW5nZSBQYXNzd29yZCcpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAg ICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9 CiAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9saT4K ICAgICAgICAgICAgICAgICAgICAgeyUgaWYgaXNfYWRtaW4gJX0KICAgICAgICAgICAgICAgICAg ICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSIjIiBvbmNsaWNrPSJwZ0FkbWlu LkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuc2hvd191c2VycygpIj57eyBfKCdVc2VycycpIH19PC9h PjwvbGk+CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9tb2RlbC9fX2luaXRfXy5weSBiL3dlYi9w Z2FkbWluL21vZGVsL19faW5pdF9fLnB5CmluZGV4IGY1ODhlNDAxYy4uZTNhZjY2MGIwIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi9tb2RlbC9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi9t b2RlbC9fX2luaXRfXy5weQpAQCAtMjksNyArMjksNyBAQCBmcm9tIGZsYXNrX3NxbGFsY2hlbXkg aW1wb3J0IFNRTEFsY2hlbXkKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLVNDSEVNQV9WRVJTSU9O ID0gMjQKK1NDSEVNQV9WRVJTSU9OID0gMjUKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKQEAgLTY2 LDEzICs2NiwxNSBAQCBjbGFzcyBVc2VyKGRiLk1vZGVsLCBVc2VyTWl4aW4pOgogICAgICIiIkRl ZmluZSBhIHVzZXIgb2JqZWN0IiIiCiAgICAgX190YWJsZW5hbWVfXyA9ICd1c2VyJwogICAgIGlk ID0gZGIuQ29sdW1uKGRiLkludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpCi0gICAgZW1haWwgPSBk Yi5Db2x1bW4oZGIuU3RyaW5nKDI1NiksIHVuaXF1ZT1UcnVlLCBudWxsYWJsZT1GYWxzZSkKKyAg ICBlbWFpbCA9IGRiLkNvbHVtbihkYi5TdHJpbmcoMjU2KSwgbnVsbGFibGU9VHJ1ZSkKKyAgICB1 c2VybmFtZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoNjQpLCB1bmlxdWU9VHJ1ZSwgbnVsbGFibGU9 RmFsc2UpCiAgICAgcGFzc3dvcmQgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDI1NikpCiAgICAgYWN0 aXZlID0gZGIuQ29sdW1uKGRiLkJvb2xlYW4oKSwgbnVsbGFibGU9RmFsc2UpCiAgICAgY29uZmly bWVkX2F0ID0gZGIuQ29sdW1uKGRiLkRhdGVUaW1lKCkpCiAgICAgbWFzdGVycGFzc19jaGVjayA9 IGRiLkNvbHVtbihkYi5TdHJpbmcoMjU2KSkKICAgICByb2xlcyA9IGRiLnJlbGF0aW9uc2hpcCgn Um9sZScsIHNlY29uZGFyeT1yb2xlc191c2VycywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBiYWNrcmVmPWRiLmJhY2tyZWYoJ3VzZXJzJywgbGF6eT0nZHluYW1pYycpKQorICAgIGF1dGhf c291cmNlID0gZGIuQ29sdW1uKGRiLlN0cmluZygxNiksIHVuaXF1ZT1UcnVlLCBudWxsYWJsZT1G YWxzZSkKIAogCiBjbGFzcyBTZXR0aW5nKGRiLk1vZGVsKToKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3RlbXBsYXRlcy9zZWN1cml0eS9maWVsZHMuaHRtbCBiL3dlYi9wZ2FkbWluL3RlbXBsYXRl cy9zZWN1cml0eS9maWVsZHMuaHRtbAppbmRleCBlZmIxMjZiMmUuLmM1MDVkYTM2NiAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L2ZpZWxkcy5odG1sCisrKyBiL3dl Yi9wZ2FkbWluL3RlbXBsYXRlcy9zZWN1cml0eS9maWVsZHMuaHRtbApAQCAtOSwzICs5LDE0IEBA CiAgICAgeyUgZW5kaWYgJX0KIDwvZGl2PgogeyUgZW5kbWFjcm8gJX0KK3slIG1hY3JvIHJlbmRl cl91c2VybmFtZV93aXRoX2Vycm9ycyhmaWVsZCwgdHlwZSkgJX0KKzxkaXYgY2xhc3M9ImZvcm0t Z3JvdXAgbWItMyB7JSBpZiBmaWVsZC5lcnJvcnMgJX0gaGFzLWVycm9yeyUgZW5kaWYgJX0iPgor ICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0ie3sgZmllbGQubGFi ZWwudGV4dCB9fSAvIFVzZXJuYW1lIiBuYW1lPSJ7eyBmaWVsZC5uYW1lIH19IgorICAgICAgICAg ICB0eXBlPSJ7JSBpZiB0eXBlICV9e3sgdHlwZSB9fXslIGVsc2UgJX17eyBmaWVsZC50eXBlIH19 eyUgZW5kaWYgJX0iIGF1dG9mb2N1cz4KKyAgICB7JSBpZiBmaWVsZC5lcnJvcnMgJX0KKyAgICB7 JSBmb3IgZXJyb3IgaW4gZmllbGQuZXJyb3JzICV9CisgICAgPHNwYW4gY2xhc3M9ImZvcm0tdGV4 dCI+e3sgZXJyb3IgfX08L3NwYW4+CisgICAgeyUgZW5kZm9yICV9CisgICAgeyUgZW5kaWYgJX0K KzwvZGl2PgoreyUgZW5kbWFjcm8gJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3RlbXBsYXRl cy9zZWN1cml0eS9sb2dpbl91c2VyLmh0bWwgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJp dHkvbG9naW5fdXNlci5odG1sCmluZGV4IDc1MTVjMmMyYS4uMmU5MmQ3YjEyIDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvbG9naW5fdXNlci5odG1sCisrKyBiL3dl Yi9wZ2FkbWluL3RlbXBsYXRlcy9zZWN1cml0eS9sb2dpbl91c2VyLmh0bWwKQEAgLTcsMTAgKzcs MTAgQEAKIHslIGJsb2NrIHBhbmVsX3RpdGxlICV9e3sgXygnTG9naW4nKSB9fXslIGVuZGJsb2Nr ICV9CiB7JSBibG9jayBwYW5lbF9ib2R5ICV9CiB7JSBpZiBjb25maWcuU0VSVkVSX01PREUgJX0K LTxmb3JtIGFjdGlvbj0ie3sgdXJsX2Zvcl9zZWN1cml0eSgnbG9naW4nKSB9fSIgbWV0aG9kPSJQ T1NUIiBuYW1lPSJsb2dpbl91c2VyX2Zvcm0iPgorPGZvcm0gYWN0aW9uPSJ7eyB1cmxfZm9yKCdh dXRoZW50aWNhdGUubG9naW4nKSB9fSIgbWV0aG9kPSJQT1NUIiBuYW1lPSJsb2dpbl91c2VyX2Zv cm0iPgogICAgIHt7IGxvZ2luX3VzZXJfZm9ybS5oaWRkZW5fdGFnKCkgfX0KICAgICB7JSBzZXQg dXNlcl9sYW5ndWFnZSA9IHJlcXVlc3QuY29va2llcy5nZXQoJ1BHQURNSU5fTEFOR1VBR0UnKSBv ciAnZW4nICV9Ci0gICAge3sgcmVuZGVyX2ZpZWxkX3dpdGhfZXJyb3JzKGxvZ2luX3VzZXJfZm9y bS5lbWFpbCwgInRleHQiKSB9fQorICAgIHt7IHJlbmRlcl91c2VybmFtZV93aXRoX2Vycm9ycyhs b2dpbl91c2VyX2Zvcm0uZW1haWwsICJ0ZXh0IikgfX0KICAgICB7eyByZW5kZXJfZmllbGRfd2l0 aF9lcnJvcnMobG9naW5fdXNlcl9mb3JtLnBhc3N3b3JkLCAicGFzc3dvcmQiKSB9fQogICAgIDxi dXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgYnRuLWxvZ2luIiB0eXBlPSJz dWJtaXQiIHZhbHVlPSJ7eyBfKCdMb2dpbicpIH19Ij57eyBfKCdMb2dpbicpIH19PC9idXR0b24+ CiAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3cgbWItMyBjIHVzZXItbGFuZ3VhZ2UiPgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L3BhbmVsLmh0bWwgYi93 ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvcGFuZWwuaHRtbAppbmRleCA3ZGUxZDlkOTAu LjE0NTJkZThjYSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L3Bh bmVsLmh0bWwKKysrIGIvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L3BhbmVsLmh0bWwK QEAgLTEsNSArMSw1IEBACiB7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Ci17JSBmcm9tICJzZWN1 cml0eS9maWVsZHMuaHRtbCIgaW1wb3J0IHJlbmRlcl9maWVsZF93aXRoX2Vycm9ycyAlfQoreyUg ZnJvbSAic2VjdXJpdHkvZmllbGRzLmh0bWwiIGltcG9ydCByZW5kZXJfZmllbGRfd2l0aF9lcnJv cnMsIHJlbmRlcl91c2VybmFtZV93aXRoX2Vycm9ycyAlfQogeyUgYmxvY2sgYm9keSAlfQogPGRp diBjbGFzcz0iY29udGFpbmVyLWZsdWlkIGgtMTAwIGxvZ2luX3BhZ2UiPgogICAgIHslIGlmIGNv bmZpZy5MT0dJTl9CQU5ORVIgaXMgZGVmaW5lZCBhbmQgY29uZmlnLkxPR0lOX0JBTk5FUiAhPSAi IiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L19faW5p dF9fLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L19faW5pdF9fLnB5Cmlu ZGV4IDU1MzY1MTczZi4uODczZThjNjU4IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy91 c2VyX21hbmFnZW1lbnQvX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9t YW5hZ2VtZW50L19faW5pdF9fLnB5CkBAIC0xNzYsMTMgKzE3NiwyMCBAQCBkZWYgdXNlcih1aWQp OgogCiAgICAgIiIiCiAKKyAgICBhdXRoX29ubHlfaW50ZXJuYWwgPSBGYWxzZQorICAgIGlmIGN1 cnJlbnRfYXBwLlBHQURNSU5fREVGQVVMVF9BVVRIX1NPVVJDRSA9PSBcCisgICAgICAgICAgICBj dXJyZW50X2FwcC5QR0FETUlOX0VYVEVSTkFMX0FVVEhfU09VUkNFOgorICAgICAgICBhdXRoX29u bHlfaW50ZXJuYWwgPSBUcnVlCisKICAgICBpZiB1aWQ6CiAgICAgICAgIHUgPSBVc2VyLnF1ZXJ5 LmdldCh1aWQpCiAKICAgICAgICAgcmVzID0geydpZCc6IHUuaWQsCisgICAgICAgICAgICAgICAn dXNlcm5hbWUnOiB1LnVzZXJuYW1lLAogICAgICAgICAgICAgICAgJ2VtYWlsJzogdS5lbWFpbCwK ICAgICAgICAgICAgICAgICdhY3RpdmUnOiB1LmFjdGl2ZSwKLSAgICAgICAgICAgICAgICdyb2xl JzogdS5yb2xlc1swXS5pZAorICAgICAgICAgICAgICAgJ3JvbGUnOiB1LnJvbGVzWzBdLmlkLAor ICAgICAgICAgICAgICAgJ2F1dGhfb25seV9pbnRlcm5hbCc6IGF1dGhfb25seV9pbnRlcm5hbCwK ICAgICAgICAgICAgICAgIH0KICAgICBlbHNlOgogICAgICAgICB1c2VycyA9IFVzZXIucXVlcnku YWxsKCkKQEAgLTE5MCw5ICsxOTcsMTEgQEAgZGVmIHVzZXIodWlkKToKICAgICAgICAgdXNlcnNf ZGF0YSA9IFtdCiAgICAgICAgIGZvciB1IGluIHVzZXJzOgogICAgICAgICAgICAgdXNlcnNfZGF0 YS5hcHBlbmQoeydpZCc6IHUuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Vz ZXJuYW1lJzogdS51c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1h aWwnOiB1LmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmUnOiB1 LmFjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9sZSc6IHUucm9sZXNb MF0uaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9sZSc6IHUucm9sZXNbMF0u aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhfb25seV9pbnRlcm5hbCc6 IGF1dGhfb25seV9pbnRlcm5hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQog CiAgICAgICAgIHJlcyA9IHVzZXJzX2RhdGEKQEAgLTIxNSwxMSArMjI0LDMxIEBAIGRlZiBjcmVh dGUoKToKICAgICAgICAgcmVxdWVzdC5kYXRhLCBlbmNvZGluZz0ndXRmLTgnCiAgICAgKQogCi0g ICAgZm9yIGYgaW4gKCdlbWFpbCcsICdyb2xlJywgJ2FjdGl2ZScsICduZXdQYXNzd29yZCcsICdj b25maXJtUGFzc3dvcmQnKToKKyAgICBzdGF0dXMsIHJlcyA9IGNyZWF0ZV91c2VyKGRhdGEpCisK KyAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9cmVzKQorCisgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgIHJlc3BvbnNlPXJl cywKKyAgICAgICAgc3RhdHVzPTIwMAorICAgICkKKworCitkZWYgY3JlYXRlX3VzZXIoZGF0YSk6 CisgICAgaWYgY3VycmVudF9hcHAuUEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFID09IFwKKyAg ICAgICAgICAgIGN1cnJlbnRfYXBwLlBHQURNSU5fRVhURVJOQUxfQVVUSF9TT1VSQ0U6CisgICAg ICAgIHJlcV9wYXJhbXMgPSAoJ2VtYWlsJywgJ3JvbGUnLCAnYWN0aXZlJywgJ25ld1Bhc3N3b3Jk JywKKyAgICAgICAgICAgICAgICAgICAgICAnY29uZmlybVBhc3N3b3JkJykKKyAgICBlbHNlOgor ICAgICAgICByZXFfcGFyYW1zID0gKCd1c2VybmFtZScsICdyb2xlJywgJ2FjdGl2ZScsICduZXdQ YXNzd29yZCcsCisgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpcm1QYXNzd29yZCcpCisKKyAg ICBmb3IgZiBpbiByZXFfcGFyYW1zOgogICAgICAgICBpZiBmIGluIGRhdGEgYW5kIGRhdGFbZl0g IT0gJyc6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAg cmV0dXJuIGJhZF9yZXF1ZXN0KGVycm9ybXNnPV8oIk1pc3NpbmcgZmllbGQ6ICd7MH0nIi5mb3Jt YXQoZikpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBfKCJNaXNzaW5nIGZpZWxkOiAnezB9 JyIuZm9ybWF0KGYpKQogCiAgICAgdHJ5OgogICAgICAgICBuZXdfZGF0YSA9IHZhbGlkYXRlX3Vz ZXIoZGF0YSkKQEAgLTIyOCwxMyArMjU3LDIzIEBAIGRlZiBjcmVhdGUoKToKICAgICAgICAgICAg IG5ld19kYXRhWydyb2xlcyddID0gW1JvbGUucXVlcnkuZ2V0KG5ld19kYXRhWydyb2xlcyddKV0K IAogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgcmV0dXJuIGJhZF9yZXF1ZXN0 KGVycm9ybXNnPV8oc3RyKGUpKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBzdHIoZSkKIAogICAg IHRyeToKLSAgICAgICAgdXNyID0gVXNlcihlbWFpbD1uZXdfZGF0YVsnZW1haWwnXSwKKyAgICAg ICAgaWYgY3VycmVudF9hcHAuUEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFID09IFwKKyAgICAg ICAgICAgICAgICBjdXJyZW50X2FwcC5QR0FETUlOX0VYVEVSTkFMX0FVVEhfU09VUkNFOgorICAg ICAgICAgICAgdXNlcm5hbWUgPSBuZXdfZGF0YVsnZW1haWwnXQorICAgICAgICAgICAgZW1haWwg PSBuZXdfZGF0YVsnZW1haWwnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlcm5hbWUg PSBkYXRhWyd1c2VybmFtZSddCisgICAgICAgICAgICBlbWFpbCA9IGdldGF0dHIobmV3X2RhdGEs ICdlbWFpbCcsICcnKQorCisgICAgICAgIHVzciA9IFVzZXIodXNlcm5hbWU9dXNlcm5hbWUsCisg ICAgICAgICAgICAgICAgICAgZW1haWw9ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgcm9sZXM9 bmV3X2RhdGFbJ3JvbGVzJ10sCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPW5ld19kYXRhWydh Y3RpdmUnXSwKLSAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1uZXdfZGF0YVsncGFzc3dvcmQn XSkKKyAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1uZXdfZGF0YVsncGFzc3dvcmQnXSwKKyAg ICAgICAgICAgICAgICAgICBhdXRoX3NvdXJjZT1jdXJyZW50X2FwcC5QR0FETUlOX0VYVEVSTkFM X0FVVEhfU09VUkNFKQogICAgICAgICBkYi5zZXNzaW9uLmFkZCh1c3IpCiAgICAgICAgIGRiLnNl c3Npb24uY29tbWl0KCkKICAgICAgICAgIyBBZGQgZGVmYXVsdCBzZXJ2ZXIgZ3JvdXAgZm9yIG5l dyB1c2VyLgpAQCAtMjQyLDE4ICsyODEsMTUgQEAgZGVmIGNyZWF0ZSgpOgogICAgICAgICBkYi5z ZXNzaW9uLmFkZChzZXJ2ZXJfZ3JvdXApCiAgICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKICAg ICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQorICAgICAgICByZXR1cm4gRmFsc2UsIHN0cihlKQogCi0g ICAgcmVzID0geydpZCc6IHVzci5pZCwKLSAgICAgICAgICAgJ2VtYWlsJzogdXNyLmVtYWlsLAot ICAgICAgICAgICAnYWN0aXZlJzogdXNyLmFjdGl2ZSwKLSAgICAgICAgICAgJ3JvbGUnOiB1c3Iu cm9sZXNbMF0uaWQKLSAgICAgICAgICAgfQotCi0gICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCi0g ICAgICAgIHJlc3BvbnNlPXJlcywKLSAgICAgICAgc3RhdHVzPTIwMAotICAgICkKKyAgICByZXR1 cm4gVHJ1ZSwgeworICAgICAgICAnaWQnOiB1c3IuaWQsCisgICAgICAgICd1c2VybmFtZSc6IHVz ci51c2VybmFtZSwKKyAgICAgICAgJ2VtYWlsJzogdXNyLmVtYWlsLAorICAgICAgICAnYWN0aXZl JzogdXNyLmFjdGl2ZSwKKyAgICAgICAgJ3JvbGUnOiB1c3Iucm9sZXNbMF0uaWQKKyAgICB9CiAK IAogQGJsdWVwcmludC5yb3V0ZSgKQEAgLTMzNyw2ICszNzMsNyBAQCBkZWYgdXBkYXRlKHVpZCk6 CiAgICAgICAgIGRiLnNlc3Npb24uY29tbWl0KCkKIAogICAgICAgICByZXMgPSB7J2lkJzogdXNy LmlkLAorICAgICAgICAgICAgICAgJ3VzZXJuYW1lJzogdXNyLnVzZXJuYW1lLAogICAgICAgICAg ICAgICAgJ2VtYWlsJzogdXNyLmVtYWlsLAogICAgICAgICAgICAgICAgJ2FjdGl2ZSc6IHVzci5h Y3RpdmUsCiAgICAgICAgICAgICAgICAncm9sZSc6IHVzci5yb2xlc1swXS5pZApkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L3N0YXRpYy9qcy91c2VyX21hbmFn ZW1lbnQuanMgYi93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvc3RhdGljL2pzL3Vz ZXJfbWFuYWdlbWVudC5qcwppbmRleCA2NDAxNDg2M2YuLjU3Mjc1ZWVmOSAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L3N0YXRpYy9qcy91c2VyX21hbmFnZW1l bnQuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L3N0YXRpYy9qcy91 c2VyX21hbmFnZW1lbnQuanMKQEAgLTI0MiwxMyArMjQyLDI3IEBAIGRlZmluZShbCiAgICAgICAg ICAgdXJsUm9vdDogVVNFUlVSTCwKICAgICAgICAgICBkZWZhdWx0czogewogICAgICAgICAgICAg aWQ6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHVzZXJuYW1lOiB1bmRlZmluZWQsCiAgICAgICAg ICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICAgICAgICAgYWN0aXZlOiB0cnVlLAogICAgICAg ICAgICAgcm9sZTogdW5kZWZpbmVkLAogICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IHVuZGVmaW5l ZCwKICAgICAgICAgICAgIGNvbmZpcm1QYXNzd29yZDogdW5kZWZpbmVkLAorICAgICAgICAgICAg YXV0aF9vbmx5X2ludGVybmFsOiB0cnVlLAogICAgICAgICAgIH0sCiAgICAgICAgICAgc2NoZW1h OiBbeworICAgICAgICAgICAgaWQ6ICd1c2VybmFtZScsCisgICAgICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnVXNlcm5hbWUnKSwKKyAgICAgICAgICAgIHR5cGU6ICd0ZXh0JywKKyAgICAgICAgICAg IGNlbGw6IEJhY2tncmlkLkV4dGVuc2lvbi5TdHJpbmdEZXBDZWxsLAorICAgICAgICAgICAgY2Vs bEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzMwJywKKyAgICAgICAgICAgIGRlcHM6IFsn aWQnXSwKKyAgICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAg aWYgKG0uZ2V0KCdhdXRoX29ubHlfaW50ZXJuYWwnKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkaXNhYmxlZDog ZmFsc2UsCisgICAgICAgICAgfSx7CiAgICAgICAgICAgICBpZDogJ2VtYWlsJywKICAgICAgICAg ICAgIGxhYmVsOiBnZXR0ZXh0KCdFbWFpbCcpLAogICAgICAgICAgICAgdHlwZTogJ3RleHQnLApA QCAtMjU2LDYgKzI3MCw4IEBAIGRlZmluZShbCiAgICAgICAgICAgICBjZWxsSGVhZGVyQ2xhc3Nl czogJ3dpZHRoX3BlcmNlbnRfMzAnLAogICAgICAgICAgICAgZGVwczogWydpZCddLAogICAgICAg ICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgaWYgKCFtLmdldCgn YXV0aF9vbmx5X2ludGVybmFsJykpIHJldHVybiB0cnVlOworCiAgICAgICAgICAgICAgIGlmICht IGluc3RhbmNlb2YgQmFja2JvbmUuQ29sbGVjdGlvbikgewogICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICAgICAgICAgfQpAQCAtMzQ0LDcgKzM2MCw3IEBAIGRlZmluZShbCiAg ICAgICAgICAgICAgIGNoYW5nZWRBdHRycyA9IHRoaXMuY2hhbmdlZCB8fCB7fSwKICAgICAgICAg ICAgICAgZW1haWxfZmlsdGVyID0gL15bYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXStA W2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1a MC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvOwogCi0gICAgICAgICAg ICBpZiAoKCdlbWFpbCcgaW4gY2hhbmdlZEF0dHJzIHx8ICF0aGlzLmlzTmV3KCkpICYmIChfLmlz VW5kZWZpbmVkKHRoaXMuZ2V0KCdlbWFpbCcpKSB8fAorICAgICAgICAgICAgaWYgKHRoaXMuZ2V0 KCdhdXRoX29ubHlfaW50ZXJuYWwnKSA9PT0gdHJ1ZSAmJiAoJ2VtYWlsJyBpbiBjaGFuZ2VkQXR0 cnMgfHwgIXRoaXMuaXNOZXcoKSkgJiYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ2VtYWlsJykp IHx8CiAgICAgICAgICAgICAgICAgXy5pc051bGwodGhpcy5nZXQoJ2VtYWlsJykpIHx8CiAgICAg ICAgICAgICAgICAgU3RyaW5nKHRoaXMuZ2V0KCdlbWFpbCcpKS5yZXBsYWNlKC9eXHMrfFxzKyQv ZywgJycpID09ICcnKSkgewogICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdFbWFpbCBh ZGRyZXNzIGNhbm5vdCBiZSBlbXB0eS4nKTsK --000000000000f7f1a705a10919c8--