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 AD55247F4D for ; Mon, 6 Nov 2023 17:20:29 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EFA5468CAB3; Mon, 6 Nov 2023 19:20:26 +0200 (EET) Received: from mail-vk1-f174.google.com (mail-vk1-f174.google.com [209.85.221.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 06A4C68C2B7 for ; Mon, 6 Nov 2023 19:20:20 +0200 (EET) Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-4ac4cd60370so472137e0c.3 for ; Mon, 06 Nov 2023 09:20:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699291219; x=1699896019; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5HJp+g7vHvIuEwnUAbBclnclfuBjVWV4bGadh9wO9r4=; b=S66uT1iWPa6fRKQMH99cLsKDaXKq4rrvTCQ/v+E/CgcruSdn3910ZOZXNOAPNZINHY R8m9dC5Ni5IG6bv6EqR/k2j7UxgNe0zo1ulasUKpR/2Kpe1W9xzudgauUeRQ0xXfTsNu lplLDSzOK0PamQngRrXtt2ZuTQTOt5faZ2p2L3UWX31gkJ8ftVurWYq0c+JUgKiCHOHB g16lOXayIbOfK4WT7twMwPnV6rjF7Bipi0cgOhLMNeMDQHdkb9IXqQHWxACp5m01Fh1d F3frZ6VI9AZN0kbygFYyj8FQpPGmQu6EQWLgmz2vSiBoMuMs9F+f0Xg483OJDqcDjUSV f7qA== X-Gm-Message-State: AOJu0YwrNJk9OmDHb8q8qK7YIAplDLQAgIF3bd1MVwy3RrfICDhjoKW5 AeQWLdmyV3+yYqycLh8rmAHLyaK8AF92Mg== X-Google-Smtp-Source: AGHT+IGk5hnPfOy/6YwSnhlU/434DMb01Bg4bbH1IiSKGVWSnMUD6UyV+Zm44ZEZG6/UspeAQ/+PEg== X-Received: by 2002:a1f:9d11:0:b0:49a:36e4:5565 with SMTP id g17-20020a1f9d11000000b0049a36e45565mr23621417vke.16.1699291219205; Mon, 06 Nov 2023 09:20:19 -0800 (PST) Received: from mail-vk1-f177.google.com (mail-vk1-f177.google.com. [209.85.221.177]) by smtp.gmail.com with ESMTPSA id e9-20020a1f1e09000000b004a8e99b9f45sm1639626vke.45.2023.11.06.09.20.18 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 06 Nov 2023 09:20:18 -0800 (PST) Received: by mail-vk1-f177.google.com with SMTP id 71dfb90a1353d-4ac05ca3935so933527e0c.1 for ; Mon, 06 Nov 2023 09:20:18 -0800 (PST) X-Received: by 2002:a67:c20e:0:b0:45d:a69d:fe2e with SMTP id i14-20020a67c20e000000b0045da69dfe2emr7960561vsj.27.1699291218501; Mon, 06 Nov 2023 09:20:18 -0800 (PST) MIME-Version: 1.0 References: <01dd330f-2281-4107-92b5-bbe0a293c8dd@nativewaves.com> In-Reply-To: <01dd330f-2281-4107-92b5-bbe0a293c8dd@nativewaves.com> From: Tristan Matthews Date: Mon, 6 Nov 2023 12:20:07 -0500 X-Gmail-Original-Message-ID: Message-ID: To: michael.riedl@nativewaves.com Subject: Re: [FFmpeg-devel] [PATCH 4/6] libavformat/webrtc: add common code for WebRTC streaming X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: ffmpeg-devel@ffmpeg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gTW9uLCBOb3YgNiwgMjAyMyBhdCAxMDoyMOKAr0FNIE1pY2hhZWwgUmllZGwKPG1pY2hhZWwu cmllZGxAbmF0aXZld2F2ZXMuY29tPiB3cm90ZToKPgo+IFNpZ25lZC1vZmYtYnk6IE1pY2hhZWwg UmllZGwgPG1pY2hhZWwucmllZGxAbmF0aXZld2F2ZXMuY29tPgo+IC0tLQo+ICBsaWJhdmZvcm1h dC93ZWJydGMuYyB8IDM5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIGxpYmF2Zm9ybWF0L3dlYnJ0Yy5oIHwgIDcwICsrKysrKysrCj4gIDIgZmlsZXMgY2hh bmdlZCwgNDY4IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0 L3dlYnJ0Yy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC93ZWJydGMuaAo+Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3dlYnJ0Yy5jIGIvbGliYXZmb3JtYXQvd2VicnRjLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwLi43NTg4NGVhYzQ2Zgo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZvcm1hdC93ZWJydGMuYwo+IEBAIC0wLDAgKzEs Mzk4IEBACj4gKy8qCj4gKyAqIFdlYlJUQy1IVFRQIGluZ2VzdGlvbi9lZ3Jlc3MgcHJvdG9jb2wg KFdISVAvV0hFUCkgY29tbW9uIGNvZGUKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIzIE5h dGl2ZVdhdmVzIEdtYkggPGNvbnRhY3RAbmF0aXZld2F2ZXMuY29tPgo+ICsgKiBUaGlzIHdvcmsg aXMgc3VwcG9ydGVkIGJ5IEZGRyBwcm9qZWN0IDQ3MTY4NzYzLgo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKPiArICogSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRp bC9vcHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC91dWlkLmgiCj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvcmFuZG9tX3NlZWQuaCIKPiArI2luY2x1ZGUgInJ0cGVuY19jaGFpbi5oIgo+ICsjaW5j bHVkZSAicnRzcC5oIgo+ICsjaW5jbHVkZSAid2VicnRjLmgiCj4gKwo+ICtzdGF0aWMgY29uc3Qg Y2hhciogd2VicnRjX2dldF9zdGF0ZV9uYW1lKGNvbnN0IHJ0Y1N0YXRlIHN0YXRlKQo+ICt7Cj4g KyAgICBzd2l0Y2ggKHN0YXRlKQo+ICsgICAgewo+ICsgICAgICAgIGNhc2UgUlRDX05FVzoKPiAr ICAgICAgICAgICAgcmV0dXJuICJSVENfTkVXIjsKPiArICAgICAgICBjYXNlIFJUQ19DT05ORUNU SU5HOgo+ICsgICAgICAgICAgICByZXR1cm4gIlJUQ19DT05ORUNUSU5HIjsKPiArICAgICAgICBj YXNlIFJUQ19DT05ORUNURUQ6Cj4gKyAgICAgICAgICAgIHJldHVybiAiUlRDX0NPTk5FQ1RFRCI7 Cj4gKyAgICAgICAgY2FzZSBSVENfRElTQ09OTkVDVEVEOgo+ICsgICAgICAgICAgICByZXR1cm4g IlJUQ19ESVNDT05ORUNURUQiOwo+ICsgICAgICAgIGNhc2UgUlRDX0ZBSUxFRDoKPiArICAgICAg ICAgICAgcmV0dXJuICJSVENfRkFJTEVEIjsKPiArICAgICAgICBjYXNlIFJUQ19DTE9TRUQ6Cj4g KyAgICAgICAgICAgIHJldHVybiAiUlRDX0NMT1NFRCI7Cj4gKyAgICAgICAgZGVmYXVsdDoKPiAr ICAgICAgICAgICAgcmV0dXJuICJVTktOT1dOIjsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgd2VicnRjX2xvZyhjb25zdCBydGNMb2dMZXZlbCBydGNMZXZlbCwgY29uc3QgY2hhciAq Y29uc3QgbWVzc2FnZSkKPiArewo+ICsgICAgaW50IGxldmVsID0gQVZfTE9HX1ZFUkJPU0U7Cj4g KyAgICBzd2l0Y2ggKHJ0Y0xldmVsKQo+ICsgICAgewo+ICsgICAgICAgIGNhc2UgUlRDX0xPR19O T05FOgo+ICsgICAgICAgICAgICBsZXZlbCA9IEFWX0xPR19RVUlFVDsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgY2FzZSBSVENfTE9HX0RFQlVHOgo+ICsgICAgICAgIGNhc2UgUlRD X0xPR19WRVJCT1NFOgo+ICsgICAgICAgICAgICBsZXZlbCA9IEFWX0xPR19ERUJVRzsKPiArICAg ICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBSVENfTE9HX0lORk86Cj4gKyAgICAgICAg ICAgIGxldmVsID0gQVZfTE9HX1ZFUkJPU0U7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIGNhc2UgUlRDX0xPR19XQVJOSU5HOgo+ICsgICAgICAgICAgICBsZXZlbCA9IEFWX0xPR19X QVJOSU5HOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIFJUQ19MT0dfRVJS T1I6Cj4gKyAgICAgICAgICAgIGxldmVsID0gQVZfTE9HX0VSUk9SOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICBjYXNlIFJUQ19MT0dfRkFUQUw6Cj4gKyAgICAgICAgICAgIGxldmVs ID0gQVZfTE9HX0ZBVEFMOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAg ICBhdl9sb2coTlVMTCwgbGV2ZWwsICJbbGliZGF0YWNoYW5uZWxdICVzXG4iLCBtZXNzYWdlKTsK PiArfQo+ICsKPiArdm9pZCB3ZWJydGNfaW5pdF9sb2dnZXIodm9pZCkKPiArewo+ICsgICAgcnRj TG9nTGV2ZWwgbGV2ZWwgPSBSVENfTE9HX1ZFUkJPU0U7Cj4gKyAgICBzd2l0Y2ggKGF2X2xvZ19n ZXRfbGV2ZWwoKSkKPiArICAgIHsKPiArICAgICAgICBjYXNlIEFWX0xPR19RVUlFVDoKPiArICAg ICAgICAgICAgbGV2ZWwgPSBSVENfTE9HX05PTkU7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsg ICAgICAgIGNhc2UgQVZfTE9HX0RFQlVHOgo+ICsgICAgICAgICAgICBsZXZlbCA9IFJUQ19MT0df REVCVUc7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgQVZfTE9HX1ZFUkJP U0U6Cj4gKyAgICAgICAgICAgIGxldmVsID0gUlRDX0xPR19WRVJCT1NFOwo+ICsgICAgICAgICAg ICBicmVhazsKPiArICAgICAgICBjYXNlIEFWX0xPR19XQVJOSU5HOgo+ICsgICAgICAgICAgICBs ZXZlbCA9IFJUQ19MT0dfV0FSTklORzsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg Y2FzZSBBVl9MT0dfRVJST1I6Cj4gKyAgICAgICAgICAgIGxldmVsID0gUlRDX0xPR19FUlJPUjsK PiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBBVl9MT0dfRkFUQUw6Cj4gKyAg ICAgICAgICAgIGxldmVsID0gUlRDX0xPR19GQVRBTDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICB9Cj4gKwo+ICsgICAgcnRjSW5pdExvZ2dlcihsZXZlbCwgd2VicnRjX2xvZyk7Cj4gK30K PiArCj4gK2ludCB3ZWJydGNfZ2VuZXJhdGVfbWVkaWFfc3RyZWFtX2lkKGNoYXIgbWVkaWFfc3Ry ZWFtX2lkWzM3XSkKPiArewo+ICsgICAgaW50IHJldDsKPiArICAgIEFWVVVJRCB1dWlkOwo+ICsK PiArICAgIHJldCA9IGF2X3JhbmRvbV9ieXRlcyh1dWlkLCBzaXplb2YodXVpZCkpOwo+ICsgICAg aWYgKHJldCA8IDApIHsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKyAgICBhdl91 dWlkX3VucGFyc2UodXVpZCwgbWVkaWFfc3RyZWFtX2lkKTsKPiArICAgIHJldHVybiAwOwo+ICsK PiArZmFpbDoKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB3ZWJydGNfY3JlYXRl X3Jlc291cmNlKERhdGFDaGFubmVsQ29udGV4dCpjb25zdCBjdHgpCj4gK3sKPiArICAgIGludCBy ZXQ7Cj4gKyAgICBVUkxDb250ZXh0KiBoID0gTlVMTDsKPiArICAgIGNoYXIqIGhlYWRlcnM7Cj4g KyAgICBjaGFyIG9mZmVyX3NkcFtTRFBfTUFYX1NJWkVdID0geyAwIH07Cj4gKyAgICBjaGFyIHJl c3BvbnNlX3NkcFtTRFBfTUFYX1NJWkVdID0geyAwIH07Cj4gKwo+ICsgICAgLyogc2V0IGxvY2Fs IGRlc2NyaXB0aW9uICovCj4gKyAgICBpZiAocnRjU2V0TG9jYWxEZXNjcmlwdGlvbihjdHgtPnBl ZXJfY29ubmVjdGlvbiwgIm9mZmVyIikgIT0gUlRDX0VSUl9TVUNDRVNTKSB7Cj4gKyAgICAgICAg YXZfbG9nKGN0eC0+YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgbG9jYWwgZGVz Y3JpcHRpb25cbiIpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICAg ICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIGNyZWF0ZSBvZmZlciAqLwo+ICsg ICAgcmV0ID0gcnRjR2V0TG9jYWxEZXNjcmlwdGlvbihjdHgtPnBlZXJfY29ubmVjdGlvbiwgb2Zm ZXJfc2RwLCBzaXplb2Yob2ZmZXJfc2RwKSk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAg ICAgIGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IGxvY2Fs IGRlc2NyaXB0aW9uXG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOwo+ICsg ICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArICAgIGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIm9mZmVyX3NkcDogJXNcbiIsIG9mZmVyX3NkcCk7Cj4gKwo+ICsgICAgLyog YWxsb2MgdGhlIGh0dHAgY29udGV4dCAqLwo+ICsgICAgaWYgKChyZXQgPSBmZnVybF9hbGxvYygm aCwgY3R4LT5hdmN0eC0+dXJsLCBBVklPX0ZMQUdfUkVBRF9XUklURSwgTlVMTCkpIDwgMCkgewo+ ICsgICAgICAgIGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJmZnVybF9hbGxvYyBm YWlsZWRcbiIpOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gKyAgICAvKiBz ZXQgb3B0aW9ucyAqLwo+ICsgICAgaGVhZGVycyA9IGF2X2FzcHJpbnRmKCJDb250ZW50LXR5cGU6 IGFwcGxpY2F0aW9uL3NkcFxyXG4iKTsKPiArICAgIGlmIChjdHgtPmJlYXJlcl90b2tlbikgewo+ ICsgICAgICAgIGhlYWRlcnMgPSBhdl9hc3ByaW50ZigiJXNBdXRob3JpemF0aW9uOiBCZWFyZXIg JXNcclxuIiwgaGVhZGVycywgY3R4LT5iZWFyZXJfdG9rZW4pOwoKU2hvdWxkIGNoZWNrIHRoYXQg ImhlYWRlcnMiIGlzIG5vbi1OVUxMIChpLmUuIHRoYXQgd2UncmUgbm90IG91dCBvZiBtZW1vcnkp Cgo+ICsgICAgfQo+ICsgICAgYXZfbG9nKGN0eC0+YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiaGVh ZGVyczogJXNcbiIsIGhlYWRlcnMpOwo+ICsgICAgYXZfb3B0X3NldChoLT5wcml2X2RhdGEsICJo ZWFkZXJzIiwgaGVhZGVycywgMCk7Cj4gKyAgICBhdl9vcHRfc2V0KGgtPnByaXZfZGF0YSwgIm1l dGhvZCIsICJQT1NUIiwgMCk7Cj4gKyAgICBhdl9vcHRfc2V0X2JpbihoLT5wcml2X2RhdGEsICJw b3N0X2RhdGEiLCAodWludDhfdCopb2ZmZXJfc2RwLCBzdHJsZW4ob2ZmZXJfc2RwKSwgMCk7Cj4g Kwo+ICsgICAgLyogb3BlbiB0aGUgaHR0cCBjb250ZXh0ICovCj4gKyAgICBpZiAoKHJldCA9IGZm dXJsX2Nvbm5lY3QoaCwgTlVMTCkpIDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgtPmF2Y3R4 LCBBVl9MT0dfRVJST1IsICJmZnVybF9jb25uZWN0IGZhaWxlZFxuIik7Cj4gKyAgICAgICAgZ290 byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIHJlYWQgdGhlIHNlcnZlciByZXBseSAqLwo+ ICsgICAgcmV0ID0gZmZ1cmxfcmVhZF9jb21wbGV0ZShoLCAodW5zaWduZWQgY2hhciopcmVzcG9u c2Vfc2RwLCBzaXplb2YocmVzcG9uc2Vfc2RwKSk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsg ICAgICAgIGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJmZnVybF9yZWFkX2NvbXBs ZXRlIGZhaWxlZFxuIik7Cj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAg IGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgInJlc3BvbnNlOiAlc1xuIiwgcmVz cG9uc2Vfc2RwKTsKPiArCj4gKyAgICAvKiBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uICovCj4gKyAg ICByZXQgPSBydGNTZXRSZW1vdGVEZXNjcmlwdGlvbihjdHgtPnBlZXJfY29ubmVjdGlvbiwgcmVz cG9uc2Vfc2RwLCAiYW5zd2VyIik7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2 X2xvZyhjdHgtPmF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNj cmlwdGlvblxuIik7Cj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIC8q IHNhdmUgcmVzb3VyY2UgbG9jYXRpb24gZm9yIGxhdGVyIHVzZSAqLwo+ICsgICAgYXZfb3B0X2dl dChoLT5wcml2X2RhdGEsICJuZXdfbG9jYXRpb24iLCBBVl9PUFRfU0VBUkNIX0NISUxEUkVOLCAo dWludDhfdCoqKSZjdHgtPnJlc291cmNlX2xvY2F0aW9uKTsKPiArICAgIGF2X2xvZyhjdHgtPmF2 Y3R4LCBBVl9MT0dfVkVSQk9TRSwgInJlc291cmNlX2xvY2F0aW9uOiAlc1xuIiwgY3R4LT5yZXNv dXJjZV9sb2NhdGlvbik7Cj4gKwo+ICsgICAgLyogY2xvc2UgdGhlIGh0dHAgY29udGV4dCAqLwo+ ICsgICAgaWYgKChyZXQgPSBmZnVybF9jbG9zZXAoJmgpKSA8IDApIHsKPiArICAgICAgICBhdl9s b2coY3R4LT5hdmN0eCwgQVZfTE9HX0VSUk9SLCAiZmZ1cmxfY2xvc2VwIGZhaWxlZFxuIik7Cj4g KyAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2ZyZWVwKCZoZWFkZXJz KTsKPiArICAgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArICAgIGlmIChoKSB7Cj4gKyAgICAg ICAgZmZ1cmxfY2xvc2VwKCZoKTsKPiArICAgIH0KPiArICAgIGF2X2ZyZWVwKCZoZWFkZXJzKTsK PiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB3ZWJydGNfY2xvc2VfcmVzb3VyY2Uo RGF0YUNoYW5uZWxDb250ZXh0KmNvbnN0IGN0eCkKPiArewo+ICsgICAgaW50IHJldDsKPiArICAg IFVSTENvbnRleHQqIGggPSBOVUxMOwo+ICsgICAgY2hhciogaGVhZGVycyA9IE5VTEw7Cj4gKwo+ ICsgICAgaWYgKCFjdHgtPnJlc291cmNlX2xvY2F0aW9uKSB7Cj4gKyAgICAgICAgcmV0dXJuIDA7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogYWxsb2MgdGhlIGh0dHAgY29udGV4dCAqLwo+ICsgICAg aWYgKChyZXQgPSBmZnVybF9hbGxvYygmaCwgY3R4LT5yZXNvdXJjZV9sb2NhdGlvbiwgQVZJT19G TEFHX1JFQURfV1JJVEUsIE5VTEwpKSA8IDApIHsKPiArICAgICAgICBhdl9sb2coY3R4LT5hdmN0 eCwgQVZfTE9HX0VSUk9SLCAiZmZ1cmxfYWxsb2MgZmFpbGVkXG4iKTsKPiArICAgICAgICBnb3Rv IGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogc2V0IG9wdGlvbnMgKi8KPiArICAgIGlmIChj dHgtPmJlYXJlcl90b2tlbikgewo+ICsgICAgICAgIGhlYWRlcnMgPSBhdl9hc3ByaW50ZigiQXV0 aG9yaXphdGlvbjogQmVhcmVyICVzXHJcbiIsIGN0eC0+YmVhcmVyX3Rva2VuKTsKClNob3VsZCBj aGVjayB0aGF0ICJoZWFkZXJzIiBpcyBub24tTlVMTCAoaS5lLiB0aGF0IHdlJ3JlIG5vdCBvdXQg b2YgbWVtb3J5KQoKPiArICAgICAgICBhdl9sb2coY3R4LT5hdmN0eCwgQVZfTE9HX1ZFUkJPU0Us ICJoZWFkZXJzOiAlc1xuIiwgaGVhZGVycyk7Cj4gKyAgICB9Cj4gKyAgICBhdl9vcHRfc2V0KGgt PnByaXZfZGF0YSwgIm1ldGhvZCIsICJERUxFVEUiLCAwKTsKPiArCj4gKyAgICAvKiBvcGVuIHRo ZSBodHRwIGNvbnRleHQgKi8KPiArICAgIGlmICgocmV0ID0gZmZ1cmxfY29ubmVjdChoLCBOVUxM KSkgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eC0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImZm dXJsX2Nvbm5lY3QgZmFpbGVkXG4iKTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgLyogY2xvc2UgdGhlIGh0dHAgY29udGV4dCAqLwo+ICsgICAgaWYgKChyZXQgPSBm ZnVybF9jbG9zZXAoJmgpKSA8IDApIHsKPiArICAgICAgICBhdl9sb2coY3R4LT5hdmN0eCwgQVZf TE9HX0VSUk9SLCAiZmZ1cmxfY2xvc2UgZmFpbGVkXG4iKTsKPiArICAgICAgICBnb3RvIGZhaWw7 Cj4gKyAgICB9Cj4gKwo+ICtmYWlsOgo+ICsgICAgaWYgKGgpIHsKPiArICAgICAgICBmZnVybF9j bG9zZXAoJmgpOwo+ICsgICAgfQo+ICsgICAgYXZfZnJlZXAoJmN0eC0+cmVzb3VyY2VfbG9jYXRp b24pOwo+ICsgICAgYXZfZnJlZXAoJmhlYWRlcnMpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyogY2FsbGJhY2sgZm9yIHJlY2VpdmluZyBkYXRhICovCj4gK3N0YXRpYyBpbnQgd2Vi cnRjX3JlYWQoVVJMQ29udGV4dCAqaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKPiAr ewo+ICsgICAgY29uc3QgRGF0YUNoYW5uZWxUcmFjaypjb25zdCBjdHggPSAoY29uc3QgRGF0YUNo YW5uZWxUcmFjaypjb25zdCloLT5wcml2X2RhdGE7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAg IHJldCA9IHJ0Y1JlY2VpdmVNZXNzYWdlKGN0eC0+dHJhY2tfaWQsIChjaGFyKilidWYsICZzaXpl KTsKPiArICAgIGlmIChyZXQgPT0gUlRDX0VSUl9OT1RfQVZBSUwpIHsKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUihFQUdBSU4pOwo+ICsgICAgfQo+ICsgICAgZWxzZSBpZiAocmV0ID09IFJUQ19F UlJfVE9PX1NNQUxMKSB7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfQlVGRkVSX1RPT19TTUFM TDsKPiArICAgIH0KPiArICAgIGVsc2UgaWYgKHJldCAhPSBSVENfRVJSX1NVQ0NFU1MpIHsKPiAr ICAgICAgICBhdl9sb2coY3R4LT5hdmN0eCwgQVZfTE9HX0VSUk9SLCAicnRjUmVjZWl2ZU1lc3Nh Z2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4g KyAgICB9Cj4gKyAgICByZXR1cm4gc2l6ZTsKPiArfQo+ICsKPiArLyogY2FsbGJhY2sgZm9yIHNl bmRpbmcgZGF0YSAqLwo+ICtzdGF0aWMgaW50IHdlYnJ0Y193cml0ZShVUkxDb250ZXh0ICpoLCBj b25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzaXplKQo+ICt7Cj4gKyAgICBjb25zdCBEYXRh Q2hhbm5lbFRyYWNrKmNvbnN0IGN0eCA9IChjb25zdCBEYXRhQ2hhbm5lbFRyYWNrKmNvbnN0KWgt PnByaXZfZGF0YTsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0gcnRjU2VuZE1lc3Nh Z2UoY3R4LT50cmFja19pZCwgKGNvbnN0IGNoYXIqKWJ1Ziwgc2l6ZSk7Cj4gKyAgICBpZiAocmV0 ICE9IFJUQ19FUlJfU1VDQ0VTUykgewo+ICsgICAgICAgIGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9M T0dfRVJST1IsICJydGNTZW5kTWVzc2FnZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIHNpemU7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBVUkxQcm90b2NvbCBmZl93ZWJydGNfcHJvdG9jb2wgPSB7 Cj4gKyAgICAubmFtZSAgICAgICAgICAgID0gIndlYnJ0YyIsCj4gKyAgICAudXJsX3JlYWQgICAg ICAgID0gd2VicnRjX3JlYWQsCj4gKyAgICAudXJsX3dyaXRlICAgICAgID0gd2VicnRjX3dyaXRl LAo+ICt9Owo+ICsKPiAraW50IHdlYnJ0Y19pbml0X3VybGNvbnRleHQoRGF0YUNoYW5uZWxDb250 ZXh0KmNvbnN0IGN0eCwgaW50IHRyYWNrX2lkeCkKPiArewo+ICsgICAgRGF0YUNoYW5uZWxUcmFj aypjb25zdCB0cmFjayA9ICZjdHgtPnRyYWNrc1t0cmFja19pZHhdOwo+ICsKPiArICAgIHRyYWNr LT5ydHBfdXJsX2NvbnRleHQgPSBhdl9tYWxsb2N6KHNpemVvZihVUkxDb250ZXh0KSk7Cj4gKyAg ICBpZiAoIXRyYWNrLT5ydHBfdXJsX2NvbnRleHQpIHsKPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIHRyYWNrLT5ydHBfdXJsX2NvbnRleHQtPnBy b3QgPSAmZmZfd2VicnRjX3Byb3RvY29sOwo+ICsgICAgdHJhY2stPnJ0cF91cmxfY29udGV4dC0+ cHJpdl9kYXRhID0gdHJhY2s7Cj4gKyAgICB0cmFjay0+cnRwX3VybF9jb250ZXh0LT5tYXhfcGFj a2V0X3NpemUgPSBSVFBfTUFYX1BBQ0tFVF9TSVpFOwo+ICsgICAgdHJhY2stPnJ0cF91cmxfY29u dGV4dC0+ZmxhZ3MgPSBBVklPX0ZMQUdfUkVBRF9XUklURTsKPiArICAgIHRyYWNrLT5ydHBfdXJs X2NvbnRleHQtPnJ3X3RpbWVvdXQgPSBjdHgtPnJ3X3RpbWVvdXQ7Cj4gKyAgICByZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgd2VicnRjX29uX3N0YXRlX2NoYW5nZShpbnQgcGMsIHJ0 Y1N0YXRlIHN0YXRlLCB2b2lkKiBwdHIpCj4gK3sKPiArICAgIERhdGFDaGFubmVsQ29udGV4dCpj b25zdCBjdHggPSAoRGF0YUNoYW5uZWxDb250ZXh0KmNvbnN0KXB0cjsKPiArCj4gKyAgICBhdl9s b2coY3R4LT5hdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJDb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQg ZnJvbSAlcyB0byAlc1xuIiwgd2VicnRjX2dldF9zdGF0ZV9uYW1lKGN0eC0+c3RhdGUpLCB3ZWJy dGNfZ2V0X3N0YXRlX25hbWUoc3RhdGUpKTsKPiArICAgIGN0eC0+c3RhdGUgPSBzdGF0ZTsKPiAr fQo+ICsKPiAraW50IHdlYnJ0Y19pbml0X2Nvbm5lY3Rpb24oRGF0YUNoYW5uZWxDb250ZXh0ICpj b25zdCBjdHgpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBydGNDb25maWd1cmF0aW9uIGNv bmZpZyA9IHsgMCB9Owo+ICsKPiArICAgIGlmICghKGN0eC0+cGVlcl9jb25uZWN0aW9uID0gcnRj Q3JlYXRlUGVlckNvbm5lY3Rpb24oJmNvbmZpZykpKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eC0+ YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgUGVlckNvbm5lY3Rpb25cbiIp Owo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAg IHJ0Y1NldFVzZXJQb2ludGVyKGN0eC0+cGVlcl9jb25uZWN0aW9uLCBjdHgpOwo+ICsKPiArICAg IGlmIChydGNTZXRTdGF0ZUNoYW5nZUNhbGxiYWNrKGN0eC0+cGVlcl9jb25uZWN0aW9uLCB3ZWJy dGNfb25fc3RhdGVfY2hhbmdlKSkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgtPmF2Y3R4LCBBVl9M T0dfRVJST1IsICJGYWlsZWQgdG8gc2V0IHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuIik7Cj4gKyAg ICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICsgICAgcnRjRGVsZXRlUGVl ckNvbm5lY3Rpb24oY3R4LT5wZWVyX2Nvbm5lY3Rpb24pOwo+ICsgICAgcmV0dXJuIHJldDsKPiAr fQo+ICsKPiAraW50IHdlYnJ0Y19jb252ZXJ0X2NvZGVjKGVudW0gQVZDb2RlY0lEIGNvZGVjX2lk LCBydGNDb2RlYyogcnRjX2NvZGVjKQo+ICt7Cj4gKyAgICBzd2l0Y2ggKGNvZGVjX2lkKQo+ICsg ICAgewo+ICsgICAgICAgIGNhc2UgQVZfQ09ERUNfSURfSDI2NDoKPiArICAgICAgICAgICAgKnJ0 Y19jb2RlYyA9IFJUQ19DT0RFQ19IMjY0Owo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICBjYXNlIEFWX0NPREVDX0lEX0hFVkM6Cj4gKyAgICAgICAgICAgICpydGNfY29kZWMgPSBSVENf Q09ERUNfSDI2NTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBBVl9DT0RF Q19JRF9BVjE6Cj4gKyAgICAgICAgICAgICpydGNfY29kZWMgPSBSVENfQ09ERUNfQVYxOwo+ICsg ICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIEFWX0NPREVDX0lEX1ZQOToKPiArICAg ICAgICAgICAgKnJ0Y19jb2RlYyA9IFJUQ19DT0RFQ19WUDk7Cj4gKyAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgIGNhc2UgQVZfQ09ERUNfSURfT1BVUzoKPiArICAgICAgICAgICAgKnJ0Y19j b2RlYyA9IFJUQ19DT0RFQ19PUFVTOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBj YXNlIEFWX0NPREVDX0lEX0FBQzoKPiArICAgICAgICAgICAgKnJ0Y19jb2RlYyA9IFJUQ19DT0RF Q19BQUM7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgQVZfQ09ERUNfSURf UENNX0FMQVc6Cj4gKyAgICAgICAgICAgICpydGNfY29kZWMgPSBSVENfQ09ERUNfUENNQTsKPiAr ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBBVl9DT0RFQ19JRF9QQ01fTVVMQVc6 Cj4gKyAgICAgICAgICAgICpydGNfY29kZWMgPSBSVENfQ09ERUNfUENNVTsKPiArICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgKnJ0Y19jb2RlYyA9 IC0xOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsK PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwoKTm8gVlA4PwoKPiArdm9pZCB3ZWJydGNfZGVpbml0 KERhdGFDaGFubmVsQ29udGV4dCpjb25zdCBjdHgpCj4gK3sKPiArICAgIGlmIChjdHgtPnRyYWNr cykgewo+ICsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3R4LT5uYl90cmFja3M7ICsraSkg ewo+ICsgICAgICAgICAgICBpZiAoY3R4LT50cmFja3NbaV0ucnRwX2N0eCkKPiArICAgICAgICAg ICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChjdHgtPnRyYWNrc1tpXS5ydHBfY3R4KTsKPiAr ICAgICAgICAgICAgaWYgKGN0eC0+dHJhY2tzW2ldLnJ0cF91cmxfY29udGV4dCkKPiArICAgICAg ICAgICAgICAgIGF2X2ZyZWVwKCZjdHgtPnRyYWNrc1tpXS5ydHBfdXJsX2NvbnRleHQpOwo+ICsg ICAgICAgICAgICBpZiAoY3R4LT50cmFja3NbaV0udHJhY2tfaWQpCj4gKyAgICAgICAgICAgICAg ICBydGNEZWxldGVUcmFjayhjdHgtPnRyYWNrc1tpXS50cmFja19pZCk7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGF2X2ZyZWVwKCZjdHgtPnRyYWNrcyk7Cj4gKyAgICB9Cj4gKyAgICBpZiAoY3R4 LT5wZWVyX2Nvbm5lY3Rpb24pIHsKPiArICAgICAgICBydGNEZWxldGVQZWVyQ29ubmVjdGlvbihj dHgtPnBlZXJfY29ubmVjdGlvbik7Cj4gKyAgICAgICAgY3R4LT5wZWVyX2Nvbm5lY3Rpb24gPSAw Owo+ICsgICAgfQo+ICsgICAgaWYgKGN0eC0+cmVzb3VyY2VfbG9jYXRpb24pCj4gKyAgICAgICAg YXZfZnJlZXAoJmN0eC0+cmVzb3VyY2VfbG9jYXRpb24pOwo+ICt9Cj4gXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3dlYnJ0Yy5oIGIvbGliYXZm b3JtYXQvd2VicnRjLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw Li5mN2Q4MWYzZGQwYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZvcm1hdC93ZWJydGMu aAo+IEBAIC0wLDAgKzEsNzAgQEAKPiArLyoKPiArICogV2ViUlRDLUhUVFAgaW5nZXN0aW9uL2Vn cmVzcyBwcm90b2NvbCAoV0hJUC9XSEVQKSBjb21tb24gY29kZQo+ICsgKgo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMjMgTmF0aXZlV2F2ZXMgR21iSCA8Y29udGFjdEBuYXRpdmV3YXZlcy5jb20+Cj4g KyAqIFRoaXMgd29yayBpcyBzdXBwb3J0ZWQgYnkgRkZHIHByb2plY3QgNDcxNjg3NjMuCj4gKyAq Cj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAo+ICsgKiBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBBVkZPUk1BVF9XRUJSVENfSAo+ICsjZGVmaW5lIEFW Rk9STUFUX1dFQlJUQ19ICj4gKwo+ICsjaW5jbHVkZSAiYXZmb3JtYXQuaCIKPiArI2luY2x1ZGUg ImF2aW9faW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvY29kZWNfaWQuaCIKPiAr I2luY2x1ZGUgInVybC5oIgo+ICsjaW5jbHVkZSAicnRjL3J0Yy5oIgo+ICsKPiArI2RlZmluZSBS VFBfTUFYX1BBQ0tFVF9TSVpFIDE0NTAKPiArCj4gK3R5cGVkZWYgc3RydWN0IERhdGFDaGFubmVs VHJhY2sgewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICphdmN0eDsKPiArICAgIGludCB0cmFja19p ZDsKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcnRwX2N0eDsKPiArICAgIFVSTENvbnRleHQgKnJ0 cF91cmxfY29udGV4dDsKPiArfSBEYXRhQ2hhbm5lbFRyYWNrOwo+ICsKPiArdHlwZWRlZiBzdHJ1 Y3QgRGF0YUNoYW5uZWxDb250ZXh0IHsKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqYXZjdHg7Cj4g KyAgICBpbnQgcGVlcl9jb25uZWN0aW9uOwo+ICsgICAgcnRjU3RhdGUgc3RhdGU7Cj4gKyAgICBE YXRhQ2hhbm5lbFRyYWNrICp0cmFja3M7Cj4gKyAgICBpbnQgbmJfdHJhY2tzOwo+ICsgICAgY29u c3QgY2hhciAqcmVzb3VyY2VfbG9jYXRpb247Cj4gKwo+ICsgICAgLyogb3B0aW9ucyAqLwo+ICsg ICAgY2hhciogYmVhcmVyX3Rva2VuOwo+ICsgICAgaW50NjRfdCBjb25uZWN0aW9uX3RpbWVvdXQ7 Cj4gKyAgICBpbnQ2NF90IHJ3X3RpbWVvdXQ7Cj4gK30gRGF0YUNoYW5uZWxDb250ZXh0Owo+ICsK PiArI2RlZmluZSBXRUJSVENfT1BUSU9OUyhGTEFHUywgb2Zmc2V0KSBcCj4gKyAgICB7ICJiZWFy ZXJfdG9rZW4iLCAib3B0aW9uYWwgQmVhcmVyIHRva2VuIGZvciBhdXRoZW50aWNhdGlvbiBhbmQg YXV0aG9yaXphdGlvbiIsIG9mZnNldCtvZmZzZXRvZihEYXRhQ2hhbm5lbENvbnRleHQsIGJlYXJl cl90b2tlbiksIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAwLCAwLCBGTEFH UyB9LCBcCgpuaXQ6IGlzIHRoZSBjYXBpdGFsaXphdGlvbiBvbiAiQmVhcmVyIiBpbnRlbmRlZD8K Cj4gKyAgICB7ICJjb25uZWN0aW9uX3RpbWVvdXQiLCAidGltZW91dCBmb3IgZXN0YWJsaXNoaW5n IGEgY29ubmVjdGlvbiIsIG9mZnNldCtvZmZzZXRvZihEYXRhQ2hhbm5lbENvbnRleHQsIGNvbm5l Y3Rpb25fdGltZW91dCksIEFWX09QVF9UWVBFX0RVUkFUSU9OLCB7IC5pNjQgPSAxMDAwMDAwMCB9 LCAxLCBJTlRfTUFYLCBGTEFHUyB9LCBcCj4gKyAgICB7ICJyd190aW1lb3V0IiwgInRpbWVvdXQg Zm9yIHJlY2VpdmluZy93cml0aW5nIGRhdGEiLCBvZmZzZXQrb2Zmc2V0b2YoRGF0YUNoYW5uZWxD b250ZXh0LCByd190aW1lb3V0KSwgQVZfT1BUX1RZUEVfRFVSQVRJT04sIHsgLmk2NCA9IDEwMDAw MDAgfSwgMSwgSU5UX01BWCwgRkxBR1MgfQo+ICsKPiArZXh0ZXJuIGludCB3ZWJydGNfY2xvc2Vf cmVzb3VyY2UoRGF0YUNoYW5uZWxDb250ZXh0KmNvbnN0IGN0eCk7Cj4gK2V4dGVybiBpbnQgd2Vi cnRjX2NvbnZlcnRfY29kZWMoZW51bSBBVkNvZGVjSUQgY29kZWNfaWQsIHJ0Y0NvZGVjKiBydGNf Y29kZWMpOwo+ICtleHRlcm4gaW50IHdlYnJ0Y19jcmVhdGVfcmVzb3VyY2UoRGF0YUNoYW5uZWxD b250ZXh0KmNvbnN0IGN0eCk7Cj4gK2V4dGVybiB2b2lkIHdlYnJ0Y19kZWluaXQoRGF0YUNoYW5u ZWxDb250ZXh0KmNvbnN0IGN0eCk7Cj4gK2V4dGVybiBpbnQgd2VicnRjX2dlbmVyYXRlX21lZGlh X3N0cmVhbV9pZChjaGFyIG1lZGlhX3N0cmVhbV9pZFszN10pOwo+ICtleHRlcm4gaW50IHdlYnJ0 Y19pbml0X2Nvbm5lY3Rpb24oRGF0YUNoYW5uZWxDb250ZXh0KmNvbnN0IGN0eCk7Cj4gK2V4dGVy biB2b2lkIHdlYnJ0Y19pbml0X2xvZ2dlcih2b2lkKTsKPiArZXh0ZXJuIGludCB3ZWJydGNfaW5p dF91cmxjb250ZXh0KERhdGFDaGFubmVsQ29udGV4dCpjb25zdCBjdHgsIGludCB0cmFja19pZHgp Owo+ICsKPiArI2VuZGlmIC8qIEFWRk9STUFUX1dFQlJUQ19IICovCj4gLS0KPiAyLjM5LjIKPgo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVn LWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmli ZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1w ZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgoKSSdsbCB0cnkgdG8gcHJvcGVybHkg dGVzdCBhbmQgZ2l2ZSBzb21lIG1vcmUgaW4tZGVwdGggZmVlZGJhY2sgYnV0Cm92ZXJhbGwgdGhp cyBsb29rcyBwcmV0dHkgbmljZSAocHJldmlvdXNseSBJJ2QgYmVlbiB0ZXN0aW5nIHRoaXMga2lu ZApvZiB0aGluZyB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9nZ2FyYmVyL3doaXAtZ28gYW5kIE9C UykuCgpCZXN0LAotdApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0 dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJz Y3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZm bXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==