From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by mx.groups.io with SMTP id smtpd.web10.28543.1632732630589337686 for ; Mon, 27 Sep 2021 01:50:32 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.242, mailfrom: fanjianfeng@byosoft.com.cn) Received: from DESKTOP-M5NI163 ([58.246.60.130]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Mon, 27 Sep 2021 16:50:19 +0800 X-WM-Sender: fanjianfeng@byosoft.com.cn X-Originating-IP: 58.246.60.130 X-WM-AuthFlag: YES X-WM-AuthUser: fanjianfeng@byosoft.com.cn Date: Mon, 27 Sep 2021 16:50:19 +0800 From: "Jeff Fan" To: "devel@edk2.groups.io" , mhaeuser , =?UTF-8?B?TmksIFJheQ==?= , 'gaoliming' , =?UTF-8?B?Q2hhbiwgQW15?= , "'Andrew Fish'" Cc: =?UTF-8?B?S2lubmV5LCBNaWNoYWVsIEQ=?= , =?UTF-8?B?J0dhbywgTGltaW5nJw==?= , =?UTF-8?B?TGl1LCBaaGlndWFuZw==?= , =?UTF-8?B?V2FuZywgSmlhbiBK?= , =?UTF-8?B?R2FvLCBaaGljaGFv?= Subject: Re: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg References: , <001a01d7aa99$d744af80$85ce0e80$@byosoft.com.cn>, , <003401d7aaa1$c7166830$55433890$@byosoft.com.cn>, , , <16A70FAC1585C7C1.27516@groups.io>, , <00cf01d7b27a$59145d20$0b3d1760$@byosoft.com.cn>, , , <2021092708451371303013@byosoft.com.cn>, <7c260e5d-363e-8579-5a38-3cc5e2336bdb@posteo.de> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.20.269[cn] Mime-Version: 1.0 Message-ID: <2021092716501903570820@byosoft.com.cn> Content-Type: multipart/alternative; boundary="----=_001_NextPart153340754688_=----" ------=_001_NextPart153340754688_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Rm9yIGZvcm1lciBjYWxsZXIsIHRoZXkgY291bGQgc3RpbGwga2VlcCBhcyBpcyB0byBjYWxsIHRo ZSBvbGQgQVBJIGluIE1kZU1vZHVsZVBrZy4gSSB0aGluayBSYXkncyBkZXNpZ24gaXMgY29tcGF0 aWJsZSBjaGFuZ2UgZm9yIGV4aXN0aW5nIGNvZGUuDQpPbmx5IHdoZW4gdGhlIGV4aXN0aW5nIGNv ZGUgd2FudHMgdG8gcmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIE1kZU1vZHVlbFBrZywgdGhleSBj b3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgQVBJIGluIGJhc2VsaWIuDQoNCkkgYWdyZWUgd2l0aCBv bmUgc3BsaXQtQVBJIGRlc2dpbiB3aGF0IHlvdSBtZW50aW9uZWQuIA0KQnV0IG15IHBvaW50IGlz IHRvIGRlZmluZSBvbmUgQVBJIGluIGJhc2VsaWIgYW5kIHRvIG1ha2UgdGhlIGJhc2VsaWIgbm90 IGRlcGVuZCBvbiBtZW1vcnkgYWxsb2NhdGlvbi4gIEFuZCBhbm90aGVyIHdyYXBwZXIgQVBJIGNv dWxkIGJlIGRlc2lnbmVkIHRvIGJlIHBsYWNlZCBpbiBhbnkgb3RoZXIgY2xhc3MuDQoNCg0KDQpK ZWZmDQpmYW5qaWFuZmVuZ0BieW9zb2Z0LmNvbS5jbg0KIA0KRnJvbTogTWFydmluIEjDpHVzZXIN CkRhdGU6IDIwMjEtMDktMjcgMTY6MTQNClRvOiBmYW5qaWFuZmVuZ0BieW9zb2Z0LmNvbS5jbjsg ZGV2ZWxAZWRrMi5ncm91cHMuaW87IE5pLCBSYXk7ICdnYW9saW1pbmcnOyBDaGFuLCBBbXk7ICdB bmRyZXcgRmlzaCcNCkNDOiBLaW5uZXksIE1pY2hhZWwgRDsgJ0dhbywgTGltaW5nJzsgTGl1LCBa aGlndWFuZzsgV2FuZywgSmlhbiBKOyBHYW8sIFpoaWNoYW8NClN1YmplY3Q6IFJlOiBbZWRrMi1k ZXZlbF0gUkZDOiBBZGQgQmFzZUxpYi9RdWlja1NvcnQgaW4gTWRlUGtnDQpPbiAyNy8wOS8yMDIx IDAyOjQ1LCBmYW5qaWFuZmVuZ0BieW9zb2Z0LmNvbS5jbiB3cm90ZToNCj4gTWFraW5nIGJhc2Vs aWIgaW1wbGVtZW50YXRpb24gZGVwZW5kIG9uIE1lbW9yeUFsbG9jYXRpb25MaWIgDQo+IChpbmRp cmVjdGx5IG9uIFBlaSBTZXJ2aWNlIGFuZCBnQlMpLCBpdCBtYXkgcHJldmVudCANCj4gdGhpcyBi YXNlIEFQSSB1c2luZyBhdCBzb21lIHNlbmVyYWlvLiBpIGRvbid0IHRoaW5rIGl0J3MgYmV0dGVy Lg0KIA0KVGhhdCBpcyB3aHkgSSBhc2tlZCBhYm91dCBhIHNwbGl0LUFQSSBzY2VuYXJpbywgb25l IG9mIHdoaWNoIGRvZXMgbm90IA0KZGVwZW5kIG9uIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24g KFNldFZhcmlhYmxlLWxpa2UpIGFuZCBvbmUgZG9lcyANCih3cmFwcGVyLWxpa2UpLg0KIA0KPiBB ZGQgdGhpcyBwYXJhbWV0ZXIgYW5kIG1ha2UgdGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwsDQo+ IDEsIHdoZW4gTlVMTCwgdXNlIHRoZSBsb2NhbCAyNTYgYnl0ZXMgc3RhY2sNCj4gMiwgaWYgMjU2 IGJ5dGVzIHN0YWNrIGlzIG5vdCBlbm91Z2gsIHJldHVybiBSRVRVUkVfQlVGRkVSX1RPT19TQU1M TCwNCj4gMywgY2FsbGVyIGNoZWNrIHRoZSByZXR1cm4gc3RhdHVzLCB0byBkbyBub3RoaW5nIG9y IHRvIGFsbG9jYXRlIGVub3VnaCANCj4gYnVmZmVyIGZvciByZXRyeQ0KPg0KPiBUaGlzIGlzIGp1 c3QgbGlrZSBTZXRWYXJpYWJsZSgpJ3MgaW1wbGVtZW50YXRpb24uDQogDQpZZXMsIGFuZCBiZWNh dXNlIHRoYXQgaXMgU2V0VmFyaWFibGUncyBpbXBsZW1lbnRhdGlvbiwgd2UgaGF2ZSBsaWJyYXJ5 IA0KZnVuY3Rpb25zIHRvIG1ha2UgaXQgbGVzcyBlcnJvci1wcm9uZSBhbmQgbW9yZSBjb252ZW5p ZW50IFsxXS4gQXMgYSANCm1hdHRlciBvZiBmYWN0LCB3ZSBoYXZlIGEgKHNlbWktbGF4KSBwb2xp Y3kgaW4gb3VyIGNvZGViYXNlcyB0byBhdm9pZCANCnN1Y2ggZnVuY3Rpb25zIGxpa2UgdGhlIHBs YWd1ZSBhbmQgdXNlIHRob3NlIGxpYnJhcnkgd3JhcHBlcnMgd2hlcmUtZXZlciANCml0IGNhbiBt YWtlIHNlbnNlLiBUaGUgb25seSBzdXBlci1yYXJlIGV4Y2VwdGlvbnMgSSBjYW4gdGhpbmsgb2Yg YXJlIA0Kd2hlbiB3ZSBrbm93IHRoZSBzaXplIG9mIHRoZSBlbGVtZW50IGFoZWFkIG9mIHRpbWUu IEFsc28gU2V0VmFyaWFibGUgaGFzIA0Kbm8gYXJiaXRyYXJ5IGNvbnN0cmFpbnQgb24gd2hlbiBp dCBtYXkgd29yayB0aGUgZmlyc3QgdGltZSwgYW5kIHRoZXJlIGlzIA0KY29kZSB0aGF0IHdpbGwg ZmFpbCB3aGVuIHRoZSBmaXJzdCByZXR1cm4gaXMgbm90IEVGSV9CVUZGRVJfVE9PX1NNQUxMLg0K IA0KVGhpcyBzb2x1dGlvbiBob25lc3RseSB5aWVsZHMgZXZlbiBtb3JlIHByb2JsZW1zLCBiZWNh dXNlIGl0IGludHJvZHVjZXMgDQphIFN0YXR1cyByZXR1cm4gd2hpY2ggd2FzIG5vdCB0aGVyZSBi ZWZvcmUuIEZvciBjb21tb24gY29kZSBzYWZldHkgYW5kIA0KcXVhbGl0eSBwb2xpY3ksIHRoaXMg cmVxdWlyZXMgdGhlIHZhbHVlICptdXN0KiBiZSByZXRyaWV2ZWQgYW5kIGNoZWNrZWQgDQppbiBz b21lIGZhc2hpb24uIFNvIGFsbCBjYWxsZXJzLCBubyBtYXR0ZXIgdGhlIHByaW9yIGtub3dsZWRn ZSBvZiB0aGUgDQplbGVtZW50IHNpemUsIG5vdyBuZWVkIGVpdGhlciBhIHJ1bnRpbWUgY2hlY2sg YW5kIGhhbmRsaW5nIGZvciBhIHN0YXR1cyANCnRoYXQgdGhleSAobWF5KSBrbm93IGNhbiBuZXZl ciBiZSByZXR1cm5lZCwgb3IgQVNTRVJUcyBpZiB0aGUgZnVuY3Rpb24gDQpzcGVjIHJlYWxseSBp bXBvc2VzIHRoZSBhcmJpdHJhcnkgMjU2IEJ5dGVzIGNvbnN0cmFpbnQuIExhdHRlciBkb2Vzbid0 IA0KcmVhbGx5IHdvcmsgSSB0aGluay4gV2hhdCBpZiBzb21lb25lIHdhbnRzIHRvIHNvcnQgaW4g U0VDIGFuZCBub3RpY2VkIA0KdGhleSBvbmx5IGhhdmUgNjQgQnl0ZXMgb24gdGhlIHN0YWNrIHRv IHdvcmsgd2l0aCwgcmVhbGlzdGljYWxseT8gQW55IA0KY29kZSBkZXBlbmRpbmcgb24gdGhlIDI1 NiBCeXRlIGNvbnN0cmFpbnQsIHBhc3NpbmcgTlVMTCBhbmQgbm90IGRvaW5nIA0KYWRkaXRpb25h bCBoYW5kbGluZywgd291bGQgc2VpemUgdG8gd29yay4gRm9ybWVyIGlzIHRvbyBjb21wbGljYXRl ZCwgc2VlIA0Kd3JhcHBlcnMuIEluIG15IG9waW5pb24sIHRoZSBtZW1vcnkgbXVzdCAqZWl0aGVy KiBiZSBmdWxseSBtYW5hZ2VkIGJ5IA0KdGhlIGNhbGxlciAqb3IqIHRoZSBjYWxsZWUgKGFuZCB5 b3UgbWF5IGhhdmUgYm90aCBpbiBzZXBhcmF0ZSBmdW5jdGlvbnMsIA0KYXMgSSBzdWdnZXN0ZWQp LCBidXQgbm90IHNvbWV0aW1lcyBoZXJlLCBzb21ldGltZXMgdGhlcmUuDQogDQpCZXN0IHJlZ2Fy ZHMsDQpNYXJ2aW4NCiANCiANClsxXSANCmh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRr Mi9ibG9iLzQ2YjQ2MDZiYTIzNDk4ZDNkMGU2NmI1M2U0OThlYjNkNWQ1OTI1ODYvTWRlUGtnL0xp YnJhcnkvVWVmaUxpYi9VZWZpTGliLmMjTDEzMDktTDEzNjANCiANCj4NCj4gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQo+IEplZmYNCj4gZmFuamlhbmZlbmdAYnlvc29mdC5jb20uY24NCj4NCj4gICAgICpGcm9t OiogTWFydmluIEjDpHVzZXIgPG1haWx0bzptaGFldXNlckBwb3N0ZW8uZGU+DQo+ICAgICAqRGF0 ZToqIDIwMjEtMDktMjYgMTk6MjANCj4gICAgICpUbzoqIGRldmVsIDxtYWlsdG86ZGV2ZWxAZWRr Mi5ncm91cHMuaW8+OyByYXkubmkNCj4gICAgIDxtYWlsdG86cmF5Lm5pQGludGVsLmNvbT47IGdh b2xpbWluZw0KPiAgICAgPG1haWx0bzpnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBDaGFuLCBB bXkNCj4gICAgIDxtYWlsdG86YW15LmNoYW5AaW50ZWwuY29tPjsgJ0FuZHJldyBGaXNoJyA8bWFp bHRvOmFmaXNoQGFwcGxlLmNvbT4NCj4gICAgICpDQzoqIEtpbm5leSwgTWljaGFlbCBEIDxtYWls dG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyAnR2FvLA0KPiAgICAgTGltaW5nJyA8bWFp bHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPjsgTGl1LCBaaGlndWFuZw0KPiAgICAgPG1haWx0bzp6 aGlndWFuZy5saXVAaW50ZWwuY29tPjsgV2FuZywgSmlhbiBKDQo+ICAgICA8bWFpbHRvOmppYW4u ai53YW5nQGludGVsLmNvbT47IEdhbywgWmhpY2hhbw0KPiAgICAgPG1haWx0bzp6aGljaGFvLmdh b0BpbnRlbC5jb20+DQo+ICAgICAqU3ViamVjdDoqIFJlOiBbZWRrMi1kZXZlbF0gUkZDOiBBZGQg QmFzZUxpYi9RdWlja1NvcnQgaW4gTWRlUGtnDQo+ICAgICBIZXkgUmF5LA0KPiAgICAgSW4gbXkg b3BpbmlvbiB0aGF0IHNwZWMgaXMgdG9vIGNvbXBsaWNhdGVkLiBGb3Igc29tZSBjYXNlcyBpdCBp cw0KPiAgICAgb2J2aW91cywgYnV0IEkgdGhpbmsgdGhlIGxhc3QgYW55b25lIHdhbnRzIHRvIHNl ZSBpcyBhDQo+ICAgICAoU1RBVElDXylBU1NFUlQNCj4gICAgIGJlZm9yZSBtb3N0IFF1aWNrU29y dCBjYWxscyB0byBlbnN1cmUgdGhlIGVsZW1lbnQgc2l6ZSAqcmVhbGx5KiBpcyA8PQ0KPiAgICAg MjU2IEJ5dGVzLiBJbiBteSBvcGluaW9uLCB0aGVyZSBhcmUgdHdvIHJvYWRzOg0KPiAgICAgMSkg TWFrZSB0aGUgcGFyYW1ldGVyIHJlcXVpcmVkIChJIHRoaW5rIHRoaXMgaXMgd2hhdCBMaW1pbmcN Cj4gICAgIHN1Z2dlc3RlZCkuDQo+ICAgICBUaGUgY2FsbGVyIHdvdWxkIGFsd2F5cyBuZWVkIHRv IHByb3ZpZGUgc2FpZCBidWZmZXIsIGFuZCBpdCBjYW4gZG8NCj4gICAgIGFzIGl0DQo+ICAgICBz ZWVzIGZpdCAtIG9uIHRoZSBzdGFjaywgaW4gYSBwb29sLCBpbiBhIHBhZ2UsIHdobyBrbm93cy4N Cj4gICAgIDIpIFJlbW92ZSB0aGUgcGFyYW1ldGVyIGVudGlyZWx5LiBUaGUgbGlicmFyeSB3b3Vs ZCBkZXBlbmQgb24NCj4gICAgIE1lbW9yeUFsbG9jYXRpb25MaWIgYWdhaW4sIGJ1dCBhbHNvIHdv dWxkIGhhdmUgYW4gb3B0aW1pc2F0aW9uIGJ5DQo+ICAgICBjaG9vc2luZyBzdGFjayB2cyBwb29s IGJhc2VkIG9uIEVsZW1lbnRTaXplLg0KPiAgICAgVXN1YWxseSBJIHdvdWxkIHByZWZlciAyKSwg YXMgaXQgaXMgbGVzcyBwcm9uZSB0byBjYWxsZXIgZXJyb3JzLCBidXQNCj4gICAgIGNvbnNpZGVy aW5nIHRoZSBsb3ctbGV2ZWwgbmF0dXJlIG9mIGVkazIsIEkgY2FuIHRvdGFsbHkgc2VlIHRoZQ0K PiAgICAgcG9pbnQgdG8NCj4gICAgIGFsbG93IHRoZSBjYWxsZXIgdG8gY29udHJvbCB3aGV0aGVy IHRoZXJlIGFyZSBkeW5hbWljIG1lbW9yeQ0KPiAgICAgYWxsb2NhdGlvbnMNCj4gICAgIG1hZGUg b3Igbm90IGFzIHBvc3NpYmxlIHdpdGggMSkuIDIpIGNvdWxkIHRlY2huaWNhbGx5IGFsc28gYmUg YQ0KPiAgICAgd3JhcHBlcg0KPiAgICAgZm9yIDEpIGlmIHlvdSB3YW50IGdyYW51bGFyIGNvbnRy b2wgYW5kIGNvbnZlbmllbmNlL3NhZmV0eSAod2h5IG5vdA0KPiAgICAgYWN0dWFsbHk/KS4NCj4g ICAgIEJvdGggYXBwcm9hY2hlcyBoYXZlIHRoZSBhZHZhbnRhZ2UgdGhhdCBpdCBpcyBjcnlzdGFs LWNsZWFyIHdoYXQgdGhlDQo+ICAgICBjYWxsZXIncyBqb2IgaXMgLSB0byBhbHdheXMgb3IgdG8g bmV2ZXIgYWxsb2NhdGUgdGhlIGJ1ZmZlci4NCj4gICAgIEJlc3QgcmVnYXJkcywNCj4gICAgIE1h cnZpbg0KPiAgICAgT24gMjYvMDkvMjAyMSAwNDoyNCwgTmksIFJheSB3cm90ZToNCj4gICAgID4N Cj4gICAgID4gTGltaW5nLA0KPiAgICAgPg0KPiAgICAgPiBUaGUgcHVycG9zZSBvZiB0aGUgb3B0 aW9uYWwgQnVmZmVyT25lRWxlbWVudCBpcyB0byBlYXNlIGNvbnN1bWVy4oCZcw0KPiAgICAgPiBs aWZlIGFzc3VtaW5nIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIGVsZW1lbnQgc2l6ZSBzaG91bGQgYmUN Cj4gICAgIHNtYWxsZXIgdGhhbg0KPiAgICAgPiAyNTYuDQo+ICAgICA+DQo+ICAgICA+IEFyZSB5 b3Ugc2F5aW5nIHRoYXQgaXTigJlzIGEgYml0IGhhcmQgdG8gY2FsY3VsYXRlIHRoZSBhY3R1YWwN Cj4gICAgIHZhbHVlIG9mDQo+ICAgICA+IHNpemVvZiAoRWxlbWVudCkgd2hlbiB3cml0aW5nIGNv ZGU/DQo+ICAgICA+DQo+ICAgICA+IEkgcmVjb21tZW5kIGNvbnN1bWVyIGFsd2F5cyBhbGxvY2F0 ZXMgbWVtb3J5IGlmIGl04oCZcyBoYXJkIHRvIGp1ZGdlDQo+ICAgICA+IHNpemVvZiAoRWxlbWVu dCkgPCAyNTYuDQo+ICAgICA+DQo+ICAgICA+IFNlYXJjaGluZyBlZGsyIGNvZGUsIEkgY2FuIGZp bmQgYmVsb3cgY29kZSB1c2luZyBQZXJmb3JtUXVpY2tTb3J0KCk6DQo+ICAgICA+DQo+ICAgICA+ ICAxLiBTaGVsbFBrZy9VZWZpU2hlbGxDb21tYW5kTGliOiBJdOKAmXMgc29ydGluZyBhcnJheSBv Zg0KPiAgICAgPiAgICAgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKS4NCj4gICAgID4gIDIu IFVlZmlDcHVQa2cvQ3B1Q2FjaGVJbmZvTGliOiBJdOKAmXMgc29ydGluZyBhcnJheSBvZg0KPiAg ICAgIENQVV9DQUNIRV9JTkZPLg0KPiAgICAgPiAgMy4gTWluUGxhdGZvcm1Qa2cvQWNwaVRhYmxl czogSXTigJlzIHNvcnRpbmcgYXJyYXkgb2YNCj4gICAgIEVGSV9DUFVfSURfT1JERVJfTUFQLg0K PiAgICAgPiAgNC4gTWRlTW9kdWxlUGtnL1VlZmlCb290TWFuYWdlckxpYjogSXTigJlzIHNvcnRp bmcgYXJyYXkgb2YNCj4gICAgID4gICAgIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04uDQo+ ICAgICA+ICA1LiBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogSXTigJlzIHNvcnRpbmcgYXJyYXkg b2YgKEVGSV9GSUxFX0lORk8gKikNCj4gICAgID4gIDYuIENyeXB0b1BrZy9DcnRXcmFwcGVyOiBJ dOKAmXMgc29ydGluZyBhcnJheSBvZiAodW5rbm93biB0eXBlKS4NCj4gICAgID4gIDcuIFJlZGZp c2hQa2cvUmVkZmlzaENydExpYjogSXTigJlzIHNvcnRpbmcgYXJyYXkgb2YgKHVua25vd24gdHlw ZSkuDQo+ICAgICA+DQo+ICAgICA+IEZvciAxfjUsIGl04oCZcyBlYXN5IHRvIGtub3cgdGhhdCB0 aGUgc2l6ZSBvZiB0aGUgZWxlbWVudCBpcyBzbWFsbGVyDQo+ICAgICA+IHRoYW4gMjU2LiBUaGUg QWxsb2NhdGVQb29sKCkgY2FuIGJlIHNraXBwZWQuDQo+ICAgICA+DQo+ICAgICA+IFRoYW5rcywN Cj4gICAgID4NCj4gICAgID4gUmF5DQo+ICAgICA+DQo+ICAgICA+ICpGcm9tOipnYW9saW1pbmcg PGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gICAgID4gKlNlbnQ6KiBTdW5kYXksIFNlcHRl bWJlciAyNiwgMjAyMSAxMDowMSBBTQ0KPiAgICAgPiAqVG86KiBOaSwgUmF5IDxyYXkubmlAaW50 ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87IENoYW4sIEFteQ0KPiAgICAgPiA8YW15LmNo YW5AaW50ZWwuY29tPjsgJ0FuZHJldyBGaXNoJyA8YWZpc2hAYXBwbGUuY29tPg0KPiAgICAgPiAq Q2M6KiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyAnR2Fv LCBMaW1pbmcnDQo+ICAgICA+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IExpdSwgWmhpZ3Vhbmcg PHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+Ow0KPiAgICAgV2FuZywNCj4gICAgID4gSmlhbiBKIDxq aWFuLmoud2FuZ0BpbnRlbC5jb20+OyBHYW8sIFpoaWNoYW8gPHpoaWNoYW8uZ2FvQGludGVsLmNv bT4NCj4gICAgID4gKlN1YmplY3Q6KiDlm57lpI06IFtlZGsyLWRldmVsXSBSRkM6IEFkZCBCYXNl TGliL1F1aWNrU29ydCBpbiBNZGVQa2cNCj4gICAgID4NCj4gICAgID4gUmF5Og0KPiAgICAgPg0K PiAgICAgPiBJIG1heSBzdWdnZXN0IHRvIGFsd2F5cyByZXF1aXJlIEJ1ZmZlck9uZUVsZW1lbnQu IFRoZSBjb25zdW1lciBjb2RlDQo+ICAgICA+IG1heSBub3Qga25vdyBFbGVtZW50U2l6ZS4gVG8g YXZvaWQgdGhlIGVycm9yLCB0aGUgY29uc3VtZXIgbXVzdA0KPiAgICAgPiBhbGxvY2F0ZSBidWZm ZXIgZm9yIEJ1ZmZlck9uZUVsZW1lbnQuIElmIHNvLCBCdWZmZXJPbmVFbGVtZW50IGlzDQo+ICAg ICB0aGUNCj4gICAgID4gcmVxdWlyZWQgcGFyYW1ldGVyLg0KPiAgICAgPg0KPiAgICAgPiBUaGFu a3MNCj4gICAgID4NCj4gICAgID4gTGltaW5nDQo+ICAgICA+DQo+ICAgICA+ICrlj5Hku7bkuroq KjoqTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbSA8bWFpbHRvOnJheS5uaUBpbnRlbC5jb20+Pg0K PiAgICAgPiAq5Y+R6YCB5pe26Ze0OiogMjAyMeW5tDnmnIgyNOaXpSAxMTo1Mw0KPiAgICAgPiAq 5pS25Lu25Lq6OiogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vw cy5pbz47IE5pLA0KPiAgICAgUmF5DQo+ICAgICA+IDxyYXkubmlAaW50ZWwuY29tIDxtYWlsdG86 cmF5Lm5pQGludGVsLmNvbT4+OyBDaGFuLCBBbXkNCj4gICAgID4gPGFteS5jaGFuQGludGVsLmNv bSA8bWFpbHRvOmFteS5jaGFuQGludGVsLmNvbT4+OyBnYW9saW1pbmcNCj4gICAgID4gPGdhb2xp bWluZ0BieW9zb2Z0LmNvbS5jbiA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4+Ow0K PiAgICAgJ0FuZHJldw0KPiAgICAgPiBGaXNoJyA8YWZpc2hAYXBwbGUuY29tIDxtYWlsdG86YWZp c2hAYXBwbGUuY29tPj4NCj4gICAgID4gKuaKhOmAgToqIEtpbm5leSwgTWljaGFlbCBEIDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbQ0KPiAgICAgPiA8bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPj47ICdHYW8sIExpbWluZycNCj4gICAgID4gPGxpbWluZy5nYW9AaW50ZWwuY29t IDxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgTGl1LCBaaGlndWFuZw0KPiAgICAgPiA8 emhpZ3VhbmcubGl1QGludGVsLmNvbSA8bWFpbHRvOnpoaWd1YW5nLmxpdUBpbnRlbC5jb20+Pjsg V2FuZywNCj4gICAgIEppYW4gSg0KPiAgICAgPiA8amlhbi5qLndhbmdAaW50ZWwuY29tIDxtYWls dG86amlhbi5qLndhbmdAaW50ZWwuY29tPj47IEdhbywNCj4gICAgIFpoaWNoYW8NCj4gICAgID4g PHpoaWNoYW8uZ2FvQGludGVsLmNvbSA8bWFpbHRvOnpoaWNoYW8uZ2FvQGludGVsLmNvbT4+DQo+ ICAgICA+ICrkuLvpopg6KiBSRTogW2VkazItZGV2ZWxdIFJGQzogQWRkIEJhc2VMaWIvUXVpY2tT b3J0IGluIE1kZVBrZw0KPiAgICAgPg0KPiAgICAgPiBNb3JlIGRldGFpbHMgb24gbmV3IFF1aWNr U29ydCgpIEFQSToNCj4gICAgID4NCj4gICAgID4gVGhlIG5ldyBBUEkgbmVlZHMgdG8gY2Fycnkg YWRkaXRpb25hbCBwYXJhbWV0ZXIg4oCcQnVmZmVyT25lRWxlbWVudOKAnS4NCj4gICAgID4NCj4g ICAgID4gVGhpcyBwYXJhbWV0ZXIgZ2l2ZXMgUXVpY2tTb3J0KCkgdGhlIHRlbXBvcmFyeSBidWZm ZXIgZm9yDQo+ICAgICBzd2FwcGluZyBpbg0KPiAgICAgPiBzb3J0aW5nLg0KPiAgICAgPg0KPiAg ICAgPiBJdOKAmXMgdG8gYXZvaWQgQmFzZUxpYiBkZXBlbmRzIG9uIE1lbW9yeUFsbG9jYXRpb25M aWIuDQo+ICAgICA+DQo+ICAgICA+IOKApg0KPiAgICAgPg0KPiAgICAgPiBAcGFyYW0gW2luXSBC dWZmZXJPbmVFbGVtZW50ICBXaGVuIEVsZW1lbnRTaXplID4gMjU2LCBjYWxsZXINCj4gICAgIG5l ZWRzIHRvDQo+ICAgICA+IHByb3ZpZGUgYSBidWZmZXIgd2hvc2Ugc2l6ZQ0KPiAgICAgPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbHMgdG8gRWxlbWVudFNpemUuIEl04oCZcyB1 c2VkIGJ5DQo+ICAgICA+IFF1aWNrU29ydCgpIGZvciBzd2FwcGluZyBpbiBzb3J0aW5nLg0KPiAg ICAgPg0KPiAgICAgPiBXaGVuIEVsZW1lbnRTaXplIDw9IDI1NiwgUXVpY2tTb3J0KCkgdXNlcyBh IGxvY2FsIHN0YWNrIDI1Ni1ieXRlDQo+ICAgICBidWZmZXIuDQo+ICAgICA+DQo+ICAgICA+IEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFdoZW4gKEVsZW1lbnRTaXplID4gMjU2KSBhbmQN Cj4gICAgID4gKEJ1ZmZlck9uZUVsZW1lbnQgPT0gTlVMTCkuDQo+ICAgICA+DQo+ICAgICA+IOKA pg0KPiAgICAgPg0KPiAgICAgPiBWT0lEDQo+ICAgICA+DQo+ICAgICA+IEVGSUFQSQ0KPiAgICAg Pg0KPiAgICAgPiBRdWlja1NvcnQgKA0KPiAgICAgPg0KPiAgICAgPiAgIElOIE9VVCBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJUb1NvcnQsDQo+ICAgICA+DQo+ICAgICA+ICAg SU4gQ09OU1QgVUlOVE4gRWxlbWVudENvdW50LA0KPiAgICAgPg0KPiAgICAgPiAgIElOIENPTlNU IFVJTlROIEVsZW1lbnRTaXplLA0KPiAgICAgPg0KPiAgICAgPiAgIElOICAgICAgIFNPUlRfQ09N UEFSRSBDb21wYXJlRnVuY3Rpb24sDQo+ICAgICA+DQo+ICAgICA+IElOIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgKkJ1ZmZlck9uZUVsZW1lbnQgT1BUSU9OQUwNCj4gICAgID4NCj4gICAg ID4gKTsNCj4gICAgID4NCj4gICAgID4gQW55IGNvbW1lbnRzPw0KPiAgICAgPg0KPiAgICAgPiAq RnJvbToqZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4N Cj4gICAgID4gPGRldmVsQGVkazIuZ3JvdXBzLmlvIDxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMu aW8+PiAqT24gQmVoYWxmIE9mDQo+ICAgICA+ICpOaSwgUmF5DQo+ICAgICA+ICpTZW50OiogV2Vk bmVzZGF5LCBTZXB0ZW1iZXIgMjIsIDIwMjEgMjowNCBQTQ0KPiAgICAgPiAqVG86KiBDaGFuLCBB bXkgPGFteS5jaGFuQGludGVsLmNvbSA8bWFpbHRvOmFteS5jaGFuQGludGVsLmNvbT4+Ow0KPiAg ICAgPiBnYW9saW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbg0KPiAgICAgPiA8bWFpbHRv Omdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4+OyAnQW5kcmV3IEZpc2gnIDxhZmlzaEBhcHBsZS5j b20NCj4gICAgID4gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PjsgJ2VkazItZGV2ZWwtZ3JvdXBz LWlvJw0KPiAgICAgPiA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBlZGsyLmdy b3Vwcy5pbz4+DQo+ICAgICA+ICpDYzoqIEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbQ0KPiAgICAgPiA8bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pj47ICdHYW8sIExpbWluZycNCj4gICAgID4gPGxpbWluZy5nYW9AaW50ZWwuY29tIDxtYWlsdG86 bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgTGl1LCBaaGlndWFuZw0KPiAgICAgPiA8emhpZ3Vhbmcu bGl1QGludGVsLmNvbSA8bWFpbHRvOnpoaWd1YW5nLmxpdUBpbnRlbC5jb20+PjsgV2FuZywNCj4g ICAgIEppYW4gSg0KPiAgICAgPiA8amlhbi5qLndhbmdAaW50ZWwuY29tIDxtYWlsdG86amlhbi5q LndhbmdAaW50ZWwuY29tPj47IEdhbywNCj4gICAgIFpoaWNoYW8NCj4gICAgID4gPHpoaWNoYW8u Z2FvQGludGVsLmNvbSA8bWFpbHRvOnpoaWNoYW8uZ2FvQGludGVsLmNvbT4+DQo+ICAgICA+ICpT dWJqZWN0OiogUmU6IFtlZGsyLWRldmVsXSBSRkM6IEFkZCBCYXNlTGliL1F1aWNrU29ydCBpbiBN ZGVQa2cNCj4gICAgID4NCj4gICAgID4gSSBkb27igJl0IHNlZSBvYmplY3Rpb24gc28gZmFyLg0K PiAgICAgPg0KPiAgICAgPiBTbywgdGhlIGZpbmFsIHNvbHV0aW9uIGlzOg0KPiAgICAgPg0KPiAg ICAgPiAgMS4gQWRkIFF1aWNrU29ydCgpIEFQSSB0byBCYXNlTGliIGluIE1kZVBrZy4NCj4gICAg ID4gIDIuIFVwZGF0ZSBleGlzdGluZyBNZGVNb2R1bGVQa2cvU29ydExpYiB0byB1c2UgUXVpY2tT b3J0KCkgaW4gdGhlDQo+ICAgICA+ICAgICBpbXBsZW1lbnRhdGlvbiAocHJvcG9zZWQgYnkgQW5k cmV3IEZpc2ggYW5kIExpbWluZyBHYW8pDQo+ICAgICA+ICAzLiBVcGRhdGUgVWVmaUNwdVBrZyB0 byB1c2UgUXVpY2tTb3J0TGliIHRvIHJlbW92ZSBpbXByb3Blcg0KPiAgICAgPiAgICAgZGVwZW5k ZW5jeSBvbiBNZGVNb2R1bGVQa2cNCj4gICAgID4NCj4gICAgID4gVGhhbmtzLA0KPiAgICAgPg0K PiAgICAgPiBSYXkNCj4gICAgID4NCj4gICAgID4gKkZyb206Kk5pLCBSYXkNCj4gICAgID4gKlNl bnQ6KiBUaHVyc2RheSwgU2VwdGVtYmVyIDE2LCAyMDIxIDEwOjQ4IEFNDQo+ICAgICA+ICpUbzoq IENoYW4sIEFteSA8YW15LmNoYW5AaW50ZWwuY29tIDxtYWlsdG86YW15LmNoYW5AaW50ZWwuY29t Pj47DQo+ICAgICA+IGdhb2xpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuDQo+ICAgICA+ IDxtYWlsdG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPj47ICdBbmRyZXcgRmlzaCcgPGFmaXNo QGFwcGxlLmNvbQ0KPiAgICAgPiA8bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4+OyAnZWRrMi1kZXZl bC1ncm91cHMtaW8nDQo+ICAgICA+IDxkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8bWFpbHRvOmRldmVs QGVkazIuZ3JvdXBzLmlvPj4NCj4gICAgID4gKkNjOiogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tDQo+ICAgICA+IDxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+PjsgJ0dhbywgTGltaW5nJw0KPiAgICAgPiA8bGltaW5nLmdhb0BpbnRlbC5jb20g PG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBMaXUsIFpoaWd1YW5nDQo+ICAgICA+IDxa aGlndWFuZy5MaXVAaW50ZWwuY29tIDxtYWlsdG86WmhpZ3VhbmcuTGl1QGludGVsLmNvbT4+OyBX YW5nLA0KPiAgICAgSmlhbiBKDQo+ICAgICA+IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20gPG1haWx0 bzpqaWFuLmoud2FuZ0BpbnRlbC5jb20+PjsgR2FvLA0KPiAgICAgWmhpY2hhbw0KPiAgICAgPiA8 emhpY2hhby5nYW9AaW50ZWwuY29tIDxtYWlsdG86emhpY2hhby5nYW9AaW50ZWwuY29tPj4NCj4g ICAgID4gKlN1YmplY3Q6KiBSRTogW2VkazItZGV2ZWxdIFJGQzogQWRkIEJhc2VMaWIvUXVpY2tT b3J0IGluIE1kZVBrZw0KPiAgICAgPg0KPiAgICAgPiBBbXksDQo+ICAgICA+DQo+ICAgICA+IE5v LiBXZSBvbmx5IEFkZCBRdWlja1NvcnQoKSBmdW5jdGlvbiBBUEkgaW50byBCYXNlTGliLmguDQo+ ICAgICA+DQo+ICAgICA+ICpGcm9tOipDaGFuLCBBbXkgPGFteS5jaGFuQGludGVsLmNvbSA8bWFp bHRvOmFteS5jaGFuQGludGVsLmNvbT4+DQo+ICAgICA+ICpTZW50OiogVGh1cnNkYXksIFNlcHRl bWJlciAxNiwgMjAyMSAxMDo0NiBBTQ0KPiAgICAgPiAqVG86KiBnYW9saW1pbmcgPGdhb2xpbWlu Z0BieW9zb2Z0LmNvbS5jbg0KPiAgICAgPiA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5j bj4+OyAnQW5kcmV3IEZpc2gnIDxhZmlzaEBhcHBsZS5jb20NCj4gICAgID4gPG1haWx0bzphZmlz aEBhcHBsZS5jb20+PjsgJ2VkazItZGV2ZWwtZ3JvdXBzLWlvJw0KPiAgICAgPiA8ZGV2ZWxAZWRr Mi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4+DQo+ICAgICA+ICpDYzoq IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20gPG1haWx0bzpyYXkubmlAaW50ZWwuY29tPj47IEtp bm5leSwNCj4gICAgID4gTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbQ0KPiAg ICAgPiA8bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47ICdHYW8sIExpbWluZycN Cj4gICAgID4gPGxpbWluZy5nYW9AaW50ZWwuY29tIDxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5j b20+PjsgTGl1LCBaaGlndWFuZw0KPiAgICAgPiA8emhpZ3VhbmcubGl1QGludGVsLmNvbSA8bWFp bHRvOnpoaWd1YW5nLmxpdUBpbnRlbC5jb20+PjsgV2FuZywNCj4gICAgIEppYW4gSg0KPiAgICAg PiA8amlhbi5qLndhbmdAaW50ZWwuY29tIDxtYWlsdG86amlhbi5qLndhbmdAaW50ZWwuY29tPj47 IEdhbywNCj4gICAgIFpoaWNoYW8NCj4gICAgID4gPHpoaWNoYW8uZ2FvQGludGVsLmNvbSA8bWFp bHRvOnpoaWNoYW8uZ2FvQGludGVsLmNvbT4+DQo+ICAgICA+ICpTdWJqZWN0OiogUkU6IFtlZGsy LWRldmVsXSBSRkM6IEFkZCBCYXNlTGliL1F1aWNrU29ydCBpbiBNZGVQa2cNCj4gICAgID4NCj4g ICAgID4gSnVzdCB0byBkb3VibGUgY29uZmlybSwgd2lsbCB3ZSBoYXZlIHRoZSBudWxsIGluc3Rh bmNlIG9mDQo+ICAgICBRdWlja1NvcnQgaW4NCj4gICAgID4gTWRlUGtnPw0KPiAgICAgPg0KPiAg ICAgPiBSZWdhcmRzLA0KPiAgICAgPg0KPiAgICAgPiBBbXkNCj4gICAgID4NCj4gICAgID4gKkZy b206Kmdhb2xpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuDQo+ICAgICA+IDxtYWlsdG86 Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPj4NCj4gICAgID4gKlNlbnQ6KiBUaHVyc2RheSwgU2Vw dGVtYmVyIDE2LCAyMDIxIDEwOjIzIEFNDQo+ICAgICA+ICpUbzoqICdBbmRyZXcgRmlzaCcgPGFm aXNoQGFwcGxlLmNvbSA8bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4+Ow0KPiAgICAgPiAnZWRrMi1k ZXZlbC1ncm91cHMtaW8nIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiAgICAgPiA8bWFpbHRvOmRl dmVsQGVkazIuZ3JvdXBzLmlvPj4NCj4gICAgID4gKkNjOiogTmksIFJheSA8cmF5Lm5pQGludGVs LmNvbSA8bWFpbHRvOnJheS5uaUBpbnRlbC5jb20+PjsgS2lubmV5LA0KPiAgICAgPiBNaWNoYWVs IEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tDQo+ICAgICA+IDxtYWlsdG86bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+PjsgJ0dhbywgTGltaW5nJw0KPiAgICAgPiA8bGltaW5nLmdhb0Bp bnRlbC5jb20gPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBMaXUsIFpoaWd1YW5nDQo+ ICAgICA+IDx6aGlndWFuZy5saXVAaW50ZWwuY29tIDxtYWlsdG86emhpZ3VhbmcubGl1QGludGVs LmNvbT4+OyBXYW5nLA0KPiAgICAgSmlhbiBKDQo+ICAgICA+IDxqaWFuLmoud2FuZ0BpbnRlbC5j b20gPG1haWx0bzpqaWFuLmoud2FuZ0BpbnRlbC5jb20+PjsgR2FvLA0KPiAgICAgWmhpY2hhbw0K PiAgICAgPiA8emhpY2hhby5nYW9AaW50ZWwuY29tIDxtYWlsdG86emhpY2hhby5nYW9AaW50ZWwu Y29tPj47IENoYW4sIEFteQ0KPiAgICAgPiA8YW15LmNoYW5AaW50ZWwuY29tIDxtYWlsdG86YW15 LmNoYW5AaW50ZWwuY29tPj4NCj4gICAgID4gKlN1YmplY3Q6KiDlm57lpI06IFtlZGsyLWRldmVs XSBSRkM6IEFkZCBCYXNlTGliL1F1aWNrU29ydCBpbiBNZGVQa2cNCj4gICAgID4NCj4gICAgID4g QW5kcmV3Og0KPiAgICAgPg0KPiAgICAgPiBUaGFua3MgZm9yIHlvdXIgc3VnZ2VzdGlvbi4gSSB0 aGluayB5b3VyIGlkZWEgaXMgYmV0dGVyLiBXZSBhZGQgbmV3DQo+ICAgICA+IFF1aWNrU29ydCgp IEFQSSB0byBCYXNlTGliLCBhbmQgdXBkYXRlIFNvcnRMaWIgbGlicmFyeSBpbnN0YW5jZSB0bw0K PiAgICAgPiBjb25zdW1lIEJhc2VMaWIgUXVpY2tTb3J0KCkgQVBJLiBUaGlzIHdheSBoYXMgbm8g Y2hhbmdlIGluIGN1cnJlbnQNCj4gICAgID4gU29ydExpYiBsaWJyYXJ5IGNsYXNzLiBJdCBpcyB0 aGUgY29tcGF0aWJsZSBzb2x1dGlvbi4NCj4gICAgID4NCj4gICAgID4gVGhhbmtzDQo+ICAgICA+ DQo+ICAgICA+IExpbWluZw0KPiAgICAgPg0KPiAgICAgPiAq5Y+R5Lu25Lq6Kio6KkFuZHJldyBG aXNoIDxhZmlzaEBhcHBsZS5jb20gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+Pg0KPiAgICAgPiAq 5Y+R6YCB5pe26Ze0OiogMjAyMeW5tDnmnIgxNuaXpSAxMDoxMw0KPiAgICAgPiAq5pS25Lu25Lq6 OiogZWRrMi1kZXZlbC1ncm91cHMtaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+ICAgICA+IDxt YWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+PjsgTGltaW5nIEdhbw0KPiAgICAgPGdhb2xpbWlu Z0BieW9zb2Z0LmNvbS5jbg0KPiAgICAgPiA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5j bj4+DQo+ICAgICA+ICrmioTpgIE6KiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tIDxtYWlsdG86 cmF5Lm5pQGludGVsLmNvbT4+OyBNaWtlDQo+ICAgICA+IEtpbm5leSA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20NCj4gICAgID4gPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+ OyBHYW8sIExpbWluZw0KPiAgICAgPiA8bGltaW5nLmdhb0BpbnRlbC5jb20gPG1haWx0bzpsaW1p bmcuZ2FvQGludGVsLmNvbT4+OyBMaXUsIFpoaWd1YW5nDQo+ICAgICA+IDx6aGlndWFuZy5saXVA aW50ZWwuY29tIDxtYWlsdG86emhpZ3VhbmcubGl1QGludGVsLmNvbT4+OyBXYW5nLA0KPiAgICAg SmlhbiBKDQo+ICAgICA+IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20gPG1haWx0bzpqaWFuLmoud2Fu Z0BpbnRlbC5jb20+PjsgR2FvLA0KPiAgICAgWmhpY2hhbw0KPiAgICAgPiA8emhpY2hhby5nYW9A aW50ZWwuY29tIDxtYWlsdG86emhpY2hhby5nYW9AaW50ZWwuY29tPj47IENoYW4sIEFteQ0KPiAg ICAgPiA8YW15LmNoYW5AaW50ZWwuY29tIDxtYWlsdG86YW15LmNoYW5AaW50ZWwuY29tPj4NCj4g ICAgID4gKuS4u+mimDoqIFJlOiBbZWRrMi1kZXZlbF0gUkZDOiBBZGQgQmFzZUxpYi9RdWlja1Nv cnQgaW4gTWRlUGtnDQo+ICAgICA+DQo+ICAgICA+ICAgICBPbiBTZXAgMTUsIDIwMjEsIGF0IDY6 MjYgUE0sIGdhb2xpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuDQo+ICAgICA+ICAgICA8 bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4+IHdyb3RlOg0KPiAgICAgPg0KPiAgICAg PiAgICAgUmF5Og0KPiAgICAgPg0KPiAgICAgPiAgICAgU29ydExpYiBoYXMgYmVlbiBhZGRlZCBz aW5jZSAyMDE1LiBJIHdvdWxkIHN1Z2dlc3QgdG8gc3RpbGwga2VlcA0KPiAgICAgPiAgICAgdGhp cyBsaWJyYXJ5IGNsYXNzLiBUbyByZXNvbHZlIHRoZSBwYWNrYWdlIGRlcGVuZGVuY3ksIG15DQo+ ICAgICBwcm9wb3NhbA0KPiAgICAgPiAgICAgaXMgdG8gbW92ZSB0aGUgbGlicmFyeSBjbGFzcyBo ZWFkZXIgZmlsZSBTb3J0TGliLmggZnJvbQ0KPiAgICAgPiAgICAgTWRlTW9kdWxlUGtnIHRvIE1k ZVBrZywgYW5kIHN0aWxsIGtlZXAgdGhlIGxpYnJhcnkgaW5zdGFuY2UgaW4NCj4gICAgID4gICAg IE1kZU1vZHVsZVBrZy4gVGhpcyBwcm9wb3NhbCBoYXMgbm8gaW1wYWN0IG9uIHRoZSBleGlzdGlu Zw0KPiAgICAgcGxhdGZvcm0uDQo+ICAgICA+DQo+ICAgICA+IElmIHdlIGFkZCBRdWlja1NvcnQo KSBBUEkgdG8gdGhlIEJhc2VMaWIgY2FuIHdlIG5vdCBqdXN0IHBvcnQgdGhlDQo+ICAgICA+IGV4 aXN0aW5nIE1kZU1vZHVsZVBrZy9Tb3J0TGliIHRvIHVzZSBRdWlja1NvcnQoKSBpbiB0aGUNCj4g ICAgID4gaW1wbGVtZW50YXRpb24/IE9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgd2F5IHRvIGFkZCB0 aGUgbmV3IHRoaW5nDQo+ICAgICBpbiBhDQo+ICAgICA+IGJhY2t3YXJkIGNvbXBhdGlibGUgd2F5 Lg0KPiAgICAgPg0KPiAgICAgPiBUaGFua3MsDQo+ICAgICA+DQo+ICAgICA+IEFuZHJldyBGaXNo DQo+ICAgICA+DQo+ICAgICA+ICAgICBUaGFua3MNCj4gICAgID4NCj4gICAgID4gICAgIExpbWlu Zw0KPiAgICAgPg0KPiAgICAgPiAgICAgKuWPkeS7tuS6uioqOipkZXZlbEBlZGsyLmdyb3Vwcy5p bw0KPiAgICAgPiA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPjxkZXZlbEBlZGsyLmdyb3Vw cy5pbw0KPiAgICAgPiA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPj4q5Luj6KGoKioqTmks IFJheQ0KPiAgICAgPiAgICAgKuWPkemAgeaXtumXtDoqMjAyMeW5tDnmnIgxNOaXpTE0OjE1DQo+ ICAgICA+ICAgICAq5pS25Lu25Lq6OipLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20NCj4gICAgID4gICAgIDxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+PjsgR2FvLCBMaW1pbmcNCj4gICAgID4gICAgIDxsaW1pbmcuZ2FvQGludGVsLmNvbSA8bWFp bHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IExpdSwNCj4gICAgID4gICAgIFpoaWd1YW5nIDx6 aGlndWFuZy5saXVAaW50ZWwuY29tDQo+ICAgICA8bWFpbHRvOnpoaWd1YW5nLmxpdUBpbnRlbC5j b20+PjsNCj4gICAgID4gICAgIFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tDQo+ ICAgICA+ICAgICA8bWFpbHRvOmppYW4uai53YW5nQGludGVsLmNvbT4+OyBHYW8sIFpoaWNoYW8N Cj4gICAgID4gICAgIDx6aGljaGFvLmdhb0BpbnRlbC5jb20gPG1haWx0bzp6aGljaGFvLmdhb0Bp bnRlbC5jb20+Pg0KPiAgICAgPiAgICAgKuaKhOmAgToqZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1h aWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz47DQo+ICAgICBDaGFuLCBBbXkNCj4gICAgID4gICAg IDxhbXkuY2hhbkBpbnRlbC5jb20gPG1haWx0bzphbXkuY2hhbkBpbnRlbC5jb20+Pg0KPiAgICAg PiAgICAgKuS4u+mimDoqW2VkazItZGV2ZWxdIFJGQzogQWRkIEJhc2VMaWIvUXVpY2tTb3J0IGlu IE1kZVBrZw0KPiAgICAgPg0KPiAgICAgPiAgICAgSGkgcGFja2FnZSBtYWludGFpbmVycyBvZiBN ZGVQa2csIE1kZU1vZHVsZVBrZyBhbmQgU2hlbGxQa2csDQo+ICAgICA+ICAgICBjb21tdW5pdHks DQo+ICAgICA+DQo+ICAgICA+ICAgICBBIGNvbW1pdCAoVWVmaUNwdVBrZy9DcHVDYWNoZUluZm9M aWI6IFNvcnQgQ3B1Q2FjaGVJbmZvIGFycmF5DQo+ICAgICA+DQo+ICAgICA8aHR0cHM6Ly9naXRo dWIuY29tL3RpYW5vY29yZS9lZGsyL2NvbW1pdC80ZGU3N2FlOTg5MGQyNDEyNzFmNTQzZTkxOTVh YjM1MTZmM2FiZWM2PikNCj4gICAgID4gICAgIHRvIFVlZmlDcHVQa2cgbGV0DQo+ICAgICA+ICAg ICBVZWZpQ3B1UGtnIGRlcGVuZCBvbiBNZGVNb2R1bGVQa2cgYmVjYXVzZSB0aGUgU29ydExpYiBj bGFzcyBhbmQNCj4gICAgID4gICAgIGluc3RhbmNlcyBhcmUgYWxsIGluIE1kZU1vZHVsZVBrZy4N Cj4gICAgID4NCj4gICAgID4gICAgIFVlZmlDcHVQa2cgZGVwZW5kaW5nIG9uIE1kZU1vZHVsZVBr ZyBicmVha3MgdGhlIHJ1bGUgdGhhdA0KPiAgICAgPiAgICAg4oCcVWVmaUNwdVBrZyBzaG91bGQg T05MWSBkZXBlbmQgb24gTWRlUGtn4oCdLg0KPiAgICAgPg0KPiAgICAgPiAgICAgVG8gYWRkcmVz cyB0aGlzIGlzc3VlLCB0aGVyZSBhcmUgdHdvIGFwcHJvYWNoZXM6DQo+ICAgICA+DQo+ICAgICA+ ICAgICAgMS4gRHVwbGljYXRlIHRoZSBzb3J0IGxvZ2ljIGluIFVlZmlDcHVQa2cgdG8gbm90IGRl cGVuZCBvbg0KPiAgICAgPiAgICAgICAgIE1kZU1vZHVsZVBrZy9Tb3J0TGliDQo+ICAgICA+ICAg ICAgMi4gQWRkIFF1aWNrU29ydCgpIEFQSSB0byBCYXNlTGliIGluIE1kZVBrZy4NCj4gICAgID4N Cj4gICAgID4gICAgIEFwcHJvYWNoICMyIChNZGVQa2cvQmFzZUxpYi9RdWlja1NvcnQpIG1ha2Vz IG1vcmUgc2Vuc2UgYmVjYXVzZQ0KPiAgICAgPiAgICAgcXVpY2sgc29ydCBpcyBhIHN0YW5kYXJk IGFsZ29yaXRobS4NCj4gICAgID4NCj4gICAgID4gICAgIFdlIGVuY291cmFnZSBjb25zdW1lcnMg dG8gdXBkYXRlIHRoZWlyIGNvZGUgdG8gdXNlIHRoZSBxdWljaw0KPiAgICAgc29ydA0KPiAgICAg PiAgICAgaW4gTWRlUGtnIGFuZCBncmFkdWFsbHkgZGVwcmVjYXRlIHRvZGF54oCZcyBNZGVNb2R1 bGVQa2cvU29ydExpYi4NCj4gICAgID4NCj4gICAgID4gICAgIElmIHlvdSBkb27igJl0IGhhdmUg Y29uY2VybnMsIEkgcGxhbiB0bzoNCj4gICAgID4NCj4gICAgID4gICAgICAxLiDigJxBZGQgUXVp Y2tTb3J0KCkgdG8gQmFzZUxpYuKAnSBhbmQgdXBkYXRlIGFsbCBleGlzdGluZw0KPiAgICAgY29u c3VtZXJzDQo+ICAgICA+ICAgICAgICAgdG8gdXNlIHRoaXMgQVBJIGluc3RlYWQuDQo+ICAgICA+ DQo+ICAgICA+ICAgICBWT0lEDQo+ICAgICA+DQo+ICAgICA+ICAgICBFRklBUEkNCj4gICAgID4N Cj4gICAgID4gICAgIFF1aWNrU29ydCAoDQo+ICAgICA+DQo+ICAgICA+ICAgICAgIElOIE9VVCBW T0lEICAgICAgICAgICAgICAgICAgICpCdWZmZXJUb1NvcnQsDQo+ICAgICA+DQo+ICAgICA+ICAg ICAgIElOIENPTlNUIFVJTlROIENvdW50LA0KPiAgICAgPg0KPiAgICAgPiAgICAgICBJTiBDT05T VCBVSU5UTiBFbGVtZW50U2l6ZSwNCj4gICAgID4NCj4gICAgID4gICBJTiAgICAgICBTT1JUX0NP TVBBUkUgICAgICAgICBDb21wYXJlRnVuY3Rpb24NCj4gICAgID4NCj4gICAgID4gICAgICAgKTsN Cj4gICAgID4NCj4gICAgID4gICAgICAyLiDigJxBZGQgbmV3IFNoZWxsUGtnL1NvcnRDb21wYXJl TGli4oCdDQo+ICAgICA+DQo+ICAgICA+ICAgICBCYWNrZ3JvdW5kOiBTaGVsbFBrZyByZXF1aXJl cyB0byBzb3J0IGRldmljZXBhdGgvc3RyaW5nIHNvIDMNCj4gICAgIEFQSXMNCj4gICAgID4gICAg IGluIFVlZmlTb3J0TGliIChEZXZpY2VQYXRoQ29tcGFyZSwgU3RyaW5nTm9DYXNlQ29tcGFyZSwN Cj4gICAgID4gICAgIFN0cmluZ0NvbXBhcmUpIGFyZSBwcm92aWRlZCBmb3IgU2hlbGwgdXNhZ2Uu IHdlIGNhbiBtb3ZlIHRoZSAzDQo+ICAgICA+ICAgICBBUElzIHRvIHRoZSBTb3J0Q29tcGFyZUxp YiBhbmQgdXBkYXRlIFNoZWxsIGNvZGUgdG8gdXNlDQo+ICAgICA+ICAgICBCYXNlTGliL1F1aWNr U29ydCBkaXJlY3RseSwgd2l0aCB0aGUgc29ydCBjb21wYXJlIGZ1bmN0aW9uIGZyb20NCj4gICAg ID4gICAgIFNvcnRDb21wYXJlTGliLg0KPiAgICAgPg0KPiAgICAgPiAgICAgQW55IGNvbmNlcm5z Pw0KPiAgICAgPg0KPiAgICAgPiAgICAgVGhhbmtzLA0KPiAgICAgPg0KPiAgICAgPiAgICAgUmF5 DQo+ICAgICA+DQo+ICAgICA+DQo+ICAgICANCj4NCiANCiANCiANCg0KIA0KIA0KIA0K ------=_001_NextPart153340754688_=---- Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =20
For former caller, they could still keep= as is to call the old API in MdeModulePkg. I think Ray's design is compati= ble change for existing code.
Only when the ex= isting code wants to remove the dependency on MdeModuelPkg, they could migr= ate to the new API in baselib.

I agree with one split-= API desgin what you mentioned. 
But my point is to define one API in baselib and&nb= sp;to make the baselib not depend on memory allocation.  And another wrapper= API could be designed to be placed in any other class.


Jeff
fanjianfeng@byosoft.com.cn
<= blockquote style=3D"margin-top: 0px; margin-bottom: 0px; margin-left: 2em; = margin-right: inherit;">
 
From= : Marvin H=C3=A4user
Date: 2021-09-27 16:14
To: fanjianfeng@byosoft.com.cn;= devel@edk2.groups.io; Ni, Ray; 'gaoliming'; Chan, Amy= ; 'Andrew Fish'
Subject: Re: [edk2-devel] RFC: Add Ba= seLib/QuickSort in MdePkg
On 27/09/2021 02:45, f= anjianfeng@byosoft.com.cn wrote:
> Making baselib implementation depend on MemoryAllocationLib
> (indirectly on Pei Service and gBS), it may prevent
> this base API using at some seneraio. i = don't think it's better.
 
That is why I asked about a split-API scenario, one of which does not =
depend on dynamic memory allocation (SetVariable-like) and one does
(wrapper-like).
 
> Add this parameter and make this parameter is optional,
> 1, when NULL, use the local 256 bytes stack
> 2, if 256 bytes stack is not enough, return RETURE_BUFFER_TOO_SAM= LL,
> 3, caller check the return status, to do nothing or to alloc= ate enough
> buffer for retry
>
> This is just like SetVariable()'s implementation.
 
Yes, and because that is SetVariable's implementation, we have library=
functions to make it less error-prone and more convenient [1]. As a
matter of fact, we have a (semi-lax) policy in our codebases to avoid =
such functions like the plague and use those library wrappers where-ev= er
it can make sense. The only super-rare exceptions I can think of are <= /div>
when we know the size of the element ahead of time. Also SetVariable h= as
no arbitrary constraint on when it may work the first time, and there = is
code that will fail when the first return is not EFI_BUFFER_TOO_SMALL.=
 
This solution honestly yields even more problems, because it introduce= s
a Status return which was not there before. For common code safety and=
quality policy, this requires the value *must* be retrieved and checke= d
in some fashion. So all callers, no matter the prior knowledge of the =
element size, now need either a runtime check and handling for a statu= s
that they (may) know can never be returned, or ASSERTs if the function=
spec really imposes the arbitrary 256 Bytes constraint. Latter doesn't=
really work I think. What if someone wants to sort in SEC and noticed =
they only have 64 Bytes on the stack to work with, realistically? Any =
code depending on the 256 Byte constraint, passing NULL and not doing =
additional handling, would seize to work. Former is too complicated, s= ee
wrappers. In my opinion, the memory must *either* be fully managed by =
the caller *or* the callee (and you may have both in separate function= s,
as I suggested), but not sometimes here, sometimes there.
 
Best regards,
Marvin
 
 
[1]
https://github.com/tianocore/edk2/blob/46b4606ba23498d3d0e66b53e498eb3= d5d592586/MdePkg/Library/UefiLib/UefiLib.c#L1309-L1360
 
>
> -----------------------------------------------------------------= -------
> Jeff
> fanjianfeng@byosoft.com.cn
>
>     *From:* Marvin H=C3=A4user <mailto:mha= euser@posteo.de>
>     *Date:* 2021-09-26 19:20
>     *To:* devel <mailto:devel@edk2.groups.= io>; ray.ni
>     <mailto:ray.ni@intel.com>; gaolimin= g
>     <mailto:gaoliming@byosoft.com.cn>; = Chan, Amy
>     <mailto:amy.chan@intel.com>; 'Andre= w Fish' <mailto:afish@apple.com>
>     *CC:* Kinney, Michael D <mailto:michae= l.d.kinney@intel.com>; 'Gao,
>     Liming' <mailto:liming.gao@intel.com&g= t;; Liu, Zhiguang
>     <mailto:zhiguang.liu@intel.com>; Wa= ng, Jian J
>     <mailto:jian.j.wang@intel.com>; Gao= , Zhichao
>     <mailto:zhichao.gao@intel.com>
>     *Subject:* Re: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     Hey Ray,
>     In my opinion that spec is too complicate= d. For some cases it is
>     obvious, but I think the last anyone want= s to see is a
>     (STATIC_)ASSERT
>     before most QuickSort calls to ensure the= element size *really* is <=3D
>     256 Bytes. In my opinion, there are two r= oads:
>     1) Make the parameter required (I think t= his is what Liming
>     suggested).
>     The caller would always need to provide s= aid buffer, and it can do
>     as it
>     sees fit - on the stack, in a pool, in a = page, who knows.
>     2) Remove the parameter entirely. The lib= rary would depend on
>     MemoryAllocationLib again, but also would= have an optimisation by
>     choosing stack vs pool based on ElementSi= ze.
>     Usually I would prefer 2), as it is less = prone to caller errors, but
>     considering the low-level nature of edk2,= I can totally see the
>     point to
>     allow the caller to control whether there= are dynamic memory
>     allocations
>     made or not as possible with 1). 2) could= technically also be a
>     wrapper
>     for 1) if you want granular control and c= onvenience/safety (why not
>     actually?).
>     Both approaches have the advantage that i= t is crystal-clear what the
>     caller's job is - to always or to never a= llocate the buffer.
>     Best regards,
>     Marvin
>     On 26/09/2021 04:24, Ni, Ray wrote:
>     >
>     > Liming,
>     >
>     > The purpose of the optional BufferOn= eElement is to ease consumer=E2=80=99s
>     > life assuming most of the time the e= lement size should be
>     smaller than
>     > 256.
>     >
>     > Are you saying that it=E2=80=99s a b= it hard to calculate the actual
>     value of
>     > sizeof (Element) when writing code?<= /div>
>     >
>     > I recommend consumer always allocate= s memory if it=E2=80=99s hard to judge
>     > sizeof (Element) < 256.
>     >
>     > Searching edk2 code, I can find belo= w code using PerformQuickSort():
>     >
>     >  1. ShellPkg/UefiShellCommandLi= b: It=E2=80=99s sorting array of
>     >     (EFI_DEVICE_= PATH_PROTOCOL *).
>     >  2. UefiCpuPkg/CpuCacheInfoLib:= It=E2=80=99s sorting array of
>      CPU_CACHE_INFO.
>     >  3. MinPlatformPkg/AcpiTables: = It=E2=80=99s sorting array of
>     EFI_CPU_ID_ORDER_MAP.
>     >  4. MdeModulePkg/UefiBootManage= rLib: It=E2=80=99s sorting array of
>     >     EFI_BOOT_MAN= AGER_LOAD_OPTION.
>     >  5. MdeModulePkg/CapsuleApp: It= =E2=80=99s sorting array of (EFI_FILE_INFO *)
>     >  6. CryptoPkg/CrtWrapper: It=E2= =80=99s sorting array of (unknown type).
>     >  7. RedfishPkg/RedfishCrtLib: I= t=E2=80=99s sorting array of (unknown type).
>     >
>     > For 1~5, it=E2=80=99s easy to know t= hat the size of the element is smaller
>     > than 256. The AllocatePool() can be = skipped.
>     >
>     > Thanks,
>     >
>     > Ray
>     >
>     > *From:*gaoliming <gaoliming@byoso= ft.com.cn>
>     > *Sent:* Sunday, September 26, 2021 1= 0:01 AM
>     > *To:* Ni, Ray <ray.ni@intel.com&g= t;; devel@edk2.groups.io; Chan, Amy
>     > <amy.chan@intel.com>; 'Andrew = Fish' <afish@apple.com>
>     > *Cc:* Kinney, Michael D <michael.= d.kinney@intel.com>; 'Gao, Liming'
>     > <liming.gao@intel.com>; Liu, Z= higuang <zhiguang.liu@intel.com>;
>     Wang,
>     > Jian J <jian.j.wang@intel.com>= ; Gao, Zhichao <zhichao.gao@intel.com>
>     > *Subject:* =E5=9B=9E=E5=A4=8D: [edk2= -devel] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     > Ray:
>     >
>     > I may suggest to always require Buff= erOneElement. The consumer code
>     > may not know ElementSize. To avoid t= he error, the consumer must
>     > allocate buffer for BufferOneElement= . If so, BufferOneElement is
>     the
>     > required parameter.
>     >
>     > Thanks
>     >
>     > Liming
>     >
>     > *=E5=8F=91=E4=BB=B6=E4=BA=BA**:*Ni, = Ray <ray.ni@intel.com <mailto:ray.ni@intel.com>>
>     > *=E5=8F=91=E9=80=81=E6=97=B6=E9=97= =B4:* 2021=E5=B9=B49=E6=9C=8824=E6=97=A5 11:53
>     > *=E6=94=B6=E4=BB=B6=E4=BA=BA:* devel= @edk2.groups.io <mailto:devel@edk2.groups.io>; Ni,
>     Ray
>     > <ray.ni@intel.com <mailto:ray.= ni@intel.com>>; Chan, Amy
>     > <amy.chan@intel.com <mailto:am= y.chan@intel.com>>; gaoliming
>     > <gaoliming@byosoft.com.cn <mai= lto:gaoliming@byosoft.com.cn>>;
>     'Andrew
>     > Fish' <afish@apple.com <mailto= :afish@apple.com>>
>     > *=E6=8A=84=E9=80=81:* Kinney, Michae= l D <michael.d.kinney@intel.com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *=E4=B8=BB=E9=A2=98:* RE: [edk2-deve= l] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     > More details on new QuickSort() API:=
>     >
>     > The new API needs to carry additiona= l parameter =E2=80=9CBufferOneElement=E2=80=9D.
>     >
>     > This parameter gives QuickSort() the= temporary buffer for
>     swapping in
>     > sorting.
>     >
>     > It=E2=80=99s to avoid BaseLib depend= s on MemoryAllocationLib.
>     >
>     > =E2=80=A6
>     >
>     > @param [in] BufferOneElement  W= hen ElementSize > 256, caller
>     needs to
>     > provide a buffer whose size
>     >       =             &nb= sp;           equals to E= lementSize. It=E2=80=99s used by
>     > QuickSort() for swapping in sorting.=
>     >
>     > When ElementSize <=3D 256, QuickS= ort() uses a local stack 256-byte
>     buffer.
>     >
>     > @retval EFI_INVALID_PARAMETER When (= ElementSize > 256) and
>     > (BufferOneElement =3D=3D NULL).
>     >
>     > =E2=80=A6
>     >
>     > VOID
>     >
>     > EFIAPI
>     >
>     > QuickSort (
>     >
>     >   IN OUT VOID &n= bsp;            = ;           *BufferT= oSort,
>     >
>     >   IN CONST UINTN= ElementCount,
>     >
>     >   IN CONST UINTN= ElementSize,
>     >
>     >   IN   &nbs= p;   SORT_COMPARE CompareFunction,
>     >
>     > IN VOID     = ;            &n= bsp;       *BufferOneElement OPTIONAL
>     >
>     > );
>     >
>     > Any comments?
>     >
>     > *From:*devel@edk2.groups.io <mail= to:devel@edk2.groups.io>
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>> *On Behalf Of
>     > *Ni, Ray
>     > *Sent:* Wednesday, September 22, 202= 1 2:04 PM
>     > *To:* Chan, Amy <amy.chan@intel.c= om <mailto:amy.chan@intel.com>>;
>     > gaoliming <gaoliming@byosoft.com.= cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>; 'Andrew Fish' <afish@apple.com
>     > <mailto:afish@apple.com>>; = 'edk2-devel-groups-io'
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>>
>     > *Cc:* Kinney, Michael D <michael.= d.kinney@intel.com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *Subject:* Re: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     >
>     > I don=E2=80=99t see objection so far= .
>     >
>     > So, the final solution is:
>     >
>     >  1. Add QuickSort() API to Base= Lib in MdePkg.
>     >  2. Update existing MdeMod= ulePkg/SortLib to use QuickSort() in the
>     >     implementati= on (proposed by Andrew Fish and Liming Gao)
>     >  3. Update UefiCpuPkg to use Qu= ickSortLib to remove improper
>     >     dependency o= n MdeModulePkg
>     >
>     > Thanks,
>     >
>     > Ray
>     >
>     > *From:*Ni, Ray
>     > *Sent:* Thursday, September 16, 2021= 10:48 AM
>     > *To:* Chan, Amy <amy.chan@intel.c= om <mailto:amy.chan@intel.com>>;
>     > gaoliming <gaoliming@byosoft.com.= cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>; 'Andrew Fish' <afish@apple.com
>     > <mailto:afish@apple.com>>; = 'edk2-devel-groups-io'
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>>
>     > *Cc:* Kinney, Michael D <michael.= d.kinney@intel.com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <Zhiguang.Liu@intel.com <mailt= o:Zhiguang.Liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *Subject:* RE: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     >
>     > Amy,
>     >
>     > No. We only Add QuickSort() function= API into BaseLib.h.
>     >
>     > *From:*Chan, Amy <amy.chan@intel.= com <mailto:amy.chan@intel.com>>
>     > *Sent:* Thursday, September 16, 2021= 10:46 AM
>     > *To:* gaoliming <gaoliming@byosof= t.com.cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>; 'Andrew Fish' <afish@apple.com
>     > <mailto:afish@apple.com>>; = 'edk2-devel-groups-io'
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>>
>     > *Cc:* Ni, Ray <ray.ni@intel.com &= lt;mailto:ray.ni@intel.com>>; Kinney,
>     > Michael D <michael.d.kinney@intel= .com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *Subject:* RE: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     >
>     > Just to double confirm, will we have= the null instance of
>     QuickSort in
>     > MdePkg?
>     >
>     > Regards,
>     >
>     > Amy
>     >
>     > *From:*gaoliming <gaoliming@byoso= ft.com.cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>
>     > *Sent:* Thursday, September 16, 2021= 10:23 AM
>     > *To:* 'Andrew Fish' <afish@apple.= com <mailto:afish@apple.com>>;
>     > 'edk2-devel-groups-io' <devel@edk= 2.groups.io
>     > <mailto:devel@edk2.groups.io>&= gt;
>     > *Cc:* Ni, Ray <ray.ni@intel.com &= lt;mailto:ray.ni@intel.com>>; Kinney,
>     > Michael D <michael.d.kinney@intel= .com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>; Chan, Amy
>     > <amy.chan@intel.com <mailto:am= y.chan@intel.com>>
>     > *Subject:* =E5=9B=9E=E5=A4=8D: [edk2= -devel] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     > Andrew:
>     >
>     > Thanks for your suggestion. I think = your idea is better. We add new
>     > QuickSort() API to BaseLib, and upda= te SortLib library instance to
>     > consume BaseLib QuickSort() API. Thi= s way has no change in current
>     > SortLib library class. It is the com= patible solution.
>     >
>     > Thanks
>     >
>     > Liming
>     >
>     > *=E5=8F=91=E4=BB=B6=E4=BA=BA**:*Andr= ew Fish <afish@apple.com <mailto:afish@apple.com>>
>     > *=E5=8F=91=E9=80=81=E6=97=B6=E9=97= =B4:* 2021=E5=B9=B49=E6=9C=8816=E6=97=A5 10:13
>     > *=E6=94=B6=E4=BB=B6=E4=BA=BA:* edk2-= devel-groups-io <devel@edk2.groups.io
>     > <mailto:devel@edk2.groups.io>&= gt;; Liming Gao
>     <gaoliming@byosoft.com.cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>
>     > *=E6=8A=84=E9=80=81:* Ni, Ray <ra= y.ni@intel.com <mailto:ray.ni@intel.com>>; Mike
>     > Kinney <michael.d.kinney@intel.co= m
>     > <mailto:michael.d.kinney@intel.co= m>>; Gao, Liming
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>; Chan, Amy
>     > <amy.chan@intel.com <mailto:am= y.chan@intel.com>>
>     > *=E4=B8=BB=E9=A2=98:* Re: [edk2-deve= l] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     >     On Sep 15, 2= 021, at 6:26 PM, gaoliming <gaoliming@byosoft.com.cn
>     >     <mailto:g= aoliming@byosoft.com.cn>> wrote:
>     >
>     >     Ray:
>     >
>     >     SortLib has = been added since 2015. I would suggest to still keep
>     >     this library= class. To resolve the package dependency, my
>     proposal
>     >     is to move t= he library class header file SortLib.h from
>     >     MdeModulePkg= to MdePkg, and still keep the library instance in
>     >     MdeModulePkg= . This proposal has no impact on the existing
>     platform.
>     >
>     > If we add QuickSort() API to the Bas= eLib can we not just port the
>     > existing MdeModulePkg/SortLib t= o use QuickSort() in the
>     > implementation? Or is there some oth= er way to add the new thing
>     in a
>     > backward compatible way.
>     >
>     > Thanks,
>     >
>     > Andrew Fish
>     >
>     >     Thanks
>     >
>     >     Liming
>     >
>     >     *=E5=8F=91= =E4=BB=B6=E4=BA=BA**:*devel@edk2.groups.io
>     > <mailto:devel@edk2.groups.io>&= lt;devel@edk2.groups.io
>     > <mailto:devel@edk2.groups.io>&= gt;*=E4=BB=A3=E8=A1=A8***Ni, Ray
>     >     *=E5=8F=91= =E9=80=81=E6=97=B6=E9=97=B4:*2021=E5=B9=B49=E6=9C=8814=E6=97=A514:15
>     >     *=E6=94=B6= =E4=BB=B6=E4=BA=BA:*Kinney, Michael D <michael.d.kinney@intel.com
>     >     <mailto:m= ichael.d.kinney@intel.com>>; Gao, Liming
>     >     <liming.g= ao@intel.com <mailto:liming.gao@intel.com>>; Liu,
>     >     Zhiguang <= ;zhiguang.liu@intel.com
>     <mailto:zhiguang.liu@intel.com>>= ;
>     >     Wang, Jian J= <jian.j.wang@intel.com
>     >     <mailto:j= ian.j.wang@intel.com>>; Gao, Zhichao
>     >     <zhichao.= gao@intel.com <mailto:zhichao.gao@intel.com>>
>     >     *=E6=8A=84= =E9=80=81:*devel@edk2.groups.io <mailto:devel@edk2.groups.io>;
>     Chan, Amy
>     >     <amy.chan= @intel.com <mailto:amy.chan@intel.com>>
>     >     *=E4=B8=BB= =E9=A2=98:*[edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     >     Hi package m= aintainers of MdePkg, MdeModulePkg and ShellPkg,
>     >     community,
>     >
>     >     A commit (Ue= fiCpuPkg/CpuCacheInfoLib: Sort CpuCacheInfo array
>     >
>     <https://github.com/tianocore/edk2/com= mit/4de77ae9890d241271f543e9195ab3516f3abec6>)
>     >     to UefiCpuPk= g let
>     >     UefiCpuPkg d= epend on MdeModulePkg because the SortLib class and
>     >     instances ar= e all in MdeModulePkg.
>     >
>     >     UefiCpuPkg d= epending on MdeModulePkg breaks the rule that
>     >     =E2=80=9CUef= iCpuPkg should ONLY depend on MdePkg=E2=80=9D.
>     >
>     >     To address t= his issue, there are two approaches:
>     >
>     >      1. Dup= licate the sort logic in UefiCpuPkg to not depend on
>     >      &= nbsp;  MdeModulePkg/SortLib
>     >      2. Add= QuickSort() API to BaseLib in MdePkg.
>     >
>     >     Approach #2 = (MdePkg/BaseLib/QuickSort) makes more sense because
>     >     quick sort i= s a standard algorithm.
>     >
>     >     We encourage= consumers to update their code to use the quick
>     sort
>     >     in MdePkg an= d gradually deprecate today=E2=80=99s MdeModulePkg/SortLib.
>     >
>     >     If you don= =E2=80=99t have concerns, I plan to:
>     >
>     >      1. =E2= =80=9CAdd QuickSort() to BaseLib=E2=80=9D and update all existing
>     consumers
>     >      &= nbsp;  to use this API instead.
>     >
>     >     VOID
>     >
>     >     EFIAPI
>     >
>     >     QuickSort&nb= sp;(
>     >
>     >       = IN OUT VOID         =           *BufferToSort,<= /div>
>     >
>     >       = IN CONST UINTN Count,
>     >
>     >       = IN CONST UINTN ElementSize,
>     >
>     >   IN   &nbs= p;   SORT_COMPARE       &= nbsp; CompareFunction
>     >
>     >       = );
>     >
>     >      2. =E2= =80=9CAdd new ShellPkg/SortCompareLib=E2=80=9D
>     >
>     >     Background: = ShellPkg requires to sort devicepath/string so 3
>     APIs
>     >     in UefiSortL= ib (DevicePathCompare, StringNoCaseCompare,
>     >     StringCompar= e) are provided for Shell usage. we can move the 3
>     >     APIs to the = SortCompareLib and update Shell code to use
>     >     BaseLib/Quic= kSort directly, with the sort compare function from
>     >     SortCompareL= ib.
>     >
>     >     Any concerns= ?
>     >
>     >     Thanks,
>     >
>     >     Ray
>     >
>     >
>    
>
 
 
 
 
 
 
------=_001_NextPart153340754688_=------