From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 3B3AC2F4F for ; Tue, 4 Sep 2018 04:11:08 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Sep 2018 19:11:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,327,1531810800"; d="scan'208";a="71359428" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga006.jf.intel.com with ESMTP; 03 Sep 2018 19:10:54 -0700 Received: from fmsmsx153.amr.corp.intel.com (10.18.125.6) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 3 Sep 2018 19:10:54 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX153.amr.corp.intel.com (10.18.125.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 3 Sep 2018 19:10:53 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.226]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.150]) with mapi id 14.03.0319.002; Tue, 4 Sep 2018 10:09:53 +0800 From: "Yao, Lei A" To: "Ma, Liang J" , "Hunt, David" CC: "dev@dpdk.org" , "Nicolau, Radu" , "Burakov, Anatoly" , "Geary, John" Thread-Topic: [PATCH v6 1/4] lib/librte_power: traffic pattern aware power control Thread-Index: AQHUQTv6/+0cO6ByIEy2/mF65nXs/6TfZdXw Date: Tue, 4 Sep 2018 02:09:53 +0000 Message-ID: <2DBBFF226F7CF64BAFCA79B681719D953A53B5C1@shsmsx102.ccr.corp.intel.com> References: <1531238668-2214-1-git-send-email-radu.nicolau@intel.com> <1535727871-30168-1-git-send-email-liang.j.ma@intel.com> In-Reply-To: <1535727871-30168-1-git-send-email-liang.j.ma@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTE1MWJjZDQtZjhjNC00YmI5LThkMDctNjU4OWU5YTBjYWFjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidzFkK2J2Kzl4XC85OHhDRktMZXhlMzFsUmZhazFOY0REZlYzVUtjcFNuRkJwaXhaZ211bzIwTDNNYlRvOGlJb3MifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v6 1/4] lib/librte_power: traffic pattern aware power control X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Sep 2018 02:11:09 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWEsIExpYW5nIEoNCj4g U2VudDogRnJpZGF5LCBBdWd1c3QgMzEsIDIwMTggMTE6MDQgUE0NCj4gVG86IEh1bnQsIERhdmlk IDxkYXZpZC5odW50QGludGVsLmNvbT4NCj4gQ2M6IGRldkBkcGRrLm9yZzsgWWFvLCBMZWkgQSA8 bGVpLmEueWFvQGludGVsLmNvbT47IE5pY29sYXUsIFJhZHUNCj4gPHJhZHUubmljb2xhdUBpbnRl bC5jb20+OyBCdXJha292LCBBbmF0b2x5IDxhbmF0b2x5LmJ1cmFrb3ZAaW50ZWwuY29tPjsNCj4g R2VhcnksIEpvaG4gPGpvaG4uZ2VhcnlAaW50ZWwuY29tPjsgTWEsIExpYW5nIEogPGxpYW5nLmou bWFAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjYgMS80XSBsaWIvbGlicnRlX3Bvd2Vy OiB0cmFmZmljIHBhdHRlcm4gYXdhcmUgcG93ZXIgY29udHJvbA0KPiANCj4gMS4gQWJzdHJhY3QN Cj4gDQo+IEZvciBwYWNrZXQgcHJvY2Vzc2luZyB3b3JrbG9hZHMgc3VjaCBhcyBEUERLIHBvbGxp bmcgaXMgY29udGludW91cy4NCj4gVGhpcyBtZWFucyBDUFUgY29yZXMgYWx3YXlzIHNob3cgMTAw JSBidXN5IGluZGVwZW5kZW50IG9mIGhvdyBtdWNoDQo+IHdvcmsNCj4gdGhvc2UgY29yZXMgYXJl IGRvaW5nLiBJdCBpcyBjcml0aWNhbCB0byBhY2N1cmF0ZWx5IGRldGVybWluZSBob3cgYnVzeQ0K PiBhIGNvcmUgaXMgaHVnZWx5IGltcG9ydGFudCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOg0K PiANCj4gICAgKiBObyBpbmRpY2F0aW9uIG9mIG92ZXJsb2FkIGNvbmRpdGlvbnMNCj4gDQo+ICAg ICogVXNlciBkbyBub3Qga25vdyBob3cgbXVjaCByZWFsIGxvYWQgaXMgb24gYSBzeXN0ZW0gbWVh bmluZyByZXN1bHRlZCBpbg0KPiAgICAgIHdhc3RlZCBlbmVyZ3kgYXMgbm8gcG93ZXIgbWFuYWdl bWVudCBpcyB1dGlsaXplZA0KPiANCj4gQ29tcGFyZWQgdG8gdGhlIG9yaWdpbmFsIGwzZndkLXBv d2VyIGRlc2lnbiwgaW5zdGVhZCBvZiBnb2luZyB0byBzbGVlcA0KPiBhZnRlciBkZXRlY3Rpbmcg YW4gZW1wdHkgcG9sbCwgdGhlIG5ldyBtZWNoYW5pc20ganVzdCBsb3dlcnMgdGhlIGNvcmUNCj4g ZnJlcXVlbmN5LiBBcyBhIHJlc3VsdCwgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN0b3AgcG9s bGluZyB0aGUgZGV2aWNlLA0KPiB3aGljaCBsZWFkcyB0byBpbXByb3ZlZCBoYW5kbGluZyBvZiBi dXJzdHMgb2YgdHJhZmZpYy4NCj4gDQo+IFdoZW4gdGhlIHN5c3RlbSBiZWNvbWUgYnVzeSwgdGhl IGVtcHR5IHBvbGwgbWVjaGFuaXNtIGNhbiBhbHNvIGluY3JlYXNlDQo+IHRoZSBjb3JlDQo+IGZy ZXF1ZW5jeSAoaW5jbHVkaW5nIHR1cmJvKSB0byBkbyBiZXN0IGVmZm9ydCBmb3IgaW50ZW5zaXZl IHRyYWZmaWMuIFRoaXMgZ2l2ZXMNCj4gdXMgbW9yZSBmbGV4aWJsZSBhbmQgYmFsYW5jZWQgdHJh ZmZpYyBhd2FyZW5lc3Mgb3ZlciB0aGUgc3RhbmRhcmQgbDNmd2QtDQo+IHBvd2VyDQo+IGFwcGxp Y2F0aW9uLg0KPiANCj4gMi4gUHJvcG9zZWQgc29sdXRpb24NCj4gDQo+IFRoZSBwcm9wb3NlZCBz b2x1dGlvbiBmb2N1c2VzIG9uIGhvdyBtYW55IHRpbWVzIGVtcHR5IHBvbGxzIGFyZSBleGVjdXRl ZC4NCj4gVGhlIGxlc3MNCj4gdGhlIG51bWJlciBvZiBlbXB0eSBwb2xscywgbWVhbnMgY3VycmVu dCBjb3JlIGlzIGJ1c3kgd2l0aCBwcm9jZXNzaW5nDQo+IHdvcmtsb2FkLA0KPiB0aGVyZWZvcmUs IHRoZSBoaWdoZXIgZnJlcXVlbmN5IGlzIG5lZWRlZC4gVGhlIGhpZ2ggZW1wdHkgcG9sbCBudW1i ZXINCj4gaW5kaWNhdGVzDQo+IHRoZSBjdXJyZW50IGNvcmUgbm90IGRvaW5nIGFueSByZWFsIHdv cmsgdGhlcmVmb3JlLCB3ZSBjYW4gbG93ZXIgdGhlDQo+IGZyZXF1ZW5jeQ0KPiB0byBzYWZlIHBv d2VyLg0KPiANCj4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGVhY2ggY29yZSBoYXMg MSBlbXB0eS1wb2xsIGNvdW50ZXIgd2hpY2gNCj4gYXNzdW1lDQo+IDEgY29yZSBpcyBkZWRpY2F0 ZWQgdG8gMSBxdWV1ZS4gVGhpcyB3aWxsIG5lZWQgdG8gYmUgZXhwYW5kZWQgaW4gdGhlIGZ1dHVy ZQ0KPiB0byBzdXBwb3J0IG11bHRpcGxlIHF1ZXVlcyBwZXIgY29yZS4NCj4gDQo+IDIuMSBQb3dl ciBzdGF0ZSBkZWZpbml0aW9uOg0KPiANCj4gCUxPVzogIE5vdCBjdXJyZW50bHkgdXNlZCwgcmVz ZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuDQo+IA0KPiAJTUVEOiAgdGhlIGZyZXF1ZW5jeSBpcyB1c2Vk IHRvIHByb2Nlc3MgbW9kZXN0IHRyYWZmaWMgd29ya2xvYWQuDQo+IA0KPiAJSElHSDogdGhlIGZy ZXF1ZW5jeSBpcyB1c2VkIHRvIHByb2Nlc3MgYnVzeSB0cmFmZmljIHdvcmtsb2FkLg0KPiANCj4g Mi4yIFRoZXJlIGFyZSB0d28gcGhhc2VzIHRvIGVzdGFibGlzaCB0aGUgcG93ZXIgbWFuYWdlbWVu dCBzeXN0ZW06DQo+IA0KPiAJYS5Jbml0aWFsaXphdGlvbi9UcmFpbmluZyBwaGFzZS4gVGhlIHRy YWluaW5nIHBoYXNlIGlzIG5lY2Vzc2FyeQ0KPiAJICBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHRo ZSBzeXN0ZW0gcG9sbGluZyBiYXNlbGluZSBudW1iZXJzIGZyb20NCj4gCSAgaWRsZSB0byBidXN5 LiBUaGUgaGlnaGVzdCBwb2xsIGNvdW50IHdpbGwgYmUgZHVyaW5nIGlkbGUsIHdoZXJlIGFsbA0K PiAJICBwb2xscyBhcmUgZW1wdHkuIFRoZXNlIHBvbGwgY291bnRzIHdpbGwgYmUgZGlmZmVyZW50 IGJldHdlZW4NCj4gCSAgc3lzdGVtcyBkdWUgdG8gdGhlIG1hbnkgcG9zc2libGUgcHJvY2Vzc29y IG1pY3JvLWFyY2gsIGNhY2hlDQo+IAkgIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbnMsIGhlbmNl IHRoZSB0cmFpbmluZyBwaGFzZS4NCj4gICAJICBJbiB0aGUgdHJhaW5pbmcgcGhhc2UsIHRyYWZm aWMgaXMgYmxvY2tlZCBzbyB0aGUgdHJhaW5pbmcgYWxnb3JpdGhtDQo+ICAgCSAgY2FuIGF2ZXJh Z2UgdGhlIGVtcHR5LXBvbGwgbnVtYmVycyBmb3IgdGhlIExPVywgTUVEIGFuZA0KPiAgCSAgSElH SCAgcG93ZXIgc3RhdGVzIGluIG9yZGVyIHRvIGNyZWF0ZSBhIGJhc2VsaW5lLg0KPiAgIAkgIFRo ZSBjb3JlJ3MgY291bnRlciBhcmUgY29sbGVjdGVkIGV2ZXJ5IDEwbXMsIGFuZCB0aGUgVHJhaW5p bmcNCj4gIAkgICBwaGFzZSB3aWxsIHRha2UgMiBzZWNvbmRzLg0KPiANCj4gCWIuTm9ybWFsIHBo YXNlLiBXaGVuIHRoZSB0cmFpbmluZyBwaGFzZSBpcyBjb21wbGV0ZSwgdHJhZmZpYyBpcw0KPiAg IAkgIHN0YXJ0ZWQuIFRoZSBydW4tdGltZSBwb2xsIGNvdW50cyBhcmUgY29tcGFyZWQgd2l0aCB0 aGUNCj4gCSAgYmFzZWxpbmUgYW5kIHRoZSBkZWNpc2lvbiB3aWxsIGJlIHRha2VuIHRvIG1vdmUg dG8gTUVEIHBvd2VyDQo+ICAgCSAgc3RhdGUgb3IgSElHSCBwb3dlciBzdGF0ZS4gVGhlIGNvdW50 ZXJzIGFyZSBjYWxjdWxhdGVkIGV2ZXJ5IDEwbXMuDQo+IA0KPiAzLiBQcm9wb3NlZCAgQVBJDQo+ IA0KPiAxLiAgcnRlX3Bvd2VyX2VtcHR5X3BvbGxfc3RhdF9pbml0KHZvaWQpOw0KPiB3aGljaCBp cyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3lzdGVtLg0KPiANCj4g Mi4gIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfZnJlZSh2b2lkKTsNCj4gd2hpY2ggaXMgdXNl ZCB0byBmcmVlIHRoZSByZXNvdXJjZSBob2xkIGJ5IHBvd2VyIG1hbmFnZW1lbnQgc3lzdGVtLg0K PiANCj4gMy4gIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfdXBkYXRlKHVuc2lnbmVkIGludCBs Y29yZV9pZCk7DQo+IHdoaWNoIGlzIHVzZWQgdG8gdXBkYXRlIHNwZWNpZmljIGNvcmUgZW1wdHkg cG9sbCBjb3VudGVyLCBub3QgdGhyZWFkIHNhZmUNCj4gDQo+IDQuICBydGVfcG93ZXJfcG9sbF9z dGF0X3VwZGF0ZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQsIHVpbnQ4X3QgbmJfcGt0KTsNCj4gd2hp Y2ggaXMgdXNlZCB0byB1cGRhdGUgc3BlY2lmaWMgY29yZSB2YWxpZCBwb2xsIGNvdW50ZXIsIG5v dCB0aHJlYWQgc2FmZQ0KPiANCj4gNS4gIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfZmV0Y2go dW5zaWduZWQgaW50IGxjb3JlX2lkKTsNCj4gd2hpY2ggaXMgdXNlZCB0byBnZXQgc3BlY2lmaWMg Y29yZSBlbXB0eSBwb2xsIGNvdW50ZXIuDQo+IA0KPiA2LiAgcnRlX3Bvd2VyX3BvbGxfc3RhdF9m ZXRjaCh1bnNpZ25lZCBpbnQgbGNvcmVfaWQpOw0KPiB3aGljaCBpcyB1c2VkIHRvIGdldCBzcGVj aWZpYyBjb3JlIHZhbGlkIHBvbGwgY291bnRlci4NCj4gDQo+IDcuICBydGVfZW1wdHlfcG9sbF9k ZXRlY3Rpb24odm9pZCk7DQo+IHdoaWNoIGlzIHVzZWQgdG8gZGV0ZWN0IGVtcHR5IHBvbGwgc3Rh dGUgY2hhbmdlcy4NCj4gDQo+IENoYW5nZUxvZzoNCj4gdjI6IGZpeCBzb21lIGNvZGluZyBzdHls ZSBpc3N1ZXMNCj4gdjM6IHJlbmFtZSB0aGUgZmlsZW5hbWUsIEFQSSBuYW1lLg0KPiB2NDogbm8g Y2hhbmdlDQo+IHY1OiBubyBjaGFuZ2UNCj4gdjY6IHJlLXdvcmsgdGhlIGNvZGUgbGF5b3V0LCB1 cGRhdGUgQVBJDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBMaWFuZyBNYSA8bGlhbmcuai5tYUBpbnRl bC5jb20+DQpSZXZpZXdlZC1ieTogTGVpIFlhbyA8bGVpLmEueWFvQGludGVsLmNvbT4NCj4gLS0t DQo+ICBsaWIvbGlicnRlX3Bvd2VyL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDYgKy0NCj4g IGxpYi9saWJydGVfcG93ZXIvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgNSArLQ0KPiAgbGli L2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5jIHwgNTAwDQo+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrDQo+ICBsaWIvbGlicnRlX3Bvd2VyL3J0ZV9wb3dlcl9lbXB0 eV9wb2xsLmggfCAyMDUgKysrKysrKysrKysrKw0KPiAgbGliL2xpYnJ0ZV9wb3dlci9ydGVfcG93 ZXJfdmVyc2lvbi5tYXAgIHwgIDEzICsNCj4gIDUgZmlsZXMgY2hhbmdlZCwgNzI1IGluc2VydGlv bnMoKyksIDQgZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9w b3dlci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xp YnJ0ZV9wb3dlci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGli L2xpYnJ0ZV9wb3dlci9NYWtlZmlsZSBiL2xpYi9saWJydGVfcG93ZXIvTWFrZWZpbGUNCj4gaW5k ZXggNmY4NWU4OC4uYThmMTMwMSAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9wb3dlci9NYWtl ZmlsZQ0KPiArKysgYi9saWIvbGlicnRlX3Bvd2VyL01ha2VmaWxlDQo+IEBAIC02LDggKzYsOSBA QCBpbmNsdWRlICQoUlRFX1NESykvbWsvcnRlLnZhcnMubWsNCj4gICMgbGlicmFyeSBuYW1lDQo+ ICBMSUIgPSBsaWJydGVfcG93ZXIuYQ0KPiANCj4gK0NGTEFHUyArPSAtREFMTE9XX0VYUEVSSU1F TlRBTF9BUEkNCj4gIENGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykgLUkkKFNSQ0RJUikgLU8zIC1m bm8tc3RyaWN0LWFsaWFzaW5nDQo+IC1MRExJQlMgKz0gLWxydGVfZWFsDQo+ICtMRExJQlMgKz0g LWxydGVfZWFsIC1scnRlX3RpbWVyDQo+IA0KPiAgRVhQT1JUX01BUCA6PSBydGVfcG93ZXJfdmVy c2lvbi5tYXANCj4gDQo+IEBAIC0xNiw4ICsxNyw5IEBAIExJQkFCSVZFUiA6PSAxDQo+ICAjIGFs bCBzb3VyY2UgYXJlIHN0b3JlZCBpbiBTUkNTLXkNCj4gIFNSQ1MtJChDT05GSUdfUlRFX0xJQlJU RV9QT1dFUikgOj0gcnRlX3Bvd2VyLmMNCj4gcG93ZXJfYWNwaV9jcHVmcmVxLmMNCj4gIFNSQ1Mt JChDT05GSUdfUlRFX0xJQlJURV9QT1dFUikgKz0gcG93ZXJfa3ZtX3ZtLmMNCj4gZ3Vlc3RfY2hh bm5lbC5jDQo+ICtTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfUE9XRVIpICs9IHJ0ZV9wb3dlcl9l bXB0eV9wb2xsLmMNCj4gDQo+ICAjIGluc3RhbGwgdGhpcyBoZWFkZXIgZmlsZQ0KPiAtU1lNTElO Sy0kKENPTkZJR19SVEVfTElCUlRFX1BPV0VSKS1pbmNsdWRlIDo9IHJ0ZV9wb3dlci5oDQo+ICtT WU1MSU5LLSQoQ09ORklHX1JURV9MSUJSVEVfUE9XRVIpLWluY2x1ZGUgOj0gcnRlX3Bvd2VyLmgN Cj4gcnRlX3Bvd2VyX2VtcHR5X3BvbGwuaA0KPiANCj4gIGluY2x1ZGUgJChSVEVfU0RLKS9tay9y dGUubGliLm1rDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Bvd2VyL21lc29uLmJ1aWxkIGIv bGliL2xpYnJ0ZV9wb3dlci9tZXNvbi5idWlsZA0KPiBpbmRleCAyNTMxNzNmLi42Mzk1N2ViIDEw MDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX3Bvd2VyL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9s aWJydGVfcG93ZXIvbWVzb24uYnVpbGQNCj4gQEAgLTUsNSArNSw2IEBAIGlmIGhvc3RfbWFjaGlu ZS5zeXN0ZW0oKSAhPSAnbGludXgnDQo+ICAJYnVpbGQgPSBmYWxzZQ0KPiAgZW5kaWYNCj4gIHNv dXJjZXMgPSBmaWxlcygncnRlX3Bvd2VyLmMnLCAncG93ZXJfYWNwaV9jcHVmcmVxLmMnLA0KPiAt CQkncG93ZXJfa3ZtX3ZtLmMnLCAnZ3Vlc3RfY2hhbm5lbC5jJykNCj4gLWhlYWRlcnMgPSBmaWxl cygncnRlX3Bvd2VyLmgnKQ0KPiArCQkncG93ZXJfa3ZtX3ZtLmMnLCAnZ3Vlc3RfY2hhbm5lbC5j JywNCj4gKwkJJ3J0ZV9wb3dlcl9lbXB0eV9wb2xsLmMnKQ0KPiAraGVhZGVycyA9IGZpbGVzKCdy dGVfcG93ZXIuaCcsJ3J0ZV9wb3dlcl9lbXB0eV9wb2xsLmgnKQ0KPiBkaWZmIC0tZ2l0IGEvbGli L2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5jDQo+IGIvbGliL2xpYnJ0ZV9wb3dl ci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAuLjNkYWM2NTQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvbGlicnRlX3Bv d2VyL3J0ZV9wb3dlcl9lbXB0eV9wb2xsLmMNCj4gQEAgLTAsMCArMSw1MDAgQEANCj4gKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyAqIENvcHlyaWdodChjKSAy MDEwLTIwMTggSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3Ry aW5nLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gKyNpbmNsdWRlIDxydGVf Y3ljbGVzLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9t YWxsb2MuaD4NCj4gKw0KPiArI2luY2x1ZGUgInJ0ZV9wb3dlci5oIg0KPiArI2luY2x1ZGUgInJ0 ZV9wb3dlcl9lbXB0eV9wb2xsLmgiDQo+ICsNCj4gKyNkZWZpbmUgSU5URVJWQUxTX1BFUl9TRUNP TkQgMTAwICAgICAvKiAoMTBtcykgKi8NCj4gKyNkZWZpbmUgU0VDT05EU19UT19UUkFJTl9GT1Ig Mg0KPiArI2RlZmluZSBERUZBVUxUX01FRF9UT19ISUdIX1BFUkNFTlRfVEhSRVNIT0xEIDcwDQo+ ICsjZGVmaW5lIERFRkFVTFRfSElHSF9UT19NRURfUEVSQ0VOVF9USFJFU0hPTEQgMzANCj4gKyNk ZWZpbmUgREVGQVVMVF9DWUNMRVNfUEVSX1BBQ0tFVCA4MDANCj4gKw0KPiArc3RhdGljIHN0cnVj dCBlcF9wYXJhbXMgKmVwX3BhcmFtczsNCj4gK3N0YXRpYyB1aW50MzJfdCBtZWRfdG9faGlnaF90 aHJlc2hvbGQgPQ0KPiBERUZBVUxUX01FRF9UT19ISUdIX1BFUkNFTlRfVEhSRVNIT0xEOw0KPiAr c3RhdGljIHVpbnQzMl90IGhpZ2hfdG9fbWVkX3RocmVzaG9sZCA9DQo+IERFRkFVTFRfSElHSF9U T19NRURfUEVSQ0VOVF9USFJFU0hPTEQ7DQo+ICsNCj4gK3N0YXRpYyB1aW50MzJfdCBhdmFpbF9m cmVxc1tSVEVfTUFYX0xDT1JFXVtOVU1fRlJFUVNdOw0KPiArDQo+ICtzdGF0aWMgdWludDMyX3Qg dG90YWxfYXZhaWxfZnJlcXNbUlRFX01BWF9MQ09SRV07DQo+ICsNCj4gK3N0YXRpYyB1aW50MzJf dCBmcmVxX2luZGV4W05VTV9GUkVRXTsNCj4gKw0KPiArc3RhdGljIHVpbnQzMl90DQo+ICtnZXRf ZnJlcV9pbmRleChlbnVtIGZyZXFfdmFsIGluZGV4KQ0KPiArew0KPiArCXJldHVybiBmcmVxX2lu ZGV4W2luZGV4XTsNCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtzZXRfcG93ZXJf ZnJlcShpbnQgbGNvcmVfaWQsIGVudW0gZnJlcV92YWwgZnJlcSwgYm9vbCBzcGVjaWZpY19mcmVx KQ0KPiArew0KPiArCWludCBlcnIgPSAwOw0KPiArCXVpbnQzMl90IHBvd2VyX2ZyZXFfaW5kZXg7 DQo+ICsJaWYgKCFzcGVjaWZpY19mcmVxKQ0KPiArCQlwb3dlcl9mcmVxX2luZGV4ID0gZ2V0X2Zy ZXFfaW5kZXgoZnJlcSk7DQo+ICsJZWxzZQ0KPiArCQlwb3dlcl9mcmVxX2luZGV4ID0gZnJlcTsN Cj4gKw0KPiArCWVyciA9IHJ0ZV9wb3dlcl9zZXRfZnJlcShsY29yZV9pZCwgcG93ZXJfZnJlcV9p bmRleCk7DQo+ICsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICsNCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkNCj4gK2V4aXRfdHJhaW5p bmdfc3RhdGUoc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cykNCj4gK3sNCj4gKwlS VEVfU0VUX1VTRUQocG9sbF9zdGF0cyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkNCj4gK2VudGVyX3RyYWluaW5nX3N0YXRl KHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3RhdHMpDQo+ICt7DQo+ICsJcG9sbF9zdGF0 cy0+aXRlcl9jb3VudGVyID0gMDsNCj4gKwlwb2xsX3N0YXRzLT5jdXJfZnJlcSA9IExPVzsNCj4g Kwlwb2xsX3N0YXRzLT5xdWV1ZV9zdGF0ZSA9IFRSQUlOSU5HOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ICtlbnRlcl9u b3JtYWxfc3RhdGUoc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cykNCj4gK3sNCj4g KwkvKiBDbGVhciB0aGUgYXZlcmFnZXMgYXJyYXlzIGFuZCBzdHJzICovDQo+ICsJbWVtc2V0KHBv bGxfc3RhdHMtPmVkcGlfYXYsIDAsIHNpemVvZihwb2xsX3N0YXRzLT5lZHBpX2F2KSk7DQo+ICsJ cG9sbF9zdGF0cy0+ZWMgPSAwOw0KPiArCW1lbXNldChwb2xsX3N0YXRzLT5wcGlfYXYsIDAsIHNp emVvZihwb2xsX3N0YXRzLT5wcGlfYXYpKTsNCj4gKwlwb2xsX3N0YXRzLT5wYyA9IDA7DQo+ICsN Cj4gKwlwb2xsX3N0YXRzLT5jdXJfZnJlcSA9IE1FRDsNCj4gKwlwb2xsX3N0YXRzLT5pdGVyX2Nv dW50ZXIgPSAwOw0KPiArCXBvbGxfc3RhdHMtPnRocmVzaG9sZF9jdHIgPSAwOw0KPiArCXBvbGxf c3RhdHMtPnF1ZXVlX3N0YXRlID0gTUVEX05PUk1BTDsNCj4gKwlzZXRfcG93ZXJfZnJlcShwb2xs X3N0YXRzLT5sY29yZV9pZCwgTUVELCBmYWxzZSk7DQo+ICsNCj4gKwkvKiBUcnkgaGVyZSAqLw0K PiArCXBvbGxfc3RhdHMtPnRocmVzaFtNRURdLnRocmVzaG9sZF9wZXJjZW50ID0NCj4gbWVkX3Rv X2hpZ2hfdGhyZXNob2xkOw0KPiArCXBvbGxfc3RhdHMtPnRocmVzaFtIR0hdLnRocmVzaG9sZF9w ZXJjZW50ID0NCj4gaGlnaF90b19tZWRfdGhyZXNob2xkOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ICtlbnRlcl9idXN5 X3N0YXRlKHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3RhdHMpDQo+ICt7DQo+ICsJbWVt c2V0KHBvbGxfc3RhdHMtPmVkcGlfYXYsIDAsIHNpemVvZihwb2xsX3N0YXRzLT5lZHBpX2F2KSk7 DQo+ICsJcG9sbF9zdGF0cy0+ZWMgPSAwOw0KPiArCW1lbXNldChwb2xsX3N0YXRzLT5wcGlfYXYs IDAsIHNpemVvZihwb2xsX3N0YXRzLT5wcGlfYXYpKTsNCj4gKwlwb2xsX3N0YXRzLT5wYyA9IDA7 DQo+ICsNCj4gKwlwb2xsX3N0YXRzLT5jdXJfZnJlcSA9IEhHSDsNCj4gKwlwb2xsX3N0YXRzLT5p dGVyX2NvdW50ZXIgPSAwOw0KPiArCXBvbGxfc3RhdHMtPnRocmVzaG9sZF9jdHIgPSAwOw0KPiAr CXBvbGxfc3RhdHMtPnF1ZXVlX3N0YXRlID0gSEdIX0JVU1k7DQo+ICsJc2V0X3Bvd2VyX2ZyZXEo cG9sbF9zdGF0cy0+bGNvcmVfaWQsIEhHSCwgZmFsc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ICtlbnRlcl9wdXJn ZV9zdGF0ZShzdHJ1Y3QgcHJpb3JpdHlfd29ya2VyICpwb2xsX3N0YXRzKQ0KPiArew0KPiArCXBv bGxfc3RhdHMtPml0ZXJfY291bnRlciA9IDA7DQo+ICsJcG9sbF9zdGF0cy0+cXVldWVfc3RhdGUg PSBMT1dfUFVSR0U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0 ZV9fKChhbHdheXNfaW5saW5lKSkNCj4gK3NldF9zdGF0ZShzdHJ1Y3QgcHJpb3JpdHlfd29ya2Vy ICpwb2xsX3N0YXRzLA0KPiArCQllbnVtIHF1ZXVlX3N0YXRlIG5ld19zdGF0ZSkNCj4gK3sNCj4g KwllbnVtIHF1ZXVlX3N0YXRlIG9sZF9zdGF0ZSA9IHBvbGxfc3RhdHMtPnF1ZXVlX3N0YXRlOw0K PiArCWlmIChvbGRfc3RhdGUgIT0gbmV3X3N0YXRlKSB7DQo+ICsNCj4gKwkJLyogQ2FsbCBhbnkg b2xkIHN0YXRlIGV4aXQgZnVuY3Rpb25zICovDQo+ICsJCWlmIChvbGRfc3RhdGUgPT0gVFJBSU5J TkcpDQo+ICsJCQlleGl0X3RyYWluaW5nX3N0YXRlKHBvbGxfc3RhdHMpOw0KPiArDQo+ICsJCS8q IENhbGwgYW55IG5ldyBzdGF0ZSBlbnRyeSBmdW5jdGlvbnMgKi8NCj4gKwkJaWYgKG5ld19zdGF0 ZSA9PSBUUkFJTklORykNCj4gKwkJCWVudGVyX3RyYWluaW5nX3N0YXRlKHBvbGxfc3RhdHMpOw0K PiArCQlpZiAobmV3X3N0YXRlID09IE1FRF9OT1JNQUwpDQo+ICsJCQllbnRlcl9ub3JtYWxfc3Rh dGUocG9sbF9zdGF0cyk7DQo+ICsJCWlmIChuZXdfc3RhdGUgPT0gSEdIX0JVU1kpDQo+ICsJCQll bnRlcl9idXN5X3N0YXRlKHBvbGxfc3RhdHMpOw0KPiArCQlpZiAobmV3X3N0YXRlID09IExPV19Q VVJHRSkNCj4gKwkJCWVudGVyX3B1cmdlX3N0YXRlKHBvbGxfc3RhdHMpOw0KPiArCX0NCj4gK30N Cj4gKw0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArdXBkYXRlX3RyYWluaW5nX3N0YXRzKHN0cnVj dCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3RhdHMsDQo+ICsJCXVpbnQzMl90IGZyZXEsDQo+ICsJ CWJvb2wgc3BlY2lmaWNfZnJlcSwNCj4gKwkJdWludDMyX3QgbWF4X3RyYWluX2l0ZXIpDQo+ICt7 DQo+ICsJUlRFX1NFVF9VU0VEKHNwZWNpZmljX2ZyZXEpOw0KPiArDQo+ICsJY2hhciBwZmlfc3Ry WzMyXTsNCj4gKwl1aW50NjRfdCBwMF9lbXB0eV9kZXE7DQo+ICsNCj4gKwlzcHJpbnRmKHBmaV9z dHIsICIlMDJkIiwgZnJlcSk7DQo+ICsNCj4gKwlpZiAocG9sbF9zdGF0cy0+Y3VyX2ZyZXEgPT0g ZnJlcSAmJg0KPiArCQkJcG9sbF9zdGF0cy0+dGhyZXNoW2ZyZXFdLnRyYWluZWQgPT0gZmFsc2Up IHsNCj4gKwkJaWYgKHBvbGxfc3RhdHMtPnRocmVzaFtmcmVxXS5jdXJfdHJhaW5faXRlciA9PSAw KSB7DQo+ICsNCj4gKwkJCXNldF9wb3dlcl9mcmVxKHBvbGxfc3RhdHMtPmxjb3JlX2lkLA0KPiAr CQkJCQlmcmVxLCBzcGVjaWZpY19mcmVxKTsNCj4gKw0KPiArCQkJcG9sbF9zdGF0cy0+ZW1wdHlf ZGVxdWV1ZXNfcHJldiA9DQo+ICsJCQkJcG9sbF9zdGF0cy0+ZW1wdHlfZGVxdWV1ZXM7DQo+ICsN Cj4gKwkJCXBvbGxfc3RhdHMtPnRocmVzaFtmcmVxXS5jdXJfdHJhaW5faXRlcisrOw0KPiArDQo+ ICsJCQlyZXR1cm47DQo+ICsJCX0gZWxzZSBpZiAocG9sbF9zdGF0cy0+dGhyZXNoW2ZyZXFdLmN1 cl90cmFpbl9pdGVyDQo+ICsJCQkJPD0gbWF4X3RyYWluX2l0ZXIpIHsNCj4gKw0KPiArCQkJcDBf ZW1wdHlfZGVxID0gcG9sbF9zdGF0cy0+ZW1wdHlfZGVxdWV1ZXMgLQ0KPiArCQkJCXBvbGxfc3Rh dHMtPmVtcHR5X2RlcXVldWVzX3ByZXY7DQo+ICsNCj4gKwkJCXBvbGxfc3RhdHMtPmVtcHR5X2Rl cXVldWVzX3ByZXYgPQ0KPiArCQkJCXBvbGxfc3RhdHMtPmVtcHR5X2RlcXVldWVzOw0KPiArDQo+ ICsJCQlwb2xsX3N0YXRzLT50aHJlc2hbZnJlcV0uYmFzZV9lZHBpICs9DQo+IHAwX2VtcHR5X2Rl cTsNCj4gKwkJCXBvbGxfc3RhdHMtPnRocmVzaFtmcmVxXS5jdXJfdHJhaW5faXRlcisrOw0KPiAr DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlpZiAocG9sbF9zdGF0cy0+dGhyZXNoW2ZyZXFdLnRyYWlu ZWQgPT0gZmFsc2UpIHsNCj4gKwkJCQlwb2xsX3N0YXRzLT50aHJlc2hbZnJlcV0uYmFzZV9lZHBp ID0NCj4gKwkJCQkJcG9sbF9zdGF0cy0+dGhyZXNoW2ZyZXFdLmJhc2VfZWRwaSAvDQo+ICsJCQkJ CW1heF90cmFpbl9pdGVyOw0KPiArDQo+ICsJCQkJLyogQWRkIG9uIGEgZmFjdG9yIG9mIDAuMDUl LCB0aGlzIHNob3VsZA0KPiByZW1vdmUgYW55ICovDQo+ICsJCQkJLyogZmFsc2UgbmVnYXRpdmVz IHdoZW4gdGhlIHN5c3RlbSBpcyAwJQ0KPiBidXN5ICovDQo+ICsJCQkJcG9sbF9zdGF0cy0+dGhy ZXNoW2ZyZXFdLmJhc2VfZWRwaSArPQ0KPiArCQkJCQlwb2xsX3N0YXRzLT50aHJlc2hbZnJlcV0u YmFzZV9lZHBpIC8NCj4gMjAwMDsNCj4gKw0KPiArCQkJCXBvbGxfc3RhdHMtPnRocmVzaFtmcmVx XS50cmFpbmVkID0gdHJ1ZTsNCj4gKwkJCQlwb2xsX3N0YXRzLT5jdXJfZnJlcSsrOw0KPiArDQo+ ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdWludDMy X3QgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ICt1cGRhdGVfc3RhdHMoc3RydWN0 IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cykNCj4gK3sNCj4gKwl1aW50NjRfdCB0b3RfZWRw aSA9IDAsIHRvdF9wcGkgPSAwOw0KPiArCXVpbnQzMl90IGosIHBlcmNlbnQ7DQo+ICsNCj4gKwlz dHJ1Y3QgcHJpb3JpdHlfd29ya2VyICpzID0gcG9sbF9zdGF0czsNCj4gKw0KPiArCXVpbnQ2NF90 IGN1cl9lZHBpID0gcy0+ZW1wdHlfZGVxdWV1ZXMgLSBzLQ0KPiA+ZW1wdHlfZGVxdWV1ZXNfcHJl djsNCj4gKw0KPiArCXMtPmVtcHR5X2RlcXVldWVzX3ByZXYgPSBzLT5lbXB0eV9kZXF1ZXVlczsN Cj4gKw0KPiArCXVpbnQ2NF90IHBwaSA9IHMtPm51bV9kZXF1ZXVlX3BrdHMgLSBzLQ0KPiA+bnVt X2RlcXVldWVfcGt0c19wcmV2Ow0KPiArDQo+ICsJcy0+bnVtX2RlcXVldWVfcGt0c19wcmV2ID0g cy0+bnVtX2RlcXVldWVfcGt0czsNCj4gKw0KPiArCWlmIChzLT50aHJlc2hbcy0+Y3VyX2ZyZXFd LmJhc2VfZWRwaSA8IGN1cl9lZHBpKSB7DQo+ICsJCVJURV9MT0coREVCVUcsIFBPV0VSLCAiY3Vy X2VkcGkgaXMgdG9vIGxhcmdlICINCj4gKwkJCQkiY3VyIGVkcGkgJWxkICINCj4gKwkJCQkiYmFz ZSBlcGRpICVsZFxuIiwNCj4gKwkJCQljdXJfZWRwaSwNCj4gKwkJCQlzLT50aHJlc2hbcy0+Y3Vy X2ZyZXFdLmJhc2VfZWRwaSk7DQo+ICsJCS8qIFZhbHVlIHRvIG1ha2UgdXMgZmFpbCBuZWVkIGRl YnVnIGxvZyovDQo+ICsJCXJldHVybiAxMDAwVUw7DQo+ICsJfQ0KPiArDQo+ICsJcy0+ZWRwaV9h dltzLT5lYysrICUgQklOU19BVl0gPSBjdXJfZWRwaTsNCj4gKwlzLT5wcGlfYXZbcy0+cGMrKyAl IEJJTlNfQVZdID0gcHBpOw0KPiArDQo+ICsJZm9yIChqID0gMDsgaiA8IEJJTlNfQVY7IGorKykg ew0KPiArCQl0b3RfZWRwaSArPSBzLT5lZHBpX2F2W2pdOw0KPiArCQl0b3RfcHBpICs9IHMtPnBw aV9hdltqXTsNCj4gKwl9DQo+ICsNCj4gKwl0b3RfZWRwaSA9IHRvdF9lZHBpIC8gQklOU19BVjsN Cj4gKw0KPiArCXBlcmNlbnQgPSAxMDAgLSAodWludDMyX3QpKCgoZmxvYXQpdG90X2VkcGkgLw0K PiArCQkJKGZsb2F0KXMtPnRocmVzaFtzLT5jdXJfZnJlcV0uYmFzZV9lZHBpKSAqIDEwMCk7DQo+ ICsNCj4gKwlyZXR1cm4gKHVpbnQzMl90KXBlcmNlbnQ7DQo+ICt9DQo+ICsNCj4gKw0KPiArc3Rh dGljIGlubGluZSB2b2lkICBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkNCj4gK3VwZGF0 ZV9zdGF0c19ub3JtYWwoc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cykNCj4gK3sN Cj4gKwl1aW50MzJfdCBwZXJjZW50Ow0KPiArDQo+ICsJaWYgKHBvbGxfc3RhdHMtPnRocmVzaFtw b2xsX3N0YXRzLT5jdXJfZnJlcV0uYmFzZV9lZHBpID09IDApDQo+ICsJCXJldHVybjsNCj4gKw0K PiArCXBlcmNlbnQgPSB1cGRhdGVfc3RhdHMocG9sbF9zdGF0cyk7DQo+ICsNCj4gKwlpZiAocGVy Y2VudCA+IDEwMCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKHBvbGxfc3RhdHMtPmN1cl9m cmVxID09IExPVykNCj4gKwkJUlRFX0xPRyhJTkZPLCBQT1dFUiwgIlB1cmdlIE1vZGUgaXMgbm90 IHN1cHBvcnRlZFxuIik7DQo+ICsJZWxzZSBpZiAocG9sbF9zdGF0cy0+Y3VyX2ZyZXEgPT0gTUVE KSB7DQo+ICsNCj4gKwkJaWYgKHBlcmNlbnQgPg0KPiArCQkJcG9sbF9zdGF0cy0+dGhyZXNoW01F RF0udGhyZXNob2xkX3BlcmNlbnQpIHsNCj4gKw0KPiArCQkJaWYgKHBvbGxfc3RhdHMtPnRocmVz aG9sZF9jdHIgPA0KPiBJTlRFUlZBTFNfUEVSX1NFQ09ORCkNCj4gKwkJCQlwb2xsX3N0YXRzLT50 aHJlc2hvbGRfY3RyKys7DQo+ICsJCQllbHNlIHsNCj4gKwkJCQlzZXRfc3RhdGUocG9sbF9zdGF0 cywgSEdIX0JVU1kpOw0KPiArCQkJCVJURV9MT0coSU5GTywgUE9XRVIsICJNT1ZFIHRvIEhHSFxu Iik7DQo+ICsJCQl9DQo+ICsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCS8qIHJlc2V0ICovDQo+ICsJ CQkvKiBuZWVkIGRlYnVnIGxvZyAqLw0KPiArCQkJcG9sbF9zdGF0cy0+dGhyZXNob2xkX2N0ciA9 IDA7DQo+ICsJCX0NCj4gKw0KPiArCX0gZWxzZSBpZiAocG9sbF9zdGF0cy0+Y3VyX2ZyZXEgPT0g SEdIKSB7DQo+ICsNCj4gKwkJaWYgKHBlcmNlbnQgPA0KPiArCQkJCXBvbGxfc3RhdHMtPnRocmVz aFtIR0hdLnRocmVzaG9sZF9wZXJjZW50KQ0KPiB7DQo+ICsNCj4gKwkJCWlmIChwb2xsX3N0YXRz LT50aHJlc2hvbGRfY3RyIDwNCj4gSU5URVJWQUxTX1BFUl9TRUNPTkQpDQo+ICsJCQkJcG9sbF9z dGF0cy0+dGhyZXNob2xkX2N0cisrOw0KPiArCQkJZWxzZQ0KPiArCQkJCXNldF9zdGF0ZShwb2xs X3N0YXRzLCBNRURfTk9STUFMKTsNCj4gKwkJfSBlbHNlDQo+ICsJCQkvKiByZXNldCAqLw0KPiAr CQkJLyogbmVlZCBkZWJ1ZyBsb2cgKi8NCj4gKwkJCXBvbGxfc3RhdHMtPnRocmVzaG9sZF9jdHIg PSAwOw0KPiArDQo+ICsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2VtcHR5 X3BvbGxfdHJhaW5pbmcoc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cywNCj4gKwkJ dWludDMyX3QgbWF4X3RyYWluX2l0ZXIpDQo+ICt7DQo+ICsNCj4gKwlpZiAocG9sbF9zdGF0cy0+ aXRlcl9jb3VudGVyIDwgSU5URVJWQUxTX1BFUl9TRUNPTkQpIHsNCj4gKwkJcG9sbF9zdGF0cy0+ aXRlcl9jb3VudGVyKys7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArDQo+ICsJdXBk YXRlX3RyYWluaW5nX3N0YXRzKHBvbGxfc3RhdHMsDQo+ICsJCQlMT1csDQo+ICsJCQlmYWxzZSwN Cj4gKwkJCW1heF90cmFpbl9pdGVyKTsNCj4gKw0KPiArCXVwZGF0ZV90cmFpbmluZ19zdGF0cyhw b2xsX3N0YXRzLA0KPiArCQkJTUVELA0KPiArCQkJZmFsc2UsDQo+ICsJCQltYXhfdHJhaW5faXRl cik7DQo+ICsNCj4gKwl1cGRhdGVfdHJhaW5pbmdfc3RhdHMocG9sbF9zdGF0cywNCj4gKwkJCUhH SCwNCj4gKwkJCWZhbHNlLA0KPiArCQkJbWF4X3RyYWluX2l0ZXIpOw0KPiArDQo+ICsNCj4gKwlp ZiAocG9sbF9zdGF0cy0+dGhyZXNoW0xPV10udHJhaW5lZCA9PSB0cnVlDQo+ICsJCQkmJiBwb2xs X3N0YXRzLT50aHJlc2hbTUVEXS50cmFpbmVkID09IHRydWUNCj4gKwkJCSYmIHBvbGxfc3RhdHMt PnRocmVzaFtIR0hdLnRyYWluZWQgPT0gdHJ1ZSkgew0KPiArDQo+ICsJCXNldF9zdGF0ZShwb2xs X3N0YXRzLCBNRURfTk9STUFMKTsNCj4gKw0KPiArCQlSVEVfTE9HKElORk8sIFBPV0VSLCAiVHJh aW5pbmcgaXMgQ29tcGxldGUgZm9yICVkXG4iLA0KPiArCQkJCXBvbGxfc3RhdHMtPmxjb3JlX2lk KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArdm9pZA0KPiArcnRl X2VtcHR5X3BvbGxfZGV0ZWN0aW9uKHN0cnVjdCBydGVfdGltZXIgKnRpbSwNCj4gKwkJdm9pZCAq YXJnKQ0KPiArew0KPiArDQo+ICsJdWludDMyX3QgaTsNCj4gKw0KPiArCXN0cnVjdCBwcmlvcml0 eV93b3JrZXIgKnBvbGxfc3RhdHM7DQo+ICsNCj4gKwlSVEVfU0VUX1VTRUQodGltKTsNCj4gKw0K PiArCVJURV9TRVRfVVNFRChhcmcpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IE5VTV9OT0RF UzsgaSsrKSB7DQo+ICsNCj4gKwkJcG9sbF9zdGF0cyA9ICYoZXBfcGFyYW1zLT53cmtfZGF0YS53 cmtfc3RhdHNbaV0pOw0KPiArDQo+ICsJCWlmIChydGVfbGNvcmVfaXNfZW5hYmxlZChwb2xsX3N0 YXRzLT5sY29yZV9pZCkgPT0gMCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXN3aXRjaCAo cG9sbF9zdGF0cy0+cXVldWVfc3RhdGUpIHsNCj4gKwkJY2FzZShUUkFJTklORyk6DQo+ICsJCQll bXB0eV9wb2xsX3RyYWluaW5nKHBvbGxfc3RhdHMsDQo+ICsJCQkJCWVwX3BhcmFtcy0+bWF4X3Ry YWluX2l0ZXIpOw0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJY2FzZShIR0hfQlVTWSk6DQo+ICsJ CWNhc2UoTUVEX05PUk1BTCk6DQo+ICsJCQl1cGRhdGVfc3RhdHNfbm9ybWFsKHBvbGxfc3RhdHMp Ow0KPiArDQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQljYXNlKExPV19QVVJHRSk6DQo+ICsJCQli cmVhazsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCX0NCj4gKw0KPiAr CX0NCj4gKw0KPiArfQ0KPiArDQo+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVfcG93 ZXJfZW1wdHlfcG9sbF9zdGF0X2luaXQoc3RydWN0IGVwX3BhcmFtcyAqKmVwdHIsIHVpbnQ4X3QN Cj4gKmZyZXFfdGxiKQ0KPiArew0KPiArCXVpbnQzMl90IGk7DQo+ICsJLyogQWxsb2NhdGUgdGhl IGVwX3BhcmFtcyBzdHJ1Y3R1cmUgKi8NCj4gKwllcF9wYXJhbXMgPSBydGVfem1hbGxvY19zb2Nr ZXQoTlVMTCwNCj4gKwkJCXNpemVvZihzdHJ1Y3QgZXBfcGFyYW1zKSwNCj4gKwkJCTAsDQo+ICsJ CQlydGVfc29ja2V0X2lkKCkpOw0KPiArDQo+ICsJaWYgKCFlcF9wYXJhbXMpDQo+ICsJCXJ0ZV9w YW5pYygiQ2Fubm90IGFsbG9jYXRlIGhlYXAgbWVtb3J5IGZvciBlcF9wYXJhbXMgIg0KPiArCQkJ CSJmb3Igc29ja2V0ICVkXG4iLCBydGVfc29ja2V0X2lkKCkpOw0KPiArDQo+ICsJaWYgKGZyZXFf dGxiID09IE5VTEwpIHsNCj4gKwkJZnJlcV9pbmRleFtMT1ddID0gMTQ7DQo+ICsJCWZyZXFfaW5k ZXhbTUVEXSA9IDk7DQo+ICsJCWZyZXFfaW5kZXhbSEdIXSA9IDE7DQo+ICsJfSBlbHNlIHsNCj4g KwkJZnJlcV9pbmRleFtMT1ddID0gZnJlcV90bGJbTE9XXTsNCj4gKwkJZnJlcV9pbmRleFtNRURd ID0gZnJlcV90bGJbTUVEXTsNCj4gKwkJZnJlcV9pbmRleFtIR0hdID0gZnJlcV90bGJbSEdIXTsN Cj4gKwl9DQo+ICsNCj4gKwlSVEVfTE9HKElORk8sIFBPV0VSLCAiSW5pdGlhbGl6ZSB0aGUgRW1w dHkgUG9sbFxuIik7DQo+ICsNCj4gKwkvKiA1IHNlY29uZHMgd29ydGggb2YgdHJhaW5pbmcgKi8N Cj4gKwllcF9wYXJhbXMtPm1heF90cmFpbl9pdGVyID0gSU5URVJWQUxTX1BFUl9TRUNPTkQgKg0K PiBTRUNPTkRTX1RPX1RSQUlOX0ZPUjsNCj4gKw0KPiArCXN0cnVjdCBzdGF0c19kYXRhICp3ID0g JmVwX3BhcmFtcy0+d3JrX2RhdGE7DQo+ICsNCj4gKwkqZXB0ciA9IGVwX3BhcmFtczsNCj4gKw0K PiArCS8qIGluaXRpYWxpemUgYWxsIHdya19zdGF0cyBzdGF0ZSAqLw0KPiArCWZvciAoaSA9IDA7 IGkgPCBOVU1fTk9ERVM7IGkrKykgew0KPiArDQo+ICsJCWlmIChydGVfbGNvcmVfaXNfZW5hYmxl ZChpKSA9PSAwKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJc2V0X3N0YXRlKCZ3LT53cmtf c3RhdHNbaV0sIFRSQUlOSU5HKTsNCj4gKwkJLyppbml0IHRoZSBmcmVxcyB0YWJsZSAqLw0KPiAr CQl0b3RhbF9hdmFpbF9mcmVxc1tpXSA9IHJ0ZV9wb3dlcl9mcmVxcyhpLA0KPiArCQkJCWF2YWls X2ZyZXFzW2ldLA0KPiArCQkJCU5VTV9GUkVRUyk7DQo+ICsNCj4gKwkJaWYgKGdldF9mcmVxX2lu ZGV4KExPVykgPiB0b3RhbF9hdmFpbF9mcmVxc1tpXSkNCj4gKwkJCXJldHVybiAtMTsNCj4gKw0K PiArCX0NCj4gKw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgX19ydGVf ZXhwZXJpbWVudGFsDQo+ICtydGVfcG93ZXJfZW1wdHlfcG9sbF9zdGF0X2ZyZWUodm9pZCkNCj4g K3sNCj4gKw0KPiArCVJURV9MT0coSU5GTywgUE9XRVIsICJDbG9zZSB0aGUgRW1wdHkgUG9sbFxu Iik7DQo+ICsNCj4gKwlpZiAoZXBfcGFyYW1zICE9IE5VTEwpDQo+ICsJCXJ0ZV9mcmVlKGVwX3Bh cmFtcyk7DQo+ICt9DQo+ICsNCj4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gK3J0ZV9wb3dl cl9lbXB0eV9wb2xsX3N0YXRfdXBkYXRlKHVuc2lnbmVkIGludCBsY29yZV9pZCkNCj4gK3sNCj4g KwlzdHJ1Y3QgcHJpb3JpdHlfd29ya2VyICpwb2xsX3N0YXRzOw0KPiArDQo+ICsJaWYgKGxjb3Jl X2lkID49IE5VTV9OT0RFUykNCj4gKwkJcmV0dXJuIC0xOw0KPiArDQo+ICsJcG9sbF9zdGF0cyA9 ICYoZXBfcGFyYW1zLT53cmtfZGF0YS53cmtfc3RhdHNbbGNvcmVfaWRdKTsNCj4gKw0KPiArCWlm IChwb2xsX3N0YXRzLT5sY29yZV9pZCA9PSAwKQ0KPiArCQlwb2xsX3N0YXRzLT5sY29yZV9pZCA9 IGxjb3JlX2lkOw0KPiArDQo+ICsJcG9sbF9zdGF0cy0+ZW1wdHlfZGVxdWV1ZXMrKzsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ICty dGVfcG93ZXJfcG9sbF9zdGF0X3VwZGF0ZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQsIHVpbnQ4X3Qg bmJfcGt0KQ0KPiArew0KPiArDQo+ICsJc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0 czsNCj4gKw0KPiArCWlmIChsY29yZV9pZCA+PSBOVU1fTk9ERVMpDQo+ICsJCXJldHVybiAtMTsN Cj4gKw0KPiArCXBvbGxfc3RhdHMgPSAmKGVwX3BhcmFtcy0+d3JrX2RhdGEud3JrX3N0YXRzW2xj b3JlX2lkXSk7DQo+ICsNCj4gKwlpZiAocG9sbF9zdGF0cy0+bGNvcmVfaWQgPT0gMCkNCj4gKwkJ cG9sbF9zdGF0cy0+bGNvcmVfaWQgPSBsY29yZV9pZDsNCj4gKw0KPiArCXBvbGxfc3RhdHMtPm51 bV9kZXF1ZXVlX3BrdHMgKz0gbmJfcGt0Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gKw0KPiArdWludDY0X3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVfcG93ZXJfZW1wdHlf cG9sbF9zdGF0X2ZldGNoKHVuc2lnbmVkIGludCBsY29yZV9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg cHJpb3JpdHlfd29ya2VyICpwb2xsX3N0YXRzOw0KPiArDQo+ICsJaWYgKGxjb3JlX2lkID49IE5V TV9OT0RFUykNCj4gKwkJcmV0dXJuIC0xOw0KPiArDQo+ICsJcG9sbF9zdGF0cyA9ICYoZXBfcGFy YW1zLT53cmtfZGF0YS53cmtfc3RhdHNbbGNvcmVfaWRdKTsNCj4gKw0KPiArCWlmIChwb2xsX3N0 YXRzLT5sY29yZV9pZCA9PSAwKQ0KPiArCQlwb2xsX3N0YXRzLT5sY29yZV9pZCA9IGxjb3JlX2lk Ow0KPiArDQo+ICsJcmV0dXJuIHBvbGxfc3RhdHMtPmVtcHR5X2RlcXVldWVzOw0KPiArfQ0KPiAr DQo+ICt1aW50NjRfdCBfX3J0ZV9leHBlcmltZW50YWwNCj4gK3J0ZV9wb3dlcl9wb2xsX3N0YXRf ZmV0Y2godW5zaWduZWQgaW50IGxjb3JlX2lkKQ0KPiArew0KPiArCXN0cnVjdCBwcmlvcml0eV93 b3JrZXIgKnBvbGxfc3RhdHM7DQo+ICsNCj4gKwlpZiAobGNvcmVfaWQgPj0gTlVNX05PREVTKQ0K PiArCQlyZXR1cm4gLTE7DQo+ICsNCj4gKwlwb2xsX3N0YXRzID0gJihlcF9wYXJhbXMtPndya19k YXRhLndya19zdGF0c1tsY29yZV9pZF0pOw0KPiArDQo+ICsJaWYgKHBvbGxfc3RhdHMtPmxjb3Jl X2lkID09IDApDQo+ICsJCXBvbGxfc3RhdHMtPmxjb3JlX2lkID0gbGNvcmVfaWQ7DQo+ICsNCj4g KwlyZXR1cm4gcG9sbF9zdGF0cy0+bnVtX2RlcXVldWVfcGt0czsNCj4gK30NCj4gZGlmZiAtLWdp dCBhL2xpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuaA0KPiBiL2xpYi9saWJy dGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwLi5lNDM5ODFmDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2xp YnJ0ZV9wb3dlci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5oDQo+IEBAIC0wLDAgKzEsMjA1IEBADQo+ ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmln aHQoYykgMjAxMC0yMDE4IEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRl ZiBfUlRFX0VNUFRZX1BPTExfSA0KPiArI2RlZmluZSBfUlRFX0VNUFRZX1BPTExfSA0KPiArDQo+ ICsvKioNCj4gKyAqIEBmaWxlDQo+ICsgKiBSVEUgUG93ZXIgTWFuYWdlbWVudA0KPiArICovDQo+ ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0KPiArDQo+ICsj aW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9ieXRlb3JkZXIuaD4NCj4g KyNpbmNsdWRlIDxydGVfbG9nLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3N0cmluZ19mbnMuaD4NCj4g KyNpbmNsdWRlIDxydGVfcG93ZXIuaD4NCj4gKyNpbmNsdWRlIDxydGVfdGltZXIuaD4NCj4gKw0K PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ICtleHRlcm4gIkMiIHsNCj4gKyNlbmRpZg0KPiArDQo+ ICsjZGVmaW5lIE5VTV9GUkVRUyAyMA0KPiArDQo+ICsjZGVmaW5lIEJJTlNfQVYgNCAvKiBIYXMg dG8gYmUgXjIgKi8NCj4gKw0KPiArI2RlZmluZSBEUk9QIChOVU1fRElSRUNUSU9OUyAqIE5VTV9E RVZJQ0VTKQ0KPiArDQo+ICsjZGVmaW5lIE5VTV9QUklPUklUSUVTICAgICAgICAgIDINCj4gKw0K PiArI2RlZmluZSBOVU1fTk9ERVMgICAgICAgICAzMSAvKiBBbnkgcmVzZWFuYWJsZSBwcmltZSBu dW1iZXIgc2hvdWxkDQo+IHdvcmsqLw0KPiArDQo+ICsvKiBQcm9jZXNzb3IgUG93ZXIgU3RhdGUg Ki8NCj4gK2VudW0gZnJlcV92YWwgew0KPiArCUxPVywNCj4gKwlNRUQsDQo+ICsJSEdILA0KPiAr CU5VTV9GUkVRID0gTlVNX0ZSRVFTDQo+ICt9Ow0KPiArDQo+ICsNCj4gKy8qIFF1ZXVlIFBvbGxp bmcgU3RhdGUgKi8NCj4gK2VudW0gcXVldWVfc3RhdGUgew0KPiArCVRSQUlOSU5HLCAvKiBOTyBU UkFGRklDICovDQo+ICsJTUVEX05PUk1BTCwgICAvKiBNRUQgKi8NCj4gKwlIR0hfQlVTWSwgICAg IC8qIEhJR0ggKi8NCj4gKwlMT1dfUFVSR0UsICAgIC8qIExPVyAqLw0KPiArfTsNCj4gKw0KPiAr LyogUXVldWUgU3RhdHMgKi8NCj4gK3N0cnVjdCBmcmVxX3RocmVzaG9sZCB7DQo+ICsNCj4gKwl1 aW50NjRfdCBiYXNlX2VkcGk7DQo+ICsJYm9vbCB0cmFpbmVkOw0KPiArCXVpbnQzMl90IHRocmVz aG9sZF9wZXJjZW50Ow0KPiArCXVpbnQzMl90IGN1cl90cmFpbl9pdGVyOw0KPiArfTsNCj4gKw0K PiArLyogRWFjaCBXb3JkZXIgVGhyZWFkIEVtcHR5IFBvbGwgU3RhdHMgKi8NCj4gK3N0cnVjdCBw cmlvcml0eV93b3JrZXIgew0KPiArDQo+ICsJLyogQ3VycmVudCBkZXF1ZXVlIGFuZCB0aHJvdWdo cHV0IGNvdW50cyAqLw0KPiArCS8qIFRoZXNlIDIgYXJlIHdyaXR0ZW4gdG8gYnkgdGhlIHdvcmtl ciB0aHJlYWRzICovDQo+ICsJLyogU28ga2VlcCB0aGVtIG9uIHRoZWlyIG93biBjYWNoZSBsaW5l ICovDQo+ICsJdWludDY0X3QgZW1wdHlfZGVxdWV1ZXM7DQo+ICsJdWludDY0X3QgbnVtX2RlcXVl dWVfcGt0czsNCj4gKw0KPiArCWVudW0gcXVldWVfc3RhdGUgcXVldWVfc3RhdGU7DQo+ICsNCj4g Kwl1aW50NjRfdCBlbXB0eV9kZXF1ZXVlc19wcmV2Ow0KPiArCXVpbnQ2NF90IG51bV9kZXF1ZXVl X3BrdHNfcHJldjsNCj4gKw0KPiArCS8qIFVzZWQgZm9yIHRyYWluaW5nIG9ubHkgKi8NCj4gKwlz dHJ1Y3QgZnJlcV90aHJlc2hvbGQgdGhyZXNoW05VTV9GUkVRXTsNCj4gKwllbnVtIGZyZXFfdmFs IGN1cl9mcmVxOw0KPiArDQo+ICsJLyogYnVja2V0IGFycmF5cyB0byBjYWxjdWxhdGUgdGhlIGF2 ZXJhZ2VzICovDQo+ICsJdWludDY0X3QgZWRwaV9hdltCSU5TX0FWXTsNCj4gKwl1aW50MzJfdCAg ZWM7DQo+ICsJdWludDY0X3QgcHBpX2F2W0JJTlNfQVZdOw0KPiArCXVpbnQzMl90ICBwYzsNCj4g Kw0KPiArCXVpbnQzMl90IGxjb3JlX2lkOw0KPiArCXVpbnQzMl90IGl0ZXJfY291bnRlcjsNCj4g Kwl1aW50MzJfdCB0aHJlc2hvbGRfY3RyOw0KPiArCXVpbnQzMl90IGRpc3BsYXlfY3RyOw0KPiAr CXVpbnQ4X3QgIGRldl9pZDsNCj4gKw0KPiArfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiArDQo+ ICsNCj4gK3N0cnVjdCBzdGF0c19kYXRhIHsNCj4gKw0KPiArCXN0cnVjdCBwcmlvcml0eV93b3Jr ZXIgd3JrX3N0YXRzW05VTV9OT0RFU107DQo+ICsNCj4gKwkvKiBmbGFnIHRvIHN0b3AgcnggdGhy ZWFkcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdHJhaW5pbmcgb3ZlciAqLw0KPiArCWJvb2wg c3RhcnRfcng7DQo+ICsNCj4gK307DQo+ICsNCj4gKy8qIEVtcHR5IFBvbGwgUGFyYW1ldGVycyAq Lw0KPiArc3RydWN0IGVwX3BhcmFtcyB7DQo+ICsNCj4gKwkvKiBUaW1lciByZWxhdGVkIHN0dWZm ICovDQo+ICsJdWludDY0X3QgaW50ZXJ2YWxfdGlja3M7DQo+ICsJdWludDMyX3QgbWF4X3RyYWlu X2l0ZXI7DQo+ICsNCj4gKwlzdHJ1Y3QgcnRlX3RpbWVyIHRpbWVyMDsNCj4gKwlzdHJ1Y3Qgc3Rh dHNfZGF0YSB3cmtfZGF0YTsNCj4gK307DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBJbml0aWFs aXplIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c3RlbS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZXB0 cg0KPiArICogICB0aGUgc3RydWN0dXJlIG9mIGVtcHR5IHBvbGwgY29uZmlndXJhdGlvbg0KPiAr ICogQGZyZXFfdGxiDQo+ICsgKiAgIHRoZSBwb3dlciBzdGF0ZS9mcmVxdWVuY3kgIG1hcHBpbmcg dGFibGUNCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgLSAwIG9uIHN1Y2Nlc3MuDQo+ICsg KiAgLSBOZWdhdGl2ZSBvbiBlcnJvci4NCj4gKyAqLw0KPiAraW50IF9fcnRlX2V4cGVyaW1lbnRh bA0KPiArcnRlX3Bvd2VyX2VtcHR5X3BvbGxfc3RhdF9pbml0KHN0cnVjdCBlcF9wYXJhbXMgKipl cHRyLCB1aW50OF90DQo+ICpmcmVxX3RsYik7DQo+ICsNCj4gKy8qKg0KPiArICogRnJlZSB0aGUg cmVzb3VyY2UgaG9sZCBieSBwb3dlciBtYW5hZ2VtZW50IHN5c3RlbS4NCj4gKyAqLw0KPiArdm9p ZCBfX3J0ZV9leHBlcmltZW50YWwNCj4gK3J0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfZnJlZSh2 b2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBVcGRhdGUgc3BlY2lmaWMgY29yZSBlbXB0eSBwb2xs IGNvdW50ZXINCj4gKyAqIEl0J3Mgbm90IHRocmVhZCBzYWZlLg0KPiArICoNCj4gKyAqIEBwYXJh bSBsY29yZV9pZA0KPiArICogIGxjb3JlIGlkDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICog IC0gMCBvbiBzdWNjZXNzLg0KPiArICogIC0gTmVnYXRpdmUgb24gZXJyb3IuDQo+ICsgKi8NCj4g K2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gK3J0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfdXBk YXRlKHVuc2lnbmVkIGludCBsY29yZV9pZCk7DQo+ICsNCj4gKy8qKg0KPiArICogVXBkYXRlIHNw ZWNpZmljIGNvcmUgdmFsaWQgcG9sbCBjb3VudGVyLCBub3QgdGhyZWFkIHNhZmUuDQo+ICsgKg0K PiArICogQHBhcmFtIGxjb3JlX2lkDQo+ICsgKiAgbGNvcmUgaWQuDQo+ICsgKiBAcGFyYW0gbmJf cGt0DQo+ICsgKiAgVGhlIHBhY2tldCBudW1iZXIgb2Ygb25lIHZhbGlkIHBvbGwuDQo+ICsgKg0K PiArICogQHJldHVybg0KPiArICogIC0gMCBvbiBzdWNjZXNzLg0KPiArICogIC0gTmVnYXRpdmUg b24gZXJyb3IuDQo+ICsgKi8NCj4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gK3J0ZV9wb3dl cl9wb2xsX3N0YXRfdXBkYXRlKHVuc2lnbmVkIGludCBsY29yZV9pZCwgdWludDhfdCBuYl9wa3Qp Ow0KPiArDQo+ICsvKioNCj4gKyAqIEZldGNoIHNwZWNpZmljIGNvcmUgZW1wdHkgcG9sbCBjb3Vu dGVyLg0KPiArICoNCj4gKyAqIEBwYXJhbSBsY29yZV9pZA0KPiArICogIGxjb3JlIGlkDQo+ICsg Kg0KPiArICogQHJldHVybg0KPiArICogIEN1cnJlbnQgbGNvcmUgZW1wdHkgcG9sbCBjb3VudGVy IHZhbHVlLg0KPiArICovDQo+ICt1aW50NjRfdCBfX3J0ZV9leHBlcmltZW50YWwNCj4gK3J0ZV9w b3dlcl9lbXB0eV9wb2xsX3N0YXRfZmV0Y2godW5zaWduZWQgaW50IGxjb3JlX2lkKTsNCj4gKw0K PiArLyoqDQo+ICsgKiBGZXRjaCBzcGVjaWZpYyBjb3JlIHZhbGlkIHBvbGwgY291bnRlci4NCj4g KyAqDQo+ICsgKiBAcGFyYW0gbGNvcmVfaWQNCj4gKyAqICBsY29yZSBpZA0KPiArICoNCj4gKyAq IEByZXR1cm4NCj4gKyAqICBDdXJyZW50IGxjb3JlIHZhbGlkIHBvbGwgY291bnRlciB2YWx1ZS4N Cj4gKyAqLw0KPiArdWludDY0X3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVfcG93ZXJfcG9s bF9zdGF0X2ZldGNoKHVuc2lnbmVkIGludCBsY29yZV9pZCk7DQo+ICsNCj4gKy8qKg0KPiArICog RW1wdHkgcG9sbCAgc3RhdGUgY2hhbmdlIGRldGVjdGlvbiBmdW5jdGlvbg0KPiArICoNCj4gKyAq IEBwYXJhbSAgdGltDQo+ICsgKiAgVGhlIHRpbWVyIHN0cnVjdHVyZQ0KPiArICogQHBhcmFtICBh cmcNCj4gKyAqICBUaGUgY3VzdG9taXplZCBwYXJhbWV0ZXINCj4gKyAqLw0KPiArdm9pZCAgX19y dGVfZXhwZXJpbWVudGFsDQo+ICtydGVfZW1wdHlfcG9sbF9kZXRlY3Rpb24oc3RydWN0IHJ0ZV90 aW1lciAqdGltLCB2b2lkICphcmcpOw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK30N Cj4gKyNlbmRpZg0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcG93 ZXIvcnRlX3Bvd2VyX3ZlcnNpb24ubWFwDQo+IGIvbGliL2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJf dmVyc2lvbi5tYXANCj4gaW5kZXggZGQ1ODdkZi4uMTFmZmRmYiAxMDA2NDQNCj4gLS0tIGEvbGli L2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfdmVyc2lvbi5tYXANCj4gKysrIGIvbGliL2xpYnJ0ZV9w b3dlci9ydGVfcG93ZXJfdmVyc2lvbi5tYXANCj4gQEAgLTMzLDMgKzMzLDE2IEBAIERQREtfMTgu MDggew0KPiAgCXJ0ZV9wb3dlcl9nZXRfY2FwYWJpbGl0aWVzOw0KPiANCj4gIH0gRFBES18xNy4x MTsNCj4gKw0KPiArRVhQRVJJTUVOVEFMIHsNCj4gKyAgICAgICAgZ2xvYmFsOg0KPiArDQo+ICsg ICAgICAgIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfaW5pdDsNCj4gKyAgICAgICAgcnRlX3Bv d2VyX2VtcHR5X3BvbGxfc3RhdF9mcmVlOw0KPiArICAgICAgICBydGVfcG93ZXJfZW1wdHlfcG9s bF9zdGF0X3VwZGF0ZTsNCj4gKyAgICAgICAgcnRlX3Bvd2VyX2VtcHR5X3BvbGxfc3RhdF9mZXRj aDsNCj4gKyAgICAgICAgcnRlX3Bvd2VyX3BvbGxfc3RhdF9mZXRjaDsNCj4gKyAgICAgICAgcnRl X3Bvd2VyX3BvbGxfc3RhdF91cGRhdGU7DQo+ICsgICAgICAgIHJ0ZV9lbXB0eV9wb2xsX2RldGVj dGlvbjsNCj4gKw0KPiArfTsNCj4gLS0NCj4gMi43LjUNCg0K