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 B631646228 for ; Thu, 11 Jan 2024 03:49:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6B65568CFA3; Thu, 11 Jan 2024 05:49:11 +0200 (EET) Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B87E68CCEE for ; Thu, 11 Jan 2024 05:49:04 +0200 (EET) Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-28d00f8ddbaso1276986a91.1 for ; Wed, 10 Jan 2024 19:49:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704944943; x=1705549743; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=S3tGXUtxQGF9cc6sXwccyXcAhNyf/326qEvhvA/GD+Q=; b=bE9ERlAWH9Y9GDp3vUhnmwxFoNhzd4UVwj20GLlpB99OlkOt7YxTCLCR4r7Dxp0KUe uyHmI5qEW6RRS8Q8isLlR6KlBRb3uUSz71/D953K6r9aTaRdLumLxZo1FL3D7EcGAaoJ oqA2scdSbQtZRKBoJQ9z0savROG28YfesTlqZYN7gyI+yOaFa4oMGZvHOYEec3wXtWYk jeL237u4XqmLLKoFvwk5gLCB8pv1wbME60n1USGCkWZYtxmxhLi2LH352NUd0LyUbkMv OeH9zLGGiNa6B6YgbxaFQ+hPJWkaJwkBBXBQE8wohNP8IZDl5noUwxjYCDeFAmesFezY 9k/w== X-Gm-Message-State: AOJu0YxBdVsGbSFgCAloXdsXUjohOUWgv37cGsltVtu4jc/YbNDFqWow SIUr5ALJgU1dBUbk2PdBHRnTszEQp/22sqgUPkmpEb6jrDBYUppoVoXg1moU X-Google-Smtp-Source: AGHT+IEzYncRZzkYAkLQOTnEOZaGIPf2lC//pxA/Tn023+PtknxWwQhXKcxc8khcAPJAMM00RcIu0y/0r68azz5ZCw0= X-Received: by 2002:a17:90b:33c8:b0:286:4055:63e0 with SMTP id lk8-20020a17090b33c800b00286405563e0mr1071154pjb.0.1704944942519; Wed, 10 Jan 2024 19:49:02 -0800 (PST) MIME-Version: 1.0 References: <20240110084608.1889310-1-marth64@proxyid.net> <20240111034637.2058921-1-marth64@proxyid.net> In-Reply-To: <20240111034637.2058921-1-marth64@proxyid.net> From: Marth64 Date: Wed, 10 Jan 2024 21:48:51 -0600 Message-ID: To: Marth64 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v3] dvdvideo: add DVD-Video demuxer, powered by libdvdnav and libdvdread X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: ffmpeg-devel@ffmpeg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QWxzbyBkZWxldGVkIG1vcmUgcmVkdW5kYW50IGNvZGUgaW4gdjNeCgpPbiBXZWQsIEphbiAxMCwg MjAyNCBhdCA5OjQ44oCvUE0gTWFydGg2NCA8bWFydGg2NEBwcm94eWlkLm5ldD4gd3JvdGU6Cgo+ IEZpeGVzIGZvciBzZXZlcmFsIGF1dGhvcmluZyBzdHlsZXMvZGlzY3MuCj4gZmZtcGVnIENMSSBt YXkgcmVwb3J0IHdyb25nIG91dHB1dCB0aW1lIGFuZCBzaG93IHByb2dyZXNzIHN0cmFuZ2VseSBm b3IKPiBzb21lIGRpc2NzLgo+IFRoaXMgaXMgbm90IHJlcHJvZHVjaWJsZSBwcmlvciB0byBgZmZ0 b29scy9mZm1wZWc6IGNvbnZlcnQgdG8gYSB0aHJlYWRlZAo+IGFyY2hpdGVjdHVyZWAKPiBCdXQs IEkgYW0gbG9va2luZyBpbnRvIGl0Lgo+Cj4gU2lnbmVkLW9mZi1ieTogTWFydGg2NCA8bWFydGg2 NEBwcm94eWlkLm5ldD4KPiAtLS0KPiAgQ2hhbmdlbG9nICAgICAgICAgICAgICAgICB8ICAgIDEg Kwo+ICBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICAgOCArCj4gIGxpYmF2Zm9ybWF0L01h a2VmaWxlICAgICAgfCAgICAxICsKPiAgbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jICB8ICAgIDEg Kwo+ICBsaWJhdmZvcm1hdC9hdmxhbmd1YWdlLmMgIHwgICAxMCArLQo+ICBsaWJhdmZvcm1hdC9k dmR2aWRlb2RlYy5jIHwgMTAwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIDYgZmlsZXMgY2hhbmdlZCwgMTAyMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYwo+Cj4gZGlmZiAt LWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4IDViMjg5OWQwNWIuLjFiMzc3ZmVk MmYgMTAwNjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIvQ2hhbmdlbG9nCj4gQEAgLTE4LDYg KzE4LDcgQEAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gbGF2dS9ldmFsOiBpbnRyb2R1Y2UgcmFuZG9t aSgpIGZ1bmN0aW9uIGluIGV4cHJlc3Npb25zCj4gIC0gVlZDIGRlY29kZXIKPiAgLSBmc3luYyBm aWx0ZXIKPiArLSBEVkQtVmlkZW8gZGVtdXhlciwgcG93ZXJlZCBieSBsaWJkdmRuYXYgYW5kIGxp YmR2ZHJlYWQKPgo+ICB2ZXJzaW9uIDYuMToKPiAgLSBsaWJhcmliY2FwdGlvbiBkZWNvZGVyCj4g ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IGU4N2EwOWNlODMuLjFm MjFmNGYxYzIgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAg LTIyNyw2ICsyMjcsOCBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gICAgLS1lbmFibGUt bGliZGF2czIgICAgICAgIGVuYWJsZSBBVlMyIGRlY29kaW5nIHZpYSBsaWJkYXZzMiBbbm9dCj4g ICAgLS1lbmFibGUtbGliZGMxMzk0ICAgICAgIGVuYWJsZSBJSURDLTEzOTQgZ3JhYmJpbmcgdXNp bmcgbGliZGMxMzk0Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJyYXcxMzk0 IFtub10KPiArICAtLWVuYWJsZS1saWJkdmRuYXYgICAgICAgZW5hYmxlIGxpYmR2ZG5hdiwgbmVl ZGVkIGZvciBEVkQgZGVtdXhpbmcgW25vXQo+ICsgIC0tZW5hYmxlLWxpYmR2ZHJlYWQgICAgICAg ZW5hYmxlIGxpYmR2ZHJlYWQsIG5lZWRlZCBmb3IgRFZEIGRlbXV4aW5nCj4gW25vXQo+ICAgIC0t ZW5hYmxlLWxpYmZkay1hYWMgICAgICBlbmFibGUgQUFDIGRlL2VuY29kaW5nIHZpYSBsaWJmZGst YWFjIFtub10KPiAgICAtLWVuYWJsZS1saWJmbGl0ZSAgICAgICAgZW5hYmxlIGZsaXRlICh2b2lj ZSBzeW50aGVzaXMpIHN1cHBvcnQgdmlhCj4gbGliZmxpdGUgW25vXQo+ICAgIC0tZW5hYmxlLWxp YmZvbnRjb25maWcgICBlbmFibGUgbGliZm9udGNvbmZpZywgdXNlZnVsIGZvciBkcmF3dGV4dAo+ IGZpbHRlciBbbm9dCj4gQEAgLTE4MDYsNiArMTgwOCw4IEBAIEVYVEVSTkFMX0xJQlJBUllfR1BM X0xJU1Q9Igo+ICAgICAgZnJlaTByCj4gICAgICBsaWJjZGlvCj4gICAgICBsaWJkYXZzMgo+ICsg ICAgbGliZHZkbmF2Cj4gKyAgICBsaWJkdmRyZWFkCj4gICAgICBsaWJydWJiZXJiYW5kCj4gICAg ICBsaWJ2aWRzdGFiCj4gICAgICBsaWJ4MjY0Cj4gQEAgLTM1MTksNiArMzUyMyw4IEBAIGR0c19k ZW11eGVyX3NlbGVjdD0iZGNhX3BhcnNlciIKPiAgZHRzaGRfZGVtdXhlcl9zZWxlY3Q9ImRjYV9w YXJzZXIiCj4gIGR2X2RlbXV4ZXJfc2VsZWN0PSJkdnByb2ZpbGUiCj4gIGR2X211eGVyX3NlbGVj dD0iZHZwcm9maWxlIgo+ICtkdmR2aWRlb19kZW11eGVyX3NlbGVjdD0ibXBlZ3BzX2RlbXV4ZXIi Cj4gK2R2ZHZpZGVvX2RlbXV4ZXJfZGVwcz0ibGliZHZkbmF2IGxpYmR2ZHJlYWQiCj4gIGR4YV9k ZW11eGVyX3NlbGVjdD0icmlmZmRlYyIKPiAgZWFjM19kZW11eGVyX3NlbGVjdD0iYWMzX3BhcnNl ciIKPiAgZXZjX2RlbXV4ZXJfc2VsZWN0PSJldmNfZnJhbWVfbWVyZ2VfYnNmIGV2Y19wYXJzZXIi Cj4gQEAgLTY3NjAsNiArNjc2Niw4IEBAIGVuYWJsZWQgbGliZGF2MWQgICAgICAgICAgJiYgcmVx dWlyZV9wa2dfY29uZmlnCj4gbGliZGF2MWQgImRhdjFkID49IDAuNS4wIiAiZGF2MWQKPiAgZW5h YmxlZCBsaWJkYXZzMiAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGF2czIgImRh dnMyID49IDEuNi4wIgo+IGRhdnMyLmggZGF2czJfZGVjb2Rlcl9vcGVuCj4gIGVuYWJsZWQgbGli ZGMxMzk0ICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmRjMTM5NCBsaWJkYzEzOTQt Mgo+IGRjMTM5NC9kYzEzOTQuaCBkYzEzOTRfbmV3Cj4gIGVuYWJsZWQgbGliZHJtICAgICAgICAg ICAgJiYgY2hlY2tfcGtnX2NvbmZpZyBsaWJkcm0gbGliZHJtIHhmODZkcm0uaAo+IGRybUdldFZl cnNpb24KPiArZW5hYmxlZCBsaWJkdmRuYXYgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcg bGliZHZkbmF2ICJkdmRuYXYgPj0KPiA2LjEuMSIgZHZkbmF2L2R2ZG5hdi5oIGR2ZG5hdl9vcGVu Mgo+ICtlbmFibGVkIGxpYmR2ZHJlYWQgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJk dmRyZWFkICJkdmRyZWFkID49Cj4gNi4xLjIiIGR2ZHJlYWQvZHZkX3JlYWRlci5oIERWRE9wZW4y IC1sZHZkcmVhZAo+ICBlbmFibGVkIGxpYmZka19hYWMgICAgICAgICYmIHsgY2hlY2tfcGtnX2Nv bmZpZyBsaWJmZGtfYWFjIGZkay1hYWMKPiAiZmRrLWFhYy9hYWNlbmNfbGliLmgiIGFhY0VuY09w ZW4gfHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmVxdWlyZSBsaWJmZGtf YWFjIGZkay1hYWMvYWFjZW5jX2xpYi5oCj4gYWFjRW5jT3BlbiAtbGZkay1hYWMgJiYKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiAidXNpbmcgbGliZmRrIHdpdGhvdXQg cGtnLWNvbmZpZyI7Cj4gfSB9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIv bGliYXZmb3JtYXQvTWFrZWZpbGUKPiBpbmRleCA1ODFlMzc4ZDk1Li4zYzFjYjIxZmUyIDEwMDY0 NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZp bGUKPiBAQCAtMTkyLDYgKzE5Miw3IEBAIE9CSlMtJChDT05GSUdfRFRTX01VWEVSKSAgICAgICAg ICAgICAgICAgKz0gcmF3ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19EVl9NVVhFUikgICAgICAgICAg ICAgICAgICArPSBkdmVuYy5vCj4gIE9CSlMtJChDT05GSUdfRFZCU1VCX0RFTVVYRVIpICAgICAg ICAgICAgKz0gZHZic3ViLm8gcmF3ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19EVkJUWFRfREVNVVhF UikgICAgICAgICAgICArPSBkdmJ0eHQubyByYXdkZWMubwo+ICtPQkpTLSQoQ09ORklHX0RWRFZJ REVPX0RFTVVYRVIpICAgICAgICAgICs9IGR2ZHZpZGVvZGVjLm8KPiAgT0JKUy0kKENPTkZJR19E WEFfREVNVVhFUikgICAgICAgICAgICAgICArPSBkeGEubwo+ICBPQkpTLSQoQ09ORklHX0VBX0NE QVRBX0RFTVVYRVIpICAgICAgICAgICs9IGVhY2RhdGEubwo+ICBPQkpTLSQoQ09ORklHX0VBX0RF TVVYRVIpICAgICAgICAgICAgICAgICs9IGVsZWN0cm9uaWNhcnRzLm8KPiBkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gaW5k ZXggY2U2YmU1ZjA0ZC4uZWE4OGQ0YzA5NCAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxm b3JtYXRzLmMKPiArKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiBAQCAtMTUwLDYgKzE1 MCw3IEBAIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9kdl9kZW11eGVyOwo+ICBleHRl cm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfZHZfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklu cHV0Rm9ybWF0ICBmZl9kdmJzdWJfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3Jt YXQgIGZmX2R2YnR4dF9kZW11eGVyOwo+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZf ZHZkdmlkZW9fZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R4YV9k ZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFfZGVtdXhlcjsKPiAg ZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gZGlmZiAt LWdpdCBhL2xpYmF2Zm9ybWF0L2F2bGFuZ3VhZ2UuYyBiL2xpYmF2Zm9ybWF0L2F2bGFuZ3VhZ2Uu Ywo+IGluZGV4IDc4MmE1OGFkYjIuLjIwMmQ5YWE4MzUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3Jt YXQvYXZsYW5ndWFnZS5jCj4gKysrIGIvbGliYXZmb3JtYXQvYXZsYW5ndWFnZS5jCj4gQEAgLTI5 LDcgKzI5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTGFuZ0VudHJ5IHsKPiAgICAgIHVpbnQxNl90IG5l eHRfZXF1aXZhbGVudDsKPiAgfSBMYW5nRW50cnk7Cj4KPiAtc3RhdGljIGNvbnN0IHVpbnQxNl90 IGxhbmdfdGFibGVfY291bnRzW10gPSB7IDQ4NCwgMjAsIDE4NCB9Owo+ICtzdGF0aWMgY29uc3Qg dWludDE2X3QgbGFuZ190YWJsZV9jb3VudHNbXSA9IHsgNDg0LCAyMCwgMTkwIH07Cj4gIHN0YXRp YyBjb25zdCB1aW50MTZfdCBsYW5nX3RhYmxlX29mZnNldHNbXSA9IHsgMCwgNDg0LCA1MDQgfTsK Pgo+ICBzdGF0aWMgY29uc3QgTGFuZ0VudHJ5IGxhbmdfdGFibGVbXSA9IHsKPiBAQCAtNTM5LDcg KzUzOSw3IEBAIHN0YXRpYyBjb25zdCBMYW5nRW50cnkgbGFuZ190YWJsZVtdID0gewo+ICAgICAg LyowNTAxKi8geyAic2xrIiwgIDY0NyB9LAo+ICAgICAgLyowNTAyKi8geyAic3FpIiwgIDY1MiB9 LAo+ICAgICAgLyowNTAzKi8geyAiemhvIiwgIDY4NiB9LAo+IC0gICAgLyotLS0tLSBBVl9MQU5H X0lTTzYzOV8xIGVudHJpZXMgKDE4NCkgLS0tLS0qLwo+ICsgICAgLyotLS0tLSBBVl9MQU5HX0lT TzYzOV8xIGVudHJpZXMgKDE5MCkgLS0tLS0qLwo+ICAgICAgLyowNTA0Ki8geyAiYWEiICwgICAg MCB9LAo+ICAgICAgLyowNTA1Ki8geyAiYWIiICwgICAgMSB9LAo+ICAgICAgLyowNTA2Ki8geyAi YWUiICwgICAzMyB9LAo+IEBAIC03MjQsNiArNzI0LDEyIEBAIHN0YXRpYyBjb25zdCBMYW5nRW50 cnkgbGFuZ190YWJsZVtdID0gewo+ICAgICAgLyowNjg1Ki8geyAiemEiICwgIDQ3OCB9LAo+ICAg ICAgLyowNjg2Ki8geyAiemgiICwgICA3OCB9LAo+ICAgICAgLyowNjg3Ki8geyAienUiICwgIDQ4 MCB9LAo+ICsgICAgLyowNjg4Ki8geyAiaW4iICwgIDE5NSB9LCAvKiBkZXByZWNhdGVkICovCj4g KyAgICAvKjA2ODkqLyB7ICJpdyIgLCAgMTcyIH0sIC8qIGRlcHJlY2F0ZWQgKi8KPiArICAgIC8q MDY5MCovIHsgImppIiAsICA0NzIgfSwgLyogZGVwcmVjYXRlZCAqLwo+ICsgICAgLyowNjkxKi8g eyAianciICwgIDIwMiB9LCAvKiBkZXByZWNhdGVkICovCj4gKyAgICAvKjA2OTIqLyB7ICJtbyIg LCAgMzU4IH0sIC8qIGRlcHJlY2F0ZWQgKi8KPiArICAgIC8qMDY5MyovIHsgInNoIiAsICA2OTMg fSwgLyogZGVwcmVjYXRlZCAobm8gZXF1aXZhbGVudCkgKi8KPiAgICAgIHsgIiIsIDAgfQo+ICB9 Owo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMgYi9saWJhdmZvcm1h dC9kdmR2aWRlb2RlYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw Li44NTY5NTFhOGYwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L2R2ZHZpZGVv ZGVjLmMKPiBAQCAtMCwwICsxLDEwMDEgQEAKPiArLyoKPiArICogRFZELVZpZGVvIGRlbXV4ZXIs IHBvd2VyZWQgYnkgbGliZHZkbmF2IGFuZCBsaWJkdmRyZWFkCj4gKyAqIEF1dGhvcjogTWFydGg2 NCA8bWFydGg2NEBwcm94eWlkLm5ldD4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsg Kgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsg KiBEVkQtVmlkZW8gaXMgbm90IGEgZGlyZWN0bHkgYWNjZXNzaWJsZSwgbGluZWFyIGNvbnRhaW5l ciBmb3JtYXQgaW4gdGhlCj4gKyAqIHRyYWRpdGlvbmFsIHNlbnNlLiBJbnN0ZWFkLCBpdCBhbGxv d3MgZm9yIGNvbXBsZXggYW5kIHByb2dyYW1tYXRpYwo+ICsgKiBwbGF5YmFjayBvZiBjYXJlZnVs bHkgbXV4ZWQgc3RyZWFtcy4gQSB0eXBpY2FsIERWRCBwbGF5ZXIgcmVsaWVzIG9uCj4gKyAqIHVz ZXIgR1VJIGludGVyYWN0aW9uIHRvIGRyaXZlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGRlbXV4aW5n Lgo+ICsgKiBVbHRpbWF0ZWx5LCB0aGUgbG9naWNhbCBwbGF5YmFjayBzZXF1ZW5jZSBpcyBkZWZp bmVkIGJ5IGEgdGl0bGUncyBQR0MKPiArICogYW5kIGEgdXNlciBzZWxlY3RlZCAiYW5nbGUiLiBB biBhZGRpdGlvbmFsIGxheWVyIG9mIGNvbnRyb2wgaXMgZGVmaW5lZAo+IGJ5Cj4gKyAqIE5BViBw YWNrZXRzIGluIHRoZSBNUEVHLVBTLCBidXQgYXMgdGhlc2UgYXJlIHByb2Nlc3NlZCBieSBsaWJk dmRuYXYsCj4gKyAqIHRoZXkgYXJlIHdpdGhlbGQgZnJvbSB0aGUgb3V0cHV0IG9mIHRoaXMgZGVt dXhlci4KPiArICoKPiArICogVGhlcmVmb3JlLCB0aGUgaGlnaC1sZXZlbCBhcHByb2FjaCBpcyBh cyBmb2xsb3dzOgo+ICsgKiAxKSBPcGVuIHRoZSB2b2x1bWUgd2l0aCBsaWJkdmRyZWFkCj4gKyAq IDIpIEdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlci1yZXF1ZXN0ZWQgdGl0bGUgYW5k IFBHQwo+IGNvb3JkaW5hdGVzCj4gKyAqIDMpIFJlcXVlc3QgcGxheWJhY2sgYXQgdGhlIGNvb3Jk aW5hdGVzIGFuZCBjaG9zZW4gYW5nbGUgd2l0aCBsaWJkdmRuYXYKPiArICogNCkgU2VlayBwbGF5 YmFjayB0byBmaXJzdCBjZWxsIGF0IHRoZSBjb29yZGluYXRlcyAoc2tpcHBpbmcgc3RpbGxzLAo+ IGV0Yy4pCj4gKyAqIDUpIEJlZ2luIHRoZSBwbGF5YmFjayAocmVhZGluZyBhbmQgZGVtdXhpbmcp IG9mIE1QRUctUFMgYmxvY2tzCj4gKyAqIDYpIEVuZCBwbGF5YmFjayBpZiB0aGUgUEdDIG9yIGFu Z2xlIGNoYW5nZSwgb3IgbmF2IGxlYWRzIHRvIGEgbWVudSBvcgo+IGJhY2t3YXJkcwo+ICsgKiA3 KSBDbG9zZSByZXNvdXJjZXMKPiArICoqLwo+ICsKPiArI2luY2x1ZGUgPGR2ZHJlYWQvZHZkX3Jl YWRlci5oPgo+ICsjaW5jbHVkZSA8ZHZkcmVhZC9pZm9fcmVhZC5oPgo+ICsjaW5jbHVkZSA8ZHZk cmVhZC9pZm9fdHlwZXMuaD4KPiArI2luY2x1ZGUgPGR2ZHJlYWQvbmF2X3JlYWQuaD4KPiArI2lu Y2x1ZGUgPGR2ZG5hdi9kdmRuYXYuaD4KPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGls LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4gKyNpbmNsdWRlICJs aWJhdnV0aWwvbWVtLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvc2FtcGxlZm10LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZXN0YW1w LmgiCj4gKwo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9hdmNvZGVjLmgiCj4gKyNpbmNsdWRlICJs aWJhdmZvcm1hdC9hdmlvX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9hdmxh bmd1YWdlLmgiCj4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9hdmZvcm1hdC5oIgo+ICsjaW5jbHVk ZSAibGliYXZmb3JtYXQvZGVtdXguaCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2ludGVybmFs LmgiCj4gKyNpbmNsdWRlICJsaWJhdmZvcm1hdC91cmwuaCIKPiArCj4gKyNkZWZpbmUgRFZEVklE RU9fTUFYX1BTX1NFQVJDSF9CTE9DS1MgICAgICAgICAgICAgICAgICAgMTI4Cj4gKyNkZWZpbmUg RFZEVklERU9fQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OAo+ICsj ZGVmaW5lIERWRFZJREVPX1RJTUVfQkFTRV9RICAgICAgICAgICAgICAgICAgICAgICAgICAgIChB VlJhdGlvbmFsKSB7IDEsCj4gOTAwMDAgfQo+ICsjZGVmaW5lIERWRFZJREVPX1BUU19XUkFQX0JJ VFMgICAgICAgICAgICAgICAgICAgICAgICAgIDMyIC8qIERWRCB1c2VzIDMyCj4gKFBFUyBhbGxv d3MgMzMpICovCj4gKwo+ICsjZGVmaW5lIERWRFZJREVPX1NVQlBfQ0xVVF9MRU4gICAgICAgICAg ICAgICAgICAgICAgICAgIDE2Cj4gKyNkZWZpbmUgRFZEVklERU9fU1VCUF9DTFVUX1NJWkUKPiAg RFZEVklERU9fU1VCUF9DTFVUX0xFTiAqIHNpemVvZih1aW50MzJfdCkKPiArCj4gK3R5cGVkZWYg c3RydWN0IERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSB7Cj4gKyAgICBpbnQgc3RhcnRjb2Rl Owo+ICsgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQ7Cj4gKyAgICBpbnQgd2lkdGg7Cj4gKyAg ICBpbnQgaGVpZ2h0Owo+ICsgICAgQVZSYXRpb25hbCBkYXI7Cj4gKyAgICBBVlJhdGlvbmFsIGZy YW1lcmF0ZTsKPiArICAgIGludCBoYXNfY2M7Cj4gK30gRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVu dHJ5Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9QR0NBdWRpb1N0cmVhbUVudHJ5IHsK PiArICAgIGludCBzdGFydGNvZGU7Cj4gKyAgICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZDsKPiAr ICAgIGludCBzYW1wbGVfZm10Owo+ICsgICAgaW50IHNhbXBsZV9yYXRlOwo+ICsgICAgaW50IGJp dF9kZXB0aDsKPiArICAgIGludCBuYl9jaGFubmVsczsKPiArICAgIEFWQ2hhbm5lbExheW91dCBj aF9sYXlvdXQ7Cj4gKyAgICBjaGFyICpsYW5nX2lzbzsKPiArfSBEVkRWaWRlb1BHQ0F1ZGlvU3Ry ZWFtRW50cnk7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFt RW50cnkgewo+ICsgICAgaW50IHN0YXJ0Y29kZTsKPiArICAgIHVpbnQzMl90ICpjbHV0Owo+ICsg ICAgY2hhciAqbGFuZ19pc287Cj4gK30gRFZEVmlkZW9QR0NTdWJ0aXRsZVN0cmVhbUVudHJ5Owo+ ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9EZW11eENvbnRleHQgewo+ICsgICAgY29uc3Qg QVZDbGFzcyAgICAgICAgICAgICAgICpjbGFzczsKPiArCj4gKyAgICAvKiBvcHRpb25zICovCj4g KyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3RpdGxlOyAgICAgICAgICAvKiB0 aGUgdXNlci1wcm92aWRlZAo+IHRpdGxlIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wdHQ7ICAgICAgICAgICAgLyogdGhlIHVzZXIt cHJvdmlkZWQKPiBQVFQgbnVtYmVyICgxLWluZGV4ZWQpICovCj4gKyAgICBpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgb3B0X3BnYzsgICAgICAgICAgICAvKiB0aGUgdXNlci1wcm92aWRlZAo+ IFBHQyBudW1iZXIgKDEtaW5kZXhlZCkgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAg ICAgICBvcHRfcGc7ICAgICAgICAgICAgIC8qIHRoZSB1c2VyLXByb3ZpZGVkCj4gUEcgbnVtYmVy ICgxLWluZGV4ZWQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Fu Z2xlOyAgICAgICAgICAvKiB0aGUgdXNlci1wcm92aWRlZAo+IGFuZ2xlIG51bWJlciAoMS1pbmRl eGVkKSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9yZWdpb247ICAg ICAgICAgLyogdGhlIHVzZXItcHJvdmlkZWQKPiByZWdpb24gZGlnaXQgKi8KPiArCj4gKyAgICAv KiBzdWJkZW11eCAqLwo+ICsgICAgY29uc3QgQVZJbnB1dEZvcm1hdCAgICAgICAgICptcGVnX2Zt dDsgICAgICAgICAgLyogaW5uZXIgTVBFRy1QUwo+IChWT0IpIGRlbXV4ZXIgKi8KPiArICAgIEFW Rm9ybWF0Q29udGV4dCAgICAgICAgICAgICAqbXBlZ19jdHg7ICAgICAgICAgIC8qIGNvbnRleHQg Zm9yIGlubmVyCj4gZGVtdXhlciAqLwo+ICsgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAg ICptcGVnX2J1ZjsgICAgICAgICAgLyogYnVmZmVyIGZvciBpbm5lcgo+IGRlbXV4ZXIgKi8KPiAr ICAgIEZGSU9Db250ZXh0ICAgICAgICAgICAgICAgICBtcGVnX3BiOyAgICAgICAgICAgIC8qIGJ1 ZmZlciBjb250ZXh0IGZvcgo+IGlubmVyIGRlbXV4ZXIgKi8KPiArCj4gKyAgICAvKiB2b2x1bWUg Ki8KPiArICAgIGR2ZF9yZWFkZXJfdCAgICAgICAgICAgICAgICAqZHZkcmVhZDsgICAgICAgICAg IC8qIGhhbmRsZSB0bwo+IGxpYmR2ZHJlYWQgKi8KPiArICAgIGlmb19oYW5kbGVfdCAgICAgICAg ICAgICAgICAqdm1nX2lmbzsgICAgICAgICAgIC8qIGhhbmRsZSB0byB0aGUgVk1HCj4gKFZJREVP X1RTLklGTykgKi8KPiArICAgIGlmb19oYW5kbGVfdCAgICAgICAgICAgICAgICAqdnRzX2lmbzsg ICAgICAgICAgIC8qIGhhbmRsZSB0byB0aGUKPiBhY3RpdmUgVlRTIChWVFNfbm5fbi5JRk8pICov Cj4gKyAgICBkdmRuYXZfdCAgICAgICAgICAgICAgICAgICAgKmR2ZG5hdjsgICAgICAgICAgICAv KiBoYW5kbGUgdG8KPiBsaWJkdmRuYXYgKi8KPiArCj4gKyAgICAvKiBwbGF5YmFjayBjb250cm9s ICovCj4gKyAgICBwZ2NfdCAgICAgICAgICAgICAgICAgICAgICAgKnBsYXlfcGdjOyAgICAgICAg ICAvKiBoYW5kbGUgdG8gdGhlCj4gYWN0aXZlIFBHQyAqLwo+ICsgICAgaW50NjRfdCAgICAgICAg ICAgICAgICAgICAgIHBsYXlfdHNfb2Zmc2V0OyAgICAgLyogUFRTIGRpc2NvbnRpbnVpdHkKPiBv ZmZzZXQgKGUuZy4gVk9CIGNoYW5nZSkgKi8KPiArICAgIGludDY0X3QgICAgICAgICAgICAgICAg ICAgICBwbGF5X3ZvYnVfZV9wdG07ICAgIC8qIGVuZCBQVFMgb2YgdGhlCj4gY3VycmVudCBWT0JV ICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV92dHNuOyAgICAgICAg ICAvKiBudW1iZXIgb2YgdGhlCj4gYWN0aXZlIFZUUyAodmlkZW8gdGl0bGUgc2V0KSAqLwo+ICsg ICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlfY2VsbG47ICAgICAgICAgLyogbnVt YmVyIG9mIHRoZQo+IGFjdGl2ZSBjZWxsICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgcGxheV9wZ247ICAgICAgICAgICAvKiBudW1iZXIgb2YgdGhlCj4gYWN0aXZlIHByb2dy YW0gKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3B0dDsgICAgICAg ICAgIC8qIG51bWJlciBvZiB0aGUKPiBhY3RpdmUgUFRUIChjaGFwdGVyKSAqLwo+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlfaW5fdnRzOyAgICAgICAgLyogaWYgb3VyIHBs YXkgc3RhdGUKPiBpcyBpbiB0aGUgVlRTICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgcGxheV9pbl9wZ2M7ICAgICAgICAvKiBpZiBvdXIgcGxheSBzdGF0ZQo+IGlzIGluIHRo ZSBQR0MgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X2luX3BzOyAg ICAgICAgIC8qIGlmIG91ciBwbGF5IHN0YXRlCj4gaXMgaW4gdGhlIHByb2dyYW0gc3RyZWFtICov Cj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV9za2lwX2NlbGw7ICAgICAv KiBpZiB0aGlzIGNlbGwgaXMKPiBiZWluZyBza2lwcGVkKi8KPiArICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICBwbGF5X3NraXBfY2VsbF9sYXN0Oy8qIGlmIGxhc3QgY2VsbCB3YXMKPiBz a2lwcGVkICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGxheV9lbmQ7ICAg ICAgICAgICAvKiBzaWduYWwgdG8gdGhlCj4gcGFyZW50IGRlbXV4ZXIgdGhhdCB3ZSBhcmUgZG9u ZSAqLwo+ICsKPiArfSBEVkRWaWRlb0RlbXV4Q29udGV4dDsKPiArCj4gK3N0YXRpYyB2b2lkIGR2 ZHZpZGVvX3BnY19jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIERWRFZpZGVv RGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9M T0dfVFJBQ0UsICJjbG9zaW5nIERWRCB2b2x1bWVcbiIpOwo+ICsKPiArICAgIGlmIChjLT5kdmRu YXYpCj4gKyAgICAgICAgZHZkbmF2X2Nsb3NlKGMtPmR2ZG5hdik7Cj4gKwo+ICsgICAgaWYgKGMt PnZ0c19pZm8pCj4gKyAgICAgICAgaWZvQ2xvc2UoYy0+dnRzX2lmbyk7Cj4gKwo+ICsgICAgaWYg KGMtPnZtZ19pZm8pCj4gKyAgICAgICAgaWZvQ2xvc2UoYy0+dm1nX2lmbyk7Cj4gKwo+ICsgICAg aWYgKGMtPmR2ZHJlYWQpCj4gKyAgICAgICAgRFZEQ2xvc2UoYy0+ZHZkcmVhZCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcGdjX29wZW4oQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7 Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAg ICBkdmRuYXZfc3RhdHVzX3QgZHZkbmF2X29wZW5fc3RhdHVzOwo+ICsKPiArICAgIHRpdGxlX2lu Zm9fdCB0aXRsZV9pbmZvOwo+ICsgICAgaW50IGN1cl90aXRsZSwgY3VyX3BnY24sIGN1cl9wZ247 Cj4gKwo+ICsgICAgaW50MzJfdCBkaXNjX3JlZ2lvbl9tYXNrOwo+ICsgICAgaW50MzJfdCBwbGF5 ZXJfcmVnaW9uX21hc2s7Cj4gKwo+ICsgICAgYy0+ZHZkcmVhZCA9IERWRE9wZW4ocy0+dXJsKTsK PiArICAgIGlmICghYy0+ZHZkcmVhZCkKPiArICAgICAgICBnb3RvIGVuZF9mYWlsX2V4dGVybmFs Owo+ICsKPiArICAgIGlmICghKGMtPnZtZ19pZm8gPSBpZm9PcGVuKGMtPmR2ZHJlYWQsIDApKSkK PiArICAgICAgICBnb3RvIGVuZF9mYWlsX2V4dGVybmFsOwo+ICsKPiArICAgIGlmIChjLT5vcHRf dGl0bGUgPiBjLT52bWdfaWZvLT50dF9zcnB0LT5ucl9vZl9zcnB0cykgewo+ICsgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSBub3QgZm91bmRcbiIpOwo+ICsKPiArICAgICAg ICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ICsgICAgfQo+ICsKPiArICAgIHRp dGxlX2luZm8gPSBjLT52bWdfaWZvLT50dF9zcnB0LT50aXRsZVtjLT5vcHRfdGl0bGUgLSAxXTsK PiArICAgIGlmIChjLT5vcHRfYW5nbGUgPiB0aXRsZV9pbmZvLm5yX29mX2FuZ2xlcykgewo+ICsg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJBbmdsZSBub3QgZm91bmRcbiIpOwo+ICsK PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ICsgICAgfQo+ICsK PiArICAgIGlmICh0aXRsZV9pbmZvLm5yX29mX3B0dHMgPCAxKSB7Cj4gKyAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIlRpdGxlIGludmFsaWRcbiIpOwo+ICsKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIShjLT52dHNf aWZvID0gaWZvT3BlbihjLT5kdmRyZWFkLCB0aXRsZV9pbmZvLnRpdGxlX3NldF9ucikpKQo+ICsg ICAgICAgIGdvdG8gZW5kX2ZhaWxfZXh0ZXJuYWw7Cj4gKwo+ICsgICAgaWYgKHRpdGxlX2luZm8u dnRzX3R0biA8IDEKPiArICAgICAgICAgICAgfHwgdGl0bGVfaW5mby52dHNfdHRuID4gOTkKPiAr ICAgICAgICAgICAgfHwgdGl0bGVfaW5mby52dHNfdHRuID4gYy0+dnRzX2lmby0+dnRzX3B0dF9z cnB0LT5ucl9vZl9zcnB0cwo+ICsgICAgICAgICAgICB8fCBjLT52dHNfaWZvLT52dHNpX21hdC0+ bnJfb2ZfdnRzX2F1ZGlvX3N0cmVhbXMgPiA4Cj4gKyAgICAgICAgICAgIHx8IGMtPnZ0c19pZm8t PnZ0c2lfbWF0LT5ucl9vZl92dHNfc3VicF9zdHJlYW1zID4gMzIpIHsKPiArICAgICAgICBhdl9s b2cocywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgaW52YWxpZCBpbiBWVFNcbiIpOwo+ICsKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBkdmRu YXZfb3Blbl9zdGF0dXMgPSBkdmRuYXZfb3BlbigmYy0+ZHZkbmF2LCBzLT51cmwpOwo+ICsgICAg aWYgKCFjLT5kdmRuYXYpCj4gKyAgICAgICAgZ290byBlbmRfZmFpbF9leHRlcm5hbDsKPiArCj4g KyAgICBpZiAoZHZkbmF2X29wZW5fc3RhdHVzICE9IERWRE5BVl9TVEFUVVNfT0sKPiArICAgICAg ICAgICAgfHwgZHZkbmF2X3NldF9yZWFkYWhlYWRfZmxhZyhjLT5kdmRuYXYsIDApICE9IERWRE5B Vl9TVEFUVVNfT0sKPiArICAgICAgICAgICAgfHwgZHZkbmF2X3NldF9QR0NfcG9zaXRpb25pbmdf ZmxhZyhjLT5kdmRuYXYsIDEpICE9Cj4gRFZETkFWX1NUQVRVU19PSwo+ICsgICAgICAgICAgICB8 fCBkdmRuYXZfZ2V0X3JlZ2lvbl9tYXNrKGMtPmR2ZG5hdiwgJmRpc2NfcmVnaW9uX21hc2spICE9 Cj4gRFZETkFWX1NUQVRVU19PSykKPiArICAgICAgICBnb3RvIGVuZF9mYWlsX2V4dGVybmFsOwo+ ICsKPiArICAgIHBsYXllcl9yZWdpb25fbWFzayA9IGMtPm9wdF9yZWdpb24gPiAwID8gKDEgPDwg KGMtPm9wdF9yZWdpb24gLSAxKSkgOgo+IGRpc2NfcmVnaW9uX21hc2s7Cj4gKyAgICBpZiAoZHZk bmF2X3NldF9yZWdpb25fbWFzayhjLT5kdmRuYXYsIHBsYXllcl9yZWdpb25fbWFzaykgIT0KPiBE VkROQVZfU1RBVFVTX09LKQo+ICsgICAgICAgIGdvdG8gZW5kX2ZhaWxfZXh0ZXJuYWw7Cj4gKwo+ ICsgICAgaWYgKGMtPm9wdF9wZ2MgPiAwICYmIGMtPm9wdF9wZyA+IDApIHsKPiArICAgICAgICBp ZiAoZHZkbmF2X3Byb2dyYW1fcGxheShjLT5kdmRuYXYsIGMtPm9wdF90aXRsZSwgYy0+b3B0X3Bn YywKPiBjLT5vcHRfcGcpICE9IERWRE5BVl9TVEFUVVNfT0spCj4gKyAgICAgICAgICAgIGdvdG8g ZW5kX2ZhaWxfZXh0ZXJuYWw7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGlmIChkdmRuYXZf cGFydF9wbGF5KGMtPmR2ZG5hdiwgYy0+b3B0X3RpdGxlLCBjLT5vcHRfcHR0KSAhPQo+IERWRE5B Vl9TVEFUVVNfT0sKPiArICAgICAgICAgICAgICAgIHx8IGR2ZG5hdl9jdXJyZW50X3RpdGxlX3By b2dyYW0oYy0+ZHZkbmF2LCAmY3VyX3RpdGxlLAo+ICZjdXJfcGdjbiwgJmN1cl9wZ24pICE9IERW RE5BVl9TVEFUVVNfT0spCj4gKyAgICAgICAgICAgIGdvdG8gZW5kX2ZhaWxfZXh0ZXJuYWw7Cj4g Kwo+ICsgICAgICAgIGMtPm9wdF9wZ2MgPSBjdXJfcGdjbjsKPiArICAgICAgICBjLT5vcHRfcGcg PSBjdXJfcGduOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChkdmRuYXZfYW5nbGVfY2hhbmdlKGMt PmR2ZG5hdiwgYy0+b3B0X2FuZ2xlKSAhPSBEVkROQVZfU1RBVFVTX09LKQo+ICsgICAgICAgIGdv dG8gZW5kX2ZhaWxfZXh0ZXJuYWw7Cj4gKwo+ICsgICAgLyogdXBkYXRlIHRoZSBjb250ZXh0ICov Cj4gKyAgICBjLT5wbGF5X3Z0c24gPSB0aXRsZV9pbmZvLnRpdGxlX3NldF9ucjsKPiArICAgIGMt PnBsYXlfcGdjID0gYy0+dnRzX2lmby0+dnRzX3BnY2l0LT5wZ2NpX3NycFtjLT5vcHRfcGdjIC0g MV0ucGdjOwo+ICsgICAgYy0+cGxheV90c19vZmZzZXQgPSAwOwo+ICsgICAgYy0+cGxheV9za2lw X2NlbGwgPSAwOwo+ICsgICAgYy0+cGxheV9za2lwX2NlbGxfbGFzdCA9IDA7Cj4gKyAgICBjLT5w bGF5X2VuZCA9IDA7Cj4gKwo+ICsgICAgaWYgKGMtPnBsYXlfcGdjLT5wZ19wbGF5YmFja19tb2Rl ICE9IDApIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiU29ycnksIG5vbi1z ZXF1ZW50aWFsIFBHQ3MgYXJlIG5vdAo+IHN1cHBvcnRlZFxuIik7Cj4gKwo+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsK PiArCj4gK2VuZF9mYWlsX2V4dGVybmFsOgo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwg IlVuYWJsZSB0byBzdGFydCBEVkQgcGxheWJhY2sgYXQKPiBjb29yZGluYXRlc1xuIik7Cj4gKwo+ ICsgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fcGdjX2NoYXB0ZXJzX3NldHVwKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAg RFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgdWludDY0 X3QgZHVyYXRpb247Cj4gKyAgICB1aW50NjRfdCAqdGltZXM7Cj4gKyAgICB1aW50NjRfdCB0aW1l X3ByZXYgPSAwOwo+ICsgICAgaW50IG5iX2NoYXB0ZXJzID0gMDsKPiArCj4gKyAgICAvKiBhcyBh IHNpZGUgZWZmZWN0IG9mIGR2ZG5hdl9kZXNjcmliZV90aXRsZV9jaGFwdGVycygpLCBiZW5lZmlj aWFsCj4gc2FmZXR5IGNoZWNrcyBhcmUgZG9uZSAqLwo+ICsgICAgbmJfY2hhcHRlcnMgPSBkdmRu YXZfZGVzY3JpYmVfdGl0bGVfY2hhcHRlcnMoYy0+ZHZkbmF2LCBjLT5vcHRfdGl0bGUsCj4gJnRp bWVzLCAmZHVyYXRpb24pOwo+ICsgICAgaWYgKCFuYl9jaGFwdGVycykKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArCj4gKyAgICBmb3IgKGludCBpID0gYy0+b3B0X3B0dCAt IDE7IGkgPCBuYl9jaGFwdGVycyAtIDE7IGkrKykgewo+ICsgICAgICAgIHVpbnQ2NF90IHRpbWVf ZWZmZWN0aXZlID0gdGltZXNbaV07Cj4gKwo+ICsgICAgICAgIGlmICghYXZwcml2X25ld19jaGFw dGVyKHMsIGksIERWRFZJREVPX1RJTUVfQkFTRV9RLCB0aW1lX3ByZXYsCj4gdGltZV9lZmZlY3Rp dmUsIE5VTEwpKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gYWxsb2NhdGUgY2hhcHRlclxuIik7Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICB0aW1lX3ByZXYgPSB0aW1lX2Vm ZmVjdGl2ZTsKPiArICAgIH0KPiArCj4gKyAgICBmcmVlKHRpbWVzKTsKPiArCj4gKyAgICBzLT5k dXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShkdXJhdGlvbiwgRFZEVklERU9fVElNRV9CQVNFX1EsCj4g QVZfVElNRV9CQVNFX1EpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV9hbmFseXplKHZpZGVvX2F0dHJfdCB2aWRlb19hdHRy LAo+ICsgICAgICAgIERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSAqZW50cnkpCj4gK3sKPiAr ICAgIEFWUmF0aW9uYWwgZnJhbWVyYXRlOwo+ICsgICAgaW50IGhlaWdodCA9IDA7Cj4gKyAgICBp bnQgd2lkdGggPSAwOwo+ICsgICAgaW50IGlzX3BhbCA9IHZpZGVvX2F0dHIudmlkZW9fZm9ybWF0 ID09IDE7Cj4gKwo+ICsgICAgZnJhbWVyYXRlID0gaXNfcGFsID8gKEFWUmF0aW9uYWwpIHsgMjUs IDEgfSA6IChBVlJhdGlvbmFsKSB7IDMwMDAwLAo+IDEwMDEgfTsKPiArICAgIGhlaWdodCA9IGlz X3BhbCA/IDU3NiA6IDQ4MDsKPiArCj4gKyAgICBpZiAoaGVpZ2h0ID4gMCkgewo+ICsgICAgICAg IHN3aXRjaCAodmlkZW9fYXR0ci5waWN0dXJlX3NpemUpIHsKPiArICAgICAgICAgICAgY2FzZSAw OiAvKiBEMSAqLwo+ICsgICAgICAgICAgICAgICAgd2lkdGggPSA3MjA7Cj4gKyAgICAgICAgICAg ICAgICBicmVhazsKPiArICAgICAgICAgICAgY2FzZSAxOiAvKiA0Q0lGICovCj4gKyAgICAgICAg ICAgICAgICB3aWR0aCA9IDcwNDsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAg ICAgICBjYXNlIDI6IC8qIEhhbGYgRDEgKi8KPiArICAgICAgICAgICAgICAgIHdpZHRoID0gMzUy Owo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgMzogLyogQ0lG ICovCj4gKyAgICAgICAgICAgICAgICB3aWR0aCA9IDM1MjsKPiArICAgICAgICAgICAgICAgIGhl aWdodCAvPSAyOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAg fQo+ICsKPiArICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKPiArICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAgICBlbnRyeS0+c3RhcnRjb2RlID0gMHgxRTA7Cj4g KyAgICBlbnRyeS0+Y29kZWNfaWQgPSAhdmlkZW9fYXR0ci5tcGVnX3ZlcnNpb24gPyBBVl9DT0RF Q19JRF9NUEVHMVZJREVPIDoKPiBBVl9DT0RFQ19JRF9NUEVHMlZJREVPOwo+ICsgICAgZW50cnkt PndpZHRoID0gd2lkdGg7Cj4gKyAgICBlbnRyeS0+aGVpZ2h0ID0gaGVpZ2h0Owo+ICsgICAgZW50 cnktPmRhciA9IHZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8gPyAoQVZSYXRpb25hbCkg eyAxNiwgOSB9Cj4gOiAoQVZSYXRpb25hbCkgeyA0LCAzIH07Cj4gKyAgICBlbnRyeS0+ZnJhbWVy YXRlID0gZnJhbWVyYXRlOwo+ICsgICAgZW50cnktPmhhc19jYyA9IHZpZGVvX2F0dHIubGluZTIx X2NjXzEgfHwgdmlkZW9fYXR0ci5saW5lMjFfY2NfMjsKPiArCj4gKyAgICByZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb192aWRlb19zdHJlYW1fYWRkKEFWRm9ybWF0Q29u dGV4dCAqcywKPiArICAgICAgICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkgKmVudHJ5LCBl bnVtIEFWU3RyZWFtUGFyc2VUeXBlCj4gbmVlZF9wYXJzaW5nKQo+ICt7Cj4gKyAgICBBVlN0cmVh bSAqc3Q7Cj4gKyAgICBGRlN0cmVhbSAqc3RpOwo+ICsKPiArICAgIHN0ID0gYXZmb3JtYXRfbmV3 X3N0cmVhbShzLCBOVUxMKTsKPiArICAgIGlmICghc3QpIHsKPiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIHN0LT5pZCA9IGVudHJ5LT5zdGFydGNv ZGU7Cj4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfVklERU87 Cj4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gZW50cnktPmNvZGVjX2lkOwo+ICsgICAg c3QtPmNvZGVjcGFyLT53aWR0aCA9IGVudHJ5LT53aWR0aDsKPiArICAgIHN0LT5jb2RlY3Bhci0+ aGVpZ2h0ID0gZW50cnktPmhlaWdodDsKPiArICAgIHN0LT5jb2RlY3Bhci0+Zm9ybWF0ID0gQVZf UElYX0ZNVF9ZVVY0MjBQOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2xvcl9yYW5nZSA9IEFWQ09M X1JBTkdFX01QRUc7Cj4gKwo+ICsgICAgc3QtPmNvZGVjcGFyLT5mcmFtZXJhdGUgPSBlbnRyeS0+ ZnJhbWVyYXRlOwo+ICsjaWYgRkZfQVBJX1JfRlJBTUVfUkFURQo+ICsgICAgc3QtPnJfZnJhbWVf cmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gKyNlbmRpZgo+ICsgICAgc3QtPmF2Z19mcmFtZV9y YXRlID0gZW50cnktPmZyYW1lcmF0ZTsKPiArCj4gKyAgICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4g KyAgICBzdGktPnJlcXVlc3RfcHJvYmUgPSAwOwo+ICsgICAgc3RpLT5uZWVkX3BhcnNpbmcgPSBu ZWVkX3BhcnNpbmc7Cj4gKyAgICBzdGktPmRpc3BsYXlfYXNwZWN0X3JhdGlvID0gZW50cnktPmRh cjsKPiArICAgIHN0aS0+YXZjdHgtPmZyYW1lcmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gKwo+ ICsgICAgaWYgKGVudHJ5LT5oYXNfY2MpCj4gKyAgICAgICAgc3RpLT5hdmN0eC0+cHJvcGVydGll cyB8PSBGRl9DT0RFQ19QUk9QRVJUWV9DTE9TRURfQ0FQVElPTlM7Cj4gKwo+ICsgICAgYXZwcml2 X3NldF9wdHNfaW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiArICAgICAgICBEVkRW SURFT19USU1FX0JBU0VfUS5udW0sIERWRFZJREVPX1RJTUVfQkFTRV9RLmRlbik7Cj4gKwo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fdmlkZW9fc3RyZWFt X3NldHVwKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRl eHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVu dHJ5ICplbnRyeTsKPiArICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIGVudHJ5ID0gYXZfbWFs bG9jKHNpemVvZihEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkpKTsKPiArCj4gKyAgICBpZiAo KHJldCA9Cj4gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2FuYWx5emUoYy0+dnRzX2lmby0+dnRzaV9t YXQtPnZ0c192aWRlb19hdHRyLCBlbnRyeSkpCj4gPCAwCj4gKyAgICAgICAgICAgIHx8IChyZXQg PSBkdmR2aWRlb192aWRlb19zdHJlYW1fYWRkKGMtPm1wZWdfY3R4LCBlbnRyeSwKPiBBVlNUUkVB TV9QQVJTRV9GVUxMKSkgPCAwCj4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRlb192aWRl b19zdHJlYW1fYWRkKHMsIGVudHJ5LAo+IEFWU1RSRUFNX1BBUlNFX05PTkUpKSA8IDApIHsKPiAr ICAgICAgICBhdl9mcmVlKGVudHJ5KTsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGFsbG9jYXRlIHZpZGVvIHN0cmVhbVxuIik7Cj4gKwo+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfZnJlZShlbnRyeSk7Cj4gKwo+ICsgICAg cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1f YW5hbHl6ZShhdWRpb19hdHRyX3QgYXVkaW9fYXR0ciwKPiB1aW50MTZfdCBhdWRpb19jb250cm9s LAo+ICsgICAgICAgIERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSAqZW50cnkpCj4gK3sKPiAr ICAgIGludCBzdGFydGNvZGUgPSAwOwo+ICsgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQgPSBB Vl9DT0RFQ19JRF9OT05FOwo+ICsgICAgaW50IHNhbXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX05P TkU7Cj4gKyAgICBpbnQgc2FtcGxlX3JhdGUgPSAwOwo+ICsgICAgaW50IGJpdF9kZXB0aCA9IDA7 Cj4gKyAgICBpbnQgbmJfY2hhbm5lbHMgPSAwOwo+ICsgICAgQVZDaGFubmVsTGF5b3V0IGNoX2xh eW91dCA9IChBVkNoYW5uZWxMYXlvdXQpIHsgMCB9Owo+ICsgICAgY2hhciBsYW5nX2R2ZFszXSA9 IHswfTsKPiArCj4gKyAgICBpbnQgcG9zaXRpb24gPSAoYXVkaW9fY29udHJvbCAmIDB4N0YwMCkg Pj4gODsKPiArCj4gKyAgICBzd2l0Y2ggKGF1ZGlvX2F0dHIuYXVkaW9fZm9ybWF0KSB7Cj4gKyAg ICAgICAgY2FzZSAwOgo+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX0FDMzsK PiArICAgICAgICAgICAgc2FtcGxlX2ZtdCA9IEFWX1NBTVBMRV9GTVRfRkxUUDsKPiArICAgICAg ICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gMHg4 MCArIHBvc2l0aW9uOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIDI6Cj4g KyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfTVAxOwo+ICsgICAgICAgICAgICBz YW1wbGVfZm10ID0gYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyBBVl9TQU1QTEVfRk1UX1MzMiA6 Cj4gQVZfU0FNUExFX0ZNVF9TMTY7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7 Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gMjAg OiAxNjsKPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gMHgxQzAgKyBwb3NpdGlvbjsKPiArICAg ICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSAzOgo+ICsgICAgICAgICAgICBjb2RlY19p ZCA9IEFWX0NPREVDX0lEX01QMjsKPiArICAgICAgICAgICAgc2FtcGxlX2ZtdCA9IGF1ZGlvX2F0 dHIucXVhbnRpemF0aW9uID8gQVZfU0FNUExFX0ZNVF9TMzIgOgo+IEFWX1NBTVBMRV9GTVRfUzE2 Owo+ICsgICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ICsgICAgICAgICAgICBiaXRf ZGVwdGggPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTY7Cj4gKyAgICAgICAgICAg IHN0YXJ0Y29kZSA9IDB4MUMwICsgcG9zaXRpb247Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsg ICAgICAgIGNhc2UgNDoKPiArICAgICAgICAgICAgY29kZWNfaWQgPSBhdWRpb19hdHRyLnF1YW50 aXphdGlvbiA/IEFWX0NPREVDX0lEX1BDTV9TMzJMRSA6Cj4gQVZfQ09ERUNfSURfUENNX1MxNkxF Owo+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0gYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyBB Vl9TQU1QTEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExFX0ZNVF9TMTY7Cj4gKyAgICAgICAgICAgIHNh bXBsZV9yYXRlID0gYXVkaW9fYXR0ci5zYW1wbGVfZnJlcXVlbmN5ID8gOTYwMDAgOiA0ODAwMDsK PiArICAgICAgICAgICAgYml0X2RlcHRoID0gYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPT0gMiA/ IDI0IDoKPiAoYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyAyMCA6IDE2KTsKPiArICAgICAgICAg ICAgc3RhcnRjb2RlID0gMHhBMCArIHBvc2l0aW9uOwo+ICsgICAgICAgICAgICBicmVhazsKPiAr ICAgICAgICBjYXNlIDY6Cj4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfRFRT Owo+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0gQVZfU0FNUExFX0ZNVF9GTFRQOwo+ICsgICAg ICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ICsgICAgICAgICAgICBiaXRfZGVwdGggPSBh dWRpb19hdHRyLnF1YW50aXphdGlvbiA9PSAyID8gMjQgOgo+IChhdWRpb19hdHRyLnF1YW50aXph dGlvbiA/IDIwIDogMTYpOwo+ICsgICAgICAgICAgICBzdGFydGNvZGUgPSAweDg4ICsgcG9zaXRp b247Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIG5iX2NoYW5uZWxz ID0gYXVkaW9fYXR0ci5jaGFubmVscyArIDE7Cj4gKwo+ICsgICAgaWYgKGNvZGVjX2lkID09IEFW X0NPREVDX0lEX05PTkUgfHwgc3RhcnRjb2RlID09IDAgfHwgc2FtcGxlX2ZtdCA9PQo+IEFWX1NB TVBMRV9GTVRfTk9ORQo+ICsgICAgICAgICAgICB8fCBzYW1wbGVfcmF0ZSA9PSAwIHx8IG5iX2No YW5uZWxzID09IDApIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiAr ICAgIH0KPiArCj4gKyAgICBpZiAobmJfY2hhbm5lbHMgPT0gMikKPiArICAgICAgICBjaF9sYXlv dXQgPSAoQVZDaGFubmVsTGF5b3V0KSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87Cj4gKyAgICBl bHNlIGlmIChuYl9jaGFubmVscyA9PSA2KQo+ICsgICAgICAgIGNoX2xheW91dCA9IChBVkNoYW5u ZWxMYXlvdXQpIEFWX0NIQU5ORUxfTEFZT1VUXzVQT0lOVDE7Cj4gKyAgICBlbHNlIGlmIChuYl9j aGFubmVscyA9PSA3KQo+ICsgICAgICAgIGNoX2xheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpIEFW X0NIQU5ORUxfTEFZT1VUXzZQT0lOVDE7Cj4gKyAgICBlbHNlIGlmIChuYl9jaGFubmVscyA9PSA4 KQo+ICsgICAgICAgIGNoX2xheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpIEFWX0NIQU5ORUxfTEFZ T1VUXzdQT0lOVDE7Cj4gKwo+ICsgICAgQVZfV0IxNihsYW5nX2R2ZCwgYXVkaW9fYXR0ci5sYW5n X2NvZGUpOwo+ICsKPiArICAgIGVudHJ5LT5zdGFydGNvZGUgPSBzdGFydGNvZGU7Cj4gKyAgICBl bnRyeS0+Y29kZWNfaWQgPSBjb2RlY19pZDsKPiArICAgIGVudHJ5LT5zYW1wbGVfcmF0ZSA9IHNh bXBsZV9yYXRlOwo+ICsgICAgZW50cnktPmJpdF9kZXB0aCA9IGJpdF9kZXB0aDsKPiArICAgIGVu dHJ5LT5uYl9jaGFubmVscyA9IG5iX2NoYW5uZWxzOwo+ICsgICAgZW50cnktPmNoX2xheW91dCA9 IGNoX2xheW91dDsKPiArICAgIGVudHJ5LT5sYW5nX2lzbyA9IChjaGFyICopIGZmX2NvbnZlcnRf bGFuZ190byhsYW5nX2R2ZCwKPiBBVl9MQU5HX0lTTzYzOV8yX0JJQkwpOwo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGQo QVZGb3JtYXRDb250ZXh0ICpzLAo+IERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeSAqZW50cnks Cj4gKyAgICAgICAgZW51bSBBVlN0cmVhbVBhcnNlVHlwZSBuZWVkX3BhcnNpbmcpCj4gK3sKPiAr ICAgIEFWU3RyZWFtICpzdDsKPiArICAgIEZGU3RyZWFtICpzdGk7Cj4gKwo+ICsgICAgc3QgPSBh dmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ICsgICAgaWYgKCFzdCkgewo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3QtPmlkID0gZW50 cnktPnN0YXJ0Y29kZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFf VFlQRV9BVURJTzsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBlbnRyeS0+Y29kZWNf aWQ7Cj4gKyAgICBzdC0+Y29kZWNwYXItPmZvcm1hdCA9IGVudHJ5LT5zYW1wbGVfZm10Owo+ICsg ICAgc3QtPmNvZGVjcGFyLT5zYW1wbGVfcmF0ZSA9IGVudHJ5LT5zYW1wbGVfcmF0ZTsKPiArICAg IHN0LT5jb2RlY3Bhci0+Yml0c19wZXJfY29kZWRfc2FtcGxlID0gZW50cnktPmJpdF9kZXB0aDsK PiArICAgIHN0LT5jb2RlY3Bhci0+Yml0c19wZXJfcmF3X3NhbXBsZSA9IGVudHJ5LT5iaXRfZGVw dGg7Cj4gKyAgICBzdC0+Y29kZWNwYXItPmNoX2xheW91dCA9IGVudHJ5LT5jaF9sYXlvdXQ7Cj4g KyAgICBzdC0+Y29kZWNwYXItPmNoX2xheW91dC5uYl9jaGFubmVscyA9IGVudHJ5LT5uYl9jaGFu bmVsczsKPiArCj4gKyAgICBpZiAoZW50cnktPmxhbmdfaXNvKSB7Cj4gKyAgICAgICAgYXZfZGlj dF9zZXQoJnN0LT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgZW50cnktPmxhbmdfaXNvLCAwKTsKPiAr ICAgIH0KPiArCj4gKyAgICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gKyAgICBzdGktPnJlcXVlc3Rf cHJvYmUgPSAwOwo+ICsgICAgc3RpLT5uZWVkX3BhcnNpbmcgPSBuZWVkX3BhcnNpbmc7Cj4gKwo+ ICsgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiAr ICAgICAgICAgICAgRFZEVklERU9fVElNRV9CQVNFX1EubnVtLCBEVkRWSURFT19USU1FX0JBU0Vf US5kZW4pOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZp ZGVvX2F1ZGlvX3N0cmVhbV9hZGRfYWxsKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAg RFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaW50IHJl dCA9IDA7Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjLT52dHNfaWZvLT52dHNpX21h dC0+bnJfb2ZfdnRzX2F1ZGlvX3N0cmVhbXM7Cj4gaSsrKSB7Cj4gKyAgICAgICAgRFZEVmlkZW9Q R0NBdWRpb1N0cmVhbUVudHJ5ICplbnRyeTsKPiArCj4gKyAgICAgICAgaWYgKCEoYy0+cGxheV9w Z2MtPmF1ZGlvX2NvbnRyb2xbaV0gJiAweDgwMDApKQo+ICsgICAgICAgICAgICBjb250aW51ZTsK PiArCj4gKyAgICAgICAgZW50cnkgPSBhdl9tYWxsb2Moc2l6ZW9mKERWRFZpZGVvUEdDQXVkaW9T dHJlYW1FbnRyeSkpOwo+ICsgICAgICAgIGlmICghZW50cnkpCj4gKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgICAgIGlmICgocmV0ID0KPiBkdmR2aWRlb19h dWRpb19zdHJlYW1fYW5hbHl6ZShjLT52dHNfaWZvLT52dHNpX21hdC0+dnRzX2F1ZGlvX2F0dHJb aV0sCj4gKyAgICAgICAgICAgICAgICBjLT5wbGF5X3BnYy0+YXVkaW9fY29udHJvbFtpXSwgZW50 cnkpKSA8IDApCj4gKyAgICAgICAgICAgIGdvdG8gYnJlYWtfZnJlZV9hbmRfZXJyb3I7Cj4gKwo+ ICsgICAgICAgIGlmIChjLT52dHNfaWZvLT52dHNpX21hdC0+dnRzX2F1ZGlvX2F0dHJbaV0uYXBw bGljYXRpb25fbW9kZSA9PSAxKQo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5J TkcsICJBdWRpbyAlZCB1c2VzIGthcmFva2UKPiBleHRlbnNpb25cbiIsIGVudHJ5LT5zdGFydGNv ZGUpOwo+ICsKPiArICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHMtPm5iX3N0cmVhbXM7IGor KykKPiArICAgICAgICAgICAgaWYgKHMtPnN0cmVhbXNbal0tPmlkID09IGVudHJ5LT5zdGFydGNv ZGUpCj4gKyAgICAgICAgICAgICAgICBnb3RvIGNvbnRpbnVlX2ZyZWU7Cj4gKwo+ICsgICAgICAg IGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FkZChjLT5tcGVnX2N0eCwgZW50cnks Cj4gQVZTVFJFQU1fUEFSU0VfRlVMTCkpIDwgMCkKPiArICAgICAgICAgICAgZ290byBicmVha19m cmVlX2FuZF9lcnJvcjsKPiArCj4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRpb19z dHJlYW1fYWRkKHMsIGVudHJ5LAo+IEFWU1RSRUFNX1BBUlNFX05PTkUpKSA8IDApCj4gKyAgICAg ICAgICAgIGdvdG8gYnJlYWtfZnJlZV9hbmRfZXJyb3I7Cj4gKwo+ICtjb250aW51ZV9mcmVlOgo+ ICsgICAgICAgIGF2X2ZyZWUoZW50cnkpOwo+ICsgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArYnJl YWtfZnJlZV9hbmRfZXJyb3I6Cj4gKyAgICAgICAgYXZfZnJlZShlbnRyeSk7Cj4gKyAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBhdWRpbyBzdHJlYW1c biIpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJwX3N0cmVhbV9hbmFseXplKEFW Rm9ybWF0Q29udGV4dCAqcywgdWludDMyX3QKPiBvZmZzZXQsIHN1YnBfYXR0cl90IHN1YnBfYXR0 ciwKPiArICAgICAgICBEVkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgKmVudHJ5KQo+ICt7 Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAg ICBjaGFyIGxhbmdfZHZkWzNdID0gezB9Owo+ICsKPiArICAgIGVudHJ5LT5zdGFydGNvZGUgPSAw eDIwICsgKG9mZnNldCAmIDB4MUYpOwo+ICsKPiArICAgIGVudHJ5LT5jbHV0ID0gYXZfbWFsbG9j eihEVkRWSURFT19TVUJQX0NMVVRfU0laRSk7Cj4gKyAgICBtZW1jcHkoZW50cnktPmNsdXQsIGMt PnBsYXlfcGdjLT5wYWxldHRlLCBEVkRWSURFT19TVUJQX0NMVVRfU0laRSk7Cj4gKwo+ICsgICAg Ly8gWFhYOiBZVVYyUkdCIGNvbnZlcnNpb24gd2lsbCBiZSBoYW5kbGVkIGluIHVwY29taW5nIGRl ZGljYXRlZCBwYXRjaAo+ICsgICAgLy8gZmZfZHZkdmlkZW9fc3VicF9jbHV0X3l1dl90b19yZ2Io ZW50cnktPmNsdXQsCj4gRFZEVklERU9fU1VCUF9DTFVUX1NJWkUpOwo+ICsKPiArICAgIEFWX1dC MTYobGFuZ19kdmQsIHN1YnBfYXR0ci5sYW5nX2NvZGUpOwo+ICsgICAgZW50cnktPmxhbmdfaXNv ID0gKGNoYXIgKikgZmZfY29udmVydF9sYW5nX3RvKGxhbmdfZHZkLAo+IEFWX0xBTkdfSVNPNjM5 XzJfQklCTCk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZk dmlkZW9fc3VicF9zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAqcywKPiArICAgICAgICBEVkRW aWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgKmVudHJ5LCBlbnVtIEFWU3RyZWFtUGFyc2VUeXBl Cj4gbmVlZF9wYXJzaW5nKQo+ICt7Cj4gKyAgICBBVlN0cmVhbSAqc3Q7Cj4gKyAgICBGRlN0cmVh bSAqc3RpOwo+ICsKPiArICAgIHN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBOVUxMKTsKPiAr ICAgIGlmICghc3QpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAg fQo+ICsKPiArICAgIHN0LT5pZCA9IGVudHJ5LT5zdGFydGNvZGU7Cj4gKyAgICBzdC0+Y29kZWNw YXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElUTEU7Cj4gKyAgICBzdC0+Y29kZWNw YXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfRFZEX1NVQlRJVExFOwo+ICsKPiArICAgIC8vIFhY WDogUGFsZXR0ZXMgd2lsbCBiZSBmaXhlZCBpbiBkZWRpY2F0ZWQgcGF0Y2hzZXQgKHdpdGggc2hh cmVkCj4gdXRpbGl0eSkKPiArICAgIC8vIGlmICgocmV0ID0gZmZfYWxsb2NfZXh0cmFkYXRhKHN0 LT5jb2RlY3BhciwKPiBEVkRWSURFT19TVUJQX1BBTEVUVEVfRVhUUkFEQVRBX1NJWkUpKSA8IDAp Cj4gKyAgICAvLyAgICAgcmV0dXJuIHJldDsKPiArICAgIC8vIGZmX2R2ZHZpZGVvX3N1YnBfcGFs ZXR0ZV9leHRyYWRhdGFfY2F0KGVudHJ5LT5jbHV0LAo+IERWRFZJREVPX1NVQlBfQ0xVVF9TSVpF LAo+ICsgICAgLy8gICAgICAgICBzdC0+Y29kZWNwYXItPmV4dHJhZGF0YSwgc3QtPmNvZGVjcGFy LT5leHRyYWRhdGFfc2l6ZSk7Cj4gKwo+ICsgICAgaWYgKGVudHJ5LT5sYW5nX2lzbykKPiArICAg ICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBlbnRyeS0+bGFuZ19p c28sIDApOwo+ICsKPiArICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAgIHN0aS0+cmVxdWVz dF9wcm9iZSA9IDA7Cj4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiAr Cj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JBUF9CSVRTLAo+ ICsgICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLm51bSwgRFZEVklERU9fVElNRV9CQVNFX1Eu ZGVuKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRl b19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwoQVZGb3JtYXRDb250ZXh0ICpzLAo+ICsgICAgICAg IHVpbnQzMl90IG9mZnNldCwgc3VicF9hdHRyX3Qgc3VicF9hdHRyKQo+ICt7Cj4gKyAgICBEVkRW aWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBEVkRWaWRlb1BH Q1N1YnRpdGxlU3RyZWFtRW50cnkgKmVudHJ5Owo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsg ICAgZW50cnkgPSBhdl9tYWxsb2Moc2l6ZW9mKERWRFZpZGVvUEdDU3VidGl0bGVTdHJlYW1FbnRy eSkpOwo+ICsKPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYW5hbHl6ZShz LCBvZmZzZXQsIHN1YnBfYXR0ciwgZW50cnkpKQo+IDwgMCkKPiArICAgICAgICBnb3RvIGVuZF9m cmVlX2Vycm9yOwo+ICsKPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsg aSsrKQo+ICsgICAgICAgIGlmIChzLT5zdHJlYW1zW2ldLT5pZCA9PSBlbnRyeS0+c3RhcnRjb2Rl KQo+ICsgICAgICAgICAgICBnb3RvIGVuZF9mcmVlOwo+ICsKPiArICAgIGlmICgocmV0ID0gZHZk dmlkZW9fc3VicF9zdHJlYW1fYWRkKGMtPm1wZWdfY3R4LCBlbnRyeSwKPiBBVlNUUkVBTV9QQVJT RV9GVUxMKSkgPCAwCj4gKyAgICAgICAgICAgIHx8IChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVh bV9hZGQocywgZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfTk9ORSkpIDwgMCkKPiArICAgICAgICBn b3RvIGVuZF9mcmVlX2Vycm9yOwo+ICsKPiArICAgIGdvdG8gZW5kX2ZyZWU7Cj4gKwo+ICtlbmRf ZnJlZV9lcnJvcjoKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWxs b2NhdGUgc3VidGl0bGUgc3RyZWFtXG4iKTsKPiArCj4gK2VuZF9mcmVlOgo+ICsgICAgYXZfZnJl ZShlbnRyeS0+Y2x1dCk7Cj4gKyAgICBhdl9mcmVlKGVudHJ5KTsKPiArCj4gKyAgICByZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9hbGwo QVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9 IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAoIWMtPnZ0c19pZm8tPnZ0c2lfbWF0LT5ucl9v Zl92dHNfc3VicF9zdHJlYW1zKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGZvciAo aW50IGkgPSAwOyBpIDwgYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19zdWJwX3N0cmVh bXM7Cj4gaSsrKSB7Cj4gKyAgICAgICAgaW50IHJldCA9IDA7Cj4gKyAgICAgICAgdWludDMyX3Qg c3VicF9jb250cm9sOwo+ICsgICAgICAgIHN1YnBfYXR0cl90IHN1YnBfYXR0cjsKPiArICAgICAg ICB2aWRlb19hdHRyX3QgdmlkZW9fYXR0cjsKPiArCj4gKyAgICAgICAgc3VicF9jb250cm9sID0g Yy0+cGxheV9wZ2MtPnN1YnBfY29udHJvbFtpXTsKPiArICAgICAgICBpZiAoIShzdWJwX2NvbnRy b2wgJiAweDgwMDAwMDAwKSkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAg IC8qIHRoZXJlIGNhbiBiZSBzZXZlcmFsIHByZXNlbnRhdGlvbnMgZm9yIG9uZSBTUFUgKi8KPiAr ICAgICAgICAvKiBmb3Igbm93LCBiZSBmbGV4aWJsZSB3aXRoIHRoZSBEQVIgY2hlY2sgZHVlIHRv IHdlaXJkIGF1dGhvcmluZwo+ICovCj4gKyAgICAgICAgdmlkZW9fYXR0ciA9IGMtPnZ0c19pZm8t PnZ0c2lfbWF0LT52dHNfdmlkZW9fYXR0cjsKPiArICAgICAgICBzdWJwX2F0dHIgPSBjLT52dHNf aWZvLT52dHNpX21hdC0+dnRzX3N1YnBfYXR0cltpXTsKPiArCj4gKyAgICAgICAgLyogNDozICov Cj4gKyAgICAgICAgaWYgKCF2aWRlb19hdHRyLmRpc3BsYXlfYXNwZWN0X3JhdGlvKSB7Cj4gKyAg ICAgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2ludGVybmFsKHMs IHN1YnBfY29udHJvbAo+ID4+IDI0LCBzdWJwX2F0dHIpKSA8IDApCj4gKyAgICAgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgfQo+ ICsKPiArICAgICAgICAvKiAxNjo5ICovCj4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19z dWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwocywgc3VicF9jb250cm9sID4+Cj4gMTYsIHN1YnBfYXR0 cikpIDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICAgLyogMTY6 OSBsZXR0ZXJib3ggKi8KPiArICAgICAgICBpZiAodmlkZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0g MiB8fCB2aWRlb19hdHRyLnBlcm1pdHRlZF9kZiA9PSAwKQo+ICsgICAgICAgICAgICBpZiAoKHJl dCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9pbnRlcm5hbChzLCBzdWJwX2NvbnRyb2wKPiA+ PiA4LCBzdWJwX2F0dHIpKSA8IDApCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsK PiArICAgICAgICAvKiAxNjo5IHBhbi1hbmQtc2NhbiAqLwo+ICsgICAgICAgIGlmICh2aWRlb19h dHRyLnBlcm1pdHRlZF9kZiA9PSAxIHx8IHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09IDApCj4g KyAgICAgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2ludGVybmFs KHMsIHN1YnBfY29udHJvbCwKPiBzdWJwX2F0dHIpKSA8IDApCj4gKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSh2b2lkICpvcGFxdWUsIHVpbnQ4X3Qg KmJ1ZiwgaW50Cj4gYnVmX3NpemUpCj4gK3sKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9w YXF1ZTsKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsK PiArICAgIHVpbnQ4X3QgbmF2X2J1ZltEVkRWSURFT19CTE9DS19TSVpFXSA9IHswfTsKPiArICAg IGludCBuYXZfZXZlbnQ7Cj4gKyAgICBpbnQgbmF2X2xlbjsKPiArCj4gKyAgICBkdmRuYXZfdnRz X2NoYW5nZV9ldmVudF90ICplX3Z0czsKPiArICAgIGR2ZG5hdl9jZWxsX2NoYW5nZV9ldmVudF90 ICplX2NlbGw7Cj4gKyAgICBpbnQgY3VyX3RpdGxlLCBjdXJfcGdjbiwgY3VyX3BnbiwgY3VyX2Fu Z2xlLCBjdXJfdGl0bGVfdW51c2VkLAo+IGN1cl9wdHQsIGN1cl9uYl9hbmdsZXM7Cj4gKyAgICBw Y2lfdCAqcF9wY2k7Cj4gKwo+ICsgICAgaWYgKGJ1Zl9zaXplICE9IERWRFZJREVPX0JMT0NLX1NJ WkUpIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBidWZmZXIg c2l6ZVxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEVkRWSURFT19NQVhfUFNfU0VBUkNIX0JM T0NLUzsgaSsrKSB7Cj4gKyAgICAgICAgaWYgKGZmX2NoZWNrX2ludGVycnVwdCgmcy0+aW50ZXJy dXB0X2NhbGxiYWNrKSkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKPiArCj4g KyAgICAgICAgaWYgKGR2ZG5hdl9nZXRfbmV4dF9ibG9jayhjLT5kdmRuYXYsIG5hdl9idWYsICZu YXZfZXZlbnQsCj4gJm5hdl9sZW4pICE9IERWRE5BVl9TVEFUVVNfT0spCj4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsKPiArICAgICAgICBpZiAobmF2X2xlbiA+IERW RFZJREVPX0JMT0NLX1NJWkUpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsKPiArICAgICAgICBpZiAoZHZkbmF2X2N1cnJlbnRfdGl0bGVfcHJvZ3JhbShjLT5k dmRuYXYsICZjdXJfdGl0bGUsCj4gJmN1cl9wZ2NuLCAmY3VyX3BnbikgIT0gRFZETkFWX1NUQVRV U19PSykKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKwo+ICsgICAg ICAgIGlmIChkdmRuYXZfY3VycmVudF90aXRsZV9pbmZvKGMtPmR2ZG5hdiwgJmN1cl90aXRsZV91 bnVzZWQsCj4gJmN1cl9wdHQpICE9IERWRE5BVl9TVEFUVVNfT0spCj4gKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsKPiArICAgICAgICBpZiAoZHZkbmF2X2dldF9hbmds ZV9pbmZvKGMtPmR2ZG5hdiwgJmN1cl9hbmdsZSwgJmN1cl9uYl9hbmdsZXMpCj4gIT0gRFZETkFW X1NUQVRVU19PSykKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKwo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJuZXcgYmxvY2s6IGk9JWQgbmF2X2V2 ZW50PSVkIG5hdl9sZW49JWQgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj dXJfdGl0bGU9JWQgY3VyX3B0dD0lZCBjdXJfYW5nbGU9JWQKPiBjdXJfY2VsbG49JWQgY3VyX3Bn Y249JWQgY3VyX3Bnbj0lZCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBs YXlfaW5fdnRzPSVkIHBsYXlfaW5fcGdjPSVkCj4gcGxheV9pbl9wcz0lZFxuIiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBuYXZfZXZlbnQsIG5hdl9sZW4sCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3RpdGxlLCBjdXJfcHR0LCBjdXJfYW5nbGUs Cj4gYy0+cGxheV9jZWxsbiwgY3VyX3BnY24sIGN1cl9wZ24sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYy0+cGxheV9pbl92dHMsIGMtPnBsYXlfaW5fcGdjLAo+IGMtPnBsYXlf aW5fcHMpOwo+ICsKPiArICAgICAgICBpZiAoYy0+cGxheV9pbl9wZ2MgJiYgKGN1cl9wZ2NuICE9 IGMtPm9wdF9wZ2MgfHwKPiAhZHZkbmF2X2lzX2RvbWFpbl92dHMoYy0+ZHZkbmF2KSkpCj4gKyAg ICAgICAgICAgIGdvdG8gZW5kX2VvZjsKPiArCj4gKyAgICAgICAgc3dpdGNoIChuYXZfZXZlbnQp IHsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfVlRTX0NIQU5HRToKPiArICAgICAgICAgICAg ICAgIGlmIChjLT5wbGF5X2luX3Z0cykKPiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZF9l b2Y7Cj4gKwo+ICsgICAgICAgICAgICAgICAgZV92dHMgPSAoZHZkbmF2X3Z0c19jaGFuZ2VfZXZl bnRfdCAqKSBuYXZfYnVmOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmIChlX3Z0cy0+bmV3X3Z0 c04gPT0gYy0+cGxheV92dHNuICYmIGVfdnRzLT5uZXdfZG9tYWluCj4gPT0gRFZEX0RPTUFJTl9W VFNUaXRsZSkKPiArICAgICAgICAgICAgICAgICAgICBjLT5wbGF5X2luX3Z0cyA9IDE7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX0NF TExfQ0hBTkdFOgo+ICsgICAgICAgICAgICAgICAgaWYgKCFjLT5wbGF5X2luX3Z0cykKPiArICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgICBlX2NlbGwg PSAoZHZkbmF2X2NlbGxfY2hhbmdlX2V2ZW50X3QgKikgbmF2X2J1ZjsKPiArCj4gKyAgICAgICAg ICAgICAgICBhdl9sb2cocywgQVZfTE9HX1RSQUNFLCAibmV3IGNlbGw6IHByZXY9JWQgbmV3PSVk XG4iLAo+IGMtPnBsYXlfY2VsbG4sIGVfY2VsbC0+Y2VsbE4pOwo+ICsKPiArICAgICAgICAgICAg ICAgIGlmICghYy0+cGxheV9pbl9wcyAmJiAhYy0+cGxheV9pbl9wZ2MpIHsKPiArICAgICAgICAg ICAgICAgICAgICBpZiAoY3VyX3RpdGxlID09IGMtPm9wdF90aXRsZSAmJiBjdXJfcHR0ID09IGMt Pm9wdF9wdHQKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cl9wZ2NuID09IGMt Pm9wdF9wZ2MgJiYgY3VyX3BnbiA9PQo+IGMtPm9wdF9wZykgewo+ICsgICAgICAgICAgICAgICAg ICAgICAgICBjLT5wbGF5X2luX3BnYyA9IDE7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLT5wbGF5X2NlbGxuID49IGVfY2VsbC0+Y2VsbE4g fHwgYy0+cGxheV9wZ24KPiA+IGN1cl9wZ24pIHsKPiArICAgICAgICAgICAgICAgICAgICBnb3Rv IGVuZF9lb2Y7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgYy0+ cGxheV9jZWxsbiA9IGVfY2VsbC0+Y2VsbE47Cj4gKyAgICAgICAgICAgICAgICBjLT5wbGF5X3Bn biA9IGN1cl9wZ247Cj4gKyAgICAgICAgICAgICAgICBjLT5wbGF5X3NraXBfY2VsbF9sYXN0ID0g Yy0+cGxheV9za2lwX2NlbGw7Cj4gKyAgICAgICAgICAgICAgICAvKiBYWFg6IHNob3VsZCB3ZSBi ZSBza2lwcGluZyByZXN0cmljdGVkIGNlbGxzCj4gbWlkLXN0cmVhbT8gKi8KPiArICAgICAgICAg ICAgICAgIGMtPnBsYXlfc2tpcF9jZWxsID0KPiBjLT5wbGF5X3BnYy0+Y2VsbF9wbGF5YmFja1tl X2NlbGwtPmNlbGxOIC0gMV0ucmVzdHJpY3RlZCAhPSAwOwo+ICsKPiArICAgICAgICAgICAgICAg IGlmIChjLT5wbGF5X3NraXBfY2VsbCkKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX1RSQUNFLCAiY2VsbCBza2lwcGVkOiBjZWxsPSVkXG4iLAo+IGVfY2VsbC0+Y2VsbE4p Owo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICBjYXNlIERW RE5BVl9OQVZfUEFDS0VUOgo+ICsgICAgICAgICAgICAgICAgaWYgKCFjLT5wbGF5X2luX3BnYykK PiArICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgICBj LT5wbGF5X3B0dCA9IGN1cl9wdHQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcF9wY2kgPSBkdmRu YXZfZ2V0X2N1cnJlbnRfbmF2X3BjaShjLT5kdmRuYXYpOwo+ICsKPiArICAgICAgICAgICAgICAg IGlmICghYy0+cGxheV9pbl9wcykgewo+ICsgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogdGhp cyBzaG91bGQgc2hpZnQgc3RhcnQgdGltZSB0byAwLCBidXQgbm90Cj4gd29ya2luZyBvbiBhbGwg ZGlzY3MgKi8KPiArICAgICAgICAgICAgICAgICAgICBjLT5wbGF5X3RzX29mZnNldCAtPSBwX3Bj aS0+cGNpX2dpLnZvYnVfc19wdG07Cj4gKyAgICAgICAgICAgICAgICAgICAgYy0+cGxheV9pbl9w cyA9IDE7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIGlmIChjdXJfcHR0IDwgYy0+cGxheV9wdHQp Cj4gKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmRfZW9mOwo+ICsKPiArICAgICAgICAgICAg ICAgIGlmIChjLT5wbGF5X3NraXBfY2VsbCkgewo+ICsgICAgICAgICAgICAgICAgICAgIGMtPnBs YXlfdHNfb2Zmc2V0IC09IHBfcGNpLT5wY2lfZ2kudm9idV9lX3B0bTsKPiArICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAocF9wY2ktPnBjaV9naS52b2J1X3NfcHRtIDwgYy0+cGxheV92b2J1X2Vf cHRtKQo+IHsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX1RSQUNFLCAi ZGlzY29udGludWl0eTogYWRqdXN0aW5nCj4gdGltZXN0YW1wc1xuIik7Cj4gKwo+ICsgICAgICAg ICAgICAgICAgICAgIGMtPnBsYXlfdHNfb2Zmc2V0ICs9IGMtPnBsYXlfdm9idV9lX3B0bTsKPiAr Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjLT5wbGF5X3NraXBfY2VsbF9sYXN0KSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGF2aW9fZmx1c2goJmMtPm1wZWdfcGIucHViKTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgZmZfcmVhZF9mcmFtZV9mbHVzaChjLT5tcGVnX2N0eCk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAg ICAgICAgICAgICAgIGMtPnBsYXlfdm9idV9lX3B0bSA9IHBfcGNpLT5wY2lfZ2kudm9idV9lX3B0 bTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgY2FzZSBE VkROQVZfQkxPQ0tfT0s6Cj4gKyAgICAgICAgICAgICAgICBpZiAoIWMtPnBsYXlfaW5fcHMgfHwg Yy0+cGxheV9za2lwX2NlbGwpCj4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgaWYgKG5hdl9sZW4gIT0gRFZEVklERU9fQkxPQ0tfU0laRSkKPiAr ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAg ICAgICAgICAgICAgICBpZiAoY3VyX2FuZ2xlICE9IGMtPm9wdF9hbmdsZSkgewo+ICsgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmV4cGVjdGVkIGFuZ2xlIGNo YW5nZVxuIik7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOUFVU X0NIQU5HRUQ7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgbWVt Y3B5KGJ1ZiwgJm5hdl9idWYsIG5hdl9sZW4pOwo+ICsKPiArICAgICAgICAgICAgICAgIHJldHVy biBuYXZfbGVuOwo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9TVElMTF9GUkFNRToKPiArICAg ICAgICAgICAgICAgIGlmIChjLT5wbGF5X2luX3BzKQo+ICsgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kX2VvZjsKPiArCj4gKyAgICAgICAgICAgICAgICBkdmRuYXZfc3RpbGxfc2tpcChjLT5k dmRuYXYpOwo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICBj YXNlIERWRE5BVl9XQUlUOgo+ICsgICAgICAgICAgICAgICAgaWYgKGMtPnBsYXlfaW5fcHMpCj4g KyAgICAgICAgICAgICAgICAgICAgZ290byBlbmRfZW9mOwo+ICsKPiArICAgICAgICAgICAgICAg IGR2ZG5hdl93YWl0X3NraXAoYy0+ZHZkbmF2KTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfSE9QX0NIQU5ORUw6Cj4gKyAgICAgICAg ICAgIGNhc2UgRFZETkFWX0hJR0hMSUdIVDoKPiArICAgICAgICAgICAgICAgIGlmIChjLT5wbGF5 X2luX3BzKQo+ICsgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kX2VvZjsKPiArCj4gKyAgICAg ICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfU1RPUDoKPiAr ICAgICAgICAgICAgICAgIGdvdG8gZW5kX2VvZjsKPiArICAgICAgICAgICAgZGVmYXVsdDoKPiAr ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgbmV4dCBwcm9ncmFtIHN0 cmVhbSBibG9ja1xuIik7Cj4gKwo+ICtlbmRfZW9mOgo+ICsgICAgYy0+cGxheV9lbmQgPSAxOwo+ ICsgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdmR2aWRl b19zdWJkZW11eF9jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIERWRFZpZGVv RGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGF2X2ZyZWVwKCZjLT5t cGVnX3BiLnB1Yi5idWZmZXIpOwo+ICsgICAgYXZfZnJlZXAoJmMtPm1wZWdfcGIpOwo+ICsgICAg YXZmb3JtYXRfY2xvc2VfaW5wdXQoJmMtPm1wZWdfY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkdmR2aWRlb19zdWJkZW11eF9vcGVuKEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAg RFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaW50IHJl dCA9IDA7Cj4gKwo+ICsgICAgaWYgKCEoYy0+bXBlZ19mbXQgPSBhdl9maW5kX2lucHV0X2Zvcm1h dCgibXBlZyIpKSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9ERU1VWEVSX05PVF9GT1VORDsK PiArCj4gKyAgICBpZiAoIShjLT5tcGVnX2N0eCA9IGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKSkp Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBpZiAoIShjLT5t cGVnX2J1ZiA9IGF2X21hbGxvYyhEVkRWSURFT19CTE9DS19TSVpFKSkpIHsKPiArICAgICAgICBh dmZvcm1hdF9mcmVlX2NvbnRleHQoYy0+bXBlZ19jdHgpOwo+ICsKPiArICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIGZmaW9faW5pdF9jb250ZXh0KCZj LT5tcGVnX3BiLCBjLT5tcGVnX2J1ZiwgRFZEVklERU9fQkxPQ0tfU0laRSwgMCwgcywKPiArICAg ICAgICAgICAgZHZkdmlkZW9fc3ViZGVtdXhfcmVhZF9kYXRhLCBOVUxMLCBOVUxMKTsKPiArICAg IGMtPm1wZWdfcGIucHViLnNlZWthYmxlID0gMDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGZmX2Nv cHlfd2hpdGVibGFja2xpc3RzKGMtPm1wZWdfY3R4LCBzKSkgPCAwKSB7Cj4gKyAgICAgICAgYXZm b3JtYXRfZnJlZV9jb250ZXh0KGMtPm1wZWdfY3R4KTsKPiArCj4gKyAgICAgICAgcmV0dXJuIHJl dDsKPiArICAgIH0KPiArCj4gKyAgICBjLT5tcGVnX2N0eC0+ZmxhZ3MgPSBBVkZNVF9GTEFHX0NV U1RPTV9JTyB8IEFWRk1UX0ZMQUdfR0VOUFRTOwo+ICsgICAgYy0+bXBlZ19jdHgtPmN0eF9mbGFn cyB8PSBBVkZNVENUWF9VTlNFRUtBQkxFOwo+ICsgICAgYy0+bXBlZ19jdHgtPnByb2Jlc2l6ZSA9 IDA7Cj4gKyAgICBjLT5tcGVnX2N0eC0+bWF4X2FuYWx5emVfZHVyYXRpb24gPSAwOwo+ICsgICAg Yy0+bXBlZ19jdHgtPmludGVycnVwdF9jYWxsYmFjayA9IHMtPmludGVycnVwdF9jYWxsYmFjazsK PiArICAgIGMtPm1wZWdfY3R4LT5wYiA9ICZjLT5tcGVnX3BiLnB1YjsKPiArICAgIGMtPm1wZWdf Y3R4LT5pb19vcGVuID0gTlVMTDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGF2Zm9ybWF0X29wZW5f aW5wdXQoJmMtPm1wZWdfY3R4LCAiIiwgYy0+bXBlZ19mbXQsIE5VTEwpKQo+IDwgMCkgewo+ICsg ICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChjLT5tcGVnX2N0eCk7Cj4gKwo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkdmR2aWRlb19yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sK PiArICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIGlmICgocmV0ID0gZHZkdmlkZW9fcGdjX29w ZW4ocykpIDwgMAo+ICsgICAgICAgICAgICB8fCAocmV0ID0gZHZkdmlkZW9fcGdjX2NoYXB0ZXJz X3NldHVwKHMpKSA8IDAKPiArICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX3N1YmRlbXV4 X29wZW4ocykpIDwgMAo+ICsgICAgICAgICAgICB8fCAocmV0ID0gZHZkdmlkZW9fdmlkZW9fc3Ry ZWFtX3NldHVwKHMpKSA8IDAKPiArICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVvX2F1ZGlv X3N0cmVhbV9hZGRfYWxsKHMpKSA8IDAKPiArICAgICAgICAgICAgfHwgKHJldCA9IGR2ZHZpZGVv X3N1YnBfc3RyZWFtX2FkZF9hbGwocykpIDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsK PiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcmVhZF9w YWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQo+ICt7Cj4gKyAgICBEVkRW aWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpbnQgcmV0ID0g MDsKPiArCj4gKyAgICBpZiAoYy0+cGxheV9lbmQpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf RU9GOwo+ICsKPiArICAgIHJldCA9IGF2X3JlYWRfZnJhbWUoYy0+bXBlZ19jdHgsIHBrdCk7Cj4g Kwo+ICsgICAgaWYgKHJldCA+PSAwKSB7Cj4gKyAgICAgICAgaWYgKGMtPm1wZWdfY3R4LT5uYl9z dHJlYW1zICE9IHMtPm5iX3N0cmVhbXMpIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19FUlJPUiwgIlVuZXhwZWN0ZWQgbmV3IHN0cmVhbSAweCUwMnggaW4KPiBwbGF5YmFja1xuIiwK PiArICAgICAgICAgICAgICAgICAgICBjLT5tcGVnX2N0eC0+c3RyZWFtc1tjLT5tcGVnX2N0eC0+ bmJfc3RyZWFtcyAtCj4gMV0tPmlkKTsKPiArCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOUFVUX0NIQU5HRUQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAocGt0LT5wdHMg IT0gQVZfTk9QVFNfVkFMVUUpCj4gKyAgICAgICAgICAgIHBrdC0+cHRzICs9IGMtPnBsYXlfdHNf b2Zmc2V0Owo+ICsgICAgICAgIGlmIChwa3QtPmR0cyAhPSBBVl9OT1BUU19WQUxVRSkKPiArICAg ICAgICAgICAgcGt0LT5kdHMgKz0gYy0+cGxheV90c19vZmZzZXQ7Cj4gKwo+ICsgICAgICAgIHJl dHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZHZkdmlkZW9fY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBkdmR2 aWRlb19zdWJkZW11eF9jbG9zZShzKTsKPiArICAgIGR2ZHZpZGVvX3BnY19jbG9zZShzKTsKPiAr Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2Yo RFZEVmlkZW9EZW11eENvbnRleHQsIHgpCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBkdmR2aWRl b19vcHRpb25zW10gPSB7Cj4gKyAgICB7InRpdGxlIiwgICAiVGl0bGUgTnVtYmVyIiwgICAgICAg ICAgICAgICAgICAgICBPRkZTRVQob3B0X3RpdGxlKSwKPiAgIEFWX09QVF9UWVBFX0lOVCwgICAg eyAuaTY0PTEgfSwgICAgIDEsICAgICAgICAgIDk5LAo+IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BB UkFNIH0sCj4gKyAgICB7ImNoYXB0ZXIiLCAiRW50cnkgQ2hhcHRlciAoUFRUKSBOdW1iZXIiLCAg ICAgICBPRkZTRVQob3B0X3B0dCksCj4gICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0xIH0s ICAgICAxLCAgICAgICAgICA5OSwKPiBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsg ICAgeyJwZ2MiLCAgICAgIkVudHJ5IFBHQyBOdW1iZXIgKDA9YXV0bykiLCAgICAgICAgT0ZGU0VU KG9wdF9wZ2MpLAo+ICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LCAgICAgMCwgICAg ICAgICAgMzI3NjcsCj4gIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7InBn IiwgICAgICAiRW50cnkgUEcgTnVtYmVyICgwPWF1dG8pIiwgICAgICAgICBPRkZTRVQob3B0X3Bn KSwKPiAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sICAgICAwLCAgICAgICAgICAy NTUsCj4gIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7ImFuZ2xlIiwgICAi VmlkZW8gQW5nbGUgTnVtYmVyIiwgICAgICAgICAgICAgICBPRkZTRVQob3B0X2FuZ2xlKSwKPiAg IEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTEgfSwgICAgIDEsICAgICAgICAgIDksCj4gIEFW X09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7InJlZ2lvbiIsICAiUGxheWJhY2sg UmVnaW9uIE51bWJlciAoMD1mcmVlKSIsICBPRkZTRVQob3B0X3JlZ2lvbiksCj4gICAgQVZfT1BU X1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LCAgICAgMCwgICAgICAgICAgOCwKPiAgQVZfT1BUX0ZM QUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHtOVUxMfQo+ICt9Owo+ICsKPiArc3RhdGljIGNv bnN0IEFWQ2xhc3MgZHZkdmlkZW9fY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3NfbmFtZSA9ICJEVkQt VmlkZW8gZGVtdXhlciIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1l LAo+ICsgICAgLm9wdGlvbiAgICAgPSBkdmR2aWRlb19vcHRpb25zLAo+ICsgICAgLnZlcnNpb24g ICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQKPiArfTsKPiArCj4gK2NvbnN0IEFWSW5wdXRGb3Jt YXQgZmZfZHZkdmlkZW9fZGVtdXhlciA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICA9ICJkdmR2 aWRlbyIsCj4gKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiRFZE LVZpZGVvIiksCj4gKyAgICAucHJpdl9jbGFzcyAgICAgPSAmZHZkdmlkZW9fY2xhc3MsCj4gKyAg ICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoRFZEVmlkZW9EZW11eENvbnRleHQpLAo+ICsgICAg LmZsYWdzICAgICAgICAgID0gQVZGTVRfTk9GSUxFIHwgQVZGTVRfU0hPV19JRFMgfCBBVkZNVF9U U19ESVNDT05UIHwKPiBBVkZNVF9OT19CWVRFX1NFRUsgfCBBVkZNVF9OT0dFTlNFQVJDSCB8IEFW Rk1UX05PQklOU0VBUkNILAo+ICsgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRk1UX0lOSVRfQ0xF QU5VUCwKPiArICAgIC5yZWFkX2Nsb3NlICAgICA9IGR2ZHZpZGVvX2Nsb3NlLAo+ICsgICAgLnJl YWRfaGVhZGVyICAgID0gZHZkdmlkZW9fcmVhZF9oZWFkZXIsCj4gKyAgICAucmVhZF9wYWNrZXQg ICAgPSBkdmR2aWRlb19yZWFkX3BhY2tldAo+ICt9Owo+IC0tCj4gMi4zNC4xCj4KPgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJv dmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0 ICJ1bnN1YnNjcmliZSIuCg==