X-From-Line: address@hidden Thu Jul 17 16:53:35 2003 Return-path: Envelope-to: address@hidden Delivery-date: Thu, 17 Jul 2003 13:26:53 +0200 Received: from hermes.epita.fr ([163.5.255.10] helo=epita.fr) by kualalumpur.lrde.epita.fr with esmtp (Exim 3.35 #1 (Debian)) id 19d6uT-0005xK-00 for ; Thu, 17 Jul 2003 13:26:53 +0200 Received: from f7.net (consort.superb.net [209.61.216.22]) by epita.fr id h6HBR5P20344 for EPITA Paris France Thu, 17 Jul 2003 13:27:05 +0200 (CEST) Received: from monty-python.gnu.org (monty-python.gnu.org [199.232.76.173]) by f7.net (8.11.7/8.11.7) with ESMTP id h6HBQxX31635; Thu, 17 Jul 2003 07:26:59 -0400 Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.20) id 19d6uD-000417-Al for address@hidden; Thu, 17 Jul 2003 07:26:37 -0400 Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.20) id 19d6u9-0003xF-Ml for address@hidden; Thu, 17 Jul 2003 07:26:33 -0400 Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.20) id 19d6qD-0000zY-S9 for address@hidden; Thu, 17 Jul 2003 07:22:30 -0400 Received: from [218.247.140.130] (helo=mailserver.great-road.com) by monty-python.gnu.org with esmtp (Exim 4.20) id 19d6nh-00078j-CR for address@hidden; Thu, 17 Jul 2003 07:19:53 -0400 Date: Thu, 17 Jul 2003 16:53:35 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C34C40.E831C6E0" X-Gnus-Mail-Source: pop:address@hidden Message-ID: X-MS-Has-Attach: yes content-class: urn:content-classes:message X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0 X-MS-TNEF-Correlator: Thread-Topic: problem about autoconf , from china Thread-Index: AcNMPtZE4iUuOEKqRZqVkhOY+Ly4bQ== From: 刘韡 To: Subject: problem about autoconf , from china X-BeenThere: address@hidden X-Mailman-Version: 2.1.2 Precedence: list List-Id: Bug reports for autoconf, the GNU build system List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: address@hidden Errors-To: address@hidden X-Spam-Status: No, hits=1.4 required=5.0 tests=BASE64_ENC_TEXT version=2.20 X-Spam-Level: * Status: X-Content-Length: 168353 Lines: 2210 Xref: nostromo.lrde.epita.fr autoconf.misc:1922 autoconf.bug:2734 This is a multi-part message in MIME format. ------_=_NextPart_001_01C34C40.E831C6E0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv L0VOIj48SFRNTD48SEVBRD48TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9 InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+PC9IRUFEPjxCT0RZPjxESVY+V2hlbiZuYnNwOyBy dW5uaW5nJm5ic3A7dGhlIApjb25maWd1cmUsJm5ic3A7SSZuYnNwOyZuYnNwO2dvdCAmbmJzcDt0 aGUgZXJyb3IgbWVzc2FnZXM8L0RJVj48RElWPmNvbmZpZ3VyZTogV0FSTklORzogbWluaWd1aS9t aW5pZ3VpLmg6IHByZXNlbnQgYnV0IApjYW5ub3QgYmUgY29tcGlsZWQ8L0RJVj48RElWPjxESVY+ Y29uZmlndXJlOiBXQVJOSU5HOiBtaW5pZ3VpL21pbmlndWkuaDogY2hlY2sgZm9yIAptaXNzaW5n IHByZXJlcXVpc2l0ZSBoZWFkZXJzPzwvRElWPjxESVY+PERJVj5jb25maWd1cmU6IFdBUk5JTkc6 IG1pbmlndWkvbWluaWd1aS5oOiBwcm9jZWVkaW5nIHdpdGggCnRoZSBwcmVwcm9jZXNzb3IncyBy ZXN1bHQ8L0RJVj48RElWPiZuYnNwOzwvRElWPjxESVY+Jm5ic3A7PC9ESVY+PERJVj5NeSBPUyBp cyZuYnNwOyZuYnNwO3RoZSBSZWRIYXQgOS4wJm5ic3A7KCAKdm1saW51ei0yLjQuMjAtOCk8L0RJ Vj48RElWPmFuZCBoYXJkd2FyZSBpcyBhIEhQIExIMyBQQyBTRVJWRVI8L0RJVj48RElWPiZuYnNw OzwvRElWPjxESVY+dGhlIGZpbGVzIG1pbmlndWkuaCBhbmQgY29uZmlndXJlIGFyZSBhdHRhY2hl ZDwvRElWPjxESVY+Jm5ic3A7PC9ESVY+PERJVj5UaGFua3MhPC9ESVY+PC9ESVY+PC9ESVY+PC9C T0RZPjwvSFRNTD4= ------_=_NextPart_001_01C34C40.E831C6E0 Content-Type: text/plain; name="minigui.h" Content-Transfer-Encoding: base64 Content-Description: minigui.h Content-Disposition: attachment; filename="minigui.h" LyoqDQogKiBcZmlsZSBtaW5pZ3VpLmgNCiAqIFxhdXRob3IgV2VpIFlvbmdtaW5nIDx5bXdlaUBt aW5pZ3VpLm9yZz4NCiAqIFxkYXRlIDIwMDIvMDEvMDYNCiAqIA0KICogVGhpcyBmaWxlIGluY2x1 ZGVzIGdsb2JhbCBhbmQgbWlzY2VsbGFuZW91cyBpbnRlcmZhY2VzIG9mIE1pbmlHVUkuDQogKg0K IFx2ZXJiYXRpbQ0KICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAyIFdlaSBZb25nbWluZy4NCiAg ICBDb3B5cmlnaHQgKEMpIDIwMDIgRmV5bm1hbiBTb2Z0d2FyZS4NCg0KICAgIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIE1pbmlHVUksIGEgbGlnaHR3ZWlnaHQgR3JhcGhpY3MgVXNlciBJbnRlcmZhY2Ug DQogICAgc3VwcG9ydCBsaWJyYXJ5IGZvciByZWFsLXRpbWUgZW1iZWRkZWQgTGludXguDQoNCiAg ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yDQogICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg R2VuZXJhbCBQdWJsaWMNCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogIA0KICAgIFRoaXMgbGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mDQogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUNCiAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4NCiAgDQogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCiAgICBMaWNlbnNlIGFsb25nIHdp dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlDQogICAgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sDQog ICAgTUEgMDIxMTEtMTMwNywgVVNBDQogXGVuZHZlcmJhdGltDQogKi8NCg0KLyoNCiAqICRJZDog bWluaWd1aS5oLHYgMS40IDIwMDMvMDMvMzEgMDk6MTA6MzIgd2VpZ2wgRXhwICQNCiAqIA0KICog ICAgICAgICAgICAgTWluaUdVSSBmb3IgTGludXggVmVyc2lvbiAxLjEueHgNCiAqICAgICAgICAg ICAgIENvcHlyaWdodCAoYykgMTk5OCB+IDIwMDEgIFdlaSBZb25nbWluZy4NCiAqICAgICAgICAg ICAgIExhc3QgbW9kaWZpZWQgZGF0ZTogMjAwMS4wOC4xNA0KICovDQoNCiNpZm5kZWYgX01HVUlf TUlOSUdVSV9IDQogICNkZWZpbmUgX01HVUlfTUlOSUdVSV9IDQoNCiNpbmNsdWRlIDxzeXMvdGlt ZS5oPg0KI2lmbmRlZiBfTElURV9WRVJTSU9ODQogICNpbmNsdWRlIDxwdGhyZWFkLmg+DQogICNp bmNsdWRlIDxzZW1hcGhvcmUuaD4NCiNlbmRpZg0KDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVy biAiQyIgew0KI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLw0KDQogICAgLyoqDQogICAgICogXGFk ZHRvZ3JvdXAgZ2xvYmFsX3ZhcnMgR2xvYmFsIHZhcmlhYmxlcw0KICAgICAqIEB7DQogICAgICov DQoNCiAgICAvKioNCiAgICAgKiBcZGVmZ3JvdXAgcmVjdF92YXJzIFJlY3RhbmdsZXMNCiAgICAg KiBAew0KICAgICAqLw0KDQovKioNCiAqIFx2YXIgUkVDVCBnX3JjU2NyDQogKiBcYnJpZWYgQ29u dGFpbnMgdGhlIHJlY3RhbmdsZSBvZiB0aGUgd2hvbGUgc2NyZWVuLg0KICovDQpleHRlcm4gUkVD VCBnX3JjU2NyOyAgICAgICAgIC8qIFRoZSBSRUNUIG9mIHNjcmVlbi4gKi8NCg0KI2lmZGVmIF9M SVRFX1ZFUlNJT04NCg0KLyoqDQogKiBcdmFyIFJFQ1QgZ19yY0Rlc2t0b3ANCiAqIFxicmllZiBD b250YWlucyB0aGUgcmVjdGFuZ2xlIG9mIGRlc2t0b3Agb2YgdGhlIGFwcGxpY2F0aW9uLg0KICoN CiAqIFxub3RlIE9ubHkgYXZhaWxhYmxlIGZvciBNaW5pR1VJLUxpdGUgYXMgYW4gYWN0dWFsIGds b2JhbCB2YXJpYWJsZS4NCiAqIEFuZCBcYSBnX3JjRGVza3RvcCBpcyBkZWZpbmVkIGFzIGFuIGFs aWFzIChtYWNybykgb2YgXGEgZ19yY1NjciBmb3IgTWluaUdVSS1UaHJlYWRzLg0KICoNCiAqIFxz YSBnX3JjU2NyDQogKi8NCmV4dGVybiBSRUNUIGdfcmNEZXNrdG9wOyAgICAgLyogVGhlIFJFQ1Qg b2YgZGVza3RvcC4gKi8NCg0KLyoqDQogKiBcdmFyIFJFQ1QgZ19yY0V4Y2x1ZGVkDQogKiBcYnJp ZWYgQ29udGFpbnMgdGhlIHJlY3RhbmdsZSBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBjbGllbnRz JyBkZXNrdG9wLg0KICoNCiAqIFxub3RlIE9ubHkgaGF2ZSBtZWFuaW5nIGZvciB0aGUgc2VydmVy IG9mIE1pbmlHVUktTGl0ZS4gRm9yIGNsaWVudHMsDQogKiB0aGlzIHZhcmlhYmxlIGFsd2FzeSBi ZSBlcXVhbCB0byBcYSBnX3JjRGVza3RvcC4NCiAqDQogKiBcc2EgZ19yY0Rlc2t0b3ANCiAqLw0K ZXh0ZXJuIFJFQ1QgZ19yY0V4Y2x1ZGVkOw0KDQojZWxzZQ0KI2RlZmluZSBnX3JjRGVza3RvcCAg ICAgZ19yY1Njcg0KI2VuZGlmDQoNCiAgICAvKiogQH0gZW5kIG9mIHJlY3RfdmFycyAqLw0KDQog ICAgLyoqDQogICAgICogXGRlZmdyb3VwIGxpdGVfdmFycyBNaW5pR1VJLUxpdGUgc3BlY2lmaWMg dmFyaWFibGVzDQogICAgICogQHsNCiAgICAgKi8NCg0KI2lmZGVmIF9MSVRFX1ZFUlNJT04NCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCg0KLyoqDQogKiBcdmFyIEJPT0wgbWdJc1NlcnZlcg0KICog XGJyaWVmIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzIHRoZSBzZXJ2ZXIgb3IgYSBj bGllbnQgb24gTWluaUdVSS1MaXRlLg0KICoNCiAqIFxub3RlIE9ubHkgZGVmaW5lZCBmb3IgTWlu aUdVSS1MaXRlLg0KICovDQpleHRlcm4gQk9PTCBtZ0lzU2VydmVyOyAgICAgIC8qIElzIHRoZSBz ZXJ2ZXIgb3IgYSBjbGllbnQuICovDQoNCi8qKg0KICogXHZhciB2b2lkKiBtZ1NoYXJlZFJlcw0K ICogXGJyaWVmIENvbnRhaW5zIHRoZSBwb2ludGVyIHRvIHRoZSBzaGFyZWQgcmVzb3VyY2Ugb2Yg TWluaUdVSS1MaXRlLg0KICoNCiAqIFxub3RlIE5vdCBkZWZpbmVkIGZvciBNaW5pR1VJLVRocmVh ZHMsIGFuZCB0aGUgc2hhcmVkIHJlc291cmNlIGFyZQ0KICogcmVhZC1vbmx5IGZvciBhbGwgY2xp ZW50cy4NCiAqDQogKiBcc2EgbWdTaXplUmVzDQogKi8NCmV4dGVybiB2b2lkKiBtZ1NoYXJlZFJl czsgICAgLyogVGhlIHBvaW50ZXIgdG8gc2hhcmVkIHJlc291cmNlLiAqLw0KDQovKioNCiAqIFx2 YXIgdm9pZCogbWdTaXplUmVzDQogKiBcYnJpZWYgQ29udGFpbnMgdGhlIGxlbmd0aCBvZiBzaGFy ZWQgcmVzb3VyY2Ugb2YgTWluaUdVSS1MaXRlLg0KICoNCiAqIFxub3RlIE9ubHkgZGVmaW5lZCBm b3IgTWluaUdVSS1MaXRlLiANCiAqDQogKiBcc2EgbWdTaGFyZWRSZXMNCiAqLw0KZXh0ZXJuIHNp emVfdCBtZ1NpemVSZXM7ICAgICAvKiBUaGUgc2l6ZSBvZiBzaGFyZWQgcmVzb3VyY2UuICovDQoN CiNkZWZpbmUgTEVOX0xBWUVSX05BTUUgICAgICAxNA0KI2RlZmluZSBMRU5fQ0xJRU5UX05BTUUg ICAgIDE0DQoNCiNkZWZpbmUgSU5WX0xBWUVSX0hBTkRMRSAgICAwDQoNCi8qIHZhcmlhYmxlcyBv bmx5IGF2YWlsYWJsZSBmb3IgdGhlIHNlcnZlciAqLw0KDQpzdHJ1Y3QgTUdfTGF5ZXI7DQoNCi8q KiBDbGllbnQgaW5mb3JtYXRpb24uICovDQp0eXBlZGVmIHN0cnVjdCBNR19DbGllbnQNCnsNCiAg ICAvKiogVGhlIG5hbWUgb2YgdGhlIGNsaWVudC4gKi8NCiAgICBjaGFyICAgIG5hbWUgW0xFTl9D TElFTlRfTkFNRSArIDFdOw0KDQogICAgLyoqIFBJRCBvZiB0aGUgY2xpZW50IHByb2Nlc3MuICov DQogICAgcGlkX3QgICBwaWQ7DQogICAgLyoqIFVJRCBvZiB0aGUgY2xpZW50IHByb2Nlc3MuICov DQogICAgdWlkX3QgICB1aWQ7DQogICAgLyoqIFRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHNv Y2tldCBjb25uZWN0ZWQgdG8gdGhlIGNsaWVudC4gKi8NCiAgICBpbnQgICAgIGZkOw0KDQogICAg LyoqIFRoZSBkZXNrdG9wIHJlY3RhbmdsZSBvZiB0aGUgY2xpZW50LiAqLw0KICAgIFJFQ1QgICAg cmM7DQogICAgLyoqIFRoZSBsYXN0IGFjdGl2ZSB0aWNrIGNvdW50IG9mIHRoZSBjbGllbnQuICov DQogICAgRFdPUkQgICBsYXN0X2xpdmVfdGltZTsNCiAgICAvKiogVGhlIGFkZGl0aW9uYWwgZGF0 YSBvZiB0aGUgY2xpZW50LiAqLw0KICAgIERXT1JEICAgZHdBZGREYXRhOw0KDQogICAgLyoqIFRo ZSBwb2ludGVyIHRvIHRoZSBuZXh0IGNsaWVudCBpbiB0aGUgc2FtZSBsYXllci4gKi8NCiAgICBz dHJ1Y3QgIE1HX0NsaWVudCogbmV4dDsNCiAgICAvKiogVGhlIHBvaW50ZXIgdG8gdGhlIHByZXZp b3VzIGNsaWVudCBpbiB0aGUgc2FtZSBsYXllci4gKi8NCiAgICBzdHJ1Y3QgIE1HX0NsaWVudCog cHJldjsNCg0KICAgIC8qKiBUaGUgcG9pbnRlciB0byB0aGUgbGF5ZXIgb24gd2hpY2ggdGhlIGNs aWVudCBsYXlzLiAqLw0KICAgIHN0cnVjdCAgTUdfTGF5ZXIqIGxheWVyOw0KDQogICAgc3RydWN0 IEdsb2JhbFJlcyogZ2xvYmFsX3JlczsNCn0gTUdfQ2xpZW50Ow0KDQpzdHJ1Y3QgX0NMSVBSR047 DQoNCi8qKiBMYXllciBpbmZvcm1hdGlvbi4gKi8NCnR5cGVkZWYgc3RydWN0IE1HX0xheWVyDQp7 DQogICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBsYXllci4gKi8NCiAgICBjaGFyICAgIG5hbWUgW0xF Tl9MQVlFUl9OQU1FICsgMV07DQoNCiAgICAvKiogVGhlIHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2Yg Y2xpZW50cyB3aGljaCBsYXkgb24gdGhlIGxheWVyLiAqLw0KICAgIE1HX0NsaWVudCogY2xpX2hl YWQ7DQogICAgLyoqIFRoZSBwb2ludGVyIHRvIHRoZSBhY3RpdmUgY2xpZW50IG9uIHRoZSBsYXll ci4gKi8NCiAgICBNR19DbGllbnQqIGNsaV9hY3RpdmU7DQogICAgLyoqIFRoZSBhZGRpdGlvbmFs IGRhdGEgb2YgdGhlIGxheWVyLiAqLw0KICAgIERXT1JEICAgZHdBZGREYXRhOw0KDQogICAgLyoq IFRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGxheWVyLiAqLw0KICAgIHN0cnVjdCBNR19MYXllciog bmV4dDsNCiAgICAvKiogVGhlIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIGxheWVyLiAqLw0KICAg IHN0cnVjdCBNR19MYXllciogcHJldjsNCg0KICAgIC8qKiBUaGUgcG9pbnRlciB0byB0aGUgcmVn aW9uIGNvbnRhaW5zIHRoZSBzcGFyZSByZWN0YW5nbGVzIG9mIHRoZSBsYXllci4gKi8NCiAgICBz dHJ1Y3QgX0NMSVBSR04qIHNwYXJlX3JlY3RzOw0KfSBNR19MYXllcjsNCg0KLyoqDQogKiBcdmFy IGludCBtZ0NsaWVudFNpemUNCiAqIFxicmllZiBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBhcnJh eSBcYSBtZ0NsaWVudHMuDQogKg0KICogXHNhIG1nQ2xpZW50cw0KICovDQpleHRlcm4gaW50IG1n Q2xpZW50U2l6ZTsNCg0KLyoqDQogKiBcdmFyIE1HX0NsaWVudCogbWdDbGllbnRzDQogKiBcYnJp ZWYgVGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IGNvbnRhaW5zIGFsbCBjbGllbnRzJyBpbmZvcm1h dGlvbi4NCiAqDQogKiBZb3UgY2FuIGFjY2VzcyB0aGUgZWxlbWVudHMgaW4gXGEgbWdDbGllbnRz IGFzIGEgbm9ybWFsIGFycmF5LiBJZiB0aGUgDQogKiBmaWVsZCBcYSBmZCBvZiBvbmUgZWxlbWVu dCBpcyBub3QgbGVzcyB0aGFuIHplcm8sIHRoZW4gdGhlIGVsZW1lbnQNCiAqIHdpbGwgYmUgYSB2 YWlsZCBjbGllbnQuDQogKg0KICogXHNhIE1HX0NsaWVudA0KICovDQpleHRlcm4gTUdfQ2xpZW50 KiBtZ0NsaWVudHM7DQoNCi8qKg0KICogXHZhciBNR19MYXllciogbWdUb3Btb3N0TGF5ZXINCiAq IFxicmllZiBUaGUgcG9pbnRlciB0byB0aGUgdG9wbW9zdCBsYXllci4NCiAqDQogKiBcc2EgTUdf TGF5ZXINCiAqLw0KZXh0ZXJuIE1HX0xheWVyKiBtZ1RvcG1vc3RMYXllcjsNCg0KLyoqDQogKiBc dmFyIE1HX0xheWVyKiBtZ0xheWVycw0KICogXGJyaWVmIFRoZSBwb2ludGVyIHRvIHRoZSBsaXN0 IG9mIGxheWVycy4NCiAqDQogKiBcc2EgTUdfTGF5ZXINCiAqLw0KZXh0ZXJuIE1HX0xheWVyKiBt Z0xheWVyczsNCg0KI2VuZGlmIC8qIExJVEVfVkVSU0lPTiAqLw0KDQogICAgLyoqIEB9IGVuZCBv ZiBsaXRlX3ZhcnMgKi8NCg0KICAgIC8qKiBAfSBlbmQgb2YgZ2xvYmFsX3ZhcnMgKi8NCg0KI2lm bmRlZiBfTElURV9WRVJTSU9ODQpCT09MIEdVSUFQSSBJbml0R1VJICh2b2lkKTsNCnZvaWQgR1VJ QVBJIFRlcm1pbmF0ZUdVSSAoaW50IHJjQnlHVUkpOw0Kdm9pZCBHVUlBUEkgTWluaUdVSVBhbmlj IChpbnQgZXhpdGNvZGUpOw0KI2Vsc2UNCg0KICAgIC8qKg0KICAgICAqIFxhZGR0b2dyb3VwIGZu cyBGdW5jdGlvbnMNCiAgICAgKiBAew0KICAgICAqLw0KDQogICAgLyoqDQogICAgICogXGFkZHRv Z3JvdXAgZ2xvYmFsX2ZucyBHbG9iYWwvZ2VuZXJhbCBmdW5jdGlvbnMNCiAgICAgKiBAew0KICAg ICAqLw0KDQogICAgLyoqDQogICAgICogXGRlZmdyb3VwIGxpdGVfZm5zIE1pbmlHVUktTGl0ZSBz cGVjaWZpYyBmdW5jdGlvbnMNCiAgICAgKiBAew0KICAgICAqLw0KDQogICAgLyoqDQogICAgICog XGRlZmdyb3VwIGxpdGVfbGF5ZXJfZm5zIExheWVyIG9wZXJhdGlvbnMNCiAgICAgKg0KICAgICAq IEEgY2xpZW50IGluIE1pbmlHVUktTGl0ZSBjYW4gY3JlYXRlIGEgbmV3IGxheWVyIG9yIGpvaW4g YW4gZXhpc3RlZCBsYXllciANCiAgICAgKiBpbiBvcmRlciB0byBnZXQgdGhlIHZpc2libGUgZGVz a3RvcCByZWN0YW5nbGUgb24gdGhlIHNjcmVlbiBvZiBpdC4NCiAgICAgKg0KICAgICAqIEV4YW1w bGU6DQogICAgICoNCiAgICAgKiBcaW5jbHVkZSBjbGllbnRfc3RhcnR1cC5jDQogICAgICoNCiAg ICAgKiBAew0KICAgICAqLw0KDQovKiogDQogKiBcZm4gR0hBTkRMRSBHVUlBUEkgSm9pbkxheWVy IChjb25zdCBjaGFyKiBsYXllcl9uYW1lLCBjb25zdCBjaGFyKiBjbGllbnRfbmFtZSwgaW50IGx4 LCBpbnQgdHksIGludCByeCwgaW50IGJ5KQ0KICogXGJyaWVmIEpvaW5zIHRvIGEgbGF5ZXIuDQog Kg0KICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJ5IGNsaWVudHMgYmVmb3JlIGNh bGxpbmcgYW55IG90aGVyIE1pbmlHVUkNCiAqIGZ1bmN0aW9ucy4gWW91IGNhbiBjYWxsIFxhIEdl dExheWVySW5mbyB0byBnZXQgdGhlIGxheWVyIGluZm9ybWF0aW9uLg0KICogSWYgdGhlIGxheWVy IHRvIGJlIGpvaW5lZCBkb2VzIG5vdCBleGlzdCwgdGhlIHNlcnZlciwgaS5lLiBcYSBtZ2luaXQs IHdpbGwNCiAqIHRyeSB0byBjcmVhdGUgYSBuZXcgb25lLiBJZiB5b3UgcGFzc2VkIGEgTlVMTCBw b2ludGVyIG9yIGEgbnVsbCBzdHJpbmcgZm9yIA0KICogXGEgbGF5ZXJfbmFtZSwgYSBuZXcgbGF5 ZXIgd2lsbCBiZSBjcmVhdGVkIGFzIHdlbGwuDQogKg0KICogXHBhcmFtIGxheWVyX25hbWUgVGhl IG5hbWUgb2YgdGhlIGxheWVyLg0KICogXHBhcmFtIGNsaWVudF9uYW1lIFRoZSBuYW1lIG9mIHRo ZSBjbGllbnQuDQogKiBccGFyYW0gbHgsdHkscngsYnkgVGhlIGV4cGVjdGVkIGRlc2t0b3AgcmVj dCBvZiB0aGUgY2xpZW50Lg0KICogXHJldHVybiBUaGUgaGFuZGxlIHRvIHRoZSBsYXllciBvbiBz dWNjZXNzLCBJTlZfTEFZRVJfSEFORExFIG9uIGVycm9yLg0KICoNCiAqIFxzYSBHZXRMYXllcklu Zm8sIEdldERlc2t0b3BSZWN0LCBTZXJ2ZXJTdGFydHVwDQogKi8NCkdIQU5ETEUgR1VJQVBJIEpv aW5MYXllciAoY29uc3QgY2hhciogbGF5ZXJfbmFtZSwgY29uc3QgY2hhciogY2xpZW50X25hbWUs IA0KICAgICAgICAgICAgICAgIGludCBseCwgaW50IHR5LCBpbnQgcngsIGludCBieSk7DQoNCiNk ZWZpbmUgU2V0RGVza3RvcFJlY3QobHgsIHR5LCByeCwgYnkpIFwNCiAgICAgICAgSm9pbkxheWVy ICgiIiwgIiIsIGx4LCB0eSwgcngsIGJ5KQ0KDQovKiogDQogKiBcZm4gdm9pZCBHVUlBUEkgR2V0 RGVza3RvcFJlY3QgKGludCogbHgsIGludCogdHksIGludCogcngsIGludCogYnkpDQogKiBcYnJp ZWYgR2V0cyB0aGUgZGVza3RvcCByZWN0Lg0KICoNCiAqIEFmdGVyIGpvaW5lZCB0byBhIGxheWVy LCBjbGllbnQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlDQogKiBhY3R1YWwgZGVz a3RvcCByZWN0IG9mIGl0c2VsZi4gDQogKg0KICogXHBhcmFtIGx4LHR5LHJ4LGJ5IFRoZSBkZXNr dG9wIHJlY3Qgd2lsbCBiZSByZXR1cm5lZCB0aHJvdWdoIHRoZXNlIHBvaW50ZXJzLg0KICoNCiAq IFxzYSBKb2luTGF5ZXINCiAqLw0Kdm9pZCBHVUlBUEkgR2V0RGVza3RvcFJlY3QgKGludCogbHgs IGludCogdHksIGludCogcngsIGludCogYnkpOw0KDQojZGVmaW5lIE5BTUVfU0VMRl9MQVlFUiAg ICAgIiINCg0KLyoqIA0KICogXGZuIEdIQU5ETEUgR1VJQVBJIEdldExheWVySW5mbyAoY29uc3Qg Y2hhciogbGF5ZXJfbmFtZSwgUkVDVCogbWF4X3JlY3QsIGludCogbnJfY2xpZW50cywgQk9PTCog aXNfdG9wbW9zdCwgaW50KiBjbGlfYWN0aXZlKQ0KICogXGJyaWVmIEdldHMgaW5mb3JtYXRpb24g b2YgYSBsYXllci4NCiAqDQogKiBZb3UgY2FuIGdldCB0aGUgaW5mb3JtYXRpb24gb2YgYSBsYXll ciB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIA0KICogVGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0 dXJuZWQgdGhyb3VnaCB0aGUgcG9pbnRlciBhcmd1bWVudHMgDQogKiBpZiB0aGUgc3BlY2lmaWMg cG9pbnRlciBpcyBub3QgTlVMTC4NCiAqDQogKiBccGFyYW0gbGF5ZXJfbmFtZSBUaGUgbmFtZSBv ZiB0aGUgbGF5ZXIuDQogKiBccGFyYW0gbWF4X3JlY3QgVGhlIG1heCBkZXNrdG9wIHJlY3QgY2Fu IGJlIG9idGFpbmVkIHdpbGwgYmUgcmV0dXJuZWQgdGhyb3VnaCB0aGlzIHBvaW50ZXIuDQogKiBc cGFyYW0gbnJfY2xpZW50cyBUaGUgbnVtYmVyIG9mIGNsaWVudHMgaW4gdGhlIGxheWVyIHdpbGwg YmUgcmV0dXJuZWQgdGhyb3VnaCB0aGlzIHBvaW50ZXIuDQogKiBccGFyYW0gaXNfdG9wbW9zdCBB IGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxheWVyIGlzIHRoZSB0b3Btb3N0 IGxheWVyIHdpbGwgYmUgcmV0dXJuZWQuDQogKiBccGFyYW0gY2xpX2FjdGl2ZSBUaGUgaWRlbnRp ZmllciBvZiB0aGUgYWN0aXZlIGNsaWVudCBpbiB0aGUgbGF5ZXIuDQogKiBccmV0dXJuIFJldHVy bnMgdGhlIGhhbmRsZSB0byB0aGUgbGF5ZXIgb24gc3VjY2VzcywgSU5WX0xBWUVSX0hBTkRMRSBv biBlcnJvci4NCiAqDQogKiBcc2EgSm9pbkxheWVyDQogKi8NCkdIQU5ETEUgR1VJQVBJIEdldExh eWVySW5mbyAoY29uc3QgY2hhciogbGF5ZXJfbmFtZSwgUkVDVCogbWF4X3JlY3QsIA0KICAgICAg ICAgICAgICAgIGludCogbnJfY2xpZW50cywgQk9PTCogaXNfdG9wbW9zdCwgaW50KiBjbGlfYWN0 aXZlKTsNCg0KLyoqIA0KICogXGZuIEJPT0wgR1VJQVBJIEJyaW5nTGF5ZXIyVG9wbW9zdCAoR0hB TkRMRSBoYW5kbGUpDQogKiBcYnJpZWYgQnJpbmdzIGEgbGF5ZXIgdG8gYmUgdG9wbW9zdC4NCiAq DQogKiBUaGlzIGZ1bmN0aW9uIGJyaW5ncyB0aGUgc3BlY2lmaWVkIGxheWVyIFxhIGhhbmRsZSB0 byBiZSB0aGUgdG9wbW9zdCBsYXllci4NCiAqDQogKiBccGFyYW0gaGFuZGxlIFRoZSBoYW5kbGUg dG8gdGhlIGxheWVyLg0KICogXHJldHVybiBUUlVFIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBGQUxT RS4NCiAqDQogKiBcc2EgU2V0QWN0aXZlQ2xpZW50DQogKi8NCkJPT0wgR1VJQVBJIEJyaW5nTGF5 ZXIyVG9wbW9zdCAoR0hBTkRMRSBoYW5kbGUpOw0KDQovKiogDQogKiBcZm4gQk9PTCBHVUlBUEkg U2V0QWN0aXZlQ2xpZW50IChpbnQgYWN0aXZlKQ0KICogXGJyaWVmIFNldHMgYSBjbGllbnQgYXMg YXRpdmUgY2xpZW50Lg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgc3BlY2lmaWVkIGNs aWVudCBcYSBhY3RpdmUgdG8gYmUgdGhlIGFjdGl2ZSBvbmUuDQogKiBJdCBhbHNvIGJyaW5nIHRo ZSBsYXllciBpbiB3aGljaCB0aGUgY2xpZW50IGxheXMgdG8gYmUgdGhlIHRvcG1vc3QgYXMgd2Vs bC4NCiAqDQogKiBccGFyYW0gYWN0aXZlIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjbGllbnQuDQog KiBccmV0dXJuIFRSVUUgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIEZBTFNFLg0KICoNCiAqIFxzYSBC cmluZ0xheWVyMlRvcG1vc3QNCiAqLw0KQk9PTCBHVUlBUEkgU2V0QWN0aXZlQ2xpZW50IChpbnQg YWN0aXZlKTsNCg0KICAgIC8qKiBAfSBlbmQgb2YgbGl0ZV9sYXllcl9mbnMgKi8NCg0KICAgIC8q Kg0KICAgICAqIFxkZWZncm91cCBsaXRlX3NlcnZlcl9mbnMgU2VydmVyLW9ubHkgb3BlcmF0aW9u cw0KICAgICAqDQogICAgICogTWluaUdVSSBwcm92aWRlcyBzb21lIHNlcnZlci1vbmx5IGZ1bmN0 aW9ucyBmb3IgeW91IHRvIGNyZWF0ZSBhDQogICAgICogY3VzdG9taXplZCBzZXJ2ZXIgZm9yIE1p bmlHVUktTGl0ZSwgaS5lLiBcYSBtZ2luaXQuDQogICAgICoNCiAgICAgKiBFeGFtcGxlOg0KICAg ICAqDQogICAgICogXGluY2x1ZGUgc2VydmVyX3N0YXJ0dXAuYw0KICAgICAqDQogICAgICogQHsN CiAgICAgKi8NCg0KI2RlZmluZSBMQ09fTkVXX0NMSUVOVCAgICAgIDENCiNkZWZpbmUgTENPX0RF TF9DTElFTlQgICAgICAyDQoNCi8qKg0KICogXHZhciB0eXBlZGVmIHZvaWQgKCogT05fTkVXX0RF TF9DTElFTlQpIChpbnQgb3AsIGludCBjbGkpDQogKiBcYnJpZWYgQ2xpZW50IGV2ZW50IGNhbGxi YWNrLg0KICoNCiAqIFxzYSBPbk5ld0RlbENsaWVudCwgT25DaGFuZ2VMYXllcg0KICovDQp0eXBl ZGVmIHZvaWQgKCogT05fTkVXX0RFTF9DTElFTlQpIChpbnQgb3AsIGludCBjbGkpOw0KDQojZGVm aW5lIExDT19ORVdfTEFZRVIgICAgICAgMQ0KI2RlZmluZSBMQ09fREVMX0xBWUVSICAgICAgIDIN CiNkZWZpbmUgTENPX0pPSU5fQ0xJRU5UICAgICAzDQojZGVmaW5lIExDT19SRU1PVkVfQ0xJRU5U ICAgNA0KI2RlZmluZSBMQ09fVE9QTU9TVF9DSEFOR0VEIDUNCiNkZWZpbmUgTENPX0FDVElWRV9D SEFOR0VEICA2DQoNCi8qKg0KICogXHZhciB0eXBlZGVmIHZvaWQgKCogT05fQ0hBTkdFX0xBWUVS KSAoaW50IG9wLCBNR19MYXllciogbGF5ZXIsIE1HX0NsaWVudCogY2xpZW50KQ0KICogXGJyaWVm IExheWVyIGV2ZW50IGNhbGxiYWNrLg0KICoNCiAqIFxzYSBPbk5ld0RlbENsaWVudCwgT25DaGFu Z2VMYXllcg0KICovDQp0eXBlZGVmIHZvaWQgKCogT05fQ0hBTkdFX0xBWUVSKSAoaW50IG9wLCBN R19MYXllciogbGF5ZXIsIE1HX0NsaWVudCogY2xpZW50KTsNCg0KLyoqDQogKiBcdmFyIE9OX05F V19ERUxfQ0xJRU5UIE9uTmV3RGVsQ2xpZW50DQogKiBcYnJpZWYgU2V0cyB0byBhIGZ1bmN0aW9u IHRvIGhhbmRsZSBhIGNvbW1pbmcgaW4vZ29pbmcgYXdheSBjb25uZWN0aW9uLg0KICoNCiAqIFdo ZW4gYSBjbGllbnQgaXMgY29ubmVjdGluZyB0byBvciBkaXNjb25uZWN0aW5nIGZyb20gdGhlIHNl cnZlciwgTWluaUdVSQ0KICogd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGVsbCB5b3UgdGhl IGV2ZW50IGFuZCB0aGUgY2xpZW50IGlkZW50aWZpZXIuIA0KICogVGhlIGV2ZW50IGNvdWxkIGJl IG9uZSBvZiB0aGUgZm9sbG93aW5nOg0KICoNCiAqICAtIExDT19ORVdfQ0xJRU5UXG4NCiAqICAg IEEgbmV3IGNsaWVudCBpcyBjb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIuDQogKiAgLSBMQ09fREVM X0NMSUVOVFxuDQogKiAgICBBIG5ldyBjbGllbnQgaXMgZGlzY29ubmVjdGluZyBmcm9tIHRoZSBz ZXJ2ZXIuDQogKg0KICogVGhlIGV2ZW50IHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGFyZ3Vt ZW50IG9mIFxhIG9wLCBhbmQgdGhlIGNsaWVudA0KICogaWRlbnRpZmllciB3aWxsIGJlIHBhc3Nl ZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBvZiBcYSBjbGkuDQogKiBZb3UgY2FuIGdldCB0aGUgaW5m b3JtYXRpb24gb2YgdGhlIGNsaWVudCBieSB1c2luZyBcYSBjbGkgYW5kIFxhIG1nQ2xpZW50cy4N CiAqDQogKiBcbm90ZSBPbmx5IGF2YWlsYWJsZSBmb3IgdGhlIHNlcnZlciBvZiBNaW5pR1VJLUxp dGUuDQogKiANCiAqIFxzYSBPTl9ORVdfREVMX0NMSUVOVCwgbWdDbGllbnRzDQogKi8NCmV4dGVy biBPTl9ORVdfREVMX0NMSUVOVCBPbk5ld0RlbENsaWVudDsNCg0KLyoqDQogKiBcdmFyIE9OX0NI QU5HRV9MQVlFUiBPbkNoYW5nZUxheWVyDQogKiBcYnJpZWYgU2V0cyB0byBhIGZ1bmN0aW9uIHRv IGhhbmRsZSBldmVudHMgb2YgbGF5ZXJzLg0KICoNCiAqIFdoZW4gYSBsYXllciBpcyBjaGFuZ2lu ZywgTWluaUdVSSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0ZWxsIA0KICogeW91IHRoZSBl dmVudCBhbmQgdGhlIGxheWVyIG9yIHRoZSBjbGllbnQgd2hpY2ggbGVhZHMgdG8gdGhlIGV2ZW50 Lg0KICogVGhlIGV2ZW50IGNvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOg0KICoNCiAqICAt IExDT19ORVdfTEFZRVJcbg0KICogICAgQSBuZXcgbGF5ZXIgaXMgY3JlYXRpbmcuDQogKiAgLSBM Q09fREVMX0xBWUVSXG4NCiAqICAgIEEgbmV3IGxheWVyIGlzIGRlbGV0aW5nLg0KICogIC0gTENP X0pPSU5fQ0xJRU5UXG4NCiAqICAgIEEgY2xpZW50IGlzIGpvaW5pbmcgdG8gdGhlIGxheWVyLg0K ICogIC0gTENPX1JFTU9WRV9DTElFTlRcbg0KICogICAgQSBjbGllbnQgaXMgcmVtb3ZpbmcgZnJv bSB0aGUgbGF5ZXIuDQogKiAgLSBMQ09fVE9QTU9TVF9DSEFOR0VEXG4NCiAqICAgIFRoZSB0b3Bt b3N0IGxheWVyIGNoYW5nZWQsIHRoZSBsYXllciB3aWxsIGJlIHRoZSB0b3Btb3N0IGxheWVyLg0K ICogIC0gTENPX0FDVElWRV9DSEFOR0VEXG4NCiAqICAgIFRoZSBhY3RpdmUgY2xpZW50IGNoYW5n ZWQsIHRoZSBjbGllbnQgd2lsbCBiZSB0aGUgYWN0aXZlIG9uZS4NCiAqDQogKiBUaGUgZXZlbnQg d2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgb2YgXGEgb3AsIGFuZCB0aGUgcG9p bnRlcnMgdG8gdGhlIHJlbGV2YW50DQogKiBsYXllciBhbmQgY2xpZW50IHdpbGwgYmUgcGFzc2Vk IHRocm91Z2ggdGhlIGFyZ3VtZW50IG9mIFxhIGxheWVyIGFuZCBcYSBjbGllbnQgcmVzcGVjdGl2 ZWx5Lg0KICoNCiAqIFxub3RlIE9ubHkgYXZhaWxhYmxlIGZvciB0aGUgc2VydmVyIG9mIE1pbmlH VUktTGl0ZS4NCiAqIA0KICogXHNhIE9OX05FV19ERUxfQ0xJRU5ULCBtZ0NsaWVudHMNCiAqLw0K ZXh0ZXJuIE9OX0NIQU5HRV9MQVlFUiBPbkNoYW5nZUxheWVyOw0KDQovKiogDQogKiBcZm4gQk9P TCBHVUlBUEkgU2VydmVyU3RhcnR1cCAodm9pZCkNCiAqIFxicmllZiBJbml0aWFsaXplcyB0aGUg c2VydmVyIG9mIE1pbmlHVUktTGl0ZS4NCiAqDQogKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVz IHRoZSBzZXJ2ZXIsIGkuZS4gXGEgbWdpbml0LiBJdCBjcmVhdGVzDQogKiB0aGUgc2hhcmVkIHJl c291cmNlLCB0aGUgbGlzdGVuaW5nIHNvY2tldCwgYW5kIG90aGVyIGludGVybmFsIG9iamVjdHMu DQogKg0KICogXHJldHVybiBUUlVFIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBGQUxTRS4NCiAqDQog KiBcbm90ZSBTZXJ2ZXItb25seSBmdW5jdGlvbiwgaS5lLiBcZW0gb25seSBjYW4gYmUgY2FsbGVk IGJ5IFxhIG1naW5pdC4NCiAqDQogKiBcc2EgU2V0Q2xpZW50U2NyZWVuDQogKg0KICovDQpCT09M IEdVSUFQSSBTZXJ2ZXJTdGFydHVwICh2b2lkKTsNCg0KLyoqIA0KICogXGZuIEJPT0wgR1VJQVBJ IFNldENsaWVudFNjcmVlbiAoaW50IGx4LCBpbnQgdHksIGludCByeCwgaW50IGJ5KQ0KICogXGJy aWVmIFNldHMgdGhlIHNjcmVlbiByZWN0YW5nbGUgY2FuIGJlIHVzZWQgYnkgY2xpZW50cy4NCiAq DQogKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHNjcmVlbiByZWN0YW5nbGUgY2FuIGJlIHVzZWQg YnkgY2xpZW50cy4NCiAqIEFsbCBjbGllbnRzJyBkcmF3aW5nIHdpbGwgYmUgY2xpcHBlZCB3aXRo aW4gdGhlIHJlY3RhbmdsZS4NCiAqDQogKiBccGFyYW0gbHgsdHkscngsYnkgU3BlY2lmaWVzIHRo ZSBzY3JlZW4gcmVjdGFuZ2xlLg0KICogXHJldHVybiBUUlVFIG9uIHN1Y2Nlc3MsIG90aGVyd2lz ZSBGQUxTRS4NCiAqDQogKiBcbm90ZSBTZXJ2ZXItb25seSBmdW5jdGlvbiwgaS5lLiBcZW0gT05M WSBjYW4gYmUgY2FsbGVkIGJ5IFxhIG1naW5pdC4NCiAqLw0KQk9PTCBHVUlBUEkgU2V0Q2xpZW50 U2NyZWVuIChpbnQgbHgsIGludCB0eSwgaW50IHJ4LCBpbnQgYnkpOw0KDQovKiogDQogKiBcZm4g Qk9PTCBHVUlBUEkgT25seU1lQ2FuRHJhdyAodm9pZCkNCiAqIFxicmllZiBUZWxscyBjbGllbnRz IGRvIG5vdCBkcmF3IGFueXRoaW5nIG9uIHNjcmVlbi4NCiAqDQogKiBccmV0dXJuIFRSVUUgb24g c3VjY2Vzcywgb3RoZXJ3aXNlIEZBTFNFLg0KICoNCiAqIFxub3RlIFNlcnZlci1vbmx5IGZ1bmN0 aW9uLg0KICoNCiAqIFxzYSBDbGllbnRDYW5EcmF3Tm93RXgsIENsaWVudENhbkRyYXdOb3cNCiAq Lw0KQk9PTCBHVUlBUEkgT25seU1lQ2FuRHJhdyAodm9pZCk7DQoNCi8qKiANCiAqIFxmbiBCT09M IEdVSUFQSSBDbGllbnRDYW5EcmF3Tm93RXggKEJPT0wgYlJlcGFpbnQsIGNvbnN0IFJFQ1QqIGlu dnJjKQ0KICogXGJyaWVmIFRlbGxzIGNsaWVudHMgdGhhdCB0aGV5IGNhbiBvdXRwdXQgdG8gc2Ny ZWVuIG5vdy4NCiAqDQogKiBccGFyYW0gYlJlcGFpbnQgV2hldGhlciB0byByZXBhaW50IHRoZSBj bGllbnRzIGluIHRvcG1vc3QgbGF5ZXIuDQogKiBccGFyYW0gaW52cmMgVGhlIGludmFsaWQgc2Ny ZWVuIHJlY3QuIEl0IGNhbiBiZSBOVUxMLCBpbmRpY2F0ZXMgdGhlIHdob2xlIGRlc2t0b3Agb2Yg Y2xpZW50cy4NCiAqIFxyZXR1cm4gVFJVRSBvbiBzdWNjZXNzLCBvdGhlcndpc2UgRkFMU0UuDQog Kg0KICogXG5vdGUgU2VydmVyLW9ubHkgZnVuY3Rpb24uDQogKg0KICogXHNhIE9ubHlNZUNhbkRy YXcsIENsaWVudENhbkRyYXdOb3cNCiAqLw0KQk9PTCBHVUlBUEkgQ2xpZW50Q2FuRHJhd05vd0V4 IChCT09MIGJSZXBhaW50LCBjb25zdCBSRUNUKiBpbnZyYyk7DQoNCi8qKiANCiAqIFxkZWYgQ2xp ZW50Q2FuRHJhd05vdygpDQogKiBcYnJpZWYgVGVsbHMgY2xpZW50cyB0aGF0IHRoZXkgY2FuIG91 dHB1dCB0byBzY3JlZW4gbm93LCBhbmQgDQogKiAgICAgICAgbm90aWZ5IGNsaWVudHMgdG8gcmVw YWludCB0aGUgd2hvbGUgZGVza3RvcC4NCiAqDQogKiBccmV0dXJuIFRSVUUgb24gc3VjY2Vzcywg b3RoZXJ3aXNlIEZBTFNFLg0KICoNCiAqIFxub3RlIFNlcnZlci1vbmx5IGZ1bmN0aW9uLCBhbmQg ZGVmaW5lZCBhcyBhIG1hY3JvIGNhbGxpbmcgXGEgQ2xpZW50Q2FuRHJhd05vd0V4IHdpdGgNCiAq IFxhIGJSZXBhaW50IGlzIFRSVUUgYW5kIFxhIGludnJjIGlzIE5VTEwuDQogKg0KICogXHNhIENs aWVudENhbkRyYXdOb3dFeA0KICovDQojZGVmaW5lIENsaWVudENhbkRyYXdOb3coKSAgICBDbGll bnRDYW5EcmF3Tm93RXggKFRSVUUsIE5VTEwpDQoNCi8qKiANCiAqIFxmbiBCT09MIEdVSUFQSSBT ZXRUb3BNb3N0Q2xpZW50IChpbnQgY2xpKQ0KICogXGJyaWVmIFNldHMgdG9wbW9zdCBsYXllciBi eSBhIGNsaWVudCBpZGVudGlmaWVyLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdG9w bW9zdCBsYXllciBieSB0aGUgc3BlY2lmaWVkIGNsaWVudCBpZGVudGlmaWVyIFxhIGNsaS4NCiAq IEl0IHdpbGwgYnJpbmcgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBjbGllbnQgdG8gYmUgdG9wbW9z dC4NCiAqDQogKiBccGFyYW0gY2xpIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjbGllbnQuDQogKiBc cmV0dXJuIFRSVUUgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIEZBTFNFLg0KICoNCiAqIFxub3RlIFNl cnZlci1vbmx5IGZ1bmN0aW9uLg0KICoNCiAqIFxzYSBTZXRUb3BNb3N0TGF5ZXIsIEJyaW5nTGF5 ZXIyVG9wbW9zdA0KICovDQpCT09MIEdVSUFQSSBTZXRUb3BNb3N0Q2xpZW50IChpbnQgY2xpKTsN Cg0KLyoqIA0KICogXGZuIEJPT0wgR1VJQVBJIFNldFRvcE1vc3RMYXllciAoTUdfTGF5ZXIqIGxh eWVyKQ0KICogXGJyaWVmIFNldHMgdG9wbW9zdCBsYXllci4NCiAqDQogKiBUaGlzIGZ1bmN0aW9u cyBzZXRzIHRoZSBzcGVjaWZpZWQgbGF5ZXIgXGEgbGF5ZXIgdG8gYmUgdGhlIHRvcG1vc3QgbGF5 ZXIuDQogKg0KICogXHBhcmFtIGxheWVyIFRoZSBwb2ludGVyIHRvIHRoZSBsYXllci4NCiAqIFxy ZXR1cm4gVFJVRSBvbiBzdWNjZXNzLCBvdGhlcndpc2UgRkFMU0UuDQogKg0KICogXG5vdGUgU2Vy dmVyLW9ubHkgZnVuY3Rpb24uDQogKg0KICogXHNhIFNldFRvcE1vc3RDbGllbnQsIEJyaW5nTGF5 ZXIyVG9wbW9zdA0KICovDQpCT09MIEdVSUFQSSBTZXRUb3BNb3N0TGF5ZXIgKE1HX0xheWVyKiBs YXllcik7DQoNCi8qKiANCiAqIFxmbiBpbnQgR1VJQVBJIEdldENsaWVudEJ5UElEIChpbnQgcGlk KQ0KICogXGJyaWVmIFJldHVybnMgdGhlIGNsaWVudCBpZGVudGlmaWVyIGZyb20gUElEIG9mIGEg Y2xpZW50Lg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgaWRlbnRpZmllciBvZiB0aGUg c2VwY2lmaWVkIGNsaWVudCBcYSBjbGllbnQgZnJvbSB0aGUgUElEIG9mIGl0Lg0KICoNCiAqIFxw YXJhbSBwaWQgVGhlIHByb2Nlc3MgSUQgb2YgdGhlIGNsaWVudC4NCiAqIFxyZXR1cm4gVGhlIGNs aWVudCBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIGxlc3MgdGhhbiAwIG9uIGVycm9yLg0KICoNCiAq IFxub3RlIFNlcnZlci1vbmx5IGZ1bmN0aW9uLg0KICovDQppbnQgR1VJQVBJIEdldENsaWVudEJ5 UElEIChpbnQgcGlkKTsNCg0KICAgIC8qKiBAfSBlbmQgb2YgbGl0ZV9zZXJ2ZXJfZm5zICovDQoN CiAgICAvKioNCiAgICAgKiBcZGVmZ3JvdXAgbGl0ZV9saXN0ZW5mZF9mbnMgTGlzdGVuaW5nIGEg ZmlsZSBkZXNjcmlwdG9yDQogICAgICoNCiAgICAgKiBSZWdpc3Rlci9VbnJlZ2lzdGVyIGEgbGlz dGVuIGZkIHRvIE1pbmlHVUkuDQogICAgICoNCiAgICAgKiBXaGVuIHlvdSBuZWVkIHRvIGxpc3Rl biBhIGZpbGUgZGVzY3JpcHRvciwgeW91IGNhbiB1c2UgXGEgc2VsZWN0KDIpDQogICAgICogc3lz dGVtIGNhbGwuIEluIE1pbmlHVUksIHlvdSBjYW4gYWxzbyByZWdpc3RlciBpdCB0byBNaW5pR1VJ LCBhbmQgDQogICAgICogd2hlbiB0aGVyZSBpcyBhIHJlYWQvd3JpdGUvZXhjZXB0IGV2ZW50IG9u IHRoZSByZWdpc3RlcmVkIGZkICwgTWluaUdVSQ0KICAgICAqIHdpbGwgc2VudCBhIG5vdGlmaWNh dGlvbiBtZXNzYWdlIHRvIHRoZSByZWdpc3RlcmVkIHdpbmRvdy4NCiAgICAgKg0KICAgICAqIEV4 YW1wbGU6DQogICAgICoNCiAgICAgKiBcaW5jbHVkZSBsaXN0ZW5mZC5jDQogICAgICoNCiAgICAg KiBAew0KICAgICAqLw0KDQojZGVmaW5lIE1BWF9OUl9MSVNURU5fRkQgICA1DQoNCi8qKiANCiAq IFxmbiBCT09MIEdVSUFQSSBSZWdpc3Rlckxpc3RlbkZEIChpbnQgZmQsIGludCB0eXBlLCBIV05E IGh3bmQsIHZvaWQqIGNvbnRleHQpDQogKiBcYnJpZWYgUmVnaXN0ZXJzIGEgbGlzdGVuaW5nIGZp bGUgZGVzY3JpcHRvciB0byBNaW5pR1VJLUxpdGUuDQogKg0KICogVGhpcyBmdW5jdGlvbiByZWdp c3RlcnMgdGhlIGZpbGUgZGVzY2lwdG9yIFxhIGZkIHRvIE1pbmlHVUktTGl0ZSBmb3IgbGlzdGVu aW5nLg0KICoNCiAqIFdoZW4gdGhlcmUgaXMgYSByZWFkL3dyaXRlL2V4Y2VwdCBldmVudCBvbiB0 aGlzIFxhIGZkLCBNaW5pR1VJDQogKiB3aWxsIHBvc3QgYSBNU0dfRkRFVkVOVCBtZXNzYWdlIHdp dGggd1BhcmFtIGJlaW5nIGVxdWFsIHRvDQogKiBNQUtFTE9ORyAoZmQsIHR5cGUpLCBhbmQgdGhl IGxQYXJhbSBiZWluZyBzZXQgdG8gXGEgY29udGV4dA0KICogdG8gdGhlIHRhcmdldCB3aW5kb3cu DQogKg0KICogXHBhcmFtIGZkIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gYmUgbGlzdGVuZWQuDQog KiBccGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgdG8gYmUgbGlzdGVuZWQsIGNhbiBi ZSBQT0xMSU4sIFBPTExPVVQsIG9yIFBPTExFUlIuDQogKiBccGFyYW0gaHduZCBUaGUgaGFuZGxl IHRvIHRoZSB3aW5kb3cgd2lsbCByZWNlaXZlIE1TR19GREVWRU5UIG1lc3NhZ2UuDQogKiBccGFy YW0gY29udGV4dCBUaGUgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHdpbmRvdyBhcyBsUGFy YW0gb2YgTVNHX0ZERVZFTlQgbWVzc2FnZS4NCiAqIFxyZXR1cm4gVFJVRSBpZiBhbGwgT0ssIGFu ZCBGQUxTRSBvbiBlcnJvci4NCiAqDQogKiBcbm90ZSBPbmx5IGF2YWlsYWJsZSBvbiBNaW5pR1VJ LUxpdGUuDQogKiBcc2EgVW5yZWdpc3Rlckxpc3RlbkZELCBzeXN0ZW1fbXNncw0KICovDQpCT09M IEdVSUFQSSBSZWdpc3Rlckxpc3RlbkZEIChpbnQgZmQsIGludCB0eXBlLCBIV05EIGh3bmQsIHZv aWQqIGNvbnRleHQpOw0KDQovKiogDQogKiBcZm4gQk9PTCBHVUlBUEkgVW5yZWdpc3Rlckxpc3Rl bkZEIChpbnQgZmQpDQogKiBcYnJpZWYgVW5yZWdpc3RlcnMgYSBiZWluZyBsaXN0ZW5pbmcgZmls ZSBkZXNjcmlwdG9yLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgdGhlIGJlaW5n IGxpc3RlbmluZyBmaWxlIGRlc2NyaXB0b3IgXGEgZmQuDQogKg0KICogXHBhcmFtIGZkIFRoZSBm aWxlIGRlc2NyaXB0b3IgdG8gYmUgdW5yZWdpc3RlcmVkLCBzaG91bGQgYmUgYSBiZWluZyBsaXN0 ZW5lZCBmaWxlIGRlc2NyaXB0b3IuDQogKiBccmV0dXJuIFRSVUUgaWYgYWxsIE9LLCBhbmQgRkFM U0Ugb24gZXJyb3IuDQogKg0KICogXG5vdGUgT25seSBhdmFpbGFibGUgb24gTWluaUdVSS1MaXRl Lg0KICogXHNhIFJlZ2lzdGVyTGlzdGVuRkQNCiAqLw0KQk9PTCBHVUlBUEkgVW5yZWdpc3Rlckxp c3RlbkZEIChpbnQgZmQpOw0KDQogICAgLyoqIEB9IGVuZCBvZiBsaXRlX2xpc3RlbmZkX2ZucyAq Lw0KDQogICAgLyoqDQogICAgICogXGRlZmdyb3VwIGxpdGVfcmVxdWVzdF9mbnMgU2ltcGxlIHJl cXVlc3QvcmVwbHkgaW50ZXJmYWNlcw0KICAgICAqIA0KICAgICAqIFlvdSBjYW4gcmVnaXN0ZXIg YSBjdXN0b21pemVkIHJlcXVlc3QgaGFuZGxlciB0byBleHRlbmQgeW91ciBzZXJ2ZXIsIGkuZS4g DQogICAgICogXGEgbWdpbml0LCBvZiBNaW5pR1VJLUxpdGUuDQogICAgICoNCiAgICAgKiBBIHJl cXVlc3QgY29uc2lzdHMgb2YgYW4gaWRlbnRpZmllciBhbmQgdGhlIGRhdGEgYXNzb2NpYXRlZCB3 aXRoIHRoZSByZXF1ZXN0Lg0KICAgICAqIFRoZSBpZGVudGlmaWVyIGlzIHVzZWQgYnkgTWluaUdV SSB0byBkZXRlcm1pbmUgd2hpY2ggaGFuZGxlciBzaG91bGQgYmUgY2FsbGVkDQogICAgICogd2hl biBhIHJlcXVlc3QgYXJyaXZlcy4gV2hlbiBNaW5pR1VJIGZpbmRzIG9uZSBoYW5kbGVyLCBpdCB3 aWxsIGNhbGwgdGhlIGhhbmRsZXINCiAgICAgKiBhbmQgcGFzcyB0aGUgc29ja2V0IGZkIGNvbm5l Y3RlZCB0byB0aGUgY2xpZW50LCB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qs DQogICAgICogYW5kIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEuIEV2ZW50dWFsbHksIHRoZSBoYW5k bGVyIHdpbGwgc2VudCB0aGUgcmVwbHkgdG8NCiAgICAgKiB0aGUgY2xpZW50Lg0KICAgICAqDQog ICAgICogQWZ0ZXIgcmVnaXN0ZXIgYSBjdXN0b21pemVkIHJlcXVlc3QgaGFuZGxlciBpbiB5b3Vy IHNlcnZlciwgeW91IGNhbiBjYWxsIA0KICAgICAqIFxhIGNsaV9yZXF1ZXN0IGZ1bmN0aW9uIGlu IHRoZSBjbGllbnQgdG8gc2VuZCBhIHJlcXVlc3QgdG8gDQogICAgICogdGhlIHNlcnZlciBhbmQg d2FpdCBmb3IgdGhlIHJlcGx5LiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHJlcXVlc3QgaGFuZGxl ciBpbiB0aGUgc2VydmVyDQogICAgICogd2lsbCByZWNlaXZlIHRoZSByZXF1ZXN0IGFuZCBjYWxs IFxhIHNlbmRfcmVwbHkgdG8gc2VuZCB0aGUgcmVwbHkgdG8gdGhlIGNsaWVudC4NCiAgICAgKiBJ biB0aGlzIHdheSwgeW91IGNhbiBjcmVhdGUgYSBzaW1wbGUgSVBDIChpbnRlci1wcm9jZXNzIGNv bm1tdW5pY2F0aW9uKSANCiAgICAgKiBtZWNoYW5pc20gYmV0d2VlbiBjbGllbnRzIGFuZCB0aGUg c2VydmVyLg0KICAgICAqDQogICAgICogRXhhbXBsZToNCiAgICAgKg0KICAgICAqIFxpbmNsdWRl IHJlcXVlc3QuYw0KICAgICAqDQogICAgICogQHsNCiAgICAgKi8NCg0KLyoqDQogKiBcZGVmIE1B WF9TWVNfUkVRSUQNCiAqIFxicmllZiBNYXhpbWFsIHN5c3RlbSByZXNlcnZlZCByZXF1ZXN0IGlk ZW50aWZpZXIuDQogKg0KICogXHNhIFJlZ2lzdGVyUmVxdWVzdEhhbmRsZXINCiAqLw0KI2RlZmlu ZSBNQVhfU1lTX1JFUUlEICAgICAgICAgICAweDAwMTANCg0KLyoqDQogKiBcZGVmIE1BWF9SRVFJ RA0KICogXGJyaWVmIE1heGltYWwgcmVxdWVzdCBpZGVudGlmaWVyLg0KICoNCiAqIFxzYSBSZWdp c3RlclJlcXVlc3RIYW5kbGVyDQogKi8NCiNkZWZpbmUgTUFYX1JFUUlEICAgICAgICAgICAgICAg MHgwMDE4DQoNCi8qKiBBIHJlcXVlc3Qgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgb2YgTWlu aUdVSS1MaXRlLiAqLw0KdHlwZWRlZiBzdHJ1Y3QgX1JFUVVFU1Qgew0KICAgIC8qKiBUaGUgaWRl bnRpZmllciBvZiB0aGUgdHlwZSBvZiB0aGUgcmVxdWVzdC4gKi8NCiAgICBpbnQgaWQ7DQogICAg LyoqIFRoZSBkYXRhIHdpbGwgYmUgc2VudCB0byB0aGUgc2VydmVyLiAqLw0KICAgIGNvbnN0IHZv aWQqIGRhdGE7DQogICAgLyoqIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEuICovDQogICAgc2l6ZV90 IGxlbl9kYXRhOw0KfSBSRVFVRVNUOw0KdHlwZWRlZiBSRVFVRVNUKiBQUkVRVUVTVDsNCg0KLyoq IA0KICogXGZuIGNsaV9yZXF1ZXN0IChQUkVRVUVTVCByZXF1ZXN0LCB2b2lkKiByZXN1bHQsIGlu dCBsZW5fcnNsdCkNCiAqIFxicmllZiBTZW5kcyBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciBhbmQg d2FpdCByZXBseS4NCiAqDQogKiBJZiBcYSByZXN1bHQgaXMgTlVMTCBvciBcYSBsZW5fcnNsdCBp cyB6ZXJvLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gDQogKiBpbW1lZGlhdGVseSBhZnRlciBz ZW50IHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuDQogKg0KICogXHBhcmFtIHJlcXVlc3QgVGhlIHBv aW50ZXIgdG8gUkVRVUVTVCwgd2hpY2ggY29udGFpbnMgdGhlIGRhdGEgb2YgdGhlIHJlcXVlc3Qu DQogKiBccGFyYW0gcmVzdWx0IFRoZSBidWZmZXIgcmVjZWl2ZXMgdGhlIHJlcGx5Lg0KICogXHBh cmFtIGxlbl9yc2x0IFRoZSBsZW5naHQgb2YgdGhlIGJ1ZmZlci4NCiAqIFxyZXR1cm4gWmVybyBv biBzdWNjZXNzLCBuby16ZXJvIG9uIGVycm9yLg0KICoNCiAqIFxub3RlIE9ubHkgdXNlZCBieSBj bGllbnRzIHRvIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuDQogKiBcc2Egc2VuZF9yZXBs eQ0KICovDQppbnQgY2xpX3JlcXVlc3QgKFBSRVFVRVNUIHJlcXVlc3QsIHZvaWQqIHJlc3VsdCwg aW50IGxlbl9yc2x0KTsNCg0KLyoqIA0KICogXGZuIGludCBnZXRfc29ja19mZDJzcnYgKHZvaWQp DQogKiBcYnJpZWYgR2V0cyB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBzb2NrZXQgY29ubmVj dGVkIHRvIHRoZSBzZXJ2ZXIuDQogKg0KICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaWxl IGRlc2NyaXB0b3Igb2YgdGhlIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciwNCiAqIGku ZS4gXGEgbWdpbml0Lg0KICoNCiAqIFxyZXR1cm4gVGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUg c29ja2V0IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyLg0KICoNCiAqIFxub3RlIE9ubHkgdXNlZCBi eSBjbGllbnRzLCBubyBtZWFuaW5nIGZvciB0aGUgc2VydmVyLg0KICovDQppbnQgZ2V0X3NvY2tf ZmQyc3J2ICh2b2lkKTsNCg0KLyoqIA0KICogXGZuIHNlbmRfcmVwbHkgKGludCBjbGlmZCwgY29u c3Qgdm9pZCogcmVwbHksIGludCBsZW4pDQogKiBcYnJpZWYgU2VuZHMgdGhlIHJlcGx5IHRvIHRo ZSBjbGllbnQuDQogKg0KICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHJlcGxheSBwb2ludGVkIHRv IGJ5IFxhIHJlcGx5IHdoaWNoIGlzIA0KICogXGEgbGVuIGJ5dGVzIGxvbmcgdG8gdGhlIGNsaWVu dC4NCiAqDQogKiBcbm90ZSBPbmx5IHVzZWQgYnkgdGhlIHNlcnZlciB0byBzZW5kIHRoZSByZXBs eSB0byB0aGUgY2xpZW50Lg0KICogVGhpcyBmdW5jdGlvbiB0eXBpY2FsbHkgY2FsbGVkIGluIHlv dXIgY3VzdG9taXplZCByZXF1ZXN0IGhhbmRsZXIuDQogKg0KICogXHBhcmFtIGNsaWZkIFRoZSBm ZCBjb25uZWN0ZWQgdG8gdGhlIGNsaWVudC4NCiAqIFxwYXJhbSByZXBseSBUaGUgYnVmZmVyIGNv bnRhaW5zIHRoZSByZXBseSBkYXRhLg0KICogXHBhcmFtIGxlbiBUaGUgbGVuZ3RoIG9mIHRoZSBy ZXBseSBkYXRhIGluIGJ5dGVzLg0KICogXHJldHVybiBaZXJvIG9uIHN1Y2Nlc3MsIG5vLXplcm8g b24gZXJyb3IuDQogKg0KICogXHNhIGNsaV9yZXF1ZXN0LCBSZWdpc3RlclJlcXVlc3RIYW5kbGVy DQogKi8NCmludCBzZW5kX3JlcGx5IChpbnQgY2xpZmQsIGNvbnN0IHZvaWQqIHJlcGx5LCBpbnQg bGVuKTsNCg0KLyoqDQogKiBcdmFyIHR5cGVkZWYgaW50ICgqIFJFUV9IQU5ETEVSKShpbnQgY2xp LCBpbnQgY2xpZmQsIHZvaWQqIGJ1ZmYsIHNpemVfdCBsZW4pDQogKiBcYnJpZWYgUmVxdWVzdCBo YW5kbGVyLg0KICoNCiAqIFxzYSBSZWdpc3RlclJlcXVlc3RIYW5kbGVyDQogKi8NCnR5cGVkZWYg aW50ICgqIFJFUV9IQU5ETEVSKSAoaW50IGNsaSwgaW50IGNsaWZkLCB2b2lkKiBidWZmLCBzaXpl X3QgbGVuKTsNCg0KLyoqIA0KICogXGZuIEJPT0wgR1VJQVBJIFJlZ2lzdGVyUmVxdWVzdEhhbmRs ZXIgKGludCByZXFfaWQsIFJFUV9IQU5ETEVSIHlvdXJfaGFuZGxlcikNCiAqIFxicmllZiBSZWdp c3RlcnMgYSBjdXN0b21pemUgcmVxdWVzdCBoYW5kbGVyLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24g cmVnaXN0ZXJzIGEgcmVxdWVzdCBoYW5kbGVyIHRvIHRoZSBzZXJ2ZXIsIGkuZS4gXGEgbWdpbml0 Lg0KICoNCiAqIFxwYXJhbSByZXFfaWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGN1c3RvbWl6ZWQg cmVxdWVzdC4NCiAqIFxwYXJhbSB5b3VyX2hhbmRsZXIgVGhlIGhhbmRsZXIgb2YgdGhlIHJlcXVl c3QuIEl0IGNhbiBiZSBOVUxMLCB0byB1bnJlZ2lzdGVyIHRoZSByZXF1ZXN0IGhhbmRsZXIuDQog KiBccmV0dXJuIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IuDQogKg0KICogXG5vdGUg T25seSB1c2VkIGJ5IHRoZSBzZXJ2ZXIgdG8gcmVnaXN0ZXIgYSByZXF1ZXN0IGhhbmRsZXIuDQog KiBBbmQgdGhlIGlkZW50aWZpZXIgc2hvdWxkIGJlIGxhcmdlciB0aGFuIFxhIE1BWF9TWVNfUkVR SUQgYW5kIGxlc3MgdGhhbiBvciBlcXVhbA0KICogdG8gXGEgTUFYX1JFUUlELg0KICoNCiAqIFxz YSBjbGlfcmVxdWVzdCwgc2VuZF9yZXBseSwgTUFYX1NZU19SRVFJRCwgTUFYX1JFUUlEDQogKi8N CkJPT0wgR1VJQVBJIFJlZ2lzdGVyUmVxdWVzdEhhbmRsZXIgKGludCByZXFfaWQsIFJFUV9IQU5E TEVSIHlvdXJfaGFuZGxlcik7DQoNCi8qKiANCiAqIFxmbiBFUV9IQU5ETEVSIEdVSUFQSSBHZXRS ZXF1ZXN0SGFuZGxlciAoaW50IHJlcV9pZCkNCiAqIFxicmllZiBHZXRzIHRoZSByZXF1ZXN0IGhh bmRsZXIgYnkgcmVxdWVzdCBpZGVudGlmaWVyLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyB0aGUgcmVxdWVzdCBoYW5kbGVyIG9mIHRoZSBzcGVjaWZpZWQgcmVxdWVzdCBpZGVudGlmaWVy IFxhIHJlcV9pZC4NCiAqDQogKiBccGFyYW0gcmVxX2lkIFRoZSByZXF1ZXN0IGlkZW50aWZpZXIu DQogKiBccmV0dXJuIFRoZSBoYW5kbGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuDQogKg0K ICogXG5vdGUgT25seSBjYW4gYmUgdXNlZCBieSB0aGUgc2VydmVyLg0KICoNCiAqIFxzYSBSZWdp c3RlclJlcXVlc3RIYW5kbGVyDQogKi8NClJFUV9IQU5ETEVSIEdVSUFQSSBHZXRSZXF1ZXN0SGFu ZGxlciAoaW50IHJlcV9pZCk7DQoNCiAgICAvKiogQH0gZW5kIG9mIGxpdGVfcmVxdWVzdF9mbnMg Ki8NCg0KICAgIC8qKg0KICAgICAqIFxkZWZncm91cCBsaXRlX3NvY2tldF9mbnMgR2VuZXJhbCBz b2NrZXQgb3BlcmF0aW9ucw0KICAgICAqDQogICAgICogTWluaUdVSS1MaXRlIHVzZXMgVU5JWCBk b21haW4gc29ja2V0IHRvIGJ1aWxkIHRoZSBjb21tdW5pY2F0aW9uDQogICAgICogYmV0d2VlbiB0 aGUgc2VydmVyIGFuZCB0aGUgY2xpZW50cy4NCiAgICAgKg0KICAgICAqIFlvdSBjYW4gYWxzbyB1 c2UgdGhlIHVuZGVybGF5IGludGVyZmFjZXMgd2hpY2ggTWluaUdVSSB1c2VzIHRvIGNyZWF0ZQ0K ICAgICAqIHlvdXIgb3duIFVOSVggZG9tYWluIHNvY2tldC4NCiAgICAgKg0KICAgICAqIEV4YW1w bGU6DQogICAgICoNCiAgICAgKiBcaW5jbHVkZSBzb2NrZXQuYw0KICAgICAqDQogICAgICogQHsN CiAgICAgKi8NCg0KLyoqDQogKiBcZm4gaW50IHNlcnZfbGlzdGVuIChjb25zdCBjaGFyKiBuYW1l KQ0KICogXGJyaWVmIENyZWF0ZXMgYSBsaXN0ZW4gc29ja2V0Lg0KICoNCiAqIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCBieSB0aGUgc2VydmVyIHRvIGNyZWF0ZSBhIGxpc3RlbmluZyBzb2NrZXQuIA0K ICogQW55IE1pbmlHVUktTGl0ZSBhcHBsaWNhdGlvbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRv IGNyZWF0ZSBhIA0KICogbGlzdGVuaW5nIHNvY2tldC4gVGhlIHNlcnZlciwgaS5lLiBcYSBtZ2lu aXQsIG9mIE1pbmlHVUktTGl0ZSB1c2VzIA0KICogdGhpcyBmdW5jdGlvbiB0byBjcmVhdGUgaXRz IGxpc3RlbmluZyBzb2NrZXQsIGFuZCBuYW1lZCB0aGUgc29ja2V0IA0KICogdG8gJy92YXIvdG1w L21pbmlndWknLg0KICoNCiAqIFxwYXJhbSBuYW1lIFRoZSBwYXRoIG5hbWUgb2YgdGhlIGxpc3Rl bmluZyBzb2NrZXQuDQogKiBccmV0dXJuIFRoZSBmaWxlIGRpc2NyaXB0b3Igb2YgdGhlIGxpc3Rl bmluZyBzb2NrZXQgY3JlYXRlZCwgLTEgb24gZXJyb3IuDQogKg0KICogXG5vdGUgQXMgYSBjb252 ZW50aW9uLCB5b3Ugc2hvdWxkIGxvY2F0ZWQgdGhlIHNvY2tldCBpbiAnL3Zhci90bXAvJyBkaXJl Y3RvcnkuDQogKi8NCmludCBzZXJ2X2xpc3RlbiAoY29uc3QgY2hhciogbmFtZSk7DQoNCi8qKg0K ICogXGZuIGludCBzZXJ2X2FjY2VwdCAoaW50IGxpc3RlbmZkLCBwaWRfdCAqcGlkcHRyLCB1aWRf dCAqdWlkcHRyKQ0KICogXGJyaWVmIFdhaXRzIGZvciBhIGNsaWVudCBjb25uZWN0aW9uIHRvIGFy cml2ZSwgYW5kIGFjY2VwdCBpdC4NCiAqDQogKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhl IHNlcnZlciB0byB3YWl0IGEgY29ubmVjdGlvbiBhbmQgYWNjZXB0IGl0Lg0KICoNCiAqIEFmdGVy IGNyZWF0aW5nIGEgbGlzdGVuIHNvY2tldCBieSBjYWxsaW5nIFxhIHNlcnZfbGlzdGVuLCB5b3Ug Y2FuIGNhbGwgdGhpcw0KICogZnVuY3Rpb24gdG8gY3JlYXRlIGEgY29ubmVjdGlvbiB3aXRoIGEg Y2xpZW50LiBXZSBhbHNvIG9idGFpbiB0aGUgY2xpZW50J3MgUElEIA0KICogYW5kIFVJRCBmcm9t IHRoZSBwYXRobmFtZSB0aGF0IGl0IG11c3QgYmluZCBiZWZvcmUgY2FsbGluZyB1cy4NCiAqDQog KiBccGFyYW0gbGlzdGVuZmQgVGhlIGZkIG9mIGxpc3RlbiBzb2NrZXQuDQogKiBccGFyYW0gcGlk cHRyIFRoZSBjbGllbnQgUElEIHdpbGwgYmUgc2F2ZWQgdG8gdGhpcyBidWZmZXIgd2hlbiB0aGlz IGZ1bmN0aW9uIHJldHVybnMuDQogKiBccGFyYW0gdWlkcHRyIFRoZSBjbGllbnQgVUlEIHdpbGwg YmUgc2F2ZWQgdG8gdGhpcyBidWZmZXIgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuDQogKiBc cmV0dXJuIFRoZSBuZXcgY29ubmVjdGVkIGZkIGlmIGFsbCBPSywgPCAwIG9uIGVycm9yLg0KICoN CiAqIFxzYSBzZXJ2X2xpc3RlbiwgY2xpX2Nvbm4NCiAqLw0KaW50IHNlcnZfYWNjZXB0IChpbnQg bGlzdGVuZmQsIHBpZF90ICpwaWRwdHIsIHVpZF90ICp1aWRwdHIpOw0KDQovKioNCiAqIFxmbiBp bnQgY2xpX2Nvbm4gKGNvbnN0IGNoYXIqIG5hbWUsIGNoYXIgcHJvamVjdCkNCiAqIFxicmllZiBV c2VkIGJ5IGNsaWVudHMgdG8gY29ubmVjdCB0byBhIHNlcnZlci4NCiAqDQogKiBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgYnkgY2xpZW50cyB0byBjb25uZWN0IHRvIGEgc2VydmVyLg0KICoNCiAqIFRo ZSBjcmVhdGVkIHNvY2tldCB3aWxsIGJlIGxvY2F0ZWQgYXQgdGhlIGRpcmVjdG9yeSAnL3Zhci90 bXAnLA0KICogYW5kIHdpdGggbmFtZSBvZiAnL3Zhci90bXAveHh4eHgtYycsIHdoZXJlICd4eHh4 eCcgaXMgdGhlIHBpZCBvZiBjbGllbnQuDQogKiBhbmQgJ2MnIGlzIGEgY2hhcmFjdGVyIHRvIGRp c3Rpbmd1aXNoIGRpZmVyZW50IHByb2plY3RzLg0KICogTWluaUdVSSBpdHNlbGYgdXNlICdhJyBh cyB0aGUgcHJvamVjdCBjaGFyYWN0ZXIgdG8gY3JlYXRlIHNvY2tldCBiZXR3ZWVuDQogKiAnbWdp bml0JyBhbmQgY2xpZW50cy4NCiAqDQogKiBccGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgd2Vs bC1rbm93biBsaXN0ZW4gc29ja2V0IChjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXIpLg0KICogXHBhcmFt IHByb2plY3QgQSBjaGFyYWN0ZXIgdG8gZGlzdGluZ3Vpc2ggZGlmZXJlbnQgcHJvamVjdHMgKERv IFxlbSBOT1QgdXNlICdhJykuDQogKiBccmV0dXJuIFRoZSBuZXcgY29ubmVjdGVkIGZkIGlmIGFs bCBPSywgPCAwIG9uIGVycm9yLg0KICoNCiAqIFxzYSBzZXJ2X2xpc3Rlbiwgc2Vydl9hY2NlcHQN CiAqLw0KaW50IGNsaV9jb25uIChjb25zdCBjaGFyKiBuYW1lLCBjaGFyIHByb2plY3QpOw0KDQoj ZGVmaW5lIFNPQ0tFUlJfSU8gICAgICAgICAgLTENCiNkZWZpbmUgU09DS0VSUl9DTE9TRUQgICAg ICAtMg0KI2RlZmluZSBTT0NLRVJSX0lOVkFSRyAgICAgIC0zDQojZGVmaW5lIFNPQ0tFUlJfVElN RU9VVCAgICAgLTQNCiNkZWZpbmUgU09DS0VSUl9PSyAgICAgICAgICAwDQoNCi8qIFVOSVggZG9t YWluIHNvY2tldCBJL08gZnVuY3Rpb25zLiAqLw0KDQovKioNCiAqIFxmbiBpbnQgc29ja193cml0 ZV90IChpbnQgZmQsIGNvbnN0IHZvaWQqIGJ1ZmYsIGludCBjb3VudCwgdW5zaWduZWQgaW50IHRp bWVvdXQpIA0KICogXGJyaWVmIFdyaXRlcyBkYXRhIHRvIHNvY2tldC4NCiAqDQogKiBUaGlzIGZ1 bmN0aW9uIHdyaXRlcyB0aGUgZGF0YSBibG9jayBwb2ludGVkIHRvIGJ5IFxhIGJ1ZmYgDQogKiB3 aGljaCBpcyBcYSBjb3VudCBieXRlcyBsb25nIHRvIHRoZSBzb2NrZXQgXGEgZmQuDQogKg0KICog XHBhcmFtIGZkIFRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHNvY2tldC4NCiAqIFxwYXJhbSBi dWZmIFRoZSBidWZmZXIgY29udGFpbnMgdGhlIGRhdGEuDQogKiBccGFyYW0gY291bnQgVGhlIGxl bmd0aCBpbiBieXRlcyBvZiB0aGUgYnVmZmVyLg0KICogXHBhcmFtIHRpbWVvdXQgQW4gdXBwZXIg Ym91bmQgb24gdGhlIGFtb3VudCBvZiB0aW1lIGVsYXBzZWQgYmVmb3JlIA0KICogICAgICAgIFxh IHNvY2tfd3JpdGVfdCByZXR1cm5zLiBXaGVuIGl0IGlzIHplcm8sIFxhIHNvY2tfd3JpdGVfdCBj YW4gDQogKiAgICAgICAgYmxvY2sgaW5kZWZpbml0ZWx5LiBUaGUgdGltZW91dCB2YWx1ZSBpcyBp biB0aWNrIGNvdW50LCBhbmQgDQogKiAgICAgICAgdGljayBjb3VudCBvZiBNaW5pR1VJIGlzIGlu IHVuaXQgb2YgMTAgbWlsbGlzZWNvbmRzLg0KICogXHJldHVybiBTT0NLRVJSX09LIGlmIGFsbCBP SywgPCAwIG9uIGVycm9yLg0KICoNCiAqIFxyZXR2YWwgU09DS0VSUl9PSyAgICAgICBSZWFkIGRh dGEgc3VjY2Vzc2Z1bGx5Lg0KICogXHJldHZhbCBTT0NLRVJSX0lPICAgICAgIFRoZXJlIGFyZSBz b21lIEkvTyBlcnJvcnMgb2NjdXJyZWQuDQogKiBccmV0dmFsIFNPQ0tFUlJfQ0xPU0VEICAgVGhl IHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgYnkgdGhlIHBlZXIuDQogKiBccmV0dmFsIFNPQ0tFUlJf SU5WQVJHICAgWW91IHBhc3NlZCBpbnZhbGlkIGFyZ3VtZW50cy4NCiAqIFxyZXR2YWwgU09DS0VS Ul9USU1FT1VUICBUaW1lb3V0Lg0KICoNCiAqIFxub3RlIFRoZSBcYSB0aW1lb3V0IG9ubHkgZ29l cyBpbnRvIGVmZmVjdCB3aGVuIHRoaXMgZnVuY3Rpb24gY2FsbGVkIA0KICogICAgICAgYnkgdGhl IHNlcnZlciBvZiBNaW5pR1VJLUxpdGUsIGkuZS4gXGEgbWdpbml0LiANCiAqDQogKiBcc2Egc29j a19yZWFkX3QNCiAqLw0KaW50IHNvY2tfd3JpdGVfdCAoaW50IGZkLCBjb25zdCB2b2lkKiBidWZm LCBpbnQgY291bnQsIHVuc2lnbmVkIGludCB0aW1lb3V0KTsNCg0KLyoqDQogKiBcZm4gaW50IHNv Y2tfcmVhZF90IChpbnQgZmQsIHZvaWQqIGJ1ZmYsIGludCBjb3VudCwgdW5zaWduZWQgaW50IHRp bWVvdXQpDQogKiBcYnJpZWYgUmVhZHMgZGF0YSBmcm9tIHNvY2tldC4NCiAqDQogKiBUaGlzIGZ1 bmN0aW9uIHJlYWRzIGRhdGEgd2hpY2ggaXMgXGEgY291bnQgYnl0ZXMgbG9uZyB0byB0aGUgYnVm ZmVyIFxhIGJ1ZmYNCiAqIGZyb20gdGhlIHNvY2tldCBcYSBmZC4NCiAqDQogKiBccGFyYW0gZmQg VGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc29ja2V0Lg0KICogXHBhcmFtIGJ1ZmYgVGhlIGJ1 ZmZlciB1c2VkIHRvIHNhdmUgdGhlIGRhdGEuDQogKiBccGFyYW0gY291bnQgVGhlIGxlbmd0aCBp biBieXRlcyBvZiB0aGUgYnVmZmVyLg0KICogXHBhcmFtIHRpbWVvdXQgQW4gdXBwZXIgYm91bmQg b24gdGhlIGFtb3VudCBvZiB0aW1lIGVsYXBzZWQgYmVmb3JlIA0KICogICAgICAgIFxhIHNvY2tf cmVhZF90IHJldHVybnMuIFdoZW4gaXQgaXMgemVybywgXGEgc29ja19yZWFkX3QgY2FuIA0KICog ICAgICAgIGJsb2NrIGluZGVmaW5pdGVseS4gVGhlIHRpbWVvdXQgdmFsdWUgaXMgaW4gdGhlIHRp Y2sgY291bnQgb2YgTWluaUdVSSwNCiAqICAgICAgICBhbmQgdGljayBjb3VudCBvZiBNaW5pR1VJ IGlzIGluIHVuaXQgb2YgMTAgbWlsbGlzZWNvbmRzLg0KICogXHJldHVybiBTT0NLRVJSX09LIGlm IGFsbCBPSywgPCAwIG9uIGVycm9yLg0KICoNCiAqIFxyZXR2YWwgU09DS0VSUl9PSyAgICAgICBS ZWFkIGRhdGEgc3VjY2Vzc2Z1bGx5Lg0KICogXHJldHZhbCBTT0NLRVJSX0lPICAgICAgIFRoZXJl IGFyZSBzb21lIEkvTyBlcnJvcnMgb2NjdXJyZWQuDQogKiBccmV0dmFsIFNPQ0tFUlJfQ0xPU0VE ICAgVGhlIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgYnkgdGhlIHBlZXIuDQogKiBccmV0dmFsIFNP Q0tFUlJfSU5WQVJHICAgWW91IHBhc3NlZCBpbnZhbGlkIGFyZ3VtZW50cy4NCiAqIFxyZXR2YWwg U09DS0VSUl9USU1FT1VUICBUaW1lb3V0Lg0KICoNCiAqIFxub3RlIFRoZSBcYSB0aW1lb3V0IG9u bHkgZ29lcyBpbnRvIGVmZmVjdCB3aGVuIHRoaXMgZnVuY3Rpb24gY2FsbGVkIA0KICogICAgICAg YnkgdGhlIHNlcnZlciBvZiBNaW5pR1VJLUxpdGUsIGkuZS4gXGEgbWdpbml0LiANCiAqDQogKiBc c2Egc29ja193cml0ZV90DQogKi8NCmludCBzb2NrX3JlYWRfdCAoaW50IGZkLCB2b2lkKiBidWZm LCBpbnQgY291bnQsIHVuc2lnbmVkIGludCB0aW1lb3V0KTsNCg0KLyoqDQogKiBcZGVmIHNvY2tf d3JpdGUoZmQsIGJ1ZmYsIGNvdW50KQ0KICogXGJyaWVmIFRoZSBibG9ja2luZyB2ZXJzaW9uIG9m IFxhIHNvY2tfd3JpdGVfdCBmdW5jdGlvbi4NCiAqDQogKiBcc2Egc29ja193cml0ZV90DQogKi8N CiNkZWZpbmUgc29ja193cml0ZShmZCwgYnVmZiwgY291bnQpIHNvY2tfd3JpdGVfdChmZCwgYnVm ZiwgY291bnQsIDApDQoNCi8qKg0KICogXGRlZiBzb2NrX3JlYWQoZmQsIGJ1ZmYsIGNvdW50KQ0K ICogXGJyaWVmIFRoZSBibG9ja2luZyB2ZXJzaW9uIG9mIFxhIHNvY2tfcmVhZF90IGZ1bmN0aW9u Lg0KICoNCiAqIFxzYSBzb2NrX3JlYWRfdA0KICovDQojZGVmaW5lIHNvY2tfcmVhZChmZCwgYnVm ZiwgY291bnQpIHNvY2tfcmVhZF90KGZkLCBidWZmLCBjb3VudCwgMCkNCg0KICAgIC8qKiBAfSBl bmQgb2YgbGl0ZV9zb2NrZXRfZm5zICovDQoNCiAgICAvKiogQH0gZW5kIG9mIGxpdGVfZm5zICov DQoNCiNlbmRpZiAvKiBMSVRFX1ZFUlNJT04gKi8NCg0KICAgIC8qKg0KICAgICAqIFxkZWZncm91 cCBpbml0X2ZucyBJbml0aWFsaXphdGlvbiBhbmQgdGVybWluYXRpb24gZnVuY3Rpb25zDQogICAg ICoNCiAgICAgKiBOb3JtYWxseSwgdGhlIG9ubHkgZW50cnkgb2YgYW55IE1pbmlHVUkgYXBwbGlj YXRpb24gaXMgXGEgTWluaUdVSU1haW4uDQogICAgICogVGhlIGFwcGxpY2F0aW9uIHdpbGwgdGVy bWluYXRlIHdoZW4geW91IGNhbGwgXGEgZXhpdCgzKSBvciBqdXN0IHJldHVybiBmcm9tDQogICAg ICogXGEgTWluaUdVSU1haW4uDQogICAgICoNCiAgICAgKiBFeGFtcGxlIDE6DQogICAgICoNCiAg ICAgKiBcaW5jbHVkZSBtaW5pZ3VpbWFpbi5jDQogICAgICoNCiAgICAgKiBFeGFtcGxlIDI6DQog ICAgICoNCiAgICAgKiBcaW5jbHVkZSBoZWxsb193b3JsZC5jDQogICAgICoNCiAgICAgKiBAew0K ICAgICAqLw0KDQovKioNCiAqIFxmbiBCT09MIEdVSUFQSSBSZWluaXREZXNrdG9wRXggKEJPT0wg aW5pdF9zeXNfdGV4dCkNCiAqIFxicmllZiBSZS1pbml0aWFsaXplcyB0aGUgZGVza3RvcC4NCiAq DQogKiBXaGVuIHlvdSBjaGFuZ2VkIHRoZSBjaGFyc2V0IG9yIHRoZSBiYWNrZ3JvdW5kIHBpY3R1 cmUgb2YgdGhlIGRlc2t0b3AsDQogKiB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBy ZS1pbml0aWFsaXplIHRoZSBsb2NhbCBzeXN0ZW0gdGV4dA0KICogKHdoZW4gXGEgaW5pdF9zeXNf dGV4dCBpcyBUUlVFKSwgdGhlIGJhY2tncm91bmQgcGljdHVyZSwgYW5kIHRoZSBkZXNrdG9wDQog KiBtZW51Lg0KICoNCiAqIFxwYXJhbSBpbml0X3N5c190ZXh0IEluZGljYXRlcyB3aGV0aGVyIHRv IGluaXRpYWxpemUgdGhlIGxvY2FsIHN5c3RlbSB0ZXh0Lg0KICoNCiAqIFxyZXR1cm4gVFJVRSBv biBzdWNjZXNzLCBvdGhlcndpc2UgRkFMU0UuDQogKg0KICogXHNhIFJlaW5pdERlc2t0b3ANCiAq Lw0KQk9PTCBHVUlBUEkgUmVpbml0RGVza3RvcEV4IChCT09MIGluaXRfc3lzX3RleHQpOw0KDQov KioNCiAqIFxkZWYgUmVpbml0RGVza3RvcCgpDQogKiBcYnJpZWYgUmUtaW5pdGlhbGl6ZXMgdGhl IGRlc2t0b3AgaW5jbHVkaW5nIHRoZSBsb2NhbCBzeXN0ZW0gdGV4dC4NCiAqDQogKiBccmV0dXJu IFRSVUUgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIEZBTFNFLg0KICoNCiAqIFxub3RlIFRoaXMgZnVu Y3Rpb24gZGVmaW5lZCBhcyBhIG1hY3JvIGNhbGxpbmcgXGEgUmVpbml0RGVza3RvcEV4IHdpdGgN CiAqIFxhIGluaXRfc3lzX3RleHQgc2V0IHRvIFRSVUUuDQogKg0KICogXHNhIFJlaW5pdERlc2t0 b3BFeA0KICovDQojZGVmaW5lIFJlaW5pdERlc2t0b3AoKSAgICBSZWluaXREZXNrdG9wRXggKFRS VUUpDQoNCi8qDQogKiBXZSByZW1vdmUgdGhlIFN1c3BlbmRHVUkgYW5kIFJlc3VtZUdVSSBmdW5j dGlvbnMuIA0KICogRG9uJ3QgdXNlIHRoZXNlIHR3byBmdW5jdGlvcyBhbnkgbW9yZS4NCiAqIHZv aWQgR1VJQVBJIFN1c3BlbmRHVUkgKHZvaWQpOw0KICogQk9PTCBHVUlBUEkgUmVzdW1lR1VJICh2 b2lkKTsgDQogKi8NCg0KLyoqDQogKiBcZm4gdm9pZCBHVUlBUEkgRXhpdEdVSVNhZmVseSAoaW50 IGV4aXRjb2RlKQ0KICogXGJyaWVmIEV4aXRzIHlvdXIgTWluaUdVSSBhcHBsaWNhdGlvbiBzYWZl bHkuDQogKg0KICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgdGVybWluYXRlIHlvdXIgTWlu aUdVSSBhcHBsaWNhdGlvbi4gVGhpcw0KICogZnVuY3Rpb24gd2lsbCByZXN0b3JlIGNvbnNvbGUg c3RhdHVzIGFuZCBjYWxsIFxhIGV4aXQoKSBmdW5jdGlvbiBhbmQgDQogKiBwYXNzIFxhIGV4aXRj b2RlIHRvIGl0Lg0KICoNCiAqIFxwYXJhbSBleGl0Y29kZSBUaGUgZXhpdCBzdGF0dXMgd2lsbCBi ZSBwYXNzZWQgdG8gZXhpdCgzKSBmdW5jdGlvbi4NCiAqIFxyZXR1cm4gVGhpcyBmdW5jdGlvbiBk b2VzIG5vdCByZXR1cm4uDQogKg0KICogXHNhIGV4aXQoMykNCiAqLw0Kdm9pZCBHVUlBUEkgRXhp dEdVSVNhZmVseSAoaW50IGV4aXRjb2RlKTsNCg0KLyoqDQogKiBcZm4gaW50IE1pbmlHVUlNYWlu IChpbnQgYXJncywgY29uc3QgY2hhciogYXJnW10pDQogKiBcYnJpZWYgVGhlIG1haW4gZW50cnkg b2YgYWxsIE1pbmlHVUkgYXBwbGljYXRpb25zLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxk IGJlIGRlZmluZWQgYnkgeW91ciBhcHBsaWNhdGlvbi4gTWluaUdVSSBkZWZpbmVzIFxhIG1haW4o KQ0KICogZnVuY3Rpb24gaW4gbGlibWluaWd1aSBsaWJyYXJ5IGZvciB5b3VyIGFwcGxpY2F0aW9u LCBhbmQgY2FsbCBcYSBNaW5pR1VJTWFpbigpIA0KICogaW4gdGhpcyBcYSBtYWluKCkgZnVuY3Rp b24uIFRoZSBcYSBtYWluKCkgZGVmaW5lZCBieSBNaW5pR1VJIGlzIHJlc3BvbnNpYmxlIG9mIA0K ICogaW5pdGlhbGl6aW5nIGFuZCBleGl0aW5nIE1pbmlHVUksIGFuZCByZXN0b3JpbmcgdGV4dCBt b2RlIG9mIGNvbnNvbGUuIA0KICoNCiAqIFxwYXJhbSBhcmdzIFRoZSBudW1iZXIgb2YgYXJndW1l bnRzIHBhc3NlZCB0byBcYSBtYWluKCkgYnkgb3BlcmF0aW5nIHN5c3RlbS4NCiAqIFxwYXJhbSBh cmcgVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gXGEgbWFpbigpIGJ5IG9wZXJhdGluZyBzeXN0ZW0u DQogKiBccmV0dXJuIFRoZSBleGl0IHN0YXR1cyB3aWxsIGJlIHJldHVyZWQgdG8gdGhlIHBhcmVu dC4NCiAqDQogKi8NCmludCBNaW5pR1VJTWFpbiAoaW50IGFyZ3MsIGNvbnN0IGNoYXIqIGFyZ1td KTsNCg0KLyoNCiAqIE5PVEU6IFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpcyBvbmx5IHZh bGlkIGZvciBNaW5pR1VJLVRocmVhZHMNCiAqIHNpbmNlIHZlcnNpb24gMS4wLjAxLg0KICovDQoj aWZuZGVmIF9MSVRFX1ZFUlNJT04NCkJPT0wgR1VJQVBJIFByZUluaXRHVUkgKGludCBhcmdzLCBj b25zdCBjaGFyKiBhcmdbXSwgaW50KiByZXRwKTsNCmludCBHVUlBUEkgUG9zdFRlcm1pbmF0ZUdV SSAoaW50IGFyZ3MsIGNvbnN0IGNoYXIqIGFyZ1tdLCBpbnQgcmNCeUdVSSk7IA0KI2VuZGlmIC8q IExJVEVfVkVSU0lPTiAqLw0KDQojZGVmaW5lIElETV9EVElfRklSU1QgICAoMzAwKQ0KDQovKg0K ICogTk9URTogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGlzIG9ubHkgdmFsaWQgZm9yIE1p bmlHVUktVGhyZWFkcw0KICogc2luY2UgdmVyc2lvbiAxLjAuMDEuDQogKi8NCiNpZm5kZWYgX0xJ VEVfVkVSU0lPTg0Kdm9pZCBHVUlBUEkgQ3VzdG9taXplRGVza3RvcE1lbnUgKEhNRU5VIGhEZXNr dG9wTWVudSwgaW50IGlQb3MpOw0KaW50IEdVSUFQSSBDdXN0b21EZXNrdG9wQ29tbWFuZCAoaW50 IGlkKTsNCiNlbmRpZg0KDQogICAgLyoqIEB9IGVuZCBvZiBpbml0X2ZucyAqLw0KDQogICAgLyoq DQogICAgICogXGRlZmdyb3VwIGFib3V0X2RsZyBBYm91dCBNaW5pR1VJIGRpYWxvZw0KICAgICAq IEB7DQogICAgICovDQojaWZkZWYgX01JU0NfQUJPVVRETEcNCiNpZm5kZWYgX0xJVEVfVkVSU0lP Tg0KICB2b2lkIEdVSUFQSSBPcGVuQWJvdXREaWFsb2cgKHZvaWQpOw0KI2Vsc2UNCg0KLyoqDQog KiBcZm4gSFdORCBHVUlBUEkgT3BlbkFib3V0RGlhbG9nIChIV05EIGhIb3N0aW5nKQ0KICogXGJy aWVmIE9wZW5zIG9yIGFjdGl2ZXMgdGhlICdBYm91dCBNaW5pR1VJJyBkaWFsb2cuDQogKg0KICog Q2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgbWFpbiB3aW5kb3cgZGlzcGxheWlu ZyANCiAqIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiBvZiBNaW5pR1VJLiBXaGVu IHRoZSBhYm91dCBkaWFsb2cgDQogKiBpcyBkaXNwbGF5aW5nLCBjYWxsaW5nIHRoaXMgZnVuY3Rp b24gYWdhaW4gd2lsbCBicmluZyB0aGUgZGlhbG9nIHRvIGJlIA0KICogdGhlIHRvcG1vc3QgbWFp biB3aW5kb3csIG5vdCBjcmVhdGUgYSBuZXcgb25lLg0KICoNCiAqIFxwYXJhbSBoSG9zdGluZyBU aGUgaG9zdGluZyBtYWluIHdpbmRvdyBvZiB0aGUgYWJvdXQgZGlhbG9nLg0KICogXHJldHVybiBU aGUgaGFuZGxlIHRvIHRoZSBhYm91dCBkaWFsb2cgYm94Lg0KICoNCiAqIFxub3RlIFRoaXMgZnVu Y3Rpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5pR1VJLUxpdGUgYW5kIHdoZW4gX01JU0NfQUJPVVRE TEcgZGVmaW5lZC4NCiAqIEZvciBNaW5pR1VJLVRocmVhZHMsIHlvdSBzaG91bGQgY2FsbCAndm9p ZCBHVUlBUEkgT3BlbkFib3V0RGlhbG9nICh2b2lkKScgZnVuY3Rpb24NCiAqIGluc3RlYWQuDQog Ki8NCiAgSFdORCBHVUlBUEkgT3BlbkFib3V0RGlhbG9nIChIV05EIGhIb3N0aW5nKTsNCiNlbmRp ZiAvKiBfTElURV9WRVJTSU9OICovDQojZW5kaWYgLyogX01JU0NfQUJPVVRETEcgKi8NCg0KICAg IC8qKiBAfSBlbmQgb2YgYWJvdXRfZGxnICovDQoNCiAgICAvKioNCiAgICAgKiBcZGVmZ3JvdXAg ZXRjX2ZucyBDb25maWd1cmF0aW9uIGZpbGUgb3BlcmF0aW9ucw0KICAgICAqDQogICAgICogVGhl IGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkIGJ5IE1pbmlHVUkgaGF2ZSBhIHNpbWlsaWFyIGZvcm1h dCBhcyBNJCBXaW5kb3dzIElOSSBmaWxlLA0KICAgICAqIGkuZS4gdGhlIGZpbGUgY29uc2lzdHMg b2Ygc2VjdGlvbnMsIGFuZCB0aGUgc2VjdGlvbiBjb25zaXN0cyBvZiBrZXktdmFsdWUgcGFpcnMs IGxpa2UgdGhpczoNCiAgICAgKg0KICAgICAqIFxjb2RlDQogICAgICogW3N5c3RlbV0NCiAgICAg KiAjIEdBTCBlbmdpbmUNCiAgICAgKiBnYWxfZW5naW5lPWZiY29uDQogICAgICoNCiAgICAgKiAj IElBTCBlbmdpbmUNCiAgICAgKiBpYWxfZW5naW5lPWNvbnNvbGUNCiAgICAgKg0KICAgICAqIG1k ZXY9L2Rldi9tb3VzZQ0KICAgICAqIG10eXBlPVBTMg0KICAgICAqIA0KICAgICAqIFtmYmNvbl0N CiAgICAgKiBkZWZhdWx0bW9kZT0xMDI0eDc2OC0xNmJwcA0KICAgICAqIA0KICAgICAqIFtxdmZi XQ0KICAgICAqIGRlZmF1bHRtb2RlPTY0MHg0ODAtMTZicHANCiAgICAgKiBkaXNwbGF5PTANCiAg ICAgKiBcZW5kY29kZQ0KICAgICAqDQogICAgICogQXNzdW1lIHRoYXQgdGhlIGNvbmZpZ3VyYXRp b24gZmlsZSBuYW1lZCBcYSBteS5jZmcsIGlmIHlvdSB3YW50IGdldCB0aGUgdmFsdWUgb2YgXGEg bWRldg0KICAgICAqIGluIFxhIHN5c3RlbSBzZWN0aW9uLCB5b3UgY2FuIGNhbGwgXGEgR2V0VmFs dWVGcm9tRXRjRmlsZSBpbiB0aGUgZm9sbG93aW5nIHdheToNCiAgICAgKg0KICAgICAqIFxjb2Rl DQogICAgICogY2hhciBidWZmZXIgWzUxXTsNCiAgICAgKg0KICAgICAqIEdldFZhbHVlRnJvbUV0 Y0ZpbGUgKCJteS5jZmciLCAic3lzdGVtIiwgIm1kZXYiLCBidWZmZXIsIDUxKTsNCiAgICAgKiBc ZW5kY29kZQ0KICAgICAqDQogICAgICogRXhhbXBsZToNCiAgICAgKg0KICAgICAqIFxpbmNsdWRl IGNmZ2ZpbGUuYw0KICAgICAqDQogICAgICogQHsNCiAgICAgKi8NCg0KI2RlZmluZSBFVENfTUFY TElORSAgICAgICAgICAgICAxMDI0DQojZGVmaW5lIEVUQ19GSUxFTk9URk9VTkQgICAgICAgIC0x DQojZGVmaW5lIEVUQ19TRUNUSU9OTk9URk9VTkQgICAgIC0yDQojZGVmaW5lIEVUQ19LRVlOT1RG T1VORCAgICAgICAgIC0zDQojZGVmaW5lIEVUQ19UTVBGSUxFRkFJTEVEICAgICAgIC00DQojZGVm aW5lIEVUQ19GSUxFSU9GQUlMRUQgICAgICAgIC01DQojZGVmaW5lIEVUQ19JTlRDT05WICAgICAg ICAgICAgIC02DQojZGVmaW5lIEVUQ19PSyAgICAgICAgICAgICAgICAgIDANCg0KLyoqDQogKiBc dmFyIGNoYXIqIEVUQ0ZJTEVQQVRIDQogKiBcYnJpZWYgVGhlIHBhdGggbmFtZSBvZiBNaW5pR1VJ IGNvbmZpZ3VyYXRpb24gZmlsZS4NCiAqDQogKiBCeSBkZWZhdWx0LCB0aGUgY29uZmlndXJhdGlv biBmaWxlIG9mIE1pbmlHVUkgbXVzdCBiZSBpbnN0YWxsZWQgaW4gL2V0YywNCiAqIC91c3IvbG9j YWwvZXRjIG9yIHlvdXIgaG9tZSBkaXJlY3RvcnkuIFdoZW4geW91IGluc3RhbGwgaXQgaW4geW91 cg0KICogaG9tZSBkaXJlY3RvcnksIHRoZSBuYW1lIHNob3VsZCBiZSAiLk1pbmlHVUkuY2ZnIi4N CiAqDQogKiBNaW5pR1VJIHdpbGwgdHJ5IHRvIHVzZSBcYSB+Ly5NaW5pR1VJLmNmZywgdGhlbiBc YSAvdXNyL2xvY2FsL2V0Yy9NaW5pR1VJLmNmZywgDQogKiBhbmQgXGEgL2V0Yy9NaW5pR1VJLmNm ZyBsYXN0Lg0KICoNCiAqIElmIE1pbmlHVUkgY2FuIG5vdCBmaW5kIGFueSBcYSBNaW5pR1VJLmNm ZyBmaWxlLCBvciBmaW5kIGEgYmFkIGZvcm1hdGVkIGNvbmZpZ3VyZQ0KICogZmlsZSwgdGhlIGlu aXRpYWx6YXRpb24gb2YgTWluaUdVSSB3aWxsIGJlIGNhbmNlbGVkLg0KICovDQpleHRlcm4gY2hh ciBFVENGSUxFUEFUSCBbXTsNCg0KLyoqDQogKiBcZm4gaW50IEdVSUFQSSBHZXRWYWx1ZUZyb21F dGNGaWxlIChjb25zdCBjaGFyKiBwRXRjRmlsZSwgY29uc3QgY2hhciogcFNlY3Rpb24sIGNvbnN0 IGNoYXIqIHBLZXksIGNoYXIqIHBWYWx1ZSwgaW50IGlMZW4pDQogKiBcYnJpZWYgR2V0cyB2YWx1 ZSBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0 aGUgdmFsdWUgb2YgdGhlIGtleSBcYSBwS2V5IGluIHRoZSBzZWN0aW9uIFxhIHBTZWN0aW9uIA0K ICogb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBcYSBwRXRjRmlsZSwgYW5kIHNhdmVzIHRoZSB2 YWx1ZSB0byB0aGUgYnVmZmVyDQogKiBwb2ludGVkIHRvIGJ5IFxhIHBWYWx1ZS4gDQogKg0KICog XHBhcmFtIHBFdGNGaWxlIFRoZSBwYXRoIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4N CiAqIFxwYXJhbSBwU2VjdGlvbiBUaGUgc2VjdGlvbiBuYW1lIGluIHdoaWNoIHRoZSB2YWx1ZSBs b2NhdGVkLg0KICogXHBhcmFtIHBLZXkgVGhlIGtleSBuYW1lIG9mIHRoZSB2YWx1ZS4NCiAqIFxw YXJhbSBwVmFsdWUgVGhlIHZhbHVlIHdpbGwgYmUgc2F2ZWQgaW4gdGhpcyBidWZmZXIuDQogKiBc cGFyYW0gaUxlbiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIuDQogKiBccmV0dXJu IEVUQ19PSyBvbiBzdWNjZXNzLCA8IDAgb24gZXJyb3IuDQogKg0KICogXHJldHZhbCBFVENfT0sg ICAgICAgICAgICAgICBHZXRzIHZhbHVlIHN1Y2Nlc3NmdWxsbHkuDQogKiBccmV0dmFsIEVUQ19G SUxFTk9URk9VTkQgICAgIENhbiBub3QgZmluZCB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24g ZmlsZS4NCiAqIFxyZXR2YWwgRVRDX1NFQ1RJT05OT1RGT1VORCAgQ2FuIG5vdCBmaW5kIHRoZSBz cGVjaWZpZWQgc2VjdGlvbiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLg0KICogXHJldHZhbCBF VENfS0VZTk9URk9VTkQgICAgICBDYW4gbm90IGZpbmQgdGhlIHNwZWNpZmllZCBrZXkgaW4gdGhl IHNlY3Rpb24uDQogKiBccmV0dmFsIEVUQ19GSUxFSU9GQUlMRUQgICAgIEZpbGUgSS9PIG9wZXJh dGlvbiBlcnJvciBvY2N1cnJlZC4NCiAqDQogKiBcbm90ZSBNaW5pR1VJIHVzZSBcYSBzdHJuY3B5 IHRvIGNvcHkgYWN0dWFsIHZhbHVlIHRvIFxhIHBWYWx1ZS4gVGh1cywgaWYgdGhlIGxlbmd0aCBv ZiANCiAqIHRoZSBhY3R1YWwgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gXGEgaUxlbiwgdGhlIHJlc3Vs dCBjb3BpZWQgdG8gXGEgcFZhbHVlIA0KICogd2lsbCBcZW0gTk9UIGJlIG51bGwtdGVybWluYXRl ZC4NCiAqDQogKiBcc2EgR2V0SW50VmFsdWVGcm9tRXRjRmlsZSwgU2V0VmFsdWVUb0V0Y0ZpbGUs IHN0cm5jcHkoMykNCiAqLw0KaW50IEdVSUFQSSBHZXRWYWx1ZUZyb21FdGNGaWxlIChjb25zdCBj aGFyKiBwRXRjRmlsZSwgY29uc3QgY2hhciogcFNlY3Rpb24sDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogcEtleSwgY2hhciogcFZhbHVlLCBpbnQgaUxlbik7DQoN Ci8qKg0KICogXGZuIGludCBHVUlBUEkgR2V0SW50VmFsdWVGcm9tRXRjRmlsZSAoY29uc3QgY2hh ciogcEV0Y0ZpbGUsIGNvbnN0IGNoYXIqIHBTZWN0aW9uLCBjb25zdCBjaGFyKiBwS2V5LCBpbnQq IHZhbHVlKQ0KICogXGJyaWVmIEdldHMgaW50ZWdlciB2YWx1ZSBmcm9tIGEgY29uZmlndXJhdGlv biBmaWxlLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0 aGUga2V5IFxhIHBLZXkgaW4gdGhlIHNlY3Rpb24gXGEgcFNlY3Rpb24gDQogKiBvZiB0aGUgY29u ZmlndXJhdGlvbiBmaWxlIFxhIHBFdGNGaWxlLCBhbmQgcmV0dXJucyB0aGUgaW50ZWdlciB2YWx1 ZSB0aHJvdWdoIHRoZSBidWZmZXINCiAqIHBvaW50ZWQgdG8gYnkgXGEgdmFsdWUuIA0KICoNCiAq IFxwYXJhbSBwRXRjRmlsZSBUaGUgcGF0aCBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUu DQogKiBccGFyYW0gcFNlY3Rpb24gVGhlIHNlY3Rpb24gbmFtZSBpbiB3aGljaCB0aGUgdmFsdWUg bG9jYXRlZC4NCiAqIFxwYXJhbSBwS2V5IFRoZSBrZXkgbmFtZSBvZiB0aGUgdmFsdWUuDQogKiBc cGFyYW0gdmFsdWUgVGhlIGludGVnZXIgdmFsdWUgd2lsbCBiZSBzYXZlZCBpbiB0aGlzIGJ1ZmZl ci4NCiAqIFxyZXR1cm4gRVRDX09LIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvci4NCiAqDQogKiBc cmV0dmFsIEVUQ19PSyAgICAgICAgICAgICAgIEdldHMgdmFsdWUgc3VjY2Vzc2Z1bGxseS4NCiAq IFxyZXR2YWwgRVRDX0ZJTEVOT1RGT1VORCAgICAgQ2FuIG5vdCBmaW5kIHRoZSBzcGVjaWZpZWQg Y29uZmlndXJhdGlvbiBmaWxlLg0KICogXHJldHZhbCBFVENfU0VDVElPTk5PVEZPVU5EICBDYW4g bm90IGZpbmQgdGhlIHNwZWNpZmllZCBzZWN0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUu DQogKiBccmV0dmFsIEVUQ19LRVlOT1RGT1VORCAgICAgIENhbiBub3QgZmluZCB0aGUgc3BlY2lm aWVkIGtleSBpbiB0aGUgc2VjdGlvbi4NCiAqIFxyZXR2YWwgRVRDX0ZJTEVJT0ZBSUxFRCAgICAg RmlsZSBJL08gb3BlcmF0aW9uIGVycm9yIG9jY3VycmVkLg0KICogXHJldHZhbCBFVENfSU5UQ09O ViAgICAgICAgICBDYW4gbm90IGNvbnZlcnQgdGhlIHZhbHVlIHN0cmluZyB0byBhbiBpbnRlZ2Vy Lg0KICoNCiAqIFxub3RlIE1pbmlHVUkgdXNlcyBcYSBzdHJ0b2wgdG8gY29udmVydCB0aGUgc3Ry aW5nIHZhbHVlIHRvIGFuIGludGVnZXIsIGFuZCBwYXNzIHRoZSBiYXNlIGFzIDAuDQogKiBUaHVz LCB0aGUgdmFsaWQgc3RyaW5nIHZhbHVlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlciBzaG91 bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtczoNCiAqDQogKiAgLSBbK3wtXTB4WzAtOXxBLUZd KlxuDQogKiAgICBXaWxsIGJlIHJlYWQgaW4gYmFzZSAxNi4NCiAqICAtIFsrfC1dMFswLTddKlxu DQogKiAgICBXaWxsIGJlIHJlYWQgaW4gYmFzZSA4Lg0KICogIC0gWyt8LV1bMS05XVswLTldKlxu DQogKiAgICBXaWxsIGJlIHJlYWQgaW4gYmFzZSAxMC4NCiAqDQogKiBcc2EgR2V0VmFsdWVGcm9t RXRjRmlsZSwgU2V0VmFsdWVUb0V0Y0ZpbGUsIHN0cnRvbCgzKQ0KICovDQppbnQgR1VJQVBJIEdl dEludFZhbHVlRnJvbUV0Y0ZpbGUgKGNvbnN0IGNoYXIqIHBFdGNGaWxlLCBjb25zdCBjaGFyKiBw U2VjdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwS2V5 LCBpbnQqIHZhbHVlKTsNCg0KLyoqDQogKiBcZm4gaW50IEdVSUFQSSBTZXRWYWx1ZVRvRXRjRmls ZSAoY29uc3QgY2hhciogcEV0Y0ZpbGUsIGNvbnN0IGNoYXIqIHBTZWN0aW9uLCBjb25zdCBjaGFy KiBwS2V5LCBjaGFyKiBwVmFsdWUpDQogKiBcYnJpZWYgU2V0cyBhIHZhbHVlIGluIGEgY29uZmln dXJhdGlvbiBmaWxlLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gc3RlcyB0aGUgdmFsdWUgb2YgdGhl IGtleSBcYSBwS2V5IGluIHRoZSBzZWN0aW9uIFxhIHBTZWN0aW9uDQogKiBvZiB0aGUgY29uZmln dXJhdGlvbiBmaWxlIFxhIHBFdGNGaWxlIHRvIGJlIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBc YSBwVmFsdWUuDQogKg0KICogXHBhcmFtIHBFdGNGaWxlIFRoZSBwYXRoIG5hbWUgb2YgdGhlIGNv bmZpZ3VyYXRpb24gZmlsZS4NCiAqIFxwYXJhbSBwU2VjdGlvbiBUaGUgc2VjdGlvbiBuYW1lIGlu IHdoaWNoIHRoZSB2YWx1ZSBsb2NhdGVkLg0KICogXHBhcmFtIHBLZXkgVGhlIGtleSBuYW1lIG9m IHRoZSB2YWx1ZS4NCiAqIFxwYXJhbSB2YWx1ZSBUaGUgbnVsbC10ZXJtaW5hdGVkIHZhbHVlIHN0 cmluZy4NCiAqIFxyZXR1cm4gRVRDX09LIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvci4NCiAqDQog KiBccmV0dmFsIEVUQ19PSyAgICAgICAgICAgICAgIFNldHMgdmFsdWUgc3VjY2Vzc2Z1bGxseS4N CiAqIFxyZXR2YWwgRVRDX0ZJTEVJT0ZBSUxFRCAgICAgRmlsZSBJL08gb3BlcmF0aW9uIGVycm9y IG9jY3VycmVkLg0KICogXHJldHZhbCBFVENfVE1QRklMRUZBSUxFRCAgICBDYW4gbm90IGNyZWF0 ZSB0ZW1wb3JhcnkgZmlsZS4NCiAqDQogKiBcbm90ZSBJZiB0aGUgc3BlY2lmaWVkIGNvbmZpZ3Vy YXRpb24gZmlsZSBkb2VzIG5vdCBleGlzdCwgTWluaUdVSSB3aWxsIHRyeSB0bw0KICogY3JlYXRl IHRoaXMgZmlsZS4NCiAqDQogKiBcc2EgR2V0VmFsdWVGcm9tRXRjRmlsZSwgR2V0SW50VmFsdWVG cm9tRXRjRmlsZQ0KICovDQppbnQgR1VJQVBJIFNldFZhbHVlVG9FdGNGaWxlIChjb25zdCBjaGFy KiBwRXRjRmlsZSwgY29uc3QgY2hhciogcFNlY3Rpb24sDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogcEtleSwgY2hhciogcFZhbHVlKTsNCg0KICAgIC8qKiBAfSBl bmQgb2YgZXRjX2ZucyAqLw0KDQogICAgLyoqDQogICAgICogXGFkZHRvZ3JvdXAgbWlzY19mbnMg TWlzY2VsbGFuZW91cyBmdW5jdGlvbnMNCiAgICAgKiBAew0KICAgICAqLw0KDQovKioNCiAqIFxm biB2b2lkIEdVSUFQSSBQaW5nICh2b2lkKQ0KICogXGJyaWVmIE1ha2VzIGEgYmVlcCBzb3VuZC4N CiAqIFxzYSBCZWVwDQogKi8NCnZvaWQgR1VJQVBJIFBpbmcgKHZvaWQpOw0KDQovKioNCiAqIFxk ZWYgQmVlcA0KICogXGJyaWVmIEFsaWFzIG9mIFBpbmcuDQogKiBcc2EgUGluZw0KICovDQojZGVm aW5lIEJlZXAgUGluZw0KDQovKioNCiAqIFxmbiB2b2lkIEdVSUFQSSBUb25lIChpbnQgZnJlcXVl bmN5X2h6LCBpbnQgZHVyYXRpb25fbXMpDQogKiBcYnJpZWYgTWFrZXMgYSB0b25lLg0KICoNCiAq IFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYWZ0ZXIgdGhlIHRvbmUuIFRodXMsIHlvdXIgcHJv Z3JhbQ0KICogd2lsbCBiZSBibG9ja2VkIHdoZW4gdGhlIHRvbmUgaXMgYmVpbmcgcGxheWVkLg0K ICoNCiAqIFxwYXJhbSBmcmVxdWVuY3lfaHogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdG9uZSBpbiBo ZXJ0ei4NCiAqIFxwYXJhbSBkdXJhdGlvbl9tcyBUaGUgZHVyYXRpb24gb2YgdGhlIHRvbmUgaW4g bWlsbGlzZWNvbmQuDQogKg0KICogXGJ1ZyBXaGVuIE1pbmlHVUkgcnVucyBvbiBYIFdpbmRvdywg dGhlIHRvbmUgY2FuIG5vdCBiZSBwbGF5ZWQgY29ycmVjdGx5Lg0KICoNCiAqIFxzYSBQaW5nDQog Ki8NCnZvaWQgR1VJQVBJIFRvbmUgKGludCBmcmVxdWVuY3lfaHosIGludCBkdXJhdGlvbl9tcyk7 DQoNCi8qKg0KICogXGZuIHZvaWQqIEdVSUFQSSBHZXRPcmlnaW5hbFRlcm1JTyAodm9pZCkNCiAq IFxicmllZiBHZXRzIFxhIHRlcm1pb3Mgc3RydWN0dXJlIG9mIHRoZSBvcmlnaW5hbCB0ZXJtaW5h bCBiZWZvcmUgaW5pdGlhbGl6aW5nIE1pbmlHVUkuDQogKg0KICogXHJldHVybiBUaGUgcG9pbnRl ciB0byB0aGUgb3JpZ2luYWwgXGEgdGVybWlvcyBzdHJ1Y3R1cmUuDQogKi8NCnZvaWQqIEdVSUFQ SSBHZXRPcmlnaW5hbFRlcm1JTyAodm9pZCk7DQoNCi8qKg0KICogXGZuIHZvaWQgR1VJQVBJIERy YXczRFVwRnJhbWUgKEhEQyBoREMsIGludCBsLCBpbnQgdCwgaW50IHIsIGludCBiLCBnYWxfcGl4 ZWwgZmlsbGMpDQogKiBcYnJpZWYgRHJhd3MgYSB0aGljayAzRCB1cCBmcmFtZS4NCiAqDQogKiBU aGlzIGZ1bmN0aW9uIGRyYXdzIGEgdGhpY2sgM0QgdXAgZnJhbWUgKHRoZSBib3JkZXIgaXMgMi1w aXhlbCB3aWRlKSwgDQogKiBhbmQgZmlsbHMgdGhlIGZyYW1lIGlmIGEgdmFsaWQgZmlsbGluZyBw aXhlbCBpcyBzcGVjaWZpZWQuDQogKg0KICogXHBhcmFtIGhEQyBUaGUgZGV2aWNlIGNvbnRleHQu DQogKiBccGFyYW0gbCBUaGUgeC1jb29yZGluYXRlIG9mIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRo ZSBmcmFtZS4NCiAqIFxwYXJhbSB0IFRoZSB5LWNvb3JkaW5hdGUgb2YgdXBwZXItbGVmdCBjb3Ju ZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFtIHIgVGhlIHgtY29vcmRpbmF0ZSBvZiBsb3dlci1y aWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFtIGIgVGhlIHktY29vcmRpbmF0ZSBv ZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFtIGZpbGxjIFRoZSBm aWxsaW5nIGNvbG9yLg0KICoNCiAqIFxub3RlIElmIFxhIGZpbGxjIGlzIHplcm8sIHRoaXMgZnVu Y3Rpb24gd2lsbCBub3QgZmlsbCB0aGUgZnJhbWUuDQogKg0KICogXHNhIERyYXczRERvd25GcmFt ZSwgRHJhdzNEVXBUaGluRnJhbWUNCiAqLw0Kdm9pZCBHVUlBUEkgRHJhdzNEVXBGcmFtZSAoSERD IGhEQywgaW50IGwsIGludCB0LCBpbnQgciwgaW50IGIsIGdhbF9waXhlbCBmaWxsYyk7DQoNCi8q Kg0KICogXGZuIHZvaWQgR1VJQVBJIERyYXczRERvd25GcmFtZSAoSERDIGhEQywgaW50IGwsIGlu dCB0LCBpbnQgciwgaW50IGIsIGdhbF9waXhlbCBmaWxsYykNCiAqIFxicmllZiBEcmF3cyBhIHRo aWNrIDNEIGRvd24gZnJhbWUuDQogKg0KICogVGhpcyBmdW5jdGlvbiBkcmF3cyBhIHRoaWNrIDNE IGRvd24gZnJhbWUgKHRoZSBib3JkZXIgaXMgMi1waXhlbCB3aWRlKSwgDQogKiBhbmQgZmlsbHMg dGhlIGZyYW1lIGlmIGEgdmFsaWQgZmlsbGluZyBwaXhlbCBpcyBzcGVjaWZpZWQuDQogKg0KICog XHBhcmFtIGhEQyBUaGUgZGV2aWNlIGNvbnRleHQuDQogKiBccGFyYW0gbCBUaGUgeC1jb29yZGlu YXRlIG9mIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBmcmFtZS4NCiAqIFxwYXJhbSB0IFRoZSB5 LWNvb3JkaW5hdGUgb2YgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFt IHIgVGhlIHgtY29vcmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0K ICogXHBhcmFtIGIgVGhlIHktY29vcmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhl IGZyYW1lLg0KICogXHBhcmFtIGZpbGxjIFRoZSBmaWxsaW5nIGNvbG9yLg0KICoNCiAqIFxub3Rl IElmIFxhIGZpbGxjIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZmlsbCB0aGUgZnJh bWUuDQogKg0KICogXHNhIERyYXczRFVwRnJhbWUsIERyYXczRERvd25UaGluRnJhbWUNCiAqLw0K dm9pZCBHVUlBUEkgRHJhdzNERG93bkZyYW1lIChIREMgaERDLCBpbnQgbCwgaW50IHQsIGludCBy LCBpbnQgYiwgZ2FsX3BpeGVsIGZpbGxjKTsNCg0KLyoqDQogKiBcZGVmIERyYXczRFVwVGhpY2tG cmFtZQ0KICogXGJyaWVmIEFsaWFzIG9mIERyYXczRFVwRnJhbWUNCiAqLw0KI2RlZmluZSBEcmF3 M0RVcFRoaWNrRnJhbWUgICAgICBEcmF3M0RVcEZyYW1lDQoNCi8qKg0KICogXGRlZiBEcmF3M0RE b3duVGhpY2tGcmFtZQ0KICogXGJyaWVmIEFsaWFzIG9mIERyYXczRERvd25GcmFtZQ0KICovDQoj ZGVmaW5lIERyYXczRERvd25UaGlja0ZyYW1lICAgIERyYXczRERvd25GcmFtZQ0KDQovKioNCiAq IFxmbiB2b2lkIEdVSUFQSSBEcmF3M0RVcFRoaW5GcmFtZSAoSERDIGhEQywgaW50IGwsIGludCB0 LCBpbnQgciwgaW50IGIsIGdhbF9waXhlbCBmaWxsYykNCiAqIFxicmllZiBEcmF3cyBhIHRoaW4g M0QgdXAgZnJhbWUuDQogKg0KICogVGhpcyBmdW5jdGlvbiBkcmF3cyBhIHRoaW4gM0QgdXAgZnJh bWUgKHRoZSBib3JkZXIgaXMgMS1waXhlbCB3aWRlKSwgDQogKiBhbmQgZmlsbHMgdGhlIGZyYW1l IGlmIGEgdmFsaWQgZmlsbGluZyBwaXhlbCBpcyBzcGVjaWZpZWQuDQogKg0KICogXHBhcmFtIGhE QyBUaGUgZGV2aWNlIGNvbnRleHQuDQogKiBccGFyYW0gbCBUaGUgeC1jb29yZGluYXRlIG9mIHVw cGVyLWxlZnQgY29ybmVyIG9mIHRoZSBmcmFtZS4NCiAqIFxwYXJhbSB0IFRoZSB5LWNvb3JkaW5h dGUgb2YgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFtIHIgVGhlIHgt Y29vcmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFt IGIgVGhlIHktY29vcmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0K ICogXHBhcmFtIGZpbGxjIFRoZSBmaWxsaW5nIGNvbG9yLg0KICoNCiAqIFxub3RlIElmIFxhIGZp bGxjIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZmlsbCB0aGUgZnJhbWUuDQogKg0K ICogXHNhIERyYXczRERvd25UaGluRnJhbWUsIERyYXczRFVwRnJhbWUNCiAqLw0Kdm9pZCBHVUlB UEkgRHJhdzNEVXBUaGluRnJhbWUgKEhEQyBoREMsIA0KICAgICAgICAgICAgICAgIGludCBsLCBp bnQgdCwgaW50IHIsIGludCBiLCBnYWxfcGl4ZWwgZmlsbGMpOw0KDQovKioNCiAqIFxmbiB2b2lk IEdVSUFQSSBEcmF3M0REb3duVGhpbkZyYW1lIChIREMgaERDLCBpbnQgbCwgaW50IHQsIGludCBy LCBpbnQgYiwgZ2FsX3BpeGVsIGZpbGxjKQ0KICogXGJyaWVmIERyYXdzIGEgdGhpbiAzRCBkb3du IGZyYW1lLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gZHJhd3MgYSB0aGluIDNEIGRvd24gZnJhbWUg KHRoZSBib3JkZXIgaXMgMS1waXhlbCB3aWRlKSwgDQogKiBhbmQgZmlsbHMgdGhlIGZyYW1lIGlm IGEgdmFsaWQgZmlsbGluZyBwaXhlbCBpcyBzcGVjaWZpZWQuDQogKg0KICogXHBhcmFtIGhEQyBU aGUgZGV2aWNlIGNvbnRleHQuDQogKiBccGFyYW0gbCBUaGUgeC1jb29yZGluYXRlIG9mIHVwcGVy LWxlZnQgY29ybmVyIG9mIHRoZSBmcmFtZS4NCiAqIFxwYXJhbSB0IFRoZSB5LWNvb3JkaW5hdGUg b2YgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFtIHIgVGhlIHgtY29v cmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICogXHBhcmFtIGIg VGhlIHktY29vcmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIgb2YgdGhlIGZyYW1lLg0KICog XHBhcmFtIGZpbGxjIFRoZSBmaWxsaW5nIGNvbG9yLg0KICoNCiAqIFxub3RlIElmIFxhIGZpbGxj IGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZmlsbCB0aGUgZnJhbWUuDQogKg0KICog XHNhIERyYXczRFVwVGhpbkZyYW1lLCBEcmF3M0REb3duRnJhbWUNCiAqLw0Kdm9pZCBHVUlBUEkg RHJhdzNERG93blRoaW5GcmFtZSAoSERDIGhEQywgDQogICAgICAgICAgICAgICAgaW50IGwsIGlu dCB0LCBpbnQgciwgaW50IGIsIGdhbF9waXhlbCBmaWxsYyk7DQoNCi8qKg0KICogXGZuIHZvaWQg R1VJQVBJIERyYXczREJvcmRlciAoSERDIGhkYywgaW50IGwsIGludCB0LCBpbnQgciwgaW50IGIp DQogKiBcYnJpZWYgRHJhd3MgYSAzRCByZWN0YW5nbGUgYm9yZGVyLg0KICoNCiAqIFRoaXMgZnVu Y3Rpb24gZHJhd3MgYSAzRCByZXRhbmdsZSBib3JkZXIgd2hpY2ggaXMgMi1waXhlbCB3aWRlLg0K ICoNCiAqIFxwYXJhbSBoREMgVGhlIGRldmljZSBjb250ZXh0Lg0KICogXHBhcmFtIGwgVGhlIHgt Y29vcmRpbmF0ZSBvZiB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLg0KICogXHBh cmFtIHQgVGhlIHktY29vcmRpbmF0ZSBvZiB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFu Z2xlLg0KICogXHBhcmFtIHIgVGhlIHgtY29vcmRpbmF0ZSBvZiBsb3dlci1yaWdodCBjb3JuZXIg b2YgdGhlIHJlY3RhbmdsZS4NCiAqIFxwYXJhbSBiIFRoZSB5LWNvb3JkaW5hdGUgb2YgbG93ZXIt cmlnaHQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUuDQogKg0KICogXHNhIERyYXczRFVwVGhpbkZy YW1lLCBEcmF3M0REb3duRnJhbWUNCiAqLw0Kdm9pZCBHVUlBUEkgRHJhdzNEQm9yZGVyIChIREMg aGRjLCBpbnQgbCwgaW50IHQsIGludCByLCBpbnQgYik7DQoNCi8qKg0KICogXGZuIHZvaWQgR1VJ QVBJIERpc2FibGVkVGV4dE91dCAoSERDIGhEQywgaW50IHgsIGludCB5LCBjb25zdCBjaGFyKiBz elRleHQpDQogKiBcYnJpZWYgT3V0cHV0cyBkaXNhYmxlZCAoZ3JheWVkKSB0ZXh0Lg0KICoNCiAq IFRoaXMgZnVuY3Rpb24gb3V0cHV0cyBhIGdyYXllZCB0ZXh0IGF0IHRoZSBzcGVjaWZpZWQgcG9z aXRpb24uDQogKg0KICogXHBhcmFtIGhEQyBUaGUgZGV2aWNlIGNvbnRleHQuDQogKiBccGFyYW0g eCBUaGUgeC1jb29yZGluYXRlIG9mIHN0YXJ0IHBvaW50Lg0KICogXHBhcmFtIHkgVGhlIHktY29v cmRpbmF0ZSBvZiBzdGFydCBwb2ludC4NCiAqIFxwYXJhbSBzelRleHQgVGhlIG51bGwtdGVybWlu YXRlZCB0ZXh0IHRvIGJlIG91dHB1dHRlZC4NCiAqDQogKiBcc2EgVGV4dE91dCwgRHJhd1RleHQN CiAqLw0Kdm9pZCBHVUlBUEkgRGlzYWJsZWRUZXh0T3V0IChIREMgaERDLCBpbnQgeCwgaW50IHks IGNvbnN0IGNoYXIqIHN6VGV4dCk7DQoNCiAgICAvKiogQH0gZW5kIG9mIG1pc2NfZm5zICovDQoN CiAgICAvKioNCiAgICAgKiBcZGVmZ3JvdXAgZml4ZWRfc3RyIExlbmd0aC1GaXhlZCBzdHJpbmcg b3BlcmF0aW9ucw0KICAgICAqDQogICAgICogTWluaUdVSSBtYWludGFpbnMgYSBwcml2YXRlIGhl YXAgZm9yIGxlbmd0aC1maXhlZCBzdHJpbmdzLCBhbmQgYWxsb2NhdGVzDQogICAgICogbGVuZ3Ro LWZpeGVkIHN0cmluZ3MgZnJvbSB0aGlzIGhlYXAgZm9yIHdpbmRvdyBjYXB0aW9uLCBtZW51IGl0 ZW0gdGV4dCwgDQogICAgICogYW5kIHNvIG9uLiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgcHJpdmF0 ZSBoZWFwIHRvIGFsbG9jYXRlIGxlbmd0aC1maXhlZCBzdHJpbmdzLg0KICAgICAqDQogICAgICog XGluY2x1ZGUgZml4c3RyLmMNCiAgICAgKg0KICAgICAqIEB7DQogICAgICovDQoNCi8qKg0KICog XGZuIGNoYXIqIEdVSUFQSSBGaXhTdHJBbGxvYyAoaW50IGxlbikNCiAqIFxicmllZiBBbGxvY2F0 ZXMgYSBidWZmZXIgZm9yIGEgbGVuZ3RoLWZpeGVkIHN0cmluZy4NCiAqDQogKiBUaGlzIGZ1bmN0 aW9uIGFsbG9jYXRlcyBhIGJ1ZmZlciBmcm9tIHRoZSBsZW5ndGgtZml4ZWQgc3RyaW5nIGhlYXAN CiAqIGZvciBhIHN0cmluZyB3aGljaCBpcyBcYSBsZW4gYnl0ZXMgbG9uZyAoZG9lcyBub3QgaW5j bHVkZSANCiAqIHRoZSBudWxsIGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nKS4gDQogKg0KICogXG5v dGUgWW91IGNhbiBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgdGhlIHN0cmluZywgYnV0IGRvIG5vdCBj aGFuZ2UgdGhlDQogKiBsZW5ndGggb2YgdGhpcyBzdHJpbmcgKHNob3J0ZXIgaXMgdmFsaWQpIHZp YSBcYSBzdHJjYXQgZnVuY3Rpb24gb3IgDQogKiBvdGhlciBlcXVpdmFsZW50IGZ1bmN0aW9ucyBv ciBvcGVyYXRpb25zLg0KICoNCiAqIFxwYXJhbSBsZW4gVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n Lg0KICogXHJldHVybiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9uIHN1Y2Nlc3MsIG90aGVy d2lzZSBOVUxMLg0KICoNCiAqIFxzYSBGcmVlRml4U3RyDQogKi8NCmNoYXIqIEdVSUFQSSBGaXhT dHJBbGxvYyAoaW50IGxlbik7DQoNCi8qKg0KICogXGZuIHZvaWQgR1VJQVBJIEZyZWVGaXhTdHIg KGNoYXIqIHN0cikNCiAqIFxicmllZiBGcmVlcyBhIGxlbmd0aC1maXhlZCBzdHJpbmcuDQogKg0K ICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgYnVmZmVyIHVzZWQgYnkgdGhlIGxlbmd0aC1maXhl ZCBzdHJpbmcgXGEgc3RyLg0KICoNCiAqIFxwYXJhbSBzdHIgVGhlIGxlbmd0aC1maXhlZCBzdHJp bmcuDQogKg0KICogXG5vdGUgRG8gbm90IHVzZSBcYSBmcmVlIHRvIGZyZWUgdGhlIGxlbmd0aC1m aXhlZCBzdHJpbmcuDQogKg0KICogXHNhIEZpeFN0ckFsbG9jDQogKi8NCnZvaWQgR1VJQVBJIEZy ZWVGaXhTdHIgKGNoYXIqIHN0cik7DQoNCiAgICAvKiogQH0gZW5kIG9mIGZpeGVkX3N0ciAqLw0K DQogICAgLyoqDQogICAgICogXGRlZmdyb3VwIGN1cnNvcl9mbnMgQ3Vyc29yIG9wZXJhdGlvbnMN CiAgICAgKiBAew0KICAgICAqLw0KDQojaWZuZGVmIF9DVVJTT1JfU1VQUE9SVA0Kc3RhdGljIGlu bGluZSB2b2lkIGRvX25vdGhpbmcgKHZvaWQpIHsgfTsNCiNlbmRpZg0KDQojaWZkZWYgX0NVUlNP Ul9TVVBQT1JUDQoNCi8qKg0KICogXGZuIEhDVVJTT1IgR1VJQVBJIExvYWRDdXJzb3JGcm9tRmls ZSAoY29uc3QgY2hhciogZmlsZW5hbWUpDQogKiBcYnJpZWYgTG9hZHMgYSBjdXJzb3IgZnJvbSBh IE0kIFdpbmRvd3MgY3Vyc29yIGZpbGUuDQogKg0KICogVGhpcyBmdW5jdGlvbiBsb2FkcyBhIGN1 cnNvciBmcm9tIE0kIFdpbmRvd3MgKi5jdXIgZmlsZSANCiAqIG5hbWVkIFxhIGZpbGVuYW1lIGFu ZCByZXR1cm5zIHRoZSBoYW5kbGUgdG8gbG9hZGVkIGN1cnNvci4gDQogKiBUaGUgcmV0dXJuZWQg aGFuZGxlIGNhbiBiZSB1c2VkIGJ5IFxhIFNldEN1cnNvciB0byBzZXQgbmV3IG1vdXNlIGN1cnNv ci4NCiAqDQogKiBccGFyYW0gZmlsZW5hbWUgVGhlIHBhdGggbmFtZSBvZiB0aGUgY3Vyc29yIGZp bGUuDQogKiBccmV0dXJuIEhhbmRsZSB0byB0aGUgY3Vyc29yLCB6ZXJvIG9uIGVycm9yLg0KICoN CiAqIFxub3RlIE1pbmlHVUkgZG9lcyBub3Qgc3VwcG9ydCAyNTYtY29sb3Igb3IgYW5pbWF0aW9u IGN1cnNvci4NCiAqDQogKiBcc2EgU2V0Q3Vyc29yDQogKi8NCiAgSENVUlNPUiBHVUlBUEkgTG9h ZEN1cnNvckZyb21GaWxlIChjb25zdCBjaGFyKiBmaWxlbmFtZSk7DQoNCi8qKg0KICogXGZuIEhD VVJTT1IgR1VJQVBJIENyZWF0ZUN1cnNvciAoaW50IHhob3RzcG90LCBpbnQgeWhvdHNwb3QsIGlu dCB3LCBpbnQgaCwgY29uc3QgQllURSogcEFOREJpdHMsIGNvbnN0IEJZVEUqIHBYT1JCaXRzLCBp bnQgY29sb3JudW0pDQogKiBcYnJpZWYgQ3JlYXRlcyBhIGN1cnNvciBmcm9tIG1lbW9yeSBkYXRh Lg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGN1cnNvciBmcm9tIG1lbW9yeSBkYXRh IHJhdGhlciB0aGFuIGN1cnNvciBmaWxlLiANCiAqIFxhIHhob3RzcG90IGFuZCBcYSB5aG90c3Bv dCBzcGVjaWZ5IHRoZSBob3Rwb3Qgb2YgdGhlIGN1cnNvciwgXGEgdyBhbmQgXGEgaCBhcmUgDQog KiB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgb2YgdGhlIGN1cnNvciByZXNwZWN0aXZlbHkuIFxh IHBBTkRCaXRzIGFuZCBcYSBwWE9SQml0cw0KICogYXJlIEFORCBiaXRtYXNrIGFuZCBYT1IgYml0 bWFzayBvZiB0aGUgY3Vyc29yLiANCiAqIE1pbmlHVUkgY3VycmVudGx5IHN1cHBvcnQgbW9uby1j b2xvciBjdXJzb3IgYW5kIDE2LWNvbG9yIGN1cnNvciwgXGEgY29sb3JudW0gDQogKiBzcGVjaWZp ZXMgdGhlIGN1cnNvcidzIGNvbG9yIGRlcHRoLiBGb3IgbW9uby1jb2xvciwgaXQgc2hvdWxkIGJl IDEsIGFuZCBmb3INCiAqIDE2LWNvbG9yIGN1cnNvciwgaXQgc2hvdWxkIGJlIDQuDQogKg0KICog XHBhcmFtIHhob3RzcG90IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGhvdHNwb3QuDQogKiBccGFy YW0geWhvdHNwb3QgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgaG90c3BvdC4NCiAqIFxwYXJhbSB3 IFRoZSB3aWR0aCBvZiB0aGUgY3Vyc29yLg0KICogXHBhcmFtIGggVGhlIGhlaWdodCBvZiB0aGUg Y3Vyc29yLg0KICogXHBhcmFtIHBBTkRCaXRzIFRoZSBwb2ludGVyIHRvIEFORCBiaXRzIG9mIHRo ZSBjdXJzb3IuDQogKiBccGFyYW0gcFhPUkJpdHMgVGhlIHBvaW50ZXIgdG8gWE9SIGJpdHMgb2Yg dGhlIGN1cnNvci4NCiAqIFxwYXJhbSBjb2xvcm51bSBUaGUgYml0LXBlci1waXhlbCBvZiBYT1Ig Yml0cy4NCiAqIFxyZXR1cm4gSGFuZGxlIHRvIHRoZSBjdXJzb3IsIHplcm8gb24gZXJyb3IuDQog Kg0KICogXG5vdGUgTWluaUdVSSBvbmx5IHN1cHBvcnQgMi1jb2xvciBvciAxNi1jb2xvciBjdXJz b3IuDQogKi8NCiAgSENVUlNPUiBHVUlBUEkgQ3JlYXRlQ3Vyc29yIChpbnQgeGhvdHNwb3QsIGlu dCB5aG90c3BvdCwgaW50IHcsIGludCBoLCANCiAgICAgICAgICAgICAgIGNvbnN0IEJZVEUqIHBB TkRCaXRzLCBjb25zdCBCWVRFKiBwWE9SQml0cywgaW50IGNvbG9ybnVtKTsNCg0KLyoqDQogKiBc Zm4gQk9PTCBHVUlBUEkgRGVzdHJveUN1cnNvciAoSENVUlNPUiBoY3NyKQ0KICogXGJyaWVmIERl c3Ryb2llcyBhIGN1cnNvciBvYmplY3QuDQogKg0KICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBh IGN1cnNvciBvYmplY3Qgc3BlY2lmaWVkIGJ5IFxhIGhjc3IuDQogKg0KICogXHBhcmFtIGhjc3Ig SGFuZGxlIHRvIHRoZSBjdXJzb3IuDQogKiBccmV0dXJuIFRSVUUgb24gc3VjY2Vzcywgb3RoZXJ3 aXNlIEZBTFNFLg0KICovDQogIEJPT0wgR1VJQVBJIERlc3Ryb3lDdXJzb3IgKEhDVVJTT1IgaGNz cik7DQoNCi8qKg0KICogXGZuIEhDVVJTT1IgR1VJQVBJIEdldFN5c3RlbUN1cnNvciAoaW50IGNz cmlkKQ0KICogXGJyaWVmIEdldHMgdGhlIGhhbmRsZSB0byBhIHN5c3RlbSBjdXJzb3IgYnkgaXRz IGlkZW50aWZpZXIuDQogKg0KICogTWluaUdVSSBjcmVhdGVzIChNQVhfU1lTQ1VSU09SSU5ERVgg KyAxKSBzeXN0ZW0gY3Vyc29ycyBmb3IgYXBwbGljYXRpb24uDQogKiBZb3UgY2FuIHVzZSBcYSBH ZXRTeXN0ZW1DdXJzb3IgdG8gZ2V0IHRoZSBoYW5kbGUgdG8gdGhlc2Ugc3lzdGVtIGN1cnNvcnMu DQogKiBUaGUgaWRlbnRpZmllciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6DQogKiANCiAq ICAtIElEQ19BUlJPV1xuDQogKiAgICBOb3JtYWwgYXJyb3cgY3Vyc29yLg0KICogIC0gSURDX0lC RUFNXG4NCiAqICAgICdJJyBzaGFwZWQgYmVhbSBjdXJzb3IsIGluZGljYXRlIGFuIGlucHV0IGZp ZWxkLg0KICogIC0gSURDX1BFTkNJTFxuDQogKiAgICBQZW5jaWwtc2hhcGUgY3Vyc29yLg0KICog IC0gSURDX0NST1NTXG4NCiAqICAgIENyb3NzIGN1cnNvci4NCiAqICAtIElEQ19NT1ZFXG4NCiAq ICAgIE1vdmluZyBjdXJzb3IuDQogKiAgLSBJRENfU0laRU5XU0Vcbg0KICogICAgU2l6aW5nIGN1 cnNvciwgYWxvbmcgbm9ydGgtd2VzdCBhbmQgc291dGgtZWFzdC4NCiAqICAtIElEQ19TSVpFTkVT V1xuDQogKiAgICBTaXppbmcgY3Vyc29yLCBhbG9uZyBub3J0aC1lYXN0IGFuZCBzb3V0aC13ZXN0 Lg0KICogIC0gSURDX1NJWkVXRVxuDQogKiAgICBTaXppbmcgY3Vyc29yLCBhbG9uZyB3ZXN0IGFu ZCBlYXN0Lg0KICogIC0gSURDX1NJWkVOU1xuDQogKiAgICBTaXppbmcgY3Vyc29yLCBhbG9uZyBu b3J0aCBhbmQgc291dGguDQogKiAgLSBJRENfVVBBUlJPV1xuDQogKiAgICBVcCBhcnJvdyBjdXJz b3IuDQogKiAgLSBJRENfTk9ORVxuDQogKiAgICBOb25lIGN1cnNvci4NCiAqICAtIElEQ19IRUxQ XG4NCiAqICAgIEFycm93IHdpdGggcXVlc3Rpb24uDQogKiAgLSBJRENfQlVTWVxuDQogKiAgICBC dXN5IGN1cnNvci4NCiAqICAtIElEQ19XQUlUXG4NCiAqICAgIFdhaXQgY3Vyc29yLg0KICogIC0g SURDX1JBUlJPV1xuDQogKiAgICBSaWdodCBhcnJvdyBjdXJzb3IuDQogKiAgLSBJRENfQ09MT01O XG4NCiAqICAgIEN1cnNvciBpbmRpY2F0ZXMgY29sdW1uLg0KICogIC0gSURDX1JPV1xuDQogKiAg ICBDdXJzb3IgaW5kaWNhdGVzIHJvdy4NCiAqICAtIElEQ19EUkFHXG4NCiAqICAgIERyYWdpbmcg Y3Vyc29yLg0KICogIC0gSURDX05PRFJPUFxuDQogKiAgICBObyBkcm9waW5nIGN1cnNvci4NCiAq ICAtIElEQ19IQU5EX1BPSU5UXG4NCiAqICAgIEhhbmQgcG9pbnQgY3Vyc29yLg0KICogIC0gSURD X0hBTkRfU0VMRUNUXG4NCiAqICAgIEhhbmQgc2VsZWN0aW9uIGN1cnNvci4NCiAqICAtIElEQ19T UExJVF9IT1JaXG4NCiAqICAgIEhvcml6b250YWwgc3BsaXR0aW5nIGN1cnNvci4NCiAqICAtIElE Q19TUExJVF9WRVJUXG4NCiAqICAgIFZlcnRpY2FsIHNwbGl0dGluZyBjdXJzb3IuDQogKg0KICog XHBhcmFtIGNzcmlkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzeXN0ZW0gY3Vyc29yLg0KICogXHJl dHVybiBIYW5kbGUgdG8gdGhlIHN5c3RlbSBjdXJzb3IsIG90aGVyd2lzZSB6ZXJvLg0KICovDQog IEhDVVJTT1IgR1VJQVBJIEdldFN5c3RlbUN1cnNvciAoaW50IGNzcmlkKTsNCg0KLyoqDQogKiBc Zm4gSENVUlNPUiBHVUlBUEkgR2V0Q3VycmVudEN1cnNvciAodm9pZCkNCiAqIFxicmllZiBHZXRz IHRoZSBoYW5kbGUgdG8gdGhlIGN1cnJlbnQgY3Vyc29yLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24g cmV0cml2ZXMgdGhlIGN1cnJlbnQgY3Vyc29yIGFuZCByZXR1cm5zIGl0cyBoYW5kbGUuDQogKg0K ICogXHJldHVybiBIYW5kbGUgdG8gdGhlIGN1cnJlbnQgc3lzdGVtIGN1cnNvciwgemVybyBtZWFu cyBubyBjdXJyZW50IGN1cnNvci4NCiAqLw0KICBIQ1VSU09SIEdVSUFQSSBHZXRDdXJyZW50Q3Vy c29yICh2b2lkKTsNCiNlbHNlDQogICNkZWZpbmUgTG9hZEN1cnNvckZyb21GaWxlKGZpbGVuYW1l KSAgICAoZG9fbm90aGluZygpLCAwKQ0KICAjZGVmaW5lIENyZWF0ZUN1cnNvcih4LCB5LCB3LCBo LCBBTkRicywgWE9SYnMsIGNyKSAoZG9fbm90aGluZygpLCAwKQ0KICAjZGVmaW5lIERlc3Ryb3lD dXJzb3IoaGNzcikgICAgICAgICAgICAgKGRvX25vdGhpbmcoKSwgMCkNCiAgI2RlZmluZSBHZXRT eXN0ZW1DdXJzb3IoY3NyaWQpICAgICAgICAgIChkb19ub3RoaW5nKCksIDApDQogICNkZWZpbmUg R2V0Q3VycmVudEN1cnNvcigpICAgICAgICAgICAgICAoZG9fbm90aGluZygpLCAwKQ0KI2VuZGlm IC8qIF9DVVJTT1JfU1VQUE9SVCAqLw0KDQojZGVmaW5lIE1BWF9TWVNDVVJTT1JJTkRFWCAgICAy Mg0KDQovKiBTeXN0ZW0gY3Vyc29yIGluZGV4LiAqLw0KI2RlZmluZSBJRENfQVJST1cgICAgICAg MA0KI2RlZmluZSBJRENfSUJFQU0gICAgICAgMQ0KI2RlZmluZSBJRENfUEVOQ0lMICAgICAgMg0K I2RlZmluZSBJRENfQ1JPU1MgICAgICAgMw0KI2RlZmluZSBJRENfTU9WRSAgICAgICAgNA0KI2Rl ZmluZSBJRENfU0laRU5XU0UgICAgNQ0KI2RlZmluZSBJRENfU0laRU5FU1cgICAgNg0KI2RlZmlu ZSBJRENfU0laRVdFICAgICAgNw0KI2RlZmluZSBJRENfU0laRU5TICAgICAgOA0KI2RlZmluZSBJ RENfVVBBUlJPVyAgICAgOQ0KI2RlZmluZSBJRENfTk9ORSAgICAgICAgMTANCiNkZWZpbmUgSURD X0hFTFAgICAgICAgIDExDQojZGVmaW5lIElEQ19CVVNZICAgICAgICAxMg0KI2RlZmluZSBJRENf V0FJVCAgICAgICAgMTMNCiNkZWZpbmUgSURDX1JBUlJPVyAgICAgIDE0DQojZGVmaW5lIElEQ19D T0xPTU4gICAgICAxNQ0KI2RlZmluZSBJRENfUk9XICAgICAgICAgMTYNCiNkZWZpbmUgSURDX0RS QUcgICAgICAgIDE3DQojZGVmaW5lIElEQ19OT0RST1AgICAgICAxOA0KI2RlZmluZSBJRENfSEFO RF9QT0lOVCAgMTkNCiNkZWZpbmUgSURDX0hBTkRfU0VMRUNUIDIwDQojZGVmaW5lIElEQ19TUExJ VF9IT1JaICAyMQ0KI2RlZmluZSBJRENfU1BMSVRfVkVSVCAgMjINCg0KLyoqDQogKiBcZm4gdm9p ZCBHVUlBUEkgQ2xpcEN1cnNvciAoY29uc3QgUkVDVCogcHJjKQ0KICogXGJyaWVmIENsaXBzIHRo ZSBjdXJzb3IgcmFuZ2UuDQogKg0KICogVGhpcyBmdW5jdGlvbiBzZXRzIGN1cnNvcidzIGNsaXBw aW5nIHJlY3RhbmdsZS4gXGEgcHJjIA0KICogaXMgdGhlIG5ldyBjbGlwcGluZyByZWN0YW5nbGUg aW4gc2NyZWVuIGNvb3JkaW5hdGVzLiBJZiBcYSBwcmMgaXMgTlVMTCwgDQogKiBcYSBDbGlwQ3Vy c29yIHdpbGwgZGlzYWJsZSBjdXJzb3IgY2xpcHBpbmcuDQogKg0KICogXHBhcmFtIHByYyBUaGUg Y2xpcHBpbmcgcmVjdGFuZ2xlLg0KICogXHJldHVybiBOb25lLg0KICovDQp2b2lkIEdVSUFQSSBD bGlwQ3Vyc29yIChjb25zdCBSRUNUKiBwcmMpOw0KDQovKioNCiAqIFxmbiB2b2lkIEdVSUFQSSBH ZXRDbGlwQ3Vyc29yIChSRUNUKiBwcmMpDQogKiBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBjdXJz b3IgY2xpcHBpbmcgcmVjdGFuZ2xlLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBj dXJyZW50IGNsaXBwaW5nIHJlY3RhbmdsZSB0byANCiAqIGEgUkVDVCBwb2ludGVkIHRvIGJ5IFxh IHByYy4NCiAqDQogKiBccGFyYW0gcHJjIFRoZSBjbGlwcGluZyByZWN0YW5nbGUgd2lsbCBiZSBz YXZlZCB0byB0aGlzIHJlY3RhbmdsZS4NCiAqIFxyZXR1cm4gTm9uZS4NCiAqLw0Kdm9pZCBHVUlB UEkgR2V0Q2xpcEN1cnNvciAoUkVDVCogcHJjKTsNCg0KLyoqDQogKiBcZm4gdm9pZCBHVUlBUEkg R2V0Q3Vyc29yUG9zIChQT0lOVCogcHB0KQ0KICogXGJyaWVmIEdldHMgcG9zaXRpb24gb2YgdGhl IGN1cnJlbnQgY3Vyc29yLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjdXJyZW50 IG1vdXNlIGN1cnNvciBwb3NpdGlvbiB0byANCiAqIGEgUE9JTlQgc3RydWN0dXJlIHBvaW50ZWQg dG8gYnkgXGEgcHB0Lg0KICoNCiAqIFxwYXJhbSBwcHQgVGhlIHBvc2l0aW9uIHdpbGwgYmUgc2F2 ZWQgaW4gdGhpcyBidWZmZXIuDQogKiBccmV0dXJuIE5vbmUuDQogKg0KICogXHNhIFNldEN1cnNv clBvcywgUE9JTlQNCiAqLw0Kdm9pZCBHVUlBUEkgR2V0Q3Vyc29yUG9zIChQT0lOVCogcHB0KTsN Cg0KLyoqDQogKiBcZm4gdm9pZCBHVUlBUEkgU2V0Q3Vyc29yUG9zIChpbnQgeCwgaW50IHkpDQog KiBcYnJpZWYgU2V0cyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBjdXJzb3IuDQogKg0KICogVGhp cyBmdW5jdGlvbiBzZXRzIG1vdXNlIGN1cnNvciBwb3NpdGlvbiB3aXRoIHRoZSBnaXZlbiANCiAq IGFyZ3VtZW50czogXGEgKHgseSkuDQogKg0KICogXHBhcmFtIHggVGhlIHgtY29ycmRpbmF0ZSBv ZiB0aGUgZXhwZWN0ZWQgcG9pc3Rpb24uDQogKiBccGFyYW0geSBUaGUgeS1jb3JyZGluYXRlIG9m IHRoZSBleHBlY3RlZCBwb2lzdGlvbi4NCiAqIFxyZXR1cm4gTm9uZS4NCiAqDQogKiBcc2EgR2V0 Q3Vyc29yUG9zDQogKi8NCnZvaWQgR1VJQVBJIFNldEN1cnNvclBvcyAoaW50IHgsIGludCB5KTsN Cg0KI2lmZGVmIF9DVVJTT1JfU1VQUE9SVA0KLyoqDQogKiBcZm4gSENVUlNPUiBHVUlBUEkgU2V0 Q3Vyc29yRXggKEhDVVJTT1IgaGNzciwgQk9PTCBzZXRfZGVmKQ0KICogXGJyaWVmIENoYW5nZXMg dGhlIGN1cnJlbnQgY3Vyc29yLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgY3Vy cmVudCBjdXJzb3IgdG8gYmUgXGEgaGNzciwNCiAqIGFuZC9vciBzZXRzIGl0IHRvIGJlIHRoZSBk ZWZhdWx0IGN1cnNvci4NCiAqDQogKiBJZiB5b3UgcGFzcyBcYSBzZXRfZGVmIGFzIFRSVUUsIHRo ZSBleHBlY3RlZCBjdXJzb3Igd2lsbCBiZSB0aGUgZGVmYXVsdCBjdXJzb3IuIA0KICogVGhlIGRl ZmF1bHQgY3Vyc29yIHdpbGwgYmUgdXNlZCB3aGVuIHlvdSBtb3ZlIGN1cnNvciB0byB0aGUgZGVz a3RvcC4NCiAqDQogKiBccGFyYW0gaGNzciBUaGUgZXhwZWN0ZWQgY3Vyc29yIGhhbmRsZS4NCiAq IFxwYXJhbSBzZXRfZGVmIEluZGljYXRlcyB3aGV0aGVyIHNldHRpbmcgdGhlIGN1cnNvciBhcyB0 aGUgZGVmYXVsdCBjdXJzb3IuDQogKiBccmV0dXJuIFRoZSBvbGQgY3Vyc29yIGhhbmRsZS4NCiAq DQogKiBcc2EgU2V0Q3Vyc29yLCBTZXREZWZhdWx0Q3Vyc29yLCBHZXREZWZhdWx0Q3Vyc29yDQog Ki8NCiAgSENVUlNPUiBHVUlBUEkgU2V0Q3Vyc29yRXggKEhDVVJTT1IgaGNzciwgQk9PTCBzZXRf ZGVmKTsNCg0KLyoqDQogKiBcZGVmIFNldEN1cnNvcihoY3NyKQ0KICogXGJyaWVmIENoYW5nZXMg dGhlIGN1cnJlbnQgY3Vyc29yLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgY3Vy cmVudCBjdXJzb3IgdG8gYmUgXGEgaGNzci4NCiAqDQogKiBccGFyYW0gaGNzciBUaGUgZXhwZWN0 ZWQgY3Vyc29yIGhhbmRsZS4NCiAqIFxyZXR1cm4gVGhlIG9sZCBjdXJzb3IgaGFuZGxlLg0KICoN CiAqIFxub3RlIFRoaXMgZnVuY3Rpb24gZGVmaW5lZCBhcyBhIG1hY3JvIGNhbGxpbmcgXGEgU2V0 Q3Vyc29yRXggd2l0aA0KICogcGFzc2luZyBcYSBzZXRfZGVmIGFzIEZBTFNFLg0KICoNCiAqIFxz YSBTZXRDdXJzb3JFeCwgU2V0RGVmYXVsdEN1cnNvcg0KICovDQogICNkZWZpbmUgU2V0Q3Vyc29y KGhjc3IpIFNldEN1cnNvckV4IChoY3NyLCBGQUxTRSkNCg0KLyoqDQogKiBcZGVmIFNldERlZmF1 bHRDdXJzb3IoaGNzcikNCiAqIFxicmllZiBDaGFuZ2VzIHRoZSBjdXJyZW50IGN1cnNvciwgYW5k IHNldCBpdCBhcyB0aGUgZGVmYXVsdCBjdXJzb3IuDQogKg0KICogVGhpcyBmdW5jdGlvbiBjaGFu Z2VzIHRoZSBjdXJyZW50IGN1cnNvciB0byBiZSBcYSBoY3NyLCBhbmQgc2V0IGl0IGFzIHRoZSBk ZWZhdWx0IGN1cnNvci4NCiAqDQogKiBccGFyYW0gaGNzciBUaGUgZXhwZWN0ZWQgY3Vyc29yIGhh bmRsZS4NCiAqIFxyZXR1cm4gVGhlIG9sZCBjdXJzb3IgaGFuZGxlLg0KICoNCiAqIFxub3RlIFRo aXMgZnVuY3Rpb24gZGVmaW5lZCBhcyBhIG1hY3JvIGNhbGxpbmcgXGEgU2V0Q3Vyc29yRXggd2l0 aA0KICogcGFzc2luZyBcYSBzZXRfZGVmIGFzIFRSVUUuDQogKg0KICogXHNhIFNldEN1cnNvckV4 LCBTZXRDdXJzb3INCiAqLw0KICAjZGVmaW5lIFNldERlZmF1bHRDdXJzb3IoaGNzcikgU2V0Q3Vy c29yRXggKGhjc3IsIFRSVUUpDQoNCi8qKg0KICogXGZuIEhDVVJTT1IgR1VJQVBJIEdldERlZmF1 bHRDdXJzb3IgKHZvaWQpDQogKiBcYnJpZWYgR2V0cyB0aGUgZGVmYXVsdCBjdXJzb3IuDQogKg0K ICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IGRlZmF1bHQgY3Vyc29yLg0KICoNCiAq IFxyZXR1cm4gVGhlIGN1cnJlbnQgZGVmYXVsdCBjdXJzb3IgaGFuZGxlLg0KICoNCiAqIFxzYSBT ZXRDdXJzb3JFeCwgU2V0RGVmYXVsdEN1cnNvcg0KICovDQogIEhDVVJTT1IgR1VJQVBJIEdldERl ZmF1bHRDdXJzb3IgKHZvaWQpOw0KDQojZWxzZQ0KICAjZGVmaW5lIFNldEN1cnNvckV4KGhjc3Is IHNldF9kZWYpICAgIChkb19ub3RoaW5nKCksIDApDQogICNkZWZpbmUgU2V0Q3Vyc29yKGhjc3Ip ICAgICAgICAgICAgICAgKGRvX25vdGhpbmcoKSwgMCkNCiAgI2RlZmluZSBTZXREZWZhdWx0Q3Vy c29yKGhjc3IpICAgICAgICAoZG9fbm90aGluZygpLCAwKQ0KICAjZGVmaW5lIEdldERlZmF1bHRD dXJzb3IoKSAgICAgICAgICAgIChkb19ub3RoaW5nKCksIDApDQojZW5kaWYgLyogX0NVUlNPUl9T VVBQT1JUICovDQoNCiNpZmRlZiBfQ1VSU09SX1NVUFBPUlQNCg0KLyoqDQogKiBcZm4gaW50IEdV SUFQSSBTaG93Q3Vyc29yIChCT09MIGZTaG93KQ0KICogXGJyaWVmIFNob3dzIG9yIGhpZGVzIGN1 cnNvci4NCiAqDQogKiBUaGlzIGZ1bmN0aW9uIHNob3dzIG9yIGhpZGVzIGN1cnNvciBhY2NvcmRp bmcgdG8gdGhlIGFyZ3VtZW50IFxhIGZTaG93LiANCiAqIFNob3cgY3Vyc29yIHdoZW4gXGEgZlNo b3cgaXMgVFJVRSwgYW5kIGhpZGUgY3Vyc29yIHdoZW4gXGEgZlNob3cgaXMgRkFMU0UuDQogKiBN aW5pR1VJIG1haW50YWlucyBhIHNob3dpbmcgY291bnQgdmFsdWUuIENhbGxpbmcgXGEgU2hvd0N1 cnNvciBvbmNlLCB0aGUgY291bnQgDQogKiB3aWxsIGluY3JlYXNlIHdoZW4gXGEgZlNob3cgaXMg VFJVRSwgb3IgZGVjcmVhc2Ugb25lIHdoZW4gRkFMU0UuDQogKiBXaGVuIHRoZSBjb3VudCBpcyBs ZXNzIHRoYW4gMCwgdGhlIGN1cnNvciB3aWxsIGRpc2FwZWFyIGFjdHVhbGx5Lg0KICoNCiAqIFxw YXJhbSBmU2hvdyBJbmRpY2F0ZXMgc2hvdyBvciBoaWRlIHRoZSBjdXJzb3IuDQogKiBccmV0dXJu IEN1cnNvciBzaG93aW5nIGNvdW50IHZhbHVlLiANCiAqLw0KICBpbnQgR1VJQVBJIFNob3dDdXJz b3IgKEJPT0wgZlNob3cpOw0KI2Vsc2UNCiAgI2RlZmluZSBTaG93Q3Vyc29yKGZTaG93KSAgICAg ICAgICAgICAoZG9fbm90aGluZygpLCAwKQ0KI2VuZGlmIC8qIF9DVVJTT1JfU1VQUE9SVCAqLw0K DQogICAgLyoqIEB9IGVuZCBvZiBjdXJzb3JfZm5zICovDQoNCiAgICAvKioNCiAgICAgKiBcZGVm Z3JvdXAga2V5X3N0YXR1cyBBc3luY2hyb25vdXMga2V5IHN0YXR1cyBmdW5jdGlvbnMNCiAgICAg KiBAew0KICAgICAqLw0KDQovKioNCiAqIFxmbiBCT09MIEdVSUFQSSBHZXRLZXlTdGF0dXMgKFVJ TlQgdUtleSkNCiAqIFxicmllZiBHZXRzIGEga2V5IG9yIGEgbW91c2UgYnV0dG9uIHN0YXR1cy4N CiAqDQogKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSBrZXkgb3IgYSBtb3VzZSBidXR0b24gc3RhdHVz LCByZXR1cm5zIFRSVUUgDQogKiB3aGVuIHByZXNzZWQsIG9yIEZBTFNFIHdoZW4gcmVsZWFzZWQu IFxhIHVLZXkgaW5kaWNhdGVzIA0KICogdGhlIGtleSBvciBtb3VzZSBidXR0b24uIEZvciBrZXlz IG9uIGtleWJvYXJkLCBcYSB1S2V5IHNob3VsZCBiZSANCiAqIHRoZSBzY2FuY29kZSBvZiB0aGUg a2V5LCBmb3IgbW91c2UgYnV0dG9uLCBcYSB1S2V5IHNob3VsZCBiZSBvbmUgDQogKiB2YWx1ZSBv ZiB0aGUgZm9sbG93aW5nOg0KICoNCiAqICAtIFNDQU5DT0RFX0xFRlRCVVRUT05cbg0KICogICAg TGVmdCBtb3VzZSBidXR0b24uDQogKiAgLSBTQ0FOQ09ERV9NSURETEJVVFRPTlxuDQogKiAgICBN aWRkbGUgbW91c2UgYnV0dG9uLg0KICogIC0gU0NBTkNPREVfUklHSFRCVVRUT05cbg0KICogICAg UmlnaHQgbW91c2UgYnV0dG9uLg0KICoNCiAqIFRoZXNlIGNvbnN0YW50cyBhbmQgdGhlIHNjYW5j b2RlcyBvZiBrZXlzIGFyZSBkZWZpbmVkIGluIDxtaW5pZ3VpL2NvbW1vbi5oPi4NCiAqDQogKiBc cGFyYW0gdUtleSBJbmRpY2F0ZXMgdGhlIGtleSBvciBtb3VzZSBidXR0b24uIA0KICogXHJldHVy biBSZXR1cm5zIFRSVUUgd2hlbiBwcmVzc2VkLCBvciBGQUxTRSB3aGVuIHJlbGVhc2VkLg0KICoN CiAqIFxzYSBHZXRTaGlmdEtleVN0YXR1cw0KICovDQpCT09MIEdVSUFQSSBHZXRLZXlTdGF0dXMg KFVJTlQgdUtleSk7DQoNCi8qKg0KICogXGZuIERXT1JEIEdVSUFQSSBHZXRTaGlmdEtleVN0YXR1 cyAodm9pZCkNCiAqIFxicmllZiBHZXRzIHN0YXR1cyBvZiB0aGUgc2hpZnQga2V5cy4NCiAqDQog KiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhzIHN0YXR1cyBvZiB0aGUgc2hpZnQga2V5cywgdGhlIHJl dHVybmVkIHZhbHVlIA0KICogaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2Ygc2hpZnQga2V5cyAtLSBD YXBzTG9jaywgU2Nyb2xsTG9jaywgTnVtTG9jaywgTGVmdCBTaGlmdCwgDQogKiBSaWdodCBTaGlm dCwgTGVmdCBDdHJsLCBSaWdodCBDdHJsLCBMZWZ0IEFsdCwgYW5kIFJpZ2h0IEFsdC4gDQogKiBZ b3UgY2FuIHVzZSBLU18qIE9SZWQgd2l0aCB0aGUgc3RhdHVzIHZhbHVlIHRvIGRldGVybWluZSBv bmUgc2hpZnQga2V5J3Mgc3RhdHVzOg0KICoNCiAqICAtIEtTX0NBUFNMT0NLXG4NCiAqICAgIElu ZGljYXRlcyB0aGF0IENhcHNMb2NrIGlzIGxvY2tlZC4NCiAqICAtIEtTX05VTUxPQ0tcbg0KICog ICAgSW5kaWNhdGVzIHRoYXQgTnVtTG9jayBpcyBsb2NrZWQuDQogKiAgLSBLU19TQ1JPTExMT0NL XG4NCiAqICAgIEluZGljYXRlcyB0aGF0IFNjcm9sbExvY2sgaXMgbG9ja2VkLg0KICogIC0gS1Nf TEVGVENUUkxcbg0KICogICAgSW5kaWNhdGVzIHRoYXQgbGVmdCBDdHJsIGtleSBpcyBwcmVzc2Vk Lg0KICogIC0gS1NfUklHSFRDVFJMXG4NCiAqICAgIEluZGljYXRlcyB0aGF0IHJpZ2h0IEN0cmwg a2V5IGlzIHByZXNzZWQuDQogKiAgLSBLU19DVFJMXG4NCiAqICAgIEluZGljYXRlcyB0aGF0IGVp dGhlciBsZWZ0IG9yIHJpZ2h0IEN0cmwga2V5IGlzIHByZXNzZWQuDQogKiAgLSBLU19MRUZUQUxU XG4NCiAqICAgIEluZGljYXRlcyB0aGF0IGxlZnQgQWx0IGtleSBpcyBwcmVzc2VkLg0KICogIC0g S1NfUklHSFRBTFRcbg0KICogICAgSW5kaWNhdGVzIHRoYXQgcmlnaHQgQWx0IGtleSBpcyBwcmVz c2VkLg0KICogIC0gS1NfQUxUXG4NCiAqICAgIEluZGljYXRlcyB0aGF0IGVpdGhlciBsZWZ0IG9y IHJpZ2h0IEFsdCBrZXkgaXMgcHJlc3NlZC4NCiAqICAtIEtTX0xFRlRTSElGVFxuDQogKiAgICBJ bmRpY2F0ZXMgdGhhdCBsZWZ0IFNoaWZ0IGtleSBpcyBwcmVzc2VkLg0KICogIC0gS1NfUklHSFRT SElGVFxuDQogKiAgICBJbmRpY2F0ZXMgdGhhdCByaWdodCBTaGlmdCBrZXkgaXMgcHJlc3NlZC4N CiAqICAtIEtTX1NISUZUXG4NCiAqICAgIEluZGljYXRlcyB0aGF0IGVpdGhlciBsZWZ0IG9yIHJp Z2h0IFNoaWZ0IGtleSBpcyBwcmVzc2VkLg0KICoNCiAqIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVm aW5lZCBpbiA8bWluaWd1aS9jb21tb24uaD4uDQogKg0KICogXHJldHVybiBUaGUgc3RhdHVzIG9m IHRoZSBzaGlmdCBrZXlzLg0KICogXHNhIGtleV9kZWZzDQogKi8NCkRXT1JEIEdVSUFQSSBHZXRT aGlmdEtleVN0YXR1cyAodm9pZCk7DQoNCiAgICAvKiogQH0gZW5kIG9mIGtleV9zdGF0dXMgKi8N Cg0KICAgIC8qKg0KICAgICAqIFxkZWZncm91cCBzeXNfdGV4dCBJbnRlcm5hdGlvbmxpemF0aW9u IG9mIHN5c3RlbSB0ZXh0DQogICAgICogQHsNCiAgICAgKi8NCg0KLyoqDQogKiBcZm4gY29uc3Qg Y2hhciogR2V0U3lzVGV4dCAoY29uc3QgY2hhciogdGV4dCk7DQogKiBcYnJpZWYgVHJhbnNsYXRl cyBzeXN0ZW0gdGV4dCB0byBsb2NhbGl6ZWQgdGV4dC4NCiAqDQogKiBXaGVuIE1pbmlHVUkgZGlz cGxheSBzb21lIHN5c3RlbSBtZXNzYWdlcywgaXQgd2lsbCBjYWxsIFxhIEdldFN5c1RleHQgZnVu Y3Rpb24gDQogKiB0byB0cmFuc2xhdGUgc3lzdGVtIHRleHQgZnJvbSBFbmdsaXNoIHRvIG90aGVy IGxhbmd1YWdlLiANCiAqIEdsb2JhbCB2YXJpYWJsZSBcYSBTeXNUZXh0IGNvbnRhaW5zIGFsbCB0 ZXh0IHVzZWQgYnkgTWluaUdVSSBpbiBFbmdsaXNoLg0KICoNCiAqIFxhIEdldFN5c1RleHQgZnVu Y3Rpb24gcmV0dXJucyBsb2NhbGl6ZWQgdGV4dCBmcm9tIFxhIGxvY2FsX1N5c1RleHQuIA0KICog TWluaUdVSSBoYXZlIGFscmVhZHkgZGVmaW5lZCBsb2NhbGl6ZWQgc3l0ZW0gdGV4dCBmb3IgZW5f VVMsIHpoX0NOLkdCMjMxMiANCiAqIGFuZCB6aF9UVy5CaWc1IGxvY2FsZXMuIE1pbmlHVUkgaW5p dGlhbGl6ZXMgXGEgbG9jYWxfU3lzVGV4dCB0byANCiAqIHBvaW50IG9uZSBvZiBhYm92ZSBsb2Nh bGl6ZWQgc3lzdGVtIHRleHQgd2hlbiBzdGFydHVwLiAgWW91IGNhbiBhbHNvIA0KICogbGV0IFxh IGxvY2FsX1N5c1RleHQgcG9pbnQgdG8geW91ciBjdXN0b21pemVkIHN0cmluZyBhcnJheS4NCiAq IA0KICogXHBhcmFtIHRleHQgVGhlIHN5c3RlbSB0ZXh0IGluIGVuX1VTIGxvY2FsZS4NCiAqIFxy ZXR1cm4gVGhlIGxvY2FsaXplZCB0ZXh0Lg0KICoNCiAqIFxzYSBTeXNUZXh0LCBsb2NhbF9TeXNU ZXh0DQogKi8NCmNvbnN0IGNoYXIqIEdldFN5c1RleHQgKGNvbnN0IGNoYXIqIHRleHQpOw0KDQov KioNCiAqIFx2YXIgY29uc3QgY2hhciogU3lzVGV4dCBbXQ0KICogXGJyaWVmIENvbnRhaW5zIGFs bCB0ZXh0IHVzZWQgYnkgTWluaUdVSSBpbiBFbmdsaXNoLg0KICoNCiAqIFN5c3RlbSB0ZXh0IGRl ZmluZWQgYXMgZm9sbG93cyBpbiBNaW5pR1VJOg0KICoNCiAqIFxjb2RlDQogKiBjb25zdCBjaGFy KiBTeXNUZXh0IFtdID0NCiAqIHsNCiAqICAgICJXaW5kb3dzLi4uIiwNCiAqICAgICJTdGFydC4u LiIsDQogKiAgICAiUmVmcmVzaCBCYWNrZ3JvdW5kIiwNCiAqICAgICJDbG9zZSBBbGwgV2luZG93 cyIsDQogKiAgICAiRW5kIFNlc3Npb24iLA0KICogICAgIk9wZXJhdGlvbnMuLi4iLA0KICogICAg Ik1pbmltaXplIiwNCiAqICAgICJNYXhpbWl6ZSIsDQogKiAgICAiUmVzdG9yZSIsDQogKiAgICAi Q2xvc2UiLA0KICogICAgIk9LIiwNCiAqICAgICJOZXh0IiwNCiAqICAgICJDYW5jZWwiLA0KICog ICAgIlByZXZpb3VzIiwNCiAqICAgICJZZXMiLA0KICogICAgIk5vIiwNCiAqICAgICJBYm9ydCIs DQogKiAgICAiUmV0cnkiLA0KICogICAgIklnbm9yZSIsDQogKiAgICAiQWJvdXQgTWluaUdVSS4u LiIsDQogKiAgICBOVUxMDQogKiB9Ow0KICogXGVuZGNvZGUNCiAqDQogKiBcc2EgR2V0U3lzVGV4 dCwgbG9jYWxfU3lzVGV4dA0KICovDQpleHRlcm4gY29uc3QgY2hhciogU3lzVGV4dCBbXTsNCg0K LyoqDQogKiBcdmFyIGNvbnN0IGNoYXIqKiBsb2NhbF9TeXNUZXh0DQogKiBcYnJpZWYgVGhlIHBv aW50ZXIgdG8gdGhlIGN1cnJlbnQgbG9jYWxpemVkIHN5c3RlbSB0ZXh0IGFycmF5Lg0KICoNCiAq IENoYW5naW5nIFxhIGxvY2FsX1N5c1RleHQgd2lsbCBsZWFkIHRvIFxhIEdldFN5c1RleHQgcmV0 dXJucyBhIGRpZmZlcmVudCANCiAqIGxvY2FsaXplZCBzeXN0ZW0gdGV4dC4gUGxlYXNlIHNldCBp dCBhZnRlciBjYWxsaW5nIFxhIFNldERlc2t0b3BSZWN0LCANCiAqIGFuZCBzZW5kIGRlc2t0b3Ag YSBNU0dfUkVJTklUU0VTU0lPTiBtZXNzYWdlIChjYWxsIFxhIFJlaW5pdERlc2t0b3AgZnVuY3Rp b24pIA0KICogYWZ0ZXIgYXNzaWduZWQgYSBkaWZmZXJlbnQgdmFsdWUgdG8gdGhpcyB2YXJpYWJs ZS4NCiAqDQogKiBcc2EgR2V0U3lzVGV4dCwgU3lzVGV4dCwgUmVpbml0RGVza3RvcEV4DQogKi8N CmV4dGVybiBjb25zdCBjaGFyKiogbG9jYWxfU3lzVGV4dDsNCg0KDQogICAgLyoqIEB9IGVuZCBv ZiBzeXNfdGV4dCAqLw0KDQogICAgLyoqDQogICAgICogXGRlZmdyb3VwIHN0cl9oZWxwZXJzIFN0 cmluZyBvcGVyYXRpb24gaGVscGVycw0KICAgICAqIEB7DQogICAgICovDQoNCi8qKg0KICogXGZu IGNoYXIqIHN0cm5jaHIgKGNvbnN0IGNoYXIqIHMsIHNpemVfdCBuLCBpbnQgYyk7DQogKiBcYnJp ZWYgTG9jYXRlcyBjaGFyYWN0ZXIgaW4gdGhlIGZpcnN0IFxhIG4gY2hhcmFjdGVycyBvZiBzdHJp bmcgXGEgcy4NCiAqDQogKiBccGFyYW0gcyBUaGUgcG9pbnRlciB0byB0aGUgc3RyaW5nLg0KICog XHBhcmFtIG4gVGhlIG51bWJlciBvZiBmaXJzdCBjaGFyYWN0ZXJzIHdpbGwgYmUgc2VhcmNoZWQu DQogKiBccGFyYW0gYyBUaGUgZXhwZWN0ZWQgY2hhcmFjdGVyLg0KICogXHJldHVybiBSZXR1cm5z IGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVyIFxhIGMg aW4gdGhlIHN0cmluZyBcYSBzDQogKg0KICogXHNhIHN0cmNocigzKQ0KICovDQpjaGFyKiBzdHJu Y2hyIChjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgaW50IGMpOw0KDQovKioNCiAqIFxmbiBpbnQg c3Vic3RybGVuIChjb25zdCBjaGFyKiB0ZXh0LCBpbnQgbGVuLCBjaGFyIGRlbGltaXRlciwgaW50 KiBucl9kZWxpbSkNCiAqIFxicmllZiBMb2NhdGVzIGEgc3Vic3RyaW5nIGRlbGltaXRlZCBieSBv bmUgb3IgbW9yZSBkZWxpbWl0ZXJzIGluIHRoZSBmaXJzdCBcYSBsZW4gY2hhcmFjdGVycyBvZiBz dHJpbmcgXGEgdGV4dC4NCiAqDQogKiBccGFyYW0gdGV4dCBUaGUgcG9pbnRlciB0byB0aGUgc3Ry aW5nLg0KICogXHBhcmFtIGxlbiBUaGUgbnVtYmVyIG9mIGZpcnN0IGNoYXJhY3RlcnMgd2lsbCBi ZSBzZWFyY2hlZC4NCiAqIFxwYXJhbSBkZWxpbWl0ZXIgVGhlIGRlbGltaXRlciB3aGljaCBkZWxp bWl0ZXMgdGhlIHN1YnN0cmluZyBmcm9tIG90aGVyLg0KICogXHBhcmFtIG5yX2RlbGltICBUaGUg bnVtYmVyIG9mIGNvbnRpbnVvdXMgZGVsaW1pdGVycyB3aWxsIGJlIHJldHVybmVkIHRocm91Z2gg dGhpcyBwb2ludGVyLg0KICogXHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSBzdWJzdHJpbmcuDQog Kg0KICogXHNhIHN0cnN0cigzKQ0KICovDQppbnQgc3Vic3RybGVuIChjb25zdCBjaGFyKiB0ZXh0 LCBpbnQgbGVuLCBjaGFyIGRlbGltaXRlciwgaW50KiBucl9kZWxpbSk7DQoNCiAgICAvKiogQH0g ZW5kIG9mIHN0cl9oZWxwZXJzICovDQoNCiAgICAvKiogQH0gZW5kIG9mIGdsb2JhbF9mbnMgKi8N Cg0KICAgIC8qKiBAfSBlbmQgb2YgZm5zICovDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2Vu ZGlmICAvKiBfX2NwbHVzcGx1cyAqLw0KDQojZW5kaWYgLyogX01HVUlfTUlOSUdVSV9IICovDQoN Cg== ------_=_NextPart_001_01C34C40.E831C6E0 Content-Type: text/plain; name="configure" Content-Transfer-Encoding: base64 Content-Description: configure Content-Disposition: attachment; filename="configure" IyEgL2Jpbi9zaA0KDQojIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJs ZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuDQojIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IHVzaW5n IGF1dG9jb25mIHZlcnNpb24gMi4xMyANCiMgQ29weXJpZ2h0IChDKSAxOTkyLCA5MywgOTQsIDk1 LCA5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCiMNCiMgVGhpcyBjb25maWd1cmUg c2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24NCiMg Z2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5 IGl0Lg0KDQojIERlZmF1bHRzOg0KYWNfaGVscD0NCmFjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9j YWwNCiMgQW55IGFkZGl0aW9ucyBmcm9tIGNvbmZpZ3VyZS5pbjoNCg0KIyBJbml0aWFsaXplIHNv bWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLg0KIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNh bWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgNCiMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJs aW5lcy4NCmJ1aWxkPU5PTkUNCmNhY2hlX2ZpbGU9Li9jb25maWcuY2FjaGUNCmV4ZWNfcHJlZml4 PU5PTkUNCmhvc3Q9Tk9ORQ0Kbm9fY3JlYXRlPQ0Kbm9ub3B0PU5PTkUNCm5vX3JlY3Vyc2lvbj0N CnByZWZpeD1OT05FDQpwcm9ncmFtX3ByZWZpeD1OT05FDQpwcm9ncmFtX3N1ZmZpeD1OT05FDQpw cm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LA0Kc2lsZW50PQ0Kc2l0ZT0NCnNyY2Rpcj0NCnRh cmdldD1OT05FDQp2ZXJib3NlPQ0KeF9pbmNsdWRlcz1OT05FDQp4X2xpYnJhcmllcz1OT05FDQpi aW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicNCnNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4n DQpsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJw0KZGF0YWRpcj0nJHtwcmVmaXh9 L3NoYXJlJw0Kc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycNCnNoYXJlZHN0YXRlZGlyPScke3By ZWZpeH0vY29tJw0KbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicNCmxpYmRpcj0nJHtleGVj X3ByZWZpeH0vbGliJw0KaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnDQpvbGRpbmNsdWRl ZGlyPScvdXNyL2luY2x1ZGUnDQppbmZvZGlyPScke3ByZWZpeH0vaW5mbycNCm1hbmRpcj0nJHtw cmVmaXh9L21hbicNCg0KIyBJbml0aWFsaXplIHNvbWUgb3RoZXIgdmFyaWFibGVzLg0Kc3ViZGly cz0NCk1GTEFHUz0gTUFLRUZMQUdTPQ0KU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0NCiMg TWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4N CmFjX21heF9oZXJlX2xpbmVzPTEyDQoNCmFjX3ByZXY9DQpmb3IgYWNfb3B0aW9uDQpkbw0KDQog ICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0Lg0K ICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4NCiAgICBldmFsICIkYWNfcHJldj1cJGFjX29w dGlvbiINCiAgICBhY19wcmV2PQ0KICAgIGNvbnRpbnVlDQogIGZpDQoNCiAgY2FzZSAiJGFjX29w dGlvbiIgaW4NCiAgLSo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0aW9uIiB8IHNlZCAncy9b LV9hLXpBLVowLTldKj0vLydgIDs7DQogICopIGFjX29wdGFyZz0gOzsNCiAgZXNhYw0KDQogICMg QWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4g ZGlhZ25vc2UgdHlwb3MuDQoNCiAgY2FzZSAiJGFjX29wdGlvbiIgaW4NCg0KICAtYmluZGlyIHwg LS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQ0KICAgIGFjX3ByZXY9 YmluZGlyIDs7DQogIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9 KiB8IC0tYmluPSogfCAtLWJpPSopDQogICAgYmluZGlyPSIkYWNfb3B0YXJnIiA7Ow0KDQogIC1i dWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpDQogICAgYWNfcHJldj1idWls ZCA7Ow0KICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9 KikNCiAgICBidWlsZD0iJGFjX29wdGFyZyIgOzsNCg0KICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUt ZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcDQogIHwgLS1jYWNoZS1mIHwgLS1jYWNo ZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQ0KICAgIGFjX3ByZXY9 Y2FjaGVfZmlsZSA7Ow0KICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hl LWZpbD0qIHwgLS1jYWNoZS1maT0qIFwNCiAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAt LWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikNCiAgICBjYWNo ZV9maWxlPSIkYWNfb3B0YXJnIiA7Ow0KDQogIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRh ZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQ0KICAgIGFjX3ByZXY9ZGF0YWRp ciA7Ow0KICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0q IHwgLS1kYXRhPSogfCAtLWRhdD0qIFwNCiAgfCAtLWRhPSopDQogICAgZGF0YWRpcj0iJGFjX29w dGFyZyIgOzsNCg0KICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopDQogICAgYWNfZmVhdHVyZT1g ZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmRpc2FibGUtLy8nYA0KICAgICMgUmVqZWN0IG5h bWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4NCiAgICBpZiB0ZXN0 IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4N CiAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX2ZlYXR1cmU6IGludmFsaWQgZmVh dHVyZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0NCiAgICBmaQ0KICAgIGFjX2ZlYXR1cmU9YGVjaG8g JGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgDQogICAgZXZhbCAiZW5hYmxlXyR7YWNfZmVhdHVy ZX09bm8iIDs7DQoNCiAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikNCiAgICBhY19mZWF0dXJlPWBl Y2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZW5hYmxlLS8vJyAtZSAncy89LiovLydgDQogICAg IyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLg0K ICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8v ZydgIjsgdGhlbg0KICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTog aW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQ0KICAgIGZpDQogICAgYWNfZmVh dHVyZT1gZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzLy0vXy9nJ2ANCiAgICBjYXNlICIkYWNfb3B0 aW9uIiBpbg0KICAgICAgKj0qKSA7Ow0KICAgICAgKikgYWNfb3B0YXJnPXllcyA7Ow0KICAgIGVz YWMNCiAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT0nJGFjX29wdGFyZyciIDs7DQoNCiAg LWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJl ZmkgXA0KICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1w IHwgLS1leGVjLSBcDQogIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQ0KICAgIGFjX3ByZXY9ZXhl Y19wcmVmaXggOzsNCiAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMt cHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcDQogIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1w cmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcDQogIHwgLS1leGVj PSogfCAtLWV4ZT0qIHwgLS1leD0qKQ0KICAgIGV4ZWNfcHJlZml4PSIkYWNfb3B0YXJnIiA7Ow0K DQogIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpDQogICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0 aC1nYXMuDQogICAgd2l0aF9nYXM9eWVzIDs7DQoNCiAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8 IC0taGUpDQogICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBt YWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuDQogICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxv bmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLg0KICAgIGNhdCA8PCBFT0YNClVz YWdlOiBjb25maWd1cmUgW29wdGlvbnNdIFtob3N0XQ0KT3B0aW9uczogW2RlZmF1bHRzIGluIGJy YWNrZXRzIGFmdGVyIGRlc2NyaXB0aW9uc10NCkNvbmZpZ3VyYXRpb246DQogIC0tY2FjaGUtZmls ZT1GSUxFICAgICAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFDQogIC0taGVscCAgICAgICAg ICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQ0KICAtLW5vLWNyZWF0ZSAgICAgICAgICAgICBk byBub3QgY3JlYXRlIG91dHB1dCBmaWxlcw0KICAtLXF1aWV0LCAtLXNpbGVudCAgICAgICBkbyBu b3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMNCiAgLS12ZXJzaW9uICAgICAgICAgICAg ICAgcHJpbnQgdGhlIHZlcnNpb24gb2YgYXV0b2NvbmYgdGhhdCBjcmVhdGVkIGNvbmZpZ3VyZQ0K RGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzOg0KICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0 YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0NCiAgLS1leGVjLXByZWZpeD1FUFJF RklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgW3NhbWUgYXMgcHJlZml4XQ0KICAtLWJpbmRpcj1ESVIg ICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9iaW5dDQogIC0tc2Jp bmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVG SVgvc2Jpbl0NCiAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBp biBESVIgW0VQUkVGSVgvbGliZXhlY10NCiAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1v bmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIERJUg0KICAgICAgICAgICAgICAg ICAgICAgICAgICBbUFJFRklYL3NoYXJlXQ0KICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFk LW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBpbiBESVIgW1BSRUZJWC9ldGNdDQogIC0tc2hhcmVk c3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEg aW4gRElSDQogICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvY29tXQ0KICAtLWxvY2Fs c3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQ UkVGSVgvdmFyXQ0KICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJp ZXMgaW4gRElSIFtFUFJFRklYL2xpYl0NCiAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFk ZXIgZmlsZXMgaW4gRElSIFtQUkVGSVgvaW5jbHVkZV0NCiAgLS1vbGRpbmNsdWRlZGlyPURJUiAg ICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgaW4gRElSIFsvdXNyL2luY2x1ZGVdDQogIC0t aW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9p bmZvXQ0KICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBpbiBESVIg W1BSRUZJWC9tYW5dDQogIC0tc3JjZGlyPURJUiAgICAgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMg aW4gRElSIFtjb25maWd1cmUgZGlyIG9yIC4uXQ0KICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCBw cmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcw0KICAtLXByb2dyYW0tc3Vm Zml4PVNVRkZJWCBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzDQogIC0t cHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNDQogICAgICAgICAgICAgICAgICAgICAgICAg IHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcw0KRU9GDQogICAgY2F0 IDw8IEVPRg0KSG9zdCB0eXBlOg0KICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUg Zm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtCVUlMRD1IT1NUXQ0KICAtLWhvc3Q9SE9TVCAgICAgICAg ICAgICBjb25maWd1cmUgZm9yIEhPU1QgW2d1ZXNzZWRdDQogIC0tdGFyZ2V0PVRBUkdFVCAgICAg ICAgIGNvbmZpZ3VyZSBmb3IgVEFSR0VUIFtUQVJHRVQ9SE9TVF0NCkZlYXR1cmVzIGFuZCBwYWNr YWdlczoNCiAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAo c2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQ0KICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBp bmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdDQogIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQ QUNLQUdFIFtBUkc9eWVzXQ0KICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBB Q0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pDQogIC0teC1pbmNsdWRlcz1ESVIgICAg ICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSDQogIC0teC1saWJyYXJpZXM9RElSICAgICAg IFggbGlicmFyeSBmaWxlcyBhcmUgaW4gRElSDQpFT0YNCiAgICBpZiB0ZXN0IC1uICIkYWNfaGVs cCI7IHRoZW4NCiAgICAgIGVjaG8gIi0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucyByZWNvZ25p emVkOiRhY19oZWxwIg0KICAgIGZpDQogICAgZXhpdCAwIDs7DQoNCiAgLWhvc3QgfCAtLWhvc3Qg fCAtLWhvcyB8IC0taG8pDQogICAgYWNfcHJldj1ob3N0IDs7DQogIC1ob3N0PSogfCAtLWhvc3Q9 KiB8IC0taG9zPSogfCAtLWhvPSopDQogICAgaG9zdD0iJGFjX29wdGFyZyIgOzsNCg0KICAtaW5j bHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5j bHVkZSBcDQogIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpDQogICAgYWNf cHJldj1pbmNsdWRlZGlyIDs7DQogIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0t aW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcDQogIHwgLS1pbmNsdWQ9 KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikNCiAgICBpbmNsdWRlZGlyPSIkYWNf b3B0YXJnIiA7Ow0KDQogIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9k IHwgLS1pbmZvIHwgLS1pbmYpDQogICAgYWNfcHJldj1pbmZvZGlyIDs7DQogIC1pbmZvZGlyPSog fCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5m PSopDQogICAgaW5mb2Rpcj0iJGFjX29wdGFyZyIgOzsNCg0KICAtbGliZGlyIHwgLS1saWJkaXIg fCAtLWxpYmRpIHwgLS1saWJkKQ0KICAgIGFjX3ByZXY9bGliZGlyIDs7DQogIC1saWJkaXI9KiB8 IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikNCiAgICBsaWJkaXI9IiRhY19vcHRh cmciIDs7DQoNCiAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0t bGliZXhlY2QgfCAtLWxpYmV4ZWMgXA0KICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkN CiAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsNCiAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rp cj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwNCiAgfCAt LWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopDQogICAgbGliZXhlY2Rpcj0iJGFjX29w dGFyZyIgOzsNCg0KICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxz dGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcDQogIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQg fCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwNCiAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxv Y2EgfCAtLWxvYyB8IC0tbG8pDQogICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7DQogIC1sb2Nh bHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxv Y2Fsc3RhdGVkPSogXA0KICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9j YWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwNCiAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1s b2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQ0KICAgIGxvY2Fsc3RhdGVkaXI9IiRhY19vcHRhcmci IDs7DQoNCiAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwg LS1tYSB8IC0tbSkNCiAgICBhY19wcmV2PW1hbmRpciA7Ow0KICAtbWFuZGlyPSogfCAtLW1hbmRp cj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopDQog ICAgbWFuZGlyPSIkYWNfb3B0YXJnIiA7Ow0KDQogIC1uZnAgfCAtLW5mcCB8IC0tbmYpDQogICAg IyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4NCiAgICB3aXRoX2ZwPW5vIDs7DQoNCiAgLW5v LWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3Jl IFwNCiAgfCAtLW5vLWNyIHwgLS1uby1jKQ0KICAgIG5vX2NyZWF0ZT15ZXMgOzsNCg0KICAtbm8t cmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNp IFwNCiAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8 IC0tbm8tcmUgfCAtLW5vLXIpDQogICAgbm9fcmVjdXJzaW9uPXllcyA7Ow0KDQogIC1vbGRpbmNs dWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVk IFwNCiAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGlu Y2wgfCAtLW9sZGluYyBcDQogIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0t bykNCiAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsNCiAgLW9sZGluY2x1ZGVkaXI9KiB8IC0t b2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcDQog IHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRp bmNsPSogfCAtLW9sZGluYz0qIFwNCiAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSog fCAtLW9sPSogfCAtLW89KikNCiAgICBvbGRpbmNsdWRlZGlyPSIkYWNfb3B0YXJnIiA7Ow0KDQog IC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAt LXApDQogICAgYWNfcHJldj1wcmVmaXggOzsNCiAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0t cHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQ0KICAgIHByZWZp eD0iJGFjX29wdGFyZyIgOzsNCg0KICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4 IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXA0KICB8IC0tcHJvZ3JhbS1wcmUg fCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkNCiAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4 IDs7DQogIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFt LXByZWZpPSogXA0KICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXBy b2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopDQogICAgcHJvZ3JhbV9wcmVmaXg9IiRhY19vcHRh cmciIDs7DQoNCiAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3Jh bS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwNCiAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFt LXN1IHwgLS1wcm9ncmFtLXMpDQogICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7Ow0KICAtcHJv Z3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwN CiAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSog fCAtLXByb2dyYW0tcz0qKQ0KICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7Ow0KDQog IC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwNCiAg fCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXA0KICB8 IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwNCiAgfCAtLXBy b2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwNCiAgfCAtLXByb2dyYW0tdHJh bnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXA0KICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3Jh bS10cmFuIFwNCiAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQ0K ICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7Ow0KICAtcHJvZ3JhbS10cmFuc2Zv cm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXA0KICB8IC0tcHJvZ3JhbS10 cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXA0KICB8IC0tcHJvZ3Jh bS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcDQogIHwgLS1wcm9ncmFt LXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXA0KICB8IC0tcHJvZ3JhbS10cmFu c2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXA0KICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1w cm9ncmFtLXRyYW49KiBcDQogIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1w cm9ncmFtLXQ9KikNCiAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSIkYWNfb3B0YXJnIiA7Ow0K DQogIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBc DQogIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQ0KICAg IHNpbGVudD15ZXMgOzsNCg0KICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1z YmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikNCiAgICBhY19wcmV2PXNiaW5kaXIgOzsNCiAg LXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jp bj0qIFwNCiAgfCAtLXNiaT0qIHwgLS1zYj0qKQ0KICAgIHNiaW5kaXI9IiRhY19vcHRhcmciIDs7 DQoNCiAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVk aSBcDQogIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwg LS1zaGFyZWRzdGEgXA0KICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0t c2hhcmUgfCAtLXNoYXIgXA0KICB8IC0tc2hhIHwgLS1zaCkNCiAgICBhY19wcmV2PXNoYXJlZHN0 YXRlZGlyIDs7DQogIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1z aGFyZWRzdGF0ZWRpPSogXA0KICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSog fCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXA0KICB8IC0tc2hhcmVkc3Q9KiB8IC0t c2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwNCiAgfCAtLXNo YT0qIHwgLS1zaD0qKQ0KICAgIHNoYXJlZHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7Ow0KDQogIC1z aXRlIHwgLS1zaXRlIHwgLS1zaXQpDQogICAgYWNfcHJldj1zaXRlIDs7DQogIC1zaXRlPSogfCAt LXNpdGU9KiB8IC0tc2l0PSopDQogICAgc2l0ZT0iJGFjX29wdGFyZyIgOzsNCg0KICAtc3JjZGly IHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQ0KICAgIGFjX3By ZXY9c3JjZGlyIDs7DQogIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNy Y2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopDQogICAgc3JjZGlyPSIkYWNfb3B0YXJnIiA7Ow0KDQog IC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwg LS1zeXNjb25mIFwNCiAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0t c3kpDQogICAgYWNfcHJldj1zeXNjb25mZGlyIDs7DQogIC1zeXNjb25mZGlyPSogfCAtLXN5c2Nv bmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcDQog IHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikN CiAgICBzeXNjb25mZGlyPSIkYWNfb3B0YXJnIiA7Ow0KDQogIC10YXJnZXQgfCAtLXRhcmdldCB8 IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpDQogICAgYWNfcHJldj10YXJn ZXQgOzsNCiAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwg LS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQ0KICAgIHRhcmdldD0iJGFjX29wdGFyZyIgOzsNCg0K ICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJi KQ0KICAgIHZlcmJvc2U9eWVzIDs7DQoNCiAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNp byB8IC0tdmVyc2kgfCAtLXZlcnMpDQogICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBh dXRvY29uZiB2ZXJzaW9uIDIuMTMiDQogICAgZXhpdCAwIDs7DQoNCiAgLXdpdGgtKiB8IC0td2l0 aC0qKQ0KICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRoLS8v JyAtZSAncy89LiovLydgDQogICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNo ZWxsIHZhcmlhYmxlIG5hbWVzLg0KICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBz ZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbg0KICAgICAgeyBlY2hvICJjb25maWd1cmU6 IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsg fQ0KICAgIGZpDQogICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9n J2ANCiAgICBjYXNlICIkYWNfb3B0aW9uIiBpbg0KICAgICAgKj0qKSA7Ow0KICAgICAgKikgYWNf b3B0YXJnPXllcyA7Ow0KICAgIGVzYWMNCiAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09JyRh Y19vcHRhcmcnIiA7Ow0KDQogIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikNCiAgICBhY19wYWNr YWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aG91dC0vLydgDQogICAgIyBSZWpl Y3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLg0KICAgIGlm IHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1hLXpBLVowLTlfXS8vZydgIjsg dGhlbg0KICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxp ZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQ0KICAgIGZpDQogICAgYWNfcGFja2FnZT1g ZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2ANCiAgICBldmFsICJ3aXRoXyR7YWNfcGFj a2FnZX09bm8iIDs7DQoNCiAgLS14KQ0KICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4NCiAg ICB3aXRoX3g9eWVzIDs7DQoNCiAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5j bHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXA0KICB8IC0teC1pbmNsIHwgLS14LWluYyB8 IC0teC1pbiB8IC0teC1pKQ0KICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7Ow0KICAteC1pbmNsdWRl cz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14 LWluY2x1PSogXA0KICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1p PSopDQogICAgeF9pbmNsdWRlcz0iJGFjX29wdGFyZyIgOzsNCg0KICAteC1saWJyYXJpZXMgfCAt LXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXA0KICB8IC0teC1saWJy YXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkNCiAg ICBhY19wcmV2PXhfbGlicmFyaWVzIDs7DQogIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmll cz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwNCiAgfCAtLXgtbGlicmFyPSog fCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1s PSopDQogICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7DQoNCiAgLSopIHsgZWNobyAiY29u ZmlndXJlOiBlcnJvcjogJGFjX29wdGlvbjogaW52YWxpZCBvcHRpb247IHVzZSAtLWhlbHAgdG8g c2hvdyB1c2FnZSIgMT4mMjsgZXhpdCAxOyB9DQogICAgOzsNCg0KICAqKQ0KICAgIGlmIHRlc3Qg LW4gImBlY2hvICRhY19vcHRpb258IHNlZCAncy9bLWEtejAtOS5dLy9nJ2AiOyB0aGVuDQogICAg ICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6ICRhY19vcHRpb246IGludmFsaWQgaG9zdCB0eXBl IiAxPiYyDQogICAgZmkNCiAgICBpZiB0ZXN0ICJ4JG5vbm9wdCIgIT0geE5PTkU7IHRoZW4NCiAg ICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG9ubHkgY29uZmlndXJlIGZvciBvbmUg aG9zdCBhbmQgb25lIHRhcmdldCBhdCBhIHRpbWUiIDE+JjI7IGV4aXQgMTsgfQ0KICAgIGZpDQog ICAgbm9ub3B0PSIkYWNfb3B0aW9uIg0KICAgIDs7DQoNCiAgZXNhYw0KZG9uZQ0KDQppZiB0ZXN0 IC1uICIkYWNfcHJldiI7IHRoZW4NCiAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBtaXNzaW5n IGFyZ3VtZW50IHRvIC0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYCIgMT4mMjsgZXhp dCAxOyB9DQpmaQ0KDQp0cmFwICdybSAtZnIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb3JlIGNvcmUu KiAqLmNvcmUgJGFjX2NsZWFuX2ZpbGVzOyBleGl0IDEnIDEgMiAxNQ0KDQojIEZpbGUgZGVzY3Jp cHRvciB1c2FnZToNCiMgMCBzdGFuZGFyZCBpbnB1dA0KIyAxIGZpbGUgY3JlYXRpb24NCiMgMiBl cnJvcnMgYW5kIHdhcm5pbmdzDQojIDMgc29tZSBzeXN0ZW1zIG1heSBvcGVuIGl0IHRvIC9kZXYv dHR5DQojIDQgdXNlZCBvbiB0aGUgS3Vib3RhIFRpdGFuDQojIDYgY2hlY2tpbmcgZm9yLi4uIG1l c3NhZ2VzIGFuZCByZXN1bHRzDQojIDUgY29tcGlsZXIgbWVzc2FnZXMgc2F2ZWQgaW4gY29uZmln LmxvZw0KaWYgdGVzdCAiJHNpbGVudCIgPSB5ZXM7IHRoZW4NCiAgZXhlYyA2Pi9kZXYvbnVsbA0K ZWxzZQ0KICBleGVjIDY+JjENCmZpDQpleGVjIDU+Li9jb25maWcubG9nDQoNCmVjaG8gIlwNClRo aXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxl DQpydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMg YSBtaXN0YWtlLg0KIiAxPiY1DQoNCiMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJl Y3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLg0KIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNv bnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMuDQphY19jb25maWd1cmVfYXJncz0NCmZvciBh Y19hcmcNCmRvDQogIGNhc2UgIiRhY19hcmciIGluDQogIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0 ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcDQogIHwgLS1uby1jciB8IC0t bm8tYykgOzsNCiAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNp byB8IC0tbm8tcmVjdXJzaSBcDQogIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1y ZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKSA7Ow0KICAqIiAiKnwqIgkiKnwqW1xb XF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP10qKQ0KICBhY19jb25maWd1cmVfYXJn cz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsNCiAgKikgYWNfY29uZmlndXJlX2Fy Z3M9IiRhY19jb25maWd1cmVfYXJncyAkYWNfYXJnIiA7Ow0KICBlc2FjDQpkb25lDQoNCiMgTkxT IG51aXNhbmNlcy4NCiMgT25seSBzZXQgdGhlc2UgdG8gQyBpZiBhbHJlYWR5IHNldC4gIFRoZXNl IG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkNCiMgYmVjYXVzZSBub3QgYWxsIHN5c3Rl bXMgdW5kZXJzdGFuZCBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLg0KIyBGaXhpbmcgTENfTUVT U0FHRVMgcHJldmVudHMgU29sYXJpcyBzaCBmcm9tIHRyYW5zbGF0aW5nIHZhciB2YWx1ZXMgaW4g YHNldCchDQojIE5vbi1DIExDX0NUWVBFIHZhbHVlcyBicmVhayB0aGUgY3R5cGUgY2hlY2suDQpp ZiB0ZXN0ICIke0xBTkcrc2V0fSIgICA9IHNldDsgdGhlbiBMQU5HPUM7ICAgZXhwb3J0IExBTkc7 ICAgZmkNCmlmIHRlc3QgIiR7TENfQUxMK3NldH0iID0gc2V0OyB0aGVuIExDX0FMTD1DOyBleHBv cnQgTENfQUxMOyBmaQ0KaWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBM Q19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpDQppZiB0ZXN0ICIke0xDX0NUWVBF K3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAg ZmkNCg0KIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0 aGF0IERFRlMgY2FuIGV4Y2VlZC4NCnJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMuaA0KIyBBSVgg Y3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBs ZWFzdCBhIG5ld2xpbmUuDQplY2hvID4gY29uZmRlZnMuaA0KDQojIEEgZmlsZW5hbWUgdW5pcXVl IHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0DQojIGNvbmZp Z3VyZSBpcyBpbiwgd2hpY2ggd2UgY2FuIGxvb2sgZm9yIHRvIGZpbmQgb3V0IGlmIHNyY2RpciBp cyBjb3JyZWN0Lg0KYWNfdW5pcXVlX2ZpbGU9bWdpbml0L21naW5pdC5jDQoNCiMgRmluZCB0aGUg c291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4NCmlmIHRlc3QgLXog IiRzcmNkaXIiOyB0aGVuDQogIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzDQogICMgVHJ5IHRoZSBk aXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50Lg0KICBhY19w cm9nPSQwDQogIGFjX2NvbmZkaXI9YGVjaG8gJGFjX3Byb2d8c2VkICdzJS9bXi9dW14vXSokJSUn YA0KICB0ZXN0ICJ4JGFjX2NvbmZkaXIiID0gIngkYWNfcHJvZyIgJiYgYWNfY29uZmRpcj0uDQog IHNyY2Rpcj0kYWNfY29uZmRpcg0KICBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2Zp bGU7IHRoZW4NCiAgICBzcmNkaXI9Li4NCiAgZmkNCmVsc2UNCiAgYWNfc3JjZGlyX2RlZmF1bHRl ZD1ubw0KZmkNCmlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbg0KICBp ZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4NCiAgICB7IGVjaG8gImNv bmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgZmluZCBzb3VyY2VzIGluICRhY19jb25mZGlyIG9yIC4u IiAxPiYyOyBleGl0IDE7IH0NCiAgZWxzZQ0KICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjog Y2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJHNyY2RpciIgMT4mMjsgZXhpdCAxOyB9DQogIGZpDQpm aQ0Kc3JjZGlyPWBlY2hvICIke3NyY2Rpcn0iIHwgc2VkICdzJVwoW14vXVwpLyokJVwxJSdgDQoN CiMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVj dGVkIG9uZXMuDQppZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuDQogIGlmIHRlc3QgIngk cHJlZml4IiAhPSB4Tk9ORTsgdGhlbg0KICAgIENPTkZJR19TSVRFPSIkcHJlZml4L3NoYXJlL2Nv bmZpZy5zaXRlICRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIg0KICBlbHNlDQogICAgQ09ORklHX1NJ VEU9IiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkYWNfZGVmYXVsdF9wcmVm aXgvZXRjL2NvbmZpZy5zaXRlIg0KICBmaQ0KZmkNCmZvciBhY19zaXRlX2ZpbGUgaW4gJENPTkZJ R19TSVRFOyBkbw0KICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbg0KICAgIGVjaG8g ImxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSINCiAgICAuICIkYWNfc2l0ZV9maWxl Ig0KICBmaQ0KZG9uZQ0KDQppZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4NCiAgZWNobyAi bG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSINCiAgLiAkY2FjaGVfZmlsZQ0KZWxzZQ0KICBlY2hv ICJjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSINCiAgPiAkY2FjaGVfZmlsZQ0KZmkNCg0KYWNf ZXh0PWMNCiMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJl IG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4NCmFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnDQphY19jb21w aWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUn DQphY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBG TEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnDQpjcm9zc19jb21waWxp bmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MNCg0KYWNfZXhlZXh0PQ0KYWNfb2JqZXh0PW8NCmlmIChl Y2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzKSB8IGdyZXAgYyA+L2Rldi9udWxsOyB0aGVuDQog ICMgU3RhcmRlbnQgVmlzdHJhIFNWUjQgZ3JlcCBsYWNrcyAtZSwgc2F5cyBnaGF6aUBjYWlwLnJ1 dGdlcnMuZWR1Lg0KICBpZiAoZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzKSB8IHNlZCBzLy1u L3huLyB8IGdyZXAgeG4gPi9kZXYvbnVsbDsgdGhlbg0KICAgIGFjX249IGFjX2M9Jw0KJyBhY190 PScJJw0KICBlbHNlDQogICAgYWNfbj0tbiBhY19jPSBhY190PQ0KICBmaQ0KZWxzZQ0KICBhY19u PSBhY19jPSdcYycgYWNfdD0NCmZpDQoNCg0KDQphY19hdXhfZGlyPQ0KZm9yIGFjX2RpciBpbiAk c3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLjsgZG8NCiAgaWYgdGVzdCAtZiAkYWNfZGly L2luc3RhbGwtc2g7IHRoZW4NCiAgICBhY19hdXhfZGlyPSRhY19kaXINCiAgICBhY19pbnN0YWxs X3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIg0KICAgIGJyZWFrDQogIGVsaWYgdGVzdCAt ZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4NCiAgICBhY19hdXhfZGlyPSRhY19kaXINCiAgICBh Y19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIg0KICAgIGJyZWFrDQogIGZp DQpkb25lDQppZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4NCiAgeyBlY2hvICJjb25maWd1 cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNk aXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiAxPiYyOyBleGl0IDE7IH0NCmZpDQphY19jb25m aWdfZ3Vlc3M9JGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzDQphY19jb25maWdfc3ViPSRhY19hdXhf ZGlyL2NvbmZpZy5zdWINCmFjX2NvbmZpZ3VyZT0kYWNfYXV4X2Rpci9jb25maWd1cmUgIyBUaGlz IHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLg0KDQoNCiMgRG8gc29tZSBlcnJvciBjaGVja2lu ZyBhbmQgZGVmYXVsdGluZyBmb3IgdGhlIGhvc3QgYW5kIHRhcmdldCB0eXBlLg0KIyBUaGUgaW5w dXRzIGFyZToNCiMgICAgY29uZmlndXJlIC0taG9zdD1IT1NUIC0tdGFyZ2V0PVRBUkdFVCAtLWJ1 aWxkPUJVSUxEIE5PTk9QVA0KIw0KIyBUaGUgcnVsZXMgYXJlOg0KIyAxLiBZb3UgYXJlIG5vdCBh bGxvd2VkIHRvIHNwZWNpZnkgLS1ob3N0LCAtLXRhcmdldCwgYW5kIG5vbm9wdCBhdCB0aGUNCiMg ICAgc2FtZSB0aW1lLg0KIyAyLiBIb3N0IGRlZmF1bHRzIHRvIG5vbm9wdC4NCiMgMy4gSWYgbm9u b3B0IGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gaG9zdCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBo b3N0LA0KIyAgICBhcyBkZXRlcm1pbmVkIGJ5IGNvbmZpZy5ndWVzcy4NCiMgNC4gVGFyZ2V0IGFu ZCBidWlsZCBkZWZhdWx0IHRvIG5vbm9wdC4NCiMgNS4gSWYgbm9ub3B0IGlzIG5vdCBzcGVjaWZp ZWQsIHRoZW4gdGFyZ2V0IGFuZCBidWlsZCBkZWZhdWx0IHRvIGhvc3QuDQoNCiMgVGhlIGFsaWFz ZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4NCiMg d2lsbCBnZXQgY2Fub25pY2FsaXplZC4NCmNhc2UgJGhvc3QtLS0kdGFyZ2V0LS0tJG5vbm9wdCBp bg0KTk9ORS0tLSotLS0qIHwgKi0tLU5PTkUtLS0qIHwgKi0tLSotLS1OT05FKSA7Ow0KKikgeyBl Y2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gb25seSBjb25maWd1cmUgZm9yIG9uZSBob3N0IGFu ZCBvbmUgdGFyZ2V0IGF0IGEgdGltZSIgMT4mMjsgZXhpdCAxOyB9IDs7DQplc2FjDQoNCg0KIyBN YWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLg0KaWYgJHtDT05GSUdfU0hFTEwtL2Jpbi9z aH0gJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KZWxzZSB7IGVj aG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuICRhY19jb25maWdfc3ViIiAxPiYyOyBl eGl0IDE7IH0NCmZpDQoNCmVjaG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4u LiAkYWNfYyIgMT4mNg0KZWNobyAiY29uZmlndXJlOjU3MzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0g dHlwZSIgPiY1DQoNCmhvc3RfYWxpYXM9JGhvc3QNCmNhc2UgIiRob3N0X2FsaWFzIiBpbg0KTk9O RSkNCiAgY2FzZSAkbm9ub3B0IGluDQogIE5PTkUpDQogICAgaWYgaG9zdF9hbGlhcz1gJHtDT05G SUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19ndWVzc2A7IHRoZW4gOg0KICAgIGVsc2UgeyBl Y2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGd1ZXNzIGhvc3QgdHlwZTsgeW91IG11c3Qg c3BlY2lmeSBvbmUiIDE+JjI7IGV4aXQgMTsgfQ0KICAgIGZpIDs7DQogICopIGhvc3RfYWxpYXM9 JG5vbm9wdCA7Ow0KICBlc2FjIDs7DQplc2FjDQoNCmhvc3Q9YCR7Q09ORklHX1NIRUxMLS9iaW4v c2h9ICRhY19jb25maWdfc3ViICRob3N0X2FsaWFzYA0KaG9zdF9jcHU9YGVjaG8gJGhvc3QgfCBz ZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYA0KaG9zdF92ZW5kb3I9YGVj aG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYA0KaG9z dF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wz LydgDQplY2hvICIkYWNfdCIiJGhvc3QiIDE+JjYNCg0KZWNobyAkYWNfbiAiY2hlY2tpbmcgdGFy Z2V0IHN5c3RlbSB0eXBlIiIuLi4gJGFjX2MiIDE+JjYNCmVjaG8gImNvbmZpZ3VyZTo1OTQ6IGNo ZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1DQoNCnRhcmdldF9hbGlhcz0kdGFyZ2V0DQpj YXNlICIkdGFyZ2V0X2FsaWFzIiBpbg0KTk9ORSkNCiAgY2FzZSAkbm9ub3B0IGluDQogIE5PTkUp IHRhcmdldF9hbGlhcz0kaG9zdF9hbGlhcyA7Ow0KICAqKSB0YXJnZXRfYWxpYXM9JG5vbm9wdCA7 Ow0KICBlc2FjIDs7DQplc2FjDQoNCnRhcmdldD1gJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFj X2NvbmZpZ19zdWIgJHRhcmdldF9hbGlhc2ANCnRhcmdldF9jcHU9YGVjaG8gJHRhcmdldCB8IHNl ZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgDQp0YXJnZXRfdmVuZG9yPWBl Y2hvICR0YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYA0K dGFyZ2V0X29zPWBlY2hvICR0YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCgu KlwpJC9cMy8nYA0KZWNobyAiJGFjX3QiIiR0YXJnZXQiIDE+JjYNCg0KZWNobyAkYWNfbiAiY2hl Y2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNg0KZWNobyAiY29uZmlndXJl OjYxMjogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQ0KDQpidWlsZF9hbGlhcz0kYnVp bGQNCmNhc2UgIiRidWlsZF9hbGlhcyIgaW4NCk5PTkUpDQogIGNhc2UgJG5vbm9wdCBpbg0KICBO T05FKSBidWlsZF9hbGlhcz0kaG9zdF9hbGlhcyA7Ow0KICAqKSBidWlsZF9hbGlhcz0kbm9ub3B0 IDs7DQogIGVzYWMgOzsNCmVzYWMNCg0KYnVpbGQ9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRh Y19jb25maWdfc3ViICRidWlsZF9hbGlhc2ANCmJ1aWxkX2NwdT1gZWNobyAkYnVpbGQgfCBzZWQg J3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYA0KYnVpbGRfdmVuZG9yPWBlY2hv ICRidWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgDQpidWls ZF9vcz1gZWNobyAkYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9c My8nYA0KZWNobyAiJGFjX3QiIiRidWlsZCIgMT4mNg0KDQp0ZXN0ICIkaG9zdF9hbGlhcyIgIT0g IiR0YXJnZXRfYWxpYXMiICYmDQogIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZp eCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwNCiAgICBOT05FTk9ORXMseCx4LCAmJg0KICBw cm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tDQoNCg0KIyBNYWtlIHN1cmUgd2UgY2FuIHJ1 biBjb25maWcuc3ViLg0KaWYgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19zdWIg c3VuNCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJy b3I6IGNhbiBub3QgcnVuICRhY19jb25maWdfc3ViIiAxPiYyOyBleGl0IDE7IH0NCmZpDQoNCmVj aG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNg0KZWNo byAiY29uZmlndXJlOjY0MTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1DQoNCmhvc3Rf YWxpYXM9JGhvc3QNCmNhc2UgIiRob3N0X2FsaWFzIiBpbg0KTk9ORSkNCiAgY2FzZSAkbm9ub3B0 IGluDQogIE5PTkUpDQogICAgaWYgaG9zdF9hbGlhcz1gJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0g JGFjX2NvbmZpZ19ndWVzc2A7IHRoZW4gOg0KICAgIGVsc2UgeyBlY2hvICJjb25maWd1cmU6IGVy cm9yOiBjYW4gbm90IGd1ZXNzIGhvc3QgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiIDE+JjI7 IGV4aXQgMTsgfQ0KICAgIGZpIDs7DQogICopIGhvc3RfYWxpYXM9JG5vbm9wdCA7Ow0KICBlc2Fj IDs7DQplc2FjDQoNCmhvc3Q9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfc3Vi ICRob3N0X2FsaWFzYA0KaG9zdF9jcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1c KFteLV0qXCktXCguKlwpJC9cMS8nYA0KaG9zdF92ZW5kb3I9YGVjaG8gJGhvc3QgfCBzZWQgJ3Mv XlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYA0KaG9zdF9vcz1gZWNobyAkaG9zdCB8 IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgDQplY2hvICIkYWNfdCIi JGhvc3QiIDE+JjYNCg0KDQplY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtl fSBzZXRzIFwke01BS0V9IiIuLi4gJGFjX2MiIDE+JjYNCmVjaG8gImNvbmZpZ3VyZTo2NjM6IGNo ZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0iID4mNQ0Kc2V0IGR1bW15 ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5JS4vKy0lX19wXyUnYA0K aWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3Nl dCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuDQogIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAx PiY2DQplbHNlDQogIGNhdCA+IGNvbmZ0ZXN0bWFrZSA8PFxFT0YNCmFsbDoNCglAZWNobyAnYWNf bWFrZXRlbXA9IiR7TUFLRX0iJw0KRU9GDQojIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1h a2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4NCmV2YWwgYCR7TUFL RS1tYWtlfSAtZiBjb25mdGVzdG1ha2UgMj4vZGV2L251bGwgfCBncmVwIHRlbXA9YA0KaWYgdGVz dCAtbiAiJGFjX21ha2V0ZW1wIjsgdGhlbg0KICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21h a2V9X3NldD15ZXMNCmVsc2UNCiAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9 bm8NCmZpDQpybSAtZiBjb25mdGVzdG1ha2UNCmZpDQppZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRh Y19jdl9wcm9nX21ha2VfJyR7YWNfbWFrZX1fc2V0YFwiID0geWVzIjsgdGhlbg0KICBlY2hvICIk YWNfdCIieWVzIiAxPiY2DQogIFNFVF9NQUtFPQ0KZWxzZQ0KICBlY2hvICIkYWNfdCIibm8iIDE+ JjYNCiAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9Ig0KZmkNCg0KIyBFeHRyYWN0IHRoZSBm aXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdz Lg0Kc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMg0KZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRh Y193b3JkIiIuLi4gJGFjX2MiIDE+JjYNCmVjaG8gImNvbmZpZ3VyZTo2OTI6IGNoZWNraW5nIGZv ciAkYWNfd29yZCIgPiY1DQppZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19D Qycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuDQogIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAx PiY2DQplbHNlDQogIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4NCiAgYWNfY3ZfcHJvZ19DQz0iJEND IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4NCmVsc2UNCiAgSUZTPSIke0lGUz0g CX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiINCiAgYWNfZHVtbXk9IiRQQVRIIg0KICBm b3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8NCiAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19k aXI9Lg0KICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbg0KICAgICAgYWNfY3Zf cHJvZ19DQz0iZ2NjIg0KICAgICAgYnJlYWsNCiAgICBmaQ0KICBkb25lDQogIElGUz0iJGFjX3Nh dmVfaWZzIg0KZmkNCmZpDQpDQz0iJGFjX2N2X3Byb2dfQ0MiDQppZiB0ZXN0IC1uICIkQ0MiOyB0 aGVuDQogIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYNCmVsc2UNCiAgZWNobyAiJGFjX3QiIm5vIiAx PiY2DQpmaQ0KDQppZiB0ZXN0IC16ICIkQ0MiOyB0aGVuDQogICMgRXh0cmFjdCB0aGUgZmlyc3Qg d29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0Kc2V0 IGR1bW15IGNjOyBhY193b3JkPSQyDQplY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQi Ii4uLiAkYWNfYyIgMT4mNg0KZWNobyAiY29uZmlndXJlOjcyMjogY2hlY2tpbmcgZm9yICRhY193 b3JkIiA+JjUNCmlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9 J2BcIiA9IHNldCI7IHRoZW4NCiAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCmVs c2UNCiAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbg0KICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0 IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lg0KZWxzZQ0KICBJRlM9IiR7SUZTPSAJfSI7IGFj X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6Ig0KICBhY19wcm9nX3JlamVjdGVkPW5vDQogIGFjX2R1 bW15PSIkUEFUSCINCiAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvDQogICAgdGVzdCAteiAi JGFjX2RpciIgJiYgYWNfZGlyPS4NCiAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRo ZW4NCiAgICAgIGlmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhl bg0KICAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcw0KCWNvbnRpbnVlDQogICAgICBmaQ0KICAg ICAgYWNfY3ZfcHJvZ19DQz0iY2MiDQogICAgICBicmVhaw0KICAgIGZpDQogIGRvbmUNCiAgSUZT PSIkYWNfc2F2ZV9pZnMiDQppZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuDQog ICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVz ZSBpdC4NCiAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDDQogIHNoaWZ0DQogIGlmIHRlc3QgJCMg LWd0IDA7IHRoZW4NCiAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhl IGJvZ3VzIG9uZS4NCiAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28g dGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuDQogICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVz dCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuDQogICAgc2hpZnQNCiAgICBz ZXQgZHVtbXkgIiRhY19kaXIvJGFjX3dvcmQiICIkQCINCiAgICBzaGlmdA0KICAgIGFjX2N2X3By b2dfQ0M9IiRAIg0KICBmaQ0KZmkNCmZpDQpmaQ0KQ0M9IiRhY19jdl9wcm9nX0NDIg0KaWYgdGVz dCAtbiAiJENDIjsgdGhlbg0KICBlY2hvICIkYWNfdCIiJENDIiAxPiY2DQplbHNlDQogIGVjaG8g IiRhY190IiJubyIgMT4mNg0KZmkNCg0KICBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuDQogICAgY2Fz ZSAiYHVuYW1lIC1zYCIgaW4NCiAgICAqd2luMzIqIHwgKldJTjMyKikNCiAgICAgICMgRXh0cmFj dCB0aGUgZmlyc3Qgd29yZCBvZiAiY2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0 aCBhcmdzLg0Kc2V0IGR1bW15IGNsOyBhY193b3JkPSQyDQplY2hvICRhY19uICJjaGVja2luZyBm b3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNg0KZWNobyAiY29uZmlndXJlOjc3MzogY2hlY2tp bmcgZm9yICRhY193b3JkIiA+JjUNCmlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9w cm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFj X2MiIDE+JjYNCmVsc2UNCiAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbg0KICBhY19jdl9wcm9nX0ND PSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lg0KZWxzZQ0KICBJRlM9IiR7 SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6Ig0KICBhY19kdW1teT0iJFBBVEgi DQogIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbw0KICAgIHRlc3QgLXogIiRhY19kaXIiICYm IGFjX2Rpcj0uDQogICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuDQogICAgICBh Y19jdl9wcm9nX0NDPSJjbCINCiAgICAgIGJyZWFrDQogICAgZmkNCiAgZG9uZQ0KICBJRlM9IiRh Y19zYXZlX2lmcyINCmZpDQpmaQ0KQ0M9IiRhY19jdl9wcm9nX0NDIg0KaWYgdGVzdCAtbiAiJEND IjsgdGhlbg0KICBlY2hvICIkYWNfdCIiJENDIiAxPiY2DQplbHNlDQogIGVjaG8gIiRhY190IiJu byIgMT4mNg0KZmkNCiA7Ow0KICAgIGVzYWMNCiAgZmkNCiAgdGVzdCAteiAiJENDIiAmJiB7IGVj aG8gImNvbmZpZ3VyZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiAx PiYyOyBleGl0IDE7IH0NCmZpDQoNCmVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMg Y29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSB3b3JrcyIiLi4uICRhY19jIiAxPiY2DQpl Y2hvICJjb25maWd1cmU6ODA1OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0Mg JENGTEFHUyAkTERGTEFHUykgd29ya3MiID4mNQ0KDQphY19leHQ9Yw0KIyBDRkxBR1MgaXMgbm90 IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25z Lg0KYWNfY3BwPSckQ1BQICRDUFBGTEFHUycNCmFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxB R1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScNCmFjX2xpbms9JyR7Q0MtY2N9IC1v IGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0 LiRhY19leHQgJExJQlMgMT4mNScNCmNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9z cw0KDQpjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVPRg0KDQojbGluZSA4MTYgImNvbmZpZ3Vy ZSINCiNpbmNsdWRlICJjb25mZGVmcy5oIg0KDQptYWluKCl7cmV0dXJuKDApO30NCkVPRg0KaWYg eyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4MjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFj X2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbg0KICBh Y19jdl9wcm9nX2NjX3dvcmtzPXllcw0KICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJv Z3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuDQogIGlmICguL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9 bm8NCiAgZWxzZQ0KICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9eWVzDQogIGZpDQplbHNlDQogIGVj aG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1DQogIGNhdCBjb25mdGVzdC4k YWNfZXh0ID4mNQ0KICBhY19jdl9wcm9nX2NjX3dvcmtzPW5vDQpmaQ0Kcm0gLWZyIGNvbmZ0ZXN0 Kg0KYWNfZXh0PWMNCiMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0 Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4NCmFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnDQph Y19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0 IDE+JjUnDQphY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdT ICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnDQpjcm9zc19j b21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MNCg0KZWNobyAiJGFjX3QiIiRhY19jdl9wcm9n X2NjX3dvcmtzIiAxPiY2DQppZiB0ZXN0ICRhY19jdl9wcm9nX2NjX3dvcmtzID0gbm87IHRoZW4N CiAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlv biBwcm9ibGVtOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYyOyBl eGl0IDE7IH0NCmZpDQplY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVy ICgkQ0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIiLi4uICRhY19jIiAx PiY2DQplY2hvICJjb25maWd1cmU6ODQ3OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVy ICgkQ0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIgPiY1DQplY2hvICIk YWNfdCIiJGFjX2N2X3Byb2dfY2NfY3Jvc3MiIDE+JjYNCmNyb3NzX2NvbXBpbGluZz0kYWNfY3Zf cHJvZ19jY19jcm9zcw0KDQplY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2lu ZyBHTlUgQyIiLi4uICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6ODUyOiBjaGVja2luZyB3 aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIgPiY1DQppZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQn J3snYWNfY3ZfcHJvZ19nY2MnK3NldH0nYFwiID0gc2V0IjsgdGhlbg0KICBlY2hvICRhY19uICIo Y2FjaGVkKSAkYWNfYyIgMT4mNg0KZWxzZQ0KICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GDQojaWZk ZWYgX19HTlVDX18NCiAgeWVzOw0KI2VuZGlmDQpFT0YNCmlmIHsgYWNfdHJ5PScke0NDLWNjfSAt RSBjb25mdGVzdC5jJzsgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4NjE6IFwiJGFjX3RyeVwiKSAx PiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9OyB9IHwgZWdyZXAgeWVzID4vZGV2L251bGwgMj4m MTsgdGhlbg0KICBhY19jdl9wcm9nX2djYz15ZXMNCmVsc2UNCiAgYWNfY3ZfcHJvZ19nY2M9bm8N CmZpDQpmaQ0KDQplY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfZ2NjIiAxPiY2DQoNCmlmIHRlc3Qg JGFjX2N2X3Byb2dfZ2NjID0geWVzOyB0aGVuDQogIEdDQz15ZXMNCmVsc2UNCiAgR0NDPQ0KZmkN Cg0KYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iDQphY19zYXZlX0NGTEFHUz0iJENGTEFH UyINCkNGTEFHUz0NCmVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0 cyAtZyIiLi4uICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6ODgwOiBjaGVja2luZyB3aGV0 aGVyICR7Q0MtY2N9IGFjY2VwdHMgLWciID4mNQ0KaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7 J2FjX2N2X3Byb2dfY2NfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuDQogIGVjaG8gJGFjX24gIihj YWNoZWQpICRhY19jIiAxPiY2DQplbHNlDQogIGVjaG8gJ3ZvaWQgZigpe30nID4gY29uZnRlc3Qu Yw0KaWYgdGVzdCAteiAiYCR7Q0MtY2N9IC1nIC1jIGNvbmZ0ZXN0LmMgMj4mMWAiOyB0aGVuDQog IGFjX2N2X3Byb2dfY2NfZz15ZXMNCmVsc2UNCiAgYWNfY3ZfcHJvZ19jY19nPW5vDQpmaQ0Kcm0g LWYgY29uZnRlc3QqDQoNCmZpDQoNCmVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2 DQppZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuDQogIENGTEFHUz0iJGFjX3Nh dmVfQ0ZMQUdTIg0KZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4NCiAgaWYg dGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4NCiAgICBDRkxBR1M9Ii1nIC1PMiINCiAgZWxzZQ0KICAg IENGTEFHUz0iLWciDQogIGZpDQplbHNlDQogIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuDQog ICAgQ0ZMQUdTPSItTzIiDQogIGVsc2UNCiAgICBDRkxBR1M9DQogIGZpDQpmaQ0KDQoNCiMgRmlu ZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIp LA0KIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUg YnJva2VuIG9yDQojIGluY29tcGF0aWJsZSB2ZXJzaW9uczoNCiMgU3lzViAvZXRjL2luc3RhbGws IC91c3Ivc2Jpbi9pbnN0YWxsDQojIFN1bk9TIC91c3IvZXRjL2luc3RhbGwNCiMgSVJJWCAvc2Jp bi9pbnN0YWxsDQojIEFJWCAvYmluL2luc3RhbGwNCiMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJz ZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnDQojIEFGUyAvdXNyL2Fmc3dz L2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MNCiMgU1ZSNCAv dXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3Vw ICJzdGFmZiINCiMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBi eSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLg0KZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgQlNE IGNvbXBhdGlibGUgaW5zdGFsbCIiLi4uICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6OTI0 OiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUNCmlmIHRlc3QgLXog IiRJTlNUQUxMIjsgdGhlbg0KaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhf aW5zdGFsbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuDQogIGVjaG8gJGFjX24gIihjYWNoZWQpICRh Y19jIiAxPiY2DQplbHNlDQogICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX0lGUz0iJElGUyI7 IElGUz0iOiINCiAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8NCiAgICAjIEFjY291bnQgZm9yIHBl b3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4NCiAgICBjYXNl ICIkYWNfZGlyLyIgaW4NCiAgICAvfC4vfC4vL3wvZXRjLyp8L3Vzci9zYmluLyp8L3Vzci9ldGMv Knwvc2Jpbi8qfC91c3IvYWZzd3MvYmluLyp8L3Vzci91Y2IvKikgOzsNCiAgICAqKQ0KICAgICAg IyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4N CiAgICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMg c3R1ZmYgYXMgcm9vdA0KICAgICAgIyBieSBkZWZhdWx0Lg0KICAgICAgZm9yIGFjX3Byb2cgaW4g Z2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbw0KICAgICAgICBpZiB0ZXN0IC1mICRhY19kaXIv JGFjX3Byb2c7IHRoZW4NCgkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmDQogICAgICAg ICAgICBncmVwIGRzcG1zZyAkYWNfZGlyLyRhY19wcm9nID4vZGV2L251bGwgMj4mMTsgdGhlbg0K CSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZl bnRpb24uDQoJICAgIDoNCgkgIGVsc2UNCgkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYWNfZGly LyRhY19wcm9nIC1jIg0KCSAgICBicmVhayAyDQoJICBmaQ0KCWZpDQogICAgICBkb25lDQogICAg ICA7Ow0KICAgIGVzYWMNCiAgZG9uZQ0KICBJRlM9IiRhY19zYXZlX0lGUyINCg0KZmkNCiAgaWYg dGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4NCiAgICBJTlNUQUxM PSIkYWNfY3ZfcGF0aF9pbnN0YWxsIg0KICBlbHNlDQogICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1 c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgV2UgZG9uJ3QgY2FjaGUgYQ0KICAgICMgcGF0aCBm b3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbA0K ICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0 b3J5IGlzDQogICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4NCiAgICBJ TlNUQUxMPSIkYWNfaW5zdGFsbF9zaCINCiAgZmkNCmZpDQplY2hvICIkYWNfdCIiJElOU1RBTEwi IDE+JjYNCg0KIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNl cyBpbiAke3Zhci12YWx9Lg0KIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMg dGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4NCnRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYm IElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScNCg0KdGVzdCAteiAiJElOU1RBTExfU0NSSVBU IiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMX1BST0dSQU19Jw0KDQp0ZXN0IC16ICIkSU5T VEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0Jw0KDQplY2hvICRh Y19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiIi4uLiAkYWNf YyIgMT4mNg0KZWNobyAiY29uZmlndXJlOjk3NzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZp cm9ubWVudCBpcyBzYW5lIiA+JjUNCiMgSnVzdCBpbiBjYXNlDQpzbGVlcCAxDQplY2hvIHRpbWVz dGFtcCA+IGNvbmZ0ZXN0ZmlsZQ0KIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0 IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncw0KIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBm aXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhDQojIHN5bWxpbms7IHNvbWUgc3lz dGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzDQojIChl ZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmlu Zw0KIyBkaXJlY3RvcnkpLg0KaWYgKA0KICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3Vy ZSBjb25mdGVzdGZpbGUgMj4gL2Rldi9udWxsYA0KICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVu DQogICAgICAjIC1MIGRpZG4ndCB3b3JrLg0KICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29u ZmlndXJlIGNvbmZ0ZXN0ZmlsZWANCiAgIGZpDQogICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rp ci9jb25maWd1cmUgY29uZnRlc3RmaWxlIiBcDQogICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29u ZnRlc3RmaWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbg0KDQogICAgICAjIElmIG5laXRoZXIg bWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuDQogICAg ICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0 cyBhDQogICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMg aGFzIGFjdHVhbGx5DQogICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3Qg YmUgY29uc2lkZXJlZCAic2FuZSIuDQogICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGxz IC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4NCmFs aWFzIGluIHlvdXIgZW52aXJvbm1lbnQiIDE+JjI7IGV4aXQgMTsgfQ0KICAgZmkNCg0KICAgdGVz dCAiJDIiID0gY29uZnRlc3RmaWxlDQogICApDQp0aGVuDQogICAjIE9rLg0KICAgOg0KZWxzZQ0K ICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIg dGhhbiBkaXN0cmlidXRlZCBmaWxlcyENCkNoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiAxPiYyOyBl eGl0IDE7IH0NCmZpDQpybSAtZiBjb25mdGVzdCoNCmVjaG8gIiRhY190IiJ5ZXMiIDE+JjYNCmlm IHRlc3QgIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IHMseCx4LDsgdGhlbg0KICBwcm9ncmFt X3RyYW5zZm9ybV9uYW1lPQ0KZWxzZQ0KICAjIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdo dCBpbnRlcnByZXQgYmFja3NsYXNoZXMuDQogIGNhdCA8PFxFT0ZfU0VEID4gY29uZnRlc3RzZWQN CnMsXFwsXFxcXCxnOyBzLFwkLCQkLGcNCkVPRl9TRUQNCiAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFt ZT0iYGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWV8c2VkIC1mIGNvbmZ0ZXN0c2VkYCINCiAg cm0gLWYgY29uZnRlc3RzZWQNCmZpDQp0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYN CiAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyxeLCR7cHJvZ3JhbV9wcmVmaXh9LDsgJHByb2dy YW1fdHJhbnNmb3JtX25hbWUiDQojIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4N CnRlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJg0KICBwcm9ncmFtX3RyYW5zZm9ybV9u YW1lPSJzLFwkXCQsJHtwcm9ncmFtX3N1ZmZpeH0sOyAkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIN Cg0KIyBzZWQgd2l0aCBubyBmaWxlIGFyZ3MgcmVxdWlyZXMgYSBwcm9ncmFtLg0KdGVzdCAiJHBy b2dyYW1fdHJhbnNmb3JtX25hbWUiID0gIiIgJiYgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyx4 LHgsIg0KDQoNClBBQ0tBR0U9bWRlDQoNClZFUlNJT049MS4yLjMNCg0KaWYgdGVzdCAiYGNkICRz cmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIiAmJiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1 czsgdGhlbg0KICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxy ZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdCIgMT4mMjsg ZXhpdCAxOyB9DQpmaQ0KY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YNCiNkZWZpbmUgUEFDS0FHRSAi JFBBQ0tBR0UiDQpFT0YNCg0KY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YNCiNkZWZpbmUgVkVSU0lP TiAiJFZFUlNJT04iDQpFT0YNCg0KDQoNCm1pc3NpbmdfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBw d2RgDQplY2hvICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBhY2xvY2FsIiIuLi4gJGFjX2Mi IDE+JjYNCmVjaG8gImNvbmZpZ3VyZToxMDUzOiBjaGVja2luZyBmb3Igd29ya2luZyBhY2xvY2Fs IiA+JjUNCiMgUnVuIHRlc3QgaW4gYSBzdWJzaGVsbDsgc29tZSB2ZXJzaW9ucyBvZiBzaCB3aWxs IHByaW50IGFuIGVycm9yIGlmDQojIGFuIGV4ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlm IHN0ZGVyciBpcyByZWRpcmVjdGVkLg0KIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVy IHZlcnNpb25zIG9mIGF1dG9jb25mLiAgU2lnaC4NCmlmIChhY2xvY2FsIC0tdmVyc2lvbikgPCAv ZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbg0KICAgQUNMT0NBTD1hY2xvY2FsDQogICBl Y2hvICIkYWNfdCIiZm91bmQiIDE+JjYNCmVsc2UNCiAgIEFDTE9DQUw9IiRtaXNzaW5nX2Rpci9t aXNzaW5nIGFjbG9jYWwiDQogICBlY2hvICIkYWNfdCIibWlzc2luZyIgMT4mNg0KZmkNCg0KZWNo byAkYWNfbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYXV0b2NvbmYiIi4uLiAkYWNfYyIgMT4mNg0K ZWNobyAiY29uZmlndXJlOjEwNjY6IGNoZWNraW5nIGZvciB3b3JraW5nIGF1dG9jb25mIiA+JjUN CiMgUnVuIHRlc3QgaW4gYSBzdWJzaGVsbDsgc29tZSB2ZXJzaW9ucyBvZiBzaCB3aWxsIHByaW50 IGFuIGVycm9yIGlmDQojIGFuIGV4ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlmIHN0ZGVy ciBpcyByZWRpcmVjdGVkLg0KIyBSZWRpcmVjdCBzdGRpbiB0byBwbGFjYXRlIG9sZGVyIHZlcnNp b25zIG9mIGF1dG9jb25mLiAgU2lnaC4NCmlmIChhdXRvY29uZiAtLXZlcnNpb24pIDwgL2Rldi9u dWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgIEFVVE9DT05GPWF1dG9jb25mDQogICBlY2hv ICIkYWNfdCIiZm91bmQiIDE+JjYNCmVsc2UNCiAgIEFVVE9DT05GPSIkbWlzc2luZ19kaXIvbWlz c2luZyBhdXRvY29uZiINCiAgIGVjaG8gIiRhY190IiJtaXNzaW5nIiAxPiY2DQpmaQ0KDQplY2hv ICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBhdXRvbWFrZSIiLi4uICRhY19jIiAxPiY2DQpl Y2hvICJjb25maWd1cmU6MTA3OTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYXV0b21ha2UiID4mNQ0K IyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJpbnQg YW4gZXJyb3IgaWYNCiMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3RkZXJy IGlzIHJlZGlyZWN0ZWQuDQojIFJlZGlyZWN0IHN0ZGluIHRvIHBsYWNhdGUgb2xkZXIgdmVyc2lv bnMgb2YgYXV0b2NvbmYuICBTaWdoLg0KaWYgKGF1dG9tYWtlIC0tdmVyc2lvbikgPCAvZGV2L251 bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbg0KICAgQVVUT01BS0U9YXV0b21ha2UNCiAgIGVjaG8g IiRhY190IiJmb3VuZCIgMT4mNg0KZWxzZQ0KICAgQVVUT01BS0U9IiRtaXNzaW5nX2Rpci9taXNz aW5nIGF1dG9tYWtlIg0KICAgZWNobyAiJGFjX3QiIm1pc3NpbmciIDE+JjYNCmZpDQoNCmVjaG8g JGFjX24gImNoZWNraW5nIGZvciB3b3JraW5nIGF1dG9oZWFkZXIiIi4uLiAkYWNfYyIgMT4mNg0K ZWNobyAiY29uZmlndXJlOjEwOTI6IGNoZWNraW5nIGZvciB3b3JraW5nIGF1dG9oZWFkZXIiID4m NQ0KIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJp bnQgYW4gZXJyb3IgaWYNCiMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2ZW4gaWYgc3Rk ZXJyIGlzIHJlZGlyZWN0ZWQuDQojIFJlZGlyZWN0IHN0ZGluIHRvIHBsYWNhdGUgb2xkZXIgdmVy c2lvbnMgb2YgYXV0b2NvbmYuICBTaWdoLg0KaWYgKGF1dG9oZWFkZXIgLS12ZXJzaW9uKSA8IC9k ZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuDQogICBBVVRPSEVBREVSPWF1dG9oZWFkZXIN CiAgIGVjaG8gIiRhY190IiJmb3VuZCIgMT4mNg0KZWxzZQ0KICAgQVVUT0hFQURFUj0iJG1pc3Np bmdfZGlyL21pc3NpbmcgYXV0b2hlYWRlciINCiAgIGVjaG8gIiRhY190IiJtaXNzaW5nIiAxPiY2 DQpmaQ0KDQplY2hvICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBtYWtlaW5mbyIiLi4uICRh Y19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6MTEwNTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWFr ZWluZm8iID4mNQ0KIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxsOyBzb21lIHZlcnNpb25zIG9mIHNo IHdpbGwgcHJpbnQgYW4gZXJyb3IgaWYNCiMgYW4gZXhlY3V0YWJsZSBpcyBub3QgZm91bmQsIGV2 ZW4gaWYgc3RkZXJyIGlzIHJlZGlyZWN0ZWQuDQojIFJlZGlyZWN0IHN0ZGluIHRvIHBsYWNhdGUg b2xkZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuICBTaWdoLg0KaWYgKG1ha2VpbmZvIC0tdmVyc2lv bikgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbg0KICAgTUFLRUlORk89bWFrZWlu Zm8NCiAgIGVjaG8gIiRhY190IiJmb3VuZCIgMT4mNg0KZWxzZQ0KICAgTUFLRUlORk89IiRtaXNz aW5nX2Rpci9taXNzaW5nIG1ha2VpbmZvIg0KICAgZWNobyAiJGFjX3QiIm1pc3NpbmciIDE+JjYN CmZpDQoNCg0KDQplY2hvICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBjb25zdCIiLi4uICRh Y19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6MTEyMDogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29u c3QiID4mNQ0KaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfY29uc3QnK3NldH0n YFwiID0gc2V0IjsgdGhlbg0KICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KZWxz ZQ0KICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxMTI1ICJjb25maWd1cmUi DQojaW5jbHVkZSAiY29uZmRlZnMuaCINCg0KaW50IG1haW4oKSB7DQoNCi8qIFVsdHJpeCBtaXBz IGNjIHJlamVjdHMgdGhpcy4gICovDQp0eXBlZGVmIGludCBjaGFyc2V0WzJdOyBjb25zdCBjaGFy c2V0IHg7DQovKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLw0KY2hhciBjb25zdCAq Y29uc3QgKmNjcDsNCmNoYXIgKipwOw0KLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0 aGlzLiAgKi8NCnN0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsNCnN0YXRpYyBzdHJ1Y3QgcG9pbnQg Y29uc3QgemVybyA9IHswLDB9Ow0KLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLg0K ICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9t IGFub3RoZXIgaW4gYW4gYXJtDQogICBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQg aXMgbm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbiAqLw0KY29uc3QgY2hhciAqZyA9ICJzdHJpbmci Ow0KY2NwID0gJmcgKyAoZyA/IGctZyA6IDApOw0KLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVz ZS4gKi8NCisrY2NwOw0KcCA9IChjaGFyKiopIGNjcDsNCmNjcCA9IChjaGFyIGNvbnN0ICpjb25z dCAqKSBwOw0KeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8NCiAgY2hhciAqdDsN CiAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsNCg0K ICAqdCsrID0gMDsNCn0NCnsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFO U0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovDQogIGludCB4W10gPSB7MjUsIDE3fTsN CiAgY29uc3QgaW50ICpmb28gPSAmeFswXTsNCiAgKytmb287DQp9DQp7IC8qIFN1biBTQzEuMCBB TlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8NCiAgdHlw ZWRlZiBjb25zdCBpbnQgKmlwdHI7DQogIGlwdHIgcCA9IDA7DQogICsrcDsNCn0NCnsgLyogQUlY IFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZw0KICAgICAiay5jIiwgbGluZSAyLjI3 OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovDQog IHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07DQogIHN0cnVjdCBzICpiOyBi LT5qID0gNTsNCn0NCnsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlz ICovDQogIGNvbnN0IGludCBmb28gPSAxMDsNCn0NCg0KOyByZXR1cm4gMDsgfQ0KRU9GDQppZiB7 IChldmFsIGVjaG8gY29uZmlndXJlOjExNzQ6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwg JGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4NCiAgcm0gLXJmIGNvbmZ0ZXN0Kg0KICBhY19jdl9j X2NvbnN0PXllcw0KZWxzZQ0KICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoi ID4mNQ0KICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUNCiAgcm0gLXJmIGNvbmZ0ZXN0Kg0KICBh Y19jdl9jX2NvbnN0PW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQpmaQ0KDQplY2hvICIkYWNfdCIi JGFjX2N2X2NfY29uc3QiIDE+JjYNCmlmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbg0K ICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YNCiNkZWZpbmUgY29uc3QgDQpFT0YNCg0KZmkNCg0K DQplY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4u ICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6MTE5NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0 aGUgQyBwcmVwcm9jZXNzb3IiID4mNQ0KIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBh IGRpcmVjdG9yeS4NCmlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuDQog IENQUD0NCmZpDQppZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbg0KaWYgZXZhbCAidGVzdCBcImBlY2hv ICckJyd7J2FjX2N2X3Byb2dfQ1BQJytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAgZWNobyAkYWNf biAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCmVsc2UNCiAgICAjIFRoaXMgbXVzdCBiZSBpbiBkb3Vi bGUgcXVvdGVzLCBub3Qgc2luZ2xlIHF1b3RlcywgYmVjYXVzZSBDUFAgbWF5IGdldA0KICAjIHN1 YnN0aXR1dGVkIGludG8gdGhlIE1ha2VmaWxlIGFuZCAiJHtDQy1jY30iIHdpbGwgY29uZnVzZSBt YWtlLg0KICBDUFA9IiR7Q0MtY2N9IC1FIg0KICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRo ZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLA0KICAjIG5vdCBqdXN0IHRocm91 Z2ggY3BwLg0KICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxMjExICJjb25m aWd1cmUiDQojaW5jbHVkZSAiY29uZmRlZnMuaCINCiNpbmNsdWRlIDxhc3NlcnQuaD4NClN5bnRh eCBFcnJvcg0KRU9GDQphY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxs IDI+Y29uZnRlc3Qub3V0Ig0KeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjE3OiBcIiRhY190cnlc IikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQ0KYWNfZXJyPWBncmVwIC12ICdeICorJyBj b25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYA0KaWYgdGVzdCAt eiAiJGFjX2VyciI7IHRoZW4NCiAgOg0KZWxzZQ0KICBlY2hvICIkYWNfZXJyIiA+JjUNCiAgZWNo byAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUNCiAgY2F0IGNvbmZ0ZXN0LiRh Y19leHQgPiY1DQogIHJtIC1yZiBjb25mdGVzdCoNCiAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0 aW9uYWwtY3BwIg0KICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxMjI4ICJj b25maWd1cmUiDQojaW5jbHVkZSAiY29uZmRlZnMuaCINCiNpbmNsdWRlIDxhc3NlcnQuaD4NClN5 bnRheCBFcnJvcg0KRU9GDQphY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9u dWxsIDI+Y29uZnRlc3Qub3V0Ig0KeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjM0OiBcIiRhY190 cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQ0KYWNfZXJyPWBncmVwIC12ICdeICor JyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYA0KaWYgdGVz dCAteiAiJGFjX2VyciI7IHRoZW4NCiAgOg0KZWxzZQ0KICBlY2hvICIkYWNfZXJyIiA+JjUNCiAg ZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUNCiAgY2F0IGNvbmZ0ZXN0 LiRhY19leHQgPiY1DQogIHJtIC1yZiBjb25mdGVzdCoNCiAgQ1BQPSIke0NDLWNjfSAtbm9sb2dv IC1FIg0KICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxMjQ1ICJjb25maWd1 cmUiDQojaW5jbHVkZSAiY29uZmRlZnMuaCINCiNpbmNsdWRlIDxhc3NlcnQuaD4NClN5bnRheCBF cnJvcg0KRU9GDQphY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+ Y29uZnRlc3Qub3V0Ig0KeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjUxOiBcIiRhY190cnlcIikg MT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQ0KYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25m dGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYA0KaWYgdGVzdCAteiAi JGFjX2VyciI7IHRoZW4NCiAgOg0KZWxzZQ0KICBlY2hvICIkYWNfZXJyIiA+JjUNCiAgZWNobyAi Y29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUNCiAgY2F0IGNvbmZ0ZXN0LiRhY19l eHQgPiY1DQogIHJtIC1yZiBjb25mdGVzdCoNCiAgQ1BQPS9saWIvY3BwDQpmaQ0Kcm0gLWYgY29u ZnRlc3QqDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQogIGFjX2N2 X3Byb2dfQ1BQPSIkQ1BQIg0KZmkNCiAgQ1BQPSIkYWNfY3ZfcHJvZ19DUFAiDQplbHNlDQogIGFj X2N2X3Byb2dfQ1BQPSIkQ1BQIg0KZmkNCmVjaG8gIiRhY190IiIkQ1BQIiAxPiY2DQoNCmVjaG8g JGFjX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiIuLi4gJGFjX2MiIDE+JjYN CmVjaG8gImNvbmZpZ3VyZToxMjc2OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIg PiY1DQppZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0n YFwiID0gc2V0IjsgdGhlbg0KICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KZWxz ZQ0KICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxMjgxICJjb25maWd1cmUi DQojaW5jbHVkZSAiY29uZmRlZnMuaCINCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxz dGRhcmcuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDxmbG9hdC5oPg0KRU9GDQph Y190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0 Ig0KeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjg5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwg JGFjX3RyeSkgMj4mNTsgfQ0KYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBn cmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYA0KaWYgdGVzdCAteiAiJGFjX2VyciI7IHRo ZW4NCiAgcm0gLXJmIGNvbmZ0ZXN0Kg0KICBhY19jdl9oZWFkZXJfc3RkYz15ZXMNCmVsc2UNCiAg ZWNobyAiJGFjX2VyciIgPiY1DQogIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2Fz OiIgPiY1DQogIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQ0KICBybSAtcmYgY29uZnRlc3QqDQog IGFjX2N2X2hlYWRlcl9zdGRjPW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCmlmIHRlc3QgJGFj X2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuDQogICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMg bm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4NCmNhdCA+IGNvbmZ0ZXN0LiRhY19l eHQgPDxFT0YNCiNsaW5lIDEzMDYgImNvbmZpZ3VyZSINCiNpbmNsdWRlICJjb25mZGVmcy5oIg0K I2luY2x1ZGUgPHN0cmluZy5oPg0KRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNf ZXh0IikgMj4mNSB8DQogIGVncmVwICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbg0KICA6 DQplbHNlDQogIHJtIC1yZiBjb25mdGVzdCoNCiAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8NCmZpDQpy bSAtZiBjb25mdGVzdCoNCg0KZmkNCg0KaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7 IHRoZW4NCiAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250 cmFyeSB0byBBTlNJLg0KY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KI2xpbmUgMTMyNCAi Y29uZmlndXJlIg0KI2luY2x1ZGUgImNvbmZkZWZzLmgiDQojaW5jbHVkZSA8c3RkbGliLmg+DQpF T0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgZWdyZXAg ImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbg0KICA6DQplbHNlDQogIHJtIC1yZiBjb25mdGVz dCoNCiAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KZmkNCg0K aWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4NCiAgIyAvYmluL2NjIGluIEly aXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLg0K aWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4NCiAgOg0KZWxzZQ0KICBjYXQg PiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxMzQ1ICJjb25maWd1cmUiDQojaW5jbHVk ZSAiY29uZmRlZnMuaCINCiNpbmNsdWRlIDxjdHlwZS5oPg0KI2RlZmluZSBJU0xPV0VSKGMpICgn YScgPD0gKGMpICYmIChjKSA8PSAneicpDQojZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykg PyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkNCiNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEo ZikpIHx8ICghKGUpICYmIChmKSkpDQppbnQgbWFpbiAoKSB7IGludCBpOyBmb3IgKGkgPSAwOyBp IDwgMjU2OyBpKyspDQppZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpIHx8IHRvdXBw ZXIgKGkpICE9IFRPVVBQRVIgKGkpKSBleGl0KDIpOw0KZXhpdCAoMCk7IH0NCg0KRU9GDQppZiB7 IChldmFsIGVjaG8gY29uZmlndXJlOjEzNTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFj X2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25m dGVzdDsgZXhpdCkgMj4vZGV2L251bGwNCnRoZW4NCiAgOg0KZWxzZQ0KICBlY2hvICJjb25maWd1 cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQ0KICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUN CiAgcm0gLWZyIGNvbmZ0ZXN0Kg0KICBhY19jdl9oZWFkZXJfc3RkYz1ubw0KZmkNCnJtIC1mciBj b25mdGVzdCoNCmZpDQoNCmZpDQpmaQ0KDQplY2hvICIkYWNfdCIiJGFjX2N2X2hlYWRlcl9zdGRj IiAxPiY2DQppZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbg0KICBjYXQgPj4g Y29uZmRlZnMuaCA8PFxFT0YNCiNkZWZpbmUgU1REQ19IRUFERVJTIDENCkVPRg0KDQpmaQ0KDQpl Y2hvICRhY19uICJjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0 aWJsZSIiLi4uICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6MTM4MDogY2hlY2tpbmcgZm9y IHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUiID4mNQ0KaWYgZXZhbCAidGVz dCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oJytzZXR9J2BcIiA9IHNldCI7 IHRoZW4NCiAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCmVsc2UNCiAgY2F0ID4g Y29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KI2xpbmUgMTM4NSAiY29uZmlndXJlIg0KI2luY2x1ZGUg ImNvbmZkZWZzLmgiDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3dhaXQu aD4NCiNpZm5kZWYgV0VYSVRTVEFUVVMNCiNkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdF92YWwpICgo dW5zaWduZWQpKHN0YXRfdmFsKSA+PiA4KQ0KI2VuZGlmDQojaWZuZGVmIFdJRkVYSVRFRA0KI2Rl ZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkNCiNlbmRp Zg0KaW50IG1haW4oKSB7DQppbnQgczsNCndhaXQgKCZzKTsNCnMgPSBXSUZFWElURUQgKHMpID8g V0VYSVRTVEFUVVMgKHMpIDogMTsNCjsgcmV0dXJuIDA7IH0NCkVPRg0KaWYgeyAoZXZhbCBlY2hv IGNvbmZpZ3VyZToxNDAxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxl KSAyPiY1OyB9OyB0aGVuDQogIHJtIC1yZiBjb25mdGVzdCoNCiAgYWNfY3ZfaGVhZGVyX3N5c193 YWl0X2g9eWVzDQplbHNlDQogIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIg PiY1DQogIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQ0KICBybSAtcmYgY29uZnRlc3QqDQogIGFj X2N2X2hlYWRlcl9zeXNfd2FpdF9oPW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQpmaQ0KDQplY2hv ICIkYWNfdCIiJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiAxPiY2DQppZiB0ZXN0ICRhY19jdl9o ZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbg0KICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YN CiNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDENCkVPRg0KDQpmaQ0KDQplY2hvICRhY19uICJjaGVj a2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIi Li4uICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6MTQyMjogY2hlY2tpbmcgd2hldGhlciB0 aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQ0KaWYgZXZhbCAi dGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl90aW1lJytzZXR9J2BcIiA9IHNldCI7IHRo ZW4NCiAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCmVsc2UNCiAgY2F0ID4gY29u ZnRlc3QuJGFjX2V4dCA8PEVPRg0KI2xpbmUgMTQyNyAiY29uZmlndXJlIg0KI2luY2x1ZGUgImNv bmZkZWZzLmgiDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3RpbWUuaD4N CiNpbmNsdWRlIDx0aW1lLmg+DQppbnQgbWFpbigpIHsNCnN0cnVjdCB0bSAqdHA7DQo7IHJldHVy biAwOyB9DQpFT0YNCmlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQzNjogXCIkYWNfY29tcGls ZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbg0KICBybSAtcmYgY29u ZnRlc3QqDQogIGFjX2N2X2hlYWRlcl90aW1lPXllcw0KZWxzZQ0KICBlY2hvICJjb25maWd1cmU6 IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQ0KICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUNCiAg cm0gLXJmIGNvbmZ0ZXN0Kg0KICBhY19jdl9oZWFkZXJfdGltZT1ubw0KZmkNCnJtIC1mIGNvbmZ0 ZXN0Kg0KZmkNCg0KZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfdGltZSIgMT4mNg0KaWYgdGVz dCAkYWNfY3ZfaGVhZGVyX3RpbWUgPSB5ZXM7IHRoZW4NCiAgY2F0ID4+IGNvbmZkZWZzLmggPDxc RU9GDQojZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxDQpFT0YNCg0KZmkNCg0KZm9yIGFjX2hk ciBpbiBzeXMvdGltZS5oIHVuaXN0ZC5oDQpkbw0KYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBz ZWQgJ3klLi8rLSVfX3BfJSdgDQplY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4u ICRhY19jIiAxPiY2DQplY2hvICJjb25maWd1cmU6MTQ2MDogY2hlY2tpbmcgZm9yICRhY19oZHIi ID4mNQ0KaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScr c2V0fSdgXCIgPSBzZXQiOyB0aGVuDQogIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2 DQplbHNlDQogIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YNCiNsaW5lIDE0NjUgImNvbmZp Z3VyZSINCiNpbmNsdWRlICJjb25mZGVmcy5oIg0KI2luY2x1ZGUgPCRhY19oZHI+DQpFT0YNCmFj X3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQi DQp7IChldmFsIGVjaG8gY29uZmlndXJlOjE0NzA6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAk YWNfdHJ5KSAyPiY1OyB9DQphY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdy ZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgDQppZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhl bg0KICBybSAtcmYgY29uZnRlc3QqDQogIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMi DQplbHNlDQogIGVjaG8gIiRhY19lcnIiID4mNQ0KICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBw cm9ncmFtIHdhczoiID4mNQ0KICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUNCiAgcm0gLXJmIGNv bmZ0ZXN0Kg0KICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iDQpmaQ0Kcm0gLWYgY29u ZnRlc3QqDQpmaQ0KaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2Fm ZWBcIiA9IHllcyI7IHRoZW4NCiAgZWNobyAiJGFjX3QiInllcyIgMT4mNg0KICAgIGFjX3RyX2hk cj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXou Ly0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2ANCiAgY2F0ID4+IGNvbmZkZWZzLmgg PDxFT0YNCiNkZWZpbmUgJGFjX3RyX2hkciAxDQpFT0YNCiANCmVsc2UNCiAgZWNobyAiJGFjX3Qi Im5vIiAxPiY2DQpmaQ0KZG9uZQ0KDQoNCmhhdmVfbGlibWluaWd1aT1ubw0KZm9yIGFjX2hkciBp biBtaW5pZ3VpL21pbmlndWkuaA0KZG8NCmFjX3NhZmU9YGVjaG8gIiRhY19oZHIiIHwgc2VkICd5 JS4vKy0lX19wXyUnYA0KZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNf YyIgMT4mNg0KZWNobyAiY29uZmlndXJlOjE1MDI6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUN CmlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0n YFwiID0gc2V0IjsgdGhlbg0KICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KZWxz ZQ0KICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQojbGluZSAxNTA3ICJjb25maWd1cmUi DQojaW5jbHVkZSAiY29uZmRlZnMuaCINCiNpbmNsdWRlIDwkYWNfaGRyPg0KRU9GDQphY190cnk9 IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0Ig0KeyAo ZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTEyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3Ry eSkgMj4mNTsgfQ0KYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12 ICJeY29uZnRlc3QuJHthY19leHR9XCQiYA0KaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAg cm0gLXJmIGNvbmZ0ZXN0Kg0KICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIg0KZWxz ZQ0KICBlY2hvICIkYWNfZXJyIiA+JjUNCiAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3Jh bSB3YXM6IiA+JjUNCiAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1DQogIHJtIC1yZiBjb25mdGVz dCoNCiAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIg0KZmkNCnJtIC1mIGNvbmZ0ZXN0 Kg0KZmkNCmlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIg PSB5ZXMiOyB0aGVuDQogIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYNCiAgICBhY190cl9oZHI9SEFW RV9gZWNobyAkYWNfaGRyIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFC Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgDQogIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9G DQojZGVmaW5lICRhY190cl9oZHIgMQ0KRU9GDQogaGF2ZV9saWJtaW5pZ3VpPXllcw0KZWxzZQ0K ICBlY2hvICIkYWNfdCIibm8iIDE+JjYNCmZvbz1iYXINCmZpDQpkb25lDQoNCg0KDQppZiB0ZXN0 ICIkYWNfY3ZfcHJvZ19nY2MiID0gInllcyI7IHRoZW4NCiAgICBDRkxBR1M9IiRDRkxBR1MgLVdh bGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtcGlwZSINCmZpDQoNCkNGTEFHUz0iJENGTEFHUyAtRF9S RUVOVFJBTlQgLURfVEhSRUFEX1NBRkUiDQoNCkxJQlM9IiRMSUJTIC1sbWluaWd1aSINCg0KdHJh cCAnJyAxIDIgMTUNCmNhdCA+IGNvbmZjYWNoZSA8PFxFT0YNCiMgVGhpcyBmaWxlIGlzIGEgc2hl bGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQ0KIyB0ZXN0cyBy dW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJl DQojIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLiAgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhl ciBzeXN0ZW1zLg0KIyBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtl ZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuDQojDQojIEJ5IGRlZmF1bHQsIGNvbmZpZ3Vy ZSB1c2VzIC4vY29uZmlnLmNhY2hlIGFzIHRoZSBjYWNoZSBmaWxlLA0KIyBjcmVhdGluZyBpdCBp ZiBpdCBkb2VzIG5vdCBleGlzdCBhbHJlYWR5LiAgWW91IGNhbiBnaXZlIGNvbmZpZ3VyZQ0KIyB0 aGUgLS1jYWNoZS1maWxlPUZJTEUgb3B0aW9uIHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZSBmaWxl OyB0aGF0IGlzDQojIHdoYXQgY29uZmlndXJlIGRvZXMgd2hlbiBpdCBjYWxscyBjb25maWd1cmUg c2NyaXB0cyBpbg0KIyBzdWJkaXJlY3Rvcmllcywgc28gdGhleSBzaGFyZSB0aGUgY2FjaGUuDQoj IEdpdmluZyAtLWNhY2hlLWZpbGU9L2Rldi9udWxsIGRpc2FibGVzIGNhY2hpbmcsIGZvciBkZWJ1 Z2dpbmcgY29uZmlndXJlLg0KIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8g dGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQgdGhlDQojIC0tcmVjaGVjayBvcHRpb24gdG8g cmVydW4gY29uZmlndXJlLg0KIw0KRU9GDQojIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcg dGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLA0KIyBidXQgd2Uga25vdyBv ZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4N CiMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4NCiMg VWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRp cmVjdGx5LA0KIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNz IHdlIGFzc2lnbiB0byB0aGUgdmFycy4NCihzZXQpIDI+JjEgfA0KICBjYXNlIGAoYWNfc3BhY2U9 JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbg0KICAqYWNfc3BhY2U9XCAqKQ0KICAg ICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUt cXVvdGUgc3Vic3RpdHV0aW9uDQogICAgIyB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVy bnMgXFwgaW50byBcKS4NCiAgICBzZWQgLW4gXA0KICAgICAgLWUgInMvJy8nXFxcXCcnL2ciIFwN CiAgICAgIC1lICJzL15cXChbYS16QS1aMC05X10qX2N2X1thLXpBLVowLTlfXSpcXCk9XFwoLipc XCkvXFwxPVwke1xcMT0nXFwyJ30vcCINCiAgICA7Ow0KICAqKQ0KICAgICMgYHNldCcgcXVvdGVz IGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuDQog ICAgc2VkIC1uIC1lICdzL15cKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlwpPVwoLipc KS9cMT0ke1wxPVwyfS9wJw0KICAgIDs7DQogIGVzYWMgPj4gY29uZmNhY2hlDQppZiBjbXAgLXMg JGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuDQogIDoNCmVsc2UNCiAgaWYgdGVzdCAtdyAkY2Fj aGVfZmlsZTsgdGhlbg0KICAgIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIg0KICAg IGNhdCBjb25mY2FjaGUgPiAkY2FjaGVfZmlsZQ0KICBlbHNlDQogICAgZWNobyAibm90IHVwZGF0 aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiDQogIGZpDQpmaQ0Kcm0gLWYgY29uZmNh Y2hlDQoNCnRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29y ZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1DQoNCnRlc3QgIngkcHJlZml4IiA9IHhO T05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgNCiMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNf cHJlZml4Lg0KdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtw cmVmaXh9Jw0KDQojIEFueSBhc3NpZ25tZW50IHRvIFZQQVRIIGNhdXNlcyBTdW4gbWFrZSB0byBv bmx5IGV4ZWN1dGUNCiMgdGhlIGZpcnN0IHNldCBvZiBkb3VibGUtY29sb24gcnVsZXMsIHNvIHJl bW92ZSBpdCBpZiBub3QgbmVlZGVkLg0KIyBJZiB0aGVyZSBpcyBhIGNvbG9uIGluIHRoZSBwYXRo LCB3ZSBuZWVkIHRvIGtlZXAgaXQuDQppZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbg0KICBh Y192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9W146XSokL2QnDQpmaQ0KDQp0cmFwICdybSAtZiAk Q09ORklHX1NUQVRVUyBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1DQoNCiMgVHJhbnNmb3JtIGNv bmZkZWZzLmggaW50byBERUZTLg0KIyBQcm90ZWN0IGFnYWluc3Qgc2hlbGwgZXhwYW5zaW9uIHdo aWxlIGV4ZWN1dGluZyBNYWtlZmlsZSBydWxlcy4NCiMgUHJvdGVjdCBhZ2FpbnN0IE1ha2VmaWxl IG1hY3JvIGV4cGFuc2lvbi4NCmNhdCA+IGNvbmZ0ZXN0LmRlZnMgPDxcRU9GDQpzJSNkZWZpbmUg XChbQS1aYS16X11bQS1aYS16MC05X10qXCkgKlwoLipcKSUtRFwxPVwyJWcNCnMlWyAJYH4jJF4m Kigpe31cXHw7JyI8Pj9dJVxcJiVnDQpzJVxbJVxcJiVnDQpzJVxdJVxcJiVnDQpzJVwkJSQkJWcN CkVPRg0KREVGUz1gc2VkIC1mIGNvbmZ0ZXN0LmRlZnMgY29uZmRlZnMuaCB8IHRyICdcMDEyJyAn ICdgDQpybSAtZiBjb25mdGVzdC5kZWZzDQoNCg0KIyBXaXRob3V0IHRoZSAiLi8iLCBzb21lIHNo ZWxscyBsb29rIGluIFBBVEggZm9yIGNvbmZpZy5zdGF0dXMuDQo6ICR7Q09ORklHX1NUQVRVUz0u L2NvbmZpZy5zdGF0dXN9DQoNCmVjaG8gY3JlYXRpbmcgJENPTkZJR19TVEFUVVMNCnJtIC1mICRD T05GSUdfU1RBVFVTDQpjYXQgPiAkQ09ORklHX1NUQVRVUyA8PEVPRg0KIyEgL2Jpbi9zaA0KIyBH ZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuDQojIFJ1biB0aGlzIGZpbGUgdG8g cmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4NCiMgVGhpcyBkaXJlY3Rvcnkgd2Fz IGNvbmZpZ3VyZWQgYXMgZm9sbG93cywNCiMgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1u KSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6DQojDQojICQwICRhY19jb25maWd1cmVfYXJncw0KIw0K IyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVn Z2luZw0KIyBjb25maWd1cmUsIGlzIGluIC4vY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuDQoNCmFj X2NzX3VzYWdlPSJVc2FnZTogJENPTkZJR19TVEFUVVMgWy0tcmVjaGVja10gWy0tdmVyc2lvbl0g Wy0taGVscF0iDQpmb3IgYWNfb3B0aW9uDQpkbw0KICBjYXNlICJcJGFjX29wdGlvbiIgaW4NCiAg LXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJl YyB8IC0tcmUgfCAtLXIpDQogICAgZWNobyAicnVubmluZyBcJHtDT05GSUdfU0hFTEwtL2Jpbi9z aH0gJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIg0KICAg IGV4ZWMgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5v LWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7Ow0KICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVy c2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdikNCiAgICBlY2hvICIk Q09ORklHX1NUQVRVUyBnZW5lcmF0ZWQgYnkgYXV0b2NvbmYgdmVyc2lvbiAyLjEzIg0KICAgIGV4 aXQgMCA7Ow0KICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC0taCkNCiAgICBlY2hv ICJcJGFjX2NzX3VzYWdlIjsgZXhpdCAwIDs7DQogICopIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBl eGl0IDEgOzsNCiAgZXNhYw0KZG9uZQ0KDQphY19naXZlbl9zcmNkaXI9JHNyY2Rpcg0KYWNfZ2l2 ZW5fSU5TVEFMTD0iJElOU1RBTEwiDQoNCnRyYXAgJ3JtIC1mciBgZWNobyAiTWFrZWZpbGUNCnRv b2xzL01ha2VmaWxlDQptZ2luaXQvTWFrZWZpbGUNCm1naW5pdC9yZXMvTWFrZWZpbGUNCiIgfCBz ZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQ0KRU9GDQpjYXQgPj4g JENPTkZJR19TVEFUVVMgPDxFT0YNCg0KIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJp Z2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4NCnNlZCAncy8lQC9AQC87 IHMvQCUvQEAvOyBzLyVnXCQvQGcvOyAvQGdcJC9zL1tcXFxcJiVdL1xcXFwmL2c7DQogcy9AQC8l QC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YNCiRhY192 cHN1Yg0KJGV4dHJhc3ViDQpzJUBTSEVMTEAlJFNIRUxMJWcNCnMlQENGTEFHU0AlJENGTEFHUyVn DQpzJUBDUFBGTEFHU0AlJENQUEZMQUdTJWcNCnMlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZw0KcyVA RkZMQUdTQCUkRkZMQUdTJWcNCnMlQERFRlNAJSRERUZTJWcNCnMlQExERkxBR1NAJSRMREZMQUdT JWcNCnMlQExJQlNAJSRMSUJTJWcNCnMlQGV4ZWNfcHJlZml4QCUkZXhlY19wcmVmaXglZw0KcyVA cHJlZml4QCUkcHJlZml4JWcNCnMlQHByb2dyYW1fdHJhbnNmb3JtX25hbWVAJSRwcm9ncmFtX3Ry YW5zZm9ybV9uYW1lJWcNCnMlQGJpbmRpckAlJGJpbmRpciVnDQpzJUBzYmluZGlyQCUkc2JpbmRp ciVnDQpzJUBsaWJleGVjZGlyQCUkbGliZXhlY2RpciVnDQpzJUBkYXRhZGlyQCUkZGF0YWRpciVn DQpzJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnDQpzJUBzaGFyZWRzdGF0ZWRpckAlJHNoYXJl ZHN0YXRlZGlyJWcNCnMlQGxvY2Fsc3RhdGVkaXJAJSRsb2NhbHN0YXRlZGlyJWcNCnMlQGxpYmRp ckAlJGxpYmRpciVnDQpzJUBpbmNsdWRlZGlyQCUkaW5jbHVkZWRpciVnDQpzJUBvbGRpbmNsdWRl ZGlyQCUkb2xkaW5jbHVkZWRpciVnDQpzJUBpbmZvZGlyQCUkaW5mb2RpciVnDQpzJUBtYW5kaXJA JSRtYW5kaXIlZw0KcyVAaG9zdEAlJGhvc3QlZw0KcyVAaG9zdF9hbGlhc0AlJGhvc3RfYWxpYXMl Zw0KcyVAaG9zdF9jcHVAJSRob3N0X2NwdSVnDQpzJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9y JWcNCnMlQGhvc3Rfb3NAJSRob3N0X29zJWcNCnMlQHRhcmdldEAlJHRhcmdldCVnDQpzJUB0YXJn ZXRfYWxpYXNAJSR0YXJnZXRfYWxpYXMlZw0KcyVAdGFyZ2V0X2NwdUAlJHRhcmdldF9jcHUlZw0K cyVAdGFyZ2V0X3ZlbmRvckAlJHRhcmdldF92ZW5kb3IlZw0KcyVAdGFyZ2V0X29zQCUkdGFyZ2V0 X29zJWcNCnMlQGJ1aWxkQCUkYnVpbGQlZw0KcyVAYnVpbGRfYWxpYXNAJSRidWlsZF9hbGlhcyVn DQpzJUBidWlsZF9jcHVAJSRidWlsZF9jcHUlZw0KcyVAYnVpbGRfdmVuZG9yQCUkYnVpbGRfdmVu ZG9yJWcNCnMlQGJ1aWxkX29zQCUkYnVpbGRfb3MlZw0KcyVAU0VUX01BS0VAJSRTRVRfTUFLRSVn DQpzJUBDQ0AlJENDJWcNCnMlQElOU1RBTExfUFJPR1JBTUAlJElOU1RBTExfUFJPR1JBTSVnDQpz JUBJTlNUQUxMX1NDUklQVEAlJElOU1RBTExfU0NSSVBUJWcNCnMlQElOU1RBTExfREFUQUAlJElO U1RBTExfREFUQSVnDQpzJUBQQUNLQUdFQCUkUEFDS0FHRSVnDQpzJUBWRVJTSU9OQCUkVkVSU0lP TiVnDQpzJUBBQ0xPQ0FMQCUkQUNMT0NBTCVnDQpzJUBBVVRPQ09ORkAlJEFVVE9DT05GJWcNCnMl QEFVVE9NQUtFQCUkQVVUT01BS0UlZw0KcyVAQVVUT0hFQURFUkAlJEFVVE9IRUFERVIlZw0KcyVA TUFLRUlORk9AJSRNQUtFSU5GTyVnDQpzJUBDUFBAJSRDUFAlZw0KDQpDRU9GDQpFT0YNCg0KY2F0 ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRg0KDQojIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGlu dG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aA0KIyBzbWFsbCBjb21tYW5kIG51bWJl ciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguDQphY19tYXhfc2VkX2Nt ZHM9OTAgIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzZWQgc2NyaXB0Lg0K YWNfZmlsZT0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4NCmFjX2JlZz0xICMgRmlyc3QgbGlu ZSBmb3IgY3VycmVudCBmaWxlLg0KYWNfZW5kPSRhY19tYXhfc2VkX2NtZHMgIyBMaW5lIGFmdGVy IGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLg0KYWNfbW9yZV9saW5lcz06DQphY19zZWRfY21k cz0iIg0Kd2hpbGUgJGFjX21vcmVfbGluZXM7IGRvDQogIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsg dGhlbg0KICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4g Y29uZnRlc3QucyRhY19maWxlDQogIGVsc2UNCiAgICBzZWQgIiR7YWNfZW5kfXEiIGNvbmZ0ZXN0 LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUNCiAgZmkNCiAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0 LnMkYWNfZmlsZTsgdGhlbg0KICAgIGFjX21vcmVfbGluZXM9ZmFsc2UNCiAgICBybSAtZiBjb25m dGVzdC5zJGFjX2ZpbGUNCiAgZWxzZQ0KICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRo ZW4NCiAgICAgIGFjX3NlZF9jbWRzPSJzZWQgLWYgY29uZnRlc3QucyRhY19maWxlIg0KICAgIGVs c2UNCiAgICAgIGFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgY29uZnRlc3QucyRh Y19maWxlIg0KICAgIGZpDQogICAgYWNfZmlsZT1gZXhwciAkYWNfZmlsZSArIDFgDQogICAgYWNf YmVnPSRhY19lbmQNCiAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2NtZHNg DQogIGZpDQpkb25lDQppZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuDQogIGFjX3NlZF9j bWRzPWNhdA0KZmkNCkVPRg0KDQpjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YNCg0KQ09ORklH X0ZJTEVTPVwke0NPTkZJR19GSUxFUy0iTWFrZWZpbGUNCnRvb2xzL01ha2VmaWxlDQptZ2luaXQv TWFrZWZpbGUNCm1naW5pdC9yZXMvTWFrZWZpbGUNCiJ9DQpFT0YNCmNhdCA+PiAkQ09ORklHX1NU QVRVUyA8PFxFT0YNCmZvciBhY19maWxlIGluIC4uICRDT05GSUdfRklMRVM7IGRvIGlmIHRlc3Qg IngkYWNfZmlsZSIgIT0geC4uOyB0aGVuDQogICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzpp bmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4NCiAgY2FzZSAiJGFj X2ZpbGUiIGluDQogICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpd KjolJSdgDQogICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7 DQogICopIGFjX2ZpbGVfaW49IiR7YWNfZmlsZX0uaW4iIDs7DQogIGVzYWMNCg0KICAjIEFkanVz dCBhIHJlbGF0aXZlIHNyY2RpciwgdG9wX3NyY2RpciwgYW5kIElOU1RBTEwgZm9yIHN1YmRpcmVj dG9yaWVzLg0KDQogICMgUmVtb3ZlIGxhc3Qgc2xhc2ggYW5kIGFsbCB0aGF0IGZvbGxvd3MgaXQu ICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSBkaXJuYW1lLg0KICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8 c2VkICdzJS9bXi9dW14vXSokJSUnYA0KICBpZiB0ZXN0ICIkYWNfZGlyIiAhPSAiJGFjX2ZpbGUi ICYmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4NCiAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3Vi ZGlyZWN0b3J5Lg0KICAgIHRlc3QgISAtZCAiJGFjX2RpciIgJiYgbWtkaXIgIiRhY19kaXIiDQog ICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICRhY19kaXJ8c2VkICdzJV5cLi8lJSdgIg0KICAgICMg QSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguDQogICAgYWNfZG90 cz1gZWNobyAkYWNfZGlyX3N1ZmZpeHxzZWQgJ3MlL1teL10qJS4uLyVnJ2ANCiAgZWxzZQ0KICAg IGFjX2Rpcl9zdWZmaXg9IGFjX2RvdHM9DQogIGZpDQoNCiAgY2FzZSAiJGFjX2dpdmVuX3NyY2Rp ciIgaW4NCiAgLikgIHNyY2Rpcj0uDQogICAgICBpZiB0ZXN0IC16ICIkYWNfZG90cyI7IHRoZW4g dG9wX3NyY2Rpcj0uDQogICAgICBlbHNlIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdz JS8kJSUnYDsgZmkgOzsNCiAgLyopIHNyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3Vm Zml4IjsgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsNCiAgKikgIyBSZWxhdGl2ZSBw YXRoLg0KICAgIHNyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgi DQogICAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7Ow0KICBlc2FjDQoN CiAgY2FzZSAiJGFjX2dpdmVuX0lOU1RBTEwiIGluDQogIFsvJF0qKSBJTlNUQUxMPSIkYWNfZ2l2 ZW5fSU5TVEFMTCIgOzsNCiAgKikgSU5TVEFMTD0iJGFjX2RvdHMkYWNfZ2l2ZW5fSU5TVEFMTCIg OzsNCiAgZXNhYw0KDQogIGVjaG8gY3JlYXRpbmcgIiRhY19maWxlIg0KICBybSAtZiAiJGFjX2Zp bGUiDQogIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBgZWNo byAkYWNfZmlsZV9pbnxzZWQgJ3MlLiovJSUnYCBieSBjb25maWd1cmUuIg0KICBjYXNlICIkYWNf ZmlsZSIgaW4NCiAgKk1ha2VmaWxlKikgYWNfY29tc3ViPSIxaVxcDQojICRjb25maWd1cmVfaW5w dXQiIDs7DQogICopIGFjX2NvbXN1Yj0gOzsNCiAgZXNhYw0KDQogIGFjX2ZpbGVfaW5wdXRzPWBl Y2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUg JGFjX2dpdmVuX3NyY2Rpci8lZyJgDQogIHNlZCAtZSAiJGFjX2NvbXN1Yg0KcyVAY29uZmlndXJl X2lucHV0QCUkY29uZmlndXJlX2lucHV0JWcNCnMlQHNyY2RpckAlJHNyY2RpciVnDQpzJUB0b3Bf c3JjZGlyQCUkdG9wX3NyY2RpciVnDQpzJUBJTlNUQUxMQCUkSU5TVEFMTCVnDQoiICRhY19maWxl X2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+ICRhY19maWxlDQpmaTsgZG9uZQ0Kcm0g LWYgY29uZnRlc3QucyoNCg0KRU9GDQpjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YNCg0KRU9G DQpjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GDQoNCmV4aXQgMA0KRU9GDQpjaG1vZCAreCAk Q09ORklHX1NUQVRVUw0Kcm0gLWZyIGNvbmZkZWZzKiAkYWNfY2xlYW5fZmlsZXMNCnRlc3QgIiRu b19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVT IHx8IGV4aXQgMQ0KDQoNCmlmIHRlc3QgIngkaGF2ZV9saWJtaW5pZ3VpIiAhPSAieHllcyI7IHRo ZW4NCgllY2hvICJjb25maWd1cmU6IHdhcm5pbmc6IA0KCQlNaW5pR1VJIGlzIG5vdCBwcm9wZXJs eSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4gWW91IG5lZWQgTWluaUdVSS1MaXRlIFZlciAxLjIu MyBvciBsYXRlciBmb3INCgkJYnVpbGRpbmcgdGhpcyBwYWNrYWdlLiBQbGVhc2UgY29uZmlndXJl IGFuZCBpbnN0YWxsIE1pbmlHVUktTGl0ZSBWZXIgMS4yLjMgZmlyc3QuDQoJIiAxPiYyDQpmaQ0K DQo= ------_=_NextPart_001_01C34C40.E831C6E0--