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 BC3864B381 for ; Tue, 4 Jun 2024 14:49:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6A34668D70E; Tue, 4 Jun 2024 17:49:38 +0300 (EEST) Received: from alt2.a-painless.mh.aa.net.uk (alt2.a-painless.mh.aa.net.uk [81.187.30.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 91C1C68D6BA for ; Tue, 4 Jun 2024 17:49:31 +0300 (EEST) Received: from 0.b.4.b.7.4.0.8.c.4.a.5.d.8.b.2.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:2b8d:5a4c:8047:b4b0] helo=andrews-2024-laptop.lan) by painless-a.thn.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1sEVTe-007B97-1v; Tue, 04 Jun 2024 15:49:31 +0100 From: Andrew Sayers To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Jun 2024 15:47:21 +0100 Message-ID: <20240604144919.213799-2-ffmpeg-devel@pileofstuff.org> X-Mailer: git-send-email 2.45.1 In-Reply-To: <20240604144919.213799-1-ffmpeg-devel@pileofstuff.org> References: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> <20240604144919.213799-1-ffmpeg-devel@pileofstuff.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v6 1/4] doc: Explain what "context" means 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: Andrew Sayers 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: RGVyaXZlZCBmcm9tIGV4cGxhbmF0aW9ucyBraW5kbHkgcHJvdmlkZWQgYnkgU3RlZmFubyBTYWJh dGluaSBhbmQgb3RoZXJzOgpodHRwczovL2ZmbXBlZy5vcmcvcGlwZXJtYWlsL2ZmbXBlZy1kZXZl bC8yMDI0LUFwcmlsLzMyNTkwMy5odG1sCi0tLQogZG9jL2NvbnRleHQubWQgfCA0MzAgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5n ZWQsIDQzMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL2NvbnRleHQubWQK CmRpZmYgLS1naXQgYS9kb2MvY29udGV4dC5tZCBiL2RvYy9jb250ZXh0Lm1kCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJkOGNiNTg2OTYKLS0tIC9kZXYvbnVsbAorKysg Yi9kb2MvY29udGV4dC5tZApAQCAtMCwwICsxLDQzMCBAQAorQHBhZ2UgQ29udGV4dCBJbnRyb2R1 Y3Rpb24gdG8gY29udGV4dHMKKworQHRhYmxlb2Zjb250ZW50cworCitGRm1wZWcgdXNlcyB0aGUg dGVybSDigJxjb250ZXh04oCdIHRvIHJlZmVyIHRvIGFuIGlkaW9tCit5b3UgaGF2ZSBwcm9iYWJs eSB1c2VkIGJlZm9yZToKKworYGBgYworLy8gQyBzdHJ1Y3RzIG9mdGVuIHNoYXJlIGNvbnRleHQg YmV0d2VlbiBmdW5jdGlvbnM6CisKK0ZJTEUgKm15X2ZpbGU7IC8vIG15X2ZpbGUgc3RvcmVzIGlu Zm9ybWF0aW9uIGFib3V0IGEgZmlsZWhhbmRsZQorCitwcmludGYobXlfZmlsZSwgImhlbGxvICIp OyAvLyBteV9maWxlIHByb3ZpZGVzIGNvbnRleHQgdG8gdGhpcyBmdW5jdGlvbiwKK3ByaW50Ziht eV9maWxlLCAid29ybGQhIik7IC8vIGFuZCBhbHNvIHRvIHRoaXMgZnVuY3Rpb24KK2BgYAorCitg YGBweXRob24KKyMgUHl0aG9uIGNsYXNzZXMgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgbWV0aG9k cyB0aGV5IGNvbnRhaW46CisKK2NsYXNzIE15Q2xhc3M6CisgICAgZGVmIHByaW50KHNlbGYsbWVz c2FnZSk6CisgICAgICAgIGlmIHNlbGYucHJldl9tZXNzYWdlICE9IG1lc3NhZ2U6CisgICAgICAg ICAgICBzZWxmLnByZXZfbWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgICAgIHByaW50KG1lc3Nh Z2UpCitgYGAKKworPCEtLSBtYXJrZWQgImMiIGJlY2F1c2UgRG94eWdlbiBkb2Vzbid0IHN1cHBv cnQgSlMgaGlnaGxpZ2h0aW5nOiAtLT4KK2BgYGMKKy8vIE1hbnkgSmF2YVNjcmlwdCBjYWxsYmFj a3MgYWNjZXB0IGFuIG9wdGlvbmFsIGNvbnRleHQgYXJndW1lbnQ6CisKK2NvbnN0IG15X29iamVj dCA9IHt9OworCitteV9hcnJheS5mb3JFYWNoKGZ1bmN0aW9uXzEsIG15X29iamVjdCk7CitteV9h cnJheS5mb3JFYWNoKGZ1bmN0aW9uXzIsIG15X29iamVjdCk7CitgYGAKKworQmUgY2FyZWZ1bCBj b21wYXJpbmcgRkZtcGVnIGNvbnRleHRzIHRvIHRoaW5ncyB5b3UncmUgYWxyZWFkeSBmYW1pbGlh ciB3aXRoIC0KK0ZGbXBlZyBtYXkgc29tZXRpbWVzIGhhcHBlbiB0byByZXVzZSB3b3JkcyB5b3Ug cmVjb2duaXNlLCBidXQgbWVhbiBzb21ldGhpbmcKK2NvbXBsZXRlbHkgZGlmZmVyZW50LiAgRm9y IGV4YW1wbGUsIHRoZSBBVkNsYXNzIHN0cnVjdCBoYXMgbm90aGluZyB0byBkbyB3aXRoCitbb2Jq ZWN0LW9yaWVudGVkIGNsYXNzZXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NsYXNz Xyhjb21wdXRlcl9wcm9ncmFtbWluZykpLgorCitJZiB5b3UndmUgdXNlZCBjb250ZXh0cyBpbiBv dGhlciBDIHByb2plY3RzLCB5b3UgbWF5IHdhbnQgdG8gcmVhZAorQHJlZiBDb250ZXh0X2NvbXBh cmlzb24gYmVmb3JlIHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudC4KKworQHNlY3Rpb24gQ29udGV4 dF9nZW5lcmFsIOKAnENvbnRleHTigJ0gYXMgYSBnZW5lcmFsIGNvbmNlcHQKKworQHBhcgorQSBj b250ZXh0IGlzIGFueSBkYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IHNldmVyYWwgZnVuY3Rpb25zCiso b3Igc2V2ZXJhbCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24pIHRoYXQgYWxsIG9wZXJh dGUgb24gdGhlIHNhbWUgZW50aXR5LgorCitJbiB0aGUgYnJvYWRlc3Qgc2Vuc2UsIOKAnGNvbnRl eHTigJ0gaXMganVzdCBhIHdheSB0byB0aGluayBhYm91dCBjb2RlLgorWW91IGNhbiBldmVuIHVz ZSBpdCB0byB0aGluayBhYm91dCBjb2RlIHdyaXR0ZW4gYnkgcGVvcGxlIHdobyBoYXZlIG5ldmVy CitoZWFyZCB0aGUgdGVybSwgb3Igd2hvIHdvdWxkIGRpc2FncmVlIHdpdGggeW91IGFib3V0IHdo YXQgaXQgbWVhbnMuCitDb25zaWRlciB0aGUgZm9sbG93aW5nIHNuaXBwZXQ6CisKK2BgYGMKK3N0 cnVjdCBEdWFsV3JpdGVyIHsKKyAgICBpbnQgZmQxLCBmZDI7Cit9OworCitzc2l6ZV90IHdyaXRl X3RvX3R3b19maWxlcygKKyAgICBzdHJ1Y3QgRHVhbFdyaXRlciAqbXlfd3JpdGVyLAorICAgIHVp bnQ4X3QgKmJ1ZiwKKyAgICBpbnQgYnVmX3NpemUKKykgeworCisgICAgc3NpemVfdCBieXRlc193 cml0dGVuXzEgPSB3cml0ZShteV93cml0ZXItPmZkMSwgYnVmLCBidWZfc2l6ZSk7CisgICAgc3Np emVfdCBieXRlc193cml0dGVuXzIgPSB3cml0ZShteV93cml0ZXItPmZkMiwgYnVmLCBidWZfc2l6 ZSk7CisKKyAgICBpZiAoIGJ5dGVzX3dyaXR0ZW5fMSAhPSBieXRlc193cml0dGVuXzIgKSB7Cisg ICAgICAgIC8vIC4uLiBoYW5kbGUgdGhpcyBlZGdlIGNhc2UgLi4uCisgICAgfQorCisgICAgcmV0 dXJuIGJ5dGVzX3dyaXR0ZW5fMTsKKworfQorCitpbnQgbWFpbigpIHsKKworICAgIHN0cnVjdCBE dWFsV3JpdGVyIG15X3dyaXRlcjsKKyAgICBteV93cml0ZXIuZmQxID0gb3BlbigiZmlsZTEiLCAw NjQ0LCAid2IiKTsKKyAgICBteV93cml0ZXIuZmQyID0gb3BlbigiZmlsZTIiLCAwNjQ0LCAid2Ii KTsKKworICAgIHdyaXRlX3RvX3R3b19maWxlcygmbXlfd3JpdGVyLCAiaGVsbG8gIiwgc2l6ZW9m KCJoZWxsbyAiKSk7CisgICAgd3JpdGVfdG9fdHdvX2ZpbGVzKCZteV93cml0ZXIsICJ3b3JsZCEi LCBzaXplb2YoIndvcmxkISIpKTsKKworICAgIGNsb3NlKCBteV93cml0ZXIuZmQxICk7CisgICAg Y2xvc2UoIG15X3dyaXRlci5mZDIgKTsKKworfQorYGBgCisKK1RoZSB0ZXJtIOKAnGNvbnRleHTi gJ0gZG9lc24ndCBhcHBlYXIgYW55d2hlcmUgaW4gdGhlIHNuaXBwZXQuICBCdXQgYER1YWxXcml0 ZXJgCitpcyBwYXNzZWQgdG8gc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYHdyaXRlX3RvX3R3b19maWxl cygpYCB0aGF0IG9wZXJhdGUgb24KK3RoZSBzYW1lIGVudGl0eSwgc28gaXQgZml0cyB0aGUgZGVm aW5pdGlvbiBvZiBhIGNvbnRleHQuCisKK1doZW4gcmVhZGluZyBjb2RlIHRoYXQgaXNuJ3QgZXhw bGljaXRseSBkZXNjcmliZWQgaW4gdGVybXMgb2YgY29udGV4dHMsCityZW1lbWJlciB0aGF0IHlv dXIgaW50ZXJwcmV0YXRpb24gbWF5IGRpZmZlciBmcm9tIG90aGVyIHBlb3BsZSdzLgorRm9yIGV4 YW1wbGUsIEZGbXBlZydzIGF2aW9fYWxsb2NfY29udGV4dCgpIGFjY2VwdHMgYSBzZXQgb2YgY2Fs bGJhY2sgZnVuY3Rpb25zCithbmQgYW4gYG9wYXF1ZWAgYXJndW1lbnQgLSBldmVuIHRob3VnaCB0 aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdG8gKnJldHVybioKK2EgY29udGV4dCwgaXQgZG9lcyBu b3QgcmVxdWlyZSBgb3BhcXVlYCB0byAqcHJvdmlkZSogY29udGV4dCBmb3IgdGhlIGNhbGxiYWNr CitmdW5jdGlvbnMuICBTbyB5b3UgY291bGQgY2hvb3NlIHRvIHBhc3MgYSBzdHJ1Y3QgbGlrZSBg RHVhbFdyaXRlcmAgYXMgdGhlCitgb3BhcXVlYCBhcmd1bWVudCwgb3IgeW91IGNvdWxkIHBhc3Mg Y2FsbGJhY2tzIHRoYXQgdXNlIGBzdGRpbmAgYW5kIGBzdGRvdXRgCithbmQganVzdCBwYXNzIGEg YE5VTExgIGFyZ3VtZW50IGZvciBgb3BhcXVlYC4KKworV2hlbiByZWFkaW5nIGNvZGUgdGhhdCAq aXMqIGV4cGxpY2l0bHkgZGVzY3JpYmVkIGluIHRlcm1zIG9mIGNvbnRleHRzLAorcmVtZW1iZXIg dGhhdCB0aGUgdGVybSdzIG1lYW5pbmcgaXMgZ3VhcmFudGVlZCBieSAqdGhlIHByb2plY3QncyBj b21tdW5pdHkqLAorbm90ICp0aGUgbGFuZ3VhZ2UgaXQncyB3cml0dGVuIGluKi4gIFRoYXQgbWVh bnMgZ3VhcmFudGVlcyBtYXkgYmUgbW9yZSBmbGV4aWJsZQorYW5kIGNoYW5nZSBtb3JlIG92ZXIg dGltZS4gIEZvciBleGFtcGxlLCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgdGhhdCB1c2UKK1tlbmNh cHN1bGF0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbmNhcHN1bGF0aW9uXyhj b21wdXRlcl9wcm9ncmFtbWluZykpCit3aWxsIHNpbXBseSByZWZ1c2UgdG8gY29tcGlsZSBjb2Rl IHRoYXQgdmlvbGF0ZXMgaXRzIHJ1bGVzIGFib3V0IGFjY2VzcywKK3doaWxlIGNvbW11bml0aWVz IGNhbiBwdXQgdXAgd2l0aCBzcGVjaWFsIGNhc2VzIGlmIHRoZXkgaW1wcm92ZSBjb2RlIHF1YWxp dHkuCisKK1RoZSBuZXh0IHNlY3Rpb24gd2lsbCBkaXNjdXNzIHdoYXQgc3BlY2lmaWMgY29udmVu dGlvbnMgRkZtcGVnIGRldmVsb3BlcnMgbWVhbgord2hlbiB0aGV5IGRlc2NyaWJlIHBhcnRzIG9m IHRoZWlyIGNvZGUgYXMgdXNpbmcg4oCcY29udGV4dHPigJ0uCisKK0BzZWN0aW9uIENvbnRleHRf ZmZtcGVnIEZGbXBlZyBjb250ZXh0cworCitUaGlzIHNlY3Rpb24gZGlzY3Vzc2VzIHNwZWNpZmlj IGNvbnRleHQtcmVsYXRlZCBjb252ZW50aW9ucyB1c2VkIGluIEZGbXBlZy4KK1NvbWUgb2YgdGhl c2UgYXJlIHVzZWQgaW4gb3RoZXIgcHJvamVjdHMsIG90aGVycyBhcmUgdW5pcXVlIHRvIHRoaXMg cHJvamVjdC4KKworQHN1YnNlY3Rpb24gQ29udGV4dF9pbmRpY2F0aW5nIEluZGljYXRpbmcgY29u dGV4dDog4oCcQ29udGV4dOKAnSwg4oCcY3R44oCdIGV0Yy4KKworYGBgYworLy8gQ29udGV4dCBz dHJ1Y3QgbmFtZXMgdXN1YWxseSBlbmQgd2l0aCBgQ29udGV4dGA6CitzdHJ1Y3QgQVZTb21lQ29u dGV4dCB7CisgIC4uLgorfTsKKworLy8gRnVuY3Rpb25zIGFyZSB1c3VhbGx5IG5hbWVkIGFmdGVy IHRoZWlyIGNvbnRleHQsCisvLyBjb250ZXh0IHBhcmFtZXRlcnMgdXN1YWxseSBjb21lIGZpcnN0 IGFuZCBhcmUgb2Z0ZW4gY2FsbGVkIGBjdHhgOgordm9pZCBhdl9zb21lX2Z1bmN0aW9uKEFWU29t ZUNvbnRleHQgKmN0eCwgLi4uKTsKK2BgYAorCitGRm1wZWcgc3RydWN0IG5hbWVzIHVzdWFsbHkg c2lnbmFsIHdoZXRoZXIgdGhleSBhcmUgY29udGV4dHMgKGUuZy4gQVZCU0ZDb250ZXh0CitvciBB VkNvZGVjQ29udGV4dCkuICBFeGNlcHRpb25zIHRvIHRoaXMgcnVsZSBpbmNsdWRlIEFWTUQ1LCB3 aGljaCBpcyBvbmx5CitpZGVudGlmaWVkIGFzIGEgY29udGV4dCBieSBAcmVmIGxpYmF2dXRpbC9t ZDUuYyAidGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQiLgorCitGdW5jdGlvbiBuYW1lcyB1c3Vh bGx5IHNpZ25hbCB0aGUgY29udGV4dCB0aGV5J3JlIGFzc29jaWF0ZWQgd2l0aCAoZS5nLgorYXZf bWQ1X2FsbG9jKCkgb3IgYXZjb2RlY19hbGxvY19jb250ZXh0MygpKS4gIEV4Y2VwdGlvbnMgdG8g dGhpcyBydWxlIGluY2x1ZGUKK0ByZWYgYXZmb3JtYXQuaCAiQVZGb3JtYXRDb250ZXh0J3MgZnVu Y3Rpb25zIiwgbWFueSBvZiB3aGljaCBiZWdpbiB3aXRoCitqdXN0IGBhdl9gLgorCitGdW5jdGlv bnMgdXN1YWxseSBzaWduYWwgdGhlaXIgY29udGV4dCBwYXJhbWV0ZXIgYnkgcHV0dGluZyBpdCBm aXJzdCBhbmQKK25hbWluZyBpdCBzb21lIHZhcmlhbnQgb2YgYGN0eGAuICBFeGNlcHRpb25zIGlu Y2x1ZGUgYXZfYnNmX2FsbG9jKCksIHdoaWNoIHB1dHMKK2l0cyBjb250ZXh0IGFyZ3VtZW50IHNl Y29uZCB0byBlbXBoYXNpc2UgaXQncyBhbiBvdXQgdmFyaWFibGUuCisKK1NvbWUgZnVuY3Rpb25z IGZpdCBhd2t3YXJkbHkgd2l0aGluIEZGbXBlZydzIGNvbnRleHQgaWRpb20sIHNvIHRoZXkgc2Vu ZCBtaXhlZAorc2lnbmFscy4gIEZvciBleGFtcGxlLCBhdl9hbWJpZW50X3ZpZXdpbmdfZW52aXJv bm1lbnRfY3JlYXRlX3NpZGVfZGF0YSgpIGNyZWF0ZXMKK2FuIEFWQW1iaWVudFZpZXdpbmdFbnZp cm9ubWVudCBjb250ZXh0LCB0aGVuIGFkZHMgaXQgdG8gdGhlIHNpZGUtZGF0YSBvZiBhbgorQVZG cmFtZSBjb250ZXh0LiAgU28gaXRzIG5hbWUgaGludHMgYXQgb25lIGNvbnRleHQsIGl0cyBwYXJh bWV0ZXIgaGludHMgYXQKK2Fub3RoZXIsIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBpcyBzaWxlbnQg b24gdGhlIGlzc3VlLiAgWW91IG1pZ2h0IHByZWZlciB0bwordGhpbmsgb2Ygc3VjaCBmdW5jdGlv bnMgYXMgbm90IGhhdmluZyBhIGNvbnRleHQsIG9yIGFzIOKAnHJlY2VpdmluZ+KAnSBvbmUgY29u dGV4dAorYW5kIOKAnHByb2R1Y2luZ+KAnSBhbm90aGVyLgorCitAc3Vic2VjdGlvbiBDb250ZXh0 X2RhdGFfaGlkaW5nIERhdGEgaGlkaW5nOiBwcml2YXRlIGNvbnRleHRzCisKK2BgYGMKKy8vIENv bnRleHQgc3RydWN0cyBvZnRlbiBoaWRlIHByaXZhdGUgY29udGV4dDoKK3N0cnVjdCBBVlNvbWVD b250ZXh0IHsKKyAgdm9pZCAqcHJpdl9kYXRhOyAvLyBzb21ldGltZXMganVzdCBjYWxsZWQgImlu dGVybmFsIgorfTsKK2BgYAorCitDb250ZXh0cyBwcmVzZW50IGEgcHVibGljIGludGVyZmFjZSwg c28gY2hhbmdpbmcgYSBjb250ZXh0J3MgbWVtYmVycyBmb3JjZXMKK2V2ZXJ5b25lIHRoYXQgdXNl cyB0aGUgbGlicmFyeSB0byBhdCBsZWFzdCByZWNvbXBpbGUgdGhlaXIgcHJvZ3JhbSwKK2lmIG5v dCByZXdyaXRlIGl0IHRvIHJlbWFpbiBjb21wYXRpYmxlLiAgTWFueSBjb250ZXh0cyByZWR1Y2Ug dGhpcyBwcm9ibGVtCitieSBpbmNsdWRpbmcgYSBwcml2YXRlIGNvbnRleHQgd2l0aCBhIHR5cGUg dGhhdCBpcyBub3QgZXhwb3NlZCBpbiB0aGUgcHVibGljCitpbnRlcmZhY2UuICBIaWRpbmcgaW5m b3JtYXRpb24gdGhpcyB3YXkgZW5zdXJlcyBpdCBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dAorYWZm ZWN0aW5nIGRvd25zdHJlYW0gc29mdHdhcmUuCisKK1ByaXZhdGUgY29udGV4dHMgb2Z0ZW4gc3Rv cmUgdmFyaWFibGVzIHVzZXJzIGFyZW4ndCBzdXBwb3NlZCB0byBzZWUKKyhzaW1pbGFyIHRvIGFu IFtPT1BdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09iamVjdC1vcmllbnRlZF9wcm9n cmFtbWluZykKK3ByaXZhdGUgYmxvY2spLCBidXQgY2FuIGJlIHVzZWQgZm9yIG1vcmUgdGhhbiBq dXN0IGFjY2VzcyBjb250cm9sLiAgVGhleSBjYW4KK2Fsc28gc3RvcmUgaW5mb3JtYXRpb24gc2hh cmVkIGJldHdlZW4gc29tZSBidXQgbm90IGFsbCBpbnN0YW5jZXMgb2YgYSBjb250ZXh0CisoZS5n LiBjb2RlYy1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5KSwgYW5kIEByZWYgQ29udGV4dF9hdm9wdGlv bnMKKyJBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3RzIiBjYW4gcHJvdmlkZSB1c2VyIGNvbmZpZ3Vy YXRpb24gb3B0aW9ucyB0aHJvdWdoCit0aGUgQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyBBUEki LgorCitAc3Vic2VjdGlvbiBDb250ZXh0X2xpZmV0aW1lIE1hbmFnZSBsaWZldGltZTogY3JlYXRp b24sIHVzZSwgZGVzdHJ1Y3Rpb24KKworYGBgYwordm9pZCBteV9mdW5jdGlvbiguLi4pIHsKKwor ICAgIC8vIENvbnRleHQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHRoZW4gaW5pdGlhbGl6ZWQgd2l0 aCBhc3NvY2lhdGVkIGZ1bmN0aW9uczoKKworICAgIEFWU29tZUNvbnRleHQgKmN0eCA9IGF2X3Nv bWVfY29udGV4dF9hbGxvYyguLi4pOworCisgICAgLy8gLi4uIGNvbmZpZ3VyZSBjdHggLi4uCisK KyAgICBhdl9zb21lX2NvbnRleHRfaW5pdChjdHgsIC4uLik7CisKKyAgICAvLyAuLi4gdXNlIGN0 eCAuLi4KKworICAgIC8vIENvbnRleHQgc3RydWN0cyBhcmUgY2xvc2VkIHRoZW4gZnJlZWQgd2l0 aCBhc3NvY2lhdGVkIGZ1bmN0aW9uczoKKworICAgIGF2X3NvbWVfY29udGV4dF9jbG9zZShjdHgp OworICAgIGF2X3NvbWVfY29udGV4dF9mcmVlKGN0eCk7CisKK30KK2BgYAorCitGRm1wZWcgY29u dGV4dHMgZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0YWdlcyBvZiBsaWZlOgorCisxLiBhbGxv Y2F0aW9uIChvZnRlbiBhIGZ1bmN0aW9uIHRoYXQgZW5kcyB3aXRoIGBfYWxsb2NgKQorICAgKiBh IHJhbmdlIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHVzZSBieSB0aGUgc3RydWN0dXJlCisg ICAqIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb24gYm91bmRhcmllcyB0aGF0IGltcHJvdmUgY2FjaGlu ZworICAgKiBtZW1vcnkgaXMgcmVzZXQgdG8gemVyb2VzLCBzb21lIGludGVybmFsIHN0cnVjdHVy ZXMgbWF5IGJlIGluaXRpYWxpemVkCisyLiBjb25maWd1cmF0aW9uIChpbXBsZW1lbnRlZCBieSBz ZXR0aW5nIHZhbHVlcyBkaXJlY3RseSBvbiB0aGUgY29udGV4dCkKKyAgICogbm8gZnVuY3Rpb24g Zm9yIHRoaXMgLSBjYWxsaW5nIGNvZGUgcG9wdWxhdGVzIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkK KyAgICogbWVtb3J5IGlzIHBvcHVsYXRlZCB3aXRoIHVzZWZ1bCB2YWx1ZXMKKyAgICogc2ltcGxl IGNvbnRleHRzIGNhbiBza2lwIHRoaXMgc3RhZ2UKKzMuIGluaXRpYWxpemF0aW9uIChvZnRlbiBh IGZ1bmN0aW9uIHRoYXQgZW5kcyB3aXRoIGBfaW5pdGApCisgICAqIHNldHVwIGFjdGlvbnMgYXJl IHBlcmZvcm1lZCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiAoZS5nLiBvcGVuaW5nIGZpbGVz KQorNS4gbm9ybWFsIHVzYWdlCisgICAqIG1vc3QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gdGhp cyBzdGFnZQorICAgKiBkb2N1bWVudGF0aW9uIGltcGxpZXMgc29tZSBtZW1iZXJzIGFyZSBub3cg cmVhZC1vbmx5IChvciBub3QgdXNlZCBhdCBhbGwpCisgICAqIHNvbWUgY29udGV4dHMgYWxsb3cg cmUtaW5pdGlhbGl6YXRpb24KKzYuIGNsb3NpbmcgKG9mdGVuIGEgZnVuY3Rpb24gdGhhdCBlbmRz IHdpdGggYF9jbG9zZSgpYCkKKyAgICogdGVhcmRvd24gYWN0aW9ucyBhcmUgcGVyZm9ybWVkIChl LmcuIGNsb3NpbmcgZmlsZXMpCis3LiBkZWFsbG9jYXRpb24gKG9mdGVuIGEgZnVuY3Rpb24gdGhh dCBlbmRzIHdpdGggYF9mcmVlKClgKQorICAgKiBtZW1vcnkgaXMgcmV0dXJuZWQgdG8gdGhlIHBv b2wgb2YgYXZhaWxhYmxlIG1lbW9yeQorCitUaGlzIGNhbiBtaXNsZWFkIG9iamVjdC1vcmllbnRl ZCBwcm9ncmFtbWVycywgd2hvIGV4cGVjdCBzb21ldGhpbmcgbW9yZSBsaWtlOgorCisxLiBhbGxv Y2F0aW9uICh1c3VhbGx5IGEgYG5ld2Aga2V5d29yZCkKKyAgICogYSByYW5nZSBvZiBtZW1vcnkg aXMgYWxsb2NhdGVkIGZvciB1c2UgYnkgdGhlIHN0cnVjdHVyZQorICAgKiBtZW1vcnkgKm1heSog YmUgcmVzZXQgKGUuZy4gZm9yIHNlY3VyaXR5IHJlYXNvbnMpCisyLiBpbml0aWFsaXphdGlvbiAo dXN1YWxseSBhIGNvbnN0cnVjdG9yKQorICAgKiBtZW1vcnkgaXMgcG9wdWxhdGVkIHdpdGggdXNl ZnVsIHZhbHVlcworICAgKiByZWxhdGVkIHNldHVwIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBiYXNl ZCBvbiBhcmd1bWVudHMgKGUuZy4gb3BlbmluZyBmaWxlcykKKzMuIG5vcm1hbCB1c2FnZQorICAg KiBtb3N0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIHRoaXMgc3RhZ2UKKyAgICogY29tcGlsZXIg ZW5mb3JjZXMgdGhhdCBzb21lIG1lbWJlcnMgYXJlIHJlYWQtb25seSAob3IgcHJpdmF0ZSkKKyAg ICogbm8gZ29pbmcgYmFjayB0byB0aGUgcHJldmlvdXMgc3RhZ2UKKzQuIGZpbmFsaXphdGlvbiAo dXN1YWxseSBhIGRlc3RydWN0b3IpCisgICAqIHRlYXJkb3duIGFjdGlvbnMgYXJlIHBlcmZvcm1l ZCAoZS5nLiBjbG9zaW5nIGZpbGVzKQorNS4gZGVhbGxvY2F0aW9uICh1c3VhbGx5IGEgYGRlbGV0 ZWAga2V5d29yZCkKKyAgICogbWVtb3J5IGlzIHJldHVybmVkIHRvIHRoZSBwb29sIG9mIGF2YWls YWJsZSBtZW1vcnkKKworVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gZGlzY3Vzc2VzIEZG bXBlZydzIGRpZmZlcmVuY2VzIGZyb20gT09QLCB0byBoZWxwCitvYmplY3Qtb3JpZW50ZWQgcHJv Z3JhbW1lcnMgYXZvaWQgbWlzY29uY2VwdGlvbnMuICBZb3UgY2FuIHNhZmVseSBza2lwIHRoaXMK K3NlY3Rpb24gaWYgeW91IGFyZW4ndCBmYW1pbGlhciB3aXRoIHRoZSBPT1AgbGlmZXRpbWUgZGVz Y3JpYmVkIGFib3ZlLgorCitGRm1wZWcncyBhbGxvY2F0aW9uIHN0YWdlIGlzIGJyb2FkbHkgc2lt aWxhciB0byB0aGUgT09QIHN0YWdlIG9mIHRoZSBzYW1lIG5hbWUuCitCb3RoIHNldCBhc2lkZSBz b21lIG1lbW9yeSBmb3IgdXNlIGJ5IGEgbmV3IGVudGl0eSwgYnV0IEZGbXBlZydzIHN0YWdlIGNh biBhbHNvCitkbyBzb21lIGhpZ2hlci1sZXZlbCBvcGVyYXRpb25zLiAgRm9yIGV4YW1wbGUsIEBy ZWYgQ29udGV4dF9hdm9wdGlvbnMKKyJBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3RzIiBzZXQgdGhl aXIgQVZDbGFzcyBtZW1iZXIgZHVyaW5nIGFsbG9jYXRpb24uCisKK0ZGbXBlZydzIGNvbmZpZ3Vy YXRpb24gc3RhZ2UgaW52b2x2ZXMgc2V0dGluZyBhbnkgdmFyaWFibGVzIHlvdSB3YW50IGJlZm9y ZQoreW91IHN0YXJ0IHVzaW5nIHRoZSBjb250ZXh0LiAgQ29tcGxpY2F0ZWQgRkZtcGVnIHN0cnVj dHVyZXMgbGlrZSBBVkNvZGVjQ29udGV4dAordGVuZCB0byBoYXZlIG1hbnkgbWVtYmVycyB5b3Ug KmNvdWxkKiBzZXQsIGJ1dCBpbiBwcmFjdGljZSBtb3N0IHByb2dyYW1zIHNldAorZmV3IGlmIGFu eSBvZiB0aGVtLiAgVGhlIGZyZWVmb3JtIGNvbmZpZ3VyYXRpb24gc3RhZ2Ugd29ya3MgYmV0dGVy IHRoYW4gYnVuZGxpbmcKK3RoZXNlIGludG8gdGhlIGluaXRpYWxpemF0aW9uIHN0YWdlLCB3aGlj aCB3b3VsZCBsZWFkIHRvIGZ1bmN0aW9ucyB3aXRoCitpbXByYWN0aWNhbGx5IG1hbnkgcGFyYW1l dGVycywgYW5kIHdvdWxkIG1lYW4gZWFjaCBuZXcgb3B0aW9uIHdhcyBhbgoraW5jb21wYXRpYmxl IGNoYW5nZSB0byB0aGUgQVBJLiAgT25lIHdheSB0byB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIGlz IHRvIHJlYWQKK0ByZWYgQ29udGV4dF9hdm9wdGlvbnMgInRoZSBBVk9wdGlvbnMgc2VjdGlvbiBi ZWxvdyIgYW5kIHRoaW5rIGhvdyBhIGNvbnN0cnVjdG9yCit3b3VsZCBoYW5kbGUgdGhvc2Ugb3B0 aW9ucy4KKworRkZtcGVnJ3MgaW5pdGlhbGl6YXRpb24gc3RhZ2UgaW52b2x2ZXMgY2FsbGluZyBh IGZ1bmN0aW9uIHRoYXQgc2V0cyB0aGUgY29udGV4dAordXAgYmFzZWQgb24geW91ciBjb25maWd1 cmF0aW9uLgorCitGRm1wZWcncyBmaXJzdCB0aHJlZSBzdGFnZXMgZG8gdGhlIHNhbWUgam9iIGFz IE9PUCdzIGZpcnN0IHR3byBzdGFnZXMuCitUaGlzIGNhbiBtaXNsZWFkIG9iamVjdC1vcmllbnRl ZCBkZXZlbG9wZXJzLCB3aG8gZXhwZWN0IHRvIGRvIGxlc3Mgd29yayBpbiB0aGUKK2FsbG9jYXRp b24gc3RhZ2UsIGFuZCBtb3JlIHdvcmsgaW4gdGhlIGluaXRpYWxpemF0aW9uIHN0YWdlLiAgVG8g c2ltcGxpZnkgdGhpcywKK21vc3QgRkZtcGVnIGNvbnRleHRzIHByb3ZpZGUgYSBjb21iaW5lZCBh bGxvY2F0b3IgYW5kIGluaXRpYWxpemVyIGZ1bmN0aW9uLgorRm9yIGhpc3RvcmljYWwgcmVhc29u cywgc3VmZml4ZXMgbGlrZSBgX2FsbG9jYCwgYF9pbml0YCwgYF9hbGxvY19jb250ZXh0YCBhbmQK K2V2ZW4gYF9vcGVuYCBjYW4gaW5kaWNhdGUgdGhlIGZ1bmN0aW9uIGRvZXMgYW55IGNvbWJpbmF0 aW9uIG9mIGFsbG9jYXRpb24gYW5kCitpbml0aWFsaXphdGlvbi4KKworRkZtcGVnJ3MgImNsb3Np bmciIHN0YWdlIGlzIGJyb2FkbHkgc2ltaWxhciB0byBPT1AncyAiZmluYWxpemF0aW9uIiBzdGFn ZSwKK2J1dCBzb21lIGNvbnRleHRzIGFsbG93IHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGZpbmFs aXphdGlvbi4gIEZvciBleGFtcGxlLAorU3dyQ29udGV4dCBsZXRzIHlvdSBjYWxsIHN3cl9jbG9z ZSgpIHRoZW4gc3dyX2luaXQoKSB0byByZXVzZSBhIGNvbnRleHQuCitCZSBhd2FyZSB0aGF0IHNv bWUgRkZtcGVnIGZ1bmN0aW9ucyBoYXBwZW4gdG8gdXNlIHRoZSB3b3JkICJmaW5hbGl6ZSIgaW4g YSB3YXkKK3RoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgT09QIHN0YWdlIChlLmcuIGF2 X2JzZl9saXN0X2ZpbmFsaXplKCkpLgorCitGRm1wZWcncyAiZGVhbGxvY2F0aW9uIiBzdGFnZSBp cyBicm9hZGx5IHNpbWlsYXIgdG8gT09QLCBidXQgY2FuIHBlcmZvcm0gc29tZQoraGlnaGVyLWxl dmVsIGZ1bmN0aW9ucyAoc2ltaWxhciB0byB0aGUgYWxsb2NhdGlvbiBzdGFnZSkuCisKK0Nsb3Np bmcgZnVuY3Rpb25zIHVzdWFsbHkgZW5kIHdpdGggIl9jbG9zZSIsIHdoaWxlIGRlYWxsb2NhdGlv bgorZnVuY3Rpb25zIHVzdWFsbHkgZW5kIHdpdGggIl9mcmVlIi4gIFZlcnkgZmV3IGNvbnRleHRz IG5lZWQgdGhlIGZsZXhpYmlsaXR5IG9mCitzZXBhcmF0ZSAiY2xvc2luZyIgYW5kICJkZWFsbG9j YXRpb24iIHN0YWdlcywgc28gbWFueSAiX2ZyZWUiIGZ1bmN0aW9ucworaW1wbGljaXRseSBjbG9z ZSB0aGUgY29udGV4dCBmaXJzdC4KKworQHN1YnNlY3Rpb24gQ29udGV4dF9hdm9wdGlvbnMgQ29u ZmlndXJhdGlvbiBvcHRpb25zOiBBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3RzCisKK1RoZSBAcmVm IGF2b3B0aW9ucyAiQVZPcHRpb25zIEFQSSIgaXMgYSBmcmFtZXdvcmsgdG8gY29uZmlndXJlIHVz ZXItZmFjaW5nCitvcHRpb25zLCBlLmcuIG9uIHRoZSBjb21tYW5kLWxpbmUgb3IgaW4gR1VJIGNv bmZpZ3VyYXRpb24gZm9ybXMuCisKK1RvIHVuZGVyc3RhbmQgRkZtcGVnJ3MgY29uZmlndXJhdGlv biByZXF1aXJlbWVudHMsIHJ1biBgZmZtcGVnIC1oIGZ1bGxgIG9uIHRoZQorY29tbWFuZC1saW5l LCB0aGVuIGFzayB5b3Vyc2VsZiBob3cgeW91IHdvdWxkIGltcGxlbWVudCBhbGwgdGhvc2Ugb3B0 aW9ucword2l0aCB0aGUgQyBzdGFuZGFyZCBbYGdldG9wdGAgZnVuY3Rpb25dKGh0dHBzOi8vZW4u d2lraXBlZGlhLm9yZy93aWtpL0dldG9wdCkuCitZb3UgY2FuIGFsc28gYXNrIHRoZSBzYW1lIHF1 ZXN0aW9uIGZvciBvdGhlciBhcHByb2FjaGVzIC0gZm9yIGV4YW1wbGUsIGhvdyB3b3VsZAoreW91 IG1haW50YWluIGEgR1VJIHdpdGggMTUsMDAwKyBjb25maWd1cmF0aW9uIG9wdGlvbnM/CisKK01v c3Qgc29sdXRpb25zIGFzc3VtZSB5b3UgY2FuIGp1c3QgcHV0IGFsbCBvcHRpb25zIGluIGEgc2lu Z2xlIGNvZGUgYmxvY2ssCit3aGljaCBpcyB1bndvcmthYmxlIGF0IEZGbXBlZydzIHNjYWxlLiAg SW5zdGVhZCwgd2Ugc3BsaXQgY29uZmlndXJhdGlvbgorYWNyb3NzIG1hbnkgKkFWT3B0aW9ucy1l bmFibGVkIHN0cnVjdHMqLCB3aGljaCB1c2UgdGhlIEByZWYgYXZvcHRpb25zCisiQVZPcHRpb25z IEFQSSIgdG8gaW5zcGVjdCBhbmQgY29uZmlndXJlIG9wdGlvbnMsIGluY2x1ZGluZyBpbiBwcml2 YXRlIGNvbnRleHRzLgorCitBVk9wdGlvbnMtYWNjZXNzaWJsZSBtZW1iZXJzIG9mIGEgY29udGV4 dCBzaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUKK0ByZWYgYXZvcHRpb25zICJBVk9wdGlv bnMgQVBJIiB3aGVuZXZlciBwb3NzaWJsZSwgZXZlbiBpZiB0aGV5J3JlIG5vdCBoaWRkZW4KK2lu IGEgcHJpdmF0ZSBjb250ZXh0LiAgVGhhdCBlbnN1cmVzIHZhbHVlcyBhcmUgdmFsaWRhdGVkIGFz IHRoZXkncmUgc2V0LCBhbmQKK21lYW5zIHlvdSB3b24ndCBoYXZlIHRvIGRvIGFzIG11Y2ggd29y ayBpZiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEZGbXBlZyBjaGFuZ2VzCit0aGUgYWxsb3dlZCB2YWx1 ZXMuCisKK0FsdGhvdWdoIG5vdCBzdHJpY3RseSByZXF1aXJlZCwgaXQgaXMgYmVzdCB0byBvbmx5 IG1vZGlmeSBvcHRpb25zIGR1cmluZwordGhlIGNvbmZpZ3VyYXRpb24gc3RhZ2UuICBJbml0aWFs aXplZCBzdHJ1Y3RzIG1heSBiZSBhY2Nlc3NlZCBieSBpbnRlcm5hbAorRkZtcGVnIHRocmVhZHMs IGFuZCBtb2RpZnlpbmcgdGhlbSBjYW4gY2F1c2Ugd2VpcmQgaW50ZXJtaXR0ZW50IGJ1Z3MuCisK K0BzdWJzZWN0aW9uIENvbnRleHRfbG9nZ2luZyBMb2dnaW5nOiBBVkNsYXNzIGNvbnRleHQgc3Ry dWN0dXJlcworCitGRm1wZWcncyBAcmVmIGxhdnVfbG9nICJsb2dnaW5nIGZhY2lsaXR5IiBuZWVk cyB0byBiZSBzaW1wbGUgdG8gdXNlLAorYnV0IGZsZXhpYmxlIGVub3VnaCB0byBsZXQgcGVvcGxl IGRlYnVnIHByb2JsZW1zLiAgQW5kIG11Y2ggbGlrZSBvcHRpb25zLAoraXQgbmVlZHMgdG8gd29y ayB0aGUgc2FtZSBhY3Jvc3MgYSB3aWRlIHZhcmlldHkgb2YgdW5yZWxhdGVkIHN0cnVjdHMuCisK K0ZGbXBlZyBzdHJ1Y3RzIHRoYXQgc3VwcG9ydCB0aGUgbG9nZ2luZyBmcmFtZXdvcmsgYXJlIGNh bGxlZCAqQHJlZiBBVkNsYXNzCitjb250ZXh0IHN0cnVjdHVyZXMqLiAgVGhlIG5hbWUgQHJlZiBB VkNsYXNzIHdhcyBjaG9zZW4gZWFybHkgaW4gRkZtcGVnJ3MKK2RldmVsb3BtZW50LCBidXQgaW4g cHJhY3RpY2UgaXQgb25seSBjYW1lIHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0Citsb2dnaW5n LCBhbmQgYWJvdXQgb3B0aW9ucy4KKworQHNlY3Rpb24gQ29udGV4dF9mdXJ0aGVyIEZ1cnRoZXIg aW5mb3JtYXRpb24gYWJvdXQgY29udGV4dHMKKworU28gZmFyLCB0aGlzIGRvY3VtZW50IGhhcyBw cm92aWRlZCBhIHRoZW9yZXRpY2FsIGd1aWRlIHRvIEZGbXBlZyBjb250ZXh0cy4KK1RoaXMgZmlu YWwgc2VjdGlvbiBwcm92aWRlcyBzb21lIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMgdG8gdGhlIHRv cGljLAord2hpY2ggbWF5IGhlbHAgcm91bmQgb3V0IHlvdXIgdW5kZXJzdGFuZGluZy4KKworQHN1 YnNlY3Rpb24gQ29udGV4dF9leGFtcGxlIExlYXJuaW5nIGJ5IGV4YW1wbGU6IGNvbnRleHQgZm9y IGEgY29kZWMKKworSXQgY2FuIGhlbHAgdG8gbGVhcm4gY29udGV4dHMgYnkgZG9pbmcgYSBkZWVw IGRpdmUgaW50byBhIHNwZWNpZmljIHN0cnVjdC4KK1RoaXMgc2VjdGlvbiB3aWxsIGRpc2N1c3Mg QVZDb2RlY0NvbnRleHQgLSBhbiBBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3QKK3RoYXQgY29udGFp bnMgaW5mb3JtYXRpb24gYWJvdXQgZW5jb2Rpbmcgb3IgZGVjb2Rpbmcgb25lIHN0cmVhbSBvZiBk YXRhCisoZS5nLiB0aGUgdmlkZW8gaW4gYSBtb3ZpZSkuCisKK1RoZSBuYW1lICJBVkNvZGVjQ29u dGV4dCIgdGVsbHMgdXMgdGhpcyBpcyBhIGNvbnRleHQuICBNYW55IG9mCitAcmVmIGxpYmF2Y29k ZWMvYXZjb2RlYy5oICJpdHMgZnVuY3Rpb25zIiBzdGFydCB3aXRoIGFuIGBhdmN0eGAgcGFyYW1l dGVyLAoraW5kaWNhdGluZyB0aGlzIHBhcmFtZXRlciBwcm92aWRlcyBjb250ZXh0IGZvciB0aGF0 IGZ1bmN0aW9uLgorCitBVkNvZGVjQ29udGV4dDo6aW50ZXJuYWwgY29udGFpbnMgdGhlIHByaXZh dGUgY29udGV4dC4gIEZvciBleGFtcGxlLAorY29kZWMtc3BlY2lmaWMgaW5mb3JtYXRpb24gbWln aHQgYmUgc3RvcmVkIGhlcmUuCisKK0FWQ29kZWNDb250ZXh0IGlzIGFsbG9jYXRlZCB3aXRoIGF2 Y29kZWNfYWxsb2NfY29udGV4dDMoKSwgaW5pdGlhbGl6ZWQgd2l0aAorYXZjb2RlY19vcGVuMigp LCBhbmQgZnJlZWQgd2l0aCBhdmNvZGVjX2ZyZWVfY29udGV4dCgpLiAgTW9zdCBvZiBpdHMgbWVt YmVycworYXJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyBB UEkiLCBidXQgZm9yIGV4YW1wbGUgeW91CitjYW4gc2V0IEFWQ29kZWNDb250ZXh0OjpkcmF3X2hv cml6X2JhbmQoKSBpZiB5b3VyIHByb2dyYW0gaGFwcGVucyB0byBuZWVkIGl0LgorCitBVkNvZGVj Q29udGV4dCBwcm92aWRlcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UgdG8gbWFueSBkaWZmZXJlbnQg KmNvZGVjcyouCitPcHRpb25zIHN1cHBvcnRlZCBieSBtYW55IGNvZGVjcyAoZS5nLiAiYml0cmF0 ZSIpIGFyZSBrZXB0IGluIEFWQ29kZWNDb250ZXh0CithbmQgZXhwb3NlZCB3aXRoIEFWT3B0aW9u cy4gIE9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gb25lIGNvZGVjIGFyZQorc3RvcmVkIGlu IHRoZSBwcml2YXRlIGNvbnRleHQsIGFuZCBhbHNvIGV4cG9zZWQgd2l0aCBBVk9wdGlvbnMuCisK K0FWQ29kZWNDb250ZXh0Ojphdl9jbGFzcyBjb250YWlucyBsb2dnaW5nIG1ldGFkYXRhIHRvIGVu c3VyZSBhbGwgY29kZWMtcmVsYXRlZAorZXJyb3IgbWVzc2FnZXMgbG9vayB0aGUgc2FtZSwgcGx1 cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFib3V0IG9wdGlvbnMuCisKK1RvIHN1cHBvcnQgYSBz cGVjaWZpYyBjb2RlYywgQVZDb2RlY0NvbnRleHQncyBwcml2YXRlIGNvbnRleHQgaXMgc2V0IHRv CithbiBlbmNvZGVyLXNwZWNpZmljIGRhdGEgdHlwZS4gIEZvciBleGFtcGxlLCB0aGUgdmlkZW8g Y29kZWMKK1tILjI2NF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWR2YW5jZWRfVmlk ZW9fQ29kaW5nKSBpcyBzdXBwb3J0ZWQgdmlhCitbdGhlIHgyNjQgbGlicmFyeV0oaHR0cHM6Ly93 d3cudmlkZW9sYW4ub3JnL2RldmVsb3BlcnMveDI2NC5odG1sKSwgYW5kCitpbXBsZW1lbnRlZCBp biBYMjY0Q29udGV4dC4gIEFsdGhvdWdoIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLCBY MjY0Q29udGV4dAoraXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuICBUaGF0IG1lYW5zIEZG bXBlZydzIEByZWYgZmZtcGVnX3ZlcnNpb25pbmcKKyJzdHJpY3QgcnVsZXMgYWJvdXQgY2hhbmdp bmcgcHVibGljIHN0cnVjdHMiIGFyZW4ndCBhcyBpbXBvcnRhbnQgaGVyZSwgc28gYQordmVyc2lv biBvZiBGRm1wZWcgY291bGQgbW9kaWZ5IFgyNjRDb250ZXh0IG9yIHJlcGxhY2UgaXQgd2l0aCBh bm90aGVyIHR5cGUKK2FsdG9nZXRoZXIuICBBbiBhZHZlcnNlIGxlZ2FsIHJ1bGluZyBvciBzZWN1 cml0eSBwcm9ibGVtIGNvdWxkIGV2ZW4gZm9yY2UgdXMgdG8KK3N3aXRjaCB0byBhIGNvbXBsZXRl bHkgZGlmZmVyZW50IGxpYnJhcnkgd2l0aG91dCBhIG1ham9yIHZlcnNpb24gYnVtcC4KKworVGhl IGRlc2lnbiBvZiBBVkNvZGVjQ29udGV4dCBwcm92aWRlcyBzZXZlcmFsIGltcG9ydGFudCBndWFy YW50ZWVzOgorCistIGxldHMgeW91IHVzZSB0aGUgc2FtZSBpbnRlcmZhY2UgZm9yIGFueSBjb2Rl YworLSBzdXBwb3J0cyBjb21tb24gZW5jb2RlciBvcHRpb25zIGxpa2UgImJpdHJhdGUiIHdpdGhv dXQgZHVwbGljYXRpbmcgY29kZQorLSBzdXBwb3J0cyBlbmNvZGVyLXNwZWNpZmljIG9wdGlvbnMg bGlrZSAicHJvZmlsZSIgd2l0aG91dCBidWxraW5nIG91dCB0aGUgcHVibGljIGludGVyZmFjZQor LSBleHBvc2VzIGJvdGggdHlwZXMgb2Ygb3B0aW9ucyB0byB1c2Vycywgd2l0aCBoZWxwIHRleHQg YW5kIGRldGVjdGlvbiBvZiBtaXNzaW5nIG9wdGlvbnMKKy0gcHJvdmlkZXMgdW5pZm9ybSBsb2dn aW5nIG91dHB1dAorLSBoaWRlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIChlLmcuIGl0cyBlbmNv ZGluZyBidWZmZXIpCisKK0BzdWJzZWN0aW9uIENvbnRleHRfY29tcGFyaXNvbiBMZWFybmluZyBi eSBjb21wYXJpc29uOiBGRm1wZWcgdnMuIEN1cmwgY29udGV4dHMKKworSXQgY2FuIGhlbHAgdG8g bGVhcm4gY29udGV4dHMgYnkgY29tcGFyaW5nIGhvdyBkaWZmZXJlbnQgcHJvamVjdHMgdGFja2xl CitzaW1pbGFyIHByb2JsZW1zLiAgVGhpcyBzZWN0aW9uIHdpbGwgY29tcGFyZSBAcmVmIEFWTUQ1 ICJGRm1wZWcncyBNRDUgY29udGV4dCIKK3dpdGggW2N1cmwgOC44LjAncyBlcXVpdmFsZW50XSho dHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2Jsb2IvY3VybC04XzhfMC9saWIvbWQ1LmMjTDQ4 KS4KKworVGhlIFtNRDUgYWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9N RDUpIHByb2R1Y2VzCithIGZpeGVkLWxlbmd0aCBkaWdlc3QgZnJvbSBhcmJpdHJhcnktbGVuZ3Ro IGRhdGEuICBJdCBkb2VzIHRoaXMgYnkgY2FsY3VsYXRpbmcKK3RoZSBkaWdlc3QgZm9yIGEgcHJl Zml4IG9mIHRoZSBkYXRhLCB0aGVuIGxvYWRpbmcgdGhlIG5leHQgcGFydCBhbmQgYWRkaW5nIGl0 Cit0byB0aGUgcHJldmlvdXMgZGlnZXN0LCBhbmQgc28gb24uCisKK2BgYGMKKy8vIEZGbXBlZydz IE1ENSBjb250ZXh0IGxvb2tzIGxpa2UgdGhpczoKK3R5cGVkZWYgc3RydWN0IEFWTUQ1IHsKKyAg ICB1aW50NjRfdCBsZW47CisgICAgdWludDhfdCAgYmxvY2tbNjRdOworICAgIHVpbnQzMl90IEFC Q0RbNF07Cit9IEFWTUQ1OworCisvLyBDdXJsIDguOC4wJ3MgTUQ1IGNvbnRleHQgbG9va3MgbGlr ZSB0aGlzOgorc3RydWN0IE1ENV9jb250ZXh0IHsKKyAgY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMg Km1kNV9oYXNoOyAgICAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgdm9pZCAgICAg ICAgICAgICAgICAgICptZDVfaGFzaGN0eDsgICAvKiBIYXNoIGZ1bmN0aW9uIGNvbnRleHQgKi8K K307CitgYGAKKworQ3VybCdzIHN0cnVjdCBuYW1lIGVuZHMgd2l0aCBgX2NvbnRleHRgLCBndWFy YW50ZWVpbmcgY29udGV4dHMgYXJlIHRoZSBjb3JyZWN0CitpbnRlcnByZXRhdGlvbi4gIEZGbXBl ZydzIHN0cnVjdCBkb2VzIG5vdCBleHBsaWNpdGx5IHNheSBpdCdzIGEgY29udGV4dCwgYnV0CitA cmVmIGxpYmF2dXRpbC9tZDUuYyAiaXRzIGZ1bmN0aW9ucyBkbyIgc28gd2UgY2FuIHJlYXNvbmFi bHkgYXNzdW1lCitpdCdzIHRoZSBpbnRlbmRlZCBpbnRlcnByZXRhdGlvbi4KKworQ3VybCdzIHN0 cnVjdCB1c2VzIGB2b2lkICptZDVfaGFzaGN0eGAgdG8gYXZvaWQgZ3VhcmFudGVlaW5nCitpbXBs ZW1lbnRhdGlvbiBkZXRhaWxzIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCB3aGVyZWFzIEZGbXBl ZyBtYWtlcworZXZlcnl0aGluZyBhY2Nlc3NpYmxlLiAgVGhpcyBkaXNhZ3JlZW1lbnQgYWJvdXQg ZGF0YSBoaWRpbmcgaXMgYSBnb29kIGV4YW1wbGUKK29mIGhvdyBjb250ZXh0cyBjYW4gYmUgdXNl ZCBkaWZmZXJlbnRseS4gIEhpZGluZyB0aGUgZGF0YSBtZWFucyBjaGFuZ2luZyB0aGUKK2xheW91 dCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGN1cmwgd29uJ3QgYnJlYWsgZG93bnN0cmVhbSBwcm9n cmFtcyB0aGF0IHVzZWQKK3RoYXQgZGF0YS4gIEJ1dCB0aGUgTUQ1IGFsZ29yaXRobSBoYXMgYmVl biBzdGFibGUgZm9yIDMwIHllYXJzLCBhbmQgbWFraW5nIHRoZQorZGF0YSBwdWJsaWMgbWFrZXMg aXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gZm9sbG93IGEgYnVnIGluIHRoZWlyIG93biBjb2RlLgor CitDdXJsJ3Mgc3RydWN0IGlzIGRlY2xhcmVkIGFzIGBzdHJ1Y3QgPHR5cGU+IHsgLi4uIH1gLCB3 aGVyZWFzIEZGbXBlZyB1c2VzCitgdHlwZWRlZiBzdHJ1Y3QgPHR5cGU+IHsgLi4uIH0gPHR5cGU+ YC4gIFRoZXNlIGNvbnZlbnRpb25zIGFyZSB1c2VkIHdpdGggYm90aAorY29udGV4dCBhbmQgbm9u LWNvbnRleHQgc3RydWN0cywgc28gZG9uJ3Qgc2F5IGFueXRoaW5nIGFib3V0IGNvbnRleHRzIGFz IHN1Y2guCitTcGVjaWZpY2FsbHksIEZGbXBlZydzIGNvbnZlbnRpb24gaXMgYSB3b3JrYXJvdW5k IGZvciBhbiBpc3N1ZSB3aXRoIEMgZ3JhbW1hcjoKKworYGBgYwordm9pZCBteV9mdW5jdGlvbigu Li4pIHsKKyAgaW50ICAgICAgICAgICAgICAgIG15X3ZhcjsgICAgICAgIC8vIGdvb2QKKyAgTUQ1 X2NvbnRleHQgICAgICAgIG15X2N1cmxfY3R4OyAgIC8vIGVycm9yOiBDIG5lZWRzIHlvdSB0byBl eHBsaWNpdGx5IHNheSAic3RydWN0IgorICBzdHJ1Y3QgTUQ1X2NvbnRleHQgbXlfY3VybF9jdHg7 ICAgLy8gZ29vZDogYWRkZWQgInN0cnVjdCIKKyAgQVZNRDUgICAgICAgICAgICAgIG15X2ZmbXBl Z19jdHg7IC8vIGdvb2Q6IHR5cGVkZWYncyBhdm9pZCB0aGUgbmVlZCBmb3IgInN0cnVjdCIKK30K K2BgYAorCitCb3RoIE1ENSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxvbmctdGVzdGVkLCB3aWRlbHkt dXNlZCBleGFtcGxlcyBvZiBjb250ZXh0cworaW4gdGhlIHJlYWwgd29ybGQuICBUaGV5IHNob3cg aG93IGNvbnRleHRzIGNhbiBzb2x2ZSB0aGUgc2FtZSBwcm9ibGVtCitpbiBkaWZmZXJlbnQgd2F5 cy4KLS0gCjIuNDUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpo dHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vi c2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBm Zm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=