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 3CC4B46E98 for ; Fri, 18 Aug 2023 15:54:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8B81268C5D0; Fri, 18 Aug 2023 18:54:37 +0300 (EEST) Received: from mail-oo1-f54.google.com (mail-oo1-f54.google.com [209.85.161.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 30FF968C1B7 for ; Fri, 18 Aug 2023 18:54:31 +0300 (EEST) Received: by mail-oo1-f54.google.com with SMTP id 006d021491bc7-56ce936f7c0so739537eaf.3 for ; Fri, 18 Aug 2023 08:54:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692374069; x=1692978869; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=jTvPyg9VUbOb2UUDW4GKlW5Z65AqvLGCYPa3DO1SH18=; b=T2BbLsoVMpK++HLeztTFT4lZJOH2+6k3THc4seEwAz6CQWRAECnGqMxlGnHKSlZgEM kKjbxo1KkWZWi7EkuWhPPeiPe2tr0RSihuSH2ONT4FkGoPPYiOKI27Sfbf06sil4tu3b Eu119+BG+z4bwf255nxAGROTUkOa+yZwZCWKS/9n9LrXAtL7oykpBodYVGcKfRdwuznj c3xo2PM0H93t4dKjzoTP8OQTF6zdJOywMgdaI+gpgU6PvAcYPpWZNWF7mnoBAHnhylhQ yLz1ID3TE8bIG71PQYqsEmIdkc7T+OViBYfc5qPlCljl3ZX7Xri7P9rYvOhD4XHanSgp 47YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692374069; x=1692978869; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jTvPyg9VUbOb2UUDW4GKlW5Z65AqvLGCYPa3DO1SH18=; b=Nce1kFaDtCnV8APj/wGutAuDbW3HKJM9UxEfuVEQQSZekGk1qd4HUzHDJAWG9ufvwd sH3xU62+tSelUbC3JVkNnnotEcUOb+I77fWoGFS6bJ+g3Qw/ZRFYjbHf1QQbA/MQfSeZ 0WS/v8sjXifztpw3+nl3anlq1Y+Pf7hF0+6z8217Ee65+RY2r53XYecQY8sK/6JbrlP/ RCzM0E6akEbb6AyhhEWQDJgOGTx8t5rsvesKhXphqaCFmpgFpp9cPz/QZ2dBBJBGY6y6 0Fq0qMGqW84x2wC0eJxueH3HRwmz96glA7p6qnKbTX90UOL7kE0HVoxdtZccAA50Rx8b vWJw== X-Gm-Message-State: AOJu0YwtwY2LbLZBMFpDTkilO5ew4Ql0vfx+CwG9DlvC8fuByLqLWaCL 1eB5lu9f75s2roRieYCUpA93w2kO08w= X-Google-Smtp-Source: AGHT+IE8HrhOppKBNUeQH5G57ifbeillrYh/QaGGRIG2FR+FW46cp47neAKGuq4UOPCpzYndEaJFGg== X-Received: by 2002:a4a:2417:0:b0:56c:b2ab:9820 with SMTP id m23-20020a4a2417000000b0056cb2ab9820mr3664004oof.8.1692374068860; Fri, 18 Aug 2023 08:54:28 -0700 (PDT) Received: from [192.168.0.16] (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id z14-20020a4a984e000000b0056360466d3esm925943ooi.48.2023.08.18.08.54.27 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Aug 2023 08:54:28 -0700 (PDT) Message-ID: <8bb11bfe-44d6-ac2e-7521-c87163316093@gmail.com> Date: Fri, 18 Aug 2023 12:54:33 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <3964361.O3JupQaQKb@basile.remlab.net> From: James Almer In-Reply-To: <3964361.O3JupQaQKb@basile.remlab.net> Subject: Re: [FFmpeg-devel] [PATCH v4] vvcdec: add thread executor 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-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: T24gOC8xNi8yMDIzIDE6NDIgUE0sIFLDqW1pIERlbmlzLUNvdXJtb250IHdyb3RlOgo+IExlIHRp aXN0YWluYSAxNS4gZWxva3V1dGEgMjAyMywgMTcuNTAuMTMgRUVTVCBOdW8gTWkgYSDDqWNyaXQg Ogo+PiBUaGUgZXhlY3V0b3IgZGVzaWduIHBhdHRlcm4gd2FzIGlucm9kdWNlZCBieSBqYXZhCj4+ IDxodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8yMC9kb2NzL2FwaS9qYXZh LmJhc2UvamF2YS91dGlsL2NvbmMKPj4gdXJyZW50L0V4ZWN1dG9yLmh0bWw+IGl0IGFsc28gYWRh cHRlZCBieSBweXRob24KPj4gPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25j dXJyZW50LmZ1dHVyZXMuaHRtbD4KPj4gQ29tcGFyZWQgdG8gaGFuZGNyYWZ0ZWQgdGhyZWFkIHBv b2wgbWFuYWdlbWVudCwgaXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZQo+PiB0aHJlYWQgY29kZS4g LS0tCj4+ICAgbGliYXZ1dGlsL01ha2VmaWxlICAgfCAgIDIgKwo+PiAgIGxpYmF2dXRpbC9leGVj dXRvci5jIHwgMjAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK Pj4gICBsaWJhdnV0aWwvZXhlY3V0b3IuaCB8ICA2NyArKysrKysrKysrKysrKysKPj4gICAzIGZp bGVzIGNoYW5nZWQsIDI3MCBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2dXRpbC9leGVjdXRvci5jCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC9leGVj dXRvci5oCj4+Cj4+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvTWFrZWZpbGUgYi9saWJhdnV0aWwv TWFrZWZpbGUKPj4gaW5kZXggNzgyOGM5NGRjNS4uNDcxMWY4Y2RlOCAxMDA2NDQKPj4gLS0tIGEv bGliYXZ1dGlsL01ha2VmaWxlCj4+ICsrKyBiL2xpYmF2dXRpbC9NYWtlZmlsZQo+PiBAQCAtMzEs NiArMzEsNyBAQCBIRUFERVJTID0gYWRsZXIzMi5oCj4+ICAgICAgICAgICAgICAgXCBlbmNyeXB0 aW9uX2luZm8uaAo+PiAgIFwgZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcIGV2YWwuaAo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICsKPj4gZXhlY3V0b3IuaCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIGZpZm8uaAo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIGZpbGUu aAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIGZyYW1lLmgKPj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCBAQCAtMTI3LDYgKzEyOCw3IEBAIE9CSlMgPSBh ZGxlcjMyLm8KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XCBlbmNyeXB0aW9uX2luZm8ubwo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcIGVycm9yLm8KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCBldmFsLm8KPj4gICAg ICAgICAgICAgICAgICAgXCArICAgICAgIGV4ZWN1dG9yLm8KPj4gICAgICAgICAgICAgICAgICBc IGZpZm8ubwo+PiAgICAgICAgIFwgZmlsZS5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IGZpbGVfb3Blbi5vICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCBkaWZmCj4+IC0tZ2l0 IGEvbGliYXZ1dGlsL2V4ZWN1dG9yLmMgYi9saWJhdnV0aWwvZXhlY3V0b3IuYwo+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwLi42YjQ3YmEwYmYyCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvbGliYXZ1dGlsL2V4ZWN1dG9yLmMKPj4gQEAgLTAsMCArMSwyMDEgQEAK Pj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjMgTnVvIE1pCj4+ICsgKgo+PiArICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiArICoKPj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgo+PiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKPj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4+ICsgKgo+PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+PiArICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxCj4+IFVTQSArICovCj4+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPj4gKyNpbmNsdWRlICJt ZW0uaCIKPj4gKyNpbmNsdWRlICJ0aHJlYWQuaCIKPj4gKwo+PiArI2luY2x1ZGUgImV4ZWN1dG9y LmgiCj4+ICsKPj4gKyNpZiAhSEFWRV9USFJFQURTCj4+ICsjZGVmaW5lIHB0aHJlYWRfY3JlYXRl KHQsIGEsIHMsIGFyKSAgICAgMAo+IAo+IEVyciwgdGhpcyBzaG91bGQgcHJvYmFibHkgcmV0dXJu IGFuIGVycm9yIHZhbHVlLCBlLmcuIEVOT1NZUyBvciBFTk9UU1VQLgoKcHRocmVhZF9jcmVhdGUo KSBpcyB1c2VkIGJlbG93IGV2ZW4gaWYgIUhBVkVfVEhSRUFEUywgc28gaXQgc2hvdWxkIG5vdCBm YWlsLgoKPiAKPj4gKyNkZWZpbmUgcHRocmVhZF9qb2luKHQsIHIpICAgICAgICAgICAgICBkbyB7 fSB3aGlsZSgwKQo+IAo+IC4uLmFuZCB0aGlzIHNob3VsZCBiZSBhbiB1bnJlYWNoYWJsZSgpLCBh c3NlcnQoMCksIGFib3J0KCkgb3Igc29tZXRoaW5nIGFsb25nCj4gdGhvc2UgbGluZXMuCgpUaGlz IGlzIGFsc28gdXNlZCBiZWxvdy4gSXQgYmVpbmcgYSBuby1vcCBzaG91bGQgYmUgb2suCgo+IAo+ PiArCj4+ICsjZGVmaW5lIHB0aHJlYWRfY29uZF9pbml0KGMsIGEpICAgICAgICAgMAo+PiArI2Rl ZmluZSBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KGMpICAgICAgIGRvIHt9IHdoaWxlKDApCj4+ICsj ZGVmaW5lIHB0aHJlYWRfY29uZF9zaWduYWwoYykgICAgICAgICAgZG8ge30gd2hpbGUoMCkKPj4g KyNkZWZpbmUgcHRocmVhZF9jb25kX3dhaXQoYywgbSkgICAgICAgICBkbyB7fSB3aGlsZSgwKQo+ PiArI2RlZmluZSBwdGhyZWFkX2NvbmRfZGVzdHJveShjKSAgICAgICAgIGRvIHt9IHdoaWxlKDAp Cj4+ICsKPj4gKyNkZWZpbmUgcHRocmVhZF9tdXRleF9pbml0KG0sIGEpICAgICAgICAwCj4+ICsj ZGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayhsKSAgICAgICAgICAgZG8ge30gd2hpbGUoMCkKPj4g KyNkZWZpbmUgcHRocmVhZF9tdXRleF91bmxvY2sobCkgICAgICAgICBkbyB7fSB3aGlsZSgwKQo+ PiArI2RlZmluZSBwdGhyZWFkX211dGV4X2Rlc3Ryb3kobCkgICAgICAgIGRvIHt9IHdoaWxlKDAp Cj4+ICsjZW5kaWYKPj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgVGhyZWFkSW5mbyB7Cj4+ICsgICAg QVZFeGVjdXRvciAqZTsKPj4gKyAgICBwdGhyZWFkX3QgdGhyZWFkOwo+IAo+IERvZXMgdGhpcyBl dmVuIHdvcmsgaWYgIUhBVkVfVEhSRUFEID8KPiAKPj4gK30gVGhyZWFkSW5mbzsKPj4gKwo+PiAr c3RydWN0IEFWRXhlY3V0b3Igewo+PiArICAgIEFWVGFza0NhbGxiYWNrcyBjYjsKPj4gKyAgICBp bnQgdGhyZWFkX2NvdW50Owo+PiArCj4+ICsgICAgVGhyZWFkSW5mbyAqdGhyZWFkczsKPj4gKyAg ICB1aW50OF90ICpsb2NhbF9jb250ZXh0czsKPj4gKwo+PiArICAgIHB0aHJlYWRfbXV0ZXhfdCBs b2NrOwo+PiArICAgIHB0aHJlYWRfY29uZF90IGNvbmQ7Cj4+ICsgICAgaW50IGRpZTsKPj4gKwo+ PiArICAgIEFWVGFzayAqdGFza3M7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgQVZUYXNrKiByZW1v dmVfdGFzayhBVlRhc2sgKipwcmV2LCBBVlRhc2sgKnQpCj4+ICt7Cj4+ICsgICAgKnByZXYgID0g dC0+bmV4dDsKPj4gKyAgICB0LT5uZXh0ID0gTlVMTDsKPj4gKyAgICByZXR1cm4gdDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgYWRkX3Rhc2soQVZUYXNrICoqcHJldiwgQVZUYXNrICp0KQo+ PiArewo+PiArICAgIHQtPm5leHQgPSAqcHJldjsKPj4gKyAgICAqcHJldiAgID0gdDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBydW5fb25lX3Rhc2soQVZFeGVjdXRvciAqZSwgdm9pZCAqbGMp Cj4+ICt7Cj4+ICsgICAgQVZUYXNrQ2FsbGJhY2tzICpjYiA9ICZlLT5jYjsKPj4gKyAgICBBVlRh c2sgKipwcmV2Owo+PiArCj4+ICsgICAgZm9yIChwcmV2ID0gJmUtPnRhc2tzOyAqcHJldiAmJiAh Y2ItPnJlYWR5KCpwcmV2LCBjYi0+dXNlcl9kYXRhKTsgcHJldgo+PiA9ICYoKnByZXYpLT5uZXh0 KQo+PiArICAgICAgICAvKiBub3RoaW5nICovOwo+PiArICAgIGlmICgqcHJldikgewo+PiArICAg ICAgICBBVlRhc2sgKnQgPSByZW1vdmVfdGFzayhwcmV2LCAqcHJldik7Cj4+ICsgICAgICAgIHB0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZlLT5sb2NrKTsKPj4gKyAgICAgICAgY2ItPnJ1bih0LCBsYywg Y2ItPnVzZXJfZGF0YSk7Cj4+ICsgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZS0+bG9jayk7 Cj4+ICsgICAgICAgIHJldHVybiAxOwo+PiArICAgIH0KPj4gKyAgICByZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArI2lmIEhBVkVfVEhSRUFEUwo+PiArc3RhdGljIHZvaWQgKmV4ZWN1dG9yX3dvcmtl cl90YXNrKHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICsgICAgVGhyZWFkSW5mbyAqdGkgPSAoVGhyZWFk SW5mbyopZGF0YTsKPj4gKyAgICBBVkV4ZWN1dG9yICplICA9IHRpLT5lOwo+PiArICAgIHZvaWQg KmxjICAgICAgID0gZS0+bG9jYWxfY29udGV4dHMKPj4gKyAodGkgLSBlLT50aHJlYWRzKSAqCj4+ IGUtPmNiLmxvY2FsX2NvbnRleHRfc2l6ZTsgKwo+PiArICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygm ZS0+bG9jayk7Cj4+ICsgICAgd2hpbGUgKDEpIHsKPj4gKyAgICAgICAgaWYgKGUtPmRpZSkgYnJl YWs7Cj4+ICsKPj4gKyAgICAgICAgaWYgKCFydW5fb25lX3Rhc2soZSwgbGMpKSB7Cj4+ICsgICAg ICAgICAgICAvL25vIHRhc2sgaW4gb25lIGxvb3AKPj4gKyAgICAgICAgICAgIHB0aHJlYWRfY29u ZF93YWl0KCZlLT5jb25kLCAmZS0+bG9jayk7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsg ICAgcHRocmVhZF9tdXRleF91bmxvY2soJmUtPmxvY2spOwo+PiArICAgIHJldHVybiBOVUxMOwo+ PiArfQo+PiArI2VuZGlmCj4+ICsKPj4gK3N0YXRpYyB2b2lkIGV4ZWN1dG9yX2ZyZWUoQVZFeGVj dXRvciAqZSwgY29uc3QgaW50IGhhc19sb2NrLCBjb25zdCBpbnQKPj4gaGFzX2NvbmQpICt7Cj4+ ICsgICAgaWYgKGUtPnRocmVhZF9jb3VudCkgewo+PiArICAgICAgICAvL3NpZ25hbCBkaWUKPj4g KyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZlLT5sb2NrKTsKPj4gKyAgICAgICAgZS0+ZGll ID0gMTsKPj4gKyAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmZS0+Y29uZCk7Cj4+ICsg ICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZlLT5sb2NrKTsKPj4gKwo+PiArICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IGUtPnRocmVhZF9jb3VudDsgaSsrKQo+PiArICAgICAgICAgICAg cHRocmVhZF9qb2luKGUtPnRocmVhZHNbaV0udGhyZWFkLCBOVUxMKTsKPj4gKyAgICB9Cj4+ICsg ICAgaWYgKGhhc19jb25kKQo+PiArICAgICAgICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmZS0+Y29u ZCk7Cj4+ICsgICAgaWYgKGhhc19sb2NrKQo+PiArICAgICAgICBwdGhyZWFkX211dGV4X2Rlc3Ry b3koJmUtPmxvY2spOwo+PiArCj4+ICsgICAgYXZfZnJlZShlLT50aHJlYWRzKTsKPj4gKyAgICBh dl9mcmVlKGUtPmxvY2FsX2NvbnRleHRzKTsKPj4gKwo+PiArICAgIGF2X2ZyZWUoZSk7Cj4+ICt9 Cj4+ICsKPj4gK0FWRXhlY3V0b3IqIGF2X2V4ZWN1dG9yX2FsbG9jKGNvbnN0IEFWVGFza0NhbGxi YWNrcyAqY2IsIGludCB0aHJlYWRfY291bnQpCj4+ICt7Cj4+ICsgICAgQVZFeGVjdXRvciAqZTsK Pj4gKyAgICBpbnQgaGFzX2xvY2sgPSAwLCBoYXNfY29uZCA9IDA7Cj4+ICsgICAgaWYgKCFjYiB8 fCAhY2ItPnVzZXJfZGF0YSB8fCAhY2ItPnJlYWR5IHx8ICFjYi0+cnVuIHx8Cj4+ICFjYi0+cHJp b3JpdHlfaGlnaGVyKSArICAgICAgICByZXR1cm4gTlVMTDsKPj4gKwo+PiArICAgIGUgPSBhdl9j YWxsb2MoMSwgc2l6ZW9mKCplKSk7Cj4+ICsgICAgaWYgKCFlKQo+PiArICAgICAgICByZXR1cm4g TlVMTDsKPj4gKyAgICBlLT5jYiA9ICpjYjsKPj4gKwo+PiArICAgIGUtPmxvY2FsX2NvbnRleHRz ID0gYXZfY2FsbG9jKHRocmVhZF9jb3VudCwgZS0+Y2IubG9jYWxfY29udGV4dF9zaXplKTsKPj4g KyAgICBpZiAoIWUtPmxvY2FsX2NvbnRleHRzKQo+PiArICAgICAgICBnb3RvIGZyZWVfZXhlY3V0 b3I7Cj4+ICsKPj4gKyAgICBlLT50aHJlYWRzID0gYXZfY2FsbG9jKHRocmVhZF9jb3VudCwgc2l6 ZW9mKCplLT50aHJlYWRzKSk7Cj4+ICsgICAgaWYgKCFlLT50aHJlYWRzKQo+PiArICAgICAgICBn b3RvIGZyZWVfZXhlY3V0b3I7Cj4+ICsKPj4gKyAgICBoYXNfbG9jayA9ICFwdGhyZWFkX211dGV4 X2luaXQoJmUtPmxvY2ssIE5VTEwpOwo+PiArICAgIGhhc19jb25kID0gIXB0aHJlYWRfY29uZF9p bml0KCZlLT5jb25kLCBOVUxMKTsKPj4gKwo+PiArICAgIGlmICghaGFzX2xvY2sgfHwgIWhhc19j b25kKQo+PiArICAgICAgICBnb3RvIGZyZWVfZXhlY3V0b3I7Cj4+ICsKPj4gKyAgICBmb3IgKC8q IG5vdGhpbmcgKi87IGUtPnRocmVhZF9jb3VudCA8IHRocmVhZF9jb3VudDsgZS0+dGhyZWFkX2Nv dW50KyspCj4+IHsgKyAgICAgICAgVGhyZWFkSW5mbyAqdGkgPSBlLT50aHJlYWRzICsgZS0+dGhy ZWFkX2NvdW50Owo+PiArICAgICAgICB0aS0+ZSA9IGU7Cj4+ICsgICAgICAgIGlmIChwdGhyZWFk X2NyZWF0ZSgmdGktPnRocmVhZCwgTlVMTCwgZXhlY3V0b3Jfd29ya2VyX3Rhc2ssIHRpKSkKPj4g KyAgICAgICAgICAgIGdvdG8gZnJlZV9leGVjdXRvcjsKPj4gKyAgICB9Cj4+ICsgICAgcmV0dXJu IGU7Cj4+ICsKPj4gK2ZyZWVfZXhlY3V0b3I6Cj4+ICsgICAgZXhlY3V0b3JfZnJlZShlLCBoYXNf bG9jaywgaGFzX2NvbmQpOwo+PiArICAgIHJldHVybiBOVUxMOwo+PiArfQo+PiArCj4+ICt2b2lk IGF2X2V4ZWN1dG9yX2ZyZWUoQVZFeGVjdXRvciAqKmV4ZWN1dG9yKQo+PiArewo+PiArICAgIGlm ICghZXhlY3V0b3IgfHwgISpleGVjdXRvcikKPj4gKyAgICAgICAgcmV0dXJuOwo+PiArICAgIGV4 ZWN1dG9yX2ZyZWUoKmV4ZWN1dG9yLCAxLCAxKTsKPj4gKyAgICAqZXhlY3V0b3IgPSBOVUxMOwo+ PiArfQo+PiArCj4+ICt2b2lkIGF2X2V4ZWN1dG9yX2V4ZWN1dGUoQVZFeGVjdXRvciAqZSwgQVZU YXNrICp0KQo+PiArewo+PiArICAgIEFWVGFza0NhbGxiYWNrcyAqY2IgPSAmZS0+Y2I7Cj4+ICsg ICAgQVZUYXNrICoqcHJldjsKPj4gKwo+PiArICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZS0+bG9j ayk7Cj4+ICsgICAgaWYgKHQpIHsKPj4gKyAgICAgICAgZm9yIChwcmV2ID0gJmUtPnRhc2tzOyAq cHJldiAmJiBjYi0+cHJpb3JpdHlfaGlnaGVyKCpwcmV2LCB0KTsgcHJldgo+PiA9ICYoKnByZXYp LT5uZXh0KSArICAgICAgICAgICAgLyogbm90aGluZyAqLzsKPj4gKyAgICAgICAgYWRkX3Rhc2so cHJldiwgdCk7Cj4+ICsgICAgfQo+PiArICAgIHB0aHJlYWRfY29uZF9zaWduYWwoJmUtPmNvbmQp Owo+PiArICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZlLT5sb2NrKTsKPj4gKwo+PiArI2lmICFI QVZFX1RIUkVBRFMKPj4gKyAgICAvLyBXZSBhcmUgcnVubmluZyBpbiBhIHNpbmdsZS10aHJlYWRl ZCBlbnZpcm9ubWVudCwgc28gd2UgbXVzdCBoYW5kbGUKPj4gYWxsIHRhc2tzIG91cnNlbHZlcwo+ PiArICAgIHdoaWxlIChydW5fb25lX3Rhc2soZSwgZS0+bG9jYWxfY29udGV4dHMpKQo+PiArICAg ICAgICAvKiBub3RoaW5nICovOwo+PiArI2VuZGlmCj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9saWJh dnV0aWwvZXhlY3V0b3IuaCBiL2xpYmF2dXRpbC9leGVjdXRvci5oCj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAuLmMzZmU0NGJkMGUKPj4gLS0tIC9kZXYvbnVsbAo+ PiArKysgYi9saWJhdnV0aWwvZXhlY3V0b3IuaAo+PiBAQCAtMCwwICsxLDY3IEBACj4+ICsvKgo+ PiArICogQ29weXJpZ2h0IChDKSAyMDIzIE51byBNaQo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KPj4gKyAqCj4+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4gKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgo+PiArICoKPj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4+ ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiAr ICoKPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQo+PiBV U0EgKyAqLwo+PiArCj4+ICsjaWZuZGVmIEFWVVRJTF9FWEVDVVRPUl9ICj4+ICsjZGVmaW5lIEFW VVRJTF9FWEVDVVRPUl9ICj4+ICsKPj4gK3R5cGVkZWYgc3RydWN0IEFWRXhlY3V0b3IgQVZFeGVj dXRvcjsKPj4gK3R5cGVkZWYgc3RydWN0IEFWVGFzayBBVlRhc2s7Cj4+ICsKPj4gK3N0cnVjdCBB VlRhc2sgewo+PiArICAgIEFWVGFzayAqbmV4dDsKPj4gK307Cj4+ICsKPj4gK3R5cGVkZWYgc3Ry dWN0IEFWVGFza0NhbGxiYWNrcyB7Cj4+ICsgICAgdm9pZCAqdXNlcl9kYXRhOwo+PiArCj4+ICsg ICAgaW50IGxvY2FsX2NvbnRleHRfc2l6ZTsKPj4gKwo+PiArICAgIC8vIHJldHVybiAxIGlmIGEn cyBwcmlvcml0eSA+IGIncyBwcmlvcml0eQo+PiArICAgIGludCAoKnByaW9yaXR5X2hpZ2hlciko Y29uc3QgQVZUYXNrICphLCBjb25zdCBBVlRhc2sgKmIpOwo+PiArCj4+ICsgICAgLy8gdGFzayBp cyByZWFkeSBmb3IgcnVuCj4+ICsgICAgaW50ICgqcmVhZHkpKGNvbnN0IEFWVGFzayAqdCwgdm9p ZCAqdXNlcl9kYXRhKTsKPj4gKwo+PiArICAgIC8vIHJ1biB0aGUgdGFzawo+PiArICAgIGludCAo KnJ1bikoQVZUYXNrICp0LCB2b2lkICpsb2NhbF9jb250ZXh0LCB2b2lkICp1c2VyX2RhdGEpOwo+ PiArfSBBVlRhc2tDYWxsYmFja3M7Cj4+ICsKPj4gKy8qKgo+PiArICogQWxsb2MgZXhlY3V0b3IK Pj4gKyAqIEBwYXJhbSBjYWxsYmFja3MgY2FsbGJhY2sgc3RydWN1dHJlIGZvciBleGVjdXRvcgo+ PiArICogQHBhcmFtIHRocmVhZF9jb3VudCB3b3JrZXIgdGhyZWFkIG51bWJlcgo+PiArICogQHJl dHVybiByZXR1cm4gdGhlIGV4ZWN1dG9yCj4+ICsgKi8KPj4gK0FWRXhlY3V0b3IqIGF2X2V4ZWN1 dG9yX2FsbG9jKGNvbnN0IEFWVGFza0NhbGxiYWNrcyAqY2FsbGJhY2tzLCBpbnQKPj4gdGhyZWFk X2NvdW50KTsgKwo+PiArLyoqCj4+ICsgKiBGcmVlIGV4ZWN1dG9yCj4+ICsgKiBAcGFyYW0gZSAg cG9pbnRlciB0byBleGVjdXRvcgo+PiArICovCj4+ICt2b2lkIGF2X2V4ZWN1dG9yX2ZyZWUoQVZF eGVjdXRvciAqKmUpOwo+PiArCj4+ICsvKioKPj4gKyAqIEFkZCB0YXNrIHRvIGV4ZWN1dG9yCj4+ ICsgKiBAcGFyYW0gZSBwb2ludGVyIHRvIGV4ZWN1dG9yCj4+ICsgKiBAcGFyYW0gdCBwb2ludGVy IHRvIHRhc2suIElmIE5VTEwsIGl0IHdpbGwgd2FrZXVwIG9uZSB3b3JrIHRocmVhZAo+PiArICov Cj4+ICt2b2lkIGF2X2V4ZWN1dG9yX2V4ZWN1dGUoQVZFeGVjdXRvciAqZSwgQVZUYXNrICp0KTsK Pj4gKwo+PiArI2VuZGlmIC8vQVZVVElMX0VYRUNVVE9SX0gKPiAKPiAKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlz dApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0 aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBl bWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJz Y3JpYmUiLgo=