# Name: ied_plugin_composer v0.82 # Type: Admin side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMzp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6NDoiMC44MiI7czo4OiJyZXZpc2lvbiI7czowOiIiO3M6NjoiYXV0aG9yIjtzOjQz OiJZdXJhIExpbm55ayAvIFN0ZWYgRGF3c29uIC8gU3RldmUgRGlja2luc29uIjtzOjEwOiJh dXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5jb20vIjtzOjExOiJkZXNjcmlw dGlvbiI7czozMjoiV3JpdGUgYW5kIHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NToib3Jk ZXIiO3M6MToiNSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6MTA6ImxvYWRfb3JkZXIiO3M6MToi NSI7czo0OiJoZWxwIjtzOjI3MDQ2OiIJPHA+PGRpdiBpZD0iaWVkX2hlbHAiPjwvcD4KCgk8 aDEgaWQ9InRvcCI+SW5zcGlyZWQgcGx1Z2luIGNvbXBvc2VyPC9oMT4KCgk8cD5UaGlzIHBs dWdpbiBjcmVhdGVzIGEgbmV3IHBhZ2UgdW5kZXIgdGhlICYjODIxNjtFeHRlbnNpb25zJiM4 MjE3OyB0YWIgd2hlcmUgeW91IGNhbiBlZGl0IHBsdWdpbnMgdGhhdCBhcmUgYWxyZWFkeSBp bnN0YWxsZWQgaW4gVGV4dHBhdHRlcm4gYW5kIHJlZ2lzdGVyIG5ldyBwbHVnaW5zLjwvcD4K Cgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUs IGVkaXQgb3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCB0aGVuIHB1 Ymxpc2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gcGx1Z2luIGZvcm1hdCAoc2VlIGFuIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9kb3dubG9hZHMvZXhhbXBsZV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5leGFtcGxl PC9hPik8L2xpPgoJCTxsaT5GdWxsIHN1cHBvcnQgZm9yIHRoZSBvZmZpY2lhbCA8YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0 ZS50eHQiPnplbV90cGwucGhwIHBsdWdpbiB0ZW1wbGF0ZTwvYT4uIFRoZSA8YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZV9j b2RlX2ZpcnN0LnR4dCI+bW9kaWZpZWQgdmVyc2lvbjwvYT4gYnkgPGEgaHJlZj0iaHR0cDov L3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1Z2luLWNv bXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIxNjtzdHls ZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0ZXh0LiBU aGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9z cGFuPiBzZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0gYWNjb3Jk aW5nbHkuIEl0IHdpbGwgYWxzbyByZWFkIDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48L3NwYW4+ ICRMYXN0Q2hhbmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVyKTwvbGk+ CgkJPGxpPkV4cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLCBhbGxvd2lu ZyB5b3UgdG8gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNvbXBvc2Vy IG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmlsZSBpbiB0 aGUgcGx1Z2luX2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBvc2VyIGFu ZCBwdWJsaXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUgYm90dG9t IG9mIHRoZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBhZ2UiPkVk aXQgcGFnZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNhdmUgeW91 ciBjaGFuZ2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRoZSBjb2Rl ISBZb3UgY2FuIGV4cG9ydCBhczoKCTx1bD4KCQk8bGk+YSBzdGFuZGFyZCBCQVNFNjQtZW5j b2RlZCB0ZXh0IGZpbGU8L2xpPgoJCTxsaT5hIGd6aXBwZWQgdmVyc2lvbiAodXNlZnVsIGZv ciBsYXJnZSBwbHVnaW5zKTwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0YW5kYXJk IHRlbXBsYXRlIGZvcm1hdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5n LCBmaWxlcyBjYW4gYmUgc2F2ZWQgd2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qg b3IgdGhlIGhlbHAgYmxvY2sgZmlyc3QsIGFuZCB5b3UgY2FuIGNoYW5nZSB0aGUgb3V0cHV0 IGZpbGVuYW1lIGZvcm1hdCB0byB0YXN0ZS4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdl Ij5TZXR1cCBidXR0b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9y IGFsbCBwbHVnaW4gdHlwZXM6Cgk8dWw+CgkJPGxpPkNsaWVudCArIEFkbWluPC9saT4KCQk8 bGk+Q2xpZW50LXNpZGUgb25seTwvbGk+CgkJPGxpPkFkbWluLXNpZGUgb25seTwvbGk+CgkJ PGxpPkxpYnJhcnkgcGx1Z2luczwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPlN1cHBvcnQgZm9y IHNwZWNpZnlpbmcgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBpZiB5b3VyIHBs dWdpbiBuZWVkcyBzcGVjaWFsIHBvd2Vycy4gJiM4MjE2OzUmIzgyMTc7IGlzIHRoZSBkZWZh dWx0LiBOb3RlIHRoYXQgaWYgdXNpbmcgdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgdGhp cyBmZWF0dXJlIGlzIDxlbT5vbmx5IGF2YWlsYWJsZSBpZiB0aGUgPGNvZGU+JHBsdWdpblsm IzM5O29yZGVyJiMzOTtdPC9jb2RlPiBzdHJpbmcgaXMgaW4gdGhlIHRlbXBsYXRlIHRvIGJl Z2luIHdpdGguPC9lbT4gU28gaWYgeW91ciBsb2FkIG9yZGVyIGtlZXBzIHJldHVybmluZyB0 byAmIzgyMTY7NSYjODIxNzssIGVkaXQgeW91ciB0ZW1wbGF0ZSBkaXJlY3RseSB0byBhZGQg dGhhdCBzdHJpbmcgb3IgcGFzdGUgeW91ciBwbHVnaW4gaW50byB0aGUgcmVsZXZhbnQgcGFy dHMgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1w dHlfcGx1Z2luX3RlbXBsYXRlLnR4dCI+ZW1wdHkgcGx1Z2luIHRlbXBsYXRlPC9hPiBhbmQg dXBsb2FkIGl0PC9saT4KCQk8bGk+SGVscCB0ZXh0IGNhbiBiZSB3cml0dGVuIGluIFRleHRp bGUgb3IgKFgpSFRNTDwvbGk+CgkJPGxpPlRha2UgYWR2YW50YWdlIG9mIHRoZSA8YSBocmVm PSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTMwODki PlRpbnlNQ0UgPHNwYW4gY2xhc3M9ImNhcHMiPldZU0lXWUc8L3NwYW4+IGVkaXRvcjwvYT4g Zm9yIHRoZSBoZWxwIHNlY3Rpb24gb3IgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5l dC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MTY0MDA4Ij5FZGl0IEFyZWE8L2E+ IGZvciBjb2RlIG1hcmt1cCAodGhhbmtzIHZhcmlhYXMpLiBTZWUgdGhlIDxhIGhyZWY9IiNz ZXR1cHBhZ2UiPnNldHVwPC9hPiBhbmQgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4gc2Vj dGlvbnMgZm9yIG1vcmUgb24gdGhlc2UgZWRpdG9yczwvbGk+CgkJPGxpPkJ1aWx0LWluIFRl eHRpbGUgaGVscCB2aWV3ZXIgKHRoYW5rcyB0byBuZXQtY2FydmVyJiM4MjE3O3MgPGEgaHJl Zj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvcGx1Z2luLWhl bHAtdmlld2VyIj5QbHVnaW4gSGVscCBWaWV3ZXI8L2E+KSB0byBhbGxvdyB5b3UgdG8gcHJl dmlldyB5b3VyIEhlbHAgdGV4dCBkdXJpbmcgZGV2ZWxvcG1lbnQgKHRoZSB0d28gdmlld2Vy cyB3aWxsIGhhcHBpbHkgY28tZXhpc3QgaWYgeW91IHdpc2gpPC9saT4KCQk8bGk+UmVzaXph YmxlIHRleHRhcmVhLCBwbHVzIGNoYXJhY3RlciBsaW1pdC9jb3VudGVycyBzbyB0aGVyZSYj ODIxNztzIGxlc3MgY2hhbmNlIG9mIHlvdSBtYWtpbmcgdGhlIHBsdWdpbiBvciBkb2NzIHRv byBiaWcgdG8gZml0IGluIHRoZSBkYXRhYmFzZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIHNl dHRpbmcgYSBjb2RlICYjODIyMDtyZXN0b3JlIHBvaW50JiM4MjIxOyBhbmQgcm9sbGluZyBi YWNrIHRvIHRoYXQgcG9pbnQgaWYgdGhpbmdzIGdvIHNpZGV3YXlzLiBBbHNvIHVzZWZ1bCBm b3IgcmV0dXJuaW5nIHBsdWdpbiBzb3VyY2UgY29kZSB0byBpdHMgYXMtaW5zdGFsbGVkIHN0 YXRlPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3JzIj5BdXRob3JzPC9oMj4KCgk8cD5P cmlnaW5hbCBwbHVnaW46IDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL2ZlZWRi YWNrLyI+WXVyYSBMaW5ueWs8L2E+PGJyIC8+Ck1vZGlmaWNhdGlvbnMgKHYwLjUrKTogPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3Nvbjwv YT48YnIgLz4KQSB0b3VjaCBvZiBjbGFzczogPGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5z Lm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0ZXZlIERpY2tpbnNvbjwvYT48YnIgLz4KUGx1 cyBoZWxwIGZyb20gYSBob3N0IG9mIGZvcnVtIGNvbnRyaWJ1dG9ycyB0b28gbnVtZXJvdXMg dG8gbWVudGlvbi4gWW91IGtub3cgd2hvIHlvdSBhcmUgOy0pPC9wPgoKCTxoMiBpZD0iaW5z dGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwPkRvd25sb2Fk IHRoZSBwbHVnaW4gKHYwLjUgYW5kIGFib3ZlKSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9zdyI+c3RlZmRhd3Nvbi5jb208L2E+IChwcmV2aW91cyB2ZXJzaW9ucyBh cmUgc3RpbGwgYXZhaWxhYmxlIG9uIHRoZSA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2ll di51YS90eHAvaWVkX3BsdWdpbl9jb21wb3NlciI+SW5zcGlyZWQgaG9tZXBhZ2U8L2E+KSwg cGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g QWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdp bi48L3A+CgoJPHA+VmlzaXQgdGhlIEV4dGVuc2lvbnMgLSZndDsgUGx1Z2luIENvbXBvc2Vy IHRhYiBhbmQgY2xpY2sgdGhlIFNldHVwIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0IG9mIHRo ZSBzY3JlZW4uIEZyb20gaGVyZSB5b3UgY2FuIEluc3RhbGwsIERlbGV0ZSBhbmQgU2F2ZSB0 aGUgcGx1Z2luIHByZWZlcmVuY2VzLiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNl dHVwIHNlY3Rpb248L2E+IGZvciBkZXRhaWxzLjwvcD4KCgk8cD5UbyByZW1vdmUgdGhlIFBs dWdpbiBDb21wb3NlciAobm9vb28hKSB2aXNpdCB0aGUgU2V0dXAgcGFnZSBhZ2FpbiBmcm9t IHRoZSBQbHVnaW4gQ29tcG9zZXIgdGFiLCBoaXQgRGVsZXRlIHRvIHJlbW92ZSB0aGUgcHJl ZmVyZW5jZXMsIHRoZW4gc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGFzIG5vcm1hbCBmcm9t IHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVz YWdlPC9oMj4KCgk8aDMgaWQ9Imxpc3RwYWdlIj5MaXN0IHBhZ2U8L2gzPgoKCTxwPlRoZXJl IGlzIGEgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+IGJ1dHRvbiB0byBhbGxvdyB5 b3UgdG8gY29uZmlndXJlIHZhcmlvdXMgb3B0aW9ucyBpbiB0aGUgQ29tcG9zZXIsIHdoaWxl IHRoZSByZXN0IG9mIHRoZSBwYWdlIGxpc3RzIGFsbCBpbnN0YWxsZWQgcGx1Z2lucy4gVGhl IGNvbHVtbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luPC9zdHJvbmc+ IDogY2xpY2sgdGhlIHBsdWdpbiBuYW1lIHRvIDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdDwv YT4gaXQ8L2xpPgoJCTxsaT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IGlmIGF2YWlsYWJs ZSwgY2xpY2sgdGhlIGF1dGhvciB0byBnbyB0byB0aGVpciBzaXRlPC9saT4KCQk8bGk+PHN0 cm9uZz5WZXJzaW9uIChNb2RpZmllZCk8L3N0cm9uZz4gOiBzaG93cyB0aGUgY3VycmVudCB2 ZXJzaW9uIG51bWJlciBhbmQgd2hldGhlciB0aGUgcGx1Z2luIGhhcyBiZWVuIG1vZGlmaWVk IGZyb20gd2hlbiBpdCB3YXMgZWl0aGVyIGNyZWF0ZWQgb3IgaW5zdGFsbGVkLiBJZiBpdCBo YXMsIHlvdSBjYW4gY2xpY2sgdGhlIHZlcnNpb24gbnVtYmVyIHRvIHJlc3RvcmUgdGhlIHBs dWdpbiBjb2RlIHRvIGl0cyBpbnN0YWxsZWQgc3RhdGUgb3IgbGFzdCA8YSBocmVmPSIjcmVz dG9yZSI+cmVzdG9yZSBwb2ludDwvYT48L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9u PC9zdHJvbmc+IDogYnJpZWZseSwgd2hhdCB0aGUgcGx1Z2luIGRvZXM8L2xpPgoJCTxsaT48 c3Ryb25nPlB1Ymxpc2g8L3N0cm9uZz4gOiB0aHJlZSBsaW5rcwoJPHVsPgoJCTxsaT48ZW0+ UHVibGlzaDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgLnR4dCBmaWxlIGZvciBk aXN0cmlidXRpb24gdG8gb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnM8L2xpPgoJCTxsaT48ZW0+ WmlwPC9lbT4gOiBleHBvcnRzIHRoZSBwbHVnaW4gYXMgYSBjb21wcmVzc2VkIChnemlwcGVk KSAudHh0IGZpbGUgZm9yIGRpc3RyaWJ1dGlvbjwvbGk+CgkJPGxpPjxlbT5IZWxwPC9lbT4g OiBkaXNwbGF5cyB0aGUgKHRleHRpbGUgcHJvY2Vzc2VkKSBwbHVnaW4gZG9jdW1lbnRhdGlv biAoaWYgdGhlcmUgaXMgYW55KS4gQ2FuIGFsc28gYmUgdmlld2VkIGZyb20gdGhlIEVkaXQg cGFnZTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+T3JkZXI8L3N0cm9uZz4gOiB0 aGUgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3JkZXIgZnJvbSAxIChsb2FkZWQgZmlyc3Qp IHRvIDkgKGxvYWRlZCBsYXN0KS4gNSBpcyBkZWZhdWx0PC9saT4KCQk8bGk+PHN0cm9uZz5B Y3RpdmU8L3N0cm9uZz4gOiBlbmFibGUgb3IgZGlzYWJsZSBhIHBsdWdpbiBieSBjbGlja2lu ZyBlbnRyaWVzIGluIHRoaXMgY29sdW1uPC9saT4KCQk8bGk+PHN0cm9uZz54PC9zdHJvbmc+ IDogZGVsZXRlIHRoZSBwbHVnaW48L2xpPgoJPC91bD4KCgk8cD5JZiB5b3UgYXJlIHVzaW5n IHRoZSBwbHVnaW5fY2FjaGVfZGlyIChBZG1pbiAtJmd0OyBBZHZhbmNlZCBQcmVmcyksIGFu eSBwbHVnaW5zIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQgdXBsb2FkZWQgdG8g dGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSBhdmFpbGFibGUgaW1tZWRpYXRlbHkgZm9yIGVkaXRp bmcgYW5kIHRlc3RpbmcuIFlvdSBjYW4gZWRpdCBhbmQgcHVibGlzaCB0aGUgcGx1Z2lucyBp biB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIHJlZ3VsYXIsIGluc3RhbGxlZCBwbHVnaW5zIGFi b3ZlLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uczo8L3A+CgoJPG9sPgoJCTxsaT5U aGVyZSBpcyBubyBjb25jZXB0IG9mICYjODIxNjttb2RpZmllZCYjODIxNzsgb3Igb2YgcmVz dG9yZSBwb2ludHMgYXMgdGhlIGZpbGVzIGFsd2F5cyByZXByZXNlbnQgdGhlIG1vc3QgdXAt dG8tZGF0ZSB2ZXJzaW9uPC9saT4KCQk8bGk+Q2FjaGVkIHBsdWdpbnMgYXJlICYjODIyMDth bHdheXMgb24mIzgyMjE7IGFuZCBkbyBub3QgbmVlZCB0byBiZSBpbnN0YWxsZWQuIFRvIGRl YWN0aXZhdGUgdGhlIHBsdWdpbiB0aGUgZmlsZSBtdXN0IGJlIHJlbW92ZWQgZnJvbSB0aGUg cGx1Z2luIGNhY2hlIGRpcmVjdG9yeTwvbGk+CgkJPGxpPlRoZSByZWNvbW1lbmRlZCBsb2Fk IG9yZGVyIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlIGxpc3QgcGFnZTsgaXQgY2FuIG9u bHkgYmUgYWx0ZXJlZCB2aWEgdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwvYT4gcGFn ZTwvbGk+Cgk8L29sPgoKCTxoMz5DcmVhdGluZyBhbmQgbmFtaW5nIHBsdWdpbnM8L2gzPgoK CTxwPlRoZXJlIGFyZSB0d28gd2F5cyBvZiBjcmVhdGluZyBwbHVnaW5zIGZyb20gdGhlIFBs dWdpbiBDb21wb3NlciBsaXN0IHBhZ2UuIFRoZSBmaXJzdCBpcyB0byBjcmVhdGUgYSBibGFu aywgZW1wdHkgcGx1Z2luOyB1c2UgdGhlIHRleHQgYm94IGF0IHRoZSB0b3AgZm9yIHRoaXMu IE5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPklmIHlvdSB1c2UgYSBzdGFuZGFyZCBwbHVnaW4g bmFtZSAoZS5nLiA8Y29kZT5hYmNfbXlfcGx1Z2luPC9jb2RlPikgaXQgd2lsbCBiZSBjcmVh dGVkIGluIHRoZSBkYXRhYmFzZTwvbGk+CgkJPGxpPklmIHlvdSBhZGQgPGNvZGU+LnBocDwv Y29kZT4gdG8gdGhlIHBsdWdpbiBuYW1lLCBpdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHBs dWdpbiBjYWNoZSBkaXJlY3RvcnkgaW4gYSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQ8L2xp PgoJCTxsaT5Bdm9pZCBzcGVjaWZ5aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gaW4g dGhlIG5hbWUgJiM4MjEyOyB5b3Ugc2hvdWxkIHVzZSB0aGUgPGVtPlJlbmFtZSBmaWxlPC9l bT4gb3IgPGVtPkV4cG9ydDwvZW0+IG9wdGlvbnMgaW4gdGhlIEVkaXQgcGFnZSB0byBhbHRl ciB0aGUgZmlsZW5hbWUgaW50byB5b3VyIHByZWZlcnJlZCBmaWxlbmFtZSBmb3JtYXQgKHNl ZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cDwvYT4pPC9saT4KCTwvdWw+CgoJPHA+VGhl IHNlY29uZCBtZXRob2Qgb2YgY3JlYXRpbmcgYSBwbHVnaW4gaXMgdG8gdXBsb2FkIG9uZSB1 c2luZyB0aGUgQnJvd3NlL3VwbG9hZCBib3ggYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4g Tm90ZXM6PC9wPgoKCTx1bD4KCQk8bGk+WW91IGNhbiB1cGxvYWQgY29kZSBpbiBlaXRoZXIg c3RhbmRhcmQgcGx1Z2luIHRlbXBsYXRlIGZvcm1hdCAoZWl0aGVyIGNvZGUtZmlyc3Qgb3Ig aGVscC1maXJzdCwgY29tcGxldGUgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFu PiBhcmVhcykgb3Igc2ltcGx5IHVwbG9hZCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3Nw YW4+IGZpbGUgY29udGFpbmluZyBjb2RlIG9ubHk8L2xpPgoJCTxsaT5UaGUgcGx1Z2luIHdp bGwgYWx3YXlzIGJlIGluc3RhbGxlZCBpbiB0aGUgZGF0YWJhc2Ugd2hlbiB1c2luZyB0aGlz IG1ldGhvZCAodXBsb2FkIHRoZSB0ZW1wbGF0ZSBtYW51YWxseSB2aWEgPHNwYW4gY2xhc3M9 ImNhcHMiPkZUUDwvc3Bhbj4gb3IgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIGEgLnBocCBleHRl bnNpb24gYW5kIHBhc3RlIHRoZSBjb2RlIGludG8gaXQgaWYgeW91IHdhbnQgaXQgaW4gdGhl IHBsdWdpbiBjYWNoZSk8L2xpPgoJCTxsaT5JZiB0aGUgcGx1Z2luIGV4aXN0cyBpdCB3aWxs IGJlIHVwZGF0ZWQgd2l0aCB5b3VyIG5ldyBpbmZvPC9saT4KCQk8bGk+VGhpcyBpcyB0aGUg b25seSBwbGFjZSB5b3UgY2FuIHVwbG9hZCByYXcgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gd2l0aCB0aGUgPGNvZGU+Jmx0Oz9waHAgPyZndDs8L2NvZGU+IG1hcmtlcnMuIEV2 ZXJ5d2hlcmUgZWxzZSB5b3Ugc2hvdWxkIHVzZSBhIGZ1bGwgdGVtcGxhdGU8L2xpPgoJPC91 bD4KCgk8cD5FdmVyeSBwbHVnaW4gc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBhIHRocmVlLWxl dHRlciBwcmVmaXgsIGFuIHVuZGVyc2NvcmUsIHRoZW4gdGhlIG5hbWUgb2YgdGhlIHBsdWdp bi4gWW91IGFyZSBmcmVlIHRvIGNob29zZSB5b3VyIG93biB0aHJlZS1sZXR0ZXIgcHJlZml4 ICh1c3VhbGx5IHlvdXIgaW5pdGlhbHMpIHN1YmplY3QgdG8gPGEgaHJlZj0iaHR0cDovL3d3 dy50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9UmVzZXJ2ZWRfUGx1Z2lu X1ByZWZpeGVzIj5hdm9pZGluZyBvbmVzIGFscmVhZHkgdGFrZW4gYnkgb3RoZXIgcGx1Z2lu IGF1dGhvcnM8L2E+IHNvIHBlb3BsZSBjYW4gZ2V0IHRvIGtub3cgeW91ciB3b3JrLiBQbHVz LCBpdCBncm91cHMgeW91ciBwbHVnaW5zIHRvZ2V0aGVyIGluIHRoZSBwbHVnaW4gYXJjaGl2 ZS48L3A+CgoJPHA+QWxsIGZ1bmN0aW9ucywgdmFyaWFibGVzIChpbmNsdWRpbmcgPHNwYW4g Y2xhc3M9ImNhcHMiPkRPTTwvc3Bhbj4gbm9kZXMpLCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NT PC9zcGFuPiBjbGFzc2VzLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgaW5qZWN0IGludG8gdGhl IGdsb2JhbCBzY29wZSBzaG91bGQgYmUgcHJlZml4ZWQgYnkgPHN0cm9uZz5hdCBsZWFzdDwv c3Ryb25nPiB5b3VyIHRocmVlIGxldHRlciBjb2RlOyBwcmVmZXJhYmx5IHRoZSB3aG9sZSBw bHVnaW4gbmFtZSAob3IgYWJyaWRnZWQgdmVyc2lvbiB0aGVyZW9mKSB0byBhdm9pZCBuYW1l c3BhY2UgY2xhc2hlcyB3aXRoIHlvdXIgb3duIGFuZCBvdGhlciBwbHVnaW5zLjwvcD4KCgk8 aDMgaWQ9ImVkaXRwYWdlIj5FZGl0IHBhZ2U8L2gzPgoKCTxwPlRoZSBFZGl0IHBhZ2UgaXMg d2hlcmUgeW91IGNyYWZ0IHlvdXIgbWFzdGVycGllY2UuIEl0IGlzIGRpdmlkZWQgaW50byB2 YXJpb3VzIHNlY3Rpb25zIGFuZCBib3hlcywgYXMgZGV0YWlsZWQgaGVyZTo8L3A+CgoJPHVs PgoJCTxsaT48c3Ryb25nPlBsdWdpbjwvc3Ryb25nPiA6IHRoZSBuYW1lIG9mIHlvdXIgcGx1 Z2luLCB3aGljaCB5b3UgY2FuIGNoYW5nZSBhdCBhbnkgdGltZS4gTm90ZSB0aGF0IGlmIHlv dSBhcmUgZWRpdGluZyBhIGZpbGUgZnJvbSB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBh bmQgdGhlIDxjb2RlPiRwbHVnaW5bJiMzOTtuYW1lJiMzOTtdPC9jb2RlPiByb3cgaXMgY29t bWVudGVkIG91dCBpbiB0aGUgZmlsZSwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gY2hhbmdl IHRoZSBwbHVnaW4gbmFtZTsgaXQgd2lsbCBhbHdheXMgYmUgdGhlIG5hbWUgb2YgdGhlIGZp bGUuPGJyIC8+ClRvIHRoZSByaWdodCBvZiB0aGlzIGJveCB3aWxsIGJlIG9uZSBvZiB0d28g aXRlbXM6Cgk8dWw+CgkJPGxpPjxzdHJvbmc+RW5hYmxlPC9zdHJvbmc+IDogaWYgdGhlIHBs dWdpbiBpcyBhIHJlZ3VsYXIgKGluc3RhbGxlZCkgcGx1Z2luLCB0aGlzIGNoZWNrYm94IGFs bG93cyB5b3UgdG8gc3dpdGNoIHRoZSBwbHVnaW4gb24gYW5kIG9mZjwvbGk+CgkJPGxpPjxz dHJvbmc+KGZpbGUgbmFtZSk8L3N0cm9uZz4gOiBpZiB5b3UgYXJlIGVkaXRpbmcgYSBwbHVn aW4gaW4gdGhlIGNhY2hlIGRpcmVjdG9yeSwgdGhlIGN1cnJlbnQgZmlsZW5hbWUgeW91IGFy ZSB3cml0aW5nIHRvIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQ8L2xpPgoJPC91bD48L2xp PgoJCTxsaT48c3Ryb25nPlNvdXJjZSBjb2RlPC9zdHJvbmc+IDogeW91ciBwbHVnaW4gY29k ZSBnb2VzIGhlcmUuIFRoZSBib3ggaXMgcmVzaXphYmxlIGJ5IGdyYWJiaW5nIHRoZSA8Y29k ZT4tLS0gKyAtLS08L2NvZGU+IGJlbG93IHRoZSBib3ggYW5kIGRyYWdnaW5nLiBUaGUgYm94 IHNpemUgd2lsbCBiZSByZW1lbWJlcmVkIHZpYSBhIGNvb2tpZSBmb3IgMzAgZGF5cyBmcm9t IHlvdXIgbGFzdCBhZGp1c3RtZW50LjxiciAvPgpQbHVnaW5zIGFyZSBsaW1pdGVkIHRvIDY0 a0Igb2YgY29kZSBzbyB0aGVyZSBpcyBhbHNvIGEgY2hhcmFjdGVyIGNvdW50ZG93biBqdXN0 IGJlbG93IHRoZSBlZGl0IGJveC4gSWYgeW91IHN0YXJ0IGFwcHJvYWNoaW5nIHRoZSBsaW1p dCwgaXQgbWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmcgc3BsaXR0aW5nIHlvdXIgcGx1Z2lu IGludG8gYSBmZXcgcGFydHM8L2xpPgoJCTxsaT48c3Ryb25nPlBsdWdpbiB0eXBlPC9zdHJv bmc+IDogY2hvb3NlIG9uZSBvZiB0aGUgdHlwZXMgdGhhdCBiZXN0IGZpdHMgdGhlIGludGVu ZGVkIHVzZSBvZiB5b3VyIHBsdWdpbi4gSWYgeW91IGNob29zZSAmIzgyMTY7Q2xpZW50JiM4 MjE3OyBhbmQgdHJ5IHRvIGFjY2VzcyB0aGUgYWRtaW4gc2lkZSBpbiB5b3VyIGNvZGUsIGEg d2FybmluZyB3aWxsIGJlIGlzc3VlZCB3aGVuIHRoZSBwbHVnaW4gaXMgc2F2ZWQgc28geW91 IGNhbiBjaG9vc2UgYSBtb3JlIGFwcHJvcHJpYXRlIHR5cGU8L2xpPgoJCTxsaT48c3Ryb25n PkxvYWQgb3JkZXI8L3N0cm9uZz4gOiBjaG9vc2UgdGhlIHJlY29tbWVuZGVkIG9yZGVyIGlu IHdoaWNoIHlvdSB0aGluayB5b3VyIHBsdWdpbiBzaG91bGQgYmUgbG9hZGVkIGJ5IHVzZXJz LiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgZGVmYXVsdCBvZiAmIzgyMTY7NSYjODIxNzsgaXMg ZmluZSBidXQgZm9yIHNwZWNpYWwgY2FzZXMgd2hlcmUgeW91ciBwbHVnaW4gaGFzIHRvIHNl dCB1cCBhbiBlbnZpcm9ubWVudCBvciBoYXMgdG8gd2FpdCBmb3Igb3RoZXIgcGx1Z2lucyB0 byBsb2FkIGZpcnN0LCB5b3UgbWlnaHQgcmVxdWlyZSBvbmUgb2YgdGhlIG51bWJlcnMgZWl0 aGVyIHNpZGUuIEJlIGF3YXJlIHRoYXQgdGhpcyBpcyBhIDxlbT5yZWNvbW1lbmRhdGlvbjwv ZW0+IGFuZCBpcyBvdmVycmlkYWJsZSBieSB0aGUgc2l0ZSBhZG1pbi4gSWYgdGhlIHBsdWdp biBpcyBhbHJlYWR5IGRlcGxveWVkIG9uIGEgc2l0ZSwgdGhlIGxvYWQgb3JkZXIgYWxyZWFk eSBzZXQgd2lsbCBiZSB1c2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhpcyB2 YWx1ZS4gT25seSBuZXcgaW5zdGFsbGF0aW9ucyB3aWxsIGJlIHNldCB0byB0aGlzIHZhbHVl IGJ5IGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ryb25nPlZlcnNpb248L3N0cm9uZz4gOiB0aGUg Y3VycmVudCB2ZXJzaW9uIG9mIHlvdXIgcGx1Z2luLiBUbyB0aGUgcmlnaHQgb2YgdGhpcyBi b3ggd2lsbCBiZSBvbmUgb2YgdHdvIGl0ZW1zOgoJPHVsPgoJCTxsaT48c3Ryb25nPlJlc3Rv cmUgcG9pbnQ8L3N0cm9uZz4gOiBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCB3aWxsICh1cG9u IHNhdmUpIHN0b3JlIHRoZSBjdXJyZW50IGNvZGUgYXMgYSBiYXNlbGluZSB0byB3aGljaCB5 b3UgbWF5ICYjODIyMDtyb2xsIGJhY2smIzgyMjE7IHRvIGF0IGEgbGF0ZXIgZGF0ZS4gU2Vl IDxhIGhyZWY9IiNyZXN0b3JlIj5yZXN0b3JlIHBvaW50czwvYT4gZm9yIG1vcmU8L2xpPgoJ CTxsaT48c3Ryb25nPlJlbmFtZSBmaWxlPC9zdHJvbmc+IDogYnkgZGVmYXVsdCwgd2hlbiB5 b3Ugc2F2ZSBhIGZpbGUgdGhhdCBpcyBiZWluZyBlZGl0ZWQgaW4gdGhlIHBsdWdpbiBjYWNo ZSBkaXJlY3RvcnksIGl0IGlzIG92ZXJ3cml0dGVuIHdpdGggeW91ciBjaGFuZ2VzLiBPbmNl IGEgcGx1Z2luIGlzIHJlbGVhc2VkIHlvdSB3b3VsZCBub3JtYWxseSBkb3dubG9hZCBhIGNv cHkgdmlhIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IGZyb20gdGhlIHBsdWdpbl9j YWNoZV9kaXIgZm9yIHNhZmVrZWVwaW5nLiBJZiB5b3UgdGhlbiBzdWJzZXF1ZW50bHkgbW9k aWZ5IHRoZSBwbHVnaW4gYW5kIGluY3JlYXNlIHRoZSB2ZXJzaW9uIG51bWJlciwgeW91IG1h eSB3aXNoIHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBhcyB3ZWxsLiBDaGVja2luZyB0aGlzIGJv eCB3aWxsICh1cG9uIHNhdmUpIHJlbmFtZSB0aGUgZmlsZSBpbiB0aGUgcGx1Z2luIGNhY2hl IGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyLiBTZWUg dGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwIHBhZ2U8L2E+IGZvciBkZXRhaWxzIG9u IGN1c3RvbWlzaW5nIHRoZSBmaWxlbmFtZSBmb3JtYXQ8L2xpPgoJPC91bD48L2xpPgoJCTxs aT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IHlvdSE8L2xpPgoJCTxsaT48c3Ryb25nPldl YnNpdGU8L3N0cm9uZz4gOiB5b3VyIGhvbWUgcGFnZSBvciBwbHVnaW4gcGFnZS4gV2lsbCBi ZSBsaW5rZWQgdG8geW91ciBuYW1lIGluIHRoZSBsaXN0IHBhZ2U8L2xpPgoJCTxsaT48c3Ry b25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogdmVyeSBicmllZiBvbmUtbGluZXIgZGVzY3Jp YmluZyB5b3VyIHBsdWdpbiYjODIxNztzIGNvcmUgZnVuY3Rpb24gLyByZWFzb24gZm9yIGV4 aXN0ZW5jZTwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIEhlbHA8L3N0cm9uZz4gOiBkb2N1 bWVudGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBsdWdpbiB1c2FnZS4gQ2FuIChwcm9iYWJs eSBzaG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVy bi5jb20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxlPC9hPi4gVGhlcmUgd2VyZSBzb21lIDxh IGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0y NTMyNyI+bG9vc2UgZG9jdW1lbnRhdGlvbiBndWlkZWxpbmVzPC9hPiBwcm9wb3NlZCB0aGF0 IHNlcnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0 ZXIgY291bnRkb3duIGhlcmUgaXMgb25seSBhcHByb3hpbWF0ZSBiZWNhdXNlIHdoZW4geW91 ciBwbHVnaW4gaXMgc2F2ZWQgYW5kIHRoZSBoZWxwIGlzIGNvbnZlcnRlZCB0byA8c3BhbiBj bGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4sIGl0IHVzdWFsbHkgdGFrZXMgdXAgbW9yZSBzcGFj ZSB0aGFuIFRleHRpbGU8L2xpPgoJCTxsaT48c3Ryb25nPlN0eWxlPC9zdHJvbmc+IDogQW55 IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHN0eWxlIHJ1bGVzIHlvdSB3aXNoIHRv IGFwcGx5IHRvIHlvdXIgZG9jdW1lbnRhdGlvbiB0byBtYWtlIGl0IG1vcmUgcHJldHR5LiBJ dCYjODIxNztzIGJlc3QgdG8gdGFyZ2V0IHlvdXIgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2Fs bHkgYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZSBQbHVnaW4gSGVscCBzZWN0aW9uIHdpdGgg c29tZXRoaW5nIGxpa2U6IDxjb2RlPiZsdDtkaXYgaWQ9JnF1b3Q7YWJjX2hlbHAmcXVvdDsm Z3Q7aDEuIERvY3MgZ28gaGVyZS4uLiZsdDsvZGl2Jmd0OzwvY29kZT4uPGJyIC8+Ck5vdGUg dGhhdCBib3RoIHRoZSBQbHVnaW4gSGVscCBhbmQgU3R5bGUgYXJlIGdvdmVybmVkIGJ5IGEg c2l6ZSBsaW1pdC4gU2luY2UgdGhleSBhcmUgYm90aCBzdG9yZWQgaW4gdGhlIHNhbWUgNjRr QiBmaWVsZCwgdGhlIHNpemUgaXMgc2hhcmVkIGJldHdlZW4gdGhlbS4gU3R5bGVzIGFyZSA8 ZW0+bm90PC9lbT4gcGFzc2VkIHRocm91Z2ggdGhlIFRleHRpbGUgcHJvY2Vzc29yIGFuZCB5 b3UgZG9uJiM4MjE3O3QgbmVlZCB0byBhZGQgdGhlIDxjb2RlPiZsdDtzdHlsZSZndDs8L2Nv ZGU+IHRhZ3M7IHRoZSBDb21wb3NlciB3aWxsIGRvIHRoYXQgZm9yIHlvdSAoYnV0IHNlZSA8 YSBocmVmPSIjbm90ZXMiPk5vdGVzPC9hPik8L2xpPgoJCTxsaT48c3Ryb25nPlNhdmU8L3N0 cm9uZz4gOiBjb21taXRzIHRoZSBjaGFuZ2VzPC9saT4KCQk8bGk+PHN0cm9uZz5bIFZpZXcg SGVscCBdPC9zdHJvbmc+IDogc2hvd3MgdGhlIGRvY3VtZW50YXRpb24gYXMgdXNlcnMgd2ls bCBzZWUgaXQgKGkuZS4gVGV4dGlsZSBwcm9jZXNzZWQgaW50byA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRNTDwvc3Bhbj4pLiBBbnkgaGVscCB0ZXh0IG92ZXIgNjRrQiBpbiBsZW5ndGggaXMg dHJ1bmNhdGVkIHNvIHlvdSBjYW4gdmVyaWZ5IHRoYXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlv biBmaXRzPC9saT4KCTwvdWw+CgoJPHA+T25jZSB5b3UgaGF2ZSBzYXZlZCB5b3VyIHBsdWdp biwgdGhlcmUgaXMgYSBzZWN0aW9uIHJpZ2h0IGF0IHRoZSBib3R0b20gdGhhdCBhbGxvd3Mg eW91IHRvIGV4cG9ydCB5b3VyIHBsdWdpbiBpbiBhIHZhcmlldHkgb2YgZm9ybWF0czo8L3A+ CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBjb2RlIGZvciBkaXN0cmlidXRpb248L3N0 cm9uZz4gOiBpcyBhIGRpcmVjdCBjb3B5ICYjODIxNjtuJiM4MjE3OyBwYXN0ZSBhcmVhIHRo YXQgY29udGFpbnMgeW91ciBlbnRpcmUgcGx1Z2luICsgZG9jcy4gWW91IGNhbiB0YWtlIHRo aXMgZW50aXJlIGFyZWEgYW5kIHBhc3RlIGl0IGludG8gdGhlICYjODIxNjtJbnN0YWxsIHBs dWdpbiYjODIxNzsgYm94IG9uIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2U8L2xpPgoJ CTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0PC9zdHJvbmc+IDogY29u dmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu PiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiB0byB5b3VyIGNvbXB1dGVyIGFzIGEgcmVkaXN0cmli dXRhYmxlIHRleHQgZmlsZSBmb3Igb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnMgdG8gaW5zdGFs bDwvbGk+CgkJPGxpPjxzdHJvbmc+RXhwb3J0IGFzIGFiY19teXBsdWdpbi50eHQgKGNvbXBy ZXNzZWQpPC9zdHJvbmc+IDogY29udmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiBhcyBhIHJlZGlz dHJpYnV0YWJsZSwgZ3ppcHBlZCB0ZXh0IGZpbGUgZm9yIG90aGVyIFRleHRwYXR0ZXJuIHVz ZXJzIHRvIGluc3RhbGwuIFVzZWZ1bCBmb3IgbGFyZ2UgcGx1Z2lucyBvciB0byBvZmZlciBh biBhbHRlcm5hdGl2ZSBmb3IgcGVvcGxlIHdobyBoYXZlIHN0cmluZ2VudCBzaXplIGxpbWl0 cyBpbXBvc2VkIGJ5IHRoZWlyIGhvc3Q8L2xpPgoJCTxsaT48c3Ryb25nPkV4cG9ydCBhcyBh YmNfbXlwbHVnaW4ucGhwPC9zdHJvbmc+IDogc2F2ZXMgdGhlIHBsdWdpbiBpbiBhIFRleHRw YXR0ZXJuIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdC4gVXNlZnVsIGZvciBrZWVwaW5nIHRo ZSBwbHVnaW4gZm9yIHlvdXJzZWxmICYjODIxMjsgY29tcGxldGUgd2l0aCBUZXh0aWxlIG1h cmt1cCAmIzgyMTI7IHNvIGl0IGNhbiBiZSBsYXRlciBlZGl0ZWQgYW5kIHJlLWlzc3VlZCAv IHVwZGF0ZWQgb3Igc2hhcmVkIHdpdGggb3RoZXIgZGV2ZWxvcGVycyB3aG8gaGF2ZSB0aGUg UGx1Z2luIENvbXBvc2VyIG9yIHplbV90cGwucGhwIGNvbXBpbGVyPC9saT4KCTwvdWw+CgoJ PHA+Tm90ZSB0aGF0IHdoZW4gZXhwb3J0aW5nIGFzIGEgc3RhbmRhcmQgcGx1Z2luLCB0aGUg VGV4dGlsZSBwcm9jZXNzb3IgYXR0ZW1wdHMgdG8gZGVjaWRlIGlmIHlvdSBoYXZlIHVzZWQg VGV4dGlsZSBvciBub3Q7IGl0IHNpbXBseSBsb29rcyBmb3IgYSB0ZXh0aWxlZCBoZWFkZXIg KDxjb2RlPmgxLjwvY29kZT4gdGhyb3VnaCA8Y29kZT5oNi48L2NvZGU+KS4gUnVubmluZyBw dXJlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0aHJvdWdoIFRleHRpbGUgbWF5 IG9jY2FzaW9uYWxseSBjYXVzZSBlbmNvZGluZyBpc3N1ZXMgZGVwZW5kaW5nIG9uIHRoZSBv cmlnaW5hbCBjaGFyYWN0ZXIgc2V0IHVzZWQgc28gaXQgaXMgYWx3YXlzIGJlc3QgdG8gdHJ5 IGFuZCBzdGljayB0byBUZXh0aWxlIGFzIHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbS48L3A+ CgoJPGgzIGlkPSJyZXN0b3JlIj5SZXN0b3JlIHBvaW50czwvaDM+CgoJPHA+V2hlbiBhIHBs dWdpbiBpcyBpbnN0YWxsZWQsIGEgY29weSBpcyBrZXB0IGluIHRoZSBkYXRhYmFzZS4gSWYg dGhlIHBsdWdpbiBjb2RlIChub3QgaGVscCB0ZXh0KSBpcyBzdWJzZXF1ZW50bHkgZWRpdGVk LCB0aGUgcGx1Z2luIGlzIGNvbnNpZGVyZWQgJiM4MjIwO21vZGlmaWVkJiM4MjIxOzsgaW5k aWNhdGVkIGluIHRoZSBQbHVnaW4gQ29tcG9zZXIgbGlzdCBwYWdlIGFuZCBBZG1pbiAtJmd0 OyBQbHVnaW5zIHBhZ2UuIFNvbWV0aW1lcyB5b3UgbWF5IHdpc2ggdG8gcmV2ZXJ0IGFueSBj aGFuZ2VzIGJhY2sgdG8gdGhlIGFzLWluc3RhbGxlZCBzdGF0ZSBhbmQgdGhlIENvbXBvc2Vy IGFsbG93cyB0aGlzLjwvcD4KCgk8cD5BbnkgdGltZSBhIHBsdWdpbiBpcyBtYXJrZWQgYXMg JiM4MjE2O21vZGlmaWVkJiM4MjE3OywgdGhlIHZlcnNpb24gbnVtYmVyIGJlY29tZXMgY2xp Y2thYmxlIGluIHRoZSA8YSBocmVmPSIjbGlzdHBhZ2UiPmxpc3Q8L2E+IHBhZ2UuIENsaWNr aW5nIGl0IChhbmQgY29uZmlybWluZyB5b3UgYXJlIHN1cmUpIHdpbGwgd2lwZSBvdXQgYW55 IGNoYW5nZXMgeW91IG1hZGUgYW5kIHJldHVybiB0aGUgcGx1Z2luIHRvIGl0cyBpbnN0YWxs ZWQgc3RhdGUuPC9wPgoKCTxwPkR1cmluZyB0aGUgZWRpdGluZyBwcm9jZXNzIG9mIHlvdXIg b3duIHBsdWdpbnMsIGl0IG1heSBiZSB0aGF0IGF0IGNlcnRhaW4gdGltZXMgeW91IHdpc2gg dG8gcHV0IGEgc3Rha2UgaW4gdGhlIGdyb3VuZCBhbmQgc2F5ICYjODIyMDt0aGlzIGlzIG15 IGN1cnJlbnQgYmFzZWxpbmUgdGhhdCBJIG1pZ2h0IHdhbnQgdG8gcmV0dXJuIHRvIGxhdGVy JiM4MjIxOy4gUGVyaGFwcyB5b3UgYXJlIGFib3V0IHRvIG1ha2Ugc29tZSBtb25zdGVyIGVk aXRzIG9yIHRyeSBzb21ldGhpbmcgZXhwZXJpbWVudGFsIGFuZCB3YW50IGFuIGVhc3kgZmFs bGJhY2sgbWVjaGFuaXNtLiBUaGF0JiM4MjE3O3Mgd2hlcmUgdGhlICYjODIyMDtSZXN0b3Jl IHBvaW50JiM4MjIxOyBjaGVja2JveCBjb21lcyBpbi48L3A+CgoJPHA+QnkgY2hlY2tpbmcg dGhlIGJveCB3aGVuIHlvdSBzYXZlIHlvdXIgcGx1Z2luLCB0aGUgY3VycmVudCBjb2RlIHdp bGwgYmVjb21lIHlvdXIgbmV3IHJvbGxiYWNrIHBvaW50IGFuZCB0aGUgcGx1Z2luIHdpbGwg bm8gbG9uZ2VyIGJlIG1hcmtlZCAmIzgyMjA7bW9kaWZpZWQmIzgyMjE7LiBBbnkgY2hhbmdl cyBtYWRlIGJlZm9yZWhhbmQgd2lsbCBub3QgYmUgcmVjb3ZlcmFibGUgc28geW91IHdpbGwg aGF2ZSB0byByZWx5IG9uIHlvdXIgb3duIGJhY2t1cHMgaWYgeW91IHdpc2ggdG8gZ28gYmFj ayBmdXJ0aGVyLiBBbnkgZWRpdHMgeW91IG1ha2UgYWZ0ZXIgY3JlYXRpbmcgYSByZXN0b3Jl IHBvaW50IGNhbiBiZSB1bmRvbmUgYnkgdmlzaXRpbmcgdGhlIGxpc3QgcGFnZSBhbmQgY2xp Y2tpbmcgdGhlIHZlcnNpb24gbnVtYmVyIG5leHQgdG8geW91ciBwbHVnaW4uIEN1cnJlbnRs eSwgb25seSBvbmUgcm9sbGJhY2sgcG9pbnQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJh c2UuPC9wPgoKCTxoMyBpZD0ic2V0dXBwYWdlIj5TZXR1cCBwYWdlPC9oMz4KCgk8cD5DbGlj a2luZyBTZXR1cCBmcm9tIHRoZSBtYWluIDxhIGhyZWY9IiNsaXN0cGFnZSI+bGlzdDwvYT4g cGFnZSBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuPC9wPgoKCTxw PllvdSBjYW4gSW5zdGFsbCB0aGVtICYjODIxMjsgd2hpY2ggcmV0YWlucyBhbnkgcHJldmlv dXMgc2V0dGluZ3MgYW5kIGFkZHMgbmV3IG9uZXMgd2hlbiB1cGRhdGluZyB0aGUgcGx1Z2lu ICYjODIxMjsgb3IgRGVsZXRlIHRoZW0uIFRoZSBwbHVnaW4gY2hlY2tzIGlmIGFsbCByZXF1 aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxlIGFuZCBvZmZlcnMgeW91IHRoZSBjaG9p Y2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5nIGluIGNhc2UgdGhlIHByZWZzIGJlY29tZSBj b3JydXB0ZWQgb3IgbmVlZCB1cGRhdGluZy48L3A+CgoJPHA+T25jZSB0aGUgcHJlZnMgYXJl IGluc3RhbGxlZCB5b3Ugd2lsbCBzZWUgdGhlIGF2YWlsYWJsZSBvcHRpb25zOjwvcD4KCgk8 dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGVkaXRvcjwvc3Ryb25nPiA6IHlvdSBtYXkgY2hv b3NlIHRvIGVkaXQgdGhlIGNvZGUgdXNpbmcgYSAzcmQgcGFydHkgc3ludGF4IGhpZ2hsaWdo dGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVkaXQgQXJlYSBhbmQgKHNvcnQgb2YpIENv ZGVQcmVzcyAoc2VlIHRoZSA8YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPikuIENob29zZSB0 aGUgc3lzdGVtIGhlcmUsIHdoZXJlYnkgdGhlIGJveCBiZW5lYXRoIGJlY29tZXMgYXZhaWxh YmxlIHNvIHlvdSBjYW4gc3BlY2lmeSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gcGF0aCBvZiB0aGUgRWRpdEFyZWEgaW5zdGFsbGF0aW9uIG9uIHlvdXIgc2VydmVyOyB0 aGlzIGlzIG5vcm1hbGx5IGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyAvZWRpdF9h cmVhLiBObyB0cmFpbGluZyBzbGFzaCBpcyByZXF1aXJlZDwvbGk+CgkJPGxpPjxzdHJvbmc+ UGx1Z2luIGVkaXRvciB3aWR0aDwvc3Ryb25nPiA6IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy cyB3aWRlIHRvIG1ha2UgdGhlIGJveGVzIG9uIHRoZSA8YSBocmVmPSIjZWRpdHBhZ2UiPkVk aXQ8L2E+IHBhZ2UgdG8gc3VpdCB5b3VyIHNjcmVlbiByZXNvbHV0aW9uPC9saT4KCQk8bGk+ PHN0cm9uZz5IZWxwIGVkaXRvcjwvc3Ryb25nPiA6IHlvdSBtYXkgY2hvb3NlIHRvIGVkaXQg dGhlIGhlbHAgbWFudWFsbHkgdmlhIFRleHRpbGUgb3IgdXNlIFRpbnlNQ0UgZm9yIGEgbW9y ZSA8c3BhbiBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj4gZXhwZXJpZW5jZS4gVGhpcyBp cyBleHBlcmltZW50YWwgYW5kIHByb2JhYmx5IHdvbiYjODIxNzt0IHdvcmsgcmlnaHQgbm93 PC9saT4KCQk8bGk+PHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBleHBv cnQgb3JkZXI8L3N0cm9uZz4gOiB3aGVuIHNhdmluZyB5b3VyIHBsdWdpbiBpbiB0aGUgc3Rh bmRhcmQgdGVtcGxhdGUgZm9ybWF0LCB0aGlzIGdvdmVybnMgd2hldGhlciB5b3UgcHJlZmVy IHRoZSBjb2RlIGJsb2NrIHRvIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgYW5kIHRoZSBo ZWxwIGJsb2NrIGJlbG93LCBvciB2aWNlIHZlcnNhPC9saT4KCTwvdWw+CgoJPHA+VGhlIG5l eHQgdGhyZWUgdGV4dGJveGVzIGFyZSBhbGwgdmVyeSBzaW1pbGFyOyB0aGV5IGRlZmluZSB0 aGUgZm9ybWF0IG9mIHRoZSBmaWxlbmFtZXMgd2hlbiB5b3UgZXhwb3J0IHBsdWdpbnMuIFRo ZSBmaXJzdCBpcyBmb3Igd2hlbiB5b3UgZXhwb3J0IHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJj YXBzIj5CQVNFPC9zcGFuPi02NCBwbHVnaW5zOyB0aGUgc2Vjb25kIGlzIGZvciBjb21wcmVz c2VkIHBsdWdpbnM7IHRoZSB0aGlyZCBpcyBmb3IgZXhwb3J0aW5nIGEgc3RhbmRhcmQgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gdGVtcGxhdGUuPC9wPgoKCTxwPldoZXJldmVy IHlvdSB0eXBlIDxjb2RlPntuYW1lfTwvY29kZT4sIHRoZSBwbHVnaW4gbmFtZSB3aWxsIGFw cGVhci4gU2ltaWxhcmx5LCA8Y29kZT57dmVyc2lvbn08L2NvZGU+IHdpbGwgYmUgcmVwbGFj ZWQgd2l0aCB0aGUgY3VycmVudCBwbHVnaW4gdmVyc2lvbiBudW1iZXIuIFlvdSBjYW4gdHlw ZSBhbnl0aGluZyB5b3UgbGlrZSBpbiB0aGVzZSBib3hlcywgYnV0IGl0JiM4MjE3O3MgbW9y ZSB1c2VmdWwgdG8gaW5jbHVkZSBib3RoIG9mIHRoZSByZXBsYWNlbWVudCBzdHJpbmdzIHNv bWV3aGVyZSBpbiBlYWNoIGJveCBzbyB5b3UgZG9uJiM4MjE3O3QgZ2V0IG5hbWUgLyB2ZXJz aW9uIGNsYXNoZXMuPC9wPgoKCTxwPkZvciBleGFtcGxlLCBpZiB5b3UgZG9uJiM4MjE3O3Qg bGlrZSB0aGUgZmFjdCB0aGF0IHppcHBlZCBwbHVnaW5zIGFyZSBleHBvcnRlZCBhcyA8Y29k ZT5wZnhfbXlfcGx1Z2luX3YwLjFfemlwLnR4dDwvY29kZT4sIHlvdSBjYW4gY2hhbmdlIGl0 LiBQZXJoYXBzIHlvdSBtYXkgcHJlZmVyIDxjb2RlPnBmeF9teV9wbHVnaW4tY29tcHJlc3Nl ZC0wLjEudHh0PC9jb2RlPi4gSW4gd2hpY2ggY2FzZSwgc2V0IHRoZSAybmQgYm94IHRvIDxj b2RlPntuYW1lfS1jb21wcmVzc2VkLXt2ZXJzaW9ufS50eHQ8L2NvZGU+LjwvcD4KCgk8cD5U aGUgZXh0ZW5zaW9uIHNob3VsZCB1c3VhbGx5IGJlIHNwZWNpZmllZCBzbyB5b3VyIHN5c3Rl bS9icm93c2VyIGtub3dzIHRoZSBmaWxlJiM4MjE3O3MgdHlwZSB3aGVuIGl0IGlzIGV4cG9y dGVkLCBidXQgaXQmIzgyMTc7cyBub3QgbWFuZGF0b3J5IGFzIHRoZSA8c3BhbiBjbGFzcz0i Y2FwcyI+TUlNRTwvc3Bhbj4gdHlwZSBpcyBnaXZlbiBzbyAoZ29vZCkgYnJvd3NlcnMgc2hv dWxkIHJlYWQgdGhhdC48L3A+CgoJPHA+RmluYWxseSwgaWYgeW91IHdpc2ggdG8gdGFrZSBh ZHZhbnRhZ2Ugb2YgaGVscCBjYWNoZWluZywgcHV0IHRoZSBwYXRoIHRvIGEgdGVtcG9yYXJ5 IGRpcmVjdG9yeSBpbiB0aGUgPHN0cm9uZz5DYWNoZSBkaXI8L3N0cm9uZz4gYm94LiBFbXB0 eSB0aGUgYm94IGlmIHlvdSBwcmVmZXIgc2F2ZXMgYW5kIGV4cG9ydHMgdG8gYmUgc2xvd2Vy ISBEZWZhdWx0cyB0byA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHRl bXBvcmFyeSBkaXJlY3RvcnkuPC9wPgoKCTxoMyBpZD0ibm90ZXMiPk5vdGVzIC8ga25vd24g aXNzdWVzPC9oMz4KCgk8b2w+CgkJPGxpPk1vcmUgZWRpdG9ycyBjYW4gYmUgaW50ZWdyYXRl ZCBpbnRvIHRoZSBDb21wb3NlciBmYWlybHkgZWFzaWx5LiBJZiB5b3UgZmluZCBhIGdvb2Qg b25lLCBnZXQgaW4gY29udGFjdC4gQmUgd2FybmVkIHRoYXQgdGhlIGVkaXRvcnMgZG8gdGVu ZCB0byBzbG93IHRoZSBwbHVnaW4gZG93biwgZXNwZWNpYWxseSBhcyBjb2RlIHNpemUgaW5j cmVhc2VzLjwvbGk+CgkJPGxpPlRlbnRhdGl2ZSBzdXBwb3J0IGZvciBDb2RlUHJlc3MgaXMg YXZhaWxhYmxlIGJ1dCBpdCBpbmV4cGxpY2FibHkgYmxhbmtzIG91dCB0aGUgcGx1Z2luIGNv ZGUgd2hlbiBzYXZlZCwgc28gc3VwcG9ydCBpcyBkaXNhYmxlZCBmb3Igbm93LiBJZiBhbnlv bmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIHdoeSBpdCBkb2VzIHRoaXMsIHBsZWFzZSBzcGVh ayB1cCEgVW5jb21tZW50IHRoZSBjb2RlIG9uIGxpbmUgMTA4NSBhbmQgY29tbWVudCBvdXQg bGluZSAxMDg2IHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZpc2l0IHRoZSBTZXR1cCBwYWdl IGFuZCBzZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxpc3QuIERvbiYjODIxNzt0IGV4cGVy aW1lbnQgd2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1wb3J0YW50IHBsdWdpbiA6LSk8L2xp PgoJCTxsaT5XaGVuIGEgcGx1Z2luIGlzIHNhdmVkIHRvIHRoZSBwbHVnaW5fY2FjaGVfZGly LCBpZiB5b3UgaGF2ZSBub3QgcHV0IDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IG1hcmtl cnMgaW4geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBibG9jayB0aGV5IHdp bGwgYmUgYWRkZWQgZm9yIHlvdSBpbiB0aGUgdGV4dCBhcmVhIGJ1dCA8ZW0+bm90PC9lbT4g c2F2ZWQgaW4gdGhlIGFjdHVhbCB0ZW1wbGF0ZSB1bnRpbCB5b3Ugc2F2ZSBpdCBhZ2FpbiAo ZXhwb3J0aW5nIGFzIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyB1 bmFmZmVjdGVkKS4gU28gaWYgeW91IGFyZSBpbiB0aGUgaGFiaXQgb2YgbWFudWFsbHkgZG93 bmxvYWRpbmcgdGhlIGZpbGUgZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3Nw YW4+IGNsaWVudCBpbW1lZGlhdGVseSBhZnRlciBhIHNhdmUsIGp1c3Qgc2F2ZSB0aGUgcGx1 Z2luIGFnYWluIHRvIGJlIHN1cmU8L2xpPgoJPC9vbD4KCgk8aDMgaWQ9ImNoYW5nZWxvZyI+ Q2hhbmdlbG9nPC9oMz4KCgk8dWw+CgkJPGxpPjI1IEZlYiAwNiB8IDAuMSB8IEluaXRpYWwg cmVsZWFzZTwvbGk+CgkJPGxpPjI1IEZlYiAwNiB8IDAuMiB8IEFkZGVkICYjODIxNjtzYXZl IGFzJiM4MjE3OyBvcHRpb248L2xpPgoJCTxsaT4xNyBNYXIgMDYgfCAwLjMgfCBBZGRlZCAm IzgyMTY7c2F2ZSBhcyBwaHAmIzgyMTc7PC9saT4KCQk8bGk+MTAgQXByIDA2IHwgMC40IHwg QWRkZWQgc3VwcG9ydCBmb3IgcGx1Z2luX2NhY2hlX2RpcjwvbGk+CgkJPGxpPjA0IEphbiAw OCB8IDAuNSB8IEZ1bGwgc3VwcG9ydCBmb3Igc3RkIHRlbXBsYXRlOyBjb21wcmVzc2VkIHBs dWdpbnM7IExpYnJhcnkgcGx1Z2luczsgVGV4dGlsZSBoZWxwIGFuZCBzdHlsaW5nOyBpbnRl Z3JhdGlvbiB3aXRoIG5ldC1jYXJ2ZXImIzgyMTc7cyBQbHVnaW4gSGVscCBWaWV3ZXI8L2xp PgoJCTxsaT4wNyBKYW4gMDggfCAwLjYgfCBCdWlsdC1pbiBoZWxwIHZpZXdlciAodGhhbmtz IG5ldC1jYXJ2ZXIpOyBzdXBwb3J0IGZvciBFZGl0IEFyZWEgJmFtcDsgQ29kZVByZXNzKGlz aCkgKHRoYW5rcyB2YXJpYWFzKTsgSGVscCBibG9jay9Db2RlIGJsb2NrIHBvc2l0aW9uIHN3 aXRjaGFibGUgb24gZXhwb3J0OyBhZGRlZCBTZXR1cCBwcmVmcyBwYWdlOyBsaW5lIGJyZWFr L3N0eWxlIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+MDggSmFuIDA4IHwgMC43IHwgUmUtaW1wb3J0 aW5nIHBsdWdpbnMgbm93IHJldGFpbnMgc3R5bGUgYmxvY2s7IGFkZGVkICYjODIxNjthZG1p biBzaWRlIHBsdWdpbiB3aXRoIGNsaWVudC1zaWRlIHR5cGUmIzgyMTc7IHdhcm5pbmc7IGNo YW5nZWQgYnV0dG9uIHN0eWxpbmcgYW5kIHBvc2l0aW9ucyAoYWxsIHRoYW5rcyBuZXQtY2Fy dmVyKTsgZ1R4dCgpIHByZWYgbGFiZWxzIGFuZCAmIzgyMTY7aW50ZWxsaWdlbnQmIzgyMTc7 IHByZWZzIChnbyBqUXVlcnkgZ28hKTsgY2FjaGVkIHBsdWdpbnMgbm93IGFsc28gaGF2ZSBk aXJlY3QgZXhwb3J0IGZyb20gRWRpdCBwYWdlOyAmIzgyMTY7ZG9uJiM4MjE3O3QgdGV4dGls ZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4mIzgyMTc7IGNoZWNrOyBtaW5vciBi dWdmaXhlczwvbGk+CgkJPGxpPjA5IEphbiAwOCB8IDAuNzEgfCBUZXh0YXJlYSB3aWR0aCBj YW4gbm93IGJlIGNvbnRyb2xsZWQgZnJvbSBwcmVmcywgYW5kIGhlaWdodCBmcm9tIGEgZHJh ZyBiYXI7IGRlZmF1bHQgd2lkdGggaW5jcmVhc2VkIHRvIDExMCBjaGFyczsgcHVibGlzaCBw bHVnaW5zIGZyb20gdGhlIGxpc3QgcGFnZTsgSW5zdGFsbCBidXR0b24gcmVtb3ZlZCB3aGVu IHByZWZzIGFsbCBjb3JyZWN0bHkgaW5zdGFsbGVkIChhbGwgdGhhbmtzIHZhcmlhYXMgLyBp Ymxhc3RvZmYpPC9saT4KCQk8bGk+MTAgSmFuIDA4IHwgMC43MiB8IEZpeGVkIGJ1ZyBpZiBw bHVnaW4gaGFzIG5vIGhlbHA7IHN0eWxlIHNlY3Rpb24gbm8gbG9uZ2VyIHN0b3JlZC9leHBv cnRlZCBpZiBpdCYjODIxNztzIG5vdCBpbiB1c2UgKHRoYW5rcyB0aGVfZ2hvc3QgLyBpYmxh c3RvZmYpPC9saT4KCQk8bGk+MTEgSmFuIDA4IHwgMC43MyB8IEFkZGVkIHN1cHBvcnQgZm9y IDxlbT5yZWFkaW5nPC9lbT4gYW4gb3B0aW9uYWwgcmV2aXNpb24gZnJvbSB0aGUgdGVtcGxh dGUgcGFyc2VyIGFuZCBhcHBlbmRpbmcgaXQgdG8gdGhlIHZlcnNpb24gKHRoYW5rcyBuZXQt Y2FydmVyKTsgbW9yZSBnVHh0KCkgc3RyaW5ncyBjb252ZXJ0ZWQ8L2xpPgoJCTxsaT4yOCBN YXIgMDggfCAwLjc0IHwgRml4ZWQgZW1wdHkgcGx1Z2luIGNvZGUgaWYgU3R5bGUgYmxvY2sg bGVmdCBibGFuayA7IGZpeGVkIHN0cmlwL3NsYXNoL2VuY29kaW5nIGVycm9ycyAodGhhbmtz IHRoZV9naG9zdC9ydXVkKSA7IGZpeGVkIGNybGYgbmV3bGluZXMgaW4gY29kZSBibG9jayAo dGhhbmtzIGhha2pvb24vcnV1ZCk8L2xpPgoJCTxsaT4yOCBNYXkgMDggfCAwLjc1IHwgQWRk ZWQgJiM4MjE2O21vZGlmaWVkJiM4MjE3OyB0byB0aGUgVmVyc2lvbiBjb2x1bW4gKHRoYW5r cyB1bGkpIDsgYWRkZWQgYWJpbGl0eSB0byByZW5hbWUgZmlsZXMgaW4gdGhlIHBsdWdpbiBj YWNoZSBkaXIgd2hlbiB0aGUgdmVyc2lvbiBjaGFuZ2VzPC9saT4KCQk8bGk+MDMgTm92IDA4 IHwgMC44IHwgQWRkZWQgc3VwcG9ydCBmb3IgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3Jk ZXIgOyBhZGRlZCBBZG1pbi1vbmx5IHBsdWdpbiB0eXBlOyBhZGRlZCBhYmlsaXR5IHRvIG92 ZXJyaWRlIGZpbGVuYW1lIGZvcm1hdCBvbiBleHBvcnQgOyBhZGRlZCByZXN0b3JlIHBvaW50 L3JvbGxiYWNrICh0aGFua3MgbWF2ZXJpY2spIDsgYWRkZWQgY2hhcmFjdGVyIGNvdW50ICh0 aGFua3MgcGVwZWJlKSA7IHJhdGlvbmFsaXNlZCB0aGUgbGlzdCBhbmQgZWRpdCBwYWdlcyA7 IHNwZWQgdXAgZXhwb3J0L3NhdmUgcm91dGluZXMgOyBmaXhlZCBhIGZldyBjb3JuZXIgY2Fz ZSBidWdzIChlLmcuIGVtcHR5IHBsdWdpbiBuYW1lLCBtaXNzaW5nIHF1b3RlcyBpbiB0ZW1w bGF0ZSBvcHRpb25zKTwvbGk+CgkJPGxpPjAzIEphbiAwOSB8IDAuODEgfCBBZGRlZCB0ZXh0 aWxlIGNhY2hlaW5nIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2l0aCBsYXJnZSBoZWxwIGZp bGVzIDsgcHJvZmlsZWQgY29kZSBhbmQgaW1wcm92ZWQgc3BlZWQgaW4gdmFyaW91cyBmdW5j dGlvbnM8L2xpPgoJCTxsaT4yMyBGZWIgMDkgfCAwLjgyIHwgQ2FuIG5vdyBjcmVhdGUgbmV3 IHRlbXBsYXRlIGZpbGVzIG9uIHRoZSBmbHkgKHRoYW5rcyBhencpIDsgZml4ZWQgVGV4dGls ZSBsaW1pdCBvbiBsYXJnZSBoZWxwIGZpbGVzIDsgZml4ZWQgZGF0YWJhc2UgY2FsbHMgZm9y IE15U1FMIHN0cmljdCBtb2RlICh0aGFua3MgR29jb20gLyBhencpPC9saT4KCTwvdWw+CgoJ PGgyIGlkPSJ3cml0aW5nIj5Xcml0aW5nIGEgcGx1Z2luPC9oMj4KCgk8cD5Zb3Ugc2hvdWxk IGJlIGF3YXJlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29t L3ZpZXd0b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2luIEF1dGhvciBSZXNvdXJjZXM8L2E+IHRv cGljIG9uIHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0IEZvcnVtLCBhbmQgeW91IG1pZ2h0IGFs c28gd2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVk LmtpZXYudWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0Ij5UZXh0UGF0dGVybiBwbHVnaW4gY2hl YXQgc2hlZXQ8L2E+IGFuZCB0aGUgdHV0b3JpYWxzIGFuZCBndWlkZXMgZm9yIDxhIGhyZWY9 Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9RXh0ZW5kaW5n X1RleHRwYXR0ZXJuIj5FeHRlbmRpbmcgVGV4dHBhdHRlcm48L2E+IG9uIFRleHRCb29rLjwv cD4KCgk8cD5IYXBweSBwbHVnaW4gYXV0aG9yaW5nIDotKTwvcD4KCiAgPC9kaXY+CjwhLS0g LS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoj aWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIGNvZGUgeyBmb250LXdl aWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9u b3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGNvZGUuc2Vk X2NvZGVfdGFnIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5 OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBw eCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojaWVkX2hlbHAgYTpsaW5rLCAjaWVkX2hl bHAgYTp2aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9y ZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRf aGVscCBhOmhvdmVyLCAjaWVkX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1k ZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGlu Zy1ib3R0b206MXB4O30KI2llZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHgg R2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0K I2llZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5n OjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlm OyB9CiNpZWRfaGVscCBoMyB7IGNvbG9yOiAjMTA4MDMwOyBmb250OiBib2xkIDEycHggQXJp YWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTVweCAwIDA7 dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQTFVH SU4gQ1NTIC0tLSAtLT4KIjtzOjM6ImNzcyI7czo5MjU6IjxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+CiNpZWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojaWVkX2hlbHAgY29kZSB7IGZv bnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVy LCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojaWVkX2hlbHAgY29k ZS5zZWRfY29kZV90YWcgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVk ICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdp bjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNpZWRfaGVscCBhOmxpbmssICNp ZWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25l OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30K I2llZF9oZWxwIGE6aG92ZXIsICNpZWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0 ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBw YWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDog MjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRl cjsgfQojaWVkX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBh ZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IH0KI2llZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJw eCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4 IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO30KPC9zdHlsZT4iO3M6NDoiY29kZSI7 czo1MDIxMjoiaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7CglhZGRfcHJpdnMoJ2ll ZF9wbHVnaW5fY29tcG9zZXInLCcxLDInKTsKCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycs ICdpZWRfcGx1Z2luX2NvbXBvc2VyJywgaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX2Nv bXBvc2VyJykpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fY29tcG9zZXInLCAn aWVkX3BsdWdpbl9jb21wb3NlcicpOwoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAk aWVkX3BsdWdpbl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFscywgJHByZWZzOwoJJGllZF9w bHVnaW5fZ2xvYmFscyA9IGFycmF5KAoJCSdjc3Nfc3RhcnQnID0+ICc8IS0tJywKCQknY3Nz X2VuZCcgPT4gJy0tPicsCgkJJ2RsbV9zdGFydCcgPT4gJyMnLAoJCSdkbG1fZW5kJyA9PiAn JywKCQknc3RhcnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkJJ2Vu ZCcgPT4gJyAtLS0gRU5EIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkpOwoJLy8gRG91YmxlIGFy cmF5OiAxc3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRlZmF1bHRz LAoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkgbmVlZCByZW1v dmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1wdHkpCgkkaWVkX3BsdWdpbl9w cmVmcyA9IGFycmF5KAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdub25l JywKCQkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMsCgkJCSdpZWRf cGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRp dG9yJyA9PiAndGV4dGlsZScsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnID0+ IGh1LidqcycuRFMsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJzAnLAoJCQkn aWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnID0+ICd7bmFtZX1fdnt2ZXJzaW9ufS50eHQnLAoJ CQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJyA9PiAne25hbWV9X3Z7dmVyc2lvbn1femlw LnR4dCcsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICd7bmFtZX1fdnt2ZXJz aW9ufS5waHAnLAoJCQknaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnID0+ICRwcmVmc1sn dGVtcGRpciddLAoJCSksCgkJYXJyYXkoCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2FueV9t b3JlX3BsYWNlaG9sZGVyJyA9PiAnJywKCQkpCgkpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IGllZF9wbHVnaW5fY29tcG9zZXIgKCRldmVudCwgJHN0ZXApIHsKCWlmKCEkc3RlcCBvciAh aW5fYXJyYXkoJHN0ZXAsIGFycmF5KCdpZWRfcGx1Z2luX2RlbGV0ZScsCgkJCSdpZWRfcGx1 Z2luX2VkaXQnLAoJCQknaWVkX3BsdWdpbl9oZWxwJywKCQkJJ2llZF9wbHVnaW5fbGlzdCcs CgkJCSdpZWRfcGx1Z2luX2luc3RhbGwnLAoJCQknaWVkX3BsdWdpbl9zYXZlJywKCQkJJ2ll ZF9wbHVnaW5fcmVzdG9yZScsCgkJCSdpZWRfc3dpdGNoX3N0YXR1cycsCgkJCSdpZWRfc2V0 X29yZGVyJywKCQkJJ2llZF9wbHVnaW5fc2V0dXAnLAoJCQknaWVkX3BsdWdpbl9wcmVmc19p bnN0YWxsJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNfcmVtb3ZlJywKCQkJJ2llZF9wbHVnaW5f cHJlZnNfdXBkYXRlJywKCQkJJ2llZF9wbHVnaW5fY3JlYXRlX25ldycsCgkJCSdpZWRfcGx1 Z2luX3NhdmVfYXNfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUnLAoJ CQknaWVkX3BsdWdpbl91cGxvYWQnLAoJCQknaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcicsCgkJ KSkpIHsKCQlpZWRfcGx1Z2luX2xpc3QoKTsKCX0gZWxzZSAkc3RlcCgpOwp9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi8vIFJldXJucyBhbiBhcnJheSBvZiBmaWxlbmFtZXM7IDFzdCBpcyB0aGUgc3RhbmRh cmQgcGx1Z2luLCAybmQgaXMgdGhlIGNvbXByZXNzZWQgcGx1Z2luLCAzcmQgaXMgdGhlIFBI UCB0ZW1wbGF0ZQpmdW5jdGlvbiBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lv bikgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzLCAkcHJlZnM7CgoJJG91dCA9IGFycmF5 KAoJCSgoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZSddKSAmJiAhZW1w dHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZSddKSkgPyAkcHJlZnNbJ2llZF9w bHVnaW5fb3V0cHV0X3NmaWxlJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdp bl9vdXRwdXRfc2ZpbGUnXSksCgkJKChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X3NmaWxlYyddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMn XSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSA6ICRpZWRfcGx1Z2lu X3ByZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSksCgkJKChpc3NldCgkcHJl ZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRf cGx1Z2luX291dHB1dF9zZmlsZXAnXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9z ZmlsZXAnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmls ZXAnXSksCgkpOwoKCSRyZXAgPSBhcnJheSgKCQkie25hbWV9IiA9PiAkbmFtZSwKCQkie3Zl cnNpb259IiA9PiAkdmVyc2lvbiwKCSk7CgoJZm9yZWFjaCAoJG91dCBhcyAkZmlkeCA9PiAk Zm5hbWUpIHsKCQkkZm5hbWUgPSBzdHJ0cigkZm5hbWUsICRyZXApOwoJCSRvdXRbJGZpZHhd ID0gc21kX3Nhbml0aXplRm9yRmlsZSgkZm5hbWUpOwoJfQoKCXJldHVybiAkb3V0Owp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbGlzdCgkbWVzc2FnZT0nJykgewoJcGFn ZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgllY2hvIHN0YXJ0VGFibGUo J2xpc3QnKS4KdHIodGRhKApmb3JtKApmSW5wdXQoJ3RleHQnLCduYW1lJywnJywnJywnJywn JywnMzAnLCcwJykKLiBmSW5wdXQoJ3N1Ym1pdCcsJ3N1Ym1pdCcsaWVkX3BsdWdpbl9nVHh0 KCdjcmVhdGVfbmV3JyksJ3NtYWxsZXJib3gnKQouIHNJbnB1dCgnaWVkX3BsdWdpbl9jcmVh dGVfbmV3JykKLiBlSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQopCiwnIGNvbHNwYW49 IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKQoudGRhKGZvcm0oZklucHV0KCdz dWJtaXQnLCAnc3VibWl0JywgaWVkX3BsdWdpbl9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcp LnNJbnB1dCgnaWVkX3BsdWdpbl9zZXR1cCcpLmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3Nl cicpKSwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKSkuCmFz c0hlYWQoJ3BsdWdpbicsJ2F1dGhvcicsZ1R4dCgndmVyc2lvbicpLicgKCcuZ1R4dCgncGx1 Z2luX21vZGlmaWVkJykuJyknLCdkZXNjcmlwdGlvbicsJ3B1Ymxpc2gnLCdvcmRlcicsJ2Fj dGl2ZScsJycpOwoKCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAi MT0xIG9yZGVyIGJ5IG5hbWUiKTsKCgl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQll eHRyYWN0KCRhKTsKCQkkZW5hbWUgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29t cG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtuYW1lPScuJG5hbWUuJyI+Jy4k bmFtZS4nPC9hPic7CgkJJGhsaW5rID0gKCRoZWxwKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtu YW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdoZWxwJykuJzwvYT4nIDogJ05vbmUnOwoJCSRvTGlu ayA9IGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3JkZXIpOwoJCSRmbmFt ZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7CgkJJHB1YnRhZyA9 IHRhZyhnVHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29t cG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFt ZS4nIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVz WzBdLiAnIicpOwoJCSRwdWJ6dGFnID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnY29tcHJlc3Mn KSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRf cGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10cnVlIiB0 aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzFdLiAn IicpOwoJCSRtb2RpZmllZCA9IChzdHJ0b2xvd2VyKCRjb2RlKSAhPSAoc3RydG9sb3dlcigk Y29kZV9yZXN0b3JlKSkpOwoKCQllY2hvIHRyKHRkKCRlbmFtZSkKLnRkKCggKCRhdXRob3Jf dXJpKSA/ICc8YSBocmVmPSInLiRhdXRob3JfdXJpLiciPicuJGF1dGhvci4nPC9hPicgOiAk YXV0aG9yKSwxNjApCi50ZCgoKCRtb2RpZmllZCkgPyAnPGEgaHJlZj0iaW5kZXgucGhwP2V2 ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9yZXN0b3JlJiMz ODtuYW1lPScuJG5hbWUuJyIgdGl0bGU9IicuaWVkX3BsdWdpbl9nVHh0KCdyZXN0b3JlX2hl bHAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gdmVyaWZ5KFwnJy5pZWRfcGx1Z2luX2dUeHQoJ3Jl c3RvcmVfdmVyaWZ5JywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKS4nXCcpOyI+Jy4kdmVy c2lvbi4nPC9hPicgOiAkdmVyc2lvbikgLiAoKCRtb2RpZmllZCkgPyAnJm5ic3A7KCcuZ1R4 dCgneWVzJykuJyknIDogJycpLDEwKQoudGQoJGRlc2NyaXB0aW9uLDI2MCkKLnRkKCRwdWJ0 YWcgLicgfCAnLiAkcHVienRhZyAuJyB8ICcuICRobGluaykKLnRkKCRvTGluaywgNDApCi50 ZChpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpLDMwKQoK LnRkKGRMaW5rKCdpZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCdu YW1lJywkbmFtZSksMzApCik7CgkJdW5zZXQoJG5hbWUsJHBhZ2UsJGRlbGV0ZWxpbmspOwoJ fQoKCWlmICghZW1wdHkoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXSkp IHsKCQkkZmlsZW5hbWVzID0gYXJyYXkoKTsKCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVm cyddWydwbHVnaW5fY2FjaGVfZGlyJ10pOwoJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQo KSkgewoJCQlpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewoJCQkJJGZpbGVh ZGRyID0gJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsK CQkJCWlmICghaXNfZGlyKCRmaWxlYWRkcikpIHsKCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7 CgkJCQl9CgkJCX0KCQl9CgkJJGRpci0+Y2xvc2UoKTsKCQkoJGZpbGVuYW1lcyk/bmF0Y2Fz ZXNvcnQoJGZpbGVuYW1lcyk6Jyc7CgkJZWNobyB0cigKCQl0ZGEoCgkJdGFnKGllZF9wbHVn aW5fZ1R4dCgncnVuX2Zyb20nKS4nICcudGFnKCdwbHVnaW5fY2FjaGVfZGlyJywnYWNyb255 bScsJyB0aXRsZT0iJy4kR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLici IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJykuJzonLCdoMScpCgkJ LCcgY29sc3Bhbj0iOCIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246 bGVmdCInKQoKCQkpOwoKCQllY2hvIGFzc0hlYWQoJ3BsdWdpbicsJ2F1dGhvcicsJ3ZlcnNp b24nLCdkZXNjcmlwdGlvbicsJ3B1Ymxpc2gnLCcnLCcnKTsKCQlmb3JlYWNoKCRmaWxlbmFt ZXMgYXMgJGZpbGVuYW1lKSB7CgkJCSRmaWxlZXh0PSBhcnJheV9wb3AoZXhwbG9kZSAoJy4n LCRmaWxlbmFtZSkpOwoJCQlpZiAoJGZpbGVleHQ9PSdwaHAnKSB7CgkJCQkkYmFzZW5hbWU9 YmFzZW5hbWUoJGZpbGVuYW1lKTsKCQkJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmls ZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSk7 CgkJCQkkaGxpbmsgPSAoJHBsdWdpblsnaGVscCddKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtm aWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7 CgkJCQkkZWZpbGUgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4 O3N0ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLiRw bHVnaW5bJ25hbWUnXS4nPC9hPic7CgkJCQkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFt ZSgkcGx1Z2luWyduYW1lJ10sICRwbHVnaW5bJ3ZlcnNpb24nXSk7CgoJCQkJZWNobyB0cigK CQkJCXRkKAoJCQkJdGFnKCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xvcjpncmF5O2Jv cmRlcjowO3BhZGRpbmc6MXB4IDJweCAycHggMXB4OyInKQoJCQkJLihpc3NldCgkcGx1Z2lu WyduYW1lJ10pPyRlZmlsZS4nPGJyIC8+JzonJykuJyAnCgkJCQkpCgkJCQkudGQoCgkJCQko IGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhyZWY9IicuJHBsdWdpblsnYXV0 aG9yX3VyaSddLiciPic6JycgKSAuCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvciddKT8k cGx1Z2luWydhdXRob3InXTonJm5ic3A7JyApLgoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRo b3JfdXJpJ10pPyc8L2E+JzonJyApLCAxNjAKCQkJCSkKCQkJCS50ZCgoaXNzZXQoJHBsdWdp blsndmVyc2lvbiddKT8kcGx1Z2luWyd2ZXJzaW9uJ106JyZuYnNwOycpLDEwKQoJCQkJLnRk KChpc3NldCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlvbidd OicmbmJzcDsnKSwyNjApCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/CgkJCQl0 YWcoZ1R4dCgncHVibGlzaCcpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRm aWxlbmFtZS4nIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4k Zm5hbWVzWzBdLiAnIicpCgkJCQkJCS4nIHwgJy50YWcoaWVkX3BsdWdpbl9nVHh0KCdjb21w cmVzcycpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMz ODt6aXA9dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcu JGZuYW1lc1sxXS4gJyInKToKCQkJCXRhZygnJm5ic3A7Jywnc3BhbicsJyBzdHlsZT0iY29s b3I6Z3JheSInKQoJCQkJKS4nIHwgJy4kaGxpbmspCgkJCQkudGQoJycpCgkJCQkudGQoJycp CgkJCQkpOwoJCQl9CgkJfQoJfQoKCWVjaG8gdHIoCnRkYSgKJzxmb3JtIGVuY3R5cGU9Im11 bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPicu CnN0YXJ0VGFibGUoJ2VkaXQnLCdsZWZ0JykuCnRyKHRkYSggaElucHV0KCdNQVhfRklMRV9T SVpFJywxMDAwMDAwKS4KZ3JhZihpZWRfcGx1Z2luX2dUeHQoJ3VwbG9hZF9waHAnKS4nOiAn LgpmSW5wdXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLgpmSW5wdXQoJ3N1Ym1pdCcs J3N1Ym1pdCcsZ1R4dCgndXBsb2FkJyksJ3NtYWxsZXJib3gnKSkuCmVJbnB1dCgnaWVkX3Bs dWdpbl9jb21wb3NlcicpLgpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2FkJykgLCAnIHN0eWxl PSJib3JkZXI6MHB4IHNvbGlkIGdyYXkiJyApLgp0ZGEoIHRhZyhpZWRfcGx1Z2luX2dUeHQo J25hbWUnKSwgJ2Fjcm9ueW0nLCcgdGl0bGU9IicuaWVkX3BsdWdpbl9nVHh0KCduYW1lX3Rv b2x0aXAnKS4nIiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIGJsYWNrIicpLic6 ICcuIGZJbnB1dCgndGV4dCcsJ25hbWUnLCd4eHhfeHh4eHh4JywnJywnJywnJywnMzAnLCcw JykgLCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXk7dmVydGljYWwtYWxpZ246bWlk ZGxlOyInICkpLgplbmRUYWJsZSgpLgonPC9mb3JtPicKLCcgY29sc3Bhbj0iOCIgc3R5bGU9 ImJvcmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246bGVmdCInKQopOwoJZWNobyBlbmRU YWJsZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9zdGF0dXNfbGluaygkc3RhdHVz LCRuYW1lLCRsaW5rdGV4dCkgewoJJG91dCA9ICc8YSBocmVmPSJpbmRleC5waHA/JzsKCSRv dXQgLj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3N3aXRjaF9z dGF0dXMmIzM4O3N0YXR1cz0nLgoJJHN0YXR1cy4nJiMzODtuYW1lPScudXJsZW5jb2RlKCRu YW1lKS4nIic7Cgkkb3V0IC49ICc+Jy4kbGlua3RleHQuJzwvYT4nOwoJcmV0dXJuICRvdXQ7 Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3N3aXRjaF9zdGF0dXMoKSB7CglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ3N0YXR1cycpKSkpOwoJJGNoYW5nZSA9ICgk c3RhdHVzKSA/IDAgOiAxOwoJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCAic3RhdHVzPSRj aGFuZ2UiLCAibmFtZT0nJG5hbWUnIik7CglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2lu X3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVu Y3Rpb24gaWVkX3NldF9vcmRlcigpIHsKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdu YW1lJywgJ2xvYWRfb3JkZXInKSkpKTsKCSRvcmRlciA9IG1pbihtYXgoIGludHZhbCgkbG9h ZF9vcmRlciksIDEpLCA5KTsKCXNhZmVfdXBkYXRlKCd0eHBfcGx1Z2luJywgImxvYWRfb3Jk ZXIgPSAkbG9hZF9vcmRlciIsICJuYW1lID0gJyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0 KGdUeHQoJ3BsdWdpbl9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSkpOwp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRf b3JkZXIpIHsKCWZvciAoJGkgPSAxOyAkaSA8PSA5OyAkaSsrKSAkb3JkZXJzWyRpXSA9ICRp OwoJcmV0dXJuIGZvcm0oCgkJZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykubi4KCQlz SW5wdXQoJ2llZF9zZXRfb3JkZXInKS5uLgoJCWhJbnB1dCgnbmFtZScsICRuYW1lKS5uLgoJ CXNlbGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDEp CgkJLCdkaXNwbGF5OmlubGluZScKCSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9kZWxldGUoKSB7CgkkbmFtZSA9IGRvU2xhc2gocHMoJ25hbWUnKSk7CglzYWZlX2Rl bGV0ZSgidHhwX3BsdWdpbiIsIm5hbWU9JyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KGdU eHQoJ3BsdWdpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZXN0b3JlKCkgewoJJG5hbWUgPSBkb1Ns YXNoKGdwcygnbmFtZScpKTsKCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiY29kZSA9IGNv ZGVfcmVzdG9yZSIsIm5hbWU9JyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KGllZF9wbHVn aW5fZ1R4dCgncmVzdG9yZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXQoJG1lc3NhZ2U9JycsJG5ld2ZpbGU9 JycpIHsKCSRzaXRlX2RpciA9IGh1OwoJJG5ld25hbWUgPSB0cmltKGdwcygnbmV3bmFtZScp KTsKCSRuYW1lID0gZW1wdHkoJG5ld25hbWUpID8gZ3BzKCduYW1lJykgOiAkbmV3bmFtZTsK CXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBpZWRfaW5z ZXJ0X2VkaXRvcnMoKTsKCSR0aGVGaWxlID0gKCRuZXdmaWxlKSA/ICRuZXdmaWxlIDogKChn cHMoJ2ZpbGVuYW1lJykpID8gZ3BzKCdmaWxlbmFtZScpIDogJG5hbWUpOwoJZWNobyBpZWRf cGx1Z2luX2VkaXRfZm9ybSgkdGhlRmlsZSwgZ3BzKCdmaWxlbmFtZScpPyAxOiAwKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZT0nJywkZWRp dGZpbGU9MCkgewoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnMsICRpZWRfcGx1 Z2luX2dsb2JhbHM7CglpZiAoISRlZGl0ZmlsZSkgewoJCSRycyA9IHNhZmVfcm93KCJhdXRo b3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGRlc2NyaXB0aW9uLCBjb2RlLCBoZWxwLCBzdGF0 dXMsIHR5cGUsIGxvYWRfb3JkZXIiLCAidHhwX3BsdWdpbiIsICJuYW1lPSckbmFtZSciKTsK CQlleHRyYWN0KCRycyk7CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1 Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJy YXkoJycsJGhlbHApOwoJfSBlbHNlIHsKCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2Zp bGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7CgkJ JGZpbGVuYW1lID0gJG5hbWU7CgkJJGZpbGVleHQgPSBhcnJheV9wb3AoJG5hbWU9ZXhwbG9k ZSAoJy4nLCRuYW1lKSk7CgkJJG5hbWUgPSBpbXBsb2RlKCRuYW1lKTsKCQlleHRyYWN0KCRw bHVnaW4pOwoJCSRzdGF0dXMgPSAoJGZpbGVleHQ9PSdwaHAnKT8gMTogMDsKCX0KCSRlZHdp ZHRoID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSkgJiYgaXNf bnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pKSA/ICRwcmVmc1sn aWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBdWydpZWRf cGx1Z2luX2VkaXRvcl93aWR0aCddOwoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0g aWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nz c19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwoJJHBsdWdpblsn bmFtZSddID0gJG5hbWU7CgkkcGx1Z2luWydhdXRob3InXSA9ICRhdXRob3I7CgkkcGx1Z2lu WydhdXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsKCSRwbHVnaW5bJ3ZlcnNpb24nXSA9ICR2 ZXJzaW9uOwoJJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsKCSRwbHVn aW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5fdGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3MsICRz dGFydF9jc3MsICRlbmRfY3NzKTsKCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdp blsndHlwZSddID0gJHR5cGU7CgkkcGx1Z2luWydvcmRlciddID0gJGxvYWRfb3JkZXI7Cgkk cGx1Z2luWydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7Cglmb3IgKCRpID0gMTsg JGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0gPSAkaTsKCgkkZGlzdHJpYnV0aW9uPSc8dGV4 dGFyZWEgbmFtZT0iZGlzdHJpYnV0aW9uIiByb3dzPSIxIiBjb2xzPSInLiRlZHdpZHRoLici IG9uY2xpY2s9InRoaXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBs dWdpbikpLic8L3RleHRhcmVhPic7CgoJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUo JHBsdWdpblsnbmFtZSddLCAkcGx1Z2luWyd2ZXJzaW9uJ10pOwoJJG5hbWVkTGluayA9IChp c3NldCgkZmlsZW5hbWUpKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5h bWU7CgoJJHNsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMz ODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODsnLiRuYW1lZExpbmsuJyI+JyAu aWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiAkZm5hbWVzWzBdLiAnPC9hPic7Cgkk c3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0 ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nJiMzODt6aXA9 dHJ1ZSI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZuYW1lc1sxXS4g JyAoY29tcHJlc3NlZCk8L2E+JzsKCSRzcGhwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUm IzM4OycuJG5hbWVkTGluay4nIj4nIC4gaWVkX3BsdWdpbl9nVHh0KCdzYXZlX2FzJykgLicg Jy4gJGZuYW1lc1syXS4gJzwvYT4nOwoJJHZoZWxwbGlua2Z1bGwgPSAoJGhlbHApID8gJzxh IGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f aGVscF92aWV3ZXImIzM4OycuJG5hbWVkTGluay4nIj5bICcuc3Ryb25nKGdUeHQoJ3ZpZXcn KS4nICcuZ1R4dCgnaGVscCcpKS4nIF08L2E+JyA6ICcnOwoKCSRuZXduYW1lID0gZklucHV0 KCd0ZXh0JywnbmV3bmFtZScsJG5hbWUsJ2VkaXQnLCcnLCcnLCRlZHdpZHRoIC0gKGludCko JGVkd2lkdGgqMC4zKSwnMicpOwoJJGF1dGhvciA9IGZJbnB1dCgndGV4dCcsJ2F1dGhvcics JGF1dGhvciwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsKCSRhdXRob3JfdXJpID0gZklu cHV0KCd0ZXh0JywnYXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCcnLCcnLCRlZHdp ZHRoLCcyJyk7CgkkdmVyc2lvbiA9IGZJbnB1dCgndGV4dCcsJ3ZlcnNpb24nLCR2ZXJzaW9u LCdlZGl0JywnJywnJywkZWR3aWR0aCAtIChpbnQpKCRlZHdpZHRoKjAuMyksJzInKSAuICcm IzE2MDsmIzE2MDsnLiAoKCRlZGl0ZmlsZSkgPyBjaGVja2JveCgncmVuYW1lX2ZpbGUnLCAn MScsIDAsICcnLCdyZW5hbWVfZmlsZScpIC4gJyA8bGFiZWwgZm9yPSJyZW5hbWVfZmlsZSI+ Jy5pZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9maWxlJykuJzwvbGFiZWw+JyA6IGNoZWNrYm94 KCdyZXN0b3JlX3BvaW50JywgJzEnLCAwLCAnJywncmVzdG9yZV9wb2ludCcpIC4gJyA8bGFi ZWwgZm9yPSJyZXN0b3JlX3BvaW50Ij4nLmllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZV9wb2lu dCcpLic8L2xhYmVsPicpOwoJJGRlc2NyaXB0aW9uID1mSW5wdXQoJ3RleHQnLCdkZXNjcmlw dGlvbicsJGRlc2NyaXB0aW9uLCdlZGl0JywnJywnJywkZWR3aWR0aCwnMicpOwoJJGNvZGUg PSAnPHRleHRhcmVhIG5hbWU9ImNvZGUiIGlkPSJwbHVnaW5fZWRpdG9yIiByb3dzPSIzMCIg Y29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0iY29kZXByZXNzIHBocCIgbWF4bGVuZ3RoPSI2 NTUzNSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb2RlKS4nPC90ZXh0YXJlYT48ZGl2IGNsYXNz PSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsKCSRoZWxwID0gJzx0ZXh0YXJlYSBuYW1lPSJoZWxw IiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0ibWNlRWRpdG9yIiBtYXhs ZW5ndGg9IjYzMDAwIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGhlbHApLic8L3RleHRhcmVhPjxk aXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rpdj4nOwoJJGNzcyA9ICc8dGV4dGFyZWEgbmFt ZT0iY3NzIiByb3dzPSIxNSIgY29scz0iJy4kZWR3aWR0aC4nIiBtYXhsZW5ndGg9IjI1MzUi PicuaHRtbHNwZWNpYWxjaGFycygkY3NzKS4nPC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJjaGFy c1JlbWFpbiI+PC9kaXY+JzsKCSRwbHVnc3RhdHVzID0gKCEkZWRpdGZpbGUpID8gJyYjMTYw OyYjMTYwOycuY2hlY2tib3goJ3N0YXR1cycsMSwkc3RhdHVzLCAnJywnc3RhdHVzJykuICcg PGxhYmVsIGZvcj0ic3RhdHVzIj4nLmllZF9wbHVnaW5fZ1R4dCgnZW5hYmxlJykuJzwvbGFi ZWw+JyA6ICcnOwoJJHBsdWd0eXBlID0gcmFkaW8oJ3R5cGUnLDAsKCgkdHlwZT09MCk/MTow KSkuaWVkX3BsdWdpbl9nVHh0KCd0eXBlXzAnKS4iICIKCQkuIHJhZGlvKCd0eXBlJywxLCgo JHR5cGU9PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8xJykuIiAiCgkJLiByYWRp bygndHlwZScsMiwoKCR0eXBlPT0yKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5cGVfMicp LiIgIgoJCS4gcmFkaW8oJ3R5cGUnLDMsKCgkdHlwZT09Myk/MTowKSkuaWVkX3BsdWdpbl9n VHh0KCd0eXBlXzMnKTsKCSRwbHVnb3JkZXIgPSBzZWxlY3RJbnB1dCgnbG9hZF9vcmRlcics ICRvcmRlcnMsICRsb2FkX29yZGVyLCAwLCAwKTsKCgkkc3ViID0gZklucHV0KCdzdWJtaXQn LCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpOwoJcmV0dXJuIGZvcm0oc3RhcnRUYWJsZSgn ZWRpdCcpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzdWIgLiAkdmhlbHBs aW5rZnVsbCkpCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gdGQoJG5ld25hbWUg LiAkcGx1Z3N0YXR1cyAuICggKGlzc2V0KCRmaWxlbmFtZSkpID8gdGFnKCcmIzE2MDsmIzE2 MDsoJy4kZmlsZW5hbWUuJyknLCdzcGFuJywnIHN0eWxlPSJjb2xvcjpncmF5OyInKS5oSW5w dXQoJ2ZpbGVuYW1lJywkZmlsZW5hbWUpIDogJycgKSApKQoJLiB0ciggZkxhYmVsQ2VsbCgg aWVkX3BsdWdpbl9nVHh0KCdwbHVnaW5fY29kZScpICkgLiB0ZCgkY29kZSkpCgkuIHRyKCBm TGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ3R5cGUnKSApIC4gdGQoJHBsdWd0eXBlKSkK CS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgnbG9hZF9vcmRlcicpICkgLiB0 ZCgkcGx1Z29yZGVyLicmIzE2MDsmIzE2MDsnLmllZF9wbHVnaW5fZ1R4dCgnbG9hZF9vcmRl cl9oZWxwJykpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3ZlcnNpb24nICkgLiB0ZCgkdmVyc2lv bikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnYXV0aG9yJyApIC4gdGQoJGF1dGhvcikpCgkuIHRy KCBmTGFiZWxDZWxsKCAnd2Vic2l0ZScgKSAuIHRkKCRhdXRob3JfdXJpKSkKCS4gdHIoIGZM YWJlbENlbGwoICdkZXNjcmlwdGlvbicgKSAuIHRkKCRkZXNjcmlwdGlvbikpCgkuIHRyKCB0 ZGEoZ1R4dCgncGx1Z2luX2hlbHAnKSwgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0idGV4dC1h bGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpIC4gdGQoJGhlbHApKQoJ LiB0ciggZkxhYmVsQ2VsbCggJ2NzcycgKSAuIHRkKCRjc3MpKQoJLiB0ciggZkxhYmVsQ2Vs bCgnJm5ic3A7JykgLiB0ZCgkc3ViKSkKCgkuIHRyKCB0ZGNzKCc8aHI+JywyKSkKCS4gdHIo IGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoaWVkX3BsdWdpbl9nVHh0KCd1dGlsaXRpZXMn KS4nOicpKQoKCS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgnY29kZV9kaXN0 JykgKSAuIHRkKCRkaXN0cmlidXRpb24pKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7Jykg LiB0ZCgkc2xpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ppcGxp bmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3BocGxpbmspKQoJLiBl bmRUYWJsZSgpCgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykKCS4gZUlucHV0KCdpZWRf cGx1Z2luX2NvbXBvc2VyJykKCS4gaElucHV0KCduYW1lJywkbmFtZSkpCS4gPDw8RU9GCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5LmZuLnJlc2l6ZWhhbmRsZSA9 IGZ1bmN0aW9uKGN1cmgpIHsKCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJdmFy IG1lID0galF1ZXJ5KHRoaXMpOwoJCW1lLmFuaW1hdGUoe2hlaWdodDogY3VyaH0pOwoJCW1l LmFmdGVyKAoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6ZWhhbmRsZSI+LS0tICsgLS0t PC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewoJCQkJdmFyIGggPSBt ZS5oZWlnaHQoKTsKCQkJCXZhciB5ID0gZS5jbGllbnRZOwoJCQkJdmFyIG1vdmVIYW5kbGVy ID0gZnVuY3Rpb24oZSkgewoJCQkJCW1lLmhlaWdodChNYXRoLm1heCgyMCwgZS5jbGllbnRZ ICsgaCAtIHkpKTsKCQkJCX07CgkJCQl2YXIgdXBIYW5kbGVyID0gZnVuY3Rpb24oZSkgewoJ CQkJCWpRdWVyeSgiaHRtbCIpLnVuYmluZCgibW91c2Vtb3ZlIixtb3ZlSGFuZGxlcikudW5i aW5kKCJtb3VzZXVwIix1cEhhbmRsZXIpOwoJCQkJCW5ld2ggPSBtZS5oZWlnaHQoKTsKCQkJ CQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBuZXdoLCAzMCk7CgkJCQl9OwoJ CQkJalF1ZXJ5KCJodG1sIikuYmluZCgibW91c2Vtb3ZlIiwgbW92ZUhhbmRsZXIpLmJpbmQo Im1vdXNldXAiLCB1cEhhbmRsZXIpOwoJCQl9KQoJCSk7Cgl9KTsKfQpqUXVlcnkoZnVuY3Rp b24oKSB7CgljdXJoID0gZ2V0Q29va2llKCdpZWRfcGx1Z2luX2VkaGVpZ2h0Jyk7CgljdXJo ID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1cmg7CglqUXVlcnkoIiNwbHVnaW5fZWRp dG9yIikucmVzaXplaGFuZGxlKHBhcnNlSW50KGN1cmgpKTsKCWpRdWVyeSgndGV4dGFyZWFb bWF4bGVuZ3RoXScpLmtleXVwKGZ1bmN0aW9uKCl7CgkJdmFyIG1heCA9IHBhcnNlSW50KGpR dWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSk7CgkJaWYoalF1ZXJ5KHRoaXMpLnZhbCgp Lmxlbmd0aCA+IG1heCl7CgkJCWpRdWVyeSh0aGlzKS52YWwoalF1ZXJ5KHRoaXMpLnZhbCgp LnN1YnN0cigwLCBqUXVlcnkodGhpcykuYXR0cignbWF4bGVuZ3RoJykpKTsKCQl9CgkJalF1 ZXJ5KHRoaXMpLnBhcmVudCgpLmZpbmQoJy5jaGFyc1JlbWFpbicpLmh0bWwoJ0NoYXJzIHJl bWFpbmluZzogJysgKG1heCAtIGpRdWVyeSh0aGlzKS52YWwoKS5sZW5ndGgpKTsKCX0pOwoJ alF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhdJykua2V5dXAoKTsKfSk7Cjwvc2NyaXB0Pgo8 c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoucmVzaXplaGFuZGxlIHsKCWN1cnNvcjpzLXJlc2l6 ZTsKCWZsb2F0OmxlZnQ7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWZvbnQtc2l6ZToxZW07Cgl3 aWR0aDo4MiU7CglwYWRkaW5nOjJweCAwIDZweDsKfQouY2hhcnNSZW1haW4gewoJdGV4dC1h bGlnbjpyaWdodDsKCWNvbG9yOmdyYXk7Cn0KPC9zdHlsZT4KRU9GOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9i YWxzLCAkcHJlZnM7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ25ld25h bWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdhdXRob3InLCdhdXRob3JfdXJpJywndmVyc2lvbics J2Rlc2NyaXB0aW9uJywnaGVscCcsJ2NzcycsJ3N0YXR1cycsJ3R5cGUnLCdsb2FkX29yZGVy JywncmVuYW1lX2ZpbGUnLCdyZXN0b3JlX3BvaW50JykpKSk7CgoJbGlzdCAoJHN0YXJ0X2Nz cywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1 Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5k J10pOwoJJGV4dHJhTXNnID0gJG5ld2ZpbGVuYW1lID0gJG1zZzEgPSAkbXNnMiA9ICcnOwoJ JG5ld25hbWUgPSB0cmltKCRuZXduYW1lKTsKCglpZiAoZW1wdHkoJG5ld25hbWUpKSB7CgkJ JG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3QnKTsKCX0gZWxzZSB7CgkJaWYg KGVtcHR5KCRmaWxlbmFtZSkpIHsKCQkJJGhvdXQgPSBhcnJheSgpOwoJCQkkaG91dFswXSA9 ICRoZWxwOwoJCQlpZiAoJGNzcykgeyAkaG91dFsxXSA9IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mu bi4kZW5kX2NzczsgfQoJCQlzYWZlX3VwZGF0ZSgKCQkJCSd0eHBfcGx1Z2luJywKCQkJCSJu YW1lPSciLiRuZXduYW1lLiInLAoJCQkJc3RhdHVzID0gIi5pbnR2YWwoJHN0YXR1cykuIiwK CQkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwKCQkJCWF1dGhvciA9ICciLiRhdXRob3Iu IicsCgkJCQlhdXRob3JfdXJpID0gJyIuJGF1dGhvcl91cmkuIicsCgkJCQl2ZXJzaW9uID0g JyIuJHZlcnNpb24uIicsCgkJCQlkZXNjcmlwdGlvbiA9ICciLiRkZXNjcmlwdGlvbi4iJywK CQkJCWhlbHAgPSAnIi5qb2luKCcnLCRob3V0KS4iJywKCQkJCWNvZGUgPSAnIi4kY29kZS4i JywKCQkJCSIuKCgkcmVzdG9yZV9wb2ludCA9PSAxKT8gImNvZGVfcmVzdG9yZSA9ICciLiRj b2RlLiInLCIgOiAnJykuIgoJCQkJbG9hZF9vcmRlciA9ICIuJGxvYWRfb3JkZXIsCgkJCQki bmFtZSA9ICciLiRuYW1lLiInIik7CgkJCSRtc2cxID0gZ1R4dCgncGx1Z2luX3NhdmVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJG5ld25hbWUpKTsKCQl9IGVsc2UgewoJCQkkZGlyID0gJEdM T0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUzsKCQkJaWYgKGZpbGVfZXhp c3RzKCRkaXIuJGZpbGVuYW1lKSkgewoJCQkJJGZpbGVjb250ZW50ID0gZmlsZSgkZGlyLiRm aWxlbmFtZSk7CgkJCX0gZWxzZSB7CgkJCQlpZiAoZW1wdHkoJEdMT0JBTFNbJ3ByZWZzJ11b J3BsdWdpbl9jYWNoZV9kaXInXSkpIHsKCQkJCQkkZmlsZWNvbnRlbnQgPSAnJzsKCQkJCQkk bXNnMiA9IGllZF9wbHVnaW5fZ1R4dCgnY2FjaGVfbm90X3NldCcpOwoJCQkJfSBlbHNlIHsK CQkJCQkkb3BvcmRlciA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVy J10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSkg PyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10gOiAwOwoJCQkJCSRoZWxwY2h1 bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdoZWxwJywgYXJyYXkoJGhlbHAsICcg JykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENTUyBodW5rIGluIHRoZSBmaWxlCgkJ CQkJJGNvZGVjaHVuayA9IGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoJ2NvZGUnLCAkY29k ZSk7CgkJCQkJJGZpbGVjb250ZW50ID0gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgicHJl YW1ibGUiKQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgibmFtZSIsICRuZXdu YW1lKQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiaHRtbF9oZWxwIikKCQkJ CQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoInZlcnNpb24iLCAkdmVyc2lvbikKCQkJ CQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhvciIsICRhdXRob3IpCgkJCQkJ CS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJhdXRob3JfdXJpIiwgJGF1dGhvcl91cmkp CgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJkZXNjcmlwdGlvbiIsICRkZXNj cmlwdGlvbikKCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImxvYWRfb3JkZXIi LCAkbG9hZF9vcmRlcikKCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoInR5cGUi LCAkdHlwZSkKCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImluY2x1ZGUiKQoJ CQkJCQkuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQoJCQkJ CQkuKCgkb3BvcmRlciA9PSAxKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQoJCQkJCQku aWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgicG9zdGFtYmxlIik7CgkJCQkJJG1zZzEgPSBp ZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3Jyk7CgkJCQl9CgkJCX0KCgkJCSRmaWxlY29udGVu dCA9IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkZmlsZWNvbnRlbnQpOwoJCQkkbWV0YXZhcnMg PSBhcnJheSgibmFtZSIgPT4gIiRuZXduYW1lIiwKCQkJCQkJCQkJInZlcnNpb24iID0+ICIk dmVyc2lvbiIsCgkJCQkJCQkJCSJhdXRob3IiID0+ICIkYXV0aG9yIiwKCQkJCQkJCQkJImF1 dGhvcl91cmkiID0+ICIkYXV0aG9yX3VyaSIsCgkJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4g IiRkZXNjcmlwdGlvbiIsCgkJCQkJCQkJCSJ0eXBlIiA9PiAiJHR5cGUiLAoJCQkJCQkJCQki b3JkZXIiID0+ICIkbG9hZF9vcmRlciIsCgkJCQkJCQkpOwoJCQkkaHVua3ZhcnMgPSBhcnJh eSgiQ09ERSIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRjb2RlKSksIC8v IG5ld2xpbmUgd29ya2Fyb3VuZAoJCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChzdHJfcmVwbGFj ZSgnXHJcbicsJwonLCRoZWxwKSksCgkJCQkJCSJDU1MiID0+IGRvU3RyaXAoc3RyX3JlcGxh Y2UoJ1xyXG4nLCcKJywkY3NzKSksCgkJCQkJCQkpOwoJCQlmb3JlYWNoICgkbWV0YXZhcnMg YXMgJHZhcm5hbWUgPT4gJHZhbHVlKSB7CgkJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3Vu dCgkZmlsZWNvbnRlbnQpOyAkaWR4KyspIHsKCQkJCQlpZiAoc3RycG9zKCRmaWxlY29udGVu dFskaWR4XSwgJyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10nKSA9PT0gMCkgewoJCQkJCQkk ZmlsZWNvbnRlbnRbJGlkeF0gPSAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXSA9ICcuZG9R dW90ZSgkdmFsdWUpLic7JzsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWZv cmVhY2ggKCRodW5rdmFycyBhcyAkdmFybmFtZSA9PiAkaHVuaykgewoJCQkJbGlzdCAoJHN0 YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJu YW1lLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydkbG1fc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xv YmFsc1snZGxtX2VuZCddKTsKCQkJCSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVs aW0sICRmaWxlY29udGVudCkgKyAxOwoJCQkJJGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2Rl bGltLCAkZmlsZWNvbnRlbnQpOwoJCQkJaWYgKGlzX251bWVyaWMoJHN0YXJ0KSAmJiBpc19u dW1lcmljKCRlbmQpICYmICRlbmQgPj0gJHN0YXJ0KSB7CgkJCQkJYXJyYXlfc3BsaWNlKCRm aWxlY29udGVudCwgJHN0YXJ0LCAkZW5kLSRzdGFydCwgJGh1bmspOwoJCQkJfQoJCQl9CgkJ CSRmaWxlY29udGVudCA9IGltcGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsKCgkJCWlmICgk ZmlsZWNvbnRlbnQpIHsKCQkJCSRmaCA9IGZvcGVuKCRkaXIuJGZpbGVuYW1lLCAndysnKTsK CQkJCWZ3cml0ZSgkZmgsICRmaWxlY29udGVudCk7CgkJCQlmY2xvc2UoJGZoKTsKCQkJfQoJ CQkkbXNnMSA9IChlbXB0eSgkbXNnMSkpID8gZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXko J3tuYW1lfScgPT4gJG5ld25hbWUpKSA6ICRtc2cxOwoKCQkJLy8gTWFrZSBuZXcgZmlsZSBp ZiByZXF1aXJlZAoJCQlpZiAoJHJlbmFtZV9maWxlID09IDEpIHsKCQkJCSRmbmFtZXMgPSBp ZWRfcGx1Z2luX2dldF9uYW1lKCRuZXduYW1lLCAkdmVyc2lvbik7CgkJCQkkbmV3ZmlsZW5h bWUgPSAkZm5hbWVzWzJdOwoJCQkJJHJlcyA9IHJlbmFtZSgkZGlyLiRmaWxlbmFtZSwgJGRp ci4kbmV3ZmlsZW5hbWUpOwoJCQkJJGV4dHJhTXNnID0gKCRyZXMpID8gaWVkX3BsdWdpbl9n VHh0KCdyZW5hbWVkJykgOiBpZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsKCQkJ fQoJCX0KCX0KCWlmICgkbXNnMikgewoJCWllZF9wbHVnaW5fbGlzdCgkbXNnMik7Cgl9IGVs c2UgewoJCS8vIENoZWNrIHRoZSBwbHVnaW4gdHlwZSBtYXRjaGVzIHRoZSBjb2RlIHVzZWQK CQkkZXh0cmFNc2cgLj0gKGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkg PyAnJyA6IHN0cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ2NoZWNrX3R5cGUnKSk7CgkJJG1lc3Nh Z2UgPSAkbXNnMS5ici4kZXh0cmFNc2c7CgkJaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlLCAk bmV3ZmlsZW5hbWUpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fY3Jl YXRlX25ldygpIHsKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJykpKSk7Cgkk Zm5hbWUgPSAnJzsKCWlmICgkbmFtZT09JycpIHsKCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3Bs dWdpbl9nVHh0KCduYW1lX2ZpcnN0JykpOwoJCXJldHVybjsKCX0KCWlmIChzdHJwb3MoJG5h bWUsICIucGhwIikgIT09IGZhbHNlKSB7CgkJJGZuYW1lID0gJG5hbWU7CgkJJG5hbWUgPSBi YXNlbmFtZSgkbmFtZSwgIi5waHAiKTsKCX0KCSRleGlzdHMgPSBmZXRjaCgnbmFtZScsJ3R4 cF9wbHVnaW4nLCduYW1lJywkbmFtZSk7CglpZiAoISRleGlzdHMpIHsKCQlpZiAoJGZuYW1l KSB7CgkJCS8vIFB1dCBwbHVnaW4gaW4gY2FjaGUgZGlyIGJ5IGZha2luZyBhIFBPU1Qgc3Vi bWlzc2lvbiBhbmQgc2F2aW5nCgkJCSRfUE9TVFsnZmlsZW5hbWUnXSA9ICRmbmFtZTsKCQkJ JF9QT1NUWyduZXduYW1lJ10gPSAkbmFtZTsKCQkJJF9QT1NUWydzdGF0dXMnXSA9IDA7CgkJ CSRfUE9TVFsndHlwZSddID0gMDsKCQkJJF9QT1NUWyd2ZXJzaW9uJ10gPSAnMC4xJzsKCQkJ JF9QT1NUWydsb2FkX29yZGVyJ10gPSA1OwoJCQlpZWRfcGx1Z2luX3NhdmUoKTsKCQl9IGVs c2UgewoJCQlzYWZlX2luc2VydCgidHhwX3BsdWdpbiIsICIKCQkJCW5hbWU9JyRuYW1lJywK CQkJCXN0YXR1cz0wLAoJCQkJdHlwZT0wLAoJCQkJdmVyc2lvbj0nMC4xJywKCQkJCWxvYWRf b3JkZXI9NSwKCQkJCWRlc2NyaXB0aW9uPScnLAoJCQkJaGVscD0nJywKCQkJCWNvZGU9Jycs CgkJCQljb2RlX3Jlc3RvcmU9JycKCQkJIik7CgkJCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVn aW5zJyksIGllZF9wbHVnaW5fZ1R4dCgnZWRpdF9uZXcnKSk7CgkJCWVjaG8gaWVkX3BsdWdp bl9lZGl0X2Zvcm0oJG5hbWUpOwoJCX0KCX0gZWxzZSB7CgkJaWVkX3BsdWdpbl9saXN0KGdU eHQoJ3BsdWdpbicpLicgPHN0cm9uZz4nLiRuYW1lLic8L3N0cm9uZz4gJy5nVHh0KCdhbHJl YWR5X2V4aXN0cycpKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3Nh dmVfYXNfZmlsZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJaWYgKGdwcygn bmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsKCQkkcnMgPSBzYWZlX3JvdygiZGVz Y3JpcHRpb24sIGF1dGhvciwgYXV0aG9yX3VyaSwgdmVyc2lvbiwgY29kZSwgaGVscCwgdHlw ZSwgbG9hZF9vcmRlciIsICJ0eHBfcGx1Z2luIiwgIm5hbWU9JyRuYW1lJyIpOwoJCWV4dHJh Y3QoJHJzKTsKCgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycs JGhlbHApOwoJfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3Bs dWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5E Uy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgoJJHppcCA9IGdw cygnemlwJyk7CglpZiAoZ3BzKCd0cmltJyk9PTEpIHsKCQkkY29kZT1leHBsb2RlKCJcclxu IiwkY29kZSk7CgkJJGNvZGU9YXJyYXlfbWFwKCd0cmltJywkY29kZSk7CgkJJGNvZGU9aW1w bG9kZSgiXHJcbiIsJGNvZGUpOwoJfQoKCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9 IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydj c3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCSRmbmFtZXMg PSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7CgoJaGVhZGVyKCJDb250 ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsKCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjog YXR0YWNobWVudDsgZmlsZW5hbWU9JyAuICgoJHppcCkgPyAkZm5hbWVzWzFdIDogJGZuYW1l c1swXSkpOwoKCSR0eXBlcyA9IGFycmF5KCAnQ2xpZW50IHNpZGUnICwgJ0FkbWluL0NsaWVu dCBzaWRlJyAsICdMaWJyYXJ5JyAsICdBZG1pbiBzaWRlJyk7CgkkcGx1Z2luWyduYW1lJ10g PSAkbmFtZTsKCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsKCSRwbHVnaW5bJ2F1dGhv cl91cmknXSA9ICRhdXRob3JfdXJpOwoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNpb247 CgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOwoJJHBsdWdpblsnY29k ZSddID0gJGNvZGU7CgkkcGx1Z2luWyd0eXBlJ10gPSAkdHlwZTsKCSRwbHVnaW5bJ29yZGVy J10gPSAkbG9hZF9vcmRlcjsKLy8JJHBsdWdpblsnYWxsb3dfaHRtbF9oZWxwJ10gPSB0cnVl OwovLwkkcGx1Z2luWydoZWxwX3JhdyddID0gJGhlbHAuJHN0YXJ0X2Nzcy4kY3NzLiRlbmRf Y3NzOwoJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVs cCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3MpOwoJJHBsdWdpblsnbWQ1J10gPSBtZDUo ICRwbHVnaW5bJ2NvZGUnXSApOwoKCWVjaG8gJyMgTmFtZTogJy4kbmFtZS4nIHYnLiR2ZXJz aW9uLicgJy4oKCR6aXApID8gIihjb21wcmVzc2VkKSIgOiAiIikuJwojIFR5cGU6ICcuJHR5 cGVzWyR0eXBlXS4nIHBsdWdpbgojICcuJGRlc2NyaXB0aW9uLicKIyBBdXRob3I6ICcuJGF1 dGhvci4nCiMgVVJMOiAnLiRhdXRob3JfdXJpLicKIyBSZWNvbW1lbmRlZCBsb2FkIG9yZGVy OiAnLiRsb2FkX29yZGVyLicKCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiMgVGhpcyBpcyBhIHBsdWdp biBmb3IgVGV4dHBhdHRlcm4gLSBodHRwOi8vdGV4dHBhdHRlcm4uY29tLwojIFRvIGluc3Rh bGw6IHRleHRwYXR0ZXJuID4gYWRtaW4gPiBwbHVnaW5zCiMgUGFzdGUgdGhlIGZvbGxvd2lu ZyB0ZXh0IGludG8gdGhlIFwnSW5zdGFsbCBwbHVnaW5cJyBib3g6CiMgLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uCgonLigoJHppcCkgPyBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGd6ZW5jb2RlKHNl cmlhbGl6ZSgkcGx1Z2luKSkpLCA3MikgOiBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKHNl cmlhbGl6ZSgkcGx1Z2luKSksIDcyKSk7CgoJZGllKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlKCkgewoJZ2xvYmFsICRwcmVmczsKCWlm IChncHMoJ25hbWUnKSkgewoJCSRuYW1lID0gZ3BzKCduYW1lJyk7CgkJJHJzID0gc2FmZV9y b3coImRlc2NyaXB0aW9uLCBhdXRob3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGNvZGUsIGhl bHAsIHR5cGUsIGxvYWRfb3JkZXIiLCAidHhwX3BsdWdpbiIsICJuYW1lPSckbmFtZSciKTsK CQlleHRyYWN0KCRycyk7CgoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3Bs dWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFy cmF5KCcnLCRoZWxwKTsKCX0gZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsKCQkkcGx1Z2lu PWllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVf ZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsKCQlleHRyYWN0KCRwbHVnaW4pOwoJfQoKCSRv cG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSkgJiYg aXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pKSA/ICRwcmVm c1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7CgkkZm5hbWVzID0gaWVkX3BsdWdp bl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOwoKCWhlYWRlcigiQ29udGVudC10eXBlOiB0 ZXh0L3BocCIpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBm aWxlbmFtZT0nIC4kZm5hbWVzWzJdKTsKCgkkaGVscGNodW5rID0gaWVkX3BsdWdpbl9idWls ZF90ZW1wbGF0ZSgnaGVscCcsIGFycmF5KCRoZWxwLCAkY3NzKSk7CgkkY29kZWNodW5rID0g aWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgnY29kZScsIHN0cl9yZXBsYWNlKCJcclxuIiwi XG4iLCRjb2RlKSk7CgoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJwcmVhbWJs ZSIpOwoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJuYW1lIiwgJG5hbWUpOwoJ ZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJodG1sX2hlbHAiKTsKCWVjaG8gaWVk X3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVyc2lvbiIsICR2ZXJzaW9uKTsKCWVjaG8gaWVk X3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0aG9yIiwgJGF1dGhvcik7CgllY2hvIGllZF9w bHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAkYXV0aG9yX3VyaSk7CgllY2hv IGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImRlc2NyaXB0aW9uIiwgJGRlc2NyaXB0aW9u KTsKCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgibG9hZF9vcmRlciIsICRsb2Fk X29yZGVyKTsKCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidHlwZSIsICR0eXBl KTsKCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiaW5jbHVkZSIpOwoJZWNobyAo KCRvcG9yZGVyID09IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspOwoJZWNobyAoKCRv cG9yZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspOwoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJwb3N0YW1ibGUiKTsKCglkaWUoKTsKfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpmdW5jdGlvbiBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCRwcnQsICR2YWw9JycpIHsK CSRjc3MgPSAkaGVscCA9ICcnOwoJaWYgKGlzX2FycmF5KCR2YWwpKSB7CgkJJGhlbHAgPSAk dmFsWzBdOwoJCSRjc3MgPSBpc3NldCgkdmFsWzFdKSA/ICR2YWxbMV0gOiAnJzsKCQkkdmFs ID0gJyc7Cgl9CgkkdGVtcGxhdGUgPSBhcnJheSgKCQkicHJlYW1ibGUiID0+ICc8P3BocCcu bgoJCQkJCQkuJy8vIFRoaXMgaXMgYSBQTFVHSU4gVEVNUExBVEUuJy5uCgkJCQkJCS4nLy8g Q29weSB0aGlzIGZpbGUgdG8gYSBuZXcgbmFtZSBsaWtlIGFiY19teXBsdWdpbi5waHAuICBF ZGl0IHRoZSBjb2RlLCB0aGVuJy5uCgkJCQkJCS4nLy8gcnVuIHRoaXMgZmlsZSBhdCB0aGUg Y29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRpc3RyaWJ1dGlvbjonLm4K CQkJCQkJLicvLyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215cGx1Z2luLTAuMS50 eHQnLm4ubiwKCQkibmFtZSIgPT4gJy8vIFBsdWdpbiBuYW1lIGlzIG9wdGlvbmFsLiAgSWYg dW5zZXQsIGl0IHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQnLm4KCQkJCQkJ LicvLyBmaWxlIG5hbWUuIFVuY29tbWVudCBhbmQgZWRpdCB0aGlzIGxpbmUgdG8gb3ZlcnJp ZGU6Jy5uCgkJCQkJCS4nJHBsdWdpbltcJ25hbWVcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsn Lm4ubiwKCQkiaHRtbF9oZWxwIiA9PiAnLy8gMCA9IFBsdWdpbiBoZWxwIGlzIGluIFRleHRp bGUgZm9ybWF0LCBubyByYXcgSFRNTCBhbGxvd2VkIChkZWZhdWx0KS4nLm4KCQkJCQkJLicv LyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3IEhUTUwuICBOb3QgcmVjb21tZW5kZWQuJy5u CgkJCQkJCS4nIyAkcGx1Z2luW1wnYWxsb3dfaHRtbF9oZWxwXCddID0gMTsnLm4ubiwKCQki dmVyc2lvbiIgPT4gJyRwbHVnaW5bXCd2ZXJzaW9uXCddID0gJy5kb1F1b3RlKCR2YWwpLic7 Jy5uLAoJCSJhdXRob3IiID0+ICckcGx1Z2luW1wnYXV0aG9yXCddID0gJy5kb1F1b3RlKCR2 YWwpLic7Jy5uLAoJCSJhdXRob3JfdXJpIiA9PiAnJHBsdWdpbltcJ2F1dGhvcl91cmlcJ10g PSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4sCgkJImRlc2NyaXB0aW9uIiA9PiAnJHBsdWdpbltc J2Rlc2NyaXB0aW9uXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sCgkJImxvYWRfb3Jk ZXIiID0+ICcvLyBQbHVnaW4gbG9hZCBvcmRlcjonLm4KCQkJCQkJLicvLyBUaGUgZGVmYXVs dCB2YWx1ZSBvZiA1IHdvdWxkIGZpdCBtb3N0IHBsdWdpbnMsIHdoaWxlIGZvciBpbnN0YW5j ZSBjb21tZW50IHNwYW0gZXZhbHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMnLm4KCQkJCQkJ LicvLyB3b3VsZCBwcm9iYWJseSB3YW50IHRvIHJ1biBlYXJsaWVyICgxLi4uNCkgdG8gcHJl cGFyZSB0aGUgZW52aXJvbm1lbnQgZm9yIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGZvbGxvd3Mu Jy5uCgkJCQkJCS4nLy8gT3JkZXJzIDYuLi45IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBw bHVnaW5zIHdoaWNoIHdvdWxkIHdvcmsgbGF0ZS4gVGhpcyBvcmRlciBpcyB1c2VyLW92ZXJy aWRlYWJsZS4nLm4KCQkJCQkJLickcGx1Z2luW1wnb3JkZXJcJ10gPSAnLmRvUXVvdGUoJHZh bCkuJzsnLm4ubiwKCQkidHlwZSIgPT4gJy8vIFBsdWdpbiBcJ3R5cGVcJyBkZWZpbmVzIHdo ZXJlIHRoZSBwbHVnaW4gaXMgbG9hZGVkJy5uCgkJCQkJCS4nLy8gMCA9IHB1YmxpYyAgICAg ICA6IG9ubHkgb24gdGhlIHB1YmxpYyBzaWRlIG9mIHRoZSB3ZWJzaXRlIChkZWZhdWx0KScu bgoJCQkJCQkuJy8vIDEgPSBwdWJsaWMrYWRtaW4gOiBvbiBib3RoIHRoZSBwdWJsaWMgYW5k IGFkbWluIHNpZGUnLm4KCQkJCQkJLicvLyAyID0gbGlicmFyeSAgICAgIDogb25seSB3aGVu IGluY2x1ZGVfcGx1Z2luKCkgb3IgcmVxdWlyZV9wbHVnaW4oKSBpcyBjYWxsZWQnLm4KCQkJ CQkJLicvLyAzID0gYWRtaW4gICAgICAgIDogb25seSBvbiB0aGUgYWRtaW4gc2lkZScubgoJ CQkJCQkuJyRwbHVnaW5bXCd0eXBlXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sCgkJ ImluY2x1ZGUiID0+ICdpZiAoIWRlZmluZWQoXCd0eHBpbnRlcmZhY2VcJykpJy5uCgkJCQkJ CS4nICAgICAgICBAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7Jy5uLm4sCgkJImhl bHAiID0+ICdpZiAoMCkgeycubgoJCQkJCQkuJz8+Jy5uCgkJCQkJCS4gKCgkY3NzKSA/ICc8 IS0tJy5uCgkJCQkJCS4nIyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4KCQkJCQkJLiRj c3MubgoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4gQ1NTIC0tLScubgoJCQkJCQkuJy0tPicu biA6ICcnKQoJCQkJCQkuJzwhLS0nLm4KCQkJCQkJLicjIC0tLSBCRUdJTiBQTFVHSU4gSEVM UCAtLS0nLm4KCQkJCQkJLiRoZWxwLm4KCQkJCQkJLicjIC0tLSBFTkQgUExVR0lOIEhFTFAg LS0tJy5uCgkJCQkJCS4nLS0+Jy5uCgkJCQkJCS4nPD9waHAnLm4KCQkJCQkJLid9Jy5uLAoJ CSJjb2RlIiA9PiAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCgkJCQkJCS4kdmFs Lm4KCQkJCQkJLicjIC0tLSBFTkQgUExVR0lOIENPREUgLS0tJy5uLAoJCSJwb3N0YW1ibGUi ID0+ICc/PicsCgkpOwoKCXJldHVybiAoYXJyYXlfa2V5X2V4aXN0cygkcHJ0LCAkdGVtcGxh dGUpID8gJHRlbXBsYXRlWyRwcnRdIDogJycpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGll ZF9wbHVnaW5fdXBsb2FkKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglsaXN0 ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NT IiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2Jh bHNbJ2Nzc19lbmQnXSk7CgoJaWYgKCEkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10p IHsKCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdjaG9vc2VfZmlsZScpKTty ZXR1cm47Cgl9CgkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJF9GSUxFU1sndGhl ZmlsZSddWyd0bXBfbmFtZSddKTsKLy8JJG5ld25hbWUgPSAoZW1wdHkoJHBsdWdpblsnbmFt ZSddKSkgPyBiYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXSwgJy5waHAnKSA6 ICRwbHVnaW5bJ25hbWUnXTsKCSRuZXduYW1lID0gJHBsdWdpblsnbmFtZSddOwoJaWYgKGdw cygnbmFtZScpIGFuZCBncHMoJ25hbWUnKSE9J3h4eF94eHh4eHgnKSB7CgkJJG5ld25hbWU9 Z3BzKCduYW1lJyk7Cgl9CglpZiAoZW1wdHkoJHBsdWdpblsnY29kZSddKSkgewoJCSRwbHVn aW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1w X25hbWUnXSkpOwoJfQoKCWlmIChNQUdJQ19RVU9URVNfR1BDKSB7CgkJJHBsdWdpbiA9IGRv U3RyaXAoJHBsdWdpbik7Cgl9CglleHRyYWN0KGRvU2xhc2goJHBsdWdpbikpOwoJJG1kNT1t ZDUoJGNvZGUpOwoJJHZlcnNpb24gPSAoZW1wdHkoJHZlcnNpb24pKSA/ICIwLjEiIDogJHZl cnNpb247CgkkaGVscCA9ICRoZWxwLigoJGNzcykgPyBuLiRzdGFydF9jc3Mubi4kY3NzLm4u JGVuZF9jc3MgOiAnJyk7CgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1Z2luJywn bmFtZScsJG5ld25hbWUpOwoJaWYgKCRleGlzdHMpIHsKCQkkc3RhdHVzID0gZmV0Y2goJ3N0 YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmV3bmFtZSk7CgkJJHJzID0gc2FmZV91cGRh dGUoCgkJCSJ0eHBfcGx1Z2luIiwKCQkJInN0YXR1cyA9ICIuaW50dmFsKCRzdGF0dXMpLiIs CgkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwKCQkJYXV0aG9yID0gJyRhdXRob3InLAoJ CQlhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywKCQkJdmVyc2lvbiA9ICckdmVyc2lvbics CgkJCWRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsCgkJCWhlbHAgPSAnJGhlbHAnLAoJ CQljb2RlID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29kZV9t ZDUgPSAnJG1kNScsCgkJCWxvYWRfb3JkZXIgPSAiLmludHZhbCgkbG9hZF9vcmRlciksCgkJ CSJuYW1lID0gJyRuZXduYW1lJyIKCQkpOwoJfSBlbHNlIHsKCQkkcnMgPSBzYWZlX2luc2Vy dCgKCQkJInR4cF9wbHVnaW4iLAoJCQkibmFtZSA9ICckbmV3bmFtZScsCgkJCXN0YXR1cyA9 IDAsCgkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwKCQkJYXV0aG9yID0gJyRhdXRob3In LAoJCQlhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywKCQkJdmVyc2lvbiA9ICckdmVyc2lv bicsCgkJCWRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsCgkJCWhlbHAgPSAnJGhlbHAn LAoJCQljb2RlID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29k ZV9tZDUgPSAnJG1kNScsCgkJCWxvYWRfb3JkZXIgPSAiLmludHZhbCgkbG9hZF9vcmRlcikK CQkpOwoJfQoKCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksIG1lc3NlbmdlcigncGx1 Z2luJywkbmV3bmFtZSwoJGV4aXN0cyk/J3VwZGF0ZWQnOid1cGxvYWRlZCcpKTsKCWVjaG8g aWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5ld25hbWUpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IGllZF9wbHVnaW5fcmVhZF9maWxlKCRmaWxlcGF0aCkgewoJJGNvbnRlbnQgPSBmaWxlKCRm aWxlcGF0aCk7CgkkanVzdGZpbGUgPSBiYXNlbmFtZSgkZmlsZXBhdGgpOwoJJGV4dCA9IGFy cmF5X3BvcChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7CgkkZXh0ID0gKCRleHQ9PSRqdXN0 ZmlsZSkgPyAnJyA6ICcuJy4kZXh0OyAvLyBPbmx5IGFzc2lnbiBhbiBleHRlbnNpb24gaWYg b25lIGV4aXN0cwoJJHNvdXJjZV9saW5lcyA9IGNvdW50KCRjb250ZW50KTsKCSRtZXRhZGF0 YSA9IGFycmF5KAoJCQkJCQknbmFtZScgPT4gJycsCgkJCQkJCSd2ZXJzaW9uJyA9PiAnJywK CQkJCQkJJ3JldmlzaW9uJyA9PiAnJywKCQkJCQkJJ2F1dGhvcicgPT4gJycsCgkJCQkJCSdh dXRob3JfdXJpJyA9PiAnJywKCQkJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywKCQkJCQkJJ29y ZGVyJyA9PiAnNScsCgkJCQkJCSd0eXBlJyA9PiAnJywKCQkJCQkpOwoJZm9yICgkaWR4PTA7 ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkkY29udGVudFskaWR4XSA9IHJ0 cmltKCRjb250ZW50WyRpZHhdKTsKCQkvLyBCb21iIG91dCBpZiB3ZSByZWFjaCB0aGUgZW5k IG9mIHRoZSBkZWZpbml0aW9uIGFyZWEKCQlpZiAoc3RycG9zKCAkY29udGVudFskaWR4XSwg J2lmICghZGVmaW5lZCcgKSA9PT0gMCkgewoJCQlicmVhazsKCQl9CgkJaWYgKHN0cnBvcygk Y29udGVudFskaWR4XSwgJyRwbHVnaW5bJykgPT09IDApIHsKCQkJLy8gRm91bmQgYSBwbHVn aW4gdmFyaWFibGUgc28gZXh0cmFjdCBpdAoJCQkkcGFydHMgPSBleHBsb2RlKCIgPSAiLCAk Y29udGVudFskaWR4XSk7CgkJCSRwYXJ0c1swXSA9IHN0cl9yZXBsYWNlKCInIiwgIiIsICRw YXJ0c1swXSk7IC8vIE1ha2UgdGhlIG1hdGNoIGVhc2llciEKCQkJJHBhcnRzWzFdID0gc3Ry X3JlcGxhY2UoIjsiLCAiIiwgJHBhcnRzWzFdKTsgLy8gRGl0dG8KCQkJcHJlZ19tYXRjaCgi L3BsdWdpblxbKC4qKVxdLyIsICRwYXJ0c1swXSwgJHZhcik7IC8vIEV4dHJhY3QganVzdCB0 aGUgdmFyaWFibGUgbmFtZQoJCQlpZiAoaXNfbnVtZXJpYygkcGFydHNbMV0pKSB7CgkJCQkk cGFydHNbMV0gPSAiJyIuJHBhcnRzWzFdLiInIjsKCQkJfQoJCQlwcmVnX21hdGNoKCIvLion KC4qKScuKi8iLCAkcGFydHNbMV0sICR2YWwpOyAvLyBSZW1vdmUgYW55dGhpbmcgb3V0c2lk ZSB0aGUgcXVvdGVzIChlLmcuICRyZXZpc2lvbikKCQkJaWYgKCR2YXJbMV0gPT0gJ3Jldmlz aW9uJyAmJiAhZW1wdHkoJHZhbFsxXSkpIHsKCQkJCSRyZXZwYXJ0cyA9IGV4cGxvZGUoJyAn LCB0cmltKCR2YWxbMV0sICckICcpKTsKCQkJCSR2YWxbMV0gPSAkcmV2cGFydHNbY291bnQo JHJldnBhcnRzKS0xXTsKCQkJCSR2YWxbMV0gPSAoZW1wdHkoJHZhbFsxXSkpID8gJycgOiAn LicgLiR2YWxbMV07CgkJCX0KCQkJJG1ldGFkYXRhWyR2YXJbMV1dID0gJHZhbFsxXTsKCQl9 Cgl9CgoJJG1ldGFkYXRhWyduYW1lJ10gPSAoZW1wdHkoJG1ldGFkYXRhWyduYW1lJ10pKSA/ IGJhc2VuYW1lKCRqdXN0ZmlsZSwgJGV4dCkgOiAkbWV0YWRhdGFbJ25hbWUnXTsKCSRtZXRh ZGF0YVsnbG9hZF9vcmRlciddID0gJG1ldGFkYXRhWydvcmRlciddOwoJJG1ldGFkYXRhWyd2 ZXJzaW9uJ10gLj0gJG1ldGFkYXRhWydyZXZpc2lvbiddOwoJJG1ldGFkYXRhWydoZWxwJ10g PSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJ0hFTFAnKTsKCSRtZXRhZGF0 YVsnY3NzJ10gID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdDU1MnICk7 CgkkbWV0YWRhdGFbJ2NvZGUnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50 LCAnQ09ERScpOwoKCXJldHVybiAkbWV0YWRhdGE7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gcmlwcGVk IGFuZCBtb2RkZWQgZnJvbSBuZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQpmdW5jdGlv biBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJGh1bmssICRjbW50PSIjIiwg JGRlbGV0ZT1mYWxzZSkgewoJJGRsbSA9IGV4cGxvZGUoInwiLCAkY21udCk7CgkkZGxtU3Rh cnQgPSAkZGxtWzBdOwoJJGRsbUVuZCA9IChjb3VudCgkZGxtKSA+IDEpID8gJGRsbVsxXSA6 ICcnOwoJJGxpbmVzID0gaWVkX3BsdWdpbl9tYWtlX2FycmF5KCRjb250ZW50KTsKCglsaXN0 ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMo JGh1bmssICRkbG1TdGFydCwgJGRsbUVuZCk7Cgkkc3RhcnQgPSBhcnJheV9zZWFyY2goJHN0 YXJ0X2RlbGltLCAkbGluZXMpICsgMTsKCSRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxp bSwgJGxpbmVzKTsKCSRleHRyYWN0ZWQgPSBhcnJheSgpOwoJaWYgKGNvdW50KCRsaW5lcykg PiAwICYmIGlzX251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQg PiAkc3RhcnQpIHsKCQkkZXh0cmFjdGVkID0gYXJyYXlfc2xpY2UoJGxpbmVzLCAkc3RhcnQs ICRlbmQtJHN0YXJ0KTsKCQkkbGluZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7CgkJd2hp bGUgKCRsaW5lTnVtID4gMCAmJiB0cmltKCRleHRyYWN0ZWRbJGxpbmVOdW0tLV0pID09ICIi KSB7CgkJCWFycmF5X3BvcCgkZXh0cmFjdGVkKTsKCQl9CgkJd2hpbGUgKGNvdW50KCRleHRy YWN0ZWQpID4gMCAmJiB0cmltKCRleHRyYWN0ZWRbMF0pID09ICIiKSB7CgkJCWFycmF5X3No aWZ0KCRleHRyYWN0ZWQpOwoJCX0KCQlpZiAoJGRlbGV0ZSkgewoJCQkkY2hvcHBlZCA9IGFy cmF5X3NwbGljZSgkbGluZXMsICRzdGFydC0xLCAkZW5kLSRzdGFydCsyLCAiIik7CgkJfQoJ fQoJJHJlbWFpbnMgPSAkbGluZXM7CgkvLyBDaGVjayBpZiB0aGUgQ1NTIHNlY3Rpb24gaGFz IDxzdHlsZT4gdGFncyBhcm91bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdAoJaWYgKCRodW5rID09 ICJDU1MiKSB7CgkJJG51bXJvd3MgPSBjb3VudCgkZXh0cmFjdGVkKTsKCQlpZiAoJG51bXJv d3MgPiAxKSB7CgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFskbnVtcm93cy0xXSwgJzwvc3R5 bGU+JykgPT09IGZhbHNlKSB7CgkJCQkkZXh0cmFjdGVkW10gPSAnPC9zdHlsZT4nOwoJCQl9 CgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFswXSwgJzxzdHlsZSAnKSA9PT0gZmFsc2UpIHsK CQkJCWFycmF5X3Vuc2hpZnQoJGV4dHJhY3RlZCwgJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ Jyk7CgkJCX0KCQl9Cgl9CglpZiAoJGRlbGV0ZSkgewoJCXJldHVybiBhcnJheSh0cmltKGpv aW4oIlxuIiwgJGV4dHJhY3RlZCkpLCB0cmltKGpvaW4oIlxuIiwgJHJlbWFpbnMpKSk7Cgl9 IGVsc2UgewoJCXJldHVybiB0cmltKGpvaW4oIlxuIiwgJGV4dHJhY3RlZCkpOwoJfQp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9hcnJheSgkYXJyKSB7CglpZiAo IWlzX2FycmF5KCRhcnIpKSB7CgkJJGFyciA9IGV4cGxvZGUoIlxuIiwgJGFycik7Cgl9Cgkk c291cmNlX2xpbmVzID0gY291bnQoJGFycik7Cglmb3IgKCRpZHg9MDsgJGlkeCA8ICRzb3Vy Y2VfbGluZXM7ICRpZHgrKykgewoJCSRhcnJbJGlkeF0gPSBydHJpbSgkYXJyWyRpZHhdKTsK CX0KCXJldHVybiAkYXJyOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFr ZV9tYXJrZXJzKCRodW5rLCAkc3RhcnQsICRlbmQpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9n bG9iYWxzOwoJJHNtYXJrZXIgPSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRo dW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydzdGFydCddKSAuICgoJGVuZCk/JyAnLiRlbmQ6 JycpOwoJJGVtYXJrZXIgPSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5r LCAkaWVkX3BsdWdpbl9nbG9iYWxzWydlbmQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsK CXJldHVybiAoYXJyYXkoJHNtYXJrZXIsICRlbWFya2VyKSk7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8g cmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBuZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQpm dW5jdGlvbiBpZWRfcGx1Z2luX2FkbWluX2NoZWNrKCRjb2RlYmxvY2ssICR0eXBlKSB7Cgkv LyBTaG9ydCBjaXJjdWl0IHNpbmNlIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjbGllbnQg cGx1Z2lucwoJaWYgKCR0eXBlICE9ICcwJyB8fCBzdHJwb3MoJGNvZGVibG9jaywgJ3R4cGlu dGVyZmFjZScpPT09ZmFsc2UpIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvLyBCZWxpZXZlIGl0 IG9yIG5vdCB0aGlzIGlzIHNldmVyYWwgb3JkZXJzIG9mIG1hZ25pdHVkZSBxdWlja2VyIHRo YW4gYSBzaW5nbGUgcHJlZ19tYXRjaAoJJGNiID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1x0Jywg JyAnKSwgJycsICRjb2RlYmxvY2spOwoJJGNiID0gc3RyX3JlcGxhY2UoJz09PScsICc9PScs ICRjYik7CglpZiAoc3RycG9zKCRjYiwgJ3R4cGludGVyZmFjZT09XCJhZG1pbicpKSByZXR1 cm4gZmFsc2U7CglpZiAoc3RycG9zKCRjYiwgInR4cGludGVyZmFjZT09XCdhZG1pbiIpKSBy ZXR1cm4gZmFsc2U7CglpZiAoc3RycG9zKCRjYiwgJ2FkbWluXCI9PXR4cGludGVyZmFjZScp KSByZXR1cm4gZmFsc2U7CglpZiAoc3RycG9zKCRjYiwgImFkbWluXCc9PXR4cGludGVyZmFj ZSIpKSByZXR1cm4gZmFsc2U7CglpZiAoc3RycG9zKCRjYiwgJ2FkbWluXCI9PUB0eHBpbnRl cmZhY2UnKSkgcmV0dXJuIGZhbHNlOwoJaWYgKHN0cnBvcygkY2IsICJhZG1pblwnPT1AdHhw aW50ZXJmYWNlIikpIHJldHVybiBmYWxzZTsKCXJldHVybiB0cnVlOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5fdGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3MsICRzdGFy dF9kbG0sICRlbmRfZGxtKSB7CglnbG9iYWwgJHByZWZzOwoKCSR0bXBkaXIgPSAkaGxwZmls ZSA9ICcnOwoJJGNoYW5nZWQgPSB0cnVlOwoJJG91dCA9IGFycmF5KCk7CglpZiAoaXNzZXQo JHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZSddKSAmJiAhZW1wdHkoJHByZWZz WydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZSddKSAmJiBpc193cml0YWJsZSgkcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJ10pKSB7CgkJJHRtcGRpciA9ICRwcmVmc1sn aWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXTsKCQkkY2FjaGUgPSBidWlsZF9maWxlX3Bh dGgoJHRtcGRpciwgJ2llZF9wbHVnaW5fY29tcG9zZXIuY2FjaGUnKTsKCQlpZiAoIWZpbGVf ZXhpc3RzKCRjYWNoZSkpIHsKCQkJdG91Y2goJGNhY2hlKTsgLy8gQ3JlYXRlIGZpbGUgaWYg aXQgZG9lc24ndCBleGlzdAogICAgICB9CgkJJHBsdWdzID0gcGFyc2VfaW5pX2ZpbGUoJGNh Y2hlKTsKCgkJJG9sZF9tZDUgPSAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHBsdWdzKSkg PyAkcGx1Z3NbJG5hbWVdIDogJyc7CgkJJGN1cnJfbWQ1ID0gbWQ1KCRoZWxwKTsKCQkkaGxw ZmlsZSA9IGJ1aWxkX2ZpbGVfcGF0aCgkdG1wZGlyLCAkbmFtZS4nX2hlbHAudHh0bCcpOwoJ CWlmICgkb2xkX21kNSA9PSAkY3Vycl9tZDUpIHsKCQkJJG91dFswXSA9IGZpbGVfZ2V0X2Nv bnRlbnRzKCRobHBmaWxlKTsKCQkJJGNoYW5nZWQgPSBmYWxzZTsKCQl9IGVsc2UgewoJCQkk cGx1Z3NbJG5hbWVdID0gJGN1cnJfbWQ1OwoJCQkkZmQgPSBmb3BlbigkY2FjaGUsICJ3Iik7 CgkJCWZvcmVhY2ggKCRwbHVncyBhcyAkaWR4ID0+ICR2YWwpIHsKCQkJCWZ3cml0ZSgkZmQs ICRpZHguJyA9ICcuJHZhbC5uKTsKCQkJfQoJCQlmY2xvc2UoJGZkKTsKCQl9CiAgIH0KCglp ZiAoISRvdXQpIHsKCQlAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi9jbGFzc1RleHRpbGUu cGhwJzsKCQkkb3V0WzBdID0gJGhlbHA7CgkJaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScp KSB7CgkJCS8vIFRyeSBhbmQgYmUgYSBsaXR0bGUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCBh cHBseWluZyB0ZXh0aWxlIG9yIG5vdAoJCQkkcmUgPSAnL2hbMC02XShcKC4qXCkpP1wuLyc7 CgkJCWlmIChwcmVnX21hdGNoKCRyZSwgJGhlbHApKSB7CgkJCQkkdGV4dGlsZSA9IG5ldyBU ZXh0aWxlKCk7CgkJCQkkb3V0WzBdID0gJHRleHRpbGUtPlRleHRpbGVUaGlzKCRoZWxwKTsK CQkJfQoJCX0KCX0KCglpZiAoJHRtcGRpciAmJiAkY2hhbmdlZCkgewoJCWlmICghZmlsZV9l eGlzdHMoJGhscGZpbGUpKSB7CgkJCXRvdWNoKCRobHBmaWxlKTsKICAgICAJfQoJCSRmZCA9 IGZvcGVuKCRobHBmaWxlLCAidyIpOwoJCWZ3cml0ZSgkZmQsICRvdXRbMF0pOwoJCWZjbG9z ZSgkZmQpOwoJfQoJJG91dFsxXSA9ICgkY3NzKSA/ICJcbiRzdGFydF9kbG1cbiRjc3NcbiRl bmRfZGxtXG4iIDogJyc7CglyZXR1cm4gc3Vic3RyKGpvaW4oJycsICRvdXQpLCAwLCA2NTUz NSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX2luc2VydF9lZGl0b3JzKCkgewoJZ2xv YmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnM7Cgkkb3V0ID0gYXJyYXkoKTsKCgkkcHJl ZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkaWVkX3BsdWdpbl9w cmVmc1swXSkpKTsKCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcsJ3R4cF9wcmVm cycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7CglpZiAoY291bnQoJHJzKSA9PSBjb3Vu dCgkaWVkX3BsdWdpbl9wcmVmc1swXSkpIHsKCQkkZWQgPSBhcnJheSgpOwoJCSRlZFskcHJl ZnNbJ2llZF9wbHVnaW5fZWRpdG9yJ11dID0gJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl9w YXRoJ107CgkJJGVkWyRwcmVmc1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvciddXSA9ICRwcmVm c1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJ107CgoJCWZvcmVhY2ggKCRlZCBhcyAk ZWRpdG9yID0+ICRlZGl0b3JfZGlyKSB7CgkJCXN3aXRjaCAoJGVkaXRvcikgewoJCQkJY2Fz ZSAidGlueV9tY2UiOgoJCQkJCSRvdXRbXSA9IDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicvdGlueV9tY2UuanMiPjwvc2NyaXB0 Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cgl0aW55TUNFLmluaXQoewoJCW1v ZGUgOiAic3BlY2lmaWNfdGV4dGFyZWFzIiwKCQllZGl0b3Jfc2VsZWN0b3IgOiAibWNlRWRp dG9yIiwKCQl0aGVtZV9hZHZhbmNlZF90b29sYmFyX2xvY2F0aW9uIDogInRvcCIsCgkJdGhl bWVfYWR2YW5jZWRfYnV0dG9uczEgOiAiYm9sZCxpdGFsaWMsdW5kZXJsaW5lLHN0cmlrZXRo cm91Z2gsZm9yZWNvbG9yLGJhY2tjb2xvcixyZW1vdmVmb3JtYXQsbnVtbGlzdCxidWxsaXN0 LG91dGRlbnQsaW5kZW50LGp1c3RpZnlsZWZ0LGp1c3RpZnljZW50ZXIsanVzdGlmeXJpZ2h0 LGp1c3RpZnlmdWxsIiwKCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMiA6ICJsaW5rLHVubGlu ayxzZXBhcmF0b3IsaWJyb3dzZXIsc2VwYXJhdG9yLHNlYXJjaCxyZXBsYWNlLHNlcGFyYXRv cixjdXQsY29weSxwYXN0ZSxzZXBhcmF0b3IsY29kZSxzZXBhcmF0b3IsZm9ybWF0c2VsZWN0 IiwKCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMyA6ICIiCgl9KTsKPC9zY3JpcHQ+OwpFT0Y7 CgkJCQkJYnJlYWs7CgkJCQljYXNlICJlZGl0X2FyZWEiOgoJCQkJCSRvdXRbXSA9IDw8PEVP Rgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkZWRpdG9yX2Rpci9lZGl0 X2FyZWFfZnVsbC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 Ij4KCS8vIGluaXRpYWxpc2F0aW9uCgllZGl0QXJlYUxvYWRlci5pbml0KHsKCQlpZDogInBs dWdpbl9lZGl0b3IiCS8vIGlkIG9mIHRoZSB0ZXh0YXJlYSB0byB0cmFuc2Zvcm0KCQksc3Rh cnRfaGlnaGxpZ2h0OiB0cnVlCS8vIGlmIHN0YXJ0IHdpdGggaGlnaGxpZ2h0CgkJLGFsbG93 X3Jlc2l6ZTogImJvdGgiCgkJLGFsbG93X3RvZ2dsZTogdHJ1ZQoJCSxsYW5ndWFnZTogImVu IgoJCSxzeW50YXg6ICJwaHAiCgl9KTsKPC9zY3JpcHQ+CkVPRjsKCQkJCQlicmVhazsKCQkJ CWNhc2UgImNvZGVwcmVzcyI6CgkJCQkJJG91dFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0IiBzcmM9IicuJGVkaXRvcl9kaXIuJy9jb2RlcHJlc3MuanMiPjwvc2NyaXB0 Pic7CgkJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIGltcGxvZGUoIlxuIiwgJG91 dCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcigkbWVz c2FnZT0nJykgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglwYWdldG9wKGdUeHQo J2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFt ZSA9IGdwcygnbmFtZScpOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhw X3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhl bHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4i LCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZSBpZiAoZ3BzKCdmaWxlbmFtZScp KSB7CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsn cGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1 Z2luKTsKCX0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpOwoJaWYgKGVtcHR5KCRoZWxwKSkg ewoJCWVjaG8gdHIodGRhKCc8cD5IZWxwIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxl LjwvcD4nKSk7Cgl9IGVsc2UgewoJCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGll ZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nf c3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCQkkcGx1Z2luWydo ZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRf Y3NzLCAkZW5kX2Nzcyk7CgkJZWNobyB0cih0ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5 KCRwbHVnaW5bJ2hlbHAnXSkgPyAnYW5kIFRleHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhl bHAgc2VjdGlvbiBmb2xsb3dzJiM4MjMwOzwvcD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsK CQllY2hvIHRyKHRkYSgkcGx1Z2luWydoZWxwJ10sICcgd2lkdGg9IjYwMCInKSk7Cgl9Cgll Y2hvIGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zZXR1 cCgkbWVzc2FnZT0nJykgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG51bVJlcVBy ZWZzID0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pOwoKCXBhZ2V0b3AoZ1R4dCgnZWRp dF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCIn LCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jv d3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4n KScpOwoJJG51bVJvd3MgPSBjb3VudCgkcnMpOwoKCSRidG5TYXZlID0gZklucHV0KCdzdWJt aXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpOwoJJGJ0bkluc3RhbGwg PSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6 aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwg J3B1Ymxpc2gnKS4nPC9mb3JtPic7CgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9z dCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsK CSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7CgoJZWNobyBz dGFydFRhYmxlKCdsaXN0Jyk7CglpZiAoJG51bVJvd3MgPT0gJG51bVJlcVByZWZzKSB7CgkJ Ly8gUHJlZnMgYWxsIGluc3RhbGxlZAoJCWVjaG8gdHIodGRhKHN0cm9uZyhpZWRfcGx1Z2lu X2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92 ZSwgJGJ0blN0eWxlKSApOwoJCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3ByZWZzX3Vw ZGF0ZSI+JzsKCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgJG51bVJvd3M7ICRpZHgrKykgewoJ CQkkYSA9ICRyc1skaWR4XTsKCQkJJGxhYmVsID0gJzxsYWJlbCBmb3I9IicuJGFbJ25hbWUn XS4nIj4nLmllZF9wbHVnaW5fZ1R4dCgkYVsnbmFtZSddKS4nOjwvbGFiZWw+JzsKCQkJJG91 dCA9IHRkYSgkbGFiZWwsICcgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1h bGlnbjogbWlkZGxlOyInKTsKCQkJc3dpdGNoKCRhWyduYW1lJ10pIHsKCQkJCWNhc2UgImll ZF9wbHVnaW5fZWRpdG9yX3BhdGgiOgoJCQkJY2FzZSAiaWVkX3BsdWdpbl9oZWxwX2VkaXRv cl9wYXRoIjoKCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlIjoKCQkJCWNhc2Ug ImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyI6CgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1 dF9zZmlsZXAiOgoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUiOgoJCQkJ CSRvdXQgLj0gdGQoZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRp dCcsICcnLCAnJywgNTAsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNl ICJpZWRfcGx1Z2luX2VkaXRvciI6Ci8vCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRh WyduYW1lJ10sIGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0 IEFyZWEnLCAnY29kZXByZXNzJyA9PiAnQ29kZVByZXNzJyksICRhWyd2YWwnXSwgJycsICcg b25jaGFuZ2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7Iics ICRhWyduYW1lJ10pKTsKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10s IGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwg JGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlk LCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAi aWVkX3BsdWdpbl9oZWxwX2VkaXRvciI6CgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgk YVsnbmFtZSddLCBhcnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywgJ3Rpbnlf bWNlJyA9PiAnVGlueSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3Bs dWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJ CQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOgoJCQkJCSRv dXQgLj0gdGQocmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS5pZWRf cGx1Z2luX2dUeHQoJ291dHB1dF9jb2RlX2ZpcnN0JykuIiAiIC4gcmFkaW8oJGFbJ25hbWUn XSwxLCgoJGFbJ3ZhbCddPT0xKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ291dHB1dF9oZWxw X2ZpcnN0JykuIiAiKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgImllZF9wbHVnaW5fZWRpdG9y X3dpZHRoIjoKCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1lJ10sICRh Wyd2YWwnXSwgJ2VkaXQnLCAnJywgJycsIDUsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJl YWs7CgkJCX0KCQkJZWNobyB0cigkb3V0KTsKCQl9CgkJZWNobyB0cih0ZGEoJGJ0blNhdmUs ICRidG5TdHlsZSkpOwoJCWVjaG8gJzwvZm9ybT4nOwoJfSBlbHNlIGlmICgkbnVtUm93cyA+ IDAgJiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsKCQllY2hvIHRyKHRkYShzdHJvbmco aWVkX3BsdWdpbl9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyCgkJCQkJCS5pZWRfcGx1Z2lu X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyCgkJCQkJCS5pZWRfcGx1Z2luX2dU eHQoJ3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIo dGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxl KSk7Cgl9IGVsc2UgewoJCWVjaG8gdHIodGRhKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfbm90 X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRhKCRidG5JbnN0 YWxsLCAkYnRuU3R5bGUpKTsKCX0KCWVjaG8gZW5kVGFibGUoKTsKCgllY2hvIDw8PEVPRgo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnZhciBpZWRfcGx1Z2luX3BhdGhfcmUg PSBuZXcgUmVnRXhwKCJeLipbL1xcXSIsICJnIikKZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVm c3dhcChzZWxJRCwgc2VsVmFsdWUpIHsKCXZhciBpZCA9IHNlbElEKydfcGF0aCc7Cgl2YXIg bnV2YWwgPSAoKGJhc2VuYW1lKCQoIiMiK2lkKS52YWwoKSkgPT0gc2VsVmFsdWUpID8gJCgi IyIraWQpLnZhbCgpIDogZGlybmFtZSgkKCIjIitpZCkudmFsKCkpK3NlbFZhbHVlKTsKCWlm ICgkKCIjIitzZWxJRClbMF0uc2VsZWN0ZWRJbmRleCA9PSAwKSB7CgkJJCgiIyIraWQpLmF0 dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsKCX0gZWxzZSB7CgkJJCgiIyIraWQpLmF0dHIoImRp c2FibGVkIiwgZmFsc2UpOyA7CgkJJCgiIyIraWQpLnZhbChudXZhbCk7Cgl9Cn0KZnVuY3Rp b24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7CglyZXR1cm4gcGF0aC5yZXBsYWNlKGllZF9w bHVnaW5fcGF0aF9yZSwgJycpOwp9CmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewoJcmV0dXJu IHBhdGgubWF0Y2goaWVkX3BsdWdpbl9wYXRoX3JlKTsKfQokKGZ1bmN0aW9uKCkgewoJJCgi c2VsZWN0Lmxpc3QiKS5lYWNoKGZ1bmN0aW9uKCkgewoJCWllZF9wbHVnaW5fcHJlZnN3YXAo dGhpcy5pZCwgdGhpcy52YWx1ZSk7Cgl9KTsKfSk7Cjwvc2NyaXB0PgpFT0Y7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKCkgewoJZ2xvYmFsICRp ZWRfcGx1Z2luX3ByZWZzOwoJJG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2ggKCRpZWRfcGx1Z2lu X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKCFmZXRjaCgnbmFtZScsJ3R4 cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgewoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3By ZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZh bD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7CgkJ fQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOwoJ aWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVk X3BsdWdpbl9wcmVmc19yZW1vdmUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7Cgkk bWVzc2FnZSA9ICcnOwoJZm9yZWFjaCAoYXJyYXlfbWVyZ2UoJGllZF9wbHVnaW5fcHJlZnNb MF0sJGllZF9wbHVnaW5fcHJlZnNbMV0pIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGZl dGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7CgkJCSRpZCA9IHNhZmVf ZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkpOwoJ CX0KCX0KCSRtZXNzYWdlID0gaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19kZWxldGVkJyk7Cglp ZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRf cGx1Z2luX3ByZWZzX3VwZGF0ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRt ZXNzYWdlID0gJyc7CgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOwoJZm9yZWFjaCAo JGllZF9wbHVnaW5fcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoaXNzZXQo JHBvc3RbJHByZWZdKSkgewoJCQlzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICci LiRwb3N0WyRwcmVmXS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHBy ZWZzX2lkID0gMSIpOwoJCX0KCX0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2 ZWQnKTsKCWllZF9wbHVnaW5fc2V0dXAoJG1lc3NhZ2UpOwp9CgovLyBCb29vISBzYW5pdGl6 ZUZvckZpbGUoKSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvcmUgc28gZHVwbGljYXRl IGl0cyBmdW5jdGlvbmFsaXR5CmlmICghZnVuY3Rpb25fZXhpc3RzKCJzbWRfc2FuaXRpemVG b3JGaWxlIikpIHsKZnVuY3Rpb24gc21kX3Nhbml0aXplRm9yRmlsZSgkbmFtZSkgewoJJG5l d25hbWUgPSBwcmVnX3JlcGxhY2UoJy9bXHgwMC1ceDFmXHgyMlx4MmFceDJmXHgzYVx4M2Nc eDNlXHgzZlx4NWNceDdjXHg3Zl0rLycsICcnLCAkbmFtZSk7CgkkbmV3bmFtZSA9IHByZWdf cmVwbGFjZSgnL1suXXsyLH0vJywgJy4nLCB0cmltKCRuZXduYW1lLCAnLiAnKSk7CglyZXR1 cm4gJG5ld25hbWU7Cn0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2dUeHQo JHdoYXQsICRhdHRzID0gYXJyYXkoKSkgewoJJGxhbmcgPSBhcnJheSgKCQknY2FjaGVfbm90 X3NldCcgPT4gJ0FkdmFuY2VkIHByZWYgInBsdWdpbiBjYWNoZSBkaXJlY3RvcnkiIG5vdCBk ZWZpbmVkJywKCQknY2hlY2tfdHlwZScgPT4gJ0NoZWNrIHlvdXIgcGx1Z2luIHR5cGUhJywK CQknY2hvb3NlX2ZpbGUnID0+ICdZb3UgYXJlIHN1cHBvc2VkIHRvIGNob29zZSB0aGUgZmls ZSA7KScsCgkJJ2NvZGVfZGlzdCcgPT4gJ1BsdWdpbiBjb2RlPGJyPmZvciBkaXN0cmlidXRp b24nLAoJCSdpZWRfcGx1Z2luX2NvbXBvc2VyJyA9PiAnUGx1Z2luIENvbXBvc2VyJywKCQkn Y29tcHJlc3MnID0+ICdaaXAnLAoJCSdjcmVhdGVfbmV3JyA9PiAnQ3JlYXRlIG5ldyBwbHVn aW4nLAoJCSdlZGl0X25ldycgPT4gJ0VkaXQgeW91ciBuZXcgcGx1Z2luJywKCQknZW5hYmxl JyA9PiAnRW5hYmxlZCcsCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCBhcycsCgkJJ2llZF9wbHVn aW5fZWRpdG9yJyA9PiAnUGx1Z2luIGVkaXRvcicsCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3Bh dGgnID0+ICdQbHVnaW4gZWRpdG9yIHBhdGggVVJMJywKCQknaWVkX3BsdWdpbl9lZGl0b3Jf d2lkdGgnID0+ICdQbHVnaW4gZWRpdG9yIHdpZHRoIChjaGFycyknLAoJCSdpZWRfcGx1Z2lu X2hlbHBfZWRpdG9yJyA9PiAnSGVscCBlZGl0b3InLAoJCSdpZWRfcGx1Z2luX2hlbHBfZWRp dG9yX3BhdGgnID0+ICdIZWxwIGVkaXRvciBwYXRoIFVSTCcsCgkJJ2llZF9wbHVnaW5fb3V0 cHV0X29yZGVyJyA9PiAnUEhQIGV4cG9ydCBvcmRlcicsCgkJJ2llZF9wbHVnaW5fb3V0cHV0 X3NmaWxlJyA9PiAnRXhwb3J0IHBsdWdpbiBmaWxlbmFtZSBmb3JtYXQnLAoJCSdpZWRfcGx1 Z2luX291dHB1dF9zZmlsZWMnID0+ICdFeHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3Jt YXQnLAoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICdQbHVnaW4gdGVtcGxhdGUg ZmlsZW5hbWUgZm9ybWF0JywKCQknaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnID0+ICdD YWNoZSB0ZXh0aWxlZCBoZWxwIGhlcmUnLAoJCSduYW1lJyA9PiAnUGx1Z2luIG5hbWUnLAoJ CSduYW1lX2ZpcnN0JyA9PiAnWW91IGFyZSBzdXBwb3NlZCB0byBuYW1lIHRoZSBwbHVnaW4g OyknLAoJCSduYW1lX3Rvb2x0aXAnID0+ICdPbmx5IG5lZWRlZCBpZiB0aGUgUEhQIGZpbGUg eW91IGFyZSB1cGxvYWRpbmcgaXMgTk9UIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3Jt YXQnLAoJCSdsb2FkX29yZGVyJyA9PiAnTG9hZCBvcmRlcicsCgkJJ2xvYWRfb3JkZXJfaGVs cCcgPT4gJygxPWZpcnN0LCA1PW5vcm1hbCwgOT1sYXN0KScsCgkJJ291dHB1dF9jb2RlX2Zp cnN0JyA9PiAnQ29kZSBmaXJzdCcsCgkJJ291dHB1dF9oZWxwX2ZpcnN0JyA9PiAnSGVscCBm aXJzdCcsCgkJJ3BsdWdpbl9jb2RlJyA9PiAnU291cmNlIGNvZGUnLAoJCSdwcmVmc19kZWxl dGVkJyA9PiAnUHJlZmVyZW5jZXMgZGVsZXRlZCcsCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4g J1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsCgkJJ3ByZWZzX25vdF9pbnN0YWxsZWQnID0+ICdQ cmVmZXJlbmNlcyBub3QgaW5zdGFsbGVkLicsCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxs IHByZWZlcmVuY2VzIGF2YWlsYWJsZS4nLAoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJ dCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhl Jy5ici4ncGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMn LmJyLidoYXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywKCQkncHJlZnNfc29tZV9vcHRp b25zJyA9PiAnQ2hvb3NlICcuZ1R4dCgnZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwg b3IgJy5nVHh0KCdpbnN0YWxsJykuJyB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZp bmcgYWxsIGV4aXN0aW5nIHByZWZlcmVuY2VzIHVudG91Y2hlZC4nLAoJCSdwcmVmc190aXRs ZScgPT4gJ1BsdWdpbiBDb21wb3NlciBwcmVmZXJlbmNlcycsCgkJJ3JlbmFtZV9mYWlsZWQn ID0+ICcgKHJlbmFtZSBmYWlsZWQpICcsCgkJJ3JlbmFtZV9maWxlJyA9PiAnUmVuYW1lIGZp bGUnLAoJCSdyZW5hbWVkJyA9PiAnIChyZW5hbWVkKSAnLAoJCSdyZXN0b3JlX2hlbHAnID0+ ICdSb2xsIGJhY2sgdGhlIHBsdWdpbiBjb2RlIHRvIHRoZSBtb3N0IHJlY2VudCByZXN0b3Jl IHBvaW50JywKCQkncmVzdG9yZV9wb2ludCcgPT4gJ1Jlc3RvcmUgcG9pbnQnLAoJCSdyZXN0 b3JlX3ZlcmlmeScgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByb2xsYmFjayB0aGUg e25hbWV9IHNvdXJjZSBjb2RlIHRvIGl0cyBsYXN0IHJlc3RvcmUgcG9pbnQ/JywKCQkncmVz dG9yZWQnID0+ICdQbHVnaW4ge25hbWV9IHJlc3RvcmVkLicsCgkJJ3J1bl9mcm9tJyA9PiAn UGx1Z2lucyB0aGF0IHJ1biBmcm9tJywKCQknc2F2ZV9hcycgPT4gJ1NhdmUgYXMnLAoJCSdz ZXR1cCcgPT4gJ1NldHVwJywKCQkndHlwZScgPT4gJ1BsdWdpbiB0eXBlJywKCQkndHlwZV8w JyA9PiAnQ2xpZW50JywKCQkndHlwZV8xJyA9PiAnQWRtaW4gKyBDbGllbnQnLAoJCSd0eXBl XzInID0+ICdMaWJyYXJ5JywKCQkndHlwZV8zJyA9PiAnQWRtaW4nLAoJCSd1cGxvYWRfcGhw JyA9PiAnVXBsb2FkIHBsdWdpbiBmcm9tIFBIUCBmaWxlJywKCQkndXRpbGl0aWVzJyA9PiAn VXRpbGl0aWVzICg8c3Ryb25nPnVzZSBvbmx5IGFmdGVyIHNhdmluZyB0aGUgZGF0YSBhYm92 ZTwvc3Ryb25nPiknLAoJKTsKCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsK fSI7czozOiJtZDUiO3M6MzI6IjU4Mzc3MmI4NWYzYTA0MmQ3ZDJhNGJjN2I4NjU0ZTFhIjt9