# Name: smd_calendar v0.51 # Type: Public side plugin # Calendar / event / schedule system with events as TXP articles # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzbWRfY2FsZW5kYXIiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjgwNDMzOiIvLyBCYXNlZCBvbiBtZHBfY2Fs ZW5kYXIgLSB0aGFua3MgTWFyc2hhbGwhCi8vIFRPRE86ICogYWxsb3cgdGFibGUgaGVhZGVy IHRvIGJlIHJlbW92ZWQgLyByZXN0eWxlZCBjb21wbGV0ZWx5ICh0aGUgbW9udGgvd2VlayBk cm9wZG93biAmIG5hdiBpY29ucykKLy8gICAgICAgICAtLSBhIGZvcm0gKG5hdmZvcm0/KSBm b3IgdGhlIGhlYWRlciByb3cgd2l0aCBhY2Nlc3MgdG8gYWxsIHZhcnMgc3VjaCBhcyB3aGlj aCBtb250aCBpcyBiZWluZyBkaXNwbGF5ZWQ/Ci8vICAgICAgICAgLS0gdG9vbHMgdG8gYWxs b3cgdGhlIGhlYWRlciB0byBiZSBnZW5lcmF0ZWQgZnJvbSBjb21wb25lbnRzIGFuZCBsYWlk IG91dCBpbiBhbnkgbWFubmVyPwovLyAgICAgICAqIGFsbG93IFVSTCB2YXJzIHRvIGJlIHBh c3NlZCBhcyBQT1NUICh0byBieXBhc3MgZ2JwX3Blcm1saW5rcykKLy8gICAgICAgKiBhZGQg Y3VzdG9tIHJvd3MgdG8gdGhlIHRhYmxlIChoZWFkZXIsIGZvb3RlcikgLS0gaGVhZGVyIGNv dWxkIGJlIHVzZWQgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBuYXYvZHJvcGRvd25zCi8vICAg ICAgICogZGl2LWJhc2VkIGNhbGVuZGFyIGxheW91dD8KLy8gVE9ETzogRml4IGV4cGlyeSBk YXRlcyBvbiBleHRyYSsgYWxsc3Bhbm5lZCBkYXRlcyBpbiBzbWRfYXJ0aWNsZV9ldmVudCAo YW5kIGNhbGVuZGFyPykuIFRoZXkgY3VycmVudGx5ICdjcmVlcCcgYSBkYXkgZm9yIGV2ZXJ5 IGRheSBvZiBhIHNwYW5uZWQgZXZlbnQKCmlmKCAkZGF0ZSA9IGdwcygnZGF0ZScpICkgewoJ JF9HRVRbJ21vbnRoJ10gPSAkZGF0ZTsKfQpmdW5jdGlvbiBzbWRfY2FsZW5kYXIoJGF0dHMs ICR0aGluZz0nJykgewoJZ2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGUsICR2YXJpYWJs ZSwgJHByZWZzLCAkc21kX2NhbF9mbGFnLCAkc21kX2RhdGUsICRzbWRfY2FsaW5mbywgJHNt ZF9jYWxfdWNsczsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSd0aW1lJyAgICAgICAgICA9 PiAnYW55JywKCQknc2l6ZScgICAgICAgICAgPT4gJ2xhcmdlJywKCQknZXhwaXJlZCcgICAg ICAgPT4gJycsCgkJJ2NhdGVnb3J5JyAgICAgID0+ICcnLAoJCSdzdWJjYXRzJyAgICAgICA9 PiAnJywKCQknc2VjdGlvbicgICAgICAgPT4gJycsCgkJJ2F1dGhvcicgICAgICAgID0+ICcn LAoJCSdyZWFsbmFtZScgICAgICA9PiAnJywKCQknc3RhdHVzJyAgICAgICAgPT4gJ2xpdmUn LAoJCSdzaG93YWxsJyAgICAgICA9PiAnMCcsCgkJJ3N0YXRpYycgICAgICAgID0+ICcnLAoJ CSdmb3JtJyAgICAgICAgICA9PiAnJywKCQknc3BhbmZvcm0nICAgICAgPT4gJ1NNRF9TQU1F JywKCQkncmVjdXJmb3JtJyAgICAgPT4gJ1NNRF9TQU1FJywKCQknY2VsbGZvcm0nICAgICAg PT4gJycsCgkJJ2hlYWRlcmZvcm0nICAgID0+ICcnLAoJCSdzdGVwZmllbGQnICAgICA9PiAn JywKCQknc2tpcGZpZWxkJyAgICAgPT4gJycsCgkJJ29taXRmaWVsZCcgICAgID0+ICcnLAoJ CSdleHRyYWZpZWxkJyAgICA9PiAnJywKCQknZXh0cmFzdHJpY3QnICAgPT4gJzAnLAoJCSdk YXRlZmllbGRzJyAgICA9PiAnJywKCQknc2hvd3NraXBwZWQnICAgPT4gJzAnLAoJCSdzaG93 c3Bhbm5lZCcgICA9PiAnMScsCgkJJ2hvbGlkYXlzJyAgICAgID0+ICcnLAoJCSdob2xpZGF5 ZmxhZ3MnICA9PiAnc3RhbmRhcmQnLAoJCSdjbGFzc2xldmVscycgICA9PiAnY2VsbCwgZXZl bnQnLAoJCSdsaW5rcG9zdGVkJyAgICA9PiAncmVjdXIsIG11bHRpLCBtdWx0aXByZXYsIG11 bHRpbGFzdCcsCgkJJ2NsYXNzcHJlZml4ZXMnID0+ICdzbWRfY2FsXywgc21kX2NhbF9ldl8n LAoJCSdjbGFzcycgICAgICAgICA9PiAnJywKCQkncm93Y2xhc3MnICAgICAgPT4gJycsCgkJ J2NlbGxjbGFzcycgICAgID0+ICcnLAoJCSdlbXB0eWNsYXNzJyAgICA9PiAnZW1wdHknLAoJ CSdpc293ZWVrY2xhc3MnICA9PiAnd2VlaycsCgkJJ25hdmNsYXNzJyAgICAgID0+ICduYXZw cmV2LCBuYXZuZXh0JywKCQknbmF2YXJyb3cnICAgICAgPT4gJyYjNjA7LCAmIzYyOycsCgkJ J25hdmlkJyAgICAgICAgID0+ICcnLAoJCSdldmVudGNsYXNzZXMnICA9PiAnY2F0ZWdvcnkn LAoJCSdldmVudHdyYXB0YWcnICA9PiAnc3BhbicsCgkJJ3NlbGVjdCcgICAgICAgID0+ICcn LAoJCSdzZWxlY3RidG4nICAgICA9PiAnJywKCQknbXljbGFzcycgICAgICAgPT4gJycsCgkJ J215d3JhcHRhZycgICAgID0+ICcnLAoJCSdjYXB0aW9uJyAgICAgICA9PiAnJywKCQknc3Vt bWFyeScgICAgICAgPT4gJycsCgkJJ2lkJyAgICAgICAgICAgID0+ICcnLAoJCSd3ZWVrJyAg ICAgICAgICA9PiAnJywKCQknbW9udGgnICAgICAgICAgPT4gJycsCgkJJ3llYXInICAgICAg ICAgID0+ICcnLAoJCSdyZW1hcCcgICAgICAgICA9PiAnJywKCQkneWVhcndpZHRoJyAgICAg PT4gJzAnLAoJCSdpc293ZWVrcycgICAgICA9PiAnJywKCQknZGF5Zm9ybWF0JyAgICAgPT4g J0FCQlInLAoJCSdtb250aGZvcm1hdCcgICA9PiAnRlVMTCcsCgkJJ2ZpcnN0ZGF5JyAgICAg ID0+IDAsCgkJJ21haW50YWluJyAgICAgID0+ICdjYWxpZCcsCgkJJ25hbWV2YWwnICAgICAg ID0+ICcnLAoJCSdnbXQnICAgICAgICAgICA9PiAwLAoJCSdsYW5nJyAgICAgICAgICA9PiAn JywKCQknZGVidWcnICAgICAgICAgPT4gMCwKCSksICRhdHRzKSk7CgoJJHNpemUgPSAoaW5f YXJyYXkoJHNpemUsIGFycmF5KCdzbWFsbCcsICdsYXJnZScpKSkgPyAkc2l6ZSA6ICdsYXJn ZSc7Cgkkc3RhdHVzID0gKCRzdGF0dXMpID8gJHN0YXR1cyA6ICdsaXZlJzsgLy8gaW4gY2Fz ZSBzdGF0dXMgaXMgZW1wdHkKCSRmaXJzdGRheSA9ICgkaXNvd2Vla3MgPT0gJycpID8gJGZp cnN0ZGF5IDogMTsKCSRzcGFuZm9ybSA9ICgkc3BhbmZvcm0gPT0gJ1NNRF9TQU1FJykgPyAk Zm9ybSA6ICRzcGFuZm9ybTsKCSRyZWN1cmZvcm0gPSAoJHJlY3VyZm9ybSA9PSAnU01EX1NB TUUnKSA/ICRmb3JtIDogJHJlY3VyZm9ybTsKCSRjZWxsZm9ybSA9IChlbXB0eSgkY2VsbGZv cm0pKSA/ICcnIDogZmV0Y2hfZm9ybSgkY2VsbGZvcm0pOwoJJGhlYWRlcmZvcm0gPSAoZW1w dHkoJGhlYWRlcmZvcm0pKSA/ICcnIDogZmV0Y2hfZm9ybSgkaGVhZGVyZm9ybSk7CgkkZnJv bnRwYWdlID0gKCRzZWN0aW9uPT0nJyAmJiAkcHJldGV4dFsncyddPT0nZGVmYXVsdCcpID8g dHJ1ZSA6IGZhbHNlOwoKCS8vIFNldCB1cCB0aGUgY2xhc3MgcHJlZml4ZXMKCSRjbGV2cyA9 IGRvX2xpc3QoJGNsYXNzbGV2ZWxzKTsKCSRjbHMgPSBkb19saXN0KCRjbGFzc3ByZWZpeGVz KTsKCSRjbHNfcGZ4ID0gJGV2Y19wZnggPSAkY2xzWzBdOwoJaWYgKGNvdW50KCRjbHMpID4g MSl7CgkJJGV2Y19wZnggPSAkY2xzWzFdOwoJfQoKCS8vIFNldCB1cCB0aGUgbmF2IGNsYXNz KGVzKQoJJG1haW50YWluID0gZG9fbGlzdCgkbWFpbnRhaW4pOwoJJG5hdmFycm93ID0gZG9f bGlzdCgkbmF2YXJyb3cpOwoJJG5hdnBhcnIgPSAkbmF2YXJyb3dbMF07CgkkbmF2bmFyciA9 IChjb3VudCgkbmF2YXJyb3cpID4gMSkgPyAkbmF2YXJyb3dbMV0gOiAkbmF2YXJyb3dbMF07 CgkkbmF2Y2xhc3MgPSBkb19saXN0KCRuYXZjbGFzcyk7CgkkbmF2cGNsYXNzID0gJG5hdmNs YXNzWzBdOwoJJG5hdm5jbGFzcyA9IChjb3VudCgkbmF2Y2xhc3MpID4gMSkgPyAkbmF2Y2xh c3NbMV0gOiAkbmF2Y2xhc3NbMF07CgoJLy8gRmlsdGVycwoJJGZvcHRzID0gYXJyYXkoKTsK CSRjYXRTUUwgPSAkc2VjU1FMID0gJGF1dGhTUUwgPSAkZnBTUUwgPSAnJzsKCWlmKCRjYXRl Z29yeSkgewoJCSRmb3B0c1snYyddID0gJGNhdGVnb3J5OyAvLyBUT0RPOiBDYW4gZm9wdHMg dGFrZSBhIGxpc3Q/IFNob3VsZCBpdCBpbmNsdWRlIHN1YmNhdHM/CgkJJGFsbGNhdHMgPSBk b19saXN0KCRjYXRlZ29yeSk7CgkJJHN1YmNhdHMgPSAoZW1wdHkoJHN1YmNhdHMpKSA/IDAg OiAoKHN0cnRvbG93ZXIoJHN1YmNhdHMpPT0iYWxsIikgPyA5OTk5OSA6IGludHZhbCgkc3Vi Y2F0cykpOwoJCWlmICgkc3ViY2F0cykgewoJCQkkb3V0Y2F0cyA9IGFycmF5KCk7CgkJCWZv cmVhY2ggKCRhbGxjYXRzIGFzICRjYXQpIHsKCQkJCSRjYXRzID0gZ2V0VHJlZShkb3NsYXNo KCRjYXQpLCAnYXJ0aWNsZScpOwoJCQkJZm9yZWFjaCAoJGNhdHMgYXMgJGpkeCA9PiAkdmFs KSB7CgkJCQkJaWYgKCRjYXRzWyRqZHhdWydsZXZlbCddIDw9ICRzdWJjYXRzKSB7CgkJCQkJ CSRvdXRjYXRzW10gPSAkY2F0c1skamR4XVsnbmFtZSddOwoJCQkJCX0KCQkJCX0KCQkJfQoJ CQkkYWxsY2F0cyA9ICRvdXRjYXRzOwoJCX0KCQkkY2F0U1FMID0gZG9RdW90ZShqb2luKCIn LCciLCBkb1NsYXNoKCRhbGxjYXRzKSkpOwoJCSRjYXRTUUwgPSAiIEFORCAoIENhdGVnb3J5 MSBJTiAoIi4kY2F0U1FMLiIpIE9SIENhdGVnb3J5MiBJTiAoIi4kY2F0U1FMLiIpICkgIjsK CX0KCWlmKCRzZWN0aW9uKSB7CgkJJHNlY3MgPSBkb19saXN0KCRzZWN0aW9uKTsKCQkkc21k X2NhbGluZm9bJ3MnXSA9ICRzZWNzWzBdOwoJCSRzZWNTUUwgPSBkb1F1b3RlKGpvaW4oIics JyIsIGRvU2xhc2goJHNlY3MpKSk7CgkJJHNlY1NRTCA9ICIgQU5EIFNlY3Rpb24gSU4gKCIu JHNlY1NRTC4iKSAiOwoJfQoJaWYoJHJlYWxuYW1lKSB7CgkJJGF1dGhvcnMgPSBzYWZlX2Nv bHVtbignbmFtZScsICd0eHBfdXNlcnMnLCAnUmVhbE5hbWUgSU4gKCcuIGRvUXVvdGUoam9p bigiJywnIiwgZG9BcnJheShkb19saXN0KCRyZWFsbmFtZSksICd1cmxkZWNvZGUnKSkpIC4n KScgKTsKCQkkYXV0aG9yID0gam9pbignLCcsICRhdXRob3JzKTsKCX0KCWlmKCRhdXRob3Ip IHsKCQkkZm9wdHNbJ2F1dGhvciddID0gaHRtbGVudGl0aWVzKGdwcygnYXV0aG9yJykpOwoJ CSRhdXRoU1FMID0gZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGF1dGhv cikpKSk7CgkJJGF1dGhTUUwgPSAiIEFORCBBdXRob3JJRCBJTiAoIi4kYXV0aFNRTC4iKSAi OwoJfQoJaWYgKCRmcm9udHBhZ2UgJiYgISRzaG93YWxsKSB7CgkJJGZwU1FMID0gZmlsdGVy RnJvbnRQYWdlKCk7Cgl9Cgkkc21kX2NhbGluZm9bJ2V2aWQnXSA9IDA7Cgkkc21kX2NhbGlu Zm9bJ2FydGlkJ10gPSAkdGhpc2FydGljbGVbJ3RoaXNpZCddOwoJJHNtZF9jYWxpbmZvWydh cnRpdGxlJ10gPSAkdGhpc2FydGljbGVbJ3VybF90aXRsZSddOwoJJG5hbWV2YWwgPSBkb19s aXN0KCRuYW1ldmFsKTsKCWZvcmVhY2ggKCRuYW1ldmFsIGFzICRudikgewoJCSRudiA9IGV4 cGxvZGUoIj0iLCAkbnYpOwoJCWlmICgkbnZbMF0pIHsKCQkJJGZvcHRzWyRudlswXV0gPSAo KGlzc2V0KCRudlsxXSkpID8gJG52WzFdIDogJycpOwoJCX0KCX0KCSRzdGF0dXMgPSBkb19s aXN0KCRzdGF0dXMpOwoJJHN0YXRpID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRzdGF0dXMgYXMg JHN0YXQpIHsKCQlpZiAoZW1wdHkoJHN0YXQpKSB7CgkJCWNvbnRpbnVlOwoJCX0gZWxzZSBp ZiAoaXNfbnVtZXJpYygkc3RhdCkpIHsKCQkJJHN0YXRpW10gPSAkc3RhdDsKCQl9IGVsc2Ug ewoJCQkkc3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7CgkJfQoJfQoJJHN0YXRpID0g IiBTdGF0dXMgSU4gKCIuam9pbignLCcsICRzdGF0aSkuIikiOwoKCSRleHBpcmVkID0gKCRl eHBpcmVkKSA/ICRleHBpcmVkIDogJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNsZXMn XTsKCSRleHBpcmVkID0gKCgkZXhwaXJlZCkgPyAnJyA6ICcgQU5EIChub3coKSA8PSBFeHBp cmVzIE9SIEV4cGlyZXMgPSAnLk5VTExEQVRFVElNRS4nKScpOwoJJGV2ZW50Y2xhc3NlcyA9 IGRvX2xpc3QoJGV2ZW50Y2xhc3Nlcyk7CgkkaG9saWRheWZsYWdzID0gZG9fbGlzdCgkaG9s aWRheWZsYWdzKTsKCSRsaW5rcG9zdGVkID0gZG9fbGlzdCgkbGlua3Bvc3RlZCk7CgkkZGF0 ZWZpZWxkcyA9IGRvX2xpc3QoJGRhdGVmaWVsZHMpOwoKCS8vIFdvcmsgb3V0IHRoZSBmaXJz dCBhbmQgbGFzdCBwb3N0cyB0byBkZXRlcm1pbmUgdGhlIHllYXIgcmFuZ2UgLSBwcm9iYWJs eSBhIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcyB0aGFuIDMgcXVlcmllcwoJJGZpbHQgPSAk c3RhdGkgLiAoKCRjYXRlZ29yeSkgPyAkY2F0U1FMIDogJycpIC4gKCgkc2VjdGlvbikgPyAk c2VjU1FMIDogJycpIC4gKCgkYXV0aG9yKSA/ICRhdXRoU1FMIDogJycpIC4gJGZwU1FMOwoJ JGVhcmxpZXN0ID0gc2FmZV9maWVsZCgndW5peF90aW1lc3RhbXAoUG9zdGVkKSBBUyB1UG9z dGVkJywgJ3RleHRwYXR0ZXJuJywgJGZpbHQgLicgT1JERVIgQlkgUG9zdGVkIEFTQyBMSU1J VCAwLCAxJywgJGRlYnVnKTsKCSRscCA9IHNhZmVfZmllbGQoJ3VuaXhfdGltZXN0YW1wKFBv c3RlZCkgQVMgdVBvc3RlZCcsICd0ZXh0cGF0dGVybicsICRmaWx0IC4nIE9SREVSIEJZIFBv c3RlZCBERVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOwoJJGxtID0gc2FmZV9maWVsZCgndW5p eF90aW1lc3RhbXAoTGFzdE1vZCkgQVMgdUxhc3RNb2QnLCAndGV4dHBhdHRlcm4nLCAkZmls dCAuJyBPUkRFUiBCWSBMYXN0TW9kIERFU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7CgkkbGF0 ZXN0ID0gKCR0aW1lPT0icGFzdCIpID8gdGltZSgpIDogKCgkbHAgPiAkbG0pID8gJGxwIDog JGxtKTsKCgkkeWVhcndpZHRoID0gZG9fbGlzdCgkeWVhcndpZHRoKTsKCSR5ZWFyd2lkdGhb MF0gPSAoZW1wdHkoJHllYXJ3aWR0aFswXSkpID8gMCA6ICR5ZWFyd2lkdGhbMF07CglpZiAo Y291bnQoJHllYXJ3aWR0aCkgPT0gMSkgewoJCSR5ZWFyd2lkdGhbMV0gPSAkeWVhcndpZHRo WzBdOwoJfQoJJHVzZW5vdyA9IGFycmF5KGZhbHNlLGZhbHNlKTsKCWZvcmVhY2ggKCR5ZWFy d2lkdGggYXMgJHlyaWR4ID0+ICR5cml0ZW0pIHsKCQlpZiAoc3RycG9zKCR5cml0ZW0sImMi KSAhPT0gZmFsc2UpIHsKCQkJJHllYXJ3aWR0aFskeXJpZHhdID0gaW50dmFsKCR5cml0ZW0p OwoJCQkkdXNlbm93WyR5cmlkeF0gPSB0cnVlOwoJCX0KCX0KCgkvLyBSZW1hcCB3L20veSB0 byBvdGhlciB2YXJzIGlmIHJlcXVpcmVkCgkkcmVtYXAgPSBkb19saXN0KCRyZW1hcCk7Cgkk ZG1hcCA9IGFycmF5KCJ5IiA9PiAieSIsICJtIiA9PiAibSIsICJ3IiA9PiAidyIpOwoJZm9y ZWFjaCAoJHJlbWFwIGFzICRkcGFpcikgewoJCSRkcGFpciA9IGRvX2xpc3QoJGRwYWlyLCAn OicpOwoJCSRkbWFwWyRkcGFpclswXV0gPSAoaXNzZXQoJGRwYWlyWzFdKSkgPyAkZHBhaXJb MV0gOiAkZHBhaXJbMF07Cgl9CgkkZWFybGllc3QgPSBkYXRlKCJZIiwgc3RydG90aW1lKCIt Ii4keWVhcndpZHRoWzBdLiIgeWVhciIsICggKGVtcHR5KCRlYXJsaWVzdCkgfHwgJHVzZW5v d1swXT09dHJ1ZSkgPyB0aW1lKCkgOiAkZWFybGllc3QpICkgKTsKCSRsYXRlc3QgPSBkYXRl KCJZIiwgc3RydG90aW1lKCIrIi4keWVhcndpZHRoWzFdLiIgeWVhciIsICggKGVtcHR5KCRs YXRlc3QpIHx8ICR1c2Vub3dbMV09PXRydWUpID8gdGltZSgpIDogJGxhdGVzdCkgKSApOwoK CS8vIENoZWNrIHRoZSBVUkwgZm9yIGN1cnJlbnQgZGF0ZSBhbmQgY2FsZW5kYXIgdGFyZ2V0 IGluZm8KCSRpbl9jYWxpZCA9IGdwcygnY2FsaWQnKTsKCSRpbl95ZWFyID0gKGdwcygkZG1h cFsieSJdKSBhbmQgaXNfbnVtZXJpYyhncHMoJGRtYXBbInkiXSkpKSA/IChpbnQpZ3BzKCRk bWFwWyJ5Il0pIDogJyc7CgkkaW5fbW9udGggPSAoZ3BzKCRkbWFwWyJtIl0pIGFuZCBpc19u dW1lcmljKGdwcygkZG1hcFsibSJdKSkpID8gKGludClncHMoJGRtYXBbIm0iXSkgOiAnJzsK CSRpbl93ZWVrID0gKGdwcygkZG1hcFsidyJdKSBhbmQgaXNfbnVtZXJpYyhncHMoJGRtYXBb InciXSkpKSA/IChpbnQpZ3BzKCRkbWFwWyJ3Il0pIDogJyc7CgoJaWYoJHN0YXRpYykgeyAv LyBpZiB3ZSdyZSBzdGF0aWMgdy9vIGFueSBzdXBwbGllZCB2YXJzLCB1c2UgdGhlIGN1cnJl bnQgZGF0ZQoJCWlmKCEkeWVhcikgeyAkeWVhciA9IHNhZmVfc3RyZnRpbWUoJyVZJyk7IH0K CQlpZighJG1vbnRoKSB7ICRtb250aCA9IHNhZmVfc3RyZnRpbWUoJyVtJyk7IH0KCX0gZWxz ZSB7IC8vIG90aGVyd2lzZSB1c2UgY3VycmVudCBkYXRlIG9ubHkgaWYgdGhlcmUncyBub3Ro aW5nIGVsc2UKCQlpZiggJGlkID09ICRpbl9jYWxpZCApIHsgLy8gdXNlIGluY29taW5nCgkJ CSR5ZWFyID0gKCRpbl95ZWFyKSA/ICRpbl95ZWFyIDogKCgkeWVhcikgPyAkeWVhciA6IHNh ZmVfc3RyZnRpbWUoJyVZJykpOwoJCQkkbW9udGggPSAoJGluX21vbnRoKSA/ICRpbl9tb250 aCA6ICgoJG1vbnRoKSA/ICRtb250aCA6IHNhZmVfc3RyZnRpbWUoJyVtJykpOwoJCQkvLyBJ ZiB3ZWVrIGlzIHVzZWQsIGFkanVzdCBtb250aCBzbyBpdCBlbmNvbXBhc3NlcyB0aGUgZ2l2 ZW4gd2VlawoJCQkkd2VlayA9ICRpbl93ZWVrOwoJCQlpZiAoJHdlZWspIHsKCQkJCSRtb250 aCA9IHNhZmVfc3RyZnRpbWUoIiVtIiwgc3RydG90aW1lKCR5ZWFyLiJXIi5zdHJfcGFkKCR3 ZWVrLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkpKTsgLy8gR2V0IHRoZSBtb250aCBmcm9tIHRo ZSB3ZWVrCgkJCX0KCQl9IGVsc2UgeyAvLyB1c2UgY3VycmVudAoJCQlpZighJHllYXIpIHsg JHllYXIgPSBzYWZlX3N0cmZ0aW1lKCclWScpOyB9CgkJCWlmKCEkbW9udGgpIHsgJG1vbnRo ID0gc2FmZV9zdHJmdGltZSgnJW0nKTsgfQoJCQlpZigkd2VlaykgeyAkbW9udGggPSBzYWZl X3N0cmZ0aW1lKCIlbSIsIHN0cnRvdGltZSgkeWVhci4iVyIuc3RyX3BhZCgkd2VlaywgMiwg JzAnLCBTVFJfUEFEX0xFRlQpKSk7IH0KCQl9Cgl9Cgkkc21kX2NhbGluZm9bJ2lkJ10gPSAo JGluX2NhbGlkKSA/ICRpbl9jYWxpZCA6ICRpZDsKCSRzbWRfZGF0ZVsneSddID0gJHllYXI7 ICRzbWRfZGF0ZVsnbSddID0gJG1vbnRoOyAvLyAkd2Vlay9kYXkvaXNveWVhciBhcmUgc2V0 IHBlciBldmVudCBsYXRlcgoKCSR0c19maXJzdCA9IG1rdGltZSgwLCAwLCAwLCAkbW9udGgs IDEsICR5ZWFyKTsKCSR0c19sYXN0ID0gbWt0aW1lKDIzLCA1OSwgNTksICRtb250aCwgZGF0 ZSgndCcsJHRzX2ZpcnN0KSwgJHllYXIpOwoJJHRzX2xhc3RvZmYgPSAkdHNfbGFzdCAtIHR6 X29mZnNldCgkdHNfbGFzdCk7CglpZiAoJGRlYnVnKSB7CgkJZWNobyAiKysgVEhJUyBNT05U SCdTIENBTEVOREFSIFsgc3RhcnQgc3RhbXAgLy8gZW5kIGRhdGUgLy8gZW5kIHN0YW1wIC8v IGVuZCBkYXRlIC8vIHR6IG9mZnNldCAoZW5kKSBdICsrIjsKCQlkbXAoJHRzX2ZpcnN0LCBk YXRlKCdZLW0tZCBIOmk6cycsICR0c19maXJzdCksICR0c19sYXN0LCBkYXRlKCdZLW0tZCBI Omk6cycsICR0c19sYXN0KSwgJHRzX2xhc3RvZmYpOwoJfQoJJGV4dHJhc3FsID0gJGNhdFNR TCAuICRzZWNTUUwgLiAkYXV0aFNRTCAuICRmcFNRTDsKCglzd2l0Y2goJHRpbWUpIHsKCQlj YXNlICJhbnkiIDogYnJlYWs7CgkJY2FzZSAiZnV0dXJlIiA6ICRleHRyYXNxbCAuPSAiIEFO RCBQb3N0ZWQgPiBub3coKSI7IGJyZWFrOwoJCWRlZmF1bHQgOiAkZXh0cmFzcWwgLj0gIiBB TkQgUG9zdGVkIDwgbm93KCkiOyBicmVhazsgLy8gVGhlIHBhc3QKCX0KCgkvLyBIb2xpZGF5 cyBhcmUgZ2xvYmFsICdleGNsdXNpb25zJywgZWl0aGVyIGRlZmluZWQgZGlyZWN0bHkgb3Ig aW4gYSB0eHA6dmFyaWFibGUKCSRob2xpZGF5cyA9IGRvX2xpc3QoJGhvbGlkYXlzKTsKCSR0 eHBob2xzID0gZG9fbGlzdCgkaG9saWRheXNbMF0sICI6Iik7CglpZiAoJHR4cGhvbHNbMF0g PT0gInR4cHZhciIpIHsKCQkkaG9saWRheXMgPSBkb19saXN0KCR2YXJpYWJsZVskdHhwaG9s c1sxXV0pOwoJfQoJLy8gRm9yY2UgZWFjaCBob2xpZGF5IHRvIGEga25vd24gZm9ybWF0LiBI b2xpZGF5cyB3aXRob3V0IHllYXJzIHVzZSBjdXJyZW50IHllYXIKCWZvcmVhY2ggKCRob2xp ZGF5cyBhcyAka2V5ID0+ICR2YWwpIHsKCQlpZiAoZW1wdHkoJHZhbCkpIGNvbnRpbnVlOwoJ CSRudW1wYXJ0cyA9IHByZWdfbWF0Y2goJy9eKFtcZFx3XSspLj8oW1xkXHddKykuPyhbXGRc d10rKT8kLycsICR2YWwsICRwYXJ0cyk7CgoJCWlmICgkbnVtcGFydHMpIHsKCQkJaWYgKGNv dW50KCRwYXJ0cykgPT0gMykgewoJCQkJJHBhcnRzWzNdID0gJHllYXI7CiAgICAgICAgIH0K CQkJJHZhbCA9IHN0cl9wYWQoJHBhcnRzWzFdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0n LnN0cl9wYWQoJHBhcnRzWzJdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLiRwYXJ0c1sz XTsKCQl9CgkJJGhvbGlkYXlzWyRrZXldID0gZGF0ZSgiZC1NLVkiLCBzYWZlX3N0cnRvdGlt ZSgkdmFsKSk7Cgl9CgoJaWYgKCRkZWJ1ZyA+IDAgJiYgIWVtcHR5KCRob2xpZGF5cykgJiYg JGhvbGlkYXlzWzBdICE9ICcnKSB7CgkJZWNobyAiKysgSE9MSURBWVMgKysgIjsKCQlkbXAo JGhvbGlkYXlzKTsKCX0KCgkvLyBHZXQgYWxsIG1hdGNoaW5nIGFydGljbGVzIGluIChhbmQg YmVmb3JlKSB0aGlzIG1vbnRoCgkkZXZlbnRzID0gYXJyYXkoKTsKCSR1cG9zdGVkX2ZpZWxk ID0gKGVtcHR5KCRkYXRlZmllbGRzWzBdKSkgPyAndVBvc3RlZCcgOiAiVU5JWF9USU1FU1RB TVAoJGRhdGVmaWVsZHNbMF0pIjsKCSRzcWwyID0gJHN0YXRpIC4gIiBIQVZJTkcgJHVwb3N0 ZWRfZmllbGQgPD0gIi4kdHNfbGFzdG9mZi4gJGV4cGlyZWQgLiAkZXh0cmFzcWwgLiIgT1JE RVIgQlkgUG9zdGVkIEFTQyI7CgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3RhbXAoUG9z dGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFzdE1vZCwg dW5peF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOwoJJGV2bGlzdCA9IHNhZmVf cm93cygkZ3JhYkNvbHMsICd0ZXh0cGF0dGVybicsICRzcWwyLCAkZGVidWcpOwoJYXJ0aWNs ZV9wdXNoKCk7CgoJLy8gSWYgYW55IGV2ZW50cyByZWN1ciBhbmQgZmFsbCB3aXRoaW4gdGhl IGN1cnJlbnQgbW9udGgsIGFkZCB0aG9zZSBhcyB3ZWxsCgkvLyBJZiBhbnkgZGF0ZXMgYXJl IHRvIGJlIGV4Y2x1ZGVkLCB0aGUgZW50cnkgaXMgc2tpcHBlZCBVTkxFU1Mgc2hvd3NraXBw ZWQgaW5kaWNhdGVzIG90aGVyd2lzZQoJZm9yZWFjaCAoJGV2bGlzdCBhcyAkcm93KSB7CgkJ JGlkeCA9IDA7IC8vIEluIGNhc2UgdGhlIDFzdCBkYXkgb2YgdGhlIG1vbnRoIGlzIGEgY29u dGludWF0aW9uIG9mIGFuIGV2ZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbW9u dGgKCQkkc3RhcnQgPSAoIWVtcHR5KCRkYXRlZmllbGRzWzBdKSAmJiAhZW1wdHkoJHJvd1sk ZGF0ZWZpZWxkc1swXV0pICYmICgkc3RkdCA9IHN0cnRvdGltZSgkcm93WyRkYXRlZmllbGRz WzBdXSkpICE9PSBmYWxzZSkgPyAkc3RkdCA6ICRyb3dbJ3VQb3N0ZWQnXSArIHR6X29mZnNl dCgkcm93Wyd1UG9zdGVkJ10pOwoJCSRzdGFydF9kYXRlID0gZGF0ZSgiWS1tLWQiLCAkc3Rh cnQpOyAvLyBGb3IgcmVjdXJyaW5nL3NwYW5uZWQgZXZlbnRzIG9uIGEgbWluaWNhbCwgdGhp cyBpcyB0aGUgZXZlbnQgdGhlIGNlbGwgbGlua3MgdG8KCQkkcmVhbF9lbmQgPSAoaXNzZXQo JGRhdGVmaWVsZHNbMV0pICYmICFlbXB0eSgkcm93WyRkYXRlZmllbGRzWzFdXSkgJiYgKCRl bmR0ID0gc3RydG90aW1lKCRyb3dbJGRhdGVmaWVsZHNbMV1dKSkgIT09IGZhbHNlKSA/ICRl bmR0IDogKCgkcm93Wyd1RXhwaXJlcyddPT0wKSA/IDAgOiAkcm93Wyd1RXhwaXJlcyddICsg dHpfb2Zmc2V0KCRyb3dbJ3VFeHBpcmVzJ10pKTsKCgkJLy8gSWYgZW5kIDwgc3RhcnQgdGhl IHVzZXItc3BlY2lmaWVkIGRhdGVzIGNhbm5vdCBiZSB0cnVzdGVkCgkJaWYgKCRyZWFsX2Vu ZCAhPSAwICYmICRyZWFsX2VuZCA8PSAkc3RhcnQpIHsKCQkJJHN0YXJ0ID0gJHJvd1sndVBv c3RlZCddICsgdHpfb2Zmc2V0KCRyb3dbJ3VQb3N0ZWQnXSk7CgkJCSRyZWFsX2VuZCA9ICRy b3dbJ3VFeHBpcmVzJ10gKyB0el9vZmZzZXQoJHJvd1sndUV4cGlyZXMnXSk7CgkJCXRyaWdn ZXJfZXJyb3IoJ0V4cGlyeSBjYW5ub3QgYmUgYmVmb3JlIHN0YXJ0IGRhdGUgaW4gIicuJHJv d1snVGl0bGUnXS4nIjogaWdub3JlZCcsIEVfVVNFUl9XQVJOSU5HKTsKCQl9CgoJCSRlbmQg PSAoJHJlYWxfZW5kICE9IDAgJiYgJHJlYWxfZW5kIDwgJHRzX2xhc3QpID8gJHJlYWxfZW5k IDogJHRzX2xhc3Q7CgkJJHJlYWxfZGlmZiA9ICgkcmVhbF9lbmQ9PTApID8gMCA6ICRyZWFs X2VuZCAtICRzdGFydDsKCQkkZmFrZV9kaWZmID0gc3RydG90aW1lKGRhdGUoIlktTS1kIiwg JHJlYWxfZW5kKSAuICIgMjM6NTk6NTkiKTsKCQkkZGlmZiA9ICgkcmVhbF9lbmQ9PTApID8g MCA6ICRmYWtlX2RpZmYgLSAkc3RhcnQ7CgkJJHNtZF9jYWxfZmxhZyA9ICRzbWRfY2FsX3Vj bHMgPSBhcnJheSgpOwoKCQkkZXZfbW9udGggPSBkYXRlKCdtJywgJHN0YXJ0KTsKCQkkZXZf eWVhciA9IGRhdGUoJ1knLCAkc3RhcnQpOwoJCSRldl9ociA9IGRhdGUoJ0gnLCAkc3RhcnQp OwoJCSRldl9tbiA9IGRhdGUoJ2knLCAkc3RhcnQpOwoJCSRldl9zYyA9IGRhdGUoJ3MnLCAk c3RhcnQpOwoKCQlpZiAoJGRlYnVnID4gMSkgewoJCQllY2hvICcrKyBFVkVOVCBTVEFSVCAv LyBFTkQgLy8gKGlmIG5vbi16ZXJvKSBSRUFMIEVORCArKyc7CgkJCWRtcChkYXRlKCdkLU0t WSBIOmk6cycsICRzdGFydCkgLicgLy8gJy4gZGF0ZSgnZC1NLVkgSDppOnMnLCAkZW5kKSAu JyAvLyAnLiAoICgkcmVhbF9lbmQgPT0gMCkgPyAnJyA6IGRhdGUoJ2QtTS1ZIEg6aTpzJywg JHJlYWxfZW5kKSApKTsKCQkJZG1wKCRyb3dbJ1RpdGxlJ10pOwoJCQlpZiAoJGRlYnVnID4g MikgewoJCQkJZG1wKCRyb3cpOwoJCQl9CgkJfQoKCQkkbXVsdGkgPSAoKCRlbmQgPiAkc3Rh cnQpICYmICgkcmVhbF9lbmQgPiAkc3RhcnQpICYmICgkcmVhbF9lbmQgPiAkdHNfZmlyc3Qp ICYmIChkYXRlKCJkLW0tWSIsICRyZWFsX2VuZCkgIT0gZGF0ZSgiZC1tLVkiLCAkc3RhcnQp KSkgPyB0cnVlIDogZmFsc2U7CgkJJHJlY3VyID0gKGVtcHR5KCRyb3dbJHN0ZXBmaWVsZF0p KSA/IGZhbHNlIDogdHJ1ZTsKCQkkaG9sX2hpdCA9IGluX2FycmF5KGRhdGUoImQtTS1ZIiwg JHN0YXJ0KSwgJGhvbGlkYXlzKTsKCQkkZXZjbGFzc2VzID0gYXJyYXkoKTsKCQlmb3JlYWNo ICgkZXZlbnRjbGFzc2VzIGFzICRldmNscykgewoJCQlzd2l0Y2ggKCRldmNscykgewoJCQkJ Y2FzZSAiIjoKCQkJCQlicmVhazsKCQkJCWNhc2UgImdjYXQiOgoJCQkJCWlmIChpc3NldCgk cHJldGV4dFsnYyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2MnXSkpIHsKCQkJCQkJJGV2Y2xh c3Nlc1tdID0gJGV2Y19wZnguJHByZXRleHRbJ2MnXTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJ CQljYXNlICJjYXRlZ29yeSI6CgkJCQkJaWYgKGlzc2V0KCRyb3dbJ0NhdGVnb3J5MSddKSAm JiAhZW1wdHkoJHJvd1snQ2F0ZWdvcnkxJ10pKSB7CgkJCQkJCSRldmNsYXNzZXNbXSA9ICRl dmNfcGZ4LiRyb3dbJ0NhdGVnb3J5MSddOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJHJvd1sn Q2F0ZWdvcnkyJ10pICYmICFlbXB0eSgkcm93WydDYXRlZ29yeTInXSkpIHsKCQkJCQkJJGV2 Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHJvd1snQ2F0ZWdvcnkyJ107CgkJCQkJfQoJCQkJCWJy ZWFrOwoJCQkJY2FzZSAic2VjdGlvbiI6CgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydzJ10p ICYmICFlbXB0eSgkcHJldGV4dFsncyddKSkgewoJCQkJCQkkZXZjbGFzc2VzW10gPSAkZXZj X3BmeC4kcHJldGV4dFsncyddOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgImF1dGhv ciI6CgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydhdXRob3InXSkgJiYgIWVtcHR5KCRwcmV0 ZXh0WydhdXRob3InXSkpIHsKCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHByZXRl eHRbJ2F1dGhvciddOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJaWYg KGlzc2V0KCRyb3dbJGV2Y2xzXSkgJiYgIWVtcHR5KCRyb3dbJGV2Y2xzXSkpIHsKCQkJCQkJ JGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHJvd1skZXZjbHNdOwoJCQkJCX0KCQkJCQlicmVh azsKCQkJfQoJCX0KCQkkZXZjbGFzc2VzID0gKCRldmNsYXNzZXMpID8gJyAnLiBqb2luKCcg JywgJGV2Y2xhc3NlcykgOiAnJzsKCQkkaWdub3JlID0gJG9taXQgPSAkY2ZsYWcgPSBhcnJh eSgpOwoKCQlpZiAoJGRlYnVnID4gMSAmJiAkZXZjbGFzc2VzKSB7CgkJCWVjaG8gJysrIEVW RU5UIENMQVNTRVMgKysnOwoJCQlkbXAoJGV2Y2xhc3Nlcyk7CgkJfQoKCQkvLyBFdmVudHMg dGhhdCBzdGFydCBvciBhcmUgYWRkZWQgdGhpcyBtb250aAoJCWlmICgoJHN0YXJ0IDwgJGVu ZCkgJiYgKCRzdGFydCA+ICR0c19maXJzdCkpIHsKCQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgk cm93KTsKCQkJJHNtZF9jYWxpbmZvWydldmlkJ10gPSAkcm93WydJRCddOwoJCQkvLyBhIHN0 YW5kYXJkIGV2ZW50IG9yIHN0YXJ0IG9mIGEgbXVsdGkKCQkJaWYgKCRzaG93c3Bhbm5lZCAm JiAkbXVsdGkgJiYgISRyZWN1cikgewoJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ211bHRpZmly c3QnOwoJCQl9CgkJCWlmICgkcmVjdXIpIHsKCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1 cmZpcnN0JzsKCQkJfQoJCQlpZiAoISRzbWRfY2FsX2ZsYWcpIHsKCQkJCSRzbWRfY2FsX2Zs YWdbXSA9ICdzdGFuZGFyZCc7CgkJCX0KCQkJaWYgKCAoICRob2xfaGl0ICYmICFpbl9hcnJh eSgnbXVsdGknLCRob2xpZGF5ZmxhZ3MpICYmIGluX2FycmF5KCdtdWx0aWZpcnN0Jywkc21k X2NhbF9mbGFnKSApIHx8ICggJGhvbF9oaXQgJiYgIWluX2FycmF5KCdzdGFuZGFyZCcsJGhv bGlkYXlmbGFncykgJiYgaW5fYXJyYXkoJ3N0YW5kYXJkJywkc21kX2NhbF9mbGFnKSApICkg ewoJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7CgkJCX0KCQkJZm9yZWFjaCAoJHNt ZF9jYWxfZmxhZyBhcyAkaXRlbSkgewoJCQkJJGNmbGFnW10gPSAkY2xzX3BmeC4kaXRlbTsK CQkJfQoKCQkJJGlkeCA9ICRzbWRfZGF0ZVsnZCddID0gKGludClzdHJmdGltZSgnJWQnLCAk c3RhcnQpOwoJCQkkc21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRf d2luKCclVicsICRzdGFydCksICRzdGFydCk7CgkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0 aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclRycsICRzdGFydCksICRzdGFydCk7CgkJCSR1 c2VfcG9zdGVkID0gaW5fYXJyYXkoJ3N0YW5kYXJkJywgJGxpbmtwb3N0ZWQpOwoJCQkkb3Ag PSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZv cm0pIDogKCgkc2l6ZT09InNtYWxsIikgPyBzbWRfY2FsX21pbmlsaW5rKCRyb3csICRpZHgs ICRtb250aCwgJHllYXIsICR1c2VfcG9zdGVkKSA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVy bWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOwoKCQkJ JGV2ZW50c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICdmbGFnJyA9PiAkc21kX2Nh bF9mbGFnLCAnY2xhc3NlcycgPT4gKCgkY2ZsYWcpID8gam9pbignICcsYXJyYXlfbWVyZ2Uo JGNmbGFnLCAkc21kX2NhbF91Y2xzKSkgOiAnJykuJGV2Y2xhc3NlcywgJ3Bvc3RlZCcgPT4g JHN0YXJ0X2RhdGUpOwoJCQkkc21kX2NhbF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNs cyA9IGFycmF5KCk7CgkJCSR1c2VfcG9zdGVkID0gJyc7CgkJfQoKCQkvLyBHZW5lcmF0ZSBh IHNraXAgYXJyYXkgZm9yIHRoaXMgZXZlbnQKCQlpZiAoJHNraXBmaWVsZCAmJiAkcm93WyRz a2lwZmllbGRdICE9ICcnKSB7CgkJCSRpZ25vcmVzID0gZG9fbGlzdCgkcm93WyRza2lwZmll bGRdKTsKCQkJZm9yZWFjaCAoJGlnbm9yZXMgYXMgJHZhbCkgewoJCQkJJGlncm5nID0gc21k X2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCwgJHN0YXJ0LCAkZW5kKTsKCQkJCWZvcmVhY2ggKCRp Z3JuZyBhcyAkdGhldmFsKSB7CgkJCQkJJGlnbm9yZVtdID0gZGF0ZSgiZC1NLVkiLCAkdGhl dmFsKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRvIGEga25vd24gZm9ybWF0CgkJCQl9CgkJCX0K CQl9CgkJLy8gR2VuZXJhdGUgYW4gb21pdCBhcnJheSBmb3IgdGhpcyBldmVudAoJCWlmICgk b21pdGZpZWxkICYmICRyb3dbJG9taXRmaWVsZF0gIT0gJycpIHsKCQkJJG9taXRzID0gZG9f bGlzdCgkcm93WyRvbWl0ZmllbGRdKTsKCQkJZm9yZWFjaCAoJG9taXRzIGFzICR2YWwpIHsK CQkJCSRvbXJuZyA9IHNtZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwsICRzdGFydCwgJGVuZCk7 CgkJCQlmb3JlYWNoICgkb21ybmcgYXMgJHRoZXZhbCkgewoJCQkJCSRvbWl0W10gPSBkYXRl KCJkLU0tWSIsICR0aGV2YWwpOwoJCQkJfQoJCQl9CgkJfQoJCWlmICgkZGVidWcgPiAxICYm ICgkaWdub3JlIHx8ICRvbWl0KSkgewoJCQllY2hvICcrKyBPTUlUVEVEIERBVEVTICsrJzsK CQkJZG1wKCRvbWl0KTsKCQkJZWNobyAnKysgQ0FOQ0VMTEVEIERBVEVTICsrJzsKCQkJZG1w KCRpZ25vcmUpOwoJCX0KCQkvLyBDYWxjdWxhdGUgdGhlIGRhdGUgb2Zmc2V0cyBhbmQgY2hl Y2sgcmVjdXJyaW5nIGV2ZW50cyB0aGF0IGZhbGwgd2l0aGluIHRoZSBtb250aCBvZiBpbnRl cmVzdAoJCWlmICgkc3RlcGZpZWxkICYmICRyb3dbJHN0ZXBmaWVsZF0gIT0gJycpIHsKCQkJ JGZyZXEgPSBkb19saXN0KCRyb3dbJHN0ZXBmaWVsZF0pOwoJCQkkc3RhbXBvZmYgPSAoaW50 KSgzNjAwKiRldl9ocikgKyAoaW50KSg2MCokZXZfbW4pICsgKGludCkkZXZfc2M7CgkJCWZv cmVhY2ggKCRmcmVxIGFzICRpbnRlcnZhbCkgewoJCQkJJG1heF9sb29wID0gOTk5OTk7IC8v IFl1aywgYnV0IHByYWN0aWNhbGx5IGxpbWl0bGVzcwoJCQkJJG9yaWdlcnZhbCA9ICRpbnRl cnZhbDsKCQkJCSRpbnRlcnZhbCA9IHN0cl9yZXBsYWNlKCI/bW9udGgiLCBkYXRlKCdGJywg bWt0aW1lKDAsMCwwLCRtb250aCwxKSksICRpbnRlcnZhbCk7CgkJCQkkaW50ZXJ2YWwgPSBz dHJfcmVwbGFjZSgiP3llYXIiLCAkeWVhciwgJGludGVydmFsKTsKCQkJCWlmIChzdHJwb3Mo JGludGVydmFsLCAibGFzdCIpID09PSAwKSB7CgkJCQkJJGludGVydmFsID0gZGF0ZSgibCwg RiBqUyBZIiwgc3RydG90aW1lKCAkaW50ZXJ2YWwsIG1rdGltZSgxMiwgMCwgMCwgZGF0ZSgi biIsIG1rdGltZSgwLDAsMCwkbW9udGgsMSwkeWVhcikpKzEsIDEsICR5ZWFyKSApKTsKCQkJ CQkkbWF4X2xvb3AgPSAxOwoJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGludGVydmFsLCAiZmly c3QiKSA9PT0gMCkgewoJCQkJCSRpbnRlcnZhbCA9IGRhdGUoImwsIEYgalMgWSIsIHN0cnRv dGltZSggJGludGVydmFsLCBta3RpbWUoMTIsIDAsIDAsICgoJG1vbnRoPjEpID8gJG1vbnRo LTEgOiAxMiksIGRhdGUoInQiLCBta3RpbWUoMCwwLDAsJG1vbnRoLTEsMSwoKCRtb250aD09 MSkgPyAkeWVhci0xOiAkeWVhcikpKSwgKCgkbW9udGg9PTEpID8gJHllYXItMTogJHllYXIp KSApKTsKCQkJCQkkbWF4X2xvb3AgPSAxOwoJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGludGVy dmFsLCAidGhpcyIpID09PSAwKSB7CgkJCQkJJG1heF9sb29wID0gMTsKCQkJCX0KCQkJCSR0 c19sb29wID0gMDsKCQkJCSR0c19jdXJyID0gJHN0YXJ0OwoJCQkJaWYgKHN0cnBvcygkb3Jp Z2VydmFsLCAiP21vbnRoIikgfHwgc3RycG9zKCRvcmlnZXJ2YWwsICI/eWVhciIpKSB7CgkJ CQkJJG1heF9sb29wID0gMTsKICAgICAgICAgICAgfQoKCQkJCXdoaWxlICgkdHNfY3VyciA8 ICRlbmQgJiYgJHRzX2xvb3AgPCAkbWF4X2xvb3ApIHsKCQkJCQlpZiAoJG1heF9sb29wID09 IDEpIHsKCQkJCQkJJHRzX2N1cnIgPSBzdHJ0b3RpbWUoJGludGVydmFsKTsKCQkJCQkJJHRz X2N1cnIgPSAoJHRzX2N1cnIgPCAkc3RhcnQgfHwgJHRzX2N1cnIgPiAkZW5kKSA/ICRzdGFy dCA6ICR0c19jdXJyOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0c19jdXJyID0gc3RydG90aW1l KCRpbnRlcnZhbCwgJHRzX2N1cnIpOwoJCQkJCX0KCQkJCQlpZiAoJHRzX2N1cnIgPT09IGZh bHNlKSB7CgkJCQkJCSR0c19sb29wKys7CgkJCQkJCWJyZWFrOwoJCQkJCX0gZWxzZSB7CgkJ CQkJCWlmICgkZGVidWcgPiAxKSB7CgkJCQkJCQlkbXAoIklOVEVSVkFMOiAiLiBkYXRlKCdk LU0tWSBIOmk6cycsICR0c19jdXJyKyRzdGFtcG9mZikpOwoJCQkJCQl9CgkJCQkJCWlmICgk dHNfY3VyciA8ICRlbmQgJiYgJHRzX2N1cnIgPj0gJHRzX2ZpcnN0ICYmICR0c19jdXJyICE9 ICRzdGFydCkgewoJCQkJCQkJLy8gQSByZWN1cnJpbmcgZXZlbnQuIENoZWNrIGl0IGlzbid0 IGEgaG9saWRheSBvciB0byBiZSBpZ25vcmVkCgkJCQkJCQlwb3B1bGF0ZUFydGljbGVEYXRh KCRyb3cpOwoJCQkJCQkJJG9wID0gJyc7CgkJCQkJCQkkaWR4ID0gKGludClzdHJmdGltZSgn JWQnLCAkdHNfY3Vycik7CgkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAncmVjdXInOwoJCQkJ CQkJJHRoaXNkYXRlID0gZGF0ZSgiZC1NLVkiLCAkdHNfY3Vycik7CgkJCQkJCQkkb21pdF9t ZSA9IGluX2FycmF5KCR0aGlzZGF0ZSwgJG9taXQpOwoJCQkJCQkJJHNob3dfbWUgPSAhaW5f YXJyYXkoJHRoaXNkYXRlLCAkaWdub3JlKTsKCQkJCQkJCSRob2xfaGl0ID0gaW5fYXJyYXko JHRoaXNkYXRlLCAkaG9saWRheXMpOwoJCQkJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYm ICFpbl9hcnJheSgncmVjdXInLCRob2xpZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7CgkJ CQkJCQkkdXNlX3Bvc3RlZCA9IHNtZF9jYWxfaW5fYXJyYXkoYXJyYXkoJ3JlY3VyJywgJ3Jl Y3VyZmlyc3QnKSwgJGxpbmtwb3N0ZWQpOwoKCQkJCQkJCWlmICggJG9taXRfbWUgKSB7CgkJ CQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ29taXQnOwoJCQkJCQkJfQoJCQkJCQkJaWYgKCAo ISRzaG93X21lIHx8ICEkc2hvd19ob2wpICYmICEkb21pdF9tZSApIHsKCQkJCQkJCQkkc21k X2NhbF9mbGFnW10gPSAnY2FuY2VsJzsKCQkJCQkJCX0KCQkJCQkJCWZvcmVhY2ggKCRzbWRf Y2FsX2ZsYWcgYXMgJGl0ZW0pIHsKCQkJCQkJCQkkY2ZsYWdbXSA9ICRjbHNfcGZ4LiRpdGVt OwoJCQkJCQkJfQoKCQkJCQkJCS8vIENyZWF0ZSB0aGUgZXZlbnRzIHRoYXQgYXBwZWFyIGlu IHRoZSBjZWxsIGJ1dCBvbmx5IGlmIHRoZXkndmUgbm90IGFwcGVhcmVkIGJlZm9yZSwgb3Ig YXJlIHRvIGJlIGlnbm9yZWQvb21pdHRlZAoJCQkJCQkJaWYgKCEkb21pdF9tZSkgewoJCQkJ CQkJCWlmICgoJHNob3dfbWUgJiYgJHNob3dfaG9sKSB8fCAkc2hvd3NraXBwZWQpIHsKCQkJ CQkJCQkJJHNtZF9kYXRlWydkJ10gPSAkaWR4OwoJCQkJCQkJCQkkc21kX2RhdGVbJ3cnXSA9 IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclVicsICR0c19jdXJyKSwgJHRzX2N1 cnIpOwoJCQkJCQkJCQkkc21kX2RhdGVbJ2l5J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9y bWF0X3dpbignJUcnLCAkdHNfY3VyciksICR0c19jdXJyKTsKCQkJCQkJCQkJJG9wID0gKCRy ZWN1cmZvcm0pID8gcGFyc2VfZm9ybSgkcmVjdXJmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNl KCR0aGluZykgOiAoKCRzaXplPT0ic21hbGwiKSA/IHNtZF9jYWxfbWluaWxpbmsoJHJvdywg JGlkeCwgJG1vbnRoLCAkeWVhciwgJHVzZV9wb3N0ZWQpIDogaHJlZigkcm93WydUaXRsZSdd LCBwZXJtbGlua3VybCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICk7 CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJJHVzZWQgPSBhcnJheSgpOwoJCQkJCQkJaWYg KGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNbJGlkeF0gIT0gTlVMTCkgewoJCQkJ CQkJCWZvcmVhY2ggKCRldmVudHNbJGlkeF0gYXMgJGV2KSB7CgkJCQkJCQkJCSR1c2VkW10g PSAkZXZbJ2V2J107CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRldmVu dHNbJGlkeF0pICYmICRldmVudHNbJGlkeF0gPT0gTlVMTCB8fCAhaW5fYXJyYXkoJG9wLCAk dXNlZCkpIHsKCQkJCQkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwg J2ZsYWcnID0+ICRzbWRfY2FsX2ZsYWcsICdjbGFzc2VzJyA9PiAoKCRjZmxhZykgPyBqb2lu KCcgJyxhcnJheV9tZXJnZSgkY2ZsYWcsICRzbWRfY2FsX3VjbHMpKSA6ICcnKS4kZXZjbGFz c2VzLCAncG9zdGVkJyA9PiAkc3RhcnRfZGF0ZSk7CgkJCQkJCQl9CgkJCQkJCQkkc21kX2Nh bF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7CgkJCQkJCQkkdXNl X3Bvc3RlZCA9ICcnOwoJCQkJCQl9CgkJCQkJCSR0c19sb29wKys7CgkJCQkJfQoJCQkJfQoJ CQl9CgkJfSBlbHNlIGlmICgkc2hvd3NwYW5uZWQgJiYgJG11bHRpKSB7CgkJCS8vIE5vbi1y ZWN1cnJpbmcgZXZlbnRzIG1heSBzcGFuIG1vcmUgdGhhbiBvbmUgZGF0ZSBidXQgdGhleSBt dXN0IHN0aWxsIHJlc3BlY3QgaWdub3JlZCBkYXRlcyBhbmQgaG9saWRheXMKCQkJcG9wdWxh dGVBcnRpY2xlRGF0YSgkcm93KTsKCQkJJGxhc3RkYXkgPSAoaW50KXN0cmZ0aW1lKCclZCcs ICRlbmQpOwoJCQkkcmVhbF9sYXN0ZGF5ID0gKGludClzdHJmdGltZSgnJWQnLCAkcmVhbF9l bmQpOwoJCQl3aGlsZSAoKyskaWR4IDw9ICRsYXN0ZGF5KSB7CgkJCQkkb3AgPSAnJzsKCQkJ CSRtdWx0aWZsYWcgPSAoJGlkeD09JHJlYWxfbGFzdGRheSkgPyAnbXVsdGlsYXN0JyA6ICgo JGlkeD09MSkgPyAnbXVsdGlwcmV2JyA6ICdtdWx0aScpOwoJCQkJJHNtZF9jYWxfZmxhZ1td ID0gJG11bHRpZmxhZzsKCQkJCSR0aGlzdGltZSA9IG1rdGltZSgwLCAwLCAwLCAkbW9udGgs ICRpZHgsICR5ZWFyKTsKCQkJCSR0aGlzZGF0ZSA9IGRhdGUoImQtTS1ZIiwgJHRoaXN0aW1l KTsKCQkJCSRvbWl0X21lID0gaW5fYXJyYXkoJHRoaXNkYXRlLCAkb21pdCk7CgkJCQkkc2hv d19tZSA9ICFpbl9hcnJheSgkdGhpc2RhdGUsICRpZ25vcmUpOwoJCQkJJGhvbF9oaXQgPSBp bl9hcnJheSgkdGhpc2RhdGUsICRob2xpZGF5cyk7CgkJCQkkc2hvd19ob2wgPSAoJGhvbF9o aXQgJiYgIWluX2FycmF5KCdtdWx0aScsJGhvbGlkYXlmbGFncykgKSA/IGZhbHNlIDogdHJ1 ZTsKCQkJCSR1c2VfcG9zdGVkID0gc21kX2NhbF9pbl9hcnJheShhcnJheSgnbXVsdGknLCAn bXVsdGlmaXJzdCcsICdtdWx0aWxhc3QnLCAnbXVsdGlwcmV2JyksICRsaW5rcG9zdGVkKTsK CQkJCWlmICggJG9taXRfbWUgKSB7CgkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ29taXQnOwoJ CQkJfQoJCQkJaWYgKCAoISRzaG93X21lIHx8ICEkc2hvd19ob2wpICYmICEkb21pdF9tZSAp IHsKCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnY2FuY2VsJzsKCQkJCX0KCQkJCWZvcmVhY2gg KCRzbWRfY2FsX2ZsYWcgYXMgJGl0ZW0pIHsKCQkJCQkkY2ZsYWdbXSA9ICRjbHNfcGZ4LiRp dGVtOwoJCQkJfQoJCQkJLy8gQ3JlYXRlIHRoZSBzcGFubmVkIGV2ZW50IHRoYXQgYXBwZWFy cyBpbiB0aGUgY2VsbAoJCQkJaWYgKCEkb21pdF9tZSkgewoJCQkJCWlmICggKCRzaG93X21l ICYmICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7CgkJCQkJCSRzbWRfZGF0ZVsnZCdd ID0gJGlkeDsKCQkJCQkJJHNtZF9kYXRlWyd3J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9y bWF0X3dpbignJVYnLCAkdGhpc3RpbWUpLCAkdGhpc3RpbWUpOwoJCQkJCQkkc21kX2RhdGVb J2l5J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJUcnLCAkdGhpc3RpbWUp LCAkdGhpc3RpbWUpOwoJCQkJCQkkb3AgPSAoJHNwYW5mb3JtKSA/IHBhcnNlX2Zvcm0oJHNw YW5mb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRzaXplPT0ic21hbGwi KSA/IHNtZF9jYWxfbWluaWxpbmsoJHJvdywgJGlkeCwgJG1vbnRoLCAkeWVhciwgJHVzZV9w b3N0ZWQpIDogaHJlZignJnJhcnI7JywgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9Iicu JHJvd1snVGl0bGUnXS4nIicpKSApOwoJCQkJCX0KCQkJCX0KCQkJCSRldmVudHNbJGlkeF1b XSA9IGFycmF5KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNz ZXMnID0+ICgoJGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9j YWxfdWNscykpIDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsK CQkJCSRzbWRfY2FsX2ZsYWcgPSAkY2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsK CQkJCSR1c2VfcG9zdGVkID0gJyc7CgkJCX0KCQl9CgkJLy8gQWRkIGFueSBleHRyYSBkYXRl cyBmb3IgdGhpcyBldmVudCB0aGF0IGFyZSB3aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgKCQlp ZiAoJGV4dHJhZmllbGQgJiYgJHJvd1skZXh0cmFmaWVsZF0gIT0gJycpIHsKCQkJJHh0cmEg PSBkb19saXN0KCRyb3dbJGV4dHJhZmllbGRdKTsKCQkJJGV2X2hyID0gZGF0ZSgnSCcsICRz dGFydCk7CgkJCSRldl9tbiA9IGRhdGUoJ2knLCAkc3RhcnQpOwoJCQkkZXZfc2MgPSBkYXRl KCdzJywgJHN0YXJ0KTsKCQkJJHN0YW1wb2ZmID0gKGludCkoMzYwMCokZXZfaHIpICsgKGlu dCkoNjAqJGV2X21uKSArIChpbnQpJGV2X3NjOwoJCQlmb3JlYWNoICgkeHRyYSBhcyAkdmFs KSB7CgkJCQlpZiAoc3RycG9zKCR2YWwsICIrIikgPT09IGZhbHNlKSB7CgkJCQkJJGV4cm5n ID0gc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCk7CgkJCQkJJHZhbCA9IGRhdGUoIlktbS1k IiwgJGV4cm5nWzBdKTsKCQkJCQkkc3BpZHRoID0gY291bnQoJGV4cm5nKTsKCQkJCQkkc3Bl eCA9IDA7CgkJCQl9IGVsc2UgewoJCQkJCSRjaGsgPSAkc2hvd3NwYW5uZWQgJiYgISRyZWN1 cjsKCQkJCQkkc3BpZHRoID0gJGNoayA/IGNlaWwoJGRpZmYgLyAoNjAqNjAqMjQpKSA6IDE7 IC8vIGRheXMgYmV0d2VlbiBkYXRlcwoJCQkJCSR2YWwgPSBydHJpbSgkdmFsLCAnKycpOwoJ CQkJCSRzcGV4ID0gJGNoayA/IDEgOiAwOwoJCQkJfQoKCQkJCWZvciAoJGpkeCA9IDE7ICRq ZHggPD0gJHNwaWR0aDsgJGpkeCsrKSB7CgkJCQkJJHRtID0gc2FmZV9zdHJ0b3RpbWUoJHZh bCAuICgoJGpkeD09MSkgPyAnJyA6ICcrJy4oJGpkeC0xKS4nIGRheXMnKSk7CgkJCQkJaWYg KCRkaWZmID4gMCAmJiAkamR4ID09IDEpIHsKCQkJCQkJJGV4cHN0YW1wID0gJHRtKyRzdGFt cG9mZiskcmVhbF9kaWZmOwoJCQkJCX0KCQkJCQkkaWR4ID0gJHNtZF9kYXRlWydkJ10gPSAo aW50KXN0cmZ0aW1lKCclZCcsICR0bSk7CgkJCQkJJGR0ID0gZGF0ZSgiWS1tLWQiLCAkdG0p OwoJCQkJCSRsc3QgPSAoJGV4dHJhc3RyaWN0KSA/ICRlbmQgOiAkdHNfbGFzdDsKCQkJCQlp ZiAoJHRtIDwgJGxzdCAmJiAkdG0gPj0gJHRzX2ZpcnN0KSB7CgkJCQkJCSRmYWtlcm93ID0g JHJvdzsKCQkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAk dG0rJHN0YW1wb2ZmKTsKCQkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICR0bSskc3RhbXBv ZmY7CgkJCQkJCWlmICgkZGlmZj4wKSB7CgkJCQkJCQkkZmFrZXJvd1snRXhwaXJlcyddID0g ZGF0ZSgiWS1tLWQgSDppOnMiLCAkZXhwc3RhbXApOwoJCQkJCQkJJGZha2Vyb3dbJ3VFeHBp cmVzJ10gPSAkZXhwc3RhbXA7CgkJCQkJCX0KCgkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEo JGZha2Vyb3cpOwoJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnZXh0cmEnOwoJCQkJCQkkY2Zs YWdbXSA9ICRjbHNfcGZ4LidleHRyYSc7CgkJCQkJCSRvbWl0X21lID0gZmFsc2U7CgkJCQkJ CSRzaG93X21lID0gJHNob3dfaG9sID0gdHJ1ZTsKCQkJCQkJaWYgKCRzcGV4KSB7CgkJCQkJ CQkkbXVsdGlmbGFnID0gKCRqZHg9PTEpID8gJ211bHRpZmlyc3QnIDogKCgkamR4PT0kc3Bp ZHRoKSA/ICdtdWx0aWxhc3QnIDogKCgkaWR4PT0xKSA/ICdtdWx0aXByZXYnIDogJ211bHRp JykpOwoJCQkJCQkJJHRoaXNkYXRlID0gZGF0ZSgiZC1NLVkiLCAkdG0pOwoJCQkJCQkJJG9t aXRfbWUgPSBpbl9hcnJheSgkdGhpc2RhdGUsICRvbWl0KTsKCQkJCQkJCSRzaG93X21lID0g IWluX2FycmF5KCR0aGlzZGF0ZSwgJGlnbm9yZSk7CgkJCQkJCQkkaG9sX2hpdCA9IGluX2Fy cmF5KCR0aGlzZGF0ZSwgJGhvbGlkYXlzKTsKCQkJCQkJCSRzaG93X2hvbCA9ICgkaG9sX2hp dCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZsYWdzKSApID8gZmFsc2UgOiB0cnVl OwoJCQkJCQkJJHVzZV9wb3N0ZWQgPSBpbl9hcnJheSgnZXh0cmEnLCAkbGlua3Bvc3RlZCk7 CgkJCQkJCQlpZiAoJG9taXRfbWUpIHsKCQkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnb21p dCc7CgkJCQkJCQl9CgkJCQkJCQlpZiAoICghJHNob3dfbWUgfHwgISRzaG93X2hvbCkgJiYg ISRvbWl0X21lICkgewoJCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOwoJCQkJ CQkJfQoJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJG11bHRpZmxhZzsKCQkJCQkJCSRjZmxh Z1tdID0gJGNsc19wZnguJG11bHRpZmxhZzsKCQkJCQkJfQoJCQkJCQlpZiAoISRvbWl0X21l KSB7CgkJCQkJCQlpZiAoICgkc2hvd19tZSAmJiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBl ZCkgewoJCQkJCQkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1h dF93aW4oJyVWJywgJHRtKSwgJHRtKTsKCQkJCQkJCQkkc21kX2RhdGVbJ2l5J10gPSBzdHJm dGltZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJUcnLCAkdG0pLCAkdG0pOwoJCQkJCQkJCSRv cCA9ICgkc3BleCAmJiAkc3BhbmZvcm0pID8gcGFyc2VfZm9ybSgkc3BhbmZvcm0pIDogKCgk dGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkg OiAoKCRzaXplPT0ic21hbGwiKSA/IHNtZF9jYWxfbWluaWxpbmsoJHJvdywgJGlkeCwgJG1v bnRoLCAkeWVhciwgJHVzZV9wb3N0ZWQpIDogaHJlZigoKCRzcGV4ICYmICRqZHg+MSkgPyAn JnJhcnI7JyA6ICRyb3dbJ1RpdGxlJ10pLCBwZXJtbGlua3VybCgkcm93KSwgJyB0aXRsZT0i Jy4kcm93WydUaXRsZSddLiciJykpICkpOwoJCQkJCQkJCSRldmVudHNbJGlkeF1bXSA9IGFy cmF5KCdldicgPT4gJG9wLCAnZmxhZycgPT4gJHNtZF9jYWxfZmxhZywgJ2NsYXNzZXMnID0+ ICgoJGNmbGFnKSA/IGpvaW4oJyAnLGFycmF5X21lcmdlKCRjZmxhZywgJHNtZF9jYWxfdWNs cykpIDogJycpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRkdCk7CgkJCQkJCQkJJHNtZF9j YWxfZmxhZyA9ICRjZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJheSgpOwoJCQkJCQkJCSR1 c2VfcG9zdGVkID0gJyc7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9 Cgl9CglhcnRpY2xlX3BvcCgpOwoKCWlmICgkZGVidWcgPiAxICYmICRldmVudHMpIHsKCQll Y2hvICcrKyBBTEwgRVZFTlRTICsrJzsKCQlkbXAoJGV2ZW50cyk7Cgl9CgoJLy8gR2VuZXJh dGUgdGhlIGNhbGVuZGFyCgkkY2FsZW5kYXIgPSBuZXcgU01EX0NhbGVuZGFyKCRzaXplLCAk eWVhciwgJG1vbnRoLCAkZXZlbnRzLCAkc2VjdGlvbiwgJGNhdGVnb3J5LCAkZGVidWcpOwoJ JGNhbGVuZGFyLT5zZXRXZWVrKCR3ZWVrKTsKCSRjYWxlbmRhci0+c2V0R01UKCRnbXQpOwoJ JGNhbGVuZGFyLT5zZXRMYW5nKCRsYW5nKTsKCSRjYWxlbmRhci0+c2V0Q2xhc3NMZXZlbHMo JGNsZXZzKTsKCSRjYWxlbmRhci0+c2V0Q2xhc3NQcmVmaXgoJGNsc19wZngpOwoJJGNhbGVu ZGFyLT5zZXRFdmVudFdyYXB0YWcoJGV2ZW50d3JhcHRhZyk7CgkkY2FsZW5kYXItPnNldENl bGxGb3JtKCRjZWxsZm9ybSk7CgkkY2FsZW5kYXItPnNldEhkckZvcm0oJGhlYWRlcmZvcm0p OwoJJGNhbGVuZGFyLT5zZXRNWVdyYXB0YWcoJG15d3JhcHRhZyk7CgkkY2FsZW5kYXItPnNl dFN1bW1hcnkoJHN1bW1hcnkpOwoJJGNhbGVuZGFyLT5zZXRDYXB0aW9uKCRjYXB0aW9uKTsK CSRjYWxlbmRhci0+c2V0VGFibGVJRCgkaWQpOwoJJGNhbGVuZGFyLT5zZXRUYWJsZUNsYXNz KCRjbGFzcyk7CgkkY2FsZW5kYXItPnNldFJvd0NsYXNzKCRyb3djbGFzcyk7CgkkY2FsZW5k YXItPnNldENlbGxDbGFzcygkY2VsbGNsYXNzKTsKCSRjYWxlbmRhci0+c2V0RW1wdHlDbGFz cygkZW1wdHljbGFzcyk7CgkkY2FsZW5kYXItPnNldElTT1dlZWtDbGFzcygkaXNvd2Vla2Ns YXNzKTsKCSRjYWxlbmRhci0+c2V0TmF2SW5mbygkbmF2cGNsYXNzLCRuYXZuY2xhc3MsJG5h dnBhcnIsJG5hdm5hcnIsJG5hdmlkKTsKCSRjYWxlbmRhci0+c2V0TmF2S2VlcCgkbWFpbnRh aW4pOwoJJGNhbGVuZGFyLT5zZXRNWUNsYXNzKCRteWNsYXNzKTsKCSRjYWxlbmRhci0+c2V0 TmFtZUZvcm1hdCgkZGF5Zm9ybWF0LCAiZCIpOwoJJGNhbGVuZGFyLT5zZXROYW1lRm9ybWF0 KCRtb250aGZvcm1hdCwgIm0iKTsKCSRjYWxlbmRhci0+c2V0UmVtYXAoJGRtYXApOwoJJGNh bGVuZGFyLT5zZXRTaG93SVNPV2VlaygkaXNvd2Vla3MpOwoJJGNhbGVuZGFyLT5zZXRFWWVh cigkZWFybGllc3QpOwoJJGNhbGVuZGFyLT5zZXRMWWVhcigkbGF0ZXN0KTsKCSRjYWxlbmRh ci0+c2V0RmlsdGVyT3B0cygkZm9wdHMpOwoJJGNhbGVuZGFyLT5zZXRIb2xpZGF5cygkaG9s aWRheXMpOwoJJGNhbGVuZGFyLT5zZXRTZWxlY3RvcnMoZG9fbGlzdCgkc2VsZWN0KSwgJHNl bGVjdGJ0bik7CgkkY2FsZW5kYXItPnNldEZpcnN0RGF5T2ZXZWVrKCRmaXJzdGRheSk7CgoJ cmV0dXJuICRjYWxlbmRhci0+ZGlzcGxheSgkc3RhdGljKTsKfQoKY2xhc3MgU01EX0NhbGVu ZGFyIGV4dGVuZHMgU01EX1Jhd19DYWxlbmRhciB7CgkvLyBPdmVycmlkZSBDb25zdHJ1Y3Rv cgoJLy8gUGVybWl0cyBtdWx0aXBsZSBldmVudHMgdG8gc2hvdyBwZXIgZGF5Cgl2YXIgJHNl Y3Rpb24gPSAnJzsKCXZhciAkY2F0ZWdvcnkgPSAnJzsKCXZhciAkc2l6ZSA9ICcnOwoJdmFy ICRkZWJ1ZyA9IDA7Cgl2YXIgJGV2ZW50cyA9IGFycmF5KCk7CglmdW5jdGlvbiBTTURfQ2Fs ZW5kYXIoJHNpemUsJHllYXIsJG1vbnRoLCRldmVudHMsJHNlY3Rpb24sJGNhdGVnb3J5LCAk ZGVidWc9MCkgewoJCSR0aGlzLT5kZWJ1ZyA9ICRkZWJ1ZzsKCQkkdGhpcy0+c2VjdGlvbiA9 ICRzZWN0aW9uOwoJCSR0aGlzLT5jYXRlZ29yeSA9ICRjYXRlZ29yeTsKCQkkdGhpcy0+ZXZl bnRzID0gJGV2ZW50czsKCQkkdGhpcy0+c2l6ZSA9ICRzaXplOwoJCSR0aGlzLT5zbWRfUmF3 X0NhbGVuZGFyKCR5ZWFyLCRtb250aCwkZGVidWcpOwoJfQoKCS8vIE92ZXJyaWRlIGRzcERh eUNlbGwgdG8gZGlzcGxheSBzdHVmZiByaWdodAoJZnVuY3Rpb24gZHNwRGF5Q2VsbCgkdGhl ZGF5KSB7CgkJZ2xvYmFsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNtZF9jYWxf dWNscywgJHNtZF9kYXRlLCAkcGVybWxpbmtfbW9kZTsKCgkJJHNtZF9jYWxfZmxhZyA9ICRz bWRfY2FsX3VjbHMgPSBhcnJheSgpOwoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2 ZW50c1skdGhlZGF5XSk7CgkJJG5vdyA9IHRpbWUoKSArIHR6X29mZnNldCgpOwoKCQkkdGhl ZGF0ZSA9IG1rdGltZSgwLCAwLCAwLCAkdGhpcy0+bW9udGgsICR0aGVkYXksICR0aGlzLT55 ZWFyKTsKCQkkaG9sX2hpdCA9IGluX2FycmF5KGRhdGUoImQtTS1ZIiwgJHRoZWRhdGUpLCAk dGhpcy0+aG9saWRheXMpOwoJCWlmICgkaGFzYXJ0aWNsZSkgewoJCQkkc21kX2NhbF9mbGFn W10gPSAnZXZlbnQnOwoJCX0KCQlpZiAoJGhvbF9oaXQpIHsKCQkJJHNtZF9jYWxfZmxhZ1td ID0gJ2hvbHMnOwoJCX0KCQkkY2ZsYWcgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRzbWRfY2Fs X2ZsYWcgYXMgJGl0ZW0pIHsKCQkJJGNmbGFnW10gPSAkdGhpcy0+Y2xzX3BmeC4kaXRlbTsK CQl9CgkJJHRkY2xhc3MgPSB0cmltKCR0aGlzLT5jZWxsY2xhc3MgLiAoKCRjZmxhZykgPyAn ICcuam9pbignICcsICRjZmxhZykgOiAnJykpOwoJCSRydW5uaW5nY2xhc3MgPSAoaW5fYXJy YXkoImNlbGwiLCAkdGhpcy0+Y2xzX2xldikgfHwgaW5fYXJyYXkoImNlbGxwbHVzIiwgJHRo aXMtPmNsc19sZXYpKSA/IGV4cGxvZGUoJyAnLCAkdGRjbGFzcykgOiBhcnJheSgpOwoJCWlm KCR0aGlzLT55ZWFyID09IGRhdGUoJ1knLCRub3cpIGFuZCAkdGhpcy0+bW9udGggPT0gZGF0 ZSgnbicsJG5vdykgYW5kICR0aGVkYXkgPT0gZGF0ZSgnaicsJG5vdykgKSB7CgkJCSRzbWRf Y2FsX2ZsYWdbXSA9ICd0b2RheSc7CgkJCSRydW5uaW5nY2xhc3NbXSA9ICR0aGlzLT5jbHNf cGZ4Lid0b2RheSc7CgkJfQoKCQkkb3V0ID0gJGZsYWdzID0gYXJyYXkoKTsKCQkkZm91dCA9 IGFycmF5KCdzdGFuZGFyZCc9PmFycmF5KCksJ3JlY3VyJz0+YXJyYXkoKSwncmVjdXJmaXJz dCc9PmFycmF5KCksJ211bHRpZmlyc3QnPT5hcnJheSgpLCdtdWx0aSc9PmFycmF5KCksJ211 bHRpcHJldic9PmFycmF5KCksJ211bHRpbGFzdCc9PmFycmF5KCksJ2NhbmNlbCc9PmFycmF5 KCksJ2V4dHJhJz0+YXJyYXkoKSk7CgkJaWYgKGVtcHR5KCR0aGlzLT5jZWxsZm9ybSkgJiYg JHRoaXMtPnNpemUgPT0gJ2xhcmdlJykgewoJCQkkb3V0W10gPSBoZWQoJHRoZWRheSw0KTsK CQl9CgkJaWYoIGlzc2V0KCR0aGlzLT5ldmVudHNbJHRoZWRheV0pICkgewoJCQkkZGF5c19l dmVudHMgPSAkdGhpcy0+ZXZlbnRzWyR0aGVkYXldOwoJCQkkZXZjbnQgPSAwOwoJCQlmb3Jl YWNoKCRkYXlzX2V2ZW50cyBhcyAkZXYpIHsKCQkJCSRldmNsYXNzID0gdHJpbSgkZXZbJ2Ns YXNzZXMnXSk7CgkJCQkkZmxhZ3MgPSBhcnJheV9tZXJnZSgkZmxhZ3MsICRldlsnZmxhZydd KTsKCQkJCWlmIChpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xzX2xldikpIHsKCQkJ CQlmb3JlYWNoIChleHBsb2RlKCcgJywgJGV2Y2xhc3MpIGFzICRldmMpIHsKCQkJCQkJJHJ1 bm5pbmdjbGFzc1tdPSAkZXZjOwoJCQkJCX0KCQkJCX0KCQkJCSRjbHMgPSAoJGV2Y2xhc3Mg JiYgaW5fYXJyYXkoImV2ZW50IiwgJHRoaXMtPmNsc19sZXYpKSA/ICcgY2xhc3M9IicudHJp bSgkZXZjbGFzcykuJyInIDogJyc7CgkJCQkkb3AgPSAoJHRoaXMtPmV2d3JhcHRhZykgPyB0 YWcoJGV2WydldiddLCAkdGhpcy0+ZXZ3cmFwdGFnLCAkY2xzKSA6ICRldlsnZXYnXTsKCQkJ CWZvcmVhY2ggKCRldlsnZmxhZyddIGFzICRmbGV2KSB7CgkJCQkJJGZvdXRbJGZsZXZdW10g PSAkb3A7CgkJCQl9CgkJCQkkb3V0W10gPSAkb3A7CgkJCQkkZXZjbnQrKzsKCQkJCWlmICgk dGhpcy0+c2l6ZSA9PSAnc21hbGwnICYmICRldmNudCA9PSAxKSB7CgkJCQkJYnJlYWs7CgkJ CQl9CgkJCX0KCQl9IGVsc2VpZiAoJHRoaXMtPnNpemUgPT0gJ3NtYWxsJykgewoJCQkkb3V0 W10gPSBoZWQoJHRoZWRheSw0KTsKCQl9CgoJCS8vIEFtYWxnYW1hdGUgdGhlIGV2ZW50LWxl dmVsIGNsYXNzZXMgYW5kIGNlbGwtbGV2ZWwgY2xhc3NlcyBpZiByZXF1aXJlZAoJCSRydW5u aW5nY2xhc3MgPSBhcnJheV91bmlxdWUoJHJ1bm5pbmdjbGFzcyk7CgkJaWYgKGluX2FycmF5 KCJjZWxscGx1cyIsICR0aGlzLT5jbHNfbGV2KSkgewoJCQkkc21kX2NhbF9mbGFnID0gYXJy YXlfbWVyZ2UoJHNtZF9jYWxfZmxhZywgJGZsYWdzKTsKCQl9CgoJCWlmICgkdGhpcy0+Y2Vs bGZvcm0pIHsKCQkJJHRoaXN0aW1lID0gbWt0aW1lKDAsIDAsIDAsICR0aGlzLT5tb250aCwg JHRoZWRheSwgJHRoaXMtPnllYXIpOwoJCQkkc21kX2NhbGluZm9bJ2lkJ10gPSAkdGhpcy0+ dGFibGVJRDsKCQkJJHNtZF9kYXRlWyd5J10gPSAkdGhpcy0+eWVhcjsKCQkJJHNtZF9kYXRl WydtJ10gPSAkdGhpcy0+bW9udGg7CgkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRpbWUoc21k X2NhbF9yZWZvcm1hdF93aW4oJyVWJywgJHRoaXN0aW1lKSwgJHRoaXN0aW1lKTsKCQkJJHNt ZF9kYXRlWydpeSddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVHJywgJHRo aXN0aW1lKSwgJHRoaXN0aW1lKTsKCQkJJHNtZF9kYXRlWydkJ10gPSAkdGhlZGF5OwoJCQkk cmVwcyA9IGFycmF5KAoJCQkJJ3tldmlkfScgPT4gJHNtZF9jYWxpbmZvWydldmlkJ10sCgkJ CQkne3N0YW5kYXJkfScgPT4gam9pbignJywkZm91dFsnc3RhbmRhcmQnXSksCgkJCQkne3Jl Y3VyfScgPT4gam9pbignJywkZm91dFsncmVjdXInXSksCgkJCQkne3JlY3VyZmlyc3R9JyA9 PiBqb2luKCcnLCRmb3V0WydyZWN1cmZpcnN0J10pLAoJCQkJJ3thbGxyZWN1cn0nID0+IGpv aW4oJycsYXJyYXlfbWVyZ2UoJGZvdXRbJ3JlY3VyJ10sICRmb3V0WydyZWN1cmZpcnN0J10p KSwKCQkJCSd7bXVsdGlmaXJzdH0nID0+IGpvaW4oJycsJGZvdXRbJ211bHRpZmlyc3QnXSks CgkJCQkne211bHRpcHJldn0nID0+IGpvaW4oJycsJGZvdXRbJ211bHRpcHJldiddKSwKCQkJ CSd7bXVsdGl9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0aWxhc3QnXSksCgkJCQkne211bHRp bGFzdH0nID0+IGpvaW4oJycsJGZvdXRbJ211bHRpbGFzdCddKSwKCQkJCSd7YWxsbXVsdGl9 JyA9PiBqb2luKCcnLGFycmF5X21lcmdlKCRmb3V0WydtdWx0aWZpcnN0J10sJGZvdXRbJ211 bHRpJ10sJGZvdXRbJ211bHRpcHJldiddLCRmb3V0WydtdWx0aWxhc3QnXSkpLAoJCQkJJ3tj YW5jZWx9JyA9PiBqb2luKCcnLCRmb3V0WydjYW5jZWwnXSksCgkJCQkne2V4dHJhfScgPT4g am9pbignJywkZm91dFsnZXh0cmEnXSksCgkJCQkne2V2ZW50c30nID0+IGpvaW4oJycsJG91 dCksCgkJCQkne2RheX0nID0+ICR0aGVkYXksCgkJCQkne2RheXplcm9zfScgPT4gc3RyX3Bh ZCgkdGhlZGF5LCAyLCAnMCcsIFNUUl9QQURfTEVGVCksCgkJCQkne3dlZWtkYXl9JyA9PiAo KGlzX2FycmF5KCR0aGlzLT5kYXlOYW1lRm10KSkgPyAkdGhpcy0+ZGF5TmFtZXNbZGF0ZSgn dycsJHRoaXN0aW1lKV0gOiBzdHJmdGltZSgkdGhpcy0+ZGF5TmFtZUZtdCwgJHRoaXN0aW1l KSksCgkJCQkne3dlZWtkYXlhYmJyfScgPT4gc3RyZnRpbWUoJyVhJywgJHRoaXN0aW1lKSwK CQkJCSd7d2Vla2RheWZ1bGx9JyA9PiBzdHJmdGltZSgnJUEnLCAkdGhpc3RpbWUpLAoJCQkJ J3t3ZWVrfScgPT4gJHNtZF9kYXRlWyd3J10sCgkJCQkne21vbnRofScgPT4gJHRoaXMtPm1v bnRoLAoJCQkJJ3ttb250aHplcm9zfScgPT4gc3RyX3BhZCgkdGhpcy0+bW9udGgsIDIsICcw JywgU1RSX1BBRF9MRUZUKSwKCQkJCSd7bW9udGhuYW1lfScgPT4gKChpc19hcnJheSgkdGhp cy0+bXRoTmFtZUZtdCkpID8gJHRoaXMtPm10aE5hbWVzW2RhdGUoJ24nLCR0aGlzdGltZSld IDogc3RyZnRpbWUoJHRoaXMtPm10aE5hbWVGbXQsICR0aGlzdGltZSkpLAoJCQkJJ3ttb250 aG5hbWVhYmJyfScgPT4gc3RyZnRpbWUoJyViJywgJHRoaXN0aW1lKSwKCQkJCSd7bW9udGhu YW1lZnVsbH0nID0+IHN0cmZ0aW1lKCclQicsICR0aGlzdGltZSksCgkJCQkne3llYXJ9JyA9 PiAkdGhpcy0+eWVhciwKCQkJCSd7c2hvcnR5ZWFyfScgPT4gc3RyZnRpbWUoJyV5JywgJHRo aXN0aW1lKSwKCQkJCSd7aXNveWVhcn0nID0+ICRzbWRfZGF0ZVsnaXknXSwKCQkJCSd7c2hv cnRpc295ZWFyfScgPT4gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVnJywgJHRo aXN0aW1lKSwgJHRoaXN0aW1lKSwKCQkJKTsKCQkJJGNlbGxvdXQgPSBwYXJzZShzdHJ0cigk dGhpcy0+Y2VsbGZvcm0sICRyZXBzKSk7CgkJCQkJCSRjYXJyYXkgPSBhcnJheV9tZXJnZSgk cnVubmluZ2NsYXNzLCAkc21kX2NhbF91Y2xzKTsKCQkJJHNtZF9jYWxfdWNscyA9IGFycmF5 KCk7CgoJCQlyZXR1cm4gZG9UYWcoJGNlbGxvdXQsJ3RkJyxqb2luKCcgJywkY2FycmF5KSk7 CgkJfSBlbHNlIHsKCQkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJG91dCksJ3RkJyxqb2luKCcg JywkcnVubmluZ2NsYXNzKSk7CgkJfQoJfQoKCWZ1bmN0aW9uIGRpc3BsYXkoJHN0YXRpYz1m YWxzZSkgewoJCSRzdW0gPSAoJHRoaXMtPnRibFN1bW1hcnkpID8gJyBzdW1tYXJ5PSInLiR0 aGlzLT50YmxTdW1tYXJ5LiciJyA6ICcnOwoJCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAn IGlkPSInLiR0aGlzLT50YWJsZUlELiciJyA6ICcnOwoJCSRjW10gPSAoJHRoaXMtPnRibENh cHRpb24pID8gJzxjYXB0aW9uPicuJHRoaXMtPnRibENhcHRpb24uJzwvY2FwdGlvbj4nIDog Jyc7CgkJJGNbXSA9ICc8dGhlYWQ+JzsKCQkkY1tdID0gJHRoaXMtPmRzcEhlYWRlcigkc3Rh dGljKTsKCQkkY1tdID0gJHRoaXMtPmRzcERheU5hbWVzKCk7CgkJJGNbXSA9ICc8L3RoZWFk Pic7CgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlDZWxscygpOwoKCQlyZXR1cm4gZG9UYWcoam9p bignJywkYyksJ3RhYmxlJywkdGhpcy0+dGFibGVjbGFzcywkc3VtLiRpZCk7Cgl9CgoJZnVu Y3Rpb24gZHNwSGVhZGVyKCRzdGF0aWMpIHsKCQlnbG9iYWwgJHByZXRleHQsICRzbWRfY2Fs aW5mbywgJHBlcm1saW5rX21vZGU7CgoJCSRjdXJybW8gPSAkdGhpcy0+bW9udGg7CgkJJGN1 cnJ5ciA9ICR0aGlzLT55ZWFyOwoJCSRuYXZwY2xhc3MgPSAkdGhpcy0+Z2V0TmF2SW5mbygi cGMiKTsKCQkkbmF2bmNsYXNzID0gJHRoaXMtPmdldE5hdkluZm8oIm5jIik7CgkJJG5hdnBh cnJvdyA9ICR0aGlzLT5nZXROYXZJbmZvKCJwYSIpOwoJCSRuYXZuYXJyb3cgPSAkdGhpcy0+ Z2V0TmF2SW5mbygibmEiKTsKCQkkbmF2aWQgPSAkdGhpcy0+Z2V0TmF2SW5mbygiaWQiKTsK CQkkbmF2cGNsYXNzID0gKCRuYXZwY2xhc3MpID8gJyBjbGFzcz0iJy4kbmF2cGNsYXNzLici JyA6ICcnOwoJCSRuYXZuY2xhc3MgPSAoJG5hdm5jbGFzcykgPyAnIGNsYXNzPSInLiRuYXZu Y2xhc3MuJyInIDogJyc7CgkJJGZvcHRzID0gJHRoaXMtPmZvcHRzOwoKCQkkc2VjID0gKGlz c2V0KCRzbWRfY2FsaW5mb1sncyddKSAmJiAhZW1wdHkoJHNtZF9jYWxpbmZvWydzJ10pKSA/ ICRzbWRfY2FsaW5mb1sncyddIDogJyc7CgkJZm9yZWFjaCAoJHRoaXMtPm1haW50YWluIGFz ICRjb2wpIHsKCQkJc3dpdGNoICgkY29sKSB7CgkJCQljYXNlICJzZWN0aW9uIjoKCQkJCQlp ZiAoJHByZXRleHRbJ3MnXSAmJiAkcGVybWxpbmtfbW9kZSAhPSAneWVhcl9tb250aF9kYXlf dGl0bGUnKSB7CgkJCQkJCSRmb3B0cyA9IGFycmF5KCdzJyA9PiAkcHJldGV4dFsncyddKSAr ICRmb3B0czsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQljYXNlICJhcnRpY2xlIjoKCQkJCQlp ZiAoJHByZXRleHRbJ2lkJ10pIHsKCQkJCQkJJGZvcHRzID0gYXJyYXkoJ2lkJyA9PiAkcHJl dGV4dFsnaWQnXSkgKyAkZm9wdHM7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiY2F0 ZWdvcnkiOgoJCQkJCWlmICgkcHJldGV4dFsnYyddKSB7CgkJCQkJCSRmb3B0cyA9IGFycmF5 KCdjJyA9PiAkcHJldGV4dFsnYyddKSArICRmb3B0czsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJ CQljYXNlICJhdXRob3IiOgoJCQkJCWlmIChncHMoJ2F1dGhvcicpKSB7CgkJCQkJCSRmb3B0 cyA9IGFycmF5KCdhdXRob3InID0+IGdwcygnYXV0aG9yJykpICsgJGZvcHRzOwoJCQkJCX0K CQkJCQlicmVhazsKCQkJCWNhc2UgImRhdGUiOgoJCQkJCWlmIChncHMoJ2RhdGUnKSkgewoJ CQkJCQkkZm9wdHMgPSBhcnJheSgnZGF0ZScgPT4gZ3BzKCdkYXRlJykpICsgJGZvcHRzOwoJ CQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgInBnIjoKCQkJCQlpZiAoJHByZXRleHRbJ3Bn J10pIHsKCQkJCQkJJGZvcHRzID0gYXJyYXkoJ3BnJyA9PiAkcHJldGV4dFsncGcnXSkgKyAk Zm9wdHM7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiY2FsaWQiOgoJCQkJCWlmICgk dGhpcy0+dGFibGVJRCkgewoJCQkJCQkkZm9wdHMgPSBhcnJheSgnY2FsaWQnID0+ICR0aGlz LT50YWJsZUlEKSArICRmb3B0czsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OgoJ CQkJCWlmIChncHMoJGNvbCkpIHsKCQkJCQkJJGZvcHRzID0gYXJyYXkoJGNvbCA9PiBncHMo JGNvbCkpICsgJGZvcHRzOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJfQoJCX0KCgkJJGZvcHRz ID0gYXJyYXlfdW5pcXVlKCRmb3B0cyk7CgkJJGZpbHRlcnMgPSBhcnJheSgpOwoJCSRmaWx0 ZXJIaWQgPSBhcnJheSgpOwoJCWlmICghJHN0YXRpYykgewoJCQlmb3JlYWNoKCRmb3B0cyBh cyAka2V5ID0+ICR2YWwpIHsKCQkJCSRmaWx0ZXJzW10gPSAka2V5Lic9Jy4kdmFsOwoJCQkJ JGZpbHRlckhpZFtdID0gaElucHV0KCRrZXksICR2YWwpOwoJCQl9CgkJfQoKCQkvLyBXZWVr IHNlbGVjdCBsaXN0CgkJaWYgKCR0aGlzLT51c2VTZWxlY3Rvcignd2VlaycpICYmICEkc3Rh dGljKSB7CgkJCSRjdXJyd2sgPSAoJHRoaXMtPndlZWspID8gJHRoaXMtPndlZWsgOiBkYXRl KCdXJywgc2FmZV9zdHJ0b3RpbWUoJGN1cnJ5ci4iLSIuJGN1cnJtby4iLTEgMTI6MDAiKSk7 CgkJCWZvciAoICRpZHggPSAxOyAkaWR4IDw9IDUzOyAkaWR4KysgKSB7CgkJCQkkdGFnYXR0 cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7CgkJCQlpZiAoICRpZHggPT0gJGN1cnJ3ayApICR0 YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJCQkkb3B0aW9udGFnc1tdID0g ZG9UYWcoJHRoaXMtPnNlbHBmeFsnd2VlayddLnN0cl9wYWQoJGlkeCwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLiR0aGlzLT5zZWxzZnhbJ3dlZWsnXSwgJ29wdGlvbicsICcnLCAkdGFnYXR0 cyk7CgkJCX0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRpb250YWdzKSwg J3NlbGVjdCcsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSwg JyBuYW1lPSInLiR0aGlzLT5yZW1hcFsndyddLiciJy4oKCR0aGlzLT5zZWxidG4pID8gJycg OiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwgJycpCiAgIAkJCQkuICgoJHRoaXMtPnVzZVNl bGVjdG9yKCd5ZWFyJykpID8gJycgOiBoSW5wdXQoJHRoaXMtPnJlbWFwWyd5J10sICRjdXJy eXIpKTsKCQkJJG9wdGlvbnRhZ3MgPSBhcnJheSgpOyAvLyBCbGFuayBvdXQKCQl9CgoJCS8v IE1vbnRoIHNlbGVjdCBsaXN0IC0gbm90ZSBta3RpbWUgaGFzIHRoZSBkYXkgZm9yY2VkIHRv IDEuIElmIG5vdCB5b3UgZ2V0CgkJLy8gYml6YXJyZSByZXBlYXRlZCBtb250aCBuYW1lcyBv biB0aGUgMzFzdCBvZiBzb21lIG1vbnRocyA6LVwKCQlpZiAoISR0aGlzLT51c2VTZWxlY3Rv cignd2VlaycpKSB7CgkJCWlmICgkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykgJiYgISRz dGF0aWMpIHsKCQkJCWZvciAoICRpZHggPSAxOyAkaWR4IDw9IDEyOyAkaWR4KysgKSB7CgkJ CQkJJHRhZ2F0dHMgPSAnIHZhbHVlPSInLiRpZHguJyInOwoJCQkJCWlmICggJGlkeCA9PSAk Y3Vycm1vICkgJHRhZ2F0dHMgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKCQkJCQkkb3B0 aW9udGFnc1tdID0gZG9UYWcoJHRoaXMtPnNlbHBmeFsnbW9udGgnXS4oKGlzX2FycmF5KCR0 aGlzLT5tdGhOYW1lRm10KSkgPyAkdGhpcy0+bXRoTmFtZXNbZGF0ZSgnbicsbWt0aW1lKDEy LDAsMCwkaWR4LDEpKV0gOiBzYWZlX3N0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCBta3Rp bWUoMTIsMCwwLCRpZHgsMSkgKSkuJHRoaXMtPnNlbHNmeFsnbW9udGgnXSwgJ29wdGlvbics ICcnLCAkdGFnYXR0cyk7CgkJCQl9CgkJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwg JG9wdGlvbnRhZ3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRo aXMtPm15Y2xhc3MpLCAnIG5hbWU9IicuJHRoaXMtPnJlbWFwWydtJ10uJyInLigoJHRoaXMt PnNlbGJ0bikgPyAnJyA6ICcgb25jaGFuZ2U9InN1Ym1pdCgpIicpLCAnJykKCSAgIAkJCQku ICgoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykpID8gJycgOiBoSW5wdXQoJHRoaXMtPnJl bWFwWyd5J10sICRjdXJyeXIpKTsKCQkJCSRvcHRpb250YWdzID0gYXJyYXkoKTsgLy8gQmxh bmsgb3V0CgkJCX0gZWxzZSB7CgkJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKCR0aGlzLT5nZXRN b250aE5hbWUoKSwgJ3NwYW4nLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+ bXljbGFzcykpOwoJCQl9CgkJfQoKCQkvLyBZZWFyIHNlbGVjdCBsaXN0CgkJJHkwID0gJHRo aXMtPmV5cjsKCQkkeTEgPSAkdGhpcy0+bHlyOwoJCWlmICgkdGhpcy0+dXNlU2VsZWN0b3Io J3llYXInKSAmJiAoJHkwICE9ICR5MSkgJiYgISRzdGF0aWMpIHsKCQkJZm9yICggJGlkeCA9 ICR5MDsgJGlkeCA8PSAkeTE7ICRpZHgrKyApIHsKCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0i Jy4kaWR4LiciJzsKCQkJCWlmICggJGlkeCA9PSAkY3VycnlyICkgJHRhZ2F0dHMgLj0gJyBz ZWxlY3RlZD0ic2VsZWN0ZWQiJzsKCQkJCSRvcHRpb250YWdzW10gPSBkb1RhZygkdGhpcy0+ c2VscGZ4Wyd5ZWFyJ10uJGlkeC4kdGhpcy0+c2Vsc2Z4Wyd5ZWFyJ10sICdvcHRpb24nLCAn JywgJHRhZ2F0dHMpOwoJCQl9CgkJCSRzZWxlY3RvcltdID0gZG9UYWcoam9pbihuLCAkb3B0 aW9udGFncyksICdzZWxlY3QnLCAoKCR0aGlzLT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+ bXljbGFzcyksICcgbmFtZT0iJy4kdGhpcy0+cmVtYXBbJ3knXS4nIicuKCgkdGhpcy0+c2Vs YnRuKSA/ICcnIDogJyBvbmNoYW5nZT0ic3VibWl0KCkiJyksICcnKQoJCQkJCS4gKCgkdGhp cy0+dXNlU2VsZWN0b3IoJ21vbnRoJykgfHwgJHRoaXMtPnVzZVNlbGVjdG9yKCd3ZWVrJykp ID8gJycgOiBoSW5wdXQoJHRoaXMtPnJlbWFwWydtJ10sICRjdXJybW8pKTsKCQl9IGVsc2Ug ewoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKCRjdXJyeXIsICdzcGFuJywgKCgkdGhpcy0+bXl3 cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpKTsKCQl9CgoJCSRyZXF1ZXN0ID0gc2Vy dmVyU2V0KCdSRVFVRVNUX1VSSScpOwoJCSRyZWRpcmVjdCA9IHNlcnZlclNldCgnUkVESVJF Q1RfVVJMJyk7CgkJaWYgKCFlbXB0eSgkcmVkaXJlY3QpICYmICgkcmVxdWVzdCAhPSAkcmVk aXJlY3QpICYmIGlzX2NhbGxhYmxlKCdfbDEwbl9zZXRfYnJvd3NlX2xhbmd1YWdlJykpIHsK CQkJLy8gTUxQIGluIGRhIGhvdXNlOiB1c2UgdGhlIHJlZGlyZWN0IFVSTCBpbnN0ZWFkCgkJ CSRyZXF1ZXN0ID0gJHJlZGlyZWN0OwoJCX0KCQkkdXJscCA9IHBhcnNlX3VybCgkcmVxdWVz dCk7CgkJJGFjdGlvbiA9ICR1cmxwWydwYXRoJ107CgoJCWlmICgkcGVybWxpbmtfbW9kZSA9 PSAnbWVzc3knKSB7CgkJCSRvdXQgPSBtYWtlT3V0KCdpZCcsJ3MnLCdjJywncScsJ3BnJywn cCcsJ21vbnRoJyk7CgkJCWZvcmVhY2goJG91dCBhcyAka2V5ID0+ICR2YWwpIHsKCQkJCWlm ICgkdmFsKSB7CgkJCQkJJGZpbHRlcnNbXSA9ICRrZXkuJz0nLiR2YWw7CgkJCQkJJGZpbHRl ckhpZFtdID0gaElucHV0KCRrZXksICR2YWwpOwoJCQkJfQoJCQl9CgkJfQoJCSRmaWx0ZXJI aWQgPSBhcnJheV91bmlxdWUoJGZpbHRlckhpZCk7CgkJJGZpbHRlcnMgPSBhcnJheV91bmlx dWUoJGZpbHRlcnMpOwoKCQkkZXh0cmFzID0gJyc7CgkJaWYgKCEkc3RhdGljICYmICggJHRo aXMtPnVzZVNlbGVjdG9yKCdtb250aCcpIHx8ICR0aGlzLT51c2VTZWxlY3RvcigneWVhcicp ICkpIHsKCQkJaWYgKCR0aGlzLT5zZWxidG4pIHsKCQkJCSRleHRyYXMgLj0gZG9UYWcoJycs ICdpbnB1dCcsICdzbWRfY2FsX2lucHV0JywgJyB0eXBlPSJzdWJtaXQiIHZhbHVlPSInLiR0 aGlzLT5zZWxidG4uJyInKTsKCQkJfQoJCQkkZXh0cmFzIC49IGpvaW4obiwgJGZpbHRlckhp ZCk7CgkJfQoKCQkkc2VsZWN0b3IgPSAnPGZvcm0gYWN0aW9uPSInLiRhY3Rpb24uJyIgbWV0 aG9kPSJnZXQiJy4oKCRuYXZpZCkgPyAnIGlkPSInLiRuYXZpZC4nIicgOiAnJykuJz4nLmRv VGFnKGpvaW4oc3AsICRzZWxlY3RvcikuJGV4dHJhcywgJHRoaXMtPm15d3JhcHRhZywgJHRo aXMtPm15Y2xhc3MpLic8L2Zvcm0+JzsKCgkJJG5hdl9iYWNrX2xpbmsgPSAkdGhpcy0+bmF2 aWdhdGlvbigkY3VycnlyLCAkY3Vycm1vLCAnLScsICRmaWx0ZXJzLCAkdXJscFsncGF0aCdd KTsKCQkkbmF2X2Z3ZF9saW5rICA9ICR0aGlzLT5uYXZpZ2F0aW9uKCRjdXJyeXIsICRjdXJy bW8sICcrJywgJGZpbHRlcnMsICR1cmxwWydwYXRoJ10pOwoKCQkkbmF2X2JhY2sgPSAoISRz dGF0aWMgJiYgJG5hdl9iYWNrX2xpbmspID8gJzxhIGhyZWY9IicuJG5hdl9iYWNrX2xpbmsu JyInLiRuYXZwY2xhc3MuJz4nLiRuYXZwYXJyb3cuJzwvYT4nIDogJyZuYnNwOyc7CgkJJG5h dl9md2QgID0gKCEkc3RhdGljICYmICRuYXZfZndkX2xpbmspID8gJzxhIGhyZWY9IicuJG5h dl9md2RfbGluay4nIicuJG5hdm5jbGFzcy4nPicuJG5hdm5hcnJvdy4nPC9hPicgOiAnJm5i c3A7JzsKCgkJJGNbXSA9IGRvVGFnKCRuYXZfYmFjaywndGgnKTsKCQkkY1tdID0gJzx0aCBj b2xzcGFuPSInLigoJHRoaXMtPnNob3dJU09XZWVrKSA/IDYgOiA1KS4nIj4nLiRzZWxlY3Rv ci4nPC90aD4nOwoJCSRjW10gPSBkb1RhZygkbmF2X2Z3ZCwndGgnKTsKCgkJcmV0dXJuIGRv VGFnKGpvaW4oJycsJGMpLCd0cicsICdzbWRfY2FsX25hdnJvdycpOwoJfQoKCWZ1bmN0aW9u IG5hdmlnYXRpb24oJHllYXIsJG1vbnRoLCRkaXJlY3Rpb24sJGZsdCwkdXJsPScnKSB7CgkJ Z2xvYmFsICRwZXJtbGlua19tb2RlOwoKCQlpZigkZGlyZWN0aW9uID09ICctJykgewoJCQlp ZigkbW9udGggLSAxIDwgMSkgewoJCQkJJG1vbnRoID0gMTI7CgkJCQkkeWVhciAtPSAxOwoJ CQl9IGVsc2UgewoJCQkJJG1vbnRoIC09IDE7CgkJCX0KCQl9IGVsc2UgewoJCQlpZigkbW9u dGggKyAxID4gMTIpIHsKCQkJCSRtb250aCA9IDE7CgkJCQkkeWVhciArPSAxOwoJCQl9IGVs c2UgewoJCQkJJG1vbnRoICs9IDE7CgkJCX0KCQl9CgoJCS8vIEFib3J0IGlmIHdlJ3JlIGFi b3V0IHRvIGdvIG91dCBvZiByYW5nZQoJCWlmICgkeWVhciA8ICR0aGlzLT5leXIgfHwgJHll YXIgPiAkdGhpcy0+bHlyKSB7CgkJCXJldHVybiAnJzsKCQl9CgoJCSRmbHRbXSA9ICR0aGlz LT5yZW1hcFsnbSddLiI9JG1vbnRoIjsKCQkkZmx0W10gPSAkdGhpcy0+cmVtYXBbJ3knXS4i PSR5ZWFyIjsKCgkJcmV0dXJuICR1cmwgLiAiPyIgLiBqb2luKGEsICRmbHQpOwoJfQp9Cgov KioKKiBCYXNpYyBDYWxlbmRhciBkYXRhIGFuZCBkaXNwbGF5CiogaHR0cDovL3d3dy5vc2Nh cm0ub3JnL3N0YXRpYy9wZy9jYWxlbmRhckNsYXNzLwoqIEBhdXRob3IgT3NjYXIgTWVyaWRh CiogQGNyZWF0ZWQgSmFuIDE4IDIwMDQKKi8KY2xhc3MgU01EX1Jhd19DYWxlbmRhciB7CnZh ciAkZ210ID0gMSwgJGxhbmcsICRkZWJ1ZyA9IDA7CnZhciAkeWVhciwgJGV5ciwgJGx5ciwg JG1vbnRoLCAkd2VlazsKdmFyICRkYXlOYW1lRm10LCAkbXRoTmFtZUZtdCwgJGRheU5hbWVz LCAkbXRoTmFtZXMsICRzdGFydERheSwgJGVuZERheSwgJGZpcnN0RGF5T2ZXZWVrID0gMCwg JHN0YXJ0T2Zmc2V0ID0gMDsKdmFyICRzZWxlY3RvcnMsICRzZWxidG4sICRzZWxwZngsICRz ZWxzZng7CnZhciAkc2hvd0lTT1dlZWssICRJU09XZWVrSGVhZCwgJElTT1dlZWtDZWxsOwp2 YXIgJGNsc19sZXYsICRjbHNfcGZ4LCAkZm9wdHM7CnZhciAkZXZ3cmFwdGFnLCAkbXl3cmFw dGFnOwp2YXIgJHJvd2NsYXNzLCAkY2VsbGNsYXNzLCAkZW1wdHljbGFzcywgJGlzb2NsYXNz LCAkbXljbGFzcywgJHRhYmxlSUQsICR0YmxTdW1tYXJ5LCAkdGJsQ2FwdGlvbjsKdmFyICRu YXZwY2xhc3MsICRuYXZuY2xhc3MsICRuYXZwYXJyb3csICRuYXZuYXJyb3csICRuYXZpZDsK dmFyICRob2xpZGF5cywgJGNlbGxmb3JtLCAkaGRyZm9ybSwgJG1haW50YWluLCAkcmVtYXA7 Ci8qKgoqIENvbnN0cnVjdG9yCioKKiBAcGFyYW0gaW50ZWdlciwgeWVhcgoqIEBwYXJhbSBp bnRlZ2VyLCBtb250aAoqIEByZXR1cm4gb2JqZWN0CiogQHB1YmxpYwoqLwpmdW5jdGlvbiBT TURfUmF3X0NhbGVuZGFyICgkeXIsICRtbywgJGRlYnVnPTApIHsKCSR0aGlzLT5zZXREZWJ1 ZygkZGVidWcpOwoJJHRoaXMtPnNldFllYXIoJHlyKTsKCSR0aGlzLT5zZXRNb250aCgkbW8p OwoJJHRoaXMtPnNldENsYXNzUHJlZml4KCdzbWRfY2FsXycpOwoKCSR0aGlzLT5zdGFydFRp bWUgPSBzdHJ0b3RpbWUoICIkeXItJG1vLTAxIDAwOjAwIiApOwoJJHRoaXMtPnN0YXJ0RGF5 ID0gZGF0ZSggJ0QnLCAkdGhpcy0+c3RhcnRUaW1lICk7CgkkdGhpcy0+ZW5kRGF5ID0gZGF0 ZSggJ3QnLCAkdGhpcy0+c3RhcnRUaW1lICk7CgkkdGhpcy0+ZW5kVGltZSA9IHN0cnRvdGlt ZSggIiR5ci0kbW8tIi4kdGhpcy0+ZW5kRGF5LiIgMjM6NTk6NTkiICk7CglpZiAoJHRoaXMt PmRlYnVnKSB7CgkJZWNobyAiKysgVEhJUyBNT05USCdTIFJFTkRFUkVEIENBTEVOREFSIFsg c3RhcnQgc3RhbXAgLy8gZW5kIGRhdGUgLy8gc3RhcnQgZGF5IC8vIGVuZCBzdGFtcCAvLyBl bmQgZGF0ZSAvLyBlbmQgZGF5IG51bWJlciBdICsrIjsKCQlkbXAoJHRoaXMtPnN0YXJ0VGlt ZSwgZGF0ZSgnWS1tLWQgSDppOnMnLCAkdGhpcy0+c3RhcnRUaW1lKSwgJHRoaXMtPnN0YXJ0 RGF5LCAkdGhpcy0+ZW5kVGltZSwgZGF0ZSgnWS1tLWQgSDppOnMnLCAkdGhpcy0+ZW5kVGlt ZSksICR0aGlzLT5lbmREYXkpOwoJfQoJJHRoaXMtPnNldE5hbWVGb3JtYXQoJyVhJywgJ2Qn KTsKCSR0aGlzLT5zZXROYW1lRm9ybWF0KCclQicsICdtJyk7CgkkdGhpcy0+c2V0Rmlyc3RE YXlPZldlZWsoMCk7CgkkdGhpcy0+c2V0U2hvd0lTT1dlZWsoJycpOwoJJHRoaXMtPnNldFRh YmxlSUQoJycpOwoJJHRoaXMtPnNldFRhYmxlQ2xhc3MoJycpOwp9Ci8vID09PSBlbmQgQ2Fs ZW5kYXIgPT09Ci8vIEdldHRlcnMKZnVuY3Rpb24gdXNlU2VsZWN0b3IoJHZhbCkgeyByZXR1 cm4gaW5fYXJyYXkoJHZhbCwgJHRoaXMtPnNlbGVjdG9ycyk7IH0KZnVuY3Rpb24gZ2V0RGF5 TmFtZSgkZGF5KSB7IHJldHVybiAoJHRoaXMtPmRheU5hbWVzWyRkYXklN10pOyB9CmZ1bmN0 aW9uIGdldE1vbnRoTmFtZSgpIHsKCWlmIChpc19hcnJheSgkdGhpcy0+bXRoTmFtZUZtdCkp IHsKCQlyZXR1cm4gJHRoaXMtPm10aE5hbWVzW2RhdGUoJ24nLCR0aGlzLT5zdGFydFRpbWUp XTsKCX0gZWxzZSB7CgkJcmV0dXJuIHN0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10LCAkdGhp cy0+c3RhcnRUaW1lKTsKCX0KfQpmdW5jdGlvbiBnZXROYXZJbmZvKCR0eXBlKSB7CgkkciA9 ICcnOwoJc3dpdGNoICgkdHlwZSkgewoJCWNhc2UgImlkIjogJHIgPSAkdGhpcy0+bmF2aWQ7 IGJyZWFrOwoJCWNhc2UgInBjIjogJHIgPSAkdGhpcy0+bmF2cGNsYXNzOyBicmVhazsKCQlj YXNlICJuYyI6ICRyID0gJHRoaXMtPm5hdm5jbGFzczsgYnJlYWs7CgkJY2FzZSAicGEiOiAk ciA9ICR0aGlzLT5uYXZwYXJyb3c7IGJyZWFrOwoJCWNhc2UgIm5hIjogJHIgPSAkdGhpcy0+ bmF2bmFycm93OyBicmVhazsKCX0KCXJldHVybiAkcjsKfQovLyBTZXR0ZXJzCmZ1bmN0aW9u IHNldERlYnVnKCRkKXsgJHRoaXMtPmRlYnVnID0gJGQ7IH0KZnVuY3Rpb24gc2V0R01UKCRi KXsgJHRoaXMtPmdtdCA9ICRiOyB9CmZ1bmN0aW9uIHNldExhbmcoJGNvZGUpeyAkdGhpcy0+ bGFuZyA9ICRjb2RlOyB9CmZ1bmN0aW9uIHNldFN1bW1hcnkoJHR4dCl7ICR0aGlzLT50YmxT dW1tYXJ5ID0gJHR4dDsgfQpmdW5jdGlvbiBzZXRDYXB0aW9uKCR0eHQpeyAkdGhpcy0+dGJs Q2FwdGlvbiA9ICR0eHQ7IH0KZnVuY3Rpb24gc2V0Q2VsbEZvcm0oJGZybSl7ICR0aGlzLT5j ZWxsZm9ybSA9ICRmcm07IH0KZnVuY3Rpb24gc2V0SGRyRm9ybSgkZnJtKXsgJHRoaXMtPmhk cmZvcm0gPSAkZnJtOyB9CmZ1bmN0aW9uIHNldFRhYmxlSUQoJGlkKXsgJHRoaXMtPnRhYmxl SUQgPSAkaWQ7IH0KZnVuY3Rpb24gc2V0WWVhcigkeXIpeyAkdGhpcy0+eWVhciA9ICR5cjsg fQpmdW5jdGlvbiBzZXRFWWVhcigkeXIpeyAkdGhpcy0+ZXlyID0gJHlyOyB9CmZ1bmN0aW9u IHNldExZZWFyKCR5cil7ICR0aGlzLT5seXIgPSAkeXI7IH0KZnVuY3Rpb24gc2V0TW9udGgo JG10aCl7ICR0aGlzLT5tb250aCA9IChpbnQpJG10aDsgfQpmdW5jdGlvbiBzZXRXZWVrKCR3 ayl7CglpZiAoJHdrKSB7CgkJJHdrID0gc3RyX3BhZCgkd2ssIDIsICcwJywgU1RSX1BBRF9M RUZUKTsKCQkkdGhpcy0+d2VlayA9ICR3azsKCQkkdGhpcy0+bW9udGggPSBzYWZlX3N0cmZ0 aW1lKCIlbSIsIHN0cnRvdGltZSgkdGhpcy0+eWVhci4iVyIuJHdrKSk7Cgl9Cn0KZnVuY3Rp b24gc2V0TmF2S2VlcCgkYXIpeyAkdGhpcy0+bWFpbnRhaW4gPSAkYXI7IH0KZnVuY3Rpb24g c2V0U2hvd0lTT1dlZWsoJHZhbCkgewoJJHRoaXMtPnNob3dJU09XZWVrID0gKCR2YWwpID8g dHJ1ZSA6IGZhbHNlOwoJaWYgKCR2YWwpIHsKCQkkdmFsID0gZG9fbGlzdCgkdmFsKTsKCQkk dGhpcy0+SVNPV2Vla0hlYWQgPSAkdmFsWzBdOwoJCSR0aGlzLT5JU09XZWVrQ2VsbCA9IChp c3NldCgkdmFsWzFdKSkgPyAkdmFsWzFdIDogJ3t3ZWVrfSc7Cgl9Cn0KZnVuY3Rpb24gc2V0 UmVtYXAoJG1hcCl7ICR0aGlzLT5yZW1hcCA9ICRtYXA7IH0KZnVuY3Rpb24gc2V0Q2xhc3NM ZXZlbHMoJGNscyl7ICR0aGlzLT5jbHNfbGV2ID0gJGNsczsgfQpmdW5jdGlvbiBzZXRDbGFz c1ByZWZpeCgkY2xzKXsgJHRoaXMtPmNsc19wZnggPSAkY2xzOyB9CmZ1bmN0aW9uIHNldEV2 ZW50V3JhcHRhZygkd3JhcCl7ICR0aGlzLT5ldndyYXB0YWcgPSAkd3JhcDsgfQpmdW5jdGlv biBzZXRNWVdyYXB0YWcoJHdyYXApeyAkdGhpcy0+bXl3cmFwdGFnID0gJHdyYXA7IH0KZnVu Y3Rpb24gc2V0VGFibGVDbGFzcygkY2xzKSB7ICR0aGlzLT50YWJsZWNsYXNzID0gKCRjbHMp ID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcnOyB9CmZ1bmN0aW9uIHNldFJvd0NsYXNzKCRj bHMpeyAkdGhpcy0+cm93Y2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzIDog Jyc7IH0KZnVuY3Rpb24gc2V0Q2VsbENsYXNzKCRjbHMpeyAkdGhpcy0+Y2VsbGNsYXNzID0g KCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcnOyB9CmZ1bmN0aW9uIHNldEVtcHR5 Q2xhc3MoJGNscyl7ICR0aGlzLT5lbXB0eWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19w ZnguJGNscyA6ICcnOyB9CmZ1bmN0aW9uIHNldElTT1dlZWtDbGFzcygkY2xzKXsgJHRoaXMt Pmlzb2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcnOyB9CmZ1bmN0 aW9uIHNldE5hdkluZm8oJGNsc3AsICRjbHNuLCAkYXJycCwgJGFycm4sICRuaWQpewoJJHRo aXMtPm5hdnBjbGFzcyA9ICgkY2xzcCkgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzcCA6ICcnOwoJ JHRoaXMtPm5hdm5jbGFzcyA9ICgkY2xzbikgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzbiA6ICcn OwoJJHRoaXMtPm5hdnBhcnJvdyA9ICgkYXJycCkgPyAkYXJycCA6ICcnOwoJJHRoaXMtPm5h dm5hcnJvdyA9ICgkYXJybikgPyAkYXJybiA6ICcnOwoJJHRoaXMtPm5hdmlkID0gKCRuaWQp ID8gJHRoaXMtPmNsc19wZnguJG5pZCA6ICcnOwp9CmZ1bmN0aW9uIHNldE1ZQ2xhc3MoJGNs cyl7ICR0aGlzLT5teWNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcn OyB9CmZ1bmN0aW9uIHNldEZpbHRlck9wdHMoJGYpIHsgJHRoaXMtPmZvcHRzID0gJGY7IH0K ZnVuY3Rpb24gc2V0SG9saWRheXMoJGhvbHMpIHsgJHRoaXMtPmhvbGlkYXlzID0gJGhvbHM7 IH0KZnVuY3Rpb24gc2V0U2VsZWN0b3JzKCRzZWwsICRidG4pIHsKCWZvcmVhY2ggKCRzZWwg YXMgJGlkeCA9PiAkaXRlbSkgewoJCSRzZWxwYXJ0cyA9IGV4cGxvZGUoIjoiLCAkaXRlbSk7 CgkJJHNlbFskaWR4XSA9ICRzZWxwYXJ0c1swXTsKCQkkdGhpcy0+c2VscGZ4WyRzZWxwYXJ0 c1swXV0gPSAoaXNzZXQoJHNlbHBhcnRzWzFdKSkgPyAkc2VscGFydHNbMV0gOiAnJzsKCQkk dGhpcy0+c2Vsc2Z4WyRzZWxwYXJ0c1swXV0gPSAoaXNzZXQoJHNlbHBhcnRzWzJdKSkgPyAk c2VscGFydHNbMl0gOiAnJzsKCX0KCSR0aGlzLT5zZWxlY3RvcnMgPSAkc2VsOwoJJHRoaXMt PnNlbGJ0biA9ICRidG47Cn0KZnVuY3Rpb24gc2V0Rmlyc3REYXlPZldlZWsoJGQpIHsKCSR0 aGlzLT5maXJzdERheU9mV2VlayA9ICgoaW50KSRkIDw9IDYgYW5kIChpbnQpJGQgPj0gMCkg PyAoaW50KSRkIDogMDsKCSR0aGlzLT5zdGFydE9mZnNldCA9IGRhdGUoJ3cnLCAkdGhpcy0+ c3RhcnRUaW1lKSAtICR0aGlzLT5maXJzdERheU9mV2VlazsKCWlmICggJHRoaXMtPnN0YXJ0 T2Zmc2V0IDwgMCApIHsKCQkkdGhpcy0+c3RhcnRPZmZzZXQgPSA3IC0gYWJzKCR0aGlzLT5z dGFydE9mZnNldCk7Cgl9Cn0KLyoqCiogZnJtOiBhbnkgdmFsaWQgUEhQIHN0cmZ0aW1lKCkg c3RyaW5nIG9yIEFCQlIvRlVMTAoqIHR5cDogZCB0byBzZXQgZGF5LCBtIHRvIHNldCBtb250 aCBmb3JtYXQKKi8KZnVuY3Rpb24gc2V0TmFtZUZvcm1hdCgkZnJtLCAkdHlwPSJkIikgewoJ c3dpdGNoICgkZnJtKSB7CgkJY2FzZSAiZnVsbCI6CgkJY2FzZSAiRlVMTCI6CgkJCSRmbXQg PSAoJHR5cCA9PSAnZCcpID8gIiVBIiA6ICIlQiI7CgkJCWJyZWFrOwoJCWNhc2UgImFiYnIi OgoJCWNhc2UgIkFCQlIiOgoJCQkkZm10ID0gKCR0eXAgPT0gJ2QnKSA/ICIlYSIgOiAiJWIi OwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQlpZiAoc3RycG9zKCRmcm0sICclJykgPT09IDAp IHsKCQkJCSRmbXQgPSAkZnJtOwoJCQl9IGVsc2UgewoJCQkJJGZybSA9IHRyaW0oJGZybSwg J3t9Jyk7CgkJCQkkZnJtID0gZG9fbGlzdCgkZnJtKTsKCQkJCSRmbXQgPSAkZnJtOwoJCQl9 CgkJCWJyZWFrOwoJfQoKCWlmICgkdHlwID09ICJkIikgewoJCSR0aGlzLT5kYXlOYW1lRm10 ID0gJGZtdDsKCQkkdGhpcy0+ZGF5TmFtZXMgPSBhcnJheSgpOwoKCQkvLyBUaGlzIGlzIGRv bmUgdG8gbWFrZSBzdXJlIFN1bmRheSBpcyBhbHdheXMgdGhlIGZpcnN0IGRheSBvZiBvdXIg YXJyYXkKCQkvLyBVbml4IHRpbWUgZ2V0cyBhIGxpdHRsZSBmdW5reSBhdCB0aGUgYmVnaW5u aW5nIGRlcGVuZGluZyB1cG9uIHRoZSB0aW1lem9uZS4KCQkkc2VydmVyb2Zmc2V0ID0gZ21t a3RpbWUoMCwwLDApIC0gbWt0aW1lKDAsMCwwKTsKCQkkc3RhcnQgPSAoJHNlcnZlcm9mZnNl dCA8IDApID8gNCA6IDM7CgkJJGVuZCA9ICRzdGFydCArIDc7CgkJZm9yKCRpPSRzdGFydDsg JGk8JGVuZDsgJGkrKykgewoJCQlpZiAoaXNfYXJyYXkoJGZtdCkpIHsKCQkJCSR0aGlzLT5k YXlOYW1lc1tdID0gJGZtdFskaS0kc3RhcnRdOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPmRh eU5hbWVzW10gPSB1Y2ZpcnN0KHN0cmZ0aW1lKCRmbXQsIDg2NDAwKiRpKSk7CgkJCX0KCQl9 Cgl9IGVsc2UgewoJCSR0aGlzLT5tdGhOYW1lRm10ID0gJGZtdDsKCQkkdGhpcy0+bXRoTmFt ZXMgPSBhcnJheSgpOwoJCWZvciAoJGk9MDsgJGk8MTI7ICRpKyspIHsKCQkJaWYgKGlzX2Fy cmF5KCRmbXQpKSB7CgkJCQkkdGhpcy0+bXRoTmFtZXNbJGkrMV0gPSAkZm10WyRpXTsKCQkJ fSBlbHNlIHsKCQkJCSR0aGlzLT5tdGhOYW1lc1skaSsxXSA9IHVjZmlyc3Qoc3RyZnRpbWUo JGZtdCwgODY0MDAqJGkpKTsKCQkJfQoJCX0KCX0KfQovKioKKiBSZXR1cm4gbWFya3VwIGZv ciBkaXNwbGF5aW5nIHRoZSBjYWxlbmRhci4KKiBAcmV0dXJuCiogQHB1YmxpYwoqLwpmdW5j dGlvbiBkaXNwbGF5ICggKSB7CgkkaWQgPSAoJHRoaXMtPnRhYmxlSUQpID8gJyBpZD0iJy4k dGhpcy0+dGFibGVJRC4nIicgOiAnJzsKCSRjW10gPSAnPHRhYmxlJy4kaWQuJz4nOwoJJGNb XSA9ICc8dGhlYWQ+JyAuICR0aGlzLT5kc3BEYXlOYW1lcygpIC4gJzwvdGhlYWQ+JzsKCSRj W10gPSAkdGhpcy0+ZHNwRGF5Q2VsbHMoKTsKCSRjW10gPSAnPC90YWJsZT4nOwoKCXJldHVy biBqb2luKCcnLCRjKTsKfQovLyA9PT0gZW5kIGRpc3BsYXkgPT09Ci8qKgoqIERpc3BsYXlz IHRoZSByb3cgb2YgZGF5IG5hbWVzLgoqIEByZXR1cm4gc3RyaW5nCiogQHByaXZhdGUKKi8K ZnVuY3Rpb24gZHNwRGF5TmFtZXMgKCApIHsKCWlmICgkdGhpcy0+aGRyZm9ybSkgewoJCSRy ZXBzID0gYXJyYXkoCgkJCSd7Zmlyc3RkYXl9JyA9PiAkdGhpcy0+Zmlyc3REYXlPZldlZWss CgkJCSd7ZGF5bmFtZXN9JyA9PiBqb2luKCcsJywgJHRoaXMtPmRheU5hbWVzKSwKCQkJJ3tp c293ZWVraGVhZH0nID0+ICR0aGlzLT5JU09XZWVrSGVhZCwKCQkJJ3t3ZWVrfScgPT4gZGF0 ZSgnVycsICR0aGlzLT5zdGFydFRpbWUpLAoJCQkne21vbnRofScgPT4gZGF0ZSgnbicsICR0 aGlzLT5zdGFydFRpbWUpLAoJCQkne3llYXJ9JyA9PiBkYXRlKCdZJywgJHRoaXMtPnN0YXJ0 VGltZSksCgkJCSd7aXNveWVhcn0nID0+IGRhdGUoJ28nLCAkdGhpcy0+c3RhcnRUaW1lKSwK CQkpOwoKCQlyZXR1cm4gcGFyc2Uoc3RydHIoJHRoaXMtPmhkcmZvcm0sICRyZXBzKSk7Cgl9 IGVsc2UgewoJCSRjW10gPSAnPHRyIGNsYXNzPSJzbWRfY2FsX2RheW5hbWVzIj4nOwoKCQkk aSA9ICR0aGlzLT5maXJzdERheU9mV2VlazsKCQkkaiA9IDA7IC8vIGNvdW50IG51bWJlciBv ZiBkYXlzIGRpc3BsYXllZAoJCSRlbmQgPSBmYWxzZTsKCgkJaWYgKCR0aGlzLT5zaG93SVNP V2VlaykgewoJCQkkY1tdID0gIjx0aD4iLiR0aGlzLT5JU09XZWVrSGVhZC4iPC90aD4iOwoJ CX0KCQlmb3IoJGogPSAwOyAkajw9NjsgJGorKywgJGkrKykgewoJCQlpZigkaSA9PSA3KSB7 ICRpID0gMDsgfQoJCQkkY1tdID0gJzx0aD4nLiR0aGlzLT5nZXREYXlOYW1lKCRpKS4iPC90 aD4iOwoJCX0KCgkJJGNbXSA9ICc8L3RyPic7CgkJcmV0dXJuIGpvaW4oJycsJGMpOwoJfQp9 Ci8vID09PSBlbmQgZHNwRGF5TmFtZXMgPT09Ci8qKgoqIERpc3BsYXlzIGFsbCBkYXkgY2Vs bHMgZm9yIHRoZSBtb250aAoqCiogQHJldHVybiBzdHJpbmcKKiBAcHJpdmF0ZQoqLwpmdW5j dGlvbiBkc3BEYXlDZWxscyAoICkgewoJJGkgPSAwOyAvLyBjZWxsIGNvdW50ZXIKCSRlbXB0 eUNsYXNzID0gJHRoaXMtPmVtcHR5Y2xhc3M7CgkkaXNvQ2xhc3MgPSAkdGhpcy0+aXNvY2xh c3M7Cgkkcm93Q2xhc3MgPSAkdGhpcy0+cm93Y2xhc3M7Cgkkcm93Q2xhc3MgPSAoJHJvd0Ns YXNzKSA/ICcgY2xhc3M9IicuJHJvd0NsYXNzLiciJyA6ICcnOwoKCSRjW10gPSAnPHRyJy4k cm93Q2xhc3MuJz4nOwoKCWlmICgkdGhpcy0+c2hvd0lTT1dlZWspIHsKCQkkcmVwcyA9IGFy cmF5KAoJCQkne3dlZWt9JyA9PiBkYXRlKCdXJywgJHRoaXMtPnN0YXJ0VGltZSksCgkJCSd7 bW9udGh9JyA9PiBkYXRlKCduJywgJHRoaXMtPnN0YXJ0VGltZSksCgkJCSd7eWVhcn0nID0+ IGRhdGUoJ1knLCAkdGhpcy0+c3RhcnRUaW1lKSwKCQkJJ3tpc295ZWFyfScgPT4gZGF0ZSgn bycsICR0aGlzLT5zdGFydFRpbWUpLAoJCSk7CgkJJHdrY2VsbCA9IHN0cnRyKCR0aGlzLT5J U09XZWVrQ2VsbCwgJHJlcHMpOwoJCSRjW10gPSAnPHRkIGNsYXNzPSInLiRpc29DbGFzcy4n Ij4nLiR3a2NlbGwuJzwvdGQ+JzsKCX0KCS8vIGZpcnN0IGRpc3BsYXkgZW1wdHkgY2VsbHMg YmFzZWQgb24gd2hhdCB3ZWVrZGF5IHRoZSBtb250aCBzdGFydHMgaW4KCWZvciggJGo9MDsg JGo8JHRoaXMtPnN0YXJ0T2Zmc2V0OyAkaisrICkJewoJCSRpKys7CgkJJGNbXSA9ICc8dGQg Y2xhc3M9IicuJGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOwoJfSAvLyBlbmQgb2Zmc2V0 IGNlbGxzCgoJLy8gd3JpdGUgb3V0IHRoZSByZXN0IG9mIHRoZSBkYXlzLCBhdCBlYWNoIHN1 bmRheSwgc3RhcnQgYSBuZXcgcm93LgoJZm9yKCAkZD0xOyAkZDw9JHRoaXMtPmVuZERheTsg JGQrKyApIHsKCQkkaSsrOwoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5Q2VsbCggJGQgKTsKCQlp ZiAoICRpJTcgPT0gMCApIHsgJGNbXSA9ICc8L3RyPic7IH0KCQlpZiAoICRkPCR0aGlzLT5l bmREYXkgJiYgJGklNyA9PSAwICkgewoJCQkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+JzsK CQkJaWYgKCR0aGlzLT5zaG93SVNPV2VlaykgewoJCQkJJHRoZVRpbWUgPSBzYWZlX3N0cnRv dGltZSgkdGhpcy0+eWVhci4iLSIuJHRoaXMtPm1vbnRoLiItIi4oaW50KSgkZCArIDEpIC4i IDAwOjAwIik7CgkJCQkkcmVwcyA9IGFycmF5KAoJCQkJCSd7d2Vla30nID0+IGRhdGUoJ1cn LCAkdGhlVGltZSksCgkJCQkJJ3ttb250aH0nID0+IGRhdGUoJ24nLCAkdGhlVGltZSksCgkJ CQkJJ3t5ZWFyfScgPT4gZGF0ZSgnWScsICR0aGVUaW1lKSwKCQkJCQkne2lzb3llYXJ9JyA9 PiBkYXRlKCdvJywgJHRoZVRpbWUpLAoJCQkJKTsKCQkJCSR3a2NlbGwgPSBzdHJ0cigkdGhp cy0+SVNPV2Vla0NlbGwsICRyZXBzKTsKCQkJCSRjW10gPSAnPHRkIGNsYXNzPSInLiRpc29D bGFzcy4nIj4nLiR3a2NlbGwuJzwvdGQ+JzsKCQkJfQoJCX0KCX0KCS8vIGZpbGwgaW4gdGhl IGZpbmFsIHJvdwoJJGxlZnQgPSA3IC0gKCAkaSU3ICk7CglpZiAoICRsZWZ0IDwgNykJewoJ CWZvciAoICRqPTA7ICRqPCRsZWZ0OyAkaisrICkJewoJCSAgJGNbXSA9ICc8dGQgY2xhc3M9 IicuJGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOwoJCX0KCQkkY1tdID0gIlxuXHQ8L3Ry PiI7Cgl9CglyZXR1cm4gJzx0Ym9keT4nIC4gam9pbignJywkYykgLiAnPC90Ym9keT4nOwp9 Ci8vID09PSBlbmQgZHNwRGF5Q2VsbHMgPT09Ci8qKgoqIG91dHB1dHMgdGhlIGNvbnRlbnRz IGZvciBhIGdpdmVuIGRheQoqCiogQHBhcmFtIGludGVnZXIsIGRheQoqIEBhYnN0cmFjdAoq LwpmdW5jdGlvbiBkc3BEYXlDZWxsICggJGRheSApIHsKCXJldHVybiAnPHRkPicuJGRheS4n PC90ZD4nOwp9Ci8vID09PSBlbmQgZGF5Q2VsbCA9PT0KfSAvLyBlbmQgY2xhc3MKCmZ1bmN0 aW9uIHNtZF9jYWxfbWluaWxpbmsoJHJvdywgJGRheSwgJG1vbnRoLCAkeWVhciwgJHVzZV9w b3N0ZWQ9ZmFsc2UpIHsKCWdsb2JhbCAkcGVybWxpbmtfbW9kZTsKCgkkbGFuZyA9ICcnOwoJ JHJlcXVlc3QgPSBzZXJ2ZXJTZXQoJ1JFUVVFU1RfVVJJJyk7CgkkcmVkaXJlY3QgPSBzZXJ2 ZXJTZXQoJ1JFRElSRUNUX1VSTCcpOwoJaWYgKCFlbXB0eSgkcmVkaXJlY3QpICYmICgkcmVx dWVzdCAhPSAkcmVkaXJlY3QpICYmIGlzX2NhbGxhYmxlKCdfbDEwbl9zZXRfYnJvd3NlX2xh bmd1YWdlJykpIHsKCQkvLyBNTFAgaW4gZGEgaG91c2Ugc28gZXh0cmFjdCB0aGUgbGFuZ3Vh Z2UgY3VycmVudGx5IGluIHVzZSAtLSBpcyB0aGVyZSBhbiBNTFAtbmF0aXZlIG1ldGhvZCBm b3IgdGhpcz8KCQkkcmVxcGFydHMgPSBleHBsb2RlKCcvJywgJHJlcXVlc3QpOwoJCSRyZWRw YXJ0cyA9IGV4cGxvZGUoJy8nLCAkcmVkaXJlY3QpOwoJCSRsYW5nID0gam9pbignJywgYXJy YXlfZGlmZigkcmVkcGFydHMsICRyZXFwYXJ0cykpIC4gJy8nOwoJfQoKCWlmKCAkcGVybWxp bmtfbW9kZSA9PSAneWVhcl9tb250aF9kYXlfdGl0bGUnICkgewoJCSRsaW5rZGF0ZSA9ICgk dXNlX3Bvc3RlZCkgPyBkYXRlKCdZL20vZCcsICRyb3dbJ3VQb3N0ZWQnXSkgOiAkeWVhci4n Lycuc3RyX3BhZCgkbW9udGgsMiwiMCIsU1RSX1BBRF9MRUZUKS4nLycuc3RyX3BhZCgkZGF5 LDIsIjAiLFNUUl9QQURfTEVGVCk7CgkJJGhyZWYgPSAnIGhyZWY9IicuaHUuJGxhbmcuJGxp bmtkYXRlLiciJzsKCX0gZWxzZSB7CgkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/IGRh dGUoJ1ktbS1kJywgJHJvd1sndVBvc3RlZCddKSA6ICR5ZWFyLictJy5zdHJfcGFkKCRtb250 aCwyLCIwIixTVFJfUEFEX0xFRlQpLictJy5zdHJfcGFkKCRkYXksMiwiMCIsU1RSX1BBRF9M RUZUKTsKCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4kbGFuZy4nP2RhdGU9Jy4kbGlua2RhdGU7 CgkJaWYoJHJvd1snU2VjdGlvbiddKSB7ICRocmVmID0gJGhyZWYuYS4ncz0nLiRyb3dbJ1Nl Y3Rpb24nXTsgfQovLwkJaWYoJGNhdGVnb3J5KSB7ICRocmVmID0gJGhyZWYuYS4nYz0nLiRj YXRlZ29yeTsgfQoJCSRocmVmIC49ICciJzsKCX0KCglyZXR1cm4gdGFnKCRkYXksICdhJywg JGhyZWYpOwp9CgovLyBQZXJmb3JtIG9uZSBvZiB0d28gdHlwZXMgb2YgdGVzdDogYSBmbGFn LWJhc2VkIHRlc3QsIG9yIGFuIGluZm8tYmFzZWQgdGVzdApmdW5jdGlvbiBzbWRfaWZfY2Fs KCRhdHRzLCAkdGhpbmcpIHsKCWdsb2JhbCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbGluZm8s ICRzbWRfZGF0ZTsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdmbGFnJyAgICA9PiAnJywK CQknY2FsaWQnICAgPT4gJycsCgkJJ2lzb3llYXInID0+ICcnLAoJCSd5ZWFyJyAgICA9PiAn JywKCQknbW9udGgnICAgPT4gJycsCgkJJ3dlZWsnICAgID0+ICcnLAoJCSdkYXknICAgICA9 PiAnJywKCQknbG9naWMnICAgPT4gJ29yJywKCQknZGVidWcnICAgPT4gJzAnLAoJKSwgJGF0 dHMpKTsKCgkkZmxhZyA9IGRvX2xpc3QoJGZsYWcpOwoJJGN0ciA9ICRudW0gPSAwOwoKCWlm ICgkZGVidWcpIHsKCQlkbXAoJGF0dHMpOwoJfQoKCWlmICgkZmxhZyAmJiAkZmxhZ1swXSAh PSAnJykgewoJCSRudW0gKz0gY291bnQoJGZsYWcpOwoJCWZvcmVhY2ggKCRmbGFnIGFzICR3 aGF0bm90KSB7CgkJCWlmIChlbXB0eSgkd2hhdG5vdCkpIGNvbnRpbnVlOwoJCQkkY3RyICs9 IChpbl9hcnJheSgkd2hhdG5vdCwgJHNtZF9jYWxfZmxhZykgfHwgKCR3aGF0bm90ID09ICdT TURfQU5ZJyAmJiAhZW1wdHkoJHNtZF9jYWxfZmxhZykpKSA/IDEgOiAwOwoJCX0KCX0KCWlm ICgkY2FsaWQpIHsKCQkkbnVtKys7CgkJJGN0ciArPSAoJHNtZF9jYWxpbmZvWydpZCddID09 PSAkY2FsaWQpID8gMSA6IDA7Cgl9Cglmb3JlYWNoIChhcnJheSgiaXkiID0+ICJpc295ZWFy IiwgInkiID0+ICJ5ZWFyIiwgIm0iID0+ICJtb250aCIsICJ3IiA9PiAid2VlayIsICJkIiA9 PiAiZGF5IikgYXMgJGlkeCA9PiAkdGVzdCkgewoJCSR0ZXN0ZXIgPSAkJHRlc3Q7CgkJJGNv bXBhcmUgPSAkc21kX2RhdGVbJGlkeF07CgoJCWlmICgkdGVzdGVyKSB7CgkJCSRudW0rKzsK CQkJcHJlZ19tYXRjaCgnLyhbIT08Pl0rKT8oW1xkXSspLycsICR0ZXN0ZXIsICRtYXRjaGVz KTsKCQkJaWYgKCRkZWJ1ZykgewoJCQkJZG1wKCJURVNUIElGOiAiLiAkY29tcGFyZS4gKCgk bWF0Y2hlc1sxXSkgPyAkbWF0Y2hlc1sxXSA6ICc9JykgLiAkbWF0Y2hlc1syXSApOwoJCQl9 CgkJCXN3aXRjaCAoJG1hdGNoZXNbMV0pIHsKCQkJCWNhc2UgIiEiOgoJCQkJCSRjdHIgKz0g KCRjb21wYXJlIT0kbWF0Y2hlc1syXSkgPyAxIDogMDsKCQkJCQlicmVhazsKCQkJCWNhc2Ug Ij4iOgoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPiRtYXRjaGVzWzJdKSA/IDEgOiAwOwoJCQkJ CWJyZWFrOwoJCQkJY2FzZSAiPj0iOgoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPj0kbWF0Y2hl c1syXSkgPyAxIDogMDsKCQkJCQlicmVhazsKCQkJCWNhc2UgIjwiOgoJCQkJCSRjdHIgKz0g KCRjb21wYXJlPCRtYXRjaGVzWzJdKSA/IDEgOiAwOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAi PD0iOgoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPD0kbWF0Y2hlc1syXSkgPyAxIDogMDsKCQkJ CQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJJGN0ciArPSAoJGNvbXBhcmU9PSRtYXRjaGVz WzJdKSA/IDEgOiAwOwoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoJJHJlc3VsdCA9ICgoJGN0 ciA9PT0gJG51bSAmJiAkbG9naWMgPT0gImFuZCIpIHx8ICRjdHIgPiAwICYmICRsb2dpYyA9 PSAib3IiKSA/IHRydWUgOiBmYWxzZTsKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcs ICRyZXN1bHQpKTsKfQoKLy8gQ29udmVuaWVudCB3cmFwcGVyIGZvciBzbWRfY2FsX2luZm8g dXNlPSJldmVudCIKZnVuY3Rpb24gc21kX2V2ZW50X2luZm8oJGF0dHMpIHsKCSRhdHRzWyd1 c2UnXSA9ICdldmVudCc7CglyZXR1cm4gc21kX2NhbF9pbmZvKCRhdHRzKTsKfQoKLy8gR3Jh YiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGV2ZW50CmZ1bmN0 aW9uIHNtZF9jYWxfaW5mbygkYXR0cykgewoJZ2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGlj bGUsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNtZF9kYXRlLCAkc21kX2V2ZW50 aW5mbzsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSd0eXBlJyAgICAgICAgPT4gJ2ZsYWcn LAoJCSdqb2luJyAgICAgICAgPT4gJyAnLAoJCSdqb2luX3ByZWZpeCcgPT4gJ1NNRF9BVVRP JywKCQknaHRtbCcgICAgICAgID0+IDAsCgkJJ2VzY2FwZScgICAgICA9PiAnaHRtbCcsCgkJ J3VzZScgICAgICAgICA9PiAnY2FsJywgLy8gJ2NhbCcgZm9yIGNhbGVuZGFyICh1c2VzICRz bWRfY2FsaW5mbykgb3IgJ2V2ZW50JyBmb3IgZXZlbnQgbGlzdHMgKHVzZXMgJHNtZF9ldmVu dGluZm8pLiBOb3QgcHVibGljYWxseSBhbHRlcmFibGUKCQknZGVidWcnICAgICAgID0+IDAs CgkpLCAkYXR0cykpOwoKCS8vIFZhbGlkYXRlICR1c2UgYXR0cmlidXRlCgkkdXNlID0gKGlu X2FycmF5KCR1c2UsIGFycmF5KCdjYWwnLCAnZXZlbnQnKSkpID8gJHVzZSA6ICdjYWwnOwoJ JGNhbF9nbG9iYWwgPSAkeydzbWRfJy4kdXNlLidpbmZvJ307CgoJaWYgKCRkZWJ1ZyAmJiAk dGhpc2FydGljbGUpIHsKCQllY2hvICcrKyBFdmVudCBuYW1lICsrJzsKCQlkbXAoJHRoaXNh cnRpY2xlWyd0aXRsZSddKTsKCX0KCWlmICgkZGVidWcgJiYgJGNhbF9nbG9iYWwpIHsKCQll Y2hvICcrKyBBdmFpbGFibGUgJy4kdXNlLicgaW5mbyArKyc7CgkJZG1wKCRjYWxfZ2xvYmFs KTsKCX0KCglpZiAoJGRlYnVnICYmICRzbWRfZGF0ZSkgewoJCWVjaG8gJysrIEF2YWlsYWJs ZSBkYXRlIGluZm8gKysnOwoJCWRtcCgkc21kX2RhdGUpOwoJfQoKCWlmICgkZGVidWcgJiYg JHNtZF9jYWxfZmxhZykgewoJCWVjaG8gJysrIEF2YWlsYWJsZSBmbGFnIGluZm8gKysnOwoJ CWRtcCgkc21kX2NhbF9mbGFnKTsKCX0KCgkvLyBUeXBlOiAwPWRhdGUsIDE9c21kX2NhbC9l dmVudGluZm8sIDI9cHJldGV4dCwgMz10aGlzYXJ0aWNsZSwgNChvciBvdGhlcik9dXNlciB2 YWx1ZQoJJG1hcCA9IGFycmF5KAoJCSd5ZWFyJyA9PiBhcnJheSgwLCAneScpLAoJCSdpc295 ZWFyJyA9PiBhcnJheSgwLCAnaXknLCAneScpLAoJCSdtb250aCcgPT4gYXJyYXkoMCwgJ20n KSwKCQknd2VlaycgPT4gYXJyYXkoMCwgJ3cnKSwKCQknZGF5JyA9PiBhcnJheSgwLCAnZCcp LAoJCSdzZWN0aW9uJyA9PiBhcnJheSgzLCAnJywgJ3MnKSwKCQknY2F0ZWdvcnkxJyA9PiBh cnJheSgzLCAnJywgJ2MnKSwKCQknY2F0ZWdvcnkyJyA9PiBhcnJheSgzLCAnJywgJ2MnKSwK CQkndGhpc2lkJyA9PiBhcnJheSgzLCAndGhpc2lkJywgJ2lkJyksCgkJJ2FydGljbGUnID0+ IGFycmF5KDEsICdhcnRpZCcsICdpZCcpLAoJCSdjYWxpZCcgPT4gYXJyYXkoMSwgJ2lkJywg J2NhbGlkJyksCgkJJ2NhdGVnb3J5JyA9PiBhcnJheSgyLCAnYycpLAoJCSdyZWFsbmFtZScg PT4gYXJyYXkoMiwgJ2F1dGhvcicpLAoJKTsKCSRqb2luID0gKCRodG1sKSA/IGEgOiAkam9p bjsgLy8gaHRtbCBtb2RlIGZvcmNlcyBhbXBlcnNhbmQgam9pbgoJJHR5cGUgPSBkb19saXN0 KCR0eXBlKTsKCSRyZXQgPSBhcnJheSgpOwoJZm9yZWFjaCAoJHR5cGUgYXMgJGl0ZW0pIHsK CQkkcHRzID0gZG9fbGlzdCgkaXRlbSwgJzonKTsKCQkkaXRlbSA9ICRwdHNbMF07CgoJCWlm IChlbXB0eSgkaXRlbSkpIGNvbnRpbnVlOwoJCS8vIERlZmF1bHQgaHRtbCBpZAoJCSRoaWQg PSAoaXNzZXQoJG1hcFskaXRlbV0pKSA/ICgoaXNzZXQoJG1hcFskaXRlbV1bMl0pKSA/ICRt YXBbJGl0ZW1dWzJdIDogJG1hcFskaXRlbV1bMV0pIDogJGl0ZW07CgkJLy8gVXNlci1zcGVj aWZpZWQgaHRtbGlkIG92ZXJyaWRlcyBpdAoJCSRoaWQgPSAoY291bnQoJHB0cykgPiAxICYm ICFlbXB0eSgkcHRzWzFdKSkgPyAkcHRzWzFdIDogJGhpZDsKCQlpZiAoJGl0ZW0gPT0gImZs YWciKSB7CgkJCSRyZXRbXSA9ICgoJGpvaW5fcHJlZml4PT0iU01EX0FVVE8iKSA/ICRqb2lu IDogJycpLmpvaW4oJGpvaW4sICRzbWRfY2FsX2ZsYWcpOwoJCX0gZWxzZSBpZiAoJGl0ZW0g PT0gImF1dGhvciIgfHwgJGl0ZW0gPT0gInJlYWxuYW1lIikgewoJCQkkY3VycmF1dGhvciA9 ICgkdGhpc2FydGljbGUgPT0gTlVMTCkgPyAnJyA6IGF1dGhvcihhcnJheSgpKTsKCQkJaWYg KCRjdXJyYXV0aG9yKSB7CgkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycp IC4gJGN1cnJhdXRob3I7CgkJCX0KCQl9IGVsc2UgaWYgKCRpdGVtID09ICJzIikgewoJCQkk c2VjID0gKCFlbXB0eSgkcHJldGV4dFsncyddKSkgPyAkcHJldGV4dFsncyddIDogKChpc3Nl dCgkY2FsX2dsb2JhbFsncyddKSAmJiAhZW1wdHkoJGNhbF9nbG9iYWxbJ3MnXSkpID8gJGNh bF9nbG9iYWxbJ3MnXSA6ICcnKTsKCQkJaWYgKCRzZWMpIHsKCQkJCSRyZXRbXSA9ICgoJGh0 bWwpID8gJGhpZC4nPScgOiAnJykgLiAkc2VjOwoJCQl9CgkJfSBlbHNlIGlmIChpc3NldCgk bWFwWyRpdGVtXSkpIHsKCQkJJHR5cCA9ICRtYXBbJGl0ZW1dWzBdOwoJCQkkaWR4ID0gZW1w dHkoJG1hcFskaXRlbV1bMV0pID8gJGl0ZW0gOiAkbWFwWyRpdGVtXVsxXTsKCQkJc3dpdGNo ICgkdHlwKSB7CgkJCQljYXNlIDA6CgkJCQkJaWYgKCRzbWRfZGF0ZVskaWR4XSkgewoJCQkJ CQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHNtZF9kYXRlWyRpZHhd OwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgMToKCQkJCQlpZiAoIWVtcHR5KCRjYWxf Z2xvYmFsWyRpZHhdKSkgewoJCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDog JycpIC4gJGNhbF9nbG9iYWxbJGlkeF07CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAy OgoJCQkJCWlmICghZW1wdHkoJHByZXRleHRbJGlkeF0pKSB7CgkJCQkJCSRyZXRbXSA9ICgo JGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkcHJldGV4dFskaWR4XTsKCQkJCQl9CgkJCQkJ YnJlYWs7CgkJCQljYXNlIDM6CgkJCQkJaWYgKCR0aGlzYXJ0aWNsZSAhPSBOVUxMICYmIGlz c2V0KCR0aGlzYXJ0aWNsZVskaWR4XSkgJiYgIWVtcHR5KCR0aGlzYXJ0aWNsZVskaWR4XSkp IHsKCQkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcnKSAuICR0aGlzYXJ0 aWNsZVskaWR4XTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCX0KCQl9IGVsc2UgaWYgKGFycmF5 X2tleV9leGlzdHMoJGl0ZW0sICRwcmV0ZXh0KSkgewoJCQlpZiAoJHByZXRleHRbJGl0ZW1d KSB7CgkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHByZXRleHRb JGl0ZW1dOwoJCQl9CgkJfSBlbHNlIGlmIChpc3NldCgkY2FsX2dsb2JhbFskaXRlbV0pKSB7 CgkJCWlmICghZW1wdHkoJGNhbF9nbG9iYWxbJGl0ZW1dKSkgewoJCQkJJHJldFtdID0gKCgk aHRtbCkgPyAkaGlkLic9JyA6ICcnKSAuICRjYWxfZ2xvYmFsWyRpdGVtXTsKCQkJfQoJCX0g ZWxzZSB7CgkJCWlmICgkdGhpc2FydGljbGUgIT0gTlVMTCAmJiBpc3NldCgkdGhpc2FydGlj bGVbJGl0ZW1dKSAmJiAhZW1wdHkoJHRoaXNhcnRpY2xlWyRpdGVtXSkpIHsKCQkJCSRyZXRb XSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkdGhpc2FydGljbGVbJGl0ZW1dOwoJ CQl9CgkJfQoJfQoJJHJldCA9IGFycmF5X3VuaXF1ZSgkcmV0KTsKCSRvdXQgPSAoKCRqb2lu X3ByZWZpeD09IlNNRF9BVVRPIikgPyAoKCRodG1sKSA/ICc/JyA6ICcnKSA6ICRqb2luX3By ZWZpeCkuam9pbigkam9pbiwgJHJldCk7CglyZXR1cm4gKCRlc2NhcGU9PSdodG1sJykgPyBo dG1sc3BlY2lhbGNoYXJzKCRvdXQpIDogJG91dDsKfQoKLy8gUmV0dXJuIGEgZm9ybWF0dGVk IHRpbWVzdGFtcCwgd2l0aCBvcHRpb25hbCAndGltZSBub3cnIG92ZXJyaWRlCmZ1bmN0aW9u IHNtZF9jYWxfbm93KCRhdHRzKSB7CglnbG9iYWwgJGRhdGVmb3JtYXQ7CgoJZXh0cmFjdChs QXR0cyhhcnJheSgKCQknZm9ybWF0JyA9PiAkZGF0ZWZvcm1hdCwKCQknbm93JyAgICA9PiAn JywKCQknb2Zmc2V0JyA9PiAnJywKCQknZ210JyAgICA9PiAnJywKCQknbGFuZycgICA9PiAn JywKCSksICRhdHRzKSk7CgoJJHRoZURheSA9IChncHMoJ2QnKSAmJiBpc19udW1lcmljKGdw cygnZCcpKSkgPyAoaW50KWdwcygnZCcpIDogc2FmZV9zdHJmdGltZSgnJWQnKTsKCSR0aGVN b250aCA9IChncHMoJ20nKSAmJiBpc19udW1lcmljKGdwcygnbScpKSkgPyAoaW50KWdwcygn bScpIDogc2FmZV9zdHJmdGltZSgnJW0nKTsKCSR0aGVZZWFyID0gKGdwcygneScpICYmIGlz X251bWVyaWMoZ3BzKCd5JykpKSA/IChpbnQpZ3BzKCd5JykgOiBzYWZlX3N0cmZ0aW1lKCcl WScpOwoJaWYgKCRub3cpIHsKCQkkbm93ID0gc3RyX3JlcGxhY2UoIj9tb250aCIsIGRhdGUo J0YnLCBta3RpbWUoMTIsMCwwLCR0aGVNb250aCwkdGhlRGF5LCR0aGVZZWFyKSksICRub3cp OwoJCSRub3cgPSBzdHJfcmVwbGFjZSgiP3llYXIiLCAkdGhlWWVhciwgJG5vdyk7CgkJJG5v dyA9IHN0cl9yZXBsYWNlKCI/ZGF5IiwgJHRoZURheSwgJG5vdyk7CgkJJG5vdyA9IGlzX251 bWVyaWMoJG5vdykgPyAkbm93IDogc3RydG90aW1lKCRub3cpOwoJfSBlbHNlIHsKCQkkbm93 ID0gdGltZSgpOwoJfQoKCWlmICgkb2Zmc2V0KSB7CgkJJG5vdyA9IHN0cnRvdGltZSgkb2Zm c2V0LCAkbm93KTsKCX0KCgkkZm9ybWF0ID0gc21kX2NhbF9yZWZvcm1hdF93aW4oJGZvcm1h dCwgJG5vdyk7CglyZXR1cm4gc2FmZV9zdHJmdGltZSgkZm9ybWF0LCAkbm93LCAkZ210LCAk bGFuZyk7Cn0KCi8vIFNldCB1c2VyLWRlZmluZWQgY2xhc3NlcyBmb3IgYSBjZWxsCmZ1bmN0 aW9uIHNtZF9jYWxfY2xhc3MoJGF0dHMpIHsKCWdsb2JhbCAkc21kX2NhbF91Y2xzOwoKCWV4 dHJhY3QobEF0dHMoYXJyYXkoCgkJJ25hbWUnID0+ICcnLAoJKSwgJGF0dHMpKTsKCgkkbmFt ZSA9IGRvX2xpc3QoJG5hbWUpOwoJJHNtZF9jYWxfdWNscyA9IGFycmF5X21lcmdlKCRzbWRf Y2FsX3VjbHMsICRuYW1lKTsKfQoKLy8gPHR4cDphcnRpY2xlX2N1c3RvbSAvPiByZXBsYWNl bWVudChpc2gpIHRhZyB0aGF0IHVuZGVyc3RhbmRzIGhvdyB0byBoYW5kbGUgcmVjdXJyaW5n IGV2ZW50cwpmdW5jdGlvbiBzbWRfYXJ0aWNsZV9ldmVudCgkYXR0cywgJHRoaW5nPU5VTEwp IHsKCWdsb2JhbCAkcHJlZnMsICRwcmV0ZXh0LCAkdGhpc3BhZ2UsICR0aGlzYXJ0aWNsZSwg JHNtZF9ldmVudGluZm8sICRzbWRfY2FsX2ZsYWcsICRzbWRfZGF0ZTsKCglleHRyYWN0KGxB dHRzKGFycmF5KAoJCSd0aW1lJyAgICAgICAgPT4gJ2FueScsCgkJJ3R5cGUnICAgICAgICA9 PiAnc3RhbmRhcmQscmVjdXIsbXVsdGknLAoJCSdleHBpcmVkJyAgICAgPT4gJycsCgkJJ2lk JyAgICAgICAgICA9PiAnJywKCQknY2F0ZWdvcnknICAgID0+ICcnLAoJCSdzZWN0aW9uJyAg ICAgPT4gJycsCgkJJ2F1dGhvcicgICAgICA9PiAnJywKCQkncmVhbG5hbWUnICAgID0+ICcn LAoJCSdjdXN0b20nICAgICAgPT4gJycsCgkJJ3N0YXR1cycgICAgICA9PiAnbGl2ZScsCgkJ J3BhcmFtX2RlbGltJyA9PiAnOicsCgkJJ3NvcnQnICAgICAgICA9PiAnJywKCQknZm9ybScg ICAgICAgID0+ICcnLAoJCSdzdGVwZmllbGQnICAgPT4gJycsCgkJJ3NraXBmaWVsZCcgICA9 PiAnJywKCQknb21pdGZpZWxkJyAgID0+ICcnLAoJCSdleHRyYWZpZWxkJyAgPT4gJycsCgkJ J2FsbHNwYW5uZWQnICA9PiAnMCcsCgkJJ2RhdGVmaWVsZHMnICA9PiAnJywKCQknbW9udGgn ICAgICAgID0+ICcnLAoJCSdmcm9tJyAgICAgICAgPT4gJycsCgkJJ3RvJyAgICAgICAgICA9 PiAnJywKCQknb2Zmc2V0JyAgICAgID0+IDAsCgkJJ2xpbWl0JyAgICAgICA9PiAnMTAnLAoJ CSdldmVudGxpbWl0JyAgPT4gJzEwJywKCQkncGFnaW5nJyAgICAgID0+ICcxJywKCQkncGFn ZWJ5JyAgICAgID0+ICcnLAoJCSdwZ29ubHknICAgICAgPT4gJycsCgkJJ3dyYXB0YWcnICAg ICA9PiAnJywKCQknYnJlYWsnICAgICAgID0+ICcnLAoJCSdjbGFzcycgICAgICAgPT4gJycs CgkJJ2RlYnVnJyAgICAgICA9PiAwLAoJKSwgJGF0dHMpKTsKCgkvLyBQaGFzZSAxIGZpbHRl cnMKCSRmaWx0U1FMID0gJHN1YlNRTCA9IGFycmF5KCk7CglpZigkY2F0ZWdvcnkpIHsKCQkk dG1wID0gZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGNhdGVnb3J5KSkp KTsKCQkkZmlsdFNRTFtdID0gJyggQ2F0ZWdvcnkxIElOICgnLiR0bXAuJykgT1IgQ2F0ZWdv cnkyIElOICgnLiR0bXAuJykgKSc7Cgl9CglpZigkc2VjdGlvbikgewoJCSRmaWx0U1FMW10g PSAnU2VjdGlvbiBJTiAoJy5kb1F1b3RlKGpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgk c2VjdGlvbikpKSkuJyknOwoJfQoJaWYoJHJlYWxuYW1lKSB7CgkJJGF1dGhvcnMgPSBzYWZl X2NvbHVtbignbmFtZScsICd0eHBfdXNlcnMnLCAnUmVhbE5hbWUgSU4gKCcuIGRvUXVvdGUo am9pbigiJywnIiwgZG9BcnJheShkb19saXN0KCRyZWFsbmFtZSksICd1cmxkZWNvZGUnKSkp IC4nKScgKTsKCQkkYXV0aG9yID0gam9pbignLCcsICRhdXRob3JzKTsKCX0KCWlmKCRhdXRo b3IpIHsKCQkkZmlsdFNRTFtdID0gJ0F1dGhvcklEIElOICgnLmRvUXVvdGUoam9pbigiJywn IiwgZG9TbGFzaChkb19saXN0KCRhdXRob3IpKSkpLicpJzsKCX0KCWlmKCRpZCkgewoJCSRm aWx0U1FMW10gPSAnSUQgSU4gKCcuam9pbignLCcsIGFycmF5X21hcCgnaW50dmFsJywgZG9f bGlzdCgkaWQpKSkuJyknOwoJfQoJaWYoJGN1c3RvbSkgewoJCSRjdXN0cyA9IGRvX2xpc3Qo JGN1c3RvbSk7CgkJJHZhbGlkT3BzID0gYXJyYXkoJz0nLCAnIT0nLCAnPicsICc+PScsICc8 JywgJzw9JywgJ2xpa2UnLCAnbm90JywgJ25vdCBsaWtlJyk7CgkJZm9yZWFjaCAoJGN1c3Rz IGFzICRzZXQpIHsKCQkJaWYgKHN0cnBvcygkc2V0LCAkcGFyYW1fZGVsaW0pICE9PSBmYWxz ZSkgewoJCQkJJGNsYXVzZU9wdHMgPSBkb19saXN0KCRzZXQsICRwYXJhbV9kZWxpbSk7CgkJ CQkkZmxkID0gJGNsYXVzZU9wdHNbMF07CgkJCQkkb3BlciA9ICgoY291bnQoJGNsYXVzZU9w dHMpID09IDMpICYmIChpbl9hcnJheShzdHJ0b2xvd2VyKCRjbGF1c2VPcHRzWzFdKSwgJHZh bGlkT3BzKSkpID8gJGNsYXVzZU9wdHNbMV0gOiAnPSc7CgkJCQkkY2xhdXNlID0gKGNvdW50 KCRjbGF1c2VPcHRzKSA9PSAzKSA/ICRjbGF1c2VPcHRzWzJdIDogKChjb3VudCgkY2xhdXNl T3B0cykgPT0gMikgPyAkY2xhdXNlT3B0c1sxXSA6ICcnKTsKCQkJCSRmaWx0U1FMW10gPSAk ZmxkIC4gIiAkb3BlciAiIC4gZG9RdW90ZShkb1NsYXNoKCRjbGF1c2UpKTsKCQkJfQoJCX0K CX0KCgkkdHlwZSA9IGRvX2xpc3QoJHR5cGUpOwoJJHBhZ2VieSA9IChlbXB0eSgkcGFnZWJ5 KSA/ICRsaW1pdCA6ICRwYWdlYnkpOwoKCWZvcmVhY2ggKCR0eXBlIGFzICRldnR5cCkgewoJ CXN3aXRjaCgkZXZ0eXApIHsKCQkJY2FzZSAnc3RhbmRhcmQnOgoJCQkJaWYgKCRzdGVwZmll bGQpIHsKCQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBmaWVsZC4iID0gJycgQU5EIEV4cGly ZXMgPSAiLk5VTExEQVRFVElNRS4iKSI7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAncmVj dXInOgoJCQkJaWYgKCRzdGVwZmllbGQpIHsKCQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBm aWVsZC4iICE9ICcnKSI7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAnbXVsdGknOgoJCQkJ aWYgKCRzdGVwZmllbGQpIHsKCQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBmaWVsZC4iID0g JycgQU5EIEV4cGlyZXMgIT0gIi5OVUxMREFURVRJTUUuIikiOwoJCQkJfQoJCQkJYnJlYWs7 CgkJfQoJfQoJaWYgKCRzdWJTUUwpIHsKCQkkZmlsdFNRTFtdID0gJygnLmpvaW4oJyBPUiAn LCAkc3ViU1FMKS4nKSc7Cgl9CgoJJHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRzdGF0dXMgOiAn bGl2ZSc7IC8vIGluIGNhc2Ugc3RhdHVzIGhhcyBiZWVuIGVtcHRpZWQKCSRzdGF0dXMgPSBk b19saXN0KCRzdGF0dXMpOwoJJHN0YXRpID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRzdGF0dXMg YXMgJHN0YXQpIHsKCQlpZiAoZW1wdHkoJHN0YXQpKSB7CgkJCWNvbnRpbnVlOwoJCX0gZWxz ZSBpZiAoaXNfbnVtZXJpYygkc3RhdCkpIHsKCQkJJHN0YXRpW10gPSAkc3RhdDsKCQl9IGVs c2UgewoJCQkkc3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7CgkJfQoJfQoJJGZpbHRT UUxbXSA9ICdTdGF0dXMgSU4gKCcuZG9RdW90ZShqb2luKCInLCciLCAkc3RhdGkpKS4nKSc7 CgoJJGV4cGlyZWQgPSAoJGV4cGlyZWQpID8gJGV4cGlyZWQgOiAkcHJlZnNbJ3B1Ymxpc2hf ZXhwaXJlZF9hcnRpY2xlcyddOwoJaWYgKCEkZXhwaXJlZCkgewoJCSRmaWx0U1FMW10gPSAn KG5vdygpIDw9IEV4cGlyZXMgT1IgRXhwaXJlcyA9ICcuTlVMTERBVEVUSU1FLicpJzsKCX0K CgkvLyBTb3J0aW5nIHJ1bGVzOiBkYXRhIGlzIHNvcnRlZCBvbmNlIGFzIGl0IGlzIGV4dHJh Y3RlZCB2aWEgU1FMIGFuZCB0aGVuIGFnYWluIGFmdGVyIHRoZSBmYWtlIGRhdGVzIGhhdmUg YmVlbiBpbnNlcnRlZAoJJHNvcnQgPSAoZW1wdHkoJHNvcnQpKSA/ICdQb3N0ZWQgYXNjJyA6 ICRzb3J0OwoJJHNvcnQgPSBkb19saXN0KCRzb3J0KTsKCSRzb3J0UHJlZml4ID0gIlNPUlRf IjsKCSRzb3J0T3JkZXIgPSBhcnJheSgpOwoJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50 KCRzb3J0KTsgJGlkeCsrKSB7CgkJJHNvcnRpZXMgPSBleHBsb2RlKCcgJywgJHNvcnRbJGlk eF0pOwoJCWlmIChjb3VudCgkc29ydGllcykgPD0gMSkgewoJCQkkc29ydGllc1sxXSA9ICJh c2MiOwoJCX0KCQkkc29ydGllc1sxXSA9ICRzb3J0UHJlZml4LigoJHNvcnRpZXNbMV0gPT0g ImRlc2MiKSA/ICdERVNDJyA6ICdBU0MnKTsKCQkkc29ydE9yZGVyW10gPSBhcnJheSgiYnki ID0+ICRzb3J0aWVzWzBdLCAiZGlyIiA9PiAkc29ydGllc1sxXSk7Cgl9CgkkZmlsdFNRTCA9 IGpvaW4oJyBBTkQgJywgJGZpbHRTUUwpOwoJJGZpbHRTUUwgLj0gJyBPUkRFUiBCWSAnLmpv aW4oJywnLGRvU2xhc2goJHNvcnQpKTsKCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3Rh bXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFz dE1vZCwgdW5peF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOwoJJGV2bGlzdCA9 IHNhZmVfcm93cygkZ3JhYkNvbHMsICd0ZXh0cGF0dGVybicsICRmaWx0U1FMLCAkZGVidWcp OwoKCWlmICgkZGVidWc+MikgewoJCWVjaG8gIisrIFJFQ09SRCBTRVQgKysiOwoJCWRtcCgk ZXZsaXN0KTsKCX0KCSRhbGxfZXZzID0gJGV2X3RhbGx5ID0gYXJyYXkoKTsKCSRub3cgPSB0 aW1lKCkgKyB0el9vZmZzZXQoKTsKCgkkZXZlbnRsaW1pdCA9IGRvX2xpc3QoJGV2ZW50bGlt aXQpOwoJaWYgKGNvdW50KCRldmVudGxpbWl0KSA9PSAxKSB7CgkJJGV2ZW50bGltaXRbMV0g PSAkZXZlbnRsaW1pdFswXTsKCX0KCgkkZGF0ZWZpZWxkcyA9IGRvX2xpc3QoJGRhdGVmaWVs ZHMpOwoKCS8vIFBoYXNlIDI6IGV4cGFuZCBhbnkgcmVjdXJyaW5nIGRhdGVzIGFuZCBjb2xs YXRlIGFsbCBldmVudHMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgYWxsb3RlZCByYW5nZXMKCWZv cmVhY2ggKCRldmxpc3QgYXMgJHJvdykgewoJCSRldl9wb3N0ZWQgPSAoIWVtcHR5KCRkYXRl ZmllbGRzWzBdKSAmJiAhZW1wdHkoJHJvd1skZGF0ZWZpZWxkc1swXV0pICYmICgkc3RkdCA9 IHN0cnRvdGltZSgkcm93WyRkYXRlZmllbGRzWzBdXSkpICE9PSBmYWxzZSkgPyAkc3RkdCA6 ICRyb3dbJ3VQb3N0ZWQnXSt0el9vZmZzZXQoJHJvd1sndVBvc3RlZCddKTsKCQkkZXZfZXhw aXJlcyA9IChpc3NldCgkZGF0ZWZpZWxkc1sxXSkgJiYgIWVtcHR5KCRyb3dbJGRhdGVmaWVs ZHNbMV1dKSAmJiAoJGVuZHQgPSBzdHJ0b3RpbWUoJHJvd1skZGF0ZWZpZWxkc1sxXV0pKSAh PT0gZmFsc2UpID8gJGVuZHQgOiAoKCRyb3dbJ3VFeHBpcmVzJ109PTApID8gMCA6ICRyb3db J3VFeHBpcmVzJ10rdHpfb2Zmc2V0KCRyb3dbJ3VFeHBpcmVzJ10pKTsKCgkJJHNraXAgPSAo JHNraXBmaWVsZCAmJiAkcm93WyRza2lwZmllbGRdICE9ICcnKTsKCQkkb21pdCA9ICgkb21p dGZpZWxkICYmICRyb3dbJG9taXRmaWVsZF0gIT0gJycpOwoJCSRyZWN1ciA9ICgkc3RlcGZp ZWxkICYmICRyb3dbJHN0ZXBmaWVsZF0gIT0gJycpOwoJCSRleHRyYSA9ICgkZXh0cmFmaWVs ZCAmJiAkcm93WyRleHRyYWZpZWxkXSAhPSAnJyk7CgkJJG11bHRpID0gKCRldl9leHBpcmVz ID4gJGV2X3Bvc3RlZCAmJiAoZGF0ZSgiZC1tLVkiLCAkZXZfZXhwaXJlcykgIT0gZGF0ZSgi ZC1tLVkiLCAkZXZfcG9zdGVkKSkpID8gdHJ1ZSA6IGZhbHNlOwoKCQkvLyBJZiBlbmQgPCBz dGFydCB0aGUgdXNlci1zcGVjaWZpZWQgZGF0ZXMgY2Fubm90IGJlIHRydXN0ZWQKCQlpZiAo JGV2X2V4cGlyZXMgIT0gMCAmJiAkZXZfZXhwaXJlcyA8PSAkZXZfcG9zdGVkKSB7CgkJCSRl dl9wb3N0ZWQgPSAkcm93Wyd1UG9zdGVkJ10rdHpfb2Zmc2V0KCRyb3dbJ3VQb3N0ZWQnXSk7 CgkJCSRldl9leHBpcmVzID0gKCgkcm93Wyd1RXhwaXJlcyddPT0wKSA/IDAgOiAkcm93Wyd1 RXhwaXJlcyddK3R6X29mZnNldCgkcm93Wyd1RXhwaXJlcyddKSk7CgkJCXRyaWdnZXJfZXJy b3IoJ0V4cGlyeSBjYW5ub3QgYmUgYmVmb3JlIHN0YXJ0IGRhdGUgaW4gIicuJHJvd1snVGl0 bGUnXS4nIjogaWdub3JlZCcsIEVfVVNFUl9XQVJOSU5HKTsKCQl9CgkJaWYgKCRkZWJ1ZyA+ IDEpIHsKCQkJZWNobyAnKysgRVZFTlQgU1RBUlQgLy8gRU5EICsrJzsKCQkJZG1wKCRyb3db J1RpdGxlJ10pOwoJCQlkbXAoJGV2X3Bvc3RlZCwgZGF0ZSgnWS1tLWQgSDppOnMnLCAkZXZf cG9zdGVkKSwgJGV2X2V4cGlyZXMsIGRhdGUoJ1ktbS1kIEg6aTpzJywgJGV2X2V4cGlyZXMp KTsKCQl9CgoJCS8vIFJld3JpdGUgdGhlIHN0YXJ0L2VuZCBkYXRlcyBpbiBjYXNlIHRoZXkg YXJlIHVzZXItZGVmaW5lZAoJCSRyb3dbJ3VQb3N0ZWQnXSA9ICRldl9wb3N0ZWQ7CgkJJHJv d1snUG9zdGVkJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICRldl9wb3N0ZWQpOwoJCSRyb3db J3VFeHBpcmVzJ10gPSAkZXZfZXhwaXJlczsKCQkkcm93WydFeHBpcmVzJ10gPSAoJGV2X2V4 cGlyZXM9PTApID8gJzAwMDAtMDAtMDAgMDA6MDA6MDAnIDogZGF0ZSgiWS1tLWQgSDppOnMi LCAkZXZfZXhwaXJlcyk7CgoJCSRkaWZmID0gKCRldl9leHBpcmVzID09IDApID8gMCA6ICRl dl9leHBpcmVzIC0gJGV2X3Bvc3RlZDsKCQkkZXZfbW9udGggPSBkYXRlKCdtJywgJGV2X3Bv c3RlZCk7CgkJJGV2X3llYXIgPSBkYXRlKCdZJywgJGV2X3Bvc3RlZCk7CgkJJGV2X2hyID0g ZGF0ZSgnSCcsICRldl9wb3N0ZWQpOwoJCSRldl9tbiA9IGRhdGUoJ2knLCAkZXZfcG9zdGVk KTsKCQkkZXZfc2MgPSBkYXRlKCdzJywgJGV2X3Bvc3RlZCk7CgkJJGlnbm9yZSA9IGFycmF5 KCk7CgoJCS8vIEdlbmVyYXRlIGEgc2tpcCBhcnJheSBmb3IgdGhpcyBldmVudAoJCWlmICgk c2tpcCkgewoJCQkkaWdub3JlcyA9IGRvX2xpc3QoJHJvd1skc2tpcGZpZWxkXSk7CgkJCWZv cmVhY2ggKCRpZ25vcmVzIGFzICR2YWwpIHsKCQkJCSRpZ3JuZyA9IHNtZF9leHBhbmRfZGF0 ZXJhbmdlKCR2YWwsICRldl9wb3N0ZWQsICRldl9leHBpcmVzKTsKCQkJCWZvcmVhY2ggKCRp Z3JuZyBhcyAkdGhldmFsKSB7CgkJCQkJJGlnbm9yZVtdID0gZGF0ZSgiZC1NLVkiLCAkdGhl dmFsKTsgLy8gRm9yY2UgZWFjaCBkYXRlIHRvIGEga25vd24gZm9ybWF0CgkJCQl9CgkJCX0K CQl9CgkJLy8gQXBwZW5kIGFueSBvbWl0dGVkIGV2ZW50cwoJCWlmICgkb21pdCkgewoJCQkk b21pdHMgPSBkb19saXN0KCRyb3dbJG9taXRmaWVsZF0pOwoJCQlmb3JlYWNoICgkb21pdHMg YXMgJHZhbCkgewoJCQkJJG9tcm5nID0gc21kX2V4cGFuZF9kYXRlcmFuZ2UoJHZhbCwgJGV2 X3Bvc3RlZCwgJGV2X2V4cGlyZXMpOwoJCQkJZm9yZWFjaCAoJG9tcm5nIGFzICR0aGV2YWwp IHsKCQkJCQkkaWdub3JlW10gPSBkYXRlKCJkLU0tWSIsICR0aGV2YWwpOwoJCQkJfQoJCQl9 CgkJfQoJCWlmICgkZGVidWcgPiAxICYmICRpZ25vcmUpIHsKCQkJZWNobyAnKysgSUdOT1JF RCBEQVRFUyArKyc7CgkJCWRtcCgkaWdub3JlKTsKCQl9CgoJCS8vIERvZXMgdGhlIGJhc2Ug ZXZlbnQgZGVzZXJ2ZSB0byBiZSBpbiB0aGUgcmVzdWx0cz8KCQlpZiAoc21kX2luY2x1ZGVf ZXZlbnQoJGV2X3Bvc3RlZCwgJG5vdywgJGlnbm9yZSwgJHRpbWUsICRmcm9tLCAkdG8sICRt b250aCkpIHsKCQkJJGFsbF9ldnNbXSA9IGFycmF5KCdldicgPT4gJHJvdywgJ2ZsYWdzJyA9 PiAoJG11bHRpID8gYXJyYXkoJ211bHRpZmlyc3QnKSA6IGFycmF5KCdzdGFuZGFyZCcpKSAp OwoJCQkkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSA9IChpc3NldCgkZXZfdGFsbHlbJHJv d1sndVBvc3RlZCddXSkpID8gJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0rMSA6IDE7CgkJ fQoKCQkvLyBBZGQgYW55IGV4dHJhIGRhdGVzIGZvciB0aGlzIGV2ZW50CgkJaWYgKCRleHRy YSkgewoJCQkkeHRyYSA9IGRvX2xpc3QoJHJvd1skZXh0cmFmaWVsZF0pOwoJCQkkeHRyYXMg PSBhcnJheSgpOwoKCQkJLy8gTWFrZSB1cCBhbiBhcnJheSBvZiBhbGwgZXh0cmEgZGF0ZXMK CQkJZm9yZWFjaCAoJHh0cmEgYXMgJHZhbCkgewoJCQkJaWYgKHN0cnBvcygkdmFsLCAiKyIp ID09PSBmYWxzZSkgewoJCQkJCSRleHJuZyA9IHNtZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwp OwoJCQkJCSR4dHJhc1tdID0gZGF0ZSgiWS1tLWQiLCAkZXhybmdbMF0pOwoJCQkJCSRzcGV4 ID0gMDsKCQkJCX0gZWxzZSB7CgkJCQkJJGZha2VfZGlmZiA9IHNhZmVfc3RydG90aW1lKGRh dGUoIlktTS1kIiwgJGV2X2V4cGlyZXMpIC4gIiAyMzo1OTo1OSIpOwoJCQkJCSRmZGlmZiA9 ICgkZXZfZXhwaXJlcz09MCkgPyAwIDogJGZha2VfZGlmZiAtICRldl9wb3N0ZWQ7CgkJCQkJ JGNoayA9ICRhbGxzcGFubmVkICYmICRtdWx0aSAmJiAhJHJlY3VyOwoJCQkJCSRzcGlkdGgg PSAkY2hrID8gY2VpbCgkZmRpZmYgLyAoNjAqNjAqMjQpKSA6IDE7IC8vIGRheXMgYmV0d2Vl biBkYXRlcwoJCQkJCSR2YWwgPSBydHJpbSgkdmFsLCAnKycpOwoJCQkJCWZvciAoJGpkeCA9 IDE7ICRqZHggPD0gJHNwaWR0aDsgJGpkeCsrKSB7CgkJCQkJCSR4dHJhc1tdID0gZGF0ZSgi WS1tLWQiLCBzYWZlX3N0cnRvdGltZSgkdmFsIC4gKCgkamR4PT0xKSA/ICcnIDogJysnLigk amR4LTEpLicgZGF5cycpKSk7CgkJCQkJfQoJCQkJCSRzcGV4ID0gJGNoayA/IDEgOiAwOwoJ CQkJfQoJCQl9CgoJCQkkeHRyYXMgPSBhcnJheV91bmlxdWUoJHh0cmFzKTsKCgkJCSRzdGFt cG9mZiA9IChpbnQpKDM2MDAqJGV2X2hyKSArIChpbnQpKDYwKiRldl9tbikgKyAoaW50KSRl dl9zYzsKCQkJZm9yZWFjaCAoJHh0cmFzIGFzICRqZHggPT4gJHZhbCkgewoJCQkJJHRtID0g c3RydG90aW1lKCR2YWwpOwoJCQkJJGZsYWdzID0gYXJyYXkoJ2V4dHJhJyk7CgoJCQkJLy8g Tm8gJGlnbm9yZSBmb3IgYWRkaXRpb25hbCBldmVudHMsIGFzIHRoZXkgYWx3YXlzIHNob3cg dXAKCQkJCWlmIChzbWRfaW5jbHVkZV9ldmVudCgkdG0rJHN0YW1wb2ZmLCAkbm93LCBhcnJh eSgpLCAkdGltZSwgJGZyb20sICR0bywgJG1vbnRoKSkgewoJCQkJCSRmYWtlcm93ID0gJHJv dzsKCQkJCQkkZmFrZXJvd1snUG9zdGVkJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICR0bSsk c3RhbXBvZmYpOwoJCQkJCSRmYWtlcm93Wyd1UG9zdGVkJ10gPSAkdG0rJHN0YW1wb2ZmOwoJ CQkJCWlmICgkZGlmZiA+IDApIHsKCQkJCQkJJGZha2Vyb3dbJ0V4cGlyZXMnXSA9IGRhdGUo IlktbS1kIEg6aTpzIiwgJHRtKyRzdGFtcG9mZiskZGlmZik7CgkJCQkJCSRmYWtlcm93Wyd1 RXhwaXJlcyddID0gJHRtKyRzdGFtcG9mZiskZGlmZjsKCQkJCQl9CgkJCQkJaWYgKCRzcGV4 KSB7CgkJCQkJCSRmbGFnc1tdID0gKCRqZHg9PTApID8gJ211bHRpZmlyc3QnIDogKCgkamR4 PT0kc3BpZHRoLTEpID8gJ211bHRpbGFzdCcgOiAnbXVsdGknKTsKCQkJCQl9CgkJCQkJJGFs bF9ldnNbXSA9IGFycmF5KCdldicgPT4gJGZha2Vyb3csICdmbGFncycgPT4gJGZsYWdzKTsK CQkJCQkkZXZfdGFsbHlbJGZha2Vyb3dbJ3VQb3N0ZWQnXV0gPSAoaXNzZXQoJGV2X3RhbGx5 WyRmYWtlcm93Wyd1UG9zdGVkJ11dKSkgPyAkZXZfdGFsbHlbJGZha2Vyb3dbJ3VQb3N0ZWQn XV0rMSA6IDE7CgkJCQl9CgkJCX0KCQl9CgoJCWlmICgkcmVjdXIpIHsKCQkJJGZsYWdzID0g YXJyYXkoJ3JlY3VyZmlyc3QnKTsKCQkJJGZyZXEgPSBkb19saXN0KCRyb3dbJHN0ZXBmaWVs ZF0pOwoJCQkkbW9udGhseSA9IGZhbHNlOwoJCQkkY3Vycm1vbnRoID0gJGV2X21vbnRoOwoJ CQkkY3VycnllYXIgPSAkZXZfeWVhcjsKCQkJZm9yZWFjaCAoJGZyZXEgYXMgJGludGVydmFs KSB7CgkJCQkkZmFrZXJvdyA9ICRyb3c7CgkJCQkkY3N0YW1wID0gJGV2X3Bvc3RlZDsKCQkJ CWZvcigkaWR4ID0gMDsgJGlkeCA8IDk5OTk5OyAkaWR4KyspIHsKCQkJCQkkbHN0YW1wID0g JGNzdGFtcDsKCQkJCQlpZiAoKGlzc2V0KCRldl90YWxseVskcm93Wyd1UG9zdGVkJ11dKSAm JiAoJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0gPj0gJGV2ZW50bGltaXRbMF0pKSB8fCAo JHRvICYmICRjc3RhbXAgPiBzYWZlX3N0cnRvdGltZSgkdG8pKSkgewoJCQkJCQlicmVhazsK CQkJCQl9CgkJCQkJJGl2YWwgPSBzdHJfcmVwbGFjZSgiP21vbnRoIiwgZGF0ZSgnRicsIG1r dGltZSgwLDAsMCwkY3Vycm1vbnRoLDEpKSwgJGludGVydmFsKTsKCQkJCQkkaXZhbCA9IHN0 cl9yZXBsYWNlKCI/eWVhciIsICRjdXJyeWVhciwgJGl2YWwpOwoKCQkJCQlpZiAoc3RycG9z KCRpdmFsLCAibGFzdCIpID09PSAwKSB7CgkJCQkJCSRpdmFsID0gZGF0ZSgibCwgRiBqUyBZ Iiwgc3RydG90aW1lKCAkaXZhbCwgbWt0aW1lKDEyLCAwLCAwLCBkYXRlKCJuIiwgbWt0aW1l KDAsMCwwLCRjdXJybW9udGgsMSwkY3VycnllYXIpKSsxLCAxLCAkY3VycnllYXIpICkpOwoJ CQkJCQkkbW9udGhseSA9IHRydWU7CgkJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGl2YWwsICJm aXJzdCIpID09PSAwKSB7CgkJCQkJCSRpdmFsID0gZGF0ZSgibCwgRiBqUyBZIiwgc3RydG90 aW1lKCAkaXZhbCwgbWt0aW1lKDEyLCAwLCAwLCAoKCRjdXJybW9udGg+MSkgPyAkY3Vycm1v bnRoLTEgOiAxMiksIGRhdGUoInQiLCBta3RpbWUoMCwwLDAsJGN1cnJtb250aC0xLDEsKCgk Y3Vycm1vbnRoPT0xKSA/ICRjdXJyeWVhci0xOiAkY3VycnllYXIpKSApLCAoKCRjdXJybW9u dGg9PTEpID8gJGN1cnJ5ZWFyLTE6ICRjdXJyeWVhcikpICkpOwoJCQkJCQkkbW9udGhseSA9 IHRydWU7CgkJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGl2YWwsICJ0aGlzIikgPT09IDApIHsK CQkJCQkJJG1vbnRobHkgPSB0cnVlOwoJCQkJCX0KCQkJCQlpZiAoc3RycG9zKCRpbnRlcnZh bCwgIj9tb250aCIpIHx8IHN0cnBvcygkaW50ZXJ2YWwsICI/eWVhciIpKSB7CgkJCQkJCSRt b250aGx5ID0gdHJ1ZTsKCSAgICAgICAgICAgIH0KCgkJCQkJaWYgKCRtb250aGx5KSB7CgkJ CQkJCSRjc3RhbXAgPSBzdHJ0b3RpbWUoJGl2YWwpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRj c3RhbXAgPSBzdHJ0b3RpbWUoJGl2YWwsICRjc3RhbXApOwoJCQkJCX0KCgkJCQkJLy8gVGhp cyBrbHVkZ2UgdGFrZXMgYWNjb3VudCBvZiB0aW1lc3RhbXBzIGxpa2UgImxhc3QgVGh1cnNk YXkiIChvZiB0aGUgbW9udGgpLiBUaGUgbGFzdCAnd2hhdGV2ZXIgZGF5JyBvZgoJCQkJCS8v IGEgbW9udGggY2FuIG9ubHkgYmUgYSBtYXhpbXVtIG9mIDMxIGRheXMgYmVmb3JlIHRoZSBs YXN0IHRpbWVzdGFtcCB3ZSBzYXcsIHNvIGNoZWNrIGZvciB0aGF0ICgrLy0gMTAgbWlucykK CQkJCQkkZGlmZnN0YW1wID0gJGNzdGFtcCAtICRsc3RhbXA7CgkJCQkJaWYgKCRkaWZmc3Rh bXAgPCAwKSB7CgkJCQkJCWlmICgkZGlmZnN0YW1wID4gLSg2MCo2MCoyNCozMSkrNjAwKSB7 CgkJCQkJCQkkY3N0YW1wID0gZmFsc2U7IC8vIFNvbWUgJ2xhc3Qgd2Vla2RheScgb2YgdGhl IHByZXZpb3VzIG1vbnRoCgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlicmVhazsgLy8gUEhQX0lO VF9NQVggZXhjZWVkZWQKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoJGNzdGFtcCAhPT0gZmFs c2UpIHsKCQkJCQkJaWYgKCRkZWJ1ZyA+IDEpIHsKCQkJCQkJCWRtcCgiSU5URVJWQUw6ICIu ICRjc3RhbXAgLiAnIC8vICcgLmRhdGUoJ2QtTS1ZIEg6aTpzJywgJGNzdGFtcCkpOwoJCQkJ CQl9CgoJCQkJCQlpZiAoKCRjc3RhbXAgPCAkZXZfZXhwaXJlcyB8fCAkZXZfZXhwaXJlcyA9 PSAnMCcpICYmICgkY3N0YW1wICE9ICRldl9wb3N0ZWQpKSB7CgkJCQkJCQkkc2hvd19tZSA9 IHNtZF9pbmNsdWRlX2V2ZW50KCRjc3RhbXAsICRub3csICRpZ25vcmUsICR0aW1lLCAkZnJv bSwgJHRvLCAkbW9udGgpOwoJCQkJCQkJaWYgKCRzaG93X21lKSB7CgkJCQkJCQkJJGZsYWdz W10gPSAncmVjdXInOwoJCQkJCQkJCSRmYWtlcm93WydQb3N0ZWQnXSA9IGRhdGUoIlktbS1k IEg6aTpzIiwgJGNzdGFtcCk7CgkJCQkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICRjc3Rh bXA7CgkJCQkJCQkJJGFsbF9ldnNbXSA9IGFycmF5KCdldicgPT4gJGZha2Vyb3csICdmbGFn cycgPT4gJGZsYWdzKTsKCQkJCQkJCQkkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSA9IChp c3NldCgkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSkpID8gJGV2X3RhbGx5WyRyb3dbJ3VQ b3N0ZWQnXV0rMSA6IDE7CgkJCQkJCQkJJGZsYWdzID0gYXJyYXkoKTsgLy8gcmVzZXQgc28g cmVjdXJmaXJzdCBpcyByZW1vdmVkCgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQli cmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQkvLyBJbmNyZW1lbnQgdGhlIG1vbnRoL3llYXIg cmVhZHkgZm9yIHRoZSBuZXh0IGludGVydmFsCgkJCQkJaWYgKCRtb250aGx5KSB7CgkJCQkJ CSRjdXJyeWVhciA9ICgkY3Vycm1vbnRoPT0xMikgPyAkY3VycnllYXIrMSA6ICRjdXJyeWVh cjsKCQkJCQkJJGN1cnJtb250aCA9ICgkY3Vycm1vbnRoPT0xMikgPyAxIDogJGN1cnJtb250 aCsxOwoJCQkJCX0KCQkJCX0KCQkJCWlmICgkZGVidWc+MSkgewoJCQkJCWlmIChpc3NldCgk ZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSkpIHsKCQkJCQkJZG1wKCJUQUxMWTogIi4gJGV2 X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0pOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0gZWxzZSBp ZiAoJGFsbHNwYW5uZWQgJiYgZGF0ZSgiWS1NLWQiLCAkZXZfZXhwaXJlcykgIT0gZGF0ZSgi WS1NLWQiLCAkZXZfcG9zdGVkKSkgewoJCQkkcG9zdGRhdGUgPSBkYXRlKCJZLU0tZCBIOmk6 cyIsICRldl9wb3N0ZWQpOwoJCQkkZmFrZV9kaWZmID0gc2FmZV9zdHJ0b3RpbWUoZGF0ZSgi WS1NLWQiLCAkZXZfZXhwaXJlcykgLiAiIDIzOjU5OjU5Iik7CgkJCSRkaWZmID0gKCRldl9l eHBpcmVzPT0wKSA/IDAgOiAkZmFrZV9kaWZmIC0gJGV2X3Bvc3RlZDsKCQkJJHNwaWR0aCA9 IGNlaWwoJGRpZmYgLyAoNjAqNjAqMjQpKTsgLy8gZGF5cyBiZXR3ZWVuIGRhdGVzCgkJCWZv ciAoJGpkeCA9IDE7ICRqZHggPCAkc3BpZHRoOyAkamR4KyspIHsKCQkJCSRmbGFncyA9IGFy cmF5KCk7CgkJCQkkdG0gPSBzYWZlX3N0cnRvdGltZSgkcG9zdGRhdGUuJysnLiRqZHguJyBk YXlzJyk7CgkJCQkkc2hvd19tZSA9IHNtZF9pbmNsdWRlX2V2ZW50KCR0bSwgJG5vdywgJGln bm9yZSwgJHRpbWUsICRmcm9tLCAkdG8sICRtb250aCk7CgkJCQlpZiAoJHNob3dfbWUpIHsK CQkJCQkkZmxhZ3NbXSA9ICgkamR4PT0kc3BpZHRoLTEpID8gJ211bHRpbGFzdCcgOiAnbXVs dGknOwoJCQkJCSRmYWtlcm93ID0gJHJvdzsKCQkJCQkkZmFrZXJvd1snUG9zdGVkJ10gPSBk YXRlKCJZLW0tZCBIOmk6cyIsICR0bSk7CgkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICR0 bTsKCQkJCQkkYWxsX2V2c1tdID0gYXJyYXkoJ2V2JyA9PiAkZmFrZXJvdywgJ2ZsYWdzJyA9 PiAkZmxhZ3MpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCWlmICgkZGVidWc+MikgewoJCWVjaG8g IisrIFBSRS1TT1JURUQgKysiOwoJCWRtcCgkYWxsX2V2cyk7Cgl9CgoJLy8gTWFrZSB1cCBh biBhcnJheV9tdWx0aXNvcnQgYXJnIGxpc3QgYW5kIGV4ZWN1dGUgaXQKCWZvcmVhY2goJGFs bF9ldnMgYXMgJGtleSA9PiAkZW50cnkpIHsKCQkkcm93ID0gJGVudHJ5WydldiddOwoJCWZv cmVhY2ggKCRyb3cgYXMgJGlkZW50aWZpZXIgPT4gJGl0ZW0pIHsKCQkJJHZhcm5hbWUgPSAi Y29sXyIuJGlkZW50aWZpZXI7CgkJCSR7JHZhcm5hbWV9WyRrZXldID0gJGl0ZW07CgkJfQoJ fQoJaWYoY291bnQoJGFsbF9ldnMpID4gMCkgewoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBj b3VudCgkc29ydE9yZGVyKTsgJGlkeCsrKSB7CgkJCSRzb3J0YXJnc1tdID0gJyRjb2xfJy4k c29ydE9yZGVyWyRpZHhdWydieSddOwoJCQkkc29ydGFyZ3NbXSA9ICRzb3J0T3JkZXJbJGlk eF1bJ2RpciddOwoJCX0KCQkkc29ydGl0ID0gJ2FycmF5X211bHRpc29ydCgnLmltcGxvZGUo IiwgIiwkc29ydGFyZ3MpLicsICRhbGxfZXZzKTsnOwoJCWV2YWwoJHNvcnRpdCk7Cgl9CgoJ aWYgKCRkZWJ1Zz4yKSB7CgkJZWNobyAiKysgUE9TVC1TT1JURUQgKysiOwoJCWRtcCgkYWxs X2V2cyk7Cgl9CgoJLy8gSGFuZGxlIHBhZ2luZwoJaWYgKCRwYWdpbmcpIHsKCQkkZ3JhbmRf dG90YWwgPSBjb3VudCgkYWxsX2V2cyk7CgkJJHRvdGFsID0gJGdyYW5kX3RvdGFsIC0gJG9m ZnNldDsKCQkkbnVtUGFnZXMgPSBjZWlsKCR0b3RhbC8kcGFnZWJ5KTsKCQkkcGcgPSAoISRw cmV0ZXh0WydwZyddKSA/IDEgOiAkcHJldGV4dFsncGcnXTsKCQkkcGdvZmZzZXQgPSAkb2Zm c2V0ICsgKCgkcGcgLSAxKSAqICRwYWdlYnkpOwoJCS8vIHNlbmQgcGFnaW5nIGluZm8gdG8g dHhwOm5ld2VyIGFuZCB0eHA6b2xkZXIKCQkkcGFnZW91dFsncGcnXSA9ICRwZzsKCQkkcGFn ZW91dFsnbnVtUGFnZXMnXSA9ICRudW1QYWdlczsKCQkkcGFnZW91dFsncyddID0gJHByZXRl eHRbJ3MnXTsKCQkkcGFnZW91dFsnYyddID0gJHByZXRleHRbJ2MnXTsKCQkkcGFnZW91dFsn Z3JhbmRfdG90YWwnXSA9ICRncmFuZF90b3RhbDsKCQkkcGFnZW91dFsndG90YWwnXSA9ICR0 b3RhbDsKCgkJaWYgKGVtcHR5KCR0aGlzcGFnZSkpCgkJCSR0aGlzcGFnZSA9ICRwYWdlb3V0 OwoJCWlmICgkcGdvbmx5KQoJCQlyZXR1cm47Cgl9IGVsc2UgewoJCSRwZ29mZnNldCA9ICRv ZmZzZXQ7Cgl9CgoJLy8gUGhhc2UgMzogaXRlcmF0ZSBvdmVyIHRoZSBuZXcgYXJyYXkgb2Jl eWluZyBhbnkgb2Zmc2V0L2xpbWl0LiBBbnl0aGluZyBpbiB0aGUgcmFuZ2UgZ2V0cyBwb3B1 bGF0ZWQgYW5kIHBhcnNlZAoJJG91dCA9IGFycmF5KCk7CgkkY3RyID0gMDsKCWFydGljbGVf cHVzaCgpOwoJJGxhc3Rwb3N0ZWQgPSAwOwoJZm9yZWFjaCAoJGFsbF9ldnMgYXMgJGlkeCA9 PiAkZW50cnkpIHsKCQkkc21kX2NhbF9mbGFnID0gJHNtZF9kYXRlID0gJHNtZF9ldmVudGlu Zm8gPSBhcnJheSgpOwoKCQlpZiAoJGlkeCA+PSAkcGdvZmZzZXQgJiYgJGN0ciA8ICRsaW1p dCkgewoJCQkkcm93ID0gJGVudHJ5WydldiddOwoKCQkJJHNtZF9jYWxfZmxhZyA9ICRlbnRy eVsnZmxhZ3MnXTsKCgkJCSR0aGlzcG9zdGVkID0gZGF0ZSgnWS1tLWQnLCAkcm93Wyd1UG9z dGVkJ10pOwoJCQkkbmV4dHBvc3RlZCA9IGlzc2V0KCRhbGxfZXZzWydldiddWyRpZHgrMV0p ID8gZGF0ZSgnWS1tLWQnLCAkYWxsX2V2c1snZXYnXVskaWR4KzFdWyd1UG9zdGVkJ10pIDog MDsKCgkJCS8vIEFkanVzdCB0aW1lcyBzbyB0eHA6cG9zdGVkL2V4cGlyZXMgcmV0dXJuIGNv cnJlY3Qgc3RhbXBzCgkJCSRyb3dbJ1Bvc3RlZCddID0gJHJvd1snUG9zdGVkJ10tdHpfb2Zm c2V0KHN0cnRvdGltZSgkcm93WydQb3N0ZWQnXSkpOwoJCQkkcm93Wyd1UG9zdGVkJ10gPSAk cm93Wyd1UG9zdGVkJ10tdHpfb2Zmc2V0KCRyb3dbJ3VQb3N0ZWQnXSk7CgkJCSRyb3dbJ0V4 cGlyZXMnXSA9ICgkcm93Wyd1RXhwaXJlcyddID09IDApID8gJzAwMDAtMDAtMDAgMDA6MDA6 MDAnIDogJHJvd1snRXhwaXJlcyddLXR6X29mZnNldChzdHJ0b3RpbWUoJHJvd1snRXhwaXJl cyddKSk7CgkJCSRyb3dbJ3VFeHBpcmVzJ10gPSAoJHJvd1sndUV4cGlyZXMnXSA9PSAwKSA/ IDAgOiAkcm93Wyd1RXhwaXJlcyddLXR6X29mZnNldCgkcm93Wyd1RXhwaXJlcyddKTsKCgkJ CS8vIFBvcHVsYXRlIGFkZGl0aW9uYWwgZXZlbnQgaW5mb3JtYXRpb24KCQkJJGZha2VzdGFt cCA9ICgkcm93Wyd1RXhwaXJlcyddID09IDApID8gMCA6IHN0cnRvdGltZShkYXRlKCJZLU0t ZCIsICRyb3dbJ3VFeHBpcmVzJ10pIC4gIiAyMzo1OTo1OSIpOwoJCQkkc21kX2V2ZW50aW5m b1snZHVyYXRpb24nXSA9ICgkcm93Wyd1RXhwaXJlcyddID09IDApID8gMCA6ICRyb3dbJ3VF eHBpcmVzJ10gLSAkcm93Wyd1UG9zdGVkJ107CgkJCSRzbWRfZXZlbnRpbmZvWydkdXJhdGlv bmRheXMnXSA9ICgkZmFrZXN0YW1wKSA/IGNlaWwoKCRmYWtlc3RhbXAgLSAkcm93Wyd1UG9z dGVkJ10pIC8gKDYwKjYwKjI0KSkgOiAwOwoJCQkkc21kX2RhdGVbJ3knXSA9IHN0cmZ0aW1l KCclWScsICRyb3dbJ3VQb3N0ZWQnXSk7CgkJCSRzbWRfZGF0ZVsnbSddID0gc3RyZnRpbWUo JyVtJywgJHJvd1sndVBvc3RlZCddKTsKCQkJJHNtZF9kYXRlWydkJ10gPSAoaW50KXN0cmZ0 aW1lKCclZCcsICRyb3dbJ3VQb3N0ZWQnXSk7CgkJCSRzbWRfZGF0ZVsndyddID0gc3RyZnRp bWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVWJywgJHJvd1sndVBvc3RlZCddKSwgJHJvd1sn dVBvc3RlZCddKTsKCQkJJHNtZF9kYXRlWydpeSddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZv cm1hdF93aW4oJyVHJywgJHJvd1sndVBvc3RlZCddKSwgJHJvd1sndVBvc3RlZCddKTsKCQkJ aWYgKCRyb3dbJ3VFeHBpcmVzJ10gPT0gMCkgewoJCQkJJHNtZF9kYXRlWydleHB5J10gPSAk c21kX2RhdGVbJ2V4cG0nXSA9ICRzbWRfZGF0ZVsnZXhwZCddID0gJHNtZF9kYXRlWydleHB3 J10gPSAkc21kX2RhdGVbJ2V4cGl5J10gPSAnJzsKCQkJfSBlbHNlIHsKCQkJCSRzbWRfZGF0 ZVsnZXhweSddID0gc3RyZnRpbWUoJyVZJywgJHJvd1sndUV4cGlyZXMnXSk7CgkJCQkkc21k X2RhdGVbJ2V4cG0nXSA9IHN0cmZ0aW1lKCclbScsICRyb3dbJ3VFeHBpcmVzJ10pOwoJCQkJ JHNtZF9kYXRlWydleHBkJ10gPSAoaW50KXN0cmZ0aW1lKCclZCcsICRyb3dbJ3VFeHBpcmVz J10pOwoJCQkJJHNtZF9kYXRlWydleHB3J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9ybWF0 X3dpbignJVYnLCAkcm93Wyd1RXhwaXJlcyddKSwgJHJvd1sndUV4cGlyZXMnXSk7CgkJCQkk c21kX2RhdGVbJ2V4cGl5J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJUcn LCAkcm93Wyd1RXhwaXJlcyddKSwgJHJvd1sndUV4cGlyZXMnXSk7CgkJCX0KCQkJcG9wdWxh dGVBcnRpY2xlRGF0YSgkcm93KTsKCQkJJHRoaXNhcnRpY2xlWydpc19maXJzdCddID0gKCR0 aGlzcG9zdGVkICE9ICRsYXN0cG9zdGVkKTsKCQkJJHRoaXNhcnRpY2xlWydpc19sYXN0J10g PSAoJHRoaXNwb3N0ZWQgIT0gJG5leHRwb3N0ZWQpOwoJCQkkbGFzdHBvc3RlZCA9ICR0aGlz cG9zdGVkOwoJCQkkb3V0W10gPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3Jt KSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogaHJlZigkcm93WydQb3N0ZWQnXSwgcGVybWxpbmt1 cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpICk7CgkJCSRjdHIrKzsK CQl9Cgl9CglhcnRpY2xlX3BvcCgpOwoJcmV0dXJuIGRvV3JhcCgkb3V0LCAkd3JhcHRhZywg JGJyZWFrLCAkY2xhc3MpOwp9CgovLyBUcnkgYW5kIG91dHB1dCAibmljZSIgZGF0ZXMgdGhh dCByZWFkIHdlbGwgYWNyb3NzIG1vbnRoL3llYXIgYm91bmRhcmllcy4KLy8gRm9yIGV4YW1w bGU6IDI4IE1heSAtIDA1IEp1biAyMDExIG9yIE1heSAxMS0xNiAyMDExLCBkZXBlbmRpbmcg b24gZm9ybWF0CmZ1bmN0aW9uIHNtZF9ldmVudF9kdXJhdGlvbigkYXR0cykgewoJZXh0cmFj dChsQXR0cyhhcnJheSgKCQknc3RhcnQnICAgICA9PiBwb3N0ZWQoYXJyYXkoJ2Zvcm1hdCcg PT4gJyVzJykpLAoJCSdlbmQnICAgICAgID0+IGV4cGlyZXMoYXJyYXkoJ2Zvcm1hdCcgPT4g JyVzJykpLAoJCSdmb3JtYXQnICAgID0+ICclZCAlYiAlWScsCgkJJ3NlcGFyYXRvcicgPT4g JyAmbmRhc2g7ICcsCgkJJ2RlYnVnJyAgICAgPT4gMCwKCSksICRhdHRzKSk7CgoJLy8gRXh0 cmFjdCB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgb2YgdGhlIGZvcm1hdCBzbyB3ZSBjYW4gbXVj ayBhYm91dCB3aXRoIHRoZW0KCXByZWdfbWF0Y2hfYWxsKCcvXCUoW2RlamJCbWhnR3lZXSkv JywgJGZvcm1hdCwgJG1hdGNoZXMpOwoKCSRpbmRleGVzID0gYXJyYXkoJ2RheScgPT4gJycs ICdtb250aCcgPT4gJycsICd5ZWFyJyA9PiAnJyk7Cglmb3JlYWNoKCRtYXRjaGVzWzFdIGFz ICRpZHggPT4gJHRva2VuKSB7CgkJc3dpdGNoICgkdG9rZW4pIHsKCQkJY2FzZSAnZCc6CgkJ CWNhc2UgJ2UnOgoJCQljYXNlICdqJzoKCQkJCSRpbmRleGVzWydkYXknXSA9ICRpZHg7CgkJ CQlicmVhazsKCQkJY2FzZSAnYic6CgkJCWNhc2UgJ0InOgoJCQljYXNlICdtJzoKCQkJY2Fz ZSAnaCc6CgkJCQkkaW5kZXhlc1snbW9udGgnXSA9ICRpZHg7CgkJCQlicmVhazsKCQkJY2Fz ZSAnZyc6CgkJCWNhc2UgJ0cnOgoJCQljYXNlICd5JzoKCQkJY2FzZSAnWSc6CgkJCQkkaW5k ZXhlc1sneWVhciddID0gJGlkeDsKCQkJCWJyZWFrOwoJCX0KCX0KCgkkZGF5X2ZpcnN0ID0g KCRpbmRleGVzWydkYXknXSA8ICRpbmRleGVzWydtb250aCddKTsKCSR5ZWFyX2ZpcnN0ID0g KCRpbmRleGVzWyd5ZWFyJ10gPT0gMCk7CgkkaGFzX3llYXIgPSBmYWxzZTsKCglpZiAoJGVu ZCkgewoJCWlmIChzdHJmdGltZSgnJVkgJW0gJWQnLCAkc3RhcnQpID09IHN0cmZ0aW1lKCcl WSAlbSAlZCcsJGVuZCkpIHsKCQkJIC8vIGJlZ2luIGFuZCBlbmQgb24gc2FtZSBkYXkKCQkJ ICRzX2Zvcm1hdCA9ICcnOwoJCQkgJGVfZm9ybWF0ID0gJGZvcm1hdDsKCQkJICRoYXNfeWVh ciA9IHRydWU7CgkJIH0gZWxzZSB7CgkJCWlmIChzdHJmdGltZSgnJVknLCAkc3RhcnQpID09 IHN0cmZ0aW1lKCclWScsICRlbmQpKSB7CgkJCQkvLyBzYW1lIHllYXIKCQkJCWlmIChzdHJm dGltZSgnJW0nLCAkc3RhcnQpID09IHN0cmZ0aW1lKCclbScsICRlbmQpKSB7CgkJCQkJLy8g YW5kIHNhbWUgbW9udGgKCQkJCQkkcmUxID0gKCRkYXlfZmlyc3QpID8gJy9cJVtiQm1oZ0d5 WV0vJyA6ICcvXCVbZ0d5WV0vJzsKCQkJCQkkcmUyID0gKCRkYXlfZmlyc3QpID8gJy9cJVtn R3lZXS8nIDogJy9cJVtiQm1oZ0d5WV0vJzsKCQoJCQkJCSRzX2Zvcm1hdCA9IHRyaW0ocHJl Z19yZXBsYWNlKCRyZTEsICcnLCAkZm9ybWF0KSk7CgkJCQkJJGVfZm9ybWF0ID0gKCRyZTIp ID8gdHJpbShwcmVnX3JlcGxhY2UoJHJlMiwgJycsICRmb3JtYXQpKSA6ICRmb3JtYXQ7CgkJ CQl9IGVsc2UgewoJCQkJCS8vIG5vdCBzYW1lIG1vbnRoCgkJCQkJJHNfZm9ybWF0ID0gJGVf Zm9ybWF0ID0gdHJpbShwcmVnX3JlcGxhY2UoJy9cJVtnR3lZXS8nLCAnJywgJGZvcm1hdCkp OwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJLy8gZGlmZmVyZW50IHllYXIKCQkJCSRzX2Zvcm1h dCA9ICRlX2Zvcm1hdCA9ICRmb3JtYXQ7CgkJCQkkaGFzX3llYXIgPSB0cnVlOwoJCQl9CgkJ CSRzX2Zvcm1hdCAuPSAkc2VwYXJhdG9yOwoJCX0KCQoJCS8vIEFkZCB0aGUgeWVhciBiYWNr IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uCgkJJHNfZm9ybWF0ID0gKCRoYXNfeWVhcikgPyAk c19mb3JtYXQgOiAoKCR5ZWFyX2ZpcnN0KSA/ICRtYXRjaGVzWzBdWyRpbmRleGVzWyd5ZWFy J11dIC4gJyAnIC4gJHNfZm9ybWF0IDogJHNfZm9ybWF0KTsKCQkkZV9mb3JtYXQgPSAoJGhh c195ZWFyKSA/ICRlX2Zvcm1hdCA6ICgoJHllYXJfZmlyc3QpID8gJGVfZm9ybWF0IDogJGVf Zm9ybWF0IC4gJyAnIC4gJG1hdGNoZXNbMF1bJGluZGV4ZXNbJ3llYXInXV0pOwoJfSBlbHNl IHsKCQkkc19mb3JtYXQgPSAkZm9ybWF0OwoJCSRlX2Zvcm1hdCA9Jyc7Cgl9CgoJcmV0dXJu ICgoJHNfZm9ybWF0KSA/IHN0cmZ0aW1lKCRzX2Zvcm1hdCwgJHN0YXJ0KSA6ICcnKSAuICgo JGVfZm9ybWF0KSA/IHN0cmZ0aW1lKCRlX2Zvcm1hdCwgJGVuZCkgOiAnJyk7Cn0KCi8vIEFu IHVub3B0aW1pemVkIHdvcmthcm91bmQgd2hlbiAiJVYiIGFuZCAiJUciIGZhaWxzICh1c3Vh bGx5IG9uIFdpbmRvd3MpCi8vIEFsZ29yaXRobSBhZGFwdGVkIGZyb20gaHR0cDovL3d3dy5w ZXJzb25hbC5lY3UuZWR1L21jY2FydHlyL0lTT3dkQUxHLnR4dCB3aXRoIHRoYW5rcy4KLy8g QWxsIG90aGVyIHNob3J0Y3V0IGFsZ29yaXRobXMgZmFpbGVkIGVkZ2UgY2FzZXMKZnVuY3Rp b24gc21kX2NhbF9pc29fd2VlaygkZm9ybWF0PSclVicsICR0aW1lID0gbnVsbCkgewoJaWYg KCEkdGltZSkgJHRpbWUgPSB0aW1lKCk7CgkKCSR5ciA9IHN0cmZ0aW1lKCIlWSIsICR0aW1l KTsKCSRsZWFwID0gKCAoICgkeXIgJSA0ID09IDApICYmICgkeXIgJSAxMDAgIT0gMCkgKSB8 fCAkeXIgJSA0MDAgPT0gMCApOwoJJGxlYXBfcHJldiA9ICggKCAoKCR5ci0xKSAlIDQgPT0g MCkgJiYgKCgkeXItMSkgJSAxMDAgIT0gMCkgKSB8fCAoJHlyLTEpICUgNDAwID09IDAgKTsK CSRkYXlfb2ZfeWVhciA9IHN0cmZ0aW1lKCclaicsICR0aW1lKTsKCgkvLyBGaW5kIHRoZSB3 ZWVrZGF5IG9mIEphbiAxc3QgaW4gdGhlIGdpdmVuIHllYXIKCSR5eSA9ICgkeXIgLSAxKSAl IDEwMDsKCSRjID0gKCR5ciAtIDEpIC0gJHl5OwoJJGcgPSAkeXkgKyAoJHl5IC8gNCk7Cgkk amFuMXdlZWtkYXkgPSAxICsgKCgoKCgkYyAvIDEwMCkgJSA0KSAqIDUpICsgJGcpICUgNyk7 CgoJLy8gRmluZCB3ZWVrZGF5ICggY291bGQgdXNlOiAkd2Vla2RheSA9IHN0cmZ0aW1lKCcl dScsICR0aW1lKTsgKQoJJGggPSAkZGF5X29mX3llYXIgKyAoJGphbjF3ZWVrZGF5IC0gMSk7 Cgkkd2Vla2RheSA9IDEgKyAoICgkaCAtIDEpICUgNyk7CgoJLy8gRmluZCBpZiAkdGltZSBm YWxscyBpbiBpc29feWVhciBZLTEsIGlzb193ZWVrIDUyIG9yIDUzCglpZiAoKCRkYXlfb2Zf eWVhciA8PSAoOCAtICRqYW4xd2Vla2RheSkpICYmICRqYW4xd2Vla2RheSA+IDQpIHsKCQkk aXNvX3llYXIgPSAkeXIgLSAxOwoJCWlmICgkamFuMXdlZWtkYXkgPT0gNSB8fCAoJGphbjF3 ZWVrZGF5ID09IDYgJiYgJGxlYXBfcHJldikpIHsKCQkJJGlzb193ZWVrID0gNTM7CgkJfSBl bHNlIHsKCQkJJGlzb193ZWVrID0gNTI7CgkJfQogICB9IGVsc2UgewoJCSRpc29feWVhciA9 ICR5cjsKCX0KCgkvLyBGaW5kIGlmICR0aW1lIGZhbGxzIGluIGlzb195ZWFyIFkrMSwgaXNv X3dlZWsgMQoJaWYgKCRpc29feWVhciA9PSAkeXIpIHsKCQkkaWR4ID0gKCRsZWFwKSA/IDM2 NiA6IDM2NTsKCQlpZiAoICgkaWR4IC0gJGRheV9vZl95ZWFyKSA8ICg0IC0gJHdlZWtkYXkp ICkgewoJCQkkaXNvX3llYXIgPSAkeXIgKyAxOwoJCQkkaXNvX3dlZWsgPSAxOwoJCX0KCX0K CgkvLyBGaW5kIGlmICR0aW1lIGZhbGxzIGluIGlzb195ZWFyIFksIGlzb193ZWVrIDEgdGhy dSA1MwoJaWYgKCRpc29feWVhciA9PSAkeXIpIHsKCQkkamR4ID0gJGRheV9vZl95ZWFyICsg KDcgLSAkd2Vla2RheSkgKyAoJGphbjF3ZWVrZGF5IC0gMSk7CgkJJGlzb193ZWVrID0gJGpk eCAvIDc7CgkJaWYgKCRqYW4xd2Vla2RheSA+IDQpIHsKCQkJJGlzb193ZWVrLS07CgkJfQoJ fQoKCS8vIFJlcGxhY2VtZW50IGFycmF5CgkkcmVwcyA9IGFycmF5KAoJCSclVicgPT4gc3Ry X3BhZCgkaXNvX3dlZWssIDIsICcwJywgU1RSX1BBRF9MRUZUKSwKCQknJUcnID0+ICRpc29f eWVhciwKCQknJWcnID0+IHN1YnN0cigkaXNvX3llYXIsIDIpLAoJKTsKCXJldHVybiBzdHJ0 cigkZm9ybWF0LCAkcmVwcyk7Cn0KCi8vIEFkYXB0ZWQgZnJvbTogaHR0cDovL3BocC5uZXQv bWFudWFsL2VuL2Z1bmN0aW9uLnN0cmZ0aW1lLnBocApmdW5jdGlvbiBzbWRfY2FsX3JlZm9y bWF0X3dpbigkZm9ybWF0LCAkdHMgPSBudWxsKSB7CgkvLyBPbmx5IFdpbiBwbGF0Zm9ybXMg bmVlZCBhcHBseQoJaWYgKCFpc193aW5kb3dzKCkpIHJldHVybiAkZm9ybWF0OwoJaWYgKCEk dHMpICR0cyA9IHRpbWUoKTsKCgkkbWFwcGluZyA9IGFycmF5KAoJCSclQycgPT4gc3ByaW50 ZigiJTAyZCIsIGRhdGUoIlkiLCAkdHMpIC8gMTAwKSwKCQknJUQnID0+ICclbS8lZC8leScs CgkJJyVlJyA9PiBzcHJpbnRmKCIlJyAyZCIsIGRhdGUoImoiLCAkdHMpKSwKCQknJUYnID0+ ICclWS0lbS0lZCcsCgkJJyVnJyA9PiBzbWRfY2FsX2lzb193ZWVrKCclZycsICR0cyksCgkJ JyVHJyA9PiBzbWRfY2FsX2lzb193ZWVrKCclRycsICR0cyksCgkJJyVoJyA9PiAnJWInLAoJ CSclbCcgPT4gc3ByaW50ZigiJScgMmQiLCBkYXRlKCJnIiwgJHRzKSksCgkJJyVuJyA9PiAi XG4iLAoJCSclUCcgPT4gZGF0ZSgnYScsICR0cyksCgkJJyVyJyA9PiBkYXRlKCJoOmk6cyIs ICR0cykgLiAiICVwIiwKCQknJVInID0+IGRhdGUoIkg6aSIsICR0cyksCgkJJyVzJyA9PiBk YXRlKCdVJywgJHRzKSwKCQknJXQnID0+ICJcdCIsCgkJJyVUJyA9PiAnJUg6JU06JVMnLAoJ CScldScgPT4gKCR3ID0gZGF0ZSgidyIsICR0cykpID8gJHcgOiA3LAoJCSclVicgPT4gc21k X2NhbF9pc29fd2VlaygnJVYnLCAkdHMpLAoJKTsKCSRmb3JtYXQgPSBzdHJfcmVwbGFjZSgK CQlhcnJheV9rZXlzKCRtYXBwaW5nKSwKCQlhcnJheV92YWx1ZXMoJG1hcHBpbmcpLAoJCSRm b3JtYXQKCSk7CgoJcmV0dXJuICRmb3JtYXQ7Cn0KCi8vIEZpbmQgaWYgdGhlIGhheXN0YWNr IGNvbnRhaW5zIG9uZSBvZiB0aGUgdmFsdWVzIGluIG5lZWRsZS4gSXMgdGhlcmUgYSBjbGV2 ZXJlciB3YXkgdG8gZG8gdGhpcz8KZnVuY3Rpb24gc21kX2NhbF9pbl9hcnJheSgkbmVlZGxl LCAkaGF5c3RhY2spIHsKCWZvcmVhY2ggKCRoYXlzdGFjayBhcyAkdmFsKSB7CgkJaWYgKGlu X2FycmF5KCR2YWwsICRuZWVkbGUpKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCXJldHVy biBmYWxzZTsKfQoKLy8gQ2hlY2sgdGhlIHBhc3NlZCB0aW1lc3RhbXAgYWdhaW5zdCBldmVy eSB0aW1lIHJlc3RyaWN0aW9uIGFuZCByZXR1cm4gdHJ1ZSBpZiBpdCBwYXNzZXMgdGhlbSBh bGwKZnVuY3Rpb24gc21kX2luY2x1ZGVfZXZlbnQoJHRzLCAkbm93LCAkaWduLCAkdGltZSwg JGZyb20sICR0bywgJG1vbnRoKSB7Cgkkc2hvdyA9IGFycmF5KCk7Cgkkc2hvd1tdID0gIWlu X2FycmF5KGRhdGUoImQtTS1ZIiwgJHRzKSwgJGlnbik7CgkkdGltZSA9IGRvX2xpc3QoJHRp bWUpOwoJJHNob3dvciA9IGZhbHNlOwoJZm9yZWFjaCgkdGltZSBhcyAkdG0pIHsKCQlzd2l0 Y2goJHRtKSB7CgkJCWNhc2UgImFueSI6CgkJCQkkc2hvd29yID0gdHJ1ZTsKCQkJCWJyZWFr OwoJCQljYXNlICJmdXR1cmUiOgoJCQkJJHNob3dvciA9ICRzaG93b3IgfHwgKCgkdHMgPiAk bm93KSA/IHRydWUgOiBmYWxzZSk7CgkJCQlicmVhazsKCQkJY2FzZSAidG9kYXkiOgoJCQkJ JHNob3dvciA9ICRzaG93b3IgfHwgKCgkdHMgPj0gc3RydG90aW1lKGRhdGUoJ1ktbS1kIDAw OjAwOjAwJywgJG5vdykpICYmICR0cyA8PSBzdHJ0b3RpbWUoZGF0ZSgnWS1tLWQgMjM6NTk6 NTknLCAkbm93KSkpID8gdHJ1ZSA6IGZhbHNlKTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0IDoK CQkJCSRzaG93b3IgPSAkc2hvd29yIHx8ICgoJHRzIDwgJG5vdykgPyB0cnVlIDogZmFsc2Up OwoJCQkJYnJlYWs7CgkJfQoJfQoJJHNob3dbXSA9ICRzaG93b3I7CglpZiAoJGZyb20pIHsg JHNob3dbXSA9ICgkdHMgPj0gc2FmZV9zdHJ0b3RpbWUoJGZyb20pKSA/IHRydWUgOiBmYWxz ZTsgfQoJaWYgKCR0bykgeyAkc2hvd1tdID0gKCR0cyA8PSBzYWZlX3N0cnRvdGltZSgkdG8p KSA/IHRydWUgOiBmYWxzZTsgfQoJaWYgKCRtb250aCkgeyAkc2hvd1tdID0gKGRhdGUoIlkt bSIsICR0cykgPT0gJG1vbnRoKSA/IHRydWUgOiBmYWxzZTsgfQoKCXJldHVybiAoIWluX2Fy cmF5KDAsICRzaG93KSkgPyB0cnVlIDogZmFsc2U7Cn0KCi8vIENvbnZlcnQgZGF0ZSByYW5n ZXMgbGlrZSAyNC1PY3QtMDggPT4gNS1Ob3YtMDggdG8gYW4gYXJyYXkgb2YgZGlzY3JldGUg ZGF0ZSBlbnRpdGllcwovLyBBbHNvLCB3ZWVrZGF5IHZhbHMgc3VjaCBhcyB7U3VuOk1vbjpX ZWR9IHdvdWxkIHJldHVybiB0aG9zZSBkYXlzIGJldHdlZW4gJHN0YXJ0IGFuZCAkZW5kCmZ1 bmN0aW9uIHNtZF9leHBhbmRfZGF0ZXJhbmdlKCRyYW5nZSwgJHN0YXJ0PScnLCAkZW5kPScn LCAkZm10PSclcycpIHsKCSRvdXQgPSBhcnJheSgpOwoJJHJuZyA9IGRvX2xpc3QoJHJhbmdl LCAiPT4iKTsKCglpZiAoY291bnQoJHJuZykgPiAxKSB7CgkJLy8gUmFuZ2UgZXhwYW5zaW9u CgkJJGRpZmYgPSBzYWZlX3N0cnRvdGltZSgkcm5nWzFdKSAtIHNhZmVfc3RydG90aW1lKCRy bmdbMF0pOwoJCSRkaWZmZGF5cyA9IGNlaWwoJGRpZmYgLyAoNjAqNjAqMjQpKTsgLy8gZGF5 cyBiZXR3ZWVuIGRhdGVzCgkJZm9yICgkamR4ID0gMDsgJGpkeCA8PSAkZGlmZmRheXM7ICRq ZHgrKykgewoJCQkkb3V0W10gPSBzYWZlX3N0cmZ0aW1lKCRmbXQsIHNhZmVfc3RydG90aW1l KCRybmdbMF0gLiAoKCRqZHg9PTApID8gJycgOiAnKycuJGpkeC4nIGRheXMnKSkpOwoJCX0K CX0gZWxzZSBpZiAoJHN0YXJ0ICYmICRlbmQgJiYgc3RycG9zKCRyYW5nZSwgJ3snKSA9PT0g MCAmJiBzdHJwb3MoJHJhbmdlLCAnfScpID09PSBzdHJsZW4oJHJhbmdlKS0xKSB7CgkJLy8g RGF5IG9mIHdlZWsgZXhwYW5zaW9uCgkJJGRheXMgPSBkb19saXN0KHRyaW0oJHJhbmdlLCd7 fScpLCAnOicpOwoJCSRkaWZmZGF5cyA9IGNlaWwoKCRlbmQtJHN0YXJ0KSAvICg2MCo2MCoy NCkpOwoJCWZvciAoJGpkeCA9IDA7ICRqZHggPD0gJGRpZmZkYXlzOyAkamR4KyspIHsKCQkJ JHRtID0gJHN0YXJ0ICsgKCRqZHgqNjAqNjAqMjQpOwoJCQlpZiAoaW5fYXJyYXkoZGF0ZSgn RCcsICR0bSksICRkYXlzKSkgewoJCQkJJG91dFtdID0gc2FmZV9zdHJmdGltZSgkZm10LCAk dG0pOwoJCQl9CgkJfQoJfSBlbHNlIHsKCQkvLyBTaW5nbGUgZGF0ZQoJCSRvdXRbXSA9IHNh ZmVfc3RyZnRpbWUoJGZtdCwgc2FmZV9zdHJ0b3RpbWUoJHJuZ1swXSkpOwoJfQoJcmV0dXJu ICRvdXQ7Cn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToi ZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxwIjtzOjY0Mjk3OiI8ZGl2IGlkPSJzbWRfaGVscCI+ CgoJPGgxPnNtZF9jYWxlbmRhcjwvaDE+CgoJPHA+UmVuZGVyIGEgY2FsZW5kYXIgd2l0aCBv bmUgb3IgbW9yZSBhcnRpY2xlcyBhcyBldmVudHMgb24gZWFjaCBkYXkuIFVzZWZ1bCBmb3Ig Z2lnIGd1aWRlcywgJiM4MjIwO3doYXQmIzgyMTc7cyBvbiYjODIyMTsgb3Igc2NoZWR1bGlu ZyBhcHBzLjwvcD4KCgk8aDI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+RnVsbC1zaXpl IC8gbWluaSA8YSBocmVmPSIjc21kY2FsIj5jYWxlbmRhcjwvYT4gYnkgbW9udGgsIHdpdGgg PHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBzdXBwb3J0PC9saT4KCQk8bGk+ TmF2OiBuZXh0L3ByZXYgbW9udGggb3IgbW9udGgveWVhciBkcm9wZG93bi4gWWVhciByYW5n ZSBjYW4gYmUgZnJvbSBmaXJzdC9sYXN0IGFydGljbGUgb3IgKy8tIE4geWVhcnM8L2xpPgoJ CTxsaT5PbmUgYXJ0aWNsZSA9IG9uZSBldmVudCwgbmF0aXZlIHRvIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+OiBwb3N0ZWQgZGF0ZSA9IHRoZSBkYXRlIGl0IGFwcGVhcnMgaW4g dGhlIGNhbGVuZGFyIChvdmVycmlkZWFibGUpPC9saT4KCQk8bGk+RmlsdGVyIGV2ZW50cyBi eSBjYXQgLyBzZWN0aW9uIC8gYXV0aG9yIC8gc3RhdHVzIC8gdGltZSAvIGV4cGlyeTwvbGk+ CgkJPGxpPlNwZWNpZnkgZXZlbnQgZnJlcXVlbmN5IGluIGN1c3RvbSBmaWVsZCAoMSB3ZWVr IC8gMTAgZGF5cyAvIDMgbW9udGhzIC8gZXRjKTwvbGk+CgkJPGxpPkN1c3RvbSBmaWVsZHMg Zm9yIGluL2V4Y2x1c2lvbnMgKGRhdGVzIG9uIHdoaWNoIGFuIGV2ZW50IGlzIChyZSlzY2hl ZHVsZWQvY2FuY2VsbGVkL29taXR0ZWQpPC9saT4KCQk8bGk+TXVsdGktZGF5IHNwYW5uZWQg ZXZlbnRzIGJhc2VkIG9uIGFydGljbGUgZXhwaXJ5PC9saT4KCQk8bGk+RGlzcGxheSBmdXR1 cmUsIGV4cGlyZWQgb3Igc3RpY2t5IGV2ZW50czwvbGk+CgkJPGxpPkhvbGlkYXlzIHBlci1j YWxlbmRhcjwvbGk+CgkJPGxpPlBhc3MgZWFjaCBldmVudCB0byBhIGZvcm0vY29udGFpbmVy LiBTcGFubmVkIGFuZC9vciByZWN1cnJpbmcgZXZlbnRzIGNhbiBiZSBzZW50IHRvIGEgc2Vw YXJhdGUgZm9ybS4gQ2VsbCBmb3JtYXQgYWxzbyBjdXN0b21pc2FibGU8L2xpPgoJCTxsaT48 YSBocmVmPSIjaWZjYWwiPkNvbmRpdGlvbmFsPC9hPiB0ZXN0cyBmb3IgZmxhZ3MgYW5kIGRh dGVzIHNvIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gbG9naWM8L2xpPgoJCTxsaT5UYWJsZS0s IHJvdy0sIGNlbGwtLCBhbmQgZXZlbnQtbGV2ZWwgY2xhc3NlcyBmb3IgaW5kaWNhdGluZyBk aWZmZXJlbnQgc2NlbmFyaW9zPC9saT4KCQk8bGk+VGFncyB0byA8YSBocmVmPSIjYXJ0ZXYi PmRpc3BsYXkgcmVjdXJyaW5nIGV2ZW50czwvYT4gOyBldmVudC9jYWxlbmRhciA8YSBocmVm PSIjY2FsaW5mbyI+Y2hhcmFjdGVyaXN0aWNzPC9hPiA7IG9yIHRoZSA8YSBocmVmPSIjY2Fs bm93Ij5jdXJyZW50IGRhdGUvdGltZTwvYT48L2xpPgoJPC91bD4KCgk8aDI+QXV0aG9yIC8g Y3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRh Y3QiPlN0ZWYgRGF3c29uPC9hPi4gSm9pbnRseSBmdW5kZWQgYnkgZ2VuZXJvdXMgZG9uYXRv cnM6IG1yZGFsZSwgd29vZiwgamFrb2IsIHJlbm9iaXJkIGFuZCBqb2ViYWljaC4gT3JpZ2lu YWxseSBiYXNlZCBvbiBtZHBfY2FsZW5kYXIuIEFsbCBwcm9wcyB0byB0aGUgb3JpZ2luYWwg YXV0aG9yLCBhbmQgb2YgY291cnNlIHRoZSBjbGFzcyB1cG9uIHdoaWNoIHRoZSBjYWxlbmRh ciBpcyBiYXNlZC48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9o Mj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyBUZXh0cGF0dGVybiA0LjQuMCs8 L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRw Oi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTA1Mi9zbWRfY2FsZW5kYXIiPnRleHRwYXR0 ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ci PnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbi0mZ3Q7UGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFu ZCBlbmFibGUgdGhlIHBsdWdpbi4gQ3JlYXRlIGFueSBuZWVkZWQgPGEgaHJlZj0iI2ZsZGF0 dHMiPmN1c3RvbSBmaWVsZHM8L2E+LiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI5Mzc1Ij5mb3J1bSB0aHJlYWQ8 L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVy d2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9t IHRoZSBBZG1pbi0mZ3Q7UGx1Z2lucyBwYWdlLjwvcD4KCgk8aDI+TmFtaW5nIGNvbnZlbnRp b248L2gyPgoKCTxwPlRoZSBjb3JlIG9mIHRoZSBwbHVnaW4gaXMgdGhlIHNtZF9jYWxlbmRh ciB0YWcsIHdoaWNoIHJlbmRlcnMgYSBzdGFuZGFyZCBjYWxlbmRhci4gRWFjaCBjZWxsIGNv bnRhaW5zIG9uZSBvciBtb3JlIGV2ZW50cyB0aGF0IG9jY3VyIG9uIHRoYXQgZGF5LiBCZWZv cmUgZGl2aW5nIGludG8gdGhlIHRhZ3MgaGVyZSBhcmUgdGhlIGJhc2ljczo8L3A+CgoJPHVs PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2FsaWQ8L3NwYW4+IDogeW91IG1heSBwdXQg bW9yZSB0aGFuIG9uZSBjYWxlbmRhciBvbiBhIHBhZ2U6IGVhY2ggY2FuIGJlIHVuaXF1ZWx5 IHJlZmVyZW5jZWQgd2l0aCBhIGNhbGVuZGFyIElEIHNvIHRoZXkgbWF5IGJlIGNvbnRyb2xs ZWQgaW5kZXBlbmRlbnRseTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudDwv c3Bhbj4gOiBhbiBhcnRpY2xlLiBBbnkgYXJ0aWNsZSB3cml0dGVuIGluIHRoZSBnaXZlbiBz ZWN0aW9uKHMpIHdpbGwgYXBwZWFyIG9uIHRoZSBjYWxlbmRhciBhcyBsb25nIGFzIGl0cyBl eHBpcnkgaGFzbiYjODIxNzt0IGJlZW4gbWV0LiBNb3JlIHRoYW4gb25lIGV2ZW50IG1heSBh cHBlYXIgaW4gZWFjaCBjZWxsPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50 IGZsYWc8L3NwYW4+IDogZXZlbnRzIGNhbiBlaXRoZXIgYmUgPGEgaHJlZj0iI2V2ZW50cyI+ c3RhbmRhcmQ8L2E+LCB0aGV5IGNhbiA8YSBocmVmPSIjcmVjdXIiPnJlY3VyPC9hPiwgdGhl eSBjYW4gc3BhbiA8YSBocmVmPSIjbXVsdGkiPm11bHRpcGxlPC9hPiBkYXlzLCBkYXRlcyBj YW4gYmUgPGEgaHJlZj0iI2NhbmNlbCI+dW5zY2hlZHVsZWQgb3Igb21pdHRlZDwvYT4gZnJv bSB0aGUgY2FsZW5kYXIsIG9yIDxhIGhyZWY9IiNleHRyYSI+ZXh0cmE8L2E+IGRhdGVzIGNh biBiZSBhZGRlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jZWxsIGZsYWc8L3Nw YW4+IDogYSBzZXJpZXMgb2YgZmxhZ3MgYXJlIHVzZWQgdG8gbGFiZWwgZWFjaCBjZWxsIGFj Y29yZGluZyB0byB3aGF0IGl0IGNvbnRhaW5zLiBDZWxscyBjYW4gZWl0aGVyIGJlIGVtcHR5 IChpLmUuIG5vIGRhdGU6IHRoZSBmaWxsZXIgY2VsbHMgYXQgdGhlIHN0YXJ0L2VuZCBvZiB0 aGUgbW9udGgpLCB0aGV5IGNhbiBiZSBhIHJlZ3VsYXIgZGF5IChubyBmbGFnKSwgdGhleSBj YW4gY29udGFpbiBhbiBldmVudCwgb3IgbWF5IGJlIGEgPGEgaHJlZj0iI2hvbGlkYXlzIj5o b2xpZGF5PC9hPjwvbGk+Cgk8L3VsPgoKCTxwPkZsYWdzIHByb3ZpZGUgaW5mb3JtYXRpb24g PGVtPmFib3V0PC9lbT4gdGhlIGNlbGwgLyBldmVudCAgJiM4MjEyOyBhbmQgY2FuIGJlIHRl c3RlZCB3aXRoIHRoZSBjb25kaXRpb25hbCB0YWcgJiM4MjEyOyB3aGlsZSB0aGUgY29ycmVz cG9uZGluZyBjbGFzcyBuYW1lcyBhcmUganVzdCB0aGVyZSBmb3IgeW91ciA8c3BhbiBjbGFz cz0iY2FwcyI+Q1NTPC9zcGFuPiB1c2UuPC9wPgoKCTxwPldoZW4gYXNzaWduZWQgYXMgY2xh c3NlcywgZmxhZ3MgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGFrZSB0aGUgJiM4MjE2O2Ns YXNzJiM4MjE3OyBwcmVmaXggKGkuZS4gdGhlIDFzdCBpdGVtIGdpdmVuIGluIHNtZF9jYWxl bmRhciYjODIxNztzIDxjb2RlPmNsYXNzcHJlZml4ZXM8L2NvZGU+IGF0dHJpYnV0ZSkgJiM4 MjEyOyB3aGV0aGVyIHRoZXkgYXBwZWFyIGF0IHRoZSA8ZW0+ZXZlbnQ8L2VtPiBvciA8ZW0+ Y2VsbDwvZW0+IGxldmVscy4gVGhlIG9ubHkgY2xhc3NlcyB0aGF0IHRha2UgdGhlIG9wdGlv bmFsIDJuZCAmIzgyMTY7ZXZlbnQmIzgyMTc7IHByZWZpeCBhcmUgdGhlIGZpZWxkcyB5b3Ug c3BlY2lmeSBpbiB0aGUgPGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPiBhdHRyaWJ1dGUuPC9w PgoKCTxoMiBpZD0iZXZlbnRzIj5TdGFuZGFyZCBjZWxscyBhbmQgZXZlbnRzPC9oMj4KCgk8 cD5UaGUgZm9sbG93aW5nIGN1bXVsYXRpdmUgbmFtaW5nIHJ1bGVzIGFwcGx5OjwvcD4KCgk8 dWw+CgkJPGxpPk5vcm1hbCAoZGF5KSBjZWxscyBkb24mIzgyMTc7dCBoYXZlIGEgY2xhc3Mg YXNzaWduZWQgdG8gdGhlbSB1bmxlc3MgeW91IHNwZWNpZnkgb25lIHdpdGggPGNvZGU+Y2Vs bGNsYXNzPC9jb2RlPjwvbGk+CgkJPGxpPkFueSBjZWxsIHRoYXQgY29udGFpbnMgYW4gZXZl bnQgKG9mIGFueSB0eXBlKSBpcyBmbGFnZ2VkIGFzIGFuIDxjb2RlPmV2ZW50PC9jb2RlPjwv bGk+CgkJPGxpPkFueSBjZWxsIHRoYXQgZmFsbHMgb24gYSBob2xpZGF5IGlzIGdpdmVuIHRo ZSBmbGFnIDxjb2RlPmhvbHM8L2NvZGU+PC9saT4KCQk8bGk+VGhlIGN1cnJlbnQgZGF5IGlz IGdpdmVuIHRoZSBmbGFnIDxjb2RlPnRvZGF5PC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPkEg c2luZ2xlIGV2ZW50IChha2EgYXJ0aWNsZSkgd2l0aCBhIFBvc3RlZCBkYXRlIHdpbGwgYmUg ZmxhZ2dlZCA8Y29kZT5zdGFuZGFyZDwvY29kZT4sIHVubGVzcyBpdCByZWN1cnMgb3Igc3Bh bnMgbW9yZSB0aGFuIG9uZSBkYXkuPC9wPgoKCTxoMiBpZD0icmVjdXIiPlJlY3VycmluZyBl dmVudHM8L2gyPgoKCTxwPklmIHlvdSBoYXZlIG5vbWluYXRlZCBhIGZpZWxkIGFzIHlvdXIg PGNvZGU+c3RlcGZpZWxkPC9jb2RlPiB5b3UgbWF5IGVudGVyIGEgY29tbWEtc2VwYXJhdGVk IGxpc3Qgb2YgZnJlcXVlbmNpZXMgYXQgd2hpY2ggdGhlIGV2ZW50IGlzIHRvIHJlcGVhdC4g VGhlIGZvcm1hdCBvZiB0aGUgcmVwZXRpdGlvbiBpcyA8c3Ryb25nPm51bWJlciBpbnRlcnZh bDwvc3Ryb25nPiwgZS5nLiA8Y29kZT40IHdlZWtzPC9jb2RlPiBvciA8Y29kZT4xMCBkYXlz PC9jb2RlPiBvciA8Y29kZT42IG1vbnRoczwvY29kZT4uIFRoZSBwbHVnaW4gd2lsbCBkbyBp dHMgYmVzdCB0byBmaWd1cmUgb3V0IHdoYXQgeW91IG1lYW4uIFNlZSA8YSBocmVmPSJodHRw Oi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyL21hbnVhbC9odG1sX25vZGUvRGF0ZS1pbnB1 dC1mb3JtYXRzLmh0bWwiPmRhdGUgaW5wdXQgZm9ybWF0czwvYT4gZm9yIG1vcmUuPC9wPgoK CTxwPkEgZmV3IHBvaW50czo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5zZWNvbmQgdHVlc2Rh eTwvY29kZT4gd2lsbCBzaG93IGFuIGV2ZW50IDxlbT5ldmVyeTwvZW0+IDJuZCBUdWVzZGF5 IGZyb20gdGhlIHN0YXJ0IGRhdGUgKGkuZS4gZm9ydG5pZ2h0bHkpPC9saT4KCQk8bGk+PGNv ZGU+c2Vjb25kIHR1ZXNkYXkgP21vbnRoID95ZWFyPC9jb2RlPiB3aWxsIHN1YnN0aXR1dGUg dGhlIGN1cnJlbnQgbW9udGggYW5kIHllYXIgaW4gZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0 ZSB0aGUgZGF0ZSwgcmVzdWx0aW5nIGluIHRoZSBldmVudCBvbmx5IHJlY3VycmluZyBvbiB0 aGUgMm5kIFR1ZXNkYXkgb2YgZWFjaCBtb250aC4gWW91IDxzdHJvbmc+bXVzdDwvc3Ryb25n PiB1c2UgYm90aCA8Y29kZT4/bW9udGg8L2NvZGU+IGFuZCA8Y29kZT4/eWVhcjwvY29kZT4g aWYgeW91IGNob29zZSB0aGlzIHR5cGUgb2YgZGF0ZSBvciB5b3VyIGV2ZW50IHdvbiYjODIx Nzt0IGFwcGVhcjwvbGk+CgkJPGxpPjxjb2RlPjIwID9tb250aDwvY29kZT4gd2lsbCBzaG93 IHRoZSBldmVudCBvbiB0aGUgMjB0aCBvZiBldmVyeSBtb250aDwvbGk+CgkJPGxpPnRoaW5n cyBsaWtlIDxjb2RlPmZpcnN0IHRodXJzZGF5PC9jb2RlPiBvciA8Y29kZT5sYXN0IGZyaWRh eTwvY29kZT4gb3IgPGNvZGU+dGhpcyB0dWVzZGF5PC9jb2RlPiBkb24mIzgyMTc7dCBuZWVk IHRoZSA8Y29kZT4/bW9udGg8L2NvZGU+IG9yIDxjb2RlPj95ZWFyPC9jb2RlPiBiZWNhdXNl IHRoZXkgY2FuIDxlbT5vbmx5PC9lbT4gb2NjdXIgbW9udGhseSwgYW5kIHdpbGwgb25seSBz aG93IHRoZSBldmVudCBvbiB0aGUgZ2l2ZW4gZGF5IG9mIHRoZSBtb250aDwvbGk+Cgk8L3Vs PgoKCTxwPklmIHlvdSBjYW4gZmluZCBhIHVzZSBmb3IgaXQsIHlvdSBtYXkgc3BlY2lmeSBt dWx0aXBsZSBmcmVxdWVuY2llcywgZm9yIGV4YW1wbGUgPGNvZGU+MyBkYXlzLCAxIHdlZWs8 L2NvZGU+LiBUaGF0IG1lYW5zIHlvdSB3b3VsZCBzZWUgdGhlIGV2ZW50IG9uIHRoZSAxc3Qg ZGF5LCB0aGVuIHRoZSAzcmQsIDZ0aCwgN3RoLCA5dGgsIDEydGgsIDE0dGgsIDE1dGgsIDE4 dGgsIDIxc3QsIDI0dGgmIzgyMzA7IGRheXMgdGhlcmVhZnRlci4gTm90ZSB0aGF0IHRoZSBl dmVudCBvbmx5IG9jY3VycyBvbmNlIG9uIHRoZSAyMXN0IGRheSBldmVuIHRob3VnaCB0aGUg dHdvIGZyZXF1ZW5jaWVzIGNsYXNoLjwvcD4KCgk8cD5SZWN1ciBydWxlczo8L3A+CgoJPHVs PgoJCTxsaT5UaGUgcmVwZXRpdGlvbiB3aWxsIGNvbnRpbnVlIGZvcmV2ZXI8c3VwIGlkPSJm bnJldjE0ODMwMDg4Mzk0ZGQyMzg0ZWRhZDcyIiBjbGFzcz0iZm9vdG5vdGUiPjxhIGhyZWY9 IiNmbjE0ODMwMDg4Mzk0ZGQyMzg0ZWRhZDcyIj4xPC9hPjwvc3VwPiB1bmxlc3MgeW91IHNw ZWNpZnkgYW4gZXhwaXJ5IHRpbWU8L2xpPgoJCTxsaT5UaGUgdmVyeSBmaXJzdCBldmVudCBv ZiBhIHJlY3VycmluZyBzZXQgd2lsbCBiZSBmbGFnZ2VkIHdpdGggPGNvZGU+cmVjdXJmaXJz dDwvY29kZT48L2xpPgoJCTxsaT5FYWNoIGZvbGxvd2luZyBjZWxsIHRoYXQgY29udGFpbnMg YSByZWN1cnJpbmcgZXZlbnQgd2lsbCBiZSBmbGFnZ2VkIHdpdGggPGNvZGU+cmVjdXI8L2Nv ZGU+PC9saT4KCQk8bGk+Qm90aCBmbGFncyBhcmUgYXBwbGllZCB0byB0aGUgZXZlbnQgYXMg Y2xhc3NlcyB1c2luZyB0aGUgY2xhc3MgcHJlZml4PC9saT4KCQk8bGk+UmVwZWF0ZWQgZXZl bnRzIG1heSBiZSA8YSBocmVmPSIjY2FuY2VsIj5jYW5jZWxsZWQgb3Igb21pdHRlZDwvYT4g b24gYSBwZXItZGF0ZSBiYXNpczwvbGk+Cgk8L3VsPgoKCTxwIGNsYXNzPSJzbWFsbCIgaWQ9 ImZuMTQ4MzAwODgzOTRkZDIzODRlZGFkNzIiPjxzdXA+MTwvc3VwPiAmIzgyMTY7Zm9yZXZl ciYjODIxNzsgaXMgbGltaXRlZCB0byA5OTk5OSByZWN1cnJlbmNlcyBwZXIgZXZlbnQsIG9y IDI3NCB5ZWFycyYjODIxNzsgd29ydGggb2YgZGFpbHkgZXZlbnRzLiBFaXRoZXIgPHNwYW4g Y2xhc3M9ImNhcHMiPlVOSVg8L3NwYW4+IHdpbGwgcnVuIG91dCBvZiBkYXRlcyBvciA8c3Bh biBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGxvbmcg YmVmb3JlIHlvdSByZWFjaCB0aGlzIGxpbWl0IDotKTwvcD4KCgk8aDIgaWQ9Im11bHRpIj5N dWx0aS1kYXkgKHNwYW5uZWQpIGV2ZW50czwvaDI+CgoJPHA+QW55IGV2ZW50IHRoYXQgaGFz OjwvcD4KCgk8dWw+CgkJPGxpPmEgc3RhcnQgZGF0ZTwvbGk+CgkJPGxpPmFuIGV4cGlyeSBk YXRlIHRoYXQgaXMgYSBkYXkgb3IgbW9yZSBsYXRlciB0aGFuIHRoZSBzdGFydCBkYXRlLCBh bmQ8L2xpPgoJCTxsaT48ZW0+ZG9lcyBub3Q8L2VtPiBoYXZlIGFueSByZXBldGl0aW9uIGlu IGl0cyA8Y29kZT5zdGVwZmllbGQ8L2NvZGU+PC9saT4KCTwvdWw+CgoJPHA+aXMgZmxhZ2dl ZCBhcyBhIDxjb2RlPm11bHRpPC9jb2RlPi4gQnkgZGVmYXVsdCB0aGUgZmlyc3QgZXZlbnQg aXMgZGlzcGxheWVkIGluIGZ1bGwgYW5kIGVhY2ggJiM4MjE2O2NvbnRpbnVhdGlvbiYjODIx NzsgZXZlbnQgaXMgc2hvd24gb25seSBhcyBhIHJpZ2h0IGFycm93IGluIHN1YnNlcXVlbnQg Y2VsbHMuIEV2ZW50cyBtYXkgc3BhbiBtb250aHMgb3IgeWVhcnMgYW5kIHRoZSBwbHVnaW4g ZmlndXJlcyBldmVyeXRoaW5nIG91dCB1c2luZyBmbGFnIHJ1bGVzOjwvcD4KCgk8dWw+CgkJ PGxpPlRoZSBmaXJzdCBjZWxsIG9mIGEgc3Bhbm5lZCBzZXQgaXMgPGNvZGU+bXVsdGlmaXJz dDwvY29kZT48L2xpPgoJCTxsaT5UaGUgbGFzdCBjZWxsIGlzIDxjb2RlPm11bHRpbGFzdDwv Y29kZT48L2xpPgoJCTxsaT5FdmVyeSBvdGhlciBjZWxsIGlzIGEgPGNvZGU+bXVsdGk8L2Nv ZGU+IDxlbT5leGNlcHQ8L2VtPiBpZiB0aGUgZXZlbnQgcm9sbHMgb3ZlciBpbnRvIHRoZSBu ZXh0IG1vbnRoLiBJbiB0aGF0IGNhc2UsIHRoZSBlbnRyeSBvbiB0aGUgMXN0IG9mIHRoZSBt b250aCBpcyBhIDxjb2RlPm11bHRpcHJldjwvY29kZT4gdG8gaW5kaWNhdGUgaXQgYmVsb25n cyB0byBhIHByZXZpb3VzIGV2ZW50PC9saT4KCQk8bGk+SWYgdGhlIDFzdCBkYXkgb2YgdGhl IG1vbnRoIGlzIHRoZSBsYXN0IGRheSBvZiB0aGUgZXZlbnQsIHRoZSA8Y29kZT5tdWx0aXBy ZXY8L2NvZGU+IGlzIGRyb3BwZWQgaW4gZmF2b3VyIG9mIDxjb2RlPm11bHRpbGFzdDwvY29k ZT48L2xpPgoJPC91bD4KCgk8cD5Td2l0Y2ggb2ZmIHNwYW5uaW5nIGNvbXBsZXRlbHkgd2l0 aCA8Y29kZT5zaG93c3Bhbm5lZD0mcXVvdDswJnF1b3Q7PC9jb2RlPi4gRXZlbnRzIHRoYXQg aGF2ZSBhbiBleHBpcnkgdGhlbiBiZWNvbWUgc3RhbmRhcmQgZXZlbnRzLjwvcD4KCgk8cD4m IzgyMTY7Q29udGludWF0aW9uJiM4MjE3OyBjZWxscyBtYXkgYmUgcHJvY2Vzc2VkIHdpdGgg YSBzZXBhcmF0ZSBmb3JtICg8Y29kZT5zcGFuZm9ybTwvY29kZT4pLiBJZiB5b3UgY2hvb3Nl IG5vdCB0byB1c2UgYSA8Y29kZT5zcGFuZm9ybTwvY29kZT4sIHRoZSBzdGFuZGFyZCA8Y29k ZT5mb3JtPC9jb2RlPiBvciBjb250YWluZXIgd2lsbCBiZSB1c2VkIGFuZCB5b3Ugd2lsbCBo YXZlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRpZmZlcmVudCBtdWx0aSBmbGFncyB5 b3Vyc2VsZiB1c2luZyB0aGUgPGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbCB0YWc8L2E+ LjwvcD4KCgk8cD5Zb3UgY2FuIGFsc28gPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsIG9yIG9t aXQ8L2E+IGRheXMgb2YgYSBzcGFubmVkIGV2ZW50IGluIHRoZSBzYW1lIG1hbm5lciBhcyB5 b3UgZG8gd2l0aCA8YSBocmVmPSIjcmVjdXIiPnJlY3VycmluZyBldmVudHM8L2E+LCBleGNl cHQgeW91IGNhbm5vdCBjYW5jZWwgdGhlIGZpcnN0IGRheTsgeW91IHNob3VsZCBtb3ZlIHRo ZSBldmVudCBzdGFydCBkYXRlIGFuZCBhcG9sb2dpc2UhPC9wPgoKCTxoMiBpZD0iY2FuY2Vs Ij5DYW5jZWxsaW5nIGFuZCBvbWl0dGluZyBldmVudHM8L2gyPgoKCTxwPlBsYW5zIGNoYW5n ZSBhbmQgeW91IG1heSBmaW5kIHRoYXQgYSBnaWcgaGFzIHRvIGJlIGNhbmNlbGxlZC4gUGVy aGFwcyB5b3UgYWR2ZXJ0aXNlIGEgd2Vla2x5IGJvb3QgZmFpciBidXQgdGhlIGZpZWxkIGlz IHdhdGVybG9nZ2VkIG9uZSB3ZWVrLiBObyBwcm9ibGVtOiBub21pbmF0ZSBhIDxjb2RlPnNr aXBmaWVsZDwvY29kZT4gaW4geW91ciA8Y29kZT5zbWRfY2FsZW5kYXI8L2NvZGU+IHRhZyBh bmQgZW50ZXIgdGhlIGRhdGUgb2YgdGhlIGNhbmNlbGxlZCBldmVudC48L3A+CgoJPHA+T3Ig eW91IG1pZ2h0IHJ1biBhIHRoZWF0cmUgd2ViIHNpdGUgdGhhdCBoYXMgYSB0aHJlZS13ZWVr IHByb2R1Y3Rpb24gcGVyZm9ybWFuY2Ugb24gd2Vla25pZ2h0cyBvbmx5LiBJbnN0ZWFkIG9m IHNldHRpbmcgdXAgdGhyZWUgc2VwYXJhdGUgZXZlbnRzICYjODIxMjsgb25lIGZvciBlYWNo IHdlZWsgJiM4MjEyOyBub21pbmF0ZSBhbiA8Y29kZT5vbWl0ZmllbGQ8L2NvZGU+IGFuZCBs aXN0IHRoZSBkYXRlcyBvbiB3aGljaCB0aGUgcGVyZm9ybWFuY2UgZG9lcyBub3QgYWlyLiBP bWl0dGVkIGRhdGVzIHdpbGwgbm90LCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgYXBwZWFy IG9uIHRoZSBjYWxlbmRhciBhbmQgdGhleSBvdmVycmlkZSBjYW5jZWxsZWQgZGF0ZXMvaG9s aWRheXMuIElmIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiBtb2RlIGlzIHVzZWQsIHlvdSB3aWxs IGhvd2V2ZXIgc2VlIGEgY2VsbCBmbGFnIGxhYmVsbGVkIDxjb2RlPm9taXQ8L2NvZGU+IChw bHVzIGNsYXNzIHByZWZpeCkgaW4gY2FzZSB5b3UgZG8gd2lzaCB0byBzdHlsZSBzdWNoIGNl bGxzLjwvcD4KCgk8cD5UbyBzcGVjaWZ5IHRoZSBkYXRlcyBpbiBlaXRoZXIgZmllbGQsIHVz ZSBhbnkgYWNjZXB0YWJsZSBkYXRlIGZvcm1hdCwgYnV0IGRlcml2YXRpdmVzIG9mIGRkLW1v bnRobmFtZS15eXl5IG9yIG1vbnRobmFtZS1kZC15eXl5IGFyZSB0aGUgbW9zdCB1bmFtYmln dW91cyB0byBhdm9pZCBwcm9ibGVtcyAoZS5nLiBpcyA8Y29kZT4xLzU8L2NvZGU+IEphbiA1 dGggb3IgTWF5IDFzdCkuIFlvdSBjYW4gc3BlY2lmeSBhcyBtYW55IGNhbmNlbGxhdGlvbnMg b3Igb21pc3Npb25zIGFzIHlvdSBsaWtlOyBjb21tYS1zZXBhcmF0ZSBlYWNoIG9uZS4gWW91 IG1heSBhbHNvIHNwZWNpZnkgcmFuZ2VzIG9mIGRhdGVzIHRvIG9taXQvY2FuY2VsIGJ5IHVz aW5nIHRoZSBub3RhdGlvbiA8Y29kZT5zdGFydCBkYXRlID0mZ3Q7IGVuZCBkYXRlPC9jb2Rl Pi48L3A+CgoJPHA+QnkgZGVmYXVsdCwgY2FuY2VsbGVkIGV2ZW50cyB3aWxsIG5vdCBhcHBl YXIgb24gdGhlIGNhbGVuZGFyLiBJZiB5b3UgdXNlIDxjb2RlPnNob3dza2lwcGVkPSZxdW90 OzEmcXVvdDs8L2NvZGU+IHRoZSBldmVudCB3aWxsIGFwcGVhciBpbiB0aGUgY2VsbCBhcyBu b3JtYWwgYW5kIHRoZSA8Y29kZT5jYW5jZWw8L2NvZGU+IGZsYWcgd2lsbCBhcHBseSB0byB0 aGUgZXZlbnQgKGFuZCBjZWxsIGlmIHlvdSBjaG9vc2UpIHNvIHlvdSBtYXkgZGV0ZWN0L3N0 eWxlIGl0LjwvcD4KCgk8aDIgaWQ9ImV4dHJhIj5FeHRyYSBkYXRlczwvaDI+CgoJPHA+V2hl biBldmVudHMgYXJlIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxlZDwvYT4geW91IG1heSBl bGVjdCB0byByZXNjaGVkdWxlIHRoZSBldmVudCBvbiBhIGRpZmZlcmVudCBkYXRlIGluc3Rl YWQgb2YgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBldmVudCB3aXRoIGlkZW50aWNhbCBkZXRh aWxzLiBVc2UgdGhlIDxjb2RlPmV4dHJhZmllbGQ8L2NvZGU+IHRvIHNpbXBseSBhZGQgaXQg dG8gdGhlIGNhbGVuZGFyIG9uIGl0cyBuZXcgZGF5LiBZb3UgbWlnaHQgYWxzbyB1c2UgdGhp cyBmZWF0dXJlIGlmIHlvdSBoYXZlIGEgPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJpbmc8L2E+ IGV2ZW50IG9uIHRoZSAxc3Qgb2YgZXZlcnkgbW9udGggYnV0IGZvciBzb21lIHJlYXNvbiB5 b3UgaGF2ZSB0byBtb3ZlIG9uZSBvZiB0aGUgZXZlbnRzIGEgZGF5IG9yIHR3by4gU2ltcGx5 IGNhbmNlbCB0aGUgb2ZmZW5kaW5nIGRhdGUgYW5kIGFkZCB0aGUgbmV3IGRhdGUgdXNpbmcg PGNvZGU+ZXh0cmFmaWVsZDwvY29kZT4uPC9wPgoKCTxwPlRoZSBsaXN0IG9mIGRhdGVzIGNh biBiZSBpbiBhbnkgc3RhbmRhcmQgZGF0ZSBmb3JtYXQgKGluY2x1ZGluZyBkYXRlIHJhbmdl cyB1c2luZyA8Y29kZT5zdGFydCA9Jmd0OyBlbmQ8L2NvZGU+KS4gVGhleSB3aWxsIGJlIGFk ZGVkIHRvIHRoZSBjYWxlbmRhciBhbmQgZmxhZ2dlZCBhcyA8Y29kZT5leHRyYTwvY29kZT4u IEFsc28gc2VlIHRoZSA8Y29kZT5leHRyYXN0cmljdDwvY29kZT4gYXR0cmlidXRlLjwvcD4K Cgk8cD5JZiB5b3VyIG9yaWdpbmFsIGV2ZW50IHNwYW5zIG1vcmUgdGhhbiBvbmUgZGF5LCB5 b3UgbWF5IGVsZWN0IHRvIHNjaGVkdWxlIHRoZSBlbnRpcmUgYmxvY2sgYWdhaW4uIEFkZCBh ICYjODIxNjsrJiM4MjE3OyBhZnRlciBhbnkgZGF0ZSB5b3Ugd2lzaCB0byByZXBlYXQgaW4g aXRzIGVudGlyZXR5LCBlLmcuIDxjb2RlPjIwMDktTWFyLTEyKywgMjAwOS1KdW4tMTgrLCAy MDA5LUZlYi0xOTwvY29kZT4gd291bGQgY29weSB0aGUgZW50aXJlIGV2ZW50IGJsb2NrIHRv IE1hcmNoIGFuZCBKdW5lLCBidXQgb25seSB0aGUgMXN0IGRhdGUgdG8gRmViIDE5dGguIEV2 ZW50cy9jZWxscyBhcmUgZmxhZ2dlZCBhcyBib3RoIDxjb2RlPmV4dHJhPC9jb2RlPiBhbmQg PGNvZGU+bXVsdGk8L2NvZGU+IHdoZXJlIGFwcGxpY2FibGUuPC9wPgoKCTxwPk5vdGVzOjwv cD4KCgk8dWw+CgkJPGxpPmlmIHlvdSBzY2hlZHVsZSBhbiBleHRyYSBldmVudCBvbiBhIGRh eSB0aGF0IGFscmVhZHkgY29udGFpbnMgdGhlIHNhbWUgZXZlbnQgKHBlcmhhcHMgb24gYSBz cGFubmVkIG9yIHJlY3VycmluZyBkYXRlKSB5b3UgbWF5IHNlZSB0d28gaWRlbnRpY2FsIGV2 ZW50cyBvbiB0aGUgc2FtZSBkYXkuIFRyeSBhbmQgYXZvaWQgdGhpcywgdW5sZXNzIGl0JiM4 MjE3O3MgeW91ciBpbnRlbmRlZCBiZWhhdmlvdXI8L2xpPgoJCTxsaT5kYXRlIHJhbmdlcyBh bmQgdGhlICYjODIxNjsrJiM4MjE3OyBzeW50YXggYXJlIG11dHVhbGx5IGV4bGN1c2l2ZSBv biBhbnkgZGF0ZSAoZS5nLiA8Y29kZT4yMDA5LU1hci0xMCsgPSZndDsgMjAwOS1NYXItMTU8 L2NvZGU+IGlzIGlsbGVnYWwpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJob2xpZGF5cyI+SG9s aWRheXM8L2gyPgoKCTxwPlB1YmxpYyBob2xpZGF5cyBuZWVkIG5vdCBiZSBhIG51aXNhbmNl IHRvIHlvdXIgZXZlbnRzLiBHaXZlIHRoZSBwbHVnaW4gYSBob2xpZGF5IGxpc3QgYW5kIGl0 JiM4MjE3O2xsIG1ha2Ugc3VyZSBhbnkgcmVjdXJyaW5nIG9yIG11bHRpIGV2ZW50cyBhcmUg bm90IHNjaGVkdWxlZCBvbiB0aG9zZSBkYXlzLiA8YSBocmVmPSIjZXZlbnRzIj5TdGFuZGFy ZDwvYT4gb25lLW9mZiBldmVudHMgYXJlIHBlcm1pdHRlZCBieSBkZWZhdWx0IGJlY2F1c2Ug eW91IG1pZ2h0IHdhbnQgdG8gb3JnYW5pc2UgYSBzcGVjaWFsIGV2ZW50IG9uIHRoYXQgZGF5 LCB0aG91Z2ggeW91IGNhbiBmb3JiaWQgdGhvc2UgdG9vIGlmIHlvdSB3aXNoLjwvcD4KCgk8 cD5UaGUgbGlzdCBvZiBkYXRlcyB5b3Ugc3BlY2lmeSBjYW4gYmUgZW50ZXJlZCBkaXJlY3Rs eSBpbiBhIHN0cmluZyBpbiB0aGUgPGNvZGU+aG9saWRheXM8L2NvZGU+IGF0dHJpYnV0ZSBv ciBpbiBhIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2NvZGU+OjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6dmFyaWFibGUgbmFt ZT0mcXVvdDtuYXRfaG9scyZxdW90OwogICAgIHZhbHVlPSZxdW90O0RlYyAyNSwgMjYgRGVj LCAzMS9EZWMsIEphbi0xLAogICAgICAgIE1heSA0IDIwMDksIDIwMDktMDgtMzEmcXVvdDsg LyZndDsKJmx0O3R4cDpzbWRfY2FsZW5kYXIgaG9saWRheXM9JnF1b3Q7dHhwdmFyOm5hdF9o b2xzJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGF0IGxpc3Qgc2hvd3Mgc29t ZSBvZiB0aGUgdmFyaWV0eSBhbmQgYnJlYWR0aCBvZiBmb3JtYXRzIHRoZSBwbHVnaW4gYWxs b3dzLiBUaGVyZSBhcmUgbW9yZS4gTm90ZSB0aGF0IHRoZSBldmVudHMgd2l0aG91dCBhIHll YXIgb2NjdXIgb24gdGhlIHNhbWUgZGF0ZSBldmVyeSB5ZWFyLCB3aGVyZWFzIHRoZSBvbmVz IHdpdGggYSB5ZWFyIHdpbGwgb25seSBvY2N1ciBvbiB0aGF0IHNwZWNpZmljIGRhdGUuPC9w PgoKCTxwPk9uY2UgeW91ciBkYXRlcyBhcmUgZGVmaW5lZCB5b3UgY2FuIGNvbnRyb2wgd2hp Y2ggZXZlbnRzIGFyZSBhbGxvd2VkIHRvIGZhbGwgb24gdGhvc2UgZGF0ZXMgdmlhIDxjb2Rl PmhvbGlkYXlmbGFnczwvY29kZT4uIENvbWJpbmluZyB0aGF0IGF0dHJpYnV0ZSwgPGNvZGU+ c2hvd3NwYW5uZWQ8L2NvZGU+LCA8Y29kZT5zaG93c2tpcHBlZDwvY29kZT4gYW5kIHRoZSBm b3JtcyAmIzgyMTI7IGFsb25nIHdpdGggdGhlIGNvbmRpdGlvbmFsIHRhZyAmIzgyMTI7IGNh biBnaXZlIGEgd2lkZSB2YXJpZXR5IG9mIHdheXMgdG8gZGlzcGxheSBldmVudHMgYW5kIGNl bGxzLjwvcD4KCgk8cD5Ib2xpZGF5IGNlbGxzIGFyZSBnaXZlbiB0aGUgZmxhZyA8Y29kZT5o b2xzPC9jb2RlPiwgYW5kIGFueSBldmVudCB0aGF0IGlzIG5vdCBzcGVjaWZpY2FsbHkgcGVy bWl0dGVkIGJ5IHRoZSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+IGlzIGF1dG9tYXRpY2Fs bHkgYXNzaWduZWQgYSA8Y29kZT5jYW5jZWw8L2NvZGU+IGZsYWcgaWYgaXQgZmFsbHMgb24g b25lIG9mIHRoZSBkYXlzLiBPbWl0dGVkIGRhdGVzIHdpbGwsIGhvd2V2ZXIsIGNhdXNlIHRo ZSA8Y29kZT5jYW5jZWw8L2NvZGU+IGZsYWcgdG8gYmUgcmVtb3ZlZC48L3A+CgoJPGgyIGlk PSJzbWRjYWwiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+ PC9oMj4KCgk8cD5QdXQgdGhpcyB0YWcgd2hlcmV2ZXIgeW91IHdhbnQgeW91ciBjYWxlbmRh ciB0byBhcHBlYXIuIFVzZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdG8gY29udHJvbCBp dHMgb3V0cHV0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB1bnNldCB1bmxlc3Mgc3RhdGVkIG90 aGVyd2lzZS48L3A+CgoJPGgzIGNsYXNzPSJhdHRzIj5EaXNwbGF5IGF0dHJpYnV0ZXM8L2gz PgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnNpemU8L3NwYW4+PC9kdD4KCQk8 ZGQ+Q2FsZW5kYXIgc2l6ZS4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+bGFyZ2U8L2RkPgoJCTxk ZD5zbWFsbDwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPlRoZSBzbWFsbCBpcyBtb3JlIGdlYXJl ZCB0b3dhcmRzIGEgbWluaWNhbCwgYWx0aG91Z2ggZnVuY3Rpb25hbGx5IHRoZXJlIDxhIGhy ZWY9IiNzaXplZGlmZiI+aXNuJiM4MjE3O3QgbXVjaCBiZXR3ZWVuIHRoZW08L2E+PC9kZD4K CQk8ZGQ+RGVmYXVsdDogbGFyZ2U8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Zmly c3RkYXk8L3NwYW4+PC9kdD4KCQk8ZGQ+Rmlyc3QgZGF5IG9mIHRoZSB3ZWVrIHRvIHNob3cg aW4gdGhlIGNhbGVuZGFyLiAwPVN1bmRheSwgMT1Nb25kYXkgJiM4MjMwOyA2PVNhdHVyZGF5 PC9kZD4KCQk8ZGQ+RGVmYXVsdDogMDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5k YXlmb3JtYXQ8L3NwYW4+PC9kdD4KCQk8ZGQ+V2F5IGluIHdoaWNoIGRheSBuYW1lcyBhcmUg cmVuZGVyZWQuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5BQkJS PC9zcGFuPiBzaG93cyBhYmJyZXZpYXRlZCBkYXkgbmFtZXM7IE1vbiwgVHVlLCBXZWQsIGV0 YzwvZGQ+CgkJPGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5GVUxMPC9zcGFuPiB1c2VzIGZ1bGwg bmFtZXM8L2RkPgoJCTxkZD5BbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3VrMi5waHAubmV0 L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2Rlcy4gTG9jYWxlLXNwZWNpZmljIG5hbWVz IGFyZSByZXR1cm5lZDwvZGQ+CgkJPGRkPkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY3Vz dG9tIGRheSBuYW1lcyBzdXJyb3VuZGVkIGJ5IDxjb2RlPnt9PC9jb2RlPiBicmFja2V0czwv ZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkV4YW1wbGUsIGZvciB0d28tbGV0dGVyIEdlcm1hbiB3 ZWVrZGF5czogPGNvZGU+ZGF5Zm9ybWF0PSZxdW90O3tTbyxNbyxEaSxNaSxEbyxGcixTYX0m cXVvdDs8L2NvZGU+LiBUaGUgZmlyc3QgZGF5IGluIHRoZSBsaXN0IDxzdHJvbmc+bXVzdDwv c3Ryb25nPiByZXByZXNlbnQgU3VuZGF5IG9yIHRoaW5ncyB3aWxsIGJyZWFrPC9kZD4KCQk8 ZGQ+RGVmYXVsdDogPHNwYW4gY2xhc3M9ImNhcHMiPkFCQlI8L3NwYW4+PC9kZD4KCQk8ZHQ+ PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRoZm9ybWF0PC9zcGFuPjwvZHQ+CgkJPGRkPldheSBp biB3aGljaCB0aGUgbW9udGggbmFtZXMgYXJlIHJlbmRlcmVkLiBPcHRpb25zOgoJPGRsPgoJ CTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+RlVMTDwvc3Bhbj4gc2hvd3MgZnVsbCBtb250aCBu YW1lczwvZGQ+CgkJPGRkPjxzcGFuIGNsYXNzPSJjYXBzIj5BQkJSPC9zcGFuPiB1c2VzIGFi YnJldmlhdGVkIG5hbWVzPC9kZD4KCQk8ZGQ+QW55IHZhbGlkIHN0cmZ0aW1lKCkgY29kZXMu IExvY2FsZS1zcGVjaWZpYyBuYW1lcyBhcmUgcmV0dXJuZWQ8L2RkPgoJCTxkZD5BIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGN1c3RvbSBtb250aCBuYW1lcyBzdXJyb3VuZGVkIGJ5IDxj b2RlPnt9PC9jb2RlPiBicmFja2V0czwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkV4YW1wbGUs IGZvciBzaW5nbGUtbGV0dGVyIG1vbnRoIG5hbWVzOiA8Y29kZT5tb250aGZvcm1hdD0mcXVv dDt7SixGLE0sQSxNLEosSixBLFMsTyxOLER9JnF1b3Q7PC9jb2RlPi4gVGhlIGZpcnN0IG1v bnRoIGluIHRoZSBsaXN0IDxzdHJvbmc+bXVzdDwvc3Ryb25nPiByZXByZXNlbnQgSmFudWFy eSBvciB0aGluZ3Mgd2lsbCBicmVhazwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDxzcGFuIGNsYXNz PSJjYXBzIj5GVUxMPC9zcGFuPjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zZWxl Y3Q8L3NwYW4+PC9kdD4KCQk8ZGQ+VXNlIGEgc2VsZWN0IGRyb3Bkb3duIGZvciByYXBpZCBh Y2Nlc3MgdG8gd2Vla3MsIG1vbnRocyBvciB5ZWFycyBpbnN0ZWFkIG9mIGZpeGVkIG5hbWVz LiBDaG9vc2Ugb25lIG9yIG1vcmUgb2Y6Cgk8ZGw+CgkJPGRkPndlZWs8L2RkPgoJCTxkZD5t b250aDwvZGQ+CgkJPGRkPnllYXI8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5Ob3RlOiB3ZWVr IGFuZCBtb250aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlPC9kZD4KCQk8ZGQ+WW91IG1heSBh bHNvIHNwZWNpZnkgdXAgdG8gdHdvIGV4dHJhIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5IDxj b2RlPjo8L2NvZGU+IGNoYXJzLiBUaGVzZSBhZGQgdGV4dCBpbiBmcm9udCBvZiBhbmQgYmVo aW5kIHRoZSB3ZWVrL21vbnRoL3llYXIsIHJlc3BlY3RpdmVseTwvZGQ+CgkJPGRkPkV4YW1w bGU6IDxjb2RlPnNlbGVjdD0mcXVvdDt3ZWVrOldFRUsjLCB5ZWFyOiZsdDs6Jmd0OyZxdW90 OzwvY29kZT4gZGlzcGxheXMgYSBzZWxlY3QgbGlzdCB3aXRoIGVudHJpZXMgbGlrZSB0aGlz OiA8Y29kZT5XRUVLIzE1ICZsdDsyMDA5Jmd0OzwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+c2VsZWN0YnRuPC9zcGFuPjwvZHQ+CgkJPGRkPkFkZCBhIGRlZGljYXRl ZCBzdWJtaXQgYnV0dG9uIHRvIHdlZWsvbW9udGgveWVhciBzZWxlY3QgbGlzdHMuIFNwZWNp ZnkgdGhlIHRleHQgeW91IHdpc2ggdG8gYXBwZWFyIG9uIHRoZSBidXR0b24uIEl0IHdpbGwg aGF2ZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSA8Y29k ZT5zbWRfY2FsX2lucHV0PC9jb2RlPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHVuc2V0IChpLmUu IGF1dG8tc3VibWl0IG9uIHNlbGVjdCBsaXN0IGNoYW5nZSk8L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+aXNvd2Vla3M8L3NwYW4+PC9kdD4KCQk8ZGQ+U2hvdyA8c3BhbiBjbGFz cz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIG51bWJlcnMgYXMgYSBjb2x1bW4gYXQgdGhlIHN0 YXJ0IG9mIHRoZSBjYWxlbmRhci4gQW55IHRleHQgaW4gdGhpcyBhdHRyaWJ1dGUgZW5hYmxl cyB0aGUgZmVhdHVyZSwgYW5kIGJlY29tZXMgdGhlIGhlYWRpbmcgb2YgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgY29sdW1uPC9kZD4KCQk8ZGQ+WW91IG1heSBj aGFuZ2UgdGhlIGRlZmF1bHQgd2VlayBudW1iZXIgaW4gZWFjaCBjZWxsIGJ5IGFkZGluZyBh IGNvbW1hIGFuZCBzb21lIHRleHQ7IHdoYXRldmVyIHlvdSBlbnRlciB3aWxsIGJlIHB1dCBp biBlYWNoIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgY2VsbC4gVXNlIHRo ZSBmb2xsb3dpbmcgcmVwbGFjZW1lbnQgY29kZXMgaW4geW91ciBtYXJrdXAgdG8gaW5zZXJ0 IHRoZSByZWxldmFudCBpbmZvOgoJPGRsPgoJCTxkZD57d2Vla308L2RkPgoJCTxkZD57bW9u dGh9PC9kZD4KCQk8ZGQ+e3llYXJ9PC9kZD4KCQk8ZGQ+e2lzb3llYXJ9PC9kZD4KCTwvZGw+ PC9kZD4KCQk8ZGQ+RXhhbXBsZTogPGNvZGU+aXNvd2Vla3M9JnF1b3Q7d2ssICN7d2Vla30m cXVvdDs8L2NvZGU+IHdpbGwgcHV0ICYjODIxNjt3ayYjODIxNzsgYXQgdGhlIHRvcCBvZiB0 aGUgY29sdW1uIGFuZCBzb21ldGhpbmcgbGlrZSA8Y29kZT4jMjQ8L2NvZGU+LCA8Y29kZT4j MjU8L2NvZGU+LCA8Y29kZT4jMjY8L2NvZGU+JiM4MjMwOyBiZW5lYXRoIGl0LiBJZiB0aGUg Zmlyc3QgaXRlbSBpcyBvbWl0dGVkLCB0aGVyZSB3aWxsIGJlIG5vIGNvbHVtbiBoZWFkaW5n PC9kZD4KCQk8ZGQ+Tm90ZSB0aGF0IGlmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCA8Y29k ZT5maXJzdGRheTwvY29kZT4gd2lsbCBiZSBmb3JjZWQgdG8gc3RhcnQgb24gYSBNb25kYXkg YXMgZ292ZXJuZWQgYnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHNwZWNp ZmljYXRpb248L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bmF2YXJyb3c8L3NwYW4+ PC9kdD4KCQk8ZGQ+Q29tbWEtc2VwYXJhdGVkIHBhaXIgb2YgaXRlbXMgeW91IHdhbnQgdG8g YXBwZWFyIGFzIHByZXYvbmV4dCBhcnJvd3MgaW4gdGhlIGNhbGVuZGFyPC9kZD4KCQk8ZGQ+ RGVmYXVsdDogPGNvZGU+JmFtcDsjNjA7LCAmYW1wOyM2Mjs8L2NvZGU+PC9kZD4KCQk8ZHQ+ PHNwYW4gY2xhc3M9ImF0bm0iPmNhcHRpb248L3NwYW4+PC9kdD4KCQk8ZGQ+QWRkIGEgY2Fw dGlvbiB0byB0aGUgY2FsZW5kYXI8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c3Vt bWFyeTwvc3Bhbj48L2R0PgoJCTxkZD5BZGQgYSBzdW1tYXJ5IHRvIHRoZSBjYWxlbmRhcjwv ZGQ+Cgk8L2RsPgoKCTxoMyBjbGFzcz0iYXR0cyI+RmlsdGVyIGF0dHJpYnV0ZXM8L2gzPgoK CTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnRpbWU8L3NwYW4+PC9kdD4KCQk8ZGQ+ V2hpY2ggZXZlbnRzIHRvIGRpc3BsYXkuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPmFueTwvZGQ+ CgkJPGRkPnBhc3Q8L2RkPgoJCTxkZD5mdXR1cmU8L2RkPgoJCTxkZD50b2RheTwvZGQ+Cgk8 L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGFueTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5leHBpcmVkPC9zcGFuPjwvZHQ+CgkJPGRkPkhpZGUgb3Igc2hvdyBleHBpcmVkIGV2 ZW50cy4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+dW5zZXQgKHVzZSB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gUHJlZmVyZW5jZSAmIzgyMTY7UHVibGlzaCBleHBpcmVkIGFy dGljbGVzJiM4MjE3Oyk8L2RkPgoJCTxkZD4wIChoaWRlKTwvZGQ+CgkJPGRkPjEgKHNob3cp PC9kZD4KCTwvZGw+PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnN0YXR1czwvc3Bh bj48L2R0PgoJCTxkZD5FdmVudHMgaW4gdGhpcyBzdGF0dXMgbGlzdCBhcmUgcHVibGlzaGVk IG9uIHRoZSBjYWxlbmRhci4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+bGl2ZTwvZGQ+CgkJPGRk PnN0aWNreTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGxpdmU8L2RkPgoJCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+Y2F0ZWdvcnk8L3NwYW4+PC9kdD4KCQk8ZGQ+RmlsdGVy IGV2ZW50cyBieSB0aGlzIGxpc3Qgb2YgY2F0ZWdvcmllczwvZGQ+CgkJPGR0PjxzcGFuIGNs YXNzPSJhdG5tIj5zdWJjYXRzPC9zcGFuPjwvZHQ+CgkJPGRkPkNvbnNpZGVyIHN1Yi1jYXRl Z29yaWVzLiBDaG9vc2UgYSBudW1lcmljIG5lc3RpbmcgbGV2ZWwgdG8gY29uc2lkZXIsIG9y IHRoZSB3b3JkIDxjb2RlPmFsbDwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+c2VjdGlvbjwvc3Bhbj48L2R0PgoJCTxkZD5GaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlz dCBvZiBzZWN0aW9uczwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5hdXRob3I8L3Nw YW4+PC9kdD4KCQk8ZGQ+RmlsdGVyIGV2ZW50cyBieSB0aGlzIGxpc3Qgb2YgYXV0aG9yIGxv Z2luIG5hbWVzPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnJlYWxuYW1lPC9zcGFu PjwvZHQ+CgkJPGRkPkZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIGF1dGhvciBSZWFs IE5hbWVzIChub3RlOiBtYXkgYWRkIG9uZSBleHRyYSBxdWVyeSk8L2RkPgoJCTxkdD48c3Bh biBjbGFzcz0iYXRubSI+c2hvd2FsbDwvc3Bhbj48L2R0PgoJCTxkZD5JZiB5b3VyIGNhbGVu ZGFyIGFwcGVhcnMgb24gdGhlIGZyb250IHBhZ2Ugb2YgeW91ciBzaXRlIGFuZCB5b3UgaGF2 ZSA8ZW0+bm90PC9lbT4gdXNlZCB0aGUgPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0cmlidXRl LCB0aGVuOgoJPGRsPgoJCTxkZD4wOiBvbmx5IHNob3dzIGV2ZW50cyBmcm9tIHNlY3Rpb25z IG1hcmtlZCB3aXRoIDxjb2RlPk9uIGZyb250IHBhZ2U8L2NvZGU+PC9kZD4KCQk8ZGQ+MTog c2hvd3MgYWxsIGV2ZW50cyBmcm9tIGFsbCBzZWN0aW9uczwvZGQ+Cgk8L2RsPjwvZGQ+CgkJ PGRkPkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3Nw YW4+PC9kdD4KCQk8ZGQ+U3RhcnQgdGhlIGNhbGVuZGFyIG9uIHRoaXMgbW9udGggZnJvbSAx IChKYW4pIHRvIDEyIChEZWMpLiBOb3JtYWwgY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlk ZXMgdGhpcyB2YWx1ZTwvZGQ+CgkJPGRkPklmIDxjb2RlPnN0YXRpYzwvY29kZT4gaXMgdXNl ZCwgdGhpcyBtb250aCBiZWNvbWVzIHRoZSBvbmx5IG9uZSB5b3UgbWF5IHZpZXc8L2RkPgoJ CTxkZD5JZiB1bnNldCwgYW5kIG5vIDxjb2RlPm09PC9jb2RlPiB2YWx1ZSBhcHBlYXJzIG9u IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5lLCB0aGUgY3VycmVudCBt b250aCBpcyB1c2VkPC9kZD4KCQk8ZGQ+PHNwYW4gY2xhc3M9ImF0bm0iPndlZWs8L3NwYW4+ PC9kZD4KCQk8ZGQ+U3RhcnQgdGhlIGNhbGVuZGFyIGR1cmluZyB0aGUgbW9udGggY29udGFp bmluZyB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgKGZyb20gMSB0 byA1Myk8L2RkPgoJCTxkZD5JZ25vcmVkIGlmIDxjb2RlPnN0YXRpYzwvY29kZT4gb3Igb25l IG9mIHRoZSBjYWxlbmRhciBuYXZpZ2F0aW9uIGNvbnRyb2xzIGlzIHVzZWQ8L2RkPgoJCTxk ZD5JZiBhIDxjb2RlPnc9PC9jb2RlPiB2YWx1ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5lLCB0aGUgZ2l2ZW4gd2VlayBvdmVycmlkZXMgYW55 IG1vbnRoIHZhbHVlPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnllYXI8L3NwYW4+ PC9kdD4KCQk8ZGQ+U3RhcnQgdGhlIGNhbGVuZGFyIGF0IHRoaXMgNC1kaWdpdCB5ZWFyLiBO b3JtYWwgY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlkZXMgdGhpcyB2YWx1ZTwvZGQ+CgkJ PGRkPklmIDxjb2RlPnN0YXRpYzwvY29kZT4gaXMgdXNlZCwgdGhpcyB5ZWFyIGJlY29tZXMg dGhlIG9ubHkgb25lIHlvdSBtYXkgdmlldzwvZGQ+CgkJPGRkPklmIHVuc2V0LCBhbmQgbm8g PGNvZGU+eT08L2NvZGU+IHZhbHVlIGFwcGVhcnMgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IGxpbmUsIHRoZSBjdXJyZW50IHllYXIgaXMgdXNlZDwvZGQ+CgkJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0aWM8L3NwYW4+PC9kdD4KCQk8ZGQ+Rm9yY2UgdGhl IGNhbGVuZGFyIHRvIGJlIGZpeGVkIHRvIG9uZSBtb250aC95ZWFyIChpLmUuIG5vIG5hdmln YXRpb24pLiBNb250aCBhbmQgeWVhciBkZWNpZGVkIGJ5IGF0dHJpYnV0ZXMgPGNvZGU+bW9u dGg8L2NvZGU+IGFuZCA8Y29kZT55ZWFyPC9jb2RlPiBvciwgaWYgb21pdHRlZCwgdGhlIGN1 cnJlbnQgZGF0ZSB3aWxsIGJlIHVzZWQ8L2RkPgoJPC9kbD4KCgk8aDMgY2xhc3M9ImF0dHMi PkZvcm0gYXR0cmlidXRlczwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ Zm9ybTwvc3Bhbj48L2R0PgoJCTxkZD5Vc2UgdGhlIGdpdmVuIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGZvcm0gdG8gcHJvY2VzcyBlYWNoIGV2ZW50PC9kZD4KCQk8ZGQ+SWYg dGhlIHNtZF9jYWxlbmRhciB0YWcgaXMgdXNlZCBhcyBhIGNvbnRhaW5lciBpdCB3aWxsIGJl IHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgZm9ybTwvZGQ+CgkJPGRkPklmIG5laXRoZXIg YXJlIHVzZWQsIGEgZGVmYXVsdCBpcyB1c2VkIChMYXJnZTogaHlwZXJsaW5rZWQgYXJ0aWNs ZSB0aXRsZSwgU21hbGw6IGVtcHR5IGV2ZW50KTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5zcGFuZm9ybTwvc3Bhbj48L2R0PgoJCTxkZD5EaXNwbGF5IHNwYW5uZWQgZXZlbnRz IGRpZmZlcmVudGx5IHRvIHN0YW5kYXJkIGV2ZW50czsgdGhleSB1c3VhbGx5IHVzZSB0aGUg c2FtZSA8Y29kZT5mb3JtPC9jb2RlPi9jb250YWluZXI8L2RkPgoJCTxkZD5JZiBuZWl0aGVy IGFyZSBzcGVjaWZpZWQsIGEgcmlnaHQtYXJyb3cgd2lsbCBiZSB1c2VkIHRvIGluZGljYXRl IGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgZGF5JiM4MjE3O3MgZXZlbnQ8L2RkPgoJ CTxkZD5Ob3RlOiB0aGUgZmlyc3QgZGF5IG9mIGEgc3Bhbm5lZCBzZXQgaXMgPGVtPm5vdDwv ZW0+IHBhc3NlZCB0byB0aGUgPGNvZGU+c3BhbmZvcm08L2NvZGU+OyBvbmx5IGNvbnRpbnVh dGlvbiBjZWxscyBhcmUgcGFzc2VkIHRvIGl0PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0 bm0iPnJlY3VyZm9ybTwvc3Bhbj48L2R0PgoJCTxkZD5EaXNwbGF5IHJlY3VycmluZyBldmVu dHMgZGlmZmVyZW50bHkgdG8gc3RhbmRhcmQgZXZlbnRzPC9kZD4KCQk8ZGQ+Tm90ZTogdGhl IGZpcnN0IGV2ZW50IG9mIGEgcmVjdXJyaW5nIHNldCBpcyA8ZW0+bm90PC9lbT4gcGFzc2Vk IHRvIDxjb2RlPnJlY3VyZm9ybTwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+Y2VsbGZvcm08L3NwYW4+ICg8c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5vbmx5IG9uIGxh cmdlIGNhbGVuZGFyczwvc3Bhbj4pPC9kdD4KCQk8ZGQ+VXNlIGlmIHlvdSB3aXNoIHRvIGJ1 aWxkIGVhY2ggY2VsbCBlbnRpcmVseSBmcm9tIHNjcmF0Y2g8L2RkPgoJCTxkZD5UaGVyZSBh cmUgc29tZSA8YSBocmVmPSIjY2VsbGZvcm0iPnJlcGxhY2VtZW50IHZhcmlhYmxlczwvYT4g eW91IGNhbiB1c2UgdG8gaW5zZXJ0IGR5bmFtaWMgcGllY2VzIG9mIGluZm9ybWF0aW9uIGlu IHlvdXIgY2VsbHM8L2RkPgoJCTxkZD5Ob3RlOiB5b3UgY2Fubm90IHVzZSA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBhcnRpY2xlIG9yIHBsdWdpbiB0YWdzIGluIHRoZSBGb3Jt PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmhlYWRlcmZvcm08L3NwYW4+PC9kdD4K CQk8ZGQ+VXNlIGlmIHlvdSB3aXNoIHRvIGJ1aWxkIHRoZSBoZWFkZXIgeW91cnNlbGY8L2Rk PgoJCTxkZD5UaGVyZSBhcmUgc29tZSA8YSBocmVmPSIjaGRyZm9ybSI+cmVwbGFjZW1lbnQg dmFyaWFibGVzPC9hPiB5b3UgY2FuIHVzZSB0byBpbnNlcnQgZHluYW1pYyBwaWVjZXMgb2Yg aW5mb3JtYXRpb24gaW4geW91ciBoZWFkZXI8L2RkPgoJPC9kbD4KCgk8aDMgY2xhc3M9ImF0 dHMiIGlkPSJmbGRhdHRzIj5GaWVsZC1iYXNlZCBhdHRyaWJ1dGVzIChjdXN0b20gZmllbGRz IG9yIG90aGVyIGFydGljbGUgZmllbGRzKTwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFz cz0iYXRubSI+c3RlcGZpZWxkPC9zcGFuPjwvZHQ+CgkJPGRkPklEIG9mIGEgZmllbGQgd2l0 aGluIHdoaWNoIGFuIGV2ZW50IG1heSBiZSB0b2xkIHRvIHJlcGVhdDwvZGQ+CgkJPGRkPk5v dGU6IGl0IGlzIHRoZSBmaWVsZCYjODIxNztzIElEIDxlbT5ub3QgaXRzIG5hbWU8L2VtPiwg c28gZm9yIGN1c3RvbSBmaWVsZHMgeW91IG11c3QgdXNlIDxjb2RlPmN1c3RvbV8xPC9jb2Rl PiBvciA8Y29kZT5jdXN0b21fMjwvY29kZT4gZXRjPC9kZD4KCQk8ZGQ+V2l0aG91dCB0aGlz IGF0dHJpYnV0ZSwgbm8gPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJpbmcgZXZlbnRzPC9hPiBt YXkgYmUgZGVmaW5lZDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5vbWl0ZmllbGQ8 L3NwYW4+PC9kdD4KCQk8ZGQ+SUQgKG5vdCBuYW1lKSBvZiBhIGZpZWxkIHRoYXQgY29udGFp bnMgYSBsaXN0IG9mIGRhdGVzIG9uIHdoaWNoIHRoaXMgZXZlbnQgaXMgdG8gYmUgPGEgaHJl Zj0iI2NhbmNlbCI+b21pdHRlZDwvYT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ c2tpcGZpZWxkPC9zcGFuPjwvZHQ+CgkJPGRkPklEIChub3QgbmFtZSkgb2YgYSBmaWVsZCB0 aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGlzIGV2ZW50IGlzIDxh IGhyZWY9IiNjYW5jZWwiPmNhbmNlbGxlZDwvYT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+ZXh0cmFmaWVsZDwvc3Bhbj46PC9kdD4KCQk8ZGQ+SUQgKG5vdCBuYW1lKSBvZiBh IGZpZWxkIGZyb20gd2hpY2ggYSBsaXN0IG9mIDxhIGhyZWY9IiNleHRyYSI+YWRkaXRpb25h bCBldmVudCBkYXRlczwvYT4gbWF5IGJlIGdpdmVuOyB0aGUgc2FtZSBldmVudCBkZXRhaWxz IHdpbGwgYmUgY29waWVkIHRvIHRoZSBuZXcgZGF5KHMpPC9kZD4KCQk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPmV4dHJhc3RyaWN0PC9zcGFuPjwvZHQ+CgkJPGRkPkNvbnRyb2wgdmlzaWJp bGl0eSBvZiBleHRyYSBkYXRlcyBvbiB0aGUgY2FsZW5kYXIuIE9wdGlvbnM6Cgk8ZGw+CgkJ PGRkPjA6IDxjb2RlPmV4dHJhZmllbGQ8L2NvZGU+IGRhdGVzIGF1dG9tYXRpY2FsbHkgYXBw ZWFyIG9uIHRoZSBjYWxlbmRhcjwvZGQ+CgkJPGRkPjE6IHJlc3RyaWN0IG5ldyBkYXRlcyBm cm9tIGFwcGVhcmluZyBhZnRlciB0aGUgZXZlbnQmIzgyMTc7cyBleHBpcnkgZGF0ZTwvZGQ+ Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+c2hvd3NraXBwZWQ8L3NwYW4+PC9kdD4KCQk8ZGQ+Q29udHJvbCB2aXNpYmlsaXR5 IG9mIGNhbmNlbGxlZCBldmVudHMgb24gdGhlIGNhbGVuZGFyLiBPcHRpb25zOgoJPGRsPgoJ CTxkZD4wIChoaWRlKTwvZGQ+CgkJPGRkPjEgKHNob3cpPC9kZD4KCTwvZGw+PC9kZD4KCQk8 ZGQ+RGVmYXVsdDogMDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zaG93c3Bhbm5l ZDwvc3Bhbj48L2R0PgoJCTxkZD5Db250cm9sIHZpc2liaWxpdHkgb2Ygc3Bhbm5lZCBldmVu dHMgb24gdGhlIGNhbGVuZGFyLiBPcHRpb25zOgoJPGRsPgoJCTxkZD4wIChoaWRlKTwvZGQ+ CgkJPGRkPjEgKHNob3cpPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+RGVmYXVsdDogMTwvZGQ+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5kYXRlZmllbGRzPC9zcGFuPjwvZHQ+CgkJPGRk PklEcyAobm90IG5hbWVzKSBvZiB1cCB0byB0d28gZmllbGRzIGZyb20gd2hpY2ggcG9zdGVk IGFuZCBleHBpcnkgZGF0ZSBzdGFtcHMgbWF5IGJlIHJlYWQuIENvbW1hLXNlcGFyYXRlIHRo ZSBmaWVsZCBuYW1lczsgdGhlIGZpcnN0IHdpbGwgYmUgdXNlZCBhcyB0aGUgUG9zdGVkIGRh dGUgYW5kIHRoZSBzZWNvbmQgYXMgdGhlIEV4cGlyeTwvZGQ+CgkJPGRkPklmIGVpdGhlciBp cyBvbWl0dGVkIG9yIG1hbmdsZWQsIHRoZSBhcnRpY2xlJiM4MjE3O3MgJiM4MjIwO3JlYWwm IzgyMjE7IHBvc3RlZC9leHBpcnkgZGF0ZSB3aWxsIGJlIHVzZWQgaW5zdGVhZDwvZGQ+CgkJ PGRkPklmIHRoZSBleHBpcnkgZGF0ZSBvY2N1cnMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCB5 b3VyIGRhdGVmaWVsZHMgd2lsbCBiZSBpZ25vcmVkIGFuZCBhIHdhcm5pbmcgd2lsbCBiZSBp c3N1ZWQ8L2RkPgoJPC9kbD4KCgk8aDMgY2xhc3M9ImF0dHMiPkNvbmZpZyBhdHRyaWJ1dGVz PC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5ob2xpZGF5czwvc3Bhbj48 L2R0PgoJCTxkZD5MaXN0IG9mIGRhdGVzIHRoYXQgYXJlIGRlY3JlZWQgYXMgPGEgaHJlZj0i I2hvbGlkYXlzIj5ob2xpZGF5czwvYT48L2RkPgoJCTxkZD5NYXkgYmUgZGVmZXJyZWQgdG8g YSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPiwgaW4gd2hpY2ggY2FzZSBk ZWZpbmUgeW91ciBsaXN0IGluIGEgbmFtZWQgdmFyaWFibGUgYW5kIHVzZSA8Y29kZT5ob2xp ZGF5cz0mcXVvdDt0eHB2YXI6bXlfdmFyX25hbWUmcXVvdDs8L2NvZGU+IHRvIHJlYWQgdGhl bSBpbnRvIHRoZSBwbHVnaW48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+aG9saWRh eWZsYWdzPC9zcGFuPjwvZHQ+CgkJPGRkPlBlcm1pdCBjZXJ0YWluIGV2ZW50IGZsYWdzIHRv IGJlIHNjaGVkdWxlZCBvbiBob2xpZGF5cy4gTGlzdCBvbmUgb3IgbW9yZSBvZjoKCTxkbD4K CQk8ZGQ+c3RhbmRhcmQ8L2RkPgoJCTxkZD5yZWN1cjwvZGQ+CgkJPGRkPm11bHRpPC9kZD4K CTwvZGw+PC9kZD4KCQk8ZGQ+RGVmYXVsdDogPGNvZGU+c3RhbmRhcmQ8L2NvZGU+PC9kZD4K CQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmlkPC9zcGFuPjwvZHQ+CgkJPGRkPjxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBJRCB0byBhcHBseSB0byB0aGUgdGFibGUgdGhhdCBo b2xkcyB0aGUgY2FsZW5kYXIuIFRoaXMgYmVjb21lcyB0aGUgdmFsdWUgb2YgdGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIDxjb2RlPmNhbGlkPC9jb2RlPjwv ZGQ+CgkJPGRkPlVzZSB0aGlzIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgY2FsZW5kYXIg b24gYSBwYWdlIGFuZCB3aXNoIHRvIGNvbnRyb2wgdGhlbSBzZXBhcmF0ZWx5IHZpYSB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyczwvZGQ+CgkJPGR0PjxzcGFuIGNs YXNzPSJhdG5tIj5uYXZpZDwvc3Bhbj48L2R0PgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+ SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHByZXYvbmV4dC9tb250aC95ZWFyIG5h dmlnYXRpb24gZm9ybTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyd2lkdGg8 L3NwYW4+PC9kdD4KCQk8ZGQ+QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCB0aGF0IHNwZWNpZmll cyBob3cgbWFueSB5ZWFycyB5b3VyIGNhbGVuZGFyIHNwYW5zLiBWaXNpdG9ycyB3aWxsIG5v dCBiZSBwZXJtaXR0ZWQgdG8gbmF2aWdhdGUgKG5leHQvcHJldikgdGhlIGNhbGVuZGFyIG91 dHNpZGUgdGhpcyByYW5nZS4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+MDogdXNlIHRoZSBlYXJs aWVzdCAocG9zdGVkKSBldmVudCBhcyB0aGUgZWFybGllc3QgeWVhciwgYW5kIHRoZSBsYXRl c3QgKG1vZGlmaWVkIG9yIHBvc3RlZCwgd2hpY2hldmVyIGlzIGdyZWF0ZXIpIGV2ZW50IGFz IHRoZSBsYXRlc3QgeWVhcjwvZGQ+CgkJPGRkPmFueSBvdGhlciBzaW5nbGUgbnVtYmVyIGV4 cGFuZHMgdGhlIHJhbmdlIGVxdWFsbHkgaW4gcGFzdCAmYW1wOyBmdXR1cmUgZGlyZWN0aW9u czwvZGQ+CgkJPGRkPmFueSBwYWlyIG9mIG51bWJlcnMgc3VidHJhY3RzIHRoZSBmaXJzdCBm cm9tIHRoZSBlYXJsaWVzdCBldmVudCBhbmQgYWRkcyB0aGUgc2Vjb25kIG51bWJlciBvZiB3 aG9sZSB5ZWFycyB0byB0aGUgbGF0ZXN0IGV2ZW50PC9kZD4KCQk8ZGQ+YWRkaW5nIDxjb2Rl PmM8L2NvZGU+IHRvIGVpdGhlciB2YWx1ZSBjYXVzZXMgdGhlIGN1cnJlbnQgeWVhciB0byBi ZSB1c2VkIGluc3RlYWQgb2YgdGhlIGVhcmxpZXN0IG9yIGxhdGVzdCBldmVudDwvZGQ+Cgk8 L2RsPjwvZGQ+CgkJPGRkPkV4YW1wbGU6IDxjb2RlPnllYXJ3aWR0aD0mcXVvdDsyLDRjJnF1 b3Q7PC9jb2RlPiBzdWJ0cmFjdHMgMiB5ZWFycyBmcm9tIHRoZSBlYXJsaWVzdCBldmVudCBh bmQgYWRkcyA0IHdob2xlIHllYXJzIHRvIHRvZGF5JiM4MjE3O3MgZGF0ZTwvZGQ+CgkJPGRk PkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+cmVtYXA8L3NwYW4+ PC9kdD4KCQk8ZGQ+V2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzIG9uIGEg cGFnZSBpdCBpcyBvZnRlbiBiZW5lZmljaWFsIHRvIHVzZSBkaWZmZXJlbnQgbmFtZXMgZm9y IDxjb2RlPnc9PC9jb2RlPiwgPGNvZGU+bT08L2NvZGU+IG9yIDxjb2RlPnk9PC9jb2RlPiBp biB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc28geW91IGNhbiBuYXZpZ2F0 ZSBjYWxlbmRhcnMgaW5kaXZpZHVhbGx5LiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0 byByZW5hbWUgdGhlIHcsIG0sICZhbXA7IHkgdmFyaWFibGUgdG8gYW55IG5hbWUgc3BlY2lm aWVkIGFmdGVyIGEgY29sb24gKDopPC9kZD4KCQk8ZGQ+RXhhbXBsZTogPGNvZGU+cmVtYXA9 JnF1b3Q7dzp3aywgeTp5ciZxdW90OzwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+bGlua3Bvc3RlZDwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJpbXBvcnRhbnQiPm9ubHkg b24gc21hbGwgY2FsZW5kYXJzPC9zcGFuPik8L2R0PgoJCTxkZD5FYWNoIGNlbGwgdGhhdCBj b250YWlucyBhbiBldmVudCBmbGFnIG9mIHRoZSBnaXZlbiB0eXBlKHMpIHdpbGwgaGF2ZSBp dHMgZGF5IG51bWJlciBsaW5rZWQgdG8gdGhlIGV2ZW50JiM4MjE3O3MgdHJ1ZSBzdGFydCBk YXRlIGluc3RlYWQgb2YgdGhlIGNlbGwmIzgyMTc7cyBkYXRlLiBUaGlzIGFsbG93cyB5b3Ug dG8gYWx3YXlzIGxpbmsgdG8gYSB2YWxpZCBhcnRpY2xlL2V2ZW50PC9kZD4KCQk8ZGQ+Tm90 ZSB0aGF0IGlmIG1vcmUgdGhhbiBvbmUgZXZlbnQgb2NjdXJzIGluIHRoZSBjZWxsLCB0aGUg bGluayB3aWxsIG9ubHkgYmUgdG8gdGhlIGZpcnN0IGV2ZW50IHRoZSBwbHVnaW4gZmluZHM8 L2RkPgoJCTxkZD5FeGFtcGxlOiBpZiB5b3UgaGF2ZSBhIHdlZWtseSBldmVudCB0aGF0IHN0 YXJ0cyBvbiB0aGUgMjB0aCBEZWNlbWJlciAyMDA4LCBzZXR0aW5nIDxjb2RlPmxpbmtwb3N0 ZWQ9JnF1b3Q7cmVjdXImcXVvdDs8L2NvZGU+IHdpbGwgY2F1c2UgdGhlIGxpbmsgdG8gYmUg PGNvZGU+ZGF0ZT0yMDA4LTEyLTIwPC9jb2RlPiBldmVyeSB3ZWVrLiBXaXRob3V0IGxpbmtw b3N0ZWQsIHRoZSBkYXRlcyB3b3VsZCBiZSAyMDA4LTEyLTIwLCAyMDA4LTEyLTI3LCAyMDA5 LTAxLTAzLCBhbmQgc28gb248L2RkPgoJCTxkZD5EZWZhdWx0OiA8Y29kZT5yZWN1ciwgbXVs dGksIG11bHRpcHJldiwgbXVsdGlsYXN0PC9jb2RlPiAoaS5lLiBhbnkgcmVjdXJyaW5nIG9y IHNwYW5uZWQgZXZlbnQpPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm1haW50YWlu PC9zcGFuPjwvZHQ+CgkJPGRkPktlZXAgdHJhY2sgb2YgdGhpcyBjb21tYS1zZXBhcmF0ZWQg bGlzdCBvZiB2YXJpYWJsZXMgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IHdoZW4gbmF2aWdhdGluZyB0aGUgY2FsZW5kYXIgdXNpbmcgdGhlIG5leHQvcHJldiBvciBt b250aC95ZWFyIHNlbGVjdCBsaXN0cy4gSWYgeW91IHdpc2ggdG8gbWFpbnRhaW4gc3RhdGUg eW91cnNlbGYgb3IgZG8gc29tZXRoaW5nIGV4b3RpYywgZW1wdHkgdGhpcyBhdHRyaWJ1dGUg Zmlyc3QgdG8gYXZvaWQgd2VpcmRuZXNzLiBPcHRpb25zOgoJPGRsPgoJCTxkZD5jYWxpZDwv ZGQ+CgkJPGRkPnNlY3Rpb248L2RkPgoJCTxkZD5jYXRlZ29yeTwvZGQ+CgkJPGRkPmF1dGhv cjwvZGQ+CgkJPGRkPmFydGljbGU8L2RkPgoJCTxkZD5kYXRlPC9kZD4KCQk8ZGQ+cGc8L2Rk PgoJCTxkZD5hbnkgb3RoZXIgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdmFyaWFi bGUgb2YgeW91ciBjaG9vc2luZzwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkV4YW1wbGU6IHVz ZSA8Y29kZT5tYWludGFpbj0mcXVvdDtzZWN0aW9uLCBhcnRpY2xlLCBjYWxpZCZxdW90Ozwv Y29kZT4gaWYgeW91IGhhdmUgYW4gaW5kaXZpZHVhbCBhcnRpY2xlIHBhZ2Ugd2l0aCBhIGNh bGVuZGFyIGluIGEgc2lkZWJhciwgc28gdGhlIGN1cnJlbnRseSB2aWV3ZWQgYXJ0aWNsZSB3 aWxsIHJlbWFpbiBpbiB2aWV3IHdoZW4gY2hhbmdpbmcgZGF0ZTwvZGQ+CgkJPGRkPkRlZmF1 bHQ6IGNhbGlkPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm5hbWV2YWw8L3NwYW4+ PC9kdD4KCQk8ZGQ+QWRkIHlvdXIgb3duIG5hbWUvdmFsdWUgcGFpcnMgdG8gdGhlIGNhbGVu ZGFyJiM4MjE3O3MgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uPC9kZD4KCQk8ZGQ+ RXhhbXBsZTogPGNvZGU+bmFtZXZhbD0mcXVvdDt0cmFja2VyPW15Y2FsLCBrZWVwPTEmcXVv dDs8L2NvZGU+IHdvdWxkIGFkZCA8Y29kZT4/dHJhY2tlcj1teWNhbCZhbXA7a2VlcD0xPC9j b2RlPiB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIFVzZWZ1bCBpZiB5 b3Ugd2FudCB0byA8Y29kZT5tYWludGFpbjwvY29kZT4gc29tZSB2YWx1ZXMgd2hpY2ggeW91 IGNhbiYjODIxNzt0IGFkZCB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g b24gcGFnZSBsb2FkPC9kZD4KCTwvZGw+CgoJPGgzIGNsYXNzPSJhdHRzIj5TdHlsZSBhdHRy aWJ1dGVzPC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzc2xldmVs czwvc3Bhbj48L2R0PgoJCTxkZD5FYWNoIGZsYWdnZWQgZXZlbnQgY2FuIGJlIGdpdmVuIGEg PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgYmFzZWQgb24gaXRzIGZsYWcg bmFtZShzKS4gQ2xhc3NlcyBjYW4gYmUgYXBwbGllZCB0byBldmVudHMsIGNlbGxzLCBvciBi b3RoLiBZb3UgbWF5IGFsc28gcHJvbW90ZSAoaS5lLiBjb3B5KSBhbGwgZXZlbnQgY2xhc3Nl cyB0aGF0IG9jY3VyIGluIGEgZGF5IHRvIHRoZSBjZWxsIGl0c2VsZiBzbyB5b3UgY2FuIHN0 eWxlIHRoZSBjZWxsIGJhc2VkIG9uIHRoZSBldmVudHMgaXQgY29udGFpbnMuIE9wdGlvbnM6 Cgk8ZGw+CgkJPGRkPmV2ZW50PC9kZD4KCQk8ZGQ+Y2VsbDwvZGQ+CgkJPGRkPmNlbGxwbHVz IChmb3IgY29weWluZyB1bmlxdWUgZXZlbnQgY2xhc3NlcyB0byB0aGUgY29udGFpbmluZyBj ZWxsKTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPk5vdGUgeW91IHNob3VsZCBub3QgdXNlIDxj b2RlPmNlbGw8L2NvZGU+IGFuZCA8Y29kZT5jZWxscGx1czwvY29kZT4gdG9nZXRoZXIgYmVj YXVzZSB0aGUgbGF0dGVyIG92ZXJyaWRlcyB0aGUgZm9ybWVyPC9kZD4KCQk8ZGQ+RGVmYXVs dDogY2VsbCwgZXZlbnQ8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3NwcmVm aXhlczwvc3Bhbj48L2R0PgoJCTxkZD5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1cCB0byB0 d28gcHJlZml4ZXMgdG8gYXBwbHkgdG8geW91ciBjbGFzcyBuYW1lcy4gVGhlIGZpcnN0IHBy ZWZpeCBpcyBhcHBsaWVkIHRvIGNlbGwtbGV2ZWwgY2xhc3NlcyAoYW5kIGZsYWdzKSBhbmQg dGhlIHNlY29uZCBwcmVmaXggaXMgYXBwbGllZCB0byBldmVudCBjbGFzc2VzIChzZWUgPGNv ZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPik8L2RkPgoJCTxkZD5JZiB5b3Ugb25seSBzcGVjaWZ5 IG9uZSBwcmVmaXgsIGl0IHdpbGwgYmUgdXNlZCBmb3IgYm90aC4gSWYgeW91IHVzZSA8Y29k ZT5jbGFzc3ByZWZpeGVzPSZxdW90OyZxdW90OzwvY29kZT4gdGhlbiBubyBwcmVmaXhlcyB3 aWxsIGJlIHVzZWQgYXQgYWxsPC9kZD4KCQk8ZGQ+RGVmYXVsdDogc21kX2NhbF8sIHNtZF9j YWxfZXZfPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPjwvZHQ+ CgkJPGRkPkNsYXNzIG5hbWUgb2YgdGhlIGNhbGVuZGFyIHRhYmxlIGl0c2VsZjwvZGQ+CgkJ PGRkPkRlZmF1bHQ6IHVuc2V0PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnJvd2Ns YXNzPC9zcGFuPjwvZHQ+CgkJPGRkPkNsYXNzIG5hbWUgb2YgZWFjaCB0YWJsZSByb3c8L2Rk PgoJCTxkZD5EZWZhdWx0OiB1bnNldDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5j ZWxsY2xhc3M8L3NwYW4+PC9kdD4KCQk8ZGQ+Q2xhc3MgbmFtZSBvZiBlYWNoIHRhYmxlIGNl bGw8L2RkPgoJCTxkZD5EZWZhdWx0OiB1bnNldDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5lbXB0eWNsYXNzPC9zcGFuPjwvZHQ+CgkJPGRkPkNsYXNzIG5hbWUgb2YgYW55IGNl bGxzIHRoYXQgZG9uJiM4MjE3O3QgY29udGFpbiBhIGRheSBudW1iZXIgKGkuZS4gdGhlIGJs YW5rIGNlbGxzIGF0IHRoZSBzdGFydCAmYW1wOyBlbmQgb2YgYSBtb250aCk8L2RkPgoJCTxk ZD5EZWZhdWx0OiBlbXB0eTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5pc293ZWVr Y2xhc3M8L3NwYW4+PC9kdD4KCQk8ZGQ+Q2xhc3MgbmFtZSBvZiBlYWNoIGNlbGwgY29udGFp bmluZyBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrPC9kZD4KCQk8ZGQ+ RGVmYXVsdDogd2VlazwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5uYXZjbGFzczwv c3Bhbj48L2R0PgoJCTxkZD5DbGFzcyBuYW1lIG9mIHRoZSBwcmV2L25leHQgbW9udGggbmF2 IGFycm93cy4gSWYgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpcyB1c2VkLCB0aGUgZmlyc3Qg aXRlbSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvZiB0aGUgcHJldmlvdXMgbW9u dGgsIHRoZSAybmQgaXRlbSBvZiB0aGUgbmV4dCBtb250aC4gSWYgYSBzaW5nbGUgdmFsdWUg aXMgdXNlZCwgYm90aCBjbGFzcyBuYW1lcyB3aWxsIGJlIHRoZSBzYW1lPC9kZD4KCQk8ZGQ+ RGVmYXVsdDogbmF2cHJldiwgbmF2bmV4dDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5t Ij5teWNsYXNzPC9zcGFuPjwvZHQ+CgkJPGRkPkNsYXNzIG5hbWUgb2YgYm90aCB0aGUgbW9u dGggYW5kIHllYXIgaW4gdGhlIGNhbGVuZGFyIGhlYWRlciAoZWl0aGVyIHRoZSA8Y29kZT4m bHQ7c3BhbiZndDs8L2NvZGU+IG9yIDxjb2RlPiZsdDtzZWxlY3QmZ3Q7PC9jb2RlPiB0YWdz KS4gSWYgPGNvZGU+bXl3cmFwdGFnPC9jb2RlPiBpcyB1c2VkLCB0aGUgY2xhc3MgaXMgYXBw bGllZCB0byB0aGUgd3JhcHRhZyBpbnN0ZWFkPC9kZD4KCQk8ZGQ+RGVmYXVsdDogdW5zZXQ8 L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnRjbGFzc2VzPC9zcGFuPjwvZHQ+ CgkJPGRkPkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zIHRvIGFkZCBhcyBjbGFzc2Vz IHRvIGVhY2ggZXZlbnQuIEVhY2ggYXJlIHByZWZpeGVkIHdpdGggdGhlIGV2ZW50IHByZWZp eDwvZGQ+CgkJPGRkPkV4YW1wbGU6IDxjb2RlPmV2ZW50Y2xhc3Nlcz0mcXVvdDtJRCwgQXV0 aG9ySUQsIGN1c3RvbV81JnF1b3Q7PC9jb2RlPiB3b3VsZCBhZGQgdGhyZWUgY2xhc3NlcyB0 byBlYWNoIGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV2ZW50JiM4MjE3O3MgSUQsIGl0 cyBhdXRob3IgKGxvZ2luKSBuYW1lIGFuZCB0aGUgY29udGVudHMgb2YgY3VzdG9tXzU8L2Rk PgoJCTxkZD5JZiB5b3UgdXNlIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiwgdGhlc2UgY2xhc3Nl cyB3aWxsIGJlIGNvcGllZCB0byB0aGUgY2VsbCBsZXZlbC4gU29tZSBzcGVjaWFsIG5hbWVz IGV4aXN0OiA8Y29kZT5jYXRlZ29yeTwvY29kZT4gYWRkcyBib3RoIENhdGVnb3J5MSBhbmQg Q2F0ZWdvcnkyIChpZiBzZXQpOyA8Y29kZT5nY2F0PC9jb2RlPiB3aWxsIGFkZCB0aGUgY3Vy cmVudCAmIzgyMTY7Z2xvYmFsJiM4MjE3OyBjYXRlZ29yeSAoaWYgZmlsdGVyaW5nIGJ5IGNh dGVnb3J5KTsgPGNvZGU+YXV0aG9yPC9jb2RlPiBhZGRzIHRoZSBhdXRob3IgSUQgKGlmIGZp bHRlcmluZyBieSBhdXRob3IpOyA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhZGRzIHRoZSBjdXJy ZW50IHNlY3Rpb248L2RkPgoJCTxkZD5EZWZhdWx0OiBjYXRlZ29yeTwvZGQ+CgkJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5ldmVudHdyYXB0YWc8L3NwYW4+PC9kdD4KCQk8ZGQ+KFgpSFRN TCB0YWcsIHdpdGhvdXQgYnJhY2tldHMsIHRvIHdyYXAgZWFjaCBldmVudCB3aXRoPC9kZD4K CQk8ZGQ+RGVmYXVsdDogc3BhbjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5teXdy YXB0YWc8L3NwYW4+PC9kdD4KCQk8ZGQ+KFgpSFRNTCB0YWcsIHdpdGhvdXQgYnJhY2tldHMs IHRvIHdyYXAgYXJvdW5kIDxlbT5ib3RoPC9lbT4gbW9udGggKyB5ZWFyIGRyb3Bkb3duIHNl bGVjdCBsaXN0cyBhbmQgc3VibWl0IGJ1dHRvbjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHVuc2V0 PC9kZD4KCTwvZGw+CgoJPGgzIGlkPSJjZWxsZm9ybSI+VXNpbmcgYSA8Y29kZT5jZWxsZm9y bTwvY29kZT4gd2l0aCByZXBsYWNlbWVudCB2YXJpYWJsZXM8L2gzPgoKCTxwPklmIHlvdSBk b24mIzgyMTc7dCBsaWtlIHRoZSBsYXlvdXQgb2YgdGhlIGRlZmF1bHQgY2VsbCwgeW91IGNh biBkbyBpdCB5b3Vyc2VsZiB3aXRoIHRoZSA8Y29kZT5jZWxsZm9ybTwvY29kZT4gYXR0cmli dXRlLiBUaGUgY2VsbHMgYXJlIGdlbmVyYXRlZCA8ZW0+bGFzdDwvZW0+LCBzbyBieSB0aGUg dGltZSB0aGUgcGx1Z2luIHJlYWNoZXMgdGhpcyBhdHRyaWJ1dGUsIGFsbCBldmVudHMgaGF2 ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGJ5IGFueSBvZiB5b3VyIGZvcm1zL2NvbnRhaW5l cnMuIFRodXMgeW91IGNhbiYjODIxNzt0IHVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBhcnRpY2xlIG9yIHBsdWdpbiB0YWdzLjwvcD4KCgk8cD5UbyBidWlsZCB5b3VyIG93 biBjZWxscyB5b3Ugb2Z0ZW4gbmVlZCBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBldmVudHMg dGhhdCBmYWxsIG9uIGEgcGFydGljdWxhciBkYXk7IG9yIHRoZSB3ZWVrLCBtb250aCBvciBk YXkgbnVtYmVycywgZXRjLiBTbyB5b3UgbWF5IGFsc28gaW5zZXJ0IGFueSBvZiB0aGUgZm9s bG93aW5nIHJlcGxhY2VtZW50cyB0byBoYXZlIHRoZSByZWxldmFudCB2YWx1ZSBpbnNlcnRl ZCBhbW9uZyB5b3VyIG1hcmt1cDo8L3A+CgoJPHVsPgoJCTxsaT57ZGF5fSAvIHtkYXl6ZXJv c30gOiBkYXkgb2YgdGhlIHdlZWsgKDEtMzEgLyAwMS0zMSk8L2xpPgoJCTxsaT57d2Vla2Rh eX0gOiB3ZWVrZGF5IGluIHRoZSBsb2NhbCBsYW5ndWFnZSwgb3IgZnJvbSB5b3VyIDxjb2Rl PmRheWZvcm1hdDwvY29kZT4gbGlzdDwvbGk+CgkJPGxpPnt3ZWVrZGF5ZnVsbH0gb3Ige3dl ZWtkYXlhYmJyfSA6IHdlZWtkYXkgaW4gdGhlIGxvY2FsIGxhbmd1YWdlPC9saT4KCQk8bGk+ e3dlZWt9IDogPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBudW1iZXIgKDAx LTUzKTwvbGk+CgkJPGxpPnttb250aH0gLyB7bW9udGh6ZXJvc30gOiBtb250aCBudW1iZXIg KDEtMTIgLyAwMS0xMik8L2xpPgoJCTxsaT57bW9udGhuYW1lfSA6IG1vbnRoIG5hbWUgaW4g dGhlIGxvY2FsIGxhbmd1YWdlLCBvciBmcm9tIHlvdXIgPGNvZGU+bW9udGhmb3JtYXQ8L2Nv ZGU+IGxpc3Q8L2xpPgoJCTxsaT57bW9udGhuYW1lZnVsbH0gb3Ige21vbnRobmFtZWFiYnJ9 IDogbW9udGggbmFtZSBpbiB0aGUgbG9jYWwgbGFuZ3VhZ2U8L2xpPgoJCTxsaT57eWVhcn0g OiA0LWRpZ2l0IHllYXI8L2xpPgoJCTxsaT57c2hvcnR5ZWFyfSA6IDItZGlnaXQgeWVhcjwv bGk+CgkJPGxpPntpc295ZWFyfSA6IDQgZGlnaXQgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwv c3Bhbj4geWVhcjwvbGk+CgkJPGxpPntzaG9ydGlzb3llYXJ9IDogMiBkaWdpdCA8c3BhbiBj bGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB5ZWFyPC9saT4KCQk8bGk+e2V2aWR9IDogZXZlbnQg KGFydGljbGUpIElEPC9saT4KCQk8bGk+e2V2ZW50c30gOiBhbGwgZXZlbnRzIGZvciB0aGUg ZGF5PC9saT4KCQk8bGk+e3N0YW5kYXJkfSA6IG9ubHkgc3RhbmRhcmQgZXZlbnRzPC9saT4K CQk8bGk+e3JlY3VyZmlyc3R9IC8ge3JlY3VyfSA6IHZhcmlvdXMgcmVjdXJyaW5nIGV2ZW50 czwvbGk+CgkJPGxpPnthbGxyZWN1cn0gOiBhbGwgcmVjdXJyaW5nIGV2ZW50cyBmb3IgdGhl IGRheTwvbGk+CgkJPGxpPnttdWx0aWZpcnN0fSAvIHttdWx0aX0gLyB7bXVsdGlwcmV2fSAv IHttdWx0aWxhc3R9IDogdmFyaW91cyBtdWx0aSBldmVudHM8L2xpPgoJCTxsaT57YWxsbXVs dGl9IDogYWxsIG11bHRpIGV2ZW50cyBmb3IgdGhlIGRheTwvbGk+CgkJPGxpPntjYW5jZWx9 IDogb25seSBjYW5jZWxsZWQgZXZlbnRzPC9saT4KCQk8bGk+e2V4dHJhfSA6IG9ubHkgZXh0 cmEgZXZlbnRzPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJoZHJmb3JtIj5Vc2luZyBhIDxjb2Rl PmhlYWRlcmZvcm08L2NvZGU+PC9oMz4KCgk8cD5Zb3UgY2FuIGNyZWF0ZSB5b3VyIG93biBo ZWFkZXIgaWYgeW91IHdpc2ggYW5kIGVtcGxveSBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXBs YWNlbWVudHMgaW4gdGhlIG1hcmt1cDo8L3A+CgoJPHVsPgoJCTxsaT57Zmlyc3RkYXl9IDog Y3VycmVudCB3ZWVrZGF5IChhcyBhIG51bWJlciBmcm9tIDAgdG8gNik8L2xpPgoJCTxsaT57 ZGF5bmFtZXN9IDogY29tbWEtc2VwYXJhdGVkIGRheSBuYW1lczwvbGk+CgkJPGxpPntpc293 ZWVraGVhZH0gOiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGhlYWRpbmc8 L2xpPgoJCTxsaT57d2Vla30gOiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVr PC9saT4KCQk8bGk+e21vbnRofSA6IG1vbnRoPC9saT4KCQk8bGk+e3llYXJ9IDogeWVhcjwv bGk+CgkJPGxpPntpc295ZWFyfSA6IDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHll YXI8L2xpPgoJPC91bD4KCgk8aDMgaWQ9InNpemVkaWZmIj5EaWZmZXJlbmNlcyBiZXR3ZWVu IGxhcmdlIGFuZCBzbWFsbCBjYWxlbmRhcnM8L2gzPgoKCTx1bD4KCQk8bGk+PGNvZGU+Y2Vs bGZvcm08L2NvZGU+IGNhbm5vdCBiZSB1c2VkIG9uIGEgc21hbGwgY2FsZW5kYXI8L2xpPgoJ CTxsaT5CeSBkZWZhdWx0LCBubyBldmVudCBkZXNjcmlwdGlvbnMgYXJlIHBsYWNlZCBpbiB0 aGUgc21hbGwgY2FsZW5kYXIuIFlvdSBjYW4gYWRkIHRoZW0geW91cnNlbGYgaWYgeW91IHdp c2ggdXNpbmcgYSBmb3JtL2NvbnRhaW5lcjwvbGk+CgkJPGxpPlRoZSBvbmx5IHRoaW5nIHJl bmRlcmVkIGluIGEgc21hbGwgY2FsZW5kYXIgY2VsbCBpcyB0aGUgaHlwZXJsaW5rZWQgZGF0 ZSBhbmQgYW55IGZsYWdzIHNvIHlvdSBjYW4gc3R5bGUgdGhlIGJveGVzPC9saT4KCQk8bGk+ PGNvZGU+Y2xhc3NsZXZlbHM8L2NvZGU+IGFyZSBpZ25vcmVkOiBldmVyeXRoaW5nIGlzIGF1 dG9tYXRpY2FsbHkgYXNzaWduZWQgYXQgdGhlIGNlbGwgbGV2ZWwgKGkuZS4gPGNvZGU+Y2Vs bHBsdXM8L2NvZGU+IGlzIHNldCk8L2xpPgoJCTxsaT48Y29kZT5ldmVudGNsYXNzZXM8L2Nv ZGU+IGFyZSBzdGlsbCBob25vdXJlZCBpZiB5b3Ugd2lzaCB0byB1c2UgYSBmb3JtIHRvIHBy b2Nlc3MgdGhlbSB5b3Vyc2VsZjwvbGk+CgkJPGxpPlRoZSBzbWFsbCBjYWxlbmRhciBvdXRw dXRzIHllYXItbW9udGgtZGF5LXRpdGxlIG9yIG1lc3N5IHBlcm1saW5rcyBvbmx5PC9saT4K CTwvdWw+CgoJPGgyIGlkPSJpZmNhbCI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9jYWwm Z3Q7PC9jb2RlPjwvaDI+CgoJPHA+VGhpcyBjb25kaXRpb25hbCB0YWcgYWxsb3dzIHlvdSAm IzgyMTI7IGluc2lkZSB5b3VyIGNvbnRhaW5lci9mb3JtcyAgJiM4MjEyOyB0byB0ZXN0IGNl cnRhaW4gY29uZGl0aW9ucyBvZiB0aGUgY3VycmVudCBldmVudC9jZWxsLiBGb3IgZW5oYW5j ZWQgY29uZGl0aW9uYWwgY2hlY2tpbmcgKHBlcmhhcHMgaW4gY29uanVuY3Rpb24gd2l0aCA8 YSBocmVmPSIjY2Fsbm93Ij5zbWRfY2FsX25vdzwvYT4pLCBjb25zaWRlciB0aGUgc21kX2lm IHBsdWdpbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdW5zZXQgdW5sZXNzIHN0YXRlZCBvdGhl cndpc2UuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyIgaWQ9ImF0dHNpZmNhbCI+QXR0cmlidXRl czwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZmxhZzwvc3Bhbj48L2R0 PgoJCTxkZD5UaGUgY2VsbCBvciBldmVudCBmbGFnKHMpIHlvdSB3YW50IHRvIHRlc3QsIGVh Y2ggc2VwYXJhdGVkIGJ5IGEgY29tbWEuIExpc3Qgb25lIG9yIG1vcmUgb2Y6Cgk8ZGw+CgkJ PGRkPmV2ZW50PC9kZD4KCQk8ZGQ+c3RhbmRhcmQ8L2RkPgoJCTxkZD5yZWN1cmZpcnN0PC9k ZD4KCQk8ZGQ+cmVjdXI8L2RkPgoJCTxkZD5tdWx0aWZpcnN0PC9kZD4KCQk8ZGQ+bXVsdGk8 L2RkPgoJCTxkZD5tdWx0aWxhc3Q8L2RkPgoJCTxkZD5tdWx0aXByZXY8L2RkPgoJCTxkZD5j YW5jZWw8L2RkPgoJCTxkZD5vbWl0PC9kZD4KCQk8ZGQ+ZXh0cmE8L2RkPgoJCTxkZD5ob2xz PC9kZD4KCQk8ZGQ+dG9kYXk8L2RkPgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+U01EPC9z cGFuPl9BTlkgKHdpbGwgdHJpZ2dlciBpZiB0aGUgY2VsbCBvciBldmVudCBjb250YWlucyBh bnkgb2YgdGhlIGFib3ZlKTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5jYWxpZDwvc3Bhbj48L2R0PgoJCTxkZD5UaGUgY2FsZW5kYXIgSUQgeW91IHdpc2gg dG8gY2hlY2sgZm9yIGEgbWF0Y2g8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+eWVh cjwvc3Bhbj48L2R0PgoJCTxkZD5UaGUgeWVhciB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGlu PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3llYXI8L3NwYW4+PC9kdD4KCQk8 ZGQ+VGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHllYXIgdGhlIGN1cnJlbnQg Y2VsbCBmYWxscyBpbjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aDwvc3Bh bj48L2R0PgoJCTxkZD5UaGUgbW9udGggbnVtYmVyICgxLTEyKSB0aGF0IHRoZSBjdXJyZW50 IGNlbGwgZmFsbHMgaW48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+d2Vlazwvc3Bh bj48L2R0PgoJCTxkZD5UaGUgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBu dW1iZXIgdGhhdCB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGluPC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPmRheTwvc3Bhbj48L2R0PgoJCTxkZD5UaGUgZGF5IG51bWJlciB0aGUg Y3VycmVudCBjZWxsIGZhbGxzIGluPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmxv Z2ljPC9zcGFuPjwvZHQ+CgkJPGRkPk1ldGhvZCBvZiBjb21iaW5pbmcgdGhlIG5vbWluYXRl ZCB0ZXN0cy4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+b3I6IHRhZyB3aWxsIHRyaWdnZXIgaWYg YXQgbGVhc3Qgb25lIG9mIHRoZSB0ZXN0cyBpcyB0cnVlPC9kZD4KCQk8ZGQ+YW5kOiB0YWcg d2lsbCBvbmx5IHRyaWdnZXIgaWYgYWxsIHRoZSB0ZXN0cyBhcmUgdHJ1ZTwvZGQ+Cgk8L2Rs PjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IG9yPC9kZD4KCTwvZGw+CgoJPHA+JiM4MjE2O0FuZCYj ODIxNzsgbG9naWMgaXMgdXNlZnVsIGZvciBjaGVja2luZyBpZiB0aGUgY2VsbCBpcyBvZiBh IGNlcnRhaW4gdHlwZSA8c3BhbiBjbGFzcz0iY2FwcyI+QU5EPC9zcGFuPiBpcyBsYXRlciB0 aGFuIHRoZSAxNXRoIG9mIHRoZSBtb250aCwgZm9yIGV4YW1wbGUuPC9wPgoKCTxwPlJ1ZGlt ZW50YXJ5IGNvbXBhcmF0b3JzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSA8Y29kZT4oaXNvKXll YXI8L2NvZGU+LCA8Y29kZT5tb250aDwvY29kZT4sIDxjb2RlPndlZWs8L2NvZGU+IGFuZCA8 Y29kZT5kYXk8L2NvZGU+IGF0dHJpYnV0ZXMuIE5vcm1hbGx5IHRoZSB2YWx1ZSB5b3Ugc3Vw cGx5IHdpbGwgYmUgdGVzdGVkIGZvciBhbiBleGFjdCBtYXRjaCBidXQgaWYgeW91IHByZWZp eCBpdCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhl biB0aGUgYmVoYXZpb3VyIGNoYW5nZXM6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+Jmd0Ozwv Y29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gdmFs dWUgKGUuZy4gPGNvZGU+eWVhcj0mcXVvdDsmZ3Q7MjAwOCZxdW90OzwvY29kZT4pPC9saT4K CQk8bGk+PGNvZGU+Jmd0Oz08L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyBncmVhdGVy IHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPm1vbnRoPSZx dW90OyZndDs9NyZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PGNvZGU+Jmx0OzwvY29kZT4g dGVzdHMgaWYgYXR0cmlidXRlIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gdmFsdWU8L2xpPgoJ CTxsaT48Y29kZT4mbHQ7PTwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIGxlc3MgdGhh biBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWU8L2xpPgoJCTxsaT48Y29kZT4hPC9jb2Rl PiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMgPGVtPm5vdDwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAo ZS5nLiA8Y29kZT5kYXk9JnF1b3Q7ITE1JnF1b3Q7PC9jb2RlPik8L2xpPgoJPC91bD4KCgk8 aDIgaWQ9ImNhbGluZm8iPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2luZm8gLyZndDs8 L2NvZGU+PC9oMj4KCgk8cD5JbnNpZGUgeW91ciBzbWRfY2FsZW5kYXIgY29udGFpbmVyL2Zv cm1zLCB1c2UgdGhpcyB0YWcgdG8gb3V0cHV0IGNlcnRhaW4gaW5mb3JtYXRpb24gYWJvdXQg dGhlIGN1cnJlbnQgZXZlbnQuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2Fs aW5mbyI+QXR0cmlidXRlczwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ dHlwZTwvc3Bhbj48L2R0PgoJCTxkZD5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0eXBlcyBv ZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byBkaXNwbGF5LiBPcHRpb25zOgoJPGRsPgoJCTxk ZD5mbGFnPC9kZD4KCQk8ZGQ+Y2FsaWQ8L2RkPgoJCTxkZD4oaXNvKXllYXI8L2RkPgoJCTxk ZD5tb250aDwvZGQ+CgkJPGRkPndlZWs8L2RkPgoJCTxkZD5kYXk8L2RkPgoJCTxkZD5zIChj dXJyZW50IHNlY3Rpb24pPC9kZD4KCQk8ZGQ+Y2F0ZWdvcnk8L2RkPgoJCTxkZD5hdXRob3I8 L2RkPgoJCTxkZD5yZWFsbmFtZTwvZGQ+CgkJPGRkPmFydGljbGUgKGlkIG9mIHRoZSBjdXJy ZW50bHkgdmlld2VkIGFydGljbGUpPC9kZD4KCQk8ZGQ+YW55IG90aGVyIGFydGljbGUgdmFy aWFibGUgc3VjaCBhcyA8Y29kZT5zZWN0aW9uPC9jb2RlPiAodGhlIGN1cnJlbnQgYXJ0aWNs ZSYjODIxNztzIHNlY3Rpb24pLCA8Y29kZT5hdXRob3JpZDwvY29kZT4sIDxjb2RlPmFydGlj bGVfaW1hZ2U8L2NvZGU+LCBldGM8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5JZiB1c2luZyB0 aGUgPGNvZGU+aHRtbDwvY29kZT4gYXR0cmlidXRlLCB5b3UgbWF5IG9wdGlvbmFsbHkgc3Bl Y2lmeSB0aGUgbmFtZSB5b3Ugd2FudCB0aGUgdmFyaWFibGUgdG8gYXBwZWFyIGFzIGluIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBzdHJpbmcuIFRoZSB2YXJpYWJsZXMg YWxsIHRha2Ugb24gc2Vuc2libGUgZGVmYXVsdHMgKGUuZy4gJiM4MjE2O3NlY3Rpb24mIzgy MTc7IGJlY29tZXMgPGNvZGU+P3M9Jmx0O3NlY3Rpb24gbmFtZSZndDs8L2NvZGU+LCAmIzgy MTY7Y2F0ZWdvcnkxJiM4MjE3OyBiZWNvbWVzIDxjb2RlPj9jPSZsdDtjYXRlZ29yeTEgbmFt ZSZndDs8L2NvZGU+LCBldGMpLjwvZGQ+CgkJPGRkPkV4YW1wbGU6IDxjb2RlPiZsdDt0eHA6 c21kX2NhbF9pbmZvIHR5cGU9JnF1b3Q7Y2F0Z2Vvcnk6dGhlX2NhdCZxdW90OyBodG1sPSZx dW90OzEmcXVvdDsgLyZndDs8L2NvZGU+IG1lYW5zIHlvdSB3b3VsZCBzZWUgPGNvZGU+P3Ro ZV9jYXQ9Jmx0O2NhdGVnb3J5MSBuYW1lJmd0OzwvY29kZT4gaW4gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+PC9kZD4KCQk8ZGQ+RGVmYXVsdDogZmxhZzwvZGQ+CgkJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj5qb2luPC9zcGFuPjwvZHQ+CgkJPGRkPlRoZSBjaGFyYWN0 ZXJzIHlvdSB3YW50IHRvIHVzZSB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0geW91IGFza2VkIGZv ci4gTm90ZSBpdCBpcyB0aGUgY2hhcmFjdGVycyA8ZW0+YmV0d2VlbjwvZW0+IGVhY2ggaXRl bSBzbyB0aGUgdmVyeSBmaXJzdCBlbnRyeSB3aWxsIDxzdHJvbmc+bm90PC9zdHJvbmc+IGhh dmUgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGluIGZyb250IG9mIGl0IChzZWUgPGNvZGU+am9p bl9wcmVmaXg8L2NvZGU+KTwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGEgc3BhY2U8L2RkPgoJCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+am9pbl9wcmVmaXg8L3NwYW4+PC9kdD4KCQk8ZGQ+VGhl IHN0cmluZyB5b3Ugd2FudCB0byBwdXQgaW4gZnJvbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4g dGhlIHJldHVybmVkIGxpc3QuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIGF0dHJpYnV0 ZSBpdCB0cmllcyB0byBiZSBjbGV2ZXI6Cgk8ZGw+CgkJPGRkPklmIHVzaW5nIDxjb2RlPnR5 cGU9JnF1b3Q7ZmxhZyZxdW90OzwvY29kZT4gdGhlIGpvaW5fcHJlZml4IGlzIHNldCB0byB0 aGUgc2FtZSBhcyA8Y29kZT5qb2luPC9jb2RlPi4gVGh1cyB3aXRoIDxjb2RlPmpvaW49JnF1 b3Q7IGNhbF8mcXVvdDs8L2NvZGU+IHlvdSBtaWdodCBnZXQgPGNvZGU+IGNhbF9tdWx0aSBj YWxfdG9kYXkgY2FsX2hvbHM8L2NvZGU+PC9kZD4KCQk8ZGQ+SWYgdXNpbmcgPGNvZGU+aHRt bD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0aGUgam9pbl9wcmVmaXggaXMgc2V0IHRvIGEgcXVl c3Rpb24gbWFyaywgdGh1czogPGNvZGU+dHlwZT0mcXVvdDttb250aCx5ZWFyLGNhdGVnb3J5 JnF1b3Q7IGh0bWw9JnF1b3Q7MSZxdW90OzwvY29kZT4gbWlnaHQgcmVuZGVyIDxjb2RlPj9t PTEyJmFtcDt5PTIwMDgmYW1wO2M9Z2lnczwvY29kZT4sIHdoaWNoIGNhbiBiZSBwdXQgc3Ry YWlnaHQgb24gdGhlIGVuZCBvZiBhbiBhbmNob3I8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5E ZWZhdWx0OiA8Y29kZT5TTURfQVVUTzwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+aHRtbDwvc3Bhbj48L2R0PgoJCTxkZD5Db250cm9sIGluIHdoaWNoIGZvcm1hdCB0 aGUgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPjA6IHJl dHVybiBpdGVtcyB2ZXJiYXRpbTwvZGQ+CgkJPGRkPjE6IHJldHVybiBpdGVtcyBhcyBhIDxz cGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBhcmFtZXRlciBzdHJpbmcuIFRoaXMgaXMg dXNlZnVsIGlmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBvd24gY29udGVudCBpbnNpZGUgZWFj aCBjZWxsIHZpYSBhIDxjb2RlPmZvcm08L2NvZGU+IGFuZCB3aXNoIHRvIG1haW50YWluIHRo ZSBjdXJyZW50IHNlYXJjaCBlbnZpcm9ubWVudC4gSWYgeW91IGFsbG93IHBlb3BsZSB0byBm aWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IG9yIGF1dGhvciB5b3UgY2FuIHVzZSB0aGlzIHRv IHJldHVybiB0aGUgJiM4MjE2O2N1cnJlbnQmIzgyMTc7IHN0YXRlIG9mIGNlcnRhaW4gdmFy aWFibGVzIHNvIHlvdSBjYW4gcGFzcyB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgYW5kIG1haW50 YWluIHN0YXRlPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+Tm90ZTogU2V0dGluZyB0aGlzIGF0 dHJpYnV0ZSB0byAxIG92ZXJyaWRlcyB0aGUgPGNvZGU+am9pbjwvY29kZT4gYXR0cmlidXRl IGFuZCBzZXRzIGl0IHRvIGFuIGFtcGVyc2FuZDwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2Rk PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXNjYXBlPC9zcGFuPjwvZHQ+CgkJPGRkPkVz Y2FwZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZW50aXRpZXMgc3VjaCBhcyA8 Y29kZT4mbHQ7PC9jb2RlPiwgPGNvZGU+Jmd0OzwvY29kZT4gYW5kIDxjb2RlPiZhbXA7PC9j b2RlPiBmb3IgcGFnZSB2YWxpZGF0aW9uIHB1cnBvc2VzLiBVc2UgPGNvZGU+ZXNjYXBlPSZx dW90OyZxdW90OzwvY29kZT4gdG8gdHVybiB0aGlzIG9mZjwvZGQ+CgkJPGRkPkRlZmF1bHQ6 IDxjb2RlPmh0bWw8L2NvZGU+PC9kZD4KCTwvZGw+CgoJPGgyIGlkPSJjYWxjbGFzcyI+VGFn OiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfY2xhc3MgLyZndDs8L2NvZGU+PC9oMj4KCgk8cD5J bnNpZGUgeW91ciBzbWRfY2FsZW5kYXQgY29udGFpbmVyL2Zvcm1zLCB1c2UgdGhpcyB0YWcg dG8gYWRkIGEgbGlzdCBvZiBjbGFzc2VzIHRvIHRoZSBjdXJyZW50IGNlbGwvZXZlbnQuIFZl cnkgdXNlZnVsIGlmIGJ1aWxkaW5nIGNlbGxzIHlvdXJzZWxmIGJlY2F1c2UgaW5zaWRlIGEg PGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbDwvYT4gdGFnIHlvdSBjb3VsZCBhZGQgcGFy dGljdWxhciBjbGFzcyBuYW1lcyBiYXNlZCBvbiBzb21lIHZhbHVlIGluIGEgY2VsbC48L3A+ CgoJPGgzIGNsYXNzPSJhdHRzICIgaWQ9ImF0dHNjYWxjbGFzcyI+QXR0cmlidXRlczwvaDM+ CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bmFtZTwvc3Bhbj48L2R0PgoJCTxk ZD5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc25hbWVzIHRvIGFkZCB0byB0aGUgY3Vy cmVudCBjZWxsL2V2ZW50LiBUaGVzZSBhcmUgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gc3ViamVj dCB0byBhbnkgPGNvZGU+Y2xhc3NwcmVmaXhlczwvY29kZT4gc28gd2lsbCBhbHdheXMgYXBw ZWFyIGV4YWN0bHkgYXMgeW91IHdyaXRlIHRoZW08L2RkPgoJCTxkZD5EZWZhdWx0OiB1bnNl dDwvZGQ+Cgk8L2RsPgoKCTxoMiBpZD0iY2Fsbm93Ij5UYWc6IDxjb2RlPiZsdDt0eHA6c21k X2NhbF9ub3cgLyZndDs8L2NvZGU+PC9oMj4KCgk8cD5SZXR1cm4gdGhlIGN1cnJlbnQgZGF0 ZS90aW1lLCBmb3JtYXR0ZWQgaG93ZXZlciB5b3UgcGxlYXNlLiBVc2VmdWwgZm9yIGV4dHJh Y3RpbmcgcGFydHMgb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWVzdGFtcCB0byBjb21wYXJl IHRoaW5ncyB2aWEgb3RoZXIgY29uZGl0aW9uYWwgcGx1Z2lucyBvciB0aGUgPGNvZGU+Jmx0 O3R4cDpzbWRfaWZfY2FsJmd0OzwvY29kZT4gdGFnLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMg IiBpZD0iYXR0c2NhbG5vdyI+QXR0cmlidXRlczwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+Zm9ybWF0PC9zcGFuPjwvZHQ+CgkJPGRkPlRoZSB3YXkgeW91IHdhbnQg dGhlIGRhdGUvdGltZSByZXByZXNlbnRlZC4gVXNlIGFueSB2YWxpZCA8YSBocmVmPSJodHRw Oi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0cmZ0aW1lKCk8L2E+IHN0cmluZy4gSGFzIGZ1 bGwgV2luZG93cyBzdXBwb3J0LCBldmVuIGZvciB0aG9zZSB2YWx1ZXMgd2hlcmUgc3RyZnRp bWUoKSBpbmRpY2F0ZXMgb3RoZXJ3aXNlPC9kZD4KCQk8ZGQ+RGVmYXVsdDogdGhlIGRhdGUg Zm9ybWF0IHNldCBpbiBCYXNpYyBQcmVmZXJlbmNlcy48L2RkPgoJCTxkdD48c3BhbiBjbGFz cz0iYXRubSI+bm93PC9zcGFuPjwvZHQ+CgkJPGRkPklmIHlvdSBkb24mIzgyMTc7dCB3YW50 IHRoZSB0aW1lIHRvIGJlICYjODIxNjtub3cmIzgyMTc7IHlvdSBjYW4gc3RhdGUgd2hhdCB0 aW1lICYjODIxNjtub3cmIzgyMTc7IGlzISBVc2UgYW55IHN0YW5kYXJkIGRhdGUvdGltZSBm b3JtYXQ8L2RkPgoJCTxkZD5Zb3UgbWF5IGFsc28gdXNlIHRoZSBjb2RlcyA8Y29kZT4/ZGF5 PC9jb2RlPiwgPGNvZGU+P21vbnRoPC9jb2RlPiBvciA8Y29kZT4/eWVhcjwvY29kZT4gaW4g eW91ciB0aW1lIHN0cmluZyB3aGljaCB3aWxsIGRvIG9uZSBvZiB0d28gdGhpbmdzOgoJPGRs PgoJCTxkZD5yZXBsYWNlIHRoZSBjb2RlcyB3aXRoIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPiBwYXJhbWV0ZXJzIDxjb2RlPmQ9PC9jb2RlPiwgPGNvZGU+bT08L2NvZGU+ IG9yIDxjb2RlPnk9PC9jb2RlPiwgaWYgdGhleSBhcmUgYmVpbmcgdXNlZDwvZGQ+CgkJPGRk PnVzZSB0aGUgY3VycmVudCBkYXksIG1vbnRoIG9yIHllYXIgKGkuZS4gdGhlIHBhcnRzIG9m IHRvZGF5JiM4MjE3O3MgZGF0ZSk8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiBu b3chICh0aGUgdGltZSBhdCB3aGljaCB5b3UgY2FsbCB0aGUgdGFnKTwvZGQ+CgkJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5vZmZzZXQ8L3NwYW4+PC9kdD4KCQk8ZGQ+QW4gb2Zmc2V0IGlu dG8gdGhlIGZ1dHVyZSB0aGF0IHlvdSB3aXNoIHRvIGFwcGx5IHRvIDxjb2RlPm5vdzwvY29k ZT48L2RkPgoJCTxkZD5FeGFtcGxlOiA8Y29kZT4yIG1vbnRoczwvY29kZT4uIFNlZSA8YSBo cmVmPSIjZWc2Ij5FeGFtcGxlIDY8L2E+IGZvciBhIHByYWN0aWNhbCBhcHBsaWNhdGlvbiBv ZiB0aGlzIGF0dHJpYnV0ZTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5nbXQ8L3Nw YW4+PC9kdD4KCQk8ZGQ+UmV0dXJuIGVpdGhlcjoKCTxkbD4KCQk8ZGQ+MDogbG9jYWwgdGlt ZSBhY2NvcmRpbmcgdG8gdGhlIHRpbWUgem9uZSBzZXQgaW4gQmFzaWMgUHJlZnM8L2RkPgoJ CTxkZD4xOiA8c3BhbiBjbGFzcz0iY2FwcyI+R01UPC9zcGFuPiB0aW1lPC9kZD4KCTwvZGw+ PC9kZD4KCQk8ZGQ+RGVmYXVsdDogMDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5s YW5nPC9zcGFuPjwvZHQ+CgkJPGRkPkFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+ IGxhbmd1YWdlIGNvZGUgdGhhdCBmb3JtYXRzIHRpbWUgc3RyaW5ncyBzdWl0YWJsZSBmb3Ig dGhlIHNwZWNpZmllZCBsYW5ndWFnZSAob3IgbG9jYWxlKSBhcyBkZWZpbmVkIGJ5IDxhIGhy ZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzYzOSI+PHNwYW4gY2xhc3M9 ImNhcHMiPklTTzwvc3Bhbj4gNjM5PC9hPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHVuc2V0IChp LmUuIHVzZSB0aGUgdmFsdWUgYXMgc3RhdGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IHByZWZzKTwvZGQ+Cgk8L2RsPgoKCTxoMiBpZD0iYXJ0ZXYiPlRhZzogPGNvZGU+ Jmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCAvJmd0OzwvY29kZT48L2gyPgoKCTxwPldoZW4g eW91IGNyZWF0ZSByZWN1cnJpbmcgZXZlbnRzLCB0aGV5IHJlYWxseSBvbmx5IGV4aXN0IG9u Y2UgYXMgYSBzaW5nbGUgYXJ0aWNsZTsgdGhlIHJlcGV0aXRpb24gaXMgYSB0cmljay4gVGh1 cyB0aGUgYnVpbHQtaW4gYXJ0aWNsZSB0YWdzIG9ubHkgc2hvdyB0aGUgc2luZ2xlLCByZWFs IGFydGljbGVzLjwvcD4KCgk8cD5UaGlzIHRhZyAmIzgyMTI7IHNpbWlsYXIgaW4gZnVuY3Rp b24gdG8gPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0OzwvY29kZT4gJiM4MjEy OyBhbGxvd3MgeW91IHRvIGxpc3QgcmVjdXJyaW5nIGFydGljbGVzIGFzIGlmIHRoZXkgd2Vy ZSAmIzgyMTY7cmVhbCYjODIxNzsgYXJ0aWNsZXMgaW4gdGhlIGRhdGFiYXNlLiA8c3BhbiBj bGFzcz0iaW1wb3J0YW50Ij5UaGV5IGRvbiYjODIxNzt0IGJlY29tZSByZWFsIGFydGljbGVz LCB0aGV5IGFyZSBqdXN0IGxpc3RlZCBhcyBzdWNoPC9zcGFuPi48L3A+CgoJPHA+SW5zaWRl IHRoZSB0YWcmIzgyMTc7cyA8Y29kZT5mb3JtPC9jb2RlPiBvciBjb250YWluZXIgeW91IGNh biB1c2UgYWxsIGV4aXN0aW5nIGFydGljbGUgdGFncyB0byBkaXNwbGF5IGFueSBpbmZvcm1h dGlvbiB5b3UgbGlrZSBhYm91dCBlYWNoICYjODIxNjt2aXJ0dWFsJiM4MjE3OyBhcnRpY2xl LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB1bnNldCB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZS48 L3A+CgoJPGgzPklkZW50aWNhbCBhdHRyaWJ1dGVzIHRvIDxhIGhyZWY9IiNzbWRjYWwiPnNt ZF9jYWxlbmRhcjwvYT46PC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5z dGVwZmllbGQ8L3NwYW4+PC9kdD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnNraXBmaWVs ZDwvc3Bhbj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+b21pdGZpZWxkPC9zcGFu PjwvZHQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5leHRyYWZpZWxkPC9zcGFuPjwvZHQ+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5kYXRlZmllbGRzPC9zcGFuPjwvZHQ+CgkJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uPC9zcGFuPjwvZHQ+CgkJPGR0PjxzcGFuIGNs YXNzPSJhdG5tIj5jYXRlZ29yeTwvc3Bhbj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+YXV0aG9yPC9zcGFuPjwvZHQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5yZWFsbmFt ZTwvc3Bhbj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c3RhdHVzPC9zcGFuPjwv ZHQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj50aW1lPC9zcGFuPjwvZHQ+CgkJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5leHBpcmVkPC9zcGFuPjwvZHQ+Cgk8L2RsPgoKCTxoMz5PdGhl ciBhdHRyaWJ1dGVzPC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwv c3Bhbj48L2R0PgoJCTxkZD5SZXN0cmljdCBldmVudHMgdG8gdGhpcyBsaXN0IG9mIGFydGlj bGUgSURzPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmN1c3RvbTwvc3Bhbj48L2R0 PgoJCTxkZD5TcGVjaWZ5IHlvdXIgb3duIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGN1c3Rv bSBmaWVsZCBjbGF1c2VzIHRvIHRoZSBxdWVyeS4gU2VwYXJhdGUgZWFjaCBmaWVsZCBmcm9t IGl0cyAob3B0aW9uYWwpIG9wZXJhdG9yIGFuZCBjbGF1c2Ugd2l0aCBhIGNvbG9uIChhbHRl cmFibGUgdmlhIDxjb2RlPnBhcmFtX2RlbGltPC9jb2RlPikuPC9kZD4KCQk8ZGQ+RXhhbXBs ZTogPGNvZGU+Y3VzdG9tPSZxdW90O2N1c3RvbV8zOmxpa2U6TGlvbiUsIGN1c3RvbV82OkNo ZXNzaW5ndG9uJnF1b3Q7PC9jb2RlPiB3b3VsZCBhZGQgPGNvZGU+QU5EIGN1c3RvbV8zIGxp a2UgJiMzOTtMaW9uJSYjMzk7IEFORCBjdXN0b21fNj0mIzM5O0NoZXNzaW5ndG9uJiMzOTs8 L2NvZGU+IHRvIHRoZSBkYXRhYmFzZSBxdWVyeS48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+cGFyYW1fZGVsaW08L3NwYW4+PC9kdD4KCQk8ZGQ+QWx0ZXIgdGhlIHNlcGFyYXRv ciBjaGFyYWN0ZXIocykgYmV0d2VlbiBmaWVsZC1jbGF1c2UgaXRlbXMgaW4gdGhlIDxjb2Rl PmN1c3RvbTwvY29kZT4gYXR0cmlidXRlLjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGNvbG9uICg6 KTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPjwvZHQ+CgkJPGRk PkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50IHR5cGVzIHRvIGRpc3BsYXkuIE9wdGlv bnM6Cgk8ZGw+CgkJPGRkPnN0YW5kYXJkPC9kZD4KCQk8ZGQ+cmVjdXI8L2RkPgoJCTxkZD5t dWx0aTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHN0YW5kYXJkLCByZWN1ciwg bXVsdGk8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+YWxsc3Bhbm5lZDwvc3Bhbj48 L2R0PgoJCTxkZD5Db250cm9sIGRpc3BsYXkgb2Ygc3Bhbm5lZCBldmVudHM6PC9kZD4KCQk8 ZGQ+MDogYW55IGV2ZW50IHRoYXQgaGFzIGEgc3RhcnQgZGF0ZSBpbiB0aGUgcGFzdCB3aWxs IGJlIG9taXR0ZWQgZnJvbSB0aGUgbGlzdDwvZGQ+CgkJPGRkPjE6IGRpc3BsYXkgcmVtYWlu aW5nIGRheXMgZnJvbSBzcGFubmVkIGV2ZW50cyB0aGF0IGJlZ2FuIGluIHRoZSBwYXN0PC9k ZD4KCQk8ZGQ+RXhhbXBsZTogdXNlIDxjb2RlPmFsbHNwYW5uZWQ9JnF1b3Q7MSZxdW90Ozwv Y29kZT4gaWYgeW91IGFyZSBsaXN0aW5nIHJlbWFpbmluZyBwZXJmb3JtYW5jZSBkYXRlcyBm cm9tIGEgQnJvYWR3YXkgc2hvdyYjODIxNztzIHNjaGVkdWxlIHRoYXQgc3RhcnRlZCBzb21l IG1vbnRocyBhZ28uPC9kZD4KCQk8ZGQ+RGVmYXVsdDogMDwvZGQ+CgkJPGR0PjxzcGFuIGNs YXNzPSJhdG5tIj5tb250aDwvc3Bhbj48L2R0PgoJCTxkZD5Pbmx5IHNob3cgZXZlbnRzIHRo YXQgb2NjdXIgaW4gdGhlIGdpdmVuIDxzcGFuIGNsYXNzPSJjYXBzIj5ZWVlZPC9zcGFuPi1t bTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5mcm9tPC9zcGFuPjwvZHQ+CgkJPGRk Pk9ubHkgc2hvdyBldmVudHMgd2l0aCBQb3N0ZWQgZGF0ZWQgYmVnaW5uaW5nIGFmdGVyIHRo aXMgc3RhcnQgZGF0ZS4gQ2FuIGJlIGFueSB2YWxpZCBkYXRlIGZvcm1hdDwvZGQ+CgkJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj50bzwvc3Bhbj48L2R0PgoJCTxkZD5Pbmx5IHNob3cgZXZl bnRzIHdpdGggUG9zdGVkIGRhdGVzIHVwIHRvIHRoaXMgZW5kIGRhdGUuIENhbiBiZSBhbnkg dmFsaWQgZGF0ZSBmb3JtYXQ8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c29ydDwv c3Bhbj48L2R0PgoJCTxkZD5PcmRlciB0aGUgZXZlbnRzIGJ5IHRoaXMgY29sdW1uIChjYXNl LXNlbnNpdGl2ZSkgYW5kIHNvcnQgZGlyZWN0aW9uIChhc2Mgb3IgZGVzYyk8L2RkPgoJCTxk ZD5EZWZhdWx0OiBQb3N0ZWQgYXNjPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmZv cm08L3NwYW4+PC9kdD4KCQk8ZGQ+UGFzcyBlYWNoIG1hdGNoaW5nIGV2ZW50IHRvIHRoZSBn aXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtLiBOb3RlIHRoYXQgdXNp bmcgYSBjb250YWluZXIgb3ZlcnJpZGVzIHRoaXMgYXR0cmlidXRlLCBhbmQgaWYgeW91IHNw ZWNpZnkgbmVpdGhlciBhIGZvcm0gbm9yIGNvbnRhaW5lciwgeW91IHdpbGwgc2VlIGEgbGlz dCBvZiBhcnRpY2xlIFBvc3RlZCBkYXRlczwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5t Ij5wYWdpbmc8L3NwYW4+PC9kdD4KCQk8ZGQ+VW5saWtlIGFydGljbGVfY3VzdG9tLCBldmVu dHMgZnJvbSB0aGUgc21kX2FydGljbGVfZXZlbnQgdGFnIG1heSBiZSBwYWdlZCB1c2luZyA8 Y29kZT4mbHQ7dHhwOm9sZGVyIC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDpuZXdl ciAvJmd0OzwvY29kZT4uIEJ1dCBpZiB5b3Ugd2lzaCB0byBzaG93IGFuIGV2ZW50IGxpc3Qg b24gdGhlIHNhbWUgcGFnZSBhcyBhIHN0YW5kYXJkIGFydGljbGUgbGlzdCwgdGhlIG9sZGVy L25ld2VyIHRhZ3Mgd2lsbCBuYXZpZ2F0ZSBib3RoIGxpc3RzIHNpbXVsdGFuZW91c2x5LiBV bmRlciB0aGlzIGNpcmN1bXN0YW5jZSB5b3UgbWF5IG5lZWQgdG8gdHVybiBwYWdpbmcgb2Zm ICgwKS4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+MCAob2ZmKTwvZGQ+CgkJPGRkPjEgKG9uKTwv ZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDE8L2RkPgoJCTxkdD48c3BhbiBjbGFz cz0iYXRubSI+b2Zmc2V0PC9zcGFuPjwvZHQ+CgkJPGRkPkJlZ2luIGRpc3BsYXlpbmcgZXZl bnRzIGZyb20gdGhpcyBudW1lcmljIHBvc2l0aW9uLCBpbnN0ZWFkIG9mIGZyb20gdGhlIHN0 YXJ0IG9mIHRoZSBsaXN0IG9mIGV2ZW50czwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2RkPgoJ CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bGltaXQ8L3NwYW4+PC9kdD4KCQk8ZGQ+SW5seSBz aG93IHRoaXMgbWFueSBldmVudHMgbWF4aW11bSA8c3Ryb25nPnBlciBwYWdlPC9zdHJvbmc+ LCBpLmUuIHRoZSBudW1iZXIgb2YgZXZlbnRzIHRvIGRpc3BsYXksIHdoZXRoZXIgdGhleSBj b21lIGZyb20gb25lICYjODIxNjtyZWFsJiM4MjE3OyBhcnRpY2xlIG9yIG1hbnk8L2RkPgoJ CTxkZD5EZWZhdWx0OiAxMDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudGxp bWl0PC9zcGFuPjwvZHQ+CgkJPGRkPk9ubHkgc2hvdyB0aGlzIG1hbnkgZXZlbnRzIG1heGlt dW0gPHN0cm9uZz5wZXIgZXZlbnQ8L3N0cm9uZz48L2RkPgoJCTxkZD5FeGFtcGxlOiBpZiB5 b3UgaGF2ZSBhIHdlZWtseSByZXBlYXRlZCBldmVudCB0aGF0IGxhc3RzIGZvciBmb3VyIG1v bnRocyBhbmQgeW91IHNldCA8Y29kZT5ldmVudGxpbWl0PSZxdW90OzYmcXVvdDs8L2NvZGU+ IHlvdSB3aWxsIG9ubHkgc2VlIGEgbWF4aW11bSBvZiA2IGV2ZW50cyBmcm9tIGV2ZXJ5IGFy dGljbGUgY29udGFpbmluZyByZXBldGl0aW9uLiBUaGUgcmFuZ2UgKHN0YXJ0IGFuZCBlbmQg ZGF0ZSkgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBwbHVnaW4gYXR0cmlidXRlczwvZGQ+CgkJ PGRkPkRlZmF1bHQ6IDEwPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnBhZ2VieTwv c3Bhbj48L2R0PgoJCTxkZD5Fc290ZXJpYyBwYWdpbmcgZmVhdHVyZSwgaWRlbnRpY2FsIHRv IDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0OzwvY29kZT48L2RkPgoJCTxkZD5EZWZhdWx0 OiBzYW1lIGFzIDxjb2RlPmxpbWl0PC9jb2RlPjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5wZ29ubHk8L3NwYW4+PC9kdD4KCQk8ZGQ+U2V0IHRvIDEgdG8gcGVyZm9ybSB0aGUg cGFnaW5nIGFjdGlvbiB3aXRob3V0IGRpc3BsYXlpbmcgYW55dGhpbmcuIFByb2JhYmx5IHVz ZWxlc3M8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj48L2R0 PgoJCTxkZD5UaGUgKFgpSFRNTCB0YWcsIHdpdGhvdXQgYnJhY2tldHMsIHRvIHdyYXAgdGhl IGxpc3QgaW48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+PC9k dD4KCQk8ZGQ+VGhlIChYKUhUTUwgdGFnIHRvIHNlcGFyYXRlIGVhY2ggaXRlbSB3aXRoPC9k ZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPjwvZHQ+CgkJPGRkPlRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBhcHBseSB0byB0aGUg PGNvZGU+d3JhcHRhZzwvY29kZT48L2RkPgoJPC9kbD4KCgk8aDM+VGhlIHNtZF9hcnRpY2xl X2V2ZW50IHRhZyBwcm9jZXNzPC9oMz4KCgk8cD5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0 aGlzIHRhZyBleGVjdXRlcyBpbiAzLXBoYXNlczo8L3A+CgoJPG9sPgoJCTxsaT5QcmUtZmls dGVyOiBhbGwgZXZlbnRzIHRoYXQgbWF0Y2ggPGNvZGU+dHlwZTwvY29kZT4sIDxjb2RlPmNh dGVnb3J5PC9jb2RlPiwgPGNvZGU+c2VjdGlvbjwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29k ZT4sIDxjb2RlPnN0YXR1czwvY29kZT4sIDxjb2RlPmlkPC9jb2RlPiwgYW5kIDxjb2RlPmV4 cGlyZWQ8L2NvZGU+IGFyZSBleHRyYWN0ZWQ8L2xpPgoJCTxsaT5UaW1lLWZpbHRlcjogYW55 ICYjODIyMDt0aW1lLWJhc2VkJiM4MjIxOyBhdHRyaWJ1dGVzIGFyZSB0aGVuIGFwcGxpZWQg dG8gdGhlIGFib3ZlIGxpc3QuIEF0IHRoaXMgcG9pbnQsIGFueSA8Y29kZT5leHRyYWZpZWxk PC9jb2RlPiwgPGNvZGU+c3RlcGZpZWxkPC9jb2RlPiwgPGNvZGU+b21pdGZpZWxkPC9jb2Rl Piwgb3IgPGNvZGU+c2tpcGZpZWxkPC9jb2RlPiBhcmUgY2FsY3VsYXRlZCB0byBmaW5kIHJl cGVhdGVkIGRhdGVzICh1cCB0byBhcyBtYW55IGFzIDxjb2RlPmV2ZW50bGltaXQ8L2NvZGU+ IGFsbG93cyBvciB0aGUgY2FsY3VsYXRpb24gZXhjZWVkcyB0aGUgZXZlbnQmIzgyMTc7cyBl eHBpcnkgdGltZSkuIFRoZSBhdHRyaWJ1dGVzIDxjb2RlPnRpbWU8L2NvZGU+LCA8Y29kZT5t b250aDwvY29kZT4sIDxjb2RlPmZyb208L2NvZGU+LCBhbmQgPGNvZGU+dG88L2NvZGU+IGFy ZSB1c2VkIHRvIHJlZmluZSB0aGUgZmlsdHJhdGlvbiBoZXJlPC9saT4KCQk8bGk+T3V0cHV0 OiB3aGF0ZXZlciB0aGUgcHJldmlvdXMgcGhhc2VzIGhhdmUgbGVmdCBiZWhpbmQgaXMgc3Vi amVjdCB0byBhbnkgPGNvZGU+cGFnaW5nPC9jb2RlPiwgPGNvZGU+b2Zmc2V0PC9jb2RlPiBh bmQgPGNvZGU+bGltaXQ8L2NvZGU+IHlvdSBtYXkgaGF2ZSBzcGVjaWZpZWQsIHRoZW4gd3Jh cHBlZCBhbmQgZGlzcGxheWVkPC9saT4KCTwvb2w+CgoJPGgyIGlkPSJldmVudGluZm8iPlRh ZzogPGNvZGU+Jmx0O3R4cDpzbWRfZXZlbnRfaW5mbyAvJmd0OzwvY29kZT48L2gyPgoKCTxw PklkZW50aWNhbCB0YWcgdG8gPGEgaHJlZj0iI2NhbGluZm8iIHN0eWxlPSJ0ZXh0LWFsaWdu OmxlZnQ7Ij50eHA6c21kX2NhbGluZm8gLyZndDs8L2E+IGJ1dCBmb3IgdXNlIGluc2lkZSA8 Y29kZT4mbHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IC8mZ3Q7PC9jb2RlPi48L3A+CgoJPGgy IGNsYXNzPSJleGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKCTxoMyBpZD0iZWcxIj5FeGFtcGxl IDE6IGJhc2ljIGNhbGVuZGFyPC9oMz4KCgk8cD5Zb3UgaGF2ZSB0aGUgZW50aXJlIGFyc2Vu YWwgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncyBhdmFpbGFibGUgdG8g eW91IGluIGEgY2FsZW5kYXIuIFRodXMgeW91IGNhbiBzZXQgdGhlIGFydGljbGUmIzgyMTc7 cyBzdGFydCBhbmQgZW5kIGRhdGVzIHRvIHRoZSBzYW1lIGRheSBhbmQgc2V0IHRoZSBzdGFy dCBhbmQgZW5kIHRpbWVzIHRvIGluZGljYXRlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBl dmVudC4gWW91IGNhbiB0aGVuIHVzZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOnBvc3RlZCAv Jmd0OzwvY29kZT4gb3IgPGNvZGU+Jmx0O3R4cDpleHBpcmVzIC8mZ3Q7PC9jb2RlPiB0YWdz IHdpdGggdmFyaW91cyA8Y29kZT5mb3JtYXQ8L2NvZGU+IHN0cmluZ3MgdG8gcmVuZGVyIHRo ZSBldmVudCYjODIxNztzIGNyaXRlcmlhLjwvcD4KCgk8cD5TaW1pbGFybHkgeW91IGNhbiB1 c2UgYW55IG90aGVyIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgdG8gc2hv dyBhcyBtdWNoIG9yIGFzIGxpdHRsZSBkZXRhaWwgYXMgeW91IGxpa2UgaW4gdGhlIGNhbGVu ZGFyIGNlbGwuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Jmx0O3R4cDpzbWRfY2FsZW5kYXIgc2VjdGlvbj0mcXVvdDtldmVudHMmcXVvdDsmZ3Q7CiZs dDtkaXYmZ3Q7CiAgIEV2ZW50OiAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUg LyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0O2JyIC8mZ3Q7Jmx0O3R4cDpleGNl cnB0IC8mZ3Q7CiZsdDsvZGl2Jmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O2V2dGltZSZxdW90 OyZndDsKICAgU3RhcnQ6ICZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDslSDolTSZxdW90 OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUmcXVvdDsm Z3Q7CiAgIEVuZDogJmx0O3R4cDpleHBpcmVzIGZvcm1hdD0mcXVvdDslSDolTSZxdW90OyAv Jmd0OwombHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8L2NvZGU+PC9w cmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjogY29uZGl0aW9uYWwgY2FsZW5kYXI8L2gz PgoKCTxwPlVzaW5nIHRoZSBjb25kaXRpb25hbCB0YWcgeW91IGNhbiB0YWtlIGFjdGlvbiBp ZiBjZXJ0YWluIGV2ZW50cyBjb250YWluIHBhcnRpY3VsYXIgZmxhZ3MuIFRoaXMgZXhhbXBs ZSBhbHNvIHNob3dzIGEgY29tcGxldGVseSB1c2VsZXNzIG1hbm5lciBvZiBlbXBsb3lpbmcg PGNvZGU+Jmx0O3R4cDpzbWRfY2FsX25vdyAvJmd0OzwvY29kZT4uPC9wPgoKPHByZSBjbGFz cz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+VGltZSBpczogJmx0O3R4cDpzbWRfY2Fs X25vdyBmb3JtYXQ9JnF1b3Q7JVQmcXVvdDsgLyZndDsKJmx0O3R4cDpzbWRfY2FsZW5kYXIg Zm9ybT0mcXVvdDtldmZvcm0mcXVvdDsKICAgICBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzMm cXVvdDsgc2tpcGZpZWxkPSZxdW90O2N1c3RvbV82JnF1b3Q7CiAgICAgc3BhbmZvcm09JnF1 b3Q7bXVsdGlzJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5JbiBmb3JtIDxjb2Rl PmV2Zm9ybTwvY29kZT46PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJi bG9jayI+Jmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7cmVjdXImcXVvdDsmZ3Q7CiAg Jmx0O3R4cDpwZXJtbGluayZndDsoUkVDVVIpJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZsdDt0 eHA6ZWxzZSAvJmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZn dDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1 b3Q7bXVsdGlmaXJzdCZxdW90OyZndDsKICAgICAgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7cmln aHQmcXVvdDsmZ3Q7JmFtcDtsYXF1bzstLSZsdDsvc3BhbiZndDsKICAgJmx0Oy90eHA6c21k X2lmX2NhbCZndDsKICAgJmx0O3R4cDpzbWRfaWZfY2FsIGZsYWc9JnF1b3Q7cmVjdXJmaXJz dCZxdW90OyZndDsKICAgICAgJmx0O3NwYW4mZ3Q7T25lIG9mIG1hbnkuLi4mbHQ7L3NwYW4m Z3Q7CiAgICZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7 CjwvY29kZT48L3ByZT4KCgk8cD5BbmQgaW4gZm9ybSA8Y29kZT5tdWx0aXM8L2NvZGU+Ojwv cD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21k X2lmX2NhbCBmbGFnPSZxdW90O211bHRpLCBtdWx0aXByZXYmcXVvdDsmZ3Q7CiAgICZsdDt0 eHA6cGVybWxpbmsmZ3Q7LS0mYW1wO3JhcXVvOy0tJmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiZs dDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O211 bHRpbGFzdCZxdW90OyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0O3Nw YW4gY2xhc3M9JnF1b3Q7bGVmdCZxdW90OyZndDstLSZhbXA7cmFxdW87Jmx0Oy9zcGFuJmd0 OyBFTkQgJmx0O3R4cDp0aXRsZSAvJmd0OwogICAmbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0 Oy90eHA6c21kX2lmX2NhbCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGljZSB0aGF0IDxj b2RlPm11bHRpZmlyc3Q8L2NvZGU+IGlzIHRlc3RlZCBpbnNpZGUgdGhlIHNhbWUgZm9ybSBh cyBzdGFuZGFyZCBldmVudHMuIFRoaXMgaXMgYmVjYXVzZSBvbmx5IDxlbT5jb250aW51YXRp b24gc3Bhbm5lZCBjZWxsczwvZW0+IGFyZSBwYXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3Jt PC9jb2RlPjsgdGhlIGZpcnN0IGV2ZW50IG9mIGEgc3Bhbm5lZCBncm91cCBpcyBqdXN0IGxp a2UgYW55IHN0YW5kYXJkIGV2ZW50LiBTaW1pbGFybHksIGlmIHlvdSBoYWQgYmVlbiB1c2lu ZyA8Y29kZT5yZWN1cmZvcm08L2NvZGU+IHRoZSBmaXJzdCBldmVudCBvZiB0aGUgcmVjdXJy aW5nIHNldCB3b3VsZCBiZSBwcm9jZXNzZWQgaW4gdGhlIHVzdWFsIGZvcm0vY29udGFpbmVy IGFuZCBldmVyeSBzdWJzZXF1ZW50IGV2ZW50IHdvdWxkIGJlIHBhc3NlZCB0byB0aGUgZGVk aWNhdGVkIGZvcm0uPC9wPgoKCTxoMyBpZD0iZWczIj5FeGFtcGxlIDM6IGNsYXNzZXM8L2gz PgoKCTxwPllvdSBjb3VsZCB1c2UgdGhlIGNhbGVuZGFyIHRhZ3MgdG8gb3V0cHV0IHZhcmlv dXMgcGllY2VzIG9mIGZsYWcgaW5mb3JtYXRpb24gdG8gYnVpbGQgeW91ciBvd24gY2xhc3Mg bmFtZXMuIFRoaXMgZXhhbXBsZSBhbHNvIGRlbW9uc3RyYXRlcyB0aGUgPGNvZGU+aHRtbDwv Y29kZT4gYXR0cmlidXRlIG9mIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZvIC8mZ3Q7PC9j b2RlPiB0byBidWlsZCB1cCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGlzIHBhc3NlZCBhbG9uZyB3 aXRoIGFuIGV2ZW50JiM4MjE3O3MgPGNvZGU+Y2F0ZWdvcnkxPC9jb2RlPiB3aGVuIGEgdmlz aXRvciBjbGlja3MgdGhlIGFuY2hvci48L3A+CgoJPHA+VGhpcyBhbGxvd3MgeW91ciBzaXRl IHZpc2l0b3JzIHRvIGZpbHRlciBldmVudHMgYnkgY2F0ZWdvcnkgd2hpbGUgcmV0YWluaW5n IHRoZSBhYmlsaXR5IHRvIHNob3cgdGhlIGNhbGVuZGFyIGZvciB0aGUgY3VycmVudCBtb250 aC95ZWFyIGFuZCBzZWN0aW9uIHRoZXkgYXJlIHZpZXdpbmcgaW5zdGVhZCBvZiBkcm9wcGlu ZyBiYWNrIHRvIHRoZSBjdXJyZW50IG1vbnRoL3llYXIgbGlrZSBvdGhlciBjYWxlbmRhciBz eXN0ZW1zIG9mdGVuIGRvLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0i YmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFyIGlzb3dlZWtzPSZxdW90O1dFRUsjJnF1b3Q7 CiAgICAgeWVhcndpZHRoPSZxdW90OzAsMiZxdW90OyBzZWxlY3Q9JnF1b3Q7eWVhciwgbW9u dGgmcXVvdDsKICAgICBzdGVwZmllbGQ9JnF1b3Q7Y3VzdG9tXzEmcXVvdDsgc2tpcGZpZWxk PSZxdW90O2N1c3RvbV8yJnF1b3Q7CiAgICAgc2hvd3NraXBwZWQ9JnF1b3Q7MSZxdW90OyBl eHBpcmVkPSZxdW90OzEmcXVvdDsmZ3Q7CiAgICZsdDtzcGFuIGNsYXNzPSZxdW90OyZsdDt0 eHA6c21kX2NhbF9pbmZvIGpvaW49JnF1b3Q7IGNhbF8mcXVvdDsgLyZndDsmcXVvdDsmZ3Q7 CiAgICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhw OnBlcm1saW5rJmd0OwogICAgICAmbHQ7YSBocmVmPSZxdW90Oz9jPSZsdDt0eHA6Y2F0ZWdv cnkxCiAgICAgICAgIC8mZ3Q7JmFtcDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90 O3MsIHllYXIsCiAgICAgICAgIG1vbnRoLCBjYWxpZCZxdW90OyBodG1sPSZxdW90OzEmcXVv dDsgam9pbl9wcmVmaXg9JnF1b3Q7JnF1b3Q7CiAgICAgICAgIC8mZ3Q7JnF1b3Q7Jmd0OyZs dDt0eHA6Y2F0ZWdvcnkxIHRpdGxlPSZxdW90OzEmcXVvdDsgLyZndDsmbHQ7L2EmZ3Q7CiAg ICZsdDsvc3BhbiZndDsKJmx0Oy90eHA6c21kX2NhbGVuZGFyJmd0Owo8L2NvZGU+PC9wcmU+ CgoJPHA+V2hhdCBpcyBhbHNvIHVzZWZ1bCBhYm91dCB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRf Y2FsX2luZm8gLyZndDs8L2NvZGU+IHRhZyBpcyB0aGF0IGlmIGEgcGFydGljdWxhciB2YWx1 ZSBpcyBub3Qgc2V0IGl0IHdpbGwgPGVtPm5vdDwvZW0+IGJlIGluY2x1ZGVkIGluIHRoZSBv dXRwdXQuPC9wPgoKCTxoMyBpZD0iZWc0Ij5FeGFtcGxlIDQ6IHVwY29taW5nIGV2ZW50czwv aDM+CgoJPHA+TGlzdCB0aGUgbmV4dCA1IHVwY29taW5nICYjODIxMjsgcmVjdXJyaW5nICYj ODIxMjsgZXZlbnRzLCBwbHVzIGFueSBzdGFuZGFyZCBhbmQgc3Bhbm5lZCBldmVudHMsIGZv cm1hdHRpbmcgdGhlbSBhcyBhIGRlZmluaXRpb24gbGlzdC48L3A+Cgo8cHJlIGNsYXNzPSJi bG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aDImZ3Q7VXBjb21pbmcgRXZlbnRzJmx0 Oy9oMiZndDsKJmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCBzdGVwZmllbGQ9JnF1b3Q7Y3Vz dG9tXzEmcXVvdDsKICAgICB3cmFwdGFnPSZxdW90O2RsJnF1b3Q7IHRpbWU9JnF1b3Q7ZnV0 dXJlJnF1b3Q7IGV2ZW50bGltaXQ9JnF1b3Q7NSZxdW90OyZndDsKICAgJmx0O3R4cDppZl9k aWZmZXJlbnQmZ3Q7CiAgICAgJmx0O2R0Jmd0OyZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVv dDslQiAlWSZxdW90OyAvJmd0OyZsdDsvZHQmZ3Q7CiAgICZsdDsvdHhwOmlmX2RpZmZlcmVu dCZndDsKICAgJmx0O2RkJmd0OwogICAgICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6 dGl0bGUvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAgICAmbHQ7dHhwOnBvc3RlZCAv Jmd0OwogICAmbHQ7L2RkJmd0OwombHQ7L3R4cDpzbWRfYXJ0aWNsZV9ldmVudCZndDsKPC9j b2RlPjwvcHJlPgoKCTxwPklmIHlvdSBhZGQgcGFnaW5hdGlvbiB0YWdzIHlvdSBjYW4gZmxp cCB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzOyB0aGV5IHdpbGwgYmUgZGlzcGxheWVkIDEwIGF0 IGEgdGltZSBvbiBlYWNoIHBhZ2UgKGlmIHlvdSB3YW50IHRvIGtlZXAgdHJhY2sgb2Ygd2hp Y2ggcGFnZSB5b3UgYXJlIG9uIGFzIHlvdSBmbGlwIHRocm91Z2ggYSBjYWxlbmRhciB0aGF0 IGlzIGluIGEgc2lkZWJhciwgYWRkIDxjb2RlPnBnPC9jb2RlPiB0byB0aGUgPGNvZGU+bWFp bnRhaW48L2NvZGU+IGF0dHJpYnV0ZSBpbiB5b3VyIGNhbGVuZGFyKS48L3A+CgoJPHA+Tm90 ZSB0aGUgaHlwZXJsaW5rZWQgdGl0bGUgc2hvd24gaGVyZSB3aWxsIGp1bXAgdG8gdGhlICYj ODIxNjtyZWFsJiM4MjE3OyBhcnRpY2xlICh0aGUgZmlyc3QgZGF0ZSBpbiB0aGUgcmVjdXJy aW5nIHNldCkgd2hlbiBjbGlja2VkLCBub3QgdG8gYW4gYXJ0aWNsZSB3aXRoIGEgZGF0ZSBt YXRjaGluZyB0aGUgcmVjdXJyZW5jZS48L3A+CgoJPHA+SWYgeW91IHdhbnRlZCB0byBhbGxv dyBwZW9wbGUgdG8gYm9vayBhbiBldmVudCwgdHJ5IHRoaXMgaW4geW91ciBoeXBlcmxpbmtl ZCBpbmRpdmlkdWFsIGFydGljbGU6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNs YXNzPSJibG9jayI+Jmx0O3R4cDppZl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7CiAmbHQ7dHhw OmFydGljbGUgbGltaXQ9JnF1b3Q7MSZxdW90OyZndDsKICAmbHQ7aDMmZ3Q7Jmx0O3R4cDp0 aXRsZSAvJmd0OyZsdDsvaDMmZ3Q7CiAgJmx0O3R4cDpib2R5IC8mZ3Q7CiAgJmx0O3AmZ3Q7 UGxlYXNlIGNob29zZSBhIGRhdGUgdG8gYm9vazombHQ7L3AmZ3Q7CiAgJmx0O3NlbGVjdCZn dDsKICAmbHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21f MSZxdW90OwogICAgdHlwZT0mcXVvdDtyZWN1ciZxdW90OyBpZD0mIzM5OyZsdDt0eHA6YXJ0 aWNsZV9pZCAvJmd0OyYjMzk7Jmd0OwogICAgJmx0O29wdGlvbgogICAgIHZhbHVlPSYjMzk7 Jmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90OyVHLSVtLSVkJnF1b3Q7LyZndDsmIzM5OyZn dDsKICAgICAgJmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90OyVtICVkLCAkRyZxdW90OyAv Jmd0OwogICAgJmx0Oy9vcHRpb24mZ3Q7CiAgJmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQm Z3Q7CiAgJmx0Oy9zZWxlY3QmZ3Q7CiAmbHQ7L3R4cDphcnRpY2xlJmd0OwombHQ7L3R4cDpp Zl9pbmRpdmlkdWFsX2FydGljbGUmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5XaXRoIHNvbWUg Y3VubmluZyB5b3UgY291bGQgZXZlbiBhZGQgdGhlICYjODIxNjt2aXJ0dWFsJiM4MjE3OyBk YXRlIHRoYXQgdGhleSBjaG9zZSBpbiB5b3VyIG9yaWdpbmFsIHNtZF9hcnRpY2xlX2V2ZW50 IGxpc3QgYW5kIHBhc3MgaXQgYXMgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2 YXJpYWJsZSB0byB5b3VyIGluZGl2aWR1YWwgYXJ0aWNsZSB3aGVyZSB5b3UgY291bGQgcmVh ZCB0aGUgdmFsdWUgYW5kIHByZS1zZWxlY3QgdGhlIGRhdGUgaW4gdGhlIHNlbGVjdCBsaXN0 IGZvciB0aGUgdmlzdG9yLjwvcD4KCgk8aDMgaWQ9ImVnNSI+RXhhbXBsZSA1OiBpQ2FsIHN5 bmNocm9uaXNhdGlvbjwvaDM+CgoJPHA+SG93IGFib3V0IGJlaW5nIGFibGUgdG8gb3V0cHV0 IHlvdXIgZXZlbnRzIGluIGlDYWwgZm9ybWF0IHNvIG90aGVyIHBlb3BsZSBjYW4gc3luYyB0 aGVpciBjYWxlbmRhcnMgdG8geW91cnM/IFB1dCB0aGlzIGluIGEgbmV3IFBhZ2UgdGVtcGxh dGUgaW4gaXRzIG93biBTZWN0aW9uOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPkJFR0lOOlZDQUxFTkRBUgpWRVJTSU9OOjIuMApYLVdSLUNBTE5BTUU6 R2lncyBDYWxlbmRhcgpQUk9ESUQ6LS8vQXBwbGUgQ29tcHV0ZXIsIEluYy8vaUNhbCAxLjUv L0VOClgtV1ItVElNRVpPTkU6RXVyb3BlL0xvbmRvbgombHQ7dHhwOnNtZF9hcnRpY2xlX2V2 ZW50IGZvcm09JnF1b3Q7aWNzaXRlbSZxdW90OyB0aW1lPSZxdW90O2FueSZxdW90OwpzZWN0 aW9uPSZxdW90O2dpZ3MmcXVvdDsgbGltaXQ9JnF1b3Q7MTAwMCZxdW90OyZndDsKIEJFR0lO OlZFVkVOVAogRFRTVEFSVDombHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JVklbSVkVCVI JWklcyZxdW90OyAvJmd0OwogRFRFTkQ6Jmx0O3R4cDpleHBpcmVzIGZvcm1hdD0mcXVvdDsl WSVtJWRUJUglaSVzJnF1b3Q7IC8mZ3Q7CiBTVU1NQVJZOiZsdDt0eHA6dGl0bGUgLyZndDsK IEVORDpWRVZFTlQKJmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQmZ3Q7CkVORDpWQ0FMRU5E QVIKPC9jb2RlPjwvcHJlPgoKCTxwPlRoYXQgd2lsbCBvdXRwdXQgYW4gaUNhbC1mb3JtYXR0 ZWQgZ2lnIGxpc3QgKHJlcGVhdGVkIG9yIG90aGVyd2lzZSkuIElmIHlvdSBnb3QgZnJlYWt5 IHdpdGggaXQgYW5kIGFkZGVkIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgaW5zaWRlIHRoZSB0 ZW1wbGF0ZSB5b3UgY291bGQgZXZlbiByZWFkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IHZhcmlhYmxlcyBhbmQgcGx1ZyB0aGVtIGluLiBUaHVzIHlvdSBjb3VsZCBsaW5r IHRvIGl0IGRpcmVjdGx5IG9mZiB0aGUgY2FsZW5kYXIgaXRzZWxmLCBwYXNzIGluIHRoZSBz ZWN0aW9uLCBjYXRlZ29yeSBvciBldmVudCBpbmZvIGFuZCBoYXZlIGEgY3VzdG9taXNlZCBp Q2FsIHN0cmVhbSBwdW1wZWQgb3V0IG9mIFRleHRwYXR0ZXJuLjwvcD4KCgk8cD5UaGFua3Mg dG8gd29vZiBmb3IgYnJpbmdpbmcgdGhlIG9yaWdpbmFsIDxhIGhyZWY9Imh0dHA6Ly9kZS1v bmxpbmUuY28udWsvMjAwNi8wNS8wNS90ZXh0cGF0dGVybi1hbmQtaWNhbCI+RGF2aWQgRW1l cnk8L2E+IGFydGljbGUgdG8gbXkgYXR0ZW50aW9uLjwvcD4KCgk8aDMgaWQ9ImVnNiI+RXhh bXBsZSA2OiByZWRlZmluaW5nIG5vdzwvaDM+CgoJPHA+VXNpbmcgdGhlIDxjb2RlPm5vdzwv Y29kZT4gYW5kIDxjb2RlPm9mZnNldDwvY29kZT4gYXR0cmlidXRlcyBvZiA8Y29kZT4mbHQ7 dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9jb2RlPiB5b3UgY2FuIGVmZmVjdGl2ZWx5IHNldCAm IzgyMTY7bm93JiM4MjE3OyB0byBiZSBhbnkgdGltZSB5b3UgbGlrZSBhbmQgbWFrZSBjYWxj dWxhdGlvbnMgYmFzZWQgb24gYSBwYXJ0aWN1bGFyIGRhdGUuPC9wPgoKCTxwPlBsdWdnaW5n IHRoZSA8Y29kZT4/bW9udGg8L2NvZGU+IGFuZCA8Y29kZT4/eWVhcjwvY29kZT4gY29kZXMg aW4gYWxsb3dzIHlvdSB0byBtYWtlIDxjb2RlPiZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQg LyZndDs8L2NvZGU+IHRyYWNrIHRoZSBjYWxlbmRhci4gU28geW91IGNhbiBhdXRvbWF0aWNh bGx5IHNob3cgb25seSB0aGUgZXZlbnRzIHRoYXQgb2NjdXIgaW4gdGhlIG1vbnRoIHRoZSB2 aXNpdG9yIGlzIGJyb3dzaW5nIHZpYSB0aGUgY2FsZW5kYXI6PC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgc3RlcGZp ZWxkPSZxdW90O2N1c3RvbV8xJnF1b3Q7IC8mZ3Q7CiZsdDtoMiZndDtFdmVudHMgdGhpcyBt b250aCZsdDsvaDImZ3Q7CiZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQgc3RlcGZpZWxkPSZx dW90O2N1c3RvbV8xJnF1b3Q7CiAgICAgZnJvbT0mIzM5OyZsdDt0eHA6c21kX2NhbF9ub3cg bm93PSZxdW90OzAxLT9tb250aC0/eWVhciZxdW90OyAvJmd0OyYjMzk7CiAgICAgdG89JiMz OTsmbHQ7dHhwOnNtZF9jYWxfbm93IG5vdz0mcXVvdDs/bW9udGgtP3llYXImcXVvdDsKICAg ICAgICBvZmZzZXQ9JnF1b3Q7MSBtb250aCZxdW90OyAvJmd0OyYjMzk7IHRpbWU9JnF1b3Q7 YW55JnF1b3Q7IHdyYXB0YWc9JnF1b3Q7dWwmcXVvdDsmZ3Q7CiZsdDtsaSZndDsmbHQ7dHhw OnBlcm1saW5rJmd0OyZsdDtiJmd0OyZsdDt0eHA6dGl0bGUvJmd0OyZsdDsvYiZndDsmbHQ7 L3R4cDpwZXJtbGluayZndDsmbHQ7L2xpJmd0OwombHQ7L3R4cDpzbWRfYXJ0aWNsZV9ldmVu dCZndDsKPC9jb2RlPjwvcHJlPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1Mg KioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdo dDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUl LzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNv bG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9u dC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNwbGF5OmJsb2Nr OyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEg eyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGln bjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBi bGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlm OyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsg bGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDsgdGV4dC1kZWNvcmF0aW9u OnVuZGVybGluZTsgfQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNh bnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRleHQt dHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6 Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHgg ZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWdu OmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7 IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7 IHBhZGRpbmc6LjVlbTsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJl OyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7 IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2lu LXRvcDo1cHg7IH0KI3NtZF9oZWxwIGRsIGRkIHsgbWFyZ2luOjJweCAxNXB4OyB9CiNzbWRf aGVscCBkbCBkZDpiZWZvcmUgeyBjb250ZW50OiAiXDIxZDJcMDBhMCI7IH0KI3NtZF9oZWxw IGRsIGRkIGRsIHsgcGFkZGluZzogMCAxNXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQ TFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiZmIxNDI1YTAxMWE1NWRmMGZh OTFlMDJkNjM4NDhmMTAiO30=