|
Boost-Build : |
From: Rene Rivera (grafik.list_at_[hidden])
Date: 2004-02-11 10:06:49
mrbandsaw wrote:
> Ok, very good explanation - thanks! But......
> I did follow you instructions exactly as you described:
> 1: Run commands within the Visual Studio .Net 2003 Command Prompt.
> 2: Fixed so that my boost directory is included.
> 3: Change directory to my boost dir: D:\C++\Boost_1_31_0
> 4&5: bjam "-sTOOLS=vc7.1" "--prefix=D:\C++\Boost_1_31_0" install
>
> Now, the result of this is that two directories are created: lib and
> include. lib is empty and include contains all boost header files.
> So, the only action taken by issuing the bjam install command was
> that the boost headers were copied!?!?
> How do I make bjam build the libs?
Hmm.. that sounds familiar to a bug already encountered.. and fixed. Try
replacing d:\c++\boost_1_31_0\tools\build\v1\allyourbase.jam (or wherever it
happens to be for you) with the one attached.
-- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com - 102708583/icq --------------040704070107060205050805 Content-Type: text/plain; name="allyourbase.jam" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="allyourbase.jam" Iw0KIyAvK1wNCiMgK1wgICAgQ29weXJpZ2h0IDE5OTMsIDIwMDAgQ2hyaXN0b3BoZXIgU2Vp d2FsZC4NCiMgXCsvDQojDQojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEphbSAtIHNlZSBqYW0u YyBmb3IgQ29weXJpZ2h0IGluZm9ybWF0aW9uLg0KIw0KDQojIFRoaXMgZmlsZSBpcyBBTFNP Og0KIyAoQykgQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDEuIFBlcm1pc3Npb24gdG8g Y29weSwgdXNlLA0KIyBtb2RpZnksIHNlbGwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2Fy ZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoaXMNCiMgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJz IGluIGFsbCBjb3BpZXMuIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQNCiMgImFzIGlzIiB3 aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSwgYW5kIHdpdGggbm8gY2xhaW0g YXMNCiMgdG8gaXRzIHN1aXRhYmlsaXR5IGZvciBhbnkgcHVycG9zZS4NCg0KIw0KIyBKQU1C QVNFIC0gamFtIDIuMyBydWxlc2V0IHByb3ZpZGluZyBtYWtlKDEpLWxpa2UgZnVuY3Rpb25h bGl0eQ0KIw0KIyBTdXBwb3J0cyBVTklYLCBOVCwgYW5kIFZNUy4NCiMNCiMgMTIvMjcvOTMg KHNlaXdhbGQpIC0gcHVydHVyYiBsaWJyYXJ5IHNvdXJjZXMgd2l0aCBTT1VSQ0VfR1JJU1QN CiMgMDQvMTgvOTQgKHNlaXdhbGQpIC0gdXNlICc/PScgd2hlbiBzZXR0aW5nIE9TIHNwZWNp ZmljIHZhcnMNCiMgMDQvMjEvOTQgKHNlaXdhbGQpIC0gZG8gUm1UZW1wcyB0b2dldGhlcg0K IyAwNS8wNS85NCAoc2Vpd2FsZCkgLSBhbGwgc3VwcG9ydGVkIEMgY29tcGlsZXJzIHN1cHBv cnQgLW86IHJlbGVnYXRlDQojICAgICAgICAgICAgICAgICAgICAgIFJFTE9DQVRFIGFzIGFu IG9wdGlvbjsgc2V0IFJhbmxpYiB0byAiIiB0byBkaXNhYmxlIGl0DQojIDA2LzAxLzk0IChz ZWl3YWxkKSAtIG5ldyAnYWN0aW9ucyBleGlzdGluZycgdG8gZG8gZXhpc3Rpbmcgc291cmNl cw0KIyAwOC8yNS85NCAoc2Vpd2FsZCkgLSBuZXcgT2JqZWN0Q2NGbGFncyBydWxlIHRvIGFw cGVuZCB0byBwZXItdGFyZ2V0IENDRkxBR1MNCiMgMDgvMjkvOTQgKHNlaXdhbGQpIC0gbmV3 IE9iamVjdEhkcnMgcnVsZSB0byBhcHBlbmQgdG8gcGVyLXRhcmdldCBIRFJTDQojIDA5LzE5 Lzk0IChzZWl3YWxkKSAtIExpbmtMaWJyYXJpZXMgYW5kIFVuZGVmcyBub3cgYXBwZW5kDQoj ICAgICAgICAgICAgICAgICAgICAtIFJ1bGUgbmFtZXMgZG93bnNoaWZ0ZWQuDQojIDEwLzA2 Lzk0IChzZWl3YWxkKSAtIER1bWIgeXlhY2Mgc3R1ZmYgbW92ZWQgaW50byBKYW1maWxlLg0K IyAxMC8xNC85NCAoc2Vpd2FsZCkgLSAoQ3J1ZGUpIHN1cHBvcnQgZm9yIC5zLCAuQywgLmNj LCAuY3BwLCBhbmQgLmYgZmlsZXMuDQojIDAxLzA4Lzk1IChzZWl3YWxkKSAtIFNoZWxsIG5v dyBoYW5kbGVkIHdpdGggYXdrLCBub3Qgc2VkDQojIDAxLzA5Lzk1IChzZWl3YWxkKSAtIElu c3RhbGwqIG5vdyB0YWtlIGRlc3QgZGlyZWN0b3J5IGFzIHRhcmdldA0KIyAwMS8xMC85NSAo c2Vpd2FsZCkgLSBBbGwgZW50cmllcyBzb3J0ZWQuDQojIDAxLzEwLzk1IChzZWl3YWxkKSAt IE5UIHN1cHBvcnQgbW92ZWQgaW4sIHdpdGggTGF1cmFXJ3MgaGVscC4gIA0KIyAwMS8xMC85 NSAoc2Vpd2FsZCkgLSBWTVMgc3VwcG9ydCBtb3ZlZCBpbi4NCiMgMDIvMDYvOTUgKHNlaXdh bGQpIC0gT2JqZWN0QysrRmxhZ3MgYW5kIFN1YkRpckMrK0ZsYWdzIGFkZGVkLg0KIyAwMi8w Ny85NSAoc2Vpd2FsZCkgLSBJcm9uIG91dCB3aGVuIEhEUlNFQVJDSCB1c2VzICIiIG9yIFNF QVJDSF9TT1VSQ0UuDQojIDAyLzA4Lzk1IChzZWl3YWxkKSAtIFN1YkRpciB3b3JrcyBvbiBW TVMuDQojIDAyLzE0Lzk1IChzZWl3YWxkKSAtIE1rRGlyIGFuZCBlbnRvdXJhZ2UuDQojIDA0 LzMwLzk1IChzZWl3YWxkKSAtIFVzZSBpbnN0YWxsIC1jIGZsYWcgc28gdGhhdCBpdCBjb3Bp ZXMsIG5vdCBtb3Zlcy4NCiMgMDcvMTAvOTUgKHRheWxvcikgLSBTdXBwb3J0IGZvciBNaWNy b3NvZnQgQysrLg0KIyAxMS8yMS85NiAocGV0ZXJrKSAtIFN1cHBvcnQgZm9yIEJlT1MNCiMg MDcvMTkvOTkgKHNpY2tlbCkgLSBTdXBwb3J0IGZvciBNYWMgT1MgWCBTZXJ2ZXIgKGFuZCBt YXliZSBjbGllbnQpDQojIDAyLzE4LzAwIChiZWxtb250ZSktIFN1cHBvcnQgZm9yIEN5Z3dp bi4NCg0KIyBTcGVjaWFsIHRhcmdldHMgZGVmaW5lZCBpbiB0aGlzIGZpbGU6DQojDQojIGFs bCAgICAgICAgICAgLSBwYXJlbnQgb2YgZmlyc3QsIHNoZWxsLCBmaWxlcywgbGliLCBleGUN CiMgZmlyc3QgICAgICAgICAtIGZpcnN0IGRlcGVuZGVudCBvZiAnYWxsJywgZm9yIHBvdGVu dGlhbCBpbml0aWFsaXphdGlvbg0KIyBzaGVsbCAgICAgICAgIC0gcGFyZW50IG9mIGFsbCBT aGVsbCB0YXJnZXRzIA0KIyBmaWxlcyAgICAgICAgIC0gcGFyZW50IG9mIGFsbCBGaWxlIHRh cmdldHMNCiMgbGliICAgICAgICAgICAtIHBhcmVudCBvZiBhbGwgTGlicmFyeSB0YXJnZXRz DQojIGV4ZSAgICAgICAgICAgLSBwYXJlbnQgb2YgYWxsIE1haW4gdGFyZ2V0cw0KIyBkaXJz ICAgICAgICAgIC0gcGFyZW50IG9mIGFsbCBNa0RpciB0YXJnZXRzDQojIGNsZWFuICAgICAg ICAgLSByZW1vdmVzIGFsbCBTaGVsbCwgRmlsZSwgTGlicmFyeSwgYW5kIE1haW4gdGFyZ2V0 cw0KIyB1bmluc3RhbGwgICAgIC0gcmVtb3ZlcyBhbGwgSW5zdGFsbCB0YXJnZXRzDQojICAg ICAgIA0KDQojIFJ1bGVzIGRlZmluZWQgYnkgdGhpcyBmaWxlOg0KIw0KIyBhcyBvYmoubyA6 IHNvdXJjZS5zIDsgICAgICAgICAgICAgICAgIC5zIC0+IC5vDQojIEJ1bGsgZGlyIDogZmls ZXMgOyAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGUgZGlyZWN0b3J5IHdpdGggbWFueSBm aWxlcw0KIyBDYyBvYmoubyA6IHNvdXJjZS5jIDsgICAgICAgICAgICAgICAgIC5jIC0+IC5v DQojIEMrKyBvYmoubyA6IHNvdXJjZS5jYyA7ICAgICAgICAgICAgICAgLmNjIC0+IC5vDQoj IENsZWFuIGNsZWFuIDogc291cmNlcyA7ICAgICAgICAgICAgICAgcmVtb3ZlIHNvdXJjZXMg d2l0aCAnamFtIGNsZWFuJw0KIyBGaWxlIGRlc3QgOiBzb3VyY2UgOyAgICAgICAgICAgICAg ICAgIGNvcHkgZmlsZQ0KIyBGb3J0cmFuIG9iai5vIDogc291cmNlLmYgOyAgICAgICAgICAg IC5mIC0+IC5vDQojIEdlbkZpbGUgc291cmNlLmMgOiBwcm9ncmFtIGFyZ3MgOyAgICAgbWFr ZSBjdXN0b20gZmlsZQ0KIyBIYXJkbGluayB0YXJnZXQgOiBzb3VyY2UgOyAgICAgICAgICAg IG1ha2UgbGluayBmcm9tIHNvdXJjZSB0byB0YXJnZXQNCiMgSGRyUnVsZSBzb3VyY2UgOiBo ZWFkZXJzIDsgICAgICAgICAgICBoYW5kbGUgI2luY2x1ZGVzDQojIEluc3RhbGxJbnRvIGRp ciA6IHNvdXJjZXMgOyAgICAgICAgICAgaW5zdGFsbCBhbnkgZmlsZXMNCiMgSW5zdGFsbEJp biBkaXIgOiBzb3VyY2VzIDsgICAgICAgICAgICBpbnN0YWxsIGJpbmFyaWVzDQojIEluc3Rh bGxMaWIgZGlyIDogc291cmNlcyA7ICAgICAgICAgICAgaW5zdGFsbCBmaWxlcw0KIyBJbnN0 YWxsRmlsZSBkaXIgOiBzb3VyY2VzIDsgICAgICAgICAgIGluc3RhbGwgZmlsZXMNCiMgSW5z dGFsbE1hbiBkaXIgOiBzb3VyY2VzIDsgICAgICAgICAgICBpbnN0YWxsIG1hbiBwYWdlcw0K IyBJbnN0YWxsU2hlbGwgZGlyIDogc291cmNlcyA7ICAgICAgICAgIGluc3RhbGwgc2hlbGwg c2NyaXB0cw0KIyBMZXggc291cmNlLmMgOiBzb3VyY2UubCA7ICAgICAgICAgICAgIC5sIC0+ IC5jDQojIExpYnJhcnkgbGliIDogc291cmNlIDsgICAgICAgICAgICAgICAgYXJjaGl2ZSBs aWJyYXJ5IGZyb20gY29tcGlsZWQgc291cmNlcw0KIyBMaWJyYXJ5RnJvbU9iamVjdHMgbGli IDogb2JqZWN0cyA7ICAgIGFyY2hpdmUgbGlicmFyeSBmcm9tIG9iamVjdHMNCiMgTGlua0xp YnJhcmllcyBpbWFnZXMgOiBsaWJyYXJpZXMgOyAgICBiYWcgbGlicmFyaWVzIG9udG8gTWFp bnMNCiMgTWFpbiBpbWFnZSA6IHNvdXJjZSA7ICAgICAgICAgICAgICAgICBsaW5rIGV4ZWN1 dGFibGUgZnJvbSBjb21waWxlZCBzb3VyY2VzDQojIE1haW5Gcm9tT2JqZWN0cyBpbWFnZSA6 IG9iamVjdHMgOyAgICAgbGluayBleGVjdXRhYmxlIGZyb20gb2JqZWN0cw0KIyBNa0RpciBk aXIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2UgYSBkaXJlY3RvcnksIGlmIG5v dCB0aGVyZQ0KIyBPYmplY3Qgb2JqZWN0IDogc291cmNlIDsgICAgICAgICAgICAgIGNvbXBp bGUgb2JqZWN0IGZyb20gc291cmNlDQojIE9iamVjdENjRmxhZ3Mgc291cmNlIDogZmxhZ3Mg OyAgICAgICAgYWRkIGNvbXBpbGVyIGZsYWdzIGZvciBvYmplY3QNCiMgT2JqZWN0QysrRmxh Z3Mgc291cmNlIDogZmxhZ3MgOyAgICAgICBhZGQgY29tcGlsZXIgZmxhZ3MgZm9yIG9iamVj dA0KIyBPYmplY3RIZHJzIHNvdXJjZSA6IGRpcnMgOyAgICAgICAgICAgIGFkZCBpbmNsdWRl IGRpcmVjdG9yaWVzIGZvciBvYmplY3QNCiMgT2JqZWN0cyBzb3VyY2VzIDsgICAgICAgICAg ICAgICAgICAgICBjb21waWxlIHNvdXJjZXMNCiMgUm1UZW1wcyB0YXJnZXQgOiBzb3VyY2Vz IDsgICAgICAgICAgICByZW1vdmUgdGVtcCBzb3VyY2VzIGFmdGVyIHRhcmdldCBtYWRlDQoj IFNldHVpZCBpbWFnZXMgOyAgICAgICAgICAgICAgICAgICAgICAgbWFyayBleGVjdXRhYmxl cyBTZXR1aWQNCiMgU3ViRGlyIFRPUCBkMSBkMiAuLi4gOyAgICAgICAgICAgICAgICBzdGFy dCBhIHN1YmRpcmVjdG9yeSBKYW1maWxlDQojIFN1YkRpckNjRmxhZ3MgZmxhZ3MgOyAgICAg ICAgICAgICAgICAgYWRkIGNvbXBpbGVyIGZsYWdzIHVudGlsIG5leHQgU3ViRGlyDQojIFN1 YkRpckMrK0ZsYWdzIGZsYWdzIDsgICAgICAgICAgICAgICAgYWRkIGNvbXBpbGVyIGZsYWdz IHVudGlsIG5leHQgU3ViRGlyDQojIFN1YkRpckhkcnMgZGlycyA7ICAgICAgICAgICAgICAg ICAgICAgYWRkIGluY2x1ZGUgZGlycyB1bnRpbCBuZXh0IFN1YkRpcg0KIyBTdWJJbmNsdWRl IFRPUCBkMSBkMiAuLi4gOyAgICAgICAgICAgIGluY2x1ZGUgYSBzdWJkaXJlY3RvcnkgSmFt ZmlsZQ0KIyBTaGVsbCBleGUgOiBzb3VyY2UgOyAgICAgICAgICAgICAgICAgIG1ha2UgYSBz aGVsbCBleGVjdXRhYmxlDQojIFVuZGVmaW5lcyBpbWFnZXMgOiBzeW1ib2xzIDsgICAgICAg ICAgc2F2ZSB1bmRlZidzIGZvciBsaW5raW5nDQojIFVzZXJPYmplY3Qgb2JqZWN0IDogc291 cmNlIDsgICAgICAgICAgaGFuZGxlIHVua25vd24gc3VmZml4ZXMgZm9yIE9iamVjdA0KIyBZ YWNjIHNvdXJjZS5jIDogc291cmNlLnkgOyAgICAgICAgICAgIC55IC0+IC5jDQojDQojIFV0 aWxpdHkgcnVsZXMgdGhhdCBoYXZlIG5vIHNpZGUgZWZmZWN0cyAobm90IHN1cHBvcnRlZCk6 DQojDQojIEZBcHBlbmRTdWZmaXggZjEgZjIgLi4uIDogJChTVUYpIDsgICAgcmV0dXJuICQo PCkgd2l0aCBzdWZmaXhlcw0KIyBqb2luIHZhbHVlIC4uLiA7ICAgICAgICAgICAgICAgICAg IHJldHVybiBjb250YXRlbmF0ZWQgdmFsdWVzDQojIEZEaXJOYW1lIGQxIGQyIC4uLiA7ICAg ICAgICAgICAgICAgICAgcmV0dXJuIHBhdGggZnJvbSByb290IHRvIGRpcg0KIyBGR3Jpc3Qg ZDEgZDIgLi4uIDsgICAgICAgICAgICAgICAgICAgIHJldHVybiBkMSFkMiEuLi4NCiMgRkdy aXN0RmlsZXMgdmFsdWUgOyAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh2YWx1ZTpHPSQo U09VUkNFX0dSSVNUKSkNCiMgRkdyaXN0U291cmNlRmlsZXMgdmFsdWUgOyAgICAgICAgICAg ICByZXR1cm4gJCh2YWx1ZTpHPSQoU09VUkNFX0dSSVNUKSkNCiMgRlJlbFBhdGggZDEgOiBk MiA7ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVsIHBhdGggZnJvbSBkMSB0byBkMg0K IyBGU3ViRGlyIGQxIGQyIC4uLiA7ICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXRoIHRv IHJvb3QNCiMNCg0KDQojIEJyaWVmIHJldmlldyBvZiB0aGUgamFtIGxhbmd1YWdlOg0KIw0K IyBTdGF0ZW1lbnRzOg0KIyAgICAgICBydWxlIFJVTEUgLSBzdGF0ZW1lbnRzIHRvIHByb2Nl c3MgYSBydWxlDQojICAgICAgIGFjdGlvbnMgUlVMRSAtIHN5c3RlbSBjb21tYW5kcyB0byBj YXJyeSBvdXQgdGFyZ2V0IHVwZGF0ZQ0KIw0KIyBNb2RpZmllcnMgb24gYWN0aW9uczoNCiMg ICAgICAgdG9nZXRoZXIgLSBtdWx0aXBsZSBpbnN0YW5jZXMgb2Ygc2FtZSBydWxlIG9uIHRh cmdldCBnZXQgZXhlY3V0ZWQNCiMgICAgICAgICAgICAgICAgICBvbmNlIHdpdGggdGhlaXIg c291cmNlcyAoJCg+KSkgY29uY2F0ZW5hdGVkDQojICAgICAgIHVwZGF0ZWQgLSByZWZlcnMg dG8gdXBkYXRlZCBzb3VyY2VzICgkKD4pKSBvbmx5DQojICAgICAgIGlnbm9yZSAtIGlnbm9y ZSByZXR1cm4gc3RhdHVzIG9mIGNvbW1hbmQNCiMgICAgICAgcXVpZXRseSAtIGRvbid0IHRy YWNlIGl0cyBleGVjdXRpb24gdW5sZXNzIHZlcmJvc2UNCiMgICAgICAgcGllY2VtZWFsIC0g aXRlcmF0ZSBjb21tYW5kIGVhY2ggdGltZSB3aXRoIGEgc21hbGwgc3Vic2V0IG9mICQoPikN CiMgICAgICAgZXhpc3RpbmcgLSByZWZlcnMgdG8gY3VycmVudGx5IGV4aXN0aW5nIHNvdXJj ZXMgKCQoPikpIG9ubHkNCiMgICAgICAgYmluZCB2YXJzIC0gc3ViamVjdCB0byBiaW5kaW5n IGJlZm9yZSBleHBhbmRpbmcgaW4gYWN0aW9ucw0KIw0KIyBTcGVjaWFsIHJ1bGVzOg0KIyAg ICAgICBBTFdBWVMgLSBhbHdheXMgYnVpbGQgYSB0YXJnZXQNCiMgICAgICAgREVQRU5EUyAt IGJ1aWxkcyB0aGUgZGVwZW5kZW5jeSBncmFwaA0KIyAgICAgICBFQ0hPIC0gYmx1cnQgb3V0 IHRhcmdldHMgb24gc3Rkb3V0DQojICAgICAgIEVYSVQgLSBibHVydCBvdXQgdGFyZ2V0cyBh bmQgZXhpdA0KIyAgICAgICBJTkNMVURFUyAtIG1hcmtzIHNvdXJjZXMgYXMgaGVhZGVycyBm b3IgdGFyZ2V0IChhIGNvZGVwZW5kZW5jeSkNCiMgICAgICAgTk9DQVJFIC0gZG9uJ3QgcGFu aWMgaWYgdGhlIHRhcmdldCBjYW4ndCBiZSBidWlsdA0KIyAgICAgICBOT1VQREFURSAtIGNy ZWF0ZSB0aGUgdGFyZ2V0IGlmIG5lZWRlZCBidXQgbmV2ZXIgdXBkYXRlIGl0IA0KIyAgICAg ICBOT1RGSUxFIC0gaWdub3JlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHRhcmdldCAoaXQncyBu b3QgYSBmaWxlKQ0KIyAgICAgICBURU1QT1JBUlkgLSB0YXJnZXQgbmVlZCBub3QgYmUgcHJl c2VudCBpZiBzb3VyY2VzIGhhdmVuJ3QgY2hhbmdlZA0KIw0KIyBTcGVjaWFsIHZhcmlhYmxl cyBzZXQgYnkgamFtOg0KIyAgICAgICAkKDwpIC0gdGFyZ2V0cyBvZiBhIHJ1bGUgKHRvIHRo ZSBsZWZ0IG9mIHRoZSA6KQ0KIyAgICAgICAkKD4pIC0gc291cmNlcyBvZiBhIHJ1bGUgKHRv IHRoZSByaWdodCBvZiB0aGUgOikNCiMgICAgICAgJCh4eHgpIC0gdHJ1ZSBvbiB4eHggKFVO SVgsIFZNUywgTlQsIE9TMiwgTUFDKQ0KIyAgICAgICAkKE9TKSAtIG5hbWUgb2YgT1MgLSB2 YXJpZXMgd2lsZGx5DQojICAgICAgICQoSkFNVkVSU0lPTikgLSB2ZXJzaW9uIG51bWJlciAo Mi4zKQ0KIw0KIyBTcGVjaWFsIHZhcmlhYmxlcyB1c2VkIGJ5IGphbToNCiMgICAgICAgU0VB UkNIIC0gd2hlcmUgdG8gZmluZCBzb21ldGhpbmcgKHVzZWQgZHVyaW5nIGJpbmRpbmcgYW5k IGFjdGlvbnMpDQojICAgICAgIExPQ0FURSAtIHdoZXJlIHRvIHBsb3Agc29tZXRoaW5nIG5v dCBmb3VuZCB3aXRoIFNFQVJDSA0KIyAgICAgICBIRFJSVUxFIC0gcnVsZSB0byBjYWxsIHRv IGhhbmRsZSBpbmNsdWRlIGZpbGVzDQojICAgICAgIEhEUlNDQU4gLSBlZ3JlcCByZWdleCB0 byBleHRyYWN0IGluY2x1ZGUgZmlsZXMNCiMNCiMgU3BlY2lhbCB0YXJnZXRzOg0KIyAgICAg ICBhbGwgLSBkZWZhdWx0IGlmIG5vbmUgZ2l2ZW4gb24gY29tbWFuZCBsaW5lDQojDQoNCiMg SW5pdGlhbGl6ZSB2YXJpYWJsZXMNCiMNCg0KIw0KIyBPUyBzcGVjaWZpYyB2YXJpYWJsZSBz ZXR0aW5ncw0KIw0KDQojIGR3YSA2LzQvMDEgLSByZW1vdmVkIGFsbCBzZXR0aW5ncyBvZiB0 aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBmb3IgYm9vc3Q6DQojICAgQ0MsIENDRkxBR1MsIEMr KywgQysrRkxBR1MsIExJTkssIExJTktGTEFHUywgTElOS0xJQlMNCiMgcHJvYmFibHkgYSBs b3QgbW9yZSBjb3VsZCBiZSBjbGVhcmVkIGF3YXkNCg0KaWYgJChOVCkNCnsNCiAgICBDUCAg ICAgICAgICAgICAgPz0gY29weSA7DQogICAgUk0gICAgICAgICAgICAgID89IGRlbCAvZi9x IDsNCiAgICBTTEFTSCAgICAgICAgICAgPz0gXFwgOw0KICAgIFNQTElUUEFUSCAgICAgICA/ PSAiOyIgOyAjIGR3YSAtLSBhZGRlZCBtaXNzaW5nIFNQTElUUEFUSA0KICAgIFNVRkxJQiAg ICAgICAgICA/PSAubGliIDsNCiAgICBTVUZPQkogICAgICAgICAgPz0gLm9iaiA7DQogICAg U1VGRVhFICAgICAgICAgID89IC5leGUgOw0KICAgIFNVRkRMTCAgICAgICAgICA/PSAuZGxs IC5saWIgOw0KICAgIGdMSU5LX1ZBUklBQkxFKC5kbGwpID0gOyAgICAgICAgICAgICAjIGRs bHMgYXJlIE5PVCBsaW5rZWQgdG8gZGlyZWN0bHkNCiAgICBnTElOS19WQVJJQUJMRSgubGli KSA9IE5FRURMSUJTIDsgICAgIyBpbnN0ZWFkLCB1c2VycyBsaW5rIHRvIGltcG9ydCBsaWJz DQogICAgUFJFRExMICAgICAgICAgID89ICIiIDsNCiAgICBOT0FSU0NBTiAgICAgICAgPz0g dHJ1ZSA7DQogICAgU0hFTExfRVhQT1JUICAgID89IDsNCiAgICBTSEVMTF9TRVQgICAgICAg Pz0gInNldCAiIDsNCiAgICANCiAgICAjIGR3YSA2LzQvMDEgLSByZW1vdmVkIGNvbXBpbGVy IGRldGVybWluYXRpb24gZm9yIGJvb3N0DQogICAgIyBhZGRlZCBzb21lIHlhY2MvbGV4IHN0 dWZmLCBhc3N1bWluZyBjeWd3aW4gZm9yIG5vdy4NCiAgICBMRVggICAgICAgICAgICAgPz0g ZmxleCA7DQogICAgWUFDQyAgICAgICAgICAgID89IGJpc29uIC15IDsNCiAgICBZQUNDRklM RVMgICAgICAgPz0geS50YWIgOw0KICAgIFlBQ0NfT1VUUFVUICAgICA/PSAtLW91dHB1dD0g Ow0KICAgIExFWF9PVVRQVVQgICAgICA/PSAtbyA7DQogICAgDQogICAgTE4gICAgICAgICAg ICAgID89ICQoQ1ApIDsNCn0NCmVsc2UgaWYgJChPUzIpDQp7DQogICAgV0FUQ09NICAgICAg ICAgID89ICQod2F0Y29tKSA7DQoNCiAgICBpZiAhICQoV0FUQ09NKQ0KICAgIHsNCiAgICAg ICAgRVhJVCBPbiBPUzIsIHNldCBXQVRDT00gdG8gdGhlIHJvb3Qgb2YgdGhlIFdhdGNvbSBk aXJlY3RvcnkuIDsNCiAgICB9DQoNCiAgICBBUiAgICAgICAgICAgICAgPz0gd2xpYiA7DQog ICAgQklORElSICAgICAgICAgID89IFxcb3MyXFxhcHBzIDsNCiAgICBDUCAgICAgICAgICAg ICAgPz0gY29weSA7DQogICAgRE9UICAgICAgICAgICAgID89IC4gOw0KICAgIERPVERPVCAg ICAgICAgICA/PSAuLiA7DQogICAgTVYgICAgICAgICAgICAgID89IG1vdmUgOw0KICAgIE5P QVJTQ0FOICAgICAgICA/PSB0cnVlIDsNCiAgICBPUFRJTSAgICAgICAgICAgPz0gOw0KICAg IFJNICAgICAgICAgICAgICA/PSBkZWwgL2YgOw0KICAgIFNMQVNIICAgICAgICAgICA/PSBc XCA7DQogICAgU1BMSVRQQVRIICAgICAgID89ICI7IiA7ICMgZHdhIC0tIGFkZGVkIG1pc3Np bmcgU1BMSVRQQVRIDQogICAgU1RESERSUyAgICAgICAgID89ICQoV0FUQ09NKVxcaCA7DQog ICAgU1VGRVhFICAgICAgICAgID89IC5leGUgOw0KICAgIFNVRkxJQiAgICAgICAgICA/PSAu bGliIDsNCiAgICBTVUZPQkogICAgICAgICAgPz0gLm9iaiA7DQogICAgVU5ERUZGTEFHICAg ICAgID89ICIvdSBfIiA7DQoNCn0NCmVsc2UgaWYgJChWTVMpDQp7DQogICAgQ0hNT0QgICAg ICAgICAgID89IHNldCBmaWxlL3Byb3Q9IDsNCiAgICBDUCAgICAgICAgICAgICAgPz0gY29w eS9yZXBsYWNlIDsNCiAgICBDUkVMSUIgICAgICAgICAgPz0gdHJ1ZSA7DQogICAgRE9UICAg ICAgICAgICAgID89IFtdIDsNCiAgICBET1RET1QgICAgICAgICAgPz0gWy1dIDsNCiAgICBF WEVNT0RFICAgICAgICAgPz0gKHc6ZSkgOw0KICAgIEZJTEVNT0RFICAgICAgICA/PSAodzpy KSA7DQogICAgSERSUyAgICAgICAgICAgID89IDsNCiAgICBNS0RJUiAgICAgICAgICAgPz0g Y3JlYXRlL2RpciA7DQogICAgTVYgICAgICAgICAgICAgID89IHJlbmFtZSA7DQogICAgT1BU SU0gICAgICAgICAgID89ICIiIDsNCiAgICBSTSAgICAgICAgICAgICAgPz0gZGVsZXRlIDsN CiAgICBSVU5WTVMgICAgICAgICAgPz0gbWNyIDsNCiAgICBTSEVMTE1PREUgICAgICAgPz0g KHc6ZXIpIDsNCiAgICBTTEFTSCAgICAgICAgICAgPz0gLiA7DQogICAgU1RESERSUyAgICAg ICAgID89IGRlY2MkbGlicmFyeV9pbmNsdWRlIDsNCiAgICBTVUZFWEUgICAgICAgICAgPz0g LmV4ZSA7DQogICAgU1VGTElCICAgICAgICAgID89IC5vbGIgOw0KICAgIFNVRk9CSiAgICAg ICAgICA/PSAub2JqIDsNCg0KICAgIHN3aXRjaCAkKE9TKSANCiAgICB7DQogICAgY2FzZSBW TVMgICAgIDogTElOS0xJQlMgPz0gc3lzJGxpYnJhcnk6dmF4Y3J0bC5vbGIvbGliIDsNCiAg ICB9DQp9DQplbHNlIGlmICQoTUFDKQ0Kew0KICAgIGxvY2FsIE9QVCA7DQoNCiAgICBDVyAg ICAgID89ICJ7Q1d9IiA7DQoNCiAgICBNQUNIRFJTID89DQogICAgICAgICAgICAiJChVTUFD SERSUyk6VW5pdmVyc2FsOkludGVyZmFjZXM6Q0luY2x1ZGVzIg0KICAgICAgICAgICAgIiQo Q1cpOk1TTDpNU0xfQzpNU0xfQ29tbW9uOkluY2x1ZGUiDQogICAgICAgICAgICAiJChDVyk6 TVNMOk1TTF9DOk1TTF9NYWNPUzpJbmNsdWRlIiA7DQoNCiAgICBNQUNMSUJTID89DQogICAg ICAgICAgICAiJChDVyk6TWFjT1MgU3VwcG9ydDpVbml2ZXJzYWw6TGlicmFyaWVzOlN0dWJM aWJyYXJpZXM6SW50ZXJmYWNlbGliIg0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1cHBv cnQ6VW5pdmVyc2FsOkxpYnJhcmllczpTdHViTGlicmFyaWVzOk1hdGhsaWIiIDsNCg0KICAg IE1QV0xJQlMgPz0gDQogICAgICAgICAgICAiJChDVyk6TWFjT1MgU3VwcG9ydDpMaWJyYXJp ZXM6UnVudGltZTpSdW50aW1lIFBQQzpNU0wgTVBXQ1J1bnRpbWUubGliIg0KICAgICAgICAg ICAgIiQoQ1cpOk1TTDpNU0xfQzpNU0xfTWFjT1M6TGliOlBQQzpNU0wgQy5QUEMgTVBXLkxp YiIgOw0KDQogICAgTVBXTkxMSUJTID89IA0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1 cHBvcnQ6TGlicmFyaWVzOlJ1bnRpbWU6UnVudGltZSBQUEM6TVNMIE1QV0NSdW50aW1lLmxp YiINCiAgICAgICAgICAgICIkKENXKTpNU0w6TVNMX0M6TVNMX01hY09TOkxpYjpQUEM6TVNM IEMuUFBDIE1QVyhOTCkuTGliIiA7DQoNCiAgICBTSU9VWEhEUlMgPz0gOw0KDQogICAgU0lP VVhMSUJTID89IA0KICAgICAgICAgICAgIiQoQ1cpOk1hY09TIFN1cHBvcnQ6TGlicmFyaWVz OlJ1bnRpbWU6UnVudGltZSBQUEM6TVNMIFJ1bnRpbWVQUEMubGliIg0KICAgICAgICAgICAg IiQoQ1cpOk1TTDpNU0xfQzpNU0xfTWFjT1M6TGliOlBQQzpNU0wgU0lPVVguUFBDLkxpYiIg DQogICAgICAgICAgICAiJChDVyk6TVNMOk1TTF9DOk1TTF9NYWNPUzpMaWI6UFBDOk1TTCBD LlBQQy5MaWIiIDsNCg0KICAgIENQICAgICAgICAgICAgICA/PSBkdXBsaWNhdGUgLXkgOw0K ICAgIERPVCAgICAgICAgICAgICA/PSAiOiIgOw0KICAgIERPVERPVCAgICAgICAgICA/PSAi OjoiIDsNCiAgICBIRFJTICAgICAgICAgICAgPz0gJChNQUNIRFJTKSAkKE1QV0hEUlMpIDsN CiAgICBNS0RJUiAgICAgICAgICAgPz0gbmV3Zm9sZGVyIDsNCiAgICBNViAgICAgICAgICAg ICAgPz0gcmVuYW1lIC15IDsNCiAgICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQogICAg T1BUSU0gICAgICAgICAgID89IDsNCiAgICBSTSAgICAgICAgICAgICAgPz0gZGVsZXRlIC15 IDsNCiAgICBTTEFTSCAgICAgICAgICAgPz0gIjoiIDsNCiAgICBTVERIRFJTICAgICAgICAg Pz0gOyANCiAgICBTVUZMSUIgICAgICAgICAgPz0gLmxpYiA7DQogICAgU1VGT0JKICAgICAg ICAgID89IC5vIDsNCn0NCmVsc2UgaWYgJChPUykgPSBCRU9TICYmICQoTUVUUk9XRVJLUykN CnsNCiAgICBBUiAgICAgICAgICAgICAgPz0gbXdsZCAteG1sIC1vIDsNCiAgICBCSU5ESVIg ICAgICAgICAgPz0gL2Jvb3QvYXBwcyA7DQogICAgRk9SVFJBTiAgICAgICAgID89ICIiIDsN CiAgICBMSUJESVIgICAgICAgICAgPz0gL2Jvb3QvZGV2ZWxvcC9saWJyYXJpZXMgOw0KICAg IE1BTkRJUiAgICAgICAgICA/PSAvYm9vdC9kb2N1bWVudGF0aW9uLyJTaGVsbCBUb29scyIv SFRNTCA7DQogICAgTk9BUlNDQU4gICAgICAgID89IHRydWUgOw0KICAgIFNUREhEUlMgICAg ICAgICA/PSAvYm9vdC9kZXZlbG9wL2hlYWRlcnMvcG9zaXggOw0KfQ0KZWxzZSBpZiAkKE9T KSA9IEJFT1MgDQp7DQogICAgQklORElSICAgICAgICAgID89IC9ib290L2FwcHMgOw0KICAg IEZPUlRSQU4gICAgICAgICA/PSAiIiA7DQogICAgTElCRElSICAgICAgICAgID89IC9ib290 L2RldmVsb3AvbGlicmFyaWVzIDsNCiAgICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQog ICAgU1RESERSUyAgICAgICAgID89IC9ib290L2RldmVsb3AvaGVhZGVycy9wb3NpeCA7DQp9 DQplbHNlIGlmICQoVU5JWCkNCnsNCiAgICBzd2l0Y2ggJChPUykNCiAgICB7DQogICAgY2Fz ZSBBSVggOg0KICAgICAgICBJTVBMSUJfRkxBR1MgICAgPz0gLWJJOiA7DQogICAgICAgIFNV RkRMTCAgICAgICAgICA/PSAuc28gOw0KICAgICAgICBnTElOS19WQVJJQUJMRSguc28pID0g TkVFRExJQlMgOyAgIyBzaGFyZWQgbGlicyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxpc3Qg b2YgbGlicyBuZWVkZWQNCiAgICAgICAgZ0xJTktfVkFSSUFCTEUoLmltcCkgPSBORUVESU1Q UyA7ICMgaW1wb3J0IGxpYnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4NCiAgICAgICAgZ1NI RUxMX0xJQlBBVEggPSBMSUJQQVRIIDsNCiAgICAgICAgDQogICAgY2FzZSBBTUlHQSA6DQog ICAgICAgIFlBQ0MgICAgICAgICAgICA/PSBiaXNvbiAteSA7DQoNCiAgICBjYXNlIENZR1dJ TiA6ICAgICAgIA0KICAgICAgICBMRVggICAgICAgICAgICAgPz0gZmxleCA7DQogICAgICAg IFJBTkxJQiAgICAgICAgICA/PSAiIiA7DQogICAgICAgIFNVRkVYRSAgICAgICAgICA/PSAu ZXhlIDsNCiAgICAgICAgWUFDQyAgICAgICAgICAgID89IGJpc29uIC15IDsNCiAgICAgICAg TUtESVIgICAgICAgICAgID89IG1rZGlyIC1wIDsNCiAgICAgICAgU1VGRExMICAgICAgICAg ID89IC5kbGwgOw0KDQogICAgY2FzZSBER1VYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAg ID89ICIiIDsNCiAgICAgICAgUkVMT0NBVEUgICAgICAgID89IHRydWUgOw0KDQogICAgY2Fz ZSBIUFVYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsNCg0KICAgIGNhc2Ug SU5URVJJWCA6DQogICAgICAgIFJBTkxJQiAgICAgICAgICA/PSAiIiA7DQoNCiAgICBjYXNl IElSSVggOg0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KDQogICAgY2FzZSBM SU5VWCA6DQogICAgICAgIENMT05FICAgICAgICAgICA/PSBjcCAtZnBkIDsNCg0KICAgIGNh c2UgTVBFSVggOg0KICAgICAgICBIRFJTICAgICAgICAgICAgKz0gL3Vzci9pbmNsdWRlIDsN CiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsgDQogICAgICAgIE5PQVJTQ0FOICAg ICAgICA/PSB0cnVlIDsNCiAgICAgICAgTk9BUlVQREFURSAgICAgID89IHRydWUgOw0KDQog ICAgY2FzZSBNVlMgOg0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOyANCg0KICAg IGNhc2UgTkVYVCA6DQogICAgICAgIEFSICAgICAgICAgICAgICA/PSBsaWJ0b29sIC1vIDsN CiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsNCg0KICAgIGNhc2UgTUFDT1NYIDoN CiAgICAgICAgTUFORElSICAgICAgICAgID89IC91c3IvbG9jYWwvc2hhcmUvbWFuIDsNCiAg ICAgICAgU1VGRExMICAgICAgICAgID89IC5keWxpYiA7DQogICAgICAgIGdTSEVMTF9MSUJQ QVRIICA/PSBEWUxEX0xJQlJBUllfUEFUSCA7DQogICAgICAgIE5PQVJTQ0FOICAgICAgICA/ PSB0cnVlIDsNCg0KICAgIGNhc2UgTkNSIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89 ICIiIDsNCg0KICAgIGNhc2UgUFRYIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIi IDsNCg0KICAgIGNhc2UgUU5YIDoNCiAgICAgICAgQVIgICAgICAgICAgICAgID89IHdsaWIg Ow0KICAgICAgICBOT0FSU0NBTiAgICAgICAgPz0gdHJ1ZSA7DQogICAgICAgIFJBTkxJQiAg ICAgICAgICA/PSAiIiA7DQoNCiAgICBjYXNlIFNDTyA6DQogICAgICAgIFJBTkxJQiAgICAg ICAgICA/PSAiIiA7DQogICAgICAgIFJFTE9DQVRFICAgICAgICA/PSB0cnVlIDsNCg0KICAg IGNhc2UgU0lOSVggOg0KICAgICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KDQogICAg Y2FzZSBTT0xBUklTIDoNCiAgICAgICAgUkFOTElCICAgICAgICAgID89ICIiIDsNCiAgICAg ICAgQVIgICAgICAgICAgICAgID89ICIvdXNyL2Njcy9iaW4vYXIgcnUiIDsNCg0KICAgIGNh c2UgVU5JQ09TIDoNCiAgICAgICAgTk9BUlNDQU4gICAgICAgID89IHRydWUgOw0KICAgICAg ICBPUFRJTSAgICAgICAgICAgPz0gLU8wIDsNCg0KICAgIGNhc2UgVU5JWFdBUkUgOg0KICAg ICAgICBSQU5MSUIgICAgICAgICAgPz0gIiIgOw0KICAgICAgICBSRUxPQ0FURSAgICAgICAg Pz0gdHJ1ZSA7DQoNCiAgICBjYXNlIE9TRiA6DQogICAgICAgIGdMSU5LX1ZBUklBQkxFKC5z bykgPSBORUVETElCUyA7ICMgc2hhcmVkIG9iamVjdHMgc2hvdWxkIGJlIGFkZGVkIHRvIHRo ZSBsaXN0IG9mIGxpYnMgbmVlZGVkDQogICAgfQ0KDQogICAgIyBVTklYIGRlZmF1bHRzDQog ICAgQ0hNT0QgICAgICAgICAgID89IGNobW9kIDsNCiAgICBMRVggICAgICAgICAgICAgPz0g bGV4IDsNCiAgICBPUFRJTSAgICAgICAgICAgPz0gLU8gOw0KICAgIFJBTkxJQiAgICAgICAg ICA/PSByYW5saWIgOw0KICAgIFlBQ0MgICAgICAgICAgICA/PSB5YWNjIDsNCiAgICBZQUND RklMRVMgICAgICAgPz0geS50YWIgOw0KICAgIFlBQ0NGTEFHUyAgICAgICA/PSAtZCA7DQog ICAgU0hFTExfRVhQT1JUICAgID89ICJleHBvcnQgIiA7DQogICAgU0hFTExfU0VUICAgICAg ID89ICIiIDsNCiAgICBnU0hFTExfTElCUEFUSCAgPz0gTERfTElCUkFSWV9QQVRIIDsNCn0N CiAgICANCiMNCiMgR2VuZXJhbCBkZWZhdWx0czsgYSBsb3QgbGlrZSBVTklYDQojDQoNCkFS ICAgICAgICAgICAgICA/PSBhciBydSA7DQpBUyAgICAgICAgICAgICAgPz0gYXMgOw0KQVNG TEFHUyAgICAgICAgID89IDsNCkFXSyAgICAgICAgICAgICA/PSBhd2sgOw0KQklORElSICAg ICAgICAgID89IC91c3IvbG9jYWwvYmluIDsNCkNMT05FICAgICAgICAgICA/PSAkKENQKSA7 DQpDTE9ORSAgICAgICAgICAgPz0gY3AgLWZwIDsNCkNQICAgICAgICAgICAgICA/PSBjcCAt ZiA7DQpDUkVMSUIgICAgICAgICAgPz0gOw0KRE9UICAgICAgICAgICAgID89IC4gOw0KRE9U RE9UICAgICAgICAgID89IC4uIDsNCkVYRU1PREUgICAgICAgICA/PSA3MTEgOw0KRExMTU9E RSAgICAgICAgID89IDc1NSA7DQpGSUxFTU9ERSAgICAgICAgPz0gNjQ0IDsNCkZPUlRSQU4g ICAgICAgICA/PSBmNzcgOw0KRk9SVFJBTkZMQUdTICAgID89IDsNCkhEUlMgICAgICAgICAg ICA/PSA7DQpKQU1GSUxFICAgICAgICAgPz0gSmFtZmlsZSA7DQpKQU1SVUxFUyAgICAgICAg Pz0gSmFtcnVsZXMgOw0KTEVYICAgICAgICAgICAgID89IDsNCkxJQkRJUiAgICAgICAgICA/ PSAvdXNyL2xvY2FsL2xpYiA7DQpMTiAgICAgICAgICAgICAgPz0gbG4gOw0KTUFORElSICAg ICAgICAgID89IC91c3IvbG9jYWwvbWFuIDsNCk1LRElSICAgICAgICAgICA/PSBta2RpciA7 DQpNViAgICAgICAgICAgICAgPz0gbXYgLWYgOw0KT1BUSU0gICAgICAgICAgID89IDsNClJD UCAgICAgICAgICAgICA/PSByY3AgOw0KUk0gICAgICAgICAgICAgID89IHJtIC1mIDsNClJT SCAgICAgICAgICAgICA/PSByc2ggOw0KU0VEICAgICAgICAgICAgID89IHNlZCA7DQpTSEVM TEhFQURFUiAgICAgPz0gIiMhL2Jpbi9zaCIgOw0KU0hFTExNT0RFICAgICAgID89IDc1NSA7 DQpTSEVMTF9FWFBPUlQgICAgPz0gOw0KU0hFTExfU0VUICAgICAgID89ICIiIDsNClNMQVNI ICAgICAgICAgICA/PSAvIDsNClNQTElUUEFUSCAgICAgICA/PSAiOiIgOyAjIGR3YSAtLSBh ZGRlZCBtaXNzaW5nIFNQTElUUEFUSA0KU1RESERSUyAgICAgICAgID89IC91c3IvaW5jbHVk ZSA7DQpTVUZFWEUgICAgICAgICAgPz0gIiIgOw0KU1VGRExMICAgICAgICAgID89IC5zbyA7 DQpTVUZMSUIgICAgICAgICAgPz0gLmEgOw0KU1VGT0JKICAgICAgICAgID89IC5vIDsNClBS RURMTCAgICAgICAgICA/PSBsaWIgOw0KUFJFTElCICAgICAgICAgID89IGxpYiA7DQpVTkRF RkZMQUcgICAgICAgPz0gIi11IF8iIDsNCllBQ0MgICAgICAgICAgICA/PSA7DQpZQUNDRklM RVMgICAgICAgPz0gOw0KWUFDQ0ZMQUdTICAgICAgID89IDsNCkJJTl9ESVJFQ1RPUlkgICA/ PSBiaW4gOw0KDQpIRFJQQVRURVJOID0gDQogICAgICAgICJeWyAgICAgXSojWyAgICBdKmlu Y2x1ZGVbICAgICAgXSooWzxcIl1bXlwiPl0qW1wiPl0pLiokIiA7DQogICAgICAgICAgDQoj IiBNeSBKYW0gbW9kZSBnZXRzIGl0cyBzeW50YXggaGlnaGxpZ2h0aW5nIGNvbmZ1c2VkIHdp dGhvdXQgdGhpcyBjb21tZW50DQoNCk9TRlVMTCA9ICQoT1MpJChPU1ZFUikkKE9TUExBVCkg JChPUykkKE9TUExBVCkgJChPUykkKE9TVkVSKSAkKE9TKSA7DQoNCiMNCiMgUnVsZSB0byBh dXRvbWF0ZSBwYXRjaGluZyBvZiBzaW5nbGV0b24gdmFyaWFibGVzIGZyb20gdGhlIHVzZXIg c28gdGhhdA0KIyB0aGV5IGFyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUg ZW50cnkgaW5zdGVhZCBvZiBhcyBhIGxpc3QgaWYNCiMgdGhleSBoYXBwZW4gdG8gY29udGFp biBzcGFjZXMuDQojDQojIFRoaXMgYWxzbyByZW1lbWJlcnMgdGhlIGZpcnN0KGdsb2JhbCkg dmFsdWUgc28gdGhhdCBpdCBjYW4gYmUgcmVzZXQNCiMgd2hlbiBjbGVhcmVkLCBidXQgdXNl ZCBhZ2Fpbi4NCiMNCnJ1bGUgc2V0LWFzLXNpbmdsZXRvbiAoIHZhcmlhYmxlcyArICkNCnsN CiAgICBmb3IgbG9jYWwgdmFyaWFibGUgaW4gJCh2YXJpYWJsZXMpDQogICAgew0KICAgICAg ICAkKHZhcmlhYmxlKSA9ICQoJCh2YXJpYWJsZSk6Sj0iICIpIDsNCiAgICAgICAgI34gaWYg ISAkKGdTSU5HTEVUT05fU0VUKCQodmFyaWFibGUpKSkNCiAgICAgICAgI34gew0KICAgICAg ICAgICAgI34gZ1NJTkdMRVRPTigkKHZhcmlhYmxlKSkgPSAkKCQodmFyaWFibGUpKSA7DQog ICAgICAgICAgICAjfiBnU0lOR0xFVE9OX1NFVCgkKHZhcmlhYmxlKSkgPSB0cnVlIDsNCiAg ICAgICAgI34gfQ0KICAgICAgICAjfiAkKHZhcmlhYmxlKSA/PSAkKGdTSU5HTEVUT04oJCh2 YXJpYWJsZSkpKSA7DQogICAgfQ0KfQ0KDQojDQojICJGaXgiIHRoZSBrbm93biBwb3NzaWJs eSBkaXJlY3RvcnkgdmFyaWFibGVzLg0KIw0Kc2V0LWFzLXNpbmdsZXRvbg0KICAgIEJJTkRJ Ug0KICAgIENXDQogICAgSkFNRklMRQ0KICAgIEpBTVJVTEVTDQogICAgSkFNU0hFTEwNCiAg ICBMSUJESVINCiAgICBNQU5ESVINCiAgICBXQVRDT00NCiAgICA7DQoNCiMNCiMgQmFzZSBk ZXBlbmRlbmNpZXMgLSBmaXJzdCBmb3IgImJvb3RzdHJhcCIga2luZHMgb2YgcnVsZXMNCiMN Cg0KIyBkd2EgNi8xNy8wMSAtIGFkZGVkIHRlc3QNCkRFUEVORFMgYWxsIDogc2hlbGwgZmls ZXMgbGliIGRsbCBleGUgb2JqIDsNCkRFUEVORFMgYWxsIHNoZWxsIGZpbGVzIGxpYiBkbGwg ZXhlIG9iaiB0ZXN0IDogZmlyc3QgOw0KTk9URklMRSBhbGwgZmlyc3Qgc2hlbGwgZmlsZXMg bGliIGRsbCBleGUgb2JqIGRpcnMgY2xlYW4gdW5pbnN0YWxsIHRlc3QgOw0KQUxXQVlTIGNs ZWFuIHVuaW5zdGFsbCA7DQoNCiMNCiMgUnVsZXMNCiMNCg0KIyBkd2EgNi80LzAxIC0gYWRk ZWQgZm9yIGJvb3N0DQojIHR5cGUtREVQRU5EUyB0eXBlIDogdGFyZ2V0cy4uLg0KIw0KIyBV c2UgdGhpcyB0byBjcmVhdGUgYSBkZXBlbmRlbmN5IGJldHdlZW4gYSBmYWtlIHR5cGUtdGFy Z2V0IGFuZCBvdGhlciB0YXJnZXRzLiBXaWxsIHByZXZlbnQNCiMgdGFyZ2V0cyBpbiBkZXBl bmRlZSBzdWJwcm9qZWN0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSB0eXBlLXRhcmdldCdz IGRlcGVuZGVuY2llcy4NCnJ1bGUgdHlwZS1ERVBFTkRTICMgdHlwZS10YXJnZXQgOiB0YXJn ZXRzLi4uDQp7DQogICAgaWYgISAkKGdTVVBQUkVTU19GQUtFX1RBUkdFVFMpICYmICEgJChn SU5fTElCX0lOQ0xVREUpDQogICAgew0KICAgICAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsN CiAgICB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBBcmNoaXZl IGZpbGUtdGFyZ2V0IDogc291cmNlcw0KIw0KIyBVc2VkIHRvIGRpc3BhdGNoIHRocm91Z2gg QXJjaGl2ZS1hY3Rpb24sIHdoaWNoIHNob3VsZCBiZSByZWRlZmluZWQgaW4gdG9vbHNldA0K IyBkZXNjcmlwdGlvbiBmaWxlcy4NCnJ1bGUgQXJjaGl2ZQ0Kew0KICAgIEFyY2hpdmUtYWN0 aW9uICQoPCkgOiAkKD4pIDsNCn0NCg0KcnVsZSBBcw0Kew0KICAgIERFUEVORFMgJCg8KSA6 ICQoPikgOw0KICAgIEFTRkxBR1Mgb24gJCg8KSArPSAkKEFTRkxBR1MpICQoU1VCRElSQVNG TEFHUykgOw0KfQ0KDQpydWxlIEJ1bGsNCnsNCiAgICBsb2NhbCBpIDsNCg0KICAgIGZvciBp IGluICQoPikNCiAgICB7DQogICAgICAgIEZpbGUgJChpOkQ9JCg8KSkgOiAkKGkpIDsNCiAg ICB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KIyBmYWN0b3Jl ZCBvdXQgc3R1ZmYgZnJvbSB0aGUgYnVpbHRpbiBDYyBhbmQgQysrIHJ1bGVzDQpydWxlIENj LXBsYXRmb3JtLXNwZWNpZmljcw0Kew0KICAgICMgSWYgdGhlIGNvbXBpbGVyJ3MgLW8gZmxh ZyBkb2Vzbid0IHdvcmssIHJlbG9jYXRlIHRoZSAubw0KDQogICAgaWYgJChSRUxPQ0FURSkN CiAgICB7DQogICAgICAgIENjTXYgJCg8KSA6ICQoPikgOw0KICAgIH0NCg0KICAgIGxvY2Fs IF9oID0gJChTRUFSQ0hfU09VUkNFKSAkKEhEUlMpIDsNCg0KICAgIGlmICQoVk1TKSAmJiAk KF9oKQ0KICAgIHsNCiAgICAgICAgU0xBU0hJTkMgb24gJCg8KSA9ICIvaW5jPSgiICQoX2hb MV0pICwkKF9oWzItXSkgIikiIDsNCiAgICB9DQogICAgZWxzZSBpZiAkKE1BQykgJiYgJChf aCkNCiAgICB7DQogICAgICAgIGxvY2FsIF9pIF9qIDsNCiAgICAgICAgX2ogPSAkKF9oWzFd KSA7DQogICAgICAgIGZvciBfaSBpbiAkKF9oWzItXSkNCiAgICAgICAgew0KICAgICAgICAg ICAgX2ogPSAkKF9qKSwkKF9pKSA7DQogICAgICAgIH0NCiAgICAgICAgTUFDSU5DIG9uICQo PCkgPSBcIiQoX2opXCIgOw0KICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQgZm9y IGJvb3N0DQojIGFsd2F5cy1jKysgZmlsZW5hbWUuLi4NCiMNCiMgZGVjbGFyZXMgdGhhdCB0 aGUgZ2l2ZW4gZmlsZXMgc2hvdWxkIGJlIGNvbXBpbGVkIGFzIEMrKywgcmVnYXJkbGVzcyBv ZiB0aGVpcg0KIyBmaWxlbmFtZSBleHRlbnNpb24uDQpydWxlIGFsd2F5cy1jKysNCnsNCiAg ICBnQUxXQVlTX0MrKyArPSBbIEZHcmlzdEZpbGVzICQoPCkgXSA7DQp9DQoNCiMgZHdhIDYv NC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBDYw0Kew0KICAgIERFUEVORFMgJCg8 KSA6ICQoPikgOw0KDQogICAgQ2MtcGxhdGZvcm0tc3BlY2lmaWNzICQoPCkgOiAkKD4pIDsN Cg0KICAgIGlmICQoPikgaW4gJChnQUxXQVlTX0MrKykNCiAgICB7DQogICAgICAgIEMrKy1h Y3Rpb24gJCg8KSA6ICQoPikgOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBD Yy1hY3Rpb24gJCg8KSA6ICQoPikgOw0KICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9k aWZpZWQgZm9yIGJvb3N0DQpydWxlIEMrKw0Kew0KICAgIERFUEVORFMgJCg8KSA6ICQoPikg Ow0KDQogICAgQ2MtcGxhdGZvcm0tc3BlY2lmaWNzICQoPCkgOiAkKD4pIDsNCiAgICANCiAg ICBDKystYWN0aW9uICQoPCkgOiAkKD4pIDsNCn0NCg0KcnVsZSBDaG1vZA0Kew0KICAgIGlm ICQoQ0hNT0QpIHsgQ2htb2QxICQoPCkgOyB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIGFkZGVk IGZvciBib29zdA0KIyBjb25kaXRpb25hbCA8Y29uZD4gOiA8dHJ1ZS12YWx1ZT4gOiA8ZmFs c2UtdmFsdWU+DQojIHJldHVybnMgPHRydWUtdmFsdWU+IGlmIDxjb25kPiwgPGZhbHNlLXZh bHVlPiBvdGhlcndpc2UNCnJ1bGUgY29uZGl0aW9uYWwNCnsNCiAgICBpZiAkKDEpIHsgcmV0 dXJuICQoMikgOyB9IGVsc2UgeyByZXR1cm4gJCgzKSA7IH0NCn0NCg0KIyBkd2EgNi80LzAx IC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIEZpbGUNCnsNCiAgICB0eXBlLURFUEVORFMg ZmlsZXMgOiAkKDwpIDsNCiAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCiAgICBTRUFSQ0gg b24gJCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KICAgIE1PREUgb24gJCg8KSA9ICQoRklM RU1PREUpIDsNCiAgICBDaG1vZCAkKDwpIDsNCn0NCg0KcnVsZSBGaWxlQ2xvbmUNCnsNCiAg ICB0eXBlLURFUEVORFMgZmlsZXMgOiAkKDwpIDsNCiAgICBERVBFTkRTICQoPCkgOiAkKD4p IDsNCiAgICBTRUFSQ0ggb24gJCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KfQ0KDQpydWxl IEZvcnRyYW4NCnsNCiAgICBERVBFTkRTICQoPCkgOiAkKD4pIDsNCn0NCg0KcnVsZSBHZW5G aWxlIA0Kew0KICAgIGxvY2FsIF90ID0gWyBGR3Jpc3RTb3VyY2VGaWxlcyAkKDwpIF0gOw0K ICAgIGxvY2FsIF9zID0gWyBGQXBwZW5kU3VmZml4ICQoPlsxXSkgOiAkKFNVRkVYRSkgXSA7 DQogICAgRGVwZW5kcyAkKF90KSA6ICQoX3MpICQoPlsyLV0pIDsNCiAgICBHZW5GaWxlMSAk KF90KSA6ICQoX3MpICQoPlsyLV0pIDsNCiAgICBDbGVhbiBjbGVhbiA6ICQoX3QpIDsNCn0N Cg0KcnVsZSBHZW5GaWxlMQ0Kew0KICAgIE1ha2VMb2NhdGUgJCg8KSA6ICQoTE9DQVRFX1NP VVJDRSkgOw0KICAgIFNFQVJDSCBvbiAkKD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQp9DQoN CiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBIYXJkTGluaw0Kew0K ICAgIHR5cGUtREVQRU5EUyBmaWxlcyA6ICQoPCkgOw0KICAgIERFUEVORFMgJCg8KSA6ICQo PikgOw0KICAgIFNFQVJDSCBvbiAkKD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQp9DQoNCnJ1 bGUgSGRyUnVsZQ0Kew0KICAgICMgSGRyUnVsZSBzb3VyY2UgOiBoZWFkZXJzIDsNCg0KICAg ICMgTi5CLiAgVGhpcyBydWxlIGlzIGNhbGxlZCBkdXJpbmcgYmluZGluZywgcG90ZW50aWFs bHkgYWZ0ZXINCiAgICAjIHRoZSBmYXRlIG9mIG1hbnkgdGFyZ2V0cyBoYXMgYmVlbiBkZXRl cm1pbmVkLCBhbmQgbXVzdCBiZQ0KICAgICMgdXNlZCB3aXRoIGNhdXRpb246IGRvbid0IGFk ZCBkZXBlbmRlbmNpZXMgdG8gdW5yZWxhdGVkDQogICAgIyB0YXJnZXRzLCBhbmQgZG9uJ3Qg c2V0IHZhcmlhYmxlcyBvbiAkKDwpLg0KDQogICAgIyBUZWxsIEphbSB0aGF0IGFueXRoaW5n IGRlcGVuZGluZyBvbiAkKDwpIGFsc28gZGVwZW5kcyBvbiAkKD4pLA0KICAgICMgc2V0IFNF QVJDSCBzbyBKYW0gY2FuIGZpbmQgdGhlIGhlYWRlcnMsIGJ1dCB0aGVuIHNheSB3ZSBkb24n dA0KICAgICMgY2FyZSBpZiB3ZSBjYW4ndCBhY3R1YWxseSBmaW5kIHRoZSBoZWFkZXJzICh0 aGV5IG1heSBoYXZlIGJlZW4NCiAgICAjIHdpdGhpbiBpZmRlZnMpLA0KDQogICAgbG9jYWwg YW5nbGUtaW5jbHVkZXMgPSBbIHN1YnN0LWxpc3QgJCg+KSA6ICI8KC4rKT4iIF0gOw0KICAg IGxvY2FsIHF1b3RlZC1pbmNsdWRlcyA9IFsgc3Vic3QtbGlzdCAkKD4pIDogIlwiKC4rKVwi IiBdIDsNCg0KICAgIGxvY2FsIHMgOw0KDQogICAgaWYgJChIRFJHUklTVCkgDQogICAgeyAN CiAgICAgICAgYW5nbGUtaW5jbHVkZXMgPSAkKGFuZ2xlLWluY2x1ZGVzOkc9JChIRFJHUklT VCkpIDsNCiAgICAgICAgcXVvdGVkLWluY2x1ZGVzID0gJChxdW90ZWQtaW5jbHVkZXM6Rz0k KEhEUkdSSVNUKSkgOw0KICAgIH0gDQoNCiAgICBsb2NhbCBzID0gJChhbmdsZS1pbmNsdWRl cykgJChxdW90ZWQtaW5jbHVkZXMpIDsNCg0KICAgIElOQ0xVREVTICQoPCkgOiAkKHMpIDsN CiAgICBTRUFSQ0ggb24gJChhbmdsZS1pbmNsdWRlcykgPSAkKEhEUlNFQVJDSCkgIDsNCiAg ICBTRUFSQ0ggb24gJChxdW90ZWQtaW5jbHVkZXMpID0gJChnQklORElORygkKDwpKTpEKSAk KEhEUlNFQVJDSCkgIDsNCiAgICBOT0NBUkUgJChzKSA7DQoNCiAgICBCSU5EUlVMRSBvbiAk KHMpID0gcmVtZW1iZXItYmluZGluZyA7DQoNCiAgICAjIFByb3BhZ2F0ZSBvbiAkKDwpIHRv ICQoPikNCg0KICAgIEhEUlNFQVJDSCBvbiAkKHMpID0gJChIRFJTRUFSQ0gpIDsNCiAgICBI RFJTQ0FOIG9uICQocykgPSAkKEhEUlNDQU4pIDsNCiAgICBIRFJSVUxFIG9uICQocykgPSAk KEhEUlJVTEUpIDsNCiAgICBIRFJHUklTVCBvbiAkKHMpID0gJChIRFJHUklTVCkgOw0KfQ0K DQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgSW5zdGFsbEludG8N CnsNCiAgICBsb2NhbCBpIHQgOw0KDQogICAgdCA9ICQoPjpHPWluc3RhbGxlZCkgOw0KDQog ICAgdHlwZS1ERVBFTkRTIGluc3RhbGwgOiAkKHQpIDsNCiAgICBERVBFTkRTICQodCkgOiAk KD4pIDsNCiAgICBTRUFSQ0ggb24gJCg+KSA9ICQoU0VBUkNIX1NPVVJDRSkgOw0KICAgIE1h a2VMb2NhdGUgJCh0KSA6ICQoPCkgOw0KDQogICAgIyBBcnJhbmdlIGZvciBqYW0gdW5pbnN0 YWxsDQoNCiAgICBDbGVhbiB1bmluc3RhbGwgOiAkKHQpIDsNCg0KICAgIGZvciBpIGluICQo PikNCiAgICB7DQogICAgICAgIEluc3RhbGwgJChpOkc9aW5zdGFsbGVkKSA6ICQoaSkgOw0K ICAgIH0NCg0KICAgIENobW9kICQodCkgOw0KDQogICAgaWYgJChVTklYKQ0KICAgIHsNCiAg ICAgICAgaWYgJChPV05FUikgeyBDaG93biAkKHQpIDsgT1dORVIgb24gJCh0KSA9ICQoT1dO RVIpIDsgfQ0KICAgICAgICBpZiAkKEdST1VQKSB7IENoZ3JwICQodCkgOyBHUk9VUCBvbiAk KHQpID0gJChHUk9VUCkgOyB9DQogICAgfQ0KfQ0KDQpydWxlIEluc3RhbGxCaW4NCnsNCiAg ICBsb2NhbCBfdCA9IFsgRkFwcGVuZFN1ZmZpeCAkKD4pIDogJChTVUZFWEUpIF0gOw0KDQog ICAgSW5zdGFsbEludG8gJCg8KSA6ICQoX3QpIDsNCiAgICBNT0RFIG9uICQoX3Q6Rz1pbnN0 YWxsZWQpID0gJChFWEVNT0RFKSA7DQp9DQoNCnJ1bGUgSW5zdGFsbEZpbGUNCnsNCiAgICBJ bnN0YWxsSW50byAkKDwpIDogJCg+KSA7DQogICAgTU9ERSBvbiAkKD46Rz1pbnN0YWxsZWQp ID0gJChGSUxFTU9ERSkgOw0KfQ0KDQpydWxlIEluc3RhbGxMaWINCnsNCiAgICBJbnN0YWxs SW50byAkKDwpIDogJCg+KSA7DQogICAgTU9ERSBvbiAkKD46Rz1pbnN0YWxsZWQpID0gJChG SUxFTU9ERSkgOw0KfQ0KDQpydWxlIEluc3RhbGxNYW4NCnsNCiAgICAjIFJlYWxseSB0aGlz IGp1c3Qgc3RyaXBzIHRoZSAuIGZyb20gdGhlIHN1ZmZpeA0KDQogICAgbG9jYWwgaSBzIGQg Ow0KDQogICAgZm9yIGkgaW4gJCg+KQ0KICAgIHsNCiAgICAgICAgc3dpdGNoICQoaTpTKQ0K ICAgICAgICB7DQogICAgICAgIGNhc2UgLjEgOiBzID0gMSA7IGNhc2UgLjIgOiBzID0gMiA7 IGNhc2UgLjMgOiBzID0gMyA7DQogICAgICAgIGNhc2UgLjQgOiBzID0gNCA7IGNhc2UgLjUg OiBzID0gNSA7IGNhc2UgLjYgOiBzID0gNiA7DQogICAgICAgIGNhc2UgLjcgOiBzID0gNyA7 IGNhc2UgLjggOiBzID0gOCA7IGNhc2UgLmwgOiBzID0gbCA7DQogICAgICAgIGNhc2UgLm4g OiBzID0gbiA7IGNhc2UgLm1hbiA6IHMgPSAxIDsNCiAgICAgICAgfQ0KDQogICAgICAgIGQg PSBtYW4kKHMpIDsNCg0KICAgICAgICBJbnN0YWxsSW50byAkKGQ6Uj0kKDwpKSA6ICQoaSkg Ow0KICAgIH0NCg0KICAgIE1PREUgb24gJCg+Okc9aW5zdGFsbGVkKSA9ICQoRklMRU1PREUp IDsNCn0NCg0KcnVsZSBJbnN0YWxsU2hlbGwNCnsNCiAgICBJbnN0YWxsSW50byAkKDwpIDog JCg+KSA7DQogICAgTU9ERSBvbiAkKD46Rz1pbnN0YWxsZWQpID0gJChTSEVMTE1PREUpIDsN Cn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIExleCAjIGZp bGUuYyA6IGZpbGUubA0Kew0KICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBzcGVj aWZ5aW5nIHRoZSBsZXggb3V0cHV0IGZpbGUsIHdlJ2xsIGhhdmUgdG8gbW92ZSBpdA0KICAg ICMgV2UnZCByYXRoZXIgbm90IGRvIHRoaXMgaWYgcG9zc2libGUgYmVjYXVzZTogYS4gbGV4 IGdlbmVyYXRlcyAjbGluZQ0KICAgICMgZGlyZWN0aXZlcyBmb3IgdGhlIG91dHB1dCBmaWxl IHdoaWNoIHdvdWxkIHJlZmVyIHRvIHRoZSB3cm9uZyBwbGFjZSBhbmQNCiAgICAjIGIuIHRo ZSBKYW0gaW52b2NhdGlvbiBkaXJlY3RvcnkgY291bGQgYmUgcmVhZC1vbmx5DQogICAgaWYg ISAkKExFWF9PVVRQVVQpDQogICAgew0KICAgICAgICBMZXhNdiAkKDwpIDogJCg+KSA7DQog ICAgfQ0KICAgIA0KICAgIERFUEVORFMgJCg8KSA6ICQoPikgOw0KICAgIE1ha2VMb2NhdGUg JCg8KSA6ICQoTE9DQVRFX1NPVVJDRSkgOw0KICAgIFNFQVJDSCBvbiAkKDwpID0gJChMT0NB VEVfU09VUkNFKSA7DQogICAgQ2xlYW4gY2xlYW4gOiAkKDwpIDsNCn0NCg0KIyBkd2EgNi80 LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIExpYnJhcnkNCnsNCiAgICBMaWJyYXJ5 RnJvbU9iamVjdHMgJCg8KSA6IFsgT2JqZWN0cyAkKD4pIF0gOw0KfQ0KDQojIGR3YSA2LzQv MDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgTGlicmFyeUZyb21PYmplY3RzDQp7DQog ICAgbG9jYWwgX2kgX2wgOw0KDQogICAgX2wgPSAkKDw6Uz0kKFNVRkxJQikpIDsNCg0KICAg ICMgbGlicmFyeSBkZXBlbmRzIG9uIGl0cyBtZW1iZXIgb2JqZWN0cw0KDQogICAgaWYgJChL RUVQT0JKUykNCiAgICB7DQogICAgICAgIHR5cGUtREVQRU5EUyBvYmogOiAkKD4pIDsNCiAg ICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgdHlwZS1ERVBFTkRTIGxpYiA6ICQoX2wp IDsNCiAgICB9DQoNCiAgICAjIFNldCBMT0NBVEUgZm9yIHRoZSBsaWJyYXJ5IGFuZCBpdHMg Y29udGVudHMuICBUaGUgYm91bmQNCiAgICAjIHZhbHVlIHNob3dzIHVwIGFzICQoTkVFRExJ QlMpIG9uIHRoZSBMaW5rIGFjdGlvbnMuDQogICAgIyBGb3IgY29tcGF0aWJpbGl0eSwgd2Ug b25seSBkbyB0aGlzIGlmIHRoZSBsaWJyYXJ5IGRvZXNuJ3QNCiAgICAjIGFscmVhZHkgaGF2 ZSBhIHBhdGguDQoNCiAgICBpZiAhICQoX2w6RCkNCiAgICB7DQogICAgICAgIE1ha2VMb2Nh dGUgJChfbCkgJChfbCkoJCg+OkJTKSkgOiAkKExPQ0FURV9UQVJHRVQpIDsNCiAgICB9DQoN CiAgICBpZiAkKE5PQVJTQ0FOKSANCiAgICB7IA0KICAgICAgICAjIElmIHdlIGNhbid0IHNj YW4gdGhlIGxpYnJhcnkgdG8gdGltZXN0YW1wIGl0cyBjb250ZW50cywNCiAgICAgICAgIyB3 ZSBoYXZlIHRvIGp1c3QgbWFrZSB0aGUgbGlicmFyeSBkZXBlbmQgZGlyZWN0bHkgb24gdGhl DQogICAgICAgICMgb24tZGlzayBvYmplY3QgZmlsZXMuICANCg0KICAgICAgICBERVBFTkRT ICQoX2wpIDogJCg+KSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICMgSWYg d2UgY2FuIHNjYW4gdGhlIGxpYnJhcnksIHdlIG1ha2UgdGhlIGxpYnJhcnkgZGVwZW5kDQog ICAgICAgICMgb24gaXRzIG1lbWJlcnMgYW5kIGVhY2ggbWVtYmVyIGRlcGVuZCBvbiB0aGUg b24tZGlzaw0KICAgICAgICAjIG9iamVjdCBmaWxlLg0KDQogICAgICAgIERFUEVORFMgJChf bCkgOiAkKF9sKSgkKD46QlMpKSA7DQoNCiAgICAgICAgZm9yIF9pIGluICQoPikNCiAgICAg ICAgew0KICAgICAgICAgICAgREVQRU5EUyAkKF9sKSgkKF9pOkJTKSkgOiAkKF9pKSA7DQog ICAgICAgIH0NCiAgICB9DQoNCiAgICBDbGVhbiBjbGVhbiA6ICQoX2wpIDsNCg0KICAgIGlm ICQoQ1JFTElCKSB7IENyZUxpYiAkKF9sKSA6ICQoPlsxXSkgOyB9DQoNCiAgICBBcmNoaXZl ICQoX2wpIDogJCg+KSA7DQoNCiAgICBpZiAkKFJBTkxJQikgeyBSYW5saWIgJChfbCkgOyB9 DQoNCiAgICAjIElmIHdlIGNhbid0IHNjYW4gdGhlIGxpYnJhcnksIHdlIGhhdmUgdG8gbGVh dmUgdGhlIC5vJ3MgYXJvdW5kLg0KDQogICAgaWYgISAoICQoTk9BUlNDQU4pIHx8ICQoS0VF UE9CSlMpICkgeyBSbVRlbXBzICQoX2wpIDogJCg+KSA7IH0NCn0NCg0KIyBkd2EgNi80LzAx IC0gbW9kaWZpZWQgZm9yIGJvb3N0IHRvIGRpc3BhdGNoIHRocm91Z2ggTGluay1hY3Rpb24g YW5kIHRvIHBhc3MNCiMgdGhlIHRhcmdldC10eXBlIHRocm91Z2guICoqKiBOT1cgVU5VU0VE IEJZIEJPT1NUICoqKg0KIw0KIyBMaW5rIGV4ZWN1dGFibGUtdGFyZ2V0IDogb2JqZWN0LXRh cmdldC4uLg0KcnVsZSBMaW5rDQp7DQogICAgTU9ERSBvbiAkKDwpID0gJChFWEVNT0RFKSA7 DQogICAgTGluay1hY3Rpb24gJCg8KSA6ICQoPikgOiAkKDMpIDsNCiAgICBDaG1vZCAkKDwp IDsNCn0NCg0KcnVsZSBMaW5rTGlicmFyaWVzDQp7DQogICAgIyBtYWtlIGxpYnJhcnkgZGVw ZW5kZW5jaWVzIG9mIHRhcmdldA0KICAgICMgc2V0IE5FRURMSUJTIHZhcmlhYmxlIHVzZWQg YnkgJ2FjdGlvbnMgTWFpbicNCg0KICAgIGxvY2FsIF90ID0gWyBGQXBwZW5kU3VmZml4ICQo PCkgOiAkKFNVRkVYRSkgXSA7DQoNCiAgICBERVBFTkRTICQoX3QpIDogJCg+OlM9JChTVUZM SUIpKSA7DQogICAgTkVFRExJQlMgb24gJChfdCkgKz0gJCg+OlM9JChTVUZMSUIpKSA7DQp9 DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBNYWluDQp7DQog ICAgTWFpbkZyb21PYmplY3RzICQoPCkgOiBbIE9iamVjdHMgJCg+KSBdIDsNCn0NCg0KIyBk d2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxlIE1haW5Gcm9tT2JqZWN0cw0K ew0KICAgIGxvY2FsIF9zIF90IDsNCg0KICAgICMgQWRkIGdyaXN0IHRvIGZpbGUgbmFtZXMN CiAgICAjIEFkZCBzdWZmaXggdG8gZXhlDQoNCiAgICBfcyA9ICQoPikgOw0KICAgIF90ID0g WyBGQXBwZW5kU3VmZml4ICQoPCkgOiAkKFNVRkVYRSkgXSA7DQoNCiAgICBpZiAkKF90KSAh PSAkKDwpDQogICAgew0KICAgICAgICBERVBFTkRTICQoPCkgOiAkKF90KSA7DQogICAgICAg IE5PVEZJTEUgJCg8KSA7DQogICAgfQ0KDQogICAgIyBtYWtlIGNvbXBpbGVkIHNvdXJjZXMg YSBkZXBlbmRlbmN5IG9mIHRhcmdldA0KDQogICAgdHlwZS1ERVBFTkRTIGV4ZSA6ICQoX3Qp IDsNCiAgICBERVBFTkRTICQoX3QpIDogJChfcykgOw0KICAgIE1ha2VMb2NhdGUgJChfdCkg OiAkKExPQ0FURV9UQVJHRVQpIDsNCg0KICAgIENsZWFuIGNsZWFuIDogJChfdCkgOw0KDQog ICAgTGluayAkKF90KSA6ICQoX3MpIDsNCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQg Zm9yIGJvb3N0DQpydWxlIE1ha2VMb2NhdGUNCnsNCiAgICBpZiAkKD4pDQogICAgew0KICAg ICAgICBMT0NBVEUgb24gJCg8KSA9ICQoPikgOw0KDQogICAgICAgICMgcHJvdmlkZSBhIHdh eSB0byBnZXQgYmFjayB0aGUgbG9jYXRpb24gZnJvbSBhIGJ1aWx0IHRhcmdldCBuYW1lLg0K ICAgICAgICBnTE9DQVRFKCQoPCkpID0gJCg+KSA7IA0KICAgICAgICANCiAgICAgICAgIyBX ZSBhZGQgZGlyZWN0b3J5LWdyaXN0IGhlcmUgc28gdGhhdCBpbXBsaWNpdGx5LWNyZWF0ZWQg ZGlyZWN0b3J5DQogICAgICAgICMgdGFyZ2V0IG5hbWVzIGRvbid0IGNvbGxpZGUgd2l0aCB1 c2VyLXNwZWNpZmllZCB0YXJnZXRzLg0KICAgICAgICBEZXBlbmRzICQoPCkgOiBbIE1rRGly ICQoPlsxXTpHPWRpcmVjdG9yeS1ncmlzdCkgXSA7DQogICAgfQ0KfQ0KDQojIG5vdyByZXR1 cm5zIHRoZSBjcmVhdGVkIGRpcmVjdG9yeSB0YXJnZXQgLS0gZHdhDQpydWxlIE1rRGlyDQp7 DQogICAgIyBJZiBkaXIgZXhpc3RzLCBkb24ndCB1cGRhdGUgaXQNCiAgICAjIERvIHRoaXMg ZXZlbiBmb3IgJChET1QpLg0KDQogICAgbG9jYWwgZGlyID0gJCg8KSA7DQogICAgaWYgJChO VCkNCiAgICB7DQogICAgICAgICMgbWFrZSBzdXJlIHNsYXNoZXMgYWxsIGdvIHRoZSByaWdo dCB3YXkNCiAgICAgICAgZGlyID0gWyBzcGxpdC1wYXRoICQoZGlyKSBdIDsNCiAgICAgICAg ZGlyID0gJChkaXI6Sj0kKFNMQVNIKSkgOw0KICAgIH0NCiAgICANCiAgICBsb2NhbCByZXN1 bHQgPSAkKGRpcikgOw0KICAgIA0KICAgIHdoaWxlICQoZGlyKSAmJiAoICQoZGlyKSAhPSAk KERPVCkgKSAmJiAhICQoJChkaXIpLW1rZGlyKSANCiAgICB7DQogICAgICAgICMgQ2hlZXN5 IGdhdGUgdG8gcHJldmVudCBtdWx0aXBsZSBpbnZvY2F0aW9ucyBvbiBzYW1lIGRpcg0KICAg ICAgICAjIE1rRGlyMSBoYXMgdGhlIGFjdGlvbnMgDQogICAgICAgICMgQXJyYW5nZSBmb3Ig amFtIGRpcnMNCg0KICAgICAgICAkKGRpciktbWtkaXIgPSB0cnVlIDsNCiAgICAgICAgTWtE aXIxICQoZGlyKSA7DQogICAgICAgIERlcGVuZHMgZGlycyA6ICQoZGlyKSA7DQogICAgICAg IE5PVVBEQVRFICQoZGlyKSA7DQoNCg0KICAgICAgICAjIFJlY3Vyc2l2ZWx5IG1ha2UgcGFy ZW50IGRpcmVjdG9yaWVzLg0KICAgICAgICAjICQoZGlyOlApID0gJChkaXIpJ3MgcGFyZW50 LCAmIHdlIHJlY3Vyc2UgdW50aWwgcm9vdA0KDQogICAgICAgIGxvY2FsIHMgPSAkKGRpcjpQ KSA7DQoNCiAgICAgICAgaWYgJChOVCkNCiAgICAgICAgew0KICAgICAgICAgICAgc3dpdGNo ICQocykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgIGNhc2UgKjogICA6IHMgPSA7DQog ICAgICAgICAgICBjYXNlICo6XFwgOiBzID0gOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQoNCiAgICAgICAgaWYgJChzKSAmJiAkKHMpICE9ICQoZGlyKQ0KICAgICAgICB7DQogICAg ICAgICAgICBEZXBlbmRzICQoZGlyKSA6ICQocykgOw0KICAgICAgICAgICAgZGlyID0gJChz KSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSANCiAgICAgICAgew0KICAgICAgICAgICAg ZGlyID0gOyAjIHN0b3AgaXRlcmF0aW5nDQogICAgICAgICAgICBpZiAkKHMpIHsgTk9URklM RSAkKHMpIDsgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0K fQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCnJ1bGUgT2JqZWN0DQp7 DQogICAgbG9jYWwgaCA7DQoNCiAgICB0eXBlLURFUEVORFMgb2JqIDogJCg8KSA7DQogICAg c2V0LXRhcmdldC12YXJpYWJsZXMgJCg8KSA7DQogICAgDQogICAgIyBNYWtlIGl0IHBvc3Np YmxlIHRvIGNvbXBpbGUgYSBnaXZlbiBzb3VyY2UgZmlsZSBieSBnaXZpbmcgaXRzDQogICAg IyBvYmplY3QgZmlsZSBuYW1lIGFzIGEgdGFyZ2V0Lg0KICAgIHR5cGUtREVQRU5EUyAkKDw6 Rz0pIDogJCg8KSA7IA0KICAgIA0KICAgICMgbG9jYXRlIG9iamVjdCBhbmQgc2VhcmNoIGZv ciBzb3VyY2UsIGlmIHdhbnRlZA0KDQogICAgQ2xlYW4gY2xlYW4gOiAkKDwpIDsNCg0KICAg IE1ha2VMb2NhdGUgJCg8KSA6ICQoTE9DQVRFX1RBUkdFVCkgOw0KICAgIFNFQVJDSCBvbiAk KD4pID0gJChTRUFSQ0hfU09VUkNFKSA7DQoNCiAgICAjIFNhdmUgSERSUyBmb3IgLUkkKEhE UlMpIG9uIGNvbXBpbGUuDQogICAgIyBXZSBzaG91bGRuJ3QgbmVlZCAtSSQoU0VBUkNIX1NP VVJDRSkgYXMgY2MgY2FuIGZpbmQgaGVhZGVycw0KICAgICMgaW4gdGhlIC5jIGZpbGUncyBk aXJlY3RvcnksIGJ1dCBnZW5lcmF0ZWQgLmMgZmlsZXMgKGZyb20NCiAgICAjIHlhY2MsIGxl eCwgZXRjKSBhcmUgbG9jYXRlZCBpbiAkKExPQ0FURV9UQVJHRVQpLCBwb3NzaWJseQ0KICAg ICMgZGlmZmVyZW50IGZyb20gJChTRUFSQ0hfU09VUkNFKS4NCg0KICAgICMgVXNlIHVuaXF1 ZSB0byBjbGVhbiB1cCBjb25mdXNpbmcgZHVwbGljYXRlcyBhIGJpdA0KICAgIEhEUlMgb24g JCg8KSA9IFsgdW5pcXVlICQoTE9DQVRFX1NPVVJDRSkgJChIRFJTKSBdIDsNCg0KICAgICMg U2V0IFNUREhEUlMgb24gdGhlIG9iamVjdCBzbyB0aGF0IG11bHRpLWNvbXBpbGVyIGJ1aWxk cyB3aWxsIHNlYXJjaCBmb3INCiAgICAjIGhlYWRlcnMgaW4gdGhlIHJpZ2h0IHBsYWNlcy4g DQogICAgU1RESERSUyBvbiAkKDwpID0gJChTVERIRFJTKSA7DQoNCiAgICAjIGhhbmRsZSAj aW5jbHVkZXMgZm9yIHNvdXJjZTogSmFtIHNjYW5zIGZvciBoZWFkZXJzIHdpdGgNCiAgICAj IHRoZSByZWdleHAgcGF0dGVybiAkKEhEUlNDQU4pIGFuZCB0aGVuIGludm9rZXMgJChIRFJS VUxFKQ0KICAgICMgd2l0aCB0aGUgc2Nhbm5lZCBmaWxlIGFzIHRoZSB0YXJnZXQgYW5kIHRo ZSBmb3VuZCBoZWFkZXJzDQogICAgIyBhcyB0aGUgc291cmNlcy4gIEhEUlNFQVJDSCBpcyB0 aGUgdmFsdWUgb2YgU0VBUkNIIHVzZWQgZm9yDQogICAgIyB0aGUgZm91bmQgaGVhZGVyIGZp bGVzLiAgRmluYWxseSwgaWYgamFtIG11c3QgZGVhbCB3aXRoIA0KICAgICMgaGVhZGVyIGZp bGVzIG9mIHRoZSBzYW1lIG5hbWUgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzLA0KICAgICMg dGhleSBjYW4gYmUgZGlzdGluZ3Vpc2hlZCB3aXRoIEhEUkdSSVNULg0KDQogICAgIyAkKGgp IGlzIHdoZXJlIGNjIGZpcnN0IGxvb2tzIGZvciAjaW5jbHVkZSAiZm9vLmgiIGZpbGVzLg0K ICAgICMgSWYgdGhlIHNvdXJjZSBmaWxlIGlzIGluIGEgZGlzdGFudCBkaXJlY3RvcnksIGxv b2sgdGhlcmUuDQogICAgIyBFbHNlLCBsb29rIGluICIiICh0aGUgY3VycmVudCBkaXJlY3Rv cnkpLg0KDQogICAgaWYgJChTRUFSQ0hfU09VUkNFKQ0KICAgIHsNCiAgICAgICAgaCA9ICQo U0VBUkNIX1NPVVJDRSkkKFNMQVNIKSQoPjpEKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7 DQogICAgICAgIGggPSAkKD46RCkgOw0KICAgIH0NCg0KICAgIEhEUlJVTEUgb24gJCg+KSA9 IEhkclJ1bGUgOw0KICAgIEhEUlNDQU4gb24gJCg+KSA9ICQoSERSUEFUVEVSTikgOw0KICAg IEhEUlNFQVJDSCBvbiAkKD4pID0gJChIRFJTKSAkKGgpICQoU1RESERSUykgOw0KICAgIEhE UkdSSVNUIG9uICQoPikgPSAkKEhEUkdSSVNUKSA7DQoNCiAgICAjIGlmIHNvdXJjZSBpcyBu b3QgLmMsIGdlbmVyYXRlIC5jIHdpdGggc3BlY2lmaWMgcnVsZQ0KDQogICAgIyBtYWtlIHN1 cmUgd2UgZG9uJ3QgZ2VuZXJhdGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLg0KICAgIGlmICEg JChnR0VORVJBVEVEX1RBUkdFVCgkKDwpKSkNCiAgICB7DQogICAgICAgIHN3aXRjaCAkKD46 UykNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAuYXNtIDogQXMgJCg8KSA6ICQoPikg Ow0KICAgICAgICAgICAgY2FzZSAuYyA6ICAgQ2MgJCg8KSA6ICQoPikgOw0KICAgICAgICAg ICAgY2FzZSAuQyA6ICAgQysrICQoPCkgOiAkKD4pIDsNCiAgICAgICAgICAgIGNhc2UgLmNj IDogIEMrKyAkKDwpIDogJCg+KSA7DQogICAgICAgICAgICBjYXNlIC5jcHAgOiBDKysgJCg8 KSA6ICQoPikgOw0KICAgICAgICAgICAgY2FzZSAuY3h4IDogQysrICQoPCkgOiAkKD4pIDsN CiAgICAgICAgICAgIGNhc2UgLmYgOiAgIEZvcnRyYW4gJCg8KSA6ICQoPikgOw0KICAgICAg ICAgICAgY2FzZSAucyA6ICAgQXMgJCg8KSA6ICQoPikgOw0KICAgICAgICAgICAgY2FzZSAq IDogICAgVXNlck9iamVjdCAkKDwpIDogJCg+KSA7DQogICAgICAgIH0NCiAgICAgICAgZ0dF TkVSQVRFRF9UQVJHRVQoJCg8KSkgPSB0cnVlIDsNCiAgICB9DQp9DQogICAgDQojIGR3YSA2 LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgUmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG9i amVjdCBmaWxlIHRhcmdldCBuYW1lcyBnaXZlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGUNCiMg dGFyZ2V0IG5hbWVzLg0KcnVsZSBvYmplY3QtbmFtZSAjIHNvdXJjZXMuLi4NCnsNCiAgICBy ZXR1cm4gJCg8OkQ9OlM9JChTVUZPQkopOkc9JChUQVJHRVRfR1JJU1QpKSA7DQp9DQoNCiMg ZHdhIDYvNC8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBCdWlsZCBhIGdlbmVyYXRlZCBzb3Vy Y2UgZmlsZSBmcm9tIGlucHV0LXRhcmdldCwgYW5kIGJ1aWxkIHdoYXRldmVyIHRoYXQgZmls ZSBnZW5lcmF0ZXMuDQojIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9iamVjdCB0YXJnZXQgbmFt ZXMgdWx0aW1hdGVseSBnZW5lcmF0ZWQgYnkgcmVjdXJzaXZlbHkNCiMgYnVpbGRpbmcgdGhl IHByb2R1Y3RzIG9mIGlucHV0LXRhcmdldC4NCnJ1bGUgZ2VuLXNvdXJjZSAjIHNvdXJjZSA9 PiBvYmplY3QtZmlsZS1uYW1lcw0Kew0KICAgIGxvY2FsIHN1ZmZpeCA9IC5jIDsNCiAgICBp ZiAkKDw6UykgaW4gLmxwcCAueXBwDQogICAgew0KICAgICAgICBzdWZmaXggPSAuY3BwIDsN CiAgICB9DQogICAgDQogICAgbG9jYWwgaW1tZWRpYXRlLXRhcmdldCA9ICQoPDpEPTpTPSQo c3VmZml4KTpHPSQoU09VUkNFX0dSSVNUKSkgOw0KICAgICMgbWFrZSBzdXJlIHdlIGRvbid0 IHJlZ2VuZXJhdGUgc291cmNlcyB0d2ljZS4NCiAgICBpZiAhICQoZ0dFTkVSQVRFRF9UQVJH RVQoJChpbW1lZGlhdGUtdGFyZ2V0KSkpDQogICAgew0KICAgICAgICBzd2l0Y2ggJCg8OlMp DQogICAgICAgIHsNCiAgICAgICAgIGNhc2UgLmwqIDogTGV4ICQoaW1tZWRpYXRlLXRhcmdl dCkgOiAkKDwpIDsgU0VBUkNIIG9uICQoPCkgPSAkKFNFQVJDSF9TT1VSQ0UpIDsNCiAgICAg ICAgIGNhc2UgLnkqIDogWWFjYyAkKGltbWVkaWF0ZS10YXJnZXQpIDogJCg8KSA7IFNFQVJD SCBvbiAkKDwpID0gJChTRUFSQ0hfU09VUkNFKSA7DQogICAgICAgIH0NCiAgICAgICAgZ0dF TkVSQVRFRF9UQVJHRVQoJChpbW1lZGlhdGUtdGFyZ2V0KSkgPSB0cnVlIDsNCiAgICB9DQog ICAgcmV0dXJuIFsgT2JqZWN0cyAkKGltbWVkaWF0ZS10YXJnZXQpIF0gOw0KfQ0KDQojIGR3 YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgQSBsaXN0IG9mIGFsbCBmaWxlIGV4dGVu c2lvbnMgd2hpY2ggZ2VuZXJhdGUgc291cmNlIGZpbGVzIHdoZW4gYnVpbHQuDQpTT1VSQ0Vf R0VORVJBVElOR19FWFRFTlNJT05TID89IC5scHAgLnlwcCAubCAueSA7DQoNCiMgZHdhIDYv NC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KIyBCdWlsZCBhbGwgb2JqZWN0IGZpbGVzIGdl bmVyYXRlZCBieSBidWlsZGluZyAkKDwpLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUNCiMg bmFtZXMgb2YgdGhvc2Ugb2JqZWN0IGZpbGUgdGFyZ2V0cy4NCnJ1bGUgT2JqZWN0cw0Kew0K ICAgIGxvY2FsIF9pIF9uIF9yIDsNCg0KDQogICAgZm9yIF9pIGluICQoPCkNCiAgICB7DQog ICAgICAgIGlmICQoX2k6UykgaW4gJChTT1VSQ0VfR0VORVJBVElOR19FWFRFTlNJT05TKQ0K ICAgICAgICB7DQogICAgICAgICAgICBfbiA9IFsgZ2VuLXNvdXJjZSAkKF9pKSBdIDsNCiAg ICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIF9uID0gWyBv YmplY3QtbmFtZSAkKF9pKSBdIDsNCiAgICAgICAgICAgIE9iamVjdCAkKF9uKSA6ICQoX2kp IDsNCiAgICAgICAgfQ0KICAgICAgICBfciArPSAkKF9uKSA7DQogICAgfQ0KICAgIA0KICAg IHJldHVybiAkKF9yKSA7DQp9DQoNCnJ1bGUgUm1UZW1wcw0Kew0KICAgIFRFTVBPUkFSWSAk KD4pIDsNCn0NCg0KcnVsZSBTZXR1aWQNCnsNCiAgICBNT0RFIG9uIFsgRkFwcGVuZFN1ZmZp eCAkKDwpIDogJChTVUZFWEUpIF0gPSA0NzExIDsNCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9k aWZpZWQgZm9yIGJvb3N0DQpydWxlIFNoZWxsDQp7DQogICAgdHlwZS1ERVBFTkRTIHNoZWxs IDogJCg8KSA7DQogICAgREVQRU5EUyAkKDwpIDogJCg+KSA7DQogICAgU0VBUkNIIG9uICQo PikgPSAkKFNFQVJDSF9TT1VSQ0UpIDsNCiAgICBNT0RFIG9uICQoPCkgPSAkKFNIRUxMTU9E RSkgOw0KICAgIENsZWFuIGNsZWFuIDogJCg8KSA7DQogICAgQ2htb2QgJCg8KSA7DQp9DQoN CiMgZHdhIDYvNy8wMSAtIGFkZGVkIGZvciBib29zdA0KIyBzdWJwcm9qZWN0IHBhdGgNCiMN CiMgSW52b2tlcyBTdWJEaXIgd2l0aCBhIHBhdGggZGVzY3JpcHRpb24NCnJ1bGUgc3VicHJv amVjdA0Kew0KICAgIFN1YkRpciBUT1AgWyBzcGxpdC1wYXRoICQoPCkgXSA7DQp9DQoNCiMg ZHdhIDYvMTgvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgcHJvamVjdC1yb290DQojDQojIERl Y2xhcmVzIHRoaXMgZGlyZWN0b3J5IHRvIGJlIHRoZSBwcm9qZWN0IHJvb3QuDQpydWxlIHBy b2plY3Qtcm9vdCAoICkNCnsNCiAgICBsb2NhbCBwcm9qZWN0LWxvY2F0aW9uIDsNCiAgICBp ZiAkKGdUT1ApDQogICAgew0KICAgICAgICBwcm9qZWN0LWxvY2F0aW9uID0gWyByb290LXBh dGhzICQoJChnVE9QKSkgOiBbIFBXRCBdIF0gOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0K ICAgICAgICBwcm9qZWN0LWxvY2F0aW9uID0gWyBQV0QgXSA7DQogICAgfQ0KICAgIGxvY2Fs IG5hbWUgOw0KICAgIG5hbWUgPSAkKFBST0pFQ1QoJChwcm9qZWN0LWxvY2F0aW9uKSkpIDsN CiAgICBuYW1lID89ICQocHJvamVjdC1sb2NhdGlvbjpCKSA7DQogICAgUFJPSkVDVCA9ICQo bmFtZSkgOw0KICAgIGdQUk9KRUNUKCQobmFtZSkpID0gJChwcm9qZWN0LWxvY2F0aW9uKSA7 DQogICAgU3ViRGlyIFRPUCA7DQp9DQoNCiMgZ3JhZmlrLg0KIw0KIyBEZWNsYXJlIGVpdGhl ciB5b3VyIG93biBwcm9qZWN0LCBvciBhbiBleHRlcm5hbCBwcm9qZWN0Lg0KIw0KcnVsZSBw cm9qZWN0ICggbmFtZSA6IGxvY2F0aW9uID8gKQ0Kew0KICAgIGlmICEgJChsb2NhdGlvbikN CiAgICB7DQogICAgICAgIGdQUk9KRUNUKCQobmFtZSkpID0gJChnUFJPSkVDVCgkKFBST0pF Q1QpKSkgOw0KICAgICAgICBQUk9KRUNUKCQoZ1BST0pFQ1QoJChuYW1lKSkpKSA9ICQobmFt ZSkgOw0KICAgICAgICBQUk9KRUNUID0gJChuYW1lKSA7DQogICAgfQ0KICAgIGVsc2UNCiAg ICB7DQogICAgICAgIGdQUk9KRUNUKCQobmFtZSkpID0gWyByb290LXBhdGhzICQobG9jYXRp b24pIDogWyByb290LXBhdGhzICQoJChnVE9QKSkgOiBbIFBXRCBdIF0gXSA7DQogICAgICAg IGxvY2FsIFsgcHJvdGVjdC1zdWJwcm9qZWN0IF0gOw0KICAgICAgICBlbnRlci1zdWJwcm9q ZWN0IEAkKG5hbWUpIDsNCiAgICB9DQp9DQoNCiMgZ3JhZmlrLg0KIw0KIyBSZXR1cm5zIHRo ZSBzZXQgb2YgdmFycyB0byBsb2NhbGl6ZSB0byBwcmV2ZW50IGNoYW5nZXMgZnJvbQ0KIyBh ZmZlY3RpbmcgdGhlIGN1cnJlbnQgcHJvamVjdC4gQWxzbyByZW1lbWJlcnMgdGhlIGN1cnJl bnQgdmFsdWVzDQojIHRvIHVzZSBieSBlbnRlci1zdWJwcm9qZWN0IHRvIHNldCB0aGUgZGVm YXVsdHMgZm9yIHRoZSBuZXcgdmFycy4NCiMNCnJ1bGUgcHJvdGVjdC1zdWJwcm9qZWN0ICgg KQ0Kew0KICAgIC5UT1AgPSAkKFRPUCkgOw0KICAgIC5UT1BfVE9LRU5TID0gJChUT1BfVE9L RU5TKSA7DQogICAgLmdUT1AgPSAkKGdUT1ApIDsNCiAgICAuUFJPSkVDVCA9ICQoUFJPSkVD VCkgOw0KICAgIHJldHVybiBUT1AgVE9QX1RPS0VOUyBnVE9QIFBST0pFQ1QgWyBwcm90ZWN0 LXN1YmRpciBdIDsNCn0NCg0KIyBncmFmaWsuDQojDQojIFNldHMgdXAgdGhlIGVudmlyb25t ZW50IGFzIGlmIHRoZSBjb250ZXh0IGlzIGFub3RoZXIgcHJvamVjdCBpbg0KIyBwcmVwYXJh dGlvbiB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBwcm9qZWN0cyB0YXJnZXRzLiBUaGlzIGFs c28NCiMgd29ya3MgZm9yIHJlZmVyaW5nIHRvIHRoZSBjdXJyZW50IHByb2plY3QuDQojDQpy dWxlIGVudGVyLXN1YnByb2plY3QgKCBwcm9qZWN0LXBhdGggKQ0Kew0KICAgIFRPUCA9ICQo LlRPUCkgOw0KICAgIFRPUF9UT0tFTlMgPSAkKC5UT1BfVE9LRU5TKSA7DQogICAgZ1RPUCA9 ICQoLmdUT1ApIDsNCiAgICBQUk9KRUNUID0gJCguUFJPSkVDVCkgOw0KICAgIA0KICAgIGxv Y2FsIHByb2plY3QtbmFtZSA9IFsgTUFUQ0ggIl5AKFteL1xcXSspIiA6ICQocHJvamVjdC1w YXRoKSBdIDsNCiAgICBwcm9qZWN0LW5hbWUgPz0gJChQUk9KRUNUKSA7DQogICAgcHJvamVj dC1uYW1lID89ICIiIDsNCiAgICBsb2NhbCBwcm9qZWN0LXN1YmRpciA9IFsgTUFUQ0ggIl5A W14vXFxdK1svXFxdKC4qKSIgOiAkKHByb2plY3QtcGF0aCkgXSA7DQogICAgbG9jYWwgcHJv amVjdC10b3AgOw0KICAgIA0KICAgIGlmICQocHJvamVjdC1uYW1lKQ0KICAgIHsNCiAgICAg ICAgcHJvamVjdC10b3AgPSBbIHNwbGl0LXBhdGggJChnUFJPSkVDVCgkKHByb2plY3QtbmFt ZSkpKSBdIDsNCiAgICAgICAgaWYgJChwcm9qZWN0LXN1YmRpcikNCiAgICAgICAgew0KICAg ICAgICAgICAgcHJvamVjdC10b3AgKz0NCiAgICAgICAgICAgICAgICBbIHNwbGl0LXBhdGgg WyByZWxhdGl2ZS1wYXRoICQocHJvamVjdC1zdWJkaXIpIF0gXQ0KICAgICAgICAgICAgICAg IFsgc3BsaXQtcGF0aCBbIEZTdWJEaXIgWyBzcGxpdC1wYXRoIFsgcmVsYXRpdmUtcGF0aCAk KHByb2plY3Qtc3ViZGlyKSBdIF0gXSBdIDsNCiAgICAgICAgfQ0KICAgICAgICBUT1AgPSBb IGpvaW4tcGF0aCAkKHByb2plY3QtdG9wKSBdIDsNCiAgICAgICAgVE9QX1RPS0VOUyA9ICQo cHJvamVjdC10b3ApIDsNCiAgICAgICAgZ1RPUCA9IFRPUCA7DQogICAgICAgIFBST0pFQ1Qg PSAkKHByb2plY3QtbmFtZSkgOw0KICAgIH0NCiAgICBwcm9qZWN0LXN1YmRpciA/PSAuIDsN CiAgICANCiAgICBzdWJwcm9qZWN0ICQocHJvamVjdC1zdWJkaXIpIDsNCiAgICANCiAgICBy ZXR1cm4gJChwcm9qZWN0LW5hbWUpICQocHJvamVjdC1zdWJkaXIpIDsNCn0NCg0KIyBkd2Eg Ni83LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojIHN1YmluY2x1ZGUgcGF0aC4uLg0KIw0KIyBJ bnZva2VzIFN1YkluY2x1ZGUgZm9yIGVhY2ggcGF0aA0KcnVsZSBzdWJpbmNsdWRlDQp7DQog ICAgbG9jYWwgZCA7DQogICAgZm9yIGQgaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgU3ViSW5j bHVkZSBUT1AgWyBzcGxpdC1wYXRoICQoZCkgXSA7DQogICAgfQ0KfQ0KDQojIGR3YSAxMC82 LzAxIC0gYWRkZWQgZm9yIGJvb3N0DQojDQojIHBhdGgtZ2xvYmFsIHZhcmlhYmxlLW5hbWUg OiBwYXRoLi4uIDsNCiMNCiMgaWYgJCh2YXJpYWJsZS1uYW1lKSBpcyB1bnNldCwgc2V0cyB2 YXJpYWJsZS1uYW1lIHRvIHBhdGguLi4NCiMgdmFyaWFibGUtbmFtZSB3aWxsIGJlIGFkanVz dGVkIG9uIGEgcGVyLXN1YnByb2plY3QgYmFzaXMgdG8gcmVmZXIgdG8gdGhlIHNhbWUgcGF0 aC4NCnJ1bGUgcGF0aC1nbG9iYWwNCnsNCiAgICAkKDwpID89ICQoPikgOw0KICAgIGdQQVRI X0dMT0JBTF9WQUxVRSgkKDwpKSA9ICQoJCg8KSkgOw0KICAgIA0KICAgIGlmICEgKCAkKDwp IGluICQoZ1BBVEhfR0xPQkFMUykgKQ0KICAgIHsNCiAgICAgICAgZ1BBVEhfR0xPQkFMUyAr PSAkKDwpIDsNCiAgICB9DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29z dA0KcnVsZSBTdWJEaXINCnsNCiAgICBsb2NhbCBfciA7DQoNCiAgICAjDQogICAgIyBTdWJE aXIgVE9QIGQxIFsgLi4uIF0NCiAgICAjDQogICAgIyBUaGlzIGludHJvZHVjZXMgYSBKYW1m aWxlIHRoYXQgaXMgcGFydCBvZiBhIHByb2plY3QgdHJlZSANCiAgICAjIHJvb3RlZCBhdCAk KFRPUCkuICBJdCAob25seSBvbmNlKSBpbmNsdWRlcyB0aGUgcHJvamVjdC1zcGVjaWZpYw0K ICAgICMgcnVsZXMgZmlsZSAkKFRPUCkvSmFtcnVsZXMgYW5kIHRoZW4gc2V0cyBzZWFyY2gg JiBsb2NhdGUgc3R1ZmYuDQogICAgIw0KICAgICMgSWYgdGhlIHZhcmlhYmxlICQoVE9QUlVM RVMpIGlzIHNldCAod2hlcmUgVE9QIGlzIHRoZSBmaXJzdCBhcmcgDQogICAgIyB0byBTdWJE aXIpLCB0aGF0IGZpbGUgaXMgaW5jbHVkZWQgaW5zdGVhZCBvZiAkKFRPUCkvSmFtcnVsZXMu DQogICAgIw0KICAgICMgZDEgLi4uIGFyZSB0aGUgZGlyZWN0b3J5IGVsZW1lbnRzIHRoYXQg bGVhZCB0byB0aGlzIGRpcmVjdG9yeSANCiAgICAjIGZyb20gJChUT1ApLiAgV2UgY29uc3Ry dWN0IHRoZSBzeXN0ZW0gZGVwZW5kZW50IHBhdGggZnJvbSB0aGVzZQ0KICAgICMgZGlyZWN0 b3J5IGVsZW1lbnRzIGluIG9yZGVyIHRvIHNldCBzZWFyY2gmbG9jYXRlIHN0dWZmLg0KICAg ICMgDQoNCiAgICBpZiAhICQoJCg8WzFdKSkNCiAgICB7DQogICAgICAgIGlmICEgJCg8WzFd KQ0KICAgICAgICB7DQogICAgICAgICAgICBFWElUIFN1YkRpciBzeW50YXggZXJyb3IgOw0K ICAgICAgICB9DQoNCiAgICAgICAgJCg8WzFdKSA9IFsgRlN1YkRpciAkKDxbMi1dKSBdIDsN CiAgICAgICAgJCg8WzFdKV9UT0tFTlMgPSBbIHNwbGl0LXBhdGggJCgkKDxbMV0pKSBdIDsN CiAgICAgICAgZ1RPUCA9ICQoPFsxXSkgOyAjICBub3Qgc3VyZSB3aHkgc29tZW9uZSB3b3Vs ZCB3YW50IHRvIHVzZSBhbnl0aGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICMgb3Ro ZXIgdGhhbiBUT1AsIGJ1dCBqdXN0IGluIGNhc2UuLi4NCiAgICB9DQoNCiAgICAjDQogICAg IyBJZiAkKFRPUCkvSmFtcnVsZXMgaGFzbid0IGJlZW4gaW5jbHVkZWQsIGRvIHNvLg0KICAg ICMNCg0KICAgIGxvY2FsIHRvcCA9IFsgcm9vdC1wYXRocyAkKCQoZ1RPUCkpIDogWyBQV0Qg XSBdIDsNCiAgICBpZiAhICQoZ0lOQ0xVREVEKCQoSkFNUlVMRVM6Uj0kKHRvcCkpKSkNCiAg ICB7DQogICAgICAgICMgR2F0ZWQgZW50cnkuDQoNCiAgICAgICAgZ0lOQ0xVREVEKCQoSkFN UlVMRVM6Uj0kKHRvcCkpKSA9IFRSVUUgOw0KDQogICAgICAgICMgSW5jbHVkZSBpdC4NCg0K ICAgICAgICBwcm9qZWN0LXJvb3QgOw0KICAgICAgICBpbmNsdWRlICQoSkFNUlVMRVM6Uj0k KHRvcCkpIDsNCiAgICB9DQoNCiAgICAjIEdldCBwYXRoIHRvIGN1cnJlbnQgZGlyZWN0b3J5 IGZyb20gcm9vdCB1c2luZyBTdWJEaXIuDQogICAgIyBTYXZlIGRpciB0b2tlbnMgZm9yIG90 aGVyIHBvdGVudGlhbCB1c2VzLg0KICAgIFNVQkRJUl9UT0tFTlMgPSAkKDxbMi1dKSA7DQog ICAgDQogICAgIyBUaGlzIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSdyZSBp biB0aGUgZGlyZWN0b3J5IHdoZXJlIGphbSB3YXMNCiAgICAjIGludm9rZWQgZnJvbSBzbyB0 aGF0IHdlIGNhbiBtYWtlIGxvY2FsbHkgbmFtZWQgdGFyZ2V0cw0KICAgIGdJTlZPQ0FUSU9O X1NVQkRJUl9UT0tFTlMgPz0gJChTVUJESVJfVE9LRU5TKSA7DQogICAgZ0lOVk9DQVRJT05f U1VCRElSX1RPS0VOUyA/PSAkKERPVCkgOw0KDQogICAgIyBTVUJESVIgaXMgdGhlIHBhdGgg ZnJvbSB0aGUgaW52b2NhdGlvbiBkaXJlY3RvcnkgdG8gdGhlIHN1YnByb2plY3QNCiAgICAj IGRpcmVjdG9yeS4NCiAgICBTVUJESVIgPSBbIHRva2Vucy10by1zaW1wbGUtcGF0aCAkKCQo Z1RPUClfVE9LRU5TKSAgJChTVUJESVJfVE9LRU5TKSBdIDsNCg0KICAgIFNFQVJDSF9TT1VS Q0UgPSAkKFNVQkRJUikgOw0KDQogICAgIyBUaGlzIHdpbGwgc3RyaXAgb2ZmIGFueSBsZWFk aW5nIGRvdCBvbiBTVUJESVJfVE9LRU5TDQogICAgbG9jYWwgbm9kb3Rfc3ViZGlyID0gWyBz aW1wbGlmeS1wYXRoLXRva2VucyAkKFNVQkRJUl9UT0tFTlMpIF0gOw0KDQogICAgbm9ybWFs aXplZF9BTExfTE9DQVRFX1RBUkdFVCA/PSBbIGpvaW4tcGF0aCAkKCQoZ1RPUCkpICQoQUxM X0xPQ0FURV9UQVJHRVQpIF0gOw0KICAgIExPQ0FURV9TT1VSQ0UgPSBbIEZEaXJOYW1lICQo bm9ybWFsaXplZF9BTExfTE9DQVRFX1RBUkdFVCkgJChCSU5fRElSRUNUT1JZKSAkKFBST0pF Q1QpICQobm9kb3Rfc3ViZGlyKSBdIDsNCiAgICBMT0NBVEVfVEFSR0VUID0gJChMT0NBVEVf U09VUkNFKSA7DQogICAgSENBQ0hFRklMRSA/PSAkKExPQ0FURV9UQVJHRVQ6Qj0uamFtZGVw cykgOw0KICAgIA0KICAgIFNPVVJDRV9HUklTVCA9IFsgRkdyaXN0IEAkKFBST0pFQ1QpICQo U1VCRElSX1RPS0VOUykgXSA7DQoNCiAgICAjIFJlc2V0IHBlci1kaXJlY3RvcnkgY2NmbGFn cywgaGRycw0KDQogICAgU1VCRElSQ0NGTEFHUyA9IDsNCiAgICBTVUJESVJDKytGTEFHUyA9 IDsNCg0KICAgICMgVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgcGF0aCBmcm9tIHRoZSBkaXJl Y3Rvcnkgb2YgSmFtJ3MgaW52b2NhdGlvbiB0byB0aGUNCiAgICAjIGRpcmVjdG9yeSBvZiB0 aGUgY3VycmVudCBzdWJwcm9qZWN0Lg0KICAgIFJFTEFUSVZFX1NVQkRJUl9UT0tFTlMgPSBb IHNpbXBsaWZ5LXBhdGgtdG9rZW5zICQoJChnVE9QKV9UT0tFTlMpICQoU1VCRElSX1RPS0VO UykgOiAkKERPVCkgXSA7DQogICAgUkVMQVRJVkVfU1VCRElSID0gWyBqb2luLXBhdGggJChS RUxBVElWRV9TVUJESVJfVE9LRU5TKSBdIDsNCg0KICAgIGFkanVzdC1wYXRoLWdsb2JhbHMg Ow0KfQ0KDQpydWxlIGluLWludm9jYXRpb24tc3ViZGlyDQp7DQogICAgbG9jYWwgc3ViZGly LXRva2VucyA9ICQoU1VCRElSX1RPS0VOUykgOw0KICAgIHN1YmRpci10b2tlbnMgPz0gJChE T1QpIDsNCiAgICBpZiAkKHN1YmRpci10b2tlbnMpID0gJChnSU5WT0NBVElPTl9TVUJESVJf VE9LRU5TKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIHRydWUgOw0KICAgIH0NCn0NCg0KIyBU aGVzZSBhcmUgdGhlIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBnZXQgc2V0IHVwIGJ5IFN1YkRp ci4gSWYgeW91IG5lZWQgdG8NCiMgaW52b2tlIFN1YkRpciB0ZW1wb3JhcmlseSBhbmQgdGhl biByZXN0b3JlIHRoZW0sIGRlY2xhcmUNCiMgICAgICAgbG9jYWwgJChnU1VCRElSX0dMT0JB TFMpIDsNCmdTVUJESVJfR0xPQkFMUyA9IFNVQkRJUiBTVUJESVJfVE9LRU5TIFNFQVJDSF9T T1VSQ0UgTE9DQVRFX1NPVVJDRSBMT0NBVEVfVEFSR0VUDQogICAgU09VUkNFX0dSSVNUIFJF TEFUSVZFX1NVQkRJUiBSRUxBVElWRV9TVUJESVJfVE9LRU5TIDsgDQoNCg0KcnVsZSBwcm90 ZWN0LXN1YmRpcg0Kew0KICAgIHJldHVybiAkKGdTVUJESVJfR0xPQkFMUykgJChnUEFUSF9H TE9CQUxTKSA7DQp9DQoNCiMgcHJlcGVuZHMgcm9vdCB0byBhbnkgdW5yb290ZWQgZWxlbWVu dHMgb2YgcGF0aHMsIGFuZCBzaW1wbGlmaWVzDQpydWxlIHJvb3QtcGF0aHMgKCBwYXRocyAq IDogcm9vdCApDQp7DQogICAgbG9jYWwgcGF0aCByZXN1bHQgOw0KICAgIGZvciBwYXRoIGlu ICQocGF0aHMpDQogICAgew0KICAgICAgICBsb2NhbCByb290ZWQgPSAkKHBhdGg6Uj0kKHJv b3QpKSA7DQogICAgICAgIHBhdGggPSBbIHRva2Vucy10by1zaW1wbGUtcGF0aCBbIHNwbGl0 LXBhdGggJChyb290ZWQ6Rz0pIF0gXSA7DQogICAgICAgIHBhdGggPSAkKHBhdGg6Rz0kKHJv b3RlZDpHKSkgOw0KICAgICAgICByZXN1bHQgKz0gJChwYXRoKSA7DQogICAgfQ0KICAgIHJl dHVybiAkKHJlc3VsdCkgOw0KfQ0KDQojIEFkanVzdCBhbGwgcGF0aCBnbG9iYWxzIHNvIHRo YXQgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3VicHJvamVjdC4NCnJ1bGUg YWRqdXN0LXBhdGgtZ2xvYmFscw0Kew0KICAgICMgY29tcHV0ZSBwYXRoIHRva2VucyBmcm9t IGN1cnJlbnQgc3VicHJvamVjdCB0byByb290DQogICAgbG9jYWwgdG9rZW5zLXRvLXJvb3Qg PSBbIHNwbGl0LXBhdGggWyBGU3ViRGlyICQoU1VCRElSX1RPS0VOUykgXSBdIDsNCiAgICAN CiAgICAjIGNvbXB1dGUgcGF0aCB0b2tlbnMgZnJvbSBjdXJyZW50IHN1YnByb2plY3QgdG8g aW52b2NhdGlvbg0KICAgICMgZGlyZWN0b3J5LiAkKERPVCkgaXMgYWRkZWQganVzdCBpbiBj YXNlIHdlJ3JlIGJ1aWxkaW5nIGZyb20gdGhlIHByb2plY3QNCiAgICAjIHJvb3QNCiAgICBs b2NhbCB0b2tlbnMtdG8taW52b2NhdGlvbg0KICAgICAgICA9ICQodG9rZW5zLXRvLXJvb3Qp ICQoZ0lOVk9DQVRJT05fU1VCRElSX1RPS0VOUykgOw0KICAgICAgICAgDQogICAgbG9jYWwg dmFyaWFibGUgOw0KICAgIGZvciB2YXJpYWJsZSBpbiAkKGdQQVRIX0dMT0JBTFMpDQogICAg ew0KICAgICAgICBsb2NhbCBwYXRocyA9ICQoZ1BBVEhfR0xPQkFMX1ZBTFVFKCQodmFyaWFi bGUpKSkgOw0KICAgICAgICAkKHZhcmlhYmxlKSA9IDsNCiAgICAgICAgbG9jYWwgcGF0aCA7 DQogICAgICAgIGZvciBwYXRoIGluICQocGF0aHMpDQogICAgICAgIHsNCiAgICAgICAgICAg ICMgaXMgcGF0aCBhbHJlYWR5IHJvb3RlZD8NCiAgICAgICAgICAgIGlmICQocGF0aDpSPXgp ID0gJChwYXRoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICQodmFyaWFibGUp ICs9ICQocGF0aCkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgIGxvY2FsIHRva2VucyA9ICQodG9rZW5zLXRvLWlu dm9jYXRpb24pIFsgc3BsaXQtcGF0aCAkKHBhdGgpIF0gOw0KICAgICAgICAgICAgICAgICQo dmFyaWFibGUpICs9IFsgdG9rZW5zLXRvLXNpbXBsZS1wYXRoICQodG9rZW5zKSBdIDsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KIyBkd2EgNi80LzAxIC0gYWRk ZWQgZm9yIGJvb3N0DQojIHN0cmlwLWdyaXN0IHZhbHVlDQojDQojIHN0cmlwIGFsbCBsZWFk aW5nIGdyaXN0ZWQgZWxlbWVudHMgZnJvbSB2YWx1ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQu DQpydWxlIHN0cmlwLWdyaXN0DQp7DQogICAgbG9jYWwgeCA9ICQoPDpHPSkgOw0KICAgIGlm ICEgJCh4OkcpDQogICAgew0KICAgICAgICByZXR1cm4gJCh4KSA7DQogICAgfQ0KICAgIGVs c2UNCiAgICB7DQogICAgICAgIHJldHVybiBbIHN0cmlwLWdyaXN0ICQoeCkgXSA7DQogICAg fQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgQnJlYWtzICQoPCkg aW50byBwYXRoIGNvbXBvbmVudHMNCiMgVGhpcyBjb3VsZCBjZXJ0YWlubHkgYmUgaW1wcm92 ZWQgbm93IHRoYXQgd2UgaGF2ZSBEYXZpZCBUdXJuZXIncyByZWd1bGFyIGV4cHJlc3Npb24g ZmVhdHVyZXMuDQojDQojIHNwbGl0LXBhdGggPGZvbz5iYXIvPGJlZT5iYXovbXVtYmxlICA9 PiA8Zm9vPmJhciA8YmVlPmJheiBtdW1ibGUgDQpydWxlIHNwbGl0LXBhdGgNCnsNCiAgICBs b2NhbCByZXN1bHQgPSAkKGdTUExJVC1QQVRILiQoPCkpIDsNCg0KICAgIGlmICEgJChyZXN1 bHQpDQogICAgew0KICAgICAgICBsb2NhbCBwYXJlbnQgPSAkKDw6UCkgOw0KICAgICAgICBp ZiAkKE5UKQ0KICAgICAgICB7DQogICAgICAgICAgICBzd2l0Y2ggJCg8Okc9KQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgICMgSXQgdHVybnMgb3V0IHRoYXQgdG8gbWF0Y2gg YSBiYWNrc2xhc2gsIHlvdSBuZWVkIGEgL3F1YWRydXBsZS8gc2xhc2gNCiAgICAgICAgICAg ICAgICAjIGluIHRoZSBjYXNlIGNsYXVzZSENCiAgICAgICAgICAgICAgICBjYXNlICpcXFxc KjoqIDogIyBjb250aW51ZSBzcGxpdHRpbmcNCiAgICAgICAgICAgICAgICAgIGNhc2UgKjpc XFxcKlxcXFwqIDogICMgY29udGludWUgc3BsaXR0aW5nDQogICAgICAgICAgICAgICAgICBj YXNlICo6LypcXFxcKiA6ICAjIGNvbnRpbnVlIHNwbGl0dGluZw0KICAgICAgICAgICAgICAg ICAgY2FzZSAqOlxcXFwqLyogOiAgIyBjb250aW51ZSBzcGxpdHRpbmcNCiAgICAgICAgICAg ICAgICAgIGNhc2UgKjovKi8qIDogICMgY29udGludWUgc3BsaXR0aW5nDQogICAgICAgICAg ICAgICAgICBjYXNlICo6LyogOiByZXN1bHQgPSAkKDwpIDsNCiAgICAgICAgICAgICAgICBj YXNlICo6XFxcXCogOiByZXN1bHQgPSAkKDwpIDsNCiAgICAgICAgICAgICAgICBjYXNlICo6 IDogcmVzdWx0ID0gJCg8KSA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAg ICBpZiAoICEgJCg8OkIpICkgJiYgKCAkKDwpICE9ICQoRE9UKSApICMgaGFuZGxlIHRoZSBj YXNlIHdoZXJlICQoPCkgaXMgYWxsIGdyaXN0Lg0KICAgICAgICB7DQogICAgICAgICAgICBy ZXN1bHQgPz0gJCg8OkcpIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICggISAkKHBh cmVudDpHPSkgKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXN1bHQgPz0gJCg8KSA7DQog ICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBsb2NhbCBw ID0gWyBzcGxpdC1wYXRoICQocGFyZW50KSBdIDsNCiAgICAgICAgICAgIGxvY2FsIGIgPSBb IHN0cmlwLWdyaXN0ICQoPCkgXSA7DQogICAgICAgICAgICBwICs9ICQoYjpEPSkgOyAjIGNh bid0IHVzZSA6QiBoZXJlIGJlY2F1c2UgaXQgZGVzdHJveXMgLiBhbmQgLi4NCiAgICAgICAg ICAgIHJlc3VsdCA/PSAkKHApIDsNCiAgICAgICAgfQ0KICAgICAgICBnU1BMSVQtUEFUSC4k KDwpID0gJChyZXN1bHQpIDsNCiAgICB9DQogICAgcmV0dXJuICQocmVzdWx0KSA7DQp9DQoN CnJ1bGUgc3BsaXQgKCBzdHJpbmcgc2VwYXJhdG9yICkNCnsNCiAgICBsb2NhbCByZXN1bHQg Ow0KICAgIGxvY2FsIHMgPSAkKHN0cmluZykgOw0KICAgIA0KICAgIHdoaWxlICQocykNCiAg ICB7DQogICAgICAgIGxvY2FsIG1hdGNoID0gWyBNQVRDSCBeKC4qKSQoc2VwYXJhdG9yKSgu KikgOiAkKHMpIF0gOw0KICAgICAgICANCiAgICAgICAgbG9jYWwgdGFpbCA9ICQobWF0Y2hb Ml0pIDsNCiAgICAgICAgdGFpbCA/PSAkKHMpIDsNCg0KICAgICAgICByZXN1bHQgPSAkKHRh aWwpICQocmVzdWx0KSA7DQogICAgICAgIHMgPSAkKG1hdGNoWzFdKSA7DQogICAgfQ0KICAg IHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQpydWxlIHNwbGl0LXBhdGggKCBwYXRoICkNCnsN CiAgICBpZiAhICQoZ1NQTElUX1BBVEhfQ0FDSEUoJChwYXRoKSkpDQogICAgew0KICAgICAg ICBnU1BMSVRfUEFUSF9DQUNIRSgkKHBhdGgpKSA9DQogICAgICAgICAgWyBNQVRDSCAgIl4o Wy8kKFNMQVNIKV0rKS4qIiA6ICQocGF0aCkgXSAjIHJvb3Rpbmcgc2xhc2goZXMpLCBpZiBh bnkNCiAgICAgICAgICAgIFsgc3BsaXQgJChwYXRoKSAiWy8kKFNMQVNIKV0iIF0gICAgICAg ICMgdGhlIHJlc3QuDQogICAgICAgICAgICAgIDsNCiAgICB9DQogICAgcmV0dXJuICQoZ1NQ TElUX1BBVEhfQ0FDSEUoJChwYXRoKSkpIDsNCn0NCg0KIyBkd2EgNi80LzAxIC0gYWRkZWQg Zm9yIGJvb3N0DQojIHJldmVyc2UgaXRlbTEgaXRlbTIuLi4gDQojDQojIFJldHVybnMgLi4u aXRlbTIgaXRlbTENCnJ1bGUgcmV2ZXJzZQ0Kew0KICAgIGxvY2FsIHJlc3VsdCA7DQogICAg Zm9yIHggaW4gJCg8KQ0KICAgIHsNCiAgICAgICAgcmVzdWx0ID0gJCh4KSAkKHJlc3VsdCkg Ow0KICAgIH0NCiAgICByZXR1cm4gJChyZXN1bHQpIDsNCn0NCg0KIyBkd2EgNi8yOC8wMSAt IGFkZGVkIGZvciBib29zdA0KIyBzdHJpcC1pbml0aWFsIHRva2Vucy4uLiA6IGlucHV0DQoj DQojIGlmIGlucHV0IGJlZ2lucyB3aXRoIHRva2VucywgcmVtb3ZlIHRoZSBpbml0aWFsIHNl cXVlbmNlIG9mIHRva2VucyBhbmQgcmV0dXJuDQojIHRoZSByZXN0LiBPdGhlcndpc2UgcmV0 dXJuIGlucHV0IHVuY2hhbmdlZC4NCnJ1bGUgc3RyaXAtaW5pdGlhbA0Kew0KICAgIGxvY2Fs IHJlc3VsdCA9ICQoPikgOw0KICAgIGxvY2FsIHQgOw0KICAgIGxvY2FsIG1hdGNoZWQgPSB0 cnVlIDsNCiAgICBmb3IgdCBpbiAkKDwpDQogICAgew0KICAgICAgICBpZiAkKG1hdGNoZWQp ICYmICggJCh0KSA9ICQocmVzdWx0WzFdKSApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJl c3VsdCA9ICQocmVzdWx0WzItXSkgOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAg ICAgew0KICAgICAgICAgICAgbWF0Y2hlZCA9IDsNCiAgICAgICAgICAgIHJlc3VsdCA9ICQo PikgOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQoj IGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgc2ltcGxpZnktcGF0aC10b2tlbnMg dG9rZW4xIHRva2VuMiAuLi4gdG9rZW5OIDogRE9ULW9wdA0KIw0KIyBSZW1vdmUgcmVkdW5k YW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIHBhdGggZWxlbWVudHMNCiMgaWYgRE9U LW9wdCBpcyBzdXBwbGllZCwgZW1wdHkgcmVzdWx0cyBhcmUgcmVwbGFjZWQgd2l0aA0KIyAk KERPVC1vcHQpLg0KIw0KIyBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zIGEgYiAuIGMgLi4gLi4g ZCBlIF0gPT4gYSBkIGUNCiMgWyBzaW1wbGlmeS1wYXRoLXRva2VucyBhIGIgLi4gLi4gLi4g ZCBlIF0gID0+IC4uIGQgZQ0KIyBbIHNpbXBsaWZ5LXBhdGgtdG9rZW5zIC4uIC4uIGQgZSA6 IHh4eCBdICAgPT4gLi4gLi4gZCBlIChwcm92aWRlZCBUT1AgIT0gLi4vLi4pDQojIFsgc2lt cGxpZnktcGF0aC10b2tlbnMgYSBiIC4uIC4uIDogeHh4IF0gICA9PiB4eHgNCnJ1bGUgc2lt cGxpZnktcGF0aC10b2tlbnMNCnsNCiAgICBsb2NhbCByZXZlcnNlLXBhdGggPSBbIHJldmVy c2UgJCg8KSBdIDsNCiAgICBsb2NhbCBkb3Rkb3RzIDsNCiAgICBsb2NhbCByZXN1bHQgOw0K ICAgIGxvY2FsIHRva2VuIDsNCiAgICBmb3IgdG9rZW4gaW4gJChyZXZlcnNlLXBhdGgpDQog ICAgew0KICAgICAgICBpZiAkKHRva2VuKSA9ICQoRE9UKQ0KICAgICAgICB7DQogICAgICAg IH0NCiAgICAgICAgZWxzZSBpZiAkKHRva2VuKSA9ICQoRE9URE9UKQ0KICAgICAgICB7DQog ICAgICAgICAgICBkb3Rkb3RzICs9ICQodG9rZW4pIDsNCiAgICAgICAgfQ0KICAgICAgICBl bHNlIGlmICQoZG90ZG90cykNCiAgICAgICAgew0KICAgICAgICAgICAgZG90ZG90cyA9ICQo ZG90ZG90c1syLV0pIDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAg ICAgICAgICAgIHJlc3VsdCA9ICQodG9rZW4pICQocmVzdWx0KSA7DQogICAgICAgIH0NCiAg ICB9DQoNCiAgICByZXN1bHQgPSAkKGRvdGRvdHMpICQocmVzdWx0KSA7DQogICAgcmVzdWx0 ID0gWyBzdHJpcC1pbml0aWFsICQoJChnVE9QKV9UT0tFTlMpICQoZ0lOVk9DQVRJT05fU1VC RElSX1RPS0VOUykgOiAkKHJlc3VsdCkgXSA7DQogICAgcmVzdWx0ID89ICQoPikgOw0KICAg IHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQpydWxlIHRva2Vucy10by1zaW1wbGUtcGF0aA0K ew0KICAgIHJldHVybiBbIEZEaXJOYW1lIFsgc2ltcGxpZnktcGF0aC10b2tlbnMgICQoPCkg XSBdIDsNCn0NCg0KcnVsZSBTdWJEaXJDY0ZsYWdzDQp7DQogICAgU1VCRElSQ0NGTEFHUyAr PSAkKDwpIDsNCn0NCg0KcnVsZSBTdWJEaXJDKytGbGFncw0Kew0KICAgIFNVQkRJUkMrK0ZM QUdTICs9ICQoPCkgOw0KfQ0KDQpydWxlIFN1YkRpckhkcnMNCnsNCiAgICBTVUJESVJIRFJT ICs9ICQoPCkgOw0KfQ0KDQpydWxlIFN1YkluY2x1ZGUNCnsNCiAgICBsb2NhbCBfcyA7DQoN CiAgICAjIFRoYXQncw0KICAgICMgICAgICAgU3ViSW5jbHVkZSBUT1AgZDEgWyBkMiBbIGQz IFsgZDQgXSBdIF0NCiAgICAjDQogICAgIyB0byBpbmNsdWRlIGEgc3ViZGlyZWN0b3J5J3Mg SmFtZmlsZS4NCg0KICAgIGlmICEgJCgkKDxbMV0pKQ0KICAgIHsNCiAgICAgICAgRVhJVCBU b3AgbGV2ZWwgb2Ygc291cmNlIHRyZWUgaGFzIG5vdCBiZWVuIHNldCB3aXRoICQoPFsxXSkg Ow0KICAgIH0NCg0KICAgIF9zID0gWyBGRGlyTmFtZSAkKDxbMi1dKSBdIDsNCg0KICAgICMg cHJvdGVjdCB2YXJpYWJsZXMgZnJvbSBiZWluZyBwZXJtYW5lbnRseSBzZXQgYnkgU3ViRGly IGludm9jYXRpb25zDQogICAgIyBpbiBpbmNsdWRlZCBmaWxlcy4NCiAgICBsb2NhbCBwcm9q ZWN0ID0gJChQUk9KRUNUKSA7DQogICAgbG9jYWwgWyBwcm90ZWN0LXN1YmRpciBdIDsNCiAg ICBQUk9KRUNUID0gJChwcm9qZWN0KSA7DQogICAgbG9jYWwgamFtZmlsZS1wYXRoDQogICAg ICAgID0gWyB0b2tlbnMtdG8tc2ltcGxlLXBhdGgNCiAgICAgICAgICAgIFsgc3BsaXQtcGF0 aCAkKEpBTUZJTEU6RD0kKF9zKTpSPSQoJCg8WzFdKSkpIF0gXSA7DQogICAgbG9hZC1qYW1m aWxlcyAkKGphbWZpbGUtcGF0aCkgOw0KfQ0KDQojIExvYWQgYSB1c2VyJ3MgSmFtZmlsZShz KS4NCiMNCnJ1bGUgbG9hZC1qYW1maWxlcyAoIGphbWZpbGVzICogKQ0Kew0KICAgICMgRmly c3Qgd2UgbG9hZCB0aGUgSmFtZmlsZXMgd2l0aG91dCBnZW5lcmF0aW9uIG9mIG1haW4gdGFy Z2V0cyBzbyB0aGF0DQogICAgIyBkZXBlbmRlbmNpZXMgYXJlIHByZWxvYWRlZC4gVGhlbiB3 ZSByZWxvYWQgdGhlIGZpbGVzIHdpdGggdGFyZ2V0DQogICAgIyBnZW5lcmF0aW9uIGVuYWJs ZWQuDQogICAgDQogICAgbG9jYWwgamFtZmlsZSA7DQogICAgbG9jYWwgYXMtZGVwZW5kYW50 ID0gJChnSU5fTElCX0lOQ0xVREUpIDsNCiAgICBsb2NhbCBnSU5fTElCX0lOQ0xVREUgOw0K ICAgIA0KICAgIGdJTl9MSUJfSU5DTFVERSA9IFRSVUUgOw0KICAgIGZvciBqYW1maWxlLXBh dGggaW4gJChqYW1maWxlcykNCiAgICB7DQogICAgICAgIGlmICEgJChnSU5DTFVERURfQVNf REVQRU5EQU5UKCQoamFtZmlsZS1wYXRoKSkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGdJ TkNMVURFRF9BU19ERVBFTkRBTlQoJChqYW1maWxlLXBhdGgpKSA9IFRSVUUgOw0KICAgICAg ICAgICAgaW5jbHVkZSAkKGphbWZpbGUtcGF0aCkgOw0KICAgICAgICB9DQogICAgfQ0KICAg IA0KICAgIGlmICEgJChhcy1kZXBlbmRhbnQpDQogICAgew0KICAgICAgICBnSU5fTElCX0lO Q0xVREUgPSA7DQogICAgICAgIGZvciBqYW1maWxlLXBhdGggaW4gJChqYW1maWxlcykNCiAg ICAgICAgew0KICAgICAgICAgICAgaWYgISAkKGdJTkNMVURFRCgkKGphbWZpbGUtcGF0aCkp KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdJTkNMVURFRCgkKGphbWZpbGUt cGF0aCkpID0gVFJVRSA7DQogICAgICAgICAgICAgICAgaW5jbHVkZSAkKGphbWZpbGUtcGF0 aCkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpydWxlIFVuZGVm aW5lcw0Kew0KICAgIFVOREVGUyBvbiBbIEZBcHBlbmRTdWZmaXggJCg8KSA6ICQoU1VGRVhF KSBdICs9ICQoVU5ERUZGTEFHKSQoPikgOw0KfQ0KDQpydWxlIFVzZXJPYmplY3QNCnsNCiAg ICBFWElUICJVbmtub3duIHN1ZmZpeCBvbiIgJCg+KSAiLSBzZWUgVXNlck9iamVjdCBydWxl IGluIEphbWZpbGUoNSkuIiA7DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBi b29zdA0KcnVsZSBZYWNjDQp7DQogICAgbG9jYWwgX2ggOw0KDQogICAgIyBDYW4ndCBqdXN0 IHJlcGxhY2UgLmNwcCB3aXRoIC5oLCBiZWNhdXNlIGJpc29uIHNlZW1zIHRvIGdlbmVyYXRl IGEgLmNwcC5oIGZpbGUNCiAgICBfaCA9ICQoPCkuaCA7DQoNCiAgICAjIFNvbWUgcGxhY2Vz IGRvbid0IGhhdmUgYSB5YWNjLg0KDQogICAgTWFrZUxvY2F0ZSAkKDwpICQoX2gpIDogJChM T0NBVEVfU09VUkNFKSA7DQogICAgU0VBUkNIIG9uICQoPCkgJChfaCkgPSAkKExPQ0FURV9T T1VSQ0UpIDsNCg0KICAgIGlmICQoWUFDQykNCiAgICB7DQogICAgICAgIERFUEVORFMgJCg8 KSAkKF9oKSA6ICQoPikgOw0KDQogICAgICAgICMgaWYgWUFDQyBjYW4gYWNjZXB0IGFuIG91 dHB1dCBmaWxlLCB3ZSdsbCBqdXN0IGdlbmVyYXRlIHRoZSBmaWxlIHRoZXJlLg0KICAgICAg ICBZQUNDRklMRVMgb24gJCg8KSAkKF9oKSA9IFsgam9pbi1wYXRoICQoTE9DQVRFX1NPVVJD RSkgJCg8WzFdKSBdIDsNCiAgICAgICAgDQogICAgICAgIFlhY2MxICQoPCkgJChfaCkgOiAk KD4pIDsNCiAgICAgICAgDQogICAgICAgIGlmICEgJChZQUNDX09VVFBVVCkNCiAgICAgICAg ew0KICAgICAgICAgICAgWWFjY012ICQoPCkgJChfaCkgOiAkKD4pIDsNCiAgICAgICAgfQ0K ICAgICAgICANCiAgICAgICAgQ2xlYW4gY2xlYW4gOiAkKDwpICQoX2gpIDsNCiAgICB9DQoN CiAgICAjIG1ha2Ugc3VyZSBzb21lb25lIGluY2x1ZGVzICQoX2gpIGVsc2UgaXQgd2lsbCBi ZQ0KICAgICMgYSBkZWFkbHkgaW5kZXBlbmRlbnQgdGFyZ2V0DQoNCiAgICBJTkNMVURFUyAk KDwpIDogJChfaCkgOw0KfQ0KDQpydWxlIHJlbWVtYmVyLWJpbmRpbmcgKCB0YXJnZXQgOiBi b3VuZC1wYXRoICkgew0KICAgIGdCSU5ESU5HKCQodGFyZ2V0KSkgPSAkKGJvdW5kLXBhdGgp IDsNCn0NCg0KcnVsZSBzdWJzdC1saXN0ICggbGlzdCArIDogcGF0dGVybiApIHsNCiAgICBs b2NhbCByZXN1bHQgOw0KICAgIGZvciBsb2NhbCBpIGluICQobGlzdCkgew0KICAgICAgICBy ZXN1bHQgKz0gWyBNQVRDSCAiKCQocGF0dGVybikpIiA6ICQoaSkgXSA7DQogICAgfQ0KICAg IHJldHVybiAkKHJlc3VsdCkgOw0KfQ0KDQojDQojIFV0aWxpdHkgcnVsZXM7IG5vIHNpZGUg ZWZmZWN0cyBvbiB0aGVzZQ0KIw0KDQpydWxlIEZHcmlzdA0Kew0KICAgICMgVHVybiBpbmRp dmlkdWFsIGVsZW1lbnRzIGluICQoPCkgaW50byBncmlzdC4NCg0KICAgIGxvY2FsIF9nIF9p IDsNCg0KICAgIF9nID0gJCg8WzFdKSA7DQoNCiAgICBmb3IgX2kgaW4gJCg8WzItXSkNCiAg ICB7DQogICAgICAgIF9nID0gJChfZykhJChfaSkgOw0KICAgIH0NCg0KICAgIHJldHVybiAk KF9nKSA7DQp9DQoNCnJ1bGUgRkdyaXN0RmlsZXMgDQp7DQogICAgaWYgISAkKFNPVVJDRV9H UklTVCkNCiAgICB7DQogICAgICAgIHJldHVybiAkKDwpIDsNCiAgICB9DQogICAgZWxzZSAN CiAgICB7DQogICAgICAgIHJldHVybiAkKDw6Rz0kKFNPVVJDRV9HUklTVCkpIDsNCiAgICB9 DQp9DQoNCiMgZHdhIDYvNC8wMSAtIG1vZGlmaWVkIGZvciBib29zdA0KcnVsZSBGR3Jpc3RT b3VyY2VGaWxlcw0Kew0KICAgICMgUHJvZHVjZSBzb3VyY2UgZmlsZSBuYW1lIG5hbWUgd2l0 aCBncmlzdCBpbiBpdCwgDQogICAgIyBpZiBTT1VSQ0VfR1JJU1QgaXMgc2V0Lg0KDQogICAg IyBMZWF2ZSBoZWFkZXIgZmlsZXMgYWxvbmUsIGJlY2F1c2UgdGhleSBoYXZlIGEgZ2xvYmFs DQogICAgIyB2aXNpYmlsaXR5Lg0KDQogICAgaWYgISAkKFNPVVJDRV9HUklTVCkNCiAgICB7 DQogICAgICAgIHJldHVybiAkKDwpIDsNCiAgICB9DQogICAgZWxzZSANCiAgICB7DQogICAg ICAgIGxvY2FsIF9pIF9vIDsNCg0KICAgICAgICBmb3IgX2kgaW4gJCg8KQ0KICAgICAgICB7 DQogICAgICAgICAgICBzd2l0Y2ggJChfaSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg IGNhc2UgKi5oIDogICAgICBfbyArPSAkKF9pKSA7DQogICAgICAgICAgICBjYXNlICouaHBw IDogICAgICBfbyArPSAkKF9pKSA7DQogICAgICAgICAgICBjYXNlICogOiAgICAgICAgX28g Kz0gJChfaTpHPSQoU09VUkNFX0dSSVNUKSkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQoNCiAgICAgICAgcmV0dXJuICQoX28pIDsNCiAgICB9DQp9DQoNCiMgZHdhIDYvNC8wMSAt IG1vZGlmaWVkIGZvciBib29zdA0KIyBqb2luIHZhbHVlcy4uLiA6IFtzZXBhcmF0b3JdDQoj DQojIFBhc3RlcyB2YWx1ZXMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBsaXN0IGVsZW1lbnQs IHNlcGFyYXRlZCBieSBhbiBvcHRpb25hbCBzZXBhcmF0b3IuDQpydWxlIGpvaW4gKCB2YWx1 ZXMgKiA6IHNlcCA/ICkNCnsNCiAgICBzZXAgPz0gIiIgOw0KICAgIHJldHVybiAkKHZhbHVl czpKPSQoc2VwKSkgOw0KfQ0KDQojIEdpdmVuICQoPCksIHRoZSB0b2tlbnMgY29tcHJpc2lu ZyBhIHJlbGF0aXZlIHBhdGggZnJvbSBEMSB0byBhIHN1YmRpcmVjdG9yeQ0KIyBEMiwgcmV0 dXJuIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gRDIgdG8gRDEsIHVzaW5nIC4uLy4uLyBldGMu DQpydWxlIEZTdWJEaXINCnsNCiAgICBsb2NhbCBfZCA7DQoNCiAgICBpZiAhICQoPFsxXSkg DQogICAgew0KICAgICAgICBfZCA9ICQoRE9UKSA7DQogICAgfSANCiAgICBlbHNlDQogICAg ew0KICAgICAgICBfZCA9ICQoRE9URE9UKSA7DQoNCiAgICAgICAgbG9jYWwgX2kgOw0KICAg ICAgICBmb3IgX2kgaW4gJCg8WzItXSkNCiAgICAgICAgew0KICAgICAgICAgICAgX2QgPSAk KF9kOlI9JChET1RET1QpKSA7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4gJChf ZCkgOw0KfQ0KDQojIGR3YSA2LzQvMDEgLSBhZGRlZCBmb3IgYm9vc3QNCiMgVHVybiBpbmRp dmlkdWFsIGVsZW1lbnRzIGluICQoPCkgaW50byBhIHVzYWJsZSBwYXRoLiBJZiAkKDwpIGlz IGVtcHR5LCAkKD4pIGlzDQojIHJldHVybmVkLg0KcnVsZSBqb2luLXBhdGgNCnsNCiAgICBs b2NhbCBfcyBfaSA7DQoNCiAgICBpZiAhICQoPCkNCiAgICB7DQogICAgICAgIF9zID0gJCg+ KSA7DQogICAgfQ0KICAgIGVsc2UgaWYgJChWTVMpDQogICAgew0KICAgICAgICAjIFRoaXMg aGFuZGxlcyB0aGUgZm9sbG93aW5nIGNhc2VzOg0KICAgICAgICAjICAgYSAtPiBbLmFdDQog ICAgICAgICMgICBhIGIgYyAtPiBbLmEuYi5jXQ0KICAgICAgICAjICAgeDogLT4geDoNCiAg ICAgICAgIyAgIHg6IGEgLT4geDpbYV0NCiAgICAgICAgIyAgIHg6W2FdIGIgLT4geDpbYS5i XQ0KDQogICAgICAgIHN3aXRjaCAkKDxbMV0pDQogICAgICAgIHsNCiAgICAgICAgY2FzZSAq OiogOiBfcyA9ICQoPFsxXSkgOw0KICAgICAgICBjYXNlIFxcWypcXF0gOiBfcyA9ICQoPFsx XSkgOw0KICAgICAgICBjYXNlICogOiBfcyA9IFsuJCg8WzFdKV0gOw0KICAgICAgICB9DQoN CiAgICAgICAgZm9yIF9pIGluIFsuJCg8WzItXSldDQogICAgICAgIHsNCiAgICAgICAgICAg IF9zID0gJChfaTpSPSQoX3MpKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSBpZiAk KE1BQykNCiAgICB7DQogICAgICAgIF9zID0gJChET1QpIDsNCg0KICAgICAgICBmb3IgX2kg aW4gJCg8KQ0KICAgICAgICB7DQogICAgICAgICAgICBfcyA9ICQoX2k6Uj0kKF9zKSkgOw0K ICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIF9zID0gJCg8WzFd KSA7DQogICAgICAgIGxvY2FsIF9yID0gJCg8WzItXSkgOw0KDQogICAgICAgICMgSmFtIGRv ZXNuJ3QgaGFuZGxlIHRoZSByb290IGRpcmVjdG9yeSBwcm9wZXJseQ0KICAgICAgICBpZiAk KF9zKSBpbiAvICQoU0xBU0gpDQogICAgICAgIHsNCiAgICAgICAgICAgIF9zID0gJChfcykk KF9yWzFdKSA7DQogICAgICAgICAgICBfciA9ICQoX3JbMi1dKSA7DQogICAgICAgIH0NCiAg ICAgICAgDQogICAgICAgIGZvciBfaSBpbiAkKF9yKQ0KICAgICAgICB7DQogICAgICAgICAg ICBfcyA9ICQoX2k6Uj0kKF9zKSkgOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJu ICQoX3MpIDsNCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0DQpydWxl IEZEaXJOYW1lDQp7DQogICAgIyBUdXJuIGluZGl2aWR1YWwgZWxlbWVudHMgaW4gJCg8KSBp bnRvIGEgdXNhYmxlIHBhdGguDQogICAgcmV0dXJuIFsgam9pbi1wYXRoICQoPCkgOiAkKERP VCkgXSA7DQp9DQoNCg0KcnVsZSBfbWFrZUNvbW1vbg0Kew0KICAgICMgc3RyaXAgY29tbW9u IGluaXRpYWwgZWxlbWVudHMNCg0KICAgIGlmICQoJCg8KVsxXSkgJiYgJCgkKDwpWzFdKSA9 ICQoJCg+KVsxXSkNCiAgICB7DQogICAgICAgICQoPCkgPSAkKCQoPClbMi1dKSA7DQogICAg ICAgICQoPikgPSAkKCQoPilbMi1dKSA7DQogICAgICAgIF9tYWtlQ29tbW9uICQoPCkgOiAk KD4pIDsNCiAgICB9DQp9DQoNCg0KcnVsZSBGUmVsUGF0aA0Kew0KICAgIGxvY2FsIF9sIF9y IDsNCg0KICAgICMgZmlyc3Qgc3RyaXAgb2ZmIGNvbW1vbiBwYXJ0cw0KDQogICAgX2wgPSAk KDwpIDsNCiAgICBfciA9ICQoPikgOw0KDQogICAgX21ha2VDb21tb24gX2wgOiBfciA7DQoN CiAgICAjIG5vdyBtYWtlIHBhdGggdG8gcm9vdCBhbmQgcGF0aCBkb3duDQoNCiAgICBfbCA9 IFsgRlN1YkRpciAkKF9sKSBdIDsNCiAgICBfciA9IFsgRkRpck5hbWUgJChfcikgXSA7DQoN CiAgICAjIENvbmNhdGVuYXRlIGFuZCBzYXZlDQoNCiAgICAjIFhYWCBUaGlzIHNob3VsZCBi ZSBiZXR0ZXINCg0KICAgIGlmICQoX3IpID0gJChET1QpIHsNCiAgICAgICAgcmV0dXJuICQo X2wpIDsNCiAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gJChfcjpSPSQoX2wpKSA7DQog ICAgfQ0KfQ0KDQojIGR3YSA2LzE3LzAxIC0gbW9kaWZpZWQgZm9yIGJvb3N0IHRvIGhhbmRs ZSBtdWx0aXBsZSBzdWZmaXhlcw0KcnVsZSBGQXBwZW5kU3VmZml4DQp7DQogICAjIEUuZy4s ICJGQXBwZW5kU3VmZml4IHlhY2MgbGV4IGZvby5iYXQgOiAkKFNVRkVYRSkgOyINCiAgICMg cmV0dXJucyAoeWFjYyxsZXgsZm9vLmJhdCkgb24gVW5peCBhbmQgDQogICAjICh5YWNjLmV4 ZSxsZXguZXhlLGZvby5iYXQpIG9uIE5ULg0KDQogICAgaWYgJCg+KQ0KICAgIHsNCiAgICAg ICAgbG9jYWwgX2kgX28gOw0KDQogICAgICAgIGZvciBfaSBpbiAkKDwpDQogICAgICAgIHsN CiAgICAgICAgICAgIGlmICQoX2k6UykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICBfbyArPSAkKF9pKSAkKF9pOlM9JCg+WzItXSkpIDsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfbyArPSAkKF9p OlM9JCg+KSkgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiAk KF9vKSA7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHJldHVybiAkKDwpIDsN CiAgICB9DQp9DQoNCnJ1bGUgdW5tYWtlRGlyDQp7DQogICAgaWYgJCg+WzFdOkQpICYmICQo PlsxXTpEKSAhPSAkKD5bMV0pICYmICQoPlsxXTpEKSAhPSBcXFxcIA0KICAgIHsNCiAgICAg ICAgdW5tYWtlRGlyICQoPCkgOiAkKD5bMV06RCkgJCg+WzFdOkJTKSAkKD5bMi1dKSA7DQog ICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICQoPCkgPSAkKD4pIDsNCiAgICB9DQp9 DQoNCiMNCiMgQWN0aW9ucw0KIw0KDQojDQojIEZpcnN0IHRoZSBkZWZhdWx0cw0KIw0KDQph Y3Rpb25zIEFzDQp7DQogICAgJChBUykgJChBU0ZMQUdTKSAtSSQoSERSUykgLW8gJCg8KSAk KD4pDQp9DQoNCmFjdGlvbnMgQ2hncnANCnsNCiAgICBjaGdycCAkKEdST1VQKSAkKDwpDQp9 DQoNCmFjdGlvbnMgQ2htb2QxDQp7DQogICAgJChDSE1PRCkgJChNT0RFKSAiJCg8KSINCn0N Cg0KYWN0aW9ucyBDaG93bg0Kew0KICAgIGNob3duICQoT1dORVIpICQoPCkNCn0NCg0KYWN0 aW9ucyBwaWVjZW1lYWwgdG9nZXRoZXIgZXhpc3RpbmcgQ2xlYW4NCnsNCiAgICAkKFJNKSAi JCg+KSINCn0NCg0KYWN0aW9ucyBGaWxlDQp7DQogICAgJChDUCkgIiQoPikiICIkKDwpIg0K fQ0KDQphY3Rpb25zIEZpbGVDbG9uZQ0Kew0KICAgICQoQ0xPTkUpICIkKD4pIiAiJCg8KSIN Cn0NCg0KYWN0aW9ucyBHZW5GaWxlMQ0Kew0KICAgICQoPlsxXSkgJCg8KSAkKD5bMi1dKQ0K fQ0KDQphY3Rpb25zIEZvcnRyYW4NCnsNCiAgICAkKEZPUlRSQU4pICQoRk9SVFJBTkZMQUdT KSAtbyAkKDwpICQoPikNCn0NCg0KYWN0aW9ucyBIYXJkTGluaw0Kew0KICAgICQoUk0pICQo PCkNCiAgICAkKExOKSAkKD4pICQoPCkNCn0NCg0KYWN0aW9ucyBJbnN0YWxsDQp7DQogICAg JChDUCkgJCg+KSAkKDwpIA0KfQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9v c3QNCmFjdGlvbnMgdG9nZXRoZXIgTGV4DQp7DQogICAgJChMRVgpICQoTEVYRkxBR1MpICQo TEVYX09VVFBVVCkkKDwpICQoPikNCn0NCg0KIyBkd2EgNi80LzAxIC0gbW9kaWZpZWQgZm9y IGJvb3N0DQphY3Rpb25zIHRvZ2V0aGVyIExleE12DQp7DQogICAgJChNVikgbGV4Lnl5LmMg JCg8KQ0KfQ0KDQphY3Rpb25zIE1rRGlyMQ0Kew0KICAgICQoTUtESVIpICIkKDwpIg0KfQ0K DQphY3Rpb25zIHRvZ2V0aGVyIFJhbmxpYg0Kew0KICAgICQoUkFOTElCKSAkKDwpDQp9DQoN CmFjdGlvbnMgcXVpZXRseSB1cGRhdGVkIHBpZWNlbWVhbCB0b2dldGhlciBSbVRlbXBzDQp7 DQogICAgJChSTSkgJCg+KQ0KfQ0KDQphY3Rpb25zIFNoZWxsDQp7DQogICAgJChBV0spICcN CiAgICAgICAgICAgIE5SID09IDEgeyBwcmludCAiJChTSEVMTEhFQURFUikiIH0NCiAgICAg ICAgICAgIE5SID09IDEgJiYgL15bIzpdLyB7IG5leHQgfQ0KICAgICAgICAgICAgL14jIy8g eyBuZXh0IH0NCiAgICAgICAgICAgIHsgcHJpbnQgfQ0KICAgICcgPCAkKD4pID4gJCg8KQ0K fQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRo ZXIgWWFjYzENCnsNCiAgICAkKFlBQ0MpICQoWUFDQ0ZMQUdTKSAkKFlBQ0NfT1VUUFVUKSQo PFsxXSkgJCg+KQ0KfQ0KDQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCmFj dGlvbnMgdG9nZXRoZXIgWWFjY012DQp7DQogICAgJChNVikgJChZQUNDRklMRVMpLmMgJCg8 WzFdKQ0KICAgICQoTVYpICQoWUFDQ0ZJTEVTKS5oICQoPFsyXSkNCn0NCg0KIyBkd2EgNi80 LzAxIC0ga2lsbGVkIGFsbCBwbGF0Zm9ybS1zcGVjaWZpYyBhY3Rpb25zIGZvciBib29zdA0K DQojIGR3YSA2LzQvMDEgLSBtb2RpZmllZCBmb3IgYm9vc3QNCmFjdGlvbnMgdG9nZXRoZXIg WWFjYy1maXgtbGluZS1kaXJlY3RpdmVzDQp7DQogICAgJChZQUNDX0ZJWF9MSU5FUykgJCg8 KSA+ICQoPCkNCn0NCg== --------------040704070107060205050805--
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk