# Name: smd_tags v0.40 # Type: Admin/Public side plugin # Unlimited tag taxonomy for articles, images, files and links # Author: Stef Dawson # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjg6InNtZF90YWdzIjtzOjY6ImF1dGhvciI7czoxMToiU3Rl ZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjQwIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MDoi VW5saW1pdGVkIHRhZyB0YXhvbm9teSBmb3IgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5k IGxpbmtzIjtzOjQ6ImNvZGUiO3M6MTMwNzU1OiIvLyBzbWRfdGFncyBieSBTdGVmIERhd3Nv bg0KLy8gVE9ETzogR2xvYmFsIHRhZ3MNCi8vIFRPRE86IEZlZWQgaGFuZGxlciBwcmVmcyB0 byBpbmplY3QgdGFncyBpbnRvIFJTUytBdG9tIChsaWtlIHRydV90YWdzOiBjb2RlIGF0IGJv dHRvbSBvZiB0aGlzIHBsdWdpbikNCi8vIFRPRE86IEFkZCBvcHRpb24gdG8gZGlzcGxheSB0 YWcgbGlzdHMgQU5EIFRleHRBcmVhKCspIG9uIGxpc3QgcGFnZXMNCi8vIFRPRE86IFNlZSBp ZiByYXBpZCB0YWdnaW5nIGNhbiBiZSBtYWRlIG1vcmUgaW50dWl0aXZlIHdydCBDcmVhdGUv U2F2ZSB0byBhdm9pZCBjbG9iYmVyaW5nIGFscmVhZHkgY3JlYXRlZCB0YWdzIChmcm9tIHBp ZW1hbikNCi8vIFRPRE86IFdoZW4gcmVmcmVzaGluZyB0aGUgTWFuYWdlIHRhYiwgRkYgcmVt ZW1iZXJzIHRoZSBUaXRsZSBhbmQgdHJpZXMgdG8gYWRkIGl0IG9uIHBhZ2UgbG9hZCwgdGhy b3dpbmcgYSBtc2dhcmVhIHdhcm5pbmcgYWJvdXQgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyAo b3IgdGhhdCBuYW1lIGlzIGVtcHR5KQ0KLy8gVE9ETzogT24gbGlzdCBwYWdlczoNCi8vICAg ICAqIEFKQVggZmV0Y2ggb2YgdGhlIHRhZyBzZXQgZm9yIFRleHRBcmVhIGFuZCBUZXh0QXJl YSsgbW9kZXMgdG8gaW1wcm92ZSBwYWdlIGxvYWQgdGltZSAocGx1cyB5b3UgdGhlbiBvbmx5 IGdyYWIgdGhlIG9uZXMgaW4gdGhlIGN1cnJlbnQgY2F0ZWdvcnkgaGllcmFyY2h5KQ0KLy8g ICAgICogT3B0aW9uIGZvciBiaS1kaXJlY3Rpb25hbCBsb29rdXAgb2YgdGFncyBmcm9tIHRo ZSBjdXJyZW50IGNhdGVnb3J5LCBpLmUuIGdyYW5kcGFyZW50cyBhbmQgY2hpbGRyZW4gKGZy b20gYXN3aWhhcnQpDQovLyAgICAgKiBSZXNvbHZlIHdoYXQgaGFwcGVucyBpZiB0aGVyZSBh cmUgbm8gY2F0ZWdvcmllcyBkZWZpbmVkIChmcm9tIGpwZHVwb250KQ0KLy8gICAgICogT3B0 aW9uIHRvIGRpc3BsYXkvaGlkZSB0aGUgdG9wLWxldmVsIChncm91cCkgdGFnIGluIGxpc3Rz IChmcm9tIHBpZW1hbikNCi8vICAgICAqIEFkZCBhdXRvY29tcGxldGUgb3B0aW9ucyB0byBz bWRfdGFncyBwcmVmcyBzbyBhdXRvZmlsbCBldGMgY2FuIGJlIGNvbmZpZ3VyZWQgKGZyb20g YXN3aWhhcnQpDQovLyAgICAgKiBDaGVjayB3aGF0IGhhcHBlbnMgd2hlbiBkZWxldGluZyBj b250ZW50IChlLmcuIGltYWdlcyk6IGl0IHNvbWV0aW1lcyB0cmlnZ2VycyAiICcnIGlzIG5v dCBhbiBJbnRlZ2VyICIgYXNzZXJ0aW9uIChmcm9tIGN1cmlvdXopDQovLyAgICAgKiBQZXJo YXBzIG9mZmVyIHNvcnQgb3B0aW9uIGZvciBMaXN0IG1vZGUgdG8gYSkgcmV0YWluIGhpZXJh cmNoeSwgYikgc3RyaWN0IGFscGhhYmV0aWNhbCwgYykgZ3JvdXAgdGhlbSBzb21laG93IHRv IHNob3cgaG93IHNldHMgb2YgdGFncyBhcmUgcmVsYXRlZCAoZnJvbSBwaWVtYW4pDQovLyAg VE9ETzogUG9zc2liaWxpdHkgb2Ygc2VjdGlvbiB0YWdzPyAoZnJvbSBqYWtvYikNCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBRE1JTiBTSURFIENPREUNCmlmIChAdHhw aW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ3NtZF90YWdzJywnMSwyJyk7 DQoJYWRkX3ByaXZzKCdzbWRfdGFnc191c2VycycsJzEsMiwzLDQsNSw2Jyk7DQoJYWRkX3By aXZzKCdwbHVnaW5fcHJlZnMuc21kX3RhZ3MnLCcxLDInKTsNCg0KCS8vIEV4dGVuc2lvbnMg dGFiDQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ3NtZF90YWdzJywgc21kX3RhZ3Nf Z1R4dCgnc21kX3RhZ3MnKSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzJywgJ3Nt ZF90YWdzJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3VzZXJzJywgJ3NtZF90 YWdzX3VzZXJzJyk7DQoNCgkvLyBOb3RlIHRoZSBjYWxsYmFja3MgYXJlIG9yZGVyZWQgd2l0 aCAnc2F2ZScgZmlyc3QNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbXVsdGlfZWRp dCcsICdsaXN0JywgJ2xpc3RfbXVsdGlfZWRpdCcpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfdGFnc19zYXZlbGlzdCcsICdhcnRpY2xlJywgJ2NyZWF0ZScpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcsICdhcnRpY2xlJywgJ2VkaXQnKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9hZGxpc3QnLCAnYXJ0aWNsZScpOw0KDQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX211bHRpX2VkaXQnLCAnaW1hZ2UnLCAnaW1hZ2Vf ZGVsZXRlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3NhdmVsaXN0JywgJ2lt YWdlJywgJ2ltYWdlX3NhdmUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9h ZGxpc3QnLCAnaW1hZ2UnKTsNCg0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19tdWx0 aV9lZGl0JywgJ2ZpbGUnLCAnZmlsZV9kZWxldGUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RhZ3Nfc2F2ZWxpc3QnLCAnZmlsZScsICdmaWxlX3NhdmUnKTsNCglyZWdpc3Rlcl9j YWxsYmFjaygnc21kX3RhZ3NfbG9hZGxpc3QnLCAnZmlsZScpOw0KDQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90YWdzX211bHRpX2VkaXQnLCAnbGluaycsICdsaW5rX211bHRpX2VkaXQn KTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAnbGluaycsICds aW5rX3Bvc3QnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAn bGluaycsICdsaW5rX3NhdmUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9h ZGxpc3QnLCAnbGluaycpOw0KDQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3NldHVw JywgJ3BsdWdpbl9wcmVmcy5zbWRfdGFncycpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRf dGFnc193ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuc21kX3RhZ3MnKTsNCg0KCWdsb2Jh bCAkc21kX3RhZ19wcmVmcywgJHNtZF90YWdzX3N0eWxlczsNCg0KCS8vIFRyaXBsZSBhcnJh eSwgb3V0cHV0IGluIGFscGhhYmV0aWNhbCBvcmRlciwgc2VxdWVudGlhbGx5IG51bWJlcmVk DQoJLy8gIDA6IGxpc3Qgb2YgY3VycmVudCBwcmVmcyArIGRlZmF1bHQNCgkvLyAgMTogbGlz dCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkgbmVlZCByZW1vdmluZyAoZGVmYXVsdCBzaG91 bGQgYWxsIGJlIGVtcHR5KQ0KCS8vICAyOiBwb3NpdGlvbiB0aGF0IGEgaGVhZGluZyBzaG91 bGQgYmUgaW5zZXJ0ZWQgKyBoZWFkaW5nIGl0c2VsZg0KCSRzbWRfdGFnX3ByZWZzID0gYXJy YXkoDQoJCWFycmF5KA0KCQkJJ3NtZF90YWdfcF9lbmFibGUnID0+ICcxMTExJywgLy8gb25l IGRpZ2l0IGZvciBhcnRpY2xlL2ltYWdlL2ZpbGUvbGluay4gMT1lbmFibGVkOyAwPWRpc2Fi bGVkDQoJCQknc21kX3RhZ19wX2lucHV0JyA9PiAnMCcsIC8vIDA9c2VsZWN0LCAxPWxpbmtz LCAyPXRleHRhcmVhLCAzPXRleHRhcmVhKw0KCQkJJ3NtZF90YWdfcF9saW5rY2F0JyA9PiAn MCcsDQoJCQknc21kX3RhZ19wX3F0YWcnID0+ICcwJywgLy8gMD1ubyBhdXRvY29tcGxldGUs IDE9c3RkIGEvYywgMj1zdHJpY3QgYS9jDQoJCQknc21kX3RhZ19wX3F0cGF0aCcgPT4gJycs IC8vIERpciB0byBqcyBmaWxlKHMpIHJlbGF0aXZlIHRvIHRleHRwYXR0ZXJuIGRpcg0KCQkJ J3NtZF90YWdfcF9xdHN0eWwnID0+ICcnLCAvLyBEaXIgdG8gY3NzIGZpbGUocykNCgkJCSdz bWRfdGFnX3Bfc2l6ZScgPT4gJzYnLA0KCQkJJ3NtZF90YWdfdF9hc3RhcnQnID0+ICcwJywN CgkJCSdzbWRfdGFnX3RfYXV0bycgPT4gJzEnLA0KCQkJJ3NtZF90YWdfdF9jb2xzJyA9PiAn MScsDQoJCQknc21kX3RhZ190X2NvbHNvcmQnID0+ICcwJywNCgkJCSdzbWRfdGFnX3RfY291 bnQnID0+ICcxJywNCgkJCSdzbWRfdGFnX3RfZGVsdHJlZScgPT4gJzAnLA0KCQkJJ3NtZF90 YWdfdF9kZWx1c2VkJyA9PiAnMCcsDQoJCQknc21kX3RhZ190X2VucmVwJyA9PiAnMScsDQoJ CQknc21kX3RhZ190X2hpbGl0ZScgPT4gJzgwNTUxJywNCgkJCSdzbWRfdGFnX3RfaG92ZXIn ID0+ICdhYWEnLA0KCQkJJ3NtZF90YWdfdF9pbmRlbnQnID0+ICcmIzgyMTI7JywNCgkJCSdz bWRfdGFnX3RfbWRlbGltJyA9PiAnLCcsDQoJCQknc21kX3RhZ191X3BuYW0nID0+ICdzbWRf dGFnJywNCgkJCSdzbWRfdGFnX3VfcHR5cCcgPT4gJ3NtZF90YWd0eXBlJywNCgkJCSdzbWRf dGFnX3Vfc2VjJyA9PiAnc21kX3RhZ3MnLA0KCQkpLA0KCQlhcnJheSgNCgkJCSdzbWRfdGFn X3BfZmlyc3QnID0+ICcxJywNCgkJKSwNCgkJYXJyYXkoDQoJCQkxID0+IHNtZF90YWdzX2dU eHQoJ3ByZWZzX3AnKSwNCgkJCTggPT4gc21kX3RhZ3NfZ1R4dCgncHJlZnNfdCcpLA0KCQkJ MjAgPT4gc21kX3RhZ3NfZ1R4dCgncHJlZnNfdScpLA0KCQkpDQoJKTsNCg0KCS8vIENTUyBk ZWZpbml0aW9uczogaG9wZWZ1bGx5IGtpbmQgdG8gdGhlbWVycw0KCSRzbWRfdGFnc19zdHls ZXMgPSBhcnJheSgNCgkJJ3RhZ19tYW5hZ2VyJyA9Pg0KICAgICAgICAgJy5zbWRfaGlkZGVu IHsgZGlzcGxheTpub25lOyB9DQogICAgICAgICAuc21kX2hvdmVyIHsgY3Vyc29yOnBvaW50 ZXI7IGJhY2tncm91bmQ6I3tob3Z9OyB9DQogICAgICAgICAuc21kX2N1cnJlbnQgeyBmb250 LXdlaWdodDpib2xkOyBiYWNrZ3JvdW5kOiN7Y3VyfTsgfQ0KICAgICAgICAgLnNtZF90YWdz X3Nob3dwYXJzLCAuc21kX3RhZ3NfbGlua2NhdCB7IHdpZHRoOjEyZW07IH0NCiAgICAgICAg ICNzbWRfdGFnX2ZpbHQgeyBmb250LXNpemU6OTAlOyBmbG9hdDpsZWZ0OyBtYXJnaW46LTM1 cHggMCAxMnB4IDEwcHg7IHBhZGRpbmc6N3B4IDNweDsgfQ0KICAgICAgICAgI3NtZF90YWdf bXVsdGlzZWwgeyBtYXJnaW46MTBweCAwIDA7IH0nLA0KCQknbGlzdF9wYWdlcycgPT4NCiAg ICAgICAgICcuc21kX2hpZGRlbiB7IGRpc3BsYXk6bm9uZTsgfQ0KICAgICAgICAgLnNtZF9m YWtlYnRuLCAjc21kX3RhZ3NfYnlsaW5rIHNwYW4geyBjdXJzb3I6cG9pbnRlcjsgfQ0KICAg ICAgICAgLnNtZF90YWdpcCB7IG1hcmdpbjouNGVtIDAgLjhlbTsgbWF4LXdpZHRoOjQwMHB4 OyB9DQogICAgICAgICAuc21kX3NlbCB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0nLA0KCQkncmVw b3J0JyA9Pg0KICAgICAgICAgJyNzbWRfdGFnX3JlcG9ydF9wYW5lIHsgZGlzcGxheTpub25l OyBwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoyMDBweDsgbWF4LXdpZHRoOjUwMHB4OyBib3Jk ZXI6M3B4IHJpZGdlICM5OTk7IG9wYWNpdHk6LjkyOyBmaWx0ZXI6YWxwaGEob3BhY2l0eTo5 Mik7IHBhZGRpbmc6MTVweCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNlMmRmY2U7IGNvbG9y OiM4MDU1MWU7IH0NCgkJCSNzbWRfdGFnX3JlcG9ydF9wYW5lIC5wdWJsaXNoIHsgZmxvYXQ6 cmlnaHQ7IH0nLA0KCSk7DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX1RBRycpKSB7DQoJZGVm aW5lKCJTTURfVEFHIiwgJ3NtZF90YWdzJyk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9UQUdD JykpIHsNCglkZWZpbmUoIlNNRF9UQUdDIiwgJ3NtZF90YWdzX2NhdCcpOw0KfQ0KaWYgKCFk ZWZpbmVkKCdTTURfVEFHVScpKSB7DQoJZGVmaW5lKCJTTURfVEFHVSIsICdzbWRfdGFnc191 c2VkJyk7DQp9DQpyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfdXJsX2hhbmRsZXInLCAn cHJldGV4dCcpOw0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFnc193ZWxjb21lKCRl dmVudCwgJHN0ZXApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgkc3RlcCkgew0KCQljYXNl ICdpbnN0YWxsZWQnOg0KCQkJc21kX3RhZ3NfdGFibGVfaW5zdGFsbCgnJywgMCk7DQoJCQkk bXNnID0gJ1RoYW5rcyBmb3IgaW5zdGFsbGluZyBzbWRfdGFncy4gSGFwcHkgdGFnZ2luZyEn Ow0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX3RhZ3NfcHJlZnNfcmVt b3ZlKCcnLCAwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFncygkZXZlbnQsICRzdGVw KSB7DQoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzOw0KDQoJaWYgKCRzdGVwID09ICdzYXZlX3Bh bmVfc3RhdGUnKSB7DQoJCXNtZF90YWdzX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCX0gZWxzZSB7 DQoJCWlmKCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJCSdzbWRfdGFn X2NyZWF0ZScsDQoJCQkJJ3NtZF90YWdzX2RlbGV0ZScsDQoJCQkJJ3NtZF90YWdfc2F2ZScs DQoJCQkJJ3NtZF90YWdfY2F0bGlzdCcsDQoJCQkJJ3NtZF90YWdfcGFyZW50bGlzdCcsDQoJ CQkJJ3NtZF90YWdzX21hbmFnZScsDQoJCQkJJ3NtZF90YWdzX3N5bmMnLA0KCQkJCSdzbWRf dGFnc19pbXBvcnRfb25lJywNCgkJCQknc21kX3RhZ3NfbXVsdGlfc2V0X3BhcmVudCcsDQoJ CQkJJ3NtZF90YWdzX211bHRpX2NhdGxpbmsnLA0KCQkJCSdzbWRfdGFnc19pbXBvcnQnLA0K CQkJCSdzbWRfdGFnc190YWJsZV9pbnN0YWxsJywNCgkJCQknc21kX3RhZ3NfdGFibGVfcmVt b3ZlJywNCgkJCQknc21kX3RhZ3NfdGFibGVfcmVidWlsZCcsDQoJCQkJJ3NtZF90YWdzX3By ZWZzX3Nob3cnLA0KCQkJCSdzbWRfdGFnc19wcmVmc19pbnN0YWxsJywNCgkJCQknc21kX3Rh Z3NfcHJlZnNfcmVtb3ZlJywNCgkJCQknc21kX3RhZ3NfcHJlZnNfdXBkYXRlJywNCgkJCSkp KSB7DQoJCQkkcHJlZiA9IHNtZF90YWdzX3ByZWZfZ2V0KCdzbWRfdGFnX3RfYXN0YXJ0Jyk7 DQoJCQlpZiAoJHByZWYpIHsNCgkJCQlzd2l0Y2ggKCRwcmVmWydzbWRfdGFnX3RfYXN0YXJ0 J11bJ3ZhbCddKSB7DQoJCQkJCWNhc2UgMToNCgkJCQkJCXNtZF90YWdzX21hbmFnZSgnJyk7 DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAwOg0KCQkJCQlkZWZhdWx0Og0KCQkJCQkJc21k X3RhZ3NfcHJlZnNfc2hvdygnJyk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQlzbWRfdGFn c19wcmVmc19zaG93KCcnKTsNCgkJCX0NCgkJfSBlbHNlICRzdGVwKCk7DQoJfQ0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90YWdzX3VzZXJzKCRl dmVudCwgJHN0ZXApIHsNCglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgN CgkJCSdzbWRfdGFnX2NhdGxpc3QnLA0KCQkJJ3NtZF90YWdfcGFyZW50bGlzdCcsDQoJCSkp KSB7DQoJCQkvLyBEbyBub3RoaW5nDQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQ3JlYXRlIGRyb3Bkb3duIGFuZCBwb3B1bGF0ZSBp dCB3aXRoIHRhZ3Mgb2YgdGhlIHJlbGV2YW50IHR5cGUsIGhpZ2hsaWdodGluZyBhbnkgJHNl bCB0YWdzDQpmdW5jdGlvbiBzbWRfbXVsdGlUcmVlU2VsZWN0SW5wdXQoJHNlbGVjdF9uYW1l ID0gJycsICR0cmVlID0gJycsICRzZWwgPSAnJykgew0KCSRwcmVmID0gc21kX3RhZ3NfcHJl Zl9nZXQoJ3NtZF90YWdfcF9zaXplJywgMSk7DQoJJHJvd3MgPSAkcHJlZlsnc21kX3RhZ19w X3NpemUnXVsndmFsJ107DQoNCgkkb3V0W10gPSAnPHNlbGVjdCBpZD0iJy4kc2VsZWN0X25h bWUuJyIgbmFtZT0iJy4kc2VsZWN0X25hbWUuJ1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4g JHJvd3MgLiciJyAuKCgkcm93cz09MSkgPyAnJyA6ICcgbXVsdGlwbGU9Im11bHRpcGxlIicp LiAnPic7DQoJZm9yZWFjaCAoJHRyZWUgYXMgJGxlYWYpIHsNCgkJaWYgKCRsZWFmWyduYW1l J10gPT0gJ3Jvb3QnKSBjb250aW51ZTsNCg0KCQkkc2VsZWN0ZWQ9Jyc7DQoJCWZvcmVhY2gg KCRzZWwgYXMgJGdpZCA9PiAkaXRlbSkgew0KCQkJaWYgKCRsZWFmWydpZCddID09ICRpdGVt Wyd0YWdfaWQnXSkgew0KCQkJCSRzZWxlY3RlZCA9ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7 DQoJCQkJY29udGludWU7DQoJCQl9DQoJCX0NCg0KCQkkbGVhZlsnbmFtZSddID0gaHRtbHNw ZWNpYWxjaGFycygkbGVhZlsnbmFtZSddKTsNCgkJJGluZGVudCA9ICgkbGVhZlsnbGV2ZWwn XSA+IDApID8gc3RyX3JlcGVhdChzcC5zcCwkbGVhZlsnbGV2ZWwnXSkgOiAnJzsNCgkJJG91 dFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kbGVhZlsnaWQnXS4nIicuJHNlbGVjdGVkLic+ Jy4kaW5kZW50Lmh0bWxzcGVjaWFsY2hhcnMoJGxlYWZbJ3RpdGxlJ10pLic8L29wdGlvbj4n Ow0KCX0NCgkkb3V0W10gPSAnPC9zZWxlY3Q+JzsNCglyZXR1cm4gam9pbignJywkb3V0KTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDYWxsZWQgd2hlbmV2ZXIg b25lIG9mIHRoZSA0IG1haW4gdGFicyBhcmUgdXNlZCBvbiB0aGUgYWRtaW4gc2lkZS4gSW5z ZXJ0cyB0aGUgaW5wdXQgbWV0aG9kIGlmIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfdGFnc19s b2FkbGlzdCgkZXZlbnQsICRzdGVwKSB7DQoJZ2xvYmFsICRzbWRfdGFnc19zdHlsZXM7DQoN CglpZiAoc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQkkY3RybHMgPSBzbWRfdGFnc19w cmVmX2dldChhcnJheSgnc21kX3RhZ19wX2VuYWJsZScsICdzbWRfdGFnX3BfaW5wdXQnLCAn c21kX3RhZ19wX3NpemUnLCAnc21kX3RhZ19wX3F0YWcnLCAnc21kX3RhZ19wX3F0cGF0aCcs ICdzbWRfdGFnX3BfcXRzdHlsJywgJ3NtZF90YWdfcF9saW5rY2F0JyksIDEpOw0KCQkkb25v ZmYgPSBzbWRfdGFnc19wcmVmX2V4cGxvZGUoJGN0cmxzWydzbWRfdGFnX3BfZW5hYmxlJ11b J3ZhbCddKTsNCgkJJGlwdHlwID0gJGN0cmxzWydzbWRfdGFnX3BfaW5wdXQnXVsndmFsJ107 DQoJCSRzZWxzeiA9ICRjdHJsc1snc21kX3RhZ19wX3NpemUnXVsndmFsJ107DQoJCSRxdWlj ayA9ICRjdHJsc1snc21kX3RhZ19wX3F0YWcnXVsndmFsJ107DQoJCSRqc2RpciA9ICRjdHJs c1snc21kX3RhZ19wX3F0cGF0aCddWyd2YWwnXTsNCgkJJGNzZGlyID0gJGN0cmxzWydzbWRf dGFnX3BfcXRzdHlsJ11bJ3ZhbCddOw0KCQkkY2xpbmsgPSAkY3RybHNbJ3NtZF90YWdfcF9s aW5rY2F0J11bJ3ZhbCddOw0KCQkkanN0YWlsID0gKCRqc2RpcikgPyAnLycgOiAnJzsNCgkJ JGNzdGFpbCA9ICgkY3NkaXIpID8gJy8nIDogJyc7DQoJCSRhZGRJdCA9IGZhbHNlOw0KDQoJ CSRpdGVtSUQgPSBzbWRfZ2V0SUQoKTsNCgkJJGVkdEJ0biA9IGhhc19wcml2cygnc21kX3Rh Z3MnKSA/ICcgWycuZUxpbmsoJ3NtZF90YWdzJywgJ3NtZF90YWdzX21hbmFnZScsICdzbWRf dGFnX3R5cGUnLCAkZXZlbnQsIGdUeHQoJ2VkaXQnKSkuJ10gJyA6ICcnOw0KCQkkdGFndG9w ID0gJzxkaXYgY2xhc3M9InNtZF90b3AiPicuc21kX3RhZ3NfZ1R4dCgndGl0bGUnKS4kZWR0 QnRuLic8L2Rpdj4nOw0KCQkkc2VsaXN0ID0gJzxkaXYgaWQ9InNtZF90YWdzIiBuYW1lPSJz bWRfdGFnc19ieWxpc3QiIGNsYXNzPSJzbWRfdGFnaXAiPjwvZGl2Pic7DQoJCSRzZWxoaWQg PSAnPGRpdiBpZD0ic21kX3RhZ3MiIG5hbWU9InNtZF90YWdzX2J5bGlzdCIgY2xhc3M9InNt ZF9oaWRkZW4iPjwvZGl2Pic7DQoJCXN3aXRjaCAoJGlwdHlwKSB7DQoJCQljYXNlIDA6DQoJ CQkJJGlwbWV0aCA9ICRzZWxpc3Q7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDE6DQoJCQkJJGlw bWV0aCA9ICc8ZGl2IG5hbWU9InNtZF90YWdzX2J5bGluayIgaWQ9InNtZF90YWdzX2J5bGlu ayIgY2xhc3M9InNtZF90YWdpcCI+PC9kaXY+Jy4kc2VsaGlkOw0KCQkJCWJyZWFrOw0KCQkJ Y2FzZSAyOg0KCQkJY2FzZSAzOg0KCQkJCSRpcG1ldGggPSAnPHRleHRhcmVhIG5hbWU9InNt ZF90YWdzX2J5dGV4dCIgcm93cz0iJy4kc2Vsc3ouJyIgY2xhc3M9InNtZF90YWdpcCI+PC90 ZXh0YXJlYT4nLiRzZWxoaWQ7DQoJCQkJYnJlYWs7DQoJCX0NCg0KCQlzd2l0Y2ggKCRldmVu dCkgew0KCQkJY2FzZSAiYXJ0aWNsZSI6DQoJCQkJJGFkZEl0ID0gKCRvbm9mZltnVHh0KCd0 YWJfbGlzdCcpXSA9PSAxKSA/IHRydWUgOiBmYWxzZTsNCgkJCQlpZiAoJGFkZEl0KSB7DQoJ CQkJCWV4dHJhY3QoZ3BzYShhcnJheSgndmlldycsJ2Zyb21fdmlldycpKSk7DQoJCQkJCSR2 aWV3ID0gKCR2aWV3KSA/ICR2aWV3IDogInRleHQiOw0KCQkJCQkkZ3JhYmNhdHMgPSAnalF1 ZXJ5KCIjY2F0ZWdvcnktMSBvcHRpb246c2VsZWN0ZWQsICNjYXRlZ29yeS0yIG9wdGlvbjpz ZWxlY3RlZCIpJzsNCgkJCQkJJGpzRWxlbSA9ICdqUXVlcnkoIiNjYXRlZ29yeS0yIiknOw0K CQkJCQkkdHJpZ2dlciA9ICdqUXVlcnkoIiNjYXRlZ29yeS0xLCAjY2F0ZWdvcnktMiIpJzsN CgkJCQkJaWYgKCR2aWV3ICE9ICd0ZXh0Jykgew0KCQkJCQkJJHRhZ3RvcCA9ICRpcG1ldGgg PSAnJzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImltYWdlIjoNCgkJ CQlpZiAoJHN0ZXAgPT0gImltYWdlX2VkaXQiKSB7DQoJCQkJCSRhZGRJdCA9ICgkb25vZmZb Z1R4dCgndGFiX2ltYWdlJyldID09IDEpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCQlpZiAoJGFk ZEl0KSB7DQoJCQkJCQkkZ3JhYmNhdHMgPSAnalF1ZXJ5KCIjaW1hZ2UtY2F0ZWdvcnkgb3B0 aW9uOnNlbGVjdGVkIiknOw0KCQkJCQkJJGpzRWxlbSA9ICR0cmlnZ2VyID0gImpRdWVyeSgn I2ltYWdlLWNhdGVnb3J5JykiOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2Fz ZSAiZmlsZSI6DQoJCQkJaWYgKCRzdGVwID09ICJmaWxlX2VkaXQiKSB7DQoJCQkJCSRhZGRJ dCA9ICgkb25vZmZbZ1R4dCgndGFiX2ZpbGUnKV0gPT0gMSkgPyB0cnVlIDogZmFsc2U7DQoJ CQkJCWlmICgkYWRkSXQpIHsNCgkJCQkJCSRncmFiY2F0cyA9ICdqUXVlcnkoInNlbGVjdFtu YW1lPVwnY2F0ZWdvcnlcJ10gb3B0aW9uOnNlbGVjdGVkIiknOw0KCQkJCQkJJGpzRWxlbSA9 ICR0cmlnZ2VyID0gJ2pRdWVyeSgic2VsZWN0W25hbWU9XCdjYXRlZ29yeVwnXSIpJzsNCgkJ CQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImxpbmsiOg0KCQkJCSRhZGRJdCA9 ICgkb25vZmZbZ1R4dCgndGFiX2xpbmsnKV0gPT0gMSkgPyB0cnVlIDogZmFsc2U7DQoJCQkJ aWYgKCRhZGRJdCkgew0KCQkJCQkkdGFndG9wID0gJyc7DQoJCQkJCSRpcG1ldGggPSB0cihm TGFiZWxDZWxsKHNtZF90YWdzX2dUeHQoJ3RpdGxlJyksICcnLCAnc21kX3RhZ3MnKSAuIHRk YSgkZWR0QnRuLmJyLiRpcG1ldGgpKTsNCgkJCQkJJGdyYWJjYXRzID0gJ2pRdWVyeSgiI2xp bmstY2F0ZWdvcnkgb3B0aW9uOnNlbGVjdGVkIiknOw0KCQkJCQkkanNFbGVtID0gJHRyaWdn ZXIgPSAialF1ZXJ5KCcjbGluay1jYXRlZ29yeScpLnBhcmVudCgpIjsNCgkJCQl9DQoJCQkJ YnJlYWs7DQoJCX0NCg0KCQkvLyBBZGQgdGhlIGRyb3Bkb3duIGFuZCBqcyB0b2dnbGUvY2xl YXIgb3B0aW9ucyBpZiByZXF1aXJlZA0KCQlpZiAoJGFkZEl0KSB7DQoJCQkkcXMgPSBhcnJh eSgNCgkJCQkiZXZlbnQiID0+ICJzbWRfdGFnc191c2VycyIsDQoJCQkpOw0KDQoJCQkkcXNW YXJzID0gImluZGV4LnBocCIuam9pbl9xcygkcXMpOw0KDQoJCQlpZiAoJHF1aWNrID4gMCkg ew0KCQkJCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy Yz0ieyRqc2Rpcn17JGpzdGFpbH1qcXVlcnkuYXV0b2NvbXBsZXRlLnBhY2suanMiPjwvc2Ny aXB0Pg0KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ieyRj c2Rpcn17JGNzdGFpbH1qcXVlcnkuYXV0b2NvbXBsZXRlLmNzcyI+PC9zY3JpcHQ+DQoNCkVP SlM7DQoJCQl9DQoNCgkJCS8vIEluamVjdCBzdHlsZXMNCgkJCWVjaG8gJzxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+JyAuICRzbWRfdGFnc19zdHlsZXNbJ2xpc3RfcGFnZXMnXSAuICc8L3N0 eWxlPic7DQoNCgkJCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPg0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCXskanNFbGVtfS5wYXJlbnQoKS5hZnRlcign eyR0YWd0b3B9eyRpcG1ldGh9Jyk7DQoNCglmdW5jdGlvbiBzbWRfdGFnTGlzdCh0eXApIHsN CgkJdmFyIGdyYWJjYXRzID0gW107DQoJCXskZ3JhYmNhdHN9LmVhY2goZnVuY3Rpb24oKSB7 DQoJCQlpZiAoalF1ZXJ5KHRoaXMpLnZhbCgpICE9ICcnKSB7DQoJCQkgICBncmFiY2F0cy5w dXNoKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCQl9DQoJCX0pOw0KCQlncmFiY2F0cyA9IGdy YWJjYXRzLmpvaW4oIiwiKTsNCgkJdmFyIHNtZF9jbHIgPSAoKCd7JGNsaW5rfSc9PScwJykg PyAnMicgOiAoKGdyYWJjYXRzPT0nJykgPyAxIDogJycpKTsNCg0KCQlqUXVlcnkucG9zdCgn eyRxc1ZhcnN9JywgeyBzdGVwOiAic21kX3RhZ19wYXJlbnRsaXN0IiwgbmFtZTogJ3NtZF90 YWdfcGFyZW50JywgdHlwZTogdHlwLCBjYXQ6IGdyYWJjYXRzLCBjbHI6IHNtZF9jbHIsIGl0 ZW1pZDogInskaXRlbUlEfSIgfSwNCgkJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCQlqUXVlcnko IiNzbWRfdGFncyIpLmh0bWwoZGF0YSk7DQoJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5r IikuZW1wdHkoKTsNCgkJCQl2YXIgc21kX3RhZ3Bvb2wgPSBbXTsNCgkJCQl2YXIgc21kX3Rh Z3NlbCA9IFtdOw0KCQkJCXZhciBzbWRfdGFnbGlua3MgPSBbXTsNCgkJCQlqUXVlcnkoJyNz bWRfdGFncyBzZWxlY3Qgb3B0aW9uJykuZWFjaChmdW5jdGlvbigpIHsNCgkJCQkJdmFyIGN1 cnIgPSBqUXVlcnkodGhpcyk7DQoJCQkJCXZhciB0eHQgPSBqUXVlcnkudHJpbShjdXJyLnRl eHQoKSk7DQoJCQkJCXNtZF90YWdwb29sLnB1c2godHh0KTsNCg0KCQkJCQlpZiAoalF1ZXJ5 KCIjc21kX3RhZ3NfYnlsaW5rIikudGV4dCgpICE9ICIiKSB7DQoJCQkJCQlqUXVlcnkoIiNz bWRfdGFnc19ieWxpbmsiKS5hcHBlbmQoIiAmbWlkZG90OyAiKTsNCgkJCQkJfQ0KDQoJCQkJ CWlmIChjdXJyLmF0dHIoInNlbGVjdGVkIikgPT0gdHJ1ZSkgew0KCQkJCQkJc21kX3RhZ3Nl bC5wdXNoKHR4dCk7DQoJCQkJCQlqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsiKS5hcHBlbmQo JzxzcGFuIGNsYXNzPSJzbWRfc2VsIj4nK3R4dCsnPC9zcGFuPicpOw0KCQkJCQl9IGVsc2Ug ew0KCQkJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5rIikuYXBwZW5kKCc8c3Bhbj4nK3R4 dCsnPC9zcGFuPicpOw0KCQkJCQl9DQoJCQkJfSk7DQoNCgkJCQlqUXVlcnkoIiNzbWRfdGFn c19ieWxpbmsgc3BhbiIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQlqUXVlcnkodGhpcyku dG9nZ2xlQ2xhc3MoInNtZF9zZWwiKTsNCgkJCQkJdmFyIGx0eHQgPSBqUXVlcnkodGhpcyku dGV4dCgpOw0KCQkJCQlqUXVlcnkoIiNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uIikuZWFjaChm dW5jdGlvbigpIHsNCgkJCQkJCXZhciBjdXJyID0galF1ZXJ5KHRoaXMpOw0KCQkJCQkJaWYg KGpRdWVyeS50cmltKGN1cnIudGV4dCgpKSA9PSBsdHh0KSB7DQoJCQkJCQkJdGhpcy5zZWxl Y3RlZCA9ICF0aGlzLnNlbGVjdGVkOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQl9KTsNCg0K CQkJCWpRdWVyeSgidGV4dGFyZWFbbmFtZT0nc21kX3RhZ3NfYnl0ZXh0J10iKS52YWwoc21k X3RhZ3NlbC5qb2luKCIsICIpKTsNCg0KCQkJCWlmICh7JHF1aWNrfSA+IDApIHsNCgkJCQkJ alF1ZXJ5KCJ0ZXh0YXJlYVtuYW1lPSdzbWRfdGFnc19ieXRleHQnXSIpLmF1dG9jb21wbGV0 ZShzbWRfdGFncG9vbCwgew0KCQkJCQkJbXVsdGlwbGU6IHRydWUsDQoJCQkJCQltdXN0TWF0 Y2g6ICgoJHF1aWNrPT0yKT90cnVlOmZhbHNlKSwNCgkJCQkJCWF1dG9GaWxsOiB0cnVlDQoJ CQkJCX0pOw0KCQkJCX0NCgkJCQlqUXVlcnkoInRleHRhcmVhW25hbWU9J3NtZF90YWdzX2J5 dGV4dCddIikua2V5dXAoZnVuY3Rpb24oKSB7DQoJCQkJCXNtZF90YWdzUmVzeW5jU2VsZWN0 KHskcXVpY2t9KTsNCgkJCQl9KTsNCgkJCQlqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2soZnVu Y3Rpb24oKSB7DQoJCQkJCWpRdWVyeSgnI3NtZF90YWdzIHNlbGVjdCBvcHRpb24nKS5hdHRy KCJzZWxlY3RlZCIsICIiKTsNCgkJCQl9KTsNCgkJCQlqUXVlcnkoJyNzbWRfdG9nJykuY2xp Y2soZnVuY3Rpb24oKSB7DQoJCQkJCWpRdWVyeSgnI3NtZF90YWdzIHNlbGVjdCBvcHRpb24n KS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJCQkJdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVj dGVkOw0KCQkJCQl9KTsNCgkJCQl9KTsNCgkJCX0NCgkJKTsNCgl9DQoNCglzbWRfdGFnTGlz dCgneyRldmVudH0nKTsNCglpZiAoJ3skY2xpbmt9Jz09JzEnKSB7DQoJCXskdHJpZ2dlcn0u Y2hhbmdlKGZ1bmN0aW9uKCkgew0KCQkJc21kX3RhZ0xpc3QoJ3skZXZlbnR9Jyk7DQoJCX0p Ow0KCX0NCg0KCWZ1bmN0aW9uIHNtZF90YWdzUmVzeW5jU2VsZWN0KGx2bCkgew0KCQl2YXIg dGJUYWdzID0galF1ZXJ5KCJ0ZXh0YXJlYVtuYW1lPSdzbWRfdGFnc19ieXRleHQnXSIpLnZh bCgpLnNwbGl0KC8sXHMrPy8pOw0KCQlqUXVlcnkoIiNzbWRfdGFncyBzZWxlY3Qgb3B0aW9u IikuZWFjaChmdW5jdGlvbigpIHsNCgkJCXZhciBjdXJyID0galF1ZXJ5KHRoaXMpOw0KCQkJ aWYoalF1ZXJ5LmluQXJyYXkoalF1ZXJ5LnRyaW0oY3Vyci50ZXh0KCkpLCB0YlRhZ3MpID09 IC0xKSB7DQoJCQkJY3Vyci5hdHRyKCJzZWxlY3RlZCIsICIiKTsNCgkJCX0gZWxzZSB7DQoJ CQkJY3Vyci5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJfQ0KCQl9KTsNCgl9DQp9KTsN Cjwvc2NyaXB0Pg0KRU9KUzsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBVcGRhdGUgdGhlIHRhZ3MgdXNlZCB0YWJsZSBpZiBzb21lIHRhZ3MgaGF2 ZSBiZWVuIGFkZGVkL3NhdmVkDQpmdW5jdGlvbiBzbWRfdGFnc19zYXZlbGlzdCgkZXZlbnQs ICRzdGVwKSB7DQoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsNCgkJJGN0cmxzID0g c21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfcF9xdGFnJywgJ3NtZF90YWdfcF9p bnB1dCcsICdzbWRfdGFnX3BfbGlua2NhdCcpLCAxKTsNCgkJJHF1aWNrID0gJGN0cmxzWydz bWRfdGFnX3BfcXRhZyddWyd2YWwnXTsNCgkJJGlwdHlwID0gJGN0cmxzWydzbWRfdGFnX3Bf aW5wdXQnXVsndmFsJ107DQoJCSRjbGluayA9ICRjdHJsc1snc21kX3RhZ19wX2xpbmtjYXQn XVsndmFsJ107DQoNCgkJJGl0ZW1JRCA9IHNtZF9nZXRJRCgpOw0KCQlpZiAoJGl0ZW1JRCkg ew0KCQkJJHNhdmVTdGVwcyA9IGFycmF5KCdpbWFnZV9zYXZlJywnZmlsZV9zYXZlJywnbGlu a19zYXZlJywnbGlua19wb3N0Jyk7DQoJCQlpZiAocHMoJ3NhdmUnKSB8fCBpbl9hcnJheSgk c3RlcCwgJHNhdmVTdGVwcykpDQoJCQkJc2FmZV9kZWxldGUoU01EX1RBR1UsICdpdGVtX2lk PSInLiRpdGVtSUQuJyIgQU5EIHR5cGU9IicuJGV2ZW50LiciJyk7DQoNCgkJCSR0YWdzID0g cHMoJ3NtZF90YWdfcGFyZW50JykgPyBwcygnc21kX3RhZ19wYXJlbnQnKSA6IGFycmF5KCk7 DQoNCgkJCS8vIFZhbGlkYXRlIHRoZSBpbmNvbWluZyB0YWdzIHRvIHRob3NlIGluIHRoZSBj dXJyZW50bHkgc2VsZWN0ZWQgY2F0ZWdvcnl8aWVzDQoJCQlpZiAoJGNsaW5rKSB7DQoJCQkJ JHVzZWRDYXRzID0gKCRldmVudD09ImFydGljbGUiKSA/IGFycmF5KGdwcygnQ2F0ZWdvcnkx JyksIGdwcygnQ2F0ZWdvcnkyJykpIDogYXJyYXkoZ3BzKCdjYXRlZ29yeScpKTsNCgkJCQkk Y2F0aWRzID0gc2FmZV9jb2x1bW4oJ2lkJywgJ3R4cF9jYXRlZ29yeScsICJuYW1lIElOICgi IC5qb2luKCcsJywgcXVvdGVfbGlzdCgkdXNlZENhdHMpKS4gIikgQU5EIHR5cGU9JyRldmVu dCciKTsNCgkJCQkkdmFsaWRUYWdzID0gc2FmZV9jb2x1bW4oJ3RhZ19pZCcsIFNNRF9UQUdD LCAiY2F0X2lkIElOICgiIC5qb2luKCcsJywgcXVvdGVfbGlzdCgkY2F0aWRzKSkuICIpIik7 DQoJCQkJJGFsbG93ZWRUYWdzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkdmFsaWRUYWdz IGFzICR2YWxpZFRhZykgew0KCQkJCQkkcm93cyA9IGdldFRyZWUoc2FmZV9maWVsZCgnbmFt ZScsU01EX1RBRywiaWQ9JyIuZG9TbGFzaCgkdmFsaWRUYWcpLiInIiksICRldmVudCwgJzE9 MScsIFNNRF9UQUcpOw0KCQkJCQlmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7DQoJCQkJCQkk YWxsb3dlZFRhZ3NbXSA9ICRyb3dbJ2lkJ107DQoJCQkJCX0NCgkJCQl9DQoJCQkJJHRhZ3Mg PSBhcnJheV9pbnRlcnNlY3QoJGFsbG93ZWRUYWdzLCAkdGFncyk7DQoJCQl9DQoNCgkJCSR2 YWxzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJHRhZ3MgYXMgJHZhbCl7DQoJCQkJc2FmZV9p bnNlcnQoU01EX1RBR1UsICd0YWdfaWQgPSAiJy4kdmFsLiciLCBpdGVtX2lkPSInLiRpdGVt SUQuJyIsIHR5cGU9IicuJGV2ZW50LiciJyk7DQoJCQkJJHZhbHNbXSA9ICR2YWw7DQoJCQl9 DQoJCQkkdGFnc1RleHQgPSBwcmVnX3NwbGl0KCIvLFxzKz8vIiwgcHMoJ3NtZF90YWdzX2J5 dGV4dCcpKTsNCg0KCQkJLy8gSWYgd2UncmUgaW4gbm9uLVNUUklDVCBtb2RlIGFuZCB0aGVy ZSBhcmUgYW55IHR5cGVkIHRhZ3MgdGhhdCBhcmUgbm90IGluIHRoZSBzZWxlY3QgbGlzdCwg Y2hlY2sgdGhleSBleGlzdCBhbmQgbWFrZSBsaW5rcyB0byB0aGVtDQoJCQlpZiAoJHF1aWNr IDwgMikgew0KCQkJCSRhZGRlZCA9ICgkdmFscykgPyBzYWZlX2NvbHVtbigidGl0bGUiLCBT TURfVEFHLCAiaWQgSU4gKCciLmpvaW4oIicsJyIsJHZhbHMpLiInKSBBTkQgdHlwZT0nJGV2 ZW50JyIpIDogYXJyYXkoKTsNCgkJCQkkdGFnc1RleHQgPSBhcnJheV9kaWZmKCR0YWdzVGV4 dCwgJGFkZGVkKTsNCg0KCQkJCS8vIE9ubHkgbG9vcCBvdmVyIHRhZ3MgdGhhdCBkb24ndCBh cHBlYXIgdG8gYmUgYWxyZWFkeSBkZWZpbmVkDQoJCQkJZm9yZWFjaCgkdGFnc1RleHQgYXMg JHRhZykgew0KCQkJCQlpZiAoJHRhZyA9PSAiIikgY29udGludWU7DQoJCQkJCSRleGlzdHMg PSBzYWZlX2ZpZWxkKCdpZCcsIFNNRF9UQUcsICJuYW1lID0gJyR0YWcnIEFORCB0eXBlID0g JyRldmVudCciKTsgLy8gMXN0IGNoZWNrDQoNCgkJCQkJLy8gVGV4dGFyZWErIGlucHV0IHN5 c3RlbSBjYW4gYWRkIChsaW5rZWQpIHRhZ3Mgd2l0aCBpbXB1bml0eQ0KCQkJCQlpZiAoJGlw dHlwID09IDMgJiYgISRleGlzdHMpIHsNCgkJCQkJCSR0YWdCaXRzID0gZXhwbG9kZSgnLS0+ JywgJHRhZyk7DQoJCQkJCQlpZiAoY291bnQoJHRhZ0JpdHMpID09IDIpIHsNCgkJCQkJCQkk dGFncGFyZW50ID0gc3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkdGFnQml0c1swXSkpOw0K CQkJCQkJCSR0YWdwYXJlbnQgPSBzYWZlX2ZpZWxkKCduYW1lJywgU01EX1RBRywgIm5hbWUg PSAnJHRhZ3BhcmVudCcgQU5EIHR5cGUgPSAnJGV2ZW50JyIpOyAvLyBDaGVjayBwYXJlbnQg ZXhpc3RzIGZvciB0aGlzIHR5cGUNCgkJCQkJCQkkdGFncGFyZW50ID0gKCR0YWdwYXJlbnQg PT09IGZhbHNlKSA/ICdyb290JyA6ICR0YWdwYXJlbnQ7DQoJCQkJCQkJJHRhZ2NoaWxkID0g JHRhZ0JpdHNbMV07DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCSR0YWdwYXJlbnQgPSAncm9v dCc7DQoJCQkJCQkJJHRhZ2NoaWxkID0gJHRhZ0JpdHNbMF07DQoJCQkJCQl9DQoJCQkJCQkk c2FuaXRhZyA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JVcmwoJHRhZ2NoaWxkKSk7DQoJCQkJ CQkkYWxyZWFkeSA9IHNhZmVfZmllbGQoJ2lkJywgU01EX1RBRywgIm5hbWUgPSAnJHNhbml0 YWcnIEFORCB0eXBlID0gJyRldmVudCciKTsgLy8gQ2hlY2sgYWdhaW4gYmVjYXVzZSBwYXJl bnQtLT5jaGlsZCB3aWxsIGZhaWwgMXN0IGNoZWNrDQoJCQkJCQlpZiAoJGFscmVhZHkgPT09 IGZhbHNlKSB7DQoJCQkJCQkJJGV4aXN0cyA9IHNhZmVfaW5zZXJ0KFNNRF9UQUcsICJuYW1l PSciLiRzYW5pdGFnLiInLCB0aXRsZT0nJHRhZ2NoaWxkJywgcGFyZW50PSckdGFncGFyZW50 JywgdHlwZT0nJGV2ZW50JyIpOw0KCQkJCQkJfQ0KCQkJCQkJJGNhdGZpZWxkID0gKCRldmVu dD09ImFydGljbGUiKSA/IGdwcygnQ2F0ZWdvcnkxJykgOiBncHMoJ2NhdGVnb3J5Jyk7DQoJ CQkJCQlpZiAoJGNsaW5rICYmICRjYXRmaWVsZCAmJiAkZXhpc3RzKSB7DQoJCQkJCQkJLy8g QXNzaWduIG5ldyB0YWcgdG8gY3VycmVudCBjYXRlZ29yeSAoY2F0MSBmb3IgYXJ0aWNsZXMp DQoJCQkJCQkJJGNhdGlkID0gc2FmZV9pbnNlcnQoU01EX1RBR0MsInRhZ19pZD0nJGV4aXN0 cycsIGNhdF9pZD0oU0VMRUNUIGlkIEZST00gIi5QRlguInR4cF9jYXRlZ29yeSBXSEVSRSBu YW1lPSckY2F0ZmllbGQnIEFORCB0eXBlPSckZXZlbnQnKSIpOw0KCQkJCQkJfQ0KCQkJCQkJ cmVidWlsZF90cmVlX2Z1bGwoJGV2ZW50LCBTTURfVEFHKTsNCgkJCQkJfQ0KCQkJCQlpZiAo JGV4aXN0cykgew0KCQkJCQkJc2FmZV9pbnNlcnQoU01EX1RBR1UsICd0YWdfaWQgPSAiJy4k ZXhpc3RzLiciLCBpdGVtX2lkPSInLiRpdGVtSUQuJyIsIHR5cGU9IicuJGV2ZW50LiciJyk7 DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gSGFuZGxlIGNoYW5nZXMgdG8gdGhlIHRhZ3MgdGFibGUgZHVyaW5n IG11bHRpLWl0ZW0gZWRpdHMNCmZ1bmN0aW9uIHNtZF90YWdzX211bHRpX2VkaXQoJGV2ZW50 LCAkc3RlcCkgew0KCS8vIEluIFRYUCA0LjAuNiB0aGUgb25seSB0YWJzIHRvIGFsbG93IG11 bHRpLWVkaXRzIGFyZSB0aGUgQXJ0aWNsZSAobGlzdCkgYW5kIExpbmsgdGFicy4gQ2hlYXQg Zm9yIG5vdw0KCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXN3aXRjaCAoJGV2 ZW50KSB7DQoJCQljYXNlICJsaXN0IjoNCgkJCWNhc2UgImxpbmsiOg0KCQkJCSRtZXRob2Qg PSBwcygnZWRpdF9tZXRob2QnKTsNCgkJCQkkc2VsZWN0ZWQgPSBwcygnc2VsZWN0ZWQnKTsN CgkJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJCQkJJG1ldGhvZCA9ICJkZWxldGUiOw0KCQkJ CSRzZWxlY3RlZCA9IGFycmF5KHBzKCdpZCcpKTsNCgkJCQlicmVhazsNCgkJfQ0KDQoJCS8v ICdsaXN0JyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IGVxdWF0ZXMgdG8gYXJ0aWNsZXMNCgkJ JHR5cGUgPSAoJGV2ZW50ID09ICJsaXN0IikgPyAiYXJ0aWNsZSIgOiAkZXZlbnQ7DQoNCgkJ aWYgKCRzZWxlY3RlZCkgew0KCQkJc3dpdGNoICgkbWV0aG9kKSB7DQoJCQkJY2FzZSAiZGVs ZXRlIjoNCgkJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCRzZWxlY3RlZCBh cyAkaWQpIHsNCgkJCQkJCSRpZCA9IGFzc2VydF9pbnQoJGlkKTsNCgkJCQkJCWlmIChzYWZl X2RlbGV0ZShTTURfVEFHVSwgJ2l0ZW1faWQgPSAnLiRpZC4nIEFORCB0eXBlPSInLiR0eXBl LiciJykpIHsNCgkJCQkJCQkkaWRzW10gPSAkaWQ7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJ cmV0dXJuIGpvaW4oJywgJywgJGlkcyk7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJl dHVybiAnJzsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3Jh YiB0aGUgY3VycmVudCBhcnRpY2xlL2ltYWdlL2ZpbGUvbGluayBJRA0KZnVuY3Rpb24gc21k X2dldElEKCkgew0KCWlmKCFlbXB0eSgkR0xPQkFMU1snSUQnXSkpIHsgLy8gbmV3bHktc2F2 ZWQgaXRlbQ0KCQkkaXRlbUlEID0gaW50dmFsKCRHTE9CQUxTWydJRCddKTsNCgl9IGVsc2Ug ew0KCQkkaXRlbUlEID0gKGdwcygnSUQnKSkgPyBncHMoJ0lEJykgOiBncHMoJ2lkJyk7DQoJ fQ0KCXJldHVybiAkaXRlbUlEOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90YWdzX3RhYmxlX2V4aXN0KCRhbGw9JycpIHsNCglpZiAoJGFsbCkg ew0KCQkkdGJscyA9IGFycmF5KFNNRF9UQUcgPT4gNywgU01EX1RBR0MgPT4gMiwgU01EX1RB R1UgPT4gMyk7DQoJCSRvdXQgPSBjb3VudCgkdGJscyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFz ICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCQllY2hvICIr KyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRi bCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMgIi4kY29scy4iICsrIi5icjsNCgkJCX0NCgkJCWlm IChjb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7DQoJCQkJ JG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAoJG91dD09PTApID8gMSA6IDA7DQoJfSBl bHNlIHsNCgkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJZWNobyAiKysgVEFCTEUgIi5TTURf VEFHLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9UQUcpKS4iIENP TFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9UQUcp KTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWRkIHRhZyB0 YWJsZXMgaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkDQpmdW5jdGlvbiBzbWRfdGFnc190YWJs ZV9pbnN0YWxsKCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwgJERCOw0KDQoJJHZlcnNpb24g PSBteXNxbF9nZXRfc2VydmVyX2luZm8oKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCdd ID0gMDsNCglpZiAoJHZlcnNpb24gPCAiNC4xLjIiKSB7DQoJCSRHTE9CQUxTWyd0eHBfZXJy X2NvdW50J10rKzsNCgkJdHJpZ2dlcl9lcnJvcigic21kX3RhZ3MgcmVxdWlyZXMgTXlTUUwg djQuMS4yIG9yIGdyZWF0ZXIuIik7DQoJfSBlbHNlIHsNCgkJJHJldCA9ICcnOw0KCQkkc3Fs ID0gYXJyYXkoKTsNCgkJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAi LlBGWC5TTURfVEFHLiJgICgNCgkJCWBpZGAgaW50KDYpIE5PVCBOVUxMIGF1dG9faW5jcmVt ZW50LA0KCQkJYG5hbWVgIHZhcmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycgQ09MTEFU RSB1dGY4X2dlbmVyYWxfY2ksDQoJCQlgdHlwZWAgdmFyY2hhcig2NCkgTk9UIE5VTEwgZGVm YXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwNCgkJCWBwYXJlbnRgIHZhcmNoYXIo NjQpIE5PVCBOVUxMIGRlZmF1bHQgJycgQ09MTEFURSB1dGY4X2dlbmVyYWxfY2ksDQoJCQlg bGZ0YCBpbnQoNikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCQlgcmd0YCBpbnQoNikgTk9U IE5VTEwgZGVmYXVsdCAnMCcsDQoJCQlgdGl0bGVgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBk ZWZhdWx0ICcnIENPTExBVEUgdXRmOF9nZW5lcmFsX2NpLA0KCQkJUFJJTUFSWSBLRVkgKGBp ZGApDQoJCSkgRU5HSU5FPU15SVNBTSBQQUNLX0tFWVM9MSBBVVRPX0lOQ1JFTUVOVD01ICI7 DQoNCgkJaWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCQkkc3FsW10gPSAiSU5T RVJUIElOVE8gYCIuUEZYLlNNRF9UQUcuImAgVkFMVUVTICgxLCAncm9vdCcsICdhcnRpY2xl JywgJycsIDEsIDIsICdyb290JykiOw0KCQkJJHNxbFtdID0gIklOU0VSVCBJTlRPIGAiLlBG WC5TTURfVEFHLiJgIFZBTFVFUyAoMiwgJ3Jvb3QnLCAnbGluaycsICcnLCAxLCAyLCAncm9v dCcpIjsNCgkJCSRzcWxbXSA9ICJJTlNFUlQgSU5UTyBgIi5QRlguU01EX1RBRy4iYCBWQUxV RVMgKDMsICdyb290JywgJ2ltYWdlJywgJycsIDEsIDIsICdyb290JykiOw0KCQkJJHNxbFtd ID0gIklOU0VSVCBJTlRPIGAiLlBGWC5TTURfVEFHLiJgIFZBTFVFUyAoNCwgJ3Jvb3QnLCAn ZmlsZScsICcnLCAxLCAyLCAncm9vdCcpIjsNCgkJfQ0KDQoJCSRzcWxbXSA9ICJDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1RBR0MuImAgKA0KCQkJYHRhZ19pZGAg aW50KDYpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQkJYGNhdF9pZGAgaW50KDYpIE5PVCBO VUxMIGRlZmF1bHQgJzAnLA0KCQkJUFJJTUFSWSBLRVkgKGB0YWdfaWRgLGBjYXRfaWRgKQ0K CQkpIEVOR0lORT1NeUlTQU07ICI7DQoNCgkJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBO T1QgRVhJU1RTIGAiLlBGWC5TTURfVEFHVS4iYCAoDQoJCQlgaXRlbV9pZGAgaW50KDExKSBO T1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJCWB0YWdfaWRgIGludCg2KSBOT1QgTlVMTCBkZWZh dWx0ICcwJywNCgkJCWB0eXBlYCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnIENP TExBVEUgdXRmOF9nZW5lcmFsX2NpLA0KCQkJUFJJTUFSWSBLRVkgKGBpdGVtX2lkYCxgdGFn X2lkYCkNCgkJKSBFTkdJTkU9TXlJU0FNOyAiOw0KDQoJCWlmKGdwcygnZGVidWcnKSkgew0K CQkJZG1wKCRzcWwpOw0KCQl9DQoJCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkJJHJl dCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkJJEdM T0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4 cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQkJ ZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJCX0NCg0KCQkvLyBVcGdyYWRl IHRhYmxlIGNvbGxhdGlvbiBpZiBuZWNlc3NhcnkNCgkJJHJldCA9IHNhZmVfZmllbGQoIkNP TExBVElPTl9OQU1FIiwgIklORk9STUFUSU9OX1NDSEVNQS5DT0xVTU5TIiwgInRhYmxlX25h bWUgPSAnIi5QRlguU01EX1RBRy4iJyBBTkQgdGFibGVfc2NoZW1hID0gJyIgLiAkREItPmRi IC4gIicgQU5EIGNvbHVtbl9uYW1lID0gJ25hbWUnIik7DQoJCWlmICgkcmV0ICE9ICd1dGY4 X2dlbmVyYWxfY2knKSB7DQoJCQkkcmV0ID0gc2FmZV9hbHRlcihTTURfVEFHLCAnQ09OVkVS VCBUTyBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsNCgkJ CSRyZXQgPSBzYWZlX2FsdGVyKFNNRF9UQUdVLCAnQ09OVkVSVCBUTyBDSEFSQUNURVIgU0VU IHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsNCgkJfQ0KCX0NCg0KCWlmICgkR0xP QkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsNCgkJJG1lc3NhZ2UgPSBzbWRfdGFnc19n VHh0KCd0YmxfaW5zdGFsbGVkJyk7DQoJCXNtZF90YWdzX3ByZWZzX2luc3RhbGwoJG1lc3Nh Z2UsICRzaG93cGFuZSk7DQoJfSBlbHNlIHsNCgkJaWYgKCRzaG93cGFuZSkgew0KCQkJJG1l c3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd0Ymxfbm90X2luc3RhbGxlZCcpOw0KCQkJc21kX3Rh Z3NfcHJlZnNfc2hvdygkbWVzc2FnZSk7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0YWcgdGFibGVzIGlmIGluIGRhdGFiYXNlDQpmdW5j dGlvbiBzbWRfdGFnc190YWJsZV9yZW1vdmUoKSB7DQoJJHJldCA9ICcnOw0KCSRzcWwgPSBh cnJheSgpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCWlmIChzbWRfdGFn c190YWJsZV9leGlzdCgpKSB7DQoJCSRzcWxbXSA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAi IC5QRlguU01EX1RBRy4gIjsgIjsNCgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RT ICIgLlBGWC5TTURfVEFHVS4gIjsgIjsNCgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYgRVhJ U1RTICIgLlBGWC5TTURfVEFHQy4gIjsgIjsNCgkJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCQlk bXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCQkkcmV0ID0g c2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCQkkR0xPQkFM U1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCQllY2hv ICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJEdMT0JBTFNb J3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtZXNzYWdlID0gc21kX3RhZ3NfZ1R4dCgn dGJsX3JlbW92ZWQnKTsNCgkJc21kX3RhZ3NfcHJlZnNfcmVtb3ZlKCRtZXNzYWdlKTsNCgl9 IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF90YWdzX2dUeHQoJ3RibF9ub3RfcmVtb3ZlZCcp Ow0KCQlzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlKTsNCgl9DQp9DQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlYnVpbGQgbW9kaWZpZWQgcHJlb3JkZXIgdGFnIGxp bmtzDQpmdW5jdGlvbiBzbWRfdGFnc190YWJsZV9yZWJ1aWxkKCkgew0KCSR0eXBlcyA9IGFy cmF5KCdhcnRpY2xlJywgJ2ltYWdlJywgJ2ZpbGUnLCAnbGluaycpOw0KCWZvcmVhY2ggKCR0 eXBlcyBhcyAkdGFnX3R5cGUpIHsNCgkJcmVidWlsZF90cmVlX2Z1bGwoJHRhZ190eXBlLCBT TURfVEFHKTsNCgl9DQoJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd0YmxfcmVidWlsdCcp Ow0KCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIEFkZCBwbHVnaW4gcHJlZmVyZW5jZXMgdG8gcHJlZnMNCmZ1 bmN0aW9uIHNtZF90YWdzX3ByZWZzX2luc3RhbGwoJG1lc3NhZ2U9JycsICRzaG93cGFuZT0n MScpIHsNCglnbG9iYWwgJHNtZF90YWdfcHJlZnM7DQoNCgkkY3RyID0gc2FmZV9jb3VudCgn dHhwX3ByZWZzJywgJ2V2ZW50PSJzbWRfdGFncyInKSArIDE7DQoJZm9yZWFjaCAoJHNtZF90 YWdfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFmZXRjaCgnbmFtZScs J3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9pbnNlcnQoJ3R4 cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKS4n LCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLCBldmVudD0ic21kX3RhZ3MiLCBw b3NpdGlvbj0iJy4kY3RyLiciJyk7DQoJCQkkY3RyKys7DQoJCX0NCgl9DQoJLy8gVGlkeSB1 cCBhbnkgbGVnYWN5IHByZWZzDQoJZm9yZWFjaCAoJHNtZF90YWdfcHJlZnNbMV0gYXMgJHBy ZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScs JHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0nLmRv UXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dwYW5lKSB7DQoJ CSRtZXNzYWdlIC49IHNtZF90YWdzX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCQlzbWRf dGFnc19wcmVmc19zaG93KCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gUmVtb3ZlIHBsdWdpbiBwcmVmZXJlbmNlcyBmcm9tIHByZWZzIHRh YmxlLg0KLy8gTm90ZTogYm90aCBwYXJ0cyBvZiBzbWRfdGFnc19wcmVmcyBhcnJheSBhcmUg aXRlcmF0ZWQgb3ZlciB0byB0aWR5IHVwIGFueSBsZWdhY3kgc2V0dGluZ3MNCmZ1bmN0aW9u IHNtZF90YWdzX3ByZWZzX3JlbW92ZSgkbWVzc2FnZT0nJywgJHNob3dwYW5lPScxJykgew0K CWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCg0KCWZvcmVhY2ggKGFycmF5X21lcmdlKCRzbWRf dGFnX3ByZWZzWzBdLCRzbWRfdGFnX3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZsdCkgew0K CQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsNCgkJCSRp ZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNoKCRw cmVmKSkpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgLj0gc21k X3RhZ3NfZ1R4dCgncHJlZnNfcmVtb3ZlZCcpOw0KCQlzbWRfdGFnc19wcmVmc19zaG93KCRt ZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gU2F2 ZXMgcGx1Z2luIHByZWZlcmVuY2VzDQpmdW5jdGlvbiBzbWRfdGFnc19wcmVmc191cGRhdGUo JG1lc3NhZ2UgPSAnJykgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCgkkcG9zdCA9IGRv U2xhc2goc3RyaXBQb3N0KCkpOw0KCWZvcmVhY2ggKCRzbWRfdGFnX3ByZWZzWzBdIGFzICRw cmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0pKSB7DQoJCQlzYWZl X3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLiRwb3N0WyRwcmVmXS4iJyIsICJuYW1l ID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHByZWZzX2lkID0gMSIpOw0KCQl9DQoJfQ0K CSRtZXNzYWdlIC49IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJc21kX3RhZ3NfcHJl ZnNfc2hvdygkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gU3BsaXQgYSBtdWx0aS1jaGFyIHByZWZlcmVuY2UgdmFsdWUgaW50byBhbiBhcnJheSBv ZiBrZXlzL3ZhbHVlcy4NCi8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm90IHJl YWQgZGlyZWN0bHkgZnJvbSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5jdGlvbiAtIGlu dGVudGlvbmFsbHkNCmZ1bmN0aW9uIHNtZF90YWdzX3ByZWZfZXhwbG9kZSgkdmFsKSB7DQoJ JG9yZGVyID0gYXJyYXlfdmFsdWVzKGFycmF5KGdUeHQoJ3RhYl9saXN0JyksZ1R4dCgndGFi X2ltYWdlJyksZ1R4dCgndGFiX2ZpbGUnKSxnVHh0KCd0YWJfbGluaycpKSk7DQoJJG9ub2Zm ID0gYXJyYXlfdmFsdWVzKHByZWdfc3BsaXQoJy8vJywgJHZhbCwgLTEsIFBSRUdfU1BMSVRf Tk9fRU1QVFkpKTsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRvcmRlciBhcyAka2V5 MSA9PiAkdmFsdWUxKSB7DQoJCSRvdXRbKHN0cmluZykkdmFsdWUxXSA9ICRvbm9mZlska2V5 MV07DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIEdldCB2YWx1ZXMgZnJvbSBwcmVmcyAtIHBhc3MgZWl0aGVyIGEgc2luZ2xlIGtl eSBvciBhbiBhcnJheS4NCi8vIElmIDJuZCBhcmcgaXMgc2V0IGFuZCB0aGUgcHJlZiBkb2Vz bid0IGV4aXN0LCByZWFkIGl0IGZyb20gdGhlIHBsdWdpbiBkZWZhdWx0DQpmdW5jdGlvbiBz bWRfdGFnc19wcmVmX2dldCgka2V5cywgJGRmbHQ9MCkgew0KCWdsb2JhbCAkc21kX3RhZ19w cmVmczsNCg0KCWlmICghaXNfYXJyYXkoJGtleXMpKSB7DQoJCSRrZXlzID0gYXJyYXkoJGtl eXMpOw0KCX0NCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsZG9TbGFzaCgk a2V5cykpKTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMn LCduYW1lIElOICgnLiRwcmVma2V5cy4nKSBPUkRFUiBCWSBuYW1lJyk7DQoJJHByZWZvdXQg PSBhcnJheSgpOw0KCWZvcmVhY2goJHJzIGFzICRwcmVmKSB7DQoJCSRwcmVmb3V0WyRwcmVm WyduYW1lJ11dID0gYXJyYXlfc2xpY2UoJHByZWYsMSk7DQoJfQ0KCWlmICgkZGZsdCkgew0K CQlmb3JlYWNoICgka2V5cyBhcyAkcHJlZikgew0KCQkJaWYgKCFpc3NldCgkcHJlZm91dFsk cHJlZl0pKSB7DQoJCQkJJHByZWZvdXRbJHByZWZdID0gJHNtZF90YWdfcHJlZnNbMF1bJHBy ZWZdOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAkcHJlZm91dDsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb21tb24gYnV0dG9ucyBvbiB0aGUgYWRtaW4gcGFu ZWwNCmZ1bmN0aW9uIHNtZF90YWdzX3ByZWZzX2J1dHRvbnMoKSB7DQoJJHJldCA9IGFycmF5 ICgNCgkJJ2J0blByZWZzU2F2ZScgPT4gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4 dCgnc2F2ZScpLCAncHVibGlzaCcpLA0KCQknYnRuSW5zdGFsbFRibCcgPT4gJzxmb3JtIG1l dGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21kX3RhZ3Nf dGFibGVfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ3RibF9pbnN0YWxsX2xibCcpLCAnc21hbGxl cmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0blJlbW92ZVRibCcgPT4gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21kX3RhZ3NfdGFibGVf cmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5 KFwnJy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1 Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ3RibF9yZW1vdmVfbGJsJyksICdzbWFsbGVyYm94Jyku JzwvZm9ybT4nLA0KCQknYnRuUmVidWlsZFRibCcgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIg YWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEuJ3N0ZXA9c21kX3RhZ3NfdGFibGVfcmVidWls ZCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IHNtZF90YWdzX2dUeHQoJ3RibF9yZWJ1aWxkX2xibCcpLCAnc21hbGxlcmJveCcpLic8L2Zv cm0+JywNCgkJJ2J0bkluc3RhbGwnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i P2V2ZW50PXNtZF90YWdzJy5hLidzdGVwPXNtZF90YWdzX3ByZWZzX2luc3RhbGwiIHN0eWxl PSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFn c19nVHh0KCdwcmVmX2luc3RhbGxfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0K CQknYnRuUmVtb3ZlJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1z bWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19wcmVmc19yZW1vdmUiIHN0eWxlPSJkaXNwbGF5 OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdGFnc19nVHh0KCdw cmVmX3JlbW92ZV9sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5QcmVm cycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9c21kX3RhZ3MnLmEu J3N0ZXA9c21kX3RhZ3NfcHJlZnNfc2hvdyIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJ bnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ3ByZWZfc2hvd19sYmwn KSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5NYW5hZ2UnID0+ICc8Zm9ybSBt ZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF90YWdzJy5hLidzdGVwPXNtZF90YWdz X21hbmFnZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1 Ym1pdCcsIHNtZF90YWdzX2dUeHQoJ21hbmFnZV9sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9m b3JtPicsDQoJCSdidG5TeW5jJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9l dmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19zeW5jIiBzdHlsZT0iZGlzcGxheTpp bmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3RhZ3NfZ1R4dCgnc3lu Y19sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TeW5jR28nID0+IGZJ bnB1dCgnc3VibWl0JywgJ3NtZF90YWdzX2RvX2ltcG9ydCcsIGdUeHQoJ2dvJyksICdwdWJs aXNoJyksDQoJCSdidG5IZWxwJyA9PiAnPGEgaHJlZj0iP2V2ZW50PXBsdWdpbicuYS4nc3Rl cD1wbHVnaW5faGVscCcuYS4nbmFtZT1zbWRfdGFncyIgc3R5bGU9ImRpc3BsYXk6aW5saW5l Ij4oJy4gZ1R4dCgnaGVscCcpIC4nKTwvYT4nLA0KCQknYnRuQ3JlYXRlJyA9PiBmSW5wdXQo J3N1Ym1pdCcsICdzbWRfdGFnX2NyZWF0ZScsIGdUeHQoJ2NyZWF0ZScpLCAnc21hbGxlcmJv eCcsICcnLCAnc21kX3RhZ3Nfc3RlcD10aGlzLm5hbWU7c21kX3ByZXN1YigpJyksDQoJCSdi dG5TYXZlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGFnX3NhdmUnLCBnVHh0KCdzYXZl JyksICdzbWFsbGVyYm94JywgJycsICdzbWRfdGFnc19zdGVwPXRoaXMubmFtZTtzbWRfcHJl c3ViKCknKSwNCgkJJ2J0bkRlbGV0ZScgPT4gZklucHV0KCdzdWJtaXQnLCAnc21kX3RhZ3Nf ZGVsZXRlJywgJ8OXJywgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF90YWdzX3N0ZXA9dGhpcy5u YW1lO3NtZF9wcmVzdWIoKScpLA0KCQknYnRuU3R5bGUnID0+ICcgc3R5bGU9ImJvcmRlcjow O2hlaWdodDoyNXB4IicsDQoJKTsNCglyZXR1cm4gJHJldDsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBBIHN0dWIgdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQg YSAkbWVzc2FnZQ0KZnVuY3Rpb24gc21kX3RhZ3Nfc2V0dXAoJGV2ZW50PScnLCAkc3RlcD0n JywgJG1lc3NhZ2U9JycpIHsNCgkJc21kX3RhZ3NfcHJlZnNfc2hvdygpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERpc3BsYXkgdGhlIHByZWZzIHBhbmVsDQpm dW5jdGlvbiBzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRz bWRfdGFnX3ByZWZzOw0KDQoJcGFnZXRvcChzbWRfdGFnc19nVHh0KCdwcmVmc190aXRsZScp LCRtZXNzYWdlKTsNCglleHRyYWN0KHNtZF90YWdzX3ByZWZzX2J1dHRvbnMoKSk7DQoNCgkv LyBQcmVmcyBjaGVjaw0KCSRwcmVmc2V0ID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXlfa2V5 cygkc21kX3RhZ19wcmVmc1swXSkpOw0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRzbWRfdGFn X3ByZWZzWzBdKTsNCgkkbnVtUHJlZnMgPSBjb3VudCgkcHJlZnNldCk7DQoJJGJ0blJlYnVp bGQgPSB0ZGEoJGJ0blJlYnVpbGRUYmwsICRidG5TdHlsZSk7DQoNCgllY2hvIDw8PEVPSlMN CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCnZhciBzbWRfdGFnc19zcGVjaWFs bW9kZSA9IDA7DQoNCi8vIENvbmNhdGVuYXRlIGNoZWNrYm94IG9wdGlvbnMgZm9yIHN0b3Jh Z2UNCmZ1bmN0aW9uIHNtZF9wcmVzdWIoKSB7DQoJdmFyIHNtZF9vdXQgPSAiIjsNCglqUXVl cnkoIjpjaGVja2JveCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCXNtZF9vdXQgKz0gKHRoaXMu Y2hlY2tlZCkgPyAxIDogMDsNCgl9KTsNCglqUXVlcnkoIiNzbWRfdGFnX3BfZW5hYmxlIiku dmFsKHNtZF9vdXQpOw0KCXJldHVybiB0cnVlOw0KfQ0KDQovLyBPbmNlIHBhZ2UgZnVsbHkg bG9hZGVkLCBjaGVjayANCmZ1bmN0aW9uIHNtZF90YWdzX2tleWNoZWNrZW5kKCkgew0KCWpR dWVyeSh3aW5kb3cpLnVuYmluZCgna2V5ZG93bi5zbWRfdGFnc19zcGVjaWFsbW9kZScpOw0K CWlmIChzbWRfdGFnc19zcGVjaWFsbW9kZSA9PSAxKSB7DQoJCWpRdWVyeSgnLnNtZF90YWdz X2J1dHRvbnJvdycpLmFwcGVuZCgneyRidG5SZWJ1aWxkfScpOw0KCX0NCn0NCmpRdWVyeShm dW5jdGlvbigpIHsNCgkvLyBDaGVjayBpZiBzaGlmdCBrZXkgcHJlc3NlZCBkdXJpbmcgcGFn ZSBsb2FkIHRvIHVubG9jayBhZHZhbmNlZCBvcHRpb25zDQoJalF1ZXJ5KHdpbmRvdykuYmlu ZCgnbG9hZCcsIHNtZF90YWdzX2tleWNoZWNrZW5kKTsNCglqUXVlcnkod2luZG93KS5iaW5k KCdrZXlkb3duLnNtZF90YWdzX3NwZWNpYWxtb2RlJywgZnVuY3Rpb24oZXYpIHsNCgkJaWYo ZXYuc2hpZnRLZXkpIHsNCgkJCXNtZF90YWdzX3NwZWNpYWxtb2RlID0gMTsNCgkJCS8vIFNo dXQgb2ZmIHRoZSBoYW5kbGVyIHNvIHdlIGRvbid0IGZsb29kIHRoZSBldmVudCBzeXN0ZW0g d2l0aCBrZXkgcmVwZWF0cw0KCQkJalF1ZXJ5KHdpbmRvdykudW5iaW5kKCdrZXlkb3duLnNt ZF90YWdzX3NwZWNpYWxtb2RlJyk7DQoJCX0NCgl9KTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0pT Ow0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWlmIChzbWRfdGFnc190YWJsZV9leGlz dCgxKSkgew0KCQkvLyBUYWJsZXMgaW5zdGFsbGVkDQoJCWlmICgkbnVtUHJlZnMgPT0gJG51 bVJlcVByZWZzKSB7DQoJCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCQllY2hvIHRyKHRk YShzdHJvbmcoc21kX3RhZ3NfZ1R4dCgncHJlZnNfdGl0bGUnKSkuJyAnLiRidG5IZWxwLCAn IGNvbHNwYW49IjUiJykpOw0KCQkJZWNobyB0cigNCgkJCQlmTGFiZWxDZWxsKHNtZF90YWdz X2dUeHQoJ2NvbnRyb2wnKS4nOicpDQoJCQkJLiB0ZGEoJGJ0blJlbW92ZSwgJGJ0blN0eWxl KQ0KCQkJCS4gdGRhKCRidG5SZW1vdmVUYmwsICRidG5TdHlsZSkNCgkJCQkuIHRkYSgkYnRu U3luYywgJGJ0blN0eWxlKQ0KCQkJCS4gdGRhKCRidG5NYW5hZ2UsICRidG5TdHlsZSkNCgkJ CSwgJyBjbGFzcz0ic21kX3RhZ3NfYnV0dG9ucm93IicpOw0KCQkJZWNobyAnPGZvcm0gbWV0 aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncycuYS4nc3RlcD1zbWRfdGFnc19w cmVmc191cGRhdGUiIG9uc3VibWl0PSJyZXR1cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJCSRj dHIgPSAxOw0KCQkJZm9yZWFjaCAoJHByZWZzZXQgYXMgJHBuYW0gPT4gJHBhcnIpIHsNCgkJ CQkkcHZhbCA9ICRwYXJyWyd2YWwnXTsNCgkJCQkkb3V0ID0gKGlzc2V0KCRzbWRfdGFnX3By ZWZzWzJdWyRjdHJdKSkgPyB0cih0ZGNzKGhlZCgkc21kX3RhZ19wcmVmc1syXVskY3RyXSwg MiwgJyBjbGFzcz0icHJlZi1oZWFkaW5nIicpLCA0KSkgOiAnJzsNCgkJCQkkbGFiZWwgPSAn PGxhYmVsIGZvcj0iJy4kcG5hbS4nIj4nLnNtZF90YWdzX2dUeHQoJHBuYW0pLic6PC9sYWJl bD4nOw0KCQkJCSRvdXQgLj0gdGRhKCRsYWJlbCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmln aHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOw0KDQoJCQkJc3dpdGNoKCRwbmFtKSB7 DQoJCQkJCWNhc2UgInNtZF90YWdfcF9lbmFibGUiOg0KCQkJCQkJJG9wdGlvbnMgPSBzbWRf dGFnc19wcmVmX2V4cGxvZGUoJHB2YWwpOw0KCQkJCQkJJG91dCAuPSAnPHRkIGlkPSJzbWRf dGFnc19lbmFibGVfaG9sZGVyIiBjb2xzcGFuPSIzIj4nOw0KCQkJCQkJZm9yZWFjaCAoJG9w dGlvbnMgYXMgJG9wdCA9PiAkb25vZmYpIHsNCgkJCQkJCQkkb3V0IC49ICc8bGFiZWw+Jy4k b3B0Lic8L2xhYmVsPicgLiBjaGVja2JveCgiZW5hYmxlIi4kb3B0LCAxLCAkb25vZmYpIC4g JyZuYnNwOyZuYnNwOyc7DQoJCQkJCQl9DQoJCQkJCQkkb3V0IC49ICc8L3RkPic7DQoJCQkJ CQkkb3V0IC49IGZJbnB1dCgnaGlkZGVuJywgJ3NtZF90YWdfcF9lbmFibGUnLCBpbXBsb2Rl KCRvcHRpb25zKSwnJywnJywnJywnJywnJywnc21kX3RhZ19wX2VuYWJsZScpOw0KCQkJCQkJ YnJlYWs7DQoJCQkJCWNhc2UgInNtZF90YWdfcF9zaXplIjoNCgkJCQkJY2FzZSAic21kX3Rh Z190X2NvbHMiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfaGlsaXRlIjoNCgkJCQkJY2FzZSAi c21kX3RhZ190X2hvdmVyIjoNCgkJCQkJY2FzZSAic21kX3RhZ190X2luZGVudCI6DQoJCQkJ CWNhc2UgInNtZF90YWdfdF9tZGVsaW0iOg0KCQkJCQljYXNlICJzbWRfdGFnX3VfcG5hbSI6 DQoJCQkJCWNhc2UgInNtZF90YWdfdV9wdHlwIjoNCgkJCQkJY2FzZSAic21kX3RhZ191X3Nl YyI6DQoJCQkJCQkkb3V0IC49IHRhZyhmSW5wdXQoJ3RleHQnLCAkcG5hbSwgJHB2YWwsICdl ZGl0JywgJycsICcnLCAyMCwgJycsICRwbmFtKSwgJ3RkJywgJyBjb2xzcGFuPSIzIicpOw0K CQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgInNtZF90YWdfcF9xdHBhdGgiOg0KCQkJCQljYXNl ICJzbWRfdGFnX3BfcXRzdHlsIjoNCgkJCQkJCSRvdXQgLj0gdGFnKGZJbnB1dCgndGV4dCcs ICRwbmFtLCAkcHZhbCwgJ2VkaXQnLCAnJywgJycsIDMwLCAnJywgJHBuYW0pLCAndGQnLCAn IGNvbHNwYW49IjMiJyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ190X2F1 dG8iOg0KCQkJCQkJJG91dCAuPSB0ZGNzKG9ub2ZmUmFkaW8oJHBuYW0sICRwdmFsKSwzKTsN CgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJzbWRfdGFnX3RfY29sc29yZCI6DQoJCQkJCQkk b3V0IC49IHRkY3MocmFkaW8oJHBuYW0sMCwoKCRwdmFsPT0wKT8xOjApKS5zbWRfdGFnc19n VHh0KCdieV9jb2x1bW4nKS4iICIgLiByYWRpbygkcG5hbSwxLCgoJHB2YWw9PTEpPzE6MCkp LnNtZF90YWdzX2dUeHQoJ2J5X3JvdycpLiIgIiwzKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQlj YXNlICJzbWRfdGFnX3RfZGVsdHJlZSI6DQoJCQkJCQkkb3V0IC49IHRkY3MocmFkaW8oJHBu YW0sMCwoKCRwdmFsPT0wKT8xOjApKS5zbWRfdGFnc19nVHh0KCdjaGlsZHJlbl9wcm8nKS4i ICIgLiByYWRpbygkcG5hbSwxLCgoJHB2YWw9PTEpPzE6MCkpLnNtZF90YWdzX2dUeHQoJ2No aWxkcmVuX2RlbCcpLiIgIiwzKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJzbWRfdGFn X3RfY291bnQiOg0KCQkJCQljYXNlICJzbWRfdGFnX3RfZGVsdXNlZCI6DQoJCQkJCWNhc2Ug InNtZF90YWdfdF9lbnJlcCI6DQoJCQkJCWNhc2UgInNtZF90YWdfcF9saW5rY2F0IjoNCgkJ CQkJCSRvdXQgLj0gdGRjcyh5ZXNub1JhZGlvKCRwbmFtLCAkcHZhbCksMyk7DQoJCQkJCQli cmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ190X2FzdGFydCI6DQoJCQkJCQkkb3V0IC49IHRk Y3MocmFkaW8oJHBuYW0sMCwoKCRwdmFsPT0wKT8xOjApKS5zbWRfdGFnc19nVHh0KCdwcmVm c19wYW5lJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5zbWRfdGFn c19nVHh0KCd0YWdzX3BhbmUnKS4iICIsMyk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAi c21kX3RhZ19wX3F0YWciOg0KCQkJCQkJJG91dCAuPSB0ZGNzKHJhZGlvKCRwbmFtLDAsKCgk cHZhbD09MCk/MTowKSkuZ1R4dCgnb2ZmJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFs PT0xKT8xOjApKS5zbWRfdGFnc19nVHh0KCdhY19zdGQnKS4iICIuIiAiIC4gcmFkaW8oJHBu YW0sMiwoKCRwdmFsPT0yKT8xOjApKS5zbWRfdGFnc19nVHh0KCdhY19zdHInKS4iICIsMyk7 DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAic21kX3RhZ19wX2lucHV0IjoNCgkJCQkJCSRv dXQgLj0gdGRjcyhyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLnNtZF90YWdzX2dU eHQoJ3NlbF9saXN0JykuIiAiLiByYWRpbygkcG5hbSwxLCgoJHB2YWw9PTEpPzE6MCkpLnNt ZF90YWdzX2dUeHQoJ3RleHRsaXN0JykuIiAiLiByYWRpbygkcG5hbSwyLCgoJHB2YWw9PTIp PzE6MCkpLnNtZF90YWdzX2dUeHQoJ3RleHRib3gnKS4iICIuIHJhZGlvKCRwbmFtLDMsKCgk cHZhbD09Myk/MTowKSkuc21kX3RhZ3NfZ1R4dCgndGV4dGJveHBsdXMnKS4iICIsMyk7DQoJ CQkJCQlicmVhazsNCgkJCQl9DQoJCQkJZWNobyB0cigkb3V0KTsNCgkJCQkkY3RyKys7DQoJ CQl9DQoJCQllY2hvIHRyKHRkYSgkYnRuUHJlZnNTYXZlLCAkYnRuU3R5bGUpKTsNCgkJCWVj aG8gJzwvZm9ybT4nOw0KCQl9IGVsc2UgaWYgKCRudW1QcmVmcyA+IDAgJiYgJG51bVByZWZz IDwgJG51bVJlcVByZWZzKSB7DQoJCQkvLyBQcmVmcyBwb3NzaWJseSBjb3JydXB0LCBvciBw bHVnaW4gdXBkYXRlZA0KCQkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF90YWdzX2dUeHQoJ3By ZWZzX3NvbWUnKSkuYnIuYnINCgkJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfZXhw bGFpbicpLmJyLmJyDQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX29wdHMxJyks ICcgY29sc3Bhbj0iMiInKQ0KCQkJKTsNCgkJCWVjaG8gdHIoDQoJCQkJdGRhKCRidG5SZW1v dmUsJGJ0blN0eWxlKQ0KCQkJCS4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpDQoJCQkp Ow0KCQl9IGVsc2Ugew0KCQkJLy8gUHJlZnMgbm90IGluc3RhbGxlZA0KCQkJZWNobyB0cih0 ZGEoc21kX3RhZ3NfZ1R4dCgncHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIi JykpOw0KCQkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQl9DQoJ fSBlbHNlIHsNCgkJLy8gVGFibGVzIG5vdCBpbnN0YWxsZWQNCgkJZWNobyB0cih0ZGEoc3Ry b25nKHNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfdGJsJykpLmJyLmJyDQoJCQkJLnNtZF90 YWdzX2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dU eHQoJ3ByZWZzX3NvbWVfb3B0czInKSwgJyBjb2xzcGFuPSIyIicpDQoJCSk7DQoJCWVjaG8g dHIodGRhKCRidG5JbnN0YWxsVGJsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJs ZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIE1hbmFnZSB0YWdz IGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIGNhdGVnb3JpZXMgdGFiDQpmdW5jdGlvbiBzbWRf dGFnc19tYW5hZ2UoJG1lc3NhZ2U9JycsICRyZXBvcnQ9JycpIHsNCglnbG9iYWwgJHNtZF90 YWdfcHJlZnMsICRzbWRfdGFnc19zdHlsZXM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShh cnJheSgnc21kX3RhZ19uYW1lJywgJ3NtZF90YWdfdGl0bGUnLCAnc21kX3RhZ19wYXJlbnQn LCAnc21kX3RhZ19jYXQnLCAnc21kX3RhZ190eXBlJywgJ3NtZF90YWdfaWQnKSkpKTsNCglw YWdldG9wKHNtZF90YWdzX2dUeHQoJ21hbmFnZV9sYmwnKSwkbWVzc2FnZSk7DQoJZXh0cmFj dChzbWRfdGFnc19wcmVmc19idXR0b25zKCkpOw0KDQoJLy8gUHJlZnMgY2hlY2sNCgkkcHJl ZnNldCA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5X2tleXMoJHNtZF90YWdfcHJlZnNbMF0p KTsNCgkkbnVtUmVxUHJlZnMgPSBjb3VudCgkc21kX3RhZ19wcmVmc1swXSk7DQoJJG51bVBy ZWZzID0gY291bnQoJHByZWZzZXQpOw0KDQoJJHN0eWxlcmVwcyA9IGFycmF5KA0KCQkne2hv dn0nID0+ICRwcmVmc2V0WydzbWRfdGFnX3RfaG92ZXInXVsndmFsJ10sDQoJCSd7Y3VyfScg PT4gJHByZWZzZXRbJ3NtZF90YWdfdF9oaWxpdGUnXVsndmFsJ10sDQoJKTsNCg0KCSR0eXBl cyA9IGFycmF5KA0KCQknYXJ0aWNsZScgPT4gdWNmaXJzdChndHh0KCdhcnRpY2xlJykpLA0K CQknaW1hZ2UnID0+IGd0eHQoJ3RhZ19pbWFnZScpLA0KCQknZmlsZScgPT4gZ3R4dCgnZmls ZScpLA0KCQknbGluaycgPT4gZ3R4dCgndGFnX2xpbmsnKSwNCgkJKTsNCg0KCS8vIE1ha2Ug dXAgdGhlIHJhZGlvIGJ1dHRvbnMNCgkkc21kX3RhZ190eXBlID0gKCFlbXB0eSgkc21kX3Rh Z190eXBlKSkgPyAkc21kX3RhZ190eXBlIDogJ2FydGljbGUnOw0KDQoJJHJhZGlvcyA9IGFy cmF5KCk7DQoJZm9yZWFjaCAoJHR5cGVzIGFzICRrZXkgPT4gJHZhbCkgew0KCQkkaWQgPSAn c21kX3RhZ3NfdHlwZS0nLiRrZXk7DQoJCSRyYWRpb3NbXSA9IG4udC5yYWRpbygnc21kX3Rh Z3NfdHlwZScsICRrZXksICgkc21kX3RhZ190eXBlID09ICRrZXkpID8gMSA6IDAsICRpZCku DQoJCQkJJzxsYWJlbCBmb3I9IicuJGlkLiciPicuJHZhbC4nPC9sYWJlbD4nOw0KCX0NCgkk cmFkaW9zID0gam9pbihzcC5zcCwgJHJhZGlvcykubjsNCg0KCS8vIENyZWF0ZSBhbGwgdGhl IGxpc3RzIGJ1dCBoaWRlIHRoZW0gd2l0aCBDU1MuIGpRdWVyeSB0YWtlcyBvdmVyIGFuZCBz d2l0Y2hlcyBiZXR3ZWVuIHRoZW0gb24gZGVtYW5kDQoJaWYgKHNtZF90YWdzX3RhYmxlX2V4 aXN0KDEpICYmICRudW1QcmVmcyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJLy8gSW5qZWN0IHN0 eWxlcw0KCQllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPic7DQoJCWVjaG8gc3RydHIo JHNtZF90YWdzX3N0eWxlc1sndGFnX21hbmFnZXInXSwgJHN0eWxlcmVwcyk7DQoJCWVjaG8g JHNtZF90YWdzX3N0eWxlc1sncmVwb3J0J107DQoJCWVjaG8gJzwvc3R5bGU+JzsNCgkJDQoJ CS8vIFNhbml0aXplIHRoZSBtdWx0aS10YWcgZGVsaW1pdGVyDQoJCSRtZGVsaW0gPSBzdWJz dHIoJHByZWZzZXRbJ3NtZF90YWdfdF9tZGVsaW0nXVsndmFsJ10sIDAsIDEpOw0KCQkkbWRl bGltID0gKCRtZGVsaW0gPT0gJycpID8gJycgOiAnXFwnLiRtZGVsaW07DQoNCgkJJGNvbE9w dHMgPSBkb19saXN0KCRwcmVmc2V0WydzbWRfdGFnX3RfY29scyddWyd2YWwnXSwgJzonKTsN CgkJJGxheW91dCA9ICgkY29sT3B0c1swXSA9PSAnMCcgfHwgJGNvbE9wdHNbMF0gPT0gJ2xp c3QnKSA/ICdsaXN0JyA6ICgoJGNvbE9wdHNbMF0gPT0gJ2dyb3VwJykgPyAnbGlzdGdycCcg OiAndGFibGUnKTsNCgkJJGNvbE9yZGVyID0gKCRwcmVmc2V0WydzbWRfdGFnX3RfY29sc29y ZCddWyd2YWwnXSA9PSAwKSA/ICdieWNvbCcgOiAnYnlyb3cnOw0KCQkkd3JhcHRhZyA9ICRs YXlvdXQuJzonOw0KCQlpZiAoJGxheW91dCA9PSAndGFibGUnKSB7DQoJCQkkdGFnQ29scyA9 IChpc19udW1lcmljKCRjb2xPcHRzWzBdKSAmJiAkY29sT3B0c1swXSA+IDApID8gJGNvbE9w dHNbMF0gOiAxOw0KCQkJJHdyYXB0YWcgLj0gJHRhZ0NvbHM7DQoJCQkkc2VsID0gJ3RkJzsN CgkJfSBlbHNlIHsNCgkJCSR3cmFwdGFnIC49IChpc3NldCgkY29sT3B0c1sxXSkpID8gJGNv bE9wdHNbMV0gOiAnMCc7DQoJCQkkc2VsID0gJ2xpJzsNCgkJfQ0KCQkkd3JhcHRhZyAuPSAn OmNvbHM6Jy4kY29sT3JkZXI7DQoJCSRjb3VudHMgPSAkcHJlZnNldFsnc21kX3RhZ190X2Nv dW50J11bJ3ZhbCddOw0KCQkkY2xpbmsgPSAkcHJlZnNldFsnc21kX3RhZ19wX2xpbmtjYXQn XVsndmFsJ107DQoJCSRzaG93cmVwID0gJHJlcG9ydCAmJiAkcHJlZnNldFsnc21kX3RhZ190 X2VucmVwJ11bJ3ZhbCddOw0KDQogCQlmb3JlYWNoIChhcnJheV9rZXlzKCR0eXBlcykgYXMg JHR5cGUpIHsNCgkJCSRkaXZ0YWdpZCA9ICJzbWRfdGFnc19ncnBfIi4kdHlwZTsNCgkJCSR0 YWdsaXN0ID0gInRhZ3NfIi4kdHlwZTsNCgkJCSQkdGFnbGlzdCA9IHNtZF90YWdfbGlzdF9h ZG0oDQoJCQkJYXJyYXkoDQoJCQkJCSJ0eXBlIiA9PiAkdHlwZSwNCgkJCQkJIndyYXB0YWci ID0+ICR3cmFwdGFnLA0KCQkJCQkiY291bnQiID0+ICRjb3VudHMsDQoJCQkJCSJpbmRlbnQi ID0+ICRwcmVmc2V0WydzbWRfdGFnX3RfaW5kZW50J11bJ3ZhbCddDQoJCQkJKQ0KCQkJKTsN Cg0KCQkJLy9UT0RPOiBGaW5kIGEgd2F5IHRvIGFkZCB0aGUgZGl2dGFnaWQgb25seSB3aGVu IG5lZWRlZC4gQXQgdGhlIG1vbWVudCBpdCBhcHBlYXJzIHR3aWNlIG9uIHRoZSBwYWdlIChp bGxlZ2FsIERPTSkNCgkJCSR0YWdvdXRbJHR5cGVdID0gJzxkaXYgaWQ9IicuJGRpdnRhZ2lk LiciPicuJCR0YWdsaXN0Lic8L2Rpdj4nOw0KCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2hp ZGRlbiI+Jy4kdGFnb3V0WyR0eXBlXS4nPC9kaXY+JzsNCgkJfQ0KDQoJCSRxcyA9IGFycmF5 KA0KCQkJImV2ZW50IiA9PiAic21kX3RhZ3MiLA0KCQkpOw0KDQoNCgkJJHFzVmFycyA9ICJp bmRleC5waHAiLmpvaW5fcXMoJHFzKTsNCgkJJGNvdW50X2xibCA9IHNtZF90YWdzX2dUeHQo J2NvdW50X2xibCcpOw0KDQoJCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph dmFzY3JpcHQiPg0KCXZhciBzbWRfdGFnc19zdGVwID0gJyc7DQoNCgkvLyBQYWdlIGluaXRp YWxpc2F0aW9uDQoJalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCQkvLyBJbmRpY2F0ZSBwYXJlbnQg bGlzdCBpcyBsb2FkaW5nDQoJCWpRdWVyeSgiLnNtZF90YWdzX3Nob3dwYXJzIikuYWpheFN0 YXJ0KGZ1bmN0aW9uKCkgew0KCQkJalF1ZXJ5KHRoaXMpLmZhZGVUbygibm9ybWFsIiwgMC4z Myk7DQoJCX0pLmFqYXhTdG9wKGZ1bmN0aW9uKCkgew0KCQkJalF1ZXJ5KHRoaXMpLmZhZGVU bygibm9ybWFsIiwgMSk7DQoJCX0pOw0KDQoJCS8vIFN3aXRjaCBiZXR3ZWVuIHR5cGVzDQoJ CWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfdHlwZSddIikuY2hhbmdlKGZ1bmN0aW9u ICgpIHsNCgkJCXZhciBzbWRfbmV3Y29udGVudCA9IGpRdWVyeSgiI3NtZF90YWdzX2dycF8i K2pRdWVyeSh0aGlzKS52YWwoKSkuaHRtbCgpOw0KCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdz bWRfdGFnX2lkJ10iKS52YWwoJycpOyAvLyBDaGFuZ2luZyB0eXBlIGZvcmNlcyBhbnkgJ3Nh dmUnIHRvIHRyaWdnZXIgdGhlICdjcmVhdGUnIGJlaGF2aW91cg0KCQkJalF1ZXJ5KCIuc21k X3RhZ3Nfc2hvd2xpc3QiKS5odG1sKHNtZF9uZXdjb250ZW50KTsNCgkJCXZhciBuYW0gPSBq UXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfb25hbWUnXSIpLnZhbCgpOw0KCQkJdmFyIHRp ZCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19pZCddIikudmFsKCk7DQoJCQl2YXIg dHlwID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tlZCIpLnZh bCgpOw0KCQkJdmFyIHBhciA9ICdyb290JzsNCgkJCXZhciBjYXQgPSAnJzsNCg0KCQkJalF1 ZXJ5KCIuc21kX3RhZ3Nfc2hvd2xpc3QgeyRzZWx9IHNwYW5bbmFtZT0nc21kX3RhZ25hbSdd IikuZWFjaChmdW5jdGlvbigpIHsNCgkJCQlpZiAoalF1ZXJ5KHRoaXMpLnRleHQoKSA9PSBu YW0pIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCdzbWRfY3VycmVu dCcpOw0KCQkJCQlwYXIgPSBqUXVlcnkodGhpcykuc2libGluZ3MoIjplcSgyKSIpLnRleHQo KTsNCgkJCQkJY2F0ID0galF1ZXJ5KHRoaXMpLnNpYmxpbmdzKCI6ZXEoMykiKS50ZXh0KCk7 DQoJCQkJCXRpZCA9ICh0aWQgPT0gJycpID8galF1ZXJ5KHRoaXMpLnNpYmxpbmdzKCI6ZXEo MCkiKS50ZXh0KCkgOiB0aWQ7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLnBh cmVudCgpLnJlbW92ZUNsYXNzKCdzbWRfY3VycmVudCcpOw0KCQkJCX0NCgkJCX0pOw0KDQoJ CQkvLyBSZS1pbnNlcnQgdGhlIElEIGlmIHRoaXMgbmFtZWQgaXRlbSBleGlzdHMgaW4gdGhl IG5ldyBsaXN0DQoJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfaWQnXSIpLnZhbCh0 aWQpOw0KDQoJCQkvLyBVcGRhdGUgdGhlIFVJDQoJCQlzbWRfcGFyZW50SGFuZGxlcihuYW0s IHR5cCwgdGlkLCBwYXIpOw0KCQkJc21kX2NhdEhhbmRsZXIoY2F0LCB0eXApOw0KCQkJalF1 ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSciK2NhdCsiJ10i KS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJc21kX2F1dG9mb2N1cygpOw0KCQkJc21k X2NlbGxIYW5kbGVyKCk7DQoJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX3R5cGUn XSIpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCWlmIChqUXVlcnkodGhpcykudmFsKCkgPT0g dHlwKSB7DQoJCQkJCWpRdWVyeSh0aGlzKS5uZXh0KCkuYWRkQ2xhc3MoJ3NtZF9jdXJyZW50 Jyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLm5leHQoKS5yZW1vdmVDbGFz cygnc21kX2N1cnJlbnQnKTsNCgkJCQl9DQoJCQl9KTsNCgkJfSk7DQoNCgkJLy8gQ2FsbCB0 aGUgb25jaGFuZ2UgaGFuZGxlciBmb3IgdGhlIGN1cnJlbnQgdHlwZQ0KCQlqUXVlcnkoImlu cHV0W25hbWU9J3NtZF90YWdzX3R5cGUnXTpjaGVja2VkIikuY2hhbmdlKCk7DQoNCgkJLy8g QXV0b3RhZyAtIFRPRE86IGZvcmVpZ24gY2hhcmFjdGVyIGR1bWJkb3duIGZvciBVUkkNCgkJ aWYgKHskcHJlZnNldFsnc21kX3RhZ190X2F1dG8nXVsndmFsJ119KSB7DQoJCQlzcGNSRSA9 IC9ccy9nOw0KCQkJYmFkUkUgPSAvW15hLXpBLVowLTlfXC17JG1kZWxpbX1dL2c7DQoJCQlq UXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS5rZXl1cChmdW5jdGlv bigpIHsNCgkJCQl0YWduYW1lID0galF1ZXJ5KHRoaXMpLnZhbCgpLnJlcGxhY2Uoc3BjUkUs ICctJykucmVwbGFjZShiYWRSRSwgJycpLnRvTG93ZXJDYXNlKCk7DQoJCQkJalF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfdGFnc19uZXduYW1lJ10iKS52YWwodGFnbmFtZSk7DQoJCQl9KTsN CgkJfQ0KCQkvLyBCaW5kIEVudGVyIGtleSB0byBjcmVhdGUNCgkJalF1ZXJ5KCJpbnB1dFtu YW1lXj0nc21kX3RhZyddIikua2V5dXAoZnVuY3Rpb24oZXYpIHsNCgkJCWlmIChldi5rZXlD b2RlID09IDEzKSB7DQoJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2NyZWF0ZSdd IikuY2xpY2soKTsNCgkJCX0NCgkJfSk7DQoNCgkJLy8gUHJlcGFyZSB0aGUgbGl2ZSBmaWx0 ZXINCgkJalF1ZXJ5KCcuc21kX3RhZ19saXN0X2FkbSB7JHNlbH0nKS5hZGRDbGFzcygndmlz aWJsZScpOw0KDQoJCWpRdWVyeSgnI3NtZF90YWdmaWx0ZXInKS5rZXl1cChmdW5jdGlvbihl dmVudCkgew0KCQkJLy8gaWYgZXNjIGlzIHByZXNzZWQgb3Igbm90aGluZyBpcyBlbnRlcmVk DQoJCQlpZiAoZXZlbnQua2V5Q29kZSA9PSAyNyB8fCBqUXVlcnkodGhpcykudmFsKCkgPT0g JycpIHsNCgkJCQlqUXVlcnkodGhpcykudmFsKCcnKTsNCgkJCQlqUXVlcnkoJy5zbWRfdGFn X2xpc3RfYWRtIHskc2VsfScpLnJlbW92ZUNsYXNzKCd2aXNpYmxlJykuc2hvdygpLmFkZENs YXNzKCd2aXNpYmxlJyk7DQoJCQkJalF1ZXJ5KCIjc21kX3RhZ19maWx0ZXJfY291bnQiKS5l bXB0eSgpOw0KCQkJfSBlbHNlIHsNCgkJCQljdXJyT3B0ID0galF1ZXJ5KCcjc21kX3RhZ19m aWx0X3JhZGlvcyA6cmFkaW86Y2hlY2tlZCcpLnZhbCgpOw0KCQkJCXN1YmZpbHQgPSAoY3Vy ck9wdCA9PSAnc21kX2FsbCcpID8gJycgOiBjdXJyT3B0Ow0KCQkJCXNtZF90YWdfZmlsdGVy KCcuc21kX3RhZ19saXN0X2FkbSB7JHNlbH0nLCBqUXVlcnkodGhpcykudmFsKCksIHN1YmZp bHQpOw0KCQkJfQ0KCQl9KTsNCgkJLy8gVHJpZ2dlciB0aGUgZmlsdGVyIGlmIHRoZSByYWRp byBidXR0b25zIGFyZSBjbGlja2VkDQoJCWpRdWVyeSgnI3NtZF90YWdfZmlsdF9yYWRpb3Mg OnJhZGlvJykuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQkJalF1ZXJ5KCcjc21kX3RhZ2ZpbHRl cicpLmtleXVwKCkuZm9jdXMoKTsNCgkJfSk7DQoJCWlmICgneyRzaG93cmVwfScpIHsNCgkJ CXNtZF90YWdzX3RvZ2dsZV9yZXBvcnQoKTsNCgkJfQ0KCX0pOw0KDQoJLy8gS2VlcCB0cmFj ayBvZiB3aGljaCB0YWcgaGFzIGJlZW4gY2xpY2tlZCBzbyBpdCBjYW4gYmUgZWRpdGVkL3Vw ZGF0ZWQNCglmdW5jdGlvbiBzbWRfY2VsbEhhbmRsZXIoKSB7DQoJCS8vIENlbGwgaGlnaGxp Z2h0cw0KCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlzdCB7JHNlbH0iKS5lYWNoKGZ1bmN0 aW9uKCkgew0KCQkJaWYgKGpRdWVyeS50cmltKGpRdWVyeSh0aGlzKS50ZXh0KCkpICE9ICIi KSB7DQoJCQkJalF1ZXJ5KHRoaXMpLmhvdmVyKA0KCQkJCQlmdW5jdGlvbiAoKSB7DQoJCQkJ CQlqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NtZF9ob3ZlcicpOw0KCQkJCQl9LA0KCQkJCQlm dW5jdGlvbiAoKSB7DQoJCQkJCQlqUXVlcnkodGhpcykucmVtb3ZlQ2xhc3MoJ3NtZF9ob3Zl cicpOw0KCQkJCQl9DQoJCQkJKQ0KCQkJCS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJdmFy IG5hbSA9IGpRdWVyeSh0aGlzKS5jaGlsZHJlbigiOmVxKDApIikudGV4dCgpOw0KCQkJCQl2 YXIgdGlkID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMSkiKS50ZXh0KCk7DQoJCQkJ CXZhciB0dGwgPSBqUXVlcnkodGhpcykuY2hpbGRyZW4oIjplcSgyKSIpLnRleHQoKTsNCgkJ CQkJdmFyIHBhciA9IGpRdWVyeSh0aGlzKS5jaGlsZHJlbigiOmVxKDMpIikudGV4dCgpOw0K CQkJCQl2YXIgY2F0ID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoNCkiKS50ZXh0KCk7 DQoJCQkJCXZhciB0eXAgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX3R5cGUnXTpj aGVja2VkIikudmFsKCkNCgkJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX29uYW1l J10iKS52YWwobmFtKTsNCgkJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXdu YW1lJ10iKS52YWwobmFtKTsNCgkJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2lk J10iKS52YWwodGlkKTsNCgkJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXd0 aXRsZSddIikudmFsKHR0bCk7DQoJCQkJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtjYXQgc2Vs ZWN0IG9wdGlvblt2YWx1ZT0nIitjYXQrIiddIikuYXR0cigic2VsZWN0ZWQiLCB0cnVlKTsN CgkJCQkJc21kX3BhcmVudEhhbmRsZXIobmFtLCB0eXAsIHRpZCwgcGFyKTsNCgkJCQkJalF1 ZXJ5KCIuc21kX3RhZ3Nfc2hvd2xpc3QgJHtzZWx9IikucmVtb3ZlQ2xhc3MoJ3NtZF9jdXJy ZW50Jyk7DQoJCQkJCWpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX2N1cnJlbnQnKTsNCgkJ CQkJc21kX2F1dG9mb2N1cygpOw0KCQkJCX0pOw0KCQkJfQ0KCQl9KTsNCgl9DQoNCgkvLyBB c2sgVFhQIGZvciB0aGUgcGFyZW50IGRyb3Bkb3duIHdpdGhvdXQgY2hpbGQgZW50cmllcw0K CWZ1bmN0aW9uIHNtZF9wYXJlbnRIYW5kbGVyKG5hbSwgdHlwLCB0aWQsIHBhcikgew0KCQlq UXVlcnkucG9zdCgneyRxc1ZhcnN9JywgeyBzdGVwOiAic21kX3RhZ19wYXJlbnRsaXN0Iiwg bmFtZTogbmFtLCB0eXBlOiB0eXAsIGlkOiB0aWQsIGNscjogJzInIH0sDQoJCQlmdW5jdGlv bihkYXRhKSB7DQoJCQkJalF1ZXJ5KCIuc21kX3RhZ3Nfc2hvd3BhcnMiKS5odG1sKGRhdGEp Ow0KCQkJCWlmIChwYXIgPT0gInJvb3QiIHx8IHBhciA9PSAiIikgew0KCQkJCQlqUXVlcnko Ii5zbWRfdGFnc19zaG93cGFycyBzZWxlY3Qgb3B0aW9uOmZpcnN0IikuYXR0cigic2VsZWN0 ZWQiLCB0cnVlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93 cGFycyBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSciK3BhcisiJ10iKS5hdHRyKCJzZWxlY3RlZCIs IHRydWUpOw0KCQkJCX0NCgkJCX0NCgkJKTsNCgl9DQoNCgkvLyBBc2sgVFhQIGZvciB0aGUg Y2F0ZWdvcnkgZHJvcGRvd24NCglmdW5jdGlvbiBzbWRfY2F0SGFuZGxlcihjYXQsIHR5cCkg ew0KCQlqUXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAwLjMz KTsNCgkJalF1ZXJ5LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdfY2F0bGlz dCIsIG5hbWU6IGNhdCwgdHlwZTogdHlwIH0sDQoJCQlmdW5jdGlvbihkYXRhKSB7DQoJCQkJ alF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCIpLmh0bWwoZGF0YSk7DQoJCQkJaWYgKGNhdCA9 PSAicm9vdCIgfHwgY2F0ID09ICIiKSB7DQoJCQkJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtj YXQgc2VsZWN0IG9wdGlvbjpmaXJzdCIpLmF0dHIoInNlbGVjdGVkIiwgdHJ1ZSk7DQoJCQkJ fSBlbHNlIHsNCgkJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9u W3ZhbHVlPSciK2NhdCsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0NCgkJ CQlqUXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAxKTsNCgkJ CX0NCgkJKTsNCgl9DQoNCglmdW5jdGlvbiBzbWRfYXV0b2ZvY3VzKCkgew0KCQlqUXVlcnko ImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS5mb2N1cygpLnNlbGVjdCgpOw0K CX0NCg0KCS8vIE1ha2Ugc3VyZSB3aGF0IGlzIGluIHRoZSBib3hlcyBpcyBQT1NUZWQgdmlh IHRoZSBoaWRkZW4gZm9ybQ0KCWZ1bmN0aW9uIHNtZF9wcmVzdWIoKSB7DQoJCWpRdWVyeSgi I3NtZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3N0ZXAnXSIpLnZhbChzbWRfdGFnc19zdGVw KTsNCgkJalF1ZXJ5KCIjc21kX3RhZ19wb3N0aXQgaW5wdXRbbmFtZT0nc21kX3RhZ19uYW1l J10iKS52YWwoalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXduYW1lJ10iKS52YWwo KSk7DQoJCWpRdWVyeSgiI3NtZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90YWdfdGl0 bGUnXSIpLnZhbChqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS52 YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90YWdf dHlwZSddIikudmFsKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfdHlwZSddOmNoZWNr ZWQiKS52YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3Nt ZF90YWdfcGFyZW50J10iKS52YWwoalF1ZXJ5KCIuc21kX3RhZ3Nfc2hvd3BhcnMgb3B0aW9u OnNlbGVjdGVkIikudmFsKCkpOw0KCQlqUXVlcnkoIiNzbWRfdGFnX3Bvc3RpdCBpbnB1dFtu YW1lPSdzbWRfdGFnX2NhdCddIikudmFsKGpRdWVyeSgiLnNtZF90YWdzX2xpbmtjYXQgb3B0 aW9uOnNlbGVjdGVkIikudmFsKCkpOw0KCQlqUXVlcnkoIiNzbWRfdGFnX3Bvc3RpdCIpLnN1 Ym1pdCgpOw0KCX0NCg0KCWZ1bmN0aW9uIHNtZF9tdWx0aXN1YigpIHsNCgkJdGhlVHlwZSA9 IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ3NfdHlwZSddOmNoZWNrZWQiKS52YWwoKTsN CgkJalF1ZXJ5KCIjc21kX3RhZ19tdWx0aWZvcm0gaW5wdXRbbmFtZT0nc3RlcCddIikudmFs KHNtZF90YWdzX3N0ZXApOw0KCQlqUXVlcnkoIiNzbWRfdGFnX211bHRpZm9ybSBpbnB1dFtu YW1lPSdzbWRfdGFnX3R5cGUnXSIpLnZhbCh0aGVUeXBlKTsNCgkJalF1ZXJ5KCIjc21kX3Rh Z19tdWx0aWZvcm0gaW5wdXRbbmFtZT0nc21kX3RhZ19pZCddIikudmFsKGpRdWVyeS5tYXAo IGpRdWVyeSgiI3NtZF90YWdzX2dycF8iK3RoZVR5cGUrIiAudmlzaWJsZSIpLmZpbmQoInNw YW5bbmFtZT0nc21kX3RhZ2lkJ10iKSwgZnVuY3Rpb24obixpKSB7cmV0dXJuIGpRdWVyeShu KS50ZXh0KCl9ICkpOw0KCQlqUXVlcnkoIiNzbWRfdGFnX211bHRpZm9ybSBpbnB1dFtuYW1l PSdzbWRfdGFnX25hbWUnXSIpLnZhbChqUXVlcnkubWFwKCBqUXVlcnkoIiNzbWRfdGFnc19n cnBfIit0aGVUeXBlKyIgLnZpc2libGUiKS5maW5kKCJzcGFuW25hbWU9J3NtZF90YWduYW0n XSIpLCBmdW5jdGlvbihuLGkpIHtyZXR1cm4galF1ZXJ5KG4pLnRleHQoKX0gKSk7DQoJCWpR dWVyeSgiI3NtZF90YWdfbXVsdGlmb3JtIGlucHV0W25hbWU9J3NtZF90YWdfZXh0cmEnXSIp LnZhbChqUXVlcnkoIiNzbWRfdGFnX3NlbF9zZWNvbmRhcnkgb3B0aW9uOnNlbGVjdGVkIiku dmFsKCkpOw0KCX0NCg0KCS8vIExpdmUgdGFnIGZpbHRlcg0KCWZ1bmN0aW9uIHNtZF90YWdf ZmlsdGVyKHNlbGVjdG9yLCBxdWVyeSwgbmFtKSB7DQoJCXZhciBjb3VudF9sYmwgPSAneyRj b3VudF9sYmx9JzsNCgkJdmFyIHF1ZXJ5ID0galF1ZXJ5LnRyaW0ocXVlcnkpOw0KCQlxdWVy eSA9IHF1ZXJ5LnJlcGxhY2UoLyAvZ2ksICd8Jyk7IC8vIGFkZCBPUiBmb3IgcmVnZXggcXVl cnkNCgkJdmFyIHJlID0gbmV3IFJlZ0V4cChxdWVyeSwgImkiKTsNCgkJalF1ZXJ5KHNlbGVj dG9yKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJc2VsID0gKHR5cGVvZiBuYW09PSJ1bmRlZmlu ZWQiIHx8IG5hbT09JycpID8galF1ZXJ5KHRoaXMpIDogalF1ZXJ5KHRoaXMpLmZpbmQoInNw YW5bbmFtZT0nIituYW0rIiddIik7DQoJCQkoc2VsLnRleHQoKS5zZWFyY2gocmUpIDwgMCkg PyBqUXVlcnkodGhpcykuaGlkZSgpLnJlbW92ZUNsYXNzKCd2aXNpYmxlJykgOiBqUXVlcnko dGhpcykuc2hvdygpLmFkZENsYXNzKCd2aXNpYmxlJyk7DQoJCX0pOw0KDQoJCS8vIERpc3Bs YXkgdGhlIG1hdGNoZWQgY291bnQNCgkJdGhlVHlwZSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0n c21kX3RhZ3NfdHlwZSddOmNoZWNrZWQiKS52YWwoKTsNCgkJbnVtX21hdGNoZXMgPSBjb3Vu dF9sYmwgKyBqUXVlcnkoIiNzbWRfdGFnc19ncnBfIit0aGVUeXBlKyIgLnZpc2libGUiKS5s ZW5ndGg7DQoJCWpRdWVyeSgiI3NtZF90YWdfZmlsdGVyX2NvdW50IikudGV4dChudW1fbWF0 Y2hlcyk7DQoJfQ0KDQoJLy8gSGFuZGxlIHNlY29uZGFyeSBtdWx0aS1zZWxlY3Qgb3B0aW9u cw0KCWZ1bmN0aW9uIHNtZF90YWdzX3NlbGVkaXQob2JqKSB7DQoJCXNtZF90YWdzX3N0ZXAg PSBqUXVlcnkob2JqKS52YWwoKTsNCgkJdGhlVHlwZSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0n c21kX3RhZ3NfdHlwZSddOmNoZWNrZWQiKS52YWwoKTsNCgkJc3dpdGNoKHNtZF90YWdzX3N0 ZXApIHsNCgkJCWNhc2UgInNtZF90YWdzX2RlbGV0ZSI6DQoJCQkJalF1ZXJ5KCIjc21kX3Rh Z19tdWx0aV9wbGFjZWhvbGRlciIpLmVtcHR5KCk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJz bWRfdGFnc19tdWx0aV9zZXRfcGFyZW50IjoNCgkJCQkvLyBHcmFiIGFsbCBlbGVtZW50cyBv ZiB0aGUgY3VycmVudCB0eXBlIHRoYXQgaGF2ZSBkYXRhIGluIHRoZW0NCgkJCQlsaXN0aXRl bXMgPSBqUXVlcnkoIiNzbWRfdGFnc19ncnBfIit0aGVUeXBlKyIgeyRzZWx9IikuZmlsdGVy KGZ1bmN0aW9uKCkge3JldHVybiBqUXVlcnkodGhpcykuZmluZCgnc3BhbicpLnNpemUoKSA+ IDB9KS5nZXQoKTsNCgkJCQlsaXN0aXRlbXMuc29ydChmdW5jdGlvbihhLCBiKSB7DQoJCQkJ CXZhciBjb21wQSA9IGpRdWVyeShhKS50ZXh0KCkudG9VcHBlckNhc2UoKTsNCgkJCQkJdmFy IGNvbXBCID0galF1ZXJ5KGIpLnRleHQoKS50b1VwcGVyQ2FzZSgpOw0KCQkJCQlyZXR1cm4g KGNvbXBBIDwgY29tcEIpID8gLTEgOiAoY29tcEEgPiBjb21wQikgPyAxIDogMDsNCgkJCQl9 KTsNCg0KCQkJCW91dCA9ICc8c2VsZWN0IGlkPSJzbWRfdGFnX3NlbF9zZWNvbmRhcnkiPic7 DQoJCQkJb3V0ICs9ICc8b3B0aW9uIHZhbHVlPSIwIj48L29wdGlvbj4nOw0KCQkJCWpRdWVy eS5lYWNoKGxpc3RpdGVtcywgZnVuY3Rpb24oKSB7DQoJCQkJCWl0ZW0gPSBqUXVlcnkodGhp cyk7DQoJCQkJCXRhZ2lkID0galF1ZXJ5KHRoaXMpLmZpbmQoInNwYW5bbmFtZT0nc21kX3Rh Z2lkJ10iKS50ZXh0KCk7DQoJCQkJCXRhZ25hbSA9IGpRdWVyeSh0aGlzKS5maW5kKCJzcGFu W25hbWU9J3NtZF90YWduYW0nXSIpLnRleHQoKTsNCgkJCQkJb3V0ICs9ICc8b3B0aW9uIHZh bHVlPSInK3RhZ2lkKyciPicrdGFnbmFtKyc8L29wdGlvbj4nOw0KCQkJCX0pOw0KCQkJCW91 dCArPSAnPC9zZWxlY3Q+JzsNCgkJCQlqUXVlcnkoIiNzbWRfdGFnX211bHRpX3BsYWNlaG9s ZGVyIikuaHRtbChvdXQpOw0KCQkJCWJyZWFrDQoJCQljYXNlICJzbWRfdGFnc19tdWx0aV9j YXRsaW5rIjoNCgkJCQlqUXVlcnkucG9zdCgneyRxc1ZhcnN9JywgeyBzdGVwOiAic21kX3Rh Z19jYXRsaXN0IiwgdHlwZTogdGhlVHlwZSwgaHRtbF9pZDogJ3NtZF90YWdfc2VsX3NlY29u ZGFyeScgfSwNCgkJCQkJZnVuY3Rpb24oZGF0YSkgew0KCQkJCQkJalF1ZXJ5KCIjc21kX3Rh Z19tdWx0aV9wbGFjZWhvbGRlciIpLmh0bWwoZGF0YSk7DQoJCQkJCX0NCgkJCQkpOw0KCQkJ CWJyZWFrDQoJCX0NCgl9DQoNCglmdW5jdGlvbiBzbWRfdGFnc190b2dnbGVfcmVwb3J0KCkg ew0KCQlqUXVlcnkoIiNzbWRfdGFnX3JlcG9ydF9wYW5lIikudG9nZ2xlKCdub3JtYWwnKTsN Cgl9DQo8L3NjcmlwdD4NCkVPSlM7DQoJfQ0KDQoJLy8gVGhlIHRhZyBtYW5hZ2VtZW50IHRh YmxlDQoJZWNobyBzdGFydFRhYmxlKCdjb250cm9sJywnJywnJyw1KTsNCglpZiAoc21kX3Rh Z3NfdGFibGVfZXhpc3QoKSkgew0KCQkvLyBUYWJsZXMgaW5zdGFsbGVkDQoJCWlmICgkbnVt UHJlZnMgPT0gJG51bVJlcVByZWZzKSB7DQoJCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJ CQllY2hvIHRyKA0KCQkJCWZMYWJlbENlbGwoc21kX3RhZ3NfZ1R4dCgnY29udHJvbCcpLic6 JykNCgkJCQkuIHRkYSgkYnRuUHJlZnMsICRidG5TdHlsZSkNCgkJCQkuIHRkYSgkYnRuU3lu YywgJGJ0blN0eWxlKQ0KCQkJKTsNCgkJCWVjaG8gZW5kVGFibGUoKTsNCg0KCQkJLy8gTGl2 ZSBzZWFyY2ggLyBtdWx0aS1lZGl0DQoJCQkkZmlsdG9wdHMgPSBhcnJheSgNCgkJCQknc21k X2FsbCcgPT4gc21kX3RhZ3NfZ1R4dCgnYWxsX2xibCcpLA0KCQkJCSdzbWRfdGFndHRsJyA9 PiBnVHh0KCd0aXRsZScpLA0KCQkJCSdzbWRfdGFnbmFtJyA9PiBnVHh0KCduYW1lJyksDQoJ CQkJJ3NtZF90YWdwYXInID0+IHNtZF90YWdzX2dUeHQoJ3BhcmVudF9sYmwnKSwNCgkJCSk7 DQoJCQkkd2l0aHNlbG9wdHMgPSBhcnJheSgNCgkJCQknc21kX3RhZ3NfZGVsZXRlJyA9PiBn VHh0KCdkZWxldGUnKSwNCgkJCQknc21kX3RhZ3NfbXVsdGlfc2V0X3BhcmVudCcgPT4gc21k X3RhZ3NfZ1R4dCgnYXNzaWduX3BhcmVudF9sYmwnKSwNCgkJCSk7DQoJCQkvLyBUYWNrIG9u IHRoZSBjYXRlZ29yeSBsaW5rIGl0ZW1zIGlmIHJlcXVpcmVkDQoJCQlpZiAoJGNsaW5rKSB7 DQoJCQkJJGZpbHRvcHRzWydzbWRfdGFnY2F0J10gPSBzbWRfdGFnc19nVHh0KCdjbGlua19s YmwnKTsNCgkJCQkkd2l0aHNlbG9wdHNbJ3NtZF90YWdzX211bHRpX2NhdGxpbmsnXSA9IHNt ZF90YWdzX2dUeHQoJ2xpbmtfdG9fY2F0X2xibCcpOw0KCQkJfQ0KDQoJCQllY2hvICc8Zm9y bSBpZD0ic21kX3RhZ19tdWx0aWZvcm0iIGFjdGlvbj0iP2V2ZW50PXNtZF90YWdzIiBtZXRo b2Q9InBvc3QiIG9uc3VibWl0PSJzbWRfbXVsdGlzdWIoKTsgcmV0dXJuIHZlcmlmeShcJycu Z1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wnKSI+JzsNCgkJCWVjaG8gJzxmaWVsZHNldCBpZD0i c21kX3RhZ19maWx0Ij48bGVnZW5kIGNsYXNzPSJwbGFpbiBsZXZlcicuKGdldF9wcmVmKCdw YW5lX3NtZF90YWdfZmlsdGVyc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48 YSBocmVmPSIjc21kX3RhZ19maWx0ZXJzIj4nLnNtZF90YWdzX2dUeHQoJ3RhZ19zZWFyY2gn KS4nPC9hPjwvbGVnZW5kPjxkaXYgaWQ9InNtZF90YWdfZmlsdGVycyIgY2xhc3M9InRvZ2ds ZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RhZ19maWx0ZXJzX3Zp c2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCQllY2hvIGhJbnB1dCgnc3Rl cCcsICcnKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX3R5cGUnLCAnJyk7DQoJCQllY2hv IGhJbnB1dCgnc21kX3RhZ19pZCcsICcnKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX25h bWUnLCAnJyk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3RhZ19leHRyYScsICcnKTsNCgkJCWVj aG8gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzbWRfdGFnZmlsdGVyIiB2YWx1ZT0iIiBp ZD0ic21kX3RhZ2ZpbHRlciIgLz4nOw0KCQkJZWNobyAnPHNwYW4gaWQ9InNtZF90YWdfZmls dGVyX2NvdW50Ij48L3NwYW4+JzsNCgkJCWVjaG8gJzxkaXYgaWQ9InNtZF90YWdfZmlsdF9y YWRpb3MiPicucmFkaW9TZXQoJGZpbHRvcHRzLCAnc21kX3RhZ19maWx0b3B0JywgJ3NtZF9h bGwnLCAnJywgJ3NtZF90YWdfZmlsdG9wdCcpLic8L2Rpdj4nOw0KCQkJZWNobyAnPGRpdiBp ZD0ic21kX3RhZ19tdWx0aXNlbCI+Jy5zbWRfdGFnc19nVHh0KCd3aXRoX2ZpbHRlcmVkJyku c2VsZWN0SW5wdXQoJ3NtZF90YWdfbXVsdGlzZWwnLCR3aXRoc2Vsb3B0cywgJycsIHRydWUs ICcgb25jaGFuZ2U9InNtZF90YWdzX3NlbGVkaXQodGhpcyk7IHJldHVybiBmYWxzZTsiJyku bi5mSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdnbycpLCAnc21hbGxlcmJveCcpLic8L2Rp dj4nOw0KCQkJZWNobyAnPGRpdiBpZD0ic21kX3RhZ19tdWx0aV9wbGFjZWhvbGRlciI+PC9k aXY+PGEgbmFtZT0ic21kX3RhZ3NfcmVwb3J0X3RvZ2dsZXIiIG9uY2xpY2s9InNtZF90YWdz X3RvZ2dsZV9yZXBvcnQoKTsiPicuc21kX3RhZ3NfZ1R4dCgncmVjZW50X3JlcG9ydCcpLic8 L2E+JzsNCgkJCWVjaG8gJzwvZGl2PjwvZmllbGRzZXQ+PC9mb3JtPic7DQoNCgkJCS8vIE1h aW4gdGFnIGxpc3QNCgkJCWVjaG8gJzxkaXYgaWQ9InNtZF90YWdfcmVwb3J0X3BhbmUiPjxk aXY+PGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9InB1Ymxpc2ggc21kX3RhZ3NfYnRuX29r IiB2YWx1ZT0iJy5nVHh0KCdvaycpLiciIG9uY2xpY2s9InNtZF90YWdzX3RvZ2dsZV9yZXBv cnQoKTsiIC8+PGgyPicuc21kX3RhZ3NfZ1R4dCgncmVwb3J0X2xibCcpLic8L2gyPicuJHJl cG9ydC4nPC9kaXY+PC9kaXY+JzsNCgkJCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9 InNtZF90YWdfcG9zdGl0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncyI+JzsNCgkJCWVjaG8g aElucHV0KCdzdGVwJywgJycpOw0KCQkJZWNobyBoSW5wdXQoJ3NtZF90YWdfaWQnLCAkc21k X3RhZ19pZCk7DQoJCQllY2hvIGhJbnB1dCgnc21kX3RhZ19uYW1lJywgJycpOw0KCQkJZWNo byBoSW5wdXQoJ3NtZF90YWdfb25hbWUnLCAkc21kX3RhZ19uYW1lKTsNCgkJCWVjaG8gaElu cHV0KCdzbWRfdGFnX3BhcmVudCcsICcnKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX2Nh dCcsICcnKTsNCgkJCWVjaG8gaElucHV0KCdzbWRfdGFnX3RpdGxlJywgJycpOw0KCQkJZWNo byBoSW5wdXQoJ3NtZF90YWdfdHlwZScsICcnKTsNCgkJCWVjaG8gJzwvZm9ybT4nOw0KCQkJ ZWNobyBzdGFydFRhYmxlKCdsaXN0JywgJycsICdzbWRfdGFndGFibGUnKTsNCgkJCWVjaG8g dHIodGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0KCdtYW5hZ2VfbGJsJykpLicgJy4kYnRuSGVs cCwgJyBjb2xzcGFuPSIxMSInKSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkKCc8bGFiZWwgZm9y PSJzbWRfdGFnc19uZXd0aXRsZSI+Jy5nVHh0KCd0aXRsZScpLic6PC9sYWJlbD4nKQ0KCQkJ CS4gdGQoZklucHV0KCd0ZXh0JywgJ3NtZF90YWdzX25ld3RpdGxlJywgJHNtZF90YWdfdGl0 bGUpKQ0KCQkJCS4gdGQoJzxsYWJlbCBmb3I9InNtZF90YWdfcGFyZW50Ij4nLmdUeHQoJ3Bh cmVudCcpLic6PC9sYWJlbD4nKQ0KCQkJCS4gdGQoJycsICcnLCAnc21kX3RhZ3Nfc2hvd3Bh cnMnKQ0KCQkJCS4gKCgkY2xpbmspDQoJCQkJCT8gdGQoc21kX3RhZ3NfZ1R4dCgnY2xpbmtf bGJsJykuJzonKQ0KCQkJCQkJLiB0ZCgnJywgJycsICdzbWRfdGFnc19saW5rY2F0JykNCgkJ CQkJOiB0ZChzcCkudGQoc3ApDQoJCQkJKQ0KCQkJCS4gdGQoJzxsYWJlbCBmb3I9InNtZF90 YWdzX25ld25hbWUiPicuZ1R4dCgnbmFtZScpLic6PC9sYWJlbD4nKQ0KCQkJCS4gdGRhKGZJ bnB1dCgndGV4dCcsICdzbWRfdGFnc19uZXduYW1lJywgJHNtZF90YWdfbmFtZSkpDQoJCQkJ LiB0ZGEoJGJ0blNhdmUpDQoJCQkJLiB0ZGEoJGJ0bkNyZWF0ZSkNCgkJCQkuIHRkYSgkYnRu RGVsZXRlKQ0KCQkJKTsNCgkJCWVjaG8gdHIoDQoJCQkJdGQoJzxsYWJlbD4nLnNtZF90YWdz X2dUeHQoJ2ZpbHRlcicpLic6PC9sYWJlbD4nKQ0KCQkJCS4gdGRjcygkcmFkaW9zLCAxMCkN CgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkKHNwKQ0KCQkJCS4gdGRjcygkdGFnb3V0WyRz bWRfdGFnX3R5cGVdLCAxMCwgJycsICdzbWRfdGFnc19zaG93bGlzdCcpDQoJCQkpOw0KCQl9 IGVsc2UgaWYgKCRudW1QcmVmcyA+IDAgJiYgJG51bVByZWZzIDwgJG51bVJlcVByZWZzKSB7 DQoJCQkvLyBQcmVmcyBwb3NzaWJseSBjb3JydXB0LCBvciBwbHVnaW4gdXBkYXRlZA0KCQkJ ZWNobyB0cigNCgkJCQl0ZGEoc3Ryb25nKHNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWUnKSku YnIuYnINCgkJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJy DQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX29wdHMxJyksICcgY29sc3Bhbj0i MiInKQ0KCQkJKTsNCgkJCWVjaG8gdHIoDQoJCQkJdGRhKCRidG5SZW1vdmUsJGJ0blN0eWxl KQ0KCQkJCS4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpDQoJCQkpOw0KCQl9IGVsc2Ug ew0KCQkJLy8gUHJlZnMgbm90IGluc3RhbGxlZA0KCQkJZWNobyB0cih0ZGEoc21kX3RhZ3Nf Z1R4dCgncHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQkJZWNo byB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQl9DQoJfSBlbHNlIHsNCgkJ Ly8gVGFibGVzIG5vdCBpbnN0YWxsZWQNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF90YWdz X2dUeHQoJ3ByZWZzX3NvbWVfdGJsJykpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dUeHQoJ3By ZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJLnNtZF90YWdzX2dUeHQoJ3ByZWZzX3Nv bWVfb3B0czInKSwgJyBjb2xzcGFuPSIyIicpDQoJCSk7DQoJCWVjaG8gdHIodGRhKCRidG5J bnN0YWxsVGJsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFN0b3JlIHRoZSB0YWcgdGhhdCBpcyBj dXJyZW50bHkgYmVpbmcgZWRpdGVkL2NyZWF0ZWQNCmZ1bmN0aW9uIHNtZF90YWdfc2F2ZSgp IHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX3RhZ19vbmFtZScsICdzbWRf dGFnX25hbWUnLCAnc21kX3RhZ190aXRsZScsICdzbWRfdGFnX3BhcmVudCcsICdzbWRfdGFn X2NhdCcsICdzbWRfdGFnX3R5cGUnLCAnc21kX3RhZ19pZCcpKSkpOw0KDQoJJGN0cmxzID0g c21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdF9tZGVsaW0nKSwgMSk7DQoJJG1k ZWxpbSA9ICRjdHJsc1snc21kX3RhZ190X21kZWxpbSddWyd2YWwnXTsNCg0KCSRtZXNzYWdl ID0gJHJlcG9ydCA9ICcnOw0KCSRtaXNzaW5nID0gMDsNCgkkb2sgPSAkbm90b2sgPSBhcnJh eSgpOw0KCSRzbWRfdGFnX3BhcmVudCA9ICghZW1wdHkoJHNtZF90YWdfcGFyZW50KSkgPyAk c21kX3RhZ19wYXJlbnQgOiAncm9vdCc7DQoJJHNtZF90YWdfbmFtZSA9IHRyaW0oJHNtZF90 YWdfbmFtZSk7DQoNCgkvLyBDYW4ndCB1c2Ugc2FmZV91cHNlcnQoKSBiZWNhdXNlIHRoZSBX SEVSRSBpcyBmb3IgSUQgQU5EIHR5cGUNCglpZiAoZW1wdHkoJHNtZF90YWdfaWQpKSB7DQoJ CS8vIENyZWF0ZQ0KCQlpZiAoJHNtZF90YWdfbmFtZT09JycgJiYgJHNtZF90YWdfdGl0bGU9 PScnKSB7DQoJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF90YWdzX2dUeHQoJ25vX25hbWUnLCBh cnJheSgne3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSksIEVfV0FSTklORyk7 DQoJCX0gZWxzZSB7DQoJCQkkYWxsdGFnbmFtID0gZG9fbGlzdCgkc21kX3RhZ19uYW1lLCAk bWRlbGltKTsNCgkJCSRhbGx0YWd0dGwgPSBkb19saXN0KCRzbWRfdGFnX3RpdGxlLCAkbWRl bGltKTsNCgkJCSRudW10YWdzID0gY291bnQoJGFsbHRhZ25hbSk7DQoNCgkJCWZvcmVhY2gg KCRhbGx0YWduYW0gYXMgJGlkeCA9PiAkdGhlVGFnKSB7DQoJCQkJaWYgKCR0aGVUYWcgPT0g JycpIHsNCgkJCQkJJG1pc3NpbmcrKzsNCgkJCQl9DQoNCgkJCQkkdGhlVHRsID0gKGlzc2V0 KCRhbGx0YWd0dGxbJGlkeF0pICYmICRhbGx0YWd0dGxbJGlkeF0gIT0gJycpID8gJGFsbHRh Z3R0bFskaWR4XSA6ICR0aGVUYWc7DQoJCQkJJHRoZU5hbSA9ICgkdGhlVGFnID09ICcnKSA/ IHNhbml0aXplRm9yVXJsKCR0aGVUdGwpIDogc2FuaXRpemVGb3JVcmwoJHRoZVRhZyk7DQoN CgkJCQkkZXhpc3RzID0gc2FmZV9maWVsZCgnbmFtZScsIFNNRF9UQUcsICJuYW1lID0gJyR0 aGVOYW0nIEFORCB0eXBlID0gJyRzbWRfdGFnX3R5cGUnIik7DQoJCQkJJHBhcmV4ID0gc2Fm ZV9maWVsZCgnbmFtZScsIFNNRF9UQUcsICJuYW1lID0gJyRzbWRfdGFnX3BhcmVudCcgQU5E IHR5cGUgPSAnJHNtZF90YWdfdHlwZSciKTsNCg0KCQkJCWlmICgkZXhpc3RzKSB7DQoJCQkJ CWlmICgkbnVtdGFncyA+IDEpIHsNCgkJCQkJCSRub3Rva1skaWR4XSA9ICdhbHJlYWR5X2V4 aXN0cyc7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF90YWdz X2dUeHQoJ2V4aXN0cycsIGFycmF5KCd7bmFtZX0nID0+ICR0aGVOYW0sICd7dHlwZX0nID0+ IHVjZmlyc3QoJHNtZF90YWdfdHlwZSkpKSwgRV9XQVJOSU5HKTsNCgkJCQkJfQ0KCQkJCX0g ZWxzZSB7DQoJCQkJCSRzbWRfdGFnX2lkID0gc2FmZV9pbnNlcnQoDQoJCQkJCQlTTURfVEFH LA0KCQkJCQkJIm5hbWU9JyR0aGVOYW0nLCB0aXRsZT0nJHRoZVR0bCcsIHBhcmVudD0nIi4o KCRwYXJleCkgPyAkc21kX3RhZ19wYXJlbnQgOiAncm9vdCcpLiInLCB0eXBlPSckc21kX3Rh Z190eXBlJyINCgkJCQkJKTsNCgkJCQkJaWYgKCRzbWRfdGFnX2lkID4gMCkgew0KCQkJCQkJ aWYgKCRzbWRfdGFnX2NhdCkgew0KCQkJCQkJCXNhZmVfaW5zZXJ0KFNNRF9UQUdDLCJ0YWdf aWQ9JyRzbWRfdGFnX2lkJywgY2F0X2lkPShTRUxFQ1QgaWQgRlJPTSAiLlBGWC4idHhwX2Nh dGVnb3J5IFdIRVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcgQU5EIHR5cGU9JyRzbWRfdGFnX3R5 cGUnKSIpOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRudW10YWdzID4gMSkgew0KCQkJCQkJCSRv a1tdID0gJHRoZU5hbTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJG1lc3NhZ2UgPSBzbWRf dGFnc19nVHh0KCdjcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHRoZU5hbSwgJ3t0eXBl fScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ug ew0KCQkJCQkJaWYgKCRudW10YWdzID4gMSkgew0KCQkJCQkJCSRub3Rva1skaWR4XSA9ICd1 bmFibGVfdG9fY3JlYXRlJzsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJG1lc3NhZ2UgPSBh cnJheShzbWRfdGFnc19nVHh0KCdub3RfY3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRz bWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdfdHlwZSkpKSwgRV9X QVJOSU5HKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gR2VuZXJh dGUgdGhlIHJlcG9ydA0KCQkJaWYgKCRvaykgew0KCQkJCSRyZXBvcnQgPSBzbWRfdGFnc19n VHh0KCdjcmVhdGVkX3JlcF9sYmwnKS5qb2luKCcsICcsICRvaykuJy4nOw0KCQkJfQ0KCQkJ aWYgKCRub3Rvaykgew0KCQkJCSRtc2dzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkbm90 b2sgYXMgJGlkeCA9PiAkcmVhc29uKSB7DQoJCQkJCSRtc2dzW10gPSAkYWxsdGFnbmFtWyRp ZHhdLnNwLicoJy5zbWRfdGFnc19nVHh0KCRyZWFzb24pLicpJzsNCgkJCQl9DQoJCQkJJHJl cG9ydCAuPSBici5ici5zbWRfdGFnc19nVHh0KCdub3RfY3JlYXRlZF9yZXBfbGJsJykuam9p bignLCAnLCAkbXNncyk7DQoJCQkJJHJlcG9ydCAuPSAoJG1pc3NpbmcpID8gYnIuYnIuc21k X3RhZ3NfZ1R4dCgnbWlzc2luZ19yZXBfbGJsJykuJG1pc3NpbmcgOiAnJzsNCgkJCX0NCgkJ fQ0KCX0gZWxzZSB7DQoJCS8vIFVwZGF0ZSAtIG5vIG5lZWQgdG8gbWFpbnRhaW4gcmVmZXJl bnRpYWwgaW50ZWdyaXR5IHVubGlrZSB0eHBfY2F0cw0KCQkvLyBzaW5jZSB0YWdzIGFyZSBz dG9yZWQgYWdhaW5zdCBpdGVtIElEcw0KCQkkc21kX3RhZ190aXRsZSA9IChlbXB0eSgkc21k X3RhZ190aXRsZSkpID8gJHNtZF90YWdfbmFtZSA6ICRzbWRfdGFnX3RpdGxlOw0KCQkkc21k X3RhZ19uYW1lID0gKGVtcHR5KCRzbWRfdGFnX25hbWUpKSA/IHNhbml0aXplRm9yVXJsKCRz bWRfdGFnX3RpdGxlKSA6IHNhbml0aXplRm9yVXJsKCRzbWRfdGFnX25hbWUpOw0KCQkkZXhp c3RpbmdfaWQgPSBzYWZlX2ZpZWxkKCdpZCcsIFNNRF9UQUcsICJuYW1lID0gJyRzbWRfdGFn X25hbWUnIGFuZCB0eXBlID0gJyRzbWRfdGFnX3R5cGUnIik7DQoNCgkJaWYgKCRleGlzdGlu Z19pZCBhbmQgJGV4aXN0aW5nX2lkICE9ICRzbWRfdGFnX2lkKSB7DQoJCQkkbWVzc2FnZSA9 IGFycmF5KHNtZF90YWdzX2dUeHQoJ2V4aXN0cycsIGFycmF5KCd7bmFtZX0nID0+ICRzbWRf dGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdfdHlwZSkpKSwgRV9XQVJO SU5HKTsNCgkJfSBlbHNlIHsNCgkJCWlmIChzYWZlX3VwZGF0ZSgNCgkJCQkJU01EX1RBRywN CgkJCQkJIm5hbWU9JyRzbWRfdGFnX25hbWUnLCB0aXRsZT0nJHNtZF90YWdfdGl0bGUnLCBw YXJlbnQ9JyRzbWRfdGFnX3BhcmVudCciLA0KCQkJCQkidHlwZT0nJHNtZF90YWdfdHlwZScg QU5EIGlkPSRzbWRfdGFnX2lkIg0KCQkJCSkpIHsNCgkJCQlzYWZlX3VwZGF0ZShTTURfVEFH LCAicGFyZW50PSckc21kX3RhZ19uYW1lJyIsICJwYXJlbnQ9JyRzbWRfdGFnX29uYW1lJyBB TkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsNCgkJCQlpZiAoJHNtZF90YWdfY2F0KSB7DQoJ CQkJCXNhZmVfdXBzZXJ0KFNNRF9UQUdDLCAiY2F0X2lkPShTRUxFQ1QgaWQgRlJPTSAiLlBG WC4idHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcgQU5EIHR5cGU9JyRz bWRfdGFnX3R5cGUnKSIsICJ0YWdfaWQgPSAnJHNtZF90YWdfaWQnIik7DQoJCQkJfSBlbHNl IHsNCgkJCQkJc2FmZV9kZWxldGUoU01EX1RBR0MsICJ0YWdfaWQ9JHNtZF90YWdfaWQiKTsN CgkJCQl9DQoJCQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCd1cGRhdGVkJywgYXJyYXko J3tuYW1lfScgPT4gJHNtZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3Rh Z190eXBlKSkpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF90YWdz X2dUeHQoJ25vdF91cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdfbmFtZSwg J3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpLCBFX1dBUk5JTkcpOw0KCQkJ fQ0KCQl9DQoJfQ0KDQoJcmVidWlsZF90cmVlX2Z1bGwoJHNtZF90YWdfdHlwZSwgU01EX1RB Ryk7DQoNCgkvLyBGb3JjZSBzbWRfdGFnX2lkIHRvIHRoZSBuZXcgSUQgc28gaXQgY2FuIGJl IGltbWVkaWF0ZWx5IGVkaXRlZA0KCSRfUE9TVFsnc21kX3RhZ19pZCddID0gJHNtZF90YWdf aWQ7DQoNCglzbWRfdGFnc19tYW5hZ2UoJG1lc3NhZ2UsICRyZXBvcnQpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFN0b3JlIG5ldyB0YWcgLSB1c2VzIHNtZF90 YWdfc2F2ZSB3aXRob3V0IHRoZSBJRC9vbGRfbmFtZQ0KZnVuY3Rpb24gc21kX3RhZ19jcmVh dGUoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF90YWdfbmFtZScsICdz bWRfdGFnX3RpdGxlJywgJ3NtZF90YWdfcGFyZW50JywgJ3NtZF90YWdfdHlwZScpKSkpOw0K CXVuc2V0KCRfUE9TVFsnc21kX3RhZ19pZCddKTsNCglzbWRfdGFnX3NhdmUoKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDaGVjayBpZiB0aGUgcGFzc2VkIHRh ZyBleGlzdHMuDQovLyBSZXR1cm4gaXRzIElEIGlmIGl0IGRvZXMgb3IgaW5zZXJ0IGl0IGlm IGl0IGRvZXNuJ3QuIE9wdGlvbmFsbHkgYXNzaWduIGl0IHRvIGEgcGFyZW50IHRhZyAvIFRY UCBjYXRlZ29yeQ0KZnVuY3Rpb24gc21kX3RhZ19nZXRzZXJ0KCR0YWdfbmFtZSwgJHRhZ190 eXBlLCAkdGFnX3RpdGxlPScnLCAkdGFnX3BhcmVudD0nJywgJHRhZ19jYXQ9JycsICRmb3Jj ZV9wYXJlbnQ9ZmFsc2UsICRmb3JjZV9jYXQ9ZmFsc2UpIHsNCgkkY3RybHMgPSBzbWRfdGFn c19wcmVmX2dldChhcnJheSgnc21kX3RhZ19wX2xpbmtjYXQnKSwgMSk7DQoJJGNsaW5rID0g JGN0cmxzWydzbWRfdGFnX3BfbGlua2NhdCddWyd2YWwnXTsNCgkkdGFnX3RpdGxlID0gKCR0 YWdfdGl0bGUgPT0gJycpID8gJHRhZ19uYW1lIDogJHRhZ190aXRsZTsNCgkkdGFnX3RpdGxl ID0gZG9TbGFzaCgkdGFnX3RpdGxlKTsNCgkkdGFnX25hbWUgPSBkb1NsYXNoKHNhbml0aXpl Rm9yVXJsKCR0YWdfbmFtZSkpOw0KCSR0YWdfdHlwZSA9IGRvU2xhc2goJHRhZ190eXBlKTsN CgkkdGFnX3BhcmVudCA9ICgkdGFnX3BhcmVudCkgPyBkb1NsYXNoKHNhbml0aXplRm9yVXJs KCR0YWdfcGFyZW50KSkgOiAncm9vdCc7DQoJJHRhZ19jYXQgPSBkb1NsYXNoKCR0YWdfY2F0 KTsNCg0KCSRyZXQgPSBzYWZlX2ZpZWxkKCdpZCcsIFNNRF9UQUcsICJuYW1lID0gJyR0YWdf bmFtZScgQU5EIHR5cGUgPSAnJHRhZ190eXBlJyIpOw0KCWlmICghJHJldCkgew0KCQkkcmV0 ID0gc2FmZV9pbnNlcnQoU01EX1RBRywgIm5hbWU9JyIuJHRhZ19uYW1lLiInLCB0aXRsZT0n JHRhZ190aXRsZScsIHBhcmVudD0nJHRhZ19wYXJlbnQnLCB0eXBlPSckdGFnX3R5cGUnIik7 DQoJCXJlYnVpbGRfdHJlZV9mdWxsKCR0YWdfdHlwZSwgU01EX1RBRyk7DQoJfSBlbHNlaWYo JGZvcmNlX3BhcmVudCkgew0KCQkkdXBkID0gc2FmZV91cGRhdGUoU01EX1RBRywgInBhcmVu dD0nJHRhZ19wYXJlbnQnIiwgImlkPSciLmRvU2xhc2goJHJldCkuIiciKTsNCgkJcmVidWls ZF90cmVlX2Z1bGwoJHRhZ190eXBlLCBTTURfVEFHKTsNCgl9DQoNCgkvLyBBc3NpZ24gdGFn IHRvIGNhdGVnb3J5IGlmIHJlcXVpcmVkDQoJJHJldCA9IGRvU2xhc2goJHJldCk7DQoJaWYg KCRjbGluayAmJiAkdGFnX2NhdCkgew0KCQkkY2F0aWQgPSBzYWZlX2ZpZWxkKCdjYXRfaWQn LCBTTURfVEFHQywgInRhZ19pZD0nJHJldCciKTsNCg0KCQlpZiAoJGNhdGlkICYmICRmb3Jj ZV9jYXQpIHsNCgkJCXNhZmVfZGVsZXRlKFNNRF9UQUdDLCAiY2F0X2lkPSciLiRjYXRpZC4i JyBBTkQgdGFnX2lkPSciLiRyZXQuIiciKTsNCgkJCSRjYXRpZCA9IGZhbHNlOw0KCQl9DQoN CgkJaWYoISRjYXRpZCkgew0KCQkJc2FmZV9pbnNlcnQoU01EX1RBR0MsICJ0YWdfaWQ9JyRy ZXQnLCBjYXRfaWQ9KFNFTEVDVCBpZCBGUk9NICIuUEZYLiJ0eHBfY2F0ZWdvcnkgV0hFUkUg bmFtZT0nJHRhZ19jYXQnIEFORCB0eXBlPSckdGFnX3R5cGUnKSIpOw0KCQl9DQoJfQ0KDQoJ cmV0dXJuICRyZXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTGlu ayB0aGUgcGFzc2VkIHRhZ3MgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4gaXRlbSBJRA0KZnVuY3Rp b24gc21kX3RhZ19saW5rKCRpdGVtaWQsICR0YWdhcnIsICR0YWdfdHlwZSkgew0KCWFzc2Vy dF9pbnQoJGl0ZW1pZCk7DQoNCgkvLyBSZW1vdmUgYW55IGV4aXN0aW5nIHRhZ3M/PyBQZXJo YXBzIG1ha2UgdGhpcyBhbiBvcHRpb24/DQovLwlzYWZlX2RlbGV0ZShTTURfVEFHVSwgJ2l0 ZW1faWQ9IicuJGl0ZW1pZC4nIiBBTkQgdHlwZT0iJy5kb1NsYXNoKCR0YWdfdHlwZSkuJyIn KTsNCgkkdGFnX3R5cGUgPSBkb1NsYXNoKCR0YWdfdHlwZSk7DQoNCgkkY3RyID0gJHJldCA9 IDA7DQoJZm9yZWFjaCAoJHRhZ2FyciBhcyAkdGhlVGFnKSB7DQoJCWlmICgkdGhlVGFnID09 ICcnKSBjb250aW51ZTsNCgkJJHRoZVRhZyA9IGRvU2xhc2goJHRoZVRhZyk7IC8vIFByb2Jh Ymx5IG5vdCBuZWNlc3NhcnkNCg0KCQkkZXhpc3RzID0gc2FmZV9maWVsZCgnaXRlbV9pZCcs IFNNRF9UQUdVLCAidGFnX2lkID0gJyR0aGVUYWcnIEFORCBpdGVtX2lkID0gJyRpdGVtaWQn IEFORCB0eXBlID0gJyR0YWdfdHlwZSciKTsNCg0KCQlpZiAoISRleGlzdHMpIHsNCgkJCSRy ZXQgPSBzYWZlX2luc2VydChTTURfVEFHVSwgJ3RhZ19pZCA9ICInLiR0aGVUYWcuJyIsIGl0 ZW1faWQ9IicuJGl0ZW1pZC4nIiwgdHlwZT0iJy4kdGFnX3R5cGUuJyInKTsNCgkJCWlmICgk cmV0KSB7DQoJCQkJJGN0cisrOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcmV0dXJuICRjdHI7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGVsZXRlIHRoZSBnaXZlbiB0 YWcocykuIFJlc3BlY3RzIG5vY2xvYmJlci90cmVlL29ycGhhbnMgZGVwZW5kaW5nIG9uIHBy ZWZzDQpmdW5jdGlvbiBzbWRfdGFnc19kZWxldGUoKSB7DQoJZ2xvYmFsICRzbWRfdGFnX3By ZWZzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF90YWdfaWQnLCAnc21k X3RhZ19uYW1lJywgJ3NtZF90YWdfdHlwZScpKSkpOw0KDQoJJG1lc3NhZ2UgPSAkbXNnRXh0 cmEgPSAkcmVwb3J0ID0gJyc7DQoJJG9rID0gJG5vdG9rID0gYXJyYXkoKTsNCg0KCSRwcmVm ID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdF9kZWx1c2VkJywgJ3NtZF90 YWdfdF9kZWx0cmVlJykpOw0KCSRkZWx1ID0gJHByZWZbJ3NtZF90YWdfdF9kZWx1c2VkJ11b J3ZhbCddOw0KCSRkZWx0ID0gJHByZWZbJ3NtZF90YWdfdF9kZWx0cmVlJ11bJ3ZhbCddOw0K DQoJJHNtZF90YWdfaWQgPSBkb19saXN0KCRzbWRfdGFnX2lkKTsNCgkkc21kX3RhZ19uYW1l ID0gZG9fbGlzdCgkc21kX3RhZ19uYW1lKTsNCg0KCSR3aXRoX2NoaWxkID0gc2FmZV9jb2x1 bW4oJ2lkJywgU01EX1RBRywgImlkIElOICgiLmpvaW4oJywnLCAkc21kX3RhZ19pZCkuIikg QU5EICgoKHJndC1sZnQtMSkvMikgPiAwKSBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsN CgkkdXNlZF90YWdzID0gc2FmZV9jb2x1bW4oJ3RhZ19pZCcsIFNNRF9UQUdVLCAidGFnX2lk IElOICgiLmpvaW4oJywnLCAkc21kX3RhZ19pZCkuIikgQU5EIHR5cGU9JyRzbWRfdGFnX3R5 cGUnIik7DQoNCgkkdG9fZGVsID0gJHNtZF90YWdfaWQ7DQoJLy8gUHJvdGVjdCB1c2VkIGFu ZCBjaGlsZCB0YWdzIGlmIHJlcXVpcmVkDQoJaWYgKCRkZWx1ID09IDApIHsNCgkJJHRvX2Rl bCA9IGFycmF5X2RpZmYoJHNtZF90YWdfaWQsICR3aXRoX2NoaWxkLCAkdXNlZF90YWdzKTsN CgkJZm9yZWFjaCAoYXJyYXlfbWVyZ2UoJHdpdGhfY2hpbGQsICR1c2VkX3RhZ3MpIGFzICRk ZWxpZCkgew0KCQkJJG5vdG9rW10gPSAkc21kX3RhZ19uYW1lW2FycmF5X3NlYXJjaCgkZGVs aWQsICRzbWRfdGFnX2lkKV07DQoJCX0NCgl9DQoNCgkkb3JwaGFucyA9IGFycmF5KCk7DQoJ aWYgKCRkZWx0KSB7DQoJCS8vIEFkZCBjaGlsZCB0YWdzIGlmIHRoZXkgYXJlIHRvIGJlIGRl bGV0ZWQNCgkJJGlkcyA9ICR0b19kZWw7DQoJCWZvcmVhY2ggKCR0b19kZWwgYXMgJGRlbGlk KSB7DQoJCQkkcm93ID0gc2FmZV9yb3coJyonLCBTTURfVEFHLCAiaWQgPSAnJGRlbGlkJyBB TkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsNCgkJCSRpZHMgPSBhcnJheV9tZXJnZSgkaWRz LCBzYWZlX2NvbHVtbignaWQnLCBTTURfVEFHLCAidHlwZSA9ICckc21kX3RhZ190eXBlJyBB TkQgKGxmdCBCRVRXRUVOICIuJHJvd1snbGZ0J10uIiBBTkQgIi4kcm93WydyZ3QnXS4iKSIp KTsNCgkJfQ0KCQkkdG9fZGVsID0gYXJyYXlfdW5pcXVlKCRpZHMpOw0KCQkkbXNnRXh0cmEg PSBzbWRfdGFnc19nVHh0KCdjaGlsZHJlbl9hbmQnKTsNCgl9IGVsc2Ugew0KCQkvLyBDb2xs ZWN0IHRoZSBwb3RlbnRpYWwgb3JwaGFucyBhbmQgcHJlcGFyZSB0byBwcm9tb3RlIHRoZW0N CgkJZm9yZWFjaCAoJHRvX2RlbCBhcyAkZGVsaWQpIHsNCgkJCSRjaGlsZHJlbiA9IHNhZmVf Y29sdW1uKCdpZCcsIFNNRF9UQUcsICJwYXJlbnQgPSAnIi4kc21kX3RhZ19uYW1lW2FycmF5 X3NlYXJjaCgkZGVsaWQsICRzbWRfdGFnX2lkKV0uIicgQU5EIHR5cGU9JyRzbWRfdGFnX3R5 cGUnIik7DQoJCQkkY2hpbGRyZW4gPSBhcnJheV9kaWZmKCRjaGlsZHJlbiwgJHRvX2RlbCk7 DQoJCQlpZiAoJGNoaWxkcmVuKSB7DQoJCQkJJG9ycGhhbnMgKz0gJGNoaWxkcmVuOw0KCQkJ fQ0KCQl9DQoJfQ0KDQoJLy8gRXZlcnl0aGluZydzIHByZXBwZWQ6IGJlZ2luIHRoZSBkZWxl dGlvbg0KCSRudW1kZWwgPSBjb3VudCgkdG9fZGVsKTsNCg0KCS8vIE1ha2UgYSBub3RlIG9m IHdoYXQgd2UncmUgYWJvdXQgdG8gZG8gZm9yIHRoZSByZXBvcnQNCgkkYWxsX2RlbHMgPSBz YWZlX3Jvd3MoJ2lkLCBuYW1lJywgU01EX1RBRywgImlkIElOICgiIC4gam9pbignLCcsIHF1 b3RlX2xpc3QoJHRvX2RlbCkpIC4gIikiKTsNCgkkYWxsX25hbWVzID0gYXJyYXkoKTsNCglm b3JlYWNoICgkYWxsX2RlbHMgYXMgJGFuYW1lKSB7DQoJCSRhbGxfbmFtZXNbJGFuYW1lWydp ZCddXSA9ICRhbmFtZVsnbmFtZSddOw0KCX0NCglmb3JlYWNoICgkdG9fZGVsIGFzICRkZWxp ZCkgew0KCQkkb2tbXSA9ICRhbGxfbmFtZXNbJGRlbGlkXTsNCgl9DQoNCgkvLyBGaXJzdCBn ZXQgcmlkIG9mIHRoZSBkaXJlY3QgdGFncw0KCSR3aGVyZSA9ICcgSU4gKCcuam9pbignLCcs ICR0b19kZWwpLicpJzsNCgkkcmV0ID0gc2FmZV9kZWxldGUoU01EX1RBRywgJ2lkJy4kd2hl cmUuIiBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsNCglpZiAoJHJldCkgew0KCQlpZiAo ISRkZWx0KSB7DQoJCQkvLyBQcm9tb3RlIHRoZSBvcnBoYW5zIGlmIHJlcXVpcmVkDQoJCQkk b3JwaGxpc3QgPSBzYWZlX2NvbHVtbignbmFtZScsIFNNRF9UQUcsICJ0eXBlPSckc21kX3Rh Z190eXBlJyBBTkQgaWQgSU4gKCIuam9pbignLCcsICRvcnBoYW5zKS4iKSIpOw0KCQkJc2Fm ZV91cGRhdGUoU01EX1RBRywgInBhcmVudD0ncm9vdCciLCAidHlwZT0nJHNtZF90YWdfdHlw ZScgQU5EIGlkIElOICgiLmpvaW4oJywnLCAkb3JwaGFucykuIikiKTsNCgkJfQ0KCQkvLyBS ZW1vdmUgcmVmZXJlbmNlcyB0byBhbnkgZGVsZXRlZCB0YWdzIGluIGFydGljbGVzIGFuZCBs aW5rZWQgY2F0ZWdvcmllcw0KCQlzYWZlX2RlbGV0ZShTTURfVEFHVSwgJ3RhZ19pZCcuJHdo ZXJlLiIgQU5EIHR5cGU9JyRzbWRfdGFnX3R5cGUnIik7DQoJCXNhZmVfZGVsZXRlKFNNRF9U QUdDLCAndGFnX2lkJy4kd2hlcmUpOw0KDQoJCS8vIEZvcmNlIGFsbCBzbWRfdGFnXyBib3hl cyBjbGVhciBpbiB0aGUgZm9ybQ0KCQkkX1BPU1RbJ3NtZF90YWdfaWQnXSA9ICRfUE9TVFsn c21kX3RhZ19vbmFtZSddID0gJF9QT1NUWydzbWRfdGFnX25hbWUnXSA9ICRfUE9TVFsnc21k X3RhZ190aXRsZSddID0gJF9QT1NUWydzbWRfdGFnX3BhcmVudCddID0gJyc7DQoJfQ0KDQoJ Ly8gQnVpbGQgYW5kIGdlbmVyYXRlIHRoZSBmaW5hbCByZXBvcnQNCglpZiAoJG51bWRlbCA+ IDEpIHsNCgkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCdtdWx0aV9kZWxldGUnLCBhcnJh eSgne251bWJlcn0nID0+ICRudW1kZWwpKTsNCgkJaWYgKCRvaykgew0KCQkJJHJlcG9ydCA9 IHNtZF90YWdzX2dUeHQoJ2RlbGV0ZWRfbGJsJykuam9pbignLCAnLCAkb2spLicuJzsNCgkJ fQ0KCQlpZiAoJG5vdG9rKSB7DQoJCQkkcmVwb3J0IC49IGJyLmJyLnNtZF90YWdzX2dUeHQo J2Vycl9pbl91c2VfbGJsJykuam9pbignLCAnLCAkbm90b2spOw0KCQl9DQoJCWlmICgkb3Jw aGFucykgew0KCQkJJHJlcG9ydCAuPSBici5ici5zbWRfdGFnc19nVHh0KCdlcnJfb3JwaGFu ZWRfbGJsJykuam9pbignLCAnLCAkb3JwaGxpc3QpOw0KCQl9DQoJfSBlbHNlIHsNCgkJaWYg KCRvaykgew0KCQkJJG1lc3NhZ2UgPSBzbWRfdGFnc19nVHh0KCdkZWxldGVkJywgYXJyYXko J3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSwgJ3tuYW1lfScgPT4gam9pbign LCAnLCAkb2spKSkuJG1zZ0V4dHJhOw0KCQl9IGVsc2UgaWYgKCRub3Rvaykgew0KCQkJJG1l c3NhZ2UgPSBzbWRfdGFnc19nVHh0KCdpbl91c2UnLCBhcnJheSgne3R5cGV9JyA9PiB1Y2Zp cnN0KCRzbWRfdGFnX3R5cGUpLCAne25hbWV9JyA9PiBqb2luKCcsICcsICRub3RvaykpKTsN CgkJfQ0KCX0NCg0KCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5cGUsIFNNRF9UQUcp Ow0KDQoJc21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlLCAkcmVwb3J0KTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBNYWtlIHRoZSBwYXNzZWQgdGFnIGEgY2hpbGQg b2YgdGhlIGdpdmVuIHBhcmVudCAoaWYgcG9zc2libGUpDQpmdW5jdGlvbiBzbWRfdGFnX2Fz c2lnbl9wYXJlbnQoJHBhcmlkLCAkY2hpbGRpZCwgJHRhZ190eXBlLCAkY2hpbGRuYW0sICRy ZWJ1aWxkID0gdHJ1ZSkgew0KCWFzc2VydF9pbnQoJGNoaWxkaWQpOw0KCWFzc2VydF9pbnQo JHBhcmlkKTsNCgkkc3RhdHVzID0gYXJyYXkoKTsNCglpZiAoJGNoaWxkaWQgPT0gJHBhcmlk KSB7DQoJCSRzdGF0dXNbXSA9ICdlcnJfc2VsZl9wYXJlbnQnOw0KCX0gZWxzZSB7DQoJCSRl eGlzdHMgPSBzYWZlX2ZpZWxkKCduYW1lJywgU01EX1RBRywgImlkID0gJyIuZG9TbGFzaCgk cGFyaWQpLiInIEFORCB0eXBlID0gJyIuZG9TbGFzaCgkdGFnX3R5cGUpLiInIik7DQoJCSRl eGlzdHMgPSAoJGV4aXN0cykgPyAkZXhpc3RzIDogJ3Jvb3QnOw0KCQkkcmV0ID0gc2FmZV91 cGRhdGUoU01EX1RBRywgInBhcmVudD0nIi5kb1NsYXNoKCRleGlzdHMpLiInIiwgImlkPSci LiRjaGlsZGlkLiInIik7DQoJCWlmICgkcmVidWlsZCkgew0KCQkJLy8gRG9lc24ndCBodXJ0 IHRvIHJlYnVpbGQgaXQgYW55d2F5LCBldmVuIGlmIHRoZSBhc3NpZ25tZW50IGZhaWxzDQoJ CQlyZWJ1aWxkX3RyZWVfZnVsbCgkdGFnX3R5cGUsIFNNRF9UQUcpOw0KCQl9CQ0KCQlpZiAo JHJldCkgew0KCQkJJHN0YXR1c1tdID0gJ3BhcmVudF9saW5rZWQnOw0KCQl9IGVsc2Ugew0K CQkJJHN0YXR1c1tdID0gJ3BhcmVudF9ub3RfbGlua2VkJzsNCgkJfQ0KCX0NCg0KCXJldHVy biAkc3RhdHVzOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQXNz aWduIGEgcGFyZW50IHRvIGEgYnVuY2ggb2YgdGFncyBhdCBvbmNlDQovLyBDaGVhdGluZyBj b2RlIHJlYWxseTsganVzdCBjYWxscyB0aGUgc21kX3RhZ19hc3NpZ25fcGFyZW50IGZvciBl YWNoIHRhZyBidXQgZGVsYXlzIHRoZQ0KLy8gdHJlZSByZWJ1aWxkIHVudGlsIHRoZSBlbmQg Zm9yIHNwZWVkDQpmdW5jdGlvbiBzbWRfdGFnc19tdWx0aV9zZXRfcGFyZW50KCkgew0KCWds b2JhbCAkc21kX3RhZ19wcmVmczsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc21k X3RhZ190eXBlJywgJ3NtZF90YWdfaWQnLCAnc21kX3RhZ19uYW1lJywgJ3NtZF90YWdfZXh0 cmEnKSkpKTsNCg0KCSRtZXNzYWdlID0gJHJlcG9ydCA9ICcnOw0KCSRvayA9ICRub3RvayA9 IGFycmF5KCk7DQoJJHRoZUxpc3QgPSBhcnJheV9jb21iaW5lKGRvX2xpc3QoJHNtZF90YWdf aWQpLCBkb19saXN0KCRzbWRfdGFnX25hbWUpKTsNCg0KCWZvcmVhY2ggKCR0aGVMaXN0IGFz ICRpZHggPT4gJG5hbWUpIHsNCgkJJHN0YXR1cyA9IHNtZF90YWdfYXNzaWduX3BhcmVudCgk c21kX3RhZ19leHRyYSwgJGlkeCwgJHNtZF90YWdfdHlwZSwgJG5hbWUsIGZhbHNlKTsNCgkJ aWYgKGluX2FycmF5KCdwYXJlbnRfbGlua2VkJywgJHN0YXR1cykpIHsNCgkJCSRva1tdID0g JG5hbWU7DQoJCX0gZWxzZSB7DQoJCQlpZiAoKCRwb3MgPSBhcnJheV9zZWFyY2goJ3BhcmVu dF9ub3RfbGlua2VkJywgJHN0YXR1cykpICE9PSBmYWxzZSkgew0KCQkJCXVuc2V0KCRzdGF0 dXNbJHBvc10pOw0KCQkJfQ0KCQkJJG5vdG9rWyRpZHhdID0gJHN0YXR1czsNCgkJfQ0KCX0N Cg0KCWlmICgkb2spIHsNCgkJJHBhcm5hbSA9IHNhZmVfZmllbGQoJ25hbWUnLCBTTURfVEFH LCAiaWQ9JyIuZG9TbGFzaCgkc21kX3RhZ19leHRyYSkuIiciKTsNCgkJJHBhcm5hbSA9ICgk cGFybmFtKSA/ICRwYXJuYW0gOiAncm9vdCc7DQoJCSRyZXBvcnQgPSBzbWRfdGFnc19nVHh0 KCdwYXJlbnRfbGlua2VkX2xibCcsIGFycmF5KCd7cGFyZW50fScgPT4gJHBhcm5hbSkpLmpv aW4oJywgJywgJG9rKS4nLic7DQoJfQ0KCWlmICgkbm90b2spIHsNCgkJJG1zZ3MgPSBhcnJh eSgpOw0KCQlmb3JlYWNoICgkbm90b2sgYXMgJGlkeCA9PiAkcmVhc29ucykgew0KCQkJJHJz biA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkcmVhc29ucyBhcyAkcmVhc29uKSB7DQoJCQkJ JHJzbltdID0gc21kX3RhZ3NfZ1R4dCgkcmVhc29uKTsNCgkJCX0NCgkJCSRtc2dzW10gPSAk dGhlTGlzdFskaWR4XS5zcC4nKCcuam9pbignLycsICRyc24pLicpJzsNCgkJfQ0KCQkkcmVw b3J0IC49IGJyLmJyLnNtZF90YWdzX2dUeHQoJ25vdF9wYXJlbnRfbGlua2VkX2xibCcpLmpv aW4oJywgJywgJG1zZ3MpOw0KCX0NCg0KCS8vIFJlYnVpbGQgdGhlIHRyZWUgbm93IGFsbCB0 aGUgbWFuaXB1bGF0aW9uIGhhcyBiZWVuIGRvbmUNCglyZWJ1aWxkX3RyZWVfZnVsbCgkc21k X3RhZ190eXBlLCBTTURfVEFHKTsNCg0KCXNtZF90YWdzX21hbmFnZSgkbWVzc2FnZSwgJHJl cG9ydCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTGlua3MgdGhl IHBhc3NlZCB0YWcgd2l0aCB0aGUgZ2l2ZW4gY2F0ZWdvcnkNCmZ1bmN0aW9uIHNtZF90YWdf YXNzaWduX2NhdGVnb3J5KCRwYXJuYW0sICRjaGlsZGlkLCAkY2F0X3R5cGUsICRjaGlsZG5h bSkgew0KCWFzc2VydF9pbnQoJGNoaWxkaWQpOw0KCSRzdGF0dXMgPSBhcnJheSgpOw0KDQoJ Ly8gVW5saW5rIGlmIHBhcmVudCBjYXRlZ29yeSBuYW1lIGlzIGVtcHR5DQoJaWYgKCRwYXJu YW0gPT0gJycpIHsNCgkJc2FmZV9kZWxldGUoU01EX1RBR0MsICJ0YWdfaWQ9JyIuZG9TbGFz aCgkY2hpbGRpZCkuIiciKTsNCgkJJHN0YXR1c1tdID0gJ2NhdGVnb3J5X3VubGlua2VkJzsN Cgl9IGVsc2Ugew0KCQkkZXhpc3RzID0gc2FmZV9maWVsZCgnaWQnLCAndHhwX2NhdGVnb3J5 JywgIm5hbWUgPSAnIi5kb1NsYXNoKCRwYXJuYW0pLiInIEFORCB0eXBlID0gJyIuZG9TbGFz aCgkY2F0X3R5cGUpLiInIik7DQoJCWlmICgkZXhpc3RzKSB7DQoJCQlzYWZlX2RlbGV0ZShT TURfVEFHQywgInRhZ19pZD0nIi5kb1NsYXNoKCRjaGlsZGlkKS4iJyIpOw0KCQkJJHJldCA9 IHNhZmVfaW5zZXJ0KFNNRF9UQUdDLCAiY2F0X2lkPSciLmRvU2xhc2goJGV4aXN0cykuIics IHRhZ19pZCA9ICciLmRvU2xhc2goJGNoaWxkaWQpLiInIik7DQoJCQlpZiAoJHJldCkgew0K CQkJCSRzdGF0dXNbXSA9ICdjYXRlZ29yeV9saW5rZWQnOw0KCQkJfSBlbHNlIHsNCgkJCQkk c3RhdHVzW10gPSAnY2F0ZWdvcnlfdW5saW5rZWQnOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVy biAkc3RhdHVzOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQXNz aWduIGEgYnVuY2ggb2YgdGFncyB0byBhIGNhdGVnb3J5DQovLyBDaGVhdGluZ2x5IGNhbGxz IHNtZF90YWdfYXNzaWduX2NhdGVnb3J5IG11bHRpcGxlIHRpbWVzDQpmdW5jdGlvbiBzbWRf dGFnc19tdWx0aV9jYXRsaW5rKCkgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmczsNCglleHRy YWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX3RhZ190eXBlJywgJ3NtZF90YWdfaWQnLCAn c21kX3RhZ19uYW1lJywgJ3NtZF90YWdfZXh0cmEnKSkpKTsNCg0KCSRtZXNzYWdlID0gJHJl cG9ydCA9ICcnOw0KCSRvayA9ICRub3RvayA9IGFycmF5KCk7DQoNCgkkdGhlTGlzdCA9IGFy cmF5X2NvbWJpbmUoZG9fbGlzdCgkc21kX3RhZ19pZCksIGRvX2xpc3QoJHNtZF90YWdfbmFt ZSkpOw0KDQoJLy8gQWRkIGluIGFueSBjaGlsZCBlbGVtZW50cyBzaW5jZSB0aGV5IGFsbCBu ZWVkIHRvIHRha2UgdGhlIGNhdGVnb3J5IHRvbw0KCWZvcmVhY2ggKCR0aGVMaXN0IGFzICRp ZHggPT4gJG5hbWUpIHsNCgkJJHJvdyA9IHNhZmVfcm93KCcqJywgU01EX1RBRywgImlkPSci LmRvU2xhc2goJGlkeCkuIiciKTsNCgkJJHJzID0gc2FmZV9yb3dzKCdpZCwgbmFtZScsIFNN RF9UQUcsICJ0eXBlID0gJyIuZG9TbGFzaCgkc21kX3RhZ190eXBlKS4iJyBBTkQgKGxmdCBC RVRXRUVOICIgLiRyb3dbJ2xmdCddLiAiIEFORCAiIC4kcm93WydyZ3QnXS4gIikiKTsNCgkJ aWYgKCRycykgew0KCQkJZm9yZWFjaCAoJHJzIGFzICRyZWMpIHsNCgkJCQkkdGhlTGlzdFsk cmVjWydpZCddXSA9ICRyZWNbJ25hbWUnXTsNCgkJCX0NCgkJfQ0KCX0NCg0KCWZvcmVhY2gg KCR0aGVMaXN0IGFzICRpZHggPT4gJG5hbWUpIHsNCgkJJHN0YXR1cyA9IHNtZF90YWdfYXNz aWduX2NhdGVnb3J5KCRzbWRfdGFnX2V4dHJhLCAkaWR4LCAkc21kX3RhZ190eXBlLCAkbmFt ZSk7DQoJCWlmIChpbl9hcnJheSgnY2F0ZWdvcnlfbGlua2VkJywgJHN0YXR1cykpIHsNCgkJ CSRva1tdID0gJG5hbWU7DQoJCX0gZWxzZWlmIChpbl9hcnJheSgnY2F0ZWdvcnlfdW5saW5r ZWQnLCAkc3RhdHVzKSkgew0KCQkJJG5vdG9rWyRpZHhdID0gJHN0YXR1czsNCgkJfQ0KCX0N Cg0KCWlmICgkb2spIHsNCgkJJHJlcG9ydCA9IHNtZF90YWdzX2dUeHQoJ2NhdGVnb3J5X2xp bmtlZF9sYmwnLCBhcnJheSgne2NhdGVnb3J5fScgPT4gJHNtZF90YWdfZXh0cmEpKS5qb2lu KCcsICcsICRvaykuJy4nOw0KCX0NCglpZiAoJG5vdG9rKSB7DQoJCSRtc2dzID0gYXJyYXko KTsNCgkJZm9yZWFjaCAoJG5vdG9rIGFzICRpZHggPT4gJHJlYXNvbnMpIHsNCgkJCSRtc2dz W10gPSAkdGhlTGlzdFskaWR4XTsNCgkJfQ0KCQkkcmVwb3J0IC49IGJyLmJyLnNtZF90YWdz X2dUeHQoJ2NhdGVnb3J5X3VubGlua2VkX2xibCcpLmpvaW4oJywgJywgJG1zZ3MpOw0KCX0N Cg0KCXNtZF90YWdzX21hbmFnZSgkbWVzc2FnZSwgJHJlcG9ydCk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF90YWdzX3NhdmVfcGFuZV9zdGF0ZSgpIHsNCgkkcGFuZXMgPSBh cnJheSgnc21kX3RhZ19maWx0ZXJzJyk7DQoJJHBhbmUgPSBncHMoJ3BhbmUnKTsNCglpZiAo aW5fYXJyYXkoJHBhbmUsICRwYW5lcykpDQoJew0KCQlzZXRfcHJlZigicGFuZV97JHBhbmV9 X3Zpc2libGUiLCAoZ3BzKCd2aXNpYmxlJykgPT0gJ3RydWUnID8gJzEnIDogJzAnKSwgJ3Nt ZF90YWdzJywgUFJFRl9ISURERU4sICd5ZXNub3JhZGlvJywgMCwgUFJFRl9QUklWQVRFKTsN CgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9IGVsc2Ugew0KCQlzZW5kX3htbF9yZXNwb25z ZShhcnJheSgnaHR0cC1zdGF0dXMnID0+ICc0MDAgQmFkIFJlcXVlc3QnKSk7DQoJfQ0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFsbG93IHRhZ3MgdG8gYmUgaW1w b3J0ZWQgZnJvbSB0cnVfdGFncyAvIHJzc191Yw0KZnVuY3Rpb24gc21kX3RhZ3Nfc3luYygk bWVzc2FnZT0nJywgJHJlcG9ydD0nJykgew0KCWdsb2JhbCAkc21kX3RhZ19wcmVmcywgJHBs dWdpbnMsICRzbWRfdGFnc19zdHlsZXM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnc21kX3RhZ3Nfc3luY190eXBlJywgJ3NtZF90YWdzX3N5bmNfc2VjdGlvbicsICdzbWRf dGFnc19zeW5jX3BhcmVudCcsICdzbWRfdGFnc19kZWxldGVfb3JpZycsICdzbWRfdGFnc19p bXBvcnRfdGFnX3BhcmVudCcsICdzbWRfdGFnc19pbXBvcnRfY2F0X3BhcmVudCcsICdzbWRf dGFnc19pbXBvcnRfZm9yY2VfcGFyZW50JywgJ3NtZF90YWdzX2ltcG9ydF9mb3JjZV9jYXQn LCAnc21kX3RhZ3NfZG9faW1wb3J0JykpKSk7DQoNCgkkY3RybHMgPSBzbWRfdGFnc19wcmVm X2dldChhcnJheSgnc21kX3RhZ19wX2xpbmtjYXQnLCAnc21kX3RhZ190X2VucmVwJyksIDEp Ow0KCSRjbGluayA9ICRjdHJsc1snc21kX3RhZ19wX2xpbmtjYXQnXVsndmFsJ107DQoJJHNo b3dyZXAgPSAkcmVwb3J0ICYmICRjdHJsc1snc21kX3RhZ190X2VucmVwJ11bJ3ZhbCddOw0K DQoJcGFnZXRvcChzbWRfdGFnc19nVHh0KCdzeW5jX2xibCcpLCRtZXNzYWdlKTsNCglleHRy YWN0KHNtZF90YWdzX3ByZWZzX2J1dHRvbnMoKSk7DQoNCgkkcGx1Z190dCA9IChpc19hcnJh eSgkcGx1Z2lucykgJiYgaW5fYXJyYXkoJ3RydV90YWdzJywkcGx1Z2lucykpOw0KCSRwbHVn X3VjID0gKGlzX2FycmF5KCRwbHVnaW5zKSAmJiBpbl9hcnJheSgncnNzX3VubGltaXRlZF9j YXRlZ29yaWVzJywkcGx1Z2lucykpOw0KCSRwbHVncyA9ICRwbHVnX3R0IHx8ICRwbHVnX3Vj Ow0KDQoJLy8gUHJlZnMgY2hlY2sNCgkkcHJlZnNldCA9IHNtZF90YWdzX3ByZWZfZ2V0KGFy cmF5X2tleXMoJHNtZF90YWdfcHJlZnNbMF0pKTsNCgkkbnVtUmVxUHJlZnMgPSBjb3VudCgk c21kX3RhZ19wcmVmc1swXSk7DQoJJG51bVByZWZzID0gY291bnQoJHByZWZzZXQpOw0KDQoJ Ly8gUGVyZm9ybSB0aGUgaW1wb3J0IHZpYSBBSkFYIGR1ZSB0byB0aGUgcXVhbnRpdHkgb2Yg dGFncyB0aGF0IG1heSBiZSBpbnZvbHZlZA0KCWlmICgkc21kX3RhZ3NfZG9faW1wb3J0KSB7 DQoJCSRpbXBvcHRzID0gYXJyYXkoDQoJCQknc21kX3RhZ3Nfc3luY190eXBlJyA9PiAkc21k X3RhZ3Nfc3luY190eXBlLA0KCQkJJ3NtZF90YWdzX3N5bmNfc2VjdGlvbicgPT4gJHNtZF90 YWdzX3N5bmNfc2VjdGlvbiwNCgkJCSdzbWRfdGFnc19zeW5jX3BhcmVudCcgPT4gJHNtZF90 YWdzX3N5bmNfcGFyZW50LA0KCQkJJ3NtZF90YWdzX2RlbGV0ZV9vcmlnJyA9PiAkc21kX3Rh Z3NfZGVsZXRlX29yaWcsDQoJCQknc21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnQnID0+ICRz bWRfdGFnc19pbXBvcnRfdGFnX3BhcmVudCwNCgkJCSdzbWRfdGFnc19pbXBvcnRfY2F0X3Bh cmVudCcgPT4gJHNtZF90YWdzX2ltcG9ydF9jYXRfcGFyZW50LA0KCQkJJ3NtZF90YWdzX2lt cG9ydF9mb3JjZV9wYXJlbnQnID0+ICRzbWRfdGFnc19pbXBvcnRfZm9yY2VfcGFyZW50LA0K CQkJJ3NtZF90YWdzX2ltcG9ydF9mb3JjZV9jYXQnID0+ICRzbWRfdGFnc19pbXBvcnRfZm9y Y2VfY2F0LA0KCQkpOw0KCQlzbWRfdGFnc19pbXBvcnQoJGltcG9wdHMpOw0KCX0NCg0KCSRx cyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICJzbWRfdGFncyIsDQoJKTsNCg0KCSRxc1ZhcnMg PSAiaW5kZXgucGhwIi5qb2luX3FzKCRxcyk7DQoNCgkvLyBJbmplY3Qgc3R5bGVzDQoJZWNo byAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nIC4gJHNtZF90YWdzX3N0eWxlc1sncmVwb3J0 J10gLiAnPC9zdHlsZT4nOw0KDQoJZWNobyA8PDxFT1MNCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0Ij4NCmpRdWVyeShmdW5jdGlvbigpIHsNCglmdW5jdGlvbiBzbWRfdGFnUmVz dHJpY3QodHlwKSB7DQoJCWdyYWJjYXQgPSBqUXVlcnkoIiNzbWRfdGFnc19pbXBvcnRfY2F0 X3BhcmVudCBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIHNtZF9jbHIgPSAoKCd7 JGNsaW5rfSc9PScwJykgPyAnMicgOiAoKGdyYWJjYXQ9PScnKSA/ICcyJyA6ICcnKSk7DQoN CgkJaWYgKGdyYWJjYXQgIT0gInVuZGVmaW5lZCIgfHwgZ3JhYmNhdCAhPSAnJykgew0KCQkJ alF1ZXJ5LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdfcGFyZW50bGlzdCIs IG5hbWU6ICdzbWRfdGFnX3BhcmVudCcsIHR5cGU6IHR5cCwgY2F0OiBncmFiY2F0LCBsaXN0 b25seTogdHJ1ZSwgaHRtbF9pZDogJ3NtZF90YWdzX2ltcG9ydF90YWdfcGFyZW50JywgY2xy OiBzbWRfY2xyIH0sDQoJCQkJZnVuY3Rpb24oZGF0YSkgew0KCQkJCQlqUXVlcnkoIiNzbWRf dGFnc19pbXBvcnRfdGFnX3BhcmVudF9ob2xkZXIiKS5odG1sKGRhdGEpOw0KCQkJCX0NCgkJ CSk7DQoJCX0NCgl9DQoNCglzbWRfdGFnUmVzdHJpY3QoJ2FydGljbGUnKTsNCg0KCS8vVE9E TzogRmluZCBvdXQgd2h5IHRoaXMgZG9lc24ndCB3b3JrDQoJalF1ZXJ5KCIjc21kX3RhZ3Nf aW1wb3J0X3RhZ19wYXJlbnRfaG9sZGVyIHNlbGVjdCBvcHRpb25bdmFsdWU9J3skc21kX3Rh Z3NfaW1wb3J0X3RhZ19wYXJlbnR9J10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KDQoJ aWYgKCd7JGNsaW5rfScgPT0gJzEnKSB7DQoJCWpRdWVyeSgiI3NtZF90YWdzX2ltcG9ydF9j YXRfcGFyZW50IikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQkJc21kX3RhZ1Jlc3RyaWN0KCdh cnRpY2xlJyk7DQoJCX0pOw0KCX0NCglpZiAoJ3skc2hvd3JlcH0nID09ICcxJykgew0KCQlz bWRfdGFnc190b2dnbGVfcmVwb3J0KCk7DQoJfQ0KfSk7DQpmdW5jdGlvbiBzbWRfdGFnc190 b2dnbGVfcmVwb3J0KCkgew0KCWpRdWVyeSgiI3NtZF90YWdfcmVwb3J0X3BhbmUiKS50b2dn bGUoJ25vcm1hbCcpOw0KfQ0KPC9zY3JpcHQ+DQpFT1M7DQoNCgkvLyBUaGUgdGFnIHN5bmMg cHJlZmVyZW5jZXMNCgllY2hvIHN0YXJ0VGFibGUoJ2NvbnRyb2wnLCcnLCcnLDUpOw0KCWlm IChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCS8vIFRhYmxlcyBpbnN0YWxsZWQNCgkJ aWYgKCRudW1QcmVmcyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJCS8vIFByZWZzIGFsbCBpbnN0 YWxsZWQNCgkJCWVjaG8gdHIoDQoJCQkJZkxhYmVsQ2VsbChzbWRfdGFnc19nVHh0KCdjb250 cm9sJykuJzonKQ0KCQkJCS4gdGRhKCRidG5QcmVmcywgJGJ0blN0eWxlKQ0KCQkJCS4gdGRh KCRidG5NYW5hZ2UsICRidG5TdHlsZSkNCgkJCSk7DQoJCQllY2hvIGVuZFRhYmxlKCk7DQoJ CQllY2hvICc8ZGl2IGlkPSJzbWRfdGFnX3JlcG9ydF9wYW5lIj48ZGl2PjxpbnB1dCB0eXBl PSJidXR0b24iIGNsYXNzPSJwdWJsaXNoIHNtZF90YWdzX2J0bl9vayIgdmFsdWU9IicuZ1R4 dCgnb2snKS4nIiBvbmNsaWNrPSJzbWRfdGFnc190b2dnbGVfcmVwb3J0KCk7IiAvPjxoMj4n LnNtZF90YWdzX2dUeHQoJ3JlcG9ydF9sYmwnKS4nPC9oMj4nLiRyZXBvcnQuJzwvZGl2Pjwv ZGl2Pic7DQoJCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGlkPSJzbWRfc3luY2l0IiBh Y3Rpb249Ij9ldmVudD1zbWRfdGFncyZzdGVwPXNtZF90YWdzX3N5bmMiPic7DQoJCQllY2hv IHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJCWlmICgkcGx1Z3MpIHsNCgkJCQllY2hvIHRyKHRk YShzdHJvbmcoc21kX3RhZ3NfZ1R4dCgnc3luY19sYmwnKSkuJyAnLiRidG5IZWxwLCAnIGNv bHNwYW49IjUiJykpOw0KDQoJCQkJJGxibFN0eWxlID0gJyBzdHlsZT0idGV4dC1hbGlnbjog cmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Iic7DQoNCgkJCQllY2hvIHRyKHRkY3Mo aGVkKHNtZF90YWdzX2dUeHQoJ3N5bmNfcGx1Z2luX29wdHMnKSwgJyBjbGFzcz0icHJlZi1o ZWFkaW5nIicpLCA0KSk7DQoNCgkJCQllY2hvIHRyKA0KCQkJCQkJdGRhKCc8bGFiZWwgZm9y PSJzbWRfdGFnc19zeW5jX3R5cGUiPicuc21kX3RhZ3NfZ1R4dCgnc3luY190eXBlX2xibCcp Lic6PC9sYWJlbD4nLCAkbGJsU3R5bGUpDQoJCQkJCQkudGRjcygoKCRwbHVnX3R0KSA/IHJh ZGlvKCdzbWRfdGFnc19zeW5jX3R5cGUnLDAsKChlbXB0eSgkc21kX3RhZ3Nfc3luY190eXBl KSkgPyAxIDogKCRwbHVnX3R0PzE6MCkgKSkuc21kX3RhZ3NfZ1R4dCgnc3luY190eXBlMScp LicgJyA6ICcnKSAuICgoJHBsdWdfdWMpID8gcmFkaW8oJ3NtZF90YWdzX3N5bmNfdHlwZScs MSwoKCRzbWRfdGFnc19zeW5jX3R5cGU9PScxJykgPyAxIDogKCgkcGx1Z191YyAmJiAhJHBs dWdfdHQpPzE6MCkgKSkuc21kX3RhZ3NfZ1R4dCgnc3luY190eXBlMicpLicgJyA6ICcnKSAs MykNCgkJCQkJKTsNCg0KCQkJCS8vIFNlY3Rpb24gaW1wb3J0DQoJCQkJJHJzID0gc2FmZV9j b2x1bW4oJ25hbWUnLCAndHhwX3NlY3Rpb24nLCAibmFtZSAhPSAnZGVmYXVsdCciKTsNCgkJ CQlpZiAoJHJzKSB7DQoJCQkJCSRvdXQgPSB0YWcoc2VsZWN0SW5wdXQoJ3NtZF90YWdzX3N5 bmNfc2VjdGlvbicsICRycywgJHNtZF90YWdzX3N5bmNfc2VjdGlvbiwgdHJ1ZSksICd0ZCcs ICcgY29sc3Bhbj0iMyInKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkb3V0ID0gdGFnKHNtZF90 YWdzX2dUeHQoJ25vX3NlY3Rpb25zJyksICd0ZCcsICcgY29sc3Bhbj0iMyInKTsNCgkJCQl9 DQoNCgkJCQllY2hvIHRyKHRkYSgnPGxhYmVsIGZvcj0ic21kX3RhZ3Nfc3luY19zZWN0aW9u Ij4nLnNtZF90YWdzX2dUeHQoJ3N5bmNfc2VjdGlvbl9sYmwnKS4nOjwvbGFiZWw+JywgJGxi bFN0eWxlKSAuICRvdXQpOw0KDQoJCQkJLy8gU3RhcnQgYXQgcGFyZW50IGNhdGVnb3J5IChy c3NfdWMgb25seSkNCgkJCQkvLyBUaGUgbGlzdCBpcyBwb3B1bGF0ZWQgYW55d2F5IGV2ZW4g aWYgdGhlIHBsdWdpbiBpc24ndCBhY3RpdmUgYmVjYXVzZSAkcnNDYXRzIGlzIHVzZWQgbGF0 ZXINCgkJCQlpZiAoJGNsaW5rKSB7DQoJCQkJCSRyc0NhdHMgPSBnZXRUcmVlKCdyb290Jywg J2FydGljbGUnKTsNCgkJCQkJaWYgKCRyc0NhdHMpIHsNCgkJCQkJCSRjYXRsaXN0ID0gdGFn KHRyZWVTZWxlY3RJbnB1dCgnc21kX3RhZ3Nfc3luY19wYXJlbnQnLCAkcnNDYXRzLCAkc21k X3RhZ3Nfc3luY19wYXJlbnQsICdzbWRfdGFnc19zeW5jX3BhcmVudCcsIDM1KS4oKCRwbHVn X3R0KSA/IHNtZF90YWdzX2dUeHQoJ3Jzc191Y19vbmx5JykgOiAnJyksICd0ZCcsICcgY29s c3Bhbj0iMyInKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjYXRsaXN0ID0gdGFnKHNtZF90 YWdzX2dUeHQoJ25vX3BhcmVudCcpLCAndGQnLCAnIGNvbHNwYW49IjMiJyk7DQoJCQkJCX0N CgkJCQkJaWYgKCRwbHVnX3VjKSB7DQoJCQkJCQllY2hvIHRyKHRkYSgnPGxhYmVsIGZvcj0i c21kX3RhZ3Nfc3luY19wYXJlbnQiPicuc21kX3RhZ3NfZ1R4dCgnc3luY19wYXJlbnRfbGJs JykuJzo8L2xhYmVsPicsICRsYmxTdHlsZSkgLiAkY2F0bGlzdCk7DQoJCQkJCX0NCgkJCQl9 DQoNCgkJCQkvLyBEZWxldGUgb3JpZ2luYWwNCgkJCQllY2hvIHRyKA0KCQkJCQkJdGRhKCc8 bGFiZWwgZm9yPSJzbWRfdGFnc19kZWxldGVfb3JpZyI+Jy5zbWRfdGFnc19nVHh0KCdzeW5j X2RlbGV0ZV9vcmlnX2xibCcpLic6PC9sYWJlbD4nLCAkbGJsU3R5bGUpDQoJCQkJCQkudGRj cyh5ZXNub1JhZGlvKCdzbWRfdGFnc19kZWxldGVfb3JpZycsICRzbWRfdGFnc19kZWxldGVf b3JpZyksMykNCgkJCQkJKTsNCg0KCQkJCWVjaG8gdHIodGRjcyhoZWQoc21kX3RhZ3NfZ1R4 dCgnc3luY19pbXBvcnRfb3B0cycpLCAnIGNsYXNzPSJwcmVmLWhlYWRpbmciJyksIDQpKTsN CgkJCQkvLyBBc3NpZ24gdG8gY2F0ZWdvcnkNCgkJCQlpZiAoJGNsaW5rKSB7DQoJCQkJCWlm ICgkcnNDYXRzKSB7DQoJCQkJCQkkY2F0bGlzdCA9IHRhZyh0cmVlU2VsZWN0SW5wdXQoJ3Nt ZF90YWdzX2ltcG9ydF9jYXRfcGFyZW50JywgJHJzQ2F0cywgJHNtZF90YWdzX2ltcG9ydF9j YXRfcGFyZW50LCAnc21kX3RhZ3NfaW1wb3J0X2NhdF9wYXJlbnQnLCAzNSksICd0ZCcsICcg Y29sc3Bhbj0iMyInKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjYXRsaXN0ID0gdGFnKHNt ZF90YWdzX2dUeHQoJ25vX3BhcmVudCcpLCAndGQnLCAnIGNvbHNwYW49IjMiJyk7DQoJCQkJ CX0NCg0KCQkJCQllY2hvIHRyKHRkYSgnPGxhYmVsIGZvcj0ic21kX3RhZ3NfaW1wb3J0X2Nh dF9wYXJlbnQiPicuc21kX3RhZ3NfZ1R4dCgnc3luY19wYXJlbnRfY2F0X2xibCcpLic6PC9s YWJlbD4nLCAkbGJsU3R5bGUpIC4gJGNhdGxpc3QpOw0KCQkJCQllY2hvIHRyKHRkYSgnPGxh YmVsIGZvcj0ic21kX3RhZ3NfaW1wb3J0X2ZvcmNlX2NhdCI+Jy5zbWRfdGFnc19nVHh0KCdz eW5jX2ZvcmNlX2NhdF9sYmwnKS4nOjwvbGFiZWw+JywgJGxibFN0eWxlKSAuIHRkKGNoZWNr Ym94KCdzbWRfdGFnc19pbXBvcnRfZm9yY2VfY2F0JywgMSwgJHNtZF90YWdzX2ltcG9ydF9m b3JjZV9jYXQpKSk7DQoJCQkJfQ0KDQoJCQkJLy8gQXNzaWduIHRvIHBhcmVudCB0YWcNCgkJ CQllY2hvIHRyKHRkYSgnPGxhYmVsIGZvcj0ic21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnQi Picuc21kX3RhZ3NfZ1R4dCgnc3luY19wYXJlbnRfdGFnX2xibCcpLic6PC9sYWJlbD4nLCAk bGJsU3R5bGUpLiB0ZCgnPGRpdiBpZD0ic21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnRfaG9s ZGVyIj48L2Rpdj4nKSk7DQoJCQkJZWNobyB0cih0ZGEoJzxsYWJlbCBmb3I9InNtZF90YWdz X2ltcG9ydF9mb3JjZV9wYXJlbnQiPicuc21kX3RhZ3NfZ1R4dCgnc3luY19mb3JjZV9wYXJl bnRfbGJsJykuJzo8L2xhYmVsPicsICRsYmxTdHlsZSkgLiB0ZChjaGVja2JveCgnc21kX3Rh Z3NfaW1wb3J0X2ZvcmNlX3BhcmVudCcsIDEsICRzbWRfdGFnc19pbXBvcnRfZm9yY2VfcGFy ZW50KSkpOw0KDQoJCQkJLy8gUmVwb3J0IHZpZXdlcg0KCQkJCWVjaG8gdHIodGRhKCc8YSBu YW1lPSJzbWRfdGFnc19yZXBvcnRfdG9nZ2xlciIgb25jbGljaz0ic21kX3RhZ3NfdG9nZ2xl X3JlcG9ydCgpOyI+Jy5zbWRfdGFnc19nVHh0KCdyZWNlbnRfcmVwb3J0JykuJzwvYT4nLCAn IGNsYXNzPSJub2xpbmUiJykudGRhKHNtZF90YWdzX2dUeHQoJ2ltcG9ydF9yZXN1bHRzX3B0 MScpIC4gJzxzcGFuIGlkPSJzbWRfdGFnc19pbXBvcnRfaWN1cnIiPjwvc3Bhbj48c3BhbiBp ZD0ic21kX3RhZ3NfaW1wb3J0X2l0b3QiPjwvc3Bhbj4gJyAuIHNtZF90YWdzX2dUeHQoJ2lt cG9ydF9yZXN1bHRzX3B0MicpIC4gJzxzcGFuIGlkPSJzbWRfdGFnc19pbXBvcnRfbG5rX2N1 cnIiPjwvc3Bhbj4nLCAnIGNsYXNzPSJub2xpbmUiJykpOw0KDQoJCQl9IGVsc2Ugew0KCQkJ CWVjaG8gdHIodGQoc21kX3RhZ3NfZ1R4dCgnc3luY19wbHVnc19ub3RfaW5zdGFsbGVkJykp KTsNCgkJCX0NCg0KCQkJZWNobyB0cih0ZGEoJGJ0blN5bmNHbywgJGJ0blN0eWxlKSk7DQoJ CQllY2hvICc8L2Zvcm0+JzsNCgkJfSBlbHNlIGlmICgkbnVtUHJlZnMgPiAwICYmICRudW1Q cmVmcyA8ICRudW1SZXFQcmVmcykgew0KCQkJLy8gUHJlZnMgcG9zc2libHkgY29ycnVwdCwg b3IgcGx1Z2luIHVwZGF0ZWQNCgkJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfdGFnc19nVHh0 KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCS5zbWRfdGFnc19nVHh0KCdwcmVmc19zb21l X2V4cGxhaW4nKS5ici5icg0KCQkJCQkuc21kX3RhZ3NfZ1R4dCgncHJlZnNfc29tZV9vcHRz MScpLCAnIGNvbHNwYW49IjIiJykNCgkJCSk7DQoJCQllY2hvIHRyKA0KCQkJCXRkYSgkYnRu UmVtb3ZlLCRidG5TdHlsZSkNCgkJCQkuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKQ0K CQkJKTsNCgkJfSBlbHNlIHsNCgkJCS8vIFByZWZzIG5vdCBpbnN0YWxsZWQNCgkJCWVjaG8g dHIodGRhKHNtZF90YWdzX2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFu PSIyIicpKTsNCgkJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgkJ fQ0KCX0gZWxzZSB7DQoJCS8vIFRhYmxlcyBub3QgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRh KHN0cm9uZyhzbWRfdGFnc19nVHh0KCdwcmVmc19zb21lX3RibCcpKS5ici5icg0KCQkJCS5z bWRfdGFnc19nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5zbWRfdGFn c19nVHh0KCdwcmVmc19zb21lX29wdHMyJyksICcgY29sc3Bhbj0iMiInKQ0KCQkpOw0KCQll Y2hvIHRyKHRkYSgkYnRuSW5zdGFsbFRibCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5k VGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBJbXBvcnQg dGFncyBmcm9tIG90aGVyIHBsdWdpbnMNCmZ1bmN0aW9uIHNtZF90YWdzX2ltcG9ydCgkc21k X3RhZ19vcHRpb25zKSB7DQoJZXh0cmFjdCgkc21kX3RhZ19vcHRpb25zKTsNCg0KCSRtZXNz YWdlID0gJyc7DQoJJGlwYXJlbnQgPSAoJHNtZF90YWdzX3N5bmNfcGFyZW50KSA/ICIgQU5E IHBhcmVudCA9ICckc21kX3RhZ3Nfc3luY19wYXJlbnQnICIgOiAnJzsNCg0KCSRycyA9IHNh ZmVfcm93cygnKicsICd0ZXh0cGF0dGVybicsICgoJHNtZF90YWdzX3N5bmNfc2VjdGlvbikg PyAiU2VjdGlvbj0nIi5kb1NsYXNoKCRzbWRfdGFnc19zeW5jX3NlY3Rpb24pLiInIiA6ICcx PTEnKSk7DQoJJHJvd19jdHIgPSAkdGFnX2N0ciA9IDA7DQoJJHRvdGFsID0gY291bnQoJHJz KTsNCgkkY3RybHMgPSBzbWRfdGFnc19wcmVmX2dldChhcnJheSgnc21kX3RhZ190X2VucmVw JyksIDEpOw0KCSRzaG93cmVwID0gJGN0cmxzWydzbWRfdGFnX3RfZW5yZXAnXVsndmFsJ107 DQoNCgllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JzsNCgllY2hvICJ2 YXIgaWN0ciA9IDA7IHZhciBpdG90ID0geyR0b3RhbH07IHZhciBsbmtfY3RyID0gMDsiOw0K CWVjaG8gJ2pRdWVyeShmdW5jdGlvbigpIHsnOw0KCWVjaG8gJ2pRdWVyeSgiI3NtZF90YWdz X2ltcG9ydF9pdG90IikudGV4dCgiLycuJHRvdGFsLiciKTsnOw0KCWlmICgkcnMpIHsNCgkJ Zm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCSRpZGF0YSA9ICgkc21kX3RhZ3Nfc3luY190 eXBlID09ICcwJykgPyBkb1NsYXNoKCRyb3dbJ0tleXdvcmRzJ10pIDogZG9TbGFzaCgkcm93 WydJRCddKTsNCgkJCSRpdGl0bGUgPSBkb1NsYXNoKCRyb3dbJ1RpdGxlJ10pOw0KCQkJJGFy dGlkID0gZG9TbGFzaCgkcm93WydJRCddKTsNCgkJCWVjaG8gPDw8RU9KUw0KCQkJc2VuZEFz eW5jRXZlbnQoDQoJCQl7DQoJCQkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQkJCXN0 ZXA6ICdzbWRfdGFnc19pbXBvcnRfb25lJywNCgkJCQlzbWRfdGFnc19zeW5jX3R5cGU6ICd7 JHNtZF90YWdzX3N5bmNfdHlwZX0nLA0KCQkJCXNtZF90YWdzX3N5bmNfaWQ6ICd7JGFydGlk fScsDQoJCQkJc21kX3RhZ3Nfc3luY19kYXRhOiAneyRpZGF0YX0nLA0KCQkJCXNtZF90YWdz X3N5bmNfdGl0bGU6ICd7JGl0aXRsZX0nLA0KCQkJCXNtZF90YWdzX3N5bmNfcGFyZW50OiAn eyRpcGFyZW50fScsDQoJCQkJc21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnQ6ICd7JHNtZF90 YWdzX2ltcG9ydF90YWdfcGFyZW50fScsDQoJCQkJc21kX3RhZ3NfaW1wb3J0X2NhdF9wYXJl bnQ6ICd7JHNtZF90YWdzX2ltcG9ydF9jYXRfcGFyZW50fScsDQoJCQkJc21kX3RhZ3NfaW1w b3J0X2ZvcmNlX3BhcmVudDogJ3skc21kX3RhZ3NfaW1wb3J0X2ZvcmNlX3BhcmVudH0nLA0K CQkJCXNtZF90YWdzX2ltcG9ydF9mb3JjZV9jYXQ6ICd7JHNtZF90YWdzX2ltcG9ydF9mb3Jj ZV9jYXR9JywNCgkJCQlzbWRfdGFnc19kZWxldGVfb3JpZzogJ3skc21kX3RhZ3NfZGVsZXRl X29yaWd9Jw0KCQkJfSwgc21kX3RhZ3NfZ3JvdXBfZmVlZGJhY2spOw0KRU9KUzsNCgkJfQ0K CQllY2hvICd9KTsnOw0KCQllY2hvIDw8PEVPSlMNCgkJZnVuY3Rpb24gc21kX3RhZ3NfZ3Jv dXBfZmVlZGJhY2soZGF0YSkgew0KCQkJaWN0cisrOw0KCQkJalF1ZXJ5KCcjc21kX3RhZ3Nf aW1wb3J0X2ljdXJyJykudGV4dChpY3RyKTsNCgkJCWpRdWVyeSgnI3NtZF90YWdfcmVwb3J0 X3BhbmUnKS5hcHBlbmQoalF1ZXJ5KGRhdGEpLmZpbmQoJ3NtZF90YWdzX3JlcG9ydCcpLmF0 dHIoJ3ZhbHVlJykpOw0KCQkJbG5rX2N0ciArPSAoalF1ZXJ5KGRhdGEpLmZpbmQoJ3NtZF90 YWdzX2xpbmtfY3RyJykuYXR0cigndmFsdWUnKSkgKiAxOyAvLyBtdWx0aXBseSBieSAxIHRv IGNvbnZlcnQgdG8gbnVtYmVyDQoJCQlqUXVlcnkoJyNzbWRfdGFnc19pbXBvcnRfbG5rX2N1 cnInKS50ZXh0KGxua19jdHIpOw0KCQkJaWYgKCd7JHNob3dyZXB9JyA9PSAnMScgJiYgaWN0 ciA+PSBpdG90KSB7DQoJCQkJc21kX3RhZ3NfdG9nZ2xlX3JlcG9ydCgpOw0KCQkJfQ0KCQl9 DQpFT0pTOw0KCQllY2hvICc8L3NjcmlwdD4nOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFnc19pbXBvcnRfb25lKCkgew0KCSRzbWRf dGFnc19zeW5jX3R5cGUgPSBncHMoJ3NtZF90YWdzX3N5bmNfdHlwZScpOw0KCSRzbWRfdGFn c19zeW5jX2RhdGEgPSBncHMoJ3NtZF90YWdzX3N5bmNfZGF0YScpOw0KCSRzbWRfdGFnc19z eW5jX2lkID0gZ3BzKCdzbWRfdGFnc19zeW5jX2lkJyk7DQoJJHNtZF90YWdzX3N5bmNfdGl0 bGUgPSBncHMoJ3NtZF90YWdzX3N5bmNfdGl0bGUnKTsNCgkkc21kX3RhZ3Nfc3luY19wYXJl bnQgPSBncHMoJ3NtZF90YWdzX3N5bmNfcGFyZW50Jyk7DQoJJHNtZF90YWdzX2ltcG9ydF90 YWdfcGFyZW50ID0gZ3BzKCdzbWRfdGFnc19pbXBvcnRfdGFnX3BhcmVudCcpOw0KCSRzbWRf dGFnc19pbXBvcnRfY2F0X3BhcmVudCA9IGdwcygnc21kX3RhZ3NfaW1wb3J0X2NhdF9wYXJl bnQnKTsNCgkkc21kX3RhZ3NfaW1wb3J0X2ZvcmNlX3BhcmVudCA9IGdwcygnc21kX3RhZ3Nf aW1wb3J0X2ZvcmNlX3BhcmVudCcpOw0KCSRzbWRfdGFnc19pbW9ydF9mb3JjZV9jYXQgPSBn cHMoJ3NtZF90YWdzX2ltcG9ydF9mb3JjZV9jYXQnKTsNCgkkc21kX3RhZ3NfZGVsZXRlX29y aWcgPSBncHMoJ3NtZF90YWdzX2RlbGV0ZV9vcmlnJyk7DQoNCgkkdGFnX2lkcyA9ICR0YWdf bmFtZXMgPSAka2V5bGlzdCA9IGFycmF5KCk7DQoNCglpZiAoJHNtZF90YWdzX3N5bmNfdHlw ZSA9PSAnMCcpIHsNCgkJLy8gdHJ1X3RhZ3MNCgkJJGtleXMgPSBkb19saXN0KCRzbWRfdGFn c19zeW5jX2RhdGEpOw0KCQlmb3JlYWNoICgka2V5cyBhcyAka2V5KSB7DQoJCQlpZiAoJGtl eT09JycpIGNvbnRpbnVlOw0KCQkJJGtleWxpc3RbXSA9IGFycmF5KCduYW1lJyA9PiAka2V5 LCAndGl0bGUnID0+ICRrZXkpOw0KCQl9DQoJfSBlbHNlIGlmICgkc21kX3RhZ3Nfc3luY190 eXBlID09ICcxJykgew0KCQkvL3Jzc191Yw0KCQkkY2xhdXNlID0gJ3RjLmFydGljbGVfaWQg PSAnLmRvU2xhc2goJHNtZF90YWdzX3N5bmNfZGF0YSk7DQoJCSRrZXlsaXN0ID0gZ2V0Um93 cygiU0VMRUNUIGMubmFtZSwgYy50aXRsZSBGUk9NICIuUEZYLiJ0ZXh0cGF0dGVybl9jYXRl Z29yeSBhcyB0YyBMRUZUIEpPSU4gIi5QRlguInR4cF9jYXRlZ29yeSBhcyBjIE9OIHRjLmNh dGVnb3J5X2lkID0gYy5pZCBXSEVSRSAiLiRjbGF1c2UuJHNtZF90YWdzX3N5bmNfcGFyZW50 KTsNCgkJJGtleWxpc3QgPSAoJGtleWxpc3QpID8gJGtleWxpc3QgOiBhcnJheSgpOw0KCX0N Cg0KCS8vIEluc2VydCAvdXBkYXRlIGVhY2ggdGFnIGluIHRoZSBnaXZlbiBwbGFjZQ0KCWZv cmVhY2ggKCRrZXlsaXN0IGFzICRpdGVtKSB7DQoJCSRpdG4gPSB0cmltKCRpdGVtWyduYW1l J10pOw0KCQkkaXR0ID0gdHJpbSgkaXRlbVsndGl0bGUnXSk7DQoNCgkJLy8gU2tpcCBpbnZh bGlkIGVudHJpZXMNCgkJaWYgKCRpdG4gPT0gJycgfHwgJGl0biA9PSBOVUxMIHx8ICRpdHQg PT0gJycgfHwgJGl0dCA9PSBOVUxMKSBjb250aW51ZTsNCg0KCQkkaWQgPSBzbWRfdGFnX2dl dHNlcnQoJGl0biwgJ2FydGljbGUnLCAkaXR0LCAkc21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJl bnQsICRzbWRfdGFnc19pbXBvcnRfY2F0X3BhcmVudCwgJHNtZF90YWdzX2ltcG9ydF9mb3Jj ZV9wYXJlbnQsICRzbWRfdGFnc19pbXBvcnRfZm9yY2VfY2F0KTsNCgkJaWYgKCRpZCkgew0K CQkJJHRhZ19pZHNbXSA9ICRpZDsNCgkJCSR0YWdfbmFtZXNbXSA9ICRpdG47DQoJCX0NCgl9 DQoNCglpZiAoJHRhZ19pZHMpIHsNCgkJJHJlcG9ydCA9IHN0cm9uZygkc21kX3RhZ3Nfc3lu Y190aXRsZSkuJzogJy5qb2luKCcsICcsICR0YWdfbmFtZXMpLmJyOw0KCQlpZiAoJHNtZF90 YWdzX2RlbGV0ZV9vcmlnKSB7DQoJCQlpZiAoJHNtZF90YWdzX3N5bmNfdHlwZSA9PSAnMCcp IHsNCgkJCQlzYWZlX3VwZGF0ZSgndGV4dHBhdHRlcm4nLCAiS2V5d29yZHM9JyciLCAiaWQ9 JyIuZG9TbGFzaCgkc21kX3RhZ3Nfc3luY19pZCkuIiciKTsNCgkJCX0gZWxzZSBpZiAoJHNt ZF90YWdzX3N5bmNfdHlwZSA9PSAnMScpIHsNCgkJCQlzYWZlX2RlbGV0ZSgndGV4dHBhdHRl cm5fY2F0ZWdvcnknLCAiYXJ0aWNsZV9pZD0nIi5kb1NsYXNoKCRzbWRfdGFnc19zeW5jX2lk KS4iJyIpOw0KCQkJfQ0KCQl9DQoJfQ0KCSR0YWdfY3RyID0gc21kX3RhZ19saW5rKCRzbWRf dGFnc19zeW5jX2lkLCAkdGFnX2lkcywgJ2FydGljbGUnKTsNCglzZW5kX3htbF9yZXNwb25z ZShhcnJheSgnc21kX3RhZ3NfcmVwb3J0JyA9PiAkcmVwb3J0LCAnc21kX3RhZ3NfbGlua19j dHInID0+ICR0YWdfY3RyKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gTUlERExFV0FSRSAtIEFETUlOL1BVQkxJQyBHTFVFDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIEdyYWIgYSB2YWxpZCB0YWcgcGFyZW50IGxpc3QuIENhbm5vdCBiZSBk b25lIGVhc2lseSBmcm9tIGZpeGVkIGRhdGE6IEFKQVggaXMgdGhlIG9ubHkgcmVsaWFibGUg d2F5IDotKA0KZnVuY3Rpb24gc21kX3RhZ19wYXJlbnRsaXN0KCkgew0KCSR0cnljYXQgPSBp c3NldCgkX1BPU1RbJ2NhdCddKTsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFt ZScsICd0eXBlJywgJ2lkJywgJ2NhdCcsICdpdGVtaWQnLCAnbGlzdG9ubHknLCAnaHRtbF9p ZCcsICdjbHInKSkpKTsNCg0KCXdoaWxlKEBvYl9lbmRfY2xlYW4oKSk7IC8vIEdldCByaWQg b2YgYW55IHBhZ2Ugc28gZmFyDQoJJGxpc3Rvbmx5ID0gKCRsaXN0b25seSA9PSAiIiB8fCAk bGlzdG9ubHkgPT0gInVuZGVmaW5lZCIpID8gJycgOiAkbGlzdG9ubHk7DQoJJGh0bWxfaWQg PSAoJGh0bWxfaWQgPT0gIiIgfHwgJGh0bWxfaWQgPT0gInVuZGVmaW5lZCIpID8gJ3NtZF90 YWdfcGFyZW50JyA6ICRodG1sX2lkOw0KCSR0eXBlID0gKCR0eXBlID09ICIiIHx8ICR0eXBl ID09ICJ1bmRlZmluZWQiKSA/ICdhcnRpY2xlJyA6ICR0eXBlOw0KCSRjYXQgPSAoJGNhdCA9 PSAiIiB8fCAkY2F0ID09ICJ1bmRlZmluZWQiKSA/ICcnIDogJGNhdDsNCgkkY2xyID0gKCRj bHIgPT0gIiIgfHwgJGNsciA9PSAidW5kZWZpbmVkIikgPyAnMScgOiAkY2xyOw0KCSR0YWdz ID0gKCRpdGVtaWQgPT0gIiIgfHwgJGl0ZW1pZCA9PSAidW5kZWZpbmVkIikgPyBhcnJheSgp IDogc2FmZV9yb3dzKCJ0YWdfaWQiLCBTTURfVEFHVSwgInR5cGU9JyR0eXBlJyBBTkQgaXRl bV9pZD0nJGl0ZW1pZCciKTsNCgkkY2xyQnRuID0gJ1s8c3BhbiBpZD0ic21kX2NsciIgY2xh c3M9InNtZF9mYWtlYnRuIj4nLnNtZF90YWdzX2dUeHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsN CgkkdG9nQnRuID0gJ1s8c3BhbiBpZD0ic21kX3RvZyIgY2xhc3M9InNtZF9mYWtlYnRuIj4n LnNtZF90YWdzX2dUeHQoJ3RvZ2dsZScpLic8L3NwYW4+XSc7DQoNCglpZiAoJGNhdCkgew0K CSAgICRjYXQgPSBkb19saXN0KCRjYXQpOw0KCSAgICRyc2lkID0gYXJyYXkoKTsNCgkgICAk cnNjID0gZ2V0Um93cygiU0VMRUNUIHR4dC5pZCwgdHh0LmxmdCwgdHh0LnJndA0KCQkJRlJP TSAiLlBGWC5TTURfVEFHLiIgQVMgdHh0LCAiLlBGWC4idHhwX2NhdGVnb3J5IEFTIHR4Yywg Ii5QRlguU01EX1RBR0MuIiBBUyB0eGwNCgkJCVdIRVJFIHR4dC5pZCA9IHR4bC50YWdfaWQN CgkJCUFORCB0eGwuY2F0X2lkID0gdHhjLmlkDQoJCQlBTkQgdHhjLm5hbWUgSU4gKCciIC5p bXBsb2RlKCInLCciLCAkY2F0KS4gIicpDQoJCQlBTkQgdHh0LnR5cGUgPSAnJHR5cGUnIik7 DQoJCWlmICgkcnNjKSB7DQoJCQlmb3JlYWNoICgkcnNjIGFzICRyb3cpIHsNCgkJCQkkaWRz ID0gc2FmZV9jb2x1bW4oJ2lkJywgU01EX1RBRywgInR5cGUgPSAnJHR5cGUnIEFORCAobGZ0 IEJFVFdFRU4gIiAuJHJvd1snbGZ0J10uICIgQU5EICIgLiRyb3dbJ3JndCddLiAiKSIpOw0K CQkJCSRyc2lkID0gYXJyYXlfbWVyZ2UoJHJzaWQsICRpZHMpOw0KCQkJfQ0KCQl9DQoJCSRj YXQgPSAoJHJzYykgPyAnIEFORCBpZCBJTiAoJy5kb1F1b3RlKGltcGxvZGUoIicsJyIsJHJz aWQpKS4nKScgOiAnJzsNCgl9DQoNCgkkY2xyID0gKCgkY2F0ICYmICRjbHIgPT0gJzEnKSB8 fCAkY2xyID09ICcyJykgPyAnMT0xJyA6ICcxPTAnOw0KDQoJaWYgKCRpZCkgew0KCQkkaWQg PSBhc3NlcnRfaW50KCRpZCk7DQoJCWxpc3QoJGxmdCwgJHJndCkgPSBhcnJheV92YWx1ZXMo c2FmZV9yb3coJ2xmdCwgcmd0JywgU01EX1RBRywgJ2lkID0gJy4kaWQpKTsNCgkJJHJzID0g Z2V0VHJlZSgncm9vdCcsICR0eXBlLCAibGZ0IG5vdCBiZXR3ZWVuICRsZnQgYW5kICRyZ3Qi LiRjYXQsIFNNRF9UQUcpOw0KCX0gZWxzZSB7DQoJCSRycyA9IGdldFRyZWUoJ3Jvb3QnLCAk dHlwZSwgJGNsci4kY2F0LCBTTURfVEFHKTsNCgl9DQoNCglpZiAoJHJzKSB7DQoJICAgaWYg KCR0cnljYXQgJiYgISRsaXN0b25seSkgew0KCQkJZWNobyBzbWRfbXVsdGlUcmVlU2VsZWN0 SW5wdXQoJGh0bWxfaWQsICRycywgJHRhZ3MpLiRjbHJCdG4uJHRvZ0J0bjsNCgkJfSBlbHNl IHsNCgkJCWVjaG8gdHJlZVNlbGVjdElucHV0KCRodG1sX2lkLCAkcnMsICRuYW1lKTsNCgkJ fQ0KCX0gZWxzZSB7DQoJCWVjaG8gc21kX3RhZ3NfZ1R4dCgnbm9fcGFyZW50Jyk7DQoJfQ0K CWV4aXQoKTsgLy8gRG9uJ3QgY2FsbCBwYWdlX2VuZCgpDQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KLy8gR3JhYiBhIHZhbGlkIGNhdGVnb3J5IGxpc3QNCmZ1bmN0aW9u IHNtZF90YWdfY2F0bGlzdCgkY2F0PScnKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJy YXkoJ25hbWUnLCd0eXBlJywnaHRtbF9pZCcpKSkpOw0KCXdoaWxlKEBvYl9lbmRfY2xlYW4o KSk7IC8vIEdldCByaWQgb2YgYW55IHBhZ2Ugc28gZmFyDQoNCgkkdHlwZSA9ICgkdHlwZSA9 PSAiIiB8fCAkdHlwZSA9PSAidW5kZWZpbmVkIikgPyAnYXJ0aWNsZScgOiAkdHlwZTsNCgkk aHRtbF9pZCA9ICgkaHRtbF9pZCA9PSAiIiB8fCAkaHRtbF9pZCA9PSAidW5kZWZpbmVkIikg PyAnc21kX2NhdGxpc3QnIDogJGh0bWxfaWQ7DQoJJHJzID0gZ2V0VHJlZSgncm9vdCcsICR0 eXBlLCAiMT0xIik7DQoNCglpZiAoJHJzKSB7DQoJCWVjaG8gdHJlZVNlbGVjdElucHV0KCRo dG1sX2lkLCAkcnMsICRuYW1lLCAkaHRtbF9pZCk7DQoJfSBlbHNlIHsNCgkJZWNobyBnVHh0 KCdub19jYXRlZ29yaWVzX2F2YWlsYWJsZScpOw0KCX0NCglleGl0KCk7IC8vIERvbid0IGNh bGwgcGFnZV9lbmQoKQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEhh bmRsZSBmYWtlIHRhZyBzZWN0aW9uIFVSTA0KZnVuY3Rpb24gc21kX3RhZ3NfdXJsX2hhbmRs ZXIoJGV2ZW50LCAkc3RlcCkgew0KCWdsb2JhbCAkc21kX3RhZ190eXBlLCAkcHJldGV4dDsN Cg0KCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQlyZXR1cm47DQoJfQ0KDQoJ JHByZWZzID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdV9zZWMnLCAnc21k X3RhZ191X3BuYW0nLCAnc21kX3RhZ191X3B0eXAnKSwgMSk7DQoJJHVybHNlYyA9IGRvX2xp c3QoJHByZWZzWydzbWRfdGFnX3Vfc2VjJ11bJ3ZhbCddKTsNCgkkdXJsbmFtID0gJHByZWZz WydzbWRfdGFnX3VfcG5hbSddWyd2YWwnXTsNCgkkdXJsdHlwID0gJHByZWZzWydzbWRfdGFn X3VfcHR5cCddWyd2YWwnXTsNCgkkZGZsdF91cmwgPSAkdXJsc2VjWzBdOw0KDQoJJHN1YnBh dGggPSBwcmVnX3JlcGxhY2UoIi9odHRwcz86XC9cLy4qKFwvLiopL1VpIiwiJDEiLGh1KTsN CgkkcmVnc2FmZXN1YnBhdGggPSBwcmVnX3F1b3RlKCRzdWJwYXRoLCAnLycpOw0KCSRyZXEg PSBwcmVnX3JlcGxhY2UoIi9eJHJlZ3NhZmVzdWJwYXRoL2kiLCcvJywkX1NFUlZFUlsnUkVR VUVTVF9VUkknXSk7DQoNCgkkcXMgPSBzdHJwb3MoJHJlcSwgJz8nKTsNCgkkcWF0dHMgPSAo JHFzID8gYS5zdWJzdHIoJHJlcSwgJHFzICsgMSkgOiAnJyk7DQoNCglpZiAoJHFzKSAkcmVx ID0gc3Vic3RyKCRyZXEsIDAsICRxcyk7DQoJJHBhcnRzID0gYXJyYXlfdmFsdWVzKGFycmF5 X2ZpbHRlcihleHBsb2RlKCcvJywgJHJlcSkpKTsNCgkkdmFsaWRUeXBlcyA9IGFycmF5KCdh cnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGluaycpOw0KDQoJaWYgKChjb3VudCgkcGFydHMp ID4gMSkgJiYgKGluX2FycmF5KCRwYXJ0c1swXSwgJHVybHNlYykpKSB7DQoJCS8vIENsZWFu IFVSTCBzeW50YXguLi4gdHJ5IHRvIGF2b2lkIGNsYXNoZXMgd2l0aCBidWlsdC1pbiBwZXJt bGluayBzY2hlbWVzDQoNCgkJaWYgKGNvdW50KCRwYXJ0cykgPT0gNCkgew0KCQkJLy8gc2Vj dGlvbi9wcmltYXJ5X3RyaWdnZXIvdGFnLXR5cGUvdGFnDQoJCQkkc21kX3RhZ190eXBlID0g JHBhcnRzWzJdOw0KCQkJJHNtZF90YWcgPSAkcGFydHNbM107DQoJCX0gZWxzZSBpZiAoY291 bnQoJHBhcnRzKSA9PSAzKSB7DQoJCQlpZiAoJHBhcnRzWzFdID09ICRkZmx0X3VybCkgew0K CQkJCS8vIHNlY3Rpb24vcHJpbWFyeV90cmlnZ2VyL3RhZy10eXBlDQoJCQkJLy8gc2VjdGlv bi9wcmltYXJ5X3RyaWdnZXIvdGFnDQoJCQkJaWYgKGluX2FycmF5KCRwYXJ0c1syXSwgJHZh bGlkVHlwZXMpKSB7DQoJCQkJCSRzbWRfdGFnX3R5cGUgPSAkcGFydHNbMl07DQoJCQkJCSRz bWRfdGFnID0gJyc7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHNtZF90YWdfdHlwZSA9ICR2YWxp ZFR5cGVzWzBdOw0KCQkJCQkkc21kX3RhZyA9ICRwYXJ0c1syXTsNCgkJCQl9DQoJCQl9IGVs c2Ugew0KCQkJCS8vIHNlY3Rpb24vaWQvdGl0bGUNCgkJCQkvLyBwcmltYXJ5X3RyaWdnZXIv dGFnLXR5cGUvdGFnDQoJCQkJJHNtZF90YWdfdHlwZSA9IChpc19udW1lcmljKCRwYXJ0c1sx XSkpID8gJycgOiAkcGFydHNbMV07IC8vIFByb3RlY3QgYWdhaW5zdCAvc2VjdGlvbi9pZC90 aXRsZSBVUkwgc2NoZW1lDQoJCQkJJHNtZF90YWcgPSAkcGFydHNbMl07DQoJCQl9DQoJCX0g ZWxzZSB7DQoJCQlpZiAoaW5fYXJyYXkoJHBhcnRzWzFdLCAkdmFsaWRUeXBlcykpIHsNCgkJ CQkvLyBzZWN0aW9uL3RhZy10eXBlDQoJCQkJJHNtZF90YWdfdHlwZSA9ICRwYXJ0c1sxXTsN CgkJCQkkc21kX3RhZyA9ICcnOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBzZWN0aW9uL3RhZw0K CQkJCS8vIE1heSBjbGFzaCB3aXRoIC9zZWN0aW9uL3RpdGxlIGJ1dCB0aGVyZSdzIG5vdGhp bmcgd2UgY2FuIGRvDQoJCQkJJHNtZF90YWdfdHlwZSA9ICR2YWxpZFR5cGVzWzBdOw0KCQkJ CSRzbWRfdGFnID0gJHBhcnRzWzFdOw0KCQkJfQ0KCQl9DQoJCXNtZF90YWdzX3NldCgkc21k X3RhZ190eXBlLCAkc21kX3RhZyk7DQoJCSRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSA9ICR1 cmxuYW0uJz0nLiRzbWRfdGFnIC5hLiAkdXJsdHlwLic9Jy4kc21kX3RhZ190eXBlIC4gJHFh dHRzOw0KCQkkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA9ICRzdWJwYXRoIC4gJHBhcnRzWzBd IC4gJy8/JyAuICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCgl9IGVsc2UgaWYgKChjb3Vu dCgkcGFydHMpID09IDEpICYmIChpbl9hcnJheSgkcGFydHNbMF0sICR1cmxzZWMpIHx8IGlu X2FycmF5KGdwcygncycpLCAkdXJsc2VjKSkpIHsNCgkJLy8gRGVmYXVsdCBzZWN0aW9uICsg bWVzc3kgdGFnIHN5bnRheA0KCQkkc21kX3RhZ190eXBlID0gKGluX2FycmF5KGdwcygkdXJs dHlwKSwgJHZhbGlkVHlwZXMpKSA/IGdwcygkdXJsdHlwKSA6ICR2YWxpZFR5cGVzWzBdOw0K CQkkc21kX3RhZyA9IGdwcygkdXJsbmFtKTsNCgkJc21kX3RhZ3Nfc2V0KCRzbWRfdGFnX3R5 cGUsICRzbWRfdGFnKTsNCgkJJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddID0gJHVybG5hbS4n PScuJHNtZF90YWcgLmEuICR1cmx0eXAuJz0nLiRzbWRfdGFnX3R5cGUgLiAkcWF0dHM7DQoJ CSRfU0VSVkVSWydSRVFVRVNUX1VSSSddID0gJHN1YnBhdGggLiAkcGFydHNbMF0gLiAnLz8n IC4gJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddOw0KCX0gZWxzZSBpZiAoKGNvdW50KCRwYXJ0 cykgPT0gMSkgJiYgKCFpbl9hcnJheSgkcGFydHNbMF0sICR1cmxzZWMpICYmICFpbl9hcnJh eShncHMoJ3MnKSwgJHVybHNlYykpKSB7DQoJCS8vIE5hbWVkIHNlY3Rpb24gKG9yIC90aXRs ZSBwZXJtbGluayBtb2RlKSArIG1lc3N5IHRhZyBzeW50YXgNCgkJJHRoZVR5cGUgPSBncHMo JHVybHR5cCk7DQoJCSRzbWRfdGFnID0gZ3BzKCR1cmxuYW0pOw0KCQkkc21kX3RhZ190eXBl ID0gKGVtcHR5KCR0aGVUeXBlKSAmJiBlbXB0eSgkc21kX3RhZykpID8gJycgOiAoKGluX2Fy cmF5KCR0aGVUeXBlLCAkdmFsaWRUeXBlcykpID8gJHRoZVR5cGUgOiAkdmFsaWRUeXBlc1sw XSk7DQoJCXNtZF90YWdzX3NldCgkc21kX3RhZ190eXBlLCAkc21kX3RhZyk7DQoJCSRfU0VS VkVSWydRVUVSWV9TVFJJTkcnXSA9ICR1cmxuYW0uJz0nLiRzbWRfdGFnIC5hLiAkdXJsdHlw Lic9Jy4kc21kX3RhZ190eXBlIC4gJHFhdHRzOw0KCQkkX1NFUlZFUlsnUkVRVUVTVF9VUkkn XSA9ICRzdWJwYXRoIC4gJHBhcnRzWzBdIC4gJy8/JyAuICRfU0VSVkVSWydRVUVSWV9TVFJJ TkcnXTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RhZ3Nfc2V0KCR0eXAsICR0YWc9JycsICRpdGVtPScnKSB7DQoJZ2xvYmFsICRzbWRf dGFnczsNCg0KCSRzbWRfdGFncyA9IGFycmF5KCk7DQoNCgkvLyBNdWx0aS10YWcgZmlsdGVy aW5nDQoJaWYgKCR0YWcpIHsNCgkJJHRhZ2xpc3QgPSBleHBsb2RlKCd8JywgJHRhZyk7IC8v VE9ETzogZ2V0IGRlbGltaXRlciBmcm9tIHByZWZzDQoJCSR0YWcgPSBqb2luKCcsJywgcXVv dGVfbGlzdCgkdGFnbGlzdCkpOw0KCX0NCg0KCS8vIE1PTlNURVIhDQoJJHJzID0gc3RhcnRS b3dzKA0KCQkiU0VMRUNUIGlkLCBuYW1lLCB0eHQudHlwZSwgcGFyZW50LCB0aXRsZSwgY291 bnQoaXRlbV9pZCkgQVMgY291bnQiDQoJCS4iLChTRUxFQ1QgQ0FTVCgocmd0IC0gbGZ0IC0g MSkgLyAyIEFTIFVOU0lHTkVEKSkgQVMgY2hpbGRyZW4iDQoJCS4iLChTRUxFQ1QgQ09VTlQo KikgRlJPTSAiLlBGWC5TTURfVEFHLiIgV0hFUkUgdHlwZT0nJHR5cCcgQU5EIG5hbWU9bmFt ZSBBTkQgbGZ0IDwgdHh0LmxmdCBBTkQgcmd0ID4gdHh0LnJndCktMSBBUyBsZXZlbCINCgkJ LiIgRlJPTSAiLlBGWC5TTURfVEFHLiIgQVMgdHh0LCAiLlBGWC5TTURfVEFHVS4iIEFTIHR4 dSINCgkJLiIgV0hFUkUgdHh0LnR5cGU9JyR0eXAnIg0KCQkuIiBBTkQgdGFnX2lkID0gaWQi DQoJCS4oKCR0YWcpID8gIiBBTkQgbmFtZSBJTiAoJHRhZykiIDogIiIpDQoJCS4oKCRpdGVt KSA/ICIgQU5EIGl0ZW1faWQ9JyRpdGVtJyIgOiAiIikNCgkJLiIgR1JPVVAgQlkgaWQiKTsN Cgl3aGlsZSAoJHJvdyA9IG5leHRSb3coJHJzKSkgew0KCQkkc21kX3RhZ3NbJHR5cF1bJHJv d1snaWQnXV0gPSBhcnJheSgndGFnX25hbWUnID0+ICRyb3dbJ25hbWUnXSwgJ3RhZ190aXRs ZScgPT4gJHJvd1sndGl0bGUnXSwgJ3RhZ19wYXJlbnQnID0+ICRyb3dbJ3BhcmVudCddLCAn dGFnX2NvdW50JyA9PiAkcm93Wydjb3VudCddLCAndGFnX2NoaWxkcmVuJyA9PiAkcm93Wydj aGlsZHJlbiddLCAndGFnX2xldmVsJyA9PiAkcm93WydsZXZlbCddKTsNCgkJJHNtZF90YWdz WyR0eXBdWyd0YWdfbmFtZSddWyRyb3dbJ2lkJ11dID0gJHJvd1snbmFtZSddOw0KCQkkc21k X3RhZ3NbJHR5cF1bJ3RhZ190aXRsZSddWyRyb3dbJ2lkJ11dID0gJHJvd1sndGl0bGUnXTsN CgkJJHNtZF90YWdzWyR0eXBdWyd0YWdfcGFyZW50J11bJHJvd1snaWQnXV0gPSAkcm93Wydw YXJlbnQnXTsNCgkJJHNtZF90YWdzWyR0eXBdWyd0YWdfY291bnQnXVskcm93WydpZCddXSA9 ICRyb3dbJ2NvdW50J107DQoJCSRzbWRfdGFnc1skdHlwXVsndGFnX2NoaWxkcmVuJ11bJHJv d1snaWQnXV0gPSAkcm93WydjaGlsZHJlbiddOw0KCQkkc21kX3RhZ3NbJHR5cF1bJ3RhZ19s ZXZlbCddWyRyb3dbJ2lkJ11dID0gJHJvd1snbGV2ZWwnXTsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWRkIHRhZ3MgdG8gdGhlIGdsb2JhbCBzY29wZSwg ZGVwZW5kaW5nIG9uIGNvbnRleHQuDQovLyBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRleHQN CmZ1bmN0aW9uIHNtZF90YWdzX2NvbnRleHQoKSB7DQoJZ2xvYmFsICR0aGlzYXJ0aWNsZSwg JHRoaXNmaWxlLCAkdGhpc2xpbmssICR0aGlzaW1hZ2UsICRzbWRfdGFnX3R5cGUsICRzbWRf dGFnX2l0ZW1zLCAkc21kX3RhZ3MsICRzbWRfdGhpc3RhZzsNCg0KCSRjdHh0ID0gJHNtZF90 YWdfdHlwZTsNCgkkaWRzID0gYXJyYXkoKTsNCgkkc2NwID0gaXNzZXQoJHNtZF90YWdzWyRj dHh0XSkgPyAkc21kX3RhZ3NbJGN0eHRdIDogYXJyYXkoKTsNCg0KCS8vIEluZGl2aWR1YWwg YXJ0aWNsZSBvciBsaXN0DQoJJGlkID0gJyc7DQoJaWYgKCFlbXB0eSgkdGhpc2ltYWdlKSkg ew0KCQkkaWQgPSAkdGhpc2ltYWdlWydpZCddOw0KCQkkY3R4dCA9ICdpbWFnZSc7DQoJCSRz Y3AgPSAkdGhpc2ltYWdlOw0KCX0gZWxzZSBpZighZW1wdHkoJHRoaXNmaWxlKSkgew0KCQkk aWQgPSAkdGhpc2ZpbGVbJ2lkJ107DQoJCSRjdHh0ID0gJ2ZpbGUnOw0KCQkkc2NwID0gJHRo aXNmaWxlOw0KCX0gZWxzZSBpZighZW1wdHkoJHRoaXNsaW5rKSkgew0KCQkkaWQgPSAkdGhp c2xpbmtbJ2lkJ107DQoJCSRjdHh0ID0gJ2xpbmsnOw0KCQkkc2NwID0gJHRoaXNsaW5rOw0K CX0gZWxzZSBpZighZW1wdHkoJHRoaXNhcnRpY2xlKSkgew0KCQkkaWQgPSAkdGhpc2FydGlj bGVbJ3RoaXNpZCddOw0KCQkkY3R4dCA9ICdhcnRpY2xlJzsNCgkJJHNjcCA9ICR0aGlzYXJ0 aWNsZTsNCgl9DQoJaWYgKCRpZCkgew0KCQlzbWRfdGFnc19zZXQoJGN0eHQsICcnLCAkaWQp Ow0KCX0NCg0KCWlmKCFlbXB0eSgkc21kX3RhZ3MpKSB7DQoJCWZvcmVhY2goJHNtZF90YWdz WyRjdHh0XSBhcyAkcmlkID0+ICRyb3cpIHsNCgkJCWlmIChpc19pbnQoJHJpZCkpIHsNCgkJ CQkkaWRzW10gPSAkcmlkOw0KCQkJfQ0KCQl9DQoJfQ0KCS8vIFRPRE86IGlzIHRoaXMgbmVl ZGVkIHRvIG92ZXJ3cml0ZSBpZiB0YWcgYWxyZWFkeSBzZXQ/DQoJaWYgKCFlbXB0eSgkc21k X3RoaXN0YWcpKSB7DQoJCSRpZHMgPSBhcnJheSgkc21kX3RoaXN0YWdbJ3RhZ19pZCddKTsN Cgl9DQoNCglyZXR1cm4gYXJyYXkoJ2NvbnRleHQnID0+ICRjdHh0LCAnc2NvcGUnID0+ICRz Y3AsICdpZCcgPT4gJGlkcyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gTG9hZCBjdXJyZW50IHRhZyBpbnRvIGdsb2JhbCBzY29wZQ0KZnVuY3Rpb24gc21kX3Rh Z19wb3B1bGF0ZSgkcm93KSB7DQoJZ2xvYmFsICRzbWRfdGhpc3RhZzsNCgkkc21kX3RoaXN0 YWdbJ3RhZ19pZCddID0gJHJvd1snaWQnXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ19uYW1lJ10g PSAkcm93WyduYW1lJ107DQoJJHNtZF90aGlzdGFnWyd0YWdfbGV0dGVybmFtZSddID0gc21k X3RhZ3NfdXRmOF9zdWJzdHIoJHJvd1snbmFtZSddLCAwLCAxKTsNCgkkc21kX3RoaXN0YWdb J3RhZ19sZXR0ZXJ0aXRsZSddID0gc21kX3RhZ3NfdXRmOF9zdWJzdHIoJHJvd1sndGl0bGUn XSwgMCwgMSk7DQoJJHNtZF90aGlzdGFnWyd0YWdfdHlwZSddID0gJHJvd1sndHlwZSddOw0K CSRzbWRfdGhpc3RhZ1sndGFnX3BhcmVudCddID0gJHJvd1sncGFyZW50J107DQoJJHNtZF90 aGlzdGFnWyd0YWdfdGl0bGUnXSA9ICRyb3dbJ3RpdGxlJ107DQoJJHNtZF90aGlzdGFnWyd0 YWdfY2hpbGRyZW4nXSA9ICRyb3dbJ2NoaWxkcmVuJ107DQoJJHNtZF90aGlzdGFnWyd0YWdf bGV2ZWwnXSA9ICRyb3dbJ2xldmVsJ107DQoJJHNtZF90aGlzdGFnWyd0YWdfY291bnQnXSA9 ICRyb3dbJ2NvdW50J107DQoJJHNtZF90aGlzdGFnWyd0YWdfaW5kZW50J10gPSAkcm93Wydp bmRlbnQnXTsNCgkkc21kX3RoaXN0YWdbJ3RhZ193ZWlnaHQnXSA9ICRyb3dbJ3dlaWdodCdd Ow0KfQ0KDQovLyBUaGFua3MgaHR0cDovL3VzMi5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlv bi5zdWJzdHIucGhwDQpmdW5jdGlvbiBzbWRfdGFnc191dGY4X3N1YnN0cigkc3RyLCAkc3Rh cnQpIHsNCglwcmVnX21hdGNoX2FsbCgiLy4vdSIsICRzdHIsICRhcik7DQoJaWYoZnVuY19u dW1fYXJncygpID49IDMpIHsNCgkJJGVuZCA9IGZ1bmNfZ2V0X2FyZygyKTsNCgkJcmV0dXJu IGpvaW4oJycsYXJyYXlfc2xpY2UoJGFyWzBdLCRzdGFydCwkZW5kKSk7DQoJfSBlbHNlIHsN CgkJcmV0dXJuIGpvaW4oJycsYXJyYXlfc2xpY2UoJGFyWzBdLCRzdGFydCkpOw0KCX0NCn0g DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWxsIHRhZ3MvY291bnRzDQpm dW5jdGlvbiBzbWRfdGFnX2xpc3RfYWRtKCRhdHRzKSB7DQoJaW5jbHVkZV9vbmNlIHR4cGF0 aC4nL3B1Ymxpc2gvdGFnaGFuZGxlcnMucGhwJzsNCglleHRyYWN0KGxBdHRzKGFycmF5KA0K CQkndHlwZScgPT4gJ2FydGljbGUnLA0KCQknaW5kZW50JyA9PiAnJm5ic3A7Jm5ic3A7JywN CgkJJ2NvdW50JyA9PiAxLA0KCQknbGFiZWwnID0+ICcnLA0KCQknbGFiZWx0YWcnID0+ICcn LA0KCQknd3JhcHRhZycgPT4gJycsDQoJCSdicmVhaycgPT4gJycsDQoJCSdjbGFzcycgPT4g X19GVU5DVElPTl9fLA0KCQknYnJlYWtjbGFzcycgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJ JHZhbGlkVHlwZXMgPSBhcnJheSgnbGlzdCcgPT4gJ2FydGljbGUnLCAnaW1hZ2UnID0+ICdp bWFnZScsICdmaWxlJyA9PiAnZmlsZScsICdsaW5rJyA9PiAnbGluaycpOw0KCSRycyA9IGdl dFRyZWUoJ3Jvb3QnLCAkdHlwZSwgJzE9MScsIFNNRF9UQUcpOw0KCSRyc2MgPSBnZXRSb3dz KCJTRUxFQ1QgdHhsLnRhZ19pZCwgdHhjLm5hbWUNCgkJCUZST00gIi5QRlguU01EX1RBRy4i IEFTIHR4dCwgIi5QRlguU01EX1RBR0MuIiBBUyB0eGwsICIuUEZYLiJ0eHBfY2F0ZWdvcnkg QVMgdHhjDQoJCQlXSEVSRSB0eHQudHlwZSA9ICckdHlwZScgQU5EIHR4dC5pZCA9IHR4bC50 YWdfaWQgQU5EIHR4bC5jYXRfaWQgPSB0eGMuaWQiKTsNCgkkcnNjb3V0ID0gYXJyYXkoKTsN CglpZiAoJHJzYykgew0KCQlmb3JlYWNoICgkcnNjIGFzICRpZHggPT4gJHJvdykgew0KCQkJ JHJzY291dFskcm93Wyd0YWdfaWQnXV0gPSAkcm93WyduYW1lJ107DQoJCX0NCgl9DQoNCglp ZiAoJHJzKSB7DQoJCSRvdXQgPSBhcnJheSgpOw0KCQkkdG90YWxzID0gYXJyYXkoKTsNCg0K CQkvLyBUYWxseSBlYWNoIHRhZydzIHVzYWdlDQoJCWlmICgkY291bnQpIHsNCgkJCSRyc3Ug PSBzYWZlX3Jvd3Nfc3RhcnQoJ3RhZ19pZCwgY291bnQoKikgYXMgbnVtJywgU01EX1RBR1Us ICJ0eXBlPSckdHlwZScgR1JPVVAgQlkgdGFnX2lkIik7DQoJCQl3aGlsZSAoJHJvdyA9IG5l eHRSb3coJHJzdSkpIHsNCgkJCQkkdGFnaWQgPSAkcm93Wyd0YWdfaWQnXTsNCgkJCQkkbnVt ID0gJHJvd1snbnVtJ107DQoJCQkJJGlkcyA9IHNhZmVfY29sdW1uKCdpdGVtX2lkJywgU01E X1RBR1UsICJ0eXBlPSckdHlwZScgQU5EIHRhZ19pZD0nJHRhZ2lkJyIpOw0KCQkJCSR0b3Rh bHNbJHRhZ2lkXSA9IGFycmF5KCRudW0sIGpvaW4oIiwiLCRpZHMpKTsNCgkJCX0NCgkJfQ0K DQoJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7DQoJCQlleHRyYWN0KCRyb3cpOw0KCQkJJHBh cmVudCA9IChpc3NldCgkcGFyZW50KSkgPyAkcGFyZW50IDogJyc7IC8vIFBhcmVudCBtaWdo dCBub3QgYmUgZGVmaW5lZA0KCQkJJHJvd1sndHlwZSddID0gJHR5cGU7DQoJCQlpZiAoaXNz ZXQoJHRvdGFsc1skaWRdKSkgew0KCQkJCSRyb3dbJ2NvdW50J10gPSAkdG90YWxzWyRpZF1b MF07DQoJCQkJJGV2ID0gYXJyYXlfa2V5cygkdmFsaWRUeXBlcywkdHlwZSk7DQoJCQkJJHVy bCA9ICdpbmRleC5waHA/ZXZlbnQ9Jy4kZXZbMF0uYS4nc2VhcmNoX21ldGhvZD1pZCcuYS4n Y3JpdD0nLiR0b3RhbHNbJGlkXVsxXTsNCgkJCQkkY250b3AgPSAnICgnLiBocmVmKCR0b3Rh bHNbJGlkXVswXSwgJHVybCkgLicpJzsNCgkJCX0gZWxzZSB7DQoJCQkJJHJvd1snY291bnQn XSA9IDA7DQoJCQkJJGNudG9wID0gJyAoMCknOw0KCQkJfQ0KDQoJCQkkcm93ZGF0YSA9ICc8 c3BhbiBuYW1lPSJzbWRfdGFnbmFtIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kbmFtZQ0KCQkJ CQkuJzwvc3Bhbj48c3BhbiBuYW1lPSJzbWRfdGFnaWQiIGNsYXNzPSJzbWRfaGlkZGVuIj4n LiRpZA0KCQkJCQkuJzwvc3Bhbj48c3BhbiBuYW1lPSJzbWRfdGFndHRsIiBjbGFzcz0ic21k X2hpZGRlbiI+Jy4kdGl0bGUNCgkJCQkJLic8L3NwYW4+PHNwYW4gbmFtZT0ic21kX3RhZ3Bh ciIgY2xhc3M9InNtZF9oaWRkZW4iPicuJHBhcmVudA0KCQkJCQkuJzwvc3Bhbj48c3BhbiBu YW1lPSJzbWRfdGFnY2F0IiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4oKGlzc2V0KCRyc2NvdXRb JGlkXSkpID8gJHJzY291dFskaWRdIDogJycpDQoJCQkJCS4nPC9zcGFuPic7DQoJCQkkb3V0 W10gPSBhcnJheSgNCgkJCQknZGF0YScgPT4gJHJvd2RhdGEuc3RyX3JlcGVhdCgkaW5kZW50 LCAkbGV2ZWwgKiAxKSAuICR0aXRsZSAuICgoJGNvdW50KSA/ICRjbnRvcCA6ICcnKS5uLA0K CQkJCSdsZXZlbCcgPT4gJGxldmVsDQoJCQkJKTsNCi8vCQkJJHNtZF90aGlzdGFnID0gYXJy YXkoKTsNCgkJfQ0KDQoJCWlmICgkb3V0KSB7DQoJCQkkd3JhcGl0ID0gZG9fbGlzdCgkd3Jh cHRhZywgIjoiKTsNCg0KCQkJaWYgKCR3cmFwaXRbMF0gPT0gJ3RhYmxlJykgew0KCQkJCS8v IFRhYmxlcyBhcmUgYSBzcGVjaWFsIGNhc2UNCgkJCQkkdG90YWxJdGVtcyA9ICRyb3dzID0g Y291bnQoJHJzKTsNCgkJCQkkc3RlcCA9IDE7DQoJCQkJJGNvbHMgPSAxOw0KCQkJCSRudW1v cHRzID0gY291bnQoJHdyYXBpdCk7DQoJCQkJLy8gRWFjaCBzdWNjZXNzaXZlIGxldmVsIG92 ZXJyaWRlcyB0aGUgcHJldmlvdXMgc3RlcCBzbyBieSB0aGUgZW5kIG9mIHRoZSBpZnMsDQoJ CQkJLy8gMyB2YWx1ZXMgYXJlIHNldCB1cDogc3RlcCwgcm93cyBhbmQgY29scw0KCQkJCWlm ICgkbnVtb3B0cyA+IDEpIHsNCgkJCQkJJGNvbHMgPSAkd3JhcGl0WzFdOw0KCQkJCQkkcm93 cyA9IGNlaWwoJHRvdGFsSXRlbXMvJGNvbHMpOw0KCQkJCX0NCgkJCQlpZiAoJG51bW9wdHMg PiAyKSB7DQoJCQkJCWlmICgkd3JhcGl0WzJdID09ICdyb3dzJykgew0KCQkJCQkJJHJvd3Mg PSAkd3JhcGl0WzFdOw0KCQkJCQkJJGNvbHMgPSBjZWlsKCR0b3RhbEl0ZW1zLyRyb3dzKTsN CgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoJG51bW9wdHMgPiAzKSB7DQoJCQkJCWlmICgkd3Jh cGl0WzNdID09ICdieWNvbCcpIHsNCgkJCQkJCSRzdGVwID0gKCR3cmFwaXRbMl09PSdjb2xz JykgPyBjZWlsKCR0b3RhbEl0ZW1zLyRjb2xzKSA6ICRyb3dzOw0KCQkJCQkJaWYgKCR3cmFw aXRbMl09PSdjb2xzJykgew0KCQkJCQkJCSRyb3dzID0gJHN0ZXA7DQoJCQkJCQl9IGVsc2Ug ew0KCQkJCQkJCSRjb2xzID0gY2VpbCgkdG90YWxJdGVtcy8kcm93cyk7DQoJCQkJCQl9DQoJ CQkJCX0NCgkJCQl9DQoNCgkJCQkvLyBHZW5lcmF0ZSB0YWJsZSBiYXNlZCBvbiBhYm92ZSBy dWxlcw0KCQkJCSR0YmxvdXQgPSBhcnJheSgpOw0KCQkJCSRjZWxsQ3RyID0gMDsNCgkJCQkk Y2xhc3MgPSAoIWVtcHR5KCRjbGFzcykpID8gJyBjbGFzcz0iJy4kY2xhc3MuJyInIDogJyc7 DQoJCQkJJGJyZWFrY2xhc3MgPSAoIWVtcHR5KCRicmVha2NsYXNzKSkgPyAnIGNsYXNzPSIn LiRicmVha2NsYXNzLiciJyA6ICcnOw0KDQoJCQkJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRy b3dzOyAkaWR4KyspIHsNCgkJCQkJJGJsZCA9IGFycmF5KCk7DQoJCQkJCWZvciAoJGpkeCA9 IDA7ICRqZHggPCAkY29sczsgJGpkeCsrKSB7DQoJCQkJCQkkb2Zmc2V0ID0gKCR3cmFwaXRb M109PSdieWNvbCcpID8gKCRqZHggKiAkc3RlcCkgKyAkaWR4IDogJGNlbGxDdHI7DQoJCQkJ CQkkYmxkW10gPSAoaXNzZXQoJG91dFskb2Zmc2V0XVsnZGF0YSddKSkgPyB0ZCgkb3V0WyRv ZmZzZXRdWydkYXRhJ10pIDogdGQoJycpOw0KCQkJCQkJJGNlbGxDdHIrKzsNCgkJCQkJfQ0K CQkJCQkkdGJsb3V0W10gPSB0cihqb2luKCcnLCAkYmxkKSwgJGJyZWFrY2xhc3MpOw0KICAg ICAgICAgICAgfQ0KDQoJCQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVsLCAkbGFiZWx0YWcpLnRh Zyhqb2luKG4sJHRibG91dCksICR3cmFwaXRbMF0sICRjbGFzcyk7DQoJCQl9IGVsc2UgaWYg KCR3cmFwaXRbMF0gPT0gJ2xpc3QnKSB7DQoJCQkJLy8gVGFncyBieSBsaXN0LCBvcHRpb25h bGx5IHNwbGl0IGludG8gbmV3IHJvdy9jb2wgZXZlcnkgTiBpdGVtcw0KCQkJCSR0b3RhbEl0 ZW1zID0gY291bnQoJHJzKTsNCgkJCQkkbGltID0gMDsNCgkJCQkkc3R5bGUgPSAkYnJlYWtz dHlsZSA9ICcnOw0KDQoJCQkJJG51bW9wdHMgPSBjb3VudCgkd3JhcGl0KTsNCg0KCQkJCWlm ICgkbnVtb3B0cyA+IDEpIHsNCgkJCQkJJGxpbSA9ICR3cmFwaXRbMV07DQoJCQkJfQ0KCQkJ CWlmICgkbnVtb3B0cyA+IDMpIHsNCgkJCQkJaWYgKCR3cmFwaXRbM10gPT0gJ2J5cm93Jykg ew0KCQkJCQkJJHN0eWxlID0gJyBzdHlsZT0iY2xlYXI6Ym90aDsiJzsNCgkJCQkJCSRicmVh a3N0eWxlID0gJyBzdHlsZT0iZmxvYXQ6bGVmdDsiJzsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ CSRzdHlsZSA9ICcgc3R5bGU9ImZsb2F0OmxlZnQ7Iic7DQoJCQkJCX0NCgkJCQl9DQoNCgkJ CQkvLyBHZW5lcmF0ZSB0aGUgbGlzdA0KCQkJCSRsaXN0b3V0ID0gYXJyYXkoKTsNCgkJCQkk aXRlbUN0ciA9IDA7DQoJCQkJJGNsYXNzID0gKCFlbXB0eSgkY2xhc3MpKSA/ICcgY2xhc3M9 IicuJGNsYXNzLiciJyA6ICcnOw0KCQkJCSRicmVha2NsYXNzID0gKCFlbXB0eSgkYnJlYWtj bGFzcykpID8gJyBjbGFzcz0iJy4kYnJlYWtjbGFzcy4nIicgOiAnJzsNCg0KCQkJCWZvcmVh Y2ggKCRvdXQgYXMgJGl0ZW0pIHsNCgkJCQkJaWYgKCRpdGVtQ3RyID09IDApIHsNCgkJCQkJ CSRsaXN0b3V0W10gPSAiPHVsJHN0eWxlPiI7DQoJCQkJCX0NCgkJCQkJJGxpc3RvdXRbXSA9 ICc8bGknLiRicmVha2NsYXNzLiRicmVha3N0eWxlLic+Jy4kaXRlbVsnZGF0YSddLic8L2xp Pic7DQoJCQkJCSRpdGVtQ3RyKys7DQoJCQkJCWlmICgoJGxpbSA+IDAgJiYgJGl0ZW1DdHIg Pj0gJGxpbSkgfHwgJGl0ZW1DdHIgPj0gJHRvdGFsSXRlbXMtMSkgew0KCQkJCQkJJGxpc3Rv dXRbXSA9ICc8L3VsPic7DQoJCQkJCQkkaXRlbUN0ciA9IDA7DQoJCQkJCX0NCgkJCQl9DQoN CgkJCQlyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZykudGFnKGpvaW4obiwkbGlz dG91dCksICdkaXYnLCAkY2xhc3MpOw0KCQkJfSBlbHNlIGlmICgkd3JhcGl0WzBdID09ICds aXN0Z3JwJykgew0KCQkJCS8vIFRhZ3MgYnkgbGlzdCwgc3BsaXQgaW50byBuZXcgcm93L2Nv bCBldmVyeSB0aW1lIGEgbmV3IGxldmVsICdOJyBpcyByZWFjaGVkDQoJCQkJJHRvdGFsSXRl bXMgPSBjb3VudCgkcnMpOw0KCQkJCSRsZXZlbCA9IDA7DQoJCQkJJHN0eWxlID0gJGJyZWFr c3R5bGUgPSAnJzsNCg0KCQkJCSRudW1vcHRzID0gY291bnQoJHdyYXBpdCk7DQoNCgkJCQlp ZiAoJG51bW9wdHMgPiAxKSB7DQoJCQkJCSRsZXZlbCA9ICR3cmFwaXRbMV07DQoJCQkJfQ0K CQkJCWlmICgkbnVtb3B0cyA+IDMpIHsNCgkJCQkJaWYgKCR3cmFwaXRbM10gPT0gJ2J5cm93 Jykgew0KCQkJCQkJJHN0eWxlID0gJyBzdHlsZT0iY2xlYXI6Ym90aDsiJzsNCgkJCQkJCSRi cmVha3N0eWxlID0gJyBzdHlsZT0iZmxvYXQ6bGVmdDsiJzsNCgkJCQkJfSBlbHNlIHsNCgkJ CQkJCSRzdHlsZSA9ICcgc3R5bGU9ImZsb2F0OmxlZnQ7Iic7DQoJCQkJCX0NCgkJCQl9DQoN CgkJCQkvLyBHZW5lcmF0ZSB0aGUgbGlzdA0KCQkJCSRsaXN0b3V0ID0gYXJyYXkoKTsNCgkJ CQkkaXRlbUN0ciA9IDA7DQoJCQkJJGNsYXNzID0gKCFlbXB0eSgkY2xhc3MpKSA/ICcgY2xh c3M9IicuJGNsYXNzLiciJyA6ICcnOw0KCQkJCSRicmVha2NsYXNzID0gKCFlbXB0eSgkYnJl YWtjbGFzcykpID8gJyBjbGFzcz0iJy4kYnJlYWtjbGFzcy4nIicgOiAnJzsNCg0KCQkJCSRw cmV2ZWwgPSAwOw0KCQkJCWZvcmVhY2ggKCRvdXQgYXMgJGl0ZW0pIHsNCgkJCQkJaWYgKCRw cmV2ZWwgPj0gJGl0ZW1bJ2xldmVsJ10gJiYgJGl0ZW1bJ2xldmVsJ10gPD0gJGxldmVsKSB7 DQoJCQkJCQlpZiAoJGl0ZW1DdHIgPiAwKSB7DQoJCQkJCQkJJGxpc3RvdXRbXSA9ICc8L3Vs Pic7DQoJCQkJCQl9DQoJCQkJCQkkbGlzdG91dFtdID0gIjx1bCRzdHlsZT4iOw0KCQkJCQl9 DQoJCQkJCSRsaXN0b3V0W10gPSAnPGxpJy4kYnJlYWtjbGFzcy4kYnJlYWtzdHlsZS4nPicu JGl0ZW1bJ2RhdGEnXS4nPC9saT4nOw0KCQkJCQkkcHJldmVsID0gJGl0ZW1bJ2xldmVsJ107 DQoJCQkJCWlmICgkaXRlbUN0ciA+PSAkdG90YWxJdGVtcy0xKSB7DQoJCQkJCQkkbGlzdG91 dFtdID0gJzwvdWw+JzsNCgkJCQkJfQ0KCQkJCQkkaXRlbUN0cisrOw0KCQkJCX0NCg0KCQkJ CXJldHVybiBkb0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKS50YWcoam9pbihuLCRsaXN0b3V0 KSwgJ2RpdicsICRjbGFzcyk7DQoNCgkJCX0gZWxzZSB7DQoJCQkJLy9UT0RPOiBvbmx5IHVz ZSB0aGUgZGF0YSBjb2x1bW4gZnJvbSAkb3V0DQoJCQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVs LCAkbGFiZWx0YWcpLmRvV3JhcCgkb3V0LCAkd3JhcGl0WzBdLCAkYnJlYWssICRjbGFzcywg JGJyZWFrY2xhc3MpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRmluZCBzb21lIHZhbHVlIGluIGEgdHJlZSBh bmQgcmV0dXJuIHRoZSBtYXRjaGluZyBlbnRyaWVzDQpmdW5jdGlvbiBzbWRfdGFnX3RyZWVf c2VhcmNoKCR2YWwsICR0cmVlLCAkbGltaXQ9MCwgJGZpZWxkPSduYW1lJykgew0KCSRjdHIg PSAwOw0KCSRvdXQgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCR0cmVlIGFzICRpZHggPT4gJGVu dHJ5KSB7DQoJCWlmICgkZW50cnlbJGZpZWxkXSA9PSAkdmFsKSB7DQoJCQkkb3V0W10gPSAk dHJlZVskaWR4XTsNCgkJCSRjdHIrKzsNCgkJfQ0KCQlpZiAoJGxpbWl0ID4gMCAmJiAkY3Ry ID09ICRsaW1pdCkgew0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUEhQNCBlcXVpdmFsZW50IG9mIGFy cmF5X2NvbWJpbmUgKGZyb20gaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlv bi5hcnJheS1jb21iaW5lLnBocCkNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdhcnJheV9jb21i aW5lJykpIHsNCmZ1bmN0aW9uIGFycmF5X2NvbWJpbmUoJGFycjEsICRhcnIyKSB7DQoJJG91 dCA9IGFycmF5KCk7DQoNCgkkYXJyMSA9IGFycmF5X3ZhbHVlcygkYXJyMSk7DQoJJGFycjIg PSBhcnJheV92YWx1ZXMoJGFycjIpOw0KDQoJZm9yZWFjaCgkYXJyMSBhcyAka2V5MSA9PiAk dmFsdWUxKSB7DQoJJG91dFsoc3RyaW5nKSR2YWx1ZTFdID0gJGFycjJbJGtleTFdOw0KCX0N Cg0KCXJldHVybiAkb3V0Ow0KfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIFBVQkxJQyBUQUdTDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENoZWNr IHRhZ3Mgb2YgYSBwYXJ0aWN1bGFyIHR5cGUsIG9yIHRob3NlIHRoYXQgaGF2ZSBhIHNwZWNp ZmljIHByb3BlcnR5IGluIGNvbnRleHQuDQovL1RPRE86IFRoaW5rIGFib3V0IGNoZWNraW5n IGxvZ2ljLCBlZywgbmFtZT0iYnVzaW5lc3N8cGxlYXN1cmUiIChPUikgbmFtZT0iYnVzaW5l c3MrcGxlYXN1cmUiIChBTkQpDQpmdW5jdGlvbiBzbWRfaWZfdGFnICgkYXR0cywgJHRoaW5n KSB7DQoJZ2xvYmFsICRzbWRfdGFncywgJHNtZF90YWdfdHlwZSwgJHNtZF90aGlzdGFnOw0K DQoJaWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXRyaWdnZXJfZXJyb3Ioc21k X3RhZ3NfZ1R4dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0dXJuOw0KCX0NCg0KCWV4dHJh Y3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyAgICAgPT4gTlVMTCwNCgkJJ2lkJyAgICAgICA9 PiBOVUxMLA0KCQknbmFtZScgICAgID0+IE5VTEwsDQoJCSd0aXRsZScgICAgPT4gTlVMTCwN CgkJJ3BhcmVudCcgICA9PiBOVUxMLA0KCQknY291bnQnICAgID0+IE5VTEwsDQoJCSdjaGls ZHJlbicgPT4gTlVMTCwNCgkJJ2xldmVsJyAgICA9PiBOVUxMLA0KCQknZGVidWcnICAgID0+ ICcwJywNCgkpLCRhdHRzKSk7DQoNCgkvLyBWYWxpZGF0ZSBhdHRzDQoJJHZhbGlkVHlwZXMg PSBhcnJheSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnKTsNCgkkY3R4dCA9IHNt ZF90YWdzX2NvbnRleHQoKTsNCgkkY3R5cGUgPSAkY3R4dFsnY29udGV4dCddOw0KCSR0eXBl ID0gKGluX2FycmF5KCR0eXBlLCAkdmFsaWRUeXBlcykpID8gJHR5cGUgOiAoICgkY3R4dFsn Y29udGV4dCddKSA/ICRjdHh0Wydjb250ZXh0J10gOiAoICgkc21kX3RhZ190eXBlKSA/ICRz bWRfdGFnX3R5cGUgOiAgJHZhbGlkVHlwZXNbMF0gKSApOw0KDQoJJGVxdGVzdCA9IGFycmF5 KCk7DQoJJG51dGVzdCA9IGFycmF5KCk7DQoJJG9wUkUgPSAnLyhcPnxcPlw9fFw8fFw8XD18 XCEpKFswLTlhLXpBLVotIF0rKS8nOw0KDQoJLy8gVE9ETzogQ29uc29saWRhdGUgdGhpcyBp bnRvIGEgbG9vcCBmb3IgZWFjaCAnaWQnLCAnbmFtZScsIHR5cGUnLCAndGl0bGUnLCAuLi4N CgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRpZCwgJHBhcnRzKTsNCgkkZXF0ZXN0 WydpZCddID0gKCRudW08PTApID8gJGlkIDogTlVMTDsNCglpZiAoJG51bT4wKSAkbnV0ZXN0 WydpZCddID0gYXJyYXkoJHBhcnRzWzFdWzBdID0+ICRwYXJ0c1syXVswXSk7DQoNCgkkbnVt ID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRuYW1lLCAkcGFydHMpOw0KCSRlcXRlc3RbJ25h bWUnXSA9ICgkbnVtPD0wKSA/ICRuYW1lIDogTlVMTDsNCglpZiAoJG51bT4wKSAkbnV0ZXN0 WyduYW1lJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCg0KCSRu dW0gPSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJHR5cGUsICRwYXJ0cyk7DQoJJGVxdGVzdFsn dHlwZSddID0gKCRudW08PTApID8gJHR5cGUgOiBOVUxMOw0KCWlmICgkbnVtPjApICRudXRl c3RbJ3R5cGUnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0pOw0KDQoJ JG51bSA9IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkdGl0bGUsICRwYXJ0cyk7DQoJJGVxdGVz dFsndGl0bGUnXSA9ICgkbnVtPD0wKSA/ICR0aXRsZSA6IE5VTEw7DQoJaWYgKCRudW0+MCkg JG51dGVzdFsndGl0bGUnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0p Ow0KDQoJJG51bSA9IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkcGFyZW50LCAkcGFydHMpOw0K CSRlcXRlc3RbJ3BhcmVudCddID0gKCRudW08PTApID8gJHBhcmVudCA6IE5VTEw7DQoJaWYg KCRudW0+MCkgJG51dGVzdFsncGFyZW50J10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBh cnRzWzJdWzBdKTsNCg0KCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJGNvdW50LCAk cGFydHMpOw0KCSRlcXRlc3RbJ2NvdW50J10gPSAoJG51bTw9MCkgPyAkY291bnQgOiBOVUxM Ow0KCWlmICgkbnVtPjApICRudXRlc3RbJ2NvdW50J10gPSBhcnJheSgkcGFydHNbMV1bMF0g PT4gJHBhcnRzWzJdWzBdKTsNCg0KCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJGNo aWxkcmVuLCAkcGFydHMpOw0KCSRlcXRlc3RbJ2NoaWxkcmVuJ10gPSAoJG51bTw9MCkgPyAk Y2hpbGRyZW4gOiBOVUxMOw0KCWlmICgkbnVtPjApICRudXRlc3RbJ2NoaWxkcmVuJ10gPSBh cnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCg0KCSRudW0gPSBwcmVnX21h dGNoX2FsbCgkb3BSRSwgJGxldmVsLCAkcGFydHMpOw0KCSRlcXRlc3RbJ2xldmVsJ10gPSAo JG51bTw9MCkgPyAkbGV2ZWwgOiBOVUxMOw0KCWlmICgkbnVtPjApICRudXRlc3RbJ2xldmVs J10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRzWzJdWzBdKTsNCg0KCWlmICgkZGVi dWcpIHsNCgkJZWNobyAiKysgSUZfVEFHIFRFU1RTICsrIjsNCgkJZG1wKCRlcXRlc3QsICRu dXRlc3QpOw0KCX0NCg0KCS8vIEluaXQNCgkkb3V0ID0gJHJlc3VsdCA9ICRudW1UZXN0cyA9 IDA7DQoJaWYgKGVtcHR5KCRzbWRfdGFncykgJiYgZW1wdHkoJHNtZF90aGlzdGFnKSkgew0K CQkvLyBub3QgaW4gc2NvcGUNCgl9IGVsc2Ugew0KCQkvLyBFcXVhbGl0eSBjb21wYXJpc29u cw0KCQlmb3JlYWNoICgkZXF0ZXN0IGFzICR0bmFtZSA9PiAkdHZhbCkgew0KCQkJaWYgKCFp c19udWxsKCR0dmFsKSkgew0KCQkJCSRudW1UZXN0cysrOw0KCQkJCWlmICgkc21kX3RoaXN0 YWcpIHsNCgkJCQkJLy8gTG9jYWwgc2NvcGUNCgkJCQkJaWYgKCRzbWRfdGhpc3RhZ1sndGFn XycuJHRuYW1lXSA9PSAkdHZhbCkgew0KCQkJCQkJJG91dCsrOw0KCQkJCQl9DQoJCQkJfSBl bHNlIHsNCgkJCQkJLy8gR2xvYmFsIHNjb3BlDQoJCQkJCWlmICgkdG5hbWUgPT0gInR5cGUi KSB7DQoJCQkJCQlpZiAoJHNtZF90YWdfdHlwZSA9PSAkdHlwZSB8fCAkY3R5cGUgPT0gJHR5 cGUpIHsNCgkJCQkJCQkkb3V0Kys7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGlzc2V0 KCRzbWRfdGFnc1skdHlwZV1bJ3RhZ18nLiR0bmFtZV0pICYmIGluX2FycmF5KCR0dmFsLCAk c21kX3RhZ3NbJHR5cGVdWyd0YWdfJy4kdG5hbWVdLCBlbXB0eSgkdHZhbCkgJiYgJHR2YWwg IT09ICcwJykpIHsNCgkJCQkJCSRvdXQrKzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0K CQkvLyBOdW1lcmljIGNvbXBhcmlzb25zDQoJCWZvcmVhY2ggKCRudXRlc3QgYXMgJHRuYW1l ID0+ICR0dmFsKSB7DQoJCQkkbnVtVGVzdHMrKzsNCgkJCSRvcCA9IGN1cnJlbnQoYXJyYXlf a2V5cygkdHZhbCkpOw0KCQkJJHZhbCA9IGN1cnJlbnQoJHR2YWwpOw0KCQkJaWYgKCRzbWRf dGhpc3RhZykgew0KCQkJCSRjb21wYXJpc29uID0gJHNtZF90aGlzdGFnWyd0YWdfJy4kdG5h bWVdOw0KCQkJfSBlbHNlIHsNCgkJCQkkY29tcGFyaXNvbiA9ICRzbWRfdGFnc1skdHlwZV1b J3RhZ18nLiR0bmFtZV07DQoJCQl9DQoJCQlzd2l0Y2ggKCRvcCkgew0KCQkJCWNhc2UgJz4n Og0KCQkJCQlpZiAoaXNzZXQoJGNvbXBhcmlzb24pICYmICRjb21wYXJpc29uID4gJHZhbCkg ew0KCQkJCQkJJG91dCsrOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJz49JzoN CgkJCQkJaWYgKGlzc2V0KCRjb21wYXJpc29uKSAmJiAkY29tcGFyaXNvbiA+PSAkdmFsKSB7 DQoJCQkJCQkkb3V0Kys7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnPCc6DQoJ CQkJCWlmIChpc3NldCgkY29tcGFyaXNvbikgJiYgJGNvbXBhcmlzb24gPCAkdmFsKSB7DQoJ CQkJCQkkb3V0Kys7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnPD0nOg0KCQkJ CQlpZiAoaXNzZXQoJGNvbXBhcmlzb24pICYmICRjb21wYXJpc29uIDw9ICR2YWwpIHsNCgkJ CQkJCSRvdXQrKzsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICchJzoNCgkJCQkJ aWYgKGlzc2V0KCRjb21wYXJpc29uKSAmJiAkY29tcGFyaXNvbiAhPSAkdmFsKSB7DQoJCQkJ CQkkb3V0Kys7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQkJCQl9DQoNCgkJLy8g Q291bnQgaG93IG1hbnkgc3VjY2Vzc2VzIHRoZXJlIHdlcmUNCgkJaWYgKCRkZWJ1Zykgew0K CQkJZWNobyAiKysgTlVNIFRFU1RTICYgUkVTVUxUKysiOw0KCQkJZG1wKCRudW1UZXN0cyk7 DQoJCQlkbXAoJG91dCk7DQoJCX0NCgkJaWYgKCRudW1UZXN0cyA9PSAkb3V0KSB7DQoJCQkk cmVzdWx0ID0gMTsNCgkJfQ0KCX0NCg0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcs ICRyZXN1bHQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfaWZfdGFnX2xpc3QgKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF90YWdf dHlwZTsNCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAoIWVtcHR5KCRzbWRfdGFn X3R5cGUpKSkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJldHVy biBuYW1lL3RpdGxlIG9mIGN1cnJlbnQgdGFnDQpmdW5jdGlvbiBzbWRfdGFnX25hbWUoJGF0 dHMsICR0aGluZz0nJykgew0KCWdsb2JhbCAkc21kX3RoaXN0YWcsICRwZXJtbGlua19tb2Rl Ow0KDQoJaWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXRyaWdnZXJfZXJyb3Io c21kX3RhZ3NfZ1R4dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0dXJuOw0KCX0NCg0KCWV4 dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0aXRsZScgICAgICAgPT4gMSwNCgkJJ2xpbmsnICAg ICAgICA9PiAnJywNCgkJJ3NlY3Rpb24nICAgICA9PiAnJywNCgkJJ2NsZWFudXJscycgICA9 PiAxLA0KCQkncGFyZW50JyAgICAgID0+IDAsIC8vIG5vdCB1c2VmdWwgdG8gcHJpbnQgYnV0 IGdvb2QgZm9yIFVSTHMgdG8gbmF2IGJhY2sgdXAgdGhlIHRyZWUNCgkJJ3BhcmVudGxhYmVs JyA9PiAnVXAgYSBsZXZlbCcsDQoJCSd3cmFwdGFnJyAgICAgPT4gJycsDQoJCSdjbGFzcycg ICAgICAgPT4gX19GVU5DVElPTl9fLA0KCQknc3R5bGUnICAgICAgID0+ICcnLA0KCQkncGFk X3N0cicgICAgID0+ICcnLA0KCQkncGFkX3BvcycgICAgID0+ICdsZWZ0JywgLy8gbGVmdC9y aWdodC9ib3RoIHdpdGggb3B0aW9uYWwgOmluIHN1ZmZpeCB0byBpbmRpY2F0ZSBpZiBpdCdz IHRvIGdvIGluc2lkZSB0aGUgbGluaw0KCSksJGF0dHMpKTsNCg0KCSRzbWRwcmVmID0gc21k X3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfdV9zZWMnLCAnc21kX3RhZ191X3BuYW0n LCAnc21kX3RhZ191X3B0eXAnKSwgMSk7DQoJJHVybHNlYyA9IGRvX2xpc3QoJHNtZHByZWZb J3NtZF90YWdfdV9zZWMnXVsndmFsJ10pOw0KCSRzZWN0aW9uID0gKCRzZWN0aW9uKSA/ICRz ZWN0aW9uIDogJHVybHNlY1swXTsNCgkkaW5fZGVmYXVsdCA9IChpbl9hcnJheSgkc2VjdGlv biwgJHVybHNlYykpOw0KCSR1cmxuYW0gPSAkc21kcHJlZlsnc21kX3RhZ191X3BuYW0nXVsn dmFsJ107DQoJJHVybHR5cCA9ICRzbWRwcmVmWydzbWRfdGFnX3VfcHR5cCddWyd2YWwnXTsN Cg0KCSRsYWJlbCA9ICgkcGFyZW50KSA/ICRwYXJlbnRsYWJlbCA6ICgoJHRpdGxlKSA/ICRz bWRfdGhpc3RhZ1sndGFnX3RpdGxlJ10gOiAkc21kX3RoaXN0YWdbJ3RhZ19uYW1lJ10pOw0K CSR0bmFtZSA9ICgkcGFyZW50KSA/ICRzbWRfdGhpc3RhZ1sndGFnX3BhcmVudCddIDogJHNt ZF90aGlzdGFnWyd0YWdfbmFtZSddOw0KCSRsZXZlbCA9ICRzbWRfdGhpc3RhZ1sndGFnX2xl dmVsJ107DQoJJHN0eWxlID0gKCRzdHlsZSkgPyAnIHN0eWxlPSInLiRzdHlsZS4nIicgOiAn JzsNCgkkcGFkZGluZyA9ICgkcGFkX3N0cikgPyBzdHJfcmVwZWF0KCRwYWRfc3RyLCAkbGV2 ZWwpIDogJyc7DQoJJHBhZF9wb3MgPSBkb19saXN0KCRwYWRfcG9zLCAnOicpOw0KCSRwYWRb J2xpbiddID0gKCRwYWRkaW5nICYmIChpbl9hcnJheSgnbGVmdCcsICRwYWRfcG9zKSAhPT0g ZmFsc2UgfHwgaW5fYXJyYXkoJ2JvdGgnLCAkcGFkX3BvcykgIT09IGZhbHNlKSAmJiBpbl9h cnJheSgnaW4nLCAkcGFkX3BvcykgIT09IGZhbHNlKSA/ICRwYWRkaW5nIDogJyc7DQoJJHBh ZFsncmluJ10gPSAoJHBhZGRpbmcgJiYgKGluX2FycmF5KCdyaWdodCcsICRwYWRfcG9zKSAh PT0gZmFsc2UgfHwgaW5fYXJyYXkoJ2JvdGgnLCAkcGFkX3BvcykgIT09IGZhbHNlKSAmJiBp bl9hcnJheSgnaW4nLCAkcGFkX3BvcykgIT09IGZhbHNlKSA/ICRwYWRkaW5nIDogJyc7DQoJ JHBhZFsnbCddID0gKCRwYWRkaW5nICYmIChpbl9hcnJheSgnbGVmdCcsICRwYWRfcG9zKSAh PT0gZmFsc2UgfHwgaW5fYXJyYXkoJ2JvdGgnLCAkcGFkX3BvcykgIT09IGZhbHNlKSAmJiAo ZW1wdHkoJHBhZFsnbGluJ10pIHx8ICEkbGluaykpID8gJHBhZGRpbmcgOiAnJzsNCgkkcGFk WydyJ10gPSAoJHBhZGRpbmcgJiYgKGluX2FycmF5KCdyaWdodCcsICRwYWRfcG9zKSAhPT0g ZmFsc2UgfHwgaW5fYXJyYXkoJ2JvdGgnLCAkcGFkX3BvcykgIT09IGZhbHNlKSAmJiAoZW1w dHkoJHBhZFsncmluJ10pIHx8ICEkbGluaykpID8gJHBhZGRpbmcgOiAnJzsNCgkkZGVzdCA9 ICgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knIHx8ICEkY2xlYW51cmxzKQ0KCQkJCT8gcGFn ZWxpbmt1cmwoYXJyYXkoJ3MnID0+ICRzZWN0aW9uLCAkdXJsbmFtID0+ICR0bmFtZSwgJHVy bHR5cCA9PiAkc21kX3RoaXN0YWdbJ3RhZ190eXBlJ10pKQ0KCQkJCTogJy8nLiRzZWN0aW9u LicvJy4oKCRpbl9kZWZhdWx0KSA/ICcnIDogJHVybHNlY1swXS4nLycpLiRzbWRfdGhpc3Rh Z1sndGFnX3R5cGUnXS4nLycuJHRuYW1lOw0KCWlmICgkdGhpbmcpIHsNCgkJJG91dCA9ICc8 YScuDQoJCQkoJHBlcm1saW5rX21vZGUgIT0gJ21lc3N5JyA/ICcgcmVsPSJ0YWciJyA6ICcn KS4NCgkJCSggKCRjbGFzcyBhbmQgISR3cmFwdGFnKSA/ICcgY2xhc3M9IicuJGNsYXNzLici JyA6ICcnICkuDQoJCQknIGhyZWY9IicuJGRlc3QuJyInLg0KCQkJKCR0aXRsZSA/ICcgdGl0 bGU9IicuJGxhYmVsLiciJyA6ICcnKS4NCgkJCSc+Jy5wYXJzZSgkdGhpbmcpLic8L2E+JzsN Cgl9IGVsc2VpZiAoJGxpbmspIHsNCgkJJG91dCA9ICRwYWRbJ2wnXS4nPGEnLg0KCQkJKCRw ZXJtbGlua19tb2RlICE9ICdtZXNzeScgPyAnIHJlbD0idGFnIicgOiAnJykuDQoJCQknIGhy ZWY9IicuJGRlc3QuJyI+Jy4kcGFkWydsaW4nXS4kbGFiZWwuJHBhZFsncmluJ10uJzwvYT4n LiRwYWRbJ3InXTsNCgl9IGVsc2Ugew0KCQkkb3V0ID0gJHBhZFsnbCddLiRsYWJlbC4kcGFk WydyJ107DQoJfQ0KDQoJcmV0dXJuIGRvVGFnKCRvdXQsICR3cmFwdGFnLCAkY2xhc3MsICRz dHlsZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmV0dXJuICMg b2YgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFnDQovL1RPRE86IHRoaW5rIGFib3V0 IHBlci1zZWN0aW9uIC8gcGVyLWNhdGVnb3J5IGNvdW50cw0KZnVuY3Rpb24gc21kX3RhZ19j b3VudCgkYXR0cywgJHRoaW5nPScnKSB7DQoJZ2xvYmFsICRzbWRfdGhpc3RhZzsNCg0KCWlm ICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgew0KCQl0cmlnZ2VyX2Vycm9yKHNtZF90YWdz X2dUeHQoJ25vdF9hdmFpbGFibGUnKSk7DQoJCXJldHVybjsNCgl9DQoNCglleHRyYWN0KGxB dHRzKGFycmF5KA0KCQknY2xhc3MnICAgICAgPT4gX19GVU5DVElPTl9fLA0KCQknc3R5bGUn ICAgICAgPT4gJycsDQoJCSd3cmFwdGFnJyAgICA9PiAnJywNCgkJJ3dyYXBjb3VudCcgID0+ ICcgKDopJywNCgkJJ3Nob3dlbXB0eScgID0+ICcxJywNCgkJJ3BhcmFtZGVsaW0nID0+ICc6 JywNCgkpLCRhdHRzKSk7DQoNCgkkd3JhcGNvdW50ID0gZXhwbG9kZSgkcGFyYW1kZWxpbSwg JHdyYXBjb3VudCk7IC8vIGRvX2xpc3QgZG9lcyBhIHRyaW06IGRvbid0IHdhbnQgdGhhdA0K CSRzdHlsZSA9ICgkc3R5bGUpID8gJyBzdHlsZT0iJy4kc3R5bGUuJyInIDogJyc7DQoJaWYg KGNvdW50KCR3cmFwY291bnQpID09IDEpIHsNCgkJJHdyYXBjb3VudFsxXSA9ICR3cmFwY291 bnRbMF07DQoJfQ0KDQoJJG91dCA9ICRzbWRfdGhpc3RhZ1sndGFnX2NvdW50J107DQoJJG91 dCA9ICgkb3V0ID09IDAgJiYgISRzaG93ZW1wdHkpID8gJycgOiAkd3JhcGNvdW50WzBdLiRv dXQuJHdyYXBjb3VudFsxXTsNCg0KCXJldHVybiBkb1RhZygkb3V0LCAkd3JhcHRhZywgJGNs YXNzLCAkc3R5bGUpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJl dHVybiBvdGhlciBpbmZvIGFib3V0IHRoZSBjdXJyZW50IHRhZw0KZnVuY3Rpb24gc21kX3Rh Z19pbmZvKCRhdHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHNtZF90aGlzdGFnOw0KDQoJ aWYgKCFzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7DQoJCXRyaWdnZXJfZXJyb3Ioc21kX3Rh Z3NfZ1R4dCgnbm90X2F2YWlsYWJsZScpKTsNCgkJcmV0dXJuOw0KCX0NCg0KCWV4dHJhY3Qo bEF0dHMoYXJyYXkoDQoJCSdpdGVtJyAgICAgICA9PiAnbmFtZScsDQoJCSd3cmFwdGFnJyAg ICA9PiAnJywNCgkJJ2JyZWFrJyAgICAgID0+ICdicicsDQoJCSdjbGFzcycgICAgICA9PiBf X0ZVTkNUSU9OX18sDQoJCSdicmVha2NsYXNzJyA9PiAnJywNCgkpLCRhdHRzKSk7DQoNCgkk b3V0ID0gYXJyYXkoKTsNCgkkYXZhaWxhYmxlSXRlbXMgPSBhcnJheSgnaWQnLCduYW1lJywn dGl0bGUnLCdsZXR0ZXJuYW1lJywnbGV0dGVydGl0bGUnLCd0eXBlJywncGFyZW50JywnY2hp bGRyZW4nLCdsZXZlbCcsJ2NvdW50JywnaW5kZW50JywgJ3dlaWdodCcpOw0KCSRpdGVtcyA9 IGRvX2xpc3QoJGl0ZW0pOw0KCWZvcmVhY2ggKCRpdGVtcyBhcyAkd2hhdG5vdCkgew0KCQlp ZiAoaW5fYXJyYXkoJHdoYXRub3QsICRhdmFpbGFibGVJdGVtcykpIHsNCgkJCSRvdXRbXSA9 ICRzbWRfdGhpc3RhZ1sndGFnXycuJHdoYXRub3RdOw0KCQl9DQoJfQ0KCXJldHVybiBkb1dy YXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVsYXRlZCBhcnRpY2xlcy9pbWFn ZXMvZmlsZXMvbGlua3MgYnkgdGFnDQpmdW5jdGlvbiBzbWRfcmVsYXRlZF90YWdzKCRhdHRz LCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHRoaXNhcnRpY2xlLCAkdGhpc2ZpbGUsICR0aGlz bGluaywgJHRoaXNpbWFnZSwgJHByZXRleHQsICRwcmVmcywgJHNtZF90YWdzLCAkc21kX3Ro aXN0YWc7DQoNCglpZiAoIXNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9l cnJvcihzbWRfdGFnc19nVHh0KCdub3RfYXZhaWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0K DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnICAgICAgID0+ICcnLA0KCQknc2Vj dGlvbicgICAgPT4gJHByZXRleHRbJ3MnXSwNCgkJJ3N0YXR1cycgICAgID0+ICc0JywNCgkJ J2xpbWl0JwkgICAgPT4gOTk5OTksDQoJCSdvZmZzZXQnCSAgICA9PiAwLA0KCQknZm9ybScJ ICAgID0+ICcnLA0KCQknbWF0Y2gnICAgICAgPT4gJ3RhZ19uYW1lJywNCgkJJ21hdGNoX3Nl bGYnID0+IDAsDQoJCSdub193aWRvdycgICA9PiBAJHByZWZzWyd0aXRsZV9ub193aWRvdydd LA0KCQknc29ydCcgICAgICAgPT4gJycsDQoJCSdsYWJlbCcgICAgICA9PiAnJywNCgkJJ2xh YmVsdGFnJyAgID0+ICcnLA0KCQknd3JhcHRhZycgICAgPT4gJycsDQoJCSdicmVhaycgICAg ICA9PiAnYnInLA0KCQknY2xhc3MnICAgICAgPT4gX19GVU5DVElPTl9fLA0KCQknZGVsaW0n ICAgICAgPT4gJywnLA0KCQkncGFyYW1kZWxpbScgPT4gJzonLA0KCQknZGVidWcnICAgICAg PT4gJzAnLA0KCSksJGF0dHMpKTsNCg0KCS8vIFZhbGlkYXRlIGF0dHMNCgkkdmFsaWRUeXBl cyA9IGFycmF5KCdhcnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGluaycpOw0KCSRjdHh0ID0g c21kX3RhZ3NfY29udGV4dCgpOw0KDQoJJHNjb3BlID0gJGN0eHRbJ3Njb3BlJ107DQoJJGlk bGlzdCA9ICRjdHh0WydpZCddOw0KCSRjdHlwZSA9ICRjdHh0Wydjb250ZXh0J107DQoJJHR5 cGUgPSAoaW5fYXJyYXkoJHR5cGUsICR2YWxpZFR5cGVzKSkgPyAkdHlwZSA6ICgoJGN0eHRb J2NvbnRleHQnXSkgPyAkY3R4dFsnY29udGV4dCddIDogJHZhbGlkVHlwZXNbMF0pOw0KDQoJ JHNlY3Rpb25DbGF1c2UgPSAoJHNlY3Rpb24pID8gIiBBTkQgdHhwLlNlY3Rpb24gSU4gKCci LmpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgkc2VjdGlvbikpKS4iJykiIDogJyc7DQoJ JHN0YXR1cyA9IGRvX2xpc3QoJHN0YXR1cyk7DQoJJHN0YXRpID0gYXJyYXkoKTsNCglmb3Jl YWNoICgkc3RhdHVzIGFzICRzdGF0KSB7DQoJCWlmIChlbXB0eSgkc3RhdCkpIHsNCgkJCWNv bnRpbnVlOw0KCQl9IGVsc2UgaWYgKGlzX251bWVyaWMoJHN0YXQpKSB7DQoJCQkkc3RhdGlb XSA9ICRzdGF0Ow0KCQl9IGVsc2Ugew0KCQkJJHN0YXRpW10gPSBnZXRTdGF0dXNOdW0oJHN0 YXQpOw0KCQl9DQoJfQ0KCSRzdGF0U1FMID0gJyBBTkQgdHhwLlN0YXR1cyBJTiAoJy5qb2lu KCcsJywgJHN0YXRpKS4nKSc7DQoNCgkkb3V0ID0gYXJyYXkoKTsNCg0KCWlmICghJHNvcnQp IHsNCgkJc3dpdGNoICgkdHlwZSkgew0KCQkJY2FzZSAiYXJ0aWNsZSI6DQoJCQkJJHNvcnQg PSAiUG9zdGVkIGRlc2MiOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiaW1hZ2UiOg0KDQoJCQlj YXNlICJsaW5rIjoNCgkJCQkkc29ydCA9ICJkYXRlIGRlc2MiOw0KCQkJCWJyZWFrOw0KCQkJ Y2FzZSAiZmlsZSI6DQoJCQkJJHNvcnQgPSAiY3JlYXRlZCBkZXNjIjsNCgkJCQlicmVhazsN CgkJfQ0KCX0NCg0KCS8vIExvb2t1cCB0YWJsZSBmb3IgbWFraW5nIFNRTCBxdWVyaWVzDQoJ JHNxbFN0dWJzID0gYXJyYXkoDQoJCSJhcnRpY2xlIiA9PiBhcnJheSgNCgkJCSJzZWxlY3Qi ID0+ICIqLHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3Rh bXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QsIHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVF eHBpcmVzIiwNCgkJCSJ0YWJsZSIgPT4gInRleHRwYXR0ZXJuIiwNCgkJCSJndGFncyIgPT4g JHRoaXNhcnRpY2xlLA0KCQkJImdpZCIgPT4gInRoaXNpZCIsDQoJCSksDQoJCSJpbWFnZSIg PT4gYXJyYXkoDQoJCQkic2VsZWN0IiA9PiAiKiIsDQoJCQkidGFibGUiID0+ICJ0eHBfaW1h Z2UiLA0KCQkJImd0YWdzIiA9PiAkdGhpc2ltYWdlLA0KCQkJImdpZCIgPT4gImlkIiwNCgkJ KSwNCgkJImZpbGUiID0+IGFycmF5KA0KCQkJInNlbGVjdCIgPT4gIioiLA0KCQkJInRhYmxl IiA9PiAidHhwX2ZpbGUiLA0KCQkJImd0YWdzIiA9PiAkdGhpc2ZpbGUsDQoJCQkiZ2lkIiA9 PiAiaWQiLA0KCQkpLA0KCQkibGluayIgPT4gYXJyYXkoDQoJCQkic2VsZWN0IiA9PiAiKiIs DQoJCQkidGFibGUiID0+ICJ0eHBfbGluayIsDQoJCQkiZ3RhZ3MiID0+ICR0aGlzbGluaywN CgkJCSJnaWQiID0+ICJpZCIsDQoJCSksDQoJKTsNCg0KCS8vIEV4dHJhY3Qgc3R1ZmYgdG8g bWF0Y2ggJiBtYWtlIHVwIHF1ZXJ5IHJlcGxhY2VtZW50IHZhcmlhYmxlcw0KCSRtYXRjaCA9 IGRvX2xpc3QoJG1hdGNoLCAkcGFyYW1kZWxpbSk7DQoJJG1hdGNoVHlwZSA9IGFycmF5X3No aWZ0KCRtYXRjaCk7DQoJaWYgKGNvdW50KCRtYXRjaCkgPT0gMCkgew0KCQkvLyBBc3N1bWUg Y3VycmVudCB0eXBlIHVubGVzcyBhIHRhZyBpcyBiZWluZyBtYXRjaGVkIChpbiB3aGljaCBj YXNlLCB1c2UgJGN0eXBlKQ0KCQkkbWF0Y2hXaXRoID0gYXJyYXkoJG1hdGNoVHlwZSk7DQoJ CSRtYXRjaFR5cGUgPSAoc3RycG9zKCRtYXRjaFdpdGhbMF0sICd0YWdfJykgIT09IGZhbHNl KSA/ICRjdHlwZSA6ICR0eXBlOw0KCX0gZWxzZSB7DQoJCSRtYXRjaFdpdGggPSAkbWF0Y2g7 DQoJfQ0KDQoJJG1hdGNoZXMgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRtYXRjaFdpdGggYXMg JG1hdGNoSXRlbSkgew0KCQlpZiAoc3RycG9zKCRtYXRjaEl0ZW0sICd0YWdfJykgIT09IGZh bHNlKSB7DQoJCQkkbG9va2luID0gKGlzc2V0KCRzbWRfdGFnc1skbWF0Y2hUeXBlXSkpID8g JHNtZF90YWdzWyRtYXRjaFR5cGVdIDogYXJyYXkoKTsNCgkJfSBlbHNlIHsNCgkJCSRsb29r aW4gPSAkc3FsU3R1YnNbJG1hdGNoVHlwZV1bImd0YWdzIl07DQoJCX0NCgkJaWYgKGlzc2V0 KCRsb29raW5bJG1hdGNoSXRlbV0pKSB7DQoJCQkkdGhpc21hdGNoID0gJGxvb2tpblskbWF0 Y2hJdGVtXTsNCgkJCWlmIChpc19hcnJheSgkdGhpc21hdGNoKSkgew0KCQkJCWZvcmVhY2gg KCR0aGlzbWF0Y2ggYXMgJHN1YklEID0+ICRzdWJJdGVtKSB7DQoJCQkJCWlmIChpbl9hcnJh eSgkc3ViSUQsICRpZGxpc3QpKSB7DQoJCQkJCQkkbWF0Y2hlc1tdID0gJHN1Ykl0ZW07DQoJ CQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRtYXRjaGVzW10gPSAkdGhpc21hdGNo Ow0KCQkJfQ0KCQl9DQoJfQ0KCSRtYXRjaGVzID0gYXJyYXlfdW5pcXVlKCRtYXRjaGVzKTsN CglpZiAoJGRlYnVnKSB7DQoJCWVjaG8gIisrIE1BVENIRVMgKysgIjsNCgkJZG1wKCRtYXRj aGVzKTsNCgl9DQoNCgkvLyBDb252ZXJ0IGFib3ZlIG9wdHMgdG8gU1FMIHF1ZXJ5IGNsYXVz ZXMNCgkkZXhjbHVkZUNsYXVzZSA9ICgkbWF0Y2hfc2VsZikgPyAnJyA6ICcgQU5EIHR4cC5p ZCE9IicuJHNxbFN0dWJzWyR0eXBlXVsiZ3RhZ3MiXVskc3FsU3R1YnNbJHR5cGVdWyJnaWQi XV0uJyInOw0KCSRtYXRjaENsYXVzZSA9ICIgQU5EICIgLigoJG1hdGNoZXMpID8gInNtdC5u YW1lIElOICgiIC5qb2luKCIsIiwgZG9BcnJheSgkbWF0Y2hlcywgJ2RvUXVvdGUnKSkuICIp IiA6ICJzbXQubmFtZSA9ICcnIik7DQoJJG9yZGVyQnkgPSAiIE9SREVSIEJZICIgLiRzb3J0 LiAiIExJTUlUICIgLiRvZmZzZXQuICIsIiAuJGxpbWl0Ow0KDQoJc3dpdGNoICgkdHlwZSkg ew0KCQljYXNlICJhcnRpY2xlIjoNCgkJCSRycyA9IGdldFJvd3MoIlNFTEVDVCAiLiRzcWxT dHVic1skdHlwZV1bInNlbGVjdCJdLiIgRlJPTSAiLnNhZmVfcGZ4KCRzcWxTdHVic1skdHlw ZV1bInRhYmxlIl0pLiIgQVMgdHhwDQoJCQkJTEVGVCBKT0lOICIuUEZYLlNNRF9UQUdVLiAi IEFTIHR1IE9OIHR4cC5pZCA9IHR1Lml0ZW1faWQNCgkJCQlMRUZUIEpPSU4gIi5QRlguU01E X1RBRy4gIiBBUyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkDQoJCQkJV0hFUkUgdHUudHlw ZT0nYXJ0aWNsZSciIC4gJHN0YXRTUUwgLiAkZXhjbHVkZUNsYXVzZSAuICRzZWN0aW9uQ2xh dXNlIC4gJG1hdGNoQ2xhdXNlIC4gJG9yZGVyQnksICRkZWJ1Zyk7DQoJCQlpZiAoJHJzKSB7 DQoJCQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCQkJZWNobyAiKysgUkVDT1JEIFNFVCArKyI7 DQoJCQkJCWRtcCgkcnMpOw0KCQkJCX0NCgkJCQkkdW5pcXJzID0gYXJyYXkoKTsNCgkJCQlm b3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJCQlpZiAoIWluX2FycmF5KCRyb3dbJ0lEJ10s ICR1bmlxcnMpKSB7DQoJCQkJCQkkc2FmZSA9ICgkdGhpc2FydGljbGUpID8gJHRoaXNhcnRp Y2xlIDogTlVMTDsNCgkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkJCQkk cm93WydUaXRsZSddID0gKCRub193aWRvdykgPyBub1dpZG93KGVzY2FwZV90aXRsZSgkcm93 WydUaXRsZSddKSkgOiBlc2NhcGVfdGl0bGUoJHJvd1snVGl0bGUnXSk7DQoJCQkJCQkkb3V0 W10gPSAoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgk dGhpbmcpIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlua3VybCgkcm93KSkpOw0KCQkJ CQkJJHVuaXFyc1tdID0gJHJvd1snSUQnXTsNCgkJCQkJCSR0aGlzYXJ0aWNsZSA9ICRzYWZl Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgImltYWdlIjoNCgkJ CSRycyA9IGdldFJvd3MoIg0KCQkJCVNFTEVDVCB0eHAuaWQsIHR4cC5uYW1lLCB0eHAuY2F0 ZWdvcnksIHR4cC5leHQsIHR4cC53LCB0eHAuaCwgdHhwLmFsdCwgdHhwLmNhcHRpb24sIHR4 cC5kYXRlLCB0eHAuYXV0aG9yLCB0eHAudGh1bWJuYWlsLCB0dS5pdGVtX2lkLCB0dS50YWdf aWQsIHNtdC5pZCBBUyBzbXRpZCwgc210Lm5hbWUgQVMgc210bmFtZSwgc210LnR5cGUsIHNt dC5wYXJlbnQsIHNtdC5sZnQsIHNtdC5yZ3QsIHNtdC50aXRsZQ0KCQkJCUZST00gIi5zYWZl X3BmeCgndHhwX2ltYWdlJykuIiBBUyB0eHANCgkJCQlMRUZUIEpPSU4gIi5QRlguU01EX1RB R1UuICIgQVMgdHUgT04gdHhwLmlkID0gdHUuaXRlbV9pZA0KCQkJCUxFRlQgSk9JTiAiLlBG WC5TTURfVEFHLiAiIEFTIHNtdCBPTiB0dS50YWdfaWQgPSBzbXQuaWQNCgkJCQlXSEVSRSB0 dS50eXBlPSdpbWFnZSciIC4gJGV4Y2x1ZGVDbGF1c2UgLiAkbWF0Y2hDbGF1c2UgLiAkb3Jk ZXJCeSwgJGRlYnVnKTsNCgkJCWlmICgkcnMpIHsNCgkJCQlpZiAoJGRlYnVnID4gMSkgew0K CQkJCQllY2hvICIrKyBSRUNPUkQgU0VUICsrIjsNCgkJCQkJZG1wKCRycyk7DQoJCQkJfQ0K CQkJCSR1bmlxcnMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7DQoJ CQkJCWlmICghaW5fYXJyYXkoJHJvd1snaWQnXSwgJHVuaXFycykpIHsNCgkJCQkJCSRzYWZl ID0gKCR0aGlzaW1hZ2UpID8gJHRoaXNpbWFnZSA6IE5VTEw7DQoJCQkJCQkkdGhpc2ltYWdl ID0gaW1hZ2VfZm9ybWF0X2luZm8oJHJvdyk7DQoJCQkJCQkkb3V0W10gPSAoJGZvcm0pID8g cGFyc2VfZm9ybSgkZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogaW1hZ2Uo YXJyYXkoJ2lkJyA9PiAkcm93WydpZCddKSkpOw0KCQkJCQkJJHVuaXFyc1tdID0gJHJvd1sn aWQnXTsNCgkJCQkJCSR0aGlzaW1hZ2UgPSAkc2FmZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0N CgkJCWJyZWFrOw0KCQljYXNlICJmaWxlIjoNCgkJCSRycyA9IGdldFJvd3MoIg0KCQkJCVNF TEVDVCB0eHAuaWQsIHR4cC5maWxlbmFtZSwgdHhwLmNhdGVnb3J5LCB0eHAucGVybWlzc2lv bnMsIHR4cC5kZXNjcmlwdGlvbiwgdHhwLmRvd25sb2FkcywgdHhwLnN0YXR1cywgdHhwLm1v ZGlmaWVkLCB0eHAuY3JlYXRlZCwgdHhwLnNpemUsIHR1Lml0ZW1faWQsIHR1LnRhZ19pZCwg c210LmlkIEFTIHNtdGlkLCBzbXQubmFtZSBBUyBzbXRuYW1lLCBzbXQudHlwZSwgc210LnBh cmVudCwgc210LmxmdCwgc210LnJndCwgc210LnRpdGxlDQoJCQkJRlJPTSAiLnNhZmVfcGZ4 KCd0eHBfZmlsZScpLiIgQVMgdHhwDQoJCQkJTEVGVCBKT0lOICIuUEZYLlNNRF9UQUdVLiAi IEFTIHR1IE9OIHR4cC5pZCA9IHR1Lml0ZW1faWQNCgkJCQlMRUZUIEpPSU4gIi5QRlguU01E X1RBRy4gIiBBUyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkDQoJCQkJV0hFUkUgdHUudHlw ZT0nZmlsZSciIC4gJHN0YXRTUUwgLiAkZXhjbHVkZUNsYXVzZSAuICRtYXRjaENsYXVzZSAu ICRvcmRlckJ5LCAkZGVidWcpOw0KCQkJaWYgKCRycykgew0KCQkJCWlmICgkZGVidWcgPiAx KSB7DQoJCQkJCWVjaG8gIisrIFJFQ09SRCBTRVQgKysiOw0KCQkJCQlkbXAoJHJzKTsNCgkJ CQl9DQoJCQkJJHVuaXFycyA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cp IHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkdW5pcXJzKSkgew0KCQkJCQkJ JHNhZmUgPSAoJHRoaXNmaWxlKSA/ICR0aGlzZmlsZSA6IE5VTEw7DQoJCQkJCQkkdGhpc2Zp bGUgPSBmaWxlX2Rvd25sb2FkX2Zvcm1hdF9pbmZvKCRyb3cpOw0KCQkJCQkJJG91dFtdID0g KCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkdGhpbmcpID8gcGFyc2UoJHRoaW5n KSA6IGZpbGVfZG93bmxvYWRfbGluayhhcnJheSgnZmlsZW5hbWUnID0+ICRyb3dbJ2ZpbGVu YW1lJ10pLCAkcm93WydmaWxlbmFtZSddKSk7DQoJCQkJCQkkdW5pcXJzW10gPSAkcm93Wydp ZCddOw0KCQkJCQkJJHRoaXNmaWxlID0gJHNhZmU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJ CQlicmVhazsNCgkJY2FzZSAibGluayI6DQoJCQkkcnMgPSBnZXRSb3dzKCINCgkJCQlTRUxF Q1QgdHhwLmlkLCB0eHAuZGF0ZSwgdHhwLmNhdGVnb3J5LCB0eHAudXJsLCB0eHAubGlua25h bWUsIHR4cC5saW5rc29ydCwgdHhwLmRlc2NyaXB0aW9uLCB0dS5pdGVtX2lkLCB0dS50YWdf aWQsIHNtdC5pZCBBUyBzbXRpZCwgc210Lm5hbWUgQVMgc210bmFtZSwgc210LnR5cGUsIHNt dC5wYXJlbnQsIHNtdC5sZnQsIHNtdC5yZ3QsIHNtdC50aXRsZQ0KCQkJCUZST00gIi5zYWZl X3BmeCgndHhwX2xpbmsnKS4iIEFTIHR4cA0KCQkJCUxFRlQgSk9JTiAiLlBGWC5TTURfVEFH VS4gIiBBUyB0dSBPTiB0eHAuaWQgPSB0dS5pdGVtX2lkDQoJCQkJTEVGVCBKT0lOICIuUEZY LlNNRF9UQUcuICIgQVMgc210IE9OIHR1LnRhZ19pZCA9IHNtdC5pZA0KCQkJCVdIRVJFIHR1 LnR5cGU9J2xpbmsnIiAuICRleGNsdWRlQ2xhdXNlIC4gJG1hdGNoQ2xhdXNlIC4gJG9yZGVy QnksICRkZWJ1Zyk7DQoJCQlpZiAoJHJzKSB7DQoJCQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJ CQkJZWNobyAiKysgUkVDT1JEIFNFVCArKyI7DQoJCQkJCWRtcCgkcnMpOw0KCQkJCX0NCgkJ CQkkdW5pcXJzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJ CQlpZiAoIWluX2FycmF5KCRyb3dbJ2lkJ10sICR1bmlxcnMpKSB7DQoJCQkJCQkkc2FmZSA9 ICgkdGhpc2xpbmspID8gJHRoaXNsaW5rIDogTlVMTDsNCgkJCQkJCSR0aGlzbGluayA9IGFy cmF5KA0KCQkJCQkJCSdpZCcgICAgICAgICAgPT4gJHJvd1snaWQnXSwNCgkJCQkJCQknbGlu a25hbWUnICAgID0+ICRyb3dbJ2xpbmtuYW1lJ10sDQoJCQkJCQkJJ3VybCcgICAgICAgICA9 PiAkcm93Wyd1cmwnXSwNCgkJCQkJCQknZGVzY3JpcHRpb24nID0+ICRyb3dbJ2Rlc2NyaXB0 aW9uJ10sDQoJCQkJCQkJJ2RhdGUnICAgICAgICA9PiAkcm93WydkYXRlJ10sDQoJCQkJCQkJ J2NhdGVnb3J5JyAgICA9PiAkcm93WydjYXRlZ29yeSddLA0KCQkJCQkJKTsNCgkJCQkJCSRv dXRbXSA9ICgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNl KCR0aGluZykgOiBocmVmKCRyb3dbJ2xpbmtuYW1lJ10sICRyb3dbJ3VybCddKSk7DQoJCQkJ CQkkdW5pcXJzW10gPSAkcm93WydpZCddOw0KCQkJCQkJJHRoaXNsaW5rID0gJHNhZmU7DQoJ CQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlicmVhazsNCgl9DQoNCglpZiAoJG91dCkgew0KCQly ZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZykuZG9XcmFwKCRvdXQsICR3cmFwdGFn LCAkYnJlYWssICRjbGFzcyk7DQoJfQ0KCXJldHVybiAnJzsNCn0NCg0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCi8vIExpc3QgdGFncyBmcm9tIGN1cnJlbnQgY29udGV4dCwg b3IgZ2l2ZW4gdHlwZQ0KZnVuY3Rpb24gc21kX3RhZ19saXN0KCRhdHRzLCAkdGhpbmc9Jycp IHsNCglnbG9iYWwgJHNtZF90YWdzLCAkc21kX3RoaXN0YWc7DQoNCglpZiAoIXNtZF90YWdz X3RhYmxlX2V4aXN0KCkpIHsNCgkJdHJpZ2dlcl9lcnJvcihzbWRfdGFnc19nVHh0KCdub3Rf YXZhaWxhYmxlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ2ZsYXZvdXInICAgICAgPT4gJ2xpc3QnLCAvLyAxKSBsaXN0OiBvbmx5IHRhZ3Mgd2l0 aCBhc3NpZ25tZW50cywgMikgY2xvdWQgKGFkZHMgd2VpZ2h0aW5nIHRvIHNtZF90aGlzdGFn KQ0KCQknc2hvd2FsbCcgICAgICA9PiAnMCcsIC8vIDA6IGp1c3QgdXNlZCwgMTogaW5jbHVk ZSBlbXB0aWVzDQoJCSd0eXBlJyAgICAgICAgID0+ICcnLA0KCQknaWQnICAgICAgICAgICA9 PiAnJywNCgkJJ25hbWUnICAgICAgICAgPT4gJycsDQoJCSdleGNsdWRlJyAgICAgID0+ICcn LA0KCQkncGFyZW50JyAgICAgICA9PiAnJywgLy8gU3RhcnQgbGlzdCBmcm9tIGhlcmUNCgkJ J3N1YmxldmVsJyAgICAgPT4gJycsIC8vIEdldCB0YWdzIGZyb20gdGhpcyBzdWItbGV2ZWwg b25seSAoMD10b3AgbGV2ZWwsIDEtbGV2ZWwgMSwgLi4uLCBhbGw9ZXZlcnl0aGluZykNCgkJ J29mZnNldCcgICAgICAgPT4gMCwNCgkJJ2xpbWl0JyAgICAgICAgPT4gOTk5OTksDQoJCSdm b3JtJyAgICAgICAgID0+ICcnLA0KCQknaW5kZW50JyAgICAgICA9PiAnJm5ic3A7Jm5ic3A7 JywNCgkJJ3NlY3Rpb25fbGluaycgPT4gJycsDQoJCSdzb3J0JyAgICAgICAgID0+ICcnLA0K CQknc2h1ZmZsZScgICAgICA9PiAwLA0KCQknbGFiZWwnICAgICAgICA9PiAnJywNCgkJJ2xh YmVsdGFnJyAgICAgPT4gJycsDQoJCSd3cmFwdGFnJyAgICAgID0+ICd1bCcsDQoJCSdicmVh aycgICAgICAgID0+ICdsaScsDQoJCSdjbGFzcycgICAgICAgID0+IF9fRlVOQ1RJT05fXywN CgkJJ2FjdGl2ZV9jbGFzcycgPT4gJycsIC8vIFRPRE8NCgkJJ2JyZWFrY2xhc3MnICAgPT4g JycsDQoJCSdkZWJ1ZycgICAgICAgID0+IDAsDQoJKSwkYXR0cykpOw0KDQoJLy8gVmFsaWRh dGUgY2xpZW50IHNpZGUgYXR0cw0KCSR2YWxpZFR5cGVzID0gYXJyYXkoJ2FydGljbGUnLCdp bWFnZScsJ2ZpbGUnLCdsaW5rJyk7DQoJJGlkcyA9ICcnOw0KCSR3aGVyZSA9IGFycmF5KCk7 DQoJJGN0eHQgPSBzbWRfdGFnc19jb250ZXh0KCk7DQoNCgkkYXR0ZW1wdE1hdGNoID0gKGVt cHR5KCRuYW1lKSAmJiBlbXB0eSgkaWQpICYmIGVtcHR5KCRleGNsdWRlKSAmJiAhZW1wdHko JGN0eHRbJ2lkJ10pKSA/IGZhbHNlIDogdHJ1ZTsNCgkkdHlwZSA9IChpbl9hcnJheSgkdHlw ZSwgJHZhbGlkVHlwZXMpKSA/ICR0eXBlIDogKCgkY3R4dFsnY29udGV4dCddKSA/ICRjdHh0 Wydjb250ZXh0J10gOiAkdmFsaWRUeXBlc1swXSk7DQoJJGlkcyA9ICgkaWQpID8gZG9fbGlz dCgkaWQpIDogKCgkY3R4dFsnaWQnXSkgPyAkY3R4dFsnaWQnXSA6ICcnKTsNCg0KCWlmICgk bmFtZSkgew0KCQkkbmFtZSA9ICJuYW1lIElOICgiIC5qb2luKCcsJywgcXVvdGVfbGlzdChk b19saXN0KCRuYW1lKSkpLiAiKSI7DQoJCSR3aGVyZVtdID0gJG5hbWU7DQoJCSRpZHMgPSAn JzsgLy8gbmFtZSB0cnVtcHMgaWQ7IFRPRE86IG1heWJlIG9mZmVyIGEgd2F5IG9mIGNvbWJp bmluZyB0aGVtPw0KCX0NCglpZiAoJGlkcykgew0KCQkkaWRzID0gImlkIElOICgiIC5qb2lu KCcsJywgcXVvdGVfbGlzdCgkaWRzKSkuICIpIjsNCgkJJHdoZXJlW10gPSAkaWRzOw0KCX0N CglpZiAoJGV4Y2x1ZGUpIHsNCgkJJGV4Y2x1ZGUgPSAibmFtZSBOT1QgSU4gKCIgLmpvaW4o JywnLCBxdW90ZV9saXN0KGRvX2xpc3QoJGV4Y2x1ZGUpKSkuICIpIjsNCgkJJHdoZXJlW10g PSAkZXhjbHVkZTsNCgl9DQoNCgkkd2hlcmUgPSBqb2luKCcgQU5EICcsICR3aGVyZSk7DQoJ aWYgKCEkd2hlcmUgJiYgIWVtcHR5KCRzbWRfdGFncykpIHsNCgkJLy8gVXNlIGdsb2JhbCB0 YWdzDQoJCSRycyA9ICgkc2hvd2FsbCkgPyBnZXRUcmVlKCgoJHBhcmVudCkgPyAkcGFyZW50 IDogJ3Jvb3QnKSwgJHR5cGUsICcxPTEnLCBTTURfVEFHKSA6ICRzbWRfdGFnc1skY3R4dF07 DQoJfSBlbHNlIHsNCgkJJHdoZXJlID0gKCR3aGVyZSkgPyAkd2hlcmUgOiAnMT0xJzsNCgkJ aWYgKCR3aGVyZSA9PSAiMT0xIiAmJiAkYXR0ZW1wdE1hdGNoKSB7DQoJICAJCSR3aGVyZSA9 ICduYW1lID0gInNtZF8nIC5tdF9yYW5kKCkuICciJzsNCgkJfQ0KCQlpZiAoJGRlYnVnKSB7 DQoJCQlkbXAoJHdoZXJlKTsNCgkJfQ0KDQoJCSRycyA9IGdldFRyZWUoKCgkcGFyZW50KSA/ ICRwYXJlbnQgOiAncm9vdCcpLCAkdHlwZSwgKCgkc2hvd2FsbCkgPyAnMT0xJyA6ICR3aGVy ZSksIFNNRF9UQUcpOw0KCQkkc3VibGV2ZWwgPSAoJHBhcmVudCAmJiAkc3VibGV2ZWw9PScn KSA/ICgoc21kX3RhZ190cmVlX3NlYXJjaCgkcGFyZW50LCAkcnMsIDEpKSA/ICc+PTEnIDog Jz49MCcpIDogJHN1YmxldmVsOw0KCQlwcmVnX21hdGNoKCcvKFs9PD5dKyk/KFtcZF0rfGFs bCkvJywgJHN1YmxldmVsLCAkbWF0Y2hlcyk7DQoJCWlmKCRtYXRjaGVzKSB7DQoJCQkkb3Bl ciA9ICgkbWF0Y2hlc1sxXSAmJiBpbl9saXN0KCRtYXRjaGVzWzFdLCAnPiwgPCwgPj0sIDw9 JykpID8gJG1hdGNoZXNbMV0gOiAnPT0nOw0KCQkJJHN1YmxldmVsPSRtYXRjaGVzWzJdOw0K CQl9IGVsc2Ugew0KCQkJJG9wZXIgPSAnPT0nOw0KCQl9DQoJfQ0KCWlmICgkZGVidWcpIHsN CgkJZWNobyAiKysgVFJFRSAvIExFVkVMIElORk8rKyI7DQoJCWRtcCgkcnMpOw0KCQlkbXAo JHN1YmxldmVsLCAkb3BlciwgJG1hdGNoZXMpOw0KCX0NCg0KCWlmICgkcnMpIHsNCgkJJG91 dCA9IGFycmF5KCk7DQoJCSR0b3RhbHMgPSBhcnJheSgpOw0KDQoJCSRvdXRzdWIgPSBhcnJh eSgpOw0KCQl3aGlsZSAobGlzdCgka2V5LCAkcm93KSA9IGVhY2goJHJzKSkgew0KCQkJLy8g T25seSBhZGQgdGhlIHJvdyBpZiBvbmUgb2Y6DQoJCQkvLyAxKSBzaG93YWxsIGlzIG9uDQoJ CQkvLyAyKSBzdWJsZXZlbCA9ICdhbGwnDQoJCQkvLyAzKSBubyBwYXJlbnQgc3BlY2lmaWVk DQoJCQkvLyA0KSBzdWJsZXZlbCBpcyBlcXVhbC9ncmVhdGVyL2xlc3MgdGhhbiB0aGUgcm93 J3MgbGV2ZWwNCgkJCWlmICgkc2hvd2FsbCA9PSAxIHx8IHN0cnRvbG93ZXIoJHN1YmxldmVs KSA9PSAiYWxsIiB8fCAhJHBhcmVudCB8fCAoJG9wZXI9PSc9PSc/ICRyb3dbJ2xldmVsJ10g PT0gJHN1YmxldmVsIDogKCgkb3Blcj09Jz49JykgPyAkcm93WydsZXZlbCddID49ICRzdWJs ZXZlbCA6ICgoJG9wZXI9PSc8PScpID8gJHJvd1snbGV2ZWwnXSA8PSAkc3VibGV2ZWwgOiAo KCRvcGVyPT0nPicpID8gJHJvd1snbGV2ZWwnXSA+ICRzdWJsZXZlbCA6ICRyb3dbJ2xldmVs J10gPCAkc3VibGV2ZWwpICkgKSApICkgew0KCQkJCSRvdXRzdWJbXSA9ICRyb3c7DQoJCQl9 DQoJCX0NCgkJJHJzID0gJG91dHN1YjsNCgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNobyAiKysg U1VCTEVWRUwgUkVDT1JEUyArKyI7DQoJCQlkbXAoJHJzKTsNCgkJfQ0KCQlpZiAoJHNodWZm bGUpIHsNCgkJCXNodWZmbGUoJHJzKTsNCgkJfSBlbHNlIGlmICgkc29ydCkgew0KCQkJJHNv cnRQcmVmaXggPSAiU09SVF8iOw0KCQkJJHNvcnRPcmRlciA9IGFycmF5KCk7DQoJCQkkc29y dCA9IGRvX2xpc3QoJHNvcnQpOw0KCQkJJG5zcnQgPSBjb3VudCgkc29ydCk7DQoJCQlmb3Ig KCRpZHggPSAwOyAkaWR4IDwgJG5zcnQ7ICRpZHgrKykgew0KCQkJCSRzb3J0X2RpciA9IGV4 cGxvZGUoJyAnLCAkc29ydFskaWR4XSk7DQoJCQkJaWYgKGNvdW50KCRzb3J0X2RpcikgPD0g MSkgew0KCQkJCQkkc29ydF9kaXJbMV0gPSAiYXNjIjsNCgkJCQl9DQoJCQkJJGRpcmVjdGlv biA9ICgkc29ydF9kaXJbMV0gPT0gImRlc2MiKSA/ICRzb3J0UHJlZml4LidERVNDJyA6ICRz b3J0UHJlZml4LidBU0MnOw0KCQkJCSRzb3J0T3JkZXJbXSA9IGFycmF5KCJjb2wiID0+ICRz b3J0X2RpclswXSwgInNvcnQiID0+ICRkaXJlY3Rpb24pOw0KCQkJfQ0KDQoJCQkvLyBUcmFu c2xhdGUgdGhlIHJvd3MgaW50byBjb2x1bW5zIHRoYXQgY2FuIGJlIHNvcnRlZA0KCQkJZm9y ZWFjaCgkcnMgYXMgJGtleSA9PiAkcm93KSB7DQoJCQkJZm9yZWFjaCAoJHJvdyBhcyAkaWRl bnRpZmllciA9PiAkaXRlbSkgew0KCQkJCQkkdmFybmFtZSA9ICJjb2xfIi4kaWRlbnRpZmll cjsNCgkJCQkJJHskdmFybmFtZX1bJGtleV0gPSAkaXRlbTsNCgkJCQl9DQoJCQl9DQoJDQoJ CQkvLyBNYWtlIHVwIGFuIGFycmF5X211bHRpc29ydCBhcmcgbGlzdCBhbmQgZXhlY3V0ZSBp dC4NCgkJCS8vIFRoZSBuZWNlc3NhcnkgZXZpbCgpIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qga25v dyBob3cgbWFueSBjb2xzIHRoZXJlIHdpbGwgYmUgaW4gdGhlIGFycmF5DQoJCQlmb3IgKCRp ZHggPSAwOyAkaWR4IDwgY291bnQoJHNvcnRPcmRlcik7ICRpZHgrKykgew0KCQkJCSRzb3J0 YXJnc1tdID0gJyRjb2xfJy4kc29ydE9yZGVyWyRpZHhdWydjb2wnXTsNCgkJCQkkc29ydGFy Z3NbXSA9ICRzb3J0T3JkZXJbJGlkeF1bJ3NvcnQnXTsNCgkJCX0NCgkJCSRzb3J0aXQgPSAn YXJyYXlfbXVsdGlzb3J0KCcuaW1wbG9kZSgiLCAiLCRzb3J0YXJncykuJywgJHJzKTsnOw0K CQkJZXZhbCgkc29ydGl0KTsNCgkJfQ0KDQoJCSRycyA9IGFycmF5X3NsaWNlKCRycywgJG9m ZnNldCwgJGxpbWl0KTsNCgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNobyAiKysgUE9TVC1GSUxU RVIgUkVDT1JEUyArKyI7DQoJCQlkbXAoJHJzKTsNCgkJfQ0KDQoJCS8vIFNldCB1cCB0aGUg Y2xvdWQgd2VpZ2h0aW5nIGlmIGRlc2lyZWQNCgkJJGZsYXZvdXIgPSBkb19saXN0KCRmbGF2 b3VyLCAnOicpOw0KCQkkY291bnRTdG9yZSA9IGFycmF5KCk7DQoJCWlmICgkZmxhdm91clsw XSA9PSAnY2xvdWQnKSB7DQoJCQkkbWluUGVyY2VudCA9IChpc3NldCgkZmxhdm91clsxXSkg JiYgIWVtcHR5KCRmbGF2b3VyWzFdKSkgPyAkZmxhdm91clsxXSA6IDEwMDsNCgkJCSRtYXhQ ZXJjZW50ID0gKGlzc2V0KCRmbGF2b3VyWzJdKSAmJiAhZW1wdHkoJGZsYXZvdXJbMl0pKSA/ ICRmbGF2b3VyWzJdIDogMjAwOw0KCQkJJG1heCA9IDE7ICRtaW4gPSA5OTk5OTsgJGNvdW50 ID0gMDsNCgkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7DQoJCQkJJGNvdW50ID0gc2FmZV9j b3VudChTTURfVEFHVSwgInR5cGU9JyIuZG9TbGFzaCgkdHlwZSkuIicgQU5EIHRhZ19pZD0n Ii5kb1NsYXNoKCRyb3dbJ2lkJ10pLiInIik7DQoJCQkJJG1heCA9ICgkY291bnQgPiAkbWF4 ID8gJGNvdW50IDogJG1heCk7DQoJCQkJJG1pbiA9ICgkbWluID4gJGNvdW50ID8gJGNvdW50 IDogJG1pbik7DQoNCgkJCQkvLyBDYWNoZSB0aGUgcmVzdWx0cyBvZiB0aGUgdXNhZ2UgY291 bnRzIHRvIHNhdmUgdXMgZG9pbmcgdGhlbSBhZ2FpbiBpbiB0aGUgbWFpbiBsb29wIGxhdGVy DQoJCQkJJGNvdW50U3RvcmVbJHJvd1snaWQnXV0gPSAkY291bnQ7DQoJCQl9DQoJCQkkbXVs dGlwbGllciA9ICgkbWF4ID4gJG1pbikgPyAoJG1heFBlcmNlbnQgLSAkbWluUGVyY2VudCkg LyAoJG1heCAtICRtaW4pIDogMTsNCgkJfQ0KDQoJCS8vIEl0ZXJhdGUgb3ZlciB0aGUgdGFn cywgcG9wdWxhdGUgdGhlIGxvY2FsIGNvbnRleHQgKGdsb2JhbCEpIHZhcmlhYmxlIGFuZCBw YXJzZSB0aHJvdWdoIHRoZSBmb3JtL2NvbnRhaW5lcg0KCQlmb3JlYWNoICgkcnMgYXMgJHJv dykgew0KCQkJZXh0cmFjdCgkcm93KTsNCgkJCSRyb3dbJ3R5cGUnXSA9ICR0eXBlOw0KCQkJ JHJvd1snY291bnQnXSA9IChpc3NldCgkY291bnRTdG9yZVskaWRdKSkgPyAkY291bnRTdG9y ZVskaWRdIDogc2FmZV9jb3VudChTTURfVEFHVSwgInR5cGU9JyIuZG9TbGFzaCgkdHlwZSku IicgQU5EIHRhZ19pZD0nIi5kb1NsYXNoKCRpZCkuIiciKTsNCgkJCSRyb3dbJ2luZGVudCdd ID0gc3RyX3JlcGVhdCgkaW5kZW50LCAkbGV2ZWwgKiAxKTsNCgkJCSRyb3dbJ3dlaWdodCdd ID0gKCRmbGF2b3VyWzBdID09ICdjbG91ZCcpID8gZmxvb3IoJG1pblBlcmNlbnQgKyAoKCRt YXggLSAoICRtYXggLSAoJHJvd1snY291bnQnXSAtICRtaW4pKSkgKiAkbXVsdGlwbGllcikp IDogMTsNCgkJCXNtZF90YWdfcG9wdWxhdGUoJHJvdyk7DQoJCQkkb3V0W10gPSAoJHRoaW5n KSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDoNCgkJ CQkJc3RyX3JlcGVhdCgkaW5kZW50LCAkbGV2ZWwgKiAxKQ0KCQkJCQkuc21kX3RhZ19uYW1l KGFycmF5KCd0aXRsZScgPT4gMSwgJ3NlY3Rpb24nID0+ICRzZWN0aW9uX2xpbmspKQ0KCQkJ CQkuc21kX3RhZ19jb3VudChhcnJheSgpKSk7DQoJCQkkc21kX3RoaXN0YWcgPSBhcnJheSgp Ow0KCQl9DQoNCgkJaWYgKCRvdXQpIHsNCgkJCXJldHVybiBkb0xhYmVsKCRsYWJlbCwgJGxh YmVsdGFnKS5kb1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtj bGFzcyk7DQoJCX0NCgl9DQoJcmV0dXJuICcnOw0KfQ0KDQovKg0KDQpyZWdpc3Rlcl9jYWxs YmFjaygndHJ1X3RhZ3NfYXRvbV9oYW5kbGVyJywgJ2F0b21fZW50cnknKTsNCmZ1bmN0aW9u IHRydV90YWdzX2F0b21faGFuZGxlcigkZXZlbnQsICRzdGVwKSB7IHJldHVybiB0cnVfdGFn c19mZWVkX2hhbmRsZXIodHJ1ZSk7IH0NCnJlZ2lzdGVyX2NhbGxiYWNrKCd0cnVfdGFnc19y c3NfaGFuZGxlcicsICdyc3NfZW50cnknKTsNCmZ1bmN0aW9uIHRydV90YWdzX3Jzc19oYW5k bGVyKCRldmVudCwgJHN0ZXApIHsgcmV0dXJuIHRydV90YWdzX2ZlZWRfaGFuZGxlcihmYWxz ZSk7IH0NCg0KZnVuY3Rpb24gdHJ1X3RhZ3NfZmVlZF9oYW5kbGVyKCRhdG9tKSB7DQoJZ2xv YmFsICR0aGlzYXJ0aWNsZSwgJHRydV90YWdzX3ByZWZzOw0KCWV4dHJhY3QoJHRoaXNhcnRp Y2xlKTsNCg0KCSR0YWdzID0gdHJ1X3RhZ3NfZ2V0X3RhZ3NfZm9yX2FydGljbGUoJHRoaXNp ZCk7DQoNCglpZiAoJHRydV90YWdzX3ByZWZzW1RBR1NfSU5fRkVFRF9CT0RZXS0+dmFsdWUp IHsNCgkJJGV4dHJhYm9keSA9ICcnOw0KCQkkRk9STV9OQU1FID0gJ3RydV90YWdzX2ZlZWRf dGFncyc7DQoJCWlmIChmZXRjaCgnZm9ybScsICd0eHBfZm9ybScsICduYW1lJywgJEZPUk1f TkFNRSkpIHsNCgkJCSRmb3JtID0gZmV0Y2hfZm9ybSgkRk9STV9OQU1FKTsNCgkJCSRleHRy YWJvZHkgPSB0cmltKHBhcnNlKCRmb3JtKSk7DQoJCX0gZWxzZSB7DQoJCQkkYXR0cyA9IHRy dV90YWdzX2dldF9zdGFuZGFyZF9jbG91ZF9hdHRzKGFycmF5KCksIGZhbHNlLCB0cnVlKTsN CgkJCSRleHRyYWJvZHkgPSAnPHA+dGFnczogJyAuIHRydV90YWdzX3JlbmRlcl9jbG91ZCgk YXR0cywgJHRhZ3MsICR0YWdzKSAuICc8L3A+JzsNCgkJfQ0KCQlnbG9iYWwgJHRoaXNhcnRp Y2xlOw0KCQlpZiAodHJpbSgkdGhpc2FydGljbGVbJ2V4Y2VycHQnXSkpIHsNCgkJCSR0aGlz YXJ0aWNsZVsnZXhjZXJwdCddID0gdHJpbSgkdGhpc2FydGljbGVbJ2V4Y2VycHQnXSkubi4k ZXh0cmFib2R5Lm47DQoJCX0NCgkJJHRoaXNhcnRpY2xlWydib2R5J10gPSB0cmltKCR0aGlz YXJ0aWNsZVsnYm9keSddKS5uLiRleHRyYWJvZHkubjsNCgl9DQoNCglpZiAoJHRydV90YWdz X3ByZWZzW1RBR1NfSU5fRkVFRF9DQVRFR09SSUVTXS0+dmFsdWUpIHsNCgkJJG91dHB1dCA9 IGFycmF5KCk7DQoJCWZvcmVhY2ggKCR0YWdzIGFzICR0YWcpIHsNCgkJCWlmICgkYXRvbSkg ew0KCQkJCSRvdXRwdXRbXSA9ICc8Y2F0ZWdvcnkgdGVybT0iJyAuIGh0bWxzcGVjaWFsY2hh cnMoJHRhZykgLiAnIiAvPic7DQoJCQl9IGVsc2Ugew0KCQkJCSRvdXRwdXRbXSA9ICc8Y2F0 ZWdvcnk+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJHRhZykgLiAnPC9jYXRlZ29yeT4nOw0KCQkJ fQ0KCQl9DQoJCXJldHVybiBuLmpvaW4obiwgJG91dHB1dCkubjsNCgl9DQp9DQoNCiovDQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmljIHJlcGxh Y2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KZnVuY3Rpb24gc21kX3Rh Z3NfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJ J2FjX3N0ZCcgPT4gJ1N0YW5kYXJkJywNCgkJJ2FjX3N0cicgPT4gJ1N0cmljdCcsDQoJCSdh bGxfbGJsJyA9PiAnQWxsJywNCgkJJ2FscmVhZHlfZXhpc3RzJyA9PiAnYWxyZWFkeSBleGlz dHMnLA0KCQknYXNzaWduX3BhcmVudF9sYmwnID0+ICdBc3NpZ24gcGFyZW50JywNCgkJJ2J5 X2NvbHVtbicgPT4gJ0NvbHVtbicsDQoJCSdieV9yb3cnID0+ICdSb3cnLA0KCQknY2F0ZWdv cnlfbGlua2VkX2xibCcgPT4gJ0xpbmtlZCB0byBjYXRlZ29yeSAie2NhdGVnb3J5fSI6JywN CgkJJ2NhdGVnb3J5X3VubGlua2VkX2xibCcgPT4gJ1VubGlua2VkOiAnLA0KCQknY2xlYXIn ID0+ICdjbHInLA0KCQknY2xpbmtfbGJsJyA9PiAnTGlua2VkIGNhdCcsDQoJCSdjb250cm9s JyA9PiAnUGx1Z2luIGNvbnRyb2wnLA0KCQknY291bnRfbGJsJyA9PiAnIE1hdGNoZWQgdGFn czogJywNCgkJJ2NyZWF0ZWQnID0+ICd7dHlwZX0gdGFnICJ7bmFtZX0iIGNyZWF0ZWQnLA0K CQknY2hpbGRyZW5fYW5kJyA9PiAnIGFuZCBpdHMgY2hpbGRyZW4nLA0KCQknY2hpbGRyZW5f ZGVsJyA9PiAnRGVsZXRlIGNoaWxkcmVuJywNCgkJJ2NoaWxkcmVuX3BybycgPT4gJ1Byb21v dGUgY2hpbGRyZW4nLA0KCQknY3JlYXRlZF9yZXBfbGJsJyA9PiAnQ3JlYXRlZCB0YWdzOiAn LA0KCQknZGVsZXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgZGVsZXRlZCcsDQoJCSdk ZWxldGVkX2xibCcgPT4gJ0RlbGV0ZWQgdGFnczogJywNCgkJJ2Vycl9pbl91c2VfbGJsJyA9 PiAnVGFncyBpbiB1c2U6ICcsDQoJCSdlcnJfb3JwaGFuZWRfbGJsJyA9PiAnT3JwaGFuZWQg dGFnczogJywNCgkJJ2Vycl9zZWxmX3BhcmVudCcgPT4gJ3NlbGYgcGFyZW50JywNCgkJJ2V4 aXN0cycgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgYWxyZWFkeSBleGlzdHMnLA0KCQknZmls dGVyJyA9PiAnRmlsdGVyJywNCgkJJ2ltcG9ydF9yZXBvcnQnID0+ICdUYWcgaW1wb3J0IHJl c3VsdHMnLA0KCQknaW1wb3J0X3Jlc3VsdHNfcHQxJyA9PiAnQXJ0aWNsZXM6ICcsDQoJCSdp bXBvcnRfcmVzdWx0c19wdDInID0+ICdUYWdzIGxpbmtlZDogJywNCgkJJ2luX3VzZScgPT4g J3t0eXBlfSB0YWcgIntuYW1lfSIgaXMgaW4gdXNlJywNCgkJJ2xpbmtfdG9fY2F0X2xibCcg PT4gJ0xpbmsgdG8gY2F0ZWdvcnknLA0KCQknbWFuYWdlX2xibCcgPT4gJ01hbmFnZSB0YWdz JywNCgkJJ21pc3NpbmdfbmFtZScgPT4gJ1RhZyBuYW1lIG1pc3NpbmcnLA0KCQknbWlzc2lu Z19yZXBfbGJsJyA9PiAnTWlzc2luZyB0YWdzOiAnLA0KCQknbXVsdGlfZGVsZXRlJyA9PiAn VGFncyBkZWxldGVkOiB7bnVtYmVyfSAoc2VlIHJlcG9ydCBmb3IgZGV0YWlscyknLA0KCQkn bm9fYXJ0aWNsZXMnID0+ICdObyBhcnRpY2xlcyB0byBpbXBvcnQnLA0KCQknbm9fbmFtZScg PT4gJ3t0eXBlfSB0YWcgTk9UIGNyZWF0ZWQ6IG5lZWRzIGEgbmFtZScsDQoJCSdub19wYXJl bnQnID0+ICdObyBwYXJlbnQgdGFncycsDQoJCSdub3RfYXZhaWxhYmxlJyA9PiAnc21kX3Rh Z3MgdGFibGVzIGFyZSBub3QgaW5zdGFsbGVkJywNCgkJJ25vdF9jcmVhdGVkJyA9PiAne3R5 cGV9IHRhZyAie25hbWV9IiBOT1QgY3JlYXRlZCcsDQoJCSdub3RfY3JlYXRlZF9yZXBfbGJs JyA9PiAnVGFncyBOT1QgY3JlYXRlZDogJywNCgkJJ25vdF9kZWxldGVkJyA9PiAne3R5cGV9 IHRhZyAie25hbWV9IiBOT1QgZGVsZXRlZCcsDQoJCSdub3RfZGVsZXRlZF9sYmwnID0+ICdO b3QgZGVsZXRlZDogJywNCgkJJ25vdF9wYXJlbnRfbGlua2VkX2xibCcgPT4gJ05vdCBsaW5r ZWQ6ICcsDQoJCSdub3RfdXBkYXRlZCcgPT4gJ3t0eXBlfSB0YWcgIntuYW1lfSIgTk9UIHVw ZGF0ZWQnLA0KCQkncGFyZW50X2xibCcgPT4gJ1BhcmVudCcsDQoJCSdwYXJlbnRfbGlua2Vk X2xibCcgPT4gJ0Fzc2lnbmVkIHRoZXNlIHRhZyhzKSB0byAie3BhcmVudH0iOiAnLA0KCQkn cHJlZl9pbnN0YWxsX2xibCcgPT4gJ0luc3RhbGwgcHJlZnMnLA0KCQkncHJlZl9yZW1vdmVf bGJsJyA9PiAnUmVtb3ZlIHByZWZzJywNCgkJJ3ByZWZfc2hvd19sYmwnID0+ICdQcmVmZXJl bmNlcycsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQn LA0KCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxs ZWQuJywNCgkJJ3ByZWZzX3BhbmUnID0+ICdQcmVmcycsDQoJCSdwcmVmc19yZW1vdmVkJyA9 PiAnUHJlZmVyZW5jZXMgcmVtb3ZlZCcsDQoJCSdwcmVmc19zb21lJyA9PiAnTm90IGFsbCBw cmVmZXJlbmNlcyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4gJ1Ro aXMgaXMgZWl0aGVyIGEgbmV3IGluc3RhbGxhdGlvbiBvciBhIGRpZmZlcmVudCB2ZXJzaW9u Jy5ici4nb2YgdGhlIHBsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUuJywNCgkJJ3ByZWZz X3NvbWVfb3B0czEnID0+ICdDaG9vc2UgIlJlbW92ZSBwcmVmcyIgdG8gcmVtb3ZlIHRoZW0g YWxsIG9yICJJbnN0YWxsIHByZWZzIiB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZp bmcgYWxsIGV4aXN0aW5nIHByZWZzIHVudG91Y2hlZC4nLA0KCQkncHJlZnNfc29tZV9vcHRz MicgPT4gJ0NsaWNrICJJbnN0YWxsIHRhYmxlcyIgdG8gYWRkIG9yIHVwZGF0ZSB0aGUgdGFi bGVzJy5ici4nbGVhdmluZyBhbGwgZXhpc3RpbmcgZGF0YSB1bnRvdWNoZWQuJywNCgkJJ3By ZWZzX3NvbWVfdGJsJyA9PiAnTm90IGFsbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4nLA0KCQkn cHJlZnNfdGl0bGUnID0+ICdzbWQgVGFncyBQcmVmZXJlbmNlcycsDQoJCSdzZWxfbGlzdCcg PT4gJ1NlbGVjdCBsaXN0JywNCgkJJ3ByZWZzX3AnID0+ICdJbnRlcmZhY2Ugc2V0dGluZ3Mn LA0KCQkncHJlZnNfdCcgPT4gJ1RhZyBtYW5hZ2VtZW50JywNCgkJJ3ByZWZzX3UnID0+ICdV UkwgbWFuYWdlbWVudCcsDQoJCSdyZWNlbnRfcmVwb3J0JyA9PiAnRGlzcGxheSByZWNlbnQg cmVwb3J0JywNCgkJJ3JlcG9ydF9sYmwnID0+ICdSZXBvcnQ6IHNtZF90YWdzJywNCgkJJ3Jz c191Y19vbmx5JyA9PiAnIChyc3NfdWMgb25seSknLA0KCQknc21kX3RhZ3MnID0+ICdzbWQg VGFncycsDQoJCSdzbWRfdGFnX3BfZW5hYmxlJyA9PiAnRW5hYmxlIHRhZ3MgaW4nLA0KCQkn c21kX3RhZ190X2FzdGFydCcgPT4gJ0luaXRpYWwgcGFuZScsDQoJCSdzbWRfdGFnX3BfaW5w dXQnID0+ICdFbnRlciB0YWdzIHVzaW5nJywNCgkJJ3NtZF90YWdfcF9saW5rY2F0JyA9PiAn TGluayB0YWdzIHRvIGNhdGVnb3JpZXMnLA0KCQknc21kX3RhZ19wX3F0YWcnID0+ICdRdWlj ayB0YWcgKDxhIGhyZWY9Imh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC9hdXRv Y29tcGxldGV4Ij5yZXF1aXJlcyBwbHVnaW48L2E+KScsDQoJCSdzbWRfdGFnX3BfcXRwYXRo JyA9PiAnSlMgcGx1Z2luIGRpcicsDQoJCSdzbWRfdGFnX3BfcXRzdHlsJyA9PiAnSlMgc3R5 bGUgZGlyJywNCgkJJ3NtZF90YWdfcF9zaXplJyA9PiAnU2VsZWN0L3RleHRhcmVhIHJvd3Mn LA0KCQknc21kX3RhZ190X2F1dG8nID0+ICdBdXRvIG5hbWUnLA0KCQknc21kX3RhZ190X2Nv bHMnID0+ICdUYWcgbGF5b3V0JywNCgkJJ3NtZF90YWdfdF9jb2xzb3JkJyA9PiAnT3JkZXIg dGFncyBieScsDQoJCSdzbWRfdGFnX3RfY291bnQnID0+ICdTaG93IHRhZyB1c2FnZSBjb3Vu dHMnLA0KCQknc21kX3RhZ190X2RlbHRyZWUnID0+ICdXaGVuIGRlbGV0aW5nIGEgcGFyZW50 JywNCgkJJ3NtZF90YWdfdF9kZWx1c2VkJyA9PiAnQWxsb3cgZGVsZXRpb24gb2YgdXNlZCB0 YWdzJywNCgkJJ3NtZF90YWdfdF9lbnJlcCcgPT4gJ0F1dG9tYXRpY2FsbHkgZGlzcGxheSBy ZXBvcnRzJywNCgkJJ3NtZF90YWdfdF9oaWxpdGUnID0+ICdDbGlja2VkIFJHQiBjb2xvdXIn LA0KCQknc21kX3RhZ190X2hvdmVyJyA9PiAnTW91c2Utb3ZlciBSR0IgY29sb3VyJywNCgkJ J3NtZF90YWdfdF9pbmRlbnQnID0+ICdTdWItdGFnIGxldmVsIGluZGljYXRvcicsDQoJCSdz bWRfdGFnX3RfbWRlbGltJyA9PiAnTXVsdGktdGFnIGRlbGltaXRlciAoMSBjaGFyKScsDQoJ CSdzbWRfdGFnX3VfcG5hbScgPT4gJ1VSTCBuYW1lIHBhcmFtZXRlcicsDQoJCSdzbWRfdGFn X3VfcHR5cCcgPT4gJ1VSTCB0eXBlIHBhcmFtZXRlcicsDQoJCSdzbWRfdGFnX3Vfc2VjJyA9 PiAnVHJpZ2dlcihzKSBmb3IgdGFnIGxpc3RzJywNCgkJJ3N5bmNfYXNzaWduaWNsZV9sYmwn ID0+ICdBc3NpZ24gdGFncyB0byBhcnRpY2xlJywNCgkJJ3N5bmNfZGVsZXRlX29yaWdfbGJs JyA9PiAnRGVsZXRlIG9yaWdpbmFsJywNCgkJJ3N5bmNfbGlua19jYXRfbGJsJyA9PiAnTGlu ayB0YWdzIHRvIGNhdGVnb3J5JywNCgkJJ3N5bmNfZm9yY2VfY2F0X2xibCcgPT4gJ0ZvcmNl IGNhdGVnb3J5IGxpbmsgaWYgdGFnIGFscmVhZHkgZXhpc3RzJywNCgkJJ3N5bmNfZm9yY2Vf cGFyZW50X2xibCcgPT4gJ0ZvcmNlIHBhcmVudCBpZiB0YWcgYWxyZWFkeSBleGlzdHMnLA0K CQknc3luY19sYmwnID0+ICdJbXBvcnQgdGFncycsDQoJCSdzeW5jX2ltcG9ydF9vcHRzJyA9 PiAnSW1wb3J0IG9wdGlvbnMnLA0KCQknc3luY19wYXJlbnRfbGJsJyA9PiAnU3RhcnQgZnJv bSBwYXJlbnQgY2F0ZWdvcnknLA0KCQknc3luY19wYXJlbnRfY2F0X2xibCcgPT4gJ0xpbmsg dG8gY2F0ZWdvcnknLA0KCQknc3luY19wYXJlbnRfdGFnX2xibCcgPT4gJ0Fzc2lnbiB0byBw YXJlbnQgdGFnJywNCgkJJ3N5bmNfcGx1Z2luX29wdHMnID0+ICdQbHVnaW4gb3B0aW9ucycs DQoJCSdzeW5jX3BsdWdzX25vdF9pbnN0YWxsZWQnID0+ICd0cnVfdGFncyBvciByc3NfdW5s aW1pdGVkX2NhdGVnb3JpZXMgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZCB0byBp bXBvcnQnLA0KCQknc3luY19zZWN0aW9uX2xibCcgPT4gJ0FydGljbGVzIGZyb20gc2VjdGlv bicsDQoJCSdzeW5jX3R5cGVfbGJsJyA9PiAnSW1wb3J0IGZyb20nLA0KCQknc3luY190eXBl MScgPT4gJ3RydV90YWdzJywNCgkJJ3N5bmNfdHlwZTInID0+ICdyc3NfdW5saW1pdGVkX2Nh dGVnb3JpZXMnLA0KCQkndGFnX3NlYXJjaCcgPT4gJ1RhZyBzZWFyY2gnLA0KCQkndGV4dGJv eCcgPT4gJ1RleHQgYXJlYScsDQoJCSd0ZXh0Ym94cGx1cycgPT4gJ1RleHQgYXJlYSsnLA0K CQkndGV4dGxpc3QnID0+ICdUZXh0IGxpc3QnLA0KCQkndGJsX2luc3RhbGxfbGJsJyA9PiAn SW5zdGFsbCB0YWJsZXMnLA0KCQkndGJsX2luc3RhbGxlZCcgPT4gJ1RhZyB0YWJsZXMgaW5z dGFsbGVkLiAnLA0KCQkndGJsX25vdF9pbnN0YWxsZWQnID0+ICdUYWcgdGFibGVzIE5PVCBp bnN0YWxsZWQuICcsDQoJCSd0Ymxfbm90X3JlbW92ZWQnID0+ICdUYWcgdGFibGVzIE5PVCBy ZW1vdmVkLiAnLA0KCQkndGJsX3JlYnVpbGRfbGJsJyA9PiAnUmVidWlsZCB0YWdzJywNCgkJ J3RibF9yZWJ1aWx0JyA9PiAnVGFnIHRhYmxlcyByZWJ1aWx0JywNCgkJJ3RibF9yZW1vdmVf bGJsJyA9PiAnUmVtb3ZlIHRhYmxlcycsDQoJCSd0YmxfcmVtb3ZlZCcgPT4gJ1RhZyB0YWJs ZXMgcmVtb3ZlZC4gJywNCgkJJ3RhZ3NfcGFuZScgPT4gJ01hbmFnZSB0YWdzJywNCgkJJ3Rp dGxlJyA9PiAnVGFncycsDQoJCSd0b2dnbGUnID0+ICd0b2cnLA0KCQkndXBkYXRlZCcgPT4g J3t0eXBlfSB0YWcgIntuYW1lfSIgdXBkYXRlZCcsDQoJCSd1bmFibGVfdG9fY3JlYXRlJyA9 PiAnY2Fubm90IGNyZWF0ZScsDQoJCSd3aXRoX2ZpbHRlcmVkJyA9PiAnV2l0aCBmaWx0ZXJl ZDogJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6 NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToi MyI7czo0OiJoZWxwIjtzOjUxNTAzOiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF90 YWdzPC9oMT4KCgk8cD5UYWcgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5kIGxpbmtzIHdp dGggc3R1ZmYsIHRoZW4gdXNlIHRoZSBwdWJsaWMtc2lkZSB0YWdzIHRvIGRpc3BsYXkgdGhl IGxpc3RzLCBmaWx0ZXIgb3IgZmluZCByZWxhdGVkIGNvbnRlbnQuPC9wPgoKCTxoMiBjbGFz cz0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8cD5BZG1pbi1zaWRlOjwvcD4KCgk8dWw+ CgkJPGxpPlVubGltaXRlZCB0YWdzIGZvciBhcnRpY2xlcywgaW1hZ2VzLCBmaWxlcyBhbmQg bGlua3M8L2xpPgoJCTxsaT5GYXN0IHRhZ2dpbmcgc3lzdGVtIGZvciBjb3B5aW5nLCBhdXRv LW5hbWluZywgYW5kIG9wdGlvbmFsIGF1dG8tY29tcGxldGlvbjwvbGk+CgkJPGxpPk5lc3Rp bmcgb2YgdGFnczwvbGk+CgkJPGxpPkxpdmUgc2VhcmNoIC8gZmlsdGVyLCB3aXRoIG11bHRp LXRhZyBvcGVyYXRpb25zPC9saT4KCQk8bGk+T3B0aW9uYWxseSBsaW5rIHRhZ3MgdG8gPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gY2F0ZWdvcmllcyBzbyBjbGllbnRzIGNhbiBv bmx5IGNob29zZSBmcm9tIGEgbGltaXRlZCBzZXQgb2YgdGFnczwvbGk+CgkJPGxpPkFzc2ln biB0YWdzIHZpYSBhIGRyb3Bkb3duIHNlbGVjdCBsaXN0LCBhIHRleHQgYXJlYSBvciBhIGxp c3Qgb2YgY2xpY2thYmxlIHRhZ3M8L2xpPgoJCTxsaT5TZXQgdXAgKG9wdGlvbmFsKSBkZWRp Y2F0ZWQgc2VjdGlvbnMgdG8gYWxsb3cgcHVibGljIHNpZGUgdGFnIGZpbHRlcmluZzwvbGk+ CgkJPGxpPkltcG9ydCAoYXJ0aWNsZSkgdGFncyBmcm9tIG90aGVyIHRhZ2dpbmcgcGx1Z2lu czwvbGk+Cgk8L3VsPgoKCTxwPlB1YmxpYy1zaWRlOjwvcD4KCgk8dWw+CgkJPGxpPkxpc3Qg LyBmaWx0ZXIgdGFncyBieSB0eXBlIGFuZCBuYW1lLiBXZWlnaHRlZCAoY2xvdWQpIG9yIGFs cGhhYmV0aWNhbCBsaXN0cyBwb3NzaWJsZTwvbGk+CgkJPGxpPlNob3cgcmVsYXRlZCBjb250 ZW50OgoJPHVsPgoJCTxsaT5ieSB0YWcgPGVtPmJldHdlZW4gdHlwZXM8L2VtPi4gRm9yIGV4 YW1wbGUgaWYgeW91IGhhdmUgc2V0IHVwIGNvbW1vbiB0YWdzIGZvciBib3RoIGFydGljbGVz IGFuZCBmaWxlcywgd2hlbiB2aWV3aW5nIGFuIGFydGljbGUgeW91IGNhbiBhc2sgdGhlIHBs dWdpbiB3aGF0IGZpbGVzIGFyZSByZWxhdGVkIChvciB2aWNlIHZlcnNhOiB3aGF0IGFydGlj bGVzIGFyZSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IGZpbGUhKTwvbGk+CgkJPGxpPmJldHdl ZW4gb3RoZXIgY29udGVudCwgZS5nLiBhc2sgaXQgdG8gbWF0Y2ggdGhlIHRhZ3MgZnJvbSB0 aGUgY3VycmVudCBmaWxlIHdpdGggdGhlIGFydGljbGUgY2F0ZWdvcnkgb3IgYSBjdXN0b20g ZmllbGQ8L2xpPgoJPC91bD48L2xpPgoJCTxsaT5UYWcgY29uZGl0aW9uYWxzIGFuZCBjb3Vu dHM8L2xpPgoJPC91bD4KCgk8cD5UbyBkbyAocG9zc2libHkpOjwvcD4KCgk8dWw+CgkJPGxp PkZpeCBmb3IgZm9yZWlnbiBjaGFyYWN0ZXIgYXV0b3RhZyBkdW1iZG93bjwvbGk+CgkJPGxp Pk11bHRpLXRhZyBmaWx0ZXJpbmc8L2xpPgoJCTxsaT5HbG9iYWwgdGFnczwvbGk+CgkJPGxp PlRhZyBhbmQgYXJ0aWNsZSBwYWdpbmcgc3VwcG9ydDogbmV4dC9wcmV2L29sZGVyL25ld2Vy PC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPjwv cD4KCgk8aDIgY2xhc3M9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9u PC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyBUZXh0cGF0dGVybiA0LjMu MCsuPC9wPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPklmIHVwZ3JhZGluZyBmcm9tIHYwLjIg b3IgZWFybGllcjogZGVsZXRlIHNtZF90YWdzX2NsaWVudCBhbmQgc21kX3RhZ3NfYWRtaW4g cGx1Z2lucyBmaXJzdCwgdGhlbiBpbnN0YWxsIGFuZCBhY3RpdmF0ZSB0aGlzIHBsdWdpbi4g WW91ciBwcmVmcyBhbmQgdGFncyB3aWxsIGJlIHJldGFpbmVkLjwvcD4KCgk8cD5Eb3dubG9h ZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5v cmcvcGx1Z2lucy8xMDI2L3NtZF90YWdzIj50ZXh0cGF0dGVybi5vcmc8L2E+IG9yIHRoZSA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LiBQ YXN0ZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0 OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8 cD5WaXNpdCB0aGUgRXh0ZW5zaW9ucyAtJmd0OyBzbWQgVGFncyB0YWIuIElmIGl0IGhhcyBu b3QgYWxyZWFkeSBiZWVuIGRvbmUgYXV0b21hdGljYWxseSBmb3IgeW91LCBjbGljayB0aGUg SW5zdGFsbCB0YWJsZXMgYnV0dG9uLiBUaGUgbmVjZXNzYXJ5IHRhYmxlcyBhbmQgcHJlZmVy ZW5jZXMgd2lsbCBiZSBpbnN0YWxsZWQuIEZyb20gdGhpcyBwYWdlIHlvdSBjYW4gSW5zdGFs bCwgRGVsZXRlIGFuZCBTYXZlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMgb3IgcmVtb3ZlIHRo ZSBwbHVnaW4mIzgyMTc7cyB0YWJsZXMgdG8gZW1wdHkgeW91ciB0YWdzIGVudGlyZWx5IGFu ZCBzdGFydCBhZ2Fpbi48L3A+CgoJPHA+VG8gY29tcGxldGVseSByZW1vdmUgc21kX3RhZ3Ms IHZpc2l0IHRoZSBzbWQgVGFncyBQcmVmZXJlbmNlcyBwYWdlLCBoaXQgJiM4MjE2O1JlbW92 ZSB0YWJsZXMmIzgyMTc7IHRvIHJlbW92ZSB0aGUgcHJlZmVyZW5jZXMgYW5kIHRhZyB0YWJs ZXMgZnJvbSB0aGUgZGF0YWJhc2UsIHRoZW4gc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGFz IG5vcm1hbCBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxwPlZp c2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/aWQ9Mjg2MjEiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBhbmQgdG8g cmVwb3J0IHRoZSBzdWNjZXNzIChvciBvdGhlcndpc2UpIG9mIHRoaXMgcGx1Z2luLjwvcD4K Cgk8aDIgaWQ9ImFzdXNhZ2UiPlVzYWdlIChBZG1pbiBzaWRlKTwvaDI+CgoJPGgzPlRoZSBi dXR0b25zPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5SZW1vdmUgcHJl ZnM8L3NwYW4+IDogZGVsZXRlIHRoZSBwcmVmZXJlbmNlcyBvbmx5OyB1c2VmdWwgaWYgeW91 ciBwcmVmcyBoYXZlIGJlY29tZSBjb3JydXB0ZWQgb3IgeW91IHNpbXBseSB3YW50IHRvIHJl dHVybiB0byAmIzgyMjA7ZGVmYXVsdCYjODIyMTsgb3BlcmF0aW9uPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlJlbW92ZSB0YWJsZXM8L3NwYW4+IDogZGVsZXRlIHRoZSB0YWdz IHRhYmxlcy4gVGhpcyB3aWxsIHBlcm1hbmVudGx5IGVyYXNlIGFsbCB0YWdzIGFnYWluc3Qg YWxsIGFydGljbGVzLCBpbWFnZXMsIGZpbGVzIGFuZCBsaW5rcy4gQmUgdmVyeSBzdXJlIHlv dSBtZWFuIGl0IGJlZm9yZSBjbGlja2luZyB0aGlzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPk1hbmFnZSB0YWdzPC9zcGFuPiA6IFN3aXRjaCB0byB0aGUgPGEgaHJlZj0iI21h bmFnZSI+dGFnIG1hbmFnZW1lbnQgcGFnZTwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+UHJlZmVyZW5jZXM8L3NwYW4+IDogU3dpdGNoIHRvIHRoZSA8YSBocmVmPSIjcHJl ZnMiPnByZWZlcmVuY2VzIHBhZ2U8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PkltcG9ydCB0YWdzPC9zcGFuPiA6IDxhIGhyZWY9IiNpbXBvcnQiPkltcG9ydCB0YWdzPC9h PiBmcm9tIHRydV90YWdzIG9yIHJzc191bmxpbWl0ZWRfY2F0ZWdvcmllczwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5SZWJ1aWxkIHRhZ3M8L3NwYW4+IDogKGhvbGQgZG93biA8 ZW0+U2hpZnQ8L2VtPiB3aGVuIHJlZnJlc2hpbmcgdGhlIFByZWZzIHBhbmVsIHVudGlsIGl0 IGhhcyBmdWxseSBsb2FkZWQgdG8gZW5hYmxlIHRoaXM6IHlvdSBoYXZlIHRvIGJlIHF1aWNr ISkgSWYgeW91ciB0YWcgdGFibGUgaXMgY29ycnVwdCB5b3UgPHN0cm9uZz5tYXk8L3N0cm9u Zz4gYmUgYWJsZSB0byBmaXggaXQgd2l0aCB0aGlzIG9wdGlvbi4gSG93ZXZlciwgaWYgaXQg aXMgYmFkbHkgZGFtYWdlZCB5b3UgbWF5IGp1c3QgZ2V0IGEgd2hpdGUgc2NyZWVuIG9mIGRl YXRoLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB5b3VyIG9wdGlvbnMgYXJlIHRoZW4gdG8gZWl0 aGVyIGZpeCBpdCBieSBoYW5kIG9yIGRlbGV0ZSB0aGUgYmFkIGVudHJpZXMsIHJlYnVpbGQg dGhlIHRhYmxlIHdpdGggdGhlIHJlbWFpbmluZyBpdGVtcyBhbmQgdGhlbiByZXBvcHVsYXRl IHRoZSB0YWdzPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJwcmVmcyI+VGhlIHByZWZlcmVuY2Vz PC9oMz4KCgk8aDQ+SW50ZXJmYWNlIHNldHRpbmdzPC9oND4KCgk8dWw+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5FbmFibGUgdGFncyBpbjwvc3Bhbj4gOiBhIHRhZyBlbnRyeSBtZWNo YW5pc20gaXMgYWRkZWQgdG8gdGhlIGFkbWluIHNpZGUgb2YgZWFjaCBvZiB0aGUgY2hlY2tl ZCBwYWdlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FbnRlciB0YWdzIHVzaW5n PC9zcGFuPiA6IHRoZSBtZWNoYW5pc20geW91IHdpc2ggdG8gdXNlIHRvIGFzc2lnbiB0YWdz LiA8Y29kZT5UZXh0IGFyZWErPC9jb2RlPiBhbGxvd3MgbmV3IHRhZ3MgdG8gYmUgYWRkZWQg b24gdGhlIGZseSB2aWEgY29udHJpYnV0b3JzIChhIGJpdCBsaWtlIHRydV90YWdzKTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MaW5rIHRhZ3MgdG8gY2F0ZWdvcmllczwvc3Bh bj4gOiBhbGxvdyB0YWdzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBjYXRlZ29yaWVzLiBJZiB0aGlzIGlzIG9uIGFuZCA8Y29kZT5UZXh0 IGFyZWErPC9jb2RlPiBpcyBiZWluZyB1c2VkLCBhbnkgbmV3IHRhZ3MgYWRkZWQgdmlhIHRo ZSBhcnRpY2xlLCBpbWFnZSwgZmlsZSBvciBsaW5rIHNjcmVlbnMgd2lsbCBiZSBhc3NvY2lh dGVkIHdpdGggdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYXRlZ29yeSAob3IgY2F0ZWdvcnkx IGluIHRoZSBjYXNlIG9mIGFydGljbGVzKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5RdWljayB0YWc8L3NwYW4+IDogaWYgdXNpbmcgYSB0ZXh0YXJlYSBhbmQgeW91IGluc3Rh bGwgdGhlIGpRdWVyeSBhdXRvY29tcGxldGUgcGx1Z2luLCB0aGlzIGRldGVybWluZXMgd2hp Y2ggbWV0aG9kIG9mIGF1dG8tY29tcGxldGUgdG8gdXNlOiA8Y29kZT5zdHJpY3Q8L2NvZGU+ IHByZXZlbnRzIHRhZ3MgYmVpbmcgc3VibWl0dGVkIHRoYXQgYXJlIGRpc2FsbG93ZWQgYnkg dGhlIGN1cnJlbnQgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gY2F0ZWdvcnk7IDxj b2RlPnN0YW5kYXJkPC9jb2RlPiBhbGxvd3MgbmV3IHRhZ3MgdG8gYmUgZW50ZXJlZC4gTm90 ZSB0aGF0IHlvdSA8c3Ryb25nPm1heSBub3QgZW50ZXIgbmV3IHRhZ3MgYXQgYWxsPC9zdHJv bmc+IGlmIFF1aWNrIHRhZ3MgaXMgaW4gPGNvZGU+c3RyaWN0PC9jb2RlPiBtb2RlOiBpdCBv dmVycmlkZXMgPGNvZGU+VGV4dCBhcmVhKzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+anMgcGx1Z2luIGRpcjwvc3Bhbj4gOiB0aGUgZGlyZWN0b3J5IGluIHdoaWNo IHlvdXIgYXV0by1jb21wbGV0ZSBwbHVnaW4gcmVzaWRlcyAodGhlIGZpbGVuYW1lIGl0IGV4 cGVjdHMgaXMgPGNvZGU+anF1ZXJ5LmF1dG9jb21wbGV0ZS5wYWNrLmpzPC9jb2RlPikuIElm IHlvdSBiZWdpbiB0aGUgZGlyZWN0b3J5IG5hbWUgd2l0aCBhIDxjb2RlPi88L2NvZGU+IHRo ZSBwYXRoIHdpbGwgYmUgcmVsYXRpdmUgdG8geW91ciBzaXRlIHJvb3QuIFdpdGhvdXQgYSBw cmVjZWRpbmcgJiM4MjE2Oy8mIzgyMTc7IGl0IGlzIHJlbGF0aXZlIHRvIHRoZSAmIzgyMTY7 dGV4dHBhdHRlcm4mIzgyMTc7IGRpcmVjdG9yeS4gVGhlIHRyYWlsaW5nIHNsYXNoIGlzIG9w dGlvbmFsIGFuZCB3aWxsIGJlIGFkZGVkIGludGVybmFsbHkgaWYgeW91IG9taXQgaXQuIFRo aXMgZ2l2ZXMgeW91IHRoZSBmcmVlZG9tIHRvIHB1dCB0aGUgZmlsZXMgd2hlcmV2ZXIgaXQg c3VpdHMgeW91IGFuZCByZWZlcmVuY2UgdGhlbSBsaWtlIHRoaXM6Cgk8dWw+CgkJPGxpPnVz ZSA8Y29kZT5teV9qczwvY29kZT4gZm9yICYjODIxNjt0ZXh0cGF0dGVybi9teV9qcy9qcXVl cnkuYXV0b2NvbXBsZXRlLnBhY2suanMmIzgyMTc7PC9saT4KCQk8bGk+dXNlIGVpdGhlciA8 Y29kZT4uLi9teV9zY3JpcHRzPC9jb2RlPiAgb3IgPGNvZGU+L215X3NjcmlwdHM8L2NvZGU+ IGZvciAmIzgyMTY7c2l0ZV9yb290L215X3NjcmlwdHMvanF1ZXJ5LmF1dG9jb21wbGV0ZS5w YWNrLmpzJiM4MjE3OzwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5qcyBzdHlsZSBkaXI8L3NwYW4+IDogdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3VyIGF1 dG8tY29tcGxldGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gZmlsZXMgcmVzaWRl ICh0aGUgZmlsZSBuYW1lIGl0IGV4cGVjdHMgaXMgPGNvZGU+anF1ZXJ5LmF1dG9jb21wbGV0 ZS5jc3M8L2NvZGU+KS4gVGhlIHNhbWUgY29tbWVudHMgaG9sZCB0cnVlIGFib3V0IHRoZSBw YXRoIGFzIGFib3ZlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlNlbGVjdC90ZXh0 YXJlYSByb3dzPC9zcGFuPiA6IG51bWJlciBvZiByb3dzIGluIHRoZSBzZWxlY3QgbGlzdCBv ciB0ZXh0YXJlYS4gSWYgc2V0IHRvIDxjb2RlPjE8L2NvZGU+IGEgc2VsZWN0IGxpc3Qgd2ls bCBiZWNvbWUgbm9uLW11bHRpcGxlIGFuZCB5b3UgY2FuIHRoZW4gb25seSBjaG9vc2UgMSB0 YWcuIFNldCB0byA8Y29kZT4wPC9jb2RlPiB0byBzaG93IGEgbXVsdGlwbGUgc2VsZWN0IGxp c3QgY29udGFpbmluZyBhbGwgdGFncy4gT3RoZXIgdmFsdWVzIHNob3cgYSBtdWx0aXBsZSBz ZWxlY3QgbGlzdCB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2Ygcm93cyBidXQgYmUgYXdhcmUg dGhpcyBtYXkgdHVybiBvdXQgdG8gYmUgYSBndWlkZSBhcyBjZXJ0YWluIGJyb3dzZXIgZmFj dG9ycyBtYXkgb3ZlcnJpZGUgdGhlIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW4gRmlyZWZveCBp ZiB5b3UgY2hvb3NlIGEgc2VsZWN0IGxpc3QgdmFsdWUgb2YgPGNvZGU+MjwvY29kZT4geW91 IGNhbm5vdCBzZWUgdGhlIHdob2xlIGxpc3QgYmVjYXVzZSB0aGUgaW5wdXQgaXMgbm90IGJp ZyBlbm91Z2ggdG8gc2hvdyB0aGUgc2Nyb2xsYmFyICh5b3UgZ2V0IGEgc2Nyb2xsYmFyIGZy b20gYSB2YWx1ZSBvZiA8Y29kZT4zPC9jb2RlPiBvciBtb3JlKS4gQWxzbywgaWYgeW91IGFy ZSB1c2luZyBhdXRvY29tcGxldGUgZm9yIHRoZSB0ZXh0IGFyZWEgeW91IG1heSBub3QgZ2V0 IHRoZSBudW1iZXIgb2Ygcm93cyB5b3UgZXhwZWN0IGR1ZSB0byB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gdGhhdCBjb21lcyB3aXRoIHRoZSBhdXRvY29tcGxldGUgcGx1 Z2luPC9saT4KCTwvdWw+CgoJPGg0PlRhZyBtYW5hZ2VtZW50PC9oND4KCgk8dWw+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5Jbml0aWFsIHBhbmU8L3NwYW4+IDogd2hlbiB5b3UgY2xp Y2sgPGVtPkV4dGVuc2lvbnMgLSZndDsgc21kIFRhZ3M8L2VtPiwgc2hvdyBlaXRoZXIgdGhl IHByZWZlcmVuY2VzIHBhZ2Ugb3IgdGhlIHRhZyBtYW5hZ2VtZW50IHBhZ2U8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+QXV0byBuYW1lPC9zcGFuPiA6IGhlbHBzIHNwZWVkIHRh ZyBjcmVhdGlvbiBieSBhdXRvbWF0aWNhbGx5IG5hbWluZyB0aGVtIGJhc2VkIG9uIHRoZSB0 aXRsZSB5b3UgdXNlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRhZyBsYXlvdXQ8 L3NwYW4+IDogY2FuIGJlIGVpdGhlcjoKCTx1bD4KCQk8bGk+dGhlIG51bWJlciBvZiBjb2x1 bW5zIG9mIHRhZ3MgdG8gZGlzcGxheSBpbiB0aGUgbWFuYWdlbWVudCBwYWdlLiBUaGlzIGNy ZWF0ZXMgYSB0YWJsZTwvbGk+CgkJPGxpPnRoZSB3b3JkIDxjb2RlPmxpc3Q8L2NvZGU+IHRv IHNob3cgdGhlbSBhcyBhbiB1bm9yZGVyZWQgbGlzdC4gSWYgeW91IHNwZWNpZnkgPGNvZGU+ bGlzdDpOPC9jb2RlPiB0aGVuIHRoZSBsaXN0IHdpbGwgYmUgc3BsaXQgZXZlcnkgJiM4MjE2 O04mIzgyMTc7IHRhZ3MgYW5kIHN0YXJ0IGEgbmV3IHJvdy9jb2x1bW4gKGRlcGVuZGluZyBv biB5b3VyIHNldHRpbmcgb2YgPGVtPk9yZGVyIHRhZ3MgYnk8L2VtPik8L2xpPgoJCTxsaT50 aGUgd29yZCA8Y29kZT5ncm91cDwvY29kZT4gdG8gc3RhcnQgYSBuZXcgcm93IG9yIGNvbHVt biBlYWNoIHRpbWUgYSBuZXcgdG9wLWxldmVsIHRhZyBpcyBlbmNvdW50ZXJlZC4gVXNlZnVs IGZvciBoZWF2aWx5IG5lc3RlZCBvciBoaWVyYXJjaGljYWwgdGFnczwvbGk+Cgk8L3VsPjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PcmRlciB0YWdzIGJ5PC9zcGFuPiA6ICYj ODIxNjtjb2x1bW4mIzgyMTc7IHRvIGhhdmUgdGhlIHRhZ3Mgd29yayBkb3duIHRoZSBwYWdl IGZpcnN0OyAmIzgyMTY7cm93JiM4MjE3OyB0byB3b3JrIGFjcm9zcyB0aGUgcGFnZTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5TaG93IHRhZyB1c2FnZSBjb3VudHM8L3NwYW4+ IDogd2hldGhlciB0byBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGZvciB3aGljaCBh IHRhZyBpcyB1c2VkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPldoZW4gZGVsZXRp bmcgYSBwYXJlbnQ8L3NwYW4+IDogY2hvb3NlIHdoZXRoZXIgYW55IGNoaWxkIHRhZ3Mgd2ls bCBiZSBwcm9tb3RlZCB0byB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgdGFnIHlvdSBqdXN0IGRl bGV0ZWQsIG9yIHRoZSBlbnRpcmUgdHJlZSBiZWxvdyB0aGUgZGVsZXRlZCB0YWcgd2lsbCBi ZSByZW1vdmVkIGFzIHdlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWxsb3cg ZGVsZXRpb24gb2YgdXNlZCB0YWdzPC9zcGFuPiA6IHdoZW4gc2V0IHRvICYjODIxNjtubyYj ODIxNzssIGlmIGEgdGFnIGhhcyBiZWVuIHVzZWQgYnkgYW4gYXJ0aWNsZS9pbWFnZS9maWxl L2xpbmsgaXQgY2Fubm90IGJlIGRlbGV0ZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+QXV0b21hdGljYWxseSBkaXNwbGF5IHJlcG9ydHM8L3NwYW4+IDogYWZ0ZXIgb3BlcmF0 aW9ucyB0aGF0IGFmZmVjdCBtdWx0aXBsZSB0YWdzLCBhIHJlcG9ydCBsaXN0aW5nIHRoZSBh bHRlcmF0aW9ucyBpcyBhdmFpbGFibGUuIElmIHNldCB0byAmIzgyMTY7eWVzJiM4MjE3OyB0 aGlzIHJlcG9ydCBpcyBwb3BwZWQgdXAgZm9yIHlvdSB0byByZWFkIGltbWVkaWF0ZWx5IGFm dGVyIHRoZSBvcGVyYXRpb24uIElmIHNldCB0byAmIzgyMTY7bm8mIzgyMTc7IHlvdSBjYW4g dmlldyB0aGUgcmVwb3J0IGJ5IGNsaWNraW5nIHRoZSA8ZW0+RGlzcGxheSByZWNlbnQgcmVw b3J0PC9lbT4gbGluayBpbiB0aGUgVGFnIFNlYXJjaCBib3g8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+Q2xpY2tlZCA8c3BhbiBjbGFzcz0iY2FwcyI+UkdCPC9zcGFuPiBjb2xv dXI8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGJhY2tncm91 bmQgY29sb3VyIGZvciB0aGUgY3VycmVudGx5IGVkaXRlZCB0YWc8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+TW91c2Utb3ZlciA8c3BhbiBjbGFzcz0iY2FwcyI+UkdCPC9zcGFu PiBjb2xvdXI8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGJh Y2tncm91bmQgY29sb3VyIGFzIHlvdSBtb3ZlIG92ZXIgZWFjaCBpdGVtIGluIHRoZSBsaXN0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlN1Yi10YWcgbGV2ZWwgaW5kaWNhdG9y PC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZW50aXR5IG9y IHRleHQgeW91IHdpc2ggdG8gcHJlY2VkZSBlYWNoIHN1Yi10YWcgd2l0aC4gTGV2ZWwgMSB0 YWdzIGhhdmUgb25lIG9mIHRoZXNlIHN5bWJvbHMgYWRkZWQsIGxldmVsIDIgdGFncyBoYXZl IHR3byBhZGRlZCwgYW5kIHNvIG9uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk11 bHRpLXRhZyBkZWxpbWl0ZXI8L3NwYW4+IDogYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG1vcmUg dGhhbiBvbmUgdGFnIGF0IGEgdGltZSBkdXJpbmcgY3JlYXRpb24uIElmIHlvdSBlbnRlciBt b3JlIHRoYW4gb25lIGNoYXJhY3RlciBoZXJlLCBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIHVz ZWQuIFRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLCBlbXB0eSB0aGUgYm94IGNvbnRlbnRzPC9s aT4KCTwvdWw+CgoJPGg0PjxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IG1hbmFnZW1l bnQ8L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPjxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+IG5hbWUgcGFyYW1ldGVyPC9zcGFuPiA6IFdoZW4gZmlsdGVyaW5n IGJ5IHRhZyBuYW1lLCB0aGlzIGlzIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBhIHRhZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj48c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0eXBlIHBhcmFtZXRlcjwv c3Bhbj4gOiBXaGVuIGZpbHRlcmluZyBieSB0YWcgdHlwZSwgdGhpcyBpcyB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgYSB0YWcg dHlwZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UcmlnZ2VyKHMpIGZvciB0YWcg bGlzdHM8L3NwYW4+IDogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0cmlnZ2VyIHdvcmRz LCBvciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBTZWN0aW9ucyB3aGljaCBhcmUg dmFsaWQgdGFnIGxhbmRpbmcgcGFnZXM8c3VwIGlkPSJmbnJldjYyMTAzNjExODRkNGRiMmZm MGY5NGYiIGNsYXNzPSJmb290bm90ZSI+PGEgaHJlZj0iI2ZuNjIxMDM2MTE4NGQ0ZGIyZmYw Zjk0ZiI+MTwvYT48L3N1cD4uIEFueSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBsaW5rcyBm cm9tIHRoZSBwdWJsaWMtc2lkZSB0YWdzIHdpbGwgYmUgc2VudCB0byB0aGUgPGVtPmZpcnN0 PC9lbT4gc2VjdGlvbiBpbiB0aGUgbGlzdCBmb3IgZGlzcGxheS4gQ2FuIGJlIG92ZXJyaWRk ZW4gb24gYSB0YWctYnktdGFnIGJhc2lzIHdpdGggdGhlIDxjb2RlPnNlY3Rpb25fbGluazwv Y29kZT4gYXR0cmlidXRlPC9saT4KCTwvdWw+CgoJPHAgaWQ9ImZuNjIxMDM2MTE4NGQ0ZGIy ZmYwZjk0ZiIgY2xhc3M9ImZvb3Rub3RlIj48c3VwPjE8L3N1cD4gSWYgdXNpbmcgdGhpcyBm ZWF0dXJlIGZvciBTZWN0aW9ucywgdGhleSBtdXN0IGV4aXN0IGluIHlvdXIgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gU2VjdGlvbnMgdGFiLCB1bmxlc3MgeW91IGFyZSB1c2lu ZyBzb21lIGdicF9wZXJtYW5lbnRfbGlua3MgbWFnaWMuIE5vdGUgdGhhdCA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPnMgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1h dHM6PC9wPgoKCTx1bD4KCQk8bGk+RnVsbCBjbGVhbiA6IDxjb2RlPnNpdGUuY29tL3RyaWdn ZXIvdGFnLXR5cGUvdGFnLW5hbWU8L2NvZGU+PC9saT4KCQk8bGk+U2hvcnQtY2lyY3VpdGVk IGNsZWFuIDogPGNvZGU+c2l0ZS5jb20vdHJpZ2dlci90YWctbmFtZTwvY29kZT4gKHRyaWVz IHRvIGd1ZXNzIHRoZSB0eXBlIGJhc2VkIG9uIGNvbnRleHQsIGRlZmF1bHRzIHRvIDxjb2Rl PmFydGljbGU8L2NvZGU+KTwvbGk+CgkJPGxpPk1lc3N5IGRlZmF1bHQgOiA8Y29kZT5zaXRl LmNvbS90cmlnZ2VyP3NtZF90YWd0eXBlPXRhZy10eXBlJmFtcDtzbWRfdGFnPXRhZy1uYW1l PC9jb2RlPiAoc21kX3RhZ3R5cGUgY2FuIGJlIG9taXR0ZWQgYXMgYWJvdmUpPC9saT4KCQk8 bGk+TWVzc3kgcGVyLXNlY3Rpb246IDxjb2RlPnNpdGUuY29tL3NlY3Rpb24/c21kX3RhZ3R5 cGU9dGFnLXR5cGUmYW1wO3NtZF90YWc9dGFnLW5hbWU8L2NvZGU+PC9saT4KCQk8bGk+Q2xl YW4gcGVyLXNlY3Rpb246IDxjb2RlPnNpdGUuY29tL3NlY3Rpb24vdHJpZ2dlci90YWctdHlw ZS90YWctbmFtZTwvY29kZT48L2xpPgoJCTxsaT5TaG9ydC1jaXJjdWl0ZWQgcGVyLXNlY3Rp b24gY2xlYW4gOiA8Y29kZT5zaXRlLmNvbS9zZWN0aW9uL3RyaWdnZXIvdGFnLW5hbWU8L2Nv ZGU+PC9saT4KCQk8bGk+U2hvcnQtY2lyY3VpdGVkIHBlci1zZWN0aW9uIG1lc3N5IDogPGNv ZGU+c2l0ZS5jb20vc2VjdGlvbj9zbWRfdGFnPXRhZy1uYW1lPC9jb2RlPjwvbGk+Cgk8L3Vs PgoKCTxwPih0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGFyYW1zIDxjb2Rl PnNtZF90YWc8L2NvZGU+IGFuZCA8Y29kZT5zbWRfdGFndHlwZTwvY29kZT4gY2FuIGJlIGFs dGVyZWQgZnJvbSB0aGUgcHJlZnMpLjwvcD4KCgk8cD5XYXRjaCBvdXQgaWYgeW91IGFyZSB1 c2luZyBjbGVhbiB1cmxzIGJlY2F1c2UgdGhleSBtYXkgY2xhc2ggd2l0aCB5b3VyIGluZGl2 aWR1YWwgYXJ0aWNsZSB2aWV3cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBjaG9zZSB0byBkZXRl Y3QgdGFnIGxpc3RzIG9uIHlvdXIgPGNvZGU+d2lkZ2V0czwvY29kZT4gc2VjdGlvbiBhbmQg eW91JiM4MjE3O3JlIHVzaW5nIHRoZSBzZWN0aW9uL3RpdGxlIHBlcm1saW5rIHNjaGVtZSwg dGhlIHBsdWdpbiB3b24mIzgyMTc7dCBrbm93IHRoZSBkaWZmZXJlbmNlIGJldHdlZW46PC9w PgoKCTx1bD4KCQk8bGk+L3dpZGdldHMvaG93LXRvLW9yZGVyIChhbiBpbmRpdmlkdWFsIGFy dGljbGUgdW5kZXIgdGhlIC9zZWN0aW9uL3RpdGxlIHBlcm1saW5rIHNjaGVtZSk8L2xpPgoJ CTxsaT4vd2lkZ2V0cy93aWRnZXQtYyAoYSB0YWcgZm9yIHdpZGdldC1jKTwvbGk+Cgk8L3Vs PgoKCTxwPlNvIHlvdSBzaG91bGQgbWFrZSBzdXJlIGluIHRoaXMgY2FzZSB0aGF0IHlvdSBl aXRoZXIgYSkgdXNlIGEgZGVkaWNhdGVkIChub24tYXJ0aWNsZS1iZWFyaW5nKSBzZWN0aW9u IGZvciB5b3VyIHRhZyBsaXN0cywgYikgYWx3YXlzIHVzZSB0aGUgZnVsbCB0YWcgc3ludGF4 IGluY2x1ZGluZyB0eXBlOiA8Y29kZT53aWRnZXRzL2FydGljbGUvd2lkZ2V0LWM8L2NvZGU+ LCBjKSB1c2UgbWVzc3kgdGFnIHN5bnRheCwgZCkgY2hhbmdlIHBlcm1saW5rIHNjaGVtZS4g VGhlIHBsdWdpbiB0cmllcyB0byBhdm9pZCBjbG9iYmVyaW5nIDxjb2RlPi9zZWN0aW9uL2lk L3RpdGxlPC9jb2RlPiBmb3JtYXQgYnkgZGV0ZWN0aW5nIHRoZSBwcmVzZW5jZSBvZiB0aGUg bnVtZXJpYyBpZCwgc28gdGhhdCBtYXkgYmUgdGhlIHNhZmVzdCBvcHRpb24gaWYgeW91IGFy ZSBtaXhpbmcgdGFnIGxhbmRpbmcgcGFnZXMgd2l0aCBhcnRpY2xlIHNlY3Rpb25zLjwvcD4K Cgk8aDMgaWQ9Im1hbmFnZSI+VGhlIG1hbmFnZW1lbnQgcGFuZTwvaDM+CgoJPHA+RGlzcGxh eXMgYSBsaXN0IG9mIGFsbCBkZWZpbmVkIHRhZ3MuIEluIGNvbnRyYXN0IHRvIHRoZSBidWls dC1pbiBjYXRlZ29yaWVzLCBvbmx5IG9uZSB0eXBlIGlzIHNob3duIGF0IGEgdGltZTsgc3dp dGNoIGJldHdlZW4gdGhlbSB3aXRoIHRoZSByYWRpbyBidXR0b25zIGluIHRoZSAmIzgyMTY7 RmlsdGVyJiM4MjE3OyByb3cuPC9wPgoKCTxwPlRoZSBpbnB1dCByb3cgYXQgdGhlIHRvcCBo YXMgdGhyZWUgb3IgZm91ciBmaWVsZHMgaW4gaXQsIGRlcGVuZGluZyBpZiB5b3UgaGF2ZSBj aG9zZW4gdG8gbGluayB0YWdzIHRvIGNhdGVnb3JpZXM6PC9wPgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlRpdGxlPC9zcGFuPiA6IFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhl IHRhZyBvbiB0aGUgcHVibGljIHNpZGU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ UGFyZW50PC9zcGFuPiA6IFdoZXRoZXIgdGhlIHRhZyBpcyBpbiBhIHN1Yi1jYXRlZ29yeS4g VGhlIGVtcHR5IGl0ZW0gaXMgY29uc2lkZXJlZCAmIzgyMTY7cm9vdCYjODIxNzsgKHRvcCBs ZXZlbCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TGlua2VkIGNhdDwvc3Bhbj4g OiAob3B0aW9uYWwpIFdoZXRoZXIgdGhlIHRhZyBpcyBhc3NvY2lhdGVkIHdpdGggYSA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBjYXRlZ29yeS4gQW55IHN1Yi10YWdzIGFyZSBh dXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHRoZSBjaG9zZW4gY2F0ZWdvcnkgYXMgd2VsbDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5OYW1lPC9zcGFuPiA6IFRoZSAmIzgyMTY7 aW50ZXJuYWwmIzgyMTc7IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZyBuYW1l LiBQcm9iYWJseSBzaG91bGRuJiM4MjE3O3QgY29udGFpbiBzcGFjZXMgb3Igd2VpcmQgY2hh cmFjdGVycywgYWx0aG91Z2ggeW91IGNhbiBwdXQgdGhlbSBpbiBpZiB5b3Uga25vdyB3aGF0 IHlvdSYjODIxNztyZSBkb2luZzwvbGk+Cgk8L3VsPgoKCTxwPldpdGggdGhlIGF1dG8tbmFt ZSBmZWF0dXJlIGVuYWJsZWQsIHdoYXRldmVyIHlvdSB0eXBlIGluIHRoZSBUaXRsZSBmaWVs ZCB3aWxsIGJlIG1pbWlja2VkIGluIHRoZSBOYW1lIGZpZWxkLCBidXQgd2l0aCBvbmx5IGxv d2VyIGNhc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFNwYWNlcyB3aWxsIGJlIGNvbnZl cnRlZCB0byBkYXNoZXMuIE5vdGUgdGhhdCBhdCBwcmVzZW50LCBmb3JlaWduIGNoYXJhY3Rl cnMgYXJlIG5vdCAmIzgyMTY7ZHVtYmVkIGRvd24mIzgyMTc7IHRvIDxzcGFuIGNsYXNzPSJj YXBzIj5BU0NJSTwvc3Bhbj4uIFRoaXMgZmVhdHVyZSBpcyBwbGFubmVkIGJ1dCBmb3IgdGhl IHRpbWUgYmVpbmcgaXQgaXMgcHJvYmFibHkgYmVzdCB0byBzd2l0Y2ggb2ZmIHRoZSBhdXRv LW5hbWUgZmVhdHVyZSBpZiB5b3UgYXJlIGRlYWxpbmcgaGVhdmlseSB3aXRoIHVuaWNvZGUg Y2hhcmFjdGVycy4gWW91ciB0YWdzIHdpbGwgc3RpbGwgYmUgZHVtYmVkIGRvd24gYWNjb3Jk aW5nIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgaW50ZXJuYWwg cnVsZXMgZXhhY3RseSBsaWtlIHRoZXkgYXJlIG9uIHRoZSBDYXRlZ29yaWVzIHBhbmVsOyB5 b3UganVzdCB3b24mIzgyMTc7dCBiZSBhYmxlIHRvIHNlZSBpdHMgbmFtZSB1bnRpbCB5b3Ug Y2xpY2sgdG8gaGlnaGxpZ2h0IGl0LjwvcD4KCgk8cD5JZiB5b3UgaGF2ZSBlbGVjdGVkIHRv IHVzZSBtdWx0aS10YWcgZW50cnksIHlvdSBtYXkgcHV0IGFzIG1hbnkgdGFncyBhcyB5b3Ug bGlrZSBpbiB0aGUgVGFnIFRpdGxlL1RhZyBOYW1lIGJveGVzLCBlYWNoIHNlcGFyYXRlZCBi eSB5b3VyIGNob3NlbiBkZWxpbWl0ZXIgY2hhcmFjdGVyIChzZWUgdGhlIDxlbT5NdWx0aS10 YWcgZGVsaW1pdGVyPC9lbT4gcHJlZmVyZW5jZSkuPC9wPgoKCTxwPkhpdCBTYXZlIChvciBD cmVhdGUpIHRvIGRlZmluZSB0aGUgdGFnKHMpLCBvciB1c2UgdGhlIEVudGVyIGtleSB3aGVu IGluIGFueSBpbnB1dCBmaWVsZCBhcyBhIHNob3J0Y3V0IGZvciBDcmVhdGUuIFRoZSB0YWco cykgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdHlwZSAoYXJ0 aWNsZSwgaW1hZ2UsIGZpbGUgb3IgbGluaykgYW5kIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50 bHkgY2hvc2VuIFBhcmVudC9DYXRlZ29yeS4gSWYgeW91IGhhdmUgYWRkZWQgb25seSBvbmUg dGFnLCBpdCB3aWxsIHJlbWFpbiAmIzgyMTY7c2VsZWN0ZWQmIzgyMTc7IGFmdGVyIGNyZWF0 aW9uIGFuZCB3aWxsIGFsc28gc3RheSBzZWxlY3RlZCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVu IHR5cGVzLiBUaGlzIGFsbG93cyBmb3IgcmFwaWQgY3JlYXRpb24gb2Ygc2ltaWxhci1uYW1l ZCB0YWdzIG9yIGZvciB2ZXJ5IHF1aWNrbHkgJiM4MjE2O2NvcHlpbmcmIzgyMTc7IHRhZ3Mg ZnJvbSBvbmUgdHlwZSB0byBhbm90aGVyLjwvcD4KCgk8cD5Zb3UgY2FuIGVkaXQgYW55IHRh ZyBieSBjbGlja2luZyBvbiBpdCBpbiB0aGUgbGlzdCB0byBwdWxsIGl0IGludG8gdGhlIGVk aXQgbGluZSBhdCB0aGUgdG9wLiBNYWtlIGFueSBjaGFuZ2VzIGFuZCBoaXQgU2F2ZSB0byBv dmVyd3JpdGUgdGhlIGV4aXN0aW5nIHRhZywgb3IgaGl0IENyZWF0ZSB0byBtYWtlIGEgbmV3 IG9uZS4gVXNlIHRoZSAmIzgyMTY7eCYjODIxNzsgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgc2Vs ZWN0ZWQgdGFnOyBub3RlIHRoZXJlIGlzIG5vIGNvbmZpcm1hdGlvbiBzdGVwLCBzaW5jZSB0 aGUgYWN0IG9mIGNsaWNraW5nIHRoZSB0YWcgaXMgdGhlIGNvbmZpcm1hdGlvbiBpdHNlbGYh IFdoZW4geW91IHN3aXRjaCBiZXR3ZWVuIHR5cGVzLCBpZiB0aGUgY3VycmVudGx5IGVkaXRl ZCB0YWcgZXhpc3RzIGluIGFub3RoZXIgdHlwZSwgaXQgd2lsbCBiZSBzZWxlY3RlZCBhdXRv bWF0aWNhbGx5IHVwb24gc3dpdGNoaW5nLjwvcD4KCgk8cD5JZiB0aGUgb3B0aW9uIHRvIGRp c3BsYXkgY291bnRzIGlzIHNlbGVjdGVkIHRoZSBudW1iZXIgb2YgYXJ0aWNsZXMgLyBpbWFn ZXMgLyBmaWxlcyAvIGxpbmtzIHdpbGwgYmUgc2hvd24gaW4gYnJhY2tldHMgYWxvbmdzaWRl IGVhY2ggdGFnLiBJZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAgdGhlIG51bWJlciBj YW4gYmUgY2xpY2tlZCB0byB2aWV3IHRoZSBsaXN0IG9mIGl0ZW1zIGNvbnRhaW5pbmcgdGhh dCB0YWcuPC9wPgoKCTxwPk5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPklmIHlvdSBFZGl0IGEg dGFnIGFuZCB0cnkgdG8gU2F2ZSBpdCB3aGVuIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFu IGV4aXN0aW5nIHRhZywgeW91IHdpbGwgcmVjZWl2ZSBhIHdhcm5pbmcgbWVzc2FnZTwvbGk+ CgkJPGxpPklmIHlvdSB0cnkgdG8gZGVsZXRlIGEgdGFnIHRoYXQgaXMgaW4gdXNlIGFuZCB0 aGUgcHJlZmVyZW5jZSAmIzgyMTY7QWxsb3cgZGVsZXRpb24gb2YgdXNlZCB0YWdzJiM4MjE3 OyBpcyBzZXQgdG8gJiM4MjE2O25vJiM4MjE3OywgaXQgd2lsbCBiZSBmb3JiaWRkZW48L2xp PgoJCTxsaT5UaGUgcGFyZW50IGxpc3QgaXMgcG9wdWxhdGVkIHZpYSA8c3BhbiBjbGFzcz0i Y2FwcyI+QUpBWDwvc3Bhbj4gZnJvbSB0aGUgZGF0YWJhc2UgZWFjaCB0aW1lIHlvdSBjbGlj ayBhIHRhZywgYW5kIHRoZSBMaW5rZWQgY2F0IGxpc3QgaXMgcG9wdWxhdGVkIGVhY2ggdGlt ZSB5b3UgY2hhbmdlIHR5cGUuIFRoaXMgaXMgdW5mb3J0dW5hdGVseSB1bmF2b2lkYWJsZS4g VGhlIGxpc3RzIHdpbGwgZmFkZSBvdXQgd2hpbGUgdGhlIHJlcXVlc3QgaXMgdGFraW5nIHBs YWNlLiBPY2Nhc2lvbmFsbHkgaXQgbWF5IGdldCAmIzgyMjA7c3R1Y2smIzgyMjE7IGlmIHlv dSBjbGljayB0b28gcXVpY2tseSBiZXR3ZWVuIHRhZ3Mgb3IgdGhlIHNlcnZlciBpcyBzbG93 IHRvIHJlc3BvbmQuIEluIHRoZXNlIGNpcmN1bXN0YW5jZXMsIHJlZnJlc2hpbmcgdGhlIHBh Z2UgYnkgY2xpY2tpbmcgdGhlIDxlbT5zbWQgVGFnczwvZW0+IHRhYiB3aWxsIHJlc3RvcmUg dGhpbmdzPC9saT4KCQk8bGk+V2hlbiB1c2luZyB0aGUgYXV0by10YWcgZmVhdHVyZSwgaWYg eW91IHdhbnQgdG8gY2hhbmdlIHRoZSBOYW1lIGZpZWxkLCBkbyBpdCA8ZW0+YWZ0ZXI8L2Vt PiB5b3UgaGF2ZSBmaW5pc2hlZCB0eXBpbmcgaW4gdGhlIFRpdGxlIGZpZWxkOyBhbnkgc3Vi c2VxdWVudCBjaGFuZ2VzIHRvIHRoZSBUaXRsZSBmaWVsZCB3aWxsIG92ZXJ3cml0ZSBhbnl0 aGluZyBpbiB0aGUgTmFtZSBmaWVsZDwvbGk+CgkJPGxpPkRlbGV0aW5nIGEgdGFnIHdpbGwg cmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIGl0LCBzbyBiZSBjYXJlZnVsPC9saT4KCTwvdWw+ CgoJPGgzPkxpdmUgdGFnIHNlYXJjaDwvaDM+CgoJPHA+WW91IGNhbiB1c2UgdGhlIDxlbT5U YWcgc2VhcmNoPC9lbT4gYm94IHRvIGZpbHRlciB5b3VyIHRhZyBsaXN0IGluIHJlYWwtdGlt ZS4gVGhpcyBmYWNpbGl0YXRlcyBlYXN5IHNlYXJjaGluZyB3aGVuIHlvdXIgdGFnIGxpc3Qg YmVjb21lcyBsYXJnZS4gU2ltcGx5IHN0YXJ0IHR5cGluZyBpbiB0aGUgdGV4dCBib3ggYW5k IHlvdXIgdGFncyB3aWxsIGJlIGZpbHRlcmVkIGFzIHlvdSB0eXBlLiBBbiBpbmRpY2F0b3Ig dG8gdGhlIHJpZ2h0IHNob3dzIGhvdyBtYW55IHRhZ3MgbWF0Y2ggeW91ciBjdXJyZW50IHNl YXJjaCBjcml0ZXJpYS4gWW91IGNhbiBjaG9vc2UgdGhhdCB5b3VyIHRleHQgYmUgbWF0Y2hl ZCBhZ2FpbnN0IHRoZSB0YWcmIzgyMTc7cyBuYW1lLCBpdHMgdGl0bGUsIGl0cyBwYXJlbnQg dGFnLCBsaW5rZWQgY2F0ZWdvcnkgKGlmIHlvdSBoYXZlIGFsbG93ZWQgdGFncyB0byBiZSBs aW5rZWQpLCBvciBhbGwgb2YgdGhlIGFib3ZlLjwvcD4KCgk8cD5XaGVuIHlvdSBmbGljayBi ZXR3ZWVuIHRhZyB0eXBlcyB5b3VyIHNlYXJjaCBjcml0ZXJpYSByZW1haW4gaW4gZm9yY2Uu IEhpdCB0aGUgPGVtPjxzcGFuIGNsYXNzPSJjYXBzIj5FU0M8L3NwYW4+YXBlPC9lbT4ga2V5 IHRvIGNsZWFyIHRoZSB0ZXh0IGJveCBhbmQgcmV0dXJuIHlvdXIgdGFnIGxpc3QgdG8gaXRz IHVuZmlsdGVyZWQgc3RhdGUuIFlvdSBtYXkgaGlkZS9kaXNwbGF5IHRoZSBmaWx0ZXIgYm94 IGJ5IGNsaWNraW5nIGl0cyBoZWFkaW5nIHRvIHRvZ2dsZSBpdHMgdmlzaWJpbGl0eSAodGhl IGN1cnJlbnQgc3RhdGUgaXMgcmVtZW1iZXJlZCBmb3IgeW91KS48L3A+CgoJPHA+Tm90ZXM6 PC9wPgoKCTx1bD4KCQk8bGk+c2VhcmNoZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmU8L2xpPgoJ CTxsaT5tdWx0aS13b3JkIHNlYXJjaGVzIGZpbmQgdGFncyB3aXRoIDxlbT5hbnk8L2VtPiBv ZiB0aGUgbWF0Y2hpbmcgd29yZHMuIFRoaXMgYWxsb3dzIHlvdSB0byBidWlsZCB1cCBjb21w bGV4IHNlYXJjaGVzIHVzaW5nIG1hbnkgd29yZHMgYW5kIGFwcGx5IGFjdGlvbnMgdG8gdGhl bSBhbGw8L2xpPgoJCTxsaT5saW5rZWQgY2F0ZWdvcmllcyBhbmQgdGFnIG5hbWVzL3BhcmVu dHMgYXJlIGVzY2FwZWQgc28gdGhleSB3aWxsIG5vdCBjb250YWluIGFueSBub24tPHNwYW4g Y2xhc3M9ImNhcHMiPkFTQ0lJPC9zcGFuPiBvciBzcGVjaWFsIGNoYXJhY3RlcnMuIEZvciBl eGFtcGxlLCBpZiB5b3VyIHRhZyB0aXRsZSBpcyA8ZW0+UGF1bCBPJiM4MjE3O0dyYWR5PC9l bT4geW91IGNhbiBzZWFyY2ggaXRzIHRpdGxlIGZvciA8ZW0+TyYjODIxNztHcjwvZW0+IGFu ZCBpdCB3aWxsIGxvY2F0ZSB0aGUgdGFnLiBJZiwgaG93ZXZlciwgeW91IHdhbnRlZCB0byBm aW5kIGFsbCB0YWdzIHRoYXQgaGF2ZSA8ZW0+UGF1bCBPJiM4MjE3O0dyYWR5PC9lbT4gYXMg dGhlaXIgcGFyZW50IHRhZyB5b3UmIzgyMTc7ZCBoYXZlIHRvIHR5cGUgPGVtPm9ncmE8L2Vt PiB0byBoYXZlIGl0IGZpbHRlciBieSB0aGlzIHBhcmFtZXRlcjwvbGk+Cgk8L3VsPgoKCTxo ND5QZXJmb3JtaW5nIGFjdGlvbnMgb24gZmlsdGVyZWQgdGFnczwvaDQ+CgoJPHA+V2hpbGUg eW91IGFyZSBmaWx0ZXJpbmcgdGhlIHRhZ3MsIHlvdSBjYW4gcGVyZm9ybSBhIHNldCBvZiBh Y3Rpb25zIG9uIGFsbCB0aGUgdmlzaWJsZSB0YWdzLiBTaW1wbHkgZW50ZXIgc29tZSBzZWFy Y2ggY3JpdGVyaWEgYW5kLCB3aGVuIHlvdSBhcmUgaGFwcHkgd2l0aCB0aGUgcHJlc2VudGVk IGxpc3Qgb2YgdGFncywgc2VsZWN0IG9uZSBvZiB0aGUgYWN0aW9ucyBmcm9tIHRoZSA8ZW0+ V2l0aCBmaWx0ZXJlZDwvZW0+IGRyb3Bkb3duLiAgWW91IGNhbiBtdWx0aS1kZWxldGUsIGFz c2lnbiBhIHBhcmVudCB0YWcsIG9yIChpZiBwZXJtaXR0ZWQpIGFzc2lnbiBhIGxpbmtlZCBj YXRlZ29yeS48L3A+CgoJPHA+Q2hvb3NpbmcgdG8gPGVtPkFzc2lnbiBwYXJlbnQ8L2VtPiBv ciA8ZW0+TGluayB0byBjYXRlZ29yeTwvZW0+IHByZXNlbnRzIGEgZnVydGhlciBkcm9wZG93 bi4gU2VsZWN0IHRoZSBwYXJlbnQgdGFnL2NhdGVnb3J5IHRvIHdoaWNoIHlvdSB3aXNoIHRv IGFzc2lnbiB0aGUgZmlsdGVyZWQgdGFncy4gV2hlbiB5b3Ugc2VsZWN0IDxlbT5HbzwvZW0+ IGFuZCBjb25maXJtIHlvdSBhcmUgc3VyZSwgdGhlIGFjdGlvbiB3aWxsIGJlIGFwcGxpZWQg dG8gYWxsIHNlbGVjdGVkIHRhZ3MuPC9wPgoKCTxwPlRoaW5ncyB0byBub3RlOjwvcD4KCgk8 dWw+CgkJPGxpPmlmIHlvdSB0cnkgdG8gYXNzaWduIGEgcGFyZW50IHRvIGEgdGFnIHRoYXQg aXMgaXRzZWxmLCBpdCB3aWxsIGJlIHNhZmVseSBpZ25vcmVkPC9saT4KCQk8bGk+aWYgdGhl IDxlbT5BdXRvbWF0aWNhbGx5IHNob3cgcmVwb3J0czwvZW0+IHByZWZlcmVuY2UgaXMgb24s IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aWxsIGJlIHBvcHBlZCB1cCBpbW1lZGlhdGVs eSB1cG9uIGNvbXBsZXRpb248L2xpPgoJCTxsaT5pZiB5b3UgbGVhdmUgdGhlIHNlYXJjaCBi b3ggZW1wdHksIGFueSBtdWx0aS1hY3Rpb24geW91IGNob29zZSB3aWxsIGJlIGFwcGxpZWQg dG8gPHNwYW4gY2xhc3M9ImNhcHMiPkFMTDwvc3Bhbj4gdGFnczwvbGk+CgkJPGxpPnlvdSBj YW4gdmlldyB0aGUgbW9zdCByZWNlbnQgcmVwb3J0IGF0IGFueSB0aW1lIGJ5IGNsaWNraW5n IHRoZSA8ZW0+RGlzcGxheSByZWNlbnQgcmVwb3J0PC9lbT4gbGluayBpbiB0aGUgPGVtPlRh ZyBzZWFyY2g8L2VtPiBib3gsIGJ1dCBvbmNlIHlvdSBoYXZlIG5hdmlnYXRlZCBhd2F5IGZy b20gdGhlIE1hbmFnZSBUYWdzIHBhbmVsLCBvciBwZXJmb3JtZWQgYW5vdGhlciBhY3Rpb24g c3VjaCBhcyBjcmVhdGluZyBhIHRhZywgdGhlIHJlcG9ydCBpcyByZWZyZXNoZWQvbG9zdDwv bGk+Cgk8L3VsPgoKCTxoMyBpZD0iaW1wb3J0Ij5JbXBvcnRpbmcgdGFncyBlbi1tYXNzZTwv aDM+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+QmFjayB1cCB5b3VyIGRhdGFiYXNlIGZpcnN0 ITwvcD4KCgk8cD5JZiB5b3UgaGF2ZSB1c2VkIHRydV90YWdzIGFuZC9vciByc3NfdW5saW1p dGVkX2NhdGVnb3JpZXMgeW91IGNhbiBpbXBvcnQgdGhlIGluZm9ybWF0aW9uIGZyb20gZWl0 aGVyIHN5c3RlbSBhbmQgY3JlYXRlIHNtZF90YWdzLiBBc3N1bWluZyB5b3UgaGF2ZSBvbmUg b3IgYm90aCBwbHVnaW5zIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkLCB5b3UgY2FuIHZpZXcg dGhlIEltcG9ydCBwYW5lIGZyb20gd2hlcmUgeW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBv cHRpb25zIHRvIGNvbmZpZ3VyZSBob3cgdGhlIHRhZ3MgYXJlIGltcG9ydGVkOjwvcD4KCgk8 aDQ+UGx1Z2luIG9wdGlvbnM8L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PkltcG9ydCBmcm9tPC9zcGFuPiA6IENob29zZSB0aGUgcGx1Z2luIGZyb20gd2hpY2ggeW91 IHdpc2ggdG8gaW1wb3J0LiBUaGUgcGx1Z2luIG5lZWRzIHRvIGJlIGluc3RhbGxlZCBhbmQg YWN0aXZhdGVkIGZvciBpdCB0byBhcHBlYXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+QXJ0aWNsZXMgZnJvbSBzZWN0aW9uPC9zcGFuPiA6IE9ubHkgaW1wb3J0IHRhZ3MgZnJv bSB0aGUgYXJ0aWNsZXMgaW4gdGhlIHNlbGVjdGVkIHNlY3Rpb24uIElmIG5vdCBjaG9zZW4s IGl0IHVzZXMgYWxsIGFydGljbGVzIGluIHlvdXIgc2l0ZTwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5TdGFydCBmcm9tIHBhcmVudCBjYXRlZ29yeTwvc3Bhbj4gOiBJZiB5b3Ug YXJlIGltcG9ydGluZyBjYXRlZ29yeSBuYW1lcyBmcm9tIHJzc191bmxpbWl0ZWRfY2F0ZWdv cmllcywgeW91IGNhbiBjaG9vc2UgdG8gb25seSBpbXBvcnQgdGhlbSBmcm9tIHRoaXMgcGFy ZW50IGFuZCBiZWxvdzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5EZWxldGUgb3Jp Z2luYWw8L3NwYW4+IDogRW1wdHkgdGhlIEtleXdvcmRzIGZpZWxkICh0cnVfdGFncykgb3Ig cmVtb3ZlIGFueSByc3NfdW5saW1pdGVkX2NhdGVnb3JpZXMgbGlua2VkIHRvIHRoZSBhcnRp Y2xlcyB5b3UgYXJlIGltcG9ydGluZyBmcm9tLiBGb3Igc2FmZXR5LCB5b3Ugc2hvdWxkIGRv IHRoaXMgaW4gdHdvIHN0ZXBzOyBpbXBvcnQgdGhlIHRhZ3MgYW5kIGxlYXZlIHRoZSBvcmln aW5hbHMgaW50YWN0LCB0aGVuIGltcG9ydCBhZ2FpbiB3aXRoIDxlbT5EZWxldGUgb3JpZ2lu YWxzPC9lbT4gc2V0IHRvICYjODIxNjt5ZXMmIzgyMTc7IG9uY2UgeW91IGFyZSBoYXBweSB3 aXRoIHRoZSByZXN1bHRzPC9saT4KCTwvdWw+CgoJPGg0PkltcG9ydCBvcHRpb25zPC9oND4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MaW5rIHRvIGNhdGVnb3J5PC9zcGFu PiA6IGlmIHlvdSBwZXJtaXQgdGFncyB0byBiZSBsaW5rZWQgdG8gY2F0ZWdvcnksIHRoaXMg ZHJvcGRvd24gaXMgYXZhaWxhYmxlLiBBbGwgaW1wb3J0ZWQga2V5d29yZHMvY2F0ZWdvcmll cyB3aWxsIGJlIGxpbmtlZCB0byB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IGNhdGVnb3J5PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkZvcmNlIGNhdGVnb3J5 IGxpbmsgaWYgdGFnIGFscmVhZHkgZXhpc3RzPC9zcGFuPiA6IGlmIGNoZWNrZWQsIGFueSB0 YWdzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gaW1wb3J0ZWQgd2lsbCBoYXZlIHRoZWlyIGNh dGVnb3J5IHJlLWFzc2lnbmVkIHRvIHRoZSBjaG9zZW4gY2F0ZWdvcnkuIElmIG5vdCBjaGVj a2VkLCBhbnkgdGFnIHRoYXQgYWxyZWFkeSBleGlzdHMgd2lsbCBoYXZlIGl0cyBjYXRlZ29y eSBsZWZ0IGludGFjdDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5Bc3NpZ24gdG8g cGFyZW50IHRhZzwvc3Bhbj4gOiBMaW5rIGFsbCBpbXBvcnRlZCBrZXl3b3Jkcy9jYXRlZ29y aWVzIGJlbmVhdGggdGhpcyBzbWRfdGFnLiBJZiB5b3UgYXJlIGxpbmtpbmcgdGFncyB0byBj YXRlZ29yaWVzIHRoZW4gdGhlIGF2YWlsYWJsZSBwYXJlbnQgdGFncyB3aWxsIGJlIGluZmx1 ZW5jZWQgYnkgdGhlIHNldHRpbmcgb2YgdGhlIGNhdGVnb3J5IGNob3NlbiBhYm92ZTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5Gb3JjZSBwYXJlbnQgaWYgdGFnIGFscmVhZHkg ZXhpc3RzPC9zcGFuPiA6IGlmIGNoZWNrZWQsIGFueSB0YWdzIHRoYXQgaGF2ZSBhbHJlYWR5 IGJlZW4gaW1wb3J0ZWQgd2lsbCBoYXZlIHRoZWlyIHBhcmVudCByZS1hc3NpZ25lZCB0byB0 aGUgY2hvc2VuIHNtZF90YWcuIElmIG5vdCBjaGVja2VkLCBhbnkgdGFnIHRoYXQgYWxyZWFk eSBleGlzdHMgd2lsbCBoYXZlIGl0cyB0YWcgaGllcmFyY2h5IGxlZnQgaW50YWN0PC9saT4K CTwvdWw+CgoJPHA+T25jZSB5b3UgaGF2ZSBjaG9zZW4gdGhlIHJlbGV2YW50IG9wdGlvbnMs IGhpdCA8ZW0+R288L2VtPi4gVGhlIHBsdWdpbiB3aWxsIGRvIHlvdXIgYmlkZGluZyBhbmQ6 PC9wPgoKCTxvbD4KCQk8bGk+Q29weSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgS2V5d29y ZHMgKHRydV90YWdzKSAvIENhdGVnb3JpZXMgKHJzc191YykgZmllbGRzIGFuZCBjcmVhdGUg c21kX3RhZ3MgZm9yIGVhY2ggaXRlbS4gSWYgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpdCB3 aWxsIGJlIGlnbm9yZWQ8L2xpPgoJCTxsaT5Bc3NpZ24gdGhlIGNyZWF0ZWQgdGFncyB0byB0 aGUgcmVsZXZhbnQgcGFyZW50LCBlaXRoZXIgZm9yIHRhZ3MgdGhhdCBkbyBub3QgZXhpc3Qg b3IgZm9yIGFsbCB0YWdzIGlmIHRoZSAmIzgyMTY7Zm9yY2UmIzgyMTc7IG9wdGlvbiBpcyBj aG9zZW48L2xpPgoJCTxsaT5MaW5rIHRoZSBjcmVhdGVkIHRhZ3MgdG8gdGhlIHJlbGV2YW50 IGNhdGVnb3J5LCBlaXRoZXIgZm9yIHRhZ3MgdGhhdCBkbyBub3QgZXhpc3Qgb3IgZm9yIGFs bCB0YWdzIGlmIHRoZSAmIzgyMTY7Zm9yY2UmIzgyMTc7IG9wdGlvbiBpcyBjaG9zZW48L2xp PgoJCTxsaT5Db3B5IHRoZSBhc3NpZ25lZCB0YWdzIGluIGVhY2ggYXJ0aWNsZSBmcm9tIHRo ZSBLZXl3b3Jkcy9DYXRlZ29yaWVzIHNvIHRoZSBzYW1lIHRhZ3MgYXJlIGFzc2lnbmVkPC9s aT4KCQk8bGk+KG9wdGlvbmFsbHkpIERlbGV0ZSB0aGUgb3JpZ2luYWwgS2V5d29yZHMvQ2F0 ZWdvcmllczwvbGk+CgkJPGxpPlJlbWVtYmVyIHlvdXIgb3B0aW9ucyBzbyB5b3UgY2FuIHF1 aWNrbHkgbWFrZSBhbHRlcmF0aW9ucyBhbmQgaW1wb3J0IHRhZ3MgaW4gYmF0Y2hlcyBpZiB5 b3Ugd2lzaDwvbGk+Cgk8L29sPgoKCTxwPkFzIHRoZSBwbHVnaW4gZ29lcyB0aHJvdWdoIHlv dXIgYXJ0aWNsZXMgaXQgd2lsbCB1cGRhdGUgdGhlIGNvdW50cyBiZWxvdyB0aGUgaW1wb3J0 IG9wdGlvbnM6IHRoZSBudW1iZXIgb2YgYXJ0aWNsZXMgZG9uZS9vdXQgb2YgdG90YWwsIGFu ZCB0aGUgbnVtYmVyIG9mIHRhZ3MgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQgYW5kIGxpbmtl ZCB0byB5b3VyIGFydGljbGVzLiBPbmNlIGl0IGhhcyBjb21wbGV0ZWQgdGhlIHRhc2ssIGEg cmVwb3J0IGlzIGF2YWlsYWJsZSBkZXRhaWxpbmcgdGhlIGFjdGlvbnMgdGhlIHBsdWdpbiB0 b29rLiBJdCB3aWxsIGVpdGhlciBiZSBkaXNwbGF5ZWQgYXV0b21hdGljYWxseSAoZGVwZW5k aW5nIG9uIHlvdXIgcHJlZiBzZXR0aW5nKSBvciB5b3UgY2FuIHZpZXcgaXQgYnkgY2xpY2tp bmcgdGhlIDxlbT5EaXNwbGF5IHJlY2VudCByZXBvcnQ8L2VtPiBsaW5rLjwvcD4KCgk8aDM+ RWRpdGluZyBhcnRpY2xlcyAvIGltYWdlcyAvIGZpbGVzIC8gbGlua3M8L2gzPgoKCTxwPk9u IGVhY2ggb2YgdGhlIGZvdXIgcGFnZXMgdGhhdCBoYXZlIGNoZWNrYm94ZXMgc2V0IGluIHRo ZSBzbWRfdGFncyBwcmVmZXJlbmNlcywgeW91ciBjaG9zZW4gaW5wdXQgbWVjaGFuaXNtIHdp bGwgYXBwZWFyIGJlbmVhdGggdGhlIGNhdGVnb3J5IGFzc2lnbm1lbnQuIFRoaXMgYWxsb3dz IHlvdSB0byB0YWcgYSBwYXJ0aWN1bGFyIGFydGljbGUsIGltYWdlLCBmaWxlIG9yIGxpbmsg d2l0aCBhbnkgbnVtYmVyIG9mIGl0ZW1zLiBPbmNlIHlvdSBoYXZlIHNlbGVjdGVkIHlvdXIg dGFncywgdGhlIHVzdWFsIFNhdmUgYnV0dG9uIG9uIHRoZSBzY3JlZW4gd2lsbCBjb21taXQg dGhlIGNoYW5nZXMuPC9wPgoKCTxwPlRoZSA8Y29kZT5bRWRpdF08L2NvZGU+IGxpbmsgdGFr ZXMgeW91IHRvIHRoZSBUYWcgTWFuYWdlbWVudCBwYWdlIHRoYXQgYWxsb3dzIHlvdSB0byBj cmVhdGUgbmV3IHRhZ3MuIElmIHVzaW5nIGEgc2VsZWN0IGxpc3QsIHR3byBvdGhlciBidXR0 b25zIGFyZSBhdmFpbGFibGU6IDxjb2RlPltDbHJdPC9jb2RlPiBkZXNlbGVjdHMgYWxsIHRh Z3MgYW5kIDxjb2RlPltUb2ddPC9jb2RlPiB0b2dnbGVzIGFsbCB0YWdzIHNvIGlmIHRoZXkg d2VyZSAmIzgyMTY7b24mIzgyMTc7IHRoZXkgYmVjb21lICYjODIxNjtvZmYmIzgyMTc7LCBh bmQgdmljZSB2ZXJzYS48L3A+CgoJPHA+Tm90ZXMgb24gdGhlIFRleHQgYXJlYSBlbnRyeSBt ZWNoYW5pc21zOjwvcD4KCgk8dWw+CgkJPGxpPlRhZ3MgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBB dXRvLWNvbXBsZXRlIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkPC9saT4KCQk8bGk+TmV3IHRh Z3MgY2FuIDxlbT5vbmx5PC9lbT4gYmUgYWRkZWQgaWYgdGhlIDxjb2RlPlRleHQgYXJlYSs8 L2NvZGU+IGlucHV0IG1ldGhvZCBpcyBjaG9zZW4gYW5kIFF1aWNrIHRhZyBpcyA8c3Ryb25n Pm5vdDwvc3Ryb25nPiBzdHJpY3Q8L2xpPgoJCTxsaT5OZXcgdGFncyBhcmUgbm9ybWFsbHkg YXNzaWduZWQgYXQgdGhlIHJvb3QgbGV2ZWw7IGlmIHlvdSB3aXNoIHRvIHN1Yi10YWcgdGhl bSBhdCB0aGlzIHBvaW50LCB3cml0ZSB0aGUgdGFnIGxpa2UgdGhpczogPGNvZGU+cGFyZW50 X3RhZy0tJmd0O25ld190YWc8L2NvZGU+LiBBbnl0aGluZyB0byB0aGUgbGVmdCBvZiB0aGUg aHlwaGVuLWh5cGhlbi1hcnJvdyBpcyBmaXJzdCBjaGVja2VkIHRvIHNlZSBpZiBpdCBleGlz dHMgYXMgYSB0YWcgYW5kLCBpZiBpdCBkb2VzLCB0aGUgbmV3X3RhZyBpcyBtYWRlIGEgc3Vi LXRhZyBvZiBpdC4gSWYgdGhlIHBhcmVudF90YWcgZG9lc24mIzgyMTc7dCBleGlzdCwgbmV3 X3RhZyBpcyBhc3NpZ25lZCB0byByb290PC9saT4KCQk8bGk+TmV3IHRhZ3MgYmVjb21lIFRh ZyBUaXRsZXMuIENvcnJlc3BvbmRpbmcgdGFnIG5hbWVzIGFyZSBzdWJqZWN0IHRvIHRoZSB1 c3VhbCBsb3dlciBjYXNlL2R1bWJpbmcgZG93bjwvbGk+CgkJPGxpPklmIDxjb2RlPkxpbmsg dGFncyB0byBjYXRlZ29yaWVzPC9jb2RlPiBpcyBzZXQsIG9ubHkgdmFsaWQgdGFncyBhc3Np Z25lZCB0byB0aGUgY2hvc2VuIGNhdGVnb3JpZXMgd2lsbCBiZSBzYXZlZDwvbGk+CgkJPGxp PklmIHlvdSBhbHRlciBjYXRlZ29yeSB5b3VyIHRhZyBsaXN0IGlzIHJlYnVpbHQgdG8gb25s eSBzaG93IC8gYWxsb3cgdGhlIG9uZXMgaW4gdGhlIHNlbGVjdGVkIGNhdGVnb3J5KGllcyku IElmIHlvdSBoYXZlIGFscmVhZHkgc2VsZWN0ZWQgc29tZSB0YWdzLCB0aGlzIHdpbGwgcmVz dWx0IGluIHRoZSBvbmVzIHlvdSBoYXZlIHNlbGVjdGVkIHNpbmNlIGxhc3Qgc2F2ZSBiZWlu ZyByZW1vdmVkL3VuaGlnaGxpZ2h0ZWQuIFNvIGNob29zZSB5b3VyIGNhdGVnb3JpZXMgZmly c3QgYW5kIHRoZW4gdGFnIGF3YXkuPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjc3VzYWdlIj5Q dWJsaWMgc2lkZSB0YWdzPC9oMj4KCgk8aDIgY2xhc3M9InRhZyI+c21kX3RhZ19saXN0PC9o Mj4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkRpc3BsYXkgYSBsaXN0IG9mIHRhZ3MgbWF0 Y2hpbmcgY2VydGFpbiBjcml0ZXJpYSwgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0IChnbG9i YWwsIGFydGljbGUsIGZpbGUsIGxpbmssIG9yIGltYWdlKSBvciBhIGZpeGVkIGNvbnRleHQg c3VwcGxpZWQgYXMgYXR0cmlidXRlcy48L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0 dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnR5cGU8L3NwYW4+IDogb25lIG9mIDxjb2RlPmFydGljbGU8L2NvZGU+LCA8Y29kZT5p bWFnZTwvY29kZT4sIDxjb2RlPmZpbGU8L2NvZGU+IG9yIDxjb2RlPmxpbms8L2NvZGU+LiBJ ZiBvbWl0dGVkIHRoZSBiZXN0IG1hdGNoIGlzIHVzZWQgYmFzZWQgb24gd2hlcmUgdGhlIHRh ZyBhcHBlYXJzLiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMgaW4gdGhlIDxjb2RlPnBsYWlubGlu a3M8L2NvZGU+IGZvcm0gdGhlIHR5cGUgd291bGQgZGVmYXVsdCB0byA8Y29kZT5saW5rczwv Y29kZT4uIElmIGEgYmVzdCBtYXRjaCBjYW5ub3QgYmUgZm91bmQsIGl0IHVzZXMgPGNvZGU+ YXJ0aWNsZTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zmxhdm91cjwv c3Bhbj4gOiB0aGUgdHlwZSBvZiBsaXN0IHRvIGRpc3BsYXkuIFRoZSBkZWZhdWx0IGlzIDxj b2RlPmxpc3Q8L2NvZGU+IGJ1dCB5b3UgbWF5IGFsc28gc3BlY2lmeSA8Y29kZT5jbG91ZDwv Y29kZT4gd2hpY2ggY2FsY3VsYXRlcyBzb21lIHdlaWdodGluZyBpbmZvcm1hdGlvbiBmb3Ig ZWFjaCB0YWcgKGF0IHRoZSBleHBlbnNlIG9mIGEgbGl0dGxlIGV4dHJhIHByb2Nlc3Npbmcg b3ZlcmhlYWQpLiBXaGVuIHVzaW5nIDxjb2RlPmNsb3VkPC9jb2RlPiB5b3UgY2FuIG9wdGlv bmFsbHkgc3BlY2lmeSB0aGUgc2NhbGUgYnkgYWRkaW5nIDxjb2RlPjptaW46bWF4PC9jb2Rl PiwgZm9yIGV4YW1wbGU6IDxjb2RlPmZsYXZvdXI9JnF1b3Q7Y2xvdWQ6NzU6MzAwJnF1b3Q7 PC9jb2RlPiB3b3VsZCBtYWtlIHRoZSBtaW5pbXVtIHdlaWdodCA3NSBhbmQgdGhlIG1heGlt dW0gMzAwLiBEZWZhdWx0IGlzIDxjb2RlPjoxMDA6MTUwPC9jb2RlPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4gOiBsaXN0IG9mIHRhZyBJRHMgdG8gc2hvdy4g SWYgb21pdHRlZCBhbmQgeW91IHdlcmUgdmlld2luZyBhbiBhcnRpY2xlIGl0IHdpbGwgZGVm YXVsdCB0byB0aGUgdGFncyBmcm9tIHRoZSBjdXJyZW50IGFydGljbGU8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bmFtZTwvc3Bhbj4gOiBmaXhlZCBsaXN0IG9mIHRhZyBuYW1l cyB0byBzaG93LiBJZiB1c2VkLCB0aGV5IHRydW1wIHRoZSA8Y29kZT5pZDwvY29kZT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXhjbHVkZTwvc3Bhbj4gOiBhIGxpc3Qgb2Yg dGFnIG5hbWVzIHlvdSB3aXNoIHRvIG9taXQgZnJvbSB0aGUgbGlzdDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5wYXJlbnQ8L3NwYW4+IDogc3RhcnQgdGhlIGxpc3QgZnJvbSB0 aGlzIHBhcmVudCB0YWcuIERlZmF1bHQgaXMgZW1wdHkgKGkuZS4gdGhlICYjODIxNjtyb290 JiM4MjE3OyBub2RlIG9mIHRoaXMgcGFydGljdWxhciB0eXBlKTwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5zdWJsZXZlbDwvc3Bhbj4gOiBvbmx5IHNob3cgdGFncyBtYXRjaGlu ZyB0aGlzIG51bWJlciBsZXZlbC4gWW91IGNhbiBlaXRoZXIgc3BlY2lmeSA8Y29kZT5hbGw8 L2NvZGU+IHdoaWNoIHNob3dzIGFsbCB0YWdzIGZyb20gYWxsIGxldmVscyBvciBhIG51bWJl ciB0byBtYXRjaCBvbmx5IHRhZ3MgZnJvbSB0aGF0IGxldmVsLiBZb3UgbWF5IGFsc28gcHJl Zml4IHRoZSBudW1iZXIgd2l0aCBhIGNvbXBhcmlzb24gb3BlcmF0b3IgKGUuZy4gPGNvZGU+ c3VibGV2ZWw9JnF1b3Q7Jmd0Oz0xJnF1b3Q7PC9jb2RlPikgd2hpY2ggd291bGQgb25seSBz aG93IHRhZ3MgZnJvbSBsZXZlbCAxIGFuZCBpdHMgZGVzY2VuZGVudHMuIFZhbGlkIG9wZXJh dG9ycyBhcmUgPGNvZGU+Jmd0OzwvY29kZT4sIDxjb2RlPiZsdDs8L2NvZGU+LCA8Y29kZT4m Z3Q7PTwvY29kZT4gb3IgPGNvZGU+Jmx0Oz08L2NvZGU+LiBJZiBhbnl0aGluZyBlbHNlLCBl cXVhbGl0eSBpcyBhc3N1bWVkPGRpdiBjbGFzcz0iYnJlYWsiPk5vdGUgdGhhdCBpZiB5b3Ug c3BlY2lmeSBhIHBhcmVudCwgYW5kIHRoYXQgcGFyZW50IGlzIGluIHRoZSBjdXJyZW50IHRh ZyBsaXN0LCBpdHMgbGV2ZWwgaXMgMCBhbmQgdGhlIGNoaWxkcmVuIGJlbmVhdGggaXQgc3Rh cnQgYXQgbGV2ZWwgMS4gSWYsIGhvd2V2ZXIsIHlvdXIgY2hvc2VuIHBhcmVudCBpcyBub3Qg aW4gdGhlIGN1cnJlbnQgdGFnIGxpc3QsIDxlbT50aGUgY2hpbGRyZW4gd2lsbCBiZSBhdCBs ZXZlbCAwIGFuZCBhbnkgc3ViLWNoaWxkcmVuIHdpbGwgc3RhcnQgZnJvbSBsZXZlbCAxPC9l bT4uIFRvIGhlbHAgbWFuYWdlIHRoaXMsIGlmIHlvdSBsZWF2ZSA8Y29kZT5zdWJsZXZlbDwv Y29kZT4gZW1wdHkgdGhlIHBsdWdpbiBmaWd1cmVzIG91dCB0aGUgYXBwcm9wcmlhdGUgbGV2 ZWwgYXV0b21hdGljYWxseSBhbmQgb25seSBzaG93cyB0YWdzIGJlbG93IHRoZSBnaXZlbiBw YXJlbnQ8L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2hvd2FsbDwvc3Bh bj4gOiBub3JtYWxseSwgb25seSB0YWdzIHRoYXQgYXJlIGluIHVzZSBhcmUgcmV0dXJuZWQu IElmIHlvdSB3b3VsZCBsaWtlIHRoZSBwbHVnaW4gdG8gc2hvdyBhbGwgdGFncyAmIzgyMTI7 IGV2ZW4gZW1wdHkgb25lcyAmIzgyMTI7IHNldCB0aGlzIGF0dHJpYnV0ZSB0byAxLiBVc2Vm dWwgZm9yIGdlbmVyYXRpbmcgaGllcmFyY2hpY2FsIHRhZyB0cmVlczwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+IDogc2tpcCBvdmVyIHRoaXMgbnVtYmVy IG9mIHRhZ3MgYmVmb3JlIHN0YXJ0aW5nIHRvIGRpc3BsYXkgdGhlbTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5saW1pdDwvc3Bhbj4gOiB0aGUgbWF4aW11bSBudW1iZXIgb2Yg dGFncyB0byBzaG93LiBEZWZhdWx0IGlzIDk5OTk5IChpLmUuIGVmZmV0Y2l2ZWx5IHVubGlt aXRlZCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybTwvc3Bhbj4gOiBwYXNz IGNvbnRyb2wgdG8gdGhpcyBmb3JtIHRvIGRpc3BsYXkgdGhlIHRhZyBsaXN0LiBZb3UgbWF5 IGFsc28gdXNlIHRoZSB0YWcgYXMgYSBjb250YWluZXIuIFdpdGhvdXQgZm9ybSBvciBjb250 YWluZXIsIHRoZSB0YWcgbmFtZSBhbmQgaXRzIGNvdW50IHdpbGwgYmUgb3V0cHV0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmluZGVudDwvc3Bhbj4gOiBjaGFyYWN0ZXIgc2Vx dWVuY2UgdG8gdXNlIHRvIGluZGljYXRlIHRoYXQgYSB0YWcgaXMgYSBzdWItdGFnIG9mIGEg cGFyZW50LiBEZWZhdWx0cyB0byB0d28gbm9uLWJyZWFraW5nIHNwYWNlczwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uX2xpbms8L3NwYW4+IDogaWYgeW91IHdhbnQg dGhlIHRhZ3MgdG8gYmUgY2xpY2thYmxlIHNvIHRoZXkgY2FuIGxlYWQgdG8gYW5vdGhlciBw YWdlIG9mIHRhZyBkZXRhaWxzLCB0aGlzIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSAm IzgyMTY7bGFuZGluZyBwYWdlJiM4MjE3OyB0aGV5IHdpbGwgYXBwZWFyIG9uLiBJdCBpcyB1 c3VhbGx5IG5vdCBzZXQsIHdoaWNoIG1lYW5zIGl0JiM4MjE3O2xsIHVzZSB0aGUgdmFsdWUg b2YgdGhlIDxjb2RlPkRlZmF1bHQgc2VjdGlvbiBmb3IgdGFnczwvY29kZT4gcHJlZmVyZW5j ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zb3J0PC9zcGFuPiA6IG9yZGVyIHRo ZSByZXN1bHRzIGJ5IHRoaXMgZmllbGQsIGUuZy4gPGNvZGU+c29ydD0mcXVvdDtuYW1lIGFz YyZxdW90OzwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2h1ZmZsZTwv c3Bhbj4gOiByYW5kb21seSBzb3J0IHRoZSB0YWdzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmxhYmVsPC9zcGFuPiA6IGxhYmVsIHRoZSB0b3Agb2YgdGhlIGxpc3Qgd2l0aCB0 aGlzIGhlYWRpbmc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWx0YWc8L3Nw YW4+IDogd3JhcCB0aGUgbGFiZWwgd2l0aCB0aGlzIChYKUhUTUwgdGFnIChlLmcuIDxjb2Rl PmxhYmVsdGFnPSZxdW90O2RpdiZxdW90OzwvY29kZT4pLiBEZWZhdWx0IGlzIGVtcHR5PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDogd3JhcCB0aGUg dGFnIGxpc3Qgd2l0aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0IGlzIDxjb2RlPnVsPC9j b2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwvc3Bhbj4gOiB3cmFw IGVhY2ggdGFnIHdpdGggdGhpcyAoWClIVE1MIHRhZy4gRGVmYXVsdCBpcyA8Y29kZT5saTwv Y29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDogYXBw bHkgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byB0aGUgdGFn IGxpc3QuIERlZmF1bHQgaXMgPGNvZGU+c21kX3RhZ19saXN0PC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5icmVha2NsYXNzPC9zcGFuPiA6IGFwcGx5IHRoaXMgPHNw YW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gZWFjaCB0YWcuIERlZmF1bHQg aXMgdW5zZXQ8L2xpPgoJPC91bD4KCgk8aDIgY2xhc3M9InRhZyI+c21kX3RhZ19uYW1lPC9o Mj4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkRpc3BsYXkgdGhlIG5hbWUgb2YgdGhlIGN1 cnJlbnQgdGFnLiBVc3VzYWxseSB1c2VkIGluc2lkZSBhbiBzbWRfdGFnX2xpc3QgY29udGFp bmVyLiBDYW4gYmUgYSBjb250YWluZXIgdG8gYWRkIGV4dHJhIGZvcm1hdHRpbmcgYXJvdW5k IHRoZSBuYW1lIGlmIHlvdSB3aXNoLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0 cmlidXRlcyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+dGl0bGU8L3NwYW4+IDogd2hldGhlciB0byBzaG93IHRoZSB0YWcgbmFtZSAoMCkgb3Ig aXRzIHRpdGxlICgxKS4gRGVmYXVsdDogMTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5saW5rPC9zcGFuPiA6IG1ha2VzIHRoZSBuYW1lIGNsaWNrYWJsZSB0byB0YWtlIHZpc2l0 b3JzIHRvIGEgdGFnIHBhZ2UgYWJvdXQgdGhhdCBwYXJ0aWN1bGFyIHRhZzwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uPC9zcGFuPiA6IHRoZSBzZWN0aW9uIG5hbWUg dG8gbGluayB0by4gRGVmYXVsdHMgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIDxjb2RlPlRy aWdnZXIocykgZm9yIHRhZyBsaXN0czwvY29kZT4gcHJlZmVyZW5jZTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5jbGVhbnVybHM8L3NwYW4+IDogZ2VuZXJhdGUgY2xlYW4gPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3ludGF4IGZvciB0cmlnZ2VyL3RhZ3R5cGUv dGFnIGxpbmtzLiBJZiB5b3UmIzgyMTc7cmUgaGF2aW5nIHRyb3VibGUgd2l0aCBjbGVhbiBt b2RlLCBzZXQgdGhpcyB0byAwIHRvIHRyaWdnZXIgbWVzc3kgdGFnIG1vZGU8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+cGFyZW50PC9zcGFuPiA6IG5vdCB2ZXJ5IHVzZWZ1bCB0 byBwcmludCwgYnV0IGNhbiBiZSB1c2VmdWwgdG8gb2ZmZXIgdHJlZS1icm93c2luZyBvZiB0 YWdzLiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPiBidXQgc2V0IHRvIDxjb2RlPjE8L2NvZGU+ IHRvIHR1cm4gdGhpcyBmZWF0dXJlIG9uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PnBhcmVudGxhYmVsPC9zcGFuPiA6IHRoZSBsYWJlbCB0byB1c2UgZm9yIGFueSBwYXJlbnQg bGlua3MuIERlZmF1bHQ6ICYjODIxNjtVcCBhIGxldmVsJiM4MjE3OzwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPiA6IHdyYXAgdGhlIHRhZyB3aXRoIHRo aXMgKFgpSFRNTCB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPmNsYXNzPC9zcGFuPiA6IGFwcGx5IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNT Uzwvc3Bhbj4gY2xhc3MgdG8gdGhlIHRhZy4gRGVmYXVsdCBpcyA8Y29kZT5zbWRfdGFnX25h bWU8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnN0eWxlPC9zcGFuPiA6 IGFwcGx5IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gaW5saW5lIHN0eWxl IGRlZmluaXRpb24gdG8gdGhlIHRhZy4gRGVmYXVsdDogZW1wdHk8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+cGFkX3N0cjwvc3Bhbj4gOiBwdXQgdGhpcyBzdHJpbmcgYWRqYWNl bnQgdG8gdGhlIGxhYmVsIHRvIGluZGljYXRlIGl0cyBsZXZlbCBpbiB0aGUgaGllcmFyY2h5 LiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wYWRfcG9z PC9zcGFuPiA6IHdoZXJlIHRvIHB1dCB0aGUgcGFkZGluZyAoPGNvZGU+bGVmdDwvY29kZT4s IDxjb2RlPnJpZ2h0PC9jb2RlPiBvciA8Y29kZT5ib3RoPC9jb2RlPikuIElmIHVzaW5nIDxj b2RlPmxpbms8L2NvZGU+IHlvdSBtYXkgYWRkIDxjb2RlPjppbjwvY29kZT4gdG8gdGhlIHBh ZF9wb3MgdmFsdWUgdG8gaW5kaWNhdGUgaWYgeW91IHdhbnQgdGhlIHN0cmluZyB0byBiZSBp bmNsdWRlZCBpbnNpZGUgdGhlIGFuY2hvciAoYnkgZGVmYXVsdCBpdCB3aWxsIGJlIG91dHNp ZGUpPC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJ0YWciPnNtZF90YWdfY291bnQ8L2gyPgoK CTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxheSB0aGUgbnVtYmVyIG9mIGFydGljbGVz LCBmaWxlcywgaW1hZ2VzIG9yIGxpbmtzIHRoYXQgdXNlIHRoZSBjdXJyZW50IHRhZy48L3A+ CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2gzPgoK CTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dlbXB0eTwvc3Bhbj4gOiBkZXRl cm1pbmVzIHdpdGhlciB0byBkaXNwbGF5IGNvdW50cyB0aGF0IGhhdmUgemVybyBpdGVtcy4g RGVmYXVsdCBpcyA8Y29kZT4xPC9jb2RlPjogc2hvdyBhbGwgdmFsdWVzLCB3aGV0aGVyIHpl cm8gb3Igbm90PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+ IDogd3JhcCB0aGUgY291bnQgd2l0aCB0aGlzIChYKUhUTUwgdGFnLiBEZWZhdWx0IGlzIHVu c2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IGFwcGx5 IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gdGhlIGNvdW50 LiBEZWZhdWx0IGlzIDxjb2RlPnNtZF90YWdfY291bnQ8L2NvZGU+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnN0eWxlPC9zcGFuPiA6IGFwcGx5IHRoaXMgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gaW5saW5lIHN0eWxlIGRlZmluaXRpb24gdG8gdGhlIGNvdW50 LiBEZWZhdWx0OiBlbXB0eTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwY291 bnQ8L3NwYW4+IDogY2hhcmFjdGVycyB0byB3cmFwIGFyb3VuZCB0aGUgY291bnQgaXRzZWxm LiBTcGVjaWZ5IHVwIHRvIHR3byBpdGVtcywgc2VwYXJhdGVkIGJ5IGEgY29sb24uIElmIHlv dSB1c2UganVzdCBvbmUgaXRlbSBpdCB3aWxsIGFwcGVhciBvbiBib3RoIHNpZGVzIG9mIHRo ZSBjb3VudC4gRGVmYXVsdCBpcyAmIzgyMTY7Jm5ic3A7KDopJiM4MjE3OyB3aXRoIGEgc3Bh Y2UgYXQgdGhlIHN0YXJ0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmFtZGVs aW08L3NwYW4+IDogaWYgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhlIGRlZmF1bHQgY29sb24g PGNvZGU+OjwvY29kZT4gYXMgYSBzZXBhcmF0b3IgZm9yIHRoZSA8Y29kZT53cmFwY291bnQ8 L2NvZGU+IGF0dHJpYnV0ZSwgY2hhbmdlIGl0PC9saT4KCTwvdWw+CgoJPGgzPkV4YW1wbGU6 IGRpc3BsYXkgdGFncy9jb3VudHMgZnJvbSB0aGUgY3VycmVudCBhcnRpY2xlPC9oMz4KCgk8 cD5IZXJlJiM4MjE3O3MgYW4gZXhhbXBsZSwgdXNpbmcgdGhlIGxhc3QgdGhyZWUgdGFncy4g SW4geW91ciBkZWZhdWx0IGFydGljbGUgZm9ybSwgYWRkIHRoaXMgdG8gc2hvdyBhIGxpc3Qg b2YgY2xpY2thYmxlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGFydGljbGU6 PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+RmlsZWQgaW46 ICZsdDt0eHA6c21kX3RhZ19saXN0IHdyYXB0YWc9JnF1b3Q7JnF1b3Q7IGJyZWFrPSZxdW90 OyB8ICZxdW90OwogICAgIHNodWZmbGU9JnF1b3Q7MSZxdW90OyBpbmRlbnQ9JnF1b3Q7JnF1 b3Q7Jmd0OwogICZsdDt0eHA6c21kX3RhZ19uYW1lIGxpbms9JnF1b3Q7MSZxdW90OyAvJmd0 OwogICZsdDt0eHA6c21kX3RhZ19jb3VudCB3cmFwY291bnQ9JnF1b3Q7LyZxdW90OyAvJmd0 OwombHQ7L3R4cDpzbWRfdGFnX2xpc3QmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGF0IG1p Z2h0IGRpc3BsYXk6PC9wPgoKPHByZT48Y29kZT5GaWxlZCBpbjogVUsgLzgvIHwgcG9saXRp Y3MgLzEvIHwgbWVkaWEgLzE0LyB8IG1vbmV5IC85LyB8IGJhbmtzIC8zLwo8L2NvZGU+PC9w cmU+CgoJPGgyIGNsYXNzPSJ0YWciPnNtZF90YWdfaW5mbzwvaDI+CgoJPHAgY2xhc3M9InRh Zy1zdW1tYXJ5Ij5Gb3IgYWxsIG90aGVyIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCBh IHRhZywgdXNlIHRoaXMuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVz Ij5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pdGVt PC9zcGFuPiA6IGxpc3Qgb2Ygb25lIG9yIG1vcmUgdGhpbmdzIHRvIGRpc3BsYXkuIENhbiBi ZSBhbnkgb2Y6Cgk8dWw+CgkJPGxpPjxjb2RlPmlkPC9jb2RlPjwvbGk+CgkJPGxpPjxjb2Rl Pm5hbWU8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+dGl0bGU8L2NvZGU+PC9saT4KCQk8bGk+ PGNvZGU+bGV0dGVybmFtZTwvY29kZT4gKGZpcnN0IHVuaWNvZGUgbGV0dGVyIG9mIHRoZSB0 YWcmIzgyMTc7cyBuYW1lKTwvbGk+CgkJPGxpPjxjb2RlPmxldHRlcnRpdGxlPC9jb2RlPiAo Zmlyc3QgdW5pY29kZSBsZXR0ZXIgb2YgdGhlIHRhZyYjODIxNztzIHRpdGxlKTwvbGk+CgkJ PGxpPjxjb2RlPnR5cGU8L2NvZGU+IChhcnRpY2xlLCBpbWFnZSwgZmlsZSwgbGluayk8L2xp PgoJCTxsaT48Y29kZT5wYXJlbnQ8L2NvZGU+ICh0aGUgcGFyZW50IHRhZyk8L2xpPgoJCTxs aT48Y29kZT5jaGlsZHJlbjwvY29kZT4gKG51bWJlciBvZiBjaGlsZCB0YWdzIHRoaXMgdGFn IGhhcyk8L2xpPgoJCTxsaT48Y29kZT5sZXZlbDwvY29kZT4gKGxldmVsIDAgPSAmIzgyMTY7 cm9vdCYjODIxNzspPC9saT4KCQk8bGk+PGNvZGU+Y291bnQ8L2NvZGU+IChudW1iZXIgb2Yg YXJ0aWNsZSBhc3NpZ25lZCB0byB0aGlzIHRhZyk8L2xpPgoJCTxsaT48Y29kZT53ZWlnaHQ8 L2NvZGU+ICgmIzgyMTY7c2l6ZSYjODIxNzsgb2YgdGhpcyB0YWcsIHdlaWdodGVkIGFzIGEg cGVyY2VudGFnZSBvZiBhbGwgdGFncyBiYXNlZCBvbiB0aGUgY291bnQ6IHVzZWZ1bCBpbnNp ZGUgPGNvZGU+c3R5bGU8L2NvZGU+IGF0dHJpYnV0ZSBvZiBzbWRfdGFnX25hbWUgZm9yIGNy ZWF0aW5nIHdlaWdodGVkIHRhZyBjbG91ZHMpPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3NwYW4+IDogd3JhcCB0aGUgdGFnIGl0ZW1zIHdp dGggdGhpcyAoWClIVE1MIHRhZy4gRGVmYXVsdCBpcyB1bnNldDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj4gOiBhcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJj YXBzIj5DU1M8L3NwYW4+IGNsYXNzIHRvIHRoZSB0YWcgaXRlbXMuIERlZmF1bHQgaXMgPGNv ZGU+c21kX3RhZ19pbmZvPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5i cmVhazwvc3Bhbj4gOiB3cmFwIGVhY2ggdGFnIGl0ZW0gd2l0aCB0aGlzIChYKUhUTUwgdGFn LiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5icmVha2NsYXNzPC9zcGFuPiA6IGFwcGx5IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gY2xhc3MgdG8gZWFjaCB0YWcgaXRlbS4gRGVmYXVsdCBpcyB1bnNldDwv bGk+Cgk8L3VsPgoKCTxoMz5FeGFtcGxlOiBleHRlbmRlZCB0YWcgaW5mb3JtYXRpb248L2gz PgoKCTxwPkluc2lkZSBhbiBzbWRfdGFnX2xpc3QsIHB1dCB0aGlzIHRvIGRpc3BsYXkgc29t ZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHRhZzo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+ PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF90YWdfaW5mbyBpdGVtPSZxdW90O2lk JnF1b3Q7IC8mZ3Q7OgogJmx0O3AmZ3Q7cGFyZW50IHwgI2NoaWxkcmVuIHwgbGV2ZWwmbHQ7 YnIgLyZndDsKICZsdDt0eHA6c21kX3RhZ19pbmZvIGl0ZW09JnF1b3Q7cGFyZW50LCBjaGls ZHJlbiwgbGV2ZWwmcXVvdDsKICAgICAgYnJlYWs9JnF1b3Q7IHwgJnF1b3Q7IC8mZ3Q7Jmx0 Oy9wJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgyIGNsYXNzPSJ0YWciPnNtZF9pZl90YWdfbGlz dDwvaDI+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5Db25kaXRpb25hbCB0YWcgdGhhdCBy ZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgc2NvcGUgaXMgYSBnbG9iYWwgdGFnIGxpc3Qu IFVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGlmIGEgdGFnIGhhcyBiZWVuIGNsaWNrZWQgYW5kIHJl ZGlyZWN0ZWQgdG8gYSBsYW5kaW5nIHBhZ2Ugc28geW91IGNhbiB0YWtlIHNvbWUgYWN0aW9u IG9uIHRoYXQgcGFnZS48L3A+CgoJPGgyIGNsYXNzPSJ0YWciPnNtZF9pZl90YWc8L2gyPgoK CTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+UnVkaW1lbnRhcnkgY29uZGl0aW9uYWwgdG8gY2hl Y2sgYSB0YWcgZm9yIGNlcnRhaW4gcGFyYW1ldGVycyBhbmQgZXhlY3V0ZSB0aGUgY29udGFp bmVkIGNvbnRlbnQgaWYgaXQgbWF0Y2hlcy4gRXZlcnkgYXR0cmlidXRlIHlvdSBzcGVjaWZ5 IG11c3QgbWF0Y2ggZm9yIHRoZSBjb25kaXRpb25hbCBjb250ZW50IHRvIGJlIGV4ZWN1dGVk LCBvdGhlcndpc2UgYW55IDxjb2RlPiZsdDt0eHA6ZWxzZSAvJmd0OzwvY29kZT4gYnJhbmNo IHdpbGwgYmUgZm9sbG93ZWQuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1 dGVzIj5BdHRyaWJ1dGVzPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50 eXBlPC9zcGFuPiA6IGV4ZWN1dGVzIHRoZSBjb250YWluZWQgc3RhdGVtZW50cyBpZiB0aGUg dHlwZSBtYXRjaGVzIHRoZSBvbmUgZ2l2ZW4uIFRha2VzIG9uZSBvZiA8Y29kZT5hcnRpY2xl PC9jb2RlPiwgPGNvZGU+aW1hZ2U8L2NvZGU+LCA8Y29kZT5saW5rPC9jb2RlPiBvciA8Y29k ZT5maWxlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4g OiBjaGVja3MgaWYgdGhlIHRhZyBJRCBtYXRjaGVzIHRoZSBvbmUgZ2l2ZW48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+bmFtZTwvc3Bhbj4gOiBjaGVja3MgaWYgdGhlIHRhZyBu YW1lIG1hdGNoZXMgdGhlIG9uZSBnaXZlbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij50aXRsZTwvc3Bhbj4gOiBjaGVja3MgaWYgdGhlIHRhZyB0aXRsZSBtYXRjaGVzIHRoZSBv bmUgZ2l2ZW48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cGFyZW50PC9zcGFuPiA6 IGNoZWNrcyBpZiB0aGUgdGFnIHBhcmVudCBtYXRjaGVzIHRoZSBvbmUgZ2l2ZW48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y291bnQ8L3NwYW4+IDogY2hlY2tzIGlmIHRoZSB0 YWcgY291bnQgbWF0Y2hlcyB0aGUgbnVtYmVyIGdpdmVuPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmNoaWxkcmVuPC9zcGFuPiA6IGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGNo aWxkcmVuIHRoZSB0YWcgaGFzIG1hdGNoZXMgdGhlIG51bWJlciBnaXZlbjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5sZXZlbDwvc3Bhbj4gOiBjaGVja3MgaWYgdGhlIHRhZyBp cyBhdCBhIHNwZWNpZmljIGxldmVsIGluIHRoZSBoaWVyYXJjaHk8L2xpPgoJPC91bD4KCgk8 cD5FYWNoIGl0ZW0gbWF5IHRha2UgYW4gZXhhY3QgdmFsdWUvc3RyaW5nIHRvIG1hdGNoIG9y IGEgbW9kaWZpZWQgc3ludGF4OiB5b3UgbWF5IHByZWNlZGUgdGhlIHZhbHVlIHdpdGggb25l IG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB0byBwZXJmb3JtIGEgbWF0aGVtYXRpY2FsL2Jv b2xlYW4gY29tcGFyaXNvbjo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT4mbHQ7PC9jb2RlPiA6 IGxlc3MgdGhhbjwvbGk+CgkJPGxpPjxjb2RlPiZsdDs9PC9jb2RlPiA6IGxlc3MgdGhhbiBv ciBlcXVhbCB0bzwvbGk+CgkJPGxpPjxjb2RlPiZndDs8L2NvZGU+IDogZ3JlYXRlciB0aGFu PC9saT4KCQk8bGk+PGNvZGU+Jmd0Oz08L2NvZGU+IDogZ3JlYXRlciB0aGFuIG9yIGVxdWFs IHRvPC9saT4KCQk8bGk+PGNvZGU+ITwvY29kZT4gOiBub3QgZXF1YWwgdG88L2xpPgoJPC91 bD4KCgk8cD5Gb3IgZXhhbXBsZTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl90YWcgcGFyZW50PSZxdW90OyFyb290JnF1b3Q7 IGNvdW50PSZxdW90OyZndDs4JnF1b3Q7Jmd0OwovLyBDdXJyZW50IHRhZyBpcyBub3QgYSB0 b3AtbGV2ZWwgdGFnIGFuZCBoYXMKLy8gbW9yZSB0aGFuIDggaXRlbXMgYXNzb2NpYXRlZCB3 aXRoIGl0CiZsdDsvdHhwOnNtZF9pZl90YWcmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Gb3Ig bW9yZSBmaW5lLWdyYWluZWQgY29udHJvbCBvciBtb3JlIGRldGFpbGVkIGNvbmRpdGlvbmFs IGJyYW5jaGluZywgY29uc2lkZXIgdGhlIHNtZF9pZiBwbHVnaW4uPC9wPgoKCTxoMiBjbGFz cz0idGFnIj5zbWRfcmVsYXRlZF90YWdzPC9oMj4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnki PlRoZSBiaWcgb25lISBUaGlzIHRhZyBhbGxvd3MgeW91IHRvIGZpbmQgYW5kIGRpc3BsYXkg YW55IGNvbnRlbnQgdGhhdCBtYXRjaGVzIHNvbWUgZmFjZXQgb2YgdGhlIGN1cnJlbnQgY29u dGVudC4gSXQgZGVmYXVsdHMgdG8gbWF0Y2hpbmcgdGFnIG5hbWVzLiBGb3IgZXhhbXBsZSwg aWYgdGhlIHRhZyBhcHBlYXJlZCBvbiBpdHMgb3duIG9uIGFuIGFydGljbGUgcGFnZSwgaXQg d291bGQgZmluZCBhbGwgJiM4MjE2O3JlbGF0ZWQmIzgyMTc7IGFydGljbGVzIHRoYXQgY29u dGFpbmVkIHRoZSBzYW1lIHRhZ3MgYXMgdGhlIG9uZXMgaW4gdGhlIGN1cnJlbnQgYXJ0aWNs ZS48L3A+CgoJPHA+QnV0IGl0IGlzIG5vdCByZXN0cmljdGVkIHRvIHNlYXJjaGluZyB3aXRo aW4gaXRzIG93biB0eXBlLiBZb3UgY291bGQgZmluZCBhbGwgdGhlIG1hdGNoaW5nIGltYWdl cyBvciBsaW5rcyB0aGF0IHNoYXJlZCBhIHRhZyB3aXRoIHRoZSBjdXJyZW50IGFydGljbGUu IE9yIGlmIHNob3dpbmcgYSBsaXN0IG9mIGxpbmtzLCBkaXNwbGF5IGFsbCBhcnRpY2xlcyB0 aGF0IHNoYXJlIHRhZ3Mgd2l0aCB0aGUgY3VycmVudCBsaW5rLjwvcD4KCgk8cD5GaW5hbGx5 LCB5b3UgY2FuIGFsc28gbWF0Y2ggb3RoZXIgc3R1ZmYgc3VjaCBhcyBpbWFnZSwgZmlsZSwg bGluayBvciBhcnRpY2xlIGNhdGVnb3JpZXMsIGN1c3RvbSBmaWVsZHMsIGFuZCBzbyBvbi48 L3A+CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdGhlIHR5 cGUgb2YgaW5mb3JtYXRpb24geW91IHdhbnQgdG8gPGVtPmZpbmQ8L2VtPi4gRGVmYXVsdHMg dG8gdGhlIHNhbWUgdHlwZSBhcyB0aGUgY3VycmVudCBjb250ZXh0IChpLmUuIGlmIGluIGFu IGFydGljbGUsIHdpbGwgbG9vayBmb3Igb3RoZXIgYXJ0aWNsZXMpLiBDYW4gYmUgb25lIG9m IDxjb2RlPmFydGljbGU8L2NvZGU+LCA8Y29kZT5maWxlPC9jb2RlPiwgPGNvZGU+bGluazwv Y29kZT4sIG9yIDxjb2RlPmltYWdlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5tYXRjaDwvc3Bhbj4gOiB0aGUgaW5mb3JtYXRpb24geW91IHdhbnQgdG8gPGVtPmNv bXBhcmU8L2VtPi4gRGVmYXVsdHMgdG8gPGNvZGU+dGFnX25hbWU8L2NvZGU+IGJ1dCBjYW4g YmU6Cgk8dWw+CgkJPGxpPnRhZ19pZDwvbGk+CgkJPGxpPnRhZ190aXRsZTwvbGk+CgkJPGxp PnRhZ19wYXJlbnQ8L2xpPgoJCTxsaT50YWdfY291bnQ8L2xpPgoJCTxsaT50YWdfY2hpbGRy ZW48L2xpPgoJCTxsaT50YWdfbGV2ZWw8L2xpPgoJCTxsaT5zb21lIGZpZWxkIG5hbWUgc3Vj aCBhcyA8Y29kZT5jYXRlZ29yeTwvY29kZT4gb3IgPGNvZGU+Y3VzdG9tMTwvY29kZT48L2xp PgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bWF0Y2hfc2VsZjwvc3Bh bj4gOiB3aGV0aGVyIHRvIGluY2x1ZGUgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgaXRl bS4gVXN1YWxseSB5b3Ugd29uJiM4MjE3O3Qgd2FudCB0aGlzIHNvIGl0IGlzIG9mZiAoPGNv ZGU+MDwvY29kZT4pIGFuZCBpbiBmYWN0LCBzZXR0aW5nIGl0IHRvIDEgY2FuIHNvbWV0aW1l cyBjYXVzZSBlcnJvcnM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybTwvc3Bh bj4gOiBwYXNzIGNvbnRyb2wgdG8gdGhlIGdpdmVuIGZvcm0gZm9yIHJlbmRlcmluZyB0aGUg dGFnIG91dHB1dC4gQ2FuIGFsc28gYmUgdXNlZCBhcyBhIGNvbnRhaW5lci4gSWYgeW91IGRv biYjODIxNzt0IHNwZWNpZnkgZWl0aGVyIGEgPGNvZGU+Zm9ybTwvY29kZT4gb3IgYSBjb250 YWluZXIsIGl0IG91dHB1dHMgc29tZSBzZW5zaWJsZSBkZWZhdWx0IGJhc2VkIG9uIHRoZSBj dXJyZW50IGNvbnRleHQgKGkuZS4gdGhlIHBlcm1saW5rZWQgYXJ0aWNsZSB0aXRsZSBpbiB0 aGUgPGNvZGU+YXJ0aWNsZTwvY29kZT4gY29udGV4dCwgdGhlIGZpbGUgZG93bmxvYWQgbGlu ayBpbiB0aGUgPGNvZGU+ZmlsZTwvY29kZT4gY29udGV4dCwgZXRjKTwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uPC9zcGFuPiA6IG9ubHkgb2YgdXNlIGZvciBhcnRp Y2xlcywgdGhpcyBsaW1pdHMgdGhlIHNlYXJjaCB0byBhcnRpY2xlcyBpbiBhIHBhcnRpY3Vs YXIgc2VjdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgc2VjdGlvbiBidXQgY2hlY2sg dGhlIGNhdmVhdHMgYmVsb3cgZm9yIGEgc2lkZS1lZmZlY3Qgb2YgdGhpcyBhdHRyaWJ1dGU8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+b2Zmc2V0PC9zcGFuPiA6IHNraXAgdGhp cyBudW1iZXIgb2YgbWF0Y2hlZCBpdGVtcyBiZWZvcmUgc3RhcnRpbmcgdG8gZGlzcGxheSB0 aGVtPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9zcGFuPiA6IHRoZSBt YXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBkaXNwbGF5LiBEZWZhdWx0cyB0byA5OTk5OSAo aS5lLiB2aXJ0dWFsbHkgdW5saW1pdGVkKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5ub193aWRvdzwvc3Bhbj4gOiBXaGVuIGRpc3BsYXlpbmcgYXJ0aWNsZSB0aXRsZXMsIHBy ZXZlbnQgbG9uZSB3b3JkcyBvbiB0aGUgMm5kIGxpbmUuIERlZmF1bHRzIHRvIHRoZSBBZG1p biBwcmVmZXJlbmNlIG9mIHRoZSBzYW1lIG5hbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+c29ydDwvc3Bhbj4gOiBSZW9yZGVyIHRoZSBpdGVtcyBieSBzb21lIGZpZWxkLiBE ZWZhdWx0cyB0byA8Y29kZT5Qb3N0ZWQgZGVzYzwvY29kZT4gZm9yIGFydGljbGVzIGFuZCBk ZXNjZW5kaW5nIGRhdGUgZm9yIGV2ZXJ5dGhpbmcgZWxzZTwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5sYWJlbDwvc3Bhbj4gOiBkaXNwbGF5IHRoaXMgbGFiZWwgYXQgdGhlIHRv cCBvZiB0aGUgbGlzdCBvZiBpdGVtczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5s YWJlbHRhZzwvc3Bhbj4gOiB3cmFwIHRoaXMgKFgpSFRNTCB0YWcgYXJvdW5kIHRoZSBsYWJl bC4gRGVmYXVsdCBpcyB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFw dGFnPC9zcGFuPiA6IHdyYXAgdGhpcyAoWClIVE1MIHRhZyBhcm91bmQgdGhlIGl0ZW1zLiBE ZWZhdWx0IGlzIHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrPC9z cGFuPiA6IHdyYXAgZWFjaCBpdGVtIHdpdGggdGhpcyAoWClIVE1MIHRhZy4gRGVmYXVsdCBp cyA8Y29kZT5icjwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8 L3NwYW4+IDogYXBwbHkgdGhlIGdpdmVuIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+ IGNsYXNzIHRvIHRoZSBpdGVtIGxpc3QuIERlZmF1bHQgaXMgPGNvZGU+c21kX3JlbGF0ZWRf dGFnczwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZGVsaW08L3NwYW4+ IDogaWYgeW91IHByZWZlciBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBjb21t YSA8Y29kZT4sPC9jb2RlPiB0byBzcGVjaWZ5IGxpc3RzIG9mIGl0ZW1zIGluIHRoZSB0YWcg YXR0cmlidXRlcywgY2hhbmdlIGl0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBh cmFtZGVsaW08L3NwYW4+IDogaWYgeW91IHByZWZlciBzb21ldGhpbmcgb3RoZXIgdGhhbiB0 aGUgZGVmYXVsdCBjb2xvbiA8Y29kZT46PC9jb2RlPiB0byBzZXBhcmF0ZSBwYXJhbWV0ZXJz IGluc2lkZSBhdHRyaWJ1dGVzLCBjaGFuZ2UgaXQ8L2xpPgoJPC91bD4KCgk8cD5XaGVuIHNw ZWNpZnlpbmcgaXRlbXMgdG8gPGNvZGU+bWF0Y2g8L2NvZGU+IHlvdSBhcmUgbm90IHJlc3Ry aWN0ZWQgdG8gc2VhcmNoaW5nIHRoZSBjdXJyZW50IGNvbnRleHQuIEZvciBleGFtcGxlLCBz YXkgeW91IGhhZCBhIGxpc3Qgb2YgZmlsZSBkb3dubG9hZHMgYW5kIG5leHQgdG8gZWFjaCBm aWxlIHlvdSB3YW50ZWQgdG8gc2hvdyB0aGUgYXJ0aWNsZXMgdGhhdCBtYXRjaGVkIHRoZSBm aWxlJiM4MjE3O3MgY2F0ZWdvcnkuIFlvdSBtaWdodCBkbyB0aGlzIGluIHlvdXIgPGNvZGU+ ZmlsZXM8L2NvZGU+IGZvcm06PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX2xpbmsmZ3Q7CiAgJmx0O3R4cDpmaWxl X2Rvd25sb2FkX25hbWUgLyZndDsKJmx0Oy90eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0Owom bHQ7dHhwOnNtZF9yZWxhdGVkX3RhZ3MgdHlwZT0mcXVvdDthcnRpY2xlJnF1b3Q7CiAgICAg bGFiZWw9JnF1b3Q7WW91IG1pZ2h0IGFsc28gbGlrZSZxdW90OyBsYWJlbHRhZz0mcXVvdDtw JnF1b3Q7CiAgICAgbWF0Y2g9JnF1b3Q7ZmlsZTpjYXRlZ29yeSZxdW90OyB3cmFwdGFnPSZx dW90O3VsJnF1b3Q7CiAgICAgYnJlYWs9JnF1b3Q7bGkmcXVvdDsgLyZndDsKPC9jb2RlPjwv cHJlPgoKCTxoMz5DYXZlYXQ8L2gzPgoKCTxwPkJlIGNhcmVmdWwgd2l0aCB0aGUgPGNvZGU+ c2VjdGlvbjwvY29kZT4gYXR0cmlidXRlOiBvbiBhIGdsb2JhbCB0YWcgbGlzdCwgPGVtPmFs bDwvZW0+IGl0ZW1zIG9mIGEgZ2l2ZW4gdHlwZSBhcmUgY29uc2lkZXJlZCBpcnJlc3BlY3Rp dmUgb2Ygc2VjdGlvbi4gVGh1cyBpZiB5b3UgZGlkOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2Nr Ij48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX3RhZ19saXN0Jmd0OwogICZs dDtoMiZndDtUYWdzIGxpc3QmbHQ7L2gyJmd0OwogICZsdDt0eHA6c21kX3RhZ19saXN0Jmd0 OwogICAgJmx0O3R4cDpzbWRfdGFnX25hbWUgdGl0bGU9JnF1b3Q7MSZxdW90OyBsaW5rPSZx dW90OzEmcXVvdDsgLyZndDsKICAgICZsdDt0eHA6c21kX3RhZ19jb3VudCAvJmd0OwogICAg Jmx0O3R4cDpzbWRfcmVsYXRlZF90YWdzIHNlY3Rpb249JnF1b3Q7YXJjaGl2ZSZxdW90OyB3 cmFwdGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7IC8mZ3Q7CiAgJmx0 Oy90eHA6c21kX3RhZ19saXN0Jmd0OwombHQ7L3R4cDpzbWRfaWZfdGFnX2xpc3QmZ3Q7Cjwv Y29kZT48L3ByZT4KCgk8cD5Zb3UgbWlnaHQgc2VlIGEgdGFnIG5hbWUgd2l0aCBhIGNvdW50 IG9mIDEyIGJ1dCBvbmx5IDcgYXJ0aWNsZXMgbGlzdGVkIHVuZGVyIGl0LCBpZiBmaXZlIG9m IHlvdXIgYXJ0aWNsZXMgdGhhdCB1c2VkIHRoYXQgcGFydGljdWxhciB0YWcgd2VyZSBmcm9t IGFub3RoZXIgc2VjdGlvbi4gVG8gYmUgc3VyZSwgb25seSB1c2UgdGhlIDxjb2RlPnNlY3Rp b248L2NvZGU+IGF0dHJpYnV0ZSBvbiBpbmRpdmlkdWFsIGFydGljbGUgcGFnZXMuPC9wPgoK CTxoMiBpZD0iZXhhbXBsZXMiPkZ1cnRoZXIgZXhhbXBsZXM8L2gyPgoKCTxoMyBpZD0iZWcx Ij5FeGFtcGxlIDE6IGxpbmtlZCB0YWcgdHJlZTwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+ PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF90YWdfbGlzdCBzaG93YWxsPSZxdW90 OzEmcXVvdDsgcGFyZW50PSZxdW90O3RyYW5zbGF0aW9ucyZxdW90OyZndDsKICAgJmx0O3R4 cDpzbWRfdGFnX2luZm8gaXRlbT0mcXVvdDtpbmRlbnQmcXVvdDsgLyZndDsKICAgJmx0O3R4 cDpzbWRfaWZfdGFnIGNoaWxkcmVuPSZxdW90OyZndDswJnF1b3Q7Jmd0OwogICAgICAmbHQ7 dHhwOmhpZGUmZ3Q7IEEgcGFyZW50IHRhZzogZG8gbm90IGxpbmsgJmx0Oy90eHA6aGlkZSZn dDsKICAgICAgJmx0O3R4cDpzbWRfdGFnX25hbWUgdGl0bGU9JnF1b3Q7MSZxdW90OyAvJmd0 OwogICAmbHQ7dHhwOmVsc2UgLyZndDsKICAgICAgJmx0O3R4cDpoaWRlJmd0OyBBIGNoaWxk IHRhZzogbGluayBpdCB0byB0aGUgZGVmYXVsdCB0cmlnZ2VyIHNlY3Rpb24gJmx0Oy90eHA6 aGlkZSZndDsKICAgICAgJmx0O3R4cDpzbWRfdGFnX25hbWUgbGluaz0mcXVvdDsxJnF1b3Q7 IHRpdGxlPSZxdW90OzEmcXVvdDsgLyZndDsKICAgJmx0Oy90eHA6c21kX2lmX3RhZyZndDsK ICAgWyZsdDt0eHA6c21kX3RhZ19pbmZvIGl0ZW09JnF1b3Q7Y291bnQmcXVvdDsgLyZndDtd CiZsdDsvdHhwOnNtZF90YWdfbGlzdCZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWcy Ij5FeGFtcGxlIDI6IGZvbnQtd2VpZ2h0ZWQgdGFnIGNsb3VkPC9oMz4KCjxwcmUgY2xhc3M9 ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3RhZ19saXN0IHBhcmVu dD0mcXVvdDthbmltYWxzJnF1b3Q7IGZsYXZvdXI9JnF1b3Q7Y2xvdWQ6NzU6MzAwJnF1b3Q7 CiAgICAgIHdyYXB0YWc9JnF1b3Q7ZGl2JnF1b3Q7IGJyZWFrPSZxdW90OyZxdW90OyZndDsK ICAgJmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O2ZvbnR3ZWlnaHQmcXVvdDsmZ3Q7CiAg ICAgIGZvbnQtc2l6ZTombHQ7dHhwOnNtZF90YWdfaW5mbyBpdGVtPSZxdW90O3dlaWdodCZx dW90OyAvJmd0OyU7CiAgICZsdDsvdHhwOnZhcmlhYmxlJmd0OwogICAmbHQ7dHhwOnNtZF90 YWdfaW5mbyBpdGVtPSZxdW90O2luZGVudCZxdW90OyAvJmd0OwogICAmbHQ7dHhwOnNtZF90 YWdfbmFtZSBsaW5rPSZxdW90OzEmcXVvdDsgdGl0bGU9JnF1b3Q7MSZxdW90OyB3cmFwdGFn PSZxdW90O3NwYW4mcXVvdDsKICAgICAgICAgICBzdHlsZT0mIzM5OyZsdDt0eHA6dmFyaWFi bGUgbmFtZT0mcXVvdDtmb250d2VpZ2h0JnF1b3Q7IC8mZ3Q7JiMzOTsgLyZndDsKICAgKCZs dDt0eHA6c21kX3RhZ19pbmZvIGl0ZW09JnF1b3Q7Y291bnQmcXVvdDsgLyZndDspCiZsdDsv dHhwOnNtZF90YWdfbGlzdCZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWczIj5FeGFt cGxlIDM6IHdlaWdodGVkIGFscGhhYmV0aWMgdGFnIGxpc3Rpbmc8L2gzPgoKPHByZSBjbGFz cz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfdGFnX2xpc3Qgc2hv d2FsbD0mcXVvdDsxJnF1b3Q7IHNvcnQ9JnF1b3Q7bmFtZSBhc2MmcXVvdDsKICAgICBicmVh az0mcXVvdDsmcXVvdDsgd3JhcHRhZz0mcXVvdDtkaXYmcXVvdDsgZmxhdm91cj0mcXVvdDtj bG91ZCZxdW90OyZndDsKICAgJmx0O3R4cDppZl9kaWZmZXJlbnQmZ3Q7CiAgICAgICZsdDto MiBjbGFzcz0mcXVvdDthbHBoYWNoYXImcXVvdDsmZ3Q7Jmx0O3R4cDpzbWRfdGFnX2luZm8g aXRlbT0mcXVvdDtsZXR0ZXJuYW1lJnF1b3Q7IC8mZ3Q7Jmx0Oy9oMiZndDsKICAgJmx0Oy90 eHA6aWZfZGlmZmVyZW50Jmd0OwogICAmbHQ7c3BhbiBjbGFzcz0mcXVvdDthdGFnJnF1b3Q7 Jmd0OwogICAgICAmbHQ7dHhwOnNtZF90YWdfbmFtZSBsaW5rPSZxdW90OzEmcXVvdDsgd3Jh cHRhZz0mcXVvdDtzcGFuJnF1b3Q7CiAgICAgICAgICAgc3R5bGU9JiMzOTtmb250LXNpemU6 Jmx0O3R4cDpzbWRfdGFnX2luZm8gaXRlbT0mcXVvdDt3ZWlnaHQmcXVvdDsgLyZndDslOyYj Mzk7IC8mZ3Q7CiAgICAgICZsdDt0eHA6c21kX3RhZ19jb3VudCAvJmd0OwogICAmbHQ7L3Nw YW4mZ3Q7CiZsdDsvdHhwOnNtZF90YWdfbGlzdCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkp1 c3QgdGFrZSBvdXQgdGhlIDxjb2RlPmZsYXZvdXI8L2NvZGU+IGFuZCA8Y29kZT5zdHlsZTwv Y29kZT4gYXR0cmlidXRlcyB0byByZW5kZXIgYSByZWd1bGFyIGFscGhhYmV0aWMgdGFnIGxp c3RpbmcuIE5vdGUgdGhhdCB5b3UgY291bGQgdXNlIDxjb2RlPmxldHRlcnRpdGxlPC9jb2Rl PiBidXQgeW91IHdvdWxkIGdldCBib3RoIGxvd2VyLSBhbmQgdXBwZXItY2FzZSAmIzgyMTY7 ZCYjODIxNzsgc2VjdGlvbnMgaWYgeW91IGhhZCB0YWdzICYjODIxNjtEYXN0YXJkbHkmIzgy MTc7IGFuZCAmIzgyMTY7ZGV2aWFudCYjODIxNzsuPC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9n Ij5DaGFuZ2Vsb2c8L2gyPgoKCTxwPkJldGE6PC9wPgoKCTx1bD4KCQk8bGk+MTUgT2N0IDA4 IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MTYgT2N0IDA4IHwgMC4xMSB8 IEltcHJvdmVkIGhlbHAgZXhhbXBsZXMgc3Vycm91bmRpbmcgdGhlIGF1dG9jb21wbGV0ZSBw bHVnaW4gKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBmaXhlZCByZW1vdmVfdGFibGVzLCB1c2Ug b2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBGWDwvc3Bhbj4gYW5kIGFkZGVkIGRlYnVnIHRvIGlu c3RhbGxhdGlvbiBwcm9jZWR1cmUgKHRoYW5rcyBqcGR1cG9udCk8L2xpPgoJCTxsaT4xNiBB cHIgMDkgfCAwLjIgfCBhZGRlZCBUZXh0IGFyZWErIDsgc2VsZWN0IGxpc3Qgc2l6ZSBvZiAx IGNvbnZlcnRzIHRhZyBpbnB1dCB0byBhIHNpbmdsZS1lbnRyeSBkcm9wZG93biAodGhhbmtz IHRoZWJvbWJzaXRlKSA7IGZpeGVkIHdpZHRoIG9mIHRhZyBsaXN0IGluIGxpbmsgcGFuZSA7 IGZpeGVkIHBvdGVudGlhbCBjb250ZXh0IGFycmF5IHdhcm5pbmcgOyBub24tbWVzc3kgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcmV3cml0aW5nIGZpeGVkIDsgYmVnYW4gd29y ayBvbiBtdWx0aS1maWx0ZXJpbmcgOyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0 LjAuNysgZGF0YWJhc2Ugd2FybmluZ3MgZml4ZWQgOyBub24tbWVzc3kgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gcmV3cml0aW5nIGZpeGVkIDsgYWRkZWQgc21kX3JlbGF0ZWRf dGFncyA8Y29kZT5zdGF0dXM8L2NvZGU+IGF0dHJpYnV0ZSAodGhhbmtzIGpvaG5zdGVwaGVu cykgOyBzbWRfaWZfdGFnOiBub3cgY29ycmVjdGx5IHdvcmtzIG91dHNpZGUgc21kX3RhZ19s aXN0IGNvbnRleHQgKHRoYW5rcyBkYW53b29kd2FyZCk8L2xpPgoJCTxsaT4yMyBNYXIgMTAg fCAwLjMgfCBSZXF1aXJlcyA0LjIuMCsgOyBjb25zb2xpZGF0ZWQgYWRtaW4gYW5kIGNsaWVu dCBwbHVnaW5zIDsgYWRkZWQgcGx1Z2luIGxpZmVjeWNsZSBhbmQgcHJlZnMgZXZlbnRzIDsg Zml4ZWQgdGV4dGFyZWEvdGV4dGFyZWErIGpRdWVyeSAmIzgyMTY7QCYjODIxNzsgYnVnIGFu ZCBub24tc2F2ZXMgKHRoYW5rcyBaYW56YSkgOyBmaXhlZCBtaWRkb3QgPHNwYW4gY2xhc3M9 ImNhcHMiPkhUTUw8L3NwYW4+IGVudGl0eSA7IGFkZGVkIHRhYmxlIHByZWZpeCB0byBzbWRf cmVsYXRlZF90YWdzICh0aGFua3MgTWF0dEQpPC9saT4KCQk8bGk+MTMgQXByIDEwIHwgMC4z MSB8IEZpeGVkIGFkbWluIHNpZGUgYnVncyB3aGVuIHByaXZzIGxlc3MgdGhhbiBNYW5hZ2lu ZyBFZGl0b3IgOyBmaXhlZCBzbG93IHJlc3BvbnNlIHdoZW4gc2F2aW5nIHRhZ3MgOyBmaXhl ZCB0YWcgY2F0ZWdvcnkgbGlzdCB3aGVuIG5vIGNhdChzKSBzZWxlY3RlZCA7IHdhcm5pbmcg bWVzc2FnZXMgbm93IGJsaW5rIDsgdGlkaWVkIFRhZyBNYW5hZ2VyIGxheW91dCA7IGZpeGVk IHBhcmVudCAvIHN1YmxldmVsIGhhbmRsaW5nIGluIHNtZF90YWdfbGlzdCBhbmQgYWxsb3dl ZCBncmVhdGVyIGNvbnRyb2wgb3ZlciBsZXZlbCBvdXRwdXQgKHRoYW5rcyB3b29mKSA7IGFk ZGVkIDxjb2RlPnBhZF9zdHI8L2NvZGU+IGFuZCA8Y29kZT5wYWRfcG9zPC9jb2RlPiB0byBz bWRfdGFnX25hbWUgOyBmaXhlZCBzbWRfaWZfdGFnIHNvIGl0IGNvbXBhcmVzIGVtcHR5IHN0 cmluZ3MgY29ycmVjdGx5ICh0aGFua3Mgam9obnN0ZXBoZW5zKTwvbGk+Cgk8L3VsPgoKCTxw Pk9mZmljaWFsOjwvcD4KCgk8dWw+CgkJPGxpPjA1IEZlYiAxMSB8IDAuNDAgfCBBZGRlZCBs aXZlIHNlYXJjaCBhbmQgbXVsdGktZWRpdCBmdW5jdGlvbnMgOyBpbXByb3ZlZCBwZXJmb3Jt YW5jZSA7IGFkZGVkIHRhZyBpbXBvcnQgZnJvbSB0cnVfdGFncyBhbmQgcnNzX3VubGltaXRl ZF9jYXRlZ29yaWVzIDsgZW5hYmxlZCBkZWxpbWl0ZWQgdGFnIGVudHJ5IDsgZml4ZWQgcm9n dWUgc2xhc2hlcyBpbiBjYXQgbGlzdHMgOyBmaXhlZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiBoYW5kbGVyIGFuZCBzbWRfdGFnX25hbWUgdG8gc3VwcG9ydCBwZXItc2VjdGlv biB0YWcgbGlzdHMsIGNsZWFuIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHN5bnRh eCwgYW5kIGVuYWJsZWQgbXVsdGlwbGUgdHJpZ2dlciB3b3JkcyAoYWxsIHRoYW5rcyBqYWtv YikgOyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1LjMgY29tcGF0aWJpbGl0eSBm aXggKHRoYW5rcyBiaXJkaG91c2UpIDsgZml4ZWQgd2FybmluZ3MgaW4gc21kX3JlbGF0ZWRf dGFncyA7IGZpeGVkIHRhZyBsaXN0IHdoZW4gbm8gbGlua2VkIGNhdHMgc2VsZWN0ZWQgYW5k IHdoZW4gY2F0ZWdvcnkgY2hhbmdlZCA7IGFkZGVkICYjODIxNjtsaXN0JiM4MjE3OyBhbmQg JiM4MjE2O2dyb3VwJiM4MjE3OyB0YWcgZGlzcGxheSBvcHRpb25zOyBhZGRlZCA8Y29kZT5z b3J0PC9jb2RlPiwgPGNvZGU+c2hvd2FsbDwvY29kZT4gYW5kIDxjb2RlPmZsYXZvdXI8L2Nv ZGU+IHRvIHNtZF90YWdfbGlzdCBmb3IgdHJlZSBhbmQgdGFnIGNsb3VkIHN1cHBvcnQ7IGFk ZGVkIDxjb2RlPmxldHRlcm5hbWU8L2NvZGU+LCA8Y29kZT5sZXR0ZXJ0aXRsZTwvY29kZT4g YW5kIDxjb2RlPndlaWdodDwvY29kZT4gaXRlbXMgdG8gc21kX3RhZ19pbmZvIGZvciBidWls ZGluZyBhbHBoYWJldGljIHRhZyBncm91cHMgYW5kIGNsb3VkcyA7IGNoYW5nZWQgdGFibGUg Y29sbGF0aW9uIHRvIHV0ZjhfZ2VuZXJhbF9jaSBhbmQgaW1wcm92ZWQgdW5pY29kZSBzdXBw b3J0IDsgZml4ZWQgYnVnIGluIHNtZF9pZl90YWcgKGFnYWluISkgd2hlbiB1c2luZyBub24t ZXEgdGVzdHMgOyBhZGRlZCA8Y29kZT5zdHlsZTwvY29kZT4gdG8gc21kX3RhZ19uYW1lIGFu ZCBzbWRfdGFnX2NvdW50IDs8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQ TFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsg bGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsg Zm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFj a2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5i bG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlz cGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3Nt ZF9oZWxwIGgxIHsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7 IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAx cHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNh bnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10 cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRf aGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNw YWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz ZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAu bWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21k X2hlbHAgdGFibGUgeyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJv dHRvbToxZW07IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNv bGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUt dHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3Nt ZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJl YWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENT UyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6ImQzMmM5ZGY3MjM5MDBlMzYwMjA0MGViYWZi Yzk4ZjQ1Ijt9