From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 1492F422A5 for ; Thu, 31 Mar 2022 22:27:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5501368B0A8; Fri, 1 Apr 2022 01:27:09 +0300 (EEST) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 537DC68B0A8 for ; Fri, 1 Apr 2022 01:27:02 +0300 (EEST) Received: by mail-wr1-f52.google.com with SMTP id u16so1698506wru.4 for ; Thu, 31 Mar 2022 15:27:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=dBB6F1A6KAJzfSn7k8PsAJ9OA3Vffp8suTGxMnsimA8=; b=oBskyeD9EPiN5xHN+YuAimZq8roqTeYBtQl6J8nlrd9+Xi7KyZ9H+ORGCxX7NFPclP rpuMvtmMfPCS0y6j+H8Kq+CnXDNprfHR6PjDyHiClAFKW33ed6NdFEHrHFiSO/aB01ut qxaIBA0NsQXr2woei/t5XcVlv5y5KA1xCt7XKb57e7EpE0nUEnwXkmy5bf2Bo7GPW5lj 8aQA5e3/bhj3TvTabeFjaRz9MuQY/IFKOHZalH9NfN74LW/YGOhWIWUf7MW6DZGZlwiU 0l5q/JyWZUzLOCGwNb9Q88a8kxor57TYE60El8Z1Iq++P+CFxKI59WnYRolEhW8I+WcL TEFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=dBB6F1A6KAJzfSn7k8PsAJ9OA3Vffp8suTGxMnsimA8=; b=qEoaD2ZPyX2QHkEm0C3LMfGeFAio7deE7+F657Ex5vho1NU6DV8F/gUApVt0yTvaR0 gW8EzKnYGS/UBJGqd/9sqDG44Tx40ZwrpntOo+tyN1Ziuu6Wvy6X2IfCmPnHdLgvAnxb f3muHX1pEyvjvwu/ly8htrmALqlfB2zpV6ZcUk4vBjo3mbWGmz5K+MMRCwmZBY1ZTXYw tKNZujvAsOsV2/myH3Y/Z4CMtX8/MvHukqjuDeQT6W19/r9JSo0X/GiWDmtKmd/0OAxQ 8+aYaQBV+Ixqlh5WtS+86kp2kXa5Eigf145d+nZ3HcKj6AkM1gftoVvwVfv1QLqPlQyu pHnA== X-Gm-Message-State: AOAM531OIp9B34bd2ezBBJ1p/T7f6Mcx+8VInhgPVqVblgk9n6OILr4F EUUjI3S1UQLL64OnDcS0qU2LVYw7GEvQPXPvI0Y= X-Google-Smtp-Source: ABdhPJwtIe72HnVRYDnqM2xchwurD2yZBmf1p+8EV4IJdRYf9M4FbC7Y6zRLimXLUm6nRlAKeF9LuOidxOgemDGk+Ps= X-Received: by 2002:adf:fccc:0:b0:203:fe14:e316 with SMTP id f12-20020adffccc000000b00203fe14e316mr5579506wrs.42.1648765621036; Thu, 31 Mar 2022 15:27:01 -0700 (PDT) MIME-Version: 1.0 References: <20220330114039.69510-1-markg85@gmail.com> <20220330114039.69510-2-markg85@gmail.com> In-Reply-To: From: Mark Gaiser Date: Fri, 1 Apr 2022 00:25:52 +0200 Message-ID: To: Andreas Rheinhardt X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v10 1/1] avformat: Add IPFS protocol support. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gRnJpLCBBcHIgMSwgMjAyMiBhdCAxMjoxNyBBTSBNYXJrIEdhaXNlciA8bWFya2c4NUBnbWFp bC5jb20+IHdyb3RlOgoKPiBPbiBUaHUsIE1hciAzMSwgMjAyMiBhdCAxMTo0NCBQTSBBbmRyZWFz IFJoZWluaGFyZHQgPAo+IGFuZHJlYXMucmhlaW5oYXJkdEBvdXRsb29rLmNvbT4gd3JvdGU6Cj4K Pj4gTWFyayBHYWlzZXI6Cj4+ID4gT24gV2VkLCBNYXIgMzAsIDIwMjIgYXQgMzo1NyBQTSBBbmRy ZWFzIFJoZWluaGFyZHQgPAo+PiA+IGFuZHJlYXMucmhlaW5oYXJkdEBvdXRsb29rLmNvbT4gd3Jv dGU6Cj4+ID4KPj4gPj4gTWFyayBHYWlzZXI6Cj4+ID4+PiBPbiBXZWQsIE1hciAzMCwgMjAyMiBh dCAyOjIxIFBNIEFuZHJlYXMgUmhlaW5oYXJkdCA8Cj4+ID4+PiBhbmRyZWFzLnJoZWluaGFyZHRA b3V0bG9vay5jb20+IHdyb3RlOgo+PiA+Pj4KPj4gPj4+PiBNYXJrIEdhaXNlcjoKPj4gPj4+Pj4g VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yOgo+PiA+Pj4+PiAtIGZmcGxheSBpcGZzOi8vPGNp ZD4KPj4gPj4+Pj4gLSBmZnBsYXkgaXBuczovLzxjaWQ+Cj4+ID4+Pj4+Cj4+ID4+Pj4+IElQRlMg ZGF0YSBjYW4gYmUgcGxheWVkIGZyb20gc28gY2FsbGVkICJpcGZzIGdhdGV3YXlzIi4KPj4gPj4+ Pj4gQSBnYXRld2F5IGlzIGVzc2VudGlhbGx5IGEgd2Vic2VydmVyIHRoYXQgZ2l2ZXMgYWNjZXNz IHRvIHRoZQo+PiA+Pj4+PiBkaXN0cmlidXRlZCBJUEZTIG5ldHdvcmsuCj4+ID4+Pj4+Cj4+ID4+ Pj4+IFRoaXMgcHJvdG9jb2wgc3VwcG9ydCAoaXBmcyBhbmQgaXBucykgdGhlcmVmb3JlIHRyYW5z bGF0ZXMKPj4gPj4+Pj4gaXBmczovLyBhbmQgaXBuczovLyB0byBhIGh0dHA6Ly8gdXJsLiBUaGlz IHJlc3VsdGluZyB1cmwgaXMKPj4gPj4+Pj4gdGhlbiBoYW5kbGVkIGJ5IHRoZSBodHRwIHByb3Rv Y29sLiBJdCBjb3VsZCBhbHNvIGJlIGh0dHBzCj4+ID4+Pj4+IGRlcGVuZGluZyBvbiB0aGUgZ2F0 ZXdheSBwcm92aWRlZC4KPj4gPj4+Pj4KPj4gPj4+Pj4gVG8gdXNlIHRoaXMgcHJvdG9jb2wsIGEg Z2F0ZXdheSBtdXN0IGJlIHByb3ZpZGVkLgo+PiA+Pj4+PiBJZiB5b3UgZG8gbm90aGluZyBpdCB3 aWxsIHRyeSB0byBmaW5kIGl0IGluIHlvdXIKPj4gPj4+Pj4gJEhPTUUvLmlwZnMvZ2F0ZXdheSBm aWxlLiBUaGUgd2F5cyB0byBzZXQgaXQgbWFudWFsbHkgYXJlOgo+PiA+Pj4+PiAxLiBEZWZpbmUg YSAtZ2F0ZXdheSA8dXJsPiB0byB0aGUgZ2F0ZXdheS4KPj4gPj4+Pj4gMi4gRGVmaW5lICRJUEZT X0dBVEVXQVkgd2l0aCB0aGUgZnVsbCBodHRwIGxpbmsgdG8gdGhlIGdhdGV3YXkuCj4+ID4+Pj4+ IDMuIERlZmluZSAkSVBGU19QQVRIIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBkYXRhIHBhdGgu Cj4+ID4+Pj4+IDQuIEhhdmUgSVBGUyBydW5uaW5nIGluIHlvdXIgbG9jYWwgdXNlciBmb2xkZXIg KHVuZGVyICRIT01FLy5pcGZzKS4KPj4gPj4+Pj4KPj4gPj4+Pj4gU2lnbmVkLW9mZi1ieTogTWFy ayBHYWlzZXIgPG1hcmtnODVAZ21haWwuY29tPgo+PiA+Pj4+PiAtLS0KPj4gPj4+Pj4gIGNvbmZp Z3VyZSAgICAgICAgICAgICAgICAgfCAgIDIgKwo+PiA+Pj4+PiAgZG9jL3Byb3RvY29scy50ZXhp ICAgICAgICB8ICAzMCArKysrCj4+ID4+Pj4+ICBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgIHwg ICAyICsKPj4gPj4+Pj4gIGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMgfCAzMDkKPj4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gPj4+Pj4gIGxpYmF2Zm9ybWF0L3By b3RvY29scy5jICAgfCAgIDIgKwo+PiA+Pj4+PiAgNSBmaWxlcyBjaGFuZ2VkLCAzNDUgaW5zZXJ0 aW9ucygrKQo+PiA+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2lwZnNnYXRl d2F5LmMKPj4gPj4+Pj4KPj4gPj4+Pj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3Vy ZQo+PiA+Pj4+PiBpbmRleCBlNGQzNmFhNjM5Li41NWFmOTA5NTdhIDEwMDc1NQo+PiA+Pj4+PiAt LS0gYS9jb25maWd1cmUKPj4gPj4+Pj4gKysrIGIvY29uZmlndXJlCj4+ID4+Pj4+IEBAIC0zNTc5 LDYgKzM1NzksOCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+PiA+Pj4+PiAgdWRw bGl0ZV9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4+ID4+Pj4+ICB1bml4X3Byb3RvY29sX2Rl cHM9InN5c191bl9oIgo+PiA+Pj4+PiAgdW5peF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4+ ID4+Pj4+ICtpcGZzX3Byb3RvY29sX3NlbGVjdD0iaHR0cHNfcHJvdG9jb2wiCj4+ID4+Pj4+ICtp cG5zX3Byb3RvY29sX3NlbGVjdD0iaHR0cHNfcHJvdG9jb2wiCj4+ID4+Pj4+Cj4+ID4+Pj4+ICAj IGV4dGVybmFsIGxpYnJhcnkgcHJvdG9jb2xzCj4+ID4+Pj4+ICBsaWJhbXFwX3Byb3RvY29sX2Rl cHM9ImxpYnJhYmJpdG1xIgo+PiA+Pj4+PiBkaWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50ZXhp IGIvZG9jL3Byb3RvY29scy50ZXhpCj4+ID4+Pj4+IGluZGV4IGQyMDdkZjBiNTIuLjdjOWMwYTQ4 MDggMTAwNjQ0Cj4+ID4+Pj4+IC0tLSBhL2RvYy9wcm90b2NvbHMudGV4aQo+PiA+Pj4+PiArKysg Yi9kb2MvcHJvdG9jb2xzLnRleGkKPj4gPj4+Pj4gQEAgLTIwMjUsNSArMjAyNSwzNSBAQCBkZWNv ZGluZyBlcnJvcnMuCj4+ID4+Pj4+Cj4+ID4+Pj4+ICBAZW5kIHRhYmxlCj4+ID4+Pj4+Cj4+ID4+ Pj4+ICtAc2VjdGlvbiBpcGZzCj4+ID4+Pj4+ICsKPj4gPj4+Pj4gK0ludGVyUGxhbmV0YXJ5IEZp bGUgU3lzdGVtIChJUEZTKSBwcm90b2NvbCBzdXBwb3J0LiBPbmUgY2FuIGFjY2Vzcwo+PiA+Pj4+ IGZpbGVzIHN0b3JlZAo+PiA+Pj4+PiArb24gdGhlIElQRlMgbmV0d29yayB0aHJvdWdoIHNvIGNh bGxlZCBnYXRld2F5cy4gVGhvc2UgYXJlIGh0dHAocykKPj4gPj4+PiBlbmRwb2ludHMuCj4+ID4+ Pj4+ICtUaGlzIHByb3RvY29sIHdyYXBzIHRoZSBJUEZTIG5hdGl2ZSBwcm90b2NvbHMgKGlwZnM6 Ly8gYW5kCj4+IGlwbnM6Ly8pIHRvCj4+ID4+Pj4gYmUgc2VuZAo+PiA+Pj4+PiArdG8gc3VjaCBh IGdhdGV3YXkuIFVzZXJzIGNhbiAoYW5kIHNob3VsZCkgaG9zdCB0aGVpciBvd24gbm9kZSB3aGlj aAo+PiA+Pj4+IG1lYW5zIHRoaXMKPj4gPj4+Pj4gK3Byb3RvY29sIHdpbGwgdXNlIHlvdXIgbG9j YWwgbWFjaGluZSBnYXRld2F5IHRvIGFjY2VzcyBmaWxlcyBvbiB0aGUKPj4gPj4+PiBJUEZTIG5l dHdvcmsuCj4+ID4+Pj4+ICsKPj4gPj4+Pj4gK0lmIGEgdXNlciBkb2Vzbid0IGhhdmUgYSBub2Rl IG9mIHRoZWlyIG93biB0aGVuIHRoZSBwdWJsaWMgZ2F0ZXdheQo+PiA+Pj4+IGR3ZWIubGluayBp cwo+PiA+Pj4+PiArdXNlZCBieSBkZWZhdWx0Lgo+PiA+Pj4+PiArCj4+ID4+Pj4+ICtZb3UgY2Fu IHVzZSB0aGlzIHByb3RvY29sIGluIDIgd2F5cy4gVXNpbmcgSVBGUzoKPj4gPj4+Pj4gK0BleGFt cGxlCj4+ID4+Pj4+ICtmZnBsYXkgaXBmczovL1FtYkd0SmcyM3NraHZGbXU5bUppZVBWQnloZnp1 NXJ3bzc0TUVrVkRZQW1GNVQKPj4gPj4+Pj4gK0BlbmQgZXhhbXBsZQo+PiA+Pj4+PiArCj4+ID4+ Pj4+ICtPciB0aGUgSVBOUyBwcm90b2NvbCAoSVBOUyBpcyBtdXRhYmxlIElQRlMpOgo+PiA+Pj4+ PiArQGV4YW1wbGUKPj4gPj4+Pj4gK2ZmcGxheSBpcG5zOi8vUW1iR3RKZzIzc2todkZtdTltSmll UFZCeWhmenU1cndvNzRNRWtWRFlBbUY1VAo+PiA+Pj4+PiArQGVuZCBleGFtcGxlCj4+ID4+Pj4+ ICsKPj4gPj4+Pj4gK1lvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIGdhdGV3YXkgdG8gYmUgdXNlZDoK Pj4gPj4+Pj4gKwo+PiA+Pj4+PiArQHRhYmxlIEBvcHRpb24KPj4gPj4+Pj4gKwo+PiA+Pj4+PiAr QGl0ZW0gZ2F0ZXdheQo+PiA+Pj4+PiArRGVmaW5lcyB0aGUgZ2F0ZXdheSB0byB1c2UuIFdoZW4g bm90aGluZyBpcyBwcm92aWRlZCB0aGUgcHJvdG9jb2wKPj4gd2lsbAo+PiA+Pj4+IGZpcnN0IHRy eQo+PiA+Pj4+PiAreW91ciBsb2NhbCBnYXRld2F5LiBJZiB0aGF0IGZhaWxzIGR3ZWIubGluayB3 aWxsIGJlIHVzZWQuCj4+ID4+Pj4+ICsKPj4gPj4+Pj4gK0BlbmQgdGFibGUKPj4gPj4+Pj4KPj4g Pj4+Pj4gIEBjIG1hbiBlbmQgUFJPVE9DT0xTCj4+ID4+Pj4+IGRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4+ID4+Pj4+IGluZGV4IGQ3MTgy ZDZiZDguLmUzMjMzZmQ3YWMgMTAwNjQ0Cj4+ID4+Pj4+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2Vm aWxlCj4+ID4+Pj4+ICsrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4+ID4+Pj4+IEBAIC02NjAs NiArNjYwLDggQEAgT0JKUy0kKENPTkZJR19TUlRQX1BST1RPQ09MKSAgICAgICAgICAgICArPQo+ PiA+Pj4+IHNydHBwcm90by5vIHNydHAubwo+PiA+Pj4+PiAgT0JKUy0kKENPTkZJR19TVUJGSUxF X1BST1RPQ09MKSAgICAgICAgICArPSBzdWJmaWxlLm8KPj4gPj4+Pj4gIE9CSlMtJChDT05GSUdf VEVFX1BST1RPQ09MKSAgICAgICAgICAgICAgKz0gdGVlcHJvdG8ubyB0ZWVfY29tbW9uLm8KPj4g Pj4+Pj4gIE9CSlMtJChDT05GSUdfVENQX1BST1RPQ09MKSAgICAgICAgICAgICAgKz0gdGNwLm8K Pj4gPj4+Pj4gK09CSlMtJChDT05GSUdfSVBGU19QUk9UT0NPTCkgICAgICAgICAgICAgKz0gaXBm c2dhdGV3YXkubwo+PiA+Pj4+PiArT0JKUy0kKENPTkZJR19JUE5TX1BST1RPQ09MKSAgICAgICAg ICAgICArPSBpcGZzZ2F0ZXdheS5vCj4+ID4+Pj4+ICBUTFMtT0JKUy0kKENPTkZJR19HTlVUTFMp ICAgICAgICAgICAgICAgICs9IHRsc19nbnV0bHMubwo+PiA+Pj4+PiAgVExTLU9CSlMtJChDT05G SUdfTElCVExTKSAgICAgICAgICAgICAgICArPSB0bHNfbGlidGxzLm8KPj4gPj4+Pj4gIFRMUy1P QkpTLSQoQ09ORklHX01CRURUTFMpICAgICAgICAgICAgICAgKz0gdGxzX21iZWR0bHMubwo+PiA+ Pj4+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYyBiL2xpYmF2Zm9ybWF0 L2lwZnNnYXRld2F5LmMKPj4gPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gPj4+Pj4gaW5k ZXggMDAwMDAwMDAwMC4uMWEwMzk1ODljMAo+PiA+Pj4+PiAtLS0gL2Rldi9udWxsCj4+ID4+Pj4+ ICsrKyBiL2xpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPj4gPj4+Pj4gQEAgLTAsMCArMSwzMDkg QEAKPj4gPj4+Pj4gKy8qCj4+ID4+Pj4+ICsgKiBJUEZTIGFuZCBJUE5TIHByb3RvY29sIHN1cHBv cnQgdGhyb3VnaCBJUEZTIEdhdGV3YXkuCj4+ID4+Pj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIg TWFyayBHYWlzZXIKPj4gPj4+Pj4gKyAqCj4+ID4+Pj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCj4+ID4+Pj4+ICsgKgo+PiA+Pj4+PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiA+Pj4+PiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiA+Pj4+ PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCj4+ID4+Pj4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKPj4gdmVyc2lvbi4KPj4gPj4+Pj4gKyAqCj4+ID4+Pj4+ ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPj4gPj4+Pj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ID4+Pj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+IEdOVQo+PiA+Pj4+ PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4g Pj4+Pj4gKyAqCj4+ID4+Pj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4+ID4+Pj4+ICsgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4+ID4+Pj4+ ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BCj4+ID4+Pj4gMDIxMTAtMTMwMSBVU0EKPj4gPj4+Pj4gKyAqLwo+PiA+Pj4+PiAr Cj4+ID4+Pj4+ICsjaW5jbHVkZSAiYXZmb3JtYXQuaCIKPj4gPj4+Pj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvYXZhc3NlcnQuaCIKPj4gPj4+Pgo+PiA+Pj4+IFVudXNlZC4KPj4gPj4+Pgo+PiA+Pj4+ PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+PiA+Pj4+PiArI2luY2x1ZGUgImxp YmF2dXRpbC9pbnRlcm5hbC5oIgo+PiA+Pj4+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIK Pj4gPj4+Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvdHJlZS5oIgo+PiA+Pj4+Cj4+ID4+Pj4gPwo+ PiA+Pj4+Cj4+ID4+Pgo+PiA+Pj4gVGhpcyB3aG9sZSBpbmNsdWRlIHBhcnQgY2FuIGJlIGNsZWFu ZWQgdXAgbXVjaCBtb3JlLgo+PiA+Pj4gSnVzdCBoYXZpbmcgdGhlc2U6Cj4+ID4+PiAjaW5jbHVk ZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCj4+ID4+PiAjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5o Igo+PiA+Pj4gI2luY2x1ZGUgInVybC5oIgo+PiA+Pj4gI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4+ ID4+Pgo+PiA+Pj4gaXMgZW5vdWdoLgo+PiA+Pj4KPj4gPj4+Cj4+ID4+Pj4+ICsjaW5jbHVkZSA8 ZmNudGwuaD4KPj4gPj4+Pj4gKyNpZiBIQVZFX0lPX0gKPj4gPj4+Pj4gKyNpbmNsdWRlIDxpby5o Pgo+PiA+Pj4+PiArI2VuZGlmCj4+ID4+Pj4+ICsjaWYgSEFWRV9VTklTVERfSAo+PiA+Pj4+PiAr I2luY2x1ZGUgPHVuaXN0ZC5oPgo+PiA+Pj4+PiArI2VuZGlmCj4+ID4+Pj4+ICsjaW5jbHVkZSAi b3Nfc3VwcG9ydC5oIgo+PiA+Pj4+PiArI2luY2x1ZGUgInVybC5oIgo+PiA+Pj4+PiArI2luY2x1 ZGUgPHN0ZGxpYi5oPgo+PiA+Pj4+PiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4+ID4+Pj4+ICsK Pj4gPj4+Pj4gK3R5cGVkZWYgc3RydWN0IElQRlNHYXRld2F5Q29udGV4dCB7Cj4+ID4+Pj4+ICsg ICAgQVZDbGFzcyAqY2xhc3M7Cj4+ID4+Pj4+ICsgICAgVVJMQ29udGV4dCAqaW5uZXI7Cj4+ID4+ Pj4+ICsgICAgLy8gSXMgZmlsbGVkIGJ5IHRoZSAtZ2F0ZXdheSBhcmd1bWVudCBhbmQgbm90IGNo YW5nZWQgYWZ0ZXIuCj4+ID4+Pj4+ICsgICAgY2hhciAqZ2F0ZXdheTsKPj4gPj4+Pj4gKyAgICAv LyBJZiB0aGUgYWJvdmUgZ2F0ZXdheSBpcyBub24gbnVsbCwgaXQgd2lsbCBiZSBjb3BpZWQgaW50 bwo+PiB0aGlzCj4+ID4+Pj4gYnVmZmVyLgo+PiA+Pj4+PiArICAgIC8vIEVsc2UgdGhpcyBidWZm ZXIgd2lsbCBjb250YWluIHRoZSBhdXRvIGRldGVjdGVkIGdhdGV3YXkuCj4+ID4+Pj4+ICsgICAg Ly8gSW4gZWl0aGVyIGNhc2UsIHRoZSBnYXRld2F5IHRvIHVzZSB3aWxsIGJlIGluIHRoaXMgYnVm ZmVyLgo+PiA+Pj4+PiArICAgIGNoYXIgZ2F0ZXdheV9idWZmZXJbUEFUSF9NQVhdOwo+PiA+Pj4+ PiArfSBJUEZTR2F0ZXdheUNvbnRleHQ7Cj4+ID4+Pj4+ICsKPj4gPj4+Pj4gKy8vIEEgYmVzdC1l ZmZvcnQgd2F5IHRvIGZpbmQgdGhlIElQRlMgZ2F0ZXdheS4KPj4gPj4+Pj4gKy8vIE9ubHkgdGhl IG1vc3QgYXBwcm9waWF0ZSBnYXRld2F5IGlzIHNldC4gSXQncyBub3QgYWN0dWFsbHkKPj4gPj4g cmVxdWVzdGVkCj4+ID4+Pj4+ICsvLyAoaHR0cCBjYWxsKSB0byBwcmV2ZW50IGEgcG90ZW50aWFs IHNsb3dkb3duIGluIHN0YXJ0dXAuIEEKPj4gcG90ZW50aWFsCj4+ID4+Pj4gdGltZW91dAo+PiA+ Pj4+PiArLy8gaXMgaGFuZGxlZCBieSB0aGUgSFRUUCBwcm90b2NvbC4KPj4gPj4+Pj4gK3N0YXRp YyBpbnQgcG9wdWxhdGVfaXBmc19nYXRld2F5KFVSTENvbnRleHQgKmgpCj4+ID4+Pj4+ICt7Cj4+ ID4+Pj4+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+PiA+Pj4+ PiArICAgIGNoYXIgaXBmc19mdWxsX2RhdGFfZm9sZGVyW1BBVEhfTUFYXTsKPj4gPj4+Pj4gKyAg ICBjaGFyIGlwZnNfZ2F0ZXdheV9maWxlW1BBVEhfTUFYXTsKPj4gPj4+Pj4gKyAgICBzdHJ1Y3Qg c3RhdCBzdDsKPj4gPj4+Pj4gKyAgICBpbnQgc3RhdF9yZXQgPSAwOwo+PiA+Pj4+PiArICAgIGlu dCByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ID4+Pj4+ICsgICAgRklMRSAqZ2F0ZXdheV9maWxl ID0gTlVMTDsKPj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAgIC8vIFRlc3QgJElQRlNfR0FURVdBWS4K Pj4gPj4+Pj4gKyAgICBpZiAoZ2V0ZW52KCJJUEZTX0dBVEVXQVkiKSAhPSBOVUxMKSB7Cj4+ID4+ Pj4+ICsgICAgICAgIGlmIChzbnByaW50ZihjLT5nYXRld2F5X2J1ZmZlciwgc2l6ZW9mKGMtPmdh dGV3YXlfYnVmZmVyKSwKPj4gPj4gIiVzIiwKPj4gPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg IGdldGVudigiSVBGU19HQVRFV0FZIikpID49Cj4+ID4+Pj4gc2l6ZW9mKGMtPmdhdGV3YXlfYnVm ZmVyKSkgewo+PiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAi VGhlIElQRlNfR0FURVdBWSBlbnZpcm9ubWVudAo+PiA+Pj4+IHZhcmlhYmxlIGV4Y2VlZHMgdGhl IG1heGltdW0gbGVuZ3RoLiBXZSBhbGxvdyBhIG1heCBvZiAlenUKPj4gPj4gY2hhcmFjdGVyc1xu IiwKPj4gPj4+PiBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKTsKPj4gPj4+Pj4gKyAgICAgICAg ICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gPj4+Pj4gKyAgICAgICAgICAgIGdvdG8gZXJy Owo+PiA+Pj4+PiArICAgICAgICB9Cj4+ID4+Pj4+ICsKPj4gPj4+Pj4gKyAgICAgICAgcmV0ID0g MTsKPj4gPj4+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+ID4+Pj4+ICsgICAgfSBlbHNlCj4+ID4+ Pj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICIkSVBGU19HQVRFV0FZIGlzIGVt cHR5LlxuIik7Cj4+ID4+Pj4+ICsKPj4gPj4+Pj4gKyAgICAvLyBXZSBuZWVkIHRvIGtub3cgdGhl IElQRlMgZm9sZGVyIHRvIC0gZXZlbnR1YWxseSAtIHJlYWQgdGhlCj4+ID4+Pj4gY29udGVudHMg b2YKPj4gPj4+Pj4gKyAgICAvLyB0aGUgImdhdGV3YXkiIGZpbGUgd2hpY2ggd291bGQgdGVsbCB1 cyB0aGUgZ2F0ZXdheSB0byB1c2UuCj4+ID4+Pj4+ICsgICAgaWYgKGdldGVudigiSVBGU19QQVRI IikgPT0gTlVMTCkgewo+PiA+Pj4+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0RFQlVHLCAi JElQRlNfUEFUSCBpcyBlbXB0eS5cbiIpOwo+PiA+Pj4+PiArCj4+ID4+Pj4+ICsgICAgICAgIC8v IFRyeSB2aWEgdGhlIGhvbWUgZm9sZGVyLgo+PiA+Pj4+PiArICAgICAgICBpZiAoZ2V0ZW52KCJI T01FIikgPT0gTlVMTCkgewo+PiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19X QVJOSU5HLCAiJEhPTUUgYXBwZWFycyB0byBiZQo+PiBlbXB0eS5cbiIpOwo+PiA+Pj4+PiArICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+PiA+Pj4+PiArICAgICAgICAgICAgZ290 byBlcnI7Cj4+ID4+Pj4+ICsgICAgICAgIH0KPj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAgICAgICAv LyBWZXJpZnkgdGhlIGNvbXBvc2VkIHBhdGggZml0cy4KPj4gPj4+Pj4gKyAgICAgICAgaWYgKHNu cHJpbnRmKGlwZnNfZnVsbF9kYXRhX2ZvbGRlciwKPj4gPj4+PiBzaXplb2YoaXBmc19mdWxsX2Rh dGFfZm9sZGVyKSwKPj4gPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICIlcy8uaXBmcy8iLCBn ZXRlbnYoIkhPTUUiKSkgPj0KPj4gPj4+PiBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9sZGVyKSkg ewo+PiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQ RlMgZGF0YSBwYXRoIGV4Y2VlZHMKPj4gdGhlCj4+ID4+Pj4gbWF4IHBhdGggbGVuZ3RoICglenUp XG4iLCBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9sZGVyKSk7Cj4+ID4+Pj4+ICsgICAgICAgICAg ICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ID4+Pj4+ICsgICAgICAgICAgICBnb3RvIGVycjsK Pj4gPj4+Pj4gKyAgICAgICAgfQo+PiA+Pj4+PiArCj4+ID4+Pj4+ICsgICAgICAgIC8vIFN0YXQg dGhlIGZvbGRlci4KPj4gPj4+Pj4gKyAgICAgICAgLy8gSXQgc2hvdWxkIGV4aXN0IGluIGEgZGVm YXVsdCBJUEZTIHNldHVwIHdoZW4gcnVuIGFzCj4+IGxvY2FsCj4+ID4+Pj4gdXNlci4KPj4gPj4+ Pj4gKyNpZm5kZWYgX1dJTjMyCj4+ID4+Pj4+ICsgICAgICAgIHN0YXRfcmV0ID0gc3RhdChpcGZz X2Z1bGxfZGF0YV9mb2xkZXIsICZzdCk7Cj4+ID4+Pj4+ICsjZWxzZQo+PiA+Pj4+PiArICAgICAg ICBzdGF0X3JldCA9IHdpbjMyX3N0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAmc3QpOwo+PiA+ Pj4+PiArI2VuZGlmCj4+ID4+Pj4+ICsgICAgICAgIGlmIChzdGF0X3JldCA8IDApIHsKPj4gPj4+ Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIlVuYWJsZSB0byBmaW5kIElQ RlMgZm9sZGVyLiBXZQo+PiA+Pj4+IHRyaWVkOlxuIik7Cj4+ID4+Pj4+ICsgICAgICAgICAgICBh dl9sb2coaCwgQVZfTE9HX0lORk8sICItICRJUEZTX1BBVEgsIHdoaWNoIHdhcwo+PiA+PiBlbXB0 eS5cbiIpOwo+PiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiLSAk SE9NRS8uaXBmcyAoZnVsbCB1cmk6ICVzKQo+PiB3aGljaAo+PiA+Pj4+IGRvZXNuJ3QgZXhpc3Qu XG4iLCBpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpOwo+PiA+Pj4+PiArICAgICAgICAgICAgcmV0ID0g QVZFUlJPUihFTk9FTlQpOwo+PiA+Pj4+PiArICAgICAgICAgICAgZ290byBlcnI7Cj4+ID4+Pj4+ ICsgICAgICAgIH0KPj4gPj4+Pj4gKyAgICB9IGVsc2Ugewo+PiA+Pj4+PiArICAgICAgICBpZiAo c25wcmludGYoaXBmc19mdWxsX2RhdGFfZm9sZGVyLAo+PiA+Pj4+IHNpemVvZihpcGZzX2Z1bGxf ZGF0YV9mb2xkZXIpLCAiJXMiLAo+PiA+Pj4+PiArICAgICAgICAgICAgICAgICBnZXRlbnYoIklQ RlNfUEFUSCIpKSA+PQo+PiA+PiBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9sZGVyKSkKPj4gPj4+ PiB7Cj4+ID4+Pj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUg SVBGU19QQVRIIGVudmlyb25tZW50Cj4+ID4+Pj4gdmFyaWFibGUgZXhjZWVkcyB0aGUgbWF4aW11 bSBsZW5ndGguIFdlIGFsbG93IGEgbWF4IG9mICV6dQo+PiA+PiBjaGFyYWN0ZXJzXG4iLAo+PiA+ Pj4+IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpOwo+PiA+Pj4+PiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU5WQUwpOwo+PiA+Pj4+PiArICAgICAgICAgICAgZ290byBlcnI7Cj4+ID4+ Pj4+ICsgICAgICAgIH0KPj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAgIH0KPj4gPj4+Pj4gKwo+PiA+ Pj4+PiArICAgIC8vIENvcHkgdGhlIGZ1bGx5IGNvbXBvc2VkIGdhdGV3YXkgcGF0aCBpbnRvIGlw ZnNfZ2F0ZXdheV9maWxlLgo+PiA+Pj4+PiArICAgIGlmIChzbnByaW50ZihpcGZzX2dhdGV3YXlf ZmlsZSwgc2l6ZW9mKGlwZnNfZ2F0ZXdheV9maWxlKSwKPj4gPj4+PiAiJXNnYXRld2F5IiwKPj4g Pj4+Pj4gKyAgICAgICAgICAgICAgICAgaXBmc19mdWxsX2RhdGFfZm9sZGVyKSA+PQo+PiBzaXpl b2YoaXBmc19nYXRld2F5X2ZpbGUpKQo+PiA+PiB7Cj4+ID4+Pj4+ICsgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSBwYXRoCj4+IGV4Y2VlZHMK Pj4gPj4+PiB0aGUgbWF4IHBhdGggbGVuZ3RoICglenUpXG4iLCBzaXplb2YoaXBmc19nYXRld2F5 X2ZpbGUpKTsKPj4gPj4+Pj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9FTlQpOwo+PiA+Pj4+ PiArICAgICAgICBnb3RvIGVycjsKPj4gPj4+Pj4gKyAgICB9Cj4+ID4+Pj4+ICsKPj4gPj4+Pj4g KyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBnYXRld2F5IGZpbGUuCj4+ID4+Pj4+ICsg ICAgZ2F0ZXdheV9maWxlID0gYXZfZm9wZW5fdXRmOChpcGZzX2dhdGV3YXlfZmlsZSwgInIiKTsK Pj4gPj4+Pj4gKyAgICBpZiAoIWdhdGV3YXlfZmlsZSkgewo+PiA+Pj4+PiArICAgICAgICBhdl9s b2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUgKGZ1bGwgdXJpOgo+ PiA+PiAlcykKPj4gPj4+PiBkb2Vzbid0IGV4aXN0LiBJcyB0aGUgZ2F0ZXdheSBlbmFibGVkP1xu IiwgaXBmc19nYXRld2F5X2ZpbGUpOwo+PiA+Pj4+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVO T0VOVCk7Cj4+ID4+Pj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiA+Pj4+PiArICAgIH0KPj4gPj4+ Pj4gKwo+PiA+Pj4+PiArICAgIC8vIFJlYWQgYSBzaW5nbGUgbGluZSAoZmdldHMgc3RvcHMgYXQg bmV3IGxpbmUgbWFyaykuCj4+ID4+Pj4+ICsgICAgZmdldHMoYy0+Z2F0ZXdheV9idWZmZXIsIHNp emVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxLAo+PiA+Pj4+IGdhdGV3YXlfZmlsZSk7Cj4+ID4+ Pj4+ICsKPj4gPj4+Pj4gKyAgICAvLyBSZXBsYWNlIHRoZSBsYXN0IGNoYXIgd2l0aCBcMAo+PiA+ Pj4+PiArICAgIGMtPmdhdGV3YXlfYnVmZmVyW3NpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAx XSA9IDA7Cj4+Cj4+IEJ0dzogZmdldHMgbm9ybWFsbHkgemVyby10ZXJtaW5hdGVzIHRoZSBidWZm ZXIgKGkuZS4gaXQgcmVhZHMgYXQgbW9zdAo+PiAoc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSAt IDEpIC0gMSBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhbmQgYWRkcwo+PiBhIFwwLiBCdXQg b24gYSByZWFkIGVycm9yIGl0IGRvZXNuJ3QgZG8gdGhpcywgaW5zdGVhZCB0aGUgY29udGVudHMg b2YKPj4gdGhlIGJ1ZmZlciBhcmUgaW5kZXRlcm1pbmF0ZSBhbmQgc28gc2hvdWxkIG5vdCBiZSB1 c2VkLiBBZGRpbmcgYSB6ZXJvIGF0Cj4+IHRoZSB2ZXJ5IGVuZCBvZiBnYXRld2F5X2J1ZmZlciBk b2VzIG5vdCBoZWxwIHRvIGVuZm9yY2UgdGhpcy4KPgo+Cj4+IGZnZXRzIHJldHVybnMgTlVMTCBv biByZWFkIGVycm9yIGFuZCBpZiBub3RoaW5nIGNvdWxkIGJlIHJlYWQgZHVlIHRvCj4+IGltbWVk aWF0ZSBFT0Y7IHNvIHlvdSBzaG91bGQgY2hlY2sgZm9yIHRoYXQuCj4+IChCdHc6IEEgcHJvdG9j b2wncyBjb250ZXh0IGlzIHplcm9lZCBpbml0aWFsbHksIHNvCj4+IGMtPmdhdGV3YXlfYnVmZmVy W3NpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxXSBpcyBhbHJlYWR5IHplcm8sCj4+IGJlY2F1 c2Ugbm8gb25lIGV2ZXIgd3JvdGUgYW55dGhpbmcgZWxzZSB0aGVyZS4pCj4+Cj4KPiBOaWNlIG9u ZSEgTm9ib2R5IGNhdWdodCB0aGF0IGJlZm9yZS4KPiBTbyBjaGVja2luZyBvbiBOVUxMIGZvciBm Z2V0cyBhbmQgcmVtb3ZpbmcgdGhlIGxpbmUgdG8gYWRkIGEgMCBhdCB0aGUgZW5kCj4gaXMgdGhl IGFwcHJvcHJpYXRlIGZpeCBoZXJlIEkgYXNzdW1lLgo+Cj4gQ2hhbmdlZCB0byB3aGF0IEkgYXNz dW1lZC4gUGxlYXNlIGNvcnJlY3QgbWUgaWYgSSdtIHdyb25nLgo+Cj4KPj4KPj4gPj4+Pj4gKwo+ PiA+Pj4+PiArICAgIC8vIFJlcGxhY2UgZmlyc3Qgb2NjdXJlbmNlIG9mIGVuZCBvZiBsaW5lIHdp dGggXDAKPj4gPj4+Pj4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3YXlf YnVmZmVyLCAiXHIiKV0gPSAwOwo+PiA+Pj4+PiArICAgIGMtPmdhdGV3YXlfYnVmZmVyW3N0cmNz cG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcbiIpXSA9IDA7Cj4+ID4+Pj4KPj4gPj4+PiBJZiB0aGUg YnVmZmVyIGNvbnRhaW5zIGJvdGggXHIgYW5kIFxuIGFuZCB0aGUgZmlyc3QgXG4gcHJlY2VkZXMg dGhlCj4+ID4+Pj4gZmlyc3QgXHIsIHRoZW4gdGhlIGFib3ZlIHplcm9lcyBib3RoIHRoZSBmaXJz dCBcciBhbmQgdGhlIGZpcnN0IFxuLgo+PiBJZgo+PiA+Pj4+IGl0IGlzIGVub3VnaCB0byBvbmx5 IHplcm8gdGhlIGZpcnN0IG5ld2xpbmUsIHRoZW4gdGhpcyBjYW4gYmUKPj4gc2ltcGxpZmllZAo+ PiA+Pj4+IHRvICJjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAi XHJcbiIpXSA9IDA7Ii4KPj4gPj4+Pgo+PiA+Pj4KPj4gPj4+IEl0IHVzZWQgdG8gYmUgaW4geW91 ciBzdWdnZXN0ZWQgc2ltcGxpZmllZCBhcHByb2FjaC4KPj4gPj4+IEl0IHdhcyB0aGVuIHN1Z2dl c3RlZCB0byBzcGxpdCBpdCBiZWNhdXNlIG9mIG5ldyBsaW5lIGRpZmZlcmVuY2VzCj4+ID4+PiBv biBkaWZmZXJlbnQgcGxhdGZvcm1zLiBUaGlzIHdhcyBzdXBwb3NlZCB0byBjYXRjaCAiZXZlcnl0 aGluZyIuCj4+ID4+Pgo+PiA+Pj4gSSBwcmVmZXIgdG8ga2VlcCB0aGlzIGFzLWlzIG5vdy4KPj4g Pj4+Cj4+ID4+Cj4+ID4+IElzIGl0IGludGVuZGVkIHRvIHVzZSB3aGF0IGlzIGJldHdlZW4gdGhl IGZpcnN0IFxuIGFuZCB0aGUgZmlyc3QgXHIKPj4gPj4gbGF0ZXJvbiBhbHRob3VnaCB0aGlzIGRh dGEgd2lsbCBiZSBhZnRlciB0aGUgJ1wwJyBhZnRlciB0aGlzPyBUaGF0Cj4+IHdvdWxkCj4+ID4+ IGJlIHZlcnkgd2VpcmQuCj4+ID4+Cj4+ID4KPj4gPiBZb3UgaGF2ZSB0byBlbGFib3JhdGUgb24g dGhhdCBhcyB0aGF0IHNvdW5kcyByZWFsbHkgd3JvbmcgdG8gbWUuCj4+ID4KPj4KPj4gYy0+Z2F0 ZXdheV9idWZmZXJbc3RyY3NwbihjLT5nYXRld2F5X2J1ZmZlciwgIlxyXG4iKV0gPSAwOwo+PiBv dmVyd3JpdGVzIHRoZSBmaXJzdCBcciBvciBcbiAod2hpY2hldmVyIGlzIGZpcnN0KSB3aXRoICdc MCcgKGlmIGFueTsKPj4gb3RoZXJ3aXNlIGl0IG92ZXJ3cml0ZXMgdGhlIHRlcm1pbmF0aW5nIFww IHdpdGggXDAuCj4+Cj4+IGMtPmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZm ZXIsICJcciIpXSA9IDA7Cj4+IGMtPmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9i dWZmZXIsICJcbiIpXSA9IDA7Cj4+IGFsc28gZG9lcyB0aGlzLCBidXQgaW4gY2FzZSB0aGF0IHRo ZSBzdHJpbmcgb3JpZ2luYWxseSBjb250YWluZWQgYm90aCBhCj4+IFxyIGFuZCBhIFxuIHdpdGgg dGhlIGZpcnN0IFxuIHByZWNlZGluZyB0aGUgZmlyc3QgXHIgaXQgd291bGQgYWxzbyB6ZXJvCj4+ IHRoZSBmaXJzdCBccjsgdGhpcyBwb3NpdGlvbiBpcyBhZnRlciB0aGUgZmlyc3QgdGVybWluYXRp bmcgXDAgKHRob3NlIGF0Cj4+IHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgZmlyc3QgXG4gd2FzKSwg c28gaXQgYXBwZWFyZWQgdG8gbWUgdGhhdCB5b3UKPj4gaW50ZW5kZWQgdG8gdXNlIHdoYXQgaXMg YWZ0ZXIgdGhlIGZpcnN0IFwwLiBCZWNhdXNlIHRoYXQgaXMgdGhlIG9ubHkKPj4gZGlmZmVyZW5j ZSBiZXR3ZWVuIHRoZSBhcHByb2FjaCB3aXRoIHR3byBjYWxscyB0byBzdHJjc3BuIGFuZCB0aGUg b25lCj4+IHdpdGggb25lIGNhbGwgdG8gc3RyY3Nwbi4KPj4KPj4gQnV0IHRoZW4gSSByZWFkIHRo YXQgdGhpcyBoYXMgYmVlbiBzdWdnZXN0ZWQgdG8geW91IGFuZCBmb3VuZCB0aGUgbWFpbAo+PiAo aHR0cHM6Ly9mZm1wZWcub3JnL3BpcGVybWFpbC9mZm1wZWctZGV2ZWwvMjAyMi1GZWJydWFyeS8y OTI1OTAuaHRtbCkKPj4gdGhpcyByZWZlcnJlZCB0by4gVGhlcmUgc2VlbXMgdG8gYmUgYSBtaXN1 bmRlcnN0YW5kaW5nIGluIHRoZSBzZW1hbnRpY3MKPj4gb2Ygc3RyY3NwbiAobW9zdCBsaWtlbHkg YSBjb25mdXNpb24gd2l0aCBzdHJzdHIpOgo+PiBzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAi XHJcbiIpIHdvcmtzIHdpdGggc2luZ2xlIFxyIGFuZCBzaW5nbGUgXG4sCj4+IHRoZXJlIG5lZWQg bm90IGJlIGEgc2luZ2xlICJcclxuIiBzdWJzdHJpbmcuIEJvdGggbWV0aG9kcyB3b3VsZCBwcm9k dWNlCj4+IHN0cmluZ3MgdGhhdCBjb21wYXJlIGVxdWFsIGFjY29yZGluZyB0byBzdHJjbXAoKS4K Pj4KPj4KPiBUaGFuayB5b3UgZm9yIHlvdXIgZWxhYm9yYXRlIGV4cGxhbmF0aW9uIGhlcmUhCj4g QnV0IG5vdyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgcmVzb2x1dGlvbiAtIGlmIGFueSAtIHNob3Vs ZCBiZT8KPgo+Cj4+ID4gSWYgSSdtIGNvcnJlY3QgYSBmaWxlIGRvZXNuJ3Qgc3RhcnQgd2l0aCBl aXRoZXIgXHIgb3IgXG4uIFVubGVzcyB5b3UKPj4gaGF2ZQo+PiA+IGludGVudGlvbmFsIGxpbmUg YnJlYWtzLgo+PiA+IEl0IGVuZHMgd2l0aCB0aG9zZSwgbm90IHN0YXJ0cy4gSSdtIGp1c3QgZ29p bmcgdG8gaWdub3JlIFxyIGZvciBub3cgZm9yCj4+ID4gYnJldml0eS4KPj4gPgo+PiA+IFNvIGlm IHlvdSBoYXZlOgo+PiA+IFxuPHlvdXIgZ2F0ZXdheT5cbgo+PiA+Cj4+ID4gV291bGQgYmUgdHJh bnNsYXRlZCB0bzoKPj4gPiBcMDx5b3VyIGdhdGV3YXk+XG4KPj4gPgo+PiA+IFRoZW4gaW5kZWVk IHlvdSB3b24ndCBnZXQgYSBnYXRld2F5IGJlY2F1c2UgaXQncyBpbnRlbmRlZCB0aGF0IHlvdXIK Pj4gZmlyc3QKPj4gPiBsaW5lIGlzIHRoYXQgZ2F0ZXdheS4KPj4gPgo+PiA+IEl0IG11c3QgYmUg aW4gdGhpcyBmb3JtYXQ6Cj4+ID4gPHlvdXIgZ2F0ZXdheT5cbgo+PiA+Cj4+ID4gb3Igd2l0aG91 dCBhIG5ld2xpbmUKPj4gPiA8eW91ciBnYXRld2F5Pgo+PiA+Cj4+ID4gVGhlcmUgaXMgbm8gYmxh bmsgbGluZSB0cmltbWluZyB0byBmaXggdXNlciBzY3Jld3Vwcy4KPj4gPiBVc2VycyBhcmUgbm90 IGludGVuZGVkIHRvIHRvdWNoIHRoYXQgZmlsZSBhbnlob3cuIEl0J3MgYXV0by1nZW5lcmF0ZWQg YnkKPj4gPiBJUEZTIGFuZCByZW1vdmVkIG9uY2UgaXQgc2h1dHMgZG93bi4KPj4gPgo+PiA+Cj4+ ID4+Pgo+PiA+Pj4+PiArCj4+ID4+Pj4+ICsgICAgLy8gSWYgc3RybGVuIGZpbmRzIGFueXRoaW5n IGxvbmdlciB0aGVuIDAgY2hhcmFjdGVycyB0aGVuIHdlCj4+IGhhdmUKPj4gPj4gYQo+PiA+Pj4+ PiArICAgIC8vIHBvdGVudGlhbCBnYXRld2F5IHVybC4KPj4gPj4+Pj4gKyAgICBpZiAoc3RybGVu KGMtPmdhdGV3YXlfYnVmZmVyKSA8IDEpIHsKPj4gPj4+Pgo+PiA+Pj4+IGlmICgqYy0+Z2F0ZXdh eV9idWZmZXIgPT0gJ1wwJykKPj4gPj4+Pgo+PiA+Pj4KPj4gPj4+IElzIHRoYXQgYSBzdHlsZSBk aWZmZXJlbmNlIG9yIGFuIGFjdHVhbCBiZWhhdmlvciBkaWZmZXJlbmNlPwo+PiA+Pj4KPj4gPj4K Pj4gPj4gVGhlIGZvcm1lciB3b3VsZCBjYWxsIHN0cmxlbiB0byBjaGVjayB3aGV0aGVyIGEgc3Ry aW5nIGlzIGVtcHR5ICh1bmxlc3MKPj4gPj4gdGhlIGNvbXBpbGVyIG9wdGltaXplcyBpdCBhd2F5 KS4gTm8gYWN0dWFsIGJlaGF2aW91ciBkaWZmZXJlbmNlIGV4aXN0cy4KPj4gPj4gQnV0IGl0IGlz IG5ldmVydGhlbGVzcyBtb3JlIHRoYW4gYSBzdHlsZSBkaWZmZXJlbmNlLgo+PiA+Pgo+PiA+Cj4+ ID4gRml4ZWQgbG9jYWxseS4KPj4gPgo+PiA+Pgo+PiA+Pj4KPj4gPj4+Pgo+PiA+Pj4+PiArICAg ICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUgKGZ1 bGwgdXJpOgo+PiA+PiAlcykKPj4gPj4+PiBhcHBlYXJzIHRvIGJlIGVtcHR5LiBJcyB0aGUgZ2F0 ZXdheSBzdGFydGVkP1xuIiwgaXBmc19nYXRld2F5X2ZpbGUpOwo+PiA+Pj4+PiArICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4+ID4+Pj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiA+Pj4+ PiArICAgIH0gZWxzZSB7Cj4+ID4+Pj4+ICsgICAgICAgIC8vIFdlJ3JlIGRvbmUsIHRoZSBjLT5n YXRld2F5X2J1ZmZlciBoYXMgc29tZXRoaW5nIHRoYXQKPj4gbG9va3MKPj4gPj4+PiB2YWxpZC4K Pj4gPj4+Pj4gKyAgICAgICAgcmV0ID0gMTsKPj4gPj4+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+ ID4+Pj4+ICsgICAgfQo+PiA+Pj4+PiArCj4+ID4+Pj4+ICtlcnI6Cj4+ID4+Pj4+ICsgICAgaWYg KGdhdGV3YXlfZmlsZSkKPj4gPj4+Pj4gKyAgICAgICAgZmNsb3NlKGdhdGV3YXlfZmlsZSk7Cj4+ ID4+Pj4+ICsKPj4gPj4+Pj4gKyAgICByZXR1cm4gcmV0Owo+PiA+Pj4+PiArfQo+PiA+Pj4+PiAr Cj4+ID4+Pj4+ICtzdGF0aWMgaW50IHRyYW5zbGF0ZV9pcGZzX3RvX2h0dHAoVVJMQ29udGV4dCAq aCwgY29uc3QgY2hhciAqdXJpLAo+PiA+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBmbGFncywgQVZEaWN0aW9uYXJ5Cj4+ICoqb3B0aW9ucykKPj4gPj4+Pj4gK3sK Pj4gPj4+Pj4gKyAgICBjb25zdCBjaGFyICppcGZzX2NpZDsKPj4gPj4+Pj4gKyAgICBjaGFyICpm dWxsdXJpID0gTlVMTDsKPj4gPj4+Pj4gKyAgICBpbnQgcmV0Owo+PiA+Pj4+PiArICAgIElQRlNH YXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAg IC8vIFRlc3QgZm9yIGlwZnM6Ly8sIGlwZnM6LCBpcG5zOi8vIGFuZCBpcG5zOi4gVGhpcyBwcmVm aXggaXMKPj4gPj4+PiBzdHJpcHBlZCBmcm9tCj4+ID4+Pj4+ICsgICAgLy8gdGhlIHN0cmluZyBs ZWF2aW5nIGp1c3QgdGhlIENJRCBpbiBpcGZzX2NpZC4KPj4gPj4+Pj4gKyAgICBpbnQgaXNfaXBm cyA9IGF2X3N0cmlzdGFydCh1cmksICJpcGZzOi8vIiwgJmlwZnNfY2lkKTsKPj4gPj4+Pj4gKyAg ICBpbnQgaXNfaXBucyA9IGF2X3N0cmlzdGFydCh1cmksICJpcG5zOi8vIiwgJmlwZnNfY2lkKTsK Pj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAgIC8vIFdlIG11c3QgaGF2ZSBlaXRoZXIgaXBucyBvciBp cGZzLgo+PiA+Pj4+PiArICAgIGlmICghaXNfaXBmcyAmJiAhaXNfaXBucykgewo+PiA+Pj4+PiAr ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ID4+Pj4+ICsgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfV0FSTklORywgIlVuc3VwcG9ydGVkIHVybCAlc1xuIiwgdXJpKTsKPj4gPj4+Pj4g KyAgICAgICAgZ290byBlcnI7Cj4+ID4+Pj4+ICsgICAgfQo+PiA+Pj4+PiArCj4+ID4+Pj4+ICsg ICAgLy8gSWYgdGhlIENJRCBoYXMgYSBsZW5ndGggZ3JlYXRlciB0aGVuIDAgdGhlbiB3ZSBhc3N1 bWUgd2UKPj4gaGF2ZSBhCj4+ID4+Pj4gcHJvcGVyIHdvcmtpbmcgb25lLgo+PiA+Pj4+PiArICAg IC8vIEl0IGNvdWxkIHN0aWxsIGJlIHdyb25nIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIGdhdGV3YXkg c2hvdWxkCj4+ID4+IHNhdmUKPj4gPj4+PiB1cyBhbmQKPj4gPj4+Pj4gKyAgICAvLyBydXR1cm4g YSA0MDMgZXJyb3IuIFRoZSBodHRwIHByb3RvY29sIGhhbmRsZXMgdGhpcy4KPj4gPj4+Pj4gKyAg ICBpZiAoc3RybGVuKGlwZnNfY2lkKSA8IDEpIHsKPj4gPj4+Pj4gKyAgICAgICAgYXZfbG9nKGgs IEFWX0xPR19XQVJOSU5HLCAiQSBDSUQgbXVzdCBiZSBwcm92aWRlZC5cbiIpOwo+PiA+Pj4+PiAr ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4+ID4+Pj4+ICsgICAgICAgIGdvdG8gZXJy Owo+PiA+Pj4+PiArICAgIH0KPj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAgIC8vIFBvcHVsYXRlIGMt PmdhdGV3YXlfYnVmZmVyIHdpdGggd2hhdGV2ZXIgaXMgaW4gYy0+Z2F0ZXdheQo+PiA+Pj4+PiAr ICAgIGlmIChjLT5nYXRld2F5ICE9IE5VTEwpIHsKPj4gPj4+Pj4gKyAgICAgICAgaWYgKHNucHJp bnRmKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpLAo+PiA+PiAi JXMiLAo+PiA+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgYy0+Z2F0ZXdheSkgPj0gc2l6ZW9m KGMtPmdhdGV3YXlfYnVmZmVyKSkgewo+PiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19XQVJOSU5HLCAiVGhlIC1nYXRld2F5IHBhcmFtZXRlciBpcwo+PiB0b28KPj4gPj4+PiBs b25nLiBXZSBhbGxvdyBhIG1heCBvZiAlenUgY2hhcmFjdGVyc1xuIiwKPj4gc2l6ZW9mKGMtPmdh dGV3YXlfYnVmZmVyKSk7Cj4+ID4+Pj4KPj4gPj4+PiBXZSB0eXBpY2FsbHkgdXNlIFNJWkVfU1BF Q0lGSUVSIGluc3RlYWQgb2YgeiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCj4+ID4+Pj4gYW5jaWVu dCB2ZXJzaW9ucyBvZiBNU1ZDLgo+PiA+Pj4+IChJIGRvbid0IGtub3cgd2hldGhlciB0aGVyZSBp cyBhbnkgc3VwcG9ydGVkIHZlcnNpb24gb2YgTVNWQyB0aGF0Cj4+ID4+Pj4gZG9lc24ndCBzdXBw b3J0IHo7IEkgZG9uJ3QgdXNlIE1TVkMgbXlzZWxmLikKPj4gPj4+Pgo+PiA+Pj4KPj4gPj4+IEhl cmUgdG9vIEkgd2FzIGV4cGxpY2l0bHkgc3VnZ2VzdGVkIHRvIHVzZSAlenUgKHdoZW4gSSB3YXMg dXNpbmcgLSBJCj4+ID4+IHRoaW5rCj4+ID4+PiAtICVsdSBiZWZvcmUpLgo+PiA+Pj4gU28gSSBh c3N1bWUgdGhhdCB0aGUgYW5jaWVudCBNU1ZDIHZlcnNpb24geW91J3JlIHJlZmVycmluZyB0byBp cwo+PiBwcm9iYWJseQo+PiA+Pj4gbm90IHN1cHBvcnRlZCBhbnltb3JlIGZyb20gYW4gZmZtcGVn IGNvbXBpbGVyIHJlcXVpcmVtZW50IHBvaW50IG9mCj4+IHZpZXc/Cj4+ID4+Pgo+PiA+Pj4gU2hv dWxkIGkgbm93IGNoYW5nZSBhbGwgIiV6dSIgdG8gIiUiU0laRV9TUEVDSUZJRVIgKHRoaXMgZG9l cyBub3QKPj4gbWFrZSBpdAo+PiA+Pj4gbmVhdGVyIG5vciBzaG9ydGVyIHdpdGggdGhlIDgwIGNo YXIgbGluZSBsaW1pdCkuCj4+ID4+PiBJcyB0aGlzIGNoYW5nZSByZXF1aXJlZD8KPj4gPj4KPj4g Pj4gQXMgc2FpZDogSXQgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbmNpZW50IHZlcnNpb25z IG9mIE1TVkMuIEJ1dCBJCj4+ID4+IGRvbid0IGtub3cgd2hldGhlciBhbnkgb2YgdGhlIGFjdHVh bGx5IHN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBNU1ZDIHN0aWxsCj4+ID4+IG5lZWQgaXQuCj4+ID4+ Cj4+ID4+Pgo+PiA+Pj4gSWYgaXQgaXMsIHdoYXQgX2V4YWN0bHlfIGRvIGkgbmVlZCB0byBjaGFu Z2UgaXQgaW4/IEkgc2VlIGEKPj4gPj4+IGNvdXBsZSBkaWZmZXJlbnQgU0laRV9TUEVDSUZJRVIg cHJlZml4ZXMuIEkgaGF2ZSBubyBjbHVlIHdoYXQgdG8gdXNlCj4+ID4+IGhlcmUuCj4+ID4+Cj4+ ID4+IFRoZXJlIGlzIG9ubHkgb25lIFNJWkVfU1BFQ0lGSUVSLCBuYW1lbHkgU0laRV9TUEVDSUZJ RVI7IHRoZQo+PiA+PiBQVFJESUZGX1NQRUNJRklFUiAob3Igd2hhdGV2ZXIgeW91IHNlZSkgaXMg b2J2aW91c2x5IG5vdCB0aGUgdGhpbmcgdG8KPj4gPj4gdXNlIGZvciBzaXplX3QuCj4+ID4+Cj4+ ID4+IEkgc2VlIHNvbWU6Cj4+ID4gJSJTSVpFX1NQRUNJRklFUiIKPj4gPgo+PiA+IEJ1dCBhbHNv IGxpa2UgdGhpczoKPj4gPiAlOCJTSVpFX1NQRUNJRklFUgo+PiA+ICU1IlNJWkVfU1BFQ0lGSUVS Cj4+ID4KPj4gPiBJJ20gYXNzdW1pbmcgdGhleSBhcmUgZm9yIGNsaXBwaW5nPwo+Pgo+PiBwcmlu dGYgc3BlY2lmaWVycyBjb25zaXN0IG9mIGZsYWdzLCBtaW5pbXVtIGZpZWxkIHdpZHRoLCBwcmVj aXNpb24KPj4gKGluZGljYXRlZCBieSAnLicpLCBsZW5ndGggbW9kaWZpZXIgYW5kIGNvbnZlcnNp b24gc3BlY2lmaWVyIChpbiB0aGF0Cj4+IG9yZGVyKS4gTGlrZSB0aGUgbWFjcm9zIGluIGludHR5 cGVzLmggU0laRV9TUEVDSUZJRVIgZXhwYW5kcyB0byBhCj4+IGNoYXJhY3RlciBzdHJpbmcgbGl0 ZXJhbCB0aGF0IGluY2x1ZGVzIGEgbGVuZ3RoIG1vZGlmaWVyIGFuZCBhCj4+IGNvbnZlcnNpb24g c3BlY2lmaWVyLCBzbyB0aGF0IG9uZSBjYW4gdXNlIHRoaXMgdG9nZXRoZXIgd2l0aCB0aGUgZm9y bWVyCj4+IHRocmVlIHBvc3NpYmlsaXRpZXMuCj4+IE9mIGNvdXJzZSwgaXQgd291bGQgbWFrZSBu byBzZW5zZSB0byB1c2UgYW55IG9mIHRoZXNlIHRocmVlIGhlcmUsIHNvIGl0Cj4+IHdvdWxkIGp1 c3QgYmUgJSJTSVpFX1NQRUNJRklFUiIuCj4+Cj4+ID4KPj4gPiBJIHJlYWxseSBkb24ndCBsaWtl IGhhdmluZyB0byBjaGFuZ2UgaXQgdG8gdGhpcyBhcyBpdDoKPj4gPiAtIFVnbGlmaWVzIHRoZSBj b2RlIChhbmQgaSBkb3VidCBpZiBpdCdzIGV2ZW4gbmVlZGVkKQo+Pgo+PiBJIGFncmVlIHRvIGJv dGggcG9pbnRzLiBXaGljaCBpcyB3aHkgSSBhbSBub3QgZm9yY2luZyB5b3UgdG8gZG8gdGhpcy4g SXQKPj4gc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGF0IGxlYXN0IG9uZSBjb21tb25seSBj b21waWxlZCBpbnN0YW5jZQo+PiB3aGVyZSBpdCBpcyBub3QgdXNlZCBhdCBhbGwgKGxpYmF2Zm9y bWF0L2FyZ29fY3ZnLmMpLgo+Pgo+Cj4gU28gaSBsZWF2ZSBpdCBhcyAiJXp1Ii4gQ2hlY2suCj4g SSBkaWQgYWxzbyBncmVwIG9uIHRoZSBlbnRpcmUgZmZtcGVnIHNvdXJjZSBmb3IgdGhpcy4gQm90 aCBzZWVtcyB0byBiZQo+IHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgdGhvdWdoIGdyYW50ZWQsIFNJ WkVfU1BFQ0lGSUVSIGlzIHVzZWQgbW9yZS4KPgo+Pgo+PiA+IC0gRGlyZWN0bHkgY29udHJhZGlj dHMgZWFybGllciBmZWVkYmFjawo+Pgo+PiBJIGRvbid0IGFncmVlIHdpdGggdGhhdCBnaXZlbiB0 aGF0IFNJWkVfU1BFQ0lGSUVSIGlzIGJhc2ljYWxseSBqdXN0IGEKPj4gd3JhcHBlciBhcm91bmQg enUuCj4+Cj4KPiBNeSBtaXN0YWtlLCBpdCBkb2Vzbid0IGNvbnRyYWRpY3QgaXQuIFNvcnJ5IGZv ciB0aGF0Lgo+Cj4+Cj4+ID4gLSBBbmQgZHVlIHRvIHRoZSBhYm92ZSBnaXZlcyBtZSBhIGZlZWxp bmcgb2Ygd2FzdGluZyB0aW1lCj4+ID4gLSBGaW5lIHRvIGNoYW5nZSBpdCBidXQgSSBob3BlIHRo ZXJlIGlzbid0IGFub3RoZXIgcGVyc29uIHBvcHBpbmcgdXAKPj4gd2l0aCBhCj4+ID4gcXVlc3Rp b24gdG8gY2hhbmdlIGl0IHlldCBhZ2Fpbi4uLi4KPj4gPgo+PiA+Cj4+ID4+Pgo+PiA+Pj4KPj4g Pj4+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gPj4+Pj4gKyAgICAg ICAgICAgIGdvdG8gZXJyOwo+PiA+Pj4+PiArICAgICAgICB9Cj4+ID4+Pj4+ICsgICAgfSBlbHNl IHsKPj4gPj4+Pj4gKyAgICAgICAgLy8gUG9wdWxhdGUgdGhlIElQRlMgZ2F0ZXdheSBpZiB3ZSBo YXZlIGFueS4KPj4gPj4+Pj4gKyAgICAgICAgLy8gSWYgbm90LCBpbmZvcm0gdGhlIHVzZXIgaG93 IHRvIHByb3Blcmx5IHNldCBvbmUuCj4+ID4+Pj4+ICsgICAgICAgIHJldCA9IHBvcHVsYXRlX2lw ZnNfZ2F0ZXdheShoKTsKPj4gPj4+Pj4gKwo+PiA+Pj4+PiArICAgICAgICBpZiAocmV0IDwgMSkg ewo+PiA+Pj4+PiArICAgICAgICAgICAgLy8gV2UgZmFsbGJhY2sgb24gZHdlYi5saW5rIChtYW5h Z2VkIGJ5IFByb3RvY29sIExhYnMpLgo+PiA+Pj4+PiArICAgICAgICAgICAgc25wcmludGYoYy0+ Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1ZmZlciksCj4+ICIKPj4gPj4+PiBo dHRwczovL2R3ZWIubGluayIpOwo+PiA+Pj4+PiArCj4+ID4+Pj4+ICsgICAgICAgICAgICBhdl9s b2coaCwgQVZfTE9HX1dBUk5JTkcsICJJUEZTIGRvZXMgbm90IGFwcGVhciB0byBiZQo+PiA+Pj4+ IHJ1bm5pbmcuIFlvdeKAmXJlIG5vdyB1c2luZyB0aGUgcHVibGljIGdhdGV3YXkgYXQgZHdlYi5s aW5rLlxuIik7Cj4+ID4+Pj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICJJ bnN0YWxsaW5nIElQRlMgbG9jYWxseSBpcwo+PiA+Pj4+IHJlY29tbWVuZGVkIHRvIGltcHJvdmUg cGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LCBhbmQgbm90IHNoYXJlIGFsbAo+PiA+PiB5b3Vy Cj4+ID4+Pj4gYWN0aXZpdHkgd2l0aCBhIHNpbmdsZSBJUEZTIGdhdGV3YXkuXG4iKTsKPj4gPj4+ Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIlRoZXJlIGFyZSBtdWx0aXBs ZSBvcHRpb25zIHRvCj4+ID4+Pj4gZGVmaW5lIHRoaXMgZ2F0ZXdheS5cbiIpOwo+PiA+Pj4+PiAr ICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiMS4gQ2FsbCBmZm1wZWcgd2l0aCBh IGdhdGV3YXkKPj4gPj4+PiBwYXJhbSwgd2l0aG91dCBhIHRyYWlsaW5nIHNsYXNoOiAtZ2F0ZXdh eSA8dXJsPi5cbiIpOwo+PiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZP LCAiMi4gRGVmaW5lIGFuICRJUEZTX0dBVEVXQVkKPj4gPj4+PiBlbnZpcm9ubWVudCB2YXJpYWJs ZSB3aXRoIHRoZSBmdWxsIEhUVFAgVVJMIHRvIHRoZSBnYXRld2F5IHdpdGhvdXQKPj4gPj4gdHJh aWxpbmcKPj4gPj4+PiBmb3J3YXJkIHNsYXNoLlxuIik7Cj4+ID4+Pj4+ICsgICAgICAgICAgICBh dl9sb2coaCwgQVZfTE9HX0lORk8sICIzLiBEZWZpbmUgYW4gJElQRlNfUEFUSAo+PiA+PiBlbnZp cm9ubWVudAo+PiA+Pj4+IHZhcmlhYmxlIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBkYXRhIHBh dGggLSB0aGlzIGlzIHR5cGljYWxseQo+PiA+PiB+Ly5pcGZzXG4iKTsKPj4gPj4+Pgo+PiA+Pj4+ IEFsbCB0aG9zZSBBVl9MT0dfSU5GTyBjYW4gYmUgY29tYmluZWQgd2hpY2ggaGFzIHRoZSBhZHZh bnRhZ2UgdGhhdAo+PiB0aGUKPj4gPj4+PiBsb2dzIGNhbid0IGJlIHRlYXJlZCBhcGFydCAod2hp Y2ggdGhleSBjYW4gbm93IGlmIHNvbWV0aGluZyBlbHNlCj4+IGxvZ3MgYXQKPj4gPj4+PiB0aGUg c2FtZSB0aW1lKTsgZnVydGhlcm1vcmUsIHRoaXMgd291bGQgYWxzbyBkZWNyZWFzZSBjb2Rlc2l6 ZS4KPj4gPj4+Pgo+PiA+Pj4KPj4gPj4+IERvIHlvdSBoYXZlIGFuIGV4YW1wbGUgb2Ygd2hlcmUg dGhhdCdzIGhhcHBlbmluZz8KPj4gPj4+Cj4+ID4+Cj4+ID4+IEl0IGNhbiBoYXBwZW4gYW55IHRp bWUgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyB1c2luZyBhdl9sb2cgYXQgdGhlCj4+ID4+IHNh bWUgdGltZS4gR2l2ZW4gdGhhdCB5b3VyIHN0YXRlbWVudHMgYXJlIHN1cHBvc2VkIHRvIGJlIGZ1 bGwgbGluZXMsIGl0Cj4+ID4+IGlzIG5vdCB0aGF0IGJhZCBpZiBpdCBoYXBwZW5zIGhlcmUsIGJ1 dCBpdCBpcyBuZXZlcnRoZWxlc3Mgc3Vib3B0aW1hbC4KPj4gPj4KPj4gPgo+PiA+IEkgbWVhbnQg YSBtdWx0aS1saW5lIGF2X2xvZyBleGFtcGxlIDspIEJ1dCB5ZWFoLCBJIGdldCBob3cgdGhyZWFk aW5nCj4+IGNvdWxkCj4+ID4gc2NyZXcgdGhpcyB1cC4KPj4gPgo+Pgo+PiBJIG1lYW50IHNvbWV0 aGluZyBsaWtlOgo+PiBhdl9sb2coaCwgQVZfTE9HX0lORk8sICJJbnN0YWxsaW5nIElQRlMgbG9j YWxseSBpcyByZWNvbW1lbmRlZCB0bwo+PiBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJp bGl0eSwgYW5kIG5vdCBzaGFyZSBhbGwgeW91ciBhY3Rpdml0eQo+PiB3aXRoIGEgc2luZ2xlIElQ RlMgZ2F0ZXdheS5cbiIKPj4gICAgICAgICJUaGVyZSBhcmUgbXVsdGlwbGUgb3B0aW9ucyB0byBk ZWZpbmUgdGhpcyBnYXRld2F5LlxuIgo+PiAgICAgICAgIjEuIENhbGwgZmZtcGVnIHdpdGggYSBn YXRld2F5IHBhcmFtLCB3aXRob3V0IGEgdHJhaWxpbmcgc2xhc2g6Cj4+IC1nYXRld2F5IDx1cmw+ LlxuIgo+PiAgICAgICAgIjIuIERlZmluZSBhbiAkSVBGU19HQVRFV0FZIGVudmlyb25tZW50IHZh cmlhYmxlIHdpdGggdGhlIGZ1bGwKPj4gSFRUUCBVUkwgdG8gdGhlIGdhdGV3YXkgd2l0aG91dCB0 cmFpbGluZyBmb3J3YXJkIHNsYXNoLlxuIgo+PiAgICAgICAgIjMuIERlZmluZSBhbiAkSVBGU19Q QVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBwb2ludCBpdCB0byB0aGUKPj4gSVBGUyBkYXRh IHBhdGggLSB0aGlzIGlzIHR5cGljYWxseSB+Ly5pcGZzXG4iKTsKPj4KPj4gKFRoZXNlIGxpbmVz IGFyZSBhY3R1YWxseSB3YXkgdG9vIGxvbmcuKQo+Pgo+Cj4gRml4ZWQgYXMgbXVsdGlsaW5lLgo+ IEkgZG8gbGlrZSB0byBrZWVwIHRoZSBjb250ZW50IG9mIHRoZSBsaW5lcyB0aG91Z2guCj4gSSBh bHNvIGNoZWNrZWQgdGhpcyB3aXRoIElQRlMgZm9sa3MgdG8gYmUgYXMgY29ycmVjdCBhbmQgY2xl YXIgYXMgd2UgY291bGQKPiBtYWtlIGl0Lgo+Cj4+Cj4+IC0gQW5kcmVhcwo+Pgo+ClRvIGFtZW5k IGFuZCBwcm9iYWJseSBzcGVlZCB0aGluZ3MgdXAuClRoZSBkaWZmIHdpdGggeW91ciBmZWVkYmFj ayBhcHBsaWVkIG5vdyBsb29rcyBsaWtlIHRoaXM6Cmh0dHBzOi8vcC5zYzIubmwvSGZqSnQKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=