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 D85A8492AC for ; Wed, 7 Feb 2024 00:54:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E879968D145; Wed, 7 Feb 2024 02:54:53 +0200 (EET) Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 80D6068CA50 for ; Wed, 7 Feb 2024 02:54:47 +0200 (EET) Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-3bc21303a35so54174b6e.0 for ; Tue, 06 Feb 2024 16:54:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707267285; x=1707872085; h=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=Xdq88FySa38wSGLXvr8aCd4kbzDBm6mW8gPNOrYv/2k=; b=vbiyOYr6psdRh3lqWa7TsJAzx8LdGVJROn6GQPQaNGvmJ78cyddKrcvIwh3T03wu6f Who0GPJW99d1Xyl2qP59GFjnoy1Oa874Ffd3qA6bBZ0DM82r/CY+yKIRRJjSxLAJVmRZ Aoh8y3llrb+MpE9A2pPzBGwLkIybCyU7HYaYW8vgdrj4icHQvENb+PGKkSpRkHjLtUm+ bMiUpoNIGkVWtye2ZPy2qSZmQlQfp8JTRNo6m9Rbg/z92MgdUV8KOXn2XoHX8cwoYn45 geUxwJH4HFaeLBjfMslY8+MiTLLsxWea8BVq6GcVqRIHEoN77PR9qhtYdLolpXszPOus hl7w== X-Gm-Message-State: AOJu0YzMFy+lH8zD18YmkwWfoaAi+HiU63ub5MVcpfoz0af7QmKSMn/d 3E/9k6QY5h9RllXwDfoPEombwRgaRBSV3WXsmaw5Se1eW0NjczzLtngpr0KUjF6hp5W/V3dllfJ ezH19T0omWs00qzDs+G8LHQpjobX5q0S2pblqKByk7scXd+Dx X-Google-Smtp-Source: AGHT+IHCRX+RPuqy9nKCT7w04gCWWoFityl+46Dqe9h1VX91yDjgVZRjkR0X2wpLhFT+5zWty07khryYtZioNdwbynM= X-Received: by 2002:a05:6358:591e:b0:178:b0c6:577b with SMTP id g30-20020a056358591e00b00178b0c6577bmr4349291rwf.2.1707267284984; Tue, 06 Feb 2024 16:54:44 -0800 (PST) MIME-Version: 1.0 References: <20240205000242.959501-1-marth64@proxyid.net> <20240205054826.1179277-1-marth64@proxyid.net> In-Reply-To: From: Marth64 Date: Tue, 6 Feb 2024 18:54:33 -0600 Message-ID: To: FFmpeg development discussions and patches , Marth64 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v7 1/2] 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 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: VGhhbmsgeW91IGZvciB5b3VyIHRpbWUgYW5kIGRldGFpbGVkIHJldmlldy4gSSB3aWxsIGNsZWFu IGFsbCB0aGlzIHVwIGFuZApzZW5kIHY5CgpPbiBUdWUsIEZlYiA2LCAyMDI0IGF0IDY6NTPigK9Q TSBTdGVmYW5vIFNhYmF0aW5pIDxzdGVmYXNhYkBnbWFpbC5jb20+IHdyb3RlOgoKPiBPbiBkYXRl IFN1bmRheSAyMDI0LTAyLTA0IDIzOjQ4OjI1IC0wNjAwLCBNYXJ0aDY0IHdyb3RlOgo+ID4gU29y cnkgZm9yIHRoZSBxdWljayBmb2xsb3ctdXAgdG8gdjYsIEkgd2FudGVkIHRvIGdldCB0aGlzIHVw ZGF0ZSBvdXQgbm93Cj4gaG9wZWZ1bGx5Cj4gPiBiZWZvcmUgdjYgaXMgYWN0dWFsbHkgcmV2aWV3 ZWQuIHY3IGZpeGVzIGEgZmV3IGRvY3VtZW50YXRpb24gdHlwb3MsCj4gb3B0aW9ucyBkZXNjcmlw dGlvbnMsCj4gPiBhbmQgbG9nIG1lc3NhZ2VzOiBub3RoaW5nIG1ham9yLiBJIGFsc28gZmxhdHRl bmVkIHRoaXMgb3V0IHRvIGJlIGEKPiAyLXBhdGNoIHNldAo+ID4gd2l0aCBzdWJ0aXRsZSBwYWxl dHRlIHN1cHBvcnQuCj4gPgo+ID4gVGhpcyBpcyB0aGUgcmVzdWx0IG9mID4xeXIgb2YgcmVzZWFy Y2ggYW5kIEkgYW0gbm93IHZlcnkgc2F0aXNmaWVkIHdpdGgKPiBpdCdzIHJlc3VsdC4KPiA+IEkg d2lsbCBub3QgbWFrZSBhbnkgbW9yZSBjaGFuZ2VzIGF0IHRoaXMgcG9pbnQgdW5sZXNzIGl0IGlz IG91dGNvbWUgZnJvbQo+IGEgcmV2aWV3Lgo+ID4gSWYgdGhlIGNvbW11bml0eSBkZWNpZGVzIHRv IG1lcmdlIGl0LCBJIGFtIGhhcHB5IHRvIGNvbnRpbnVlIHRvIGltcHJvdmUKPiBpdCB3aXRoIHN1 cHBvcnQgZm9yCj4gPiBzZWVraW5nLCBwcm9iaW5nLCBhbmQgdGVzdHMuCj4gPgo+ID4gVGhhbmsg eW91IHNvIG11Y2gsCj4gPgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IE1hcnRoNjQgPG1hcnRoNjRA cHJveHlpZC5uZXQ+Cj4gPiAtLS0KPiA+ICBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgIHwgICAg MiArCj4gPiAgY29uZmlndXJlICAgICAgICAgICAgICAgICB8ICAgIDggKwo+ID4gIGRvYy9kZW11 eGVycy50ZXhpICAgICAgICAgfCAgMTI5ICsrKysKPiA+ICBsaWJhdmZvcm1hdC9NYWtlZmlsZSAg ICAgIHwgICAgMSArCj4gPiAgbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jICB8ICAgIDEgKwo+ID4g IGxpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMgfCAxNDEwICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDE1NTEgaW5zZXJ0aW9ucygrKQo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jCj4gPgo+ID4g ZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+ID4gaW5kZXggYzVmYjIxZDE5OC4u ODg2NTNiYzZkMyAxMDA2NDQKPiA+IC0tLSBhL0NoYW5nZWxvZwo+ID4gKysrIGIvQ2hhbmdlbG9n Cj4gPiBAQCAtMjQsNiArMjQsOCBAQCB2ZXJzaW9uIDxuZXh0PjoKPiA+ICAtIGZmbXBlZyBDTEkg b3B0aW9ucyBtYXkgbm93IGJlIHVzZWQgYXMgLS9vcHQgPHBhdGg+LCB3aGljaCBpcwo+IGVxdWl2 YWxlbnQKPiA+ICAgIHRvIC1vcHQgPGNvbnRlbnRzIG9mIGZpbGUgPHBhdGg+Pgo+ID4gIC0gc2hv d2luZm8gYml0c3RyZWFtIGZpbHRlcgo+ID4gKy0gRFZELVZpZGVvIGRlbXV4ZXIsIHBvd2VyZWQg YnkgbGliZHZkbmF2IGFuZCBsaWJkdmRyZWFkCj4gPiArCj4gPgo+ID4gIHZlcnNpb24gNi4xOgo+ ID4gIC0gbGliYXJpYmNhcHRpb24gZGVjb2Rlcgo+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBi L2NvbmZpZ3VyZQo+ID4gaW5kZXggNjhmNjc1YTRiYy4uNzBjMzNlYzk2ZCAxMDA3NTUKPiA+IC0t LSBhL2NvbmZpZ3VyZQo+ID4gKysrIGIvY29uZmlndXJlCj4gPiBAQCAtMjI3LDYgKzIyNyw4IEBA IEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKPiA+ICAgIC0tZW5hYmxlLWxpYmRhdnMyICAgICAg ICBlbmFibGUgQVZTMiBkZWNvZGluZyB2aWEgbGliZGF2czIgW25vXQo+ID4gICAgLS1lbmFibGUt bGliZGMxMzk0ICAgICAgIGVuYWJsZSBJSURDLTEzOTQgZ3JhYmJpbmcgdXNpbmcgbGliZGMxMzk0 Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpYnJhdzEzOTQgW25vXQo+ID4g KyAgLS1lbmFibGUtbGliZHZkbmF2ICAgICAgIGVuYWJsZSBsaWJkdmRuYXYsIG5lZWRlZCBmb3Ig RFZEIGRlbXV4aW5nCj4gW25vXQo+ID4gKyAgLS1lbmFibGUtbGliZHZkcmVhZCAgICAgIGVuYWJs ZSBsaWJkdmRyZWFkLCBuZWVkZWQgZm9yIERWRCBkZW11eGluZwo+IFtub10KPiA+ICAgIC0tZW5h YmxlLWxpYmZkay1hYWMgICAgICBlbmFibGUgQUFDIGRlL2VuY29kaW5nIHZpYSBsaWJmZGstYWFj IFtub10KPiA+ICAgIC0tZW5hYmxlLWxpYmZsaXRlICAgICAgICBlbmFibGUgZmxpdGUgKHZvaWNl IHN5bnRoZXNpcykgc3VwcG9ydCB2aWEKPiBsaWJmbGl0ZSBbbm9dCj4gPiAgICAtLWVuYWJsZS1s aWJmb250Y29uZmlnICAgZW5hYmxlIGxpYmZvbnRjb25maWcsIHVzZWZ1bCBmb3IgZHJhd3RleHQK PiBmaWx0ZXIgW25vXQo+ID4gQEAgLTE4MDYsNiArMTgwOCw4IEBAIEVYVEVSTkFMX0xJQlJBUllf R1BMX0xJU1Q9Igo+ID4gICAgICBmcmVpMHIKPiA+ICAgICAgbGliY2Rpbwo+ID4gICAgICBsaWJk YXZzMgo+ID4gKyAgICBsaWJkdmRuYXYKPiA+ICsgICAgbGliZHZkcmVhZAo+ID4gICAgICBsaWJy dWJiZXJiYW5kCj4gPiAgICAgIGxpYnZpZHN0YWIKPiA+ICAgICAgbGlieDI2NAo+ID4gQEAgLTM1 MjAsNiArMzUyNCw4IEBAIGR0c19kZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiA+ICBkdHNo ZF9kZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiA+ICBkdl9kZW11eGVyX3NlbGVjdD0iZHZw cm9maWxlIgo+ID4gIGR2X211eGVyX3NlbGVjdD0iZHZwcm9maWxlIgo+ID4gK2R2ZHZpZGVvX2Rl bXV4ZXJfc2VsZWN0PSJtcGVncHNfZGVtdXhlciIKPiA+ICtkdmR2aWRlb19kZW11eGVyX2RlcHM9 ImxpYmR2ZG5hdiBsaWJkdmRyZWFkIgo+ID4gIGR4YV9kZW11eGVyX3NlbGVjdD0icmlmZmRlYyIK PiA+ICBlYWMzX2RlbXV4ZXJfc2VsZWN0PSJhYzNfcGFyc2VyIgo+ID4gIGV2Y19kZW11eGVyX3Nl bGVjdD0iZXZjX2ZyYW1lX21lcmdlX2JzZiBldmNfcGFyc2VyIgo+ID4gQEAgLTY3NjEsNiArNjc2 Nyw4IEBAIGVuYWJsZWQgbGliZGF2MWQgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnCj4g bGliZGF2MWQgImRhdjFkID49IDAuNS4wIiAiZGF2MWQKPiA+ICBlbmFibGVkIGxpYmRhdnMyICAg ICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJkYXZzMiAiZGF2czIgPj0KPiAxLjYuMCIg ZGF2czIuaCBkYXZzMl9kZWNvZGVyX29wZW4KPiA+ICBlbmFibGVkIGxpYmRjMTM5NCAgICAgICAg ICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJkYzEzOTQgbGliZGMxMzk0LTIKPiBkYzEzOTQvZGMx Mzk0LmggZGMxMzk0X25ldwo+ID4gIGVuYWJsZWQgbGliZHJtICAgICAgICAgICAgJiYgY2hlY2tf cGtnX2NvbmZpZyBsaWJkcm0gbGliZHJtIHhmODZkcm0uaAo+IGRybUdldFZlcnNpb24KPiA+ICtl bmFibGVkIGxpYmR2ZG5hdiAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJkdmRuYXYg ImR2ZG5hdiA+PQo+IDYuMS4xIiBkdmRuYXYvZHZkbmF2LmggZHZkbmF2X29wZW4yCj4gPiArZW5h YmxlZCBsaWJkdmRyZWFkICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZHZkcmVhZCAi ZHZkcmVhZCA+PQo+IDYuMS4yIiBkdmRyZWFkL2R2ZF9yZWFkZXIuaCBEVkRPcGVuMiAtbGR2ZHJl YWQKPiA+ICBlbmFibGVkIGxpYmZka19hYWMgICAgICAgICYmIHsgY2hlY2tfcGtnX2NvbmZpZyBs aWJmZGtfYWFjIGZkay1hYWMKPiAiZmRrLWFhYy9hYWNlbmNfbGliLmgiIGFhY0VuY09wZW4gfHwK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXF1aXJlIGxpYmZka19hYWMK PiBmZGstYWFjL2FhY2VuY19saWIuaCBhYWNFbmNPcGVuIC1sZmRrLWFhYyAmJgo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gInVzaW5nIGxpYmZkayB3aXRob3V0Cj4g cGtnLWNvbmZpZyI7IH0gfQo+ID4gZGlmZiAtLWdpdCBhL2RvYy9kZW11eGVycy50ZXhpIGIvZG9j L2RlbXV4ZXJzLnRleGkKPiA+IGluZGV4IGU0YzViNTYwYTYuLmFkMDkwNmY2ZWMgMTAwNjQ0Cj4g PiAtLS0gYS9kb2MvZGVtdXhlcnMudGV4aQo+ID4gKysrIGIvZG9jL2RlbXV4ZXJzLnRleGkKPiA+ IEBAIC0yODUsNiArMjg1LDEzNSBAQCBUaGlzIGRlbXV4ZXIgYWNjZXB0cyB0aGUgZm9sbG93aW5n IG9wdGlvbjoKPiA+Cj4gPiAgQGVuZCB0YWJsZQo+ID4KPiA+ICtAc2VjdGlvbiBkdmR2aWRlbwo+ ID4gKwo+ID4gK0RWRC1WaWRlbyBkZW11eGVyLCBwb3dlcmVkIGJ5IGxpYmR2ZG5hdiBhbmQgbGli ZHZkcmVhZC4KPiA+ICsKPiA+ICtDYW4gZGlyZWN0bHkgaW5nZXN0IERWRCB0aXRsZXMsIHNwZWNp ZmljYWxseSBzZXF1ZW50aWFsIFBHQ3MsCj4gPiAraW50byBhIGNvbnZlcnNpb24gcGlwZWxpbmUu IE1lbnVzIGFuZCBzZWVraW5nIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMKPiB0aW1lLgo+ID4g Kwo+ID4gK0Jsb2NrIGRldmljZXMgKERWRCBkcml2ZXMpLCBJU08gZmlsZXMsIGFuZCBkaXJlY3Rv cnkgc3RydWN0dXJlcyBhcmUKPiBhY2NlcHRlZC4KPiA+ICtBY3RpdmF0ZSB3aXRoIEBjb2Rley1m IGR2ZHZpZGVvfSBpbiBmcm9udCBvZiBvbmUgb2YgdGhlc2UgaW5wdXRzLgo+ID4gKwo+ID4gK1Vu ZGVybHlpbmcgcGxheWJhY2sgaXMgZnVsbHkgaGFuZGxlZCBieSBsaWJkdmRuYXYsIGFuZCBzdHJ1 Y3R1cmUKPiBwYXJzaW5nIGJ5IGxpYmR2ZHJlYWQuCj4KPiA+ICtmZm1wZWcgbXVzdCBiZSBidWls dCB3aXRoIEdQTCBsaWJyYXJ5IHN1cHBvcnQgYXZhaWxhYmxlIGFzIHdlbGwgYXMgdGhlCj4gc3dp dGNoZXMKPiA+ICtAY29kZXstLWVuYWJsZS1saWJkdmRuYXZ9IGFuZCBAY29kZXstLWVuYWJsZS1s aWJkdmRyZWFkfS4KPgo+IEZGbXBlZyBtdXN0IGJlIGJ1aWx0IHdpdGggR1BMIGxpYnJhcnkgc3Vw cG9ydCBhdmFpbGFibGUgYXMgd2VsbCBhcyB0aGUKPiBjb25maWd1cmUgc3dpdGNoZXMgQGNvZGV7 LS1lbmFibGUtbGliZHZkbmF2fSBhbmQKPiBAY29kZXstLWVuYWJsZS1saWJkdmRyZWFkfS4KPgo+ ID4gKwo+ID4gK1lvdSB3aWxsIG5lZWQgdG8gcHJvdmlkZSBlaXRoZXIgdGhlIGRlc2lyZWQgInRp dGxlIG51bWJlciIgb3IgZXhhY3QKPiBQR0MvUEcgY29vcmRpbmF0ZXMuCj4KPiA+ICtNYW55IG9w ZW4tc291cmNlIERWRCBwbGF5ZXJzIGFuZCB0b29scyBjYW4gYWlkIGluIHByb3ZpZGluZyB0aGlz Cj4gaW5mb3JtYXRpb24uCj4KPiB1bnJlbGF0ZWQsIGJ1dCBpdCBtaWdodCBiZSB1c2VmdWwgdG8g aGF2ZSBhIC1saXN0LXRpdGxlcyBvcHRpb24gdG8KPiBzaG93IHRoaXMgaW5mb3JtYXRpb24KPgo+ ID4gK0lmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW11eGVyIHdpbGwgZGVmYXVsdCB0byB0aXRsZSAx IHdoaWNoIHdvcmtzIGZvcgo+IG1hbnkgZGlzY3MuCj4gPiArSG93ZXZlciwgZHVlIHRvIHRoZSBm bGV4aWJpbGl0eSBvZiBEVkQtVmlkZW8sIGl0IGlzIHJlY29tbWVuZGVkIHRvCj4gY2hlY2sgbWFu dWFsbHkuCj4gPiArVGhlcmUgYXJlIG1hbnkgZGlzY3MgdGhhdCBhcmUgYXV0aG9yZWQgc3RyYW5n ZWx5IG9yIHdpdGggaW52YWxpZAo+IGhlYWRlcnMuCj4gPiArCj4gPiArSWYgdGhlIGlucHV0IGlz IGEgcmVhbCBEVkQgZHJpdmUsIHBsZWFzZSBub3RlIHRoYXQgdGhlcmUgYXJlIHNvbWUKPiBkcml2 ZXMgd2hpY2ggbWF5Cj4gPiArc2lsZW50bHkgZmFpbCBvbiByZWFkaW5nIGJhZCBzZWN0b3JzIGZy b20gdGhlIGRpc2MsIHJldHVybmluZyByYW5kb20KPiBiaXRzIGluc3RlYWQKPiA+ICt3aGljaCBp cyBlZmZlY3RpdmVseSBjb3JydXB0IGRhdGEuIFRoaXMgaXMgZXNwZWNpYWxseSBwcm9taW5lbnQg b24KPiBhZ2luZyBvciByb3R0aW5nIGRpc2NzLgo+ID4gK0Egc2Vjb25kIHBhc3MgYW5kIGludGVn cml0eSBjaGVja3Mgd291bGQgYmUgbmVlZGVkIHRvIGRldGVjdCB0aGUKPiBjb3JydXB0aW9uLgo+ Cj4gPiArVGhpcyBpcyBub3QgYW4gZmZtcGVnIGlzc3VlLgo+Cj4gbml0OiBGRm1wZWcgKGZmbXBl ZyBpcyB1c3VhbGx5IGEgcmVmZXJlbmNlIHRvIHRoZSBDTEkgY29tbWFuZCwgd2hpbGUKPiBGRm1w ZWcgcmVmZXJzIHRvIHRoZSBwcm9qZWN0cyBhbmQgc2V0IG9mIGFsbCBsaWJyYXJpZXMvdG9vbHMp Cj4KPiA+ICsKPiA+ICtAc3Vic2VjdGlvbiBCYWNrZ3JvdW5kCj4gPiArCj4gPiArRFZELVZpZGVv IGlzIG5vdCBhIGRpcmVjdGx5IGFjY2Vzc2libGUsIGxpbmVhciBjb250YWluZXIgZm9ybWF0IGlu IHRoZQo+ID4gK3RyYWRpdGlvbmFsIHNlbnNlLiBJbnN0ZWFkLCBpdCBhbGxvd3MgZm9yIGNvbXBs ZXggYW5kIHByb2dyYW1tYXRpYwo+IHBsYXliYWNrIG9mCj4gPiArY2FyZWZ1bGx5IG11eGVkIE1Q RUctUFMgc3RyZWFtcyB0aGF0IGFyZSBzdG9yZWQgaW4gaGVhZGVybGVzcyBWT0IgZmlsZXMuCj4g PiArVG8gdGhlIGVuZC11c2VyLCB0aGVzZSBzdHJlYW1zIGFyZSBrbm93biBzaW1wbHkgYXMgInRp dGxlcyIsIGJ1dCB0aGUKPiBhY3R1YWwKPiA+ICtsb2dpY2FsIHBsYXliYWNrIHNlcXVlbmNlIGlz IGRlZmluZWQgYnkgb25lIG9yIG1vcmUgIlBHQ3MiLCBvciBQcm9ncmFtCj4gR3JvdXAgQ2hhaW5z LAo+ID4gK3dpdGhpbiB0aGUgdGl0bGUuIFRoZSBQR0MgaXMgaW4gdHVybiBjb21wcmlzZWQgb2Yg bXVsdGlwbGUgIlBHcyIsIG9yCj4gUHJvZ3JhbXMiLAo+ID4gK3doaWNoIGFyZSB0aGUgYWN0dWFs IHZpZGVvIHNlZ21lbnRzIHdoaWNoLCBmb3IgYSB0eXBpY2FsIG1vdmllLCBhcmUKPiBzZXF1ZW50 aWFsbHkKPiA+ICtvcmRlcmVkLiBUaGUgUEdDIHN0cnVjdHVyZSwgYWxvbmcgd2l0aCBzdHJlYW0g bGF5b3V0IGFuZCBtZXRhZGF0YSwgYXJlCj4gc3RvcmVkIGluCj4gPiArSUZPIGZpbGVzIHRoYXQg bmVlZCB0byBiZSBwYXJzZWQuIFBHQ3MgY2FuIGJlIHRob3VnaHQgb2YgYXMgcGxheWxpc3RzCj4g aW4gZWFzaWVyIHRlcm1zLgo+ID4gKwo+ID4gK0FuIGFjdHVhbCBEVkQgcGxheWVyIHJlbGllcyBv biB1c2VyIEdVSSBpbnRlcmFjdGlvbiB2aWEgbWVudXMgYW5kIGFuCj4gaW50ZXJuYWwgVk0KPiA+ ICt0byBkcml2ZSB0aGUgZGlyZWN0aW9uIG9mIGRlbXV4aW5nLiBHZW5lcmFsbHksIHRoZSB1c2Vy IHdvdWxkIGVpdGhlcgo+IG5hdmlnYXRlICh2aWEgbWVudXMpCj4gPiArb3IgYXV0b21hdGljYWxs eSBiZSByZWRpcmVjdGVkIHRvIHRoZSBQR0Mgb2YgdGhlaXIgY2hvaWNlLiBEdXJpbmcgdGhpcwo+ IHByb2Nlc3MgYW5kCj4gPiArdGhlIHN1YnNlcXVlbnQgcGxheWJhY2ssIHRoZSBEVkQgcGxheWVy J3MgaW50ZXJuYWwgVk0gYWxzbyBtYWludGFpbnMgYQo+IHN0YXRlIGFuZAo+ID4gK2V4ZWN1dGVz IGluc3RydWN0aW9ucyB0aGF0IGNhbiBjcmVhdGUganVtcHMgdG8gZGlmZmVyZW50IHNlY3RvcnMg ZHVyaW5nCj4gcGxheWJhY2suCj4gPiArVGhpcyBpcyB3aHkgbGliZHZkbmF2IGlzIGludm9sdmVk LCBhcyBhIGxpbmVhciByZWFkIG9mIHRoZSBNUEVHLVBTCj4gYmxvYnMgb24gdGhlCj4gPiArZGlz YyAoVk9CcykgaXMgbm90IGVub3VnaCB0byBwcm9kdWNlIHRoZSByaWdodCBzZXF1ZW5jZSBpbiBt YW55IGNhc2VzLgo+ID4gKwo+ID4gK1RoZXJlIGFyZSBtYW55IG90aGVyIERWRCBzdHJ1Y3R1cmVz IChhIGxvbmcgc3ViamVjdCkgdGhhdCB3aWxsIG5vdCBiZQo+IGRpc2N1c3NlZCBoZXJlLgo+ID4g K05BViBwYWNrZXRzLCBpbiBwYXJ0aWN1bGFyLCBhcmUgaGFuZGxlZCBieSB0aGlzIGRlbXV4ZXIg dG8gYnVpbGQKPiBhY2N1cmF0ZSB0aW1pbmcKPiA+ICtidXQgbm90IGVtaXR0ZWQgYXMgYSBzdHJl YW0uIEZvciBhIGdvb2QgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nLCByZWZlcgo+IHRvOgo+ID4g K0B1cmx7Cj4gaHR0cHM6Ly9jb2RlLnZpZGVvbGFuLm9yZy92aWRlb2xhbi9saWJkdmRuYXYvLS9i bG9iL21hc3Rlci9kb2MvZHZkX3N0cnVjdHVyZXMKPiB9Cj4gPiArCj4gPiArQHN1YnNlY3Rpb24g T3B0aW9ucwo+ID4gKwo+ID4gK1RoaXMgZGVtdXhlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0 aW9uczoKPiA+ICsKPiA+ICtAdGFibGUgQG9wdGlvbgo+ID4gKwo+ID4gK0BpdGVtIHRpdGxlCj4K PiBoZXJlIGFuZCBiZWxvdzogeW91IG1pZ2h0IHVzZSBAdmFye1RZUEV9IHRvIGRlbm90ZSB0aGUg YXJndW1lbnQvdHlwZSBvZiB0aGUKPiBvcHRpb24KPgo+ID4gK1RoZSB0aXRsZSBudW1iZXIgdG8g cGxheS4gTXVzdCBiZSBzZXQgaWYgQG9wdGlvbntwZ2N9IGFuZCBAb3B0aW9ue3BnfQo+IGFyZSBu b3Qgc2V0Lgo+ID4gK0RlZmF1bHQgaXMgMCAoYXV0byksIHdoaWNoIGN1cnJlbnRseSBvbmx5IHNl bGVjdHMgdGhlIGZpcnN0IGF2YWlsYWJsZQo+IHRpdGxlICh0aXRsZSAxKQo+ID4gK2FuZCBub3Rp ZmllcyB0aGUgdXNlciBhYm91dCB0aGUgaW1wbGljYXRpb25zLgo+ID4gKwo+ID4gK0BpdGVtIGNo YXB0ZXJfc3RhcnQKPiA+ICtUaGUgY2hhcHRlciwgb3IgUFRUIChwYXJ0LW9mLXRpdGxlKSwgbnVt YmVyIHRvIHN0YXJ0IGF0LiBEZWZhdWx0IGlzIDEuCj4gPiArCj4gPiArQGl0ZW0gY2hhcHRlcl9l bmQKPiA+ICtUaGUgY2hhcHRlciwgb3IgUFRUIChwYXJ0LW9mLXRpdGxlKSwgbnVtYmVyIHRvIGVu ZCBhdC4gRGVmYXVsdCBpcyAwLAo+ID4gK3doaWNoIGlzIGEgc3BlY2lhbCB2YWx1ZSB0byBzaWdu YWwgZW5kIGF0IHRoZSBsYXN0IHBvc3NpYmxlIGNoYXB0ZXIuCj4gPiArCj4gPiArQGl0ZW0gYW5n bGUKPiA+ICtUaGUgdmlkZW8gYW5nbGUgbnVtYmVyLCByZWZlcnJpbmcgdG8gd2hhdCBpcyBlc3Nl bnRpYWxseSBhbiBhZGRpdGlvbmFsCj4gPiArdmlkZW8gc3RyZWFtIHRoYXQgaXMgY29tcG9zZWQg ZnJvbSBhbHRlcm5hdGUgZnJhbWVzIGludGVybGVhdmVkIGluIHRoZQo+IFZPQnMuCj4gPiArRGVm YXVsdCBpcyAxLgo+ID4gKwo+ID4gK0BpdGVtIHJlZ2lvbgo+ID4gK1RoZSByZWdpb24gY29kZSB0 byB1c2UgZm9yIHBsYXliYWNrLiBTb21lIGRpc2NzIG1heSB1c2UgdGhpcyB0byBkZWZhdWx0Cj4g cGxheWJhY2sKPiA+ICthdCBhIHBhcnRpY3VsYXIgYW5nbGUgaW4gZGlmZmVyZW50IHJlZ2lvbnMu IFRoaXMgb3B0aW9uIHdpbGwgbm90IGFmZmVjdAo+IHRoZSByZWdpb24gY29kZQo+ID4gK29mIGEg cmVhbCBEVkQgZHJpdmUsIGlmIHVzZWQgYXMgYW4gaW5wdXQuIERlZmF1bHQgaXMgMCwgIndvcmxk Ii4KPiA+ICsKPiA+ICtAaXRlbSBwZ2MKPiA+ICtUaGUgZW50cnkgUEdDIHRvIHN0YXJ0IHBsYXli YWNrLCBpbiBjb25qdW5jdGlvbiB3aXRoIEBvcHRpb257cGd9Lgo+ID4gK0FsdGVybmF0aXZlIHRv IHNldHRpbmcgQG9wdGlvbnt0aXRsZX0uCj4KPiA+ICtDaGFwdGVyIG1hcmtlcnMgbm90IHN1cHBv cnRlZCBhdCB0aGlzIHRpbWUuCj4KPiBuaXQ6IGFyZSBub3Qgc3VwcG9ydGVkIC4uLgo+Cj4gPiAr RGVmYXVsdCBpcyAwLCBhdXRvbWF0aWNhbGx5IHJlc29sdmUgZnJvbSB2YWx1ZSBvZiBAb3B0aW9u e3RpdGxlfS4KPiA+ICsKPiA+ICtAaXRlbSBwZwo+ID4gK1RoZSBlbnRyeSBQRyB0byBzdGFydCBw bGF5YmFjaywgaW4gY29uanVuY3Rpb24gd2l0aCBAb3B0aW9ue3BnY30uCj4gPiArQWx0ZXJuYXRp dmUgdG8gc2V0dGluZyBAb3B0aW9ue3RpdGxlfS4KPiA+ICtDaGFwdGVyIG1hcmtlcnMgbm90IHN1 cHBvcnRlZCBhdCB0aGlzIHRpbWUuCj4KPiBhcmUgbm90Cj4KPiA+ICtEZWZhdWx0IGlzIDAsIGF1 dG9tYXRpY2FsbHkgcmVzb2x2ZSBmcm9tIHZhbHVlIG9mIEBvcHRpb257dGl0bGV9Lgo+ID4gKwo+ ID4gK0BpdGVtIHByZWluZGV4Cj4gPiArRW5hYmxlIHRoaXMgdG8gaGF2ZSBhY2N1cmF0ZSBjaGFw dGVyIChQVFQpIG1hcmtlcnMgYW5kIGR1cmF0aW9uCj4gbWVhc3VyZW1lbnQsCj4gPiArd2hpY2gg cmVxdWlyZXMgYSBzbG93IHNlY29uZCBwYXNzIHJlYWQgaW4gb3JkZXIgdG8gaW5kZXggdGhlIGNo YXB0ZXIKPgo+ID4gK3RpbWVzdGFtcHMgZnJvbSBOQVYgcGFja2V0cy4gVGhpcyBpcyBub24taWRl YWwgZXh0cmEgd29yayBmb3IgcGh5c2ljYWwKPiBEVkQgZHJpdmVzLgo+Cj4gbm90ZTogaWYgdGhp cyBpcyBub24taWRlbGEgZm9yIHBoeXNpY2FsIERWRCBkcml2ZXJzLCB3aGF0J3MgdGhlCj4gcmVj b21tZW5kZWQgdXNlIGNhc2U/Cj4KPiA+ICtOb3QgY29tcGF0aWJsZSB3aXRoIEBvcHRpb257cGdj fSBhbmQgQG9wdGlvbntwZ30uCj4gPiArRGVmYXVsdCBpcyAwLCBmYWxzZS4KPiA+ICsKPiA+ICtA aXRlbSB0cmltCj4gPiArU2tpcCBwYWRkaW5nIGNlbGxzIChpLmUuIGNlbGxzIHNob3J0ZXIgdGhh biAxIHNlY29uZCkgZnJvbSB0aGUKPiBiZWdpbm5pbmcuCj4gPiArVGhlcmUgZXhpc3QgbWFueSBk aXNjcyB3aXRoIGZpbGxlciBzZWdtZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBQR0MsCj4g PiArb2Z0ZW4gd2l0aCBqdW5rIGRhdGEgaW50ZW5kZWQgZm9yIGNvbnRyb2xsaW5nIGEgcmVhbCBE VkQgcGxheWVyJ3MKPiA+ICtidWZmZXJpbmcgc3BlZWQgYW5kIHdpdGggbm8gb3RoZXIgbWF0ZXJp YWwgZGF0YSB2YWx1ZS4KPiA+ICtEZWZhdWx0IGlzIDEsIHRydWUuCj4gPiArCj4gPiArQGVuZCB0 YWJsZQo+ID4gKwo+ID4gK0BzdWJzZWN0aW9uIEV4YW1wbGVzCj4gPiArCj4gPiArQGl0ZW1pemUK PiA+ICtAaXRlbQo+ID4gK09wZW4gdGl0bGUgMyBmcm9tIGEgZ2l2ZW4gRFZEIHN0cnVjdHVyZToK PiA+ICtAZXhhbXBsZQo+ID4gK2ZmbXBlZyAtZiBkdmR2aWRlbyAtdGl0bGUgMyAtaSA8cGF0aCB0 byBEVkQ+IC4uLgo+ID4gK0BlbmQgZXhhbXBsZQo+ID4gKwo+ID4gK0BpdGVtCj4gPiArT3BlbiBj aGFwdGVycyAzLTYgZnJvbSB0aXRsZSAxIGZyb20gYSBnaXZlbiBEVkQgc3RydWN0dXJlOgo+ID4g K0BleGFtcGxlCj4gPiArZmZtcGVnIC1mIGR2ZHZpZGVvIC1jaGFwdGVyX3N0YXJ0IDMgLWNoYXB0 ZXJfZW5kIDYgLXRpdGxlIDEgLWkgPHBhdGggdG8KPiBEVkQ+IC4uLgo+ID4gK0BlbmQgZXhhbXBs ZQo+ID4gKwo+ID4gK0BpdGVtCj4gPiArT3BlbiBvbmx5IGNoYXB0ZXIgNSBmcm9tIHRpdGxlIDEg ZnJvbSBhIGdpdmVuIERWRCBzdHJ1Y3R1cmU6Cj4gPiArQGV4YW1wbGUKPiA+ICtmZm1wZWcgLWYg ZHZkdmlkZW8gLWNoYXB0ZXJfc3RhcnQgNSAtY2hhcHRlcl9lbmQgNSAtdGl0bGUgMSAtaSA8cGF0 aCB0bwo+IERWRD4gLi4uCj4gPiArQGVuZCBleGFtcGxlCj4gPiArQGVuZCBpdGVtaXplCj4gPiAr Cj4gPiAgQHNlY3Rpb24gZWEKPiA+Cj4gPiAgRWxlY3Ryb25pYyBBcnRzIE11bHRpbWVkaWEgZm9y bWF0IGRlbXV4ZXIuCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9saWJh dmZvcm1hdC9NYWtlZmlsZQo+ID4gaW5kZXggMDViOWI4YTExNS4uZGY2OTczNDg3NyAxMDA2NDQK PiA+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiArKysgYi9saWJhdmZvcm1hdC9NYWtl ZmlsZQo+ID4gQEAgLTE5Miw2ICsxOTIsNyBAQCBPQkpTLSQoQ09ORklHX0RUU19NVVhFUikgICAg ICAgICAgICAgICAgICs9IHJhd2VuYy5vCj4gPiAgT0JKUy0kKENPTkZJR19EVl9NVVhFUikgICAg ICAgICAgICAgICAgICArPSBkdmVuYy5vCj4gPiAgT0JKUy0kKENPTkZJR19EVkJTVUJfREVNVVhF UikgICAgICAgICAgICArPSBkdmJzdWIubyByYXdkZWMubwo+ID4gIE9CSlMtJChDT05GSUdfRFZC VFhUX0RFTVVYRVIpICAgICAgICAgICAgKz0gZHZidHh0Lm8gcmF3ZGVjLm8KPiA+ICtPQkpTLSQo Q09ORklHX0RWRFZJREVPX0RFTVVYRVIpICAgICAgICAgICs9IGR2ZHZpZGVvZGVjLm8KPiA+ICBP QkpTLSQoQ09ORklHX0RYQV9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGR4YS5vCj4gPiAgT0JK Uy0kKENPTkZJR19FQV9DREFUQV9ERU1VWEVSKSAgICAgICAgICArPSBlYWNkYXRhLm8KPiA+ICBP QkpTLSQoQ09ORklHX0VBX0RFTVVYRVIpICAgICAgICAgICAgICAgICs9IGVsZWN0cm9uaWNhcnRz Lm8KPiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1h dC9hbGxmb3JtYXRzLmMKPiA+IGluZGV4IGIwNGI0M2NhYjMuLjNlOTA1YzIzZjggMTAwNjQ0Cj4g PiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiA+ICsrKyBiL2xpYmF2Zm9ybWF0L2Fs bGZvcm1hdHMuYwo+ID4gQEAgLTE1MCw2ICsxNTAsNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1dEZv cm1hdCAgZmZfZHZfZGVtdXhlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZf ZHZfbXV4ZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R2YnN1Yl9kZW11 eGVyOwo+ID4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9kdmJ0eHRfZGVtdXhlcjsK PiA+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZkdmlkZW9fZGVtdXhlcjsKPiA+ ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHhhX2RlbXV4ZXI7Cj4gPiAgZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2RlbXV4ZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEFW SW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZm b3JtYXQvZHZkdmlkZW9kZWMuYyBiL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMKPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4yZTM2M2E0YTIyCj4gPiAtLS0g L2Rldi9udWxsCj4gPiArKysgYi9saWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jCj4gPiBAQCAtMCww ICsxLDE0MTAgQEAKPiA+ICsvKgo+ID4gKyAqIERWRC1WaWRlbyBkZW11eGVyLCBwb3dlcmVkIGJ5 IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVhZAo+ID4gKyAqCj4gPiArICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiA+ICsg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KPiA+ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKPiA+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+ID4gKyAqCj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gMDIx MTAtMTMwMSBVU0EKPiA+ICsgKi8KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFNlZSBkb2MvZGVtdXhl cnMudGV4aSBmb3IgYSBoaWdoLWxldmVsIG92ZXJ2aWV3Lgo+ID4gKyAqCj4gPiArICogVGhlIHRh Y3RpY2FsIGFwcHJvYWNoIGlzIGFzIGZvbGxvd3M6Cj4gPiArICogMSkgT3BlbiB0aGUgdm9sdW1l IHdpdGggZHZkcmVhZAo+ID4gKyAqIDIpIEFuYWx5emUgdGhlIHVzZXItcmVxdWVzdGVkIHRpdGxl IGFuZCBQR0MgY29vcmRpbmF0ZXMgaW4gdGhlIElGTwo+IHN0cnVjdHVyZXMKPiA+ICsgKiAzKSBS ZXF1ZXN0IHBsYXliYWNrIGF0IHRoZSBjb29yZGluYXRlcyBhbmQgY2hvc2VuIGFuZ2xlIHdpdGgg ZHZkbmF2Cj4gPiArICogNSkgQmVnaW4gdGhlIHBsYXliYWNrIChyZWFkaW5nIGFuZCBkZW11eGlu Zykgb2YgTVBFRy1QUyBibG9ja3MKPiA+ICsgKiA2KSBFbmQgcGxheWJhY2sgaWYgbmF2aWdhdGlv biBnb2VzIGJhY2t3YXJkcywgdG8gYSBtZW51LCBvciBhCj4gZGlmZmVyZW50IFBHQyBvciBhbmds ZQo+ID4gKyAqIDcpIENsb3NlIHRoZSBkdmRuYXYgVk0sIGFuZCBmcmVlIGR2ZHJlYWQncyBJRk8g c3RydWN0dXJlcwo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkdmRuYXYvZHZkbmF2Lmg+ Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvZHZkX3JlYWRlci5oPgo+ID4gKyNpbmNsdWRlIDxkdmRy ZWFkL2lmb19yZWFkLmg+Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3R5cGVzLmg+Cj4gPiAr I2luY2x1ZGUgPGR2ZHJlYWQvbmF2X3JlYWQuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAibGliYXZj b2RlYy9hdmNvZGVjLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ID4g KyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9p bnRyZWFkd3JpdGUuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ID4gKyNpbmNs dWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9zYW1wbGVmbXQu aCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1 dGlsL3RpbWVzdGFtcC5oIgo+ID4gKwo+ID4gKyNpbmNsdWRlICJhdmZvcm1hdC5oIgo+ID4gKyNp bmNsdWRlICJhdmlvX2ludGVybmFsLmgiCj4gPiArI2luY2x1ZGUgImF2bGFuZ3VhZ2UuaCIKPiA+ ICsjaW5jbHVkZSAiZGVtdXguaCIKPiA+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiA+ICsjaW5j bHVkZSAidXJsLmgiCj4gPiArCj4gPiArI2RlZmluZSBEVkRWSURFT19NQVhfUFNfU0VBUkNIX0JM T0NLUyAgICAgICAgICAgICAgICAgICAxMjgKPiA+ICsjZGVmaW5lIERWRFZJREVPX0JMT0NLX1NJ WkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDgKPiA+ICsjZGVmaW5lIERWRFZJREVP X1RJTUVfQkFTRV9RICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFsKSB7Cj4g MSwgOTAwMDAgfQo+ID4gKyNkZWZpbmUgRFZEVklERU9fUFRTX1dSQVBfQklUUyAgICAgICAgICAg ICAgICAgICAgICAgICAgNjQgLyogVk9CVXMgdXNlCj4gMzIgKFBFUyBhbGxvd3MgMzMpICovCj4g PiArI2RlZmluZSBEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRSAgICAgICAgICAgICAg ICAxMDI0Cj4gPiArCj4gPiArZW51bSBEVkRWaWRlb1N1YnBpY3R1cmVWaWV3cG9ydCB7Cj4gPiAr ICAgIERWRFZJREVPX1NVQlBfVklFV1BPUlRfRlVMTFNDUkVFTiwKPiA+ICsgICAgRFZEVklERU9f U1VCUF9WSUVXUE9SVF9XSURFU0NSRUVOLAo+ID4gKyAgICBEVkRWSURFT19TVUJQX1ZJRVdQT1JU X0xFVFRFUkJPWCwKPiA+ICsgICAgRFZEVklERU9fU1VCUF9WSUVXUE9SVF9QQU5TQ0FOCj4gPiAr fTsKPiA+ICtjb25zdCBjaGFyKiBWSUVXUE9SVF9MQUJFTFNbNF0gPSB7ICJGdWxsc2NyZWVuIiwg IldpZGVzY3JlZW4iLAo+ICJMZXR0ZXJib3giLCAiUGFuIGFuZCBTY2FuIiB9Owo+ID4gKwo+ID4g K3R5cGVkZWYgc3RydWN0IERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSB7Cj4gPiArICAgIGlu dCBzdGFydGNvZGU7Cj4gPiArICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkOwo+ID4gKyAgICBp bnQgd2lkdGg7Cj4gPiArICAgIGludCBoZWlnaHQ7Cj4gPiArICAgIEFWUmF0aW9uYWwgZGFyOwo+ ID4gKyAgICBBVlJhdGlvbmFsIGZyYW1lcmF0ZTsKPiA+ICsgICAgaW50IGhhc19jYzsKPiA+ICt9 IERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeTsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBE VkRWaWRlb1BHQ0F1ZGlvU3RyZWFtRW50cnkgewo+ID4gKyAgICBpbnQgc3RhcnRjb2RlOwo+ID4g KyAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZDsKPiA+ICsgICAgaW50IHNhbXBsZV9mbXQ7Cj4g PiArICAgIGludCBzYW1wbGVfcmF0ZTsKPiA+ICsgICAgaW50IGJpdF9kZXB0aDsKPiA+ICsgICAg aW50IG5iX2NoYW5uZWxzOwo+ID4gKyAgICBBVkNoYW5uZWxMYXlvdXQgY2hfbGF5b3V0Owo+ID4g KyAgICBpbnQgZGlzcG9zaXRpb247Cj4gPiArICAgIGNoYXIgKmxhbmdfaXNvOwo+ID4gK30gRFZE VmlkZW9QR0NBdWRpb1N0cmVhbUVudHJ5Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IERWRFZp ZGVvUEdDU3VidGl0bGVTdHJlYW1FbnRyeSB7Cj4gPiArICAgIGludCBzdGFydGNvZGU7Cj4gPiAr ICAgIGludCBkaXNwb3NpdGlvbjsKPiA+ICsgICAgY2hhciAqbGFuZ19pc287Cj4gPiArICAgIGVu dW0gRFZEVmlkZW9TdWJwaWN0dXJlVmlld3BvcnQgdmlld3BvcnQ7Cj4gPiArfSBEVkRWaWRlb1BH Q1N1YnRpdGxlU3RyZWFtRW50cnk7Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9Q bGF5YmFja1N0YXRlIHsKPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxu OyAgICAgICAgICAgICAgLyogSUQgb2YgdGhlIGFjdGl2ZQo+IGNlbGwgKi8KPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X3BnbjsgICAgICAgICAgLyogSUQgb2YgdGhl IFBHIHdlCj4gYXJlIHN0YXJ0aW5nIGluICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICBpbl9wZ2M7ICAgICAgICAgICAgIC8qIGlmIG91ciBuYXZpZ2F0b3IKPiBpcyBpbiB0 aGUgUEdDICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wczsgICAg ICAgICAgICAgIC8qIGlmIG91ciBuYXZpZ2F0b3IKPiBpcyBpbiB0aGUgcHJvZ3JhbSBzdHJlYW0g Ki8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Z0czsgICAgICAgICAg ICAgLyogaWYgb3VyIG5hdmlnYXRvcgo+IGlzIGluIHRoZSBWVFMgKi8KPiA+ICsgICAgaW50NjRf dCAgICAgICAgICAgICAgICAgICAgIG5hdl9wdHM7ICAgICAgICAgICAgLyogUFRTIGFjY29yZGlu ZyB0bwo+IElGTywgbm90IGZyYW1lLWFjY3VyYXRlICovCj4gPiArICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICBuYl92b2J1c19wbGF5ZWQ7ICAgIC8qIG51bWJlciBvZiBWT0JVcwo+IHBs YXllZCBiYWNrIHNvIGZhciAqLwo+ID4gKyAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAgICAg cGdjX2R1cmF0aW9uX2VzdDsgICAvKiBlc3RpbWF0ZWQKPiBkdXJhdGlvbiBhcyByZXBvcnRlZCBi eSBJRk8gKi8KPiA+ICsgICAgdWludDY0X3QgICAgICAgICAgICAgICAgICAgIHBnY19lbGFwc2Vk OyAgICAgICAgLyogdGhlIGVsYXBzZWQgdGltZQo+IG9mIHRoZSBQR0MsIGNlbGwtcmVsYXRpdmUg Ki8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBnY19uYl9wZ19lc3Q7ICAg ICAgLyogbnVtYmVyIG9mIFBHcyBhcwo+IHJlcG9ydGVkIGJ5IElGT3MgKi8KPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIHBnY247ICAgICAgICAgICAgICAgLyogSUQgb2YgdGhl IFBHQyB3ZQo+IGFyZSBwbGF5aW5nICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAg ICAgICBwZ247ICAgICAgICAgICAgICAgIC8qIElEIG9mIHRoZSBQRyB3ZQo+IGFyZSBpbiBub3cg Ki8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHB0dDsgICAgICAgICAgICAg ICAgLyogSUQgb2YgdGhlCj4gY2hhcHRlciB3ZSBhcmUgaW4gbm93ICovCj4gPiArICAgIGludDY0 X3QgICAgICAgICAgICAgICAgICAgICB0c19vZmZzZXQ7ICAgICAgICAgIC8qIFBUUwo+IGRpc2Nv bnRpbnVpdHkgb2Zmc2V0IChleC4gVk9CIGNoYW5nZSkgKi8KPiA+ICsgICAgdWludDMyX3QgICAg ICAgICAgICAgICAgICAgIHZvYnVfZHVyYXRpb247ICAgICAgLyogZHVyYXRpb24gb2YgdGhlCj4g Y3VycmVudCBWT0JVICovCj4gPiArICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICB2b2J1 X2VfcHRtOyAgICAgICAgIC8qIGVuZCBQVFMgb2YgdGhlCj4gY3VycmVudCBWT0JVICovCj4gPiAr ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICB2dHNuOyAgICAgICAgICAgICAgIC8qIElE IG9mIHRoZSBhY3RpdmUKPiBWVFMgKHZpZGVvIHRpdGxlIHNldCkgKi8KPiA+ICsgICAgdWludDY0 X3QgICAgICAgICAgICAgICAgICAgICpwZ2NfcGdfdGltZXNfZXN0OyAgLyogUEcgc3RhcnQgdGlt ZXMKPiBhcyByZXBvcnRlZCBieSBJRk8gKi8KPiA+ICsgICAgcGdjX3QgICAgICAgICAgICAgICAg ICAgICAgICpwZ2M7ICAgICAgICAgICAgICAgLyogaGFuZGxlIHRvIHRoZQo+IGFjdGl2ZSBQR0Mg Ki8KPiA+ICsgICAgZHZkbmF2X3QgICAgICAgICAgICAgICAgICAgICpkdmRuYXY7ICAgICAgICAg ICAgLyogaGFuZGxlIHRvCj4gbGliZHZkbmF2ICovCj4gPiArfSBEVkRWaWRlb1BsYXliYWNrU3Rh dGU7Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9EZW11eENvbnRleHQgewo+ID4g KyAgICBjb25zdCBBVkNsYXNzICAgICAgICAgICAgICAgKmNsYXNzOwo+ID4gKwo+ID4gKyAgICAv KiBvcHRpb25zICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGl0 bGU7ICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgdGl0bGUgbnVtYmVyICgxLWluZGV4 ZWQpICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY2hhcHRlcl9z dGFydDsgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQgZW50cnkgUFRUICgxLWluZGV4ZWQpICovCj4g PiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY2hhcHRlcl9lbmQ7ICAgIC8q IHRoZQo+IHVzZXItcHJvdmlkZWQgZXhpdCBQVFQgKDAgZm9yIGxhc3QpICovCj4gPiArICAgIGlu dCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcGdjOyAgICAgICAgICAgIC8qIHRoZQo+IHVz ZXItcHJvdmlkZWQgUEdDIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgb3B0X3BnOyAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3Zp ZGVkIFBHIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgb3B0X2FuZ2xlOyAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIGFuZ2xl IG51bWJlciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgb3B0X3JlZ2lvbjsgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIHJlZ2lvbiBkaWdp dCAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ByZWluZGV4OyAg ICAgICAvKiBwcmUtaW5kZXhpbmcKPiBtb2RlICgyLXBhc3MgcmVhZCkgKi8KPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF90cmltOyAgICAgICAgICAgLyogdHJpbSBwYWRk aW5nCj4gY2VsbHMgYXQgYmVnaW5uaW5nIGFuZCBlbmQgKi8KPiA+ICsKPiA+ICsgICAgLyogc3Vi ZGVtdXggKi8KPiA+ICsgICAgY29uc3QgQVZJbnB1dEZvcm1hdCAgICAgICAgICptcGVnX2ZtdDsg ICAgICAgICAgLyogaW5uZXIgTVBFRy1QUwo+IChWT0IpIGRlbXV4ZXIgKi8KPiA+ICsgICAgQVZG b3JtYXRDb250ZXh0ICAgICAgICAgICAgICptcGVnX2N0eDsgICAgICAgICAgLyogY29udGV4dCBm b3IKPiBpbm5lciBkZW11eGVyICovCj4gPiArICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAg ICAqbXBlZ19idWY7ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgaW5uZXIKPiBkZW11eGVyICovCj4g PiArICAgIEZGSU9Db250ZXh0ICAgICAgICAgICAgICAgICBtcGVnX3BiOyAgICAgICAgICAgIC8q IGJ1ZmZlciBjb250ZXh0Cj4gZm9yIGlubmVyIGRlbXV4ZXIgKi8KPiA+ICsKPiA+ICsgICAgLyog dm9sdW1lICovCj4gPiArICAgIGR2ZF9yZWFkZXJfdCAgICAgICAgICAgICAgICAqZHZkcmVhZDsg ICAgICAgICAgIC8qIGhhbmRsZSB0bwo+IGxpYmR2ZHJlYWQgKi8KPiA+ICsgICAgaWZvX2hhbmRs ZV90ICAgICAgICAgICAgICAgICp2bWdfaWZvOyAgICAgICAgICAgLyogaGFuZGxlIHRvIHRoZQo+ IFZNRyAoVklERU9fVFMuSUZPKSAqLwo+ID4gKyAgICBpZm9faGFuZGxlX3QgICAgICAgICAgICAg ICAgKnZ0c19pZm87ICAgICAgICAgICAvKiBoYW5kbGUgdG8gdGhlCj4gYWN0aXZlIFZUUyAoVlRT X25uX24uSUZPKSAqLwo+ID4gKwo+ID4gKyAgICAvKiBwbGF5YmFjayBjb250cm9sICovCj4gPiAr ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X2VuZDsgICAgICAgICAgIC8qIHNp Z25hbCBFT0YgdG8KPiB0aGUgcGFyZW50IGRlbXV4ZXIgKi8KPiA+ICsgICAgRFZEVmlkZW9QbGF5 YmFja1N0YXRlICAgICAgIHBsYXlfc3RhdGU7ICAgICAgICAgLyogdGhlIGFjdGl2ZQo+IHBsYXli YWNrIHN0YXRlICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3N0 YXJ0ZWQ7ICAgICAgIC8qIHNpZ25hbCB0aGF0Cj4gcGxheWJhY2sgaGFzIHN0YXJ0ZWQgKi8KPiA+ ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlfc2VnX3N0YXJ0ZWQ7ICAgLyog c2lnbmFsIHRoYXQKPiBzZWdtZW50IGhhcyBzdGFydGVkICovCj4gPiArICAgIGludDY0X3QgICAg ICAgICAgICAgICAgICAgICBmaXJzdF9wdHM7ICAgICAgICAgIC8qIHRoZSBzdGFydGluZyBQVFMK PiBvZmZzZXQgb2YgdGhlIFBHQyAqLwo+ID4gKyAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAg ICAgZHVyYXRpb25fcHRtOyAgICAgICAvKiB0b3RhbCBkdXJhdGlvbgo+IGluIERWRCBNUEVHIHRp bWViYXNlICovCj4gPiArfSBEVkRWaWRlb0RlbXV4Q29udGV4dDsKPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBkdmR2aWRlb19saWJkdmRyZWFkX2xvZyh2b2lkICpvcGFxdWUsIGR2ZF9sb2dnZXJfbGV2 ZWxfdAo+IGxldmVsLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm1zZywgdmFfbGlzdCBtc2dfdmEpCj4gPiArewo+ID4gKyAgICBBVkZvcm1hdENv bnRleHQgKnMgPSBvcGFxdWU7Cj4gPiArICAgIGludCBsYXZ1X2xldmVsOwo+ID4gKwo+ID4gKyAg ICBjaGFyIG1zZ19idWZbRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkVdID0gezB9Owo+ ID4gKyAgICB2c25wcmludGYobXNnX2J1ZiwgRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJ WkUsIG1zZywgbXNnX3ZhKTsKPiA+ICsKPiA+ICsgICAgc3dpdGNoIChsZXZlbCkgewo+ID4gKyAg ICAgICAgY2FzZSBEVkRfTE9HR0VSX0xFVkVMX0VSUk9SOgo+ID4gKyAgICAgICAgICAgIGxhdnVf bGV2ZWwgPSBBVl9MT0dfRVJST1I7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAg ICBjYXNlIERWRF9MT0dHRVJfTEVWRUxfV0FSTjoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xldmVs ID0gQVZfTE9HX1dBUk5JTkc7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAv KiBkdmRyZWFkJ3MgaW5mbyBtZXNzYWdlcyBhcmUgcmVsYXRpdmVseSB2ZXJ5IHZlcmJvc2UsIG11 ZmZsZQo+IHRoZW0gYXMgZGVidWcgKi8KPiA+ICsgICAgICAgIGNhc2UgRFZEX0xPR0dFUl9MRVZF TF9JTkZPOgo+ID4gKyAgICAgICAgY2FzZSBEVkRfTE9HR0VSX0xFVkVMX0RFQlVHOgo+ID4gKyAg ICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX0RFQlVH Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGF2X2xvZyhzLCBsYXZ1X2xldmVsLCAibGliZHZk cmVhZDogJXNcbiIsIG1zZ19idWYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdmR2 aWRlb19saWJkdmRuYXZfbG9nKHZvaWQgKm9wYXF1ZSwgZHZkbmF2X2xvZ2dlcl9sZXZlbF90Cj4g bGV2ZWwsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICptc2csIHZhX2xpc3QgbXNnX3ZhKQo+ID4gK3sKPiA+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpz ID0gb3BhcXVlOwo+ID4gKyAgICBpbnQgbGF2dV9sZXZlbDsKPiA+ICsKPiA+ICsgICAgY2hhciBt c2dfYnVmW0RWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFXSA9IHswfTsKPiA+ICsgICAg dnNucHJpbnRmKG1zZ19idWYsIERWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFLCBtc2cs IG1zZ192YSk7Cj4gPiArCj4gPiArICAgIHN3aXRjaCAobGV2ZWwpIHsKPiA+ICsgICAgICAgIGNh c2UgRFZETkFWX0xPR0dFUl9MRVZFTF9FUlJPUjoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xldmVs ID0gQVZfTE9HX0VSUk9SOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2Fz ZSBEVkROQVZfTE9HR0VSX0xFVkVMX1dBUk46Cj4gPiArICAgICAgICAgICAgLyogc29tZSBkaXNj cyBoYXZlIGludmFsaWQgbGFuZ3VhZ2UgY29kZXMgc2V0IGZvciB0aGVpcgo+IG1lbnVzLCBtdWZm bGUgdGhlIG5vaXNlICovCj4gPiArICAgICAgICAgICAgbGF2dV9sZXZlbCA9IGF2X3N0cnN0YXJ0 KG1zZywgIkxhbmd1YWdlIiwgTlVMTCkgPwo+IEFWX0xPR19ERUJVRyA6IEFWX0xPR19XQVJOSU5H Owo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgLyogZHZkbmF2J3MgaW5mbyBt ZXNzYWdlcyBhcmUgcmVsYXRpdmVseSB2ZXJ5IHZlcmJvc2UsIG11ZmZsZQo+IHRoZW0gYXMgZGVi dWcgKi8KPiA+ICsgICAgICAgIGNhc2UgRFZETkFWX0xPR0dFUl9MRVZFTF9JTkZPOgo+ID4gKyAg ICAgICAgY2FzZSBEVkROQVZfTE9HR0VSX0xFVkVMX0RFQlVHOgo+ID4gKyAgICAgICAgZGVmYXVs dDoKPiA+ICsgICAgICAgICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX0RFQlVHOwo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIGF2X2xvZyhzLCBsYXZ1X2xldmVsLCAibGliZHZkbmF2OiAlc1xuIiwg bXNnX2J1Zik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGR2ZHZpZGVvX2lmb19jbG9z ZShBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4 dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaWYgKGMtPnZ0c19pZm8pCj4gPiAr ICAgICAgICBpZm9DbG9zZShjLT52dHNfaWZvKTsKPiA+ICsKPiA+ICsgICAgaWYgKGMtPnZtZ19p Zm8pCj4gPiArICAgICAgICBpZm9DbG9zZShjLT52bWdfaWZvKTsKPiA+ICsKPiA+ICsgICAgaWYg KGMtPmR2ZHJlYWQpCj4gPiArICAgICAgICBEVkRDbG9zZShjLT5kdmRyZWFkKTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19pZm9fb3BlbihBVkZvcm1hdENvbnRleHQgKnMp Cj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsK PiA+ICsKPiA+ICsgICAgZHZkX2xvZ2dlcl9jYiBkdmRyZWFkX2xvZ19jYjsKPiA+ICsgICAgdGl0 bGVfaW5mb190IHRpdGxlX2luZm87Cj4gPiArCj4gPiArICAgIGR2ZHJlYWRfbG9nX2NiID0gKGR2 ZF9sb2dnZXJfY2IpIHsgLnBmX2xvZyA9Cj4gZHZkdmlkZW9fbGliZHZkcmVhZF9sb2cgfTsKPiA+ ICsgICAgYy0+ZHZkcmVhZCA9IERWRE9wZW4yKHMsICZkdmRyZWFkX2xvZ19jYiwgcy0+dXJsKTsK PiA+ICsKPiA+ICsgICAgaWYgKCFjLT5kdmRyZWFkKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIG9wZW4gdGhlIERWRC1WaWRlbwo+IHN0cnVjdHVyZVxu Iik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAg fQo+ID4gKwo+ID4gKyAgICBpZiAoIShjLT52bWdfaWZvID0gaWZvT3BlbihjLT5kdmRyZWFkLCAw KSkpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gb3Bl biB0aGUgVk1HCj4gKFZJREVPX1RTLklGTylcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGMtPm9wdF90 aXRsZSA+IGMtPnZtZ19pZm8tPnR0X3NycHQtPm5yX29mX3NycHRzKSB7Cj4gPiArICAgICAgICBh dl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgJWQgbm90IGZvdW5kXG4iLCBjLT5vcHRfdGl0 bGUpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfU1RSRUFNX05PVF9GT1VORDsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICB0aXRsZV9pbmZvID0gYy0+dm1nX2lmby0+dHRfc3Jw dC0+dGl0bGVbYy0+b3B0X3RpdGxlIC0gMV07Cj4gPiArICAgIGlmIChjLT5vcHRfYW5nbGUgPiB0 aXRsZV9pbmZvLm5yX29mX2FuZ2xlcykgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIkFuZ2xlICVkIG5vdCBmb3VuZFxuIiwgYy0+b3B0X2FuZ2xlKTsKPiA+ICsKPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SX1NUUkVBTV9OT1RfRk9VTkQ7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgaWYgKHRpdGxlX2luZm8ubnJfb2ZfcHR0cyA8IDEpIHsKPiA+ICsgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSAlZCBoYXMgaW52YWxpZCBoZWFkZXJzIChubwo+ IHBhcnRzKVxuIiwgYy0+b3B0X3RpdGxlKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChjLT5vcHRfY2hh cHRlcl9zdGFydCA+IHRpdGxlX2luZm8ubnJfb2ZfcHR0cwo+ID4gKyAgICAgICAgICAgIHx8IChj LT5vcHRfY2hhcHRlcl9lbmQgPiAwICYmIGMtPm9wdF9jaGFwdGVyX2VuZCA+Cj4gdGl0bGVfaW5m by5ucl9vZl9wdHRzKSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkNo YXB0ZXIgKFBUVCkgcmFuZ2UgWyVkLCAlZF0gaXMKPiBpbnZhbGlkXG4iLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYy0+b3B0X2NoYXB0ZXJfc3RhcnQsCj4gYy0+b3B0X2No YXB0ZXJfZW5kKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICghKGMtPnZ0c19pZm8gPSBpZm9PcGVuKGMt PmR2ZHJlYWQsIHRpdGxlX2luZm8udGl0bGVfc2V0X25yKSkpIHsKPiA+ICsgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcHJvY2VzcyB0aGUgVlRTIElGTwo+IHN0cnVj dHVyZVxuIik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAodGl0bGVfaW5mby52dHNfdHRuIDwgMQo+ID4gKyAg ICAgICAgICAgIHx8IHRpdGxlX2luZm8udnRzX3R0biA+IDk5Cj4gPiArICAgICAgICAgICAgfHwg dGl0bGVfaW5mby52dHNfdHRuID4KPiBjLT52dHNfaWZvLT52dHNfcHR0X3NycHQtPm5yX29mX3Ny cHRzCj4gPiArICAgICAgICAgICAgfHwgYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19h dWRpb19zdHJlYW1zID4gOAo+ID4gKyAgICAgICAgICAgIHx8IGMtPnZ0c19pZm8tPnZ0c2lfbWF0 LT5ucl9vZl92dHNfc3VicF9zdHJlYW1zID4gMzIpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfRVJST1IsICJUaXRsZSAlZCBoYXMgaW52YWxpZCBoZWFkZXJzIGluCj4gVlRTXG4iLCBj LT5vcHRfdGl0bGUpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIGR2ZHZpZGVvX3BsYXlfY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzLAo+IERW RFZpZGVvUGxheWJhY2tTdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKyAgICBpZiAoIXN0YXRlLT5k dmRuYXYpCj4gPiArICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgIC8qIG5vdCBhbGxvY2F0 ZWQgYnkgYXZfbWFsbG9jKCkgKi8KPiA+ICsgICAgaWYgKHN0YXRlLT5wZ2NfcGdfdGltZXNfZXN0 KQo+ID4gKyAgICAgICAgZnJlZShzdGF0ZS0+cGdjX3BnX3RpbWVzX2VzdCk7Cj4gPiArCj4KPiA+ ICsgICAgaWYgKGR2ZG5hdl9jbG9zZShzdGF0ZS0+ZHZkbmF2KSA8IDApCj4gPiArICAgICAgICBh dl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNsZWFubHkgY2xvc2UgZHZkbmF2XG4i KTsKPgo+IG5pdDogaW4gY2FzZSB0aGlzIGhhcyBjb25zcXVlbmNlLCB5b3UgbWlnaHQgcHJpbnQg dGhlIGVycm9yIGNvZGUgaW4KPiB0aGUgbG9nCj4KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBkdmR2aWRlb19wbGF5X29wZW4oQVZGb3JtYXRDb250ZXh0ICpzLCBEVkRWaWRlb1BsYXliYWNr U3RhdGUKPiAqc3RhdGUpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9 IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4gPiArICAgIGR2ZG5h dl9sb2dnZXJfY2IgZHZkbmF2X2xvZ19jYjsKPiA+ICsgICAgZHZkbmF2X3N0YXR1c190IGR2ZG5h dl9vcGVuX3N0YXR1czsKPiA+ICsgICAgaW50IGN1cl90aXRsZSwgY3VyX3BnY24sIGN1cl9wZ247 Cj4gPiArICAgIHBnY190ICpwZ2M7Cj4gPiArCj4gPiArICAgIGludDMyX3QgZGlzY19yZWdpb25f bWFzazsKPiA+ICsgICAgaW50MzJfdCBwbGF5ZXJfcmVnaW9uX21hc2s7Cj4gPiArCj4gPiArICAg IGR2ZG5hdl9sb2dfY2IgPSAoZHZkbmF2X2xvZ2dlcl9jYikgeyAucGZfbG9nID0KPiBkdmR2aWRl b19saWJkdmRuYXZfbG9nIH07Cj4gPiArICAgIGR2ZG5hdl9vcGVuX3N0YXR1cyA9IGR2ZG5hdl9v cGVuMigmc3RhdGUtPmR2ZG5hdiwgcywKPiAmZHZkbmF2X2xvZ19jYiwgcy0+dXJsKTsKPiA+ICsK Pgo+ID4gKyAgICBpZiAoIXN0YXRlLT5kdmRuYXYKPiA+ICsgICAgICAgICAgICB8fCBkdmRuYXZf b3Blbl9zdGF0dXMgIT0gRFZETkFWX1NUQVRVU19PSwo+ID4gKyAgICAgICAgICAgIHx8IGR2ZG5h dl9zZXRfcmVhZGFoZWFkX2ZsYWcoc3RhdGUtPmR2ZG5hdiwgMCkgIT0KPiBEVkROQVZfU1RBVFVT X09LCj4gPiArICAgICAgICAgICAgfHwgZHZkbmF2X3NldF9QR0NfcG9zaXRpb25pbmdfZmxhZyhz dGF0ZS0+ZHZkbmF2LCAxKSAhPQo+IERWRE5BVl9TVEFUVVNfT0sKPiA+ICsgICAgICAgICAgICB8 fCBkdmRuYXZfZ2V0X3JlZ2lvbl9tYXNrKHN0YXRlLT5kdmRuYXYsICZkaXNjX3JlZ2lvbl9tYXNr KQo+ICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPgo+IG5pdCs6IGhlcmUgYW5kIGJlbG93LCB3ZWly ZCBzdHlsZQo+Cj4gdXN1YWxseSB8fCBpcyBwdXQgYXQgdGhlIEVPTCBhbmQgY29uZGl0aW9ucyBh cmUgYWxpZ25lZCwgYXMgaW4KPgo+IGlmIChmb28gfHwKPiAgICAgYmFyIHx8Cj4gICAgIGJheikg ewo+ICAgICAuLi4KPiB9Cj4KPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJV bmFibGUgdG8gb3BlbiB0aGUgRFZEIGZvcgo+IHBsYXliYWNrXG4iKTsKPiA+ICsKPiA+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHBs YXllcl9yZWdpb25fbWFzayA9IGMtPm9wdF9yZWdpb24gPiAwID8gKDEgPDwgKGMtPm9wdF9yZWdp b24gLSAxKSkKPiA6IGRpc2NfcmVnaW9uX21hc2s7Cj4gPiArICAgIGlmIChkdmRuYXZfc2V0X3Jl Z2lvbl9tYXNrKHN0YXRlLT5kdmRuYXYsIHBsYXllcl9yZWdpb25fbWFzaykgIT0KPiBEVkROQVZf U1RBVFVTX09LKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxl IHRvIHNldCB0aGUgcGxheWJhY2sgcmVnaW9uIGNvZGUKPiAlZFxuIiwgYy0+b3B0X3JlZ2lvbik7 Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICBpZiAoYy0+b3B0X3BnYyA+IDAgJiYgYy0+b3B0X3BnID4gMCkgewo+ID4g KyAgICAgICAgaWYgKGR2ZG5hdl9wcm9ncmFtX3BsYXkoc3RhdGUtPmR2ZG5hdiwgYy0+b3B0X3Rp dGxlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+b3B0X3BnYywgYy0+ b3B0X3BnKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHN0YXJ0IHBsYXliYWNrIGF0IHRpdGxlCj4gJWQs IFBHQyAlZCwgUEcgJWRcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYy0+b3B0X3RpdGxlLCBjLT5vcHRfcGdjLAo+IGMtPm9wdF9wZyk7Cj4gPiArCj4gPiArICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPiArICAgICAgICB9Cj4gPiArCj4g PiArICAgICAgICBzdGF0ZS0+cGdjbiA9IGMtPm9wdF9wZ2M7Cj4gPiArICAgICAgICBzdGF0ZS0+ ZW50cnlfcGduID0gYy0+b3B0X3BnOwo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgaWYg KGR2ZG5hdl9wYXJ0X3BsYXkoc3RhdGUtPmR2ZG5hdiwgYy0+b3B0X3RpdGxlLAo+IGMtPm9wdF9j aGFwdGVyX3N0YXJ0KSAhPSBEVkROQVZfU1RBVFVTX09LCj4gPiArICAgICAgICAgICAgICAgIHx8 IGR2ZG5hdl9jdXJyZW50X3RpdGxlX3Byb2dyYW0oc3RhdGUtPmR2ZG5hdiwKPiAmY3VyX3RpdGxl LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj dXJfcGdjbiwgJmN1cl9wZ24pICE9Cj4gRFZETkFWX1NUQVRVU19PSykgewo+ID4gKyAgICAgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gc3RhcnQgcGxheWJhY2sgYXQg dGl0bGUKPiAlZCwgY2hhcHRlciAoUFRUKSAlZFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjLT5vcHRfdGl0bGUsIGMtPm9wdF9jaGFwdGVyX3N0YXJ0KTsKPiA+ ICsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgIHN0YXRlLT5wZ2NuID0gY3VyX3BnY247Cj4gPiArICAgICAg ICBzdGF0ZS0+ZW50cnlfcGduID0gY3VyX3BnbjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBw Z2MgPSBjLT52dHNfaWZvLT52dHNfcGdjaXQtPnBnY2lfc3JwW3N0YXRlLT5wZ2NuIC0gMV0ucGdj Owo+ID4gKwo+ID4gKyAgICBpZiAocGdjLT5wZ19wbGF5YmFja19tb2RlICE9IDApIHsKPiA+ICsg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJOb24tc2VxdWVudGlhbCBQR0NzLCBzdWNo IGFzIHNodWZmbGVzLAo+IGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKPiA+ICsKPiA+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBp ZiAoZHZkbmF2X2FuZ2xlX2NoYW5nZShzdGF0ZS0+ZHZkbmF2LCBjLT5vcHRfYW5nbGUpICE9Cj4g RFZETkFWX1NUQVRVU19PSykgewo+Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIHN0YXJ0IHBsYXliYWNrIGF0IHRoZSBnaXZlbgo+IGFuZ2xlXG4iKTsKPgo+ IG5pdDogeW91IG1pZ2h0IG1lbnRpb24gdGhlIGZhaWxpbmcgYW5nbGUgaGVyZQo+Cj4gPiArCj4g PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICAvKiBkdmRuYXZfZGVzY3JpYmVfdGl0bGVfY2hhcHRlcnMoKSBwZXJmb3JtcyBzZXZlcmFs IHNhZmV0eSBjaGVja3MKPiBvbiB0aGUgdGl0bGUgc3RydWN0dXJlICovCj4gPiArICAgIC8qIHRh a2UgYWR2YW50YWdlIG9mIHRoaXMgc2lkZSBlZmZlY3QgdG8gZW5zdXJlIGEgc2FmZSBuYXZpZ2F0 aW9uCj4gcGF0aCAqLwo+ID4gKyAgICBzdGF0ZS0+cGdjX25iX3BnX2VzdCA9Cj4gZHZkbmF2X2Rl c2NyaWJlX3RpdGxlX2NoYXB0ZXJzKHN0YXRlLT5kdmRuYXYsIGMtPm9wdF90aXRsZSwKPiA+ICsK PiAmc3RhdGUtPnBnY19wZ190aW1lc19lc3QsCj4gPiArCj4gJnN0YXRlLT5wZ2NfZHVyYXRpb25f ZXN0KTsKPiA+ICsgICAgaWYgKCFzdGF0ZS0+cGdjX25iX3BnX2VzdCkgewo+ID4gKyAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byB2YWxpZGF0ZSB0aXRsZSBzdHJ1Y3R1 cmVcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgc3RhdGUtPm5hdl9wdHMgPSBkdmRuYXZfZ2V0X2N1cnJlbnRf dGltZShzdGF0ZS0+ZHZkbmF2KTsKPiA+ICsgICAgc3RhdGUtPnZ0c24gPSBjLT52bWdfaWZvLT50 dF9zcnB0LT50aXRsZVtjLT5vcHRfdGl0bGUgLQo+IDFdLnRpdGxlX3NldF9ucjsKPiA+ICsKPiA+ ICsgICAgc3RhdGUtPnBnYyA9IHBnYzsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19wbGF5X2lzX2NlbGxfcHJvbWlzaW5nKEFW Rm9ybWF0Q29udGV4dCAqcywKPiBEVkRWaWRlb1BsYXliYWNrU3RhdGUgKnN0YXRlLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbG4pCj4gPiAr ewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsg ICAgZHZkX3RpbWVfdCBjZWxsX2R1cmF0aW9uOwo+ID4gKwo+ID4gKyAgICBpZiAoIWMtPm9wdF90 cmltKQo+ID4gKyAgICAgICAgcmV0dXJuIDE7Cj4gPiArCj4gPiArICAgIGNlbGxfZHVyYXRpb24g PSBzdGF0ZS0+cGdjLT5jZWxsX3BsYXliYWNrW2NlbGxuIC0gMV0ucGxheWJhY2tfdGltZTsKPiA+ ICsKPiA+ICsgICAgcmV0dXJuIGNlbGxfZHVyYXRpb24uc2Vjb25kID49IDEgfHwgY2VsbF9kdXJh dGlvbi5taW51dGUgPj0gMSB8fAo+IGNlbGxfZHVyYXRpb24uaG91ciA+PSAxOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3BsYXlfbmV4dF9wc19ibG9jayhBVkZvcm1hdENv bnRleHQgKnMsCj4gRFZEVmlkZW9QbGF5YmFja1N0YXRlICpzdGF0ZSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBfbmF2X2V2 ZW50LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpm bHVzaF9jYikoQVZGb3JtYXRDb250ZXh0Cj4gKnMpKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9E ZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIHVpbnQ4X3QgbmF2 X2J1ZltEVkRWSURFT19CTE9DS19TSVpFXSA9IHswfTsKPiA+ICsgICAgaW50IG5hdl9ldmVudDsK PiA+ICsgICAgaW50IG5hdl9sZW47Cj4gPiArCj4gPiArICAgIGR2ZG5hdl92dHNfY2hhbmdlX2V2 ZW50X3QgKmVfdnRzOwo+ID4gKyAgICBkdmRuYXZfY2VsbF9jaGFuZ2VfZXZlbnRfdCAqZV9jZWxs Owo+ID4gKyAgICBpbnQgY3VyX3RpdGxlLCBjdXJfcGdjbiwgY3VyX3BnbiwgY3VyX2FuZ2xlLCBj dXJfdGl0bGVfdW51c2VkLAo+IGN1cl9wdHQsIGN1cl9uYl9hbmdsZXM7Cj4gPiArICAgIGludCBp c19jZWxsX3Byb21pc2luZyA9IDA7Cj4gPiArICAgIHBjaV90ICplX3BjaTsKPiA+ICsgICAgZHNp X3QgKmVfZHNpOwo+ID4gKwo+Cj4gPiArICAgIGlmIChidWZfc2l6ZSAhPSBEVkRWSURFT19CTE9D S19TSVpFKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBi dWZmZXIgc2l6ZVxuIik7Cj4KPiB5b3UgbWlnaHQgbWVudGlvbiB0aGUgZmFpbGluZyBzaXplIChJ bnZhbGlkIGJ1ZmZlciBzaXplICVkLCB0aGUgRFZEIGJsb2NrCj4gc2l6ZSAlZCB3YXMgZXhwZWN0 ZWQpCj4KPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4KPiBOb3Qg c3VyZSB0aGlzIGlzIHRoZSBjb3JyZWN0IGVycm9yIChpdCdzIG5vdCBhbiBhbGxvY2F0aW9uIGVy cm9yKQo+IG1heWJlIG1vcmUgaW52YWxpZGRhdGEgb3IgRUlOVkFMLgo+Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEVkRWSURFT19NQVhfUFNfU0VBUkNIX0JM T0NLUzsgaSsrKSB7Cj4gPiArICAgICAgICBpZiAoZmZfY2hlY2tfaW50ZXJydXB0KCZzLT5pbnRl cnJ1cHRfY2FsbGJhY2spKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYSVQ7Cj4g PiArCj4gPiArICAgICAgICBpZiAoZHZkbmF2X2dldF9uZXh0X2Jsb2NrKHN0YXRlLT5kdmRuYXYs IG5hdl9idWYsICZuYXZfZXZlbnQsCj4gJm5hdl9sZW4pICE9IERWRE5BVl9TVEFUVVNfT0spIHsK PiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHJlYWQg bmV4dCBibG9jayBvZgo+IFBHQ1xuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAvKiBz b21lIGRpc2NzIGZvbGxvdyBOT1BzIHdpdGggYSBwcmVtYXR1cmUgc3RvcCBldmVudCAqLwo+ID4g KyAgICAgICAgaWYgKG5hdl9ldmVudCA9PSBEVkROQVZfU1RPUCkKPiA+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gPiArCj4gPiArICAgICAgICBpZiAobmF2X2xlbiA+IERWRFZJ REVPX0JMT0NLX1NJWkUpIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCBibG9jayBzaXplXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlm IChkdmRuYXZfY3VycmVudF90aXRsZV9pbmZvKHN0YXRlLT5kdmRuYXYsICZjdXJfdGl0bGUsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyX3B0dCkgIT0gRFZE TkFWX1NUQVRVU19PSykgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gdmFsaWRhdGUgdGl0bGUKPiBjb29yZGluYXRlc1xuIik7Cj4gPiArCj4gPiAr ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4g PiArCj4gPiArICAgICAgICAvKiB3ZSBzb21laG93IG5hdmlnYXRlZCB0byBhIG1lbnUgKi8KPiA+ ICsgICAgICAgIGlmIChjdXJfdGl0bGUgPT0gMCB8fCAhZHZkbmF2X2lzX2RvbWFpbl92dHMoc3Rh dGUtPmR2ZG5hdikpCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ID4gKwo+ ID4gKyAgICAgICAgaWYgKGR2ZG5hdl9jdXJyZW50X3RpdGxlX3Byb2dyYW0oc3RhdGUtPmR2ZG5h diwKPiAmY3VyX3RpdGxlX3VudXNlZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjdXJfcGdjbiwgJmN1cl9wZ24pICE9Cj4gRFZETkFWX1NUQVRVU19PSykg ewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gdmFs aWRhdGUgUEdDCj4gY29vcmRpbmF0ZXNcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAg Lyogd2Ugc29tZWhvdyBsZWZ0IHRoZSBQR0MgKi8KPiA+ICsgICAgICAgIGlmIChzdGF0ZS0+aW5f cGdjICYmIGN1cl9wZ2NuICE9IHN0YXRlLT5wZ2NuKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0VPRjsKPiA+ICsKPiA+ICsgICAgICAgIGlmIChkdmRuYXZfZ2V0X2FuZ2xlX2luZm8o c3RhdGUtPmR2ZG5hdiwgJmN1cl9hbmdsZSwKPiAmY3VyX25iX2FuZ2xlcykgIT0gRFZETkFWX1NU QVRVU19PSykgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gdmFsaWRhdGUgYW5nbGUKPiBjb29yZGluYXRlc1xuIik7Cj4gPiArCj4gPiArICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4gPiArCj4g PiArICAgICAgICBhdl9sb2cocywgbmF2X2V2ZW50ID09IERWRE5BVl9CTE9DS19PSyA/IEFWX0xP R19UUkFDRSA6Cj4gQVZfTE9HX0RFQlVHLAo+Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAibmV3IGJsb2NrOiBpPSVkIG5hdl9ldmVudD0lZAo+IG5hdl9sZW49JWQgY3VyX3Rp dGxlPSVkICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJfcHR0PSVk IGN1cl9hbmdsZT0lZCBjdXJfY2VsbG49JWQKPiBjdXJfcGdjbj0lZCBjdXJfcGduPSVkICIKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGF5X2luX3Z0cz0lZCBwbGF5X2lu X3BnYz0lZAo+IHBsYXlfaW5fcHM9JWRcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpLCBuYXZfZXZlbnQsIG5hdl9sZW4sIGN1cl90aXRsZSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN1cl9wdHQsIGN1cl9hbmdsZSwgc3RhdGUtPmNlbGxuLAo+ IGN1cl9wZ2NuLCBjdXJfcGduLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhdGUtPmluX3Z0cywgc3RhdGUtPmluX3BnYywKPiBzdGF0ZS0+aW5fcHMpOwo+Cj4gbml0OiB3 ZWlyZCBpbmRlbnQKPgo+ID4gKwo+ID4gKyAgICAgICAgc3dpdGNoIChuYXZfZXZlbnQpIHsKPiA+ ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNfQ0hBTkdFOgo+ID4gKyAgICAgICAgICAgICAg ICBpZiAoc3RhdGUtPmluX3Z0cykKPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0VPRjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgZV92dHMgPSAoZHZkbmF2X3Z0c19j aGFuZ2VfZXZlbnRfdCAqKSBuYXZfYnVmOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAo ZV92dHMtPm5ld192dHNOID09IHN0YXRlLT52dHNuICYmIGVfdnRzLT5uZXdfZG9tYWluCj4gPT0g RFZEX0RPTUFJTl9WVFNUaXRsZSkKPiA+ICsgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5pbl92 dHMgPSAxOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAg ICAgICBjYXNlIERWRE5BVl9DRUxMX0NIQU5HRToKPiA+ICsgICAgICAgICAgICAgICAgaWYgKCFz dGF0ZS0+aW5fdnRzKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArCj4g PiArICAgICAgICAgICAgICAgIGVfY2VsbCA9IChkdmRuYXZfY2VsbF9jaGFuZ2VfZXZlbnRfdCAq KSBuYXZfYnVmOwo+ID4gKyAgICAgICAgICAgICAgICBpc19jZWxsX3Byb21pc2luZyA9IGR2ZHZp ZGVvX3BsYXlfaXNfY2VsbF9wcm9taXNpbmcocywKPiBzdGF0ZSwgZV9jZWxsLT5jZWxsTik7Cj4g PiArCj4gPiArICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJuZXcgY2Vs bDogcHJldj0lZCBuZXc9JWQKPiBwcm9taXNpbmc9JWRcbiIsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jZWxsbiwgZV9jZWxsLT5jZWxsTiwKPiBp c19jZWxsX3Byb21pc2luZyk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGlmICghc3RhdGUt PmluX3BzICYmICFzdGF0ZS0+aW5fcGdjKSB7Cj4KPiA+ICsgICAgICAgICAgICAgICAgICAgIGlm IChjdXJfdGl0bGUgPT0gYy0+b3B0X3RpdGxlICYmIGN1cl9wdHQgPT0KPiBjLT5vcHRfY2hhcHRl cl9zdGFydAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJfcGdjbiA9PSBz dGF0ZS0+cGdjbiAmJiBjdXJfcGduID09Cj4gc3RhdGUtPmVudHJ5X3Bnbgo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBpc19jZWxsX3Byb21pc2luZykgewo+Cj4gbml0OiB3ZWly ZCBhbGlnbgo+Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmluX3BnYyA9IDE7 Cj4gPiArICAgICAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAg ICBpZiAoYy0+b3B0X3RyaW0gJiYgIWlzX2NlbGxfcHJvbWlzaW5nKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfSU5GTywgIlNraXBwaW5nIHBhZGRpbmcgY2Vs bAo+ICMlZFxuIiwgZV9jZWxsLT5jZWxsTik7Cj4gPiArICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoc3RhdGUtPmNlbGxuID49IGVfY2VsbC0+Y2VsbE4gfHwgc3RhdGUtPnBnbgo+ID4gY3VyX3Bn bikgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ID4gKyAg ICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHN0YXRlLT5jZWxsbiA9 IGVfY2VsbC0+Y2VsbE47Cj4gPiArICAgICAgICAgICAgICAgIHN0YXRlLT5wdHQgPSBjdXJfcHR0 Owo+ID4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cGduID0gY3VyX3BnbjsKPiA+ICsKPiA+ICsg ICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfTkFW X1BBQ0tFVDoKPiA+ICsgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS0+aW5fcGdjKQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGlm ICgoc3RhdGUtPnB0dCA+IDAgJiYgc3RhdGUtPnB0dCA+IGN1cl9wdHQpCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgfHwgKGMtPm9wdF9jaGFwdGVyX2VuZCA+IDAgJiYgY3VyX3B0dCA+Cj4g Yy0+b3B0X2NoYXB0ZXJfZW5kKSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfRU9GOwo+ID4gKyAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAg ICAgIGVfcGNpID0gZHZkbmF2X2dldF9jdXJyZW50X25hdl9wY2koc3RhdGUtPmR2ZG5hdik7Cj4g PiArICAgICAgICAgICAgICAgIGVfZHNpID0gZHZkbmF2X2dldF9jdXJyZW50X25hdl9kc2koc3Rh dGUtPmR2ZG5hdik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGlmIChlX3BjaSA9PSBOVUxM IHx8IGVfZHNpID09IE5VTEwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fHwgZV9wY2ktPnBjaV9naS52b2J1X3NfcHRtID4KPiBlX3BjaS0+cGNpX2dpLnZvYnVfZV9wdG0p IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIE5BViBwYWNrZXRcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsg ICAgICAgICAgICAgICAgc3RhdGUtPnZvYnVfZHVyYXRpb24gPSBlX3BjaS0+cGNpX2dpLnZvYnVf ZV9wdG0gLQo+IGVfcGNpLT5wY2lfZ2kudm9idV9zX3B0bTsKPiA+ICsgICAgICAgICAgICAgICAg c3RhdGUtPnBnY19lbGFwc2VkICs9IHN0YXRlLT52b2J1X2R1cmF0aW9uOwo+ID4gKyAgICAgICAg ICAgICAgICBzdGF0ZS0+bmF2X3B0cyA9IGR2ZG5hdl9nZXRfY3VycmVudF90aW1lKHN0YXRlLT5k dmRuYXYpOwo+ID4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHR0ID0gY3VyX3B0dDsKPiA+ICsg ICAgICAgICAgICAgICAgc3RhdGUtPnBnbiA9IGN1cl9wZ247Cj4gPiArICAgICAgICAgICAgICAg IHN0YXRlLT5uYl92b2J1c19wbGF5ZWQrKzsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19ERUJVRywgIk5BViBwYWNrOiBzX3B0bT0lZCBlX3B0bT0lZCAiCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3I9JWQgbGJuPSVkIHZv YnVfZHVyYXRpb249JWQKPiBuYXZfcHRzPSVsZFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZV9wY2ktPnBjaV9naS52b2J1X3NfcHRtLAo+IGVfcGNpLT5wY2lfZ2kudm9idV9l X3B0bSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV9kc2ktPmRzaV9naS5udl9w Y2tfc2NyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlX3BjaS0+cGNpX2dpLm52 X3Bja19sYm4sCj4gc3RhdGUtPnZvYnVfZHVyYXRpb24sIHN0YXRlLT5uYXZfcHRzKTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS0+aW5fcHMpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJuYXZpZ2F0aW9uOiBsb2NrZWQgdG8K PiBwcm9ncmFtIHN0cmVhbVxuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICBzdGF0 ZS0+aW5fcHMgPSAxOwo+ID4gKyAgICAgICAgICAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAg ICAgICAgICAgICAgaWYgKHN0YXRlLT52b2J1X2VfcHRtICE9IGVfcGNpLT5wY2lfZ2kudm9idV9z X3B0bSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbHVzaF9jYikKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfY2Iocyk7Cj4gPiArCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdGUtPnRzX29mZnNldCArPSBzdGF0ZS0+dm9idV9lX3B0bSAt Cj4gZV9wY2ktPnBjaV9naS52b2J1X3NfcHRtOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgfQo+ ID4gKyAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHN0YXRlLT52 b2J1X2VfcHRtID0gZV9wY2ktPnBjaV9naS52b2J1X2VfcHRtOwo+ID4gKwo+ID4gKyAgICAgICAg ICAgICAgICAoKnBfbmF2X2V2ZW50KSA9IG5hdl9ldmVudDsKPiA+ICsKPiA+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIG5hdl9sZW47Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfQkxPQ0tf T0s6Cj4gPiArICAgICAgICAgICAgICAgIGlmICghc3RhdGUtPmluX3BzKSB7Cj4gPiArICAgICAg ICAgICAgICAgICAgICBpZiAoc3RhdGUtPmluX3BnYykKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBpID0gMDsgLyogbmVjZXNzYXJ5IGluIGNhc2Ugd2UgYXJlIHNraXBwaW5nCj4ganVuayBj ZWxscyBhdCB0aGUgYmVnaW5uaW5nICovCj4gPiArICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKPiA+ICsgICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAo bmF2X2xlbiAhPSBEVkRWSURFT19CTE9DS19TSVpFKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBibG9jayBzaXplXG4iKTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4g KyAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGlmIChjdXJfYW5n bGUgIT0gYy0+b3B0X2FuZ2xlKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiVW5leHBlY3RlZCBhbmdsZQo+IGNoYW5nZVxuIik7Cj4gPiArCj4gPiAr ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlBVVF9DSEFOR0VEOwo+ID4gKyAg ICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIG1lbWNweShidWYsICZu YXZfYnVmLCBuYXZfbGVuKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgLyogaW4gY2FzZSBO QVYgcGFja2V0IGlzIG1pc3NlZCAqLwo+ID4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHR0ID0g Y3VyX3B0dDsKPiA+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnBnbiA9IGN1cl9wZ247Cj4gPiAr Cj4gPiArICAgICAgICAgICAgICAgICgqcF9uYXZfZXZlbnQpID0gbmF2X2V2ZW50Owo+ID4gKwo+ ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gbmF2X2xlbjsKPiA+ICsgICAgICAgICAgICBjYXNl IERWRE5BVl9TVElMTF9GUkFNRToKPiA+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9XQUlUOgo+ ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX0hPUF9DSEFOTkVMOgo+ID4gKyAgICAgICAgICAg IGNhc2UgRFZETkFWX0hJR0hMSUdIVDoKPiA+ICsgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5p bl9wcykKPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICAgaWYgKG5hdl9ldmVudCA9PSBEVkROQVZfU1RJTExfRlJBTUUp Cj4gPiArICAgICAgICAgICAgICAgICAgICBkdmRuYXZfc3RpbGxfc2tpcChzdGF0ZS0+ZHZkbmF2 KTsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKG5hdl9ldmVudCA9PSBEVkROQVZfV0FJVCkKPiA+ ICsgICAgICAgICAgICAgICAgICAgIGR2ZG5hdl93YWl0X3NraXAoc3RhdGUtPmR2ZG5hdik7Cj4g PiArCj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgIGNhc2Ug RFZETkFWX1NUT1A6Cj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ ICsgICAgICAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiVW5hYmxlIHRvIGZpbmQgbmV4dCBwcm9ncmFtIHN0cmVhbQo+IGJsb2NrXG4iKTsKPiA+ ICsKPiA+ICsgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZHZkdmlkZW9fcGdjX3ByZWluZGV4KEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4g Kwo+ID4gKyAgICBpbnQgcmV0ID0gMCwgaW50ZXJydXB0ID0gMDsKPiA+ICsgICAgaW50IG5iX2No YXB0ZXJzID0gMCwgbGFzdF9wdHQgPSBjLT5vcHRfY2hhcHRlcl9zdGFydDsKPiA+ICsgICAgdWlu dDY0X3QgY3VyX2NoYXB0ZXJfb2Zmc2V0ID0gMCwgY3VyX2NoYXB0ZXJfZHVyYXRpb24gPSAwOwo+ ID4gKyAgICBEVkRWaWRlb1BsYXliYWNrU3RhdGUgKnN0YXRlOwo+ID4gKwo+ID4gKyAgICB1aW50 OF90IG5hdl9idWZbRFZEVklERU9fQkxPQ0tfU0laRV07Cj4gPiArICAgIGludCBuYXZfZXZlbnQ7 Cj4gPiArCj4gPiArICAgIGlmIChjLT5vcHRfY2hhcHRlcl9zdGFydCA9PSBjLT5vcHRfY2hhcHRl cl9lbmQpCj4gPiArICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgYXZfbG9nKHMsIEFW X0xPR19JTkZPLAo+ID4gKyAgICAgICAgICAgIkluZGV4aW5nIGNoYXB0ZXIgbWFya2VycywgdGhp cyB3aWxsIHRha2UgYSBsb25nIHRpbWUuCj4gUGxlYXNlIHdhaXQuLi5cbiIpOwo+ID4gKwo+ID4g KyAgICBzdGF0ZSA9IGF2X21hbGxvY3ooc2l6ZW9mKERWRFZpZGVvUGxheWJhY2tTdGF0ZSkpOwo+ ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3BsYXlfb3BlbihzLCBzdGF0ZSkpIDwgMCkgewo+ ID4gKyAgICAgICAgYXZfZnJlZXAoJnN0YXRlKTsKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgd2hpbGUgKCEoaW50ZXJydXB0ID0gZmZfY2hlY2tfaW50 ZXJydXB0KCZzLT5pbnRlcnJ1cHRfY2FsbGJhY2spKSkgewo+ID4gKyAgICAgICAgcmV0ID0gZHZk dmlkZW9fcGxheV9uZXh0X3BzX2Jsb2NrKHMsIHN0YXRlLCBuYXZfYnVmLAo+IERWRFZJREVPX0JM T0NLX1NJWkUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jm5hdl9ldmVudCwgTlVMTCk7Cj4gPiArICAgICAgICBpZiAocmV0IDwgMCAmJiByZXQgIT0gQVZF UlJPUl9FT0YpCj4gPiArICAgICAgICAgICAgZ290byBlbmRfZnJlZTsKPiA+ICsKPiA+ICsgICAg ICAgIGlmIChuYXZfZXZlbnQgIT0gRFZETkFWX05BVl9QQUNLRVQgJiYgcmV0ICE9IEFWRVJST1Jf RU9GKQo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAgICAgaWYgKHN0 YXRlLT5wdHQgPT0gbGFzdF9wdHQpIHsKPiA+ICsgICAgICAgICAgICBjdXJfY2hhcHRlcl9kdXJh dGlvbiArPSBzdGF0ZS0+dm9idV9kdXJhdGlvbjsKPiA+ICsgICAgICAgICAgICAvKiBlbnN1cmUg d2UgYWRkIHRoZSBsYXN0IGNoYXB0ZXIgKi8KPiA+ICsgICAgICAgICAgICBpZiAocmV0ICE9IEFW RVJST1JfRU9GKQo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgIH0K PiA+ICsKPgo+ID4gKyAgICAgICAgaWYgKCFhdnByaXZfbmV3X2NoYXB0ZXIocywgbmJfY2hhcHRl cnMsIERWRFZJREVPX1RJTUVfQkFTRV9RLAo+IGN1cl9jaGFwdGVyX29mZnNldCwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9jaGFwdGVyX29mZnNldCArCj4gY3VyX2No YXB0ZXJfZHVyYXRpb24sIE5VTEwpKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBjaGFwdGVyXG4iKTsKPgo+IHJldCBpcyBub3Qg c2V0IGluIHRoaXMgY2FzZQo+Cj4gPiArCj4gPiArICAgICAgICAgICAgZ290byBlbmRfZnJlZTsK PiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIG5iX2NoYXB0ZXJzKys7Cj4gPiArICAg ICAgICBjdXJfY2hhcHRlcl9vZmZzZXQgKz0gY3VyX2NoYXB0ZXJfZHVyYXRpb247Cj4gPiArICAg ICAgICBjdXJfY2hhcHRlcl9kdXJhdGlvbiA9IHN0YXRlLT52b2J1X2R1cmF0aW9uOwo+ID4gKyAg ICAgICAgbGFzdF9wdHQgPSBzdGF0ZS0+cHR0Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKHJldCA9 PSBBVkVSUk9SX0VPRikKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgfQo+ID4gKwo+ ID4gKyAgICBpZiAoaW50ZXJydXB0KSB7Cj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SX0VYSVQ7 Cj4gPiArICAgICAgICBnb3RvIGVuZF9mcmVlOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlm IChyZXQgPCAwICYmIHJldCAhPSBBVkVSUk9SX0VPRikKPiA+ICsgICAgICAgIGdvdG8gZW5kX2Zy ZWU7Cj4gPiArCj4gPiArICAgIHMtPmR1cmF0aW9uID0gYXZfcmVzY2FsZV9xKHN0YXRlLT5wZ2Nf ZWxhcHNlZCwKPiBEVkRWSURFT19USU1FX0JBU0VfUSwgQVZfVElNRV9CQVNFX1EpOwo+ID4gKyAg ICBjLT5kdXJhdGlvbl9wdG0gPSBzdGF0ZS0+cGdjX2VsYXBzZWQ7Cj4gPiArCj4gPiArICAgIGF2 X2xvZyhzLCBBVl9MT0dfSU5GTywgIkNoYXB0ZXIgbWFya2VyIGluZGV4aW5nIGNvbXBsZXRlXG4i KTsKPiA+ICsgICAgcmV0ID0gMDsKPiA+ICsKPiA+ICtlbmRfZnJlZToKPiA+ICsgICAgZHZkdmlk ZW9fcGxheV9jbG9zZShzLCBzdGF0ZSk7Cj4gPiArICAgIGF2X2ZyZWVwKCZzdGF0ZSk7Cj4gPiAr Cj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlk ZW9fcGdjX2NoYXB0ZXJzX3NldHVwKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAg IERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICB1 aW50NjRfdCB0aW1lX3ByZXYgPSAwOwo+ID4gKyAgICBpbnQ2NF90IHRvdGFsX2R1cmF0aW9uID0g MDsKPiA+ICsKPiA+ICsgICAgaW50IGNoYXB0ZXJfc3RhcnQgPSBjLT5vcHRfY2hhcHRlcl9zdGFy dCAtIDE7Cj4gPiArICAgIGludCBjaGFwdGVyX2VuZCA9IGMtPm9wdF9jaGFwdGVyX2VuZCA+IDAg PyBjLT5vcHRfY2hhcHRlcl9lbmQgOgo+IGMtPnBsYXlfc3RhdGUucGdjX25iX3BnX2VzdCAtIDE7 Cj4gPiArCj4gPiArICAgIGlmIChjaGFwdGVyX3N0YXJ0ID09IGNoYXB0ZXJfZW5kIHx8IGMtPnBs YXlfc3RhdGUucGdjX25iX3BnX2VzdCA9PQo+IDEpIHsKPiA+ICsgICAgICAgIHMtPmR1cmF0aW9u ID0gYXZfcmVzY2FsZV9xKGMtPnBsYXlfc3RhdGUucGdjX2R1cmF0aW9uX2VzdCwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLAo+IEFW X1RJTUVfQkFTRV9RKTsKPiA+ICsgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIGZvciAoaW50IGkgPSBjaGFwdGVyX3N0YXJ0OyBpIDwgY2hhcHRlcl9lbmQ7IGkrKykg ewo+ID4gKyAgICAgICAgdWludDY0X3QgdGltZV9lZmZlY3RpdmUgPSBjLT5wbGF5X3N0YXRlLnBn Y19wZ190aW1lc19lc3RbaV0gLQo+IGMtPnBsYXlfc3RhdGUubmF2X3B0czsKPiA+ICsKPiA+ICsg ICAgICAgIGlmICghYXZwcml2X25ld19jaGFwdGVyKHMsIGksIERWRFZJREVPX1RJTUVfQkFTRV9R LCB0aW1lX3ByZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2Vm ZmVjdGl2ZSwgTlVMTCkpIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNoYXB0ZXJcbiIpOwo+ID4gKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICB0aW1l X3ByZXYgPSB0aW1lX2VmZmVjdGl2ZTsKPiA+ICsgICAgICAgIHRvdGFsX2R1cmF0aW9uID0gdGlt ZV9lZmZlY3RpdmU7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGMtPm9wdF9jaGFwdGVy X3N0YXJ0ID09IDEgJiYgYy0+b3B0X2NoYXB0ZXJfZW5kID09IDApCj4gPiArICAgICAgICBzLT5k dXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShjLT5wbGF5X3N0YXRlLnBnY19kdXJhdGlvbl9lc3QsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0Vf USwKPiBBVl9USU1FX0JBU0VfUSk7Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgICAgIHMtPmR1cmF0 aW9uID0gYXZfcmVzY2FsZV9xKHRvdGFsX2R1cmF0aW9uLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFZEVklERU9fVElNRV9CQVNFX1EsCj4gQVZfVElNRV9CQVNFX1Ep Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBk dmR2aWRlb192aWRlb19zdHJlYW1fYW5hbHl6ZShBVkZvcm1hdENvbnRleHQgKnMsCj4gdmlkZW9f YXR0cl90IHZpZGVvX2F0dHIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkKPiAqZW50cnkpCj4gPiArewo+ID4g KyAgICBBVlJhdGlvbmFsIGZyYW1lcmF0ZTsKPiA+ICsgICAgaW50IGhlaWdodCA9IDA7Cj4gPiAr ICAgIGludCB3aWR0aCA9IDA7Cj4gPiArICAgIGludCBpc19wYWwgPSB2aWRlb19hdHRyLnZpZGVv X2Zvcm1hdCA9PSAxOwo+ID4gKwo+ID4gKyAgICBmcmFtZXJhdGUgPSBpc19wYWwgPyAoQVZSYXRp b25hbCkgeyAyNSwgMSB9IDogKEFWUmF0aW9uYWwpIHsgMzAwMDAsCj4gMTAwMSB9Owo+ID4gKyAg ICBoZWlnaHQgPSBpc19wYWwgPyA1NzYgOiA0ODA7Cj4gPiArCj4gPiArICAgIGlmIChoZWlnaHQg PiAwKSB7Cj4gPiArICAgICAgICBzd2l0Y2ggKHZpZGVvX2F0dHIucGljdHVyZV9zaXplKSB7Cj4g PiArICAgICAgICAgICAgY2FzZSAwOiAvKiBEMSAqLwo+ID4gKyAgICAgICAgICAgICAgICB3aWR0 aCA9IDcyMDsKPiA+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgY2Fz ZSAxOiAvKiA0Q0lGICovCj4gPiArICAgICAgICAgICAgICAgIHdpZHRoID0gNzA0Owo+ID4gKyAg ICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICBjYXNlIDI6IC8qIEhhbGYgRDEg Ki8KPiA+ICsgICAgICAgICAgICAgICAgd2lkdGggPSAzNTI7Cj4gPiArICAgICAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgICAgIGNhc2UgMzogLyogQ0lGICovCj4gPiArICAgICAgICAg ICAgICAgIHdpZHRoID0gMzUyOwo+ID4gKyAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjsKPiA+ ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7Cj4KPiA+ICsgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHZpZGVvIGRpbWVuc2lvbnNcbiIpOwo+Cj4geW91IG1p Z2h0IHByaW50IHRoZSBhY3R1YWwgc2l6ZSB0byBoZWxwIGRlYnVnIGltcG9zc2libGUgY2FzZXMK Pgo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgZW50cnktPnN0YXJ0Y29kZSA9IDB4MUUwOwo+ID4gKyAgICBlbnRy eS0+Y29kZWNfaWQgPSAhdmlkZW9fYXR0ci5tcGVnX3ZlcnNpb24gPyBBVl9DT0RFQ19JRF9NUEVH MVZJREVPCj4gOiBBVl9DT0RFQ19JRF9NUEVHMlZJREVPOwo+ID4gKyAgICBlbnRyeS0+d2lkdGgg PSB3aWR0aDsKPiA+ICsgICAgZW50cnktPmhlaWdodCA9IGhlaWdodDsKPiA+ICsgICAgZW50cnkt PmRhciA9IHZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8gPyAoQVZSYXRpb25hbCkgeyAx NiwgOQo+IH0gOiAoQVZSYXRpb25hbCkgeyA0LCAzIH07Cj4gPiArICAgIGVudHJ5LT5mcmFtZXJh dGUgPSBmcmFtZXJhdGU7Cj4gPiArICAgIGVudHJ5LT5oYXNfY2MgPSAhaXNfcGFsICYmICh2aWRl b19hdHRyLmxpbmUyMV9jY18xIHx8Cj4gdmlkZW9fYXR0ci5saW5lMjFfY2NfMik7Cj4gPiArCj4g PiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3Zp ZGVvX3N0cmVhbV9hZGQoQVZGb3JtYXRDb250ZXh0ICpzLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkgKmVudHJ5LAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWU3RyZWFtUGFy c2VUeXBlCj4gbmVlZF9wYXJzaW5nKQo+ID4gK3sKPiA+ICsgICAgQVZTdHJlYW0gKnN0Owo+ID4g KyAgICBGRlN0cmVhbSAqc3RpOwo+ID4gKwo+ID4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJl YW0ocywgTlVMTCk7Cj4gPiArICAgIGlmICghc3QpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwo+ID4gKwo+ID4gKyAgICBzdC0+aWQgPSBlbnRyeS0+c3RhcnRjb2RlOwo+ID4g KyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfVklERU87Cj4gPiAr ICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBlbnRyeS0+Y29kZWNfaWQ7Cj4gPiArICAgIHN0 LT5jb2RlY3Bhci0+d2lkdGggPSBlbnRyeS0+d2lkdGg7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+ aGVpZ2h0ID0gZW50cnktPmhlaWdodDsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5mb3JtYXQgPSBB Vl9QSVhfRk1UX1lVVjQyMFA7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29sb3JfcmFuZ2UgPSBB VkNPTF9SQU5HRV9NUEVHOwo+ID4gKwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmZyYW1lcmF0ZSA9 IGVudHJ5LT5mcmFtZXJhdGU7Cj4gPiArI2lmIEZGX0FQSV9SX0ZSQU1FX1JBVEUKPiA+ICsgICAg c3QtPnJfZnJhbWVfcmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gPiArI2VuZGlmCj4gPiArICAg IHN0LT5hdmdfZnJhbWVfcmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gPiArCj4gPiArICAgIHN0 aSA9IGZmc3RyZWFtKHN0KTsKPiA+ICsgICAgc3RpLT5yZXF1ZXN0X3Byb2JlID0gMDsKPiA+ICsg ICAgc3RpLT5uZWVkX3BhcnNpbmcgPSBuZWVkX3BhcnNpbmc7Cj4gPiArICAgIHN0aS0+ZGlzcGxh eV9hc3BlY3RfcmF0aW8gPSBlbnRyeS0+ZGFyOwo+ID4gKyAgICBzdGktPmF2Y3R4LT5mcmFtZXJh dGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ID4gKwo+ID4gKyAgICBpZiAoZW50cnktPmhhc19jYykK PiA+ICsgICAgICAgIHN0aS0+YXZjdHgtPnByb3BlcnRpZXMgfD0gRkZfQ09ERUNfUFJPUEVSVFlf Q0xPU0VEX0NBUFRJT05TOwo+ID4gKwo+ID4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBE VkRWSURFT19QVFNfV1JBUF9CSVRTLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIERWRFZJ REVPX1RJTUVfQkFTRV9RLm51bSwKPiBEVkRWSURFT19USU1FX0JBU0VfUS5kZW4pOwo+ID4gKwo+ ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb192 aWRlb19zdHJlYW1fc2V0dXAoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZE VmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIERWRFZp ZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSAqZW50cnkgPSBOVUxMOwo+ID4gKyAgICBpbnQgcmV0ID0g MDsKPiA+ICsKPgo+ID4gKyAgICBlbnRyeSA9IGF2X21hbGxvY3ooc2l6ZW9mKERWRFZpZGVvVlRT VmlkZW9TdHJlYW1FbnRyeSkpOwo+Cj4geW91IG1pZ2h0IGNoZWNrIGZvciBmYWlsdXJlCj4KPiA+ ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb192aWRlb19zdHJlYW1fYW5hbHl6ZShzLAo+ IGMtPnZ0c19pZm8tPnZ0c2lfbWF0LT52dHNfdmlkZW9fYXR0ciwgZW50cnkpKSA8IDAKPiA+ICsg ICAgICAgICAgICB8fCAocmV0ID0gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2FkZChjLT5tcGVnX2N0 eCwgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfRlVMTCkpIDwgMAo+ID4gKyAgICAgICAgICAgIHx8 IChyZXQgPSBkdmR2aWRlb192aWRlb19zdHJlYW1fYWRkKHMsIGVudHJ5LAo+IEFWU1RSRUFNX1BB UlNFX0hFQURFUlMpKSA8IDApIHsKPiA+ICsgICAgICAgIGF2X2ZyZWVwKCZlbnRyeSk7Cj4KPiA+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxsb2NhdGUgdmlk ZW8gc3RyZWFtXG4iKTsKPgo+IG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSwgSSdkIHNheTogVW5h YmxlIHRvIGFkZCB2aWRlbyBzdHJlYW0KPgo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBhdl9mcmVlcCgmZW50cnkpOwo+ID4gKwo+ID4gKyAg ICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2F1ZGlv X3N0cmVhbV9hbmFseXplKEFWRm9ybWF0Q29udGV4dCAqcywKPiBhdWRpb19hdHRyX3QgYXVkaW9f YXR0ciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQx Nl90IGF1ZGlvX2NvbnRyb2wsCj4gRFZEVmlkZW9QR0NBdWRpb1N0cmVhbUVudHJ5ICplbnRyeSkK PiA+ICt7Cj4gPiArICAgIGludCBzdGFydGNvZGUgPSAwOwo+ID4gKyAgICBlbnVtIEFWQ29kZWNJ RCBjb2RlY19pZCA9IEFWX0NPREVDX0lEX05PTkU7Cj4gPiArICAgIGludCBzYW1wbGVfZm10ID0g QVZfU0FNUExFX0ZNVF9OT05FOwo+ID4gKyAgICBpbnQgc2FtcGxlX3JhdGUgPSAwOwo+ID4gKyAg ICBpbnQgYml0X2RlcHRoID0gMDsKPiA+ICsgICAgaW50IG5iX2NoYW5uZWxzID0gMDsKPiA+ICsg ICAgQVZDaGFubmVsTGF5b3V0IGNoX2xheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpIHswfTsKPiA+ ICsgICAgY2hhciBsYW5nX2R2ZFszXSA9IHswfTsKPiA+ICsKPiA+ICsgICAgaW50IHBvc2l0aW9u ID0gKGF1ZGlvX2NvbnRyb2wgJiAweDdGMDApID4+IDg7Cj4gPiArCj4gPiArICAgIC8qIFhYWChQ QVRDSFdFTENPTUUpOiBTRERTIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGxhY2sgb2Ygc2FtcGxl Cj4gbWF0ZXJpYWwgKi8KPiA+ICsgICAgc3dpdGNoIChhdWRpb19hdHRyLmF1ZGlvX2Zvcm1hdCkg ewo+ID4gKyAgICAgICAgY2FzZSAwOiAvKiBBQzMgKi8KPiA+ICsgICAgICAgICAgICBjb2RlY19p ZCA9IEFWX0NPREVDX0lEX0FDMzsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0gQVZfU0FN UExFX0ZNVF9GTFRQOwo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gPiAr ICAgICAgICAgICAgc3RhcnRjb2RlID0gMHg4MCArIHBvc2l0aW9uOwo+ID4gKyAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSAyOiAvKiBNUDEgKi8KPiA+ICsgICAgICAgICAgICBj b2RlY19pZCA9IEFWX0NPREVDX0lEX01QMTsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0g YXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyBBVl9TQU1QTEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExF X0ZNVF9TMTY7Cj4gPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiA+ICsgICAg ICAgICAgICBiaXRfZGVwdGggPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTY7Cj4g PiArICAgICAgICAgICAgc3RhcnRjb2RlID0gMHgxQzAgKyBwb3NpdGlvbjsKPiA+ICsgICAgICAg ICAgICBicmVhazsKPiA+ICsgICAgICAgIGNhc2UgMzogLyogTVAyICovCj4gPiArICAgICAgICAg ICAgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9NUDI7Cj4gPiArICAgICAgICAgICAgc2FtcGxlX2Zt dCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gQVZfU0FNUExFX0ZNVF9TMzIgOgo+IEFWX1NB TVBMRV9GTVRfUzE2Owo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gPiAr ICAgICAgICAgICAgYml0X2RlcHRoID0gYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyAyMCA6IDE2 Owo+ID4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IDB4MUMwICsgcG9zaXRpb247Cj4gPiArICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIDQ6IC8qIERWRCBQQ00gKi8KPiA+ICsg ICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX1BDTV9EVkQ7Cj4gPiArICAgICAgICAg ICAgc2FtcGxlX2ZtdCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gQVZfU0FNUExFX0ZNVF9T MzIgOgo+IEFWX1NBTVBMRV9GTVRfUzE2Owo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0g YXVkaW9fYXR0ci5zYW1wbGVfZnJlcXVlbmN5ID8gOTYwMDAgOiA0ODAwMDsKPiA+ICsgICAgICAg ICAgICBiaXRfZGVwdGggPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA9PSAyID8gMjQgOgo+IChh dWRpb19hdHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTYpOwo+ID4gKyAgICAgICAgICAgIHN0YXJ0 Y29kZSA9IDB4QTAgKyBwb3NpdGlvbjsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgIGNhc2UgNjogLyogRENBICovCj4gPiArICAgICAgICAgICAgY29kZWNfaWQgPSBBVl9DT0RF Q19JRF9EVFM7Cj4gPiArICAgICAgICAgICAgc2FtcGxlX2ZtdCA9IEFWX1NBTVBMRV9GTVRfRkxU UDsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ID4gKyAgICAgICAgICAg IGJpdF9kZXB0aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID09IDIgPyAyNCA6Cj4gKGF1ZGlv X2F0dHIucXVhbnRpemF0aW9uID8gMjAgOiAxNik7Cj4gPiArICAgICAgICAgICAgc3RhcnRjb2Rl ID0gMHg4OCArIHBvc2l0aW9uOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIG5iX2NoYW5uZWxzID0gYXVkaW9fYXR0ci5jaGFubmVscyArIDE7Cj4gPiAr Cj4gPiArICAgIGlmIChjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9OT05FCj4gPiArICAgICAgICAg ICAgfHwgc3RhcnRjb2RlID09IDAgfHwgc2FtcGxlX2ZtdCA9PSBBVl9TQU1QTEVfRk1UX05PTkUK PiA+ICsgICAgICAgICAgICB8fCBzYW1wbGVfcmF0ZSA9PSAwIHx8IG5iX2NoYW5uZWxzID09IDAp IHsKPgo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYXVkaW8g cGFyYW1ldGVyc1xuIik7Cj4KPiBwbGVhc2UgcHJvdmlkZSBzb21lIGNvbnRleHQgdG8gaGVscCBk ZWJ1ZyBpbXBvc3NpYmxlIGNhc2VzCj4KPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChuYl9jaGFubmVscyA9 PSAyKQo+ID4gKyAgICAgICAgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dCkgQVZfQ0hBTk5F TF9MQVlPVVRfU1RFUkVPOwo+ID4gKyAgICBlbHNlIGlmIChuYl9jaGFubmVscyA9PSA2KQo+ID4g KyAgICAgICAgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dCkgQVZfQ0hBTk5FTF9MQVlPVVRf NVBPSU5UMTsKPiA+ICsgICAgZWxzZSBpZiAobmJfY2hhbm5lbHMgPT0gNykKPiA+ICsgICAgICAg IGNoX2xheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpIEFWX0NIQU5ORUxfTEFZT1VUXzZQT0lOVDE7 Cj4gPiArICAgIGVsc2UgaWYgKG5iX2NoYW5uZWxzID09IDgpCj4gPiArICAgICAgICBjaF9sYXlv dXQgPSAoQVZDaGFubmVsTGF5b3V0KSBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQxOwo+ID4gKwo+ ID4gKyAgICBpZiAoYXVkaW9fYXR0ci5jb2RlX2V4dGVuc2lvbiA9PSAyKQo+ID4gKyAgICAgICAg ZW50cnktPmRpc3Bvc2l0aW9uIHw9IEFWX0RJU1BPU0lUSU9OX1ZJU1VBTF9JTVBBSVJFRDsKPiA+ ICsgICAgaWYgKGF1ZGlvX2F0dHIuY29kZV9leHRlbnNpb24gPT0gMyB8fCBhdWRpb19hdHRyLmNv ZGVfZXh0ZW5zaW9uID09Cj4gNCkKPiA+ICsgICAgICAgIGVudHJ5LT5kaXNwb3NpdGlvbiB8PSBB Vl9ESVNQT1NJVElPTl9DT01NRU5UOwo+ID4gKwo+ID4gKyAgICBBVl9XQjE2KGxhbmdfZHZkLCBh dWRpb19hdHRyLmxhbmdfY29kZSk7Cj4gPiArCj4gPiArICAgIGVudHJ5LT5zdGFydGNvZGUgPSBz dGFydGNvZGU7Cj4gPiArICAgIGVudHJ5LT5jb2RlY19pZCA9IGNvZGVjX2lkOwo+ID4gKyAgICBl bnRyeS0+c2FtcGxlX3JhdGUgPSBzYW1wbGVfcmF0ZTsKPiA+ICsgICAgZW50cnktPmJpdF9kZXB0 aCA9IGJpdF9kZXB0aDsKPiA+ICsgICAgZW50cnktPm5iX2NoYW5uZWxzID0gbmJfY2hhbm5lbHM7 Cj4gPiArICAgIGVudHJ5LT5jaF9sYXlvdXQgPSBjaF9sYXlvdXQ7Cj4gPiArICAgIGVudHJ5LT5s YW5nX2lzbyA9IChjaGFyICopIGZmX2NvbnZlcnRfbGFuZ190byhsYW5nX2R2ZCwKPiBBVl9MQU5H X0lTTzYzOV8yX0JJQkwpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAq cywKPiBEVkRWaWRlb1BHQ0F1ZGlvU3RyZWFtRW50cnkgKmVudHJ5LAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWU3RyZWFtUGFyc2VUeXBlCj4gbmVlZF9w YXJzaW5nKQo+ID4gK3sKPiA+ICsgICAgQVZTdHJlYW0gKnN0Owo+ID4gKyAgICBGRlN0cmVhbSAq c3RpOwo+ID4gKwo+ID4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4g PiArICAgIGlmICghc3QpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4g Kwo+ID4gKyAgICBzdC0+aWQgPSBlbnRyeS0+c3RhcnRjb2RlOwo+ID4gKyAgICBzdC0+Y29kZWNw YXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfQVVESU87Cj4gPiArICAgIHN0LT5jb2RlY3Bh ci0+Y29kZWNfaWQgPSBlbnRyeS0+Y29kZWNfaWQ7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Zm9y bWF0ID0gZW50cnktPnNhbXBsZV9mbXQ7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+c2FtcGxlX3Jh dGUgPSBlbnRyeS0+c2FtcGxlX3JhdGU7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Yml0c19wZXJf Y29kZWRfc2FtcGxlID0gZW50cnktPmJpdF9kZXB0aDsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5i aXRzX3Blcl9yYXdfc2FtcGxlID0gZW50cnktPmJpdF9kZXB0aDsKPiA+ICsgICAgc3QtPmNvZGVj cGFyLT5jaF9sYXlvdXQgPSBlbnRyeS0+Y2hfbGF5b3V0Owo+ID4gKyAgICBzdC0+Y29kZWNwYXIt PmNoX2xheW91dC5uYl9jaGFubmVscyA9IGVudHJ5LT5uYl9jaGFubmVsczsKPiA+ICsgICAgc3Qt PmRpc3Bvc2l0aW9uID0gZW50cnktPmRpc3Bvc2l0aW9uOwo+ID4gKwo+ID4gKyAgICBpZiAoZW50 cnktPmxhbmdfaXNvKQo+ID4gKyAgICAgICAgYXZfZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgImxh bmd1YWdlIiwgZW50cnktPmxhbmdfaXNvLCAwKTsKPiA+ICsKPiA+ICsgICAgc3RpID0gZmZzdHJl YW0oc3QpOwo+ID4gKyAgICBzdGktPnJlcXVlc3RfcHJvYmUgPSAwOwo+ID4gKyAgICBzdGktPm5l ZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiA+ICsKPiA+ICsgICAgYXZwcml2X3NldF9wdHNf aW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5udW0sCj4gRFZEVklERU9fVElNRV9CQVNFX1EuZGVu KTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg ZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FkZF9hbGwoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sK PiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4g PiArICAgIGludCByZXQgPSAwOwo+ID4gKwo+ID4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGMt PnZ0c19pZm8tPnZ0c2lfbWF0LT5ucl9vZl92dHNfYXVkaW9fc3RyZWFtczsKPiBpKyspIHsKPiA+ ICsgICAgICAgIERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSAqZW50cnkgPSBOVUxMOwo+ID4g Kwo+ID4gKyAgICAgICAgaWYgKCEoYy0+cGxheV9zdGF0ZS5wZ2MtPmF1ZGlvX2NvbnRyb2xbaV0g JiAweDgwMDApKQo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAgICAg ZW50cnkgPSBhdl9tYWxsb2N6KHNpemVvZihEVkRWaWRlb1BHQ0F1ZGlvU3RyZWFtRW50cnkpKTsK PiA+ICsgICAgICAgIGlmICghZW50cnkpCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPiA+ICsKPiA+ICsgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3Ry ZWFtX2FuYWx5emUocywKPiBjLT52dHNfaWZvLT52dHNpX21hdC0+dnRzX2F1ZGlvX2F0dHJbaV0s Cj4gPiArICAgICAgICAgICAgICAgIGMtPnBsYXlfc3RhdGUucGdjLT5hdWRpb19jb250cm9sW2ld LCBlbnRyeSkpIDwgMCkKPiA+ICsgICAgICAgICAgICBnb3RvIGJyZWFrX2ZyZWVfYW5kX2Vycm9y Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGMtPnZ0c19pZm8tPnZ0c2lfbWF0LT52dHNfYXVkaW9f YXR0cltpXS5hcHBsaWNhdGlvbl9tb2RlID09Cj4gMSkKPiA+ICsgICAgICAgICAgICBhdl9sb2co cywgQVZfTE9HX1dBUk5JTkcsICJLYXJhb2tlIG1ldGFkYXRhIGluIHN0cmVhbSAlZAo+IHdpbGwg bm90IGJlIHJldGFpbmVkXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW50cnktPnN0YXJ0Y29kZSk7Cj4gPiArCj4gPiArICAgICAgICAvKiBJRk8gc3RydWN0 dXJlcyBjYW4gZGVjbGFyZSBkdXBsaWNhdGUgZW50cmllcyBmb3IgdGhlIHNhbWUKPiBzdGFydGNv ZGUgKi8KPiA+ICsgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcy0+bmJfc3RyZWFtczsgaisr KQo+ID4gKyAgICAgICAgICAgIGlmIChzLT5zdHJlYW1zW2pdLT5pZCA9PSBlbnRyeS0+c3RhcnRj b2RlKQo+ID4gKyAgICAgICAgICAgICAgICBnb3RvIGNvbnRpbnVlX2ZyZWU7Cj4gPiArCj4gPiAr ICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGQoYy0+bXBlZ19jdHgs IGVudHJ5LAo+IEFWU1RSRUFNX1BBUlNFX0ZVTEwpKSA8IDAKPiA+ICsgICAgICAgICAgICAgICAg fHwgKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGQocywgZW50cnksCj4gQVZTVFJFQU1f UEFSU0VfSEVBREVSUykpIDwgMCkKPiA+ICsgICAgICAgICAgICBnb3RvIGJyZWFrX2ZyZWVfYW5k X2Vycm9yOwo+ID4gKwo+ID4gK2NvbnRpbnVlX2ZyZWU6Cj4gPiArICAgICAgICBhdl9mcmVlcCgm ZW50cnkpOwo+ID4gKyAgICAgICAgY29udGludWU7Cj4gPiArCj4gPiArYnJlYWtfZnJlZV9hbmRf ZXJyb3I6Cj4gPiArICAgICAgICBhdl9mcmVlcCgmZW50cnkpOwo+Cj4gPiArICAgICAgICBhdl9s b2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGF1ZGlvIHN0cmVhbVxuIik7 Cj4KPiBkaXR0bzogdW5hYmxlIHRvICJhZGQiIGF1ZGlvIHN0cmVhbT8KPgo+ID4gKyAgICAgICAg cmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FuYWx5emUoQVZGb3Jt YXRDb250ZXh0ICpzLCB1aW50MzJfdAo+IG9mZnNldCwgc3VicF9hdHRyX3Qgc3VicF9hdHRyLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWaWRlb1BHQ1N1 YnRpdGxlU3RyZWFtRW50cnkKPiAqZW50cnkpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4 Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgY2hhciBsYW5nX2R2ZFsz XSA9IHswfTsKPiA+ICsKPiA+ICsgICAgZW50cnktPnN0YXJ0Y29kZSA9IDB4MjAgKyAob2Zmc2V0 ICYgMHgxRik7Cj4gPiArCj4gPiArICAgIGlmIChzdWJwX2F0dHIubGFuZ19leHRlbnNpb24gPT0g OSkKPiA+ICsgICAgICAgIGVudHJ5LT5kaXNwb3NpdGlvbiB8PSBBVl9ESVNQT1NJVElPTl9GT1JD RUQ7Cj4gPiArCj4gPiArICAgIEFWX1dCMTYobGFuZ19kdmQsIHN1YnBfYXR0ci5sYW5nX2NvZGUp Owo+ID4gKyAgICBlbnRyeS0+bGFuZ19pc28gPSAoY2hhciAqKSBmZl9jb252ZXJ0X2xhbmdfdG8o bGFuZ19kdmQsCj4gQVZfTEFOR19JU082MzlfMl9CSUJMKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRk KEFWRm9ybWF0Q29udGV4dCAqcywKPiBEVkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgKmVu dHJ5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZTdHJl YW1QYXJzZVR5cGUgbmVlZF9wYXJzaW5nKQo+ID4gK3sKPiA+ICsgICAgQVZTdHJlYW0gKnN0Owo+ ID4gKyAgICBGRlN0cmVhbSAqc3RpOwo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsg ICAgc3QgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ID4gKyAgICBpZiAoIXN0KQo+ ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsKPiA+ICsgICAgc3QtPmlk ID0gZW50cnktPnN0YXJ0Y29kZTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0g QVZNRURJQV9UWVBFX1NVQlRJVExFOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0g QVZfQ09ERUNfSURfRFZEX1NVQlRJVExFOwo+ID4gKwo+ID4gKyAgICBpZiAoZW50cnktPmxhbmdf aXNvKQo+ID4gKyAgICAgICAgYXZfZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgImxhbmd1YWdlIiwg ZW50cnktPmxhbmdfaXNvLCAwKTsKPiA+ICsKPiA+ICsgICAgYXZfZGljdF9zZXQoJnN0LT5tZXRh ZGF0YSwgIlZJRVdQT1JUIiwKPiBWSUVXUE9SVF9MQUJFTFNbZW50cnktPnZpZXdwb3J0XSwgMCk7 Cj4gPiArCj4gPiArICAgIHN0LT5kaXNwb3NpdGlvbiA9IGVudHJ5LT5kaXNwb3NpdGlvbjsKPiA+ ICsKPiA+ICsgICAgc3RpID0gZmZzdHJlYW0oc3QpOwo+ID4gKyAgICBzdGktPnJlcXVlc3RfcHJv YmUgPSAwOwo+ID4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiA+ICsK PiA+ICsgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5udW0sCj4g RFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJu YWwoQVZGb3JtYXRDb250ZXh0ICpzLAo+IHVpbnQzMl90IG9mZnNldCwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwX2F0dHJfdCBzdWJwX2F0dHIs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bQo+ IERWRFZpZGVvU3VicGljdHVyZVZpZXdwb3J0IHZpZXdwb3J0KQo+ID4gK3sKPiA+ICsgICAgRFZE VmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIERWRFZp ZGVvUEdDU3VidGl0bGVTdHJlYW1FbnRyeSAqZW50cnkgPSBOVUxMOwo+ID4gKyAgICBpbnQgcmV0 ID0gMDsKPiA+ICsKPgo+ID4gKyAgICBlbnRyeSA9IGF2X21hbGxvY3ooc2l6ZW9mKERWRFZpZGVv UEdDU3VidGl0bGVTdHJlYW1FbnRyeSkpOwo+Cj4gbWlzc2luZyBjaGVjawo+Cj4gPiArICAgIGVu dHJ5LT52aWV3cG9ydCA9IHZpZXdwb3J0Owo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZp ZGVvX3N1YnBfc3RyZWFtX2FuYWx5emUocywgb2Zmc2V0LCBzdWJwX2F0dHIsCj4gZW50cnkpKSA8 IDApCj4gPiArICAgICAgICBnb3RvIGVuZF9mcmVlX2Vycm9yOwo+ID4gKwo+ID4gKyAgICAvKiBJ Rk8gc3RydWN0dXJlcyBjYW4gZGVjbGFyZSBkdXBsaWNhdGUgZW50cmllcyBmb3IgdGhlIHNhbWUK PiBzdGFydGNvZGUgKi8KPiA+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1z OyBpKyspCj4gPiArICAgICAgICBpZiAocy0+c3RyZWFtc1tpXS0+aWQgPT0gZW50cnktPnN0YXJ0 Y29kZSkKPiA+ICsgICAgICAgICAgICBnb3RvIGVuZF9mcmVlOwo+ID4gKwo+ID4gKyAgICBpZiAo KHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZChjLT5tcGVnX2N0eCwgZW50cnksCj4gQVZT VFJFQU1fUEFSU0VfRlVMTCkpIDwgMAo+ID4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRl b19zdWJwX3N0cmVhbV9hZGQocywgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfSEVBREVSUykpIDwg MCkKPiA+ICsgICAgICAgIGdvdG8gZW5kX2ZyZWVfZXJyb3I7Cj4gPiArCj4gPiArICAgIGdvdG8g ZW5kX2ZyZWU7Cj4gPiArCj4gPiArZW5kX2ZyZWVfZXJyb3I6Cj4KPiA+ICsgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdWJ0aXRsZSBzdHJlYW1cbiIpOwo+ Cj4gZGl0dG8KPgo+ID4gKwo+ID4gK2VuZF9mcmVlOgo+ID4gKyAgICBhdl9mcmVlcCgmZW50cnkp Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9hbGwoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sK PiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4g PiArICAgIGlmICghYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19zdWJwX3N0cmVhbXMp Cj4gPiArICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBjLT52dHNfaWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtczsKPiBpKyspIHsK PiA+ICsgICAgICAgIGludCByZXQgPSAwOwo+ID4gKyAgICAgICAgdWludDMyX3Qgc3VicF9jb250 cm9sOwo+ID4gKyAgICAgICAgc3VicF9hdHRyX3Qgc3VicF9hdHRyOwo+ID4gKyAgICAgICAgdmlk ZW9fYXR0cl90IHZpZGVvX2F0dHI7Cj4gPiArCj4gPiArICAgICAgICBzdWJwX2NvbnRyb2wgPSBj LT5wbGF5X3N0YXRlLnBnYy0+c3VicF9jb250cm9sW2ldOwo+ID4gKyAgICAgICAgaWYgKCEoc3Vi cF9jb250cm9sICYgMHg4MDAwMDAwMCkpCj4gPiArICAgICAgICAgICAgY29udGludWU7Cj4gPiAr Cj4gPiArICAgICAgICAvKiB0aGVyZSBjYW4gYmUgc2V2ZXJhbCBwcmVzZW50YXRpb25zIGZvciBv bmUgU1BVICovCj4gPiArICAgICAgICAvKiBmb3Igbm93LCBiZSBmbGV4aWJsZSB3aXRoIHRoZSBE QVIgY2hlY2sgZHVlIHRvIHdlaXJkCj4gYXV0aG9yaW5nICovCj4gPiArICAgICAgICB2aWRlb19h dHRyID0gYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c192aWRlb19hdHRyOwo+ID4gKyAgICAgICAg c3VicF9hdHRyID0gYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c19zdWJwX2F0dHJbaV07Cj4gPiAr Cj4gPiArICAgICAgICAvKiA0OjMgKi8KPiA+ICsgICAgICAgIGlmICghdmlkZW9fYXR0ci5kaXNw bGF5X2FzcGVjdF9yYXRpbykgewo+ID4gKyAgICAgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9f c3VicF9zdHJlYW1fYWRkX2ludGVybmFsKHMsCj4gc3VicF9jb250cm9sID4+IDI0LCBzdWJwX2F0 dHIsCj4gPiArCj4gIERWRFZJREVPX1NVQlBfVklFV1BPUlRfRlVMTFNDUkVFTikpIDwgMCkKPiA+ ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgICAgICAgICBjb250 aW51ZTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIC8qIDE2OjkgKi8KPiA+ICsg ICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2ludGVybmFsKHMsIHN1 YnBfY29udHJvbCA+Pgo+IDE2LCBzdWJwX2F0dHIsCj4gPiArCj4gIERWRFZJREVPX1NVQlBfVklF V1BPUlRfV0lERVNDUkVFTikpIDwgMCkKPiA+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4g Kwo+ID4gKyAgICAgICAgLyogMTY6OSBsZXR0ZXJib3ggKi8KPiA+ICsgICAgICAgIGlmICh2aWRl b19hdHRyLnBlcm1pdHRlZF9kZiA9PSAyIHx8IHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09Cj4g MCkKPiA+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9p bnRlcm5hbChzLAo+IHN1YnBfY29udHJvbCA+PiA4LCBzdWJwX2F0dHIsCj4gPiArCj4gIERWRFZJ REVPX1NVQlBfVklFV1BPUlRfTEVUVEVSQk9YKSkgPCAwKQo+ID4gKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgICAgLyogMTY6OSBwYW4tYW5kLXNjYW4gKi8KPiA+ ICsgICAgICAgIGlmICh2aWRlb19hdHRyLnBlcm1pdHRlZF9kZiA9PSAxIHx8IHZpZGVvX2F0dHIu cGVybWl0dGVkX2RmID09Cj4gMCkKPiA+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVv X3N1YnBfc3RyZWFtX2FkZF9pbnRlcm5hbChzLAo+IHN1YnBfY29udHJvbCwgc3VicF9hdHRyLAo+ ID4gKwo+ICBEVkRWSURFT19TVUJQX1ZJRVdQT1JUX1BBTlNDQU4pKSA8IDApCj4gPiArICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGR2ZHZpZGVvX3N1YmRlbXV4X2ZsdXNoKEFW Rm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpj ID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBpZiAoIWMtPnBsYXlfc2VnX3N0YXJ0ZWQp Cj4gPiArICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfREVC VUcsICJmbHVzaGluZyBzdWItZGVtdXhlclxuIik7Cj4gPiArICAgIGF2aW9fZmx1c2goJmMtPm1w ZWdfcGIucHViKTsKPiA+ICsgICAgZmZfcmVhZF9mcmFtZV9mbHVzaChjLT5tcGVnX2N0eCk7Cj4g PiArICAgIGMtPnBsYXlfc2VnX3N0YXJ0ZWQgPSAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg aW50IGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmJ1 ZiwgaW50Cj4gYnVmX3NpemUpCj4gPiArewo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBv cGFxdWU7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ ID4gKwo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgaW50IG5hdl9ldmVudDsKPiA+ICsK PiA+ICsgICAgaWYgKGMtPnBsYXlfZW5kKQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9G Owo+ID4gKwo+ID4gKyAgICByZXQgPSBkdmR2aWRlb19wbGF5X25leHRfcHNfYmxvY2sob3BhcXVl LCAmYy0+cGxheV9zdGF0ZSwgYnVmLAo+IGJ1Zl9zaXplLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm5hdl9ldmVudCwKPiBkdmR2aWRlb19zdWJkZW11eF9mbHVz aCk7Cj4gPiArCj4gPiArICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiA+ICsgICAgICAg IGMtPm1wZWdfcGIucHViLmVvZl9yZWFjaGVkID0gMTsKPiA+ICsgICAgICAgIGMtPnBsYXlfZW5k ID0gMTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICBpZiAocmV0ID49IDAgJiYgbmF2X2V2ZW50ID09IERWRE5BVl9OQVZfUEFD S0VUKQo+ID4gKyAgICAgICAgcmV0dXJuIEZGRVJST1JfUkVETzsKPiA+ICsKPiA+ICsgICAgcmV0 dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fc3ViZGVtdXhf Y2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENv bnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGF2X2ZyZWVwKCZjLT5tcGVn X3BiLnB1Yi5idWZmZXIpOwo+ID4gKyAgICBhdl9mcmVlcCgmYy0+bXBlZ19wYik7Cj4gPiArICAg IGF2Zm9ybWF0X2Nsb3NlX2lucHV0KCZjLT5tcGVnX2N0eCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgZHZkdmlkZW9fc3ViZGVtdXhfb3BlbihBVkZvcm1hdENvbnRleHQgKnMpCj4gPiAr ewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsK PiA+ICsgICAgaW50IHJldCA9IDA7Cj4gPiArCj4gPiArICAgIGlmICghKGMtPm1wZWdfZm10ID0g YXZfZmluZF9pbnB1dF9mb3JtYXQoIm1wZWciKSkpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9ERU1VWEVSX05PVF9GT1VORDsKPiA+ICsKPiA+ICsgICAgaWYgKCEoYy0+bXBlZ19jdHggPSBh dmZvcm1hdF9hbGxvY19jb250ZXh0KCkpKQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKPiA+ICsKPiA+ICsgICAgaWYgKCEoYy0+bXBlZ19idWYgPSBhdl9tYWxsb2N6KERWRFZJ REVPX0JMT0NLX1NJWkUpKSkgewo+ID4gKyAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KGMt Pm1wZWdfY3R4KTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgZmZpb19pbml0X2NvbnRleHQoJmMtPm1wZWdfcGIsIGMt Pm1wZWdfYnVmLCBEVkRWSURFT19CTE9DS19TSVpFLCAwLAo+IHMsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgIGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSwgTlVMTCwgTlVMTCk7Cj4gPiAr ICAgIGMtPm1wZWdfcGIucHViLnNlZWthYmxlID0gMDsKPiA+ICsKPiA+ICsgICAgaWYgKChyZXQg PSBmZl9jb3B5X3doaXRlYmxhY2tsaXN0cyhjLT5tcGVnX2N0eCwgcykpIDwgMCkgewo+ID4gKyAg ICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KGMtPm1wZWdfY3R4KTsKPiA+ICsKPiA+ICsgICAg ICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPmZs YWdzID0gQVZGTVRfRkxBR19DVVNUT01fSU8gfCBBVkZNVF9GTEFHX0dFTlBUUzsKPiA+ICsgICAg Yy0+bXBlZ19jdHgtPmN0eF9mbGFncyB8PSBBVkZNVENUWF9VTlNFRUtBQkxFOwo+ID4gKyAgICBj LT5tcGVnX2N0eC0+cHJvYmVzaXplID0gMDsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPm1heF9hbmFs eXplX2R1cmF0aW9uID0gMDsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPmludGVycnVwdF9jYWxsYmFj ayA9IHMtPmludGVycnVwdF9jYWxsYmFjazsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPnBiID0gJmMt Pm1wZWdfcGIucHViOwo+ID4gKyAgICBjLT5tcGVnX2N0eC0+aW9fb3BlbiA9IE5VTEw7Cj4gPiAr Cj4gPiArICAgIGlmICgocmV0ID0gYXZmb3JtYXRfb3Blbl9pbnB1dCgmYy0+bXBlZ19jdHgsICIi LCBjLT5tcGVnX2ZtdCwKPiBOVUxMKSkgPCAwKSB7Cj4gPiArICAgICAgICBhdmZvcm1hdF9mcmVl X2NvbnRleHQoYy0+bXBlZ19jdHgpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPgo+ IHlvdSBjYW4gZHJvcCB0aGlzCj4KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0 Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3JlYWRfaGVhZGVyKEFWRm9y bWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0g cy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsgICAg aWYgKGMtPm9wdF90aXRsZSA9PSAwKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0lO Rk8sICJEZWZhdWx0aW5nIHRvIHRpdGxlICMxLiAiCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJUaGlzIGlzIG5vdCBhbHdheXMgdGhlIG1haW4gZmVhdHVyZSwKPiB2YWxpZGF0 aW9uIHN1Z2dlc3RlZC5cbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgYy0+b3B0X3RpdGxlID0gMTsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoYy0+b3B0X3BnYykgewo+ID4gKyAgICAgICAg aWYgKGMtPm9wdF9wZyA9PSAwKQo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJJbnZhbGlkIGNvb3JkaW5hdGVzLiBJZiAtcGdjIGlzCj4gc2V0LCAtcGcgbXVzdCBiZSBz ZXQgdG9vLlxuIik7Cj4gPiArICAgICAgICBlbHNlIGlmIChjLT5vcHRfY2hhcHRlcl9zdGFydCA+ IDEgfHwgYy0+b3B0X2NoYXB0ZXJfZW5kID4gMCB8fAo+IGMtPm9wdF9wcmVpbmRleCkKPiA+ICsg ICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiLXBnYyBpcyBub3QgY29tcGF0aWJs ZSB3aXRoIHRoZQo+IC1wcmVpbmRleCBvciAiCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIi1jaGFwdGVyX3N0YXJ0Ly1jaGFwdGVyX2VuZAo+IG9wdGlvbnNcbiIpOwo+ ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX2lmb19vcGVuKHMpKSA8IDApCj4gPiArICAg ICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICBpZiAoYy0+b3B0X3ByZWluZGV4ICYmIChy ZXQgPSBkdmR2aWRlb19wZ2NfcHJlaW5kZXgocykpIDwgMCkKPiA+ICsgICAgICAgIHJldHVybiBy ZXQ7Cj4gPiArCj4gPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fcGxheV9vcGVuKHMsICZjLT5w bGF5X3N0YXRlKSkgPCAwCj4gPiArICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX3N1YmRl bXV4X29wZW4ocykpIDwgMAo+ID4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRlb192aWRl b19zdHJlYW1fc2V0dXAocykpIDwgMAo+ID4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRl b19hdWRpb19zdHJlYW1fYWRkX2FsbChzKSkgPCAwCj4gPiArICAgICAgICAgICAgfHwgKHJldCA9 IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9hbGwocykpIDwgMCkKPiA+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gPiArCj4gPiArICAgIGlmICghYy0+b3B0X3ByZWluZGV4KQo+ID4gKyAgICAgICAg cmV0dXJuIGR2ZHZpZGVvX3BnY19jaGFwdGVyc19zZXR1cChzKTsKPiA+ICsKPiA+ICsgICAgcmV0 dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19yZWFkX3BhY2tl dChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCj4gPiArewo+ID4gKyAgICBEVkRW aWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaW50IHJl dDsKPiA+ICsgICAgZW51bSBBVk1lZGlhVHlwZSBzdF90eXBlOwo+ID4gKyAgICBpbnQ2NF90IGN1 cl9kZWx0YSA9IDA7Cj4gPiArCj4gPiArICAgIGlmIChjLT5wbGF5X2VuZCkKPiA+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICsKPiA+ICsgICAgcmV0ID0gYXZfcmVhZF9mcmFtZShj LT5tcGVnX2N0eCwgcGt0KTsKPiA+ICsKPiA+ICsgICAgaWYgKHJldCA8IDApCj4gPiArICAgICAg ICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICBpZiAoIWMtPnBsYXlfc2VnX3N0YXJ0ZWQpCj4g PiArICAgICAgICBjLT5wbGF5X3NlZ19zdGFydGVkID0gMTsKPiA+ICsKPiA+ICsgICAgaWYgKHBr dC0+c3RyZWFtX2luZGV4ID49IHMtPm5iX3N0cmVhbXMpIHsKPgo+ID4gKyAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19ERUJVRywgImRpc2NhcmRpbmcgZnJhbWUgd2l0aCB1bmtub3duCj4gc3RyZWFt XG4iKTsKPgo+IHByaW50IHRoZSB1bnJlY29uZ25pemVkIHN0cmVhbSBpbmRleAo+Cj4gPiArICAg ICAgICBnb3RvIHNraXBfcmVkbzsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBzdF90eXBlID0K PiBjLT5tcGVnX2N0eC0+c3RyZWFtc1twa3QtPnN0cmVhbV9pbmRleF0tPmNvZGVjcGFyLT5jb2Rl Y190eXBlOwo+ID4gKwo+ID4gKyAgICBpZiAoIWMtPnBsYXlfc3RhcnRlZCkgewo+ID4gKyAgICAg ICAgaWYgKHN0X3R5cGUgIT0gQVZNRURJQV9UWVBFX1ZJREVPIHx8IHBrdC0+cHRzID09IEFWX05P UFRTX1ZBTFVFCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fHwgcGt0LT5kdHMgPT0gQVZfTk9QVFNfVkFMVUUKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8fCAhKHBrdC0+ZmxhZ3MgJgo+IEFWX1BLVF9GTEFHX0tFWSkp IHsKPgo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJkaXNjYXJkaW5n IG5vbi12aWRlby1rZXlmcmFtZSBhdAo+IHN0YXJ0XG4iKTsKPgo+IG9mIHBhY2tldCB3aXRoIHVu c2V0IFBUUy9EVFMgYXQgc3RhcnQKPgo+ID4gKyAgICAgICAgICAgIGdvdG8gc2tpcF9yZWRvOwo+ ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgYy0+Zmlyc3RfcHRzID0gcGt0LT5wdHM7 Cj4gPiArICAgICAgICBjLT5wbGF5X3N0YXJ0ZWQgPSAxOwo+ID4gKwo+ID4gKyAgICAgICAgcGt0 LT5wdHMgPSAwOwo+ID4gKyAgICAgICAgcGt0LT5kdHMgPSBjLT5wbGF5X3N0YXRlLnRzX29mZnNl dCAtIHBrdC0+cHRzOwo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgY3VyX2RlbHRhID0g Yy0+cGxheV9zdGF0ZS50c19vZmZzZXQgLSBjLT5maXJzdF9wdHM7Cj4gPiArCj4gPiArICAgICAg ICBpZiAoYy0+cGxheV9zdGF0ZS5uYl92b2J1c19wbGF5ZWQgPT0gMSAmJiAocGt0LT5wdHMgPT0K PiBBVl9OT1BUU19WQUxVRQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfHwgIHBrdC0+ZHRzID09Cj4gQVZfTk9QVFNfVkFMVUUKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwa3QtPnB0cyArCj4g Y3VyX2RlbHRhKSA8IDApKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJV RywgImRpc2NhcmRpbmcgZnJhbWUgd2l0aCBuZWdhdGl2ZSBvcgo+IHVuc2V0IHRpbWVzdGFtcCAi Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIih0aGlzIGlzIE9LIGF0 IHRoZSBzdGFydCBvZiB0aGUKPiBmaXJzdCBwbGF5YmFjayBWT0JVKVxuIik7Cj4gPiArICAgICAg ICAgICAgZ290byBza2lwX3JlZG87Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBp ZiAocGt0LT5wdHMgIT0gQVZfTk9QVFNfVkFMVUUpCj4gPiArICAgICAgICAgICAgcGt0LT5wdHMg Kz0gY3VyX2RlbHRhOwo+ID4gKyAgICAgICAgaWYgKHBrdC0+ZHRzICE9IEFWX05PUFRTX1ZBTFVF KQo+ID4gKyAgICAgICAgICAgIHBrdC0+ZHRzICs9IGN1cl9kZWx0YTsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX1RSQUNFLCAic3Q9JWQgcHRzPSVsZCBkdHM9JWxk IHRzX29mZnNldD0lbGQKPiBmaXJzdF9wdHM9JWxkXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCwgcGt0LT5wdHMsIHBrdC0+ZHRzLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5wbGF5X3N0YXRlLnRzX29mZnNldCwgYy0+Zmly c3RfcHRzKTsKPiA+ICsgICAgaWYgKHBrdC0+cHRzIDwgMCkKPiA+ICsgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgZnJhbWUgUFRTIEAgc3Q9JWQgcHRzPSVsZAo+IGR0 cz0lbGRcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdC0+c3Ry ZWFtX2luZGV4LCBwa3QtPnB0cywKPiBwa3QtPmR0cyk7Cj4gPiArCj4gPiArICAgIHJldHVybiBj LT5wbGF5X2VuZCA/IEFWRVJST1JfRU9GIDogMDsKPiA+ICsKPiA+ICtza2lwX3JlZG86Cj4gPiAr ICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+ID4gKyAgICByZXR1cm4gRkZFUlJPUl9SRURPOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2Nsb3NlKEFWRm9ybWF0Q29udGV4 dCAqcykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9k YXRhOwo+ID4gKwo+ID4gKyAgICBkdmR2aWRlb19zdWJkZW11eF9jbG9zZShzKTsKPiA+ICsgICAg ZHZkdmlkZW9fcGxheV9jbG9zZShzLCAmYy0+cGxheV9zdGF0ZSk7Cj4gPiArICAgIGR2ZHZpZGVv X2lmb19jbG9zZShzKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g KyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKERWRFZpZGVvRGVtdXhDb250ZXh0LCB4KQo+ID4g K3N0YXRpYyBjb25zdCBBVk9wdGlvbiBkdmR2aWRlb19vcHRpb25zW10gPSB7Cj4gPiArICAgIHsi YW5nbGUiLCAgICAgICAgICAgInBsYXliYWNrIGFuZ2xlIG51bWJlciIsCj4gICAgICAgICAgICAg T0ZGU0VUKG9wdF9hbmdsZSksICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTEg fSwKPiAgMSwgICAgICAgICAgOSwgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9 LAo+ID4gKyAgICB7ImNoYXB0ZXJfZW5kIiwgICAgICJleGl0IGNoYXB0ZXIgKFBUVCkgbnVtYmVy ICgwPWVuZCkiLAo+ICAgICAgICAgICAgIE9GRlNFVChvcHRfY2hhcHRlcl9lbmQpLCAgICBBVl9P UFRfVFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sCj4gIDAsICAgICAgICAgIDk5LCAgICAgICAgQVZf T1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiA+ICsgICAgeyJjaGFwdGVyX3N0YXJ0IiwgICAi ZW50cnkgY2hhcHRlciAoUFRUKSBudW1iZXIiLAo+ICAgICAgICAgICAgICBPRkZTRVQob3B0X2No YXB0ZXJfc3RhcnQpLCAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MSB9LAo+ICAxLCAgICAg ICAgICA5OSwgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsi cGciLCAgICAgICAgICAgICAgImVudHJ5IFBHIG51bWJlciAoMD1hdXRvKSIsCj4gICAgICAgICAg ICAgIE9GRlNFVChvcHRfcGcpLCAgICAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2 ND0wIH0sCj4gIDAsICAgICAgICAgIDI1NSwgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFS QU0gfSwKPiA+ICsgICAgeyJwZ2MiLCAgICAgICAgICAgICAiZW50cnkgUEdDIG51bWJlciAoMD1h dXRvKSIsCj4gICAgICAgICAgICAgT0ZGU0VUKG9wdF9wZ2MpLCAgICAgICAgICAgIEFWX09QVF9U WVBFX0lOVCwgICAgeyAuaTY0PTAgfSwKPiAgMCwgICAgICAgICAgOTk5LCAgICAgICBBVl9PUFRf RkxBR19ERUNPRElOR19QQVJBTSB9LAo+ID4gKyAgICB7InByZWluZGV4IiwgICAgICAgICJlbmFi bGUgZm9yIGFjY3VyYXRlIGNoYXB0ZXIgbWFya2Vycywgc2xvdwo+ICgyLXBhc3MgcmVhZCkiLCAg T0ZGU0VUKG9wdF9wcmVpbmRleCksICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgeyAuaTY0PTAK PiB9LCAgICAgMCwgICAgICAgICAgMSwgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJB TSB9LAo+ID4gKyAgICB7InJlZ2lvbiIsICAgICAgICAgICJwbGF5YmFjayByZWdpb24gbnVtYmVy ICgwPWZyZWUpIiwKPiAgICAgICAgICAgICBPRkZTRVQob3B0X3JlZ2lvbiksICAgICAgICAgQVZf T1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LAo+ICAwLCAgICAgICAgICA4LCAgICAgICAgIEFW X09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsidGl0bGUiLCAgICAgICAgICAg InRpdGxlIG51bWJlciAoMD1hdXRvKSIsCj4gICAgICAgICAgICAgT0ZGU0VUKG9wdF90aXRsZSks ICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTAgfSwKPiAgMCwgICAgICAgICAg OTksICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ID4gKyAgICB7InRyaW0i LCAgICAgICAgICAgICJ0cmltIHBhZGRpbmcgY2VsbHMgZnJvbSBzdGFydCIsCj4gICAgICAgICAg ICAgT0ZGU0VUKG9wdF90cmltKSwgICAgICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgeyAuaTY0 PTEgfSwKPiAgMCwgICAgICAgICAgMSwgICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJB TSB9LAo+ID4gKyAgICB7TlVMTH0KPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBBVkNs YXNzIGR2ZHZpZGVvX2NsYXNzID0gewo+ID4gKyAgICAuY2xhc3NfbmFtZSA9ICJEVkQtVmlkZW8g ZGVtdXhlciIsCj4gPiArICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4g PiArICAgIC5vcHRpb24gICAgID0gZHZkdmlkZW9fb3B0aW9ucywKPiA+ICsgICAgLnZlcnNpb24g ICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQKPiA+ICt9Owo+ID4gKwo+ID4gK2NvbnN0IEFWSW5w dXRGb3JtYXQgZmZfZHZkdmlkZW9fZGVtdXhlciA9IHsKPiA+ICsgICAgLm5hbWUgICAgICAgICAg ID0gImR2ZHZpZGVvIiwKPiA+ICsgICAgLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9DT05GSUdf U01BTEwoIkRWRC1WaWRlbyIpLAo+ID4gKyAgICAucHJpdl9jbGFzcyAgICAgPSAmZHZkdmlkZW9f Y2xhc3MsCj4gPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihEVkRWaWRlb0RlbXV4Q29u dGV4dCksCj4gPiArICAgIC5mbGFncyAgICAgICAgICA9IEFWRk1UX05PRklMRSB8IEFWRk1UX1NI T1dfSURTIHwgQVZGTVRfVFNfRElTQ09OVAo+IHwgQVZGTVRfTk9fQllURV9TRUVLIHwgQVZGTVRf Tk9HRU5TRUFSQ0ggfCBBVkZNVF9OT0JJTlNFQVJDSCwKPiA+ICsgICAgLmZsYWdzX2ludGVybmFs ID0gRkZfRk1UX0lOSVRfQ0xFQU5VUCwKPiA+ICsgICAgLnJlYWRfY2xvc2UgICAgID0gZHZkdmlk ZW9fY2xvc2UsCj4gPiArICAgIC5yZWFkX2hlYWRlciAgICA9IGR2ZHZpZGVvX3JlYWRfaGVhZGVy LAo+ID4gKyAgICAucmVhZF9wYWNrZXQgICAgPSBkdmR2aWRlb19yZWFkX3BhY2tldAo+ID4gK307 Cj4KPiBMR1RNIG90aGVyd2lzZSwgdGhhbmtzLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRl dmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVn LWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVn LWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K