From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id C5E381FF15F for ; Mon, 2 Dec 2024 15:23:04 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id ADD191A199; Mon, 2 Dec 2024 15:23:09 +0100 (CET) Mime-Version: 1.0 Date: Mon, 02 Dec 2024 15:22:31 +0100 Message-Id: From: "Shannon Sterz" To: "Shannon Sterz" , X-Mailer: aerc 0.18.2-0-ge037c095a049-dirty References: <20241202141655.254472-1-s.sterz@proxmox.com> In-Reply-To: <20241202141655.254472-1-s.sterz@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.039 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox v3 1/4] sendmail: add sendmail crate X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gTW9uIERlYyAyLCAyMDI0IGF0IDM6MTYgUE0gQ0VULCBTaGFubm9uIFN0ZXJ6IHdyb3RlOgo+ IGFkZCB0aGUgYHByb3htb3gtc2VuZG1haWxgIGNyYXRlIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRv IHNlbmQgbWFpbHMgdmlhCj4gdGhlIGBzZW5kbWFpbGAgdXRpbGl0eS4gZmVhdHVyZXMgaW5jbHVk ZToKPgo+IC0gbXVsdGlwYXJ0L2FsdGVybmF0aXZlIHN1cHBvcnQgZm9yIGh0bWwrcGxhaW4gdGV4 dCBtYWlscwo+IC0gbXVsdGlwYXJ0L21peGVkIHN1cHBvcnQgZm9yIG1haWxzIHdpdGggYXR0YWNo bWVudHMKPiAtIGF1dG9tYXRpYyBuZXN0aW5nIG9mIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBhbmQg bXVsdGlwYXJ0L21peGVkIHBhcnRzCj4gLSBtYXNrcyBtdWx0aXBsZSByZWNlaXZlcnMgYnkgZGVm YXVsdCwgY2FuIGJlIGRpc2FibGVkCj4gLSBlbmNvZGluZyBTdWJqZWN0LCBUbywgRnJvbSwgYW5k IGF0dGFjaG1lbnQgZmlsZSBuYW1lcyBjb3JyZWN0bHkKPiAtIGFkZGluZyBhbiBgQXV0by1TdWJt aXR0ZWRgIGhlYWRlciB0byBhdm9pZCB0cmlnZ2VyaW5nIGF1dG9tYXRlZCBtYWlscwo+Cj4gYWxz byBpbmNsdWRlcyBzZXZlcmFsIHRlc3RzIHRvIGVuc3VyZSB0aGF0IG1haWxzIGFyZSBmb3JtYXR0 ZWQKPiBjb3JyZWN0bHkuIGRlYmlhbiBwYWNrYWdpbmcgaXMgYWxzbyBwcm92aWRlZC4KPgo+IFNp Z25lZC1vZmYtYnk6IFNoYW5ub24gU3RlcnogPHMuc3RlcnpAcHJveG1veC5jb20+Cgpmb3Jnb3Qg dG8gYWRkIHRoaXMgaW4gdGhlIHYyIGFscmVhZHksIGJ1dCBzaW5jZSB0aGF0IGlzIG5vdyBvYnNv bGV0ZSwKYnV0IHVubGVzcyBMdWthcyBvYmplY3RzIHRoaXMgc2hvdWxkIHByb2JhYmx5IGluY2x1 ZGU6CgpUZXN0ZWQtYnk6IEx1a2FzIFdhZ25lciA8bC53YWduZXJAcHJveG1veC5jb20+ClJldmll d2VkLWJ5OiBMdWthcyBXYWduZXIgPGwud2FnbmVyQHByb3htb3guY29tPgoKanVzdCB0aG91Z2h0 IGknZCBxdWlja2x5IG1lbnRpb24gdGhpcyBiZWZvcmUgaXQgZ2V0cyBsb3N0Cgo+IC0tLQo+Cj4g Y2hhbmdlcyBzaW5jZSB2MiAodGhhbmtzIEAgTHVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94 LmNvbT4pCj4gICAgIC0gYWRkZWQgZGViaWFuIHBhY2thZ2luZwo+ICAgICAtIGNoYW5nZSBpbnN0 YW5jZXMgb2YgYHB1c2hfc3RyKCZmb3JtYXQhKC4uKWAgb3ZlciB0byBgd3JpdGVsbiEoLi4pYAo+ ICAgICAgIGFuZCBgd3JpdGUhKC4uKWAKPgo+IGNoYW5nZXMgc2luY2UgdjEgKHRoYW5rcyBAIEx1 a2FzIFdhZ25lciA8bC53YWduZXJAcHJveG1veC5jb20+KToKPiAgICAgLSBtYWtlIGl0IHBvc3Np YmxlIHRvIGRpc2FibGUgcmVjZWl2ZXIgcmVkYWN0aW9uCj4gICAgIC0gcmUtc3RydWN0dXJlIHRo ZSBtYWwgZm9ybWF0dGluZyBjb2RlOyBtYWlubHkgc3BsaXQgaXQgaW50bwo+ICAgICAgIG11bHRp cGxlIGZ1bmN0aW9ucyAoYGZvcm1hdF9oZWFkZXJgLCBgZm9ybWF0X2JvZHlgLAo+ICAgICAgIGBm b3JtYXRfYXR0YWNobWVudGAgZXRjLikKPiAgICAgLSBmaXggbXVsdGlwbGUgdHlwb3MKPgo+ICBD YXJnby50b21sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAgcHJveG1veC1z ZW5kbWFpbC9DYXJnby50b21sICAgICAgICAgICB8ICAxNiArCj4gIHByb3htb3gtc2VuZG1haWwv ZGViaWFuL2NoYW5nZWxvZyAgICAgfCAgIDUgKwo+ICBwcm94bW94LXNlbmRtYWlsL2RlYmlhbi9j b250cm9sICAgICAgIHwgIDQzICsrCj4gIHByb3htb3gtc2VuZG1haWwvZGViaWFuL2NvcHlyaWdo dCAgICAgfCAgMTggKwo+ICBwcm94bW94LXNlbmRtYWlsL2RlYmlhbi9kZWJjYXJnby50b21sIHwg ICA3ICsKPiAgcHJveG1veC1zZW5kbWFpbC9zcmMvbGliLnJzICAgICAgICAgICB8IDc3OSArKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICA3IGZpbGVzIGNoYW5nZWQsIDg3MCBpbnNlcnRpb25z KCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LXNlbmRtYWlsL0NhcmdvLnRvbWwKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IHByb3htb3gtc2VuZG1haWwvZGViaWFuL2NoYW5nZWxvZwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY29udHJvbAo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY29weXJpZ2h0Cj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBwcm94bW94LXNlbmRtYWlsL2RlYmlhbi9kZWJjYXJnby50b21sCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LXNlbmRtYWlsL3NyYy9saWIucnMKPgo+IGRpZmYgLS1n aXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9tbAo+IGluZGV4IDg0ZmJlOTc5Li5iNjJmY2Q1MCAx MDA2NDQKPiAtLS0gYS9DYXJnby50b21sCj4gKysrIGIvQ2FyZ28udG9tbAo+IEBAIC0zMyw2ICsz Myw3IEBAIG1lbWJlcnMgPSBbCj4gICAgICAicHJveG1veC1ycmQtYXBpLXR5cGVzIiwKPiAgICAg ICJwcm94bW94LXNjaGVtYSIsCj4gICAgICAicHJveG1veC1zZWN0aW9uLWNvbmZpZyIsCj4gKyAg ICAicHJveG1veC1zZW5kbWFpbCIsCj4gICAgICAicHJveG1veC1zZXJkZSIsCj4gICAgICAicHJv eG1veC1zaGFyZWQtY2FjaGUiLAo+ICAgICAgInByb3htb3gtc2hhcmVkLW1lbW9yeSIsCj4gQEAg LTEzOCw2ICsxMzksNyBAQCBwcm94bW94LXJlc3Qtc2VydmVyID0geyB2ZXJzaW9uID0gIjAuOC4w IiwgcGF0aCA9ICJwcm94bW94LXJlc3Qtc2VydmVyIiB9Cj4gIHByb3htb3gtcm91dGVyID0geyB2 ZXJzaW9uID0gIjMuMC4wIiwgcGF0aCA9ICJwcm94bW94LXJvdXRlciIgfQo+ICBwcm94bW94LXNj aGVtYSA9IHsgdmVyc2lvbiA9ICIzLjEuMiIsIHBhdGggPSAicHJveG1veC1zY2hlbWEiIH0KPiAg cHJveG1veC1zZWN0aW9uLWNvbmZpZyA9IHsgdmVyc2lvbiA9ICIyLjEuMCIsIHBhdGggPSAicHJv eG1veC1zZWN0aW9uLWNvbmZpZyIgfQo+ICtwcm94bW94LXNlbmRtYWlsID0geyB2ZXJzaW9uID0g IjAuMS4wIiwgcGF0aCA9ICJwcm94bW94LXNlbmRtYWlsIiB9Cj4gIHByb3htb3gtc2VyZGUgPSB7 IHZlcnNpb24gPSAiMC4xLjEiLCBwYXRoID0gInByb3htb3gtc2VyZGUiLCBmZWF0dXJlcyA9IFsg InNlcmRlX2pzb24iIF0gfQo+ICBwcm94bW94LXNoYXJlZC1tZW1vcnkgPSB7IHZlcnNpb24gPSAi MC4zLjAiLCBwYXRoID0gInByb3htb3gtc2hhcmVkLW1lbW9yeSIgfQo+ICBwcm94bW94LXNvcnRh YmxlLW1hY3JvID0geyB2ZXJzaW9uID0gIjAuMS4zIiwgcGF0aCA9ICJwcm94bW94LXNvcnRhYmxl LW1hY3JvIiB9Cj4gZGlmZiAtLWdpdCBhL3Byb3htb3gtc2VuZG1haWwvQ2FyZ28udG9tbCBiL3By b3htb3gtc2VuZG1haWwvQ2FyZ28udG9tbAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAuLjc5MGIzMjRiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Byb3htb3gtc2VuZG1h aWwvQ2FyZ28udG9tbAo+IEBAIC0wLDAgKzEsMTYgQEAKPiArW3BhY2thZ2VdCj4gK25hbWUgPSAi cHJveG1veC1zZW5kbWFpbCIKPiArdmVyc2lvbiA9ICIwLjEuMCIKPiArYXV0aG9ycy53b3Jrc3Bh Y2UgPSB0cnVlCj4gK2VkaXRpb24ud29ya3NwYWNlID0gdHJ1ZQo+ICtsaWNlbnNlLndvcmtzcGFj ZSA9IHRydWUKPiArcmVwb3NpdG9yeS53b3Jrc3BhY2UgPSB0cnVlCj4gK2hvbWVwYWdlLndvcmtz cGFjZSA9IHRydWUKPiArZXhjbHVkZS53b3Jrc3BhY2UgPSB0cnVlCj4gK3J1c3QtdmVyc2lvbi53 b3Jrc3BhY2UgPSB0cnVlCj4gKwo+ICtbZGVwZW5kZW5jaWVzXQo+ICthbnlob3cgPSB7IHdvcmtz cGFjZSA9IHRydWUgfQo+ICtiYXNlNjQgPSB7IHdvcmtzcGFjZSA9IHRydWUgfQo+ICtwZXJjZW50 LWVuY29kaW5nID0geyB3b3Jrc3BhY2UgPSB0cnVlIH0KPiArcHJveG1veC10aW1lID0geyB3b3Jr c3BhY2UgPSB0cnVlIH0KPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY2hh bmdlbG9nIGIvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY2hhbmdlbG9nCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uNzFkN2M5ZjgKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY2hhbmdlbG9nCj4gQEAgLTAsMCArMSw1IEBACj4g K3J1c3QtcHJveG1veC1zZW5kbWFpbCAoMC4xLjAtMSkgYm9va3dvcm07IHVyZ2VuY3k9bWVkaXVt Cj4gKwo+ICsgICogSW5pdGlhbCByZWxlYXNlLgo+ICsKPiArIC0tIFByb3htb3ggU3VwcG9ydCBU ZWFtIDxzdXBwb3J0QHByb3htb3guY29tPiAgTW9uLCAwMiBEZWMgMjAyNCAxNDo0Nzo0MiArMDEw MAo+IGRpZmYgLS1naXQgYS9wcm94bW94LXNlbmRtYWlsL2RlYmlhbi9jb250cm9sIGIvcHJveG1v eC1zZW5kbWFpbC9kZWJpYW4vY29udHJvbAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAuLmRmYzhiOWJmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Byb3htb3gtc2VuZG1h aWwvZGViaWFuL2NvbnRyb2wKPiBAQCAtMCwwICsxLDQzIEBACj4gK1NvdXJjZTogcnVzdC1wcm94 bW94LXNlbmRtYWlsCj4gK1NlY3Rpb246IHJ1c3QKPiArUHJpb3JpdHk6IG9wdGlvbmFsCj4gK0J1 aWxkLURlcGVuZHM6IGRlYmhlbHBlci1jb21wYXQgKD0gMTMpLAo+ICsgZGgtc2VxdWVuY2UtY2Fy Z28sCj4gKyBjYXJnbzpuYXRpdmUgPCFub2NoZWNrPiwKPiArIHJ1c3RjOm5hdGl2ZSAoPj0gMS44 MCkgPCFub2NoZWNrPiwKPiArIGxpYnN0ZC1ydXN0LWRldiA8IW5vY2hlY2s+LAo+ICsgbGlicnVz dC1hbnlob3ctMStkZWZhdWx0LWRldiA8IW5vY2hlY2s+LAo+ICsgbGlicnVzdC1iYXNlNjQtMC4x MytkZWZhdWx0LWRldiA8IW5vY2hlY2s+LAo+ICsgbGlicnVzdC1wZXJjZW50LWVuY29kaW5nLTIr ZGVmYXVsdC1kZXYgKD49IDIuMS1+fikgPCFub2NoZWNrPiwKPiArIGxpYnJ1c3QtcHJveG1veC10 aW1lLTIrZGVmYXVsdC1kZXYgPCFub2NoZWNrPgo+ICtNYWludGFpbmVyOiBQcm94bW94IFN1cHBv cnQgVGVhbSA8c3VwcG9ydEBwcm94bW94LmNvbT4KPiArU3RhbmRhcmRzLVZlcnNpb246IDQuNy4w Cj4gK1Zjcy1HaXQ6IGdpdDovL2dpdC5wcm94bW94LmNvbS9naXQvcHJveG1veC5naXQKPiArVmNz LUJyb3dzZXI6IGh0dHBzOi8vZ2l0LnByb3htb3guY29tLz9wPXByb3htb3guZ2l0Cj4gK0hvbWVw YWdlOiBodHRwczovL3Byb3htb3guY29tCj4gK1gtQ2FyZ28tQ3JhdGU6IHByb3htb3gtc2VuZG1h aWwKPiArUnVsZXMtUmVxdWlyZXMtUm9vdDogbm8KPiArCj4gK1BhY2thZ2U6IGxpYnJ1c3QtcHJv eG1veC1zZW5kbWFpbC1kZXYKPiArQXJjaGl0ZWN0dXJlOiBhbnkKPiArTXVsdGktQXJjaDogc2Ft ZQo+ICtEZXBlbmRzOgo+ICsgJHttaXNjOkRlcGVuZHN9LAo+ICsgbGlicnVzdC1hbnlob3ctMStk ZWZhdWx0LWRldiwKPiArIGxpYnJ1c3QtYmFzZTY0LTAuMTMrZGVmYXVsdC1kZXYsCj4gKyBsaWJy dXN0LXBlcmNlbnQtZW5jb2RpbmctMitkZWZhdWx0LWRldiAoPj0gMi4xLX5+KSwKPiArIGxpYnJ1 c3QtcHJveG1veC10aW1lLTIrZGVmYXVsdC1kZXYKPiArUHJvdmlkZXM6Cj4gKyBsaWJydXN0LXBy b3htb3gtc2VuZG1haWwrZGVmYXVsdC1kZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLAo+ICsgbGli cnVzdC1wcm94bW94LXNlbmRtYWlsK21haWwtZm9yd2FyZGVyLWRldiAoPSAke2JpbmFyeTpWZXJz aW9ufSksCj4gKyBsaWJydXN0LXByb3htb3gtc2VuZG1haWwtMC1kZXYgKD0gJHtiaW5hcnk6VmVy c2lvbn0pLAo+ICsgbGlicnVzdC1wcm94bW94LXNlbmRtYWlsLTArZGVmYXVsdC1kZXYgKD0gJHti aW5hcnk6VmVyc2lvbn0pLAo+ICsgbGlicnVzdC1wcm94bW94LXNlbmRtYWlsLTArbWFpbC1mb3J3 YXJkZXItZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKPiArIGxpYnJ1c3QtcHJveG1veC1zZW5k bWFpbC0wLjEtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKPiArIGxpYnJ1c3QtcHJveG1veC1z ZW5kbWFpbC0wLjErZGVmYXVsdC1kZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLAo+ICsgbGlicnVz dC1wcm94bW94LXNlbmRtYWlsLTAuMSttYWlsLWZvcndhcmRlci1kZXYgKD0gJHtiaW5hcnk6VmVy c2lvbn0pLAo+ICsgbGlicnVzdC1wcm94bW94LXNlbmRtYWlsLTAuMS4wLWRldiAoPSAke2JpbmFy eTpWZXJzaW9ufSksCj4gKyBsaWJydXN0LXByb3htb3gtc2VuZG1haWwtMC4xLjArZGVmYXVsdC1k ZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLAo+ICsgbGlicnVzdC1wcm94bW94LXNlbmRtYWlsLTAu MS4wK21haWwtZm9yd2FyZGVyLWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSkKPiArRGVzY3JpcHRp b246IFJ1c3QgY3JhdGUgInByb3htb3gtc2VuZG1haWwiIC0gUnVzdCBzb3VyY2UgY29kZQo+ICsg U291cmNlIGNvZGUgZm9yIERlYmlhbml6ZWQgUnVzdCBjcmF0ZSAicHJveG1veC1zZW5kbWFpbCIK PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vY29weXJpZ2h0IGIvcHJveG1v eC1zZW5kbWFpbC9kZWJpYW4vY29weXJpZ2h0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMC4uMGQ5ZWFiM2UKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvcHJveG1veC1zZW5k bWFpbC9kZWJpYW4vY29weXJpZ2h0Cj4gQEAgLTAsMCArMSwxOCBAQAo+ICtGb3JtYXQ6IGh0dHBz Oi8vd3d3LmRlYmlhbi5vcmcvZG9jL3BhY2thZ2luZy1tYW51YWxzL2NvcHlyaWdodC1mb3JtYXQv MS4wLwo+ICsKPiArRmlsZXM6Cj4gKyAqCj4gK0NvcHlyaWdodDogMjAxOSAtIDIwMjMgUHJveG1v eCBTZXJ2ZXIgU29sdXRpb25zIEdtYkggPHN1cHBvcnRAcHJveG1veC5jb20+Cj4gK0xpY2Vuc2U6 IEFHUEwtMy4wLW9yLWxhdGVyCj4gKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgdGhlIHRlcm1z IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlCj4gKyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQo+ICsgbGF0ZXIgdmVyc2lvbi4KPiAr IC4KPiArIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ICsgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKPiArIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUKPiArIGRldGFpbHMuCj4gKyAuCj4gKyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YWxvbmcKPiArIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+Lgo+IGRpZmYgLS1naXQgYS9wcm94bW94LXNlbmRtYWlsL2RlYmlhbi9k ZWJjYXJnby50b21sIGIvcHJveG1veC1zZW5kbWFpbC9kZWJpYW4vZGViY2FyZ28udG9tbAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLmI3ODY0Y2RiCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL3Byb3htb3gtc2VuZG1haWwvZGViaWFuL2RlYmNhcmdvLnRvbWwKPiBAQCAt MCwwICsxLDcgQEAKPiArb3ZlcmxheSA9ICIuIgo+ICtjcmF0ZV9zcmNfcGF0aCA9ICIuLiIKPiAr bWFpbnRhaW5lciA9ICJQcm94bW94IFN1cHBvcnQgVGVhbSA8c3VwcG9ydEBwcm94bW94LmNvbT4i Cj4gKwo+ICtbc291cmNlXQo+ICt2Y3NfZ2l0ID0gImdpdDovL2dpdC5wcm94bW94LmNvbS9naXQv cHJveG1veC5naXQiCj4gK3Zjc19icm93c2VyID0gImh0dHBzOi8vZ2l0LnByb3htb3guY29tLz9w PXByb3htb3guZ2l0Igo+IGRpZmYgLS1naXQgYS9wcm94bW94LXNlbmRtYWlsL3NyYy9saWIucnMg Yi9wcm94bW94LXNlbmRtYWlsL3NyYy9saWIucnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwLi5lNmNiMjU4ZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9wcm94bW94LXNl bmRtYWlsL3NyYy9saWIucnMKPiBAQCAtMCwwICsxLDc3OSBAQAo+ICsvLyEKPiArLy8hIFRoaXMg bGlicmFyeSBpbXBsZW1lbnRzIHRoZSBbYE1haWxgXSB0cmFpdCB3aGljaCBtYWtlcyBpdCBlYXN5 IHRvIHNlbmQgZW1haWxzIHdpdGggYXR0YWNobWVudHMKPiArLy8hIGFuZCBhbHRlcm5hdGl2ZSBo dG1sIHBhcnRzIHRvIG9uZSBvciBtdWx0aXBsZSByZWNlaXZlcnMgdmlhIGBgc2VuZG1haWxgYC4K PiArLy8hCj4gKwo+ICt1c2Ugc3RkOjppbzo6V3JpdGU7Cj4gK3VzZSBzdGQ6OnByb2Nlc3M6OntD b21tYW5kLCBTdGRpb307Cj4gKwo+ICt1c2UgYW55aG93Ojp7YmFpbCwgQ29udGV4dCwgRXJyb3J9 Owo+ICt1c2UgcGVyY2VudF9lbmNvZGluZzo6e3V0ZjhfcGVyY2VudF9lbmNvZGUsIEFzY2lpU2V0 LCBDT05UUk9MU307Cj4gKwo+ICsvLyBDaGFyYWN0ZXJzIGluIHRoaXMgc2V0IHdpbGwgYmUgZW5j b2RlZCwgc28gcmVwcm9kdWNlIHRoZSBpbnZlcnNlIG9mIHRoZSBzZXQgZGVzY3JpYmVkIGJ5IFJG QzU5ODcKPiArLy8gU2VjdGlvbiAzLjIuMSBgYXR0ci1jaGFyYCwgYXMgdGhhdCBkZXNjcmliZXMg YWxsIGNoYXJhY3RlcnMgdGhhdCAqKmRvbid0KiogbmVlZCBlbmNvZGluZzoKPiArLy8KPiArLy8g aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM1OTg3I3NlY3Rpb24tMy4y LjEKPiArLy8KPiArLy8gYENPTlRST0xTYCBjb250YWlucyBhbGwgY29udHJvbCBjaGFyYWN0ZXJz IDB4MDAgLSAweDFmIGFuZCAweDdmIGFzIHdlbGwgYXMgYWxsIG5vbi1hc2NpaQo+ICsvLyBjaGFy YWN0ZXJzLCBzbyB3ZSBuZWVkIHRvIGFkZCBhbGwgY2hhcmFjdGVycyBoZXJlIHRoYXQgYXJlbid0 IGRlc2NyaWJlZCBpbiBgYXR0ci1jaGFyYCB0aGF0IGFyZQo+ICsvLyBpbiB0aGUgcmFuZ2UgMHgy MC0weDdlCj4gK2NvbnN0IFJGQzU5ODdTRVQ6ICZBc2NpaVNldCA9ICZDT05UUk9MUwo+ICsgICAg LmFkZChiJyAnKQo+ICsgICAgLmFkZChiJyInKQo+ICsgICAgLmFkZChiJyUnKQo+ICsgICAgLmFk ZChiJyYnKQo+ICsgICAgLmFkZChiJ1wnJykKPiArICAgIC5hZGQoYicoJykKPiArICAgIC5hZGQo YicpJykKPiArICAgIC5hZGQoYicqJykKPiArICAgIC5hZGQoYicsJykKPiArICAgIC5hZGQoYicv JykKPiArICAgIC5hZGQoYic6JykKPiArICAgIC5hZGQoYic7JykKPiArICAgIC5hZGQoYic8JykK PiArICAgIC5hZGQoYic9JykKPiArICAgIC5hZGQoYic+JykKPiArICAgIC5hZGQoYic/JykKPiAr ICAgIC5hZGQoYidAJykKPiArICAgIC5hZGQoYidbJykKPiArICAgIC5hZGQoYidcXCcpCj4gKyAg ICAuYWRkKGInXScpCj4gKyAgICAuYWRkKGIneycpCj4gKyAgICAuYWRkKGInfScpOwo+ICsKPiAr c3RydWN0IFJlY2lwaWVudCB7Cj4gKyAgICBuYW1lOiBPcHRpb248U3RyaW5nPiwKPiArICAgIGVt YWlsOiBTdHJpbmcsCj4gK30KPiArCj4gK2ltcGwgUmVjaXBpZW50IHsKPiArICAgIC8vIFJldHVy bnMgdHJ1ZSBpZiB0aGUgbmFtZSBvZiB0aGUgcmVjaXBpZW50IGlzIHVuZGVmaW5lZCBvciBjb250 YWlucyBvbmx5IGFzY2lpIGNoYXJhY3RlcnMKPiArICAgIGZuIGlzX2FzY2lpKCZzZWxmKSAtPiBi b29sIHsKPiArICAgICAgICBzZWxmLm5hbWUuYXNfcmVmKCkubWFwKHxufCBuLmlzX2FzY2lpKCkp LnVud3JhcF9vcih0cnVlKQo+ICsgICAgfQo+ICsKPiArICAgIGZuIGZvcm1hdF9yZWNpcGllbnQo JnNlbGYpIC0+IFN0cmluZyB7Cj4gKyAgICAgICAgaWYgbGV0IFNvbWUobmFtZSkgPSAmc2VsZi5u YW1lIHsKPiArICAgICAgICAgICAgaWYgIW5hbWUuaXNfYXNjaWkoKSB7Cj4gKyAgICAgICAgICAg ICAgICBmb3JtYXQhKCI9P3V0Zi04P0I/e30/PSA8e30+IiwgYmFzZTY0OjplbmNvZGUobmFtZSks IHNlbGYuZW1haWwpCj4gKyAgICAgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICBm b3JtYXQhKCJ7bmFtZX0gPHt9PiIsIHNlbGYuZW1haWwpCj4gKyAgICAgICAgICAgIH0KPiArICAg ICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBzZWxmLmVtYWlsLnRvX3N0cmluZygpCj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdHJ1Y3QgQXR0YWNobWVudDwnYT4gewo+ICsg ICAgZmlsZW5hbWU6IFN0cmluZywKPiArICAgIG1pbWU6IFN0cmluZywKPiArICAgIGNvbnRlbnQ6 ICYnYSBbdThdLAo+ICt9Cj4gKwo+ICtpbXBsPCdhPiBBdHRhY2htZW50PCdhPiB7Cj4gKyAgICBm biBmb3JtYXRfYXR0YWNobWVudCgmc2VsZiwgZmlsZV9ib3VuZGFyeTogJnN0cikgLT4gU3RyaW5n IHsKPiArICAgICAgICB1c2Ugc3RkOjpmbXQ6OldyaXRlOwo+ICsKPiArICAgICAgICBsZXQgbXV0 IGF0dGFjaG1lbnQgPSBTdHJpbmc6Om5ldygpOwo+ICsKPiArICAgICAgICBsZXQgXyA9IHdyaXRl bG4hKGF0dGFjaG1lbnQsICJcbi0te2ZpbGVfYm91bmRhcnl9Iik7Cj4gKyAgICAgICAgbGV0IF8g PSB3cml0ZWxuISgKPiArICAgICAgICAgICAgYXR0YWNobWVudCwKPiArICAgICAgICAgICAgIkNv bnRlbnQtVHlwZToge307IG5hbWU9XCJ7fVwiIiwKPiArICAgICAgICAgICAgc2VsZi5taW1lLCBz ZWxmLmZpbGVuYW1lCj4gKyAgICAgICAgKTsKPiArCj4gKyAgICAgICAgLy8gYm90aCBgZmlsZW5h bWVgIGFuZCBgZmlsZW5hbWUqYCBhcmUgaW5jbHVkZWQgZm9yIGFkZGl0aW9uYWwgY29tcGF0YWJp bGl0eQo+ICsgICAgICAgIGxldCBfID0gd3JpdGVsbiEoCj4gKyAgICAgICAgICAgIGF0dGFjaG1l bnQsCj4gKyAgICAgICAgICAgICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxl bmFtZT1cInt9XCI7IGZpbGVuYW1lKj1VVEYtOCcne30iLAo+ICsgICAgICAgICAgICBzZWxmLmZp bGVuYW1lLAo+ICsgICAgICAgICAgICB1dGY4X3BlcmNlbnRfZW5jb2RlKCZzZWxmLmZpbGVuYW1l LCBSRkM1OTg3U0VUKQo+ICsgICAgICAgICk7Cj4gKyAgICAgICAgYXR0YWNobWVudC5wdXNoX3N0 cigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG5cbiIpOwo+ICsKPiArICAgICAg ICAvLyBiYXNlNjQgZW5jb2RlIHRoZSBhdHRhY2htZW50IGFuZCBoYXJkLXdyYXAgdGhlIGJhc2U2 NCBlbmNvZGVkIHN0cmluZyBldmVyeSA3Mgo+ICsgICAgICAgIC8vIGNoYXJhY3RlcnMuIHRoaXMg aW1wcm92ZXMgY29tcGF0YWJpbGl0eS4KPiArICAgICAgICBhdHRhY2htZW50LnB1c2hfc3RyKAo+ ICsgICAgICAgICAgICAmYmFzZTY0OjplbmNvZGUoc2VsZi5jb250ZW50KQo+ICsgICAgICAgICAg ICAgICAgLmNoYXJzKCkKPiArICAgICAgICAgICAgICAgIC5lbnVtZXJhdGUoKQo+ICsgICAgICAg ICAgICAgICAgLmZsYXRfbWFwKHwoaSwgYyl8IHsKPiArICAgICAgICAgICAgICAgICAgICBpZiBp ICE9IDAgJiYgaSAlIDcyID09IDAgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBTb21lKCdc bicpCj4gKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgTm9uZQo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAg ICAuaW50b19pdGVyKCkKPiArICAgICAgICAgICAgICAgICAgICAuY2hhaW4oc3RkOjppdGVyOjpv bmNlKGMpKQo+ICsgICAgICAgICAgICAgICAgfSkKPiArICAgICAgICAgICAgICAgIC5jb2xsZWN0 Ojo8U3RyaW5nPigpLAo+ICsgICAgICAgICk7Cj4gKwo+ICsgICAgICAgIGF0dGFjaG1lbnQKPiAr ICAgIH0KPiArfQo+ICsKPiArLy8vIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gZGVmaW5lIG1haWxz IHRoYXQgYXJlIHRvIGJlIHNlbnQgdmlhIHRoZSBgc2VuZG1haWxgIGNvbW1hbmQuCj4gK3B1YiBz dHJ1Y3QgTWFpbDwnYT4gewo+ICsgICAgbWFpbF9hdXRob3I6IFN0cmluZywKPiArICAgIG1haWxf ZnJvbTogU3RyaW5nLAo+ICsgICAgc3ViamVjdDogU3RyaW5nLAo+ICsgICAgdG86IFZlYzxSZWNp cGllbnQ+LAo+ICsgICAgYm9keV90eHQ6IFN0cmluZywKPiArICAgIGJvZHlfaHRtbDogT3B0aW9u PFN0cmluZz4sCj4gKyAgICBhdHRhY2htZW50czogVmVjPEF0dGFjaG1lbnQ8J2E+PiwKPiArICAg IG1hc2tfcGFydGljaXBhbnRzOiBib29sLAo+ICt9Cj4gKwo+ICtpbXBsPCdhPiBNYWlsPCdhPiB7 Cj4gKyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBtYWlsIHdpdGggYSBtYWlsIGF1dGhvciwgZnJvbSBh ZGRyZXNzLCBzdWJqZWN0IGxpbmUgYW5kIGEgcGxhaW4gdGV4dCBib2R5Lgo+ICsgICAgLy8vCj4g KyAgICAvLy8gTm90ZTogSWYgdGhlIGF1dGhvcidzIG5hbWUgb3IgdGhlIHN1YmplY3QgbGluZSBj b250YWlucyBVVEYtOCBjaGFyYWN0ZXJzIHRoZXkgd2lsbCBiZQo+ICsgICAgLy8vIGFwcHJvcHJp YXRlbHkgZW5jb2RlZC4KPiArICAgIHB1YiBmbiBuZXcobWFpbF9hdXRob3I6ICZzdHIsIG1haWxf ZnJvbTogJnN0ciwgc3ViamVjdDogJnN0ciwgYm9keV90eHQ6ICZzdHIpIC0+IFNlbGYgewo+ICsg ICAgICAgIFNlbGYgewo+ICsgICAgICAgICAgICBtYWlsX2F1dGhvcjogbWFpbF9hdXRob3IudG9f c3RyaW5nKCksCj4gKyAgICAgICAgICAgIG1haWxfZnJvbTogbWFpbF9mcm9tLnRvX3N0cmluZygp LAo+ICsgICAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0LnRvX3N0cmluZygpLAo+ICsgICAgICAg ICAgICB0bzogVmVjOjpuZXcoKSwKPiArICAgICAgICAgICAgYm9keV90eHQ6IGJvZHlfdHh0LnRv X3N0cmluZygpLAo+ICsgICAgICAgICAgICBib2R5X2h0bWw6IE5vbmUsCj4gKyAgICAgICAgICAg IGF0dGFjaG1lbnRzOiBWZWM6Om5ldygpLAo+ICsgICAgICAgICAgICBtYXNrX3BhcnRpY2lwYW50 czogdHJ1ZSwKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEFkZHMgYSByZWNp cGllbnQgdG8gdGhlIG1haWwgd2l0aG91dCBzcGVjaWZ5aW5nIGEgbmFtZSBzZXBhcmF0ZWx5Lgo+ ICsgICAgLy8vCj4gKyAgICAvLy8gTm90ZTogTm8gZm9ybWF0dGluZyBvciBlbmNvZGluZyB3aWxs IGJlIGRvbmUgaGVyZSwgdGhlIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgVG86YAo+ICsg ICAgLy8vIGhlYWRlciBkaXJlY3RseS4KPiArICAgIHB1YiBmbiBhZGRfcmVjaXBpZW50KCZtdXQg c2VsZiwgZW1haWw6ICZzdHIpIHsKPiArICAgICAgICBzZWxmLnRvLnB1c2goUmVjaXBpZW50IHsK PiArICAgICAgICAgICAgbmFtZTogTm9uZSwKPiArICAgICAgICAgICAgZW1haWw6IGVtYWlsLnRv X3N0cmluZygpLAo+ICsgICAgICAgIH0pOwo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBCdWlsZGVy LXBhdHRlcm4gbWV0aG9kIHRvIGNvbnZlbmllbnRseSBhZGQgYSByZWNpcGllbnQgdG8gYW4gZW1h aWwgd2l0aG91dCBzcGVjaWZ5aW5nIGEKPiArICAgIC8vLyBuYW1lIHNlcGFyYXRlbHkuCj4gKyAg ICAvLy8KPiArICAgIC8vLyBOb3RlOiBObyBmb3JtYXR0aW5nIG9yIGVuY29kaW5nIHdpbGwgYmUg ZG9uZSBoZXJlLCB0aGUgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBUbzpgCj4gKyAgICAv Ly8gaGVhZGVyIGRpcmVjdGx5Lgo+ICsgICAgcHViIGZuIHdpdGhfcmVjaXBpZW50KG11dCBzZWxm LCBlbWFpbDogJnN0cikgLT4gU2VsZiB7Cj4gKyAgICAgICAgc2VsZi5hZGRfcmVjaXBpZW50KGVt YWlsKTsKPiArICAgICAgICBzZWxmCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEFkZHMgYSByZWNp cGllbnQgdG8gdGhlIG1haWwgd2l0aCBhIG5hbWUuCj4gKyAgICAvLy8KPiArICAgIC8vLyBOb3Rl czoKPiArICAgIC8vLwo+ICsgICAgLy8vIC0gSWYgdGhlIG5hbWUgY29udGFpbnMgVVRGLTggY2hh cmFjdGVycyBpdCB3aWxsIGJlIGVuY29kZWQuIFRoZW4gdGhlIHBvc3NpYmx5IGVuY29kZWQgbmFt ZQo+ICsgICAgLy8vICAgYW5kIG5vbi1lbmNvZGVkIGVtYWlsIGFkZHJlc3Mgd2lsbCBiZSBwYXNz ZWQgdG8gdGhlIGBUbzpgIGhlYWRlciBpbiB0aGlzIGZvcm1hdDoKPiArICAgIC8vLyAgIGB7ZW5j b2RlZF9uYW1lfSA8e2VtYWlsfT5gCj4gKyAgICAvLy8gLSBJZiBtdWx0aXBsZSByZWNlaXZlcnMg YXJlIHNwZWNpZmllZCwgdGhleSB3aWxsIGJlIG1hc2tlZCBzbyBhcyBub3QgdG8gZGlzY2xvc2Ug dGhlbSB0bwo+ICsgICAgLy8vICAgb3RoZXIgcmVjZWl2ZXJzLiBUaGlzIGNhbiBiZSBkaXNhYmxl ZCB2aWEgW2BNYWlsOjp1bm1hc2tfcmVjaXBpZW50c2BdIG9yCj4gKyAgICAvLy8gICBbYE1haWw6 OndpdGhfdW5tYXNrZWRfcmVjaXBpZW50c2BdLgo+ICsgICAgcHViIGZuIGFkZF9yZWNpcGllbnRf YW5kX25hbWUoJm11dCBzZWxmLCBuYW1lOiAmc3RyLCBlbWFpbDogJnN0cikgewo+ICsgICAgICAg IHNlbGYudG8ucHVzaChSZWNpcGllbnQgewo+ICsgICAgICAgICAgICBuYW1lOiBTb21lKG5hbWUu dG9fc3RyaW5nKCkpLAo+ICsgICAgICAgICAgICBlbWFpbDogZW1haWwudG9fc3RyaW5nKCksCj4g KyAgICAgICAgfSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEJ1aWxkZXItc3R5bGUgbWV0aG9k IHRvIGNvbnZlbmllbnRseSBhZGQgYSByZWNpcGllbnQgd2l0aCBhIG5hbWUgdG8gYW4gZW1haWwu Cj4gKyAgICAvLy8KPiArICAgIC8vLyBOb3RlczoKPiArICAgIC8vLwo+ICsgICAgLy8vIC0gSWYg dGhlIG5hbWUgY29udGFpbnMgVVRGLTggY2hhcmFjdGVycyBpdCB3aWxsIGJlIGVuY29kZWQuIFRo ZW4gdGhlIHBvc3NpYmx5IGVuY29kZWQgbmFtZQo+ICsgICAgLy8vICAgYW5kIG5vbi1lbmNvZGVk IGVtYWlsIGFkZHJlc3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBUbzpgIGhlYWRlciBpbiB0aGlz IGZvcm1hdDoKPiArICAgIC8vLyAgIGB7ZW5jb2RlZF9uYW1lfSA8e2VtYWlsfT5gCj4gKyAgICAv Ly8gLSBJZiBtdWx0aXBsZSByZWNlaXZlcnMgYXJlIHNwZWNpZmllZCwgdGhleSB3aWxsIGJlIG1h c2tlZCBzbyBhcyBub3QgdG8gZGlzY2xvc2UgdGhlbSB0bwo+ICsgICAgLy8vICAgb3RoZXIgcmVj ZWl2ZXJzLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCB2aWEgW2BNYWlsOjp1bm1hc2tfcmVjaXBpZW50 c2BdIG9yCj4gKyAgICAvLy8gICBbYE1haWw6OndpdGhfdW5tYXNrZWRfcmVjaXBpZW50c2BdLgo+ ICsgICAgcHViIGZuIHdpdGhfcmVjaXBpZW50X2FuZF9uYW1lKG11dCBzZWxmLCBuYW1lOiAmc3Ry LCBlbWFpbDogJnN0cikgLT4gU2VsZiB7Cj4gKyAgICAgICAgc2VsZi5hZGRfcmVjaXBpZW50X2Fu ZF9uYW1lKG5hbWUsIGVtYWlsKTsKPiArICAgICAgICBzZWxmCj4gKyAgICB9Cj4gKwo+ICsgICAg Ly8vIEFkZHMgYW4gYXR0YWNobWVudCB3aXRoIGEgc3BlY2lmaWVkIGZpbGUgbmFtZSBhbmQgbWlt ZS10eXBlIHRvIGFuIGVtYWlsLgo+ICsgICAgLy8vCj4gKyAgICAvLy8gTm90ZTogQWRkaW5nIGF0 dGFjaG1lbnRzIHRyaWdnZXJzIGBtdWx0aXBhcnQvbWl4ZWRgIG1vZGUuCj4gKyAgICBwdWIgZm4g YWRkX2F0dGFjaG1lbnQoJm11dCBzZWxmLCBmaWxlbmFtZTogJnN0ciwgbWltZV90eXBlOiAmc3Ry LCBjb250ZW50OiAmJ2EgW3U4XSkgewo+ICsgICAgICAgIHNlbGYuYXR0YWNobWVudHMucHVzaChB dHRhY2htZW50IHsKPiArICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLnRvX3N0cmluZygp LAo+ICsgICAgICAgICAgICBtaW1lOiBtaW1lX3R5cGUudG9fc3RyaW5nKCksCj4gKyAgICAgICAg ICAgIGNvbnRlbnQsCj4gKyAgICAgICAgfSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEJ1aWxk ZXItc3R5bGUgbWV0aG9kIHRvIGNvbnZlbmllbnRseSBhZGQgYW4gYXR0YWNobWVudCB3aXRoIGEg c3BlY2lmaWMgZmlsZW5hbWUgYW5kCj4gKyAgICAvLy8gbWltZS10eXBlIHRvIGFuIGVtYWlsLgo+ ICsgICAgLy8vCj4gKyAgICAvLy8gTm90ZTogQWRkaW5nIGF0dGFjaGVtZW50cyB0cmlnZ2VycyBg bXVsdGlwYXJ0L21peGVkYCBtb2RlLgo+ICsgICAgcHViIGZuIHdpdGhfYXR0YWNobWVudChtdXQg c2VsZiwgZmlsZW5hbWU6ICZzdHIsIG1pbWVfdHlwZTogJnN0ciwgY29udGVudDogJidhIFt1OF0p IC0+IFNlbGYgewo+ICsgICAgICAgIHNlbGYuYWRkX2F0dGFjaG1lbnQoZmlsZW5hbWUsIG1pbWVf dHlwZSwgY29udGVudCk7Cj4gKyAgICAgICAgc2VsZgo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBT ZXQgYW4gYWx0ZXJuYXRpdmUgSFRNTCBwYXJ0Lgo+ICsgICAgLy8vCj4gKyAgICAvLy8gTm90ZTog VGhpcyB0cmlnZ2VycyBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYCBtb2RlLiBJZiBib3RoIGFuIEhU TUwgcGFydCBhbmQgYXQgbGVhc3Qgb25lCj4gKyAgICAvLy8gYXR0YWNobWVudCBhcmUgc3BlY2lm aWVkLCB0aGUgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWAgcGFydCB3aWxsIGJlIG5lc3RlZCB3aXRo aW4gdGhlIGZpcnN0Cj4gKyAgICAvLy8gYG11bHRpcGFydC9taXhlZGAgcGFydC4gVGhpcyBzaG91 bGQgZW5zdXJlIHRoYXQgdGhlIEhUTUwgaXMgZGlzcGxheWVkIHByb3Blcmx5IGJ5IGNsaWVudCdz Cj4gKyAgICAvLy8gdGhhdCBwcmlvcml0aXplIGl0IG92ZXIgdGhlIHBsYWluIHRleHQgcGFydCAo c2hvdWxkIGJlIHRoZSBkZWZhdWx0IGZvciBtb3N0IGNsaWVudHMpIHdoaWxlCj4gKyAgICAvLy8g YWxzbyBwcm9wZXJseSBkaXNwbGF5aW5nIHRoZSBhdHRhY2htZW50cy4KPiArICAgIHB1YiBmbiBz ZXRfaHRtbF9hbHQoJm11dCBzZWxmLCBib2R5X2h0bWw6ICZzdHIpIHsKPiArICAgICAgICBzZWxm LmJvZHlfaHRtbC5yZXBsYWNlKGJvZHlfaHRtbC50b19zdHJpbmcoKSk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgLy8vIEJ1aWxkZXItc3R5bGUgbWV0aG9kIHRvIGFkZCBhbiBhbHRlcm5hdGl2ZSBIVE1M IHBhcnQuCj4gKyAgICAvLy8KPiArICAgIC8vLyBOb3RlOiBUaGlzIHRyaWdnZXJzIGBtdWx0aXBh cnQvYWx0ZXJuYXRpdmVgIG1vZGUuIElmIGJvdGggYW4gSFRNTCBwYXJ0IGFuZCBhdCBsZWFzdCBv bmUKPiArICAgIC8vLyBhdHRhY2htZW50IGFyZSBzcGVjaWZpZWQsIHRoZSBgbXVsdGlwYXJ0L2Fs dGVybmF0aXZlYCBwYXJ0IHdpbGwgYmUgbmVzdGVkIHdpdGhpbiB0aGUgZmlyc3QKPiArICAgIC8v LyBgbXVsdGlwYXJ0L21peGVkYCBwYXJ0LiBUaGlzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgSFRN TCBpcyBkaXNwbGF5ZWQgcHJvcGVybHkgYnkgY2xpZW50J3MKPiArICAgIC8vLyB0aGF0IHByaW9y aXRpemUgaXQgb3ZlciB0aGUgcGxhaW4gdGV4dCBwYXJ0IChzaG91bGQgYmUgdGhlIGRlZmF1bHQg Zm9yIG1vc3QgY2xpZW50cykgd2hpbGUKPiArICAgIC8vLyBhbHNvIHByb3Blcmx5IGRpc3BsYXlp bmcgdGhlIGF0dGFjaG1lbnRzLgo+ICsgICAgcHViIGZuIHdpdGhfaHRtbF9hbHQobXV0IHNlbGYs IGJvZHlfaHRtbDogJnN0cikgLT4gU2VsZiB7Cj4gKyAgICAgICAgc2VsZi5zZXRfaHRtbF9hbHQo Ym9keV9odG1sKTsKPiArICAgICAgICBzZWxmCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIFRoaXMg ZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIG1haWwgYXJlIG5vdCBtYXNr ZWQuIEJlaW5nIGFibGUgdG8gc2VlIGFsbAo+ICsgICAgLy8vIHJlY2lwaWVudHMgb2YgYSBtYWls IGNhbiBiZSBoZWxwZnVsIGluLCBmb3IgZXhhbXBsZSwgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4K PiArICAgIHB1YiBmbiB1bm1hc2tfcmVjaXBpZW50cygmbXV0IHNlbGYpIHsKPiArICAgICAgICBz ZWxmLm1hc2tfcGFydGljaXBhbnRzID0gZmFsc2U7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIEJ1 aWxkZXItc3R5bGUgZnVuY3Rpb24gdGhhdCBlbnN1cmVzIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUg bWFpbCBhcmUgbm90IG1hc2tlZC4gQmVpbmcgYWJsZQo+ICsgICAgLy8vIHRvIHNlZSBhbGwgcmVj aXBpZW50cyBvZiBhIG1haWwgY2FuIGJlIGhlbHBmdWwgaW4sIGZvciBleGFtcGxlLCBub3RpZmlj YXRpb24gc2NlbmFyaW9zLgo+ICsgICAgcHViIGZuIHdpdGhfdW5tYXNrZWRfcmVjaXBpZW50cyht dXQgc2VsZikgLT4gU2VsZiB7Cj4gKyAgICAgICAgc2VsZi51bm1hc2tfcmVjaXBpZW50cygpOwo+ ICsgICAgICAgIHNlbGYKPiArICAgIH0KPiArCj4gKyAgICAvLy8gU2VuZHMgdGhlIGVtYWlsLiBU aGlzIHdpbGwgZmFpbCBpZiBubyByZWNpcGllbnRzIGhhdmUgYmVlbiBhZGRlZC4KPiArICAgIC8v Lwo+ICsgICAgLy8vIE5vdGU6IEFuIGBBdXRvLVN1Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWRgIGhl YWRlciBpcyBhZGRlZCB0byBhdm9pZCB0cmlnZ2VyaW5nIE9PTyBhbmQKPiArICAgIC8vLyBzaW1p bGFyIG1haWxzLgo+ICsgICAgcHViIGZuIHNlbmQoJnNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+ IHsKPiArICAgICAgICBpZiBzZWxmLnRvLmlzX2VtcHR5KCkgewo+ICsgICAgICAgICAgICBiYWls ISgibm8gcmVjaXBpZW50cyBwcm92aWRlZCBmb3IgdGhlIG1haWwsIGNhbm5vdCBzZW5kIGl0LiIp Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbGV0IG5vdyA9IHByb3htb3hfdGltZTo6ZXBv Y2hfaTY0KCk7Cj4gKyAgICAgICAgbGV0IGJvZHkgPSBzZWxmLmZvcm1hdF9tYWlsKG5vdyk/Owo+ ICsKPiArICAgICAgICBsZXQgbXV0IHNlbmRtYWlsX3Byb2Nlc3MgPSBDb21tYW5kOjpuZXcoIi91 c3Ivc2Jpbi9zZW5kbWFpbCIpCj4gKyAgICAgICAgICAgIC5hcmcoIi1CIikKPiArICAgICAgICAg ICAgLmFyZygiOEJJVE1JTUUiKQo+ICsgICAgICAgICAgICAuYXJnKCItZiIpCj4gKyAgICAgICAg ICAgIC5hcmcoJnNlbGYubWFpbF9mcm9tKQo+ICsgICAgICAgICAgICAuYXJnKCItLSIpCj4gKyAg ICAgICAgICAgIC5hcmdzKHNlbGYudG8uaXRlcigpLm1hcCh8cHwgJnAuZW1haWwpLmNvbGxlY3Q6 OjxWZWM8JlN0cmluZz4+KCkpCj4gKyAgICAgICAgICAgIC5zdGRpbihTdGRpbzo6cGlwZWQoKSkK PiArICAgICAgICAgICAgLnNwYXduKCkKPiArICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCAi Y291bGQgbm90IHNwYXduIHNlbmRtYWlsIHByb2Nlc3MiKT87Cj4gKwo+ICsgICAgICAgIHNlbmRt YWlsX3Byb2Nlc3MKPiArICAgICAgICAgICAgLnN0ZGluCj4gKyAgICAgICAgICAgIC5hc19yZWYo KQo+ICsgICAgICAgICAgICAudW53cmFwKCkKPiArICAgICAgICAgICAgLndyaXRlX2FsbChib2R5 LmFzX2J5dGVzKCkpCj4gKyAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgImNvdWxkbid0IHdy aXRlIHRvIHNlbmRtYWlsIHN0ZGluIik/Owo+ICsKPiArICAgICAgICBzZW5kbWFpbF9wcm9jZXNz Cj4gKyAgICAgICAgICAgIC53YWl0KCkKPiArICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCAi c2VuZG1haWwgZGlkIG5vdCBleGl0IHN1Y2Nlc3NmdWxseSIpPzsKPiArCj4gKyAgICAgICAgT2so KCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgZm4gZm9ybWF0X21haWwoJnNlbGYsIG5vdzogaTY0KSAt PiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4gewo+ICsgICAgICAgIHVzZSBzdGQ6OmZtdDo6V3JpdGU7 Cj4gKwo+ICsgICAgICAgIGxldCBmaWxlX2JvdW5kYXJ5ID0gZm9ybWF0ISgiLS0tLV89X05leHRQ YXJ0XzAwMV97bm93fSIpOwo+ICsgICAgICAgIGxldCBodG1sX2JvdW5kYXJ5ID0gZm9ybWF0ISgi LS0tLV89X05leHRQYXJ0XzAwMl97bm93fSIpOwo+ICsKPiArICAgICAgICBsZXQgbXV0IG1haWwg PSBzZWxmLmZvcm1hdF9oZWFkZXIobm93LCAmZmlsZV9ib3VuZGFyeSwgJmh0bWxfYm91bmRhcnkp PzsKPiArICAgICAgICBtYWlsLnB1c2hfc3RyKCZzZWxmLmZvcm1hdF9ib2R5KCZmaWxlX2JvdW5k YXJ5LCAmaHRtbF9ib3VuZGFyeSk/KTsKPiArCj4gKyAgICAgICAgaWYgIXNlbGYuYXR0YWNobWVu dHMuaXNfZW1wdHkoKSB7Cj4gKyAgICAgICAgICAgIG1haWwucHVzaF9zdHIoCj4gKyAgICAgICAg ICAgICAgICAmc2VsZgo+ICsgICAgICAgICAgICAgICAgICAgIC5hdHRhY2htZW50cwo+ICsgICAg ICAgICAgICAgICAgICAgIC5pdGVyKCkKPiArICAgICAgICAgICAgICAgICAgICAubWFwKHxhfCBh LmZvcm1hdF9hdHRhY2htZW50KCZmaWxlX2JvdW5kYXJ5KSkKPiArICAgICAgICAgICAgICAgICAg ICAuY29sbGVjdDo6PFN0cmluZz4oKSwKPiArICAgICAgICAgICAgKTsKPiArCj4gKyAgICAgICAg ICAgIHdyaXRlIShtYWlsLCAiXG4tLXtmaWxlX2JvdW5kYXJ5fS0tIik/Owo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgT2sobWFpbCkKPiArICAgIH0KPiArCj4gKyAgICBmbiBmb3JtYXRfaGVh ZGVyKAo+ICsgICAgICAgICZzZWxmLAo+ICsgICAgICAgIG5vdzogaTY0LAo+ICsgICAgICAgIGZp bGVfYm91bmRhcnk6ICZzdHIsCj4gKyAgICAgICAgaHRtbF9ib3VuZGFyeTogJnN0ciwKPiArICAg ICkgLT4gUmVzdWx0PFN0cmluZywgRXJyb3I+IHsKPiArICAgICAgICB1c2Ugc3RkOjpmbXQ6Oldy aXRlOwo+ICsKPiArICAgICAgICBsZXQgbXV0IGhlYWRlciA9IFN0cmluZzo6bmV3KCk7Cj4gKwo+ ICsgICAgICAgIGxldCBlbmNvZGVkX3RvID0gaWYgc2VsZi50by5sZW4oKSA+IDEgJiYgc2VsZi5t YXNrX3BhcnRpY2lwYW50cyB7Cj4gKyAgICAgICAgICAgIC8vIGlmIHRoZSByZWNlaXZlcnMgYXJl IG1hc2tlZCwgd2Uga25vdyB0aGF0IHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBlbmNvZGVkCj4gKyAg ICAgICAgICAgIGZhbHNlCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgLy8gY2hl Y2sgaWYgdGhlcmUgaXMgYSByZWNpcGllbnQgdGhhdCBuZWVkcyBlbmNvZGluZwo+ICsgICAgICAg ICAgICBzZWxmLnRvLml0ZXIoKS5hbnkofHJ8ICFyLmlzX2FzY2lpKCkpCj4gKyAgICAgICAgfTsK PiArCj4gKyAgICAgICAgaWYgIXNlbGYuYXR0YWNobWVudHMuaXNfZW1wdHkoKSB7Cj4gKyAgICAg ICAgICAgIGhlYWRlci5wdXNoX3N0cigiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7XG4i KTsKPiArICAgICAgICAgICAgd3JpdGVsbiEoaGVhZGVyLCAiXHRib3VuZGFyeT1cIntmaWxlX2Jv dW5kYXJ5fVwiIik/Owo+ICsgICAgICAgICAgICBoZWFkZXIucHVzaF9zdHIoIk1JTUUtVmVyc2lv bjogMS4wXG4iKTsKPiArICAgICAgICB9IGVsc2UgaWYgc2VsZi5ib2R5X2h0bWwuaXNfc29tZSgp IHsKPiArICAgICAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCJDb250ZW50LVR5cGU6IG11bHRpcGFy dC9hbHRlcm5hdGl2ZTtcbiIpOwo+ICsgICAgICAgICAgICB3cml0ZWxuIShoZWFkZXIsICJcdGJv dW5kYXJ5PVwie2h0bWxfYm91bmRhcnl9XCIiKT87Cj4gKyAgICAgICAgICAgIGhlYWRlci5wdXNo X3N0cigiTUlNRS1WZXJzaW9uOiAxLjBcbiIpOwo+ICsgICAgICAgIH0gZWxzZSBpZiAhc2VsZi5z dWJqZWN0LmlzX2FzY2lpKCkgfHwgIXNlbGYubWFpbF9hdXRob3IuaXNfYXNjaWkoKSB8fCBlbmNv ZGVkX3RvIHsKPiArICAgICAgICAgICAgaGVhZGVyLnB1c2hfc3RyKCJNSU1FLVZlcnNpb246IDEu MFxuIik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAhc2VsZi5zdWJqZWN0LmlzX2Fz Y2lpKCkgewo+ICsgICAgICAgICAgICB3cml0ZWxuISgKPiArICAgICAgICAgICAgICAgIGhlYWRl ciwKPiArICAgICAgICAgICAgICAgICJTdWJqZWN0OiA9P3V0Zi04P0I/e30/PSIsCj4gKyAgICAg ICAgICAgICAgICBiYXNlNjQ6OmVuY29kZSgmc2VsZi5zdWJqZWN0KQo+ICsgICAgICAgICAgICAp PzsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICB3cml0ZWxuIShoZWFkZXIsICJT dWJqZWN0OiB7fSIsIHNlbGYuc3ViamVjdCk/Owo+ICsgICAgICAgIH07Cj4gKwo+ICsgICAgICAg IGlmICFzZWxmLm1haWxfYXV0aG9yLmlzX2FzY2lpKCkgewo+ICsgICAgICAgICAgICB3cml0ZWxu ISgKPiArICAgICAgICAgICAgICAgIGhlYWRlciwKPiArICAgICAgICAgICAgICAgICJGcm9tOiA9 P3V0Zi04P0I/e30/PSA8e30+IiwKPiArICAgICAgICAgICAgICAgIGJhc2U2NDo6ZW5jb2RlKCZz ZWxmLm1haWxfYXV0aG9yKSwKPiArICAgICAgICAgICAgICAgIHNlbGYubWFpbF9mcm9tCj4gKyAg ICAgICAgICAgICk/Owo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIHdyaXRlbG4h KGhlYWRlciwgIkZyb206IHt9IDx7fT4iLCBzZWxmLm1haWxfYXV0aG9yLCBzZWxmLm1haWxfZnJv bSk/Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbGV0IHRvID0gaWYgc2VsZi50by5sZW4o KSA+IDEgJiYgc2VsZi5tYXNrX3BhcnRpY2lwYW50cyB7Cj4gKyAgICAgICAgICAgIC8vIGRvbid0 IGRpc2Nsb3NlIGFsbCByZWNpcGllbnRzIGlmIHRoZSBtYWlsIGdvZXMgb3V0IHRvIG11bHRpcGxl Cj4gKyAgICAgICAgICAgIGxldCByZWNpcGllbnQgPSBSZWNpcGllbnQgewo+ICsgICAgICAgICAg ICAgICAgbmFtZTogU29tZSgiVW5kaXNjbG9zZWQiLnRvX3N0cmluZygpKSwKPiArICAgICAgICAg ICAgICAgIGVtYWlsOiAibm9yZXBseSIudG9fc3RyaW5nKCksCj4gKyAgICAgICAgICAgIH07Cj4g Kwo+ICsgICAgICAgICAgICByZWNpcGllbnQuZm9ybWF0X3JlY2lwaWVudCgpCj4gKyAgICAgICAg fSBlbHNlIHsKPiArICAgICAgICAgICAgc2VsZi50bwo+ICsgICAgICAgICAgICAgICAgLml0ZXIo KQo+ICsgICAgICAgICAgICAgICAgLm1hcChSZWNpcGllbnQ6OmZvcm1hdF9yZWNpcGllbnQpCj4g KyAgICAgICAgICAgICAgICAuY29sbGVjdDo6PFZlYzxTdHJpbmc+PigpCj4gKyAgICAgICAgICAg ICAgICAuam9pbigiLCAiKQo+ICsgICAgICAgIH07Cj4gKwo+ICsgICAgICAgIHdyaXRlbG4hKGhl YWRlciwgIlRvOiB7dG99Iik/Owo+ICsKPiArICAgICAgICBsZXQgcmZjMjgyMl9kYXRlID0gcHJv eG1veF90aW1lOjplcG9jaF90b19yZmMyODIyKG5vdykKPiArICAgICAgICAgICAgLndpdGhfY29u dGV4dCh8fCAiY291bGQgbm90IGNvbnZlcnQgZXBvY2ggdG8gcmZjMjgyMiBkYXRlIik/Owo+ICsg ICAgICAgIHdyaXRlbG4hKGhlYWRlciwgIkRhdGU6IHtyZmMyODIyX2RhdGV9Iik/Owo+ICsgICAg ICAgIGhlYWRlci5wdXNoX3N0cigiQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkO1xuIik7 Cj4gKwo+ICsgICAgICAgIE9rKGhlYWRlcikKPiArICAgIH0KPiArCj4gKyAgICBmbiBmb3JtYXRf Ym9keSgmc2VsZiwgZmlsZV9ib3VuZGFyeTogJnN0ciwgaHRtbF9ib3VuZGFyeTogJnN0cikgLT4g UmVzdWx0PFN0cmluZywgRXJyb3I+IHsKPiArICAgICAgICB1c2Ugc3RkOjpmbXQ6OldyaXRlOwo+ ICsKPiArICAgICAgICBsZXQgbXV0IGJvZHkgPSBTdHJpbmc6Om5ldygpOwo+ICsKPiArICAgICAg ICBpZiBzZWxmLmJvZHlfaHRtbC5pc19zb21lKCkgJiYgIXNlbGYuYXR0YWNobWVudHMuaXNfZW1w dHkoKSB7Cj4gKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoIlxuVGhpcyBpcyBhIG11bHRpLXBh cnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC5cbiIpOwo+ICsgICAgICAgICAgICB3cml0ZWxuIShi b2R5LCAiXG4tLXtmaWxlX2JvdW5kYXJ5fSIpPzsKPiArICAgICAgICAgICAgd3JpdGVsbiEoCj4g KyAgICAgICAgICAgICAgICBib2R5LAo+ICsgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTog bXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT1cIntodG1sX2JvdW5kYXJ5fVwiIgo+ICsg ICAgICAgICAgICApPzsKPiArICAgICAgICAgICAgYm9keS5wdXNoX3N0cigiTUlNRS1WZXJzaW9u OiAxLjBcbiIpOwo+ICsgICAgICAgICAgICB3cml0ZWxuIShib2R5LCAiXG4tLXtodG1sX2JvdW5k YXJ5fSIpPzsKPiArICAgICAgICB9IGVsc2UgaWYgc2VsZi5ib2R5X2h0bWwuaXNfc29tZSgpIHsK PiArICAgICAgICAgICAgYm9keS5wdXNoX3N0cigiXG5UaGlzIGlzIGEgbXVsdGktcGFydCBtZXNz YWdlIGluIE1JTUUgZm9ybWF0LlxuIik7Cj4gKyAgICAgICAgICAgIHdyaXRlbG4hKGJvZHksICJc bi0te2h0bWxfYm91bmRhcnl9Iik/Owo+ICsgICAgICAgIH0gZWxzZSBpZiBzZWxmLmJvZHlfaHRt bC5pc19ub25lKCkgJiYgIXNlbGYuYXR0YWNobWVudHMuaXNfZW1wdHkoKSB7Cj4gKyAgICAgICAg ICAgIGJvZHkucHVzaF9zdHIoIlxuVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1F IGZvcm1hdC5cbiIpOwo+ICsgICAgICAgICAgICB3cml0ZWxuIShib2R5LCAiXG4tLXtmaWxlX2Jv dW5kYXJ5fSIpPzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGJvZHkucHVzaF9zdHIoIkNv bnRlbnQtVHlwZTogdGV4dC9wbGFpbjtcbiIpOwo+ICsgICAgICAgIGJvZHkucHVzaF9zdHIoIlx0 Y2hhcnNldD1cIlVURi04XCJcbiIpOwo+ICsgICAgICAgIGJvZHkucHVzaF9zdHIoIkNvbnRlbnQt VHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcblxuIik7Cj4gKyAgICAgICAgYm9keS5wdXNoX3N0cigm c2VsZi5ib2R5X3R4dCk7Cj4gKwo+ICsgICAgICAgIGlmIGxldCBTb21lKGh0bWwpID0gJnNlbGYu Ym9keV9odG1sIHsKPiArICAgICAgICAgICAgd3JpdGVsbiEoYm9keSwgIlxuLS17aHRtbF9ib3Vu ZGFyeX0iKT87Cj4gKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoIkNvbnRlbnQtVHlwZTogdGV4 dC9odG1sO1xuIik7Cj4gKyAgICAgICAgICAgIGJvZHkucHVzaF9zdHIoIlx0Y2hhcnNldD1cIlVU Ri04XCJcbiIpOwo+ICsgICAgICAgICAgICBib2R5LnB1c2hfc3RyKCJDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiA4Yml0XG5cbiIpOwo+ICsgICAgICAgICAgICBib2R5LnB1c2hfc3RyKGh0bWwp Owo+ICsgICAgICAgICAgICB3cml0ZSEoYm9keSwgIlxuLS17aHRtbF9ib3VuZGFyeX0tLSIpPzsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIE9rKGJvZHkpCj4gKyAgICB9Cj4gK30KPiArCj4g KyNbY2ZnKHRlc3QpXQo+ICttb2QgdGVzdCB7Cj4gKyAgICB1c2Ugc3VwZXI6Oio7Cj4gKwo+ICsg ICAgI1t0ZXN0XQo+ICsgICAgZm4gZW1haWxfd2l0aG91dF9yZWNpcGllbnRzX2ZhaWxzKCkgewo+ ICsgICAgICAgIGxldCByZXN1bHQgPSBNYWlsOjpuZXcoIlNlbmRlciIsICJtYWlsQGV4YW1wbGUu Y29tIiwgImhpIiwgImJvZHkiKS5zZW5kKCk7Cj4gKyAgICAgICAgYXNzZXJ0IShyZXN1bHQuaXNf ZXJyKCkpOwo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHNpbXBsZV9hc2Np aV90ZXh0X21haWwoKSB7Cj4gKyAgICAgICAgbGV0IG1haWwgPSBNYWlsOjpuZXcoCj4gKyAgICAg ICAgICAgICJTZW5kZXIgTmFtZSIsCj4gKyAgICAgICAgICAgICJtYWlsZnJvbUBleGFtcGxlLmNv bSIsCj4gKyAgICAgICAgICAgICJTdWJqZWN0IExpbmUiLAo+ICsgICAgICAgICAgICAiVGhpcyBp cyBqdXN0IGFzY2lpIHRleHQuXG5Ob3RoaW5nIHRvbyBzcGVjaWFsLiIsCj4gKyAgICAgICAgKQo+ ICsgICAgICAgIC53aXRoX3JlY2lwaWVudF9hbmRfbmFtZSgiUmVjZWl2ZXIgTmFtZSIsICJyZWNl aXZlckBleGFtcGxlLmNvbSIpOwo+ICsKPiArICAgICAgICBsZXQgYm9keSA9IG1haWwuZm9ybWF0 X21haWwoMCkuZXhwZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1haWwiKTsKPiArCj4gKyAgICAgICAg YXNzZXJ0X2VxISgKPiArICAgICAgICAgICAgYm9keSwKPiArICAgICAgICAgICAgciMiU3ViamVj dDogU3ViamVjdCBMaW5lCj4gK0Zyb206IFNlbmRlciBOYW1lIDxtYWlsZnJvbUBleGFtcGxlLmNv bT4KPiArVG86IFJlY2VpdmVyIE5hbWUgPHJlY2VpdmVyQGV4YW1wbGUuY29tPgo+ICtEYXRlOiBU aHUsIDAxIEphbiAxOTcwIDAxOjAwOjAwICswMTAwCj4gK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdl bmVyYXRlZDsKPiArQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOwo+ICsJY2hhcnNldD0iVVRGLTgi Cj4gK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKPiArCj4gK1RoaXMgaXMganVzdCBh c2NpaSB0ZXh0Lgo+ICtOb3RoaW5nIHRvbyBzcGVjaWFsLiIjCj4gKyAgICAgICAgKQo+ICsgICAg fQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIG11bHRpcGxlX3JlY2VpdmVyX21hc2tlZCgp IHsKPiArICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5ldygKPiArICAgICAgICAgICAgIlNlbmRl ciBOYW1lIiwKPiArICAgICAgICAgICAgIm1haWxmcm9tQGV4YW1wbGUuY29tIiwKPiArICAgICAg ICAgICAgIlN1YmplY3QgTGluZSIsCj4gKyAgICAgICAgICAgICJUaGlzIGlzIGp1c3QgYXNjaWkg dGV4dC5cbk5vdGhpbmcgdG9vIHNwZWNpYWwuIiwKPiArICAgICAgICApCj4gKyAgICAgICAgLndp dGhfcmVjaXBpZW50X2FuZF9uYW1lKCJSZWNlaXZlciBOYW1lIiwgInJlY2VpdmVyQGV4YW1wbGUu Y29tIikKPiArICAgICAgICAud2l0aF9yZWNpcGllbnQoInR3b0BleGFtcGxlLmNvbSIpCj4gKyAg ICAgICAgLndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJtw6R4IG3DvHN0ZXJtw6RubiIsICJtbUBl eGFtcGxlLmNvbSIpOwo+ICsKPiArICAgICAgICBsZXQgYm9keSA9IG1haWwuZm9ybWF0X21haWwo MCkuZXhwZWN0KCJjb3VsZCBub3QgZm9ybWF0IG1haWwiKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0 X2VxISgKPiArICAgICAgICAgICAgYm9keSwKPiArICAgICAgICAgICAgciMiU3ViamVjdDogU3Vi amVjdCBMaW5lCj4gK0Zyb206IFNlbmRlciBOYW1lIDxtYWlsZnJvbUBleGFtcGxlLmNvbT4KPiAr VG86IFVuZGlzY2xvc2VkIDxub3JlcGx5Pgo+ICtEYXRlOiBUaHUsIDAxIEphbiAxOTcwIDAxOjAw OjAwICswMTAwCj4gK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZDsKPiArQ29udGVudC1U eXBlOiB0ZXh0L3BsYWluOwo+ICsJY2hhcnNldD0iVVRGLTgiCj4gK0NvbnRlbnQtVHJhbnNmZXIt RW5jb2Rpbmc6IDhiaXQKPiArCj4gK1RoaXMgaXMganVzdCBhc2NpaSB0ZXh0Lgo+ICtOb3RoaW5n IHRvbyBzcGVjaWFsLiIjCj4gKyAgICAgICAgKQo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0K PiArICAgIGZuIG11bHRpcGxlX3JlY2VpdmVyX3VubWFza2VkKCkgewo+ICsgICAgICAgIGxldCBt YWlsID0gTWFpbDo6bmV3KAo+ICsgICAgICAgICAgICAiU2VuZGVyIE5hbWUiLAo+ICsgICAgICAg ICAgICAibWFpbGZyb21AZXhhbXBsZS5jb20iLAo+ICsgICAgICAgICAgICAiU3ViamVjdCBMaW5l IiwKPiArICAgICAgICAgICAgIlRoaXMgaXMganVzdCBhc2NpaSB0ZXh0LlxuTm90aGluZyB0b28g c3BlY2lhbC4iLAo+ICsgICAgICAgICkKPiArICAgICAgICAud2l0aF9yZWNpcGllbnRfYW5kX25h bWUoIlJlY2VpdmVyIE5hbWUiLCAicmVjZWl2ZXJAZXhhbXBsZS5jb20iKQo+ICsgICAgICAgIC53 aXRoX3JlY2lwaWVudCgidHdvQGV4YW1wbGUuY29tIikKPiArICAgICAgICAud2l0aF9yZWNpcGll bnRfYW5kX25hbWUoIm3DpHggbcO8c3Rlcm3DpG5uIiwgIm1tQGV4YW1wbGUuY29tIikKPiArICAg ICAgICAud2l0aF91bm1hc2tlZF9yZWNpcGllbnRzKCk7Cj4gKwo+ICsgICAgICAgIGxldCBib2R5 ID0gbWFpbC5mb3JtYXRfbWFpbCgwKS5leHBlY3QoImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIpOwo+ ICsKPiArICAgICAgICBhc3NlcnRfZXEhKAo+ICsgICAgICAgICAgICBib2R5LAo+ICsgICAgICAg ICAgICByIyJNSU1FLVZlcnNpb246IDEuMAo+ICtTdWJqZWN0OiBTdWJqZWN0IExpbmUKPiArRnJv bTogU2VuZGVyIE5hbWUgPG1haWxmcm9tQGV4YW1wbGUuY29tPgo+ICtUbzogUmVjZWl2ZXIgTmFt ZSA8cmVjZWl2ZXJAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20sID0/dXRmLTg/Qj9iY09r ZUNCdHc3eHpkR1Z5YmNPa2JtND0/PSA8bW1AZXhhbXBsZS5jb20+Cj4gK0RhdGU6IFRodSwgMDEg SmFuIDE5NzAgMDE6MDA6MDAgKzAxMDAKPiArQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVk Owo+ICtDb250ZW50LVR5cGU6IHRleHQvcGxhaW47Cj4gKwljaGFyc2V0PSJVVEYtOCIKPiArQ29u dGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAo+ICsKPiArVGhpcyBpcyBqdXN0IGFzY2lpIHRl eHQuCj4gK05vdGhpbmcgdG9vIHNwZWNpYWwuIiMKPiArICAgICAgICApCj4gKyAgICB9Cj4gKwo+ ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gc2ltcGxlX3V0ZjhfdGV4dF9tYWlsKCkgewo+ICsgICAg ICAgIGxldCBtYWlsID0gTWFpbDo6bmV3KAo+ICsgICAgICAgICAgICAiVVRGLTggU2VuZGVyIE5h bWUg8J+TpyIsCj4gKyAgICAgICAgICAgICJkaWZmZXJlbnRmcm9tQGV4YW1wbGUuY29tIiwKPiAr ICAgICAgICAgICAgIlN1YmplY3QgTGluZSDwn6eRIiwKPiArICAgICAgICAgICAgIlRoaXMgdXRm LTggZW1haWwgc2hvdWxkIGhhbmRsZSBlbW9qaXNcbvCfp5Hwn5OnXG5hbmQgd2VpcmQgZ2VybWFu IGNoYXJhY3RlcnM6IMO2w6TDvMOfXG5hbmQgbW9yZS4iLAo+ICsgICAgICAgICkKPiArICAgICAg ICAud2l0aF9yZWNpcGllbnRfYW5kX25hbWUoIlJlY2VpdmVyIE5hbWXwn5OpIiwgInJlY2VpdmVy QGV4YW1wbGUuY29tIik7Cj4gKwo+ICsgICAgICAgIGxldCBib2R5ID0gbWFpbC5mb3JtYXRfbWFp bCgxNzMyODA2MjUxKS5leHBlY3QoImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIpOwo+ICsKPiArICAg ICAgICBhc3NlcnRfZXEhKAo+ICsgICAgICAgICAgICBib2R5LAo+ICsgICAgICAgICAgICByIyJN SU1FLVZlcnNpb246IDEuMAo+ICtTdWJqZWN0OiA9P3V0Zi04P0I/VTNWaWFtVmpkQ0JNYVc1bElQ Q2ZwNUU9Pz0KPiArRnJvbTogPT91dGYtOD9CP1ZWUkdMVGdnVTJWdVpHVnlJRTVoYldVZzhKK1Rw dz09Pz0gPGRpZmZlcmVudGZyb21AZXhhbXBsZS5jb20+Cj4gK1RvOiA9P3V0Zi04P0I/VW1WalpX bDJaWElnVG1GdFpmQ2ZrNms9Pz0gPHJlY2VpdmVyQGV4YW1wbGUuY29tPgo+ICtEYXRlOiBUaHUs IDI4IE5vdiAyMDI0IDE2OjA0OjExICswMTAwCj4gK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVy YXRlZDsKPiArQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOwo+ICsJY2hhcnNldD0iVVRGLTgiCj4g K0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKPiArCj4gK1RoaXMgdXRmLTggZW1haWwg c2hvdWxkIGhhbmRsZSBlbW9qaXMKPiAr8J+nkfCfk6cKPiArYW5kIHdlaXJkIGdlcm1hbiBjaGFy YWN0ZXJzOiDDtsOkw7zDnwo+ICthbmQgbW9yZS4iIwo+ICsgICAgICAgICkKPiArICAgIH0KPiAr Cj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiBtdWx0aXBhcnRfaHRtbF9hbHRlcm5hdGl2ZSgpIHsK PiArICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5ldygKPiArICAgICAgICAgICAgIlNlbmRlciBO YW1lIiwKPiArICAgICAgICAgICAgImZyb21AZXhhbXBsZS5jb20iLAo+ICsgICAgICAgICAgICAi U3ViamVjdCBMaW5lIiwKPiArICAgICAgICAgICAgIkxvcmVtIElwc3VtIERvbG9yIFNpdFxuQW1l dCIsCj4gKyAgICAgICAgKQo+ICsgICAgICAgIC53aXRoX3JlY2lwaWVudCgicmVjZWl2ZXJAZXhh bXBsZS5jb20iKQo+ICsgICAgICAgIC53aXRoX2h0bWxfYWx0KCI8aHRtbCBsYW5nPVwiZGUtYXRc Ij48aGVhZD48L2hlYWQ+PGJvZHk+XG5cdDxwcmU+XG5cdFx0TG9yZW0gSXBzdW0gRG9sb3IgU2l0 IEFtZXRcblx0PC9wcmU+XG48L2JvZHk+PC9odG1sPiIpOwo+ICsgICAgICAgIGxldCBib2R5ID0g bWFpbC5mb3JtYXRfbWFpbCgxNzMyODA2MjUxKS5leHBlY3QoImNvdWxkIG5vdCBmb3JtYXQgbWFp bCIpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoCj4gKyAgICAgICAgICAgIGJvZHksCj4gKyAgICAg ICAgICAgIHIjIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOwo+ICsJYm91bmRh cnk9Ii0tLS1fPV9OZXh0UGFydF8wMDJfMTczMjgwNjI1MSIKPiArTUlNRS1WZXJzaW9uOiAxLjAK PiArU3ViamVjdDogU3ViamVjdCBMaW5lCj4gK0Zyb206IFNlbmRlciBOYW1lIDxmcm9tQGV4YW1w bGUuY29tPgo+ICtUbzogcmVjZWl2ZXJAZXhhbXBsZS5jb20KPiArRGF0ZTogVGh1LCAyOCBOb3Yg MjAyNCAxNjowNDoxMSArMDEwMAo+ICtBdXRvLVN1Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQ7Cj4g Kwo+ICtUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0Lgo+ICsKPiAr LS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEKPiArQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOwo+ICsJY2hhcnNldD0iVVRGLTgiCj4gK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhi aXQKPiArCj4gK0xvcmVtIElwc3VtIERvbG9yIFNpdAo+ICtBbWV0Cj4gKy0tLS0tLV89X05leHRQ YXJ0XzAwMl8xNzMyODA2MjUxCj4gK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOwo+ICsJY2hhcnNl dD0iVVRGLTgiCj4gK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKPiArCj4gKzxodG1s IGxhbmc9ImRlLWF0Ij48aGVhZD48L2hlYWQ+PGJvZHk+Cj4gKwk8cHJlPgo+ICsJCUxvcmVtIElw c3VtIERvbG9yIFNpdCBBbWV0Cj4gKwk8L3ByZT4KPiArPC9ib2R5PjwvaHRtbD4KPiArLS0tLS0t Xz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEtLSIjCj4gKyAgICAgICAgKQo+ICsgICAgfQo+ICsK PiArICAgICNbdGVzdF0KPiArICAgIGZuIG11bHRpcGFydF9wbGFpbl90ZXh0X2F0dGFjaG1lbnRz X21peGVkKCkgewo+ICsgICAgICAgIGxldCBiaW46IFt1ODsgNjJdID0gWwo+ICsgICAgICAgICAg ICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAw eGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAo+ICsgICAgICAgICAgICAweGRlLCAweGFkLCAw eGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVm LCAweGRlLCAweGFkLAo+ICsgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRl LCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAo+ ICsgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAw eGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAo+ICsgICAgICAgICAgICAw eGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAo+ICsgICAgICAgIF07Cj4gKwo+ICsg ICAgICAgIGxldCBtYWlsID0gTWFpbDo6bmV3KAo+ICsgICAgICAgICAgICAiU2VuZGVyIE5hbWUi LAo+ICsgICAgICAgICAgICAiZnJvbUBleGFtcGxlLmNvbSIsCj4gKyAgICAgICAgICAgICJTdWJq ZWN0IExpbmUiLAo+ICsgICAgICAgICAgICAiTG9yZW0gSXBzdW0gRG9sb3IgU2l0XG5BbWV0IiwK PiArICAgICAgICApCj4gKyAgICAgICAgLndpdGhfcmVjaXBpZW50X2FuZF9uYW1lKCJSZWNlaXZl ciBOYW1lIiwgInJlY2VpdmVyQGV4YW1wbGUuY29tIikKPiArICAgICAgICAud2l0aF9hdHRhY2ht ZW50KCJkZWFkYmVlZi5iaW4iLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwgJmJpbik7Cj4g Kwo+ICsgICAgICAgIGxldCBib2R5ID0gbWFpbC5mb3JtYXRfbWFpbCgxNzMyODA2MjUxKS5leHBl Y3QoImNvdWxkIG5vdCBmb3JtYXQgbWFpbCIpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoCj4gKyAg ICAgICAgICAgIGJvZHksCj4gKyAgICAgICAgICAgIHIjIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0 L21peGVkOwo+ICsJYm91bmRhcnk9Ii0tLS1fPV9OZXh0UGFydF8wMDFfMTczMjgwNjI1MSIKPiAr TUlNRS1WZXJzaW9uOiAxLjAKPiArU3ViamVjdDogU3ViamVjdCBMaW5lCj4gK0Zyb206IFNlbmRl ciBOYW1lIDxmcm9tQGV4YW1wbGUuY29tPgo+ICtUbzogUmVjZWl2ZXIgTmFtZSA8cmVjZWl2ZXJA ZXhhbXBsZS5jb20+Cj4gK0RhdGU6IFRodSwgMjggTm92IDIwMjQgMTY6MDQ6MTEgKzAxMDAKPiAr QXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkOwo+ICsKPiArVGhpcyBpcyBhIG11bHRpLXBh cnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KPiArCj4gKy0tLS0tLV89X05leHRQYXJ0XzAwMV8x NzMyODA2MjUxCj4gK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKPiArCWNoYXJzZXQ9IlVURi04 Igo+ICtDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Cj4gKwo+ICtMb3JlbSBJcHN1bSBE b2xvciBTaXQKPiArQW1ldAo+ICstLS0tLS1fPV9OZXh0UGFydF8wMDFfMTczMjgwNjI1MQo+ICtD b250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsgbmFtZT0iZGVhZGJlZWYuYmlu Igo+ICtDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iZGVhZGJlZWYu YmluIjsgZmlsZW5hbWUqPVVURi04JydkZWFkYmVlZi5iaW4KPiArQ29udGVudC1UcmFuc2Zlci1F bmNvZGluZzogYmFzZTY0Cj4gKwo+ICszcTIrNzk2dHZ1L2VyYjd2M3EzZXJiN3YzcTIrNzk2dHZ1 L2VyZDZ0dnUvZXJiN3YzcTIrNzk2dDNxMis3OTZ0dnUvZXJiN3YKPiArM3EyKzc5NnR2dTg9Cj4g Ky0tLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUxLS0iIwo+ICsgICAgICAgICkKPiArICAg IH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiBtdWx0aXBhcnRfcGxhaW5fdGV4dF9odG1s X2FsdGVybmF0aXZlX2F0dGFjaG1lbnRzKCkgewo+ICsgICAgICAgIGxldCBiaW46IFt1ODsgNjJd ID0gWwo+ICsgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAw eGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAo+ICsgICAgICAg ICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRl LCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLAo+ICsgICAgICAgICAgICAweGRlLCAweGFk LCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAw eGVmLCAweGRlLCAweGFkLAo+ICsgICAgICAgICAgICAweGRlLCAweGFkLCAweGJlLCAweGVmLCAw eGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFk LAo+ICsgICAgICAgICAgICAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAo+ICsg ICAgICAgIF07Cj4gKwo+ICsgICAgICAgIGxldCBtYWlsID0gTWFpbDo6bmV3KAo+ICsgICAgICAg ICAgICAiU2VuZGVyIE5hbWUiLAo+ICsgICAgICAgICAgICAiZnJvbUBleGFtcGxlLmNvbSIsCj4g KyAgICAgICAgICAgICJTdWJqZWN0IExpbmUiLAo+ICsgICAgICAgICAgICAiTG9yZW0gSXBzdW0g RG9sb3IgU2l0XG5BbWV0IiwKPiArICAgICAgICApCj4gKyAgICAgICAgLndpdGhfcmVjaXBpZW50 X2FuZF9uYW1lKCJSZWNlaXZlciBOYW1lIiwgInJlY2VpdmVyQGV4YW1wbGUuY29tIikKPiArICAg ICAgICAud2l0aF9hdHRhY2htZW50KCJkZWFkYmVlZi5iaW4iLCAiYXBwbGljYXRpb24vb2N0ZXQt c3RyZWFtIiwgJmJpbikKPiArICAgICAgICAud2l0aF9hdHRhY2htZW50KCLwn5CE8J+SgC5iaW4i LCAiaW1hZ2UvYm1wIiwgJmJpbikKPiArICAgICAgICAud2l0aF9odG1sX2FsdCgiPGh0bWwgbGFu Zz1cImRlLWF0XCI+PGhlYWQ+PC9oZWFkPjxib2R5PlxuXHQ8cHJlPlxuXHRcdExvcmVtIElwc3Vt IERvbG9yIFNpdCBBbWV0XG5cdDwvcHJlPlxuPC9ib2R5PjwvaHRtbD4iKTsKPiArCj4gKyAgICAg ICAgbGV0IGJvZHkgPSBtYWlsLmZvcm1hdF9tYWlsKDE3MzI4MDYyNTEpLmV4cGVjdCgiY291bGQg bm90IGZvcm1hdCBtYWlsIik7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoCj4gKyAgICAgICAg ICAgIGJvZHksCj4gKyAgICAgICAgICAgIHIjIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVk Owo+ICsJYm91bmRhcnk9Ii0tLS1fPV9OZXh0UGFydF8wMDFfMTczMjgwNjI1MSIKPiArTUlNRS1W ZXJzaW9uOiAxLjAKPiArU3ViamVjdDogU3ViamVjdCBMaW5lCj4gK0Zyb206IFNlbmRlciBOYW1l IDxmcm9tQGV4YW1wbGUuY29tPgo+ICtUbzogUmVjZWl2ZXIgTmFtZSA8cmVjZWl2ZXJAZXhhbXBs ZS5jb20+Cj4gK0RhdGU6IFRodSwgMjggTm92IDIwMjQgMTY6MDQ6MTEgKzAxMDAKPiArQXV0by1T dWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkOwo+ICsKPiArVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVz c2FnZSBpbiBNSU1FIGZvcm1hdC4KPiArCj4gKy0tLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2 MjUxCj4gK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iLS0t LV89X05leHRQYXJ0XzAwMl8xNzMyODA2MjUxIgo+ICtNSU1FLVZlcnNpb246IDEuMAo+ICsKPiAr LS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEKPiArQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOwo+ICsJY2hhcnNldD0iVVRGLTgiCj4gK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhi aXQKPiArCj4gK0xvcmVtIElwc3VtIERvbG9yIFNpdAo+ICtBbWV0Cj4gKy0tLS0tLV89X05leHRQ YXJ0XzAwMl8xNzMyODA2MjUxCj4gK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOwo+ICsJY2hhcnNl dD0iVVRGLTgiCj4gK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKPiArCj4gKzxodG1s IGxhbmc9ImRlLWF0Ij48aGVhZD48L2hlYWQ+PGJvZHk+Cj4gKwk8cHJlPgo+ICsJCUxvcmVtIElw c3VtIERvbG9yIFNpdCBBbWV0Cj4gKwk8L3ByZT4KPiArPC9ib2R5PjwvaHRtbD4KPiArLS0tLS0t Xz1fTmV4dFBhcnRfMDAyXzE3MzI4MDYyNTEtLQo+ICstLS0tLS1fPV9OZXh0UGFydF8wMDFfMTcz MjgwNjI1MQo+ICtDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsgbmFtZT0i ZGVhZGJlZWYuYmluIgo+ICtDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFt ZT0iZGVhZGJlZWYuYmluIjsgZmlsZW5hbWUqPVVURi04JydkZWFkYmVlZi5iaW4KPiArQ29udGVu dC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0Cj4gKwo+ICszcTIrNzk2dHZ1L2VyYjd2M3EzZXJi N3YzcTIrNzk2dHZ1L2VyZDZ0dnUvZXJiN3YzcTIrNzk2dDNxMis3OTZ0dnUvZXJiN3YKPiArM3Ey Kzc5NnR2dTg9Cj4gKy0tLS0tLV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUxCj4gK0NvbnRlbnQt VHlwZTogaW1hZ2UvYm1wOyBuYW1lPSLwn5CE8J+SgC5iaW4iCj4gK0NvbnRlbnQtRGlzcG9zaXRp b246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSLwn5CE8J+SgC5iaW4iOyBmaWxlbmFtZSo9VVRGLTgn JyVGMCU5RiU5MCU4NCVGMCU5RiU5MiU4MC5iaW4KPiArQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogYmFzZTY0Cj4gKwo+ICszcTIrNzk2dHZ1L2VyYjd2M3EzZXJiN3YzcTIrNzk2dHZ1L2VyZDZ0 dnUvZXJiN3YzcTIrNzk2dDNxMis3OTZ0dnUvZXJiN3YKPiArM3EyKzc5NnR2dTg9Cj4gKy0tLS0t LV89X05leHRQYXJ0XzAwMV8xNzMyODA2MjUxLS0iIwo+ICsgICAgICAgICkKPiArICAgIH0KPiAr Cj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2Zvcm1hdF9tYWlsX211bHRpcGFydCgpIHsK PiArICAgICAgICBsZXQgbWFpbCA9IE1haWw6Om5ldygKPiArICAgICAgICAgICAgIkZyZWQgT29i YXIiLAo+ICsgICAgICAgICAgICAiZm9vYmFyQGV4YW1wbGUuY29tIiwKPiArICAgICAgICAgICAg IlRoaXMgaXMgdGhlIHN1YmplY3QiLAo+ICsgICAgICAgICAgICAiVGhpcyBpcyB0aGUgcGxhaW4g Ym9keSIsCj4gKyAgICAgICAgKQo+ICsgICAgICAgIC53aXRoX3JlY2lwaWVudF9hbmRfbmFtZSgi VG9ueSBFc3QiLCAidGVzdEBleGFtcGxlLmNvbSIpCj4gKyAgICAgICAgLndpdGhfaHRtbF9hbHQo Ijxib2R5PlRoaXMgaXMgdGhlIEhUTUwgYm9keTwvYm9keT4iKTsKPiArCj4gKyAgICAgICAgbGV0 IGJvZHkgPSBtYWlsLmZvcm1hdF9tYWlsKDE3MTg5Nzc4NTApLmV4cGVjdCgiY291bGQgbm90IGZv cm1hdCBtYWlsIik7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoCj4gKyAgICAgICAgICAgIGJv ZHksCj4gKyAgICAgICAgICAgIHIjIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZl Owo+ICsJYm91bmRhcnk9Ii0tLS1fPV9OZXh0UGFydF8wMDJfMTcxODk3Nzg1MCIKPiArTUlNRS1W ZXJzaW9uOiAxLjAKPiArU3ViamVjdDogVGhpcyBpcyB0aGUgc3ViamVjdAo+ICtGcm9tOiBGcmVk IE9vYmFyIDxmb29iYXJAZXhhbXBsZS5jb20+Cj4gK1RvOiBUb255IEVzdCA8dGVzdEBleGFtcGxl LmNvbT4KPiArRGF0ZTogRnJpLCAyMSBKdW4gMjAyNCAxNTo1MDo1MCArMDIwMAo+ICtBdXRvLVN1 Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQ7Cj4gKwo+ICtUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNz YWdlIGluIE1JTUUgZm9ybWF0Lgo+ICsKPiArLS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MTg5Nzc4 NTAKPiArQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOwo+ICsJY2hhcnNldD0iVVRGLTgiCj4gK0Nv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKPiArCj4gK1RoaXMgaXMgdGhlIHBsYWluIGJv ZHkKPiArLS0tLS0tXz1fTmV4dFBhcnRfMDAyXzE3MTg5Nzc4NTAKPiArQ29udGVudC1UeXBlOiB0 ZXh0L2h0bWw7Cj4gKwljaGFyc2V0PSJVVEYtOCIKPiArQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogOGJpdAo+ICsKPiArPGJvZHk+VGhpcyBpcyB0aGUgSFRNTCBib2R5PC9ib2R5Pgo+ICstLS0t LS1fPV9OZXh0UGFydF8wMDJfMTcxODk3Nzg1MC0tIiMKPiArICAgICAgICApOwo+ICsgICAgfQo+ ICt9Cj4gLS0KPiAyLjM5LjUKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlzdHMucHJveG1v eC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8v cGJzLWRldmVsCg==