# Name: ied_plugin_composer v0.92 # 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 ZXJzaW9uIjtzOjQ6IjAuOTIiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjUwOiJDcmVhdGUgYW5k IHB1Ymxpc2ggcGx1Z2lucyBmcm9tIHRoZSBUWFAgYWRtaW4gc2lkZSI7czo0OiJjb2RlIjtz OjU3NTE3OiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ2ll 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 cnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCIuaWVkX3BsdWdpbl9zZXR1cCBzZWxlY3QiKS5l YWNoKGZ1bmN0aW9uKG9iaikgew0KCQl2YXIgaXRlbSA9IGpRdWVyeSh0aGlzKTsNCgkJaWVk X3BsdWdpbl9wcmVmc3dhcChpdGVtLmF0dHIoJ2lkJyksIGl0ZW0uYXR0cigndmFsJykpOw0K CX0pOw0KfSk7DQo8L3NjcmlwdD4NCkVPRjsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwgJGll ZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoICgkaWVkX3BsdWdp bl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoIWZldGNoKCduYW1lJywn dHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhw X3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLics IHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7 DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IGllZF9wbHVnaW5f Z1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCWllZF9wbHVnaW5fc2V0dXAoJycsJycsJG1l c3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVm c19yZW1vdmUoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsN CgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVhY2ggKGFycmF5X21lcmdlKCRpZWRfcGx1Z2luX3By ZWZzWzBdLCRpZWRfcGx1Z2luX3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlp ZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsNCgkJCSRpZCA9 IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVm KSkpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBpZWRfcGx1 Z2luX2dUeHQoJ3ByZWZzX2RlbGV0ZWQnKTsNCgkJaWVkX3BsdWdpbl9zZXR1cCgnJywnJywk bWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3By ZWZzX3VwZGF0ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2Ug PSAnJzsNCgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOw0KCWZvcmVhY2ggKCRpZWRf cGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9z dFskcHJlZl0pKSB7DQoJCQlzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLiRw b3N0WyRwcmVmXS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHByZWZz X2lkID0gMSIpOw0KCQl9DQoJfQ0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2 ZWQnKTsNCglpZWRfcGx1Z2luX3NldHVwKCcnLCcnLCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkp IHsNCgkkbGFuZyA9IGFycmF5KA0KCQknY2FjaGVfbm90X3NldCcgPT4gJ0FkdmFuY2VkIHBy ZWYgInBsdWdpbiBjYWNoZSBkaXJlY3RvcnkiIG5vdCBkZWZpbmVkJywNCgkJJ2NoZWNrX3R5 cGUnID0+ICdDaGVjayB5b3VyIHBsdWdpbiB0eXBlIScsDQoJCSdjaG9vc2VfZmlsZScgPT4g J1lvdSBhcmUgc3VwcG9zZWQgdG8gY2hvb3NlIHRoZSBmaWxlIDspJywNCgkJJ2NvZGVfZGlz dCcgPT4gJ1BsdWdpbiBjb2RlPGJyPmZvciBkaXN0cmlidXRpb24nLA0KCQknaWVkX3BsdWdp bl9jb21wb3NlcicgPT4gJ1BsdWdpbiBDb21wb3NlcicsDQoJCSdjb21wcmVzcycgPT4gJ1pp cCcsDQoJCSdjcmVhdGVfbmV3JyA9PiAnQ3JlYXRlIG5ldyBwbHVnaW4nLA0KCQknZWRpdF9u ZXcnID0+ICdFZGl0IHlvdXIgbmV3IHBsdWdpbicsDQoJCSdlbmFibGUnID0+ICdFbmFibGVk JywNCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCBhcycsDQoJCSdmbGFnX2hhc19wcmVmcycgPT4g J0hhcyBwcmVmcycsDQoJCSdmbGFnX2xpZmVjeWNsZV9ub3RpZnknID0+ICdFdmVudCBub3Rp ZnknLA0KCQknZmxhZ3MnID0+ICdGbGFncycsDQoJCSdpZWRfcGx1Z2luX2VkaXRvcicgPT4g J1BsdWdpbiBlZGl0b3InLA0KCQknaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcgPT4gJ1BsdWdp biBlZGl0b3IgcGF0aCBVUkwnLA0KCQknaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnID0+ICdQ bHVnaW4gZWRpdG9yIHdpZHRoIChjaGFycyknLA0KCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRv cicgPT4gJ0hlbHAgZWRpdG9yJywNCgkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCcg PT4gJ0hlbHAgZWRpdG9yIHBhdGggVVJMJywNCgkJJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVy JyA9PiAnUEhQIGV4cG9ydCBvcmRlcicsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZScg PT4gJ0V4cG9ydCBwbHVnaW4gZmlsZW5hbWUgZm9ybWF0JywNCgkJJ2llZF9wbHVnaW5fb3V0 cHV0X3NmaWxlYycgPT4gJ0V4cG9ydCBjb21wcmVzc2VkIGZpbGVuYW1lIGZvcm1hdCcsDQoJ CSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICdQbHVnaW4gdGVtcGxhdGUgZmlsZW5h bWUgZm9ybWF0JywNCgkJJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJyA9PiAnQ2FjaGUg dGV4dGlsZWQgaGVscCBoZXJlJywNCgkJJ2p1bXBfdG9fbGluZScgPT4gJ0p1bXAgdG8gbGlu ZTonLA0KCQknbmFtZScgPT4gJ1BsdWdpbiBuYW1lJywNCgkJJ25hbWVfZmlyc3QnID0+ICdZ b3UgYXJlIHN1cHBvc2VkIHRvIG5hbWUgdGhlIHBsdWdpbiA7KScsDQoJCSduYW1lX3Rvb2x0 aXAnID0+ICdPbmx5IG5lZWRlZCBpZiB0aGUgUEhQIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcg aXMgTk9UIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQnLA0KCQknbG9hZF9vcmRl cicgPT4gJ0xvYWQgb3JkZXInLA0KCQknbG9hZF9vcmRlcl9oZWxwJyA9PiAnKDE9Zmlyc3Qs IDU9bm9ybWFsLCA5PWxhc3QpJywNCgkJJ291dHB1dF9jb2RlX2ZpcnN0JyA9PiAnQ29kZSBm aXJzdCcsDQoJCSdvdXRwdXRfaGVscF9maXJzdCcgPT4gJ0hlbHAgZmlyc3QnLA0KCQkncGx1 Z2luX2NvZGUnID0+ICdTb3VyY2UgY29kZScsDQoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJl ZmVyZW5jZXMgZGVsZXRlZCcsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNl cyBpbnN0YWxsZWQnLA0KCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2Vz IG5vdCBpbnN0YWxsZWQuJywNCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVu Y2VzIGF2YWlsYWJsZS4nLA0KCQkncHJlZnNfc29tZV9leHBsYWluJyA9PiAnSXQgaXMgZWl0 aGVyIGJlY2F1c2UgdGhpcyBpcyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZScuYnIuJ3Bs dWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUgb3IgdGhlIHByZWZlcmVuY2VzJy5ici4naGF2 ZSBiZWNvbWUgY29ycnVwdCBzb21laG93LicsDQoJCSdwcmVmc19zb21lX29wdGlvbnMnID0+ ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdU eHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwg ZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsDQoJCSdwcmVmc190aXRsZScgPT4g J1BsdWdpbiBDb21wb3NlciBwcmVmZXJlbmNlcycsDQoJCSdyZW5hbWVfZmFpbGVkJyA9PiAn IChyZW5hbWUgZmFpbGVkKSAnLA0KCQkncmVuYW1lX2ZpbGUnID0+ICdSZW5hbWUgZmlsZScs DQoJCSdyZW5hbWVkJyA9PiAnIChyZW5hbWVkKSAnLA0KCQkncmVzdG9yZV9oZWxwJyA9PiAn Um9sbCBiYWNrIHRoZSBwbHVnaW4gY29kZSB0byB0aGUgbW9zdCByZWNlbnQgcmVzdG9yZSBw b2ludCcsDQoJCSdyZXN0b3JlX3BvaW50JyA9PiAnUmVzdG9yZSBwb2ludCcsDQoJCSdyZXN0 b3JlX3ZlcmlmeScgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByb2xsYmFjayB0aGUg e25hbWV9IHNvdXJjZSBjb2RlIHRvIGl0cyBsYXN0IHJlc3RvcmUgcG9pbnQ/JywNCgkJJ3Jl c3RvcmVkJyA9PiAnUGx1Z2luIHtuYW1lfSByZXN0b3JlZC4nLA0KCQkncnVuX2Zyb20nID0+ ICdQbHVnaW5zIHRoYXQgcnVuIGZyb20nLA0KCQknc2F2ZV9hcycgPT4gJ1NhdmUgYXMnLA0K CQknc2V0dXAnID0+ICdTZXR1cCcsDQoJCSd0eXBlJyA9PiAnUGx1Z2luIHR5cGUnLA0KCQkn dHlwZV8wJyA9PiAnUHVibGljJywNCgkJJ3R5cGVfMScgPT4gJ0FkbWluICsgUHVibGljJywN CgkJJ3R5cGVfMicgPT4gJ0xpYnJhcnknLA0KCQkndHlwZV8zJyA9PiAnQWRtaW4nLA0KCQkn dXBsb2FkX3BocCcgPT4gJ1VwbG9hZCBwbHVnaW4gZnJvbSBQSFAgZmlsZScsDQoJCSd1dGls aXRpZXMnID0+ICdVdGlsaXRpZXMgKDxzdHJvbmc+dXNlIG9ubHkgYWZ0ZXIgc2F2aW5nIHRo ZSBkYXRhIGFib3ZlPC9zdHJvbmc+KScsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdo YXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1 IjtzOjU6ImZsYWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czozMDMyMzoiPGRpdiBpZD0iaWVk X2hlbHAiPgoKCTxoMT5JbnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxwPlRoaXMg cGx1Z2luIGNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVuc2lvbnMm IzgyMTc7IHRhYiB3aGVyZSB5b3UgY2FuIGVkaXQgYW5kIGV4cG9ydCBwbHVnaW5zIHRoYXQg YXJlIGFscmVhZHkgaW5zdGFsbGVkIGluIFRleHRwYXR0ZXJuLCBhcyB3ZWxsIGFzIGNyZWF0 ZSBvciB1cGxvYWQgbmV3IHBsdWdpbnMuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1 cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSwgZWRpdCBvciB1cGxvYWQgcGx1Z2luIGNv ZGUgYW5kIGRvY3VtZW50YXRpb24sIHRoZW4gcHVibGlzaCB5b3VyIHdhcmVzIGluIHRoZSBz dGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBwbHVnaW4gZm9ybWF0IChz ZWUgYW4gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9leGFtcGxl X3BsdWdpbl90ZW1wbGF0ZS50eHQiPmV4YW1wbGU8L2E+KTwvbGk+CgkJPGxpPkZ1bGwgc3Vw cG9ydCBmb3IgdGhlIG9mZmljaWFsIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9k b3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlLnR4dCI+emVtX3RwbC5waHAgcGx1Z2lu IHRlbXBsYXRlPC9hPi4gVGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3du bG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlX2NvZGVfZmlyc3QudHh0Ij5tb2RpZmllZCB2 ZXJzaW9uPC9hPiBieSA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0Y2FydmluZy5j b20vcGx1Z2lucy9tb2RpZmllZC1wbHVnaW4tY29tcGlsZXIiPm5ldC1jYXJ2ZXI8L2E+IGFs c28gaW5jb3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxlJiM4MjE3OyBzZWN0aW9uIGZvciBlYXN5 IHN0eWxpbmcgb2YgeW91ciBoZWxwIHRleHQuIFRoZSBQbHVnaW4gQ29tcG9zZXIgbG9va3Mg Zm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHNlY3Rpb25zIGluIHRoZSB0ZW1w bGF0ZSBhbmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRpbmdseS4gSXQgd2lsbCBhbHNvIHJlYWQg PHNwYW4gY2xhc3M9ImNhcHMiPlNWTjwvc3Bhbj4gJExhc3RDaGFuZ2VkUmV2aXNpb24gZW50 cmllcyAodGhhbmtzIG5ldC1jYXJ2ZXIpPC9saT4KCQk8bGk+RXhwb3J0IHBsdWdpbnMgaW4g YSB2YXJpZXR5IG9mIGZvcm1hdHMsIGFsbG93aW5nIHlvdSB0byBzd2l0Y2ggYmV0d2VlbiBl ZGl0aW5nIGluIHRoZSBwbHVnaW4gY29tcG9zZXIgb3IgeW91ciBmYXZvdXJpdGUgZWRpdGlu ZyBwcm9ncmFtLCB0ZXN0IHRoZSBmaWxlIGluIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCB0aGVu IGltcG9ydCBpdCBiYWNrIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0 aCB0aGUgaGVscCBvZiB0aGUgQ29tcG9zZXIgYW5kIHB1Ymxpc2ggeW91ciBwbHVnaW4gZm9y IGV2ZXJ5b25lLiBMb29rIGF0IHRoZSBib3R0b20gb2YgdGhlIFBsdWdpbiBDb21wb3NlciYj ODIxNztzIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdCBwYWdlPC9hPiBmb3IgdGhlIG9wdGlv bnM7IGp1c3QgcmVtZW1iZXIgdG8gc2F2ZSB5b3VyIGNoYW5nZXMgYmVmb3JlIGV4cG9ydGlu ZyBvciBjb3B5aW5nL3Bhc3RpbmcgdGhlIGNvZGUhIFlvdSBjYW4gZXhwb3J0IGFzOgoJPHVs PgoJCTxsaT5hIHN0YW5kYXJkIEJBU0U2NC1lbmNvZGVkIHRleHQgZmlsZTwvbGk+CgkJPGxp PmEgZ3ppcHBlZCB2ZXJzaW9uICh1c2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMpPC9saT4KCQk8 bGk+YSBwaHAgZmlsZSBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0PC9saT4KCTwv dWw+PC9saT4KCQk8bGk+V2hlbiBleHBvcnRpbmcsIGZpbGVzIGNhbiBiZSBzYXZlZCB3aXRo IGVpdGhlciB0aGUgY29kZSBibG9jayBmaXJzdCBvciB0aGUgaGVscCBibG9jayBmaXJzdCwg YW5kIHlvdSBjYW4gY2hhbmdlIHRoZSBvdXRwdXQgZmlsZW5hbWUgZm9ybWF0IHRvIHRhc3Rl LiBVc2UgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPlNldHVwIGJ1dHRvbjwvYT4gdG8gY29u ZmlndXJlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3IgYWxsIHBsdWdpbiB0eXBlczoKCTx1bD4K CQk8bGk+UHVibGljICsgQWRtaW48L2xpPgoJCTxsaT5QdWJsaWMtc2lkZSBvbmx5PC9saT4K CQk8bGk+QWRtaW4tc2lkZSBvbmx5PC9saT4KCQk8bGk+TGlicmFyeSBwbHVnaW5zPC9saT4K CTwvdWw+PC9saT4KCQk8bGk+U3VwcG9ydCBmb3Igc3BlY2lmeWluZyBhIHJlY29tbWVuZGVk IHBsdWdpbiBsb2FkIG9yZGVyIGlmIHlvdXIgcGx1Z2luIG5lZWRzIHNwZWNpYWwgcG93ZXJz LiAmIzgyMTY7NSYjODIxNzsgaXMgdGhlIGRlZmF1bHQuIE5vdGUgdGhhdCBpZiB1c2luZyB0 aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0aGlzIGZlYXR1cmUgaXMgPGVtPm9ubHkgYXZh aWxhYmxlIGlmIHRoZSA8Y29kZT4kcGx1Z2luWyYjMzk7b3JkZXImIzM5O108L2NvZGU+IHN0 cmluZyBpcyBpbiB0aGUgdGVtcGxhdGUgdG8gYmVnaW4gd2l0aC48L2VtPiBTbyBpZiB5b3Vy IGxvYWQgb3JkZXIga2VlcHMgcmV0dXJuaW5nIHRvICYjODIxNjs1JiM4MjE3OywgZWRpdCB5 b3VyIHRlbXBsYXRlIGRpcmVjdGx5IHRvIGFkZCB0aGF0IHN0cmluZyBvciBwYXN0ZSB5b3Vy IHBsdWdpbiBpbnRvIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgPGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5l bXB0eSBwbHVnaW4gdGVtcGxhdGU8L2E+IGFuZCB1cGxvYWQgaXQ8L2xpPgoJCTxsaT5IZWxw IHRleHQgY2FuIGJlIHdyaXR0ZW4gaW4gVGV4dGlsZSBvciAoWClIVE1MLiBTdHlsZXMgY2Fu IGJlIGFkZGVkIHRvIHRoZSBoZWxwIHNlY3Rpb248L2xpPgoJCTxsaT5UYWtlIGFkdmFudGFn ZSBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9w aWMucGhwP2lkPTEzMDg5Ij5UaW55TUNFIDxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9z cGFuPiBlZGl0b3I8L2E+IGZvciB0aGUgaGVscCBzZWN0aW9uIG9yIDxhIGhyZWY9Imh0dHA6 Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE2NDAw OCI+RWRpdCBBcmVhPC9hPiBmb3IgY29kZSBtYXJrdXAgKHRoYW5rcyB2YXJpYWFzKS4gU2Vl IHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cDwvYT4gYW5kIDxhIGhyZWY9IiNub3Rl cyI+bm90ZXM8L2E+IHNlY3Rpb25zIGZvciBtb3JlIG9uIHRoZXNlIGVkaXRvcnM8L2xpPgoJ CTxsaT5CdWlsdC1pbiBUZXh0aWxlIGhlbHAgdmlld2VyICh0aGFua3MgdG8gbmV0LWNhcnZl ciYjODIxNztzIDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9w bHVnaW5zL3BsdWdpbi1oZWxwLXZpZXdlciI+UGx1Z2luIEhlbHAgVmlld2VyPC9hPikgdG8g YWxsb3cgeW91IHRvIHByZXZpZXcgeW91ciBIZWxwIHRleHQgZHVyaW5nIGRldmVsb3BtZW50 ICh0aGUgdHdvIHZpZXdlcnMgd2lsbCBoYXBwaWx5IGNvLWV4aXN0IGlmIHlvdSB3aXNoKTwv bGk+CgkJPGxpPlJlc2l6YWJsZSB0ZXh0YXJlYSwgcGx1cyBjaGFyYWN0ZXIgbGltaXQvY291 bnRlcnMgc28gdGhlcmUmIzgyMTc7cyBsZXNzIGNoYW5jZSBvZiB5b3UgbWFraW5nIHRoZSBw bHVnaW4gb3IgZG9jcyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgZGF0YWJhc2U8L2xpPgoJCTxs aT5TdXBwb3J0IGZvciBzZXR0aW5nIGEgY29kZSAmIzgyMjA7cmVzdG9yZSBwb2ludCYjODIy MTsgYW5kIHJvbGxpbmcgYmFjayB0byB0aGF0IHBvaW50IGlmIHRoaW5ncyBnbyBzaWRld2F5 cy4gQWxzbyB1c2VmdWwgZm9yIHJldHVybmluZyBwbHVnaW4gc291cmNlIGNvZGUgdG8gaXRz IGFzLWluc3RhbGxlZCBzdGF0ZTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9ycyI+QXV0 aG9yczwvaDI+CgoJPHA+T3JpZ2luYWwgcGx1Z2luOiA8YSBocmVmPSJodHRwOi8vaW5zcGly ZWQua2lldi51YS9mZWVkYmFjay8iPll1cmEgTGlubnlrPC9hPjxiciAvPgpNb2RpZmljYXRp b25zICh2MC41Kyk6IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50Rm9y bSI+U3RlZiBEYXdzb248L2E+PGJyIC8+CkEgdG91Y2ggb2YgY2xhc3M6IDxhIGhyZWY9Imh0 dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9jb250YWN0Ij5TdGV2ZSBEaWNraW5z b248L2E+PGJyIC8+ClBsdXMgaGVscCBmcm9tIGEgaG9zdCBvZiBmb3J1bSBjb250cmlidXRv cnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24uIFlvdSBrbm93IHdobyB5b3UgYXJlIDstKTwv cD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9o Mj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiA0LjIuMCs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiAodjAuNSBh bmQgYWJvdmUpIGZyb20gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zdGVm ZGF3c29uLmNvbTwvYT4gKHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCBhdmFpbGFibGUg b24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRfcGx1Z2lu X2NvbXBvc2VyIj5JbnNwaXJlZCBob21lcGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29kZSBpbnRv IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5z IHBhZ2UsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UaGUgZGVm YXVsdCBwcmVmZXJlbmNlcyBhcmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGlmIHlvdSBpbnN0 YWxsIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIEFkbWluLSZn dDtQbHVnaW5zIHRhYi4gSWYgeW91IHVzZSB0aGUgcGx1Z2luX2NhY2hlX2RpciB5b3UgbmVl ZCB0byBjcmVhdGUgdGhlIHByZWZzIGJ5IGNsaWNraW5nIHRoZSBidXR0b24gb24gdGhlIFNl dHVwIHNjcmVlbi4gVmlzaXQgdGhlIEV4dGVuc2lvbnMgLSZndDsgUGx1Z2luIENvbXBvc2Vy IHRhYiBhbmQgY2xpY2sgdGhlIFNldHVwIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0IG9mIHRo ZSBzY3JlZW4gdG8gcmVpbnN0YWxsLCBkZWxldGUgYW5kIHNhdmUgdGhlIHBsdWdpbiBwcmVm ZXJlbmNlcy4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBzZWN0aW9uPC9h PiBmb3IgZGV0YWlscy48L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBQbHVnaW4gQ29tcG9zZXIg KG5vb29vISkgc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGFzIG5vcm1hbCBmcm9tIHRoZSBB ZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIEFsbCB0aGUgcHJlZmVyZW5jZXMgd2lsbCBhdXRv bWF0aWNhbGx5IGJlIHJlbW92ZWQgYXMgd2VsbC4gPHNwYW4gY2xhc3M9ImNhcHMiPk5PVEU8 L3NwYW4+OiBkZWxldGluZyB0aGUgcGx1Z2luIGZyb20gdGhlIHBsdWdpbiBjb21wb3NlciB3 aW5kb3cgaXRzZWxmIDxlbT53aWxsIG5vdDwvZW0+IGRlbGV0ZSB0aGUgcHJlZmVyZW5jZXMu PC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8aDMgaWQ9Imxpc3RwYWdlIj5M aXN0IHBhZ2U8L2gzPgoKCTxwPlRoZXJlIGlzIGEgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0 dXA8L2E+IGJ1dHRvbiB0byBhbGxvdyB5b3UgdG8gY29uZmlndXJlIHZhcmlvdXMgb3B0aW9u cyBpbiB0aGUgQ29tcG9zZXIsIHRoZSByZXN0IG9mIHRoZSBwYWdlIGxpc3RzIGFsbCBpbnN0 YWxsZWQgcGx1Z2lucy4gVGhlIGNvbHVtbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5QbHVnaW48L3NwYW4+IDogY2xpY2sgdGhlIHBsdWdpbiBuYW1lIHRv IDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdDwvYT4gaXQuIElmIHRoZSBwbHVnaW4gaGFzIHBy ZWZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCBpdCwgeW91IHdpbGwgYWxzbyBzZWUgYW4gPGVt PltPcHRpb25zXTwvZW0+IGxpbms8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXV0 aG9yPC9zcGFuPiA6IGlmIGF2YWlsYWJsZSwgY2xpY2sgdGhlIGF1dGhvciB0byBnbyB0byB0 aGVpciBzaXRlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZlcnNpb24gKE1vZGlm aWVkKTwvc3Bhbj4gOiBzaG93cyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciBhbmQgd2hl dGhlciB0aGUgcGx1Z2luIGhhcyBiZWVuIG1vZGlmaWVkIGZyb20gd2hlbiBpdCB3YXMgZWl0 aGVyIGNyZWF0ZWQgb3IgaW5zdGFsbGVkLiBJZiBpdCBoYXMsIHlvdSBjYW4gY2xpY2sgdGhl IHZlcnNpb24gbnVtYmVyIHRvIHJlc3RvcmUgdGhlIHBsdWdpbiBjb2RlIHRvIGl0cyBpbnN0 YWxsZWQgc3RhdGUgb3IgbGFzdCA8YSBocmVmPSIjcmVzdG9yZSI+cmVzdG9yZSBwb2ludDwv YT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVzY3JpcHRpb248L3NwYW4+IDog YnJpZWZseSwgd2hhdCB0aGUgcGx1Z2luIGRvZXM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+UHVibGlzaDwvc3Bhbj4gOiB0aHJlZSBsaW5rcwoJPHVsPgoJCTxsaT48ZW0+UHVi bGlzaDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgLnR4dCBmaWxlIGZvciBkaXN0 cmlidXRpb24gdG8gb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnM8L2xpPgoJCTxsaT48ZW0+Wmlw PC9lbT4gOiBleHBvcnRzIHRoZSBwbHVnaW4gYXMgYSBjb21wcmVzc2VkIChnemlwcGVkKSAu dHh0IGZpbGUgZm9yIGRpc3RyaWJ1dGlvbjwvbGk+CgkJPGxpPjxlbT5IZWxwPC9lbT4gOiBk aXNwbGF5cyB0aGUgKHRleHRpbGUgcHJvY2Vzc2VkKSBwbHVnaW4gZG9jdW1lbnRhdGlvbiwg aWYgdGhlcmUgaXMgYW55LiBDYW4gYWxzbyBiZSB2aWV3ZWQgZnJvbSB0aGUgRWRpdCBwYWdl PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9yZGVyPC9zcGFu PiA6IHRoZSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBmcm9tIDEgKGxvYWRlZCBm aXJzdCkgdG8gOSAobG9hZGVkIGxhc3QpLiA1IGlzIGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+QWN0aXZlPC9zcGFuPiA6IGVuYWJsZSBvciBkaXNhYmxlIGEgcGx1 Z2luIGJ5IGNsaWNraW5nIGVudHJpZXMgaW4gdGhpcyBjb2x1bW4gJiM4MjEyOyB0aGlzIHdp bGwgPGVtPm5vdDwvZW0+IHRyaWdnZXIgYW55IGVuYWJsZWQvZGlzYWJsZWQgbm90aWZpY2F0 aW9uIGV2ZW50IGluIHlvdXIgcGx1Z2luLiBVc2UgdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMg dGFiIGZvciB0ZXN0aW5nIHRoaXM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+eDwv c3Bhbj4gOiBkZWxldGUgdGhlIHBsdWdpbiAmIzgyMTI7IHRoaXMgd2lsbCA8ZW0+bm90PC9l bT4gdHJpZ2dlciB0aGUgJiM4MjE2O2RlbGV0ZWQmIzgyMTc7IG5vdGlmaWNhdGlvbiBldmVu dC4gVXNlIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHRhYiBmb3IgdGVzdGluZyB0aGlzPC9s aT4KCTwvdWw+CgoJPHA+SWYgeW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2NhY2hlX2RpciAo QWRtaW4gLSZndDsgQWR2YW5jZWQgUHJlZnMpLCBhbnkgcGx1Z2lucyBpbiB0aGUgc3RhbmRh cmQgdGVtcGxhdGUgZm9ybWF0IHVwbG9hZGVkIHRvIHRoaXMgZGlyZWN0b3J5IHdpbGwgYmUg YXZhaWxhYmxlIGltbWVkaWF0ZWx5IGZvciBlZGl0aW5nIGFuZCB0ZXN0aW5nLiBZb3UgY2Fu IGVkaXQgYW5kIHB1Ymxpc2ggdGhlIHBsdWdpbnMgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRo ZSByZWd1bGFyLCBpbnN0YWxsZWQgcGx1Z2lucyBhYm92ZSwgd2l0aCB0aGUgZm9sbG93aW5n IGV4Y2VwdGlvbnM6PC9wPgoKCTxvbD4KCQk8bGk+VGhlcmUgaXMgbm8gY29uY2VwdCBvZiAm IzgyMTY7bW9kaWZpZWQmIzgyMTc7IG9yIG9mIHJlc3RvcmUgcG9pbnRzIGFzIHRoZSBmaWxl cyBhbHdheXMgcmVwcmVzZW50IHRoZSBtb3N0IHVwLXRvLWRhdGUgdmVyc2lvbjwvbGk+CgkJ PGxpPkNhY2hlZCBwbHVnaW5zIGFyZSAmIzgyMjA7YWx3YXlzIG9uJiM4MjIxOyBhbmQgZG8g bm90IG5lZWQgdG8gYmUgaW5zdGFsbGVkLiBUbyBkZWFjdGl2YXRlIHRoZSBwbHVnaW4gdGhl IGZpbGUgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3Rvcnk8 L2xpPgoJCTxsaT5JdCBmb2xsb3dzIHRoYXQgdGhlICYjODIxNjtpbnN0YWxsZWQmIzgyMTc7 IG5vdGlmaWNhdGlvbiBldmVudCBpcyBub3QgdHJpZ2dlcmVkIGZyb20gcGx1Z2lucyBpbiB0 aGUgY2FjaGUgZGlyZWN0b3J5PC9saT4KCQk8bGk+VGhlIHJlY29tbWVuZGVkIGxvYWQgb3Jk ZXIgY2Fubm90IGJlIGNoYW5nZWQgZnJvbSB0aGUgbGlzdCBwYWdlOyBpdCBjYW4gb25seSBi ZSBhbHRlcmVkIHZpYSB0aGUgPGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0PC9hPiBwYWdlLiBU aGUgc3BlY2lmaWVkIGxvYWQgb3JkZXIgaXMgb25seSB3cml0dGVuIHRvIHRoZSBmaWxlIHdo ZW4gdGhlIHBsdWdpbiBpcyBleHBvcnRlZC4gTG9hZCBvcmRlciBpcyBhbHBoYWJldGljYWwg Zm9yIGFsbCBwbHVnaW5zIGluIHRoZSBwbHVnaW5fY2FjaGUgZGlyZWN0b3J5PC9saT4KCTwv b2w+CgoJPGgzPkNyZWF0aW5nIGFuZCBuYW1pbmcgcGx1Z2luczwvaDM+CgoJPHA+VGhlcmUg YXJlIHR3byB3YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJvbSB0aGUgUGx1Z2luIENvbXBv c2VyIGxpc3QgcGFnZS4gVGhlIGZpcnN0IGlzIHRvIGNyZWF0ZSBhIGJsYW5rLCBlbXB0eSBw bHVnaW47IHVzZSB0aGUgdGV4dCBib3ggYXQgdGhlIHRvcCBmb3IgdGhpcy4gUG9pbnRzIHRv IG5vdGU6PC9wPgoKCTx1bD4KCQk8bGk+SWYgeW91IHVzZSBhIHN0YW5kYXJkIHBsdWdpbiBu YW1lIChlLmcuIDxjb2RlPmFiY19teV9wbHVnaW48L2NvZGU+KSBpdCB3aWxsIGJlIGNyZWF0 ZWQgaW4gdGhlIGRhdGFiYXNlPC9saT4KCQk8bGk+SWYgeW91IGFkZCA8Y29kZT4ucGhwPC9j b2RlPiB0byB0aGUgcGx1Z2luIG5hbWUsIGl0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcGx1 Z2luIGNhY2hlIGRpcmVjdG9yeSBpbiBhIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdDwvbGk+ CgkJPGxpPkF2b2lkIHNwZWNpZnlpbmcgdGhlIHZlcnNpb24gb2YgdGhlIHBsdWdpbiBpbiB0 aGUgbmFtZSAmIzgyMTI7IHlvdSBzaG91bGQgdXNlIHRoZSA8ZW0+UmVuYW1lIGZpbGU8L2Vt PiBvciA8ZW0+RXhwb3J0PC9lbT4gb3B0aW9ucyBpbiB0aGUgRWRpdCBwYWdlIHRvIGFsdGVy IHRoZSBmaWxlbmFtZSBpbnRvIHlvdXIgcHJlZmVycmVkIGZpbGVuYW1lIGZvcm1hdCAoc2Vl IDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9hPik8L2xpPgoJPC91bD4KCgk8cD5UaGUg c2Vjb25kIG1ldGhvZCBvZiBjcmVhdGluZyBhIHBsdWdpbiBpcyB0byB1cGxvYWQgb25lIHVz aW5nIHRoZSBCcm93c2UvdXBsb2FkIGJveCBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBQ bGVhc2Ugbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5Zb3UgY2FuIHVwbG9hZCBjb2RlIGluIGVp dGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUgZm9ybWF0IChlaXRoZXIgY29kZS1maXJz dCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8 L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2FkIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBI UDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUgb25seTwvbGk+CgkJPGxpPlRoZSBwbHVn aW4gd2lsbCBhbHdheXMgYmUgaW5zdGFsbGVkIGluIHRoZSBkYXRhYmFzZSB3aGVuIHVzaW5n IHRoaXMgbWV0aG9kICh1cGxvYWQgdGhlIHRlbXBsYXRlIG1hbnVhbGx5IHZpYSA8c3BhbiBj bGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBvciBjcmVhdGUgYSBuZXcgb25lIHdpdGggYSAucGhw IGV4dGVuc2lvbiBhbmQgcGFzdGUgdGhlIGNvZGUgaW50byBpdCBpZiB5b3Ugd2FudCBpdCBp biB0aGUgcGx1Z2luIGNhY2hlKTwvbGk+CgkJPGxpPklmIHRoZSBwbHVnaW4gZXhpc3RzIGl0 IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHlvdXIgbmV3IGluZm88L2xpPgoJCTxsaT5UaGlzIGlz IHRoZSBvbmx5IHBsYWNlIHlvdSBjYW4gdXBsb2FkIHJhdyA8c3BhbiBjbGFzcz0iY2FwcyI+ UEhQPC9zcGFuPiB3aXRoIHRoZSA8Y29kZT4mbHQ7P3BocCA/Jmd0OzwvY29kZT4gbWFya2Vy cy4gRXZlcnl3aGVyZSBlbHNlIHlvdSBzaG91bGQgdXNlIGEgZnVsbCB0ZW1wbGF0ZTwvbGk+ Cgk8L3VsPgoKCTxwPkV2ZXJ5IHBsdWdpbiBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGEgdGhy ZWUtbGV0dGVyIHByZWZpeCwgYW4gdW5kZXJzY29yZSwgdGhlbiB0aGUgbmFtZSBvZiB0aGUg cGx1Z2luLiBZb3UgYXJlIGZyZWUgdG8gY2hvb3NlIHlvdXIgb3duIHRocmVlLWxldHRlciBw cmVmaXggKHVzdWFsbHkgeW91ciBpbml0aWFscykgc3ViamVjdCB0byA8YSBocmVmPSJodHRw Oi8vd3d3LnRleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1SZXNlcnZlZF9Q bHVnaW5fUHJlZml4ZXMiPmF2b2lkaW5nIG9uZXMgYWxyZWFkeSB0YWtlbiBieSBvdGhlciBw bHVnaW4gYXV0aG9yczwvYT4gc28gcGVvcGxlIGNhbiBnZXQgdG8ga25vdyB5b3VyIHdvcmsu IFBsdXMsIGl0IGdyb3VwcyB5b3VyIHBsdWdpbnMgdG9nZXRoZXIgaW4gdGhlIHBsdWdpbiBh cmNoaXZlLjwvcD4KCgk8cD5BbGwgZnVuY3Rpb25zLCB2YXJpYWJsZXMgKGluY2x1ZGluZyA8 c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9zcGFuPiBub2RlcyksIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+IGNsYXNzZXMsIGFuZCBhbnl0aGluZyBlbHNlIHlvdSBpbmplY3QgaW50 byB0aGUgZ2xvYmFsIHNjb3BlIHNob3VsZCBiZSBwcmVmaXhlZCBieSA8c3Ryb25nPmF0IGxl YXN0PC9zdHJvbmc+IHlvdXIgdGhyZWUgbGV0dGVyIGNvZGU7IHByZWZlcmFibHkgdGhlIHdo b2xlIHBsdWdpbiBuYW1lIChvciBhYnJpZGdlZCB2ZXJzaW9uIHRoZXJlb2YpIHRvIGF2b2lk IG5hbWVzcGFjZSBjbGFzaGVzIHdpdGggeW91ciBvd24gYW5kIG90aGVyIHBsdWdpbnMuPC9w PgoKCTxoMyBpZD0iZWRpdHBhZ2UiPkVkaXQgcGFnZTwvaDM+CgoJPHA+VGhlIEVkaXQgcGFn ZSBpcyB3aGVyZSB5b3UgY3JhZnQgeW91ciBtYXN0ZXJwaWVjZS4gSXQgaXMgZGl2aWRlZCBp bnRvIHZhcmlvdXMgc2VjdGlvbnMgYW5kIGJveGVzLCBhcyBkZXRhaWxlZCBoZXJlOjwvcD4K Cgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luPC9zdHJvbmc+IDogdGhlIG5hbWUgb2YgeW91 ciBwbHVnaW4sIHdoaWNoIHlvdSBjYW4gY2hhbmdlIGF0IGFueSB0aW1lLiBOb3RlIHRoYXQg aWYgeW91IGFyZSBlZGl0aW5nIGEgZmlsZSBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0 b3J5IGFuZCB0aGUgPGNvZGU+JHBsdWdpblsmIzM5O25hbWUmIzM5O108L2NvZGU+IHJvdyBp cyBjb21tZW50ZWQgb3V0IGluIHRoZSBmaWxlLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBj aGFuZ2UgdGhlIHBsdWdpbiBuYW1lOyBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgbmFtZSBvZiB0 aGUgZmlsZS48YnIgLz4KVG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94IHdpbGwgYmUgb25lIG9m IHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9uZz5FbmFibGU8L3N0cm9uZz4gOiBpZiB0 aGUgcGx1Z2luIGlzIGEgcmVndWxhciAoaW5zdGFsbGVkKSBwbHVnaW4sIHRoaXMgY2hlY2ti b3ggYWxsb3dzIHlvdSB0byBzd2l0Y2ggdGhlIHBsdWdpbiBvbiBhbmQgb2ZmLjwvbGk+CgkJ PGxpPjxzdHJvbmc+KGZpbGUgbmFtZSk8L3N0cm9uZz4gOiBpZiB5b3UgYXJlIGVkaXRpbmcg YSBwbHVnaW4gaW4gdGhlIGNhY2hlIGRpcmVjdG9yeSwgdGhlIGN1cnJlbnQgZmlsZW5hbWUg eW91IGFyZSB3cml0aW5nIHRvIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQuPC9saT4KCTwv dWw+PC9saT4KCQk8bGk+PHN0cm9uZz5Tb3VyY2UgY29kZTwvc3Ryb25nPiA6IHlvdXIgcGx1 Z2luIGNvZGUgZ29lcyBoZXJlLiBUaGUgYm94IGlzIHJlc2l6YWJsZSBieSBncmFiYmluZyB0 aGUgPGNvZGU+LS0tICsgLS0tPC9jb2RlPiBiZWxvdyB0aGUgYm94IGFuZCBkcmFnZ2luZy4g VGhlIGJveCBzaXplIHdpbGwgYmUgcmVtZW1iZXJlZCB2aWEgYSBjb29raWUgZm9yIG9uZSB5 ZWFyIGZyb20geW91ciBsYXN0IGFkanVzdG1lbnQuPGRpdiBjbGFzcz0iYnJlYWsiPlBsdWdp bnMgYXJlIGxpbWl0ZWQgdG8gMTZNYiBvZiBjb2RlIHNvIHRoZXJlIGlzIGFsc28gYSBjaGFy YWN0ZXIgY291bnRkb3duIGp1c3QgYmVsb3cgdGhlIGVkaXQgYm94LiBJZiB5b3Ugc3RhcnQg YXBwcm9hY2hpbmcgdGhlIGxpbWl0KCEpLCBpdCBtaWdodCBiZSB3b3J0aCBjb25zaWRlcmlu ZyBzcGxpdHRpbmcgeW91ciBwbHVnaW4gaW50byBhIGZldyBwYXJ0cyBvciB3b3JraW5nIGZv ciBNaWNybyRvZnQsIHdoZXJlIGNvZGUgYmxvYXQgaXMgYWNjZXB0YWJsZS48L2Rpdj48YnIg Lz4KPGRpdiBjbGFzcz0iYnJlYWsiPkluIEZpcmVmb3ggYW5kIElFNysgeW91IGNhbiB1c2Ug dGhlIDxlbT5KdW1wIHRvIGxpbmU6PC9lbT4gdGV4dGJveC4gRW50ZXIgYSBsaW5lIG51bWJl ciBhbmQgcHJlc3MgRW50ZXIgdG8ganVtcCB0byB0aGF0IGxpbmUgaW4gdGhlIGNvZGUuIElu IG90aGVyIGJyb3dzZXJzLCB5bW12LjwvZGl2PjwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2lu IHR5cGU8L3N0cm9uZz4gOiBjaG9vc2Ugb25lIG9mIHRoZSB0eXBlcyB0aGF0IGJlc3QgZml0 cyB0aGUgaW50ZW5kZWQgdXNlIG9mIHlvdXIgcGx1Z2luLiBJZiB5b3UgY2hvb3NlICYjODIx NjtQdWJsaWMmIzgyMTc7IGFuZCB0cnkgdG8gYWNjZXNzIHRoZSBhZG1pbiBzaWRlIGluIHlv dXIgY29kZSwgYSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkIHdoZW4gdGhlIHBsdWdpbiBpcyBz YXZlZCBzbyB5b3UgY2FuIGNob29zZSBhIG1vcmUgYXBwcm9wcmlhdGUgdHlwZS48L2xpPgoJ CTxsaT48c3Ryb25nPkZsYWdzPC9zdHJvbmc+IDogY2hvb3NlIHdoaWNoIHBsdWdpbiBmbGFn cyBhcmUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwbHVnaW46Cgk8dWw+CgkJPGxpPjxz dHJvbmc+SGFzIHByZWZzPC9zdHJvbmc+IDogY2hlY2sgdGhpcyB0byBpbmRpY2F0ZSB5b3Vy IHBsdWdpbiByZXNwb25kcyB0byB0aGUgPGVtPnBsdWdpbl9wcmVmcy55b3VyX3BsdWdpbl9u YW1lPC9lbT4gZXZlbnQuPC9saT4KCQk8bGk+PHN0cm9uZz5ldmVudCBub3RpZnk8L3N0cm9u Zz4gOiBjaGVjayB0aGlzIHRvIGluZGljYXRlIHlvdXIgcGx1Z2luIHJlc3BvbmRzIHRvIHRo ZSA8ZW0+cGx1Z2luX2xpZmVjeWNsZS55b3VyX3BsdWdpbl9uYW1lPC9lbT4gZXZlbnQvc3Rl cHMuPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHN0cm9uZz5Mb2FkIG9yZGVyPC9zdHJvbmc+ IDogY2hvb3NlIHRoZSByZWNvbW1lbmRlZCBvcmRlciBpbiB3aGljaCB5b3UgdGhpbmsgeW91 ciBwbHVnaW4gc2hvdWxkIGJlIGxvYWRlZCBieSB1c2Vycy4gTW9zdCBvZiB0aGUgdGltZSwg dGhlIGRlZmF1bHQgb2YgJiM4MjE2OzUmIzgyMTc7IGlzIGZpbmUgYnV0IGZvciBzcGVjaWFs IGNhc2VzIHdoZXJlIHlvdXIgcGx1Z2luIGhhcyB0byBzZXQgdXAgYW4gZW52aXJvbm1lbnQg b3IgaGFzIHRvIHdhaXQgZm9yIG90aGVyIHBsdWdpbnMgdG8gbG9hZCBmaXJzdCwgeW91IG1p Z2h0IHJlcXVpcmUgb25lIG9mIHRoZSBudW1iZXJzIGVpdGhlciBzaWRlLiBCZSBhd2FyZSB0 aGF0IHRoaXMgaXMgYSA8ZW0+cmVjb21tZW5kYXRpb248L2VtPiBhbmQgaXMgb3ZlcnJpZGFi bGUgYnkgdGhlIHNpdGUgYWRtaW4uIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkZXBsb3ll ZCBvbiBhIHNpdGUsIHRoZSBsb2FkIG9yZGVyIGFscmVhZHkgc2V0IHdpbGwgYmUgdXNlZCBy ZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFsdWUuIE9ubHkgbmV3IGluc3Rh bGxhdGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhpcyB2YWx1ZSBieSBkZWZhdWx0LjwvbGk+CgkJ PGxpPjxzdHJvbmc+VmVyc2lvbjwvc3Ryb25nPiA6IHRoZSBjdXJyZW50IHZlcnNpb24gb2Yg eW91ciBwbHVnaW4uIFRvIHRoZSByaWdodCBvZiB0aGlzIGJveCB3aWxsIGJlIG9uZSBvZiB0 d28gaXRlbXM6Cgk8dWw+CgkJPGxpPjxzdHJvbmc+UmVzdG9yZSBwb2ludDwvc3Ryb25nPiA6 IHNlbGVjdGluZyB0aGlzIGNoZWNrYm94IHdpbGwgKHVwb24gc2F2ZSkgc3RvcmUgdGhlIGN1 cnJlbnQgY29kZSBhcyBhIGJhc2VsaW5lIHRvIHdoaWNoIHlvdSBtYXkgJiM4MjIwO3JvbGwg YmFjayYjODIyMTsgdG8gYXQgYSBsYXRlciBkYXRlLiBTZWUgPGEgaHJlZj0iI3Jlc3RvcmUi PnJlc3RvcmUgcG9pbnRzPC9hPiBmb3IgbW9yZTwvbGk+CgkJPGxpPjxzdHJvbmc+UmVuYW1l IGZpbGU8L3N0cm9uZz4gOiBieSBkZWZhdWx0LCB3aGVuIHlvdSBzYXZlIGEgZmlsZSB0aGF0 IGlzIGJlaW5nIGVkaXRlZCBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSwgaXQgaXMg b3ZlcndyaXR0ZW4gd2l0aCB5b3VyIGNoYW5nZXMuIE9uY2UgYSBwbHVnaW4gaXMgcmVsZWFz ZWQgeW91IHdvdWxkIG5vcm1hbGx5IGRvd25sb2FkIGEgY29weSB2aWEgPHNwYW4gY2xhc3M9 ImNhcHMiPkZUUDwvc3Bhbj4gZnJvbSB0aGUgcGx1Z2luX2NhY2hlX2RpciBmb3Igc2FmZWtl ZXBpbmcuIElmIHlvdSB0aGVuIHN1YnNlcXVlbnRseSBtb2RpZnkgdGhlIHBsdWdpbiBhbmQg aW5jcmVhc2UgdGhlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IHdpc2ggdG8gYWx0ZXIgdGhl IGZpbGVuYW1lIGFzIHdlbGwuIENoZWNraW5nIHRoaXMgYm94IHdpbGwgKHVwb24gc2F2ZSkg cmVuYW1lIHRoZSBmaWxlIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IHRvIHJlZmxl Y3QgdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVw cGFnZSI+c2V0dXAgcGFnZTwvYT4gZm9yIGRldGFpbHMgb24gY3VzdG9taXNpbmcgdGhlIGZp bGVuYW1lIGZvcm1hdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+QXV0aG9yPC9z dHJvbmc+IDogeW91ITwvbGk+CgkJPGxpPjxzdHJvbmc+V2Vic2l0ZTwvc3Ryb25nPiA6IHlv dXIgaG9tZSBwYWdlIG9yIHBsdWdpbiBwYWdlLiBXaWxsIGJlIGh5cGVybGlua2VkIHRvIHlv dXIgQXV0aG9yIG5hbWUgaW4gdGhlIGxpc3QgcGFnZTwvbGk+CgkJPGxpPjxzdHJvbmc+RGVz Y3JpcHRpb248L3N0cm9uZz4gOiB2ZXJ5IGJyaWVmIG9uZS1saW5lciBkZXNjcmliaW5nIHlv dXIgcGx1Z2luJiM4MjE3O3MgY29yZSBmdW5jdGlvbiAvIHJlYXNvbiBmb3IgZXhpc3RlbmNl PC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gSGVscDwvc3Ryb25nPiA6IGRvY3VtZW50YXRp b24gZm9yIGRldGFpbGluZyB0aGUgcGx1Z2luIHVzYWdlLiBDYW4gKHByb2JhYmx5IHNob3Vs ZCEpIGJlIHdyaXR0ZW4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLmNvbS90 ZXh0aWxlLXNhbmRib3giPlRleHRpbGU8L2E+LiBUaGVyZSB3ZXJlIHNvbWUgPGEgaHJlZj0i aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI1MzI3Ij5s b29zZSBkb2N1bWVudGF0aW9uIGd1aWRlbGluZXM8L2E+IHByb3Bvc2VkIHRoYXQgc2VydmUg YXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3RlIHRoYXQgdGhlIGNoYXJhY3RlciBjb3Vu dGRvd24gaGVyZSBpcyBvbmx5IGFwcHJveGltYXRlIGJlY2F1c2Ugd2hlbiB5b3VyIHBsdWdp biBpcyBzYXZlZCBhbmQgdGhlIGhlbHAgaXMgY29udmVydGVkIHRvIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiwgaXQgdXN1YWxseSB0YWtlcyB1cCBtb3JlIHNwYWNlIHRoYW4g VGV4dGlsZTsgcGxlYXNlIGNoZWNrIHRoYXQgeW91ciBoZWxwIGZpbGUgcmVuZGVycyBjb3Jy ZWN0bHkgd2hlbiB5b3VyIHBsdWdpbiBpcyBleHBvcnRlZDwvbGk+CgkJPGxpPjxzdHJvbmc+ U3R5bGU8L3N0cm9uZz4gOiBBbnkgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gc3R5 bGUgcnVsZXMgeW91IHdpc2ggdG8gYXBwbHkgdG8geW91ciBkb2N1bWVudGF0aW9uIHRvIG1h a2UgaXQgbW9yZSBwcmV0dHkuIEl0JiM4MjE3O3MgYmVzdCB0byB0YXJnZXQgeW91ciBkb2N1 bWVudGF0aW9uIHNwZWNpZmljYWxseSBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlIFBsdWdp biBIZWxwIHNlY3Rpb24gd2l0aCBzb21ldGhpbmcgbGlrZTogPGNvZGU+Jmx0O2RpdiBpZD0m cXVvdDthYmNfaGVscCZxdW90OyZndDtoMS4gRG9jcyBnbyBoZXJlLi4uJmx0Oy9kaXYmZ3Q7 PC9jb2RlPi48YnIgLz4KTm90ZSB0aGF0IGJvdGggdGhlIFBsdWdpbiBIZWxwIGFuZCBTdHls ZSBhcmUgZ292ZXJuZWQgYnkgYSBzaXplIGxpbWl0LiBTaW5jZSB0aGV5IGFyZSBib3RoIHN0 b3JlZCBpbiB0aGUgc2FtZSA2NGtCIGZpZWxkLCB0aGUgc2l6ZSBpcyBzaGFyZWQgYmV0d2Vl biB0aGVtLiBTdHlsZXMgYXJlIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdGhyb3VnaCB0aGUgVGV4 dGlsZSBwcm9jZXNzb3IgYW5kIHlvdSBkb24mIzgyMTc7dCBuZWVkIHRvIGFkZCB0aGUgPGNv ZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gdGFnczsgdGhlIENvbXBvc2VyIHdpbGwgZG8gdGhh dCBmb3IgeW91IChidXQgc2VlIDxhIGhyZWY9IiNub3RlcyI+Tm90ZXM8L2E+KTwvbGk+CgkJ PGxpPjxzdHJvbmc+U2F2ZTwvc3Ryb25nPiA6IGNvbW1pdHMgdGhlIGNoYW5nZXM8L2xpPgoJ CTxsaT48c3Ryb25nPlsgVmlldyBIZWxwIF08L3N0cm9uZz4gOiBzaG93cyB0aGUgZG9jdW1l bnRhdGlvbiBhcyB1c2VycyB3aWxsIHNlZSBpdCAoaS5lLiBUZXh0aWxlIHByb2Nlc3NlZCBp bnRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPikuIEFueSBoZWxwIHRleHQgb3Zl ciA2NGtCIGluIGxlbmd0aCBpcyB0cnVuY2F0ZWQgc28geW91IGNhbiB2ZXJpZnkgdGhhdCBh bGwgeW91ciBkb2N1bWVudGF0aW9uIGZpdHM8L2xpPgoJPC91bD4KCgk8cD5PbmNlIHlvdSBo YXZlIHNhdmVkIHlvdXIgcGx1Z2luLCB0aGVyZSBpcyBhIHNlY3Rpb24gcmlnaHQgYXQgdGhl IGJvdHRvbSB0aGF0IGFsbG93cyB5b3UgdG8gZXhwb3J0IHlvdXIgcGx1Z2luIGluIGEgdmFy aWV0eSBvZiBmb3JtYXRzOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGNvZGUg Zm9yIGRpc3RyaWJ1dGlvbjwvc3Ryb25nPiA6IGlzIGEgZGlyZWN0IGNvcHkgJiM4MjE2O24m IzgyMTc7IHBhc3RlIGFyZWEgdGhhdCBjb250YWlucyB5b3VyIGVudGlyZSBwbHVnaW4gKyBk b2NzLiBZb3UgY2FuIHRha2UgdGhpcyBlbnRpcmUgYXJlYSBhbmQgcGFzdGUgaXQgaW50byB0 aGUgJiM4MjE2O0luc3RhbGwgcGx1Z2luJiM4MjE3OyBib3ggb24gdGhlIEFkbWluIC0mZ3Q7 IFBsdWdpbnMgcGFnZTwvbGk+CgkJPGxpPjxzdHJvbmc+RXhwb3J0IGFzIGFiY19teXBsdWdp bi50eHQ8L3N0cm9uZz4gOiBjb252ZXJ0cyB0aGUgcGx1Z2luIGhlbHAgdG8gPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+IGFuZCBzYXZlcyB0aGUgcGx1Z2luIHRvIHlvdXIgY29t cHV0ZXIgYXMgYSByZWRpc3RyaWJ1dGFibGUgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0 dGVybiB1c2VycyB0byBpbnN0YWxsPC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJj X215cGx1Z2luLnR4dCAoY29tcHJlc3NlZCk8L3N0cm9uZz4gOiBjb252ZXJ0cyB0aGUgcGx1 Z2luIGhlbHAgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGFuZCBzYXZlcyB0 aGUgcGx1Z2luIGFzIGEgcmVkaXN0cmlidXRhYmxlLCBnemlwcGVkIHRleHQgZmlsZSBmb3Ig b3RoZXIgVGV4dHBhdHRlcm4gdXNlcnMgdG8gaW5zdGFsbC4gVXNlZnVsIGZvciBsYXJnZSBw bHVnaW5zIG9yIHRvIG9mZmVyIGFuIGFsdGVybmF0aXZlIGZvciBwZW9wbGUgd2hvIGhhdmUg c3RyaW5nZW50IHNpemUgbGltaXRzIGltcG9zZWQgYnkgdGhlaXIgaG9zdDwvbGk+CgkJPGxp PjxzdHJvbmc+RXhwb3J0IGFzIGFiY19teXBsdWdpbi5waHA8L3N0cm9uZz4gOiBzYXZlcyB0 aGUgcGx1Z2luIGluIGEgVGV4dHBhdHRlcm4gc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LiBV c2VmdWwgZm9yIGtlZXBpbmcgdGhlIHBsdWdpbiBmb3IgeW91cnNlbGYgJiM4MjEyOyBjb21w bGV0ZSB3aXRoIFRleHRpbGUgbWFya3VwICYjODIxMjsgc28gaXQgY2FuIGJlIGxhdGVyIGVk aXRlZCBhbmQgcmUtaXNzdWVkIC8gdXBkYXRlZCBvciBzaGFyZWQgd2l0aCBvdGhlciBkZXZl bG9wZXJzIHdobyBoYXZlIHRoZSBQbHVnaW4gQ29tcG9zZXIgb3IgemVtX3RwbC5waHAgY29t cGlsZXI8L2xpPgoJPC91bD4KCgk8cD5Ob3RlIHRoYXQgd2hlbiBleHBvcnRpbmcgYXMgYSBz dGFuZGFyZCBwbHVnaW4sIHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBkZWNp ZGUgaWYgeW91IGhhdmUgdXNlZCBUZXh0aWxlIG9yIG5vdDsgaXQgc2ltcGx5IGxvb2tzIGZv ciBhIHRleHRpbGVkIGhlYWRlciAoPGNvZGU+aDEuPC9jb2RlPiB0aHJvdWdoIDxjb2RlPmg2 LjwvY29kZT4pLiBSdW5uaW5nIHB1cmUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+ IHRocm91Z2ggVGV4dGlsZSBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGVuY29kaW5nIGlzc3Vl cyBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBzZXQgdXNlZCBzbyBpdCBp cyBhbHdheXMgYmVzdCB0byB0cnkgYW5kIHN0aWNrIHRvIFRleHRpbGUgYXMgdGhlIGRvY3Vt ZW50YXRpb24gc3lzdGVtLjwvcD4KCgk8aDMgaWQ9InJlc3RvcmUiPlJlc3RvcmUgcG9pbnRz PC9oMz4KCgk8cD5XaGVuIGEgcGx1Z2luIGlzIGluc3RhbGxlZCwgYSBjb3B5IGlzIGtlcHQg aW4gdGhlIGRhdGFiYXNlLiBJZiB0aGUgcGx1Z2luIGNvZGUgKG5vdCBoZWxwIHRleHQpIGlz IHN1YnNlcXVlbnRseSBlZGl0ZWQsIHRoZSBwbHVnaW4gaXMgY29uc2lkZXJlZCAmIzgyMjA7 bW9kaWZpZWQmIzgyMjE7OyBpbmRpY2F0ZWQgaW4gdGhlIFBsdWdpbiBDb21wb3NlciBsaXN0 IHBhZ2UgYW5kIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS4gU29tZXRpbWVzIHlvdSBtYXkg d2lzaCB0byByZXZlcnQgYW55IGNoYW5nZXMgYmFjayB0byB0aGUgYXMtaW5zdGFsbGVkIHN0 YXRlIGFuZCB0aGUgQ29tcG9zZXIgYWxsb3dzIHRoaXMuPC9wPgoKCTxwPkFueSB0aW1lIGEg cGx1Z2luIGlzIG1hcmtlZCBhcyAmIzgyMTY7bW9kaWZpZWQmIzgyMTc7LCB0aGUgdmVyc2lv biBudW1iZXIgYmVjb21lcyBjbGlja2FibGUgaW4gdGhlIDxhIGhyZWY9IiNsaXN0cGFnZSI+ bGlzdDwvYT4gcGFnZS4gQ2xpY2tpbmcgaXQgKGFuZCBjb25maXJtaW5nIHlvdSBhcmUgc3Vy ZSkgd2lsbCB3aXBlIG91dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSBhbmQgcmV0dXJuIHRoZSBw bHVnaW4gdG8gaXRzIGluc3RhbGxlZCBzdGF0ZS48L3A+CgoJPHA+RHVyaW5nIHRoZSBlZGl0 aW5nIHByb2Nlc3Mgb2YgeW91ciBvd24gcGx1Z2lucywgaXQgbWF5IGJlIHRoYXQgYXQgY2Vy dGFpbiB0aW1lcyB5b3Ugd2lzaCB0byBwdXQgYSBzdGFrZSBpbiB0aGUgZ3JvdW5kIGFuZCBz YXkgJiM4MjIwO3RoaXMgaXMgbXkgY3VycmVudCBiYXNlbGluZSB0aGF0IEkgbWlnaHQgd2Fu dCB0byByZXR1cm4gdG8gbGF0ZXImIzgyMjE7LiBQZXJoYXBzIHlvdSBhcmUgYWJvdXQgdG8g bWFrZSBzb21lIG1vbnN0ZXIgZWRpdHMgb3IgdHJ5IHNvbWV0aGluZyBleHBlcmltZW50YWwg YW5kIHdhbnQgYW4gZWFzeSBmYWxsYmFjayBtZWNoYW5pc20uIFRoYXQmIzgyMTc7cyB3aGVy ZSB0aGUgJiM4MjIwO1Jlc3RvcmUgcG9pbnQmIzgyMjE7IGNoZWNrYm94IGNvbWVzIGluLjwv cD4KCgk8cD5CeSBjaGVja2luZyB0aGUgYm94IHdoZW4geW91IHNhdmUgeW91ciBwbHVnaW4s IHRoZSBjdXJyZW50IGNvZGUgd2lsbCBiZWNvbWUgeW91ciBuZXcgcm9sbGJhY2sgcG9pbnQg YW5kIHRoZSBwbHVnaW4gd2lsbCBubyBsb25nZXIgYmUgbWFya2VkICYjODIyMDttb2RpZmll ZCYjODIyMTsuIEFueSBjaGFuZ2VzIG1hZGUgYmVmb3JlaGFuZCB3aWxsIG5vdCBiZSByZWNv dmVyYWJsZSBzbyB5b3Ugd2lsbCBoYXZlIHRvIHJlbHkgb24geW91ciBvd24gYmFja3VwcyBp ZiB5b3Ugd2lzaCB0byBnbyBiYWNrIGZ1cnRoZXIuIEFueSBlZGl0cyB5b3UgbWFrZSBhZnRl ciBjcmVhdGluZyBhIHJlc3RvcmUgcG9pbnQgY2FuIGJlIHVuZG9uZSBieSB2aXNpdGluZyB0 aGUgbGlzdCBwYWdlIGFuZCBjbGlja2luZyB0aGUgdmVyc2lvbiBudW1iZXIgbmV4dCB0byB5 b3VyIHBsdWdpbi4gQ3VycmVudGx5LCBvbmx5IG9uZSByb2xsYmFjayBwb2ludCBjYW4gYmUg c3RvcmVkIGluIHRoZSBkYXRhYmFzZS48L3A+CgoJPGgzIGlkPSJzZXR1cHBhZ2UiPlNldHVw IHBhZ2U8L2gzPgoKCTxwPkNsaWNraW5nIFNldHVwIGZyb20gdGhlIG1haW4gPGEgaHJlZj0i I2xpc3RwYWdlIj5saXN0PC9hPiBwYWdlIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHBsdWdpbiBw cmVmZXJlbmNlcy48L3A+CgoJPHA+WW91IGNhbiBJbnN0YWxsIHRoZW0gJiM4MjEyOyB3aGlj aCByZXRhaW5zIGFueSBwcmV2aW91cyBzZXR0aW5ncyBhbmQgYWRkcyBuZXcgb25lcyB3aGVu IHVwZGF0aW5nIHRoZSBwbHVnaW4gJiM4MjEyOyBvciBEZWxldGUgdGhlbS4gVGhlIHBsdWdp biBjaGVja3MgaWYgYWxsIHJlcXVpcmVkIHByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUgYW5k IG9mZmVycyB5b3UgdGhlIGNob2ljZSBvZiBkZWxldGluZy9yZWluc3RhbGxpbmcgaW4gY2Fz ZSB0aGUgcHJlZnMgYmVjb21lIGNvcnJ1cHRlZCBvciBuZWVkIHVwZGF0aW5nLjwvcD4KCgk8 cD5PbmNlIHRoZSBwcmVmcyBhcmUgaW5zdGFsbGVkIHlvdSB3aWxsIHNlZSB0aGUgYXZhaWxh YmxlIG9wdGlvbnM6PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gZWRpdG9yPC9z dHJvbmc+IDogeW91IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUgY29kZSB1c2luZyBhIDNyZCBw YXJ0eSBzeW50YXggaGlnaGxpZ2h0ZXIuIEN1cnJlbnQgc3VwcG9ydCBpcyBmb3IgRWRpdCBB cmVhIGFuZCAoc29ydCBvZikgQ29kZVByZXNzIChzZWUgdGhlIDxhIGhyZWY9IiNub3RlcyI+ bm90ZXM8L2E+KS4gQ2hvb3NlIHRoZSBzeXN0ZW0gaGVyZSwgd2hlcmVieSB0aGUgYm94IGJl bmVhdGggYmVjb21lcyBhdmFpbGFibGUgc28geW91IGNhbiBzcGVjaWZ5IHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBwYXRoIG9mIHRoZSBFZGl0QXJlYSBpbnN0YWxsYXRp b24gb24geW91ciBzZXJ2ZXI7IHRoaXMgaXMgbm9ybWFsbHkgZXZlcnl0aGluZyB1cCB0byBh bmQgaW5jbHVkaW5nIC9lZGl0X2FyZWEuIE5vIHRyYWlsaW5nIHNsYXNoIGlzIHJlcXVpcmVk PC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gZWRpdG9yIHdpZHRoPC9zdHJvbmc+IDogdGhl IG51bWJlciBvZiBjaGFyYWN0ZXJzIHdpZGUgdG8gbWFrZSB0aGUgYm94ZXMgb24gdGhlIDxh IGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwvYT4gcGFnZSB0byBzdWl0IHlvdXIgc2NyZWVuIHJl c29sdXRpb248L2xpPgoJCTxsaT48c3Ryb25nPkhlbHAgZWRpdG9yPC9zdHJvbmc+IDogeW91 IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUgaGVscCBtYW51YWxseSB2aWEgVGV4dGlsZSBvciB1 c2UgVGlueU1DRSBmb3IgYSBtb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFu PiBleHBlcmllbmNlLiBUaGlzIGlzIGV4cGVyaW1lbnRhbCBhbmQgcHJvYmFibHkgd29uJiM4 MjE3O3Qgd29yayByaWdodCBub3c8L2xpPgoJCTxsaT48c3Ryb25nPjxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IGV4cG9ydCBvcmRlcjwvc3Ryb25nPiA6IHdoZW4gc2F2aW5nIHlv dXIgcGx1Z2luIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQsIHRoaXMgZ292ZXJu cyB3aGV0aGVyIHlvdSBwcmVmZXIgdGhlIGNvZGUgYmxvY2sgdG8gYmUgYXQgdGhlIHRvcCBv ZiB0aGUgZmlsZSBhbmQgdGhlIGhlbHAgYmxvY2sgYmVsb3csIG9yIHZpY2UgdmVyc2E8L2xp PgoJPC91bD4KCgk8cD5UaGUgbmV4dCB0aHJlZSB0ZXh0Ym94ZXMgYXJlIGFsbCB2ZXJ5IHNp bWlsYXI7IHRoZXkgZGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGVuYW1lcyB3aGVuIHlv dSBleHBvcnQgcGx1Z2lucy4gVGhlIGZpcnN0IGlzIGZvciB3aGVuIHlvdSBleHBvcnQgc3Rh bmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPkJBU0U8L3NwYW4+LTY0IHBsdWdpbnM7IHRoZSBz ZWNvbmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2luczsgdGhlIHRoaXJkIGlzIGZvciBleHBv cnRpbmcgYSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB0ZW1wbGF0 ZS48L3A+CgoJPHA+V2hlcmV2ZXIgeW91IHR5cGUgPGNvZGU+e25hbWV9PC9jb2RlPiwgdGhl IHBsdWdpbiBuYW1lIHdpbGwgYXBwZWFyLiBTaW1pbGFybHksIDxjb2RlPnt2ZXJzaW9ufTwv Y29kZT4gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IHBsdWdpbiB2ZXJzaW9u IG51bWJlci4gWW91IGNhbiB0eXBlIGFueXRoaW5nIHlvdSBsaWtlIGluIHRoZXNlIGJveGVz LCBidXQgaXQmIzgyMTc7cyBtb3JlIHVzZWZ1bCB0byBpbmNsdWRlIGJvdGggb2YgdGhlIHJl cGxhY2VtZW50IHN0cmluZ3Mgc29tZXdoZXJlIGluIGVhY2ggYm94IHNvIHlvdSBkb24mIzgy MTc7dCBnZXQgbmFtZSAvIHZlcnNpb24gY2xhc2hlcy48L3A+CgoJPHA+Rm9yIGV4YW1wbGUs IGlmIHlvdSBkb24mIzgyMTc7dCBsaWtlIHRoZSBmYWN0IHRoYXQgemlwcGVkIHBsdWdpbnMg YXJlIGV4cG9ydGVkIGFzIDxjb2RlPnBmeF9teV9wbHVnaW5fdjAuMV96aXAudHh0PC9jb2Rl PiwgeW91IGNhbiBjaGFuZ2UgaXQuIFBlcmhhcHMgeW91IG1heSBwcmVmZXIgPGNvZGU+cGZ4 X215X3BsdWdpbi1jb21wcmVzc2VkLTAuMS50eHQ8L2NvZGU+LiBJbiB3aGljaCBjYXNlLCBz ZXQgdGhlIDJuZCBib3ggdG8gPGNvZGU+e25hbWV9LWNvbXByZXNzZWQte3ZlcnNpb259LnR4 dDwvY29kZT4uPC9wPgoKCTxwPlRoZSBleHRlbnNpb24gc2hvdWxkIHVzdWFsbHkgYmUgc3Bl Y2lmaWVkIHNvIHlvdXIgc3lzdGVtL2Jyb3dzZXIga25vd3MgdGhlIGZpbGUmIzgyMTc7cyB0 eXBlIHdoZW4gaXQgaXMgZXhwb3J0ZWQsIGJ1dCBpdCYjODIxNztzIG5vdCBtYW5kYXRvcnkg YXMgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5NSU1FPC9zcGFuPiB0eXBlIGlzIGdpdmVuIHNv IChnb29kKSBicm93c2VycyBzaG91bGQgcmVhZCB0aGF0LjwvcD4KCgk8cD5GaW5hbGx5LCBp ZiB5b3Ugd2lzaCB0byB0YWtlIGFkdmFudGFnZSBvZiBoZWxwIGNhY2hlaW5nLCBwdXQgdGhl IHBhdGggdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIHRoZSA8c3Ryb25nPkNhY2hlIGRp cjwvc3Ryb25nPiBib3guIEVtcHR5IHRoZSBib3ggaWYgeW91IHByZWZlciBzYXZlcyBhbmQg ZXhwb3J0cyB0byBiZSBzbG93ZXIhIERlZmF1bHRzIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+JiM4MjE3O3MgdGVtcG9yYXJ5IGRpcmVjdG9yeS48L3A+CgoJPGgzIGlkPSJu b3RlcyI+Tm90ZXMgLyBrbm93biBpc3N1ZXM8L2gzPgoKCTxvbD4KCQk8bGk+TW9yZSBlZGl0 b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENvbXBvc2VyIGZhaXJseSBlYXNpbHku IElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBjb250YWN0LiBCZSB3YXJuZWQgdGhh dCB0aGUgZWRpdG9ycyBkbyB0ZW5kIHRvIHNsb3cgdGhlIHBsdWdpbiBkb3duLCBlc3BlY2lh bGx5IGFzIGNvZGUgc2l6ZSBpbmNyZWFzZXMuPC9saT4KCQk8bGk+VGVudGF0aXZlIHN1cHBv cnQgZm9yIENvZGVQcmVzcyBpcyBhdmFpbGFibGUgYnV0IGl0IGluZXhwbGljYWJseSBibGFu a3Mgb3V0IHRoZSBwbHVnaW4gY29kZSB3aGVuIHNhdmVkLCBzbyBzdXBwb3J0IGlzIGRpc2Fi bGVkIGZvciBub3cuIElmIGFueW9uZSBjYW4gc2hlZCBhbnkgbGlnaHQgb24gd2h5IGl0IGRv ZXMgdGhpcywgcGxlYXNlIHNwZWFrIHVwISBMb29rIGluIHRoZSBpZWRfcGx1Z2luX3NldHVw KCkgZnVuY3Rpb24gdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBmaWxlLCB1bmNvbW1lbnQg dGhlIGNvbW1lbnRlZCBvdXQgbGluZSBhbmQgY29tbWVudCBvdXQgdGhlIG9uZSBiZW5lYXRo IGl0IHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZpc2l0IHRoZSBTZXR1cCBwYWdlIGFuZCBz ZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxpc3QuIERvbiYjODIxNzt0IGV4cGVyaW1lbnQg d2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1wb3J0YW50IHBsdWdpbiA6LSk8L2xpPgoJCTxs aT5XaGVuIGEgcGx1Z2luIGlzIHNhdmVkIHRvIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCBpZiB5 b3UgaGF2ZSBub3QgcHV0IDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IG1hcmtlcnMgaW4g eW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBibG9jayB0aGV5IHdpbGwgYmUg YWRkZWQgZm9yIHlvdSBpbiB0aGUgdGV4dCBhcmVhIGJ1dCA8ZW0+bm90PC9lbT4gc2F2ZWQg aW4gdGhlIGFjdHVhbCB0ZW1wbGF0ZSB1bnRpbCB5b3Ugc2F2ZSBpdCBhZ2FpbiAoZXhwb3J0 aW5nIGFzIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyB1bmFmZmVj dGVkKS4gU28gaWYgeW91IGFyZSBpbiB0aGUgaGFiaXQgb2YgbWFudWFsbHkgZG93bmxvYWRp bmcgdGhlIGZpbGUgZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IGNs aWVudCBpbW1lZGlhdGVseSBhZnRlciBhIHNhdmUsIGp1c3Qgc2F2ZSB0aGUgcGx1Z2luIGFn YWluIHRvIGJlIHN1cmU8L2xpPgoJPC9vbD4KCgk8aDMgaWQ9IndyaXRpbmciPldyaXRpbmcg YSBwbHVnaW48L2gzPgoKCTxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5Q bHVnaW4gQXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1 cHBvcnQgRm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0 IHRoZSA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0 c2hlZXQiPlRleHRQYXR0ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwvYT4gYW5kIHRoZSB0dXRv cmlhbHMgYW5kIGd1aWRlcyBmb3IgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93 aWtpL2luZGV4LnBocD90aXRsZT1FeHRlbmRpbmdfVGV4dHBhdHRlcm4iPkV4dGVuZGluZyBU ZXh0cGF0dGVybjwvYT4gb24gVGV4dEJvb2suPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBhdXRo b3JpbmcgOi0pPC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1 bD4KCQk8bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+ MjUgRmViIDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMmIzgyMTc7IG9wdGlvbjwv bGk+CgkJPGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIxNjtzYXZlIGFzIHBocCYj ODIxNzs8L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRlZCBzdXBwb3J0IGZvciBw bHVnaW5fY2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwgMC41IHwgRnVsbCBzdXBw b3J0IGZvciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2luczsgTGlicmFyeSBwbHVn aW5zOyBUZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0aW9uIHdpdGggbmV0LWNh cnZlciYjODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJPGxpPjA3IEphbiAwOCB8 IDAuNiB8IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0LWNhcnZlcik7IHN1cHBv cnQgZm9yIEVkaXQgQXJlYSAmYW1wOyBDb2RlUHJlc3MoaXNoKSAodGhhbmtzIHZhcmlhYXMp OyBIZWxwIGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNoYWJsZSBvbiBleHBvcnQ7 IGFkZGVkIFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5bGUgYnVnZml4ZXM8L2xp PgoJCTxsaT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcgcGx1Z2lucyBub3cgcmV0 YWlucyBzdHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNpZGUgcGx1Z2luIHdpdGgg cHVibGljLXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdlZCBidXR0b24gc3R5bGlu ZyBhbmQgcG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIpOyBnVHh0KCkgcHJlZiBs YWJlbHMgYW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJlZnMgKGdvIGpRdWVyeSBn byEpOyBjYWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVjdCBleHBvcnQgZnJvbSBF ZGl0IHBhZ2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxzcGFuIGNsYXNzPSJjYXBz Ij5IVE1MPC9zcGFuPiYjODIxNzsgY2hlY2s7IG1pbm9yIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+ MDkgSmFuIDA4IHwgMC43MSB8IFRleHRhcmVhIHdpZHRoIGNhbiBub3cgYmUgY29udHJvbGxl ZCBmcm9tIHByZWZzLCBhbmQgaGVpZ2h0IGZyb20gYSBkcmFnIGJhcjsgZGVmYXVsdCB3aWR0 aCBpbmNyZWFzZWQgdG8gMTEwIGNoYXJzOyBwdWJsaXNoIHBsdWdpbnMgZnJvbSB0aGUgbGlz dCBwYWdlOyBJbnN0YWxsIGJ1dHRvbiByZW1vdmVkIHdoZW4gcHJlZnMgYWxsIGNvcnJlY3Rs eSBpbnN0YWxsZWQgKGFsbCB0aGFua3MgdmFyaWFhcyAvIGlibGFzdG9mZik8L2xpPgoJCTxs aT4xMCBKYW4gMDggfCAwLjcyIHwgRml4ZWQgYnVnIGlmIHBsdWdpbiBoYXMgbm8gaGVscDsg c3R5bGUgc2VjdGlvbiBubyBsb25nZXIgc3RvcmVkL2V4cG9ydGVkIGlmIGl0JiM4MjE3O3Mg bm90IGluIHVzZSAodGhhbmtzIHRoZV9naG9zdCAvIGlibGFzdG9mZik8L2xpPgoJCTxsaT4x MSBKYW4gMDggfCAwLjczIHwgQWRkZWQgc3VwcG9ydCBmb3IgPGVtPnJlYWRpbmc8L2VtPiBh biBvcHRpb25hbCByZXZpc2lvbiBmcm9tIHRoZSB0ZW1wbGF0ZSBwYXJzZXIgYW5kIGFwcGVu ZGluZyBpdCB0byB0aGUgdmVyc2lvbiAodGhhbmtzIG5ldC1jYXJ2ZXIpOyBtb3JlIGdUeHQo KSBzdHJpbmdzIGNvbnZlcnRlZDwvbGk+CgkJPGxpPjI4IE1hciAwOCB8IDAuNzQgfCBGaXhl ZCBlbXB0eSBwbHVnaW4gY29kZSBpZiBTdHlsZSBibG9jayBsZWZ0IGJsYW5rIDsgZml4ZWQg c3RyaXAvc2xhc2gvZW5jb2RpbmcgZXJyb3JzICh0aGFua3MgdGhlX2dob3N0L3J1dWQpIDsg Zml4ZWQgY3JsZiBuZXdsaW5lcyBpbiBjb2RlIGJsb2NrICh0aGFua3MgaGFram9vbi9ydXVk KTwvbGk+CgkJPGxpPjI4IE1heSAwOCB8IDAuNzUgfCBBZGRlZCAmIzgyMTY7bW9kaWZpZWQm IzgyMTc7IHRvIHRoZSBWZXJzaW9uIGNvbHVtbiAodGhhbmtzIHVsaSkgOyBhZGRlZCBhYmls aXR5IHRvIHJlbmFtZSBmaWxlcyBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpciB3aGVuIHRoZSB2 ZXJzaW9uIGNoYW5nZXM8L2xpPgoJCTxsaT4wMyBOb3YgMDggfCAwLjggfCBBZGRlZCBzdXBw b3J0IGZvciByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciA7IGFkZGVkIEFkbWluLW9u bHkgcGx1Z2luIHR5cGU7IGFkZGVkIGFiaWxpdHkgdG8gb3ZlcnJpZGUgZmlsZW5hbWUgZm9y bWF0IG9uIGV4cG9ydCA7IGFkZGVkIHJlc3RvcmUgcG9pbnQvcm9sbGJhY2sgKHRoYW5rcyBt YXZlcmljaykgOyBhZGRlZCBjaGFyYWN0ZXIgY291bnQgKHRoYW5rcyBwZXBlYmUpIDsgcmF0 aW9uYWxpc2VkIHRoZSBsaXN0IGFuZCBlZGl0IHBhZ2VzIDsgc3BlZCB1cCBleHBvcnQvc2F2 ZSByb3V0aW5lcyA7IGZpeGVkIGEgZmV3IGNvcm5lciBjYXNlIGJ1Z3MgKGUuZy4gZW1wdHkg cGx1Z2luIG5hbWUsIG1pc3NpbmcgcXVvdGVzIGluIHRlbXBsYXRlIG9wdGlvbnMpPC9saT4K CQk8bGk+MDMgSmFuIDA5IHwgMC44MSB8IEFkZGVkIHRleHRpbGUgY2FjaGVpbmcgdG8gaW1w cm92ZSBwZXJmb3JtYW5jZSB3aXRoIGxhcmdlIGhlbHAgZmlsZXMgOyBwcm9maWxlZCBjb2Rl IGFuZCBpbXByb3ZlZCBzcGVlZCBpbiB2YXJpb3VzIGZ1bmN0aW9uczwvbGk+CgkJPGxpPjIz IEZlYiAwOSB8IDAuODIgfCBDYW4gbm93IGNyZWF0ZSBuZXcgdGVtcGxhdGUgZmlsZXMgb24g dGhlIGZseSAodGhhbmtzIGF6dykgOyBmaXhlZCBUZXh0aWxlIGxpbWl0IG9uIGxhcmdlIGhl bHAgZmlsZXMgOyBmaXhlZCBkYXRhYmFzZSBjYWxscyBmb3IgTXlTUUwgc3RyaWN0IG1vZGUg KHRoYW5rcyBHb2NvbSAvIGF6dyk8L2xpPgoJCTxsaT4xMSBBcHIgMDkgfCAwLjgzIHwgRml4 ZWQgaGVscCBmaWxlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IG91dHB1dCBzbyBp dCB2YWxpZGF0ZXMgOyB1c2UgPGNvZGU+JHByZWZzPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2Rl PiRHTE9CQUxTPC9jb2RlPiBpbnRlcm5hbGx5IDsgY2hlY2sgaWYgcGx1Z2luX2NhY2hlX2Rp ciBleGlzdHMgYmVmb3JlIHRyeWluZyB0byB1c2UgaXQgb24gdGhlIGxpc3QgcGFnZTwvbGk+ CgkJPGxpPjI5IEF1ZyAwOSB8IDAuOSB8IFJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IDQuMi4wKyA7IGFkZGVkIHN1cHBvcnQgZm9yIHBsdWdpbiBwcmVmcy9saWZl Y3ljbGUgYW5kIGxhcmdlciBwbHVnaW4gY29kZSA7IGZpeGVkIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+IGRlbGltaXRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgOyBu ZXcgcGx1Z2luIHRlbXBsYXRlIGRldGFpbHMgdXNlZDwvbGk+CgkJPGxpPjExIEZlYiAxMCB8 IDAuOTEgfCBBZGRlZCBKdW1wIFRvIExpbmUgY2FwYWJpbGl0eSAmIzgyMTI7IGluIG1vc3Qg YnJvd3NlcnMgKHRoYW5rcyB0aGVib21ic2l0ZSk8L2xpPgoJCTxsaT4wMyBOb3YgMTAgfCAw LjkyIHwgRml4ZWQgT3B0aW9ucyBsaW5rIGZvciBwbHVnaW5zIGZyb20gY2FjaGUgZGlyIGFu ZCBmaXhlZCBlc2NhcGluZyBvZiBleHBvcnRlZCBwaHAgZmlsZXMgKGJvdGggdGhhbmtzIG1h bmlxdWkpIDsgZml4ZWQgZXNjYXBpbmcgd2hlbiBpbXBvcnRpbmcgZnJvbSA8c3BhbiBjbGFz cz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIDsgY29zbWV0aWMgdHdlYWtzIChwbHVnaW5fY2Fj aGVfZGlyIHNlY3Rpb24gb25seSBkaXNwbGF5ZWQgaWYgdGhlcmUgYXJlIHZhbGlkIDxzcGFu IGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGVzLCBhbmQgVmlldyBIZWxwIGxpbmsgYWRq dXN0ZWQpIDsgZml4ZWQgalF1ZXJ5IG9uIHNldHVwIHBhbmVsIDsgZXh0ZW5kZWQgcmVzaXpl ciBjb29raWUgdG8gb25lIHllYXIgZXhwaXJ5PC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAq KiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNp ZWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojaWVkX2hlbHAgLmltcG9ydGFudCB7Y29s b3I6cmVkO30KI2llZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUl LzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNv bG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNpZWRfaGVscCBjb2RlLmJsb2NrIHsgZm9u dC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNwbGF5OmJsb2Nr OyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQp0ZXh0LWRlY29yYXRp b246dW5kZXJsaW5lO30KI2llZF9oZWxwIGgxIHsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5z LXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojaWVkX2hlbHAgaDIg eyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZv bnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojaWVkX2hlbHAgaDMgeyBmb250OiBi b2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdp bjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKI2llZF9oZWxwIGg0IHsg Zm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4 OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI2llZF9o ZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojaWVkX2hlbHAgLm1hbmQgeyBiYWNr Z3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI2llZF9oZWxwIHRhYmxl IHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyB9 CiNpZWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBw YWRkaW5nOi41ZW0gMDsgfQojaWVkX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJl OyB9CiNpZWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojaWVkX2hl bHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBM VUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiI1M2ZiYjhhY2U0ZDYwNDc5OGYz YjM0OGI2NTU1YzViNCI7fQ==