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 B590D49195 for ; Mon, 5 Feb 2024 00:10:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 55C2268CF61; Mon, 5 Feb 2024 02:10:01 +0200 (EET) Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E080168CA64 for ; Mon, 5 Feb 2024 02:09:53 +0200 (EET) Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-295f339df52so743281a91.1 for ; Sun, 04 Feb 2024 16:09:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707091792; x=1707696592; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=vEkwBJ18P59fNL6SkTIAJOXYAJntrGI+ROO3zeu5ewg=; b=kKM+lR8sl2hiMbWghvd3I2h5n2ld8tECoqXdHuNEpmEGbuqY71CgoEXE95maWWng5u Hn122SxwXmusrHxiHXY982a3ftLS8fcvTBiZ5m/TJMqwJ3oSSBcAP/UScndFnr/vha0/ pOLcy6+BkHFRnE1NKEJiSrZ7m8YcwyX520KXBkEe8GWNBTxUDFRSY+C4MP80UgFlGls9 mg5L+9QZx2oPGBNPwdOcFFe4jdet3VF88ElutwyE+Ol6dVv9LINNud2g3mIY3wI3WkNv Zsr9Js3aRGOxZI/mZlL4rFMAgFRH9kgsw/yYhhUF57cRTejvxuv6xiPSljUXPTDubE4/ KP5A== X-Gm-Message-State: AOJu0Yyg1KSKBxv/iXYV8tTgm2jhOsht6PrVhJXaRU+zrQ5Yi70nuyhy XqHLY9b9JFGhe+eANxROtL65VeUcCycJFpyp6XXhKQd1It3pIY3ey4Svfboa3KOWj0gExBiMMO+ +HRN/ImrD9Oao3VG+FXOL7VaLP2kEgq+A6TBdcFD/hQSM6aTv X-Google-Smtp-Source: AGHT+IGqFslfZrEoIBspN3n+0r6CZkcdwsH//LeTTnnuqYBIda0FNcxZOTA3HKNn02vch9sX1F41jr7TkFqrNhznekU= X-Received: by 2002:a05:6a20:e109:b0:19e:3094:fd27 with SMTP id kr9-20020a056a20e10900b0019e3094fd27mr14145808pzb.6.1707091791635; Sun, 04 Feb 2024 16:09:51 -0800 (PST) MIME-Version: 1.0 References: <20240128225921.317558-1-marth64@proxyid.net> <20240205000242.959501-1-marth64@proxyid.net> In-Reply-To: <20240205000242.959501-1-marth64@proxyid.net> From: Marth64 Date: Sun, 4 Feb 2024 18:09:40 -0600 Message-ID: To: Marth64 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v6] libavformat/dvdvideo: add DVD-Video demuxer powered by libdvdnav and libdvdread 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-devel@ffmpeg.org 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: R2FoLCBqdXN0IHJlYWxpemVkIGEgbWlub3IgaXNzdWUgaW4gdGhlIGRvY3VtZW50YXRpb24gb25s eS4gVGhlIC1jbHV0X3JnYgpvcHRpb24gZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgdGhlIGFj Y29tcGFueWluZyBzdWJ0aXRsZSBwYXRjaHNldCwgYW5kCmNhbiBiZSBpZ25vcmVkLgpJJ2xsIHJl bW92ZSBpdCwgYnV0IHdpbGwgYnVmZmVyIHRoZSB1cGRhdGUgaW4gY2FzZSB0aGVyZSBpcyBtb3Jl IGZlZWRiYWNrLgoKVGhhbmtzIQoKT24gU3VuLCBGZWIgNCwgMjAyNCBhdCA2OjA24oCvUE0gTWFy dGg2NCA8bWFydGg2NEBwcm94eWlkLm5ldD4gd3JvdGU6Cgo+IC0gRnVydGhlciBpbXByb3ZlIGRv Y3VtZW50YXRpb24sIGxvZ2dpbmcsIGFuZCBpbmRlbnRhdGlvbgo+IC0gSW1wcm92ZSBzdHJlYW0g c3RhcnRpbmcgbG9naWMgdG8gYmUgZmFyIG1vcmUgcm9idXN0IGFuZCBub3QgYnJlYWsgR09Qcwo+ IC0gUmVzb2x2ZSBhbmQgcmVtb3ZlIHRpbWluZyB3b3JrYXJvdW5kIGZvciBjaGFwdGVyIG1hcmtl cnMgd2hlbiBzdGFydGluZwo+IGFmdGVyIGNoLiAxCj4gLSBGaXggc2tldGNoeSBlcnJvciBoYW5k bGluZyBsb2dpYyBmb3IgY2VydGFpbiBlZGdlIGNhc2Ugd2hlbiBOQVYgcGFjayBpcwo+IG1pc3Np bmcKPgo+IE92ZXJhbGwgaXQncyBpbiBwcmV0dHkgZ29vZCB3b3JraW5nIHNoYXBlLgo+Cj4gU3Vi dGl0bGUgcGFsZXR0ZSBzdXBwb3J0IHJlbWFpbnMgaW4gYSBzZXBhcmF0ZSBwYXRjaCBzZXQuCj4K PiBTaWduZWQtb2ZmLWJ5OiBNYXJ0aDY0IDxtYXJ0aDY0QHByb3h5aWQubmV0Pgo+IC0tLQo+ICBD aGFuZ2Vsb2cgICAgICAgICAgICAgICAgIHwgICAgMiArCj4gIGNvbmZpZ3VyZSAgICAgICAgICAg ICAgICAgfCAgICA4ICsKPiAgZG9jL2RlbXV4ZXJzLnRleGkgICAgICAgICB8ICAxMzUgKysrKwo+ ICBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgIHwgICAgMSArCj4gIGxpYmF2Zm9ybWF0L2FsbGZv cm1hdHMuYyAgfCAgICAxICsKPiAgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYyB8IDE0MDkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDE1 NTYgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZHZkdmlk ZW9kZWMuYwo+Cj4gZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4IGM1 ZmIyMWQxOTguLjg4NjUzYmM2ZDMgMTAwNjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIvQ2hh bmdlbG9nCj4gQEAgLTI0LDYgKzI0LDggQEAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gZmZtcGVnIENM SSBvcHRpb25zIG1heSBub3cgYmUgdXNlZCBhcyAtL29wdCA8cGF0aD4sIHdoaWNoIGlzIGVxdWl2 YWxlbnQKPiAgICB0byAtb3B0IDxjb250ZW50cyBvZiBmaWxlIDxwYXRoPj4KPiAgLSBzaG93aW5m byBiaXRzdHJlYW0gZmlsdGVyCj4gKy0gRFZELVZpZGVvIGRlbXV4ZXIsIHBvd2VyZWQgYnkgbGli ZHZkbmF2IGFuZCBsaWJkdmRyZWFkCj4gKwo+Cj4gIHZlcnNpb24gNi4xOgo+ICAtIGxpYmFyaWJj YXB0aW9uIGRlY29kZXIKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5k ZXggNjhmNjc1YTRiYy4uNzBjMzNlYzk2ZCAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysg Yi9jb25maWd1cmUKPiBAQCAtMjI3LDYgKzIyNyw4IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9y dDoKPiAgICAtLWVuYWJsZS1saWJkYXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZGVjb2Rpbmcgdmlh IGxpYmRhdnMyIFtub10KPiAgICAtLWVuYWJsZS1saWJkYzEzOTQgICAgICAgZW5hYmxlIElJREMt MTM5NCBncmFiYmluZyB1c2luZyBsaWJkYzEzOTQKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIGxpYnJhdzEzOTQgW25vXQo+ICsgIC0tZW5hYmxlLWxpYmR2ZG5hdiAgICAgICBlbmFi bGUgbGliZHZkbmF2LCBuZWVkZWQgZm9yIERWRCBkZW11eGluZyBbbm9dCj4gKyAgLS1lbmFibGUt bGliZHZkcmVhZCAgICAgIGVuYWJsZSBsaWJkdmRyZWFkLCBuZWVkZWQgZm9yIERWRCBkZW11eGlu ZyBbbm9dCj4gICAgLS1lbmFibGUtbGliZmRrLWFhYyAgICAgIGVuYWJsZSBBQUMgZGUvZW5jb2Rp bmcgdmlhIGxpYmZkay1hYWMgW25vXQo+ICAgIC0tZW5hYmxlLWxpYmZsaXRlICAgICAgICBlbmFi bGUgZmxpdGUgKHZvaWNlIHN5bnRoZXNpcykgc3VwcG9ydCB2aWEKPiBsaWJmbGl0ZSBbbm9dCj4g ICAgLS1lbmFibGUtbGliZm9udGNvbmZpZyAgIGVuYWJsZSBsaWJmb250Y29uZmlnLCB1c2VmdWwg Zm9yIGRyYXd0ZXh0Cj4gZmlsdGVyIFtub10KPiBAQCAtMTgwNiw2ICsxODA4LDggQEAgRVhURVJO QUxfTElCUkFSWV9HUExfTElTVD0iCj4gICAgICBmcmVpMHIKPiAgICAgIGxpYmNkaW8KPiAgICAg IGxpYmRhdnMyCj4gKyAgICBsaWJkdmRuYXYKPiArICAgIGxpYmR2ZHJlYWQKPiAgICAgIGxpYnJ1 YmJlcmJhbmQKPiAgICAgIGxpYnZpZHN0YWIKPiAgICAgIGxpYngyNjQKPiBAQCAtMzUyMCw2ICsz NTI0LDggQEAgZHRzX2RlbXV4ZXJfc2VsZWN0PSJkY2FfcGFyc2VyIgo+ICBkdHNoZF9kZW11eGVy X3NlbGVjdD0iZGNhX3BhcnNlciIKPiAgZHZfZGVtdXhlcl9zZWxlY3Q9ImR2cHJvZmlsZSIKPiAg ZHZfbXV4ZXJfc2VsZWN0PSJkdnByb2ZpbGUiCj4gK2R2ZHZpZGVvX2RlbXV4ZXJfc2VsZWN0PSJt cGVncHNfZGVtdXhlciIKPiArZHZkdmlkZW9fZGVtdXhlcl9kZXBzPSJsaWJkdmRuYXYgbGliZHZk cmVhZCIKPiAgZHhhX2RlbXV4ZXJfc2VsZWN0PSJyaWZmZGVjIgo+ICBlYWMzX2RlbXV4ZXJfc2Vs ZWN0PSJhYzNfcGFyc2VyIgo+ICBldmNfZGVtdXhlcl9zZWxlY3Q9ImV2Y19mcmFtZV9tZXJnZV9i c2YgZXZjX3BhcnNlciIKPiBAQCAtNjc2MSw2ICs2NzY3LDggQEAgZW5hYmxlZCBsaWJkYXYxZCAg ICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcKPiBsaWJkYXYxZCAiZGF2MWQgPj0gMC41LjAi ICJkYXYxZAo+ICBlbmFibGVkIGxpYmRhdnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZp ZyBsaWJkYXZzMiAiZGF2czIgPj0gMS42LjAiCj4gZGF2czIuaCBkYXZzMl9kZWNvZGVyX29wZW4K PiAgZW5hYmxlZCBsaWJkYzEzOTQgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGMx Mzk0IGxpYmRjMTM5NC0yCj4gZGMxMzk0L2RjMTM5NC5oIGRjMTM5NF9uZXcKPiAgZW5hYmxlZCBs aWJkcm0gICAgICAgICAgICAmJiBjaGVja19wa2dfY29uZmlnIGxpYmRybSBsaWJkcm0geGY4NmRy bS5oCj4gZHJtR2V0VmVyc2lvbgo+ICtlbmFibGVkIGxpYmR2ZG5hdiAgICAgICAgICYmIHJlcXVp cmVfcGtnX2NvbmZpZyBsaWJkdmRuYXYgImR2ZG5hdiA+PQo+IDYuMS4xIiBkdmRuYXYvZHZkbmF2 LmggZHZkbmF2X29wZW4yCj4gK2VuYWJsZWQgbGliZHZkcmVhZCAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYmR2ZHJlYWQgImR2ZHJlYWQgPj0KPiA2LjEuMiIgZHZkcmVhZC9kdmRfcmVh ZGVyLmggRFZET3BlbjIgLWxkdmRyZWFkCj4gIGVuYWJsZWQgbGliZmRrX2FhYyAgICAgICAgJiYg eyBjaGVja19wa2dfY29uZmlnIGxpYmZka19hYWMgZmRrLWFhYwo+ICJmZGstYWFjL2FhY2VuY19s aWIuaCIgYWFjRW5jT3BlbiB8fAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBy ZXF1aXJlIGxpYmZka19hYWMgZmRrLWFhYy9hYWNlbmNfbGliLmgKPiBhYWNFbmNPcGVuIC1sZmRr LWFhYyAmJgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuICJ1c2luZyBs aWJmZGsgd2l0aG91dCBwa2ctY29uZmlnIjsKPiB9IH0KPiBkaWZmIC0tZ2l0IGEvZG9jL2RlbXV4 ZXJzLnRleGkgYi9kb2MvZGVtdXhlcnMudGV4aQo+IGluZGV4IGU0YzViNTYwYTYuLmQ4YmM4MDZh ZDUgMTAwNjQ0Cj4gLS0tIGEvZG9jL2RlbXV4ZXJzLnRleGkKPiArKysgYi9kb2MvZGVtdXhlcnMu dGV4aQo+IEBAIC0yODUsNiArMjg1LDE0MSBAQCBUaGlzIGRlbXV4ZXIgYWNjZXB0cyB0aGUgZm9s bG93aW5nIG9wdGlvbjoKPgo+ICBAZW5kIHRhYmxlCj4KPiArQHNlY3Rpb24gZHZkdmlkZW8KPiAr Cj4gK0RWRC1WaWRlbyBkZW11eGVyLCBwb3dlcmVkIGJ5IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVh ZC4KPiArCj4gK0NhbiBkaXJlY3RseSBpbmdlc3QgRFZEIHRpdGxlcywgc3BlY2lmaWNhbGx5IHNl cXVlbnRpYWwgUEdDcywKPiAraW50byBhIGNvbnZlcnNpb24gcGlwZWxpbmUuIE1lbnVzIGFuZCBz ZWVraW5nIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMKPiB0aW1lLgo+ICsKPiArQmxvY2sgZGV2 aWNlcyAoRFZEIGRyaXZlcyksIElTTyBmaWxlcywgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIGFy ZQo+IGFjY2VwdGVkLgo+ICtBY3RpdmF0ZSB3aXRoIEBjb2Rley1mIGR2ZHZpZGVvfSBpbiBmcm9u dCBvZiBvbmUgb2YgdGhlc2UgaW5wdXRzLgo+ICsKPiArVW5kZXJseWluZyBwbGF5YmFjayBpcyBm dWxseSBoYW5kbGVkIGJ5IGxpYmR2ZG5hdiwgYW5kIHN0cnVjdHVyZSBwYXJzaW5nCj4gYnkgbGli ZHZkcmVhZC4KPiArZmZtcGVnIG11c3QgYmUgYnVpbHQgd2l0aCBHUEwgbGlicmFyeSBzdXBwb3J0 IGF2YWlsYWJsZSBhcyB3ZWxsIGFzIHRoZQo+IHN3aXRjaGVzCj4gK0Bjb2Rley0tZW5hYmxlLWxp YmR2ZG5hdn0gYW5kIEBjb2Rley0tZW5hYmxlLWxpYmR2ZHJlYWR9Lgo+ICsKPiArWW91IHdpbGwg bmVlZCB0byBwcm92aWRlIGVpdGhlciB0aGUgZGVzaXJlZCAidGl0bGUgbnVtYmVyIiBvciBleGFj dAo+IFBHQy9QRyBjb29yZGluYXRlcy4KPiArTWFueSBvcGVuLXNvdXJjZSBEVkQgcGxheWVycyBh bmQgdG9vbHMgY2FuIGFpZCBpbiBwcm92aWRpbmcgdGhpcwo+IGluZm9ybWF0aW9uLgo+ICtJZiBu b3Qgc3BlY2lmaWVkLCB0aGUgZGVtdXhlciB3aWxsIGRlZmF1bHQgdG8gdGl0bGUgMSB3aGljaCB3 b3JrcyBmb3IKPiBtYW55IGRpc2NzLgo+ICtIb3dldmVyLCBkdWUgdG8gdGhlIGZsZXhpYmlsaXR5 IG9mIERWRC1WaWRlbywgaXQgaXMgcmVjb21tZW5kZWQgdG8gY2hlY2sKPiBtYW51YWxseS4KPiAr VGhlcmUgYXJlIG1hbnkgZGlzY3MgdGhhdCBhcmUgYXV0aG9yZWQgc3RyYW5nZWx5IG9yIHdpdGgg aW52YWxpZCBoZWFkZXJzLgo+ICsKPiArSWYgdGhlIGlucHV0IGlzIGEgcmVhbCBEVkQgZHJpdmUs IHBsZWFzZSBub3RlIHRoYXQgdGhlcmUgYXJlIHNvbWUgZHJpdmVzCj4gd2hpY2ggbWF5Cj4gK3Np bGVudGx5IGZhaWwgb24gcmVhZGluZyBiYWQgc2VjdG9ycyBmcm9tIHRoZSBkaXNjLCByZXR1cm5p bmcgcmFuZG9tIGJpdHMKPiBpbnN0ZWFkCj4gK3doaWNoIGlzIGVmZmVjdGl2ZWx5IGNvcnJ1cHQg ZGF0YS4gVGhpcyBpcyBlc3BlY2lhbGx5IHByb21pbmVudCBvbiBhZ2luZwo+IG9yIHJvdHRpbmcg ZGlzY3MuCj4gK0Egc2Vjb25kIHBhc3MgYW5kIGludGVncml0eSBjaGVja3Mgd291bGQgYmUgbmVl ZGVkIHRvIGRldGVjdCB0aGUKPiBjb3JydXB0aW9uLgo+ICtUaGlzIGlzIG5vdCBhbiBmZm1wZWcg aXNzdWUuCj4gKwo+ICtAc3Vic2VjdGlvbiBCYWNrZ3JvdW5kCj4gKwo+ICtEVkQtVmlkZW8gaXMg bm90IGEgZGlyZWN0bHkgYWNjZXNzaWJsZSwgbGluZWFyIGNvbnRhaW5lciBmb3JtYXQgaW4gdGhl Cj4gK3RyYWRpdGlvbmFsIHNlbnNlLiBJbnN0ZWFkLCBpdCBhbGxvd3MgZm9yIGNvbXBsZXggYW5k IHByb2dyYW1tYXRpYwo+IHBsYXliYWNrIG9mCj4gK2NhcmVmdWxseSBtdXhlZCBNUEVHLVBTIHN0 cmVhbXMgdGhhdCBhcmUgc3RvcmVkIGluIGhlYWRlcmxlc3MgVk9CIGZpbGVzLgo+ICtUbyB0aGUg ZW5kLXVzZXIsIHRoZXNlIHN0cmVhbXMgYXJlIGtub3duIHNpbXBseSBhcyAidGl0bGVzIiwgYnV0 IHRoZQo+IGFjdHVhbAo+ICtsb2dpY2FsIHBsYXliYWNrIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkg b25lIG9yIG1vcmUgIlBHQ3MiLCBvciBQcm9ncmFtCj4gR3JvdXAgQ2hhaW5zLAo+ICt3aXRoaW4g dGhlIHRpdGxlLiBUaGUgUEdDIGlzIGluIHR1cm4gY29tcHJpc2VkIG9mIG11bHRpcGxlICJQR3Mi LCBvcgo+IFByb2dyYW1zIiwKPiArd2hpY2ggYXJlIHRoZSBhY3R1YWwgdmlkZW8gc2VnbWVudHMg d2hpY2gsIGZvciBhIHR5cGljYWwgbW92aWUsIGFyZQo+IHNlcXVlbnRpYWxseQo+ICtvcmRlcmVk LiBUaGUgUEdDIHN0cnVjdHVyZSwgYWxvbmcgd2l0aCBzdHJlYW0gbGF5b3V0IGFuZCBtZXRhZGF0 YSwgYXJlCj4gc3RvcmVkIGluCj4gK0lGTyBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgcGFyc2VkLiBQ R0NzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIHBsYXlsaXN0cyBpbgo+IGVhc2llciB0ZXJtcy4KPiAr Cj4gK0FuIGFjdHVhbCBEVkQgcGxheWVyIHJlbGllcyBvbiB1c2VyIEdVSSBpbnRlcmFjdGlvbiB2 aWEgbWVudXMgYW5kIGFuCj4gaW50ZXJuYWwgVk0KPiArdG8gZHJpdmUgdGhlIGRpcmVjdGlvbiBv ZiBkZW11eGluZy4gR2VuZXJhbGx5LCB0aGUgdXNlciB3b3VsZCBlaXRoZXIKPiBuYXZpZ2F0ZSAo dmlhIG1lbnVzKQo+ICtvciBhdXRvbWF0aWNhbGx5IGJlIHJlZGlyZWN0ZWQgdG8gdGhlIFBHQyBv ZiB0aGVpciBjaG9pY2UuIER1cmluZyB0aGlzCj4gcHJvY2VzcyBhbmQKPiArdGhlIHN1YnNlcXVl bnQgcGxheWJhY2ssIHRoZSBEVkQgcGxheWVyJ3MgaW50ZXJuYWwgVk0gYWxzbyBtYWludGFpbnMg YQo+IHN0YXRlIGFuZAo+ICtleGVjdXRlcyBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gY3JlYXRlIGp1 bXBzIHRvIGRpZmZlcmVudCBzZWN0b3JzIGR1cmluZwo+IHBsYXliYWNrLgo+ICtUaGlzIGlzIHdo eSBsaWJkdmRuYXYgaXMgaW52b2x2ZWQsIGFzIGEgbGluZWFyIHJlYWQgb2YgdGhlIE1QRUctUFMg YmxvYnMKPiBvbiB0aGUKPiArZGlzYyAoVk9CcykgaXMgbm90IGVub3VnaCB0byBwcm9kdWNlIHRo ZSByaWdodCBzZXF1ZW5jZSBpbiBtYW55IGNhc2VzLgo+ICsKPiArVGhlcmUgYXJlIG1hbnkgb3Ro ZXIgRFZEIHN0cnVjdHVyZXMgKGEgbG9uZyBzdWJqZWN0KSB0aGF0IHdpbGwgbm90IGJlCj4gZGlz Y3Vzc2VkIGhlcmUuCj4gK05BViBwYWNrZXRzLCBpbiBwYXJ0aWN1bGFyLCBhcmUgaGFuZGxlZCBi eSB0aGlzIGRlbXV4ZXIgdG8gYnVpbGQgYWNjdXJhdGUKPiB0aW1pbmcKPiArYnV0IG5vdCBlbWl0 dGVkIGFzIGEgc3RyZWFtLiBGb3IgYSBnb29kIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZywgcmVm ZXIKPiB0bzoKPiArQHVybHsKPiBodHRwczovL2NvZGUudmlkZW9sYW4ub3JnL3ZpZGVvbGFuL2xp YmR2ZG5hdi8tL2Jsb2IvbWFzdGVyL2RvYy9kdmRfc3RydWN0dXJlcwo+IH0KPiArCj4gK0BzdWJz ZWN0aW9uIE9wdGlvbnMKPiArCj4gK1RoaXMgZGVtdXhlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcg b3B0aW9uczoKPiArCj4gK0B0YWJsZSBAb3B0aW9uCj4gKwo+ICtAaXRlbSB0aXRsZQo+ICtUaGUg dGl0bGUgbnVtYmVyIHRvIHBsYXkuIE11c3QgYmUgc2V0IGlmIEBvcHRpb257cGdjfSBhbmQgQG9w dGlvbntwZ30gYXJlCj4gbm90IHNldC4KPiArRGVmYXVsdCBpcyAwIChhdXRvKSwgd2hpY2ggY3Vy cmVudGx5IG9ubHkgc2VsZWN0cyB0aGUgZmlyc3QgYXZhaWxhYmxlCj4gdGl0bGUgKHRpdGxlIDEp Cj4gK2FuZCBub3RpZmllcyB0aGUgdXNlciBhYm91dCB0aGUgaW1wbGljYXRpb25zLgo+ICsKPiAr QGl0ZW0gY2hhcHRlcl9zdGFydAo+ICtUaGUgY2hhcHRlciwgb3IgUFRUIChwYXJ0LW9mLXRpdGxl KSwgbnVtYmVyIHRvIHN0YXJ0IGF0LiBEZWZhdWx0IGlzIDEuCj4gKwo+ICtAaXRlbSBjaGFwdGVy X2VuZAo+ICtUaGUgY2hhcHRlciwgb3IgUFRUIChwYXJ0LW9mLXRpdGxlKSwgbnVtYmVyIHRvIGVu ZCBhdC4gRGVmYXVsdCBpcyAwLAo+ICt3aGljaCBpcyBhIHNwZWNpYWwgdmFsdWUgdG8gc2lnbmFs IGVuZCBhdCB0aGUgbGFzdCBwb3NzaWJsZSBjaGFwdGVyLgo+ICsKPiArQGl0ZW0gYW5nbGUKPiAr VGhlIHZpZGVvIGFuZ2xlIG51bWJlciwgcmVmZXJyaW5nIHRvIHdoYXQgaXMgZXNzZW50aWFsbHkg YW4gYWRkaXRpb25hbAo+ICt2aWRlbyBzdHJlYW0gdGhhdCBpcyBjb21wb3NlZCBmcm9tIGFsdGVy bmF0ZSBmcmFtZXMgaW50ZXJsZWF2ZWQgaW4gdGhlCj4gVk9Ccy4KPiArRGVmYXVsdCBpcyAxLgo+ ICsKPiArQGl0ZW0gcmVnaW9uCj4gK1RoZSByZWdpb24gY29kZSB0byB1c2UgZm9yIHBsYXliYWNr LiBTb21lIGRpc2NzIG1heSB1c2UgdGhpcyB0byBkZWZhdWx0Cj4gcGxheWJhY2sKPiArYXQgYSBw YXJ0aWN1bGFyIGFuZ2xlIGluIGRpZmZlcmVudCByZWdpb25zLiBUaGlzIG9wdGlvbiB3aWxsIG5v dCBhZmZlY3QKPiB0aGUgcmVnaW9uIGNvZGUKPiArb2YgYSByZWFsIERWRCBkcml2ZSwgaWYgdXNl ZCBhcyBhbiBpbnB1dC4gRGVmYXVsdCBpcyAwLCAid29ybGQiLgo+ICsKPiArQGl0ZW0gcGdjCj4g K1RoZSBlbnRyeSBQR0MgdG8gc3RhcnQgcGxheWJhY2ssIGluIGNvbmp1bmN0aW9uIHdpdGggQG9w dGlvbntwZ30uCj4gK0FsdGVybmF0aXZlIHRvIHNldHRpbmcgQG9wdGlvbnt0aXRsZX0uCj4gK0No YXB0ZXIgbWFya2VycyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KPiArRGVmYXVsdCBpcyAw LCBhdXRvbWF0aWNhbGx5IHJlc29sdmUgZnJvbSB2YWx1ZSBvZiBAb3B0aW9ue3RpdGxlfS4KPiAr Cj4gK0BpdGVtIHBnCj4gK1RoZSBlbnRyeSBQRyB0byBzdGFydCBwbGF5YmFjaywgaW4gY29uanVu Y3Rpb24gd2l0aCBAb3B0aW9ue3BnY30uCj4gK0FsdGVybmF0aXZlIHRvIHNldHRpbmcgQG9wdGlv bnt0aXRsZX0uCj4gK0NoYXB0ZXIgbWFya2VycyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4K PiArRGVmYXVsdCBpcyAwLCBhdXRvbWF0aWNhbGx5IHJlc29sdmUgZnJvbSB2YWx1ZSBvZiBAb3B0 aW9ue3RpdGxlfS4KPiArCj4gK0BpdGVtIHByZWluZGV4Cj4gK0VuYWJsZSB0aGlzIHRvIGhhdmUg YWNjdXJhdGUgY2hhcHRlciAoUFRUKSBtYXJrZXJzIGFuZCBkdXJhdGlvbgo+IG1lYXN1cmVtZW50 LAo+ICt3aGljaCByZXF1aXJlcyBhIHNsb3cgc2Vjb25kIHBhc3MgcmVhZCBpbiBvcmRlciB0byBp bmRleCB0aGUgY2hhcHRlcgo+ICt0aW1lc3RhbXBzIGZyb20gTkFWIHBhY2tldHMuIFRoaXMgaXMg bm9uLWlkZWFsIGV4dHJhIHdvcmsgZm9yIHBoeXNpY2FsCj4gRFZEIGRyaXZlcy4KPiArTm90IGNv bXBhdGlibGUgd2l0aCBAb3B0aW9ue3BnY30gYW5kIEBvcHRpb257cGd9Lgo+ICtEZWZhdWx0IGlz IDAsIGZhbHNlLgo+ICsKPiArQGl0ZW0gdHJpbQo+ICtTa2lwIHBhZGRpbmcgY2VsbHMgKGkuZS4g Y2VsbHMgc2hvcnRlciB0aGFuIDEgc2Vjb25kKSBmcm9tIHRoZSBiZWdpbm5pbmcuCj4gK1RoZXJl IGV4aXN0IG1hbnkgZGlzY3Mgd2l0aCBmaWxsZXIgc2VnbWVudHMgYXQgdGhlIGJlZ2lubmluZyBv ZiB0aGUgUEdDLAo+ICtvZnRlbiB3aXRoIGp1bmsgZGF0YSBpbnRlbmRlZCBmb3IgY29udHJvbGxp bmcgYSByZWFsIERWRCBwbGF5ZXIncwo+ICtidWZmZXJpbmcgc3BlZWQgYW5kIHdpdGggbm8gb3Ro ZXIgbWF0ZXJpYWwgZGF0YSB2YWx1ZS4KPiArRGVmYXVsdCBpcyAxLCB0cnVlLgo+ICsKPiArQGl0 ZW0gY2x1dF9yZ2IKPiArT3V0cHV0IHN1YnRpdGxlIHBhbGV0dGVzIChDTFVUcykgYXMgUkdCLCBy ZXF1aXJlZCBmb3IgTWF0cm9za2EuCj4gK0Rpc2FibGUgdG8gb3V0cHV0IHRoZSBwYWxldHRlIGlu IGl0cyBvcmlnaW5hbCBZVVYgY29sb3JzcGFjZS4KPiArRGVmYXVsdCBpcyAxLCB0cnVlLgo+ICsK PiArCj4gK0BlbmQgdGFibGUKPiArCj4gK0BzdWJzZWN0aW9uIEV4YW1wbGVzCj4gKwo+ICtAaXRl bWl6ZQo+ICtAaXRlbQo+ICtPcGVuIHRpdGxlIDMgZnJvbSBhIGdpdmVuIERWRCBzdHJ1Y3R1cmU6 Cj4gK0BleGFtcGxlCj4gK2ZmbXBlZyAtZiBkdmR2aWRlbyAtdGl0bGUgMyAtaSA8cGF0aCB0byBE VkQ+IC4uLgo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtCj4gK09wZW4gY2hhcHRlcnMgMy02 IGZyb20gdGl0bGUgMSBmcm9tIGEgZ2l2ZW4gRFZEIHN0cnVjdHVyZToKPiArQGV4YW1wbGUKPiAr ZmZtcGVnIC1mIGR2ZHZpZGVvIC1jaGFwdGVyX3N0YXJ0IDMgLWNoYXB0ZXJfZW5kIDYgLXRpdGxl IDEgLWkgPHBhdGggdG8KPiBEVkQ+IC4uLgo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtCj4g K09wZW4gb25seSBjaGFwdGVycyA1IGZyb20gdGl0bGUgMSBmcm9tIGEgZ2l2ZW4gRFZEIHN0cnVj dHVyZToKPiArQGV4YW1wbGUKPiArZmZtcGVnIC1mIGR2ZHZpZGVvIC1jaGFwdGVyX3N0YXJ0IDUg LWNoYXB0ZXJfZW5kIDUgLXRpdGxlIDEgLWkgPHBhdGggdG8KPiBEVkQ+IC4uLgo+ICtAZW5kIGV4 YW1wbGUKPiArQGVuZCBpdGVtaXplCj4gKwo+ICBAc2VjdGlvbiBlYQo+Cj4gIEVsZWN0cm9uaWMg QXJ0cyBNdWx0aW1lZGlhIGZvcm1hdCBkZW11eGVyLgo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gaW5kZXggMDViOWI4YTExNS4uZGY2 OTczNDg3NyAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2 Zm9ybWF0L01ha2VmaWxlCj4gQEAgLTE5Miw2ICsxOTIsNyBAQCBPQkpTLSQoQ09ORklHX0RUU19N VVhFUikgICAgICAgICAgICAgICAgICs9IHJhd2VuYy5vCj4gIE9CSlMtJChDT05GSUdfRFZfTVVY RVIpICAgICAgICAgICAgICAgICAgKz0gZHZlbmMubwo+ICBPQkpTLSQoQ09ORklHX0RWQlNVQl9E RU1VWEVSKSAgICAgICAgICAgICs9IGR2YnN1Yi5vIHJhd2RlYy5vCj4gIE9CSlMtJChDT05GSUdf RFZCVFhUX0RFTVVYRVIpICAgICAgICAgICAgKz0gZHZidHh0Lm8gcmF3ZGVjLm8KPiArT0JKUy0k KENPTkZJR19EVkRWSURFT19ERU1VWEVSKSAgICAgICAgICArPSBkdmR2aWRlb2RlYy5vCj4gIE9C SlMtJChDT05GSUdfRFhBX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gZHhhLm8KPiAgT0JKUy0k KENPTkZJR19FQV9DREFUQV9ERU1VWEVSKSAgICAgICAgICArPSBlYWNkYXRhLm8KPiAgT0JKUy0k KENPTkZJR19FQV9ERU1VWEVSKSAgICAgICAgICAgICAgICArPSBlbGVjdHJvbmljYXJ0cy5vCj4g ZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZv cm1hdHMuYwo+IGluZGV4IGIwNGI0M2NhYjMuLjNlOTA1YzIzZjggMTAwNjQ0Cj4gLS0tIGEvbGli YXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gKysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4g QEAgLTE1MCw2ICsxNTAsNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZfZGVt dXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX2R2X211eGVyOwo+ICBleHRl cm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZic3ViX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25z dCBBVklucHV0Rm9ybWF0ICBmZl9kdmJ0eHRfZGVtdXhlcjsKPiArZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX2R2ZHZpZGVvX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9y bWF0ICBmZl9keGFfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2Vh X2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9lYV9jZGF0YV9kZW11 eGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jIGIvbGliYXZmb3Jt YXQvZHZkdmlkZW9kZWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MC4uMDNjZjJkMWYyYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZvcm1hdC9kdmR2aWRl b2RlYy5jCj4gQEAgLTAsMCArMSwxNDA5IEBACj4gKy8qCj4gKyAqIERWRC1WaWRlbyBkZW11eGVy LCBwb3dlcmVkIGJ5IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVhZAo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ ICsKPiArLyoKPiArICogU2VlIGRvYy9kZW11eGVycy50ZXhpIGZvciBhIGhpZ2gtbGV2ZWwgb3Zl cnZpZXcuCj4gKyAqCj4gKyAqIFRoZSB0YWN0aWNhbCBhcHByb2FjaCBpcyBhcyBmb2xsb3dzOgo+ ICsgKiAxKSBPcGVuIHRoZSB2b2x1bWUgd2l0aCBkdmRyZWFkCj4gKyAqIDIpIEFuYWx5emUgdGhl IHVzZXItcmVxdWVzdGVkIHRpdGxlIGFuZCBQR0MgY29vcmRpbmF0ZXMgaW4gdGhlIElGTwo+IHN0 cnVjdHVyZXMKPiArICogMykgUmVxdWVzdCBwbGF5YmFjayBhdCB0aGUgY29vcmRpbmF0ZXMgYW5k IGNob3NlbiBhbmdsZSB3aXRoIGR2ZG5hdgo+ICsgKiA1KSBCZWdpbiB0aGUgcGxheWJhY2sgKHJl YWRpbmcgYW5kIGRlbXV4aW5nKSBvZiBNUEVHLVBTIGJsb2Nrcwo+ICsgKiA2KSBFbmQgcGxheWJh Y2sgaWYgbmF2aWdhdGlvbiBnb2VzIGJhY2t3YXJkcywgdG8gYSBtZW51LCBvciBhCj4gZGlmZmVy ZW50IFBHQyBvciBhbmdsZQo+ICsgKiA3KSBDbG9zZSB0aGUgZHZkbmF2IFZNLCBhbmQgZnJlZSBk dmRuYXYncyBJRk8gc3RydWN0dXJlcwo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkdmRuYXYvZHZk bmF2Lmg+Cj4gKyNpbmNsdWRlIDxkdmRyZWFkL2R2ZF9yZWFkZXIuaD4KPiArI2luY2x1ZGUgPGR2 ZHJlYWQvaWZvX3JlYWQuaD4KPiArI2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3R5cGVzLmg+Cj4gKyNp bmNsdWRlIDxkdmRyZWFkL25hdl9yZWFkLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9h dmNvZGVjLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC9hdnV0aWwuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUu aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9v cHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9zYW1wbGVmbXQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC90aW1lLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZXN0YW1wLmgiCj4gKwo+ ICsjaW5jbHVkZSAiYXZmb3JtYXQuaCIKPiArI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKPiAr I2luY2x1ZGUgImF2bGFuZ3VhZ2UuaCIKPiArI2luY2x1ZGUgImRlbXV4LmgiCj4gKyNpbmNsdWRl ICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAidXJsLmgiCj4gKwo+ICsjZGVmaW5lIERWRFZJREVP X01BWF9QU19TRUFSQ0hfQkxPQ0tTICAgICAgICAgICAgICAgICAgIDEyOAo+ICsjZGVmaW5lIERW RFZJREVPX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDgKPiArI2Rl ZmluZSBEVkRWSURFT19USU1FX0JBU0VfUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVZS YXRpb25hbCkgeyAxLAo+IDkwMDAwIH0KPiArI2RlZmluZSBEVkRWSURFT19QVFNfV1JBUF9CSVRT ICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAvKiBWT0JVcyB1c2UKPiAzMiAoUEVTIGFsbG93 cyAzMykgKi8KPiArI2RlZmluZSBEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRSAgICAg ICAgICAgICAgICAxMDI0Cj4gKwo+ICtlbnVtIERWRFZpZGVvU3VicGljdHVyZVZpZXdwb3J0IHsK PiArICAgIERWRFZJREVPX1NVQlBfVklFV1BPUlRfRlVMTFNDUkVFTiwKPiArICAgIERWRFZJREVP X1NVQlBfVklFV1BPUlRfV0lERVNDUkVFTiwKPiArICAgIERWRFZJREVPX1NVQlBfVklFV1BPUlRf TEVUVEVSQk9YLAo+ICsgICAgRFZEVklERU9fU1VCUF9WSUVXUE9SVF9QQU5TQ0FOCj4gK307Cj4g K2NvbnN0IGNoYXIqIFZJRVdQT1JUX0xBQkVMU1s0XSA9IHsgIkZ1bGxzY3JlZW4iLCAiV2lkZXNj cmVlbiIsCj4gIkxldHRlcmJveCIsICJQYW4gYW5kIFNjYW4iIH07Cj4gKwo+ICt0eXBlZGVmIHN0 cnVjdCBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkgewo+ICsgICAgaW50IHN0YXJ0Y29kZTsK PiArICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkOwo+ICsgICAgaW50IHdpZHRoOwo+ICsgICAg aW50IGhlaWdodDsKPiArICAgIEFWUmF0aW9uYWwgZGFyOwo+ICsgICAgQVZSYXRpb25hbCBmcmFt ZXJhdGU7Cj4gKyAgICBpbnQgaGFzX2NjOwo+ICt9IERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRy eTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSB7Cj4g KyAgICBpbnQgc3RhcnRjb2RlOwo+ICsgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQ7Cj4gKyAg ICBpbnQgc2FtcGxlX2ZtdDsKPiArICAgIGludCBzYW1wbGVfcmF0ZTsKPiArICAgIGludCBiaXRf ZGVwdGg7Cj4gKyAgICBpbnQgbmJfY2hhbm5lbHM7Cj4gKyAgICBBVkNoYW5uZWxMYXlvdXQgY2hf bGF5b3V0Owo+ICsgICAgaW50IGRpc3Bvc2l0aW9uOwo+ICsgICAgY2hhciAqbGFuZ19pc287Cj4g K30gRFZEVmlkZW9QR0NBdWRpb1N0cmVhbUVudHJ5Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZE VmlkZW9QR0NTdWJ0aXRsZVN0cmVhbUVudHJ5IHsKPiArICAgIGludCBzdGFydGNvZGU7Cj4gKyAg ICBpbnQgZGlzcG9zaXRpb247Cj4gKyAgICBjaGFyICpsYW5nX2lzbzsKPiArICAgIGVudW0gRFZE VmlkZW9TdWJwaWN0dXJlVmlld3BvcnQgdmlld3BvcnQ7Cj4gK30gRFZEVmlkZW9QR0NTdWJ0aXRs ZVN0cmVhbUVudHJ5Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9QbGF5YmFja1N0YXRl IHsKPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsbjsgICAgICAgICAgICAg IC8qIElEIG9mIHRoZSBhY3RpdmUKPiBjZWxsICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgZW50cnlfcGduOyAgICAgICAgICAvKiBJRCBvZiB0aGUgUEcgd2UKPiBhcmUgc3Rh cnRpbmcgaW4gKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wZ2M7ICAg ICAgICAgICAgIC8qIGlmIG91ciBuYXZpZ2F0b3IKPiBpcyBpbiB0aGUgUEdDICovCj4gKyAgICBp bnQgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcHM7ICAgICAgICAgICAgICAvKiBpZiBvdXIg bmF2aWdhdG9yCj4gaXMgaW4gdGhlIHByb2dyYW0gc3RyZWFtICovCj4gKyAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgaW5fdnRzOyAgICAgICAgICAgICAvKiBpZiBvdXIgbmF2aWdhdG9y Cj4gaXMgaW4gdGhlIFZUUyAqLwo+ICsgICAgaW50NjRfdCAgICAgICAgICAgICAgICAgICAgIG5h dl9wdHM7ICAgICAgICAgICAgLyogUFRTIGFjY29yZGluZyB0bwo+IElGTywgbm90IGZyYW1lLWFj Y3VyYXRlICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgbmJfdm9idXNfcGxh eWVkOyAgICAvKiBudW1iZXIgb2YgVk9CVXMKPiBwbGF5ZWQgYmFjayBzbyBmYXIgKi8KPiArICAg IHVpbnQ2NF90ICAgICAgICAgICAgICAgICAgICBwZ2NfZHVyYXRpb25fZXN0OyAgIC8qIGVzdGlt YXRlZCBkdXJhdGlvbgo+IGFzIHJlcG9ydGVkIGJ5IElGTyAqLwo+ICsgICAgdWludDY0X3QgICAg ICAgICAgICAgICAgICAgIHBnY19lbGFwc2VkOyAgICAgICAgLyogdGhlIGVsYXBzZWQgdGltZQo+ IG9mIHRoZSBQR0MsIGNlbGwtcmVsYXRpdmUgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICBwZ2NfbmJfcGdfZXN0OyAgICAgIC8qIG51bWJlciBvZiBQR3MgYXMKPiByZXBvcnRl ZCBieSBJRk9zICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGdjbjsgICAg ICAgICAgICAgICAvKiBJRCBvZiB0aGUgUEdDIHdlCj4gYXJlIHBsYXlpbmcgKi8KPiArICAgIGlu dCAgICAgICAgICAgICAgICAgICAgICAgICBwZ247ICAgICAgICAgICAgICAgIC8qIElEIG9mIHRo ZSBQRyB3ZQo+IGFyZSBpbiBub3cgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg ICBwdHQ7ICAgICAgICAgICAgICAgIC8qIElEIG9mIHRoZSBjaGFwdGVyCj4gd2UgYXJlIGluIG5v dyAqLwo+ICsgICAgaW50NjRfdCAgICAgICAgICAgICAgICAgICAgIHRzX29mZnNldDsgICAgICAg ICAgLyogUFRTIGRpc2NvbnRpbnVpdHkKPiBvZmZzZXQgKGV4LiBWT0IgY2hhbmdlKSAqLwo+ICsg ICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIHZvYnVfZHVyYXRpb247ICAgICAgLyogZHVy YXRpb24gb2YgdGhlCj4gY3VycmVudCBWT0JVICovCj4gKyAgICB1aW50MzJfdCAgICAgICAgICAg ICAgICAgICAgdm9idV9lX3B0bTsgICAgICAgICAvKiBlbmQgUFRTIG9mIHRoZQo+IGN1cnJlbnQg Vk9CVSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHZ0c247ICAgICAgICAg ICAgICAgLyogSUQgb2YgdGhlIGFjdGl2ZQo+IFZUUyAodmlkZW8gdGl0bGUgc2V0KSAqLwo+ICsg ICAgdWludDY0X3QgICAgICAgICAgICAgICAgICAgICpwZ2NfcGdfdGltZXNfZXN0OyAgLyogUEcg c3RhcnQgdGltZXMgYXMKPiByZXBvcnRlZCBieSBJRk8gKi8KPiArICAgIHBnY190ICAgICAgICAg ICAgICAgICAgICAgICAqcGdjOyAgICAgICAgICAgICAgIC8qIGhhbmRsZSB0byB0aGUKPiBhY3Rp dmUgUEdDICovCj4gKyAgICBkdmRuYXZfdCAgICAgICAgICAgICAgICAgICAgKmR2ZG5hdjsgICAg ICAgICAgICAvKiBoYW5kbGUgdG8KPiBsaWJkdmRuYXYgKi8KPiArfSBEVkRWaWRlb1BsYXliYWNr U3RhdGU7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRlb0RlbXV4Q29udGV4dCB7Cj4gKyAg ICBjb25zdCBBVkNsYXNzICAgICAgICAgICAgICAgKmNsYXNzOwo+ICsKPiArICAgIC8qIG9wdGlv bnMgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGl0bGU7ICAgICAg ICAgIC8qIHRoZSB1c2VyLXByb3ZpZGVkCj4gdGl0bGUgbnVtYmVyICgxLWluZGV4ZWQpICovCj4g KyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2NoYXB0ZXJfc3RhcnQ7ICAvKiB0 aGUgdXNlci1wcm92aWRlZAo+IGVudHJ5IFBUVCAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50ICAg ICAgICAgICAgICAgICAgICAgICAgIG9wdF9jaGFwdGVyX2VuZDsgICAgLyogdGhlIHVzZXItcHJv dmlkZWQKPiBleGl0IFBUVCAoMCBmb3IgbGFzdCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAg ICAgICAgICAgICBvcHRfcGdjOyAgICAgICAgICAgIC8qIHRoZSB1c2VyLXByb3ZpZGVkCj4gUEdD IG51bWJlciAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAg IG9wdF9wZzsgICAgICAgICAgICAgLyogdGhlIHVzZXItcHJvdmlkZWQKPiBQRyBudW1iZXIgKDEt aW5kZXhlZCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfYW5nbGU7 ICAgICAgICAgIC8qIHRoZSB1c2VyLXByb3ZpZGVkCj4gYW5nbGUgbnVtYmVyICgxLWluZGV4ZWQp ICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3JlZ2lvbjsgICAgICAg ICAvKiB0aGUgdXNlci1wcm92aWRlZAo+IHJlZ2lvbiBkaWdpdCAqLwo+ICsgICAgaW50ICAgICAg ICAgICAgICAgICAgICAgICAgIG9wdF9wcmVpbmRleDsgICAgICAgLyogcHJlLWluZGV4aW5nIG1v ZGUKPiAoMi1wYXNzIHJlYWQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg b3B0X3RyaW07ICAgICAgICAgICAvKiB0cmltIHBhZGRpbmcgY2VsbHMKPiBhdCBiZWdpbm5pbmcg YW5kIGVuZCAqLwo+ICsKPiArICAgIC8qIHN1YmRlbXV4ICovCj4gKyAgICBjb25zdCBBVklucHV0 Rm9ybWF0ICAgICAgICAgKm1wZWdfZm10OyAgICAgICAgICAvKiBpbm5lciBNUEVHLVBTCj4gKFZP QikgZGVtdXhlciAqLwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICAgICAgICAgICAgICptcGVnX2N0 eDsgICAgICAgICAgLyogY29udGV4dCBmb3IgaW5uZXIKPiBkZW11eGVyICovCj4gKyAgICB1aW50 OF90ICAgICAgICAgICAgICAgICAgICAgKm1wZWdfYnVmOyAgICAgICAgICAvKiBidWZmZXIgZm9y IGlubmVyCj4gZGVtdXhlciAqLwo+ICsgICAgRkZJT0NvbnRleHQgICAgICAgICAgICAgICAgIG1w ZWdfcGI7ICAgICAgICAgICAgLyogYnVmZmVyIGNvbnRleHQgZm9yCj4gaW5uZXIgZGVtdXhlciAq Lwo+ICsKPiArICAgIC8qIHZvbHVtZSAqLwo+ICsgICAgZHZkX3JlYWRlcl90ICAgICAgICAgICAg ICAgICpkdmRyZWFkOyAgICAgICAgICAgLyogaGFuZGxlIHRvCj4gbGliZHZkcmVhZCAqLwo+ICsg ICAgaWZvX2hhbmRsZV90ICAgICAgICAgICAgICAgICp2bWdfaWZvOyAgICAgICAgICAgLyogaGFu ZGxlIHRvIHRoZSBWTUcKPiAoVklERU9fVFMuSUZPKSAqLwo+ICsgICAgaWZvX2hhbmRsZV90ICAg ICAgICAgICAgICAgICp2dHNfaWZvOyAgICAgICAgICAgLyogaGFuZGxlIHRvIHRoZQo+IGFjdGl2 ZSBWVFMgKFZUU19ubl9uLklGTykgKi8KPiArCj4gKyAgICAvKiBwbGF5YmFjayBjb250cm9sICov Cj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV9lbmQ7ICAgICAgICAgICAv KiBzaWduYWwgRU9GIHRvIHRoZQo+IHBhcmVudCBkZW11eGVyICovCj4gKyAgICBEVkRWaWRlb1Bs YXliYWNrU3RhdGUgICAgICAgcGxheV9zdGF0ZTsgICAgICAgICAvKiB0aGUgYWN0aXZlCj4gcGxh eWJhY2sgc3RhdGUgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3N0 YXJ0ZWQ7ICAgICAgIC8qIHNpZ25hbCB0aGF0Cj4gcGxheWJhY2sgaGFzIHN0YXJ0ZWQgKi8KPiAr ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3NlZ19zdGFydGVkOyAgIC8qIHNp Z25hbCB0aGF0Cj4gc2VnbWVudCBoYXMgc3RhcnRlZCAqLwo+ICsgICAgaW50NjRfdCAgICAgICAg ICAgICAgICAgICAgIGZpcnN0X3B0czsgICAgICAgICAgLyogdGhlIHN0YXJ0aW5nIFBUUwo+IG9m ZnNldCBvZiB0aGUgUEdDICovCj4gKyAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAgICAgZHVy YXRpb25fcHRtOyAgICAgICAvKiB0b3RhbCBkdXJhdGlvbiBpbgo+IERWRCBNUEVHIHRpbWViYXNl ICovCj4gK30gRFZEVmlkZW9EZW11eENvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdmR2aWRl b19saWJkdmRyZWFkX2xvZyh2b2lkICpvcGFxdWUsIGR2ZF9sb2dnZXJfbGV2ZWxfdAo+IGxldmVs LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cs IHZhX2xpc3QgbXNnX3ZhKQo+ICt7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFxdWU7 Cj4gKyAgICBpbnQgbGF2dV9sZXZlbDsKPiArCj4gKyAgICBjaGFyIG1zZ19idWZbRFZEVklERU9f TElCRFZEWF9MT0dfQlVGRkVSX1NJWkVdID0gezB9Owo+ICsgICAgdnNucHJpbnRmKG1zZ19idWYs IERWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFLCBtc2csIG1zZ192YSk7Cj4gKwo+ICsg ICAgc3dpdGNoIChsZXZlbCkgewo+ICsgICAgICAgIGNhc2UgRFZEX0xPR0dFUl9MRVZFTF9FUlJP UjoKPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9IEFWX0xPR19FUlJPUjsKPiArICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBEVkRfTE9HR0VSX0xFVkVMX1dBUk46Cj4gKyAgICAg ICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfV0FSTklORzsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgLyogZHZkcmVhZCdzIGluZm8gbWVzc2FnZXMgYXJlIHJlbGF0aXZlbHkgdmVy eSB2ZXJib3NlLCBtdWZmbGUKPiB0aGVtIGFzIGRlYnVnICovCj4gKyAgICAgICAgY2FzZSBEVkRf TE9HR0VSX0xFVkVMX0lORk86Cj4gKyAgICAgICAgY2FzZSBEVkRfTE9HR0VSX0xFVkVMX0RFQlVH Ogo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0df REVCVUc7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKHMsIGxhdnVfbGV2ZWwsICJsaWJkdmRy ZWFkOiAlc1xuIiwgbXNnX2J1Zik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR2ZHZpZGVvX2xp YmR2ZG5hdl9sb2codm9pZCAqb3BhcXVlLCBkdmRuYXZfbG9nZ2VyX2xldmVsX3QKPiBsZXZlbCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csIHZh X2xpc3QgbXNnX3ZhKQo+ICt7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFxdWU7Cj4g KyAgICBpbnQgbGF2dV9sZXZlbDsKPiArCj4gKyAgICBjaGFyIG1zZ19idWZbRFZEVklERU9fTElC RFZEWF9MT0dfQlVGRkVSX1NJWkVdID0gezB9Owo+ICsgICAgdnNucHJpbnRmKG1zZ19idWYsIERW RFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFLCBtc2csIG1zZ192YSk7Cj4gKwo+ICsgICAg c3dpdGNoIChsZXZlbCkgewo+ICsgICAgICAgIGNhc2UgRFZETkFWX0xPR0dFUl9MRVZFTF9FUlJP UjoKPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9IEFWX0xPR19FUlJPUjsKPiArICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX1dBUk46Cj4gKyAg ICAgICAgICAgIC8qIHNvbWUgZGlzY3MgaGF2ZSBpbnZhbGlkIGxhbmd1YWdlIGNvZGVzIHNldCBm b3IgdGhlaXIKPiBtZW51cywgbXVmZmxlIHRoZSBub2lzZSAqLwo+ICsgICAgICAgICAgICBsYXZ1 X2xldmVsID0gYXZfc3Ryc3RhcnQobXNnLCAiTGFuZ3VhZ2UiLCBOVUxMKSA/Cj4gQVZfTE9HX0RF QlVHIDogQVZfTE9HX1dBUk5JTkc7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIC8q IGR2ZG5hdidzIGluZm8gbWVzc2FnZXMgYXJlIHJlbGF0aXZlbHkgdmVyeSB2ZXJib3NlLCBtdWZm bGUKPiB0aGVtIGFzIGRlYnVnICovCj4gKyAgICAgICAgY2FzZSBEVkROQVZfTE9HR0VSX0xFVkVM X0lORk86Cj4gKyAgICAgICAgY2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX0RFQlVHOgo+ICsgICAg ICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfREVCVUc7Cj4g KyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKHMsIGxhdnVfbGV2ZWwsICJsaWJkdmRuYXY6ICVzXG4i LCBtc2dfYnVmKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHZkdmlkZW9faWZvX2Nsb3NlKEFW Rm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBz LT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaWYgKGMtPnZ0c19pZm8pCj4gKyAgICAgICAgaWZvQ2xv c2UoYy0+dnRzX2lmbyk7Cj4gKwo+ICsgICAgaWYgKGMtPnZtZ19pZm8pCj4gKyAgICAgICAgaWZv Q2xvc2UoYy0+dm1nX2lmbyk7Cj4gKwo+ICsgICAgaWYgKGMtPmR2ZHJlYWQpCj4gKyAgICAgICAg RFZEQ2xvc2UoYy0+ZHZkcmVhZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9faWZv X29wZW4oQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4 dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBkdmRfbG9nZ2VyX2NiIGR2ZHJlYWRfbG9n X2NiOwo+ICsgICAgdGl0bGVfaW5mb190IHRpdGxlX2luZm87Cj4gKwo+ICsgICAgZHZkcmVhZF9s b2dfY2IgPSAoZHZkX2xvZ2dlcl9jYikgeyAucGZfbG9nID0gZHZkdmlkZW9fbGliZHZkcmVhZF9s b2cKPiB9Owo+ICsgICAgYy0+ZHZkcmVhZCA9IERWRE9wZW4yKHMsICZkdmRyZWFkX2xvZ19jYiwg cy0+dXJsKTsKPiArCj4gKyAgICBpZiAoIWMtPmR2ZHJlYWQpIHsKPiArICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIG9wZW4gdGhlIERWRC1WaWRlbwo+IHN0cnVjdHVy ZVxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ ICsKPiArICAgIGlmICghKGMtPnZtZ19pZm8gPSBpZm9PcGVuKGMtPmR2ZHJlYWQsIDApKSkgewo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gb3BlbiB0aGUgVk1H Cj4gKFZJREVPX1RTLklGTylcbiIpOwo+ICsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoYy0+b3B0X3RpdGxlID4gYy0+dm1nX2lmby0+ dHRfc3JwdC0+bnJfb2Zfc3JwdHMpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVGl0bGUgJWQgbm90IGZvdW5kXG4iLCBjLT5vcHRfdGl0bGUpOwo+ICsKPiArICAgICAgICBy ZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ICsgICAgfQo+ICsKPiArICAgIHRpdGxl X2luZm8gPSBjLT52bWdfaWZvLT50dF9zcnB0LT50aXRsZVtjLT5vcHRfdGl0bGUgLSAxXTsKPiAr ICAgIGlmIChjLT5vcHRfYW5nbGUgPiB0aXRsZV9pbmZvLm5yX29mX2FuZ2xlcykgewo+ICsgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJBbmdsZSAlZCBub3QgZm91bmRcbiIsIGMtPm9w dF9hbmdsZSk7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX1NUUkVBTV9OT1RfRk9VTkQ7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHRpdGxlX2luZm8ubnJfb2ZfcHR0cyA8IDEpIHsKPiAr ICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgJWQgaGFzIGludmFsaWQgaGVh ZGVycyBpbiBWTUdcbiIsCj4gYy0+b3B0X3RpdGxlKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGMtPm9wdF9jaGFwdGVy X3N0YXJ0ID4gdGl0bGVfaW5mby5ucl9vZl9wdHRzCj4gKyAgICAgICAgICAgIHx8IChjLT5vcHRf Y2hhcHRlcl9lbmQgPiAwICYmIGMtPm9wdF9jaGFwdGVyX2VuZCA+Cj4gdGl0bGVfaW5mby5ucl9v Zl9wdHRzKSkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDaGFwdGVyIChQ VFQpIHJhbmdlIFslZCwgJWRdIGlzCj4gaW52YWxpZFxuIiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjLT5vcHRfY2hhcHRlcl9zdGFydCwgYy0+b3B0X2NoYXB0ZXJfZW5kKTsK PiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgaWYgKCEoYy0+dnRzX2lmbyA9IGlmb09wZW4oYy0+ZHZkcmVhZCwgdGl0bGVfaW5mby50 aXRsZV9zZXRfbnIpKSkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gcHJvY2VzcyB0aGUgVlRTIElGTwo+IHN0cnVjdHVyZVxuIik7Cj4gKwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh0aXRsZV9p bmZvLnZ0c190dG4gPCAxCj4gKyAgICAgICAgICAgIHx8IHRpdGxlX2luZm8udnRzX3R0biA+IDk5 Cj4gKyAgICAgICAgICAgIHx8IHRpdGxlX2luZm8udnRzX3R0biA+IGMtPnZ0c19pZm8tPnZ0c19w dHRfc3JwdC0+bnJfb2Zfc3JwdHMKPiArICAgICAgICAgICAgfHwgYy0+dnRzX2lmby0+dnRzaV9t YXQtPm5yX29mX3Z0c19hdWRpb19zdHJlYW1zID4gOAo+ICsgICAgICAgICAgICB8fCBjLT52dHNf aWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtcyA+IDMyKSB7Cj4gKyAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlRpdGxlICVkIGhhcyBpbnZhbGlkIGhlYWRlcnMgaW4g VlRTXG4iLAo+IGMtPm9wdF90aXRsZSk7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkdmR2aWRlb19wbGF5X2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcywgRFZEVmlkZW9Q bGF5YmFja1N0YXRlCj4gKnN0YXRlKQo+ICt7Cj4gKyAgICBpZiAoIXN0YXRlLT5kdmRuYXYpCj4g KyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIC8qIG5vdCBhbGxvY2F0ZWQgYnkgYXZfbWFsbG9j KCkgKi8KPiArICAgIGlmIChzdGF0ZS0+cGdjX3BnX3RpbWVzX2VzdCkKPiArICAgICAgICBmcmVl KHN0YXRlLT5wZ2NfcGdfdGltZXNfZXN0KTsKPiArCj4gKyAgICBpZiAoZHZkbmF2X2Nsb3NlKHN0 YXRlLT5kdmRuYXYpIDwgMCkKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIGNsZWFubHkgY2xvc2UgZHZkbmF2XG4iKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBk dmR2aWRlb19wbGF5X29wZW4oQVZGb3JtYXRDb250ZXh0ICpzLCBEVkRWaWRlb1BsYXliYWNrU3Rh dGUKPiAqc3RhdGUpCj4gK3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJp dl9kYXRhOwo+ICsKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAgZHZkbmF2X2xvZ2dlcl9jYiBk dmRuYXZfbG9nX2NiOwo+ICsgICAgZHZkbmF2X3N0YXR1c190IGR2ZG5hdl9vcGVuX3N0YXR1czsK PiArICAgIGludCBjdXJfdGl0bGUsIGN1cl9wZ2NuLCBjdXJfcGduOwo+ICsgICAgcGdjX3QgKnBn YzsKPiArCj4gKyAgICBpbnQzMl90IGRpc2NfcmVnaW9uX21hc2s7Cj4gKyAgICBpbnQzMl90IHBs YXllcl9yZWdpb25fbWFzazsKPiArCj4gKyAgICBkdmRuYXZfbG9nX2NiID0gKGR2ZG5hdl9sb2dn ZXJfY2IpIHsgLnBmX2xvZyA9IGR2ZHZpZGVvX2xpYmR2ZG5hdl9sb2cKPiB9Owo+ICsgICAgZHZk bmF2X29wZW5fc3RhdHVzID0gZHZkbmF2X29wZW4yKCZzdGF0ZS0+ZHZkbmF2LCBzLCAmZHZkbmF2 X2xvZ19jYiwKPiBzLT51cmwpOwo+ICsKPiArICAgIGlmICghc3RhdGUtPmR2ZG5hdgo+ICsgICAg ICAgICAgICB8fCBkdmRuYXZfb3Blbl9zdGF0dXMgIT0gRFZETkFWX1NUQVRVU19PSwo+ICsgICAg ICAgICAgICB8fCBkdmRuYXZfc2V0X3JlYWRhaGVhZF9mbGFnKHN0YXRlLT5kdmRuYXYsIDApICE9 Cj4gRFZETkFWX1NUQVRVU19PSwo+ICsgICAgICAgICAgICB8fCBkdmRuYXZfc2V0X1BHQ19wb3Np dGlvbmluZ19mbGFnKHN0YXRlLT5kdmRuYXYsIDEpICE9Cj4gRFZETkFWX1NUQVRVU19PSwo+ICsg ICAgICAgICAgICB8fCBkdmRuYXZfZ2V0X3JlZ2lvbl9tYXNrKHN0YXRlLT5kdmRuYXYsICZkaXNj X3JlZ2lvbl9tYXNrKQo+ICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIG9wZW4gdGhlIERWRCBmb3IgcGxheWJhY2tcbiIp Owo+ICsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAgIH0KPiArCj4g KyAgICBwbGF5ZXJfcmVnaW9uX21hc2sgPSBjLT5vcHRfcmVnaW9uID4gMCA/ICgxIDw8IChjLT5v cHRfcmVnaW9uIC0gMSkpIDoKPiBkaXNjX3JlZ2lvbl9tYXNrOwo+ICsgICAgaWYgKGR2ZG5hdl9z ZXRfcmVnaW9uX21hc2soc3RhdGUtPmR2ZG5hdiwgcGxheWVyX3JlZ2lvbl9tYXNrKSAhPQo+IERW RE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIHNldCB0aGUgcGxheWJhY2sgcmVnaW9uIGNvZGUKPiAlZFxuIiwgYy0+b3B0X3JlZ2lv bik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsK PiArICAgIGlmIChjLT5vcHRfcGdjID4gMCAmJiBjLT5vcHRfcGcgPiAwKSB7Cj4gKyAgICAgICAg aWYgKGR2ZG5hdl9wcm9ncmFtX3BsYXkoc3RhdGUtPmR2ZG5hdiwgYy0+b3B0X3RpdGxlLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9wdF9wZ2MsIGMtPm9wdF9wZykgIT0K PiBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gc3RhcnQgcGxheWJhY2sgYXQgdGl0bGUKPiAlZCwgUEdDICVkLCBQRyAl ZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+b3B0X3RpdGxl LCBjLT5vcHRfcGdjLCBjLT5vcHRfcGcpOwo+ICsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBzdGF0ZS0+cGdjbiA9IGMt Pm9wdF9wZ2M7Cj4gKyAgICAgICAgc3RhdGUtPmVudHJ5X3BnbiA9IGMtPm9wdF9wZzsKPiArICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgaWYgKGR2ZG5hdl9wYXJ0X3BsYXkoc3RhdGUtPmR2ZG5hdiwg Yy0+b3B0X3RpdGxlLAo+IGMtPm9wdF9jaGFwdGVyX3N0YXJ0KSAhPSBEVkROQVZfU1RBVFVTX09L Cj4gKyAgICAgICAgICAgICAgICB8fCBkdmRuYXZfY3VycmVudF90aXRsZV9wcm9ncmFtKHN0YXRl LT5kdmRuYXYsICZjdXJfdGl0bGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZjdXJfcGdjbiwgJmN1cl9wZ24pICE9Cj4gRFZETkFWX1NUQVRVU19P Sykgewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHN0 YXJ0IHBsYXliYWNrIGF0IHRpdGxlCj4gJWQsIGNoYXB0ZXIgKFBUVCkgJWRcbiIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9wdF90aXRsZSwgYy0+b3B0X2NoYXB0 ZXJfc3RhcnQpOwo+ICsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4g KyAgICAgICAgfQo+ICsKPiArICAgICAgICBzdGF0ZS0+cGdjbiA9IGN1cl9wZ2NuOwo+ICsgICAg ICAgIHN0YXRlLT5lbnRyeV9wZ24gPSBjdXJfcGduOwo+ICsgICAgfQo+ICsKPiArICAgIHBnYyA9 IGMtPnZ0c19pZm8tPnZ0c19wZ2NpdC0+cGdjaV9zcnBbc3RhdGUtPnBnY24gLSAxXS5wZ2M7Cj4g Kwo+ICsgICAgaWYgKHBnYy0+cGdfcGxheWJhY2tfbW9kZSAhPSAwKSB7Cj4gKyAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIk5vbi1zZXF1ZW50aWFsIFBHQ3MsIHN1Y2ggYXMgc2h1ZmZs ZXMsCj4gYXJlIG5vdCBzdXBwb3J0ZWRcbiIpOwo+ICsKPiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9QQVRDSFdFTENPTUU7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGR2ZG5hdl9hbmdsZV9jaGFu Z2Uoc3RhdGUtPmR2ZG5hdiwgYy0+b3B0X2FuZ2xlKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spIHsK PiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHN0YXJ0IHBsYXli YWNrIGF0IHRoZSBnaXZlbgo+IGFuZ2xlXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogZHZkbmF2X2Rlc2NyaWJlX3RpdGxl X2NoYXB0ZXJzKCkgcGVyZm9ybXMgc2V2ZXJhbCBzYWZldHkgY2hlY2tzIG9uCj4gdGhlIHRpdGxl IHN0cnVjdHVyZSAqLwo+ICsgICAgLyogdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBzaWRlIGVmZmVj dCB0byBlbnN1cmUgYSBzYWZlIG5hdmlnYXRpb24KPiBwYXRoICovCj4gKyAgICBzdGF0ZS0+cGdj X25iX3BnX2VzdCA9IGR2ZG5hdl9kZXNjcmliZV90aXRsZV9jaGFwdGVycyhzdGF0ZS0+ZHZkbmF2 LAo+IGMtPm9wdF90aXRsZSwKPiArCj4gJnN0YXRlLT5wZ2NfcGdfdGltZXNfZXN0LAo+ICsKPiAm c3RhdGUtPnBnY19kdXJhdGlvbl9lc3QpOwo+ICsgICAgaWYgKCFzdGF0ZS0+cGdjX25iX3BnX2Vz dCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gdmFsaWRh dGUgdGl0bGUgc3RydWN0dXJlXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3RhdGUtPm5hdl9wdHMgPSBkdmRuYXZfZ2V0X2N1 cnJlbnRfdGltZShzdGF0ZS0+ZHZkbmF2KTsKPiArICAgIHN0YXRlLT52dHNuID0gYy0+dm1nX2lm by0+dHRfc3JwdC0+dGl0bGVbYy0+b3B0X3RpdGxlIC0KPiAxXS50aXRsZV9zZXRfbnI7Cj4gKwo+ ICsgICAgc3RhdGUtPnBnYyA9IHBnYzsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3BsYXlfaXNfY2VsbF9wcm9taXNpbmcoQVZGb3JtYXRDb250 ZXh0ICpzLAo+IERWRFZpZGVvUGxheWJhY2tTdGF0ZSAqc3RhdGUsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbG4pCj4gK3sKPiArICAgIERWRFZp ZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsgICAgZHZkX3RpbWVfdCBjZWxs X2R1cmF0aW9uOwo+ICsKPiArICAgIGlmICghYy0+b3B0X3RyaW0pCj4gKyAgICAgICAgcmV0dXJu IDE7Cj4gKwo+ICsgICAgY2VsbF9kdXJhdGlvbiA9IHN0YXRlLT5wZ2MtPmNlbGxfcGxheWJhY2tb Y2VsbG4gLSAxXS5wbGF5YmFja190aW1lOwo+ICsKPiArICAgIHJldHVybiBjZWxsX2R1cmF0aW9u LnNlY29uZCA+PSAxIHx8IGNlbGxfZHVyYXRpb24ubWludXRlID49IDEgfHwKPiBjZWxsX2R1cmF0 aW9uLmhvdXIgPj0gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19wbGF5X25leHRf cHNfYmxvY2soQVZGb3JtYXRDb250ZXh0ICpzLAo+IERWRFZpZGVvUGxheWJhY2tTdGF0ZSAqc3Rh dGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmJ1 ZiwgaW50IGJ1Zl9zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgKnBfbmF2X2V2ZW50LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICgqZmx1c2hfY2IpKEFWRm9ybWF0Q29udGV4dAo+ICpzKSkKPiArewo+ICsgICAg RFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgdWludDhf dCBuYXZfYnVmW0RWRFZJREVPX0JMT0NLX1NJWkVdID0gezB9Owo+ICsgICAgaW50IG5hdl9ldmVu dDsKPiArICAgIGludCBuYXZfbGVuOwo+ICsKPiArICAgIGR2ZG5hdl92dHNfY2hhbmdlX2V2ZW50 X3QgKmVfdnRzOwo+ICsgICAgZHZkbmF2X2NlbGxfY2hhbmdlX2V2ZW50X3QgKmVfY2VsbDsKPiAr ICAgIGludCBjdXJfdGl0bGUsIGN1cl9wZ2NuLCBjdXJfcGduLCBjdXJfYW5nbGUsIGN1cl90aXRs ZV91bnVzZWQsCj4gY3VyX3B0dCwgY3VyX25iX2FuZ2xlczsKPiArICAgIGludCBpc19jZWxsX3By b21pc2luZyA9IDA7Cj4gKyAgICBwY2lfdCAqZV9wY2k7Cj4gKyAgICBkc2lfdCAqZV9kc2k7Cj4g Kwo+ICsgICAgaWYgKGJ1Zl9zaXplICE9IERWRFZJREVPX0JMT0NLX1NJWkUpIHsKPiArICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBidWZmZXIgc2l6ZVxuIik7Cj4gKwo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBEVkRWSURFT19NQVhfUFNfU0VBUkNIX0JMT0NLUzsgaSsrKSB7Cj4g KyAgICAgICAgaWYgKGZmX2NoZWNrX2ludGVycnVwdCgmcy0+aW50ZXJydXB0X2NhbGxiYWNrKSkK PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKPiArCj4gKyAgICAgICAgaWYgKGR2 ZG5hdl9nZXRfbmV4dF9ibG9jayhzdGF0ZS0+ZHZkbmF2LCBuYXZfYnVmLCAmbmF2X2V2ZW50LAo+ ICZuYXZfbGVuKSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcmVhZCBuZXh0IGJsb2NrIG9mIFBHQ1xuIik7Cj4g Kwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIC8qIHNvbWUgZGlzY3MgZm9sbG93IE5PUHMgd2l0aCBhIHByZW1hdHVy ZSBzdG9wIGV2ZW50ICovCj4gKyAgICAgICAgaWYgKG5hdl9ldmVudCA9PSBEVkROQVZfU1RPUCkK PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgICAgICBpZiAobmF2 X2xlbiA+IERWRFZJREVPX0JMT0NLX1NJWkUpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIkludmFsaWQgYmxvY2sgc2l6ZVxuIik7Cj4gKwo+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlm IChkdmRuYXZfY3VycmVudF90aXRsZV9pbmZvKHN0YXRlLT5kdmRuYXYsICZjdXJfdGl0bGUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1cl9wdHQpICE9IERWRE5B Vl9TVEFUVVNfT0spIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVu YWJsZSB0byB2YWxpZGF0ZSB0aXRsZQo+IGNvb3JkaW5hdGVzXG4iKTsKPiArCj4gKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgLyogd2Ugc29tZWhvdyBuYXZpZ2F0ZWQgdG8gYSBtZW51ICovCj4gKyAgICAgICAgaWYgKGN1 cl90aXRsZSA9PSAwIHx8ICFkdmRuYXZfaXNfZG9tYWluX3Z0cyhzdGF0ZS0+ZHZkbmF2KSkKPiAr ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgICAgICBpZiAoZHZkbmF2 X2N1cnJlbnRfdGl0bGVfcHJvZ3JhbShzdGF0ZS0+ZHZkbmF2LCAmY3VyX3RpdGxlX3VudXNlZCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyX3BnY24sICZj dXJfcGduKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byB2YWxpZGF0ZSBQR0MKPiBjb29yZGluYXRlc1xuIik7 Cj4gKwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIC8qIHdlIHNvbWVob3cgbGVmdCB0aGUgUEdDICovCj4gKyAgICAg ICAgaWYgKHN0YXRlLT5pbl9wZ2MgJiYgY3VyX3BnY24gIT0gc3RhdGUtPnBnY24pCj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArCj4gKyAgICAgICAgaWYgKGR2ZG5hdl9nZXRf YW5nbGVfaW5mbyhzdGF0ZS0+ZHZkbmF2LCAmY3VyX2FuZ2xlLAo+ICZjdXJfbmJfYW5nbGVzKSAh PSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gdmFsaWRhdGUgYW5nbGUKPiBjb29yZGluYXRlc1xuIik7Cj4gKwo+ICsg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIGF2X2xvZyhzLCBuYXZfZXZlbnQgPT0gRFZETkFWX0JMT0NLX09LID8gQVZfTE9H X1RSQUNFIDoKPiBBVl9MT0dfREVCVUcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIm5ldyBibG9jazogaT0lZCBuYXZfZXZlbnQ9JWQgbmF2X2xlbj0lZAo+IGN1cl90aXRsZT0l ZCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cl9wdHQ9JWQgY3VyX2Fu Z2xlPSVkIGN1cl9jZWxsbj0lZAo+IGN1cl9wZ2NuPSVkIGN1cl9wZ249JWQgIgo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJwbGF5X2luX3Z0cz0lZCBwbGF5X2luX3BnYz0lZAo+ IHBsYXlfaW5fcHM9JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwg bmF2X2V2ZW50LCBuYXZfbGVuLCBjdXJfdGl0bGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3VyX3B0dCwgY3VyX2FuZ2xlLCBzdGF0ZS0+Y2VsbG4sCj4gY3VyX3BnY24sIGN1 cl9wZ24sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmluX3Z0cywg c3RhdGUtPmluX3BnYywKPiBzdGF0ZS0+aW5fcHMpOwo+ICsKPiArICAgICAgICBzd2l0Y2ggKG5h dl9ldmVudCkgewo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNfQ0hBTkdFOgo+ICsgICAg ICAgICAgICAgICAgaWYgKHN0YXRlLT5pbl92dHMpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgICAgICAgICAgICAgIGVfdnRzID0gKGR2ZG5hdl92 dHNfY2hhbmdlX2V2ZW50X3QgKikgbmF2X2J1ZjsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAo ZV92dHMtPm5ld192dHNOID09IHN0YXRlLT52dHNuICYmIGVfdnRzLT5uZXdfZG9tYWluCj4gPT0g RFZEX0RPTUFJTl9WVFNUaXRsZSkKPiArICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aW5fdnRz ID0gMTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgY2Fz ZSBEVkROQVZfQ0VMTF9DSEFOR0U6Cj4gKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLT5pbl92 dHMpCj4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgICAgICAg ICAgZV9jZWxsID0gKGR2ZG5hdl9jZWxsX2NoYW5nZV9ldmVudF90ICopIG5hdl9idWY7Cj4gKyAg ICAgICAgICAgICAgICBpc19jZWxsX3Byb21pc2luZyA9IGR2ZHZpZGVvX3BsYXlfaXNfY2VsbF9w cm9taXNpbmcocywKPiBzdGF0ZSwgZV9jZWxsLT5jZWxsTik7Cj4gKwo+ICsgICAgICAgICAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIm5ldyBjZWxsOiBwcmV2PSVkIG5ldz0lZAo+IHBy b21pc2luZz0lZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRlLT5jZWxsbiwgZV9jZWxsLT5jZWxsTiwKPiBpc19jZWxsX3Byb21pc2luZyk7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS0+aW5fcHMgJiYgIXN0YXRlLT5pbl9wZ2MpIHsK PiArICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX3RpdGxlID09IGMtPm9wdF90aXRsZSAmJiBj dXJfcHR0ID09Cj4gYy0+b3B0X2NoYXB0ZXJfc3RhcnQKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIGN1cl9wZ2NuID09IHN0YXRlLT5wZ2NuICYmIGN1cl9wZ24gPT0KPiBzdGF0ZS0+ ZW50cnlfcGduCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc19jZWxsX3Byb21p c2luZykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aW5fcGdjID0gMTsKPiAr ICAgICAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChjLT5v cHRfdHJpbSAmJiAhaXNfY2VsbF9wcm9taXNpbmcpCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfSU5GTywgIlNraXBwaW5nIHBhZGRpbmcgY2VsbAo+ICMlZFxuIiwg ZV9jZWxsLT5jZWxsTik7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLT5jZWxs biA+PSBlX2NlbGwtPmNlbGxOIHx8IHN0YXRlLT5wZ24gPgo+IGN1cl9wZ24pIHsKPiArICAgICAg ICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKyAgICAgICAgICAgICAgICB9Cj4g Kwo+ICsgICAgICAgICAgICAgICAgc3RhdGUtPmNlbGxuID0gZV9jZWxsLT5jZWxsTjsKPiArICAg ICAgICAgICAgICAgIHN0YXRlLT5wdHQgPSBjdXJfcHR0Owo+ICsgICAgICAgICAgICAgICAgc3Rh dGUtPnBnbiA9IGN1cl9wZ247Cj4gKwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAg ICAgICAgICAgIGNhc2UgRFZETkFWX05BVl9QQUNLRVQ6Cj4gKyAgICAgICAgICAgICAgICBpZiAo IXN0YXRlLT5pbl9wZ2MpCj4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsg ICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+cHR0ID4gMCAmJiBzdGF0ZS0+cHR0ID4gY3VyX3B0 dCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGMtPm9wdF9jaGFwdGVyX2VuZCA+IDAg JiYgY3VyX3B0dCA+Cj4gYy0+b3B0X2NoYXB0ZXJfZW5kKSkgewo+ICsgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAg ICAgICAgICAgICBlX3BjaSA9IGR2ZG5hdl9nZXRfY3VycmVudF9uYXZfcGNpKHN0YXRlLT5kdmRu YXYpOwo+ICsgICAgICAgICAgICAgICAgZV9kc2kgPSBkdmRuYXZfZ2V0X2N1cnJlbnRfbmF2X2Rz aShzdGF0ZS0+ZHZkbmF2KTsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoZV9wY2kgPT0gTlVM TCB8fCBlX2RzaSA9PSBOVUxMCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 fCBlX3BjaS0+cGNpX2dpLnZvYnVfc19wdG0gPgo+IGVfcGNpLT5wY2lfZ2kudm9idV9lX3B0bSkg ewo+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IE5BViBwYWNrZXRcbiIpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAg ICBzdGF0ZS0+dm9idV9kdXJhdGlvbiA9IGVfcGNpLT5wY2lfZ2kudm9idV9lX3B0bSAtCj4gZV9w Y2ktPnBjaV9naS52b2J1X3NfcHRtOwo+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnBnY19lbGFw c2VkICs9IHN0YXRlLT52b2J1X2R1cmF0aW9uOwo+ICsgICAgICAgICAgICAgICAgc3RhdGUtPm5h dl9wdHMgPSBkdmRuYXZfZ2V0X2N1cnJlbnRfdGltZShzdGF0ZS0+ZHZkbmF2KTsKPiArICAgICAg ICAgICAgICAgIHN0YXRlLT5wdHQgPSBjdXJfcHR0Owo+ICsgICAgICAgICAgICAgICAgc3RhdGUt PnBnbiA9IGN1cl9wZ247Cj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+bmJfdm9idXNfcGxheWVk Kys7Cj4gKwo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIk5BViBw YWNrOiBzX3B0bT0lZCBlX3B0bT0lZCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAic2NyPSVkIGxibj0lZCB2b2J1X2R1cmF0aW9uPSVkCj4gbmF2X3B0cz0lbGRc biIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX3BjaS0+cGNpX2dpLnZvYnVfc19w dG0sCj4gZV9wY2ktPnBjaV9naS52b2J1X2VfcHRtLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZV9kc2ktPmRzaV9naS5udl9wY2tfc2NyLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZV9wY2ktPnBjaV9naS5udl9wY2tfbGJuLAo+IHN0YXRlLT52b2J1X2R1cmF0aW9uLCBz dGF0ZS0+bmF2X3B0cyk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS0+aW5fcHMp IHsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAibmF2aWdh dGlvbjogbG9ja2VkIHRvCj4gcHJvZ3JhbSBzdHJlYW1cbiIpOwo+ICsKPiArICAgICAgICAgICAg ICAgICAgICBzdGF0ZS0+aW5fcHMgPSAxOwo+ICsgICAgICAgICAgICAgICAgfSBlbHNlIHsKPiAr ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPnZvYnVfZV9wdG0gIT0gZV9wY2ktPnBjaV9n aS52b2J1X3NfcHRtKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbHVzaF9jYikK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoX2NiKHMpOwo+ICsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdGUtPnRzX29mZnNldCArPSBzdGF0ZS0+dm9idV9lX3B0bSAt Cj4gZV9wY2ktPnBjaV9naS52b2J1X3NfcHRtOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+dm9idV9lX3B0 bSA9IGVfcGNpLT5wY2lfZ2kudm9idV9lX3B0bTsKPiArCj4gKyAgICAgICAgICAgICAgICAoKnBf bmF2X2V2ZW50KSA9IG5hdl9ldmVudDsKPiArCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gbmF2 X2xlbjsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfQkxPQ0tfT0s6Cj4gKyAgICAgICAgICAg ICAgICBpZiAoIXN0YXRlLT5pbl9wcykgewo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0 ZS0+aW5fcGdjKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsgLyogbmVjZXNzYXJ5 IGluIGNhc2Ugd2UgYXJlIHNrcHBpbmcganVuawo+IGNlbGxzIGF0IHRoZSBiZWdpbm5pbmcgKi8K PiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgICAgICAgICBpZiAobmF2X2xlbiAhPSBEVkRWSURFT19CTE9DS19TSVpFKSB7 Cj4gKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQg YmxvY2sgc2l6ZVxuIik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAg IGlmIChjdXJfYW5nbGUgIT0gYy0+b3B0X2FuZ2xlKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgYW5nbGUgY2hhbmdlXG4iKTsKPiAr Cj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5QVVRfQ0hBTkdFRDsKPiAr ICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBtZW1jcHkoYnVmLCAmbmF2 X2J1ZiwgbmF2X2xlbik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgLyogaW4gY2FzZSBOQVYgcGFj a2V0IGlzIG1pc3NlZCAqLwo+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnB0dCA9IGN1cl9wdHQ7 Cj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cGduID0gY3VyX3BnbjsKPiArCj4gKyAgICAgICAg ICAgICAgICAoKnBfbmF2X2V2ZW50KSA9IG5hdl9ldmVudDsKPiArCj4gKyAgICAgICAgICAgICAg ICByZXR1cm4gbmF2X2xlbjsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfU1RJTExfRlJBTUU6 Cj4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX1dBSVQ6Cj4gKyAgICAgICAgICAgIGNhc2UgRFZE TkFWX0hPUF9DSEFOTkVMOgo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9ISUdITElHSFQ6Cj4g KyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmluX3BzKQo+ICsgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VPRjsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAobmF2X2V2ZW50 ID09IERWRE5BVl9TVElMTF9GUkFNRSkKPiArICAgICAgICAgICAgICAgICAgICBkdmRuYXZfc3Rp bGxfc2tpcChzdGF0ZS0+ZHZkbmF2KTsKPiArICAgICAgICAgICAgICAgIGlmIChuYXZfZXZlbnQg PT0gRFZETkFWX1dBSVQpCj4gKyAgICAgICAgICAgICAgICAgICAgZHZkbmF2X3dhaXRfc2tpcChz dGF0ZS0+ZHZkbmF2KTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAg ICAgICAgY2FzZSBEVkROQVZfU1RPUDoKPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0VPRjsKPiArICAgICAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGZpbmQgbmV4dCBwcm9ncmFtIHN0cmVhbSBibG9ja1xuIik7Cj4gKwo+ICsg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fcGdjX3ByZWluZGV4KEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgRFZEVmlk ZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaW50IHJldCA9IDAs IGludGVycnVwdCA9IDA7Cj4gKyAgICBpbnQgbmJfY2hhcHRlcnMgPSAwLCBsYXN0X3B0dCA9IGMt Pm9wdF9jaGFwdGVyX3N0YXJ0Owo+ICsgICAgdWludDY0X3QgY3VyX2NoYXB0ZXJfb2Zmc2V0ID0g MCwgY3VyX2NoYXB0ZXJfZHVyYXRpb24gPSAwOwo+ICsgICAgRFZEVmlkZW9QbGF5YmFja1N0YXRl ICpzdGF0ZTsKPiArCj4gKyAgICB1aW50OF90IG5hdl9idWZbRFZEVklERU9fQkxPQ0tfU0laRV07 Cj4gKyAgICBpbnQgbmF2X2V2ZW50Owo+ICsKPiArICAgIGlmIChjLT5vcHRfY2hhcHRlcl9zdGFy dCA9PSBjLT5vcHRfY2hhcHRlcl9lbmQpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAg YXZfbG9nKHMsIEFWX0xPR19JTkZPLAo+ICsgICAgICAgICAgICJJbmRleGluZyBjaGFwdGVyIG1h cmtlcnMsIHRoaXMgd2lsbCB0YWtlIGEgbG9uZyB0aW1lLiBQbGVhc2UKPiB3YWl0Li4uXG4iKTsK PiArCj4gKyAgICBzdGF0ZSA9IGF2X21hbGxvY3ooc2l6ZW9mKERWRFZpZGVvUGxheWJhY2tTdGF0 ZSkpOwo+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19wbGF5X29wZW4ocywgc3RhdGUpKSA8IDAp IHsKPiArICAgICAgICBhdl9mcmVlcCgmc3RhdGUpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgd2hpbGUgKCEoaW50ZXJydXB0ID0gZmZfY2hlY2tfaW50ZXJydXB0 KCZzLT5pbnRlcnJ1cHRfY2FsbGJhY2spKSkgewo+ICsgICAgICAgIHJldCA9IGR2ZHZpZGVvX3Bs YXlfbmV4dF9wc19ibG9jayhzLCBzdGF0ZSwgbmF2X2J1ZiwKPiBEVkRWSURFT19CTE9DS19TSVpF LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmF2X2V2ZW50 LCBOVUxMKTsKPiArICAgICAgICBpZiAocmV0IDwgMCAmJiByZXQgIT0gQVZFUlJPUl9FT0YpCj4g KyAgICAgICAgICAgIGdvdG8gZW5kX2ZyZWU7Cj4gKwo+ICsgICAgICAgIGlmIChuYXZfZXZlbnQg IT0gRFZETkFWX05BVl9QQUNLRVQgJiYgcmV0ICE9IEFWRVJST1JfRU9GKQo+ICsgICAgICAgICAg ICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgaWYgKHN0YXRlLT5wdHQgPT0gbGFzdF9wdHQpIHsK PiArICAgICAgICAgICAgY3VyX2NoYXB0ZXJfZHVyYXRpb24gKz0gc3RhdGUtPnZvYnVfZHVyYXRp b247Cj4gKyAgICAgICAgICAgIC8qIGVuc3VyZSB3ZSBhZGQgdGhlIGxhc3QgY2hhcHRlciAqLwo+ ICsgICAgICAgICAgICBpZiAocmV0ICE9IEFWRVJST1JfRU9GKQo+ICsgICAgICAgICAgICAgICAg Y29udGludWU7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoIWF2cHJpdl9uZXdfY2hh cHRlcihzLCBuYl9jaGFwdGVycywgRFZEVklERU9fVElNRV9CQVNFX1EsCj4gY3VyX2NoYXB0ZXJf b2Zmc2V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9jaGFwdGVyX29m ZnNldCArCj4gY3VyX2NoYXB0ZXJfZHVyYXRpb24sIE5VTEwpKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxsb2NhdGUgY2hhcHRlclxuIik7Cj4g Kwo+ICsgICAgICAgICAgICBnb3RvIGVuZF9mcmVlOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgbmJfY2hhcHRlcnMrKzsKPiArICAgICAgICBjdXJfY2hhcHRlcl9vZmZzZXQgKz0gY3VyX2No YXB0ZXJfZHVyYXRpb247Cj4gKyAgICAgICAgY3VyX2NoYXB0ZXJfZHVyYXRpb24gPSBzdGF0ZS0+ dm9idV9kdXJhdGlvbjsKPiArICAgICAgICBsYXN0X3B0dCA9IHN0YXRlLT5wdHQ7Cj4gKwo+ICsg ICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpCj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsg ICAgfQo+ICsKPiArICAgIGlmIChpbnRlcnJ1cHQpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9S X0VYSVQ7Cj4gKyAgICAgICAgZ290byBlbmRfZnJlZTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo cmV0IDwgMCAmJiByZXQgIT0gQVZFUlJPUl9FT0YpCj4gKyAgICAgICAgZ290byBlbmRfZnJlZTsK PiArCj4gKyAgICBzLT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShzdGF0ZS0+cGdjX2VsYXBzZWQs IERWRFZJREVPX1RJTUVfQkFTRV9RLAo+IEFWX1RJTUVfQkFTRV9RKTsKPiArICAgIGMtPmR1cmF0 aW9uX3B0bSA9IHN0YXRlLT5wZ2NfZWxhcHNlZDsKPiArCj4gKyAgICBhdl9sb2cocywgQVZfTE9H X0lORk8sICJDaGFwdGVyIG1hcmtlciBpbmRleGluZyBjb21wbGV0ZVxuIik7Cj4gKyAgICByZXQg PSAwOwo+ICsKPiArZW5kX2ZyZWU6Cj4gKyAgICBkdmR2aWRlb19wbGF5X2Nsb3NlKHMsIHN0YXRl KTsKPiArICAgIGF2X2ZyZWVwKCZzdGF0ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19wZ2NfY2hhcHRlcnNfc2V0dXAoQVZGb3JtYXRDb250 ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0 YTsKPiArCj4gKyAgICB1aW50NjRfdCB0aW1lX3ByZXYgPSAwOwo+ICsgICAgaW50NjRfdCB0b3Rh bF9kdXJhdGlvbiA9IDA7Cj4gKwo+ICsgICAgaW50IGNoYXB0ZXJfc3RhcnQgPSBjLT5vcHRfY2hh cHRlcl9zdGFydCAtIDE7Cj4gKyAgICBpbnQgY2hhcHRlcl9lbmQgPSBjLT5vcHRfY2hhcHRlcl9l bmQgPiAwID8gYy0+b3B0X2NoYXB0ZXJfZW5kIDoKPiBjLT5wbGF5X3N0YXRlLnBnY19uYl9wZ19l c3QgLSAxOwo+ICsKPiArICAgIGlmIChjaGFwdGVyX3N0YXJ0ID09IGNoYXB0ZXJfZW5kIHx8IGMt PnBsYXlfc3RhdGUucGdjX25iX3BnX2VzdCA9PSAxKQo+IHsKPiArICAgICAgICBzLT5kdXJhdGlv biA9IGF2X3Jlc2NhbGVfcShjLT5wbGF5X3N0YXRlLnBnY19kdXJhdGlvbl9lc3QsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZEVklERU9fVElNRV9CQVNFX1EsIEFWX1RJ TUVfQkFTRV9RKTsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArCj4gKyAgICBmb3Ig KGludCBpID0gY2hhcHRlcl9zdGFydDsgaSA8IGNoYXB0ZXJfZW5kOyBpKyspIHsKPiArICAgICAg ICB1aW50NjRfdCB0aW1lX2VmZmVjdGl2ZSA9IGMtPnBsYXlfc3RhdGUucGdjX3BnX3RpbWVzX2Vz dFtpXSAtCj4gYy0+cGxheV9zdGF0ZS5uYXZfcHRzOwo+ICsKPiArICAgICAgICBpZiAoIWF2cHJp dl9uZXdfY2hhcHRlcihzLCBpLCBEVkRWSURFT19USU1FX0JBU0VfUSwgdGltZV9wcmV2LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZWZmZWN0aXZlLCBOVUxMKSkgewo+ ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRl IGNoYXB0ZXJcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgdGltZV9wcmV2ID0gdGltZV9lZmZlY3RpdmU7Cj4gKyAg ICAgICAgdG90YWxfZHVyYXRpb24gPSB0aW1lX2VmZmVjdGl2ZTsKPiArICAgIH0KPiArCj4gKyAg ICBpZiAoYy0+b3B0X2NoYXB0ZXJfc3RhcnQgPT0gMSAmJiBjLT5vcHRfY2hhcHRlcl9lbmQgPT0g MCkKPiArICAgICAgICBzLT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShjLT5wbGF5X3N0YXRlLnBn Y19kdXJhdGlvbl9lc3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZE VklERU9fVElNRV9CQVNFX1EsIEFWX1RJTUVfQkFTRV9RKTsKPiArICAgIGVsc2UKPiArICAgICAg ICBzLT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcSh0b3RhbF9kdXJhdGlvbiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUSwgQVZfVElNRV9C QVNFX1EpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZp ZGVvX3ZpZGVvX3N0cmVhbV9hbmFseXplKEFWRm9ybWF0Q29udGV4dCAqcywgdmlkZW9fYXR0cl90 Cj4gdmlkZW9fYXR0ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkKPiAqZW50cnkpCj4gK3sKPiArICAgIEFWUmF0 aW9uYWwgZnJhbWVyYXRlOwo+ICsgICAgaW50IGhlaWdodCA9IDA7Cj4gKyAgICBpbnQgd2lkdGgg PSAwOwo+ICsgICAgaW50IGlzX3BhbCA9IHZpZGVvX2F0dHIudmlkZW9fZm9ybWF0ID09IDE7Cj4g Kwo+ICsgICAgZnJhbWVyYXRlID0gaXNfcGFsID8gKEFWUmF0aW9uYWwpIHsgMjUsIDEgfSA6IChB VlJhdGlvbmFsKSB7IDMwMDAwLAo+IDEwMDEgfTsKPiArICAgIGhlaWdodCA9IGlzX3BhbCA/IDU3 NiA6IDQ4MDsKPiArCj4gKyAgICBpZiAoaGVpZ2h0ID4gMCkgewo+ICsgICAgICAgIHN3aXRjaCAo dmlkZW9fYXR0ci5waWN0dXJlX3NpemUpIHsKPiArICAgICAgICAgICAgY2FzZSAwOiAvKiBEMSAq Lwo+ICsgICAgICAgICAgICAgICAgd2lkdGggPSA3MjA7Cj4gKyAgICAgICAgICAgICAgICBicmVh azsKPiArICAgICAgICAgICAgY2FzZSAxOiAvKiA0Q0lGICovCj4gKyAgICAgICAgICAgICAgICB3 aWR0aCA9IDcwNDsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBjYXNl IDI6IC8qIEhhbGYgRDEgKi8KPiArICAgICAgICAgICAgICAgIHdpZHRoID0gMzUyOwo+ICsgICAg ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgMzogLyogQ0lGICovCj4gKyAg ICAgICAgICAgICAgICB3aWR0aCA9IDM1MjsKPiArICAgICAgICAgICAgICAgIGhlaWdodCAvPSAy Owo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAr ICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJJbnZhbGlkIHZpZGVvIGRpbWVuc2lvbnNcbiIpOwo+ICsKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBlbnRyeS0+c3RhcnRj b2RlID0gMHgxRTA7Cj4gKyAgICBlbnRyeS0+Y29kZWNfaWQgPSAhdmlkZW9fYXR0ci5tcGVnX3Zl cnNpb24gPyBBVl9DT0RFQ19JRF9NUEVHMVZJREVPIDoKPiBBVl9DT0RFQ19JRF9NUEVHMlZJREVP Owo+ICsgICAgZW50cnktPndpZHRoID0gd2lkdGg7Cj4gKyAgICBlbnRyeS0+aGVpZ2h0ID0gaGVp Z2h0Owo+ICsgICAgZW50cnktPmRhciA9IHZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8g PyAoQVZSYXRpb25hbCkgeyAxNiwgOSB9Cj4gOiAoQVZSYXRpb25hbCkgeyA0LCAzIH07Cj4gKyAg ICBlbnRyeS0+ZnJhbWVyYXRlID0gZnJhbWVyYXRlOwo+ICsgICAgZW50cnktPmhhc19jYyA9ICFp c19wYWwgJiYgKHZpZGVvX2F0dHIubGluZTIxX2NjXzEgfHwKPiB2aWRlb19hdHRyLmxpbmUyMV9j Y18yKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRl b192aWRlb19zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAqcywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSAqZW50cnks Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWU3RyZWFtUGFy c2VUeXBlIG5lZWRfcGFyc2luZykKPiArewo+ICsgICAgQVZTdHJlYW0gKnN0Owo+ICsgICAgRkZT dHJlYW0gKnN0aTsKPiArCj4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7 Cj4gKyAgICBpZiAoIXN0KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ ICsgICAgc3QtPmlkID0gZW50cnktPnN0YXJ0Y29kZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29k ZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf aWQgPSBlbnRyeS0+Y29kZWNfaWQ7Cj4gKyAgICBzdC0+Y29kZWNwYXItPndpZHRoID0gZW50cnkt PndpZHRoOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5oZWlnaHQgPSBlbnRyeS0+aGVpZ2h0Owo+ICsg ICAgc3QtPmNvZGVjcGFyLT5mb3JtYXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7Cj4gKyAgICBzdC0+ Y29kZWNwYXItPmNvbG9yX3JhbmdlID0gQVZDT0xfUkFOR0VfTVBFRzsKPiArCj4gKyAgICBzdC0+ Y29kZWNwYXItPmZyYW1lcmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gKyNpZiBGRl9BUElfUl9G UkFNRV9SQVRFCj4gKyAgICBzdC0+cl9mcmFtZV9yYXRlID0gZW50cnktPmZyYW1lcmF0ZTsKPiAr I2VuZGlmCj4gKyAgICBzdC0+YXZnX2ZyYW1lX3JhdGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ICsK PiArICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAgIHN0aS0+cmVxdWVzdF9wcm9iZSA9IDA7 Cj4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiArICAgIHN0aS0+ZGlz cGxheV9hc3BlY3RfcmF0aW8gPSBlbnRyeS0+ZGFyOwo+ICsgICAgc3RpLT5hdmN0eC0+ZnJhbWVy YXRlID0gZW50cnktPmZyYW1lcmF0ZTsKPiArCj4gKyAgICBpZiAoZW50cnktPmhhc19jYykKPiAr ICAgICAgICBzdGktPmF2Y3R4LT5wcm9wZXJ0aWVzIHw9IEZGX0NPREVDX1BST1BFUlRZX0NMT1NF RF9DQVBUSU9OUzsKPiArCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19Q VFNfV1JBUF9CSVRTLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JB U0VfUS5udW0sCj4gRFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiArCj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb192aWRlb19zdHJlYW1fc2V0dXAoQVZG b3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMt PnByaXZfZGF0YTsKPiArCj4gKyAgICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkgKmVudHJ5 ID0gTlVMTDsKPiArICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIGVudHJ5ID0gYXZfbWFsbG9j eihzaXplb2YoRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVudHJ5KSk7Cj4gKwo+ICsgICAgaWYgKChy ZXQgPSBkdmR2aWRlb192aWRlb19zdHJlYW1fYW5hbHl6ZShzLAo+IGMtPnZ0c19pZm8tPnZ0c2lf bWF0LT52dHNfdmlkZW9fYXR0ciwgZW50cnkpKSA8IDAKPiArICAgICAgICAgICAgfHwgKHJldCA9 IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV9hZGQoYy0+bXBlZ19jdHgsIGVudHJ5LAo+IEFWU1RSRUFN X1BBUlNFX0ZVTEwpKSA8IDAKPiArICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX3ZpZGVv X3N0cmVhbV9hZGQocywgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfSEVBREVSUykpIDwgMCkgewo+ ICsgICAgICAgIGF2X2ZyZWVwKCZlbnRyeSk7Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSB2aWRlbyBzdHJlYW1cbiIpOwo+ICsKPiArICAgICAg ICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIGF2X2ZyZWVwKCZlbnRyeSk7Cj4gKwo+ ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19z dHJlYW1fYW5hbHl6ZShBVkZvcm1hdENvbnRleHQgKnMsIGF1ZGlvX2F0dHJfdAo+IGF1ZGlvX2F0 dHIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qg YXVkaW9fY29udHJvbCwKPiBEVkRWaWRlb1BHQ0F1ZGlvU3RyZWFtRW50cnkgKmVudHJ5KQo+ICt7 Cj4gKyAgICBpbnQgc3RhcnRjb2RlID0gMDsKPiArICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lk ID0gQVZfQ09ERUNfSURfTk9ORTsKPiArICAgIGludCBzYW1wbGVfZm10ID0gQVZfU0FNUExFX0ZN VF9OT05FOwo+ICsgICAgaW50IHNhbXBsZV9yYXRlID0gMDsKPiArICAgIGludCBiaXRfZGVwdGgg PSAwOwo+ICsgICAgaW50IG5iX2NoYW5uZWxzID0gMDsKPiArICAgIEFWQ2hhbm5lbExheW91dCBj aF9sYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KSB7MH07Cj4gKyAgICBjaGFyIGxhbmdfZHZkWzNd ID0gezB9Owo+ICsKPiArICAgIGludCBwb3NpdGlvbiA9IChhdWRpb19jb250cm9sICYgMHg3RjAw KSA+PiA4Owo+ICsKPiArICAgIC8qIFhYWChQQVRDSFdFTENPTUUpOiBTRERTIGlzIG5vdCBzdXBw b3J0ZWQgZHVlIHRvIGxhY2sgb2Ygc2FtcGxlCj4gbWF0ZXJpYWwgKi8KPiArICAgIHN3aXRjaCAo YXVkaW9fYXR0ci5hdWRpb19mb3JtYXQpIHsKPiArICAgICAgICBjYXNlIDA6IC8qIEFDMyAqLwo+ ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX0FDMzsKPiArICAgICAgICAgICAg c2FtcGxlX2ZtdCA9IEFWX1NBTVBMRV9GTVRfRkxUUDsKPiArICAgICAgICAgICAgc2FtcGxlX3Jh dGUgPSA0ODAwMDsKPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gMHg4MCArIHBvc2l0aW9uOwo+ ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIDI6IC8qIE1QMSAqLwo+ICsgICAg ICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX01QMTsKPiArICAgICAgICAgICAgc2FtcGxl X2ZtdCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gQVZfU0FNUExFX0ZNVF9TMzIgOgo+IEFW X1NBTVBMRV9GTVRfUzE2Owo+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ICsg ICAgICAgICAgICBiaXRfZGVwdGggPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTY7 Cj4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IDB4MUMwICsgcG9zaXRpb247Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgMzogLyogTVAyICovCj4gKyAgICAgICAgICAgIGNv ZGVjX2lkID0gQVZfQ09ERUNfSURfTVAyOwo+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0gYXVk aW9fYXR0ci5xdWFudGl6YXRpb24gPyBBVl9TQU1QTEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExFX0ZN VF9TMTY7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gKyAgICAgICAgICAg IGJpdF9kZXB0aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gMjAgOiAxNjsKPiArICAgICAg ICAgICAgc3RhcnRjb2RlID0gMHgxQzAgKyBwb3NpdGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgY2FzZSA0OiAvKiBEVkQgUENNICovCj4gKyAgICAgICAgICAgIGNvZGVjX2lk ID0gQVZfQ09ERUNfSURfUENNX0RWRDsKPiArICAgICAgICAgICAgc2FtcGxlX2ZtdCA9IGF1ZGlv X2F0dHIucXVhbnRpemF0aW9uID8gQVZfU0FNUExFX0ZNVF9TMzIgOgo+IEFWX1NBTVBMRV9GTVRf UzE2Owo+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IGF1ZGlvX2F0dHIuc2FtcGxlX2ZyZXF1 ZW5jeSA/IDk2MDAwIDogNDgwMDA7Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9IGF1ZGlvX2F0 dHIucXVhbnRpemF0aW9uID09IDIgPyAyNCA6Cj4gKGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8g MjAgOiAxNik7Cj4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IDB4QTAgKyBwb3NpdGlvbjsKPiAr ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSA2OiAvKiBEQ0EgKi8KPiArICAgICAg ICAgICAgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9EVFM7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9m bXQgPSBBVl9TQU1QTEVfRk1UX0ZMVFA7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgw MDA7Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID09 IDIgPyAyNCA6Cj4gKGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gMjAgOiAxNik7Cj4gKyAgICAg ICAgICAgIHN0YXJ0Y29kZSA9IDB4ODggKyBwb3NpdGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgbmJfY2hhbm5lbHMgPSBhdWRpb19hdHRyLmNoYW5uZWxzICsg MTsKPiArCj4gKyAgICBpZiAoY29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTk9ORQo+ICsgICAgICAg ICAgICB8fCBzdGFydGNvZGUgPT0gMCB8fCBzYW1wbGVfZm10ID09IEFWX1NBTVBMRV9GTVRfTk9O RQo+ICsgICAgICAgICAgICB8fCBzYW1wbGVfcmF0ZSA9PSAwIHx8IG5iX2NoYW5uZWxzID09IDAp IHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBhdWRpbyBwYXJh bWV0ZXJzXG4iKTsKPiArCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKG5iX2NoYW5uZWxzID09IDIpCj4gKyAgICAgICAgY2hfbGF5 b3V0ID0gKEFWQ2hhbm5lbExheW91dCkgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPOwo+ICsgICAg ZWxzZSBpZiAobmJfY2hhbm5lbHMgPT0gNikKPiArICAgICAgICBjaF9sYXlvdXQgPSAoQVZDaGFu bmVsTGF5b3V0KSBBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQxOwo+ICsgICAgZWxzZSBpZiAobmJf Y2hhbm5lbHMgPT0gNykKPiArICAgICAgICBjaF9sYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KSBB Vl9DSEFOTkVMX0xBWU9VVF82UE9JTlQxOwo+ICsgICAgZWxzZSBpZiAobmJfY2hhbm5lbHMgPT0g OCkKPiArICAgICAgICBjaF9sYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KSBBVl9DSEFOTkVMX0xB WU9VVF83UE9JTlQxOwo+ICsKPiArICAgIGlmIChhdWRpb19hdHRyLmNvZGVfZXh0ZW5zaW9uID09 IDIpCj4gKyAgICAgICAgZW50cnktPmRpc3Bvc2l0aW9uIHw9IEFWX0RJU1BPU0lUSU9OX1ZJU1VB TF9JTVBBSVJFRDsKPiArICAgIGlmIChhdWRpb19hdHRyLmNvZGVfZXh0ZW5zaW9uID09IDMgfHwg YXVkaW9fYXR0ci5jb2RlX2V4dGVuc2lvbiA9PSA0KQo+ICsgICAgICAgIGVudHJ5LT5kaXNwb3Np dGlvbiB8PSBBVl9ESVNQT1NJVElPTl9DT01NRU5UOwo+ICsKPiArICAgIEFWX1dCMTYobGFuZ19k dmQsIGF1ZGlvX2F0dHIubGFuZ19jb2RlKTsKPiArCj4gKyAgICBlbnRyeS0+c3RhcnRjb2RlID0g c3RhcnRjb2RlOwo+ICsgICAgZW50cnktPmNvZGVjX2lkID0gY29kZWNfaWQ7Cj4gKyAgICBlbnRy eS0+c2FtcGxlX3JhdGUgPSBzYW1wbGVfcmF0ZTsKPiArICAgIGVudHJ5LT5iaXRfZGVwdGggPSBi aXRfZGVwdGg7Cj4gKyAgICBlbnRyeS0+bmJfY2hhbm5lbHMgPSBuYl9jaGFubmVsczsKPiArICAg IGVudHJ5LT5jaF9sYXlvdXQgPSBjaF9sYXlvdXQ7Cj4gKyAgICBlbnRyeS0+bGFuZ19pc28gPSAo Y2hhciAqKSBmZl9jb252ZXJ0X2xhbmdfdG8obGFuZ19kdmQsCj4gQVZfTEFOR19JU082MzlfMl9C SUJMKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRl b19hdWRpb19zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAqcywKPiBEVkRWaWRlb1BHQ0F1ZGlv U3RyZWFtRW50cnkgKmVudHJ5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW51bSBBVlN0cmVhbVBhcnNlVHlwZSBuZWVkX3BhcnNpbmcpCj4gK3sKPiArICAgIEFWU3Ry ZWFtICpzdDsKPiArICAgIEZGU3RyZWFtICpzdGk7Cj4gKwo+ICsgICAgc3QgPSBhdmZvcm1hdF9u ZXdfc3RyZWFtKHMsIE5VTEwpOwo+ICsgICAgaWYgKCFzdCkKPiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsKPiArICAgIHN0LT5pZCA9IGVudHJ5LT5zdGFydGNvZGU7Cj4gKyAg ICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfQVVESU87Cj4gKyAgICBz dC0+Y29kZWNwYXItPmNvZGVjX2lkID0gZW50cnktPmNvZGVjX2lkOwo+ICsgICAgc3QtPmNvZGVj cGFyLT5mb3JtYXQgPSBlbnRyeS0+c2FtcGxlX2ZtdDsKPiArICAgIHN0LT5jb2RlY3Bhci0+c2Ft cGxlX3JhdGUgPSBlbnRyeS0+c2FtcGxlX3JhdGU7Cj4gKyAgICBzdC0+Y29kZWNwYXItPmJpdHNf cGVyX2NvZGVkX3NhbXBsZSA9IGVudHJ5LT5iaXRfZGVwdGg7Cj4gKyAgICBzdC0+Y29kZWNwYXIt PmJpdHNfcGVyX3Jhd19zYW1wbGUgPSBlbnRyeS0+Yml0X2RlcHRoOwo+ICsgICAgc3QtPmNvZGVj cGFyLT5jaF9sYXlvdXQgPSBlbnRyeS0+Y2hfbGF5b3V0Owo+ICsgICAgc3QtPmNvZGVjcGFyLT5j aF9sYXlvdXQubmJfY2hhbm5lbHMgPSBlbnRyeS0+bmJfY2hhbm5lbHM7Cj4gKyAgICBzdC0+ZGlz cG9zaXRpb24gPSBlbnRyeS0+ZGlzcG9zaXRpb247Cj4gKwo+ICsgICAgaWYgKGVudHJ5LT5sYW5n X2lzbykKPiArICAgICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBl bnRyeS0+bGFuZ19pc28sIDApOwo+ICsKPiArICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAg IHN0aS0+cmVxdWVzdF9wcm9iZSA9IDA7Cj4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRf cGFyc2luZzsKPiArCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNf V1JBUF9CSVRTLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0Vf US5udW0sCj4gRFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiArCj4gKyAgICByZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1fYWRkX2FsbChBVkZv cm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+ cHJpdl9kYXRhOwo+ICsKPiArICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIGZvciAoaW50IGkg PSAwOyBpIDwgYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19hdWRpb19zdHJlYW1zOwo+ IGkrKykgewo+ICsgICAgICAgIERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSAqZW50cnkgPSBO VUxMOwo+ICsKPiArICAgICAgICBpZiAoIShjLT5wbGF5X3N0YXRlLnBnYy0+YXVkaW9fY29udHJv bFtpXSAmIDB4ODAwMCkpCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICBl bnRyeSA9IGF2X21hbGxvY3ooc2l6ZW9mKERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSkpOwo+ ICsgICAgICAgIGlmICghZW50cnkpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7Cj4gKwo+ICsgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FuYWx5 emUocywKPiBjLT52dHNfaWZvLT52dHNpX21hdC0+dnRzX2F1ZGlvX2F0dHJbaV0sCj4gKyAgICAg ICAgICAgICAgICBjLT5wbGF5X3N0YXRlLnBnYy0+YXVkaW9fY29udHJvbFtpXSwgZW50cnkpKSA8 IDApCj4gKyAgICAgICAgICAgIGdvdG8gYnJlYWtfZnJlZV9hbmRfZXJyb3I7Cj4gKwo+ICsgICAg ICAgIGlmIChjLT52dHNfaWZvLT52dHNpX21hdC0+dnRzX2F1ZGlvX2F0dHJbaV0uYXBwbGljYXRp b25fbW9kZSA9PSAxKQo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5JTkcsICJL YXJhb2tlIG1ldGFkYXRhIGluIHN0cmVhbSAlZCB3aWxsCj4gbm90IGJlIHJldGFpbmVkXG4iLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGFydGNvZGUp Owo+ICsKPiArICAgICAgICAvKiBJRk8gc3RydWN0dXJlcyBjYW4gZGVjbGFyZSBkdXBsaWNhdGUg ZW50cmllcyBmb3IgdGhlIHNhbWUKPiBzdGFydGNvZGUgKi8KPiArICAgICAgICBmb3IgKGludCBq ID0gMDsgaiA8IHMtPm5iX3N0cmVhbXM7IGorKykKPiArICAgICAgICAgICAgaWYgKHMtPnN0cmVh bXNbal0tPmlkID09IGVudHJ5LT5zdGFydGNvZGUpCj4gKyAgICAgICAgICAgICAgICBnb3RvIGNv bnRpbnVlX2ZyZWU7Cj4gKwo+ICsgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3Ry ZWFtX2FkZChjLT5tcGVnX2N0eCwgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfRlVMTCkpIDwgMAo+ ICsgICAgICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGQocywg ZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfSEVBREVSUykpIDwgMCkKPiArICAgICAgICAgICAgZ290 byBicmVha19mcmVlX2FuZF9lcnJvcjsKPiArCj4gK2NvbnRpbnVlX2ZyZWU6Cj4gKyAgICAgICAg YXZfZnJlZXAoJmVudHJ5KTsKPiArICAgICAgICBjb250aW51ZTsKPiArCj4gK2JyZWFrX2ZyZWVf YW5kX2Vycm9yOgo+ICsgICAgICAgIGF2X2ZyZWVwKCZlbnRyeSk7Cj4gKyAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBhdWRpbyBzdHJlYW1cbiIpOwo+ ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJwX3N0cmVhbV9hbmFseXplKEFWRm9ybWF0 Q29udGV4dCAqcywgdWludDMyX3QKPiBvZmZzZXQsIHN1YnBfYXR0cl90IHN1YnBfYXR0ciwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERWRFZpZGVvUEdDU3VidGl0 bGVTdHJlYW1FbnRyeQo+ICplbnRyeSkKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQg KmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgY2hhciBsYW5nX2R2ZFszXSA9IHswfTsKPiAr Cj4gKyAgICBlbnRyeS0+c3RhcnRjb2RlID0gMHgyMCArIChvZmZzZXQgJiAweDFGKTsKPiArCj4g KyAgICBpZiAoc3VicF9hdHRyLmxhbmdfZXh0ZW5zaW9uID09IDkpCj4gKyAgICAgICAgZW50cnkt PmRpc3Bvc2l0aW9uIHw9IEFWX0RJU1BPU0lUSU9OX0ZPUkNFRDsKPiArCj4gKyAgICBBVl9XQjE2 KGxhbmdfZHZkLCBzdWJwX2F0dHIubGFuZ19jb2RlKTsKPiArICAgIGVudHJ5LT5sYW5nX2lzbyA9 IChjaGFyICopIGZmX2NvbnZlcnRfbGFuZ190byhsYW5nX2R2ZCwKPiBBVl9MQU5HX0lTTzYzOV8y X0JJQkwpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZp ZGVvX3N1YnBfc3RyZWFtX2FkZChBVkZvcm1hdENvbnRleHQgKnMsCj4gRFZEVmlkZW9QR0NTdWJ0 aXRsZVN0cmVhbUVudHJ5ICplbnRyeSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBBVlN0cmVhbVBhcnNlVHlwZSBuZWVkX3BhcnNpbmcpCj4gK3sKPiArICAgIEFW U3RyZWFtICpzdDsKPiArICAgIEZGU3RyZWFtICpzdGk7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiAr Cj4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gKyAgICBpZiAoIXN0 KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgc3QtPmlkID0g ZW50cnktPnN0YXJ0Y29kZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVE SUFfVFlQRV9TVUJUSVRMRTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RF Q19JRF9EVkRfU1VCVElUTEU7Cj4gKwo+ICsgICAgaWYgKGVudHJ5LT5sYW5nX2lzbykKPiArICAg ICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBlbnRyeS0+bGFuZ19p c28sIDApOwo+ICsKPiArICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJWSUVXUE9SVCIs Cj4gVklFV1BPUlRfTEFCRUxTW2VudHJ5LT52aWV3cG9ydF0sIDApOwo+ICsKPiArICAgIHN0LT5k aXNwb3NpdGlvbiA9IGVudHJ5LT5kaXNwb3NpdGlvbjsKPiArCj4gKyAgICBzdGkgPSBmZnN0cmVh bShzdCk7Cj4gKyAgICBzdGktPnJlcXVlc3RfcHJvYmUgPSAwOwo+ICsgICAgc3RpLT5uZWVkX3Bh cnNpbmcgPSBuZWVkX3BhcnNpbmc7Cj4gKwo+ICsgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwg RFZEVklERU9fUFRTX1dSQVBfQklUUywKPiArICAgICAgICAgICAgICAgICAgICAgICAgRFZEVklE RU9fVElNRV9CQVNFX1EubnVtLAo+IERWRFZJREVPX1RJTUVfQkFTRV9RLmRlbik7Cj4gKwo+ICsg ICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJwX3N0cmVh bV9hZGRfaW50ZXJuYWwoQVZGb3JtYXRDb250ZXh0ICpzLCB1aW50MzJfdAo+IG9mZnNldCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicF9hdHRyX3Qg c3VicF9hdHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnVtCj4gRFZEVmlkZW9TdWJwaWN0dXJlVmlld3BvcnQgdmlld3BvcnQpCj4gK3sKPiArICAg IERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIERWRFZp ZGVvUEdDU3VidGl0bGVTdHJlYW1FbnRyeSAqZW50cnkgPSBOVUxMOwo+ICsgICAgaW50IHJldCA9 IDA7Cj4gKwo+ICsgICAgZW50cnkgPSBhdl9tYWxsb2N6KHNpemVvZihEVkRWaWRlb1BHQ1N1YnRp dGxlU3RyZWFtRW50cnkpKTsKPiArICAgIGVudHJ5LT52aWV3cG9ydCA9IHZpZXdwb3J0Owo+ICsK PiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYW5hbHl6ZShzLCBvZmZzZXQs IHN1YnBfYXR0ciwgZW50cnkpKQo+IDwgMCkKPiArICAgICAgICBnb3RvIGVuZF9mcmVlX2Vycm9y Owo+ICsKPiArICAgIC8qIElGTyBzdHJ1Y3R1cmVzIGNhbiBkZWNsYXJlIGR1cGxpY2F0ZSBlbnRy aWVzIGZvciB0aGUgc2FtZQo+IHN0YXJ0Y29kZSAqLwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBzLT5uYl9zdHJlYW1zOyBpKyspCj4gKyAgICAgICAgaWYgKHMtPnN0cmVhbXNbaV0tPmlkID09 IGVudHJ5LT5zdGFydGNvZGUpCj4gKyAgICAgICAgICAgIGdvdG8gZW5kX2ZyZWU7Cj4gKwo+ICsg ICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGQoYy0+bXBlZ19jdHgsIGVudHJ5 LAo+IEFWU1RSRUFNX1BBUlNFX0ZVTEwpKSA8IDAKPiArICAgICAgICAgICAgfHwgKHJldCA9IGR2 ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZChzLCBlbnRyeSwKPiBBVlNUUkVBTV9QQVJTRV9IRUFERVJT KSkgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kX2ZyZWVfZXJyb3I7Cj4gKwo+ICsgICAgZ290byBl bmRfZnJlZTsKPiArCj4gK2VuZF9mcmVlX2Vycm9yOgo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdWJ0aXRsZSBzdHJlYW1cbiIpOwo+ICsKPiArZW5k X2ZyZWU6Cj4gKyAgICBhdl9mcmVlcCgmZW50cnkpOwo+ICsKPiArICAgIHJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2FsbChBVkZvcm1h dENvbnRleHQgKnMpCj4gK3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJp dl9kYXRhOwo+ICsKPiArICAgIGlmICghYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19z dWJwX3N0cmVhbXMpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBjLT52dHNfaWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtczsKPiBp KyspIHsKPiArICAgICAgICBpbnQgcmV0ID0gMDsKPiArICAgICAgICB1aW50MzJfdCBzdWJwX2Nv bnRyb2w7Cj4gKyAgICAgICAgc3VicF9hdHRyX3Qgc3VicF9hdHRyOwo+ICsgICAgICAgIHZpZGVv X2F0dHJfdCB2aWRlb19hdHRyOwo+ICsKPiArICAgICAgICBzdWJwX2NvbnRyb2wgPSBjLT5wbGF5 X3N0YXRlLnBnYy0+c3VicF9jb250cm9sW2ldOwo+ICsgICAgICAgIGlmICghKHN1YnBfY29udHJv bCAmIDB4ODAwMDAwMDApKQo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAg LyogdGhlcmUgY2FuIGJlIHNldmVyYWwgcHJlc2VudGF0aW9ucyBmb3Igb25lIFNQVSAqLwo+ICsg ICAgICAgIC8qIGZvciBub3csIGJlIGZsZXhpYmxlIHdpdGggdGhlIERBUiBjaGVjayBkdWUgdG8g d2VpcmQgYXV0aG9yaW5nCj4gKi8KPiArICAgICAgICB2aWRlb19hdHRyID0gYy0+dnRzX2lmby0+ dnRzaV9tYXQtPnZ0c192aWRlb19hdHRyOwo+ICsgICAgICAgIHN1YnBfYXR0ciA9IGMtPnZ0c19p Zm8tPnZ0c2lfbWF0LT52dHNfc3VicF9hdHRyW2ldOwo+ICsKPiArICAgICAgICAvKiA0OjMgKi8K PiArICAgICAgICBpZiAoIXZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8pIHsKPiArICAg ICAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwocywg c3VicF9jb250cm9sCj4gPj4gMjQsIHN1YnBfYXR0ciwKPiArCj4gIERWRFZJREVPX1NVQlBfVklF V1BPUlRfRlVMTFNDUkVFTikpIDwgMCkKPiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g Kwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8q IDE2OjkgKi8KPiArICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9p bnRlcm5hbChzLCBzdWJwX2NvbnRyb2wgPj4KPiAxNiwgc3VicF9hdHRyLAo+ICsKPiAgRFZEVklE RU9fU1VCUF9WSUVXUE9SVF9XSURFU0NSRUVOKSkgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4g cmV0Owo+ICsKPiArICAgICAgICAvKiAxNjo5IGxldHRlcmJveCAqLwo+ICsgICAgICAgIGlmICh2 aWRlb19hdHRyLnBlcm1pdHRlZF9kZiA9PSAyIHx8IHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09 IDApCj4gKyAgICAgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2lu dGVybmFsKHMsIHN1YnBfY29udHJvbAo+ID4+IDgsIHN1YnBfYXR0ciwKPiArCj4gIERWRFZJREVP X1NVQlBfVklFV1BPUlRfTEVUVEVSQk9YKSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKPiArCj4gKyAgICAgICAgLyogMTY6OSBwYW4tYW5kLXNjYW4gKi8KPiArICAgICAgICBp ZiAodmlkZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0gMSB8fCB2aWRlb19hdHRyLnBlcm1pdHRlZF9k ZiA9PSAwKQo+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2Fk ZF9pbnRlcm5hbChzLCBzdWJwX2NvbnRyb2wsCj4gc3VicF9hdHRyLAo+ICsKPiAgRFZEVklERU9f U1VCUF9WSUVXUE9SVF9QQU5TQ0FOKSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg ZHZkdmlkZW9fc3ViZGVtdXhfZmx1c2goQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBE VkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAoIWMt PnBsYXlfc2VnX3N0YXJ0ZWQpCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGF2X2xvZyhz LCBBVl9MT0dfREVCVUcsICJmbHVzaGluZyBzdWItZGVtdXhlclxuIik7Cj4gKyAgICBhdmlvX2Zs dXNoKCZjLT5tcGVnX3BiLnB1Yik7Cj4gKyAgICBmZl9yZWFkX2ZyYW1lX2ZsdXNoKGMtPm1wZWdf Y3R4KTsKPiArICAgIGMtPnBsYXlfc2VnX3N0YXJ0ZWQgPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmJ1 ZiwgaW50Cj4gYnVmX3NpemUpCj4gK3sKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9wYXF1 ZTsKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiAr ICAgIGludCByZXQgPSAwOwo+ICsgICAgaW50IG5hdl9ldmVudDsKPiArCj4gKyAgICBpZiAoYy0+ cGxheV9lbmQpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgIHJldCA9 IGR2ZHZpZGVvX3BsYXlfbmV4dF9wc19ibG9jayhvcGFxdWUsICZjLT5wbGF5X3N0YXRlLCBidWYs Cj4gYnVmX3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5h dl9ldmVudCwKPiBkdmR2aWRlb19zdWJkZW11eF9mbHVzaCk7Cj4gKwo+ICsgICAgaWYgKHJldCA9 PSBBVkVSUk9SX0VPRikgewo+ICsgICAgICAgIGMtPm1wZWdfcGIucHViLmVvZl9yZWFjaGVkID0g MTsKPiArICAgICAgICBjLT5wbGF5X2VuZCA9IDE7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX0VPRjsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocmV0ID49IDAgJiYgbmF2X2V2ZW50ID09 IERWRE5BVl9OQVZfUEFDS0VUKQo+ICsgICAgICAgIHJldHVybiBGRkVSUk9SX1JFRE87Cj4gKwo+ ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fc3ViZGVt dXhfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29u dGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBhdl9mcmVlcCgmYy0+bXBlZ19wYi5w dWIuYnVmZmVyKTsKPiArICAgIGF2X2ZyZWVwKCZjLT5tcGVnX3BiKTsKPiArICAgIGF2Zm9ybWF0 X2Nsb3NlX2lucHV0KCZjLT5tcGVnX2N0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlk ZW9fc3ViZGVtdXhfb3BlbihBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIERWRFZpZGVv RGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGludCByZXQgPSAwOwo+ ICsKPiArICAgIGlmICghKGMtPm1wZWdfZm10ID0gYXZfZmluZF9pbnB1dF9mb3JtYXQoIm1wZWci KSkpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfREVNVVhFUl9OT1RfRk9VTkQ7Cj4gKwo+ICsg ICAgaWYgKCEoYy0+bXBlZ19jdHggPSBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCkpKQo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgaWYgKCEoYy0+bXBlZ19idWYg PSBhdl9tYWxsb2N6KERWRFZJREVPX0JMT0NLX1NJWkUpKSkgewo+ICsgICAgICAgIGF2Zm9ybWF0 X2ZyZWVfY29udGV4dChjLT5tcGVnX2N0eCk7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZmZpb19pbml0X2NvbnRleHQoJmMtPm1wZWdf cGIsIGMtPm1wZWdfYnVmLCBEVkRWSURFT19CTE9DS19TSVpFLCAwLCBzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgZHZkdmlkZW9fc3ViZGVtdXhfcmVhZF9kYXRhLCBOVUxMLCBOVUxMKTsKPiAr ICAgIGMtPm1wZWdfcGIucHViLnNlZWthYmxlID0gMDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGZm X2NvcHlfd2hpdGVibGFja2xpc3RzKGMtPm1wZWdfY3R4LCBzKSkgPCAwKSB7Cj4gKyAgICAgICAg YXZmb3JtYXRfZnJlZV9jb250ZXh0KGMtPm1wZWdfY3R4KTsKPiArCj4gKyAgICAgICAgcmV0dXJu IHJldDsKPiArICAgIH0KPiArCj4gKyAgICBjLT5tcGVnX2N0eC0+ZmxhZ3MgPSBBVkZNVF9GTEFH X0NVU1RPTV9JTyB8IEFWRk1UX0ZMQUdfR0VOUFRTOwo+ICsgICAgYy0+bXBlZ19jdHgtPmN0eF9m bGFncyB8PSBBVkZNVENUWF9VTlNFRUtBQkxFOwo+ICsgICAgYy0+bXBlZ19jdHgtPnByb2Jlc2l6 ZSA9IDA7Cj4gKyAgICBjLT5tcGVnX2N0eC0+bWF4X2FuYWx5emVfZHVyYXRpb24gPSAwOwo+ICsg ICAgYy0+bXBlZ19jdHgtPmludGVycnVwdF9jYWxsYmFjayA9IHMtPmludGVycnVwdF9jYWxsYmFj azsKPiArICAgIGMtPm1wZWdfY3R4LT5wYiA9ICZjLT5tcGVnX3BiLnB1YjsKPiArICAgIGMtPm1w ZWdfY3R4LT5pb19vcGVuID0gTlVMTDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGF2Zm9ybWF0X29w ZW5faW5wdXQoJmMtPm1wZWdfY3R4LCAiIiwgYy0+bXBlZ19mbXQsIE5VTEwpKQo+IDwgMCkgewo+ ICsgICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChjLT5tcGVnX2N0eCk7Cj4gKwo+ICsgICAg ICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBkdmR2aWRlb19yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCj4g K3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiAr ICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIGlmIChjLT5vcHRfdGl0bGUgPT0gMCkgewo+ICsg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfSU5GTywgIkRlZmF1bHRpbmcgdG8gdGl0bGUgIzEuICIK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIG5vdCBhbHdheXMgdGhl IG1haW4gZmVhdHVyZSwKPiB2YWxpZGF0aW9uIHN1Z2dlc3RlZC5cbiIpOwo+ICsKPiArICAgICAg ICBjLT5vcHRfdGl0bGUgPSAxOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjLT5vcHRfcGdjKSB7 Cj4gKyAgICAgICAgaWYgKGMtPm9wdF9wZyA9PSAwKQo+ICsgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiSW52YWxpZCBjb29yZGluYXRlcy4gSWYgLXBnYyBpcyBzZXQsCj4gLXBn IG11c3QgYmUgc2V0IHRvby5cbiIpOwo+ICsgICAgICAgIGVsc2UgaWYgKGMtPm9wdF9jaGFwdGVy X3N0YXJ0ID4gMSB8fCBjLT5vcHRfY2hhcHRlcl9lbmQgPiAwIHx8Cj4gYy0+b3B0X3ByZWluZGV4 KQo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiLXBnYyBpcyBub3QgY29t cGF0aWJsZSB3aXRoCj4gLXByZWluZGV4LCAtY2hhcHRlcl9zdGFydC9lbmRcbiIpOwo+ICsKPiAr ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICgo cmV0ID0gZHZkdmlkZW9faWZvX29wZW4ocykpIDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ ICsKPiArICAgIGlmIChjLT5vcHRfcHJlaW5kZXggJiYgKHJldCA9IGR2ZHZpZGVvX3BnY19wcmVp bmRleChzKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKChyZXQg PSBkdmR2aWRlb19wbGF5X29wZW4ocywgJmMtPnBsYXlfc3RhdGUpKSA8IDAKPiArICAgICAgICAg ICAgfHwgKHJldCA9IGR2ZHZpZGVvX3N1YmRlbXV4X29wZW4ocykpIDwgMAo+ICsgICAgICAgICAg ICB8fCAocmV0ID0gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX3NldHVwKHMpKSA8IDAKPiArICAgICAg ICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGRfYWxsKHMpKSA8IDAKPiAr ICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9hbGwocykpIDwg MCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIGlmICghYy0+b3B0X3ByZWluZGV4 KQo+ICsgICAgICAgIHJldHVybiBkdmR2aWRlb19wZ2NfY2hhcHRlcnNfc2V0dXAocyk7Cj4gKwo+ ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19yZWFkX3Bh Y2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCj4gK3sKPiArICAgIERWRFZp ZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGludCByZXQ7Cj4g KyAgICBlbnVtIEFWTWVkaWFUeXBlIHN0X3R5cGU7Cj4gKyAgICBpbnQ2NF90IGN1cl9kZWx0YSA9 IDA7Cj4gKwo+ICsgICAgaWYgKGMtPnBsYXlfZW5kKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0VPRjsKPiArCj4gKyAgICByZXQgPSBhdl9yZWFkX2ZyYW1lKGMtPm1wZWdfY3R4LCBwa3QpOwo+ ICsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAg aWYgKCFjLT5wbGF5X3NlZ19zdGFydGVkKQo+ICsgICAgICAgIGMtPnBsYXlfc2VnX3N0YXJ0ZWQg PSAxOwo+ICsKPiArICAgIGlmIChwa3QtPnN0cmVhbV9pbmRleCA+PSBzLT5uYl9zdHJlYW1zKSB7 Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgImRpc2NhcmRpbmcgZnJhbWUgd2l0 aCB1bmtub3duIHN0cmVhbVxuIik7Cj4gKyAgICAgICAgZ290byBza2lwX3JlZG87Cj4gKyAgICB9 Cj4gKwo+ICsgICAgc3RfdHlwZSA9Cj4gYy0+bXBlZ19jdHgtPnN0cmVhbXNbcGt0LT5zdHJlYW1f aW5kZXhdLT5jb2RlY3Bhci0+Y29kZWNfdHlwZTsKPiArCj4gKyAgICBpZiAoIWMtPnBsYXlfc3Rh cnRlZCkgewo+ICsgICAgICAgIGlmIChzdF90eXBlICE9IEFWTUVESUFfVFlQRV9WSURFTyB8fCBw a3QtPnB0cyA9PSBBVl9OT1BUU19WQUxVRQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCBwa3QtPmR0cyA9PSBBVl9OT1BUU19WQUxVRQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHBrdC0+ZmxhZ3MgJgo+IEFWX1BL VF9GTEFHX0tFWSkpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgImRp c2NhcmRpbmcgbm9uLXZpZGVvLWtleWZyYW1lIGF0Cj4gc3RhcnRcbiIpOwo+ICsgICAgICAgICAg ICBnb3RvIHNraXBfcmVkbzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGMtPmZpcnN0X3B0 cyA9IHBrdC0+cHRzOwo+ICsgICAgICAgIGMtPnBsYXlfc3RhcnRlZCA9IDE7Cj4gKwo+ICsgICAg ICAgIHBrdC0+cHRzID0gMDsKPiArICAgICAgICBwa3QtPmR0cyA9IGMtPnBsYXlfc3RhdGUudHNf b2Zmc2V0IC0gcGt0LT5wdHM7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGN1cl9kZWx0YSA9 IGMtPnBsYXlfc3RhdGUudHNfb2Zmc2V0IC0gYy0+Zmlyc3RfcHRzOwo+ICsKPiArICAgICAgICBp ZiAoYy0+cGxheV9zdGF0ZS5uYl92b2J1c19wbGF5ZWQgPT0gMSAmJiAocGt0LT5wdHMgPT0KPiBB Vl9OT1BUU19WQUxVRQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHx8ICBwa3QtPmR0cyA9PQo+IEFWX05PUFRTX1ZBTFVFCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBrdC0+cHRzICsgY3VyX2RlbHRh KQo+IDwgMCkpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgImRpc2Nh cmRpbmcgZnJhbWUgd2l0aCBuZWdhdGl2ZSBvcgo+IHVuc2V0IHRpbWVzdGFtcCAiCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIodGhpcyBpcyBPSyBhdCB0aGUgc3RhcnQg b2YgdGhlCj4gZmlyc3QgcGxheWJhY2sgVk9CVSlcbiIpOwo+ICsgICAgICAgICAgICBnb3RvIHNr aXBfcmVkbzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChwa3QtPnB0cyAhPSBBVl9O T1BUU19WQUxVRSkKPiArICAgICAgICAgICAgcGt0LT5wdHMgKz0gY3VyX2RlbHRhOwo+ICsgICAg ICAgIGlmIChwa3QtPmR0cyAhPSBBVl9OT1BUU19WQUxVRSkKPiArICAgICAgICAgICAgcGt0LT5k dHMgKz0gY3VyX2RlbHRhOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJB Q0UsICJzdD0lZCBwdHM9JWxkIGR0cz0lbGQgdHNfb2Zmc2V0PSVsZAo+IGZpcnN0X3B0cz0lbGRc biIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCwgcGt0 LT5wdHMsIHBrdC0+ZHRzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+cGxheV9z dGF0ZS50c19vZmZzZXQsIGMtPmZpcnN0X3B0cyk7Cj4gKyAgICBpZiAocGt0LT5wdHMgPCAwKQo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgZnJhbWUgUFRTIEAg c3Q9JWQgcHRzPSVsZAo+IGR0cz0lbGRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCwgcGt0LT5wdHMsIHBrdC0+ZHRzKTsKPiArCj4gKyAg ICByZXR1cm4gYy0+cGxheV9lbmQgPyBBVkVSUk9SX0VPRiA6IDA7Cj4gKwo+ICtza2lwX3JlZG86 Cj4gKyAgICBhdl9wYWNrZXRfdW5yZWYocGt0KTsKPiArICAgIHJldHVybiBGRkVSUk9SX1JFRE87 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpz KQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiAr Cj4gKyAgICBkdmR2aWRlb19zdWJkZW11eF9jbG9zZShzKTsKPiArICAgIGR2ZHZpZGVvX3BsYXlf Y2xvc2UocywgJmMtPnBsYXlfc3RhdGUpOwo+ICsgICAgZHZkdmlkZW9faWZvX2Nsb3NlKHMpOwo+ ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRv ZihEVkRWaWRlb0RlbXV4Q29udGV4dCwgeCkKPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIGR2ZHZp ZGVvX29wdGlvbnNbXSA9IHsKPiArICAgIHsiYW5nbGUiLCAgICAgICAgICAgInBsYXliYWNrIGFu Z2xlIG51bWJlciIsCj4gICAgICAgICAgIE9GRlNFVChvcHRfYW5nbGUpLCAgICAgICAgICBBVl9P UFRfVFlQRV9JTlQsICAgIHsgLmk2ND0xIH0sCj4gIDEsICAgICAgICAgIDksICAgICAgICAgQVZf T1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHsiY2hhcHRlcl9lbmQiLCAgICAgImV4 aXQgY2hhcHRlciAoUFRUKSBudW1iZXIiLAo+ICAgICAgICAgICBPRkZTRVQob3B0X2NoYXB0ZXJf ZW5kKSwgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LAo+ICAwLCAgICAgICAgICA5 OSwgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7ImNoYXB0ZXJf c3RhcnQiLCAgICJlbnRyeSBjaGFwdGVyIChQVFQpIG51bWJlciIsCj4gICAgICAgICAgICBPRkZT RVQob3B0X2NoYXB0ZXJfc3RhcnQpLCAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LAo+ ICAxLCAgICAgICAgICA5OSwgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4g KyAgICB7InBnIiwgICAgICAgICAgICAgICJlbnRyeSBQRyBudW1iZXIgKDA9YXV0bykiLAo+ICAg ICAgICAgICAgT0ZGU0VUKG9wdF9wZyksICAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAg eyAuaTY0PTAgfSwKPiAgMCwgICAgICAgICAgMjU1LCAgICAgICBBVl9PUFRfRkxBR19ERUNPRElO R19QQVJBTSB9LAo+ICsgICAgeyJwZ2MiLCAgICAgICAgICAgICAiZW50cnkgUEdDIG51bWJlciAo MD1hdXRvKSIsCj4gICAgICAgICAgIE9GRlNFVChvcHRfcGdjKSwgICAgICAgICAgICBBVl9PUFRf VFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sCj4gIDAsICAgICAgICAgIDk5OSwgICAgICAgQVZfT1BU X0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHsicHJlaW5kZXgiLCAgICAgICAgImVuYWJs ZSBmb3IgYWNjdXJhdGUgY2hhcHRlciBtYXJrZXJzLCBzbG93Cj4gKDItcGFzcyByZWFkKSIsICBP RkZTRVQob3B0X3ByZWluZGV4KSwgICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICB7IC5pNjQ9MAo+ IH0sICAgICAwLCAgICAgICAgICAxLCAgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFN IH0sCj4gKyAgICB7InJlZ2lvbiIsICAgICAgICAgICJwbGF5YmFjayByZWdpb24gbnVtYmVyICgw PWZyZWUpIiwKPiAgICAgICAgICAgT0ZGU0VUKG9wdF9yZWdpb24pLCAgICAgICAgIEFWX09QVF9U WVBFX0lOVCwgICAgeyAuaTY0PTAgfSwKPiAgMCwgICAgICAgICAgOCwgICAgICAgICBBVl9PUFRf RkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAgeyJ0aXRsZSIsICAgICAgICAgICAidGl0bGUg bnVtYmVyIiwKPiAgICAgICAgICAgIE9GRlNFVChvcHRfdGl0bGUpLCAgICAgICAgICBBVl9PUFRf VFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sCj4gIDAsICAgICAgICAgIDk5LCAgICAgICAgQVZfT1BU X0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHsidHJpbSIsICAgICAgICAgICAgInRyaW0g cGFkZGluZyBjZWxscyBmcm9tIHN0YXJ0IiwKPiAgICAgICAgICAgT0ZGU0VUKG9wdF90cmltKSwg ICAgICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgeyAuaTY0PTEgfSwKPiAgMCwgICAgICAgICAg MSwgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAge05VTEx9Cj4g K307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBkdmR2aWRlb19jbGFzcyA9IHsKPiArICAg IC5jbGFzc19uYW1lID0gIkRWRC1WaWRlbyBkZW11eGVyIiwKPiArICAgIC5pdGVtX25hbWUgID0g YXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAub3B0aW9uICAgICA9IGR2ZHZpZGVvX29wdGlv bnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVAo+ICt9Owo+ICsK PiArY29uc3QgQVZJbnB1dEZvcm1hdCBmZl9kdmR2aWRlb19kZW11eGVyID0gewo+ICsgICAgLm5h bWUgICAgICAgICAgID0gImR2ZHZpZGVvIiwKPiArICAgIC5sb25nX25hbWUgICAgICA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJEVkQtVmlkZW8iKSwKPiArICAgIC5wcml2X2NsYXNzICAgICA9ICZk dmR2aWRlb19jbGFzcywKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihEVkRWaWRlb0Rl bXV4Q29udGV4dCksCj4gKyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZNVF9OT0ZJTEUgfCBBVkZN VF9TSE9XX0lEUyB8IEFWRk1UX1RTX0RJU0NPTlQgfAo+IEFWRk1UX05PX0JZVEVfU0VFSyB8IEFW Rk1UX05PR0VOU0VBUkNIIHwgQVZGTVRfTk9CSU5TRUFSQ0gsCj4gKyAgICAuZmxhZ3NfaW50ZXJu YWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLAo+ICsgICAgLnJlYWRfY2xvc2UgICAgID0gZHZkdmlk ZW9fY2xvc2UsCj4gKyAgICAucmVhZF9oZWFkZXIgICAgPSBkdmR2aWRlb19yZWFkX2hlYWRlciwK PiArICAgIC5yZWFkX3BhY2tldCAgICA9IGR2ZHZpZGVvX3JlYWRfcGFja2V0Cj4gK307Cj4gLS0K PiAyLjM0LjEKPgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0 cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNj cmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZt cGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K