Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1anPLy-000276-WE for pgadmin-hackers@arkaria.postgresql.org; Tue, 05 Apr 2016 11:41:03 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1anPLy-0005Vv-IG for pgadmin-hackers@arkaria.postgresql.org; Tue, 05 Apr 2016 11:41:02 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1anPLq-0005MC-Vh for pgadmin-hackers@postgresql.org; Tue, 05 Apr 2016 11:40:55 +0000 Received: from mail-yw0-x232.google.com ([2607:f8b0:4002:c05::232]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1anPLn-0007LD-3Q for pgadmin-hackers@postgresql.org; Tue, 05 Apr 2016 11:40:53 +0000 Received: by mail-yw0-x232.google.com with SMTP id g3so12627336ywa.3 for ; Tue, 05 Apr 2016 04:40:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:date:message-id:subject:from:to; bh=4erYytqaiaL233WgHZvUNhNio/GB4l1ofMHj+oZqBsM=; b=T+6A9jBdTC7wBmSoK6Y9Z7izymvnxdhmDv/bE2D3IEGj1Rht2cVcQB8dgr2ztJMDnt x5iUijId0AgJ5X91RYvys78aK4PY4NTywj7/B6FWBml7qRPApfB+IQuz8SjiEXKnnHEu NSAWseBWyqf3eGlNqchPOjBn8gFETp5pseWmFW5BRKVJ7kd/zkLRN8nvXCckx65KYOvE l83znfTgyQM1r46qs9n2LoUYKuBQienLVu4Yk3AqlZQLV6CH+qjYVn34Y5NKRRtvNQag oHOh2Q6+ZY2+38RZMzfgbPey/acL7yBPkL0m1YxUiy3q5tXRpGfaOsXhM7xRoNjhA2+v L7nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to; bh=4erYytqaiaL233WgHZvUNhNio/GB4l1ofMHj+oZqBsM=; b=jB08jpbGGJbLBTziH9HQfPGdaRrUjIyXT+auaeLvgLF4PY9B0QXpwQeTPWXGoKP2ws fpAtbSdnpCYxuPmM3XeEFZvGXaiFlhmdRqJZ0CBx/fcAlN4g8ZVlLQTzRgU+8CaIjSNP RLVOo9W1oT/yO5svSo0IOcADzocewkcS1EE9ifEkY57p7fppQKN0pS+fp51bV3G18XBq dHEXpRZmJjfiLmIqtW0rfVvZUImMCzcYikHiopH2RwRMCHAdXvXlptB4gBR3WJdoWsKP 1+ksCTTClohdgHUSQLItABUyhC1XFlO3Vx52EyANV6NzLtZltJXZiFjLLljoZiGOY8Zm /QyA== X-Gm-Message-State: AD7BkJIP9rvl8Tkc5DPY6GFnrl5IH+l0qbaFE4wt4IBny7gNyTOkO+BJAtE//w1TZRYC0HNvOoTIf5xkI39QgBoq MIME-Version: 1.0 X-Received: by 10.129.153.136 with SMTP id q130mr15753463ywg.257.1459856450266; Tue, 05 Apr 2016 04:40:50 -0700 (PDT) Received: by 10.37.218.76 with HTTP; Tue, 5 Apr 2016 04:40:50 -0700 (PDT) Date: Tue, 5 Apr 2016 17:10:50 +0530 Message-ID: Subject: [pgAdmin4][Debugger]: Initial Patch From: Neel Patel To: pgadmin-hackers Content-Type: multipart/mixed; boundary=94eb2c0b78e82487b2052fbb5192 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --94eb2c0b78e82487b2052fbb5192 Content-Type: multipart/alternative; boundary=94eb2c0b78e82487a9052fbb5190 --94eb2c0b78e82487a9052fbb5190 Content-Type: text/plain; charset=UTF-8 Hi, Please find attached debugger v1 patch. To test this patch we need to apply the "function" module patch submitted by Khushboo. For the debugger functionality, direct and indirect debugging is working as per pgadmin3 except below TODOs. Below are the TODOs which will be submitted in next patch along with the fixed review comments. - For the direct debugging, 'NULL' and 'Expression' column value should be validated before pressing the debug button. - User can deposit the value of input arguments and local variable but need to be validated against respective data types. - Currently we have tested for plpgsql functions only, We need to test against EDB SPL functions and trigger functions. - For the direct debugging, once the execution is completed, only "Continue/Restart" button will be enabled and user should allow to restart the debugging with same function and previous values. - Values entered by the user in input dialog during direct debugging should be saved. Currently we have tested this patch with PostgreSQL v9.5. Do review it and let us know for the comments. Thanks, Neel Patel --94eb2c0b78e82487a9052fbb5190 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find attached debugger v1 pa= tch. To test this patch we need to apply the "function" module pa= tch submitted by Khushboo.

For the debugger functi= onality, direct and indirect debugging is working as per pgadmin3 except be= low TODOs.

Below are the TODOs which will be submi= tted in next patch along with the fixed review comments.
  • For the direct debugging, 'NULL' and 'Expression' colu= mn value should be validated before pressing the debug button.
  • User can deposit the value of input arguments and local variable but need = to be=C2=A0
  • validated against respective data types.
    Currently we have tested for plpgsql functions only, We need to test= against EDB SPL functions and trigger functions.
  • For th= e direct debugging, once the execution is completed, only "Continue/Re= start" button will be enabled and user should allow to restart the deb= ugging with same function and previous values.
  • Values en= tered by the user in input dialog during direct debugging should be saved.<= /div>

  • Currently we have tested thi= s patch with PostgreSQL v9.5.

    Do review it and let= us know for the comments.

    Thanks,
    Neel = Patel
    --94eb2c0b78e82487a9052fbb5190-- --94eb2c0b78e82487b2052fbb5192 Content-Type: application/octet-stream; name="debugger_5_April_v1.patch" Content-Disposition: attachment; filename="debugger_5_April_v1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imnask2x0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL2Zy YW1lLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvZnJhbWUu anMKaW5kZXggOTJlYTViZi4uMTkzYTAxZCAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvZnJhbWUuanMKKysrIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvZnJhbWUuanMKQEAgLTI5LDcgKzI5 LDggQEAgZnVuY3Rpb24oXywgcGdBZG1pbikgewogICAgICAgICAgIHRpdGxl OiB0aGF0LnRpdGxlLAogICAgICAgICAgIGlzUHJpdmF0ZTogdGhhdC5pc1By aXZhdGUsCiAgICAgICAgICAgb25DcmVhdGU6IGZ1bmN0aW9uKG15UGFuZWwp IHsKLSAgICAgICAgICAgICQobXlQYW5lbCkuZGF0YSgncGdBZG1pbk5hbWUn LCB0aGF0Lm5hbWUpOworICAgICAgICAgICAgJChteVBhbmVsKS5kYXRhKCdm cmFtZUluaXRpYWxpemVkJywgZmFsc2UpOworICAgICAgICAgICAgJChteVBh bmVsKS5kYXRhKCdwZ0ZyYW1lTmFtZScsIHRoYXQubmFtZSk7CiAgICAgICAg ICAgICBteVBhbmVsLmluaXRTaXplKHRoYXQud2lkdGgsIHRoYXQuaGVpZ2h0 KTsKICAgICAgICAgICAgIGlmIChteVBhbmVsLnNob3dUaXRsZSA9PSBmYWxz ZSkKICAgICAgICAgICAgICAgbXlQYW5sZS50aXRsZShmYWxzZSk7CkBAIC00 MSw3ICs0MiwxMSBAQCBmdW5jdGlvbihfLCBwZ0FkbWluKSB7CiAgICAgICAg ICAgICB2YXIgZnJhbWUgPSBuZXcgd2NJRnJhbWUoJGZyYW1lQXJlYSwgbXlQ YW5lbCk7CiAgICAgICAgICAgICAkKG15UGFuZWwpLmRhdGEoJ2VtYmVkZWRG cmFtZScsIGZyYW1lKTsKIAotICAgICAgICAgICAgc2V0VGltZW91dChmdW5j dGlvbigpIHsgZnJhbWUub3BlblVSTCh0aGF0LnVybCk7IH0sIDUwMCk7Cisg ICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg ICAgICBmcmFtZS5vcGVuVVJMKHRoYXQudXJsKTsKKworICAgICAgICAgICAg ICBwZ0Jyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4tYnJvd3Nlcjpm cmFtZTp1cmxsb2FkZWQ6JyArIHRoYXQubmFtZSwgZnJhbWUsIHRoYXQudXJs LCBzZWxmKTsKKyAgICAgICAgICAgIH0sIDEpOwogCiAgICAgICAgICAgICBp ZiAodGhhdC5ldmVudHMgJiYgXy5pc09iamVjdCh0aGF0LmV2ZW50cykpIHsK ICAgICAgICAgICAgICAgXy5lYWNoKHRoYXQuZXZlbnRzLCBmdW5jdGlvbih2 LCBrKSB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvY3NzL292 ZXJyaWRlcy5jc3MgYi93ZWIvcGdhZG1pbi9zdGF0aWMvY3NzL292ZXJyaWRl cy5jc3MKaW5kZXggY2E4N2U3YS4uY2ZkZGFhMyAxMDA3NTUKLS0tIGEvd2Vi L3BnYWRtaW4vc3RhdGljL2Nzcy9vdmVycmlkZXMuY3NzCisrKyBiL3dlYi9w Z2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNzcwpAQCAtOTExLDQgKzkx MSwxMiBAQCB1bC5uYXYubmF2LXRhYnMgewogLnNlbGVjdDItY2VsbCAuc2Vs ZWN0Mi1jb250YWluZXIgPiAuYmFja2dyaWQgdGgsIC5iYWNrZ3JpZCB0ZAog ewogICAgIHBhZGRpbmc6IDBweDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCit9CisKKy5icmVha3BvaW50cyB7CisgICAgd2lkdGg6IDAuOGVt OworfQorCisuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewor ICAgIGJhY2tncm91bmQ6ICM1MEIwRjA7Cit9CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9zdGF0aWMvanMvYmFja2dyaWQvYmFja2dyaWQucGdhZG1pbi5q cyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3JpZC9iYWNrZ3JpZC5w Z2FkbWluLmpzCmluZGV4IDk5NjVmMWIuLjYxMWU1NGUgMTAwNjQ0Ci0tLSBh L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3JpZC9iYWNrZ3JpZC5wZ2Fk bWluLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3JpZC9i YWNrZ3JpZC5wZ2FkbWluLmpzCkBAIC01NzYsNiArNTc2LDIzNiBAQAogICAg IGVkaXRvcjogVGV4dGFyZWFDZWxsRWRpdG9yCiAgIH0pOwogCisKKyAgLyoq CisgICAqIEN1c3RvbSBoZWFkZXIgaWNvbiBjZWxsIHRvIGFkZCB0aGUgaWNv biBpbiB0YWJsZSBoZWFkZXIuCisgICovCisgIHZhciBDdXN0b21IZWFkZXJJ Y29uQ2VsbCA9IEJhY2tncmlkLkV4dGVuc2lvbi5DdXN0b21IZWFkZXJJY29u Q2VsbCA9IEJhY2tncmlkLkhlYWRlckNlbGwuZXh0ZW5kKHsKKyAgICAgIC8q KiBAcHJvcGVydHkgKi8KKyAgICAgIGNsYXNzTmFtZTogImhlYWRlci1pY29u LWNlbGwiLAorICAgICAgZXZlbnRzOiB7CisgICAgICAgICJjbGljayI6ICJh ZGRIZWFkZXJJY29uIgorICAgICAgfSwKKyAgICAgIGFkZEhlYWRlckljb246 IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNlbGYgPSB0aGlzOworICAgICAg ICBtID0gbmV3ICh0aGlzLmNvbGxlY3Rpb24ubW9kZWwpOworICAgICAgICB0 aGlzLmNvbGxlY3Rpb24uYWRkKG0pCisgICAgICAgIGUucHJldmVudERlZmF1 bHQoKTsKKyAgICAgIH0sCisgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpOworICAgICAgICAgIC8vdGhp cy4kZWwuaHRtbCgiPGkgY2xhc3M9J2ZhIGZhLXBsdXMtY2lyY2xlJz48L2k+ Iik7CisgICAgICAgICAgdGhpcy4kZWwuaHRtbCgiPGxhYmVsPjxhPjxzcGFu IHN0eWxlPSdmb250LXdlaWdodDpub3JtYWw7Jz5BcnJheSBWYWx1ZXM8L2E+ PC9zcGFuPjwvbGFiZWw+IDxidXR0b24gY2xhc3M9J2J0bi1zbSBidG4tZGVm YXVsdCBhZGQnPkFERDwvYnV0dG9uPiIpOworICAgICAgICAgIHRoaXMuZGVs ZWdhdGVFdmVudHMoKTsKKyAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg IH0KKyAgfSk7CisKKworICB2YXIgYXJyYXlDZWxsTW9kZWwgPSBCYWNrYm9u ZS5Nb2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAgICAgIHZh bHVlOiB1bmRlZmluZWQKKyAgICB9CisgIH0pOworCisgIC8qKgorICAgICBD dXN0b20gSW5wdXRBcnJheUNlbGxFZGl0b3IgZm9yIGVkaXRpbmcgdXNlciBp bnB1dCBhcnJheSBmb3IgZGVidWdnZXIuCisgICAqLworICB2YXIgSW5wdXRB cnJheUNlbGxFZGl0b3IgPSBCYWNrZ3JpZC5FeHRlbnNpb24uSW5wdXRBcnJh eUNlbGxFZGl0b3IgPQorICAgIEJhY2tncmlkLkNlbGxFZGl0b3IuZXh0ZW5k KHsKKyAgICAgIHRhZ05hbWU6ICJkaXYiLAorCisgICAgZXZlbnRzOiB7Cisg ICAgICAnYmx1cic6ICdsb3N0Rm9jdXMnCisgICAgfSwKKworICAgIHJlbmRl cjogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCisg ICAgICAgICAgICBhcnJheVZhbHVlc0NvbCA9IHRoaXMubW9kZWwuZ2V0KHRo aXMuY29sdW1uLmdldCgibmFtZSIpKSwKKyAgICAgICAgICAgIHRibCA9ICQo Ijx0YWJsZT48L3RhYmxlPiIpLmFwcGVuZFRvKHRoaXMuJGVsKSwKKyAgICAg ICAgICAgIGdyaWRDb2xzID0gWworICAgICAgICAgICAgICAgICAgICB7bmFt ZTogJ3ZhbHVlJywgbGFiZWw6J0FycmF5IFZhbHVlcycsIHR5cGU6ICd0ZXh0 JywgY2VsbDonc3RyaW5nJywgaGVhZGVyQ2VsbDogQmFja2dyaWQuRXh0ZW5z aW9uLkN1c3RvbUhlYWRlckljb25DZWxsLCBjZWxsSGVhZGVyQ2xhc3Nlczog J3dpZHRoX3BlcmNlbnRfMTAwJ30sCisgICAgICAgICAgICAgICAgICAgIF0s CisgICAgICAgICAgICBncmlkQm9keSA9ICQoIjxkaXYgY2xhc3M9J3BnYWRt aW4tY29udHJvbC1ncm91cCBiYWNrZ3JpZCBmb3JtLWdyb3VwIGNvbC14cy0x MiBvYmplY3Qgc3Vibm9kZSc+PC9kaXY+Iik7CisKKyAgICAgICAgdGhpcy4k ZWwuYXR0cigndGFiaW5kZXgnLCAnMScpOworCisgICAgICAgIGdyaWRDb2xz LnVuc2hpZnQoeworICAgICAgICAgIG5hbWU6ICJwZy1iYWNrZm9ybS1kZWxl dGUiLCBsYWJlbDogIiIsCisgICAgICAgICAgY2VsbDogQmFja2dyaWQuRXh0 ZW5zaW9uLkRlbGV0ZUNlbGwsCisgICAgICAgICAgLy9oZWFkZXJDZWxsOiBC YWNrZ3JpZC5FeHRlbnNpb24uQ3VzdG9tSGVhZGVySWNvbkNlbGwsCisgICAg ICAgICAgZWRpdGFibGU6IGZhbHNlLCBjZWxsX3ByaW9yaXR5OiAtMQorICAg ICAgICB9KTsKKworICAgICAgdGhpcy4kZWwuZW1wdHkoKTsKKyAgICAgIHZh ciBncmlkID0gc2VsZi5ncmlkID0gbmV3IEJhY2tncmlkLkdyaWQoeworICAg ICAgICAgICAgY29sdW1uczogZ3JpZENvbHMsCisgICAgICAgICAgICBjb2xs ZWN0aW9uOmFycmF5VmFsdWVzQ29sCisgICAgICAgICAgfSk7CisKKyAgICAg IGdyaWQucmVuZGVyKCk7CisKKyAgICAgIGdyaWRCb2R5LmFwcGVuZChncmlk LiRlbCkKKworICAgICAgdGhpcy4kZWwuaHRtbChncmlkQm9keSk7CisKKyAg ICAgICQoc2VsZi4kZWwpLnBnTWFrZVZpc2libGUoJ2JhY2tmb3JtLXRhYicp OworICAgICAgc2VsZi5kZWxlZ2F0ZUV2ZW50cygpOworCisgICAgICByZXR1 cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoKKyAgICAgKiBDYWxsIGJhY2sg ZnVuY3Rpb24gd2hlbiB0aGUgZ3JpZCBsb3N0IHRoZSBmb2N1cworICAgICAq LworICAgIGxvc3RGb2N1czogZnVuY3Rpb24oZXYpIHsKKworICAgICAgdmFy IHNlbGYgPSB0aGlzLAorICAgICAgLyoKKyAgICAgICAqIEZ1bmN0aW9uIHRv IGRldGVybWluZSB3aGV0aGVyIG9uZSBkb20gZWxlbWVudCBpcyBkZXNjZW5k YW50IG9mIGFub3RoZXIKKyAgICAgICAqIGRvbSBlbGVtZW50LgorICAgICAg ICovCisgICAgICBpc0Rlc2NlbmRhbnQgPSBmdW5jdGlvbiAocGFyZW50LCBj aGlsZCkgeworICAgICAgICAgdmFyIG5vZGUgPSBjaGlsZC5wYXJlbnROb2Rl OworICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAg ICAgIGlmIChub2RlID09IHBhcmVudCkgeworICAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgbm9k ZSA9IG5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgIH0KKyAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIC8qCisgICAgICAgKiBCZXR3 ZWVuIGxlYXZpbmcgdGhlIG9sZCBlbGVtZW50IGZvY3VzIGFuZCBlbnRlcmlu ZyB0aGUgbmV3IGVsZW1lbnQgZm9jdXMgdGhlCisgICAgICAgKiBhY3RpdmUg ZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQvYm9keSBpdHNlbGYgc28gYWRkIHRp bWVvdXQgdG8gZ2V0IHRoZSBwcm9wZXIKKyAgICAgICAqIGZvY3VzZWQgYWN0 aXZlIGVsZW1lbnQuCisgICAgICAgKi8KKyAgICAgIHNldFRpbWVvdXQoZnVu Y3Rpb24oKSB7CisgICAgICAgIGlmIChzZWxmLiRlbFswXSAhPSBkb2N1bWVu dC5hY3RpdmVFbGVtZW50ICYmICFpc0Rlc2NlbmRhbnQoc2VsZi4kZWxbMF0s IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXsKKyAgICAgICAgICB2YXIgbSA9 IHNlbGYubW9kZWwsCisgICAgICAgICAgICBjb2x1bW4gPSBzZWxmLmNvbHVt bjsKKyAgICAgICAgICBtLnRyaWdnZXIoJ2JhY2tncmlkOmVkaXRlZCcsIG0s IGNvbHVtbiwgbmV3IEJhY2tncmlkLkNvbW1hbmQoZXYpKTsKKworICAgICAg ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIGlmIChz ZWxmLmdyaWQpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmdyaWQucmVtb3Zl KCk7CisgICAgICAgICAgICAgICAgc2VsZi5ncmlkID0gbnVsbDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICB9LCAxMCk7CisKKworICAgICAgICB9fSwx MCk7CisgICAgICByZXR1cm47CisgICAgfQorICB9KTsKKworICAvKgorICAg KiBUaGlzIHdpbGwgaGVscCB1cyB0cmFuc2Zvcm0gdGhlIHVzZXIgaW5wdXQg c3RyaW5nIGFycmF5IHZhbHVlcyBpbiBwcm9wZXIgZm9ybWF0IHRvIGJlCisg ICAqIGRpc3BsYXllZCBpbiB0aGUgY2VsbC4KKyAgICovCisgIHZhciBJbnB1 dFN0cmluZ0FycmF5Q2VsbEZvcm1hdHRlciA9IEJhY2tncmlkLkV4dGVuc2lv bi5JbnB1dFN0cmluZ0FycmF5Q2VsbEZvcm1hdHRlciA9CisgICAgZnVuY3Rp b24gKCkge307CisgIF8uZXh0ZW5kKElucHV0U3RyaW5nQXJyYXlDZWxsRm9y bWF0dGVyLnByb3RvdHlwZSwgeworICAgIC8qKgorICAgICAqIFRha2VzIGEg cmF3IHZhbHVlIGZyb20gYSBtb2RlbCBhbmQgcmV0dXJucyBhbiBvcHRpb25h bGx5IGZvcm1hdHRlZAorICAgICAqIHN0cmluZyBmb3IgZGlzcGxheS4KKyAg ICAgKi8KKyAgICBmcm9tUmF3OiBmdW5jdGlvbiAocmF3RGF0YSwgbW9kZWwp IHsKKyAgICAgICAgdmFyIHZhbHVlcyA9IFtdCisgICAgICAgIHJhd0RhdGEu ZWFjaChmdW5jdGlvbihtKXsKKyAgICAgICAgICAgIHZhciB2YWwgPSBtLmdl dCgndmFsdWUnKTsKKyAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHZh bCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCgibnVsbCIpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMu cHVzaChtLmdldCgidmFsdWUiKSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICApOworICAgICAgICByZXR1cm4gdmFsdWVzLnRvU3Ry aW5nKCk7CisgICAgfSwKKyAgICB0b1JhdzogZnVuY3Rpb24gKGZvcm1hdHRl ZERhdGEsIG1vZGVsKSB7CisgICAgICByZXR1cm4gZm9ybWF0dGVkRGF0YTsK KyAgICB9CisgIH0pOworCisgIC8qCisgICAqIFRoaXMgd2lsbCBoZWxwIHVz IHRyYW5zZm9ybSB0aGUgdXNlciBpbnB1dCBpbnRlZ2VyIGFycmF5IHZhbHVl cyBpbiBwcm9wZXIgZm9ybWF0IHRvIGJlCisgICAqIGRpc3BsYXllZCBpbiB0 aGUgY2VsbC4KKyAgICovCisgIHZhciBJbnB1dEludGVnZXJBcnJheUNlbGxG b3JtYXR0ZXIgPSBCYWNrZ3JpZC5FeHRlbnNpb24uSW5wdXRJbnRlZ2VyQXJy YXlDZWxsRm9ybWF0dGVyID0KKyAgICBmdW5jdGlvbiAoKSB7fTsKKyAgXy5l eHRlbmQoSW5wdXRJbnRlZ2VyQXJyYXlDZWxsRm9ybWF0dGVyLnByb3RvdHlw ZSwgeworICAgIC8qKgorICAgICAqIFRha2VzIGEgcmF3IHZhbHVlIGZyb20g YSBtb2RlbCBhbmQgcmV0dXJucyBhbiBvcHRpb25hbGx5IGZvcm1hdHRlZAor ICAgICAqIHN0cmluZyBmb3IgZGlzcGxheS4KKyAgICAgKi8KKyAgICBmcm9t UmF3OiBmdW5jdGlvbiAocmF3RGF0YSwgbW9kZWwpIHsKKyAgICAgICAgdmFy IHZhbHVlcyA9IFtdCisgICAgICAgIHJhd0RhdGEuZWFjaChmdW5jdGlvbiht KXsKKyAgICAgICAgICAgIHZhciB2YWwgPSBtLmdldCgndmFsdWUnKTsKKyAg ICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHZhbCkpIHsKKyAgICAgICAg ICAgICAgICB2YWx1ZXMucHVzaCgibnVsbCIpOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChtLmdldCgidmFs dWUiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAp OworICAgICAgICByZXR1cm4gdmFsdWVzLnRvU3RyaW5nKCk7CisgICAgfSwK KyAgICB0b1JhdzogZnVuY3Rpb24gKGZvcm1hdHRlZERhdGEsIG1vZGVsKSB7 CisgICAgICAgIGZvcm1hdHRlZERhdGEuZWFjaChmdW5jdGlvbihtKXsKKyAg ICAgICAgICAgIG0uc2V0KCJ2YWx1ZSIsIHBhcnNlSW50KG0uZ2V0KCd2YWx1 ZScpKSwge3NpbGVudDogdHJ1ZX0pOworICAgICAgICB9KTsKKworICAgICAg cmV0dXJuIGZvcm1hdHRlZERhdGE7CisgICAgfQorICB9KTsKKworICAvKgor ICAgKiAgSW5wdXRTdHJpbmdBcnJheUNlbGwgZm9yIHJlbmRlcmluZyBhbmQg dGFraW5nIGlucHV0IGZvciBzdHJpbmcgYXJyYXkgdHlwZSBpbiBkZWJ1Z2dl cgorICAgKi8KKyAgdmFyIElucHV0U3RyaW5nQXJyYXlDZWxsID0gQmFja2dy aWQuRXh0ZW5zaW9uLklucHV0U3RyaW5nQXJyYXlDZWxsID0gQmFja2dyaWQu Q2VsbC5leHRlbmQoeworICAgIGNsYXNzTmFtZTogIndpZHRoX3BlcmNlbnRf MjUiLAorICAgIGZvcm1hdHRlcjogSW5wdXRTdHJpbmdBcnJheUNlbGxGb3Jt YXR0ZXIsCisgICAgZWRpdG9yOiBJbnB1dEFycmF5Q2VsbEVkaXRvciwKKwor ICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgQmFja2dyaWQu Q2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVu dHMpOworICAgICAgICAvLyBzZXQgdmFsdWUgdG8gZW1wdHkgYXJyYXkuCisg ICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29sbGVjdGlvbikpIHsK KyAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IG5ldyAoQmFja2JvbmUu Q29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgICAgbW9kZWw6IGFycmF5 Q2VsbE1vZGVsfSkpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tb2Rl bC5zZXQodGhpcy5jb2x1bW4uZ2V0KCduYW1lJyksIHRoaXMuY29sbGVjdGlv bik7CisKKyAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxlY3Rpb24s ICJyZW1vdmUiLCB0aGlzLnJlbmRlcik7CisgICAgfSwKKyAgfSk7CisKKyAg LyoKKyAgICogIElucHV0SW50ZWdlckFycmF5Q2VsbCBmb3IgcmVuZGVyaW5n IGFuZCB0YWtpbmcgaW5wdXQgZm9yIGludGVnZXIgYXJyYXkgdHlwZSBpbiBk ZWJ1Z2dlcgorICAgKi8KKyAgdmFyIElucHV0SW50ZWdlckFycmF5Q2VsbCA9 IEJhY2tncmlkLkV4dGVuc2lvbi5JbnB1dEludGVnZXJBcnJheUNlbGwgPSBC YWNrZ3JpZC5DZWxsLmV4dGVuZCh7CisgICAgY2xhc3NOYW1lOiAid2lkdGhf cGVyY2VudF8yNSIsCisgICAgZm9ybWF0dGVyOiBJbnB1dEludGVnZXJBcnJh eUNlbGxGb3JtYXR0ZXIsCisgICAgZWRpdG9yOiBJbnB1dEFycmF5Q2VsbEVk aXRvciwKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAg QmFja2dyaWQuQ2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlz LCBhcmd1bWVudHMpOworICAgICAgICAvLyBzZXQgdmFsdWUgdG8gZW1wdHkg YXJyYXkuCisgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29sbGVj dGlvbikpIHsKKyAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IG5ldyAo QmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgICAgbW9k ZWw6IGFycmF5Q2VsbE1vZGVsfSkpOworICAgICAgICB9CisKKworICAgICAg ICB0aGlzLm1vZGVsLnNldCh0aGlzLmNvbHVtbi5nZXQoJ25hbWUnKSx0aGlz LmNvbGxlY3Rpb24pOworCisgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5j b2xsZWN0aW9uLCAicmVtb3ZlIiwgdGhpcy5yZW5kZXIpOworICAgIH0sCisg IH0pOworCiAgIHJldHVybiBCYWNrZ3JpZDsKIAogfSkpOwpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvZGVtaXJyb3IvYWRkb24vc2Vs ZWN0aW9uL2FjdGl2ZS1saW5lLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pz L2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lLmpzCmlu ZGV4IDIyZGEyZTAuLjQyMWNlZjUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3N0YXRpYy9qcy9jb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlvbi9hY3RpdmUt bGluZS5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29kZW1pcnJv ci9hZGRvbi9zZWxlY3Rpb24vYWN0aXZlLWxpbmUuanMKQEAgLTksOSArOSw5 IEBACiAKIChmdW5jdGlvbihtb2QpIHsKICAgaWYgKHR5cGVvZiBleHBvcnRz ID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8v IENvbW1vbkpTCi0gICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWly cm9yIikpOworICAgIG1vZChyZXF1aXJlKCJjb2RlbWlycm9yIikpOwogICBl bHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5l LmFtZCkgLy8gQU1ECi0gICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJy b3IiXSwgbW9kKTsKKyAgICBkZWZpbmUoWyJjb2RlbWlycm9yIl0sIG1vZCk7 CiAgIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKICAgICBtb2QoQ29kZU1p cnJvcik7CiB9KShmdW5jdGlvbihDb2RlTWlycm9yKSB7CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci9fX2luaXRfXy5weSBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL19faW5pdF9fLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDk5MDQKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci9fX2luaXRf Xy5weQpAQCAtMCwwICsxLDEwODggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMK KyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxNiwgVGhlIHBnQWRtaW4g RGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2Vk IHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkEgYmx1ZXByaW50IG1vZHVsZSBp bXBsZW1lbnRpbmcgdGhlIGRlYnVnZ2VyIiIiCisKK01PRFVMRV9OQU1FID0g J2RlYnVnZ2VyJworCitpbXBvcnQganNvbgoraW1wb3J0IHJhbmRvbQorZnJv bSBmbGFzayBpbXBvcnQgdXJsX2ZvciwgUmVzcG9uc2UsIHJlbmRlcl90ZW1w bGF0ZSwgcmVxdWVzdCwgbWFrZV9yZXNwb25zZSwganNvbmlmeSwgc2Vzc2lv bgorZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCitm cm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgYmFkX3JlcXVlc3QKK2Zy b20gZmxhc2suZXh0LmJhYmVsIGltcG9ydCBnZXR0ZXh0Citmcm9tIGZsYXNr LmV4dC5zZWN1cml0eSBpbXBvcnQgbG9naW5fcmVxdWlyZWQKK2Zyb20gcGdh ZG1pbi51dGlscy5kcml2ZXIgaW1wb3J0IGdldF9kcml2ZXIKK2Zyb20gY29u ZmlnIGltcG9ydCBQR19ERUZBVUxUX0RSSVZFUgorZnJvbSBwZ2FkbWluLnV0 aWxzLmFqYXggaW1wb3J0IG1ha2VfanNvbl9yZXNwb25zZSwgXAorICAgIG1h a2VfcmVzcG9uc2UgYXMgYWpheF9yZXNwb25zZSwgaW50ZXJuYWxfc2VydmVy X2Vycm9yCitmcm9tIHBnYWRtaW4udXRpbHMubWVudSBpbXBvcnQgUGFuZWwK KworIyBDb25zdGFudHMKK0FTWU5DX09LID0gMQorCisKK2NsYXNzIERlYnVn Z2VyTW9kdWxlKFBnQWRtaW5Nb2R1bGUpOgorICAgICIiIgorICAgIGNsYXNz IERlYnVnZ2VyTW9kdWxlKFBnQWRtaW5Nb2R1bGUpCisKKyAgICAgICAgQSBt b2R1bGUgY2xhc3MgZm9yIGRlYnVnZ2VyIHdoaWNoIGlzIGRlcml2ZWQgZnJv bSBQZ0FkbWluTW9kdWxlLgorCisgICAgTWV0aG9kczoKKyAgICAtLS0tLS0t CisgICAgKiBnZXRfb3duX2phdmFzY3JpcHRzKHNlbGYpCisgICAgICAtIE1l dGhvZCBpcyB1c2VkIHRvIGxvYWQgdGhlIHJlcXVpcmVkIGphdmFzY3JpcHQg ZmlsZXMgZm9yIGRlYnVnZ2VyIG1vZHVsZQorCisgICAgIiIiCisKKyAgICBk ZWYgZ2V0X293bl9qYXZhc2NyaXB0cyhzZWxmKToKKyAgICAgICAgc2NyaXB0 cyA9IGxpc3QoKQorICAgICAgICBmb3IgbmFtZSwgc2NyaXB0IGluIFsKKyAg ICAgICAgICAgICAgICBbJ3BnYWRtaW4udG9vbHMuZGVidWdnZXIuY29udHJv bGxlcicsICdqcy9kZWJ1Z2dlciddLAorICAgICAgICAgICAgICAgIFsncGdh ZG1pbi50b29scy5kZWJ1Z2dlci51aScsICdqcy9kZWJ1Z2dlcl91aSddLAor ICAgICAgICAgICAgICAgIFsncGdhZG1pbi50b29scy5kZWJ1Z2dlci5kaXJl Y3QnLCAnanMvZGlyZWN0J10KKyAgICAgICAgICAgICAgICBdOgorICAgICAg ICAgICAgc2NyaXB0cy5hcHBlbmQoeworICAgICAgICAgICAgICAgICduYW1l JzogbmFtZSwKKyAgICAgICAgICAgICAgICAncGF0aCc6IHVybF9mb3IoJ2Rl YnVnZ2VyLmluZGV4JykgKyBzY3JpcHQsCisgICAgICAgICAgICAgICAgJ3do ZW4nOiBOb25lCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgc2NyaXB0 cy5hcHBlbmQoeworICAgICAgICAgICAgJ25hbWUnOiAnY29kZW1pcnJvci5h Y3RpdmVsaW5lJywKKyAgICAgICAgICAgICdwYXRoJzogdXJsX2Zvcignc3Rh dGljJywgZmlsZW5hbWU9J2pzL2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9u L2FjdGl2ZS1saW5lJyksCisgICAgICAgICAgICAnZGVwcyc6IFsnY29kZW1p cnJvciddLAorICAgICAgICAgICAgJ2V4cG9ydHMnOiAnQ29kZU1pcnJvci5h ZGRvbi5zZWxlY3Rpb24uYWN0aXZlLWxpbmUnLAorICAgICAgICAgICAgJ3By ZWxvYWRlZCc6IFRydWUKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgcmV0 dXJuIHNjcmlwdHMKKworYmx1ZXByaW50ID0gRGVidWdnZXJNb2R1bGUoTU9E VUxFX05BTUUsIF9fbmFtZV9fKQorCisKK0BibHVlcHJpbnQucm91dGUoIi8i KQorQGxvZ2luX3JlcXVpcmVkCitkZWYgaW5kZXgoKToKKyAgICByZXR1cm4g YmFkX3JlcXVlc3QoZXJyb3Jtc2c9Z2V0dGV4dCgiVGhpcyBVUkwgY2FuIG5v dCBiZSBjYWxsZWQgZGlyZWN0bHkhIikpCisKKworQGJsdWVwcmludC5yb3V0 ZSgiL2pzL2RlYnVnZ2VyLmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHNj cmlwdCgpOgorICAgICIiInJlbmRlciB0aGUgbWFpbiBkZWJ1Z2dlciBqYXZh c2NyaXB0IGZpbGUiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9 cmVuZGVyX3RlbXBsYXRlKCJkZWJ1Z2dlci9qcy9kZWJ1Z2dlci5qcyIsIF89 Z2V0dGV4dCksCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAsCisg ICAgICAgICAgICAgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZh c2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKCIvanMvZGVidWdnZXJf dWkuanMiKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgc2NyaXB0X2RlYnVnZ2Vy X2pzKCk6CisgICAgIiIicmVuZGVyIHRoZSBkZWJ1Z2dlciBVSSBqYXZhc2Ny aXB0IGZpbGUiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVu ZGVyX3RlbXBsYXRlKCJkZWJ1Z2dlci9qcy9kZWJ1Z2dlcl91aS5qcyIsIF89 Z2V0dGV4dCksCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAsCisg ICAgICAgICAgICAgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZh c2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKCIvanMvZGlyZWN0Lmpz IikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHNjcmlwdF9kZWJ1Z2dlcl9kaXJl Y3RfanMoKToKKyAgICAiIiJyZW5kZXIgdGhlIGphdmFzY3JpcHQgZmlsZSBy ZXF1aXJlZCBzZW5kIGFuZCByZWNlaXZlIHRoZSByZXNwb25zZSBmcm9tIHNl cnZlciBmb3IgZGVidWdnaW5nIiIiCisgICAgcmV0dXJuIFJlc3BvbnNlKHJl c3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgiZGVidWdnZXIvanMvZGlyZWN0Lmpz IiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTIw MCwKKyAgICAgICAgICAgICAgICAgICAgbWltZXR5cGU9ImFwcGxpY2F0aW9u L2phdmFzY3JpcHQiKQorCisKK0BibHVlcHJpbnQucm91dGUoJy9pbml0L2Z1 bmN0aW9uLzxpbnQ6c2lkPi88aW50OmRpZD4vPGludDpzY2lkPi88aW50OmZp ZD4nLCBtZXRob2RzPVsnR0VUJ10pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBp bml0X2Z1bmN0aW9uKHNpZCwgZGlkLCBzY2lkLCBmaWQpOgorICAgICIiIgor ICAgIGluaXRfZnVuY3Rpb24oc2lkLCBkaWQsIHNjaWQsIGZpZCkKKworICAg IFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIHRvIGluaXRpYWxpemUgdGhl IGZ1bmN0aW9uIHJlcXVpcmVkIGZvciBkZWJ1Z2dpbmcuCisgICAgVGhpcyBt ZXRob2QgaXMgYWxzbyByZXNwb25zaWJsZSBmb3Igc3RvcmluZyB0aGUgYWxs IGZ1bmN0aW9ucyBkYXRhIHRvIHNlc3Npb24gdmFyaWFibGUuCisgICAgVGhp cyBpcyBvbmx5IHJlcXVpcmVkIGZvciBkaXJlY3QgZGVidWdnaW5nLiBBcyBJ bmRpcmVjdCBkZWJ1Z2dpbmcgZG9lcyBub3QgcmVxdWlyZSB0aGVzZSBkYXRh IGJlY2F1c2UgdXNlciB3aWxsCisgICAgcHJvdmlkZSBhbGwgdGhlIGFyZ3Vt ZW50cyBhbmQgb3RoZXIgZnVuY3Rpb25zIGluZm9ybWF0aW9uIHRocm91Z2gg YW5vdGhlciBzZXNzaW9uIHRvIGludm9rZSB0aGUgdGFyZ2V0LgorCisgICAg UGFyYW1ldGVyczoKKyAgICAgICAgc2lkCisgICAgICAgIC0gU2VydmVyIElk CisgICAgICAgIGRpZAorICAgICAgICAtIERhdGFiYXNlIElkCisgICAgICAg IHNjaWQKKyAgICAgICAgLSBTY2hlbWEgSWQKKyAgICAgICAgZmlkCisgICAg ICAgIC0gRnVuY3Rpb24gSWQKKyAgICAiIiIKKyAgICBtYW5hZ2VyID0gZ2V0 X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2Vy KHNpZCkKKyAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1kaWQp CisKKyAgICAjIEdldCB0aGUgc2VydmVyIHZlcnNpb24sIHNlcnZlciB0eXBl IGFuZCB1c2VyIGluZm9ybWF0aW9uCisgICAgdmVyID0gbWFuYWdlci52ZXJz aW9uCisgICAgc2VydmVyX3R5cGUgPSBtYW5hZ2VyLnNlcnZlcl90eXBlCisg ICAgdXNlciA9IG1hbmFnZXIudXNlcl9pbmZvCisKKyAgICAjIENoZWNrIHNl cnZlciB0eXBlIGlzIHBwYXMgb3Igbm90CisgICAgcHBhc19zZXJ2ZXIgPSBG YWxzZQorICAgIGlmIHNlcnZlcl90eXBlID09ICdwcGFzJzoKKyAgICAgICAg cHBhc19zZXJ2ZXIgPSBUcnVlOworCisgICAgIyBTZXQgdGhlIHRlbXBsYXRl IHBhdGggcmVxdWlyZWQgdG8gcmVhZCB0aGUgc3FsIGZpbGVzCisgICAgdGVt cGxhdGVfcGF0aCA9ICdkZWJ1Z2dlci9zcWwnCisKKyAgICBzcWwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdnZXRfZnVu Y3Rpb25fZGVidWdfaW5mby5zcWwnXSksIGlzX3BwYXNfZGF0YWJhc2U9cHBh c19zZXJ2ZXIsIGhhc0ZlYXR1cmVGdW5jdGlvbkRlZmF1bHRzPSBUcnVlLCBm aWQ9ZmlkKQorICAgIHN0YXR1cywgcl9zZXQgPSBjb25uLmV4ZWN1dGVfZGlj dChzcWwpCisgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yX3NldCkKKworICAgIHJl dF9zdGF0dXMgPSBzdGF0dXMKKworICAgICMgQ2hlY2sgdGhlIGNvbmRpdGlv biB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRlYnVnZ2FibGUgb3Igbm90 Li4uLgorICAgIGlmIHJfc2V0Wydyb3dzJ11bMF06CisgICAgICAgICMgRnVu Y3Rpb24gd2l0aCBhIGNvbG9uIGluIHRoZSBuYW1lIGNhbm5vdCBiZSBkZWJ1 Z2dlZC4KKyAgICAgICAgIyBJZiB0aGlzIGlzIGFuIEVEQiB3cmFwcGVkIGZ1 bmN0aW9uLCBubyBkZWJ1Z2dpbmcgYWxsb3dlZAorICAgICAgICAjIEZ1bmN0 aW9uIHdpdGggcmV0dXJuIHR5cGUgInRyaWdnZXIiIGNhbiBub3QgYmUgZGVi dWdnZWQuCisgICAgICAgIGlmICI6IiBpbiByX3NldFsncm93cyddWzBdWydu YW1lJ106CisgICAgICAgICAgICByZXRfc3RhdHVzID0gRmFsc2UKKyAgICAg ICAgZWxpZiByX3NldFsncm93cyddWzBdWydyZXR0eXBlJ10gPT0gJ3RyaWdn ZXInOgorICAgICAgICAgICAgcmV0X3N0YXR1cyA9IEZhbHNlCisgICAgICAg IGVsaWYgcHBhc19zZXJ2ZXIgYW5kIHJfc2V0Wydyb3dzJ11bMF1bJ3Byb3Ny YyddLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJyRfX0VEQndyYXBwZWRfXyQnKToK KyAgICAgICAgICAgIHJldF9zdGF0dXMgPSBGYWxzZQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgIyBJZiB1c2VyIGlzIHN1cGVyIHVzZXIgdGhlbiB3 ZSBzaG91bGQgY2hlY2sgZGVidWdnZXIgbGlicmFyeSBpcyBsb2FkZWQgb3Ig bm90CisgICAgICAgICAgICBpZiB1c2VyWydpc19zdXBlcnVzZXInXToKKyAg ICAgICAgICAgICAgICBzdGF0dXNfaW4sIHJpZF9wcmUgPSBjb25uLmV4ZWN1 dGVfc2NhbGFyKCJTSE9XIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyIpCisg ICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1c19pbjoKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcigiRVJST1I6 IENvdWxkbid0IGZldGNoIGRlYnVnZ2VyIHBsdWdpbiBpbmZvcm1hdGlvbiIp CisKKyAgICAgICAgICAgICAgICAjIE5lZWQgdG8gY2hlY2sgaWYgcGx1Z2lu IGlzIHJlYWxseSBsb2FkZWQgb3Igbm90IHdpdGggInBsdWdpbl9kZWJ1Z2dl ciIgc3RyaW5nCisgICAgICAgICAgICAgICAgaWYgcmlkX3ByZToKKyAgICAg ICAgICAgICAgICAgICAgaWYgInBsdWdpbl9kZWJ1Z2dlciIgbm90IGluIHJp ZF9wcmU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXRfc3RhdHVzID0g RmFsc2UKKworICAgICAgICAgICAgc3RhdHVzX2luLCByaWRfdGFyID0gY29u bi5leGVjdXRlX3NjYWxhcigiIFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3By b2MgV0hFUkUgcHJvbmFtZSA9ICdwbGRiZ19nZXRfdGFyZ2V0X2luZm8nICIp CisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzX2luOgorICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoIkVSUk9SOiBDb3Vs ZG4ndCBmZXRjaCBkZWJ1Z2dlciB0YXJnZXQgaW5mb3JtYXRpb24iKQorCisg ICAgICAgICAgICBpZiByaWRfdGFyID09IDA6CisgICAgICAgICAgICAgICAg cmV0X3N0YXR1cyA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgcmV0X3N0 YXR1cyA9IEZhbHNlCisKKyAgICAjIFJldHVybiB0aGUgcmVzcG9uc2UgdGhh dCBmdW5jdGlvbiBjYW4gbm90IGJlIGRlYnVnLi4uCisgICAgaWYgbm90IHJl dF9zdGF0dXM6CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoIkVSUk9SOiBGdW5jdGlvbiBjYW4gbm90IGJlIGRlYnVnLiIpCisKKyAg ICAjIFN0b3JlIHRoZSBmdW5jdGlvbiBpbmZvcm1hdGlvbiBpbiBzZXNzaW9u IHZhcmlhYmxlCisgICAgaWYgJ2Z1bmN0aW9uRGF0YScgbm90IGluIHNlc3Np b246CisgICAgICAgIGZ1bmN0aW9uX2RhdGEgPSBkaWN0KCkKKyAgICBlbHNl OgorICAgICAgICBmdW5jdGlvbl9kYXRhID0gc2Vzc2lvblsnZnVuY3Rpb25E YXRhJ10KKworICAgIGZ1bmN0aW9uX2RhdGEgPSB7CisgICAgICAgICdvaWQn OiBmaWQsCisgICAgICAgICduYW1lJzogcl9zZXRbJ3Jvd3MnXVswXVsnbmFt ZSddLAorICAgICAgICAnaXNfZnVuYyc6IHJfc2V0Wydyb3dzJ11bMF1bJ2lz ZnVuYyddLAorICAgICAgICAnaXNfY2FsbGFibGUnOiBGYWxzZSwKKyAgICAg ICAgJ3NjaGVtYSc6IHJfc2V0Wydyb3dzJ11bMF1bJ3NjaGVtYW5hbWUnXSwK KyAgICAgICAgJ2xhbmd1YWdlJzogcl9zZXRbJ3Jvd3MnXVswXVsnbGFubmFt ZSddLAorICAgICAgICAncmV0dXJuX3R5cGUnOiByX3NldFsncm93cyddWzBd WydyZXR0eXBlJ10sCisgICAgICAgICdhcmdzX3R5cGUnOiByX3NldFsncm93 cyddWzBdWydwcm9hcmd0eXBlbmFtZXMnXSwKKyAgICAgICAgJ2FyZ3NfbmFt ZSc6IHJfc2V0Wydyb3dzJ11bMF1bJ3Byb2FyZ25hbWVzJ10sCisgICAgICAg ICdhcmdfbW9kZSc6IHJfc2V0Wydyb3dzJ11bMF1bJ3Byb2FyZ21vZGVzJ10s CisgICAgICAgICdhcmdzX3ZhbHVlJzogJycKKyAgICB9CisKKyAgICBzZXNz aW9uWydmdW5jdGlvbkRhdGEnXSA9IGZ1bmN0aW9uX2RhdGE7CisKKyAgICBk YXRhID0ge30KKyAgICBkYXRhWyduYW1lJ10gPSByX3NldFsncm93cyddWzBd Wydwcm9hcmduYW1lcyddCisgICAgZGF0YVsndHlwZSddID0gcl9zZXRbJ3Jv d3MnXVswXVsncHJvYXJndHlwZW5hbWVzJ10KKyAgICBkYXRhWyd1c2VfZGVm YXVsdCddID0gcl9zZXRbJ3Jvd3MnXVswXVsncHJvbmFyZ2RlZmF1bHRzJ10K KyAgICBkYXRhWydkZWZhdWx0X3ZhbHVlJ10gPSByX3NldFsncm93cyddWzBd Wydwcm9hcmdkZWZhdWx0cyddCisgICAgZGF0YVsncmVxdWlyZV9pbnB1dCdd ID0gVHJ1ZQorCisgICAgIyBCZWxvdyB3aWxsIGNoZWNrIGRvIHdlIHJlYWxs eSByZXF1aXJlZCBmb3IgdGhlIHVzZXIgaW5wdXQgYXJndW1lbnRzIGFuZCBz aG93IGlucHV0IGRpYWxvZworICAgIGlmIG5vdCByX3NldFsncm93cyddWzBd Wydwcm9hcmd0eXBlbmFtZXMnXToKKyAgICAgICAgZGF0YVsncmVxdWlyZV9p bnB1dCddID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBpZiByX3NldFsn cm93cyddWzBdWydwa2cnXSAhPSAwIGFuZCByX3NldFsncm93cyddWzBdWydw a2djb25zb2lkJ10gIT0gMDoKKyAgICAgICAgICAgIGRhdGFbJ3JlcXVpcmVf aW5wdXQnXSA9IFRydWUKKworICAgICAgICBpZiByX3NldFsncm93cyddWzBd Wydwcm9hcmdtb2RlcyddOgorICAgICAgICAgICAgcHJvX2FyZ19tb2RlcyA9 IHJfc2V0Wydyb3dzJ11bMF1bJ3Byb2FyZ21vZGVzJ10uc3BsaXQoIiwiKTsK KyAgICAgICAgICAgIGZvciBwcl9hcmdfbW9kZSBpbiBwcm9fYXJnX21vZGVz OgorICAgICAgICAgICAgICAgIGlmIHByX2FyZ19tb2RlID09ICdvJyBvciBw cl9hcmdfbW9kZSA9PSAndCc6CisgICAgICAgICAgICAgICAgICAgIGRhdGFb J3JlcXVpcmVfaW5wdXQnXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgICAgIGRhdGFbJ3JlcXVpcmVfaW5wdXQnXSA9IFRydWUKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICByX3NldFsncm93cyddWzBd WydyZXF1aXJlX2lucHV0J10gPSBkYXRhWydyZXF1aXJlX2lucHV0J10KKwor ICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICAg ICAgZGF0YT1yX3NldFsncm93cyddLAorICAgICAgICAgICAgICAgIHN0YXR1 cz0yMDAKKyAgICAgICAgICAgICAgICApCisKKworQGJsdWVwcmludC5yb3V0 ZSgnL2RpcmVjdC88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WydHRVQnXSkK K0Bsb2dpbl9yZXF1aXJlZAorZGVmIGRpcmVjdF9uZXcodHJhbnNfaWQpOgor ICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNzaW9uWydkZWJ1Z2dlckRhdGEnXQor ICAgICMgUmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uIGlmIHRyYW5zYWN0aW9u IGlkIG5vdCBmb3VuZAorICAgIGlmIHN0cih0cmFuc19pZCkgbm90IGluIGRl YnVnZ2VyX2RhdGE6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9u c2UoZGF0YT17J3N0YXR1cyc6IFRydWV9KQorCisgICAgb2JqID0gZGVidWdn ZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAgIyBpZiBpbmRpcmVjdCBk ZWJ1Z2dpbmcgcGFzcyB2YWx1ZSAwIHRvIGNsaWVudCBhbmQgZm9yIGRpcmVj dCBkZWJ1Z2dpbmcgcGFzcyBpdCB0byAxCisgICAgZGVidWdfdHlwZSA9IDAg aWYgb2JqWydkZWJ1Z190eXBlJ10gPT0gJ2luZGlyZWN0JyBlbHNlIDEKKwor ICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICJkZWJ1Z2dl ci9kaXJlY3QuaHRtbCIsCisgICAgICAgIF89Z2V0dGV4dCwKKyAgICAgICAg ZnVuY3Rpb25fbmFtZT0ndGVzdCcsCisgICAgICAgIHVuaXF1ZUlkPXRyYW5z X2lkLAorICAgICAgICBkZWJ1Z190eXBlPWRlYnVnX3R5cGUsCisgICAgICAg IHN0eWxlc2hlZXRzPVt1cmxfZm9yKCdkZWJ1Z2dlci5zdGF0aWMnLCBmaWxl bmFtZT0nY3NzL2RlYnVnZ2VyLmNzcycpXQorICAgICAgICApCisKKworQGJs dWVwcmludC5yb3V0ZSgnL2luaXRpYWxpemVfdGFyZ2V0LzxkZWJ1Z190eXBl Pi88aW50OnNpZD4vPGludDpkaWQ+LzxpbnQ6c2NpZD4vPGludDpmdW5jX2lk PicsIG1ldGhvZHM9WydHRVQnLCAnUE9TVCddKQorQGxvZ2luX3JlcXVpcmVk CitkZWYgaW5pdGlhbGl6ZV90YXJnZXQoZGVidWdfdHlwZSwgc2lkLCBkaWQs IHNjaWQsIGZ1bmNfaWQpOgorICAgICIiIgorICAgIGluaXRpYWxpemVfdGFy Z2V0KGRlYnVnX3R5cGUsIHNpZCwgZGlkLCBzY2lkLCBmdW5jX2lkKQorCisg ICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFu IGFzeW5jaHJvbm91cyBjb25uZWN0aW9uLgorICAgIEl0IHdpbGwgYWxzbyBj cmVhdGUgYSB1bmlxdWUgdHJhbnNhY3Rpb24gaWQgYW5kIHN0b3JlIHRoZSBp bmZvcm1hdGlvbgorICAgIGludG8gc2Vzc2lvbiB2YXJpYWJsZS4KKworICAg IFBhcmFtZXRlcnM6CisgICAgICAgIGRlYnVnX3R5cGUKKyAgICAgICAgLSBU eXBlIG9mIGRlYnVnZ2luZyAoRGlyZWN0IG9yIEluZGlyZWN0KQorICAgICAg ICBzaWQKKyAgICAgICAgLSBTZXJ2ZXIgSWQKKyAgICAgICAgZGlkCisgICAg ICAgIC0gRGF0YWJhc2UgSWQKKyAgICAgICAgc2NpZAorICAgICAgICAtIFNj aGVtYSBJZAorICAgICAgICBmdW5jX2lkCisgICAgICAgIC0gRnVuY3Rpb24g SWQKKyAgICAiIiIKKworICAgICMgQ3JlYXRlIGFzeW5jaHJvbm91cyBjb25u ZWN0aW9uIHVzaW5nIHJhbmRvbSBjb25uZWN0aW9uIGlkLgorICAgIGNvbm5f aWQgPSBzdHIocmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkpCisgICAgdHJ5 OgorICAgICAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RS SVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKHNpZCkKKyAgICAgICAgY29ubiA9 IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9ZGlkLCBjb25uX2lkPWNvbm5faWQp CisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKKworICAg ICMgQ29ubmVjdCB0aGUgU2VydmVyCisgICAgc3RhdHVzLCBtc2cgPSBjb25u LmNvbm5lY3QoKQorICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKG1zZykpCisK KyAgICAjIENyZWF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHRyYW5zYWN0aW9u CisgICAgdHJhbnNfaWQgPSBzdHIocmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5 OSkpCisKKyAgICAjIElmIHRoZXJlIGlzIG5vIGRlYnVnZ2luZyBpbmZvcm1h dGlvbiBpbiBzZXNzaW9uIHZhcmlhYmxlIHRoZW4gY3JlYXRlIHRoZSBzdG9y ZSB0aGF0IGluZm9ybWF0aW9uCisgICAgaWYgJ2RlYnVnZ2VyRGF0YScgbm90 IGluIHNlc3Npb246CisgICAgICAgIGRlYnVnZ2VyX2RhdGEgPSBkaWN0KCkK KyAgICBlbHNlOgorICAgICAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsn ZGVidWdnZXJEYXRhJ10KKworICAgIHN0YXR1cyA9IFRydWU7CisKKyAgICAj IEZpbmQgb3V0IHRoZSBkZWJ1Z2dlciB2ZXJzaW9uIGFuZCBzdG9yZSBpdCBp biBzZXNzaW9uIHZhcmlhYmxlcworICAgIHN0YXR1cywgcmlkID0gY29ubi5l eGVjdXRlX3NjYWxhcigKKyAgICAgICAgICAgICAgICAgICAgIlNFTEVDVCBD T1VOVCgqKSBGUk9NIHBnX2NhdGFsb2cucGdfcHJvYyBwIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVz cGFjZSBuIE9OIHAucHJvbmFtZXNwYWNlID0gbi5vaWQgXAorICAgICAgICAg ICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSBBTlkoY3VycmVudF9zY2hl bWFzKGZhbHNlKSkgQU5EIHAucHJvbmFtZSA9ICdwbGRiZ19nZXRfcHJveHlf aW5mbyc7IgorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBpZiBub3Qg c3RhdHVzOgorICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9y KGVycm9ybXNnPXJpZCkKKyAgICBlbHNlOgorICAgICAgICBpZiByaWQgPT0g MDoKKyAgICAgICAgICAgIGRlYnVnZ2VyX3ZlcnNpb24gPSAxCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICBzdGF0dXMsIHJpZCA9IGNvbm4uZXhlY3V0 ZV9zY2FsYXIoCisgICAgICAgICAgICAgICAgIlNFTEVDVCBwcm94eWFwaXZl ciBGUk9NIHBsZGJnX2dldF9wcm94eV9pbmZvKCk7IgorICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgIGlmIHJpZCA9PSAyIG9yIHJpZCA9PSAzOgor ICAgICAgICAgICAgICAgIGRlYnVnZ2VyX3ZlcnNpb24gPSByaWQ7CisgICAg ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IEZhbHNl OworCisgICAgIyBXZSBuZWVkIHRvIHBhc3MgdGhlIHZhbHVlIGVudGVyZWQg YnkgdGhlIHVzZXIgaW4gZGlhbG9nIGZvciBkaXJlY3QgZGVidWdnaW5nCisg ICAgIyBIZXJlIHdlIGdldCB0aGUgdmFsdWUgaW4gY2FzZSBvZiBkaXJlY3Qg ZGVidWdnaW5nIHNvIHVwZGF0ZSB0aGUgc2Vzc2lvbiB2YXJpYWJsZXMgYWNj b3JkaW5nbHkKKyAgICAjIEZvciBpbmRpcmVjdCBkZWJ1Z2dpbmcgdXNlciB3 aWxsIHByb3ZpZGUgdGhlIGRhdGEgZnJvbSBhbm90aGVyIHNlc3Npb24gc28g YmVsb3cgY29uZGl0aW9uIHdpbGwgYmUgYmUgcmVxdWlyZWQKKyAgICBpZiBy ZXF1ZXN0Lm1ldGhvZCA9PSAnUE9TVCc6CisgICAgICAgIGRhdGEgPSBqc29u LmxvYWRzKHJlcXVlc3QudmFsdWVzWydkYXRhJ10pCisgICAgICAgIGlmIGRh dGE6CisgICAgICAgICAgICBkID0gc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ10K KyAgICAgICAgICAgIGRbJ2FyZ3NfdmFsdWUnXSA9IGRhdGEKKyAgICAgICAg ICAgIHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddID0gZAorCisgICAgIyBVcGRh dGUgdGhlIGRlYnVnZ2VyIGRhdGEgc2Vzc2lvbiB2YXJpYWJsZQorICAgICMg SGVyZSBmcmFtZV9pZCBpcyByZXF1aXJlZCB3aGVuIHVzZXIgZGVidWcgdGhl IG11bHRpbGV2ZWwgZnVuY3Rpb24uIFdoZW4gdXNlciBzZWxlY3QgdGhlIGZy YW1lIGZyb20gY2xpZW50IHdlCisgICAgIyBuZWVkIHRvIHVwZGF0ZSB0aGUg ZnJhbWUgaGVyZSBhbmQgc2V0IHRoZSBicmVha3BvaW50IGluZm9ybWF0aW9u IG9uIHRoYXQgZnVuY3Rpb24gb2lkCisgICAgZGVidWdnZXJfZGF0YVtzdHIo dHJhbnNfaWQpXSA9IHsKKyAgICAgICAgJ2Nvbm5faWQnOiBjb25uX2lkLAor ICAgICAgICAnc2VydmVyX2lkJzogc2lkLAorICAgICAgICAnZGF0YWJhc2Vf aWQnOiBkaWQsCisgICAgICAgICdmdW5jdGlvbl9pZCc6IGZ1bmNfaWQsCisg ICAgICAgICdkZWJ1Z190eXBlJzogZGVidWdfdHlwZSwKKyAgICAgICAgJ2Rl YnVnZ2VyX3ZlcnNpb24nOiBkZWJ1Z2dlcl92ZXJzaW9uLAorICAgICAgICAn ZnJhbWVfaWQnOiAwCisgICAgICAgIH0KKworICAgICMgU3RvcmUgdGhlIGdy aWQgZGljdGlvbmFyeSBpbnRvIHRoZSBzZXNzaW9uIHZhcmlhYmxlCisgICAg c2Vzc2lvblsnZGVidWdnZXJEYXRhJ10gPSBkZWJ1Z2dlcl9kYXRhCisKKyAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBz dGF0dXMsICdkZWJ1Z2dlclRyYW5zSWQnOiB0cmFuc19pZH0pCisKKworQGJs dWVwcmludC5yb3V0ZSgnL2Nsb3NlLzxpbnQ6dHJhbnNfaWQ+JywgbWV0aG9k cz1bIkdFVCJdKQorZGVmIGNsb3NlKHRyYW5zX2lkKToKKyAgICAiIiIKKyAg ICBjbG9zZSh0cmFuc19pZCkKKworICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQg dG8gY2xvc2UgdGhlIGFzeW5jaHJvbm91cyBjb25uZWN0aW9uCisgICAgYW5k IHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gb2YgdW5pcXVlIHRyYW5zYWN0aW9u IGlkIGZyb20KKyAgICB0aGUgc2Vzc2lvbiB2YXJpYWJsZS4KKworICAgIFBh cmFtZXRlcnM6CisgICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0gdW5pcXVl IHRyYW5zYWN0aW9uIGlkLgorICAgICIiIgorICAgICMgQXMgZGVidWdnZXIg ZGF0YSBpcyBub3QgaW4gc2Vzc2lvbiB0aGF0IG1lYW5zIHdlIGhhdmUgYWxy ZWFkeSBkZWxldGVkIGFuZCBjbG9zZSB0aGUgdGFyZ2V0CisgICAgaWYgJ2Rl YnVnZ2VyRGF0YScgbm90IGluIHNlc3Npb246CisgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRydWV9KQorCisg ICAgZGVidWdnZXJfZGF0YSA9IHNlc3Npb25bJ2RlYnVnZ2VyRGF0YSddCisg ICAgIyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaWYgdHJhbnNhY3Rpb24g aWQgbm90IGZvdW5kCisgICAgaWYgc3RyKHRyYW5zX2lkKSBub3QgaW4gZGVi dWdnZXJfZGF0YToKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25z ZShkYXRhPXsnc3RhdHVzJzogVHJ1ZX0pCisKKyAgICBvYmogPSBkZWJ1Z2dl cl9kYXRhW3N0cih0cmFuc19pZCldCisgICAgdHJ5OgorICAgICAgICBtYW5h Z2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlv bl9tYW5hZ2VyKG9ialsnc2VydmVyX2lkJ10pCisgICAgICAgIGNvbm4gPSBt YW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29u bl9pZD1vYmpbJ2Nvbm5faWQnXSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9c3RyKGUpKQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dlciB2ZXJz aW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQorICAgIGRi Z192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAgICBpZiBk YmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2Rl YnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1wbGF0ZV9w YXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgICMgUmVsZWFzZSB0aGUg Y29ubmVjdGlvbgorICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAg IGlmIG9ialsnZGVidWdfdHlwZSddID09ICdpbmRpcmVjdCc6CisgICAgICAg ICAgICAjIHJlbmRlciB0aGUgU1FMIHRlbXBsYXRlIGFuZCBzZW5kIHRoZSBx dWVyeSB0byBzZXJ2ZXIKKyAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgJ2Fib3J0X3RhcmdldC5z cWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25faWQ9 b2JqWydzZXNzaW9uX2lkJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKyAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgIyBEZWxldGUgdGhl IGV4aXN0aW5nIGRlYnVnZ2VyIGRhdGEgaW4gc2Vzc2lvbiB2YXJpYWJsZQor ICAgICAgICBkZWwgZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorICAg ICAgICBkZWwgc2Vzc2lvblsnZGVidWdnZXJEYXRhJ11bc3RyKHRyYW5zX2lk KV0KKworICAgICAgICAjIFJlbGVhc2UgdGhlIGNvbm5lY3Rpb24gYWNxdWly ZWQgZHVyaW5nIHRoZSBkZWJ1Z2dpbmcKKyAgICAgICAgbWFuYWdlci5yZWxl YXNlKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydjb25u X2lkJ10pCisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0 YT17J3N0YXR1cyc6IFRydWV9KQorICAgIGVsc2U6CisgICAgICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IEZhbHNlfSkK KworCitAYmx1ZXByaW50LnJvdXRlKCcvc3RhcnRfbGlzdGVuZXIvPGludDp0 cmFuc19pZD4nLCBtZXRob2RzPVsnR0VUJ10pCitAbG9naW5fcmVxdWlyZWQK K2RlZiBzdGFydF9kZWJ1Z2dlcl9saXN0ZW5lcih0cmFuc19pZCk6CisgICAg IiIiCisgICAgc3RhcnRfZGVidWdnZXJfbGlzdGVuZXIodHJhbnNfaWQpCisK KyAgICBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSB0byBsaXN0ZW4gYW5k IGdldCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHVz ZXIgZHVyaW5nIGRlYnVnZ2luZworCisgICAgUGFyYW1ldGVyczoKKyAgICAg ICAgdHJhbnNfaWQKKyAgICAgICAgLSBUcmFuc2FjdGlvbiBJRAorICAgICIi IgorCisgICAgZGVidWdnZXJfZGF0YSA9IHNlc3Npb25bJ2RlYnVnZ2VyRGF0 YSddCisgICAgaWYgc3RyKHRyYW5zX2lkKSBub3QgaW4gZGVidWdnZXJfZGF0 YToKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAg ICAgICAgIGRhdGE9eydzdGF0dXMnOiBGYWxzZSwKKyAgICAgICAgICAgICAg ICAgICdyZXN1bHQnOiBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZl ciBPciBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9z ZWQuJyl9CisgICAgICAgICkKKyAgICBvYmogPSBkZWJ1Z2dlcl9kYXRhW3N0 cih0cmFuc19pZCldCisKKyAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19E RUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKG9ialsnc2VydmVy X2lkJ10pCisgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9b2Jq WydkYXRhYmFzZV9pZCddLCBjb25uX2lkPW9ialsnY29ubl9pZCddKQorCisg ICAgdmVyID0gbWFuYWdlci52ZXJzaW9uCisgICAgc2VydmVyX3R5cGUgPSBt YW5hZ2VyLnNlcnZlcl90eXBlCisKKyAgICAjIGZpbmQgdGhlIGRlYnVnZ2Vy IHZlcnNpb24gYW5kIGV4ZWN1dGUgdGhlIHF1ZXJ5IGFjY29yZGluZ2x5Cisg ICAgZGJnX3ZlcnNpb24gPSBvYmpbJ2RlYnVnZ2VyX3ZlcnNpb24nXQorICAg IGlmIGRiZ192ZXJzaW9uIDw9IDI6CisgICAgICAgIHRlbXBsYXRlX3BhdGgg PSAnZGVidWdnZXIvc3FsL3YxJworICAgIGVsc2U6CisgICAgICAgIHRlbXBs YXRlX3BhdGggPSAnZGVidWdnZXIvc3FsL3YyJworCisgICAgaWYgY29ubi5j b25uZWN0ZWQoKToKKworICAgICAgICAjIEZvciB0aGUgZGlyZWN0IGRlYnVn Z2luZyBleHRyYWN0IHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgdmFsdWVzIGZy b20gdXNlciBhbmQgcGFzcyB0byBqaW5qYSB0ZW1wbGF0ZQorICAgICAgICAj IHRvIGNyZWF0ZSB0aGUgcXVlcnkgZm9yIGV4ZWN1dGlvbi4KKyAgICAgICAg aWYgb2JqWydkZWJ1Z190eXBlJ10gPT0gJ2RpcmVjdCc6CisgICAgICAgICAg ICBzdHJfcXVlcnkgPSAnJworCisgICAgICAgICAgICAjIEZvcm0gdGhlIGZ1 bmN0aW9uIG5hbWUgd2l0aCBzY2hlbWEgbmFtZQorICAgICAgICAgICAgZnVu Y19uYW1lID0gc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bJ3NjaGVtYSddICsg Jy4nICsgc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bJ25hbWUnXQorCisgICAg ICAgICAgICAjIHJlbmRlciB0aGUgU1FMIHRlbXBsYXRlIGFuZCBzZW5kIHRo ZSBxdWVyeSB0byBzZXJ2ZXIKKyAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgJ2RlYnVnX3BscGdz cWxfZXhlY3V0ZV90YXJnZXQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZ1bmN0aW9uX29pZD1vYmpbJ2Z1bmN0aW9uX2lk J10pCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9k aWN0KHNxbCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCisKKyAgICAgICAgICAgIGlmIHNlc3Npb25bJ2Z1bmN0aW9uRGF0 YSddWydhcmdfbW9kZSddOgorICAgICAgICAgICAgICAgICMgSW4gRURCQVMg OTAsIGlmIGFuIFNQTC1mdW5jdGlvbiBoYXMgYm90aCBhbiBPVVQtcGFyYW1l dGVyCisgICAgICAgICAgICAgICAgIyBhbmQgYSByZXR1cm4gdmFsdWUgKHdo aWNoIGlzIG5vdCBwb3NzaWJsZSBvbiBQb3N0Z3JlU1FMIG90aGVyd2lzZSks CisgICAgICAgICAgICAgICAgIyB0aGUgcmV0dXJuIHZhbHVlIGlzIHRyYW5z Zm9ybWVkIGludG8gYW4gZXh0cmEgT1VULXBhcmFtZXRlcgorICAgICAgICAg ICAgICAgICMgbmFtZWQgIl9yZXR2YWxfIgorICAgICAgICAgICAgICAgIGlm IHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddWydhcmdzX25hbWUnXToKKyAgICAg ICAgICAgICAgICAgICAgYXJnX25hbWUgPSBzZXNzaW9uWydmdW5jdGlvbkRh dGEnXVsnYXJnc19uYW1lJ10uc3BsaXQoIiwiKTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgJ19yZXR2YWxfJyBpbiBhcmdfbmFtZToKKyAgICAgICAgICAg ICAgICAgICAgICAgIGFyZ19tb2RlID0gc2Vzc2lvblsnZnVuY3Rpb25EYXRh J11bJ2FyZ19tb2RlJ10uc3BsaXQoIiwiKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGFyZ19tb2RlLnBvcCgpOworICAgICAgICAgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnX21vZGUgPSBzZXNz aW9uWydmdW5jdGlvbkRhdGEnXVsnYXJnX21vZGUnXS5zcGxpdCgiLCIpOwor ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFy Z19tb2RlID0gc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bJ2FyZ19tb2RlJ10u c3BsaXQoIiwiKTsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgYXJnX21vZGUgPSBbJ2knXSAqIGxlbihzZXNzaW9uWydmdW5jdGlvbkRh dGEnXVsnYXJnc190eXBlJ10uc3BsaXQoIiwiKSk7CisKKyAgICAgICAgICAg IGlmIHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddWydhcmdzX3R5cGUnXToKKyAg ICAgICAgICAgICAgICBpZiBzZXNzaW9uWydmdW5jdGlvbkRhdGEnXVsnYXJn c19uYW1lJ106CisgICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lID0gc2Vz c2lvblsnZnVuY3Rpb25EYXRhJ11bJ2FyZ3NfbmFtZSddLnNwbGl0KCIsIik7 CisgICAgICAgICAgICAgICAgICAgIGlmICdfcmV0dmFsXycgaW4gYXJnX25h bWU6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdfdHlwZSA9IHNlc3Np b25bJ2Z1bmN0aW9uRGF0YSddWydhcmdzX3R5cGUnXS5zcGxpdCgiLCIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3R5cGUucG9wKCk7CisgICAg ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAg ICBhcmdfdHlwZSA9IHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddWydhcmdzX3R5 cGUnXS5zcGxpdCgiLCIpOworICAgICAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgICAgIGFyZ190eXBlID0gc2Vzc2lvblsnZnVuY3Rpb25E YXRhJ11bJ2FyZ3NfdHlwZSddLnNwbGl0KCIsIik7CisKKyAgICAgICAgICAg ICMgQmVsb3cgYXJlIHR3byBkaWZmZXJlbnQgdGVtcGxhdGUgdG8gZXhlY3V0 ZSBhbmQgc3RhcnQgZXhlY3V0ZXIKKyAgICAgICAgICAgIGlmIG1hbmFnZXIu c2VydmVyX3R5cGUgIT0gJ3BnJyBhbmQgbWFuYWdlci52ZXJzaW9uIDwgOTAz MDA6CisgICAgICAgICAgICAgICAgc3RyX3F1ZXJ5ID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFsnZGVidWdnZXIvc3FsJywgJ2V4ZWN1dGVfZWRic3Bs LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdW5jX25hbWU9ZnVuY19uYW1lLCBpc19mdW5jPXNlc3Npb25b J2Z1bmN0aW9uRGF0YSddWydpc19mdW5jJ10sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuX25hbWU9c2Vzc2lvblsn ZnVuY3Rpb25EYXRhJ11bJ2xhbmd1YWdlJ10sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X3R5cGU9c2Vzc2lvblsn ZnVuY3Rpb25EYXRhJ11bJ3JldHVybl90eXBlJ10sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZXNzaW9uWydm dW5jdGlvbkRhdGEnXVsnYXJnc192YWx1ZSddLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ190eXBlPWFyZ190eXBl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFyZ3NfbW9kZT1hcmdfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgc3RyX3F1ZXJ5ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFsnZGVidWdnZXIvc3FsJywgJ2V4ZWN1dGVfcGxwZ3NxbC5zcWwnXSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVuY19uYW1lPWZ1bmNfbmFtZSwgaXNfZnVuYz1zZXNzaW9uWydmdW5jdGlv bkRhdGEnXVsnaXNfZnVuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldF90eXBlPXNlc3Npb25bJ2Z1bmN0aW9u RGF0YSddWydyZXR1cm5fdHlwZSddLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRhdGE9c2Vzc2lvblsnZnVuY3Rpb25E YXRhJ11bJ2FyZ3NfdmFsdWUnXQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgc3RhdHVzLCBy ZXN1bHQgPSBjb25uLmV4ZWN1dGVfYXN5bmMoc3RyX3F1ZXJ5KQorICAgICAg ICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlc3VsdCkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6Cisg ICAgICAgICAgICAgICAgIyBGb3IgaW5kaXJlY3QgZGVidWdnaW5nIGZpcnN0 IGNyZWF0ZSB0aGUgbGlzdGVuZXIgYW5kIHRoZW4gd2FpdCBmb3IgdGhlIHRh cmdldAorICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbdGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZV9saXN0ZW5lci5zcWwn XSkpCisKKyAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhl Y3V0ZV9kaWN0KHNxbCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVy X2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgICAgICMgR2V0 IGFuZCBzdG9yZSB0aGUgc2Vzc2lvbiB2YXJpYWJsZSB3aGljaCBpcyByZXF1 aXJlZCB0byBmZXRjaCBvdGhlciBpbmZvcm1hdGlvbiBkdXJpbmcgZGVidWdn aW5nCisgICAgICAgICAgICAgICAgaW50X3Nlc3Npb25faWQgPSByZXNbJ3Jv d3MnXVswXVsncGxkYmdfY3JlYXRlX2xpc3RlbmVyJ10KKworICAgICAgICAg ICAgICAgICMgSW4gRW50ZXJwcmlzZURCIHZlcnNpb25zIDw9IDkuMSB0aGUK KyAgICAgICAgICAgICAgICAjIHBsZGJnX3NldF9nbG9iYWxfYnJlYWtwb2lu dCBmdW5jdGlvbiB0b29rIGZpdmUgYXJndW1lbnRzLAorICAgICAgICAgICAg ICAgICMgdGhlIDJuZCBhcmd1bWVudCBiZWluZyB0aGUgcGFja2FnZSdzIE9J RCwgaWYgYW55LiBTdGFydGluZworICAgICAgICAgICAgICAgICMgd2l0aCA5 LjIsIHRoZSBwYWNrYWdlIE9JRCBhcmd1bWVudCBpcyBnb25lLCBhbmQgdGhl IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgIyB0YWtlcyBmb3VyIGFyZ3Vt ZW50cyBsaWtlIHRoZSBjb21tdW5pdHkgdmVyc2lvbiBoYXMgYWx3YXlzCisg ICAgICAgICAgICAgICAgIyBkb25lLgorICAgICAgICAgICAgICAgIGlmIHNl cnZlcl90eXBlID09ICdwcGFzJyBhbmQgdmVyIDw9IDkwMTAwOgorICAgICAg ICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3RlbXBsYXRlX3BhdGgsICdhZGRfYnJlYWtwb2ludF9lZGIuc3FsJ10pLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vz c2lvbl9pZD1pbnRfc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uX29pZD1vYmpbJ2Z1bmN0 aW9uX2lkJ10pCisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMg PSBjb25uLmV4ZWN1dGVfZGljdChzcWwpCisgICAgICAgICAgICAgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzcWwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdhZGRf YnJlYWtwb2ludF9wZy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkPWludF9zZXNzaW9uX2lk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVuY3Rpb25fb2lkPW9ialsnZnVuY3Rpb25faWQnXSkKKworICAgICAgICAg ICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNx bCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICAgICAgIyB3YWl0IGZv ciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAnd2FpdF9mb3JfdGFy Z2V0LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2Vzc2lvbl9pZD1pbnRfc2Vzc2lvbl9pZCkKKworICAgICAgICAg ICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRlX2FzeW5jKHNxbCkK KyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICAgICAgICAgICMgRGVsZXRlIHRoZSBleGlzdGlu ZyBkZWJ1Z2dlciBkYXRhIGluIHNlc3Npb24gdmFyaWFibGUgYW5kIHVwZGF0 ZSB3aXRoIG5ldyBkYXRhCisgICAgICAgICAgICAgICAgZGVsIGRlYnVnZ2Vy X2RhdGFbc3RyKHRyYW5zX2lkKV0KKyAgICAgICAgICAgICAgICBkZWwgc2Vz c2lvblsnZGVidWdnZXJEYXRhJ11bc3RyKHRyYW5zX2lkKV0KKworICAgICAg ICAgICAgICAgIGlmICdkZWJ1Z2dlckRhdGEnIG5vdCBpbiBzZXNzaW9uOgor ICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlcl9kYXRhID0gZGljdCgpCisg ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVi dWdnZXJfZGF0YSA9IHNlc3Npb25bJ2RlYnVnZ2VyRGF0YSddCisKKyAgICAg ICAgICAgICAgICBkZWJ1Z2dlcl9kYXRhW3N0cih0cmFuc19pZCldID0gewor ICAgICAgICAgICAgICAgICAgICAnY29ubl9pZCc6IG9ialsnY29ubl9pZCdd LAorICAgICAgICAgICAgICAgICAgICAnc2VydmVyX2lkJzogb2JqWydzZXJ2 ZXJfaWQnXSwKKyAgICAgICAgICAgICAgICAgICAgJ2RhdGFiYXNlX2lkJzog b2JqWydkYXRhYmFzZV9pZCddLAorICAgICAgICAgICAgICAgICAgICAnZnVu Y3Rpb25faWQnOiBvYmpbJ2Z1bmN0aW9uX2lkJ10sCisgICAgICAgICAgICAg ICAgICAgICdkZWJ1Z190eXBlJzogb2JqWydkZWJ1Z190eXBlJ10sCisgICAg ICAgICAgICAgICAgICAgICdleGVfY29ubl9pZCc6IG9ialsnY29ubl9pZCdd LAorICAgICAgICAgICAgICAgICAgICAnZGVidWdnZXJfdmVyc2lvbic6IG9i alsnZGVidWdnZXJfdmVyc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAn c2Vzc2lvbl9pZCc6IGludF9zZXNzaW9uX2lkLAorICAgICAgICAgICAgICAg ICAgICAnZnJhbWVfaWQnOiAwCisgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgIyBTdG9yZSB0aGUgZGljdGlvbmFyeSBpbnRvIHRoZSBz ZXNzaW9uIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgc2Vzc2lvblsnZGVi dWdnZXJEYXRhJ10gPSBkZWJ1Z2dlcl9kYXRhCisgICAgICAgICAgICAgICAg cmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3Rh dHVzLCAncmVzdWx0JzogcmVzfSkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgc3RhdHVzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBy ZXN1bHQgPSBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBj b25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykK KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRh dGE9eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1bHR9KQorICAg IGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJlc3Vs dCA9IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5l Y3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKQorCisg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzog c3RhdHVzLCAncmVzdWx0JzogcmVzdWx0fSkKKworCitAYmx1ZXByaW50LnJv dXRlKCcvZXhlY3V0ZV9xdWVyeS88aW50OnRyYW5zX2lkPi88cXVlcnlfdHlw ZT4nLCBtZXRob2RzPVsnR0VUJ10pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBl eGVjdXRlX2RlYnVnZ2VyX3F1ZXJ5KHRyYW5zX2lkLCBxdWVyeV90eXBlKToK KyAgICAiIiIKKyAgICBleGVjdXRlX2RlYnVnZ2VyX3F1ZXJ5KHRyYW5zX2lk LCBxdWVyeV90eXBlKQorCisgICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2li bGUgdG8gZXhlY3V0ZSB0aGUgcXVlcnkgYW5kIHJldHVybiB2YWx1ZS4gQXMg dGhpcyBtZXRob2QgaXMgZ2VuZXJpYyBzbyB1c2VyIGhhcyB0byBwYXNzIHRo ZQorICAgIHF1ZXJ5X3R5cGUgdG8gZ2V0IHRoZSByZXF1aXJlZCBpbmZvcm1h dGlvbiBmb3IgZGVidWdnaW5nLgorCisgICAgZS5nLiBJZiB1c2VyIHdhbnQg dG8gZXhlY3V0ZSAnc3RlcF9pbnRvJyB0aGVuIHF1ZXJ5X3R5cGU9J3N0ZXBf aW50bycuCisgICAgICAgICBJZiB1c2VyIHdhbnQgdG8gZXhlY3V0ZSAnY29u dGludWUnIHRoZW4gcXVlcnlfdHlwZT0nY29udGludWUnCisKKyAgICBQYXJh bWV0ZXJzOgorICAgICAgICB0cmFuc19pZAorICAgICAgICAtIFRyYW5zYWN0 aW9uIElECisgICAgICAgIHF1ZXJ5X3R5cGUKKyAgICAgICAgLSBUeXBlIG9m IHF1ZXJ5IHRvIGV4ZWN1dGUKKyAgICAiIiIKKworICAgIGRlYnVnZ2VyX2Rh dGEgPSBzZXNzaW9uWydkZWJ1Z2dlckRhdGEnXQorICAgIGlmIHN0cih0cmFu c19pZCkgbm90IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXsnc3RhdHVz JzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAncmVzdWx0JzogZ2V0dGV4 dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRo IHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpfQorICAgICAgICApCisg ICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAg bWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5l Y3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZlcl9pZCddKQorICAgIGNvbm4gPSBt YW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29u bl9pZD1vYmpbJ2V4ZV9jb25uX2lkJ10pCisKKyAgICAjIGZpbmQgdGhlIGRl YnVnZ2VyIHZlcnNpb24gYW5kIGV4ZWN1dGUgdGhlIHF1ZXJ5IGFjY29yZGlu Z2x5CisgICAgZGJnX3ZlcnNpb24gPSBvYmpbJ2RlYnVnZ2VyX3ZlcnNpb24n XQorICAgIGlmIGRiZ192ZXJzaW9uIDw9IDI6CisgICAgICAgIHRlbXBsYXRl X3BhdGggPSAnZGVidWdnZXIvc3FsL3YxJworICAgIGVsc2U6CisgICAgICAg IHRlbXBsYXRlX3BhdGggPSAnZGVidWdnZXIvc3FsL3YyJworCisgICAgaWYg Y29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCBxdWVyeV90eXBlICsgIi5z cWwiXSksIHNlc3Npb25faWQ9b2JqWydzZXNzaW9uX2lkJ10pCisgICAgICAg ICMgQXMgdGhlIHF1ZXJ5IHR5cGUgaXMgY29udGludWUgb3Igc3RlcF9pbnRv IG9yIHN0ZXBfb3ZlciB0aGVuIHdlIG1heSBnZXQgcmVzdWx0IGFmdGVyIHNv bWUgdGltZSBzbyBwb2xsIHRoZQorICAgICAgICAjIHJlc3VsdC4gV2UgbmVl ZCB0byB1cGRhdGUgdGhlIGZyYW1lIGlkIHZhcmlhYmxlIHdoZW4gdXNlciBt b3ZlIHRoZSBuZXh0IHN0ZXAgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgaWYg cXVlcnlfdHlwZSA9PSAnY29udGludWUnIG9yIHF1ZXJ5X3R5cGUgPT0gJ3N0 ZXBfaW50bycgb3IgcXVlcnlfdHlwZSA9PSAnc3RlcF9vdmVyJzoKKyAgICAg ICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2FzeW5jKHNx bCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0 YT17J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdH0pCisgICAg ICAgIGVsaWYgcXVlcnlfdHlwZSA9PSAnYWJvcnRfdGFyZ2V0JzoKKyAgICAg ICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2RpY3Qoc3Fs KQorCisgICAgICAgICAgICBtYW5hZ2VyLnJlbGVhc2UoZGlkPW9ialsnZGF0 YWJhc2VfaWQnXSwgY29ubl9pZD1vYmpbJ2Nvbm5faWQnXSkKKworICAgICAg ICAgICAgIyBEZWxldGUgdGhlIGV4aXN0aW5nIGRlYnVnZ2VyIGRhdGEgaW4g c2Vzc2lvbiB2YXJpYWJsZQorICAgICAgICAgICAgZGVsIGRlYnVnZ2VyX2Rh dGFbc3RyKHRyYW5zX2lkKV0KKyAgICAgICAgICAgIGRlbCBzZXNzaW9uWydk ZWJ1Z2dlckRhdGEnXVtzdHIodHJhbnNfaWQpXQorCisgICAgICAgICAgICBp ZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQorICAgICAgICAgICAg ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3Bv bnNlKGluZm89J1RhcmdldCBBYm9ydGVkLicsIGRhdGE9eydzdGF0dXMnOiBz dGF0dXMsICdyZXN1bHQnOiByZXN1bHR9KQorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVfZGljdChz cWwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlc3VsdCkKKyAg ICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAgICAgICByZXN1 bHQgPSBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25u ZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykKKwor ICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6 ICdTdWNjZXNzJywgJ3Jlc3VsdCc6IHJlc3VsdFsncm93cyddfSkKKworCitA Ymx1ZXByaW50LnJvdXRlKCcvbWVzc2FnZXMvPGludDp0cmFuc19pZD4vJywg bWV0aG9kcz1bIkdFVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgbWVzc2Fn ZXModHJhbnNfaWQpOgorICAgICIiIgorICAgIG1lc3NhZ2VzKHRyYW5zX2lk KQorCisgICAgVGhpcyBtZXRob2QgcG9sbHMgdGhlIG1lc3NhZ2VzIHJldHVy bmVkIGJ5IHRoZSBkYXRhYmFzZSBzZXJ2ZXIuCisKKyAgICBQYXJhbWV0ZXJz OgorICAgICAgICB0cmFuc19pZAorICAgICAgICAtIHVuaXF1ZSB0cmFuc2Fj dGlvbiBpZC4KKyAgICAiIiIKKworICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNz aW9uWydkZWJ1Z2dlckRhdGEnXQorICAgIGlmIHN0cih0cmFuc19pZCkgbm90 IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25f cmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzogJ05vdENv bm5lY3RlZCcsCisgICAgICAgICAgICAgICAgICAncmVzdWx0JzogZ2V0dGV4 dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRo IHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpfQorICAgICAgICApCisg ICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAg bWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5l Y3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZlcl9pZCddKQorICAgIGNvbm4gPSBt YW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29u bl9pZD1vYmpbJ2Nvbm5faWQnXSkKKworICAgIHBvcnRfbnVtYmVyID0gJycK KworICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgIHN0YXR1cywg cmVzdWx0LCBteV9yZXN1bHQgPSBjb25uLnBvbGwoKQorICAgICAgICBub3Rp ZnkgPSBjb25uLm1lc3NhZ2VzKCkKKyAgICAgICAgaWYgbm90aWZ5OgorICAg ICAgICAgICAgIyBJbiBub3RpY2UgbWVzc2FnZSB3ZSBuZWVkIHRvIGZpbmQg IlBMREJHQlJFQUsiIHN0cmluZyB0byBmaW5kIHRoZSBwb3J0IG51bWJlciB0 byBhdHRhY2guCisgICAgICAgICAgICBvZmZzZXQgPSBub3RpZnlbMF0uZmlu ZCgnUExEQkdCUkVBSycpOworICAgICAgICAgICAgc3RyX2xlbiA9IGxlbign UExEQkdCUkVBSycpCisgICAgICAgICAgICBzdHJfbGVuID0gc3RyX2xlbiAr IDEKKyAgICAgICAgICAgIHRtcE9mZnNldCA9IDAKKyAgICAgICAgICAgIHRt cEZsYWcgPSBGYWxzZQorCisgICAgICAgICAgICB3aGlsZSBub3RpZnlbMF1b b2Zmc2V0K3N0cl9sZW4rdG1wT2Zmc2V0XS5pc2RpZ2l0KCk6CisgICAgICAg ICAgICAgICAgc3RhdHVzID0gJ1N1Y2Nlc3MnCisgICAgICAgICAgICAgICAg dG1wRmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBwb3J0X251bWJlciA9 IHBvcnRfbnVtYmVyICsgbm90aWZ5WzBdW29mZnNldCtzdHJfbGVuK3RtcE9m ZnNldF0KKyAgICAgICAgICAgICAgICB0bXBPZmZzZXQgPSB0bXBPZmZzZXQg KyAxCisKKyAgICAgICAgICAgIGlmIHRtcEZsYWcgPT0gRmFsc2U6CisgICAg ICAgICAgICAgICAgc3RhdHVzID0gJ0J1c3knCisgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICBzdGF0dXMgPSAnQnVzeScKKyAgICBlbHNlOgorICAgICAg ICBzdGF0dXMgPSAnTm90Q29ubmVjdGVkJworICAgICAgICByZXN1bHQgPSBn ZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9u IHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykKKworICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IHN0YXR1 cywgJ3Jlc3VsdCc6IHBvcnRfbnVtYmVyfSkKKworCitAYmx1ZXByaW50LnJv dXRlKCcvc3RhcnRfZXhlY3V0aW9uLzxpbnQ6dHJhbnNfaWQ+LzxpbnQ6cG9y dF9udW0+JywgbWV0aG9kcz1bJ0dFVCddKQorQGxvZ2luX3JlcXVpcmVkCitk ZWYgc3RhcnRfZXhlY3V0aW9uKHRyYW5zX2lkLCBwb3J0X251bSk6CisgICAg IiIiCisgICAgc3RhcnRfZXhlY3V0aW9uKHRyYW5zX2lkLCBwb3J0X251bSkK KworICAgIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGlu ZyBhbiBhc3luY2hyb25vdXMgY29ubmVjdGlvbiBmb3IgZXhlY3V0aW9uIHRo cmVhZC4KKyAgICBBbHNvIHN0b3JlIHRoZSBzZXNzaW9uIGlkIGludG8gc2Vz c2lvbiByZXR1cm4gd2l0aCBhdHRhY2ggcG9ydCBxdWVyeSBmb3IgdGhlIGRp cmVjdCBkZWJ1Z2dpbmcuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0 cmFuc19pZAorICAgICAgICAtIFRyYW5zYWN0aW9uIElECisgICAgICAgIHBv cnRfbnVtCisgICAgICAgIC0gUG9ydCBudW1iZXIgdG8gYXR0YWNoCisgICAg IiIiCisKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsnZGVidWdnZXJE YXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQpIG5vdCBpbiBkZWJ1Z2dlcl9k YXRhOgorICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAg ICAgICAgICAgZGF0YT17J3N0YXR1cyc6ICdOb3RDb25uZWN0ZWQnLAorICAg ICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05vdCBjb25uZWN0 ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhh cyBiZWVuIGNsb3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9iaiA9IGRlYnVn Z2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKworICAgIGRiZ192ZXJzaW9uID0g b2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKworICAgICMgRGVsZXRlIHRoZSBl eGlzdGluZyBkZWJ1Z2dlciBkYXRhIGluIHNlc3Npb24gdmFyaWFibGUKKyAg ICBkZWwgZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorICAgIGRlbCBz ZXNzaW9uWydkZWJ1Z2dlckRhdGEnXVtzdHIodHJhbnNfaWQpXQorCisgICAg IyBDcmVhdGUgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24gdXNpbmcgcmFuZG9t IGNvbm5lY3Rpb24gaWQuCisgICAgZXhlX2Nvbm5faWQgPSBzdHIocmFuZG9t LnJhbmRpbnQoMSwgOTk5OTk5OSkpCisgICAgdHJ5OgorICAgICAgICBtYW5h Z2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlv bl9tYW5hZ2VyKG9ialsnc2VydmVyX2lkJ10pCisgICAgICAgIGNvbm4gPSBt YW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29u bl9pZD1leGVfY29ubl9pZCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6 CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9c3RyKGUpKQorCisgICAgIyBDb25uZWN0IHRoZSBTZXJ2ZXIKKyAgICBz dGF0dXMsIG1zZyA9IGNvbm4uY29ubmVjdCgpCisgICAgaWYgbm90IHN0YXR1 czoKKyAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1zdHIobXNnKSkKKworICAgIGlmICdkZWJ1Z2dlckRhdGEnIG5vdCBp biBzZXNzaW9uOgorICAgICAgICBkZWJ1Z2dlcl9kYXRhID0gZGljdCgpCisg ICAgZWxzZToKKyAgICAgICAgZGVidWdnZXJfZGF0YSA9IHNlc3Npb25bJ2Rl YnVnZ2VyRGF0YSddCisKKyAgICAjIGZpbmQgdGhlIGRlYnVnZ2VyIHZlcnNp b24gYW5kIGV4ZWN1dGUgdGhlIHF1ZXJ5IGFjY29yZGluZ2x5CisgICAgZGJn X3ZlcnNpb24gPSBvYmpbJ2RlYnVnZ2VyX3ZlcnNpb24nXQorICAgIGlmIGRi Z192ZXJzaW9uIDw9IDI6CisgICAgICAgIHRlbXBsYXRlX3BhdGggPSAnZGVi dWdnZXIvc3FsL3YxJworICAgIGVsc2U6CisgICAgICAgIHRlbXBsYXRlX3Bh dGggPSAnZGVidWdnZXIvc3FsL3YyJworCisgICAgIyBjb25uZWN0IHRvIHBv cnQgYW5kIHN0b3JlIHRoZSBzZXNzaW9uIElEIGluIHRoZSBzZXNzaW9uIHZh cmlhYmxlcworICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb dGVtcGxhdGVfcGF0aCwgJ2F0dGFjaF90b19wb3J0LnNxbCddKSwgcG9ydD1w b3J0X251bSkKKyAgICBzdGF0dXNfcG9ydCwgcmVzX3BvcnQgPSBjb25uLmV4 ZWN1dGVfZGljdChzcWwpCisgICAgaWYgbm90IHN0YXR1c19wb3J0OgorICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl c19wb3J0KQorCisgICAgZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXSA9 IHsKKyAgICAgICAgJ2Nvbm5faWQnOiBvYmpbJ2Nvbm5faWQnXSwKKyAgICAg ICAgJ3NlcnZlcl9pZCc6IG9ialsnc2VydmVyX2lkJ10sCisgICAgICAgICdk YXRhYmFzZV9pZCc6IG9ialsnZGF0YWJhc2VfaWQnXSwKKyAgICAgICAgJ2Z1 bmN0aW9uX2lkJzogb2JqWydmdW5jdGlvbl9pZCddLAorICAgICAgICAnZGVi dWdfdHlwZSc6IG9ialsnZGVidWdfdHlwZSddLAorICAgICAgICAnZXhlX2Nv bm5faWQnOiBleGVfY29ubl9pZCwKKyAgICAgICAgJ2RlYnVnZ2VyX3ZlcnNp b24nOiBkYmdfdmVyc2lvbiwKKyAgICAgICAgJ3Nlc3Npb25faWQnOiByZXNf cG9ydFsncm93cyddWzBdWydwbGRiZ19hdHRhY2hfdG9fcG9ydCddCisgICAg ICAgIH0KKworICAgICMgU3RvcmUgdGhlIGRlYnVnZ2VyIGRhdGEgZGljdGlv bmFyeSBpbnRvIHRoZSBzZXNzaW9uIHZhcmlhYmxlCisgICAgc2Vzc2lvblsn ZGVidWdnZXJEYXRhJ10gPSBkZWJ1Z2dlcl9kYXRhCisKKyAgICByZXR1cm4g bWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiAnU3VjY2Vzcycs ICdyZXN1bHQnOiByZXNfcG9ydFsncm93cyddWzBdWydwbGRiZ19hdHRhY2hf dG9fcG9ydCddfSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvc2V0X2JyZWFr cG9pbnQvPGludDp0cmFuc19pZD4vPGludDpsaW5lX25vPi88aW50OnNldF90 eXBlPicsIG1ldGhvZHM9WydHRVQnXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVm IHNldF9jbGVhcl9icmVha3BvaW50KHRyYW5zX2lkLCBsaW5lX25vLCBzZXRf dHlwZSk6CisgICAgIiIiCisgICAgc2V0X2NsZWFyX2JyZWFrcG9pbnQodHJh bnNfaWQsIGxpbmVfbm8sIHNldF90eXBlKQorCisgICAgVGhpcyBtZXRob2Qg aXMgcmVzcG9uc2libGUgdG8gc2V0IGFuZCBjbGVhbiB0aGUgYnJlYWtwb2lu dAorCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgdHJhbnNfaWQKKyAgICAg ICAgLSBUcmFuc2FjdGlvbiBJRAorICAgICAgICBsaW5lX25vCisgICAgICAg IC0gTGluZSBudW1iZXIgdG8gc2V0CisgICAgICAgIHNldF90eXBlCisgICAg ICAgIC0gMCAtIGNsZWFyIHRoZSBicmVha3BvaW50LCAxIC0gc2V0IHRoZSBi cmVha3BvaW50CisgICAgIiIiCisKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vz c2lvblsnZGVidWdnZXJEYXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQpIG5v dCBpbiBkZWJ1Z2dlcl9kYXRhOgorICAgICAgICByZXR1cm4gbWFrZV9qc29u X3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZhbHNl LAorICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05vdCBj b25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2Vy dmVyIGhhcyBiZWVuIGNsb3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9iaiA9 IGRlYnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFnZXIg PSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21h bmFnZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdlci5j b25uZWN0aW9uKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9b2Jq WydleGVfY29ubl9pZCddKQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dlciB2 ZXJzaW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQorICAg IGRiZ192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAgICBp ZiBkYmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0g J2RlYnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1wbGF0 ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgIHF1ZXJ5X3R5cGUg PSAnJworCisgICAgIyBXZSBuZWVkIHRvIGZpbmQgb3V0IGZ1bmN0aW9uIE9J RCBiZWZvcmUgc2VuZGluZyB0aGUgZm9pZCB0byBzZXQgdGhlIGJyZWFrcG9p bnQgYmVjYXVzZSBpdCBtYXkgcG9zc2libGUgdGhhdAorICAgICMgZGVidWdn aW5nIGZ1bmN0aW9uIGhhcyBtdWx0aSBsZXZlbCBmdW5jdGlvbiBmb3IgZGVi dWdnaW5nIHNvIHdlIG5lZWQgdG8gc2F2ZSB0aGUgZGVidWcgbGV2ZWwgdG8g c2Vzc2lvbiB2YXJpYWJsZQorICAgICMgYW5kIHBhc3MgdGhhIGFwcHJvcHJp YXRlIGZvaWQgdG8gc2V0IHRoZSBicmVha3BvaW50LgorICAgIHNxbF8gPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICJnZXRf c3RhY2tfaW5mby5zcWwiXSksIHNlc3Npb25faWQ9b2JqWydzZXNzaW9uX2lk J10pCisgICAgc3RhdHVzLCByZXNfc3RhY2sgPSBjb25uLmV4ZWN1dGVfZGlj dChzcWxfKQorICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzX3N0YWNrKQorCisg ICAgZm9pZCA9IHJlc19zdGFja1sncm93cyddWzBdWydmdW5jJ10KKworICAg ICMgQ2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgc3RhY2sgYmVmb3JlIHNldHRp bmcgdGhlIGJyZWFrcG9pbnQKKyAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgor ICAgICAgICBpZiBzZXRfdHlwZSA9PSAxOgorICAgICAgICAgICAgcXVlcnlf dHlwZSA9ICdzZXRfYnJlYWtwb2ludCcKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHF1ZXJ5X3R5cGUgPSAnY2xlYXJfYnJlYWtwb2ludCcKKworICAg ICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRl X3BhdGgsIHF1ZXJ5X3R5cGUgKyAiLnNxbCJdKSwgc2Vzc2lvbl9pZD1vYmpb J3Nlc3Npb25faWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvaWQ9Zm9pZCwgbGluZV9udW1iZXI9bGluZV9ubykKKworICAgICAgICBz dGF0dXMsIHJlc3VsdCA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKyAgICAg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQorICAgIGVsc2U6Cisg ICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJlc3VsdCA9IGdldHRl eHQoJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0 aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKQorCisgICAgcmV0dXJu IG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAn cmVzdWx0JzogcmVzdWx0Wydyb3dzJ119KQorCisKK0BibHVlcHJpbnQucm91 dGUoJy9jbGVhcl9hbGxfYnJlYWtwb2ludC88aW50OnRyYW5zX2lkPicsIG1l dGhvZHM9WydQT1NUJ10pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBjbGVhcl9h bGxfYnJlYWtwb2ludCh0cmFuc19pZCk6CisgICAgIiIiCisgICAgY2xlYXJf YWxsX2JyZWFrcG9pbnQodHJhbnNfaWQpCisKKyAgICBUaGlzIG1ldGhvZCBp cyByZXNwb25zaWJsZSB0byBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnQKKwor ICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0g VHJhbnNhY3Rpb24gSUQKKyAgICAiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0g c2Vzc2lvblsnZGVidWdnZXJEYXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQp IG5vdCBpbiBkZWJ1Z2dlcl9kYXRhOgorICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZh bHNlLAorICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05v dCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUg c2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9i aiA9IGRlYnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFn ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9u X21hbmFnZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdl ci5jb25uZWN0aW9uKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9 b2JqWydleGVfY29ubl9pZCddKQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dl ciB2ZXJzaW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQor ICAgIGRiZ192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAg ICBpZiBkYmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRo ID0gJ2RlYnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1w bGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgIHF1ZXJ5X3R5 cGUgPSAnJworCisgICAgaWYgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAg IyBnZXQgdGhlIGRhdGEgc2VudCB0aHJvdWdoIHBvc3QgZnJvbSBjbGllbnQK KyAgICAgICAgaWYgcmVxdWVzdC5mb3JtWydicmVha3BvaW50X2xpc3QnXToK KyAgICAgICAgICAgIGxpbmVfbnVtYmVycyA9IHJlcXVlc3QuZm9ybVsnYnJl YWtwb2ludF9saXN0J10uc3BsaXQoIiwiKQorICAgICAgICAgICAgZm9yIGxp bmVfbm8gaW4gbGluZV9udW1iZXJzOgorICAgICAgICAgICAgICAgIHNxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgImNs ZWFyX2JyZWFrcG9pbnQuc3FsIl0pLCBzZXNzaW9uX2lkPW9ialsnc2Vzc2lv bl9pZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv aWQ9b2JqWydmdW5jdGlvbl9pZCddLCBsaW5lX251bWJlcj1saW5lX25vKQor CisgICAgICAgICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1 dGVfZGljdChzcWwpCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yZXN1bHQpCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMn OiBGYWxzZX0pCisgICAgZWxzZToKKyAgICAgICAgc3RhdHVzID0gRmFsc2UK KyAgICAgICAgcmVzdWx0ID0gZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBz ZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4g Y2xvc2VkLicpCisKKyAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRh dGE9eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1bHRbJ3Jvd3Mn XX0pCisKKworQGJsdWVwcmludC5yb3V0ZSgnL2RlcG9zaXRfdmFsdWUvPGlu dDp0cmFuc19pZD4nLCBtZXRob2RzPVsnUE9TVCddKQorQGxvZ2luX3JlcXVp cmVkCitkZWYgZGVwb3NpdF9wYXJhbWV0ZXJfdmFsdWUodHJhbnNfaWQpOgor ICAgICIiIgorICAgIGRlcG9zaXRfcGFyYW1ldGVyX3ZhbHVlKHRyYW5zX2lk KQorCisgICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgdG8gY2hhbmdl IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZXMKKworICAgIFBhcmFtZXRlcnM6Cisg ICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0gVHJhbnNhY3Rpb24gSUQKKyAg ICAiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsnZGVidWdnZXJE YXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQpIG5vdCBpbiBkZWJ1Z2dlcl9k YXRhOgorICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAg ICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZhbHNlLAorICAgICAgICAgICAg ICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2Vy dmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNs b3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9iaiA9IGRlYnVnZ2VyX2RhdGFb c3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBH X0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFnZXIob2JqWydzZXJ2 ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1v YmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydleGVfY29ubl9pZCdd KQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dlciB2ZXJzaW9uIGFuZCBleGVj dXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQorICAgIGRiZ192ZXJzaW9uID0g b2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAgICBpZiBkYmdfdmVyc2lvbiA8 PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92 MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2RlYnVn Z2VyL3NxbC92MicKKworICAgIHF1ZXJ5X3R5cGUgPSAnJworCisgICAgaWYg Y29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgIyBnZXQgdGhlIGRhdGEgc2Vu dCB0aHJvdWdoIHBvc3QgZnJvbSBjbGllbnQKKyAgICAgICAgZGF0YSA9IGpz b24ubG9hZHMocmVxdWVzdC52YWx1ZXNbJ2RhdGEnXSkKKworICAgICAgICBp ZiBkYXRhOgorICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAiZGVwb3NpdF92YWx1ZS5zcWwiXSks IHNlc3Npb25faWQ9b2JqWydzZXNzaW9uX2lkJ10sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFyX25hbWU9ZGF0YVswXVsnbmFtZSdd LCBsaW5lX251bWJlcj0tMSwgdmFsPWRhdGFbMF1bJ3ZhbHVlJ10pCisKKyAg ICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2RpY3Qo c3FsKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl c3VsdCkKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAg ICAgICByZXN1bHQgPSBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZl ciBPciBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9z ZWQuJykKKworICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17 J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdFsncm93cyddfSkK KworCitAYmx1ZXByaW50LnJvdXRlKCcvc2VsZWN0X2ZyYW1lLzxpbnQ6dHJh bnNfaWQ+LzxpbnQ6ZnJhbWVfaWQ+JywgbWV0aG9kcz1bJ0dFVCddKQorQGxv Z2luX3JlcXVpcmVkCitkZWYgc2VsZWN0X2ZyYW1lKHRyYW5zX2lkLCBmcmFt ZV9pZCk6CisgICAgIiIiCisgICAgc2VsZWN0X2ZyYW1lKHRyYW5zX2lkLCBm cmFtZV9pZCkKKworICAgIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIHRv IHNlbGVjdCB0aGUgZnJhbWUgZnJvbSBzdGFjayBpbmZvCisKKyAgICBQYXJh bWV0ZXJzOgorICAgICAgICB0cmFuc19pZAorICAgICAgICAtIFRyYW5zYWN0 aW9uIElECisgICAgICAgIGZyYW1lX2lkCisgICAgICAgIC0gRnJhbWUgaWQg c2VsZWN0ZWQKKyAgICAiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lv blsnZGVidWdnZXJEYXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQpIG5vdCBp biBkZWJ1Z2dlcl9kYXRhOgorICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jl c3BvbnNlKAorICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZhbHNlLAor ICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05vdCBjb25u ZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVy IGhhcyBiZWVuIGNsb3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9iaiA9IGRl YnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFnZXIgPSBn ZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFn ZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdlci5jb25u ZWN0aW9uKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydl eGVfY29ubl9pZCddKQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dlciB2ZXJz aW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQorICAgIGRi Z192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAgICBpZiBk YmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2Rl YnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1wbGF0ZV9w YXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgIGlmIGNvbm4uY29ubmVj dGVkKCk6CisgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bihbdGVtcGxhdGVfcGF0aCwgInNlbGVjdF9mcmFtZS5zcWwiXSksIHNlc3Np b25faWQ9b2JqWydzZXNzaW9uX2lkJ10sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnJhbWVfaWQ9ZnJhbWVfaWQpCisKKyAgICAgICAg c3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVfZGljdChzcWwpCisgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlc3VsdCkKKyAgICBlbHNlOgor ICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAgICAgICByZXN1bHQgPSBnZXR0 ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9uIHdp dGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykKKworICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IHN0YXR1cywg J3Jlc3VsdCc6IHJlc3VsdFsncm93cyddfSkKKworCitAYmx1ZXByaW50LnJv dXRlKCcvcG9sbF9lbmRfZXhlY3V0aW9uX3Jlc3VsdC88aW50OnRyYW5zX2lk Pi8nLCBtZXRob2RzPVsiR0VUIl0pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBw b2xsX2VuZF9leGVjdXRpb25fcmVzdWx0KHRyYW5zX2lkKToKKyAgICAiIiIK KyAgICBwb2xsX2VuZF9leGVjdXRpb25fcmVzdWx0KHRyYW5zX2lkKQorCisg ICAgVGhpcyBtZXRob2QgcG9sbHMgdGhlIGVuZCBvZiBleGVjdXRpb24gcmVz dWx0IG1lc3NhZ2VzIHJldHVybmVkIGJ5IHRoZSBkYXRhYmFzZSBzZXJ2ZXIu CisKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0cmFuc19pZAorICAgICAg ICAtIHVuaXF1ZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAiIiIKKworICAgIGRl YnVnZ2VyX2RhdGEgPSBzZXNzaW9uWydkZWJ1Z2dlckRhdGEnXQorICAgIGlm IHN0cih0cmFuc19pZCkgbm90IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAg IHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRh PXsnc3RhdHVzJzogJ05vdENvbm5lY3RlZCcsCisgICAgICAgICAgICAgICAg ICAncmVzdWx0JzogZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIg T3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2Vk LicpfQorICAgICAgICApCisgICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIo dHJhbnNfaWQpXQorCisgICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVG QVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZlcl9p ZCddKQorICAgIGlmIG9ialsnZGVidWdfdHlwZSddID09ICdkaXJlY3QnOgor ICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1vYmpbJ2Rh dGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydjb25uX2lkJ10pCisgICAgZWxz ZToKKyAgICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9b2Jq WydkYXRhYmFzZV9pZCddLCBjb25uX2lkPW9ialsnZXhlX2Nvbm5faWQnXSkK KworICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgIHN0YXR1c21z ZyA9IGNvbm4uc3RhdHVzX21lc3NhZ2UoKQorICAgICAgICBzdGF0dXMsIHJl c3VsdCwgbXlfcmVzdWx0ID0gY29ubi5wb2xsKCkKKyAgICAgICAgaWYgcmVz dWx0OgorICAgICAgICAgICAgc3RhdHVzID0gJ1N1Y2Nlc3MnCisgICAgICAg ICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIHJlc3VsdDoK KyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBpLml0ZW1zKCk6CisgICAg ICAgICAgICAgICAgICAgIGRhdGFbIm5hbWUiXSA9IGsKKyAgICAgICAgICAg ICAgICAgICAgZGF0YS5zZXRkZWZhdWx0KCJ2YWx1ZSIsW10pLmFwcGVuZCh2 KQorCisgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKHN1 Y2Nlc3M9MSwgaW5mbz1nZXR0ZXh0KCJFeGVjdXRpb24gQ29tcGxldGVkLiIp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh PXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogZGF0YSwgJ3N0YXR1c19t ZXNzYWdlJzogc3RhdHVzbXNnfSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg ICAgIHN0YXR1cyA9ICdCdXN5JworICAgIGVsc2U6CisgICAgICAgIHN0YXR1 cyA9ICdOb3RDb25uZWN0ZWQnCisgICAgICAgIHJlc3VsdCA9IGdldHRleHQo J05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0 aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKQorCisgICAgcmV0dXJuIG1h a2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVz dWx0JzogcmVzdWx0fSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvcG9sbF9y ZXN1bHQvPGludDp0cmFuc19pZD4vJywgbWV0aG9kcz1bIkdFVCJdKQorQGxv Z2luX3JlcXVpcmVkCitkZWYgcG9sbF9yZXN1bHQodHJhbnNfaWQpOgorICAg ICIiIgorICAgIHBvbGxfcmVzdWx0KHRyYW5zX2lkKQorCisgICAgVGhpcyBt ZXRob2QgcG9sbHMgdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIHF1 ZXJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisKKyAgICBQYXJhbWV0ZXJz OgorICAgICAgICB0cmFuc19pZAorICAgICAgICAtIHVuaXF1ZSB0cmFuc2Fj dGlvbiBpZC4KKyAgICAiIiIKKworICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNz aW9uWydkZWJ1Z2dlckRhdGEnXQorICAgIGlmIHN0cih0cmFuc19pZCkgbm90 IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25f cmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzogJ05vdENv bm5lY3RlZCcsCisgICAgICAgICAgICAgICAgICAncmVzdWx0JzogZ2V0dGV4 dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRo IHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpfQorICAgICAgICApCisg ICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAg bWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5l Y3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZlcl9pZCddKQorICAgIGNvbm4gPSBt YW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29u bl9pZD1vYmpbJ2V4ZV9jb25uX2lkJ10pCisKKyAgICBpZiBjb25uLmNvbm5l Y3RlZCgpOgorICAgICAgICBzdGF0dXMsIHJlc3VsdCwgbXlfcmVzdWx0ID0g Y29ubi5wb2xsKCkKKyAgICAgICAgaWYgc3RhdHVzID09IEFTWU5DX09LOgor ICAgICAgICAgICAgc3RhdHVzID0gJ1N1Y2Nlc3MnCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICBzdGF0dXMgPSAnQnVzeScKKyAgICBlbHNlOgorICAg ICAgICBzdGF0dXMgPSAnTm90Q29ubmVjdGVkJworICAgICAgICByZXN1bHQg PSBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0 aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykKKworICAg IHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IHN0 YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdH0pCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci9zdGF0aWMvY3NzL2RlYnVnZ2VyLmNzcyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3N0YXRpYy9jc3MvZGVidWdn ZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIz YTU3N2EKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9k ZWJ1Z2dlci9zdGF0aWMvY3NzL2RlYnVnZ2VyLmNzcwpAQCAtMCwwICsxLDY0 IEBACisubmF2YmFyLXN0YXRpYy10b3AsIC5uYXZiYXItZml4ZWQtdG9wLCAu bmF2YmFyLWZpeGVkLWJvdHRvbSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxp bmVhci1ncmFkaWVudCh0byBib3R0b20sICNDQ0MgMCUsICNEMkQyRDIgMTAw JSk7Cit9CisKKy5idG4tZGVmYXVsdCB7CisgIGJhY2tncm91bmQtY29sb3I6 ICNEMkQyRDI7CisgIGxlZnQ6IDBweDsKKyAgcmlnaHQ6IDBweDsKKyAgcGFk ZGluZzogN3B4OworfQorCisuYnRuLXRvb2xiYXIgeworICBwYWRkaW5nLXRv cDogM3B4OworICBwYWRkaW5nLWJvdHRvbTogM3B4OworfQorCisjY29udGFp bmVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDQ0cHg7Cisg IGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisgIHJpZ2h0OiAwcHg7Cit9 CisKKy5mdWxsLWNvbnRhaW5lciB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK KyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgcmlnaHQ6IDBweDsKKyAg Ym90dG9tOjBweDsKK30KKworLmZ1bGwtY29udGFpbmVyLXBhbmUgeworICB3 aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworfQorCisudG9wLWNvbnRh aW5lciB7CisgIG1pbi1oZWlnaHQ6IDMwMHB4OworICBoZWlnaHQ6IDEwMCU7 Cit9CisKKy5wZy1kZWJ1Z2dlci1wYW5lbCB7CisgIGhlaWdodDogMTAwJTsK KyAgd2lkdGg6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9w OiAwOyBib3R0b206IDA7IHJpZ2h0OiAwOyBsZWZ0OiAwOworfQorCisud2NM b2FkaW5nSWNvbiB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgZm9udC1z aXplOiAxMDBweDsKKyAgbGVmdDogY2FsYyg1MCUgLSAxMDBweCk7CisgIHRv cDogY2FsYyg1MCUgLSAxMDBweCk7CisgIGhlaWdodDogOTVweDsKK30KKwor LndjTG9hZGluZ0xhYmVsIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB3 aWR0aDogMTAzJTsKKyAgZm9udC1zaXplOiAzMHB4OworICB0b3A6IGNhbGMo NTAlICsgMHB4KTsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL2RpcmVjdC5odG1sIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL2RpcmVjdC5odG1sCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDk4MDMKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMv ZGVidWdnZXIvZGlyZWN0Lmh0bWwKQEAgLTAsMCArMSw2MyBAQAoreyUgZXh0 ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgYmxvY2sgdGl0bGUgJX17eyBfKCdE ZWJ1Z2dlciAtICcpICsgZnVuY3Rpb25fbmFtZSB9fXslIGVuZGJsb2NrICV9 Cit7JSBibG9jayBpbml0X3NjcmlwdCAlfQordHJ5IHsKKyAgcmVxdWlyZSgK KyAgICBbJ3BnYWRtaW4nLCAncGdhZG1pbi50b29scy5kZWJ1Z2dlci5kaXJl Y3QnXSwKKyAgICBmdW5jdGlvbihwZ0FkbWluLCBwZ0RpcmVjdERlYnVnKSB7 CisgICAgICBwZ0RpcmVjdERlYnVnLmluaXQoe3sgdW5pcXVlSWQgfX0sIHt7 IGRlYnVnX3R5cGUgfX0pOworICAgIH0sCisgICAgZnVuY3Rpb24oKSB7Cisg ICAgICAvKiBUT0RPOjogU2hvdyBwcm9wZXIgZXJyb3IgZGlhbG9nICovCisg ICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMpOworICAgIH0pOworfSBjYXRj aCAoZXJyKSB7CisgIC8qIFNob3cgcHJvcGVyIGVycm9yIGRpYWxvZyAqLwor ICBjb25zb2xlLmxvZyhlcnIpOworfQoreyUgZW5kYmxvY2sgJX0KK3slIGJs b2NrIGJvZHkgJX0KKworPG5hdiBjbGFzcz0ibmF2YmFyLWludmVyc2UgbmF2 YmFyLWZpeGVkLXRvcCI+CisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVp ZCI+CisgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNl Ij4KKyAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgorICAgICAg ICA8ZGl2IGlkPSJidG4tdG9vbGJhciIgY2xhc3M9ImJ0bi10b29sYmFyIiBy b2xlPSJ0b29sYmFyIiBhcmlhLWxhYmVsPSIiPgorICAgICAgICAgIDxkaXYg Y2xhc3M9ImJ0bi1ncm91cCIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IiI+ CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0i YnRuIGJ0bi1kZWZhdWx0IGJ0bi1zdGVwLWludG8iIHRpdGxlPSJ7eyBfKCdT dGVwIGludG8nKSB9fSI+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFz cz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93biI+PC9z cGFuPgorICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAg PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQg YnRuLXN0ZXAtb3ZlciIgdGl0bGU9Int7IF8oJ1N0ZXAgb3ZlcicpIH19Ij4K KyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5 cGhpY29uLW5ldy13aW5kb3ciPjwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9i dXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBj bGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1jb250aW51ZSIgdGl0bGU9Int7 IF8oJ0NvbnRpbnVlL1N0YXJ0JykgfX0iPgorICAgICAgICAgICAgICAgICAg PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGxheSI+PC9zcGFu PgorICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICA8L2Rpdj4K KyAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91 cCIgYXJpYS1sYWJlbD0iIj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBl PSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXRvZ2dsZS1i cmVha3BvaW50IiB0aXRsZT0ie3sgXygnVG9nZ2xlIGJyZWFrcG9pbnQnKSB9 fSI+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29u IGdseXBoaWNvbi1yZWNvcmQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9i dXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBj bGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1jbGVhci1icmVha3BvaW50IiB0 aXRsZT0ie3sgXygnQ2xlYXIgYWxsIGJyZWFrcG9pbnRzJykgfX0iPgorICAg ICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGlj b24tYmFuLWNpcmNsZSI+PC9zcGFuPgorICAgICAgICAgICAgICA8L2J1dHRv bj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgPGRpdiBjbGFzcz0i YnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iIj4KKyAgICAg ICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRu LWRlZmF1bHQgYnRuLXN0b3AiIHRpdGxlPSJ7eyBfKCdTdG9wJykgfX0iPgor ICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlw aGljb24tc3RvcCI+PC9zcGFuPgorICAgICAgICAgICAgICA8L2J1dHRvbj4K KyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L3Vs PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvbmF2PgorPGRpdiBpZD0iY29u dGFpbmVyIj48L2Rpdj4KK3slIGVuZGJsb2NrICV9CisKKworeyUgYmxvY2sg Y3NzX2xpbmsgJX0KK3slIGZvciBzdHlsZXNoZWV0IGluIHN0eWxlc2hlZXRz ICV9Cis8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBo cmVmPSJ7eyBzdHlsZXNoZWV0IH19Ii8+Cit7JSBlbmRmb3IgJX0KK3slIGVu ZGJsb2NrICV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvanMvZGVidWdnZXIuanMgYi93ZWIv cGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvanMv ZGVidWdnZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZmExYjZjMQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9qcy9kZWJ1Z2dlci5q cwpAQCAtMCwwICsxLDMwNSBAQAorZGVmaW5lKAorICBbJ2pxdWVyeScsICd1 bmRlcnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ2FsZXJ0aWZ5Jywg J3BnYWRtaW4nLAorICAncGdhZG1pbi5icm93c2VyJywgJ2JhY2tib25lJywg J2JhY2tncmlkJywgJ2NvZGVtaXJyb3InLCAnYmFja2Zvcm0nLAorICAncGdh ZG1pbi50b29scy5kZWJ1Z2dlci51aScsICd3Y2RvY2tlcicsICdwZ2FkbWlu LmJhY2tmb3JtJywKKyAgJ3BnYWRtaW4uYmFja2dyaWQnLCAncGdhZG1pbi5i cm93c2VyLmZyYW1lJ10sCisgIGZ1bmN0aW9uKCQsIF8sIFMsIEFsZXJ0aWZ5 LCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tib25lLCBCYWNrZ3JpZCwgQ29k ZU1pcnJvciwgQmFja2Zvcm0sIGdldF9mdW5jdGlvbl9hcmd1bWVudHMpIHsK KworICBwZ0FkbWluID0gcGdBZG1pbiB8fCB3aW5kb3cucGdBZG1pbiB8fCB7 fTsKKworICB2YXIgcGdUb29scyA9IHBnQWRtaW4uVG9vbHMgPSBwZ0FkbWlu LlRvb2xzIHx8IHt9OworCisgIC8qIFJldHVybiBiYWNrLCB0aGlzIGhhcyBi ZWVuIGNhbGxlZCBtb3JlIHRoYW4gb25jZSAqLworICBpZiAocGdBZG1pbi5U b29scy5EZWJ1Z2dlcikKKyAgICByZXR1cm4gcGdBZG1pbi5Ub29scy5EZWJ1 Z2dlcjsKKworICBwZ1Rvb2xzLkRlYnVnZ2VyID0geworICAgICAgaW5pdDog ZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGlu aXRpYWxpemUgdGhlIG1vZHVsZSBtdWx0aXBsZSB0aW1lcy4KKyAgICAgICAg aWYgKHRoaXMuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICByZXR1cm47CisK KyAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisKKyAgICAgICAg Ly8gSW5pdGlhbGl6ZSB0aGUgY29udGV4dCBtZW51IHRvIGRpc3BsYXkgdGhl IGRlYnVnZ2luZyBvcHRpb25zIHdoZW4gdXNlciBvcGVuIHRoZSBjb250ZXh0 IG1lbnUgZm9yIGZ1bmN0aW9ucworICAgICAgICBwZ0Jyb3dzZXIuYWRkX21l bnVzKFt7CisgICAgICAgICAgbmFtZTogJ2RpcmVjdF9kZWJ1Z2dlcicsIG5v ZGU6ICdmdW5jdGlvbicsIG1vZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBs aWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAnZ2V0X2Z1 bmN0aW9uX2luZm9ybWF0aW9uJywKKyAgICAgICAgICBjYXRlZ29yeTogJ0Rl YnVnZ2luZycsIHByaW9yaXR5OiAxMCwgbGFiZWw6ICd7eyBfKCdEZWJ1Zycp IH19JywKKyAgICAgICAgICBkYXRhOiB7b2JqZWN0OiAnZnVuY3Rpb24nfSwg aWNvbjogJ2ZhIGZhLWFycm93LWNpcmNsZS1yaWdodCcsCisgICAgICAgICAg ZW5hYmxlOiAnY2FuX2RlYnVnJworICAgICAgICB9LHsKKyAgICAgICAgICBu YW1lOiAnZ2xvYmFsX2RlYnVnZ2VyJywgbm9kZTogJ2Z1bmN0aW9uJywgbW9k dWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2Nv bnRleHQnXSwgY2FsbGJhY2s6ICdjaGVja19mdW5jX2RlYnVnZ2FibGUnLAor ICAgICAgICAgIGNhdGVnb3J5OiAnRGVidWdnaW5nJywgcHJpb3JpdHk6IDEw LCBsYWJlbDogJ3t7IF8oJ1NldCBicmVha3BvaW50JykgfX0nLAorICAgICAg ICAgIGRhdGE6IHtvYmplY3Q6ICdmdW5jdGlvbid9LCBpY29uOiAnZmEgZmEt YXJyb3ctY2lyY2xlLXJpZ2h0JywKKyAgICAgICAgICBlbmFibGU6ICdjYW5f ZGVidWcnCisgICAgICAgIH1dKTsKKworICAgICAgICAvLyBDcmVhdGUgYW5k IGxvYWQgdGhlIG5ldyBmcmFtZSByZXF1aXJlZCBmb3IgZGVidWdnZXIgcGFu ZWwKKyAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBwZ0Jyb3dzZXIuRnJhbWUo eworICAgICAgICAgIG5hbWU6ICdmcm1fZGVidWdnZXInLAorICAgICAgICAg IHRpdGxlOiAne3sgXygnRGVidWdnZXInKSB9fScsCisgICAgICAgICAgd2lk dGg6IDUwMCwKKyAgICAgICAgICBpc0Nsb3NlYWJsZTogdHJ1ZSwKKyAgICAg ICAgICBpc1ByaXZhdGU6IHRydWUsCisgICAgICAgICAgdXJsOiAnYWJvdXQ6 YmxhbmsnCisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuZnJhbWUubG9h ZChwZ0Jyb3dzZXIuZG9ja2VyKTsKKyAgICAgIH0sCisgICAgICAvLyBJdCB3 aWxsIGNoZWNrIHdlYXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRl YnVnZ2FibGUgb3Igbm90IHdpdGggcHJlLXJlcXVpcmVkIGNvbmRpdGlvbi4K KyAgICAgIGNhbl9kZWJ1ZzogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRh dGEpIHsKKyAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0 ZW0sIGQgPSBpdGVtRGF0YTsKKyAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVy IHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKKyAgICAgICAgd2hpbGUgKGkp IHsKKyAgICAgICAgICBpZiAoJ2NhdGFsb2cnID09IGQuX3R5cGUpIHsKKyAg ICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgYXJlIG5vdCBjaGlsZCBvZiBjYXRh bG9nCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQor ICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDog bnVsbDsKKyAgICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxs OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluZCB0aGUgZnVuY3Rpb24g aXMgcmVhbGx5IGF2YWlsYWJsZSBpbiBkYXRhYmFzZQorICAgICAgICB2YXIg dHJlZSA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgIGluZm8gPSB0cmVl LnNlbGVjdGVkKCksCisgICAgICAgICAgZF8gPSBpbmZvICYmIGluZm8ubGVu Z3RoID09IDEgPyB0cmVlLml0ZW1EYXRhKGluZm8pIDogdW5kZWZpbmVkLAor ICAgICAgICAgIG5vZGUgPSBkXyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZF8uX3R5 cGVdOworCisgICAgICAgIGlmICghZF8pCisgICAgICAgICAgcmV0dXJuIGZh bHNlOworCisgICAgICAgIHZhciB0cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5v ZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2luZm9dKTsKKworICAgICAgICAv LyBNdXN0IGJlIGEgc3VwZXIgdXNlciBvciBvYmplY3Qgb3duZXIgdG8gY3Jl YXRlIGJyZWFrcG9pbnRzIG9mIGFueSBraW5kCisgICAgICAgIGlmICghKHRy ZWVJbmZvLnNlcnZlci51c2VyLmlzX3N1cGVydXNlciB8fCB0cmVlSW5mby5m dW5jdGlvbi5mdW5jb3duZXIgPT0gdHJlZUluZm8uc2VydmVyLnVzZXIubmFt ZSkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChk Xy5sYW5ndWFnZSAhPSAncGxwZ3NxbCcgJiYgZF8ubGFuZ3VhZ2UgIT0gJ2Vk YnNwbCcpIHsKKyAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9 CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9LAorICAgICAgLyoK KyAgICAgICAgRm9yIHRoZSBkaXJlY3QgZGVidWdnaW5nLCB3ZSBuZWVkIHRv IGZldGNoIHRoZSBmdW5jdGlvbiBpbmZvcm1hdGlvbiB0byBkaXNwbGF5IGlu IHRoZSBkaWFsb2cgc28gImdlbmVyYXRlX3VybCIKKyAgICAgICAgd2lsbCBk eW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgVVJMIGZyb20gdGhlIHNlcnZlcl9p ZCwgZGF0YWJhc2VfaWQsIHNjaGVtYV9pZCBhbmQgZnVuY3Rpb24gaWQuCisg ICAgICAqLworICAgICAgZ2VuZXJhdGVfdXJsOiBmdW5jdGlvbihfdXJsLCB0 cmVlSW5mbywgbm9kZSkgeworICAgICAgICB2YXIgdXJsID0gJ3tCQVNFVVJM fXtVUkx9L3tPQkpUWVBFfXtSRUZ9JywKKyAgICAgICAgICAgIHJlZiA9ICcn OworCisgICAgICAgIF8uZWFjaCgKKyAgICAgICAgICBfLnNvcnRCeSgKKyAg ICAgICAgICAgIF8udmFsdWVzKAorICAgICAgICAgICAgICBfLnBpY2sodHJl ZUluZm8sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKHYsIGssIG8pIHsKKyAg ICAgICAgICAgICAgICByZXR1cm4gKGsgIT0gJ3NlcnZlci1ncm91cCcpOwor ICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAg IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ucHJpb3JpdHk7IH0KKyAgICAgICAg ICApLAorICAgICAgICAgIGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgICAgIHJl ZiA9IFMoJyVzLyVzJykuc3ByaW50ZihyZWYsIGVuY29kZVVSSShvLl9pZCkp LnZhbHVlKCk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgdmFyIGFyZ3Mg PSB7CisgICAgICAgICAgJ1VSTCc6IF91cmwsCisgICAgICAgICAgJ0JBU0VV UkwnOiAne3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKX19JywKKyAgICAg ICAgICAnUkVGJzogcmVmLAorICAgICAgICAgICdPQkpUWVBFJzogZW5jb2Rl VVJJKG5vZGUudHlwZSkKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4g dXJsLnJlcGxhY2UoL3soXHcrKX0vZywgZnVuY3Rpb24obWF0Y2gsIGFyZykg eworICAgICAgICAgIHJldHVybiBhcmdzW2FyZ107CisgICAgICAgIH0pOwor ICAgICAgfSwKKworICAgICAgY2hlY2tfZnVuY19kZWJ1Z2dhYmxlOiBmdW5j dGlvbihhcmdzLCBpdGVtKSB7CisgICAgICAgIHZhciBpbnB1dCA9IGFyZ3Mg fHwge30sCisgICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAg ICAgIGkgPSBpdGVtIHx8IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICBkID0g aSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5l ZCwKKyAgICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5f dHlwZV07CisKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgIHJldHVybjsK KworICAgICAgICB2YXIgb2JqTmFtZSA9IGQubGFiZWwsCisgICAgICAgICAg ICB0cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHko bm9kZSwgW2ldKSwKKyAgICAgICAgICAgIF91cmwgPSB0aGlzLmdlbmVyYXRl X3VybCgnaW5pdCcsIHRyZWVJbmZvLCBub2RlKTsKKworICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJs OiBfdXJsLAorICAgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIHNlbGYuc3Rh cnRfZ2xvYmFsX2RlYnVnZ2VyKCk7CisgICAgICAgICAgfSwKKyAgICAgICAg ICBlcnJvcjogZnVuY3Rpb24oeGhyLCBzdGF0dXMsIGVycm9yKSB7CisgICAg ICAgICAgICB0cnkgeworICAgICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJz ZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgIGlmIChl cnIuc3VjY2VzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgbXNnID0gUygn e3sgXygnICsgZXJyLmVycm9ybXNnICsgJyl9fScpLnZhbHVlKCk7CisgICAg ICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoInt7IF8oJyIgKyBlcnIuZXJy b3Jtc2cgKyAiJykgfX0iKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSBjYXRjaCAoZSkge30KKyAgICAgICAgICB9CisgICAgICAgIH0pOwor ICAgICAgfSwKKworICAgICAgLy9DYWxsYmFjayBmdW5jdGlvbiB3aGVuIHVz ZXIgc3RhcnQgdGhlIGluZGlyZWN0IGRlYnVnZ2luZyAoIExpc3RlbiB0byBh bm90aGVyIHNlc3Npb24gdG8gaW52b2tlIHRoZSB0YXJnZXQgKQorICAgICAg c3RhcnRfZ2xvYmFsX2RlYnVnZ2VyOiBmdW5jdGlvbihhcmdzLCBpdGVtKSB7 CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRhcmdldCBhbmQgY3JlYXRl IGFzeW5jaHJvbm91cyBjb25uZWN0aW9uIGFuZCB1bmlxdWUgdHJhbnNhY3Rp b24gSUQKKyAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAg ICAgICBpID0gdC5zZWxlY3RlZCgpLAorICAgICAgICAgIGQgPSBpICYmIGku bGVuZ3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkLAorICAg ICAgICAgIG5vZGUgPSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXTsK KworICAgICAgICBpZiAoIWQpCisgICAgICAgICAgcmV0dXJuOworCisgICAg ICAgIHZhciB0cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHku YXBwbHkobm9kZSwgW2ldKTsKKworICAgICAgICB2YXIgYmFzZVVybCA9ICJ7 eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJpbml0aWFsaXpl X3RhcmdldC8iICsgImluZGlyZWN0LyIgKyB0cmVlSW5mby5zZXJ2ZXIuX2lk ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iICsgdHJl ZUluZm8uZGF0YWJhc2UuX2lkICsgIi8iICsgdHJlZUluZm8uc2NoZW1hLl9p ZCArICIvIiArIHRyZWVJbmZvLmZ1bmN0aW9uLl9pZDsKKworICAgICAgICAk LmFqYXgoeworICAgICAgICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICBt ZXRob2Q6ICdHRVQnLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJl cykgeworICAgICAgICAgICAgdmFyIHVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1 Z2dlci5pbmRleCcpIH19IiArICJkaXJlY3QvIiArIHJlcy5kYXRhLmRlYnVn Z2VyVHJhbnNJZDsKKworICAgICAgICAgICAgcGdCcm93c2VyLkV2ZW50cy5v bmNlKAorICAgICAgICAgICAgICAncGdhZG1pbi1icm93c2VyOmZyYW1lOnVy bGxvYWRlZDpmcm1fZGVidWdnZXInLCBmdW5jdGlvbihmcmFtZSkgeworICAg ICAgICAgICAgICBmcmFtZS5vcGVuVVJMKHVybCk7CisgICAgICAgICAgICB9 KTsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBkZWJ1Z2dlciBwYW5l bCBhcyBwZXIgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB1c2VyIGlucHV0IGRp YWxvZy4KKyAgICAgICAgICAgIHZhciBkYXNoYm9hcmRQYW5lbCA9IHBnQnJv d3Nlci5kb2NrZXIuZmluZFBhbmVscygKKyAgICAgICAgICAgICAgJ2Rhc2hi b2FyZCcKKyAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgcGFuZWwg PSBwZ0Jyb3dzZXIuZG9ja2VyLmFkZFBhbmVsKAorICAgICAgICAgICAgICAg ICdmcm1fZGVidWdnZXInLCB3Y0RvY2tlci5ET0NLLlNUQUNLRUQsIGRhc2hi b2FyZFBhbmVsWzBdCisgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAg ICAgcGFuZWwuZm9jdXMoKTsKKworICAgICAgICAgICAgICAvLyBQYW5lbCBD bG9zZWQgZXZlbnQKKyAgICAgICAgICAgICAgcGFuZWwub24od2NEb2NrZXIu RVZFTlQuQ0xPU0VELCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2 YXIgY2xvc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKSB9 fSIgKyAiY2xvc2UvIiArIHJlcy5kYXRhLmRlYnVnZ2VyVHJhbnNJZDsKKyAg ICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgICAgdXJs OiBjbG9zZVVybCwKKyAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcK KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsK KyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAg ICAgJ0RlYnVnZ2VyIHRhcmdldCBJbml0aWFsaXplIEVycm9yJworICAgICAg ICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg IH0sCisKKyAgICAgIC8qCisgICAgICAgIEdldCB0aGUgZnVuY3Rpb24gaW5m b3JtYXRpb24gZm9yIHRoZSBkaXJlY3QgZGVidWdnaW5nIHRvIGRpc3BsYXkg dGhlIGZ1bmN0aW9ucyBhcmd1bWVudHMgYW5kICBvdGhlciBpbmZvcm1hdGlv bnMKKyAgICAgICAgaW4gdGhlIHVzZXIgaW5wdXQgZGlhbG9nCisgICAgICAq LworICAgICAgZ2V0X2Z1bmN0aW9uX2luZm9ybWF0aW9uOiBmdW5jdGlvbihh cmdzLCBpdGVtKSB7CisgICAgICAgIHZhciBpbnB1dCA9IGFyZ3MgfHwge30s CisgICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgIGkg PSBpdGVtIHx8IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICBkID0gaSAmJiBp Lmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZCwKKyAg ICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV07 CisKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgIHJldHVybjsKKworICAg ICAgICB2YXIgb2JqTmFtZSA9IGQubGFiZWwsCisgICAgICAgICAgICB0cmVl SW5mbyA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwg W2ldKSwKKyAgICAgICAgICAgIF91cmwgPSB0aGlzLmdlbmVyYXRlX3VybCgn aW5pdCcsIHRyZWVJbmZvLCBub2RlKTsKKworICAgICAgICB2YXIgc2VsZiA9 IHRoaXM7CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBfdXJs LAorICAgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAgICBzdWNjZXNz OiBmdW5jdGlvbihyZXMpIHsKKworICAgICAgICAgICAgLy8gT3BlbiBBbGVy dGlmeSB0aGUgZGlhbG9nIHRvIHRha2UgdGhlIGlucHV0IGFyZ3VtZW50cyBm cm9tIHVzZXIgaWYgZnVuY3Rpb24gaGF2aW5nIGlucHV0IGFyZ3VtZW50cwor ICAgICAgICAgICAgaWYgKHJlcy5kYXRhWzBdWydyZXF1aXJlX2lucHV0J10p IHsKKyAgICAgICAgICAgICAgZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50cyhyZXMu ZGF0YVswXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK KwkgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFyZ2V0IGFuZCBjcmVh dGUgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24gYW5kIHVuaXF1ZSB0cmFuc2Fj dGlvbiBJRAorCSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhcmd1bWVu dHMgdG8gdGhlIGZ1bmN0aW9ucyB0aGVuIHdlIHNob3VsZCBub3QgYXNrIGZv ciBmb3IgZnVuY3Rpb24gYXJndW1lbnRzIGFuZAorCSAgICAgICAgICAvLyBE aXJlY3RseSBvcGVuIHRoZSBwYW5lbAorICAgICAgICAgICAgICB2YXIgdCA9 IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgICAgICAgIGkgPSB0LnNlbGVj dGVkKCksCisgICAgICAgICAgICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0g MSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQsCisgICAgICAgICAgICAg ICAgbm9kZSA9IGQgJiYgcGdCcm93c2VyLk5vZGVzW2QuX3R5cGVdOworCisg ICAgICAgICAgICAgIGlmICghZCkKKyAgICAgICAgICAgICAgICByZXR1cm47 CisKKyAgICAgICAgICAgICAgdmFyIHRyZWVJbmZvID0gbm9kZS5nZXRUcmVl Tm9kZUhpZXJhcmNoeS5hcHBseShub2RlLCBbaV0pOworCisgICAgICAgICAg ICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4 JykgfX0iICsgImluaXRpYWxpemVfdGFyZ2V0LyIgKyAiZGlyZWN0LyIgKyB0 cmVlSW5mby5zZXJ2ZXIuX2lkICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIi8iICsgdHJlZUluZm8uZGF0YWJhc2UuX2lkICsgIi8iICsg dHJlZUluZm8uc2NoZW1hLl9pZCArICIvIiArIHRyZWVJbmZvLmZ1bmN0aW9u Ll9pZDsKKworICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAg ICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICAgICAgICBtZXRob2Q6ICdH RVQnLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykg eworCisgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gInt7IHVybF9mb3Io J2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImRpcmVjdC8iICsgcmVzLmRhdGEu ZGVidWdnZXJUcmFuc0lkOworCisgICAgICAgICAgICAgICAgICBwZ0Jyb3dz ZXIuRXZlbnRzLm9uY2UoCisgICAgICAgICAgICAgICAgICAgICdwZ2FkbWlu LWJyb3dzZXI6ZnJhbWU6dXJsbG9hZGVkOmZybV9kZWJ1Z2dlcicsIGZ1bmN0 aW9uKGZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLm9wZW5V UkwodXJsKTsKKyAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg ICAgICAgICAvLyBDcmVhdGUgdGhlIGRlYnVnZ2VyIHBhbmVsIGFzIHBlciB0 aGUgZGF0YSByZWNlaXZlZCBmcm9tIHVzZXIgaW5wdXQgZGlhbG9nLgorICAg ICAgICAgICAgICAgICAgdmFyIGRhc2hib2FyZFBhbmVsID0gcGdCcm93c2Vy LmRvY2tlci5maW5kUGFuZWxzKAorICAgICAgICAgICAgICAgICAgICAnZGFz aGJvYXJkJworICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAg ICAgICAgICBwYW5lbCA9IHBnQnJvd3Nlci5kb2NrZXIuYWRkUGFuZWwoCisg ICAgICAgICAgICAgICAgICAgICAgJ2ZybV9kZWJ1Z2dlcicsIHdjRG9ja2Vy LkRPQ0suU1RBQ0tFRCwgZGFzaGJvYXJkUGFuZWxbMF0KKyAgICAgICAgICAg ICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICBwYW5lbC5mb2N1 cygpOworCisgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBQYW5lbCBD bG9zZWQgZXZlbnQKKyAgICAgICAgICAgICAgICAgIHBhbmVsLm9uKHdjRG9j a2VyLkVWRU5ULkNMT1NFRCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg ICAgICAgIHZhciBjbG9zZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5p bmRleCcpIH19IiArICJjbG9zZS8iICsgcmVzLmRhdGEuZGVidWdnZXJUcmFu c0lkOworICAgICAgICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAg ICAgICAgICAgICAgIHVybDogY2xvc2VVcmwsCisgICAgICAgICAgICAgICAg ICAgICAgbWV0aG9kOiAnR0VUJworICAgICAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg ICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICAg ICAnRGVidWdnZXIgdGFyZ2V0IEluaXRpYWxpemUgRXJyb3InLAorICAgICAg ICAgICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZworICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAg ICAgZXJyb3I6IGZ1bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikgeworICAg ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFy c2VKU09OKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICBpZiAo ZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAgIG1zZyA9IFMo J3t7IF8oJyArIGVyci5lcnJvcm1zZyArICcpfX0nKS52YWx1ZSgpOworICAg ICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KCJ7eyBfKCciICsgZXJyLmVy cm9ybXNnICsgIicpIH19Iik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICAgICAgfQorICAgICAgICB9KTsK KyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIHBnQWRtaW4uVG9vbHMu RGVidWdnZXI7CisgIH0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBs YXRlcy9kZWJ1Z2dlci9qcy9kZWJ1Z2dlcl91aS5qcyBiL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9qcy9kZWJ1Z2dl cl91aS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41 NzIzMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL2pzL2RlYnVnZ2VyX3VpLmpz CkBAIC0wLDAgKzEsNDE0IEBACitkZWZpbmUoCisgIFsnanF1ZXJ5JywgJ3Vu ZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAnYWxlcnRpZnknLCAn cGdhZG1pbicsCisgICAncGdhZG1pbi5icm93c2VyJywgJ2JhY2tib25lJywg J2JhY2tncmlkJywgJ2NvZGVtaXJyb3InLCAnYmFja2Zvcm0nLAorICAgJ3dj ZG9ja2VyJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1pbi5iYWNrZ3Jp ZCcsCisgICAncGdhZG1pbi5icm93c2VyLnBhbmVsJ10sCisgIGZ1bmN0aW9u KCQsIF8sIFMsIEFsZXJ0aWZ5LCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2ti b25lLCBCYWNrZ3JpZCwgQ29kZU1pcnJvciwgQmFja2Zvcm0gKSB7CisKKyAg LyoKKyAgICogRnVuY3Rpb24gdXNlZCB0byByZXR1cm4gdGhlIHJlc3BlY3Rp dmUgQmFja2dyaWQgY29udHJvbCBiYXNlZCBvbiB0aGUgZGF0YSB0eXBlCisg ICAqIG9mIGZ1bmN0aW9uIGlucHV0IGFyZ3VtZW50LgorICAgKi8KKyAgdmFy IGNlbGxGdW5jdGlvbiA9IGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgdmFyIHNl bGYgPSB0aGlzLAorICAgIHZhcmlhYmxlX3R5cGUgPSBtb2RlbC5nZXQoInR5 cGUiKTsKKworICAgIC8vIGlmIHZhcmlhYmxlIHR5cGUgaXMgYW4gYXJyYXkg dGhlbiB3ZSBuZWVkIHRvIHJlbmRlciB0aGUgY3VzdG9tIGNvbnRyb2wgdG8g dGFrZSB0aGUgaW5wdXQgZnJvbSB1c2VyLgorICAgIGlmICh2YXJpYWJsZV90 eXBlLmluZGV4T2YoIltdIikgIT0tMSkgeworICAgICAgaWYgKHZhcmlhYmxl X3R5cGUuaW5kZXhPZigiaW50ZWdlciIpICE9IC0xKSB7CisgICAgICAgIHJl dHVybiBCYWNrZ3JpZC5FeHRlbnNpb24uSW5wdXRJbnRlZ2VyQXJyYXlDZWxs OworICAgICAgfQorICAgICAgcmV0dXJuIEJhY2tncmlkLkV4dGVuc2lvbi5J bnB1dFN0cmluZ0FycmF5Q2VsbDsKKyAgICB9CisKKyAgICBzd2l0Y2godmFy aWFibGVfdHlwZSkgeworICAgICAgY2FzZSAiYm9vbCI6CisgICAgICAgIHJl dHVybiBCYWNrZ3JpZC5Cb29sZWFuQ2VsbDsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgImludGVnZXIiOgorICAgICAgICByZXR1cm4gQmFja2dy aWQuSW50ZWdlckNlbGw7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl ICJyZWFsIjoKKyAgICAgICAgcmV0dXJuIEJhY2tncmlkLk51bWJlckNlbGw7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICJzdHJpbmciOgorICAg ICAgICByZXR1cm4gQmFja2dyaWQuU3RyaW5nQ2VsbDsKKyAgICAgICAgYnJl YWs7CisgICAgICBjYXNlICJkYXRlIjoKKyAgICAgICAgcmV0dXJuIEJhY2tn cmlkLkRhdGVDZWxsOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6 CisgICAgICAgIHJldHVybiBCYWNrZ3JpZC5DZWxsOworICAgICAgICBicmVh azsKKyAgICB9CisgIH0KKworICAvKgorICAgKiBGdW5jdGlvbiB1c2VkIHRv IHJldHVybiB0aGUgcmVzcGVjdGl2ZSBCYWNrZ3JpZCBzdHJpbmcgb3IgYm9v bGVhbiBjb250cm9sIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUKKyAgICogb2Yg ZnVuY3Rpb24gaW5wdXQgYXJndW1lbnQuCisgICAqLworICB2YXIgY2VsbEV4 cHJDb250cm9sRnVuY3Rpb24gPSBmdW5jdGlvbihtb2RlbCkgeworICAgIHZh ciBzZWxmID0gdGhpcywKKyAgICB2YXJpYWJsZV90eXBlID0gbW9kZWwuZ2V0 KCJ0eXBlIik7CisgICAgaWYgKHZhcmlhYmxlX3R5cGUuaW5kZXhPZigiW10i KSAhPS0xKSB7CisgICAgICByZXR1cm4gQmFja2dyaWQuU3RyaW5nQ2VsbDsK KyAgICB9CisgICAgcmV0dXJuIEJhY2tncmlkLkJvb2xlYW5DZWxsOworICB9 CisKKyAgLyoqCisgICAqICBEZWJ1Z2dlcklucHV0QXJnc01vZGVsIHVzZWQg dG8gcmVwcmVzZW50IGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlv biB0byBkZWJ1ZworICAgKiAgZm9yIGZ1bmN0aW9uIG9iamVjdHMuCisgICAq Ki8KKyAgdmFyIERlYnVnZ2VySW5wdXRBcmdzTW9kZWwgPSBCYWNrYm9uZS5N b2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAgICBuYW1lOiB1 bmRlZmluZWQsCisgICAgICB0eXBlOiB1bmRlZmluZWQsCisgICAgICBpc19u dWxsOiB1bmRlZmluZWQsCisgICAgICBleHByOiB1bmRlZmluZWQsCisgICAg ICB2YWx1ZTogdW5kZWZpbmVkLAorICAgICAgdXNlX2RlZmF1bHQ6IHVuZGVm aW5lZCwKKyAgICAgIGRlZmF1bHRfdmFsdWU6IHVuZGVmaW5lZCwKKyAgICB9 LAorICAgIHZhbGlkYXRlOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChfLmlz VW5kZWZpbmVkKHRoaXMuZ2V0KCd2YWx1ZScpKSB8fAorICAgICAgICAgIF8u aXNOdWxsKHRoaXMuZ2V0KCd2YWx1ZScpKSB8fAorICAgICAgICAgIFN0cmlu Zyh0aGlzLmdldCgndmFsdWUnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcn KSA9PSAnJykgeworICAgICAgICB2YXIgbXNnID0gJ3t7IF8oJ1BsZWFzZSBl bnRlciBzb21lIHZhbHVlIScpIH19JzsKKyAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnNldCgndmFsdWUnLCBtc2cpOworICAgICAgICByZXR1cm4gbXNnOwor ICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5lcnJvck1vZGVsLnVuc2V0 KCd2YWx1ZScpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAg fQorICB9KTsKKworICAvLyBDb2xsZWN0aW9uIHdoaWNoIGNvbnRhaW5zIHRo ZSBtb2RlbCBmb3IgZnVuY3Rpb24gaW5mb3JtYXRpb25zLgorICB2YXIgRGVi dWdnZXJJbnB1dEFyZ0NvbGxlY3Rpb25zID0gQmFja2JvbmUuQ29sbGVjdGlv bi5leHRlbmQoeworICAgIG1vZGVsOiBEZWJ1Z2dlcklucHV0QXJnc01vZGVs CisgIH0pOworCisgIC8vIGZ1bmN0aW9uIHdpbGwgZW5hYmxlL2Rpc2FibGUg dGhlIHVzZV9kZWZhdWx0IGNvbHVtbiBiYXNlZCBvbiB0aGUgdmFsdWUgcmVj ZWl2ZWQuCisgIHZhciBkaXNhYmxlRGVmYXVsdENlbGwgPSBmdW5jdGlvbihk KSB7CisgICAgaWYgKGQgaW5zdGFuY2VvZiBCYWNrYm9uZS5Nb2RlbCkgewor ICAgICAgICByZXR1cm4gZC5nZXQoJ3VzZV9kZWZhdWx0Jyk7CisgICAgfQor ICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICAvLyBFbmFibGUvRGlzYWJs ZSB0aGUgY29udHJvbCBiYXNlZCBvbiB0aGUgYXJyYXkgZGF0YSB0eXBlIG9m IHRoZSBmdW5jdGlvbiBpbnB1dCBhcmd1bWVudHMKKyAgdmFyIGRpc2FibGVF eHByZXNzaW9uQ29udHJvbCA9IGZ1bmN0aW9uKGQpIHsKKyAgICB2YXIgYXJn VHlwZSA9IGQuZ2V0KCd0eXBlJyk7CisgICAgaWYgKGQgaW5zdGFuY2VvZiBC YWNrYm9uZS5Nb2RlbCkgeworICAgICAgdmFyIGFyZ1R5cGUgPSBkLmdldCgn dHlwZScpOworICAgICAgaWYgKGFyZ1R5cGUuaW5kZXhPZigiW10iKSAhPS0x KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHJl dHVybiB0cnVlOworICAgIH0KKyAgfTsKKworICB2YXIgcmVzID0gIGZ1bmN0 aW9uKGFyZ3MpIHsKKyAgICBpZiAoIUFsZXJ0aWZ5LmRlYnVnZ2VySW5wdXRB cmdzRGlhbG9nKSB7CisgICAgICBBbGVydGlmeS5kaWFsb2coJ2RlYnVnZ2Vy SW5wdXRBcmdzRGlhbG9nJywgZnVuY3Rpb24gZmFjdG9yeSgpIHsKKyAgICAg ICAgcmV0dXJuIHsKKyAgICAgICAgICBtYWluOmZ1bmN0aW9uKHRpdGxlLCBk YXRhKSB7CisgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCB0aXRsZSk7 CisgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworCisgICAgICAgICAg ICB2YXIgYXJnbmFtZSwgYXJndHlwZSwgYXJnbW9kZSwgZGVmYXVsdF9hcmdz X2NvdW50LCBkZWZhdWx0X2FyZ3MsIGFyZ19jbnQ7CisKKyAgICAgICAgICAg IHZhciB2YWx1ZV9oZWFkZXIgPSBCYWNrZ3JpZC5IZWFkZXJDZWxsLmV4dGVu ZCh7CisgICAgICAgICAgICAgICAgLy8gQWRkIGZpeGVkIHdpZHRoIHRvIHRo ZSAidmFsdWUiIGNvbHVtbgorICAgICAgICAgICAgICAgIGNsYXNzTmFtZTog J3dpZHRoX3BlcmNlbnRfMjUnCisgICAgICAgICAgICB9KTsKKworICAgICAg ICAgICAgdmFyIGRlZl92YWxfbGlzdCA9IFtdLAorICAgICAgICAgICAgZ3Jp ZENvbHMgPSBbCisgICAgICAgICAgICAgIHtuYW1lOiAnbmFtZScsIGxhYmVs OidOYW1lJywgdHlwZTondGV4dCcsIGVkaXRhYmxlOiBmYWxzZSwgY2VsbDon c3RyaW5nJyB9LAorICAgICAgICAgICAgICB7bmFtZTogJ3R5cGUnLCBsYWJl bDonVHlwZScsIHR5cGU6ICd0ZXh0JywgZWRpdGFibGU6IGZhbHNlLCBjZWxs OidzdHJpbmcnIH0sCisgICAgICAgICAgICAgIHtuYW1lOiAnaXNfbnVsbCcs IGxhYmVsOidOdWxsPycsIHR5cGU6ICdib29sZWFuJywgY2VsbDogJ2Jvb2xl YW4nIH0sCisgICAgICAgICAgICAgIHtuYW1lOiAnZXhwcicsIGxhYmVsOidF eHByZXNzaW9uPycsIHR5cGU6ICdib29sZWFuJywgY2VsbEZ1bmN0aW9uOiBj ZWxsRXhwckNvbnRyb2xGdW5jdGlvbiwgZWRpdGFibGU6IGRpc2FibGVFeHBy ZXNzaW9uQ29udHJvbCB9LAorICAgICAgICAgICAgICB7bmFtZTogJ3ZhbHVl JywgbGFiZWw6J1ZhbHVlJywgdHlwZTogJ3RleHQnLCBlZGl0YWJsZTogdHJ1 ZSwgY2VsbEZ1bmN0aW9uOiBjZWxsRnVuY3Rpb24sIGhlYWRlckNlbGw6IHZh bHVlX2hlYWRlciB9LAorICAgICAgICAgICAgICB7bmFtZTogJ3VzZV9kZWZh dWx0JywgbGFiZWw6J1VzZSBEZWZhdWx0PycsIHR5cGU6ICdib29sZWFuJywg Y2VsbDoiYm9vbGVhbiIsIGVkaXRhYmxlOiBkaXNhYmxlRGVmYXVsdENlbGwg fSwKKyAgICAgICAgICAgICAge25hbWU6ICdkZWZhdWx0X3ZhbHVlJywgbGFi ZWw6J0RlZmF1bHQgdmFsdWUnLCB0eXBlOiAndGV4dCcsIGVkaXRhYmxlOiBm YWxzZSwgY2VsbDonc3RyaW5nJyB9CisgICAgICAgICAgICBdOworCisgICAg ICAgICAgICB2YXIgbXlfb2JqID0gW107CisKKyAgICAgICAgICAgIGFyZ3R5 cGUgPSB0aGlzLmRhdGFbJ3Byb2FyZ3R5cGVuYW1lcyddLnNwbGl0KCIsIik7 CisKKyAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ3Byb2FyZ21vZGVzJ10g IT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFyZ21vZGUgPSB0aGlzLmRh dGFbJ3Byb2FyZ21vZGVzJ10uc3BsaXQoIiwiKTsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVsncHJvbmFyZ2RlZmF1bHRz J10pIHsKKyAgICAgICAgICAgICAgZGVmYXVsdF9hcmdzX2NvdW50ID0gdGhp cy5kYXRhWydwcm9uYXJnZGVmYXVsdHMnXTsKKyAgICAgICAgICAgICAgZGVm YXVsdF9hcmdzID0gdGhpcy5kYXRhWydwcm9hcmdkZWZhdWx0cyddLnNwbGl0 KCIsIik7CisgICAgICAgICAgICAgIGFyZ19jbnQgPSBkZWZhdWx0X2FyZ3Nf Y291bnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlz LmRhdGFbJ3Byb2FyZ25hbWVzJ10gIT0gbnVsbCkgeworICAgICAgICAgICAg ICBhcmduYW1lID0gdGhpcy5kYXRhWydwcm9hcmduYW1lcyddLnNwbGl0KCIs Iik7CisKKyAgICAgICAgICAgICAgLy8gSXQgd2lsbCBhc3NpZ24gZGVmYXVs dCB2YWx1ZXMgdG8gIkRlZmF1bHQgdmFsdWUiIGNvbHVtbgorICAgICAgICAg ICAgICBmb3IgKGogPSAoYXJnbmFtZS5sZW5ndGggLSAxKTtqID49IDA7IGot LSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ3Byb2FyZ21v ZGVzJ10gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgaWYgKGFyZ19j bnQgJiYgKGFyZ21vZGVbal0gPT0gJ2knIHx8IGFyZ21vZGVbal0gPT0gJ2In KSkgeworICAgICAgICAgICAgICAgICAgICBhcmdfY250ID0gYXJnX2NudCAt IDE7CisgICAgICAgICAgICAgICAgICAgIGRlZl92YWxfbGlzdFtqXSA9IGRl ZmF1bHRfYXJnc1thcmdfY250XQorICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRl Zl92YWxfbGlzdFtqXSA9ICI8Tm8gZGVmYXVsdCB2YWx1ZT4iOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGlmIChhcmdfY250KSB7 CisgICAgICAgICAgICAgICAgICAgIGFyZ19jbnQgPSBhcmdfY250IC0gMTsK KyAgICAgICAgICAgICAgICAgICAgZGVmX3ZhbF9saXN0W2pdID0gZGVmYXVs dF9hcmdzW2FyZ19jbnRdCisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmX3Zh bF9saXN0W2pdID0gIjxObyBkZWZhdWx0IHZhbHVlPiI7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgaWYgKGFyZ3R5cGUubGVuZ3RoICE9IDApCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgYXJndHlwZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAg aWYgKHRoaXMuZGF0YVsncHJvYXJnbW9kZXMnXSAhPSBudWxsKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIChhcmdtb2RlW2ldID09ICdpJyB8fCBhcmdt b2RlW2ldID09ICdiJykgeworICAgICAgICAgICAgICAgICAgICAgIHZhciB1 c2VfZGVmX3ZhbHVlID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoZGVmX3ZhbF9saXN0W2ldICE9ICI8Tm8gZGVmYXVsdCB2YWx1ZT4iKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VfZGVmX3ZhbHVlID0gdHJ1 ZTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgbXlfb2JqLnB1c2goeyAibmFtZSI6IGFyZ25hbWVbaV0sICJ0eXBl IjogYXJndHlwZVtpXSwgInVzZV9kZWZhdWx0IjogdXNlX2RlZl92YWx1ZSwg ImRlZmF1bHRfdmFsdWUiOiBkZWZfdmFsX2xpc3RbaV19KTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB1c2Vf ZGVmX3ZhbHVlID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRl Zl92YWxfbGlzdFtpXSAhPSAiPE5vIGRlZmF1bHQgdmFsdWU+IikgeworICAg ICAgICAgICAgICAgICAgICAgIHVzZV9kZWZfdmFsdWUgPSB0cnVlOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG15X29i ai5wdXNoKHsgIm5hbWUiOiBhcmduYW1lW2ldLCAidHlwZSI6IGFyZ3R5cGVb aV0sICJ1c2VfZGVmYXVsdCI6IHVzZV9kZWZfdmFsdWUsICJkZWZhdWx0X3Zh bHVlIjogZGVmX3ZhbF9saXN0W2ldfSk7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgLyoK KyAgICAgICAgICAgICAgIEdlbmVyYXRlIHRoZSBuYW1lIHBhcmFtZXRlciBp ZiBmdW5jdGlvbiBkbyBub3QgaGF2ZSBhcmd1bWVudHMgbmFtZQorICAgICAg ICAgICAgICAgbGlrZSBkYmdwYXJhbTEsIGRiZ3BhcmFtMiBldGMuCisgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgIHZhciBteWFyZ25hbWUgPSBb XTsKKworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJndHlwZS5s ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIG15YXJnbmFtZVtpXSA9 ICJkYmdwYXJhbSIgKyAoaSsxKTsKKyAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgYXJndW1lbnRz CisgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhWydwcm9uYXJnZGVmYXVs dHMnXSkgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmd0 eXBlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICBteV9vYmou cHVzaCh7ICJuYW1lIjogbXlhcmduYW1lW2ldLCAidHlwZSI6IGFyZ3R5cGVb aV0sICJ1c2VfZGVmYXVsdCI6IGZhbHNlLCAiZGVmYXVsdF92YWx1ZSI6ICI8 Tm8gZGVmYXVsdCB2YWx1ZT4ifSk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgICAgIC8vIElmIHRoZXJlIGlzIGRlZmF1bHQgYXJndW1lbnRzCisgICAg ICAgICAgICAgICAgLy9CZWxvdyBsb2dpYyB3aWxsIGFzc2lnbiBkZWZhdWx0 IHZhbHVlcyB0byAiRGVmYXVsdCB2YWx1ZSIgY29sdW1uCisgICAgICAgICAg ICAgICAgZm9yIChqID0gKG15YXJnbmFtZS5sZW5ndGggLSAxKTtqID49IDA7 IGotLSkgeworICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVsncHJv YXJnbW9kZXMnXSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlm IChhcmdfY250KSB7CisgICAgICAgICAgICAgICAgICAgICAgYXJnX2NudCA9 IGFyZ19jbnQgLSAxOworICAgICAgICAgICAgICAgICAgICAgIGRlZl92YWxf bGlzdFtqXSA9IGRlZmF1bHRfYXJnc1thcmdfY250XQorICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgIGRlZl92YWxfbGlzdFtqXSA9ICI8Tm8gZGVmYXVs dCB2YWx1ZT4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKGFyZ19jbnQgJiYgKGFyZ21vZGVbal0gPT0gJ2kn IHx8IGFyZ21vZGVbal0gPT0gJ2InKSkgeworICAgICAgICAgICAgICAgICAg ICAgIGFyZ19jbnQgPSBhcmdfY250IC0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICBkZWZfdmFsX2xpc3Rbal0gPSBkZWZhdWx0X2FyZ3NbYXJnX2NudF0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZfdmFsX2xpc3Rbal0g PSAiPE5vIGRlZmF1bHQgdmFsdWU+IjsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmd0eXBlLmxlbmd0 aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhWydw cm9hcmdtb2RlcyddID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAg dmFyIHVzZV9kZWZfdmFsdWUgPSBmYWxzZQorICAgICAgICAgICAgICAgICAg ICBpZiAoZGVmX3ZhbF9saXN0W2ldICE9ICI8Tm8gZGVmYXVsdCB2YWx1ZT4i KSB7CisgICAgICAgICAgICAgICAgICAgICAgdXNlX2RlZl92YWx1ZSA9IHRy dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgbXlfb2JqLnB1c2goeyAibmFtZSI6IG15YXJnbmFtZVtpXSwgInR5cGUi OiBhcmd0eXBlW2ldLCAidXNlX2RlZmF1bHQiOiB1c2VfZGVmX3ZhbHVlLCAi ZGVmYXVsdF92YWx1ZSI6IGRlZl92YWxfbGlzdFtpXX0pOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIGlmIChhcmdtb2RlW2ldID09ICdpJyB8fCBhcmdtb2Rl W2ldID09ICdiJykgeworICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2Vf ZGVmX3ZhbHVlID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiAo ZGVmX3ZhbF9saXN0W2ldICE9ICI8Tm8gZGVmYXVsdCB2YWx1ZT4iKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICB1c2VfZGVmX3ZhbHVlID0gdHJ1ZTsK KyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgbXlfb2JqLnB1c2goeyAibmFtZSI6IG15YXJnbmFtZVtpXSwgInR5cGUi OiBhcmd0eXBlW2ldLCAidXNlX2RlZmF1bHQiOiB1c2VfZGVmX3ZhbHVlLCAi ZGVmYXVsdF92YWx1ZSI6IGRlZl92YWxfbGlzdFtpXX0pOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIHZhciBkZWJ1Z2dlcklucHV0QXJnc0NvbGwgPSB0aGlzLmRl YnVnZ2VySW5wdXRBcmdzQ29sbCA9IG5ldyBEZWJ1Z2dlcklucHV0QXJnQ29s bGVjdGlvbnMobXlfb2JqKTsKKworICAgICAgICAgICAgLy8gSW5pdGlhbGl6 ZSBhIG5ldyBHcmlkIGluc3RhbmNlCisgICAgICAgICAgICB2YXIgZ3JpZCA9 IHRoaXMuZ3JpZCA9IG5ldyBCYWNrZ3JpZC5HcmlkKHsKKyAgICAgICAgICAg ICAgY29sdW1uczogZ3JpZENvbHMsCisgICAgICAgICAgICAgIGNvbGxlY3Rp b246IGRlYnVnZ2VySW5wdXRBcmdzQ29sbCwKKyAgICAgICAgICAgICAgY2xh c3NOYW1lOiAiYmFja2dyaWQgdGFibGUtYm9yZGVyZWQiCisgICAgICAgICAg ICB9KTsKKworICAgICAgICAgICAgZ3JpZC5yZW5kZXIoKTsKKyAgICAgICAg ICAgICQodGhpcy5lbGVtZW50cy5jb250ZW50KS5odG1sKGdyaWQuZWwpOwor ICAgICAgICAgIH0sCisgICAgICAgICAgc2V0dXA6ZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICBidXR0b25zOlt7 IHRleHQ6ICJEZWJ1ZyIsIGtleTogMjcsIGNsYXNzTmFtZTogImJ0biBidG4t cHJpbWFyeSIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAi Q2FuY2VsIiwga2V5OiAyNywgY2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmltYXJ5 IiB9XSwKKyAgICAgICAgICAgICAgb3B0aW9uczogeyBtb2RhbDogMCwgcmVz aXphYmxlOiB0cnVlIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgfSwK KyAgICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbnMgd2hlbiBjbGljayBv biB0aGUgYnV0dG9ucyBvZiB0aGUgQWxlcnRpZnkgZGlhbG9ncworICAgICAg ICAgIGNhbGxiYWNrOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBpZiAo ZS5idXR0b24udGV4dCA9PT0gIkRlYnVnIikgeworCisgICAgICAgICAgICAg IC8vIEluaXRpYWxpemUgdGhlIHRhcmdldCBvbmNlIHRoZSBkZWJ1ZyBidXR0 b24gaXMgY2xpY2tlZCBhbmQKKyAgICAgICAgICAgICAgLy8gY3JlYXRlIGFz eW5jaHJvbm91cyBjb25uZWN0aW9uIGFuZCB1bmlxdWUgdHJhbnNhY3Rpb24g SUQKKyAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAg ICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgICAgICAg IGkgPSB0LnNlbGVjdGVkKCksCisgICAgICAgICAgICAgICAgZCA9IGkgJiYg aS5sZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQsCisg ICAgICAgICAgICAgICAgbm9kZSA9IGQgJiYgcGdCcm93c2VyLk5vZGVzW2Qu X3R5cGVdOworCisgICAgICAgICAgICAgIGlmICghZCkKKyAgICAgICAgICAg ICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgdmFyIHRyZWVJbmZvID0g bm9kZS5nZXRUcmVlTm9kZUhpZXJhcmNoeS5hcHBseShub2RlLCBbaV0pOwor CisgICAgICAgICAgICAgIHZhciBhcmdzX3ZhbHVlX2xpc3QgPSBbXTsKKwor ICAgICAgICAgICAgICB0aGlzLmdyaWQuY29sbGVjdGlvbi5lYWNoKGZ1bmN0 aW9uKG0pIHsKKyAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlZmF1 bHQgdmFsdWUgdG8gYmUgdXNlZCBvciBub3QKKyAgICAgICAgICAgICAgICAg IGlmIChtLmdldCgndXNlX2RlZmF1bHQnKSkgeworICAgICAgICAgICAgICAg ICAgICBhcmdzX3ZhbHVlX2xpc3QucHVzaCh7ICduYW1lJzogbS5nZXQoJ25h bWUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICd0eXBlJzogbS5nZXQoJ3R5cGUnKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IG0uZ2V0KCdkZWZhdWx0X3Zh bHVlJyl9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcmdzX3ZhbHVlX2xp c3QucHVzaCh7ICduYW1lJzogbS5nZXQoJ25hbWUnKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogbS5nZXQoJ3R5 cGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICd2YWx1ZSc6IG0uZ2V0KCd2YWx1ZScpfSk7CisgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgIHZhciBi YXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsg ImluaXRpYWxpemVfdGFyZ2V0LyIgKyAiZGlyZWN0LyIgKyB0cmVlSW5mby5z ZXJ2ZXIuX2lkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii8iICsgdHJlZUluZm8uZGF0YWJhc2UuX2lkICsgIi8iICsgdHJlZUluZm8u c2NoZW1hLl9pZCArICIvIiArIHRyZWVJbmZvLmZ1bmN0aW9uLl9pZDsKKwor ICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgIHVybDog YmFzZVVybCwKKyAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKKyAg ICAgICAgICAgICAgICBkYXRhOnsnZGF0YSc6SlNPTi5zdHJpbmdpZnkoYXJn c192YWx1ZV9saXN0KX0sCisgICAgICAgICAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24ocmVzKSB7CisKKyAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAi e3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAiZGlyZWN0LyIg KyByZXMuZGF0YS5kZWJ1Z2dlclRyYW5zSWQ7CisKKyAgICAgICAgICAgICAg ICAgIHBnQnJvd3Nlci5FdmVudHMub25jZSgKKyAgICAgICAgICAgICAgICAg ICAgJ3BnYWRtaW4tYnJvd3NlcjpmcmFtZTp1cmxsb2FkZWQ6ZnJtX2RlYnVn Z2VyJywgZnVuY3Rpb24oZnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAg ZnJhbWUub3BlblVSTCh1cmwpOworICAgICAgICAgICAgICAgICAgfSk7CisK KyAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGVidWdnZXIgcGFu ZWwgYXMgcGVyIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gdXNlciBpbnB1dCBk aWFsb2cuCisgICAgICAgICAgICAgICAgICB2YXIgZGFzaGJvYXJkUGFuZWwg PSBwZ0Jyb3dzZXIuZG9ja2VyLmZpbmRQYW5lbHMoCisgICAgICAgICAgICAg ICAgICAgICdkYXNoYm9hcmQnCisgICAgICAgICAgICAgICAgICAgICksCisg ICAgICAgICAgICAgICAgICAgIHBhbmVsID0gcGdCcm93c2VyLmRvY2tlci5h ZGRQYW5lbCgKKyAgICAgICAgICAgICAgICAgICAgICAnZnJtX2RlYnVnZ2Vy Jywgd2NEb2NrZXIuRE9DSy5TVEFDS0VELCBkYXNoYm9hcmRQYW5lbFswXQor ICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICAg IHBhbmVsLmZvY3VzKCk7CisKKyAgICAgICAgICAgICAgICAgIC8vIFBhbmVs IENsb3NlZCBldmVudAorICAgICAgICAgICAgICAgICAgcGFuZWwub24od2NE b2NrZXIuRVZFTlQuQ0xPU0VELCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg ICAgICAgICAgdmFyIGNsb3NlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2Vy LmluZGV4JykgfX0iICsgImNsb3NlLyIgKyByZXMuZGF0YS5kZWJ1Z2dlclRy YW5zSWQ7CisgICAgICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAg ICAgICAgICAgICAgICAgdXJsOiBjbG9zZVVybCwKKyAgICAgICAgICAgICAg ICAgICAgICBtZXRob2Q6ICdHRVQnCisgICAgICAgICAgICAgICAgICAgIH0p OworICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSwK KyAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAg ICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICAg ICAgICdEZWJ1Z2dlciB0YXJnZXQgSW5pdGlhbGl6ZSBFcnJvcicsCisgICAg ICAgICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmVycm9ybXNnCisgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlLmJ1dHRvbi50ZXh0ID09 PSAiQ2FuY2VsIikgeworICAgICAgICAgICAgICAvL2Nsb3NlIHRoZSBkaWFs b2cuLi4KKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgYnVpbGQ6ZnVuY3Rpb24o KSB7CisgICAgICAgICAgfSwKKyAgICAgICAgICBwcmVwYXJlOmZ1bmN0aW9u KCkgeworICAgICAgICAgICAgLy8gT25jZSB0aGUgZGlhbG9nIG9wZW4gZGlz YWJsZSB0aGUgYnV0dG9uIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHRoaXMu X19pbnRlcm5hbC5idXR0b25zWzBdLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVl OworCisgICAgICAgICAgICB0aGlzLmdyaWQubGlzdGVuVG8odGhpcy5kZWJ1 Z2dlcklucHV0QXJnc0NvbGwsImJhY2tncmlkOmVkaXRlZCIsCisgICAgICAg ICAgICAgIChmdW5jdGlvbihvYmopIHsKKworICAgICAgICAgICAgICAgIHJl dHVybiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgdmFyIHNl bGYgPSB0aGlzOworICAgICAgICAgICAgICAgICAgdmFyIGVuYWJsZV9idG4g PSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHRoaXMuY29sbGVjdGlvbi5sZW5ndGg7IGkrKyApIHsKKworICAgICAgICAg ICAgICAgICAgICAvLyBUT0RPOiBOZWVkIHRvIGNoZWNrIHRoZSAiTlVMTCIg YW5kICJFeHByZXNzaW9uIiBjb2x1bW4gdmFsdWUgdG8gZW5hYmxlL2Rpc2Fi bGUgdGhlICJEZWJ1ZyIgYnV0dG9uCisgICAgICAgICAgICAgICAgICAgIGlm ICh0aGlzLmNvbGxlY3Rpb24ubW9kZWxzW2ldLmdldCgndmFsdWUnKSA9PSAi IiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9u Lm1vZGVsc1tpXS5nZXQoJ3ZhbHVlJykgPT0gbnVsbCB8fAorICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLm1vZGVsc1tpXS5nZXQo J3ZhbHVlJykgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGVuYWJsZV9idG4gPSB0cnVlOworCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb24ubW9kZWxzW2ldLmdldCgn dXNlX2RlZmF1bHQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9iai5fX2ludGVybmFsLmJ1dHRvbnNbMF0uZWxlbWVudC5kaXNhYmxlZCA9 IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2JqLl9faW50ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50LmRp c2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICBpZiAoIWVuYWJsZV9idG4pCisgICAgICAgICAgICAgICAgICAg IG9iai5fX2ludGVybmFsLmJ1dHRvbnNbMF0uZWxlbWVudC5kaXNhYmxlZCA9 IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICApKHRoaXMpCisgICAgICAgICAgICApOworICAgICAg ICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0pOworICAgIH0KKworICAgIEFs ZXJ0aWZ5LmRlYnVnZ2VySW5wdXRBcmdzRGlhbG9nKCdEZWJ1Z2dlcicsYXJn cykucmVzaXplVG8oJzYwJScsICc2MCUnKTsKKworICB9OworCisgIHJldHVy biByZXM7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2Rl YnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9qcy9kaXJlY3QuanMgYi93ZWIv cGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvanMv ZGlyZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmU0YjY4OGIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvanMvZGlyZWN0LmpzCkBA IC0wLDAgKzEsMTMxOCBAQAorZGVmaW5lKAorICBbJ2pxdWVyeScsICd1bmRl cnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ2FsZXJ0aWZ5JywgJ3Bn YWRtaW4nLAorICAgJ2JhY2tib25lJywgJ2JhY2tncmlkJywgJ2NvZGVtaXJy b3InLCAnYmFja2Zvcm0nLCdwZ2FkbWluLnRvb2xzLmRlYnVnZ2VyLnVpJywK KyAgJ3djZG9ja2VyJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1pbi5i YWNrZ3JpZCcsICdjb2RlbWlycm9yLmFjdGl2ZWxpbmUnXSwKKyAgZnVuY3Rp b24oJCwgXywgUywgQWxlcnRpZnksIHBnQWRtaW4sIEJhY2tib25lLCBCYWNr Z3JpZCwgQ29kZU1pcnJvciwgQmFja2Zvcm0sIGdldF9mdW5jdGlvbl9hcmd1 bWVudHMpIHsKKworICBwZ0FkbWluID0gcGdBZG1pbiB8fCB3aW5kb3cucGdB ZG1pbiB8fCB7fTsKKworICB2YXIgcGdUb29scyA9IHBnQWRtaW4uVG9vbHMg PSBwZ0FkbWluLlRvb2xzIHx8IHt9OworCisgIGlmIChwZ1Rvb2xzLkRpcmVj dERlYnVnKQorICAgIHJldHVybiBwZ1Rvb2xzLkRpcmVjdERlYnVnOworCisg IHZhciBjb250cm9sbGVyID0gbmV3IChmdW5jdGlvbigpIHt9KTsKKworICBf LmV4dGVuZCgKKyAgICBjb250cm9sbGVyLCBCYWNrYm9uZS5FdmVudHMsIHsK KyAgICAgIGVuYWJsZTogZnVuY3Rpb24oYnRuLCBlbmFibGUpIHsKKyAgICAg ICAgLy8gdHJpZ2dlciB0aGUgZXZlbnQgYW5kIGNoYW5nZSB0aGUgYnV0dG9u IHZpZXcgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGJ1dHRvbnMgZm9yIGRlYnVn Z2luZworICAgICAgICB0aGlzLnRyaWdnZXIoJ3BnRGVidWdnZXI6YnV0dG9u OnN0YXRlOicgKyBidG4sIGVuYWJsZSk7CisgICAgICB9LAorCisgICAgICAv KgorICAgICAgICBGdW5jdGlvbiB0byBzZXQgdGhlIGJyZWFrcG9pbnQgYW5k IHNlbmQgdGhlIGxpbmUgbm8uIHdoaWNoIGlzIHNldCB0byBzZXJ2ZXIKKyAg ICAgICAgdHJhbnNfaWQgOi0gVW5pcXVlIFRyYW5zYWN0aW9uIElELCBsaW5l X25vIC0gbGluZSBuby4gdG8gc2V0IHRoZSBicmVha3BvaW50LCBzZXRfdHlw ZSA9IDAgLSBjbGVhciAsIDEgLSBzZXQKKyAgICAgICovCisgICAgICBzZXRf YnJlYWtwb2ludDogZnVuY3Rpb24odHJhbnNfaWQsIGxpbmVfbm8sIHNldF90 eXBlKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAv LyBNYWtlIGFqYXggY2FsbCB0byBzZXQvY2xlYXIgdGhlIGJyZWFrIHBvaW50 IGJ5IHVzZXIKKyAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2Zvcign ZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAic2V0X2JyZWFrcG9pbnQvIiArIHRy YW5zX2lkICsgIi8iICsgbGluZV9ubyArICIvIiArIHNldF90eXBlOworCisg ICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAg ICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVz KSB7CisgICAgICAgICAgICAgIC8vIEJyZWFrcG9pbnQgaGFzIGJlZW4gc2V0 IGJ5IHRoZSB1c2VyCisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAg ICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgQWxl cnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dlcjogQnJlYWtw b2ludCBzZXQgZXhlY3V0aW9uIGVycm9yJworICAgICAgICAgICAgKTsKKyAg ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfSwKKworICAgICAgLy8g RnVuY3Rpb24gdG8gZ2V0IHRoZSBsYXRlc3QgYnJlYWtwb2ludCBpbmZvcm1h dGlvbiBhbmQgdXBkYXRlIHRoZSBndXR0ZXJzIG9mIGNvZGVtaXJyb3IKKyAg ICAgIFVwZGF0ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHRyYW5zX2lkKSB7Cisg ICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICB2YXIgYnJfbGlz dCA9IHNlbGYuR2V0QnJlYWtwb2ludEluZm9ybWF0aW9uKHRyYW5zX2lkKTsK KworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBicmVhayBwb2ludCB0byBj bGVhciB0aGVuIHdlIHNob3VsZCByZXR1cm4gZnJvbSBoZXJlLgorICAgICAg ICBpZiAoKGJyX2xpc3QubGVuZ3RoID09IDEpICYmIChicl9saXN0WzBdLmxp bmVudW1iZXIgPT0gLTEpKQorICAgICAgICAgIHJldHVybjsKKworICAgICAg ICB2YXIgYnJlYWtwb2ludF9saXN0ID0gbmV3IEFycmF5KCk7CisKKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IGJyX2xpc3QubGVuZ3RoOyBpKyspIHsKKyAg ICAgICAgICBpZiAoYnJfbGlzdFtpXS5saW5lbnVtYmVyICE9IC0xKSB7Cisg ICAgICAgICAgICBicmVha3BvaW50X2xpc3QucHVzaChicl9saXN0W2ldLmxp bmVudW1iZXIpCisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg Zm9yIChpID0gMDtpPCBicmVha3BvaW50X2xpc3QubGVuZ3RoO2krKykgewor ICAgICAgICAgIHZhciBpbmZvID0gcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0 b3IubGluZUluZm8oKGJyZWFrcG9pbnRfbGlzdFtpXSAtIDEpKTsKKworICAg ICAgICAgIGlmIChpbmZvLmd1dHRlck1hcmtlcnMgIT0gdW5kZWZpbmVkKSB7 CisgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5zZXRH dXR0ZXJNYXJrZXIoKGJyZWFrcG9pbnRfbGlzdFtpXSAtIDEpLCAiYnJlYWtw b2ludHMiLCBudWxsKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7 CisgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5zZXRH dXR0ZXJNYXJrZXIoKGJyZWFrcG9pbnRfbGlzdFtpXSAtIDEpLCAiYnJlYWtw b2ludHMiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBtYXJrZXIg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAg IG1hcmtlci5zdHlsZS5jb2xvciA9ICIjODIyIjsKKyAgICAgICAgICAgIG1h cmtlci5pbm5lckhUTUwgPSAi4pePIjsKKyAgICAgICAgICAgIHJldHVybiBt YXJrZXI7CisgICAgICAgICAgICB9KCkpOworICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgfSwKKworICAgICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRo ZSBicmVha3BvaW50IGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZlcgorICAg ICAgR2V0QnJlYWtwb2ludEluZm9ybWF0aW9uOiBmdW5jdGlvbih0cmFuc19p ZCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBy ZXN1bHQgPSAnJzsKKworICAgICAgICAvLyBNYWtlIGFqYXggY2FsbCB0byBs aXN0ZW4gdGhlIGRhdGFiYXNlIG1lc3NhZ2UKKyAgICAgICAgdmFyIGJhc2VV cmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAiZXhl Y3V0ZV9xdWVyeS8iICsgdHJhbnNfaWQgKyAiLyIgKyAiZ2V0X2JyZWFrcG9p bnRzIjsKKworICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogYmFz ZVVybCwKKyAgICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAgIGFz eW5jOiBmYWxzZSwKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMp IHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdTdWNj ZXNzJykgeworICAgICAgICAgICAgICByZXN1bHQgPSByZXMuZGF0YS5yZXN1 bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXMu ZGF0YS5zdGF0dXMgPT09ICdOb3RDb25uZWN0ZWQnKSB7CisgICAgICAgICAg ICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dl cjogRXJyb3IgZmV0Y2hpbmcgYnJlYWtwb2ludCBpbmZvcm1hdGlvbicKKyAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAor ICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBB bGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBFcnJv ciBmZXRjaGluZyBicmVha3BvaW50IGluZm9ybWF0aW9uJworICAgICAgICAg ICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJl dHVybiByZXN1bHQ7CisgICAgICB9LAorCisgICAgICAvLyBGdW5jdGlvbiB0 byBzdGFydCB0aGUgZXhlY3V0ZXIgYW5kIGV4ZWN1dGUgdGhlIHVzZXIgcmVx dWVzdGVkIG9wdGlvbiBmb3IgZGVidWdnaW5nCisgICAgICBzdGFydF9leGVj dXRpb246IGZ1bmN0aW9uKHRyYW5zX2lkLCBwb3J0X251bSkgeworICAgICAg ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxs IHRvIGxpc3RlbiB0aGUgZGF0YWJhc2UgbWVzc2FnZQorICAgICAgICB2YXIg YmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiAr ICJzdGFydF9leGVjdXRpb24vIiArIHRyYW5zX2lkICsgIi8iICsgcG9ydF9u dW07CisKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VV cmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgICBzdWNj ZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0 YS5zdGF0dXMgPT09ICdTdWNjZXNzJykgeworICAgICAgICAgICAgICAvLyBJ ZiBzdGF0dXMgaXMgU3VjY2VzcyB0aGVuIGZpbmQgdGhlIHBvcnQgbnVtYmVy IHRvIGF0dGFjaCB0aGUgZXhlY3V0ZXIuCisgICAgICAgICAgICAgIHNlbGYu ZXhlY3V0ZV9xdWVyeSh0cmFuc19pZCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdOb3RDb25u ZWN0ZWQnKSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAg ICAgICAgICAgICAgICdEZWJ1Z2dlcjogU3RhcnQgZXhlY3V0aW9uIGVycm9y JworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAg IH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg ICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdnZXI6 IFN0YXJ0IGV4ZWN1dGlvbiBlcnJvcicKKyAgICAgICAgICAgICk7CisgICAg ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0sCisKKyAgICAgIC8vIEV4 ZWN1dGUgdGhlIHF1ZXJ5IGFuZCBnZXQgdGhlIGZpcnN0IGZ1bmN0aW9ucyBk ZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgIGV4ZWN1 dGVfcXVlcnk6IGZ1bmN0aW9uKHRyYW5zX2lkKSB7CisgICAgICAgIHZhciBz ZWxmID0gdGhpczsKKyAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gbGlz dGVuIHRoZSBkYXRhYmFzZSBtZXNzYWdlCisgICAgICAgIHZhciBiYXNlVXJs ID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImV4ZWN1 dGVfcXVlcnkvIiArIHRyYW5zX2lkICsgIi8iICsgIndhaXRfZm9yX2JyZWFr cG9pbnQiOworCisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBi YXNlVXJsLAorICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAg c3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVz LmRhdGEuc3RhdHVzID09PSAnU3VjY2VzcycpIHsKKyAgICAgICAgICAgICAg Ly8gc2V0IHRoZSByZXR1cm4gY29kZSB0byB0aGUgY29kZSBlZGl0b3IgdGV4 dCBhcmVhCisgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yZXN1bHRbMF0u c3JjICE9IG51bGwgJiYgcmVzLmRhdGEucmVzdWx0WzBdLmxpbmVudW1iZXIg IT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVi dWcuZWRpdG9yLnNldFZhbHVlKHJlcy5kYXRhLnJlc3VsdFswXS5zcmMpOwor ICAgICAgICAgICAgICAgIGFjdGl2ZV9saW5lX25vID0gc2VsZi5hY3RpdmVf bGluZV9ubyA9IChyZXMuZGF0YS5yZXN1bHRbMF0ubGluZW51bWJlciAtIDIp OworICAgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9y LmFkZExpbmVDbGFzcygocmVzLmRhdGEucmVzdWx0WzBdLmxpbmVudW1iZXIg LSAyKSwgJ3dyYXAnLCAnQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91 bmQnKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8vIENh bGwgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCB1cGRhdGUgbG9jYWwgdmFyaWFi bGVzIC4uLi4KKyAgICAgICAgICAgICAgc2VsZi5HZXRMb2NhbFZhcmlhYmxl cyh0cmFuc19pZCk7CisgICAgICAgICAgICAgIHNlbGYuR2V0U3RhY2tJbmZv cm1hdGlvbih0cmFuc19pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdOb3RDb25uZWN0ZWQn KSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAg ICAgICAgICdEZWJ1Z2dlcjogRXhlY3V0aW9uIGVycm9yJworICAgICAgICAg ICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAg ICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIEFsZXJ0aWZ5 LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdnZXI6IEV4ZWN1dGlvbiBl cnJvcicKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9 KTsKKyAgICAgIH0sCisKKyAgICAgIC8vIEdldCB0aGUgbG9jYWwgdmFyaWFi bGUgaW5mb3JtYXRpb24gb2YgdGhlIGZ1bmN0aW9ucyBhbmQgdXBkYXRlIHRo ZSBncmlkCisgICAgICBHZXRMb2NhbFZhcmlhYmxlczogZnVuY3Rpb24odHJh bnNfaWQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAg IC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJhc2UgbWVz c2FnZQorICAgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1 Z2dlci5pbmRleCcpIH19IiArICJleGVjdXRlX3F1ZXJ5LyIgKyB0cmFuc19p ZCArICIvIiArICJnZXRfdmFyaWFibGVzIjsKKworICAgICAgICAkLmFqYXgo eworICAgICAgICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICBtZXRob2Q6 ICdHRVQnLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgewor ICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ1N1Y2Nlc3Mn KSB7CisgICAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gdG8gY3JlYXRl IGFuZCB1cGRhdGUgbG9jYWwgdmFyaWFibGVzCisgICAgICAgICAgICAgIHNl bGYuQWRkTG9jYWxWYXJpYWJsZXMocmVzLmRhdGEucmVzdWx0KTsKKyAgICAg ICAgICAgICAgc2VsZi5BZGRQYXJhbWV0ZXJzKHJlcy5kYXRhLnJlc3VsdCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0 YS5zdGF0dXMgPT09ICdOb3RDb25uZWN0ZWQnKSB7CisgICAgICAgICAgICAg IEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dlcjog RXJyb3IgZmV0Y2hpbmcgdmFyaWFibGVzIGluZm9ybWF0aW9uJworICAgICAg ICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAg ICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIEFsZXJ0 aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdnZXI6IEVycm9yIGZl dGNoaW5nIHZhcmlhYmxlcyBpbmZvcm1hdGlvbicKKyAgICAgICAgICAgICk7 CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0sCisKKyAgICAg IC8vIEdldCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gb2YgdGhlIGZ1bmN0aW9u cyBhbmQgdXBkYXRlIHRoZSBncmlkCisgICAgICBHZXRTdGFja0luZm9ybWF0 aW9uOiBmdW5jdGlvbih0cmFuc19pZCkgeworICAgICAgICB2YXIgc2VsZiA9 IHRoaXM7CisKKyAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gbGlzdGVu IHRoZSBkYXRhYmFzZSBtZXNzYWdlCisgICAgICAgIHZhciBiYXNlVXJsID0g Int7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImV4ZWN1dGVf cXVlcnkvIiArIHRyYW5zX2lkICsgIi8iICsgImdldF9zdGFja19pbmZvIjsK KworICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogYmFzZVVybCwK KyAgICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAgIHN1Y2Nlc3M6 IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0 YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7CisgICAgICAgICAgICAgIC8vIENhbGwg ZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCB1cGRhdGUgc3RhY2sgaW5mb3JtYXRp b24KKyAgICAgICAgICAgICAgc2VsZi5BZGRTdGFja0luZm9ybWF0aW9uKHJl cy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl bHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdOb3RDb25uZWN0ZWQnKSB7 CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAg ICAgICdEZWJ1Z2dlcjogRXJyb3IgZmV0Y2hpbmcgc3RhY2sgaW5mb3JtYXRp b24nCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAg ICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dl cjogRXJyb3IgZmV0Y2hpbmcgc3RhY2sgaW5mb3JtYXRpb24nCisgICAgICAg ICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9LAor CisgICAgICAvKgorICAgICAgICBwb2xsIHRoZSBhY3R1YWwgcmVzdWx0IGFm dGVyIHVzZXIgaGFzIGV4ZWN1dGVkIHRoZSAiY29udGludWUiLCAic3RlcC1p bnRvIiwgInN0ZXAtb3ZlciIgYWN0aW9ucyBhbmQgZ2V0IHRoZQorICAgICAg ICBvdGhlciB1cGRhdGVkIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZlci4K KyAgICAgICovCisgICAgICBwb2xsX3Jlc3VsdDogZnVuY3Rpb24odHJhbnNf aWQpIHsKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgIC8vIE1ha2Ug YWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJhc2UgbWVzc2FnZQorICAg ICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgn KSB9fSIgKyAicG9sbF9yZXN1bHQvIiArIHRyYW5zX2lkOworCisKKyAgICAg IHNldFRpbWVvdXQoCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAk LmFqYXgoeworICAgICAgICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICBt ZXRob2Q6ICdHRVQnLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJl cykgeworICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ1N1 Y2Nlc3MnKSB7CisgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yZXN1bHRb MF0uc3JjICE9IHVuZGVmaW5lZCB8fCByZXMuZGF0YS5yZXN1bHRbMF0uc3Jj ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERl YnVnLmRvY2tlci5maW5pc2hMb2FkaW5nKDUwMCk7CisgICAgICAgICAgICAg ICAgcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3Iuc2V0VmFsdWUocmVzLmRh dGEucmVzdWx0WzBdLnNyYyk7CisgICAgICAgICAgICAgICAgc2VsZi5VcGRh dGVCcmVha3BvaW50KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgICBwZ1Rv b2xzLkRpcmVjdERlYnVnLmVkaXRvci5yZW1vdmVMaW5lQ2xhc3Moc2VsZi5h Y3RpdmVfbGluZV9ubywgJ3dyYXAnLCAnQ29kZU1pcnJvci1hY3RpdmVsaW5l LWJhY2tncm91bmQnKTsKKyAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVj dERlYnVnLmVkaXRvci5hZGRMaW5lQ2xhc3MoKHJlcy5kYXRhLnJlc3VsdFsw XS5saW5lbnVtYmVyIC0gMiksICd3cmFwJywgJ0NvZGVNaXJyb3ItYWN0aXZl bGluZS1iYWNrZ3JvdW5kJyk7CisgICAgICAgICAgICAgICAgc2VsZi5hY3Rp dmVfbGluZV9ubyA9IChyZXMuZGF0YS5yZXN1bHRbMF0ubGluZW51bWJlciAt IDIpOworCisgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGFjaywg bG9jYWwgdmFyaWFibGVzIGFuZCBwYXJhbWV0ZXJzIGluZm9ybWF0aW9uCisg ICAgICAgICAgICAgICAgc2VsZi5HZXRTdGFja0luZm9ybWF0aW9uKHRyYW5z X2lkKTsKKyAgICAgICAgICAgICAgICBzZWxmLkdldExvY2FsVmFyaWFibGVz KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBl bHNlIGlmICghcGdUb29scy5EaXJlY3REZWJ1Zy5kZWJ1Z190eXBlICYmICFw Z1Rvb2xzLkRpcmVjdERlYnVnLmZpcnN0X3RpbWVfaW5kaXJlY3RfZGVidWcp IHsKKyAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmRvY2tl ci5maW5pc2hMb2FkaW5nKDUwMCk7CisgICAgICAgICAgICAgICAgaWYgKHNl bGYuYWN0aXZlX2xpbmVfbm8gIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg ICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5yZW1vdmVMaW5l Q2xhc3Moc2VsZi5hY3RpdmVfbGluZV9ubywgJ3dyYXAnLCAnQ29kZU1pcnJv ci1hY3RpdmVsaW5lLWJhY2tncm91bmQnKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgc2VsZi5jbGVhcl9hbGxfYnJlYWtwb2ludCh0 cmFuc19pZCk7CisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX3F1ZXJ5 KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERl YnVnLmZpcnN0X3RpbWVfaW5kaXJlY3RfZGVidWcgPSB0cnVlOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg ICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZG9ja2VyLmZpbmlzaExvYWRpbmco NTAwKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc291cmNlIGlzIHJl YWxseSBjaGFuZ2VkIHRoZW4gb25seSB1cGRhdGUgdGhlIGJyZWFrcG9pbnQg aW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucmVz dWx0WzBdLnNyYyAhPSBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5nZXRW YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERl YnVnLmVkaXRvci5zZXRWYWx1ZShyZXMuZGF0YS5yZXN1bHRbMF0uc3JjKTsK KyAgICAgICAgICAgICAgICAgIHNlbGYuVXBkYXRlQnJlYWtwb2ludCh0cmFu c19pZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg cGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3IucmVtb3ZlTGluZUNsYXNzKHNl bGYuYWN0aXZlX2xpbmVfbm8sICd3cmFwJywgJ0NvZGVNaXJyb3ItYWN0aXZl bGluZS1iYWNrZ3JvdW5kJyk7CisgICAgICAgICAgICAgICAgcGdUb29scy5E aXJlY3REZWJ1Zy5lZGl0b3IuYWRkTGluZUNsYXNzKChyZXMuZGF0YS5yZXN1 bHRbMF0ubGluZW51bWJlciAtIDIpLCAnd3JhcCcsICdDb2RlTWlycm9yLWFj dGl2ZWxpbmUtYmFja2dyb3VuZCcpOworICAgICAgICAgICAgICAgIHNlbGYu YWN0aXZlX2xpbmVfbm8gPSAocmVzLmRhdGEucmVzdWx0WzBdLmxpbmVudW1i ZXIgLSAyKTsKKworICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3Rh Y2ssIGxvY2FsIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycyBpbmZvcm1hdGlv bgorICAgICAgICAgICAgICAgIHNlbGYuR2V0U3RhY2tJbmZvcm1hdGlvbih0 cmFuc19pZCk7CisgICAgICAgICAgICAgICAgc2VsZi5HZXRMb2NhbFZhcmlh Ymxlcyh0cmFuc19pZCk7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAvLyBFbmFibGUgYWxsIHRoZSBidXR0b25zIGFzIHdlIGdvdCB0aGUg cmVzdWx0cworICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RvcCcsIHRy dWUpOworICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RlcF9vdmVyJywg dHJ1ZSk7CisgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdGVwX2ludG8n LCB0cnVlKTsKKyAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ2NvbnRpbnVl JywgdHJ1ZSk7CisgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCd0b2dnbGVf YnJlYWtwb2ludCcsIHRydWUpOworICAgICAgICAgICAgICBzZWxmLmVuYWJs ZSgnY2xlYXJfYWxsX2JyZWFrcG9pbnRzJywgdHJ1ZSk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09 ICdCdXN5JykgeworICAgICAgICAgICAgICAvLyBJZiBzdGF0dXMgaXMgQnVz eSB0aGVuIHBvbGwgdGhlIHJlc3VsdCBieSByZWN1cnNpdmUgY2FsbCB0byB0 aGUgcG9sbCBmdW5jdGlvbgorICAgICAgICAgICAgICBpZiAoIXBnVG9vbHMu RGlyZWN0RGVidWcuZGVidWdfdHlwZSkgeworICAgICAgICAgICAgICAgIHBn VG9vbHMuRGlyZWN0RGVidWcuZG9ja2VyLnN0YXJ0TG9hZGluZygne3sgXygn V2FpdGluZyBmb3IgYW5vdGhlciBzZXNzaW9uIHRvIGludm9rZSB0aGUgdGFy Z2V0Li4uJykgfX0nKTsKKyAgICAgICAgICAgICAgICAvLyBBcyB3ZSBhcmUg d2FpdGluZyBmb3IgYW5vdGhlciBzZXNzaW9uIHRvIGludm9rZSB0aGUgdGFy Z2V0IHNvIGRpc2FibGUgYWxsIHRoZSBidXR0b25zCisgICAgICAgICAgICAg ICAgc2VsZi5lbmFibGUoJ3N0b3AnLCBmYWxzZSk7CisgICAgICAgICAgICAg ICAgc2VsZi5lbmFibGUoJ3N0ZXBfb3ZlcicsIGZhbHNlKTsKKyAgICAgICAg ICAgICAgICBzZWxmLmVuYWJsZSgnc3RlcF9pbnRvJywgZmFsc2UpOworICAg ICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdjb250aW51ZScsIGZhbHNlKTsK KyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgndG9nZ2xlX2JyZWFrcG9p bnQnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ2Ns ZWFyX2FsbF9icmVha3BvaW50cycsIGZhbHNlKTsKKyAgICAgICAgICAgICAg ICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmZpcnN0X3RpbWVfaW5kaXJlY3RfZGVi dWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZWxmLnBvbGxfcmVzdWx0 KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAnTm90 Q29ubmVjdGVkJykgeworICAgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgK KyAgICAgICAgICAgICAgICAnRGVidWdnZXIgUG9sbCBSZXN1bHQgRXJyb3In CisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAg fSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAg ICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dlciBQ b2xsIFJlc3VsdCBFcnJvcicKKyAgICAgICAgICAgICk7CisgICAgICAgICAg fQorICAgICAgICB9KTsKKyAgICAgIH0sIDgwMCApOworCisgICAgfSwKKwor ICAgIC8qCisgICAgICBGb3IgdGhlIGRpcmVjdCBkZWJ1Z2dpbmcsIHdlIG5l ZWQgdG8gY2hlY2sgd2VhdGhlciB0aGUgZnVuY3Rpb25zIGV4ZWN1dGlvbiBp cyBjb21wbGV0ZWQgb3Igbm90LiBBZnRlciBjb21wbGV0aW9uCisgICAgICBv ZiB0aGUgZGVidWdnaW5nLCB3ZSB3aWxsIHN0b3AgcG9sbGluZyB0aGUgcmVz dWx0ICB1bnRpbCBuZXcgZXhlY3V0aW9uIHN0YXJ0cy4KKyAgICAqLworICAg IHBvbGxfZW5kX2V4ZWN1dGlvbl9yZXN1bHQ6IGZ1bmN0aW9uKHRyYW5zX2lk KSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAvL3JldHVybjsK KyAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJh c2UgbWVzc2FnZQorICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2Zvcign ZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAicG9sbF9lbmRfZXhlY3V0aW9uX3Jl c3VsdC8iICsgdHJhbnNfaWQ7CisgICAgICBzZWxmLmV4ZWN1dGlvbl9jb21w bGV0ZWQgPSBmYWxzZTsKKworICAgICAgc2V0VGltZW91dCgKKyAgICAgICAg ZnVuY3Rpb24oKSB7CisgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1 cmw6IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAg ICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlm IChyZXMuZGF0YS5zdGF0dXMgPT09ICdTdWNjZXNzJykgeworICAgICAgICAg ICAgICAvLyBDYWxsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbmQgdXBkYXRlIGxv Y2FsIHZhcmlhYmxlcyAuLi4uCisgICAgICAgICAgICAgIGlmIChyZXMuZGF0 YS5yZXN1bHQubmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcGdU b29scy5EaXJlY3REZWJ1Zy5lZGl0b3IucmVtb3ZlTGluZUNsYXNzKHNlbGYu YWN0aXZlX2xpbmVfbm8sICd3cmFwJywgJ0NvZGVNaXJyb3ItYWN0aXZlbGlu ZS1iYWNrZ3JvdW5kJyk7CisgICAgICAgICAgICAgICAgc2VsZi5BZGRSZXN1 bHRzKHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICAgICAgcGdUb29s cy5EaXJlY3REZWJ1Zy5wYXJhbXNUYWJGcmFtZS50YWIoMyx0cnVlKTsKKyAg ICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGlvbl9jb21wbGV0ZWQgPSB0cnVl OworCisgICAgICAgICAgICAgICAgLy9TZXQgdGhlIGFsZXJ0aWZ5IG1lc3Nh Z2UgdG8gaW5mb3JtIHRoZSB1c2VyIHRoYXQgZXhlY3V0aW9uIGlzIGNvbXBs ZXRlZC4KKyAgICAgICAgICAgICAgICBBbGVydGlmeS5ub3RpZnkoCisgICAg ICAgICAgICAgICAgICByZXMuaW5mbywKKyAgICAgICAgICAgICAgICAgICdz dWNjZXNzJywKKyAgICAgICAgICAgICAgICAgIDMsCisgICAgICAgICAgICAg ICAgICBmdW5jdGlvbigpIHsgfQorICAgICAgICAgICAgICAgICk7CisKKyAg ICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIG1lc3NhZ2UgdGFiIG9mIHRo ZSBkZWJ1Z2dlcgorICAgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVi dWcuZGJtc01lc3NhZ2VzLiRlbGVtLnRleHQocmVzLmRhdGEuc3RhdHVzX21l c3NhZ2UpOworCisgICAgICAgICAgICAgICAgLy8gRXhlY3V0aW9uIGNvbXBs ZXRlZCBzbyBkaXNhYmxlIHRoZSBidXR0b25zIG90aGVyIHRoYW4gIkNvbnRp bnVlL1N0YXJ0IiBidXR0b24gYmVjYXVzZSB1c2VyIGNhbiBzdGlsbAorICAg ICAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBzYW1lIGV4ZWN1dGlvbiBhZ2Fp bi4KKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RvcCcsIGZhbHNl KTsKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RlcF9vdmVyJywg ZmFsc2UpOworICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdGVwX2lu dG8nLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3Rv Z2dsZV9icmVha3BvaW50JywgZmFsc2UpOworICAgICAgICAgICAgICAgIHNl bGYuZW5hYmxlKCdjbGVhcl9hbGxfYnJlYWtwb2ludHMnLCBmYWxzZSk7CisK KyAgICAgICAgICAgICAgICAvL1RPRE86IENvbnRpbnVlIGJ1dHRvbiBzaG91 bGQgYmUgZW5hYmxlIGFuZCB1c2VyIHdpbGwgYmUgYWJsZSB0byBkbyBuZXh0 IGRlYnVnZ2luZyB3aXRoIHNhbWUgZnVuY3Rpb24uCisgICAgICAgICAgICAg ICAgc2VsZi5lbmFibGUoJ2NvbnRpbnVlJywgZmFsc2UpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChy ZXMuZGF0YS5zdGF0dXMgPT09ICdCdXN5JykgeworICAgICAgICAgICAgICAv LyBJZiBzdGF0dXMgaXMgQnVzeSB0aGVuIHBvbGwgdGhlIHJlc3VsdCBieSBy ZWN1cnNpdmUgY2FsbCB0byB0aGUgcG9sbCBmdW5jdGlvbgorICAgICAgICAg ICAgICAvL3NlbGYucG9sbF9lbmRfZXhlY3V0aW9uX3Jlc3VsdCh0cmFuc19p ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXMu ZGF0YS5zdGF0dXMgPT09ICdOb3RDb25uZWN0ZWQnKSB7CisgICAgICAgICAg ICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dl ciBwb2xsIGVuZCBleGVjdXRpb24gZXJyb3InLAorICAgICAgICAgICAgICAg IHJlcy5kYXRhLnJlc3VsdAorICAgICAgICAgICAgICApOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAg ICAgICAnRGVidWdnZXIgcG9sbCBlbmQgZXhlY3V0aW9uIGVycm9yJywKKyAg ICAgICAgICAgICAgZS5yZXNwb25zZUpTT04uZXJyb3Jtc2cKKyAgICAgICAg ICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0sIDEw MDApOworCisgICAgfSwKKworICAgIC8vIENvbnRpbnVlIHRoZSBleGVjdXRp b24gdW50aWwgdGhlIG5leHQgYnJlYWtwb2ludAorICAgIENvbnRpbnVlOiBm dW5jdGlvbih0cmFuc19pZCkgeworICAgICAgdmFyIHNlbGYgPSB0aGlzOwor CisgICAgICAvL0NoZWNrIGZpcnN0IGlmIHByZXZpb3VzIGV4ZWN1dGlvbiB3 YXMgY29tcGxldGVkIG9yIG5vdAorICAgICAgaWYgKHNlbGYuZXhlY3V0aW9u X2NvbXBsZXRlZCkgeworICAgICAgICBzZWxmLmV4ZWN1dGlvbl9jb21wbGV0 ZWQgPSBmYWxzZTsKKyAgICAgICAgZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50cygp OworICAgICAgICAvLyBUT0RPOiB3ZSBuZWVkIHRvIGFnYWluIGFzayBmb3Ig dGhlIGlucHV0IGRpYWxvZworICAgICAgICAvL1ByZXZpb3VzIGV4ZWN1dGlv biB3YXMgY29tcGxldGVkIHNvIHdlIG5lZWQgdG8gYWdhaW4gc3RhcnQgdGhl IGV4ZWN1dGlvbiB3aXRoIGZpcnN0IHN0ZXAuLi4uLgorICAgICAgfQorICAg ICAgZWxzZSB7CisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3Rl biB0aGUgZGF0YWJhc2UgbWVzc2FnZQorICAgICAgICB2YXIgYmFzZVVybCA9 ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJleGVjdXRl X3F1ZXJ5LyIgKyB0cmFuc19pZCArICIvIiArICJjb250aW51ZSI7CisKKyAg ICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAg ICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5j dGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMp IHsKKyAgICAgICAgICAgICAgc2VsZi5wb2xsX3Jlc3VsdCh0cmFuc19pZCk7 CisgICAgICAgICAgICAgIGlmIChwZ1Rvb2xzLkRpcmVjdERlYnVnLmRlYnVn X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBzZWxmLnBvbGxfZW5kX2V4ZWN1 dGlvbl9yZXN1bHQodHJhbnNfaWQpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg QWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBD b250aW51ZSBleGVjdXRpb24gZXJyb3InCisgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjog ZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisg ICAgICAgICAgICAgICdEZWJ1Z2dlcjogQ29udGludWUgZXhlY3V0aW9uIGVy cm9yJworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0p OworICAgICAgfQorICAgIH0sCisKKyAgICAgIFN0ZXBfb3ZlcjogZnVuY3Rp b24odHJhbnNfaWQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisg ICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJh c2UgbWVzc2FnZQorICAgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9y KCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJleGVjdXRlX3F1ZXJ5LyIgKyB0 cmFuc19pZCArICIvIiArICJzdGVwX292ZXIiOworCisgICAgICAgICQuYWph eCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhv ZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7 CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7CisgICAgICAg ICAgICAgIHNlbGYucG9sbF9yZXN1bHQodHJhbnNfaWQpOworICAgICAgICAg ICAgICBpZiAocGdUb29scy5EaXJlY3REZWJ1Zy5kZWJ1Z190eXBlKSB7Cisg ICAgICAgICAgICAgICAgc2VsZi5wb2xsX2VuZF9leGVjdXRpb25fcmVzdWx0 KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFs ZXJ0KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dlcjogU3RlcCBvdmVyIGV4 ZWN1dGlvbiBlcnJvcicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihl KSB7CisgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAg ICAgJ0RlYnVnZ2VyOiBTdGVwIG92ZXIgZXhlY3V0aW9uIGVycm9yJworICAg ICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg fSwKKworICAgICAgU3RlcF9pbnRvOiBmdW5jdGlvbih0cmFuc19pZCkgewor ICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8gTWFrZSBh amF4IGNhbGwgdG8gbGlzdGVuIHRoZSBkYXRhYmFzZSBtZXNzYWdlCisgICAg ICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4 JykgfX0iICsgImV4ZWN1dGVfcXVlcnkvIiArIHRyYW5zX2lkICsgIi8iICsg InN0ZXBfaW50byI7CisKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1 cmw6IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAg ICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlm IChyZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgc2VsZi5wb2xs X3Jlc3VsdCh0cmFuc19pZCk7CisgICAgICAgICAgICAgIGlmIChwZ1Rvb2xz LkRpcmVjdERlYnVnLmRlYnVnX3R5cGUpIHsKKyAgICAgICAgICAgICAgICBz ZWxmLnBvbGxfZW5kX2V4ZWN1dGlvbl9yZXN1bHQodHJhbnNfaWQpOworICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl IHsKKyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAg ICAgICAgJ0RlYnVnZ2VyOiBTdGVwIGludG8gZXhlY3V0aW9uIGVycm9yJwor ICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0s CisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg IEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdnZXI6IFN0 ZXAgaW50byBleGVjdXRpb24gZXJyb3InCisgICAgICAgICAgICApOworICAg ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9LAorCisgICAgICBTdG9w OiBmdW5jdGlvbih0cmFuc19pZCkgeworICAgICAgICB2YXIgc2VsZiA9IHRo aXM7CisKKyAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gbGlzdGVuIHRo ZSBkYXRhYmFzZSBtZXNzYWdlCisgICAgICAgIHZhciBiYXNlVXJsID0gInt7 IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImV4ZWN1dGVfcXVl cnkvIiArIHRyYW5zX2lkICsgIi8iICsgImFib3J0X3RhcmdldCI7CisKKyAg ICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAg ICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5j dGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMp IHsKKyAgICAgICAgICAgICAgLy8gQ2FsbCBmdW5jdGlvbiB0byBjcmVhdGUg YW5kIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgLi4uLgorICAgICAgICAgICAg ICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5yZW1vdmVMaW5lQ2xhc3Mo c2VsZi5hY3RpdmVfbGluZV9ubywgJ3dyYXAnLCAnQ29kZU1pcnJvci1hY3Rp dmVsaW5lLWJhY2tncm91bmQnKTsKKyAgICAgICAgICAgICAgc2VsZi5leGVj dXRpb25fY29tcGxldGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAvL1Nl dCB0aGUgYWxlcnRpZnkgbWVzc2FnZSB0byBpbmZvcm0gdGhlIHVzZXIgdGhh dCBleGVjdXRpb24gaXMgY29tcGxldGVkLgorICAgICAgICAgICAgICBBbGVy dGlmeS5ub3RpZnkoCisgICAgICAgICAgICAgICAgcmVzLmluZm8sCisgICAg ICAgICAgICAgICAgJ3N1Y2Nlc3MnLAorICAgICAgICAgICAgICAgIDMsCisg ICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IH0KKyAgICAgICAgICAgICAg KTsKKworICAgICAgICAgICAgICAvL0Rpc2FibGUgdGhlIGJ1dHRvbnMgb3Ro ZXIgdGhhbiBjb250aW51ZSBidXR0b24uIElmIHVzZXIgd2FudHMgdG8gYWdh aW4gdGhlbiBpdCBzaG91bGQgYWxsb3cgdG8gZGVidWcgYWdhaW4uLi4KKyAg ICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0b3AnLCBmYWxzZSk7CisgICAg ICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdGVwX292ZXInLCBmYWxzZSk7Cisg ICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdGVwX2ludG8nLCBmYWxzZSk7 CisgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdjb250aW51ZScsIGZhbHNl KTsKKyAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3RvZ2dsZV9icmVha3Bv aW50JywgZmFsc2UpOworICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnY2xl YXJfYWxsX2JyZWFrcG9pbnRzJywgZmFsc2UpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAnTm90 Q29ubmVjdGVkJykgeworICAgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgK KyAgICAgICAgICAgICAgICAnRGVidWdnZXI6IFN0b3AgZXhlY3V0aW9uIGVy cm9yJworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAg ICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAg ICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdn ZXI6IFN0b3AgZXhlY3V0aW9uIGVycm9yJworICAgICAgICAgICAgKTsKKyAg ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfSwKKworICAgICAgdG9n Z2xlX2JyZWFrcG9pbnQ6IGZ1bmN0aW9uKHRyYW5zX2lkKSB7CisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICB2YXIgaW5mbyA9IHBnVG9v bHMuRGlyZWN0RGVidWcuZWRpdG9yLmxpbmVJbmZvKHNlbGYuYWN0aXZlX2xp bmVfbm8pOworICAgICAgICB2YXIgYmFzZVVybCA9ICcnOworCisgICAgICAg IC8vIElmIGd1dHRlck1hcmtlciBpcyB1bmRlZmluZWQgdGhhdCBtZWFucyB0 aGVyZSBpcyBubyBtYXJrZXIgZGVmaW5lZCBwcmV2aW91c2x5CisgICAgICAg IC8vIFNvIHdlIG5lZWQgdG8gc2V0IHRoZSBicmVha3BvaW50IGNvbW1hbmQg aGVyZS4uLgorICAgICAgICBpZiAoaW5mby5ndXR0ZXJNYXJrZXJzID09IHVu ZGVmaW5lZCkgeworICAgICAgICAgICAgYmFzZVVybCA9ICJ7eyB1cmxfZm9y KCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJzZXRfYnJlYWtwb2ludC8iICsg dHJhbnNfaWQgKyAiLyIgKyBzZWxmLmFjdGl2ZV9saW5lX25vICsgIi8iICsg IjEiOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg YmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiAr ICJzZXRfYnJlYWtwb2ludC8iICsgdHJhbnNfaWQgKyAiLyIgKyBzZWxmLmFj dGl2ZV9saW5lX25vICsgIi8iICsgIjAiOworICAgICAgICB9CisKKyAgICAg ICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAg ICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlv bihyZXMpIHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsK KyAgICAgICAgICAgICAgLy8gQ2FsbCBmdW5jdGlvbiB0byBjcmVhdGUgYW5k IHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgLi4uLgorICAgICAgICAgICAgICB2 YXIgaW5mbyA9IHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9yLmxpbmVJbmZv KHNlbGYuYWN0aXZlX2xpbmVfbm8pOworCisgICAgICAgICAgICAgIGlmIChp bmZvLmd1dHRlck1hcmtlcnMgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg ICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3Iuc2V0R3V0dGVyTWFy a2VyKHNlbGYuYWN0aXZlX2xpbmVfbm8sICJicmVha3BvaW50cyIsIG51bGwp OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9yLnNldEd1 dHRlck1hcmtlcihzZWxmLmFjdGl2ZV9saW5lX25vLCAiYnJlYWtwb2ludHMi LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hcmtl ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAg ICAgICAgICAgICBtYXJrZXIuc3R5bGUuY29sb3IgPSAiIzgyMiI7CisgICAg ICAgICAgICAgICAgICAgIG1hcmtlci5pbm5lckhUTUwgPSAi4pePIjsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlcjsKKyAgICAgICAgICAg ICAgICB9KCkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdOb3RD b25uZWN0ZWQnKSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAor ICAgICAgICAgICAgICAgICdEZWJ1Z2dlcjogVG9nZ2xlIGJyZWFrcG9pbnQg ZXhlY3V0aW9uIGVycm9yJworICAgICAgICAgICAgICApOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAg ICAgICAnRGVidWdnZXI6IFRvZ2dsZSBicmVha3BvaW50IGV4ZWN1dGlvbiBl cnJvcicKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9 KTsKKyAgICAgIH0sCisKKyAgICAgIGNsZWFyX2FsbF9icmVha3BvaW50OiBm dW5jdGlvbih0cmFuc19pZCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisKKyAgICAgICAgdmFyIGJyX2xpc3QgPSBzZWxmLkdldEJyZWFrcG9pbnRJ bmZvcm1hdGlvbih0cmFuc19pZCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUg aXMgbm8gYnJlYWsgcG9pbnQgdG8gY2xlYXIgdGhlbiB3ZSBzaG91bGQgcmV0 dXJuIGZyb20gaGVyZS4KKyAgICAgICAgaWYgKChicl9saXN0Lmxlbmd0aCA9 PSAxKSAmJiAoYnJfbGlzdFswXS5saW5lbnVtYmVyID09IC0xKSkKKyAgICAg ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRfbGlzdCA9 IG5ldyBBcnJheSgpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicl9s aXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgaWYgKGJyX2xpc3RbaV0u bGluZW51bWJlciAhPSAtMSkgeworICAgICAgICAgICAgYnJlYWtwb2ludF9s aXN0LnB1c2goYnJfbGlzdFtpXS5saW5lbnVtYmVyKQorICAgICAgICAgIH0K KyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxp c3RlbiB0aGUgZGF0YWJhc2UgbWVzc2FnZQorICAgICAgICB2YXIgYmFzZVVy bCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJjbGVh cl9hbGxfYnJlYWtwb2ludC8iICsgdHJhbnNfaWQ7CisKKyAgICAgICAgJC5h amF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAgICAgbWV0 aG9kOiAnUE9TVCcsCisgICAgICAgICAgZGF0YTogeyAnYnJlYWtwb2ludF9s aXN0JzogYnJlYWtwb2ludF9saXN0LmpvaW4oKSB9LAorICAgICAgICAgIHN1 Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgaWYgKHJlcy5k YXRhLnN0YXR1cykgeworICAgICAgICAgICAgICBmb3IgKGkgPSAwO2k8IGJy ZWFrcG9pbnRfbGlzdC5sZW5ndGg7aSsrKSB7CisgICAgICAgICAgICAgICAg dmFyIGluZm8gPSBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5saW5lSW5m bygoYnJlYWtwb2ludF9saXN0W2ldIC0gMSkpOworCisgICAgICAgICAgICAg ICAgaWYgKGluZm8pIHsKKyAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmd1 dHRlck1hcmtlcnMgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAg ICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9yLnNldEd1dHRlck1hcmtl cigoYnJlYWtwb2ludF9saXN0W2ldIC0gMSksICJicmVha3BvaW50cyIsIG51 bGwpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0s CisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg IEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdnZXI6IENs ZWFyIGFsbCBicmVha3BvaW50IGV4ZWN1dGlvbiBlcnJvcicKKyAgICAgICAg ICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0sCisK KyAgICAgIEFkZFN0YWNrSW5mb3JtYXRpb246IGZ1bmN0aW9uKHJlc3VsdCkg eworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8gUmVt b3ZlIHRoZSBleGlzdGluZyBjcmVhdGVkIGdyaWQgYW5kIHVwZGF0ZSB0aGUg c3RhY2sgdmFsdWVzCisgICAgICAgIGlmIChzZWxmLnN0YWNrX2dyaWQpIHsK KyAgICAgICAgICAgIHNlbGYuc3RhY2tfZ3JpZC5yZW1vdmUoKTsKKyAgICAg ICAgICAgIHNlbGYuc3RhY2tfZ3JpZCA9IG51bGw7CisgICAgICAgIH0KKwor ICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLnN0YWNrVGFiLiRlbGVtLmVt cHR5KCk7CisKKyAgICAgICAgdmFyIERlYnVnZ2VyU3RhY2tNb2RlbCA9IEJh Y2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgICAgICAgZGVmYXVsdHM6IHsK KyAgICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHZh bHVlOiB1bmRlZmluZWQsCisgICAgICAgICAgICBsaW5lX25vOiB1bmRlZmlu ZWQKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIENv bGxlY3Rpb24gd2hpY2ggY29udGFpbnMgdGhlIG1vZGVsIGZvciBmdW5jdGlv biBpbmZvcm1hdGlvbnMuCisgICAgICAgIHZhciBTdGFja0NvbGxlY3Rpb24g PSBCYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZCh7CisgICAgICAgICAgbW9k ZWw6IERlYnVnZ2VyU3RhY2tNb2RlbAorICAgICAgICB9KTsKKworICAgICAg ICBzdGFja0dyaWRDb2xzID0gWworICAgICAgICAgIHtuYW1lOiAnbmFtZScs IGxhYmVsOidOYW1lJywgdHlwZTondGV4dCcsIGVkaXRhYmxlOiBmYWxzZSwg Y2VsbDonc3RyaW5nJ30sCisgICAgICAgICAge25hbWU6ICd2YWx1ZScsIGxh YmVsOidWYWx1ZScsIHR5cGU6J3RleHQnLCBlZGl0YWJsZTogZmFsc2UsIGNl bGw6J3N0cmluZyd9LAorICAgICAgICAgIHtuYW1lOiAnbGluZV9ubycsIGxh YmVsOidMaW5lIE5vLicsIHR5cGU6J3RleHQnLCBlZGl0YWJsZTogZmFsc2Us IGNlbGw6J3N0cmluZyd9CisgICAgICAgIF07CisKKyAgICAgICAgdmFyIG15 X29iaiA9IFtdOworICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPSAwKQor ICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlc3VsdC5s ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgLy8gVE9ETzogY2hhbmdlIHRo ZSBteV9mdW5jX3Rlc3RfMiB3aXRoIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRv IGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgbXlfb2JqLnB1c2goeyAibmFt ZSI6IHJlc3VsdFtpXS50YXJnZXRuYW1lLCAidmFsdWUiOiByZXN1bHRbaV0u YXJncywgImxpbmVfbm8iOiByZXN1bHRbaV0ubGluZW51bWJlciB9KTsKKyAg ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhY2tDb2xs ID0gdGhpcy5zdGFja0NvbGwgPSBuZXcgU3RhY2tDb2xsZWN0aW9uKG15X29i aik7CisgICAgICAgIHRoaXMuc3RhY2tDb2xsLm9uKCdiYWNrZ3JpZDpyb3c6 c2VsZWN0ZWQnLCBzZWxmLnNlbGVjdF9mcmFtZSwgc2VsZik7CisKKyAgICAg ICAgLy8gSW5pdGlhbGl6ZSBhIG5ldyBHcmlkIGluc3RhbmNlCisgICAgICAg IHZhciBzdGFja19ncmlkID0gdGhpcy5zdGFja19ncmlkID0gbmV3IEJhY2tn cmlkLkdyaWQoeworICAgICAgICAgIGNvbHVtbnM6IHN0YWNrR3JpZENvbHMs CisgICAgICAgICAgcm93OiBCYWNrZ3JpZC5Sb3cuZXh0ZW5kKHsKKyAgICAg ICAgICAgIGhpZ2hsaWdodENvbG9yOiAiI0Q5RURGNyIsCisgICAgICAgICAg ICBkaXNhYmxlZENvbG9yOiAiI0YxRjFGMSIsCisgICAgICAgICAgICBldmVu dHM6IHsKKyAgICAgICAgICAgICAgY2xpY2s6ICJyb3dDbGljayIKKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgICByb3dDbGljazogZnVuY3Rpb24oZSkg eworICAgICAgICAgICAgICAvL0ZpbmQgd2hpY2ggcm93IGlzIHNlbGVjdGVk IGFuZCBkZXBlbmRpbmcgb24gdGhhdCBzZW5kIHRoZSBmcmFtZSBpZAorICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5tb2RlbC5jb2xsZWN0 aW9uLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu bW9kZWwuY29sbGVjdGlvbi5tb2RlbHNbaV0uZ2V0KCduYW1lJykgPT0gdGhp cy5tb2RlbC5nZXQoJ25hbWUnKSkgeworICAgICAgICAgICAgICAgICAgc2Vs Zi5mcmFtZV9pZF8gPSBpOworICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIHRoaXMubW9kZWwudHJpZ2dlcignYmFja2dyaWQ6cm93OnNlbGVjdGVk JywgdGhpcyk7CisgICAgICAgICAgICAgIHNlbGYuc3RhY2tfZ3JpZC4kZWwu ZmluZCgidGQiKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCB0aGlzLmRpc2Fi bGVkQ29sb3IpOworICAgICAgICAgICAgICB0aGlzLiRlbC5maW5kKCJ0ZCIp LmNzcygiYmFja2dyb3VuZC1jb2xvciIsIHRoaXMuaGlnaGxpZ2h0Q29sb3Ip OworICAgICAgICAgICAgfQorICAgICAgICAgIH0pLAorICAgICAgICAgIGNv bGxlY3Rpb246IHN0YWNrQ29sbCwKKyAgICAgICAgICBjbGFzc05hbWU6ICJi YWNrZ3JpZCB0YWJsZS1ib3JkZXJlZCIKKyAgICAgICAgfSk7CisKKyAgICAg ICAgc3RhY2tfZ3JpZC5yZW5kZXIoKTsKKyAgICAgICAgcGdUb29scy5EaXJl Y3REZWJ1Zy5zdGFja1RhYi4kZWxlbS5hcHBlbmQoc3RhY2tfZ3JpZC5lbCk7 CisgICAgICB9LAorCisgICAgICBBZGRSZXN1bHRzOiBmdW5jdGlvbihyZXN1 bHQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIC8v IFJlbW92ZSB0aGUgZXhpc3RpbmcgY3JlYXRlZCBncmlkIGFuZCB1cGRhdGUg dGhlIHJlc3VsdCB2YWx1ZXMKKyAgICAgICAgaWYgKHNlbGYucmVzdWx0X2dy aWQpIHsKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2dyaWQucmVtb3ZlKCk7 CisgICAgICAgICAgICBzZWxmLnJlc3VsdF9ncmlkID0gbnVsbDsKKyAgICAg ICAgfQorCisgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcucmV0UmVzdWx0 cy4kZWxlbS5lbXB0eSgpOworCisgICAgICAgIHZhciBEZWJ1Z2dlclJlc3Vs dHNNb2RlbCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgICAgICAg ZGVmYXVsdHM6IHsKKyAgICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZAorICAg ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gQ29sbGVjdGlv biB3aGljaCBjb250YWlucyB0aGUgbW9kZWwgZm9yIGZ1bmN0aW9uIGluZm9y bWF0aW9ucy4KKyAgICAgICAgdmFyIFJlc3VsdHNDb2xsZWN0aW9uID0gQmFj a2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgIG1vZGVsOiBE ZWJ1Z2dlclJlc3VsdHNNb2RlbAorICAgICAgICB9KTsKKworICAgICAgICBy ZXN1bHRHcmlkQ29scyA9IFsKKyAgICAgICAgICB7bmFtZTogJ3ZhbHVlJywg bGFiZWw6cmVzdWx0Lm5hbWUsIHR5cGU6J3RleHQnLCBlZGl0YWJsZTogZmFs c2UsIGNlbGw6J3N0cmluZyd9CisgICAgICAgIF07CisKKyAgICAgICAgdmFy IG15X29iaiA9IFtdOworICAgICAgICBpZiAocmVzdWx0LnZhbHVlLmxlbmd0 aCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHJlc3VsdC52YWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgLy8g VE9ETzogY2hhbmdlIHRoZSBteV9mdW5jX3Rlc3RfMiB3aXRoIG5hbWUgb2Yg dGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgbXlf b2JqLnB1c2goeyAidmFsdWUiOiByZXN1bHQudmFsdWVbaV19KTsKKyAgICAg ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJbml0aWFsaXplIGEg bmV3IEdyaWQgaW5zdGFuY2UKKyAgICAgICAgdmFyIHJlc3VsdF9ncmlkID0g dGhpcy5yZXN1bHRfZ3JpZCA9IG5ldyBCYWNrZ3JpZC5HcmlkKHsKKyAgICAg ICAgICBjb2x1bW5zOiByZXN1bHRHcmlkQ29scywKKyAgICAgICAgICBjb2xs ZWN0aW9uOiBuZXcgUmVzdWx0c0NvbGxlY3Rpb24obXlfb2JqKSwKKyAgICAg ICAgICBjbGFzc05hbWU6ICJiYWNrZ3JpZCB0YWJsZS1ib3JkZXJlZCIKKyAg ICAgICAgfSk7CisKKyAgICAgICAgcmVzdWx0X2dyaWQucmVuZGVyKCk7Cisg ICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcucmV0UmVzdWx0cy4kZWxlbS5h cHBlbmQocmVzdWx0X2dyaWQuZWwpOworICAgICAgfSwKKworICAgICAgQWRk TG9jYWxWYXJpYWJsZXM6IGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICB2 YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBleGlz dGluZyBjcmVhdGVkIGdyaWQgYW5kIHVwZGF0ZSB0aGUgdmFyaWFibGVzIHZh bHVlcworICAgICAgICBpZiAoc2VsZi52YXJpYWJsZV9ncmlkKSB7CisgICAg ICAgICAgICBzZWxmLnZhcmlhYmxlX2dyaWQucmVtb3ZlKCk7CisgICAgICAg ICAgICBzZWxmLnZhcmlhYmxlX2dyaWQgPSBudWxsOworICAgICAgICB9CisK KyAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5sb2NhbFZhcnMuJGVsZW0u ZW1wdHkoKTsKKworICAgICAgICB2YXIgRGVidWdnZXJWYXJpYWJsZXNNb2Rl bCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgICAgICAgZGVmYXVs dHM6IHsKKyAgICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAg ICAgIHR5cGU6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHZhbHVlOiB1bmRl ZmluZWQKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8v IENvbGxlY3Rpb24gd2hpY2ggY29udGFpbnMgdGhlIG1vZGVsIGZvciBmdW5j dGlvbiBpbmZvcm1hdGlvbnMuCisgICAgICAgIHZhciBWYXJpYWJsZXNDb2xs ZWN0aW9uID0gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAg ICAgIG1vZGVsOiBEZWJ1Z2dlclZhcmlhYmxlc01vZGVsCisgICAgICAgIH0p OworCisgICAgICAgIGdyaWRDb2xzID0gWworICAgICAgICAgIHtuYW1lOiAn bmFtZScsIGxhYmVsOidOYW1lJywgdHlwZTondGV4dCcsIGVkaXRhYmxlOiBm YWxzZSwgY2VsbDonc3RyaW5nJ30sCisgICAgICAgICAge25hbWU6ICd0eXBl JywgbGFiZWw6J1R5cGUnLCB0eXBlOiAndGV4dCcsIGVkaXRhYmxlOiBmYWxz ZSwgY2VsbDonc3RyaW5nJ30sCisgICAgICAgICAge25hbWU6ICd2YWx1ZScs IGxhYmVsOidWYWx1ZScsIHR5cGU6ICd0ZXh0JywgY2VsbDogJ3N0cmluZyd9 CisgICAgICAgIF07CisKKyAgICAgICAgdmFyIG15X29iaiA9IFtdOworICAg ICAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPSAwKQorICAgICAgICB7CisgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgewor ICAgICAgICAgICAgaWYgKHJlc3VsdFtpXS52YXJjbGFzcyA9PSAnTCcpIHsK KyAgICAgICAgICAgICAgbXlfb2JqLnB1c2goeyAibmFtZSI6IHJlc3VsdFtp XS5uYW1lLCAidHlwZSI6IHJlc3VsdFtpXS5kdHlwZSwgInZhbHVlIjogcmVz dWx0W2ldLnZhbHVlfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBhIG5ldyBHcmlk IGluc3RhbmNlCisgICAgICAgIHZhciB2YXJpYWJsZV9ncmlkID0gdGhpcy52 YXJpYWJsZV9ncmlkID0gbmV3IEJhY2tncmlkLkdyaWQoeworICAgICAgICAg IGNvbHVtbnM6IGdyaWRDb2xzLAorICAgICAgICAgIGNvbGxlY3Rpb246IG5l dyBWYXJpYWJsZXNDb2xsZWN0aW9uKG15X29iaiksCisgICAgICAgICAgY2xh c3NOYW1lOiAiYmFja2dyaWQgdGFibGUtYm9yZGVyZWQiCisgICAgICAgIH0p OworCisgICAgICAgIHZhcmlhYmxlX2dyaWQucmVuZGVyKCk7CisgICAgICAg IHBnVG9vbHMuRGlyZWN0RGVidWcubG9jYWxWYXJzLiRlbGVtLmFwcGVuZCh2 YXJpYWJsZV9ncmlkLmVsKTsKKyAgICAgIH0sCisKKyAgICAgIEFkZFBhcmFt ZXRlcnM6IGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICB2YXIgc2VsZiA9 IHRoaXM7CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBleGlzdGluZyBjcmVh dGVkIGdyaWQgYW5kIHVwZGF0ZSB0aGUgcGFyYW1ldGVyIHZhbHVlcworICAg ICAgICBpZiAoc2VsZi5wYXJhbV9ncmlkKSB7CisgICAgICAgICAgICBzZWxm LnBhcmFtX2dyaWQucmVtb3ZlKCk7CisgICAgICAgICAgICBzZWxmLnBhcmFt X2dyaWQgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcGdUb29scy5E aXJlY3REZWJ1Zy5wYXJhbXNUYWIuJGVsZW0uZW1wdHkoKTsKKworICAgICAg ICB2YXIgRGVidWdnZXJQYXJhbWV0ZXJzTW9kZWwgPSBCYWNrYm9uZS5Nb2Rl bC5leHRlbmQoeworICAgICAgICAgIGRlZmF1bHRzOiB7CisgICAgICAgICAg ICBuYW1lOiB1bmRlZmluZWQsCisgICAgICAgICAgICB0eXBlOiB1bmRlZmlu ZWQsCisgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkCisgICAgICAgICAg fQorICAgICAgICB9KTsKKworICAgICAgICAvLyBDb2xsZWN0aW9uIHdoaWNo IGNvbnRhaW5zIHRoZSBtb2RlbCBmb3IgZnVuY3Rpb24gaW5mb3JtYXRpb25z LgorICAgICAgICB2YXIgUGFyYW1ldGVyc0NvbGxlY3Rpb24gPSBzZWxmLlBh cmFtZXRlcnNDb2xsZWN0aW9uID0gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRl bmQoeworICAgICAgICAgIG1vZGVsOiBEZWJ1Z2dlclBhcmFtZXRlcnNNb2Rl bAorICAgICAgICB9KTsKKworICAgICAgICBzZWxmLlBhcmFtZXRlcnNDb2xs ZWN0aW9uLnByb3RvdHlwZS5vbignY2hhbmdlJywgc2VsZi5kZXBvc2l0X3Bh cmFtZXRlcl92YWx1ZSwgc2VsZik7CisKKyAgICAgICAgcGFyYW1HcmlkQ29s cyA9IFsKKyAgICAgICAgICB7bmFtZTogJ25hbWUnLCBsYWJlbDonTmFtZScs IHR5cGU6J3RleHQnLCBlZGl0YWJsZTogZmFsc2UsIGNlbGw6J3N0cmluZyd9 LAorICAgICAgICAgIHtuYW1lOiAndHlwZScsIGxhYmVsOidUeXBlJywgdHlw ZTogJ3RleHQnLCBlZGl0YWJsZTogZmFsc2UsIGNlbGw6J3N0cmluZyd9LAor ICAgICAgICAgIHtuYW1lOiAndmFsdWUnLCBsYWJlbDonVmFsdWUnLCB0eXBl OiAndGV4dCcsIGNlbGw6ICdzdHJpbmcnfQorICAgICAgICBdOworCisgICAg ICAgIHZhciBwYXJhbV9vYmogPSBbXTsKKyAgICAgICAgaWYgKHJlc3VsdC5s ZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChy ZXN1bHRbaV0udmFyY2xhc3MgPT0gJ0EnKSB7CisgICAgICAgICAgICAgIHBh cmFtX29iai5wdXNoKHsgIm5hbWUiOiByZXN1bHRbaV0ubmFtZSwgInR5cGUi OiByZXN1bHRbaV0uZHR5cGUsICJ2YWx1ZSI6IHJlc3VsdFtpXS52YWx1ZX0p OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisg ICAgICAgIC8vIEluaXRpYWxpemUgYSBuZXcgR3JpZCBpbnN0YW5jZQorICAg ICAgICB2YXIgcGFyYW1fZ3JpZCA9IHRoaXMucGFyYW1fZ3JpZCA9IG5ldyBC YWNrZ3JpZC5HcmlkKHsKKyAgICAgICAgICBjb2x1bW5zOiBwYXJhbUdyaWRD b2xzLAorICAgICAgICAgIGNvbGxlY3Rpb246IG5ldyBQYXJhbWV0ZXJzQ29s bGVjdGlvbihwYXJhbV9vYmopLAorICAgICAgICAgIGNsYXNzTmFtZTogImJh Y2tncmlkIHRhYmxlLWJvcmRlcmVkIgorICAgICAgICB9KTsKKworICAgICAg ICBwYXJhbV9ncmlkLnJlbmRlcigpOworICAgICAgICBwZ1Rvb2xzLkRpcmVj dERlYnVnLnBhcmFtc1RhYi4kZWxlbS5hcHBlbmQocGFyYW1fZ3JpZC5lbCk7 CisgICAgICB9LAorCisgICAgICBkZXBvc2l0X3BhcmFtZXRlcl92YWx1ZTog ZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor CisgICAgICAgIC8vIHZhcmlhYmxlIG5hbWUgYW5kIHZhbHVlIGxpc3QgdGhh dCBpcyBjaGFuZ2VkIGJ5IHVzZXIKKyAgICAgICAgdmFyIG5hbWVfdmFsdWVf bGlzdCA9IFtdOworCisgICAgICAgIG5hbWVfdmFsdWVfbGlzdC5wdXNoKHsg J25hbWUnOiBtb2RlbC5nZXQoJ25hbWUnKSwndHlwZSc6IG1vZGVsLmdldCgn dHlwZScpLCAndmFsdWUnOiBtb2RlbC5nZXQoJ3ZhbHVlJyl9KTsKKworICAg ICAgICAvLyBNYWtlIGFqYXggY2FsbCB0byBsaXN0ZW4gdGhlIGRhdGFiYXNl IG1lc3NhZ2UKKyAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2Zvcign ZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAiZGVwb3NpdF92YWx1ZS8iICsgcGdU b29scy5EaXJlY3REZWJ1Zy50cmFuc19pZDsKKworICAgICAgICAkLmFqYXgo eworICAgICAgICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICBtZXRob2Q6 ICdQT1NUJywKKyAgICAgICAgICBkYXRhOnsnZGF0YSc6SlNPTi5zdHJpbmdp ZnkobmFtZV92YWx1ZV9saXN0KX0sCisgICAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVz KSB7CisgICAgICAgICAgICAgIC8vIEdldCB0aGUgdXBkYXRlZCB2YXJpYWJs ZXMgdmFsdWUKKyAgICAgICAgICAgICAgc2VsZi5HZXRMb2NhbFZhcmlhYmxl cyhwZ1Rvb2xzLkRpcmVjdERlYnVnLnRyYW5zX2lkKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihl KSB7CisgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAg ICAgJ0RlYnVnZ2VyOiBEZXBvc2l0IHZhbHVlIGV4ZWN1dGlvbiBlcnJvcics CisgICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmVycm9ybXNnCisgICAg ICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9 LAorCisgICAgICBzZWxlY3RfZnJhbWU6IGZ1bmN0aW9uKG1vZGVsLCBzZWxl Y3RlZCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAg Ly8gTWFrZSBhamF4IGNhbGwgdG8gbGlzdGVuIHRoZSBkYXRhYmFzZSBtZXNz YWdlCisgICAgICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVn Z2VyLmluZGV4JykgfX0iICsgInNlbGVjdF9mcmFtZS8iICsgcGdUb29scy5E aXJlY3REZWJ1Zy50cmFuc19pZCArICIvIiArIHNlbGYuZnJhbWVfaWRfOwor CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAor ICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3Rh dHVzKSB7CisgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZWRp dG9yLnNldFZhbHVlKHJlcy5kYXRhLnJlc3VsdFswXS5zcmMpOworICAgICAg ICAgICAgICBzZWxmLlVwZGF0ZUJyZWFrcG9pbnQocGdUb29scy5EaXJlY3RE ZWJ1Zy50cmFuc19pZCk7CisgICAgICAgICAgICAgIC8vYWN0aXZlX2xpbmVf bm8gPSBzZWxmLmFjdGl2ZV9saW5lX25vID0gKHJlcy5kYXRhLnJlc3VsdFsw XS5saW5lbnVtYmVyIC0gMik7CisgICAgICAgICAgICAgIHBnVG9vbHMuRGly ZWN0RGVidWcuZWRpdG9yLmFkZExpbmVDbGFzcygocmVzLmRhdGEucmVzdWx0 WzBdLmxpbmVudW1iZXIgLSAyKSwgJ3dyYXAnLCAnQ29kZU1pcnJvci1hY3Rp dmVsaW5lLWJhY2tncm91bmQnKTsKKworICAgICAgICAgICAgICAvLyBDYWxs IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbmQgdXBkYXRlIGxvY2FsIHZhcmlhYmxl cyAuLi4uCisgICAgICAgICAgICAgIHNlbGYuR2V0TG9jYWxWYXJpYWJsZXMo cGdUb29scy5EaXJlY3REZWJ1Zy50cmFuc19pZCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkg eworICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAg ICdEZWJ1Z2dlcjogU2VsZWN0IGZyYW1lIGV4ZWN1dGlvbiBlcnJvcicsCisg ICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmVycm9ybXNnCisgICAgICAg ICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9LAor ICAgIH0KKyAgKQorCisgIC8qCisgICAgRGVidWdnZXIgdG9vbCB2YXIgdmll dyB0byBjcmVhdGUgdGhlIGJ1dHRvbiB0b29sYmFyIGFuZCBsaXN0ZW4gdG8g dGhlIGJ1dHRvbiBjbGljayBldmVudCBhbmQgaW5mb3JtIHRoZQorICAgIGNv bnRyb2xsZXIgYWJvdXQgdGhlIGNsaWNrIGFuZCBjb250cm9sbGVyIHdpbGwg dGFrZSB0aGUgYWN0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGJ1dHRvbiBjbGlj ay4KKyAgKi8KKyAgdmFyIERlYnVnZ2VyVG9vbGJhclZpZXcgPSBCYWNrYm9u ZS5WaWV3LmV4dGVuZCh7CisgICAgZWw6ICcjYnRuLXRvb2xiYXInLAorICAg IGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgY29udHJvbGxlci5v bigncGdEZWJ1Z2dlcjpidXR0b246c3RhdGU6c3RvcCcsIHRoaXMuZW5hYmxl X3N0b3AsIHRoaXMpOworICAgICAgY29udHJvbGxlci5vbigncGdEZWJ1Z2dl cjpidXR0b246c3RhdGU6c3RlcF9vdmVyJywgdGhpcy5lbmFibGVfc3RlcF9v dmVyLCB0aGlzKTsKKyAgICAgIGNvbnRyb2xsZXIub24oJ3BnRGVidWdnZXI6 YnV0dG9uOnN0YXRlOnN0ZXBfaW50bycsIHRoaXMuZW5hYmxlX3N0ZXBfaW50 bywgdGhpcyk7CisgICAgICBjb250cm9sbGVyLm9uKCdwZ0RlYnVnZ2VyOmJ1 dHRvbjpzdGF0ZTpjb250aW51ZScsIHRoaXMuZW5hYmxlX2NvbnRpbnVlLCB0 aGlzKTsKKyAgICAgIGNvbnRyb2xsZXIub24oJ3BnRGVidWdnZXI6YnV0dG9u OnN0YXRlOnRvZ2dsZV9icmVha3BvaW50JywgdGhpcy5lbmFibGVfdG9nZ2xl X2JyZWFrcG9pbnQsIHRoaXMpOworICAgICAgY29udHJvbGxlci5vbigncGdE ZWJ1Z2dlcjpidXR0b246c3RhdGU6Y2xlYXJfYWxsX2JyZWFrcG9pbnRzJywg dGhpcy5lbmFibGVfY2xlYXJfYWxsX2JyZWFrcG9pbnRzLCB0aGlzKTsKKyAg ICB9LAorICAgIGV2ZW50czogeworICAgICAgICAnY2xpY2sgLmJ0bi1zdG9w JzogJ29uX3N0b3AnLAorICAgICAgICAnY2xpY2sgLmJ0bi1jbGVhci1icmVh a3BvaW50JzogJ29uX2NsZWFyX2FsbF9icmVha3BvaW50JywKKyAgICAgICAg J2NsaWNrIC5idG4tdG9nZ2xlLWJyZWFrcG9pbnQnOiAnb25fdG9nZ2xlX2Jy ZWFrcG9pbnQnLAorICAgICAgICAnY2xpY2sgLmJ0bi1jb250aW51ZSc6ICdv bl9jb250aW51ZScsCisgICAgICAgICdjbGljayAuYnRuLXN0ZXAtb3Zlcic6 ICdvbl9zdGVwX292ZXInLAorICAgICAgICAnY2xpY2sgLmJ0bi1zdGVwLWlu dG8nOiAnb25fc3RlcF9pbnRvJworICAgIH0sCisgICAgZW5hYmxlX3N0b3A6 IGZ1bmN0aW9uKGVuYWJsZSkgeworICAgICAgdmFyICRidG4gPSB0aGlzLiRl bC5maW5kKCcuYnRuLXN0b3AnKTsKKworICAgICAgaWYgKGVuYWJsZSkgewor ICAgICAgICAkYnRuLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAg ICAkYnRuLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICB9IGVsc2Ug eworICAgICAgICAkYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAg ICAgICRidG4uYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAg IH0KKyAgICB9LAorICAgIGVuYWJsZV9zdGVwX292ZXI6IGZ1bmN0aW9uKGVu YWJsZSkgeworICAgICAgdmFyICRidG4gPSB0aGlzLiRlbC5maW5kKCcuYnRu LXN0ZXAtb3ZlcicpOworCisgICAgICBpZiAoZW5hYmxlKSB7CisgICAgICAg ICRidG4ucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICRidG4u cmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgIH0gZWxzZSB7CisgICAg ICAgICRidG4ucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgICAgJGJ0 bi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgfQorICAg IH0sCisgICAgZW5hYmxlX3N0ZXBfaW50bzogZnVuY3Rpb24oZW5hYmxlKSB7 CisgICAgICB2YXIgJGJ0biA9IHRoaXMuJGVsLmZpbmQoJy5idG4tc3RlcC1p bnRvJyk7CisKKyAgICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgJGJ0bi5w cm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAgJGJ0bi5yZW1vdmVB dHRyKCdkaXNhYmxlZCcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGJ0 bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAkYnRuLmF0dHIo J2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICB9CisgICAgfSwKKyAg ICBlbmFibGVfY29udGludWU6IGZ1bmN0aW9uKGVuYWJsZSkgeworICAgICAg dmFyICRidG4gPSB0aGlzLiRlbC5maW5kKCcuYnRuLWNvbnRpbnVlJyk7CisK KyAgICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgJGJ0bi5wcm9wKCdkaXNh YmxlZCcsIGZhbHNlKTsKKyAgICAgICAgJGJ0bi5yZW1vdmVBdHRyKCdkaXNh YmxlZCcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGJ0bi5wcm9wKCdk aXNhYmxlZCcsIHRydWUpOworICAgICAgICAkYnRuLmF0dHIoJ2Rpc2FibGVk JywgJ2Rpc2FibGVkJyk7CisgICAgICB9CisgICAgfSwKKyAgICBlbmFibGVf dG9nZ2xlX2JyZWFrcG9pbnQ6IGZ1bmN0aW9uKGVuYWJsZSkgeworICAgICAg dmFyICRidG4gPSB0aGlzLiRlbC5maW5kKCcuYnRuLXRvZ2dsZS1icmVha3Bv aW50Jyk7CisKKyAgICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgJGJ0bi5w cm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAgJGJ0bi5yZW1vdmVB dHRyKCdkaXNhYmxlZCcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGJ0 bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAkYnRuLmF0dHIo J2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICB9CisgICAgfSwKKyAg ICBlbmFibGVfY2xlYXJfYWxsX2JyZWFrcG9pbnRzOiBmdW5jdGlvbihlbmFi bGUpIHsKKyAgICAgIHZhciAkYnRuID0gdGhpcy4kZWwuZmluZCgnLmJ0bi1j bGVhci1icmVha3BvaW50Jyk7CisKKyAgICAgIGlmIChlbmFibGUpIHsKKyAg ICAgICAgJGJ0bi5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAg JGJ0bi5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgfSBlbHNlIHsK KyAgICAgICAgJGJ0bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAg ICAkYnRuLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICB9 CisgICAgfSwKKworICAgIG9uX3N0b3A6IGZ1bmN0aW9uKCkgeworICAgICAg Y29udHJvbGxlci5TdG9wKHBnVG9vbHMuRGlyZWN0RGVidWcudHJhbnNfaWQp OworICAgIH0sCisgICAgb25fY2xlYXJfYWxsX2JyZWFrcG9pbnQ6IGZ1bmN0 aW9uKCkgeworICAgICAgY29udHJvbGxlci5jbGVhcl9hbGxfYnJlYWtwb2lu dChwZ1Rvb2xzLkRpcmVjdERlYnVnLnRyYW5zX2lkKTsKKyAgICB9LAorICAg IG9uX3RvZ2dsZV9icmVha3BvaW50OiBmdW5jdGlvbigpIHsKKyAgICAgIGNv bnRyb2xsZXIudG9nZ2xlX2JyZWFrcG9pbnQocGdUb29scy5EaXJlY3REZWJ1 Zy50cmFuc19pZCk7CisgICAgfSwKKyAgICBvbl9jb250aW51ZTogZnVuY3Rp b24oKSB7CisgICAgICBjb250cm9sbGVyLkNvbnRpbnVlKHBnVG9vbHMuRGly ZWN0RGVidWcudHJhbnNfaWQpOworICAgIH0sCisgICAgb25fc3RlcF9vdmVy OiBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnRyb2xsZXIuU3RlcF9vdmVyKHBn VG9vbHMuRGlyZWN0RGVidWcudHJhbnNfaWQpOworICAgIH0sCisgICAgb25f c3RlcF9pbnRvOiBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnRyb2xsZXIuU3Rl cF9pbnRvKHBnVG9vbHMuRGlyZWN0RGVidWcudHJhbnNfaWQpOworICAgIH0s CisgIH0pOworCisKKyAgLyoKKyAgICBGdW5jdGlvbiBpcyByZXNwb25zaWJs ZSB0byBjcmVhdGUgdGhlIG5ldyB3Y0RvY2tlciBpbnN0YW5jZSBmb3IgZGVi dWdnZXIgYW5kIGluaXRpYWxpemUgdGhlIGRlYnVnZ2VyIHBhbmVsIGluc2lk ZQorICAgIHRoZSBkb2NrZXIgaW5zdGFuY2UuCisgICovCisgIHZhciBEaXJl Y3REZWJ1ZyA9IGZ1bmN0aW9uKCkge307CisKKyAgXy5leHRlbmQoRGlyZWN0 RGVidWcucHJvdG90eXBlLCB7CisgICAgaW5pdDogZnVuY3Rpb24odHJhbnNf aWQsIGRlYnVnX3R5cGUpIHsgLyogV2Ugc2hvdWxkIGdldCB0aGUgdHJhbnNh Y3Rpb24gaWQgZnJvbSB0aGUgc2VydmVyIGR1cmluZyBpbml0aWFsaXphdGlv biBoZXJlICovCisgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBpbml0aWFs aXplIHRoZSBtb2R1bGUgbXVsdGlwbGUgdGltZXMuCisKKyAgICAgIHZhciBz ZWxmID0gdGhpczsKKyAgICAgIF8uYmluZEFsbChwZ1Rvb2xzLkRpcmVjdERl YnVnLCAnbWVzc2FnZXMnKTsKKworICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6 ZWQpCisgICAgICAgICAgcmV0dXJuOworCisgICAgICB0aGlzLmluaXRpYWxp emVkID0gdHJ1ZTsKKyAgICAgIHRoaXMudHJhbnNfaWQgPSB0cmFuc19pZDsK KyAgICAgIHRoaXMuZGVidWdfdHlwZSA9IGRlYnVnX3R5cGU7CisgICAgICB0 aGlzLmZpcnN0X3RpbWVfaW5kaXJlY3RfZGVidWcgPSBmYWxzZTsKKworICAg ICAgdmFyIGRvY2tlciA9IHRoaXMuZG9ja2VyID0gbmV3IHdjRG9ja2VyKAor ICAgICAgICAgICcjY29udGFpbmVyJywgeworICAgICAgICAgIGFsbG93Q29u dGV4dE1lbnU6IGZhbHNlLAorICAgICAgICAgIGFsbG93Q29sbGFwc2U6IGZh bHNlLAorICAgICAgICAgIHRoZW1lUGF0aDogJ3t7IHVybF9mb3IoJ3N0YXRp YycsIGZpbGVuYW1lPSdjc3Mvd2NEb2NrZXIvVGhlbWVzJykgfX0nLAorICAg ICAgICAgIHRoZW1lOiAncGdhZG1pbicKKyAgICAgICAgfSk7CisKKyAgICAg IHRoaXMucGFuZWxzID0gW107CisKKyAgICAgIC8vIEJlbG93IGNvZGUgd2ls bCBiZSBleGVjdXRlZCBmb3IgaW5kaXJlY3QgZGVidWdnaW5nCisgICAgICBp ZiAodHJhbnNfaWQgIT0gdW5kZWZpbmVkICYmICFkZWJ1Z190eXBlKSB7Cisg ICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGV4ZWN1dGUgdGhlIGFuZCBz dGFydCB0aGUgdGFyZ2V0IGZvciBleGVjdXRpb24KKyAgICAgICAgdmFyIGJh c2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAi c3RhcnRfbGlzdGVuZXIvIiArIHRyYW5zX2lkOworCisgICAgICAgICQuYWph eCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhv ZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7 CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7CisgICAgICAg ICAgICAgIHNlbGYuaW50aWFsaXplUGFuZWxzKCk7CisgICAgICAgICAgICAg IGNvbnRyb2xsZXIucG9sbF9yZXN1bHQodHJhbnNfaWQpOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9u KGUpIHsKKyAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAg ICAgICAnRGVidWdnZXIgbGlzdGVuZXIgc3RhcnRpbmcgZXJyb3InLAorICAg ICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZworICAgICAgICAg ICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAg ICAgZWxzZSBpZiAodHJhbnNfaWQgIT0gdW5kZWZpbmVkICYmIGRlYnVnX3R5 cGUpCisgICAgICB7CisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGV4 ZWN1dGUgdGhlIGFuZCBzdGFydCB0aGUgdGFyZ2V0IGZvciBleGVjdXRpb24K KyAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIu aW5kZXgnKSB9fSIgKyAic3RhcnRfbGlzdGVuZXIvIiArIHRyYW5zX2lkOwor CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAor ICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3Rh dHVzKSB7CisgICAgICAgICAgICAgIHNlbGYubWVzc2FnZXModHJhbnNfaWQp OworICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgZXJy b3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0 KAorICAgICAgICAgICAgICAnRGVidWdnZXIgbGlzdGVuZXIgc3RhcnRpbmcg ZXJyb3InLAorICAgICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1z ZworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOwor ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB0aGlzLmludGlhbGl6ZVBh bmVscygpOworICAgIH0sCisKKyAgICAvLyBSZWFkIHRoZSBtZXNzYWdlcyBv ZiB0aGUgZGF0YWJhc2Ugc2VydmVyIGFuZCBnZXQgdGhlIHBvcnQgSUQgYW5k IGF0dGFjaCB0aGUgZXhlY3V0ZXIgdG8gdGhhdCBwb3J0LgorICAgIG1lc3Nh Z2VzOiBmdW5jdGlvbih0cmFuc19pZCkgeworICAgICAgdmFyIHNlbGYgPSB0 aGlzOworICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gbGlzdGVuIHRoZSBk YXRhYmFzZSBtZXNzYWdlCisgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxf Zm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJtZXNzYWdlcy8iICsgdHJh bnNfaWQ7CisKKyAgICAgICQuYWpheCh7CisgICAgICAgIHVybDogYmFzZVVy bCwKKyAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1 cyA9PT0gJ1N1Y2Nlc3MnKSB7CisgICAgICAgICAgICBzZWxmLmludGlhbGl6 ZVBhbmVscygpOworICAgICAgICAgICAgLy8gSWYgc3RhdHVzIGlzIFN1Y2Nl c3MgdGhlbiBmaW5kIHRoZSBwb3J0IG51bWJlciB0byBhdHRhY2ggdGhlIGV4 ZWN1dGVyLgorICAgICAgICAgICAgLy9zZWxmLnN0YXJ0X2V4ZWN1dGlvbih0 cmFuc19pZCwgcmVzLmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgIGNvbnRy b2xsZXIuc3RhcnRfZXhlY3V0aW9uKHRyYW5zX2lkLCByZXMuZGF0YS5yZXN1 bHQpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0 YS5zdGF0dXMgPT09ICdCdXN5JykgeworICAgICAgICAgICAgLy8gSWYgc3Rh dHVzIGlzIEJ1c3kgdGhlbiBwb2xsIHRoZSByZXN1bHQgYnkgcmVjdXJzaXZl IGNhbGwgdG8gdGhlIHBvbGwgZnVuY3Rpb24KKyAgICAgICAgICAgIHNlbGYu bWVzc2FnZXModHJhbnNfaWQpOworICAgICAgICAgIH0KKyAgICAgICAgICBl bHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdOb3RDb25uZWN0ZWQnKSB7 CisgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAg J0RhdGEgR3JpZCBQb2xsIFJlc3VsdCBFcnJvcicsCisgICAgICAgICAgICAg IHJlcy5kYXRhLnJlc3VsdAorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9 CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Cisg ICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAnRGVidWdn ZXIgbGlzdGVuZXIgc3RhcnRpbmcgZXJyb3InCisgICAgICAgICAgKTsKKyAg ICAgICAgfQorICAgICAgfSk7CisKKyAgICB9LAorCisgICAgLy8gQ2FsbGJh Y2sgZnVuY3Rpb24gd2hlbiB1c2VyIGNsaWNrIG9uIGd1dHRlcnMgb2YgY29k ZW1pcnJvciB0byBzZXQvY2xlYXIgdGhlIGJyZWFrcG9pbnQKKyAgICBvbkJy ZWFrUG9pbnQ6IGZ1bmN0aW9uKGNtLCBtKSB7CisgICAgICB2YXIgc2VsZiA9 IHRoaXM7CisKKyAgICAgIC8vIFRPRE86OgorICAgICAgLy8gV2UgbWF5IHdh bnQgdG8gY2hlY2ssIGlmIGJyZWFrLXBvaW50IGlzIGFsbG93ZWQgYXQgdGhp cyBtb21lbnQgb3Igbm90CisgICAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZv KG0pOworCisgICAgICAvLyBJZiBndXR0ZXJNYXJrZXIgaXMgdW5kZWZpbmVk IHRoYXQgbWVhbnMgdGhlcmUgaXMgbm8gbWFya2VyIGRlZmluZWQgcHJldmlv dXNseQorICAgICAgLy8gU28gd2UgbmVlZCB0byBzZXQgdGhlIGJyZWFrcG9p bnQgY29tbWFuZCBoZXJlLi4uCisgICAgICBpZiAoaW5mby5ndXR0ZXJNYXJr ZXJzID09IHVuZGVmaW5lZCkgeworICAgICAgICBjb250cm9sbGVyLnNldF9i cmVha3BvaW50KHNlbGYudHJhbnNfaWQsbSsxLDEpOyAvL3NldCB0aGUgYnJl YWtwb2ludAorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGNvbnRy b2xsZXIuc2V0X2JyZWFrcG9pbnQoc2VsZi50cmFuc19pZCxtKzEsMCk7IC8v Y2xlYXIgdGhlIGJyZWFrcG9pbnQKKyAgICAgIH0KKworICAgICAgY20uc2V0 R3V0dGVyTWFya2VyKAorICAgICAgICBtLCAiYnJlYWtwb2ludHMiLCBpbmZv Lmd1dHRlck1hcmtlcnMgPyBudWxsIDogZnVuY3Rpb24oKSB7CisgICAgICAg ICAgdmFyIG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp OworCisgICAgICAgICAgbWFya2VyLnN0eWxlLmNvbG9yID0gIiM4MjIiOwor ICAgICAgICAgIG1hcmtlci5pbm5lckhUTUwgPSAi4pePIjsKKworICAgICAg ICAgIHJldHVybiBtYXJrZXI7CisgICAgICAgIH0oKSk7CisgICAgfSwKKwor ICAgIC8vIENyZWF0ZSB0aGUgZGVidWdnZXIgbGF5b3V0IHdpdGggc3BsaXR0 ZXIgYW5kIGRpc3BsYXkgdGhlIGFwcHJvcHJpYXRlIGRhdGEgcmVjZWl2ZWQg ZnJvbSBzZXJ2ZXIuCisgICAgaW50aWFsaXplUGFuZWxzOiBmdW5jdGlvbigp IHsKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgIHRoaXMucmVnaXN0 ZXJQYW5lbCgKKyAgICAgICAgJ2NvZGUnLCBmYWxzZSwgJzEwMCUnLCAnMTAw JScsCisgICAgICAgIGZ1bmN0aW9uKHBhbmVsKSB7CisgICAgICAgICAgICB2 YXIgY29udGFpbmVyID0gcGFuZWwubGF5b3V0KCkuc2NlbmUoKS5maW5kKCcu cGctZGVidWdnZXItcGFuZWwnKTsKKworICAgICAgICAgICAgLy8gQ3JlYXRl IHRoZSB3Y1NwbGl0dGVyIHVzZWQgYnkgd2NEb2NrZXIgdG8gc3BsaXQgdGhl IHNpbmdsZSBwYW5lbC4KKyAgICAgICAgICAgIHZhciBoU3BsaXR0ZXIgPSBu ZXcgd2NTcGxpdHRlcigKKyAgICAgICAgICAgICAgICBjb250YWluZXIsIHBh bmVsLAorICAgICAgICAgICAgICAgIHdjRG9ja2VyLk9SSUVOVEFUSU9OLlZF UlRJQ0FMCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgaFNw bGl0dGVyLnNjcm9sbGFibGUoMCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAg ICAgIGhTcGxpdHRlci5zY3JvbGxhYmxlKDEsIHRydWUsIHRydWUpOworCisg ICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoaXMgc3BsaXR0ZXIgd2l0aCBh IGxheW91dCBpbiBlYWNoIHBhbmUuCisgICAgICAgICAgICBoU3BsaXR0ZXIu aW5pdExheW91dHMod2NEb2NrZXIuTEFZT1VULlNJTVBMRSwgd2NEb2NrZXIu TEFZT1VULlNJTVBMRSk7CisKKyAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQs IHRoZSBzcGxpdHRlciBzcGxpdHMgZG93biB0aGUgbWlkZGxlLCB3ZSBzcGxp dCB0aGUgbWFpbiBwYW5lbCBieSA4MCUuCisgICAgICAgICAgICBoU3BsaXR0 ZXIucG9zKDAuNjUpOworCisgICAgICAgICAgICB2YXIgJHBhcmFtcyA9ICQo JzxkaXYgY2xhc3M9ImZ1bGwtY29udGFpbmVyIHBhcmFtcyI+PC9kaXY+Jyk7 CisgICAgICAgICAgICBoU3BsaXR0ZXIucmlnaHQoKS5hZGRJdGVtKCRwYXJh bXMpOworCisgICAgICAgICAgICAvLyBBZGQgTG9jYWwgcGFyYW1ldGVycyB0 YWIgdG8gZGlzcGxheSBmdW5jdGlvbiBhcmd1bWVudHMgdmFsdWUKKyAgICAg ICAgICAgIHZhciBwYXJhbXNUYWJGcmFtZSA9IHNlbGYucGFyYW1zVGFiRnJh bWUgPSBuZXcgd2NUYWJGcmFtZSgkcGFyYW1zLCBwYW5lbCk7CisgICAgICAg ICAgICB2YXIgcGFyYW1zVGFiID0gc2VsZi5wYXJhbXNUYWIgPSBwYXJhbXNU YWJGcmFtZS5hZGRUYWIoCisgICAgICAgICAgICAgICd7e18oJ1BhcmFtZXRl cnMnKX19JywgLTEsIHdjRG9ja2VyLkxBWU9VVC5TSU1QTEUKKyAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgIHBhcmFtc1RhYi5hZGRJdGVtKCQoJzxk aXYgaWQ9cGFyYW1ldGVycyBjbGFzcz0iaW5mbyI+PC9kaXY+JykpOworCisg ICAgICAgICAgICAvLyBBZGQgTG9jYWwgdmFyaWFibGVzIHRhYgorICAgICAg ICAgICAgdmFyIGxvY2FsVmFycyA9IHNlbGYubG9jYWxWYXJzID0gcGFyYW1z VGFiRnJhbWUuYWRkVGFiKAorICAgICAgICAgICAgICAne3sgXygnTG9jYWwg dmFyaWFibGVzJykgfX0nLCAtMSwgd2NEb2NrZXIuTEFZT1VULlNJTVBMRQor ICAgICAgICAgICAgICApOworICAgICAgICAgICAgbG9jYWxWYXJzLmFkZEl0 ZW0oJCgnPGRpdiBpZD1sb2NhbF92YXJpYWJsZXMgY2xhc3M9ImluZm8iPjwv ZGl2PicpKTsKKworICAgICAgICAgICAgLy8gQWRkIERCTVMgbWVzc2FnZXMg dGFiCisgICAgICAgICAgICB2YXIgZGJtc01lc3NhZ2VzID0gc2VsZi5kYm1z TWVzc2FnZXMgPSBwYXJhbXNUYWJGcmFtZS5hZGRUYWIoCisgICAgICAgICAg ICAgICd7eyBfKCdNZXNzYWdlcycpIH19JywgLTEsIHdjRG9ja2VyLkxBWU9V VC5TSU1QTEUKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGRibXNN ZXNzYWdlcy5hZGRJdGVtKCQoJzxkaXYgaWQ9ZGJtc19tZXNzYWdlcyBjbGFz cz0iaW5mbyI+PC9kaXY+JykpOworCisgICAgICAgICAgICAvLyBBZGQgZnVu Y3Rpb24gcmV0dXJuIHJlc3VsdHMgdGFiCisgICAgICAgICAgICB2YXIgcmV0 UmVzdWx0cyA9IHNlbGYucmV0UmVzdWx0cyA9IHBhcmFtc1RhYkZyYW1lLmFk ZFRhYigKKyAgICAgICAgICAgICAgJ3t7IF8oJ1Jlc3VsdHMnKSB9fScsIC0x LCB3Y0RvY2tlci5MQVlPVVQuU0lNUExFCisgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICByZXRSZXN1bHRzLmFkZEl0ZW0oJCgnPGRpdiBpZD1yZXRf cmVzdWx0cyBjbGFzcz0iaW5mbyI+PC9kaXY+JykpOworCisgICAgICAgICAg ICAvLyBOb3cgY3JlYXRlIGEgc2Vjb25kIHNwbGl0dGVyIHRvIGdvIGluc2lk ZSB0aGUgZXhpc3Rpbmcgb25lLgorICAgICAgICAgICAgdmFyICR0b3BDb250 YWluZXIgPSAkKCc8ZGl2IGNsYXNzPSJkZWJ1Z2dlciB0b3AtY29udGFpbmVy Ij48L2Rpdj4nKTsKKyAgICAgICAgICAgIGhTcGxpdHRlci5sZWZ0KCkuYWRk SXRlbSgkdG9wQ29udGFpbmVyKTsKKworICAgICAgICAgICAgLy8gQ3JlYXRl IHRoZSB3Y1NwbGl0dGVyIHVzZWQgYnkgd2NEb2NrZXIgdG8gc3BsaXQgdGhl IHNpbmdsZSBwYW5lbC4KKyAgICAgICAgICAgIHZhciB2U3BsaXR0ZXIgPSBu ZXcgd2NTcGxpdHRlcigKKyAgICAgICAgICAgICAgICAkdG9wQ29udGFpbmVy LCBwYW5lbCwKKyAgICAgICAgICAgICAgICB3Y0RvY2tlci5PUklFTlRBVElP Ti5IT1JJWk9OVEFMCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAg ICAgLy8gSW5pdGlhbGl6ZSB0aGlzIHNwbGl0dGVyIHdpdGggYSBsYXlvdXQg aW4gZWFjaCBwYW5lLgorICAgICAgICAgICAgdlNwbGl0dGVyLmluaXRMYXlv dXRzKHdjRG9ja2VyLkxBWU9VVC5TSU1QTEUsIHdjRG9ja2VyLkxBWU9VVC5T SU1QTEUpOworCisgICAgICAgICAgICAvLyBOb3cgY3JlYXRlIGEgdGFiIHdp ZGdldCBhbmQgcHV0IHRoYXQgaW50byBvbmUgb2YgdGhlIHN1YiBzcGxpdHMu CisgICAgICAgICAgICB2YXIgJHN0YWNrID0gJCgnPGRpdiBjbGFzcz0iZnVs bC1jb250YWluZXIgc3RhY2siPicpOworICAgICAgICAgICAgdlNwbGl0dGVy LmJvdHRvbSgpLmFkZEl0ZW0oJHN0YWNrKTsKKworICAgICAgICAgICAgdmFy IHN0YWNrRnJhbWUgPSBuZXcgd2NUYWJGcmFtZSgkc3RhY2ssIHBhbmVsKTsK KyAgICAgICAgICAgIHZhciBzdGFja1RhYiA9IHNlbGYuc3RhY2tUYWIgPSBz dGFja0ZyYW1lLmFkZFRhYigKKyAgICAgICAgICAgICAgICAne3sgXygnU3Rh Y2sgcGFuZScpIH19JywgLTEsIHdjRG9ja2VyLkxBWU9VVC5TSU1QTEUKKyAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgc3RhY2tUYWIuYWRkSXRl bSgKKyAgICAgICAgICAgICAgICAkKCc8ZGl2IGlkPSJzdGFja19wYW5lIiBj bGFzcz0iZnVsbC1jb250YWluZXItcGFuZSBpbmZvIj48L2Rpdj4nKSk7CisK KyAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBzcGxpdHRlciBzcGxp dHMgZG93biB0aGUgbWlkZGxlLCB3ZSBzcGxpdCB0aGUgbWFpbiBwYW5lbCBi eSA4MCUuCisgICAgICAgICAgICB2U3BsaXR0ZXIucG9zKDAuNzUpOworCisg ICAgICAgICAgICAvLyBOb3cgY3JlYXRlIGEgdGFiIHdpZGdldCBhbmQgcHV0 IHRoYXQgaW50byBvbmUgb2YgdGhlIHN1YiBzcGxpdHMuCisgICAgICAgICAg ICB2YXIgZWRpdG9yX3BhbmUgPSAkKCc8ZGl2IGlkPSJzdGFja19wYW5lIiBj bGFzcz0iZnVsbC1jb250YWluZXItcGFuZSBpbmZvIj48L2Rpdj4nKTsKKyAg ICAgICAgICAgIHZhciBjb2RlX2VkaXRvcl9hcmVhID0gJCgnPHRleHRhcmVh IGlkPSJkZWJ1Z2dlci1lZGl0b3ItdGV4dGFyZWEiPjwvdGV4dGFyZWE+Jyku YXBwZW5kKGVkaXRvcl9wYW5lKTsKKyAgICAgICAgICAgIHZTcGxpdHRlci50 b3AoKS5hZGRJdGVtKGNvZGVfZWRpdG9yX2FyZWEpOworCisgICAgICAgICAg ICAvLyBUbyBzaG93IHRoZSBsaW5lLW51bWJlciBhbmQgc2V0IGJyZWFrcG9p bnQgbWFya2VyIGRldGFpbHMgYnkgdXNlci4KKyAgICAgICAgICAgIHZhciBl ZGl0b3IgPSBzZWxmLmVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVh KAorICAgICAgICAgICAgICAgIGNvZGVfZWRpdG9yX2FyZWEuZ2V0KDApLCB7 CisgICAgICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCisgICAgICAg ICAgICAgICAgZ3V0dGVyczogWyJub3RlLWd1dHRlciIsICJDb2RlTWlycm9y LWxpbmVudW1iZXJzIiwgImJyZWFrcG9pbnRzIl0sCisgICAgICAgICAgICAg ICAgbW9kZTogInRleHQveC1zcWwiLAorICAgICAgICAgICAgICAgIHJlYWRP bmx5OiB0cnVlCisgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKwor ICAgICAgICAvLyBPbiBsb2FkaW5nIHRoZSBkb2NrZXIsIHJlZ2lzdGVyIHRo ZSBjYWxsYmFja3MKKyAgICAgICAgdmFyIG9uTG9hZCA9IGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgc2VsZi5kb2NrZXIuZmluaXNoTG9hZGluZygxMDAp OworICAgICAgICAgICAgc2VsZi5kb2NrZXIub2ZmKHdjRG9ja2VyLkVWRU5U LkxPQURFRCk7CisgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgY2FsbGJh Y2sgd2hlbiB1c2VyIHNldC9jbGVhciB0aGUgYnJlYWtwb2ludCBvbiBndXR0 ZXIgYXJlYS4KKyAgICAgICAgICAgIHNlbGYuZWRpdG9yLm9uKCJndXR0ZXJD bGljayIsIHNlbGYub25CcmVha1BvaW50LmJpbmQoc2VsZiksIHNlbGYpOwor ICAgICAgICB9OworCisgICAgICAgIHNlbGYuZG9ja2VyLnN0YXJ0TG9hZGlu Zygne3sgXygnTG9hZGluZy4uLicpIH19Jyk7CisgICAgICAgIHNlbGYuZG9j a2VyLm9uKHdjRG9ja2VyLkVWRU5ULkxPQURFRCwgb25Mb2FkKTsKKworICAg ICAgICBzZWxmLm1haW5fcGFuZWwgPSBzZWxmLmRvY2tlci5hZGRQYW5lbCgK KyAgICAgICAgICAnY29kZScsIHdjRG9ja2VyLkRPQ0suVE9QLCBudWxsLCB7 aDogJzEwMCUnLCB3OiAnMTAwJSd9CisgICAgICAgICAgKTsKKworICAgICAg ICAvLyBDcmVhdGUgdGhlIHRvb2xiYXIgdmlldyBmb3IgZGVidWdnaW5nIHRo ZSBmdW5jdGlvbgorICAgICAgICB0aGlzLnRvb2xiYXJWaWV3ID0gbmV3IERl YnVnZ2VyVG9vbGJhclZpZXcoKTsKKyAgICB9LAorCisgICAgLy8gUmVnaXN0 ZXIgdGhlIHBhbmVsIHdpdGggbmV3IGRlYnVnZ2VyIGRvY2tlciBpbnN0YW5j ZS4KKyAgICByZWdpc3RlclBhbmVsOiBmdW5jdGlvbihuYW1lLCB0aXRsZSwg d2lkdGgsIGhlaWdodCwgb25Jbml0KSB7CisgICAgICB2YXIgc2VsZiA9IHRo aXM7CisKKyAgICAgIHRoaXMuZG9ja2VyLnJlZ2lzdGVyUGFuZWxUeXBlKG5h bWUsIHsKKyAgICAgICAgdGl0bGU6IHRpdGxlLAorICAgICAgICBpc1ByaXZh dGU6IHRydWUsCisgICAgICAgIG9uQ3JlYXRlOiBmdW5jdGlvbihwYW5lbCkg eworICAgICAgICAgIHNlbGYucGFuZWxzW25hbWVdID0gcGFuZWw7CisgICAg ICAgICAgcGFuZWwuaW5pdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAg ICAgaWYgKCF0aXRsZSkKKyAgICAgICAgICAgIHBhbmVsLnRpdGxlKGZhbHNl KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwYW5lbC50aXRsZSh0 aXRsZSk7CisgICAgICAgICAgcGFuZWwuY2xvc2VhYmxlKGZhbHNlKTsKKyAg ICAgICAgICBwYW5lbC5sYXlvdXQoKS5hZGRJdGVtKAorICAgICAgICAgICAg JCgnPGRpdj4nLCB7J2NsYXNzJzogJ3BnLWRlYnVnZ2VyLXBhbmVsJ30pCisg ICAgICAgICAgKTsKKyAgICAgICAgICBpZiAob25Jbml0KSB7CisgICAgICAg ICAgICBvbkluaXQuYXBwbHkoc2VsZiwgW3BhbmVsXSk7CisgICAgICAgICAg fQorICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0pOworCisgIHBn VG9vbHMuRGlyZWN0RGVidWcgPSBuZXcgRGlyZWN0RGVidWcoKTsKKworICBy ZXR1cm4gcGdUb29scy5EaXJlY3REZWJ1ZzsKK30pOwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvZXhlY3V0ZV9lZGJz cGwuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC9leGVjdXRlX2VkYnNwbC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDRjMDk1MwotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvZXhlY3V0ZV9lZGJzcGwuc3FsCkBAIC0wLDAgKzEsMTE1 IEBACit7IyMjIENyZWF0ZSBleGVjdXRlciBmdW5jdGlvbiBmb3IgZWRiIHNw bCBmdW5jdGlvbiBkZWJ1Z2dpbmcgIyMjfQoreyUgc2V0IGluc2lkZV9sb29w ID0geyd2YWx1ZSc6IEZhbHNlfSAlfQorCit7JSBpZiBsYW5fbmFtZSA9PSAn ZWRic3BsJyAlfQoreyUgc2V0IHVzZUFub255bW91c0Jsb2NrID0gInRydWUi ICV9Cit7JSBpZiBub3QgaXNfZnVuYyAlfQorICAgIHslIHNldCBzdHJfc3Rh dGVtZW50ID0gIlx0RVhFQyAiIH4gZnVuY19uYW1lICV9Cit7JSBlbGlmIHJl dF90eXBlID09ICd2b2lkJyAlfQorICAgIHslIHNldCBzdHJfc3RhdGVtZW50 ID0gIlx0UEVSRk9STSAiIH4gZnVuY19uYW1lICV9Cit7JSBlbHNlICV9Cisg ICAgeyUgc2V0IHJlc3VsdFZhciA9ICJ2X3JldFZhbCIgJX0KKyAgICB7JSBz ZXQgc3RyX3N0YXRlbWVudCA9ICJcdCIgfiByZXN1bHRWYXIgfiAiIDo9ICIg fiBmdW5jX25hbWUgJX0KKyAgICB7JSBzZXQgc3RyX2RlY2xhcmUgPSBzdHJf ZGVjbGFyZSB+ICJcdCIgfiByZXN1bHRWYXIgfiAiICIgfiByZXRfdHlwZSB+ ICI7XG4iICV9CisgICAgeyUgc2V0IHN0cl9yZXN1bHQgPSAiXHREQk1TX09V VFBVVC5QVVRfTElORShFJ1xcblxcblJlc3VsdDpcXG4tLS0tLS0tLVxcbicg fHwgIiB+IHJlc3VsdFZhciB+ICI6OnRleHQgfHwgRSdcXG5cXG5OT1RFOiBU aGlzIGlzIHRoZSByZXN1bHQgZ2VuZXJhdGVkIGR1cmluZyB0aGUgZnVuY3Rp b24gZXhlY3V0aW9uIGJ5IHRoZSBkZWJ1Z2dlci5cXG4nKTtcbiIgJX0KK3sl IGVuZGlmICV9CisKK3slIGVsc2UgJX0KK3slIGlmIHJldF90eXBlID09ICdy ZWNvcmQnICV9CisgICAgeyUgc2V0IHN0cl9zdGF0ZW1lbnQgPSAiXHRTRUxF Q1QgIiB+IGZ1bmNfbmFtZSAlfQoreyUgZWxzZSAlfQorICAgIHslIHNldCBz dHJfc3RhdGVtZW50ID0gIlx0U0VMRUNUICogRlJPTSAiIH4gZnVuY19uYW1l ICV9Cit7JSBlbmRpZiAlfQorCit7JSBlbmRpZiAlfQorCisKK3slIHNldCBm aXJzdFByb2NlZXNlZCA9ICJmYWxzZSIgJX0KK3slIHNldCBpbnB1dF92YWx1 ZV9pbmRleCA9IDAgJX0KKworeyUgaWYgYXJnX3R5cGV8bGVuZ3RoID4gMCAl fQoreyUgc2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4gIigi ICV9CisKK3slIGZvciBhcmdfbW9kZSBpbiBhcmdzX21vZGUgJX0KKy4uLi4g QVJHX01PREU6IC4uLi4ge3sgYXJnX21vZGUgfX0uLi4gSW5kZXguLi4uIHt7 IGxvb3AuaW5kZXggfX0uLi4uCit7JSBpZiB1c2VBbm9ueW1vdXNCbG9jayA9 PSAidHJ1ZSIgYW5kIChhcmdfbW9kZSA9PSAnbycgb3IgYXJnX21vZGUgPT0g J2InKSAlfQoreyUgc2V0IHN0clBhcmFtID0gInBfcGFyYW0iIH4gKGxvb3Au aW5kZXggLSAxKSAlfQoreyUgc2V0IHN0cl9kZWNsYXJlID0gc3RyX2RlY2xh cmUgfiAiXHQiIH4gc3RyUGFyYW0gfiAiICIgfiBhcmdfdHlwZVtsb29wLmlu ZGV4IC0gMV0gJX0KK3slIGlmIGFyZ19tb2RlID09ICdiJyAlfQoreyMjIyBU T0RPOiB0byBjaGVjayBmb3IgTnVsbCBwYXJhbWV0ZXJzIHJlY2VpdmVkIGZy b20gY2xpZW50ICMjI30KK3slIHNldCBzdHJfZGVjbGFyZSA9IHN0cl9kZWNs YXJlIH4gIiA6PSAiIH4gc3RyUGFyYW0gfiAiICIgfiBkYXRhW2lucHV0X3Zh bHVlX2luZGV4XVsndmFsdWUnXSB+ICI6OiIgfiBkYXRhW2lucHV0X3ZhbHVl X2luZGV4XVsndHlwZSddICV9Cit7JSBzZXQgaW5wdXRfdmFsdWVfaW5kZXgg PSBpbnB1dF92YWx1ZV9pbmRleCArIDEgJX0KK3slIGVuZGlmICV9Cit7JSBz ZXQgc3RyX2RlY2xhcmUgPSBzdHJfZGVjbGFyZSB+ICI7XG4iICV9CisKK3sl IGlmIGZpcnN0UHJvY2Vlc2VkID09ICJ0cnVlIiAlfQoreyUgc2V0IHN0cl9z dGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4gIiwgIiAlfQoreyUgZW5kaWYg JX0KK3slIHNldCBmaXJzdFByb2NlZXNlZCA9ICJ0cnVlIiAlfQoreyUgc2V0 IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4gc3RyUGFyYW0gJX0K KworCisKKworCit7JSBlbGlmIGFyZ19tb2RlICE9ICdvJyAlfQoreyUgaWYg Zmlyc3RQcm9jZWVzZWQgPT0gInRydWUiICV9Cit7JSBzZXQgc3RyX3N0YXRl bWVudCA9IHN0cl9zdGF0ZW1lbnQgfiAiLCAiICV9Cit7JSBlbmRpZiAlfQor eyUgc2V0IGZpcnN0UHJvY2Vlc2VkID0gInRydWUiICV9CisKK3slIGlmIGFy Z19tb2RlID09ICd2JyAlfQoreyUgc2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJf c3RhdGVtZW50IH4gIlZBUklBRElDICIgJX0KK3slIGVuZGlmICV9CisKK3sj IyMgVE9ETzogdG8gY2hlY2sgZm9yIE51bGwgcGFyYW1ldGVycyByZWNlaXZl ZCBmcm9tIGNsaWVudCAjIyN9CisKK3slIHNldCBzdHJfc3RhdGVtZW50ID0g c3RyX3N0YXRlbWVudCB+IGRhdGFbaW5wdXRfdmFsdWVfaW5kZXhdWyd2YWx1 ZSddIH4gIjo6IiB+IGRhdGFbaW5wdXRfdmFsdWVfaW5kZXhdWyd0eXBlJ10g JX0KK3slIHNldCBpbnB1dF92YWx1ZV9pbmRleCA9IGlucHV0X3ZhbHVlX2lu ZGV4ICsgMSAlfQorCisKK3slIGVuZGlmICV9CisKK3slIGlmIGxvb3AubGFz dCAlfQoreyUgc2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4g IikiICV9Cit7JSBzZXQgc3RyUXVlcnkgPSBzdHJfc3RhdGVtZW50ICV9Cit7 JSBpZiB1c2VBbm9ueW1vdXNCbG9jayA9PSAidHJ1ZSIgJX0KK3slIHNldCBz dHJRdWVyeSA9ICJERUNMQVJFXG4iIH4gc3RyX2RlY2xhcmUgfiAiQkVHSU5c biIgfiBzdHJfc3RhdGVtZW50IH4gIjtcbiIgfiBzdHJfcmVzdWx0IH4gIkVO RDsiICV9Cit7JSBlbmRpZiAlfQorCit7eyBzdHJRdWVyeSB9fQoreyUgaWYg aW5zaWRlX2xvb3AudXBkYXRlKHsndmFsdWUnOiBUcnVlfSkgJX0geyUgZW5k aWYgJX0KK3slIGVuZGlmICV9CisKK3slIGVuZGZvciAlfQorCisKKworCisK KworCisKKworCisKKworeyUgZWxpZiBub3QgaXNfZnVuYyBhbmQgbGFuX25h bWUgPT0gJ2VkYnNwbCcgJX0KK3slIHNldCBzdHJRdWVyeSA9IHN0cl9zdGF0 ZW1lbnQgJX0KK3slIGlmIHVzZUFub255bW91c0Jsb2NrID09ICJ0cnVlIiAl fQoreyUgc2V0IHN0clF1ZXJ5ID0gIkRFQ0xBUkVcbiIgfiBzdHJfZGVjbGFy ZSB+ICJCRUdJTlxuIiB+IHN0cl9zdGF0ZW1lbnQgfiAiO1xuIiB+IHN0cl9y ZXN1bHQgfiAiRU5EOyIgJX0KK3slIGVuZGlmICV9Cit7JSBlbHNlICV9Cit7 JSBzZXQgc3RyUXVlcnkgPSBzdHJfc3RhdGVtZW50IH4gIigpIiAlfQoreyUg aWYgdXNlQW5vbnltb3VzQmxvY2sgPT0gInRydWUiICV9Cit7JSBzZXQgc3Ry UXVlcnkgPSAiREVDTEFSRVxuIiB+IHN0cl9kZWNsYXJlIH4gIkJFR0lOXG4i IH4gc3RyX3N0YXRlbWVudCB+ICI7XG4iIH4gc3RyX3Jlc3VsdCB+ICJFTkQ7 IiAlfQoreyUgZW5kaWYgJX0KK3slIGVuZGlmICV9CisKKworCisKK3sjIyMg UmV0dXJuIGZpbmFsIHF1ZXJ5IGZvcm1lZCB3aXRoIGFib3ZlIGNvbmRpdGlv biAjIyN9Cit7JSBpZiBub3QgaW5zaWRlX2xvb3AudmFsdWUgJX0KK3t7IHN0 clF1ZXJ5IH19Cit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvZXhlY3V0ZV9wbHBnc3FsLnNxbCBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvZXhlY3V0ZV9wbHBnc3FsLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwLi5mNDIwMWMzCi0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC9leGVjdXRlX3BscGdzcWwuc3FsCkBAIC0wLDAgKzEsMjAgQEAKK3sj IyMgQ3JlYXRlIGV4ZWN1dGVyIGZ1bmN0aW9uIGZvciBwbHBnc3FsIGZ1bmN0 aW9uIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBpc19mdW5jID09ICdGYWxzZScg JX0KKyAgICBFWEVDIHt7IGZ1bmNfbmFtZSB9fSAoCit7JSBlbGlmIHJldF90 eXBlID09ICdyZWNvcmQnICV9CisgICAgU0VMRUNUIHt7IGZ1bmNfbmFtZSB9 fSAoCit7JSBlbHNlICV9CisgICAgU0VMRUNUICogRlJPTSB7eyBmdW5jX25h bWUgfX0gKAoreyUgZW5kaWYgJX0KK3slIGlmIGRhdGEgJX0KK3slIGZvciBk aWN0X2l0ZW0gaW4gZGF0YSAlfQoreyUgaWYgJ3R5cGUnIGluIGRpY3RfaXRl bSBhbmQgJ3ZhbHVlJyBpbiBkaWN0X2l0ZW0gJX0KK3slIGlmIGRpY3RfaXRl bVsndHlwZSddID09ICd0ZXh0JyAlfQore3sgZGljdF9pdGVtWyd2YWx1ZSdd fHF0TGl0ZXJhbCB9fTo6e3sgZGljdF9pdGVtWyd0eXBlJ10gfX17JSBpZiBu b3QgbG9vcC5sYXN0ICV9LCB7JSBlbmRpZiAlfQoreyUgZWxzZSAlfQoreyUg aWYgJ1tdJyBpbiBkaWN0X2l0ZW1bJ3R5cGUnXSAlfSBBUlJBWXt7IGRpY3Rf aXRlbVsndmFsdWUnXSB9fTo6e3sgZGljdF9pdGVtWyd0eXBlJ10gfX0geyUg ZWxzZSAlfSB7eyBkaWN0X2l0ZW1bJ3ZhbHVlJ10gfX06Ont7IGRpY3RfaXRl bVsndHlwZSddIH19IHslIGVuZGlmICV9IHslIGlmIG5vdCBsb29wLmxhc3Qg JX0sIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KK3sl IGVuZGZvciAlfQoreyUgZW5kaWYgJX0KKykKXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL2dldF9mdW5jdGlvbl9kZWJ1 Z19pbmZvLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBs YXRlcy9kZWJ1Z2dlci9zcWwvZ2V0X2Z1bmN0aW9uX2RlYnVnX2luZm8uc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwZTQ3ZTUK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL2dldF9mdW5jdGlvbl9kZWJ1Z19p bmZvLnNxbApAQCAtMCwwICsxLDY2IEBACit7IyMjIFRvIGZldGNoIGRlYnVn IGZ1bmN0aW9uIGluZm9ybWF0aW9uICMjI30KK1NFTEVDVAorICAgIHAucHJv bmFtZSBBUyBuYW1lLCBwLnByb3NyYywgbC5sYW5uYW1lLCBwLnByb3JldHNl dCwgcC5wcm9yZXR0eXBlLCB5LnR5cG5hbWUgQVMgcmV0dHlwZSwKKyAgICBD QVNFIFdIRU4gcHJvYWxsYXJndHlwZXMgSVMgTk9UIE5VTEwgVEhFTgorICAg ICAgICAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoQVJSQVkoCisg ICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIHBn X2NhdGFsb2cuZm9ybWF0X3R5cGUocC5wcm9hbGxhcmd0eXBlc1tzLmldLCBO VUxMKQorICAgICAgICAgICAgICAgIEZST00KKyAgICAgICAgICAgICAgICAg ICAgcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5h cnJheV91cHBlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHAucHJvYWxs YXJndHlwZXMsIDEpKSBBUyBzKGkpKSwgJywnKQorICAgICAgICBFTFNFCisg ICAgICAgICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJBWSgK KyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAgICAg cGdfY2F0YWxvZy5mb3JtYXRfdHlwZShwLnByb2FyZ3R5cGVzW3MuaV0sIE5V TEwpCisgICAgICAgICAgICAgICAgRlJPTQorICAgICAgICAgICAgICAgICAg ICBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBwZ19jYXRhbG9nLmFy cmF5X3VwcGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgcC5wcm9hcmd0 eXBlcywgMSkpIEFTIHMoaSkpLCAnLCcpCisgICAgICAgIEVORCBBUyBwcm9h cmd0eXBlbmFtZXMsCisgICAgQ0FTRSBXSEVOIHByb2FsbGFyZ3R5cGVzIElT IE5PVCBOVUxMIFRIRU4KKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJyYXlf dG9fc3RyaW5nKEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVCBwcm9h bGxhcmd0eXBlc1tzLmldIEZST00KKyAgICAgICAgICAgICAgICAgICAgcGdf Y2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91 cHBlcihwcm9hbGxhcmd0eXBlcywgMSkpIHMoaSkpLCAnLCcpCisgICAgICAg IEVMU0UKKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJyYXlfdG9fc3RyaW5n KEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVCBwcm9hcmd0eXBlc1tz LmldIEZST00KKyAgICAgICAgICAgICAgICAgICAgcGdfY2F0YWxvZy5nZW5l cmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcihwcm9hcmd0 eXBlcywgMSkpIHMoaSkpLCAnLCcpCisgICAgICAgIEVORCBBUyBwcm9hcmd0 eXBlcywKKyAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhwLnByb2Fy Z25hbWVzLCAnLCcpIEFTIHByb2FyZ25hbWVzLAorICAgIHBnX2NhdGFsb2cu YXJyYXlfdG9fc3RyaW5nKHByb2FyZ21vZGVzLCAnLCcpIEFTIHByb2FyZ21v ZGVzLAorCisgICAgeyUgaWYgaXNfcHBhc19kYXRhYmFzZSAlfQorICAgICAg ICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIG4ub2lkIEVMU0Ug MCBFTkQgQVMgcGtnLAorICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQg PD4gMCBUSEVOIG4ubnNwbmFtZSBFTFNFICcnIEVORCBBUyBwa2duYW1lLAor ICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIChTRUxF Q1Qgb2lkIEZST00gcGdfcHJvYyBXSEVSRSBwcm9uYW1lc3BhY2U9bi5vaWQg QU5EIHByb25hbWU9J2NvbnMnKSBFTFNFIDAgRU5EIEFTIHBrZ2NvbnNvaWQs CisgICAgICAgIENBU0UgV0hFTiBuLm5zcHBhcmVudCA8PiAwIFRIRU4gZy5v aWQgRUxTRSBuLm9pZCBFTkQgQVMgc2NoZW1hLAorICAgICAgICBDQVNFIFdI RU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIGcubnNwbmFtZSBFTFNFIG4ubnNw bmFtZSBFTkQgQVMgc2NoZW1hbmFtZSwKKyAgICAgICAgTk9UIChsLmxhbm5h bWUgPSAnZWRic3BsJyBBTkQgcHJvdHlwZSA9ICcxJykgQVMgaXNmdW5jLAor ICAgIHslZWxzZSV9CisgICAgICAgIDAgQVMgcGtnLAorICAgICAgICAnJyBB UyBwa2duYW1lLAorICAgICAgICAwIEFTIHBrZ2NvbnNvaWQsCisgICAgICAg IG4ub2lkICAgICBBUyBzY2hlbWEsCisgICAgICAgIG4ubnNwbmFtZSBBUyBz Y2hlbWFuYW1lLAorICAgICAgICB0cnVlIEFTIGlzZnVuYywKKyAgICB7JWVu ZGlmJX0KKyAgICBwZ19jYXRhbG9nLnBnX2dldF9mdW5jdGlvbl9pZGVudGl0 eV9hcmd1bWVudHMocC5vaWQpIEFTIHNpZ25hdHVyZSwKKworICAgIHslIGlm IGhhc0ZlYXR1cmVGdW5jdGlvbkRlZmF1bHRzICV9CisgICAgICAgIHBnX2Nh dGFsb2cucGdfZ2V0X2V4cHIocC5wcm9hcmdkZWZhdWx0cywgJ3BnX2NhdGFs b2cucGdfY2xhc3MnOjpyZWdjbGFzcywgZmFsc2UpIEFTIHByb2FyZ2RlZmF1 bHRzLAorICAgICAgICBwLnByb25hcmdkZWZhdWx0cworICAgIHslZWxzZSV9 CisgICAgICAgICcnIEFTIHByb2FyZ2RlZmF1bHRzLCAwIEFTIHByb25hcmdk ZWZhdWx0cworICAgIHslZW5kaWYlfQorICAgICAgICBGUk9NCisgICAgICAg ICAgICBwZ19jYXRhbG9nLnBnX3Byb2MgcAorICAgICAgICAgICAgTEVGVCBK T0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gcC5wcm9uYW1lc3Bh Y2UgPSBuLm9pZAorICAgICAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cu cGdfbGFuZ3VhZ2UgbCBPTiBwLnByb2xhbmcgPSBsLm9pZAorICAgICAgICAg ICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfdHlwZSB5IE9OIHAucHJvcmV0 dHlwZSA9IHkub2lkCisKKyAgICB7JSBpZiBpc19wcGFzX2RhdGFiYXNlICV9 CisgICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBn IE9OIG4ubnNwcGFyZW50ID0gZy5vaWQKKyAgICB7JSBlbmRpZiAlfQorCisg ICAgeyUgaWYgZmlkICV9CisgICAgV0hFUkUgcC5vaWQgPSB7e2ZpZH19Ojpp bnQ7CisgICAgeyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90 ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL0JhY2tlbmRfcnVubmluZy5zcWwg Yi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YxL0JhY2tlbmRfcnVubmluZy5zcWwKbmV3IGZpbGUgbW9kZSAx MDA3NTUKaW5kZXggMDAwMDAwMC4uYzU3NzBkMAotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1 Z2dlci9zcWwvdjEvQmFja2VuZF9ydW5uaW5nLnNxbApAQCAtMCwwICsxLDQg QEAKK3sjIyMgQ2hlY2sgYmFja2VuZCB0YXJnZXQgaXMgcnVubmluZyBvciBu b3QgZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBiYWNrZW5kX3BpZCAlfQor ICAgIFNFTEVDVCBDT1VOVCgqKSBGUk9NIChTRUxFQ1QgcGdfY2F0YWxvZy5w Z19zdGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmlkKSBBUyBzIFdIRVJF IHBnX2NhdGFsb2cucGdfc3RhdF9nZXRfYmFja2VuZF9waWQocy5iaWQpID0g e3sgY29ubnxxdElkZW50KGJhY2tlbmRfcGlkKSB9fTo6aW50ZWdlcjsKK3sl IGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92MS9hYm9ydF90YXJnZXQuc3FsIGIvd2ViL3BnYWRtaW4v dG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9hYm9y dF90YXJnZXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAuLjhmODlhZTMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2Fib3J0 X3RhcmdldC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIEFib3J0IHRoZSB0 YXJnZXQgZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9 CisgICAgU0VMRUNUICogRlJPTSBwbGRiZ19hYm9ydF90YXJnZXQoe3tzZXNz aW9uX2lkfX06OmludCkKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVi dWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9hZGRfYnJlYWtwb2lu dF9lZGIuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92MS9hZGRfYnJlYWtwb2ludF9lZGIuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxMjk0NjIKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90 ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2FkZF9icmVha3BvaW50X2VkYi5z cWwKQEAgLTAsMCArMSw0IEBACit7IyMjIEFkZCBFREIgYnJlYWtwb2ludHMg Zm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAg U0VMRUNUICogRlJPTSBwbGRiZ19zZXRfZ2xvYmFsX2JyZWFrcG9pbnQoe3tz ZXNzaW9uX2lkfX06OmludCwge3twYWNrYWdlX29pZH19OjppbnQsIHt7ZnVu Y3Rpb25fb2lkfX06Ok9JRCwgLTEsIHt7dGFyZ2V0X29pZH19OjppbnQpCit7 JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvdjEvYWRkX2JyZWFrcG9pbnRfcGcuc3FsIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92 MS9hZGRfYnJlYWtwb2ludF9wZy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uZjgzZTFjZgotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9z cWwvdjEvYWRkX2JyZWFrcG9pbnRfcGcuc3FsCkBAIC0wLDAgKzEsNCBAQAor eyMjIyBBZGQgUEcgYnJlYWtwb2ludCBmb3IgZGVidWdnaW5nICMjI30KK3sl IGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX3Nl dF9nbG9iYWxfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9fSwge3tmdW5jdGlv bl9vaWR9fSwgLTEsIE5VTEwpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvYXR0YWNoX3Rv X3BvcnQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92MS9hdHRhY2hfdG9fcG9ydC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI3NDQ3NwotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBs YXRlcy9kZWJ1Z2dlci9zcWwvdjEvYXR0YWNoX3RvX3BvcnQuc3FsCkBAIC0w LDAgKzEsNCBAQAoreyMjIyBBdHRhY2ggdGhlIHRhcmdldCB0byBwb3J0IGZv ciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgcG9ydCAlfQorICAgIFNFTEVDVCAq IEZST00gcGxkYmdfYXR0YWNoX3RvX3BvcnQoe3twb3J0fX06OmludCkKK3sl IGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92MS9jbGVhcl9icmVha3BvaW50LnNxbCBiL3dlYi9wZ2Fk bWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEv Y2xlYXJfYnJlYWtwb2ludC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uZWVjYzY3NAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djEvY2xlYXJfYnJlYWtwb2ludC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMj IENsZWFyIGJyZWFrcG9pbnRzIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYg c2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfZHJvcF9i cmVha3BvaW50KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7cG9pZH19OjpPSUQs IHt7Zm9pZH19OjpPSUQsIHt7bGluZV9udW1iZXJ9fTo6aW50KQoreyUgZW5k aWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YxL2NvbnRpbnVlLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rl YnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvY29udGludWUuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MWM1M2UK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2NvbnRpbnVlLnNxbApAQCAt MCwwICsxLDExIEBACit7IyMjIENvbnRpbnVlIGZvciBkZWJ1Z2dpbmcgIyMj fQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVAorICAgICAgICBw LnBrZyBBUyBwa2csIHAuZnVuYyBBUyBmdW5jLCBwLnRhcmdldE5hbWUgQVMg dGFyZ2V0TmFtZSwKKyAgICAgICAgcC5saW5lbnVtYmVyIEFTIGxpbmVudW1i ZXIsIHBsZGJnX2dldF9zb3VyY2Uoe3tzZXNzaW9uX2lkfX06OklOVEVHRVIs IHAucGtnLCBwLmZ1bmMpIEFTIHNyYywKKyAgICAgICAgKFNFTEVDVAorICAg ICAgICAgICAgcy5hcmdzCisgICAgICAgIEZST00gcGxkYmdfZ2V0X3N0YWNr KHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBzCisgICAgICAgIFdIRVJFIHMu ZnVuYyA9IHAuZnVuYyBBTkQgcy5wa2cgPSBwLnBrZykgQVMgYXJncworICAg IEZST00gcGxkYmdfY29udGludWUoe3tzZXNzaW9uX2lkfX06OklOVEVHRVIp IHAKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92MS9jcmVhdGVfbGlzdGVuZXIuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92MS9jcmVhdGVfbGlzdGVuZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1 CmluZGV4IDAwMDAwMDAuLjFkNDc3MzkKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIv c3FsL3YxL2NyZWF0ZV9saXN0ZW5lci5zcWwKQEAgLTAsMCArMSwyIEBACit7 IyMjIENyZWF0ZSBsaXN0ZW5lciBmb3IgZGVidWdnaW5nICMjI30KKyAgICBT RUxFQ1QgKiBmcm9tIHBsZGJnX2NyZWF0ZV9saXN0ZW5lcigpCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YxL2RlYnVnX3BscGdzcWxfZXhlY3V0ZV90YXJnZXQuc3Fs IGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVn Z2VyL3NxbC92MS9kZWJ1Z19wbHBnc3FsX2V4ZWN1dGVfdGFyZ2V0LnNxbApu ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YmUwNzhkCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9kZWJ1Z19wbHBnc3FsX2V4ZWN1 dGVfdGFyZ2V0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgRGVidWcgZXhl Y3V0ZSB0YXJnZXQgZm9yIHBscGdzcWwgZnVuY3Rpb24gIyMjfQoreyUgaWYg ZnVuY3Rpb25fb2lkICV9CisgICAgU0VMRUNUIHBscGdzcWxfb2lkX2RlYnVn KHt7cGFja2dlX29pZH19OjpPSUQsIHt7ZnVuY3Rpb25fb2lkfX06Ok9JRCkK K3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92MS9kZWJ1Z19wbHBnc3FsX2luaXQuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92MS9kZWJ1Z19wbHBnc3FsX2luaXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NzU1CmluZGV4IDAwMDAwMDAuLjE0YWQzYzUKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YxL2RlYnVnX3BscGdzcWxfaW5pdC5zcWwKQEAgLTAsMCArMSw0 IEBACit7IyMjIERlYnVnIEluaXRpYWxpemF0aW9uIGZvciBwbHBnc3FsIGZ1 bmN0aW9uICMjI30KK3slIGlmIHBhY2tnZV9pbml0X29pZCAlfQorICAgIFNF TEVDVCBwbHBnc3FsX29pZF9kZWJ1Zyh7e3BhY2tnZV9vaWR9fTo6T0lELCB7 e3BhY2tnZV9pbml0X29pZH19OjpPSUQpCit7JSBlbmRpZiAlfQpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZGVi dWdfc3BsX2V4ZWN1dGVfdGFyZ2V0LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZGVidWdfc3Bs X2V4ZWN1dGVfdGFyZ2V0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl eCAwMDAwMDAwLi44NGFmYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92 MS9kZWJ1Z19zcGxfZXhlY3V0ZV90YXJnZXQuc3FsCkBAIC0wLDAgKzEsNCBA QAoreyMjIyBEZWJ1ZyBleGVjdXRlIHRhcmdldCBmb3IgRURCIHNwbCBmdW5j dGlvbiAjIyN9Cit7JSBpZiBmdW5jdGlvbl9vaWQgJX0KKyAgICBTRUxFQ1Qg ZWRiX29pZF9kZWJ1Zyh7e3BhY2tnZV9vaWR9fTo6T0lELCB7e2Z1bmN0aW9u X29pZH19OjpPSUQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVn Z2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZGVidWdfc3BsX2luaXQu c3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92MS9kZWJ1Z19zcGxfaW5pdC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE1YjMyNAotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvdjEvZGVidWdfc3BsX2luaXQuc3FsCkBAIC0wLDAgKzEs NCBAQAoreyMjIyBEZWJ1ZyBJbml0aWFsaXphdGlvbiBmb3IgRURCIHNwbCBm dW5jdGlvbiAjIyN9Cit7JSBpZiBwYWNrZ2VfaW5pdF9vaWQgJX0KKyAgICBT RUxFQ1QgZWRiX29pZF9kZWJ1Zyh7e3BhY2tnZV9vaWR9fTo6T0lELCB7e3Bh Y2tnZV9pbml0X29pZH19OjpPSUQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZGVwb3Np dF92YWx1ZS5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YxL2RlcG9zaXRfdmFsdWUuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2ZTlmNGEKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YxL2RlcG9zaXRfdmFsdWUuc3FsCkBAIC0w LDAgKzEsNCBAQAoreyMjIyBDaGFuZ2UgdGhlIHZhcmlhYmxlIHZhbHVlIGFu ZCBzdWJtaXQgZHVyaW5nIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9u X2lkICV9CisgICAgU0VMRUNUICogRlJPTSBwbGRiZ19kZXBvc2l0X3ZhbHVl KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7dmFyX25hbWV8cXRMaXRlcmFsfX0s IHt7bGluZV9udW1iZXJ9fSwge3t2YWx8cXRMaXRlcmFsfX0pCit7JSBlbmRp ZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjEvZ2V0X2JyZWFrcG9pbnRzLnNxbCBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZ2V0X2Jy ZWFrcG9pbnRzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw MDAwLi4xOWRhNWRiCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4v dG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9nZXRf YnJlYWtwb2ludHMuc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMjIyBHZXQgdGhl IGJyZWFrcG9pbnQgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZyAjIyN9Cit7 JSBpZiBzZXNzaW9uX2lkICV9CisgICAgU0VMRUNUICogRlJPTSBwbGRiZ19n ZXRfYnJlYWtwb2ludHMoe3tzZXNzaW9uX2lkfX06OmludCkKK3slIGVuZGlm ICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC92MS9nZXRfZnVuY3Rpb25faW5mby5zcWwgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2dldF9m dW5jdGlvbl9pbmZvLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwLi43OTg5ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9n ZXRfZnVuY3Rpb25faW5mby5zcWwKQEAgLTAsMCArMSw2NiBAQAoreyMjIyBU byBmZXRjaCBkZWJ1ZyBmdW5jdGlvbiBpbmZvcm1hdGlvbiAjIyN9CitTRUxF Q1QKKyAgICBwLnByb25hbWUgQVMgbmFtZSwgbC5sYW5uYW1lLCBwLnByb3Jl dHNldCwgcC5wcm9yZXR0eXBlLCB5LnR5cG5hbWUgQVMgcmV0dHlwZSwKKyAg ICBDQVNFIFdIRU4gcHJvYWxsYXJndHlwZXMgSVMgTk9UIE5VTEwgVEhFTgor ICAgICAgICAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoQVJSQVko CisgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAg IHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUocC5wcm9hbGxhcmd0eXBlc1tzLmld LCBOVUxMKQorICAgICAgICAgICAgICAgIEZST00KKyAgICAgICAgICAgICAg ICAgICAgcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxv Zy5hcnJheV91cHBlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHAucHJv YWxsYXJndHlwZXMsIDEpKSBBUyBzKGkpKSwgJywnKQorICAgICAgICBFTFNF CisgICAgICAgICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJB WSgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAg ICAgcGdfY2F0YWxvZy5mb3JtYXRfdHlwZShwLnByb2FyZ3R5cGVzW3MuaV0s IE5VTEwpCisgICAgICAgICAgICAgICAgRlJPTQorICAgICAgICAgICAgICAg ICAgICBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBwZ19jYXRhbG9n LmFycmF5X3VwcGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgcC5wcm9h cmd0eXBlcywgMSkpIEFTIHMoaSkpLCAnLCcpCisgICAgICAgIEVORCBBUyBw cm9hcmd0eXBlbmFtZXMsCisgICAgQ0FTRSBXSEVOIHByb2FsbGFyZ3R5cGVz IElTIE5PVCBOVUxMIFRIRU4KKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJy YXlfdG9fc3RyaW5nKEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVCBw cm9hbGxhcmd0eXBlc1tzLmldIEZST00KKyAgICAgICAgICAgICAgICAgICAg cGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJh eV91cHBlcihwcm9hbGxhcmd0eXBlcywgMSkpIHMoaSkpLCAnLCcpCisgICAg ICAgIEVMU0UKKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJyYXlfdG9fc3Ry aW5nKEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVCBwcm9hcmd0eXBl c1tzLmldIEZST00KKyAgICAgICAgICAgICAgICAgICAgcGdfY2F0YWxvZy5n ZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcihwcm9h cmd0eXBlcywgMSkpIHMoaSkpLCAnLCcpCisgICAgICAgIEVORCBBUyBwcm9h cmd0eXBlcywKKyAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhwLnBy b2FyZ25hbWVzLCAnLCcpIEFTIHByb2FyZ25hbWVzLAorICAgIHBnX2NhdGFs b2cuYXJyYXlfdG9fc3RyaW5nKHByb2FyZ21vZGVzLCAnLCcpIEFTIHByb2Fy Z21vZGVzLAorCisJeyUgaWYgaXNfcHBhc19kYXRhYmFzZSAlfQorICAgICAg ICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIG4ub2lkIEVMU0Ug MCBFTkQgQVMgcGtnLAorICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQg PD4gMCBUSEVOIG4ubnNwbmFtZSBFTFNFICcnIEVORCBBUyBwa2duYW1lLAor ICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIChTRUxF Q1Qgb2lkIEZST00gcGdfcHJvYyBXSEVSRSBwcm9uYW1lc3BhY2U9bi5vaWQg QU5EIHByb25hbWU9J2NvbnMnKSBFTFNFIDAgRU5EIEFTIHBrZ2NvbnNvaWQs CisgICAgICAgIENBU0UgV0hFTiBuLm5zcHBhcmVudCA8PiAwIFRIRU4gZy5v aWQgRUxTRSBuLm9pZCBFTkQgQVMgc2NoZW1hLAorICAgICAgICBDQVNFIFdI RU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIGcubnNwbmFtZSBFTFNFIG4ubnNw bmFtZSBFTkQgQVMgc2NoZW1hbmFtZSwKKyAgICAgICAgTk9UIChsLmxhbm5h bWUgPSAnZWRic3BsJyBBTkQgcHJvdHlwZSA9ICcxJykgQVMgaXNmdW5jLAor CXslZWxzZSV9CisgICAgICAgIDAgQVMgcGtnLAorICAgICAgICAnJyBBUyBw a2duYW1lLAorICAgICAgICAwIEFTIHBrZ2NvbnNvaWQsCisgICAgICAgIG4u b2lkICAgICBBUyBzY2hlbWEsCisgICAgICAgIG4ubnNwbmFtZSBBUyBzY2hl bWFuYW1lLAorICAgICAgICB0cnVlIEFTIGlzZnVuYywKKwl7JWVuZGlmJX0K KwlwZ19jYXRhbG9nLnBnX2dldF9mdW5jdGlvbl9pZGVudGl0eV9hcmd1bWVu dHMocC5vaWQpIEFTIHNpZ25hdHVyZSwKKworCXslIGlmIGhhc0ZlYXR1cmVG dW5jdGlvbkRlZmF1bHRzICV9CisgICAgICAgIHBnX2NhdGFsb2cucGdfZ2V0 X2V4cHIocC5wcm9hcmdkZWZhdWx0cywgJ3BnX2NhdGFsb2cucGdfY2xhc3Mn OjpyZWdjbGFzcywgZmFsc2UpIEFTIHByb2FyZ2RlZmF1bHRzLAorICAgICAg ICBwLnByb25hcmdkZWZhdWx0cworCXslZWxzZSV9CisJCSAnJyBBUyBwcm9h cmdkZWZhdWx0cywgMCBBUyBwcm9uYXJnZGVmYXVsdHMKKwl7JWVuZGlmJX0K KwkgICAgRlJPTQorICAgICAgICAgICAgcGdfY2F0YWxvZy5wZ19wcm9jIHAK KyAgICAgICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFj ZSBuIE9OIHAucHJvbmFtZXNwYWNlID0gbi5vaWQKKyAgICAgICAgICAgIExF RlQgSk9JTiBwZ19jYXRhbG9nLnBnX2xhbmd1YWdlIGwgT04gcC5wcm9sYW5n ID0gbC5vaWQKKyAgICAgICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBn X3R5cGUgeSBPTiBwLnByb3JldHR5cGUgPSB5Lm9pZAorCisJeyUgaWYgaXNf cHBhc19kYXRhYmFzZSAlfQorCQlMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19u YW1lc3BhY2UgZyBPTiBuLm5zcHBhcmVudCA9IGcub2lkCisgICAgeyUgZW5k aWYgJX0KKworCXslIGlmIGZpZCAlfQorCVdIRVJFIHAub2lkID0ge3tmaWR9 fTo6aW50OworCXslIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9nZXRfc3RhY2tfaW5mby5zcWwg Yi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YxL2dldF9zdGFja19pbmZvLnNxbApuZXcgZmlsZSBtb2RlIDEw MDc1NQppbmRleCAwMDAwMDAwLi4wNTAzNGM5Ci0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVn Z2VyL3NxbC92MS9nZXRfc3RhY2tfaW5mby5zcWwKQEAgLTAsMCArMSw0IEBA Cit7IyMjIEdldCB0aGUgc3RhY2sgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2lu ZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAgU0VMRUNUICogRlJP TSBwbGRiZ19nZXRfc3RhY2soe3tzZXNzaW9uX2lkfX06OmludCkgT1JERVIg QlkgbGV2ZWwKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9nZXRfdmFyaWFibGVzLnNxbCBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjEvZ2V0X3ZhcmlhYmxlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3 NTUKaW5kZXggMDAwMDAwMC4uNDdlYmVkNQotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjEvZ2V0X3ZhcmlhYmxlcy5zcWwKQEAgLTAsMCArMSw4IEBACit7 IyMjIEdldCB0aGUgdmFyaWFibGVzIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dp bmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVAorICAg ICAgICBuYW1lLCB2YXJDbGFzcywgdmFsdWUsCisJICAgIHBnX2NhdGFsb2cu Zm9ybWF0X3R5cGUoZHR5cGUsIE5VTEwpIGFzIGR0eXBlLCBpc2NvbnN0CisJ RlJPTSBwbGRiZ19nZXRfdmFyaWFibGVzKHt7c2Vzc2lvbl9pZH19OjppbnQp CisJT1JERVIgQlkgdmFyQ2xhc3MKK3slIGVuZGlmICV9ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9v bHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9zZWxlY3Rf ZnJhbWUuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92MS9zZWxlY3RfZnJhbWUuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzMWU2MzQKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0 ZXMvZGVidWdnZXIvc3FsL3YxL3NlbGVjdF9mcmFtZS5zcWwKQEAgLTAsMCAr MSwxMiBAQAoreyMjIyBzZWxlY3QgdGhlIGZyYW1lIHRvIGRlYnVnIHRoZSBm dW5jdGlvbiAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkIGFuZCBmcmFtZV9pZCAl fQorICAgIFNFTEVDVAorICAgICAgICBwLnBrZyBBUyBwa2csIHAuZnVuYyBB UyBmdW5jLCBwLnRhcmdldE5hbWUgQVMgdGFyZ2V0TmFtZSwKKyAgICAgICAg cC5saW5lbnVtYmVyIEFTIGxpbmVudW1iZXIsCisgICAgICAgIENBU0UgV0hF TiBwLmZ1bmMgPD4gMCBUSEVOIHBsZGJnX2dldF9zb3VyY2Uoe3tzZXNzaW9u X2lkfX06OklOVEVHRVIsIHAuZnVuYywgcC5wa2cpIEVMU0UgJzxObyBzb3Vy Y2UgYXZhaWxhYmxlPicgRU5EIEFTIHNyYywKKyAgICAgICAgKFNFTEVDVAor ICAgICAgICAgICAgcy5hcmdzCisgICAgICAgICBGUk9NIHBsZGJnX2dldF9z dGFjayh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcworICAgICAgICAgV0hF UkUgcy5mdW5jID0gcC5mdW5jIEFORCBzLnBrZyA9IHAucGtnKSBBUyBhcmdz CisgICAgRlJPTSBwbGRiZ19zZWxlY3RfZnJhbWUoe3tzZXNzaW9uX2lkfX06 OklOVEVHRVIsIHt7ZnJhbWVfaWR9fTo6SU5URUdFUikgcAoreyUgZW5kaWYg JX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIv c3FsL3YxL3NldF9icmVha3BvaW50LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvc2V0X2JyZWFr cG9pbnQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu LjYxYzhiMTMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3NldF9icmVh a3BvaW50LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgU2V0IHRoZSBicmVh a3BvaW50cyBmb3IgZGVidWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25faWQg JX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX3NldF9icmVha3BvaW50KHt7 c2Vzc2lvbl9pZH19OjppbnQgLHt7cG9pZH19OjpPSUQsIHt7Zm9pZH19OjpP SUQsIHt7bGluZV9udW1iZXJ9fTo6aW50KQoreyUgZW5kaWYgJX0KXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3N0 ZXBfaW50by5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YxL3N0ZXBfaW50by5zcWwKbmV3IGZpbGUg bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODM3Mjg3ZAotLS0gL2Rldi9u dWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRl cy9kZWJ1Z2dlci9zcWwvdjEvc3RlcF9pbnRvLnNxbApAQCAtMCwwICsxLDEx IEBACit7IyMjIFN0ZXAgaW50byBmdW5jdGlvbiBmb3IgZGVidWdnaW5nICMj I30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QKKyAgICAgICAg cC5wa2cgQVMgcGtnLCBwLmZ1bmMgQVMgZnVuYywgcC50YXJnZXROYW1lIEFT IHRhcmdldE5hbWUsCisgICAgICAgIHAubGluZW51bWJlciBBUyBsaW5lbnVt YmVyLCBwbGRiZ19nZXRfc291cmNlKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VS LCBwLnBrZywgcC5mdW5jKSBBUyBzcmMsCisgICAgICAgIChTRUxFQ1QKKyAg ICAgICAgICAgIHMuYXJncworICAgICAgICAgRlJPTSBwbGRiZ19nZXRfc3Rh Y2soe3tzZXNzaW9uX2lkfX06OklOVEVHRVIpIHMKKyAgICAgICAgIFdIRVJF IHMuZnVuYyA9IHAuZnVuYyBBTkQgcy5wa2cgPSBwLnBrZykgQVMgYXJncwor ICAgIEZST00gcGxkYmdfc3RlcF9pbnRvKHt7c2Vzc2lvbl9pZH19OjpJTlRF R0VSKSBwCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3Rl bXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvc3RlcF9vdmVyLnNxbCBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djEvc3RlcF9vdmVyLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwLi5hNWNlZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9z dGVwX292ZXIuc3FsCkBAIC0wLDAgKzEsMTEgQEAKK3sjIyMgU3RlcCBvdmVy IGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9p ZCAlfQorICAgIFNFTEVDVAorICAgICAgICBwLnBrZyBBUyBwa2csIHAuZnVu YyBBUyBmdW5jLCBwLnRhcmdldE5hbWUgQVMgdGFyZ2V0TmFtZSwKKyAgICAg ICAgcC5saW5lbnVtYmVyIEFTIGxpbmVudW1iZXIsIHBsZGJnX2dldF9zb3Vy Y2Uoe3tzZXNzaW9uX2lkfX06OklOVEVHRVIsIHAucGtnLCBwLmZ1bmMpIEFT IHNyYywKKyAgICAgICAgKFNFTEVDVAorICAgICAgICAgICAgcy5hcmdzCisg ICAgICAgIEZST00gcGxkYmdfZ2V0X3N0YWNrKHt7c2Vzc2lvbl9pZH19OjpJ TlRFR0VSKSBzCisgICAgICAgIFdIRVJFIHMuZnVuYyA9IHAuZnVuYyBBTkQg cy5wa2cgPSBwLnBrZykgQVMgYXJncworICAgIEZST00gcGxkYmdfc3RlcF9v dmVyKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBwCit7JSBlbmRpZiAlfQpc IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djEvd2FpdF9mb3JfYnJlYWtwb2ludC5zcWwgYi93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3dhaXRfZm9y X2JyZWFrcG9pbnQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAuLjAyNzEwNTYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3dh aXRfZm9yX2JyZWFrcG9pbnQuc3FsCkBAIC0wLDAgKzEsMTEgQEAKK3sjIyMg c2VsZWN0IHRoZSBmcmFtZSB0byBkZWJ1ZyB0aGUgZnVuY3Rpb24gIyMjfQor eyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVAorICAgICAgICBwLnBr ZyBBUyBwa2csIHAuZnVuYyBBUyBmdW5jLCBwLnRhcmdldE5hbWUgQVMgdGFy Z2V0TmFtZSwKKyAgICAgICAgcC5saW5lbnVtYmVyIEFTIGxpbmVudW1iZXIs IHBsZGJnX2dldF9zb3VyY2Uoe3tzZXNzaW9uX2lkfX06OklOVEVHRVIsIHAu cGtnLCBwLmZ1bmMpIEFTIHNyYywKKyAgICAgICAgKFNFTEVDVAorICAgICAg ICAgICAgcy5hcmdzCisgICAgICAgICBGUk9NIHBsZGJnX2dldF9zdGFjayh7 e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcworICAgICAgICAgV0hFUkUgcy5m dW5jID0gcC5mdW5jIEFORCBzLnBrZyA9IHAucGtnKSBBUyBhcmdzCisgICAg RlJPTSBwbGRiZ193YWl0X2Zvcl9icmVha3BvaW50KHt7c2Vzc2lvbl9pZH19 OjpJTlRFR0VSKSBwOworeyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3dhaXRfZm9yX3Rhcmdl dC5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMv ZGVidWdnZXIvc3FsL3YxL3dhaXRfZm9yX3RhcmdldC5zcWwKbmV3IGZpbGUg bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzRmNTYzNAotLS0gL2Rldi9u dWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRl cy9kZWJ1Z2dlci9zcWwvdjEvd2FpdF9mb3JfdGFyZ2V0LnNxbApAQCAtMCww ICsxLDQgQEAKK3sjIyMgV2FpdCBmb3IgdGhlIHRhcmdldCBmb3IgZGVidWdn aW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QgKiBG Uk9NIHBsZGJnX3dhaXRfZm9yX3RhcmdldCh7e3Nlc3Npb25faWR9fTo6aW50 KQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0 ZXMvZGVidWdnZXIvc3FsL3YyL0JhY2tlbmRfcnVubmluZy5zcWwgYi93ZWIv cGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3Fs L3YyL0JhY2tlbmRfcnVubmluZy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uYzU3NzBkMAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9z cWwvdjIvQmFja2VuZF9ydW5uaW5nLnNxbApAQCAtMCwwICsxLDQgQEAKK3sj IyMgQ2hlY2sgYmFja2VuZCB0YXJnZXQgaXMgcnVubmluZyBvciBub3QgZm9y IGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBiYWNrZW5kX3BpZCAlfQorICAgIFNF TEVDVCBDT1VOVCgqKSBGUk9NIChTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zdGF0 X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmlkKSBBUyBzIFdIRVJFIHBnX2Nh dGFsb2cucGdfc3RhdF9nZXRfYmFja2VuZF9waWQocy5iaWQpID0ge3sgY29u bnxxdElkZW50KGJhY2tlbmRfcGlkKSB9fTo6aW50ZWdlcjsKK3slIGVuZGlm ICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC92Mi9hYm9ydF90YXJnZXQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9hYm9ydF90YXJn ZXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhm ODlhZTMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9k ZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2Fib3J0X3Rhcmdl dC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIEFib3J0IHRoZSB0YXJnZXQg Zm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAg U0VMRUNUICogRlJPTSBwbGRiZ19hYm9ydF90YXJnZXQoe3tzZXNzaW9uX2lk fX06OmludCkKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9hZGRfYnJlYWtwb2ludF9lZGIu c3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92Mi9hZGRfYnJlYWtwb2ludF9lZGIuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxMjk0NjIKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0 ZXMvZGVidWdnZXIvc3FsL3YyL2FkZF9icmVha3BvaW50X2VkYi5zcWwKQEAg LTAsMCArMSw0IEBACit7IyMjIEFkZCBFREIgYnJlYWtwb2ludHMgZm9yIGRl YnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAgU0VMRUNU ICogRlJPTSBwbGRiZ19zZXRfZ2xvYmFsX2JyZWFrcG9pbnQoe3tzZXNzaW9u X2lkfX06OmludCwge3twYWNrYWdlX29pZH19OjppbnQsIHt7ZnVuY3Rpb25f b2lkfX06Ok9JRCwgLTEsIHt7dGFyZ2V0X29pZH19OjppbnQpCit7JSBlbmRp ZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjIvYWRkX2JyZWFrcG9pbnRfcGcuc3FsIGIvd2ViL3BnYWRtaW4v dG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9hZGRf YnJlYWtwb2ludF9wZy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMC4uZjgzZTFjZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIv YWRkX2JyZWFrcG9pbnRfcGcuc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMjIyBB ZGQgUEcgYnJlYWtwb2ludCBmb3IgZGVidWdnaW5nICMjI30KK3slIGlmIHNl c3Npb25faWQgJX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX3NldF9nbG9i YWxfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9fSwge3tmdW5jdGlvbl9vaWR9 fSwgLTEsIE5VTEwpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVn Z2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvYXR0YWNoX3RvX3BvcnQu c3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92Mi9hdHRhY2hfdG9fcG9ydC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI3NDQ3NwotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvdjIvYXR0YWNoX3RvX3BvcnQuc3FsCkBAIC0wLDAgKzEs NCBAQAoreyMjIyBBdHRhY2ggdGhlIHRhcmdldCB0byBwb3J0IGZvciBkZWJ1 Z2dpbmcgIyMjfQoreyUgaWYgcG9ydCAlfQorICAgIFNFTEVDVCAqIEZST00g cGxkYmdfYXR0YWNoX3RvX3BvcnQoe3twb3J0fX06OmludCkKK3slIGVuZGlm ICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC92Mi9jbGVhcl9icmVha3BvaW50LnNxbCBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvY2xlYXJf YnJlYWtwb2ludC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uYzNkODNmOAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvY2xl YXJfYnJlYWtwb2ludC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIENsZWFy IGJyZWFrcG9pbnRzIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lv bl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfZHJvcF9icmVha3Bv aW50KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7Zm9pZH19OjpPSUQsIHt7bGlu ZV9udW1iZXJ9fTo6aW50KQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9k ZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2NvbnRpbnVlLnNx bCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1 Z2dlci9zcWwvdjIvY29udGludWUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1 CmluZGV4IDAwMDAwMDAuLjg1ZGNkMjcKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIv c3FsL3YyL2NvbnRpbnVlLnNxbApAQCAtMCwwICsxLDExIEBACit7IyMjIENv bnRpbnVlIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAl fQorICAgIFNFTEVDVAorICAgICAgICBwLmZ1bmMsIHAudGFyZ2V0TmFtZSwg cC5saW5lbnVtYmVyLAorICAgICAgICBwbGRiZ19nZXRfc291cmNlKHt7c2Vz c2lvbl9pZH19OjpJTlRFR0VSLCBwLmZ1bmMpIEFTIHNyYywKKyAgICAgICAg KFNFTEVDVAorICAgICAgICAgICAgcy5hcmdzCisgICAgICAgIEZST00gcGxk YmdfZ2V0X3N0YWNrKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBzCisgICAg ICAgIFdIRVJFIHMuZnVuYyA9IHAuZnVuYykgQVMgYXJncworICAgIEZST00g cGxkYmdfY29udGludWUoe3tzZXNzaW9uX2lkfX06OklOVEVHRVIpIHAKK3sl IGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92Mi9jcmVhdGVfbGlzdGVuZXIuc3FsIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9j cmVhdGVfbGlzdGVuZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLjFkNDc3MzkKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3Yy L2NyZWF0ZV9saXN0ZW5lci5zcWwKQEAgLTAsMCArMSwyIEBACit7IyMjIENy ZWF0ZSBsaXN0ZW5lciBmb3IgZGVidWdnaW5nICMjI30KKyAgICBTRUxFQ1Qg KiBmcm9tIHBsZGJnX2NyZWF0ZV9saXN0ZW5lcigpCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIv c3FsL3YyL2RlYnVnX3BscGdzcWxfZXhlY3V0ZV90YXJnZXQuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92Mi9kZWJ1Z19wbHBnc3FsX2V4ZWN1dGVfdGFyZ2V0LnNxbApuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YmRiOGVmCi0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92Mi9kZWJ1Z19wbHBnc3FsX2V4ZWN1dGVfdGFy Z2V0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgRGVidWcgZXhlY3V0ZSB0 YXJnZXQgZm9yIHBscGdzcWwgZnVuY3Rpb24gIyMjfQoreyUgaWYgZnVuY3Rp b25fb2lkICV9CisgICAgU0VMRUNUIHBscGdzcWxfb2lkX2RlYnVnKHt7ZnVu Y3Rpb25fb2lkfX06Ok9JRCkKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9kZWJ1Z19wbHBn c3FsX2luaXQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVt cGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9kZWJ1Z19wbHBnc3FsX2luaXQuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1NmFkOTgK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2RlYnVnX3BscGdzcWxfaW5p dC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIERlYnVnIEluaXRpYWxpemF0 aW9uIGZvciBwbHBnc3FsIGZ1bmN0aW9uICMjI30KK3slIGlmIHBhY2tnZV9p bml0X29pZCAlfQorICAgIFNFTEVDVCBwbHBnc3FsX29pZF9kZWJ1Zyh7e3Bh Y2tnZV9pbml0X29pZH19OjpPSUQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZGVidWdf c3BsX2V4ZWN1dGVfdGFyZ2V0LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rl YnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZGVidWdfc3BsX2V4 ZWN1dGVfdGFyZ2V0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwLi43Y2IzODJmCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9k ZWJ1Z19zcGxfZXhlY3V0ZV90YXJnZXQuc3FsCkBAIC0wLDAgKzEsNCBAQAor eyMjIyBEZWJ1ZyBleGVjdXRlIHRhcmdldCBmb3IgRURCIHNwbCBmdW5jdGlv biAjIyN9Cit7JSBpZiBmdW5jdGlvbl9vaWQgJX0KKyAgICBTRUxFQ1QgZWRi X29pZF9kZWJ1Zyh7e2Z1bmN0aW9uX29pZH19OjpPSUQpCit7JSBlbmRpZiAl fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9z cWwvdjIvZGVidWdfc3BsX2luaXQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9kZWJ1Z19zcGxf aW5pdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u ZDE2YjFiMQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZGVidWdfc3Bs X2luaXQuc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMjIyBEZWJ1ZyBJbml0aWFs aXphdGlvbiBmb3IgRURCIHNwbCBmdW5jdGlvbiAjIyN9Cit7JSBpZiBwYWNr Z2VfaW5pdF9vaWQgJX0KKyAgICBTRUxFQ1QgZWRiX29pZF9kZWJ1Zyh7e3Bh Y2tnZV9pbml0X29pZH19OjpPSUQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZGVwb3Np dF92YWx1ZS5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YyL2RlcG9zaXRfdmFsdWUuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlZTMyNTkKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YyL2RlcG9zaXRfdmFsdWUuc3FsCkBAIC0w LDAgKzEsNCBAQAoreyMjIyBDaGFuZ2UgdGhlIHZhcmlhYmxlIHZhbHVlIGFu ZCBzdWJtaXQgZHVyaW5nIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9u X2lkICV9CisgICAgU0VMRUNUICogRlJPTSBwbGRiZ19kZXBvc2l0X3ZhbHVl KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7dmFyX25hbWV8cXRMaXRlcmFsIH19 LCB7e2xpbmVfbnVtYmVyfX0sIHt7dmFsfHF0TGl0ZXJhbH19KQoreyUgZW5k aWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YyL2dldF9icmVha3BvaW50cy5zcWwgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2dldF9i cmVha3BvaW50cy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uMTlkYTVkYgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZ2V0 X2JyZWFrcG9pbnRzLnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgR2V0IHRo ZSBicmVha3BvaW50IGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcgIyMjfQor eyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdf Z2V0X2JyZWFrcG9pbnRzKHt7c2Vzc2lvbl9pZH19OjppbnQpCit7JSBlbmRp ZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjIvZ2V0X2Z1bmN0aW9uX2luZm8uc3FsIGIvd2ViL3BnYWRtaW4v dG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9nZXRf ZnVuY3Rpb25faW5mby5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMC4uNzk4OWRhNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIv Z2V0X2Z1bmN0aW9uX2luZm8uc3FsCkBAIC0wLDAgKzEsNjYgQEAKK3sjIyMg VG8gZmV0Y2ggZGVidWcgZnVuY3Rpb24gaW5mb3JtYXRpb24gIyMjfQorU0VM RUNUCisgICAgcC5wcm9uYW1lIEFTIG5hbWUsIGwubGFubmFtZSwgcC5wcm9y ZXRzZXQsIHAucHJvcmV0dHlwZSwgeS50eXBuYW1lIEFTIHJldHR5cGUsCisg ICAgQ0FTRSBXSEVOIHByb2FsbGFyZ3R5cGVzIElTIE5PVCBOVUxMIFRIRU4K KyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJyYXlfdG9fc3RyaW5nKEFSUkFZ KAorICAgICAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAgICAg ICBwZ19jYXRhbG9nLmZvcm1hdF90eXBlKHAucHJvYWxsYXJndHlwZXNbcy5p XSwgTlVMTCkKKyAgICAgICAgICAgICAgICBGUk9NCisgICAgICAgICAgICAg ICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFs b2cuYXJyYXlfdXBwZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBwLnBy b2FsbGFyZ3R5cGVzLCAxKSkgQVMgcyhpKSksICcsJykKKyAgICAgICAgRUxT RQorICAgICAgICAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoQVJS QVkoCisgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAg ICAgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUocC5wcm9hcmd0eXBlc1tzLmld LCBOVUxMKQorICAgICAgICAgICAgICAgIEZST00KKyAgICAgICAgICAgICAg ICAgICAgcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxv Zy5hcnJheV91cHBlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHAucHJv YXJndHlwZXMsIDEpKSBBUyBzKGkpKSwgJywnKQorICAgICAgICBFTkQgQVMg cHJvYXJndHlwZW5hbWVzLAorICAgIENBU0UgV0hFTiBwcm9hbGxhcmd0eXBl cyBJUyBOT1QgTlVMTCBUSEVOCisgICAgICAgICAgICBwZ19jYXRhbG9nLmFy cmF5X3RvX3N0cmluZyhBUlJBWSgKKyAgICAgICAgICAgICAgICBTRUxFQ1Qg cHJvYWxsYXJndHlwZXNbcy5pXSBGUk9NCisgICAgICAgICAgICAgICAgICAg IHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJy YXlfdXBwZXIocHJvYWxsYXJndHlwZXMsIDEpKSBzKGkpKSwgJywnKQorICAg ICAgICBFTFNFCisgICAgICAgICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0 cmluZyhBUlJBWSgKKyAgICAgICAgICAgICAgICBTRUxFQ1QgcHJvYXJndHlw ZXNbcy5pXSBGUk9NCisgICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cu Z2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHJv YXJndHlwZXMsIDEpKSBzKGkpKSwgJywnKQorICAgICAgICBFTkQgQVMgcHJv YXJndHlwZXMsCisgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcocC5w cm9hcmduYW1lcywgJywnKSBBUyBwcm9hcmduYW1lcywKKyAgICBwZ19jYXRh bG9nLmFycmF5X3RvX3N0cmluZyhwcm9hcmdtb2RlcywgJywnKSBBUyBwcm9h cmdtb2RlcywKKworCXslIGlmIGlzX3BwYXNfZGF0YWJhc2UgJX0KKyAgICAg ICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50IDw+IDAgVEhFTiBuLm9pZCBFTFNF IDAgRU5EIEFTIHBrZywKKyAgICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50 IDw+IDAgVEhFTiBuLm5zcG5hbWUgRUxTRSAnJyBFTkQgQVMgcGtnbmFtZSwK KyAgICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50IDw+IDAgVEhFTiAoU0VM RUNUIG9pZCBGUk9NIHBnX3Byb2MgV0hFUkUgcHJvbmFtZXNwYWNlPW4ub2lk IEFORCBwcm9uYW1lPSdjb25zJykgRUxTRSAwIEVORCBBUyBwa2djb25zb2lk LAorICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIGcu b2lkIEVMU0Ugbi5vaWQgRU5EIEFTIHNjaGVtYSwKKyAgICAgICAgQ0FTRSBX SEVOIG4ubnNwcGFyZW50IDw+IDAgVEhFTiBnLm5zcG5hbWUgRUxTRSBuLm5z cG5hbWUgRU5EIEFTIHNjaGVtYW5hbWUsCisgICAgICAgIE5PVCAobC5sYW5u YW1lID0gJ2VkYnNwbCcgQU5EIHByb3R5cGUgPSAnMScpIEFTIGlzZnVuYywK Kwl7JWVsc2UlfQorICAgICAgICAwIEFTIHBrZywKKyAgICAgICAgJycgQVMg cGtnbmFtZSwKKyAgICAgICAgMCBBUyBwa2djb25zb2lkLAorICAgICAgICBu Lm9pZCAgICAgQVMgc2NoZW1hLAorICAgICAgICBuLm5zcG5hbWUgQVMgc2No ZW1hbmFtZSwKKyAgICAgICAgdHJ1ZSBBUyBpc2Z1bmMsCisJeyVlbmRpZiV9 CisJcGdfY2F0YWxvZy5wZ19nZXRfZnVuY3Rpb25faWRlbnRpdHlfYXJndW1l bnRzKHAub2lkKSBBUyBzaWduYXR1cmUsCisKKwl7JSBpZiBoYXNGZWF0dXJl RnVuY3Rpb25EZWZhdWx0cyAlfQorICAgICAgICBwZ19jYXRhbG9nLnBnX2dl dF9leHByKHAucHJvYXJnZGVmYXVsdHMsICdwZ19jYXRhbG9nLnBnX2NsYXNz Jzo6cmVnY2xhc3MsIGZhbHNlKSBBUyBwcm9hcmdkZWZhdWx0cywKKyAgICAg ICAgcC5wcm9uYXJnZGVmYXVsdHMKKwl7JWVsc2UlfQorCQkgJycgQVMgcHJv YXJnZGVmYXVsdHMsIDAgQVMgcHJvbmFyZ2RlZmF1bHRzCisJeyVlbmRpZiV9 CisJICAgIEZST00KKyAgICAgICAgICAgIHBnX2NhdGFsb2cucGdfcHJvYyBw CisgICAgICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3Bh Y2UgbiBPTiBwLnByb25hbWVzcGFjZSA9IG4ub2lkCisgICAgICAgICAgICBM RUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19sYW5ndWFnZSBsIE9OIHAucHJvbGFu ZyA9IGwub2lkCisgICAgICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5w Z190eXBlIHkgT04gcC5wcm9yZXR0eXBlID0geS5vaWQKKworCXslIGlmIGlz X3BwYXNfZGF0YWJhc2UgJX0KKwkJTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdf bmFtZXNwYWNlIGcgT04gbi5uc3BwYXJlbnQgPSBnLm9pZAorICAgIHslIGVu ZGlmICV9CisKKwl7JSBpZiBmaWQgJX0KKwlXSEVSRSBwLm9pZCA9IHt7Zmlk fX06OmludDsKKwl7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZ2V0X3N0YWNrX2luZm8uc3Fs IGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVn Z2VyL3NxbC92Mi9nZXRfc3RhY2tfaW5mby5zcWwKbmV3IGZpbGUgbW9kZSAx MDA3NTUKaW5kZXggMDAwMDAwMC4uMDUwMzRjOQotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1 Z2dlci9zcWwvdjIvZ2V0X3N0YWNrX2luZm8uc3FsCkBAIC0wLDAgKzEsNCBA QAoreyMjIyBHZXQgdGhlIHN0YWNrIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dp bmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZS T00gcGxkYmdfZ2V0X3N0YWNrKHt7c2Vzc2lvbl9pZH19OjppbnQpIE9SREVS IEJZIGxldmVsCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZ2V0X3ZhcmlhYmxlcy5zcWwg Yi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YyL2dldF92YXJpYWJsZXMuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NzU1CmluZGV4IDAwMDAwMDAuLjQ3ZWJlZDUKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YyL2dldF92YXJpYWJsZXMuc3FsCkBAIC0wLDAgKzEsOCBAQAor eyMjIyBHZXQgdGhlIHZhcmlhYmxlcyBpbmZvcm1hdGlvbiBmb3IgZGVidWdn aW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QKKyAg ICAgICAgbmFtZSwgdmFyQ2xhc3MsIHZhbHVlLAorCSAgICBwZ19jYXRhbG9n LmZvcm1hdF90eXBlKGR0eXBlLCBOVUxMKSBhcyBkdHlwZSwgaXNjb25zdAor CUZST00gcGxkYmdfZ2V0X3ZhcmlhYmxlcyh7e3Nlc3Npb25faWR9fTo6aW50 KQorCU9SREVSIEJZIHZhckNsYXNzCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvc2VsZWN0 X2ZyYW1lLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBs YXRlcy9kZWJ1Z2dlci9zcWwvdjIvc2VsZWN0X2ZyYW1lLnNxbApuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YTE4ODM5Ci0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92Mi9zZWxlY3RfZnJhbWUuc3FsCkBAIC0wLDAg KzEsMTEgQEAKK3sjIyMgc2VsZWN0IHRoZSBmcmFtZSB0byBkZWJ1ZyB0aGUg ZnVuY3Rpb24gIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVD VAorICAgICAgICBwLmZ1bmMgQVMgZnVuYywgcC50YXJnZXROYW1lIEFTIHRh cmdldE5hbWUsIHAubGluZW51bWJlciBBUyBsaW5lbnVtYmVyLAorICAgICAg ICBDQVNFIFdIRU4gcC5mdW5jIDw+IDAgVEhFTiBwbGRiZ19nZXRfc291cmNl KHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSLCBwLmZ1bmMpIEVMU0UgJzxObyBz b3VyY2UgYXZhaWxhYmxlPicgRU5EIEFTIHNyYywKKyAgICAgICAgKFNFTEVD VAorICAgICAgICAgICAgcy5hcmdzCisgICAgICAgICBGUk9NIHBsZGJnX2dl dF9zdGFjayh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcworICAgICAgICAg V0hFUkUgcy5mdW5jID0gcC5mdW5jKSBBUyBhcmdzCisgICAgRlJPTSBwbGRi Z19zZWxlY3RfZnJhbWUoe3tzZXNzaW9uX2lkfX06OklOVEVHRVIsIHt7ZnJh bWVfaWR9fTo6SU5URUdFUikgcAoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL3NldF9icmVh a3BvaW50LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBs YXRlcy9kZWJ1Z2dlci9zcWwvdjIvc2V0X2JyZWFrcG9pbnQuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1NmQ2ZjYKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YyL3NldF9icmVha3BvaW50LnNxbApAQCAt MCwwICsxLDQgQEAKK3sjIyMgU2V0IHRoZSBicmVha3BvaW50cyBmb3IgZGVi dWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1Qg KiBGUk9NIHBsZGJnX3NldF9icmVha3BvaW50KHt7c2Vzc2lvbl9pZH19Ojpp bnQsIHt7Zm9pZH19OjpPSUQse3tsaW5lX251bWJlcn19OjppbnQpCit7JSBl bmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1 Z2dlci9zcWwvdjIvc3RlcF9pbnRvLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvc3RlcF9pbnRv LnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDA1 MjQwCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVi dWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9zdGVwX2ludG8uc3Fs CkBAIC0wLDAgKzEsMTEgQEAKK3sjIyMgU3RlcCBpbnRvIGZ1bmN0aW9uIGZv ciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNF TEVDVAorICAgICAgICBwLmZ1bmMsIHAudGFyZ2V0TmFtZSwgcC5saW5lbnVt YmVyLAorICAgICAgICBwbGRiZ19nZXRfc291cmNlKHt7c2Vzc2lvbl9pZH19 OjpJTlRFR0VSLCBwLmZ1bmMpIEFTIHNyYywKKyAgICAgICAgKFNFTEVDVAor ICAgICAgICAgICAgcy5hcmdzCisgICAgICAgICBGUk9NIHBsZGJnX2dldF9z dGFjayh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcworICAgICAgICAgV0hF UkUgcy5mdW5jID0gcC5mdW5jKSBBUyBhcmdzCisgICAgRlJPTSBwbGRiZ19z dGVwX2ludG8oe3tzZXNzaW9uX2lkfX06OklOVEVHRVIpIHAKK3slIGVuZGlm ICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC92Mi9zdGVwX292ZXIuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVi dWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9zdGVwX292ZXIuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkMzE1M2QK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL3N0ZXBfb3Zlci5zcWwKQEAg LTAsMCArMSwxMSBAQAoreyMjIyBTdGVwIG92ZXIgZnVuY3Rpb24gZm9yIGRl YnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAgU0VMRUNU CisgICAgICAgIHAuZnVuYywgcC50YXJnZXROYW1lLCBwLmxpbmVudW1iZXIs CisgICAgICAgIHBsZGJnX2dldF9zb3VyY2Uoe3tzZXNzaW9uX2lkfX06OklO VEVHRVIsIHAuZnVuYykgQVMgc3JjLAorICAgICAgICAoU0VMRUNUCisgICAg ICAgICAgICBzLmFyZ3MKKyAgICAgICAgIEZST00gcGxkYmdfZ2V0X3N0YWNr KHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBzCisgICAgICAgICBXSEVSRSBz LmZ1bmMgPSBwLmZ1bmMpIEFTIGFyZ3MKKyAgICBGUk9NIHBsZGJnX3N0ZXBf b3Zlcih7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcAoreyUgZW5kaWYgJX0K XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3Fs L3YyL3dhaXRfZm9yX2JyZWFrcG9pbnQuc3FsIGIvd2ViL3BnYWRtaW4vdG9v bHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi93YWl0X2Zv cl9icmVha3BvaW50LnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwLi45NmVmY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi93 YWl0X2Zvcl9icmVha3BvaW50LnNxbApAQCAtMCwwICsxLDEyIEBACit7IyMj IHNlbGVjdCB0aGUgZnJhbWUgdG8gZGVidWcgdGhlIGZ1bmN0aW9uICMjI30K K3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QKKyAgICAgICAgcC5m dW5jIEFTIGZ1bmMsIHAudGFyZ2V0TmFtZSBBUyB0YXJnZXROYW1lLAorICAg ICAgICBwLmxpbmVudW1iZXIgQVMgbGluZW51bWJlciwKKyAgICAgICAgcGxk YmdfZ2V0X3NvdXJjZSh7e3Nlc3Npb25faWR9fTo6SU5URUdFUiwgcC5mdW5j KSBBUyBzcmMsCisgICAgICAgIChTRUxFQ1QKKyAgICAgICAgICAgIHMuYXJn cworICAgICAgICAgRlJPTSBwbGRiZ19nZXRfc3RhY2soe3tzZXNzaW9uX2lk fX06OklOVEVHRVIpIHMKKyAgICAgICAgIFdIRVJFIHMuZnVuYyA9IHAuZnVu YykgQVMgYXJncworICAgIEZST00gcGxkYmdfd2FpdF9mb3JfYnJlYWtwb2lu dCh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcAoreyUgZW5kaWYgJX0KXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3Yy L3dhaXRfZm9yX3RhcmdldC5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL3dhaXRfZm9yX3Rhcmdl dC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzRm NTYzNAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rl YnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvd2FpdF9mb3JfdGFy Z2V0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgV2FpdCBmb3IgdGhlIHRh cmdldCBmb3IgZGVidWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0K KyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX3dhaXRfZm9yX3RhcmdldCh7e3Nl c3Npb25faWR9fTo6aW50KQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCg== --94eb2c0b78e82487b2052fbb5192 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --94eb2c0b78e82487b2052fbb5192--