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 979624262C for ; Wed, 5 Jan 2022 14:50:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 128AA68AD8B; Wed, 5 Jan 2022 16:50:39 +0200 (EET) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ADC2A68A6E0 for ; Wed, 5 Jan 2022 16:50:33 +0200 (EET) Received: by mail-wm1-f45.google.com with SMTP id v10-20020a05600c214a00b00345e59928eeso2091132wml.0 for ; Wed, 05 Jan 2022 06:50:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uvKyU8AM5ZePiTxv9+d4pNyxuipdmvMwLA4DBHeybXE=; b=VYoEis7RhNNzpAS8RTzzpRGSPOefdTJ1QSplpJNPLRHyCTedwvoyHtG/W55FgYNbK+ 3UepOnpz7PYYN+qahvP+bLPkj4y/igkXAGF1wFQ/6LYacDHS+5AxO9On3uHlgQyuL4H/ Qs1tdmY/2mUnrhUH8Ig92/4oWtz8k3nKX37Ejt4biRHE6NZMPXmLIfBRwbeJ/vBU7Fwx hL5/GPGRg7Nvtro82ET4Mxdky9n8CFDwBtLms2HvbhmTLax5Ba/4cxfo7XamEpaYGwZ7 uj3Y3Y9wazNlrIBbyOjKrc0l/LY/oGmIR7ka7Ryj+lN2XiWBSUezGp9lhDLMGIo6FE9y hk9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uvKyU8AM5ZePiTxv9+d4pNyxuipdmvMwLA4DBHeybXE=; b=opUX3XXGmdKVy4glw5vVObJqOsydlzKexJcjPF2OMGZIW59E/uha0KkMKBEqDRxeOC 2XUv4AssQR6yZ/Ocvdw7T0WJ0AkXszg1TZvzqvbelY0/XGicer+ZZVQduLqkmRASRkwx YdYVcEd2QtxidmfBgQD26r2I2kL+bJB/9ErKpXpksHcyVuH5zmbuC1svQ9wVN0MPhfCg c4MvqxnKVtY10OaJHoa95o1GhNVvMZteD0jFmdV3ni3oFrVsYTcsPkpurgnWM1UwuKQI 4cwcaIUifK3VSqOy39W/g4MPCWpXMSoCR6fwLyzoJECwmxKc4E2KVWrPbV786pLWoZmp Yi4Q== X-Gm-Message-State: AOAM532TERxfcLCvI+5J3sRCnKgcxNveziH9o+HcXjU5uGF7zdsCGkLy p5rIve1CLgVdthJIBkdW1bQl8CRXNxnXJA== X-Google-Smtp-Source: ABdhPJzWeyiZr6ZWBPsnYaex8PYJWSBZ/dC/HcnFYrBLH/4FB5JDD5juCSL7mWoLg5JI9KbWXvmhmw== X-Received: by 2002:a1c:7903:: with SMTP id l3mr3188414wme.103.1641394232878; Wed, 05 Jan 2022 06:50:32 -0800 (PST) Received: from [10.10.10.172] (84-112-75-55.cable.dynamic.surfer.at. [84.112.75.55]) by smtp.gmail.com with ESMTPSA id d5sm2568641wms.28.2022.01.05.06.50.32 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jan 2022 06:50:32 -0800 (PST) From: "Marvin Scholz" To: "FFmpeg development discussions and patches" Date: Wed, 05 Jan 2022 15:50:31 +0100 X-Mailer: MailMate (1.13.2r5673) Message-ID: <58D02B2C-1A9B-402B-B26C-47C44E8E9F73@gmail.com> In-Reply-To: References: MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH v8 2/3] libavdevice/avfoundation.m: Replace mutex-based concurrency handling in avfoundation.m by a thread-safe fifo queue with maximum length 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: Thilo Borgmann , Aman Karmani Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gMzEgRGVjIDIwMjEsIGF0IDE4OjQzLCBSb21haW4gQmVhdXhpcyB3cm90ZToKCj4gKiBVc2Ug YSBDTVNpbXBsZVF1ZXVlRW5xdWV1ZSB3aXRoIG1heGltdW0gbGVuZ3RoIHRvIHF1ZXVlIGFuZCBw cm9jZXNzIAo+IGluY29taW5nIGF1ZGlvIGFuZCB2aWRlbyBmcmFtZXMuCj4gKiBMb2cgYXZmb3Vu ZGF0aW9uIGVycm9ycy4KPiAqIFVzZSBBVkVSUk9SX0VYVEVSTkFMIGluc3RlYWQgb2YgQVZFUlJP UihFSU8pIGluIGF2Zm91bmRhdGlvbiBlcnJvcnMuCj4KPiBTaWduZWQtb2ZmLWJ5OiBSb21haW4g QmVhdXhpcyA8dG9vdHNAcmFzdGFnZWVrcy5vcmc+Cj4g4oCUCj4gW1NvcnJ5IGZvciB0aGUgbm9p c2UgYnV0IGFuIGlzc3VlIGNhbWUgdXAgd2l0aCB0aGUgcHJldmlvdXMgc2V0XQo+Cj4gVGhpcyBp cyB0aGUgc2Vjb25kIHBhdGNoIG9mIGEgc2VyaWVzIG9mIDMgdGhhdCBmaXgsIGNsZWFudXAgYW5k IAo+IGVuaGFuY2UgdGhlCj4gYXZmb3VuZGF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBsaWJhdmRl dmljZS4KPgo+IFRoZXNlIHBhdGNoZXMgY29tZSBmcm9tIGFuIGFjdHVhbCB1c2VyLWZhY2luZyBh cHBsaWNhdGlvbiByZWx5aW5nIG9uCj4gbGliYXZkZXZpY2XigJlzIGltcGxlbWVudGF0aW9uIG9m IGF2Zm91bmRhdGlvbiBhdWRpbyBpbnB1dC4gV2l0aG91dCAKPiB0aGVtLAo+IEF2Zm91bmRhdGlv biBpcyBwcmFjdGljYWxseSB1bnVzYWJsZSBhcyBpdCB3aWxsOgo+ICogUmVmdXNlIHRvIHByb2Nl c3MgY2VydGFpbiBzcGVjaWZpYyBhdWRpbyBpbnB1dCBmb3JtYXQgdGhhdCBhcmUgCj4gYWN0dWFs bHkKPiByZXR1cm5lZCBieSB0aGUgT1MgZm9yIHNvbWUgdXNlcnMgKHBhY2tlZCBQQ00gYXVkaW8p Cj4gKiBEcm9wIGF1ZGlvIGZyYW1lcywgcmVzdWx0aW5nIGluIGNvcnJ1cHRlZCBhdWRpbyBpbnB1 dC4gVGhpcyBtaWdodCAKPiBoYXZlIGJlZW4KPiB1bm5vdGljZWQgd2l0aCB2aWRlbyBmcmFtZXMg YnV0IHRoaXMgbWFrZXMgYXZmb3VuZGF0aW9uIGVzc2VudGlhbGx5IAo+IHVudXNhYmxlCj4gZm9y IGF1ZGlvLgo+Cj4gVGhlIHBhdGNoZXMgYXJlIG5vdyBiZWluZyBpbmNsdWRlZCBpbiBvdXIgcHJv ZHVjdGlvbiBidWlsZCBzbyB0aGV5IGFyZSAKPiB0ZXN0ZWQKPiBhbmQgdXNhYmxlIGluIHByb2R1 Y3Rpb24uCj4KPiBDaGFuZ2Vsb2cgZm9yIHRoaXMgcGF0Y2g6Cj4gKiB2MjogTm9uZQo+ICogdjM6 IE5vbmUKPiAqIHY0OiBOb25lCj4gKiB2NTogRml4IGluZGVudGF0aW9uL3dyYXBwaW5nCj4gKiB2 NjogTm9uZQo+ICogdjc6IFJlbW92ZWQgdXNlIG9mIGtBdWRpb0NvbnZlcnRlclByb3BlcnR5Q2Fs Y3VsYXRlT3V0cHV0QnVmZmVyU2l6ZQo+IHRvIGNhbGN1bGF0ZSBvdXRwdXQgYnVmZmVyIHNpemUu IFRoZSBjYWxjdWxhdGlvbiBpcyB0cml2aWFsIGFuZCB0aGlzIAo+IGNhbGwgd2FzCj4gcmFuZG9t bHkgZmFpbGluZyBmb3Igbm8gcmVhc29uCj4gKiB2ODogRml4IG1lbW9yeSBsZWFrIHdoZW4gdmlk ZW8gb3IgYXVkaW8gcXVldWUgaXMgZnVsbAo+Cj4gbGliYXZkZXZpY2UvYXZmb3VuZGF0aW9uLm0g fCAxOTQgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQo+IDEgZmlsZSBjaGFu Z2VkLCAxMDAgaW5zZXJ0aW9ucygrKSwgOTQgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEv bGliYXZkZXZpY2UvYXZmb3VuZGF0aW9uLm0gYi9saWJhdmRldmljZS9hdmZvdW5kYXRpb24ubQo+ IGluZGV4IDczOGNkOTMzNzUuLjM2ZjlmZGM1M2QgMTAwNjQ0Cj4gLS0tIGEvbGliYXZkZXZpY2Uv YXZmb3VuZGF0aW9uLm0KPiArKysgYi9saWJhdmRldmljZS9hdmZvdW5kYXRpb24ubQo+IEBAIC0y Niw3ICsyNiw3IEBACj4gICovCj4KPiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9u Lmg+Cj4gLSNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKyNpbXBvcnQgPENvcmVNZWRpYS9Db3JlTWVk aWEuaD4KPgo+ICNpbmNsdWRlICJsaWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaCIKPiAjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiBAQCAtMzksNiArMzksMTEgQEAKPiAjaW5jbHVkZSAi bGliYXZ1dGlsL2ltZ3V0aWxzLmgiCj4gI2luY2x1ZGUgImF2ZGV2aWNlLmgiCj4KPiArI2RlZmlu ZSBhdl9sb2dfYXZmb3VuZGF0aW9uX2Vycm9yKHMsIHN0ciwgZXJyKSBcCj4gKyAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJBdmZvdW5kYXRpb246ICVzLCAlc1xuIiwgc3RyLCBcCgpuaXRwaWNr OiBzaG91bGQgcHJvYmFibHkgYmUgQVZGb3VuZGF0aW9uLCBubz8KCj4gKyAgICAgW1tbTlNFcnJv ciBlcnJvcldpdGhEb21haW46TlNPU1N0YXR1c0Vycm9yRG9tYWluIGNvZGU6ZXJyIAo+IHVzZXJJ bmZvOm5pbF0gbG9jYWxpemVkRGVzY3JpcHRpb25dIFVURjhTdHJpbmddIFwKPiArICApCj4gKwoK VGhlIGVycm9yV2l0aERvbWFpbjogcmV0dXJucyBhbiBhdXRvcmVsZWFzZSBOU0Vycm9yLCBob3dl dmVyIHRoZXJlIGlzIG5vIAphdXRvcmVsZWFzZSBwb29sLgpFaXRoZXIgbWFrZSB0aGlzIGEgZnVu Y3Rpb24gd2l0aCBhbiBAYXV0b3JlbGVhc2UgcG9vbCBvciB1c2UgW1vigKYgCmFsbG9jXSBpbml0 4oCmXSBpbnN0ZWFkLCBhbmQKcmVsZWFzZSB0aGUgTlNFcnJvci4KCj4gc3RhdGljIGNvbnN0IGlu dCBhdmZfdGltZV9iYXNlID0gMTAwMDAwMDsKPgo+IHN0YXRpYyBjb25zdCBBVlJhdGlvbmFsIGF2 Zl90aW1lX2Jhc2VfcSA9IHsKPiBAQCAtODAsMTMgKzg1LDEyIEBACj4gICAgIHsgQVZfUElYX0ZN VF9OT05FLCAwIH0KPiB9Owo+Cj4gKyNkZWZpbmUgTUFYX1FVRVVFRF9GUkFNRVMgMTAKPiArCj4g dHlwZWRlZiBzdHJ1Y3QKPiB7Cj4gICAgIEFWQ2xhc3MqICAgICAgICBjbGFzczsKPgo+IC0gICAg aW50ICAgICAgICAgICAgIGZyYW1lc19jYXB0dXJlZDsKPiAtICAgIGludCAgICAgICAgICAgICBh dWRpb19mcmFtZXNfY2FwdHVyZWQ7Cj4gLSAgICBwdGhyZWFkX211dGV4X3QgZnJhbWVfbG9jazsK PiAgICAgaWQgICAgICAgICAgICAgIGF2Zl9kZWxlZ2F0ZTsKPiAgICAgaWQgICAgICAgICAgICAg IGF2Zl9hdWRpb19kZWxlZ2F0ZTsKPgo+IEBAIC0xMjIsOCArMTI2LDggQEAKPiAgICAgQVZDYXB0 dXJlU2Vzc2lvbiAgICAgICAgICpjYXB0dXJlX3Nlc3Npb247Cj4gICAgIEFWQ2FwdHVyZVZpZGVv RGF0YU91dHB1dCAqdmlkZW9fb3V0cHV0Owo+ICAgICBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQg KmF1ZGlvX291dHB1dDsKPiAtICAgIENNU2FtcGxlQnVmZmVyUmVmICAgICAgICAgY3VycmVudF9m cmFtZTsKPiAtICAgIENNU2FtcGxlQnVmZmVyUmVmICAgICAgICAgY3VycmVudF9hdWRpb19mcmFt ZTsKPiArICAgIENNU2ltcGxlUXVldWVSZWYgICAgICAgICAgYXVkaW9fZnJhbWVzX3F1ZXVlOwo+ ICsgICAgQ01TaW1wbGVRdWV1ZVJlZiAgICAgICAgICB2aWRlb19mcmFtZXNfcXVldWU7Cj4KPiAg ICAgQVZDYXB0dXJlRGV2aWNlICAgICAgICAgICpvYnNlcnZlZF9kZXZpY2U7Cj4gI2lmICFUQVJH RVRfT1NfSVBIT05FICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3MAo+ IEBAIC0xMzIsMTYgKzEzNiw2IEBACj4gICAgIGludCAgICAgICAgICAgICAgICAgICAgICBvYnNl cnZlZF9xdWl0Owo+IH0gQVZGQ29udGV4dDsKPgo+IC1zdGF0aWMgdm9pZCBsb2NrX2ZyYW1lcyhB VkZDb250ZXh0KiBjdHgpCj4gLXsKPiAtICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmY3R4LT5mcmFt ZV9sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdW5sb2NrX2ZyYW1lcyhBVkZDb250ZXh0 KiBjdHgpCj4gLXsKPiAtICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjdHgtPmZyYW1lX2xvY2sp Owo+IC19Cj4gLQo+IC8qKiBGcmFtZVJlY2lldmVyIGNsYXNzIC0gZGVsZWdhdGUgZm9yIEFWQ2Fw dHVyZVNlc3Npb24KPiAgKi8KPiBAaW50ZXJmYWNlIEFWRkZyYW1lUmVjZWl2ZXIgOiBOU09iamVj dAo+IEBAIC0yMTksMTcgKzIxMywxMyBAQCAtICh2b2lkKSAgY2FwdHVyZU91dHB1dDooQVZDYXB0 dXJlT3V0cHV0IAo+ICopY2FwdHVyZU91dHB1dAo+ICAgZGlkT3V0cHV0U2FtcGxlQnVmZmVyOihD TVNhbXBsZUJ1ZmZlclJlZil2aWRlb0ZyYW1lCj4gICAgICAgICAgZnJvbUNvbm5lY3Rpb246KEFW Q2FwdHVyZUNvbm5lY3Rpb24gKiljb25uZWN0aW9uCj4gewo+IC0gICAgbG9ja19mcmFtZXMoX2Nv bnRleHQpOwo+ICsgICAgT1NTdGF0dXMgcmV0ID0gQ01TaW1wbGVRdWV1ZUVucXVldWUoX2NvbnRl eHQtPnZpZGVvX2ZyYW1lc19xdWV1ZSwgCj4gdmlkZW9GcmFtZSk7Cj4KPiAtICAgIGlmIChfY29u dGV4dC0+Y3VycmVudF9mcmFtZSAhPSBuaWwpIHsKPiAtICAgICAgICBDRlJlbGVhc2UoX2NvbnRl eHQtPmN1cnJlbnRfZnJhbWUpOwo+ICsgICAgaWYgKHJldCAhPSBub0Vycikgewo+ICsgICAgICBh dl9sb2dfYXZmb3VuZGF0aW9uX2Vycm9yKF9jb250ZXh0LCAiRXJyb3Igd2hpbGUgcXVldWVpbmcg dmlkZW8gCj4gZnJhbWUiLCByZXQpOwo+ICAgICB9Cj4KPiAtICAgIF9jb250ZXh0LT5jdXJyZW50 X2ZyYW1lID0gCj4gKENNU2FtcGxlQnVmZmVyUmVmKUNGUmV0YWluKHZpZGVvRnJhbWUpOwo+IC0K PiAtICAgIHVubG9ja19mcmFtZXMoX2NvbnRleHQpOwo+IC0KPiAtICAgICsrX2NvbnRleHQtPmZy YW1lc19jYXB0dXJlZDsKPiArICAgIENGUmV0YWluKHZpZGVvRnJhbWUpOwo+IH0KPgo+IEBlbmQK PiBAQCAtMjYzLDE3ICsyNTMsMTMgQEAgLSAodm9pZCkgIGNhcHR1cmVPdXRwdXQ6KEFWQ2FwdHVy ZU91dHB1dCAKPiAqKWNhcHR1cmVPdXRwdXQKPiAgIGRpZE91dHB1dFNhbXBsZUJ1ZmZlcjooQ01T YW1wbGVCdWZmZXJSZWYpYXVkaW9GcmFtZQo+ICAgICAgICAgIGZyb21Db25uZWN0aW9uOihBVkNh cHR1cmVDb25uZWN0aW9uICopY29ubmVjdGlvbgo+IHsKPiAtICAgIGxvY2tfZnJhbWVzKF9jb250 ZXh0KTsKPiArICAgIE9TU3RhdHVzIHJldCA9IENNU2ltcGxlUXVldWVFbnF1ZXVlKF9jb250ZXh0 LT5hdWRpb19mcmFtZXNfcXVldWUsIAo+IGF1ZGlvRnJhbWUpOwo+Cj4gLSAgICBpZiAoX2NvbnRl eHQtPmN1cnJlbnRfYXVkaW9fZnJhbWUgIT0gbmlsKSB7Cj4gLSAgICAgICAgQ0ZSZWxlYXNlKF9j b250ZXh0LT5jdXJyZW50X2F1ZGlvX2ZyYW1lKTsKPiArICAgIGlmIChyZXQgIT0gbm9FcnIpIHsK PiArICAgICAgYXZfbG9nX2F2Zm91bmRhdGlvbl9lcnJvcihfY29udGV4dCwgIkVycm9yIHdoaWxl IHF1ZXVlaW5nIGF1ZGlvIAo+IGZyYW1lIiwgcmV0KTsKPiAgICAgfQo+Cj4gLSAgICBfY29udGV4 dC0+Y3VycmVudF9hdWRpb19mcmFtZSA9IAo+IChDTVNhbXBsZUJ1ZmZlclJlZilDRlJldGFpbihh dWRpb0ZyYW1lKTsKPiAtCj4gLSAgICB1bmxvY2tfZnJhbWVzKF9jb250ZXh0KTsKPiAtCj4gLSAg ICArK19jb250ZXh0LT5hdWRpb19mcmFtZXNfY2FwdHVyZWQ7Cj4gKyAgICBDRlJldGFpbihhdWRp b0ZyYW1lKTsKPiB9Cj4KPiBAZW5kCj4gQEAgLTI4OCw2ICsyNzQsMzAgQEAgc3RhdGljIHZvaWQg ZGVzdHJveV9jb250ZXh0KEFWRkNvbnRleHQqIGN0eCkKPiAgICAgW2N0eC0+YXZmX2RlbGVnYXRl ICAgIHJlbGVhc2VdOwo+ICAgICBbY3R4LT5hdmZfYXVkaW9fZGVsZWdhdGUgcmVsZWFzZV07Cj4K PiArICAgIENNU2FtcGxlQnVmZmVyUmVmIGZyYW1lOwo+ICsKPiArICAgIGlmIChjdHgtPnZpZGVv X2ZyYW1lc19xdWV1ZSkgewo+ICsgICAgICAgIGZyYW1lID0gCj4gKENNU2FtcGxlQnVmZmVyUmVm KUNNU2ltcGxlUXVldWVEZXF1ZXVlKGN0eC0+dmlkZW9fZnJhbWVzX3F1ZXVlKTsKPiArICAgICAg ICB3aGlsZSAoZnJhbWUpIHsKPiArICAgICAgICAgIENGUmVsZWFzZShmcmFtZSk7Cj4gKyAgICAg ICAgICBmcmFtZSA9IAo+IChDTVNhbXBsZUJ1ZmZlclJlZilDTVNpbXBsZVF1ZXVlRGVxdWV1ZShj dHgtPnZpZGVvX2ZyYW1lc19xdWV1ZSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBDRlJl bGVhc2UoY3R4LT52aWRlb19mcmFtZXNfcXVldWUpOwo+ICsgICAgICAgIGN0eC0+dmlkZW9fZnJh bWVzX3F1ZXVlID0gTlVMTDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoY3R4LT5hdWRpb19mcmFt ZXNfcXVldWUpIHsKPiArICAgICAgICBmcmFtZSA9IAo+IChDTVNhbXBsZUJ1ZmZlclJlZilDTVNp bXBsZVF1ZXVlRGVxdWV1ZShjdHgtPmF1ZGlvX2ZyYW1lc19xdWV1ZSk7Cj4gKyAgICAgICAgd2hp bGUgKGZyYW1lKSB7Cj4gKyAgICAgICAgICBDRlJlbGVhc2UoZnJhbWUpOwo+ICsgICAgICAgICAg ZnJhbWUgPSAKPiAoQ01TYW1wbGVCdWZmZXJSZWYpQ01TaW1wbGVRdWV1ZURlcXVldWUoY3R4LT5h dWRpb19mcmFtZXNfcXVldWUpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgQ0ZSZWxlYXNl KGN0eC0+YXVkaW9fZnJhbWVzX3F1ZXVlKTsKPiArICAgICAgICBjdHgtPmF1ZGlvX2ZyYW1lc19x dWV1ZSA9IE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICAgICBjdHgtPmNhcHR1cmVfc2Vzc2lvbiA9IE5V TEw7Cj4gICAgIGN0eC0+dmlkZW9fb3V0cHV0ICAgID0gTlVMTDsKPiAgICAgY3R4LT5hdWRpb19v dXRwdXQgICAgPSBOVUxMOwo+IEBAIC0yOTgsMTIgKzMwOCw2IEBAIHN0YXRpYyB2b2lkIGRlc3Ry b3lfY29udGV4dChBVkZDb250ZXh0KiBjdHgpCj4gICAgICAgQXVkaW9Db252ZXJ0ZXJEaXNwb3Nl KGN0eC0+YXVkaW9fY29udmVydGVyKTsKPiAgICAgICBjdHgtPmF1ZGlvX2NvbnZlcnRlciA9IE5V TEw7Cj4gICAgIH0KPiAtCj4gLSAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmN0eC0+ZnJhbWVf bG9jayk7Cj4gLQo+IC0gICAgaWYgKGN0eC0+Y3VycmVudF9mcmFtZSkgewo+IC0gICAgICAgIENG UmVsZWFzZShjdHgtPmN1cnJlbnRfZnJhbWUpOwo+IC0gICAgfQo+IH0KPgo+IHN0YXRpYyB2b2lk IHBhcnNlX2RldmljZV9uYW1lKEFWRm9ybWF0Q29udGV4dCAqcykKPiBAQCAtNjMxLDE4ICs2MzUs MTggQEAgc3RhdGljIGludCBnZXRfdmlkZW9fY29uZmlnKEFWRm9ybWF0Q29udGV4dCAqcykKPiAg ICAgfQo+Cj4gICAgIC8vIFRha2Ugc3RyZWFtIGluZm8gZnJvbSB0aGUgZmlyc3QgZnJhbWUuCj4g LSAgICB3aGlsZSAoY3R4LT5mcmFtZXNfY2FwdHVyZWQgPCAxKSB7Cj4gKyAgICB3aGlsZSAoQ01T aW1wbGVRdWV1ZUdldENvdW50KGN0eC0+dmlkZW9fZnJhbWVzX3F1ZXVlKSA8IDEpIHsKPiAgICAg ICAgIENGUnVuTG9vcFJ1bkluTW9kZShrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIDAuMSwgWUVTKTsK PiAgICAgfQo+Cj4gLSAgICBsb2NrX2ZyYW1lcyhjdHgpOwo+ICsgICAgQ01TYW1wbGVCdWZmZXJS ZWYgZnJhbWUgPSAKPiAoQ01TYW1wbGVCdWZmZXJSZWYpQ01TaW1wbGVRdWV1ZURlcXVldWUoY3R4 LT52aWRlb19mcmFtZXNfcXVldWUpOwo+Cj4gICAgIGN0eC0+dmlkZW9fc3RyZWFtX2luZGV4ID0g c3RyZWFtLT5pbmRleDsKPgo+ICAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0cmVhbSwgNjQsIDEs IGF2Zl90aW1lX2Jhc2UpOwo+Cj4gLSAgICBpbWFnZV9idWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckdl dEltYWdlQnVmZmVyKGN0eC0+Y3VycmVudF9mcmFtZSk7Cj4gLSAgICBibG9ja19idWZmZXIgPSBD TVNhbXBsZUJ1ZmZlckdldERhdGFCdWZmZXIoY3R4LT5jdXJyZW50X2ZyYW1lKTsKPiArICAgIGlt YWdlX2J1ZmZlciA9IENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoZnJhbWUpOwo+ICsgICAg YmxvY2tfYnVmZmVyID0gQ01TYW1wbGVCdWZmZXJHZXREYXRhQnVmZmVyKGZyYW1lKTsKPgo+ICAg ICBpZiAoaW1hZ2VfYnVmZmVyKSB7Cj4gICAgICAgICBpbWFnZV9idWZmZXJfc2l6ZSA9IENWSW1h Z2VCdWZmZXJHZXRFbmNvZGVkU2l6ZShpbWFnZV9idWZmZXIpOwo+IEBAIC02NTgsMTAgKzY2Miw3 IEBAIHN0YXRpYyBpbnQgZ2V0X3ZpZGVvX2NvbmZpZyhBVkZvcm1hdENvbnRleHQgKnMpCj4gICAg ICAgICBzdHJlYW0tPmNvZGVjcGFyLT5mb3JtYXQgICAgID0gY3R4LT5waXhlbF9mb3JtYXQ7Cj4g ICAgIH0KPgo+IC0gICAgQ0ZSZWxlYXNlKGN0eC0+Y3VycmVudF9mcmFtZSk7Cj4gLSAgICBjdHgt PmN1cnJlbnRfZnJhbWUgPSBuaWw7Cj4gLQo+IC0gICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+ICsg ICAgQ0ZSZWxlYXNlKGZyYW1lKTsKPgo+ICAgICByZXR1cm4gMDsKPiB9Cj4gQEAgLTY4MSwyNyAr NjgyLDI3IEBAIHN0YXRpYyBpbnQgZ2V0X2F1ZGlvX2NvbmZpZyhBVkZvcm1hdENvbnRleHQgKnMp Cj4gICAgIH0KPgo+ICAgICAvLyBUYWtlIHN0cmVhbSBpbmZvIGZyb20gdGhlIGZpcnN0IGZyYW1l Lgo+IC0gICAgd2hpbGUgKGN0eC0+YXVkaW9fZnJhbWVzX2NhcHR1cmVkIDwgMSkgewo+ICsgICAg d2hpbGUgKENNU2ltcGxlUXVldWVHZXRDb3VudChjdHgtPmF1ZGlvX2ZyYW1lc19xdWV1ZSkgPCAx KSB7Cj4gICAgICAgICBDRlJ1bkxvb3BSdW5Jbk1vZGUoa0NGUnVuTG9vcERlZmF1bHRNb2RlLCAw LjEsIFlFUyk7Cj4gICAgIH0KPgo+IC0gICAgbG9ja19mcmFtZXMoY3R4KTsKPiArICAgIENNU2Ft cGxlQnVmZmVyUmVmIGZyYW1lID0gCj4gKENNU2FtcGxlQnVmZmVyUmVmKUNNU2ltcGxlUXVldWVE ZXF1ZXVlKGN0eC0+YXVkaW9fZnJhbWVzX3F1ZXVlKTsKPgo+ICAgICBjdHgtPmF1ZGlvX3N0cmVh bV9pbmRleCA9IHN0cmVhbS0+aW5kZXg7Cj4KPiAgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdHJl YW0sIDY0LCAxLCBhdmZfdGltZV9iYXNlKTsKPgo+IC0gICAgZm9ybWF0X2Rlc2MgPSAKPiBDTVNh bXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKGN0eC0+Y3VycmVudF9hdWRpb19mcmFtZSk7 Cj4gKyAgICBmb3JtYXRfZGVzYyA9IENNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24o ZnJhbWUpOwo+ICAgICBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKmlucHV0X2Zv cm1hdCA9IAo+IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRp b24oZm9ybWF0X2Rlc2MpOwo+Cj4gICAgIGlmICghaW5wdXRfZm9ybWF0KSB7Cj4gLSAgICAgICAg dW5sb2NrX2ZyYW1lcyhjdHgpOwo+ICsgICAgICAgIENGUmVsZWFzZShmcmFtZSk7Cj4gICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiYXVkaW8gZm9ybWF0IG5vdCBhdmFpbGFibGVcbiIp Owo+ICAgICAgICAgcmV0dXJuIDE7Cj4gICAgIH0KPgo+ICAgICBpZiAoaW5wdXRfZm9ybWF0LT5t Rm9ybWF0SUQgIT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNKSB7Cj4gLSAgICAgICAgdW5sb2NrX2Zy YW1lcyhjdHgpOwo+ICsgICAgICAgIENGUmVsZWFzZShmcmFtZSk7Cj4gICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAib25seSBQQ00gYXVkaW8gZm9ybWF0IGFyZSBzdXBwb3J0ZWQgCj4g YXQgdGhlIG1vbWVudFxuIik7Cj4gICAgICAgICByZXR1cm4gMTsKPiAgICAgfQo+IEBAIC03ODEs MTYgKzc4MiwxMyBAQCBzdGF0aWMgaW50IGdldF9hdWRpb19jb25maWcoQVZGb3JtYXRDb250ZXh0 ICpzKQo+ICAgICBpZiAobXVzdF9jb252ZXJ0KSB7Cj4gICAgICAgICBPU1N0YXR1cyByZXQgPSBB dWRpb0NvbnZlcnRlck5ldyhpbnB1dF9mb3JtYXQsICZvdXRwdXRfZm9ybWF0LCAKPiAmY3R4LT5h dWRpb19jb252ZXJ0ZXIpOwo+ICAgICAgICAgaWYgKHJldCAhPSBub0Vycikgewo+IC0gICAgICAg ICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4gLSAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJFcnJvciB3aGlsZSBhbGxvY2F0aW5nIGF1ZGlvIAo+IGNvbnZlcnRlclxuIik7Cj4g KyAgICAgICAgICAgIENGUmVsZWFzZShmcmFtZSk7Cj4gKyAgICAgICAgICAgIGF2X2xvZ19hdmZv dW5kYXRpb25fZXJyb3IocywgImVycm9yIHdoaWxlIGNyZWF0aW5nIGF1ZGlvIAo+IGNvbnZlcnRl ciIsIHJldCk7Cj4gICAgICAgICAgICAgcmV0dXJuIDE7Cj4gICAgICAgICB9Cj4gICAgIH0KPgo+ IC0gICAgQ0ZSZWxlYXNlKGN0eC0+Y3VycmVudF9hdWRpb19mcmFtZSk7Cj4gLSAgICBjdHgtPmN1 cnJlbnRfYXVkaW9fZnJhbWUgPSBuaWw7Cj4gLQo+IC0gICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+ ICsgICAgQ0ZSZWxlYXNlKGZyYW1lKTsKPgo+ICAgICByZXR1cm4gMDsKPiB9Cj4gQEAgLTgwOCw4 ICs4MDYsNiBAQCBzdGF0aWMgaW50IGF2Zl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMp Cj4KPiAgICAgY3R4LT5udW1fdmlkZW9fZGV2aWNlcyA9IFtkZXZpY2VzIGNvdW50XSArIFtkZXZp Y2VzX211eGVkIGNvdW50XTsKPgo+IC0gICAgcHRocmVhZF9tdXRleF9pbml0KCZjdHgtPmZyYW1l X2xvY2ssIE5VTEwpOwo+IC0KPiAjaWYgIVRBUkdFVF9PU19JUEhPTkUgJiYgX19NQUNfT1NfWF9W RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCj4gICAgIENHR2V0QWN0aXZlRGlzcGxheUxpc3Qo MCwgTlVMTCwgJm51bV9zY3JlZW5zKTsKPiAjZW5kaWYKPiBAQCAtMTAxMCw2ICsxMDA2LDIxIEBA IHN0YXRpYyBpbnQgYXZmX3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiAgICAgLy8g SW5pdGlhbGl6ZSBjYXB0dXJlIHNlc3Npb24KPiAgICAgY3R4LT5jYXB0dXJlX3Nlc3Npb24gPSBb W0FWQ2FwdHVyZVNlc3Npb24gYWxsb2NdIGluaXRdOwo+Cj4gKyAgICBPU1N0YXR1cyByZXQ7Cj4g KyAgICByZXQgPSBDTVNpbXBsZVF1ZXVlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIE1BWF9R VUVVRURfRlJBTUVTLCAKPiAmY3R4LT52aWRlb19mcmFtZXNfcXVldWUpOwo+ICsKPiArICAgIGlm IChyZXQgIT0gbm9FcnIpIHsKPiArICAgICAgICBhdl9sb2dfYXZmb3VuZGF0aW9uX2Vycm9yKHMs ICJlcnJvciB3aGlsZSBjcmVhdGluZyBmcmFtZSAKPiBxdWV1ZSIsIHJldCk7Cj4gKyAgICAgICAg Z290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IENNU2ltcGxlUXVldWVDcmVhdGUo a0NGQWxsb2NhdG9yRGVmYXVsdCwgTUFYX1FVRVVFRF9GUkFNRVMsIAo+ICZjdHgtPmF1ZGlvX2Zy YW1lc19xdWV1ZSk7Cj4gKwo+ICsgICAgaWYgKHJldCAhPSBub0Vycikgewo+ICsgICAgICAgIGF2 X2xvZ19hdmZvdW5kYXRpb25fZXJyb3IocywgImVycm9yIHdoaWxlIGNyZWF0aW5nIGZyYW1lIAo+ IHF1ZXVlIiwgcmV0KTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICAgICBp ZiAodmlkZW9fZGV2aWNlICYmIGFkZF92aWRlb19kZXZpY2UocywgdmlkZW9fZGV2aWNlKSkgewo+ ICAgICAgICAgZ290byBmYWlsOwo+ICAgICB9Cj4gQEAgLTEwMzksNyArMTA1MCw4IEBAIHN0YXRp YyBpbnQgYXZmX3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiBmYWlsOgo+ICAgICBb cG9vbCByZWxlYXNlXTsKPiAgICAgZGVzdHJveV9jb250ZXh0KGN0eCk7Cj4gLSAgICByZXR1cm4g QVZFUlJPUihFSU8pOwo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkVycm9yIHdoaWxl IG9wZW5pbmcgQVZmb3VuZGF0aW9uIGNhcHR1cmUgCj4gc2Vzc2lvblxuIik7Cj4gKyAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiB9Cj4KPiBzdGF0aWMgaW50IGNvcHlfY3ZwaXhlbGJ1ZmZl cihBVkZvcm1hdENvbnRleHQgKnMsCj4gQEAgLTEwODgsMzggKzExMDAsMzUgQEAgc3RhdGljIGlu dCBjb3B5X2N2cGl4ZWxidWZmZXIoQVZGb3JtYXRDb250ZXh0IAo+ICpzLAo+IHN0YXRpYyBpbnQg YXZmX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKPiB7Cj4g ICAgIE9TU3RhdHVzIHJldDsKPiArICAgIGludCBzdGF0dXM7Cj4gICAgIEFWRkNvbnRleHQqIGN0 eCA9IChBVkZDb250ZXh0KilzLT5wcml2X2RhdGE7Cj4KPiAgICAgZG8gewo+IC0gICAgICAgIENW SW1hZ2VCdWZmZXJSZWYgaW1hZ2VfYnVmZmVyOwo+IC0gICAgICAgIENNQmxvY2tCdWZmZXJSZWYg YmxvY2tfYnVmZmVyOwo+IC0gICAgICAgIGxvY2tfZnJhbWVzKGN0eCk7Cj4gLQo+IC0gICAgICAg IGlmIChjdHgtPmN1cnJlbnRfZnJhbWUgIT0gbmlsKSB7Cj4gLSAgICAgICAgICAgIGludCBzdGF0 dXM7Cj4gKyAgICAgICAgaWYgKDEgPD0gQ01TaW1wbGVRdWV1ZUdldENvdW50KGN0eC0+dmlkZW9f ZnJhbWVzX3F1ZXVlKSkgewo+ICAgICAgICAgICAgIGludCBsZW5ndGggPSAwOwo+IC0KPiAtICAg ICAgICAgICAgaW1hZ2VfYnVmZmVyID0gCj4gQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihj dHgtPmN1cnJlbnRfZnJhbWUpOwo+IC0gICAgICAgICAgICBibG9ja19idWZmZXIgPSAKPiBDTVNh bXBsZUJ1ZmZlckdldERhdGFCdWZmZXIoY3R4LT5jdXJyZW50X2ZyYW1lKTsKPiArICAgICAgICAg ICAgQ01TYW1wbGVCdWZmZXJSZWYgdmlkZW9fZnJhbWUgPSAKPiAoQ01TYW1wbGVCdWZmZXJSZWYp Q01TaW1wbGVRdWV1ZURlcXVldWUoY3R4LT52aWRlb19mcmFtZXNfcXVldWUpOwo+ICsgICAgICAg ICAgICBDVkltYWdlQnVmZmVyUmVmIGltYWdlX2J1ZmZlciA9IAo+IENNU2FtcGxlQnVmZmVyR2V0 SW1hZ2VCdWZmZXIodmlkZW9fZnJhbWUpOzsKPiArICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJl ZiBibG9ja19idWZmZXIgPSAKPiBDTVNhbXBsZUJ1ZmZlckdldERhdGFCdWZmZXIodmlkZW9fZnJh bWUpOwo+Cj4gICAgICAgICAgICAgaWYgKGltYWdlX2J1ZmZlciAhPSBuaWwpIHsKPiAgICAgICAg ICAgICAgICAgbGVuZ3RoID0gKGludClDVlBpeGVsQnVmZmVyR2V0RGF0YVNpemUoaW1hZ2VfYnVm ZmVyKTsKPiAgICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrX2J1ZmZlciAhPSBuaWwpIHsKPiAg ICAgICAgICAgICAgICAgbGVuZ3RoID0gCj4gKGludClDTUJsb2NrQnVmZmVyR2V0RGF0YUxlbmd0 aChibG9ja19idWZmZXIpOwo+ICAgICAgICAgICAgIH0gZWxzZSAgewo+IC0gICAgICAgICAgICAg ICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+ICsgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKHZpZGVv X2ZyYW1lKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiAgICAg ICAgICAgICB9Cj4KPiAtICAgICAgICAgICAgaWYgKGF2X25ld19wYWNrZXQocGt0LCBsZW5ndGgp IDwgMCkgewo+IC0gICAgICAgICAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+IC0gICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgc3RhdHVzID0gYXZf bmV3X3BhY2tldChwa3QsIGxlbmd0aCk7Cj4gKyAgICAgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7 Cj4gKyAgICAgICAgICAgICAgICBDRlJlbGVhc2UodmlkZW9fZnJhbWUpOwo+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIHN0YXR1czsKPiAgICAgICAgICAgICB9Cj4KPiAgICAgICAgICAgICBDTUl0 ZW1Db3VudCBjb3VudDsKPiAgICAgICAgICAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nX2lu Zm87Cj4KPiAtICAgICAgICAgICAgaWYgCj4gKENNU2FtcGxlQnVmZmVyR2V0T3V0cHV0U2FtcGxl VGltaW5nSW5mb0FycmF5KGN0eC0+Y3VycmVudF9mcmFtZSwgMSwgCj4gJnRpbWluZ19pbmZvLCAm Y291bnQpID09IG5vRXJyKSB7Cj4gKyAgICAgICAgICAgIGlmIAo+IChDTVNhbXBsZUJ1ZmZlckdl dE91dHB1dFNhbXBsZVRpbWluZ0luZm9BcnJheSh2aWRlb19mcmFtZSwgMSwgCj4gJnRpbWluZ19p bmZvLCAmY291bnQpID09IG5vRXJyKSB7Cj4gICAgICAgICAgICAgICAgIEFWUmF0aW9uYWwgdGlt ZWJhc2VfcSA9IGF2X21ha2VfcSgxLCAKPiB0aW1pbmdfaW5mby5wcmVzZW50YXRpb25UaW1lU3Rh bXAudGltZXNjYWxlKTsKPiAgICAgICAgICAgICAgICAgcGt0LT5wdHMgPSBwa3QtPmR0cyA9IAo+ IGF2X3Jlc2NhbGVfcSh0aW1pbmdfaW5mby5wcmVzZW50YXRpb25UaW1lU3RhbXAudmFsdWUsIHRp bWViYXNlX3EsIAo+IGF2Zl90aW1lX2Jhc2VfcSk7Cj4gICAgICAgICAgICAgfQo+IEBAIC0xMTMz LDE4ICsxMTQyLDE4IEBAIHN0YXRpYyBpbnQgYXZmX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4 dCAqcywgCj4gQVZQYWNrZXQgKnBrdCkKPiAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKPiAg ICAgICAgICAgICAgICAgcmV0ID0gQ01CbG9ja0J1ZmZlckNvcHlEYXRhQnl0ZXMoYmxvY2tfYnVm ZmVyLCAwLCAKPiBwa3QtPnNpemUsIHBrdC0+ZGF0YSk7Cj4gICAgICAgICAgICAgICAgIGlmIChy ZXQgIT0ga0NNQmxvY2tCdWZmZXJOb0Vycikgewo+IC0gICAgICAgICAgICAgICAgICAgIHN0YXR1 cyA9IEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2dfYXZmb3VuZGF0 aW9uX2Vycm9yKHMsICJlcnJvciB3aGlsZSBjb3B5aW5nIAo+IGJ1ZmZlciBkYXRhIiwgcmV0KTsK PiArICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBBVkVSUk9SX0VYVEVSTkFMOwo+ICAgICAg ICAgICAgICAgICB9Cj4gICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgQ0ZSZWxlYXNlKGN0 eC0+Y3VycmVudF9mcmFtZSk7Cj4gLSAgICAgICAgICAgIGN0eC0+Y3VycmVudF9mcmFtZSA9IG5p bDsKPiArICAgICAgICAgICAgQ0ZSZWxlYXNlKHZpZGVvX2ZyYW1lKTsKPgo+ICAgICAgICAgICAg IGlmIChzdGF0dXMgPCAwKSB7Cj4gLSAgICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7 Cj4gICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Cj4gICAgICAgICAgICAgfQo+IC0gICAg ICAgIH0gZWxzZSBpZiAoY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lICE9IG5pbCkgewo+IC0gICAg ICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIGJsb2NrX2J1ZmZlciA9IAo+IENNU2FtcGxlQnVmZmVy R2V0RGF0YUJ1ZmZlcihjdHgtPmN1cnJlbnRfYXVkaW9fZnJhbWUpOwo+ICsgICAgICAgIH0gZWxz ZSBpZiAoMSA8PSAKPiBDTVNpbXBsZVF1ZXVlR2V0Q291bnQoY3R4LT5hdWRpb19mcmFtZXNfcXVl dWUpKSB7Cj4gKyAgICAgICAgICAgIENNU2FtcGxlQnVmZmVyUmVmIGF1ZGlvX2ZyYW1lID0gCj4g KENNU2FtcGxlQnVmZmVyUmVmKUNNU2ltcGxlUXVldWVEZXF1ZXVlKGN0eC0+YXVkaW9fZnJhbWVz X3F1ZXVlKTsKPiArICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiBibG9ja19idWZmZXIgPSAK PiBDTVNhbXBsZUJ1ZmZlckdldERhdGFCdWZmZXIoYXVkaW9fZnJhbWUpOwo+Cj4gICAgICAgICAg ICAgc2l6ZV90IGlucHV0X3NpemUgPSAKPiBDTUJsb2NrQnVmZmVyR2V0RGF0YUxlbmd0aChibG9j a19idWZmZXIpOwo+ICAgICAgICAgICAgIGludCBidWZmZXJfc2l6ZSA9IGlucHV0X3NpemUgLyBj dHgtPmF1ZGlvX2J1ZmZlcnM7Cj4gQEAgLTExNzAsOCArMTE3OSw5IEBAIHN0YXRpYyBpbnQgYXZm X3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgCj4gQVZQYWNrZXQgKnBrdCkKPgo+ICAg ICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKSB7Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgYXZfZnJlZShpbnB1dF9idWZmZXIpOwo+IC0gICAgICAgICAg ICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIENGUmVs ZWFzZShhdWRpb19mcmFtZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZ19hdmZv dW5kYXRpb25fZXJyb3IocywgImVycm9yIHdoaWxlIAo+IGFjY2Vzc2luZyBhdWRpbyBidWZmZXIg ZGF0YSIsIHJldCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOwo+ICAgICAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICB9Cj4KPiBA QCAtMTE4OCwyMyArMTE5OCwyNSBAQCBzdGF0aWMgaW50IGF2Zl9yZWFkX3BhY2tldChBVkZvcm1h dENvbnRleHQgKnMsIAo+IEFWUGFja2V0ICpwa3QpCj4gICAgICAgICAgICAgICAgIGF2X2ZyZWUo aW5wdXRfYnVmZmVyKTsKPgo+ICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IG5vRXJyKSB7Cj4g LSAgICAgICAgICAgICAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+IC0gICAgICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgQ0ZSZWxl YXNlKGF1ZGlvX2ZyYW1lKTsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2dfYXZmb3VuZGF0 aW9uX2Vycm9yKHMsICJlcnJvciB3aGlsZSAKPiBjb252ZXJ0aW5nIGF1ZGlvIGRhdGEiLCByZXQp Owo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICAgICAg ICAgICAgICAgICB9Cj4KPiAgICAgICAgICAgICAgICAgcGt0LT5zaXplID0gb3V0cHV0X2J1ZmZl ci5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplOwo+ICAgICAgICAgICAgIH0gZWxzZSB7Cj4gICAg ICAgICAgICAgICAgICByZXQgPSBDTUJsb2NrQnVmZmVyQ29weURhdGFCeXRlcyhibG9ja19idWZm ZXIsIDAsIAo+IHBrdC0+c2l6ZSwgcGt0LT5kYXRhKTsKPiAgICAgICAgICAgICAgICAgIGlmIChy ZXQgIT0ga0NNQmxvY2tCdWZmZXJOb0Vycikgewo+IC0gICAgICAgICAgICAgICAgICAgICB1bmxv Y2tfZnJhbWVzKGN0eCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ Tyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShhdWRpb19mcmFtZSk7Cj4gKyAg ICAgICAgICAgICAgICAgICAgIGF2X2xvZ19hdmZvdW5kYXRpb25fZXJyb3IocywgImVycm9yIHdo aWxlIAo+IGNvcHlpbmcgYXVkaW8gZGF0YSIsIHJldCk7Cj4gKyAgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAg ICAgIH0KPgo+ICAgICAgICAgICAgIENNSXRlbUNvdW50IGNvdW50Owo+ICAgICAgICAgICAgIENN U2FtcGxlVGltaW5nSW5mbyB0aW1pbmdfaW5mbzsKPgo+IC0gICAgICAgICAgICBpZiAKPiAoQ01T YW1wbGVCdWZmZXJHZXRPdXRwdXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoY3R4LT5jdXJyZW50X2F1 ZGlvX2ZyYW1lLCAKPiAxLCAmdGltaW5nX2luZm8sICZjb3VudCkgPT0gbm9FcnIpIHsKPiArICAg ICAgICAgICAgaWYgCj4gKENNU2FtcGxlQnVmZmVyR2V0T3V0cHV0U2FtcGxlVGltaW5nSW5mb0Fy cmF5KGF1ZGlvX2ZyYW1lLCAxLCAKPiAmdGltaW5nX2luZm8sICZjb3VudCkgPT0gbm9FcnIpIHsK PiAgICAgICAgICAgICAgICAgQVZSYXRpb25hbCB0aW1lYmFzZV9xID0gYXZfbWFrZV9xKDEsIAo+ IHRpbWluZ19pbmZvLnByZXNlbnRhdGlvblRpbWVTdGFtcC50aW1lc2NhbGUpOwo+ICAgICAgICAg ICAgICAgICBwa3QtPnB0cyA9IHBrdC0+ZHRzID0gCj4gYXZfcmVzY2FsZV9xKHRpbWluZ19pbmZv LnByZXNlbnRhdGlvblRpbWVTdGFtcC52YWx1ZSwgdGltZWJhc2VfcSwgCj4gYXZmX3RpbWVfYmFz ZV9xKTsKPiAgICAgICAgICAgICB9Cj4gQEAgLTEyMTIsMjEgKzEyMjQsMTUgQEAgc3RhdGljIGlu dCBhdmZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCAKPiBBVlBhY2tldCAqcGt0KQo+ ICAgICAgICAgICAgIHBrdC0+c3RyZWFtX2luZGV4ICA9IGN0eC0+YXVkaW9fc3RyZWFtX2luZGV4 Owo+ICAgICAgICAgICAgIHBrdC0+ZmxhZ3MgICAgICAgIHw9IEFWX1BLVF9GTEFHX0tFWTsKPgo+ IC0gICAgICAgICAgICBDRlJlbGVhc2UoY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lKTsKPiAtICAg ICAgICAgICAgY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lID0gbmlsOwo+IC0KPiAtICAgICAgICAg ICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+ICsgICAgICAgICAgICBDRlJlbGVhc2UoYXVkaW9fZnJh bWUpOwo+ICAgICAgICAgfSBlbHNlIHsKPiAgICAgICAgICAgICBwa3QtPmRhdGEgPSBOVUxMOwo+ IC0gICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4gICAgICAgICAgICAgaWYgKGN0eC0+ b2JzZXJ2ZWRfcXVpdCkgewo+ICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4g ICAgICAgICAgICAgfSBlbHNlIHsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFH QUlOKTsKPiAgICAgICAgICAgICB9Cj4gICAgICAgICB9Cj4gLQo+IC0gICAgICAgIHVubG9ja19m cmFtZXMoY3R4KTsKPiAgICAgfSB3aGlsZSAoIXBrdC0+ZGF0YSk7Cj4KPiAgICAgcmV0dXJuIDA7 Cj4gLS0gCj4gMi4zMi4wIChBcHBsZSBHaXQtMTMyKQo+Cj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4g ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0 aW5mby9mZm1wZWctZGV2ZWwKPgo+IFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBv ciBlbWFpbAo+IGZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1 bnN1YnNjcmliZSIuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0 cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNj cmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZt cGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K