From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id D205B1FF17C for ; Wed, 20 Aug 2025 09:49:48 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D006D341E5; Wed, 20 Aug 2025 09:51:34 +0200 (CEST) Message-ID: <78e8d646-bd7a-40ed-a184-1ca69a94a442@proxmox.com> Date: Wed, 20 Aug 2025 09:50:54 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: Proxmox Datacenter Manager development discussion , Lukas Wagner References: <20250814075622.51786-1-l.wagner@proxmox.com> <20250814075622.51786-2-l.wagner@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: <20250814075622.51786-2-l.wagner@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1755676211305 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [mod.rs] Subject: Re: [pdm-devel] [PATCH proxmox-datacenter-manager v6 1/6] remote tasks: implement improved cache for remote tasks X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" YWZ0ZXIgbG9va2luZyBhIGJpdCBtb3JlIHRob3JvdWdoIHRoZXJlIGFyZSBhIGZldyAoYWdhaW4g bWlub3IpIHRoaW5ncwppIGZvdW5kCgpvdGhlciB0aGFuIHRoZXNlIChhbmQgdGhlIHRoaW5ncyBp biBteSBwcmV2aW91cyByZXBseSksIHRoaXMgcGF0Y2ggTEdUTQoKCmNvbW1lbnRzIGlubGluZQoK T24gOC8xNC8yNSAwOTo1NiwgTHVrYXMgV2FnbmVyIHdyb3RlOgo+IFRoaXMgY29tbWl0IGFkZHMg YSBuZXcgaW1wbGVtZW50YXRpb24gZm9yIGEgY2FjaGUgZm9yIHJlbW90ZSB0YXNrcywgb25lCj4g dGhhdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgaW4gZm9yIHBy ZXR0eSBtdWNoIGFsbAo+IHVzZSBjYXNlcy4KPiAKPiBJbiBnZW5lcmFsIHN0b3JhZ2Ugd29ya3Mg cHJldHR5IHNpbWlsYXIgdG8gdGhlIHRhc2sgYXJjaGl2ZSB3ZSBhbHJlYWR5Cj4gaGF2ZSBmb3Ig KGxvY2FsKSBQRE0gdGFza3MuCj4gCj4gcm9vdEBwZG0tZGV2Oi92YXIvY2FjaGUvcHJveG1veC1k YXRhY2VudGVyLW1hbmFnZXIvcmVtb3RlLXRhc2tzIyBscyAtbAo+IHRvdGFsIDQwCj4gLXJ3LXIt LXItLSAxIHd3dy1kYXRhIHd3dy1kYXRhICAgICAwIE1hciAxMyAxMzoxOCBhY3RpdmUKPiAtcnct ci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgIDE2NzYgTWFyIDExIDE0OjUxIGFyY2hpdmUuMTc0 MTM1NTQ2Mi56c3QKPiAtcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgICAgIDAgTWFyIDEx IDE0OjUxIGFyY2hpdmUuMTc0MTQ0MTg2Mi56c3QKPiAtcnctci0tci0tIDEgd3d3LWRhdGEgd3d3 LWRhdGEgIDI1MzggTWFyIDExIDE0OjUxIGFyY2hpdmUuMTc0MTUyODI2Mi56c3QKPiAtcnctci0t ci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgIDg0MjggTWFyIDExIDE1OjA3IGFyY2hpdmUuMTc0MTYx NDY2Mi56c3QKPiAtcnctci0tci0tIDEgd3d3LWRhdGEgd3d3LWRhdGEgMTE3NDAgTWFyIDEzIDEw OjE4IGFyY2hpdmUuMTc0MTcwMTA2Mgo+IC1ydy1yLS1yLS0gMSB3d3ctZGF0YSB3d3ctZGF0YSAg MzM2NCBNYXIgMTMgMTM6MTggYXJjaGl2ZS4xNzQxNzg4MjcwCj4gLXJ3LXItLXItLSAxIHd3dy1k YXRhIHd3dy1kYXRhICAgICAwIE1hciAxMyAxMzoxOCBqb3VybmFsCj4gLXJ3LXItLXItLSAxIHd3 dy1kYXRhIHd3dy1kYXRhICAgMjg3IE1hciAxMyAxMzoxOCBzdGF0ZQo+IAo+IFRhc2tzIGFyZSBz dG9yZWQgaW4gdGhlICdhY3RpdmUnIGFuZCBtdWx0aXBsZSAnYXJjaGl2ZScgZmlsZXMuIFJ1bm5p bmcKPiB0YXNrcyBhcmUgcGxhY2VkIGludG8gdGhlICdhY3RpdmUnIGZpbGUsIHRhc2tzIHRoYXQg YXJlIGZpbmlzaGVkIGFyZQo+IHBlcnNpc3RlZCBpbnRvIG9uZSBvZiB0aGUgYXJjaGl2ZSBmaWxl cy4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIHN1ZmZpeGVkCj4gd2l0aCBhIFVOSVggdGltZXN0YW1w IHdoaWNoIHNlcnZlcyBhcyBhIGxvd2VyLWJvdW5kIGZvciBzdGFydCB0aW1lcyBmb3IKPiB0YXNr cyBzdG9yZWQgaW4gdGhpcyBmaWxlLiBFbmNvZGluZyB0aGlzIGxvd2VyLWJvdW5kIGluIHRoZSBm aWxlIG5hbWUKPiBpbnN0ZWFkIG9mIHVzaW5nIGEgbW9yZSB0cmFkaXRpb25hbCBpbmNyZWFzaW5n IGZpbGUgaW5kZXggKC4xLCAuMiwgLjMpCj4gZ2l2ZXMgdXMgdGhlIGJlbmVmaXQgdGhhdCB3ZSBj YW4gZGVjaWRlIGluIHdoaWNoIGZpbGUgYSBuZXdseSBhcnJpdmVkCj4gdGFza3MgYmVsb25ncyBm cm9tIGEgc2luZ2xlIHJlYWRkaXIgY2FsbCwgd2l0aG91dCBldmVuIHJlYWRpbmcgdGhlIGZpbGUK PiBpdHNlbGYuCj4gCj4gT2xkZXIgYXJjaGl2ZSBmaWxlcyBhcmUgYWRkaXRpb25hbGx5IGNvbXBy ZXNzZWQgdXNpbmcgenN0ZC4KPiAKPiBUaGUgc2l6ZSBvZiB0aGUgZW50aXJlIGFyY2hpdmUgY2Fu IGJlIGNvbnRyb2xsZWQgYnkgZG9pbmcgZmlsZQo+ICdyb3RhdGlvbicsIHdoZXJlIHRoZSBhcmNo aXZlIGZpbGUgd2l0aCB0aGUgb2xkZXN0IHRpbWVzdGFtcCBpcyBkZWxldGVkCj4gYW5kIGEgbmV3 IGZpbGUgd2l0aCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaXMgYWRkZWQuIElmICdyb3RhdGlvbicK PiBoYXBwZW5zIGF0IGZpeGVkIGludGVydmFscyAoZS5nLiBvbmNlIGRhaWx5KSwgdGhpcyBnaXZl cyB1cyBhCj4gY29uZmlndXJhYmxlIG51bWJlciBvZiBkYXlzIG9mIHRhc2sgaGlzdG9yeS4gVGhl cmUgaXMgbm8gZGlyZWN0IGNhcCBmb3IKPiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzLCBidXQg dGhpcyBjb3VsZCBiZSBlYXNpbHkgYWRkZWQgYnkgY2hlY2tpbmcKPiB0aGUgc2l6ZSBvZiB0aGUg bW9zdCByZWNlbnQgYXJjaGl2ZSBmaWxlIGFuZCBieSByb3RhdGluZyBlYXJseSBpZiBhCj4gdGhy ZXNob2xkIGlzIGV4Y2VlZGVkLgo+IAo+IFRoZSBmb3JtYXQgaW5zaWRlIHRoZSBmaWxlcyBpcyBh bHNvIHNpbWlsYXIgdG8gdGhlIGxvY2FsIHRhc2sgYXJjaGl2ZSwKPiB3aXRoIG9uZSB0YXNrIGNv cnJlc3BvbmRpbmcgdG8gb25lIGxpbmUgaW4gdGhlIGZpbGUuIE9uZSBrZXkgZGlmZmVyZW5jZQo+ IGlzIHRoYXQgaGVyZSBlYWNoIGxpbmUgaXMgYSBKU09OIG9iamVjdCwgdGhhdCBpcyB0byBtYWtl IGl0IGVhc2llciB0bwo+IGFkZCBhZGRpdGlvbmFsIGRhdGEgbGF0ZXIsIGlmIG5lZWRlZC4gVGhl IEpTT04gb2JqZWN0IGNvbnRhaW5zIHRoZSB0YXNrcwo+IFVQSUQsIHN0YXR1cywgZW5kdGltZSBh bmQgc3RhcnR0aW1lICh0aGUgc3RhcnR0aW1lIGlzIHRlY2huaWNhbGx5IGFsc28KPiBlbmNvZGVk IGluIHRoZSBVUElELCBidXQgaGF2aW5nIGl0IGFzIGEgc2VwYXJhdGUgdmFsdWUgc2ltcGxpZmll ZCBhCj4gY291cGxlIG9mIHRoaW5ncykgRWFjaCBmaWxlIGlzIHNvcnRlZCBieSB0aGUgdGFzaydz IHN0YXJ0IHRpbWUsIHRoZQo+IHlvdW5nZXN0IHRhc2sgY29taW5nIGZpcnN0Lgo+IAo+IE9uZSBr ZXkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgdGFzayBjYWNoZSBhbmQgdGhlIGxvY2FsIHRhc2sg YXJjaGl2ZSBpcwo+IHRoYXQgd2UgbmVlZCB0byBoYW5kbGUgdGFza3MgY29taW5nIGluIG91dC1v Zi1vcmRlciwgZS5nLiBpZiByZW1vdGVzCj4gd2VyZSBub3QgcmVhY2hhYmxlIGZvciBhIGNlcnRh aW4gdGltZS4gVG8gbWFpbnRhaW4gdGhlIG9yZGVyaW5nIGluIHRoZQo+IGZpbGUsIHdlIGhhdmUg dG8gbWVyZ2UgdGhlIG5ld2x5IGFycml2ZWQgdGFza3MgaW50byB0aGUgZXhpc3RpbmcgdGFzawo+ IGZpbGUuIFRoaXMgd2FzIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQgYXZvaWRzIHJlYWRpbmcg dGhlIGVudGlyZSBmaWxlCj4gaW50byBtZW1vcnkgYXQgb25jZSwgZXhwbG9pdGluZyB0aGUgZmFj dCB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUKPiBleGlzdGluZyBmaWxlIGFyZSBhbHJlYWR5IHNv cnRlZC4gVGhpcyBhbGxvd3MgdG8gZG8gYSB6aXBwZXIvbWVyZ2Utc29ydAo+IGxpa2UgYXBwcm9h Y2ggKHNlZSBNZXJnZVRhc2tJdGVyYXRvciBmb3IgZGV0YWlscykuIFRoZSBleGlzdGluZyBmaWxl IGlzCj4gb25seSByZWFkIGxpbmUtYnktbGluZSBhbmQgZmluYWxseSByZXBsYWNlZCBhdG9taWNh bGx5Lgo+IAo+IFNpbmNlIHdlIGFsd2F5cyBuZWVkIHRvIHJld3JpdGUgdGhlIGVudGlyZSBhcmNo aXZlIGZpbGUsIGV2ZW4gaWYgdGhlcmUKPiBpcyBvbmx5IGEgc2luZ2xlIG5ldyB0YXNrIGFkZGVk LCB0aGVyZSBpcyBhbHNvIGEgam91cm5hbC9XQUwgZmlsZS4KPiBXaGVuIGFkZGluZyBuZXcgdGFz a3MsIHRoZXkgd2lsbCBiZSBmaXJzdCBhcHBlbmRlZCB0byB0aGUgam91cm5hbCBmaWxlCj4gYW5k IHRoZW4gbGF0ZXIgYXBwbGllZCB0byB0aGUgYWN0dWFsIGFyY2hpdmUgZmlsZXMuIFRoZSBqb3Vy bmFsIGlzCj4gYXBwbGllZCBhZnRlciBhIGNlcnRhaW4gdGltZSBvciBpZiB0aGUgam91cm5hbCBm aWxlIGl0c2VsZiBncm93cyB0b28KPiBsYXJnZS4KPiAKPiBUaGUgY2FjaGUgYWxzbyBoYXMgYSBz ZXBhcmF0ZSBzdGF0ZSBmaWxlLCBjb250YWluaW5nIGFkZGl0aW9uYWwKPiBpbmZvcm1hdGlvbiwg ZS5nLiBjdXQtb2ZmIHRpbWVzdGFtcHMgZm9yIHRoZSBwb2xsaW5nIHRhc2suIFNvbWUgb2YgdGhl Cj4gZGF0YSBpbiB0aGUgc3RhdGVmaWxlIGlzIHRlY2huaWNhbGx5IGFsc28gY29udGFpbmVkIGlu IHRoZSBhcmNoaXZlCj4gZmlsZXMsIGJ1dCByZWFkaW5nIHRoZSBzdGF0ZSBmaWxlIGlzIG11Y2gg ZmFzdGVyLgo+IAo+IFRoaXMgY29tbWl0IGFsc28gYWRkcyBhbiBlbGFib3JhdGUgc3VpdGUgb2Yg dW5pdCB0ZXN0cyBmb3IgdGhpcyBuZXcKPiBjYWNoZS4gV2hpbGUgYWRkaW5nIHNvbWUgYWRkaXRp b25hbCB3b3JrIHVwIGZyb250LCB0aGV5IHBhaWQgb2ZmCj4gdGhlbXNlbHZlcyBkdXJpbmcgZGV2 ZWxvcG1lbnQgcXVpdGUgcXVpY2tseSwgc2luY2UgdGhlIG92ZXJhbGwgYXBwcm9hY2gKPiBmb3Ig dGhlIGNhY2hlIGNoYW5nZWQgYSBjb3VwbGUgb2YgdGltZXMuIFRoZSB0ZXN0IHN1aXRlIGdhdmUg bWUKPiBjb25maWRlbmNlIHRoYXQgdGhlIGRlc2lnbiBjaGFuZ2VzIGRpZG4ndCBzY3JldyBhbnl0 aGluZyB1cCwgY2F0Y2hpbmcgYQo+IGNvdXBsZSBvZiBidWdzIGluIHRoZSBwcm9jZXNzLgo+IAo+ IEZpbmFsbHksIHNvbWUgY29uY3JldGUgbnVtYmVycyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1w cm92bWVudHMuCj4gQmVuY2htYXJraW5nIHdhcyBkb25lIHVzaW5nIHRoZSAnZmFrZS1yZW1vdGUn IGZlYXR1cmUuIFRoZXJlIHdlcmUgMTAwCj4gcmVtb3RlcywgMTAgUFZFIG5vZGVzIHBlciByZW1v dGUuIFRoZSB0YXNrIGNhY2hlIGNvbnRhaW5lZAo+IGFib3V0IDEuNSBtaWxsaW9uIHRhc2tzLgo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICAg ICAgICAgYWZ0ZXIKPiBsaXN0IG9mIGFjdGl2ZSB0YXNrcyAoKik6ICAgICAgICAgICAgICAgICAg ICAgfjEuM3MgICAgICAgICB+MzAwwrVzCj4gbGlzdCBvZiA1MDAgdGFza3MsIG9mZnNldCAwICgq Kik6ICAgICAgICAgICAgIH4xLjNzICAgICAgICAgfjEuNW1zCj4gbGlzdCBvZiA1MDAgdGFza3Ms IG9mZnNldCAxIG1pbGxpb24gKCoqKik6ICAgIH4xLjNzICAgICAgICAgfjIwMG1zCj4gbGlzdCBv ZiA1MDAgdGFza3MsIG9mZnNldCAwLAo+ICAgICAgMjAwMCB0YXNrcyBpbiBqb3VybmFsICgqKioq KTogICAgICAgICAgICAgICAgICAgICAgICAgICB+NC41bXMKPiBTaXplIG9uIGRpc2s6ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfjUwME1CICAgICAgICB+NDBNQgo+IAo+ICgqKTog IFJlcXVlc3RlZCBieSB0aGUgVUkgZXZlcnkgM3MKPiAoKiopOiBSZXF1ZXN0ZWQgYnkgdGhlIFVJ IHdoZW4gdmlzaXRpbmcgUmVtb3RlcyA+IFRhc2tzCj4gKCoqKik6IEUuZy4gd2hlbiBzY3JvbGxp bmcgdG93YXJkcyB0aGUgYm90dG9tIG9mICdSZW1vdGVzID4gVGFza3MnCj4gKCoqKiopOiBlLmcu IHdoZW4gdGhlIGpvdXJuYWwgaGFzIG5vdCBiZWVuIGFwcGxpZWQgZm9yIGEgd2hpbGUuIFJlYWRp bmcgdGFza3MKPiAgICAgICAgIGZyb20gdGhlIGpvdXJuYWwgaXMgYSBiaXQgbGVzcyBlZmZpY2ll bnQgdGhhbiBmcm9tIHRoZSB0YXNrIGFyY2hpdmUsIHNpbmNlCj4gICAgICAgICB3ZSBoYXZlIHRv IGZ1bGx5IGxvYWQgaXQgaW50byBtZW1vcnkgc28gdGhhdCB3ZSBjYW4gc29ydCB0aGUgdGFza3Mg YW5kCj4gICAgICAgICBhbHNvICByZW1vdmUgcG90ZW50aWFsIGR1cGxpY2F0ZXMKPiAKPiBJbiB0 aGUgb2xkIGltcGxlbWVudGF0aW9uLCB0aGUgYXJjaGl2ZSBmaWxlIHdhcyAqYWx3YXlzKiBmdWxs eQo+IGRlc2VyaWFsaXplZCBhbmQgbG9hZGVkIGludG8gUkFNLCB0aGlzIGlzIHRoZSByZWFzb24g d2h5IHRoZSB0aW1lIG5lZWRlZAo+IGlzIHByZXR0eSBpZGVudGlhbCBmb3IgYWxsIHNjZW5hcmlv cy4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiByZWFkcyB0aGUKPiBhcmNoaXZlIGZpbGVzIG9ubHkg bGluZSBieSBsaW5lLCBhbmQgb25seSA1MDAgdGFza3Mgd2VyZSBsb2FkZWQgaW50byBSQU0KPiBh dCB0aGUgc2FtZSB0aW1lLiBUaGUgaGlnaGVyIHRoZSBvZmZzZXQsIHRoZSBtb3JlIGFyY2hpdmUg bGluZXMvZmlsZXMgd2UKPiBoYXZlIHRvIHNjYW4sIHdoaWNoIGluY3JlYXNlcyB0aGUgdGltZSBu ZWVkZWQgdG8gYWNjZXNzIHRoZSBkYXRhLiBUaGUKPiB0YXNrcyBhcmUgc29ydGVkIGRlc2NlbmRp bmcgYnkgc3RhcnR0aW1lLCBhcyBhIHJlc3VsdCB0aGUgcmVxdWVzdHMgZ2V0Cj4gc2xvd2VyIHRo ZSBmdXJ0aGVyIHlvdSBnbyBiYWNrIGluIGhpc3RvcnkuCj4gCj4gU2lnbmVkLW9mZi1ieTogTHVr YXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNvbT4KPiAtLS0KPiAKPiBOb3RlczoKPiAgICAg IENoYW5nZXMgc2luY2UgdjU6Cj4gICAgICAgIC0gQ2hhbmdlIGZvcm1hdCBvZiBzdGF0ZSBmaWxl LCBpbmNsdWRlIGEgcGVyLW5vZGUgY3V0b2ZmIHRpbWUKPiAgICAgICAgLSBDaGFuZ2UgbG9ja2lu ZyBhcHByb2FjaCwgdXNpbmcgc2VwYXJhdGUgdHlwZXMgdG8gcmVwcmVzZW50Cj4gICAgICAgICAg YSBsb2NrZWQgY2FjaGVkIChSZWFkYWJsZVRhc2tDYWNoZSwgV3JpdGFibGVUYXNrQ2FjaGUpCj4g ICAgICAgICAgKGFzIHN1Z2dlc3RlZCBieSBXb2xmZ2FuZyBhbmQgRG9taW5payBpbmRlcGVuZGVu dGx5KQo+ICAgICAgICAtIFJlbmFtZSAnYWRkX3Rhc2tzJyB0byAndXBkYXRlJywgc2luY2UgaXQg YWxzbyBkcm9wcwo+ICAgICAgICAgIHRyYWNrZWQgdGFza3MgZnJvbSB0aGUgc3RhdGUgZmlsZSwg bW92ZXMgdGFza3MgZnJvbQo+ICAgICAgICAgIHRoZSBhY3RpdmUgZmlsZSB0byB0aGUgYXJjaGl2 ZSwgZXRjLgo+ICAgICAgCj4gICAgICAgIC0gSW5zdGVhZCBvZiBhZGRpbmcgbmV3IHRhc2tzIGRp cmVjdGx5IHRvIHRoZSBhcmNoaXZlLCB0aGV5Cj4gICAgICAgICAgYXJlIGFkZGVkIHRvIGFuIGFw cGVuZC1vbmx5IGpvdXJuYWwgYXQgZmlyc3QuIFRoaXMgYWxsb3dzIHVzIHRvCj4gICAgICAgICAg YmV0dGVyIHJlY292ZXIgZnJvbSBhIGNyYXNoL3NodXRkb3duIHdoaWxlIHdlIGFyZSBhZGRpbmcg dGFza3MsCj4gICAgICAgICAgYXMgd2VsbCBhcyByZWR1Y2UgZGlzayB3cml0ZXMuIFRoZSBsYXR0 ZXIgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQKPiAgICAgICAgICB3ZSBoYXZlIHRvIHJld3JpdGUg dGhlIGFyY2hpdmUgZmlsZSBpbiBpdHMgZW50aXJldHksIGV2ZW4gaWYKPiAgICAgICAgICBvbmx5 IGEgc2luZ2xlIHRhc2sgaXMgYWRkZWQuCj4gICAgICAKPiAgICAgICAgLSBVc2UgenN0ZCBjb21w cmVzc2lvbiBmb3Igb2xkZXIgYXJjaGl2ZSBmaWxlcywgZ3JlYXRseSByZWR1Y2luZwo+ICAgICAg ICAgIHNwYWNlIGNvbnN1bXB0aW9uCj4gICAgICAKPiAgICAgICAgLSBTb21lIGdlbmVyYWwgcmVm YWN0b3JpbmcgdG8gbWFrZSB0aGUgY29kZSBhIGJpdCBuaWNlcgo+ICAgICAgCj4gICAgICBDaGFu Z2VzIHNpbmNlIHY0Ogo+ICAgICAgICAtIFJlYmFzZWQKPiAgICAgIAo+ICAgICAgQ2hhbmdlcyBz aW5jZSB2MzoKPiAgICAgICAgLSBJbmNsdWRlZCBiZW5jaG1hcmsgcmVzdWx0cyBpbiB0aGUgY29t bWl0IG1lc3NhZ2UKPiAgICAgICAgLSBEcm9wIGBwdWJgIGZvciBUYXNrQ2FjaGU6OndyaXRlX3N0 YXRlCj4gICAgICAKPiAgICAgIENoYW5nZXMgc2luY2UgdjI6Cj4gICAgICAgIC0gSW5jb3Jwb3Jh dGUgZmVlZGJhY2sgZnJvbSBXb2xmYW5nICh0aHghKQo+ICAgICAgICAgICAtIGVsaW1pbmF0ZSBv bmUgLmNsb25lKCkKPiAgICAgICAgICAgLSBnZXRfdGFza3Nfd2l0aF9sb2NrOiBkaXJlY3RseSBj cmVhdGUgaXRlcmF0b3Igb3ZlciBQYXRoQnVmCj4gICAgICAgICAgICAgaW5zdGVhZCBvZiBmaXJz dCBjcmVhdGluZyBBcmNoaXZlRmlsZSB2ZWMgYW5kIHRoZSBtYXBwaW5nCj4gICAgICAgICAgIC0g Rml4ZWQgVE9DVE9VIHJhY2UgY29uZGl0aW9uIChjaGVja2VkIFBhdGg6OmV4aXN0cyBpbnN0ZWFk IG9mCj4gICAgICAgICAgICAgdHJ5aW5nIHRoZSBhY3R1YWwgb3BlcmF0aW9uIGFuZCByZWFjdGlu ZyB0byBFcnJvcktpbmQ6Ok5vdEZvdW5kKQo+ICAgICAgICAgICAtIGhhbmRsZSBlcnJvciB3aGVu IHJlcGxhY2luZyAnYWN0aXZlJyBmaWxlCj4gICAgICAgICAgIC0gdW5saW5rIHRlbXAgZmlsZSB3 aGVuIHJlcGxhY2luZyB0aGUgYXJjaGl2ZSBmaWxlIGRpZCBub3Qgd29yawo+ICAgICAgICAgICAt IGF2b2lkIFVURjggZGVjb2Rpbmcgd2hlcmUgbm90IHJlYWxseSBuZWNlc3NhcnkKPiAgICAgICAg LSBBZGRlZCBhIGNvdXBsZSBvZiAuY29udGV4dCgpLy53aXRoX2NvbnRleHQoKSBmb3IgYmV0dGVy IGVycm9yCj4gICAgICAgICAgbWVzc2FnZXMKPiAgICAgICAgLSBFeHRyYWN0ZWQgdGhlIGZpbGUg bmFtZXMgaW50byBjb25zdHMKPiAgICAgICAgLSBGaXhlZCBzb21lIGNsaXBweSBpc3N1ZXMgKC5j bG9uZSgpIGZvciBDcmVhdGVPcHRpb25zIC0gd2hlbgo+ICAgICAgICAgIHRoaXMgc2VyaWVzIHdh cyB3cml0dGVuLCBDcmVhdGVPcHRpb25zIHdlcmUgbm90IENvcHkgeWV0KQo+IAo+ICAgQ2FyZ28u dG9tbCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KPiAgIHNlcnZlci9DYXJn by50b21sICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKPiAgIHNlcnZlci9zcmMvcmVtb3Rl X3Rhc2tzL21vZC5ycyAgICAgICAgfCAgICAyICsKPiAgIHNlcnZlci9zcmMvcmVtb3RlX3Rhc2tz L3Rhc2tfY2FjaGUucnMgfCAxNDg2ICsrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDQgZmls ZXMgY2hhbmdlZCwgMTQ5MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFza19jYWNoZS5ycwo+IAo+IGRp ZmYgLS1naXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9tbAo+IGluZGV4IDY1OGM1M2E3Li4wOGI5 MzczNyAxMDA2NDQKPiAtLS0gYS9DYXJnby50b21sCj4gKysrIGIvQ2FyZ28udG9tbAo+IEBAIC0x MjgsNyArMTI4LDcgQEAgdXJsID0gIjIuMSIKPiAgIHdhbGtkaXIgPSAiMiIKPiAgIHdlYmF1dGhu LXJzLWNvcmUgPSAiMC41Igo+ICAgeGRnID0gIjIuMiIKPiAtenN0ZCA9IHsgdmVyc2lvbiA9ICIw LjEyIiwgZmVhdHVyZXMgPSBbICJiaW5kZ2VuIiBdIH0KPiArenN0ZCA9IHsgdmVyc2lvbiA9ICIw LjEzIiB9Cj4gICAKPiAgICMgTG9jYWwgcGF0aCBvdmVycmlkZXMKPiAgICMgTk9URTogWW91IG11 c3QgcnVuIGBjYXJnbyB1cGRhdGVgIGFmdGVyIGNoYW5naW5nIHRoaXMgZm9yIGl0IHRvIHRha2Ug ZWZmZWN0IQo+IGRpZmYgLS1naXQgYS9zZXJ2ZXIvQ2FyZ28udG9tbCBiL3NlcnZlci9DYXJnby50 b21sCj4gaW5kZXggMmQxZmE1ZDIuLjI0YTJlNDBjIDEwMDY0NAo+IC0tLSBhL3NlcnZlci9DYXJn by50b21sCj4gKysrIGIvc2VydmVyL0NhcmdvLnRvbWwKPiBAQCAtMzIsNiArMzIsNyBAQCB0b2tp byA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgZmVhdHVyZXMgPSBbICJmcyIsICJpby11dGlsIiwgImlv LXN0ZCIsICJtYWNyb3MiLCAibgo+ICAgdG9raW8tc3RyZWFtLndvcmtzcGFjZSA9IHRydWUKPiAg IHRyYWNpbmcud29ya3NwYWNlID0gdHJ1ZQo+ICAgdXJsLndvcmtzcGFjZSA9IHRydWUKPiArenN0 ZC53b3Jrc3BhY2UgPSB0cnVlCj4gICAKPiAgIHByb3htb3gtYWNjZXNzLWNvbnRyb2wgPSB7IHdv cmtzcGFjZSA9IHRydWUsIGZlYXR1cmVzID0gWyAiaW1wbCIgXSB9Cj4gICBwcm94bW94LWFzeW5j LndvcmtzcGFjZSA9IHRydWUKPiBkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9yZW1vdGVfdGFza3Mv bW9kLnJzIGIvc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvbW9kLnJzCj4gaW5kZXggMjM0ZmZhNzYu LjdjOGUzMWVmIDEwMDY0NAo+IC0tLSBhL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycwo+ ICsrKyBiL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycwo+IEBAIC0xOCw2ICsxOCw4IEBA IHVzZSB0b2tpbzo6dGFzazo6Sm9pbkhhbmRsZTsKPiAgIAo+ICAgdXNlIGNyYXRlOjp7YXBpOjpw dmUsIHRhc2tfdXRpbHN9Owo+ICAgCj4gK21vZCB0YXNrX2NhY2hlOwo+ICsKPiAgIC8vLyBHZXQg dGFza3MgZm9yIGFsbCByZW1vdGVzCj4gICAvLyBGSVhNRTogZmlsdGVyIGZvciBwcml2aWxlZ2Vz Cj4gICBwdWIgYXN5bmMgZm4gZ2V0X3Rhc2tzKG1heF9hZ2U6IGk2NCwgZmlsdGVyczogVGFza0Zp bHRlcnMpIC0+IFJlc3VsdDxWZWM8VGFza0xpc3RJdGVtPiwgRXJyb3I+IHsKPiBkaWZmIC0tZ2l0 IGEvc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFza19jYWNoZS5ycyBiL3NlcnZlci9zcmMvcmVt b3RlX3Rhc2tzL3Rhc2tfY2FjaGUucnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwLi4xYmFkYzQyMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zZXJ2ZXIvc3JjL3JlbW90 ZV90YXNrcy90YXNrX2NhY2hlLnJzCj4gQEAgLTAsMCArMSwxNDg2IEBACj4gKy8vISBUYXNrIGNh Y2hlIGltcGxlbWVudGF0aW9uLCBiYXNlZCBvbiByb3RhdGluZyBmaWxlcy4KPiArdXNlIHN0ZDo6 ewo+ICsgICAgY21wOjpPcmRlcmluZywKPiArICAgIGNvbGxlY3Rpb25zOjp7SGFzaE1hcCwgSGFz aFNldH0sCj4gKyAgICBmczo6e0ZpbGUsIE9wZW5PcHRpb25zfSwKPiArICAgIGlvOjp7QnVmUmVh ZCwgQnVmUmVhZGVyLCBCdWZXcml0ZXIsIEVycm9yS2luZCwgTGluZXMsIFdyaXRlfSwKPiArICAg IGl0ZXI6OlBlZWthYmxlLAo+ICsgICAgb3M6OnVuaXg6OmZzOjpNZXRhZGF0YUV4dCwKPiArICAg IHBhdGg6OntQYXRoLCBQYXRoQnVmfSwKPiArICAgIHRpbWU6OntEdXJhdGlvbiwgSW5zdGFudH0s Cj4gK307Cj4gKwo+ICt1c2UgYW55aG93Ojp7Q29udGV4dCwgRXJyb3J9Owo+ICt1c2Ugc2VyZGU6 OntEZXNlcmlhbGl6ZSwgU2VyaWFsaXplfTsKPiArCj4gK3VzZSBwcm94bW94X3N5czo6ZnM6OkNy ZWF0ZU9wdGlvbnM7Cj4gKwo+ICt1c2UgcGRtX2FwaV90eXBlczo6UmVtb3RlVXBpZDsKPiArdXNl IHB2ZV9hcGlfdHlwZXM6OlB2ZVVwaWQ7Cj4gKwo+ICsvLy8gRmlsZW5hbWUgZm9yIHRoZSBmaWxl IGNvbnRhaW5pbmcgcnVubmluZyB0YXNrcy4KPiArY29uc3QgQUNUSVZFX0ZJTEVOQU1FOiAmc3Ry ID0gImFjdGl2ZSI7Cj4gKy8vLyBGaWxlbmFtZSBwcmVmaXggZm9yIGFyY2hpdmUgZmlsZXMuCj4g K2NvbnN0IEFSQ0hJVkVfRklMRU5BTUVfUFJFRklYOiAmc3RyID0gImFyY2hpdmUuIjsKPiArLy8v IEZpbGVuYW1lIGZvciB0aGUgc3RhdGUgZmlsZS4KPiArY29uc3QgU1RBVEVfRklMRU5BTUU6ICZz dHIgPSAic3RhdGUiOwo+ICsvLy8gRmlsZW5hbWUgb2YgdGhlIGFyY2hpdmUgbG9ja2ZpbGUuCj4g K2NvbnN0IExPQ0tGSUxFX0ZJTEVOQU1FOiAmc3RyID0gIi5sb2NrIjsKPiArLy8vIFdyaXRlLWFo ZWFkIGxvZy4KPiArY29uc3QgV0FMX0ZJTEVOQU1FOiAmc3RyID0gImpvdXJuYWwiOwo+ICsKPiAr Ly8vIEZpbGUgbmFtZSBleHRlbnNpb24gZm9yIHpzdGQgY29tcHJlc3NlZCBhcmNoaXZlIGZpbGVz Cj4gK2NvbnN0IFpTVERfRVhURU5TSU9OOiAmc3RyID0gInpzdCI7Cj4gK2NvbnN0IFpTVERfRVhU RU5TSU9OX1dJVEhfRE9UOiAmc3RyID0gIi56c3QiOwo+ICsKPiArLy8vIEl0ZW0gd2hpY2ggY2Fu IGJlIHB1dCBpbnRvIHRoZSB0YXNrIGNhY2hlLgo+ICsjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFNl cmlhbGl6ZSwgRGVzZXJpYWxpemUsIEhhc2gsIFBhcnRpYWxFcSwgRXEpXQo+ICsjW3NlcmRlKHJl bmFtZV9hbGwgPSAia2ViYWItY2FzZSIpXQo+ICtwdWIgc3RydWN0IFRhc2tDYWNoZUl0ZW0gewo+ ICsgICAgLy8vIFRoZSB0YXNrJ3MgVVBJRAo+ICsgICAgcHViIHVwaWQ6IFJlbW90ZVVwaWQsCj4g KyAgICAvLy8gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgd2FzIHN0YXJ0ZWQgKHNlY29uZHMg c2luY2UgdGhlIFVOSVggZXBvY2gpLgo+ICsgICAgLy8vIFRlY2huaWNhbGx5IHRoaXMgaXMgYWxz byBjb250YWluZWQgd2l0aGluIHRoZSBVUElELCBkdXBsaWNhdGluZyBpdCBoZXJlCj4gKyAgICAv Ly8gYWxsb3dzIHVzIHRvIGRpcmVjdGx5IGFjY2VzcyBpdCB3aGVuIHNvcnRpbmcgaW4gbmV3IHRh c2tzLCB3aXRob3V0IGhhdmluZwo+ICsgICAgLy8vIHRvIHBhcnNlIHRoZSBVUElELgo+ICsgICAg cHViIHN0YXJ0dGltZTogaTY0LAo+ICsgICAgI1tzZXJkZShza2lwX3NlcmlhbGl6aW5nX2lmID0g Ik9wdGlvbjo6aXNfbm9uZSIpXQo+ICsgICAgLy8vIFRoZSB0YXNrJ3Mgc3RhdHVzLgo+ICsgICAg cHViIHN0YXR1czogT3B0aW9uPFN0cmluZz4sCj4gKyAgICAjW3NlcmRlKHNraXBfc2VyaWFsaXpp bmdfaWYgPSAiT3B0aW9uOjppc19ub25lIildCj4gKyAgICAvLy8gVGhlIHRhc2sncyBlbmR0aW1l IChzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoKS4KPiArICAgIHB1YiBlbmR0aW1lOiBPcHRp b248aTY0PiwKPiArfQo+ICsKPiArI1tkZXJpdmUoU2VyaWFsaXplLCBEZXNlcmlhbGl6ZSwgRGVm YXVsdCldCj4gKyNbc2VyZGUocmVuYW1lX2FsbCA9ICJrZWJhYi1jYXNlIildCj4gKy8vLyBQZXIg cmVtb3RlIHN0YXRlLgo+ICtzdHJ1Y3QgUmVtb3RlU3RhdGUgewo+ICsgICAgLy8vIFBlci1ub2Rl IHN0YXRlIGZvciB0aGlzIHJlbW90ZS4KPiArICAgIG5vZGVfc3RhdGU6IEhhc2hNYXA8U3RyaW5n LCBOb2RlU3RhdGU+LAo+ICt9Cj4gKwo+ICsjW2Rlcml2ZShTZXJpYWxpemUsIERlc2VyaWFsaXpl LCBEZWZhdWx0KV0KPiArI1tzZXJkZShyZW5hbWVfYWxsID0gImtlYmFiLWNhc2UiKV0KPiArc3Ry dWN0IE5vZGVTdGF0ZSB7Cj4gKyAgICAvLy8gQ3V0b2ZmIHRpbWVzdGFtcCBmb3IgdGhpcyBub2Rl IHdoZW4gZmV0Y2hpbmcgYXJjaGl2ZWQgdGFza3MuCj4gKyAgICBjdXRvZmY6IGk2NCwKPiArfQo+ ICsKPiArLy8vIFN0YXRlIG5lZWRlZCBmb3IgdGFzayBwb2xsaW5nLgo+ICsjW2Rlcml2ZShTZXJp YWxpemUsIERlc2VyaWFsaXplLCBEZWZhdWx0KV0KPiArI1tzZXJkZShyZW5hbWVfYWxsID0gImtl YmFiLWNhc2UiKV0KPiArcHViIHN0cnVjdCBTdGF0ZSB7Cj4gKyAgICAvLy8gTWFwIG9mIHJlbW90 ZSAtPiBtb3N0IHJlY2VudCB0YXNrIHN0YXJ0dGltZSAoVU5JWCBlcG9jaCkgaW4gdGhlIGFyY2hp dmUuCj4gKyAgICAvLy8gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGN1dC1vZmYgd2hlbiByZXF1ZXN0 aW5nIG5ldyB0YXNrIGRhdGEuCj4gKyAgICAjW3NlcmRlKGRlZmF1bHQpXQo+ICsgICAgcmVtb3Rl X3N0YXRlOiBIYXNoTWFwPFN0cmluZywgUmVtb3RlU3RhdGU+LAo+ICsgICAgLy8vIFRyYWNrZWQg dGFza3Mgd2hpY2ggYXJlIHBvbGxlZCBpbiBzaG9ydCBpbnRlcnZhbHMuCj4gKyAgICAjW3NlcmRl KGRlZmF1bHQpXQo+ICsgICAgdHJhY2tlZF90YXNrczogSGFzaFNldDxSZW1vdGVVcGlkPiwKPiAr fQo+ICsKPiAraW1wbCBTdGF0ZSB7Cj4gKyAgICAvLy8gR2V0IHRyYWNrZWQgdGFza3MuCj4gKyAg ICBwdWIgZm4gdHJhY2tlZF90YXNrcygmc2VsZikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gJlJl bW90ZVVwaWQ+IHsKPiArICAgICAgICBzZWxmLnRyYWNrZWRfdGFza3MuaXRlcigpCj4gKyAgICB9 Cj4gKwo+ICsgICAgLy8vIEdldCB0aGUgY3V0b2ZmIHRpbWVzdGFtcCBmb3IgYSBub2RlIG9mIGEg cmVtb3RlLgo+ICsgICAgcHViIGZuIGN1dG9mZl90aW1lc3RhbXAoJnNlbGYsIHJlbW90ZV9pZDog JnN0ciwgbm9kZTogJnN0cikgLT4gT3B0aW9uPGk2ND4gewo+ICsgICAgICAgIHNlbGYucmVtb3Rl X3N0YXRlCj4gKyAgICAgICAgICAgIC5nZXQocmVtb3RlX2lkKQo+ICsgICAgICAgICAgICAuYW5k X3RoZW4ofHJlbW90ZV9zdGF0ZXwgcmVtb3RlX3N0YXRlLm5vZGVfc3RhdGUuZ2V0KG5vZGUpKQo+ ICsgICAgICAgICAgICAubWFwKHxzdGF0ZXwgc3RhdGUuY3V0b2ZmKQo+ICsgICAgfQo+ICsKPiAr ICAgIC8vLyBBZGQgYSBuZXcgdHJhY2tlZCB0YXNrLgo+ICsgICAgZm4gYWRkX3RyYWNrZWRfdGFz aygmbXV0IHNlbGYsIHVwaWQ6IFJlbW90ZVVwaWQpIHsKPiArICAgICAgICBzZWxmLnRyYWNrZWRf dGFza3MuaW5zZXJ0KHVwaWQpOwo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBSZW1vdmUgYSB0cmFj a2VkIHRhc2suCj4gKyAgICBmbiByZW1vdmVfdHJhY2tlZF90YXNrKCZtdXQgc2VsZiwgdXBpZDog JlJlbW90ZVVwaWQpIHsKPiArICAgICAgICBzZWxmLnRyYWNrZWRfdGFza3MucmVtb3ZlKHVwaWQp Owo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBVcGRhdGUgdGhlIHBlci1ub2RlIGN1dG9mZiB0aW1l c3RhbXAgaWYgaXQgaXMgaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLgo+ICsgICAgZm4gdXBk YXRlX2N1dG9mZl90aW1lc3RhbXAoJm11dCBzZWxmLCByZW1vdGVfaWQ6ICZzdHIsIG5vZGU6ICZz dHIsIHN0YXJ0dGltZTogaTY0KSB7Cj4gKyAgICAgICAgbWF0Y2ggc2VsZi5yZW1vdGVfc3RhdGUu Z2V0X211dChyZW1vdGVfaWQpIHsKPiArICAgICAgICAgICAgU29tZShyZW1vdGVfc3RhdGUpID0+ IG1hdGNoIHJlbW90ZV9zdGF0ZS5ub2RlX3N0YXRlLmdldF9tdXQobm9kZSkgewo+ICsgICAgICAg ICAgICAgICAgU29tZShub2RlX3N0YXRlKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbm9k ZV9zdGF0ZS5jdXRvZmYgPSBub2RlX3N0YXRlLmN1dG9mZi5tYXgoc3RhcnR0aW1lKTsKPiArICAg ICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIE5vbmUgPT4gewo+ICsgICAgICAgICAg ICAgICAgICAgIHJlbW90ZV9zdGF0ZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAubm9kZV9z dGF0ZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAuaW5zZXJ0KG5vZGUudG9fc3RyaW5nKCks IE5vZGVTdGF0ZSB7IGN1dG9mZjogc3RhcnR0aW1lIH0pOwo+ICsgICAgICAgICAgICAgICAgfQo+ ICsgICAgICAgICAgICB9LAo+ICsgICAgICAgICAgICBOb25lID0+IHsKPiArICAgICAgICAgICAg ICAgIGxldCBub2RlX3N0YXRlID0KPiArICAgICAgICAgICAgICAgICAgICBIYXNoTWFwOjpmcm9t X2l0ZXIoWyhub2RlLnRvX3N0cmluZygpLCBOb2RlU3RhdGUgeyBjdXRvZmY6IHN0YXJ0dGltZSB9 KV0pOwo+ICsKPiArICAgICAgICAgICAgICAgIHNlbGYucmVtb3RlX3N0YXRlCj4gKyAgICAgICAg ICAgICAgICAgICAgLmluc2VydChyZW1vdGVfaWQudG9fc3RyaW5nKCksIFJlbW90ZVN0YXRlIHsg bm9kZV9zdGF0ZSB9KTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr fQo+ICsKPiArLy8vIENhY2hlIGZvciByZW1vdGUgdGFza3MuCj4gKyNbZGVyaXZlKENsb25lKV0K PiArcHViIHN0cnVjdCBUYXNrQ2FjaGUgewo+ICsgICAgLy8vIFBhdGggd2hlcmUgdGhlIGNhY2hl J3MgZmlsZXMgc2hvdWxkIGJlIHBsYWNlZC4KPiArICAgIGJhc2VfcGF0aDogUGF0aEJ1ZiwKPiAr ICAgIC8vLyBGaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgY2FjaGUncyBmaWxlcy4KPiArICAgIGNy ZWF0ZV9vcHRpb25zOiBDcmVhdGVPcHRpb25zLAo+ICsKPiArICAgIC8vLyBNYXhpbXVtIHNpemUg b2YgdGhlIGpvdXJuYWwuIElmIGl0IGdyb3dzIGxhcmdlciB0aGFuIHNpemUgYWZ0ZXIKPiArICAg IC8vLyB0YXNrcyBoYXZlIGJlZW4gYWRkZWQsIGl0IHdpbGwgYmUgYXBwbGllZCBpbW1lZGlhdGVs eS4KPiArICAgIGpvdXJuYWxfbWF4X3NpemU6IHU2NCwKPiArCj4gKyAgICAvLy8gTWF4aW11bSBu dW1iZXIgb2YgYXJjaGl2ZSBmaWxlcy4gSWYgdGhlIGFyY2hpdmUgaXMgcm90YXRlZCBhbmQgYG1h eF9maWxlc2AgaXMgZXhjZWVkZWQsIHRoZQo+ICsgICAgLy8vIG9sZGVzdCBmaWxsIHdlIGRyb3Bw ZWQKPiArICAgIG1heF9maWxlczogdTMyLAo+ICsKPiArICAgIC8vLyBOdW1iZXIgb2YgdW5jb21w cmVzc2VkIGFyY2hpdmUgZmlsZXMgdG8ga2VlcC4gVGhlc2Ugd2lsbCBiZSB0aGUgbW9zdCByZWNl bnQgb25lcy4KPiArICAgIHVuY29tcHJlc3NlZF9maWxlczogdTMyLAo+ICsKPiArICAgIC8vLyBS b3RhdGUgYXJjaGl2ZSBmaWxlIGlmIGl0IGlzIG9sZGVyIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2Vj b25kcy4KPiArICAgIHJvdGF0ZV9hZnRlcjogdTY0LAo+ICt9Cj4gKwo+ICsvLy8gQSBbYFRhc2tD YWNoZWBdIGxvY2tlZCBmb3Igd3JpdGluZy4KPiArcHViIHN0cnVjdCBXcml0YWJsZVRhc2tDYWNo ZSB7Cj4gKyAgICBjYWNoZTogVGFza0NhY2hlLAo+ICsgICAgbG9jazogVGFza0NhY2hlTG9jaywK PiArfQo+ICsKPiArLy8vIEEgW2BUYXNrQ2FjaGVgXSBsb2NrZWQgZm9yIHJlYWRpbmcuCj4gK3B1 YiBzdHJ1Y3QgUmVhZGFibGVUYXNrQ2FjaGUgewo+ICsgICAgY2FjaGU6IFRhc2tDYWNoZSwKPiAr ICAgIGxvY2s6IFRhc2tDYWNoZUxvY2ssCj4gK30KPiArCj4gKy8vLyBMb2NrIGZvciB0aGUgY2Fj aGUuCj4gKyNbYWxsb3coZGVhZF9jb2RlKV0KPiArc3RydWN0IFRhc2tDYWNoZUxvY2soRmlsZSk7 Cj4gKwo+ICsvLy8gV2hpY2ggdGFza3MgdG8gZmV0Y2ggZnJvbSB0aGUgYXJjaGl2ZS4KPiArcHVi IGVudW0gR2V0VGFza3Mgewo+ICsgICAgLy8vIEdldCBhbGwgdGFza3MsIGZpbmlzaGVkIGFuZCBy dW5uaW5nLgo+ICsgICAgQWxsLAo+ICsgICAgLy8vIE9ubHkgZ2V0IHJ1bm5pbmcgKGFjdGl2ZSkg dGFza3MuCj4gKyAgICBBY3RpdmUsCj4gKyAgICAjW2NmZyh0ZXN0KV0gLy8gVXNlZCBieSB0ZXN0 cywgbWlnaHQgYmUgdXNlZCBieSBwcm9kdWN0aW9uIGNvZGUgaW4gdGhlIGZ1dHVyZQo+ICsgICAg Ly8vIE9ubHkgZ2V0IGZpbmlzaGVkIChhcmNoaXZlZCkgdGFza3MuCj4gKyAgICBBcmNoaXZlZCwK PiArfQo+ICsKPiArLy8vIE1hcCB0aGF0IHN0b3JlcyB3aGV0aGVyIGEgcmVtb3RlIG5vZGUncyB0 YXNrcyB3ZXJlIHN1Y2Nlc3NmdWxseQo+ICsvLy8gZmV0Y2hlZC4KPiArI1tkZXJpdmUoRGVmYXVs dCldCj4gK3B1YiBzdHJ1Y3QgTm9kZUZldGNoU3VjY2Vzc01hcChIYXNoTWFwPChTdHJpbmcsIFN0 cmluZyksIGJvb2w+KTsKPiArCj4gK2ltcGwgTm9kZUZldGNoU3VjY2Vzc01hcCB7Cj4gKyAgICAv Ly8gTWFyayBhIG5vZGUgb2YgYSBnaXZlbiByZW1vdGUgYXMgc3VjY2Vzc2Z1bC4KPiArICAgIHB1 YiBmbiBzZXRfbm9kZV9zdWNjZXNzKCZtdXQgc2VsZiwgcmVtb3RlOiBTdHJpbmcsIG5vZGU6IFN0 cmluZykgewo+ICsgICAgICAgIHNlbGYuMC5pbnNlcnQoKHJlbW90ZSwgbm9kZSksIHRydWUpOwo+ ICsgICAgfQo+ICsKPiArICAgIC8vLyBNYXJrIGEgbm9kZSBvZiBhIGdpdmVuIHJlbW90ZSBhcyBm YWlsZWQuCj4gKyAgICBwdWIgZm4gc2V0X25vZGVfZmFpbHVyZSgmbXV0IHNlbGYsIHJlbW90ZTog U3RyaW5nLCBub2RlOiBTdHJpbmcpIHsKPiArICAgICAgICBzZWxmLjAuaW5zZXJ0KChyZW1vdGUs IG5vZGUpLCBmYWxzZSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIFJldHVybnMgd2hldGhlciB0 YXNrcyBmcm9tIGEgZ2l2ZW4gbm9kZSBvZiBhIHJlbW90ZSB3ZXJlIHN1Y2Nlc3NmdWxseSBmZXRj aGVkLgo+ICsgICAgcHViIGZuIG5vZGVfc3VjY2Vzc2Z1bCgmc2VsZiwgcmVtb3RlOiAmc3RyLCBu b2RlOiAmc3RyKSAtPiBib29sIHsKPiArICAgICAgICBtYXRjaGVzIShzZWxmLjAuZ2V0KCYocmVt b3RlLmludG8oKSwgbm9kZS5pbnRvKCkpKSwgU29tZSh0cnVlKSkKPiArICAgIH0KPiArCj4gKyAg ICAvLy8gTWVyZ2UgdGhpcyBtYXAgd2l0aCBhbm90aGVyLgo+ICsgICAgcHViIGZuIG1lcmdlKCZt dXQgc2VsZiwgb3RoZXI6IFNlbGYpIHsKPiArICAgICAgICBzZWxmLjAuZXh0ZW5kKG90aGVyLjAp Owo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIFJlYWRhYmxlVGFza0NhY2hlIHsKPiArICAgIC8v LyBJdGVyYXRlIG92ZXIgY2FjaGVkIHRhc2tzLgo+ICsgICAgcHViIGZuIGdldF90YXNrcygmc2Vs ZiwgbW9kZTogR2V0VGFza3MpIC0+IFJlc3VsdDxUYXNrQXJjaGl2ZUl0ZXJhdG9yPCdfPiwgRXJy b3I+IHsKPiArICAgICAgICBzZWxmLmNhY2hlCj4gKyAgICAgICAgICAgIC5nZXRfdGFza3NfaW1w bChtb2RlLCAmc2VsZi5sb2NrKQo+ICsgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNy ZWF0ZSB0YXNrIGFyY2hpdmUgaXRlcmF0b3IiKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIFdy aXRhYmxlVGFza0NhY2hlIHsKPiArICAgIC8vLyBDcmVhdGUgaW5pdGlhbCB0YXNrIGFyY2hpdmVz IHRoYXQgY2FuIGJlIGJhY2tmaWxsZWQgd2l0aCB0aGUKPiArICAgIC8vLyByZWNlbnQgdGFzayBo aXN0b3J5IGZyb20gYSByZW1vdGUuCj4gKyAgICAvLy8KPiArICAgIC8vLyBUaGlzIGZ1bmN0aW9u IG9ubHkgaGFzIGFuIGVmZmVjdCBpZiB0aGVyZSBhcmUgbm8gYXJjaGl2ZSBmaWxlcyB5ZXQuCj4g KyAgICBwdWIgZm4gaW5pdCgmc2VsZiwgbm93OiBpNjQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsK PiArICAgICAgICBpZiBzZWxmLmNhY2hlLmFyY2hpdmVfZmlsZXMoJnNlbGYubG9jayk/LmlzX2Vt cHR5KCkgewo+ICsgICAgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLmNhY2hlLm1heF9maWxlcyB7 Cj4gKyAgICAgICAgICAgICAgICBzZWxmLm5ld19maWxlKAo+ICsgICAgICAgICAgICAgICAgICAg IG5vdyAtIChpIGFzIHU2NCAqIHNlbGYuY2FjaGUucm90YXRlX2FmdGVyKSBhcyBpNjQsCj4gKyAg ICAgICAgICAgICAgICAgICAgaSA+PSBzZWxmLmNhY2hlLnVuY29tcHJlc3NlZF9maWxlcywKPiAr ICAgICAgICAgICAgICAgICk/Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgICBPaygoKSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gU3RhcnQgYSBuZXcgYXJjaGl2 ZSBmaWxlIHdpdGggYSBnaXZlbiB0aW1lc3RhbXAuCj4gKyAgICAvLy8gYG5vd2AgaXMgc3VwcG9z ZWQgdG8gYmUgYSBVTklYIHRpbWVzdGFtcCAoc2Vjb25kcykuCj4gKyAgICBmbiBuZXdfZmlsZSgm c2VsZiwgbm93OiBpNjQsIGNvbXByZXNzOiBib29sKSAtPiBSZXN1bHQ8QXJjaGl2ZUZpbGUsIEVy cm9yPiB7Cj4gKyAgICAgICAgbGV0IHN1ZmZpeCA9IGlmIGNvbXByZXNzIHsKPiArICAgICAgICAg ICAgWlNURF9FWFRFTlNJT05fV0lUSF9ET1QKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAg ICAgICAiIgo+ICsgICAgICAgIH07Cj4gKwo+ICsgICAgICAgIGxldCBuZXdfcGF0aCA9IHNlbGYK PiArICAgICAgICAgICAgLmNhY2hlCj4gKyAgICAgICAgICAgIC5iYXNlX3BhdGgKPiArICAgICAg ICAgICAgLmpvaW4oZm9ybWF0ISgie0FSQ0hJVkVfRklMRU5BTUVfUFJFRklYfXtub3d9e3N1ZmZp eH0iKSk7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgZmlsZSA9IEZpbGU6OmNyZWF0ZSgmbmV3X3Bh dGgpPzsKPiArICAgICAgICBzZWxmLmNhY2hlLmNyZWF0ZV9vcHRpb25zLmFwcGx5X3RvKCZtdXQg ZmlsZSwgJm5ld19wYXRoKT87Cj4gKwo+ICsgICAgICAgIGlmIGNvbXByZXNzIHsKPiArICAgICAg ICAgICAgbGV0IGVuY29kZXIgPSB6c3RkOjpzdHJlYW06OndyaXRlOjpFbmNvZGVyOjpuZXcoZmls ZSwgenN0ZDo6REVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCk/Owo+ICsgICAgICAgICAgICBlbmNv ZGVyLmZpbmlzaCgpPzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIE9rKEFyY2hpdmVGaWxl IHsKPiArICAgICAgICAgICAgcGF0aDogbmV3X3BhdGgsCj4gKyAgICAgICAgICAgIGNvbXByZXNz ZWQ6IGNvbXByZXNzLAo+ICsgICAgICAgICAgICBzdGFydHRpbWU6IG5vdywKPiArICAgICAgICB9 KQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBSb3RhdGUgdGFzayBhcmNoaXZlIGlmIHRoZSB0aGUg bmV3ZXN0IGFyY2hpdmUgZmlsZSBpcyBvbGRlciB0aGFuIGByb3RhdGVfYWZ0ZXJgLgo+ICsgICAg Ly8vCj4gKyAgICAvLy8gVGhlIG9sZGVzdCBhcmNoaXZlIGZpbGVzIGFyZSByZW1vdmVkIGlmIHRo ZSB0b3RhbCBudW1iZXIgb2YgYXJjaGl2ZSBmaWxlcyBleGNlZWRzCj4gKyAgICAvLy8gYG1heF9m aWxlc2AuIGBub3dgIGlzIHN1cHBvc2VkIHRvIGJlIGEgVU5JWCB0aW1lc3RhbXAgKHNlY29uZHMp Lgo+ICsgICAgcHViIGZuIHJvdGF0ZSgmc2VsZiwgbm93OiBpNjQpIC0+IFJlc3VsdDxib29sLCBF cnJvcj4gewo+ICsgICAgICAgIGxldCBtdXQgZGlkX3JvdGF0ZSA9IGZhbHNlOwo+ICsgICAgICAg IGxldCBtdXQgYXJjaGl2ZV9maWxlcyA9IHNlbGYuY2FjaGUuYXJjaGl2ZV9maWxlcygmc2VsZi5s b2NrKT87Cj4gKwo+ICsgICAgICAgIG1hdGNoIGFyY2hpdmVfZmlsZXMuZmlyc3QoKSB7Cj4gKyAg ICAgICAgICAgIFNvbWUoYm91bmQpID0+IHsKPiArICAgICAgICAgICAgICAgIGlmIG5vdyA+IGJv dW5kLnN0YXJ0dGltZSAmJiBub3cgLSBib3VuZC5zdGFydHRpbWUgPiBzZWxmLmNhY2hlLnJvdGF0 ZV9hZnRlciBhcyBpNjQgewo+ICsgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfZmlsZSA9IHNl bGYubmV3X2ZpbGUobm93LCBzZWxmLmNhY2hlLnVuY29tcHJlc3NlZF9maWxlcyA9PSAwKT87Cj4g KyAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5pbnNlcnQoMCwgbmV3X2ZpbGUpOwo+ ICsgICAgICAgICAgICAgICAgICAgIGRpZF9yb3RhdGUgPSB0cnVlOwo+ICsKPiArICAgICAgICAg ICAgICAgICAgICBzZWxmLmFwcGx5X2pvdXJuYWwoKT87Cj4gKyAgICAgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgTm9uZSA9PiB7Cj4gKyAgICAgICAgICAgICAg ICBsZXQgbmV3X2ZpbGUgPSBzZWxmLm5ld19maWxlKG5vdywgc2VsZi5jYWNoZS51bmNvbXByZXNz ZWRfZmlsZXMgPT0gMCk/Owo+ICsgICAgICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5pbnNlcnQo MCwgbmV3X2ZpbGUpOwo+ICsgICAgICAgICAgICAgICAgZGlkX3JvdGF0ZSA9IHRydWU7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9qb3VybmFsKCk/Owo+ICsgICAgICAgICAgICB9 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBsZXQgbXV0IGFyY2hpdmVfZmlsZXMgPSBzZWxm LmNhY2hlLmFyY2hpdmVfZmlsZXMoJnNlbGYubG9jayk/Owo+ICsKPiArICAgICAgICB3aGlsZSBh cmNoaXZlX2ZpbGVzLmxlbigpID4gc2VsZi5jYWNoZS5tYXhfZmlsZXMgYXMgdXNpemUgewo+ICsg ICAgICAgICAgICAvLyBVbndyYXAgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBsZW5ndGggY2hlY2sg YWJvdmUKPiArICAgICAgICAgICAgbGV0IHRvX3JlbW92ZSA9IGFyY2hpdmVfZmlsZXMucG9wKCku dW53cmFwKCk7Cj4gKyAgICAgICAgICAgIHN0ZDo6ZnM6OnJlbW92ZV9maWxlKCZ0b19yZW1vdmUu cGF0aCkKPiArICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiZmFpbGVk IHRvIHJlbW92ZSB7fSIsIHRvX3JlbW92ZS5wYXRoLmRpc3BsYXkoKSkpPzsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIGZvciBmaWxlIGluIGFyY2hpdmVfZmlsZXMKPiArICAgICAgICAgICAg Lml0ZXJfbXV0KCkKPiArICAgICAgICAgICAgLnNraXAoc2VsZi5jYWNoZS51bmNvbXByZXNzZWRf ZmlsZXMgYXMgdXNpemUpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpZiAhZmlsZS5jb21w cmVzc2VkIHsKPiArICAgICAgICAgICAgICAgIGZpbGUuY29tcHJlc3Moc2VsZi5jYWNoZS5jcmVh dGVfb3B0aW9ucykKPiArICAgICAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1h dCEoImZhaWxlZCB0byBjb21wcmVzcyB7fSIsIGZpbGUucGF0aC5kaXNwbGF5KCkpKT87Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIE9rKGRpZF9yb3RhdGUpCj4g KyAgICB9Cj4gKwo+ICsgICAgLy8vIEl0ZXJhdGUgb3ZlciBjYWNoZWQgdGFza3MuCj4gKyAgICBw dWIgZm4gZ2V0X3Rhc2tzKCZzZWxmLCBtb2RlOiBHZXRUYXNrcykgLT4gUmVzdWx0PFRhc2tBcmNo aXZlSXRlcmF0b3I8J18+LCBFcnJvcj4gewo+ICsgICAgICAgIHNlbGYuY2FjaGUKPiArICAgICAg ICAgICAgLmdldF90YXNrc19pbXBsKG1vZGUsICZzZWxmLmxvY2spCj4gKyAgICAgICAgICAgIC5j b250ZXh0KCJmYWlsZWQgdG8gY3JlYXRlIHRhc2sgYXJjaGl2ZSBpdGVyYXRvciIpCj4gKyAgICB9 Cj4gKwo+ICsgICAgLy8vIFVwZGF0ZSB0YXNrIGNhY2hlIGNvbnRlbnRzLgo+ICsgICAgLy8vCj4g KyAgICAvLy8gVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IgYWRkaW5nIG5ldyB0YXNrcyB0byB0YXNr cyB0byB0aGUgY2FjaGUsIGJ1dAo+ICsgICAgLy8vIHdpbGwgYWxzbyBoYW5kbGUgZHJvcHBpbmcg ZmluaXNoZWQvZmFpbGVkIHRyYWNrZWQgdGFza3MgZnJvbSB0aGUKPiArICAgIC8vLyBzdGF0ZSBm aWxlIGFuZCBhY3RpdmUgZmlsZS4gVGhpcyBpcyBkb25lIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0 byB1cGRhdGUKPiArICAgIC8vLyB0aGVzZSBmaWxlcyBtdWx0aXBsZSB0aW1lcy4KPiArICAgIC8v Lwo+ICsgICAgLy8vIFJ1bm5pbmcgdGFza3MgKHRhc2tzIHdpdGhvdXQgYW4gZW5kdGltZSkgYXJl IHBsYWNlZCBpbnRvIHRoZSAnYWN0aXZlJyBmaWxlIGluIHRoZQo+ICsgICAgLy8vIHRhc2sgY2Fj aGUgYmFzZSBkaXJlY3RvcnkuIEZpbmlzaGVkIHRhc2tzIGFyZSBzb3J0ZWQgaW50byBgYXJjaGl2 ZS48c3RhcnRpbWU+YCBhcmNoaXZlCj4gKyAgICAvLy8gZmlsZXMsIHdoZXJlIGA8c3RhcnR0aW1l cz5gIGRlbm90ZXMgdGhlIGxvd2VzdCBwZXJtaXR0ZWQgc3RhcnQgdGltZSB0aW1lc3RhbXAgZm9y IGEgZ2l2ZW4KPiArICAgIC8vLyBhcmNoaXZlIGZpbGUuIElmIGEgdGFzayB3aGljaCB3YXMgYWRk ZWQgYXMgcnVubmluZyBwcmV2aW91c2x5IGlzIGFkZGVkIGFnYWluLCB0aGlzIHRpbWUgaW4KPiAr ICAgIC8vLyBhIGZpbmlzaGVkIHN0YXRlLCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgYGFj dGl2ZWAgZmlsZSBhbmQgYWxzbyBzb3J0ZWQgaW50bwo+ICsgICAgLy8vIG9uZSBvZiB0aGUgYXJj aGl2ZSBmaWxlcy4KPiArICAgIC8vLyBTYW1lIGdvZXMgZm9yIHRoZSBsaXN0IG9mIHRyYWNrZWQg dGFza3M7IHRoZSBlbnRyeSBpbiB0aGUgc3RhdGUgZmlsZSB3aWxsIGJlIHJlbW92ZWQuCj4gKyAg ICAvLy8KPiArICAgIC8vLyBDcmFzaCBjb25zaXN0ZW5jeToKPiArICAgIC8vLwo+ICsgICAgLy8v IFRoZSBzdGF0ZSBmaWxlLCB3aGljaCBjb250YWlucyB0aGUgY3V0LW9mZiB0aW1lc3RhbXBzIGZv ciBmdXR1cmUgdGFzayBmZXRjaGluZywgaXMgdXBkYXRlZCBhdCB0aGUKPiArICAgIC8vLyBlbmQg YWZ0ZXIgYWxsIHRhc2tzIGhhdmUgYmVlbiBhZGRlZCBpbnRvIHRoZSBhcmNoaXZlLiBBZGRpbmcg dGFza3MgaXMgYW4gaWRlbXBvdGVudAo+ICsgICAgLy8vIG9wZXJhdGlvbjsgYWRkaW5nIHRoZSAq c2FtZSogdGFzayBtdWx0aXBsZSB0aW1lcyBkb2VzIG5vdCBsZWFkIHRvIGR1cGxpY2F0ZWQgZW50 cmllcyBpbiB0aGUKPiArICAgIC8vLyB0YXNrIGFyY2hpdmUuIEluZGl2aWR1YWwgYXJjaGl2ZSBm aWxlcyBhcmUgdXBkYXRlZCBhdG9taWNhbGx5LCBidXQgc2luY2UKPiArICAgIC8vLyBhZGRpbmcg dGFza3MgY2FuIGludm9sdmUgdXBkYXRpbmcgbXVsdGlwbGUgYXJjaGl2ZSBmaWxlcywgdGhlIGFy Y2hpdmUgY291bGQgZW5kIHVwCj4gKyAgICAvLy8gaW4gYSBwYXJ0aWFsbHktdXBkYXRlZCwgaW5j b25zaXN0ZW50IHN0YXRlIGluIGNhc2Ugb2YgYSBjcmFzaC4KPiArICAgIC8vLyBIb3dldmVyLCBz aW5jZSB0aGUgc3RhdGUgZmlsZSB3aXRoIHRoZSBjdXQtb2ZmIHRpbWVzdGFtcHMgaXMgdXBkYXRl ZCBsYXN0LAo+ICsgICAgLy8vIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgYXJjaGl2ZSBzaG91bGQg YmUgcmVzdG9yZWQgYXQgdGhlIG5leHQgdXBkYXRlIGN5Y2xlIG9mIHRoZSBhcmNoaXZlLgo+ICsg ICAgcHViIGZuIHVwZGF0ZSgKPiArICAgICAgICAmc2VsZiwKPiArICAgICAgICBuZXdfdGFza3M6 IFZlYzxUYXNrQ2FjaGVJdGVtPiwKPiArICAgICAgICB1cGRhdGVfc3RhdGVfZm9yX3JlbW90ZTog Jk5vZGVGZXRjaFN1Y2Nlc3NNYXAsCj4gKyAgICAgICAgZHJvcF90cmFja2VkOiBIYXNoU2V0PFJl bW90ZVVwaWQ+LAo+ICsgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0 IHRhc2tfaXRlciA9IHNlbGYKPiArICAgICAgICAgICAgLmdldF90YXNrcyhHZXRUYXNrczo6QWN0 aXZlKQo+ICsgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBhcmNoaXZlIGl0 ZXJhdG9yIGZvciBhY3RpdmUgdGFza3MiKT87Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgYWN0aXZl X3Rhc2tzID0gSGFzaE1hcDo6ZnJvbV9pdGVyKHRhc2tfaXRlci5maWx0ZXJfbWFwKHx0YXNrfCB7 Cj4gKyAgICAgICAgICAgIGlmICFkcm9wX3RyYWNrZWQuY29udGFpbnMoJnRhc2sudXBpZCkgewo+ ICsgICAgICAgICAgICAgICAgU29tZSgodGFzay51cGlkLmNsb25lKCksIHRhc2spKQo+ICsgICAg ICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICAgTm9uZQo+ICsgICAgICAgICAgICB9 Cj4gKyAgICAgICAgfSkpOwo+ICsKPiArICAgICAgICBsZXQgbXV0IG5ld19maW5pc2hlZF90YXNr cyA9IFZlYzo6bmV3KCk7Cj4gKwo+ICsgICAgICAgIGZvciB0YXNrIGluIG5ld190YXNrcyB7Cj4g KyAgICAgICAgICAgIGlmIHRhc2suZW5kdGltZS5pc19ub25lKCkgewo+ICsgICAgICAgICAgICAg ICAgYWN0aXZlX3Rhc2tzLmluc2VydCh0YXNrLnVwaWQuY2xvbmUoKSwgdGFzayk7Cj4gKyAgICAg ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICBuZXdfZmluaXNoZWRfdGFza3MucHVz aCh0YXNrKTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbGV0 IG11dCBzdGF0ZSA9IHNlbGYucmVhZF9zdGF0ZSgpOwo+ICsKPiArICAgICAgICBmb3IgdXBpZCBp biBkcm9wX3RyYWNrZWQgewo+ICsgICAgICAgICAgICBzdGF0ZS5yZW1vdmVfdHJhY2tlZF90YXNr KCZ1cGlkKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHNlbGYud3JpdGVfdGFza3NfdG9f am91cm5hbCgKPiArICAgICAgICAgICAgbmV3X2ZpbmlzaGVkX3Rhc2tzLAo+ICsgICAgICAgICAg ICAmbXV0IGFjdGl2ZV90YXNrcywKPiArICAgICAgICAgICAgdXBkYXRlX3N0YXRlX2Zvcl9yZW1v dGUsCj4gKyAgICAgICAgICAgICZtdXQgc3RhdGUsCj4gKyAgICAgICAgKT87Cj4gKwo+ICsgICAg ICAgIGxldCBtdXQgYWN0aXZlOiBWZWM8VGFza0NhY2hlSXRlbT4gPSBhY3RpdmVfdGFza3MuaW50 b192YWx1ZXMoKS5jb2xsZWN0KCk7Cj4gKwo+ICsgICAgICAgIGFjdGl2ZS5zb3J0X2J5KGNvbXBh cmVfdGFza3NfcmV2ZXJzZSk7Cj4gKyAgICAgICAgc2VsZi53cml0ZV9hY3RpdmVfdGFza3MoYWN0 aXZlLmludG9faXRlcigpKQo+ICsgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIHdyaXRl IGFjdGl2ZSB0YXNrIGZpbGUgd2hlbiBhZGRpbmcgdGFza3MiKT87Cj4gKyAgICAgICAgc2VsZi53 cml0ZV9zdGF0ZShzdGF0ZSkKPiArICAgICAgICAgICAgLmNvbnRleHQoImZhaWxlZCB0byB1cGRh dGUgdGFzayBhcmNoaXZlIHN0YXRlIGZpbGUgd2hlbiBhZGRpbmcgdGFza3MiKT87Cj4gKwo+ICsg ICAgICAgIHNlbGYuYXBwbHlfam91cm5hbF9pZl90b29fbGFyZ2UoKQo+ICsgICAgICAgICAgICAu Y29udGV4dCgiY291bGQgbm90IGFwcGx5IGpvdXJuYWwgZWFybHkiKT87Cj4gKwo+ICsgICAgICAg IE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgIGZuIHdyaXRlX3Rhc2tzX3RvX2pvdXJuYWwoCj4g KyAgICAgICAgJnNlbGYsCj4gKyAgICAgICAgdGFza3M6IFZlYzxUYXNrQ2FjaGVJdGVtPiwKPiAr ICAgICAgICBhY3RpdmVfdGFza3M6ICZtdXQgSGFzaE1hcDxSZW1vdGVVcGlkLCBUYXNrQ2FjaGVJ dGVtPiwKPiArICAgICAgICBub2RlX3N1Y2Nlc3NfbWFwOiAmTm9kZUZldGNoU3VjY2Vzc01hcCwK PiArICAgICAgICBzdGF0ZTogJm11dCBTdGF0ZSwKPiArICAgICkgLT4gUmVzdWx0PCgpLCBFcnJv cj4gewo+ICsgICAgICAgIGxldCBmaWxlbmFtZSA9IHNlbGYuY2FjaGUuYmFzZV9wYXRoLmpvaW4o V0FMX0ZJTEVOQU1FKTsKPiArICAgICAgICBsZXQgbXV0IGZpbGUgPSBPcGVuT3B0aW9uczo6bmV3 KCkKPiArICAgICAgICAgICAgLmFwcGVuZCh0cnVlKQo+ICsgICAgICAgICAgICAuY3JlYXRlKHRy dWUpCj4gKyAgICAgICAgICAgIC5vcGVuKGZpbGVuYW1lKT87Cj4gKwo+ICsgICAgICAgIGZvciB0 YXNrIGluIHRhc2tzIHsKPiArICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgZmluaXNoZWQgdGFz ayBmcm9tIG91ciBzZXQgb2YgYWN0aXZlIHRhc2tzLgo+ICsgICAgICAgICAgICBhY3RpdmVfdGFz a3MucmVtb3ZlKCZ0YXNrLnVwaWQpOwo+ICsKPiArICAgICAgICAgICAgLy8gVE9ETzo6IEhhbmRs ZSBQQlMgdGFza3MgY29ycmVjdGx5Lgo+ICsgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGF3 a3dhcmQsIG1heWJlIG92ZXJoYXVsIFJlbW90ZVVwaWQgdHlwZSB0byBtYWtlIHRoaXMgZWFzaWVy CgpUaGVyZSBhcmUgaGVscGVyIHR5cGVzL2Z1bmN0aW9ucyBpbiBwcm94bW94LXlldy1jb21wIChv bmx5IHVpKSB0aGF0IGNhbiAKcGFyc2UgYm90aCwgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBtb3Zl IHRoYXQgaW50byBwcm94bW94LXNjaGVtYSBvciBpdCdzIApvd24gY3JhdGUgc28gd2UgY2FuIHJl dXNlIGl0IGhlcmUgd2hlbiB3ZSBuZWVkIGl0Cgphc2lkZSBmcm9tIHRoYXQsIHRoZW9yZXRpY2Fs bHkgd2UgY291bGQga25vdyB3aGljaCB0eXBlIG9mIHJlbW90ZSBpdCBpcywKbm8gPyAod2UgY291 bGQgZWl0aGVyIHNhdmUgdGhhdCBpbmZvIHNvbWV3aGVyZSwgb3Igc2ltcGx5IGNoZWNrIHRoZSAK Y29uZmlnIGZvciBpdCkKCj4gKyAgICAgICAgICAgIG1hdGNoIHRhc2sudXBpZC51cGlkLnBhcnNl Ojo8UHZlVXBpZD4oKSB7Cj4gKyAgICAgICAgICAgICAgICBPayh1cGlkKSA9PiB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgbGV0IG5vZGUgPSAmdXBpZC5ub2RlOwo+ICsgICAgICAgICAgICAgICAg ICAgIGxldCByZW1vdGUgPSB0YXNrLnVwaWQucmVtb3RlKCk7Cj4gKwo+ICsgICAgICAgICAgICAg ICAgICAgIGlmIG5vZGVfc3VjY2Vzc19tYXAubm9kZV9zdWNjZXNzZnVsKHJlbW90ZSwgbm9kZSkg ewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS51cGRhdGVfY3V0b2ZmX3RpbWVzdGFt cCh0YXNrLnVwaWQucmVtb3RlKCksIG5vZGUsIHRhc2suc3RhcnR0aW1lKTsKPiArICAgICAgICAg ICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICBFcnIo ZXJyb3IpID0+IHsKPiArICAgICAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQgbm90 IHBhcnNlIFBWRSBVUElEIC0gbm90IHNhdmluZyB0byB0YXNrIGNhY2hlOiB7ZXJyb3I6I30iKTsK PiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgc2VyZGVfanNvbjo6dG9fd3JpdGVyKCZt dXQgZmlsZSwgJnRhc2spPzsKPiArICAgICAgICAgICAgd3JpdGVsbiEoJmZpbGUpPzsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIGZpbGUuc3luY19hbGwoKT87Cj4gKwo+ICsgICAgICAgIE9r KCgpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2Yg dGhlIGpvdXJuYWwgZmlsZS4KPiArICAgIGZuIGpvdXJuYWxfc2l6ZSgmc2VsZikgLT4gUmVzdWx0 PHU2NCwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgbWV0YWRhdGEgPSBzZWxmCj4gKyAgICAgICAg ICAgIC5jYWNoZQo+ICsgICAgICAgICAgICAuYmFzZV9wYXRoCj4gKyAgICAgICAgICAgIC5qb2lu KFdBTF9GSUxFTkFNRSkKPiArICAgICAgICAgICAgLm1ldGFkYXRhKCkKPiArICAgICAgICAgICAg LmNvbnRleHQoImZhaWxlZCB0byByZWFkIG1ldGFkYXRhIG9mIGpvdXJuYWwgZmlsZSIpPzsKPiAr Cj4gKyAgICAgICAgT2sobWV0YWRhdGEuc2l6ZSgpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBB cHBseSB0aGUgam91cm5hbCBlYXJseSBpZiBpdCBoYXMgZ3Jvd24gbGFyZ2VyIHRoYW4gdGhlIG1h eGltdW0gYWxsb3dlZCBzaXplLgo+ICsgICAgZm4gYXBwbHlfam91cm5hbF9pZl90b29fbGFyZ2Uo JnNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgc2l6ZSA9IHNlbGYu am91cm5hbF9zaXplKCk/Owo+ICsKPiArICAgICAgICBpZiBzaXplID4gc2VsZi5jYWNoZS5qb3Vy bmFsX21heF9zaXplIHsKPiArICAgICAgICAgICAgbG9nOjppbmZvISgidGFzayBjYWNoZSBqb3Vy bmFsIHNpemUge3NpemV9IGJ5dGVzLCBhcHBseWluZyBlYXJseSIpOwo+ICsgICAgICAgICAgICBz ZWxmLmFwcGx5X2pvdXJuYWwoKT87Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBPaygoKSkK PiArICAgIH0KPiArCj4gKyAgICAvLy8gQXBwbHkgdGhlIHRhc2sgam91cm5hbC4KPiArICAgIC8v Lwo+ICsgICAgLy8vIFRoaXMgd2lsbCBtZXJnZSBhbGwgdGFza3MgaW4gdGhlIGpvdXJuYWwgZmls ZSBpbnRvIHRoZSB0YXNrIGFyY2hpdmUuCj4gKyAgICBwdWIgZm4gYXBwbHlfam91cm5hbCgmc2Vs ZikgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCBzdGFydCA9IEluc3RhbnQ6 Om5vdygpOwo+ICsgICAgICAgIGxldCBmaWxlbmFtZSA9IHNlbGYuY2FjaGUuYmFzZV9wYXRoLmpv aW4oV0FMX0ZJTEVOQU1FKTsKPiArCj4gKyAgICAgICAgbGV0IGZpbGUgPSBtYXRjaCBGaWxlOjpv cGVuKCZmaWxlbmFtZSkgewo+ICsgICAgICAgICAgICBPayhmaWxlKSA9PiBCb3g6Om5ldyhCdWZS ZWFkZXI6Om5ldyhmaWxlKSksCj4gKyAgICAgICAgICAgIEVycihlcnIpIGlmIGVyci5raW5kKCkg PT0gRXJyb3JLaW5kOjpOb3RGb3VuZCA9PiByZXR1cm4gT2soKCkpLAo+ICsgICAgICAgICAgICBF cnIoZXJyKSA9PiByZXR1cm4gRXJyKGVyci5pbnRvKCkpLAo+ICsgICAgICAgIH07Cj4gKwo+ICsg ICAgICAgIGxvZzo6aW5mbyEoImFwcGx5aW5nIHRhc2sgY2FjaGUgam91cm5hbCIpOwo+ICsgICAg ICAgIGxldCBpdGVyYXRvciA9IEFyY2hpdmVJdGVyYXRvcjo6bmV3KGZpbGUpOwo+ICsKPiArICAg ICAgICBsZXQgbXV0IHRhc2tzOiBWZWM8VGFza0NhY2hlSXRlbT4gPSBpdGVyYXRvcgo+ICsgICAg ICAgICAgICAuZmlsdGVyX21hcCh8dGFza3wgbWF0Y2ggdGFzayB7Cj4gKyAgICAgICAgICAgICAg ICBPayh0YXNrKSA9PiBTb21lKHRhc2spLAo+ICsgICAgICAgICAgICAgICAgRXJyKGVycikgPT4g ewo+ICsgICAgICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgcmVhZCB0YXNr IGZyb20gam91cm5hbCBmaWxlOiB7ZXJyOiN9Iik7Cj4gKyAgICAgICAgICAgICAgICAgICAgTm9u ZQo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9KQo+ICsgICAgICAgICAgICAu Y29sbGVjdCgpOwo+ICsKPiArICAgICAgICAvLyBUaGUgV0FMIGNvbnRhaW5zIHRhc2tzIGluIGFy Yml0cmFyeSBvcmRlciBzaW5jZSB3ZSBhbHdheXMgYXBwZW5kLgo+ICsgICAgICAgIHRhc2tzLnNv cnRfYnkoY29tcGFyZV90YXNrc19yZXZlcnNlKTsKPiArICAgICAgICB0YXNrcy5kZWR1cCgpOwo+ ICsKPiArICAgICAgICBsZXQgY291bnQgPSB0YXNrcy5sZW4oKTsKPiArCj4gKyAgICAgICAgc2Vs Zi5tZXJnZV90YXNrc19pbnRvX2FyY2hpdmUodGFza3MpPzsKPiArCj4gKyAgICAgICAgLy8gdHJ1 bmNhdGUgdGhlIGpvdXJuYWwgZmlsZQo+ICsgICAgICAgIE9wZW5PcHRpb25zOjpuZXcoKQo+ICsg ICAgICAgICAgICAud3JpdGUodHJ1ZSkKPiArICAgICAgICAgICAgLnRydW5jYXRlKHRydWUpCj4g KyAgICAgICAgICAgIC5vcGVuKGZpbGVuYW1lKQo+ICsgICAgICAgICAgICAuY29udGV4dCgiZmFp bGVkIHRvIHRydW5jYXRlIGpvdXJuYWwgZmlsZSIpPzsKPiArCj4gKyAgICAgICAgbG9nOjppbmZv ISgKPiArICAgICAgICAgICAgImNvbW1pdGVkIHtjb3VudH0gdGFza3MgaW4gezouM30ucyB0byB0 YXNrIGNhY2hlIGFyY2hpdmUiLAo+ICsgICAgICAgICAgICBzdGFydC5lbGFwc2VkKCkuYXNfc2Vj c19mMzIoKQo+ICsgICAgICAgICk7Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsK PiArICAgIC8vLyBNZXJnZSBhIGxpc3Qgb2YgKmZpbmlzaGVkKiB0YXNrcyBpbnRvIHRoZSByZW1v dGUgdGFzayBhcmNoaXZlIGZpbGVzLgo+ICsgICAgLy8vIFRoZSBsaXN0IG9mIHRhc2sgaW4gYHRh c2tzYCAqbXVzdCogYmUgc29ydGVkIGJ5IHRoZWlyIHRpbWVzdGFtcCBhbmQgVVBJRCAoZGVzY2Vu ZGluZyBieQo+ICsgICAgLy8vIHRpbWVzdGFtcCwgYXNjZW5kaW5nIGJ5IFVQSUQpLgo+ICsgICAg Zm4gbWVyZ2VfdGFza3NfaW50b19hcmNoaXZlKCZzZWxmLCB0YXNrczogVmVjPFRhc2tDYWNoZUl0 ZW0+KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICAgICAgZGVidWdfYXNzZXJ0ISh0YXNr cwo+ICsgICAgICAgICAgICAuaXRlcigpCj4gKyAgICAgICAgICAgIC5pc19zb3J0ZWRfYnkofGEs IGJ8IGNvbXBhcmVfdGFza3MoYSwgYikuaXNfZ2UoKSkpOwo+ICsKPiArICAgICAgICBsZXQgZmls ZXMgPSBzZWxmCj4gKyAgICAgICAgICAgIC5jYWNoZQo+ICsgICAgICAgICAgICAuYXJjaGl2ZV9m aWxlcygmc2VsZi5sb2NrKQo+ICsgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIHJlYWQg YWNoaXZlIGZpbGVzIik/Owo+ICsKPiArICAgICAgICBsZXQgbXV0IGZpbGVzID0gZmlsZXMuaXRl cigpLnBlZWthYmxlKCk7Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgY3VycmVudCA9IGZpbGVzLm5l eHQoKTsKPiArICAgICAgICBsZXQgbXV0IG5leHQgPSBmaWxlcy5wZWVrKCk7Cj4gKwo+ICsgICAg ICAgIGxldCBtdXQgdGFza3NfZm9yX2N1cnJlbnRfZmlsZSA9IFZlYzo6bmV3KCk7Cj4gKwo+ICsg ICAgICAgIC8vIFRhc2tzIGFyZSBzb3J0ZWQgeW91bmdlc3QgdG8gb2xkZXN0IChiaWdnZXN0IHN0 YXJ0IHRpbWUgZmlyc3QpCj4gKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3Mgewo+ICsgICAgICAg ICAgICAvLyBTa2lwIGFoZWFkIHVudGlsIHdlIGhhdmUgZm91bmQgdGhlIGNvcnJlY3QgZmlsZS4K PiArICAgICAgICAgICAgd2hpbGUgbmV4dC5pc19zb21lKCkgewo+ICsgICAgICAgICAgICAgICAg aWYgbGV0IFNvbWUoY3VycmVudCkgPSBjdXJyZW50IHsKPiArICAgICAgICAgICAgICAgICAgICBp ZiB0YXNrLnN0YXJ0dGltZSA+PSBjdXJyZW50LnN0YXJ0dGltZSB7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg ICAgICAgICAvLyBUaGUgbmV4dCBlbnRyeSdzIGN1dC1vZmYgaXMgbGFyZ2VyIHRoZW4gdGhlIHRh c2sncyBzdGFydCB0aW1lLCB0aGF0IG1lYW5zCj4gKyAgICAgICAgICAgICAgICAgICAgLy8gd2Ug d2FudCB0byBmaW5hbGl6ZWQgdGhlIGN1cnJlbnQgZmlsZSBieSBtZXJnaW5nIGFsbCB0YXNrcyB0 aGF0Cj4gKyAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHN0b3JlZCBpbiBpdC4uLgo+ ICsgICAgICAgICAgICAgICAgICAgIHNlbGYubWVyZ2Vfc2luZ2xlX2FyY2hpdmVfZmlsZSgKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptZW06OnRha2UoJm11dCB0YXNrc19mb3JfY3Vy cmVudF9maWxlKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCwKPiArICAgICAg ICAgICAgICAgICAgICApCj4gKyAgICAgICAgICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCB7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCEoImZhaWxlZCB0byBtZXJnZSBhcmNo aXZlIGZpbGUge30iLCBjdXJyZW50LnBhdGguZGlzcGxheSgpKQo+ICsgICAgICAgICAgICAgICAg ICAgIH0pPzsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICAvLyAu Li4gYW5kIHRoZSBgY3VycmVudGAgZmlsZSB0byB0aGUgbmV4dCBlbnRyeS4KPiArICAgICAgICAg ICAgICAgIGN1cnJlbnQgPSBmaWxlcy5uZXh0KCk7Cj4gKyAgICAgICAgICAgICAgICBuZXh0ID0g ZmlsZXMucGVlaygpOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZiBsZXQg U29tZShjdXJyZW50KSA9IGN1cnJlbnQgewo+ICsgICAgICAgICAgICAgICAgaWYgdGFzay5zdGFy dHRpbWUgPCBjdXJyZW50LnN0YXJ0dGltZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg dGFza3NfZm9yX2N1cnJlbnRfZmlsZS5wdXNoKHRhc2spOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgLy8gTWVyZ2UgdGFza3MgZm9yIHRoZSBsYXN0IGZpbGUuCj4gKyAgICAgICAgaWYgbGV0 IFNvbWUoY3VycmVudCkgPSBjdXJyZW50IHsKPiArICAgICAgICAgICAgc2VsZi5tZXJnZV9zaW5n bGVfYXJjaGl2ZV9maWxlKHRhc2tzX2Zvcl9jdXJyZW50X2ZpbGUsIGN1cnJlbnQpCj4gKyAgICAg ICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IHsKPiArICAgICAgICAgICAgICAgICAgICBmb3Jt YXQhKCJmYWlsZWQgdG8gbWVyZ2UgYXJjaGl2ZSBmaWxlIHt9IiwgY3VycmVudC5wYXRoLmRpc3Bs YXkoKSkKPiArICAgICAgICAgICAgICAgIH0pPzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBBZGQgYSBuZXcgdHJhY2tlZCB0YXNrLgo+ ICsgICAgLy8vCj4gKyAgICAvLy8gVGhpcyB3aWxsIGluc2VydCB0aGUgdGFzayBpbiB0aGUgbGlz dCBvZiB0cmFja2VkIHRhc2tzIGluIHRoZSBzdGF0ZSBmaWxlLAo+ICsgICAgLy8vIGFzIHdlbGwg YXMgY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBgYWN0aXZlYCBmaWxlLgo+ICsgICAgcHViIGZuIGFk ZF90cmFja2VkX3Rhc2soJnNlbGYsIHRhc2s6IFRhc2tDYWNoZUl0ZW0pIC0+IFJlc3VsdDwoKSwg RXJyb3I+IHsKPiArICAgICAgICBsZXQgbXV0IHN0YXRlID0gc2VsZi5yZWFkX3N0YXRlKCk7Cj4g Kwo+ICsgICAgICAgIGxldCBtdXQgdGFza3M6IFZlYzxUYXNrQ2FjaGVJdGVtPiA9IHNlbGYKPiAr ICAgICAgICAgICAgLmdldF90YXNrcyhHZXRUYXNrczo6QWN0aXZlKQo+ICsgICAgICAgICAgICAu Y29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBhY3RpdmUgdGFzayBpdGVyYXRvciIpPwo+ICsgICAg ICAgICAgICAuY29sbGVjdCgpOwo+ICsKPiArICAgICAgICB0YXNrcy5wdXNoKHRhc2suY2xvbmUo KSk7Cj4gKyAgICAgICAgdGFza3Muc29ydF9ieShjb21wYXJlX3Rhc2tzX3JldmVyc2UpOwo+ICsK PiArICAgICAgICBzdGF0ZS5hZGRfdHJhY2tlZF90YXNrKHRhc2sudXBpZCk7Cj4gKwo+ICsgICAg ICAgIHNlbGYud3JpdGVfYWN0aXZlX3Rhc2tzKHRhc2tzLmludG9faXRlcigpKQo+ICsgICAgICAg ICAgICAuY29udGV4dCgiZmFpbGVkIHRvIHdyaXRlIGFjdGl2ZSB0YXNrcyBmaWxlIHdoZW4gYWRk aW5nIHRyYWNrZWQgdGFzayIpPzsKPiArCj4gKyAgICAgICAgc2VsZi53cml0ZV9zdGF0ZShzdGF0 ZSkKPiArICAgICAgICAgICAgLmNvbnRleHQoImZhaWxlZCB0byB3cml0ZSBzdGF0ZSB3aGVuIGFk ZGluZyB0cmFja2VkIHRhc2siKT87Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsK PiArICAgIC8vLyBSZWFkIHRoZSBzdGF0ZSBmaWxlLgo+ICsgICAgLy8vIElmIHRoZSBzdGF0ZSBm aWxlIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGV4aXN0LCB0aGUgZGVmYXVsdCAoZW1w dHkpIHN0YXRlCj4gKyAgICAvLy8gaXMgcmV0dXJuZWQuCj4gKyAgICBwdWIgZm4gcmVhZF9zdGF0 ZSgmc2VsZikgLT4gU3RhdGUgewo+ICsgICAgICAgIHNlbGYuY2FjaGUucmVhZF9zdGF0ZSgpCj4g KyAgICB9Cj4gKwo+ICsgICAgLy8vIFdyaXRlIHRoZSBzdGF0ZSBmaWxlLgo+ICsgICAgZm4gd3Jp dGVfc3RhdGUoJnNlbGYsIHN0YXRlOiBTdGF0ZSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsg ICAgICAgIGxldCBwYXRoID0gc2VsZi5jYWNoZS5iYXNlX3BhdGguam9pbihTVEFURV9GSUxFTkFN RSk7Cj4gKwo+ICsgICAgICAgIGxldCBkYXRhID0gc2VyZGVfanNvbjo6dG9fdmVjX3ByZXR0eSgm c3RhdGUpPzsKPiArCj4gKyAgICAgICAgcHJveG1veF9zeXM6OmZzOjpyZXBsYWNlX2ZpbGUocGF0 aCwgJmRhdGEsIHNlbGYuY2FjaGUuY3JlYXRlX29wdGlvbnMsIHRydWUpPzsKPiArCj4gKyAgICAg ICAgT2soKCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIFdyaXRlIHRoZSBwcm92aWRlZCB0YXNr cyB0byB0aGUgJ2FjdGl2ZScgZmlsZS4KPiArICAgIC8vLwo+ICsgICAgLy8vIFRoZSB0YXNrcyBh cmUgZmlyc3Qgd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBmaWxlLCB3aGljaCBpcyB0aGVuIHVzZWQK PiArICAgIC8vLyB0byBhdG9taWNhbGx5IHJlcGxhY2UgdGhlIG9yaWdpbmFsLgo+ICsgICAgZm4g d3JpdGVfYWN0aXZlX3Rhc2tzKCZzZWxmLCB0YXNrczogaW1wbCBJdGVyYXRvcjxJdGVtID0gVGFz a0NhY2hlSXRlbT4pIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgKGZkLCBw YXRoKSA9IHByb3htb3hfc3lzOjpmczo6bWFrZV90bXBfZmlsZSgKPiArICAgICAgICAgICAgc2Vs Zi5jYWNoZS5iYXNlX3BhdGguam9pbihBQ1RJVkVfRklMRU5BTUUpLAo+ICsgICAgICAgICAgICBz ZWxmLmNhY2hlLmNyZWF0ZV9vcHRpb25zLAo+ICsgICAgICAgICk/Owo+ICsgICAgICAgIGxldCBt dXQgZmQgPSBCdWZXcml0ZXI6Om5ldyhmZCk7Cj4gKwo+ICsgICAgICAgIFNlbGY6OndyaXRlX3Rh c2tzKCZtdXQgZmQsIHRhc2tzKT87Cj4gKwo+ICsgICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IGZk LmZsdXNoKCkgewo+ICsgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQgbm90IGZsdXNoICdh Y3RpdmUnIGZpbGU6IHtlcnI6I30iKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZHJvcChmZCk7 Cj4gKwo+ICsgICAgICAgIGxldCB0YXJnZXQgPSBzZWxmLmNhY2hlLmJhc2VfcGF0aC5qb2luKEFD VElWRV9GSUxFTkFNRSk7Cj4gKwo+ICsgICAgICAgIGxldCByZXMgPSBzdGQ6OmZzOjpyZW5hbWUo JnBhdGgsICZ0YXJnZXQpLndpdGhfY29udGV4dCh8fCB7Cj4gKyAgICAgICAgICAgIGZvcm1hdCEo Cj4gKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHJlcGxhY2Uge30gd2l0aCB7fSIsCj4gKyAg ICAgICAgICAgICAgICB0YXJnZXQuZGlzcGxheSgpLAo+ICsgICAgICAgICAgICAgICAgcGF0aC5k aXNwbGF5KCksCj4gKyAgICAgICAgICAgICkKPiArICAgICAgICB9KTsKPiArCj4gKyAgICAgICAg aWYgbGV0IEVycihlcnIpID0gcmVzIHsKPiArICAgICAgICAgICAgaWYgbGV0IEVycihlcnIpID0g c3RkOjpmczo6cmVtb3ZlX2ZpbGUoJnBhdGgpIHsKPiArICAgICAgICAgICAgICAgIGxvZzo6ZXJy b3IhKAo+ICsgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gY2xlYW51cCB0ZW1wb3Jhcnkg ZmlsZSB7fToge2VycjojfSIsCj4gKyAgICAgICAgICAgICAgICAgICAgcGF0aC5kaXNwbGF5KCkK PiArICAgICAgICAgICAgICAgICk7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAg IHJldHVybiBFcnIoZXJyKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsg ICAgfQo+ICsKPiArICAgIC8vLyBNZXJnZSBgdGFza3NgIHdpdGggYW4gZXhpc3RpbmcgYXJjaGl2 ZSBmaWxlLgo+ICsgICAgLy8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGB0YXNrc2AgYW5k IHRoZSBwcmUtZXhpc3RpbmcgY29udGVudHMgb2YgdGhlIGFyY2hpdmUKPiArICAgIC8vLyBmaWxl IGFyZSBib3RoIHNvcnRlZCBkZXNjZW5kaW5nIGJ5IHN0YXJ0dGltZSAobW9zdCByZWNlbnQgdGFz a3MgY29tZSBmaXJzdCkuCj4gKyAgICAvLy8gVGhlIHRhc2sgYXJjaGl2ZSBtdXN0IGJlIGxvY2tl ZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KPiArICAgIGZuIG1lcmdlX3NpbmdsZV9hcmNo aXZlX2ZpbGUoCj4gKyAgICAgICAgJnNlbGYsCj4gKyAgICAgICAgdGFza3M6IFZlYzxUYXNrQ2Fj aGVJdGVtPiwKPiArICAgICAgICBmaWxlOiAmQXJjaGl2ZUZpbGUsCj4gKyAgICApIC0+IFJlc3Vs dDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBpZiB0YXNrcy5pc19lbXB0eSgpIHsKPiArICAgICAg ICAgICAgcmV0dXJuIE9rKCgpKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vIFRPRE86 IE1pZ2h0IGJlIG5pY2UgdG8gYWxzbyBtb3ZlIHRoaXMgdG8gQXJjaGl2ZUZpbGUKPiArICAgICAg ICBsZXQgKHRlbXBfZmlsZSwgdGVtcF9maWxlX3BhdGgpID0KPiArICAgICAgICAgICAgcHJveG1v eF9zeXM6OmZzOjptYWtlX3RtcF9maWxlKCZmaWxlLnBhdGgsIHNlbGYuY2FjaGUuY3JlYXRlX29w dGlvbnMpPzsKPiArICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGlmIGZpbGUuY29tcHJlc3NlZCB7 Cj4gKyAgICAgICAgICAgIGxldCBlbmNvZGVyID0KPiArICAgICAgICAgICAgICAgIHpzdGQ6OnN0 cmVhbTo6d3JpdGU6OkVuY29kZXI6Om5ldyh0ZW1wX2ZpbGUsIHpzdGQ6OkRFRkFVTFRfQ09NUFJF U1NJT05fTEVWRUwpPwo+ICsgICAgICAgICAgICAgICAgICAgIC5hdXRvX2ZpbmlzaCgpOwo+ICsg ICAgICAgICAgICBCb3g6Om5ldyhCdWZXcml0ZXI6Om5ldyhlbmNvZGVyKSkgYXMgQm94PGR5biBX cml0ZT4KPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBCb3g6Om5ldyhCdWZXcml0 ZXI6Om5ldyh0ZW1wX2ZpbGUpKSBhcyBCb3g8ZHluIFdyaXRlPgo+ICsgICAgICAgIH07Cj4gKwo+ ICsgICAgICAgIGxldCBhcmNoaXZlX2l0ZXIgPSBmaWxlCj4gKyAgICAgICAgICAgIC5pdGVyKCk/ Cj4gKyAgICAgICAgICAgIC5mbGF0X21hcCh8aXRlbXwgbWF0Y2ggaXRlbSB7Cj4gKyAgICAgICAg ICAgICAgICBPayhpdGVtKSA9PiBTb21lKGl0ZW0pLAo+ICsgICAgICAgICAgICAgICAgRXJyKGVy cikgPT4gewo+ICsgICAgICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgcmVh ZCB0YXNrIGNhY2hlIGl0ZW0gd2hpbGUgbWVyZ2luZzoge2VycjojfSIpOwo+ICsgICAgICAgICAg ICAgICAgICAgIE5vbmUKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfSkKPiAr ICAgICAgICAgICAgLnBlZWthYmxlKCk7Cj4gKyAgICAgICAgbGV0IHRhc2tfaXRlciA9IHRhc2tz LmludG9faXRlcigpLnBlZWthYmxlKCk7Cj4gKwo+ICsgICAgICAgIFNlbGY6OndyaXRlX3Rhc2tz KCZtdXQgd3JpdGVyLCBNZXJnZVRhc2tJdGVyYXRvcjo6bmV3KGFyY2hpdmVfaXRlciwgdGFza19p dGVyKSk/Owo+ICsKPiArICAgICAgICBpZiBsZXQgRXJyKGVycikgPSB3cml0ZXIuZmx1c2goKSB7 Cj4gKyAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgZmx1c2ggQnVmV3JpdGVyIGZv ciB7ZmlsZTo/fToge2VycjojfSIpOwo+ICsgICAgICAgIH0KPiArICAgICAgICBkcm9wKHdyaXRl cik7Cj4gKwo+ICsgICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IHN0ZDo6ZnM6OnJlbmFtZSgmdGVt cF9maWxlX3BhdGgsICZmaWxlLnBhdGgpLndpdGhfY29udGV4dCh8fCB7Cj4gKyAgICAgICAgICAg IGZvcm1hdCEoCj4gKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHJlcGxhY2Uge30gd2l0aCB7 fSIsCj4gKyAgICAgICAgICAgICAgICBmaWxlLnBhdGguZGlzcGxheSgpLAo+ICsgICAgICAgICAg ICAgICAgdGVtcF9maWxlX3BhdGguZGlzcGxheSgpCj4gKyAgICAgICAgICAgICkKPiArICAgICAg ICB9KSB7Cj4gKyAgICAgICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IHN0ZDo6ZnM6OnJlbW92ZV9m aWxlKCZ0ZW1wX2ZpbGVfcGF0aCkgewo+ICsgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoCj4g KyAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjbGVhbiB1cCB0ZW1wb3JhcnkgZmlsZSB7 fToge2VycjojfSIsCj4gKyAgICAgICAgICAgICAgICAgICAgdGVtcF9maWxlX3BhdGguZGlzcGxh eSgpCj4gKyAgICAgICAgICAgICAgICApOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAg ICAgICByZXR1cm4gRXJyKGVycik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBPaygoKSkK PiArICAgIH0KPiArCj4gKyAgICAvLy8gV3JpdGUgYW4gaXRlcmF0b3Igb2YgW2BUYXNrQ2FjaGVJ dGVtYF0gdG8gYSBzb21ldGhpbmcgdGhhdCBpbXBsZW1lbnRzIFtgV3JpdGVgXS4KPiArICAgIC8v LyBUaGUgaW5kaXZpZHVhbCBpdGVtcyBhcmUgZW5jb2RlZCBhcyBKU09OIGZvbGxvd2VkIGJ5IGEg bmV3bGluZS4KPiArICAgIGZuIHdyaXRlX3Rhc2tzKAo+ICsgICAgICAgIHdyaXRlcjogJm11dCBp bXBsIFdyaXRlLAo+ICsgICAgICAgIHRhc2tzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2Fj aGVJdGVtPiwKPiArICAgICkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGZvciB0 YXNrIGluIHRhc2tzIHsKPiArICAgICAgICAgICAgc2VyZGVfanNvbjo6dG9fd3JpdGVyKCZtdXQg KndyaXRlciwgJnRhc2spPzsKPiArICAgICAgICAgICAgd3JpdGVsbiEod3JpdGVyKT87Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICBPaygoKSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbCBU YXNrQ2FjaGUgewo+ICsgICAgLy8vIENyZWF0ZSBhIG5ldyB0YXNrIGNhY2hlIGluc3RhbmNlLgo+ ICsgICAgLy8vCj4gKyAgICAvLy8gUmVtZW1iZXIgdG8gY2FsbCBgaW5pdGAgb3IgYG5ld19maWxl YCBvbiBhIGxvY2tlZCwgd3JpdGFibGUgVGFza0NhY2hlCj4gKyAgICAvLy8gdG8gY3JlYXRlIHRo ZSBpbml0aWFsIGFyY2hpdmUgZmlsZXMuCj4gKyAgICBwdWIgZm4gbmV3PFA6IEFzUmVmPFBhdGg+ PigKPiArICAgICAgICBwYXRoOiBQLAo+ICsgICAgICAgIGNyZWF0ZV9vcHRpb25zOiBDcmVhdGVP cHRpb25zLAo+ICsgICAgICAgIG1heF9maWxlczogdTMyLAo+ICsgICAgICAgIHVuY29tcHJlc3Nl ZDogdTMyLAo+ICsgICAgICAgIHJvdGF0ZV9hZnRlcjogdTY0LAo+ICsgICAgICAgIGpvdXJuYWxf bWF4X3NpemU6IHU2NCwKPiArICAgICkgLT4gUmVzdWx0PFNlbGYsIEVycm9yPiB7Cj4gKyAgICAg ICAgT2soU2VsZiB7Cj4gKyAgICAgICAgICAgIGJhc2VfcGF0aDogcGF0aC5hc19yZWYoKS5pbnRv KCksCj4gKyAgICAgICAgICAgIGNyZWF0ZV9vcHRpb25zLAo+ICsgICAgICAgICAgICBqb3VybmFs X21heF9zaXplLAo+ICsgICAgICAgICAgICBtYXhfZmlsZXMsCj4gKyAgICAgICAgICAgIHJvdGF0 ZV9hZnRlciwKPiArICAgICAgICAgICAgdW5jb21wcmVzc2VkX2ZpbGVzOiB1bmNvbXByZXNzZWQs Cj4gKyAgICAgICAgfSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gTG9jayB0aGUgY2FjaGUgZm9y IHJlYWRpbmcuCj4gKyAgICBwdWIgZm4gcmVhZChzZWxmKSAtPiBSZXN1bHQ8UmVhZGFibGVUYXNr Q2FjaGUsIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0IGxvY2sgPSBzZWxmLmxvY2tfaW1wbChmYWxz ZSk/Owo+ICsKPiArICAgICAgICBPayhSZWFkYWJsZVRhc2tDYWNoZSB7IGNhY2hlOiBzZWxmLCBs b2NrIH0pCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIExvY2sgdGhlIGNhY2hlIGZvciB3cml0aW5n Lgo+ICsgICAgcHViIGZuIHdyaXRlKHNlbGYpIC0+IFJlc3VsdDxXcml0YWJsZVRhc2tDYWNoZSwg RXJyb3I+IHsKPiArICAgICAgICBsZXQgbG9jayA9IHNlbGYubG9ja19pbXBsKHRydWUpPzsKPiAr Cj4gKyAgICAgICAgT2soV3JpdGFibGVUYXNrQ2FjaGUgeyBjYWNoZTogc2VsZiwgbG9jayB9KQo+ ICsgICAgfQo+ICsKPiArICAgIGZuIGxvY2tfaW1wbCgmc2VsZiwgZXhjbHVzaXZlOiBib29sKSAt PiBSZXN1bHQ8VGFza0NhY2hlTG9jaywgRXJyb3I+IHsKPiArICAgICAgICBsZXQgbG9ja2ZpbGUg PSBzZWxmLmJhc2VfcGF0aC5qb2luKExPQ0tGSUxFX0ZJTEVOQU1FKTsKPiArCj4gKyAgICAgICAg T2soVGFza0NhY2hlTG9jayhwcm94bW94X3N5czo6ZnM6Om9wZW5fZmlsZV9sb2NrZWQoCj4gKyAg ICAgICAgICAgIGxvY2tmaWxlLAo+ICsgICAgICAgICAgICBEdXJhdGlvbjo6ZnJvbV9zZWNzKDEw KSwKPiArICAgICAgICAgICAgZXhjbHVzaXZlLAo+ICsgICAgICAgICAgICBzZWxmLmNyZWF0ZV9v cHRpb25zLAo+ICsgICAgICAgICk/KSkKPiArICAgIH0KPiArCj4gKyAgICAvLy8gUmVhZCB0aGUg c3RhdGUgZmlsZS4KPiArICAgIC8vLyBJZiB0aGUgc3RhdGUgZmlsZSBjb3VsZCBub3QgYmUgcmVh ZCBvciBkb2VzIG5vdCBleGlzdCwgdGhlIGRlZmF1bHQgKGVtcHR5KSBzdGF0ZQo+ICsgICAgLy8v IGlzIHJldHVybmVkLgo+ICsgICAgcHViIGZuIHJlYWRfc3RhdGUoJnNlbGYpIC0+IFN0YXRlIHsK PiArICAgICAgICBmbiBkb19yZWFkX3N0YXRlKHBhdGg6ICZQYXRoKSAtPiBSZXN1bHQ8U3RhdGUs IEVycm9yPiB7Cj4gKyAgICAgICAgICAgIG1hdGNoIHN0ZDo6ZnM6OnJlYWQocGF0aCkgewo+ICsg ICAgICAgICAgICAgICAgT2soY29udGVudCkgPT4gc2VyZGVfanNvbjo6ZnJvbV9zbGljZSgmY29u dGVudCkubWFwX2Vycih8ZXJyfCBlcnIuaW50bygpKSwKPiArICAgICAgICAgICAgICAgIEVycihl cnIpIGlmIGVyci5raW5kKCkgPT0gRXJyb3JLaW5kOjpOb3RGb3VuZCA9PiBPayhEZWZhdWx0Ojpk ZWZhdWx0KCkpLAo+ICsgICAgICAgICAgICAgICAgRXJyKGVycikgPT4gRXJyKGVyci5pbnRvKCkp LAo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBsZXQgcGF0aCA9 IHNlbGYuYmFzZV9wYXRoLmpvaW4oU1RBVEVfRklMRU5BTUUpOwo+ICsgICAgICAgIGRvX3JlYWRf c3RhdGUoJnBhdGgpLnVud3JhcF9vcl9lbHNlKHxlcnJ8IHsKPiArICAgICAgICAgICAgbG9nOjpl cnJvciEoImNvdWxkIG5vdCByZWFkIHN0YXRlIGZpbGU6IHtlcnI6I30iKTsKPiArICAgICAgICAg ICAgRGVmYXVsdDo6ZGVmYXVsdCgpCj4gKyAgICAgICAgfSkKPiArICAgIH0KPiArCj4gKyAgICBm biBnZXRfdGFza3NfaW1wbDwnYT4oCj4gKyAgICAgICAgJnNlbGYsCj4gKyAgICAgICAgbW9kZTog R2V0VGFza3MsCj4gKyAgICAgICAgbG9jazogJidhIFRhc2tDYWNoZUxvY2ssCj4gKyAgICApIC0+ IFJlc3VsdDxUYXNrQXJjaGl2ZUl0ZXJhdG9yPCdhPiwgRXJyb3I+IHsKPiArICAgICAgICBsZXQg am91cm5hbF9maWxlID0gc2VsZi5iYXNlX3BhdGguam9pbihXQUxfRklMRU5BTUUpOwo+ICsgICAg ICAgIGxldCBhY3RpdmVfcGF0aCA9IHNlbGYuYmFzZV9wYXRoLmpvaW4oQUNUSVZFX0ZJTEVOQU1F KTsKPiArCj4gKyAgICAgICAgbWF0Y2ggbW9kZSB7Cj4gKyAgICAgICAgICAgIEdldFRhc2tzOjpB bGwgPT4gewo+ICsgICAgICAgICAgICAgICAgbGV0IG11dCBhcmNoaXZlX2ZpbGVzID0gc2VsZi5h cmNoaXZlX2ZpbGVzKGxvY2spPzsKPiArICAgICAgICAgICAgICAgIGFyY2hpdmVfZmlsZXMucmV2 ZXJzZSgpOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmIGFjdGl2ZV9wYXRoLmV4aXN0cygpIHsK PiArICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX2ZpbGVzLnB1c2goQXJjaGl2ZUZpbGUgewo+ ICsgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBzZWxmLmJhc2VfcGF0aC5qb2luKEFDVElW RV9GSUxFTkFNRSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQ6IGZhbHNl LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWU6IDAsCj4gKyAgICAgICAgICAg ICAgICAgICAgfSk7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAg VGFza0FyY2hpdmVJdGVyYXRvcjo6bmV3KFNvbWUoam91cm5hbF9maWxlKSwgYXJjaGl2ZV9maWxl cywgbG9jaykKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBHZXRUYXNrczo6QWN0aXZl ID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBtdXQgYXJjaGl2ZV9maWxlcyA9IFZlYzo6bmV3 KCk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgYWN0aXZlX3BhdGguZXhpc3RzKCkgewo+ICsg ICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfZmlsZXMucHVzaChBcmNoaXZlRmlsZSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHNlbGYuYmFzZV9wYXRoLmpvaW4oQUNUSVZFX0ZJ TEVOQU1FKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZDogZmFsc2UsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dGltZTogMCwKPiArICAgICAgICAgICAgICAg ICAgICB9KTsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBUYXNr QXJjaGl2ZUl0ZXJhdG9yOjpuZXcoTm9uZSwgYXJjaGl2ZV9maWxlcywgbG9jaykKPiArICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICAjW2NmZyh0ZXN0KV0KPiArICAgICAgICAgICAgR2V0VGFz a3M6OkFyY2hpdmVkID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBtdXQgZmlsZXMgPSBzZWxm LmFyY2hpdmVfZmlsZXMobG9jayk/Owo+ICsgICAgICAgICAgICAgICAgZmlsZXMucmV2ZXJzZSgp Owo+ICsKPiArICAgICAgICAgICAgICAgIFRhc2tBcmNoaXZlSXRlcmF0b3I6Om5ldyhTb21lKGpv dXJuYWxfZmlsZSksIGZpbGVzLCBsb2NrKQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ ICsgICAgfQo+ICsKPiArICAgIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiBleGlzdGluZyBhcmNoaXZl IGZpbGVzLCB0b2dldGhlciB3aXRoIHRoZWlyIHJlc3BlY3RpdmUKPiArICAgIC8vLyBjdXQtb2Zm IHRpbWVzdGFtcC4gVGhlIHJlc3VsdCBpcyBzb3J0ZWQgYXNjZW5kaW5nIGJ5IGN1dC1vZmYgdGlt ZXN0YW1wIChtb3N0IHJlY2VudCBvbmUKPiArICAgIC8vLyBmaXJzdCkuCj4gKyAgICAvLy8gVGhl IHRhc2sgYXJjaGl2ZSBzaG91bGQgYmUgbG9ja2VkIGZvciByZWFkaW5nIHdoZW4gY2FsbGluZyB0 aGlzIGZ1bmN0aW9uLgo+ICsgICAgZm4gYXJjaGl2ZV9maWxlcygmc2VsZiwgX2xvY2s6ICZUYXNr Q2FjaGVMb2NrKSAtPiBSZXN1bHQ8VmVjPEFyY2hpdmVGaWxlPiwgRXJyb3I+IHsKPiArICAgICAg ICBsZXQgbXV0IG5hbWVzID0gVmVjOjpuZXcoKTsKPiArCj4gKyAgICAgICAgZm9yIGVudHJ5IGlu IHN0ZDo6ZnM6OnJlYWRfZGlyKCZzZWxmLmJhc2VfcGF0aCk/IHsKPiArICAgICAgICAgICAgbGV0 IGVudHJ5ID0gZW50cnk/Owo+ICsKPiArICAgICAgICAgICAgbGV0IHBhdGggPSBlbnRyeS5wYXRo KCk7Cj4gKwo+ICsgICAgICAgICAgICBpZiBsZXQgU29tZShmaWxlKSA9IFNlbGY6OnBhcnNlX2Fy Y2hpdmVfZmlsZW5hbWUoJnBhdGgpIHsKPiArICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goZmls ZSk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIG5hbWVzLnNv cnRfYnlfa2V5KHxlfCAtZS5zdGFydHRpbWUpOwo+ICsKPiArICAgICAgICBPayhuYW1lcykKPiAr ICAgIH0KPiArCj4gKyAgICBmbiBwYXJzZV9hcmNoaXZlX2ZpbGVuYW1lKHBhdGg6ICZQYXRoKSAt PiBPcHRpb248QXJjaGl2ZUZpbGU+IHsKPiArICAgICAgICBsZXQgZmlsZW5hbWUgPSBwYXRoLmZp bGVfbmFtZSgpPy50b19zdHIoKT87Cj4gKyAgICAgICAgbGV0IGZpbGVuYW1lID0gZmlsZW5hbWUu c3RyaXBfcHJlZml4KEFSQ0hJVkVfRklMRU5BTUVfUFJFRklYKT87Cj4gKwo+ICsgICAgICAgIGlm IGxldCBTb21lKHN0YXJ0dGltZSkgPSBmaWxlbmFtZS5zdHJpcF9zdWZmaXgoWlNURF9FWFRFTlNJ T05fV0lUSF9ET1QpIHsKPiArICAgICAgICAgICAgbGV0IHN0YXJ0dGltZTogaTY0ID0gc3RhcnR0 aW1lLnBhcnNlKCkub2soKT87Cj4gKwo+ICsgICAgICAgICAgICBTb21lKEFyY2hpdmVGaWxlIHsK PiArICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgudG9fcGF0aF9idWYoKSwKPiArICAgICAgICAg ICAgICAgIGNvbXByZXNzZWQ6IHRydWUsCj4gKyAgICAgICAgICAgICAgICBzdGFydHRpbWUsCj4g KyAgICAgICAgICAgIH0pCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgbGV0IHN0 YXJ0dGltZTogaTY0ID0gZmlsZW5hbWUucGFyc2UoKS5vaygpPzsKPiArCj4gKyAgICAgICAgICAg IFNvbWUoQXJjaGl2ZUZpbGUgewo+ICsgICAgICAgICAgICAgICAgcGF0aDogcGF0aC50b19wYXRo X2J1ZigpLAo+ICsgICAgICAgICAgICAgICAgY29tcHJlc3NlZDogZmFsc2UsCj4gKyAgICAgICAg ICAgICAgICBzdGFydHRpbWUsCj4gKyAgICAgICAgICAgIH0pCj4gKyAgICAgICAgfQo+ICsgICAg fQo+ICt9Cj4gKwo+ICsvLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc29ydGluZyB0YXNrcy4K PiArLy8vIFRoZSB0YXNrcyBhcmUgY29tcGFyZWQgYmFzZWQgb24gdGhlIHRhc2sncyBzdGFydCB0 aW1lLCBmYWxsaW5nCj4gKy8vLyBiYWNrIHRvIHRoZSB0YXNrJ3MgVVBJRCBhcyBhIHNlY29uZGFy eSBjcml0ZXJpb24gaW4gY2FzZSB0aGUKPiArLy8vIHN0YXJ0IHRpbWVzIGFyZSBlcXVhbC4KPiAr Zm4gY29tcGFyZV90YXNrcyhhOiAmVGFza0NhY2hlSXRlbSwgYjogJlRhc2tDYWNoZUl0ZW0pIC0+ IE9yZGVyaW5nIHsKPiArICAgIGEuc3RhcnR0aW1lCj4gKyAgICAgICAgLmNtcCgmYi5zdGFydHRp bWUpCj4gKyAgICAgICAgLnRoZW5fd2l0aCh8fCBiLnVwaWQudG9fc3RyaW5nKCkuY21wKCZhLnVw aWQudG9fc3RyaW5nKCkpKQo+ICt9Cj4gKwo+ICsvLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3Ig c29ydGluZyB0YXNrcywgcmV2ZXJzZWQKPiArLy8vIFRoZSB0YXNrcyBhcmUgY29tcGFyZWQgYmFz ZWQgb24gdGhlIHRhc2sncyBzdGFydCB0aW1lLCBmYWxsaW5nCj4gKy8vLyBiYWNrIHRvIHRoZSB0 YXNrJ3MgVVBJRCBhcyBhIHNlY29uZGFyeSBjcml0ZXJpb24gaW4gY2FzZSB0aGUKPiArLy8vIHN0 YXJ0IHRpbWVzIGFyZSBlcXVhbC4KPiArZm4gY29tcGFyZV90YXNrc19yZXZlcnNlKGE6ICZUYXNr Q2FjaGVJdGVtLCBiOiAmVGFza0NhY2hlSXRlbSkgLT4gT3JkZXJpbmcgewo+ICsgICAgY29tcGFy ZV90YXNrcyhhLCBiKS5yZXZlcnNlKCkKCnN1cGVyIG1pbm9yIHRoaW5nLCBidXQgd291bGRuJ3Qg aXQgYWxzbyBiZSBzaW1wbHkgcG9zc2libGUgdG8gZG8KY29tcGFyZV90YXNrcyhiLCBhKQoKaGVy ZSA/IGl0IHdpbGwgKnByb2JhYmx5KiBjb21waWxlIHRvIHRoZSBzYW1lIGNvZGUgYW55d2F5IHNv IG5vIGJpZyBkZWFsCgo+ICt9Cj4gKwo+ICsvLy8gSXRlcmF0b3Igb3ZlciB0aGUgdGFzayBhcmNo aXZlLgo+ICtwdWIgc3RydWN0IFRhc2tBcmNoaXZlSXRlcmF0b3I8J2E+IHsKPiArICAgIGlubmVy OiBCb3g8ZHluIEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPj4sCj4gKwo+ICsgICAgLy8v IExvY2sgZm9yIHRoaXMgYXJjaGl2ZS4gVGhpcyBjb250YWlucyB0aGUgbG9jayBpbiBjYXNlIHdl Cj4gKyAgICAvLy8gbmVlZCB0byBrZWVwIHRoZSBhcmNoaXZlIGxvY2tlZCB3aGlsZSBpdGVyYXRp bmcgb3ZlciBpdC4KPiArICAgIF9sb2NrOiAmJ2EgVGFza0NhY2hlTG9jaywKPiArfQo+ICsKPiAr aW1wbDwnYT4gVGFza0FyY2hpdmVJdGVyYXRvcjwnYT4gewo+ICsgICAgLy8vIENyZWF0ZSBhIG5l dyB0YXNrIGFyY2hpdmUgaXRlcmF0b3IuCj4gKyAgICAvLy8KPiArICAgIC8vLyBgZmlsZXNgIHNo b3VsZCBiZSBzb3J0ZWQgd2l0aCB0aGUgbW9zdCByZWNlbnQgYXJjaGl2ZSBmaWxlICpsYXN0Ki4K PiArICAgIGZuIG5ldygKPiArICAgICAgICBqb3VybmFsOiBPcHRpb248UGF0aEJ1Zj4sCj4gKyAg ICAgICAgZmlsZXM6IFZlYzxBcmNoaXZlRmlsZT4sCj4gKyAgICAgICAgbG9jazogJidhIFRhc2tD YWNoZUxvY2ssCj4gKyAgICApIC0+IFJlc3VsdDxTZWxmLCBFcnJvcj4gewo+ICsgICAgICAgIGxl dCBpbm5lciA9IElubmVyVGFza0FyY2hpdmVJdGVyYXRvcjo6bmV3KGZpbGVzKQo+ICsgICAgICAg ICAgICAuZmlsdGVyX21hcCh8cmVzfCBtYXRjaCByZXMgewo+ICsgICAgICAgICAgICAgICAgT2so dGFzaykgPT4gU29tZSh0YXNrKSwKPiArICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHsKPiAr ICAgICAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQgbm90IHJlYWQgdGFzayBmcm9t IGFyY2hpdmUgZmlsZToge2VycjojfSIpOwo+ICsgICAgICAgICAgICAgICAgICAgIE5vbmUKPiAr ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfSkKPiArICAgICAgICAgICAgLnBlZWth YmxlKCk7Cj4gKwo+ICsgICAgICAgIGlmIGxldCBTb21lKGpvdXJuYWwpID0gam91cm5hbCB7Cj4g KyAgICAgICAgICAgIGxldCBqb3VybmFsX3JlYWRlciA9IEJveDo6bmV3KEJ1ZlJlYWRlcjo6bmV3 KEZpbGU6Om9wZW4oam91cm5hbCk/KSk7Cj4gKyAgICAgICAgICAgIGxldCBqb3VybmFsX3Rhc2tf aXRlcmF0b3IgPSBKb3VybmFsSXRlcmF0b3I6Om5ldyhqb3VybmFsX3JlYWRlcikucGVla2FibGUo KTsKPiArICAgICAgICAgICAgbGV0IG1lcmdlX3Rhc2tfaXRlciA9IE1lcmdlVGFza0l0ZXJhdG9y OjpuZXcoam91cm5hbF90YXNrX2l0ZXJhdG9yLCBpbm5lcik7Cj4gKwo+ICsgICAgICAgICAgICBP ayhTZWxmIHsKPiArICAgICAgICAgICAgICAgIGlubmVyOiBCb3g6Om5ldyhtZXJnZV90YXNrX2l0 ZXIpLAo+ICsgICAgICAgICAgICAgICAgX2xvY2s6IGxvY2ssCj4gKyAgICAgICAgICAgIH0pCj4g KyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgT2soU2VsZiB7Cj4gKyAgICAgICAgICAg ICAgICBpbm5lcjogQm94OjpuZXcoaW5uZXIpLAo+ICsgICAgICAgICAgICAgICAgX2xvY2s6IGxv Y2ssCj4gKyAgICAgICAgICAgIH0pCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtp bXBsIEl0ZXJhdG9yIGZvciBUYXNrQXJjaGl2ZUl0ZXJhdG9yPCdfPiB7Cj4gKyAgICB0eXBlIEl0 ZW0gPSBUYXNrQ2FjaGVJdGVtOwo+ICsKPiArICAgIGZuIG5leHQoJm11dCBzZWxmKSAtPiBPcHRp b248U2VsZjo6SXRlbT4gewo+ICsgICAgICAgIHNlbGYuaW5uZXIubmV4dCgpCj4gKyAgICB9Cj4g K30KPiArCj4gK3N0cnVjdCBJbm5lclRhc2tBcmNoaXZlSXRlcmF0b3Igewo+ICsgICAgLy8vIEFy Y2hpdmUgZmlsZXMgdG8gcmVhZC4KPiArICAgIGZpbGVzOiBWZWM8QXJjaGl2ZUZpbGU+LAo+ICsg ICAgLy8vIEFyY2hpdmUgaXRlcmF0b3Igd2UgYXJlIGN1cnJlbnRseSB1c2luZywgaWYgYW55Cj4g KyAgICBjdXJyZW50OiBPcHRpb248QXJjaGl2ZUl0ZXJhdG9yPiwKPiArfQo+ICsKPiAraW1wbCBJ bm5lclRhc2tBcmNoaXZlSXRlcmF0b3Igewo+ICsgICAgLy8vIENyZWF0ZSBhIG5ldyB0YXNrIGFy Y2hpdmUgaXRlcmF0b3IuCj4gKyAgICBwdWIgZm4gbmV3KGZpbGVzOiBWZWM8QXJjaGl2ZUZpbGU+ KSAtPiBTZWxmIHsKPiArICAgICAgICBTZWxmIHsKPiArICAgICAgICAgICAgZmlsZXMsCj4gKyAg ICAgICAgICAgIGN1cnJlbnQ6IE5vbmUsCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ ICtpbXBsIEl0ZXJhdG9yIGZvciBJbm5lclRhc2tBcmNoaXZlSXRlcmF0b3Igewo+ICsgICAgdHlw ZSBJdGVtID0gUmVzdWx0PFRhc2tDYWNoZUl0ZW0sIEVycm9yPjsKPiArCj4gKyAgICBmbiBuZXh0 KCZtdXQgc2VsZikgLT4gT3B0aW9uPFNlbGY6Okl0ZW0+IHsKPiArICAgICAgICBsb29wIHsKPiAr ICAgICAgICAgICAgbWF0Y2ggJm11dCBzZWxmLmN1cnJlbnQgewo+ICsgICAgICAgICAgICAgICAg U29tZShjdXJyZW50KSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBjdXJy ZW50Lm5leHQoKTsKPiArICAgICAgICAgICAgICAgICAgICBpZiBuZXh0LmlzX3NvbWUoKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0Owo+ICsgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IE5v bmU7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICAgICAgTm9uZSA9PiAnaW5uZXI6IGxvb3Agewo+ICsgICAgICAgICAgICAgICAgICAg IC8vIFJldHVybnMgYE5vbmVgIGlmIG5vIG1vcmUgZmlsZXMgYXJlIGF2YWlsYWJsZSwgc3RvcHBp bmcgaXRlcmF0aW9uLgo+ICsgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0X2ZpbGUgPSBzZWxm LmZpbGVzLnBvcCgpPzsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggbmV4dF9maWxl Lml0ZXIoKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE9rKGl0ZXIpID0+IHsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IFNvbWUoaXRlcik7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAnaW5uZXI7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGVycikgPT4gewo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImNvdWxkIG5vdCBjcmVhdGUg YXJjaGl2ZSBpdGVyYXRvciB3aGlsZSBpdGVyYXRpb24gb3ZlciB0YXNrIGFyY2hpdmUgZmlsZXMs IHNraXBwaW5nOiB7ZXJyOiN9IikKPiArICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIH0sCj4gKyAgICAgICAgICAgIH0K PiArICAgICAgICB9Cj4gKyAgICB9Cj4gK30KPiArCj4gKy8vLyBBcmNoaXZlIGZpbGUuCj4gKyNb ZGVyaXZlKENsb25lLCBEZWJ1ZyldCj4gK3N0cnVjdCBBcmNoaXZlRmlsZSB7Cj4gKyAgICAvLy8g VGhlIHBhdGggdG8gdGhlIGFyY2hpdmUgZmlsZS4KPiArICAgIHBhdGg6IFBhdGhCdWYsCj4gKyAg ICAvLy8gVGhpcyBhcmNoaXZlIGZpbGUgaXMgY29tcHJlc3NlZCB1c2luZyB6c3RkLgo+ICsgICAg Y29tcHJlc3NlZDogYm9vbCwKPiArICAgIC8vLyBUaGUgYXJjaGl2ZSdzIGxvd2VzdCBwZXJtaXR0 ZWQgc3RhcnR0aW1lIChzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2gpLgo+ICsgICAgc3RhcnR0aW1l OiBpNjQsCj4gK30KPiArCj4gK2ltcGwgQXJjaGl2ZUZpbGUgewo+ICsgICAgLy8vIENyZWF0ZSBh biBbYEFyY2hpdmVJdGVyYXRvcmBdIGZvciB0aGlzIGZpbGUuCj4gKyAgICBmbiBpdGVyKCZzZWxm KSAtPiBSZXN1bHQ8QXJjaGl2ZUl0ZXJhdG9yLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCBmZCA9 IEZpbGU6Om9wZW4oJnNlbGYucGF0aCkKPiArICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCBm b3JtYXQhKCJmYWlsZWQgdG8gb3BlbiBhcmNoaXZlIGZpbGUge30iLCBzZWxmLnBhdGguZGlzcGxh eSgpKSk/Owo+ICsKPiArICAgICAgICBsZXQgaXRlciA9IGlmIHNlbGYuY29tcHJlc3NlZCB7Cj4g KyAgICAgICAgICAgIGxldCByZWFkZXIgPSB6c3RkOjpzdHJlYW06OnJlYWQ6OkRlY29kZXI6Om5l dyhmZCkud2l0aF9jb250ZXh0KHx8IHsKPiArICAgICAgICAgICAgICAgIGZvcm1hdCEoCj4gKyAg ICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjcmVhdGUgenN0ZCBkZWNvZGVyIGZvciBhcmNo aXZlIGZpbGUge30iLAo+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0aC5kaXNwbGF5KCkK PiArICAgICAgICAgICAgICAgICkKPiArICAgICAgICAgICAgfSk/Owo+ICsgICAgICAgICAgICBB cmNoaXZlSXRlcmF0b3I6Om5ldyhCb3g6Om5ldyhCdWZSZWFkZXI6Om5ldyhyZWFkZXIpKSkKPiAr ICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBBcmNoaXZlSXRlcmF0b3I6Om5ldyhCb3g6 Om5ldyhCdWZSZWFkZXI6Om5ldyhmZCkpKQo+ICsgICAgICAgIH07Cj4gKwo+ICsgICAgICAgIE9r KGl0ZXIpCj4gKyAgICB9Cj4gKwo+ICsgICAgZm4gY29tcHJlc3MoJm11dCBzZWxmLCBvcHRpb25z OiBDcmVhdGVPcHRpb25zKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0IHVu Y29tcHJlc3NlZF9maWxlX3BhdGggPSAmc2VsZi5wYXRoOwo+ICsKPiArICAgICAgICBsZXQgKHRl bXBfZmlsZSwgdGVtcF9maWxlX3BhdGgpID0KPiArICAgICAgICAgICAgcHJveG1veF9zeXM6OmZz OjptYWtlX3RtcF9maWxlKHVuY29tcHJlc3NlZF9maWxlX3BhdGgsIG9wdGlvbnMpCj4gKyAgICAg ICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpPzsK PiArCj4gKyAgICAgICAgbGV0IHVuY29tcHJlc3NlZF9maWxlID0KPiArICAgICAgICAgICAgRmls ZTo6b3Blbih1bmNvbXByZXNzZWRfZmlsZV9wYXRoKS5jb250ZXh0KCJmYWlsZWQgdG8gb3BlbiB1 bmNvbXByZXNzZWQgZmlsZSIpPzsKPiArCj4gKyAgICAgICAgenN0ZDo6c3RyZWFtOjpjb3B5X2Vu Y29kZSgKPiArICAgICAgICAgICAgdW5jb21wcmVzc2VkX2ZpbGUsCj4gKyAgICAgICAgICAgIHRl bXBfZmlsZSwKPiArICAgICAgICAgICAgenN0ZDo6REVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCwK PiArICAgICAgICApCj4gKyAgICAgICAgLmNvbnRleHQoInpzdGQ6OnN0cmVhbTo6Y29weV9lbmNv ZGUgZmFpbGVkIik/Owo+ICsKPiArICAgICAgICBsZXQgbXV0IG5ld19wYXRoX2Zvcl9jb21wcmVz c2VkID0gdW5jb21wcmVzc2VkX2ZpbGVfcGF0aC5jbG9uZSgpOwo+ICsgICAgICAgIG5ld19wYXRo X2Zvcl9jb21wcmVzc2VkLnNldF9leHRlbnNpb24oZm9ybWF0ISgie30ue1pTVERfRVhURU5TSU9O fSIsIHNlbGYuc3RhcnR0aW1lKSk7Cj4gKwo+ICsgICAgICAgIHN0ZDo6ZnM6OnJlbmFtZSgmdGVt cF9maWxlX3BhdGgsICZuZXdfcGF0aF9mb3JfY29tcHJlc3NlZCkKPiArICAgICAgICAgICAgLmNv bnRleHQoImZhaWxlZCB0byBtb3ZlIGNvbXByZXNzZWQgdGFzayBhY2hpdmUgZmlsZSIpPzsKPiAr ICAgICAgICBzdGQ6OmZzOjpyZW1vdmVfZmlsZSh1bmNvbXByZXNzZWRfZmlsZV9wYXRoKQo+ICsg ICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIHJlbW92ZSB1bmNvbXByZXNzZWQgYXJjaGl2 ZSBmaWxlIik/Owo+ICsKPiArICAgICAgICBzZWxmLnBhdGggPSBuZXdfcGF0aF9mb3JfY29tcHJl c3NlZDsKPiArICAgICAgICBzZWxmLmNvbXByZXNzZWQgPSB0cnVlOwo+ICsKPiArICAgICAgICBP aygoKSkKPiArICAgIH0KPiArfQo+ICsKPiArLy8vIEl0ZXJhdG9yIHRoYXQgbWVyZ2VzIHR3byBf c29ydGVkXyBgSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+YCwgcmV0dXJuaW5nIHRoZSBp dGVtcwo+ICsvLy8gZnJvbSBib3RoIGl0ZXJhdG9ycyBzb3J0ZWQuCj4gKy8vLyBUaGUgdHdvIGl0 ZXJhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gYmUgc29ydGVkIGRlc2NlbmRpbmdseSBiYXNlZCBvbiB0 aGUgdGFzaydzIHN0YXJ0dGltZSBhbmQKPiArLy8vIGFzY2VuZGluZ2x5IGJhc2VkIG9uIHRoZSB0 YXNrJ3MgVVBJRCdzIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhpcyBjYW4gYmUKPiArLy8vIGFj aGlldmVkIGJ5IHVzaW5nIHRoZSBbYGNvbXBhcmVfdGFza3NfcmV2ZXJzZWBdIGZ1bmN0aW9uIHdo ZW4gc29ydGluZyBhbiBhcnJheSBvZiB0YXNrcy4KPiArc3RydWN0IE1lcmdlVGFza0l0ZXJhdG9y PFQ6IEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPiwgVTogSXRlcmF0b3I8SXRlbSA9IFRh c2tDYWNoZUl0ZW0+PiB7Cj4gKyAgICBsZWZ0OiBQZWVrYWJsZTxUPiwKPiArICAgIHJpZ2h0OiBQ ZWVrYWJsZTxVPiwKPiArfQo+ICsKPiAraW1wbDxULCBVPiBNZXJnZVRhc2tJdGVyYXRvcjxULCBV Pgo+ICt3aGVyZQo+ICsgICAgVDogSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+LAo+ICsg ICAgVTogSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+LAo+ICt7Cj4gKyAgICAvLy8gQ3Jl YXRlIGEgbmV3IG1lcmdpbmcgaXRlcmF0b3IuCj4gKyAgICBmbiBuZXcobGVmdDogUGVla2FibGU8 VD4sIHJpZ2h0OiBQZWVrYWJsZTxVPikgLT4gU2VsZiB7Cj4gKyAgICAgICAgU2VsZiB7IGxlZnQs IHJpZ2h0IH0KPiArICAgIH0KPiArfQo+ICsKPiAraW1wbDxULCBVPiBJdGVyYXRvciBmb3IgTWVy Z2VUYXNrSXRlcmF0b3I8VCwgVT4KPiArd2hlcmUKPiArICAgIFQ6IEl0ZXJhdG9yPEl0ZW0gPSBU YXNrQ2FjaGVJdGVtPiwKPiArICAgIFU6IEl0ZXJhdG9yPEl0ZW0gPSBUYXNrQ2FjaGVJdGVtPiwK PiArewo+ICsgICAgdHlwZSBJdGVtID0gVDo6SXRlbTsKPiArCj4gKyAgICBmbiBuZXh0KCZtdXQg c2VsZikgLT4gT3B0aW9uPFQ6Okl0ZW0+IHsKPiArICAgICAgICBsZXQgb3JkZXIgPSBtYXRjaCAo c2VsZi5sZWZ0LnBlZWsoKSwgc2VsZi5yaWdodC5wZWVrKCkpIHsKPiArICAgICAgICAgICAgKFNv bWUobCksIFNvbWUocikpID0+IFNvbWUoY29tcGFyZV90YXNrcyhsLCByKSksCj4gKyAgICAgICAg ICAgIChTb21lKF8pLCBOb25lKSA9PiBTb21lKE9yZGVyaW5nOjpHcmVhdGVyKSwKPiArICAgICAg ICAgICAgKE5vbmUsIFNvbWUoXykpID0+IFNvbWUoT3JkZXJpbmc6Okxlc3MpLAo+ICsgICAgICAg ICAgICAoTm9uZSwgTm9uZSkgPT4gTm9uZSwKPiArICAgICAgICB9Owo+ICsKPiArICAgICAgICBt YXRjaCBvcmRlciB7Cj4gKyAgICAgICAgICAgIFNvbWUoT3JkZXJpbmc6OkdyZWF0ZXIpID0+IHNl bGYubGVmdC5uZXh0KCksCj4gKyAgICAgICAgICAgIFNvbWUoT3JkZXJpbmc6Okxlc3MpID0+IHNl bGYucmlnaHQubmV4dCgpLAo+ICsgICAgICAgICAgICBTb21lKE9yZGVyaW5nOjpFcXVhbCkgPT4g ewo+ICsgICAgICAgICAgICAgICAgLy8gRGVkdXAgYnkgY29uc3VtaW5nIHRoZSBvdGhlciBpdGVy YXRvciBhcyB3ZWxsCj4gKyAgICAgICAgICAgICAgICBsZXQgXyA9IHNlbGYucmlnaHQubmV4dCgp Owo+ICsgICAgICAgICAgICAgICAgc2VsZi5sZWZ0Lm5leHQoKQo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIE5vbmUgPT4gTm9uZSwKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gK30KPiAr Cj4gKy8vLyBJdGVyYXRvciBmb3IgYSBzaW5nbGUgdGFzayBhcmNoaXZlIGZpbGUuCj4gKy8vLwo+ ICsvLy8gVGhpcyBpdGVyYXRvciBpbXBsZW1lbnRzIGBJdGVyYXRvcjxJdGVtID0gUmVzdWx0PFRh c2tDYWNoZUl0ZW0sIEVycm9yPmAuIFdoZW4gaXRlcmF0aW5nLAo+ICsvLy8gdGFza3MgYXJlIHJl YWQgbGluZSBieSBsaW5lLCB3aXRob3V0IGxlYWRpbmcgdGhlIGVudGlyZSBhcmNoaXZlIGZpbGUg aW50byBtZW1vcnkuCj4gK3N0cnVjdCBBcmNoaXZlSXRlcmF0b3Igewo+ICsgICAgaXRlcjogTGlu ZXM8Qm94PGR5biBCdWZSZWFkPj4sCj4gK30KPiArCj4gK2ltcGwgQXJjaGl2ZUl0ZXJhdG9yIHsK PiArICAgIC8vLyBDcmVhdGUgYSBuZXcgaXRlcmF0b3IuCj4gKyAgICBwdWIgZm4gbmV3KHJlYWRl cjogQm94PGR5biBCdWZSZWFkPikgLT4gU2VsZiB7Cj4gKyAgICAgICAgbGV0IGxpbmVzID0gcmVh ZGVyLmxpbmVzKCk7Cj4gKwo+ICsgICAgICAgIFNlbGYgeyBpdGVyOiBsaW5lcyB9Cj4gKyAgICB9 Cj4gK30KPiArCj4gK2ltcGwgSXRlcmF0b3IgZm9yIEFyY2hpdmVJdGVyYXRvciB7Cj4gKyAgICB0 eXBlIEl0ZW0gPSBSZXN1bHQ8VGFza0NhY2hlSXRlbSwgRXJyb3I+Owo+ICsKPiArICAgIGZuIG5l eHQoJm11dCBzZWxmKSAtPiBPcHRpb248U2VsZjo6SXRlbT4gewo+ICsgICAgICAgIHNlbGYuaXRl ci5uZXh0KCkubWFwKHxyZXN1bHR8IHsKPiArICAgICAgICAgICAgcmVzdWx0Cj4gKyAgICAgICAg ICAgICAgICAuYW5kX3RoZW4ofGxpbmV8IE9rKHNlcmRlX2pzb246OmZyb21fc3RyKCZsaW5lKT8p KQo+ICsgICAgICAgICAgICAgICAgLm1hcF9lcnIoSW50bzo6aW50bykKPiArICAgICAgICB9KQo+ ICsgICAgfQo+ICt9Cj4gKwo+ICsvLy8gSXRlcmF0b3IgZm9yIGpvdXJuYWwgZmlsZXMuIFRoaXMg aXRlcmF0b3IgdXNlcyBbYEFyY2hpdmVJdGVyYXRvcmBdIGludGVybmFsbHksIGJ1dCB3aWxsIGVh Z2VybHkKPiArLy8vIGxvYWQgYWxsIHRhc2tzIGludG8gbWVtb3J5IHRvIHNvcnQgYW5kIGRlZHVw bGljYXRlIHRoZW0uCj4gK3N0cnVjdCBKb3VybmFsSXRlcmF0b3Igewo+ICsgICAgaW5uZXI6IEJv eDxkeW4gSXRlcmF0b3I8SXRlbSA9IFRhc2tDYWNoZUl0ZW0+PiwKPiArfQo+ICsKPiAraW1wbCBK b3VybmFsSXRlcmF0b3Igewo+ICsgICAgZm4gbmV3KGZpbGU6IEJveDxkeW4gQnVmUmVhZD4pIC0+ IFNlbGYgewo+ICsgICAgICAgIGxldCBpdGVyID0gQXJjaGl2ZUl0ZXJhdG9yOjpuZXcoZmlsZSk7 Cj4gKwo+ICsgICAgICAgIGxldCBtdXQgdGFza3M6IFZlYzxUYXNrQ2FjaGVJdGVtPiA9IGl0ZXIK PiArICAgICAgICAgICAgLmZsYXRfbWFwKHx0YXNrfCBtYXRjaCB0YXNrIHsKPiArICAgICAgICAg ICAgICAgIE9rKHRhc2spID0+IFNvbWUodGFzayksCj4gKyAgICAgICAgICAgICAgICBFcnIoZXJy KSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImNvdWxkIG5vdCByZWFk IHRhc2sgd2hpbGUgaXRlcmF0aW5nIG92ZXIgYXJjaGl2ZSBmaWxlOiB7ZXJyOiN9Iik7Cj4gKyAg ICAgICAgICAgICAgICAgICAgTm9uZQo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICB9KQo+ICsgICAgICAgICAgICAuY29sbGVjdCgpOwo+ICsKPiArICAgICAgICB0YXNrcy5zb3J0 X2J5KGNvbXBhcmVfdGFza3NfcmV2ZXJzZSk7Cj4gKyAgICAgICAgdGFza3MuZGVkdXAoKTsKPiAr Cj4gKyAgICAgICAgU2VsZiB7Cj4gKyAgICAgICAgICAgIGlubmVyOiBCb3g6Om5ldyh0YXNrcy5p bnRvX2l0ZXIoKSksCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtpbXBsIEl0ZXJh dG9yIGZvciBKb3VybmFsSXRlcmF0b3Igewo+ICsgICAgdHlwZSBJdGVtID0gVGFza0NhY2hlSXRl bTsKPiArCj4gKyAgICBmbiBuZXh0KCZtdXQgc2VsZikgLT4gT3B0aW9uPFNlbGY6Okl0ZW0+IHsK PiArICAgICAgICBzZWxmLmlubmVyLm5leHQoKQo+ICsgICAgfQo+ICt9Cj4gKwo+ICsjW2NmZyh0 ZXN0KV0KPiArbW9kIHRlc3RzIHsKPiArICAgIHVzZSBzdGQ6OmlvOjpDdXJzb3I7Cj4gKwo+ICsg ICAgdXNlIGNyYXRlOjp0ZXN0X3N1cHBvcnQ6OnRlbXA6Ok5hbWVkVGVtcERpcjsKPiArCj4gKyAg ICB1c2Ugc3VwZXI6Oio7Cj4gKwo+ICsgICAgI1t0ZXN0XQo+ICsgICAgZm4gYXJjaGl2ZV9maWxl bmFtZSgpIHsKPiArICAgICAgICBsZXQgYSA9IFRhc2tDYWNoZTo6cGFyc2VfYXJjaGl2ZV9maWxl bmFtZSgmUGF0aEJ1Zjo6ZnJvbSgiL3RtcC9hcmNoaXZlLjEwMDAwIikpLnVud3JhcCgpOwo+ICsK PiArICAgICAgICBhc3NlcnRfZXEhKGEucGF0aCwgUGF0aEJ1Zjo6ZnJvbSgiL3RtcC9hcmNoaXZl LjEwMDAwIikpOwo+ICsgICAgICAgIGFzc2VydF9lcSEoYS5zdGFydHRpbWUsIDEwMDAwKTsKPiAr ICAgICAgICBhc3NlcnQhKCFhLmNvbXByZXNzZWQpOwo+ICsKPiArICAgICAgICBsZXQgYSA9IFRh c2tDYWNoZTo6cGFyc2VfYXJjaGl2ZV9maWxlbmFtZSgmUGF0aEJ1Zjo6ZnJvbSgiL3RtcC9hcmNo aXZlLjEyMzQuenN0IikpLnVud3JhcCgpOwo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKGEucGF0 aCwgUGF0aEJ1Zjo6ZnJvbSgiL3RtcC9hcmNoaXZlLjEyMzQuenN0IikpOwo+ICsgICAgICAgIGFz c2VydF9lcSEoYS5zdGFydHRpbWUsIDEyMzQpOwo+ICsgICAgICAgIGFzc2VydCEoYS5jb21wcmVz c2VkKTsKPiArICAgIH0KPiArCj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiBhcmNoaXZlX2l0ZXJh dG9yKCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCBmaWxlID0gciMiCj4g KyAgICAgICAgICAgIHsidXBpZCI6InB2ZS1yZW1vdGUhVVBJRDpwdmU6MDAwMzlFNEQ6MDAyNjM4 Qjg6NjdCNEE5RDE6c3RvcGFsbDo6cm9vdEBwYW06Iiwic3RhdHVzIjoiT0siLCJlbmR0aW1lIjox MjM0NSwgInN0YXJ0dGltZSI6IDEyMzR9Cj4gKyAgICAgICAgICAgIHsidXBpZCI6InBicy1yZW1v dGUhVVBJRDpwYnM6MDAwMDAyQjI6MDAwMDAxNTg6MDAwMDAwMDA6Njc0RDgyOEM6bG9ncm90YXRl Ojpyb290QHBhbToiLCJzdGF0dXMiOiJPSyIsImVuZHRpbWUiOjEyMzQ1LCAic3RhcnR0aW1lIjog MTIzNH0KPiArICAgICAgICAgICAgaW52YWxpZCIjCj4gKyAgICAgICAgICAgIC50cmltX3N0YXJ0 KCk7Cj4gKwo+ICsgICAgICAgIGxldCBjdXJzb3IgPSBCb3g6Om5ldyhDdXJzb3I6Om5ldyhmaWxl LmFzX2J5dGVzKCkpKTsKPiArICAgICAgICBsZXQgbXV0IGl0ZXIgPSBBcmNoaXZlSXRlcmF0b3I6 Om5ldyhjdXJzb3IpOwo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKGl0ZXIubmV4dCgpLnVud3Jh cCgpLnVud3JhcCgpLnVwaWQucmVtb3RlKCksICJwdmUtcmVtb3RlIik7Cj4gKyAgICAgICAgYXNz ZXJ0X2VxIShpdGVyLm5leHQoKS51bndyYXAoKS51bndyYXAoKS51cGlkLnJlbW90ZSgpLCAicGJz LXJlbW90ZSIpOwo+ICsgICAgICAgIGFzc2VydCEoaXRlci5uZXh0KCkudW53cmFwKCkuaXNfZXJy KCkpOwo+ICsgICAgICAgIGFzc2VydCEoaXRlci5uZXh0KCkuaXNfbm9uZSgpKTsKPiArCj4gKyAg ICAgICAgT2soKCkpCj4gKyAgICB9Cj4gKwo+ICsgICAgZm4gdGFzayhzdGFydHRpbWU6IGk2NCwg ZW5kZWQ6IGJvb2wpIC0+IFRhc2tDYWNoZUl0ZW0gewo+ICsgICAgICAgIGxldCAoc3RhdHVzLCBl bmR0aW1lKSA9IGlmIGVuZGVkIHsKPiArICAgICAgICAgICAgKFNvbWUoIk9LIi5pbnRvKCkpLCBT b21lKHN0YXJ0dGltZSArIDEwKSkKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAo Tm9uZSwgTm9uZSkKPiArICAgICAgICB9Owo+ICsKPiArICAgICAgICBUYXNrQ2FjaGVJdGVtIHsK PiArICAgICAgICAgICAgdXBpZDogZm9ybWF0ISgKPiArICAgICAgICAgICAgICAgICJwdmUtcmVt b3RlIVVQSUQ6cHZlOjAwMDM5RTREOjAwMjYzOEI4OntzdGFydHRpbWU6MDhYfTpzdG9wYWxsOjpy b290QHBhbToiCj4gKyAgICAgICAgICAgICkKPiArICAgICAgICAgICAgLnBhcnNlKCkKPiArICAg ICAgICAgICAgLnVud3JhcCgpLAo+ICsgICAgICAgICAgICBzdGFydHRpbWUsCj4gKyAgICAgICAg ICAgIHN0YXR1cywKPiArICAgICAgICAgICAgZW5kdGltZSwKPiArICAgICAgICB9Cj4gKyAgICB9 Cj4gKwo+ICsgICAgZm4gYXNzZXJ0X3N0YXJ0dGltZXMoY2FjaGU6ICZXcml0YWJsZVRhc2tDYWNo ZSwgc3RhcnR0aW1lczogJltpNjRdKSB7Cj4gKyAgICAgICAgbGV0IHRhc2tzOiBWZWM8aTY0PiA9 IGNhY2hlCj4gKyAgICAgICAgICAgIC5nZXRfdGFza3MoR2V0VGFza3M6OkFsbCkKPiArICAgICAg ICAgICAgLnVud3JhcCgpCj4gKyAgICAgICAgICAgIC5tYXAofHRhc2t8IHRhc2suc3RhcnR0aW1l KQo+ICsgICAgICAgICAgICAuY29sbGVjdCgpOwo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKCZ0 YXNrcywgc3RhcnR0aW1lcyk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm4gYWRkX3Rhc2tzKGNhY2hl OiAmV3JpdGFibGVUYXNrQ2FjaGUsIHRhc2tzOiBWZWM8VGFza0NhY2hlSXRlbT4pIC0+IFJlc3Vs dDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgbXV0IG5vZGVfbWFwID0gTm9kZUZldGNoU3Vj Y2Vzc01hcDo6ZGVmYXVsdCgpOwo+ICsgICAgICAgIG5vZGVfbWFwLnNldF9ub2RlX3N1Y2Nlc3Mo InB2ZS1yZW1vdGUiLnRvX3N0cmluZygpLCAicHZlIi50b19zdHJpbmcoKSk7Cj4gKwo+ICsgICAg ICAgIGNhY2hlLnVwZGF0ZSh0YXNrcywgJm5vZGVfbWFwLCBIYXNoU2V0OjpuZXcoKSkKPiArICAg IH0KPiArCj4gKyAgICBjb25zdCBERUZBVUxUX01BWF9TSVpFOiB1NjQgPSAxMDAwMDsKPiArCj4g KyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X2FkZF90YXNrcygpIC0+IFJlc3VsdDwoKSwgRXJy b3I+IHsKPiArICAgICAgICBsZXQgdG1wX2RpciA9IE5hbWVkVGVtcERpcjo6bmV3KCk/Owo+ICsg ICAgICAgIGxldCBjYWNoZSA9IFRhc2tDYWNoZTo6bmV3KAo+ICsgICAgICAgICAgICB0bXBfZGly LnBhdGgoKSwKPiArICAgICAgICAgICAgQ3JlYXRlT3B0aW9uczo6bmV3KCksCj4gKyAgICAgICAg ICAgIDMsCj4gKyAgICAgICAgICAgIDEsCj4gKyAgICAgICAgICAgIDAsCj4gKyAgICAgICAgICAg IERFRkFVTFRfTUFYX1NJWkUsCj4gKyAgICAgICAgKQo+ICsgICAgICAgIC51bndyYXAoKQo+ICsg ICAgICAgIC53cml0ZSgpPzsKPiArCj4gKyAgICAgICAgY2FjaGUubmV3X2ZpbGUoMTAwMCwgZmFs c2UpPzsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmNhY2hlLmFyY2hpdmVfZmlsZXMoJmNh Y2hlLmxvY2spPy5sZW4oKSwgMSk7Cj4gKwo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZl YyFbdGFzaygxMDAwLCB0cnVlKSwgdGFzaygxMDAxLCB0cnVlKV0pPzsKPiArCj4gKyAgICAgICAg YXNzZXJ0X2VxISgKPiArICAgICAgICAgICAgY2FjaGUucmVhZF9zdGF0ZSgpLmN1dG9mZl90aW1l c3RhbXAoInB2ZS1yZW1vdGUiLCAicHZlIiksCj4gKyAgICAgICAgICAgIFNvbWUoMTAwMSkKPiAr ICAgICAgICApOwo+ICsKPiArICAgICAgICBjYWNoZS5yb3RhdGUoMTUwMCk/Owo+ICsKPiArICAg ICAgICBhc3NlcnRfZXEhKGNhY2hlLmNhY2hlLmFyY2hpdmVfZmlsZXMoJmNhY2hlLmxvY2spPy5s ZW4oKSwgMik7Cj4gKwo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZlYyFbdGFzaygxNTAw LCB0cnVlKSwgdGFzaygxNTAxLCB0cnVlKV0pPzsKPiArICAgICAgICBhZGRfdGFza3MoJmNhY2hl LCB2ZWMhW3Rhc2soMTIwMCwgdHJ1ZSksIHRhc2soMTMwMCwgdHJ1ZSldKT87Cj4gKwo+ICsgICAg ICAgIGFzc2VydF9lcSEoCj4gKyAgICAgICAgICAgIGNhY2hlLnJlYWRfc3RhdGUoKS5jdXRvZmZf dGltZXN0YW1wKCJwdmUtcmVtb3RlIiwgInB2ZSIpLAo+ICsgICAgICAgICAgICBTb21lKDE1MDEp LAo+ICsgICAgICAgICk7Cj4gKwo+ICsgICAgICAgIGNhY2hlLnJvdGF0ZSgyMDAwKT87Cj4gKyAg ICAgICAgYXNzZXJ0X2VxIShjYWNoZS5jYWNoZS5hcmNoaXZlX2ZpbGVzKCZjYWNoZS5sb2NrKT8u bGVuKCksIDMpOwo+ICsKPiArICAgICAgICBhZGRfdGFza3MoJmNhY2hlLCB2ZWMhW3Rhc2soMjAw MCwgdHJ1ZSldKT87Cj4gKyAgICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDE1MDIs IHRydWUpXSk/Owo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZlYyFbdGFzaygxMDAyLCB0 cnVlKV0pPzsKPiArCj4gKyAgICAgICAgLy8gVGhlc2UgYXJlIGJlZm9yZSB0aGUgY3V0LW9mZiBv ZiAxMDAwLCBzbyB0aGV5IHdpbGwgYmUgZGlzY2FyZGVkLgo+ICsgICAgICAgIC8vIGFkZF90YXNr cygmY2FjaGUsIHZlYyFbdGFzayg4MDAsIHRydWUpLCB0YXNrKDkwMCwgdHJ1ZSldKT87Cj4gKwo+ ICsgICAgICAgIC8vIFRoaXMgb25lIHNob3VsZCBiZSBkZWR1cGVkCj4gKyAgICAgICAgYWRkX3Rh c2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwMDAsIHRydWUpXSk/Owo+ICsKPiArICAgICAgICBhc3Nl cnRfc3RhcnR0aW1lcygKPiArICAgICAgICAgICAgJmNhY2hlLAo+ICsgICAgICAgICAgICAmWzIw MDAsIDE1MDIsIDE1MDEsIDE1MDAsIDEzMDAsIDEyMDAsIDEwMDIsIDEwMDEsIDEwMDBdLAo+ICsg ICAgICAgICk7Cj4gKwo+ICsgICAgICAgIGNhY2hlLnJvdGF0ZSgyNTAwKT87Cj4gKwo+ICsgICAg ICAgIGFzc2VydF9lcSEoY2FjaGUuY2FjaGUuYXJjaGl2ZV9maWxlcygmY2FjaGUubG9jayk/Lmxl bigpLCAzKTsKPiArCj4gKyAgICAgICAgYXNzZXJ0X3N0YXJ0dGltZXMoJmNhY2hlLCAmWzIwMDAs IDE1MDIsIDE1MDEsIDE1MDBdKTsKPiArCj4gKyAgICAgICAgY2FjaGUucm90YXRlKDMwMDApPzsK PiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmNhY2hlLmFyY2hpdmVfZmlsZXMoJmNhY2hlLmxv Y2spPy5sZW4oKSwgMyk7Cj4gKwo+ICsgICAgICAgIGFzc2VydF9zdGFydHRpbWVzKCZjYWNoZSwg JlsyMDAwXSk7Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgICNbdGVz dF0KPiArICAgIGZuIHRlc3RfYWN0aXZlX3Rhc2tzX2FyZV9taWdyYXRlZF90b19hcmNoaXZlKCkg LT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCB0bXBfZGlyID0gTmFtZWRUZW1w RGlyOjpuZXcoKT87Cj4gKyAgICAgICAgbGV0IGNhY2hlID0gVGFza0NhY2hlOjpuZXcoCj4gKyAg ICAgICAgICAgIHRtcF9kaXIucGF0aCgpLAo+ICsgICAgICAgICAgICBDcmVhdGVPcHRpb25zOjpu ZXcoKSwKPiArICAgICAgICAgICAgMywKPiArICAgICAgICAgICAgMSwKPiArICAgICAgICAgICAg MCwKPiArICAgICAgICAgICAgREVGQVVMVF9NQVhfU0laRSwKPiArICAgICAgICApCj4gKyAgICAg ICAgLnVud3JhcCgpCj4gKyAgICAgICAgLndyaXRlKCk/Owo+ICsKPiArICAgICAgICBjYWNoZS5u ZXdfZmlsZSgxMDAwLCBmYWxzZSk/Owo+ICsgICAgICAgIGFkZF90YXNrcygmY2FjaGUsIHZlYyFb dGFzaygxMDAwLCBmYWxzZSksIHRhc2soMTAwMSwgZmFsc2UpXSk/Owo+ICsgICAgICAgIGFzc2Vy dF9lcSEoY2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tzOjpBY3RpdmUpPy5jb3VudCgpLCAyKTsKPiAr Cj4gKyAgICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwMDAsIHRydWUpLCB0YXNr KDEwMDEsIHRydWUpXSk/Owo+ICsKPiArICAgICAgICBhc3NlcnRfc3RhcnR0aW1lcygmY2FjaGUs ICZbMTAwMSwgMTAwMF0pOwo+ICsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmdldF90YXNr cyhHZXRUYXNrczo6QWN0aXZlKT8uY291bnQoKSwgMCk7Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIHRlc3RfaW5pdCgpIC0+IFJlc3Vs dDwoKSwgRXJyb3I+IHsKPiArICAgICAgICBsZXQgdG1wX2RpciA9IE5hbWVkVGVtcERpcjo6bmV3 KCk/Owo+ICsgICAgICAgIGxldCBjYWNoZSA9IFRhc2tDYWNoZTo6bmV3KAo+ICsgICAgICAgICAg ICB0bXBfZGlyLnBhdGgoKSwKPiArICAgICAgICAgICAgQ3JlYXRlT3B0aW9uczo6bmV3KCksCj4g KyAgICAgICAgICAgIDMsCj4gKyAgICAgICAgICAgIDEsCj4gKyAgICAgICAgICAgIDEwMCwKPiAr ICAgICAgICAgICAgREVGQVVMVF9NQVhfU0laRSwKPiArICAgICAgICApCj4gKyAgICAgICAgLnVu d3JhcCgpCj4gKyAgICAgICAgLndyaXRlKCk/Owo+ICsKPiArICAgICAgICBjYWNoZS5pbml0KDEw MDApPzsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmNhY2hlLmFyY2hpdmVfZmlsZXMoJmNh Y2hlLmxvY2spPy5sZW4oKSwgMyk7Cj4gKwo+ICsgICAgICAgIGFkZF90YXNrcygKPiArICAgICAg ICAgICAgJmNhY2hlLAo+ICsgICAgICAgICAgICB2ZWMhW3Rhc2soMTA1MCwgdHJ1ZSksIHRhc2so OTUwLCB0cnVlKSwgdGFzayg4NTAsIHRydWUpXSwKPiArICAgICAgICApPzsKPiArCj4gKyAgICAg ICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFyY2hpdmVkKT8uY291bnQo KSwgMyk7Cj4gKwo+ICsgICAgICAgIE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgIGZuIGFkZF9m aW5pc2hlZF90cmFja2VkKGNhY2hlOiAmV3JpdGFibGVUYXNrQ2FjaGUsIHN0YXJ0dGltZTogaTY0 KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICAgICAgbGV0IHQgPSB0YXNrKHN0YXJ0dGlt ZSwgdHJ1ZSk7Cj4gKyAgICAgICAgbGV0IHVwaWQgPSB0LnVwaWQuY2xvbmUoKTsKPiArCj4gKyAg ICAgICAgbGV0IG11dCBub2RlX21hcCA9IE5vZGVGZXRjaFN1Y2Nlc3NNYXA6OmRlZmF1bHQoKTsK PiArICAgICAgICBub2RlX21hcC5zZXRfbm9kZV9zdWNjZXNzKCJwdmUtcmVtb3RlIi50b19zdHJp bmcoKSwgInB2ZSIudG9fc3RyaW5nKCkpOwo+ICsKPiArICAgICAgICBjYWNoZS51cGRhdGUodmVj IVt0XSwgJm5vZGVfbWFwLCBIYXNoU2V0Ojpmcm9tX2l0ZXIoW3VwaWRdKSkKPiArICAgIH0KPiAr Cj4gKyAgICAjW3Rlc3RdCj4gKyAgICBmbiB0ZXN0X3RyYWNraW5nX3Rhc2tzKCkgLT4gUmVzdWx0 PCgpLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCB0bXBfZGlyID0gTmFtZWRUZW1wRGlyOjpuZXco KT87Cj4gKyAgICAgICAgbGV0IGNhY2hlID0gVGFza0NhY2hlOjpuZXcoCj4gKyAgICAgICAgICAg IHRtcF9kaXIucGF0aCgpLAo+ICsgICAgICAgICAgICBDcmVhdGVPcHRpb25zOjpuZXcoKSwKPiAr ICAgICAgICAgICAgMywKPiArICAgICAgICAgICAgMSwKPiArICAgICAgICAgICAgMTAwLAo+ICsg ICAgICAgICAgICBERUZBVUxUX01BWF9TSVpFLAo+ICsgICAgICAgICkKPiArICAgICAgICAudW53 cmFwKCkKPiArICAgICAgICAud3JpdGUoKT87Cj4gKwo+ICsgICAgICAgIGNhY2hlLmluaXQoMTAw MCk/Owo+ICsKPiArICAgICAgICBjYWNoZS5hZGRfdHJhY2tlZF90YXNrKHRhc2soMTA1MCwgZmFs c2UpKT87Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoY2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tz OjpBY3RpdmUpPy5jb3VudCgpLCAxKTsKPiArICAgICAgICBjYWNoZS5hZGRfdHJhY2tlZF90YXNr KHRhc2soMTA2MCwgZmFsc2UpKT87Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFz a3MoR2V0VGFza3M6OkFjdGl2ZSk/LmNvdW50KCksIDIpOwo+ICsKPiArICAgICAgICBhc3NlcnRf ZXEhKGNhY2hlLnJlYWRfc3RhdGUoKS50cmFja2VkX3Rhc2tzKCkuY291bnQoKSwgMik7Cj4gKwo+ ICsgICAgICAgIC8vIE1hcmsgZmlyc3QgdGFzayBhcyBmaW5pc2hlZAo+ICsgICAgICAgIGFkZF9m aW5pc2hlZF90cmFja2VkKCZjYWNoZSwgMTA1MCk/Owo+ICsKPiArICAgICAgICBhc3NlcnRfZXEh KGNhY2hlLmdldF90YXNrcyhHZXRUYXNrczo6QWN0aXZlKT8uY291bnQoKSwgMSk7Cj4gKyAgICAg ICAgYXNzZXJ0X2VxIShjYWNoZS5nZXRfdGFza3MoR2V0VGFza3M6OkFyY2hpdmVkKT8uY291bnQo KSwgMSk7Cj4gKyAgICAgICAgYXNzZXJ0X2VxIShjYWNoZS5yZWFkX3N0YXRlKCkudHJhY2tlZF90 YXNrcygpLmNvdW50KCksIDEpOwo+ICsKPiArICAgICAgICAvLyBNYXJrIHNlY29uZCB0YXNrIGFz IGZpbmlzaGVkCj4gKyAgICAgICAgYWRkX2ZpbmlzaGVkX3RyYWNrZWQoJmNhY2hlLCAxMDYwKT87 Cj4gKwo+ICsgICAgICAgIGFzc2VydF9lcSEoY2FjaGUuZ2V0X3Rhc2tzKEdldFRhc2tzOjpBY3Rp dmUpPy5jb3VudCgpLCAwKTsKPiArICAgICAgICBhc3NlcnRfZXEhKGNhY2hlLmdldF90YXNrcyhH ZXRUYXNrczo6QXJjaGl2ZWQpPy5jb3VudCgpLCAyKTsKPiArICAgICAgICBhc3NlcnRfZXEhKGNh Y2hlLnJlYWRfc3RhdGUoKS50cmFja2VkX3Rhc2tzKCkuY291bnQoKSwgMCk7Cj4gKwo+ICsgICAg ICAgIE9rKCgpKQo+ICsgICAgfQo+ICsKPiArICAgICNbdGVzdF0KPiArICAgIGZuIGpvdXJuYWxf aXNfYXBwbGllZF9pZl9tYXhfc2l6ZV9leGNlZWRlZCgpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsK PiArICAgICAgICBsZXQgdG1wX2RpciA9IE5hbWVkVGVtcERpcjo6bmV3KCk/Owo+ICsKPiArICAg ICAgICAvLyBTaG91bGQgYmUgKmp1c3QqIGVub3VnaCB0byBmaXQgYSBzaW5nbGUgdGFzaywgd2hp Y2ggbWVhbnMgdGhhdCB3ZSBhcHBseSB0aGUgam91cm5hbAo+ICsgICAgICAgIC8vIGFmdGVyIGFk ZGluZyBhIHNlY29uZCBvbmUuCj4gKyAgICAgICAgY29uc3QgRU5PVUdIX0ZPUl9TSU5HTEVfVEFT SzogdTY0ID0gMjAwOwo+ICsKPiArICAgICAgICBsZXQgY2FjaGUgPSBUYXNrQ2FjaGU6Om5ldygK PiArICAgICAgICAgICAgdG1wX2Rpci5wYXRoKCksCj4gKyAgICAgICAgICAgIENyZWF0ZU9wdGlv bnM6Om5ldygpLAo+ICsgICAgICAgICAgICAzLAo+ICsgICAgICAgICAgICAxLAo+ICsgICAgICAg ICAgICAxMDAsCj4gKyAgICAgICAgICAgIEVOT1VHSF9GT1JfU0lOR0xFX1RBU0ssCj4gKyAgICAg ICAgKQo+ICsgICAgICAgIC51bndyYXAoKQo+ICsgICAgICAgIC53cml0ZSgpPzsKPiArCj4gKyAg ICAgICAgYWRkX3Rhc2tzKCZjYWNoZSwgdmVjIVt0YXNrKDEwMDAsIHRydWUpXSk/Owo+ICsgICAg ICAgIGFzc2VydCEoY2FjaGUuam91cm5hbF9zaXplKCk/ID4gMCk7Cj4gKwo+ICsgICAgICAgIGFk ZF90YXNrcygmY2FjaGUsIHZlYyFbdGFzaygxMDAwLCB0cnVlKV0pPzsKPiArCj4gKyAgICAgICAg YXNzZXJ0X2VxIShjYWNoZS5qb3VybmFsX3NpemUoKT8sIDApOwo+ICsKPiArICAgICAgICBPaygo KSkKPiArICAgIH0KPiArfQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpwZG0tZGV2ZWwgbWFpbGluZyBsaXN0CnBkbS1kZXZlbEBsaXN0cy5wcm94bW94 LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9w ZG0tZGV2ZWwK