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 3B95D1FF165 for ; Thu, 6 Nov 2025 10:26:45 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 38A3A1144C; Thu, 6 Nov 2025 10:27:26 +0100 (CET) Message-ID: <79f8b8ae-c20b-45f2-b213-eea967b924df@proxmox.com> Date: Thu, 6 Nov 2025 10:26:50 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Nicolas Frey , Proxmox Backup Server development discussion References: <20251105155129.517430-1-n.frey@proxmox.com> <20251105155129.517430-3-n.frey@proxmox.com> <528f6574-c7b1-42cb-ac2a-988c3fbacf08@proxmox.com> <3b5a03cb-97ea-416e-b7b6-40bb39f38d32@proxmox.com> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <3b5a03cb-97ea-416e-b7b6-40bb39f38d32@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1762421191828 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.047 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 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-backup 1/4] api: verify: move chunk loading into parallel handler 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gMTEvNi8yNSAxMDowNCBBTSwgTmljb2xhcyBGcmV5IHdyb3RlOgo+IAo+IE9uIDExLzYvMjUg OTo1NCBBTSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+PiBPbiAxMS81LzI1IDQ6NTEgUE0sIE5p Y29sYXMgRnJleSB3cm90ZToKPj4+IFRoaXMgd2F5LCB0aGUgY2h1bmtzIHdpbGwgYmUgbG9hZGVk IGluIHBhcmFsbGVsIGluIGFkZGl0aW9uIHRvIGJlaW5nCj4+PiBjaGVja2VkIGluIHBhcmFsbGVs Lgo+Pj4KPj4+IERlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBzdG9yYWdlLCB0aGlzIGNhbiBz cGVlZCB1cCByZWFkaW5nIGNodW5rcwo+Pj4gZnJvbSBkaXNrLCBlc3BlY2lhbGx5IHdoZW4gdGhl IHVuZGVybHlpbmcgc3RvcmFnZSBpcyBJTyBkZXB0aAo+Pj4gZGVwZW5kZW50LCBhbmQgdGhlIENQ VSBpcyBmYXN0ZXIgdGhhbiB0aGUgc3RvcmFnZS4KPj4+Cj4+PiBPcmlnaW5hbGx5LWJ5OiBEb21p bmlrIENzYXBhayA8ZC5jc2FwYWtAcHJveG1veC5jb20+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBOaWNv bGFzIEZyZXkgPG4uZnJleUBwcm94bW94LmNvbT4KPj4+IC0tLQo+Pj4gIMKgIHNyYy9iYWNrdXAv dmVyaWZ5LnJzIHwgMTIwICsrKysrKysrKysrKysrKysrKysrKysrKysrCj4+PiArLS0tLS0tLS0t LS0tLS0tLQo+Pj4gIMKgIDEgZmlsZSBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspLCA0NSBkZWxl dGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvc3JjL2JhY2t1cC92ZXJpZnkucnMgYi9zcmMv YmFja3VwL3ZlcmlmeS5ycwo+Pj4gaW5kZXggZTMzZmRmNTAuLjdmOTFmMzhjIDEwMDY0NAo+Pj4g LS0tIGEvc3JjL2JhY2t1cC92ZXJpZnkucnMKPj4+ICsrKyBiL3NyYy9iYWNrdXAvdmVyaWZ5LnJz Cj4+PiBAQCAtMSw2ICsxLDYgQEAKPj4+ICDCoCB1c2UgcGJzX2NvbmZpZzo6QmFja3VwTG9ja0d1 YXJkOwo+Pj4gIMKgIHVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoU2V0Owo+Pj4gLXVzZSBzdGQ6 OnN5bmM6OmF0b21pYzo6e0F0b21pY1VzaXplLCBPcmRlcmluZ307Cj4+PiArdXNlIHN0ZDo6c3lu Yzo6YXRvbWljOjp7QXRvbWljVTY0LCBBdG9taWNVc2l6ZSwgT3JkZXJpbmd9Owo+Pj4gIMKgIHVz ZSBzdGQ6OnN5bmM6OntBcmMsIE11dGV4fTsKPj4+ICDCoCB1c2Ugc3RkOjp0aW1lOjpJbnN0YW50 Owo+Pj4gIMKgIEBAIC0yMCw3ICsyMCw3IEBAIHVzZSBwYnNfZGF0YXN0b3JlOjppbmRleDo6e0No dW5rUmVhZEluZm8sCj4+PiBJbmRleEZpbGV9Owo+Pj4gIMKgIHVzZSBwYnNfZGF0YXN0b3JlOjpt YW5pZmVzdDo6e0JhY2t1cE1hbmlmZXN0LCBGaWxlSW5mb307Cj4+PiAgwqAgdXNlIHBic19kYXRh c3RvcmU6OntEYXRhQmxvYiwgRGF0YVN0b3JlLCBEYXRhc3RvcmVCYWNrZW5kLAo+Pj4gU3RvcmVQ cm9ncmVzc307Cj4+PiAgwqAgLXVzZSBjcmF0ZTo6dG9vbHM6OnBhcmFsbGVsX2hhbmRsZXI6OlBh cmFsbGVsSGFuZGxlcjsKPj4+ICt1c2UgY3JhdGU6OnRvb2xzOjpwYXJhbGxlbF9oYW5kbGVyOjp7 UGFyYWxsZWxIYW5kbGVyLCBTZW5kSGFuZGxlfTsKPj4+ICDCoCDCoCB1c2UgY3JhdGU6OmJhY2t1 cDo6aGllcmFyY2h5OjpMaXN0QWNjZXNzaWJsZUJhY2t1cEdyb3VwczsKPj4+ICDCoCBAQCAtMTU2 LDIzICsxNTYsMjAgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pj4gIMKgIMKgwqDCoMKgwqDCoMKg wqDCoCBsZXQgc3RhcnRfdGltZSA9IEluc3RhbnQ6Om5vdygpOwo+Pj4gIMKgIC3CoMKgwqDCoMKg wqDCoCBsZXQgbXV0IHJlYWRfYnl0ZXMgPSAwOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGxldCBtdXQg ZGVjb2RlZF9ieXRlcyA9IDA7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbGV0IHJlYWRfYnl0ZXMgPSBB cmM6Om5ldyhBdG9taWNVNjQ6Om5ldygwKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbGV0IGRlY29k ZWRfYnl0ZXMgPSBBcmM6Om5ldyhBdG9taWNVNjQ6Om5ldygwKSk7Cj4+PiAgwqAgLcKgwqDCoMKg wqDCoMKgIGxldCBkYXRhc3RvcmUyID0gQXJjOjpjbG9uZSgmc2VsZi5kYXRhc3RvcmUpOwo+Pj4g LcKgwqDCoMKgwqDCoMKgIGxldCBjb3JydXB0X2NodW5rczIgPSBBcmM6OmNsb25lKCZzZWxmLmNv cnJ1cHRfY2h1bmtzKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBsZXQgdmVyaWZpZWRfY2h1bmtzMiA9 IEFyYzo6Y2xvbmUoJnNlbGYudmVyaWZpZWRfY2h1bmtzKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBs ZXQgZXJyb3JzMiA9IEFyYzo6Y2xvbmUoJmVycm9ycyk7Cj4+PiAtCj4+PiAtwqDCoMKgwqDCoMKg wqAgbGV0IGRlY29kZXJfcG9vbCA9IFBhcmFsbGVsSGFuZGxlcjo6bmV3KAo+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgInZlcmlmeSBjaHVuayBkZWNvZGVyIiwKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDQsCj4+PiArwqDCoMKgwqDCoMKgwqAgbGV0IGRlY29kZXJfcG9vbCA9IFBhcmFs bGVsSGFuZGxlcjo6bmV3KCJ2ZXJpZnkgY2h1bmsKPj4+IGRlY29kZXIiLCA0LCB7Cj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgZGF0YXN0b3JlID0gQXJjOjpjbG9uZSgmc2VsZi5kYXRh c3RvcmUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IGNvcnJ1cHRfY2h1bmtzID0g QXJjOjpjbG9uZSgmc2VsZi5jb3JydXB0X2NodW5rcyk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBsZXQgdmVyaWZpZWRfY2h1bmtzID0gQXJjOjpjbG9uZSgmc2VsZi52ZXJpZmllZF9jaHVu a3MpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IGVycm9ycyA9IEFyYzo6Y2xvbmUo JmVycm9ycyk7Cj4+Cj4+IEhtbSwgdGhpcyByZWFsbHkgd2FycmFudHMgYW4gaW50ZXJuYWwgc3Rh dGUgc3RydWN0IGZvciBidW5kbGluZyB0aGVzZXMKPj4gYW5kIG9ubHkgY2xvbmluZyB0aGUgYXJj IGFyb3VuZCB0aGF0Lgo+Pgo+PiBFLmcuIEkgd291bGQgcHJvcG9zZSB0byBpbnRyb2R1Y2UgYSBz dHJ1Y3QgYWxvbmcgdGhlIGxpbmVzIG9mOgo+Pgo+PiBzdHJ1Y3QgSW5kZXhWZXJpZnlTdGF0ZSB7 Cj4+ICDCoMKgwqAgcmVhZF9ieXRlczogQXRvbWljVTY0LAo+PiAgwqDCoMKgIGRlY29kZWRfYnl0 ZXM6IEF0b21pY1U2NCwKPj4gIMKgwqDCoCBlcnJvcnM6IEF0b21pY1VzaXplLAo+PiAgwqDCoMKg IGRhdGFzdG9yZTogQXJjPERhdGFTdG9yZT4sCj4+ICDCoMKgwqAgY29ycnVwdF9jaHVua3M6IEFy YzxNdXRleDxIYXNoU2V0PFt1ODsgMzJdPj4+LAo+PiAgwqDCoMKgIHN0YXJ0X3RpbWU6IEluc3Rh bnQsCj4+IH0KPj4KPj4gV2hpY2ggY2FuIHRoZW4gYmUgd3JhcHBlZCBpbiBhbiBBcmMgYW5kIGFs c28gcGFzc2VkIGFsb25nIGFzIHBhcmFtZXRlcgo+PiB0byB0aGUgaW5uZXIgbWV0aG9kcyB3aGVy ZSByZXF1aXJlZC4KPj4KPj4gU2VlIHRoZSBkaWZmIGJlbG93ICh1bnRlc3RlZCksIHdoaWNoIGNv dWxkIGJlIHVzZWQgZm9yIGZ1cnRoZXIKPj4gcmVmaW5pbmcgdGhpcy4KPj4KPiAKPiBJIHRob3Vn aHQgdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBpbiB0aGUgaW5pdGlhbCBwYXRjaCwgYnV0IHdhc24n dAo+IHF1aXRlIHN1cmUgaG93IEkgc2hvdWxkIGFwcHJvYWNoIGl0LCBzbyB0aGFua3MgZm9yIHRo ZSBGZWVkYmFjayEKPiBUaGUgZGlmZiBiZWxvdyBsb29rcyBnb29kIHRvIG1lLCBJJ2xsIHNlbmQg YSB2MiBmb3IgdGhpcyBpbiBhZGRpdGlvbgo+IHRvIHRoZSB0aGluZ3MgeW91IHBvaW50ZWQgb3V0 IGluIHRoZSBvdGhlciBwYXRjaGVzLgoKR3JlYXQhIEJ1dCBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBk aWZmIHdhcyBqdXN0IGEgcm91Z2ggc3VnZ2VzdGlvbiBpbiAKd2hpY2ggd2F5IHRvIGltcHJvdmUg ZnJvbSBteSBzaWRlLCB0aGlzIGNhbiBiZSBmdXJ0aGVyIHJlZmluZWQgYSBiaXQuIApFLmcuIHdl IG1pZ2h0IHBhc3N0IHRoZSBzdGF0ZSBhbHNvIHRvIHRoZSBgYWRkX2NvcnJ1cHRfY2h1bmsoKWAg d2hpY2ggCndvdWxkIGFsc28gYmVuZWZpdCBmcm9tIGEgcmVkdWN0aW9uIGluIGZ1bmN0aW9uIHBh cmFtZXRlcnMgYnkgdGhpcy4+Cj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbW92ZSB8 KGNodW5rLCBkaWdlc3QsIHNpemUpOiAoRGF0YUJsb2IsIFt1ODsgMzJdLCB1NjQpfCB7Cj4+PiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgY2h1bmtfY3J5cHRfbW9kZSA9 IG1hdGNoIGNodW5rLmNyeXB0X21vZGUoKSB7Cj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEVycihlcnIpID0+IHsKPj4+IC0KPj4+IGNvcnJ1cHRfY2h1bmtz Mi5sb2NrKCkudW53cmFwKCkuaW5zZXJ0KGRpZ2VzdCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3JydXB0X2NodW5rcy5sb2NrKCkudW53cmFw KCkuaW5zZXJ0KGRpZ2VzdCk7Cj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaW5mbyEoImNhbid0IHZlcmlmeSBjaHVuaywgdW5rbm93bgo+Pj4g Q3J5cHRNb2RlIC0ge2Vycn0iKTsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVycm9yczIuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3Jz LmZldGNoX2FkZCgxLCBPcmRlcmluZzo6U2VxQ3N0KTsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gT2soKCkpOwo+Pj4gIMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE9rKG1vZGUpID0+IG1vZGUsCj4+PiBAQCAt MTgyLDIxICsxNzksMjEgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbmZvISgKPj4+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImNodW5rIENyeXB0TW9kZSB7Y2h1bmtfY3J5cHRf bW9kZTo/fSBkb2VzIG5vdAo+Pj4gbWF0Y2ggaW5kZXggQ3J5cHRNb2RlIHtjcnlwdF9tb2RlOj99 Igo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKTsKPj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcnMyLmZldGNoX2FkZCgxLCBPcmRl cmluZzo6U2VxQ3N0KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+Pj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gIMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgbGV0IEVycihlcnIpID0gY2h1bmsudmVyaWZ5X3VuZW5jcnlwdGVkKHNp emUKPj4+IGFzIHVzaXplLCAmZGlnZXN0KSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29ycnVwdF9jaHVua3MyLmxvY2soKS51bndyYXAoKS5pbnNlcnQoZGln ZXN0KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3JydXB0 X2NodW5rcy5sb2NrKCkudW53cmFwKCkuaW5zZXJ0KGRpZ2VzdCk7Cj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluZm8hKCJ7ZXJyfSIpOwo+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVycm9yczIuZmV0Y2hfYWRkKDEsIE9y ZGVyaW5nOjpTZXFDc3QpOwo+Pj4gLQo+Pj4gU2VsZjo6cmVuYW1lX2NvcnJ1cHRlZF9jaHVuayhk YXRhc3RvcmUyLmNsb25lKCksICZkaWdlc3QpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVycm9ycy5mZXRjaF9hZGQoMSwgT3JkZXJpbmc6OlNlcUNzdCk7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU2VsZjo6cmVuYW1lX2Nv cnJ1cHRlZF9jaHVuayhkYXRhc3RvcmUuY2xvbmUoKSwKPj4+ICZkaWdlc3QpOwo+Pj4gIMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2ZXJpZmllZF9jaHVua3MyLmxvY2soKS51bndyYXAo KS5pbnNlcnQoZGlnZXN0KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB2ZXJpZmllZF9jaHVua3MubG9jaygpLnVud3JhcCgpLmluc2VydChkaWdlc3QpOwo+Pj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gIMKgIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT2soKCkpCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9LAo+Pj4gLcKgwqDCoMKgwqDCoMKgICk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4+PiArwqDCoMKgwqDCoMKgwqAgfSk7Cj4+PiAgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBz a2lwX2NodW5rID0gfGRpZ2VzdDogJlt1ODsgMzJdfCAtPiBib29sIHsKPj4+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZgo+Pj4gc2VsZi52ZXJpZmllZF9jaHVua3MubG9jaygpLnVud3Jh cCgpLmNvbnRhaW5zKGRpZ2VzdCkgewo+Pj4gQEAgLTIyMyw2ICsyMjAsMjkgQEAgaW1wbCBWZXJp ZnlXb3JrZXIgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5kYXRhc3RvcmUKPj4+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuZ2V0X2NodW5rc19pbl9vcmRlcigmKmluZGV4 LCBza2lwX2NodW5rLCBjaGVja19hYm9ydCk/Owo+Pj4gIMKgICvCoMKgwqDCoMKgwqDCoCBsZXQg cmVhZGVyX3Bvb2wgPSBQYXJhbGxlbEhhbmRsZXI6Om5ldygicmVhZCBjaHVua3MiLCA0LCB7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgZGVjb2Rlcl9wb29sID0gZGVjb2Rlcl9wb29s LmNoYW5uZWwoKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBkYXRhc3RvcmUgPSBB cmM6OmNsb25lKCZzZWxmLmRhdGFzdG9yZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs ZXQgY29ycnVwdF9jaHVua3MgPSBBcmM6OmNsb25lKCZzZWxmLmNvcnJ1cHRfY2h1bmtzKTsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCByZWFkX2J5dGVzID0gQXJjOjpjbG9uZSgmcmVh ZF9ieXRlcyk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgZGVjb2RlZF9ieXRlcyA9 IEFyYzo6Y2xvbmUoJmRlY29kZWRfYnl0ZXMpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bGV0IGVycm9ycyA9IEFyYzo6Y2xvbmUoJmVycm9ycyk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBsZXQgYmFja2VuZCA9IHNlbGYuYmFja2VuZC5jbG9uZSgpOwo+Pj4gKwo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbW92ZSB8aW5mbzogQ2h1bmtSZWFkSW5mb3wgewo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTZWxmOjp2ZXJpZnlfY2h1bmtfYnlfYmFja2VuZCgK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmYmFja2VuZCwKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBcmM6OmNsb25lKCZkYXRh c3RvcmUpLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFyYzo6 Y2xvbmUoJmNvcnJ1cHRfY2h1bmtzKSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBBcmM6OmNsb25lKCZyZWFkX2J5dGVzKSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBcmM6OmNsb25lKCZkZWNvZGVkX2J5dGVzKSwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBcmM6OmNsb25lKCZlcnJvcnMp LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZkZWNvZGVyX3Bv b2wsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmluZm8sCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICkKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+ICvCoMKgwqDCoMKgwqDCoCB9KTsKPj4+ICsKPj4+ICDCoMKgwqDCoMKgwqDC oMKgwqAgZm9yIChwb3MsIF8pIGluIGNodW5rX2xpc3Qgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNlbGYud29ya2VyLmNoZWNrX2Fib3J0KCk/Owo+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNlbGYud29ya2VyLmZhaWxfb25fc2h1dGRvd24oKT87Cj4+PiBAQCAtMjM0 LDE5ICsyNTQsMTYgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7IC8vIGFscmVhZHkgdmVyaWZpZWQgb3IgbWFya2Vk IGNvcnJ1cHQKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiAgwqAgLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2VsZi52ZXJpZnlfY2h1bmtfYnlfYmFja2VuZCgKPj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmluZm8sCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZtdXQgcmVhZF9ieXRlcywKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJm11dCBkZWNvZGVkX2J5dGVzLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBBcmM6OmNsb25lKCZlcnJvcnMpLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmZGVjb2Rlcl9wb29sLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKT87Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWFkZXJfcG9vbC5zZW5kKGluZm8pPzsKPj4+ICDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gIMKgIC3CoMKgwqDCoMKgwqDCoCBkZWNvZGVyX3Bvb2wu Y29tcGxldGUoKT87Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmVhZGVyX3Bvb2wuY29tcGxldGUoKT87 Cj4+PiAgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBlbGFwc2VkID0gc3RhcnRfdGltZS5lbGFw c2VkKCkuYXNfc2Vjc19mNjQoKTsKPj4+ICDCoCArwqDCoMKgwqDCoMKgwqAgbGV0IHJlYWRfYnl0 ZXMgPSByZWFkX2J5dGVzLmxvYWQoT3JkZXJpbmc6OlNlcUNzdCk7Cj4+PiArwqDCoMKgwqDCoMKg wqAgbGV0IGRlY29kZWRfYnl0ZXMgPSBkZWNvZGVkX2J5dGVzLmxvYWQoT3JkZXJpbmc6OlNlcUNz dCk7Cj4+PiArCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCByZWFkX2J5dGVzX21pYiA9IChy ZWFkX2J5dGVzIGFzIGY2NCkgLyAoMTAyNC4wICogMTAyNC4wKTsKPj4+ICDCoMKgwqDCoMKgwqDC oMKgwqAgbGV0IGRlY29kZWRfYnl0ZXNfbWliID0gKGRlY29kZWRfYnl0ZXMgYXMgZjY0KSAvICgx MDI0LjAgKgo+Pj4gMTAyNC4wKTsKPj4+ICDCoCBAQCAtMjY2LDI2ICsyODMsMzEgQEAgaW1wbCBW ZXJpZnlXb3JrZXIgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBPaygoKSkKPj4+ICDCoMKgwqDC oMKgIH0KPj4+ICDCoCArwqDCoMKgICNbYWxsb3coY2xpcHB5Ojp0b29fbWFueV9hcmd1bWVudHMp XQo+Pj4gIMKgwqDCoMKgwqAgZm4gdmVyaWZ5X2NodW5rX2J5X2JhY2tlbmQoCj4+PiAtwqDCoMKg wqDCoMKgwqAgJnNlbGYsCj4+PiAtwqDCoMKgwqDCoMKgwqAgaW5mbzogJkNodW5rUmVhZEluZm8s Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmVhZF9ieXRlczogJm11dCB1NjQsCj4+PiAtwqDCoMKgwqDC oMKgwqAgZGVjb2RlZF9ieXRlczogJm11dCB1NjQsCj4+PiArwqDCoMKgwqDCoMKgwqAgYmFja2Vu ZDogJkRhdGFzdG9yZUJhY2tlbmQsCj4+PiArwqDCoMKgwqDCoMKgwqAgZGF0YXN0b3JlOiBBcmM8 RGF0YVN0b3JlPiwKPj4+ICvCoMKgwqDCoMKgwqDCoCBjb3JydXB0X2NodW5rczogQXJjPE11dGV4 PEhhc2hTZXQ8W3U4OyAzMl0+Pj4sCj4+PiArwqDCoMKgwqDCoMKgwqAgcmVhZF9ieXRlczogQXJj PEF0b21pY1U2ND4sCj4+PiArwqDCoMKgwqDCoMKgwqAgZGVjb2RlZF9ieXRlczogQXJjPEF0b21p Y1U2ND4sCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIGVycm9yczogQXJjPEF0b21pY1VzaXplPiwK Pj4+IC3CoMKgwqDCoMKgwqDCoCBkZWNvZGVyX3Bvb2w6ICZQYXJhbGxlbEhhbmRsZXI8KERhdGFC bG9iLCBbdTg7IDMyXSwgdTY0KT4sCj4+PiArwqDCoMKgwqDCoMKgwqAgZGVjb2Rlcl9wb29sOiAm U2VuZEhhbmRsZTwoRGF0YUJsb2IsIFt1ODsgMzJdLCB1NjQpPiwKPj4+ICvCoMKgwqDCoMKgwqDC oCBpbmZvOiAmQ2h1bmtSZWFkSW5mbywKPj4+ICDCoMKgwqDCoMKgICkgLT4gUmVzdWx0PCgpLCBF cnJvcj4gewo+Pj4gLcKgwqDCoMKgwqDCoMKgIG1hdGNoICZzZWxmLmJhY2tlbmQgewo+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRGF0YXN0b3JlQmFja2VuZDo6RmlsZXN5c3RlbSA9PiBtYXRj aAo+Pj4gc2VsZi5kYXRhc3RvcmUubG9hZF9jaHVuaygmaW5mby5kaWdlc3QpIHsKPj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRXJyKGVycikgPT4gc2VsZi5hZGRfY29ycnVwdF9j aHVuaygKPj4+ICvCoMKgwqDCoMKgwqDCoCBtYXRjaCBiYWNrZW5kIHsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIERhdGFzdG9yZUJhY2tlbmQ6OkZpbGVzeXN0ZW0gPT4gbWF0Y2gKPj4+IGRh dGFzdG9yZS5sb2FkX2NodW5rKCZpbmZvLmRpZ2VzdCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBFcnIoZXJyKSA9PiBTZWxmOjphZGRfY29ycnVwdF9jaHVuaygKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhc3RvcmUsCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29ycnVwdF9jaHVua3MsCj4+PiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluZm8uZGlnZXN0LAo+ Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcnMsCj4+ PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZmb3JtYXQhKCJj YW4ndCB2ZXJpZnkgY2h1bmssIGxvYWQgZmFpbGVkIC0KPj4+IHtlcnJ9IiksCj4+PiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApLAo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgT2soY2h1bmspID0+IHsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IHNpemUgPSBpbmZvLnNpemUoKTsKPj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcmVhZF9ieXRlcyArPSBjaHVuay5yYXdf c2l6ZSgpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlYWRf Ynl0ZXMuZmV0Y2hfYWRkKGNodW5rLnJhd19zaXplKCksCj4+PiBPcmRlcmluZzo6U2VxQ3N0KTsK Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVjb2Rlcl9w b29sLnNlbmQoKGNodW5rLCBpbmZvLmRpZ2VzdCwgc2l6ZSkpPzsKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZGVjb2RlZF9ieXRlcyArPSBzaXplOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlY29kZWRfYnl0ZXMuZmV0Y2hf YWRkKHNpemUsIE9yZGVyaW5nOjpTZXFDc3QpOwo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0sCj4+PiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRGF0YXN0b3JlQmFja2VuZDo6UzMoczNfY2xpZW50KSA9 PiB7Cj4+PiBAQCAtMzAyLDkgKzMyNCw5IEBAIGltcGwgVmVyaWZ5V29ya2VyIHsKPj4+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXRjaCBjaHVu a19yZXN1bHQgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgT2soY2h1bmspID0+IHsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IHNpemUg PSBpbmZvLnNpemUoKTsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcmVhZF9ieXRlcyArPSBjaHVuay5yYXdfc2l6ZSgp Owo+Pj4gKwo+Pj4gcmVhZF9ieXRlcy5mZXRjaF9hZGQoY2h1bmsucmF3X3NpemUoKSwgT3JkZXJp bmc6OlNlcUNzdCk7Cj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlY29kZXJfcG9vbC5zZW5kKChjaHVuaywKPj4+ IGluZm8uZGlnZXN0LCBzaXplKSk/Owo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpkZWNvZGVkX2J5dGVzICs9IHNpemU7 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGVjb2RlZF9ieXRlcy5mZXRjaF9hZGQoc2l6ZSwKPj4+IE9yZGVyaW5nOjpT ZXFDc3QpOwo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfQo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRXJyKGVycikgPT4gewo+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJv cnMuZmV0Y2hfYWRkKDEsCj4+PiBPcmRlcmluZzo6U2VxQ3N0KTsKPj4+IEBAIC0zMTIsNyArMzM0 LDkgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIE9rKE5vbmUpID0+IHNlbGYuYWRkX2NvcnJ1cHRfY2h1bmsoCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT2soTm9uZSkgPT4gU2VsZjo6 YWRkX2NvcnJ1cHRfY2h1bmsoCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkYXRhc3RvcmUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb3JydXB0X2NodW5rcywKPj4+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbmZvLmRpZ2VzdCwKPj4+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcnMsCj4+ PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmZv cm1hdCEoCj4+PiBAQCAtMzMwLDEzICszNTQsMTkgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pj4g IMKgwqDCoMKgwqDCoMKgwqDCoCBPaygoKSkKPj4+ICDCoMKgwqDCoMKgIH0KPj4+ICDCoCAtwqDC oMKgIGZuIGFkZF9jb3JydXB0X2NodW5rKCZzZWxmLCBkaWdlc3Q6IFt1ODsgMzJdLCBlcnJvcnM6 Cj4+PiBBcmM8QXRvbWljVXNpemU+LCBtZXNzYWdlOiAmc3RyKSB7Cj4+PiArwqDCoMKgIGZuIGFk ZF9jb3JydXB0X2NodW5rKAo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRhdGFzdG9yZTogQXJjPERhdGFT dG9yZT4sCj4+PiArwqDCoMKgwqDCoMKgwqAgY29ycnVwdF9jaHVua3M6IEFyYzxNdXRleDxIYXNo U2V0PFt1ODsgMzJdPj4+LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRpZ2VzdDogW3U4OyAzMl0sCj4+ PiArwqDCoMKgwqDCoMKgwqAgZXJyb3JzOiBBcmM8QXRvbWljVXNpemU+LAo+Pj4gK8KgwqDCoMKg wqDCoMKgIG1lc3NhZ2U6ICZzdHIsCj4+PiArwqDCoMKgICkgewo+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoCAvLyBQYW5pYyBvbiBwb2lzb25lZCBtdXRleAo+Pj4gLcKgwqDCoMKgwqDCoMKgIGxldCBt dXQgY29ycnVwdF9jaHVua3MgPSBzZWxmLmNvcnJ1cHRfY2h1bmtzLmxvY2soKS51bndyYXAoKTsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBsZXQgbXV0IGNvcnJ1cHRfY2h1bmtzID0gY29ycnVwdF9jaHVu a3MubG9jaygpLnVud3JhcCgpOwo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBjb3JydXB0X2NodW5r cy5pbnNlcnQoZGlnZXN0KTsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3IhKG1lc3NhZ2Up Owo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpT ZXFDc3QpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIFNlbGY6OnJlbmFtZV9jb3JydXB0ZWRfY2h1bmso c2VsZi5kYXRhc3RvcmUuY2xvbmUoKSwgJmRpZ2VzdCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgU2Vs Zjo6cmVuYW1lX2NvcnJ1cHRlZF9jaHVuayhkYXRhc3RvcmUuY2xvbmUoKSwgJmRpZ2VzdCk7Cj4+ PiAgwqDCoMKgwqDCoCB9Cj4+PiAgwqAgwqDCoMKgwqDCoCBmbiB2ZXJpZnlfZml4ZWRfaW5kZXgo JnNlbGYsIGJhY2t1cF9kaXI6ICZCYWNrdXBEaXIsIGluZm86Cj4+PiAmRmlsZUluZm8pIC0+IFJl c3VsdDwoKSwgRXJyb3I+IHsKPj4KPj4KPj4gZGlmZiAtLWdpdCBhL3NyYy9iYWNrdXAvdmVyaWZ5 LnJzIGIvc3JjL2JhY2t1cC92ZXJpZnkucnMKPj4gaW5kZXggN2Y5MWYzOGM5Li5lMDE0MDU3NTAg MTAwNjQ0Cj4+IC0tLSBhL3NyYy9iYWNrdXAvdmVyaWZ5LnJzCj4+ICsrKyBiL3NyYy9iYWNrdXAv dmVyaWZ5LnJzCj4+IEBAIC0xNTIsMjQgKzE1MiwyNCBAQCBpbXBsIFZlcmlmeVdvcmtlciB7Cj4+ ICDCoMKgwqDCoMKgwqDCoMKgIGluZGV4OiBCb3g8ZHluIEluZGV4RmlsZSArIFNlbmQ+LAo+PiAg wqDCoMKgwqDCoMKgwqDCoCBjcnlwdF9tb2RlOiBDcnlwdE1vZGUsCj4+ICDCoMKgwqDCoCApIC0+ IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gLcKgwqDCoMKgwqDCoMKgIGxldCBlcnJvcnMgPSBBcmM6 Om5ldyhBdG9taWNVc2l6ZTo6bmV3KDApKTsKPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgbGV0IHN0 YXJ0X3RpbWUgPSBJbnN0YW50Ojpub3coKTsKPj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgbGV0IHJl YWRfYnl0ZXMgPSBBcmM6Om5ldyhBdG9taWNVNjQ6Om5ldygwKSk7Cj4+IC3CoMKgwqDCoMKgwqDC oCBsZXQgZGVjb2RlZF9ieXRlcyA9IEFyYzo6bmV3KEF0b21pY1U2NDo6bmV3KDApKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGxldCBpbmRleF92ZXJpZnlfc3RhdGUgPSBBcmM6Om5ldyhJbmRleFZlcmlm eVN0YXRlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVhZF9ieXRlczogQXRvbWljVTY0 OjpuZXcoMCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlY29kZWRfYnl0ZXM6IEF0b21p Y1U2NDo6bmV3KDApLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcnM6IEF0b21pY1Vz aXplOjpuZXcoMCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGFzdG9yZTogQXJjOjpj bG9uZSgmc2VsZi5kYXRhc3RvcmUpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3JydXB0 X2NodW5rczogQXJjOjpjbG9uZSgmc2VsZi5jb3JydXB0X2NodW5rcyksCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0YXJ0X3RpbWU6IEluc3RhbnQ6Om5vdygpLAo+PiArwqDCoMKgwqDCoMKg wqAgfSk7Cj4+Cj4+ICDCoMKgwqDCoMKgwqDCoMKgIGxldCBkZWNvZGVyX3Bvb2wgPSBQYXJhbGxl bEhhbmRsZXI6Om5ldygidmVyaWZ5IGNodW5rCj4+IGRlY29kZXIiLCA0LCB7Cj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGxldCBkYXRhc3RvcmUgPSBBcmM6OmNsb25lKCZzZWxmLmRhdGFzdG9y ZSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBjb3JydXB0X2NodW5rcyA9IEFyYzo6 Y2xvbmUoJnNlbGYuY29ycnVwdF9jaHVua3MpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs ZXQgc3RhdGUgPSBBcmM6OmNsb25lKCZpbmRleF92ZXJpZnlfc3RhdGUpOwo+PiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGxldCB2ZXJpZmllZF9jaHVua3MgPSBBcmM6OmNsb25lKCZzZWxmLnZl cmlmaWVkX2NodW5rcyk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBlcnJvcnMgPSBB cmM6OmNsb25lKCZlcnJvcnMpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vdmUgfChj aHVuaywgZGlnZXN0LCBzaXplKTogKERhdGFCbG9iLCBbdTg7IDMyXSwgdTY0KXwgewo+PiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IGNodW5rX2NyeXB0X21vZGUgPSBtYXRj aCBjaHVuay5jcnlwdF9tb2RlKCkgewo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBFcnIoZXJyKSA9PiB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvcnJ1cHRfY2h1bmtzLmxvY2soKS51bndyYXAoKS5pbnNlcnQo ZGlnZXN0KTsKPj4gKyBzdGF0ZS5jb3JydXB0X2NodW5rcy5sb2NrKCkudW53cmFwKCkuaW5zZXJ0 KGRpZ2VzdCk7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW5mbyEoImNhbid0IHZlcmlmeSBjaHVuaywgdW5rbm93biBDcnlwdE1vZGUKPj4gLSB7 ZXJyfSIpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZS5lcnJvcnMuZmV0Y2hfYWRk KDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBPaygoKSk7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgT2sobW9kZSkgPT4gbW9kZSwKPj4gQEAgLTE3OSwxNCArMTc5LDE0IEBAIGlt cGwgVmVyaWZ5V29ya2VyIHsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW5mbyEoCj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICJjaHVuayBDcnlwdE1vZGUge2NodW5rX2NyeXB0X21vZGU6P30gZG9lcyBub3QKPj4gbWF0Y2gg aW5kZXggQ3J5cHRNb2RlIHtjcnlwdF9tb2RlOj99Igo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGVycm9ycy5mZXRjaF9hZGQoMSwgT3JkZXJpbmc6OlNlcUNzdCk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZS5lcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVy aW5nOjpTZXFDc3QpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pgo+ PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgbGV0IEVycihlcnIpID0gY2h1 bmsudmVyaWZ5X3VuZW5jcnlwdGVkKHNpemUgYXMKPj4gdXNpemUsICZkaWdlc3QpIHsKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvcnJ1cHRfY2h1bmtzLmxvY2so KS51bndyYXAoKS5pbnNlcnQoZGlnZXN0KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0YXRlLmNvcnJ1cHRfY2h1bmtzLmxvY2soKS51bndyYXAoKS5pbnNlcnQo ZGlnZXN0KTsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW5m byEoIntlcnJ9Iik7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl cnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU2VsZjo6cmVuYW1lX2NvcnJ1cHRlZF9jaHVuayhkYXRh c3RvcmUuY2xvbmUoKSwKPj4gJmRpZ2VzdCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdGF0ZS5lcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3Qp Owo+PiArIFNlbGY6OnJlbmFtZV9jb3JydXB0ZWRfY2h1bmsoc3RhdGUuZGF0YXN0b3JlLmNsb25l KCksICZkaWdlc3QpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNl IHsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmVyaWZpZWRf Y2h1bmtzLmxvY2soKS51bndyYXAoKS5pbnNlcnQoZGlnZXN0KTsKPj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gQEAgLTIwMSw3ICsyMDEsNyBAQCBpbXBsIFZlcmlmeVdv cmtlciB7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmCj4+IHNlbGYuY29y cnVwdF9jaHVua3MubG9jaygpLnVud3JhcCgpLmNvbnRhaW5zKGRpZ2VzdCkgewo+PiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IGRpZ2VzdF9zdHIgPSBoZXg6OmVuY29kZShk aWdlc3QpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW5mbyEoImNodW5r IHtkaWdlc3Rfc3RyfSB3YXMgbWFya2VkIGFzIGNvcnJ1cHQiKTsKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluZGV4X3ZlcmlmeV9zdGF0ZS5lcnJv cnMuZmV0Y2hfYWRkKDEsCj4+IE9yZGVyaW5nOjpTZXFDc3QpOwo+PiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdHJ1ZQo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxz ZSB7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmYWxzZQo+PiBAQCAtMjIy LDI0ICsyMjIsMTEgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pgo+PiAgwqDCoMKgwqDCoMKgwqDC oCBsZXQgcmVhZGVyX3Bvb2wgPSBQYXJhbGxlbEhhbmRsZXI6Om5ldygicmVhZCBjaHVua3MiLCA0 LCB7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IGRlY29kZXJfcG9vbCA9IGRlY29k ZXJfcG9vbC5jaGFubmVsKCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBkYXRhc3Rv cmUgPSBBcmM6OmNsb25lKCZzZWxmLmRhdGFzdG9yZSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGxldCBjb3JydXB0X2NodW5rcyA9IEFyYzo6Y2xvbmUoJnNlbGYuY29ycnVwdF9jaHVua3Mp Owo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgcmVhZF9ieXRlcyA9IEFyYzo6Y2xvbmUo JnJlYWRfYnl0ZXMpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgZGVjb2RlZF9ieXRl cyA9IEFyYzo6Y2xvbmUoJmRlY29kZWRfYnl0ZXMpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsZXQgZXJyb3JzID0gQXJjOjpjbG9uZSgmZXJyb3JzKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbGV0IHN0YXRlID0gQXJjOjpjbG9uZSgmaW5kZXhfdmVyaWZ5X3N0YXRlKTsKPj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgYmFja2VuZCA9IHNlbGYuYmFja2VuZC5jbG9uZSgp Owo+Pgo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vdmUgfGluZm86IENodW5rUmVhZElu Zm98IHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTZWxmOjp2ZXJpZnlfY2h1 bmtfYnlfYmFja2VuZCgKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZiYWNrZW5kLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQXJj OjpjbG9uZSgmZGF0YXN0b3JlKSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEFyYzo6Y2xvbmUoJmNvcnJ1cHRfY2h1bmtzKSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFyYzo6Y2xvbmUoJnJlYWRfYnl0ZXMpLAo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQXJjOjpjbG9uZSgmZGVjb2RlZF9ieXRl cyksCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBcmM6OmNsb25l KCZlcnJvcnMpLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmRl Y29kZXJfcG9vbCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZp bmZvLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBTZWxmOjp2ZXJpZnlfY2h1bmtfYnlfYmFja2VuZCgmYmFja2Vu ZCwKPj4gQXJjOjpjbG9uZSgmc3RhdGUpLCAmZGVjb2Rlcl9wb29sLCAmaW5mbykKPj4gIMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICDCoMKgwqDCoMKgwqDCoMKgIH0pOwo+Pgo+PiBAQCAt MjU5LDEwICsyNDYsMTAgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+Pgo+PiAgwqDCoMKgwqDCoMKg wqDCoCByZWFkZXJfcG9vbC5jb21wbGV0ZSgpPzsKPj4KPj4gLcKgwqDCoMKgwqDCoMKgIGxldCBl bGFwc2VkID0gc3RhcnRfdGltZS5lbGFwc2VkKCkuYXNfc2Vjc19mNjQoKTsKPj4gK8KgwqDCoMKg wqDCoMKgIGxldCBlbGFwc2VkID0KPj4gaW5kZXhfdmVyaWZ5X3N0YXRlLnN0YXJ0X3RpbWUuZWxh cHNlZCgpLmFzX3NlY3NfZjY0KCk7Cj4+Cj4+IC3CoMKgwqDCoMKgwqDCoCBsZXQgcmVhZF9ieXRl cyA9IHJlYWRfYnl0ZXMubG9hZChPcmRlcmluZzo6U2VxQ3N0KTsKPj4gLcKgwqDCoMKgwqDCoMKg IGxldCBkZWNvZGVkX2J5dGVzID0gZGVjb2RlZF9ieXRlcy5sb2FkKE9yZGVyaW5nOjpTZXFDc3Qp Owo+PiArwqDCoMKgwqDCoMKgwqAgbGV0IHJlYWRfYnl0ZXMgPQo+PiBpbmRleF92ZXJpZnlfc3Rh dGUucmVhZF9ieXRlcy5sb2FkKE9yZGVyaW5nOjpTZXFDc3QpOwo+PiArwqDCoMKgwqDCoMKgwqAg bGV0IGRlY29kZWRfYnl0ZXMgPQo+PiBpbmRleF92ZXJpZnlfc3RhdGUuZGVjb2RlZF9ieXRlcy5s b2FkKE9yZGVyaW5nOjpTZXFDc3QpOwo+Pgo+PiAgwqDCoMKgwqDCoMKgwqDCoCBsZXQgcmVhZF9i eXRlc19taWIgPSAocmVhZF9ieXRlcyBhcyBmNjQpIC8gKDEwMjQuMCAqIDEwMjQuMCk7Cj4+ICDC oMKgwqDCoMKgwqDCoMKgIGxldCBkZWNvZGVkX2J5dGVzX21pYiA9IChkZWNvZGVkX2J5dGVzIGFz IGY2NCkgLyAoMTAyNC4wICoKPj4gMTAyNC4wKTsKPj4gQEAgLTI3MCwxMyArMjU3LDEzIEBAIGlt cGwgVmVyaWZ5V29ya2VyIHsKPj4gIMKgwqDCoMKgwqDCoMKgwqAgbGV0IHJlYWRfc3BlZWQgPSBy ZWFkX2J5dGVzX21pYiAvIGVsYXBzZWQ7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgIGxldCBkZWNvZGVf c3BlZWQgPSBkZWNvZGVkX2J5dGVzX21pYiAvIGVsYXBzZWQ7Cj4+Cj4+IC3CoMKgwqDCoMKgwqDC oCBsZXQgZXJyb3JfY291bnQgPSBlcnJvcnMubG9hZChPcmRlcmluZzo6U2VxQ3N0KTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGxldCBlcnJvcl9jb3VudCA9Cj4+IGluZGV4X3ZlcmlmeV9zdGF0ZS5lcnJv cnMubG9hZChPcmRlcmluZzo6U2VxQ3N0KTsKPj4KPj4gIMKgwqDCoMKgwqDCoMKgwqAgaW5mbyEo Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIsKgIHZlcmlmaWVkIHtyZWFkX2J5dGVzX21p YjouMn0ve2RlY29kZWRfYnl0ZXNfbWliOi4yfQo+PiBNaUIgaW4ge2VsYXBzZWQ6LjJ9IHNlY29u ZHMsIHNwZWVkIHtyZWFkX3NwZWVkOi4yfS97ZGVjb2RlX3NwZWVkOi4yfQo+PiBNaUIvcyAoe2Vy cm9yX2NvdW50fSBlcnJvcnMpIgo+PiAgwqDCoMKgwqDCoMKgwqDCoCApOwo+Pgo+PiAtwqDCoMKg wqDCoMKgwqAgaWYgZXJyb3JzLmxvYWQoT3JkZXJpbmc6OlNlcUNzdCkgPiAwIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGlmIGluZGV4X3ZlcmlmeV9zdGF0ZS5lcnJvcnMubG9hZChPcmRlcmluZzo6U2Vx Q3N0KSA+IDAgewo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhaWwhKCJjaHVua3MgY291 bGQgbm90IGJlIHZlcmlmaWVkIik7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgIH0KPj4KPj4gQEAgLTI4 NiwyOCArMjczLDI2IEBAIGltcGwgVmVyaWZ5V29ya2VyIHsKPj4gIMKgwqDCoMKgICNbYWxsb3co Y2xpcHB5Ojp0b29fbWFueV9hcmd1bWVudHMpXQo+PiAgwqDCoMKgwqAgZm4gdmVyaWZ5X2NodW5r X2J5X2JhY2tlbmQoCj4+ICDCoMKgwqDCoMKgwqDCoMKgIGJhY2tlbmQ6ICZEYXRhc3RvcmVCYWNr ZW5kLAo+PiAtwqDCoMKgwqDCoMKgwqAgZGF0YXN0b3JlOiBBcmM8RGF0YVN0b3JlPiwKPj4gLcKg wqDCoMKgwqDCoMKgIGNvcnJ1cHRfY2h1bmtzOiBBcmM8TXV0ZXg8SGFzaFNldDxbdTg7IDMyXT4+ PiwKPj4gLcKgwqDCoMKgwqDCoMKgIHJlYWRfYnl0ZXM6IEFyYzxBdG9taWNVNjQ+LAo+PiAtwqDC oMKgwqDCoMKgwqAgZGVjb2RlZF9ieXRlczogQXJjPEF0b21pY1U2ND4sCj4+IC3CoMKgwqDCoMKg wqDCoCBlcnJvcnM6IEFyYzxBdG9taWNVc2l6ZT4sCj4+ICvCoMKgwqDCoMKgwqDCoCBzdGF0ZTog QXJjPEluZGV4VmVyaWZ5U3RhdGU+LAo+PiAgwqDCoMKgwqDCoMKgwqDCoCBkZWNvZGVyX3Bvb2w6 ICZTZW5kSGFuZGxlPChEYXRhQmxvYiwgW3U4OyAzMl0sIHU2NCk+LAo+PiAgwqDCoMKgwqDCoMKg wqDCoCBpbmZvOiAmQ2h1bmtSZWFkSW5mbywKPj4gIMKgwqDCoMKgICkgLT4gUmVzdWx0PCgpLCBF cnJvcj4gewo+PiAgwqDCoMKgwqDCoMKgwqDCoCBtYXRjaCBiYWNrZW5kIHsKPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRGF0YXN0b3JlQmFja2VuZDo6RmlsZXN5c3RlbSA9PiBtYXRjaAo+PiBk YXRhc3RvcmUubG9hZF9jaHVuaygmaW5mby5kaWdlc3QpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRGF0YXN0b3JlQmFja2VuZDo6RmlsZXN5c3RlbSA9PiBtYXRjaAo+PiBzdGF0ZS5kYXRh c3RvcmUubG9hZF9jaHVuaygmaW5mby5kaWdlc3QpIHsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEVycihlcnIpID0+IFNlbGY6OmFkZF9jb3JydXB0X2NodW5rKAo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YXN0b3JlLAo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29ycnVwdF9jaHVua3MsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBcmM6OmNsb25lKCZzdGF0ZS5kYXRh c3RvcmUpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQXJjOjpj bG9uZSgmc3RhdGUuY29ycnVwdF9jaHVua3MpLAo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbmZvLmRpZ2VzdCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVycm9ycywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICZzdGF0ZS5lcnJvcnMsCj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZmb3JtYXQhKCJjYW4ndCB2ZXJpZnkgY2h1bmssIGxvYWQgZmFpbGVkIC0g e2Vycn0iKSwKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICksCj4+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBPayhjaHVuaykgPT4gewo+PiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgc2l6ZSA9IGluZm8uc2l6ZSgpOwo+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVhZF9ieXRlcy5mZXRj aF9hZGQoY2h1bmsucmF3X3NpemUoKSwKPj4gT3JkZXJpbmc6OlNlcUNzdCk7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucmVhZF9ieXRlcwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuZmV0Y2hfYWRkKGNodW5rLnJh d19zaXplKCksIE9yZGVyaW5nOjpTZXFDc3QpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkZWNvZGVyX3Bvb2wuc2VuZCgoY2h1bmssIGluZm8uZGlnZXN0LCBz aXplKSk/Owo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVjb2Rl ZF9ieXRlcy5mZXRjaF9hZGQoc2l6ZSwgT3JkZXJpbmc6OlNlcUNzdCk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZS5kZWNvZGVkX2J5dGVzLmZldGNoX2Fk ZChzaXplLAo+PiBPcmRlcmluZzo6U2VxQ3N0KTsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0KPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIERhdGFzdG9yZUJhY2tlbmQ6OlMzKHMzX2NsaWVudCkgPT4gewo+PiBA QCAtMzI0LDI4ICszMDksMzAgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+PiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hdGNoIGNodW5rX3Jlc3VsdCB7 Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBPayhjaHVuaykgPT4gewo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgc2l6ZSA9IGluZm8uc2l6ZSgpOwo+ PiAtCj4+IHJlYWRfYnl0ZXMuZmV0Y2hfYWRkKGNodW5rLnJhd19zaXplKCksIE9yZGVyaW5nOjpT ZXFDc3QpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RhdGUKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnJlYWRfYnl0ZXMKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLmZldGNoX2FkZChjaHVuay5yYXdfc2l6ZSgpLAo+PiBPcmRlcmluZzo6 U2VxQ3N0KTsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVjb2Rlcl9wb29sLnNlbmQoKGNodW5rLAo+PiBpbmZvLmRp Z2VzdCwgc2l6ZSkpPzsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlY29kZWRfYnl0ZXMuZmV0Y2hfYWRkKHNpemUsCj4+ IE9yZGVyaW5nOjpTZXFDc3QpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdGUuZGVjb2RlZF9ieXRlcy5mZXRjaF9h ZGQoc2l6ZSwKPj4gT3JkZXJpbmc6OlNlcUNzdCk7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFcnIoZXJyKSA9PiB7Cj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlcnJvcnMuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpTZXFDc3QpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RhdGUuZXJyb3JzLmZldGNoX2FkZCgxLAo+PiBPcmRlcmluZzo6U2VxQ3N0KTsKPj4gIMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZXJyb3IhKCJjYW4ndCB2ZXJpZnkgY2h1bmssIGxvYWQKPj4gZmFpbGVkIC0ge2Vycn0iKTsK Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIH0KPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT2soTm9uZSkgPT4gU2VsZjo6 YWRkX2NvcnJ1cHRfY2h1bmsoCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRhdGFzdG9yZSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29ycnVwdF9jaHVua3MsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFyYzo6Y2xvbmUoJnN0YXRlLmRhdGFzdG9yZSks Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFyYzo6 Y2xvbmUoJnN0YXRlLmNvcnJ1cHRfY2h1bmtzKSwKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbmZvLmRpZ2VzdCwKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3JzLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3RhdGUuZXJyb3JzLAo+PiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZmb3JtYXQhKAo+ PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgImNhbid0IHZlcmlmeSBtaXNzaW5nIGNodW5rIHdpdGggZGlnZXN0IHt9IiwKPj4gIMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhleDo6 ZW5jb2RlKGluZm8uZGlnZXN0KQo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICksCj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICksCj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVy cihlcnIpID0+IHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZXJyb3JzLmZldGNoX2FkZCgxLCBPcmRlcmluZzo6U2VxQ3N0KTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdGUuZXJyb3JzLmZldGNo X2FkZCgxLCBPcmRlcmluZzo6U2VxQ3N0KTsKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvciEoImNhbid0IHZlcmlmeSBjaHVuaywgbG9hZCBm YWlsZWQgLQo+PiB7ZXJyfSIpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IEBAIC0z NTgsNyArMzQ1LDcgQEAgaW1wbCBWZXJpZnlXb3JrZXIgewo+PiAgwqDCoMKgwqDCoMKgwqDCoCBk YXRhc3RvcmU6IEFyYzxEYXRhU3RvcmU+LAo+PiAgwqDCoMKgwqDCoMKgwqDCoCBjb3JydXB0X2No dW5rczogQXJjPE11dGV4PEhhc2hTZXQ8W3U4OyAzMl0+Pj4sCj4+ICDCoMKgwqDCoMKgwqDCoMKg IGRpZ2VzdDogW3U4OyAzMl0sCj4+IC3CoMKgwqDCoMKgwqDCoCBlcnJvcnM6IEFyYzxBdG9taWNV c2l6ZT4sCj4+ICvCoMKgwqDCoMKgwqDCoCBlcnJvcnM6ICZBdG9taWNVc2l6ZSwKPj4gIMKgwqDC oMKgwqDCoMKgwqAgbWVzc2FnZTogJnN0ciwKPj4gIMKgwqDCoMKgICkgewo+PiAgwqDCoMKgwqDC oMKgwqDCoCAvLyBQYW5pYyBvbiBwb2lzb25lZCBtdXRleAo+PiBAQCAtNjgxLDMgKzY2OCwxMiBA QCBpbXBsIFZlcmlmeVdvcmtlciB7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gIMKgwqDCoMKg IH0KPj4gIMKgfQo+PiArCj4+ICtzdHJ1Y3QgSW5kZXhWZXJpZnlTdGF0ZSB7Cj4+ICvCoMKgwqAg cmVhZF9ieXRlczogQXRvbWljVTY0LAo+PiArwqDCoMKgIGRlY29kZWRfYnl0ZXM6IEF0b21pY1U2 NCwKPj4gK8KgwqDCoCBlcnJvcnM6IEF0b21pY1VzaXplLAo+PiArwqDCoMKgIGRhdGFzdG9yZTog QXJjPERhdGFTdG9yZT4sCj4+ICvCoMKgwqAgY29ycnVwdF9jaHVua3M6IEFyYzxNdXRleDxIYXNo U2V0PFt1ODsgMzJdPj4+LAo+PiArwqDCoMKgIHN0YXJ0X3RpbWU6IEluc3RhbnQsCj4+ICt9Cj4+ Cj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGJz LWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9s aXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVsCg==