From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Permerror (SPF Permanent Error: Two or more type TXT spf records found.) identity=mailfrom; client-ip=192.55.52.88; helo=mga01.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1882021AE30DB for ; Sun, 2 Sep 2018 23:12:20 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Sep 2018 23:12:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,323,1531810800"; d="scan'208";a="82490925" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga002.fm.intel.com with ESMTP; 02 Sep 2018 23:12:00 -0700 Received: from fmsmsx122.amr.corp.intel.com (10.18.125.37) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 2 Sep 2018 23:12:00 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx122.amr.corp.intel.com (10.18.125.37) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 2 Sep 2018 23:12:00 -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; Mon, 3 Sep 2018 14:11:57 +0800 From: "Zeng, Star" To: "Ni, Ruiyu" , "Yao, Jiewen" , "Kinney, Michael D" CC: "edk2-devel@lists.01.org" , Younas khan , "Gao, Liming" , "Zeng, Star" Thread-Topic: [edk2] [PATCH 1/6] MdePkg UefiLib: Add new EfiFindAcpiTableBySignature() API Thread-Index: AQHUQR3tMsGxdk8RAEWjSOjGEFnM36TZO1YAgABL1gCAAG5UgIAD48yA//+m24CAAInYYA== Date: Mon, 3 Sep 2018 06:11:57 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BBB4B68@shsmsx102.ccr.corp.intel.com> References: <1535714959-73472-1-git-send-email-star.zeng@intel.com> <1535714959-73472-2-git-send-email-star.zeng@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD36A49@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD37F11@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBB49F2@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D5BDEFCAF@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5BDEFCAF@SHSMSX104.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 1/6] MdePkg UefiLib: Add new EfiFindAcpiTableBySignature() API X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Sep 2018 06:12:21 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzLg0KT2ssIHBsZWFzZSBoZWxwIGFuZCB3ZSBjYW4gaGF2ZSBnb29kIGFuZCBmbGV4aWJs ZSBpbnRlcmZhY2UocykgZm9yIGJvdGggcHJvZHVjZXIgYW5kIGNvbnN1bWVyLg0KDQpGaXJzdCwg dGhlcmUgYXJlIHR3byBjYXNlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLg0KMS4gU2luZ2xlIHRhYmxl LCBsaWtlIEZBRFQsIEZBQ1MsIERTRFQsIGV0Yy4NCjIuIE11bHRpcGxlIHRhYmxlcywgbGlrZSBT U0RULCBldGMuDQoNClRoZW4sIHdlIGhhdmUgdHdvIHNvbHV0aW9ucy4NClMxOg0KT25lIGludGVy ZmFjZSBmb3Igc2luZ2xlIHRhYmxlIGNhc2UsIGNvbnN1bWVyIG9ubHkgbmVlZHMgaW5wdXQgU2ln bmF0dXJlLCBoYXMgbm8gbmVlZCBpbnB1dCBwcmV2aW91cyByZXR1cm5lZCBUYWJsZS4gTGlrZSBH ZXRGaXJzdEd1aWRIb2I/DQpPbmUgaW50ZXJmYWNlIGZvciBtdWx0aXBsZSB0YWJsZSBjYXNlLCBj b25zdW1lciBuZWVkcyBpbnB1dCBTaWduYXR1cmUgYW5kIHByZXZpb3VzIHJldHVybmVkIFRhYmxl LiBMaWtlIEdldE5leHRHdWlkSG9iPyBDb3VsZCB3ZSBhZGQgaXQgbGF0ZXIgYmFzZWQgb24gcmVh bCByZXF1ZXN0Pw0KUzI6DQpPbmUgaW50ZXJmYWNlIGZvciBib3RoIHNpbmdsZSB0YWJsZSBhbmQg bXVsdGlwbGUgdGFibGUgY2FzZXMsIGNvbnN1bWVyIG5lZWRzIGlucHV0IFNpZ25hdHVyZSBhbmQg cHJldmlvdXMgcmV0dXJuZWQgVGFibGUuIERvZXMgY29uc3VtZXIgbmVlZCBpbnB1dCB0aGUgdGFi bGUgaGVhZGVyIHN0b3JlZCBpbiBjb25maWd1cmF0aW9uIHRhYmxlIGJ5IGl0c2VsZihnZXR0aW5n IGNvbmZpZ3VyYXRpb24gdGFibGUpPw0KDQoNCklmIHdlIGxpa2UgUzIsIHRoZSBpbnRlcmZhY2Ug c2hvdWxkIGJlIGxpa2UgYmVsb3c/DQoNCi8qKg0KICBUaGlzIGZ1bmN0aW9uIGxvY2F0ZXMgbmV4 dCBBQ1BJIHRhYmxlIGJhc2VkIG9uIFNpZ25hdHVyZSBhbmQgcHJldmlvdXMgcmV0dXJuZWQgVGFi bGUuDQogIElmIHRoZSBpbnB1dCBwcmV2aW91cyByZXR1cm5lZCBUYWJsZSBpcyBOVUxMLCB0aGlz IGZ1bmN0aW9uIHdpbGwgbG9jYXRlIG5leHQgdGFibGUNCiAgaW4gZ0VmaUFjcGkyMFRhYmxlR3Vp ZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZSBmaXJzdCwgYW5kIHRoZW4gZ0VmaUFjcGkxMFRh YmxlR3VpZA0KICBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZS4NCiAgSWYgdGhlIGlucHV0IHBy ZXZpb3VzIHJldHVybmVkIFRhYmxlIGlzIG5vdCBOVUxMIGFuZCBjb3VsZCBiZSBsb2NhdGVkIGlu DQogIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUsIHRoaXMg ZnVuY3Rpb24gd2lsbCBqdXN0IGxvY2F0ZSBuZXh0DQogIHRhYmxlIGluIGdFZmlBY3BpMjBUYWJs ZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUsIG90aGVyd2lzZSBnRWZpQWNwaTEwVGFi bGVHdWlkDQogIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KDQogIEBwYXJhbSBTaWduYXR1 cmUgIEFDUEkgdGFibGUgc2lnbmF0dXJlLg0KICBAcGFyYW0gVGFibGUgICAgICBQb2ludGVyIHRv IHByZXZpb3VzIHJldHVybmVkIFRhYmxlLCBvciBOVUxMIHRvIGxvY2F0ZSBmaXJzdCB0YWJsZS4N Cg0KICBAcmV0dXJuIE5leHQgQUNQSSB0YWJsZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCg0KKiov DQpFRklfQUNQSV9DT01NT05fSEVBREVSICoNCkVGSUFQSQ0KRWZpTG9jYXRlTmV4dEFjcGlUYWJs ZSAoDQogIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZSwNCiAgSU4gRUZJX0FD UElfQ09NTU9OX0hFQURFUiAgKlRhYmxlDQogICkNCg0KDQoNClRoYW5rcywNClN0YXINCi0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBOaSwgUnVpeXUgDQpTZW50OiBNb25kYXksIFNl cHRlbWJlciAzLCAyMDE4IDE6MDkgUE0NClRvOiBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwu Y29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVs IEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEu b3JnOyBZb3VuYXMga2hhbiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+OyBHYW8sIExpbWlu ZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZd IE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3IEVmaUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSgpIEFQ SQ0KDQpUaGF0J3MgZmluZSB0byBiZSBpbiBVZWZpTGliLiBJdCdzIGFscmVhZHkgYSBjb21ibyBs aWJyYXJ5Lg0KDQpCdXQgSSBkbyByZWNvbW1lbmQgd2UgdGhpbmsgYWJvdXQgaG93IHRvIGhhbmRs ZSBtdWx0aXBsZSB0YWJsZXMgd2l0aCBzYW1lIHNpZ25hdHVyZS4NCldoZW4gd2UgYXJlIGFkZGlu ZyBuZXcgQVBJcywgd2Ugbm90IG9ubHkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZXhpc3RpbmcgcmVh bCBjYXNlLCBidXQgYWxzbyB3ZSBuZWVkIHRvIGdlbmVyYWxpemUgdGhlIHJlYWwgY2FzZXMgYW5k IHRyeSB0byB0aGluayBhYm91dCB0aGUgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2UuDQoNCg0KVGhh bmtzL1JheQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFplbmcsIFN0 YXINCj4gU2VudDogTW9uZGF5LCBTZXB0ZW1iZXIgMywgMjAxOCAxMToyNiBBTQ0KPiBUbzogWWFv LCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgTmksIFJ1aXl1IA0KPiA8cnVpeXUubmlA aW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pg0KPiBDYzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IFlvdW5hcyBraGFuIDxwbWR5b3VuYXNr aGFuNzg2QGdtYWlsLmNvbT47IA0KPiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+ OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSRTogW2VkazJd IFtQQVRDSCAxLzZdIE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3DQo+IEVmaUZpbmRBY3BpVGFibGVC eVNpZ25hdHVyZSgpIEFQSQ0KPiANCj4gR29vZCBpZGVhLg0KPiANCj4gSSBkaWQgY29uc2lkZXIg RFNEVCBhbmQgbXVsdGlwbGUgU1NEVHMgY2FzZXMuIEJ1dCBJIGRpZCBub3QgZmluZCBhbnkgDQo+ IHJlYWwgY2FzZSBmb3IgdGhlbS4NCj4gU28gSSBtYWRlIHRoZSBjb2RlIHNpbXBseSBmb3IgY3Vy cmVudCBjYXNlcywgYW5kIHRoZSBjb2RlIGNhbiBiZSANCj4gZWFzaWx5IGVuaGFuY2VkIGxhdGVy IGZvciBEU0RULCBhIG5ldyBBUEkgY2FuIGJlIGFkZGVkIGxhdGVyIGZvciBtdWx0aXBsZSBTU0RU cy4NCj4gDQo+IEFib3V0IGFkZGluZyB0aGUgbmV3IEFQSSBpbiBVZWZpTGliIFZTIG5ldyBsaWJy YXJ5IGNsYXNzLCBJIGRpZCBhbHNvIA0KPiBjb25zaWRlciBpdCBhbmQgZXZlbiBjcmVhdGVkIGNv ZGUgZm9yIG5ldyBsaWJyYXJ5IGNsYXNzIA0KPiAoZ2l0QGdpdGh1Yi5jb206bHplbmcxNC9lZGsy LmdpdCBicmFuY2ggDQo+IEZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZV9VZWZpQWNwaVRhYmxlTGli KS4NCj4gQnV0IEkgcmVtZW1iZXIgSSBkaWQgZGlzY3VzcyBpdCB3aXRoIE1pa2UgYW5kIEppZXdl biwgd2UgcmVjb21tZW5kZWQgDQo+IFVlZmlMaWIgYXMgaXQgd2lsbCBkbyBub3QgcmVxdWlyZSBh bnkgcGxhdGZvcm0gY2hhbmdlLg0KPiANCj4gDQo+IA0KPiBUaGFua3MsDQo+IFN0YXINCj4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWFvLCBKaWV3ZW4NCj4gU2VudDogU2F0 dXJkYXksIFNlcHRlbWJlciAxLCAyMDE4IDc6MDQgQU0NCj4gVG86IE5pLCBSdWl5dSA8cnVpeXUu bmlAaW50ZWwuY29tPg0KPiBDYzogWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IGVk azItZGV2ZWxAbGlzdHMuMDEub3JnOyBLaW5uZXksIA0KPiBNaWNoYWVsIEQgPG1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPjsgWW91bmFzIGtoYW4gDQo+IDxwbWR5b3VuYXNraGFuNzg2QGdtYWls LmNvbT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6 IFtlZGsyXSBbUEFUQ0ggMS82XSBNZGVQa2cgVWVmaUxpYjogQWRkIG5ldw0KPiBFZmlGaW5kQWNw aVRhYmxlQnlTaWduYXR1cmUoKSBBUEkNCj4gDQo+IEdvb2QgaWRlYSBvbiBMb2NhdGVOZXh0QWNw aVRhYmxlKCkuDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZy b206IE5pLCBSdWl5dQ0KPiA+IFNlbnQ6IFNhdHVyZGF5LCBTZXB0ZW1iZXIgMSwgMjAxOCAxMjoy OSBBTQ0KPiA+IFRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6 IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9y ZzsgDQo+ID4gS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsg WW91bmFzIGtoYW4gDQo+ID4gPHBtZHlvdW5hc2toYW43ODZAZ21haWwuY29tPjsgR2FvLCBMaW1p bmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENI IDEvNl0gTWRlUGtnIFVlZmlMaWI6IEFkZCBuZXcNCj4gPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWdu YXR1cmUoKSBBUEkNCj4gPg0KPiA+IEkgdGhpbmsgTG9jYXRlTmV4dEFjcGlUYWJsZSgpIGlzIG1v cmUgcHJvcGVyIHRvIGhhbmRsZSB0aGUgbXVsdGlwbGUgDQo+ID4gdGFibGVzIHdpdGggc2FtZSBz aWduYXR1cmUuIEl0IHdpbGwgY2FycnkgdGhyZWUgcGFyYW1ldGVycywgb25lIGlzIA0KPiA+IHRo ZSB0YWJsZSBoZWFkZXIgc3RvcmVkIGluIGNvbmZpZ3VyYXRpb24gdGFibGUsIG9uZSBpcyB0aGUg DQo+ID4gc2lnbmF0dXJlLCBhbm90aGVyIGlzDQo+IHRoZSBwcmV2aW91cyBsb2NhdGVkIHRhYmxl Lg0KPiA+IENhbiB3ZSByZXR1cm4gYSBjb21tb24gdGFibGUgaGVhZGVyIG90aGVyIHRoYW4gdm9p ZCo/DQo+ID4NCj4gPiBJcyB0aGVyZSBiZXR0ZXIgcGxhY2Ugb3RoZXIgdGhhbiBVZWZpTGliPw0K PiA+IERvIHdlIG5lZWQgdG8gYWRkIGEgbmV3IGxpYnJhcnkgY2xhc3MgbGlrZSBBY3BpTGliPw0K PiA+DQo+ID4g5Y+R6Ieq5oiR55qEIGlQaG9uZQ0KPiA+DQo+ID4gPiDlnKggMjAxOOW5tDjmnIgz MeaXpe+8jOS4i+WNiDg6MDDvvIxZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ IOWGmQ0KPiA+IOmBk++8mg0KPiA+ID4NCj4gPiA+IEdvb2QgZW5oYW5jZW1lbnQuDQo+ID4gPg0K PiA+ID4gSSBoYXZlIDIgYWRkaXRpb25hbCB0aG91Z2h0Og0KPiA+ID4NCj4gPiA+IDEpIEhvdyB0 byBoYW5kbGUgRFNEVD8NCj4gPiA+IFdlIGhhdmUgc3BlY2lhbCBjb2RlIHRvIGhhbmRsZSBGQUNT LCBidXQgbm8gRFNEVC4NCj4gPiA+DQo+ID4gPiAyKSBIb3cgdG8gaGFuZGxlIFNTRFQgb3Igb3Ro ZXIgbXVsdGlwbGUgQUNQSSB0YWJsZXM/DQo+ID4gPiBXZSBtYXkgaGF2ZSBtdWx0aXBsZSBTU0RU LiBVc3VhbGx5LCBpdCBpcyBpZGVudGlmaWVkIGFzIE9FTUlELg0KPiA+ID4gRG8gd2Ugd2FudCB0 byBwcm92aWRlIHNpbWlsYXIgZnVuY3Rpb24gZm9yIHRoZW0/DQo+ID4gPg0KPiA+ID4gQW55d2F5 LCBqdXN0ICphZGRpdGlvbmFsKiB0aG91Z2h0LiA6LSkgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBp cyANCj4gPiA+IGdvb2QgZW5vdWdoIGZvciBjaGVjayBpbi4NCj4gPiA+DQo+ID4gPiBSZXZpZXdl ZC1ieTogSmlld2VuLnlhb0BpbnRlbC5jb20NCj4gPiA+DQo+ID4gPiBUaGFuayB5b3UNCj4gPiA+ IFlhbyBKaWV3ZW4NCj4gPiA+DQo+ID4gPg0KPiA+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+ID4gPj4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0Bs aXN0cy4wMS5vcmddIE9uIA0KPiA+ID4+IEJlaGFsZiBPZg0KPiA+IFN0YXINCj4gPiA+PiBaZW5n DQo+ID4gPj4gU2VudDogRnJpZGF5LCBBdWd1c3QgMzEsIDIwMTggNzoyOSBQTQ0KPiA+ID4+IFRv OiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBZb3VuYXMga2hhbiANCj4gPiA+PiA8cG1keW91 bmFza2hhbjc4NkBnbWFpbC5jb20+OyBZYW8sIEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5j b20+Ow0KPiA+IEdhbywNCj4gPiA+PiBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgWmVu ZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gPiA+PiBTdWJqZWN0OiBbZWRrMl0gW1BB VENIIDEvNl0gTWRlUGtnIFVlZmlMaWI6IEFkZCBuZXcNCj4gPiA+PiBFZmlGaW5kQWNwaVRhYmxl QnlTaWduYXR1cmUoKSBBUEkNCj4gPiA+Pg0KPiA+ID4+IGh0dHBzOi8vYnVnemlsbGEudGlhbm9j b3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY3DQo+ID4gPj4gUmVxdWVzdCB0byBhZGQgYSBsaWJy YXJ5IGZ1bmN0aW9uIGZvciBHZXRBY3BpVGFibGUoKSBpbiBvcmRlciB0byANCj4gPiA+PiBnZXQg QUNQSSB0YWJsZSB1c2luZyBzaWduYXR1cmUgYXMgaW5wdXQuDQo+ID4gPj4NCj4gPiA+PiBBZnRl ciBldmFsdWF0aW9uLCB3ZSBmb3VuZCB0aGVyZSBhcmUgbWFueSBkdXBsaWNhdGVkIGNvZGUgdG8g ZmluZCANCj4gPiA+PiBBQ1BJIHRhYmxlIGJ5IHNpZ25hdHVyZSBpbiBkaWZmZXJlbnQgbW9kdWxl cy4NCj4gPiA+Pg0KPiA+ID4+IFRoaXMgcGF0Y2ggYWRkcyBuZXcgRWZpRmluZEFjcGlUYWJsZUJ5 U2lnbmF0dXJlKCkgQVBJIGluIFVlZmlMaWIgDQo+ID4gPj4gZm9yIHRoZSByZXF1ZXN0IGFuZCBh bHNvIHRoZSBmb2xsb3dpbmcgcGF0Y2ggdG8gcmVtb3ZlIHRoZSANCj4gPiA+PiBkdXBsaWNhdGVk IGNvZGUuDQo+ID4gPj4NCj4gPiA+PiBDYzogWW91bmFzIGtoYW4gPHBtZHlvdW5hc2toYW43ODZA Z21haWwuY29tPg0KPiA+ID4+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT4NCj4gPiA+PiBDYzogTGltaW5nIEdhbyA8bGltaW5nLmdhb0BpbnRlbC5jb20+ DQo+ID4gPj4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+ID4+IENv bnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4g PiA+PiBTaWduZWQtb2ZmLWJ5OiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+ID4g Pj4gLS0tDQo+ID4gPj4gTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmggICB8ICAxNyAr KysNCj4gPiA+PiBNZGVQa2cvTGlicmFyeS9VZWZpTGliL0FjcGkuYyAgICAgIHwgMjI2DQo+ID4g Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4+IE1kZVBrZy9M aWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYgfCAgIDMgKw0KPiA+ID4+IDMgZmlsZXMgY2hhbmdl ZCwgMjQ2IGluc2VydGlvbnMoKykgY3JlYXRlIG1vZGUgMTAwNjQ0IA0KPiA+ID4+IE1kZVBrZy9M aWJyYXJ5L1VlZmlMaWIvQWNwaS5jDQo+ID4gPj4NCj4gPiA+PiBkaWZmIC0tZ2l0IGEvTWRlUGtn L0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gPiA+PiBiL01kZVBrZy9JbmNsdWRlL0xpYnJh cnkvVWVmaUxpYi5oDQo+ID4gPj4gaW5kZXggZjgwMDY3ZjExMTAzLi44ZGQyNWYzMjRmZDIgMTAw NjQ0DQo+ID4gPj4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gPiA+ PiArKysgYi9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1VlZmlMaWIuaA0KPiA+ID4+IEBAIC0xNTk1 LDQgKzE1OTUsMjEgQEAgRWZpT3BlbkZpbGVCeURldmljZVBhdGggKA0KPiA+ID4+ICBJTiAgICAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICBPcGVuTW9kZSwNCj4gPiA+PiAgSU4gICAgIFVJTlQ2 NCAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcw0KPiA+ID4+ICApOw0KPiA+ID4+ICsNCj4g PiA+PiArLyoqDQo+ID4gPj4gKyAgVGhpcyBmdW5jdGlvbiBmaW5kcyBBQ1BJIHRhYmxlIGJ5IHNp Z25hdHVyZS4NCj4gPiA+PiArICBJdCB3aWxsIGZpbmQgdGhlIHRhYmxlIGluIGdFZmlBY3BpMjBU YWJsZUd1aWQgc3lzdGVtIA0KPiA+ID4+ICtjb25maWd1cmF0aW9uIHRhYmxlDQo+ID4gZmlyc3Qs DQo+ID4gPj4gKyAgYW5kIHRoZW4gZ0VmaUFjcGkxMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJh dGlvbiB0YWJsZS4NCj4gPiA+PiArDQo+ID4gPj4gKyAgQHBhcmFtIFNpZ25hdHVyZSAgQUNQSSB0 YWJsZSBzaWduYXR1cmUuDQo+ID4gPj4gKw0KPiA+ID4+ICsgIEByZXR1cm4gQUNQSSB0YWJsZSBv ciBOVUxMIGlmIG5vdCBmb3VuZC4NCj4gPiA+PiArDQo+ID4gPj4gKyoqLw0KPiA+ID4+ICtWT0lE ICoNCj4gPiA+PiArRUZJQVBJDQo+ID4gPj4gK0VmaUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSAo DQo+ID4gPj4gKyAgSU4gVUlOVDMyICAgICBTaWduYXR1cmUNCj4gPiA+PiArICApOw0KPiA+ID4+ ICsNCj4gPiA+PiAjZW5kaWYNCj4gPiA+PiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xpYnJhcnkvVWVm aUxpYi9BY3BpLmMgDQo+ID4gPj4gYi9NZGVQa2cvTGlicmFyeS9VZWZpTGliL0FjcGkuYyBuZXcg ZmlsZSBtb2RlIDEwMDY0NCBpbmRleCANCj4gPiA+PiAwMDAwMDAwMDAwMDAuLjVjYjkzOTY2YjU5 Zg0KPiA+ID4+IC0tLSAvZGV2L251bGwNCj4gPiA+PiArKysgYi9NZGVQa2cvTGlicmFyeS9VZWZp TGliL0FjcGkuYw0KPiA+ID4+IEBAIC0wLDAgKzEsMjI2IEBADQo+ID4gPj4gKy8qKiBAZmlsZQ0K PiA+ID4+ICsgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGhlbHAgZnVuY3Rpb24gZm9yIGZpbmRpbmcg QUNQSSB0YWJsZS4NCj4gPiA+PiArDQo+ID4gPj4gKyAgQ29weXJpZ2h0IChjKSAyMDE4LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyANCj4gPiA+PiArIHJlc2VydmVkLjxCUj4gVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAgYXJlIA0KPiA+ID4+ICsgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiANCj4gPiA+PiArIHRoZQ0KPiA+IEJTRA0KPiA+ID4+IExpY2Vuc2UNCj4gPiA+PiArICB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIA0K PiA+ID4+ICsgbGljZW5zZSBtYXkgYmUNCj4gPiA+PiBmb3VuZCBhdA0KPiA+ID4+ICsgIGh0dHA6 Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuDQo+ID4gPj4gKw0KPiA+ ID4+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBP TiBBTiAiQVMNCj4gSVMiDQo+ID4gPj4gQkFTSVMsDQo+ID4gPj4gKyAgV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+ID4gPj4gRVhQUkVT UyBPUiBJTVBMSUVELg0KPiA+ID4+ICsNCj4gPiA+PiArKiovDQo+ID4gPj4gKw0KPiA+ID4+ICsj aW5jbHVkZSAiVWVmaUxpYkludGVybmFsLmgiDQo+ID4gPj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0 YW5kYXJkL0FjcGkuaD4gI2luY2x1ZGUgPEd1aWQvQWNwaS5oPg0KPiA+ID4+ICsNCj4gPiA+PiAr LyoqDQo+ID4gPj4gKyAgVGhpcyBmdW5jdGlvbiBzY2FucyBBQ1BJIHRhYmxlIGluIFJTRFQuDQo+ ID4gPj4gKw0KPiA+ID4+ICsgIEBwYXJhbSBSc2R0ICAgICAgIEFDUEkgUlNEVA0KPiA+ID4+ICsg IEBwYXJhbSBTaWduYXR1cmUgIEFDUEkgdGFibGUgc2lnbmF0dXJlDQo+ID4gPj4gKw0KPiA+ID4+ ICsgIEByZXR1cm4gQUNQSSB0YWJsZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCj4gPiA+PiArDQo+ ID4gPj4gKyoqLw0KPiA+ID4+ICtWT0lEICoNCj4gPiA+PiArU2NhblRhYmxlSW5SU0RUICgNCj4g PiA+PiArICBJTiBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgICAgKlJzZHQsDQo+ID4gPj4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZQ0KPiA+ID4+ICsg ICkNCj4gPiA+PiArew0KPiA+ID4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+ID4gPj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF bnRyeUNvdW50Ow0KPiA+ID4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkVudHJ5UHRyOw0KPiA+ID4+ICsgIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICAgICAg KlRhYmxlOw0KPiA+ID4+ICsNCj4gPiA+PiArICBpZiAoUnNkdCA9PSBOVUxMKSB7DQo+ID4gPj4g KyAgICByZXR1cm4gTlVMTDsNCj4gPiA+PiArICB9DQo+ID4gPj4gKw0KPiA+ID4+ICsgIEVudHJ5 Q291bnQgPSAoUnNkdC0+TGVuZ3RoIC0gc2l6ZW9mDQo+ID4gPj4gKyAoRUZJX0FDUElfREVTQ1JJ UFRJT05fSEVBREVSKSkgLw0KPiA+ID4+IHNpemVvZihVSU5UMzIpOw0KPiA+ID4+ICsNCj4gPiA+ PiArICBFbnRyeVB0ciA9IChVSU5UMzIgKikoUnNkdCArIDEpOyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgDQo+ID4gPj4gKyBFbnRyeUNvdW50OyBJbmRleCArKywgRW50cnlQdHIgKyspIHsNCj4g PiA+PiArICAgIFRhYmxlID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKSgoVUlOVE4p KCpFbnRyeVB0cikpOw0KPiA+ID4+ICsgICAgaWYgKFRhYmxlLT5TaWduYXR1cmUgPT0gU2lnbmF0 dXJlKSB7DQo+ID4gPj4gKyAgICAgIHJldHVybiBUYWJsZTsNCj4gPiA+PiArICAgIH0NCj4gPiA+ PiArICB9DQo+ID4gPj4gKw0KPiA+ID4+ICsgIHJldHVybiBOVUxMOw0KPiA+ID4+ICt9DQo+ID4g Pj4gKw0KPiA+ID4+ICsvKioNCj4gPiA+PiArICBUaGlzIGZ1bmN0aW9uIHNjYW5zIEFDUEkgdGFi bGUgaW4gWFNEVC4NCj4gPiA+PiArDQo+ID4gPj4gKyAgQHBhcmFtIFhzZHQgICAgICAgQUNQSSBY U0RUDQo+ID4gPj4gKyAgQHBhcmFtIFNpZ25hdHVyZSAgQUNQSSB0YWJsZSBzaWduYXR1cmUNCj4g PiA+PiArDQo+ID4gPj4gKyAgQHJldHVybiBBQ1BJIHRhYmxlIG9yIE5VTEwgaWYgbm90IGZvdW5k Lg0KPiA+ID4+ICsNCj4gPiA+PiArKiovDQo+ID4gPj4gK1ZPSUQgKg0KPiA+ID4+ICtTY2FuVGFi bGVJblhTRFQgKA0KPiA+ID4+ICsgIElOIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgICAq WHNkdCwNCj4gPiA+PiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0 dXJlDQo+ID4gPj4gKyAgKQ0KPiA+ID4+ICt7DQo+ID4gPj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiA+ID4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICBFbnRyeUNvdW50Ow0KPiA+ID4+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAg ICBFbnRyeVB0cjsNCj4gPiA+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgQmFz ZVB0cjsNCj4gPiA+PiArICBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgICAgKlRhYmxlOw0K PiA+ID4+ICsNCj4gPiA+PiArICBpZiAoWHNkdCA9PSBOVUxMKSB7DQo+ID4gPj4gKyAgICByZXR1 cm4gTlVMTDsNCj4gPiA+PiArICB9DQo+ID4gPj4gKw0KPiA+ID4+ICsgIEVudHJ5Q291bnQgPSAo WHNkdC0+TGVuZ3RoIC0gc2l6ZW9mDQo+ID4gPj4gKyAoRUZJX0FDUElfREVTQ1JJUFRJT05fSEVB REVSKSkgLw0KPiA+ID4+IHNpemVvZihVSU5UNjQpOw0KPiA+ID4+ICsNCj4gPiA+PiArICBCYXNl UHRyID0gKFVJTlROKShYc2R0ICsgMSk7DQo+ID4gPj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgRW50cnlDb3VudDsgSW5kZXggKyspIHsNCj4gPiA+PiArICAgIENvcHlNZW0gKCZFbnRyeVB0 ciwgKFZPSUQgKikoQmFzZVB0ciArIEluZGV4ICogDQo+ID4gPj4gKyBzaXplb2YoVUlOVDY0KSks DQo+ID4gPj4gc2l6ZW9mKFVJTlQ2NCkpOw0KPiA+ID4+ICsgICAgVGFibGUgPSAoRUZJX0FDUElf REVTQ1JJUFRJT05fSEVBREVSICopKChVSU5UTikoRW50cnlQdHIpKTsNCj4gPiA+PiArICAgIGlm IChUYWJsZS0+U2lnbmF0dXJlID09IFNpZ25hdHVyZSkgew0KPiA+ID4+ICsgICAgICByZXR1cm4g VGFibGU7DQo+ID4gPj4gKyAgICB9DQo+ID4gPj4gKyAgfQ0KPiA+ID4+ICsNCj4gPiA+PiArICBy ZXR1cm4gTlVMTDsNCj4gPiA+PiArfQ0KPiA+ID4+ICsNCj4gPiA+PiArLyoqDQo+ID4gPj4gKyAg VG8gZmluZCBGYWNzIGluIEZBRFQuDQo+ID4gPj4gKw0KPiA+ID4+ICsgIEBwYXJhbSBGYWR0ICAg RkFEVCB0YWJsZSBwb2ludGVyDQo+ID4gPj4gKw0KPiA+ID4+ICsgIEByZXR1cm4gRmFjcyB0YWJs ZSBwb2ludGVyIG9yIE5VTEwgaWYgbm90IGZvdW5kLg0KPiA+ID4+ICsNCj4gPiA+PiArKiovDQo+ ID4gPj4gK0VGSV9BQ1BJXzJfMF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RSVUNUVVJFICogDQo+ ID4gPj4gK0ZpbmRBY3BpRmFjc0Zyb21GYWR0ICgNCj4gPiA+PiArICBJTiBFRklfQUNQSV8yXzBf RklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRSAgKkZhZHQNCj4gPiA+PiArICApDQo+ID4gPj4g K3sNCj4gPiA+PiArICBFRklfQUNQSV8yXzBfRklSTVdBUkVfQUNQSV9DT05UUk9MX1NUUlVDVFVS RSAgKkZhY3M7DQo+ID4gPj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERhdGE2NDsNCj4gPiA+PiArDQo+ID4gPj4gKyAgaWYgKEZhZHQgPT0gTlVMTCkg ew0KPiA+ID4+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPj4gKyAgfQ0KPiA+ID4+ICsNCj4gPiA+ PiArICBpZiAoRmFkdC0+SGVhZGVyLlJldmlzaW9uIDwNCj4gPiA+PiBFRklfQUNQSV8yXzBfRklY RURfQUNQSV9ERVNDUklQVElPTl9UQUJMRV9SRVZJU0lPTikgew0KPiA+ID4+ICsgICAgRmFjcyA9 IChFRklfQUNQSV8yXzBfRklSTVdBUkVfQUNQSV9DT05UUk9MX1NUUlVDVFVSRQ0KPiA+ID4+ICop KFVJTlROKUZhZHQtPkZpcm13YXJlQ3RybDsNCj4gPiA+PiArICB9IGVsc2Ugew0KPiA+ID4+ICsg ICAgQ29weU1lbSAoJkRhdGE2NCwgJkZhZHQtPlhGaXJtd2FyZUN0cmwsIHNpemVvZihVSU5UNjQp KTsNCj4gPiA+PiArICAgIGlmIChEYXRhNjQgIT0gMCkgew0KPiA+ID4+ICsgICAgICBGYWNzID0g KEVGSV9BQ1BJXzJfMF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RSVUNUVVJFDQo+ID4gPj4gKiko VUlOVE4pRGF0YTY0Ow0KPiA+ID4+ICsgICAgfSBlbHNlIHsNCj4gPiA+PiArICAgICAgRmFjcyA9 IChFRklfQUNQSV8yXzBfRklSTVdBUkVfQUNQSV9DT05UUk9MX1NUUlVDVFVSRQ0KPiA+ID4+ICop KFVJTlROKUZhZHQtPkZpcm13YXJlQ3RybDsNCj4gPiA+PiArICAgIH0NCj4gPiA+PiArICB9DQo+ ID4gPj4gKyAgcmV0dXJuIEZhY3M7DQo+ID4gPj4gK30NCj4gPiA+PiArDQo+ID4gPj4gKy8qKg0K PiA+ID4+ICsgIFRvIGZpbmQgQUNQSSB0YWJsZSBpbiBBQ1BJIENvbmZpZ3VyYXRpb25UYWJsZS4N Cj4gPiA+PiArDQo+ID4gPj4gKyAgQHBhcmFtIEFjcGlUYWJsZUd1aWQgIFRoZSBndWlkIHVzZWQg dG8gZmluZCBBQ1BJDQo+IENvbmZpZ3VyYXRpb25UYWJsZS4NCj4gPiA+PiArICBAcGFyYW0gU2ln bmF0dXJlICAgICAgQUNQSSB0YWJsZSBzaWduYXR1cmUuDQo+ID4gPj4gKw0KPiA+ID4+ICsgIEBy ZXR1cm4gQUNQSSB0YWJsZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCj4gPiA+PiArDQo+ID4gPj4g KyoqLw0KPiA+ID4+ICtWT0lEICAqDQo+ID4gPj4gK0ZpbmRBY3BpVGFibGVJbkFjcGlDb25maWd1 cmF0aW9uVGFibGUgKA0KPiA+ID4+ICsgIElOIEVGSV9HVUlEICAgKkFjcGlHdWlkLA0KPiA+ID4+ ICsgIElOIFVJTlQzMiAgICAgU2lnbmF0dXJlDQo+ID4gPj4gKw0KPiA+ID4+ICsgICkNCj4gPiA+ PiArew0KPiA+ID4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ID4gPj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpUYWJsZTsNCj4gPiA+PiArICBFRklfQUNQSV8yXzBfUk9PVF9TWVNURU1f REVTQ1JJUFRJT05fUE9JTlRFUiAgKlJzZHA7DQo+ID4gPj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJ T05fSEVBREVSICAgICAgICAgICAgICAgICAgICpSc2R0Ow0KPiA+ID4+ICsgIEVGSV9BQ1BJX0RF U0NSSVBUSU9OX0hFQURFUiAgICAgICAgICAgICAgICAgICAqWHNkdDsNCj4gPiA+PiArICBFRklf QUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRSAgICAgKkZhZHQ7DQo+ID4gPj4g Kw0KPiA+ID4+ICsgIFJzZHAgPSBOVUxMOw0KPiA+ID4+ICsgIC8vDQo+ID4gPj4gKyAgLy8gRmlu ZCBBQ1BJIENvbmZpZ3VyYXRpb25UYWJsZSAoUlNEX1BUUikgIC8vICBTdGF0dXMgPSANCj4gPiA+ PiArIEVmaUdldFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZShBY3BpR3VpZCwgKFZPSUQgKiopJlJz ZHApOyAgaWYgDQo+ID4gPj4gKyAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChSc2RwID09IE5VTEwp KSB7DQo+ID4gPj4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+PiArICB9DQo+ID4gPj4gKw0KPiA+ ID4+ICsgIFRhYmxlID0gTlVMTDsNCj4gPiA+PiArDQo+ID4gPj4gKyAgLy8NCj4gPiA+PiArICAv LyBTZWFyY2ggWFNEVA0KPiA+ID4+ICsgIC8vDQo+ID4gPj4gKyAgaWYgKFJzZHAtPlJldmlzaW9u ID49DQo+ID4gPj4gRUZJX0FDUElfMl8wX1JPT1RfU1lTVEVNX0RFU0NSSVBUSU9OX1BPSU5URVJf UkVWSVNJT04pIHsNCj4gPiA+PiArICAgIFhzZHQgPSAoRUZJX0FDUElfREVTQ1JJUFRJT05fSEVB REVSICopKFVJTlROKQ0KPiA+IFJzZHAtPlhzZHRBZGRyZXNzOw0KPiA+ID4+ICsgICAgaWYgKFNp Z25hdHVyZSA9PQ0KPiA+ID4+IEVGSV9BQ1BJXzJfMF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RS VUNUVVJFX1NJR05BVFVSRSkgew0KPiA+ID4+ICsgICAgICAvLw0KPiA+ID4+ICsgICAgICAvLyBJ dCBpcyB0byBmaW5kIEZBQ1MgQUNQSSB0YWJsZSwNCj4gPiA+PiArICAgICAgLy8gbmVlZCBmaW5k IEZBRFQgZmlyc3QuDQo+ID4gPj4gKyAgICAgIC8vDQo+ID4gPj4gKyAgICAgIEZhZHQgPSBTY2Fu VGFibGVJblhTRFQgKFhzZHQsDQo+ID4gPj4gRUZJX0FDUElfMl8wX0ZJWEVEX0FDUElfREVTQ1JJ UFRJT05fVEFCTEVfU0lHTkFUVVJFKTsNCj4gPiA+PiArICAgICAgVGFibGUgPSBGaW5kQWNwaUZh Y3NGcm9tRmFkdCAoRmFkdCk7DQo+ID4gPj4gKyAgICB9IGVsc2Ugew0KPiA+ID4+ICsgICAgICBU YWJsZSA9IFNjYW5UYWJsZUluWFNEVCAoWHNkdCwgU2lnbmF0dXJlKTsNCj4gPiA+PiArICAgIH0N Cj4gPiA+PiArICB9DQo+ID4gPj4gKw0KPiA+ID4+ICsgIGlmIChUYWJsZSAhPSBOVUxMKSB7DQo+ ID4gPj4gKyAgICByZXR1cm4gVGFibGU7DQo+ID4gPj4gKyAgfQ0KPiA+ID4+ICsNCj4gPiA+PiAr ICAvLw0KPiA+ID4+ICsgIC8vIFNlYXJjaCBSU0RUDQo+ID4gPj4gKyAgLy8NCj4gPiA+PiArICBS c2R0ID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKShVSU5UTikgUnNkcC0NCj4gPlJz ZHRBZGRyZXNzOw0KPiA+ID4+ICsgaWYgKFNpZ25hdHVyZSA9PQ0KPiA+ID4+IEVGSV9BQ1BJXzJf MF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RSVUNUVVJFX1NJR05BVFVSRSkgew0KPiA+ID4+ICsg ICAgLy8NCj4gPiA+PiArICAgIC8vIEl0IGlzIHRvIGZpbmQgRkFDUyBBQ1BJIHRhYmxlLA0KPiA+ ID4+ICsgICAgLy8gbmVlZCBmaW5kIEZBRFQgZmlyc3QuDQo+ID4gPj4gKyAgICAvLw0KPiA+ID4+ ICsgICAgRmFkdCA9IFNjYW5UYWJsZUluUlNEVCAoUnNkdCwNCj4gPiA+PiBFRklfQUNQSV8yXzBf RklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkUpOw0KPiA+ID4+ICsgICAgVGFi bGUgPSBGaW5kQWNwaUZhY3NGcm9tRmFkdCAoRmFkdCk7ICB9IGVsc2Ugew0KPiA+ID4+ICsgICAg VGFibGUgPSBTY2FuVGFibGVJblJTRFQgKFJzZHQsIFNpZ25hdHVyZSk7ICB9DQo+ID4gPj4gKw0K PiA+ID4+ICsgIHJldHVybiBUYWJsZTsNCj4gPiA+PiArfQ0KPiA+ID4+ICsNCj4gPiA+PiArLyoq DQo+ID4gPj4gKyAgVGhpcyBmdW5jdGlvbiBmaW5kcyBBQ1BJIHRhYmxlIGJ5IHNpZ25hdHVyZS4N Cj4gPiA+PiArICBJdCB3aWxsIGZpbmQgdGhlIHRhYmxlIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQg c3lzdGVtIA0KPiA+ID4+ICtjb25maWd1cmF0aW9uIHRhYmxlDQo+ID4gZmlyc3QsDQo+ID4gPj4g KyAgYW5kIHRoZW4gZ0VmaUFjcGkxMFRhYmxlR3VpZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJs ZS4NCj4gPiA+PiArDQo+ID4gPj4gKyAgQHBhcmFtIFNpZ25hdHVyZSAgQUNQSSB0YWJsZSBzaWdu YXR1cmUuDQo+ID4gPj4gKw0KPiA+ID4+ICsgIEByZXR1cm4gQUNQSSB0YWJsZSBvciBOVUxMIGlm IG5vdCBmb3VuZC4NCj4gPiA+PiArDQo+ID4gPj4gKyoqLw0KPiA+ID4+ICtWT0lEICoNCj4gPiA+ PiArRUZJQVBJDQo+ID4gPj4gK0VmaUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSAoDQo+ID4gPj4g KyAgSU4gVUlOVDMyICAgICBTaWduYXR1cmUNCj4gPiA+PiArICApDQo+ID4gPj4gK3sNCj4gPiA+ PiArICBWT0lEICAgICAgICAgICpUYWJsZTsNCj4gPiA+PiArDQo+ID4gPj4gKyAgVGFibGUgPSBG aW5kQWNwaVRhYmxlSW5BY3BpQ29uZmlndXJhdGlvblRhYmxlDQo+ID4gPj4gKyAoJmdFZmlBY3Bp MjBUYWJsZUd1aWQsDQo+ID4gPj4gU2lnbmF0dXJlKTsNCj4gPiA+PiArICBpZiAoVGFibGUgIT0g TlVMTCkgew0KPiA+ID4+ICsgICAgcmV0dXJuIFRhYmxlOw0KPiA+ID4+ICsgIH0NCj4gPiA+PiAr DQo+ID4gPj4gKyAgcmV0dXJuIEZpbmRBY3BpVGFibGVJbkFjcGlDb25maWd1cmF0aW9uVGFibGUN Cj4gPiA+PiArICgmZ0VmaUFjcGkxMFRhYmxlR3VpZCwNCj4gPiA+PiBTaWduYXR1cmUpOw0KPiA+ ID4+ICt9DQo+ID4gPj4gKw0KPiA+ID4+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9VZWZp TGliL1VlZmlMaWIuaW5mDQo+ID4gPj4gYi9NZGVQa2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIu aW5mDQo+ID4gPj4gaW5kZXggYTZjNzM5ZWYzZDZkLi5hZWEyMGZlNjcxNTMgMTAwNjQ0DQo+ID4g Pj4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGliLmluZg0KPiA+ID4+ICsrKyBi L01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYNCj4gPiA+PiBAQCAtNDEsNiArNDEs NyBAQCBbU291cmNlc10NCj4gPiA+PiAgQ29uc29sZS5jDQo+ID4gPj4gIFVlZmlMaWIuYw0KPiA+ ID4+ICBVZWZpTGliSW50ZXJuYWwuaA0KPiA+ID4+ICsgIEFjcGkuYw0KPiA+ID4+DQo+ID4gPj4N Cj4gPiA+PiBbUGFja2FnZXNdDQo+ID4gPj4gQEAgLTYyLDYgKzYzLDggQEAgW0d1aWRzXQ0KPiA+ ID4+ICBnRWZpRXZlbnRSZWFkeVRvQm9vdEd1aWQgICAgICAgICAgICAgICAgICAgICAgIyMNCj4g PiA+PiBTT01FVElNRVNfQ09OU1VNRVMgICMjIEV2ZW50DQo+ID4gPj4gIGdFZmlFdmVudExlZ2Fj eUJvb3RHdWlkICAgICAgICAgICAgICAgICAgICAgICAjIw0KPiA+ID4+IFNPTUVUSU1FU19DT05T VU1FUyAgIyMgRXZlbnQNCj4gPiA+PiAgZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCAgICAgICAgICAg ICAgICAgICAgICAgICMjDQo+ID4gPj4gU09NRVRJTUVTX0NPTlNVTUVTICAjIyBWYXJpYWJsZQ0K PiA+ID4+ICsgIGdFZmlBY3BpMjBUYWJsZUd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAj Iw0KPiA+ID4+IFNPTUVUSU1FU19DT05TVU1FUyAgIyMgU3lzdGVtVGFibGUNCj4gPiA+PiArICBn RWZpQWNwaTEwVGFibGVHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gPiA+PiBT T01FVElNRVNfQ09OU1VNRVMgICMjIFN5c3RlbVRhYmxlDQo+ID4gPj4NCj4gPiA+PiBbUHJvdG9j b2xzXQ0KPiA+ID4+ICBnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAgICAg ICAgICAjIw0KPiA+ID4+IFNPTUVUSU1FU19QUk9EVUNFUw0KPiA+ID4+IC0tDQo+ID4gPj4gMi43 LjAud2luZG93cy4xDQo+ID4gPj4NCj4gPiA+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KPiA+ID4+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4g Pj4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+PiBodHRwczovL2xpc3RzLjAxLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCj4gPiA+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0K PiA+ID4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+IGh0dHBzOi8vbGlzdHMuMDEub3Jn L21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0K