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 A685041077 for ; Sun, 13 Feb 2022 12:28:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6569568A048; Sun, 13 Feb 2022 14:28:09 +0200 (EET) Received: from w1.tutanota.de (w1.tutanota.de [81.3.6.162]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 03A2968A048 for ; Sun, 13 Feb 2022 14:28:03 +0200 (EET) Received: from w3.tutanota.de (unknown [192.168.1.164]) by w1.tutanota.de (Postfix) with ESMTP id 78C52FBF3B2 for ; Sun, 13 Feb 2022 12:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1644755282; s=s1; d=tutanota.com; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:Sender; bh=HltsOeKwIjPje1kyteZ2Lju5AisIEpKG2piNQLiwpfo=; b=MnMPKFKssatxkV+ZgDy76AP3XqznKOf5nSxjx2csy475dB3tkTmeKbdnknw5II1d 8Hc9Mk0AeqTizd7Z9cGRzqoPi0Nwg5Z2PWSiuBdqmOdW46mZENeio8/sK9UVf5eIEkG Ct10IWHxcsgdFdUIwseA+xQIihhRf2rgXqyHinTEy4Gh2bLJyuYklB2aWRwAanqSo9k TGMyGUZ3QDPbx+WKHkeBp2imHY19G9zo23kHMSNhcrcEIaNp1IPp4PcTFlKjBB1sj9M B5QsH4scSw1MSj0lkiJ7R5O1ElvQvND7zPpLZ3UctyfmEj9ti9lU0it+HFHPgHU/gdu 5/rviEW5fA== Date: Sun, 13 Feb 2022 13:28:02 +0100 (CET) From: nihil-admirari@tutanota.com To: ffmpeg-devel@ffmpeg.org Message-ID: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] Long path support for Windows (fixes #8885) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: TG9uZyBwYXRoIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBhZGRpbmcgYSBtYW5pZmVzdCB0byBhbGwg b2YgZmZ0b29scy4KTUFYX1BBVEgtc2l6ZWQgYnVmZmVycyBhcmUgcmVwbGFjZWQgd2l0aCBkeW5h bWljYWxseSBzaXplZCBvbmVzLgoKU2lnbmVkLW9mZi1ieTogbmloaWwtYWRtaXJhcmkgPDUwMjAy Mzg2K25paGlsLWFkbWlyYXJpQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4KLS0tCsKgY29tcGF0 L3czMmRsZmNuLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA1OCArKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLQrCoGZmdG9vbHMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqAgNSArKysKwqBmZnRvb2xzL2NtZHV0aWxzLmPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHwgMzEgKysrKysrKysrKysrKy0tLS0KwqBmZnRvb2xzL2xvbmdf cGF0aHNfdXRmOC5tYW5pZmVzdCB8IDEyICsrKysrKysKwqBmZnRvb2xzL2xvbmdfcGF0aHNfdXRm OC5yY8KgwqDCoMKgwqDCoCB8wqAgMyArKwrCoGxpYmF2Zm9ybWF0L2F2aXN5bnRoLmPCoMKgwqDC oMKgwqDCoMKgwqDCoCB8IDEwICsrKy0tLQrCoGxpYmF2dXRpbC93Y2hhcl9maWxlbmFtZS5owqDC oMKgwqDCoMKgIHwgMzcgKysrKysrKysrKysrKysrKysrKysKwqA3IGZpbGVzIGNoYW5nZWQsIDEz NiBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKwqBjcmVhdGUgbW9kZSAxMDA2NDQgZmZ0 b29scy9sb25nX3BhdGhzX3V0ZjgubWFuaWZlc3QKwqBjcmVhdGUgbW9kZSAxMDA2NDQgZmZ0b29s cy9sb25nX3BhdGhzX3V0ZjgucmMKCmRpZmYgLS1naXQgYS9jb21wYXQvdzMyZGxmY24uaCBiL2Nv bXBhdC93MzJkbGZjbi5oCmluZGV4IDUyYTk0ZWYuLmEzNmU5N2MgMTAwNjQ0Ci0tLSBhL2NvbXBh dC93MzJkbGZjbi5oCisrKyBiL2NvbXBhdC93MzJkbGZjbi5oCkBAIC0yNSw2ICsyNSwzMCBAQArC oCNpZiAoX1dJTjMyX1dJTk5UIDwgMHgwNjAyKSB8fCBIQVZFX1dJTlJUCsKgI2luY2x1ZGUgImxp YmF2dXRpbC93Y2hhcl9maWxlbmFtZS5oIgrCoCNlbmRpZgorCitzdGF0aWMgaW5saW5lIHdjaGFy X3QgKmdldF9tb2R1bGVfZmlsZW5hbWUoY29uc3QgSE1PRFVMRSBtb2R1bGUpCit7CivCoMKgwqAg d2NoYXJfdCAqcGF0aCA9IE5VTEw7CivCoMKgwqAgaW50IHBhdGhfc2l6ZSA9IDAsIHBhdGhfbGVu ID0gMDsKKworwqDCoMKgIGRvIHsKK8KgwqDCoMKgwqDCoMKgIHBhdGhfc2l6ZSA9IHBhdGhfc2l6 ZSA/IDEuNSAqIHBhdGhfc2l6ZSA6IE1BWF9QQVRIOworwqDCoMKgwqDCoMKgwqAgd2NoYXJfdCAq bmV3X3BhdGggPSBhdl9yZWFsbG9jX2FycmF5KHBhdGgsIHBhdGhfc2l6ZSwgc2l6ZW9mICpwYXRo KTsKK8KgwqDCoMKgwqDCoMKgIGlmICghbmV3X3BhdGgpIHsKK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZfZnJlZShwYXRoKTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7CivC oMKgwqDCoMKgwqDCoCB9CivCoMKgwqDCoMKgwqDCoCBwYXRoID0gbmV3X3BhdGg7CivCoMKgwqDC oMKgwqDCoCBwYXRoX2xlbiA9IEdldE1vZHVsZUZpbGVOYW1lVyhtb2R1bGUsIHBhdGgsIHBhdGhf c2l6ZSk7CivCoMKgwqAgfSB3aGlsZSAocGF0aF9sZW4gJiYgcGF0aF9zaXplIDw9IDMyNzY4ICYm IHBhdGhfc2l6ZSA8PSBwYXRoX2xlbik7CisKK8KgwqDCoCBpZiAoIXBhdGhfbGVuKSB7CivCoMKg wqDCoMKgwqDCoCBhdl9mcmVlKHBhdGgpOworwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7CivC oMKgwqAgfQorwqDCoMKgIHJldHVybiBwYXRoOworfQorCsKgLyoqCsKgICogU2FmZSBmdW5jdGlv biB1c2VkIHRvIG9wZW4gZHluYW1pYyBsaWJzLiBUaGlzIGF0dGVtcHRzIHRvIGltcHJvdmUgcHJv Z3JhbSBzZWN1cml0eQrCoCAqIGJ5IHJlbW92aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmcm9t IHRoZSBkbGwgc2VhcmNoIHBhdGguIE9ubHkgZGxsJ3MgZm91bmQgaW4gdGhlCkBAIC0zOCwyNCAr NjIsNDAgQEAgc3RhdGljIGlubGluZSBITU9EVUxFIHdpbjMyX2Rsb3Blbihjb25zdCBjaGFyICpu YW1lKQrCoMKgwqDCoCAvLyBOZWVkIHRvIGNoZWNrIGlmIEtCMjUzMzYyMyBpcyBhdmFpbGFibGUK wqDCoMKgwqAgaWYgKCFHZXRQcm9jQWRkcmVzcyhHZXRNb2R1bGVIYW5kbGVXKEwia2VybmVsMzIu ZGxsIiksICJTZXREZWZhdWx0RGxsRGlyZWN0b3JpZXMiKSkgewrCoMKgwqDCoMKgwqDCoMKgIEhN T0RVTEUgbW9kdWxlID0gTlVMTDsKLcKgwqDCoMKgwqDCoMKgIHdjaGFyX3QgKnBhdGggPSBOVUxM LCAqbmFtZV93ID0gTlVMTDsKLcKgwqDCoMKgwqDCoMKgIERXT1JEIHBhdGhsZW47CivCoMKgwqDC oMKgwqDCoCB3Y2hhcl90ICpwYXRoID0gTlVMTCwgKm5ld19wYXRoID0gTlVMTCwgKm5hbWVfdyA9 IE5VTEw7CivCoMKgwqDCoMKgwqDCoCBEV09SRCBwYXRobGVuLCBwYXRoc2l6ZSwgbmFtZWxlbjsK wqDCoMKgwqDCoMKgwqDCoCBpZiAodXRmOHRvd2NoYXIobmFtZSwgJm5hbWVfdykpCsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBnb3RvIGV4aXQ7Ci3CoMKgwqDCoMKgwqDCoCBwYXRoID0gKHdjaGFy X3QgKilhdl9jYWxsb2MoTUFYX1BBVEgsIHNpemVvZih3Y2hhcl90KSk7CivCoMKgwqDCoMKgwqDC oCBuYW1lbGVuID0gd2NzbGVuKG5hbWVfdyk7CsKgwqDCoMKgwqDCoMKgwqAgLy8gVHJ5IGxvY2Fs IGRpcmVjdG9yeSBmaXJzdAotwqDCoMKgwqDCoMKgwqAgcGF0aGxlbiA9IEdldE1vZHVsZUZpbGVO YW1lVyhOVUxMLCBwYXRoLCBNQVhfUEFUSCk7Ci3CoMKgwqDCoMKgwqDCoCBwYXRobGVuID0gd2Nz cmNocihwYXRoLCAnXFwnKSAtIHBhdGg7Ci3CoMKgwqDCoMKgwqDCoCBpZiAocGF0aGxlbiA9PSAw IHx8IHBhdGhsZW4gKyB3Y3NsZW4obmFtZV93KSArIDIgPiBNQVhfUEFUSCkKK8KgwqDCoMKgwqDC oMKgIHBhdGggPSBnZXRfbW9kdWxlX2ZpbGVuYW1lKE5VTEwpOworwqDCoMKgwqDCoMKgwqAgcGF0 aGxlbiA9IHBhdGggPyB3Y3NyY2hyKHBhdGgsICdcXCcpIC0gcGF0aCA6IDA7CivCoMKgwqDCoMKg wqDCoCBpZiAocGF0aGxlbiA9PSAwKQorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGV4aXQ7 CivCoMKgwqDCoMKgwqDCoCBwYXRoc2l6ZSA9IHBhdGhsZW4gKyBuYW1lbGVuICsgMjsKK8KgwqDC oMKgwqDCoMKgIG5ld19wYXRoID0gYXZfcmVhbGxvY19hcnJheShwYXRoLCBwYXRoc2l6ZSwgc2l6 ZW9mICpwYXRoKTsKK8KgwqDCoMKgwqDCoMKgIGlmICghbmV3X3BhdGgpCsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGV4aXQ7Ci3CoMKgwqDCoMKgwqDCoCBwYXRoW3BhdGhsZW5dID0gJ1xc JzsKK8KgwqDCoMKgwqDCoMKgIHBhdGggPSBuZXdfcGF0aDsKwqDCoMKgwqDCoMKgwqDCoCB3Y3Nj cHkocGF0aCArIHBhdGhsZW4gKyAxLCBuYW1lX3cpOwrCoMKgwqDCoMKgwqDCoMKgIG1vZHVsZSA9 IExvYWRMaWJyYXJ5RXhXKHBhdGgsIE5VTEwsIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRI KTsKwqDCoMKgwqDCoMKgwqDCoCBpZiAobW9kdWxlID09IE5VTEwpIHsKwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8vIE5leHQgdHJ5IFN5c3RlbTMyIGRpcmVjdG9yeQotwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwYXRobGVuID0gR2V0U3lzdGVtRGlyZWN0b3J5VyhwYXRoLCBNQVhfUEFUSCk7Ci3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwYXRobGVuID09IDAgfHwgcGF0aGxlbiArIHdjc2xl bihuYW1lX3cpICsgMiA+IE1BWF9QQVRIKQorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXRobGVu ID0gR2V0U3lzdGVtRGlyZWN0b3J5VyhwYXRoLCBwYXRoc2l6ZSk7CivCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChwYXRobGVuID09IDApCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gZXhpdDsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBhdGhsZW4gKyBuYW1lbGVu ICsgMiA+IHBhdGhzaXplKSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGF0aHNp emUgPSBwYXRobGVuICsgbmFtZWxlbiArIDI7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmV3X3BhdGggPSBhdl9yZWFsbG9jX2FycmF5KHBhdGgsIHBhdGhzaXplLCBzaXplb2YgKnBh dGgpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghbmV3X3BhdGgpCivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGV4aXQ7CivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcGF0aCA9IG5ld19wYXRoOworwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8vIFRoZSBidWZmZXIgbWlnaHQgaGF2ZSBiZWVuIG5vdCBlbm91Z2ggZm9y IHN5c3RlbSBkaXJlY3RvcnkKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBpbiB0 aGUgZmlyc3QgcGxhY2UuCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGF0aGxlbiA9 IEdldFN5c3RlbURpcmVjdG9yeVcocGF0aCwgcGF0aHNpemUpOworwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChwYXRobGVuID09IDApCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIGV4aXQ7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHBhdGhbcGF0aGxlbl0gPSAnXFwnOwrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgd2NzY3B5KHBhdGggKyBwYXRobGVuICsgMSwgbmFtZV93KTsKwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG1vZHVsZSA9IExvYWRMaWJyYXJ5RXhXKHBhdGgsIE5VTEwsIExPQURfV0lU SF9BTFRFUkVEX1NFQVJDSF9QQVRIKTsKZGlmZiAtLWdpdCBhL2ZmdG9vbHMvTWFrZWZpbGUgYi9m ZnRvb2xzL01ha2VmaWxlCmluZGV4IGRhNDIwNzguLjUzNDM4YjYgMTAwNjQ0Ci0tLSBhL2ZmdG9v bHMvTWFrZWZpbGUKKysrIGIvZmZ0b29scy9NYWtlZmlsZQpAQCAtMTEsNiArMTEsMTEgQEAgQUxM QVZQUk9HU19HID0gJChBVkJBU0VOQU1FUzolPSUkKFBST0dTU1VGKV9nJChFWEVTVUYpKQrCoArC oE9CSlMtZmZtcGVnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCArPSBmZnRvb2xzL2ZmbXBlZ19vcHQubyBmZnRvb2xzL2ZmbXBlZ19maWx0ZXIubyBmZnRvb2xz L2ZmbXBlZ19ody5vCsKgCisjIFdpbmRvd3MgcmVzb3VyY2UgZmlsZXMKK09CSlMtZmZtcGVnLSQo SEFWRV9HTlVfV0lORFJFUykgKz0gZmZ0b29scy9sb25nX3BhdGhzX3V0ZjgubworT0JKUy1mZnBs YXktJChIQVZFX0dOVV9XSU5EUkVTKSArPSBmZnRvb2xzL2xvbmdfcGF0aHNfdXRmOC5vCitPQkpT LWZmcHJvYmUtJChIQVZFX0dOVV9XSU5EUkVTKSArPSBmZnRvb2xzL2xvbmdfcGF0aHNfdXRmOC5v CisKwqBkZWZpbmUgRE9GRlRPT0wKwqBPQkpTLSQoMSkgKz0gZmZ0b29scy9jbWR1dGlscy5vIGZm dG9vbHMvJCgxKS5vICQoT0JKUy0kKDEpLXllcykKwqAkKDEpJChQUk9HU1NVRilfZyQoRVhFU1VG KTogJCQoT0JKUy0kKDEpKQpkaWZmIC0tZ2l0IGEvZmZ0b29scy9jbWR1dGlscy5jIGIvZmZ0b29s cy9jbWR1dGlscy5jCmluZGV4IDRiNTBlMTUuLmVhNzg4OTcgMTAwNjQ0Ci0tLSBhL2ZmdG9vbHMv Y21kdXRpbHMuYworKysgYi9mZnRvb2xzL2NtZHV0aWxzLmMKQEAgLTYyLDYgKzYyLDcgQEAKwqAj ZW5kaWYKwqAjaWZkZWYgX1dJTjMyCsKgI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICJj b21wYXQvdzMyZGxmY24uaCIKwqAjZW5kaWYKwqAKwqBzdGF0aWMgaW50IGluaXRfcmVwb3J0KGNv bnN0IGNoYXIgKmVudik7CkBAIC0yMDY1LDYgKzIwNjYsOSBAQCBGSUxFICpnZXRfcHJlc2V0X2Zp bGUoY2hhciAqZmlsZW5hbWUsIHNpemVfdCBmaWxlbmFtZV9zaXplLArCoHsKwqDCoMKgwqAgRklM RSAqZiA9IE5VTEw7CsKgwqDCoMKgIGludCBpOworI2lmIEhBVkVfR0VUTU9EVUxFSEFORExFICYm IGRlZmluZWQoX1dJTjMyKQorwqDCoMKgIGNoYXIgKmRhdGFkaXIgPSBOVUxMOworI2VuZGlmCsKg wqDCoMKgIGNvbnN0IGNoYXIgKmJhc2VbM10gPSB7IGdldGVudigiRkZNUEVHX0RBVEFESVIiKSwK wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z2V0ZW52KCJIT01FIiksCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEZGTVBFR19EQVRBRElSLCB9OwpAQCAtMjA3NCwxOSArMjA3OCwzMSBA QCBGSUxFICpnZXRfcHJlc2V0X2ZpbGUoY2hhciAqZmlsZW5hbWUsIHNpemVfdCBmaWxlbmFtZV9z aXplLArCoMKgwqDCoMKgwqDCoMKgIGYgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKwqDCoMKgwqAg fSBlbHNlIHsKwqAjaWYgSEFWRV9HRVRNT0RVTEVIQU5ETEUgJiYgZGVmaW5lZChfV0lOMzIpCi3C oMKgwqDCoMKgwqDCoCBjaGFyIGRhdGFkaXJbTUFYX1BBVEhdLCAqbHM7CivCoMKgwqDCoMKgwqDC oCB3Y2hhcl90ICpkYXRhZGlyX3cgPSBnZXRfbW9kdWxlX2ZpbGVuYW1lKE5VTEwpOwrCoMKgwqDC oMKgwqDCoMKgIGJhc2VbMl0gPSBOVUxMOwrCoAotwqDCoMKgwqDCoMKgwqAgaWYgKEdldE1vZHVs ZUZpbGVOYW1lQShHZXRNb2R1bGVIYW5kbGVBKE5VTEwpLCBkYXRhZGlyLCBzaXplb2YoZGF0YWRp cikgLSAxKSkKK8KgwqDCoMKgwqDCoMKgIGlmICh3Y2hhcnRvYW5zaShkYXRhZGlyX3csICZkYXRh ZGlyKSkKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YWRpciA9IE5VTEw7CivCoMKgwqDCoMKg wqDCoCBhdl9mcmVlKGRhdGFkaXJfdyk7CisKK8KgwqDCoMKgwqDCoMKgIGlmIChkYXRhZGlyKQrC oMKgwqDCoMKgwqDCoMKgIHsKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChscyA9IGRhdGFk aXI7IGxzIDwgZGF0YWRpciArIHN0cmxlbihkYXRhZGlyKTsgbHMrKykKK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY2hhciAqbHM7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAobHMgPSBkYXRh ZGlyOyAqbHM7IGxzKyspCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgqbHMg PT0gJ1xcJykgKmxzID0gJy8nOwrCoArCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGxzID0g c3RycmNocihkYXRhZGlyLCAnLycpKQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewotwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpscyA9IDA7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RybmNhdChkYXRhZGlyLCAiL2ZmcHJlc2V0cyIswqAgc2l6ZW9mKGRhdGFkaXIp IC0gMSAtIHN0cmxlbihkYXRhZGlyKSk7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YmFzZVsyXSA9IGRhdGFkaXI7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qg aW50IGRhdGFkaXJfbGVuID0gbHMgLSBkYXRhZGlyOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbnN0IGludCBkZXNpcmVkX3NpemUgPSBkYXRhZGlyX2xlbiArIHN0cmxlbigiL2Zm cHJlc2V0cyIpICsgMTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyICpuZXdf ZGF0YWRpciA9IGF2X3JlYWxsb2NfYXJyYXkoCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkYXRhZGlyLCBkZXNpcmVkX3NpemUsIHNpemVvZiAqZGF0YWRpcik7CivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG5ld19kYXRhZGlyKSB7CivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhZGlyID0gbmV3X2RhdGFkaXI7CivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhZGlyW2RhdGFkaXJfbGVuXSA9 IDA7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJuY2F0KGRhdGFk aXIsICIvZmZwcmVzZXRzIizCoCBkZXNpcmVkX3NpemUgLSAxIC0gZGF0YWRpcl9sZW4pOworwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFzZVsyXSA9IGRhdGFkaXI7CivC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQrCoMKgwqDCoMKgwqDCoMKgIH0KwqAjZW5kaWYKQEAgLTIxMDYsNiArMjEyMiw5IEBAIEZJTEUg KmdldF9wcmVzZXRfZmlsZShjaGFyICpmaWxlbmFtZSwgc2l6ZV90IGZpbGVuYW1lX3NpemUsCsKg wqDCoMKgwqDCoMKgwqAgfQrCoMKgwqDCoCB9CsKgCisjaWYgSEFWRV9HRVRNT0RVTEVIQU5ETEUg JiYgZGVmaW5lZChfV0lOMzIpCivCoMKgwqAgYXZfZnJlZShkYXRhZGlyKTsKKyNlbmRpZgrCoMKg wqDCoCByZXR1cm4gZjsKwqB9CsKgCmRpZmYgLS1naXQgYS9mZnRvb2xzL2xvbmdfcGF0aHNfdXRm OC5tYW5pZmVzdCBiL2ZmdG9vbHMvbG9uZ19wYXRoc191dGY4Lm1hbmlmZXN0Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYWMxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9mZnRv b2xzL2xvbmdfcGF0aHNfdXRmOC5tYW5pZmVzdApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJz aW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CisKKzxhc3NlbWJs eSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjEiIG1hbmlmZXN0VmVyc2lv bj0iMS4wIj4KK8KgIDxhc3NlbWJseUlkZW50aXR5IHR5cGU9IndpbjMyIiBuYW1lPSJGRm1wZWci IHZlcnNpb249IjEuMC4wLjAiLz4KK8KgIDxhcHBsaWNhdGlvbiB4bWxucz0idXJuOnNjaGVtYXMt bWljcm9zb2Z0LWNvbTphc20udjMiPgorwqDCoMKgIDx3aW5kb3dzU2V0dGluZ3MgeG1sbnM6d3My MDE2PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NNSS8yMDE2L1dpbmRvd3NTZXR0aW5n cyIKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeG1sbnM6d3MyMDE5 PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NNSS8yMDE5L1dpbmRvd3NTZXR0aW5ncyI+ CivCoMKgwqDCoMKgIDx3czIwMTY6bG9uZ1BhdGhBd2FyZT50cnVlPC93czIwMTY6bG9uZ1BhdGhB d2FyZT4KK8KgwqDCoMKgwqAgPHdzMjAxOTphY3RpdmVDb2RlUGFnZT5VVEYtODwvd3MyMDE5OmFj dGl2ZUNvZGVQYWdlPgorwqDCoMKgIDwvd2luZG93c1NldHRpbmdzPgorwqAgPC9hcHBsaWNhdGlv bj4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9mZnRvb2xzL2xvbmdfcGF0aHNfdXRmOC5yYyBi L2ZmdG9vbHMvbG9uZ19wYXRoc191dGY4LnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmYzM2RlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mZnRvb2xzL2xvbmdfcGF0aHNfdXRm OC5yYwpAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK0NSRUFURVBST0NF U1NfTUFOSUZFU1RfUkVTT1VSQ0VfSUQgUlRfTUFOSUZFU1QgImxvbmdfcGF0aHNfdXRmOC5tYW5p ZmVzdCIKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2F2aXN5bnRoLmMgYi9saWJhdmZvcm1hdC9h dmlzeW50aC5jCmluZGV4IDM1MGFjNmQuLjM3MzhjYjEgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0 L2F2aXN5bnRoLmMKKysrIGIvbGliYXZmb3JtYXQvYXZpc3ludGguYwpAQCAtMzQsNiArMzQsNyBA QArCoC8qIFBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdGl2ZXMuICovCsKgI2lmZGVmIF9XSU4zMgrC oMKgICNpbmNsdWRlICJjb21wYXQvdzMyZGxmY24uaCIKK8KgICNpbmNsdWRlICJsaWJhdnV0aWwv d2NoYXJfZmlsZW5hbWUuaCIKwqDCoCAjdW5kZWYgRVhURVJOX0MKwqDCoCAjZGVmaW5lIEFWSVNZ TlRIX0xJQiAiYXZpc3ludGgiCsKgI2Vsc2UKQEAgLTU3Miw4ICs1NzMsNyBAQCBzdGF0aWMgaW50 IGF2aXN5bnRoX29wZW5fZmlsZShBVkZvcm1hdENvbnRleHQgKnMpCsKgwqDCoMKgIEFWU19WYWx1 ZSBhcmcsIHZhbDsKwqDCoMKgwqAgaW50IHJldDsKwqAjaWZkZWYgX1dJTjMyCi3CoMKgwqAgY2hh ciBmaWxlbmFtZV9hbnNpW01BWF9QQVRIICogNF07Ci3CoMKgwqAgd2NoYXJfdCBmaWxlbmFtZV93 Y1tNQVhfUEFUSCAqIDRdOworwqDCoMKgIGNoYXIgKmZpbGVuYW1lX2Fuc2kgPSBOVUxMOwrCoCNl bmRpZgrCoArCoMKgwqDCoCBpZiAocmV0ID0gYXZpc3ludGhfY29udGV4dF9jcmVhdGUocykpCkBA IC01ODEsMTAgKzU4MSwxMCBAQCBzdGF0aWMgaW50IGF2aXN5bnRoX29wZW5fZmlsZShBVkZvcm1h dENvbnRleHQgKnMpCsKgCsKgI2lmZGVmIF9XSU4zMgrCoMKgwqDCoCAvKiBDb252ZXJ0IFVURi04 IHRvIEFOU0kgY29kZSBwYWdlICovCi3CoMKgwqAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4 LCAwLCBzLT51cmwsIC0xLCBmaWxlbmFtZV93YywgTUFYX1BBVEggKiA0KTsKLcKgwqDCoCBXaWRl Q2hhclRvTXVsdGlCeXRlKENQX1RIUkVBRF9BQ1AsIDAsIGZpbGVuYW1lX3djLCAtMSwgZmlsZW5h bWVfYW5zaSwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg TUFYX1BBVEggKiA0LCBOVUxMLCBOVUxMKTsKK8KgwqDCoCBpZiAodXRmOHRvYW5zaShzLT51cmws ICZmaWxlbmFtZV9hbnNpKSkKK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKwqDCoMKgwqAgYXJn ID0gYXZzX25ld192YWx1ZV9zdHJpbmcoZmlsZW5hbWVfYW5zaSk7CivCoMKgwqAgYXZfZnJlZShm aWxlbmFtZV9hbnNpKTsKwqAjZWxzZQrCoMKgwqDCoCBhcmcgPSBhdnNfbmV3X3ZhbHVlX3N0cmlu ZyhzLT51cmwpOwrCoCNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3djaGFyX2ZpbGVuYW1l LmggYi9saWJhdnV0aWwvd2NoYXJfZmlsZW5hbWUuaAppbmRleCA5MGYwODI0Li4zMjI2MGE0IDEw MDY0NAotLS0gYS9saWJhdnV0aWwvd2NoYXJfZmlsZW5hbWUuaAorKysgYi9saWJhdnV0aWwvd2No YXJfZmlsZW5hbWUuaApAQCAtNDAsNiArNDAsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgdXRmOHRv d2NoYXIoY29uc3QgY2hhciAqZmlsZW5hbWVfdXRmOCwgd2NoYXJfdCAqKmZpbGVuYW1lX3cpCsKg wqDCoMKgIE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgZmlsZW5hbWVfdXRmOCwgLTEs ICpmaWxlbmFtZV93LCBudW1fY2hhcnMpOwrCoMKgwqDCoCByZXR1cm4gMDsKwqB9CisKK2F2X3dh cm5fdW51c2VkX3Jlc3VsdAorc3RhdGljIGlubGluZSBpbnQgd2NoYXJ0b2Fuc2koY29uc3Qgd2No YXJfdCAqZmlsZW5hbWVfdywgY2hhciAqKmZpbGVuYW1lKQoreworwqDCoMKgIGNvbnN0IGludCBu dW1fY2hhcnMgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1RIUkVBRF9BQ1AsIDAsIGZpbGVuYW1l X3csIC0xLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwsIDAsIE5VTEws IE5VTEwpOworwqDCoMKgIGlmIChudW1fY2hhcnMgPD0gMCkgeworwqDCoMKgwqDCoMKgwqAgKmZp bGVuYW1lID0gTlVMTDsKK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOworwqDCoMKgIH0KK8KgwqDC oCAqZmlsZW5hbWUgPSAoY2hhciAqKWF2X2NhbGxvYyhudW1fY2hhcnMsIHNpemVvZihjaGFyKSk7 CivCoMKgwqAgaWYgKCEqZmlsZW5hbWUpIHsKK8KgwqDCoMKgwqDCoMKgIGVycm5vID0gRU5PTUVN OworwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC0xOworwqDCoMKgIH0KK8KgwqDCoCBXaWRlQ2hhclRv TXVsdGlCeXRlKENQX1RIUkVBRF9BQ1AsIDAsIGZpbGVuYW1lX3csIC0xLAorwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZmlsZW5hbWUsIG51bV9jaGFycywg TlVMTCwgTlVMTCk7CivCoMKgwqAgcmV0dXJuIDA7Cit9CisKK2F2X3dhcm5fdW51c2VkX3Jlc3Vs dAorc3RhdGljIGlubGluZSBpbnQgdXRmOHRvYW5zaShjb25zdCBjaGFyICpmaWxlbmFtZV91dGY4 LCBjaGFyICoqZmlsZW5hbWUpCit7CivCoMKgwqAgd2NoYXJfdCAqZmlsZW5hbWVfdyA9IE5VTEw7 CivCoMKgwqAgaW50IHJldCA9IC0xOworwqDCoMKgIGlmICh1dGY4dG93Y2hhcihmaWxlbmFtZV91 dGY4LCAmZmlsZW5hbWVfdykpCivCoMKgwqDCoMKgwqDCoCByZXR1cm4gLTE7CisKK8KgwqDCoCBp ZiAoIWZpbGVuYW1lX3cpIHsKK8KgwqDCoMKgwqDCoMKgICpmaWxlbmFtZSA9IE5VTEw7CivCoMKg wqDCoMKgwqDCoCByZXR1cm4gMDsKK8KgwqDCoCB9CisKK8KgwqDCoCByZXQgPSB3Y2hhcnRvYW5z aShmaWxlbmFtZV93LCBmaWxlbmFtZSk7CivCoMKgwqAgYXZfZnJlZShmaWxlbmFtZV93KTsKK8Kg wqDCoCByZXR1cm4gcmV0OworfQrCoCNlbmRpZgrCoArCoCNlbmRpZiAvKiBBVlVUSUxfV0NIQVJf RklMRU5BTUVfSCAqLwotLSAKMi4zMi4wCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZm bXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs CgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVs LXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K