# Name: ied_plugin_composer v0.93 # Type: Admin side plugin # Create and publish plugins from the TXP admin side # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuOTMiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjUwOiJDcmVhdGUgYW5k IHB1Ymxpc2ggcGx1Z2lucyBmcm9tIHRoZSBUWFAgYWRtaW4gc2lkZSI7czo0OiJjb2RlIjtz OjU3NTM2OiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ2ll ZF9wbHVnaW5fY29tcG9zZXInLCcxLDInKTsNCglhZGRfcHJpdnMoJ3BsdWdpbl9wcmVmcy5p ZWRfcGx1Z2luX2NvbXBvc2VyJywnMSwyJyk7DQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25z JywgJ2llZF9wbHVnaW5fY29tcG9zZXInLCBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5f Y29tcG9zZXInKSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fY29tcG9zZXIn LCAnaWVkX3BsdWdpbl9jb21wb3NlcicpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdpZWRfcGx1 Z2luX3NldHVwJywgJ3BsdWdpbl9wcmVmcy5pZWRfcGx1Z2luX2NvbXBvc2VyJyk7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xl LmllZF9wbHVnaW5fY29tcG9zZXInKTsNCg0KCWdsb2JhbCAkaWVkX3BsdWdpbl9jb21wb3Nl ciwgJGllZF9wbHVnaW5fcHJlZnMsICRpZWRfcGx1Z2luX2dsb2JhbHMsICRwcmVmczsNCgkk aWVkX3BsdWdpbl9nbG9iYWxzID0gYXJyYXkoDQoJCSdjc3Nfc3RhcnQnID0+ICc8IS0tJywN CgkJJ2Nzc19lbmQnID0+ICctLT4nLA0KCQknZGxtX3N0YXJ0JyA9PiAnIycsDQoJCSdkbG1f ZW5kJyA9PiAnJywNCgkJJ3N0YXJ0JyA9PiAnIC0tLSBCRUdJTiBQTFVHSU4gU0VDVElPTiAt LS0nLA0KCQknZW5kJyA9PiAnIC0tLSBFTkQgUExVR0lOIFNFQ1RJT04gLS0tJywNCgkJJ3Np emVfaGVscCcgPT4gJzYzNTM1JywNCgkJJ3NpemVfY3NzJyA9PiAnMjAwMCcsDQoJCSdzaXpl X2NvZGUnID0+ICcxNjc3NzIxNScsDQoJKTsNCgkvLyBEb3VibGUgYXJyYXk6IDFzdCBpcyBh IGxpc3Qgb2YgY3VycmVudCBwcmVmcyBhbmQgdGhlaXIgZGVmYXVsdHMsDQoJLy8gMm5kIGlz IGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkgbmVlZCByZW1vdmluZyBpbiBmdXR1 cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1wdHkpDQoJJGllZF9wbHVnaW5fcHJlZnMgPSBhcnJh eSgNCgkJYXJyYXkoDQoJCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdub25lJywNCgkJCSdp ZWRfcGx1Z2luX2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLA0KCQkJJ2llZF9wbHVnaW5f ZWRpdG9yX3dpZHRoJyA9PiAnMTEwJywNCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yJyA9 PiAndGV4dGlsZScsDQoJCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiBodS4n anMnLkRTLA0KCQkJJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJyA9PiAnMCcsDQoJCQknaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGUnID0+ICd7bmFtZX1fdnt2ZXJzaW9ufS50eHQnLA0KCQkJ J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlYycgPT4gJ3tuYW1lfV92e3ZlcnNpb259X3ppcC50 eHQnLA0KCQkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCcgPT4gJ3tuYW1lfV92e3ZlcnNp b259LnBocCcsDQoJCQknaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnID0+ICRwcmVmc1sn dGVtcGRpciddLA0KCQkpLA0KCQlhcnJheSgNCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2Fu eV9tb3JlX3BsYWNlaG9sZGVyJyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIGllZF9wbHVnaW5fY29tcG9zZXIoJGV2ZW50LCAkc3RlcCkgew0KCWlmKCEk c3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ2llZF9wbHVnaW5fZGVsZXRl JywNCgkJCSdpZWRfcGx1Z2luX2VkaXQnLA0KCQkJJ2llZF9wbHVnaW5faGVscCcsDQoJCQkn aWVkX3BsdWdpbl9saXN0JywNCgkJCSdpZWRfcGx1Z2luX2luc3RhbGwnLA0KCQkJJ2llZF9w bHVnaW5fc2F2ZScsDQoJCQknaWVkX3BsdWdpbl9yZXN0b3JlJywNCgkJCSdpZWRfc3dpdGNo X3N0YXR1cycsDQoJCQknaWVkX3NldF9vcmRlcicsDQoJCQknaWVkX3BsdWdpbl9zZXR1cCcs DQoJCQknaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsJywNCgkJCSdpZWRfcGx1Z2luX3ByZWZz X3JlbW92ZScsDQoJCQknaWVkX3BsdWdpbl9wcmVmc191cGRhdGUnLA0KCQkJJ2llZF9wbHVn aW5fY3JlYXRlX25ldycsDQoJCQknaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUnLA0KCQkJJ2ll ZF9wbHVnaW5fc2F2ZV9hc19waHBfZmlsZScsDQoJCQknaWVkX3BsdWdpbl91cGxvYWQnLA0K CQkJJ2llZF9wbHVnaW5faGVscF92aWV3ZXInLA0KCQkpKSkgew0KCQlpZWRfcGx1Z2luX2xp c3QoKTsNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9w bHVnaW5fd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRjaCAo JHN0ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCWllZF9wbHVnaW5fcHJlZnNfaW5z dGFsbCgwKTsNCgkJCSRtc2cgPSAnVGhhbmtzIGZvciBpbnN0YWxsaW5nIHRoZSBwbHVnaW4g Y29tcG9zZXIuIFBsZWFzZSByZWFkIHRoZSBkb2NzIDotKSc7DQoJCQlicmVhazsNCgkJY2Fz ZSAnZGVsZXRlZCc6DQoJCQlpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSgwKTsNCgkJCWJyZWFr Ow0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmV1cm5zIGFuIGFy cmF5IG9mIGZpbGVuYW1lczsgMXN0IGlzIHRoZSBzdGFuZGFyZCBwbHVnaW4sIDJuZCBpcyB0 aGUgY29tcHJlc3NlZCBwbHVnaW4sIDNyZCBpcyB0aGUgUEhQIHRlbXBsYXRlDQpmdW5jdGlv biBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbikgew0KCWdsb2JhbCAkaWVk X3BsdWdpbl9wcmVmcywgJHByZWZzOw0KDQoJJG91dCA9IGFycmF5KA0KCQkoKGlzc2V0KCRw cmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGUnXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9z ZmlsZSddIDogJGllZF9wbHVnaW5fcHJlZnNbMF1bJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxl J10pLA0KCQkoKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10pICYm ICFlbXB0eSgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyddKSkgPyAkcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyddIDogJGllZF9wbHVnaW5fcHJlZnNbMF1bJ2ll ZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyddKSwNCgkJKChpc3NldCgkcHJlZnNbJ2llZF9wbHVn aW5fb3V0cHV0X3NmaWxlcCddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1 dF9zZmlsZXAnXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSA6ICRp ZWRfcGx1Z2luX3ByZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSksDQoJKTsN Cg0KCSRyZXAgPSBhcnJheSgNCgkJIntuYW1lfSIgPT4gJG5hbWUsDQoJCSJ7dmVyc2lvbn0i ID0+ICR2ZXJzaW9uLA0KCSk7DQoNCglmb3JlYWNoICgkb3V0IGFzICRmaWR4ID0+ICRmbmFt ZSkgew0KCQkkZm5hbWUgPSBzdHJ0cigkZm5hbWUsICRyZXApOw0KCQkkb3V0WyRmaWR4XSA9 IHNhbml0aXplRm9yRmlsZSgkZm5hbWUpOw0KCX0NCg0KCXJldHVybiAkb3V0Ow0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsNCgln bG9iYWwgJHByZWZzOw0KDQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2Fn ZSk7DQoJZWNobyBzdGFydFRhYmxlKCdsaXN0JykuDQp0cih0ZGEoDQpmb3JtKA0KZklucHV0 KCd0ZXh0JywnbmFtZScsJycsJycsJycsJycsJzMwJywnMCcpDQouIGZJbnB1dCgnc3VibWl0 Jywnc3VibWl0JyxpZWRfcGx1Z2luX2dUeHQoJ2NyZWF0ZV9uZXcnKSwnc21hbGxlcmJveCcp DQouIHNJbnB1dCgnaWVkX3BsdWdpbl9jcmVhdGVfbmV3JykNCi4gZUlucHV0KCdpZWRfcGx1 Z2luX2NvbXBvc2VyJykNCikNCiwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWln aHQ6NTBweCInKQ0KLnRkYShmb3JtKGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGllZF9w bHVnaW5fZ1R4dCgnc2V0dXAnKSwgJ3B1Ymxpc2gnKS5zSW5wdXQoJ2llZF9wbHVnaW5fc2V0 dXAnKS5lSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKSksJyBjb2xzcGFuPSI2IiBzdHls ZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykpLg0KYXNzSGVhZCgncGx1Z2luJywnYXV0aG9y JyxnVHh0KCd2ZXJzaW9uJykuJyAoJy5nVHh0KCdwbHVnaW5fbW9kaWZpZWQnKS4nKScsJ2Rl c2NyaXB0aW9uJywncHVibGlzaCcsJ29yZGVyJywnYWN0aXZlJywnJyk7DQoNCgkkcnMgPSBz YWZlX3Jvd3Nfc3RhcnQoIioiLCJ0eHBfcGx1Z2luIiwgIjE9MSBvcmRlciBieSBuYW1lIik7 DQoNCgl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsNCgkJZXh0cmFjdCgkYSk7DQoJCSRl bmFtZSA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX2VkaXQmIzM4O25hbWU9Jy4kbmFtZS4nIj4nLiRuYW1lLic8L2E+JzsNCgkJ JGhsaW5rID0gKCRoZWxwKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3Nl ciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtuYW1lPScuJG5hbWUuJyI+ Jy5nVHh0KCdoZWxwJykuJzwvYT4nIDogJ05vbmUnOw0KCQkkb0xpbmsgPSBpZWRfcGx1Z2lu X29yZGVyX2Zvcm0oJG5hbWUsICRsb2FkX29yZGVyKTsNCgkJJGZuYW1lcyA9IGllZF9wbHVn aW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsNCgkJJHB1YnRhZyA9IHRhZyhnVHh0KCdw dWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0 ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0i JyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzBdLiAnIicpOw0K CQkkcHVienRhZyA9IHRhZyhpZWRfcGx1Z2luX2dUeHQoJ2NvbXByZXNzJyksJ2EnLCcgaHJl Zj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4nJiMzODt6aXA9dHJ1ZSIgdGl0bGU9IicgLiBp ZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZuYW1lc1sxXS4gJyInKTsNCgkJJG1v ZGlmaWVkID0gKHN0cnRvbG93ZXIoJGNvZGUpICE9IChzdHJ0b2xvd2VyKCRjb2RlX3Jlc3Rv cmUpKSk7DQoJCSRwbHVncHJlZiA9ICgoJGZsYWdzICYgUExVR0lOX0hBU19QUkVGUykgJiYg JHN0YXR1cykgPyAnICcudGFnKCAnWycuZ1R4dCgncGx1Z2luX3ByZWZzJykuJ10nICwgJ2En LCAnIGhyZWY9Ij9ldmVudD1wbHVnaW5fcHJlZnMuJy51cmxlbmNvZGUoJG5hbWUpLiciJykg OiAnJzsNCg0KCQllY2hvIHRyKHRkKCRlbmFtZS4kcGx1Z3ByZWYpDQoudGQoKCAoJGF1dGhv cl91cmkpID8gJzxhIGhyZWY9IicuJGF1dGhvcl91cmkuJyI+Jy4kYXV0aG9yLic8L2E+JyA6 ICRhdXRob3IpLDE2MCkNCi50ZCgoKCRtb2RpZmllZCkgPyAnPGEgaHJlZj0iaW5kZXgucGhw P2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9yZXN0b3Jl JiMzODtuYW1lPScuJG5hbWUuJyIgdGl0bGU9IicuaWVkX3BsdWdpbl9nVHh0KCdyZXN0b3Jl X2hlbHAnKS4nIiBvbmNsaWNrPSJyZXR1cm4gdmVyaWZ5KFwnJy5pZWRfcGx1Z2luX2dUeHQo J3Jlc3RvcmVfdmVyaWZ5JywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKS4nXCcpOyI+Jy4k dmVyc2lvbi4nPC9hPicgOiAkdmVyc2lvbikgLiAoKCRtb2RpZmllZCkgPyAnJm5ic3A7KCcu Z1R4dCgneWVzJykuJyknIDogJycpLDEwKQ0KLnRkKCRkZXNjcmlwdGlvbiwyNjApDQoudGQo JHB1YnRhZyAuJyB8ICcuICRwdWJ6dGFnIC4nIHwgJy4gJGhsaW5rKQ0KLnRkKCRvTGluaywg NDApDQoudGQoaWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMp KSwzMCkNCg0KLnRkKGRMaW5rKCdpZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9k ZWxldGUnLCduYW1lJywkbmFtZSksMzApDQopOw0KCQl1bnNldCgkbmFtZSwkcGFnZSwkZGVs ZXRlbGluayk7DQoJfQ0KDQoJaWYgKCFlbXB0eSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXIn XSkgJiYgZmlsZV9leGlzdHMoJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCSRm aWxlbmFtZXMgPSBhcnJheSgpOw0KCQkkZGlyID0gZGlyKCRwcmVmc1sncGx1Z2luX2NhY2hl X2RpciddKTsNCgkJd2hpbGUgKCRmaWxlID0gJGRpci0+cmVhZCgpKSB7DQoJCQlpZigkZmls ZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgew0KCQkJCSRmaWxlYWRkciA9ICRwcmVmc1sn cGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlOw0KCQkJCWlmICghaXNfZGlyKCRmaWxlYWRk cikpIHsNCgkJCQkJJGZpbGVuYW1lc1tdPSRmaWxlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkk ZGlyLT5jbG9zZSgpOw0KCQkoJGZpbGVuYW1lcyk/bmF0Y2FzZXNvcnQoJGZpbGVuYW1lcyk6 Jyc7DQoNCgkJJG91dCA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGZpbGVuYW1lcyBhcyAkZmls ZW5hbWUpIHsNCgkJCSRmaWxlZXh0PSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxlbmFt ZSkpOw0KCQkJaWYgKCRmaWxlZXh0PT0ncGhwJykgew0KCQkJCSRiYXNlbmFtZT1iYXNlbmFt ZSgkZmlsZW5hbWUpOw0KCQkJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJl ZnNbJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZW5hbWUpOw0KCQkJCSRobGluayA9ICgk cGx1Z2luWydoZWxwJ10pID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4O2ZpbGVuYW1lPScuJGZpbGVu YW1lLiciPicuZ1R4dCgnaGVscCcpLic8L2E+JyA6ICdOb25lJzsNCgkJCQkkZWZpbGUgPSAn PGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdp bl9lZGl0JiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLiRwbHVnaW5bJ25hbWUnXS4n PC9hPic7DQoJCQkJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJHBsdWdpblsnbmFt ZSddLCAkcGx1Z2luWyd2ZXJzaW9uJ10pOw0KCQkJCSRwbHVncHJlZiA9ICgoJHBsdWdpblsn ZmxhZ3MnXSAmIFBMVUdJTl9IQVNfUFJFRlMpKSA/ICcgJy50YWcoICdbJy5nVHh0KCdwbHVn aW5fcHJlZnMnKS4nXScgLCAnYScsICcgaHJlZj0iP2V2ZW50PXBsdWdpbl9wcmVmcy4nLnVy bGVuY29kZSgkcGx1Z2luWyduYW1lJ10pLiciJykgOiAnJzsNCg0KCQkJCSRvdXRbXSA9IHRy KA0KCQkJCXRkKA0KCQkJCXRhZygkZmlsZW5hbWUsJ2RpdicsJyBzdHlsZT0iY29sb3I6Z3Jh eTtib3JkZXI6MDtwYWRkaW5nOjFweCAycHggMnB4IDFweDsiJykNCgkJCQkuKGlzc2V0KCRw bHVnaW5bJ25hbWUnXSk/JGVmaWxlLiRwbHVncHJlZi4nPGJyIC8+JzonJykuJyAnDQoJCQkJ KQ0KCQkJCS50ZCgNCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhy ZWY9IicuJHBsdWdpblsnYXV0aG9yX3VyaSddLiciPic6JycgKSAuDQoJCQkJKCBpc3NldCgk cGx1Z2luWydhdXRob3InXSk/JHBsdWdpblsnYXV0aG9yJ106JyZuYnNwOycgKS4NCgkJCQko IGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzwvYT4nOicnICksIDE2MA0KCQkJCSkN CgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ3ZlcnNpb24nXSk/JHBsdWdpblsndmVyc2lvbidd OicmbmJzcDsnKSwxMCkNCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10p PyRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ106JyZuYnNwOycpLDI2MCkNCgkJCQkudGQoKGlzc2V0 KCRwbHVnaW5bJ25hbWUnXSk/DQoJCQkJdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVm PSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVf YXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyIgdGl0bGU9IicgLiBpZWRfcGx1 Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZuYW1lc1swXS4gJyInKQ0KCQkJCQkJLicgfCAn LnRhZyhpZWRfcGx1Z2luX2dUeHQoJ2NvbXByZXNzJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4 O2ZpbGVuYW1lPScuJGZpbGVuYW1lLicmIzM4O3ppcD10cnVlIiB0aXRsZT0iJyAuIGllZF9w bHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzFdLiAnIicpOg0KCQkJCXRhZygn Jm5ic3A7Jywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheSInKQ0KCQkJCSkuJyB8ICcuJGhs aW5rKQ0KCQkJCS50ZCgnJykNCgkJCQkudGQoJycpDQoJCQkJKTsNCgkJCX0NCgkJfQ0KCQlp ZiAoJG91dCkgew0KCQkJZWNobyB0cigNCgkJCQl0ZGEoDQoJCQkJdGFnKGllZF9wbHVnaW5f Z1R4dCgncnVuX2Zyb20nKS4nICcudGFnKCdwbHVnaW5fY2FjaGVfZGlyJywnYWNyb255bScs JyB0aXRsZT0iJy4kcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXS4nIiBzdHlsZT0iYm9yZGVy LWJvdHRvbToxcHggZGFzaGVkIGJsYWNrIicpLic6JywnaDEnKQ0KCQkJCSwnIGNvbHNwYW49 IjgiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykNCgkJ CSk7DQoJCQllY2hvIGFzc0hlYWQoJ3BsdWdpbicsJ2F1dGhvcicsJ3ZlcnNpb24nLCdkZXNj cmlwdGlvbicsJ3B1Ymxpc2gnLCcnLCcnKTsNCgkJCWVjaG8gam9pbihuLCAkb3V0KTsNCgkJ fQ0KCX0NCg0KCWVjaG8gdHIoDQp0ZGEoDQonPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zv cm0tZGF0YSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+Jy4NCnN0YXJ0VGFi bGUoJ2VkaXQnLCdsZWZ0JykuDQp0cih0ZGEoIGhJbnB1dCgnTUFYX0ZJTEVfU0laRScsMTAw MDAwMCkuDQpncmFmKGllZF9wbHVnaW5fZ1R4dCgndXBsb2FkX3BocCcpLic6ICcuDQpmSW5w dXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLg0KZklucHV0KCdzdWJtaXQnLCdzdWJt aXQnLGdUeHQoJ3VwbG9hZCcpLCdzbWFsbGVyYm94JykpLg0KZUlucHV0KCdpZWRfcGx1Z2lu X2NvbXBvc2VyJykuDQpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2FkJykgLCAnIHN0eWxlPSJi b3JkZXI6MHB4IHNvbGlkIGdyYXkiJyApLg0KdGRhKCB0YWcoaWVkX3BsdWdpbl9nVHh0KCdu YW1lJyksICdhY3JvbnltJywnIHRpdGxlPSInLmllZF9wbHVnaW5fZ1R4dCgnbmFtZV90b29s dGlwJykuJyIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjayInKS4nOiAn LiBmSW5wdXQoJ3RleHQnLCduYW1lJywneHh4X3h4eHh4eCcsJycsJycsJycsJzMwJywnMCcp ICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5O3ZlcnRpY2FsLWFsaWduOm1pZGRs ZTsiJyApKS4NCmVuZFRhYmxlKCkuDQonPC9mb3JtPicNCiwnIGNvbHNwYW49IjgiIHN0eWxl PSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykNCik7DQoJZWNobyBl bmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfc3RhdHVzX2xpbmso JHN0YXR1cywkbmFtZSwkbGlua3RleHQpIHsNCgkkb3V0ID0gJzxhIGhyZWY9ImluZGV4LnBo cD8nOw0KCSRvdXQgLj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVk X3N3aXRjaF9zdGF0dXMmIzM4O3N0YXR1cz0nLg0KCSRzdGF0dXMuJyYjMzg7bmFtZT0nLnVy bGVuY29kZSgkbmFtZSkuJyInOw0KCSRvdXQgLj0gJz4nLiRsaW5rdGV4dC4nPC9hPic7DQoJ cmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9zd2l0Y2hfc3Rh dHVzKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnc3RhdHVzJykp KSk7DQoJJGNoYW5nZSA9ICgkc3RhdHVzKSA/IDAgOiAxOw0KCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwgInN0YXR1cz0kY2hhbmdlIiwgIm5hbWU9JyRuYW1lJyIpOw0KCWllZF9wbHVn aW5fbGlzdChnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkp KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3NldF9vcmRlcigpIHsNCglleHRy YWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsICdsb2FkX29yZGVyJykpKSk7DQoJJG9y ZGVyID0gbWluKG1heCggaW50dmFsKCRsb2FkX29yZGVyKSwgMSksIDkpOw0KCXNhZmVfdXBk YXRlKCd0eHBfcGx1Z2luJywgImxvYWRfb3JkZXIgPSAkbG9hZF9vcmRlciIsICJuYW1lID0g JyRuYW1lJyIpOw0KCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVk X3BsdWdpbl9vcmRlcl9mb3JtKCRuYW1lLCAkbG9hZF9vcmRlcikgew0KCWZvciAoJGkgPSAx OyAkaSA8PSA5OyAkaSsrKSAkb3JkZXJzWyRpXSA9ICRpOw0KCXJldHVybiBmb3JtKA0KCQll SW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKS5uLg0KCQlzSW5wdXQoJ2llZF9zZXRfb3Jk ZXInKS5uLg0KCQloSW5wdXQoJ25hbWUnLCAkbmFtZSkubi4NCgkJc2VsZWN0SW5wdXQoJ2xv YWRfb3JkZXInLCAkb3JkZXJzLCAkbG9hZF9vcmRlciwgMCwgMSkNCgkJLCdkaXNwbGF5Omlu bGluZScNCgkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2RlbGV0 ZSgpIHsNCgkkbmFtZSA9IGRvU2xhc2gocHMoJ25hbWUnKSk7DQoJc2FmZV9kZWxldGUoInR4 cF9wbHVnaW4iLCJuYW1lPSckbmFtZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1 Z2luX2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZXN0b3JlKCkgew0KCSRuYW1lID0gZG9TbGFz aChncHMoJ25hbWUnKSk7DQoJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJjb2RlID0gY29k ZV9yZXN0b3JlIiwibmFtZT0nJG5hbWUnIik7DQoJaWVkX3BsdWdpbl9saXN0KGllZF9wbHVn aW5fZ1R4dCgncmVzdG9yZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlPScnLCRuZXdm aWxlPScnKSB7DQoJJHNpdGVfZGlyID0gaHU7DQoJJG5ld25hbWUgPSB0cmltKGdwcygnbmV3 bmFtZScpKTsNCgkkbmFtZSA9IGVtcHR5KCRuZXduYW1lKSA/IGdwcygnbmFtZScpIDogJG5l d25hbWU7DQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7DQoJZWNo byBpZWRfaW5zZXJ0X2VkaXRvcnMoKTsNCgkkdGhlRmlsZSA9ICgkbmV3ZmlsZSkgPyAkbmV3 ZmlsZSA6ICgoZ3BzKCdmaWxlbmFtZScpKSA/IGdwcygnZmlsZW5hbWUnKSA6ICRuYW1lKTsN CgllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCR0aGVGaWxlLCBncHMoJ2ZpbGVuYW1lJyk/ IDE6IDApOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXRfZm9y bSgkbmFtZT0nJywkZWRpdGZpbGU9MCkgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2lu X3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCWlmICghJGVkaXRmaWxlKSB7DQoJCSRy cyA9IHNhZmVfcm93KCJhdXRob3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGRlc2NyaXB0aW9u LCBjb2RlLCBoZWxwLCBzdGF0dXMsIHR5cGUsIGxvYWRfb3JkZXIsIGZsYWdzIiwgInR4cF9w bHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJhY3QoJHJzKTsNCgkJbGlzdCgkY3Nz LCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNT UyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0gZWxzZSB7DQoJ CSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9k aXInXS5EUy4kbmFtZSk7DQoJCSRmaWxlbmFtZSA9ICRuYW1lOw0KCQkkZmlsZWV4dCA9IGFy cmF5X3BvcCgkbmFtZT1leHBsb2RlICgnLicsJG5hbWUpKTsNCgkJJG5hbWUgPSBpbXBsb2Rl KCRuYW1lKTsNCgkJZXh0cmFjdCgkcGx1Z2luKTsNCgkJJHN0YXR1cyA9ICgkZmlsZWV4dD09 J3BocCcpPyAxOiAwOw0KCX0NCgkkZWR3aWR0aCA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVn aW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX2Vk aXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10gOiAk aWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXTsNCglsaXN0 ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NT IiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2Jh bHNbJ2Nzc19lbmQnXSk7DQoJJHBsdWdpblsnbmFtZSddID0gJG5hbWU7DQoJJHBsdWdpblsn YXV0aG9yJ10gPSAkYXV0aG9yOw0KCSRwbHVnaW5bJ2F1dGhvcl91cmknXSA9ICRhdXRob3Jf dXJpOw0KCSRwbHVnaW5bJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KCSRwbHVnaW5bJ2Rlc2Ny aXB0aW9uJ10gPSAkZGVzY3JpcHRpb247DQoJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdp bl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3MpOw0K CSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOw0K CSRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1Z2luWydmbGFncyddID0g JGZsYWdzOw0KCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsNCglm b3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0gPSAkaTsNCg0KCSRkaXN0 cmlidXRpb249Jzx0ZXh0YXJlYSBuYW1lPSJkaXN0cmlidXRpb24iIHJvd3M9IjEiIGNvbHM9 IicuJGVkd2lkdGguJyIgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+Jy5iYXNlNjRfZW5jb2Rl KHNlcmlhbGl6ZSgkcGx1Z2luKSkuJzwvdGV4dGFyZWE+JzsNCg0KCSRmbmFtZXMgPSBpZWRf cGx1Z2luX2dldF9uYW1lKCRwbHVnaW5bJ25hbWUnXSwgJHBsdWdpblsndmVyc2lvbiddKTsN CgkkbmFtZWRMaW5rID0gKGlzc2V0KCRmaWxlbmFtZSkpID8gJ2ZpbGVuYW1lPScuJGZpbGVu YW1lIDogJ25hbWU9Jy4kbmFtZTsNCg0KCSRzbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7 Jy4kbmFtZWRMaW5rLiciPicgLmllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZu YW1lc1swXS4gJzwvYT4nOw0KCSRzemlwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3Bs dWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7Jy4k bmFtZWRMaW5rLicmIzM4O3ppcD10cnVlIj4nIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQn KSAuJyAnLiAkZm5hbWVzWzFdLiAnIChjb21wcmVzc2VkKTwvYT4nOw0KCSRzcGhwbGluayA9 ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3NhdmVfYXNfcGhwX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC4gaWVkX3BsdWdp bl9nVHh0KCdzYXZlX2FzJykgLicgJy4gJGZuYW1lc1syXS4gJzwvYT4nOw0KCSR2aGVscGxp bmtmdWxsID0gKCRoZWxwKSA/ICdbIDxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4OycuJG5hbWVkTGluay4n Ij4nLnN0cm9uZyhnVHh0KCd2aWV3JykuJyAnLmdUeHQoJ2hlbHAnKSkuJzwvYT4gXScgOiAn JzsNCg0KCSRuZXduYW1lID0gZklucHV0KCd0ZXh0JywnbmV3bmFtZScsJG5hbWUsJ2VkaXQn LCcnLCcnLCRlZHdpZHRoIC0gKGludCkoJGVkd2lkdGgqMC4zKSwnMicpOw0KCSRhdXRob3Ig PSBmSW5wdXQoJ3RleHQnLCdhdXRob3InLCRhdXRob3IsJ2VkaXQnLCcnLCcnLCRlZHdpZHRo LCcyJyk7DQoJJGF1dGhvcl91cmkgPSBmSW5wdXQoJ3RleHQnLCdhdXRob3JfdXJpJywkYXV0 aG9yX3VyaSwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsNCgkkdmVyc2lvbiA9IGZJbnB1 dCgndGV4dCcsJ3ZlcnNpb24nLCR2ZXJzaW9uLCdlZGl0JywnJywnJywkZWR3aWR0aCAtIChp bnQpKCRlZHdpZHRoKjAuMyksJzInKSAuICcmIzE2MDsmIzE2MDsnLiAoKCRlZGl0ZmlsZSkg PyBjaGVja2JveCgncmVuYW1lX2ZpbGUnLCAnMScsIDAsICcnLCdyZW5hbWVfZmlsZScpIC4g JyA8bGFiZWwgZm9yPSJyZW5hbWVfZmlsZSI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9m aWxlJykuJzwvbGFiZWw+JyA6IGNoZWNrYm94KCdyZXN0b3JlX3BvaW50JywgJzEnLCAwLCAn JywncmVzdG9yZV9wb2ludCcpIC4gJyA8bGFiZWwgZm9yPSJyZXN0b3JlX3BvaW50Ij4nLmll ZF9wbHVnaW5fZ1R4dCgncmVzdG9yZV9wb2ludCcpLic8L2xhYmVsPicpOw0KCSRkZXNjcmlw dGlvbiA9ZklucHV0KCd0ZXh0JywnZGVzY3JpcHRpb24nLCRkZXNjcmlwdGlvbiwnZWRpdCcs JycsJycsJGVkd2lkdGgsJzInKTsNCgkkY29kZSA9ICc8dGV4dGFyZWEgbmFtZT0iY29kZSIg aWQ9InBsdWdpbl9lZGl0b3IiIHJvd3M9IjMwIiBjb2xzPSInLiRlZHdpZHRoLiciIGNsYXNz PSJjb2RlIGNvZGVwcmVzcyBwaHAiIG1heGxlbmd0aD0iJy4kaWVkX3BsdWdpbl9nbG9iYWxz WydzaXplX2NvZGUnXS4nIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGNvZGUpLic8L3RleHRhcmVh PjxkaXYgY2xhc3M9Imp1bXBUb0xpbmUiPicuaWVkX3BsdWdpbl9nVHh0KCdqdW1wX3RvX2xp bmUnKS4nIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaWVkX2p1bXBUb0xpbmUiIHNpemU9IjUi IG1heGxlbmd0aD0iNiIgLz48L2Rpdj48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+ JzsNCgkkaGVscCA9ICc8dGV4dGFyZWEgbmFtZT0iaGVscCIgcm93cz0iMzAiIGNvbHM9Iicu JGVkd2lkdGguJyIgY2xhc3M9Im1jZUVkaXRvciIgbWF4bGVuZ3RoPSInLiRpZWRfcGx1Z2lu X2dsb2JhbHNbJ3NpemVfaGVscCddLiciPicuaHRtbHNwZWNpYWxjaGFycygkaGVscCkuJzwv dGV4dGFyZWE+PGRpdiBjbGFzcz0iY2hhcnNSZW1haW4iPjwvZGl2Pic7DQoJJGNzcyA9ICc8 dGV4dGFyZWEgbmFtZT0iY3NzIiByb3dzPSIxNSIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFz cz0iY29kZSIgbWF4bGVuZ3RoPSInLiRpZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVfY3NzJ10u JyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjc3MpLic8L3RleHRhcmVhPjxkaXYgY2xhc3M9ImNo YXJzUmVtYWluIj48L2Rpdj4nOw0KCSRwbHVnc3RhdHVzID0gKCEkZWRpdGZpbGUpID8gJyYj MTYwOyYjMTYwOycuY2hlY2tib3goJ3N0YXR1cycsMSwkc3RhdHVzLCAnJywnc3RhdHVzJyku ICcgPGxhYmVsIGZvcj0ic3RhdHVzIj4nLmllZF9wbHVnaW5fZ1R4dCgnZW5hYmxlJykuJzwv bGFiZWw+JyA6ICcnOw0KCSRwbHVndHlwZSA9IHJhZGlvKCd0eXBlJywwLCgoJHR5cGU9PTAp PzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8wJykuIiAiDQoJCS4gcmFkaW8oJ3R5cGUn LDEsKCgkdHlwZT09MSk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCd0eXBlXzEnKS4iICINCgkJ LiByYWRpbygndHlwZScsMiwoKCR0eXBlPT0yKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5 cGVfMicpLiIgIg0KCQkuIHJhZGlvKCd0eXBlJywzLCgoJHR5cGU9PTMpPzE6MCkpLmllZF9w bHVnaW5fZ1R4dCgndHlwZV8zJyk7DQoJJHBsdWdvcmRlciA9IHNlbGVjdElucHV0KCdsb2Fk X29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDApOw0KCSRmbGFnbGlzdCA9IGNo ZWNrYm94KCdmbGFnc1tdJyxQTFVHSU5fSEFTX1BSRUZTLCgoJGZsYWdzICYgUExVR0lOX0hB U19QUkVGUyk/MTowKSkgLiAnPGxhYmVsPicuaWVkX3BsdWdpbl9nVHh0KCdmbGFnX2hhc19w cmVmcycpLic8L2xhYmVsPiZuYnNwOyZuYnNwOycNCgkJLmNoZWNrYm94KCdmbGFnc1tdJyxQ TFVHSU5fTElGRUNZQ0xFX05PVElGWSwoKCRmbGFncyAmIFBMVUdJTl9MSUZFQ1lDTEVfTk9U SUZZKT8xOjApKSAuICc8bGFiZWw+Jy5pZWRfcGx1Z2luX2dUeHQoJ2ZsYWdfbGlmZWN5Y2xl X25vdGlmeScpLic8L2xhYmVsPiZuYnNwOyZuYnNwOyc7DQovLwkJLmNoZWNrYm94KCdmbGFn c1tdJywweDAwMDQsKCgkZmxhZ3MgJiAweDAwMDQpPzE6MCkpIC4gJzxsYWJlbD5TdW1tYXQg ZWxzZTwvbGFiZWw+Jm5ic3A7Jm5ic3A7JzsNCg0KCSRzdWIgPSBmSW5wdXQoJ3N1Ym1pdCcs JycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJywnJywnJywnJywnJywgJ2llZF9lZGl0U2F2ZScp Ow0KCXJldHVybiBmb3JtKHN0YXJ0VGFibGUoJ2VkaXQnKQ0KCS4gdHIoIGZMYWJlbENlbGwo JyZuYnNwOycpIC4gdGQoJHN1YiAuICR2aGVscGxpbmtmdWxsKSkNCgkuIHRyKCBmTGFiZWxD ZWxsKCAncGx1Z2luJyApIC4gdGQoJG5ld25hbWUgLiAkcGx1Z3N0YXR1cyAuICggKGlzc2V0 KCRmaWxlbmFtZSkpID8gdGFnKCcmIzE2MDsmIzE2MDsoJy4kZmlsZW5hbWUuJyknLCdzcGFu JywnIHN0eWxlPSJjb2xvcjpncmF5OyInKS5oSW5wdXQoJ2ZpbGVuYW1lJywkZmlsZW5hbWUp IDogJycgKSApKQ0KCS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgncGx1Z2lu X2NvZGUnKSApIC4gdGQoJGNvZGUpKQ0KCS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5f Z1R4dCgndHlwZScpICkgLiB0ZCgkcGx1Z3R5cGUpKQ0KCS4gdHIoIGZMYWJlbENlbGwoIGll ZF9wbHVnaW5fZ1R4dCgnZmxhZ3MnKSApIC4gdGQoJGZsYWdsaXN0KSkNCgkuIHRyKCBmTGFi ZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2xvYWRfb3JkZXInKSApIC4gdGQoJHBsdWdvcmRl ci4nJiMxNjA7JiMxNjA7Jy5pZWRfcGx1Z2luX2dUeHQoJ2xvYWRfb3JkZXJfaGVscCcpKSkN CgkuIHRyKCBmTGFiZWxDZWxsKCAndmVyc2lvbicgKSAuIHRkKCR2ZXJzaW9uKSkNCgkuIHRy KCBmTGFiZWxDZWxsKCAnYXV0aG9yJyApIC4gdGQoJGF1dGhvcikpDQoJLiB0ciggZkxhYmVs Q2VsbCggJ3dlYnNpdGUnICkgLiB0ZCgkYXV0aG9yX3VyaSkpDQoJLiB0ciggZkxhYmVsQ2Vs bCggJ2Rlc2NyaXB0aW9uJyApIC4gdGQoJGRlc2NyaXB0aW9uKSkNCgkuIHRyKCBmTGFiZWxD ZWxsKCAncGx1Z2luX2hlbHAnICkgLiB0ZCgkaGVscCkpDQoJLiB0ciggZkxhYmVsQ2VsbCgg J2NzcycgKSAuIHRkKCRjc3MpKQ0KCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQo JHN1YikpDQoNCgkuIHRyKCB0ZGNzKCc8aHI+JywyKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcm bmJzcDsnKSAuIHRkKGllZF9wbHVnaW5fZ1R4dCgndXRpbGl0aWVzJykuJzonKSkNCg0KCS4g dHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgnY29kZV9kaXN0JykgKSAuIHRkKCRk aXN0cmlidXRpb24pKQ0KCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHNsaW5r KSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzemlwbGluaykpDQoJLiB0 ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3BocGxpbmspKQ0KCS4gZW5kVGFibGUo KQ0KCS4gc0lucHV0KCdpZWRfcGx1Z2luX3NhdmUnKQ0KCS4gZUlucHV0KCdpZWRfcGx1Z2lu X2NvbXBvc2VyJykNCgkuIGhJbnB1dCgnbmFtZScsJG5hbWUpLCAnJywgJycsICdwb3N0Jywg J2llZF9lZGl0Rm9ybScpCS4gPDw8RU9GDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCI+DQpqUXVlcnkuZm4ucmVzaXplaGFuZGxlID0gZnVuY3Rpb24oY3VyaCkgew0KCXJldHVy biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7DQoJCXZhciBtZSA9IGpRdWVyeSh0aGlzKTsNCgkJ bWUuYW5pbWF0ZSh7aGVpZ2h0OiBjdXJofSk7DQoJCW1lLmFmdGVyKA0KCQkJalF1ZXJ5KCc8 ZGl2IGNsYXNzPSJyZXNpemVoYW5kbGUiPi0tLSArIC0tLTwvZGl2PicpLmJpbmQoIm1vdXNl ZG93biIsIGZ1bmN0aW9uKGUpIHsNCgkJCQl2YXIgaCA9IG1lLmhlaWdodCgpOw0KCQkJCXZh ciB5ID0gZS5jbGllbnRZOw0KCQkJCXZhciBtb3ZlSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsN CgkJCQkJbWUuaGVpZ2h0KE1hdGgubWF4KDIwLCBlLmNsaWVudFkgKyBoIC0geSkpOw0KCQkJ CX07DQoJCQkJdmFyIHVwSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsNCgkJCQkJalF1ZXJ5KCJo dG1sIikudW5iaW5kKCJtb3VzZW1vdmUiLG1vdmVIYW5kbGVyKS51bmJpbmQoIm1vdXNldXAi LHVwSGFuZGxlcik7DQoJCQkJCW5ld2ggPSBtZS5oZWlnaHQoKTsNCgkJCQkJc2V0Q29va2ll KCdpZWRfcGx1Z2luX2VkaGVpZ2h0JywgbmV3aCwgMzY1KTsNCgkJCQl9Ow0KCQkJCWpRdWVy eSgiaHRtbCIpLmJpbmQoIm1vdXNlbW92ZSIsIG1vdmVIYW5kbGVyKS5iaW5kKCJtb3VzZXVw IiwgdXBIYW5kbGVyKTsNCgkJCX0pDQoJCSk7DQoJfSk7DQp9DQpqUXVlcnkuZm4uc2VsZWN0 UmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7DQoJcmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbigpIHsNCgkJaWYodGhpcy5zZXRTZWxlY3Rpb25SYW5nZSkgew0KCQkJdGhpcy5mb2N1 cygpOw0KCQkJdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsNCgkJfSBlbHNl IGlmKHRoaXMuY3JlYXRlVGV4dFJhbmdlKSB7DQoJCQl2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0 ZVRleHRSYW5nZSgpOw0KCQkJcmFuZ2UuY29sbGFwc2UodHJ1ZSk7DQoJCQlyYW5nZS5tb3Zl RW5kKCdjaGFyYWN0ZXInLCBlbmQpOw0KCQkJcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXIn LCBzdGFydCk7DQoJCQlyYW5nZS5zZWxlY3QoKTsNCgkJfQ0KCX0pOw0KfTsNCmZ1bmN0aW9u IGllZF9nb1RvTGluZSgpIHsNCgl2YXIgbGluZSA9IHBhcnNlSW50KGpRdWVyeSgnI2llZF9q dW1wVG9MaW5lJykudmFsKCkpOw0KCXZhciBpZWRfZWQgPSBqUXVlcnkoJyNwbHVnaW5fZWRp dG9yJyk7DQoJdmFyIGllZF9lZGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx1Z2lu X2VkaXRvcicpOyAvLyBEdW5ubyBob3cgdG8gY29udmVydCBhIGpRdWVyeSBvYmogYmFjayB0 byBET00NCgl2YXIgbGluZXMgPSBpZWRfZWQudmFsKCkuc3BsaXQoJ1xcbicpOw0KCXZhciBu dW1jaGFycyA9IDA7DQoJdmFyIGNvdW50ID0gMDsNCgl2YXIgZmluZHN0ciA9ICcnOw0KCWpR dWVyeS5lYWNoKGxpbmVzLCBmdW5jdGlvbigpIHsNCgkJY291bnQrKzsNCgkJaWYgKGNvdW50 ID49IGxpbmUpIHsNCgkJCWZpbmRzdHIgPSB0aGlzOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9 DQoJCW51bWNoYXJzICs9ICh0aGlzLmxlbmd0aCkrMjsgLy8gRG9uJ3QgYXNrLiArMiBpcyBz b21ldGhpbmcgdG8gZG8gd2l0aCBsaW5lIGVuZGluZ3MgSSB0aGluaw0KCX0pOw0KDQoJLy8g RmluZCB0aGUgbGluZSBjb250YWluaW5nIHRoZSBzdHJpbmcgd2UgZm91bmQuIFN0YXJ0IGNv dW50aW5nIGZyb20gdGhlIGxpbmUgYmVmb3JlLg0KCS8vIFRob3NlIHBlc2t5IGxpbmUgZW5k aW5ncyBjb21lIGludG8gcGxheSBhZ2FpbiBzbyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRoZSBu dW1iZXINCgkvLyBvZiBsaW5lcyBmb3VuZCBmcm9tIHRoZSBzdGFydCBjaGFyYWN0ZXIgcG9z aXRpb24gKnNocnVnKg0KCXN0YXJ0ID0gaWVkX2VkLnZhbCgpLmluZGV4T2YoZmluZHN0ciwg bnVtY2hhcnMtY291bnQpOw0KCXN0YXJ0ID0gKGZpbmRzdHIgPT0gJycpID8gc3RhcnQrMSA6 IHN0YXJ0Ow0KCWVuZCA9IHN0YXJ0K2ZpbmRzdHIubGVuZ3RoOw0KCWllZF9lZC5zZWxlY3RS YW5nZShlbmQtMSwgZW5kKTsNCg0KCWlmKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7DQoJCXZh ciBpZWRfdGhlQ29kZSA9IGllZF9lZC52YWwoKS5jaGFyQ29kZUF0KGVuZC0xKTsNCgkJaWYo IHdpbmRvdy5LZXlFdmVudCApIHsNCgkJCXZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50 KCdLZXlFdmVudHMnKTsNCgkJCWV2LmluaXRLZXlFdmVudCgna2V5cHJlc3MnLCBmYWxzZSwg dHJ1ZSwgd2luZG93LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgaWVkX3RoZUNv ZGUpOw0KCQl9IGVsc2Ugew0KCQkJdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJ RXZlbnRzJyk7DQoJCQlldi5pbml0VUlFdmVudCgna2V5cHJlc3MnLCBmYWxzZSwgdHJ1ZSwg d2luZG93LCAwKTsNCgkJCWV2LmtleUNvZGUgPSBpZWRfdGhlQ29kZTsNCgkJfQ0KCQlpZWRf ZWRkLmRpc3BhdGNoRXZlbnQoZXYpOyAvLyBjYXVzZSBzY3JvbGwgdG8gY3Vyc29yIGJ5IHJl cGxhY2luZyBsYXN0IGNoYXIgd2l0aCBpdHNlbGYNCgl9DQoJaWVkX2VkLnNlbGVjdFJhbmdl KHN0YXJ0LCBlbmQpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KalF1ZXJ5KGZ1bmN0aW9uKCkg ew0KCWN1cmggPSBnZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnKTsNCgljdXJoID0g KGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1cmg7DQoJalF1ZXJ5KCIjcGx1Z2luX2VkaXRv ciIpLnJlc2l6ZWhhbmRsZShwYXJzZUludChjdXJoKSk7DQoJalF1ZXJ5KCd0ZXh0YXJlYVtt YXhsZW5ndGhdJykua2V5dXAoZnVuY3Rpb24oKXsNCgkJdmFyIG1heCA9IHBhcnNlSW50KGpR dWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSk7DQoJCWlmKGpRdWVyeSh0aGlzKS52YWwo KS5sZW5ndGggPiBtYXgpew0KCQkJalF1ZXJ5KHRoaXMpLnZhbChqUXVlcnkodGhpcykudmFs KCkuc3Vic3RyKDAsIGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSkpOw0KCQl9DQoJ CWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5maW5kKCcuY2hhcnNSZW1haW4nKS5odG1sKCdDaGFy cyByZW1haW5pbmc6ICcrIChtYXggLSBqUXVlcnkodGhpcykudmFsKCkubGVuZ3RoKSk7DQoJ fSk7DQoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhdJykua2V5dXAoKTsNCglqUXVlcnko JyNpZWRfanVtcFRvTGluZScpLmtleWRvd24oZnVuY3Rpb24oZSkgew0KCQl2YXIgY29kZSA9 IChlLmtleUNvZGUgPyBlLmtleUNvZGUgOiBlLndoaWNoKTsNCgkJaWYoY29kZSA9PSAxMykg ew0KCQkJZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsNCgkJ CWllZF9nb1RvTGluZSgpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfSk7DQp9KTsNCjwv c2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5yZXNpemVoYW5kbGUgew0KCWN1 cnNvcjpzLXJlc2l6ZTsNCglmbG9hdDpsZWZ0Ow0KCXRleHQtYWxpZ246Y2VudGVyOw0KCWZv bnQtc2l6ZToxZW07DQoJd2lkdGg6ODIlOw0KCXBhZGRpbmc6MnB4IDAgNnB4Ow0KfQ0KLmNo YXJzUmVtYWluIHsNCgl0ZXh0LWFsaWduOnJpZ2h0Ow0KCWNvbG9yOmdyYXk7DQp9DQo8L3N0 eWxlPg0KRU9GOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmUo KSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHMsICRwcmVmczsNCglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ25ld25hbWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdh dXRob3InLCdhdXRob3JfdXJpJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnaGVscCcsJ2Nz cycsJ3N0YXR1cycsJ3R5cGUnLCdsb2FkX29yZGVyJywncmVuYW1lX2ZpbGUnLCdyZXN0b3Jl X3BvaW50JykpKSk7DQoJJGZsYWdzID0gZ3BzKCdmbGFncycpOw0KDQoJbGlzdCAoJHN0YXJ0 X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nf ZW5kJ10pOw0KCSRleHRyYU1zZyA9ICRuZXdmaWxlbmFtZSA9ICRtc2cxID0gJG1zZzIgPSAn JzsNCgkkbmV3bmFtZSA9IHRyaW0oJG5ld25hbWUpOw0KCWlmICgkZmxhZ3MpIHsNCgkJJGZs YWdvdXQgPSAwOw0KCQlmb3JlYWNoICgkZmxhZ3MgYXMgJGZsYWcpIHsNCgkJCSRmbGFnb3V0 IHw9ICRmbGFnOw0KCQl9DQoJCSRmbGFncyA9ICRmbGFnb3V0Ow0KCX0NCg0KCWlmIChlbXB0 eSgkbmV3bmFtZSkpIHsNCgkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3Qn KTsNCgl9IGVsc2Ugew0KCQlpZiAoZW1wdHkoJGZpbGVuYW1lKSkgew0KCQkJJGhvdXQgPSBh cnJheSgpOw0KCQkJJGhvdXRbMF0gPSAkaGVscDsNCgkJCWlmICgkY3NzKSB7ICRob3V0WzFd ID0gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzOyB9DQoJCQlzYWZlX3VwZGF0ZSgN CgkJCQkndHhwX3BsdWdpbicsDQoJCQkJIm5hbWU9JyIuJG5ld25hbWUuIicsDQoJCQkJc3Rh dHVzID0gIi5pbnR2YWwoJHN0YXR1cykuIiwNCgkJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUp LiIsDQoJCQkJYXV0aG9yID0gJyIuJGF1dGhvci4iJywNCgkJCQlhdXRob3JfdXJpID0gJyIu JGF1dGhvcl91cmkuIicsDQoJCQkJdmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLA0KCQkJCWRl c2NyaXB0aW9uID0gJyIuJGRlc2NyaXB0aW9uLiInLA0KCQkJCWhlbHAgPSAnIi5qb2luKCcn LCRob3V0KS4iJywNCgkJCQljb2RlID0gJyIuJGNvZGUuIicsDQoJCQkJZmxhZ3MgPSAiLmlu dHZhbCgkZmxhZ3MpLiIsDQoJCQkJIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAiY29kZV9y ZXN0b3JlID0gJyIuJGNvZGUuIicsIiA6ICcnKS4iDQoJCQkJbG9hZF9vcmRlciA9ICIuJGxv YWRfb3JkZXIsDQoJCQkJIm5hbWUgPSAnIi4kbmFtZS4iJyIpOw0KCQkJJG1zZzEgPSBnVHh0 KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOw0KCQl9IGVs c2Ugew0KCQkJJGRpciA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTOw0KCQkJaWYg KGZpbGVfZXhpc3RzKCRkaXIuJGZpbGVuYW1lKSkgew0KCQkJCSRmaWxlY29udGVudCA9IGZp bGUoJGRpci4kZmlsZW5hbWUpOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoZW1wdHkoJHByZWZz WydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCQkJCSRmaWxlY29udGVudCA9ICcnOw0KCQkJ CQkkbXNnMiA9IGllZF9wbHVnaW5fZ1R4dCgnY2FjaGVfbm90X3NldCcpOw0KCQkJCX0gZWxz ZSB7DQoJCQkJCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRf b3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVy J10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJCQkJCSRo ZWxwY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdoZWxwJywgYXJyYXkoJGhl bHAsICcgJykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENTUyBodW5rIGluIHRoZSBm aWxlDQoJCQkJCSRjb2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdjb2Rl JywgJGNvZGUpOw0KCQkJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBs YXRlKCJwcmVhbWJsZSIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgibmFt ZSIsICRuZXduYW1lKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImh0bWxf aGVscCIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVyc2lvbiIsICR2 ZXJzaW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhvciIsICRh dXRob3IpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0aG9yX3VyaSIs ICRhdXRob3JfdXJpKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImRlc2Ny aXB0aW9uIiwgJGRlc2NyaXB0aW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxh dGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcikNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1w bGF0ZSgiZmxhZ3MiLCAkZmxhZ3MpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0 ZSgiaW5jbHVkZSIpDQoJCQkJCQkuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAk aGVscGNodW5rKQ0KCQkJCQkJLigoJG9wb3JkZXIgPT0gMSkgPyAkY29kZWNodW5rIDogJGhl bHBjaHVuaykNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJwb3N0YW1ibGUi KTsNCgkJCQkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3Jyk7DQoJCQkJfQ0K CQkJfQ0KDQoJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGZpbGVj b250ZW50KTsNCgkJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5ld25hbWUiLA0K CQkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsDQoJCQkJCQkJCQkiYXV0aG9yIiA9 PiAiJGF1dGhvciIsDQoJCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRob3JfdXJpIiwN CgkJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsDQoJCQkJCQkJCQki dHlwZSIgPT4gIiR0eXBlIiwNCgkJCQkJCQkJCSJmbGFncyIgPT4gIiRmbGFncyIsDQoJCQkJ CQkJCQkib3JkZXIiID0+ICIkbG9hZF9vcmRlciIsDQoJCQkJCQkJKTsNCgkJCSRodW5rdmFy cyA9IGFycmF5KCJDT0RFIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRj b2RlKSksIC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCQkJCQkJIkhFTFAiID0+IGRvU3RyaXAo c3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJGhlbHApKSwNCgkJCQkJCSJDU1MiID0+IGRvU3Ry aXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJGNzcykpLA0KCQkJCQkJCSk7DQoJCQlmb3Jl YWNoICgkbWV0YXZhcnMgYXMgJHZhcm5hbWUgPT4gJHZhbHVlKSB7DQoJCQkJZm9yKCRpZHgg PSAwOyAkaWR4IDwgY291bnQoJGZpbGVjb250ZW50KTsgJGlkeCsrKSB7DQoJCQkJCWlmIChz dHJwb3MoJGZpbGVjb250ZW50WyRpZHhdLCAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXScp ID09PSAwKSB7DQoJCQkJCQkkZmlsZWNvbnRlbnRbJGlkeF0gPSAnJHBsdWdpbltcJycuJHZh cm5hbWUuJ1wnXSA9ICcuZG9RdW90ZSgkdmFsdWUpLic7JzsNCgkJCQkJCWJyZWFrOw0KCQkJ CQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZm9yZWFjaCAoJGh1bmt2YXJzIGFzICR2YXJuYW1lID0+ ICRodW5rKSB7DQoJCQkJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9w bHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydkbG1f c3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsNCgkJCQkkc3RhcnQg PSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkZmlsZWNvbnRlbnQpICsgMTsNCgkJCQkk ZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRmaWxlY29udGVudCk7DQoJCQkJaWYg KGlzX251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPj0gJHN0 YXJ0KSB7DQoJCQkJCWFycmF5X3NwbGljZSgkZmlsZWNvbnRlbnQsICRzdGFydCwgJGVuZC0k c3RhcnQsICRodW5rKTsNCgkJCQl9DQoJCQl9DQoJCQkkZmlsZWNvbnRlbnQgPSBpbXBsb2Rl KCJcbiIsICRmaWxlY29udGVudCk7DQoNCgkJCWlmICgkZmlsZWNvbnRlbnQpIHsNCgkJCQkk ZmggPSBmb3BlbigkZGlyLiRmaWxlbmFtZSwgJ3crJyk7DQoJCQkJZndyaXRlKCRmaCwgJGZp bGVjb250ZW50KTsNCgkJCQlmY2xvc2UoJGZoKTsNCgkJCX0NCgkJCSRtc2cxID0gKGVtcHR5 KCRtc2cxKSkgPyBnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3 bmFtZSkpIDogJG1zZzE7DQoNCgkJCS8vIE1ha2UgbmV3IGZpbGUgaWYgcmVxdWlyZWQNCgkJ CWlmICgkcmVuYW1lX2ZpbGUgPT0gMSkgew0KCQkJCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dl dF9uYW1lKCRuZXduYW1lLCAkdmVyc2lvbik7DQoJCQkJJG5ld2ZpbGVuYW1lID0gJGZuYW1l c1syXTsNCgkJCQkkcmVzID0gcmVuYW1lKCRkaXIuJGZpbGVuYW1lLCAkZGlyLiRuZXdmaWxl bmFtZSk7DQoJCQkJJGV4dHJhTXNnID0gKCRyZXMpID8gaWVkX3BsdWdpbl9nVHh0KCdyZW5h bWVkJykgOiBpZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCX0NCgkJfQ0K CX0NCglpZiAoJG1zZzIpIHsNCgkJaWVkX3BsdWdpbl9saXN0KCRtc2cyKTsNCgl9IGVsc2Ug ew0KCQkvLyBDaGVjayB0aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUgY29kZSB1c2VkDQoJ CSRleHRyYU1zZyAuPSAoaWVkX3BsdWdpbl9hZG1pbl9jaGVjaygkY29kZSwgJHR5cGUpKSA/ ICcnIDogc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgnY2hlY2tfdHlwZScpKTsNCgkJJG1lc3Nh Z2UgPSAkbXNnMS5ici4kZXh0cmFNc2c7DQoJCWllZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSwg JG5ld2ZpbGVuYW1lKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVn aW5fY3JlYXRlX25ldygpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScp KSkpOw0KCSRmbmFtZSA9ICcnOw0KCWlmICgkbmFtZT09JycpIHsNCgkJaWVkX3BsdWdpbl9s aXN0KGllZF9wbHVnaW5fZ1R4dCgnbmFtZV9maXJzdCcpKTsNCgkJcmV0dXJuOw0KCX0NCglp ZiAoc3RycG9zKCRuYW1lLCAiLnBocCIpICE9PSBmYWxzZSkgew0KCQkkZm5hbWUgPSAkbmFt ZTsNCgkJJG5hbWUgPSBiYXNlbmFtZSgkbmFtZSwgIi5waHAiKTsNCgl9DQoJJGV4aXN0cyA9 IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsNCglpZiAoISRleGlz dHMpIHsNCgkJaWYgKCRmbmFtZSkgew0KCQkJLy8gUHV0IHBsdWdpbiBpbiBjYWNoZSBkaXIg YnkgZmFraW5nIGEgUE9TVCBzdWJtaXNzaW9uIGFuZCBzYXZpbmcNCgkJCSRfUE9TVFsnZmls ZW5hbWUnXSA9ICRmbmFtZTsNCgkJCSRfUE9TVFsnbmV3bmFtZSddID0gJG5hbWU7DQoJCQkk X1BPU1RbJ3N0YXR1cyddID0gMDsNCgkJCSRfUE9TVFsndHlwZSddID0gMDsNCgkJCSRfUE9T VFsndmVyc2lvbiddID0gJzAuMSc7DQoJCQkkX1BPU1RbJ2xvYWRfb3JkZXInXSA9IDU7DQoJ CQkkX1BPU1RbJ2ZsYWdzJ10gPSAwOw0KCQkJaWVkX3BsdWdpbl9zYXZlKCk7DQoJCX0gZWxz ZSB7DQoJCQlzYWZlX2luc2VydCgidHhwX3BsdWdpbiIsICINCgkJCQluYW1lPSckbmFtZScs DQoJCQkJc3RhdHVzPTAsDQoJCQkJdHlwZT0wLA0KCQkJCXZlcnNpb249JzAuMScsDQoJCQkJ bG9hZF9vcmRlcj01LA0KCQkJCWZsYWdzPTAsDQoJCQkJZGVzY3JpcHRpb249JycsDQoJCQkJ aGVscD0nJywNCgkJCQljb2RlPScnLA0KCQkJCWNvZGVfcmVzdG9yZT0nJw0KCQkJIik7DQoJ CQlwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRf bmV3JykpOw0KCQkJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZSk7DQoJCX0NCgl9 IGVsc2Ugew0KCQlpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luJykuJyA8c3Ryb25nPicu JG5hbWUuJzwvc3Ryb25nPiAnLmdUeHQoJ2FscmVhZHlfZXhpc3RzJykpOw0KCX0NCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUoKSB7DQoJZ2xv YmFsICRwcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsNCglpZiAoZ3BzKCduYW1lJykpIHsN CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsNCgkJJHJzID0gc2FmZV9yb3coImRlc2NyaXB0aW9u LCBhdXRob3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGNvZGUsIGhlbHAsIHR5cGUsIGxvYWRf b3JkZXIsIGZsYWdzIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJh Y3QoJHJzKTsNCg0KCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5f ZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgn JywkaGVscCk7DQoJfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgew0KCQkkcGx1Z2luPWll ZF9wbHVnaW5fcmVhZF9maWxlKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygn ZmlsZW5hbWUnKSk7DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJfQ0KDQoJJHppcCA9IGdwcygn emlwJyk7DQoJaWYgKGdwcygndHJpbScpPT0xKSB7DQoJCSRjb2RlPWV4cGxvZGUoIlxyXG4i LCRjb2RlKTsNCgkJJGNvZGU9YXJyYXlfbWFwKCd0cmltJywkY29kZSk7DQoJCSRjb2RlPWlt cGxvZGUoIlxyXG4iLCRjb2RlKTsNCgl9DQoNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nz cykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFs c1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJGZu YW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsNCg0KCWhlYWRl cigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7DQoJaGVhZGVyKCdDb250ZW50LURpc3Bv c2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gKCgkemlwKSA/ICRmbmFtZXNbMV0g OiAkZm5hbWVzWzBdKSk7DQoNCgkkdHlwZXMgPSBhcnJheSggJ1B1YmxpYyBzaWRlJyAsICdB ZG1pbi9QdWJsaWMgc2lkZScgLCAnTGlicmFyeScgLCAnQWRtaW4gc2lkZScpOyAvLyBObyBn VHh0KCkgYmVjYXVzZSB0aGUgdGVtcGxhdGUgaXMgRW5nbGlzaA0KCSRwbHVnaW5bJ25hbWUn XSA9ICRuYW1lOw0KCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsNCgkkcGx1Z2luWydh dXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsNCgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVy c2lvbjsNCgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOw0KCSRwbHVn aW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOw0KCSRwbHVn aW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1Z2luWydmbGFncyddID0gJGZsYWdz Ow0KLy8JJHBsdWdpblsnYWxsb3dfaHRtbF9oZWxwJ10gPSB0cnVlOw0KLy8JJHBsdWdpblsn aGVscF9yYXcnXSA9ICRoZWxwLiRzdGFydF9jc3MuJGNzcy4kZW5kX2NzczsNCgkkcGx1Z2lu WydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3Rh cnRfY3NzLCAkZW5kX2Nzcyk7DQoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2Nv ZGUnXSApOw0KDQoJZWNobyAnIyBOYW1lOiAnLiRuYW1lLicgdicuJHZlcnNpb24uJyAnLigo JHppcCkgPyAiKGNvbXByZXNzZWQpIiA6ICIiKS4nDQojIFR5cGU6ICcuJHR5cGVzWyR0eXBl XS4nIHBsdWdpbg0KIyAnLiRkZXNjcmlwdGlvbi4nDQojIEF1dGhvcjogJy4kYXV0aG9yLicN CiMgVVJMOiAnLiRhdXRob3JfdXJpLicNCiMgUmVjb21tZW5kZWQgbG9hZCBvcmRlcjogJy4k bG9hZF9vcmRlci4nDQoNCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQojIFRoaXMgaXMgYSBwbHVnaW4g Zm9yIFRleHRwYXR0ZXJuIC0gaHR0cDovL3RleHRwYXR0ZXJuLmNvbS8NCiMgVG8gaW5zdGFs bDogdGV4dHBhdHRlcm4gPiBhZG1pbiA+IHBsdWdpbnMNCiMgUGFzdGUgdGhlIGZvbGxvd2lu ZyB0ZXh0IGludG8gdGhlIFwnSW5zdGFsbCBwbHVnaW5cJyBib3g6DQojIC4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLg0KDQonLigoJHppcCkgPyBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGd6ZW5jb2Rl KHNlcmlhbGl6ZSgkcGx1Z2luKSkpLCA3MikgOiBjaHVua19zcGxpdChiYXNlNjRfZW5jb2Rl KHNlcmlhbGl6ZSgkcGx1Z2luKSksIDcyKSk7DQoNCglkaWUoKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlKCkgew0KCWdsb2JhbCAk cHJlZnM7DQoJaWYgKGdwcygnbmFtZScpKSB7DQoJCSRuYW1lID0gZ3BzKCduYW1lJyk7DQoJ CSRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJz aW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyLCBmbGFncyIsICJ0eHBfcGx1Z2lu IiwgIm5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkJbGlzdCgkY3NzLCRo ZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIs ICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0gZWxzZWlmIChncHMo J2ZpbGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNb J3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0KCQlleHRyYWN0KCRw bHVnaW4pOw0KCX0NCg0KCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X29yZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJ JGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsNCg0KCWhl YWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BocCIpOw0KCWhlYWRlcignQ29udGVudC1EaXNw b3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuJGZuYW1lc1syXSk7DQoNCgkkaGVs cGNodW5rID0gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgnaGVscCcsIGFycmF5KCRoZWxw LCAkY3NzKSk7DQoJJGNvZGVjaHVuayA9IGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoJ2Nv ZGUnLCBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkY29kZSkpOw0KDQoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJwcmVhbWJsZSIpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWls ZF90ZW1wbGF0ZSgibmFtZSIsICRuYW1lKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVt cGxhdGUoImh0bWxfaGVscCIpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgi dmVyc2lvbiIsICR2ZXJzaW9uKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUo ImF1dGhvciIsICRhdXRob3IpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgi YXV0aG9yX3VyaSIsICRhdXRob3JfdXJpKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVt cGxhdGUoImRlc2NyaXB0aW9uIiwgJGRlc2NyaXB0aW9uKTsNCgllY2hvIGllZF9wbHVnaW5f YnVpbGRfdGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcik7DQoJZWNobyBpZWRf cGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpOw0KCWVjaG8gaWVkX3BsdWdp bl9idWlsZF90ZW1wbGF0ZSgiZmxhZ3MiLCAkZmxhZ3MpOw0KCWVjaG8gaWVkX3BsdWdpbl9i dWlsZF90ZW1wbGF0ZSgiaW5jbHVkZSIpOw0KCWVjaG8gKCgkb3BvcmRlciA9PSAwKSA/ICRj b2RlY2h1bmsgOiAkaGVscGNodW5rKTsNCgllY2hvICgoJG9wb3JkZXIgPT0gMSkgPyAkY29k ZWNodW5rIDogJGhlbHBjaHVuayk7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRl KCJwb3N0YW1ibGUiKTsNCg0KCWRpZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBp ZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCRwcnQsICR2YWw9JycpIHsNCgkkY3NzID0gJGhl bHAgPSAnJzsNCglpZiAoaXNfYXJyYXkoJHZhbCkpIHsNCgkJJGhlbHAgPSAkdmFsWzBdOw0K CQkkY3NzID0gaXNzZXQoJHZhbFsxXSkgPyAkdmFsWzFdIDogJyc7DQoJCSR2YWwgPSAnJzsN Cgl9DQoJJHRlbXBsYXRlID0gYXJyYXkoDQoJCSJwcmVhbWJsZSIgPT4gJzw/cGhwJy5uLm4N CgkJCQkJCS4nLy8gVGhpcyBpcyBhIFBMVUdJTiBURU1QTEFURS4nLm4ubg0KCQkJCQkJLicv LyBDb3B5IHRoaXMgZmlsZSB0byBhIG5ldyBuYW1lIGxpa2UgYWJjX215cGx1Z2luLnBocC4g IEVkaXQgdGhlIGNvZGUsIHRoZW4nLm4NCgkJCQkJCS4nLy8gcnVuIHRoaXMgZmlsZSBhdCB0 aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRpc3RyaWJ1dGlvbjon Lm4NCgkJCQkJCS4nLy8gJCBwaHAgYWJjX215cGx1Z2luLnBocCA+IGFiY19teXBsdWdpbi0w LjEudHh0Jy5uLm4sDQoJCSJuYW1lIiA9PiAnLy8gUGx1Z2luIG5hbWUgaXMgb3B0aW9uYWwu ICBJZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgY3VycmVudCcubg0K CQkJCQkJLicvLyBmaWxlIG5hbWUuIFBsdWdpbiBuYW1lcyBzaG91bGQgc3RhcnQgd2l0aCBh IHRocmVlIGxldHRlciBwcmVmaXggd2hpY2ggaXMnLm4NCgkJCQkJCS4nLy8gdW5pcXVlIGFu ZCByZXNlcnZlZCBmb3IgZWFjaCBwbHVnaW4gYXV0aG9yICgiYWJjIiBpcyBqdXN0IGFuIGV4 YW1wbGUpLicubg0KCQkJCQkJLicvLyBVbmNvbW1lbnQgYW5kIGVkaXQgdGhpcyBsaW5lIHRv IG92ZXJyaWRlOicubg0KCQkJCQkJLickcGx1Z2luW1wnbmFtZVwnXSA9ICcuZG9RdW90ZShk b1NsYXNoKCR2YWwpKS4nOycubi5uLA0KCQkiaHRtbF9oZWxwIiA9PiAnLy8gQWxsb3cgcmF3 IEhUTUwgaGVscCwgYXMgb3Bwb3NlZCB0byBUZXh0aWxlLicubg0KCQkJCQkJLicvLyAwID0g UGx1Z2luIGhlbHAgaXMgaW4gVGV4dGlsZSBmb3JtYXQsIG5vIHJhdyBIVE1MIGFsbG93ZWQg KGRlZmF1bHQpLicubg0KCQkJCQkJLicvLyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3IEhU TUwuICBOb3QgcmVjb21tZW5kZWQuJy5uDQoJCQkJCQkuJyMgJHBsdWdpbltcJ2FsbG93X2h0 bWxfaGVscFwnXSA9IDE7Jy5uLm4sDQoJCSJ2ZXJzaW9uIiA9PiAnJHBsdWdpbltcJ3ZlcnNp b25cJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4sDQoJCSJmbGFncyIgPT4gJy8vIFBsdWdp biAiZmxhZ3MiIHNpZ25hbCB0aGUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwgY2FwYWJpbGl0aWVz IHRvIHRoZSBjb3JlIHBsdWdpbiBsb2FkZXIuJy5uDQoJCQkJCQkuJy8vIFVzZSBhbiBhcHBy b3ByaWF0ZWx5IE9SLWVkIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGZsYWdzLicubg0KCQkJCQkJ LicvLyBUaGUgZm91ciBoaWdoLW9yZGVyIGJpdHMgMHhmMDAwIGFyZSBhdmFpbGFibGUgZm9y IHRoaXMgcGx1Z2luXCdzIHByaXZhdGUgdXNlJy5uDQoJCQkJCQkuJ2lmICghZGVmaW5lZChc J1BMVUdJTl9IQVNfUFJFRlNcJykpIGRlZmluZShcJ1BMVUdJTl9IQVNfUFJFRlNcJywgMHgw MDAxKTsgLy8gVGhpcyBwbHVnaW4gd2FudHMgdG8gcmVjZWl2ZSAicGx1Z2luX3ByZWZzLnsk cGx1Z2luW1wnbmFtZVwnXX0iIGV2ZW50cycubg0KCQkJCQkJLidpZiAoIWRlZmluZWQoXCdQ TFVHSU5fTElGRUNZQ0xFX05PVElGWVwnKSkgZGVmaW5lKFwnUExVR0lOX0xJRkVDWUNMRV9O T1RJRllcJywgMHgwMDAyKTsgLy8gVGhpcyBwbHVnaW4gd2FudHMgdG8gcmVjZWl2ZSAicGx1 Z2luX2xpZmVjeWNsZS57JHBsdWdpbltcJ25hbWVcJ119IiBldmVudHMnLm4ubg0KCQkJCQkJ LickcGx1Z2luW1wnZmxhZ3NcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwNCgkJImF1 dGhvciIgPT4gJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoZG9TbGFzaCgkdmFs KSkuJzsnLm4sDQoJCSJhdXRob3JfdXJpIiA9PiAnJHBsdWdpbltcJ2F1dGhvcl91cmlcJ10g PSAnLmRvUXVvdGUoZG9TbGFzaCgkdmFsKSkuJzsnLm4sDQoJCSJkZXNjcmlwdGlvbiIgPT4g JyRwbHVnaW5bXCdkZXNjcmlwdGlvblwnXSA9ICcuZG9RdW90ZShkb1NsYXNoKCR2YWwpKS4n Oycubi5uLA0KCQkibG9hZF9vcmRlciIgPT4gJy8vIFBsdWdpbiBsb2FkIG9yZGVyOicubg0K CQkJCQkJLicvLyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA1IHdvdWxkIGZpdCBtb3N0IHBsdWdp bnMsIHdoaWxlIGZvciBpbnN0YW5jZSBjb21tZW50Jy5uDQoJCQkJCQkuJy8vIHNwYW0gZXZh bHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMgd291bGQgcHJvYmFibHkgd2FudCB0byBydW4g ZWFybGllcicubg0KCQkJCQkJLicvLyAoMS4uLjQpIHRvIHByZXBhcmUgdGhlIGVudmlyb25t ZW50IGZvciBldmVyeXRoaW5nIGVsc2UgdGhhdCBmb2xsb3dzLicubg0KCQkJCQkJLicvLyBW YWx1ZXMgNi4uLjkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHBsdWdpbnMgd2hpY2ggd291 bGQgd29yayBsYXRlLicubg0KCQkJCQkJLicvLyBUaGlzIG9yZGVyIGlzIHVzZXItb3ZlcnJp ZGVhYmxlLicubg0KCQkJCQkJLickcGx1Z2luW1wnb3JkZXJcJ10gPSAnLmRvUXVvdGUoJHZh bCkuJzsnLm4ubiwNCgkJInR5cGUiID0+ICcvLyBQbHVnaW4gXCd0eXBlXCcgZGVmaW5lcyB3 aGVyZSB0aGUgcGx1Z2luIGlzIGxvYWRlZCcubg0KCQkJCQkJLicvLyAwID0gcHVibGljICAg ICAgIDogb25seSBvbiB0aGUgcHVibGljIHNpZGUgb2YgdGhlIHdlYnNpdGUgKGRlZmF1bHQp Jy5uDQoJCQkJCQkuJy8vIDEgPSBwdWJsaWMrYWRtaW4gOiBvbiBib3RoIHRoZSBwdWJsaWMg YW5kIGFkbWluIHNpZGUnLm4NCgkJCQkJCS4nLy8gMiA9IGxpYnJhcnkgICAgICA6IG9ubHkg d2hlbiBpbmNsdWRlX3BsdWdpbigpIG9yIHJlcXVpcmVfcGx1Z2luKCkgaXMgY2FsbGVkJy5u DQoJCQkJCQkuJy8vIDMgPSBhZG1pbiAgICAgICAgOiBvbmx5IG9uIHRoZSBhZG1pbiBzaWRl Jy5uDQoJCQkJCQkuJyRwbHVnaW5bXCd0eXBlXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5u Lm4sDQoJCSJpbmNsdWRlIiA9PiAnaWYgKCFkZWZpbmVkKFwndHhwaW50ZXJmYWNlXCcpKScu bg0KCQkJCQkJLicgICAgICAgIEBpbmNsdWRlX29uY2UoXCd6ZW1fdHBsLnBocFwnKTsnLm4u biwNCgkJImhlbHAiID0+ICdpZiAoMCkgeycubg0KCQkJCQkJLic/Picubg0KCQkJCQkJLiAo KCRjc3MpID8gJzwhLS0nLm4NCgkJCQkJCS4nIyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0n Lm4NCgkJCQkJCS4kY3NzLm4NCgkJCQkJCS4nIyAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tJy5u DQoJCQkJCQkuJy0tPicubiA6ICcnKQ0KCQkJCQkJLic8IS0tJy5uDQoJCQkJCQkuJyMgLS0t IEJFR0lOIFBMVUdJTiBIRUxQIC0tLScubg0KCQkJCQkJLiRoZWxwLm4NCgkJCQkJCS4nIyAt LS0gRU5EIFBMVUdJTiBIRUxQIC0tLScubg0KCQkJCQkJLictLT4nLm4NCgkJCQkJCS4nPD9w aHAnLm4NCgkJCQkJCS4nfScubiwNCgkJImNvZGUiID0+ICcjIC0tLSBCRUdJTiBQTFVHSU4g Q09ERSAtLS0nLm4NCgkJCQkJCS4kdmFsLm4NCgkJCQkJCS4nIyAtLS0gRU5EIFBMVUdJTiBD T0RFIC0tLScubiwNCgkJInBvc3RhbWJsZSIgPT4gJz8+JywNCgkpOw0KDQoJcmV0dXJuIChh cnJheV9rZXlfZXhpc3RzKCRwcnQsICR0ZW1wbGF0ZSkgPyAkdGVtcGxhdGVbJHBydF0gOiAn Jyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgew0K CWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCWxpc3QgKCRzdGFydF9jc3MsICRlbmRf Y3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9i YWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsNCg0K CWlmICghJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSB7DQoJCWllZF9wbHVnaW5f bGlzdChpZWRfcGx1Z2luX2dUeHQoJ2Nob29zZV9maWxlJykpO3JldHVybjsNCgl9DQoJJHBs dWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25h bWUnXSk7DQovLwkkbmV3bmFtZSA9IChlbXB0eSgkcGx1Z2luWyduYW1lJ10pKSA/IGJhc2Vu YW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddLCAnLnBocCcpIDogJHBsdWdpblsnbmFt ZSddOw0KCSRuZXduYW1lID0gJHBsdWdpblsnbmFtZSddOw0KCWlmIChncHMoJ25hbWUnKSBh bmQgZ3BzKCduYW1lJykhPSd4eHhfeHh4eHh4Jykgew0KCQkkbmV3bmFtZT1ncHMoJ25hbWUn KTsNCgl9DQoJaWYgKGVtcHR5KCRwbHVnaW5bJ2NvZGUnXSkpIHsNCgkJJHBsdWdpblsnY29k ZSddID0gaW1wbG9kZSAoIiIsIGZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSdd KSk7DQoJfQ0KDQoJZXh0cmFjdChkb1NsYXNoKCRwbHVnaW4pKTsNCgkkbWQ1PW1kNSgkY29k ZSk7DQoJJHZlcnNpb24gPSAoZW1wdHkoJHZlcnNpb24pKSA/ICIwLjEiIDogJHZlcnNpb247 DQoJJGhlbHAgPSAkaGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRf Y3NzIDogJycpOw0KCSRleGlzdHMgPSBmZXRjaCgnbmFtZScsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmV3bmFtZSk7DQoJaWYgKCRleGlzdHMpIHsNCgkJJHN0YXR1cyA9IGZldGNoKCdzdGF0 dXMnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOw0KCQkkcnMgPSBzYWZlX3VwZGF0 ZSgNCgkJCSJ0eHBfcGx1Z2luIiwNCgkJCSJzdGF0dXMgPSAiLmludHZhbCgkc3RhdHVzKS4i LA0KCQkJdHlwZSA9ICIuaW50dmFsKCR0eXBlKS4iLA0KCQkJYXV0aG9yID0gJyRhdXRob3In LA0KCQkJYXV0aG9yX3VyaSA9ICckYXV0aG9yX3VyaScsDQoJCQl2ZXJzaW9uID0gJyR2ZXJz aW9uJywNCgkJCWRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsDQoJCQloZWxwID0gJyRo ZWxwJywNCgkJCWNvZGUgPSAnJGNvZGUnLA0KCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywN CgkJCWNvZGVfbWQ1ID0gJyRtZDUnLA0KCQkJZmxhZ3MgPSAiLmludHZhbCgkZmxhZ3MpLiIs DQoJCQlsb2FkX29yZGVyID0gIi5pbnR2YWwoJGxvYWRfb3JkZXIpLA0KCQkJIm5hbWUgPSAn JG5ld25hbWUnIg0KCQkpOw0KCX0gZWxzZSB7DQoJCSRycyA9IHNhZmVfaW5zZXJ0KA0KCQkJ InR4cF9wbHVnaW4iLA0KCQkJIm5hbWUgPSAnJG5ld25hbWUnLA0KCQkJc3RhdHVzID0gMCwN CgkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwNCgkJCWF1dGhvciA9ICckYXV0aG9yJywN CgkJCWF1dGhvcl91cmkgPSAnJGF1dGhvcl91cmknLA0KCQkJdmVyc2lvbiA9ICckdmVyc2lv bicsDQoJCQlkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLA0KCQkJaGVscCA9ICckaGVs cCcsDQoJCQljb2RlID0gJyRjb2RlJywNCgkJCWNvZGVfcmVzdG9yZSA9ICckY29kZScsDQoJ CQljb2RlX21kNSA9ICckbWQ1JywNCgkJCWZsYWdzID0gIi5pbnR2YWwoJGZsYWdzKS4iLA0K CQkJbG9hZF9vcmRlciA9ICIuaW50dmFsKCRsb2FkX29yZGVyKQ0KCQkpOw0KCX0NCg0KCXBh Z2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksIG1lc3NlbmdlcigncGx1Z2luJywkbmV3bmFt ZSwoJGV4aXN0cyk/J3VwZGF0ZWQnOid1cGxvYWRlZCcpKTsNCgllY2hvIGllZF9wbHVnaW5f ZWRpdF9mb3JtKCRuZXduYW1lKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9yZWFkX2ZpbGUoJGZpbGVwYXRoKSB7DQoJJGNvbnRlbnQgPSBmaWxlKCRmaWxlcGF0 aCk7DQoJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGZpbGVwYXRoKTsNCgkkZXh0ID0gYXJyYXlf cG9wKGV4cGxvZGUgKCcuJywkanVzdGZpbGUpKTsNCgkkZXh0ID0gKCRleHQ9PSRqdXN0Zmls ZSkgPyAnJyA6ICcuJy4kZXh0OyAvLyBPbmx5IGFzc2lnbiBhbiBleHRlbnNpb24gaWYgb25l IGV4aXN0cw0KCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkY29udGVudCk7DQoJJG1ldGFkYXRh ID0gYXJyYXkoDQoJCQkJCQknbmFtZScgPT4gJycsDQoJCQkJCQkndmVyc2lvbicgPT4gJycs DQoJCQkJCQkncmV2aXNpb24nID0+ICcnLA0KCQkJCQkJJ2F1dGhvcicgPT4gJycsDQoJCQkJ CQknYXV0aG9yX3VyaScgPT4gJycsDQoJCQkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJ CQkJJ29yZGVyJyA9PiAnNScsDQoJCQkJCQkndHlwZScgPT4gJycsDQoJCQkJCQknZmxhZ3Mn ID0+ICcnLA0KCQkJCQkpOw0KCWZvciAoJGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9saW5lczsg JGlkeCsrKSB7DQoJCSRjb250ZW50WyRpZHhdID0gcnRyaW0oJGNvbnRlbnRbJGlkeF0pOw0K DQoJCS8vIEJvbWIgb3V0IGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24g YXJlYQ0KCQlpZiAoc3RycG9zKCAkY29udGVudFskaWR4XSwgJ2lmICghZGVmaW5lZChcJ3R4 cGludGVyZmFjZVwnKScgKSA9PT0gMCkgew0KCQkJYnJlYWs7DQoJCX0NCgkJaWYgKHN0cnBv cygkY29udGVudFskaWR4XSwgJyRwbHVnaW5bJykgPT09IDApIHsNCgkJCS8vIEZvdW5kIGEg cGx1Z2luIHZhcmlhYmxlIHNvIGV4dHJhY3QgaXQNCgkJCSRwYXJ0cyA9IGV4cGxvZGUoIiA9 ICIsICRjb250ZW50WyRpZHhdKTsNCgkJCSRwYXJ0c1swXSA9IHN0cl9yZXBsYWNlKCInIiwg IiIsICRwYXJ0c1swXSk7IC8vIE1ha2UgdGhlIG1hdGNoIGVhc2llciENCgkJCSRwYXJ0c1sx XSA9IHN0cl9yZXBsYWNlKCI7IiwgIiIsICRwYXJ0c1sxXSk7IC8vIERpdHRvDQoJCQlwcmVn X21hdGNoKCIvcGx1Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBdLCAkdmFyKTsgLy8gRXh0cmFj dCBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lDQoJCQlpZiAoaXNfbnVtZXJpYygkcGFydHNbMV0p KSB7DQoJCQkJJHBhcnRzWzFdID0gIiciLiRwYXJ0c1sxXS4iJyI7DQoJCQl9DQoJCQlwcmVn X21hdGNoKCIvLionKC4qKScuKi8iLCAkcGFydHNbMV0sICR2YWwpOyAvLyBSZW1vdmUgYW55 dGhpbmcgb3V0c2lkZSB0aGUgcXVvdGVzIChlLmcuICRyZXZpc2lvbikNCgkJCWlmICgkdmFy WzFdID09ICdyZXZpc2lvbicgJiYgIWVtcHR5KCR2YWxbMV0pKSB7DQoJCQkJJHJldnBhcnRz ID0gZXhwbG9kZSgnICcsIHRyaW0oJHZhbFsxXSwgJyQgJykpOw0KCQkJCSR2YWxbMV0gPSAk cmV2cGFydHNbY291bnQoJHJldnBhcnRzKS0xXTsNCgkJCQkkdmFsWzFdID0gKGVtcHR5KCR2 YWxbMV0pKSA/ICcnIDogJy4nIC4kdmFsWzFdOw0KCQkJfQ0KCQkJJG1ldGFkYXRhWyR2YXJb MV1dID0gJHZhbFsxXTsNCgkJfQ0KCX0NCg0KCSRtZXRhZGF0YVsnbmFtZSddID0gKGVtcHR5 KCRtZXRhZGF0YVsnbmFtZSddKSkgPyBiYXNlbmFtZSgkanVzdGZpbGUsICRleHQpIDogJG1l dGFkYXRhWyduYW1lJ107DQoJJG1ldGFkYXRhWydsb2FkX29yZGVyJ10gPSAkbWV0YWRhdGFb J29yZGVyJ107DQoJJG1ldGFkYXRhWyd2ZXJzaW9uJ10gLj0gJG1ldGFkYXRhWydyZXZpc2lv biddOw0KCSRtZXRhZGF0YVsnaGVscCddID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNv bnRlbnQsICdIRUxQJyk7DQoJJG1ldGFkYXRhWydjc3MnXSAgPSBpZWRfcGx1Z2luX2V4dHJh Y3RfaHVuaygkY29udGVudCwgJ0NTUycgKTsNCgkkbWV0YWRhdGFbJ2NvZGUnXSA9IGllZF9w bHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnQ09ERScpOw0KDQoJcmV0dXJuICRtZXRh ZGF0YTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBuZXQt Y2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9leHRyYWN0 X2h1bmsoJGNvbnRlbnQsICRodW5rLCAkY21udD0iIyIsICRkZWxldGU9ZmFsc2UpIHsNCgkk ZGxtID0gZXhwbG9kZSgifCIsICRjbW50KTsNCgkkZGxtU3RhcnQgPSAkZGxtWzBdOw0KCSRk bG1FbmQgPSAoY291bnQoJGRsbSkgPiAxKSA/ICRkbG1bMV0gOiAnJzsNCgkkbGluZXMgPSBp ZWRfcGx1Z2luX21ha2VfYXJyYXkoJGNvbnRlbnQpOw0KDQoJbGlzdCAoJHN0YXJ0X2RlbGlt LCAkZW5kX2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkZGxtU3Rh cnQsICRkbG1FbmQpOw0KCSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRs aW5lcykgKyAxOw0KCSRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGxpbmVzKTsN Cg0KCS8vIEtsdWRnZSB0byBnZXQgcm91bmQgdGhlIGRlbGltaXRlciBjaGFuZ2UgaW4gdjAu ODMNCglpZiAoJGh1bmsgPT0gJ0NTUycgJiYgJGVuZCA9PT0gZmFsc2UpIHsNCgkJJHN0YXJ0 X2RlbGltID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkc3RhcnRfZGVsaW0pOw0KCQkk ZW5kX2RlbGltID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkZW5kX2RlbGltKTsNCgkJ JHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVzKSArIDE7DQoJCSRl bmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGxpbmVzKTsNCgl9DQoNCgkkZXh0cmFj dGVkID0gYXJyYXkoKTsNCglpZiAoY291bnQoJGxpbmVzKSA+IDAgJiYgaXNfbnVtZXJpYygk c3RhcnQpICYmIGlzX251bWVyaWMoJGVuZCkgJiYgJGVuZCA+ICRzdGFydCkgew0KCQkkZXh0 cmFjdGVkID0gYXJyYXlfc2xpY2UoJGxpbmVzLCAkc3RhcnQsICRlbmQtJHN0YXJ0KTsNCgkJ JGxpbmVOdW0gPSBjb3VudCgkZXh0cmFjdGVkKS0xOw0KCQl3aGlsZSAoJGxpbmVOdW0gPiAw ICYmIHRyaW0oJGV4dHJhY3RlZFskbGluZU51bS0tXSkgPT0gIiIpIHsNCgkJCWFycmF5X3Bv cCgkZXh0cmFjdGVkKTsNCgkJfQ0KCQl3aGlsZSAoY291bnQoJGV4dHJhY3RlZCkgPiAwICYm IHRyaW0oJGV4dHJhY3RlZFswXSkgPT0gIiIpIHsNCgkJCWFycmF5X3NoaWZ0KCRleHRyYWN0 ZWQpOw0KCQl9DQoJCWlmICgkZGVsZXRlKSB7DQoJCQkkY2hvcHBlZCA9IGFycmF5X3NwbGlj ZSgkbGluZXMsICRzdGFydC0xLCAkZW5kLSRzdGFydCsyLCAiIik7DQoJCX0NCgl9DQoJJHJl bWFpbnMgPSAkbGluZXM7DQoJLy8gQ2hlY2sgaWYgdGhlIENTUyBzZWN0aW9uIGhhcyA8c3R5 bGU+IHRhZ3MgYXJvdW5kIGl0OyBhZGQgdGhlbSBpZiBub3QNCglpZiAoJGh1bmsgPT0gIkNT UyIpIHsNCgkJJG51bXJvd3MgPSBjb3VudCgkZXh0cmFjdGVkKTsNCgkJaWYgKCRudW1yb3dz ID4gMSkgew0KCQkJaWYgKHN0cnBvcygkZXh0cmFjdGVkWyRudW1yb3dzLTFdLCAnPC9zdHls ZT4nKSA9PT0gZmFsc2UpIHsNCgkJCQkkZXh0cmFjdGVkW10gPSAnPC9zdHlsZT4nOw0KCQkJ fQ0KCQkJaWYgKHN0cnBvcygkZXh0cmFjdGVkWzBdLCAnPHN0eWxlICcpID09PSBmYWxzZSkg ew0KCQkJCWFycmF5X3Vuc2hpZnQoJGV4dHJhY3RlZCwgJzxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+Jyk7DQoJCQl9DQoJCX0NCgl9DQoJaWYgKCRkZWxldGUpIHsNCgkJcmV0dXJuIGFycmF5 KHRyaW0oam9pbigiXG4iLCAkZXh0cmFjdGVkKSksIHRyaW0oam9pbigiXG4iLCAkcmVtYWlu cykpKTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gdHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQp KTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9hcnJh eSgkYXJyKSB7DQoJaWYgKCFpc19hcnJheSgkYXJyKSkgew0KCQkkYXJyID0gZXhwbG9kZSgi XG4iLCAkYXJyKTsNCgl9DQoJJHNvdXJjZV9saW5lcyA9IGNvdW50KCRhcnIpOw0KCWZvciAo JGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9saW5lczsgJGlkeCsrKSB7DQoJCSRhcnJbJGlkeF0g PSBydHJpbSgkYXJyWyRpZHhdKTsNCgl9DQoJcmV0dXJuICRhcnI7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkc3RhcnQsICRl bmQpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFsczsNCgkkc21hcmtlciA9ICRzdGFy dCAuIHN0cl9yZXBsYWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNb J3N0YXJ0J10pIC4gKCgkZW5kKT8nICcuJGVuZDonJyk7DQoJJGVtYXJrZXIgPSAkc3RhcnQg LiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydl bmQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsNCglyZXR1cm4gKGFycmF5KCRzbWFya2Vy LCAkZW1hcmtlcikpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyByaXBwZWQgYW5kIG1vZGRlZCBm cm9tIG5ldC1jYXJ2ZXIncyB6ZW1fdHBsIHRlbXBsYXRlDQpmdW5jdGlvbiBpZWRfcGx1Z2lu X2FkbWluX2NoZWNrKCRjb2RlYmxvY2ssICR0eXBlKSB7DQoJLy8gU2hvcnQgY2lyY3VpdCBz aW5jZSB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gY2xpZW50IHBsdWdpbnMNCglpZiAoJHR5 cGUgIT0gJzAnIHx8IHN0cnBvcygkY29kZWJsb2NrLCAndHhwaW50ZXJmYWNlJyk9PT1mYWxz ZSkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvLyBCZWxpZXZlIGl0IG9yIG5vdCB0aGlz IGlzIHNldmVyYWwgb3JkZXJzIG9mIG1hZ25pdHVkZSBxdWlja2VyIHRoYW4gYSBzaW5nbGUg cHJlZ19tYXRjaA0KCSRjYiA9IHN0cl9yZXBsYWNlKGFycmF5KCdcdCcsICcgJyksICcnLCAk Y29kZWJsb2NrKTsNCgkkY2IgPSBzdHJfcmVwbGFjZSgnPT09JywgJz09JywgJGNiKTsNCglp ZiAoc3RycG9zKCRjYiwgJ3R4cGludGVyZmFjZT09XCJhZG1pbicpKSByZXR1cm4gZmFsc2U7 DQoJaWYgKHN0cnBvcygkY2IsICJ0eHBpbnRlcmZhY2U9PVwnYWRtaW4iKSkgcmV0dXJuIGZh bHNlOw0KCWlmIChzdHJwb3MoJGNiLCAnYWRtaW5cIj09dHhwaW50ZXJmYWNlJykpIHJldHVy biBmYWxzZTsNCglpZiAoc3RycG9zKCRjYiwgImFkbWluXCc9PXR4cGludGVyZmFjZSIpKSBy ZXR1cm4gZmFsc2U7DQoJaWYgKHN0cnBvcygkY2IsICdhZG1pblwiPT1AdHhwaW50ZXJmYWNl JykpIHJldHVybiBmYWxzZTsNCglpZiAoc3RycG9zKCRjYiwgImFkbWluXCc9PUB0eHBpbnRl cmZhY2UiKSkgcmV0dXJuIGZhbHNlOw0KCXJldHVybiB0cnVlOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3Rh cnRfZGxtLCAkZW5kX2RsbSkgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX2dsb2Jh bHM7DQoNCgkkdG1wZGlyID0gJGhscGZpbGUgPSAnJzsNCgkkY2hhbmdlZCA9IHRydWU7DQoJ JG91dCA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRf dG1wY2FjaGUnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2Fj aGUnXSkgJiYgaXNfd3JpdGFibGUoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNo ZSddKSkgew0KCQkkdG1wZGlyID0gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNo ZSddOw0KCQkkY2FjaGUgPSBidWlsZF9maWxlX3BhdGgoJHRtcGRpciwgJ2llZF9wbHVnaW5f Y29tcG9zZXIuY2FjaGUnKTsNCgkJaWYgKCFmaWxlX2V4aXN0cygkY2FjaGUpKSB7DQoJCQl0 b3VjaCgkY2FjaGUpOyAvLyBDcmVhdGUgZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0DQoJCX0N CgkJJHBsdWdzID0gcGFyc2VfaW5pX2ZpbGUoJGNhY2hlKTsNCg0KCQkkb2xkX21kNSA9IChh cnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkcGx1Z3MpKSA/ICRwbHVnc1skbmFtZV0gOiAnJzsN CgkJJGN1cnJfbWQ1ID0gbWQ1KCRoZWxwKTsNCgkJJGhscGZpbGUgPSBidWlsZF9maWxlX3Bh dGgoJHRtcGRpciwgJG5hbWUuJ19oZWxwLnR4dGwnKTsNCgkJaWYgKCRvbGRfbWQ1ID09ICRj dXJyX21kNSkgew0KCQkJJG91dFswXSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRobHBmaWxlKTsN CgkJCSRjaGFuZ2VkID0gZmFsc2U7DQoJCX0gZWxzZSB7DQoJCQkkcGx1Z3NbJG5hbWVdID0g JGN1cnJfbWQ1Ow0KCQkJJGZkID0gZm9wZW4oJGNhY2hlLCAidyIpOw0KCQkJZm9yZWFjaCAo JHBsdWdzIGFzICRpZHggPT4gJHZhbCkgew0KCQkJCWZ3cml0ZSgkZmQsICRpZHguJyA9ICcu JHZhbC5uKTsNCgkJCX0NCgkJCWZjbG9zZSgkZmQpOw0KCQl9DQogICB9DQoNCglpZiAoISRv dXQpIHsNCgkJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7 DQoJCSRvdXRbMF0gPSAkaGVscDsNCgkJaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7 DQoJCQkvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50ZWxsaWdlbnQgYWJvdXQgYXBw bHlpbmcgdGV4dGlsZSBvciBub3QNCgkJCSRyZSA9ICcvaFswLTZdKFwoLipcKSk/XC4vJzsN CgkJCWlmIChwcmVnX21hdGNoKCRyZSwgJGhlbHApKSB7DQoJCQkJJHRleHRpbGUgPSBuZXcg VGV4dGlsZSgpOw0KCQkJCSRvdXRbMF0gPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMoJGhlbHAp Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJaWYgKCR0bXBkaXIgJiYgJGNoYW5nZWQpIHsNCgkJaWYg KCFmaWxlX2V4aXN0cygkaGxwZmlsZSkpIHsNCgkJCXRvdWNoKCRobHBmaWxlKTsNCgkJfQ0K CQkkZmQgPSBmb3BlbigkaGxwZmlsZSwgInciKTsNCgkJZndyaXRlKCRmZCwgJG91dFswXSk7 DQoJCWZjbG9zZSgkZmQpOw0KCX0NCg0KCS8vIFJlcGxhY2UgdGhlIHRyaXBsZSAnLS0tJyBp biB0aGUgZGVsaW1pdGVycyBzbyB0aGUgaGVscCBmaWxlIGNhbiB2YWxpZGF0ZQ0KCSRzdGFy dF9kbG0gPSBzdHJfcmVwbGFjZSgnLS0tJywgJyoqKicsICRzdGFydF9kbG0pOw0KCSRlbmRf ZGxtID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkZW5kX2RsbSk7DQoNCgkkb3V0WzFd ID0gKCRjc3MpID8gIlxuJHN0YXJ0X2RsbVxuJGNzc1xuJGVuZF9kbG1cbiIgOiAnJzsNCgly ZXR1cm4gc3Vic3RyKGpvaW4oJycsICRvdXQpLCAwLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydz aXplX2hlbHAnXSskaWVkX3BsdWdpbl9nbG9iYWxzWydzaXplX2NzcyddKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gaWVkX2luc2VydF9lZGl0b3JzKCkgew0KCWdsb2JhbCAkcHJl ZnMsICRpZWRfcGx1Z2luX3ByZWZzOw0KCSRvdXQgPSBhcnJheSgpOw0KDQoJJHByZWZrZXlz ID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNb MF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywn bmFtZSBpbiAoJy4kcHJlZmtleXMuJyknKTsNCglpZiAoY291bnQoJHJzKSA9PSBjb3VudCgk aWVkX3BsdWdpbl9wcmVmc1swXSkpIHsNCgkJJGVkID0gYXJyYXkoKTsNCgkJJGVkWyRwcmVm c1snaWVkX3BsdWdpbl9lZGl0b3InXV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3Bh dGgnXTsNCgkJJGVkWyRwcmVmc1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvciddXSA9ICRwcmVm c1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJ107DQoNCgkJZm9yZWFjaCAoJGVkIGFz ICRlZGl0b3IgPT4gJGVkaXRvcl9kaXIpIHsNCgkJCXN3aXRjaCAoJGVkaXRvcikgew0KCQkJ CWNhc2UgInRpbnlfbWNlIjoNCgkJCQkJJG91dFtdID0gPDw8RU9GDQo8c2NyaXB0IHR5cGU9 InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicvdGlueV9tY2UuanMiPjwv c2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCXRpbnlNQ0UuaW5p dCh7DQoJCW1vZGUgOiAic3BlY2lmaWNfdGV4dGFyZWFzIiwNCgkJZWRpdG9yX3NlbGVjdG9y IDogIm1jZUVkaXRvciIsDQoJCXRoZW1lX2FkdmFuY2VkX3Rvb2xiYXJfbG9jYXRpb24gOiAi dG9wIiwNCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczEgOiAiYm9sZCxpdGFsaWMsdW5kZXJs aW5lLHN0cmlrZXRocm91Z2gsZm9yZWNvbG9yLGJhY2tjb2xvcixyZW1vdmVmb3JtYXQsbnVt bGlzdCxidWxsaXN0LG91dGRlbnQsaW5kZW50LGp1c3RpZnlsZWZ0LGp1c3RpZnljZW50ZXIs anVzdGlmeXJpZ2h0LGp1c3RpZnlmdWxsIiwNCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczIg OiAibGluayx1bmxpbmssc2VwYXJhdG9yLGlicm93c2VyLHNlcGFyYXRvcixzZWFyY2gscmVw bGFjZSxzZXBhcmF0b3IsY3V0LGNvcHkscGFzdGUsc2VwYXJhdG9yLGNvZGUsc2VwYXJhdG9y LGZvcm1hdHNlbGVjdCIsDQoJCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMzIDogIiINCgl9KTsN Cjwvc2NyaXB0PjsNCkVPRjsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiZWRpdF9hcmVhIjoN CgkJCQkJJG91dFtdID0gPDw8RU9GDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg c3JjPSIkZWRpdG9yX2Rpci9lZGl0X2FyZWFfZnVsbC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJLy8gaW5pdGlhbGlzYXRpb24NCgllZGl0QXJl YUxvYWRlci5pbml0KHsNCgkJaWQ6ICJwbHVnaW5fZWRpdG9yIgkvLyBpZCBvZiB0aGUgdGV4 dGFyZWEgdG8gdHJhbnNmb3JtDQoJCSxzdGFydF9oaWdobGlnaHQ6IHRydWUJLy8gaWYgc3Rh cnQgd2l0aCBoaWdobGlnaHQNCgkJLGFsbG93X3Jlc2l6ZTogImJvdGgiDQoJCSxhbGxvd190 b2dnbGU6IHRydWUNCgkJLGxhbmd1YWdlOiAiZW4iDQoJCSxzeW50YXg6ICJwaHAiDQoJfSk7 DQo8L3NjcmlwdD4NCkVPRjsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY29kZXByZXNzIjoN CgkJCQkJJG91dFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Iicu JGVkaXRvcl9kaXIuJy9jb2RlcHJlc3MuanMiPjwvc2NyaXB0Pic7DQoJCQkJCWJyZWFrOw0K CQkJfQ0KCQl9DQoJfQ0KDQoJcmV0dXJuIGltcGxvZGUoIlxuIiwgJG91dCk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5faGVscF92aWV3ZXIoJG1lc3NhZ2U9Jycp IHsNCglnbG9iYWwgJHByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCXBhZ2V0b3AoZ1R4 dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOw0KDQoJaWYgKGdwcygnbmFtZScpKSB7DQoJ CSRuYW1lID0gZ3BzKCduYW1lJyk7DQoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxw JywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOw0KCQlsaXN0KCRjc3MsJGhlbHAp ID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwh LS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7DQoJfSBlbHNlIGlmIChncHMoJ2Zp bGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNbJ3Bs dWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0KCQlleHRyYWN0KCRwbHVn aW4pOw0KCX0NCgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsNCglpZiAoZW1wdHkoJGhlbHAp KSB7DQoJCWVjaG8gdHIodGRhKCc8cD5IZWxwIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBm aWxlLjwvcD4nKSk7DQoJfSBlbHNlIHsNCgkJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3Mp ID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNb J2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCQkkcGx1 Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAk c3RhcnRfY3NzLCAkZW5kX2Nzcyk7DQoJCWVjaG8gdHIodGRhKCAnPHA+RXh0cmFjdGVkICcu KCFlbXB0eSgkcGx1Z2luWydoZWxwJ10pID8gJ2FuZCBUZXh0aWxlIHByb2Nlc3NlZCcgOiAn JykuJyBoZWxwIHNlY3Rpb24gZm9sbG93cyYjODIzMDs8L3A+PGhyPicsICcgd2lkdGg9IjYw MCInKSk7DQoJCWVjaG8gdHIodGRhKCRwbHVnaW5bJ2hlbHAnXSwgJyB3aWR0aD0iNjAwIicp KTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBp ZWRfcGx1Z2luX3NldHVwKCRldmVudD0nJywgJHN0ZXA9JycsICRtZXNzYWdlPScnKSB7DQoJ Z2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOw0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRpZWRf cGx1Z2luX3ByZWZzWzBdKTsNCg0KCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1l c3NhZ2UpOw0KCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9rZXlz KCRpZWRfcGx1Z2luX3ByZWZzWzBdKSkpOw0KCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWws aHRtbCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7DQoJJG51bVJv d3MgPSBjb3VudCgkcnMpOw0KDQoJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJt aXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyk7DQoJJGJ0bkluc3RhbGwgPSAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtz dGVwPWllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4n LmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gn KS4nPC9mb3JtPic7DQoJJGJ0blJlbW92ZSA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlv bj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVm c19yZW1vdmUiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdz dWJtaXQnLCBnVHh0KCdkZWxldGUnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7DQoJJGJ0blN0 eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCg0KCWVjaG8gc3RhcnRU YWJsZSgnbGlzdCcsICcnLCAnaWVkX3BsdWdpbl9zZXR1cCcpOw0KCWlmICgkbnVtUm93cyA9 PSAkbnVtUmVxUHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZA0KCQllY2hvIHRy KHRkYShzdHJvbmcoaWVkX3BsdWdpbl9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFu PSIyIicpIC4gdGRhKCRidG5SZW1vdmUsICRidG5TdHlsZSkgKTsNCgkJZWNobyAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtz dGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOw0KCQlmb3IgKCRpZHggPSAwOyAkaWR4 IDwgJG51bVJvd3M7ICRpZHgrKykgew0KCQkJJGEgPSAkcnNbJGlkeF07DQoJCQkkbGFiZWwg PSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVkX3BsdWdpbl9nVHh0KCRhWydu YW1lJ10pLic6PC9sYWJlbD4nOw0KCQkJJG91dCA9IHRkYSgkbGFiZWwsICcgc3R5bGU9InRl eHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyInKTsNCgkJCXN3aXRj aCgkYVsnbmFtZSddKSB7DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCI6DQoJ CQkJY2FzZSAiaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoIjoNCgkJCQljYXNlICJpZWRf cGx1Z2luX291dHB1dF9zZmlsZSI6DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGVjIjoNCgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAiOg0KCQkJCWNhc2Ug ImllZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlIjoNCgkJCQkJJG91dCAuPSB0ZChmSW5wdXQo J3RleHQnLCAkYVsnbmFtZSddLCAkYVsndmFsJ10sICdlZGl0JywgJycsICcnLCA1MCwgJycs ICRhWyduYW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0 b3IiOg0KLy8JCQkJCSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXko J25vbmUnID0+ICdOb25lJywgJ2VkaXRfYXJlYScgPT4gJ0VkaXQgQXJlYScsICdjb2RlcHJl c3MnID0+ICdDb2RlUHJlc3MnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3Bs dWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOw0K CQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCdub25lJyA9 PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwgJGFbJ3ZhbCddLCAnJywg JyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsi JywgJGFbJ25hbWUnXSkpOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICJpZWRfcGx1Z2luX2hl bHBfZWRpdG9yIjoNCgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBh cnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywgJ3RpbnlfbWNlJyA9PiAnVGlu eSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dh cCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOw0KCQkJCQlicmVhazsN CgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9vcmRlciI6DQoJCQkJCSRvdXQgLj0gdGQo cmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS5pZWRfcGx1Z2luX2dU eHQoJ291dHB1dF9jb2RlX2ZpcnN0JykuIiAiIC4gcmFkaW8oJGFbJ25hbWUnXSwxLCgoJGFb J3ZhbCddPT0xKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ291dHB1dF9oZWxwX2ZpcnN0Jyku IiAiKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgi Og0KCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1lJ10sICRhWyd2YWwn XSwgJ2VkaXQnLCAnJywgJycsIDUsICcnLCAkYVsnbmFtZSddKSk7DQoJCQkJCWJyZWFrOw0K CQkJfQ0KCQkJZWNobyB0cigkb3V0KTsNCgkJfQ0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwg JGJ0blN0eWxlKSk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KCX0gZWxzZSBpZiAoJG51bVJvd3Mg PiAwICYmICRudW1Sb3dzIDwgJG51bVJlcVByZWZzKSB7DQoJCWVjaG8gdHIodGRhKHN0cm9u ZyhpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykpOw0K CQllY2hvIHRyKHRkYShzdHJvbmcoaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19zb21lJykpLmJy LmJyDQoJCQkJCQkuaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5ici5i cg0KCQkJCQkJLmllZF9wbHVnaW5fZ1R4dCgncHJlZnNfc29tZV9vcHRpb25zJyksICcgY29s c3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKSAuIHRk YSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfSBlbHNlIHsNCgkJZWNobyB0cih0ZGEo c3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfdGl0bGUnKSksICcgY29sc3Bhbj0iMiIn KSk7DQoJCWVjaG8gdHIodGRhKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfbm90X2luc3RhbGxl ZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0 blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCg0KCWVjaG8gPDw8RU9GDQo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgaWVkX3BsdWdpbl9wYXRoX3JlID0g bmV3IFJlZ0V4cCgiXi4qWy9cXF0iLCAiZyIpDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz d2FwKHNlbElELCBzZWxWYWx1ZSkgew0KCXZhciBpZCA9IHNlbElEKydfcGF0aCc7DQoJdmFy IG51dmFsID0gKChiYXNlbmFtZSgkKCIjIitpZCkudmFsKCkpID09IHNlbFZhbHVlKSA/ICQo IiMiK2lkKS52YWwoKSA6IGRpcm5hbWUoJCgiIyIraWQpLnZhbCgpKStzZWxWYWx1ZSk7DQoJ aWYgKCQoIiMiK3NlbElEKVswXS5zZWxlY3RlZEluZGV4ID09IDApIHsNCgkJJCgiIyIraWQp LmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsNCgl9IGVsc2Ugew0KCQkkKCIjIitpZCkuYXR0 cigiZGlzYWJsZWQiLCBmYWxzZSk7IDsNCgkJJCgiIyIraWQpLnZhbChudXZhbCk7DQoJfQ0K fQ0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7DQoJcmV0dXJuIHBhdGgucmVw bGFjZShpZWRfcGx1Z2luX3BhdGhfcmUsICcnKTsNCn0NCmZ1bmN0aW9uIGRpcm5hbWUocGF0 aCkgew0KCXJldHVybiBwYXRoLm1hdGNoKGllZF9wbHVnaW5fcGF0aF9yZSk7DQp9DQpqUXVl cnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCIuaWVkX3BsdWdpbl9zZXR1cCBzZWxlY3Qgb3B0 aW9uOnNlbGVjdGVkIikuZWFjaChmdW5jdGlvbihvYmopIHsNCgkJdmFyIGl0ZW0gPSBqUXVl cnkodGhpcyk7DQoJCWllZF9wbHVnaW5fcHJlZnN3YXAoaXRlbS5wYXJlbnQoKS5hdHRyKCdp ZCcpLCBpdGVtLnZhbCgpKTsNCgl9KTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0Y7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCgkc2hvd3BhbmU9 JzEnKSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJ Zm9yZWFjaCAoJGllZF9wbHVnaW5fcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJ aWYgKCFmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlk ID0gc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3Rl KGRvU2xhc2goJHByZWYpKS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2 ZW50PSJpZWRfcGx1Z2luIicpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1l c3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCQlpZWRfcGx1 Z2luX3NldHVwKCcnLCcnLCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fcHJlZnNfcmVtb3ZlKCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwg JGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoIChhcnJheV9t ZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1swXSwkaWVkX3BsdWdpbl9wcmVmc1sxXSkgYXMgJHBy ZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScs JHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0nLmRv UXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dwYW5lKSB7DQoJ CSRtZXNzYWdlID0gaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19kZWxldGVkJyk7DQoJCWllZF9w bHVnaW5fc2V0dXAoJycsJycsJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gaWVkX3BsdWdpbl9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2lu X3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgp KTsNCglmb3JlYWNoICgkaWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkg ew0KCQlpZiAoaXNzZXQoJHBvc3RbJHByZWZdKSkgew0KCQkJc2FmZV91cGRhdGUoInR4cF9w cmVmcyIsICJ2YWwgPSAnIi4kcG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2go JHByZWYpLiInIGFuZCBwcmVmc19pZCA9IDEiKTsNCgkJfQ0KCX0NCgkkbWVzc2FnZSA9IGdU eHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJaWVkX3BsdWdpbl9zZXR1cCgnJywnJywkbWVz c2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZ1R4dCgkd2hh dCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2NhY2hlX25vdF9z ZXQnID0+ICdBZHZhbmNlZCBwcmVmICJwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IiBub3QgZGVm aW5lZCcsDQoJCSdjaGVja190eXBlJyA9PiAnQ2hlY2sgeW91ciBwbHVnaW4gdHlwZSEnLA0K CQknY2hvb3NlX2ZpbGUnID0+ICdZb3UgYXJlIHN1cHBvc2VkIHRvIGNob29zZSB0aGUgZmls ZSA7KScsDQoJCSdjb2RlX2Rpc3QnID0+ICdQbHVnaW4gY29kZTxicj5mb3IgZGlzdHJpYnV0 aW9uJywNCgkJJ2llZF9wbHVnaW5fY29tcG9zZXInID0+ICdQbHVnaW4gQ29tcG9zZXInLA0K CQknY29tcHJlc3MnID0+ICdaaXAnLA0KCQknY3JlYXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcg cGx1Z2luJywNCgkJJ2VkaXRfbmV3JyA9PiAnRWRpdCB5b3VyIG5ldyBwbHVnaW4nLA0KCQkn ZW5hYmxlJyA9PiAnRW5hYmxlZCcsDQoJCSdleHBvcnQnID0+ICdFeHBvcnQgYXMnLA0KCQkn ZmxhZ19oYXNfcHJlZnMnID0+ICdIYXMgcHJlZnMnLA0KCQknZmxhZ19saWZlY3ljbGVfbm90 aWZ5JyA9PiAnRXZlbnQgbm90aWZ5JywNCgkJJ2ZsYWdzJyA9PiAnRmxhZ3MnLA0KCQknaWVk X3BsdWdpbl9lZGl0b3InID0+ICdQbHVnaW4gZWRpdG9yJywNCgkJJ2llZF9wbHVnaW5fZWRp dG9yX3BhdGgnID0+ICdQbHVnaW4gZWRpdG9yIHBhdGggVVJMJywNCgkJJ2llZF9wbHVnaW5f ZWRpdG9yX3dpZHRoJyA9PiAnUGx1Z2luIGVkaXRvciB3aWR0aCAoY2hhcnMpJywNCgkJJ2ll ZF9wbHVnaW5faGVscF9lZGl0b3InID0+ICdIZWxwIGVkaXRvcicsDQoJCSdpZWRfcGx1Z2lu X2hlbHBfZWRpdG9yX3BhdGgnID0+ICdIZWxwIGVkaXRvciBwYXRoIFVSTCcsDQoJCSdpZWRf cGx1Z2luX291dHB1dF9vcmRlcicgPT4gJ1BIUCBleHBvcnQgb3JkZXInLA0KCQknaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGUnID0+ICdFeHBvcnQgcGx1Z2luIGZpbGVuYW1lIGZvcm1hdCcs DQoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnID0+ICdFeHBvcnQgY29tcHJlc3NlZCBm aWxlbmFtZSBmb3JtYXQnLA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAnUGx1 Z2luIHRlbXBsYXRlIGZpbGVuYW1lIGZvcm1hdCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF90 bXBjYWNoZScgPT4gJ0NhY2hlIHRleHRpbGVkIGhlbHAgaGVyZScsDQoJCSdqdW1wX3RvX2xp bmUnID0+ICdKdW1wIHRvIGxpbmU6JywNCgkJJ25hbWUnID0+ICdQbHVnaW4gbmFtZScsDQoJ CSduYW1lX2ZpcnN0JyA9PiAnWW91IGFyZSBzdXBwb3NlZCB0byBuYW1lIHRoZSBwbHVnaW4g OyknLA0KCQknbmFtZV90b29sdGlwJyA9PiAnT25seSBuZWVkZWQgaWYgdGhlIFBIUCBmaWxl IHlvdSBhcmUgdXBsb2FkaW5nIGlzIE5PVCBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9y bWF0JywNCgkJJ2xvYWRfb3JkZXInID0+ICdMb2FkIG9yZGVyJywNCgkJJ2xvYWRfb3JkZXJf aGVscCcgPT4gJygxPWZpcnN0LCA1PW5vcm1hbCwgOT1sYXN0KScsDQoJCSdvdXRwdXRfY29k ZV9maXJzdCcgPT4gJ0NvZGUgZmlyc3QnLA0KCQknb3V0cHV0X2hlbHBfZmlyc3QnID0+ICdI ZWxwIGZpcnN0JywNCgkJJ3BsdWdpbl9jb2RlJyA9PiAnU291cmNlIGNvZGUnLA0KCQkncHJl ZnNfZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQnLA0KCQkncHJlZnNfaW5zdGFs bGVkJyA9PiAnUHJlZmVyZW5jZXMgaW5zdGFsbGVkJywNCgkJJ3ByZWZzX25vdF9pbnN0YWxs ZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFsbGVkLicsDQoJCSdwcmVmc19zb21lJyA9 PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVfZXhw bGFpbicgPT4gJ0l0IGlzIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgYSBkaWZmZXJlbnQgdmVy c2lvbiBvZiB0aGUnLmJyLidwbHVnaW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlIG9yIHRoZSBw cmVmZXJlbmNlcycuYnIuJ2hhdmUgYmVjb21lIGNvcnJ1cHQgc29tZWhvdy4nLA0KCQkncHJl ZnNfc29tZV9vcHRpb25zJyA9PiAnQ2hvb3NlICcuZ1R4dCgnZGVsZXRlJykuJyB0byByZW1v dmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxsJykuJyB0byBhZGQnLmJyLidhbnkgbmV3 IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZlcmVuY2VzIHVudG91Y2hlZC4nLA0K CQkncHJlZnNfdGl0bGUnID0+ICdQbHVnaW4gQ29tcG9zZXIgcHJlZmVyZW5jZXMnLA0KCQkn cmVuYW1lX2ZhaWxlZCcgPT4gJyAocmVuYW1lIGZhaWxlZCkgJywNCgkJJ3JlbmFtZV9maWxl JyA9PiAnUmVuYW1lIGZpbGUnLA0KCQkncmVuYW1lZCcgPT4gJyAocmVuYW1lZCkgJywNCgkJ J3Jlc3RvcmVfaGVscCcgPT4gJ1JvbGwgYmFjayB0aGUgcGx1Z2luIGNvZGUgdG8gdGhlIG1v c3QgcmVjZW50IHJlc3RvcmUgcG9pbnQnLA0KCQkncmVzdG9yZV9wb2ludCcgPT4gJ1Jlc3Rv cmUgcG9pbnQnLA0KCQkncmVzdG9yZV92ZXJpZnknID0+ICdBcmUgeW91IHN1cmUgeW91IHdh bnQgdG8gcm9sbGJhY2sgdGhlIHtuYW1lfSBzb3VyY2UgY29kZSB0byBpdHMgbGFzdCByZXN0 b3JlIHBvaW50PycsDQoJCSdyZXN0b3JlZCcgPT4gJ1BsdWdpbiB7bmFtZX0gcmVzdG9yZWQu JywNCgkJJ3J1bl9mcm9tJyA9PiAnUGx1Z2lucyB0aGF0IHJ1biBmcm9tJywNCgkJJ3NhdmVf YXMnID0+ICdTYXZlIGFzJywNCgkJJ3NldHVwJyA9PiAnU2V0dXAnLA0KCQkndHlwZScgPT4g J1BsdWdpbiB0eXBlJywNCgkJJ3R5cGVfMCcgPT4gJ1B1YmxpYycsDQoJCSd0eXBlXzEnID0+ ICdBZG1pbiArIFB1YmxpYycsDQoJCSd0eXBlXzInID0+ICdMaWJyYXJ5JywNCgkJJ3R5cGVf MycgPT4gJ0FkbWluJywNCgkJJ3VwbG9hZF9waHAnID0+ICdVcGxvYWQgcGx1Z2luIGZyb20g UEhQIGZpbGUnLA0KCQkndXRpbGl0aWVzJyA9PiAnVXRpbGl0aWVzICg8c3Ryb25nPnVzZSBv bmx5IGFmdGVyIHNhdmluZyB0aGUgZGF0YSBhYm92ZTwvc3Ryb25nPiknLA0KCSk7DQoJcmV0 dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjMi O3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6 MzA0MTY6IjxkaXYgaWQ9ImllZF9oZWxwIj4KCgk8aDE+SW5zcGlyZWQgcGx1Z2luIGNvbXBv c2VyPC9oMT4KCgk8cD5UaGlzIHBsdWdpbiBjcmVhdGVzIGEgbmV3IHBhZ2UgdW5kZXIgdGhl ICYjODIxNjtFeHRlbnNpb25zJiM4MjE3OyB0YWIgd2hlcmUgeW91IGNhbiBlZGl0IGFuZCBl eHBvcnQgcGx1Z2lucyB0aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxlZCBpbiBUZXh0cGF0dGVy biwgYXMgd2VsbCBhcyBjcmVhdGUgb3IgdXBsb2FkIG5ldyBwbHVnaW5zLjwvcD4KCgk8aDIg aWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUsIGVkaXQg b3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCB0aGVuIHB1Ymxpc2gg eW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gcGx1Z2luIGZvcm1hdCAoc2VlIGFuIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS9kb3dubG9hZHMvZXhhbXBsZV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5leGFtcGxlPC9hPik8 L2xpPgoJCTxsaT5GdWxsIHN1cHBvcnQgZm9yIHRoZSBvZmZpY2lhbCA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZS50eHQi PnplbV90cGwucGhwIHBsdWdpbiB0ZW1wbGF0ZTwvYT4uIFRoZSA8YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZV9jb2RlX2Zp cnN0LnR4dCI+bW9kaWZpZWQgdmVyc2lvbjwvYT4gYnkgPGEgaHJlZj0iaHR0cDovL3R4cC1w bHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1Z2luLWNvbXBpbGVy Ij5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIxNjtzdHlsZSYjODIx Nzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0ZXh0LiBUaGUgUGx1 Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBz ZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0gYWNjb3JkaW5nbHku IEl0IHdpbGwgYWxzbyByZWFkIDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48L3NwYW4+ICRMYXN0 Q2hhbmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVyKTwvbGk+CgkJPGxp PkV4cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLCBhbGxvd2luZyB5b3Ug dG8gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNvbXBvc2VyIG9yIHlv dXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmlsZSBpbiB0aGUgcGx1 Z2luX2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBvc2VyIGFuZCBwdWJs aXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUgYm90dG9tIG9mIHRo ZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBhZ2UiPkVkaXQgcGFn ZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNhdmUgeW91ciBjaGFu Z2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRoZSBjb2RlISBZb3Ug Y2FuIGV4cG9ydCBhczoKCTx1bD4KCQk8bGk+YSBzdGFuZGFyZCBCQVNFNjQtZW5jb2RlZCB0 ZXh0IGZpbGU8L2xpPgoJCTxsaT5hIGd6aXBwZWQgdmVyc2lvbiAodXNlZnVsIGZvciBsYXJn ZSBwbHVnaW5zKTwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0YW5kYXJkIHRlbXBs YXRlIGZvcm1hdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5nLCBmaWxl cyBjYW4gYmUgc2F2ZWQgd2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qgb3IgdGhl IGhlbHAgYmxvY2sgZmlyc3QsIGFuZCB5b3UgY2FuIGNoYW5nZSB0aGUgb3V0cHV0IGZpbGVu YW1lIGZvcm1hdCB0byB0YXN0ZS4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5TZXR1 cCBidXR0b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIGFsbCBw bHVnaW4gdHlwZXM6Cgk8dWw+CgkJPGxpPlB1YmxpYyArIEFkbWluPC9saT4KCQk8bGk+UHVi bGljLXNpZGUgb25seTwvbGk+CgkJPGxpPkFkbWluLXNpZGUgb25seTwvbGk+CgkJPGxpPkxp YnJhcnkgcGx1Z2luczwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIHNwZWNp ZnlpbmcgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBpZiB5b3VyIHBsdWdpbiBu ZWVkcyBzcGVjaWFsIHBvd2Vycy4gJiM4MjE2OzUmIzgyMTc7IGlzIHRoZSBkZWZhdWx0LiBO b3RlIHRoYXQgaWYgdXNpbmcgdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgdGhpcyBmZWF0 dXJlIGlzIDxlbT5vbmx5IGF2YWlsYWJsZSBpZiB0aGUgPGNvZGU+JHBsdWdpblsmIzM5O29y ZGVyJiMzOTtdPC9jb2RlPiBzdHJpbmcgaXMgaW4gdGhlIHRlbXBsYXRlIHRvIGJlZ2luIHdp dGguPC9lbT4gU28gaWYgeW91ciBsb2FkIG9yZGVyIGtlZXBzIHJldHVybmluZyB0byAmIzgy MTY7NSYjODIxNzssIGVkaXQgeW91ciB0ZW1wbGF0ZSBkaXJlY3RseSB0byBhZGQgdGhhdCBz dHJpbmcgb3IgcGFzdGUgeW91ciBwbHVnaW4gaW50byB0aGUgcmVsZXZhbnQgcGFydHMgb2Yg dGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1 Z2luX3RlbXBsYXRlLnR4dCI+ZW1wdHkgcGx1Z2luIHRlbXBsYXRlPC9hPiBhbmQgdXBsb2Fk IGl0PC9saT4KCQk8bGk+SGVscCB0ZXh0IGNhbiBiZSB3cml0dGVuIGluIFRleHRpbGUgb3Ig KFgpSFRNTC4gU3R5bGVzIGNhbiBiZSBhZGRlZCB0byB0aGUgaGVscCBzZWN0aW9uPC9saT4K CQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0 cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMzA4OSI+VGlueU1DRSA8c3BhbiBjbGFz cz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj4gZWRpdG9yPC9hPiBmb3IgdGhlIGhlbHAgc2VjdGlv biBvciA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVz LnBocD9ncm91cF9pZD0xNjQwMDgiPkVkaXQgQXJlYTwvYT4gZm9yIGNvZGUgbWFya3VwICh0 aGFua3MgdmFyaWFhcykuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+ IGFuZCA8YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPiBzZWN0aW9ucyBmb3IgbW9yZSBvbiB0 aGVzZSBlZGl0b3JzPC9saT4KCQk8bGk+QnVpbHQtaW4gVGV4dGlsZSBoZWxwIHZpZXdlciAo dGhhbmtzIHRvIG5ldC1jYXJ2ZXImIzgyMTc7cyA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdp bnMubmV0Y2FydmluZy5jb20vcGx1Z2lucy9wbHVnaW4taGVscC12aWV3ZXIiPlBsdWdpbiBI ZWxwIFZpZXdlcjwvYT4pIHRvIGFsbG93IHlvdSB0byBwcmV2aWV3IHlvdXIgSGVscCB0ZXh0 IGR1cmluZyBkZXZlbG9wbWVudCAodGhlIHR3byB2aWV3ZXJzIHdpbGwgaGFwcGlseSBjby1l eGlzdCBpZiB5b3Ugd2lzaCk8L2xpPgoJCTxsaT5SZXNpemFibGUgdGV4dGFyZWEsIHBsdXMg Y2hhcmFjdGVyIGxpbWl0L2NvdW50ZXJzIHNvIHRoZXJlJiM4MjE3O3MgbGVzcyBjaGFuY2Ug b2YgeW91IG1ha2luZyB0aGUgcGx1Z2luIG9yIGRvY3MgdG9vIGJpZyB0byBmaXQgaW4gdGhl IGRhdGFiYXNlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3Igc2V0dGluZyBhIGNvZGUgJiM4MjIw O3Jlc3RvcmUgcG9pbnQmIzgyMjE7IGFuZCByb2xsaW5nIGJhY2sgdG8gdGhhdCBwb2ludCBp ZiB0aGluZ3MgZ28gc2lkZXdheXMuIEFsc28gdXNlZnVsIGZvciByZXR1cm5pbmcgcGx1Z2lu IHNvdXJjZSBjb2RlIHRvIGl0cyBhcy1pbnN0YWxsZWQgc3RhdGU8L2xpPgoJPC91bD4KCgk8 aDIgaWQ9ImF1dGhvcnMiPkF1dGhvcnM8L2gyPgoKCTxwPk9yaWdpbmFsIHBsdWdpbjogPGEg aHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvZmVlZGJhY2svIj5ZdXJhIExpbm55azwv YT48YnIgLz4KTW9kaWZpY2F0aW9ucyAodjAuNSspOiA8YSBocmVmPSJodHRwOi8vc3RlZmRh d3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPjxiciAvPgpBIHRvdWNoIG9m IGNsYXNzOiA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0Y2FydmluZy5jb20vY29u dGFjdCI+U3RldmUgRGlja2luc29uPC9hPjxiciAvPgpQbHVzIGhlbHAgZnJvbSBhIGhvc3Qg b2YgZm9ydW0gY29udHJpYnV0b3JzIHRvbyBudW1lcm91cyB0byBtZW50aW9uLiBZb3Uga25v dyB3aG8geW91IGFyZSA7LSk8L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24g LyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4yLjArPC9wPgoKCTxwPkRvd25sb2Fk IHRoZSBwbHVnaW4gKHYwLjUgYW5kIGFib3ZlKSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9zdyI+c3RlZmRhd3Nvbi5jb208L2E+IChwcmV2aW91cyB2ZXJzaW9ucyBh cmUgc3RpbGwgYXZhaWxhYmxlIG9uIHRoZSA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2ll di51YS90eHAvaWVkX3BsdWdpbl9jb21wb3NlciI+SW5zcGlyZWQgaG9tZXBhZ2U8L2E+KSwg cGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g QWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdp bi48L3A+CgoJPHA+VGhlIGRlZmF1bHQgcHJlZmVyZW5jZXMgYXJlIGF1dG9tYXRpY2FsbHkg Y3JlYXRlZCBpZiB5b3UgaW5zdGFsbCB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4mIzgyMTc7cyBBZG1pbi0mZ3Q7UGx1Z2lucyB0YWIuIElmIHlvdSB1c2UgdGhlIHBsdWdp bl9jYWNoZV9kaXIgeW91IG5lZWQgdG8gY3JlYXRlIHRoZSBwcmVmcyBieSBjbGlja2luZyB0 aGUgYnV0dG9uIG9uIHRoZSBTZXR1cCBzY3JlZW4uIFZpc2l0IHRoZSBFeHRlbnNpb25zIC0m Z3Q7IFBsdWdpbiBDb21wb3NlciB0YWIgYW5kIGNsaWNrIHRoZSBTZXR1cCBidXR0b24gaW4g dGhlIHRvcC1yaWdodCBvZiB0aGUgc2NyZWVuIHRvIHJlaW5zdGFsbCwgZGVsZXRlIGFuZCBz YXZlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFn ZSI+c2V0dXAgc2VjdGlvbjwvYT4gZm9yIGRldGFpbHMuPC9wPgoKCTxwPlRvIHJlbW92ZSB0 aGUgUGx1Z2luIENvbXBvc2VyIChub29vbyEpIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBh cyBub3JtYWwgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLiBBbGwgdGhlIHBy ZWZlcmVuY2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkIGFzIHdlbGwuIDxzcGFu IGNsYXNzPSJjYXBzIj5OT1RFPC9zcGFuPjogZGVsZXRpbmcgdGhlIHBsdWdpbiBmcm9tIHRo ZSBwbHVnaW4gY29tcG9zZXIgd2luZG93IGl0c2VsZiA8ZW0+d2lsbCBub3Q8L2VtPiBkZWxl dGUgdGhlIHByZWZlcmVuY2VzLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJ PGgzIGlkPSJsaXN0cGFnZSI+TGlzdCBwYWdlPC9oMz4KCgk8cD5UaGVyZSBpcyBhIDxhIGhy ZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9hPiBidXR0b24gdG8gYWxsb3cgeW91IHRvIGNvbmZp Z3VyZSB2YXJpb3VzIG9wdGlvbnMgaW4gdGhlIENvbXBvc2VyLCB0aGUgcmVzdCBvZiB0aGUg cGFnZSBsaXN0cyBhbGwgaW5zdGFsbGVkIHBsdWdpbnMuIFRoZSBjb2x1bW5zIGFyZTo8L3A+ CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UGx1Z2luPC9zcGFuPiA6IGNsaWNr IHRoZSBwbHVnaW4gbmFtZSB0byA8YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQ8L2E+IGl0LiBJ ZiB0aGUgcGx1Z2luIGhhcyBwcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggaXQsIHlvdSB3 aWxsIGFsc28gc2VlIGFuIDxlbT5bT3B0aW9uc108L2VtPiBsaW5rPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkF1dGhvcjwvc3Bhbj4gOiBpZiBhdmFpbGFibGUsIGNsaWNrIHRo ZSBhdXRob3IgdG8gZ28gdG8gdGhlaXIgc2l0ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5WZXJzaW9uIChNb2RpZmllZCk8L3NwYW4+IDogc2hvd3MgdGhlIGN1cnJlbnQgdmVy c2lvbiBudW1iZXIgYW5kIHdoZXRoZXIgdGhlIHBsdWdpbiBoYXMgYmVlbiBtb2RpZmllZCBm cm9tIHdoZW4gaXQgd2FzIGVpdGhlciBjcmVhdGVkIG9yIGluc3RhbGxlZC4gSWYgaXQgaGFz LCB5b3UgY2FuIGNsaWNrIHRoZSB2ZXJzaW9uIG51bWJlciB0byByZXN0b3JlIHRoZSBwbHVn aW4gY29kZSB0byBpdHMgaW5zdGFsbGVkIHN0YXRlIG9yIGxhc3QgPGEgaHJlZj0iI3Jlc3Rv cmUiPnJlc3RvcmUgcG9pbnQ8L2E+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRl c2NyaXB0aW9uPC9zcGFuPiA6IGJyaWVmbHksIHdoYXQgdGhlIHBsdWdpbiBkb2VzPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlB1Ymxpc2g8L3NwYW4+IDogdGhyZWUgbGlua3MK CTx1bD4KCQk8bGk+PGVtPlB1Ymxpc2g8L2VtPiA6IGV4cG9ydHMgdGhlIHBsdWdpbiBhcyBh IC50eHQgZmlsZSBmb3IgZGlzdHJpYnV0aW9uIHRvIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJz PC9saT4KCQk8bGk+PGVtPlppcDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgY29t cHJlc3NlZCAoZ3ppcHBlZCkgLnR4dCBmaWxlIGZvciBkaXN0cmlidXRpb248L2xpPgoJCTxs aT48ZW0+SGVscDwvZW0+IDogZGlzcGxheXMgdGhlICh0ZXh0aWxlIHByb2Nlc3NlZCkgcGx1 Z2luIGRvY3VtZW50YXRpb24sIGlmIHRoZXJlIGlzIGFueS4gQ2FuIGFsc28gYmUgdmlld2Vk IGZyb20gdGhlIEVkaXQgcGFnZTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5PcmRlcjwvc3Bhbj4gOiB0aGUgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3Jk ZXIgZnJvbSAxIChsb2FkZWQgZmlyc3QpIHRvIDkgKGxvYWRlZCBsYXN0KS4gNSBpcyBkZWZh dWx0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGl2ZTwvc3Bhbj4gOiBlbmFi bGUgb3IgZGlzYWJsZSBhIHBsdWdpbiBieSBjbGlja2luZyBlbnRyaWVzIGluIHRoaXMgY29s dW1uICYjODIxMjsgdGhpcyB3aWxsIDxlbT5ub3Q8L2VtPiB0cmlnZ2VyIGFueSBlbmFibGVk L2Rpc2FibGVkIG5vdGlmaWNhdGlvbiBldmVudCBpbiB5b3VyIHBsdWdpbi4gVXNlIHRoZSBB ZG1pbiAtJmd0OyBQbHVnaW5zIHRhYiBmb3IgdGVzdGluZyB0aGlzPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPng8L3NwYW4+IDogZGVsZXRlIHRoZSBwbHVnaW4gJiM4MjEyOyB0 aGlzIHdpbGwgPGVtPm5vdDwvZW0+IHRyaWdnZXIgdGhlICYjODIxNjtkZWxldGVkJiM4MjE3 OyBub3RpZmljYXRpb24gZXZlbnQuIFVzZSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyB0YWIg Zm9yIHRlc3RpbmcgdGhpczwvbGk+Cgk8L3VsPgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhl IHBsdWdpbl9jYWNoZV9kaXIgKEFkbWluIC0mZ3Q7IEFkdmFuY2VkIFByZWZzKSwgYW55IHBs dWdpbnMgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlz IGRpcmVjdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBh bmQgdGVzdGluZy4gWW91IGNhbiBlZGl0IGFuZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRo ZSBzYW1lIG1hbm5lciBhcyB0aGUgcmVndWxhciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUs IHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOjwvcD4KCgk8b2w+CgkJPGxpPlRoZXJl IGlzIG5vIGNvbmNlcHQgb2YgJiM4MjE2O21vZGlmaWVkJiM4MjE3OyBvciBvZiByZXN0b3Jl IHBvaW50cyBhcyB0aGUgZmlsZXMgYWx3YXlzIHJlcHJlc2VudCB0aGUgbW9zdCB1cC10by1k YXRlIHZlcnNpb248L2xpPgoJCTxsaT5DYWNoZWQgcGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5 cyBvbiYjODIyMTsgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4gVG8gZGVhY3Rp dmF0ZSB0aGUgcGx1Z2luIHRoZSBmaWxlIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVn aW4gY2FjaGUgZGlyZWN0b3J5PC9saT4KCQk8bGk+SXQgZm9sbG93cyB0aGF0IHRoZSAmIzgy MTY7aW5zdGFsbGVkJiM4MjE3OyBub3RpZmljYXRpb24gZXZlbnQgaXMgbm90IHRyaWdnZXJl ZCBmcm9tIHBsdWdpbnMgaW4gdGhlIGNhY2hlIGRpcmVjdG9yeTwvbGk+CgkJPGxpPlRoZSBy ZWNvbW1lbmRlZCBsb2FkIG9yZGVyIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlIGxpc3Qg cGFnZTsgaXQgY2FuIG9ubHkgYmUgYWx0ZXJlZCB2aWEgdGhlIDxhIGhyZWY9IiNlZGl0cGFn ZSI+RWRpdDwvYT4gcGFnZS4gVGhlIHNwZWNpZmllZCBsb2FkIG9yZGVyIGlzIG9ubHkgd3Jp dHRlbiB0byB0aGUgZmlsZSB3aGVuIHRoZSBwbHVnaW4gaXMgZXhwb3J0ZWQuIExvYWQgb3Jk ZXIgaXMgYWxwaGFiZXRpY2FsIGZvciBhbGwgcGx1Z2lucyBpbiB0aGUgcGx1Z2luX2NhY2hl IGRpcmVjdG9yeTwvbGk+Cgk8L29sPgoKCTxoMz5DcmVhdGluZyBhbmQgbmFtaW5nIHBsdWdp bnM8L2gzPgoKCTxwPlRoZXJlIGFyZSB0d28gd2F5cyBvZiBjcmVhdGluZyBwbHVnaW5zIGZy b20gdGhlIFBsdWdpbiBDb21wb3NlciBsaXN0IHBhZ2UuIFRoZSBmaXJzdCBpcyB0byBjcmVh dGUgYSBibGFuaywgZW1wdHkgcGx1Z2luOyB1c2UgdGhlIHRleHQgYm94IGF0IHRoZSB0b3Ag Zm9yIHRoaXMuIFBvaW50cyB0byBub3RlOjwvcD4KCgk8dWw+CgkJPGxpPklmIHlvdSB1c2Ug YSBzdGFuZGFyZCBwbHVnaW4gbmFtZSAoZS5nLiA8Y29kZT5hYmNfbXlfcGx1Z2luPC9jb2Rl PikgaXQgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBkYXRhYmFzZTwvbGk+CgkJPGxpPklmIHlv dSBhZGQgPGNvZGU+LnBocDwvY29kZT4gdG8gdGhlIHBsdWdpbiBuYW1lLCBpdCB3aWxsIGJl IGNyZWF0ZWQgaW4gdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgaW4gYSBzdGFuZGFyZCB0 ZW1wbGF0ZSBmb3JtYXQ8L2xpPgoJCTxsaT5Bdm9pZCBzcGVjaWZ5aW5nIHRoZSB2ZXJzaW9u IG9mIHRoZSBwbHVnaW4gaW4gdGhlIG5hbWUgJiM4MjEyOyB5b3Ugc2hvdWxkIHVzZSB0aGUg PGVtPlJlbmFtZSBmaWxlPC9lbT4gb3IgPGVtPkV4cG9ydDwvZW0+IG9wdGlvbnMgaW4gdGhl IEVkaXQgcGFnZSB0byBhbHRlciB0aGUgZmlsZW5hbWUgaW50byB5b3VyIHByZWZlcnJlZCBm aWxlbmFtZSBmb3JtYXQgKHNlZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cDwvYT4pPC9s aT4KCTwvdWw+CgoJPHA+VGhlIHNlY29uZCBtZXRob2Qgb2YgY3JlYXRpbmcgYSBwbHVnaW4g aXMgdG8gdXBsb2FkIG9uZSB1c2luZyB0aGUgQnJvd3NlL3VwbG9hZCBib3ggYXQgdGhlIGJv dHRvbSBvZiB0aGUgbGlzdC4gUGxlYXNlIG5vdGU6PC9wPgoKCTx1bD4KCQk8bGk+WW91IGNh biB1cGxvYWQgY29kZSBpbiBlaXRoZXIgc3RhbmRhcmQgcGx1Z2luIHRlbXBsYXRlIGZvcm1h dCAoZWl0aGVyIGNvZGUtZmlyc3Qgb3IgaGVscC1maXJzdCwgY29tcGxldGUgd2l0aCA8c3Bh biBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBhcmVhcykgb3Igc2ltcGx5IHVwbG9hZCBhIDxz cGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgY29udGFpbmluZyBjb2RlIG9ubHk8 L2xpPgoJCTxsaT5UaGUgcGx1Z2luIHdpbGwgYWx3YXlzIGJlIGluc3RhbGxlZCBpbiB0aGUg ZGF0YWJhc2Ugd2hlbiB1c2luZyB0aGlzIG1ldGhvZCAodXBsb2FkIHRoZSB0ZW1wbGF0ZSBt YW51YWxseSB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj4gb3IgY3JlYXRlIGEg bmV3IG9uZSB3aXRoIGEgLnBocCBleHRlbnNpb24gYW5kIHBhc3RlIHRoZSBjb2RlIGludG8g aXQgaWYgeW91IHdhbnQgaXQgaW4gdGhlIHBsdWdpbiBjYWNoZSk8L2xpPgoJCTxsaT5JZiB0 aGUgcGx1Z2luIGV4aXN0cyBpdCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB5b3VyIG5ldyBpbmZv PC9saT4KCQk8bGk+VGhpcyBpcyB0aGUgb25seSBwbGFjZSB5b3UgY2FuIHVwbG9hZCByYXcg PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gd2l0aCB0aGUgPGNvZGU+Jmx0Oz9waHAg PyZndDs8L2NvZGU+IG1hcmtlcnMuIEV2ZXJ5d2hlcmUgZWxzZSB5b3Ugc2hvdWxkIHVzZSBh IGZ1bGwgdGVtcGxhdGU8L2xpPgoJPC91bD4KCgk8cD5FdmVyeSBwbHVnaW4gc2hvdWxkIGJl IGNyZWF0ZWQgd2l0aCBhIHRocmVlLWxldHRlciBwcmVmaXgsIGFuIHVuZGVyc2NvcmUsIHRo ZW4gdGhlIG5hbWUgb2YgdGhlIHBsdWdpbi4gWW91IGFyZSBmcmVlIHRvIGNob29zZSB5b3Vy IG93biB0aHJlZS1sZXR0ZXIgcHJlZml4ICh1c3VhbGx5IHlvdXIgaW5pdGlhbHMpIHN1Ympl Y3QgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5w aHA/dGl0bGU9UmVzZXJ2ZWRfUGx1Z2luX1ByZWZpeGVzIj5hdm9pZGluZyBvbmVzIGFscmVh ZHkgdGFrZW4gYnkgb3RoZXIgcGx1Z2luIGF1dGhvcnM8L2E+IHNvIHBlb3BsZSBjYW4gZ2V0 IHRvIGtub3cgeW91ciB3b3JrLiBQbHVzLCBpdCBncm91cHMgeW91ciBwbHVnaW5zIHRvZ2V0 aGVyIGluIHRoZSBwbHVnaW4gYXJjaGl2ZS48L3A+CgoJPHA+QWxsIGZ1bmN0aW9ucywgdmFy aWFibGVzIChpbmNsdWRpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPkRPTTwvc3Bhbj4gbm9kZXMp LCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzc2VzLCBhbmQgYW55dGhpbmcg ZWxzZSB5b3UgaW5qZWN0IGludG8gdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUgcHJlZml4 ZWQgYnkgPHN0cm9uZz5hdCBsZWFzdDwvc3Ryb25nPiB5b3VyIHRocmVlIGxldHRlciBjb2Rl OyBwcmVmZXJhYmx5IHRoZSB3aG9sZSBwbHVnaW4gbmFtZSAob3IgYWJyaWRnZWQgdmVyc2lv biB0aGVyZW9mKSB0byBhdm9pZCBuYW1lc3BhY2UgY2xhc2hlcyB3aXRoIHlvdXIgb3duIGFu ZCBvdGhlciBwbHVnaW5zLjwvcD4KCgk8aDMgaWQ9ImVkaXRwYWdlIj5FZGl0IHBhZ2U8L2gz PgoKCTxwPlRoZSBFZGl0IHBhZ2UgaXMgd2hlcmUgeW91IGNyYWZ0IHlvdXIgbWFzdGVycGll Y2UuIEl0IGlzIGRpdmlkZWQgaW50byB2YXJpb3VzIHNlY3Rpb25zIGFuZCBib3hlcywgYXMg ZGV0YWlsZWQgaGVyZTo8L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbjwvc3Ryb25n PiA6IHRoZSBuYW1lIG9mIHlvdXIgcGx1Z2luLCB3aGljaCB5b3UgY2FuIGNoYW5nZSBhdCBh bnkgdGltZS4gTm90ZSB0aGF0IGlmIHlvdSBhcmUgZWRpdGluZyBhIGZpbGUgZnJvbSB0aGUg cGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBhbmQgdGhlIDxjb2RlPiRwbHVnaW5bJiMzOTtuYW1l JiMzOTtdPC9jb2RlPiByb3cgaXMgY29tbWVudGVkIG91dCBpbiB0aGUgZmlsZSwgeW91IHdp bGwgbm90IGJlIGFibGUgdG8gY2hhbmdlIHRoZSBwbHVnaW4gbmFtZTsgaXQgd2lsbCBhbHdh eXMgYmUgdGhlIG5hbWUgb2YgdGhlIGZpbGUuPGJyIC8+ClRvIHRoZSByaWdodCBvZiB0aGlz IGJveCB3aWxsIGJlIG9uZSBvZiB0d28gaXRlbXM6Cgk8dWw+CgkJPGxpPjxzdHJvbmc+RW5h YmxlPC9zdHJvbmc+IDogaWYgdGhlIHBsdWdpbiBpcyBhIHJlZ3VsYXIgKGluc3RhbGxlZCkg cGx1Z2luLCB0aGlzIGNoZWNrYm94IGFsbG93cyB5b3UgdG8gc3dpdGNoIHRoZSBwbHVnaW4g b24gYW5kIG9mZi48L2xpPgoJCTxsaT48c3Ryb25nPihmaWxlIG5hbWUpPC9zdHJvbmc+IDog aWYgeW91IGFyZSBlZGl0aW5nIGEgcGx1Z2luIGluIHRoZSBjYWNoZSBkaXJlY3RvcnksIHRo ZSBjdXJyZW50IGZpbGVuYW1lIHlvdSBhcmUgd3JpdGluZyB0byB3aWxsIGJlIGRpc3BsYXll ZCBpbnN0ZWFkLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+U291cmNlIGNvZGU8 L3N0cm9uZz4gOiB5b3VyIHBsdWdpbiBjb2RlIGdvZXMgaGVyZS4gVGhlIGJveCBpcyByZXNp emFibGUgYnkgZ3JhYmJpbmcgdGhlIDxjb2RlPi0tLSArIC0tLTwvY29kZT4gYmVsb3cgdGhl IGJveCBhbmQgZHJhZ2dpbmcuIFRoZSBib3ggc2l6ZSB3aWxsIGJlIHJlbWVtYmVyZWQgdmlh IGEgY29va2llIGZvciBvbmUgeWVhciBmcm9tIHlvdXIgbGFzdCBhZGp1c3RtZW50LjxkaXYg Y2xhc3M9ImJyZWFrIj5QbHVnaW5zIGFyZSBsaW1pdGVkIHRvIDE2TWIgb2YgY29kZSBzbyB0 aGVyZSBpcyBhbHNvIGEgY2hhcmFjdGVyIGNvdW50ZG93biBqdXN0IGJlbG93IHRoZSBlZGl0 IGJveC4gSWYgeW91IHN0YXJ0IGFwcHJvYWNoaW5nIHRoZSBsaW1pdCghKSwgaXQgbWlnaHQg YmUgd29ydGggY29uc2lkZXJpbmcgc3BsaXR0aW5nIHlvdXIgcGx1Z2luIGludG8gYSBmZXcg cGFydHMgb3Igd29ya2luZyBmb3IgTWljcm8kb2Z0LCB3aGVyZSBjb2RlIGJsb2F0IGlzIGFj Y2VwdGFibGUuPC9kaXY+PGJyIC8+CjxkaXYgY2xhc3M9ImJyZWFrIj5JbiBGaXJlZm94IGFu ZCBJRTcrIHlvdSBjYW4gdXNlIHRoZSA8ZW0+SnVtcCB0byBsaW5lOjwvZW0+IHRleHRib3gu IEVudGVyIGEgbGluZSBudW1iZXIgYW5kIHByZXNzIEVudGVyIHRvIGp1bXAgdG8gdGhhdCBs aW5lIGluIHRoZSBjb2RlLiBJbiBvdGhlciBicm93c2VycywgeW1tdi48L2Rpdj48L2xpPgoJ CTxsaT48c3Ryb25nPlBsdWdpbiB0eXBlPC9zdHJvbmc+IDogY2hvb3NlIG9uZSBvZiB0aGUg dHlwZXMgdGhhdCBiZXN0IGZpdHMgdGhlIGludGVuZGVkIHVzZSBvZiB5b3VyIHBsdWdpbi4g SWYgeW91IGNob29zZSAmIzgyMTY7UHVibGljJiM4MjE3OyBhbmQgdHJ5IHRvIGFjY2VzcyB0 aGUgYWRtaW4gc2lkZSBpbiB5b3VyIGNvZGUsIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZCB3 aGVuIHRoZSBwbHVnaW4gaXMgc2F2ZWQgc28geW91IGNhbiBjaG9vc2UgYSBtb3JlIGFwcHJv cHJpYXRlIHR5cGUuPC9saT4KCQk8bGk+PHN0cm9uZz5GbGFnczwvc3Ryb25nPiA6IGNob29z ZSB3aGljaCBwbHVnaW4gZmxhZ3MgYXJlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGx1 Z2luOgoJPHVsPgoJCTxsaT48c3Ryb25nPkhhcyBwcmVmczwvc3Ryb25nPiA6IGNoZWNrIHRo aXMgdG8gaW5kaWNhdGUgeW91ciBwbHVnaW4gcmVzcG9uZHMgdG8gdGhlIDxlbT5wbHVnaW5f cHJlZnMueW91cl9wbHVnaW5fbmFtZTwvZW0+IGV2ZW50LjwvbGk+CgkJPGxpPjxzdHJvbmc+ ZXZlbnQgbm90aWZ5PC9zdHJvbmc+IDogY2hlY2sgdGhpcyB0byBpbmRpY2F0ZSB5b3VyIHBs dWdpbiByZXNwb25kcyB0byB0aGUgPGVtPnBsdWdpbl9saWZlY3ljbGUueW91cl9wbHVnaW5f bmFtZTwvZW0+IGV2ZW50L3N0ZXBzLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+ TG9hZCBvcmRlcjwvc3Ryb25nPiA6IGNob29zZSB0aGUgcmVjb21tZW5kZWQgb3JkZXIgaW4g d2hpY2ggeW91IHRoaW5rIHlvdXIgcGx1Z2luIHNob3VsZCBiZSBsb2FkZWQgYnkgdXNlcnMu IE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBkZWZhdWx0IG9mICYjODIxNjs1JiM4MjE3OyBpcyBm aW5lIGJ1dCBmb3Igc3BlY2lhbCBjYXNlcyB3aGVyZSB5b3VyIHBsdWdpbiBoYXMgdG8gc2V0 IHVwIGFuIGVudmlyb25tZW50IG9yIGhhcyB0byB3YWl0IGZvciBvdGhlciBwbHVnaW5zIHRv IGxvYWQgZmlyc3QsIHlvdSBtaWdodCByZXF1aXJlIG9uZSBvZiB0aGUgbnVtYmVycyBlaXRo ZXIgc2lkZS4gQmUgYXdhcmUgdGhhdCB0aGlzIGlzIGEgPGVtPnJlY29tbWVuZGF0aW9uPC9l bT4gYW5kIGlzIG92ZXJyaWRhYmxlIGJ5IHRoZSBzaXRlIGFkbWluLiBJZiB0aGUgcGx1Z2lu IGlzIGFscmVhZHkgZGVwbG95ZWQgb24gYSBzaXRlLCB0aGUgbG9hZCBvcmRlciBhbHJlYWR5 IHNldCB3aWxsIGJlIHVzZWQgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiB0aGlzIHZh bHVlLiBPbmx5IG5ldyBpbnN0YWxsYXRpb25zIHdpbGwgYmUgc2V0IHRvIHRoaXMgdmFsdWUg YnkgZGVmYXVsdC48L2xpPgoJCTxsaT48c3Ryb25nPlZlcnNpb248L3N0cm9uZz4gOiB0aGUg Y3VycmVudCB2ZXJzaW9uIG9mIHlvdXIgcGx1Z2luLiBUbyB0aGUgcmlnaHQgb2YgdGhpcyBi b3ggd2lsbCBiZSBvbmUgb2YgdHdvIGl0ZW1zOgoJPHVsPgoJCTxsaT48c3Ryb25nPlJlc3Rv cmUgcG9pbnQ8L3N0cm9uZz4gOiBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCB3aWxsICh1cG9u IHNhdmUpIHN0b3JlIHRoZSBjdXJyZW50IGNvZGUgYXMgYSBiYXNlbGluZSB0byB3aGljaCB5 b3UgbWF5ICYjODIyMDtyb2xsIGJhY2smIzgyMjE7IHRvIGF0IGEgbGF0ZXIgZGF0ZS4gU2Vl IDxhIGhyZWY9IiNyZXN0b3JlIj5yZXN0b3JlIHBvaW50czwvYT4gZm9yIG1vcmU8L2xpPgoJ CTxsaT48c3Ryb25nPlJlbmFtZSBmaWxlPC9zdHJvbmc+IDogYnkgZGVmYXVsdCwgd2hlbiB5 b3Ugc2F2ZSBhIGZpbGUgdGhhdCBpcyBiZWluZyBlZGl0ZWQgaW4gdGhlIHBsdWdpbiBjYWNo ZSBkaXJlY3RvcnksIGl0IGlzIG92ZXJ3cml0dGVuIHdpdGggeW91ciBjaGFuZ2VzLiBPbmNl IGEgcGx1Z2luIGlzIHJlbGVhc2VkIHlvdSB3b3VsZCBub3JtYWxseSBkb3dubG9hZCBhIGNv cHkgdmlhIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IGZyb20gdGhlIHBsdWdpbl9j YWNoZV9kaXIgZm9yIHNhZmVrZWVwaW5nLiBJZiB5b3UgdGhlbiBzdWJzZXF1ZW50bHkgbW9k aWZ5IHRoZSBwbHVnaW4gYW5kIGluY3JlYXNlIHRoZSB2ZXJzaW9uIG51bWJlciwgeW91IG1h eSB3aXNoIHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBhcyB3ZWxsLiBDaGVja2luZyB0aGlzIGJv eCB3aWxsICh1cG9uIHNhdmUpIHJlbmFtZSB0aGUgZmlsZSBpbiB0aGUgcGx1Z2luIGNhY2hl IGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyLiBTZWUg dGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwIHBhZ2U8L2E+IGZvciBkZXRhaWxzIG9u IGN1c3RvbWlzaW5nIHRoZSBmaWxlbmFtZSBmb3JtYXQ8L2xpPgoJPC91bD48L2xpPgoJCTxs aT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IHlvdSE8L2xpPgoJCTxsaT48c3Ryb25nPldl YnNpdGU8L3N0cm9uZz4gOiB5b3VyIGhvbWUgcGFnZSBvciBwbHVnaW4gcGFnZS4gV2lsbCBi ZSBoeXBlcmxpbmtlZCB0byB5b3VyIEF1dGhvciBuYW1lIGluIHRoZSBsaXN0IHBhZ2U8L2xp PgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogdmVyeSBicmllZiBvbmUt bGluZXIgZGVzY3JpYmluZyB5b3VyIHBsdWdpbiYjODIxNztzIGNvcmUgZnVuY3Rpb24gLyBy ZWFzb24gZm9yIGV4aXN0ZW5jZTwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIEhlbHA8L3N0 cm9uZz4gOiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBsdWdpbiB1c2FnZS4g Q2FuIChwcm9iYWJseSBzaG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxhIGhyZWY9Imh0dHA6 Ly90ZXh0cGF0dGVybi5jb20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxlPC9hPi4gVGhlcmUg d2VyZSBzb21lIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3Rv cGljLnBocD9pZD0yNTMyNyI+bG9vc2UgZG9jdW1lbnRhdGlvbiBndWlkZWxpbmVzPC9hPiBw cm9wb3NlZCB0aGF0IHNlcnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm90ZSB0aGF0 IHRoZSBjaGFyYWN0ZXIgY291bnRkb3duIGhlcmUgaXMgb25seSBhcHByb3hpbWF0ZSBiZWNh dXNlIHdoZW4geW91ciBwbHVnaW4gaXMgc2F2ZWQgYW5kIHRoZSBoZWxwIGlzIGNvbnZlcnRl ZCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4sIGl0IHVzdWFsbHkgdGFrZXMg dXAgbW9yZSBzcGFjZSB0aGFuIFRleHRpbGU7IHBsZWFzZSBjaGVjayB0aGF0IHlvdXIgaGVs cCBmaWxlIHJlbmRlcnMgY29ycmVjdGx5IHdoZW4geW91ciBwbHVnaW4gaXMgZXhwb3J0ZWQ8 L2xpPgoJCTxsaT48c3Ryb25nPlN0eWxlPC9zdHJvbmc+IDogQW55IDxzcGFuIGNsYXNzPSJj YXBzIj5DU1M8L3NwYW4+IHN0eWxlIHJ1bGVzIHlvdSB3aXNoIHRvIGFwcGx5IHRvIHlvdXIg ZG9jdW1lbnRhdGlvbiB0byBtYWtlIGl0IG1vcmUgcHJldHR5LiBJdCYjODIxNztzIGJlc3Qg dG8gdGFyZ2V0IHlvdXIgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgYnkgc3Vycm91bmRp bmcgdGhlIGVudGlyZSBQbHVnaW4gSGVscCBzZWN0aW9uIHdpdGggc29tZXRoaW5nIGxpa2U6 IDxjb2RlPiZsdDtkaXYgaWQ9JnF1b3Q7YWJjX2hlbHAmcXVvdDsmZ3Q7aDEuIERvY3MgZ28g aGVyZS4uLiZsdDsvZGl2Jmd0OzwvY29kZT4uPGJyIC8+Ck5vdGUgdGhhdCBib3RoIHRoZSBQ bHVnaW4gSGVscCBhbmQgU3R5bGUgYXJlIGdvdmVybmVkIGJ5IGEgc2l6ZSBsaW1pdC4gU2lu Y2UgdGhleSBhcmUgYm90aCBzdG9yZWQgaW4gdGhlIHNhbWUgNjRrQiBmaWVsZCwgdGhlIHNp emUgaXMgc2hhcmVkIGJldHdlZW4gdGhlbS4gU3R5bGVzIGFyZSA8ZW0+bm90PC9lbT4gcGFz c2VkIHRocm91Z2ggdGhlIFRleHRpbGUgcHJvY2Vzc29yIGFuZCB5b3UgZG9uJiM4MjE3O3Qg bmVlZCB0byBhZGQgdGhlIDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IHRhZ3M7IHRoZSBD b21wb3NlciB3aWxsIGRvIHRoYXQgZm9yIHlvdSAoYnV0IHNlZSA8YSBocmVmPSIjbm90ZXMi Pk5vdGVzPC9hPik8L2xpPgoJCTxsaT48c3Ryb25nPlNhdmU8L3N0cm9uZz4gOiBjb21taXRz IHRoZSBjaGFuZ2VzPC9saT4KCQk8bGk+PHN0cm9uZz5bIFZpZXcgSGVscCBdPC9zdHJvbmc+ IDogc2hvd3MgdGhlIGRvY3VtZW50YXRpb24gYXMgdXNlcnMgd2lsbCBzZWUgaXQgKGkuZS4g VGV4dGlsZSBwcm9jZXNzZWQgaW50byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4p LiBBbnkgaGVscCB0ZXh0IG92ZXIgNjRrQiBpbiBsZW5ndGggaXMgdHJ1bmNhdGVkIHNvIHlv dSBjYW4gdmVyaWZ5IHRoYXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlvbiBmaXRzPC9saT4KCTwv dWw+CgoJPHA+T25jZSB5b3UgaGF2ZSBzYXZlZCB5b3VyIHBsdWdpbiwgdGhlcmUgaXMgYSBz ZWN0aW9uIHJpZ2h0IGF0IHRoZSBib3R0b20gdGhhdCBhbGxvd3MgeW91IHRvIGV4cG9ydCB5 b3VyIHBsdWdpbiBpbiBhIHZhcmlldHkgb2YgZm9ybWF0czo8L3A+CgoJPHVsPgoJCTxsaT48 c3Ryb25nPlBsdWdpbiBjb2RlIGZvciBkaXN0cmlidXRpb248L3N0cm9uZz4gOiBpcyBhIGRp cmVjdCBjb3B5ICYjODIxNjtuJiM4MjE3OyBwYXN0ZSBhcmVhIHRoYXQgY29udGFpbnMgeW91 ciBlbnRpcmUgcGx1Z2luICsgZG9jcy4gWW91IGNhbiB0YWtlIHRoaXMgZW50aXJlIGFyZWEg YW5kIHBhc3RlIGl0IGludG8gdGhlICYjODIxNjtJbnN0YWxsIHBsdWdpbiYjODIxNzsgYm94 IG9uIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2U8L2xpPgoJCTxsaT48c3Ryb25nPkV4 cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0PC9zdHJvbmc+IDogY29udmVydHMgdGhlIHBsdWdp biBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBhbmQgc2F2ZXMgdGhl IHBsdWdpbiB0byB5b3VyIGNvbXB1dGVyIGFzIGEgcmVkaXN0cmlidXRhYmxlIHRleHQgZmls ZSBmb3Igb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnMgdG8gaW5zdGFsbDwvbGk+CgkJPGxpPjxz dHJvbmc+RXhwb3J0IGFzIGFiY19teXBsdWdpbi50eHQgKGNvbXByZXNzZWQpPC9zdHJvbmc+ IDogY29udmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiBhcyBhIHJlZGlzdHJpYnV0YWJsZSwgZ3pp cHBlZCB0ZXh0IGZpbGUgZm9yIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJzIHRvIGluc3RhbGwu IFVzZWZ1bCBmb3IgbGFyZ2UgcGx1Z2lucyBvciB0byBvZmZlciBhbiBhbHRlcm5hdGl2ZSBm b3IgcGVvcGxlIHdobyBoYXZlIHN0cmluZ2VudCBzaXplIGxpbWl0cyBpbXBvc2VkIGJ5IHRo ZWlyIGhvc3Q8L2xpPgoJCTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4ucGhw PC9zdHJvbmc+IDogc2F2ZXMgdGhlIHBsdWdpbiBpbiBhIFRleHRwYXR0ZXJuIHN0YW5kYXJk IHRlbXBsYXRlIGZvcm1hdC4gVXNlZnVsIGZvciBrZWVwaW5nIHRoZSBwbHVnaW4gZm9yIHlv dXJzZWxmICYjODIxMjsgY29tcGxldGUgd2l0aCBUZXh0aWxlIG1hcmt1cCAmIzgyMTI7IHNv IGl0IGNhbiBiZSBsYXRlciBlZGl0ZWQgYW5kIHJlLWlzc3VlZCAvIHVwZGF0ZWQgb3Igc2hh cmVkIHdpdGggb3RoZXIgZGV2ZWxvcGVycyB3aG8gaGF2ZSB0aGUgUGx1Z2luIENvbXBvc2Vy IG9yIHplbV90cGwucGhwIGNvbXBpbGVyPC9saT4KCTwvdWw+CgoJPHA+Tm90ZSB0aGF0IHdo ZW4gZXhwb3J0aW5nIGFzIGEgc3RhbmRhcmQgcGx1Z2luLCB0aGUgVGV4dGlsZSBwcm9jZXNz b3IgYXR0ZW1wdHMgdG8gZGVjaWRlIGlmIHlvdSBoYXZlIHVzZWQgVGV4dGlsZSBvciBub3Q7 IGl0IHNpbXBseSBsb29rcyBmb3IgYSB0ZXh0aWxlZCBoZWFkZXIgKDxjb2RlPmgxLjwvY29k ZT4gdGhyb3VnaCA8Y29kZT5oNi48L2NvZGU+KS4gUnVubmluZyBwdXJlIDxzcGFuIGNsYXNz PSJjYXBzIj5IVE1MPC9zcGFuPiB0aHJvdWdoIFRleHRpbGUgbWF5IG9jY2FzaW9uYWxseSBj YXVzZSBlbmNvZGluZyBpc3N1ZXMgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCBjaGFyYWN0 ZXIgc2V0IHVzZWQgc28gaXQgaXMgYWx3YXlzIGJlc3QgdG8gdHJ5IGFuZCBzdGljayB0byBU ZXh0aWxlIGFzIHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbS48L3A+CgoJPGgzIGlkPSJyZXN0 b3JlIj5SZXN0b3JlIHBvaW50czwvaDM+CgoJPHA+V2hlbiBhIHBsdWdpbiBpcyBpbnN0YWxs ZWQsIGEgY29weSBpcyBrZXB0IGluIHRoZSBkYXRhYmFzZS4gSWYgdGhlIHBsdWdpbiBjb2Rl IChub3QgaGVscCB0ZXh0KSBpcyBzdWJzZXF1ZW50bHkgZWRpdGVkLCB0aGUgcGx1Z2luIGlz IGNvbnNpZGVyZWQgJiM4MjIwO21vZGlmaWVkJiM4MjIxOzsgaW5kaWNhdGVkIGluIHRoZSBQ bHVnaW4gQ29tcG9zZXIgbGlzdCBwYWdlIGFuZCBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2Uu IFNvbWV0aW1lcyB5b3UgbWF5IHdpc2ggdG8gcmV2ZXJ0IGFueSBjaGFuZ2VzIGJhY2sgdG8g dGhlIGFzLWluc3RhbGxlZCBzdGF0ZSBhbmQgdGhlIENvbXBvc2VyIGFsbG93cyB0aGlzLjwv cD4KCgk8cD5BbnkgdGltZSBhIHBsdWdpbiBpcyBtYXJrZWQgYXMgJiM4MjE2O21vZGlmaWVk JiM4MjE3OywgdGhlIHZlcnNpb24gbnVtYmVyIGJlY29tZXMgY2xpY2thYmxlIGluIHRoZSA8 YSBocmVmPSIjbGlzdHBhZ2UiPmxpc3Q8L2E+IHBhZ2UuIENsaWNraW5nIGl0IChhbmQgY29u ZmlybWluZyB5b3UgYXJlIHN1cmUpIHdpbGwgd2lwZSBvdXQgYW55IGNoYW5nZXMgeW91IG1h ZGUgYW5kIHJldHVybiB0aGUgcGx1Z2luIHRvIGl0cyBpbnN0YWxsZWQgc3RhdGUuPC9wPgoK CTxwPkR1cmluZyB0aGUgZWRpdGluZyBwcm9jZXNzIG9mIHlvdXIgb3duIHBsdWdpbnMsIGl0 IG1heSBiZSB0aGF0IGF0IGNlcnRhaW4gdGltZXMgeW91IHdpc2ggdG8gcHV0IGEgc3Rha2Ug aW4gdGhlIGdyb3VuZCBhbmQgc2F5ICYjODIyMDt0aGlzIGlzIG15IGN1cnJlbnQgYmFzZWxp bmUgdGhhdCBJIG1pZ2h0IHdhbnQgdG8gcmV0dXJuIHRvIGxhdGVyJiM4MjIxOy4gUGVyaGFw cyB5b3UgYXJlIGFib3V0IHRvIG1ha2Ugc29tZSBtb25zdGVyIGVkaXRzIG9yIHRyeSBzb21l dGhpbmcgZXhwZXJpbWVudGFsIGFuZCB3YW50IGFuIGVhc3kgZmFsbGJhY2sgbWVjaGFuaXNt LiBUaGF0JiM4MjE3O3Mgd2hlcmUgdGhlICYjODIyMDtSZXN0b3JlIHBvaW50JiM4MjIxOyBj aGVja2JveCBjb21lcyBpbi48L3A+CgoJPHA+QnkgY2hlY2tpbmcgdGhlIGJveCB3aGVuIHlv dSBzYXZlIHlvdXIgcGx1Z2luLCB0aGUgY3VycmVudCBjb2RlIHdpbGwgYmVjb21lIHlvdXIg bmV3IHJvbGxiYWNrIHBvaW50IGFuZCB0aGUgcGx1Z2luIHdpbGwgbm8gbG9uZ2VyIGJlIG1h cmtlZCAmIzgyMjA7bW9kaWZpZWQmIzgyMjE7LiBBbnkgY2hhbmdlcyBtYWRlIGJlZm9yZWhh bmQgd2lsbCBub3QgYmUgcmVjb3ZlcmFibGUgc28geW91IHdpbGwgaGF2ZSB0byByZWx5IG9u IHlvdXIgb3duIGJhY2t1cHMgaWYgeW91IHdpc2ggdG8gZ28gYmFjayBmdXJ0aGVyLiBBbnkg ZWRpdHMgeW91IG1ha2UgYWZ0ZXIgY3JlYXRpbmcgYSByZXN0b3JlIHBvaW50IGNhbiBiZSB1 bmRvbmUgYnkgdmlzaXRpbmcgdGhlIGxpc3QgcGFnZSBhbmQgY2xpY2tpbmcgdGhlIHZlcnNp b24gbnVtYmVyIG5leHQgdG8geW91ciBwbHVnaW4uIEN1cnJlbnRseSwgb25seSBvbmUgcm9s bGJhY2sgcG9pbnQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuPC9wPgoKCTxoMyBp ZD0ic2V0dXBwYWdlIj5TZXR1cCBwYWdlPC9oMz4KCgk8cD5DbGlja2luZyBTZXR1cCBmcm9t IHRoZSBtYWluIDxhIGhyZWY9IiNsaXN0cGFnZSI+bGlzdDwvYT4gcGFnZSBhbGxvd3MgYWNj ZXNzIHRvIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuPC9wPgoKCTxwPllvdSBjYW4gSW5zdGFs bCB0aGVtICYjODIxMjsgd2hpY2ggcmV0YWlucyBhbnkgcHJldmlvdXMgc2V0dGluZ3MgYW5k IGFkZHMgbmV3IG9uZXMgd2hlbiB1cGRhdGluZyB0aGUgcGx1Z2luICYjODIxMjsgb3IgRGVs ZXRlIHRoZW0uIFRoZSBwbHVnaW4gY2hlY2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNl cyBhcmUgYXZhaWxhYmxlIGFuZCBvZmZlcnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcv cmVpbnN0YWxsaW5nIGluIGNhc2UgdGhlIHByZWZzIGJlY29tZSBjb3JydXB0ZWQgb3IgbmVl ZCB1cGRhdGluZy48L3A+CgoJPHA+T25jZSB0aGUgcHJlZnMgYXJlIGluc3RhbGxlZCB5b3Ug d2lsbCBzZWUgdGhlIGF2YWlsYWJsZSBvcHRpb25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJv bmc+UGx1Z2luIGVkaXRvcjwvc3Ryb25nPiA6IHlvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhl IGNvZGUgdXNpbmcgYSAzcmQgcGFydHkgc3ludGF4IGhpZ2hsaWdodGVyLiBDdXJyZW50IHN1 cHBvcnQgaXMgZm9yIEVkaXQgQXJlYSBhbmQgKHNvcnQgb2YpIENvZGVQcmVzcyAoc2VlIHRo ZSA8YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPikuIENob29zZSB0aGUgc3lzdGVtIGhlcmUs IHdoZXJlYnkgdGhlIGJveCBiZW5lYXRoIGJlY29tZXMgYXZhaWxhYmxlIHNvIHlvdSBjYW4g c3BlY2lmeSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGF0aCBvZiB0aGUg RWRpdEFyZWEgaW5zdGFsbGF0aW9uIG9uIHlvdXIgc2VydmVyOyB0aGlzIGlzIG5vcm1hbGx5 IGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyAvZWRpdF9hcmVhLiBObyB0cmFpbGlu ZyBzbGFzaCBpcyByZXF1aXJlZDwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGVkaXRvciB3 aWR0aDwvc3Ryb25nPiA6IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aWRlIHRvIG1ha2Ug dGhlIGJveGVzIG9uIHRoZSA8YSBocmVmPSIjZWRpdHBhZ2UiPkVkaXQ8L2E+IHBhZ2UgdG8g c3VpdCB5b3VyIHNjcmVlbiByZXNvbHV0aW9uPC9saT4KCQk8bGk+PHN0cm9uZz5IZWxwIGVk aXRvcjwvc3Ryb25nPiA6IHlvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhlIGhlbHAgbWFudWFs bHkgdmlhIFRleHRpbGUgb3IgdXNlIFRpbnlNQ0UgZm9yIGEgbW9yZSA8c3BhbiBjbGFzcz0i Y2FwcyI+V1lTSVdZRzwvc3Bhbj4gZXhwZXJpZW5jZS4gVGhpcyBpcyBleHBlcmltZW50YWwg YW5kIHByb2JhYmx5IHdvbiYjODIxNzt0IHdvcmsgcmlnaHQgbm93PC9saT4KCQk8bGk+PHN0 cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBleHBvcnQgb3JkZXI8L3N0cm9u Zz4gOiB3aGVuIHNhdmluZyB5b3VyIHBsdWdpbiBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUg Zm9ybWF0LCB0aGlzIGdvdmVybnMgd2hldGhlciB5b3UgcHJlZmVyIHRoZSBjb2RlIGJsb2Nr IHRvIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgYW5kIHRoZSBoZWxwIGJsb2NrIGJlbG93 LCBvciB2aWNlIHZlcnNhPC9saT4KCTwvdWw+CgoJPHA+VGhlIG5leHQgdGhyZWUgdGV4dGJv eGVzIGFyZSBhbGwgdmVyeSBzaW1pbGFyOyB0aGV5IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRo ZSBmaWxlbmFtZXMgd2hlbiB5b3UgZXhwb3J0IHBsdWdpbnMuIFRoZSBmaXJzdCBpcyBmb3Ig d2hlbiB5b3UgZXhwb3J0IHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj5CQVNFPC9zcGFu Pi02NCBwbHVnaW5zOyB0aGUgc2Vjb25kIGlzIGZvciBjb21wcmVzc2VkIHBsdWdpbnM7IHRo ZSB0aGlyZCBpcyBmb3IgZXhwb3J0aW5nIGEgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMi PlBIUDwvc3Bhbj4gdGVtcGxhdGUuPC9wPgoKCTxwPldoZXJldmVyIHlvdSB0eXBlIDxjb2Rl PntuYW1lfTwvY29kZT4sIHRoZSBwbHVnaW4gbmFtZSB3aWxsIGFwcGVhci4gU2ltaWxhcmx5 LCA8Y29kZT57dmVyc2lvbn08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY3Vy cmVudCBwbHVnaW4gdmVyc2lvbiBudW1iZXIuIFlvdSBjYW4gdHlwZSBhbnl0aGluZyB5b3Ug bGlrZSBpbiB0aGVzZSBib3hlcywgYnV0IGl0JiM4MjE3O3MgbW9yZSB1c2VmdWwgdG8gaW5j bHVkZSBib3RoIG9mIHRoZSByZXBsYWNlbWVudCBzdHJpbmdzIHNvbWV3aGVyZSBpbiBlYWNo IGJveCBzbyB5b3UgZG9uJiM4MjE3O3QgZ2V0IG5hbWUgLyB2ZXJzaW9uIGNsYXNoZXMuPC9w PgoKCTxwPkZvciBleGFtcGxlLCBpZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgZmFjdCB0 aGF0IHppcHBlZCBwbHVnaW5zIGFyZSBleHBvcnRlZCBhcyA8Y29kZT5wZnhfbXlfcGx1Z2lu X3YwLjFfemlwLnR4dDwvY29kZT4sIHlvdSBjYW4gY2hhbmdlIGl0LiBQZXJoYXBzIHlvdSBt YXkgcHJlZmVyIDxjb2RlPnBmeF9teV9wbHVnaW4tY29tcHJlc3NlZC0wLjEudHh0PC9jb2Rl Pi4gSW4gd2hpY2ggY2FzZSwgc2V0IHRoZSAybmQgYm94IHRvIDxjb2RlPntuYW1lfS1jb21w cmVzc2VkLXt2ZXJzaW9ufS50eHQ8L2NvZGU+LjwvcD4KCgk8cD5UaGUgZXh0ZW5zaW9uIHNo b3VsZCB1c3VhbGx5IGJlIHNwZWNpZmllZCBzbyB5b3VyIHN5c3RlbS9icm93c2VyIGtub3dz IHRoZSBmaWxlJiM4MjE3O3MgdHlwZSB3aGVuIGl0IGlzIGV4cG9ydGVkLCBidXQgaXQmIzgy MTc7cyBub3QgbWFuZGF0b3J5IGFzIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+TUlNRTwvc3Bh bj4gdHlwZSBpcyBnaXZlbiBzbyAoZ29vZCkgYnJvd3NlcnMgc2hvdWxkIHJlYWQgdGhhdC48 L3A+CgoJPHA+RmluYWxseSwgaWYgeW91IHdpc2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaGVs cCBjYWNoZWluZywgcHV0IHRoZSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0 aGUgPHN0cm9uZz5DYWNoZSBkaXI8L3N0cm9uZz4gYm94LiBFbXB0eSB0aGUgYm94IGlmIHlv dSBwcmVmZXIgc2F2ZXMgYW5kIGV4cG9ydHMgdG8gYmUgc2xvd2VyISBEZWZhdWx0cyB0byA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHRlbXBvcmFyeSBkaXJlY3Rv cnkuPC9wPgoKCTxoMyBpZD0ibm90ZXMiPk5vdGVzIC8ga25vd24gaXNzdWVzPC9oMz4KCgk8 b2w+CgkJPGxpPk1vcmUgZWRpdG9ycyBjYW4gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBDb21w b3NlciBmYWlybHkgZWFzaWx5LiBJZiB5b3UgZmluZCBhIGdvb2Qgb25lLCBnZXQgaW4gY29u dGFjdC4gQmUgd2FybmVkIHRoYXQgdGhlIGVkaXRvcnMgZG8gdGVuZCB0byBzbG93IHRoZSBw bHVnaW4gZG93biwgZXNwZWNpYWxseSBhcyBjb2RlIHNpemUgaW5jcmVhc2VzLjwvbGk+CgkJ PGxpPlRlbnRhdGl2ZSBzdXBwb3J0IGZvciBDb2RlUHJlc3MgaXMgYXZhaWxhYmxlIGJ1dCBp dCBpbmV4cGxpY2FibHkgYmxhbmtzIG91dCB0aGUgcGx1Z2luIGNvZGUgd2hlbiBzYXZlZCwg c28gc3VwcG9ydCBpcyBkaXNhYmxlZCBmb3Igbm93LiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55 IGxpZ2h0IG9uIHdoeSBpdCBkb2VzIHRoaXMsIHBsZWFzZSBzcGVhayB1cCEgTG9vayBpbiB0 aGUgaWVkX3BsdWdpbl9zZXR1cCgpIGZ1bmN0aW9uIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0 aGUgZmlsZSwgdW5jb21tZW50IHRoZSBjb21tZW50ZWQgb3V0IGxpbmUgYW5kIGNvbW1lbnQg b3V0IHRoZSBvbmUgYmVuZWF0aCBpdCB0byBlbmFibGUgc3VwcG9ydCwgdGhlbiB2aXNpdCB0 aGUgU2V0dXAgcGFnZSBhbmQgc2VsZWN0IENvZGVQcmVzcyBmcm9tIHRoZSBsaXN0LiBEb24m IzgyMTc7dCBleHBlcmltZW50IHdpdGggdGhpcyBzZXR0aW5nIG9uIGFuIGltcG9ydGFudCBw bHVnaW4gOi0pPC9saT4KCQk8bGk+V2hlbiBhIHBsdWdpbiBpcyBzYXZlZCB0byB0aGUgcGx1 Z2luX2NhY2hlX2RpciwgaWYgeW91IGhhdmUgbm90IHB1dCA8Y29kZT4mbHQ7c3R5bGUmZ3Q7 PC9jb2RlPiBtYXJrZXJzIGluIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4g YmxvY2sgdGhleSB3aWxsIGJlIGFkZGVkIGZvciB5b3UgaW4gdGhlIHRleHQgYXJlYSBidXQg PGVtPm5vdDwvZW0+IHNhdmVkIGluIHRoZSBhY3R1YWwgdGVtcGxhdGUgdW50aWwgeW91IHNh dmUgaXQgYWdhaW4gKGV4cG9ydGluZyBhcyBhIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3Nw YW4+IGZpbGUgaXMgdW5hZmZlY3RlZCkuIFNvIGlmIHlvdSBhcmUgaW4gdGhlIGhhYml0IG9m IG1hbnVhbGx5IGRvd25sb2FkaW5nIHRoZSBmaWxlIGZyb20geW91ciA8c3BhbiBjbGFzcz0i Y2FwcyI+RlRQPC9zcGFuPiBjbGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBzYXZlLCBqdXN0 IHNhdmUgdGhlIHBsdWdpbiBhZ2FpbiB0byBiZSBzdXJlPC9saT4KCTwvb2w+CgoJPGgzIGlk PSJ3cml0aW5nIj5Xcml0aW5nIGEgcGx1Z2luPC9oMz4KCgk8cD5Zb3Ugc2hvdWxkIGJlIGF3 YXJlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0 b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2luIEF1dGhvciBSZXNvdXJjZXM8L2E+IHRvcGljIG9u IHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0IEZvcnVtLCBhbmQgeW91IG1pZ2h0IGFsc28gd2Fu dCB0byBoYXZlIGEgbG9vayBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYu dWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0Ij5UZXh0UGF0dGVybiBwbHVnaW4gY2hlYXQgc2hl ZXQ8L2E+IGFuZCB0aGUgdHV0b3JpYWxzIGFuZCBndWlkZXMgZm9yIDxhIGhyZWY9Imh0dHA6 Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9RXh0ZW5kaW5nX1RleHRw YXR0ZXJuIj5FeHRlbmRpbmcgVGV4dHBhdHRlcm48L2E+IG9uIFRleHRCb29rLjwvcD4KCgk8 cD5IYXBweSBwbHVnaW4gYXV0aG9yaW5nIDotKTwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxvZyI+ Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjI1IEZlYiAwNiB8IDAuMSB8IEluaXRpYWwg cmVsZWFzZTwvbGk+CgkJPGxpPjI1IEZlYiAwNiB8IDAuMiB8IEFkZGVkICYjODIxNjtzYXZl IGFzJiM4MjE3OyBvcHRpb248L2xpPgoJCTxsaT4xNyBNYXIgMDYgfCAwLjMgfCBBZGRlZCAm IzgyMTY7c2F2ZSBhcyBwaHAmIzgyMTc7PC9saT4KCQk8bGk+MTAgQXByIDA2IHwgMC40IHwg QWRkZWQgc3VwcG9ydCBmb3IgcGx1Z2luX2NhY2hlX2RpcjwvbGk+CgkJPGxpPjA0IEphbiAw OCB8IDAuNSB8IEZ1bGwgc3VwcG9ydCBmb3Igc3RkIHRlbXBsYXRlOyBjb21wcmVzc2VkIHBs dWdpbnM7IExpYnJhcnkgcGx1Z2luczsgVGV4dGlsZSBoZWxwIGFuZCBzdHlsaW5nOyBpbnRl Z3JhdGlvbiB3aXRoIG5ldC1jYXJ2ZXImIzgyMTc7cyBQbHVnaW4gSGVscCBWaWV3ZXI8L2xp PgoJCTxsaT4wNyBKYW4gMDggfCAwLjYgfCBCdWlsdC1pbiBoZWxwIHZpZXdlciAodGhhbmtz IG5ldC1jYXJ2ZXIpOyBzdXBwb3J0IGZvciBFZGl0IEFyZWEgJmFtcDsgQ29kZVByZXNzKGlz aCkgKHRoYW5rcyB2YXJpYWFzKTsgSGVscCBibG9jay9Db2RlIGJsb2NrIHBvc2l0aW9uIHN3 aXRjaGFibGUgb24gZXhwb3J0OyBhZGRlZCBTZXR1cCBwcmVmcyBwYWdlOyBsaW5lIGJyZWFr L3N0eWxlIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+MDggSmFuIDA4IHwgMC43IHwgUmUtaW1wb3J0 aW5nIHBsdWdpbnMgbm93IHJldGFpbnMgc3R5bGUgYmxvY2s7IGFkZGVkICYjODIxNjthZG1p biBzaWRlIHBsdWdpbiB3aXRoIHB1YmxpYy1zaWRlIHR5cGUmIzgyMTc7IHdhcm5pbmc7IGNo YW5nZWQgYnV0dG9uIHN0eWxpbmcgYW5kIHBvc2l0aW9ucyAoYWxsIHRoYW5rcyBuZXQtY2Fy dmVyKTsgZ1R4dCgpIHByZWYgbGFiZWxzIGFuZCAmIzgyMTY7aW50ZWxsaWdlbnQmIzgyMTc7 IHByZWZzIChnbyBqUXVlcnkgZ28hKTsgY2FjaGVkIHBsdWdpbnMgbm93IGFsc28gaGF2ZSBk aXJlY3QgZXhwb3J0IGZyb20gRWRpdCBwYWdlOyAmIzgyMTY7ZG9uJiM4MjE3O3QgdGV4dGls ZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4mIzgyMTc7IGNoZWNrOyBtaW5vciBi dWdmaXhlczwvbGk+CgkJPGxpPjA5IEphbiAwOCB8IDAuNzEgfCBUZXh0YXJlYSB3aWR0aCBj YW4gbm93IGJlIGNvbnRyb2xsZWQgZnJvbSBwcmVmcywgYW5kIGhlaWdodCBmcm9tIGEgZHJh ZyBiYXI7IGRlZmF1bHQgd2lkdGggaW5jcmVhc2VkIHRvIDExMCBjaGFyczsgcHVibGlzaCBw bHVnaW5zIGZyb20gdGhlIGxpc3QgcGFnZTsgSW5zdGFsbCBidXR0b24gcmVtb3ZlZCB3aGVu IHByZWZzIGFsbCBjb3JyZWN0bHkgaW5zdGFsbGVkIChhbGwgdGhhbmtzIHZhcmlhYXMgLyBp Ymxhc3RvZmYpPC9saT4KCQk8bGk+MTAgSmFuIDA4IHwgMC43MiB8IEZpeGVkIGJ1ZyBpZiBw bHVnaW4gaGFzIG5vIGhlbHA7IHN0eWxlIHNlY3Rpb24gbm8gbG9uZ2VyIHN0b3JlZC9leHBv cnRlZCBpZiBpdCYjODIxNztzIG5vdCBpbiB1c2UgKHRoYW5rcyB0aGVfZ2hvc3QgLyBpYmxh c3RvZmYpPC9saT4KCQk8bGk+MTEgSmFuIDA4IHwgMC43MyB8IEFkZGVkIHN1cHBvcnQgZm9y IDxlbT5yZWFkaW5nPC9lbT4gYW4gb3B0aW9uYWwgcmV2aXNpb24gZnJvbSB0aGUgdGVtcGxh dGUgcGFyc2VyIGFuZCBhcHBlbmRpbmcgaXQgdG8gdGhlIHZlcnNpb24gKHRoYW5rcyBuZXQt Y2FydmVyKTsgbW9yZSBnVHh0KCkgc3RyaW5ncyBjb252ZXJ0ZWQ8L2xpPgoJCTxsaT4yOCBN YXIgMDggfCAwLjc0IHwgRml4ZWQgZW1wdHkgcGx1Z2luIGNvZGUgaWYgU3R5bGUgYmxvY2sg bGVmdCBibGFuayA7IGZpeGVkIHN0cmlwL3NsYXNoL2VuY29kaW5nIGVycm9ycyAodGhhbmtz IHRoZV9naG9zdC9ydXVkKSA7IGZpeGVkIGNybGYgbmV3bGluZXMgaW4gY29kZSBibG9jayAo dGhhbmtzIGhha2pvb24vcnV1ZCk8L2xpPgoJCTxsaT4yOCBNYXkgMDggfCAwLjc1IHwgQWRk ZWQgJiM4MjE2O21vZGlmaWVkJiM4MjE3OyB0byB0aGUgVmVyc2lvbiBjb2x1bW4gKHRoYW5r cyB1bGkpIDsgYWRkZWQgYWJpbGl0eSB0byByZW5hbWUgZmlsZXMgaW4gdGhlIHBsdWdpbiBj YWNoZSBkaXIgd2hlbiB0aGUgdmVyc2lvbiBjaGFuZ2VzPC9saT4KCQk8bGk+MDMgTm92IDA4 IHwgMC44IHwgQWRkZWQgc3VwcG9ydCBmb3IgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3Jk ZXIgOyBhZGRlZCBBZG1pbi1vbmx5IHBsdWdpbiB0eXBlOyBhZGRlZCBhYmlsaXR5IHRvIG92 ZXJyaWRlIGZpbGVuYW1lIGZvcm1hdCBvbiBleHBvcnQgOyBhZGRlZCByZXN0b3JlIHBvaW50 L3JvbGxiYWNrICh0aGFua3MgbWF2ZXJpY2spIDsgYWRkZWQgY2hhcmFjdGVyIGNvdW50ICh0 aGFua3MgcGVwZWJlKSA7IHJhdGlvbmFsaXNlZCB0aGUgbGlzdCBhbmQgZWRpdCBwYWdlcyA7 IHNwZWQgdXAgZXhwb3J0L3NhdmUgcm91dGluZXMgOyBmaXhlZCBhIGZldyBjb3JuZXIgY2Fz ZSBidWdzIChlLmcuIGVtcHR5IHBsdWdpbiBuYW1lLCBtaXNzaW5nIHF1b3RlcyBpbiB0ZW1w bGF0ZSBvcHRpb25zKTwvbGk+CgkJPGxpPjAzIEphbiAwOSB8IDAuODEgfCBBZGRlZCB0ZXh0 aWxlIGNhY2hlaW5nIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2l0aCBsYXJnZSBoZWxwIGZp bGVzIDsgcHJvZmlsZWQgY29kZSBhbmQgaW1wcm92ZWQgc3BlZWQgaW4gdmFyaW91cyBmdW5j dGlvbnM8L2xpPgoJCTxsaT4yMyBGZWIgMDkgfCAwLjgyIHwgQ2FuIG5vdyBjcmVhdGUgbmV3 IHRlbXBsYXRlIGZpbGVzIG9uIHRoZSBmbHkgKHRoYW5rcyBhencpIDsgZml4ZWQgVGV4dGls ZSBsaW1pdCBvbiBsYXJnZSBoZWxwIGZpbGVzIDsgZml4ZWQgZGF0YWJhc2UgY2FsbHMgZm9y IE15U1FMIHN0cmljdCBtb2RlICh0aGFua3MgR29jb20gLyBhencpPC9saT4KCQk8bGk+MTEg QXByIDA5IHwgMC44MyB8IEZpeGVkIGhlbHAgZmlsZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NT PC9zcGFuPiBvdXRwdXQgc28gaXQgdmFsaWRhdGVzIDsgdXNlIDxjb2RlPiRwcmVmczwvY29k ZT4gaW5zdGVhZCBvZiA8Y29kZT4kR0xPQkFMUzwvY29kZT4gaW50ZXJuYWxseSA7IGNoZWNr IGlmIHBsdWdpbl9jYWNoZV9kaXIgZXhpc3RzIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0IG9u IHRoZSBsaXN0IHBhZ2U8L2xpPgoJCTxsaT4yOSBBdWcgMDkgfCAwLjkgfCBSZXF1aXJlcyA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjIuMCsgOyBhZGRlZCBzdXBwb3J0IGZv ciBwbHVnaW4gcHJlZnMvbGlmZWN5Y2xlIGFuZCBsYXJnZXIgcGx1Z2luIGNvZGUgOyBmaXhl ZCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBkZWxpbWl0ZXIgZm9yIGJhY2t3YXJk cyBjb21wYXRpYmlsaXR5IDsgbmV3IHBsdWdpbiB0ZW1wbGF0ZSBkZXRhaWxzIHVzZWQ8L2xp PgoJCTxsaT4xMSBGZWIgMTAgfCAwLjkxIHwgQWRkZWQgSnVtcCBUbyBMaW5lIGNhcGFiaWxp dHkgJiM4MjEyOyBpbiBtb3N0IGJyb3dzZXJzICh0aGFua3MgdGhlYm9tYnNpdGUpPC9saT4K CQk8bGk+MDMgTm92IDEwIHwgMC45MiB8IEZpeGVkIE9wdGlvbnMgbGluayBmb3IgcGx1Z2lu cyBmcm9tIGNhY2hlIGRpciBhbmQgZml4ZWQgZXNjYXBpbmcgb2YgZXhwb3J0ZWQgcGhwIGZp bGVzIChib3RoIHRoYW5rcyBtYW5pcXVpKSA7IGZpeGVkIGVzY2FwaW5nIHdoZW4gaW1wb3J0 aW5nIGZyb20gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSA7IGNvc21ldGlj IHR3ZWFrcyAocGx1Z2luX2NhY2hlX2RpciBzZWN0aW9uIG9ubHkgZGlzcGxheWVkIGlmIHRo ZXJlIGFyZSB2YWxpZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlcywgYW5k IFZpZXcgSGVscCBsaW5rIGFkanVzdGVkKSA7IGZpeGVkIGpRdWVyeSBvbiBzZXR1cCBwYW5l bCA7IGV4dGVuZGVkIHJlc2l6ZXIgY29va2llIHRvIG9uZSB5ZWFyIGV4cGlyeTwvbGk+CgkJ PGxpPjIzIE5vdiAxMCB8IDAuOTMgfCBGaXhlZCBzZXR1cCBzY3JlZW4gJiM4MjE2O3VuZGVm aW5lZCYjODIxNzsgYnVnICh0aGFua3MgTWFyY29LKTwvbGk+Cgk8L3VsPgoKPC9kaXY+Cjwh LS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3Mi PgojaWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIC5pbXBvcnRhbnQg e2NvbG9yOnJlZDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDog MTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3Vu ZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojaWVkX2hlbHAgY29kZS5ibG9jayB7 IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpi bG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KdGV4dC1kZWNv cmF0aW9uOnVuZGVybGluZTt9CiNpZWRfaGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI2llZF9oZWxw IGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAw OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI2llZF9oZWxwIGgzIHsgZm9u dDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBt YXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiNpZWRfaGVscCBo NCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6 IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNp ZWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI2llZF9oZWxwIC5tYW5kIHsg YmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNpZWRfaGVscCB0 YWJsZSB7IHdpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFl bTsgfQojaWVkX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7IGJvcmRlcjoxcHggc29saWQgIzk5 OTsgcGFkZGluZzouNWVtIDA7IH0KI2llZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNx dWFyZTsgfQojaWVkX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI2ll ZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVO RCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiNjFhYjQ0ZTQ2ZWMyNzA3 N2UxNDNiMmZmYjUwZmYyMTQiO30=