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 56C73420E3 for ; Sat, 28 May 2022 13:28:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 62F5E68B64F; Sat, 28 May 2022 16:25:50 +0300 (EEST) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F8FC68B61C for ; Sat, 28 May 2022 16:25:43 +0300 (EEST) Received: by mail-pl1-f170.google.com with SMTP id w3so6436102plp.13 for ; Sat, 28 May 2022 06:25:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:message-id:in-reply-to:references:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=OqhbU/b0zzr3kzn9SUqIr6VqE0LJnL9y55vlOBYV5gs=; b=kTbTfQjww+sD/qZPz1jeCPXJKSwXS/Bb+jFz3mj8HgO8WBaeJofz96ZH3VU9i/nDGS jvOnLjUQBA942L0AJefCBin9KGfadFZL+ssGeRvatU9Nj2kXwFDEPVfzJFeLQoBY27MF m05NeGE2OjCDOJiGonOgFrm1hjCR/j/+JO7pD5L2HpL9EInclZoGQWi6BBKY0eDgT91u ML76L+eLnPyesDxmLNMgJVgvnkc6v9I1YKrSdAvE8cIU+tRGFW7QF3kyilG0BTLm1uni IV1lfS4K6fLSlS+dyQEi3tXbiUXNQQQTDgeHAZkegDC0WAKCnkOfZ7l6+5tbYun2ISN2 Vh/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:message-id:in-reply-to:references:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=OqhbU/b0zzr3kzn9SUqIr6VqE0LJnL9y55vlOBYV5gs=; b=4k2/rUwfaxsmlhc8aBpcSmZCN2s7yXkdtbW5BpFIrNHEygg4FunuQgCFL3di2BeYW8 BsoxAsyoHv21laRvvrXC9hAk8OEIT13jiBmW4QhDJYmpWv9raZITvZpD3+SMapOa+Qlq X0k40p2FOe+tnxW6nexHlo/lXUm1IgOWSjKHTJ8tuVJxh4Lm8x1eCbsi1Sxs334sFAb/ njPzArToHb3z86DP7Bq5y6YDG/BpGjk/uJ4asRKzU6B6A8Bm/eT6byZff8mZ3XbcqZXP JIk4XrwSmbtwRttUFSKG7rZnwxNKRwzYbpljTJRGLcfsyhTQVqVKKpk4J8KkTXo4IGCx Vozw== X-Gm-Message-State: AOAM530dNaWQWvKUP40V5lU84P4hmUbLbt8wXcaT6qJFMvIuJM6S8cAs 8QIyBRLWKOaNsR4B0XIin4Cpc35N/Hk8YA== X-Google-Smtp-Source: ABdhPJyHguLN4kYiiZeHlyrLH3LOwFfvHn8jX4Snb/1VvLdQqU+LHuM0uQhistRsvzpSbONH5Ybhjw== X-Received: by 2002:a17:902:a418:b0:161:f216:4f49 with SMTP id p24-20020a170902a41800b00161f2164f49mr41609080plq.129.1653744341217; Sat, 28 May 2022 06:25:41 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id i16-20020a170902cf1000b00161929fb1adsm5641345plg.54.2022.05.28.06.25.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 28 May 2022 06:25:40 -0700 (PDT) From: softworkz X-Google-Original-From: softworkz Message-Id: <8fdbdf7c5fea1e2cd593cc90d75dd7bc885f4c82.1653744323.git.ffmpegagent@gmail.com> In-Reply-To: References: Date: Sat, 28 May 2022 13:25:15 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v4 15/23] avfilter/textmod: Add textmod, censor and show_speaker filters 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: Michael Niedermayer , softworkz , Andriy Gelman , Andreas Rheinhardt 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: RnJvbTogc29mdHdvcmt6IDxzb2Z0d29ya3pAaG90bWFpbC5jb20+CgotIHRleHRtb2Qge1MgLT4g UykKICBNb2RpZnkgc3VidGl0bGUgdGV4dCBpbiBhIG51bWJlciBvZiB3YXlzCgotIGNlbnNvciB7 UyAtPiBTKQogIENlbnNvciBzdWJ0aXRsZXMgdXNpbmcgYSB3b3JkIGxpc3QKCi0gc2hvd19zcGVh a2VyIHtTIC0+IFMpCiAgUHJlcGVuZCBzcGVha2VyIG5hbWVzIGZyb20gQVNTIHN1YnRpdGxlcyB0 byB0aGUgdmlzaWJsZSB0ZXh0IGxpbmVzCgpTaWduZWQtb2ZmLWJ5OiBzb2Z0d29ya3ogPHNvZnR3 b3JrekBob3RtYWlsLmNvbT4KLS0tCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgfCAyMDYgKysr KysrKysrKysrCiBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgfCAgIDUgKwogbGliYXZmaWx0ZXIv YWxsZmlsdGVycy5jIHwgICAzICsKIGxpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYyB8IDcxMCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgOTI0 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9zZl90ZXh0bW9k LmMKCmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRl eCA3MGQ0YzkwNjYzLi5lMGNlYmE4MGUyIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisr KyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTI2ODg3LDYgKzI2ODg3LDE0NSBAQCBleGlzdGluZyBm aWx0ZXJzIHVzaW5nIEBjb2Rley0tZGlzYWJsZS1maWx0ZXJzfS4KIAogQmVsb3cgaXMgYSBkZXNj cmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBzdWJ0aXRsZSBmaWx0ZXJzLgogCisK K0BzZWN0aW9uIGNlbnNvcgorCitDZW5zb3Igc2VsZWN0ZWQgd29yZHMgaW4gdGV4dCBzdWJ0aXRs ZXMuCisKK0lucHV0czoKK0BpdGVtaXplCitAaXRlbSAwOiBTdWJ0aXRsZXNbVEVYVF0KK0BlbmQg aXRlbWl6ZQorCitPdXRwdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRpdGxlc1tURVhUXQor QGVuZCBpdGVtaXplCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitA dGFibGUgQG9wdGlvbgorQGl0ZW0gbW9kZQorVGhlIGNlbnNvcmluZyBtb2RlIHRvIGFwcGx5Lgor CitTdXBwb3J0ZWQgY2Vuc29yaW5nIG1vZGVzIGFyZToKKworQHRhYmxlIEB2YXIKK0BpdGVtIDAs IGtlZXBfZmlyc3RfbGFzdAorUmVwbGFjZSBhbGwgY2hhcmFjdGVycyB3aXRoIHRoZSAnY2Vuc29y X2NoYXInIGV4Y2VwdCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHdvcmQu CitGb3Igd29yZHMgd2l0aCBsZXNzIHRoYW4gNCBjaGFyYWN0ZXJzLCB0aGUgbGFzdCBjaGFyYWN0 ZXIgd2lsbCBiZSByZXBsYWNlZCBhcyB3ZWxsLgorRm9yIHdvcmRzIHdpdGggbGVzcyB0aGFuIDMg Y2hhcmFjdGVycywgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxsIGJlIHJlcGxhY2VkIGFzIHdlbGwu CitAaXRlbSAxLCBrZWVwX2ZpcnN0CitSZXBsYWNlIGFsbCBjaGFyYWN0ZXJzIHdpdGggdGhlICdj ZW5zb3JfY2hhcicgZXhjZXB0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSB3b3JkLgorRm9yIHdv cmRzIHdpdGggbGVzcyB0aGFuIDMgY2hhcmFjdGVycywgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxs IGJlIHJlcGxhY2VkIGFzIHdlbGwuCitAaXRlbSAyLCBhbGwKK1JlcGxhY2UgYWxsIGNoYXJhY3Rl cnMgd2l0aCB0aGUgJ2NlbnNvcl9jaGFyJy4KK0BlbmQgdGFibGUKKworQGl0ZW0gd29yZHMKK0Eg bGlzdCBvZiB3b3JkcyB0byBjZW5zb3IsIHNlcGFyYXRlZCBieSAnc2VwYXJhdG9yJy4KKworQGl0 ZW0gd29yZHNfZmlsZQorU3BlY2lmeSBhIGZpbGUgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBjb250 ZW50cyBmb3IgdGhlICd3b3JkcycgcGFyYW1ldGVyLgorCitAaXRlbSBjZW5zb3JfY2hhcgorU2lu Z2xlIGNoYXJhY3RlciB1c2VkIGFzIHJlcGxhY2VtZW50IGZvciBjZW5zb3JpbmcuCisKK0BpdGVt IHNlcGFyYXRvcgorRGVsaW1pdGVyIGNoYXJhY3RlciBmb3Igd29yZHMuIFVzZWQgd2l0aCByZXBs YWNlX3dvcmRzIGFuZCByZW1vdmVfd29yZHMtIE11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyLgor VGhlIGRlZmF1bHQgaXMgJy4nLgorCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIEV4YW1wbGVz CisKK0BpdGVtaXplCitAaXRlbQorQ2Vuc29yIGEgZmV3IGdpdmVuIHdvcmRzIHdpdGggYSBwb3Vu ZCBjaGFyYWN0ZXIuCitAZXhhbXBsZQorZmZtcGVnIC1pICJodHRwOi8vc3RyZWFtcy52aWRlb2xh bi5vcmcvc2FtcGxlcy9zdWIvU1NBL3N1YnRpdGxlX3Rlc3RpbmdfY29tcGxleC5ta3YiIC1maWx0 ZXJfY29tcGxleCAiWzA6MV1jZW5zb3I9d29yZHM9J2Rpc3MsbG91ZGVyLGhvcGUsYmVhbSx3b3Jk JzpjZW5zb3JfY2hhcj0nIyciIC1tYXAgMCAteSBvdXRwdXQubWt2CitAZW5kIGV4YW1wbGUKK0Bl bmQgaXRlbWl6ZQorCisKK0BzZWN0aW9uIHRleHRtb2QKKworTW9kaWZ5IHN1YnRpdGxlIHRleHQg aW4gYSBudW1iZXIgb2Ygd2F5cy4KKworSW5wdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRp dGxlc1tURVhUXQorQGVuZCBpdGVtaXplCisKK091dHB1dHM6CitAaXRlbWl6ZQorQGl0ZW0gMDog U3VidGl0bGVzW1RFWFRdCitAZW5kIGl0ZW1pemUKKworSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5n IHBhcmFtZXRlcnM6CisKK0B0YWJsZSBAb3B0aW9uCitAaXRlbSBtb2RlCitUaGUga2luZCBvZiB0 ZXh0IG1vZGlmaWNhdGlvbiB0byBhcHBseQorCitTdXBwb3J0ZWQgb3BlcmF0aW9uIG1vZGVzIGFy ZToKKworQHRhYmxlIEB2YXIKK0BpdGVtIDAsIGxlZXQKK0NvbnZlcnQgc3VidGl0bGUgdGV4dCB0 byAnbGVldCBzcGVhaycuIEl0J3MgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhcyB0aGUg bW9kaWZpY2F0aW9uIHdpbGwgYmUgdmlzaWJsZSB3aXRoIGFsbW9zdCBhbGwgdGV4dCBsaW5lcy4K K0BpdGVtIDEsIHRvX3VwcGVyCitDaGFuZ2UgYWxsIHRleHQgdG8gdXBwZXIgY2FzZS4gTWlnaHQg aW1wcm92ZSByZWFkYWJpbGl0eS4KK0BpdGVtIDIsIHRvX2xvd2VyCitDaGFuZ2UgYWxsIHRleHQg dG8gbG93ZXIgY2FzZS4KK0BpdGVtIDMsIHJlcGxhY2VfY2hhcnMKK1JlcGxhY2Ugb25lIG9yIG1v cmUgY2hhcmFjdGVycy4gUmVxdWlyZXMgdGhlIGZpbmQgYW5kIHJlcGxhY2UgcGFyYW1ldGVycyB0 byBiZSBzcGVjaWZpZWQuCitCb3RoIG5lZWQgdG8gYmUgZXF1YWwgaW4gbGVuZ3RoLgorVGhlIGZp cnN0IGNoYXIgaW4gZmluZCBpcyByZXBsYWNlZCBieSB0aGUgZmlyc3QgY2hhciBpbiByZXBsYWNl LCBzYW1lIGZvciBhbGwgc3Vic2VxdWVudCBjaGFycy4KK0BpdGVtIDQsIHJlbW92ZV9jaGFycwor UmVtb3ZlIGNlcnRhaW4gY2hhcmFjdGVycy4gUmVxdWlyZXMgdGhlIGZpbmQgcGFyYW1ldGVyIHRv IGJlIHNwZWNpZmllZC4KK0FsbCBjaGFycyBpbiB0aGUgZmluZCBwYXJhbWV0ZXIgc3RyaW5nIHdp bGwgYmUgcmVtb3ZlZCBmcm9tIGFsbCBzdWJ0aXRsZSB0ZXh0LgorQGl0ZW0gNSwgcmVwbGFjZV93 b3JkcworUmVwbGFjZSBvbmUgb3IgbW9yZSB3b3Jkcy4gUmVxdWlyZXMgdGhlIGZpbmQgYW5kIHJl cGxhY2UgcGFyYW1ldGVycyB0byBiZSBzcGVjaWZpZWQuIE11bHRpcGxlIHdvcmRzIG11c3QgYmUg c2VwYXJhdGVkIGJ5IHRoZSBkZWxpbWl0ZXIgY2hhciBzcGVjaWZpZWQgdmllIHRoZSBzZXBhcmF0 b3IgcGFyYW1ldGVyIChkZWZhdWx0OiAnLCcpLgorVGhlIG51bWJlciBvZiB3b3JkcyBpbiB0aGUg ZmluZCBhbmQgcmVwbGFjZSBwYXJhbWV0ZXJzIG5lZWRzIHRvIGJlIGVxdWFsLgorVGhlIGZpcnN0 IHdvcmQgaW4gZmluZCBpcyByZXBsYWNlZCBieSB0aGUgZmlyc3Qgd29yZCBpbiByZXBsYWNlLCBz YW1lIGZvciBhbGwgc3Vic2VxdWVudCB3b3JkcworQGl0ZW0gNiwgcmVtb3ZlX3dvcmRzCitSZW1v dmUgY2VydGFpbiB3b3Jkcy4gUmVxdWlyZXMgdGhlIGZpbmQgcGFyYW1ldGVyIHRvIGJlIHNwZWNp ZmllZC4gTXVsdGlwbGUgd29yZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgdGhlIGRlbGltaXRlciBj aGFyIHNwZWNpZmllZCB2aWUgdGhlIHNlcGFyYXRvciBwYXJhbWV0ZXIgKGRlZmF1bHQ6ICcsJyku CitBbGwgd29yZHMgaW4gdGhlIGZpbmQgcGFyYW1ldGVyIHN0cmluZyB3aWxsIGJlIHJlbW92ZWQg ZnJvbSBhbGwgc3VidGl0bGUgdGV4dC4KK0BlbmQgdGFibGUKKworQGl0ZW0gZmluZAorUmVxdWly ZWQgZm9yIHJlcGxhY2VfY2hhcnMsIHJlbW92ZV9jaGFycywgcmVwbGFjZV93b3JkcyBhbmQgcmVt b3ZlX3dvcmRzLgorCitAaXRlbSBmaW5kX2ZpbGUKK1NwZWNpZnkgYSBmaWxlIGZyb20gd2hpY2gg dG8gbG9hZCB0aGUgY29udGVudHMgZm9yIHRoZSAnZmluZCcgcGFyYW1ldGVyLgorCitAaXRlbSBy ZXBsYWNlCitSZXF1aXJlZCBmb3IgcmVwbGFjZV9jaGFycyBhbmQgcmVwbGFjZV93b3Jkcy4KKwor QGl0ZW0gcmVwbGFjZV9maWxlCitTcGVjaWZ5IGEgZmlsZSBmcm9tIHdoaWNoIHRvIGxvYWQgdGhl IGNvbnRlbnRzIGZvciB0aGUgJ3JlcGxhY2UnIHBhcmFtZXRlci4KKworQGl0ZW0gc2VwYXJhdG9y CitEZWxpbWl0ZXIgY2hhcmFjdGVyIGZvciB3b3Jkcy4gVXNlZCB3aXRoIHJlcGxhY2Vfd29yZHMg YW5kIHJlbW92ZV93b3Jkcy0gTXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIuCitUaGUgZGVmYXVs dCBpcyAnLicuCisKK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gRXhhbXBsZXMKKworQGl0ZW1p emUKK0BpdGVtCitDaGFuZ2UgYWxsIGNoYXJhY3RlcnMgdG8gdXBwZXIgY2FzZSB3aGlsZSBrZWVw aW5nIGFsbCBzdHlsZXMgYW5kIGFuaW1hdGlvbnM6CitAZXhhbXBsZQorZmZtcGVnIC1pICJodHRw czovL3N0cmVhbXMudmlkZW9sYW4ub3JnL2ZmbXBlZy9ta3Zfc3VidGl0bGVzLm1rdiIgLWZpbHRl cl9jb21wbGV4ICJbMDpzXXRleHRtb2Q9bW9kZT10b191cHBlciIgLW1hcCAwIC15IG91dC5ta3YK K0BlbmQgZXhhbXBsZQorQGl0ZW0KK1JlbW92ZSBhIHNldCBvZiBzeW1ib2wgY2hhcmFjdGVycyBm b3IgYW0gaW1wcm92ZWQgYW5kIHNtb290aGVyIHZpc3VhbCBhcHBlcmFuY2U6CitAZXhhbXBsZQor ZmZtcGVnIC1pICJodHRwczovL3N0cmVhbXMudmlkZW9sYW4ub3JnL2ZmbXBlZy9ta3Zfc3VidGl0 bGVzLm1rdiIgLWZpbHRlcl9jb21wbGV4ICJbMDpzXXRleHRtb2Q9bW9kZT1yZW1vdmVfY2hhcnM6 ZmluZD0nJCYjQCrCpyciIC1tYXAgMCAteSBvdXQubWt2CitAZW5kIGV4YW1wbGUKK0BlbmQgaXRl bWl6ZQorCiBAc2VjdGlvbiBncmFwaGljc3ViMnZpZGVvCiAKIFJlbmRlcnMgZ3JhcGhpYyBzdWJ0 aXRsZXMgYXMgdmlkZW8gZnJhbWVzLgpAQCAtMjcwNTQsNiArMjcxOTMsNzMgQEAgZmZtcGVnIC1p ICJodHRwOi8vc3RyZWFtcy52aWRlb2xhbi5vcmcvc2FtcGxlcy9zdWIvU1NBL3N1YnRpdGxlX3Rl c3RpbmdfY29tcGxleC4KIEBlbmQgZXhhbXBsZQogQGVuZCBpdGVtaXplCiAKK0BzZWN0aW9uIHNo b3dzcGVha2VyCisKK1ByZXBlbmQgc3BlYWtlciBuYW1lcyB0byBzdWJ0aXRsZSBsaW5lcyAod2hl biBhdmFpbGFibGUpLgorCitTdWJ0aXRsZXMgaW4gQVNTL1NTQSBmb3JtYXQgYXJlIG9mdGVuIGlu Y2x1ZGluZyB0aGUgbmFtZXMgb2YgdGhlIHBlcnNvbnMKK29yIGNoYXJhY3RlciBmb3IgZWFjaCBz dWJ0aXRsZSBsaW5lLiBUaGUgc2hvd3NwZWFrZXIgZmlsdGVyIGFkZHMgdGhvc2UgbmFtZXMKK3Rv IHRoZSBhY3R1YWwgc3VidGl0bGUgdGV4dCB0byBtYWtlIGl0IHZpc2libGUgb24gcGxheWJhY2su CisKK0lucHV0czoKK0BpdGVtaXplCitAaXRlbSAwOiBTdWJ0aXRsZXNbVEVYVF0KK0BlbmQgaXRl bWl6ZQorCitPdXRwdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRpdGxlc1tURVhUXQorQGVu ZCBpdGVtaXplCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitAdGFi bGUgQG9wdGlvbgorQGl0ZW0gZm9ybWF0CitUaGUgZm9ybWF0IGZvciBwcmVwZW5kaW5nIHNwZWFr ZXIgbmFtZXMuIERlZmF1bHQgaXMgJ3NxdWFyZV9icmFja2V0cycuCisKK1N1cHBvcnRlZCBvcGVy YXRpb24gbW9kZXMgYXJlOgorCitAdGFibGUgQHZhcgorQGl0ZW0gMCwgc3F1YXJlX2JyYWNrZXRz CitFbmNsb3NlIHRoZSBzcGVha2VyIG5hbWUgaW4gc3F1YXJlIGJyYWNrZXRzLCBmb2xsb3dlZCBi eSBzcGFjZSAoJ1tzcGVha2VyXSB0ZXh0JykuCitAaXRlbSAxLCByb3VuZF9icmFja2V0cworRW5j bG9zZSB0aGUgc3BlYWtlciBuYW1lIGluIHJvdW5kIGJyYWNrZXRzLCBmb2xsb3dlZCBieSBzcGFj ZSAoJyhzcGVha2VyKSB0ZXh0JykuCitAaXRlbSAyLCBjb2xvbgorU2VwYXJhdGUgdGhlIHNwZWFr ZXIgbmFtZSB3aXRoIGEgY29sb24gYW5kIHNwYWNlICgnc3BlYWtlcjogdGV4dCcpLgorQGl0ZW0g MywgcGxhaW4KK1NlcGFyYXRlIHRoZSBzcGVha2VyIG5hbWUgd2l0aCBhIHNwYWNlIG9ubHkgKCdz cGVha2VyIHRleHQnKS4KK0BlbmQgdGFibGUKKworQGl0ZW0gbGluZV9icmVhaworU2V0IHRow61z IHBhcmFtZXRlciB0byBpbnNlcnQgYSBsaW5lIGJyZWFrIGJldHdlZW4gc3BlYWtlciBuYW1lIGFu ZCB0ZXh0IGluc3RlYWQgb2YgdGhlIHNwYWNlIGNoYXJhY3Rlci4KKworQGl0ZW0gc3R5bGUKK0Fs bG93cyB0byBzZXQgYSBzcGVjaWZpYyBzdHlsZSBmb3IgdGhlIHNwZWFrZXIgbmFtZSB0ZXh0Lgor CitUaGlzIGNhbiBiZSBlaXRoZXIgYSBuYW1lZCBzdHlsZSB0aGF0IGV4aXN0cyBpbiB0aGUgYXNz IHN1YnRpdGxlIGhlYWRlciBzY3JpcHQgKGUuZy4gJ0RlZmF1bHQnKSBvciBhbiBhc3Mgc3R5bGUg b3ZlcnJpZGUgY29kZS4KK0V4YW1wbGU6ICBAe1xcYyZIREQwMDAwJlxcYmUxXFxpMVxcYm9yZDEw QH0KK1RoaXMgc2V0cyB0aGUgY29sb3IgdG8gYmx1ZSwgZW5hYmxlcyBlZGdlIGJsdXJyaW5nLCBp dGFsaWMgZm9udCBhbmQgYSBib3JkZXIgb2Ygc2l6ZSAxMC4KKworVGhlIGJlaGF2aW9yIGlzIGFz IGZvbGxvd3M6CisKKy0gV2hlbiB0aGUgc3R5bGUgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwg dGhlIGZpbHRlciB3aWxsIGZpbmQgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBldmVudCBzdHJp bmcgdGhhdCBpcyBhY3R1YWwgdGV4dC4KKyAgVGhlIHNwZWFrZXIgbmFtZSB3aWxsIGJlIGluc2Vy dGVkIGF0IHRoaXMgcG9zaXRpb24uIFRoaXMgYWxsb3dzIHRvIGhhdmUgdGhlIHNwZWFrZXIgbmFt ZSBzaG93biBpbiB0aGUgc2FtZSBzdHlsZSBsaWtlIHRoZQorICByZWd1bGFyIHRleHQsIGluIGNh c2UgdGhlIHN0cmluZyB3b3VsZCBzdGFydCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc3R5bGUgY29kZXMu CistIFdoZW4gdGhlIHN0eWxlIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgZXZlcnl0aGluZyB3aWxs IGJlIHByZXBlbmRlZCB0byB0aGUgb3JpZ2luYWwgdGV4dDoKKyAgU3R5bGUgQ29kZSBvciBTdHls ZSBuYW1lID4+IFNwZWFrZXIgTmFtZSA+PiBTdHlsZSBSZXNldCBDb2RlID4+IE9yaWdpbmFsIFRl eHQKKworQGVuZCB0YWJsZQorCitAc3Vic2VjdGlvbiBFeGFtcGxlcworCitAaXRlbWl6ZQorQGl0 ZW0KK1ByZXBlbmQgc3BlYWtlciBuYW1lcyB3aXRoIGJsdWUgdGV4dCwgc21vb3RoIGVkZ2VzIGFu ZCBibGVuZC9vdmVybGF5IHRoYXQgb250byB0aGUgdmlkZW8uCitAZXhhbXBsZQorZmZtcGVnIC1p IElOUFVUIC1maWx0ZXJfY29tcGxleCAic2hvd3NwZWFrZXI9Zm9ybWF0PWNvbG9uOnN0eWxlPSdA e1xcYyZIREQwMDAwJlxcYmUxQH0nLFswOnZdb3ZlcmxheXRleHRzdWJzIgorQGVuZCBleGFtcGxl CitAZW5kIGl0ZW1pemUKKwogQHNlY3Rpb24gdGV4dHN1YjJ2aWRlbwogCiBDb252ZXJ0cyB0ZXh0 IHN1YnRpdGxlcyB0byB2aWRlbyBmcmFtZXMuCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9NYWtl ZmlsZSBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCmluZGV4IDg0ZWMyZmE1NDIuLjZkMmE3NTEyOGMg MTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlCisrKyBiL2xpYmF2ZmlsdGVyL01ha2Vm aWxlCkBAIC01NzYsNiArNTc2LDExIEBAIE9CSlMtJChDT05GSUdfWVVWVEVTVFNSQ19GSUxURVIp ICAgICAgICAgICAgICs9IHZzcmNfdGVzdHNyYy5vCiAKIE9CSlMtJChDT05GSUdfTlVMTFNJTktf RklMVEVSKSAgICAgICAgICAgICAgICs9IHZzaW5rX251bGxzaW5rLm8KIAorIyBzdWJ0aXRsZSBm aWx0ZXJzCitPQkpTLSQoQ09ORklHX0NFTlNPUl9GSUxURVIpICAgICAgICAgICAgICAgICArPSBz Zl90ZXh0bW9kLm8KK09CSlMtJChDT05GSUdfU0hPV19TUEVBS0VSX0ZJTFRFUikgICAgICAgICAg ICs9IHNmX3RleHRtb2QubworT0JKUy0kKENPTkZJR19URVhUTU9EX0ZJTFRFUikgICAgICAgICAg ICAgICAgKz0gc2ZfdGV4dG1vZC5vCisKICMgbXVsdGltZWRpYSBmaWx0ZXJzCiBPQkpTLSQoQ09O RklHX0FCSVRTQ09QRV9GSUxURVIpICAgICAgICAgICAgICArPSBhdmZfYWJpdHNjb3BlLm8KIE9C SlMtJChDT05GSUdfQURSQVdHUkFQSF9GSUxURVIpICAgICAgICAgICAgICs9IGZfZHJhd2dyYXBo Lm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2Fs bGZpbHRlcnMuYwppbmRleCBhNmI5NTc4NWJlLi45NjA3MjZiYTA4IDEwMDY0NAotLS0gYS9saWJh dmZpbHRlci9hbGxmaWx0ZXJzLmMKKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCkBAIC01 NTksNiArNTU5LDkgQEAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2F2Zl9zaG93dm9sdW1lOwog ZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2F2Zl9zaG93d2F2ZXM7CiBleHRlcm4gY29uc3QgQVZG aWx0ZXIgZmZfYXZmX3Nob3d3YXZlc3BpYzsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92YWZf c3BlY3RydW1zeW50aDsKK2V4dGVybiBjb25zdCBBVkZpbHRlciBmZl9zZl9jZW5zb3I7CitleHRl cm4gY29uc3QgQVZGaWx0ZXIgZmZfc2Zfc2hvd3NwZWFrZXI7CitleHRlcm4gY29uc3QgQVZGaWx0 ZXIgZmZfc2ZfdGV4dG1vZDsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9zdmZfZ3JhcGhpY3N1 YjJ2aWRlbzsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9zdmZfdGV4dHN1YjJ2aWRlbzsKIApk aWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvc2ZfdGV4dG1vZC5jIGIvbGliYXZmaWx0ZXIvc2ZfdGV4 dG1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmM3NTI0NGNmYjIK LS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZpbHRlci9zZl90ZXh0bW9kLmMKQEAgLTAsMCArMSw3 MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgc29mdHdvcmt6CisgKgorICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIHRleHQgc3VidGl0 bGUgZmlsdGVyIHdoaWNoIGFsbG93cyB0byBtb2RpZnkgc3VidGl0bGUgdGV4dCBpbiBzZXZlcmFs IHdheXMKKyAqLworCisjaW5jbHVkZSA8bGliYXZ1dGlsL2Fzc19pbnRlcm5hbC5oPgorCisjaW5j bHVkZSAibGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAi bGliYXZ1dGlsL2Fzc19zcGxpdF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9icHJp bnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZmlsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciog bGVldF9zcmMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJT VFVWV1hZWiI7CitzdGF0aWMgY29uc3QgY2hhciogbGVldF9kc3QgPSAiYWJjZDNmNiMxamtsbW4w cHEyNTd1dnd4eXpBQihEM0Y2IzFKS0xNTjBQUTI1N1VWV1hZWiI7CisKK2VudW0gVGV4dE1vZEZp bHRlclR5cGUgeworICAgIFRNX1RFWFRNT0QsCisgICAgVE1fQ0VOU09SLAorICAgIFRNX1NIT1df U1BFQUtFUiwKK307CisKK2VudW0gVGV4dE1vZE9wZXJhdGlvbiB7CisgICAgT1BfTEVFVCwKKyAg ICBPUF9UT19VUFBFUiwKKyAgICBPUF9UT19MT1dFUiwKKyAgICBPUF9SRVBMQUNFX0NIQVJTLAor ICAgIE9QX1JFTU9WRV9DSEFSUywKKyAgICBPUF9SRVBMQUNFX1dPUkRTLAorICAgIE9QX1JFTU9W RV9XT1JEUywKKyAgICBOQl9PUFMsCit9OworCitlbnVtIENlbnNvck1vZGUgeworICAgIENNX0tF RVBfRklSU1RfTEFTVCwKKyAgICBDTV9LRUVQX0ZJUlNULAorICAgIENNX0FMTCwKK307CisKK2Vu dW0gU2hvd1NwZWFrZXJNb2RlIHsKKyAgICBTTV9TUVVBUkVfQlJBQ0tFVFMsCisgICAgU01fUk9V TkRfQlJBQ0tFVFMsCisgICAgU01fQ09MT04sCisgICAgU01fUExBSU4sCit9OworCit0eXBlZGVm IHN0cnVjdCBUZXh0TW9kQ29udGV4dCB7CisgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7CisgICAg ZW51bSBBVlN1YnRpdGxlVHlwZSBmb3JtYXQ7CisgICAgZW51bSBUZXh0TW9kRmlsdGVyVHlwZSBm aWx0ZXJfdHlwZTsKKyAgICBlbnVtIFRleHRNb2RPcGVyYXRpb24gb3BlcmF0aW9uOworICAgIGVu dW0gQ2Vuc29yTW9kZSBjZW5zb3JfbW9kZTsKKyAgICBlbnVtIFNob3dTcGVha2VyTW9kZSBzcGVh a2VyX21vZGU7CisgICAgY2hhciAqZmluZDsKKyAgICBjaGFyICpmaW5kX2ZpbGU7CisgICAgY2hh ciAqc3R5bGU7CisgICAgY2hhciAqcmVwbGFjZTsKKyAgICBjaGFyICpyZXBsYWNlX2ZpbGU7Cisg ICAgY2hhciAqc2VwYXJhdG9yOworICAgIGNoYXIgKmNlbnNvcl9jaGFyOworICAgIGNoYXIgKipm aW5kX2xpc3Q7CisgICAgaW50ICBsaW5lX2JyZWFrOworICAgIGludCAgbmJfZmluZF9saXN0Owor ICAgIGNoYXIgKipyZXBsYWNlX2xpc3Q7CisgICAgaW50ICBuYl9yZXBsYWNlX2xpc3Q7Cit9IFRl eHRNb2RDb250ZXh0OworCitzdGF0aWMgY2hhciAqKnNwbGl0X3N0cmluZyhjaGFyICpzb3VyY2Us IGludCAqbmJfZWxlbXMsIGNvbnN0IGNoYXIgKmRlbGltKQoreworICAgIGNoYXIgKipsaXN0ID0g TlVMTDsKKyAgICBjaGFyICp0ZW1wID0gTlVMTDsKKyAgICBjaGFyICpwdHIgPSBhdl9zdHJ0b2so c291cmNlLCBkZWxpbSwgJnRlbXApOworCisgICAgd2hpbGUgKHB0cikgeworICAgICAgICBpZiAo c3RybGVuKHB0cikpIHsKKyAgICAgICAgICAgIGF2X2R5bmFycmF5X2FkZCgmbGlzdCwgbmJfZWxl bXMsIHB0cik7CisgICAgICAgICAgICBpZiAoIWxpc3QpCisgICAgICAgICAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBwdHIgPSBhdl9zdHJ0b2soTlVMTCwgZGVsaW0s ICZ0ZW1wKTsKKyAgICB9CisKKyAgICBpZiAoIWxpc3QpCisgICAgICAgIHJldHVybiBOVUxMOwor CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAqbmJfZWxlbXM7IGkrKykgeworICAgICAgICBsaXN0 W2ldID0gYXZfc3RyZHVwKGxpc3RbaV0pOworICAgICAgICBpZiAoIWxpc3RbaV0pIHsKKyAgICAg ICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgaTsgbisrKQorICAgICAgICAgICAgICAgIGF2X2Zy ZWUobGlzdFtuXSk7CisgICAgICAgICAgICBhdl9mcmVlKGxpc3QpOworICAgICAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbGlzdDsKK30KKworc3Rh dGljIGludCBsb2FkX3RleHRfZnJvbV9maWxlKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBjb25zdCBj aGFyICpmaWxlX25hbWUsIGNoYXIgKip0ZXh0LCBjaGFyIHNlcGFyYXRvcikKK3sKKyAgICBpbnQg ZXJyOworICAgIHVpbnQ4X3QgKnRleHRidWY7CisgICAgY2hhciAqdG1wOworICAgIHNpemVfdCB0 ZXh0YnVmX3NpemU7CisgICAgaW50IG9mZnNldCA9IDA7CisKKyAgICBpZiAoKGVyciA9IGF2X2Zp bGVfbWFwKGZpbGVfbmFtZSwgJnRleHRidWYsICZ0ZXh0YnVmX3NpemUsIDAsIGN0eCkpIDwgMCkg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJUaGUgdGV4dCBmaWxlICclcycg Y291bGQgbm90IGJlIHJlYWQgb3IgaXMgZW1wdHlcbiIsIGZpbGVfbmFtZSk7CisgICAgICAgIHJl dHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKHRleHRidWZfc2l6ZSA+IDEgJiYKKyAgICAgICAg KHRleHRidWZbMF0gPT0gMHhGRiAmJiB0ZXh0YnVmWzFdID09IDB4RkUKKyAgICAgICAgfHwgdGV4 dGJ1ZlswXSA9PSAweEZFICYmIHRleHRidWZbMV0gPT0gMHhGRikpIHsKKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiVVRGIHRleHQgZmlsZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEZp bGU6ICVzXG4iLCBmaWxlX25hbWUpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwor ICAgIH0KKworICAgIGlmICh0ZXh0YnVmX3NpemUgPiAyICYmIHRleHRidWZbMF0gPT0gMHhFRiAm JiB0ZXh0YnVmWzFdID09IDB4QkIgJiYgdGV4dGJ1ZlsyXSA9PSAweEJGKQorICAgICAgICBvZmZz ZXQgPSAzOyAvLyBVVEYtOAorCisgICAgaWYgKHRleHRidWZfc2l6ZSA+IFNJWkVfTUFYIC0gMSB8 fCAhKCh0bXAgPSBhdl9zdHJuZHVwKChjaGFyICopdGV4dGJ1ZiArIG9mZnNldCwgdGV4dGJ1Zl9z aXplIC0gb2Zmc2V0KSkpKSB7CisgICAgICAgIGF2X2ZpbGVfdW5tYXAodGV4dGJ1ZiwgdGV4dGJ1 Zl9zaXplKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICBh dl9maWxlX3VubWFwKHRleHRidWYsIHRleHRidWZfc2l6ZSk7CisKKyAgICBmb3IgKHNpemVfdCBp ID0gMDsgaSA8IHN0cmxlbih0bXApOyBpKyspIHsKKyAgICAgICAgc3dpdGNoICh0bXBbaV0pIHsK KyAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICBjYXNlICdccic6CisgICAgICAgIGNhc2UgJ1xm JzoKKyAgICAgICAgY2FzZSAnXHYnOgorICAgICAgICAgICAgdG1wW2ldID0gc2VwYXJhdG9yOwor ICAgICAgICB9CisgICAgfQorCisgICAgKnRleHQgPSB0bXA7CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBsb2FkX2ZpbGVzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFRl eHRNb2RDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCByZXQ7CisKKyAgICBpZiAoIXMt PnNlcGFyYXRvciB8fCBzdHJsZW4ocy0+c2VwYXJhdG9yKSAhPSAxKSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkEgc2luZ2xlIGNoYXJhY3RlciBuZWVkcyB0byBiZSBzcGVj aWZpZWQgZm9yIHRoZSBzZXBhcmF0b3IgcGFyYW1ldGVyLlxuIik7CisgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgaWYgKHMtPmZpbmRfZmlsZSAmJiBzdHJsZW4o cy0+ZmluZF9maWxlKSkgeworICAgICAgICByZXQgPSBsb2FkX3RleHRfZnJvbV9maWxlKGN0eCwg cy0+ZmluZF9maWxlLCAmcy0+ZmluZCwgcy0+c2VwYXJhdG9yWzBdKTsKKyAgICAgICAgaWYgKHJl dCA8IDAgKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAocy0+cmVw bGFjZV9maWxlICYmIHN0cmxlbihzLT5yZXBsYWNlX2ZpbGUpKSB7CisgICAgICAgIHJldCA9IGxv YWRfdGV4dF9mcm9tX2ZpbGUoY3R4LCBzLT5yZXBsYWNlX2ZpbGUsICZzLT5yZXBsYWNlLCBzLT5z ZXBhcmF0b3JbMF0pOworICAgICAgICBpZiAocmV0IDwgMCApCisgICAgICAgICAgICByZXR1cm4g cmV0OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfY2Vuc29y KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFRleHRNb2RDb250ZXh0ICpzID0gY3R4LT5w cml2OworICAgIGludCByZXQ7CisKKyAgICBzLT5maWx0ZXJfdHlwZSA9IFRNX0NFTlNPUjsKKyAg ICBzLT5vcGVyYXRpb24gPSBPUF9SRVBMQUNFX1dPUkRTOworCisgICAgcmV0ID0gbG9hZF9maWxl cyhjdHgpOworICAgIGlmIChyZXQgPCAwICkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGlm ICghcy0+ZmluZCB8fCAhc3RybGVuKHMtPmZpbmQpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkVpdGhlciB0aGUgJ3dvcmRzJyBvciB0aGUgJ3dvcmRzX2ZpbGUnIHBhcmFt ZXRlciBuZWVkcyB0byBiZSBzcGVjaWZpZWRcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOworICAgIH0KKworICAgIGlmICghcy0+Y2Vuc29yX2NoYXIgfHwgc3RybGVuKHMtPmNl bnNvcl9jaGFyKSAhPSAxKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkEg c2luZ2xlIGNoYXJhY3RlciBuZWVkcyB0byBiZSBzcGVjaWZpZWQgZm9yIHRoZSBjZW5zb3JfY2hh ciBwYXJhbWV0ZXJcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0K KworICAgIHMtPmZpbmRfbGlzdCA9IHNwbGl0X3N0cmluZyhzLT5maW5kLCAmcy0+bmJfZmluZF9s aXN0LCBzLT5zZXBhcmF0b3IpOworICAgIGlmICghcy0+ZmluZF9saXN0KQorICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgcy0+cmVwbGFjZV9saXN0ID0gYXZfY2FsbG9jKHMt Pm5iX2ZpbmRfbGlzdCwgc2l6ZW9mKGNoYXIgKikpOworICAgIGlmICghcy0+cmVwbGFjZV9saXN0 KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzLT5uYl9maW5kX2xpc3Q7IGkrKykgeworICAgICAgICBzaXplX3QgbGVuLCBzdGFydCA9 IDAsIGVuZDsKKyAgICAgICAgY2hhciAqaXRlbSA9IGF2X3N0cmR1cChzLT5maW5kX2xpc3RbaV0p OworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworCisgICAgICAgIGxlbiA9IGVuZCA9IHN0cmxlbihpdGVtKTsKKworICAgICAgICBzd2l0Y2gg KHMtPmNlbnNvcl9tb2RlKSB7CisgICAgICAgIGNhc2UgQ01fS0VFUF9GSVJTVF9MQVNUOgorCisg ICAgICAgICAgICBpZiAobGVuID4gMikKKyAgICAgICAgICAgICAgICBzdGFydCA9IDE7CisgICAg ICAgICAgICBpZiAobGVuID4gMykKKyAgICAgICAgICAgICAgICBlbmQtLTsKKworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01fS0VFUF9GSVJTVDoKKworICAgICAgICAgICAgaWYg KGxlbiA+IDIpCisgICAgICAgICAgICAgICAgc3RhcnQgPSAxOworCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IG4gPSBzdGFydDsgbiA8IGVuZDsg bisrKQorICAgICAgICAgICAgaXRlbVtuXSA9IHMtPmNlbnNvcl9jaGFyWzBdOworCisgICAgICAg IHMtPnJlcGxhY2VfbGlzdFtpXSA9IGl0ZW07CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgaW5pdF9zaG93c3BlYWtlcihBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAg ICBUZXh0TW9kQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBzLT5maWx0ZXJfdHlwZSA9IFRN X1NIT1dfU1BFQUtFUjsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXQoQVZG aWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgVGV4dE1vZENvbnRleHQgKnMgPSBjdHgtPnByaXY7 CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGxvYWRfZmlsZXMoY3R4KTsKKyAgICBpZiAocmV0 IDwgMCApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBzd2l0Y2ggKHMtPm9wZXJhdGlvbikg eworICAgIGNhc2UgT1BfUkVQTEFDRV9DSEFSUzoKKyAgICBjYXNlIE9QX1JFTU9WRV9DSEFSUzoK KyAgICBjYXNlIE9QX1JFUExBQ0VfV09SRFM6CisgICAgY2FzZSBPUF9SRU1PVkVfV09SRFM6Cisg ICAgICAgIGlmICghcy0+ZmluZCB8fCAhc3RybGVuKHMtPmZpbmQpKSB7CisgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJTZWxlY3RlZCBtb2RlIHJlcXVpcmVzIHRoZSAnZmlu ZCcgcGFyYW1ldGVyIHRvIGJlIHNwZWNpZmllZFxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3 aXRjaCAocy0+b3BlcmF0aW9uKSB7CisgICAgY2FzZSBPUF9SRVBMQUNFX0NIQVJTOgorICAgIGNh c2UgT1BfUkVQTEFDRV9XT1JEUzoKKyAgICAgICAgaWYgKCFzLT5yZXBsYWNlIHx8ICFzdHJsZW4o cy0+cmVwbGFjZSkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlNl bGVjdGVkIG1vZGUgcmVxdWlyZXMgdGhlICdyZXBsYWNlJyBwYXJhbWV0ZXIgdG8gYmUgc3BlY2lm aWVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHMtPm9wZXJhdGlvbiA9PSBPUF9SRVBM QUNFX0NIQVJTICYmIHN0cmxlbihzLT5maW5kKSAhPSBzdHJsZW4ocy0+cmVwbGFjZSkpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU2VsZWN0ZWQgbW9kZSByZXF1aXJlcyB0 aGUgJ2ZpbmQnIGFuZCAncmVwbGFjZScgcGFyYW1ldGVycyB0byBoYXZlIHRoZSBzYW1lIGxlbmd0 aFxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgaWYg KHMtPm9wZXJhdGlvbiA9PSBPUF9SRVBMQUNFX1dPUkRTIHx8IHMtPm9wZXJhdGlvbiA9PSBPUF9S RU1PVkVfV09SRFMpIHsKKyAgICAgICAgaWYgKCFzLT5zZXBhcmF0b3IgfHwgc3RybGVuKHMtPnNl cGFyYXRvcikgIT0gMSkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi U2VsZWN0ZWQgbW9kZSByZXF1aXJlcyBhIHNpbmdsZSBzZXBhcmF0b3IgY2hhciB0byBiZSBzcGVj aWZpZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAg fQorCisgICAgICAgIHMtPmZpbmRfbGlzdCA9IHNwbGl0X3N0cmluZyhzLT5maW5kLCAmcy0+bmJf ZmluZF9saXN0LCBzLT5zZXBhcmF0b3IpOworICAgICAgICBpZiAoIXMtPmZpbmRfbGlzdCkKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgaWYgKHMtPm9wZXJh dGlvbiA9PSBPUF9SRVBMQUNFX1dPUkRTKSB7CisKKyAgICAgICAgICAgIHMtPnJlcGxhY2VfbGlz dCA9IHNwbGl0X3N0cmluZyhzLT5yZXBsYWNlLCAmcy0+bmJfcmVwbGFjZV9saXN0LCBzLT5zZXBh cmF0b3IpOworICAgICAgICAgICAgaWYgKCFzLT5yZXBsYWNlX2xpc3QpCisgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAgICAgICAgaWYgKHMtPm5iX2ZpbmRf bGlzdCAhPSBzLT5uYl9yZXBsYWNlX2xpc3QpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJUaGUgbnVtYmVyIG9mIHdvcmRzIGluICdmaW5kJyBhbmQgJ3JlcGxh Y2UnIG5lZWRzIHRvIGJlIGVxdWFsXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAg ICBUZXh0TW9kQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcy0+bmJfZmluZF9saXN0OyBpKyspCisgICAgICAgIGF2X2ZyZWVwKCZzLT5maW5kX2xpc3Rb aV0pOworCisgICAgcy0+bmJfZmluZF9saXN0ID0gMDsKKyAgICBhdl9mcmVlcCgmcy0+ZmluZF9s aXN0KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+bmJfcmVwbGFjZV9saXN0OyBpKysp CisgICAgICAgIGF2X2ZyZWVwKCZzLT5yZXBsYWNlX2xpc3RbaV0pOworCisgICAgcy0+bmJfcmVw bGFjZV9saXN0ID0gMDsKKyAgICBhdl9mcmVlcCgmcy0+cmVwbGFjZV9saXN0KTsKK30KKworc3Rh dGljIGNoYXIgKnByb2Nlc3NfdGV4dChUZXh0TW9kQ29udGV4dCAqcywgY2hhciAqdGV4dCkKK3sK KyAgICBjb25zdCBjaGFyICpjaGFyX3NyYyA9IHMtPmZpbmQ7CisgICAgY29uc3QgY2hhciAqY2hh cl9kc3QgPSBzLT5yZXBsYWNlOworICAgIGNoYXIgKnJlc3VsdCAgICAgICAgID0gTlVMTDsKKyAg ICBpbnQgZXNjYXBlX2xldmVsICAgICA9IDAsIGsgPSAwOworCisgICAgc3dpdGNoIChzLT5vcGVy YXRpb24pIHsKKyAgICBjYXNlIE9QX0xFRVQ6CisgICAgY2FzZSBPUF9SRVBMQUNFX0NIQVJTOgor CisgICAgICAgIGlmIChzLT5vcGVyYXRpb24gPT0gT1BfTEVFVCkgeworICAgICAgICAgICAgY2hh cl9zcmMgPSBsZWV0X3NyYzsKKyAgICAgICAgICAgIGNoYXJfZHN0ID0gbGVldF9kc3Q7CisgICAg ICAgIH0KKworICAgICAgICByZXN1bHQgPSBhdl9zdHJkdXAodGV4dCk7CisgICAgICAgIGlmICgh cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZm9yIChzaXplX3Qg biA9IDA7IG4gPCBzdHJsZW4ocmVzdWx0KTsgbisrKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0 W25dID09ICd7JykKKyAgICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwrKzsKKworICAgICAgICAg ICAgaWYgKCFlc2NhcGVfbGV2ZWwpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc3Ry bGVuKGNoYXJfc3JjKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCB0ID0gMDsgdCA8IGxl bjsgdCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0gY2hhcl9zcmNb dF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuXSA9IGNoYXJfZHN0W3RdOwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZXN1bHRb bl0gPT0gJ30nKQorICAgICAgICAgICAgICAgIGVzY2FwZV9sZXZlbC0tOworICAgICAgICB9CisK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9UT19VUFBFUjoKKyAgICBjYXNlIE9QX1RPX0xP V0VSOgorCisgICAgICAgIHJlc3VsdCA9IGF2X3N0cmR1cCh0ZXh0KTsKKyAgICAgICAgaWYgKCFy ZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBmb3IgKHNpemVfdCBu ID0gMDsgbiA8IHN0cmxlbihyZXN1bHQpOyBuKyspIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHRb bl0gPT0gJ3snKQorICAgICAgICAgICAgICAgIGVzY2FwZV9sZXZlbCsrOworICAgICAgICAgICAg aWYgKCFlc2NhcGVfbGV2ZWwpCisgICAgICAgICAgICAgICAgcmVzdWx0W25dID0gcy0+b3BlcmF0 aW9uID09IE9QX1RPX0xPV0VSID8gYXZfdG9sb3dlcihyZXN1bHRbbl0pIDogYXZfdG91cHBlcihy ZXN1bHRbbl0pOworICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSAnfScpCisgICAgICAgICAg ICAgICAgZXNjYXBlX2xldmVsLS07CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICBj YXNlIE9QX1JFTU9WRV9DSEFSUzoKKworICAgICAgICByZXN1bHQgPSBhdl9zdHJkdXAodGV4dCk7 CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAg ICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBzdHJsZW4ocmVzdWx0KTsgbisrKSB7CisgICAgICAg ICAgICBpbnQgc2tpcF9jaGFyID0gMDsKKworICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSAn eycpCisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsKys7CisKKyAgICAgICAgICAgIGlmICgh ZXNjYXBlX2xldmVsKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihjaGFy X3NyYyk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgdCA9IDA7IHQgPCBsZW47IHQrKykg eworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W25dID09IGNoYXJfc3JjW3RdKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBza2lwX2NoYXIgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2tpcF9jaGFyKQorICAgICAgICAgICAg ICAgIHJlc3VsdFtrKytdID0gcmVzdWx0W25dOworCisgICAgICAgICAgICBpZiAocmVzdWx0W25d ID09ICd9JykKKyAgICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwtLTsKKyAgICAgICAgfQorCisg ICAgICAgIHJlc3VsdFtrXSA9IDA7CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9SRVBM QUNFX1dPUkRTOgorICAgIGNhc2UgT1BfUkVNT1ZFX1dPUkRTOgorCisgICAgICAgIHJlc3VsdCA9 IGF2X3N0cmR1cCh0ZXh0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1 cm4gTlVMTDsKKworICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IHMtPm5iX2ZpbmRfbGlzdDsg bisrKSB7CisgICAgICAgICAgICBjaGFyICp0bXAgICAgICAgICAgID0gcmVzdWx0OworICAgICAg ICAgICAgY29uc3QgY2hhciAqcmVwbGFjZSA9IChzLT5vcGVyYXRpb24gPT0gT1BfUkVQTEFDRV9X T1JEUykgPyBzLT5yZXBsYWNlX2xpc3Rbbl0gOiAiIjsKKworICAgICAgICAgICAgcmVzdWx0ID0g YXZfc3RyaXJlcGxhY2UocmVzdWx0LCBzLT5maW5kX2xpc3Rbbl0sIHJlcGxhY2UpOworICAgICAg ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAg ICAgICAgIGF2X2ZyZWUodG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0K KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjaGFyICpwcm9jZXNzX2RpYWxvZ19z aG93X3NwZWFrZXIoVGV4dE1vZENvbnRleHQgKnMsIGNoYXIgKmFzc19saW5lKQoreworICAgIEFT U0RpYWxvZyAqZGlhbG9nID0gYXZwcml2X2Fzc19zcGxpdF9kaWFsb2coTlVMTCwgYXNzX2xpbmUp OworICAgIGludCBlc2NhcGVfbGV2ZWwgPSAwOworICAgIHVuc2lnbmVkIHBvcyA9IDAsIGxlbjsK KyAgICBjaGFyICpyZXN1bHQsICp0ZXh0OworICAgIEFWQlByaW50IHBidWY7CisKKyAgICBpZiAo IWRpYWxvZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0ZXh0ID0gcHJvY2Vzc190ZXh0 KHMsIGRpYWxvZy0+dGV4dCk7CisgICAgaWYgKCF0ZXh0KQorICAgICAgICByZXR1cm4gTlVMTDsK KworICAgIGlmICghZGlhbG9nLT5uYW1lIHx8ICFzdHJsZW4oZGlhbG9nLT5uYW1lKSB8fCAhZGlh bG9nLT50ZXh0IHx8ICFzdHJsZW4oZGlhbG9nLT50ZXh0KSkKKyAgICAgICAgcmV0dXJuIGF2X3N0 cmR1cChhc3NfbGluZSk7CisKKyAgICAvLyBGaW5kIGluc2VydGlvbiBwb2ludCBpbiBjYXNlIHRo ZSBsaW5lIHN0YXJ0cyB3aXRoIHN0eWxlIGNvZGVzCisgICAgbGVuID0gKHVuc2lnbmVkKXN0cmxl bihkaWFsb2ctPnRleHQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykg eworCisgICAgICAgIGlmIChkaWFsb2ctPnRleHRbaV0gPT0gJ3snKQorICAgICAgICAgICAgZXNj YXBlX2xldmVsKys7CisKKyAgICAgICAgaWYgKGRpYWxvZy0+dGV4dFtpXSA9PSAnfScpCisgICAg ICAgICAgICBlc2NhcGVfbGV2ZWwtLTsKKworICAgICAgICBpZiAoZXNjYXBlX2xldmVsID09IDAp IHsKKyAgICAgICAgICAgIHBvcyA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgIH0KKworICAgIGlmIChzLT5zdHlsZSAmJiBzdHJsZW4ocy0+c3R5bGUpKQorICAgICAgICAv LyBXaGVuIGEgc3R5bGUgaXMgc3BlY2lmaWVkIHJlc2V0IHRoZSBpbnNlcnRpb24gcG9pbnQKKyAg ICAgICAgLy8gKGFsd2F5cyBhZGQgc3BlYWtlciBwbHVzIHN0eWxlIGF0IHRoZSBzdGFydCBpbiB0 aGF0IGNhc2UpCisgICAgICAgIHBvcyA9IDA7CisKKyAgICBpZiAocG9zID49IGxlbiAtIDEpCisg ICAgICAgIHJldHVybiBhdl9zdHJkdXAoYXNzX2xpbmUpOworCisgICAgYXZfYnByaW50X2luaXQo JnBidWYsIDEsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7CisKKyAgICBpZiAocG9zID4gMCkg eworICAgICAgICBhdl9icHJpbnRfYXBwZW5kX2RhdGEoJnBidWYsIGRpYWxvZy0+dGV4dCwgcG9z KTsKKyAgICB9CisKKyAgICBpZiAocy0+c3R5bGUgJiYgc3RybGVuKHMtPnN0eWxlKSkgeworICAg ICAgICBpZiAocy0+c3R5bGVbMF0gPT0gJ3snKQorICAgICAgICAgICAgLy8gQXNzdW1lIGNvbXBs ZXRlIGFuZCB2YWxpZCBzdHlsZSBjb2RlLCBlLmcuIHtcYyZIRkYwMDAwJn0KKyAgICAgICAgICAg IGF2X2JwcmludGYoJnBidWYsICIlcyIsIHMtPnN0eWxlKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgLy8gT3RoZXJ3aXNlIGl0IG11c3QgYmUgYSBzdHlsZSBuYW1lCisgICAgICAgICAgICBh dl9icHJpbnRmKCZwYnVmLCAie1xcciVzfSIsIHMtPnN0eWxlKTsKKyAgICB9CisKKyAgICBzd2l0 Y2ggKHMtPnNwZWFrZXJfbW9kZSkgeworICAgIGNhc2UgU01fU1FVQVJFX0JSQUNLRVRTOgorICAg ICAgICBhdl9icHJpbnRmKCZwYnVmLCAiWyVzXSIsIGRpYWxvZy0+bmFtZSk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgU01fUk9VTkRfQlJBQ0tFVFM6CisgICAgICAgIGF2X2JwcmludGYoJnBi dWYsICIoJXMpIiwgZGlhbG9nLT5uYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTTV9D T0xPTjoKKyAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIiVzOiIsIGRpYWxvZy0+bmFtZSk7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgU01fUExBSU46CisgICAgICAgIGF2X2JwcmludGYoJnBi dWYsICIlcyIsIGRpYWxvZy0+bmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlm IChzLT5zdHlsZSAmJiBzdHJsZW4ocy0+c3R5bGUpKSB7CisgICAgICAgIC8vIFJlc2V0IGxpbmUg c3R5bGUKKyAgICAgICAgaWYgKGRpYWxvZy0+c3R5bGUgJiYgc3RybGVuKGRpYWxvZy0+c3R5bGUp ICYmICFhdl9zdHJjYXNlY21wKGRpYWxvZy0+c3R5bGUsICJkZWZhdWx0IikpCisgICAgICAgICAg ICBhdl9icHJpbnRmKCZwYnVmLCAie1xcciVzfSIsIGRpYWxvZy0+c3R5bGUpOworICAgICAgICBl bHNlCisgICAgICAgICAgICBhdl9icHJpbnRmKCZwYnVmLCAie1xccn0iKTsKKyAgICB9CisKKyAg ICBpZiAocy0+bGluZV9icmVhaykKKyAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIlxcTiIpOwor ICAgIGVsc2UKKyAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIiAiKTsKKworICAgIGF2X2Jwcmlu dF9hcHBlbmRfZGF0YSgmcGJ1ZiwgZGlhbG9nLT50ZXh0ICsgcG9zLCBsZW4gLSBwb3MpOworCisg ICAgYXZfYnByaW50X2ZpbmFsaXplKCZwYnVmLCAmdGV4dCk7CisKKyAgICByZXN1bHQgPSBhdnBy aXZfYXNzX2dldF9kaWFsb2dfZXgoZGlhbG9nLT5yZWFkb3JkZXIsIGRpYWxvZy0+bGF5ZXIsIGRp YWxvZy0+c3R5bGUsIGRpYWxvZy0+bmFtZSwgZGlhbG9nLT5tYXJnaW5fbCwgZGlhbG9nLT5tYXJn aW5fciwgZGlhbG9nLT5tYXJnaW5fdiwgdGV4dCk7CisKKyAgICBhdl9mcmVlKHRleHQpOworICAg IGF2cHJpdl9hc3NfZnJlZV9kaWFsb2coJmRpYWxvZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K Kworc3RhdGljIGNoYXIgKnByb2Nlc3NfZGlhbG9nKFRleHRNb2RDb250ZXh0ICpzLCBjaGFyICph c3NfbGluZSkKK3sKKyAgICBBU1NEaWFsb2cgKmRpYWxvZzsKKyAgICBjaGFyICpyZXN1bHQsICp0 ZXh0OworCisgICAgaWYgKHMtPmZpbHRlcl90eXBlID09IFRNX1NIT1dfU1BFQUtFUikKKyAgICAg ICAgcmV0dXJuIHByb2Nlc3NfZGlhbG9nX3Nob3dfc3BlYWtlcihzLCBhc3NfbGluZSk7CisKKyAg ICBkaWFsb2cgPSBhdnByaXZfYXNzX3NwbGl0X2RpYWxvZyhOVUxMLCBhc3NfbGluZSk7CisgICAg aWYgKCFkaWFsb2cpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdGV4dCA9IHByb2Nlc3Nf dGV4dChzLCBkaWFsb2ctPnRleHQpOworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIE5V TEw7CisKKyAgICByZXN1bHQgPSBhdnByaXZfYXNzX2dldF9kaWFsb2dfZXgoZGlhbG9nLT5yZWFk b3JkZXIsIGRpYWxvZy0+bGF5ZXIsIGRpYWxvZy0+c3R5bGUsIGRpYWxvZy0+bmFtZSwgZGlhbG9n LT5tYXJnaW5fbCwgZGlhbG9nLT5tYXJnaW5fciwgZGlhbG9nLT5tYXJnaW5fdiwgdGV4dCk7CisK KyAgICBhdl9mcmVlKHRleHQpOworICAgIGF2cHJpdl9hc3NfZnJlZV9kaWFsb2coJmRpYWxvZyk7 CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBjb25maWdfb3V0cHV0KEFWRmls dGVyTGluayAqb3V0bGluaykKK3sKKyAgICBBVkZpbHRlckxpbmsgKmlubGluayA9IG91dGxpbmst PnNyYy0+aW5wdXRzWzBdOworCisgICAgb3V0bGluay0+dyA9IGlubGluay0+dzsKKyAgICBvdXRs aW5rLT5oID0gaW5saW5rLT5oOworICAgIG91dGxpbmstPnRpbWVfYmFzZSA9IGlubGluay0+dGlt ZV9iYXNlOworICAgIG91dGxpbmstPmZyYW1lX3JhdGUgPSBpbmxpbmstPmZyYW1lX3JhdGU7CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5r ICppbmxpbmssIEFWRnJhbWUgKmZyYW1lKQoreworICAgIFRleHRNb2RDb250ZXh0ICpzID0gaW5s aW5rLT5kc3QtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gaW5saW5rLT5kc3Qt Pm91dHB1dHNbMF07CisgICAgaW50IHJldDsKKworICAgIG91dGxpbmstPmZvcm1hdCA9IGlubGlu ay0+Zm9ybWF0OworCisgICAgcmV0ID0gYXZfZnJhbWVfbWFrZV93cml0YWJsZShmcmFtZSk7Cisg ICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgZnJhbWUtPm51bV9zdWJ0aXRsZV9hcmVhczsgaSsrKSB7CisKKyAgICAgICAg QVZTdWJ0aXRsZUFyZWEgKmFyZWEgPSBmcmFtZS0+c3VidGl0bGVfYXJlYXNbaV07CisKKyAgICAg ICAgaWYgKGFyZWEtPmFzcykgeworICAgICAgICAgICAgY2hhciAqdG1wID0gYXJlYS0+YXNzOwor ICAgICAgICAgICAgYXJlYS0+YXNzID0gcHJvY2Vzc19kaWFsb2cocywgYXJlYS0+YXNzKTsKKyAg ICAgICAgICAgIGF2X2ZyZWUodG1wKTsKKyAgICAgICAgICAgIGlmICghYXJlYS0+YXNzKQorICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0KKyAgICB9CisK KyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIGZyYW1lKTsKK30KKworI2RlZmlu ZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVGV4dE1vZENvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIChB Vl9PUFRfRkxBR19TVUJUSVRMRV9QQVJBTSB8IEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSkK Kworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHRleHRtb2Rfb3B0aW9uc1tdID0geworICAgIHsgIm1v ZGUiLCAgICAgICAgICAgICAic2V0IG9wZXJhdGlvbiBtb2RlIiwgICAgICAgICAgICAgIE9GRlNF VChvcGVyYXRpb24pLCAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PU9QX0xFRVR9LCAgICAg ICAgICBPUF9MRUVULCBOQl9PUFMtMSwgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAibGVldCIs ICAgICAgICAgICAiY29udmVydCB0ZXh0IHRvICdsZWV0IHNwZWFrJyIsICAgIDAsICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX0xFRVR9LCAgICAgICAgICAw LCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAidG9fdXBwZXIiLCAg ICAgICAiY2hhbmdlIHRvIHVwcGVyIGNhc2UiLCAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1RPX1VQUEVSfSwgICAgICAwLCAgICAg ICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAidG9fbG93ZXIiLCAgICAgICAi Y2hhbmdlIHRvIGxvd2VyIGNhc2UiLCAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBB Vl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1RPX0xPV0VSfSwgICAgICAwLCAgICAgICAwLCAg ICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAicmVwbGFjZV9jaGFycyIsICAicmVwbGFj ZSBjaGFyYWN0ZXJzIiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRf VFlQRV9DT05TVCwgIHsuaTY0PU9QX1JFUExBQ0VfQ0hBUlN9LCAwLCAgICAgICAwLCAgICAgICAg RkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAicmVtb3ZlX2NoYXJzIiwgICAicmVtb3ZlIGNoYXJh Y3RlcnMiLCAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9D T05TVCwgIHsuaTY0PU9QX1JFTU9WRV9DSEFSU30sICAwLCAgICAgICAwLCAgICAgICAgRkxBR1Ms ICJtb2RlIiB9LAorICAgIHsgICAicmVwbGFjZV93b3JkcyIsICAicmVwbGFjZSB3b3JkcyIsICAg ICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg IHsuaTY0PU9QX1JFUExBQ0VfV09SRFN9LCAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2Rl IiB9LAorICAgIHsgICAicmVtb3ZlX3dvcmRzIiwgICAicmVtb3ZlIHdvcmRzIiwgICAgICAgICAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0 PU9QX1JFTU9WRV9XT1JEU30sICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAor ICAgIHsgImZpbmQiLCAgICAgICAgICAgICAiY2hhcnMvd29yZHMgdG8gZmluZCBvciByZW1vdmUi LCAgIE9GRlNFVChmaW5kKSwgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVM TH0sICAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAorICAgIHsg ImZpbmRfZmlsZSIsICAgICAgICAibG9hZCBmaW5kIHBhcmFtIGZyb20gZmlsZSIsICAgICAgIE9G RlNFVChmaW5kX2ZpbGUpLCAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sICAg ICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgInJlcGxh Y2UiLCAgICAgICAgICAiY2hhcnMvd29yZHMgdG8gcmVwbGFjZSIsICAgICAgICAgIE9GRlNFVChy ZXBsYWNlKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sICAgICAgICAg ICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgInJlcGxhY2VfZmls ZSIsICAgICAibG9hZCByZXBsYWNlIHBhcmFtIGZyb20gZmlsZSIsICAgIE9GRlNFVChyZXBsYWNl X2ZpbGUpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sICAgICAgICAgICAwLCAg ICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgInNlcGFyYXRvciIsICAgICAg ICAid29yZCBzZXBhcmF0b3IiLCAgICAgICAgICAgICAgICAgIE9GRlNFVChzZXBhcmF0b3IpLCAg ICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gIiwifSwgICAgICAgICAgICAwLCAgICAgICAw LCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgTlVMTCB9LAorfTsKKworCitzdGF0aWMg Y29uc3QgQVZPcHRpb24gY2Vuc29yX29wdGlvbnNbXSA9IHsKKyAgICB7ICJtb2RlIiwgICAgICAg ICAgICAgICAic2V0IGNlbnNvcmluZyBtb2RlIiwgICAgICAgIE9GRlNFVChjZW5zb3JfbW9kZSks IEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9Q01fS0VFUF9GSVJTVF9MQVNUfSwgMCwgMiwgRkxB R1MsICJtb2RlIiB9LAorICAgIHsgICAia2VlcF9maXJzdF9sYXN0IiwgICJjZW5zb3IgaW5uZXIg Y2hhcnMiLCAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7 Lmk2ND1DTV9LRUVQX0ZJUlNUX0xBU1R9LCAwLCAwLCBGTEFHUywgIm1vZGUiIH0sCisgICAgeyAg ICJrZWVwX2ZpcnN0IiwgICAgICAgImNlbnNvciBhbGwgYnV0IGZpcnN0IGNoYXIiLCAwLCAgICAg ICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PUNNX0tFRVBfRklSU1R9LCAg ICAgIDAsIDAsIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgImFsbCIsICAgICAgICAgICAgICAi Y2Vuc29yIGFsbCBjaGFycyIsICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIEFWX09QVF9U WVBFX0NPTlNULCAgey5pNjQ9Q01fQUxMfSwgICAgICAgICAgICAgMCwgMCwgRkxBR1MsICJtb2Rl IiB9LAorICAgIHsgIndvcmRzIiwgICAgICAgICAgICAgICJsaXN0IG9mIHdvcmRzIHRvIGNlbnNv ciIsICAgT0ZGU0VUKGZpbmQpLCAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5V TEx9LCAgICAgICAgICAgICAwLCAwLCBGTEFHUywgTlVMTCAgIH0sCisgICAgeyAid29yZHNfZmls ZSIsICAgICAgICAgInBhdGggdG8gd29yZCBsaXN0IGZpbGUiLCAgICBPRkZTRVQoZmluZF9maWxl KSwgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sICAgICAgICAgICAgIDAsIDAs IEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJzZXBhcmF0b3IiLCAgICAgICAgICAid29yZCBzZXBh cmF0b3IiLCAgICAgICAgICAgIE9GRlNFVChzZXBhcmF0b3IpLCAgIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHIgPSAiLCJ9LCAgICAgICAgICAgICAgMCwgMCwgRkxBR1MsIE5VTEwgICB9LAorICAg IHsgImNlbnNvcl9jaGFyIiwgICAgICAgICJyZXBsYWNlbWVudCBjaGFyYWN0ZXIiLCAgICAgT0ZG U0VUKGNlbnNvcl9jaGFyKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9ICIqIn0sICAgICAg ICAgICAgICAwLCAwLCBGTEFHUywgTlVMTCAgIH0sCisgICAgeyBOVUxMIH0sCit9OworCitzdGF0 aWMgY29uc3QgQVZPcHRpb24gc2hvd3NwZWFrZXJfb3B0aW9uc1tdID0geworICAgIHsgImZvcm1h dCIsICAgICAgICAgICAgICJzcGVha2VyIG5hbWUgZm9ybWF0dGluZyIsICAgICAgICBPRkZTRVQo c3BlYWtlcl9tb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND1TTV9TUVVBUkVfQlJBQ0tF VFN9LCAwLCAyLCBGTEFHUywgImZvcm1hdCIgfSwKKyAgICB7ICAgInNxdWFyZV9icmFja2V0cyIs ICAiW3NwZWFrZXJdIHRleHQiLCAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg IEFWX09QVF9UWVBFX0NPTlNULCAgey5pNjQ9U01fU1FVQVJFX0JSQUNLRVRTfSwgMCwgMCwgRkxB R1MsICJmb3JtYXQiIH0sCisgICAgeyAgICJyb3VuZF9icmFja2V0cyIsICAgIihzcGVha2VyKSB0 ZXh0IiwgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9D T05TVCwgIHsuaTY0PVNNX1JPVU5EX0JSQUNLRVRTfSwgIDAsIDAsIEZMQUdTLCAiZm9ybWF0IiB9 LAorICAgIHsgICAiY29sb24iLCAgICAgICAgICAgICJzcGVha2VyOiB0ZXh0IiwgICAgICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1T TV9DT0xPTn0sICAgICAgICAgICAwLCAwLCBGTEFHUywgImZvcm1hdCIgfSwKKyAgICB7ICAgInBs YWluIiwgICAgICAgICAgICAic3BlYWtlciB0ZXh0IiwgICAgICAgICAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgey5pNjQ9U01fUExBSU59LCAgICAg ICAgICAgMCwgMCwgRkxBR1MsICJmb3JtYXQiIH0sCisgICAgeyAibGluZV9icmVhayIsICAgICAg ICAgImluc2VydCBsaW5lIGJyZWFrIiwgICAgICAgICAgICAgIE9GRlNFVChsaW5lX2JyZWFrKSwg ICBBVl9PUFRfVFlQRV9CT09MLCAgIHsuaTY0PTB9LCAgICAgICAgICAgICAgICAgIDAsIDEsIEZM QUdTLCBOVUxMICAgICB9LAorICAgIHsgInN0eWxlIiwgICAgICAgICAgICAgICJhc3MgdHlwZSBu YW1lIG9yIHN0eWxlIGNvZGUiLCAgICBPRkZTRVQoc3R5bGUpLCAgICAgICAgQVZfT1BUX1RZUEVf U1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgICAwLCAwLCBGTEFHUywgTlVMTCAgICAg fSwKKyAgICB7IE5VTEwgfSwKK307CisKK0FWRklMVEVSX0RFRklORV9DTEFTUyh0ZXh0bW9kKTsK K0FWRklMVEVSX0RFRklORV9DTEFTUyhjZW5zb3IpOworQVZGSUxURVJfREVGSU5FX0NMQVNTKHNo b3dzcGVha2VyKTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGlucHV0c1tdID0geworICAg IHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgICAg ICAgICA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRSwKKyAgICAgICAgLmZpbHRlcl9mcmFtZSA9IGZp bHRlcl9mcmFtZSwKKyAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIG91dHB1 dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgID0gImRlZmF1bHQiLAorICAg ICAgICAudHlwZSAgICAgICAgICA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRSwKKyAgICAgICAgLmNv bmZpZ19wcm9wcyAgPSBjb25maWdfb3V0cHV0LAorICAgIH0sCit9OworCitjb25zdCBBVkZpbHRl ciBmZl9zZl90ZXh0bW9kID0geworICAgIC5uYW1lICAgICAgICAgID0gInRleHRtb2QiLAorICAg IC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIk1vZGlmeSBzdWJ0aXRsZSB0 ZXh0IGluIHNldmVyYWwgd2F5cyIpLAorICAgIC5pbml0ICAgICAgICAgID0gaW5pdCwKKyAgICAu dW5pbml0ICAgICAgICA9IHVuaW5pdCwKKyAgICAucHJpdl9zaXplICAgICA9IHNpemVvZihUZXh0 TW9kQ29udGV4dCksCisgICAgLnByaXZfY2xhc3MgICAgPSAmdGV4dG1vZF9jbGFzcywKKyAgICBG SUxURVJfSU5QVVRTKGlucHV0cyksCisgICAgRklMVEVSX09VVFBVVFMob3V0cHV0cyksCisgICAg RklMVEVSX1NJTkdMRV9TVUJGTVQoQVZfU1VCVElUTEVfRk1UX0FTUyksCit9OworCitjb25zdCBB VkZpbHRlciBmZl9zZl9jZW5zb3IgPSB7CisgICAgLm5hbWUgICAgICAgICAgPSAiY2Vuc29yIiwK KyAgICAuZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJDZW5zb3Igd29yZHMg aW4gc3VidGl0bGUgdGV4dCIpLAorICAgIC5pbml0ICAgICAgICAgID0gaW5pdF9jZW5zb3IsCisg ICAgLnVuaW5pdCAgICAgICAgPSB1bmluaXQsCisgICAgLnByaXZfc2l6ZSAgICAgPSBzaXplb2Yo VGV4dE1vZENvbnRleHQpLAorICAgIC5wcml2X2NsYXNzICAgID0gJmNlbnNvcl9jbGFzcywKKyAg ICBGSUxURVJfSU5QVVRTKGlucHV0cyksCisgICAgRklMVEVSX09VVFBVVFMob3V0cHV0cyksCisg ICAgRklMVEVSX1NJTkdMRV9TVUJGTVQoQVZfU1VCVElUTEVfRk1UX0FTUyksCit9OworCitjb25z dCBBVkZpbHRlciBmZl9zZl9zaG93c3BlYWtlciA9IHsKKyAgICAubmFtZSAgICAgICAgICA9ICJz aG93c3BlYWtlciIsCisgICAgLmRlc2NyaXB0aW9uICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgi UHJlcGVuZCBzcGVha2VyIG5hbWVzIHRvIHRleHQgc3VidGl0bGVzICh3aGVuIGF2YWlsYWJsZSki KSwKKyAgICAuaW5pdCAgICAgICAgICA9IGluaXRfc2hvd3NwZWFrZXIsCisgICAgLnVuaW5pdCAg ICAgICAgPSB1bmluaXQsCisgICAgLnByaXZfc2l6ZSAgICAgPSBzaXplb2YoVGV4dE1vZENvbnRl eHQpLAorICAgIC5wcml2X2NsYXNzICAgID0gJnNob3dzcGVha2VyX2NsYXNzLAorICAgIEZJTFRF Ul9JTlBVVFMoaW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhvdXRwdXRzKSwKKyAgICBGSUxU RVJfU0lOR0xFX1NVQkZNVChBVl9TVUJUSVRMRV9GTVRfQVNTKSwKK307Ci0tIApmZm1wZWctY29k ZWJvdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZt cGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2Zm bXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2 aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3Jn IHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=